<?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>203286</bug_id>
          
          <creation_ts>2019-10-22 23:01:57 -0700</creation_ts>
          <short_desc>Add a mechanism to find and manipulate text by paragraphs</short_desc>
          <delta_ts>2019-10-24 17:08:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>annulen</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jberlin</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>jlewis3</cc>
    
    <cc>kangil.han</cc>
    
    <cc>mifenton</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1582746</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-22 23:01:57 -0700</bug_when>
    <thetext>Create a mechanism to find &amp; replace paragraph of text in a WebPage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582762</commentid>
    <comment_count>1</comment_count>
      <attachid>381664</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-23 00:48:46 -0700</bug_when>
    <thetext>Created attachment 381664
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583023</commentid>
    <comment_count>2</comment_count>
      <attachid>381728</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-23 14:22:21 -0700</bug_when>
    <thetext>Created attachment 381728
WIP2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583079</commentid>
    <comment_count>3</comment_count>
      <attachid>381739</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-23 15:22:15 -0700</bug_when>
    <thetext>Created attachment 381739
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583107</commentid>
    <comment_count>4</comment_count>
      <attachid>381745</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-23 15:45:57 -0700</bug_when>
    <thetext>Created attachment 381745
More build fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583170</commentid>
    <comment_count>5</comment_count>
      <attachid>381745</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2019-10-23 17:42:16 -0700</bug_when>
    <thetext>Comment on attachment 381745
More build fixes

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

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:7468
&gt; +    WebCore::FrameIdentifier frameID;

Just a frame ID isn&apos;t enough to be globally unique. See ElementContext; I think you want a pageIdentifier as well. Or maybe a GlobalFrameIdentifier

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:7505
&gt; +        NSMutableArray *wkTokens = [NSMutableArray arrayWithCapacity: tokens.size()];

No space after :

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:7508
&gt; +            wkToken.get().identifier = String::number(token.identifier.toUInt64());

I (and some others) generally prefer [wkToken setIdentifier:] in the RetainPtr case (without a get()), but you can go either way.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKTextManipulationDelegate.h:37
&gt; +- (void)_webView:(WKWebView *)webView didFindItem:(_WKTextManipulationItem *)item forFrame:(_WKFrameHandle *)frame;

This sounds like find-in-page. Can it have a more specific name that&apos;s less likely to overlap?

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKTextManipulationItem.h:34
&gt; +

You probably want to NS_UNAVAILABLE -init.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKTextManipulationItem.mm:42
&gt; +    _identifier = identifier;
&gt; +    _tokens = tokens;

Should these copy the incoming objects?

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKTextManipulationToken.mm:29
&gt; +#import &lt;wtf/RetainPtr.h&gt;

Why?

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKTextManipulationToken.mm:32
&gt; +@implementation _WKTextManipulationToken {
&gt; +}

No need for these braces

&gt; Source/WebKit/WebKit.xcodeproj/project.pbxproj:11245
&gt; +				9B02E0D1235EBCCA004044B2 /* _WKTextManipulationItem.mm in Sources */,
&gt; +				9B02E0CF235EBB14004044B2 /* _WKTextManipulationToken.mm in Sources */,

These should not be here (uncheck them in the Xcode project), they should be in SourcesCocoa.txt or something instead

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:62
&gt; +    [_items.get() addObject:item];

No need for .get() here.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:67
&gt; +    return _items.autorelease();

Really? This means _items will be nil after this. I think you just want .get()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583190</commentid>
    <comment_count>6</comment_count>
      <attachid>381745</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-10-23 19:22:27 -0700</bug_when>
    <thetext>Comment on attachment 381745
More build fixes

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

&gt; Source/WebCore/editing/TextManipulationController.cpp:67
&gt; +                tokensInCurrentParagraph.append(ManipulationToken { m_tokenIdentifier.generate(), currentText.substring(endOfLastNewLine, offsetOfNextNewLine).toString() });

StringView::substring takes (unsigned start, unsigned length). Unless I’m missing something, it would appear that offsetOfNextNewLine isn’t a length.

&gt; Source/WebCore/editing/TextManipulationController.cpp:77
&gt; +                addItem(startOfCurrentParagraph, endOfCurrentParagraph, WTFMove(tokensInCurrentParagraph));

Is it guaranteed that tokensInCurrentParagraph is in a good state after the WTFMove here? I think in these cases where we will reuse the variable later on, we generally prefer to use std::exchange().

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:7464
&gt; +    StringBuilder result;
&gt; +    result.appendNumber(frameID.toUInt64());
&gt; +    result.append(&apos;:&apos;);
&gt; +    result.appendNumber(itemID.toUInt64());
&gt; +    return result.toString();

Nit - could also consider makeString here.

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:7501
&gt; +        auto delegate = retainedSelf.get()._textManipulationDelegate;

Nit - [retainedSelf _textManipulationDelegate]

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:7508
&gt;&gt; +            wkToken.get().identifier = String::number(token.identifier.toUInt64());
&gt; 
&gt; I (and some others) generally prefer [wkToken setIdentifier:] in the RetainPtr case (without a get()), but you can go either way.

(I also have a mild preference for using -[] in this case)

&gt; Source/WebKit/WebProcess/WebPage/WebPage.cpp:6860
&gt; +    auto completeManipulation = [&amp;] () {

Nit - I don’t think you need the () here.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:72
&gt; +namespace TestWebKitAPI {

It might be good to tweak one of these test cases to have two or more line breaks, as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583213</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-23 20:27:15 -0700</bug_when>
    <thetext>(In reply to Tim Horton from comment #5)
&gt; Comment on attachment 381745 [details]
&gt; More build fixes
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=381745&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:7468
&gt; &gt; +    WebCore::FrameIdentifier frameID;
&gt; 
&gt; Just a frame ID isn&apos;t enough to be globally unique. See ElementContext; I
&gt; think you want a pageIdentifier as well. Or maybe a GlobalFrameIdentifier

I don&apos;t think this is true in the absence of process per frame but I&apos;m going to get rid of the frame ID tracking for now since we don&apos;t support subframes at all for now.

&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:7505
&gt; &gt; +        NSMutableArray *wkTokens = [NSMutableArray arrayWithCapacity: tokens.size()];
&gt; 
&gt; No space after :

Fixed.

&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:7508
&gt; &gt; +            wkToken.get().identifier = String::number(token.identifier.toUInt64());
&gt; 
&gt; I (and some others) generally prefer [wkToken setIdentifier:] in the
&gt; RetainPtr case (without a get()), but you can go either way.

Okay. Done.

&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKTextManipulationDelegate.h:37
&gt; &gt; +- (void)_webView:(WKWebView *)webView didFindItem:(_WKTextManipulationItem *)item forFrame:(_WKFrameHandle *)frame;
&gt; 
&gt; This sounds like find-in-page. Can it have a more specific name that&apos;s less
&gt; likely to overlap?

Did rename to didFindTextManipulationItem.

&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKTextManipulationItem.h:34
&gt; &gt; +
&gt; 
&gt; You probably want to NS_UNAVAILABLE -init.

Done.

&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKTextManipulationItem.mm:42
&gt; &gt; +    _identifier = identifier;
&gt; &gt; +    _tokens = tokens;
&gt; 
&gt; Should these copy the incoming objects?

Maybe? I don&apos;t think it matters.

&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKTextManipulationToken.mm:29
&gt; &gt; +#import &lt;wtf/RetainPtr.h&gt;
&gt; 
&gt; Why?

Because I&apos;m using RetainPtr??

&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKTextManipulationToken.mm:32
&gt; &gt; +@implementation _WKTextManipulationToken {
&gt; &gt; +}
&gt; 
&gt; No need for these braces

Okay.

&gt; &gt; Source/WebKit/WebKit.xcodeproj/project.pbxproj:11245
&gt; &gt; +				9B02E0D1235EBCCA004044B2 /* _WKTextManipulationItem.mm in Sources */,
&gt; &gt; +				9B02E0CF235EBB14004044B2 /* _WKTextManipulationToken.mm in Sources */,
&gt; 
&gt; These should not be here (uncheck them in the Xcode project), they should be
&gt; in SourcesCocoa.txt or something instead

Fixed.

&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:62
&gt; &gt; +    [_items.get() addObject:item];
&gt; 
&gt; No need for .get() here.

Removed.

&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:67
&gt; &gt; +    return _items.autorelease();
&gt; 
&gt; Really? This means _items will be nil after this. I think you just want
&gt; .get()?

Fixed. Honestly, I have no idea what this does. It complied and ran LOL. I really shouldn&apos;t be writing any Objective-C code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583215</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-23 20:31:00 -0700</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #6)
&gt; Comment on attachment 381745 [details]
&gt; More build fixes
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=381745&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/TextManipulationController.cpp:67
&gt; &gt; +                tokensInCurrentParagraph.append(ManipulationToken { m_tokenIdentifier.generate(), currentText.substring(endOfLastNewLine, offsetOfNextNewLine).toString() });
&gt; 
&gt; StringView::substring takes (unsigned start, unsigned length). Unless I’m
&gt; missing something, it would appear that offsetOfNextNewLine isn’t a length.

Oops, this is clearly a bug. Will fix &amp; add a test.

&gt; &gt; Source/WebCore/editing/TextManipulationController.cpp:77
&gt; &gt; +                addItem(startOfCurrentParagraph, endOfCurrentParagraph, WTFMove(tokensInCurrentParagraph));
&gt; 
&gt; Is it guaranteed that tokensInCurrentParagraph is in a good state after the
&gt; WTFMove here? I think in these cases where we will reuse the variable later
&gt; on, we generally prefer to use std::exchange().

Yes. WTF::Vector is guaranteed to be in a good state after WTFMove.

&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:7464
&gt; &gt; +    StringBuilder result;
&gt; &gt; +    result.appendNumber(frameID.toUInt64());
&gt; &gt; +    result.append(&apos;:&apos;);
&gt; &gt; +    result.appendNumber(itemID.toUInt64());
&gt; &gt; +    return result.toString();
&gt; 
&gt; Nit - could also consider makeString here.

Removed this code entirely.

&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:7501
&gt; &gt; +        auto delegate = retainedSelf.get()._textManipulationDelegate;
&gt; 
&gt; Nit - [retainedSelf _textManipulationDelegate]

Fixed.

&gt; &gt;&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:7508
&gt; &gt;&gt; +            wkToken.get().identifier = String::number(token.identifier.toUInt64());
&gt; &gt; 
&gt; &gt; I (and some others) generally prefer [wkToken setIdentifier:] in the RetainPtr case (without a get()), but you can go either way.
&gt; 
&gt; (I also have a mild preference for using -[] in this case)

Okay, done that.

&gt; &gt; Source/WebKit/WebProcess/WebPage/WebPage.cpp:6860
&gt; &gt; +    auto completeManipulation = [&amp;] () {
&gt; 
&gt; Nit - I don’t think you need the () here.

Sure. Removed.

&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:72
&gt; &gt; +namespace TestWebKitAPI {
&gt; 
&gt; It might be good to tweak one of these test cases to have two or more line
&gt; breaks, as well.

Some of them already have but I don&apos;t have any test case where a single text node has multiple line breaks (inside pre for example). Will add a test case for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583219</commentid>
    <comment_count>9</comment_count>
      <attachid>381771</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-23 20:58:28 -0700</bug_when>
    <thetext>Created attachment 381771
Addressed review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583220</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-10-23 21:01:31 -0700</bug_when>
    <thetext>&lt;rdar://problem/56566991&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583225</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-23 21:23:25 -0700</bug_when>
    <thetext>Ugh... unified builds strikes again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583226</commentid>
    <comment_count>12</comment_count>
      <attachid>381773</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-23 21:24:17 -0700</bug_when>
    <thetext>Created attachment 381773
iOS build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583227</commentid>
    <comment_count>13</comment_count>
      <attachid>381774</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-23 21:26:53 -0700</bug_when>
    <thetext>Created attachment 381774
iOS build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583355</commentid>
    <comment_count>14</comment_count>
      <attachid>381774</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-10-24 08:31:39 -0700</bug_when>
    <thetext>Comment on attachment 381774
iOS build fix

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

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKTextManipulationDelegate.h:30
&gt; +@class _WKFrameHandle;

Nit - do you need this forward declaration?

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKTextManipulationItem.mm:27
&gt; +#include &quot;config.h&quot;
&gt; +#include &quot;_WKTextManipulationItem.h&quot;

Nit - #include =&gt; #import

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKTextManipulationToken.mm:27
&gt; +#include &quot;config.h&quot;
&gt; +#include &quot;_WKTextManipulationToken.h&quot;

Nit - #include =&gt; #import

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKTextManipulationToken.mm:29
&gt; +#import &lt;wtf/RetainPtr.h&gt;

Nit - Is this #import needed? I don’t see RetainPtr being used in this file.

&gt; Source/WebKit/UIProcess/API/Cocoa/_WKTextManipulationToken.mm:38
&gt; +- (instancetype)init
&gt; +{
&gt; +    if (!(self = [super init]))
&gt; +        return nil;
&gt; +    return self;
&gt; +}

Nit - I’m not sure you need to override and implement -init here, since it’s not doing anything special.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583520</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-24 13:58:35 -0700</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #14)
&gt; Comment on attachment 381774 [details]
&gt; iOS build fix
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=381774&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKTextManipulationDelegate.h:30
&gt; &gt; +@class _WKFrameHandle;
&gt; 
&gt; Nit - do you need this forward declaration?

Oops, that&apos;s a left over from when I had forFrame:. Removed.

&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKTextManipulationItem.mm:27
&gt; &gt; +#include &quot;config.h&quot;
&gt; &gt; +#include &quot;_WKTextManipulationItem.h&quot;
&gt; 
&gt; Nit - #include =&gt; #import

Fixed.

&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKTextManipulationToken.mm:27
&gt; &gt; +#include &quot;config.h&quot;
&gt; &gt; +#include &quot;_WKTextManipulationToken.h&quot;
&gt; 
&gt; Nit - #include =&gt; #import

Fixed.

&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKTextManipulationToken.mm:29
&gt; &gt; +#import &lt;wtf/RetainPtr.h&gt;
&gt; 
&gt; Nit - Is this #import needed? I don’t see RetainPtr being used in this file.

Good point. Removed.

&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/_WKTextManipulationToken.mm:38
&gt; &gt; +- (instancetype)init
&gt; &gt; +{
&gt; &gt; +    if (!(self = [super init]))
&gt; &gt; +        return nil;
&gt; &gt; +    return self;
&gt; &gt; +}
&gt; 
&gt; Nit - I’m not sure you need to override and implement -init here, since it’s
&gt; not doing anything special.

Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583521</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-24 14:01:24 -0700</bug_when>
    <thetext>Committed r251558: &lt;https://trac.webkit.org/changeset/251558&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583551</commentid>
    <comment_count>17</comment_count>
    <who name="Matt Lewis">jlewis3</who>
    <bug_when>2019-10-24 15:25:53 -0700</bug_when>
    <thetext>This broke internal builds. See radar for details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583571</commentid>
    <comment_count>18</comment_count>
    <who name="Matt Lewis">jlewis3</who>
    <bug_when>2019-10-24 15:51:17 -0700</bug_when>
    <thetext>Reverted r251558 for reason:

This broke internal builds

Committed r251569: &lt;https://trac.webkit.org/changeset/251569&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583573</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-24 16:01:04 -0700</bug_when>
    <thetext>(In reply to Matt Lewis from comment #18)
&gt; Reverted r251558 for reason:
&gt; 
&gt; This broke internal builds
&gt; 
&gt; Committed r251569: &lt;https://trac.webkit.org/changeset/251569&gt;

I don&apos;t think that&apos;s accurate description. It seems that this patch broke all iOS builds even on build.webkit.org. What happened is that someone must have added another objective-C file between the time EWS processed my patch and I landed it this afternoon. And the offending file is nothing to do with this patch.

We really need a bot which builds everything with unified builds turned off.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583574</commentid>
    <comment_count>20</comment_count>
      <attachid>381851</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-24 16:07:09 -0700</bug_when>
    <thetext>Created attachment 381851
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583575</commentid>
    <comment_count>21</comment_count>
      <attachid>381851</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-24 16:07:24 -0700</bug_when>
    <thetext>Comment on attachment 381851
Patch for landing

Wait for EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583588</commentid>
    <comment_count>22</comment_count>
      <attachid>381857</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-24 16:33:29 -0700</bug_when>
    <thetext>Created attachment 381857
More iOS build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583605</commentid>
    <comment_count>23</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-24 17:08:15 -0700</bug_when>
    <thetext>Committed r251574: &lt;https://trac.webkit.org/changeset/251574&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381664</attachid>
            <date>2019-10-23 00:48:46 -0700</date>
            <delta_ts>2019-10-23 14:22:21 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>wip203286.patch</filename>
            <type>text/plain</type>
            <size>64102</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZQkocmV2aXNpb24gMjUxNDc2KQorKysgU291cmNlL1dlYkNv
cmUvSGVhZGVycy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtNTAzLDYgKzUwMyw3IEBACiAgICAg
ZWRpdGluZy9UZXh0R3JhbnVsYXJpdHkuaAogICAgIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKICAg
ICBlZGl0aW5nL1RleHRJdGVyYXRvckJlaGF2aW9yLmgKKyAgICBlZGl0aW5nL1RleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyLmgKICAgICBlZGl0aW5nL1VuZG9TdGVwLmgKICAgICBlZGl0aW5nL1Zp
c2libGVQb3NpdGlvbi5oCiAgICAgZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDI1MTQ3NikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjg1Miw2ICsyODUyLDggQEAKIAkJOTk2RTU5
REYxREYwMTI4RDAwNjYxMkI5IC8qIE5hdmlnYXRvcldlYkRyaXZlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTk2RTU5REMxREYwMEQ5MDAwNjYxMkI5
IC8qIE5hdmlnYXRvcldlYkRyaXZlci5oICovOyB9OwogCQk5QTUyOEU4NDE3RDdGNTJGMDBBQTk1
MTggLyogRmxvYXRpbmdPYmplY3RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5QTUyOEU4MjE3RDdGNTJGMDBBQTk1MTggLyogRmxvYXRpbmdPYmplY3Rz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOUFC
MUYzODAxOEUyNDg5QTAwNTM0NzQzIC8qIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlBQjFGMzdFMThFMjQ4
OUEwMDUzNDc0MyAvKiBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOUIwMkUwQzYyMzVFNzZBQTAwNDA0
NEIyIC8qIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMDJFMEM0MjM1RTc2QUEwMDQwNDRCMiAvKiBU
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAgKi87IH07CisJCTlCMDJFMEM4MjM1RUFEMkEw
MDQwNDRCMiAvKiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwMkUwQzMyMzVFNzZBQTAwNDA0NEIyIC8q
IFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOUIyNERFOEUxNTE5NEI5NTAwQzU5QzI3IC8qIEhUTUxC
RElFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5QjI0REU4QzE1MTk0Qjk1MDBDNTlDMjcgLyogSFRNTEJESUVsZW1lbnQuaCAqLzsgfTsKIAkJ
OUIyN0ZDNjAyMzREOUFEQjAwMzk0QTQ2IC8qIFdpbmRvd0V2ZW50TG9vcC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIyN0ZDNUUyMzREOUFEQTAwMzk0
QTQ2IC8qIFdpbmRvd0V2ZW50TG9vcC5oICovOyB9OwogCQk5QjJEOEE3OTE0OTk3Q0NGMDBFQ0VG
M0UgLyogVW5kb1N0ZXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDlCMkQ4QTc4MTQ5OTdDQ0YwMEVDRUYzRSAvKiBVbmRvU3RlcC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMTA3NCw2ICsxMTA3Niw4
IEBACiAJCTlBQzZGMDI1MjExNDhGNTQwMENCREEwNiAvKiBNZWRpYUVuZ2luZUNvbmZpZ3VyYXRp
b25GYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE1lZGlhRW5naW5l
Q29uZmlndXJhdGlvbkZhY3RvcnkuaDsgcGF0aCA9IG1lZGlhY2FwYWJpbGl0aWVzL01lZGlhRW5n
aW5lQ29uZmlndXJhdGlvbkZhY3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OUFDNkYwMkQyMTE0OEY5RjAwQ0JEQTA2IC8qIE1lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3Rv
cnlNb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhRW5n
aW5lQ29uZmlndXJhdGlvbkZhY3RvcnlNb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOUFDNkYwMkYyMTE0OEZBMjAwQ0JEQTA2IC8qIE1lZGlhRW5naW5lQ29uZmlndXJhdGlv
bkZhY3RvcnlNb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRW5n
aW5lQ29uZmlndXJhdGlvbkZhY3RvcnlNb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTlCMDJFMEMzMjM1RTc2QUEwMDQwNDRCMiAvKiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5QjAyRTBDNDIzNUU3NkFBMDA0MDQ0QjIgLyogVGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjAzRDgw
NjFCQjMxMTBEMDBCNzNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUmVhZGFibGVCeXRlU3RyZWFtSW50
ZXJuYWxzQnVpbHRpbnMuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvUmVhZGFibGVC
eXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RT
X0RJUjsgfTsKIAkJOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEM5IC8qIFN0cmVhbUludGVybmFsc0J1
aWx0aW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0cmVhbUludGVybmFs
c0J1aWx0aW5zLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL1N0cmVhbUludGVybmFs
c0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTlCMDNE
ODA2MUJCMzExMEQwMEI3NjREOCAvKiBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlYWRhYmxlU3RyZWFtQnVpbHRpbnMuaDsgcGF0aCA9
IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oOyBzb3VyY2VU
cmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtMjE0NDAsNiArMjE0NDQsOCBAQAogCQkJ
CTkzMzA5RENDMDk5RTY0OTEwMDU2RTU4MSAvKiBUZXh0SXRlcmF0b3IuY3BwICovLAogCQkJCTkz
MzA5RENEMDk5RTY0OTEwMDU2RTU4MSAvKiBUZXh0SXRlcmF0b3IuaCAqLywKIAkJCQk5MzkyMTQ2
ODE4QTZENzkxMDAwRUU2ODggLyogVGV4dEl0ZXJhdG9yQmVoYXZpb3IuaCAqLywKKwkJCQk5QjAy
RTBDMzIzNUU3NkFBMDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaCAqLywK
KwkJCQk5QjAyRTBDNDIzNUU3NkFBMDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXIuY3BwICovLAogCQkJCTkzMzA5RENBMDk5RTY0OTEwMDU2RTU4MSAvKiBUeXBpbmdDb21tYW5k
LmNwcCAqLywKIAkJCQk5MzMwOURDQjA5OUU2NDkxMDA1NkU1ODEgLyogVHlwaW5nQ29tbWFuZC5o
ICovLAogCQkJCTlCMkQ4QTc4MTQ5OTdDQ0YwMEVDRUYzRSAvKiBVbmRvU3RlcC5oICovLApAQCAt
MzEyODEsNiArMzEyODcsNyBAQAogCQkJCUZEQTNFOTVBMTM0QTQ5RUYwMDhENEI1QSAvKiBPZmZs
aW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEQTkzMjVFMTY3
MDNCMkEwMDg5ODJEQyAvKiBPZmZsaW5lQXVkaW9Db250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlGREEzRTk1QzEzNEE0OUVGMDA4RDRCNUEgLyogT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2Rl
LmggaW4gSGVhZGVycyAqLywKKwkJCQk5QjAyRTBDODIzNUVBRDJBMDA0MDQ0QjIgLyogVGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNDg3N0UzMUZBQThG
RTkwMEMwNTc1OSAvKiBPZmZzY3JlZW5DYW52YXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNDBD
NTIwMUZERjE1MUEwMEQyQTg3MyAvKiBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUIyRDNEQTY1MEQwMDZDRDYwMEVGNkYzQSAvKiBPcGVuVHlw
ZUNHLmggaW4gSGVhZGVycyAqLywKQEAgLTMzODA2LDYgKzMzODEzLDcgQEAKIAkJCQlERTVGODUx
QjFGQTFBNEY4MDA2REI2M0EgLyogVW5pZmllZFNvdXJjZTQyNS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlERTVGODUxQzFGQTFBNEY4MDA2REI2M0EgLyogVW5pZmllZFNvdXJjZTQyNi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlERTVGODUxRDFGQTFBNEY4MDA2REI2M0EgLyogVW5pZmllZFNvdXJj
ZTQyNy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5QjAyRTBDNjIzNUU3NkFBMDA0MDQ0QjIgLyog
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREU1Rjg1
MUUxRkExQTRGODAwNkRCNjNBIC8qIFVuaWZpZWRTb3VyY2U0MjguY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJREU1Rjg1MUYxRkExQTRGODAwNkRCNjNBIC8qIFVuaWZpZWRTb3VyY2U0MjkuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJREU1Rjg1MjAxRkExQTRGODAwNkRCNjNBIC8qIFVuaWZpZWRTb3Vy
Y2U0MzAuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJl
dmlzaW9uIDI1MTQ3NikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxMyw2ICsyMTMsNyBAQAogI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVy
LmgiCiAjaW5jbHVkZSAiVGV4dEF1dG9TaXppbmcuaCIKICNpbmNsdWRlICJUZXh0RXZlbnQuaCIK
KyNpbmNsdWRlICJUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRleHRO
b2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiVG91Y2hBY3Rpb24uaCIKICNpbmNsdWRlICJUcmFu
c2Zvcm1Tb3VyY2UuaCIKQEAgLTI0NzksNiArMjQ4MCw4IEBACiAKICAgICBtX3VuZG9NYW5hZ2Vy
LT5yZW1vdmVBbGxJdGVtcygpOwogCisgICAgbV90ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlciA9
IG51bGxwdHI7IC8vIEZyZWUgbm9kZXMga2VwdCBhbGl2ZSBieSBUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlci4KKwogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZKQogICAgIGlmICh0aGlzICE9ICZ0
b3BEb2N1bWVudCgpKSB7CiAgICAgICAgIC8vIExldCB0aGUgYXggY2FjaGUga25vdyB0aGF0IHRo
aXMgc3ViZnJhbWUgZ29lcyBvdXQgb2Ygc2NvcGUuCkBAIC04MzQxLDQgKzgzNDQsMTEgQEAKIH0K
ICNlbmRpZgogCitUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlciYgRG9jdW1lbnQ6OnRleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyKCkKK3sKKyAgICBpZiAoIW1fdGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXIpCisgICAgICAgIG1fdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgPSBtYWtlVW5pcXVl
PFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyPigqdGhpcyk7CisgICAgcmV0dXJuICptX3RleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMjUxNDc2KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw2ICsxOTYsNyBAQAogY2xhc3Mg
U3R5bGVTaGVldENvbnRlbnRzOwogY2xhc3MgU3R5bGVTaGVldExpc3Q7CiBjbGFzcyBUZXh0Owor
Y2xhc3MgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBUZXh0UmVzb3VyY2VEZWNv
ZGVyOwogY2xhc3MgVHJlZVdhbGtlcjsKIGNsYXNzIFVuZG9NYW5hZ2VyOwpAQCAtMTU1Nyw2ICsx
NTU4LDkgQEAKICAgICB2b2lkIHNldFBpY3R1cmVJblBpY3R1cmVFbGVtZW50KEhUTUxWaWRlb0Vs
ZW1lbnQqKTsKICNlbmRpZgogCisgICAgV0VCQ09SRV9FWFBPUlQgVGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXImIHRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyKCk7CisgICAgVGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXIqIHRleHRNYW5pcHVsYXRpb25Db250cm9sbGVySWZFeGlzdHMoKSB7IHJl
dHVybiBtX3RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmdldCgpOyB9CisKIHByb3RlY3RlZDoK
ICAgICBlbnVtIENvbnN0cnVjdGlvbkZsYWdzIHsgU3ludGhlc2l6ZWQgPSAxLCBOb25SZW5kZXJl
ZFBsYWNlaG9sZGVyID0gMSA8PCAxIH07CiAgICAgRG9jdW1lbnQoRnJhbWUqLCBjb25zdCBVUkwm
LCB1bnNpZ25lZCA9IERlZmF1bHREb2N1bWVudENsYXNzLCB1bnNpZ25lZCBjb25zdHJ1Y3Rpb25G
bGFncyA9IDApOwpAQCAtMjA4NSw2ICsyMDg5LDggQEAKICAgICBXZWFrUHRyPEhUTUxWaWRlb0Vs
ZW1lbnQ+IG1fcGljdHVyZUluUGljdHVyZUVsZW1lbnQ7CiAjZW5kaWYKIAorICAgIHN0ZDo6dW5p
cXVlX3B0cjxUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcj4gbV90ZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjsKKwogICAgIEhhc2hNYXA8RWxlbWVudCosIEVsZW1lbnRJZGVudGlmaWVyPiBtX2lk
ZW50aWZpZWRFbGVtZW50c01hcDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmgiCisKKyNp
bmNsdWRlICJFZGl0aW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0RGlzYWxsb3dlZFNjb3BlLmgiCisj
aW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OlRleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyKERvY3VtZW50JiBkb2N1bWVudCkKKyAgICA6IG1fZG9jdW1lbnQo
bWFrZVdlYWtQdHIoZG9jdW1lbnQpKQoreworfQorCit2b2lkIFRleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyOjpzdGFydE9ic2VydmluZ1BhcmFncmFwaHMoTWFuaXB1bGF0aW9uSXRlbUNhbGxiYWNr
JiYgY2FsbGJhY2spCit7CisgICAgYXV0byBkb2N1bWVudCA9IG1ha2VSZWZQdHIobV9kb2N1bWVu
dC5nZXQoKSk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9j
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOworCisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0
ID0gZmlyc3RQb3NpdGlvbkluTm9kZShtX2RvY3VtZW50LmdldCgpKTsKKyAgICBWaXNpYmxlUG9z
aXRpb24gZW5kID0gbGFzdFBvc2l0aW9uSW5Ob2RlKG1fZG9jdW1lbnQuZ2V0KCkpOworICAgIFRl
eHRJdGVyYXRvciBpdGVyYXRvciB7IHN0YXJ0LmRlZXBFcXVpdmFsZW50KCksIGVuZC5kZWVwRXF1
aXZhbGVudCgpIH07CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOyAvLyBWaXNp
YmxlUG9zaXRpb24gb3IgVGV4dEl0ZXJhdG9yJ3MgY29uc3RydWN0b3IgbWF5IGhhdmUgdXBkYXRl
ZCB0aGUgbGF5b3V0IGFuZCBleGVjdXRlZCBhcmJpdHJhcnkgc2NyaXB0cy4KKworICAgIFZlY3Rv
cjxNYW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoOworICAgIFBvc2l0
aW9uIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoID0gc3RhcnQuZGVlcEVxdWl2YWxlbnQoKTsKKyAg
ICB3aGlsZSAoIWl0ZXJhdG9yLmF0RW5kKCkpIHsKKyAgICAgICAgU3RyaW5nVmlldyBjdXJyZW50
VGV4dCA9IGl0ZXJhdG9yLnRleHQoKTsKKworICAgICAgICBpZiAoc3RhcnRPZkN1cnJlbnRQYXJh
Z3JhcGguaXNOdWxsKCkpCisgICAgICAgICAgICBzdGFydE9mQ3VycmVudFBhcmFncmFwaCA9IGl0
ZXJhdG9yLnJhbmdlKCktPnN0YXJ0UG9zaXRpb24oKTsKKworICAgICAgICBzaXplX3QgZW5kT2ZM
YXN0TmV3TGluZSA9IDA7CisgICAgICAgIHNpemVfdCBvZmZzZXRPZk5leHROZXdMaW5lID0gMDsK
KyAgICAgICAgd2hpbGUgKChvZmZzZXRPZk5leHROZXdMaW5lID0gY3VycmVudFRleHQuZmluZCgn
XG4nLCBlbmRPZkxhc3ROZXdMaW5lKSkgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgICAgIGlmIChv
ZmZzZXRPZk5leHROZXdMaW5lKQorICAgICAgICAgICAgICAgIHRva2Vuc0luQ3VycmVudFBhcmFn
cmFwaC5hcHBlbmQoTWFuaXB1bGF0aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRpZmllci5nZW5lcmF0
ZSgpLCBjdXJyZW50VGV4dC5zdWJzdHJpbmcoZW5kT2ZMYXN0TmV3TGluZSwgb2Zmc2V0T2ZOZXh0
TmV3TGluZSkudG9TdHJpbmcoKSB9KTsKKworICAgICAgICAgICAgYXV0byBsYXN0UmFuZ2UgPSBp
dGVyYXRvci5yYW5nZSgpOworICAgICAgICAgICAgaWYgKG9mZnNldE9mTmV4dE5ld0xpbmUgPCBj
dXJyZW50VGV4dC5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIGxhc3RSYW5nZS0+c2V0U3Rh
cnQoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKGl0ZXJhdG9yLm5vZGUoKSkpOyAvLyBNb3Zl
IHRoZSBzdGFydCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjdXJyZW50IG5vZGUuCisgICAgICAg
ICAgICAgICAgVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShsYXN0UmFuZ2UsIDAsIG9mZnNldE9mTmV4
dE5ld0xpbmUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUG9zaXRpb24gZW5kT2ZDdXJy
ZW50UGFyYWdyYXBoID0gbGFzdFJhbmdlLT5lbmRQb3NpdGlvbigpOworCisgICAgICAgICAgICBp
ZiAoIXRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
YWRkSXRlbShzdGFydE9mQ3VycmVudFBhcmFncmFwaCwgZW5kT2ZDdXJyZW50UGFyYWdyYXBoLCBX
VEZNb3ZlKHRva2Vuc0luQ3VycmVudFBhcmFncmFwaCkpOworICAgICAgICAgICAgc3RhcnRPZkN1
cnJlbnRQYXJhZ3JhcGguY2xlYXIoKTsKKyAgICAgICAgICAgIGVuZE9mTGFzdE5ld0xpbmUgPSBv
ZmZzZXRPZk5leHROZXdMaW5lICsgMTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gcmVtYWlu
aW5nVGV4dCA9IGN1cnJlbnRUZXh0LnN1YnN0cmluZyhlbmRPZkxhc3ROZXdMaW5lKTsKKyAgICAg
ICAgaWYgKHJlbWFpbmluZ1RleHQubGVuZ3RoKCkpCisgICAgICAgICAgICB0b2tlbnNJbkN1cnJl
bnRQYXJhZ3JhcGguYXBwZW5kKE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIu
Z2VuZXJhdGUoKSwgcmVtYWluaW5nVGV4dC50b1N0cmluZygpIH0pOworCisgICAgICAgIGl0ZXJh
dG9yLmFkdmFuY2UoKTsKKyAgICB9CisKKyAgICBpZiAoIXRva2Vuc0luQ3VycmVudFBhcmFncmFw
aC5pc0VtcHR5KCkpCisgICAgICAgIGFkZEl0ZW0oc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGgsIGVu
ZC5kZWVwRXF1aXZhbGVudCgpLCBXVEZNb3ZlKHRva2Vuc0luQ3VycmVudFBhcmFncmFwaCkpOwor
fQorCit2b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjphZGRJdGVtKGNvbnN0IFBvc2l0
aW9uJiBzdGFydE9mUGFyYWdyYXBoLCBjb25zdCBQb3NpdGlvbiYgZW5kT2ZQYXJhZ3JhcGgsIFZl
Y3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4mJiB0b2tlbnMpCit7CisgICAgQVNTRVJUKG1fZG9jdW1l
bnQpOworICAgIGF1dG8gcmVzdWx0ID0gbV9pdGVtcy5hZGQobV9pdGVtSWRlbnRpZmllci5nZW5l
cmF0ZSgpLCBNYW5pcHVsYXRpb25JdGVtIHsgc3RhcnRPZlBhcmFncmFwaCwgZW5kT2ZQYXJhZ3Jh
cGgsIFdURk1vdmUodG9rZW5zKSB9KTsKKyAgICBtX2NhbGxiYWNrKCptX2RvY3VtZW50LCByZXN1
bHQuaXRlcmF0b3ItPmtleSwgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS50b2tlbnMpOworfQorCiti
b29sIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpjb21wbGV0ZU1hbmlwdWxhdGlvbihJdGVt
SWRlbnRpZmllciBpdGVtSWRlbnRpZmllciwgY29uc3QgVmVjdG9yPE1hbmlwdWxhdGlvblRva2Vu
PiYgcmVwbGFjZW1lbnRUb2tlbnMpCit7CisgICAgaWYgKCFpdGVtSWRlbnRpZmllcikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBpdGVtSXRlcmF0b3IgPSBtX2l0ZW1zLmZpbmQo
aXRlbUlkZW50aWZpZXIpOworICAgIGlmIChpdGVtSXRlcmF0b3IgPT0gbV9pdGVtcy5lbmQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBkaWRSZXBsYWNlID0gcmVwbGFjZShp
dGVtSXRlcmF0b3ItPnZhbHVlLCByZXBsYWNlbWVudFRva2Vucyk7CisKKyAgICBtX2l0ZW1zLnJl
bW92ZShpdGVtSXRlcmF0b3IpOworCisgICAgcmV0dXJuIGRpZFJlcGxhY2U7Cit9CisKK2Jvb2wg
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnJlcGxhY2UoY29uc3QgTWFuaXB1bGF0aW9uSXRl
bSYgaXRlbSwgY29uc3QgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiYgcmVwbGFjZW1lbnRUb2tl
bnMpCit7CisgICAgVGV4dEl0ZXJhdG9yIGl0ZXJhdG9yIHsgaXRlbS5zdGFydCwgaXRlbS5lbmQg
fTsKKyAgICBzaXplX3QgY3VycmVudFRva2VuSW5kZXggPSAwOworICAgIEhhc2hNYXA8VG9rZW5J
ZGVudGlmaWVyLCBSZWY8Tm9kZT4+IHRva2VuVG9Ob2RlOworICAgIHdoaWxlICghaXRlcmF0b3Iu
YXRFbmQoKSkgeworICAgICAgICBhdXRvIHN0cmluZyA9IGl0ZXJhdG9yLnRleHQoKS50b1N0cmlu
ZygpOworICAgICAgICBpZiAoY3VycmVudFRva2VuSW5kZXggPj0gaXRlbS50b2tlbnMuc2l6ZSgp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhdXRvJiBjdXJyZW50VG9rZW4g
PSBpdGVtLnRva2Vuc1tjdXJyZW50VG9rZW5JbmRleF07CisgICAgICAgIGlmIChpdGVyYXRvci50
ZXh0KCkgIT0gY3VycmVudFRva2VuLmNvbnRlbnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHRva2VuVG9Ob2RlLmFkZChjdXJyZW50VG9rZW4uaWRlbnRpZmllciwgKml0ZXJh
dG9yLm5vZGUoKSk7CisgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsKKyAgICAgICAgKytjdXJy
ZW50VG9rZW5JbmRleDsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHByZXNl
dmUgdGhlIG9yZGVyIG9mIHRoZSByZXBsYWNlbWVudCBhdCBhbGwuCisgICAgZm9yIChhdXRvJiB0
b2tlbiA6IHJlcGxhY2VtZW50VG9rZW5zKSB7CisgICAgICAgIGF1dG8qIG5vZGUgPSB0b2tlblRv
Tm9kZS5nZXQodG9rZW4uaWRlbnRpZmllcik7CisgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFpczxDaGFyYWN0ZXJEYXRhPihub2RlKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAvLyBGSVhNRTogSXQncyBub3Qgc2FmZSB0
byB1cGRhdGUgRE9NIHdoaWxlIGl0ZXJhdGluZyBvdmVyIHRoZSB0b2tlbnMuCisgICAgICAgIGRv
d25jYXN0PENoYXJhY3RlckRhdGE+KG5vZGUpLT5zZXREYXRhKHRva2VuLmNvbnRlbnQpOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlw
dWxhdGlvbkNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJQb3NpdGlvbi5oIgorI2luY2x1ZGUg
PHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgorI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVy
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsKKworY2xhc3MgVGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXIgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8VGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXI+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcihEb2N1bWVudCYpOworCisgICAgZW51bSBU
b2tlbklkZW50aWZpZXJUeXBlIHsgfTsKKyAgICB1c2luZyBUb2tlbklkZW50aWZpZXIgPSBPYmpl
Y3RJZGVudGlmaWVyPFRva2VuSWRlbnRpZmllclR5cGU+OworCisgICAgc3RydWN0IE1hbmlwdWxh
dGlvblRva2VuIHsKKyAgICAgICAgVG9rZW5JZGVudGlmaWVyIGlkZW50aWZpZXI7CisgICAgICAg
IFN0cmluZyBjb250ZW50OworCisgICAgICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQg
ZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPE1hbmlwdWxhdGlvblRva2VuPiBkZWNvZGUoRGVjb2RlciYpOworICAg
IH07CisKKyAgICBlbnVtIEl0ZW1JZGVudGlmaWVyVHlwZSB7IH07CisgICAgdXNpbmcgSXRlbUlk
ZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPEl0ZW1JZGVudGlmaWVyVHlwZT47CisKKyAgICB1
c2luZyBNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2sgPSBXVEY6OkZ1bmN0aW9uPHZvaWQoRG9jdW1l
bnQmLCBJdGVtSWRlbnRpZmllciwgY29uc3QgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiYpPjsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0YXJ0T2JzZXJ2aW5nUGFyYWdyYXBocyhNYW5pcHVs
YXRpb25JdGVtQ2FsbGJhY2smJik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGNvbXBsZXRl
TWFuaXB1bGF0aW9uKEl0ZW1JZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8TWFuaXB1bGF0aW9uVG9r
ZW4+Jik7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IE1hbmlwdWxhdGlvbkl0ZW0geworICAgICAg
ICBQb3NpdGlvbiBzdGFydDsKKyAgICAgICAgUG9zaXRpb24gZW5kOworICAgICAgICBWZWN0b3I8
TWFuaXB1bGF0aW9uVG9rZW4+IHRva2VuczsKKyAgICB9OworCisgICAgdm9pZCBhZGRJdGVtKGNv
bnN0IFBvc2l0aW9uJiBzdGFydE9mUGFyYWdyYXBoLCBjb25zdCBQb3NpdGlvbiYgZW5kT2ZQYXJh
Z3JhcGgsIFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4mJik7CisgICAgYm9vbCByZXBsYWNlKGNv
bnN0IE1hbmlwdWxhdGlvbkl0ZW0mLCBjb25zdCBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+Jik7
CisKKyAgICBXZWFrUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OworICAgIE1hbmlwdWxhdGlvbkl0
ZW1DYWxsYmFjayBtX2NhbGxiYWNrOworICAgIEhhc2hNYXA8SXRlbUlkZW50aWZpZXIsIE1hbmlw
dWxhdGlvbkl0ZW0+IG1faXRlbXM7CisgICAgSXRlbUlkZW50aWZpZXIgbV9pdGVtSWRlbnRpZmll
cjsKKyAgICBUb2tlbklkZW50aWZpZXIgbV90b2tlbklkZW50aWZpZXI7Cit9OworCit0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1
bGF0aW9uVG9rZW46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29k
ZXIgPDwgaWRlbnRpZmllciA8PCBjb250ZW50OworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PgorT3B0aW9uYWw8VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2Vu
PiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW46OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE1hbmlwdWxhdGlvblRva2VuIHJlc3VsdDsKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb250ZW50KSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYlZpZXcubW0JKHJldmlzaW9uIDI1MTQ3NikKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTk4LDYg
Kzk4LDkgQEAKICNpbXBvcnQgIl9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5SW50ZXJuYWwuaCIKICNp
bXBvcnQgIl9XS1Nlc3Npb25TdGF0ZUludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tUZXh0SW5wdXRD
b250ZXh0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIl9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5o
IgorI2ltcG9ydCAiX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0uaCIKKyNpbXBvcnQgIl9XS1RleHRN
YW5pcHVsYXRpb25Ub2tlbi5oIgogI2ltcG9ydCAiX1dLVmlzaXRlZExpbmtTdG9yZUludGVybmFs
LmgiCiAjaW1wb3J0ICJfV0tXZWJzaXRlUG9saWNpZXNJbnRlcm5hbC5oIgogI2ltcG9ydCA8V2Vi
Q29yZS9FbGVtZW50Q29udGV4dC5oPgpAQCAtMTEzLDYgKzExNiw3IEBACiAjaW1wb3J0IDxXZWJD
b3JlL1NldHRpbmdzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2ltcG9y
dCA8V2ViQ29yZS9TdHJpbmdVdGlsaXRpZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVGV4dE1hbmlw
dWxhdGlvbkNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvVmFsaWRhdGlvbkJ1YmJsZS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9WaWV3cG9ydEFyZ3VtZW50cy5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9Xcml0aW5nTW9kZS5oPgpAQCAtMjc2LDYgKzI4MCw4IEBACiAKICAgICBCT09MIF91c2VQbGF0
Zm9ybUZpbmRVSTsKIAorICAgIFdlYWtPYmpDUHRyPGlkIDxfV0tUZXh0TWFuaXB1bGF0aW9uRGVs
ZWdhdGU+PiBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOworCiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICBSZXRhaW5QdHI8X1dLUmVtb3RlT2JqZWN0UmVnaXN0cnk+IF9yZW1vdGVPYmpl
Y3RSZWdpc3RyeTsKIApAQCAtNzQzOSw2ICs3NDQ1LDEwOCBAQAogICAgIH0pOwogfQogCistIChp
ZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlPilfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRl
Cit7CisgICAgcmV0dXJuIF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUuZ2V0QXV0b3JlbGVhc2Vk
KCk7Cit9CisKKy0gKHZvaWQpX3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTooaWQgPF9XS1Rl
eHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4pZGVsZWdhdGUKK3sKKyAgICBfdGV4dE1hbmlwdWxhdGlv
bkRlbGVnYXRlID0gZGVsZWdhdGU7Cit9CisKK3N0YXRpYyBTdHJpbmcgc3RyaW5nSWRlbnRpZmll
ckZvckZyYW1lQW5kSXRlbShXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgV2ViQ29y
ZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1JRCkKK3sK
KyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5kTnVtYmVyKGZyYW1l
SUQudG9VSW50NjQoKSk7CisgICAgcmVzdWx0LmFwcGVuZCgnOicpOworICAgIHJlc3VsdC5hcHBl
bmROdW1iZXIoaXRlbUlELnRvVUludDY0KCkpOworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmco
KTsKK30KKworc3RydWN0IFRleHRNYW5pcHVsYXRpb25JZGVudGlmaWVycyB7CisgICAgV2ViQ29y
ZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1lSUQ7CisgICAgV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1JRDsKK307CisKK3N0YXRpYyBPcHRpb25h
bDxUZXh0TWFuaXB1bGF0aW9uSWRlbnRpZmllcnM+IGZyYW1lQW5kSXRlbUlkZW50aWZpZXJzRnJv
bVN0cmluZyhTdHJpbmcgc3RyaW5nSWRlbnRpZmllcikKK3sKKyAgICBUZXh0TWFuaXB1bGF0aW9u
SWRlbnRpZmllcnMgcmVzdWx0OworICAgIGZvciAoYXV0byBwYXJ0IDogU3RyaW5nVmlldyhzdHJp
bmdJZGVudGlmaWVyKS5zcGxpdCgnOicpKSB7CisgICAgICAgIGF1dG8gbnVtYmVyID0gcGFydC50
b1VJbnQ2NFN0cmljdCgpOworICAgICAgICBpZiAoIW51bWJlciB8fCAocmVzdWx0LmZyYW1lSUQg
JiYgcmVzdWx0Lml0ZW1JRCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
ICAgICBpZiAoIXJlc3VsdC5mcmFtZUlEKQorICAgICAgICAgICAgcmVzdWx0LmZyYW1lSUQgPSBX
ZWJDb3JlOjpmcmFtZUlkZW50aWZpZXJGcm9tSUQoKm51bWJlcik7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHJlc3VsdC5pdGVtSUQgPSBtYWtlT2JqZWN0SWRlbnRpZmllcjxXZWJDb3JlOjpU
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXJUeXBlPigqbnVtYmVyKTsK
KyAgICB9CisgICAgaWYgKCFyZXN1bHQuZnJhbWVJRCB8fCAhcmVzdWx0Lml0ZW1JRCkKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCistICh2b2lk
KV9zdGFydFRleHRNYW5pcHVsYXRpb25zCit7CisgICAgaWYgKCFfdGV4dE1hbmlwdWxhdGlvbkRl
bGVnYXRlKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFfcGFnZSkKKyAgICAgICAgcmV0dXJu
OworICAgIF9wYWdlLT5zdGFydFRleHRNYW5pcHVsYXRpb25zKFt3ZWFrU2VsZiA9IFdlYWtPYmpD
UHRyPFdLV2ViVmlldz4oc2VsZildIChXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIgZnJhbWVJZGVu
dGlmaWVyLAorICAgICAgICBXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRl
bUlkZW50aWZpZXIgaXRlbUlkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFu
aXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+JiB0b2tlbnMpIHsKKyAgICAg
ICAgaWYgKCF3ZWFrU2VsZikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIHJl
dGFpbmVkU2VsZiA9IHdlYWtTZWxmLmdldCgpOworICAgICAgICBhdXRvIGRlbGVnYXRlID0gcmV0
YWluZWRTZWxmLmdldCgpLl90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU7CisgICAgICAgIGlmICgh
ZGVsZWdhdGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgTlNNdXRhYmxlQXJyYXkg
KndrVG9rZW5zID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OiB0b2tlbnMuc2l6
ZSgpXTsKKyAgICAgICAgZm9yIChhdXRvJiB0b2tlbiA6IHRva2VucykgeworICAgICAgICAgICAg
YXV0byB3a1Rva2VuID0gYWRvcHROUyhbW19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiBhbGxvY10g
aW5pdF0pOworICAgICAgICAgICAgd2tUb2tlbi5nZXQoKS5pZGVudGlmaWVyID0gU3RyaW5nOjpu
dW1iZXIodG9rZW4uaWRlbnRpZmllci50b1VJbnQ2NCgpKTsKKyAgICAgICAgICAgIHdrVG9rZW4u
Z2V0KCkuY29udGVudCA9IHRva2VuLmNvbnRlbnQ7CisgICAgICAgICAgICBbd2tUb2tlbnMgYWRk
T2JqZWN0OndrVG9rZW4uZ2V0KCldOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBpZGVudGlm
aWVyID0gc3RyaW5nSWRlbnRpZmllckZvckZyYW1lQW5kSXRlbShmcmFtZUlkZW50aWZpZXIsIGl0
ZW1JZGVudGlmaWVyKTsKKyAgICAgICAgYXV0byBpdGVtID0gYWRvcHROUyhbW19XS1RleHRNYW5p
cHVsYXRpb25JdGVtIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6aWRlbnRpZmllciB0b2tlbnM6
d2tUb2tlbnNdKTsKKyAgICAgICAgW2RlbGVnYXRlIF93ZWJWaWV3OnJldGFpbmVkU2VsZi5nZXQo
KSBkaWRGaW5kSXRlbTppdGVtLmdldCgpIGZvckZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUhhbmRs
ZTo6Y3JlYXRlKGZyYW1lSWRlbnRpZmllcikpXTsKKyAgICB9LCBbd2Vha1NlbGYgPSBXZWFrT2Jq
Q1B0cjxXS1dlYlZpZXc+KHNlbGYpXSAoKSB7CisgICAgICAgIGlmICghd2Vha1NlbGYpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8gcmV0YWluZWRTZWxmID0gd2Vha1NlbGYuZ2V0
KCk7CisgICAgICAgIGF1dG8gZGVsZWdhdGUgPSByZXRhaW5lZFNlbGYuZ2V0KCkuX3RleHRNYW5p
cHVsYXRpb25EZWxlZ2F0ZTsKKyAgICAgICAgaWYgKCFkZWxlZ2F0ZSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBbZGVsZWdhdGUgX3dlYlZpZXc6cmV0YWluZWRTZWxmLmdldCgpIGRp
ZEZpbmlzaEluaXRpYWxPYnNlcnZhdGlvbkZvckZyYW1lOnJldGFpbmVkU2VsZi5nZXQoKS5fbWFp
bkZyYW1lXTsKKyAgICB9KTsKK30KKworLSAodm9pZClfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9u
OihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWl0ZW0gY29tcGxldGlvbjoodm9pZCheKShCT09M
IHN1Y2Nlc3MpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgaWYgKCFfcGFnZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgYXV0byByZXN1bHQgPSBmcmFtZUFuZEl0ZW1JZGVudGlmaWVyc0Zyb21T
dHJpbmcoU3RyaW5nIHsgaXRlbS5pZGVudGlmaWVyIH0pOworICAgIGlmICghcmVzdWx0KSB7Cisg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1
bGF0aW9uVG9rZW4+IHRva2VuczsKKyAgICBmb3IgKF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiAq
d2tUb2tlbiBpbiBpdGVtLnRva2VucykgeworICAgICAgICBhdXRvIHRva2VuSUQgPSBtYWtlT2Jq
ZWN0SWRlbnRpZmllcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6VG9rZW5J
ZGVudGlmaWVyVHlwZT4oU3RyaW5nKHdrVG9rZW4uaWRlbnRpZmllcikudG9VSW50NjQoKSk7Cisg
ICAgICAgIHRva2Vucy5hcHBlbmQoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6
Ok1hbmlwdWxhdGlvblRva2VuIHsgdG9rZW5JRCwgd2tUb2tlbi5jb250ZW50IH0pOworICAgIH0K
KworICAgIF9wYWdlLT5jb21wbGV0ZVRleHRNYW5pcHVsYXRpb24ocmVzdWx0LT5mcmFtZUlELCBy
ZXN1bHQtPml0ZW1JRCwgdG9rZW5zLCBbY2FwdHVyZWRDb21wbGV0aW9uQmxvY2sgPSBtYWtlQmxv
Y2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoYm9vbCBzdWNjZXNzKSB7CisgICAgICAgIGNhcHR1
cmVkQ29tcGxldGlvbkJsb2NrKHN1Y2Nlc3MpOworICAgIH0pOworfQorCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKIAogLSAoQ0dSZWN0KV9kcmFnQ2FyZXRSZWN0CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgJKHJl
dmlzaW9uIDI1MTQ3NikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXdQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw2ICsxMTMsNyBAQAogQGNsYXNz
IF9XS1NhZmVCcm93c2luZ1dhcm5pbmc7CiBAY2xhc3MgX1dLU2Vzc2lvblN0YXRlOwogQGNsYXNz
IF9XS1RleHRJbnB1dENvbnRleHQ7CitAY2xhc3MgX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW07CiBA
Y2xhc3MgX1dLVGh1bWJuYWlsVmlldzsKIEBjbGFzcyBfV0tXZWJzaXRlUG9saWNpZXM7CiBAY2xh
c3MgX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVyOwpAQCAtMTIwLDkgKzEyMSwxMCBAQAogQHByb3Rv
Y29sIFdLSGlzdG9yeURlbGVnYXRlUHJpdmF0ZTsKIEBwcm90b2NvbCBfV0tEaWFnbm9zdGljTG9n
Z2luZ0RlbGVnYXRlOwogQHByb3RvY29sIF9XS0ZpbmREZWxlZ2F0ZTsKK0Bwcm90b2NvbCBfV0tG
dWxsc2NyZWVuRGVsZWdhdGU7CiBAcHJvdG9jb2wgX1dLSWNvbkxvYWRpbmdEZWxlZ2F0ZTsKIEBw
cm90b2NvbCBfV0tJbnB1dERlbGVnYXRlOwotQHByb3RvY29sIF9XS0Z1bGxzY3JlZW5EZWxlZ2F0
ZTsKK0Bwcm90b2NvbCBfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU7CiAKIEBpbnRlcmZhY2Ug
V0tXZWJWaWV3IChXS1ByaXZhdGUpCiAKQEAgLTU3NSw2ICs1NzcsMTAgQEAKIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgX1dLSW5zcGVjdG9yICpfaW5zcGVjdG9yIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpIF9XS0ZyYW1lSGFuZGxlICpfbWFpbkZyYW1lIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTQuNCksIGlvcygxMi4yKSk7CiAKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrLCBz
ZXR0ZXI9X3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTopIGlkIDxfV0tUZXh0TWFuaXB1bGF0
aW9uRGVsZWdhdGU+IF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3N0YXJ0VGV4dE1h
bmlwdWxhdGlvbnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lP
U19UQkEpKTsKKy0gKHZvaWQpX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbjooX1dLVGV4dE1hbmlw
dWxhdGlvbkl0ZW0gKilpdGVtIGNvbXBsZXRpb246KHZvaWQoXikoQk9PTCBzdWNjZXNzKSljb21w
bGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOworCiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRTY3JvbGxpbmdV
cGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nOikgQk9PTCBfc2Nyb2xsaW5nVXBkYXRlc0Rpc2FibGVk
Rm9yVGVzdGluZyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9T
X1RCQSkpOwogCiAtICh2b2lkKV9wcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGlu
ZzsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1
bGF0aW9uRGVsZWdhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25EZWxl
Z2F0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1w
b3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRh
dGlvbi5oPgorCitAY2xhc3MgX1dLRnJhbWVIYW5kbGU7CitAY2xhc3MgX1dLVGV4dE1hbmlwdWxh
dGlvbkl0ZW07CisKK0Bwcm90b2NvbCBfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgPE5TT2Jq
ZWN0PgorCitAb3B0aW9uYWwKKworLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmll
dyBkaWRGaW5kSXRlbTooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVtIGZvckZyYW1lOihf
V0tGcmFtZUhhbmRsZSAqKWZyYW1lOworLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2Vi
VmlldyBkaWRGaW5pc2hJbml0aWFsT2JzZXJ2YXRpb25Gb3JGcmFtZTooX1dLRnJhbWVIYW5kbGUg
KilmcmFtZTsKKworQGVuZAorCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0uaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxh
dGlvbkl0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2ltcG9ydCA8V2ViS2l0L1dLRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0Zv
dW5kYXRpb24uaD4KKworQGNsYXNzIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbjsKKworV0tfQ0xB
U1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJm
YWNlIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtIDogTlNPYmplY3QKKworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoSWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlmaWVyIHRva2VuczooTlNBcnJh
eTxfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gKj4gKil0b2tlbnM7CisKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSwgY29weSkgTlNTdHJpbmcgKmlkZW50aWZpZXI7CitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TQXJyYXk8X1dLVGV4dE1hbmlwdWxhdGlvblRv
a2VuICo+ICp0b2tlbnM7CisKK0BlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0ubW0JKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRN
YW5pcHVsYXRpb25JdGVtLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiX1dLVGV4dE1hbmlwdWxhdGlv
bkl0ZW0uaCIKKworI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCitAaW1wbGVtZW50YXRpb24g
X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0geworICAgIFJldGFpblB0cjxOU1N0cmluZz4gX2lkZW50
aWZpZXI7CisgICAgUmV0YWluUHRyPE5TQXJyYXk8X1dLVGV4dE1hbmlwdWxhdGlvblRva2VuICo+
PiBfdG9rZW5zOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJZGVudGlmaWVyOihOU1N0
cmluZyAqKWlkZW50aWZpZXIgdG9rZW5zOihOU0FycmF5PF9XS1RleHRNYW5pcHVsYXRpb25Ub2tl
biAqPiAqKXRva2VucworeworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOworICAgIF90b2tl
bnMgPSB0b2tlbnM7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKE5TU3RyaW5nICopaWRlbnRp
ZmllcgoreworICAgIHJldHVybiBfaWRlbnRpZmllci5nZXQoKTsKK30KKworLSAoTlNBcnJheTxf
V0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gKj4gKil0b2tlbnMKK3sKKyAgICByZXR1cm4gX3Rva2Vu
cy5nZXQoKTsKK30KKworQGVuZApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlw
dWxhdGlvblRva2VuLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+CisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwg
aW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gOiBO
U09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKmlkZW50aWZp
ZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKmNvbnRlbnQ7CisKK0Bl
bmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1
bGF0aW9uVG9rZW4ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbQkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmgiCisKKyNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworQGltcGxlbWVudGF0aW9uIF9XS1RleHRNYW5pcHVsYXRp
b25Ub2tlbiB7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0Cit7CisgICAgaWYgKCEoc2VsZiA9
IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIHNlbGY7Cit9
CisKK0BlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAko
cmV2aXNpb24gMjUxNDc2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQzMiw2ICs5NDMyLDM0IEBACiB9CiAjZW5kaWYKIAor
dm9pZCBXZWJQYWdlUHJveHk6OnN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMoVGV4dE1hbmlwdWxhdGlv
bkl0ZW1DYWxsYmFjayYmIGNhbGxiYWNrLCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpIHsK
KyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBtX3RleHRNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKKyAg
ICBtX3Byb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpX
ZWJQYWdlOjpTdGFydFRleHRNYW5pcHVsYXRpb25zKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpLCBtX3dlYlBhZ2VJRCk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaWRGaW5kVGV4dE1h
bmlwdWxhdGlvbkl0ZW0oV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1lSWRlbnRpZmllciwg
V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1J
ZGVudGlmaWVyLAorICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+JiB0b2tlbnMpCit7CisgICAgaWYgKCFtX3RleHRN
YW5pcHVsYXRpb25JdGVtQ2FsbGJhY2spCisgICAgICAgIHJldHVybjsKKyAgICBtX3RleHRNYW5p
cHVsYXRpb25JdGVtQ2FsbGJhY2soZnJhbWVJZGVudGlmaWVyLCBpdGVtSWRlbnRpZmllciwgdG9r
ZW5zKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OmNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihX
ZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1JRCwKKyAgICBjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuPiYgdG9r
ZW5zLCBXVEY6OkZ1bmN0aW9uPHZvaWQgKGJvb2wgc3VjY2Vzcyk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCit7CisgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKSB7CisgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3Byb2Nlc3Mt
PmNvbm5lY3Rpb24oKS0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlOjpDb21w
bGV0ZVRleHRNYW5pcHVsYXRpb24oZnJhbWVJRCwgaXRlbUlELCB0b2tlbnMpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgbV93ZWJQYWdlSUQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKIAogI3VuZGVmIE1FUkdFX1dIRUVMX0VWRU5UUwpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDI1MTQ3NikKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjExLDYgKzE2MTEsMTIg
QEAKICAgICB2b2lkIHNldE1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24oV2ViQ29y
ZTo6TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbiYmKTsKICNlbmRpZgogCisgICAg
dXNpbmcgVGV4dE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjayA9IFdURjo6RnVuY3Rpb248dm9pZCAo
V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyLCBXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlcjo6SXRlbUlkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+Jik+OworICAgIHZvaWQgc3RhcnRUZXh0
TWFuaXB1bGF0aW9ucyhUZXh0TWFuaXB1bGF0aW9uSXRlbUNhbGxiYWNrJiYsIFdURjo6Q29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIGRpZEZpbmRUZXh0TWFuaXB1bGF0aW9u
SXRlbShXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIsIFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyOjpJdGVtSWRlbnRpZmllciwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4mKTsKKyAgICB2b2lkIGNvbXBs
ZXRlVGV4dE1hbmlwdWxhdGlvbihXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIsIFdlYkNvcmU6OlRl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRlbnRpZmllciwKKyAgICAgICAgY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25U
b2tlbj4mLCBXVEY6OkZ1bmN0aW9uPHZvaWQgKGJvb2wgc3VjY2Vzcyk+JiYpOworCiBwcml2YXRl
OgogICAgIFdlYlBhZ2VQcm94eShQYWdlQ2xpZW50JiwgV2ViUHJvY2Vzc1Byb3h5JiwgUmVmPEFQ
STo6UGFnZUNvbmZpZ3VyYXRpb24+JiYpOwogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKCk7
CkBAIC0yNTc3LDYgKzI1ODMsOCBAQAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTdXNwZW5kZWRQYWdl
UHJveHk+IG1fc3VzcGVuZGVkUGFnZUtlcHRUb1ByZXZlbnRGbGFzaGluZzsKICAgICBXZWFrUHRy
PFN1c3BlbmRlZFBhZ2VQcm94eT4gbV9sYXN0U3VzcGVuZGVkUGFnZTsKIAorICAgIFRleHRNYW5p
cHVsYXRpb25JdGVtQ2FsbGJhY2sgbV90ZXh0TWFuaXB1bGF0aW9uSXRlbUNhbGxiYWNrOworCiAj
aWYgSEFWRShQRU5DSUxLSVQpCiAgICAgc3RkOjp1bmlxdWVfcHRyPEVkaXRhYmxlSW1hZ2VDb250
cm9sbGVyPiBtX2VkaXRhYmxlSW1hZ2VDb250cm9sbGVyOwogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lv
biAyNTE0NzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2Fn
ZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTU4MSw0ICs1ODEsOSBAQAogICAgIFNlbmRNZXNzYWdl
VG9XZWJWaWV3KHN0cnVjdCBXZWJLaXQ6OlVzZXJNZXNzYWdlIHVzZXJNZXNzYWdlKQogICAgIFNl
bmRNZXNzYWdlVG9XZWJWaWV3V2l0aFJlcGx5KHN0cnVjdCBXZWJLaXQ6OlVzZXJNZXNzYWdlIHVz
ZXJNZXNzYWdlKSAtPiAoc3RydWN0IFdlYktpdDo6VXNlck1lc3NhZ2UgcmVwbHlNZXNzYWdlKSBB
c3luYwogI2VuZGlmCisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBEaWRGaW5kVGV4dE1hbmlw
dWxhdGlvbkl0ZW0oV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIFdlYkNvcmU6OlRl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRlbnRpZmllciBpZGVudGlmaWVyLCBWZWN0
b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2Vu
PiB0b2tlbnMpCisjZW5kaWYKKwogfQpJbmRleDogU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNTE0NzYpCisrKyBTb3VyY2UvV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzMzLDYgKzEzMzMsMTEgQEAKIAkJOTlFNzE0QzUxQzEyNEEwNDAwNjY1QjNBIC8qIF9XS0F1dG9t
YXRpb25EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTlFNzE0QzExQzEyNDlFNjAwNjY1QjNBIC8qIF9XS0F1dG9tYXRpb25EZWxlZ2F0ZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTk5RTcx
ODlBMjFGNzlEOUUwMDU1RTk3NSAvKiBfV0tUb3VjaEV2ZW50R2VuZXJhdG9yLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTlFNzE4OTYyMUY3OUQ5RDAw
NTVFOTc1IC8qIF9XS1RvdWNoRXZlbnRHZW5lcmF0b3IubW0gKi87IH07CiAJCTk5RTcxODlDMjFG
NzlEOUUwMDU1RTk3NSAvKiBfV0tUb3VjaEV2ZW50R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OUU3MTg5ODIxRjc5RDlFMDA1NUU5NzUg
LyogX1dLVG91Y2hFdmVudEdlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTlCMDJFMENCMjM1RUI5NTMwMDQwNDRCMiAvKiBfV0tUZXh0
TWFuaXB1bGF0aW9uRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDlCMDJFMEM5MjM1RUI2MkQwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0
aW9uRGVsZWdhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk5QjAyRTBDQzIzNUVCOTU3MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvbkl0
ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMDJF
MENBMjM1RUI4ODQwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTlCMDJFMENGMjM1RUJC
MTQwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4ubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAyRTBDRTIzNUVCQjE0MDA0MDQ0QjIg
LyogX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLm1tICovOyB9OworCQk5QjAyRTBEMTIzNUVCQ0NB
MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0ubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAyRTBEMDIzNUVCQ0NBMDA0MDQ0QjIgLyog
X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0ubW0gKi87IH07CisJCTlCMDJFMEQ3MjM1RkM5NEYwMDQw
NDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMDJFMENEMjM1RUI5NjcwMDQwNDRCMiAvKiBfV0tU
ZXh0TWFuaXB1bGF0aW9uVG9rZW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk5RkI1RjM5NTE2OUU2QTgwMDAyQzI1QkYgLyogV0tDb250ZXh0UHJp
dmF0ZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OUZCNUYzOTMxNjlFNkE4MDAwMkMyNUJGIC8qIFdLQ29udGV4dFByaXZhdGVNYWMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBMTAyQTcwODFFQzBF
RUU5MDBEODFEODIgLyogY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyIEVTUi5wbHVnaW4uc2Ig
aW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0E1RTM5NDkxRDVCRDhBNzAwQjRCN0NFIC8qIGNvbS5tYWNyb21lZGlhLkZs
YXNoIFBsYXllciBFU1IucGx1Z2luLnNiICovOyB9OwogCQlBMTA0NkVBMTIwNzkyNjMxMDBGMEM1
RDggLyogV0tQREZWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBMTA0NkU5RjIwNzkyNjMxMDBGMEM1RDggLyogV0tQREZWaWV3LmggKi87IH07CkBA
IC0xNzI5LDggKzE3MzQsNiBAQAogCQkJY29tcGlsZXJTcGVjID0gY29tLmFwcGxlLmNvbXBpbGVy
cy5wcm94eS5zY3JpcHQ7CiAJCQlmaWxlUGF0dGVybnMgPSAiKi5oIjsKIAkJCWZpbGVUeXBlID0g
cGF0dGVybi5wcm94eTsKLQkJCWlucHV0RmlsZXMgPSAoCi0JCQkpOwogCQkJaXNFZGl0YWJsZSA9
IDE7CiAJCQlvdXRwdXRGaWxlcyA9ICgKIAkJCQkiJChIRUFERVJfT1VUUFVUX0RJUikvJChJTlBV
VF9GSUxFX05BTUUpIiwKQEAgLTQwNDcsNiArNDA1MCwxMSBAQAogCQk5OUU3MTg5NjIxRjc5RDlE
MDA1NUU5NzUgLyogX1dLVG91Y2hFdmVudEdlbmVyYXRvci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IF9XS1RvdWNoRXZlbnRHZW5lcmF0b3IubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5RTcxODk4MjFGNzlEOUUwMDU1RTk3NSAvKiBfV0tUb3Vj
aEV2ZW50R2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1Rv
dWNoRXZlbnRHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTlGNjQy
RDIxRkFCRTM3ODAwOTYyMUU5IC8qIENvb3JkaW5hdGVTeXN0ZW0uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29vcmRpbmF0ZVN5c3RlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk5QjAyRTBDOTIzNUVCNjJEMDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlv
bkRlbGVnYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjAyRTBDQTIzNUVCODg0MDA0MDQ0QjIg
LyogX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLVGV4dE1hbmlw
dWxhdGlvbkl0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUIwMkUwQ0QyMzVF
Qjk2NzAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOUIwMkUwQ0UyMzVFQkIxNDAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUIwMkUwRDAyMzVFQkNDQTAwNDA0NEIyIC8qIF9X
S1RleHRNYW5pcHVsYXRpb25JdGVtLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLVGV4dE1h
bmlwdWxhdGlvbkl0ZW0ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCQzU5RDZD
MUVGQ0NDQjYwMDFFOEQwOSAvKiBDYWxsYmFja0lELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENhbGxiYWNrSUQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJD
NTlENkQxRUZDREM2RDAwMUU4RDA5IC8qIE9wdGlvbmFsQ2FsbGJhY2tJRC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBPcHRpb25hbENhbGxiYWNrSUQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOUY1NEY4OEUxNjQ4OEU4NzAwN0RGODFBIC8qIEF1eGlsaWFyeVBy
b2Nlc3NNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBdXhp
bGlhcnlQcm9jZXNzTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjM0NSw2
ICs2MzUzLDExIEBACiAJCQkJMUEwMDJEM0YxOTZCMzI5NDAwQjlBRDQ0IC8qIF9XS1Nlc3Npb25T
dGF0ZS5oICovLAogCQkJCTFBMDAyRDNFMTk2QjMyOTQwMEI5QUQ0NCAvKiBfV0tTZXNzaW9uU3Rh
dGUubW0gKi8sCiAJCQkJMUEwMDJENDIxOTZCMzM3MDAwQjlBRDQ0IC8qIF9XS1Nlc3Npb25TdGF0
ZUludGVybmFsLmggKi8sCisJCQkJOUIwMkUwQzkyMzVFQjYyRDAwNDA0NEIyIC8qIF9XS1RleHRN
YW5pcHVsYXRpb25EZWxlZ2F0ZS5oICovLAorCQkJCTlCMDJFMENBMjM1RUI4ODQwMDQwNDRCMiAv
KiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oICovLAorCQkJCTlCMDJFMEQwMjM1RUJDQ0EwMDQw
NDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5tbSAqLywKKwkJCQk5QjAyRTBDRDIzNUVC
OTY3MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmggKi8sCisJCQkJOUIwMkUw
Q0UyMzVFQkIxNDAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbSAqLywKIAkJ
CQkyREU5QjEzODIyMzFGNjFDMDA1Mjg3QjcgLyogX1dLVGV4dElucHV0Q29udGV4dC5oICovLAog
CQkJCTJERTlCMTM3MjIzMUY2MUMwMDUyODdCNyAvKiBfV0tUZXh0SW5wdXRDb250ZXh0Lm1tICov
LAogCQkJCTJERTlCMTNCMjIzMUY3N0MwMDUyODdCNyAvKiBfV0tUZXh0SW5wdXRDb250ZXh0SW50
ZXJuYWwuaCAqLywKQEAgLTEwMTEzLDYgKzEwMTI2LDcgQEAKIAkJCQlCQzIwNEVGMDExQzgzRUM4
MDA4RjMzNzUgLyogV0tCdW5kbGVBUElDYXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzVFRUI5
RjEyNzc2MUFDMDAzMzIyQjggLyogV0tCdW5kbGVCYWNrRm9yd2FyZExpc3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzNUVFQjlCMTI3NzYxN0MwMDMzMjJCOCAvKiBXS0J1bmRsZUJhY2tGb3J3YXJk
TGlzdEl0ZW0uaCBpbiBIZWFkZXJzICovLAorCQkJCTlCMDJFMENCMjM1RUI5NTMwMDQwNDRCMiAv
KiBfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRUZD
MUNGMTUyNEU2MjUwMEM5QTkzOCAvKiBXS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJN0NCQjgxMjExQUEwRjk3MDAwNkIxOTQyIC8qIFdLQnVuZGxlRmlsZUhh
bmRsZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjVGMTcxMUQ2QkRFMTAwMTY5QjBFIC8q
IFdLQnVuZGxlRnJhbWUuaCBpbiBIZWFkZXJzICovLApAQCAtMTAzMTcsNiArMTAzMzEsNyBAQAog
CQkJCTJEOUVBMzBEMUE5NkNCNTkwMDJEMjgwNyAvKiBXS1BhZ2VJbmplY3RlZEJ1bmRsZUNsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCOEExRUMxODQwMDgwOTAwRTlBRTY5IC8qIFdLUGFn
ZUxvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMyRDAyMTkxMkFDNDI2QzAwRTcz
MkEzIC8qIFdLUGFnZUxvYWRUeXBlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOUIwMkUwRDcyMzVG
Qzk0RjAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTNCREVCMDExNzFERDdBRjAwQkZFRTFCIC8qIFdLUGFnZUxvYWRUeXBlc1ByaXZhdGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTJENzMwMzc5MUE3QzJCNzUwMEY4RjQ4NyAvKiBXS1BhZ2VO
YXZpZ2F0aW9uQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUI4QTFFRTE4NDAwQUNCMDBF
OUFFNjkgLyogV0tQYWdlUG9saWN5Q2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTEwMzgxLDYg
KzEwMzk2LDcgQEAKIAkJCQlCQzQwNzYwNjEyNEZGMDI3MDA2OEYyMEEgLyogV0tTdHJpbmcuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDNDA3NjFBMTI0RkYwMzcwMDY4RjIwQSAvKiBXS1N0cmluZ0NG
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzkwOTk4MDEyNTZBOTgyMDAwODM3NTYgLyogV0tTdHJp
bmdQcml2YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQk5QjAyRTBDQzIzNUVCOTU3MDA0MDQ0QjIg
LyogX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCUNFNUI0Qzg4
MjFCNzNEODcwMDIyRTY0RiAvKiBXS1N5bnRoZXRpY0ZsYWdzQ2hhbmdlZFdlYkV2ZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQkyNkYxMEJFODE5MTg3RTJFMDAxRDBFNjggLyogV0tTeW50aGV0aWNU
YXBHZXN0dXJlUmVjb2duaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE2QjhCNjQyMDU0QjU1
ODAwQkQ0QTYyIC8qIFdLU3lzdGVtUHJldmlld1ZpZXcuaCBpbiBIZWFkZXJzICovLApAQCAtMTE1
NzQsMTEgKzExNTkwLDEzIEBACiAJCQkJOTM1NkYyRTEyMTUyQjc2NjAwRTZENURGIC8qIFdlYlNX
U2VydmVyQ29ubmVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTdBNTJEODFGNDNBOURB
MDBEQ0RDMEEgLyogV2ViU1dTZXJ2ZXJDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkzNTZGMkUwMjE1MkI3NTIwMEU2RDVERiAvKiBXZWJTV1NlcnZlclRv
Q29udGV4dENvbm5lY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOUIwMkUwRDEyMzVFQkND
QTAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTE1MjYyQkQxRkI5NTE2MTAwNzBFNTc5IC8qIFdlYlNXU2VydmVyVG9Db250ZXh0Q29ubmVj
dGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDkyQTc4RTIxMkI2
QUIxMDBGNDkzRkQgLyogV2ViVG91Y2hFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUFG
MDhCNzE5MjY5RTZEMDBCNjM5MEMgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyTWVzc2FnZVJl
Y2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDMzYxRDc4MTkyODAzQkQwMDM2QTU5RCAv
KiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkyRDkyQTc4RjIxMkI2QUIxMDBGNDkzRkQgLyogV2ViV2hlZWxFdmVudC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk5QjAyRTBDRjIzNUVCQjE0MDA0MDQ0QjIgLyogX1dLVGV4
dE1hbmlwdWxhdGlvblRva2VuLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQzZBNENBMEMyMjUyODk5
ODAwMTY5Mjg5IC8qIFdLQnVuZGxlUGFnZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJEOTMx
MTY5MjEyRjYxQjIwMDA0NEJGRSAvKiBXS0NvbnRlbnRWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMkQ5MzExNkEyMTJGNjFCNTAwMDQ0QkZFIC8qIFdLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bSBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDI1MTQ3NikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODI5LDYgKzY4Mjks
NTYgQEAKICAgICByZXR1cm4gV2ViQ29yZTo6RWxlbWVudENvbnRleHQgeyBlbGVtZW50UmVjdElu
Um9vdFZpZXdDb29yZGluYXRlcyhlbGVtZW50LCAqZnJhbWUpLCBtX2lkZW50aWZpZXIsIGRvY3Vt
ZW50LmlkZW50aWZpZXIoKSwgZG9jdW1lbnQuaWRlbnRpZmllckZvckVsZW1lbnQoZWxlbWVudCkg
fTsKIH0KIAordm9pZCBXZWJQYWdlOjpzdGFydFRleHRNYW5pcHVsYXRpb25zKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBpZiAoIW1fcGFnZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBtYWluRG9jdW1lbnQgPSBtYWtlUmVmUHRyKG1f
cGFnZS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKSk7CisgICAgaWYgKCFtYWluRG9jdW1lbnQpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1haW5Eb2N1bWVudC0+dGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXIoKS5zdGFydE9ic2VydmluZ1BhcmFncmFwaHMoW3dlYlBhZ2UgPSBtYWtlV2Vha1B0cigq
dGhpcyldIChXZWJDb3JlOjpEb2N1bWVudCYgZG9jdW1lbnQsCisgICAgICAgIFdlYkNvcmU6OlRl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRlbnRpZmllciBpdGVtSWRlbnRpZmllciwg
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVs
YXRpb25Ub2tlbj4mIHRva2VucykgeworICAgICAgICBhdXRvKiBmcmFtZSA9IGRvY3VtZW50LmZy
YW1lKCk7CisgICAgICAgIGlmICghd2ViUGFnZSB8fCAhZnJhbWUgfHwgd2ViUGFnZS0+bWFpbkZy
YW1lKCkgIT0gZnJhbWUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byogd2Vi
RnJhbWUgPSBXZWJGcmFtZTo6ZnJvbUNvcmVGcmFtZSgqZnJhbWUpOworICAgICAgICBpZiAoIXdl
YkZyYW1lKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHdlYlBhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmluZFRleHRNYW5pcHVsYXRpb25JdGVtKHdlYkZyYW1l
LT5mcmFtZUlEKCksIGl0ZW1JZGVudGlmaWVyLCB0b2tlbnMpKTsKKyAgICB9KTsKKyAgICAvLyBG
b3Igbm93LCB3ZSBhc3N1bWUgc3RhcnRPYnNlcnZpbmdQYXJhZ3JhcGhzIGZpbmQgYWxsIHBhcmFn
cmFwaHMgc3luY2hyb25vdXNseSBhdCBvbmNlLgorICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cit9
CisKK3ZvaWQgV2ViUGFnZTo6Y29tcGxldGVUZXh0TWFuaXB1bGF0aW9uKFdlYkNvcmU6OkZyYW1l
SWRlbnRpZmllciBmcmFtZUlELCBXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6
SXRlbUlkZW50aWZpZXIgaXRlbUlELAorICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFu
aXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+JiB0b2tlbnMsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgYXV0byBj
b21wbGV0ZU1hbmlwdWxhdGlvbiA9IFsmXSAoKSB7CisgICAgICAgIGlmICghbV9wYWdlKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1dG8mIG1haW5GcmFtZSA9IG1fcGFn
ZS0+bWFpbkZyYW1lKCk7CisgICAgICAgIGF1dG8qIHdlYkZyYW1lID0gV2ViRnJhbWU6OmZyb21D
b3JlRnJhbWUobWFpbkZyYW1lKTsKKyAgICAgICAgaWYgKCF3ZWJGcmFtZSB8fCB3ZWJGcmFtZS0+
ZnJhbWVJRCgpICE9IGZyYW1lSUQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgYXV0byBtYWluRG9jdW1lbnQgPSBtYWtlUmVmUHRyKG1haW5GcmFtZS5kb2N1bWVudCgpKTsK
KyAgICAgICAgaWYgKCFtYWluRG9jdW1lbnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgYXV0byogY29udHJvbGxlciA9IG1haW5Eb2N1bWVudC0+dGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXJJZkV4aXN0cygpOworICAgICAgICBpZiAoIWNvbnRyb2xsZXIpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXItPmNvbXBsZXRl
TWFuaXB1bGF0aW9uKGl0ZW1JRCwgdG9rZW5zKTsKKyAgICB9OworICAgIGNvbXBsZXRpb25IYW5k
bGVyKGNvbXBsZXRlTWFuaXB1bGF0aW9uKCkpOworfQorCiBQQUw6OlNlc3Npb25JRCBXZWJQYWdl
OjpzZXNzaW9uSUQoKSBjb25zdAogewogICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5zZXNzaW9uSUQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmgJKHJldmlzaW9uIDI1MTQ3NikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQAogI2luY2x1
ZGUgPFdlYkNvcmUvUG9pbnRlcklELmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eVBvbGlj
eVZpb2xhdGlvbkV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZURhdGEuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9Vc2VyQWN0aXZpdHkuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJDb250ZW50VHlwZXMu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24uaD4KQEAg
LTExOTYsNiArMTE5NywxMCBAQAogICAgIFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnRGb3JDb250
ZXh0KGNvbnN0IFdlYkNvcmU6OkVsZW1lbnRDb250ZXh0JikgY29uc3Q7CiAgICAgT3B0aW9uYWw8
V2ViQ29yZTo6RWxlbWVudENvbnRleHQ+IGNvbnRleHRGb3JFbGVtZW50KFdlYkNvcmU6OkVsZW1l
bnQmKSBjb25zdDsKIAorICAgIHZvaWQgc3RhcnRUZXh0TWFuaXB1bGF0aW9ucyhDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOworICAgIHZvaWQgY29tcGxldGVU
ZXh0TWFuaXB1bGF0aW9uKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciwgV2ViQ29yZTo6VGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyLAorICAgICAgICBjb25zdCBWZWN0
b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2Vu
PiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOworCiAjaWYgRU5BQkxFKEFQUExF
X1BBWSkKICAgICBXZWJQYXltZW50Q29vcmRpbmF0b3IqIHBheW1lbnRDb29yZGluYXRvcigpOwog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1l
c3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI1MTQ3NikKKysrIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAg
LTU4Miw0ICs1ODIsNyBAQAogICAgIFNlbmRNZXNzYWdlVG9XZWJFeHRlbnNpb24oc3RydWN0IFdl
YktpdDo6VXNlck1lc3NhZ2UgdXNlck1lc3NhZ2UpCiAgICAgU2VuZE1lc3NhZ2VUb1dlYkV4dGVu
c2lvbldpdGhSZXBseShzdHJ1Y3QgV2ViS2l0OjpVc2VyTWVzc2FnZSB1c2VyTWVzc2FnZSkgLT4g
KHN0cnVjdCBXZWJLaXQ6OlVzZXJNZXNzYWdlIHJlcGx5TWVzc2FnZSkgQXN5bmMKICNlbmRpZgor
CisgICAgU3RhcnRUZXh0TWFuaXB1bGF0aW9ucygpIC0+ICgpIEFzeW5jCisgICAgQ29tcGxldGVU
ZXh0TWFuaXB1bGF0aW9uKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBXZWJDb3Jl
OjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIgaXRlbUlkZW50aWZp
ZXIsIFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0
aW9uVG9rZW4+IHRva2VucykgLT4gKGJvb2wgc3VjY2VzcykgQXN5bmMKIH0KSW5kZXg6IFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNTE0NzYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtNzM4LDYgKzczOCw3IEBACiAJCTk5ODRGQUNDMUNGRkFGNjAwMDhEMTk4QyAvKiBXS1dlYlZp
ZXdUZXh0SW5wdXQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5OTg0RkFDQTFDRkZBRUVFMDA4RDE5OEMgLyogV0tXZWJWaWV3VGV4dElucHV0Lm1tICov
OyB9OwogCQk5OTg0RkFDRTFDRkZCMDkwMDA4RDE5OEMgLyogZWRpdGFibGUtYm9keS5odG1sIGlu
IENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5ODRG
QUNEMUNGRkIwMzgwMDhEMTk4QyAvKiBlZGl0YWJsZS1ib2R5Lmh0bWwgKi87IH07CiAJCTk5OTkx
MDhCMUYzOTNDOTYwMDhBRDQ1NSAvKiBDb3B5aW5nLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTk5OTEwOEExRjM5M0M4QjAwOEFENDU1IC8qIENvcHlp
bmcubW0gKi87IH07CisJCTlCMDJFMEQ2MjM1RkE0N0QwMDQwNDRCMiAvKiBUZXh0TWFuaXB1bGF0
aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIw
MkUwRDUyMzVGQTQ3RDAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRpb24ubW0gKi87IH07CiAJCTlC
MDc4NkE1MUM1ODg1QzMwMEQxNTlFMyAvKiBJbmplY3RlZEJ1bmRsZU1ha2VBbGxTaGFkb3dSb290
c09wZW5fQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDlCMDc4NkE0MUM1ODg1QzMwMEQxNTlFMyAvKiBJbmplY3RlZEJ1bmRsZU1ha2VBbGxT
aGFkb3dSb290c09wZW5fQnVuZGxlLmNwcCAqLzsgfTsKIAkJOUIxOUNEQTAxRjA2REZFMzAwMDU0
OEREIC8qIE5ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjE5Q0Q5RTFGMDZERkUz
MDAwNTQ4REQgLyogTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbSAq
LzsgfTsKIAkJOUIxRjZGNzgxRjkwNTU4NDAwQjU1NzQ0IC8qIENvcHlIVE1MLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIxMDU2NDExRjkwNDVDNzAw
RDU1ODNGIC8qIENvcHlIVE1MLm1tICovOyB9OwpAQCAtMjEyOCw2ICsyMTI5LDcgQEAKIAkJOTk4
NEZBQ0ExQ0ZGQUVFRTAwOEQxOThDIC8qIFdLV2ViVmlld1RleHRJbnB1dC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2ViVmlld1RleHRJbnB1dC5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTk4NEZBQ0QxQ0ZGQjAzODAwOEQxOThDIC8qIGVk
aXRhYmxlLWJvZHkuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJlZGl0YWJsZS1i
b2R5Lmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTk5MTA4QTFGMzkzQzhC
MDA4QUQ0NTUgLyogQ29weWluZy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IENvcHlpbmcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCMDJFMEQ1
MjM1RkE0N0QwMDQwNDRCMiAvKiBUZXh0TWFuaXB1bGF0aW9uLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gVGV4dE1hbmlwdWxhdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OUIwNzg2QTIxQzU4ODMwRjAwRDE1OUUzIC8qIEluamVjdGVkQnVuZGxlTWFrZUFsbFNoYWRvd1Jv
b3RzT3Blbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmplY3Rl
ZEJ1bmRsZU1ha2VBbGxTaGFkb3dSb290c09wZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5QjA3ODZBNDFDNTg4NUMzMDBEMTU5RTMgLyogSW5qZWN0ZWRCdW5kbGVNYWtlQWxs
U2hhZG93Um9vdHNPcGVuX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbmplY3RlZEJ1bmRsZU1ha2VBbGxTaGFkb3dSb290c09wZW5fQnVuZGxlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIxMDU2NDExRjkwNDVDNzAwRDU1ODNGIC8q
IENvcHlIVE1MLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29weUhUTUwubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yOTM5LDYgKzI5NDEsNyBAQAogCQkJCTU3NzRBQTY3MjFG
QkJGNzgwMEFGMkExQiAvKiBUZXN0U09BdXRob3JpemF0aW9uLm1tICovLAogCQkJCUY0Q0Q3NEM3
MjBGREI0OTYwMERFMzc5NCAvKiBUZXN0VVJMU2NoZW1lSGFuZGxlci5oICovLAogCQkJCUY0Q0Q3
NEM4MjBGREI0OTYwMERFMzc5NCAvKiBUZXN0VVJMU2NoZW1lSGFuZGxlci5tbSAqLywKKwkJCQk5
QjAyRTBENTIzNUZBNDdEMDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbi5tbSAqLywKIAkJCQk1
QzE2RjhGQjIzMEM5NDJCMDA3NEM0QTggLyogVGV4dFNpemUubW0gKi8sCiAJCQkJQzIyRkEzMkEy
MjhGODcwODAwOUQ3OTg4IC8qIFRleHRXaWR0aC5tbSAqLywKIAkJCQk1QzczQTgxQTIzMjMwNTk4
MDBERUE4NUEgLyogVExTRGVwcmVjYXRpb24ubW0gKi8sCkBAIC00ODIyLDYgKzQ4MjUsNyBAQAog
CQkJCUY0NTAzM0Y1MjA2QkVDOTUwMDkzNTFDRSAvKiBUZXh0QXV0b3NpemluZ0Jvb3N0Lm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTNFNjE5M0IxRjkzMUIzQTAwQUYyNDVFIC8qIFRleHRDb2RlYy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlDRTM1MjRGOTFCMTQ0MUM0MDAyOEE3QzUgLyogVGV4dEZp
ZWxkRGlkQmVnaW5BbmRFbmRFZGl0aW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTlCMDJFMEQ2
MjM1RkE0N0QwMDQwNDRCMiAvKiBUZXh0TWFuaXB1bGF0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNUMxNkY4RkMyMzBDOTQzNzAwNzRDNEE4IC8qIFRleHRTaXplLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQzIyRkEzMkIyMjhGODcwODAwOUQ3OTg4IC8qIFRleHRXaWR0aC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTdDQ0U3RUREMUE0MTFBOTIwMDQ0N0M0QyAvKiBUaW1lUmFuZ2VzLmNwcCBpbiBT
b3VyY2VzICovLApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9U
ZXh0TWFuaXB1bGF0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbQkobm9uZXhpc3RlbnQpCisrKyBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW0JKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0ICJUZXN0Lmgi
CisjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJp
dmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0L19XS1RleHRNYW5pcHVsYXRpb25JdGVtLmg+CisjaW1wb3J0IDxXZWJL
aXQvX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmg+CisjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4K
KyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworc3RhdGljIGJvb2wgZG9uZSA9IGZhbHNlOwor
CitAaW50ZXJmYWNlIFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSA6IE5TT2JqZWN0IDxfV0tUZXh0
TWFuaXB1bGF0aW9uRGVsZWdhdGU+CisKKy0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdl
YlZpZXcgZGlkRmluZEl0ZW06KF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICopaXRlbSBmb3JGcmFt
ZTooX1dLRnJhbWVIYW5kbGUgKilmcmFtZTsKKy0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAq
KXdlYlZpZXcgZGlkRmluaXNoSW5pdGlhbE9ic2VydmF0aW9uRm9yRnJhbWU6KF9XS0ZyYW1lSGFu
ZGxlICopZnJhbWU7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNB
cnJheTxfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqPiAqaXRlbXM7CisKK0BlbmQKKworQGltcGxl
bWVudGF0aW9uIFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSB7CisgICAgUmV0YWluUHRyPE5TTXV0
YWJsZUFycmF5PiBfaXRlbXM7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0Cit7CisgICAgaWYg
KCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgX2l0ZW1z
ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAgcmV0dXJuIHNl
bGY7Cit9CisKKy0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkRmluZEl0
ZW06KF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICopaXRlbSBmb3JGcmFtZTooX1dLRnJhbWVIYW5k
bGUgKilmcmFtZQoreworICAgIFtfaXRlbXMuZ2V0KCkgYWRkT2JqZWN0Oml0ZW1dOworfQorCist
ICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZEZpbmlzaEluaXRpYWxPYnNl
cnZhdGlvbkZvckZyYW1lOihfV0tGcmFtZUhhbmRsZSAqKWZyYW1lCit7CisgICAgZG9uZSA9IHRy
dWU7Cit9CisKKy0gKE5TQXJyYXk8X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKj4gKilpdGVtcwor
eworICAgIHJldHVybiBfaXRlbXMuYXV0b3JlbGVhc2UoKTsKK30KKworQGVuZAorCituYW1lc3Bh
Y2UgVGVzdFdlYktpdEFQSSB7CisKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgU3RhcnRUZXh0TWFu
aXB1bGF0aW9uRmluZFNpbXBsZVBhcmFncmFwaHMpCit7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFk
b3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpO
U01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOworICAgIHdlYlZpZXcuZ2V0KCkuX3RleHRNYW5p
cHVsYXRpb25EZWxlZ2F0ZSA9IGRlbGVnYXRlLmdldCgpOworCisgICAgW3dlYlZpZXcgc3luY2hy
b25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPCFET0NUWVBFIGh0bWw+IgorICAgICAgICAiPGh0bWw+
PGJvZHk+aGVsbG88YnI+d29ybGQ8ZGl2PldlYktpdDwvZGl2PjwvYm9keT48L2h0bWw+Il07CisK
KyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNd
OworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBhdXRvICppdGVt
cyA9IGRlbGVnYXRlLmdldCgpLml0ZW1zOworICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwgM1VM
KTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMF0udG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVD
VF9TVFJFUSgiaGVsbG8iLCBpdGVtc1swXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsK
KworICAgIEVYUEVDVF9FUShpdGVtc1sxXS50b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQRUNU
X1NUUkVRKCJ3b3JsZCIsIGl0ZW1zWzFdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOwor
CisgICAgRVhQRUNUX0VRKGl0ZW1zWzJdLnRva2Vucy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1Rf
U1RSRVEoIldlYktpdCIsIGl0ZW1zWzJdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOwor
fQorCitURVNUKFRleHRNYW5pcHVsYXRpb24sIFN0YXJ0VGV4dE1hbmlwdWxhdGlvbkZpbmRQYXJh
Z3JhcGhzV2l0aE11bHRpbGVUb2tlbnMpCit7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMo
W1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHdlYlZp
ZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VS
ZWN0KDAsIDAsIDQwMCwgNDAwKV0pOworICAgIHdlYlZpZXcuZ2V0KCkuX3RleHRNYW5pcHVsYXRp
b25EZWxlZ2F0ZSA9IGRlbGVnYXRlLmdldCgpOworICAgIAorICAgIFt3ZWJWaWV3IHN5bmNocm9u
b3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPiIKKyAgICAgIjxodG1sPjxib2R5
PmhlbGxvLCAgPGI+d29ybGQ8L2I+PGJyPjxkaXY+PGVtPiA8Yj5XZWI8L2I+S2l0PC9lbT4gIDwv
ZGl2PjwvYm9keT48L2h0bWw+Il07CisgICAgCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJW
aWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zXTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmRvbmUpOworICAgIAorICAgIGF1dG8gKml0ZW1zID0gZGVsZWdhdGUuZ2V0KCkuaXRlbXM7
CisgICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAyVUwpOworICAgIEVYUEVDVF9FUShpdGVtc1sw
XS50b2tlbnMuY291bnQsIDJVTCk7CisgICAgRVhQRUNUX1NUUkVRKCJoZWxsbywgIiwgaXRlbXNb
MF0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCJ3b3Js
ZCIsIGl0ZW1zWzBdLnRva2Vuc1sxXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIAorICAgIEVY
UEVDVF9FUShpdGVtc1sxXS50b2tlbnMuY291bnQsIDJVTCk7CisgICAgRVhQRUNUX1NUUkVRKCJX
ZWIiLCBpdGVtc1sxXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1Rf
U1RSRVEoIktpdCIsIGl0ZW1zWzFdLnRva2Vuc1sxXS5jb250ZW50LlVURjhTdHJpbmcpOworfQor
CitzdHJ1Y3QgVG9rZW4geworICAgIE5TU3RyaW5nICppZGVudGlmaWVyOworICAgIE5TU3RyaW5n
ICpjb250ZW50OworfTsKKwordGVtcGxhdGU8c2l6ZV90IGxlbmd0aD4KK3N0YXRpYyBSZXRhaW5Q
dHI8X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0+IGNyZWF0ZUl0ZW0oTlNTdHJpbmcgKml0ZW1JZGVu
dGlmaWVyLCBjb25zdCBUb2tlbiAoJnRva2VucylbbGVuZ3RoXSkKK3sKKyAgICBSZXRhaW5QdHI8
TlNNdXRhYmxlQXJyYXk+IHdrVG9rZW5zID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0XSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAg
ICAgICBSZXRhaW5QdHI8X1dLVGV4dE1hbmlwdWxhdGlvblRva2VuPiB0b2tlbiA9IGFkb3B0TlMo
W1tfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gYWxsb2NdIGluaXRdKTsKKyAgICAgICAgdG9rZW4u
Z2V0KCkuaWRlbnRpZmllciA9IHRva2Vuc1tpXS5pZGVudGlmaWVyOworICAgICAgICB0b2tlbi5n
ZXQoKS5jb250ZW50ID0gdG9rZW5zW2ldLmNvbnRlbnQ7CisgICAgICAgIFt3a1Rva2Vucy5nZXQo
KSBhZGRPYmplY3Q6dG9rZW4uZ2V0KCldOworICAgIH0KKyAgICByZXR1cm4gYWRvcHROUyhbW19X
S1RleHRNYW5pcHVsYXRpb25JdGVtIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6aXRlbUlkZW50
aWZpZXIgdG9rZW5zOndrVG9rZW5zLmdldCgpXSk7Cit9CisKK1RFU1QoVGV4dE1hbmlwdWxhdGlv
biwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uU2hvbGRSZXBsYWNlU2ltcGxlUGFyYWdyYXBoQ29u
dGVudCkKK3sKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1RleHRNYW5pcHVsYXRpb25E
ZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgNDAwLCA0MDAp
XSk7CisgICAgd2ViVmlldy5nZXQoKS5fdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlID0gZGVsZWdh
dGUuZ2V0KCk7CisKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8
IURPQ1RZUEUgaHRtbD4iCisgICAgICI8aHRtbD48Ym9keT48cD5oZWxsbG8sIHdvb29ybGQ8L3A+
PHA+IGhleSwgPGI+IEtpdHM8L2I+IGlzIDxlbT5jdXV1dGU8L2VtPjwvcD48L2JvZHk+PC9odG1s
PiJdOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9zdGFydFRleHRNYW5pcHVs
YXRpb25zXTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgYXV0
byAqaXRlbXMgPSBkZWxlZ2F0ZS5nZXQoKS5pdGVtczsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291
bnQsIDJVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgMVVMKTsKKyAg
ICBFWFBFQ1RfU1RSRVEoImhlbGxsbywgd29vb3JsZCIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250
ZW50LlVURjhTdHJpbmcpOworCisgICAgRVhQRUNUX0VRKGl0ZW1zWzFdLnRva2Vucy5jb3VudCwg
NFVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoImhleSwgIiwgaXRlbXNbMV0udG9rZW5zWzBdLmNvbnRl
bnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCJLaXRzIiwgaXRlbXNbMV0udG9rZW5z
WzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCIgaXMgIiwgaXRlbXNb
MV0udG9rZW5zWzJdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCJjdXV1
dGUiLCBpdGVtc1sxXS50b2tlbnNbM10uY29udGVudC5VVEY4U3RyaW5nKTsKKworICAgIGRvbmUg
PSBmYWxzZTsKKyAgICBbd2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0
TWFuaXB1bGF0aW9uSXRlbSAqKWNyZWF0ZUl0ZW0oaXRlbXNbMV0uaWRlbnRpZmllciwgeworICAg
ICAgICB7IGl0ZW1zWzFdLnRva2Vuc1swXS5pZGVudGlmaWVyLCBAIkhlbGxvLCAiIH0sCisgICAg
ICAgIHsgaXRlbXNbMV0udG9rZW5zWzFdLmlkZW50aWZpZXIsIEAia2l0dGVucyIgfSwKKyAgICAg
ICAgeyBpdGVtc1sxXS50b2tlbnNbMl0uaWRlbnRpZmllciwgQCIgYXJlICIgfSwKKyAgICAgICAg
eyBpdGVtc1sxXS50b2tlbnNbM10uaWRlbnRpZmllciwgQCJjdXRlIiB9LAorICAgIH0pLmdldCgp
IGNvbXBsZXRpb246XihCT09MIHN1Y2Nlc3MpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoc3VjY2Vz
cyk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmZG9uZSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCI8cD5oZWxsbG8sIHdvb29ybGQ8
L3A+PHA+SGVsbG8sIDxiPmtpdHRlbnM8L2I+IGFyZSA8ZW0+Y3V0ZTwvZW0+PC9wPiIsCisgICAg
ICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5
LmlubmVySFRNTCJdKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfY29tcGxl
dGVUZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWNyZWF0ZUl0ZW0o
aXRlbXNbMF0uaWRlbnRpZmllciwgeworICAgICAgICB7IGl0ZW1zWzBdLnRva2Vuc1swXS5pZGVu
dGlmaWVyLCBAIkhlbGxvLCB3b3JsZC4iIH0sCisgICAgfSkuZ2V0KCkgY29tcGxldGlvbjpeKEJP
T0wgc3VjY2VzcykgeworICAgICAgICBFWFBFQ1RfVFJVRShzdWNjZXNzKTsKKyAgICAgICAgZG9u
ZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsK
KyAgICBFWFBFQ1RfV0tfU1RSRVEoIjxwPkhlbGxvLCB3b3JsZC48L3A+PHA+SGVsbG8sIDxiPmtp
dHRlbnM8L2I+IGFyZSA8ZW0+Y3V0ZTwvZW0+PC9wPiIsCisgICAgICAgIFt3ZWJWaWV3IHN0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmlubmVySFRNTCJdKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381728</attachid>
            <date>2019-10-23 14:22:21 -0700</date>
            <delta_ts>2019-10-23 15:22:13 -0700</delta_ts>
            <desc>WIP2</desc>
            <filename>wip203286b.patch</filename>
            <type>text/plain</type>
            <size>66552</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZQkocmV2aXNpb24gMjUxNDk0KQorKysgU291cmNlL1dlYkNv
cmUvSGVhZGVycy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtNTAzLDYgKzUwMyw3IEBACiAgICAg
ZWRpdGluZy9UZXh0R3JhbnVsYXJpdHkuaAogICAgIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKICAg
ICBlZGl0aW5nL1RleHRJdGVyYXRvckJlaGF2aW9yLmgKKyAgICBlZGl0aW5nL1RleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyLmgKICAgICBlZGl0aW5nL1VuZG9TdGVwLmgKICAgICBlZGl0aW5nL1Zp
c2libGVQb3NpdGlvbi5oCiAgICAgZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDI1MTQ5NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjg1Miw3ICsyODUyLDEwIEBACiAJCTk5NkU1
OURGMURGMDEyOEQwMDY2MTJCOSAvKiBOYXZpZ2F0b3JXZWJEcml2ZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5NkU1OURDMURGMDBEOTAwMDY2MTJC
OSAvKiBOYXZpZ2F0b3JXZWJEcml2ZXIuaCAqLzsgfTsKIAkJOUE1MjhFODQxN0Q3RjUyRjAwQUE5
NTE4IC8qIEZsb2F0aW5nT2JqZWN0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOUE1MjhFODIxN0Q3RjUyRjAwQUE5NTE4IC8qIEZsb2F0aW5nT2JqZWN0
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlB
QjFGMzgwMThFMjQ4OUEwMDUzNDc0MyAvKiBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QUIxRjM3RTE4RTI0
ODlBMDA1MzQ3NDMgLyogQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTlCMDJFMEM2MjM1RTc2QUEwMDQw
NDRCMiAvKiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAyRTBDNDIzNUU3NkFBMDA0MDQ0QjIgLyog
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwICovOyB9OworCQk5QjAyRTBDODIzNUVBRDJB
MDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMDJFMEMzMjM1RTc2QUEwMDQwNDRCMiAv
KiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlCMjRERThFMTUxOTRCOTUwMEM1OUMyNyAvKiBIVE1M
QkRJRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOUIyNERFOEMxNTE5NEI5NTAwQzU5QzI3IC8qIEhUTUxCRElFbGVtZW50LmggKi87IH07CisJ
CTlCMjcwREE5MjM2MEY1MEMwMEZDMzMxRCAvKiBUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMjcwREE3MjM2MEY1
MEEwMEZDMzMxRCAvKiBUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5QjI3RkM2MDIzNEQ5QURCMDAzOTRBNDYg
LyogV2luZG93RXZlbnRMb29wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5QjI3RkM1RTIzNEQ5QURBMDAzOTRBNDYgLyogV2luZG93RXZlbnRMb29wLmgg
Ki87IH07CiAJCTlCMkQ4QTc5MTQ5OTdDQ0YwMEVDRUYzRSAvKiBVbmRvU3RlcC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIyRDhBNzgxNDk5N0NDRjAw
RUNFRjNFIC8qIFVuZG9TdGVwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJOUIzMkNEQTkxM0RGN0ZBOTAwRjM0RDEzIC8qIFJlbmRlcmVkUG9zaXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMzJD
REE3MTNERjdGQTkwMEYzNEQxMyAvKiBSZW5kZXJlZFBvc2l0aW9uLmggKi87IH07CkBAIC0xMTA3
NCw2ICsxMTA3Nyw4IEBACiAJCTlBQzZGMDI1MjExNDhGNTQwMENCREEwNiAvKiBNZWRpYUVuZ2lu
ZUNvbmZpZ3VyYXRpb25GYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IE1lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnkuaDsgcGF0aCA9IG1lZGlhY2FwYWJpbGl0
aWVzL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOUFDNkYwMkQyMTE0OEY5RjAwQ0JEQTA2IC8qIE1lZGlhRW5naW5lQ29uZmln
dXJhdGlvbkZhY3RvcnlNb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE1lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlNb2NrLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOUFDNkYwMkYyMTE0OEZBMjAwQ0JEQTA2IC8qIE1lZGlhRW5naW5l
Q29uZmlndXJhdGlvbkZhY3RvcnlNb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlNb2NrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTlCMDJFMEMzMjM1RTc2QUEwMDQwNDRCMiAvKiBUZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjAyRTBDNDIzNUU3NkFBMDA0MDQ0
QjIgLyogVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzNGNjQgLyogUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJu
YWxzQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUmVhZGFibGVC
eXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvUmVhZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9IEJV
SUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEM5IC8qIFN0cmVh
bUludGVybmFsc0J1aWx0aW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0
cmVhbUludGVybmFsc0J1aWx0aW5zLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL1N0
cmVhbUludGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07CiAJCTlCMDNEODA2MUJCMzExMEQwMEI3NjREOCAvKiBSZWFkYWJsZVN0cmVhbUJ1aWx0aW5z
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlYWRhYmxlU3RyZWFtQnVpbHRp
bnMuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvUmVhZGFibGVTdHJlYW1CdWlsdGlu
cy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtMTEwOTMsNiArMTEw
OTgsNyBAQAogCQk5QjE5QjY3RTFCOTY0RTUyMDAzNDg3NDUgLyogU2hhZG93Um9vdC5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gU2hhZG93Um9vdC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlCMUFCMDc5MTY0OEM2OUQwMDUxRjNGMiAvKiBIVE1MRm9ybUNvbnRyb2xzQ29s
bGVjdGlvbi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5QjI0REU4QzE1MTk0Qjk1MDBDNTlDMjcgLyogSFRNTEJE
SUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTEJESUVsZW1l
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUIyNzBEQTcyMzYwRjUwQTAwRkMz
MzFEIC8qIFRleHRNYW5pcHVsYXRpb25Ub2tlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0TWFuaXB1
bGF0aW9uVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIyN0ZDNUUyMzRE
OUFEQTAwMzk0QTQ2IC8qIFdpbmRvd0V2ZW50TG9vcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXaW5kb3dF
dmVudExvb3AuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIyN0ZDNUYyMzREOUFE
QjAwMzk0QTQ2IC8qIFdpbmRvd0V2ZW50TG9vcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXaW5k
b3dFdmVudExvb3AuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjJEOEE3ODE0
OTk3Q0NGMDBFQ0VGM0UgLyogVW5kb1N0ZXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVW5kb1N0ZXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxNDQwLDYg
KzIxNDQ2LDkgQEAKIAkJCQk5MzMwOURDQzA5OUU2NDkxMDA1NkU1ODEgLyogVGV4dEl0ZXJhdG9y
LmNwcCAqLywKIAkJCQk5MzMwOURDRDA5OUU2NDkxMDA1NkU1ODEgLyogVGV4dEl0ZXJhdG9yLmgg
Ki8sCiAJCQkJOTM5MjE0NjgxOEE2RDc5MTAwMEVFNjg4IC8qIFRleHRJdGVyYXRvckJlaGF2aW9y
LmggKi8sCisJCQkJOUIwMkUwQzMyMzVFNzZBQTAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyLmggKi8sCisJCQkJOUIwMkUwQzQyMzVFNzZBQTAwNDA0NEIyIC8qIFRleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyLmNwcCAqLywKKwkJCQk5QjI3MERBNzIzNjBGNTBBMDBGQzMzMUQg
LyogVGV4dE1hbmlwdWxhdGlvblRva2VuLmggKi8sCiAJCQkJOTMzMDlEQ0EwOTlFNjQ5MTAwNTZF
NTgxIC8qIFR5cGluZ0NvbW1hbmQuY3BwICovLAogCQkJCTkzMzA5RENCMDk5RTY0OTEwMDU2RTU4
MSAvKiBUeXBpbmdDb21tYW5kLmggKi8sCiAJCQkJOUIyRDhBNzgxNDk5N0NDRjAwRUNFRjNFIC8q
IFVuZG9TdGVwLmggKi8sCkBAIC0zMDk2NCw2ICszMDk3Myw3IEBACiAJCQkJN0FBM0E2QTAxOTRC
NTlCNjAwMUNCRDI0IC8qIExheWVyUG9vbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTEzMTBDRjcy
MEJBNEE2MjAwNjVBOEQwIC8qIExheW91dEFuY2VzdG9ySXRlcmF0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTExNUNGQTk3MjA4Qjk1MkIwMDFFNjk5MSAvKiBMYXlvdXRCb3guaCBpbiBIZWFkZXJz
ICovLAorCQkJCTlCMjcwREE5MjM2MEY1MEMwMEZDMzMxRCAvKiBUZXh0TWFuaXB1bGF0aW9uVG9r
ZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTExMzEwQ0Y2MjBCQTRBNTYwMDY1QThEMCAvKiBMYXlv
dXRDaGlsZEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxMTk5RkE0NjIwOEUzNUEzMDAy
MzU4Q0MgLyogTGF5b3V0Q29udGFpbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RjI2QkI2QzIz
MzQzRTZGMDAyRjJCRUEgLyogTGF5b3V0Q29udGV4dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTI4
Myw2ICszMTI5Myw3IEBACiAJCQkJRkRBM0U5NUExMzRBNDlFRjAwOEQ0QjVBIC8qIE9mZmxpbmVB
dWRpb0NvbXBsZXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRBOTMyNUUxNjcwM0Iy
QTAwODk4MkRDIC8qIE9mZmxpbmVBdWRpb0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZE
QTNFOTVDMTM0QTQ5RUYwMDhENEI1QSAvKiBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTlCMDJFMEM4MjM1RUFEMkEwMDQwNDRCMiAvKiBUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE0ODc3RTMxRkFBOEZFOTAw
QzA1NzU5IC8qIE9mZnNjcmVlbkNhbnZhcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE0MEM1MjAx
RkRGMTUxQTAwRDJBODczIC8qIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjJEM0RBNjUwRDAwNkNENjAwRUY2RjNBIC8qIE9wZW5UeXBlQ0cu
aCBpbiBIZWFkZXJzICovLApAQCAtMzM4MDYsNiArMzM4MTcsNyBAQAogCQkJCURFNUY4NTFCMUZB
MUE0RjgwMDZEQjYzQSAvKiBVbmlmaWVkU291cmNlNDI1LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CURFNUY4NTFDMUZBMUE0RjgwMDZEQjYzQSAvKiBVbmlmaWVkU291cmNlNDI2LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCURFNUY4NTFEMUZBMUE0RjgwMDZEQjYzQSAvKiBVbmlmaWVkU291cmNlNDI3
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTlCMDJFMEM2MjM1RTc2QUEwMDQwNDRCMiAvKiBUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERTVGODUxRTFG
QTFBNEY4MDA2REI2M0EgLyogVW5pZmllZFNvdXJjZTQyOC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlERTVGODUxRjFGQTFBNEY4MDA2REI2M0EgLyogVW5pZmllZFNvdXJjZTQyOS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlERTVGODUyMDFGQTFBNEY4MDA2REI2M0EgLyogVW5pZmllZFNvdXJjZTQz
MC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNp
b24gMjUxNDk0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjEzLDYgKzIxMyw3IEBACiAjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXIuaCIK
ICNpbmNsdWRlICJUZXh0QXV0b1NpemluZy5oIgogI2luY2x1ZGUgIlRleHRFdmVudC5oIgorI2lu
Y2x1ZGUgIlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVGV4dE5vZGVU
cmF2ZXJzYWwuaCIKICNpbmNsdWRlICJUb3VjaEFjdGlvbi5oIgogI2luY2x1ZGUgIlRyYW5zZm9y
bVNvdXJjZS5oIgpAQCAtMjQ3OSw2ICsyNDgwLDggQEAKIAogICAgIG1fdW5kb01hbmFnZXItPnJl
bW92ZUFsbEl0ZW1zKCk7CiAKKyAgICBtX3RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyID0gbnVs
bHB0cjsgLy8gRnJlZSBub2RlcyBrZXB0IGFsaXZlIGJ5IFRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyLgorCiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkpCiAgICAgaWYgKHRoaXMgIT0gJnRvcERv
Y3VtZW50KCkpIHsKICAgICAgICAgLy8gTGV0IHRoZSBheCBjYWNoZSBrbm93IHRoYXQgdGhpcyBz
dWJmcmFtZSBnb2VzIG91dCBvZiBzY29wZS4KQEAgLTgzNDEsNCArODM0NCwxMSBAQAogfQogI2Vu
ZGlmCiAKK1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyJiBEb2N1bWVudDo6dGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXIoKQoreworICAgIGlmICghbV90ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxl
cikKKyAgICAgICAgbV90ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlciA9IG1ha2VVbmlxdWU8VGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI+KCp0aGlzKTsKKyAgICByZXR1cm4gKm1fdGV4dE1hbmlw
dWxhdGlvbkNvbnRyb2xsZXI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAyNTE0OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDYgKzE5Niw3IEBACiBjbGFzcyBTdHls
ZVNoZWV0Q29udGVudHM7CiBjbGFzcyBTdHlsZVNoZWV0TGlzdDsKIGNsYXNzIFRleHQ7CitjbGFz
cyBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjsKIGNsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7
CiBjbGFzcyBUcmVlV2Fsa2VyOwogY2xhc3MgVW5kb01hbmFnZXI7CkBAIC0xNTU3LDYgKzE1NTgs
OSBAQAogICAgIHZvaWQgc2V0UGljdHVyZUluUGljdHVyZUVsZW1lbnQoSFRNTFZpZGVvRWxlbWVu
dCopOwogI2VuZGlmCiAKKyAgICBXRUJDT1JFX0VYUE9SVCBUZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlciYgdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIoKTsKKyAgICBUZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlciogdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXJJZkV4aXN0cygpIHsgcmV0dXJu
IG1fdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuZ2V0KCk7IH0KKwogcHJvdGVjdGVkOgogICAg
IGVudW0gQ29uc3RydWN0aW9uRmxhZ3MgeyBTeW50aGVzaXplZCA9IDEsIE5vblJlbmRlcmVkUGxh
Y2Vob2xkZXIgPSAxIDw8IDEgfTsKICAgICBEb2N1bWVudChGcmFtZSosIGNvbnN0IFVSTCYsIHVu
c2lnbmVkID0gRGVmYXVsdERvY3VtZW50Q2xhc3MsIHVuc2lnbmVkIGNvbnN0cnVjdGlvbkZsYWdz
ID0gMCk7CkBAIC0yMDg1LDYgKzIwODksOCBAQAogICAgIFdlYWtQdHI8SFRNTFZpZGVvRWxlbWVu
dD4gbV9waWN0dXJlSW5QaWN0dXJlRWxlbWVudDsKICNlbmRpZgogCisgICAgc3RkOjp1bmlxdWVf
cHRyPFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyPiBtX3RleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOworCiAgICAgSGFzaE1hcDxFbGVtZW50KiwgRWxlbWVudElkZW50aWZpZXI+IG1faWRlbnRp
ZmllZEVsZW1lbnRzTWFwOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaCIKKworI2luY2x1
ZGUgIkVkaXRpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHREaXNhbGxvd2VkU2NvcGUuaCIKKyNpbmNs
dWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6VGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXIoRG9jdW1lbnQmIGRvY3VtZW50KQorICAgIDogbV9kb2N1bWVudChtYWtl
V2Vha1B0cihkb2N1bWVudCkpCit7Cit9CisKK3ZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXI6OnN0YXJ0T2JzZXJ2aW5nUGFyYWdyYXBocyhNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2smJiBj
YWxsYmFjaykKK3sKKyAgICBhdXRvIGRvY3VtZW50ID0gbWFrZVJlZlB0cihtX2RvY3VtZW50Lmdl
dCgpKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayk7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQgPSBm
aXJzdFBvc2l0aW9uSW5Ob2RlKG1fZG9jdW1lbnQuZ2V0KCkpOworICAgIFZpc2libGVQb3NpdGlv
biBlbmQgPSBsYXN0UG9zaXRpb25Jbk5vZGUobV9kb2N1bWVudC5nZXQoKSk7CisgICAgVGV4dEl0
ZXJhdG9yIGl0ZXJhdG9yIHsgc3RhcnQuZGVlcEVxdWl2YWxlbnQoKSwgZW5kLmRlZXBFcXVpdmFs
ZW50KCkgfTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm47IC8vIFZpc2libGVQ
b3NpdGlvbiBvciBUZXh0SXRlcmF0b3IncyBjb25zdHJ1Y3RvciBtYXkgaGF2ZSB1cGRhdGVkIHRo
ZSBsYXlvdXQgYW5kIGV4ZWN1dGVkIGFyYml0cmFyeSBzY3JpcHRzLgorCisgICAgVmVjdG9yPE1h
bmlwdWxhdGlvblRva2VuPiB0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGg7CisgICAgUG9zaXRpb24g
c3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGggPSBzdGFydC5kZWVwRXF1aXZhbGVudCgpOworICAgIHdo
aWxlICghaXRlcmF0b3IuYXRFbmQoKSkgeworICAgICAgICBTdHJpbmdWaWV3IGN1cnJlbnRUZXh0
ID0gaXRlcmF0b3IudGV4dCgpOworCisgICAgICAgIGlmIChzdGFydE9mQ3VycmVudFBhcmFncmFw
aC5pc051bGwoKSkKKyAgICAgICAgICAgIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoID0gaXRlcmF0
b3IucmFuZ2UoKS0+c3RhcnRQb3NpdGlvbigpOworCisgICAgICAgIHNpemVfdCBlbmRPZkxhc3RO
ZXdMaW5lID0gMDsKKyAgICAgICAgc2l6ZV90IG9mZnNldE9mTmV4dE5ld0xpbmUgPSAwOworICAg
ICAgICB3aGlsZSAoKG9mZnNldE9mTmV4dE5ld0xpbmUgPSBjdXJyZW50VGV4dC5maW5kKCdcbics
IGVuZE9mTGFzdE5ld0xpbmUpKSAhPSBub3RGb3VuZCkgeworICAgICAgICAgICAgaWYgKG9mZnNl
dE9mTmV4dE5ld0xpbmUpCisgICAgICAgICAgICAgICAgdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBo
LmFwcGVuZChNYW5pcHVsYXRpb25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCks
IGN1cnJlbnRUZXh0LnN1YnN0cmluZyhlbmRPZkxhc3ROZXdMaW5lLCBvZmZzZXRPZk5leHROZXdM
aW5lKS50b1N0cmluZygpIH0pOworCisgICAgICAgICAgICBhdXRvIGxhc3RSYW5nZSA9IGl0ZXJh
dG9yLnJhbmdlKCk7CisgICAgICAgICAgICBpZiAob2Zmc2V0T2ZOZXh0TmV3TGluZSA8IGN1cnJl
bnRUZXh0Lmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgbGFzdFJhbmdlLT5zZXRTdGFydChm
aXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoaXRlcmF0b3Iubm9kZSgpKSk7IC8vIE1vdmUgdGhl
IHN0YXJ0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQgbm9kZS4KKyAgICAgICAgICAg
ICAgICBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKGxhc3RSYW5nZSwgMCwgb2Zmc2V0T2ZOZXh0TmV3
TGluZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQb3NpdGlvbiBlbmRPZkN1cnJlbnRQ
YXJhZ3JhcGggPSBsYXN0UmFuZ2UtPmVuZFBvc2l0aW9uKCk7CisKKyAgICAgICAgICAgIGlmICgh
dG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBhZGRJ
dGVtKHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoLCBlbmRPZkN1cnJlbnRQYXJhZ3JhcGgsIFdURk1v
dmUodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoKSk7CisgICAgICAgICAgICBzdGFydE9mQ3VycmVu
dFBhcmFncmFwaC5jbGVhcigpOworICAgICAgICAgICAgZW5kT2ZMYXN0TmV3TGluZSA9IG9mZnNl
dE9mTmV4dE5ld0xpbmUgKyAxOworICAgICAgICB9CisKKyAgICAgICAgYXV0byByZW1haW5pbmdU
ZXh0ID0gY3VycmVudFRleHQuc3Vic3RyaW5nKGVuZE9mTGFzdE5ld0xpbmUpOworICAgICAgICBp
ZiAocmVtYWluaW5nVGV4dC5sZW5ndGgoKSkKKyAgICAgICAgICAgIHRva2Vuc0luQ3VycmVudFBh
cmFncmFwaC5hcHBlbmQoTWFuaXB1bGF0aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRpZmllci5nZW5l
cmF0ZSgpLCByZW1haW5pbmdUZXh0LnRvU3RyaW5nKCkgfSk7CisKKyAgICAgICAgaXRlcmF0b3Iu
YWR2YW5jZSgpOworICAgIH0KKworICAgIGlmICghdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlz
RW1wdHkoKSkKKyAgICAgICAgYWRkSXRlbShzdGFydE9mQ3VycmVudFBhcmFncmFwaCwgZW5kLmRl
ZXBFcXVpdmFsZW50KCksIFdURk1vdmUodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoKSk7Cit9CisK
K3ZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OmFkZEl0ZW0oY29uc3QgUG9zaXRpb24m
IHN0YXJ0T2ZQYXJhZ3JhcGgsIGNvbnN0IFBvc2l0aW9uJiBlbmRPZlBhcmFncmFwaCwgVmVjdG9y
PE1hbmlwdWxhdGlvblRva2VuPiYmIHRva2VucykKK3sKKyAgICBBU1NFUlQobV9kb2N1bWVudCk7
CisgICAgYXV0byByZXN1bHQgPSBtX2l0ZW1zLmFkZChtX2l0ZW1JZGVudGlmaWVyLmdlbmVyYXRl
KCksIE1hbmlwdWxhdGlvbkl0ZW0geyBzdGFydE9mUGFyYWdyYXBoLCBlbmRPZlBhcmFncmFwaCwg
V1RGTW92ZSh0b2tlbnMpIH0pOworICAgIG1fY2FsbGJhY2soKm1fZG9jdW1lbnQsIHJlc3VsdC5p
dGVyYXRvci0+a2V5LCByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnRva2Vucyk7Cit9CisKK2Jvb2wg
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OmNvbXBsZXRlTWFuaXB1bGF0aW9uKEl0ZW1JZGVu
dGlmaWVyIGl0ZW1JZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+JiBy
ZXBsYWNlbWVudFRva2VucykKK3sKKyAgICBpZiAoIWl0ZW1JZGVudGlmaWVyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGl0ZW1JdGVyYXRvciA9IG1faXRlbXMuZmluZChpdGVt
SWRlbnRpZmllcik7CisgICAgaWYgKGl0ZW1JdGVyYXRvciA9PSBtX2l0ZW1zLmVuZCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGRpZFJlcGxhY2UgPSByZXBsYWNlKGl0ZW1J
dGVyYXRvci0+dmFsdWUsIHJlcGxhY2VtZW50VG9rZW5zKTsKKworICAgIG1faXRlbXMucmVtb3Zl
KGl0ZW1JdGVyYXRvcik7CisKKyAgICByZXR1cm4gZGlkUmVwbGFjZTsKK30KKworYm9vbCBUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6cmVwbGFjZShjb25zdCBNYW5pcHVsYXRpb25JdGVtJiBp
dGVtLCBjb25zdCBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+JiByZXBsYWNlbWVudFRva2VucykK
K3sKKyAgICBUZXh0SXRlcmF0b3IgaXRlcmF0b3IgeyBpdGVtLnN0YXJ0LCBpdGVtLmVuZCB9Owor
ICAgIHNpemVfdCBjdXJyZW50VG9rZW5JbmRleCA9IDA7CisgICAgSGFzaE1hcDxUb2tlbklkZW50
aWZpZXIsIFJlZjxOb2RlPj4gdG9rZW5Ub05vZGU7CisgICAgd2hpbGUgKCFpdGVyYXRvci5hdEVu
ZCgpKSB7CisgICAgICAgIGF1dG8gc3RyaW5nID0gaXRlcmF0b3IudGV4dCgpLnRvU3RyaW5nKCk7
CisgICAgICAgIGlmIChjdXJyZW50VG9rZW5JbmRleCA+PSBpdGVtLnRva2Vucy5zaXplKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8mIGN1cnJlbnRUb2tlbiA9IGl0
ZW0udG9rZW5zW2N1cnJlbnRUb2tlbkluZGV4XTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yLnRleHQo
KSAhPSBjdXJyZW50VG9rZW4uY29udGVudCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgdG9rZW5Ub05vZGUuYWRkKGN1cnJlbnRUb2tlbi5pZGVudGlmaWVyLCAqaXRlcmF0b3Iu
bm9kZSgpKTsKKyAgICAgICAgaXRlcmF0b3IuYWR2YW5jZSgpOworICAgICAgICArK2N1cnJlbnRU
b2tlbkluZGV4OworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3QgcHJlc2V2ZSB0
aGUgb3JkZXIgb2YgdGhlIHJlcGxhY2VtZW50IGF0IGFsbC4KKyAgICBmb3IgKGF1dG8mIHRva2Vu
IDogcmVwbGFjZW1lbnRUb2tlbnMpIHsKKyAgICAgICAgYXV0byogbm9kZSA9IHRva2VuVG9Ob2Rl
LmdldCh0b2tlbi5pZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWlzPENoYXJhY3RlckRhdGE+KG5vZGUpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBzYWZlIHRvIHVw
ZGF0ZSBET00gd2hpbGUgaXRlcmF0aW5nIG92ZXIgdGhlIHRva2Vucy4KKyAgICAgICAgZG93bmNh
c3Q8Q2hhcmFjdGVyRGF0YT4obm9kZSktPnNldERhdGEodG9rZW4uY29udGVudCk7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlBvc2l0aW9uLmgiCisjaW5jbHVkZSA8d3Rm
L0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4K
KyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50OworCitjbGFzcyBUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxUZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlcj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyKERvY3VtZW50Jik7CisKKyAgICBlbnVtIFRva2Vu
SWRlbnRpZmllclR5cGUgeyB9OworICAgIHVzaW5nIFRva2VuSWRlbnRpZmllciA9IE9iamVjdElk
ZW50aWZpZXI8VG9rZW5JZGVudGlmaWVyVHlwZT47CisKKyAgICBzdHJ1Y3QgTWFuaXB1bGF0aW9u
VG9rZW4geworICAgICAgICBUb2tlbklkZW50aWZpZXIgaWRlbnRpZmllcjsKKyAgICAgICAgU3Ry
aW5nIGNvbnRlbnQ7CisKKyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OworICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0
aWMgT3B0aW9uYWw8TWFuaXB1bGF0aW9uVG9rZW4+IGRlY29kZShEZWNvZGVyJik7CisgICAgfTsK
KworICAgIGVudW0gSXRlbUlkZW50aWZpZXJUeXBlIHsgfTsKKyAgICB1c2luZyBJdGVtSWRlbnRp
ZmllciA9IE9iamVjdElkZW50aWZpZXI8SXRlbUlkZW50aWZpZXJUeXBlPjsKKworICAgIHVzaW5n
IE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjayA9IFdURjo6RnVuY3Rpb248dm9pZChEb2N1bWVudCYs
IEl0ZW1JZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+Jik+OworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc3RhcnRPYnNlcnZpbmdQYXJhZ3JhcGhzKE1hbmlwdWxhdGlv
bkl0ZW1DYWxsYmFjayYmKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgY29tcGxldGVNYW5p
cHVsYXRpb24oSXRlbUlkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4m
KTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgTWFuaXB1bGF0aW9uSXRlbSB7CisgICAgICAgIFBv
c2l0aW9uIHN0YXJ0OworICAgICAgICBQb3NpdGlvbiBlbmQ7CisgICAgICAgIFZlY3RvcjxNYW5p
cHVsYXRpb25Ub2tlbj4gdG9rZW5zOworICAgIH07CisKKyAgICB2b2lkIGFkZEl0ZW0oY29uc3Qg
UG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcGgsIGNvbnN0IFBvc2l0aW9uJiBlbmRPZlBhcmFncmFw
aCwgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiYmKTsKKyAgICBib29sIHJlcGxhY2UoY29uc3Qg
TWFuaXB1bGF0aW9uSXRlbSYsIGNvbnN0IFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4mKTsKKwor
ICAgIFdlYWtQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CisgICAgTWFuaXB1bGF0aW9uSXRlbUNh
bGxiYWNrIG1fY2FsbGJhY2s7CisgICAgSGFzaE1hcDxJdGVtSWRlbnRpZmllciwgTWFuaXB1bGF0
aW9uSXRlbT4gbV9pdGVtczsKKyAgICBJdGVtSWRlbnRpZmllciBtX2l0ZW1JZGVudGlmaWVyOwor
ICAgIFRva2VuSWRlbnRpZmllciBtX3Rva2VuSWRlbnRpZmllcjsKK307CisKK3RlbXBsYXRlPGNs
YXNzIEVuY29kZXI+Cit2b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRp
b25Ub2tlbjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8
PCBpZGVudGlmaWVyIDw8IGNvbnRlbnQ7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitP
cHRpb25hbDxUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+IFRl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbjo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCit7CisgICAgTWFuaXB1bGF0aW9uVG9rZW4gcmVzdWx0OworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlkZW50aWZpZXIpKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNvbnRlbnQpKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2ViVmlldy5tbQkocmV2aXNpb24gMjUxNDk0KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTgsNiArOTgs
OSBAQAogI2ltcG9ydCAiX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnlJbnRlcm5hbC5oIgogI2ltcG9y
dCAiX1dLU2Vzc2lvblN0YXRlSW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1RleHRJbnB1dENvbnRl
eHRJbnRlcm5hbC5oIgorI2ltcG9ydCAiX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmgiCisj
aW1wb3J0ICJfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oIgorI2ltcG9ydCAiX1dLVGV4dE1hbmlw
dWxhdGlvblRva2VuLmgiCiAjaW1wb3J0ICJfV0tWaXNpdGVkTGlua1N0b3JlSW50ZXJuYWwuaCIK
ICNpbXBvcnQgIl9XS1dlYnNpdGVQb2xpY2llc0ludGVybmFsLmgiCiAjaW1wb3J0IDxXZWJDb3Jl
L0VsZW1lbnRDb250ZXh0Lmg+CkBAIC0xMTMsNiArMTE2LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUv
U2V0dGluZ3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1N0cmluZ1V0aWxpdGllcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9UZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9WYWxpZGF0aW9uQnViYmxlLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1ZpZXdwb3J0QXJndW1lbnRzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dy
aXRpbmdNb2RlLmg+CkBAIC0yNzYsNiArMjgwLDggQEAKIAogICAgIEJPT0wgX3VzZVBsYXRmb3Jt
RmluZFVJOwogCisgICAgV2Vha09iakNQdHI8aWQgPF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0
ZT4+IF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU7CisKICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQogICAgIFJldGFpblB0cjxfV0tSZW1vdGVPYmplY3RSZWdpc3RyeT4gX3JlbW90ZU9iamVjdFJl
Z2lzdHJ5OwogCkBAIC03NDM5LDYgKzc0NDUsMTA4IEBACiAgICAgfSk7CiB9CiAKKy0gKGlkIDxf
V0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU+KV90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUKK3sK
KyAgICByZXR1cm4gX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5nZXRBdXRvcmVsZWFzZWQoKTsK
K30KKworLSAodm9pZClfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOihpZCA8X1dLVGV4dE1h
bmlwdWxhdGlvbkRlbGVnYXRlPilkZWxlZ2F0ZQoreworICAgIF90ZXh0TWFuaXB1bGF0aW9uRGVs
ZWdhdGUgPSBkZWxlZ2F0ZTsKK30KKworc3RhdGljIFN0cmluZyBzdHJpbmdJZGVudGlmaWVyRm9y
RnJhbWVBbmRJdGVtKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBXZWJDb3JlOjpU
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIgaXRlbUlEKQoreworICAg
IFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmROdW1iZXIoZnJhbWVJRC50
b1VJbnQ2NCgpKTsKKyAgICByZXN1bHQuYXBwZW5kKCc6Jyk7CisgICAgcmVzdWx0LmFwcGVuZE51
bWJlcihpdGVtSUQudG9VSW50NjQoKSk7CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwor
fQorCitzdHJ1Y3QgVGV4dE1hbmlwdWxhdGlvbklkZW50aWZpZXJzIHsKKyAgICBXZWJDb3JlOjpG
cmFtZUlkZW50aWZpZXIgZnJhbWVJRDsKKyAgICBXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjo6SXRlbUlkZW50aWZpZXIgaXRlbUlEOworfTsKKworc3RhdGljIE9wdGlvbmFsPFRl
eHRNYW5pcHVsYXRpb25JZGVudGlmaWVycz4gZnJhbWVBbmRJdGVtSWRlbnRpZmllcnNGcm9tU3Ry
aW5nKFN0cmluZyBzdHJpbmdJZGVudGlmaWVyKQoreworICAgIFRleHRNYW5pcHVsYXRpb25JZGVu
dGlmaWVycyByZXN1bHQ7CisgICAgZm9yIChhdXRvIHBhcnQgOiBTdHJpbmdWaWV3KHN0cmluZ0lk
ZW50aWZpZXIpLnNwbGl0KCc6JykpIHsKKyAgICAgICAgYXV0byBudW1iZXIgPSBwYXJ0LnRvVUlu
dDY0U3RyaWN0KCk7CisgICAgICAgIGlmICghbnVtYmVyIHx8IChyZXN1bHQuZnJhbWVJRCAmJiBy
ZXN1bHQuaXRlbUlEKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAg
IGlmICghcmVzdWx0LmZyYW1lSUQpCisgICAgICAgICAgICByZXN1bHQuZnJhbWVJRCA9IFdlYkNv
cmU6OmZyYW1lSWRlbnRpZmllckZyb21JRCgqbnVtYmVyKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcmVzdWx0Lml0ZW1JRCA9IG1ha2VPYmplY3RJZGVudGlmaWVyPFdlYkNvcmU6OlRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRlbnRpZmllclR5cGU+KCpudW1iZXIpOworICAg
IH0KKyAgICBpZiAoIXJlc3VsdC5mcmFtZUlEIHx8ICFyZXN1bHQuaXRlbUlEKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKHZvaWQpX3N0
YXJ0VGV4dE1hbmlwdWxhdGlvbnMKK3sKKyAgICBpZiAoIV90ZXh0TWFuaXB1bGF0aW9uRGVsZWdh
dGUpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIV9wYWdlKQorICAgICAgICByZXR1cm47Cisg
ICAgX3BhZ2UtPnN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMoW3dlYWtTZWxmID0gV2Vha09iakNQdHI8
V0tXZWJWaWV3PihzZWxmKV0gKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBmcmFtZUlkZW50aWZp
ZXIsCisgICAgICAgIFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRl
bnRpZmllciBpdGVtSWRlbnRpZmllciwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4mIHRva2VucykgeworICAgICAgICBp
ZiAoIXdlYWtTZWxmKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gcmV0YWlu
ZWRTZWxmID0gd2Vha1NlbGYuZ2V0KCk7CisgICAgICAgIGF1dG8gZGVsZWdhdGUgPSByZXRhaW5l
ZFNlbGYuZ2V0KCkuX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTsKKyAgICAgICAgaWYgKCFkZWxl
Z2F0ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBOU011dGFibGVBcnJheSAqd2tU
b2tlbnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6IHRva2Vucy5zaXplKCld
OworICAgICAgICBmb3IgKGF1dG8mIHRva2VuIDogdG9rZW5zKSB7CisgICAgICAgICAgICBhdXRv
IHdrVG9rZW4gPSBhZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuIGFsbG9jXSBpbml0
XSk7CisgICAgICAgICAgICB3a1Rva2VuLmdldCgpLmlkZW50aWZpZXIgPSBTdHJpbmc6Om51bWJl
cih0b2tlbi5pZGVudGlmaWVyLnRvVUludDY0KCkpOworICAgICAgICAgICAgd2tUb2tlbi5nZXQo
KS5jb250ZW50ID0gdG9rZW4uY29udGVudDsKKyAgICAgICAgICAgIFt3a1Rva2VucyBhZGRPYmpl
Y3Q6d2tUb2tlbi5nZXQoKV07CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGlkZW50aWZpZXIg
PSBzdHJpbmdJZGVudGlmaWVyRm9yRnJhbWVBbmRJdGVtKGZyYW1lSWRlbnRpZmllciwgaXRlbUlk
ZW50aWZpZXIpOworICAgICAgICBhdXRvIGl0ZW0gPSBhZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxh
dGlvbkl0ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjppZGVudGlmaWVyIHRva2Vuczp3a1Rv
a2Vuc10pOworICAgICAgICBbZGVsZWdhdGUgX3dlYlZpZXc6cmV0YWluZWRTZWxmLmdldCgpIGRp
ZEZpbmRJdGVtOml0ZW0uZ2V0KCkgZm9yRnJhbWU6d3JhcHBlcihBUEk6OkZyYW1lSGFuZGxlOjpj
cmVhdGUoZnJhbWVJZGVudGlmaWVyKSldOworICAgIH0sIFt3ZWFrU2VsZiA9IFdlYWtPYmpDUHRy
PFdLV2ViVmlldz4oc2VsZildICgpIHsKKyAgICAgICAgaWYgKCF3ZWFrU2VsZikKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgYXV0byByZXRhaW5lZFNlbGYgPSB3ZWFrU2VsZi5nZXQoKTsK
KyAgICAgICAgYXV0byBkZWxlZ2F0ZSA9IHJldGFpbmVkU2VsZi5nZXQoKS5fdGV4dE1hbmlwdWxh
dGlvbkRlbGVnYXRlOworICAgICAgICBpZiAoIWRlbGVnYXRlKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIFtkZWxlZ2F0ZSBfd2ViVmlldzpyZXRhaW5lZFNlbGYuZ2V0KCkgZGlkRmlu
aXNoSW5pdGlhbE9ic2VydmF0aW9uRm9yRnJhbWU6cmV0YWluZWRTZWxmLmdldCgpLl9tYWluRnJh
bWVdOworICAgIH0pOworfQorCistICh2b2lkKV9jb21wbGV0ZVRleHRNYW5pcHVsYXRpb246KF9X
S1RleHRNYW5pcHVsYXRpb25JdGVtICopaXRlbSBjb21wbGV0aW9uOih2b2lkKF4pKEJPT0wgc3Vj
Y2VzcykpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBpZiAoIV9wYWdlKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvIHJlc3VsdCA9IGZyYW1lQW5kSXRlbUlkZW50aWZpZXJzRnJvbVN0cmlu
ZyhTdHJpbmcgeyBpdGVtLmlkZW50aWZpZXIgfSk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRp
b25Ub2tlbj4gdG9rZW5zOworICAgIGZvciAoX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuICp3a1Rv
a2VuIGluIGl0ZW0udG9rZW5zKSB7CisgICAgICAgIGF1dG8gdG9rZW5JRCA9IG1ha2VPYmplY3RJ
ZGVudGlmaWVyPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpUb2tlbklkZW50
aWZpZXJUeXBlPihTdHJpbmcod2tUb2tlbi5pZGVudGlmaWVyKS50b1VJbnQ2NCgpKTsKKyAgICAg
ICAgdG9rZW5zLmFwcGVuZChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFu
aXB1bGF0aW9uVG9rZW4geyB0b2tlbklELCB3a1Rva2VuLmNvbnRlbnQgfSk7CisgICAgfQorCisg
ICAgX3BhZ2UtPmNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihyZXN1bHQtPmZyYW1lSUQsIHJlc3Vs
dC0+aXRlbUlELCB0b2tlbnMsIFtjYXB0dXJlZENvbXBsZXRpb25CbG9jayA9IG1ha2VCbG9ja1B0
cihjb21wbGV0aW9uSGFuZGxlcildIChib29sIHN1Y2Nlc3MpIHsKKyAgICAgICAgY2FwdHVyZWRD
b21wbGV0aW9uQmxvY2soc3VjY2Vzcyk7CisgICAgfSk7Cit9CisKICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQogCiAtIChDR1JlY3QpX2RyYWdDYXJldFJlY3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAkocmV2aXNp
b24gMjUxNDk0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmll
d1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDYgKzExMyw3IEBACiBAY2xhc3MgX1dL
U2FmZUJyb3dzaW5nV2FybmluZzsKIEBjbGFzcyBfV0tTZXNzaW9uU3RhdGU7CiBAY2xhc3MgX1dL
VGV4dElucHV0Q29udGV4dDsKK0BjbGFzcyBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbTsKIEBjbGFz
cyBfV0tUaHVtYm5haWxWaWV3OwogQGNsYXNzIF9XS1dlYnNpdGVQb2xpY2llczsKIEBjbGFzcyBf
V0tXZWJWaWV3UHJpbnRGb3JtYXR0ZXI7CkBAIC0xMjAsOSArMTIxLDEwIEBACiBAcHJvdG9jb2wg
V0tIaXN0b3J5RGVsZWdhdGVQcml2YXRlOwogQHByb3RvY29sIF9XS0RpYWdub3N0aWNMb2dnaW5n
RGVsZWdhdGU7CiBAcHJvdG9jb2wgX1dLRmluZERlbGVnYXRlOworQHByb3RvY29sIF9XS0Z1bGxz
Y3JlZW5EZWxlZ2F0ZTsKIEBwcm90b2NvbCBfV0tJY29uTG9hZGluZ0RlbGVnYXRlOwogQHByb3Rv
Y29sIF9XS0lucHV0RGVsZWdhdGU7Ci1AcHJvdG9jb2wgX1dLRnVsbHNjcmVlbkRlbGVnYXRlOwor
QHByb3RvY29sIF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTsKIAogQGludGVyZmFjZSBXS1dl
YlZpZXcgKFdLUHJpdmF0ZSkKIApAQCAtNTc1LDYgKzU3NywxMCBAQAogQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBfV0tJbnNwZWN0b3IgKl9pbnNwZWN0b3IgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFk
b25seSkgX1dLRnJhbWVIYW5kbGUgKl9tYWluRnJhbWUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygx
MC4xNC40KSwgaW9zKDEyLjIpKTsKIAorQHByb3BlcnR5IChub25hdG9taWMsIHdlYWssIHNldHRl
cj1fc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOikgaWQgPF9XS1RleHRNYW5pcHVsYXRpb25E
ZWxlZ2F0ZT4gX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBXS19BUElfQVZBSUxBQkxFKG1hY29z
KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfc3RhcnRUZXh0TWFuaXB1
bGF0aW9ucyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RC
QSkpOworLSAodm9pZClfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1bGF0
aW9uSXRlbSAqKWl0ZW0gY29tcGxldGlvbjoodm9pZCheKShCT09MIHN1Y2Nlc3MpKWNvbXBsZXRp
b25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CisKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFNjcm9sbGluZ1VwZGF0
ZXNEaXNhYmxlZEZvclRlc3Rpbmc6KSBCT09MIF9zY3JvbGxpbmdVcGRhdGVzRGlzYWJsZWRGb3JU
ZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJB
KSk7CiAKIC0gKHZvaWQpX3Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nOwpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRp
b25EZWxlZ2F0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQg
PFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+CisKK0BjbGFzcyBfV0tGcmFtZUhhbmRsZTsKK0BjbGFzcyBfV0tUZXh0TWFuaXB1bGF0aW9u
SXRlbTsKKworQHByb3RvY29sIF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSA8TlNPYmplY3Q+
CisKK0BvcHRpb25hbAorCistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRp
ZEZpbmRJdGVtOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWl0ZW0gZm9yRnJhbWU6KF9XS0Zy
YW1lSGFuZGxlICopZnJhbWU7CistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3
IGRpZEZpbmlzaEluaXRpYWxPYnNlcnZhdGlvbkZvckZyYW1lOihfV0tGcmFtZUhhbmRsZSAqKWZy
YW1lOworCitAZW5kCisKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9u
SXRlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1w
b3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRh
dGlvbi5oPgorCitAY2xhc3MgX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuOworCitXS19DTEFTU19B
VkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2Ug
X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gOiBOU09iamVjdAorCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgdG9rZW5zOihOU0FycmF5PF9X
S1RleHRNYW5pcHVsYXRpb25Ub2tlbiAqPiAqKXRva2VuczsKKworQHByb3BlcnR5IChub25hdG9t
aWMsIHJlYWRvbmx5LCBjb3B5KSBOU1N0cmluZyAqaWRlbnRpZmllcjsKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSwgY29weSkgTlNBcnJheTxfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4g
Kj4gKnRva2VuczsKKworQGVuZApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL19XS1RleHRNYW5pcHVsYXRpb25JdGVtLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5tbQkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlw
dWxhdGlvbkl0ZW0ubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJfV0tUZXh0TWFuaXB1bGF0aW9uSXRl
bS5oIgorCisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK0BpbXBsZW1lbnRhdGlvbiBfV0tU
ZXh0TWFuaXB1bGF0aW9uSXRlbSB7CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBfaWRlbnRpZmll
cjsKKyAgICBSZXRhaW5QdHI8TlNBcnJheTxfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gKj4+IF90
b2tlbnM7Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aElkZW50aWZpZXI6KE5TU3RyaW5n
ICopaWRlbnRpZmllciB0b2tlbnM6KE5TQXJyYXk8X1dLVGV4dE1hbmlwdWxhdGlvblRva2VuICo+
ICopdG9rZW5zCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICBfaWRlbnRpZmllciA9IGlkZW50aWZpZXI7CisgICAgX3Rva2VucyA9
IHRva2VuczsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoTlNTdHJpbmcgKilpZGVudGlmaWVy
Cit7CisgICAgcmV0dXJuIF9pZGVudGlmaWVyLmdldCgpOworfQorCistIChOU0FycmF5PF9XS1Rl
eHRNYW5pcHVsYXRpb25Ub2tlbiAqPiAqKXRva2VucworeworICAgIHJldHVybiBfdG9rZW5zLmdl
dCgpOworfQorCitAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0
aW9uVG9rZW4uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2ltcG9ydCA8V2ViS2l0L1dLRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0Zv
dW5kYXRpb24uaD4KKworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3Mo
V0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiA6IE5TT2Jq
ZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqaWRlbnRpZmllcjsK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqY29udGVudDsKKworQGVuZApJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRp
b25Ub2tlbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLm1tCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4ubW0JKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaCIKKworI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgorCitAaW1wbGVtZW50YXRpb24gX1dLVGV4dE1hbmlwdWxhdGlvblRv
a2VuIHsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXQKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1
cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
QGVuZApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZp
c2lvbiAyNTE0OTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05NDE5LDYgKzk0MTksMzQgQEAKIH0KICNlbmRpZgogCit2b2lk
IFdlYlBhZ2VQcm94eTo6c3RhcnRUZXh0TWFuaXB1bGF0aW9ucyhUZXh0TWFuaXB1bGF0aW9uSXRl
bUNhbGxiYWNrJiYgY2FsbGJhY2ssIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQoreworICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkgeworICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1f
dGV4dE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOworICAgIG1f
cHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBh
Z2U6OlN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciks
IG1fd2ViUGFnZUlEKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OmRpZEZpbmRUZXh0TWFuaXB1
bGF0aW9uSXRlbShXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIgZnJhbWVJZGVudGlmaWVyLCBXZWJD
b3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIgaXRlbUlkZW50
aWZpZXIsCisgICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4mIHRva2VucykKK3sKKyAgICBpZiAoIW1fdGV4dE1hbmlw
dWxhdGlvbkl0ZW1DYWxsYmFjaykKKyAgICAgICAgcmV0dXJuOworICAgIG1fdGV4dE1hbmlwdWxh
dGlvbkl0ZW1DYWxsYmFjayhmcmFtZUlkZW50aWZpZXIsIGl0ZW1JZGVudGlmaWVyLCB0b2tlbnMp
OworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6Y29tcGxldGVUZXh0TWFuaXB1bGF0aW9uKFdlYkNv
cmU6OkZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjo6SXRlbUlkZW50aWZpZXIgaXRlbUlELAorICAgIGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+JiB0b2tlbnMs
IFdURjo6RnVuY3Rpb248dm9pZCAoYm9vbCBzdWNjZXNzKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
K3sKKyAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcHJvY2Vzcy0+Y29u
bmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbXBsZXRl
VGV4dE1hbmlwdWxhdGlvbihmcmFtZUlELCBpdGVtSUQsIHRva2VucyksIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpLCBtX3dlYlBhZ2VJRCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAog
CiAjdW5kZWYgTUVSR0VfV0hFRUxfRVZFTlRTCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMjUxNDk0KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDcgQEAKICNpbmNs
dWRlIDxXZWJDb3JlL1NlYXJjaFBvcHVwTWVudS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dENo
ZWNraW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0R3JhbnVsYXJpdHkuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9Vc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9WaWV3
cG9ydEFyZ3VtZW50cy5oPgogI2luY2x1ZGUgPG1lbW9yeT4KQEAgLTE2MTEsNiArMTYxMiwxMiBA
QAogICAgIHZvaWQgc2V0TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbihXZWJDb3Jl
OjpNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uJiYpOwogI2VuZGlmCiAKKyAgICB1
c2luZyBUZXh0TWFuaXB1bGF0aW9uSXRlbUNhbGxiYWNrID0gV1RGOjpGdW5jdGlvbjx2b2lkIChX
ZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIsIFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOjpJdGVtSWRlbnRpZmllciwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4mKT47CisgICAgdm9pZCBzdGFydFRleHRN
YW5pcHVsYXRpb25zKFRleHRNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2smJiwgV1RGOjpDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgZGlkRmluZFRleHRNYW5pcHVsYXRpb25J
dGVtKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciwgV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlw
dWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuPiYpOworICAgIHZvaWQgY29tcGxl
dGVUZXh0TWFuaXB1bGF0aW9uKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciwgV2ViQ29yZTo6VGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyLAorICAgICAgICBjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRv
a2VuPiYsIFdURjo6RnVuY3Rpb248dm9pZCAoYm9vbCBzdWNjZXNzKT4mJik7CisKIHByaXZhdGU6
CiAgICAgV2ViUGFnZVByb3h5KFBhZ2VDbGllbnQmLCBXZWJQcm9jZXNzUHJveHkmLCBSZWY8QVBJ
OjpQYWdlQ29uZmlndXJhdGlvbj4mJik7CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsK
QEAgLTI1NzQsNiArMjU4MSw4IEBACiAgICAgc3RkOjp1bmlxdWVfcHRyPFN1c3BlbmRlZFBhZ2VQ
cm94eT4gbV9zdXNwZW5kZWRQYWdlS2VwdFRvUHJldmVudEZsYXNoaW5nOwogICAgIFdlYWtQdHI8
U3VzcGVuZGVkUGFnZVByb3h5PiBtX2xhc3RTdXNwZW5kZWRQYWdlOwogCisgICAgVGV4dE1hbmlw
dWxhdGlvbkl0ZW1DYWxsYmFjayBtX3RleHRNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2s7CisKICNp
ZiBIQVZFKFBFTkNJTEtJVCkKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RWRpdGFibGVJbWFnZUNvbnRy
b2xsZXI+IG1fZWRpdGFibGVJbWFnZUNvbnRyb2xsZXI7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9u
IDI1MTQ5NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdl
cy5pbgkod29ya2luZyBjb3B5KQpAQCAtNTgxLDQgKzU4MSw5IEBACiAgICAgU2VuZE1lc3NhZ2VU
b1dlYlZpZXcoc3RydWN0IFdlYktpdDo6VXNlck1lc3NhZ2UgdXNlck1lc3NhZ2UpCiAgICAgU2Vu
ZE1lc3NhZ2VUb1dlYlZpZXdXaXRoUmVwbHkoc3RydWN0IFdlYktpdDo6VXNlck1lc3NhZ2UgdXNl
ck1lc3NhZ2UpIC0+IChzdHJ1Y3QgV2ViS2l0OjpVc2VyTWVzc2FnZSByZXBseU1lc3NhZ2UpIEFz
eW5jCiAjZW5kaWYKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIERpZEZpbmRUZXh0TWFuaXB1
bGF0aW9uSXRlbShXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgV2ViQ29yZTo6VGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGlkZW50aWZpZXIsIFZlY3Rv
cjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+
IHRva2VucykKKyNlbmRpZgorCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI1MTQ5NCkKKysrIFNvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEz
MzMsNiArMTMzMywxMSBAQAogCQk5OUU3MTRDNTFDMTI0QTA0MDA2NjVCM0EgLyogX1dLQXV0b21h
dGlvbkRlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5OUU3MTRDMTFDMTI0OUU2MDA2NjVCM0EgLyogX1dLQXV0b21hdGlvbkRlbGVnYXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTlFNzE4
OUEyMUY3OUQ5RTAwNTVFOTc1IC8qIF9XS1RvdWNoRXZlbnRHZW5lcmF0b3IubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OUU3MTg5NjIxRjc5RDlEMDA1
NUU5NzUgLyogX1dLVG91Y2hFdmVudEdlbmVyYXRvci5tbSAqLzsgfTsKIAkJOTlFNzE4OUMyMUY3
OUQ5RTAwNTVFOTc1IC8qIF9XS1RvdWNoRXZlbnRHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5RTcxODk4MjFGNzlEOUUwMDU1RTk3NSAv
KiBfV0tUb3VjaEV2ZW50R2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJOUIwMkUwQ0IyMzVFQjk1MzAwNDA0NEIyIC8qIF9XS1RleHRN
YW5pcHVsYXRpb25EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOUIwMkUwQzkyMzVFQjYyRDAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRp
b25EZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTlCMDJFMENDMjM1RUI5NTcwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRl
bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwMkUw
Q0EyMzVFQjg4NDAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOUIwMkUwQ0YyMzVFQkIx
NDAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMDJFMENFMjM1RUJCMTQwMDQwNDRCMiAv
KiBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4ubW0gKi87IH07CisJCTlCMDJFMEQxMjM1RUJDQ0Ew
MDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMDJFMEQwMjM1RUJDQ0EwMDQwNDRCMiAvKiBf
V0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5tbSAqLzsgfTsKKwkJOUIwMkUwRDcyMzVGQzk0RjAwNDA0
NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwMkUwQ0QyMzVFQjk2NzAwNDA0NEIyIC8qIF9XS1Rl
eHRNYW5pcHVsYXRpb25Ub2tlbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTlGQjVGMzk1MTY5RTZBODAwMDJDMjVCRiAvKiBXS0NvbnRleHRQcml2
YXRlTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
RkI1RjM5MzE2OUU2QTgwMDAyQzI1QkYgLyogV0tDb250ZXh0UHJpdmF0ZU1hYy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUExMDJBNzA4MUVDMEVF
RTkwMEQ4MUQ4MiAvKiBjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIgRVNSLnBsdWdpbi5zYiBp
biBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QTVFMzk0OTFENUJEOEE3MDBCNEI3Q0UgLyogY29tLm1hY3JvbWVkaWEuRmxh
c2ggUGxheWVyIEVTUi5wbHVnaW4uc2IgKi87IH07CiAJCUExMDQ2RUExMjA3OTI2MzEwMEYwQzVE
OCAvKiBXS1BERlZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEExMDQ2RTlGMjA3OTI2MzEwMEYwQzVEOCAvKiBXS1BERlZpZXcuaCAqLzsgfTsKQEAg
LTE3MjgsOCArMTczMyw2IEBACiAJCQljb21waWxlclNwZWMgPSBjb20uYXBwbGUuY29tcGlsZXJz
LnByb3h5LnNjcmlwdDsKIAkJCWZpbGVQYXR0ZXJucyA9ICIqLmgiOwogCQkJZmlsZVR5cGUgPSBw
YXR0ZXJuLnByb3h5OwotCQkJaW5wdXRGaWxlcyA9ICgKLQkJCSk7CiAJCQlpc0VkaXRhYmxlID0g
MTsKIAkJCW91dHB1dEZpbGVzID0gKAogCQkJCSIkKEhFQURFUl9PVVRQVVRfRElSKS8kKElOUFVU
X0ZJTEVfTkFNRSkiLApAQCAtNDA0Niw2ICs0MDQ5LDExIEBACiAJCTk5RTcxODk2MjFGNzlEOUQw
MDU1RTk3NSAvKiBfV0tUb3VjaEV2ZW50R2VuZXJhdG9yLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLVG91Y2hFdmVudEdlbmVyYXRvci5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTlFNzE4OTgyMUY3OUQ5RTAwNTVFOTc1IC8qIF9XS1RvdWNo
RXZlbnRHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLVG91
Y2hFdmVudEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OUY2NDJE
MjFGQUJFMzc4MDA5NjIxRTkgLyogQ29vcmRpbmF0ZVN5c3RlbS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb29yZGluYXRlU3lzdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTlCMDJFMEM5MjM1RUI2MkQwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9u
RGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCMDJFMENBMjM1RUI4ODQwMDQwNDRCMiAv
KiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tUZXh0TWFuaXB1
bGF0aW9uSXRlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjAyRTBDRDIzNUVC
OTY3MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk5QjAyRTBDRTIzNUVCQjE0MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjAyRTBEMDIzNUVCQ0NBMDA0MDQ0QjIgLyogX1dL
VGV4dE1hbmlwdWxhdGlvbkl0ZW0ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBfV0tUZXh0TWFu
aXB1bGF0aW9uSXRlbS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJDNTlENkMx
RUZDQ0NCNjAwMUU4RDA5IC8qIENhbGxiYWNrSUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ2FsbGJhY2tJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkM1
OUQ2RDFFRkNEQzZEMDAxRThEMDkgLyogT3B0aW9uYWxDYWxsYmFja0lELmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wdGlvbmFsQ2FsbGJhY2tJRC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5RjU0Rjg4RTE2NDg4RTg3MDA3REY4MUEgLyogQXV4aWxpYXJ5UHJv
Y2Vzc01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEF1eGls
aWFyeVByb2Nlc3NNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MzQyLDYg
KzYzNTAsMTEgQEAKIAkJCQkxQTAwMkQzRjE5NkIzMjk0MDBCOUFENDQgLyogX1dLU2Vzc2lvblN0
YXRlLmggKi8sCiAJCQkJMUEwMDJEM0UxOTZCMzI5NDAwQjlBRDQ0IC8qIF9XS1Nlc3Npb25TdGF0
ZS5tbSAqLywKIAkJCQkxQTAwMkQ0MjE5NkIzMzcwMDBCOUFENDQgLyogX1dLU2Vzc2lvblN0YXRl
SW50ZXJuYWwuaCAqLywKKwkJCQk5QjAyRTBDOTIzNUVCNjJEMDA0MDQ0QjIgLyogX1dLVGV4dE1h
bmlwdWxhdGlvbkRlbGVnYXRlLmggKi8sCisJCQkJOUIwMkUwQ0EyMzVFQjg4NDAwNDA0NEIyIC8q
IF9XS1RleHRNYW5pcHVsYXRpb25JdGVtLmggKi8sCisJCQkJOUIwMkUwRDAyMzVFQkNDQTAwNDA0
NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtLm1tICovLAorCQkJCTlCMDJFMENEMjM1RUI5
NjcwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaCAqLywKKwkJCQk5QjAyRTBD
RTIzNUVCQjE0MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLm1tICovLAogCQkJ
CTJERTlCMTM4MjIzMUY2MUMwMDUyODdCNyAvKiBfV0tUZXh0SW5wdXRDb250ZXh0LmggKi8sCiAJ
CQkJMkRFOUIxMzcyMjMxRjYxQzAwNTI4N0I3IC8qIF9XS1RleHRJbnB1dENvbnRleHQubW0gKi8s
CiAJCQkJMkRFOUIxM0IyMjMxRjc3QzAwNTI4N0I3IC8qIF9XS1RleHRJbnB1dENvbnRleHRJbnRl
cm5hbC5oICovLApAQCAtMTAxMDcsNiArMTAxMjAsNyBAQAogCQkJCUJDMjA0RUYwMTFDODNFQzgw
MDhGMzM3NSAvKiBXS0J1bmRsZUFQSUNhc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUVFQjlG
MTI3NzYxQUMwMDMzMjJCOCAvKiBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTM1RUVCOUIxMjc3NjE3QzAwMzMyMkI4IC8qIFdLQnVuZGxlQmFja0ZvcndhcmRM
aXN0SXRlbS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOUIwMkUwQ0IyMzVFQjk1MzAwNDA0NEIyIC8q
IF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFFRkMx
Q0YxNTI0RTYyNTAwQzlBOTM4IC8qIFdLQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3Q0JCODEyMTFBQTBGOTcwMDA2QjE5NDIgLyogV0tCdW5kbGVGaWxlSGFu
ZGxlUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyNUYxNzExRDZCREUxMDAxNjlCMEUgLyog
V0tCdW5kbGVGcmFtZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDMxMSw2ICsxMDMyNSw3IEBACiAJ
CQkJMkQ5RUEzMEQxQTk2Q0I1OTAwMkQyODA3IC8qIFdLUGFnZUluamVjdGVkQnVuZGxlQ2xpZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUI4QTFFQzE4NDAwODA5MDBFOUFFNjkgLyogV0tQYWdl
TG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzJEMDIxOTEyQUM0MjZDMDBFNzMy
QTMgLyogV0tQYWdlTG9hZFR5cGVzLmggaW4gSGVhZGVycyAqLywKKwkJCQk5QjAyRTBENzIzNUZD
OTRGMDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5M0JERUIwMTE3MUREN0FGMDBCRkVFMUIgLyogV0tQYWdlTG9hZFR5cGVzUHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ3MzAzNzkxQTdDMkI3NTAwRjhGNDg3IC8qIFdLUGFnZU5h
dmlnYXRpb25DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjhBMUVFMTg0MDBBQ0IwMEU5
QUU2OSAvKiBXS1BhZ2VQb2xpY3lDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMTAzNzUsNiAr
MTAzOTAsNyBAQAogCQkJCUJDNDA3NjA2MTI0RkYwMjcwMDY4RjIwQSAvKiBXS1N0cmluZy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM0MDc2MUExMjRGRjAzNzAwNjhGMjBBIC8qIFdLU3RyaW5nQ0Yu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDOTA5OTgwMTI1NkE5ODIwMDA4Mzc1NiAvKiBXS1N0cmlu
Z1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTlCMDJFMENDMjM1RUI5NTcwMDQwNDRCMiAv
KiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0U1QjRDODgy
MUI3M0Q4NzAwMjJFNjRGIC8qIFdLU3ludGhldGljRmxhZ3NDaGFuZ2VkV2ViRXZlbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTI2RjEwQkU4MTkxODdFMkUwMDFEMEU2OCAvKiBXS1N5bnRoZXRpY1Rh
cEdlc3R1cmVSZWNvZ25pemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTZCOEI2NDIwNTRCNTU4
MDBCRDRBNjIgLyogV0tTeXN0ZW1QcmV2aWV3Vmlldy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMTU2
OCwxMSArMTE1ODQsMTMgQEAKIAkJCQk5MzU2RjJFMTIxNTJCNzY2MDBFNkQ1REYgLyogV2ViU1dT
ZXJ2ZXJDb25uZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxN0E1MkQ4MUY0M0E5REEw
MERDREMwQSAvKiBXZWJTV1NlcnZlckNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTM1NkYyRTAyMTUyQjc1MjAwRTZENURGIC8qIFdlYlNXU2VydmVyVG9D
b250ZXh0Q29ubmVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5QjAyRTBEMTIzNUVCQ0NB
MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0ubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk1MTUyNjJCRDFGQjk1MTYxMDA3MEU1NzkgLyogV2ViU1dTZXJ2ZXJUb0NvbnRleHRDb25uZWN0
aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEOTJBNzhFMjEyQjZB
QjEwMEY0OTNGRCAvKiBXZWJUb3VjaEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQUYw
OEI3MTkyNjlFNkQwMEI2MzkwQyAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJNZXNzYWdlUmVj
ZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MzNjFENzgxOTI4MDNCRDAwMzZBNTlEIC8q
IFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTJEOTJBNzhGMjEyQjZBQjEwMEY0OTNGRCAvKiBXZWJXaGVlbEV2ZW50LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTlCMDJFMENGMjM1RUJCMTQwMDQwNDRCMiAvKiBfV0tUZXh0
TWFuaXB1bGF0aW9uVG9rZW4ubW0gaW4gU291cmNlcyAqLywKIAkJCQlDNkE0Q0EwQzIyNTI4OTk4
MDAxNjkyODkgLyogV0tCdW5kbGVQYWdlTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5MzEx
NjkyMTJGNjFCMjAwMDQ0QkZFIC8qIFdLQ29udGVudFZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJ
CQkyRDkzMTE2QTIxMkY2MUI1MDAwNDRCRkUgLyogV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1t
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMjUxNDk0KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4MjksNiArNjgyOSw1
NiBAQAogICAgIHJldHVybiBXZWJDb3JlOjpFbGVtZW50Q29udGV4dCB7IGVsZW1lbnRSZWN0SW5S
b290Vmlld0Nvb3JkaW5hdGVzKGVsZW1lbnQsICpmcmFtZSksIG1faWRlbnRpZmllciwgZG9jdW1l
bnQuaWRlbnRpZmllcigpLCBkb2N1bWVudC5pZGVudGlmaWVyRm9yRWxlbWVudChlbGVtZW50KSB9
OwogfQogCit2b2lkIFdlYlBhZ2U6OnN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGlmICghbV9wYWdlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIG1haW5Eb2N1bWVudCA9IG1ha2VSZWZQdHIobV9w
YWdlLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpKTsKKyAgICBpZiAoIW1haW5Eb2N1bWVudCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbWFpbkRvY3VtZW50LT50ZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlcigpLnN0YXJ0T2JzZXJ2aW5nUGFyYWdyYXBocyhbd2ViUGFnZSA9IG1ha2VXZWFrUHRyKCp0
aGlzKV0gKFdlYkNvcmU6OkRvY3VtZW50JiBkb2N1bWVudCwKKyAgICAgICAgV2ViQ29yZTo6VGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1JZGVudGlmaWVyLCBj
b25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxh
dGlvblRva2VuPiYgdG9rZW5zKSB7CisgICAgICAgIGF1dG8qIGZyYW1lID0gZG9jdW1lbnQuZnJh
bWUoKTsKKyAgICAgICAgaWYgKCF3ZWJQYWdlIHx8ICFmcmFtZSB8fCB3ZWJQYWdlLT5tYWluRnJh
bWUoKSAhPSBmcmFtZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvKiB3ZWJG
cmFtZSA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCpmcmFtZSk7CisgICAgICAgIGlmICghd2Vi
RnJhbWUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW0od2ViRnJhbWUt
PmZyYW1lSUQoKSwgaXRlbUlkZW50aWZpZXIsIHRva2VucykpOworICAgIH0pOworICAgIC8vIEZv
ciBub3csIHdlIGFzc3VtZSBzdGFydE9ic2VydmluZ1BhcmFncmFwaHMgZmluZCBhbGwgcGFyYWdy
YXBocyBzeW5jaHJvbm91c2x5IGF0IG9uY2UuCisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKK30K
Kwordm9pZCBXZWJQYWdlOjpjb21wbGV0ZVRleHRNYW5pcHVsYXRpb24oV2ViQ29yZTo6RnJhbWVJ
ZGVudGlmaWVyIGZyYW1lSUQsIFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJ
dGVtSWRlbnRpZmllciBpdGVtSUQsCisgICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4mIHRva2VucywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBhdXRvIGNv
bXBsZXRlTWFuaXB1bGF0aW9uID0gWyZdICgpIHsKKyAgICAgICAgaWYgKCFtX3BhZ2UpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXV0byYgbWFpbkZyYW1lID0gbV9wYWdl
LT5tYWluRnJhbWUoKTsKKyAgICAgICAgYXV0byogd2ViRnJhbWUgPSBXZWJGcmFtZTo6ZnJvbUNv
cmVGcmFtZShtYWluRnJhbWUpOworICAgICAgICBpZiAoIXdlYkZyYW1lIHx8IHdlYkZyYW1lLT5m
cmFtZUlEKCkgIT0gZnJhbWVJRCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBhdXRvIG1haW5Eb2N1bWVudCA9IG1ha2VSZWZQdHIobWFpbkZyYW1lLmRvY3VtZW50KCkpOwor
ICAgICAgICBpZiAoIW1haW5Eb2N1bWVudCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBhdXRvKiBjb250cm9sbGVyID0gbWFpbkRvY3VtZW50LT50ZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlcklmRXhpc3RzKCk7CisgICAgICAgIGlmICghY29udHJvbGxlcikKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gY29udHJvbGxlci0+Y29tcGxldGVN
YW5pcHVsYXRpb24oaXRlbUlELCB0b2tlbnMpOworICAgIH07CisgICAgY29tcGxldGlvbkhhbmRs
ZXIoY29tcGxldGVNYW5pcHVsYXRpb24oKSk7Cit9CisKIFBBTDo6U2Vzc2lvbklEIFdlYlBhZ2U6
OnNlc3Npb25JRCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnNlc3Npb25JRCgpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaAkocmV2aXNpb24gMjUxNDk0KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBACiAjaW5jbHVk
ZSA8V2ViQ29yZS9Qb2ludGVySUQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5UG9saWN5
VmlvbGF0aW9uRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlRGF0YS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1VzZXJBY3Rpdml0eS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlckNvbnRlbnRUeXBlcy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbi5oPgpAQCAt
MTE5Niw2ICsxMTk3LDEwIEBACiAgICAgV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudEZvckNvbnRl
eHQoY29uc3QgV2ViQ29yZTo6RWxlbWVudENvbnRleHQmKSBjb25zdDsKICAgICBPcHRpb25hbDxX
ZWJDb3JlOjpFbGVtZW50Q29udGV4dD4gY29udGV4dEZvckVsZW1lbnQoV2ViQ29yZTo6RWxlbWVu
dCYpIGNvbnN0OwogCisgICAgdm9pZCBzdGFydFRleHRNYW5pcHVsYXRpb25zKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CisgICAgdm9pZCBjb21wbGV0ZVRl
eHRNYW5pcHVsYXRpb24oV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyLCBXZWJDb3JlOjpUZXh0TWFu
aXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIsCisgICAgICAgIGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+
JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CisKICNpZiBFTkFCTEUoQVBQTEVf
UEFZKQogICAgIFdlYlBheW1lbnRDb29yZGluYXRvciogcGF5bWVudENvb3JkaW5hdG9yKCk7CiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVz
c2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjUxNDk0KQorKysgU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAt
NTgyLDQgKzU4Miw3IEBACiAgICAgU2VuZE1lc3NhZ2VUb1dlYkV4dGVuc2lvbihzdHJ1Y3QgV2Vi
S2l0OjpVc2VyTWVzc2FnZSB1c2VyTWVzc2FnZSkKICAgICBTZW5kTWVzc2FnZVRvV2ViRXh0ZW5z
aW9uV2l0aFJlcGx5KHN0cnVjdCBXZWJLaXQ6OlVzZXJNZXNzYWdlIHVzZXJNZXNzYWdlKSAtPiAo
c3RydWN0IFdlYktpdDo6VXNlck1lc3NhZ2UgcmVwbHlNZXNzYWdlKSBBc3luYwogI2VuZGlmCisK
KyAgICBTdGFydFRleHRNYW5pcHVsYXRpb25zKCkgLT4gKCkgQXN5bmMKKyAgICBDb21wbGV0ZVRl
eHRNYW5pcHVsYXRpb24oV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIFdlYkNvcmU6
OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRlbnRpZmllciBpdGVtSWRlbnRpZmll
ciwgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRp
b25Ub2tlbj4gdG9rZW5zKSAtPiAoYm9vbCBzdWNjZXNzKSBBc3luYwogfQpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI1MTQ5NCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC03MzgsNiArNzM4LDcgQEAKIAkJOTk4NEZBQ0MxQ0ZGQUY2MDAwOEQxOThDIC8qIFdLV2ViVmll
d1RleHRJbnB1dC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk5ODRGQUNBMUNGRkFFRUUwMDhEMTk4QyAvKiBXS1dlYlZpZXdUZXh0SW5wdXQubW0gKi87
IH07CiAJCTk5ODRGQUNFMUNGRkIwOTAwMDhEMTk4QyAvKiBlZGl0YWJsZS1ib2R5Lmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTk4NEZB
Q0QxQ0ZGQjAzODAwOEQxOThDIC8qIGVkaXRhYmxlLWJvZHkuaHRtbCAqLzsgfTsKIAkJOTk5OTEw
OEIxRjM5M0M5NjAwOEFENDU1IC8qIENvcHlpbmcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OTk5MTA4QTFGMzkzQzhCMDA4QUQ0NTUgLyogQ29weWlu
Zy5tbSAqLzsgfTsKKwkJOUIwMkUwRDYyMzVGQTQ3RDAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRp
b24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAy
RTBENTIzNUZBNDdEMDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbi5tbSAqLzsgfTsKIAkJOUIw
Nzg2QTUxQzU4ODVDMzAwRDE1OUUzIC8qIEluamVjdGVkQnVuZGxlTWFrZUFsbFNoYWRvd1Jvb3Rz
T3Blbl9CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOUIwNzg2QTQxQzU4ODVDMzAwRDE1OUUzIC8qIEluamVjdGVkQnVuZGxlTWFrZUFsbFNo
YWRvd1Jvb3RzT3Blbl9CdW5kbGUuY3BwICovOyB9OwogCQk5QjE5Q0RBMDFGMDZERkUzMDAwNTQ4
REQgLyogTmV0d29ya1Byb2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMTlDRDlFMUYwNkRGRTMw
MDA1NDhERCAvKiBOZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tICov
OyB9OwogCQk5QjFGNkY3ODFGOTA1NTg0MDBCNTU3NDQgLyogQ29weUhUTUwubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjEwNTY0MTFGOTA0NUM3MDBE
NTU4M0YgLyogQ29weUhUTUwubW0gKi87IH07CkBAIC0yMTI4LDYgKzIxMjksNyBAQAogCQk5OTg0
RkFDQTFDRkZBRUVFMDA4RDE5OEMgLyogV0tXZWJWaWV3VGV4dElucHV0Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJWaWV3VGV4dElucHV0Lm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OTg0RkFDRDFDRkZCMDM4MDA4RDE5OEMgLyogZWRp
dGFibGUtYm9keS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gImVkaXRhYmxlLWJv
ZHkuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5OTkxMDhBMUYzOTNDOEIw
MDhBRDQ1NSAvKiBDb3B5aW5nLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gQ29weWluZy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUIwMkUwRDUy
MzVGQTQ3RDAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRpb24ubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBUZXh0TWFuaXB1bGF0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
QjA3ODZBMjFDNTg4MzBGMDBEMTU5RTMgLyogSW5qZWN0ZWRCdW5kbGVNYWtlQWxsU2hhZG93Um9v
dHNPcGVuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVk
QnVuZGxlTWFrZUFsbFNoYWRvd1Jvb3RzT3Blbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTlCMDc4NkE0MUM1ODg1QzMwMEQxNTlFMyAvKiBJbmplY3RlZEJ1bmRsZU1ha2VBbGxT
aGFkb3dSb290c09wZW5fQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEluamVjdGVkQnVuZGxlTWFrZUFsbFNoYWRvd1Jvb3RzT3Blbl9CdW5kbGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjEwNTY0MTFGOTA0NUM3MDBENTU4M0YgLyog
Q29weUhUTUwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDb3B5SFRNTC5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5MzksNiArMjk0MSw3IEBACiAJCQkJNTc3NEFBNjcyMUZC
QkY3ODAwQUYyQTFCIC8qIFRlc3RTT0F1dGhvcml6YXRpb24ubW0gKi8sCiAJCQkJRjRDRDc0Qzcy
MEZEQjQ5NjAwREUzNzk0IC8qIFRlc3RVUkxTY2hlbWVIYW5kbGVyLmggKi8sCiAJCQkJRjRDRDc0
QzgyMEZEQjQ5NjAwREUzNzk0IC8qIFRlc3RVUkxTY2hlbWVIYW5kbGVyLm1tICovLAorCQkJCTlC
MDJFMEQ1MjM1RkE0N0QwMDQwNDRCMiAvKiBUZXh0TWFuaXB1bGF0aW9uLm1tICovLAogCQkJCTVD
MTZGOEZCMjMwQzk0MkIwMDc0QzRBOCAvKiBUZXh0U2l6ZS5tbSAqLywKIAkJCQlDMjJGQTMyQTIy
OEY4NzA4MDA5RDc5ODggLyogVGV4dFdpZHRoLm1tICovLAogCQkJCTVDNzNBODFBMjMyMzA1OTgw
MERFQTg1QSAvKiBUTFNEZXByZWNhdGlvbi5tbSAqLywKQEAgLTQ4MjIsNiArNDgyNSw3IEBACiAJ
CQkJRjQ1MDMzRjUyMDZCRUM5NTAwOTM1MUNFIC8qIFRleHRBdXRvc2l6aW5nQm9vc3QubW0gaW4g
U291cmNlcyAqLywKIAkJCQk5M0U2MTkzQjFGOTMxQjNBMDBBRjI0NUUgLyogVGV4dENvZGVjLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUNFMzUyNEY5MUIxNDQxQzQwMDI4QTdDNSAvKiBUZXh0Rmll
bGREaWRCZWdpbkFuZEVuZEVkaXRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOUIwMkUwRDYy
MzVGQTQ3RDAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRpb24ubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk1QzE2RjhGQzIzMEM5NDM3MDA3NEM0QTggLyogVGV4dFNpemUubW0gaW4gU291cmNlcyAqLywK
IAkJCQlDMjJGQTMyQjIyOEY4NzA4MDA5RDc5ODggLyogVGV4dFdpZHRoLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0NDRTdFREQxQTQxMUE5MjAwNDQ3QzRDIC8qIFRpbWVSYW5nZXMuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Rl
eHRNYW5pcHVsYXRpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tCShub25leGlzdGVudCkKKysrIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbQkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBvcnQgIlRlc3QuaCIK
KyNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2
YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmg+Cisj
aW1wb3J0IDxXZWJLaXQvX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0uaD4KKyNpbXBvcnQgPFdlYktp
dC9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaD4KKyNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgor
I2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCitzdGF0aWMgYm9vbCBkb25lID0gZmFsc2U7CisK
K0BpbnRlcmZhY2UgVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIDogTlNPYmplY3QgPF9XS1RleHRN
YW5pcHVsYXRpb25EZWxlZ2F0ZT4KKworLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2Vi
VmlldyBkaWRGaW5kSXRlbTooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVtIGZvckZyYW1l
OihfV0tGcmFtZUhhbmRsZSAqKWZyYW1lOworLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICop
d2ViVmlldyBkaWRGaW5pc2hJbml0aWFsT2JzZXJ2YXRpb25Gb3JGcmFtZTooX1dLRnJhbWVIYW5k
bGUgKilmcmFtZTsKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU0Fy
cmF5PF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICo+ICppdGVtczsKKworQGVuZAorCitAaW1wbGVt
ZW50YXRpb24gVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIHsKKyAgICBSZXRhaW5QdHI8TlNNdXRh
YmxlQXJyYXk+IF9pdGVtczsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXQKK3sKKyAgICBpZiAo
IShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBfaXRlbXMg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWRGaW5kSXRl
bTooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVtIGZvckZyYW1lOihfV0tGcmFtZUhhbmRs
ZSAqKWZyYW1lCit7CisgICAgW19pdGVtcy5nZXQoKSBhZGRPYmplY3Q6aXRlbV07Cit9CisKKy0g
KHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkRmluaXNoSW5pdGlhbE9ic2Vy
dmF0aW9uRm9yRnJhbWU6KF9XS0ZyYW1lSGFuZGxlICopZnJhbWUKK3sKKyAgICBkb25lID0gdHJ1
ZTsKK30KKworLSAoTlNBcnJheTxfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqPiAqKWl0ZW1zCit7
CisgICAgcmV0dXJuIF9pdGVtcy5hdXRvcmVsZWFzZSgpOworfQorCitAZW5kCisKK25hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJIHsKKworVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBTdGFydFRleHRNYW5p
cHVsYXRpb25GaW5kU2ltcGxlUGFyYWdyYXBocykKK3sKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRv
cHROUyhbW1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGF1dG8g
d2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5T
TWFrZVJlY3QoMCwgMCwgNDAwLCA0MDApXSk7CisgICAgd2ViVmlldy5nZXQoKS5fdGV4dE1hbmlw
dWxhdGlvbkRlbGVnYXRlID0gZGVsZWdhdGUuZ2V0KCk7CisKKyAgICBbd2ViVmlldyBzeW5jaHJv
bm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8IURPQ1RZUEUgaHRtbD4iCisgICAgICAgICI8aHRtbD48
Ym9keT5oZWxsbzxicj53b3JsZDxkaXY+V2ViS2l0PC9kaXY+PC9ib2R5PjwvaHRtbD4iXTsKKwor
ICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc107
CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGF1dG8gKml0ZW1z
ID0gZGVsZWdhdGUuZ2V0KCkuaXRlbXM7CisgICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAzVUwp
OworICAgIEVYUEVDVF9FUShpdGVtc1swXS50b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQRUNU
X1NUUkVRKCJoZWxsbyIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOwor
CisgICAgRVhQRUNUX0VRKGl0ZW1zWzFdLnRva2Vucy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1Rf
U1RSRVEoIndvcmxkIiwgaXRlbXNbMV0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisK
KyAgICBFWFBFQ1RfRVEoaXRlbXNbMl0udG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9T
VFJFUSgiV2ViS2l0IiwgaXRlbXNbMl0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7Cit9
CisKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgU3RhcnRUZXh0TWFuaXB1bGF0aW9uRmluZFBhcmFn
cmFwaHNXaXRoTXVsdGlsZVRva2VucykKK3sKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhb
W1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gd2ViVmll
dyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJl
Y3QoMCwgMCwgNDAwLCA0MDApXSk7CisgICAgd2ViVmlldy5nZXQoKS5fdGV4dE1hbmlwdWxhdGlv
bkRlbGVnYXRlID0gZGVsZWdhdGUuZ2V0KCk7CisgICAgCisgICAgW3dlYlZpZXcgc3luY2hyb25v
dXNseUxvYWRIVE1MU3RyaW5nOkAiPCFET0NUWVBFIGh0bWw+IgorICAgICAiPGh0bWw+PGJvZHk+
aGVsbG8sICA8Yj53b3JsZDwvYj48YnI+PGRpdj48ZW0+IDxiPldlYjwvYj5LaXQ8L2VtPiAgPC9k
aXY+PC9ib2R5PjwvaHRtbD4iXTsKKyAgICAKKyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZp
ZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNdOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmZG9uZSk7CisgICAgCisgICAgYXV0byAqaXRlbXMgPSBkZWxlZ2F0ZS5nZXQoKS5pdGVtczsK
KyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDJVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBd
LnRva2Vucy5jb3VudCwgMlVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoImhlbGxvLCAiLCBpdGVtc1sw
XS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoIndvcmxk
IiwgaXRlbXNbMF0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgCisgICAgRVhQ
RUNUX0VRKGl0ZW1zWzFdLnRva2Vucy5jb3VudCwgMlVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoIldl
YiIsIGl0ZW1zWzFdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9T
VFJFUSgiS2l0IiwgaXRlbXNbMV0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7Cit9CisK
K3N0cnVjdCBUb2tlbiB7CisgICAgTlNTdHJpbmcgKmlkZW50aWZpZXI7CisgICAgTlNTdHJpbmcg
KmNvbnRlbnQ7Cit9OworCit0ZW1wbGF0ZTxzaXplX3QgbGVuZ3RoPgorc3RhdGljIFJldGFpblB0
cjxfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbT4gY3JlYXRlSXRlbShOU1N0cmluZyAqaXRlbUlkZW50
aWZpZXIsIGNvbnN0IFRva2VuICgmdG9rZW5zKVtsZW5ndGhdKQoreworICAgIFJldGFpblB0cjxO
U011dGFibGVBcnJheT4gd2tUb2tlbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRdKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAg
ICAgIFJldGFpblB0cjxfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4+IHRva2VuID0gYWRvcHROUyhb
W19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiBhbGxvY10gaW5pdF0pOworICAgICAgICB0b2tlbi5n
ZXQoKS5pZGVudGlmaWVyID0gdG9rZW5zW2ldLmlkZW50aWZpZXI7CisgICAgICAgIHRva2VuLmdl
dCgpLmNvbnRlbnQgPSB0b2tlbnNbaV0uY29udGVudDsKKyAgICAgICAgW3drVG9rZW5zLmdldCgp
IGFkZE9iamVjdDp0b2tlbi5nZXQoKV07CisgICAgfQorICAgIHJldHVybiBhZG9wdE5TKFtbX1dL
VGV4dE1hbmlwdWxhdGlvbkl0ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjppdGVtSWRlbnRp
ZmllciB0b2tlbnM6d2tUb2tlbnMuZ2V0KCldKTsKK30KKworVEVTVChUZXh0TWFuaXB1bGF0aW9u
LCBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb25TaG9sZFJlcGxhY2VTaW1wbGVQYXJhZ3JhcGhDb250
ZW50KQoreworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRl
bGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCld
KTsKKyAgICB3ZWJWaWV3LmdldCgpLl90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgPSBkZWxlZ2F0
ZS5nZXQoKTsKKworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwh
RE9DVFlQRSBodG1sPiIKKyAgICAgIjxodG1sPjxib2R5PjxwPmhlbGxsbywgd29vb3JsZDwvcD48
cD4gaGV5LCA8Yj4gS2l0czwvYj4gaXMgPGVtPmN1dXV0ZTwvZW0+PC9wPjwvYm9keT48L2h0bWw+
Il07CisKKyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxh
dGlvbnNdOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBhdXRv
ICppdGVtcyA9IGRlbGVnYXRlLmdldCgpLml0ZW1zOworICAgIEVYUEVDVF9FUShpdGVtcy5jb3Vu
dCwgMlVMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMF0udG9rZW5zLmNvdW50LCAxVUwpOworICAg
IEVYUEVDVF9TVFJFUSgiaGVsbGxvLCB3b29vcmxkIiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRl
bnQuVVRGOFN0cmluZyk7CisKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMV0udG9rZW5zLmNvdW50LCA0
VUwpOworICAgIEVYUEVDVF9TVFJFUSgiaGV5LCAiLCBpdGVtc1sxXS50b2tlbnNbMF0uY29udGVu
dC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoIktpdHMiLCBpdGVtc1sxXS50b2tlbnNb
MV0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoIiBpcyAiLCBpdGVtc1sx
XS50b2tlbnNbMl0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoImN1dXV0
ZSIsIGl0ZW1zWzFdLnRva2Vuc1szXS5jb250ZW50LlVURjhTdHJpbmcpOworCisgICAgZG9uZSA9
IGZhbHNlOworICAgIFt3ZWJWaWV3IF9jb21wbGV0ZVRleHRNYW5pcHVsYXRpb246KF9XS1RleHRN
YW5pcHVsYXRpb25JdGVtICopY3JlYXRlSXRlbShpdGVtc1sxXS5pZGVudGlmaWVyLCB7CisgICAg
ICAgIHsgaXRlbXNbMV0udG9rZW5zWzBdLmlkZW50aWZpZXIsIEAiSGVsbG8sICIgfSwKKyAgICAg
ICAgeyBpdGVtc1sxXS50b2tlbnNbMV0uaWRlbnRpZmllciwgQCJraXR0ZW5zIiB9LAorICAgICAg
ICB7IGl0ZW1zWzFdLnRva2Vuc1syXS5pZGVudGlmaWVyLCBAIiBhcmUgIiB9LAorICAgICAgICB7
IGl0ZW1zWzFdLnRva2Vuc1szXS5pZGVudGlmaWVyLCBAImN1dGUiIH0sCisgICAgfSkuZ2V0KCkg
Y29tcGxldGlvbjpeKEJPT0wgc3VjY2VzcykgeworICAgICAgICBFWFBFQ1RfVFJVRShzdWNjZXNz
KTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZkb25lKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIjxwPmhlbGxsbywgd29vb3JsZDwv
cD48cD5IZWxsbywgPGI+a2l0dGVuczwvYj4gYXJlIDxlbT5jdXRlPC9lbT48L3A+IiwKKyAgICAg
ICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHku
aW5uZXJIVE1MIl0pOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9jb21wbGV0
ZVRleHRNYW5pcHVsYXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICopY3JlYXRlSXRlbShp
dGVtc1swXS5pZGVudGlmaWVyLCB7CisgICAgICAgIHsgaXRlbXNbMF0udG9rZW5zWzBdLmlkZW50
aWZpZXIsIEAiSGVsbG8sIHdvcmxkLiIgfSwKKyAgICB9KS5nZXQoKSBjb21wbGV0aW9uOl4oQk9P
TCBzdWNjZXNzKSB7CisgICAgICAgIEVYUEVDVF9UUlVFKHN1Y2Nlc3MpOworICAgICAgICBkb25l
ID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwor
ICAgIEVYUEVDVF9XS19TVFJFUSgiPHA+SGVsbG8sIHdvcmxkLjwvcD48cD5IZWxsbywgPGI+a2l0
dGVuczwvYj4gYXJlIDxlbT5jdXRlPC9lbT48L3A+IiwKKyAgICAgICAgW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuaW5uZXJIVE1MIl0pOworfQor
Cit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381739</attachid>
            <date>2019-10-23 15:22:15 -0700</date>
            <delta_ts>2019-10-23 15:45:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203286-20191023152214.patch</filename>
            <type>text/plain</type>
            <size>72654</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MTQ5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDE5LTEwLTIzICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIG1lY2hhbmlzbSB0byBm
aW5kIGFuZCBtYW5pcHVsYXRlIHRleHQgYnkgcGFyYWdyYXBocworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMjg2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIFRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyIHdoaWNoIGFsbG93cyBXZWJLaXQgY2xpZW50cyB0byBmaW5k
IGFuZCByZXBsYWNlCisgICAgICAgIHRleHQgY29udGVudCBpbiBhIGdpdmVuIGRvY3VtZW50IGJ5
IHBhcmFncmFwaCBib3VuZGFyeS4gRm9yIG5vdywgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIg
ZmluZHMKKyAgICAgICAgYWxsIHBhcmFncmFwaHMgaW4gdGhlIGRvY3VtZW50IGFuZCBpbnZva2Vz
IHRoZSBjYWxsYmFjayBmb3IgZWFjaCBwYXJhZ3JhcGguIEluIHRoZSBmdXR1cmUsIHRoaXMKKyAg
ICAgICAgY29udHJvbGxlciB3aWxsIHN1cHBvcnQgZGV0ZWN0aW5nIHJlbW92YWwgYW5kIGluc2Vy
dGlvbiBvZiBuZXcgY29udGVudCB0byB0aGUgZG9jdW1lbnQuCisKKyAgICAgICAgVGVzdHM6IFRl
eHRNYW5pcHVsYXRpb24uU3RhcnRUZXh0TWFuaXB1bGF0aW9uRmluZFNpbXBsZVBhcmFncmFwaHMK
KyAgICAgICAgICAgICAgIFRleHRNYW5pcHVsYXRpb24uU3RhcnRUZXh0TWFuaXB1bGF0aW9uRmlu
ZFBhcmFncmFwaHNXaXRoTXVsdGlsZVRva2VucworICAgICAgICAgICAgICAgVGV4dE1hbmlwdWxh
dGlvbi5Db21wbGV0ZVRleHRNYW5pcHVsYXRpb25TaG91bGRSZXBsYWNlU2ltcGxlUGFyYWdyYXBo
Q29udGVudAorICAgICAgICAgICAgICAgVGV4dE1hbmlwdWxhdGlvbi5Db21wbGV0ZVRleHRNYW5p
cHVsYXRpb25TaG91bGRGYWlsV2hlbkNvbnRlbnRJc0NoYW5nZWQKKyAgICAgICAgICAgICAgIFRl
eHRNYW5pcHVsYXRpb24uQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uU2hvdWxkRmFpbFdoZW5Eb2N1
bWVudEhhc0JlZW5OYXZpZ2F0ZWRBd2F5CisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6IENsZWFyIFRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyLiBPdGhlcndpc2UgbV9pdGVtcworICAgICAgICBpbiBUZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlciBtYXkga2VlcCBhIGJ1bmNoIG9mIG5vZGVzIGFsaXZlIGFuZCBub3QgbGV0IHRo
aXMgZG9jdW1lbnQgZGVzdHJ1Y3RlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0ZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlcik6IEFkZGVkLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5o
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnRleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
SWZFeGlzdHMpOiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIpOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpzdGFydE9ic2VydmluZ1BhcmFncmFw
aHMpOiBGaW5kcyBhbGwgcGFyZ3JhcGhzIGFuZCBpbnZva2UKKyAgICAgICAgdGhlIGNhbGxiYWNr
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OmFkZEl0ZW0p
OiBBZGRlZC4gQSBoZWxwZXIgZm9yIHN0YXJ0T2JzZXJ2aW5nUGFyYWdyYXBocy4KKyAgICAgICAg
KFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpjb21wbGV0ZU1hbmlwdWxhdGlv
bik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6
OnJlcGxhY2UpOiBBZGRlZC4gQSBoZWxwZXIgZm9yIGNvbXBsZXRlTWFuaXB1bGF0aW9uLgorICAg
ICAgICAqIGVkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9r
ZW46OmVuY29kZSBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuOjpkZWNvZGUpOiBBZGRlZC4KKwogMjAx
OS0xMC0yMyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBXZWIgSW5zcGVjdG9yOiBub3RpZnkgaW5zcGVjdG9yIHdoZW4gcHJvdmlzaW9uYWwgcGFnZSBp
cyBjcmVhdGVkLCBjb21taXR0ZWQgYW5kIGRlc3Ryb3llZApJbmRleDogU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
CShyZXZpc2lvbiAyNTE0OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MDMsNiArNTAzLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBREVSUwogICAgIGVkaXRpbmcvVGV4dEdyYW51bGFyaXR5LmgKICAgICBlZGl0aW5nL1Rl
eHRJdGVyYXRvci5oCiAgICAgZWRpdGluZy9UZXh0SXRlcmF0b3JCZWhhdmlvci5oCisgICAgZWRp
dGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oCiAgICAgZWRpdGluZy9VbmRvU3RlcC5o
CiAgICAgZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAogICAgIGVkaXRpbmcvVmlzaWJsZVNlbGVj
dGlvbi5oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjUxNDk0KQorKysgU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwNjEsNiArMTA2MSw3IEBAIGVk
aXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q28KIGVkaXRpbmcvVGV4dENoZWNr
aW5nSGVscGVyLmNwcAogZWRpdGluZy9UZXh0SW5zZXJ0aW9uQmFzZUNvbW1hbmQuY3BwCiBlZGl0
aW5nL1RleHRJdGVyYXRvci5jcHAKK2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIu
Y3BwCiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCiBlZGl0aW5nL1VubGlua0NvbW1hbmQuY3Bw
CiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI1MTQ5NCkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMjg1Miw2ICsyODUyLDcgQEAKIAkJOTk2RTU5REYxREYwMTI4RDAwNjYxMkI5
IC8qIE5hdmlnYXRvcldlYkRyaXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTk2RTU5REMxREYwMEQ5MDAwNjYxMkI5IC8qIE5hdmlnYXRvcldlYkRy
aXZlci5oICovOyB9OwogCQk5QTUyOEU4NDE3RDdGNTJGMDBBQTk1MTggLyogRmxvYXRpbmdPYmpl
Y3RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QTUy
OEU4MjE3RDdGNTJGMDBBQTk1MTggLyogRmxvYXRpbmdPYmplY3RzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOUFCMUYzODAxOEUyNDg5QTAwNTM0
NzQzIC8qIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlBQjFGMzdFMThFMjQ4OUEwMDUzNDc0MyAvKiBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJOUIwMkUwQzgyMzVFQUQyQTAwNDA0NEIyIC8qIFRleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5QjAyRTBDMzIzNUU3NkFBMDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk5QjI0REU4RTE1MTk0Qjk1MDBDNTlDMjcgLyogSFRNTEJESUVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMjRERThDMTUxOTRCOTUwMEM1
OUMyNyAvKiBIVE1MQkRJRWxlbWVudC5oICovOyB9OwogCQk5QjI3RkM2MDIzNEQ5QURCMDAzOTRB
NDYgLyogV2luZG93RXZlbnRMb29wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5QjI3RkM1RTIzNEQ5QURBMDAzOTRBNDYgLyogV2luZG93RXZlbnRMb29w
LmggKi87IH07CiAJCTlCMkQ4QTc5MTQ5OTdDQ0YwMEVDRUYzRSAvKiBVbmRvU3RlcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIyRDhBNzgxNDk5N0ND
RjAwRUNFRjNFIC8qIFVuZG9TdGVwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTExMDc0LDYgKzExMDc1LDggQEAKIAkJOUFDNkYwMjUyMTE0OEY1
NDAwQ0JEQTA2IC8qIE1lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeS5o
OyBwYXRoID0gbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9y
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QUM2RjAyRDIxMTQ4RjlGMDBDQkRB
MDYgLyogTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeU1vY2suY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9y
eU1vY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QUM2RjAyRjIxMTQ4RkEy
MDBDQkRBMDYgLyogTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeU1vY2suaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9y
eU1vY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUIwMkUwQzMyMzVFNzZBQTAw
NDA0NEIyIC8qIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTlCMDJFMEM0MjM1RTc2QUEwMDQwNDRCMiAvKiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBS
ZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBwYXRo
ID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9SZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk5QjAzRDgwNjFC
QjMxMTBEMDBCNzY0QzkgLyogU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaDsgcGF0aCA9IERl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaDsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEQ4IC8q
IFJlYWRhYmxlU3RyZWFtQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9SZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19E
SVI7IH07CkBAIC0yMTQ0MCw2ICsyMTQ0Myw4IEBACiAJCQkJOTMzMDlEQ0MwOTlFNjQ5MTAwNTZF
NTgxIC8qIFRleHRJdGVyYXRvci5jcHAgKi8sCiAJCQkJOTMzMDlEQ0QwOTlFNjQ5MTAwNTZFNTgx
IC8qIFRleHRJdGVyYXRvci5oICovLAogCQkJCTkzOTIxNDY4MThBNkQ3OTEwMDBFRTY4OCAvKiBU
ZXh0SXRlcmF0b3JCZWhhdmlvci5oICovLAorCQkJCTlCMDJFMEM0MjM1RTc2QUEwMDQwNDRCMiAv
KiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAgKi8sCisJCQkJOUIwMkUwQzMyMzVFNzZB
QTAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmggKi8sCiAJCQkJOTMzMDlE
Q0EwOTlFNjQ5MTAwNTZFNTgxIC8qIFR5cGluZ0NvbW1hbmQuY3BwICovLAogCQkJCTkzMzA5RENC
MDk5RTY0OTEwMDU2RTU4MSAvKiBUeXBpbmdDb21tYW5kLmggKi8sCiAJCQkJOUIyRDhBNzgxNDk5
N0NDRjAwRUNFRjNFIC8qIFVuZG9TdGVwLmggKi8sCkBAIC0zMjM1Miw2ICszMjM1Nyw3IEBACiAJ
CQkJQ0VDQURGQ0UxNTM3NzkxRDAwRTM3MDY4IC8qIFRleHRJbnNlcnRpb25CYXNlQ29tbWFuZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMUMwOTlFNjQ5MjAwNTZFNTgxIC8qIFRleHRJdGVy
YXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5MjE0NjkxOEE2RDc5MTAwMEVFNjg4IC8qIFRl
eHRJdGVyYXRvckJlaGF2aW9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk5QjAyRTBDODIzNUVBRDJB
MDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDRUY0NUU5MEU2ODc3NjcwMDFDMTI4NyAvKiBUZXh0TWV0cmljcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTREOTg4QjQxN0JGRDFGNjAwODRGQjg4IC8qIFRleHROb2RlVHJhdmVyc2FsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQzE4REE1OTE4MUFGNkE1MDBDNEVGMjIgLyogVGV4dFBhaW50
ZXIuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lv
biAyNTE0OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTMsNiArMjEzLDcgQEAKICNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgog
I2luY2x1ZGUgIlRleHRBdXRvU2l6aW5nLmgiCiAjaW5jbHVkZSAiVGV4dEV2ZW50LmgiCisjaW5j
bHVkZSAiVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUZXh0Tm9kZVRy
YXZlcnNhbC5oIgogI2luY2x1ZGUgIlRvdWNoQWN0aW9uLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3Jt
U291cmNlLmgiCkBAIC0yNDc5LDYgKzI0ODAsOCBAQCB2b2lkIERvY3VtZW50OjpwcmVwYXJlRm9y
RGVzdHJ1Y3Rpb24oKQogCiAgICAgbV91bmRvTWFuYWdlci0+cmVtb3ZlQWxsSXRlbXMoKTsKIAor
ICAgIG1fdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgPSBudWxscHRyOyAvLyBGcmVlIG5vZGVz
IGtlcHQgYWxpdmUgYnkgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuCisKICNpZiBFTkFCTEUo
QUNDRVNTSUJJTElUWSkKICAgICBpZiAodGhpcyAhPSAmdG9wRG9jdW1lbnQoKSkgewogICAgICAg
ICAvLyBMZXQgdGhlIGF4IGNhY2hlIGtub3cgdGhhdCB0aGlzIHN1YmZyYW1lIGdvZXMgb3V0IG9m
IHNjb3BlLgpAQCAtODM0MSw0ICs4MzQ0LDExIEBAIHZvaWQgRG9jdW1lbnQ6OnNldFBpY3R1cmVJ
blBpY3R1cmVFbGVtZW4KIH0KICNlbmRpZgogCitUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlciYg
RG9jdW1lbnQ6OnRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyKCkKK3sKKyAgICBpZiAoIW1fdGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIpCisgICAgICAgIG1fdGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXIgPSBtYWtlVW5pcXVlPFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyPigqdGhpcyk7Cisg
ICAgcmV0dXJuICptX3RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMjUxNDk0KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw2
ICsxOTYsNyBAQCBjbGFzcyBTdHlsZVNoZWV0OwogY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwog
Y2xhc3MgU3R5bGVTaGVldExpc3Q7CiBjbGFzcyBUZXh0OworY2xhc3MgVGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI7CiBjbGFzcyBUZXh0UmVzb3VyY2VEZWNvZGVyOwogY2xhc3MgVHJlZVdhbGtl
cjsKIGNsYXNzIFVuZG9NYW5hZ2VyOwpAQCAtMTU1Nyw2ICsxNTU4LDkgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0UGljdHVyZUluUGljdHVyZUVsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCopOwogI2Vu
ZGlmCiAKKyAgICBXRUJDT1JFX0VYUE9SVCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlciYgdGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIoKTsKKyAgICBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxl
ciogdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXJJZkV4aXN0cygpIHsgcmV0dXJuIG1fdGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXIuZ2V0KCk7IH0KKwogcHJvdGVjdGVkOgogICAgIGVudW0gQ29u
c3RydWN0aW9uRmxhZ3MgeyBTeW50aGVzaXplZCA9IDEsIE5vblJlbmRlcmVkUGxhY2Vob2xkZXIg
PSAxIDw8IDEgfTsKICAgICBEb2N1bWVudChGcmFtZSosIGNvbnN0IFVSTCYsIHVuc2lnbmVkID0g
RGVmYXVsdERvY3VtZW50Q2xhc3MsIHVuc2lnbmVkIGNvbnN0cnVjdGlvbkZsYWdzID0gMCk7CkBA
IC0yMDg1LDYgKzIwODksOCBAQCBwcml2YXRlOgogICAgIFdlYWtQdHI8SFRNTFZpZGVvRWxlbWVu
dD4gbV9waWN0dXJlSW5QaWN0dXJlRWxlbWVudDsKICNlbmRpZgogCisgICAgc3RkOjp1bmlxdWVf
cHRyPFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyPiBtX3RleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOworCiAgICAgSGFzaE1hcDxFbGVtZW50KiwgRWxlbWVudElkZW50aWZpZXI+IG1faWRlbnRp
ZmllZEVsZW1lbnRzTWFwOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaCIKKworI2luY2x1
ZGUgIkVkaXRpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHREaXNhbGxvd2VkU2NvcGUuaCIKKyNpbmNs
dWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6VGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXIoRG9jdW1lbnQmIGRvY3VtZW50KQorICAgIDogbV9kb2N1bWVudChtYWtl
V2Vha1B0cihkb2N1bWVudCkpCit7Cit9CisKK3ZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXI6OnN0YXJ0T2JzZXJ2aW5nUGFyYWdyYXBocyhNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2smJiBj
YWxsYmFjaykKK3sKKyAgICBhdXRvIGRvY3VtZW50ID0gbWFrZVJlZlB0cihtX2RvY3VtZW50Lmdl
dCgpKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayk7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQgPSBm
aXJzdFBvc2l0aW9uSW5Ob2RlKG1fZG9jdW1lbnQuZ2V0KCkpOworICAgIFZpc2libGVQb3NpdGlv
biBlbmQgPSBsYXN0UG9zaXRpb25Jbk5vZGUobV9kb2N1bWVudC5nZXQoKSk7CisgICAgVGV4dEl0
ZXJhdG9yIGl0ZXJhdG9yIHsgc3RhcnQuZGVlcEVxdWl2YWxlbnQoKSwgZW5kLmRlZXBFcXVpdmFs
ZW50KCkgfTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm47IC8vIFZpc2libGVQ
b3NpdGlvbiBvciBUZXh0SXRlcmF0b3IncyBjb25zdHJ1Y3RvciBtYXkgaGF2ZSB1cGRhdGVkIHRo
ZSBsYXlvdXQgYW5kIGV4ZWN1dGVkIGFyYml0cmFyeSBzY3JpcHRzLgorCisgICAgVmVjdG9yPE1h
bmlwdWxhdGlvblRva2VuPiB0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGg7CisgICAgUG9zaXRpb24g
c3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGggPSBzdGFydC5kZWVwRXF1aXZhbGVudCgpOworICAgIHdo
aWxlICghaXRlcmF0b3IuYXRFbmQoKSkgeworICAgICAgICBTdHJpbmdWaWV3IGN1cnJlbnRUZXh0
ID0gaXRlcmF0b3IudGV4dCgpOworCisgICAgICAgIGlmIChzdGFydE9mQ3VycmVudFBhcmFncmFw
aC5pc051bGwoKSkKKyAgICAgICAgICAgIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoID0gaXRlcmF0
b3IucmFuZ2UoKS0+c3RhcnRQb3NpdGlvbigpOworCisgICAgICAgIHNpemVfdCBlbmRPZkxhc3RO
ZXdMaW5lID0gMDsKKyAgICAgICAgc2l6ZV90IG9mZnNldE9mTmV4dE5ld0xpbmUgPSAwOworICAg
ICAgICB3aGlsZSAoKG9mZnNldE9mTmV4dE5ld0xpbmUgPSBjdXJyZW50VGV4dC5maW5kKCdcbics
IGVuZE9mTGFzdE5ld0xpbmUpKSAhPSBub3RGb3VuZCkgeworICAgICAgICAgICAgaWYgKG9mZnNl
dE9mTmV4dE5ld0xpbmUpCisgICAgICAgICAgICAgICAgdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBo
LmFwcGVuZChNYW5pcHVsYXRpb25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCks
IGN1cnJlbnRUZXh0LnN1YnN0cmluZyhlbmRPZkxhc3ROZXdMaW5lLCBvZmZzZXRPZk5leHROZXdM
aW5lKS50b1N0cmluZygpIH0pOworCisgICAgICAgICAgICBhdXRvIGxhc3RSYW5nZSA9IGl0ZXJh
dG9yLnJhbmdlKCk7CisgICAgICAgICAgICBpZiAob2Zmc2V0T2ZOZXh0TmV3TGluZSA8IGN1cnJl
bnRUZXh0Lmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgbGFzdFJhbmdlLT5zZXRTdGFydChm
aXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoaXRlcmF0b3Iubm9kZSgpKSk7IC8vIE1vdmUgdGhl
IHN0YXJ0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQgbm9kZS4KKyAgICAgICAgICAg
ICAgICBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKGxhc3RSYW5nZSwgMCwgb2Zmc2V0T2ZOZXh0TmV3
TGluZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQb3NpdGlvbiBlbmRPZkN1cnJlbnRQ
YXJhZ3JhcGggPSBsYXN0UmFuZ2UtPmVuZFBvc2l0aW9uKCk7CisKKyAgICAgICAgICAgIGlmICgh
dG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBhZGRJ
dGVtKHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoLCBlbmRPZkN1cnJlbnRQYXJhZ3JhcGgsIFdURk1v
dmUodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoKSk7CisgICAgICAgICAgICBzdGFydE9mQ3VycmVu
dFBhcmFncmFwaC5jbGVhcigpOworICAgICAgICAgICAgZW5kT2ZMYXN0TmV3TGluZSA9IG9mZnNl
dE9mTmV4dE5ld0xpbmUgKyAxOworICAgICAgICB9CisKKyAgICAgICAgYXV0byByZW1haW5pbmdU
ZXh0ID0gY3VycmVudFRleHQuc3Vic3RyaW5nKGVuZE9mTGFzdE5ld0xpbmUpOworICAgICAgICBp
ZiAocmVtYWluaW5nVGV4dC5sZW5ndGgoKSkKKyAgICAgICAgICAgIHRva2Vuc0luQ3VycmVudFBh
cmFncmFwaC5hcHBlbmQoTWFuaXB1bGF0aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRpZmllci5nZW5l
cmF0ZSgpLCByZW1haW5pbmdUZXh0LnRvU3RyaW5nKCkgfSk7CisKKyAgICAgICAgaXRlcmF0b3Iu
YWR2YW5jZSgpOworICAgIH0KKworICAgIGlmICghdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlz
RW1wdHkoKSkKKyAgICAgICAgYWRkSXRlbShzdGFydE9mQ3VycmVudFBhcmFncmFwaCwgZW5kLmRl
ZXBFcXVpdmFsZW50KCksIFdURk1vdmUodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoKSk7Cit9CisK
K3ZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OmFkZEl0ZW0oY29uc3QgUG9zaXRpb24m
IHN0YXJ0T2ZQYXJhZ3JhcGgsIGNvbnN0IFBvc2l0aW9uJiBlbmRPZlBhcmFncmFwaCwgVmVjdG9y
PE1hbmlwdWxhdGlvblRva2VuPiYmIHRva2VucykKK3sKKyAgICBBU1NFUlQobV9kb2N1bWVudCk7
CisgICAgYXV0byByZXN1bHQgPSBtX2l0ZW1zLmFkZChtX2l0ZW1JZGVudGlmaWVyLmdlbmVyYXRl
KCksIE1hbmlwdWxhdGlvbkl0ZW0geyBzdGFydE9mUGFyYWdyYXBoLCBlbmRPZlBhcmFncmFwaCwg
V1RGTW92ZSh0b2tlbnMpIH0pOworICAgIG1fY2FsbGJhY2soKm1fZG9jdW1lbnQsIHJlc3VsdC5p
dGVyYXRvci0+a2V5LCByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnRva2Vucyk7Cit9CisKK2Jvb2wg
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OmNvbXBsZXRlTWFuaXB1bGF0aW9uKEl0ZW1JZGVu
dGlmaWVyIGl0ZW1JZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+JiBy
ZXBsYWNlbWVudFRva2VucykKK3sKKyAgICBpZiAoIWl0ZW1JZGVudGlmaWVyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGl0ZW1JdGVyYXRvciA9IG1faXRlbXMuZmluZChpdGVt
SWRlbnRpZmllcik7CisgICAgaWYgKGl0ZW1JdGVyYXRvciA9PSBtX2l0ZW1zLmVuZCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGRpZFJlcGxhY2UgPSByZXBsYWNlKGl0ZW1J
dGVyYXRvci0+dmFsdWUsIHJlcGxhY2VtZW50VG9rZW5zKTsKKworICAgIG1faXRlbXMucmVtb3Zl
KGl0ZW1JdGVyYXRvcik7CisKKyAgICByZXR1cm4gZGlkUmVwbGFjZTsKK30KKworYm9vbCBUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6cmVwbGFjZShjb25zdCBNYW5pcHVsYXRpb25JdGVtJiBp
dGVtLCBjb25zdCBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+JiByZXBsYWNlbWVudFRva2VucykK
K3sKKyAgICBUZXh0SXRlcmF0b3IgaXRlcmF0b3IgeyBpdGVtLnN0YXJ0LCBpdGVtLmVuZCB9Owor
ICAgIHNpemVfdCBjdXJyZW50VG9rZW5JbmRleCA9IDA7CisgICAgSGFzaE1hcDxUb2tlbklkZW50
aWZpZXIsIFJlZjxOb2RlPj4gdG9rZW5Ub05vZGU7CisgICAgd2hpbGUgKCFpdGVyYXRvci5hdEVu
ZCgpKSB7CisgICAgICAgIGF1dG8gc3RyaW5nID0gaXRlcmF0b3IudGV4dCgpLnRvU3RyaW5nKCk7
CisgICAgICAgIGlmIChjdXJyZW50VG9rZW5JbmRleCA+PSBpdGVtLnRva2Vucy5zaXplKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8mIGN1cnJlbnRUb2tlbiA9IGl0
ZW0udG9rZW5zW2N1cnJlbnRUb2tlbkluZGV4XTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yLnRleHQo
KSAhPSBjdXJyZW50VG9rZW4uY29udGVudCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgdG9rZW5Ub05vZGUuYWRkKGN1cnJlbnRUb2tlbi5pZGVudGlmaWVyLCAqaXRlcmF0b3Iu
bm9kZSgpKTsKKyAgICAgICAgaXRlcmF0b3IuYWR2YW5jZSgpOworICAgICAgICArK2N1cnJlbnRU
b2tlbkluZGV4OworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3QgcHJlc2V2ZSB0
aGUgb3JkZXIgb2YgdGhlIHJlcGxhY2VtZW50IGF0IGFsbC4KKyAgICBmb3IgKGF1dG8mIHRva2Vu
IDogcmVwbGFjZW1lbnRUb2tlbnMpIHsKKyAgICAgICAgYXV0byogbm9kZSA9IHRva2VuVG9Ob2Rl
LmdldCh0b2tlbi5pZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWlzPENoYXJhY3RlckRhdGE+KG5vZGUpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBzYWZlIHRvIHVw
ZGF0ZSBET00gd2hpbGUgaXRlcmF0aW5nIG92ZXIgdGhlIHRva2Vucy4KKyAgICAgICAgZG93bmNh
c3Q8Q2hhcmFjdGVyRGF0YT4obm9kZSktPnNldERhdGEodG9rZW4uY29udGVudCk7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlBvc2l0aW9uLmgiCisjaW5jbHVkZSA8d3Rm
L0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4K
KyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50OworCitjbGFzcyBUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxUZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlcj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyKERvY3VtZW50Jik7CisKKyAgICBlbnVtIFRva2Vu
SWRlbnRpZmllclR5cGUgeyB9OworICAgIHVzaW5nIFRva2VuSWRlbnRpZmllciA9IE9iamVjdElk
ZW50aWZpZXI8VG9rZW5JZGVudGlmaWVyVHlwZT47CisKKyAgICBzdHJ1Y3QgTWFuaXB1bGF0aW9u
VG9rZW4geworICAgICAgICBUb2tlbklkZW50aWZpZXIgaWRlbnRpZmllcjsKKyAgICAgICAgU3Ry
aW5nIGNvbnRlbnQ7CisKKyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OworICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0
aWMgT3B0aW9uYWw8TWFuaXB1bGF0aW9uVG9rZW4+IGRlY29kZShEZWNvZGVyJik7CisgICAgfTsK
KworICAgIGVudW0gSXRlbUlkZW50aWZpZXJUeXBlIHsgfTsKKyAgICB1c2luZyBJdGVtSWRlbnRp
ZmllciA9IE9iamVjdElkZW50aWZpZXI8SXRlbUlkZW50aWZpZXJUeXBlPjsKKworICAgIHVzaW5n
IE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjayA9IFdURjo6RnVuY3Rpb248dm9pZChEb2N1bWVudCYs
IEl0ZW1JZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+Jik+OworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc3RhcnRPYnNlcnZpbmdQYXJhZ3JhcGhzKE1hbmlwdWxhdGlv
bkl0ZW1DYWxsYmFjayYmKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgY29tcGxldGVNYW5p
cHVsYXRpb24oSXRlbUlkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4m
KTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgTWFuaXB1bGF0aW9uSXRlbSB7CisgICAgICAgIFBv
c2l0aW9uIHN0YXJ0OworICAgICAgICBQb3NpdGlvbiBlbmQ7CisgICAgICAgIFZlY3RvcjxNYW5p
cHVsYXRpb25Ub2tlbj4gdG9rZW5zOworICAgIH07CisKKyAgICB2b2lkIGFkZEl0ZW0oY29uc3Qg
UG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcGgsIGNvbnN0IFBvc2l0aW9uJiBlbmRPZlBhcmFncmFw
aCwgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiYmKTsKKyAgICBib29sIHJlcGxhY2UoY29uc3Qg
TWFuaXB1bGF0aW9uSXRlbSYsIGNvbnN0IFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4mKTsKKwor
ICAgIFdlYWtQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CisgICAgTWFuaXB1bGF0aW9uSXRlbUNh
bGxiYWNrIG1fY2FsbGJhY2s7CisgICAgSGFzaE1hcDxJdGVtSWRlbnRpZmllciwgTWFuaXB1bGF0
aW9uSXRlbT4gbV9pdGVtczsKKyAgICBJdGVtSWRlbnRpZmllciBtX2l0ZW1JZGVudGlmaWVyOwor
ICAgIFRva2VuSWRlbnRpZmllciBtX3Rva2VuSWRlbnRpZmllcjsKK307CisKK3RlbXBsYXRlPGNs
YXNzIEVuY29kZXI+Cit2b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRp
b25Ub2tlbjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8
PCBpZGVudGlmaWVyIDw8IGNvbnRlbnQ7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitP
cHRpb25hbDxUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+IFRl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbjo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCit7CisgICAgTWFuaXB1bGF0aW9uVG9rZW4gcmVzdWx0OworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlkZW50aWZpZXIpKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNvbnRlbnQpKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTE0OTQpCisrKyBTb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDE5LTEw
LTIzICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIG1l
Y2hhbmlzbSB0byBmaW5kIGFuZCBtYW5pcHVsYXRlIHRleHQgYnkgcGFyYWdyYXBocworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMjg2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRy
b2R1Y2VzIGEgbmV3IFNQSSB0byBmaW5kIHBhcmFncmFwaHMgb2YgdGV4dCBhbmQgbGV0IGNsaWVu
dCByZXBsYWNlIHRoZSBjb250ZW50IG9mIGVhY2ggcGFyYWdyYXBoLgorICAgICAgICBGb3Igbm93
LCB0aGlzIFNQSSBpcyBsaW1pdGVkIHRvIGZpbmQgJiByZXBsYWNlIGNvbnRlbnRzIG9mIG1haW4g
ZnJhbWUncyBkb2N1bWVudC4KKworICAgICAgICBXS1dlYlZpZXcncyBfc3RhcnRUZXh0TWFuaXB1
bGF0aW9uc1dpdGhDb21wbGV0aW9uSGFuZGxlciBzZW5kcyBTdGFydFRleHRNYW5pcHVsYXRpb25z
IG1lc3NhZ2UgdG8gV2ViQ29udGVudCBwcm9jZXNzCisgICAgICAgIHRvIGZpbmQgYWxsIHBhcmFn
cmFwaHMgaW4gdGhlIG1haW4gZnJhbWUuIFdlYkNvbnRlbnQgcHJvY2VzcyB3aWxsIHNlbmQgYmFj
ayBEaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW0gbWVzc2FnZQorICAgICAgICBmb3IgZWFjaCBw
YXJhZ3JhcGgsIHdoaWNoIGluIHR1cm4gY2FsbHMgYmFjayBfV0tUZXh0TWFuaXB1bGF0aW9uRGVs
ZWdhdGUncyBfd2ViVmlldzogZGlkRmluZEl0ZW06IGZvckZyYW1lOi4KKworICAgICAgICBVcG9u
IHJlY2VpdmluZyB0aGlzIGRlbGVnYXRlIGNhbGxiYWNrLCB0aGUgY2xpZW50IGNhbiBpbnZva2Ug
V0tXZWJWaWV3J3MgX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbiB0byByZXBsYWNlCisgICAgICAg
IHRoZSBjb250ZW50LiBJdCB3aWxsIHNlbmQgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uIHRvIFdl
YkNvbnRlbnQgcHJvY2Vzcywgd2hpY2ggd2lsbCBpbnZva2UgY29tcGxldGVNYW5pcHVsYXRpb24K
KyAgICAgICAgb24gbWFpbiBmcmFtZSdzIGRvY3VtZW50J3MgVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXIuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGVdKTogQWRlZC4KKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6XSk6IEFkZWQu
CisgICAgICAgIChzdHJpbmdJZGVudGlmaWVyRm9yRnJhbWVBbmRJdGVtKTogQWRkZWQuIFRyYW5z
Y29kZXMgZnJhbWUgSUQgJiBpdGVtIElEIGFzIGEgc3RyaW5nIGlkZW50aWZpZXIgZm9yIHRoZSBj
bGllbnRzLgorICAgICAgICAoZnJhbWVBbmRJdGVtSWRlbnRpZmllcnNGcm9tU3RyaW5nKTogQWRk
ZWQuIERlY29kZXMgZnJhbWUgSUQgJiBpdGVtIElEIGZyb20gdGhlIHN0cmluZyBpZGVudGlmaWVy
LiAKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbXBs
ZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NvbXBsZXRlVGV4dE1hbmlw
dWxhdGlvbjpjb21wbGV0aW9uOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJWaWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1h
bmlwdWxhdGlvbkRlbGVnYXRlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0uaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5tbTogQWRkZWQuCisgICAgICAgICgt
W19XS1RleHRNYW5pcHVsYXRpb25JdGVtIGluaXRXaXRoSWRlbnRpZmllcjp0b2tlbnM6XSk6Cisg
ICAgICAgICgtW19XS1RleHRNYW5pcHVsYXRpb25JdGVtIGlkZW50aWZpZXJdKToKKyAgICAgICAg
KC1bX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gdG9rZW5zXSk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaDogQWRkZWQuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4ubW06IEFkZGVkLgor
ICAgICAgICAoLVtfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gaW5pdF0pOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OmRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6Y29tcGxldGVUZXh0TWFuaXB1bGF0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5p
bjoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OnN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpj
b21wbGV0ZVRleHRNYW5pcHVsYXRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMu
aW46CisKIDIwMTktMTAtMjMgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgV2ViIEluc3BlY3Rvcjogbm90aWZ5IGluc3BlY3RvciB3aGVuIHByb3Zpc2lv
bmFsIHBhZ2UgaXMgY3JlYXRlZCwgY29tbWl0dGVkIGFuZCBkZXN0cm95ZWQKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gMjUxNDk0KQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTQxOSw2ICs5NDE5LDM0IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRNb2NrV2ViQXV0aGVu
dGljYXQKIH0KICNlbmRpZgogCit2b2lkIFdlYlBhZ2VQcm94eTo6c3RhcnRUZXh0TWFuaXB1bGF0
aW9ucyhUZXh0TWFuaXB1bGF0aW9uSXRlbUNhbGxiYWNrJiYgY2FsbGJhY2ssIFdURjo6Q29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGlmICghaGFz
UnVubmluZ1Byb2Nlc3MoKSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIG1fdGV4dE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spOworICAgIG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OlN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMoKSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlciksIG1fd2ViUGFnZUlEKTsKK30KKwordm9pZCBXZWJQYWdl
UHJveHk6OmRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbShXZWJDb3JlOjpGcmFtZUlkZW50aWZp
ZXIgZnJhbWVJZGVudGlmaWVyLCBXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6
SXRlbUlkZW50aWZpZXIgaXRlbUlkZW50aWZpZXIsCisgICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6
OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4mIHRva2VucykK
K3sKKyAgICBpZiAoIW1fdGV4dE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjaykKKyAgICAgICAgcmV0
dXJuOworICAgIG1fdGV4dE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjayhmcmFtZUlkZW50aWZpZXIs
IGl0ZW1JZGVudGlmaWVyLCB0b2tlbnMpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6Y29tcGxl
dGVUZXh0TWFuaXB1bGF0aW9uKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBXZWJD
b3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIgaXRlbUlELAor
ICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFu
aXB1bGF0aW9uVG9rZW4+JiB0b2tlbnMsIFdURjo6RnVuY3Rpb248dm9pZCAoYm9vbCBzdWNjZXNz
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkp
IHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OldlYlBhZ2U6OkNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihmcmFtZUlELCBpdGVtSUQs
IHRva2VucyksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBtX3dlYlBhZ2VJRCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjdW5kZWYgTUVSR0VfV0hFRUxfRVZFTlRTCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMjUxNDk0KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTkzLDYgKzkzLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NlYXJjaFBvcHVwTWVudS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvVGV4dENoZWNraW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0
R3JhbnVsYXJpdHkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Vc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9WaWV3cG9ydEFyZ3VtZW50cy5oPgogI2luY2x1ZGUgPG1lbW9y
eT4KQEAgLTE2MTEsNiArMTYxMiwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNb2NrV2ViQXV0
aGVudGljYXRpb25Db25maWd1cmF0aW9uKFdlYkNvcmU6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNv
bmZpZ3VyYXRpb24mJik7CiAjZW5kaWYKIAorICAgIHVzaW5nIFRleHRNYW5pcHVsYXRpb25JdGVt
Q2FsbGJhY2sgPSBXVEY6OkZ1bmN0aW9uPHZvaWQgKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciwg
V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyLCBjb25z
dCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlv
blRva2VuPiYpPjsKKyAgICB2b2lkIHN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMoVGV4dE1hbmlwdWxh
dGlvbkl0ZW1DYWxsYmFjayYmLCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Cisg
ICAgdm9pZCBkaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW0oV2ViQ29yZTo6RnJhbWVJZGVudGlm
aWVyLCBXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIs
IGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1
bGF0aW9uVG9rZW4+Jik7CisgICAgdm9pZCBjb21wbGV0ZVRleHRNYW5pcHVsYXRpb24oV2ViQ29y
ZTo6RnJhbWVJZGVudGlmaWVyLCBXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6
SXRlbUlkZW50aWZpZXIsCisgICAgICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+JiwgV1RGOjpGdW5jdGlvbjx2b2lk
IChib29sIHN1Y2Nlc3MpPiYmKTsKKwogcHJpdmF0ZToKICAgICBXZWJQYWdlUHJveHkoUGFnZUNs
aWVudCYsIFdlYlByb2Nlc3NQcm94eSYsIFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiYmKTsK
ICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwpAQCAtMjU3NCw2ICsyNTgxLDggQEAgcHJp
dmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3VzcGVuZGVkUGFnZVByb3h5PiBtX3N1c3BlbmRl
ZFBhZ2VLZXB0VG9QcmV2ZW50Rmxhc2hpbmc7CiAgICAgV2Vha1B0cjxTdXNwZW5kZWRQYWdlUHJv
eHk+IG1fbGFzdFN1c3BlbmRlZFBhZ2U7CiAKKyAgICBUZXh0TWFuaXB1bGF0aW9uSXRlbUNhbGxi
YWNrIG1fdGV4dE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjazsKKwogI2lmIEhBVkUoUEVOQ0lMS0lU
KQogICAgIHN0ZDo6dW5pcXVlX3B0cjxFZGl0YWJsZUltYWdlQ29udHJvbGxlcj4gbV9lZGl0YWJs
ZUltYWdlQ29udHJvbGxlcjsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjUxNDk0KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNv
cHkpCkBAIC01ODEsNCArNTgxLDkgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBT
ZW5kTWVzc2FnZVRvV2ViVmlldyhzdHJ1Y3QgV2ViS2l0OjpVc2VyTWVzc2FnZSB1c2VyTWVzc2Fn
ZSkKICAgICBTZW5kTWVzc2FnZVRvV2ViVmlld1dpdGhSZXBseShzdHJ1Y3QgV2ViS2l0OjpVc2Vy
TWVzc2FnZSB1c2VyTWVzc2FnZSkgLT4gKHN0cnVjdCBXZWJLaXQ6OlVzZXJNZXNzYWdlIHJlcGx5
TWVzc2FnZSkgQXN5bmMKICNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgRGlkRmlu
ZFRleHRNYW5pcHVsYXRpb25JdGVtKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBX
ZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIgaWRlbnRp
ZmllciwgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVs
YXRpb25Ub2tlbj4gdG9rZW5zKQorI2VuZGlmCisKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkocmV2aXNpb24gMjUxNDk0KQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkod29ya2luZyBj
b3B5KQpAQCAtOTgsNiArOTgsOSBAQAogI2ltcG9ydCAiX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnlJ
bnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLU2Vzc2lvblN0YXRlSW50ZXJuYWwuaCIKICNpbXBvcnQg
Il9XS1RleHRJbnB1dENvbnRleHRJbnRlcm5hbC5oIgorI2ltcG9ydCAiX1dLVGV4dE1hbmlwdWxh
dGlvbkRlbGVnYXRlLmgiCisjaW1wb3J0ICJfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oIgorI2lt
cG9ydCAiX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmgiCiAjaW1wb3J0ICJfV0tWaXNpdGVkTGlu
a1N0b3JlSW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1dlYnNpdGVQb2xpY2llc0ludGVybmFsLmgi
CiAjaW1wb3J0IDxXZWJDb3JlL0VsZW1lbnRDb250ZXh0Lmg+CkBAIC0xMTMsNiArMTE2LDcgQEAK
ICNpbXBvcnQgPFdlYkNvcmUvU2V0dGluZ3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2hhcmVkQnVm
ZmVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1N0cmluZ1V0aWxpdGllcy5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9WYWxp
ZGF0aW9uQnViYmxlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1ZpZXdwb3J0QXJndW1lbnRzLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1dyaXRpbmdNb2RlLmg+CkBAIC0yNzYsNiArMjgwLDggQEAgc3RhdGlj
IE9wdGlvbmFsPFdlYkNvcmU6OlNjcm9sbGJhck92ZXJsYQogCiAgICAgQk9PTCBfdXNlUGxhdGZv
cm1GaW5kVUk7CiAKKyAgICBXZWFrT2JqQ1B0cjxpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVn
YXRlPj4gX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTsKKwogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCiAgICAgUmV0YWluUHRyPF9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5PiBfcmVtb3RlT2JqZWN0
UmVnaXN0cnk7CiAKQEAgLTc0MzksNiArNzQ0NSwxMDEgQEAgLSAodm9pZClfZXhlY3V0ZUVkaXRD
b21tYW5kOihOU1N0cmluZyAqKQogICAgIH0pOwogfQogCistIChpZCA8X1dLVGV4dE1hbmlwdWxh
dGlvbkRlbGVnYXRlPilfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlCit7CisgICAgcmV0dXJuIF90
ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUuZ2V0QXV0b3JlbGVhc2VkKCk7Cit9CisKKy0gKHZvaWQp
X3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTooaWQgPF9XS1RleHRNYW5pcHVsYXRpb25EZWxl
Z2F0ZT4pZGVsZWdhdGUKK3sKKyAgICBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlID0gZGVsZWdh
dGU7Cit9CisKK3N0YXRpYyBTdHJpbmcgc3RyaW5nSWRlbnRpZmllckZvckZyYW1lQW5kSXRlbShX
ZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1JRCkKK3sKKyAgICBTdHJpbmdCdWlsZGVy
IHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5kTnVtYmVyKGZyYW1lSUQudG9VSW50NjQoKSk7Cisg
ICAgcmVzdWx0LmFwcGVuZCgnOicpOworICAgIHJlc3VsdC5hcHBlbmROdW1iZXIoaXRlbUlELnRv
VUludDY0KCkpOworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKK30KKworc3RydWN0IFRl
eHRNYW5pcHVsYXRpb25JZGVudGlmaWVycyB7CisgICAgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVy
IGZyYW1lSUQ7CisgICAgV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1J
ZGVudGlmaWVyIGl0ZW1JRDsKK307CisKK3N0YXRpYyBPcHRpb25hbDxUZXh0TWFuaXB1bGF0aW9u
SWRlbnRpZmllcnM+IGZyYW1lQW5kSXRlbUlkZW50aWZpZXJzRnJvbVN0cmluZyhTdHJpbmcgc3Ry
aW5nSWRlbnRpZmllcikKK3sKKyAgICBUZXh0TWFuaXB1bGF0aW9uSWRlbnRpZmllcnMgcmVzdWx0
OworICAgIGZvciAoYXV0byBwYXJ0IDogU3RyaW5nVmlldyhzdHJpbmdJZGVudGlmaWVyKS5zcGxp
dCgnOicpKSB7CisgICAgICAgIGF1dG8gbnVtYmVyID0gcGFydC50b1VJbnQ2NFN0cmljdCgpOwor
ICAgICAgICBpZiAoIW51bWJlciB8fCAocmVzdWx0LmZyYW1lSUQgJiYgcmVzdWx0Lml0ZW1JRCkp
CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBpZiAoIXJlc3VsdC5m
cmFtZUlEKQorICAgICAgICAgICAgcmVzdWx0LmZyYW1lSUQgPSBXZWJDb3JlOjpmcmFtZUlkZW50
aWZpZXJGcm9tSUQoKm51bWJlcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdC5p
dGVtSUQgPSBtYWtlT2JqZWN0SWRlbnRpZmllcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjo6SXRlbUlkZW50aWZpZXJUeXBlPigqbnVtYmVyKTsKKyAgICB9CisgICAgaWYgKCFy
ZXN1bHQuZnJhbWVJRCB8fCAhcmVzdWx0Lml0ZW1JRCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCistICh2b2lkKV9zdGFydFRleHRNYW5pcHVs
YXRpb25zV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKCkpY29tcGxldGlvbkhhbmRsZXIK
K3sKKyAgICBpZiAoIV90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoIV9wYWdlKQorICAgICAgICByZXR1cm47CisgICAgX3BhZ2UtPnN0YXJ0VGV4dE1h
bmlwdWxhdGlvbnMoW3dlYWtTZWxmID0gV2Vha09iakNQdHI8V0tXZWJWaWV3PihzZWxmKV0gKFdl
YkNvcmU6OkZyYW1lSWRlbnRpZmllciBmcmFtZUlkZW50aWZpZXIsCisgICAgICAgIFdlYkNvcmU6
OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRlbnRpZmllciBpdGVtSWRlbnRpZmll
ciwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5p
cHVsYXRpb25Ub2tlbj4mIHRva2VucykgeworICAgICAgICBpZiAoIXdlYWtTZWxmKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gcmV0YWluZWRTZWxmID0gd2Vha1NlbGYuZ2V0
KCk7CisgICAgICAgIGF1dG8gZGVsZWdhdGUgPSByZXRhaW5lZFNlbGYuZ2V0KCkuX3RleHRNYW5p
cHVsYXRpb25EZWxlZ2F0ZTsKKyAgICAgICAgaWYgKCFkZWxlZ2F0ZSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBOU011dGFibGVBcnJheSAqd2tUb2tlbnMgPSBbTlNNdXRhYmxlQXJy
YXkgYXJyYXlXaXRoQ2FwYWNpdHk6IHRva2Vucy5zaXplKCldOworICAgICAgICBmb3IgKGF1dG8m
IHRva2VuIDogdG9rZW5zKSB7CisgICAgICAgICAgICBhdXRvIHdrVG9rZW4gPSBhZG9wdE5TKFtb
X1dLVGV4dE1hbmlwdWxhdGlvblRva2VuIGFsbG9jXSBpbml0XSk7CisgICAgICAgICAgICB3a1Rv
a2VuLmdldCgpLmlkZW50aWZpZXIgPSBTdHJpbmc6Om51bWJlcih0b2tlbi5pZGVudGlmaWVyLnRv
VUludDY0KCkpOworICAgICAgICAgICAgd2tUb2tlbi5nZXQoKS5jb250ZW50ID0gdG9rZW4uY29u
dGVudDsKKyAgICAgICAgICAgIFt3a1Rva2VucyBhZGRPYmplY3Q6d2tUb2tlbi5nZXQoKV07Cisg
ICAgICAgIH0KKworICAgICAgICBhdXRvIGlkZW50aWZpZXIgPSBzdHJpbmdJZGVudGlmaWVyRm9y
RnJhbWVBbmRJdGVtKGZyYW1lSWRlbnRpZmllciwgaXRlbUlkZW50aWZpZXIpOworICAgICAgICBh
dXRvIGl0ZW0gPSBhZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gYWxsb2NdIGluaXRX
aXRoSWRlbnRpZmllcjppZGVudGlmaWVyIHRva2Vuczp3a1Rva2Vuc10pOworICAgICAgICBbZGVs
ZWdhdGUgX3dlYlZpZXc6cmV0YWluZWRTZWxmLmdldCgpIGRpZEZpbmRJdGVtOml0ZW0uZ2V0KCkg
Zm9yRnJhbWU6d3JhcHBlcihBUEk6OkZyYW1lSGFuZGxlOjpjcmVhdGUoZnJhbWVJZGVudGlmaWVy
KSldOworICAgIH0sIFtjYXB0dXJlZENvbXBsZXRpb25CbG9jayA9IG1ha2VCbG9ja1B0cihjb21w
bGV0aW9uSGFuZGxlcildICgpIHsKKyAgICAgICAgY2FwdHVyZWRDb21wbGV0aW9uQmxvY2soKTsK
KyAgICB9KTsKK30KKworLSAodm9pZClfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0
TWFuaXB1bGF0aW9uSXRlbSAqKWl0ZW0gY29tcGxldGlvbjoodm9pZCheKShCT09MIHN1Y2Nlc3Mp
KWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgaWYgKCFfcGFnZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYXV0byByZXN1bHQgPSBmcmFtZUFuZEl0ZW1JZGVudGlmaWVyc0Zyb21TdHJpbmcoU3Ry
aW5nIHsgaXRlbS5pZGVudGlmaWVyIH0pOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZl
Y3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9r
ZW4+IHRva2VuczsKKyAgICBmb3IgKF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiAqd2tUb2tlbiBp
biBpdGVtLnRva2VucykgeworICAgICAgICBhdXRvIHRva2VuSUQgPSBtYWtlT2JqZWN0SWRlbnRp
ZmllcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6VG9rZW5JZGVudGlmaWVy
VHlwZT4oU3RyaW5nKHdrVG9rZW4uaWRlbnRpZmllcikudG9VSW50NjQoKSk7CisgICAgICAgIHRv
a2Vucy5hcHBlbmQoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxh
dGlvblRva2VuIHsgdG9rZW5JRCwgd2tUb2tlbi5jb250ZW50IH0pOworICAgIH0KKworICAgIF9w
YWdlLT5jb21wbGV0ZVRleHRNYW5pcHVsYXRpb24ocmVzdWx0LT5mcmFtZUlELCByZXN1bHQtPml0
ZW1JRCwgdG9rZW5zLCBbY2FwdHVyZWRDb21wbGV0aW9uQmxvY2sgPSBtYWtlQmxvY2tQdHIoY29t
cGxldGlvbkhhbmRsZXIpXSAoYm9vbCBzdWNjZXNzKSB7CisgICAgICAgIGNhcHR1cmVkQ29tcGxl
dGlvbkJsb2NrKHN1Y2Nlc3MpOworICAgIH0pOworfQorCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKIAogLSAoQ0dSZWN0KV9kcmFnQ2FyZXRSZWN0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgJKHJldmlzaW9uIDI1
MTQ5NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2
YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw2ICsxMTMsNyBAQCB0eXBlZGVmIE5TX09QVElP
TlMoTlNVSW50ZWdlciwgX1dLUmVjdEVkCiBAY2xhc3MgX1dLU2FmZUJyb3dzaW5nV2FybmluZzsK
IEBjbGFzcyBfV0tTZXNzaW9uU3RhdGU7CiBAY2xhc3MgX1dLVGV4dElucHV0Q29udGV4dDsKK0Bj
bGFzcyBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbTsKIEBjbGFzcyBfV0tUaHVtYm5haWxWaWV3Owog
QGNsYXNzIF9XS1dlYnNpdGVQb2xpY2llczsKIEBjbGFzcyBfV0tXZWJWaWV3UHJpbnRGb3JtYXR0
ZXI7CkBAIC0xMjAsOSArMTIxLDEwIEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBf
V0tSZWN0RWQKIEBwcm90b2NvbCBXS0hpc3RvcnlEZWxlZ2F0ZVByaXZhdGU7CiBAcHJvdG9jb2wg
X1dLRGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZTsKIEBwcm90b2NvbCBfV0tGaW5kRGVsZWdhdGU7
CitAcHJvdG9jb2wgX1dLRnVsbHNjcmVlbkRlbGVnYXRlOwogQHByb3RvY29sIF9XS0ljb25Mb2Fk
aW5nRGVsZWdhdGU7CiBAcHJvdG9jb2wgX1dLSW5wdXREZWxlZ2F0ZTsKLUBwcm90b2NvbCBfV0tG
dWxsc2NyZWVuRGVsZWdhdGU7CitAcHJvdG9jb2wgX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRl
OwogCiBAaW50ZXJmYWNlIFdLV2ViVmlldyAoV0tQcml2YXRlKQogCkBAIC01NzUsNiArNTc3LDEw
IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tSZWN0RWQKIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSkgX1dLSW5zcGVjdG9yICpfaW5zcGVjdG9yIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpIF9XS0ZyYW1lSGFuZGxlICpfbWFpbkZyYW1lIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTQuNCksIGlvcygxMi4yKSk7CiAKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrLCBz
ZXR0ZXI9X3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTopIGlkIDxfV0tUZXh0TWFuaXB1bGF0
aW9uRGVsZWdhdGU+IF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3N0YXJ0VGV4dE1h
bmlwdWxhdGlvbnNXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoKSljb21wbGV0aW9uSGFu
ZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkp
OworLSAodm9pZClfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9u
SXRlbSAqKWl0ZW0gY29tcGxldGlvbjoodm9pZCheKShCT09MIHN1Y2Nlc3MpKWNvbXBsZXRpb25I
YW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJB
KSk7CisKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFNjcm9sbGluZ1VwZGF0ZXNE
aXNhYmxlZEZvclRlc3Rpbmc6KSBCT09MIF9zY3JvbGxpbmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0
aW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7
CiAKIC0gKHZvaWQpX3Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nOwpJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25E
ZWxlZ2F0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFdl
YktpdC9XS0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+
CisKK0BjbGFzcyBfV0tGcmFtZUhhbmRsZTsKK0BjbGFzcyBfV0tUZXh0TWFuaXB1bGF0aW9uSXRl
bTsKKworQHByb3RvY29sIF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSA8TlNPYmplY3Q+CisK
K0BvcHRpb25hbAorCistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZEZp
bmRJdGVtOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWl0ZW0gZm9yRnJhbWU6KF9XS0ZyYW1l
SGFuZGxlICopZnJhbWU7CisKK0BlbmQKKwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25JdGVtLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25JdGVtLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRN
YW5pcHVsYXRpb25JdGVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+CisKK0BjbGFzcyBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW47CisK
K1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQor
QGludGVyZmFjZSBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSA6IE5TT2JqZWN0CisKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aElkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciB0b2tlbnM6
KE5TQXJyYXk8X1dLVGV4dE1hbmlwdWxhdGlvblRva2VuICo+ICopdG9rZW5zOworCitAcHJvcGVy
dHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TU3RyaW5nICppZGVudGlmaWVyOworQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU0FycmF5PF9XS1RleHRNYW5pcHVs
YXRpb25Ub2tlbiAqPiAqdG9rZW5zOworCitAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0ubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25JdGVt
Lm1tCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIl9XS1RleHRNYW5p
cHVsYXRpb25JdGVtLmgiCisKKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworQGltcGxlbWVu
dGF0aW9uIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtIHsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+
IF9pZGVudGlmaWVyOworICAgIFJldGFpblB0cjxOU0FycmF5PF9XS1RleHRNYW5pcHVsYXRpb25U
b2tlbiAqPj4gX3Rva2VuczsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSWRlbnRpZmll
cjooTlNTdHJpbmcgKilpZGVudGlmaWVyIHRva2VuczooTlNBcnJheTxfV0tUZXh0TWFuaXB1bGF0
aW9uVG9rZW4gKj4gKil0b2tlbnMKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKKyAg
ICBfdG9rZW5zID0gdG9rZW5zOworICAgIHJldHVybiBzZWxmOworfQorCistIChOU1N0cmluZyAq
KWlkZW50aWZpZXIKK3sKKyAgICByZXR1cm4gX2lkZW50aWZpZXIuZ2V0KCk7Cit9CisKKy0gKE5T
QXJyYXk8X1dLVGV4dE1hbmlwdWxhdGlvblRva2VuICo+ICopdG9rZW5zCit7CisgICAgcmV0dXJu
IF90b2tlbnMuZ2V0KCk7Cit9CisKK0BlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Rl
eHRNYW5pcHVsYXRpb25Ub2tlbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPEZv
dW5kYXRpb24vRm91bmRhdGlvbi5oPgorCitXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgX1dLVGV4dE1hbmlwdWxhdGlvblRv
a2VuIDogTlNPYmplY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpp
ZGVudGlmaWVyOworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIE5TU3RyaW5nICpjb250ZW50
OworCitAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4
dE1hbmlwdWxhdGlvblRva2VuLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4ubW0JKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25U
b2tlbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIl9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oIgor
CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK0BpbXBsZW1lbnRhdGlvbiBfV0tUZXh0TWFu
aXB1bGF0aW9uVG9rZW4geworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdAoreworICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBz
ZWxmOworfQorCitAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI1MTQ5NCkKKysrIFNvdXJjZS9XZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzMzMsNiAr
MTMzMywxMSBAQAogCQk5OUU3MTRDNTFDMTI0QTA0MDA2NjVCM0EgLyogX1dLQXV0b21hdGlvbkRl
bGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
OUU3MTRDMTFDMTI0OUU2MDA2NjVCM0EgLyogX1dLQXV0b21hdGlvbkRlbGVnYXRlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTlFNzE4OUEyMUY3
OUQ5RTAwNTVFOTc1IC8qIF9XS1RvdWNoRXZlbnRHZW5lcmF0b3IubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OUU3MTg5NjIxRjc5RDlEMDA1NUU5NzUg
LyogX1dLVG91Y2hFdmVudEdlbmVyYXRvci5tbSAqLzsgfTsKIAkJOTlFNzE4OUMyMUY3OUQ5RTAw
NTVFOTc1IC8qIF9XS1RvdWNoRXZlbnRHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5RTcxODk4MjFGNzlEOUUwMDU1RTk3NSAvKiBfV0tU
b3VjaEV2ZW50R2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJOUIwMkUwQ0IyMzVFQjk1MzAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVs
YXRpb25EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOUIwMkUwQzkyMzVFQjYyRDAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25EZWxl
Z2F0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTlCMDJFMENDMjM1RUI5NTcwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwMkUwQ0EyMzVF
Qjg4NDAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOUIwMkUwQ0YyMzVFQkIxNDAwNDA0
NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMDJFMENFMjM1RUJCMTQwMDQwNDRCMiAvKiBfV0tU
ZXh0TWFuaXB1bGF0aW9uVG9rZW4ubW0gKi87IH07CisJCTlCMDJFMEQxMjM1RUJDQ0EwMDQwNDRC
MiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMDJFMEQwMjM1RUJDQ0EwMDQwNDRCMiAvKiBfV0tUZXh0
TWFuaXB1bGF0aW9uSXRlbS5tbSAqLzsgfTsKKwkJOUIwMkUwRDcyMzVGQzk0RjAwNDA0NEIyIC8q
IF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOUIwMkUwQ0QyMzVFQjk2NzAwNDA0NEIyIC8qIF9XS1RleHRNYW5p
cHVsYXRpb25Ub2tlbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTlGQjVGMzk1MTY5RTZBODAwMDJDMjVCRiAvKiBXS0NvbnRleHRQcml2YXRlTWFj
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5RkI1RjM5
MzE2OUU2QTgwMDAyQzI1QkYgLyogV0tDb250ZXh0UHJpdmF0ZU1hYy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUExMDJBNzA4MUVDMEVFRTkwMEQ4
MUQ4MiAvKiBjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIgRVNSLnBsdWdpbi5zYiBpbiBDb3B5
IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3QTVFMzk0OTFENUJEOEE3MDBCNEI3Q0UgLyogY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxh
eWVyIEVTUi5wbHVnaW4uc2IgKi87IH07CiAJCUExMDQ2RUExMjA3OTI2MzEwMEYwQzVEOCAvKiBX
S1BERlZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEExMDQ2RTlGMjA3OTI2MzEwMEYwQzVEOCAvKiBXS1BERlZpZXcuaCAqLzsgfTsKQEAgLTE3Mjgs
OCArMTczMyw2IEBACiAJCQljb21waWxlclNwZWMgPSBjb20uYXBwbGUuY29tcGlsZXJzLnByb3h5
LnNjcmlwdDsKIAkJCWZpbGVQYXR0ZXJucyA9ICIqLmgiOwogCQkJZmlsZVR5cGUgPSBwYXR0ZXJu
LnByb3h5OwotCQkJaW5wdXRGaWxlcyA9ICgKLQkJCSk7CiAJCQlpc0VkaXRhYmxlID0gMTsKIAkJ
CW91dHB1dEZpbGVzID0gKAogCQkJCSIkKEhFQURFUl9PVVRQVVRfRElSKS8kKElOUFVUX0ZJTEVf
TkFNRSkiLApAQCAtNDA0Niw2ICs0MDQ5LDExIEBACiAJCTk5RTcxODk2MjFGNzlEOUQwMDU1RTk3
NSAvKiBfV0tUb3VjaEV2ZW50R2VuZXJhdG9yLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gX1dLVG91Y2hFdmVudEdlbmVyYXRvci5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTlFNzE4OTgyMUY3OUQ5RTAwNTVFOTc1IC8qIF9XS1RvdWNoRXZlbnRH
ZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLVG91Y2hFdmVu
dEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OUY2NDJEMjFGQUJF
Mzc4MDA5NjIxRTkgLyogQ29vcmRpbmF0ZVN5c3RlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDb29yZGluYXRlU3lzdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTlCMDJFMEM5MjM1RUI2MkQwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdh
dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCMDJFMENBMjM1RUI4ODQwMDQwNDRCMiAvKiBfV0tU
ZXh0TWFuaXB1bGF0aW9uSXRlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tUZXh0TWFuaXB1bGF0aW9u
SXRlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjAyRTBDRDIzNUVCOTY3MDA0
MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1Rl
eHRNYW5pcHVsYXRpb25Ub2tlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjAy
RTBDRTIzNUVCQjE0MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk5QjAyRTBEMDIzNUVCQ0NBMDA0MDQ0QjIgLyogX1dLVGV4dE1h
bmlwdWxhdGlvbkl0ZW0ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBfV0tUZXh0TWFuaXB1bGF0
aW9uSXRlbS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJDNTlENkMxRUZDQ0NC
NjAwMUU4RDA5IC8qIENhbGxiYWNrSUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ2FsbGJhY2tJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkM1OUQ2RDFF
RkNEQzZEMDAxRThEMDkgLyogT3B0aW9uYWxDYWxsYmFja0lELmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE9wdGlvbmFsQ2FsbGJhY2tJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5RjU0Rjg4RTE2NDg4RTg3MDA3REY4MUEgLyogQXV4aWxpYXJ5UHJvY2Vzc01h
Yy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEF1eGlsaWFyeVBy
b2Nlc3NNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MzQ1LDYgKzYzNTMs
MTEgQEAKIAkJCQkyREU5QjEzODIyMzFGNjFDMDA1Mjg3QjcgLyogX1dLVGV4dElucHV0Q29udGV4
dC5oICovLAogCQkJCTJERTlCMTM3MjIzMUY2MUMwMDUyODdCNyAvKiBfV0tUZXh0SW5wdXRDb250
ZXh0Lm1tICovLAogCQkJCTJERTlCMTNCMjIzMUY3N0MwMDUyODdCNyAvKiBfV0tUZXh0SW5wdXRD
b250ZXh0SW50ZXJuYWwuaCAqLywKKwkJCQk5QjAyRTBDOTIzNUVCNjJEMDA0MDQ0QjIgLyogX1dL
VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmggKi8sCisJCQkJOUIwMkUwQ0EyMzVFQjg4NDAwNDA0
NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtLmggKi8sCisJCQkJOUIwMkUwRDAyMzVFQkND
QTAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtLm1tICovLAorCQkJCTlCMDJFMENE
MjM1RUI5NjcwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaCAqLywKKwkJCQk5
QjAyRTBDRTIzNUVCQjE0MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLm1tICov
LAogCQkJCTJENkIzNzE5MThBOTY3QUQwMDQyQUU4MCAvKiBfV0tUaHVtYm5haWxWaWV3LmggKi8s
CiAJCQkJMkQ2QjM3MUExOEE5NjdBRDAwNDJBRTgwIC8qIF9XS1RodW1ibmFpbFZpZXcubW0gKi8s
CiAJCQkJMkRBQ0U2NEQxOEFEQkZGMDAwRTRDQTc2IC8qIF9XS1RodW1ibmFpbFZpZXdJbnRlcm5h
bC5oICovLApAQCAtOTMxMCw2ICs5MzIzLDkgQEAKIAkJCQkxQTAwMkQ0MzE5NkIzMzcwMDBCOUFE
NDQgLyogX1dLU2Vzc2lvblN0YXRlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERTlC
MTNBMjIzMUY2MUMwMDUyODdCNyAvKiBfV0tUZXh0SW5wdXRDb250ZXh0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkyREU5QjEzQzIyMzFGNzdDMDA1Mjg3QjcgLyogX1dLVGV4dElucHV0Q29udGV4dElu
dGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQk5QjAyRTBDQjIzNUVCOTUzMDA0MDQ0QjIgLyog
X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQk5QjAyRTBD
QzIzNUVCOTU3MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0uaCBpbiBIZWFkZXJz
ICovLAorCQkJCTlCMDJFMEQ3MjM1RkM5NEYwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9u
VG9rZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTJENkIzNzFCMThBOTY3QUQwMDQyQUU4MCAvKiBf
V0tUaHVtYm5haWxWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkyREFDRTY0RTE4QURCRkYwMDBF
NENBNzYgLyogX1dLVGh1bWJuYWlsVmlld0ludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
OUU3MTg5QzIxRjc5RDlFMDA1NUU5NzUgLyogX1dLVG91Y2hFdmVudEdlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCkBAIC0xMTIyNSw2ICsxMTI0MSw4IEBACiAJCQlidWlsZEFjdGlvbk1hc2sgPSAy
MTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJCQkJNUNCRDU5NUMyMjgwRURGNDAwMkIyMkFBIC8q
IF9XS0N1c3RvbUhlYWRlckZpZWxkcy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTlCMDJFMEQxMjM1
RUJDQ0EwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5tbSBpbiBTb3VyY2VzICov
LAorCQkJCTlCMDJFMENGMjM1RUJCMTQwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uVG9r
ZW4ubW0gaW4gU291cmNlcyAqLywKIAkJCQk5OUU3MTg5QTIxRjc5RDlFMDA1NUU5NzUgLyogX1dL
VG91Y2hFdmVudEdlbmVyYXRvci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJEOTJBNzg0MjEyQjZB
QjEwMEY0OTNGRCAvKiBBY3Rpdml0eUFzc2VydGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQky
RDkyQTc3QjIxMkI2QTcxMDBGNDkzRkQgLyogQXJndW1lbnRDb2RlcnMuY3BwIGluIFNvdXJjZXMg
Ki8sCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cAkocmV2aXNpb24gMjUxNDk0KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4MjksNiArNjgyOSw1NiBAQCBPcHRpb25h
bDxXZWJDb3JlOjpFbGVtZW50Q29udGV4dD4gV2ViUGFnCiAgICAgcmV0dXJuIFdlYkNvcmU6OkVs
ZW1lbnRDb250ZXh0IHsgZWxlbWVudFJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMoZWxlbWVudCwg
KmZyYW1lKSwgbV9pZGVudGlmaWVyLCBkb2N1bWVudC5pZGVudGlmaWVyKCksIGRvY3VtZW50Lmlk
ZW50aWZpZXJGb3JFbGVtZW50KGVsZW1lbnQpIH07CiB9CiAKK3ZvaWQgV2ViUGFnZTo6c3RhcnRU
ZXh0TWFuaXB1bGF0aW9ucyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8g
bWFpbkRvY3VtZW50ID0gbWFrZVJlZlB0cihtX3BhZ2UtPm1haW5GcmFtZSgpLmRvY3VtZW50KCkp
OworICAgIGlmICghbWFpbkRvY3VtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBtYWluRG9j
dW1lbnQtPnRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyKCkuc3RhcnRPYnNlcnZpbmdQYXJhZ3Jh
cGhzKFt3ZWJQYWdlID0gbWFrZVdlYWtQdHIoKnRoaXMpXSAoV2ViQ29yZTo6RG9jdW1lbnQmIGRv
Y3VtZW50LAorICAgICAgICBXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRl
bUlkZW50aWZpZXIgaXRlbUlkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFu
aXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+JiB0b2tlbnMpIHsKKyAgICAg
ICAgYXV0byogZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgpOworICAgICAgICBpZiAoIXdlYlBhZ2Ug
fHwgIWZyYW1lIHx8IHdlYlBhZ2UtPm1haW5GcmFtZSgpICE9IGZyYW1lKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGF1dG8qIHdlYkZyYW1lID0gV2ViRnJhbWU6OmZyb21Db3JlRnJh
bWUoKmZyYW1lKTsKKyAgICAgICAgaWYgKCF3ZWJGcmFtZSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmRU
ZXh0TWFuaXB1bGF0aW9uSXRlbSh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBpdGVtSWRlbnRpZmllciwg
dG9rZW5zKSk7CisgICAgfSk7CisgICAgLy8gRm9yIG5vdywgd2UgYXNzdW1lIHN0YXJ0T2JzZXJ2
aW5nUGFyYWdyYXBocyBmaW5kIGFsbCBwYXJhZ3JhcGhzIHN5bmNocm9ub3VzbHkgYXQgb25jZS4K
KyAgICBjb21wbGV0aW9uSGFuZGxlcigpOworfQorCit2b2lkIFdlYlBhZ2U6OmNvbXBsZXRlVGV4
dE1hbmlwdWxhdGlvbihXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgV2ViQ29yZTo6
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1JRCwKKyAgICBj
b25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxh
dGlvblRva2VuPiYgdG9rZW5zLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQoreworICAgIGF1dG8gY29tcGxldGVNYW5pcHVsYXRpb24gPSBbJl0gKCkg
eworICAgICAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBhdXRvJiBtYWluRnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpOworICAgICAgICBhdXRv
KiB3ZWJGcmFtZSA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKG1haW5GcmFtZSk7CisgICAgICAg
IGlmICghd2ViRnJhbWUgfHwgd2ViRnJhbWUtPmZyYW1lSUQoKSAhPSBmcmFtZUlEKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1dG8gbWFpbkRvY3VtZW50ID0gbWFrZVJl
ZlB0cihtYWluRnJhbWUuZG9jdW1lbnQoKSk7CisgICAgICAgIGlmICghbWFpbkRvY3VtZW50KQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1dG8qIGNvbnRyb2xsZXIgPSBt
YWluRG9jdW1lbnQtPnRleHRNYW5pcHVsYXRpb25Db250cm9sbGVySWZFeGlzdHMoKTsKKyAgICAg
ICAgaWYgKCFjb250cm9sbGVyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IHJldHVybiBjb250cm9sbGVyLT5jb21wbGV0ZU1hbmlwdWxhdGlvbihpdGVtSUQsIHRva2Vucyk7
CisgICAgfTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihjb21wbGV0ZU1hbmlwdWxhdGlvbigpKTsK
K30KKwogUEFMOjpTZXNzaW9uSUQgV2ViUGFnZTo6c2Vzc2lvbklEKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc2Vzc2lvbklEKCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lvbiAyNTE0OTQpCisr
KyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTczLDYgKzczLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1BvaW50ZXJJRC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvU2hhcmVEYXRhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlckFjdGl2aXR5Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Vc2VyQ29udGVudFR5cGVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Vc2VySW50
ZXJmYWNlTGF5b3V0RGlyZWN0aW9uLmg+CkBAIC0xMTk2LDYgKzExOTcsMTAgQEAgcHVibGljOgog
ICAgIFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnRGb3JDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkVs
ZW1lbnRDb250ZXh0JikgY29uc3Q7CiAgICAgT3B0aW9uYWw8V2ViQ29yZTo6RWxlbWVudENvbnRl
eHQ+IGNvbnRleHRGb3JFbGVtZW50KFdlYkNvcmU6OkVsZW1lbnQmKSBjb25zdDsKIAorICAgIHZv
aWQgc3RhcnRUZXh0TWFuaXB1bGF0aW9ucyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwor
ICAgIHZvaWQgY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmll
ciwgV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyLAor
ICAgICAgICBjb25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6
Ok1hbmlwdWxhdGlvblRva2VuPiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwor
CiAjaWYgRU5BQkxFKEFQUExFX1BBWSkKICAgICBXZWJQYXltZW50Q29vcmRpbmF0b3IqIHBheW1l
bnRDb29yZGluYXRvcigpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI1MTQ5NCkK
KysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4J
KHdvcmtpbmcgY29weSkKQEAgLTU4Miw0ICs1ODIsNyBAQCBHZW5lcmF0ZVN5bnRoZXRpY0VkaXRp
bmdDb21tYW5kKGVudW06dWluCiAgICAgU2VuZE1lc3NhZ2VUb1dlYkV4dGVuc2lvbihzdHJ1Y3Qg
V2ViS2l0OjpVc2VyTWVzc2FnZSB1c2VyTWVzc2FnZSkKICAgICBTZW5kTWVzc2FnZVRvV2ViRXh0
ZW5zaW9uV2l0aFJlcGx5KHN0cnVjdCBXZWJLaXQ6OlVzZXJNZXNzYWdlIHVzZXJNZXNzYWdlKSAt
PiAoc3RydWN0IFdlYktpdDo6VXNlck1lc3NhZ2UgcmVwbHlNZXNzYWdlKSBBc3luYwogI2VuZGlm
CisKKyAgICBTdGFydFRleHRNYW5pcHVsYXRpb25zKCkgLT4gKCkgQXN5bmMKKyAgICBDb21wbGV0
ZVRleHRNYW5pcHVsYXRpb24oV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIFdlYkNv
cmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRlbnRpZmllciBpdGVtSWRlbnRp
ZmllciwgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVs
YXRpb25Ub2tlbj4gdG9rZW5zKSAtPiAoYm9vbCBzdWNjZXNzKSBBc3luYwogfQpJbmRleDogVG9v
bHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjUx
NTAwKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTktMTAtMjMgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
QWRkIGEgbWVjaGFuaXNtIHRvIGZpbmQgYW5kIG1hbmlwdWxhdGUgdGV4dCBieSBwYXJhZ3JhcGhz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDMyODYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBi
YXNpYyBBUEkgdGVzdHMgZm9yIHRoZSBuZXcgU1BJLgorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tOiBBZGRlZC4K
KyAgICAgICAgKC1bVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGluaXRdKToKKyAgICAgICAgKC1b
VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIF93ZWJWaWV3OmRpZEZpbmRJdGVtOmZvckZyYW1lOl0p
OgorICAgICAgICAoLVtUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgaXRlbXNdKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OmNyZWF0ZUl0ZW0pOgorCiAyMDE5LTEwLTIxICBKaWV3ZW4gVGFuICA8
amlld2VuX3RhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkF1dGhuXSBXYXJuIHVzZXJzIHdo
ZW4gbXVsdGlwbGUgTkZDIHRhZ3MgcHJlc2VudApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDI1MTQ5NCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03MzgsNiArNzM4LDcg
QEAKIAkJOTk4NEZBQ0MxQ0ZGQUY2MDAwOEQxOThDIC8qIFdLV2ViVmlld1RleHRJbnB1dC5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5ODRGQUNBMUNG
RkFFRUUwMDhEMTk4QyAvKiBXS1dlYlZpZXdUZXh0SW5wdXQubW0gKi87IH07CiAJCTk5ODRGQUNF
MUNGRkIwOTAwMDhEMTk4QyAvKiBlZGl0YWJsZS1ib2R5Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTk4NEZBQ0QxQ0ZGQjAzODAwOEQx
OThDIC8qIGVkaXRhYmxlLWJvZHkuaHRtbCAqLzsgfTsKIAkJOTk5OTEwOEIxRjM5M0M5NjAwOEFE
NDU1IC8qIENvcHlpbmcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5OTk5MTA4QTFGMzkzQzhCMDA4QUQ0NTUgLyogQ29weWluZy5tbSAqLzsgfTsKKwkJ
OUIwMkUwRDYyMzVGQTQ3RDAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRpb24ubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAyRTBENTIzNUZBNDdEMDA0
MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbi5tbSAqLzsgfTsKIAkJOUIwNzg2QTUxQzU4ODVDMzAw
RDE1OUUzIC8qIEluamVjdGVkQnVuZGxlTWFrZUFsbFNoYWRvd1Jvb3RzT3Blbl9CdW5kbGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwNzg2QTQx
QzU4ODVDMzAwRDE1OUUzIC8qIEluamVjdGVkQnVuZGxlTWFrZUFsbFNoYWRvd1Jvb3RzT3Blbl9C
dW5kbGUuY3BwICovOyB9OwogCQk5QjE5Q0RBMDFGMDZERkUzMDAwNTQ4REQgLyogTmV0d29ya1By
b2Nlc3NDcmFzaFdpdGhQZW5kaW5nQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMTlDRDlFMUYwNkRGRTMwMDA1NDhERCAvKiBOZXR3
b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tICovOyB9OwogCQk5QjFGNkY3
ODFGOTA1NTg0MDBCNTU3NDQgLyogQ29weUhUTUwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjEwNTY0MTFGOTA0NUM3MDBENTU4M0YgLyogQ29weUhU
TUwubW0gKi87IH07CkBAIC0yMTI4LDYgKzIxMjksNyBAQAogCQk5OTg0RkFDQTFDRkZBRUVFMDA4
RDE5OEMgLyogV0tXZWJWaWV3VGV4dElucHV0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV0tXZWJWaWV3VGV4dElucHV0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5OTg0RkFDRDFDRkZCMDM4MDA4RDE5OEMgLyogZWRpdGFibGUtYm9keS5odG1s
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gImVkaXRhYmxlLWJvZHkuaHRtbCI7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5OTkxMDhBMUYzOTNDOEIwMDhBRDQ1NSAvKiBDb3B5
aW5nLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29weWluZy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUIwMkUwRDUyMzVGQTQ3RDAwNDA0NEIy
IC8qIFRleHRNYW5pcHVsYXRpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXh0TWFuaXB1
bGF0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjA3ODZBMjFDNTg4MzBG
MDBEMTU5RTMgLyogSW5qZWN0ZWRCdW5kbGVNYWtlQWxsU2hhZG93Um9vdHNPcGVuLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxlTWFrZUFsbFNo
YWRvd1Jvb3RzT3Blbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMDc4NkE0
MUM1ODg1QzMwMEQxNTlFMyAvKiBJbmplY3RlZEJ1bmRsZU1ha2VBbGxTaGFkb3dSb290c09wZW5f
QnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVk
QnVuZGxlTWFrZUFsbFNoYWRvd1Jvb3RzT3Blbl9CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5QjEwNTY0MTFGOTA0NUM3MDBENTU4M0YgLyogQ29weUhUTUwubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBDb3B5SFRNTC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTI5MzksNiArMjk0MSw3IEBACiAJCQkJNTc3NEFBNjcyMUZCQkY3ODAwQUYyQTFCIC8q
IFRlc3RTT0F1dGhvcml6YXRpb24ubW0gKi8sCiAJCQkJRjRDRDc0QzcyMEZEQjQ5NjAwREUzNzk0
IC8qIFRlc3RVUkxTY2hlbWVIYW5kbGVyLmggKi8sCiAJCQkJRjRDRDc0QzgyMEZEQjQ5NjAwREUz
Nzk0IC8qIFRlc3RVUkxTY2hlbWVIYW5kbGVyLm1tICovLAorCQkJCTlCMDJFMEQ1MjM1RkE0N0Qw
MDQwNDRCMiAvKiBUZXh0TWFuaXB1bGF0aW9uLm1tICovLAogCQkJCTVDMTZGOEZCMjMwQzk0MkIw
MDc0QzRBOCAvKiBUZXh0U2l6ZS5tbSAqLywKIAkJCQlDMjJGQTMyQTIyOEY4NzA4MDA5RDc5ODgg
LyogVGV4dFdpZHRoLm1tICovLAogCQkJCTVDNzNBODFBMjMyMzA1OTgwMERFQTg1QSAvKiBUTFNE
ZXByZWNhdGlvbi5tbSAqLywKQEAgLTQ4MjIsNiArNDgyNSw3IEBACiAJCQkJRjQ1MDMzRjUyMDZC
RUM5NTAwOTM1MUNFIC8qIFRleHRBdXRvc2l6aW5nQm9vc3QubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk5M0U2MTkzQjFGOTMxQjNBMDBBRjI0NUUgLyogVGV4dENvZGVjLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUNFMzUyNEY5MUIxNDQxQzQwMDI4QTdDNSAvKiBUZXh0RmllbGREaWRCZWdpbkFuZEVu
ZEVkaXRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOUIwMkUwRDYyMzVGQTQ3RDAwNDA0NEIy
IC8qIFRleHRNYW5pcHVsYXRpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQk1QzE2RjhGQzIzMEM5
NDM3MDA3NEM0QTggLyogVGV4dFNpemUubW0gaW4gU291cmNlcyAqLywKIAkJCQlDMjJGQTMyQjIy
OEY4NzA4MDA5RDc5ODggLyogVGV4dFdpZHRoLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdF
REQxQTQxMUE5MjAwNDQ3QzRDIC8qIFRpbWVSYW5nZXMuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4
OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24u
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9U
ZXh0TWFuaXB1bGF0aW9uLm1tCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDI3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2ltcG9y
dCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBvcnQgIlRlc3QuaCIKKyNpbXBvcnQgIlRlc3RX
S1dlYlZpZXcuaCIKKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CisjaW1wb3J0
IDxXZWJLaXQvX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmg+CisjaW1wb3J0IDxXZWJLaXQv
X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0uaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tUZXh0TWFuaXB1
bGF0aW9uVG9rZW4uaD4KKyNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgorI2ltcG9ydCA8d3RmL1Jl
dGFpblB0ci5oPgorCitzdGF0aWMgYm9vbCBkb25lID0gZmFsc2U7CisKK0BpbnRlcmZhY2UgVGV4
dE1hbmlwdWxhdGlvbkRlbGVnYXRlIDogTlNPYmplY3QgPF9XS1RleHRNYW5pcHVsYXRpb25EZWxl
Z2F0ZT4KKworLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWRGaW5kSXRl
bTooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVtIGZvckZyYW1lOihfV0tGcmFtZUhhbmRs
ZSAqKWZyYW1lOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TQXJy
YXk8X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKj4gKml0ZW1zOworCitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgeworICAgIFJldGFpblB0cjxOU011dGFi
bGVBcnJheT4gX2l0ZW1zOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdAoreworICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworICAgIF9pdGVtcyA9
IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOworICAgIHJldHVybiBzZWxm
OworfQorCistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZEZpbmRJdGVt
OihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWl0ZW0gZm9yRnJhbWU6KF9XS0ZyYW1lSGFuZGxl
ICopZnJhbWUKK3sKKyAgICBbX2l0ZW1zLmdldCgpIGFkZE9iamVjdDppdGVtXTsKK30KKworLSAo
TlNBcnJheTxfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqPiAqKWl0ZW1zCit7CisgICAgcmV0dXJu
IF9pdGVtcy5hdXRvcmVsZWFzZSgpOworfQorCitAZW5kCisKK25hbWVzcGFjZSBUZXN0V2ViS2l0
QVBJIHsKKworVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBTdGFydFRleHRNYW5pcHVsYXRpb25GaW5k
U2ltcGxlUGFyYWdyYXBocykKK3sKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1RleHRN
YW5pcHVsYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gd2ViVmlldyA9IGFk
b3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwg
MCwgNDAwLCA0MDApXSk7CisgICAgd2ViVmlldy5nZXQoKS5fdGV4dE1hbmlwdWxhdGlvbkRlbGVn
YXRlID0gZGVsZWdhdGUuZ2V0KCk7CisKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhU
TUxTdHJpbmc6QCI8IURPQ1RZUEUgaHRtbD4iCisgICAgICAgICI8aHRtbD48Ym9keT5oZWxsbzxi
cj53b3JsZDxkaXY+V2ViS2l0PC9kaXY+PC9ib2R5PjwvaHRtbD4iXTsKKworICAgIGRvbmUgPSBm
YWxzZTsKKyAgICBbd2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb21wbGV0aW9u
SGFuZGxlcjpeeworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgYXV0byAqaXRlbXMgPSBkZWxlZ2F0ZS5nZXQo
KS5pdGVtczsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDNVTCk7CisgICAgRVhQRUNUX0VR
KGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoImhlbGxvIiwg
aXRlbXNbMF0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisKKyAgICBFWFBFQ1RfRVEo
aXRlbXNbMV0udG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9TVFJFUSgid29ybGQiLCBp
dGVtc1sxXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKworICAgIEVYUEVDVF9FUShp
dGVtc1syXS50b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX1NUUkVRKCJXZWJLaXQiLCBp
dGVtc1syXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKK30KKworVEVTVChUZXh0TWFu
aXB1bGF0aW9uLCBTdGFydFRleHRNYW5pcHVsYXRpb25GaW5kUGFyYWdyYXBoc1dpdGhNdWx0aWxl
VG9rZW5zKQoreworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlv
bkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rl
c3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQw
MCldKTsKKyAgICB3ZWJWaWV3LmdldCgpLl90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgPSBkZWxl
Z2F0ZS5nZXQoKTsKKyAgICAKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJp
bmc6QCI8IURPQ1RZUEUgaHRtbD4iCisgICAgICAgICI8aHRtbD48Ym9keT5oZWxsbywgIDxiPndv
cmxkPC9iPjxicj48ZGl2PjxlbT4gPGI+V2ViPC9iPktpdDwvZW0+ICA8L2Rpdj48L2JvZHk+PC9o
dG1sPiJdOworICAgIAorICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfc3RhcnRUZXh0
TWFuaXB1bGF0aW9uc1dpdGhDb21wbGV0aW9uSGFuZGxlcjpeeworICAgICAgICBkb25lID0gdHJ1
ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworICAgIAor
ICAgIGF1dG8gKml0ZW1zID0gZGVsZWdhdGUuZ2V0KCkuaXRlbXM7CisgICAgRVhQRUNUX0VRKGl0
ZW1zLmNvdW50LCAyVUwpOworICAgIEVYUEVDVF9FUShpdGVtc1swXS50b2tlbnMuY291bnQsIDJV
TCk7CisgICAgRVhQRUNUX1NUUkVRKCJoZWxsbywgIiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRl
bnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCJ3b3JsZCIsIGl0ZW1zWzBdLnRva2Vu
c1sxXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIAorICAgIEVYUEVDVF9FUShpdGVtc1sxXS50
b2tlbnMuY291bnQsIDJVTCk7CisgICAgRVhQRUNUX1NUUkVRKCJXZWIiLCBpdGVtc1sxXS50b2tl
bnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoIktpdCIsIGl0ZW1z
WzFdLnRva2Vuc1sxXS5jb250ZW50LlVURjhTdHJpbmcpOworfQorCitzdHJ1Y3QgVG9rZW4gewor
ICAgIE5TU3RyaW5nICppZGVudGlmaWVyOworICAgIE5TU3RyaW5nICpjb250ZW50OworfTsKKwor
dGVtcGxhdGU8c2l6ZV90IGxlbmd0aD4KK3N0YXRpYyBSZXRhaW5QdHI8X1dLVGV4dE1hbmlwdWxh
dGlvbkl0ZW0+IGNyZWF0ZUl0ZW0oTlNTdHJpbmcgKml0ZW1JZGVudGlmaWVyLCBjb25zdCBUb2tl
biAoJnRva2VucylbbGVuZ3RoXSkKK3sKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHdr
VG9rZW5zID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBSZXRhaW5QdHI8X1dL
VGV4dE1hbmlwdWxhdGlvblRva2VuPiB0b2tlbiA9IGFkb3B0TlMoW1tfV0tUZXh0TWFuaXB1bGF0
aW9uVG9rZW4gYWxsb2NdIGluaXRdKTsKKyAgICAgICAgdG9rZW4uZ2V0KCkuaWRlbnRpZmllciA9
IHRva2Vuc1tpXS5pZGVudGlmaWVyOworICAgICAgICB0b2tlbi5nZXQoKS5jb250ZW50ID0gdG9r
ZW5zW2ldLmNvbnRlbnQ7CisgICAgICAgIFt3a1Rva2Vucy5nZXQoKSBhZGRPYmplY3Q6dG9rZW4u
Z2V0KCldOworICAgIH0KKyAgICByZXR1cm4gYWRvcHROUyhbW19XS1RleHRNYW5pcHVsYXRpb25J
dGVtIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6aXRlbUlkZW50aWZpZXIgdG9rZW5zOndrVG9r
ZW5zLmdldCgpXSk7Cit9CisKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFu
aXB1bGF0aW9uU2hvdWxkUmVwbGFjZVNpbXBsZVBhcmFncmFwaENvbnRlbnQpCit7CisgICAgYXV0
byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxsb2NdIGlu
aXRdKTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOworICAgIHdlYlZpZXcu
Z2V0KCkuX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSA9IGRlbGVnYXRlLmdldCgpOworCisgICAg
W3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPCFET0NUWVBFIGh0bWw+Igor
ICAgICAgICAiPGh0bWw+PGJvZHk+PHA+aGVsbGxvLCB3b29vcmxkPC9wPjxwPiBoZXksIDxiPiBL
aXRzPC9iPiBpcyA8ZW0+Y3V1dXRlPC9lbT48L3A+PC9ib2R5PjwvaHRtbD4iXTsKKworICAgIGRv
bmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb21w
bGV0aW9uSGFuZGxlcjpeeworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgYXV0byAqaXRlbXMgPSBkZWxlZ2F0
ZS5nZXQoKS5pdGVtczsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDJVTCk7CisgICAgRVhQ
RUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoImhl
bGxsbywgd29vb3JsZCIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOwor
CisgICAgRVhQRUNUX0VRKGl0ZW1zWzFdLnRva2Vucy5jb3VudCwgNFVMKTsKKyAgICBFWFBFQ1Rf
U1RSRVEoImhleSwgIiwgaXRlbXNbMV0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7Cisg
ICAgRVhQRUNUX1NUUkVRKCJLaXRzIiwgaXRlbXNbMV0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0
cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCIgaXMgIiwgaXRlbXNbMV0udG9rZW5zWzJdLmNvbnRl
bnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCJjdXV1dGUiLCBpdGVtc1sxXS50b2tl
bnNbM10uY29udGVudC5VVEY4U3RyaW5nKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2Vi
VmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAq
KWNyZWF0ZUl0ZW0oaXRlbXNbMV0uaWRlbnRpZmllciwgeworICAgICAgICB7IGl0ZW1zWzFdLnRv
a2Vuc1swXS5pZGVudGlmaWVyLCBAIkhlbGxvLCAiIH0sCisgICAgICAgIHsgaXRlbXNbMV0udG9r
ZW5zWzFdLmlkZW50aWZpZXIsIEAia2l0dGVucyIgfSwKKyAgICAgICAgeyBpdGVtc1sxXS50b2tl
bnNbMl0uaWRlbnRpZmllciwgQCIgYXJlICIgfSwKKyAgICAgICAgeyBpdGVtc1sxXS50b2tlbnNb
M10uaWRlbnRpZmllciwgQCJjdXRlIiB9LAorICAgIH0pLmdldCgpIGNvbXBsZXRpb246XihCT09M
IHN1Y2Nlc3MpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoc3VjY2Vzcyk7CisgICAgICAgIGRvbmUg
PSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7Cisg
ICAgRVhQRUNUX1dLX1NUUkVRKCI8cD5oZWxsbG8sIHdvb29ybGQ8L3A+PHA+SGVsbG8sIDxiPmtp
dHRlbnM8L2I+IGFyZSA8ZW0+Y3V0ZTwvZW0+PC9wPiIsCisgICAgICAgIFt3ZWJWaWV3IHN0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmlubmVySFRNTCJdKTsKKwor
ICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9u
OihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWNyZWF0ZUl0ZW0oaXRlbXNbMF0uaWRlbnRpZmll
ciwgeworICAgICAgICB7IGl0ZW1zWzBdLnRva2Vuc1swXS5pZGVudGlmaWVyLCBAIkhlbGxvLCB3
b3JsZC4iIH0sCisgICAgfSkuZ2V0KCkgY29tcGxldGlvbjpeKEJPT0wgc3VjY2VzcykgeworICAg
ICAgICBFWFBFQ1RfVFJVRShzdWNjZXNzKTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07
CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKyAgICBFWFBFQ1RfV0tfU1RS
RVEoIjxwPkhlbGxvLCB3b3JsZC48L3A+PHA+SGVsbG8sIDxiPmtpdHRlbnM8L2I+IGFyZSA8ZW0+
Y3V0ZTwvZW0+PC9wPiIsCisgICAgICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3JpcHQ6QCJkb2N1bWVudC5ib2R5LmlubmVySFRNTCJdKTsKK30KKworVEVTVChUZXh0TWFuaXB1
bGF0aW9uLCBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb25TaG91bGRGYWlsV2hlbkNvbnRlbnRJc0No
YW5nZWQpCit7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9u
RGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVz
dFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAw
KV0pOworICAgIHdlYlZpZXcuZ2V0KCkuX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSA9IGRlbGVn
YXRlLmdldCgpOworCisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAi
PCFET0NUWVBFIGh0bWw+IgorICAgICAgICAiPGh0bWw+PGJvZHk+PHA+IHdoYXQgPGVtPnRpbWU8
L2VtPiBhcmUgdGhleSBub3c/PC9wPjwvYm9keT48L2h0bWw+Il07CisKKyAgICBkb25lID0gZmFs
c2U7CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29tcGxldGlvbkhh
bmRsZXI6XnsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGF1dG8gKml0ZW1zID0gZGVsZWdhdGUuZ2V0KCku
aXRlbXM7CisgICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9FUShp
dGVtc1swXS50b2tlbnMuY291bnQsIDNVTCk7CisgICAgRVhQRUNUX1NUUkVRKCJ3aGF0ICIsIGl0
ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgi
dGltZSIsIGl0ZW1zWzBdLnRva2Vuc1sxXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVD
VF9TVFJFUSgiIGFyZSB0aGV5IG5vdz8iLCBpdGVtc1swXS50b2tlbnNbMl0uY29udGVudC5VVEY4
U3RyaW5nKTsKKworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJk
b2N1bWVudC5xdWVyeVNlbGVjdG9yKCdlbScpLm5leHRTaWJsaW5nLmRhdGEgPSAnIGlzIGl0IG5v
dyBpbiBMb25kb24/JyJdOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9jb21w
bGV0ZVRleHRNYW5pcHVsYXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICopY3JlYXRlSXRl
bShpdGVtc1swXS5pZGVudGlmaWVyLCB7CisgICAgICAgIHsgaXRlbXNbMF0udG9rZW5zWzBdLmlk
ZW50aWZpZXIsIEAiV2hhdCAiIH0sCisgICAgICAgIHsgaXRlbXNbMF0udG9rZW5zWzFdLmlkZW50
aWZpZXIsIEAidGltZSIgfSwKKyAgICAgICAgeyBpdGVtc1swXS50b2tlbnNbMl0uaWRlbnRpZmll
ciwgQCIgaXMgaXQgbm93PyIgfSwKKyAgICB9KS5nZXQoKSBjb21wbGV0aW9uOl4oQk9PTCBzdWNj
ZXNzKSB7CisgICAgICAgIEVYUEVDVF9GQUxTRShzdWNjZXNzKTsKKyAgICAgICAgZG9uZSA9IHRy
dWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKyAgICBF
WFBFQ1RfV0tfU1RSRVEoIjxwPiB3aGF0IDxlbT50aW1lPC9lbT4gaXMgaXQgbm93IGluIExvbmRv
bj88L3A+IiwKKyAgICAgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
ImRvY3VtZW50LmJvZHkuaW5uZXJIVE1MIl0pOworfQorCitURVNUKFRleHRNYW5pcHVsYXRpb24s
IENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvblNob3VsZEZhaWxXaGVuRG9jdW1lbnRIYXNCZWVuTmF2
aWdhdGVkQXdheSkKK3sKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1RleHRNYW5pcHVs
YXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMo
W1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgNDAw
LCA0MDApXSk7CisgICAgd2ViVmlldy5nZXQoKS5fdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlID0g
ZGVsZWdhdGUuZ2V0KCk7CisKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdl
TmFtZWQ6QCJzaW1wbGUiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAnPHA+aGV5LCA8ZW0+ZWFydGg8L2VtPjwv
cD4nIl07CisKKyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlw
dWxhdGlvbnNXaXRoQ29tcGxldGlvbkhhbmRsZXI6XnsKKyAgICAgICAgZG9uZSA9IHRydWU7Cisg
ICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGF1dG8g
Kml0ZW1zID0gZGVsZWdhdGUuZ2V0KCkuaXRlbXM7CisgICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50
LCAxVUwpOworICAgIEVYUEVDVF9FUShpdGVtc1swXS50b2tlbnMuY291bnQsIDJVTCk7CisgICAg
RVhQRUNUX1NUUkVRKCJoZXksICIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJp
bmcpOworICAgIEVYUEVDVF9TVFJFUSgiZWFydGgiLCBpdGVtc1swXS50b2tlbnNbMV0uY29udGVu
dC5VVEY4U3RyaW5nKTsKKworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VO
YW1lZDpAImNvcHktaHRtbCJdOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9j
b21wbGV0ZVRleHRNYW5pcHVsYXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICopY3JlYXRl
SXRlbShpdGVtc1swXS5pZGVudGlmaWVyLCB7CisgICAgICAgIHsgaXRlbXNbMF0udG9rZW5zWzBd
LmlkZW50aWZpZXIsIEAiaGVsbG8sICIgfSwKKyAgICAgICAgeyBpdGVtc1swXS50b2tlbnNbMV0u
aWRlbnRpZmllciwgQCJ3b3JsZCIgfSwKKyAgICB9KS5nZXQoKSBjb21wbGV0aW9uOl4oQk9PTCBz
dWNjZXNzKSB7CisgICAgICAgIEVYUEVDVF9GQUxTRShzdWNjZXNzKTsKKyAgICAgICAgZG9uZSA9
IHRydWU7CisgICAgfV07CisKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381745</attachid>
            <date>2019-10-23 15:45:57 -0700</date>
            <delta_ts>2019-10-23 20:50:40 -0700</delta_ts>
            <desc>More build fixes</desc>
            <filename>bug-203286-20191023154557.patch</filename>
            <type>text/plain</type>
            <size>72629</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MTQ5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDE5LTEwLTIzICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIG1lY2hhbmlzbSB0byBm
aW5kIGFuZCBtYW5pcHVsYXRlIHRleHQgYnkgcGFyYWdyYXBocworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMjg2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIFRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyIHdoaWNoIGFsbG93cyBXZWJLaXQgY2xpZW50cyB0byBmaW5k
IGFuZCByZXBsYWNlCisgICAgICAgIHRleHQgY29udGVudCBpbiBhIGdpdmVuIGRvY3VtZW50IGJ5
IHBhcmFncmFwaCBib3VuZGFyeS4gRm9yIG5vdywgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIg
ZmluZHMKKyAgICAgICAgYWxsIHBhcmFncmFwaHMgaW4gdGhlIGRvY3VtZW50IGFuZCBpbnZva2Vz
IHRoZSBjYWxsYmFjayBmb3IgZWFjaCBwYXJhZ3JhcGguIEluIHRoZSBmdXR1cmUsIHRoaXMKKyAg
ICAgICAgY29udHJvbGxlciB3aWxsIHN1cHBvcnQgZGV0ZWN0aW5nIHJlbW92YWwgYW5kIGluc2Vy
dGlvbiBvZiBuZXcgY29udGVudCB0byB0aGUgZG9jdW1lbnQuCisKKyAgICAgICAgVGVzdHM6IFRl
eHRNYW5pcHVsYXRpb24uU3RhcnRUZXh0TWFuaXB1bGF0aW9uRmluZFNpbXBsZVBhcmFncmFwaHMK
KyAgICAgICAgICAgICAgIFRleHRNYW5pcHVsYXRpb24uU3RhcnRUZXh0TWFuaXB1bGF0aW9uRmlu
ZFBhcmFncmFwaHNXaXRoTXVsdGlsZVRva2VucworICAgICAgICAgICAgICAgVGV4dE1hbmlwdWxh
dGlvbi5Db21wbGV0ZVRleHRNYW5pcHVsYXRpb25TaG91bGRSZXBsYWNlU2ltcGxlUGFyYWdyYXBo
Q29udGVudAorICAgICAgICAgICAgICAgVGV4dE1hbmlwdWxhdGlvbi5Db21wbGV0ZVRleHRNYW5p
cHVsYXRpb25TaG91bGRGYWlsV2hlbkNvbnRlbnRJc0NoYW5nZWQKKyAgICAgICAgICAgICAgIFRl
eHRNYW5pcHVsYXRpb24uQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uU2hvdWxkRmFpbFdoZW5Eb2N1
bWVudEhhc0JlZW5OYXZpZ2F0ZWRBd2F5CisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6IENsZWFyIFRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyLiBPdGhlcndpc2UgbV9pdGVtcworICAgICAgICBpbiBUZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlciBtYXkga2VlcCBhIGJ1bmNoIG9mIG5vZGVzIGFsaXZlIGFuZCBub3QgbGV0IHRo
aXMgZG9jdW1lbnQgZGVzdHJ1Y3RlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0ZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlcik6IEFkZGVkLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5o
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnRleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
SWZFeGlzdHMpOiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIpOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpzdGFydE9ic2VydmluZ1BhcmFncmFw
aHMpOiBGaW5kcyBhbGwgcGFyZ3JhcGhzIGFuZCBpbnZva2UKKyAgICAgICAgdGhlIGNhbGxiYWNr
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OmFkZEl0ZW0p
OiBBZGRlZC4gQSBoZWxwZXIgZm9yIHN0YXJ0T2JzZXJ2aW5nUGFyYWdyYXBocy4KKyAgICAgICAg
KFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpjb21wbGV0ZU1hbmlwdWxhdGlv
bik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6
OnJlcGxhY2UpOiBBZGRlZC4gQSBoZWxwZXIgZm9yIGNvbXBsZXRlTWFuaXB1bGF0aW9uLgorICAg
ICAgICAqIGVkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9r
ZW46OmVuY29kZSBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuOjpkZWNvZGUpOiBBZGRlZC4KKwogMjAx
OS0xMC0yMyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBXZWIgSW5zcGVjdG9yOiBub3RpZnkgaW5zcGVjdG9yIHdoZW4gcHJvdmlzaW9uYWwgcGFnZSBp
cyBjcmVhdGVkLCBjb21taXR0ZWQgYW5kIGRlc3Ryb3llZApJbmRleDogU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
CShyZXZpc2lvbiAyNTE0OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MDMsNiArNTAzLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBREVSUwogICAgIGVkaXRpbmcvVGV4dEdyYW51bGFyaXR5LmgKICAgICBlZGl0aW5nL1Rl
eHRJdGVyYXRvci5oCiAgICAgZWRpdGluZy9UZXh0SXRlcmF0b3JCZWhhdmlvci5oCisgICAgZWRp
dGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oCiAgICAgZWRpdGluZy9VbmRvU3RlcC5o
CiAgICAgZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAogICAgIGVkaXRpbmcvVmlzaWJsZVNlbGVj
dGlvbi5oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjUxNDk0KQorKysgU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwNjEsNiArMTA2MSw3IEBAIGVk
aXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q28KIGVkaXRpbmcvVGV4dENoZWNr
aW5nSGVscGVyLmNwcAogZWRpdGluZy9UZXh0SW5zZXJ0aW9uQmFzZUNvbW1hbmQuY3BwCiBlZGl0
aW5nL1RleHRJdGVyYXRvci5jcHAKK2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIu
Y3BwCiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCiBlZGl0aW5nL1VubGlua0NvbW1hbmQuY3Bw
CiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI1MTQ5NCkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMjg1Miw2ICsyODUyLDcgQEAKIAkJOTk2RTU5REYxREYwMTI4RDAwNjYxMkI5
IC8qIE5hdmlnYXRvcldlYkRyaXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTk2RTU5REMxREYwMEQ5MDAwNjYxMkI5IC8qIE5hdmlnYXRvcldlYkRy
aXZlci5oICovOyB9OwogCQk5QTUyOEU4NDE3RDdGNTJGMDBBQTk1MTggLyogRmxvYXRpbmdPYmpl
Y3RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QTUy
OEU4MjE3RDdGNTJGMDBBQTk1MTggLyogRmxvYXRpbmdPYmplY3RzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOUFCMUYzODAxOEUyNDg5QTAwNTM0
NzQzIC8qIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlBQjFGMzdFMThFMjQ4OUEwMDUzNDc0MyAvKiBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJOUIwMkUwQzgyMzVFQUQyQTAwNDA0NEIyIC8qIFRleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5QjAyRTBDMzIzNUU3NkFBMDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk5QjI0REU4RTE1MTk0Qjk1MDBDNTlDMjcgLyogSFRNTEJESUVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMjRERThDMTUxOTRCOTUwMEM1
OUMyNyAvKiBIVE1MQkRJRWxlbWVudC5oICovOyB9OwogCQk5QjI3RkM2MDIzNEQ5QURCMDAzOTRB
NDYgLyogV2luZG93RXZlbnRMb29wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5QjI3RkM1RTIzNEQ5QURBMDAzOTRBNDYgLyogV2luZG93RXZlbnRMb29w
LmggKi87IH07CiAJCTlCMkQ4QTc5MTQ5OTdDQ0YwMEVDRUYzRSAvKiBVbmRvU3RlcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIyRDhBNzgxNDk5N0ND
RjAwRUNFRjNFIC8qIFVuZG9TdGVwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTExMDc0LDYgKzExMDc1LDggQEAKIAkJOUFDNkYwMjUyMTE0OEY1
NDAwQ0JEQTA2IC8qIE1lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeS5o
OyBwYXRoID0gbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9y
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QUM2RjAyRDIxMTQ4RjlGMDBDQkRB
MDYgLyogTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeU1vY2suY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9y
eU1vY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QUM2RjAyRjIxMTQ4RkEy
MDBDQkRBMDYgLyogTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeU1vY2suaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9y
eU1vY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUIwMkUwQzMyMzVFNzZBQTAw
NDA0NEIyIC8qIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTlCMDJFMEM0MjM1RTc2QUEwMDQwNDRCMiAvKiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBS
ZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBwYXRo
ID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9SZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk5QjAzRDgwNjFC
QjMxMTBEMDBCNzY0QzkgLyogU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaDsgcGF0aCA9IERl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaDsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEQ4IC8q
IFJlYWRhYmxlU3RyZWFtQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9SZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19E
SVI7IH07CkBAIC0yMTQ0MCw2ICsyMTQ0Myw4IEBACiAJCQkJOTMzMDlEQ0MwOTlFNjQ5MTAwNTZF
NTgxIC8qIFRleHRJdGVyYXRvci5jcHAgKi8sCiAJCQkJOTMzMDlEQ0QwOTlFNjQ5MTAwNTZFNTgx
IC8qIFRleHRJdGVyYXRvci5oICovLAogCQkJCTkzOTIxNDY4MThBNkQ3OTEwMDBFRTY4OCAvKiBU
ZXh0SXRlcmF0b3JCZWhhdmlvci5oICovLAorCQkJCTlCMDJFMEM0MjM1RTc2QUEwMDQwNDRCMiAv
KiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAgKi8sCisJCQkJOUIwMkUwQzMyMzVFNzZB
QTAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmggKi8sCiAJCQkJOTMzMDlE
Q0EwOTlFNjQ5MTAwNTZFNTgxIC8qIFR5cGluZ0NvbW1hbmQuY3BwICovLAogCQkJCTkzMzA5RENC
MDk5RTY0OTEwMDU2RTU4MSAvKiBUeXBpbmdDb21tYW5kLmggKi8sCiAJCQkJOUIyRDhBNzgxNDk5
N0NDRjAwRUNFRjNFIC8qIFVuZG9TdGVwLmggKi8sCkBAIC0zMjM1Miw2ICszMjM1Nyw3IEBACiAJ
CQkJQ0VDQURGQ0UxNTM3NzkxRDAwRTM3MDY4IC8qIFRleHRJbnNlcnRpb25CYXNlQ29tbWFuZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMUMwOTlFNjQ5MjAwNTZFNTgxIC8qIFRleHRJdGVy
YXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5MjE0NjkxOEE2RDc5MTAwMEVFNjg4IC8qIFRl
eHRJdGVyYXRvckJlaGF2aW9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk5QjAyRTBDODIzNUVBRDJB
MDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDRUY0NUU5MEU2ODc3NjcwMDFDMTI4NyAvKiBUZXh0TWV0cmljcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTREOTg4QjQxN0JGRDFGNjAwODRGQjg4IC8qIFRleHROb2RlVHJhdmVyc2FsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQzE4REE1OTE4MUFGNkE1MDBDNEVGMjIgLyogVGV4dFBhaW50
ZXIuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lv
biAyNTE0OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTMsNiArMjEzLDcgQEAKICNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgog
I2luY2x1ZGUgIlRleHRBdXRvU2l6aW5nLmgiCiAjaW5jbHVkZSAiVGV4dEV2ZW50LmgiCisjaW5j
bHVkZSAiVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUZXh0Tm9kZVRy
YXZlcnNhbC5oIgogI2luY2x1ZGUgIlRvdWNoQWN0aW9uLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3Jt
U291cmNlLmgiCkBAIC0yNDc5LDYgKzI0ODAsOCBAQCB2b2lkIERvY3VtZW50OjpwcmVwYXJlRm9y
RGVzdHJ1Y3Rpb24oKQogCiAgICAgbV91bmRvTWFuYWdlci0+cmVtb3ZlQWxsSXRlbXMoKTsKIAor
ICAgIG1fdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgPSBudWxscHRyOyAvLyBGcmVlIG5vZGVz
IGtlcHQgYWxpdmUgYnkgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuCisKICNpZiBFTkFCTEUo
QUNDRVNTSUJJTElUWSkKICAgICBpZiAodGhpcyAhPSAmdG9wRG9jdW1lbnQoKSkgewogICAgICAg
ICAvLyBMZXQgdGhlIGF4IGNhY2hlIGtub3cgdGhhdCB0aGlzIHN1YmZyYW1lIGdvZXMgb3V0IG9m
IHNjb3BlLgpAQCAtODM0MSw0ICs4MzQ0LDExIEBAIHZvaWQgRG9jdW1lbnQ6OnNldFBpY3R1cmVJ
blBpY3R1cmVFbGVtZW4KIH0KICNlbmRpZgogCitUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlciYg
RG9jdW1lbnQ6OnRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyKCkKK3sKKyAgICBpZiAoIW1fdGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIpCisgICAgICAgIG1fdGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXIgPSBtYWtlVW5pcXVlPFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyPigqdGhpcyk7Cisg
ICAgcmV0dXJuICptX3RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMjUxNDk0KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw2
ICsxOTYsNyBAQCBjbGFzcyBTdHlsZVNoZWV0OwogY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwog
Y2xhc3MgU3R5bGVTaGVldExpc3Q7CiBjbGFzcyBUZXh0OworY2xhc3MgVGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI7CiBjbGFzcyBUZXh0UmVzb3VyY2VEZWNvZGVyOwogY2xhc3MgVHJlZVdhbGtl
cjsKIGNsYXNzIFVuZG9NYW5hZ2VyOwpAQCAtMTU1Nyw2ICsxNTU4LDkgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0UGljdHVyZUluUGljdHVyZUVsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCopOwogI2Vu
ZGlmCiAKKyAgICBXRUJDT1JFX0VYUE9SVCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlciYgdGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIoKTsKKyAgICBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxl
ciogdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXJJZkV4aXN0cygpIHsgcmV0dXJuIG1fdGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXIuZ2V0KCk7IH0KKwogcHJvdGVjdGVkOgogICAgIGVudW0gQ29u
c3RydWN0aW9uRmxhZ3MgeyBTeW50aGVzaXplZCA9IDEsIE5vblJlbmRlcmVkUGxhY2Vob2xkZXIg
PSAxIDw8IDEgfTsKICAgICBEb2N1bWVudChGcmFtZSosIGNvbnN0IFVSTCYsIHVuc2lnbmVkID0g
RGVmYXVsdERvY3VtZW50Q2xhc3MsIHVuc2lnbmVkIGNvbnN0cnVjdGlvbkZsYWdzID0gMCk7CkBA
IC0yMDg1LDYgKzIwODksOCBAQCBwcml2YXRlOgogICAgIFdlYWtQdHI8SFRNTFZpZGVvRWxlbWVu
dD4gbV9waWN0dXJlSW5QaWN0dXJlRWxlbWVudDsKICNlbmRpZgogCisgICAgc3RkOjp1bmlxdWVf
cHRyPFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyPiBtX3RleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOworCiAgICAgSGFzaE1hcDxFbGVtZW50KiwgRWxlbWVudElkZW50aWZpZXI+IG1faWRlbnRp
ZmllZEVsZW1lbnRzTWFwOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaCIKKworI2luY2x1
ZGUgIkVkaXRpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHREaXNhbGxvd2VkU2NvcGUuaCIKKyNpbmNs
dWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6VGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXIoRG9jdW1lbnQmIGRvY3VtZW50KQorICAgIDogbV9kb2N1bWVudChtYWtl
V2Vha1B0cihkb2N1bWVudCkpCit7Cit9CisKK3ZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXI6OnN0YXJ0T2JzZXJ2aW5nUGFyYWdyYXBocyhNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2smJiBj
YWxsYmFjaykKK3sKKyAgICBhdXRvIGRvY3VtZW50ID0gbWFrZVJlZlB0cihtX2RvY3VtZW50Lmdl
dCgpKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayk7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQgPSBm
aXJzdFBvc2l0aW9uSW5Ob2RlKG1fZG9jdW1lbnQuZ2V0KCkpOworICAgIFZpc2libGVQb3NpdGlv
biBlbmQgPSBsYXN0UG9zaXRpb25Jbk5vZGUobV9kb2N1bWVudC5nZXQoKSk7CisgICAgVGV4dEl0
ZXJhdG9yIGl0ZXJhdG9yIHsgc3RhcnQuZGVlcEVxdWl2YWxlbnQoKSwgZW5kLmRlZXBFcXVpdmFs
ZW50KCkgfTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm47IC8vIFZpc2libGVQ
b3NpdGlvbiBvciBUZXh0SXRlcmF0b3IncyBjb25zdHJ1Y3RvciBtYXkgaGF2ZSB1cGRhdGVkIHRo
ZSBsYXlvdXQgYW5kIGV4ZWN1dGVkIGFyYml0cmFyeSBzY3JpcHRzLgorCisgICAgVmVjdG9yPE1h
bmlwdWxhdGlvblRva2VuPiB0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGg7CisgICAgUG9zaXRpb24g
c3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGggPSBzdGFydC5kZWVwRXF1aXZhbGVudCgpOworICAgIHdo
aWxlICghaXRlcmF0b3IuYXRFbmQoKSkgeworICAgICAgICBTdHJpbmdWaWV3IGN1cnJlbnRUZXh0
ID0gaXRlcmF0b3IudGV4dCgpOworCisgICAgICAgIGlmIChzdGFydE9mQ3VycmVudFBhcmFncmFw
aC5pc051bGwoKSkKKyAgICAgICAgICAgIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoID0gaXRlcmF0
b3IucmFuZ2UoKS0+c3RhcnRQb3NpdGlvbigpOworCisgICAgICAgIHNpemVfdCBlbmRPZkxhc3RO
ZXdMaW5lID0gMDsKKyAgICAgICAgc2l6ZV90IG9mZnNldE9mTmV4dE5ld0xpbmUgPSAwOworICAg
ICAgICB3aGlsZSAoKG9mZnNldE9mTmV4dE5ld0xpbmUgPSBjdXJyZW50VGV4dC5maW5kKCdcbics
IGVuZE9mTGFzdE5ld0xpbmUpKSAhPSBub3RGb3VuZCkgeworICAgICAgICAgICAgaWYgKG9mZnNl
dE9mTmV4dE5ld0xpbmUpCisgICAgICAgICAgICAgICAgdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBo
LmFwcGVuZChNYW5pcHVsYXRpb25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCks
IGN1cnJlbnRUZXh0LnN1YnN0cmluZyhlbmRPZkxhc3ROZXdMaW5lLCBvZmZzZXRPZk5leHROZXdM
aW5lKS50b1N0cmluZygpIH0pOworCisgICAgICAgICAgICBhdXRvIGxhc3RSYW5nZSA9IGl0ZXJh
dG9yLnJhbmdlKCk7CisgICAgICAgICAgICBpZiAob2Zmc2V0T2ZOZXh0TmV3TGluZSA8IGN1cnJl
bnRUZXh0Lmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgbGFzdFJhbmdlLT5zZXRTdGFydChm
aXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoaXRlcmF0b3Iubm9kZSgpKSk7IC8vIE1vdmUgdGhl
IHN0YXJ0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQgbm9kZS4KKyAgICAgICAgICAg
ICAgICBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKGxhc3RSYW5nZSwgMCwgb2Zmc2V0T2ZOZXh0TmV3
TGluZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQb3NpdGlvbiBlbmRPZkN1cnJlbnRQ
YXJhZ3JhcGggPSBsYXN0UmFuZ2UtPmVuZFBvc2l0aW9uKCk7CisKKyAgICAgICAgICAgIGlmICgh
dG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBhZGRJ
dGVtKHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoLCBlbmRPZkN1cnJlbnRQYXJhZ3JhcGgsIFdURk1v
dmUodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoKSk7CisgICAgICAgICAgICBzdGFydE9mQ3VycmVu
dFBhcmFncmFwaC5jbGVhcigpOworICAgICAgICAgICAgZW5kT2ZMYXN0TmV3TGluZSA9IG9mZnNl
dE9mTmV4dE5ld0xpbmUgKyAxOworICAgICAgICB9CisKKyAgICAgICAgYXV0byByZW1haW5pbmdU
ZXh0ID0gY3VycmVudFRleHQuc3Vic3RyaW5nKGVuZE9mTGFzdE5ld0xpbmUpOworICAgICAgICBp
ZiAocmVtYWluaW5nVGV4dC5sZW5ndGgoKSkKKyAgICAgICAgICAgIHRva2Vuc0luQ3VycmVudFBh
cmFncmFwaC5hcHBlbmQoTWFuaXB1bGF0aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRpZmllci5nZW5l
cmF0ZSgpLCByZW1haW5pbmdUZXh0LnRvU3RyaW5nKCkgfSk7CisKKyAgICAgICAgaXRlcmF0b3Iu
YWR2YW5jZSgpOworICAgIH0KKworICAgIGlmICghdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlz
RW1wdHkoKSkKKyAgICAgICAgYWRkSXRlbShzdGFydE9mQ3VycmVudFBhcmFncmFwaCwgZW5kLmRl
ZXBFcXVpdmFsZW50KCksIFdURk1vdmUodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoKSk7Cit9CisK
K3ZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OmFkZEl0ZW0oY29uc3QgUG9zaXRpb24m
IHN0YXJ0T2ZQYXJhZ3JhcGgsIGNvbnN0IFBvc2l0aW9uJiBlbmRPZlBhcmFncmFwaCwgVmVjdG9y
PE1hbmlwdWxhdGlvblRva2VuPiYmIHRva2VucykKK3sKKyAgICBBU1NFUlQobV9kb2N1bWVudCk7
CisgICAgYXV0byByZXN1bHQgPSBtX2l0ZW1zLmFkZChtX2l0ZW1JZGVudGlmaWVyLmdlbmVyYXRl
KCksIE1hbmlwdWxhdGlvbkl0ZW0geyBzdGFydE9mUGFyYWdyYXBoLCBlbmRPZlBhcmFncmFwaCwg
V1RGTW92ZSh0b2tlbnMpIH0pOworICAgIG1fY2FsbGJhY2soKm1fZG9jdW1lbnQsIHJlc3VsdC5p
dGVyYXRvci0+a2V5LCByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnRva2Vucyk7Cit9CisKK2Jvb2wg
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OmNvbXBsZXRlTWFuaXB1bGF0aW9uKEl0ZW1JZGVu
dGlmaWVyIGl0ZW1JZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+JiBy
ZXBsYWNlbWVudFRva2VucykKK3sKKyAgICBpZiAoIWl0ZW1JZGVudGlmaWVyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGl0ZW1JdGVyYXRvciA9IG1faXRlbXMuZmluZChpdGVt
SWRlbnRpZmllcik7CisgICAgaWYgKGl0ZW1JdGVyYXRvciA9PSBtX2l0ZW1zLmVuZCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGRpZFJlcGxhY2UgPSByZXBsYWNlKGl0ZW1J
dGVyYXRvci0+dmFsdWUsIHJlcGxhY2VtZW50VG9rZW5zKTsKKworICAgIG1faXRlbXMucmVtb3Zl
KGl0ZW1JdGVyYXRvcik7CisKKyAgICByZXR1cm4gZGlkUmVwbGFjZTsKK30KKworYm9vbCBUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6cmVwbGFjZShjb25zdCBNYW5pcHVsYXRpb25JdGVtJiBp
dGVtLCBjb25zdCBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+JiByZXBsYWNlbWVudFRva2VucykK
K3sKKyAgICBUZXh0SXRlcmF0b3IgaXRlcmF0b3IgeyBpdGVtLnN0YXJ0LCBpdGVtLmVuZCB9Owor
ICAgIHNpemVfdCBjdXJyZW50VG9rZW5JbmRleCA9IDA7CisgICAgSGFzaE1hcDxUb2tlbklkZW50
aWZpZXIsIFJlZjxOb2RlPj4gdG9rZW5Ub05vZGU7CisgICAgd2hpbGUgKCFpdGVyYXRvci5hdEVu
ZCgpKSB7CisgICAgICAgIGF1dG8gc3RyaW5nID0gaXRlcmF0b3IudGV4dCgpLnRvU3RyaW5nKCk7
CisgICAgICAgIGlmIChjdXJyZW50VG9rZW5JbmRleCA+PSBpdGVtLnRva2Vucy5zaXplKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8mIGN1cnJlbnRUb2tlbiA9IGl0
ZW0udG9rZW5zW2N1cnJlbnRUb2tlbkluZGV4XTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yLnRleHQo
KSAhPSBjdXJyZW50VG9rZW4uY29udGVudCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgdG9rZW5Ub05vZGUuYWRkKGN1cnJlbnRUb2tlbi5pZGVudGlmaWVyLCAqaXRlcmF0b3Iu
bm9kZSgpKTsKKyAgICAgICAgaXRlcmF0b3IuYWR2YW5jZSgpOworICAgICAgICArK2N1cnJlbnRU
b2tlbkluZGV4OworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3QgcHJlc2V2ZSB0
aGUgb3JkZXIgb2YgdGhlIHJlcGxhY2VtZW50IGF0IGFsbC4KKyAgICBmb3IgKGF1dG8mIHRva2Vu
IDogcmVwbGFjZW1lbnRUb2tlbnMpIHsKKyAgICAgICAgYXV0byogbm9kZSA9IHRva2VuVG9Ob2Rl
LmdldCh0b2tlbi5pZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWlzPENoYXJhY3RlckRhdGE+KG5vZGUpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBzYWZlIHRvIHVw
ZGF0ZSBET00gd2hpbGUgaXRlcmF0aW5nIG92ZXIgdGhlIHRva2Vucy4KKyAgICAgICAgZG93bmNh
c3Q8Q2hhcmFjdGVyRGF0YT4obm9kZSktPnNldERhdGEodG9rZW4uY29udGVudCk7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlBvc2l0aW9uLmgiCisjaW5jbHVkZSA8d3Rm
L0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4K
KyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50OworCitjbGFzcyBUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxUZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlcj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyKERvY3VtZW50Jik7CisKKyAgICBlbnVtIFRva2Vu
SWRlbnRpZmllclR5cGUgeyB9OworICAgIHVzaW5nIFRva2VuSWRlbnRpZmllciA9IE9iamVjdElk
ZW50aWZpZXI8VG9rZW5JZGVudGlmaWVyVHlwZT47CisKKyAgICBzdHJ1Y3QgTWFuaXB1bGF0aW9u
VG9rZW4geworICAgICAgICBUb2tlbklkZW50aWZpZXIgaWRlbnRpZmllcjsKKyAgICAgICAgU3Ry
aW5nIGNvbnRlbnQ7CisKKyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OworICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0
aWMgT3B0aW9uYWw8TWFuaXB1bGF0aW9uVG9rZW4+IGRlY29kZShEZWNvZGVyJik7CisgICAgfTsK
KworICAgIGVudW0gSXRlbUlkZW50aWZpZXJUeXBlIHsgfTsKKyAgICB1c2luZyBJdGVtSWRlbnRp
ZmllciA9IE9iamVjdElkZW50aWZpZXI8SXRlbUlkZW50aWZpZXJUeXBlPjsKKworICAgIHVzaW5n
IE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjayA9IFdURjo6RnVuY3Rpb248dm9pZChEb2N1bWVudCYs
IEl0ZW1JZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+Jik+OworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc3RhcnRPYnNlcnZpbmdQYXJhZ3JhcGhzKE1hbmlwdWxhdGlv
bkl0ZW1DYWxsYmFjayYmKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgY29tcGxldGVNYW5p
cHVsYXRpb24oSXRlbUlkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4m
KTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgTWFuaXB1bGF0aW9uSXRlbSB7CisgICAgICAgIFBv
c2l0aW9uIHN0YXJ0OworICAgICAgICBQb3NpdGlvbiBlbmQ7CisgICAgICAgIFZlY3RvcjxNYW5p
cHVsYXRpb25Ub2tlbj4gdG9rZW5zOworICAgIH07CisKKyAgICB2b2lkIGFkZEl0ZW0oY29uc3Qg
UG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcGgsIGNvbnN0IFBvc2l0aW9uJiBlbmRPZlBhcmFncmFw
aCwgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiYmKTsKKyAgICBib29sIHJlcGxhY2UoY29uc3Qg
TWFuaXB1bGF0aW9uSXRlbSYsIGNvbnN0IFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4mKTsKKwor
ICAgIFdlYWtQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CisgICAgTWFuaXB1bGF0aW9uSXRlbUNh
bGxiYWNrIG1fY2FsbGJhY2s7CisgICAgSGFzaE1hcDxJdGVtSWRlbnRpZmllciwgTWFuaXB1bGF0
aW9uSXRlbT4gbV9pdGVtczsKKyAgICBJdGVtSWRlbnRpZmllciBtX2l0ZW1JZGVudGlmaWVyOwor
ICAgIFRva2VuSWRlbnRpZmllciBtX3Rva2VuSWRlbnRpZmllcjsKK307CisKK3RlbXBsYXRlPGNs
YXNzIEVuY29kZXI+Cit2b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRp
b25Ub2tlbjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8
PCBpZGVudGlmaWVyIDw8IGNvbnRlbnQ7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitP
cHRpb25hbDxUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+IFRl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbjo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCit7CisgICAgTWFuaXB1bGF0aW9uVG9rZW4gcmVzdWx0OworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlkZW50aWZpZXIpKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNvbnRlbnQpKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTE0OTQpCisrKyBTb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDE5LTEw
LTIzICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIG1l
Y2hhbmlzbSB0byBmaW5kIGFuZCBtYW5pcHVsYXRlIHRleHQgYnkgcGFyYWdyYXBocworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMjg2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRy
b2R1Y2VzIGEgbmV3IFNQSSB0byBmaW5kIHBhcmFncmFwaHMgb2YgdGV4dCBhbmQgbGV0IGNsaWVu
dCByZXBsYWNlIHRoZSBjb250ZW50IG9mIGVhY2ggcGFyYWdyYXBoLgorICAgICAgICBGb3Igbm93
LCB0aGlzIFNQSSBpcyBsaW1pdGVkIHRvIGZpbmQgJiByZXBsYWNlIGNvbnRlbnRzIG9mIG1haW4g
ZnJhbWUncyBkb2N1bWVudC4KKworICAgICAgICBXS1dlYlZpZXcncyBfc3RhcnRUZXh0TWFuaXB1
bGF0aW9uc1dpdGhDb21wbGV0aW9uSGFuZGxlciBzZW5kcyBTdGFydFRleHRNYW5pcHVsYXRpb25z
IG1lc3NhZ2UgdG8gV2ViQ29udGVudCBwcm9jZXNzCisgICAgICAgIHRvIGZpbmQgYWxsIHBhcmFn
cmFwaHMgaW4gdGhlIG1haW4gZnJhbWUuIFdlYkNvbnRlbnQgcHJvY2VzcyB3aWxsIHNlbmQgYmFj
ayBEaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW0gbWVzc2FnZQorICAgICAgICBmb3IgZWFjaCBw
YXJhZ3JhcGgsIHdoaWNoIGluIHR1cm4gY2FsbHMgYmFjayBfV0tUZXh0TWFuaXB1bGF0aW9uRGVs
ZWdhdGUncyBfd2ViVmlldzogZGlkRmluZEl0ZW06IGZvckZyYW1lOi4KKworICAgICAgICBVcG9u
IHJlY2VpdmluZyB0aGlzIGRlbGVnYXRlIGNhbGxiYWNrLCB0aGUgY2xpZW50IGNhbiBpbnZva2Ug
V0tXZWJWaWV3J3MgX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbiB0byByZXBsYWNlCisgICAgICAg
IHRoZSBjb250ZW50LiBJdCB3aWxsIHNlbmQgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uIHRvIFdl
YkNvbnRlbnQgcHJvY2Vzcywgd2hpY2ggd2lsbCBpbnZva2UgY29tcGxldGVNYW5pcHVsYXRpb24K
KyAgICAgICAgb24gbWFpbiBmcmFtZSdzIGRvY3VtZW50J3MgVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXIuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGVdKTogQWRlZC4KKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6XSk6IEFkZWQu
CisgICAgICAgIChzdHJpbmdJZGVudGlmaWVyRm9yRnJhbWVBbmRJdGVtKTogQWRkZWQuIFRyYW5z
Y29kZXMgZnJhbWUgSUQgJiBpdGVtIElEIGFzIGEgc3RyaW5nIGlkZW50aWZpZXIgZm9yIHRoZSBj
bGllbnRzLgorICAgICAgICAoZnJhbWVBbmRJdGVtSWRlbnRpZmllcnNGcm9tU3RyaW5nKTogQWRk
ZWQuIERlY29kZXMgZnJhbWUgSUQgJiBpdGVtIElEIGZyb20gdGhlIHN0cmluZyBpZGVudGlmaWVy
LiAKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbXBs
ZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2NvbXBsZXRlVGV4dE1hbmlw
dWxhdGlvbjpjb21wbGV0aW9uOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJWaWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1h
bmlwdWxhdGlvbkRlbGVnYXRlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0uaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5tbTogQWRkZWQuCisgICAgICAgICgt
W19XS1RleHRNYW5pcHVsYXRpb25JdGVtIGluaXRXaXRoSWRlbnRpZmllcjp0b2tlbnM6XSk6Cisg
ICAgICAgICgtW19XS1RleHRNYW5pcHVsYXRpb25JdGVtIGlkZW50aWZpZXJdKToKKyAgICAgICAg
KC1bX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gdG9rZW5zXSk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaDogQWRkZWQuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4ubW06IEFkZGVkLgor
ICAgICAgICAoLVtfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gaW5pdF0pOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OmRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6Y29tcGxldGVUZXh0TWFuaXB1bGF0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5p
bjoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OnN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpj
b21wbGV0ZVRleHRNYW5pcHVsYXRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMu
aW46CisKIDIwMTktMTAtMjMgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgV2ViIEluc3BlY3Rvcjogbm90aWZ5IGluc3BlY3RvciB3aGVuIHByb3Zpc2lv
bmFsIHBhZ2UgaXMgY3JlYXRlZCwgY29tbWl0dGVkIGFuZCBkZXN0cm95ZWQKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gMjUxNDk0KQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTQxOSw2ICs5NDE5LDM0IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRNb2NrV2ViQXV0aGVu
dGljYXQKIH0KICNlbmRpZgogCit2b2lkIFdlYlBhZ2VQcm94eTo6c3RhcnRUZXh0TWFuaXB1bGF0
aW9ucyhUZXh0TWFuaXB1bGF0aW9uSXRlbUNhbGxiYWNrJiYgY2FsbGJhY2ssIFdURjo6Q29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGlmICghaGFz
UnVubmluZ1Byb2Nlc3MoKSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIG1fdGV4dE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spOworICAgIG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OlN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMoKSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlciksIG1fd2ViUGFnZUlEKTsKK30KKwordm9pZCBXZWJQYWdl
UHJveHk6OmRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbShXZWJDb3JlOjpGcmFtZUlkZW50aWZp
ZXIgZnJhbWVJZGVudGlmaWVyLCBXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6
SXRlbUlkZW50aWZpZXIgaXRlbUlkZW50aWZpZXIsCisgICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6
OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4mIHRva2VucykK
K3sKKyAgICBpZiAoIW1fdGV4dE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjaykKKyAgICAgICAgcmV0
dXJuOworICAgIG1fdGV4dE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjayhmcmFtZUlkZW50aWZpZXIs
IGl0ZW1JZGVudGlmaWVyLCB0b2tlbnMpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6Y29tcGxl
dGVUZXh0TWFuaXB1bGF0aW9uKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBXZWJD
b3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIgaXRlbUlELAor
ICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFu
aXB1bGF0aW9uVG9rZW4+JiB0b2tlbnMsIFdURjo6RnVuY3Rpb248dm9pZCAoYm9vbCBzdWNjZXNz
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkp
IHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OldlYlBhZ2U6OkNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihmcmFtZUlELCBpdGVtSUQs
IHRva2VucyksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBtX3dlYlBhZ2VJRCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjdW5kZWYgTUVSR0VfV0hFRUxfRVZFTlRTCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMjUxNDk0KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTkzLDYgKzkzLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NlYXJjaFBvcHVwTWVudS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvVGV4dENoZWNraW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0
R3JhbnVsYXJpdHkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Vc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9WaWV3cG9ydEFyZ3VtZW50cy5oPgogI2luY2x1ZGUgPG1lbW9y
eT4KQEAgLTE2MTEsNiArMTYxMiwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNb2NrV2ViQXV0
aGVudGljYXRpb25Db25maWd1cmF0aW9uKFdlYkNvcmU6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNv
bmZpZ3VyYXRpb24mJik7CiAjZW5kaWYKIAorICAgIHVzaW5nIFRleHRNYW5pcHVsYXRpb25JdGVt
Q2FsbGJhY2sgPSBXVEY6OkZ1bmN0aW9uPHZvaWQgKFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciwg
V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyLCBjb25z
dCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlv
blRva2VuPiYpPjsKKyAgICB2b2lkIHN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMoVGV4dE1hbmlwdWxh
dGlvbkl0ZW1DYWxsYmFjayYmLCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Cisg
ICAgdm9pZCBkaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW0oV2ViQ29yZTo6RnJhbWVJZGVudGlm
aWVyLCBXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIs
IGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1
bGF0aW9uVG9rZW4+Jik7CisgICAgdm9pZCBjb21wbGV0ZVRleHRNYW5pcHVsYXRpb24oV2ViQ29y
ZTo6RnJhbWVJZGVudGlmaWVyLCBXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6
SXRlbUlkZW50aWZpZXIsCisgICAgICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+JiwgV1RGOjpGdW5jdGlvbjx2b2lk
IChib29sIHN1Y2Nlc3MpPiYmKTsKKwogcHJpdmF0ZToKICAgICBXZWJQYWdlUHJveHkoUGFnZUNs
aWVudCYsIFdlYlByb2Nlc3NQcm94eSYsIFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiYmKTsK
ICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwpAQCAtMjU3NCw2ICsyNTgxLDggQEAgcHJp
dmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3VzcGVuZGVkUGFnZVByb3h5PiBtX3N1c3BlbmRl
ZFBhZ2VLZXB0VG9QcmV2ZW50Rmxhc2hpbmc7CiAgICAgV2Vha1B0cjxTdXNwZW5kZWRQYWdlUHJv
eHk+IG1fbGFzdFN1c3BlbmRlZFBhZ2U7CiAKKyAgICBUZXh0TWFuaXB1bGF0aW9uSXRlbUNhbGxi
YWNrIG1fdGV4dE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjazsKKwogI2lmIEhBVkUoUEVOQ0lMS0lU
KQogICAgIHN0ZDo6dW5pcXVlX3B0cjxFZGl0YWJsZUltYWdlQ29udHJvbGxlcj4gbV9lZGl0YWJs
ZUltYWdlQ29udHJvbGxlcjsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjUxNDk0KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNv
cHkpCkBAIC01ODEsNCArNTgxLDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBT
ZW5kTWVzc2FnZVRvV2ViVmlldyhzdHJ1Y3QgV2ViS2l0OjpVc2VyTWVzc2FnZSB1c2VyTWVzc2Fn
ZSkKICAgICBTZW5kTWVzc2FnZVRvV2ViVmlld1dpdGhSZXBseShzdHJ1Y3QgV2ViS2l0OjpVc2Vy
TWVzc2FnZSB1c2VyTWVzc2FnZSkgLT4gKHN0cnVjdCBXZWJLaXQ6OlVzZXJNZXNzYWdlIHJlcGx5
TWVzc2FnZSkgQXN5bmMKICNlbmRpZgorCisgICAgRGlkRmluZFRleHRNYW5pcHVsYXRpb25JdGVt
KFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBXZWJDb3JlOjpUZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIgaWRlbnRpZmllciwgVmVjdG9yPFdlYkNvcmU6
OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zKQor
CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXcubW0JKHJldmlzaW9uIDI1MTQ5NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDkgQEAKICNpbXBv
cnQgIl9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1Nlc3Np
b25TdGF0ZUludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tUZXh0SW5wdXRDb250ZXh0SW50ZXJuYWwu
aCIKKyNpbXBvcnQgIl9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oIgorI2ltcG9ydCAiX1dL
VGV4dE1hbmlwdWxhdGlvbkl0ZW0uaCIKKyNpbXBvcnQgIl9XS1RleHRNYW5pcHVsYXRpb25Ub2tl
bi5oIgogI2ltcG9ydCAiX1dLVmlzaXRlZExpbmtTdG9yZUludGVybmFsLmgiCiAjaW1wb3J0ICJf
V0tXZWJzaXRlUG9saWNpZXNJbnRlcm5hbC5oIgogI2ltcG9ydCA8V2ViQ29yZS9FbGVtZW50Q29u
dGV4dC5oPgpAQCAtMTEzLDYgKzExNiw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1NldHRpbmdzLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TdHJp
bmdVdGlsaXRpZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvVmFsaWRhdGlvbkJ1YmJsZS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9WaWV3cG9ydEFyZ3VtZW50cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Xcml0aW5nTW9kZS5o
PgpAQCAtMjc2LDYgKzI4MCw4IEBAIHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpTY3JvbGxiYXJP
dmVybGEKIAogICAgIEJPT0wgX3VzZVBsYXRmb3JtRmluZFVJOwogCisgICAgV2Vha09iakNQdHI8
aWQgPF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4+IF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdh
dGU7CisKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIFJldGFpblB0cjxfV0tSZW1vdGVP
YmplY3RSZWdpc3RyeT4gX3JlbW90ZU9iamVjdFJlZ2lzdHJ5OwogCkBAIC03NDM5LDYgKzc0NDUs
MTAxIEBAIC0gKHZvaWQpX2V4ZWN1dGVFZGl0Q29tbWFuZDooTlNTdHJpbmcgKikKICAgICB9KTsK
IH0KIAorLSAoaWQgPF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4pX3RleHRNYW5pcHVsYXRp
b25EZWxlZ2F0ZQoreworICAgIHJldHVybiBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmdldEF1
dG9yZWxlYXNlZCgpOworfQorCistICh2b2lkKV9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6
KGlkIDxfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU+KWRlbGVnYXRlCit7CisgICAgX3RleHRN
YW5pcHVsYXRpb25EZWxlZ2F0ZSA9IGRlbGVnYXRlOworfQorCitzdGF0aWMgU3RyaW5nIHN0cmlu
Z0lkZW50aWZpZXJGb3JGcmFtZUFuZEl0ZW0oV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyIGZyYW1l
SUQsIFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRlbnRpZmllciBp
dGVtSUQpCit7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZE51
bWJlcihmcmFtZUlELnRvVUludDY0KCkpOworICAgIHJlc3VsdC5hcHBlbmQoJzonKTsKKyAgICBy
ZXN1bHQuYXBwZW5kTnVtYmVyKGl0ZW1JRC50b1VJbnQ2NCgpKTsKKyAgICByZXR1cm4gcmVzdWx0
LnRvU3RyaW5nKCk7Cit9CisKK3N0cnVjdCBUZXh0TWFuaXB1bGF0aW9uSWRlbnRpZmllcnMgewor
ICAgIFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBmcmFtZUlEOworICAgIFdlYkNvcmU6OlRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRlbnRpZmllciBpdGVtSUQ7Cit9OworCitzdGF0
aWMgT3B0aW9uYWw8VGV4dE1hbmlwdWxhdGlvbklkZW50aWZpZXJzPiBmcmFtZUFuZEl0ZW1JZGVu
dGlmaWVyc0Zyb21TdHJpbmcoU3RyaW5nIHN0cmluZ0lkZW50aWZpZXIpCit7CisgICAgVGV4dE1h
bmlwdWxhdGlvbklkZW50aWZpZXJzIHJlc3VsdDsKKyAgICBmb3IgKGF1dG8gcGFydCA6IFN0cmlu
Z1ZpZXcoc3RyaW5nSWRlbnRpZmllcikuc3BsaXQoJzonKSkgeworICAgICAgICBhdXRvIG51bWJl
ciA9IHBhcnQudG9VSW50NjRTdHJpY3QoKTsKKyAgICAgICAgaWYgKCFudW1iZXIgfHwgKHJlc3Vs
dC5mcmFtZUlEICYmIHJlc3VsdC5pdGVtSUQpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgaWYgKCFyZXN1bHQuZnJhbWVJRCkKKyAgICAgICAgICAgIHJlc3VsdC5m
cmFtZUlEID0gV2ViQ29yZTo6ZnJhbWVJZGVudGlmaWVyRnJvbUlEKCpudW1iZXIpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICByZXN1bHQuaXRlbUlEID0gbWFrZU9iamVjdElkZW50aWZpZXI8
V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyVHlwZT4o
Km51bWJlcik7CisgICAgfQorICAgIGlmICghcmVzdWx0LmZyYW1lSUQgfHwgIXJlc3VsdC5pdGVt
SUQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworLSAodm9pZClfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCheKSgpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgaWYgKCFfdGV4dE1hbmlwdWxhdGlv
bkRlbGVnYXRlKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFfcGFnZSkKKyAgICAgICAgcmV0
dXJuOworICAgIF9wYWdlLT5zdGFydFRleHRNYW5pcHVsYXRpb25zKFt3ZWFrU2VsZiA9IFdlYWtP
YmpDUHRyPFdLV2ViVmlldz4oc2VsZildIChXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIgZnJhbWVJ
ZGVudGlmaWVyLAorICAgICAgICBXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6
SXRlbUlkZW50aWZpZXIgaXRlbUlkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+JiB0b2tlbnMpIHsKKyAg
ICAgICAgaWYgKCF3ZWFrU2VsZikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRv
IHJldGFpbmVkU2VsZiA9IHdlYWtTZWxmLmdldCgpOworICAgICAgICBhdXRvIGRlbGVnYXRlID0g
cmV0YWluZWRTZWxmLmdldCgpLl90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU7CisgICAgICAgIGlm
ICghZGVsZWdhdGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgTlNNdXRhYmxlQXJy
YXkgKndrVG9rZW5zID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OiB0b2tlbnMu
c2l6ZSgpXTsKKyAgICAgICAgZm9yIChhdXRvJiB0b2tlbiA6IHRva2VucykgeworICAgICAgICAg
ICAgYXV0byB3a1Rva2VuID0gYWRvcHROUyhbW19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiBhbGxv
Y10gaW5pdF0pOworICAgICAgICAgICAgd2tUb2tlbi5nZXQoKS5pZGVudGlmaWVyID0gU3RyaW5n
OjpudW1iZXIodG9rZW4uaWRlbnRpZmllci50b1VJbnQ2NCgpKTsKKyAgICAgICAgICAgIHdrVG9r
ZW4uZ2V0KCkuY29udGVudCA9IHRva2VuLmNvbnRlbnQ7CisgICAgICAgICAgICBbd2tUb2tlbnMg
YWRkT2JqZWN0OndrVG9rZW4uZ2V0KCldOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBpZGVu
dGlmaWVyID0gc3RyaW5nSWRlbnRpZmllckZvckZyYW1lQW5kSXRlbShmcmFtZUlkZW50aWZpZXIs
IGl0ZW1JZGVudGlmaWVyKTsKKyAgICAgICAgYXV0byBpdGVtID0gYWRvcHROUyhbW19XS1RleHRN
YW5pcHVsYXRpb25JdGVtIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6aWRlbnRpZmllciB0b2tl
bnM6d2tUb2tlbnNdKTsKKyAgICAgICAgW2RlbGVnYXRlIF93ZWJWaWV3OnJldGFpbmVkU2VsZi5n
ZXQoKSBkaWRGaW5kSXRlbTppdGVtLmdldCgpIGZvckZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUhh
bmRsZTo6Y3JlYXRlKGZyYW1lSWRlbnRpZmllcikpXTsKKyAgICB9LCBbY2FwdHVyZWRDb21wbGV0
aW9uQmxvY2sgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoKSB7CisgICAgICAg
IGNhcHR1cmVkQ29tcGxldGlvbkJsb2NrKCk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpX2NvbXBs
ZXRlVGV4dE1hbmlwdWxhdGlvbjooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVtIGNvbXBs
ZXRpb246KHZvaWQoXikoQk9PTCBzdWNjZXNzKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIGlm
ICghX3BhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcmVzdWx0ID0gZnJhbWVBbmRJ
dGVtSWRlbnRpZmllcnNGcm9tU3RyaW5nKFN0cmluZyB7IGl0ZW0uaWRlbnRpZmllciB9KTsKKyAg
ICBpZiAoIXJlc3VsdCkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuPiB0b2tlbnM7CisgICAgZm9yIChfV0tUZXh0
TWFuaXB1bGF0aW9uVG9rZW4gKndrVG9rZW4gaW4gaXRlbS50b2tlbnMpIHsKKyAgICAgICAgYXV0
byB0b2tlbklEID0gbWFrZU9iamVjdElkZW50aWZpZXI8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI6OlRva2VuSWRlbnRpZmllclR5cGU+KFN0cmluZyh3a1Rva2VuLmlkZW50aWZp
ZXIpLnRvVUludDY0KCkpOworICAgICAgICB0b2tlbnMuYXBwZW5kKFdlYkNvcmU6OlRleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbiB7IHRva2VuSUQsIHdrVG9rZW4u
Y29udGVudCB9KTsKKyAgICB9CisKKyAgICBfcGFnZS0+Y29tcGxldGVUZXh0TWFuaXB1bGF0aW9u
KHJlc3VsdC0+ZnJhbWVJRCwgcmVzdWx0LT5pdGVtSUQsIHRva2VucywgW2NhcHR1cmVkQ29tcGxl
dGlvbkJsb2NrID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKGJvb2wgc3VjY2Vz
cykgeworICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25CbG9jayhzdWNjZXNzKTsKKyAgICB9KTsK
K30KKwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKIC0gKENHUmVjdClfZHJhZ0NhcmV0UmVj
dApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJWaWV3UHJpdmF0ZS5oCShyZXZpc2lvbiAyNTE0OTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMs
NiArMTEzLDcgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1JlY3RFZAogQGNs
YXNzIF9XS1NhZmVCcm93c2luZ1dhcm5pbmc7CiBAY2xhc3MgX1dLU2Vzc2lvblN0YXRlOwogQGNs
YXNzIF9XS1RleHRJbnB1dENvbnRleHQ7CitAY2xhc3MgX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW07
CiBAY2xhc3MgX1dLVGh1bWJuYWlsVmlldzsKIEBjbGFzcyBfV0tXZWJzaXRlUG9saWNpZXM7CiBA
Y2xhc3MgX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVyOwpAQCAtMTIwLDkgKzEyMSwxMCBAQCB0eXBl
ZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLUmVjdEVkCiBAcHJvdG9jb2wgV0tIaXN0b3J5
RGVsZWdhdGVQcml2YXRlOwogQHByb3RvY29sIF9XS0RpYWdub3N0aWNMb2dnaW5nRGVsZWdhdGU7
CiBAcHJvdG9jb2wgX1dLRmluZERlbGVnYXRlOworQHByb3RvY29sIF9XS0Z1bGxzY3JlZW5EZWxl
Z2F0ZTsKIEBwcm90b2NvbCBfV0tJY29uTG9hZGluZ0RlbGVnYXRlOwogQHByb3RvY29sIF9XS0lu
cHV0RGVsZWdhdGU7Ci1AcHJvdG9jb2wgX1dLRnVsbHNjcmVlbkRlbGVnYXRlOworQHByb3RvY29s
IF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTsKIAogQGludGVyZmFjZSBXS1dlYlZpZXcgKFdL
UHJpdmF0ZSkKIApAQCAtNTc1LDYgKzU3NywxMCBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50
ZWdlciwgX1dLUmVjdEVkCiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIF9XS0luc3Bl
Y3RvciAqX2luc3BlY3RvciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIu
MikpOwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tGcmFtZUhhbmRsZSAqX21h
aW5GcmFtZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogCitA
cHJvcGVydHkgKG5vbmF0b21pYywgd2Vhaywgc2V0dGVyPV9zZXRUZXh0TWFuaXB1bGF0aW9uRGVs
ZWdhdGU6KSBpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlPiBfdGV4dE1hbmlwdWxhdGlv
bkRlbGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CistICh2b2lkKV9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbXBsZXRpb25IYW5k
bGVyOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9jb21wbGV0ZVRleHRN
YW5pcHVsYXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICopaXRlbSBjb21wbGV0aW9uOih2
b2lkKF4pKEJPT0wgc3VjY2VzcykpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwogQHByb3BlcnR5IChub25hdG9t
aWMsIHNldHRlcj1fc2V0U2Nyb2xsaW5nVXBkYXRlc0Rpc2FibGVkRm9yVGVzdGluZzopIEJPT0wg
X3Njcm9sbGluZ1VwZGF0ZXNEaXNhYmxlZEZvclRlc3RpbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIAogLSAodm9pZClfcHJvY2Vzc1dpbGxT
dXNwZW5kSW1taW5lbnRseUZvclRlc3Rpbmc7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25EZWxl
Z2F0ZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0L1dLRm91bmRhdGlvbi5oPgorCisj
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworQGNsYXNzIF9XS0ZyYW1lSGFuZGxl
OworQGNsYXNzIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtOworCitAcHJvdG9jb2wgX1dLVGV4dE1h
bmlwdWxhdGlvbkRlbGVnYXRlIDxOU09iamVjdD4KKworQG9wdGlvbmFsCisKKy0gKHZvaWQpX3dl
YlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkRmluZEl0ZW06KF9XS1RleHRNYW5pcHVsYXRp
b25JdGVtICopaXRlbSBmb3JGcmFtZTooX1dLRnJhbWVIYW5kbGUgKilmcmFtZTsKKworQGVuZAor
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxh
dGlvbkl0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0L1dL
Rm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworQGNs
YXNzIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbjsKKworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29z
KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS1RleHRNYW5pcHVs
YXRpb25JdGVtIDogTlNPYmplY3QKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSWRlbnRpZmll
cjooTlNTdHJpbmcgKilpZGVudGlmaWVyIHRva2VuczooTlNBcnJheTxfV0tUZXh0TWFuaXB1bGF0
aW9uVG9rZW4gKj4gKil0b2tlbnM7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwg
Y29weSkgTlNTdHJpbmcgKmlkZW50aWZpZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9u
bHksIGNvcHkpIE5TQXJyYXk8X1dLVGV4dE1hbmlwdWxhdGlvblRva2VuICo+ICp0b2tlbnM7CisK
K0BlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFu
aXB1bGF0aW9uSXRlbS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0ubW0JKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25JdGVtLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0uaCIKKworI2ltcG9y
dCA8d3RmL1JldGFpblB0ci5oPgorCitAaW1wbGVtZW50YXRpb24gX1dLVGV4dE1hbmlwdWxhdGlv
bkl0ZW0geworICAgIFJldGFpblB0cjxOU1N0cmluZz4gX2lkZW50aWZpZXI7CisgICAgUmV0YWlu
UHRyPE5TQXJyYXk8X1dLVGV4dE1hbmlwdWxhdGlvblRva2VuICo+PiBfdG9rZW5zOworfQorCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIg
dG9rZW5zOihOU0FycmF5PF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiAqPiAqKXRva2Vucworewor
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyOworICAgIF90b2tlbnMgPSB0b2tlbnM7CisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKE5TU3RyaW5nICopaWRlbnRpZmllcgoreworICAgIHJldHVy
biBfaWRlbnRpZmllci5nZXQoKTsKK30KKworLSAoTlNBcnJheTxfV0tUZXh0TWFuaXB1bGF0aW9u
VG9rZW4gKj4gKil0b2tlbnMKK3sKKyAgICByZXR1cm4gX3Rva2Vucy5nZXQoKTsKK30KKworQGVu
ZApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVs
YXRpb25Ub2tlbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFdlYktp
dC9XS0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisK
K1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQor
QGludGVyZmFjZSBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gOiBOU09iamVjdAorCitAcHJvcGVy
dHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKmlkZW50aWZpZXI7CitAcHJvcGVydHkgKG5v
bmF0b21pYywgY29weSkgTlNTdHJpbmcgKmNvbnRlbnQ7CisKK0BlbmQKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4ubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5p
cHVsYXRpb25Ub2tlbi5tbQkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmgiCisKKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KKworQGltcGxlbWVudGF0aW9uIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiB7Cit9CisKKy0g
KGluc3RhbmNldHlwZSlpbml0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjUxNDk0KQorKysgU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTMzMyw2ICsxMzMzLDExIEBACiAJCTk5RTcxNEM1MUMx
MjRBMDQwMDY2NUIzQSAvKiBfV0tBdXRvbWF0aW9uRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5RTcxNEMxMUMxMjQ5RTYwMDY2NUIzQSAv
KiBfV0tBdXRvbWF0aW9uRGVsZWdhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk5OUU3MTg5QTIxRjc5RDlFMDA1NUU5NzUgLyogX1dLVG91Y2hF
dmVudEdlbmVyYXRvci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk5RTcxODk2MjFGNzlEOUQwMDU1RTk3NSAvKiBfV0tUb3VjaEV2ZW50R2VuZXJhdG9y
Lm1tICovOyB9OwogCQk5OUU3MTg5QzIxRjc5RDlFMDA1NUU5NzUgLyogX1dLVG91Y2hFdmVudEdl
bmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTlFNzE4OTgyMUY3OUQ5RTAwNTVFOTc1IC8qIF9XS1RvdWNoRXZlbnRHZW5lcmF0b3IuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk5QjAyRTBDQjIz
NUVCOTUzMDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAyRTBDOTIzNUVCNjJEMDA0
MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOUIwMkUwQ0MyMzVFQjk1NzAwNDA0NEIy
IC8qIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAyRTBDQTIzNUVCODg0MDA0MDQ0QjIgLyogX1dLVGV4dE1h
bmlwdWxhdGlvbkl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk5QjAyRTBDRjIzNUVCQjE0MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlv
blRva2VuLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OUIwMkUwQ0UyMzVFQkIxNDAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbSAq
LzsgfTsKKwkJOUIwMkUwRDEyMzVFQkNDQTAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25J
dGVtLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIw
MkUwRDAyMzVFQkNDQTAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtLm1tICovOyB9
OworCQk5QjAyRTBENzIzNUZDOTRGMDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvblRva2Vu
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAyRTBD
RDIzNUVCOTY3MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOUZCNUYzOTUxNjlFNkE4
MDAwMkMyNUJGIC8qIFdLQ29udGV4dFByaXZhdGVNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGQjVGMzkzMTY5RTZBODAwMDJDMjVCRiAvKiBXS0Nv
bnRleHRQcml2YXRlTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQTEwMkE3MDgxRUMwRUVFOTAwRDgxRDgyIC8qIGNvbS5tYWNyb21lZGlhLkZs
YXNoIFBsYXllciBFU1IucGx1Z2luLnNiIGluIENvcHkgUGx1Zy1pbiBTYW5kYm94IFByb2ZpbGVz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBNUUzOTQ5MUQ1QkQ4QTcwMEI0
QjdDRSAvKiBjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIgRVNSLnBsdWdpbi5zYiAqLzsgfTsK
IAkJQTEwNDZFQTEyMDc5MjYzMTAwRjBDNUQ4IC8qIFdLUERGVmlldy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwNDZFOUYyMDc5MjYzMTAwRjBDNUQ4
IC8qIFdLUERGVmlldy5oICovOyB9OwpAQCAtMTcyOCw4ICsxNzMzLDYgQEAKIAkJCWNvbXBpbGVy
U3BlYyA9IGNvbS5hcHBsZS5jb21waWxlcnMucHJveHkuc2NyaXB0OwogCQkJZmlsZVBhdHRlcm5z
ID0gIiouaCI7CiAJCQlmaWxlVHlwZSA9IHBhdHRlcm4ucHJveHk7Ci0JCQlpbnB1dEZpbGVzID0g
KAotCQkJKTsKIAkJCWlzRWRpdGFibGUgPSAxOwogCQkJb3V0cHV0RmlsZXMgPSAoCiAJCQkJIiQo
SEVBREVSX09VVFBVVF9ESVIpLyQoSU5QVVRfRklMRV9OQU1FKSIsCkBAIC00MDQ2LDYgKzQwNDks
MTEgQEAKIAkJOTlFNzE4OTYyMUY3OUQ5RDAwNTVFOTc1IC8qIF9XS1RvdWNoRXZlbnRHZW5lcmF0
b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBfV0tUb3VjaEV2
ZW50R2VuZXJhdG9yLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5OUU3MTg5ODIx
Rjc5RDlFMDA1NUU5NzUgLyogX1dLVG91Y2hFdmVudEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBfV0tUb3VjaEV2ZW50R2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTk5RjY0MkQyMUZBQkUzNzgwMDk2MjFFOSAvKiBDb29yZGluYXRl
U3lzdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvb3JkaW5hdGVTeXN0
ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUIwMkUwQzkyMzVFQjYyRDAwNDA0
NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tU
ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
OUIwMkUwQ0EyMzVFQjg4NDAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IF9XS1RleHRNYW5pcHVsYXRpb25JdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTlCMDJFMENEMjM1RUI5NjcwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0
aW9uVG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCMDJFMENFMjM1RUJCMTQwMDQwNDRCMiAvKiBf
V0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBfV0tUZXh0
TWFuaXB1bGF0aW9uVG9rZW4ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCMDJF
MEQwMjM1RUJDQ0EwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IF9XS1RleHRNYW5pcHVsYXRpb25JdGVtLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5QkM1OUQ2QzFFRkNDQ0I2MDAxRThEMDkgLyogQ2FsbGJhY2tJRC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsYmFja0lELmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCQzU5RDZEMUVGQ0RDNkQwMDFFOEQwOSAvKiBPcHRpb25h
bENhbGxiYWNrSUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9uYWxD
YWxsYmFja0lELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlGNTRGODhFMTY0ODhF
ODcwMDdERjgxQSAvKiBBdXhpbGlhcnlQcm9jZXNzTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTYzNDUsNiArNjM1MywxMSBAQAogCQkJCTJERTlCMTM4MjIzMUY2
MUMwMDUyODdCNyAvKiBfV0tUZXh0SW5wdXRDb250ZXh0LmggKi8sCiAJCQkJMkRFOUIxMzcyMjMx
RjYxQzAwNTI4N0I3IC8qIF9XS1RleHRJbnB1dENvbnRleHQubW0gKi8sCiAJCQkJMkRFOUIxM0Iy
MjMxRjc3QzAwNTI4N0I3IC8qIF9XS1RleHRJbnB1dENvbnRleHRJbnRlcm5hbC5oICovLAorCQkJ
CTlCMDJFMEM5MjM1RUI2MkQwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUu
aCAqLywKKwkJCQk5QjAyRTBDQTIzNUVCODg0MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlv
bkl0ZW0uaCAqLywKKwkJCQk5QjAyRTBEMDIzNUVCQ0NBMDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlw
dWxhdGlvbkl0ZW0ubW0gKi8sCisJCQkJOUIwMkUwQ0QyMzVFQjk2NzAwNDA0NEIyIC8qIF9XS1Rl
eHRNYW5pcHVsYXRpb25Ub2tlbi5oICovLAorCQkJCTlCMDJFMENFMjM1RUJCMTQwMDQwNDRCMiAv
KiBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4ubW0gKi8sCiAJCQkJMkQ2QjM3MTkxOEE5NjdBRDAw
NDJBRTgwIC8qIF9XS1RodW1ibmFpbFZpZXcuaCAqLywKIAkJCQkyRDZCMzcxQTE4QTk2N0FEMDA0
MkFFODAgLyogX1dLVGh1bWJuYWlsVmlldy5tbSAqLywKIAkJCQkyREFDRTY0RDE4QURCRkYwMDBF
NENBNzYgLyogX1dLVGh1bWJuYWlsVmlld0ludGVybmFsLmggKi8sCkBAIC05MzEwLDYgKzkzMjMs
OSBAQAogCQkJCTFBMDAyRDQzMTk2QjMzNzAwMEI5QUQ0NCAvKiBfV0tTZXNzaW9uU3RhdGVJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRFOUIxM0EyMjMxRjYxQzAwNTI4N0I3IC8qIF9X
S1RleHRJbnB1dENvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERTlCMTNDMjIzMUY3N0Mw
MDUyODdCNyAvKiBfV0tUZXh0SW5wdXRDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAor
CQkJCTlCMDJFMENCMjM1RUI5NTMwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdh
dGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTlCMDJFMENDMjM1RUI5NTcwMDQwNDRCMiAvKiBfV0tU
ZXh0TWFuaXB1bGF0aW9uSXRlbS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOUIwMkUwRDcyMzVGQzk0
RjAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMkQ2QjM3MUIxOEE5NjdBRDAwNDJBRTgwIC8qIF9XS1RodW1ibmFpbFZpZXcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTJEQUNFNjRFMThBREJGRjAwMEU0Q0E3NiAvKiBfV0tUaHVtYm5haWxWaWV3
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5RTcxODlDMjFGNzlEOUUwMDU1RTk3NSAv
KiBfV0tUb3VjaEV2ZW50R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTExMjI1LDYgKzEx
MjQxLDggQEAKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgK
IAkJCQk1Q0JENTk1QzIyODBFREY0MDAyQjIyQUEgLyogX1dLQ3VzdG9tSGVhZGVyRmllbGRzLm1t
IGluIFNvdXJjZXMgKi8sCisJCQkJOUIwMkUwRDEyMzVFQkNDQTAwNDA0NEIyIC8qIF9XS1RleHRN
YW5pcHVsYXRpb25JdGVtLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJOUIwMkUwQ0YyMzVFQkIxNDAw
NDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTk5RTcxODlBMjFGNzlEOUUwMDU1RTk3NSAvKiBfV0tUb3VjaEV2ZW50R2VuZXJhdG9yLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMkQ5MkE3ODQyMTJCNkFCMTAwRjQ5M0ZEIC8qIEFjdGl2aXR5QXNz
ZXJ0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEOTJBNzdCMjEyQjZBNzEwMEY0OTNGRCAv
KiBBcmd1bWVudENvZGVycy5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAyNTE0OTQpCisrKyBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjgyOSw2ICs2ODI5LDU2IEBAIE9wdGlvbmFsPFdlYkNvcmU6OkVsZW1lbnRDb250ZXh0
PiBXZWJQYWcKICAgICByZXR1cm4gV2ViQ29yZTo6RWxlbWVudENvbnRleHQgeyBlbGVtZW50UmVj
dEluUm9vdFZpZXdDb29yZGluYXRlcyhlbGVtZW50LCAqZnJhbWUpLCBtX2lkZW50aWZpZXIsIGRv
Y3VtZW50LmlkZW50aWZpZXIoKSwgZG9jdW1lbnQuaWRlbnRpZmllckZvckVsZW1lbnQoZWxlbWVu
dCkgfTsKIH0KIAordm9pZCBXZWJQYWdlOjpzdGFydFRleHRNYW5pcHVsYXRpb25zKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBpZiAoIW1fcGFn
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBtYWluRG9jdW1lbnQgPSBtYWtlUmVmUHRy
KG1fcGFnZS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKSk7CisgICAgaWYgKCFtYWluRG9jdW1lbnQp
CisgICAgICAgIHJldHVybjsKKworICAgIG1haW5Eb2N1bWVudC0+dGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXIoKS5zdGFydE9ic2VydmluZ1BhcmFncmFwaHMoW3dlYlBhZ2UgPSBtYWtlV2Vha1B0
cigqdGhpcyldIChXZWJDb3JlOjpEb2N1bWVudCYgZG9jdW1lbnQsCisgICAgICAgIFdlYkNvcmU6
OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRlbnRpZmllciBpdGVtSWRlbnRpZmll
ciwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5p
cHVsYXRpb25Ub2tlbj4mIHRva2VucykgeworICAgICAgICBhdXRvKiBmcmFtZSA9IGRvY3VtZW50
LmZyYW1lKCk7CisgICAgICAgIGlmICghd2ViUGFnZSB8fCAhZnJhbWUgfHwgd2ViUGFnZS0+bWFp
bkZyYW1lKCkgIT0gZnJhbWUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byog
d2ViRnJhbWUgPSBXZWJGcmFtZTo6ZnJvbUNvcmVGcmFtZSgqZnJhbWUpOworICAgICAgICBpZiAo
IXdlYkZyYW1lKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHdlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmluZFRleHRNYW5pcHVsYXRpb25JdGVtKHdlYkZy
YW1lLT5mcmFtZUlEKCksIGl0ZW1JZGVudGlmaWVyLCB0b2tlbnMpKTsKKyAgICB9KTsKKyAgICAv
LyBGb3Igbm93LCB3ZSBhc3N1bWUgc3RhcnRPYnNlcnZpbmdQYXJhZ3JhcGhzIGZpbmQgYWxsIHBh
cmFncmFwaHMgc3luY2hyb25vdXNseSBhdCBvbmNlLgorICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7
Cit9CisKK3ZvaWQgV2ViUGFnZTo6Y29tcGxldGVUZXh0TWFuaXB1bGF0aW9uKFdlYkNvcmU6OkZy
YW1lSWRlbnRpZmllciBmcmFtZUlELCBXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxl
cjo6SXRlbUlkZW50aWZpZXIgaXRlbUlELAorICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+JiB0b2tlbnMsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgYXV0
byBjb21wbGV0ZU1hbmlwdWxhdGlvbiA9IFsmXSAoKSB7CisgICAgICAgIGlmICghbV9wYWdlKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1dG8mIG1haW5GcmFtZSA9IG1f
cGFnZS0+bWFpbkZyYW1lKCk7CisgICAgICAgIGF1dG8qIHdlYkZyYW1lID0gV2ViRnJhbWU6OmZy
b21Db3JlRnJhbWUobWFpbkZyYW1lKTsKKyAgICAgICAgaWYgKCF3ZWJGcmFtZSB8fCB3ZWJGcmFt
ZS0+ZnJhbWVJRCgpICE9IGZyYW1lSUQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgYXV0byBtYWluRG9jdW1lbnQgPSBtYWtlUmVmUHRyKG1haW5GcmFtZS5kb2N1bWVudCgp
KTsKKyAgICAgICAgaWYgKCFtYWluRG9jdW1lbnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgYXV0byogY29udHJvbGxlciA9IG1haW5Eb2N1bWVudC0+dGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXJJZkV4aXN0cygpOworICAgICAgICBpZiAoIWNvbnRyb2xsZXIpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXItPmNvbXBs
ZXRlTWFuaXB1bGF0aW9uKGl0ZW1JRCwgdG9rZW5zKTsKKyAgICB9OworICAgIGNvbXBsZXRpb25I
YW5kbGVyKGNvbXBsZXRlTWFuaXB1bGF0aW9uKCkpOworfQorCiBQQUw6OlNlc3Npb25JRCBXZWJQ
YWdlOjpzZXNzaW9uSUQoKSBjb25zdAogewogICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5zZXNzaW9uSUQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmgJKHJldmlzaW9uIDI1MTQ5NCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQAogI2lu
Y2x1ZGUgPFdlYkNvcmUvUG9pbnRlcklELmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eVBv
bGljeVZpb2xhdGlvbkV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZURhdGEuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9Vc2VyQWN0aXZpdHkuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJDb250ZW50VHlw
ZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24uaD4K
QEAgLTExOTYsNiArMTE5NywxMCBAQCBwdWJsaWM6CiAgICAgV2ViQ29yZTo6RWxlbWVudCogZWxl
bWVudEZvckNvbnRleHQoY29uc3QgV2ViQ29yZTo6RWxlbWVudENvbnRleHQmKSBjb25zdDsKICAg
ICBPcHRpb25hbDxXZWJDb3JlOjpFbGVtZW50Q29udGV4dD4gY29udGV4dEZvckVsZW1lbnQoV2Vi
Q29yZTo6RWxlbWVudCYpIGNvbnN0OwogCisgICAgdm9pZCBzdGFydFRleHRNYW5pcHVsYXRpb25z
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBjb21wbGV0ZVRleHRNYW5p
cHVsYXRpb24oV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyLCBXZWJDb3JlOjpUZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIsCisgICAgICAgIGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+JiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CisKICNpZiBFTkFCTEUoQVBQTEVfUEFZKQog
ICAgIFdlYlBheW1lbnRDb29yZGluYXRvciogcGF5bWVudENvb3JkaW5hdG9yKCk7CiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMu
aW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjUxNDk0KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNTgyLDQg
KzU4Miw3IEBAIEdlbmVyYXRlU3ludGhldGljRWRpdGluZ0NvbW1hbmQoZW51bTp1aW4KICAgICBT
ZW5kTWVzc2FnZVRvV2ViRXh0ZW5zaW9uKHN0cnVjdCBXZWJLaXQ6OlVzZXJNZXNzYWdlIHVzZXJN
ZXNzYWdlKQogICAgIFNlbmRNZXNzYWdlVG9XZWJFeHRlbnNpb25XaXRoUmVwbHkoc3RydWN0IFdl
YktpdDo6VXNlck1lc3NhZ2UgdXNlck1lc3NhZ2UpIC0+IChzdHJ1Y3QgV2ViS2l0OjpVc2VyTWVz
c2FnZSByZXBseU1lc3NhZ2UpIEFzeW5jCiAjZW5kaWYKKworICAgIFN0YXJ0VGV4dE1hbmlwdWxh
dGlvbnMoKSAtPiAoKSBBc3luYworICAgIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihXZWJDb3Jl
OjpGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1JZGVudGlmaWVyLCBWZWN0b3I8V2ViQ29yZTo6VGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuPiB0b2tlbnMpIC0+IChi
b29sIHN1Y2Nlc3MpIEFzeW5jCiB9CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTE1MDApCisrKyBUb29scy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxOS0xMC0yMyAgUnlvc3VrZSBOaXdh
ICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgYSBtZWNoYW5pc20gdG8gZmluZCBh
bmQgbWFuaXB1bGF0ZSB0ZXh0IGJ5IHBhcmFncmFwaHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzI4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGJhc2ljIEFQSSB0ZXN0cyBmb3IgdGhlIG5l
dyBTUEkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1RleHRNYW5pcHVsYXRpb24ubW06IEFkZGVkLgorICAgICAgICAoLVtUZXh0TWFuaXB1bGF0
aW9uRGVsZWdhdGUgaW5pdF0pOgorICAgICAgICAoLVtUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUg
X3dlYlZpZXc6ZGlkRmluZEl0ZW06Zm9yRnJhbWU6XSk6CisgICAgICAgICgtW1RleHRNYW5pcHVs
YXRpb25EZWxlZ2F0ZSBpdGVtc10pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y3JlYXRlSXRl
bSk6CisKIDIwMTktMTAtMjEgIEppZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbV2ViQXV0aG5dIFdhcm4gdXNlcnMgd2hlbiBtdWx0aXBsZSBORkMgdGFncyBwcmVz
ZW50CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjUxNDk0KQorKysgVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTczOCw2ICs3MzgsNyBAQAogCQk5OTg0RkFDQzFDRkZBRjYwMDA4
RDE5OEMgLyogV0tXZWJWaWV3VGV4dElucHV0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTk4NEZBQ0ExQ0ZGQUVFRTAwOEQxOThDIC8qIFdLV2ViVmll
d1RleHRJbnB1dC5tbSAqLzsgfTsKIAkJOTk4NEZBQ0UxQ0ZGQjA5MDAwOEQxOThDIC8qIGVkaXRh
YmxlLWJvZHkuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5OTg0RkFDRDFDRkZCMDM4MDA4RDE5OEMgLyogZWRpdGFibGUtYm9keS5odG1s
ICovOyB9OwogCQk5OTk5MTA4QjFGMzkzQzk2MDA4QUQ0NTUgLyogQ29weWluZy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5OTkxMDhBMUYzOTNDOEIw
MDhBRDQ1NSAvKiBDb3B5aW5nLm1tICovOyB9OworCQk5QjAyRTBENjIzNUZBNDdEMDA0MDQ0QjIg
LyogVGV4dE1hbmlwdWxhdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDlCMDJFMEQ1MjM1RkE0N0QwMDQwNDRCMiAvKiBUZXh0TWFuaXB1bGF0aW9u
Lm1tICovOyB9OwogCQk5QjA3ODZBNTFDNTg4NUMzMDBEMTU5RTMgLyogSW5qZWN0ZWRCdW5kbGVN
YWtlQWxsU2hhZG93Um9vdHNPcGVuX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjA3ODZBNDFDNTg4NUMzMDBEMTU5RTMgLyogSW5qZWN0
ZWRCdW5kbGVNYWtlQWxsU2hhZG93Um9vdHNPcGVuX0J1bmRsZS5jcHAgKi87IH07CiAJCTlCMTlD
REEwMUYwNkRGRTMwMDA1NDhERCAvKiBOZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25u
ZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OUIxOUNEOUUxRjA2REZFMzAwMDU0OEREIC8qIE5ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGlu
Z0Nvbm5lY3Rpb24ubW0gKi87IH07CiAJCTlCMUY2Rjc4MUY5MDU1ODQwMEI1NTc0NCAvKiBDb3B5
SFRNTC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlC
MTA1NjQxMUY5MDQ1QzcwMEQ1NTgzRiAvKiBDb3B5SFRNTC5tbSAqLzsgfTsKQEAgLTIxMjgsNiAr
MjEyOSw3IEBACiAJCTk5ODRGQUNBMUNGRkFFRUUwMDhEMTk4QyAvKiBXS1dlYlZpZXdUZXh0SW5w
dXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYlZpZXdU
ZXh0SW5wdXQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5ODRGQUNEMUNGRkIw
MzgwMDhEMTk4QyAvKiBlZGl0YWJsZS1ib2R5Lmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBh
dGggPSAiZWRpdGFibGUtYm9keS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTk5OTEwOEExRjM5M0M4QjAwOEFENDU1IC8qIENvcHlpbmcubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDb3B5aW5nLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk5QjAyRTBENTIzNUZBNDdEMDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbi5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRleHRNYW5pcHVsYXRpb24ubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTlCMDc4NkEyMUM1ODgzMEYwMEQxNTlFMyAvKiBJbmplY3RlZEJ1bmRs
ZU1ha2VBbGxTaGFkb3dSb290c09wZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVNYWtlQWxsU2hhZG93Um9vdHNPcGVuLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIwNzg2QTQxQzU4ODVDMzAwRDE1OUUzIC8qIEluamVj
dGVkQnVuZGxlTWFrZUFsbFNoYWRvd1Jvb3RzT3Blbl9CdW5kbGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVNYWtlQWxsU2hhZG93Um9vdHNP
cGVuX0J1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMTA1NjQxMUY5
MDQ1QzcwMEQ1NTgzRiAvKiBDb3B5SFRNTC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvcHlI
VE1MLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjkzOSw2ICsyOTQxLDcgQEAK
IAkJCQk1Nzc0QUE2NzIxRkJCRjc4MDBBRjJBMUIgLyogVGVzdFNPQXV0aG9yaXphdGlvbi5tbSAq
LywKIAkJCQlGNENENzRDNzIwRkRCNDk2MDBERTM3OTQgLyogVGVzdFVSTFNjaGVtZUhhbmRsZXIu
aCAqLywKIAkJCQlGNENENzRDODIwRkRCNDk2MDBERTM3OTQgLyogVGVzdFVSTFNjaGVtZUhhbmRs
ZXIubW0gKi8sCisJCQkJOUIwMkUwRDUyMzVGQTQ3RDAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRp
b24ubW0gKi8sCiAJCQkJNUMxNkY4RkIyMzBDOTQyQjAwNzRDNEE4IC8qIFRleHRTaXplLm1tICov
LAogCQkJCUMyMkZBMzJBMjI4Rjg3MDgwMDlENzk4OCAvKiBUZXh0V2lkdGgubW0gKi8sCiAJCQkJ
NUM3M0E4MUEyMzIzMDU5ODAwREVBODVBIC8qIFRMU0RlcHJlY2F0aW9uLm1tICovLApAQCAtNDgy
Miw2ICs0ODI1LDcgQEAKIAkJCQlGNDUwMzNGNTIwNkJFQzk1MDA5MzUxQ0UgLyogVGV4dEF1dG9z
aXppbmdCb29zdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzRTYxOTNCMUY5MzFCM0EwMEFGMjQ1
RSAvKiBUZXh0Q29kZWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0UzNTI0RjkxQjE0NDFDNDAw
MjhBN0M1IC8qIFRleHRGaWVsZERpZEJlZ2luQW5kRW5kRWRpdGluZy5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk5QjAyRTBENjIzNUZBNDdEMDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbi5tbSBp
biBTb3VyY2VzICovLAogCQkJCTVDMTZGOEZDMjMwQzk0MzcwMDc0QzRBOCAvKiBUZXh0U2l6ZS5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUMyMkZBMzJCMjI4Rjg3MDgwMDlENzk4OCAvKiBUZXh0V2lk
dGgubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VERDFBNDExQTkyMDA0NDdDNEMgLyogVGlt
ZVJhbmdlcy5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW0JKG5vbmV4
aXN0ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFu
aXB1bGF0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjcxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgor
I2ltcG9ydCAiVGVzdC5oIgorI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgorI2ltcG9ydCA8V2Vi
S2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tUZXh0TWFuaXB1bGF0
aW9uRGVsZWdhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5o
PgorI2ltcG9ydCA8V2ViS2l0L19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oPgorI2ltcG9ydCA8
d3RmL0Jsb2NrUHRyLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK3N0YXRpYyBib29s
IGRvbmUgPSBmYWxzZTsKKworQGludGVyZmFjZSBUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgOiBO
U09iamVjdCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlPgorCistICh2b2lkKV93ZWJWaWV3
OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZEZpbmRJdGVtOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRl
bSAqKWl0ZW0gZm9yRnJhbWU6KF9XS0ZyYW1lSGFuZGxlICopZnJhbWU7CisKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNBcnJheTxfV0tUZXh0TWFuaXB1bGF0aW9uSXRl
bSAqPiAqaXRlbXM7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRleHRNYW5pcHVsYXRpb25E
ZWxlZ2F0ZSB7CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBfaXRlbXM7Cit9CisKKy0g
KGluc3RhbmNldHlwZSlpbml0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgX2l0ZW1zID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5
IGFsbG9jXSBpbml0XSk7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpX3dlYlZpZXc6
KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkRmluZEl0ZW06KF9XS1RleHRNYW5pcHVsYXRpb25JdGVt
ICopaXRlbSBmb3JGcmFtZTooX1dLRnJhbWVIYW5kbGUgKilmcmFtZQoreworICAgIFtfaXRlbXMu
Z2V0KCkgYWRkT2JqZWN0Oml0ZW1dOworfQorCistIChOU0FycmF5PF9XS1RleHRNYW5pcHVsYXRp
b25JdGVtICo+ICopaXRlbXMKK3sKKyAgICByZXR1cm4gX2l0ZW1zLmF1dG9yZWxlYXNlKCk7Cit9
CisKK0BlbmQKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitURVNUKFRleHRNYW5pcHVs
YXRpb24sIFN0YXJ0VGV4dE1hbmlwdWxhdGlvbkZpbmRTaW1wbGVQYXJhZ3JhcGhzKQoreworICAg
IGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9j
XSBpbml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICB3ZWJW
aWV3LmdldCgpLl90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgPSBkZWxlZ2F0ZS5nZXQoKTsKKwor
ICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1s
PiIKKyAgICAgICAgIjxodG1sPjxib2R5PmhlbGxvPGJyPndvcmxkPGRpdj5XZWJLaXQ8L2Rpdj48
L2JvZHk+PC9odG1sPiJdOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9zdGFy
dFRleHRNYW5pcHVsYXRpb25zV2l0aENvbXBsZXRpb25IYW5kbGVyOl57CisgICAgICAgIGRvbmUg
PSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisK
KyAgICBhdXRvICppdGVtcyA9IGRlbGVnYXRlLmdldCgpLml0ZW1zOworICAgIEVYUEVDVF9FUShp
dGVtcy5jb3VudCwgM1VMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMF0udG9rZW5zLmNvdW50LCAx
VUwpOworICAgIEVYUEVDVF9TVFJFUSgiaGVsbG8iLCBpdGVtc1swXS50b2tlbnNbMF0uY29udGVu
dC5VVEY4U3RyaW5nKTsKKworICAgIEVYUEVDVF9FUShpdGVtc1sxXS50b2tlbnMuY291bnQsIDFV
TCk7CisgICAgRVhQRUNUX1NUUkVRKCJ3b3JsZCIsIGl0ZW1zWzFdLnRva2Vuc1swXS5jb250ZW50
LlVURjhTdHJpbmcpOworCisgICAgRVhQRUNUX0VRKGl0ZW1zWzJdLnRva2Vucy5jb3VudCwgMVVM
KTsKKyAgICBFWFBFQ1RfU1RSRVEoIldlYktpdCIsIGl0ZW1zWzJdLnRva2Vuc1swXS5jb250ZW50
LlVURjhTdHJpbmcpOworfQorCitURVNUKFRleHRNYW5pcHVsYXRpb24sIFN0YXJ0VGV4dE1hbmlw
dWxhdGlvbkZpbmRQYXJhZ3JhcGhzV2l0aE11bHRpbGVUb2tlbnMpCit7CisgICAgYXV0byBkZWxl
Z2F0ZSA9IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsK
KyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOworICAgIHdlYlZpZXcuZ2V0KCku
X3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSA9IGRlbGVnYXRlLmdldCgpOworICAgIAorICAgIFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPiIKKyAg
ICAgICAgIjxodG1sPjxib2R5PmhlbGxvLCAgPGI+d29ybGQ8L2I+PGJyPjxkaXY+PGVtPiA8Yj5X
ZWI8L2I+S2l0PC9lbT4gIDwvZGl2PjwvYm9keT48L2h0bWw+Il07CisgICAgCisgICAgZG9uZSA9
IGZhbHNlOworICAgIFt3ZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbXBsZXRp
b25IYW5kbGVyOl57CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisgICAgCisgICAgYXV0byAqaXRlbXMgPSBkZWxlZ2F0
ZS5nZXQoKS5pdGVtczsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDJVTCk7CisgICAgRVhQ
RUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgMlVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoImhl
bGxvLCAiLCBpdGVtc1swXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBF
Q1RfU1RSRVEoIndvcmxkIiwgaXRlbXNbMF0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7
CisgICAgCisgICAgRVhQRUNUX0VRKGl0ZW1zWzFdLnRva2Vucy5jb3VudCwgMlVMKTsKKyAgICBF
WFBFQ1RfU1RSRVEoIldlYiIsIGl0ZW1zWzFdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcp
OworICAgIEVYUEVDVF9TVFJFUSgiS2l0IiwgaXRlbXNbMV0udG9rZW5zWzFdLmNvbnRlbnQuVVRG
OFN0cmluZyk7Cit9CisKK3N0cnVjdCBUb2tlbiB7CisgICAgTlNTdHJpbmcgKmlkZW50aWZpZXI7
CisgICAgTlNTdHJpbmcgKmNvbnRlbnQ7Cit9OworCit0ZW1wbGF0ZTxzaXplX3QgbGVuZ3RoPgor
c3RhdGljIFJldGFpblB0cjxfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbT4gY3JlYXRlSXRlbShOU1N0
cmluZyAqaXRlbUlkZW50aWZpZXIsIGNvbnN0IFRva2VuICgmdG9rZW5zKVtsZW5ndGhdKQorewor
ICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gd2tUb2tlbnMgPSBhZG9wdE5TKFtbTlNNdXRh
YmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7CisgICAgICAgIFJldGFpblB0cjxfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4+IHRv
a2VuID0gYWRvcHROUyhbW19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiBhbGxvY10gaW5pdF0pOwor
ICAgICAgICB0b2tlbi5nZXQoKS5pZGVudGlmaWVyID0gdG9rZW5zW2ldLmlkZW50aWZpZXI7Cisg
ICAgICAgIHRva2VuLmdldCgpLmNvbnRlbnQgPSB0b2tlbnNbaV0uY29udGVudDsKKyAgICAgICAg
W3drVG9rZW5zLmdldCgpIGFkZE9iamVjdDp0b2tlbi5nZXQoKV07CisgICAgfQorICAgIHJldHVy
biBhZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRp
ZmllcjppdGVtSWRlbnRpZmllciB0b2tlbnM6d2tUb2tlbnMuZ2V0KCldKTsKK30KKworVEVTVChU
ZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb25TaG91bGRSZXBsYWNlU2lt
cGxlUGFyYWdyYXBoQ29udGVudCkKK3sKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rl
eHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gd2ViVmlldyA9
IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3Qo
MCwgMCwgNDAwLCA0MDApXSk7CisgICAgd2ViVmlldy5nZXQoKS5fdGV4dE1hbmlwdWxhdGlvbkRl
bGVnYXRlID0gZGVsZWdhdGUuZ2V0KCk7CisKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9h
ZEhUTUxTdHJpbmc6QCI8IURPQ1RZUEUgaHRtbD4iCisgICAgICAgICI8aHRtbD48Ym9keT48cD5o
ZWxsbG8sIHdvb29ybGQ8L3A+PHA+IGhleSwgPGI+IEtpdHM8L2I+IGlzIDxlbT5jdXV1dGU8L2Vt
PjwvcD48L2JvZHk+PC9odG1sPiJdOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3
IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbXBsZXRpb25IYW5kbGVyOl57CisgICAgICAg
IGRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9u
ZSk7CisKKyAgICBhdXRvICppdGVtcyA9IGRlbGVnYXRlLmdldCgpLml0ZW1zOworICAgIEVYUEVD
VF9FUShpdGVtcy5jb3VudCwgMlVMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMF0udG9rZW5zLmNv
dW50LCAxVUwpOworICAgIEVYUEVDVF9TVFJFUSgiaGVsbGxvLCB3b29vcmxkIiwgaXRlbXNbMF0u
dG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMV0u
dG9rZW5zLmNvdW50LCA0VUwpOworICAgIEVYUEVDVF9TVFJFUSgiaGV5LCAiLCBpdGVtc1sxXS50
b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoIktpdHMiLCBp
dGVtc1sxXS50b2tlbnNbMV0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEo
IiBpcyAiLCBpdGVtc1sxXS50b2tlbnNbMl0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBF
Q1RfU1RSRVEoImN1dXV0ZSIsIGl0ZW1zWzFdLnRva2Vuc1szXS5jb250ZW50LlVURjhTdHJpbmcp
OworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9jb21wbGV0ZVRleHRNYW5pcHVs
YXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICopY3JlYXRlSXRlbShpdGVtc1sxXS5pZGVu
dGlmaWVyLCB7CisgICAgICAgIHsgaXRlbXNbMV0udG9rZW5zWzBdLmlkZW50aWZpZXIsIEAiSGVs
bG8sICIgfSwKKyAgICAgICAgeyBpdGVtc1sxXS50b2tlbnNbMV0uaWRlbnRpZmllciwgQCJraXR0
ZW5zIiB9LAorICAgICAgICB7IGl0ZW1zWzFdLnRva2Vuc1syXS5pZGVudGlmaWVyLCBAIiBhcmUg
IiB9LAorICAgICAgICB7IGl0ZW1zWzFdLnRva2Vuc1szXS5pZGVudGlmaWVyLCBAImN1dGUiIH0s
CisgICAgfSkuZ2V0KCkgY29tcGxldGlvbjpeKEJPT0wgc3VjY2VzcykgeworICAgICAgICBFWFBF
Q1RfVFJVRShzdWNjZXNzKTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIjxwPmhl
bGxsbywgd29vb3JsZDwvcD48cD5IZWxsbywgPGI+a2l0dGVuczwvYj4gYXJlIDxlbT5jdXRlPC9l
bT48L3A+IiwKKyAgICAgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
ImRvY3VtZW50LmJvZHkuaW5uZXJIVE1MIl0pOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3
ZWJWaWV3IF9jb21wbGV0ZVRleHRNYW5pcHVsYXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25JdGVt
ICopY3JlYXRlSXRlbShpdGVtc1swXS5pZGVudGlmaWVyLCB7CisgICAgICAgIHsgaXRlbXNbMF0u
dG9rZW5zWzBdLmlkZW50aWZpZXIsIEAiSGVsbG8sIHdvcmxkLiIgfSwKKyAgICB9KS5nZXQoKSBj
b21wbGV0aW9uOl4oQk9PTCBzdWNjZXNzKSB7CisgICAgICAgIEVYUEVDVF9UUlVFKHN1Y2Nlc3Mp
OworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmRvbmUpOworICAgIEVYUEVDVF9XS19TVFJFUSgiPHA+SGVsbG8sIHdvcmxkLjwvcD48
cD5IZWxsbywgPGI+a2l0dGVuczwvYj4gYXJlIDxlbT5jdXRlPC9lbT48L3A+IiwKKyAgICAgICAg
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuaW5u
ZXJIVE1MIl0pOworfQorCitURVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlw
dWxhdGlvblNob3VsZEZhaWxXaGVuQ29udGVudElzQ2hhbmdlZCkKK3sKKyAgICBhdXRvIGRlbGVn
YXRlID0gYWRvcHROUyhbW1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwor
ICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgNDAwLCA0MDApXSk7CisgICAgd2ViVmlldy5nZXQoKS5f
dGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlID0gZGVsZWdhdGUuZ2V0KCk7CisKKyAgICBbd2ViVmll
dyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8IURPQ1RZUEUgaHRtbD4iCisgICAgICAg
ICI8aHRtbD48Ym9keT48cD4gd2hhdCA8ZW0+dGltZTwvZW0+IGFyZSB0aGV5IG5vdz88L3A+PC9i
b2R5PjwvaHRtbD4iXTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfc3RhcnRU
ZXh0TWFuaXB1bGF0aW9uc1dpdGhDb21wbGV0aW9uSGFuZGxlcjpeeworICAgICAgICBkb25lID0g
dHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisg
ICAgYXV0byAqaXRlbXMgPSBkZWxlZ2F0ZS5nZXQoKS5pdGVtczsKKyAgICBFWFBFQ1RfRVEoaXRl
bXMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgM1VM
KTsKKyAgICBFWFBFQ1RfU1RSRVEoIndoYXQgIiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRlbnQu
VVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCJ0aW1lIiwgaXRlbXNbMF0udG9rZW5zWzFd
LmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCIgYXJlIHRoZXkgbm93PyIs
IGl0ZW1zWzBdLnRva2Vuc1syXS5jb250ZW50LlVURjhTdHJpbmcpOworCisgICAgW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Vt
JykubmV4dFNpYmxpbmcuZGF0YSA9ICcgaXMgaXQgbm93IGluIExvbmRvbj8nIl07CisKKyAgICBk
b25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbjooX1dL
VGV4dE1hbmlwdWxhdGlvbkl0ZW0gKiljcmVhdGVJdGVtKGl0ZW1zWzBdLmlkZW50aWZpZXIsIHsK
KyAgICAgICAgeyBpdGVtc1swXS50b2tlbnNbMF0uaWRlbnRpZmllciwgQCJXaGF0ICIgfSwKKyAg
ICAgICAgeyBpdGVtc1swXS50b2tlbnNbMV0uaWRlbnRpZmllciwgQCJ0aW1lIiB9LAorICAgICAg
ICB7IGl0ZW1zWzBdLnRva2Vuc1syXS5pZGVudGlmaWVyLCBAIiBpcyBpdCBub3c/IiB9LAorICAg
IH0pLmdldCgpIGNvbXBsZXRpb246XihCT09MIHN1Y2Nlc3MpIHsKKyAgICAgICAgRVhQRUNUX0ZB
TFNFKHN1Y2Nlc3MpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworICAgIEVYUEVDVF9XS19TVFJFUSgiPHA+IHdoYXQg
PGVtPnRpbWU8L2VtPiBpcyBpdCBub3cgaW4gTG9uZG9uPzwvcD4iLAorICAgICAgICBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwi
XSk7Cit9CisKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9u
U2hvdWxkRmFpbFdoZW5Eb2N1bWVudEhhc0JlZW5OYXZpZ2F0ZWRBd2F5KQoreworICAgIGF1dG8g
ZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0
XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICB3ZWJWaWV3Lmdl
dCgpLl90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgPSBkZWxlZ2F0ZS5nZXQoKTsKKworICAgIFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAInNpbXBsZSJdOworICAgIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmlubmVy
SFRNTCA9ICc8cD5oZXksIDxlbT5lYXJ0aDwvZW0+PC9wPiciXTsKKworICAgIGRvbmUgPSBmYWxz
ZTsKKyAgICBbd2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb21wbGV0aW9uSGFu
ZGxlcjpeeworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgYXV0byAqaXRlbXMgPSBkZWxlZ2F0ZS5nZXQoKS5p
dGVtczsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX0VRKGl0
ZW1zWzBdLnRva2Vucy5jb3VudCwgMlVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoImhleSwgIiwgaXRl
bXNbMF0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCJl
YXJ0aCIsIGl0ZW1zWzBdLnRva2Vuc1sxXS5jb250ZW50LlVURjhTdHJpbmcpOworCisgICAgW3dl
YlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiY29weS1odG1sIl07CisKKyAg
ICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbjoo
X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKiljcmVhdGVJdGVtKGl0ZW1zWzBdLmlkZW50aWZpZXIs
IHsKKyAgICAgICAgeyBpdGVtc1swXS50b2tlbnNbMF0uaWRlbnRpZmllciwgQCJoZWxsbywgIiB9
LAorICAgICAgICB7IGl0ZW1zWzBdLnRva2Vuc1sxXS5pZGVudGlmaWVyLCBAIndvcmxkIiB9LAor
ICAgIH0pLmdldCgpIGNvbXBsZXRpb246XihCT09MIHN1Y2Nlc3MpIHsKKyAgICAgICAgRVhQRUNU
X0ZBTFNFKHN1Y2Nlc3MpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKworICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RX
ZWJLaXRBUEkKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381771</attachid>
            <date>2019-10-23 20:58:28 -0700</date>
            <delta_ts>2019-10-23 21:24:15 -0700</delta_ts>
            <desc>Addressed review comments</desc>
            <filename>bug-203286-20191023205828.patch</filename>
            <type>text/plain</type>
            <size>74501</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MTQ5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDE5LTEwLTIzICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIG1lY2hhbmlzbSB0byBm
aW5kIGFuZCBtYW5pcHVsYXRlIHRleHQgYnkgcGFyYWdyYXBocworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMjg2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIFRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyIHdoaWNoIGFsbG93cyBXZWJLaXQgY2xpZW50cyB0byBmaW5k
IGFuZCByZXBsYWNlCisgICAgICAgIHRleHQgY29udGVudCBpbiBhIGdpdmVuIGRvY3VtZW50IGJ5
IHBhcmFncmFwaCBib3VuZGFyeS4gRm9yIG5vdywgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIg
ZmluZHMKKyAgICAgICAgYWxsIHBhcmFncmFwaHMgaW4gdGhlIGRvY3VtZW50IGFuZCBpbnZva2Vz
IHRoZSBjYWxsYmFjayBmb3IgZWFjaCBwYXJhZ3JhcGguIEluIHRoZSBmdXR1cmUsIHRoaXMKKyAg
ICAgICAgY29udHJvbGxlciB3aWxsIHN1cHBvcnQgZGV0ZWN0aW5nIHJlbW92YWwgYW5kIGluc2Vy
dGlvbiBvZiBuZXcgY29udGVudCB0byB0aGUgZG9jdW1lbnQuCisKKyAgICAgICAgVGVzdHM6IFRl
eHRNYW5pcHVsYXRpb24uU3RhcnRUZXh0TWFuaXB1bGF0aW9uRmluZFNpbXBsZVBhcmFncmFwaHMK
KyAgICAgICAgICAgICAgIFRleHRNYW5pcHVsYXRpb24uU3RhcnRUZXh0TWFuaXB1bGF0aW9uRmlu
ZFBhcmFncmFwaHNXaXRoTXVsdGlsZVRva2VucworICAgICAgICAgICAgICAgVGV4dE1hbmlwdWxh
dGlvbi5Db21wbGV0ZVRleHRNYW5pcHVsYXRpb25TaG91bGRSZXBsYWNlU2ltcGxlUGFyYWdyYXBo
Q29udGVudAorICAgICAgICAgICAgICAgVGV4dE1hbmlwdWxhdGlvbi5Db21wbGV0ZVRleHRNYW5p
cHVsYXRpb25TaG91bGRGYWlsV2hlbkNvbnRlbnRJc0NoYW5nZWQKKyAgICAgICAgICAgICAgIFRl
eHRNYW5pcHVsYXRpb24uQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uU2hvdWxkRmFpbFdoZW5Eb2N1
bWVudEhhc0JlZW5OYXZpZ2F0ZWRBd2F5CisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6IENsZWFyIFRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyLiBPdGhlcndpc2UgbV9pdGVtcworICAgICAgICBpbiBUZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlciBtYXkga2VlcCBhIGJ1bmNoIG9mIG5vZGVzIGFsaXZlIGFuZCBub3QgbGV0IHRo
aXMgZG9jdW1lbnQgZGVzdHJ1Y3RlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0ZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlcik6IEFkZGVkLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5o
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnRleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
SWZFeGlzdHMpOiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIpOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpzdGFydE9ic2VydmluZ1BhcmFncmFw
aHMpOiBGaW5kcyBhbGwgcGFyZ3JhcGhzIGFuZCBpbnZva2UKKyAgICAgICAgdGhlIGNhbGxiYWNr
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OmFkZEl0ZW0p
OiBBZGRlZC4gQSBoZWxwZXIgZm9yIHN0YXJ0T2JzZXJ2aW5nUGFyYWdyYXBocy4KKyAgICAgICAg
KFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpjb21wbGV0ZU1hbmlwdWxhdGlv
bik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6
OnJlcGxhY2UpOiBBZGRlZC4gQSBoZWxwZXIgZm9yIGNvbXBsZXRlTWFuaXB1bGF0aW9uLgorICAg
ICAgICAqIGVkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9r
ZW46OmVuY29kZSBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuOjpkZWNvZGUpOiBBZGRlZC4KKwogMjAx
OS0xMC0yMyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBXZWIgSW5zcGVjdG9yOiBub3RpZnkgaW5zcGVjdG9yIHdoZW4gcHJvdmlzaW9uYWwgcGFnZSBp
cyBjcmVhdGVkLCBjb21taXR0ZWQgYW5kIGRlc3Ryb3llZApJbmRleDogU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
CShyZXZpc2lvbiAyNTE0OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MDMsNiArNTAzLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBREVSUwogICAgIGVkaXRpbmcvVGV4dEdyYW51bGFyaXR5LmgKICAgICBlZGl0aW5nL1Rl
eHRJdGVyYXRvci5oCiAgICAgZWRpdGluZy9UZXh0SXRlcmF0b3JCZWhhdmlvci5oCisgICAgZWRp
dGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oCiAgICAgZWRpdGluZy9VbmRvU3RlcC5o
CiAgICAgZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAogICAgIGVkaXRpbmcvVmlzaWJsZVNlbGVj
dGlvbi5oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjUxNDk0KQorKysgU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwNjEsNiArMTA2MSw3IEBAIGVk
aXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q28KIGVkaXRpbmcvVGV4dENoZWNr
aW5nSGVscGVyLmNwcAogZWRpdGluZy9UZXh0SW5zZXJ0aW9uQmFzZUNvbW1hbmQuY3BwCiBlZGl0
aW5nL1RleHRJdGVyYXRvci5jcHAKK2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIu
Y3BwCiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCiBlZGl0aW5nL1VubGlua0NvbW1hbmQuY3Bw
CiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI1MTQ5NCkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMjg1Miw2ICsyODUyLDcgQEAKIAkJOTk2RTU5REYxREYwMTI4RDAwNjYxMkI5
IC8qIE5hdmlnYXRvcldlYkRyaXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTk2RTU5REMxREYwMEQ5MDAwNjYxMkI5IC8qIE5hdmlnYXRvcldlYkRy
aXZlci5oICovOyB9OwogCQk5QTUyOEU4NDE3RDdGNTJGMDBBQTk1MTggLyogRmxvYXRpbmdPYmpl
Y3RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QTUy
OEU4MjE3RDdGNTJGMDBBQTk1MTggLyogRmxvYXRpbmdPYmplY3RzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOUFCMUYzODAxOEUyNDg5QTAwNTM0
NzQzIC8qIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlBQjFGMzdFMThFMjQ4OUEwMDUzNDc0MyAvKiBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJOUIwMkUwQzgyMzVFQUQyQTAwNDA0NEIyIC8qIFRleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5QjAyRTBDMzIzNUU3NkFBMDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk5QjI0REU4RTE1MTk0Qjk1MDBDNTlDMjcgLyogSFRNTEJESUVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMjRERThDMTUxOTRCOTUwMEM1
OUMyNyAvKiBIVE1MQkRJRWxlbWVudC5oICovOyB9OwogCQk5QjI3RkM2MDIzNEQ5QURCMDAzOTRB
NDYgLyogV2luZG93RXZlbnRMb29wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5QjI3RkM1RTIzNEQ5QURBMDAzOTRBNDYgLyogV2luZG93RXZlbnRMb29w
LmggKi87IH07CiAJCTlCMkQ4QTc5MTQ5OTdDQ0YwMEVDRUYzRSAvKiBVbmRvU3RlcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIyRDhBNzgxNDk5N0ND
RjAwRUNFRjNFIC8qIFVuZG9TdGVwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTExMDc0LDYgKzExMDc1LDggQEAKIAkJOUFDNkYwMjUyMTE0OEY1
NDAwQ0JEQTA2IC8qIE1lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeS5o
OyBwYXRoID0gbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9y
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QUM2RjAyRDIxMTQ4RjlGMDBDQkRB
MDYgLyogTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeU1vY2suY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9y
eU1vY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QUM2RjAyRjIxMTQ4RkEy
MDBDQkRBMDYgLyogTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeU1vY2suaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9y
eU1vY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUIwMkUwQzMyMzVFNzZBQTAw
NDA0NEIyIC8qIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTlCMDJFMEM0MjM1RTc2QUEwMDQwNDRCMiAvKiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBS
ZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBwYXRo
ID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9SZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWls
dGlucy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk5QjAzRDgwNjFC
QjMxMTBEMDBCNzY0QzkgLyogU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaDsgcGF0aCA9IERl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaDsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEQ4IC8q
IFJlYWRhYmxlU3RyZWFtQnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9SZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19E
SVI7IH07CkBAIC0yMTQ0MCw2ICsyMTQ0Myw4IEBACiAJCQkJOTMzMDlEQ0MwOTlFNjQ5MTAwNTZF
NTgxIC8qIFRleHRJdGVyYXRvci5jcHAgKi8sCiAJCQkJOTMzMDlEQ0QwOTlFNjQ5MTAwNTZFNTgx
IC8qIFRleHRJdGVyYXRvci5oICovLAogCQkJCTkzOTIxNDY4MThBNkQ3OTEwMDBFRTY4OCAvKiBU
ZXh0SXRlcmF0b3JCZWhhdmlvci5oICovLAorCQkJCTlCMDJFMEM0MjM1RTc2QUEwMDQwNDRCMiAv
KiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAgKi8sCisJCQkJOUIwMkUwQzMyMzVFNzZB
QTAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmggKi8sCiAJCQkJOTMzMDlE
Q0EwOTlFNjQ5MTAwNTZFNTgxIC8qIFR5cGluZ0NvbW1hbmQuY3BwICovLAogCQkJCTkzMzA5RENC
MDk5RTY0OTEwMDU2RTU4MSAvKiBUeXBpbmdDb21tYW5kLmggKi8sCiAJCQkJOUIyRDhBNzgxNDk5
N0NDRjAwRUNFRjNFIC8qIFVuZG9TdGVwLmggKi8sCkBAIC0zMjM1Miw2ICszMjM1Nyw3IEBACiAJ
CQkJQ0VDQURGQ0UxNTM3NzkxRDAwRTM3MDY4IC8qIFRleHRJbnNlcnRpb25CYXNlQ29tbWFuZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMUMwOTlFNjQ5MjAwNTZFNTgxIC8qIFRleHRJdGVy
YXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5MjE0NjkxOEE2RDc5MTAwMEVFNjg4IC8qIFRl
eHRJdGVyYXRvckJlaGF2aW9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk5QjAyRTBDODIzNUVBRDJB
MDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDRUY0NUU5MEU2ODc3NjcwMDFDMTI4NyAvKiBUZXh0TWV0cmljcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTREOTg4QjQxN0JGRDFGNjAwODRGQjg4IC8qIFRleHROb2RlVHJhdmVyc2FsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQzE4REE1OTE4MUFGNkE1MDBDNEVGMjIgLyogVGV4dFBhaW50
ZXIuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lv
biAyNTE0OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTMsNiArMjEzLDcgQEAKICNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgog
I2luY2x1ZGUgIlRleHRBdXRvU2l6aW5nLmgiCiAjaW5jbHVkZSAiVGV4dEV2ZW50LmgiCisjaW5j
bHVkZSAiVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUZXh0Tm9kZVRy
YXZlcnNhbC5oIgogI2luY2x1ZGUgIlRvdWNoQWN0aW9uLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3Jt
U291cmNlLmgiCkBAIC0yNDc5LDYgKzI0ODAsOCBAQCB2b2lkIERvY3VtZW50OjpwcmVwYXJlRm9y
RGVzdHJ1Y3Rpb24oKQogCiAgICAgbV91bmRvTWFuYWdlci0+cmVtb3ZlQWxsSXRlbXMoKTsKIAor
ICAgIG1fdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgPSBudWxscHRyOyAvLyBGcmVlIG5vZGVz
IGtlcHQgYWxpdmUgYnkgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuCisKICNpZiBFTkFCTEUo
QUNDRVNTSUJJTElUWSkKICAgICBpZiAodGhpcyAhPSAmdG9wRG9jdW1lbnQoKSkgewogICAgICAg
ICAvLyBMZXQgdGhlIGF4IGNhY2hlIGtub3cgdGhhdCB0aGlzIHN1YmZyYW1lIGdvZXMgb3V0IG9m
IHNjb3BlLgpAQCAtODM0MSw0ICs4MzQ0LDExIEBAIHZvaWQgRG9jdW1lbnQ6OnNldFBpY3R1cmVJ
blBpY3R1cmVFbGVtZW4KIH0KICNlbmRpZgogCitUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlciYg
RG9jdW1lbnQ6OnRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyKCkKK3sKKyAgICBpZiAoIW1fdGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIpCisgICAgICAgIG1fdGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXIgPSBtYWtlVW5pcXVlPFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyPigqdGhpcyk7Cisg
ICAgcmV0dXJuICptX3RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMjUxNDk0KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw2
ICsxOTYsNyBAQCBjbGFzcyBTdHlsZVNoZWV0OwogY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwog
Y2xhc3MgU3R5bGVTaGVldExpc3Q7CiBjbGFzcyBUZXh0OworY2xhc3MgVGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI7CiBjbGFzcyBUZXh0UmVzb3VyY2VEZWNvZGVyOwogY2xhc3MgVHJlZVdhbGtl
cjsKIGNsYXNzIFVuZG9NYW5hZ2VyOwpAQCAtMTU1Nyw2ICsxNTU4LDkgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0UGljdHVyZUluUGljdHVyZUVsZW1lbnQoSFRNTFZpZGVvRWxlbWVudCopOwogI2Vu
ZGlmCiAKKyAgICBXRUJDT1JFX0VYUE9SVCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlciYgdGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIoKTsKKyAgICBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxl
ciogdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXJJZkV4aXN0cygpIHsgcmV0dXJuIG1fdGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXIuZ2V0KCk7IH0KKwogcHJvdGVjdGVkOgogICAgIGVudW0gQ29u
c3RydWN0aW9uRmxhZ3MgeyBTeW50aGVzaXplZCA9IDEsIE5vblJlbmRlcmVkUGxhY2Vob2xkZXIg
PSAxIDw8IDEgfTsKICAgICBEb2N1bWVudChGcmFtZSosIGNvbnN0IFVSTCYsIHVuc2lnbmVkID0g
RGVmYXVsdERvY3VtZW50Q2xhc3MsIHVuc2lnbmVkIGNvbnN0cnVjdGlvbkZsYWdzID0gMCk7CkBA
IC0yMDg1LDYgKzIwODksOCBAQCBwcml2YXRlOgogICAgIFdlYWtQdHI8SFRNTFZpZGVvRWxlbWVu
dD4gbV9waWN0dXJlSW5QaWN0dXJlRWxlbWVudDsKICNlbmRpZgogCisgICAgc3RkOjp1bmlxdWVf
cHRyPFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyPiBtX3RleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOworCiAgICAgSGFzaE1hcDxFbGVtZW50KiwgRWxlbWVudElkZW50aWZpZXI+IG1faWRlbnRp
ZmllZEVsZW1lbnRzTWFwOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaCIKKworI2luY2x1
ZGUgIkVkaXRpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHREaXNhbGxvd2VkU2NvcGUuaCIKKyNpbmNs
dWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6VGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXIoRG9jdW1lbnQmIGRvY3VtZW50KQorICAgIDogbV9kb2N1bWVudChtYWtl
V2Vha1B0cihkb2N1bWVudCkpCit7Cit9CisKK3ZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXI6OnN0YXJ0T2JzZXJ2aW5nUGFyYWdyYXBocyhNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2smJiBj
YWxsYmFjaykKK3sKKyAgICBhdXRvIGRvY3VtZW50ID0gbWFrZVJlZlB0cihtX2RvY3VtZW50Lmdl
dCgpKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayk7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQgPSBm
aXJzdFBvc2l0aW9uSW5Ob2RlKG1fZG9jdW1lbnQuZ2V0KCkpOworICAgIFZpc2libGVQb3NpdGlv
biBlbmQgPSBsYXN0UG9zaXRpb25Jbk5vZGUobV9kb2N1bWVudC5nZXQoKSk7CisgICAgVGV4dEl0
ZXJhdG9yIGl0ZXJhdG9yIHsgc3RhcnQuZGVlcEVxdWl2YWxlbnQoKSwgZW5kLmRlZXBFcXVpdmFs
ZW50KCkgfTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm47IC8vIFZpc2libGVQ
b3NpdGlvbiBvciBUZXh0SXRlcmF0b3IncyBjb25zdHJ1Y3RvciBtYXkgaGF2ZSB1cGRhdGVkIHRo
ZSBsYXlvdXQgYW5kIGV4ZWN1dGVkIGFyYml0cmFyeSBzY3JpcHRzLgorCisgICAgVmVjdG9yPE1h
bmlwdWxhdGlvblRva2VuPiB0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGg7CisgICAgUG9zaXRpb24g
c3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGggPSBzdGFydC5kZWVwRXF1aXZhbGVudCgpOworICAgIHdo
aWxlICghaXRlcmF0b3IuYXRFbmQoKSkgeworICAgICAgICBTdHJpbmdWaWV3IGN1cnJlbnRUZXh0
ID0gaXRlcmF0b3IudGV4dCgpOworCisgICAgICAgIGlmIChzdGFydE9mQ3VycmVudFBhcmFncmFw
aC5pc051bGwoKSkKKyAgICAgICAgICAgIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoID0gaXRlcmF0
b3IucmFuZ2UoKS0+c3RhcnRQb3NpdGlvbigpOworCisgICAgICAgIHNpemVfdCBlbmRPZkxhc3RO
ZXdMaW5lID0gMDsKKyAgICAgICAgc2l6ZV90IG9mZnNldE9mTmV4dE5ld0xpbmUgPSAwOworICAg
ICAgICB3aGlsZSAoKG9mZnNldE9mTmV4dE5ld0xpbmUgPSBjdXJyZW50VGV4dC5maW5kKCdcbics
IGVuZE9mTGFzdE5ld0xpbmUpKSAhPSBub3RGb3VuZCkgeworICAgICAgICAgICAgaWYgKGVuZE9m
TGFzdE5ld0xpbmUgPCBvZmZzZXRPZk5leHROZXdMaW5lKSB7CisgICAgICAgICAgICAgICAgdG9r
ZW5zSW5DdXJyZW50UGFyYWdyYXBoLmFwcGVuZChNYW5pcHVsYXRpb25Ub2tlbiB7IG1fdG9rZW5J
ZGVudGlmaWVyLmdlbmVyYXRlKCksCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LnN1
YnN0cmluZyhlbmRPZkxhc3ROZXdMaW5lLCBvZmZzZXRPZk5leHROZXdMaW5lIC0gZW5kT2ZMYXN0
TmV3TGluZSkudG9TdHJpbmcoKSB9KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0
byBsYXN0UmFuZ2UgPSBpdGVyYXRvci5yYW5nZSgpOworICAgICAgICAgICAgaWYgKG9mZnNldE9m
TmV4dE5ld0xpbmUgPCBjdXJyZW50VGV4dC5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIGxh
c3RSYW5nZS0+c2V0U3RhcnQoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKGl0ZXJhdG9yLm5v
ZGUoKSkpOyAvLyBNb3ZlIHRoZSBzdGFydCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjdXJyZW50
IG5vZGUuCisgICAgICAgICAgICAgICAgVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShsYXN0UmFuZ2Us
IDAsIG9mZnNldE9mTmV4dE5ld0xpbmUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUG9z
aXRpb24gZW5kT2ZDdXJyZW50UGFyYWdyYXBoID0gbGFzdFJhbmdlLT5lbmRQb3NpdGlvbigpOwor
CisgICAgICAgICAgICBpZiAoIXRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5pc0VtcHR5KCkpCisg
ICAgICAgICAgICAgICAgYWRkSXRlbShzdGFydE9mQ3VycmVudFBhcmFncmFwaCwgZW5kT2ZDdXJy
ZW50UGFyYWdyYXBoLCBXVEZNb3ZlKHRva2Vuc0luQ3VycmVudFBhcmFncmFwaCkpOworICAgICAg
ICAgICAgc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGguY2xlYXIoKTsKKyAgICAgICAgICAgIGVuZE9m
TGFzdE5ld0xpbmUgPSBvZmZzZXRPZk5leHROZXdMaW5lICsgMTsKKyAgICAgICAgfQorCisgICAg
ICAgIGF1dG8gcmVtYWluaW5nVGV4dCA9IGN1cnJlbnRUZXh0LnN1YnN0cmluZyhlbmRPZkxhc3RO
ZXdMaW5lKTsKKyAgICAgICAgaWYgKHJlbWFpbmluZ1RleHQubGVuZ3RoKCkpCisgICAgICAgICAg
ICB0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGguYXBwZW5kKE1hbmlwdWxhdGlvblRva2VuIHsgbV90
b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUoKSwgcmVtYWluaW5nVGV4dC50b1N0cmluZygpIH0pOwor
CisgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsKKyAgICB9CisKKyAgICBpZiAoIXRva2Vuc0lu
Q3VycmVudFBhcmFncmFwaC5pc0VtcHR5KCkpCisgICAgICAgIGFkZEl0ZW0oc3RhcnRPZkN1cnJl
bnRQYXJhZ3JhcGgsIGVuZC5kZWVwRXF1aXZhbGVudCgpLCBXVEZNb3ZlKHRva2Vuc0luQ3VycmVu
dFBhcmFncmFwaCkpOworfQorCit2b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjphZGRJ
dGVtKGNvbnN0IFBvc2l0aW9uJiBzdGFydE9mUGFyYWdyYXBoLCBjb25zdCBQb3NpdGlvbiYgZW5k
T2ZQYXJhZ3JhcGgsIFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4mJiB0b2tlbnMpCit7CisgICAg
QVNTRVJUKG1fZG9jdW1lbnQpOworICAgIGF1dG8gcmVzdWx0ID0gbV9pdGVtcy5hZGQobV9pdGVt
SWRlbnRpZmllci5nZW5lcmF0ZSgpLCBNYW5pcHVsYXRpb25JdGVtIHsgc3RhcnRPZlBhcmFncmFw
aCwgZW5kT2ZQYXJhZ3JhcGgsIFdURk1vdmUodG9rZW5zKSB9KTsKKyAgICBtX2NhbGxiYWNrKCpt
X2RvY3VtZW50LCByZXN1bHQuaXRlcmF0b3ItPmtleSwgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS50
b2tlbnMpOworfQorCitib29sIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpjb21wbGV0ZU1h
bmlwdWxhdGlvbihJdGVtSWRlbnRpZmllciBpdGVtSWRlbnRpZmllciwgY29uc3QgVmVjdG9yPE1h
bmlwdWxhdGlvblRva2VuPiYgcmVwbGFjZW1lbnRUb2tlbnMpCit7CisgICAgaWYgKCFpdGVtSWRl
bnRpZmllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBpdGVtSXRlcmF0b3Ig
PSBtX2l0ZW1zLmZpbmQoaXRlbUlkZW50aWZpZXIpOworICAgIGlmIChpdGVtSXRlcmF0b3IgPT0g
bV9pdGVtcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBkaWRSZXBs
YWNlID0gcmVwbGFjZShpdGVtSXRlcmF0b3ItPnZhbHVlLCByZXBsYWNlbWVudFRva2Vucyk7CisK
KyAgICBtX2l0ZW1zLnJlbW92ZShpdGVtSXRlcmF0b3IpOworCisgICAgcmV0dXJuIGRpZFJlcGxh
Y2U7Cit9CisKK2Jvb2wgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnJlcGxhY2UoY29uc3Qg
TWFuaXB1bGF0aW9uSXRlbSYgaXRlbSwgY29uc3QgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiYg
cmVwbGFjZW1lbnRUb2tlbnMpCit7CisgICAgVGV4dEl0ZXJhdG9yIGl0ZXJhdG9yIHsgaXRlbS5z
dGFydCwgaXRlbS5lbmQgfTsKKyAgICBzaXplX3QgY3VycmVudFRva2VuSW5kZXggPSAwOworICAg
IEhhc2hNYXA8VG9rZW5JZGVudGlmaWVyLCBSZWY8Tm9kZT4+IHRva2VuVG9Ob2RlOworICAgIHdo
aWxlICghaXRlcmF0b3IuYXRFbmQoKSkgeworICAgICAgICBhdXRvIHN0cmluZyA9IGl0ZXJhdG9y
LnRleHQoKS50b1N0cmluZygpOworICAgICAgICBpZiAoY3VycmVudFRva2VuSW5kZXggPj0gaXRl
bS50b2tlbnMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhdXRv
JiBjdXJyZW50VG9rZW4gPSBpdGVtLnRva2Vuc1tjdXJyZW50VG9rZW5JbmRleF07CisgICAgICAg
IGlmIChpdGVyYXRvci50ZXh0KCkgIT0gY3VycmVudFRva2VuLmNvbnRlbnQpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHRva2VuVG9Ob2RlLmFkZChjdXJyZW50VG9rZW4uaWRl
bnRpZmllciwgKml0ZXJhdG9yLm5vZGUoKSk7CisgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsK
KyAgICAgICAgKytjdXJyZW50VG9rZW5JbmRleDsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogVGhp
cyBkb2Vzbid0IHByZXNldmUgdGhlIG9yZGVyIG9mIHRoZSByZXBsYWNlbWVudCBhdCBhbGwuCisg
ICAgZm9yIChhdXRvJiB0b2tlbiA6IHJlcGxhY2VtZW50VG9rZW5zKSB7CisgICAgICAgIGF1dG8q
IG5vZGUgPSB0b2tlblRvTm9kZS5nZXQodG9rZW4uaWRlbnRpZmllcik7CisgICAgICAgIGlmICgh
bm9kZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFpczxDaGFyYWN0
ZXJEYXRhPihub2RlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAvLyBGSVhNRTog
SXQncyBub3Qgc2FmZSB0byB1cGRhdGUgRE9NIHdoaWxlIGl0ZXJhdGluZyBvdmVyIHRoZSB0b2tl
bnMuCisgICAgICAgIGRvd25jYXN0PENoYXJhY3RlckRhdGE+KG5vZGUpLT5zZXREYXRhKHRva2Vu
LmNvbnRlbnQpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFu
aXB1bGF0aW9uQ29udHJvbGxlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJQb3NpdGlv
bi5oIgorI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgorI2luY2x1ZGUgPHd0Zi9P
YmplY3RJZGVudGlmaWVyLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8
d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsK
KworY2xhc3MgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQ
dHI8VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcihEb2N1bWVudCYp
OworCisgICAgZW51bSBUb2tlbklkZW50aWZpZXJUeXBlIHsgfTsKKyAgICB1c2luZyBUb2tlbklk
ZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPFRva2VuSWRlbnRpZmllclR5cGU+OworCisgICAg
c3RydWN0IE1hbmlwdWxhdGlvblRva2VuIHsKKyAgICAgICAgVG9rZW5JZGVudGlmaWVyIGlkZW50
aWZpZXI7CisgICAgICAgIFN0cmluZyBjb250ZW50OworCisgICAgICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICAgICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPE1hbmlwdWxhdGlvblRva2VuPiBkZWNvZGUo
RGVjb2RlciYpOworICAgIH07CisKKyAgICBlbnVtIEl0ZW1JZGVudGlmaWVyVHlwZSB7IH07Cisg
ICAgdXNpbmcgSXRlbUlkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPEl0ZW1JZGVudGlmaWVy
VHlwZT47CisKKyAgICB1c2luZyBNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2sgPSBXVEY6OkZ1bmN0
aW9uPHZvaWQoRG9jdW1lbnQmLCBJdGVtSWRlbnRpZmllciwgY29uc3QgVmVjdG9yPE1hbmlwdWxh
dGlvblRva2VuPiYpPjsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0YXJ0T2JzZXJ2aW5nUGFy
YWdyYXBocyhNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2smJik7CisKKyAgICBXRUJDT1JFX0VYUE9S
VCBib29sIGNvbXBsZXRlTWFuaXB1bGF0aW9uKEl0ZW1JZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8
TWFuaXB1bGF0aW9uVG9rZW4+Jik7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IE1hbmlwdWxhdGlv
bkl0ZW0geworICAgICAgICBQb3NpdGlvbiBzdGFydDsKKyAgICAgICAgUG9zaXRpb24gZW5kOwor
ICAgICAgICBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+IHRva2VuczsKKyAgICB9OworCisgICAg
dm9pZCBhZGRJdGVtKGNvbnN0IFBvc2l0aW9uJiBzdGFydE9mUGFyYWdyYXBoLCBjb25zdCBQb3Np
dGlvbiYgZW5kT2ZQYXJhZ3JhcGgsIFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4mJik7CisgICAg
Ym9vbCByZXBsYWNlKGNvbnN0IE1hbmlwdWxhdGlvbkl0ZW0mLCBjb25zdCBWZWN0b3I8TWFuaXB1
bGF0aW9uVG9rZW4+Jik7CisKKyAgICBXZWFrUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OworICAg
IE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjayBtX2NhbGxiYWNrOworICAgIEhhc2hNYXA8SXRlbUlk
ZW50aWZpZXIsIE1hbmlwdWxhdGlvbkl0ZW0+IG1faXRlbXM7CisgICAgSXRlbUlkZW50aWZpZXIg
bV9pdGVtSWRlbnRpZmllcjsKKyAgICBUb2tlbklkZW50aWZpZXIgbV90b2tlbklkZW50aWZpZXI7
Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAoreworICAgIGVuY29kZXIgPDwgaWRlbnRpZmllciA8PCBjb250ZW50OworfQorCit0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1h
bmlwdWxhdGlvblRva2VuPiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9u
VG9rZW46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE1hbmlwdWxhdGlvblRva2Vu
IHJlc3VsdDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pZGVudGlmaWVyKSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3Vs
dC5jb250ZW50KSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24g
MjUxNDk0KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw0OSBAQAorMjAxOS0xMC0yMyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
KworICAgICAgICBBZGQgYSBtZWNoYW5pc20gdG8gZmluZCBhbmQgbWFuaXB1bGF0ZSB0ZXh0IGJ5
IHBhcmFncmFwaHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwMzI4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBTUEkgdG8gZmluZCBwYXJhZ3JhcGhzIG9m
IHRleHQgYW5kIGxldCBjbGllbnQgcmVwbGFjZSB0aGUgY29udGVudCBvZiBlYWNoIHBhcmFncmFw
aC4KKyAgICAgICAgRm9yIG5vdywgdGhpcyBTUEkgaXMgbGltaXRlZCB0byBmaW5kICYgcmVwbGFj
ZSBjb250ZW50cyBvZiBtYWluIGZyYW1lJ3MgZG9jdW1lbnQuCisKKyAgICAgICAgV0tXZWJWaWV3
J3MgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29tcGxldGlvbkhhbmRsZXIgc2VuZHMgU3Rh
cnRUZXh0TWFuaXB1bGF0aW9ucyBtZXNzYWdlIHRvIFdlYkNvbnRlbnQgcHJvY2VzcworICAgICAg
ICB0byBmaW5kIGFsbCBwYXJhZ3JhcGhzIGluIHRoZSBtYWluIGZyYW1lLiBXZWJDb250ZW50IHBy
b2Nlc3Mgd2lsbCBzZW5kIGJhY2sgRGlkRmluZFRleHRNYW5pcHVsYXRpb25JdGVtIG1lc3NhZ2UK
KyAgICAgICAgZm9yIGVhY2ggcGFyYWdyYXBoLCB3aGljaCBpbiB0dXJuIGNhbGxzIGJhY2sgX1dL
VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlJ3MgX3dlYlZpZXc6IGRpZEZpbmRUZXh0TWFuaXB1bGF0
aW9uSXRlbTouCisKKyAgICAgICAgVXBvbiByZWNlaXZpbmcgdGhpcyBkZWxlZ2F0ZSBjYWxsYmFj
aywgdGhlIGNsaWVudCBjYW4gaW52b2tlIFdLV2ViVmlldydzIF9jb21wbGV0ZVRleHRNYW5pcHVs
YXRpb24gdG8gcmVwbGFjZQorICAgICAgICB0aGUgY29udGVudC4gSXQgd2lsbCBzZW5kIENvbXBs
ZXRlVGV4dE1hbmlwdWxhdGlvbiB0byBXZWJDb250ZW50IHByb2Nlc3MsIHdoaWNoIHdpbGwgaW52
b2tlIGNvbXBsZXRlTWFuaXB1bGF0aW9uCisgICAgICAgIG9uIG1haW4gZnJhbWUncyBkb2N1bWVu
dCdzIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfdGV4dE1hbmlwdWxh
dGlvbkRlbGVnYXRlXSk6IEFkZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0VGV4dE1hbmlw
dWxhdGlvbkRlbGVnYXRlOl0pOiBBZGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3N0YXJ0VGV4
dE1hbmlwdWxhdGlvbnNXaXRoQ29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2Vi
VmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOmNvbXBsZXRpb246XSk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUuaDogQWRkZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25JdGVt
Lm1tOiBBZGRlZC4KKyAgICAgICAgKC1bX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gaW5pdFdpdGhJ
ZGVudGlmaWVyOnRva2VuczpdKToKKyAgICAgICAgKC1bX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0g
aWRlbnRpZmllcl0pOgorICAgICAgICAoLVtfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSB0b2tlbnNd
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tl
bi5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVs
YXRpb25Ub2tlbi5tbTogQWRkZWQuCisgICAgICAgICgtW19XS1RleHRNYW5pcHVsYXRpb25Ub2tl
biBpbml0XSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c3RhcnRUZXh0TWFuaXB1bGF0aW9ucyk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkRmluZFRleHRNYW5pcHVsYXRpb25JdGVtKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpjb21wbGV0ZVRleHRNYW5pcHVsYXRpb24pOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c3RhcnRUZXh0TWFuaXB1bGF0aW9ucyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbik6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKwogMjAxOS0xMC0yMyAgWXVyeSBTZW1pa2hhdHNr
eSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBub3RpZnkg
aW5zcGVjdG9yIHdoZW4gcHJvdmlzaW9uYWwgcGFnZSBpcyBjcmVhdGVkLCBjb21taXR0ZWQgYW5k
IGRlc3Ryb3llZApJbmRleDogU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAkocmV2aXNpb24gMjUxNDk0KQor
KysgU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yNjAs
NiArMjYwLDggQEAgVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQcm9jZXNzUG9vbENvbmZpZwogVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tSZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5tbQog
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tTZXNzaW9uU3RhdGUubW0KIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLVGV4dElucHV0Q29udGV4dC5tbQorVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFu
aXB1bGF0aW9uSXRlbS5tbQorVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9u
VG9rZW4ubW0KIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGh1bWJuYWlsVmlldy5tbQogVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCiBVSVByb2Nlc3Mv
QVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVyLm1tCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDI1MTQ5NCkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0MTksNiAr
OTQxOSwzNCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0TW9ja1dlYkF1dGhlbnRpY2F0CiB9CiAj
ZW5kaWYKIAordm9pZCBXZWJQYWdlUHJveHk6OnN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMoVGV4dE1h
bmlwdWxhdGlvbkl0ZW1DYWxsYmFjayYmIGNhbGxiYWNrLCBXVEY6OkNvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBpZiAoIWhhc1J1bm5pbmdQcm9j
ZXNzKCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBtX3RleHRNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxi
YWNrKTsKKyAgICBtX3Byb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpXZWJQYWdlOjpTdGFydFRleHRNYW5pcHVsYXRpb25zKCksIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpLCBtX3dlYlBhZ2VJRCk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaWRG
aW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW0oV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1JRCwKKyAgICBjb25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuPiYgdG9rZW5zKQorewor
ICAgIGlmICghbV90ZXh0TWFuaXB1bGF0aW9uSXRlbUNhbGxiYWNrKQorICAgICAgICByZXR1cm47
CisgICAgbV90ZXh0TWFuaXB1bGF0aW9uSXRlbUNhbGxiYWNrKGl0ZW1JRCwgdG9rZW5zKTsKK30K
Kwordm9pZCBXZWJQYWdlUHJveHk6OmNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihXZWJDb3JlOjpU
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIgaXRlbUlELAorICAgIGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0
aW9uVG9rZW4+JiB0b2tlbnMsIFdURjo6RnVuY3Rpb248dm9pZCAoYm9vbCBzdWNjZXNzKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpIHsKKyAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
OldlYlBhZ2U6OkNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihpdGVtSUQsIHRva2VucyksIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpLCBtX3dlYlBhZ2VJRCk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdAogCiAjdW5kZWYgTUVSR0VfV0hFRUxfRVZFTlRTCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMjUxNDk0KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDcg
QEAKICNpbmNsdWRlIDxXZWJDb3JlL0ZvbnRBdHRyaWJ1dGVzLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZUxvYWRlclR5cGVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4gLy8g
RklYTUU6IE1vdmUgTGF5b3V0Vmlld3BvcnRDb25zdHJhaW50IHRvIGl0cyBvd24gZmlsZSBhbmQg
c3RvcCBpbmNsdWRpbmcgdGhpcy4KKyNpbmNsdWRlIDxXZWJDb3JlL0dsb2JhbEZyYW1lSWRlbnRp
Zmllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW5wdXRNb2RlLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9MYXlvdXRQb2ludC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTGF5b3V0U2l6ZS5oPgpAQCAtOTMs
NiArOTQsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2VhcmNoUG9wdXBNZW51Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9UZXh0Q2hlY2tpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRHcmFudWxh
cml0eS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24uaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1ZpZXdwb3J0QXJndW1lbnRzLmg+CiAjaW5jbHVkZSA8bWVtb3J5PgpAQCAt
MTYxMSw2ICsxNjEzLDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1vY2tXZWJBdXRoZW50aWNh
dGlvbkNvbmZpZ3VyYXRpb24oV2ViQ29yZTo6TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJh
dGlvbiYmKTsKICNlbmRpZgogCisgICAgdXNpbmcgVGV4dE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFj
ayA9IFdURjo6RnVuY3Rpb248dm9pZCAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXI6Okl0ZW1JZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuPiYpPjsKKyAgICB2b2lkIHN0YXJ0VGV4dE1h
bmlwdWxhdGlvbnMoVGV4dE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjayYmLCBXVEY6OkNvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBkaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0
ZW0oV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyLCBj
b25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxh
dGlvblRva2VuPiYpOworICAgIHZvaWQgY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uKFdlYkNvcmU6
OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRlbnRpZmllciwKKyAgICAgICAgY29u
c3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRp
b25Ub2tlbj4mLCBXVEY6OkZ1bmN0aW9uPHZvaWQgKGJvb2wgc3VjY2Vzcyk+JiYpOworCiBwcml2
YXRlOgogICAgIFdlYlBhZ2VQcm94eShQYWdlQ2xpZW50JiwgV2ViUHJvY2Vzc1Byb3h5JiwgUmVm
PEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+JiYpOwogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXpl
KCk7CkBAIC0yNTc0LDYgKzI1ODIsOCBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxT
dXNwZW5kZWRQYWdlUHJveHk+IG1fc3VzcGVuZGVkUGFnZUtlcHRUb1ByZXZlbnRGbGFzaGluZzsK
ICAgICBXZWFrUHRyPFN1c3BlbmRlZFBhZ2VQcm94eT4gbV9sYXN0U3VzcGVuZGVkUGFnZTsKIAor
ICAgIFRleHRNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2sgbV90ZXh0TWFuaXB1bGF0aW9uSXRlbUNh
bGxiYWNrOworCiAjaWYgSEFWRShQRU5DSUxLSVQpCiAgICAgc3RkOjp1bmlxdWVfcHRyPEVkaXRh
YmxlSW1hZ2VDb250cm9sbGVyPiBtX2VkaXRhYmxlSW1hZ2VDb250cm9sbGVyOwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2Vz
LmluCShyZXZpc2lvbiAyNTE0OTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTU4MSw0ICs1ODEsNyBAQCBtZXNz
YWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIFNlbmRNZXNzYWdlVG9XZWJWaWV3KHN0cnVjdCBX
ZWJLaXQ6OlVzZXJNZXNzYWdlIHVzZXJNZXNzYWdlKQogICAgIFNlbmRNZXNzYWdlVG9XZWJWaWV3
V2l0aFJlcGx5KHN0cnVjdCBXZWJLaXQ6OlVzZXJNZXNzYWdlIHVzZXJNZXNzYWdlKSAtPiAoc3Ry
dWN0IFdlYktpdDo6VXNlck1lc3NhZ2UgcmVwbHlNZXNzYWdlKSBBc3luYwogI2VuZGlmCisKKyAg
ICBEaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW0oV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1JRCwgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zKQorCiB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0JKHJl
dmlzaW9uIDI1MTQ5NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDkgQEAKICNpbXBvcnQgIl9XS1Jl
bW90ZU9iamVjdFJlZ2lzdHJ5SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1Nlc3Npb25TdGF0ZUlu
dGVybmFsLmgiCiAjaW1wb3J0ICJfV0tUZXh0SW5wdXRDb250ZXh0SW50ZXJuYWwuaCIKKyNpbXBv
cnQgIl9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oIgorI2ltcG9ydCAiX1dLVGV4dE1hbmlw
dWxhdGlvbkl0ZW0uaCIKKyNpbXBvcnQgIl9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oIgogI2lt
cG9ydCAiX1dLVmlzaXRlZExpbmtTdG9yZUludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tXZWJzaXRl
UG9saWNpZXNJbnRlcm5hbC5oIgogI2ltcG9ydCA8V2ViQ29yZS9FbGVtZW50Q29udGV4dC5oPgpA
QCAtMTEzLDYgKzExNiw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1NldHRpbmdzLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TdHJpbmdVdGlsaXRp
ZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaD4KICNp
bXBvcnQgPFdlYkNvcmUvVmFsaWRhdGlvbkJ1YmJsZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9WaWV3
cG9ydEFyZ3VtZW50cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Xcml0aW5nTW9kZS5oPgpAQCAtMjc2
LDYgKzI4MCw4IEBAIHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpTY3JvbGxiYXJPdmVybGEKIAog
ICAgIEJPT0wgX3VzZVBsYXRmb3JtRmluZFVJOwogCisgICAgV2Vha09iakNQdHI8aWQgPF9XS1Rl
eHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4+IF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU7CisKICNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIFJldGFpblB0cjxfV0tSZW1vdGVPYmplY3RSZWdp
c3RyeT4gX3JlbW90ZU9iamVjdFJlZ2lzdHJ5OwogCkBAIC03NDM5LDYgKzc0NDUsNjUgQEAgLSAo
dm9pZClfZXhlY3V0ZUVkaXRDb21tYW5kOihOU1N0cmluZyAqKQogICAgIH0pOwogfQogCistIChp
ZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlPilfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRl
Cit7CisgICAgcmV0dXJuIF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUuZ2V0QXV0b3JlbGVhc2Vk
KCk7Cit9CisKKy0gKHZvaWQpX3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTooaWQgPF9XS1Rl
eHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4pZGVsZWdhdGUKK3sKKyAgICBfdGV4dE1hbmlwdWxhdGlv
bkRlbGVnYXRlID0gZGVsZWdhdGU7Cit9CisKKy0gKHZvaWQpX3N0YXJ0VGV4dE1hbmlwdWxhdGlv
bnNXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoKSljb21wbGV0aW9uSGFuZGxlcgorewor
ICAgIGlmICghX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmICghX3BhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBfcGFnZS0+c3RhcnRUZXh0TWFuaXB1
bGF0aW9ucyhbd2Vha1NlbGYgPSBXZWFrT2JqQ1B0cjxXS1dlYlZpZXc+KHNlbGYpXSAoV2ViQ29y
ZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1JRCwKKyAg
ICAgICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpN
YW5pcHVsYXRpb25Ub2tlbj4mIHRva2VucykgeworICAgICAgICBpZiAoIXdlYWtTZWxmKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gcmV0YWluZWRTZWxmID0gd2Vha1NlbGYu
Z2V0KCk7CisgICAgICAgIGF1dG8gZGVsZWdhdGUgPSBbcmV0YWluZWRTZWxmIF90ZXh0TWFuaXB1
bGF0aW9uRGVsZWdhdGVdOworICAgICAgICBpZiAoIWRlbGVnYXRlKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIE5TTXV0YWJsZUFycmF5ICp3a1Rva2VucyA9IFtOU011dGFibGVBcnJh
eSBhcnJheVdpdGhDYXBhY2l0eTp0b2tlbnMuc2l6ZSgpXTsKKyAgICAgICAgZm9yIChhdXRvJiB0
b2tlbiA6IHRva2VucykgeworICAgICAgICAgICAgYXV0byB3a1Rva2VuID0gYWRvcHROUyhbW19X
S1RleHRNYW5pcHVsYXRpb25Ub2tlbiBhbGxvY10gaW5pdF0pOworICAgICAgICAgICAgW3drVG9r
ZW4gc2V0SWRlbnRpZmllcjpTdHJpbmc6Om51bWJlcih0b2tlbi5pZGVudGlmaWVyLnRvVUludDY0
KCkpXTsKKyAgICAgICAgICAgIFt3a1Rva2VuIHNldENvbnRlbnQ6dG9rZW4uY29udGVudF07Cisg
ICAgICAgICAgICBbd2tUb2tlbnMgYWRkT2JqZWN0OndrVG9rZW4uZ2V0KCldOworICAgICAgICB9
CisKKyAgICAgICAgYXV0byBpdGVtID0gYWRvcHROUyhbW19XS1RleHRNYW5pcHVsYXRpb25JdGVt
IGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6U3RyaW5nOjpudW1iZXIoaXRlbUlELnRvVUludDY0
KCkpIHRva2Vuczp3a1Rva2Vuc10pOworICAgICAgICBbZGVsZWdhdGUgX3dlYlZpZXc6cmV0YWlu
ZWRTZWxmLmdldCgpIGRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbTppdGVtLmdldCgpXTsKKyAg
ICB9LCBbY2FwdHVyZWRDb21wbGV0aW9uQmxvY2sgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhh
bmRsZXIpXSAoKSB7CisgICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkJsb2NrKCk7CisgICAgfSk7
Cit9CisKKy0gKHZvaWQpX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbjooX1dLVGV4dE1hbmlwdWxh
dGlvbkl0ZW0gKilpdGVtIGNvbXBsZXRpb246KHZvaWQoXikoQk9PTCBzdWNjZXNzKSljb21wbGV0
aW9uSGFuZGxlcgoreworICAgIGlmICghX3BhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGF1
dG8gaXRlbUlEID0gbWFrZU9iamVjdElkZW50aWZpZXI8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyVHlwZT4oU3RyaW5nKGl0ZW0uaWRlbnRpZmllciku
dG9VSW50NjQoKSk7CisKKyAgICBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuPiB0b2tlbnM7CisgICAgZm9yIChfV0tUZXh0TWFuaXB1
bGF0aW9uVG9rZW4gKndrVG9rZW4gaW4gaXRlbS50b2tlbnMpIHsKKyAgICAgICAgYXV0byB0b2tl
bklEID0gbWFrZU9iamVjdElkZW50aWZpZXI8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXI6OlRva2VuSWRlbnRpZmllclR5cGU+KFN0cmluZyh3a1Rva2VuLmlkZW50aWZpZXIpLnRv
VUludDY0KCkpOworICAgICAgICB0b2tlbnMuYXBwZW5kKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbiB7IHRva2VuSUQsIHdrVG9rZW4uY29udGVu
dCB9KTsKKyAgICB9CisKKyAgICBfcGFnZS0+Y29tcGxldGVUZXh0TWFuaXB1bGF0aW9uKGl0ZW1J
RCwgdG9rZW5zLCBbY2FwdHVyZWRDb21wbGV0aW9uQmxvY2sgPSBtYWtlQmxvY2tQdHIoY29tcGxl
dGlvbkhhbmRsZXIpXSAoYm9vbCBzdWNjZXNzKSB7CisgICAgICAgIGNhcHR1cmVkQ29tcGxldGlv
bkJsb2NrKHN1Y2Nlc3MpOworICAgIH0pOworfQorCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
IAogLSAoQ0dSZWN0KV9kcmFnQ2FyZXRSZWN0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgJKHJldmlzaW9uIDI1MTQ5
NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw2ICsxMTMsNyBAQCB0eXBlZGVmIE5TX09QVElPTlMo
TlNVSW50ZWdlciwgX1dLUmVjdEVkCiBAY2xhc3MgX1dLU2FmZUJyb3dzaW5nV2FybmluZzsKIEBj
bGFzcyBfV0tTZXNzaW9uU3RhdGU7CiBAY2xhc3MgX1dLVGV4dElucHV0Q29udGV4dDsKK0BjbGFz
cyBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbTsKIEBjbGFzcyBfV0tUaHVtYm5haWxWaWV3OwogQGNs
YXNzIF9XS1dlYnNpdGVQb2xpY2llczsKIEBjbGFzcyBfV0tXZWJWaWV3UHJpbnRGb3JtYXR0ZXI7
CkBAIC0xMjAsOSArMTIxLDEwIEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tS
ZWN0RWQKIEBwcm90b2NvbCBXS0hpc3RvcnlEZWxlZ2F0ZVByaXZhdGU7CiBAcHJvdG9jb2wgX1dL
RGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZTsKIEBwcm90b2NvbCBfV0tGaW5kRGVsZWdhdGU7CitA
cHJvdG9jb2wgX1dLRnVsbHNjcmVlbkRlbGVnYXRlOwogQHByb3RvY29sIF9XS0ljb25Mb2FkaW5n
RGVsZWdhdGU7CiBAcHJvdG9jb2wgX1dLSW5wdXREZWxlZ2F0ZTsKLUBwcm90b2NvbCBfV0tGdWxs
c2NyZWVuRGVsZWdhdGU7CitAcHJvdG9jb2wgX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOwog
CiBAaW50ZXJmYWNlIFdLV2ViVmlldyAoV0tQcml2YXRlKQogCkBAIC01NzUsNiArNTc3LDEwIEBA
IHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tSZWN0RWQKIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgX1dLSW5zcGVjdG9yICpfaW5zcGVjdG9yIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVh
ZG9ubHkpIF9XS0ZyYW1lSGFuZGxlICpfbWFpbkZyYW1lIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTQuNCksIGlvcygxMi4yKSk7CiAKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrLCBzZXR0
ZXI9X3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTopIGlkIDxfV0tUZXh0TWFuaXB1bGF0aW9u
RGVsZWdhdGU+IF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3N0YXJ0VGV4dE1hbmlw
dWxhdGlvbnNXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikodm9pZCkpY29tcGxldGlvbkhh
bmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEp
KTsKKy0gKHZvaWQpX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbjooX1dLVGV4dE1hbmlwdWxhdGlv
bkl0ZW0gKilpdGVtIGNvbXBsZXRpb246KHZvaWQoXikoQk9PTCBzdWNjZXNzKSljb21wbGV0aW9u
SGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RC
QSkpOworCiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRTY3JvbGxpbmdVcGRhdGVz
RGlzYWJsZWRGb3JUZXN0aW5nOikgQk9PTCBfc2Nyb2xsaW5nVXBkYXRlc0Rpc2FibGVkRm9yVGVz
dGluZyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkp
OwogCiAtICh2b2lkKV9wcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZzsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9u
RGVsZWdhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxX
ZWJLaXQvV0tGb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5o
PgorCitAY2xhc3MgX1dLRnJhbWVIYW5kbGU7CitAY2xhc3MgX1dLVGV4dE1hbmlwdWxhdGlvbkl0
ZW07CisKK0Bwcm90b2NvbCBfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgPE5TT2JqZWN0Pgor
CitAb3B0aW9uYWwKKworLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWRG
aW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW06KF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICopaXRlbTsK
KworQGVuZAorCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4
dE1hbmlwdWxhdGlvbkl0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0uaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0u
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8
V2ViS2l0L1dLRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24u
aD4KKworQGNsYXNzIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbjsKKworV0tfQ0xBU1NfQVZBSUxB
QkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS1Rl
eHRNYW5pcHVsYXRpb25JdGVtIDogTlNPYmplY3QKKworLSAoaW5zdGFuY2V0eXBlKWluaXQgTlNf
VU5BVkFJTEFCTEU7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJZGVudGlmaWVyOihOU1N0cmlu
ZyAqKWlkZW50aWZpZXIgdG9rZW5zOihOU0FycmF5PF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiAq
PiAqKXRva2VuczsKKworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1N0
cmluZyAqaWRlbnRpZmllcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkg
TlNBcnJheTxfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gKj4gKnRva2VuczsKKworQGVuZApJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25J
dGVtLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5tbQkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0ubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oIgorCisjaW1wb3J0IDx3dGYvUmV0
YWluUHRyLmg+CisKK0BpbXBsZW1lbnRhdGlvbiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSB7Cisg
ICAgUmV0YWluUHRyPE5TU3RyaW5nPiBfaWRlbnRpZmllcjsKKyAgICBSZXRhaW5QdHI8TlNBcnJh
eTxfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gKj4+IF90b2tlbnM7Cit9CisKKy0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aElkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciB0b2tlbnM6KE5T
QXJyYXk8X1dLVGV4dE1hbmlwdWxhdGlvblRva2VuICo+ICopdG9rZW5zCit7CisgICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfaWRlbnRp
ZmllciA9IGlkZW50aWZpZXI7CisgICAgX3Rva2VucyA9IHRva2VuczsKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworLSAoTlNTdHJpbmcgKilpZGVudGlmaWVyCit7CisgICAgcmV0dXJuIF9pZGVudGlm
aWVyLmdldCgpOworfQorCistIChOU0FycmF5PF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiAqPiAq
KXRva2VucworeworICAgIHJldHVybiBfdG9rZW5zLmdldCgpOworfQorCitAZW5kCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvblRva2Vu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Rl
eHRNYW5pcHVsYXRpb25Ub2tlbi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0L1dLRm91bmRh
dGlvbi5oPgorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworV0tfQ0xBU1Nf
QVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNl
IF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljLCBjb3B5KSBOU1N0cmluZyAqaWRlbnRpZmllcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBj
b3B5KSBOU1N0cmluZyAqY29udGVudDsKKworQGVuZApJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvblRv
a2VuLm1tCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4ubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJfV0tUZXh0
TWFuaXB1bGF0aW9uVG9rZW4uaCIKKworI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCitAaW1w
bGVtZW50YXRpb24gX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuCisKKy0gKGluc3RhbmNldHlwZSlp
bml0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBu
aWw7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK0BlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
Lm1tCShyZXZpc2lvbiAyNTE0OTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tG
dWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYs
NyBAQAogI2ltcG9ydCA8V2ViQ29yZS9WaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9XZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9XZWJDb3JlRnVsbFNjcmVlbldpbmRvdy5oPgorI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3Jl
R3JhcGhpY3NTUEkuaD4KICNpbXBvcnQgPHBhbC9zeXN0ZW0vU2xlZXBEaXNhYmxlci5oPgogI2lt
cG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KIApJbmRleDogU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNTE0OTQpCisr
KyBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzMzLDYgKzEzMzMsOSBAQAogCQk5OUU3MTRDNTFDMTI0QTA0MDA2NjVCM0Eg
LyogX1dLQXV0b21hdGlvbkRlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5OUU3MTRDMTFDMTI0OUU2MDA2NjVCM0EgLyogX1dLQXV0b21hdGlv
bkRlbGVnYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJOTlFNzE4OUEyMUY3OUQ5RTAwNTVFOTc1IC8qIF9XS1RvdWNoRXZlbnRHZW5lcmF0b3Iu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OUU3MTg5
NjIxRjc5RDlEMDA1NUU5NzUgLyogX1dLVG91Y2hFdmVudEdlbmVyYXRvci5tbSAqLzsgfTsKIAkJ
OTlFNzE4OUMyMUY3OUQ5RTAwNTVFOTc1IC8qIF9XS1RvdWNoRXZlbnRHZW5lcmF0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5RTcxODk4MjFGNzlE
OUUwMDU1RTk3NSAvKiBfV0tUb3VjaEV2ZW50R2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOUIwMkUwQ0IyMzVFQjk1MzAwNDA0NEIy
IC8qIF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwMkUwQzkyMzVFQjYyRDAwNDA0NEIyIC8qIF9XS1Rl
eHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTlCMDJFMENDMjM1RUI5NTcwMDQwNDRCMiAvKiBfV0tUZXh0TWFu
aXB1bGF0aW9uSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOUIwMkUwQ0EyMzVFQjg4NDAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25JdGVt
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOUIw
MkUwRDcyMzVGQzk0RjAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwMkUwQ0QyMzVFQjk2
NzAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlGQjVGMzk1MTY5RTZBODAwMDJDMjVC
RiAvKiBXS0NvbnRleHRQcml2YXRlTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5RkI1RjM5MzE2OUU2QTgwMDAyQzI1QkYgLyogV0tDb250ZXh0UHJp
dmF0ZU1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUExMDJBNzA4MUVDMEVFRTkwMEQ4MUQ4MiAvKiBjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5
ZXIgRVNSLnBsdWdpbi5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTVFMzk0OTFENUJEOEE3MDBCNEI3Q0UgLyog
Y29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyIEVTUi5wbHVnaW4uc2IgKi87IH07CiAJCUExMDQ2
RUExMjA3OTI2MzEwMEYwQzVEOCAvKiBXS1BERlZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMDQ2RTlGMjA3OTI2MzEwMEYwQzVEOCAvKiBXS1BE
RlZpZXcuaCAqLzsgfTsKQEAgLTE3MjgsOCArMTczMSw2IEBACiAJCQljb21waWxlclNwZWMgPSBj
b20uYXBwbGUuY29tcGlsZXJzLnByb3h5LnNjcmlwdDsKIAkJCWZpbGVQYXR0ZXJucyA9ICIqLmgi
OwogCQkJZmlsZVR5cGUgPSBwYXR0ZXJuLnByb3h5OwotCQkJaW5wdXRGaWxlcyA9ICgKLQkJCSk7
CiAJCQlpc0VkaXRhYmxlID0gMTsKIAkJCW91dHB1dEZpbGVzID0gKAogCQkJCSIkKEhFQURFUl9P
VVRQVVRfRElSKS8kKElOUFVUX0ZJTEVfTkFNRSkiLApAQCAtNDA0Niw2ICs0MDQ3LDExIEBACiAJ
CTk5RTcxODk2MjFGNzlEOUQwMDU1RTk3NSAvKiBfV0tUb3VjaEV2ZW50R2VuZXJhdG9yLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLVG91Y2hFdmVudEdlbmVy
YXRvci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTlFNzE4OTgyMUY3OUQ5RTAw
NTVFOTc1IC8qIF9XS1RvdWNoRXZlbnRHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gX1dLVG91Y2hFdmVudEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5OUY2NDJEMjFGQUJFMzc4MDA5NjIxRTkgLyogQ29vcmRpbmF0ZVN5c3RlbS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb29yZGluYXRlU3lzdGVtLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCMDJFMEM5MjM1RUI2MkQwMDQwNDRCMiAvKiBf
V0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLVGV4dE1hbmlw
dWxhdGlvbkRlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCMDJFMENB
MjM1RUI4ODQwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk5QjAyRTBDRDIzNUVCOTY3MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvblRva2Vu
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk5QjAyRTBDRTIzNUVCQjE0MDA0MDQ0QjIgLyogX1dLVGV4dE1h
bmlwdWxhdGlvblRva2VuLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLVGV4dE1hbmlwdWxh
dGlvblRva2VuLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjAyRTBEMDIzNUVC
Q0NBMDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0ubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOUJDNTlENkMxRUZDQ0NCNjAwMUU4RDA5IC8qIENhbGxiYWNrSUQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbGJhY2tJRC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5QkM1OUQ2RDFFRkNEQzZEMDAxRThEMDkgLyogT3B0aW9uYWxDYWxsYmFj
a0lELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wdGlvbmFsQ2FsbGJhY2tJ
RC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5RjU0Rjg4RTE2NDg4RTg3MDA3REY4
MUEgLyogQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IEF1eGlsaWFyeVByb2Nlc3NNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC02MzQ1LDYgKzYzNTEsMTEgQEAKIAkJCQkyREU5QjEzODIyMzFGNjFDMDA1Mjg3
QjcgLyogX1dLVGV4dElucHV0Q29udGV4dC5oICovLAogCQkJCTJERTlCMTM3MjIzMUY2MUMwMDUy
ODdCNyAvKiBfV0tUZXh0SW5wdXRDb250ZXh0Lm1tICovLAogCQkJCTJERTlCMTNCMjIzMUY3N0Mw
MDUyODdCNyAvKiBfV0tUZXh0SW5wdXRDb250ZXh0SW50ZXJuYWwuaCAqLywKKwkJCQk5QjAyRTBD
OTIzNUVCNjJEMDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmggKi8sCisJ
CQkJOUIwMkUwQ0EyMzVFQjg4NDAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtLmgg
Ki8sCisJCQkJOUIwMkUwRDAyMzVFQkNDQTAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25J
dGVtLm1tICovLAorCQkJCTlCMDJFMENEMjM1RUI5NjcwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1
bGF0aW9uVG9rZW4uaCAqLywKKwkJCQk5QjAyRTBDRTIzNUVCQjE0MDA0MDQ0QjIgLyogX1dLVGV4
dE1hbmlwdWxhdGlvblRva2VuLm1tICovLAogCQkJCTJENkIzNzE5MThBOTY3QUQwMDQyQUU4MCAv
KiBfV0tUaHVtYm5haWxWaWV3LmggKi8sCiAJCQkJMkQ2QjM3MUExOEE5NjdBRDAwNDJBRTgwIC8q
IF9XS1RodW1ibmFpbFZpZXcubW0gKi8sCiAJCQkJMkRBQ0U2NEQxOEFEQkZGMDAwRTRDQTc2IC8q
IF9XS1RodW1ibmFpbFZpZXdJbnRlcm5hbC5oICovLApAQCAtOTMxMCw2ICs5MzIxLDkgQEAKIAkJ
CQkxQTAwMkQ0MzE5NkIzMzcwMDBCOUFENDQgLyogX1dLU2Vzc2lvblN0YXRlSW50ZXJuYWwuaCBp
biBIZWFkZXJzICovLAogCQkJCTJERTlCMTNBMjIzMUY2MUMwMDUyODdCNyAvKiBfV0tUZXh0SW5w
dXRDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkyREU5QjEzQzIyMzFGNzdDMDA1Mjg3Qjcg
LyogX1dLVGV4dElucHV0Q29udGV4dEludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQk5QjAy
RTBDQjIzNUVCOTUzMDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmggaW4g
SGVhZGVycyAqLywKKwkJCQk5QjAyRTBDQzIzNUVCOTU3MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlw
dWxhdGlvbkl0ZW0uaCBpbiBIZWFkZXJzICovLAorCQkJCTlCMDJFMEQ3MjM1RkM5NEYwMDQwNDRC
MiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTJENkIz
NzFCMThBOTY3QUQwMDQyQUU4MCAvKiBfV0tUaHVtYm5haWxWaWV3LmggaW4gSGVhZGVycyAqLywK
IAkJCQkyREFDRTY0RTE4QURCRkYwMDBFNENBNzYgLyogX1dLVGh1bWJuYWlsVmlld0ludGVybmFs
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OUU3MTg5QzIxRjc5RDlFMDA1NUU5NzUgLyogX1dLVG91
Y2hFdmVudEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMjUxNDk0KQorKysgU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY4MjksNiArNjgyOSw1MSBAQCBPcHRpb25hbDxXZWJDb3JlOjpFbGVtZW50Q29udGV4dD4g
V2ViUGFnCiAgICAgcmV0dXJuIFdlYkNvcmU6OkVsZW1lbnRDb250ZXh0IHsgZWxlbWVudFJlY3RJ
blJvb3RWaWV3Q29vcmRpbmF0ZXMoZWxlbWVudCwgKmZyYW1lKSwgbV9pZGVudGlmaWVyLCBkb2N1
bWVudC5pZGVudGlmaWVyKCksIGRvY3VtZW50LmlkZW50aWZpZXJGb3JFbGVtZW50KGVsZW1lbnQp
IH07CiB9CiAKK3ZvaWQgV2ViUGFnZTo6c3RhcnRUZXh0TWFuaXB1bGF0aW9ucyhDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgaWYgKCFtX3BhZ2Up
CisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gbWFpbkRvY3VtZW50ID0gbWFrZVJlZlB0ciht
X3BhZ2UtPm1haW5GcmFtZSgpLmRvY3VtZW50KCkpOworICAgIGlmICghbWFpbkRvY3VtZW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICBtYWluRG9jdW1lbnQtPnRleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyKCkuc3RhcnRPYnNlcnZpbmdQYXJhZ3JhcGhzKFt3ZWJQYWdlID0gbWFrZVdlYWtQdHIo
KnRoaXMpXSAoV2ViQ29yZTo6RG9jdW1lbnQmIGRvY3VtZW50LAorICAgICAgICBXZWJDb3JlOjpU
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIgaXRlbUlkZW50aWZpZXIs
IGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1
bGF0aW9uVG9rZW4+JiB0b2tlbnMpIHsKKyAgICAgICAgYXV0byogZnJhbWUgPSBkb2N1bWVudC5m
cmFtZSgpOworICAgICAgICBpZiAoIXdlYlBhZ2UgfHwgIWZyYW1lIHx8IHdlYlBhZ2UtPm1haW5G
cmFtZSgpICE9IGZyYW1lKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8qIHdl
YkZyYW1lID0gV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoKmZyYW1lKTsKKyAgICAgICAgaWYgKCF3
ZWJGcmFtZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB3ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbShpdGVtSWRl
bnRpZmllciwgdG9rZW5zKSk7CisgICAgfSk7CisgICAgLy8gRm9yIG5vdywgd2UgYXNzdW1lIHN0
YXJ0T2JzZXJ2aW5nUGFyYWdyYXBocyBmaW5kIGFsbCBwYXJhZ3JhcGhzIHN5bmNocm9ub3VzbHkg
YXQgb25jZS4KKyAgICBjb21wbGV0aW9uSGFuZGxlcigpOworfQorCit2b2lkIFdlYlBhZ2U6OmNv
bXBsZXRlVGV4dE1hbmlwdWxhdGlvbihXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxl
cjo6SXRlbUlkZW50aWZpZXIgaXRlbUlELAorICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+JiB0b2tlbnMsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgYXV0
byBjb21wbGV0ZU1hbmlwdWxhdGlvbiA9IFsmXSB7CisgICAgICAgIGlmICghbV9wYWdlKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1dG8gbWFpbkRvY3VtZW50ID0gbWFr
ZVJlZlB0cihtX3BhZ2UtPm1haW5GcmFtZSgpLmRvY3VtZW50KCkpOworICAgICAgICBpZiAoIW1h
aW5Eb2N1bWVudCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBhdXRvKiBj
b250cm9sbGVyID0gbWFpbkRvY3VtZW50LT50ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcklmRXhp
c3RzKCk7CisgICAgICAgIGlmICghY29udHJvbGxlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICByZXR1cm4gY29udHJvbGxlci0+Y29tcGxldGVNYW5pcHVsYXRpb24oaXRl
bUlELCB0b2tlbnMpOworICAgIH07CisgICAgY29tcGxldGlvbkhhbmRsZXIoY29tcGxldGVNYW5p
cHVsYXRpb24oKSk7Cit9CisKIFBBTDo6U2Vzc2lvbklEIFdlYlBhZ2U6OnNlc3Npb25JRCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnNlc3Npb25JRCgpOwpJ
bmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNp
b24gMjUxNDk0KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Qb2lu
dGVySUQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlRGF0YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJBY3Rpdml0
eS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlckNvbnRlbnRUeXBlcy5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbi5oPgpAQCAtMTE5Niw2ICsxMTk3LDEw
IEBAIHB1YmxpYzoKICAgICBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50Rm9yQ29udGV4dChjb25z
dCBXZWJDb3JlOjpFbGVtZW50Q29udGV4dCYpIGNvbnN0OwogICAgIE9wdGlvbmFsPFdlYkNvcmU6
OkVsZW1lbnRDb250ZXh0PiBjb250ZXh0Rm9yRWxlbWVudChXZWJDb3JlOjpFbGVtZW50JikgY29u
c3Q7CiAKKyAgICB2b2lkIHN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKKyAgICB2b2lkIGNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihXZWJDb3JlOjpU
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIsCisgICAgICAgIGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9u
VG9rZW4+JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CisKICNpZiBFTkFCTEUo
QVBQTEVfUEFZKQogICAgIFdlYlBheW1lbnRDb29yZGluYXRvciogcGF5bWVudENvb3JkaW5hdG9y
KCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjUxNDk0KQorKysgU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5
KQpAQCAtNTgyLDQgKzU4Miw3IEBAIEdlbmVyYXRlU3ludGhldGljRWRpdGluZ0NvbW1hbmQoZW51
bTp1aW4KICAgICBTZW5kTWVzc2FnZVRvV2ViRXh0ZW5zaW9uKHN0cnVjdCBXZWJLaXQ6OlVzZXJN
ZXNzYWdlIHVzZXJNZXNzYWdlKQogICAgIFNlbmRNZXNzYWdlVG9XZWJFeHRlbnNpb25XaXRoUmVw
bHkoc3RydWN0IFdlYktpdDo6VXNlck1lc3NhZ2UgdXNlck1lc3NhZ2UpIC0+IChzdHJ1Y3QgV2Vi
S2l0OjpVc2VyTWVzc2FnZSByZXBseU1lc3NhZ2UpIEFzeW5jCiAjZW5kaWYKKworICAgIFN0YXJ0
VGV4dE1hbmlwdWxhdGlvbnMoKSAtPiAoKSBBc3luYworICAgIENvbXBsZXRlVGV4dE1hbmlwdWxh
dGlvbihXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIg
aXRlbUlELCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlw
dWxhdGlvblRva2VuPiB0b2tlbnMpIC0+IChib29sIHN1Y2Nlc3MpIEFzeW5jCiB9CkluZGV4OiBU
b29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
NTE1MDApCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBA
QAorMjAxOS0xMC0yMyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAg
ICBBZGQgYSBtZWNoYW5pc20gdG8gZmluZCBhbmQgbWFuaXB1bGF0ZSB0ZXh0IGJ5IHBhcmFncmFw
aHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzI4
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVk
IGJhc2ljIEFQSSB0ZXN0cyBmb3IgdGhlIG5ldyBTUEkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW06IEFkZGVk
LgorICAgICAgICAoLVtUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgaW5pdF0pOgorICAgICAgICAo
LVtUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgX3dlYlZpZXc6ZGlkRmluZEl0ZW06Zm9yRnJhbWU6
XSk6CisgICAgICAgICgtW1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBpdGVtc10pOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6Y3JlYXRlSXRlbSk6CisKIDIwMTktMTAtMjEgIEppZXdlbiBUYW4g
IDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViQXV0aG5dIFdhcm4gdXNlcnMg
d2hlbiBtdWx0aXBsZSBORkMgdGFncyBwcmVzZW50CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjUxNDk0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTczOCw2ICs3Mzgs
NyBAQAogCQk5OTg0RkFDQzFDRkZBRjYwMDA4RDE5OEMgLyogV0tXZWJWaWV3VGV4dElucHV0Lm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTk4NEZBQ0Ex
Q0ZGQUVFRTAwOEQxOThDIC8qIFdLV2ViVmlld1RleHRJbnB1dC5tbSAqLzsgfTsKIAkJOTk4NEZB
Q0UxQ0ZGQjA5MDAwOEQxOThDIC8qIGVkaXRhYmxlLWJvZHkuaHRtbCBpbiBDb3B5IFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OTg0RkFDRDFDRkZCMDM4MDA4
RDE5OEMgLyogZWRpdGFibGUtYm9keS5odG1sICovOyB9OwogCQk5OTk5MTA4QjFGMzkzQzk2MDA4
QUQ0NTUgLyogQ29weWluZy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk5OTkxMDhBMUYzOTNDOEIwMDhBRDQ1NSAvKiBDb3B5aW5nLm1tICovOyB9Owor
CQk5QjAyRTBENjIzNUZBNDdEMDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbi5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMDJFMEQ1MjM1RkE0N0Qw
MDQwNDRCMiAvKiBUZXh0TWFuaXB1bGF0aW9uLm1tICovOyB9OwogCQk5QjA3ODZBNTFDNTg4NUMz
MDBEMTU5RTMgLyogSW5qZWN0ZWRCdW5kbGVNYWtlQWxsU2hhZG93Um9vdHNPcGVuX0J1bmRsZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjA3ODZB
NDFDNTg4NUMzMDBEMTU5RTMgLyogSW5qZWN0ZWRCdW5kbGVNYWtlQWxsU2hhZG93Um9vdHNPcGVu
X0J1bmRsZS5jcHAgKi87IH07CiAJCTlCMTlDREEwMUYwNkRGRTMwMDA1NDhERCAvKiBOZXR3b3Jr
UHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIxOUNEOUUxRjA2REZFMzAwMDU0OEREIC8qIE5l
dHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0gKi87IH07CiAJCTlCMUY2
Rjc4MUY5MDU1ODQwMEI1NTc0NCAvKiBDb3B5SFRNTC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMTA1NjQxMUY5MDQ1QzcwMEQ1NTgzRiAvKiBDb3B5
SFRNTC5tbSAqLzsgfTsKQEAgLTIxMjgsNiArMjEyOSw3IEBACiAJCTk5ODRGQUNBMUNGRkFFRUUw
MDhEMTk4QyAvKiBXS1dlYlZpZXdUZXh0SW5wdXQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXS1dlYlZpZXdUZXh0SW5wdXQubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk5ODRGQUNEMUNGRkIwMzgwMDhEMTk4QyAvKiBlZGl0YWJsZS1ib2R5Lmh0
bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAiZWRpdGFibGUtYm9keS5odG1sIjsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTk5OTEwOEExRjM5M0M4QjAwOEFENDU1IC8qIENv
cHlpbmcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDb3B5aW5n
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjAyRTBENTIzNUZBNDdEMDA0MDQ0
QjIgLyogVGV4dE1hbmlwdWxhdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRleHRNYW5p
cHVsYXRpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMDc4NkEyMUM1ODgz
MEYwMEQxNTlFMyAvKiBJbmplY3RlZEJ1bmRsZU1ha2VBbGxTaGFkb3dSb290c09wZW4uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVNYWtlQWxs
U2hhZG93Um9vdHNPcGVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIwNzg2
QTQxQzU4ODVDMzAwRDE1OUUzIC8qIEluamVjdGVkQnVuZGxlTWFrZUFsbFNoYWRvd1Jvb3RzT3Bl
bl9CdW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0
ZWRCdW5kbGVNYWtlQWxsU2hhZG93Um9vdHNPcGVuX0J1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTlCMTA1NjQxMUY5MDQ1QzcwMEQ1NTgzRiAvKiBDb3B5SFRNTC5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvcHlIVE1MLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjkzOSw2ICsyOTQxLDcgQEAKIAkJCQk1Nzc0QUE2NzIxRkJCRjc4MDBBRjJBMUIg
LyogVGVzdFNPQXV0aG9yaXphdGlvbi5tbSAqLywKIAkJCQlGNENENzRDNzIwRkRCNDk2MDBERTM3
OTQgLyogVGVzdFVSTFNjaGVtZUhhbmRsZXIuaCAqLywKIAkJCQlGNENENzRDODIwRkRCNDk2MDBE
RTM3OTQgLyogVGVzdFVSTFNjaGVtZUhhbmRsZXIubW0gKi8sCisJCQkJOUIwMkUwRDUyMzVGQTQ3
RDAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRpb24ubW0gKi8sCiAJCQkJNUMxNkY4RkIyMzBDOTQy
QjAwNzRDNEE4IC8qIFRleHRTaXplLm1tICovLAogCQkJCUMyMkZBMzJBMjI4Rjg3MDgwMDlENzk4
OCAvKiBUZXh0V2lkdGgubW0gKi8sCiAJCQkJNUM3M0E4MUEyMzIzMDU5ODAwREVBODVBIC8qIFRM
U0RlcHJlY2F0aW9uLm1tICovLApAQCAtNDgyMiw2ICs0ODI1LDcgQEAKIAkJCQlGNDUwMzNGNTIw
NkJFQzk1MDA5MzUxQ0UgLyogVGV4dEF1dG9zaXppbmdCb29zdC5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTkzRTYxOTNCMUY5MzFCM0EwMEFGMjQ1RSAvKiBUZXh0Q29kZWMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQ0UzNTI0RjkxQjE0NDFDNDAwMjhBN0M1IC8qIFRleHRGaWVsZERpZEJlZ2luQW5k
RW5kRWRpdGluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5QjAyRTBENjIzNUZBNDdEMDA0MDQ0
QjIgLyogVGV4dE1hbmlwdWxhdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVDMTZGOEZDMjMw
Qzk0MzcwMDc0QzRBOCAvKiBUZXh0U2l6ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUMyMkZBMzJC
MjI4Rjg3MDgwMDlENzk4OCAvKiBUZXh0V2lkdGgubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NF
N0VERDFBNDExQTkyMDA0NDdDNEMgLyogVGltZVJhbmdlcy5jcHAgaW4gU291cmNlcyAqLywKSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlv
bi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1RleHRNYW5pcHVsYXRpb24ubW0JKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW1w
b3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9ydCAiVGVzdC5oIgorI2ltcG9ydCAiVGVz
dFdLV2ViVmlldy5oIgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBv
cnQgPFdlYktpdC9fV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUuaD4KKyNpbXBvcnQgPFdlYktp
dC9fV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1RleHRNYW5p
cHVsYXRpb25Ub2tlbi5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CisjaW1wb3J0IDx3dGYv
UmV0YWluUHRyLmg+CisKK3N0YXRpYyBib29sIGRvbmUgPSBmYWxzZTsKKworQGludGVyZmFjZSBU
ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgOiBOU09iamVjdCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRl
bGVnYXRlPgorCistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZEZpbmRU
ZXh0TWFuaXB1bGF0aW9uSXRlbTooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVtOworCitA
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TQXJyYXk8X1dLVGV4dE1hbmlw
dWxhdGlvbkl0ZW0gKj4gKml0ZW1zOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXh0TWFu
aXB1bGF0aW9uRGVsZWdhdGUgeworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gX2l0ZW1z
OworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdAoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworICAgIF9pdGVtcyA9IGFkb3B0TlMoW1tOU011
dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lk
KV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRl
bTooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVtCit7CisgICAgW19pdGVtcyBhZGRPYmpl
Y3Q6aXRlbV07Cit9CisKKy0gKE5TQXJyYXk8X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKj4gKilp
dGVtcworeworICAgIHJldHVybiBfaXRlbXMuZ2V0KCk7Cit9CisKK0BlbmQKKworbmFtZXNwYWNl
IFRlc3RXZWJLaXRBUEkgeworCitURVNUKFRleHRNYW5pcHVsYXRpb24sIFN0YXJ0VGV4dE1hbmlw
dWxhdGlvbkZpbmRTaW1wbGVQYXJhZ3JhcGhzKQoreworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9w
dE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNN
YWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBbd2ViVmlldyBfc2V0VGV4dE1hbmlwdWxh
dGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3Vz
bHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPiIKKyAgICAgICAgIjxodG1sPjxib2R5
PmhlbGxvPGJyPndvcmxkPGRpdj5XZWJLaXQ8L2Rpdj48L2JvZHk+PC9odG1sPiJdOworCisgICAg
ZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENv
bXBsZXRpb25IYW5kbGVyOl57CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBhdXRvICppdGVtcyA9IFtkZWxl
Z2F0ZSBpdGVtc107CisgICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAzVUwpOworICAgIEVYUEVD
VF9FUShpdGVtc1swXS50b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX1NUUkVRKCJoZWxs
byIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworCisgICAgRVhQRUNU
X0VRKGl0ZW1zWzFdLnRva2Vucy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoIndvcmxk
IiwgaXRlbXNbMV0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisKKyAgICBFWFBFQ1Rf
RVEoaXRlbXNbMl0udG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9TVFJFUSgiV2ViS2l0
IiwgaXRlbXNbMl0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7Cit9CisKK1RFU1QoVGV4
dE1hbmlwdWxhdGlvbiwgU3RhcnRUZXh0TWFuaXB1bGF0aW9uRmluZE11bHRpcGxlUGFyYWdyYXBo
c0luU2luZ2xlVGV4dE5vZGUpCit7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0
TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHdlYlZpZXcgPSBh
ZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAs
IDAsIDQwMCwgNDAwKV0pOworICAgIFt3ZWJWaWV3IF9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdh
dGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1M
U3RyaW5nOkAiPCFET0NUWVBFIGh0bWw+IgorICAgICAgICAiPGh0bWw+PGJvZHk+PHByZT5oZWxs
b1xud29ybGRcbldlYktpdDwvcHJlPjwvYm9keT48L2h0bWw+Il07CisKKyAgICBkb25lID0gZmFs
c2U7CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29tcGxldGlvbkhh
bmRsZXI6XnsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGF1dG8gKml0ZW1zID0gW2RlbGVnYXRlIGl0ZW1z
XTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDNVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1z
WzBdLnRva2Vucy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoImhlbGxvIiwgaXRlbXNb
MF0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisKKyAgICBFWFBFQ1RfRVEoaXRlbXNb
MV0udG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9TVFJFUSgid29ybGQiLCBpdGVtc1sx
XS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKworICAgIEVYUEVDVF9FUShpdGVtc1sy
XS50b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX1NUUkVRKCJXZWJLaXQiLCBpdGVtc1sy
XS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKK30KKworVEVTVChUZXh0TWFuaXB1bGF0
aW9uLCBTdGFydFRleHRNYW5pcHVsYXRpb25GaW5kUGFyYWdyYXBoc1dpdGhNdWx0aWxlVG9rZW5z
KQoreworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVn
YXRlIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsK
KyAgICBbd2ViVmlldyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgp
XTsKKyAgICAKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8IURP
Q1RZUEUgaHRtbD4iCisgICAgICAgICI8aHRtbD48Ym9keT5oZWxsbywgIDxiPndvcmxkPC9iPjxi
cj48ZGl2PjxlbT4gPGI+V2ViPC9iPktpdDwvZW0+ICA8L2Rpdj48L2JvZHk+PC9odG1sPiJdOwor
ICAgIAorICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0
aW9uc1dpdGhDb21wbGV0aW9uSGFuZGxlcjpeeworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9
XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworICAgIAorICAgIGF1dG8g
Kml0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDJV
TCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgMlVMKTsKKyAgICBFWFBF
Q1RfU1RSRVEoImhlbGxvLCAiLCBpdGVtc1swXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5n
KTsKKyAgICBFWFBFQ1RfU1RSRVEoIndvcmxkIiwgaXRlbXNbMF0udG9rZW5zWzFdLmNvbnRlbnQu
VVRGOFN0cmluZyk7CisgICAgCisgICAgRVhQRUNUX0VRKGl0ZW1zWzFdLnRva2Vucy5jb3VudCwg
MlVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoIldlYiIsIGl0ZW1zWzFdLnRva2Vuc1swXS5jb250ZW50
LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgiS2l0IiwgaXRlbXNbMV0udG9rZW5zWzFd
LmNvbnRlbnQuVVRGOFN0cmluZyk7Cit9CisKK3N0cnVjdCBUb2tlbiB7CisgICAgTlNTdHJpbmcg
KmlkZW50aWZpZXI7CisgICAgTlNTdHJpbmcgKmNvbnRlbnQ7Cit9OworCit0ZW1wbGF0ZTxzaXpl
X3QgbGVuZ3RoPgorc3RhdGljIFJldGFpblB0cjxfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbT4gY3Jl
YXRlSXRlbShOU1N0cmluZyAqaXRlbUlkZW50aWZpZXIsIGNvbnN0IFRva2VuICgmdG9rZW5zKVts
ZW5ndGhdKQoreworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gd2tUb2tlbnMgPSBhZG9w
dE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIFJldGFpblB0cjxfV0tUZXh0TWFuaXB1bGF0
aW9uVG9rZW4+IHRva2VuID0gYWRvcHROUyhbW19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiBhbGxv
Y10gaW5pdF0pOworICAgICAgICBbdG9rZW4gc2V0SWRlbnRpZmllcjogdG9rZW5zW2ldLmlkZW50
aWZpZXJdOworICAgICAgICBbdG9rZW4gc2V0Q29udGVudDogdG9rZW5zW2ldLmNvbnRlbnRdOwor
ICAgICAgICBbd2tUb2tlbnMgYWRkT2JqZWN0OnRva2VuLmdldCgpXTsKKyAgICB9CisgICAgcmV0
dXJuIGFkb3B0TlMoW1tfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSBhbGxvY10gaW5pdFdpdGhJZGVu
dGlmaWVyOml0ZW1JZGVudGlmaWVyIHRva2Vuczp3a1Rva2Vucy5nZXQoKV0pOworfQorCitURVNU
KFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvblNob3VsZFJlcGxhY2VT
aW1wbGVQYXJhZ3JhcGhDb250ZW50KQoreworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtb
VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byB3ZWJWaWV3
ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVj
dCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBbd2ViVmlldyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRl
bGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2Fk
SFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPiIKKyAgICAgICAgIjxodG1sPjxib2R5PjxwPmhl
bGxsbywgd29vb3JsZDwvcD48cD4gaGV5LCA8Yj4gS2l0czwvYj4gaXMgPGVtPmN1dXV0ZTwvZW0+
PC9wPjwvYm9keT48L2h0bWw+Il07CisKKyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcg
X3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29tcGxldGlvbkhhbmRsZXI6XnsKKyAgICAgICAg
ZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25l
KTsKKworICAgIGF1dG8gKml0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsKKyAgICBFWFBFQ1RfRVEo
aXRlbXMuY291bnQsIDJVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwg
MVVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoImhlbGxsbywgd29vb3JsZCIsIGl0ZW1zWzBdLnRva2Vu
c1swXS5jb250ZW50LlVURjhTdHJpbmcpOworCisgICAgRVhQRUNUX0VRKGl0ZW1zWzFdLnRva2Vu
cy5jb3VudCwgNFVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoImhleSwgIiwgaXRlbXNbMV0udG9rZW5z
WzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCJLaXRzIiwgaXRlbXNb
MV0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCIgaXMg
IiwgaXRlbXNbMV0udG9rZW5zWzJdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NU
UkVRKCJjdXV1dGUiLCBpdGVtc1sxXS50b2tlbnNbM10uY29udGVudC5VVEY4U3RyaW5nKTsKKwor
ICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9u
OihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWNyZWF0ZUl0ZW0oaXRlbXNbMV0uaWRlbnRpZmll
ciwgeworICAgICAgICB7IGl0ZW1zWzFdLnRva2Vuc1swXS5pZGVudGlmaWVyLCBAIkhlbGxvLCAi
IH0sCisgICAgICAgIHsgaXRlbXNbMV0udG9rZW5zWzFdLmlkZW50aWZpZXIsIEAia2l0dGVucyIg
fSwKKyAgICAgICAgeyBpdGVtc1sxXS50b2tlbnNbMl0uaWRlbnRpZmllciwgQCIgYXJlICIgfSwK
KyAgICAgICAgeyBpdGVtc1sxXS50b2tlbnNbM10uaWRlbnRpZmllciwgQCJjdXRlIiB9LAorICAg
IH0pLmdldCgpIGNvbXBsZXRpb246XihCT09MIHN1Y2Nlc3MpIHsKKyAgICAgICAgRVhQRUNUX1RS
VUUoc3VjY2Vzcyk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCI8cD5oZWxsbG8s
IHdvb29ybGQ8L3A+PHA+SGVsbG8sIDxiPmtpdHRlbnM8L2I+IGFyZSA8ZW0+Y3V0ZTwvZW0+PC9w
PiIsCisgICAgICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1
bWVudC5ib2R5LmlubmVySFRNTCJdKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmll
dyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWNy
ZWF0ZUl0ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwgeworICAgICAgICB7IGl0ZW1zWzBdLnRva2Vu
c1swXS5pZGVudGlmaWVyLCBAIkhlbGxvLCB3b3JsZC4iIH0sCisgICAgfSkuZ2V0KCkgY29tcGxl
dGlvbjpeKEJPT0wgc3VjY2VzcykgeworICAgICAgICBFWFBFQ1RfVFJVRShzdWNjZXNzKTsKKyAg
ICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZkb25lKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIjxwPkhlbGxvLCB3b3JsZC48L3A+PHA+SGVs
bG8sIDxiPmtpdHRlbnM8L2I+IGFyZSA8ZW0+Y3V0ZTwvZW0+PC9wPiIsCisgICAgICAgIFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmlubmVySFRN
TCJdKTsKK30KKworVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0ZVRleHRNYW5pcHVsYXRp
b25TaG91bGRGYWlsV2hlbkNvbnRlbnRJc0NoYW5nZWQpCit7CisgICAgYXV0byBkZWxlZ2F0ZSA9
IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOworICAgIFt3ZWJWaWV3IF9zZXRUZXh0TWFu
aXB1bGF0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZpZXcgc3luY2hy
b25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPCFET0NUWVBFIGh0bWw+IgorICAgICAgICAiPGh0bWw+
PGJvZHk+PHA+IHdoYXQgPGVtPnRpbWU8L2VtPiBhcmUgdGhleSBub3c/PC9wPjwvYm9keT48L2h0
bWw+Il07CisKKyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlw
dWxhdGlvbnNXaXRoQ29tcGxldGlvbkhhbmRsZXI6XnsKKyAgICAgICAgZG9uZSA9IHRydWU7Cisg
ICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGF1dG8g
Kml0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDFV
TCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgM1VMKTsKKyAgICBFWFBF
Q1RfU1RSRVEoIndoYXQgIiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7
CisgICAgRVhQRUNUX1NUUkVRKCJ0aW1lIiwgaXRlbXNbMF0udG9rZW5zWzFdLmNvbnRlbnQuVVRG
OFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCIgYXJlIHRoZXkgbm93PyIsIGl0ZW1zWzBdLnRv
a2Vuc1syXS5jb250ZW50LlVURjhTdHJpbmcpOworCisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2VtJykubmV4dFNpYmxp
bmcuZGF0YSA9ICcgaXMgaXQgbm93IGluIExvbmRvbj8nIl07CisKKyAgICBkb25lID0gZmFsc2U7
CisgICAgW3dlYlZpZXcgX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbjooX1dLVGV4dE1hbmlwdWxh
dGlvbkl0ZW0gKiljcmVhdGVJdGVtKGl0ZW1zWzBdLmlkZW50aWZpZXIsIHsKKyAgICAgICAgeyBp
dGVtc1swXS50b2tlbnNbMF0uaWRlbnRpZmllciwgQCJXaGF0ICIgfSwKKyAgICAgICAgeyBpdGVt
c1swXS50b2tlbnNbMV0uaWRlbnRpZmllciwgQCJ0aW1lIiB9LAorICAgICAgICB7IGl0ZW1zWzBd
LnRva2Vuc1syXS5pZGVudGlmaWVyLCBAIiBpcyBpdCBub3c/IiB9LAorICAgIH0pLmdldCgpIGNv
bXBsZXRpb246XihCT09MIHN1Y2Nlc3MpIHsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHN1Y2Nlc3Mp
OworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmRvbmUpOworICAgIEVYUEVDVF9XS19TVFJFUSgiPHA+IHdoYXQgPGVtPnRpbWU8L2Vt
PiBpcyBpdCBub3cgaW4gTG9uZG9uPzwvcD4iLAorICAgICAgICBbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwiXSk7Cit9CisKK1RF
U1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uU2hvdWxkRmFpbFdo
ZW5Eb2N1bWVudEhhc0JlZW5OYXZpZ2F0ZWRBd2F5KQoreworICAgIGF1dG8gZGVsZWdhdGUgPSBh
ZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgYXV0
byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBbd2ViVmlldyBfc2V0VGV4dE1hbmlw
dWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3IHN5bmNocm9u
b3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAInNpbXBsZSJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmlubmVySFRNTCA9ICc8cD5oZXks
IDxlbT5lYXJ0aDwvZW0+PC9wPiciXTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmll
dyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb21wbGV0aW9uSGFuZGxlcjpeeworICAgICAg
ICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRv
bmUpOworCisgICAgYXV0byAqaXRlbXMgPSBbZGVsZWdhdGUgaXRlbXNdOworICAgIEVYUEVDVF9F
UShpdGVtcy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMF0udG9rZW5zLmNvdW50
LCAyVUwpOworICAgIEVYUEVDVF9TVFJFUSgiaGV5LCAiLCBpdGVtc1swXS50b2tlbnNbMF0uY29u
dGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoImVhcnRoIiwgaXRlbXNbMF0udG9r
ZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5
TG9hZFRlc3RQYWdlTmFtZWQ6QCJjb3B5LWh0bWwiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAnPHA+aGV5LCA8
ZW0+ZWFydGg8L2VtPjwvcD4nIl07CisKKyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcg
X3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29tcGxldGlvbkhhbmRsZXI6XnsKKyAgICAgICAg
ZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25l
KTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1
bGF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWNyZWF0ZUl0ZW0oaXRlbXNbMF0uaWRl
bnRpZmllciwgeworICAgICAgICB7IGl0ZW1zWzBdLnRva2Vuc1swXS5pZGVudGlmaWVyLCBAImhl
bGxvLCAiIH0sCisgICAgICAgIHsgaXRlbXNbMF0udG9rZW5zWzFdLmlkZW50aWZpZXIsIEAid29y
bGQiIH0sCisgICAgfSkuZ2V0KCkgY29tcGxldGlvbjpeKEJPT0wgc3VjY2VzcykgeworICAgICAg
ICBFWFBFQ1RfRkFMU0Uoc3VjY2Vzcyk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOwor
CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgVGVzdFdlYktpdEFQSQorCkluZGV4OiBXZWJLaXQueGN3b3Jrc3BhY2UveGNzaGFyZWRkYXRh
L3hjc2NoZW1lcy9BbGwgU291cmNlLnhjc2NoZW1lCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC54Y3dv
cmtzcGFjZS94Y3NoYXJlZGRhdGEveGNzY2hlbWVzL0FsbCBTb3VyY2UueGNzY2hlbWUJKHJldmlz
aW9uIDI1MTQ5NCkKKysrIFdlYktpdC54Y3dvcmtzcGFjZS94Y3NoYXJlZGRhdGEveGNzY2hlbWVz
L0FsbCBTb3VyY2UueGNzY2hlbWUJKHdvcmtpbmcgY29weSkKQEAgLTE0NCwxMCArMTQ0LDEwIEBA
CiAgICAgICA8TWFjcm9FeHBhbnNpb24+CiAgICAgICAgICA8QnVpbGRhYmxlUmVmZXJlbmNlCiAg
ICAgICAgICAgICBCdWlsZGFibGVJZGVudGlmaWVyID0gInByaW1hcnkiCi0gICAgICAgICAgICBC
bHVlcHJpbnRJZGVudGlmaWVyID0gIjhEMTEwNzI2MDQ4NkNFQjgwMEU0NzA5MCIKLSAgICAgICAg
ICAgIEJ1aWxkYWJsZU5hbWUgPSAiTWluaUJyb3dzZXIuYXBwIgotICAgICAgICAgICAgQmx1ZXBy
aW50TmFtZSA9ICJNaW5pQnJvd3NlciIKLSAgICAgICAgICAgIFJlZmVyZW5jZWRDb250YWluZXIg
PSAiY29udGFpbmVyOlRvb2xzL01pbmlCcm93c2VyL01pbmlCcm93c2VyLnhjb2RlcHJvaiI+Cisg
ICAgICAgICAgICBCbHVlcHJpbnRJZGVudGlmaWVyID0gIjhERDc2Rjk2MDQ4NkFBNzYwMEQ5NkI1
RSIKKyAgICAgICAgICAgIEJ1aWxkYWJsZU5hbWUgPSAiVGVzdFdlYktpdEFQSSIKKyAgICAgICAg
ICAgIEJsdWVwcmludE5hbWUgPSAiVGVzdFdlYktpdEFQSSIKKyAgICAgICAgICAgIFJlZmVyZW5j
ZWRDb250YWluZXIgPSAiY29udGFpbmVyOlRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQ
SS54Y29kZXByb2oiPgogICAgICAgICAgPC9CdWlsZGFibGVSZWZlcmVuY2U+CiAgICAgICA8L01h
Y3JvRXhwYW5zaW9uPgogICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPgpAQCAtMTY3LDEyICsxNjcs
MTggQEAKICAgICAgICAgIHJ1bm5hYmxlRGVidWdnaW5nTW9kZSA9ICIwIj4KICAgICAgICAgIDxC
dWlsZGFibGVSZWZlcmVuY2UKICAgICAgICAgICAgIEJ1aWxkYWJsZUlkZW50aWZpZXIgPSAicHJp
bWFyeSIKLSAgICAgICAgICAgIEJsdWVwcmludElkZW50aWZpZXIgPSAiOEQxMTA3MjYwNDg2Q0VC
ODAwRTQ3MDkwIgotICAgICAgICAgICAgQnVpbGRhYmxlTmFtZSA9ICJNaW5pQnJvd3Nlci5hcHAi
Ci0gICAgICAgICAgICBCbHVlcHJpbnROYW1lID0gIk1pbmlCcm93c2VyIgotICAgICAgICAgICAg
UmVmZXJlbmNlZENvbnRhaW5lciA9ICJjb250YWluZXI6VG9vbHMvTWluaUJyb3dzZXIvTWluaUJy
b3dzZXIueGNvZGVwcm9qIj4KKyAgICAgICAgICAgIEJsdWVwcmludElkZW50aWZpZXIgPSAiOERE
NzZGOTYwNDg2QUE3NjAwRDk2QjVFIgorICAgICAgICAgICAgQnVpbGRhYmxlTmFtZSA9ICJUZXN0
V2ViS2l0QVBJIgorICAgICAgICAgICAgQmx1ZXByaW50TmFtZSA9ICJUZXN0V2ViS2l0QVBJIgor
ICAgICAgICAgICAgUmVmZXJlbmNlZENvbnRhaW5lciA9ICJjb250YWluZXI6VG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvaiI+CiAgICAgICAgICA8L0J1aWxkYWJsZVJl
ZmVyZW5jZT4KICAgICAgIDwvQnVpbGRhYmxlUHJvZHVjdFJ1bm5hYmxlPgorICAgICAgPENvbW1h
bmRMaW5lQXJndW1lbnRzPgorICAgICAgICAgPENvbW1hbmRMaW5lQXJndW1lbnQKKyAgICAgICAg
ICAgIGFyZ3VtZW50ID0gIi0tZ3Rlc3RfZmlsdGVyPVRleHRNYW5pcHVsYXRpb24uQ29tcGxldGVU
ZXh0TWFuaXB1bGF0aW9uU2hvdWxkRmFpbFdoZW5Eb2N1bWVudEhhc0JlZW5OYXZpZ2F0ZWRBd2F5
IgorICAgICAgICAgICAgaXNFbmFibGVkID0gIllFUyI+CisgICAgICAgICA8L0NvbW1hbmRMaW5l
QXJndW1lbnQ+CisgICAgICA8L0NvbW1hbmRMaW5lQXJndW1lbnRzPgogICAgICAgPEFkZGl0aW9u
YWxPcHRpb25zPgogICAgICAgPC9BZGRpdGlvbmFsT3B0aW9ucz4KICAgIDwvTGF1bmNoQWN0aW9u
Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381773</attachid>
            <date>2019-10-23 21:24:17 -0700</date>
            <delta_ts>2019-10-23 21:26:52 -0700</delta_ts>
            <desc>iOS build fix</desc>
            <filename>bug-203286-20191023212416.patch</filename>
            <type>text/plain</type>
            <size>76112</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MTUyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDE5LTEwLTIzICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIG1lY2hhbmlzbSB0byBm
aW5kIGFuZCBtYW5pcHVsYXRlIHRleHQgYnkgcGFyYWdyYXBocworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMjg2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIFRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyIHdoaWNoIGFsbG93cyBXZWJLaXQgY2xpZW50cyB0byBmaW5k
IGFuZCByZXBsYWNlCisgICAgICAgIHRleHQgY29udGVudCBpbiBhIGdpdmVuIGRvY3VtZW50IGJ5
IHBhcmFncmFwaCBib3VuZGFyeS4gRm9yIG5vdywgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIg
ZmluZHMKKyAgICAgICAgYWxsIHBhcmFncmFwaHMgaW4gdGhlIGRvY3VtZW50IGFuZCBpbnZva2Vz
IHRoZSBjYWxsYmFjayBmb3IgZWFjaCBwYXJhZ3JhcGguIEluIHRoZSBmdXR1cmUsIHRoaXMKKyAg
ICAgICAgY29udHJvbGxlciB3aWxsIHN1cHBvcnQgZGV0ZWN0aW5nIHJlbW92YWwgYW5kIGluc2Vy
dGlvbiBvZiBuZXcgY29udGVudCB0byB0aGUgZG9jdW1lbnQuCisKKyAgICAgICAgVGVzdHM6IFRl
eHRNYW5pcHVsYXRpb24uU3RhcnRUZXh0TWFuaXB1bGF0aW9uRmluZFNpbXBsZVBhcmFncmFwaHMK
KyAgICAgICAgICAgICAgIFRleHRNYW5pcHVsYXRpb24uU3RhcnRUZXh0TWFuaXB1bGF0aW9uRmlu
ZFBhcmFncmFwaHNXaXRoTXVsdGlsZVRva2VucworICAgICAgICAgICAgICAgVGV4dE1hbmlwdWxh
dGlvbi5Db21wbGV0ZVRleHRNYW5pcHVsYXRpb25TaG91bGRSZXBsYWNlU2ltcGxlUGFyYWdyYXBo
Q29udGVudAorICAgICAgICAgICAgICAgVGV4dE1hbmlwdWxhdGlvbi5Db21wbGV0ZVRleHRNYW5p
cHVsYXRpb25TaG91bGRGYWlsV2hlbkNvbnRlbnRJc0NoYW5nZWQKKyAgICAgICAgICAgICAgIFRl
eHRNYW5pcHVsYXRpb24uQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uU2hvdWxkRmFpbFdoZW5Eb2N1
bWVudEhhc0JlZW5OYXZpZ2F0ZWRBd2F5CisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6IENsZWFyIFRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyLiBPdGhlcndpc2UgbV9pdGVtcworICAgICAgICBpbiBUZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlciBtYXkga2VlcCBhIGJ1bmNoIG9mIG5vZGVzIGFsaXZlIGFuZCBub3QgbGV0IHRo
aXMgZG9jdW1lbnQgZGVzdHJ1Y3RlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0ZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlcik6IEFkZGVkLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5o
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnRleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
SWZFeGlzdHMpOiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIpOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpzdGFydE9ic2VydmluZ1BhcmFncmFw
aHMpOiBGaW5kcyBhbGwgcGFyZ3JhcGhzIGFuZCBpbnZva2UKKyAgICAgICAgdGhlIGNhbGxiYWNr
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OmFkZEl0ZW0p
OiBBZGRlZC4gQSBoZWxwZXIgZm9yIHN0YXJ0T2JzZXJ2aW5nUGFyYWdyYXBocy4KKyAgICAgICAg
KFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpjb21wbGV0ZU1hbmlwdWxhdGlv
bik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6
OnJlcGxhY2UpOiBBZGRlZC4gQSBoZWxwZXIgZm9yIGNvbXBsZXRlTWFuaXB1bGF0aW9uLgorICAg
ICAgICAqIGVkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9r
ZW46OmVuY29kZSBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuOjpkZWNvZGUpOiBBZGRlZC4KKwogMjAx
OS0xMC0yMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE5vdGlm
aWNhdGlvbiBzaG91bGQgbm90IHByZXZlbnQgZW50ZXJpbmcgdGhlIGJhY2svZm9yd2FyZCBjYWNo
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCShyZXZpc2lvbiAyNTE1MjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC01MDMsNiArNTAzLDcgQEAgc2V0
KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIGVkaXRpbmcvVGV4dEdyYW51
bGFyaXR5LmgKICAgICBlZGl0aW5nL1RleHRJdGVyYXRvci5oCiAgICAgZWRpdGluZy9UZXh0SXRl
cmF0b3JCZWhhdmlvci5oCisgICAgZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5o
CiAgICAgZWRpdGluZy9VbmRvU3RlcC5oCiAgICAgZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAog
ICAgIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNp
b24gMjUxNTI4KQorKysgU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEwNjEsNiArMTA2MSw3IEBAIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVt
ZW50Q28KIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAogZWRpdGluZy9UZXh0SW5zZXJ0
aW9uQmFzZUNvbW1hbmQuY3BwCiBlZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKK2VkaXRpbmcvVGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCiBl
ZGl0aW5nL1VubGlua0NvbW1hbmQuY3BwCiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDI1MTUyOCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjg1Miw2ICsyODUyLDcgQEAKIAkJ
OTk2RTU5REYxREYwMTI4RDAwNjYxMkI5IC8qIE5hdmlnYXRvcldlYkRyaXZlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTk2RTU5REMxREYwMEQ5MDAw
NjYxMkI5IC8qIE5hdmlnYXRvcldlYkRyaXZlci5oICovOyB9OwogCQk5QTUyOEU4NDE3RDdGNTJG
MDBBQTk1MTggLyogRmxvYXRpbmdPYmplY3RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5QTUyOEU4MjE3RDdGNTJGMDBBQTk1MTggLyogRmxvYXRpbmdP
YmplY3RzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJOUFCMUYzODAxOEUyNDg5QTAwNTM0NzQzIC8qIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlBQjFGMzdF
MThFMjQ4OUEwMDUzNDc0MyAvKiBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOUIwMkUwQzgyMzVFQUQy
QTAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAyRTBDMzIzNUU3NkFBMDA0MDQ0QjIg
LyogVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5QjI0REU4RTE1MTk0Qjk1MDBDNTlDMjcgLyogSFRN
TEJESUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDlCMjRERThDMTUxOTRCOTUwMEM1OUMyNyAvKiBIVE1MQkRJRWxlbWVudC5oICovOyB9Owog
CQk5QjI3RkM2MDIzNEQ5QURCMDAzOTRBNDYgLyogV2luZG93RXZlbnRMb29wLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjI3RkM1RTIzNEQ5QURBMDAz
OTRBNDYgLyogV2luZG93RXZlbnRMb29wLmggKi87IH07CiAJCTlCMkQ4QTc5MTQ5OTdDQ0YwMEVD
RUYzRSAvKiBVbmRvU3RlcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUIyRDhBNzgxNDk5N0NDRjAwRUNFRjNFIC8qIFVuZG9TdGVwLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExMDczLDYgKzExMDc0
LDggQEAKIAkJOUFDNkYwMjUyMTE0OEY1NDAwQ0JEQTA2IC8qIE1lZGlhRW5naW5lQ29uZmlndXJh
dGlvbkZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTWVkaWFFbmdp
bmVDb25maWd1cmF0aW9uRmFjdG9yeS5oOyBwYXRoID0gbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFF
bmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5QUM2RjAyRDIxMTQ4RjlGMDBDQkRBMDYgLyogTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFj
dG9yeU1vY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFF
bmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeU1vY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5QUM2RjAyRjIxMTQ4RkEyMDBDQkRBMDYgLyogTWVkaWFFbmdpbmVDb25maWd1cmF0
aW9uRmFjdG9yeU1vY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFF
bmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeU1vY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOUIwMkUwQzMyMzVFNzZBQTAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCMDJFMEM0MjM1RTc2QUEwMDQwNDRCMiAvKiBUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMDNE
ODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlu
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSZWFkYWJsZUJ5dGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGlucy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9SZWFkYWJs
ZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVD
VFNfRElSOyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0QzkgLyogU3RyZWFtSW50ZXJuYWxz
QnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3RyZWFtSW50ZXJu
YWxzQnVpbHRpbnMuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvU3RyZWFtSW50ZXJu
YWxzQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJOUIw
M0Q4MDYxQkIzMTEwRDAwQjc2NEQ4IC8qIFJlYWRhYmxlU3RyZWFtQnVpbHRpbnMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oOyBwYXRo
ID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9SZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmg7IHNvdXJj
ZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC0yMTQzNSw2ICsyMTQzOCw4IEBACiAJ
CQkJOTMzMDlEQ0MwOTlFNjQ5MTAwNTZFNTgxIC8qIFRleHRJdGVyYXRvci5jcHAgKi8sCiAJCQkJ
OTMzMDlEQ0QwOTlFNjQ5MTAwNTZFNTgxIC8qIFRleHRJdGVyYXRvci5oICovLAogCQkJCTkzOTIx
NDY4MThBNkQ3OTEwMDBFRTY4OCAvKiBUZXh0SXRlcmF0b3JCZWhhdmlvci5oICovLAorCQkJCTlC
MDJFMEM0MjM1RTc2QUEwMDQwNDRCMiAvKiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAg
Ki8sCisJCQkJOUIwMkUwQzMyMzVFNzZBQTAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyLmggKi8sCiAJCQkJOTMzMDlEQ0EwOTlFNjQ5MTAwNTZFNTgxIC8qIFR5cGluZ0NvbW1h
bmQuY3BwICovLAogCQkJCTkzMzA5RENCMDk5RTY0OTEwMDU2RTU4MSAvKiBUeXBpbmdDb21tYW5k
LmggKi8sCiAJCQkJOUIyRDhBNzgxNDk5N0NDRjAwRUNFRjNFIC8qIFVuZG9TdGVwLmggKi8sCkBA
IC0zMjM0Niw2ICszMjM1MSw3IEBACiAJCQkJQ0VDQURGQ0UxNTM3NzkxRDAwRTM3MDY4IC8qIFRl
eHRJbnNlcnRpb25CYXNlQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMUMwOTlF
NjQ5MjAwNTZFNTgxIC8qIFRleHRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5MjE0
NjkxOEE2RDc5MTAwMEVFNjg4IC8qIFRleHRJdGVyYXRvckJlaGF2aW9yLmggaW4gSGVhZGVycyAq
LywKKwkJCQk5QjAyRTBDODIzNUVBRDJBMDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUY0NUU5MEU2ODc3NjcwMDFDMTI4NyAvKiBU
ZXh0TWV0cmljcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTREOTg4QjQxN0JGRDFGNjAwODRGQjg4
IC8qIFRleHROb2RlVHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzE4REE1OTE4MUFG
NkE1MDBDNEVGMjIgLyogVGV4dFBhaW50ZXIuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyNTE1MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsNiArMjEzLDcgQEAKICNpbmNsdWRl
ICJTdWJyZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIlRleHRBdXRvU2l6aW5nLmgiCiAjaW5j
bHVkZSAiVGV4dEV2ZW50LmgiCisjaW5jbHVkZSAiVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJUZXh0Tm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlRvdWNoQWN0aW9u
LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtU291cmNlLmgiCkBAIC0yNDc5LDYgKzI0ODAsOCBAQCB2
b2lkIERvY3VtZW50OjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKQogCiAgICAgbV91bmRvTWFuYWdl
ci0+cmVtb3ZlQWxsSXRlbXMoKTsKIAorICAgIG1fdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIg
PSBudWxscHRyOyAvLyBGcmVlIG5vZGVzIGtlcHQgYWxpdmUgYnkgVGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXIuCisKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkKICAgICBpZiAodGhpcyAhPSAm
dG9wRG9jdW1lbnQoKSkgewogICAgICAgICAvLyBMZXQgdGhlIGF4IGNhY2hlIGtub3cgdGhhdCB0
aGlzIHN1YmZyYW1lIGdvZXMgb3V0IG9mIHNjb3BlLgpAQCAtODM1MCw0ICs4MzUzLDExIEBAIHZv
aWQgRG9jdW1lbnQ6OnNldFBpY3R1cmVJblBpY3R1cmVFbGVtZW4KIH0KICNlbmRpZgogCitUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlciYgRG9jdW1lbnQ6OnRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyKCkKK3sKKyAgICBpZiAoIW1fdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIpCisgICAgICAg
IG1fdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgPSBtYWtlVW5pcXVlPFRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyPigqdGhpcyk7CisgICAgcmV0dXJuICptX3RleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaAkocmV2aXNpb24gMjUxNTI4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE5Niw2ICsxOTYsNyBAQCBjbGFzcyBTdHlsZVNoZWV0OwogY2xh
c3MgU3R5bGVTaGVldENvbnRlbnRzOwogY2xhc3MgU3R5bGVTaGVldExpc3Q7CiBjbGFzcyBUZXh0
OworY2xhc3MgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBUZXh0UmVzb3VyY2VE
ZWNvZGVyOwogY2xhc3MgVHJlZVdhbGtlcjsKIGNsYXNzIFVuZG9NYW5hZ2VyOwpAQCAtMTU1Nyw2
ICsxNTU4LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UGljdHVyZUluUGljdHVyZUVsZW1lbnQo
SFRNTFZpZGVvRWxlbWVudCopOwogI2VuZGlmCiAKKyAgICBXRUJDT1JFX0VYUE9SVCBUZXh0TWFu
aXB1bGF0aW9uQ29udHJvbGxlciYgdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIoKTsKKyAgICBU
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlciogdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXJJZkV4
aXN0cygpIHsgcmV0dXJuIG1fdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuZ2V0KCk7IH0KKwog
cHJvdGVjdGVkOgogICAgIGVudW0gQ29uc3RydWN0aW9uRmxhZ3MgeyBTeW50aGVzaXplZCA9IDEs
IE5vblJlbmRlcmVkUGxhY2Vob2xkZXIgPSAxIDw8IDEgfTsKICAgICBEb2N1bWVudChGcmFtZSos
IGNvbnN0IFVSTCYsIHVuc2lnbmVkID0gRGVmYXVsdERvY3VtZW50Q2xhc3MsIHVuc2lnbmVkIGNv
bnN0cnVjdGlvbkZsYWdzID0gMCk7CkBAIC0yMDg2LDYgKzIwOTAsOCBAQCBwcml2YXRlOgogICAg
IFdlYWtQdHI8SFRNTFZpZGVvRWxlbWVudD4gbV9waWN0dXJlSW5QaWN0dXJlRWxlbWVudDsKICNl
bmRpZgogCisgICAgc3RkOjp1bmlxdWVfcHRyPFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyPiBt
X3RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOworCiAgICAgSGFzaE1hcDxFbGVtZW50KiwgRWxl
bWVudElkZW50aWZpZXI+IG1faWRlbnRpZmllZEVsZW1lbnRzTWFwOwogfTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxl
ci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkVkaXRpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRE
aXNhbGxvd2VkU2NvcGUuaCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJW
aXNpYmxlVW5pdHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitUZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlcjo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIoRG9jdW1lbnQmIGRvY3VtZW50
KQorICAgIDogbV9kb2N1bWVudChtYWtlV2Vha1B0cihkb2N1bWVudCkpCit7Cit9CisKK3ZvaWQg
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnN0YXJ0T2JzZXJ2aW5nUGFyYWdyYXBocyhNYW5p
cHVsYXRpb25JdGVtQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBhdXRvIGRvY3VtZW50ID0g
bWFrZVJlZlB0cihtX2RvY3VtZW50LmdldCgpKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7CisKKyAgICBW
aXNpYmxlUG9zaXRpb24gc3RhcnQgPSBmaXJzdFBvc2l0aW9uSW5Ob2RlKG1fZG9jdW1lbnQuZ2V0
KCkpOworICAgIFZpc2libGVQb3NpdGlvbiBlbmQgPSBsYXN0UG9zaXRpb25Jbk5vZGUobV9kb2N1
bWVudC5nZXQoKSk7CisgICAgVGV4dEl0ZXJhdG9yIGl0ZXJhdG9yIHsgc3RhcnQuZGVlcEVxdWl2
YWxlbnQoKSwgZW5kLmRlZXBFcXVpdmFsZW50KCkgfTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAg
ICAgICByZXR1cm47IC8vIFZpc2libGVQb3NpdGlvbiBvciBUZXh0SXRlcmF0b3IncyBjb25zdHJ1
Y3RvciBtYXkgaGF2ZSB1cGRhdGVkIHRoZSBsYXlvdXQgYW5kIGV4ZWN1dGVkIGFyYml0cmFyeSBz
Y3JpcHRzLgorCisgICAgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiB0b2tlbnNJbkN1cnJlbnRQ
YXJhZ3JhcGg7CisgICAgUG9zaXRpb24gc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGggPSBzdGFydC5k
ZWVwRXF1aXZhbGVudCgpOworICAgIHdoaWxlICghaXRlcmF0b3IuYXRFbmQoKSkgeworICAgICAg
ICBTdHJpbmdWaWV3IGN1cnJlbnRUZXh0ID0gaXRlcmF0b3IudGV4dCgpOworCisgICAgICAgIGlm
IChzdGFydE9mQ3VycmVudFBhcmFncmFwaC5pc051bGwoKSkKKyAgICAgICAgICAgIHN0YXJ0T2ZD
dXJyZW50UGFyYWdyYXBoID0gaXRlcmF0b3IucmFuZ2UoKS0+c3RhcnRQb3NpdGlvbigpOworCisg
ICAgICAgIHNpemVfdCBlbmRPZkxhc3ROZXdMaW5lID0gMDsKKyAgICAgICAgc2l6ZV90IG9mZnNl
dE9mTmV4dE5ld0xpbmUgPSAwOworICAgICAgICB3aGlsZSAoKG9mZnNldE9mTmV4dE5ld0xpbmUg
PSBjdXJyZW50VGV4dC5maW5kKCdcbicsIGVuZE9mTGFzdE5ld0xpbmUpKSAhPSBub3RGb3VuZCkg
eworICAgICAgICAgICAgaWYgKGVuZE9mTGFzdE5ld0xpbmUgPCBvZmZzZXRPZk5leHROZXdMaW5l
KSB7CisgICAgICAgICAgICAgICAgdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmFwcGVuZChNYW5p
cHVsYXRpb25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksCisgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRUZXh0LnN1YnN0cmluZyhlbmRPZkxhc3ROZXdMaW5lLCBvZmZzZXRP
Zk5leHROZXdMaW5lIC0gZW5kT2ZMYXN0TmV3TGluZSkudG9TdHJpbmcoKSB9KTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgYXV0byBsYXN0UmFuZ2UgPSBpdGVyYXRvci5yYW5nZSgpOwor
ICAgICAgICAgICAgaWYgKG9mZnNldE9mTmV4dE5ld0xpbmUgPCBjdXJyZW50VGV4dC5sZW5ndGgo
KSkgeworICAgICAgICAgICAgICAgIGxhc3RSYW5nZS0+c2V0U3RhcnQoZmlyc3RQb3NpdGlvbklu
T3JCZWZvcmVOb2RlKGl0ZXJhdG9yLm5vZGUoKSkpOyAvLyBNb3ZlIHRoZSBzdGFydCB0byB0aGUg
YmVnaW5uaW5nIG9mIHRoZSBjdXJyZW50IG5vZGUuCisgICAgICAgICAgICAgICAgVGV4dEl0ZXJh
dG9yOjpzdWJyYW5nZShsYXN0UmFuZ2UsIDAsIG9mZnNldE9mTmV4dE5ld0xpbmUpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgUG9zaXRpb24gZW5kT2ZDdXJyZW50UGFyYWdyYXBoID0gbGFz
dFJhbmdlLT5lbmRQb3NpdGlvbigpOworCisgICAgICAgICAgICBpZiAoIXRva2Vuc0luQ3VycmVu
dFBhcmFncmFwaC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgYWRkSXRlbShzdGFydE9mQ3Vy
cmVudFBhcmFncmFwaCwgZW5kT2ZDdXJyZW50UGFyYWdyYXBoLCBXVEZNb3ZlKHRva2Vuc0luQ3Vy
cmVudFBhcmFncmFwaCkpOworICAgICAgICAgICAgc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGguY2xl
YXIoKTsKKyAgICAgICAgICAgIGVuZE9mTGFzdE5ld0xpbmUgPSBvZmZzZXRPZk5leHROZXdMaW5l
ICsgMTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gcmVtYWluaW5nVGV4dCA9IGN1cnJlbnRU
ZXh0LnN1YnN0cmluZyhlbmRPZkxhc3ROZXdMaW5lKTsKKyAgICAgICAgaWYgKHJlbWFpbmluZ1Rl
eHQubGVuZ3RoKCkpCisgICAgICAgICAgICB0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGguYXBwZW5k
KE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUoKSwgcmVtYWlu
aW5nVGV4dC50b1N0cmluZygpIH0pOworCisgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsKKyAg
ICB9CisKKyAgICBpZiAoIXRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5pc0VtcHR5KCkpCisgICAg
ICAgIGFkZEl0ZW0oc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGgsIGVuZC5kZWVwRXF1aXZhbGVudCgp
LCBXVEZNb3ZlKHRva2Vuc0luQ3VycmVudFBhcmFncmFwaCkpOworfQorCit2b2lkIFRleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyOjphZGRJdGVtKGNvbnN0IFBvc2l0aW9uJiBzdGFydE9mUGFyYWdy
YXBoLCBjb25zdCBQb3NpdGlvbiYgZW5kT2ZQYXJhZ3JhcGgsIFZlY3RvcjxNYW5pcHVsYXRpb25U
b2tlbj4mJiB0b2tlbnMpCit7CisgICAgQVNTRVJUKG1fZG9jdW1lbnQpOworICAgIGF1dG8gcmVz
dWx0ID0gbV9pdGVtcy5hZGQobV9pdGVtSWRlbnRpZmllci5nZW5lcmF0ZSgpLCBNYW5pcHVsYXRp
b25JdGVtIHsgc3RhcnRPZlBhcmFncmFwaCwgZW5kT2ZQYXJhZ3JhcGgsIFdURk1vdmUodG9rZW5z
KSB9KTsKKyAgICBtX2NhbGxiYWNrKCptX2RvY3VtZW50LCByZXN1bHQuaXRlcmF0b3ItPmtleSwg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS50b2tlbnMpOworfQorCitib29sIFRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyOjpjb21wbGV0ZU1hbmlwdWxhdGlvbihJdGVtSWRlbnRpZmllciBpdGVtSWRl
bnRpZmllciwgY29uc3QgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiYgcmVwbGFjZW1lbnRUb2tl
bnMpCit7CisgICAgaWYgKCFpdGVtSWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgYXV0byBpdGVtSXRlcmF0b3IgPSBtX2l0ZW1zLmZpbmQoaXRlbUlkZW50aWZpZXIpOwor
ICAgIGlmIChpdGVtSXRlcmF0b3IgPT0gbV9pdGVtcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgYXV0byBkaWRSZXBsYWNlID0gcmVwbGFjZShpdGVtSXRlcmF0b3ItPnZhbHVl
LCByZXBsYWNlbWVudFRva2Vucyk7CisKKyAgICBtX2l0ZW1zLnJlbW92ZShpdGVtSXRlcmF0b3Ip
OworCisgICAgcmV0dXJuIGRpZFJlcGxhY2U7Cit9CisKK2Jvb2wgVGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXI6OnJlcGxhY2UoY29uc3QgTWFuaXB1bGF0aW9uSXRlbSYgaXRlbSwgY29uc3QgVmVj
dG9yPE1hbmlwdWxhdGlvblRva2VuPiYgcmVwbGFjZW1lbnRUb2tlbnMpCit7CisgICAgVGV4dEl0
ZXJhdG9yIGl0ZXJhdG9yIHsgaXRlbS5zdGFydCwgaXRlbS5lbmQgfTsKKyAgICBzaXplX3QgY3Vy
cmVudFRva2VuSW5kZXggPSAwOworICAgIEhhc2hNYXA8VG9rZW5JZGVudGlmaWVyLCBSZWY8Tm9k
ZT4+IHRva2VuVG9Ob2RlOworICAgIHdoaWxlICghaXRlcmF0b3IuYXRFbmQoKSkgeworICAgICAg
ICBhdXRvIHN0cmluZyA9IGl0ZXJhdG9yLnRleHQoKS50b1N0cmluZygpOworICAgICAgICBpZiAo
Y3VycmVudFRva2VuSW5kZXggPj0gaXRlbS50b2tlbnMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBhdXRvJiBjdXJyZW50VG9rZW4gPSBpdGVtLnRva2Vuc1tjdXJy
ZW50VG9rZW5JbmRleF07CisgICAgICAgIGlmIChpdGVyYXRvci50ZXh0KCkgIT0gY3VycmVudFRv
a2VuLmNvbnRlbnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHRva2VuVG9O
b2RlLmFkZChjdXJyZW50VG9rZW4uaWRlbnRpZmllciwgKml0ZXJhdG9yLm5vZGUoKSk7CisgICAg
ICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsKKyAgICAgICAgKytjdXJyZW50VG9rZW5JbmRleDsKKyAg
ICB9CisKKyAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHByZXNldmUgdGhlIG9yZGVyIG9mIHRo
ZSByZXBsYWNlbWVudCBhdCBhbGwuCisgICAgZm9yIChhdXRvJiB0b2tlbiA6IHJlcGxhY2VtZW50
VG9rZW5zKSB7CisgICAgICAgIGF1dG8qIG5vZGUgPSB0b2tlblRvTm9kZS5nZXQodG9rZW4uaWRl
bnRpZmllcik7CisgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgaWYgKCFpczxDaGFyYWN0ZXJEYXRhPihub2RlKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAvLyBGSVhNRTogSXQncyBub3Qgc2FmZSB0byB1cGRhdGUgRE9NIHdoaWxl
IGl0ZXJhdGluZyBvdmVyIHRoZSB0b2tlbnMuCisgICAgICAgIGRvd25jYXN0PENoYXJhY3RlckRh
dGE+KG5vZGUpLT5zZXREYXRhKHRva2VuLmNvbnRlbnQpOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJQb3NpdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFu
ZGxlci5oPgorI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBEb2N1bWVudDsKKworY2xhc3MgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXIgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI+IHsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBUZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlcihEb2N1bWVudCYpOworCisgICAgZW51bSBUb2tlbklkZW50aWZpZXJUeXBl
IHsgfTsKKyAgICB1c2luZyBUb2tlbklkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPFRva2Vu
SWRlbnRpZmllclR5cGU+OworCisgICAgc3RydWN0IE1hbmlwdWxhdGlvblRva2VuIHsKKyAgICAg
ICAgVG9rZW5JZGVudGlmaWVyIGlkZW50aWZpZXI7CisgICAgICAgIFN0cmluZyBjb250ZW50Owor
CisgICAgICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKKyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPE1h
bmlwdWxhdGlvblRva2VuPiBkZWNvZGUoRGVjb2RlciYpOworICAgIH07CisKKyAgICBlbnVtIEl0
ZW1JZGVudGlmaWVyVHlwZSB7IH07CisgICAgdXNpbmcgSXRlbUlkZW50aWZpZXIgPSBPYmplY3RJ
ZGVudGlmaWVyPEl0ZW1JZGVudGlmaWVyVHlwZT47CisKKyAgICB1c2luZyBNYW5pcHVsYXRpb25J
dGVtQ2FsbGJhY2sgPSBXVEY6OkZ1bmN0aW9uPHZvaWQoRG9jdW1lbnQmLCBJdGVtSWRlbnRpZmll
ciwgY29uc3QgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiYpPjsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHN0YXJ0T2JzZXJ2aW5nUGFyYWdyYXBocyhNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2sm
Jik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGNvbXBsZXRlTWFuaXB1bGF0aW9uKEl0ZW1J
ZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+Jik7CisKK3ByaXZhdGU6
CisgICAgc3RydWN0IE1hbmlwdWxhdGlvbkl0ZW0geworICAgICAgICBQb3NpdGlvbiBzdGFydDsK
KyAgICAgICAgUG9zaXRpb24gZW5kOworICAgICAgICBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+
IHRva2VuczsKKyAgICB9OworCisgICAgdm9pZCBhZGRJdGVtKGNvbnN0IFBvc2l0aW9uJiBzdGFy
dE9mUGFyYWdyYXBoLCBjb25zdCBQb3NpdGlvbiYgZW5kT2ZQYXJhZ3JhcGgsIFZlY3RvcjxNYW5p
cHVsYXRpb25Ub2tlbj4mJik7CisgICAgYm9vbCByZXBsYWNlKGNvbnN0IE1hbmlwdWxhdGlvbkl0
ZW0mLCBjb25zdCBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+Jik7CisKKyAgICBXZWFrUHRyPERv
Y3VtZW50PiBtX2RvY3VtZW50OworICAgIE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjayBtX2NhbGxi
YWNrOworICAgIEhhc2hNYXA8SXRlbUlkZW50aWZpZXIsIE1hbmlwdWxhdGlvbkl0ZW0+IG1faXRl
bXM7CisgICAgSXRlbUlkZW50aWZpZXIgbV9pdGVtSWRlbnRpZmllcjsKKyAgICBUb2tlbklkZW50
aWZpZXIgbV90b2tlbklkZW50aWZpZXI7Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgor
dm9pZCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW46OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgaWRlbnRpZmllciA8
PCBjb250ZW50OworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8VGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuPiBUZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQor
eworICAgIE1hbmlwdWxhdGlvblRva2VuIHJlc3VsdDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc3VsdC5pZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb250ZW50KSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjUxNTI4KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0OSBAQAorMjAxOS0xMC0yMyAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgYSBtZWNoYW5pc20gdG8gZmlu
ZCBhbmQgbWFuaXB1bGF0ZSB0ZXh0IGJ5IHBhcmFncmFwaHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzI4NgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBT
UEkgdG8gZmluZCBwYXJhZ3JhcGhzIG9mIHRleHQgYW5kIGxldCBjbGllbnQgcmVwbGFjZSB0aGUg
Y29udGVudCBvZiBlYWNoIHBhcmFncmFwaC4KKyAgICAgICAgRm9yIG5vdywgdGhpcyBTUEkgaXMg
bGltaXRlZCB0byBmaW5kICYgcmVwbGFjZSBjb250ZW50cyBvZiBtYWluIGZyYW1lJ3MgZG9jdW1l
bnQuCisKKyAgICAgICAgV0tXZWJWaWV3J3MgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29t
cGxldGlvbkhhbmRsZXIgc2VuZHMgU3RhcnRUZXh0TWFuaXB1bGF0aW9ucyBtZXNzYWdlIHRvIFdl
YkNvbnRlbnQgcHJvY2VzcworICAgICAgICB0byBmaW5kIGFsbCBwYXJhZ3JhcGhzIGluIHRoZSBt
YWluIGZyYW1lLiBXZWJDb250ZW50IHByb2Nlc3Mgd2lsbCBzZW5kIGJhY2sgRGlkRmluZFRleHRN
YW5pcHVsYXRpb25JdGVtIG1lc3NhZ2UKKyAgICAgICAgZm9yIGVhY2ggcGFyYWdyYXBoLCB3aGlj
aCBpbiB0dXJuIGNhbGxzIGJhY2sgX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlJ3MgX3dlYlZp
ZXc6IGRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbTouCisKKyAgICAgICAgVXBvbiByZWNlaXZp
bmcgdGhpcyBkZWxlZ2F0ZSBjYWxsYmFjaywgdGhlIGNsaWVudCBjYW4gaW52b2tlIFdLV2ViVmll
dydzIF9jb21wbGV0ZVRleHRNYW5pcHVsYXRpb24gdG8gcmVwbGFjZQorICAgICAgICB0aGUgY29u
dGVudC4gSXQgd2lsbCBzZW5kIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbiB0byBXZWJDb250ZW50
IHByb2Nlc3MsIHdoaWNoIHdpbGwgaW52b2tlIGNvbXBsZXRlTWFuaXB1bGF0aW9uCisgICAgICAg
IG9uIG1haW4gZnJhbWUncyBkb2N1bWVudCdzIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLgor
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgICgt
W1dLV2ViVmlldyBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlXSk6IEFkZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOl0pOiBBZGVkLgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29tcGxldGlvbkhhbmRs
ZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOmNv
bXBsZXRpb246XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2
YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9u
RGVsZWdhdGUuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0
TWFuaXB1bGF0aW9uSXRlbS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L19XS1RleHRNYW5pcHVsYXRpb25JdGVtLm1tOiBBZGRlZC4KKyAgICAgICAgKC1bX1dLVGV4dE1h
bmlwdWxhdGlvbkl0ZW0gaW5pdFdpdGhJZGVudGlmaWVyOnRva2VuczpdKToKKyAgICAgICAgKC1b
X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gaWRlbnRpZmllcl0pOgorICAgICAgICAoLVtfV0tUZXh0
TWFuaXB1bGF0aW9uSXRlbSB0b2tlbnNdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbTogQWRkZWQuCisgICAgICAgICgt
W19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiBpbml0XSk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c3RhcnRUZXh0
TWFuaXB1bGF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkRmluZFRl
eHRNYW5pcHVsYXRpb25JdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpjb21w
bGV0ZVRleHRNYW5pcHVsYXRpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAg
ICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c3RhcnRU
ZXh0TWFuaXB1bGF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNvbXBsZXRlVGV4
dE1hbmlwdWxhdGlvbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKwogMjAx
OS0xMC0yMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYkJh
Y2tGb3J3YXJkQ2FjaGU6OnJlbW92ZUVudHJpZXNNYXRjaGluZygpIG1heSByZS1lbnRlciBhbmQg
Y3Jhc2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQJKHJldmlzaW9uIDI1MTUyOCkKKysrIFNv
dXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDYgKzI2
MCw4IEBAIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHJvY2Vzc1Bvb2xDb25maWcKIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLUmVtb3RlV2ViSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0KIFVJUHJv
Y2Vzcy9BUEkvQ29jb2EvX1dLU2Vzc2lvblN0YXRlLm1tCiBVSVByb2Nlc3MvQVBJL0NvY29hL19X
S1RleHRJbnB1dENvbnRleHQubW0KK1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxh
dGlvbkl0ZW0ubW0KK1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvblRva2Vu
Lm1tCiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1RodW1ibmFpbFZpZXcubW0KIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQogVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tVc2VyQ29udGVudEZpbHRlci5tbQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAyNTE1MjgpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NDE5LDYgKzk0MTks
MzQgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldE1vY2tXZWJBdXRoZW50aWNhdAogfQogI2VuZGlm
CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpzdGFydFRleHRNYW5pcHVsYXRpb25zKFRleHRNYW5pcHVs
YXRpb25JdGVtQ2FsbGJhY2smJiBjYWxsYmFjaywgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2Vzcygp
KSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgbV90ZXh0TWFuaXB1bGF0aW9uSXRlbUNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7
CisgICAgbV9wcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViUGFnZTo6U3RhcnRUZXh0TWFuaXB1bGF0aW9ucygpLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSwgbV93ZWJQYWdlSUQpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmluZFRl
eHRNYW5pcHVsYXRpb25JdGVtKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJ
dGVtSWRlbnRpZmllciBpdGVtSUQsCisgICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4mIHRva2VucykKK3sKKyAgICBp
ZiAoIW1fdGV4dE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjaykKKyAgICAgICAgcmV0dXJuOworICAg
IG1fdGV4dE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjayhpdGVtSUQsIHRva2Vucyk7Cit9CisKK3Zv
aWQgV2ViUGFnZVByb3h5Ojpjb21wbGV0ZVRleHRNYW5pcHVsYXRpb24oV2ViQ29yZTo6VGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1JRCwKKyAgICBjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRv
a2VuPiYgdG9rZW5zLCBXVEY6OkZ1bmN0aW9uPHZvaWQgKGJvb2wgc3VjY2Vzcyk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKSB7CisgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBt
X3Byb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJQ
YWdlOjpDb21wbGV0ZVRleHRNYW5pcHVsYXRpb24oaXRlbUlELCB0b2tlbnMpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgbV93ZWJQYWdlSUQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKIAogI3VuZGVmIE1FUkdFX1dIRUVMX0VWRU5UUwpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDI1MTUyOCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3Nyw3IEBACiAj
aW5jbHVkZSA8V2ViQ29yZS9Gb250QXR0cmlidXRlcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJh
bWVMb2FkZXJUeXBlcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+IC8vIEZJWE1F
OiBNb3ZlIExheW91dFZpZXdwb3J0Q29uc3RyYWludCB0byBpdHMgb3duIGZpbGUgYW5kIHN0b3Ag
aW5jbHVkaW5nIHRoaXMuCisjaW5jbHVkZSA8V2ViQ29yZS9HbG9iYWxGcmFtZUlkZW50aWZpZXIu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0lucHV0TW9kZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTGF5
b3V0UG9pbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0xheW91dFNpemUuaD4KQEAgLTkzLDYgKzk0
LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NlYXJjaFBvcHVwTWVudS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvVGV4dENoZWNraW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0R3JhbnVsYXJpdHku
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9Vc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9WaWV3cG9ydEFyZ3VtZW50cy5oPgogI2luY2x1ZGUgPG1lbW9yeT4KQEAgLTE2MTEs
NiArMTYxMywxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNb2NrV2ViQXV0aGVudGljYXRpb25D
b25maWd1cmF0aW9uKFdlYkNvcmU6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24m
Jik7CiAjZW5kaWYKIAorICAgIHVzaW5nIFRleHRNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2sgPSBX
VEY6OkZ1bmN0aW9uPHZvaWQgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJ
dGVtSWRlbnRpZmllciwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4mKT47CisgICAgdm9pZCBzdGFydFRleHRNYW5pcHVs
YXRpb25zKFRleHRNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2smJiwgV1RGOjpDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgZGlkRmluZFRleHRNYW5pcHVsYXRpb25JdGVtKFdl
YkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRlbnRpZmllciwgY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25U
b2tlbj4mKTsKKyAgICB2b2lkIGNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihXZWJDb3JlOjpUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIsCisgICAgICAgIGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9r
ZW4+JiwgV1RGOjpGdW5jdGlvbjx2b2lkIChib29sIHN1Y2Nlc3MpPiYmKTsKKwogcHJpdmF0ZToK
ICAgICBXZWJQYWdlUHJveHkoUGFnZUNsaWVudCYsIFdlYlByb2Nlc3NQcm94eSYsIFJlZjxBUEk6
OlBhZ2VDb25maWd1cmF0aW9uPiYmKTsKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwpA
QCAtMjU3NCw2ICsyNTgyLDggQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3VzcGVu
ZGVkUGFnZVByb3h5PiBtX3N1c3BlbmRlZFBhZ2VLZXB0VG9QcmV2ZW50Rmxhc2hpbmc7CiAgICAg
V2Vha1B0cjxTdXNwZW5kZWRQYWdlUHJveHk+IG1fbGFzdFN1c3BlbmRlZFBhZ2U7CiAKKyAgICBU
ZXh0TWFuaXB1bGF0aW9uSXRlbUNhbGxiYWNrIG1fdGV4dE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFj
azsKKwogI2lmIEhBVkUoUEVOQ0lMS0lUKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxFZGl0YWJsZUlt
YWdlQ29udHJvbGxlcj4gbV9lZGl0YWJsZUltYWdlQ29udHJvbGxlcjsKICNlbmRpZgpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgko
cmV2aXNpb24gMjUxNTI4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC01ODEsNCArNTgxLDcgQEAgbWVzc2FnZXMg
LT4gV2ViUGFnZVByb3h5IHsKICAgICBTZW5kTWVzc2FnZVRvV2ViVmlldyhzdHJ1Y3QgV2ViS2l0
OjpVc2VyTWVzc2FnZSB1c2VyTWVzc2FnZSkKICAgICBTZW5kTWVzc2FnZVRvV2ViVmlld1dpdGhS
ZXBseShzdHJ1Y3QgV2ViS2l0OjpVc2VyTWVzc2FnZSB1c2VyTWVzc2FnZSkgLT4gKHN0cnVjdCBX
ZWJLaXQ6OlVzZXJNZXNzYWdlIHJlcGx5TWVzc2FnZSkgQXN5bmMKICNlbmRpZgorCisgICAgRGlk
RmluZFRleHRNYW5pcHVsYXRpb25JdGVtKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOjpJdGVtSWRlbnRpZmllciBpdGVtSUQsIFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+IHRva2VucykKKwogfQpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCShyZXZpc2lv
biAyNTE1MjgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC05OCw2ICs5OCw5IEBACiAjaW1wb3J0ICJfV0tSZW1vdGVP
YmplY3RSZWdpc3RyeUludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tTZXNzaW9uU3RhdGVJbnRlcm5h
bC5oIgogI2ltcG9ydCAiX1dLVGV4dElucHV0Q29udGV4dEludGVybmFsLmgiCisjaW1wb3J0ICJf
V0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUuaCIKKyNpbXBvcnQgIl9XS1RleHRNYW5pcHVsYXRp
b25JdGVtLmgiCisjaW1wb3J0ICJfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaCIKICNpbXBvcnQg
Il9XS1Zpc2l0ZWRMaW5rU3RvcmVJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLV2Vic2l0ZVBvbGlj
aWVzSW50ZXJuYWwuaCIKICNpbXBvcnQgPFdlYkNvcmUvRWxlbWVudENvbnRleHQuaD4KQEAgLTEx
Myw2ICsxMTYsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9TaGFyZWRCdWZmZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvU3RyaW5nVXRpbGl0aWVzLmg+
CisjaW1wb3J0IDxXZWJDb3JlL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1ZhbGlkYXRpb25CdWJibGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvVmlld3BvcnRB
cmd1bWVudHMuaD4KICNpbXBvcnQgPFdlYkNvcmUvV3JpdGluZ01vZGUuaD4KQEAgLTI3Niw2ICsy
ODAsOCBAQCBzdGF0aWMgT3B0aW9uYWw8V2ViQ29yZTo6U2Nyb2xsYmFyT3ZlcmxhCiAKICAgICBC
T09MIF91c2VQbGF0Zm9ybUZpbmRVSTsKIAorICAgIFdlYWtPYmpDUHRyPGlkIDxfV0tUZXh0TWFu
aXB1bGF0aW9uRGVsZWdhdGU+PiBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOworCiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKICAgICBSZXRhaW5QdHI8X1dLUmVtb3RlT2JqZWN0UmVnaXN0cnk+
IF9yZW1vdGVPYmplY3RSZWdpc3RyeTsKIApAQCAtNzQzOSw2ICs3NDQ1LDY1IEBAIC0gKHZvaWQp
X2V4ZWN1dGVFZGl0Q29tbWFuZDooTlNTdHJpbmcgKikKICAgICB9KTsKIH0KIAorLSAoaWQgPF9X
S1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4pX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZQorewor
ICAgIHJldHVybiBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmdldEF1dG9yZWxlYXNlZCgpOwor
fQorCistICh2b2lkKV9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6KGlkIDxfV0tUZXh0TWFu
aXB1bGF0aW9uRGVsZWdhdGU+KWRlbGVnYXRlCit7CisgICAgX3RleHRNYW5pcHVsYXRpb25EZWxl
Z2F0ZSA9IGRlbGVnYXRlOworfQorCistICh2b2lkKV9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0
aENvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBp
ZiAoIV90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAo
IV9wYWdlKQorICAgICAgICByZXR1cm47CisgICAgX3BhZ2UtPnN0YXJ0VGV4dE1hbmlwdWxhdGlv
bnMoW3dlYWtTZWxmID0gV2Vha09iakNQdHI8V0tXZWJWaWV3PihzZWxmKV0gKFdlYkNvcmU6OlRl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRlbnRpZmllciBpdGVtSUQsCisgICAgICAg
IGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1
bGF0aW9uVG9rZW4+JiB0b2tlbnMpIHsKKyAgICAgICAgaWYgKCF3ZWFrU2VsZikKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBhdXRvIHJldGFpbmVkU2VsZiA9IHdlYWtTZWxmLmdldCgp
OworICAgICAgICBhdXRvIGRlbGVnYXRlID0gW3JldGFpbmVkU2VsZiBfdGV4dE1hbmlwdWxhdGlv
bkRlbGVnYXRlXTsKKyAgICAgICAgaWYgKCFkZWxlZ2F0ZSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBOU011dGFibGVBcnJheSAqd2tUb2tlbnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJy
YXlXaXRoQ2FwYWNpdHk6dG9rZW5zLnNpemUoKV07CisgICAgICAgIGZvciAoYXV0byYgdG9rZW4g
OiB0b2tlbnMpIHsKKyAgICAgICAgICAgIGF1dG8gd2tUb2tlbiA9IGFkb3B0TlMoW1tfV0tUZXh0
TWFuaXB1bGF0aW9uVG9rZW4gYWxsb2NdIGluaXRdKTsKKyAgICAgICAgICAgIFt3a1Rva2VuIHNl
dElkZW50aWZpZXI6U3RyaW5nOjpudW1iZXIodG9rZW4uaWRlbnRpZmllci50b1VJbnQ2NCgpKV07
CisgICAgICAgICAgICBbd2tUb2tlbiBzZXRDb250ZW50OnRva2VuLmNvbnRlbnRdOworICAgICAg
ICAgICAgW3drVG9rZW5zIGFkZE9iamVjdDp3a1Rva2VuLmdldCgpXTsKKyAgICAgICAgfQorCisg
ICAgICAgIGF1dG8gaXRlbSA9IGFkb3B0TlMoW1tfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSBhbGxv
Y10gaW5pdFdpdGhJZGVudGlmaWVyOlN0cmluZzo6bnVtYmVyKGl0ZW1JRC50b1VJbnQ2NCgpKSB0
b2tlbnM6d2tUb2tlbnNdKTsKKyAgICAgICAgW2RlbGVnYXRlIF93ZWJWaWV3OnJldGFpbmVkU2Vs
Zi5nZXQoKSBkaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW06aXRlbS5nZXQoKV07CisgICAgfSwg
W2NhcHR1cmVkQ29tcGxldGlvbkJsb2NrID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVy
KV0gKCkgeworICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25CbG9jaygpOworICAgIH0pOworfQor
CistICh2b2lkKV9jb21wbGV0ZVRleHRNYW5pcHVsYXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25J
dGVtICopaXRlbSBjb21wbGV0aW9uOih2b2lkKF4pKEJPT0wgc3VjY2VzcykpY29tcGxldGlvbkhh
bmRsZXIKK3sKKyAgICBpZiAoIV9wYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGl0
ZW1JRCA9IG1ha2VPYmplY3RJZGVudGlmaWVyPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyOjpJdGVtSWRlbnRpZmllclR5cGU+KFN0cmluZyhpdGVtLmlkZW50aWZpZXIpLnRvVUlu
dDY0KCkpOworCisgICAgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
OjpNYW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zOworICAgIGZvciAoX1dLVGV4dE1hbmlwdWxhdGlv
blRva2VuICp3a1Rva2VuIGluIGl0ZW0udG9rZW5zKSB7CisgICAgICAgIGF1dG8gdG9rZW5JRCA9
IG1ha2VPYmplY3RJZGVudGlmaWVyPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
OjpUb2tlbklkZW50aWZpZXJUeXBlPihTdHJpbmcod2tUb2tlbi5pZGVudGlmaWVyKS50b1VJbnQ2
NCgpKTsKKyAgICAgICAgdG9rZW5zLmFwcGVuZChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4geyB0b2tlbklELCB3a1Rva2VuLmNvbnRlbnQgfSk7
CisgICAgfQorCisgICAgX3BhZ2UtPmNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihpdGVtSUQsIHRv
a2VucywgW2NhcHR1cmVkQ29tcGxldGlvbkJsb2NrID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25I
YW5kbGVyKV0gKGJvb2wgc3VjY2VzcykgeworICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25CbG9j
ayhzdWNjZXNzKTsKKyAgICB9KTsKK30KKwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKIC0g
KENHUmVjdClfZHJhZ0NhcmV0UmVjdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCShyZXZpc2lvbiAyNTE1MjgpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTMsNiArMTEzLDcgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUlu
dGVnZXIsIF9XS1JlY3RFZAogQGNsYXNzIF9XS1NhZmVCcm93c2luZ1dhcm5pbmc7CiBAY2xhc3Mg
X1dLU2Vzc2lvblN0YXRlOwogQGNsYXNzIF9XS1RleHRJbnB1dENvbnRleHQ7CitAY2xhc3MgX1dL
VGV4dE1hbmlwdWxhdGlvbkl0ZW07CiBAY2xhc3MgX1dLVGh1bWJuYWlsVmlldzsKIEBjbGFzcyBf
V0tXZWJzaXRlUG9saWNpZXM7CiBAY2xhc3MgX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVyOwpAQCAt
MTIwLDkgKzEyMSwxMCBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLUmVjdEVk
CiBAcHJvdG9jb2wgV0tIaXN0b3J5RGVsZWdhdGVQcml2YXRlOwogQHByb3RvY29sIF9XS0RpYWdu
b3N0aWNMb2dnaW5nRGVsZWdhdGU7CiBAcHJvdG9jb2wgX1dLRmluZERlbGVnYXRlOworQHByb3Rv
Y29sIF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZTsKIEBwcm90b2NvbCBfV0tJY29uTG9hZGluZ0RlbGVn
YXRlOwogQHByb3RvY29sIF9XS0lucHV0RGVsZWdhdGU7Ci1AcHJvdG9jb2wgX1dLRnVsbHNjcmVl
bkRlbGVnYXRlOworQHByb3RvY29sIF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTsKIAogQGlu
dGVyZmFjZSBXS1dlYlZpZXcgKFdLUHJpdmF0ZSkKIApAQCAtNTc1LDYgKzU3NywxMCBAQCB0eXBl
ZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLUmVjdEVkCiBAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIF9XS0luc3BlY3RvciAqX2luc3BlY3RvciBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBfV0tGcmFtZUhhbmRsZSAqX21haW5GcmFtZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0
LjQpLCBpb3MoMTIuMikpOwogCitAcHJvcGVydHkgKG5vbmF0b21pYywgd2Vhaywgc2V0dGVyPV9z
ZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6KSBpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVn
YXRlPiBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zdGFydFRleHRNYW5pcHVsYXRp
b25zV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVy
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7Cist
ICh2b2lkKV9jb21wbGV0ZVRleHRNYW5pcHVsYXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25JdGVt
ICopaXRlbSBjb21wbGV0aW9uOih2b2lkKF4pKEJPT0wgc3VjY2VzcykpY29tcGxldGlvbkhhbmRs
ZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsK
KwogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0U2Nyb2xsaW5nVXBkYXRlc0Rpc2Fi
bGVkRm9yVGVzdGluZzopIEJPT0wgX3Njcm9sbGluZ1VwZGF0ZXNEaXNhYmxlZEZvclRlc3Rpbmcg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIAog
LSAodm9pZClfcHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rpbmc7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVn
YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0
L1dLRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKwor
QGNsYXNzIF9XS0ZyYW1lSGFuZGxlOworQGNsYXNzIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtOwor
CitAcHJvdG9jb2wgX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIDxOU09iamVjdD4KKworQG9w
dGlvbmFsCisKKy0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkRmluZFRl
eHRNYW5pcHVsYXRpb25JdGVtOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWl0ZW07CisKK0Bl
bmQKKwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5p
cHVsYXRpb25JdGVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25JdGVtLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25JdGVtLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFdlYktp
dC9XS0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisK
K0BjbGFzcyBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW47CisKK1dLX0NMQVNTX0FWQUlMQUJMRSht
YWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tUZXh0TWFu
aXB1bGF0aW9uSXRlbSA6IE5TT2JqZWN0CisKKy0gKGluc3RhbmNldHlwZSlpbml0IE5TX1VOQVZB
SUxBQkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSWRlbnRpZmllcjooTlNTdHJpbmcgKilp
ZGVudGlmaWVyIHRva2VuczooTlNBcnJheTxfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gKj4gKil0
b2tlbnM7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNTdHJpbmcg
KmlkZW50aWZpZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TQXJy
YXk8X1dLVGV4dE1hbmlwdWxhdGlvblRva2VuICo+ICp0b2tlbnM7CisKK0BlbmQKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4
dE1hbmlwdWxhdGlvbkl0ZW0ubW0JKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25JdGVtLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0uaCIKKworI2ltcG9ydCA8d3RmL1JldGFpblB0
ci5oPgorCitAaW1wbGVtZW50YXRpb24gX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0geworICAgIFJl
dGFpblB0cjxOU1N0cmluZz4gX2lkZW50aWZpZXI7CisgICAgUmV0YWluUHRyPE5TQXJyYXk8X1dL
VGV4dE1hbmlwdWxhdGlvblRva2VuICo+PiBfdG9rZW5zOworfQorCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgdG9rZW5zOihOU0FycmF5
PF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiAqPiAqKXRva2VucworeworICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX2lkZW50aWZpZXIg
PSBpZGVudGlmaWVyOworICAgIF90b2tlbnMgPSB0b2tlbnM7CisgICAgcmV0dXJuIHNlbGY7Cit9
CisKKy0gKE5TU3RyaW5nICopaWRlbnRpZmllcgoreworICAgIHJldHVybiBfaWRlbnRpZmllci5n
ZXQoKTsKK30KKworLSAoTlNBcnJheTxfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gKj4gKil0b2tl
bnMKK3sKKyAgICByZXR1cm4gX3Rva2Vucy5nZXQoKTsKK30KKworQGVuZApJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFu
aXB1bGF0aW9uVG9rZW4uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24u
aD4KKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKK1dLX0NMQVNTX0FWQUlM
QUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tU
ZXh0TWFuaXB1bGF0aW9uVG9rZW4gOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywg
Y29weSkgTlNTdHJpbmcgKmlkZW50aWZpZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkg
TlNTdHJpbmcgKmNvbnRlbnQ7CisKK0BlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4ubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5t
bQkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
VGV4dE1hbmlwdWxhdGlvblRva2VuLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiX1dLVGV4dE1hbmlw
dWxhdGlvblRva2VuLmgiCisKKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworQGltcGxlbWVu
dGF0aW9uIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbgorCistIChpbnN0YW5jZXR5cGUpaW5pdAor
eworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09B
dXRob3JpemF0aW9uU2Vzc2lvbi5tbQkocmV2aXNpb24gMjUxNTI4KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlvblNlc3Npb24u
bW0JKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbXBvcnQgIkFQSVVJQ2xpZW50
LmgiCiAjaW1wb3J0ICJTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5LmgiCiAjaW1wb3J0ICJXS1VJ
RGVsZWdhdGVQcml2YXRlLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgogI2ltcG9y
dCAiV2ViUGFnZVByb3h5LmgiCiAjaW1wb3J0ICJXZWJzaXRlRGF0YVN0b3JlLmgiCiAjaW1wb3J0
IDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1t
CShyZXZpc2lvbiAyNTE1MjgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tGdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBA
QAogI2ltcG9ydCA8V2ViQ29yZS9WaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9XZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9XZWJDb3JlRnVsbFNjcmVlbldpbmRvdy5oPgorI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3Jh
cGhpY3NTUEkuaD4KICNpbXBvcnQgPHBhbC9zeXN0ZW0vU2xlZXBEaXNhYmxlci5oPgogI2ltcG9y
dCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KIApJbmRleDogU291cmNlL1dlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNTE1MjgpCisrKyBT
b3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzMzLDYgKzEzMzMsOSBAQAogCQk5OUU3MTRDNTFDMTI0QTA0MDA2NjVCM0EgLyog
X1dLQXV0b21hdGlvbkRlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5OUU3MTRDMTFDMTI0OUU2MDA2NjVCM0EgLyogX1dLQXV0b21hdGlvbkRl
bGVnYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJOTlFNzE4OUEyMUY3OUQ5RTAwNTVFOTc1IC8qIF9XS1RvdWNoRXZlbnRHZW5lcmF0b3IubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OUU3MTg5NjIx
Rjc5RDlEMDA1NUU5NzUgLyogX1dLVG91Y2hFdmVudEdlbmVyYXRvci5tbSAqLzsgfTsKIAkJOTlF
NzE4OUMyMUY3OUQ5RTAwNTVFOTc1IC8qIF9XS1RvdWNoRXZlbnRHZW5lcmF0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5RTcxODk4MjFGNzlEOUUw
MDU1RTk3NSAvKiBfV0tUb3VjaEV2ZW50R2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOUIwMkUwQ0IyMzVFQjk1MzAwNDA0NEIyIC8q
IF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwMkUwQzkyMzVFQjYyRDAwNDA0NEIyIC8qIF9XS1RleHRN
YW5pcHVsYXRpb25EZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTlCMDJFMENDMjM1RUI5NTcwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1
bGF0aW9uSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOUIwMkUwQ0EyMzVFQjg4NDAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOUIwMkUw
RDcyMzVGQzk0RjAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwMkUwQ0QyMzVFQjk2NzAw
NDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlGQjVGMzk1MTY5RTZBODAwMDJDMjVCRiAv
KiBXS0NvbnRleHRQcml2YXRlTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5RkI1RjM5MzE2OUU2QTgwMDAyQzI1QkYgLyogV0tDb250ZXh0UHJpdmF0
ZU1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUExMDJBNzA4MUVDMEVFRTkwMEQ4MUQ4MiAvKiBjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIg
RVNSLnBsdWdpbi5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTVFMzk0OTFENUJEOEE3MDBCNEI3Q0UgLyogY29t
Lm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyIEVTUi5wbHVnaW4uc2IgKi87IH07CiAJCUExMDQ2RUEx
MjA3OTI2MzEwMEYwQzVEOCAvKiBXS1BERlZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMDQ2RTlGMjA3OTI2MzEwMEYwQzVEOCAvKiBXS1BERlZp
ZXcuaCAqLzsgfTsKQEAgLTE3MjgsOCArMTczMSw2IEBACiAJCQljb21waWxlclNwZWMgPSBjb20u
YXBwbGUuY29tcGlsZXJzLnByb3h5LnNjcmlwdDsKIAkJCWZpbGVQYXR0ZXJucyA9ICIqLmgiOwog
CQkJZmlsZVR5cGUgPSBwYXR0ZXJuLnByb3h5OwotCQkJaW5wdXRGaWxlcyA9ICgKLQkJCSk7CiAJ
CQlpc0VkaXRhYmxlID0gMTsKIAkJCW91dHB1dEZpbGVzID0gKAogCQkJCSIkKEhFQURFUl9PVVRQ
VVRfRElSKS8kKElOUFVUX0ZJTEVfTkFNRSkiLApAQCAtNDA0Niw2ICs0MDQ3LDExIEBACiAJCTk5
RTcxODk2MjFGNzlEOUQwMDU1RTk3NSAvKiBfV0tUb3VjaEV2ZW50R2VuZXJhdG9yLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLVG91Y2hFdmVudEdlbmVyYXRv
ci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTlFNzE4OTgyMUY3OUQ5RTAwNTVF
OTc1IC8qIF9XS1RvdWNoRXZlbnRHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gX1dLVG91Y2hFdmVudEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5OUY2NDJEMjFGQUJFMzc4MDA5NjIxRTkgLyogQ29vcmRpbmF0ZVN5c3RlbS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb29yZGluYXRlU3lzdGVtLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCMDJFMEM5MjM1RUI2MkQwMDQwNDRCMiAvKiBfV0tU
ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLVGV4dE1hbmlwdWxh
dGlvbkRlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCMDJFMENBMjM1
RUI4ODQwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk5QjAyRTBDRDIzNUVCOTY3MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk5QjAyRTBDRTIzNUVCQjE0MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlw
dWxhdGlvblRva2VuLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLVGV4dE1hbmlwdWxhdGlv
blRva2VuLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjAyRTBEMDIzNUVCQ0NB
MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0ubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOUJDNTlENkMxRUZDQ0NCNjAwMUU4RDA5IC8qIENhbGxiYWNrSUQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbGJhY2tJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5QkM1OUQ2RDFFRkNEQzZEMDAxRThEMDkgLyogT3B0aW9uYWxDYWxsYmFja0lE
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wdGlvbmFsQ2FsbGJhY2tJRC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5RjU0Rjg4RTE2NDg4RTg3MDA3REY4MUEg
LyogQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IEF1eGlsaWFyeVByb2Nlc3NNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC02MzQ1LDYgKzYzNTEsMTEgQEAKIAkJCQkyREU5QjEzODIyMzFGNjFDMDA1Mjg3Qjcg
LyogX1dLVGV4dElucHV0Q29udGV4dC5oICovLAogCQkJCTJERTlCMTM3MjIzMUY2MUMwMDUyODdC
NyAvKiBfV0tUZXh0SW5wdXRDb250ZXh0Lm1tICovLAogCQkJCTJERTlCMTNCMjIzMUY3N0MwMDUy
ODdCNyAvKiBfV0tUZXh0SW5wdXRDb250ZXh0SW50ZXJuYWwuaCAqLywKKwkJCQk5QjAyRTBDOTIz
NUVCNjJEMDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmggKi8sCisJCQkJ
OUIwMkUwQ0EyMzVFQjg4NDAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtLmggKi8s
CisJCQkJOUIwMkUwRDAyMzVFQkNDQTAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25JdGVt
Lm1tICovLAorCQkJCTlCMDJFMENEMjM1RUI5NjcwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0
aW9uVG9rZW4uaCAqLywKKwkJCQk5QjAyRTBDRTIzNUVCQjE0MDA0MDQ0QjIgLyogX1dLVGV4dE1h
bmlwdWxhdGlvblRva2VuLm1tICovLAogCQkJCTJENkIzNzE5MThBOTY3QUQwMDQyQUU4MCAvKiBf
V0tUaHVtYm5haWxWaWV3LmggKi8sCiAJCQkJMkQ2QjM3MUExOEE5NjdBRDAwNDJBRTgwIC8qIF9X
S1RodW1ibmFpbFZpZXcubW0gKi8sCiAJCQkJMkRBQ0U2NEQxOEFEQkZGMDAwRTRDQTc2IC8qIF9X
S1RodW1ibmFpbFZpZXdJbnRlcm5hbC5oICovLApAQCAtOTMxMCw2ICs5MzIxLDkgQEAKIAkJCQkx
QTAwMkQ0MzE5NkIzMzcwMDBCOUFENDQgLyogX1dLU2Vzc2lvblN0YXRlSW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTJERTlCMTNBMjIzMUY2MUMwMDUyODdCNyAvKiBfV0tUZXh0SW5wdXRD
b250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkyREU5QjEzQzIyMzFGNzdDMDA1Mjg3QjcgLyog
X1dLVGV4dElucHV0Q29udGV4dEludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQk5QjAyRTBD
QjIzNUVCOTUzMDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk5QjAyRTBDQzIzNUVCOTU3MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxh
dGlvbkl0ZW0uaCBpbiBIZWFkZXJzICovLAorCQkJCTlCMDJFMEQ3MjM1RkM5NEYwMDQwNDRCMiAv
KiBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTJENkIzNzFC
MThBOTY3QUQwMDQyQUU4MCAvKiBfV0tUaHVtYm5haWxWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyREFDRTY0RTE4QURCRkYwMDBFNENBNzYgLyogX1dLVGh1bWJuYWlsVmlld0ludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5OUU3MTg5QzIxRjc5RDlFMDA1NUU5NzUgLyogX1dLVG91Y2hF
dmVudEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMjUxNTI4KQorKysgU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY4MzYsNiArNjgzNiw1MSBAQCBPcHRpb25hbDxXZWJDb3JlOjpFbGVtZW50Q29udGV4dD4gV2Vi
UGFnCiAgICAgcmV0dXJuIFdlYkNvcmU6OkVsZW1lbnRDb250ZXh0IHsgZWxlbWVudFJlY3RJblJv
b3RWaWV3Q29vcmRpbmF0ZXMoZWxlbWVudCwgKmZyYW1lKSwgbV9pZGVudGlmaWVyLCBkb2N1bWVu
dC5pZGVudGlmaWVyKCksIGRvY3VtZW50LmlkZW50aWZpZXJGb3JFbGVtZW50KGVsZW1lbnQpIH07
CiB9CiAKK3ZvaWQgV2ViUGFnZTo6c3RhcnRUZXh0TWFuaXB1bGF0aW9ucyhDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgaWYgKCFtX3BhZ2UpCisg
ICAgICAgIHJldHVybjsKKworICAgIGF1dG8gbWFpbkRvY3VtZW50ID0gbWFrZVJlZlB0cihtX3Bh
Z2UtPm1haW5GcmFtZSgpLmRvY3VtZW50KCkpOworICAgIGlmICghbWFpbkRvY3VtZW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBtYWluRG9jdW1lbnQtPnRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyKCkuc3RhcnRPYnNlcnZpbmdQYXJhZ3JhcGhzKFt3ZWJQYWdlID0gbWFrZVdlYWtQdHIoKnRo
aXMpXSAoV2ViQ29yZTo6RG9jdW1lbnQmIGRvY3VtZW50LAorICAgICAgICBXZWJDb3JlOjpUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIgaXRlbUlkZW50aWZpZXIsIGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0
aW9uVG9rZW4+JiB0b2tlbnMpIHsKKyAgICAgICAgYXV0byogZnJhbWUgPSBkb2N1bWVudC5mcmFt
ZSgpOworICAgICAgICBpZiAoIXdlYlBhZ2UgfHwgIWZyYW1lIHx8IHdlYlBhZ2UtPm1haW5GcmFt
ZSgpICE9IGZyYW1lKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8qIHdlYkZy
YW1lID0gV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoKmZyYW1lKTsKKyAgICAgICAgaWYgKCF3ZWJG
cmFtZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB3ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbShpdGVtSWRlbnRp
ZmllciwgdG9rZW5zKSk7CisgICAgfSk7CisgICAgLy8gRm9yIG5vdywgd2UgYXNzdW1lIHN0YXJ0
T2JzZXJ2aW5nUGFyYWdyYXBocyBmaW5kIGFsbCBwYXJhZ3JhcGhzIHN5bmNocm9ub3VzbHkgYXQg
b25jZS4KKyAgICBjb21wbGV0aW9uSGFuZGxlcigpOworfQorCit2b2lkIFdlYlBhZ2U6OmNvbXBs
ZXRlVGV4dE1hbmlwdWxhdGlvbihXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6
SXRlbUlkZW50aWZpZXIgaXRlbUlELAorICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFu
aXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+JiB0b2tlbnMsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgYXV0byBj
b21wbGV0ZU1hbmlwdWxhdGlvbiA9IFsmXSB7CisgICAgICAgIGlmICghbV9wYWdlKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1dG8gbWFpbkRvY3VtZW50ID0gbWFrZVJl
ZlB0cihtX3BhZ2UtPm1haW5GcmFtZSgpLmRvY3VtZW50KCkpOworICAgICAgICBpZiAoIW1haW5E
b2N1bWVudCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBhdXRvKiBjb250
cm9sbGVyID0gbWFpbkRvY3VtZW50LT50ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcklmRXhpc3Rz
KCk7CisgICAgICAgIGlmICghY29udHJvbGxlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICByZXR1cm4gY29udHJvbGxlci0+Y29tcGxldGVNYW5pcHVsYXRpb24oaXRlbUlE
LCB0b2tlbnMpOworICAgIH07CisgICAgY29tcGxldGlvbkhhbmRsZXIoY29tcGxldGVNYW5pcHVs
YXRpb24oKSk7Cit9CisKIFBBTDo6U2Vzc2lvbklEIFdlYlBhZ2U6OnNlc3Npb25JRCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnNlc3Npb25JRCgpOwpJbmRl
eDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24g
MjUxNTI4KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Qb2ludGVy
SUQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlRGF0YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJBY3Rpdml0eS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlckNvbnRlbnRUeXBlcy5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbi5oPgpAQCAtMTE5Niw2ICsxMTk3LDEwIEBA
IHB1YmxpYzoKICAgICBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50Rm9yQ29udGV4dChjb25zdCBX
ZWJDb3JlOjpFbGVtZW50Q29udGV4dCYpIGNvbnN0OwogICAgIE9wdGlvbmFsPFdlYkNvcmU6OkVs
ZW1lbnRDb250ZXh0PiBjb250ZXh0Rm9yRWxlbWVudChXZWJDb3JlOjpFbGVtZW50JikgY29uc3Q7
CiAKKyAgICB2b2lkIHN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmKTsKKyAgICB2b2lkIGNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihXZWJDb3JlOjpUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIsCisgICAgICAgIGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9r
ZW4+JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CisKICNpZiBFTkFCTEUoQVBQ
TEVfUEFZKQogICAgIFdlYlBheW1lbnRDb29yZGluYXRvciogcGF5bWVudENvb3JkaW5hdG9yKCk7
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
bWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjUxNTI4KQorKysgU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpA
QCAtNTgyLDQgKzU4Miw3IEBAIEdlbmVyYXRlU3ludGhldGljRWRpdGluZ0NvbW1hbmQoZW51bTp1
aW4KICAgICBTZW5kTWVzc2FnZVRvV2ViRXh0ZW5zaW9uKHN0cnVjdCBXZWJLaXQ6OlVzZXJNZXNz
YWdlIHVzZXJNZXNzYWdlKQogICAgIFNlbmRNZXNzYWdlVG9XZWJFeHRlbnNpb25XaXRoUmVwbHko
c3RydWN0IFdlYktpdDo6VXNlck1lc3NhZ2UgdXNlck1lc3NhZ2UpIC0+IChzdHJ1Y3QgV2ViS2l0
OjpVc2VyTWVzc2FnZSByZXBseU1lc3NhZ2UpIEFzeW5jCiAjZW5kaWYKKworICAgIFN0YXJ0VGV4
dE1hbmlwdWxhdGlvbnMoKSAtPiAoKSBBc3luYworICAgIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlv
bihXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIgaXRl
bUlELCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxh
dGlvblRva2VuPiB0b2tlbnMpIC0+IChib29sIHN1Y2Nlc3MpIEFzeW5jCiB9CkluZGV4OiBUb29s
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTE1
MjgpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAor
MjAxOS0xMC0yMyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBB
ZGQgYSBtZWNoYW5pc20gdG8gZmluZCBhbmQgbWFuaXB1bGF0ZSB0ZXh0IGJ5IHBhcmFncmFwaHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzI4Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGJh
c2ljIEFQSSB0ZXN0cyBmb3IgdGhlIG5ldyBTUEkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW06IEFkZGVkLgor
ICAgICAgICAoLVtUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgaW5pdF0pOgorICAgICAgICAoLVtU
ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgX3dlYlZpZXc6ZGlkRmluZEl0ZW06Zm9yRnJhbWU6XSk6
CisgICAgICAgICgtW1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBpdGVtc10pOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6Y3JlYXRlSXRlbSk6CisKIDIwMTktMTAtMjMgIFdlbnNvbiBIc2llaCAg
PHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPUyAxM10gaW1wb3J0ZWQvbW96
aWxsYS9zdmcvdGV4dC90ZXh0cGF0aC1zZWxlY3Rpb24uc3ZnIGlzIGZsYWt5CkluZGV4OiBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjUxNTI4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTczOSw2ICs3MzksNyBAQAogCQk5OTg0RkFDQzFDRkZBRjYwMDA4RDE5OEMgLyogV0tXZWJW
aWV3VGV4dElucHV0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTk4NEZBQ0ExQ0ZGQUVFRTAwOEQxOThDIC8qIFdLV2ViVmlld1RleHRJbnB1dC5tbSAq
LzsgfTsKIAkJOTk4NEZBQ0UxQ0ZGQjA5MDAwOEQxOThDIC8qIGVkaXRhYmxlLWJvZHkuaHRtbCBp
biBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OTg0
RkFDRDFDRkZCMDM4MDA4RDE5OEMgLyogZWRpdGFibGUtYm9keS5odG1sICovOyB9OwogCQk5OTk5
MTA4QjFGMzkzQzk2MDA4QUQ0NTUgLyogQ29weWluZy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5OTkxMDhBMUYzOTNDOEIwMDhBRDQ1NSAvKiBDb3B5
aW5nLm1tICovOyB9OworCQk5QjAyRTBENjIzNUZBNDdEMDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxh
dGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlC
MDJFMEQ1MjM1RkE0N0QwMDQwNDRCMiAvKiBUZXh0TWFuaXB1bGF0aW9uLm1tICovOyB9OwogCQk5
QjA3ODZBNTFDNTg4NUMzMDBEMTU5RTMgLyogSW5qZWN0ZWRCdW5kbGVNYWtlQWxsU2hhZG93Um9v
dHNPcGVuX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5QjA3ODZBNDFDNTg4NUMzMDBEMTU5RTMgLyogSW5qZWN0ZWRCdW5kbGVNYWtlQWxs
U2hhZG93Um9vdHNPcGVuX0J1bmRsZS5jcHAgKi87IH07CiAJCTlCMTlDREEwMUYwNkRGRTMwMDA1
NDhERCAvKiBOZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIxOUNEOUUxRjA2REZF
MzAwMDU0OEREIC8qIE5ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0g
Ki87IH07CiAJCTlCMUY2Rjc4MUY5MDU1ODQwMEI1NTc0NCAvKiBDb3B5SFRNTC5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMTA1NjQxMUY5MDQ1Qzcw
MEQ1NTgzRiAvKiBDb3B5SFRNTC5tbSAqLzsgfTsKQEAgLTExMjcsNyArMTEyOCw2IEBACiAJCQlk
c3RQYXRoID0gVGVzdFdlYktpdEFQSS5yZXNvdXJjZXM7CiAJCQlkc3RTdWJmb2xkZXJTcGVjID0g
NzsKIAkJCWZpbGVzID0gKAotCQkJCTU3OTgzMzdFMjM2MDE5QTQwMDhFNTU0NyAvKiB3ZWItYXV0
aGVudGljYXRpb24tbWFrZS1jcmVkZW50aWFsLWhpZC5odG1sIGluIENvcHkgUmVzb3VyY2VzICov
LAogCQkJCTU1QTgxN0ZGMjE4MTAyMUEwMDA0QTM5QSAvKiAxMDB4MTAwLXJlZC50Z2EgaW4gQ29w
eSBSZXNvdXJjZXMgKi8sCiAJCQkJMUE5RTUyQzkxM0U2NUVGNDAwNjkxN0Y1IC8qIDE4LWNoYXJh
Y3RlcnMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1NUE4MTgwMDIxODEwMjIxMDAw
NEEzOUEgLyogNDAweDQwMC1ncmVlbi5wbmcgaW4gQ29weSBSZXNvdXJjZXMgKi8sCkBAIC0xNDU4
LDYgKzE0NTgsNyBAQAogCQkJCTU3NjYzREVBMjM0RUE2NkQwMEU4NUUwOSAvKiB3ZWItYXV0aGVu
dGljYXRpb24tZ2V0LWFzc2VydGlvbi1uZmMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJ
CQk1Nzc0NTREMjIzNTlCQjAxMDA4RTFFRDcgLyogd2ViLWF1dGhlbnRpY2F0aW9uLWdldC1hc3Nl
cnRpb24tdTJmLW5vLWNyZWRlbnRpYWxzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJ
NTdDNjI0NTAyMzQ2QzIxRTAwMzgzRkU3IC8qIHdlYi1hdXRoZW50aWNhdGlvbi1nZXQtYXNzZXJ0
aW9uLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCisJCQkJNTc5ODMzN0UyMzYwMTlBNDAwOEU1
NTQ3IC8qIHdlYi1hdXRoZW50aWNhdGlvbi1tYWtlLWNyZWRlbnRpYWwtaGlkLmh0bWwgaW4gQ29w
eSBSZXNvdXJjZXMgKi8sCiAJCQkJMUMyQjgxODYxQzg5MjU5RDAwQTU1MjlGIC8qIHdlYmZvbnQu
aHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1MTcxNEVCNDFDRjhDNzhDMDA0NzIzQzQg
LyogV2ViUHJvY2Vzc0tpbGxJREJDbGVhbnVwLTEuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywK
IAkJCQk1MTcxNEVCNTFDRjhDNzhDMDA0NzIzQzQgLyogV2ViUHJvY2Vzc0tpbGxJREJDbGVhbnVw
LTIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKQEAgLTIxMzMsNiArMjEzNCw3IEBACiAJCTk5
ODRGQUNBMUNGRkFFRUUwMDhEMTk4QyAvKiBXS1dlYlZpZXdUZXh0SW5wdXQubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYlZpZXdUZXh0SW5wdXQubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5ODRGQUNEMUNGRkIwMzgwMDhEMTk4QyAvKiBl
ZGl0YWJsZS1ib2R5Lmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAiZWRpdGFibGUt
Ym9keS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTk5OTEwOEExRjM5M0M4
QjAwOEFENDU1IC8qIENvcHlpbmcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBDb3B5aW5nLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjAyRTBE
NTIzNUZBNDdEMDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFRleHRNYW5pcHVsYXRpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTlCMDc4NkEyMUM1ODgzMEYwMEQxNTlFMyAvKiBJbmplY3RlZEJ1bmRsZU1ha2VBbGxTaGFkb3dS
b290c09wZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0
ZWRCdW5kbGVNYWtlQWxsU2hhZG93Um9vdHNPcGVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOUIwNzg2QTQxQzU4ODVDMzAwRDE1OUUzIC8qIEluamVjdGVkQnVuZGxlTWFrZUFs
bFNoYWRvd1Jvb3RzT3Blbl9CdW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVNYWtlQWxsU2hhZG93Um9vdHNPcGVuX0J1bmRsZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMTA1NjQxMUY5MDQ1QzcwMEQ1NTgzRiAv
KiBDb3B5SFRNTC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvcHlIVE1MLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjk0NCw2ICsyOTQ2LDcgQEAKIAkJCQk1Nzc0QUE2NzIx
RkJCRjc4MDBBRjJBMUIgLyogVGVzdFNPQXV0aG9yaXphdGlvbi5tbSAqLywKIAkJCQlGNENENzRD
NzIwRkRCNDk2MDBERTM3OTQgLyogVGVzdFVSTFNjaGVtZUhhbmRsZXIuaCAqLywKIAkJCQlGNENE
NzRDODIwRkRCNDk2MDBERTM3OTQgLyogVGVzdFVSTFNjaGVtZUhhbmRsZXIubW0gKi8sCisJCQkJ
OUIwMkUwRDUyMzVGQTQ3RDAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRpb24ubW0gKi8sCiAJCQkJ
NUMxNkY4RkIyMzBDOTQyQjAwNzRDNEE4IC8qIFRleHRTaXplLm1tICovLAogCQkJCUMyMkZBMzJB
MjI4Rjg3MDgwMDlENzk4OCAvKiBUZXh0V2lkdGgubW0gKi8sCiAJCQkJNUM3M0E4MUEyMzIzMDU5
ODAwREVBODVBIC8qIFRMU0RlcHJlY2F0aW9uLm1tICovLApAQCAtNDgyOSw2ICs0ODMyLDcgQEAK
IAkJCQlGNDUwMzNGNTIwNkJFQzk1MDA5MzUxQ0UgLyogVGV4dEF1dG9zaXppbmdCb29zdC5tbSBp
biBTb3VyY2VzICovLAogCQkJCTkzRTYxOTNCMUY5MzFCM0EwMEFGMjQ1RSAvKiBUZXh0Q29kZWMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0UzNTI0RjkxQjE0NDFDNDAwMjhBN0M1IC8qIFRleHRG
aWVsZERpZEJlZ2luQW5kRW5kRWRpdGluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5QjAyRTBE
NjIzNUZBNDdEMDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbi5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTVDMTZGOEZDMjMwQzk0MzcwMDc0QzRBOCAvKiBUZXh0U2l6ZS5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUMyMkZBMzJCMjI4Rjg3MDgwMDlENzk4OCAvKiBUZXh0V2lkdGgubW0gaW4gU291cmNl
cyAqLywKIAkJCQk3Q0NFN0VERDFBNDExQTkyMDA0NDdDNEMgLyogVGltZVJhbmdlcy5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
VGV4dE1hbmlwdWxhdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW0JKG5vbmV4aXN0ZW50KQorKysgVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9ydCAiVGVzdC5o
IgorI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1By
aXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUuaD4K
KyNpbXBvcnQgPFdlYktpdC9fV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oPgorI2ltcG9ydCA8V2Vi
S2l0L19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+
CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK3N0YXRpYyBib29sIGRvbmUgPSBmYWxzZTsK
KworQGludGVyZmFjZSBUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgOiBOU09iamVjdCA8X1dLVGV4
dE1hbmlwdWxhdGlvbkRlbGVnYXRlPgorCistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3
ZWJWaWV3IGRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbTooX1dLVGV4dE1hbmlwdWxhdGlvbkl0
ZW0gKilpdGVtOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TQXJy
YXk8X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKj4gKml0ZW1zOworCitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgeworICAgIFJldGFpblB0cjxOU011dGFi
bGVBcnJheT4gX2l0ZW1zOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdAoreworICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworICAgIF9pdGVtcyA9
IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOworICAgIHJldHVybiBzZWxm
OworfQorCistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZEZpbmRUZXh0
TWFuaXB1bGF0aW9uSXRlbTooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVtCit7CisgICAg
W19pdGVtcyBhZGRPYmplY3Q6aXRlbV07Cit9CisKKy0gKE5TQXJyYXk8X1dLVGV4dE1hbmlwdWxh
dGlvbkl0ZW0gKj4gKilpdGVtcworeworICAgIHJldHVybiBfaXRlbXMuZ2V0KCk7Cit9CisKK0Bl
bmQKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitURVNUKFRleHRNYW5pcHVsYXRpb24s
IFN0YXJ0VGV4dE1hbmlwdWxhdGlvbkZpbmRTaW1wbGVQYXJhZ3JhcGhzKQoreworICAgIGF1dG8g
ZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0
XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBbd2ViVmlldyBf
c2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJW
aWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPiIKKyAgICAg
ICAgIjxodG1sPjxib2R5PmhlbGxvPGJyPndvcmxkPGRpdj5XZWJLaXQ8L2Rpdj48L2JvZHk+PC9o
dG1sPiJdOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9zdGFydFRleHRNYW5p
cHVsYXRpb25zV2l0aENvbXBsZXRpb25IYW5kbGVyOl57CisgICAgICAgIGRvbmUgPSB0cnVlOwor
ICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBhdXRv
ICppdGVtcyA9IFtkZWxlZ2F0ZSBpdGVtc107CisgICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAz
VUwpOworICAgIEVYUEVDVF9FUShpdGVtc1swXS50b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQ
RUNUX1NUUkVRKCJoZWxsbyIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcp
OworCisgICAgRVhQRUNUX0VRKGl0ZW1zWzFdLnRva2Vucy5jb3VudCwgMVVMKTsKKyAgICBFWFBF
Q1RfU1RSRVEoIndvcmxkIiwgaXRlbXNbMV0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7
CisKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMl0udG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVD
VF9TVFJFUSgiV2ViS2l0IiwgaXRlbXNbMl0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7
Cit9CisKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgU3RhcnRUZXh0TWFuaXB1bGF0aW9uRmluZE11
bHRpcGxlUGFyYWdyYXBoc0luU2luZ2xlVGV4dE5vZGUpCit7CisgICAgYXV0byBkZWxlZ2F0ZSA9
IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOworICAgIFt3ZWJWaWV3IF9zZXRUZXh0TWFu
aXB1bGF0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZpZXcgc3luY2hy
b25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPCFET0NUWVBFIGh0bWw+IgorICAgICAgICAiPGh0bWw+
PGJvZHk+PHByZT5oZWxsb1xud29ybGRcbldlYktpdDwvcHJlPjwvYm9keT48L2h0bWw+Il07CisK
KyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNX
aXRoQ29tcGxldGlvbkhhbmRsZXI6XnsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07Cisg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGF1dG8gKml0ZW1zID0g
W2RlbGVnYXRlIGl0ZW1zXTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDNVTCk7CisgICAg
RVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfU1RSRVEo
ImhlbGxvIiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisKKyAgICBF
WFBFQ1RfRVEoaXRlbXNbMV0udG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9TVFJFUSgi
d29ybGQiLCBpdGVtc1sxXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKworICAgIEVY
UEVDVF9FUShpdGVtc1syXS50b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX1NUUkVRKCJX
ZWJLaXQiLCBpdGVtc1syXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKK30KKworVEVT
VChUZXh0TWFuaXB1bGF0aW9uLCBTdGFydFRleHRNYW5pcHVsYXRpb25GaW5kUGFyYWdyYXBoc1dp
dGhNdWx0aWxlVG9rZW5zKQoreworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1h
bmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAw
LCA0MDAsIDQwMCldKTsKKyAgICBbd2ViVmlldyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRl
OmRlbGVnYXRlLmdldCgpXTsKKyAgICAKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhU
TUxTdHJpbmc6QCI8IURPQ1RZUEUgaHRtbD4iCisgICAgICAgICI8aHRtbD48Ym9keT5oZWxsbywg
IDxiPndvcmxkPC9iPjxicj48ZGl2PjxlbT4gPGI+V2ViPC9iPktpdDwvZW0+ICA8L2Rpdj48L2Jv
ZHk+PC9odG1sPiJdOworICAgIAorICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfc3Rh
cnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb21wbGV0aW9uSGFuZGxlcjpeeworICAgICAgICBkb25l
ID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwor
ICAgIAorICAgIGF1dG8gKml0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsKKyAgICBFWFBFQ1RfRVEo
aXRlbXMuY291bnQsIDJVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwg
MlVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoImhlbGxvLCAiLCBpdGVtc1swXS50b2tlbnNbMF0uY29u
dGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoIndvcmxkIiwgaXRlbXNbMF0udG9r
ZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgCisgICAgRVhQRUNUX0VRKGl0ZW1zWzFd
LnRva2Vucy5jb3VudCwgMlVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoIldlYiIsIGl0ZW1zWzFdLnRv
a2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgiS2l0IiwgaXRl
bXNbMV0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7Cit9CisKK3N0cnVjdCBUb2tlbiB7
CisgICAgTlNTdHJpbmcgKmlkZW50aWZpZXI7CisgICAgTlNTdHJpbmcgKmNvbnRlbnQ7Cit9Owor
Cit0ZW1wbGF0ZTxzaXplX3QgbGVuZ3RoPgorc3RhdGljIFJldGFpblB0cjxfV0tUZXh0TWFuaXB1
bGF0aW9uSXRlbT4gY3JlYXRlSXRlbShOU1N0cmluZyAqaXRlbUlkZW50aWZpZXIsIGNvbnN0IFRv
a2VuICgmdG9rZW5zKVtsZW5ndGhdKQoreworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4g
d2tUb2tlbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIFJldGFpblB0cjxf
V0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4+IHRva2VuID0gYWRvcHROUyhbW19XS1RleHRNYW5pcHVs
YXRpb25Ub2tlbiBhbGxvY10gaW5pdF0pOworICAgICAgICBbdG9rZW4gc2V0SWRlbnRpZmllcjog
dG9rZW5zW2ldLmlkZW50aWZpZXJdOworICAgICAgICBbdG9rZW4gc2V0Q29udGVudDogdG9rZW5z
W2ldLmNvbnRlbnRdOworICAgICAgICBbd2tUb2tlbnMgYWRkT2JqZWN0OnRva2VuLmdldCgpXTsK
KyAgICB9CisgICAgcmV0dXJuIGFkb3B0TlMoW1tfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSBhbGxv
Y10gaW5pdFdpdGhJZGVudGlmaWVyOml0ZW1JZGVudGlmaWVyIHRva2Vuczp3a1Rva2Vucy5nZXQo
KV0pOworfQorCitURVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlv
blNob3VsZFJlcGxhY2VTaW1wbGVQYXJhZ3JhcGhDb250ZW50KQoreworICAgIGF1dG8gZGVsZWdh
dGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7Cisg
ICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBbd2ViVmlldyBfc2V0VGV4
dE1hbmlwdWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3IHN5
bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPiIKKyAgICAgICAgIjxo
dG1sPjxib2R5PjxwPmhlbGxsbywgd29vb3JsZDwvcD48cD4gaGV5LCA8Yj4gS2l0czwvYj4gaXMg
PGVtPmN1dXV0ZTwvZW0+PC9wPjwvYm9keT48L2h0bWw+Il07CisKKyAgICBkb25lID0gZmFsc2U7
CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29tcGxldGlvbkhhbmRs
ZXI6XnsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGF1dG8gKml0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsK
KyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDJVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBd
LnRva2Vucy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoImhlbGxsbywgd29vb3JsZCIs
IGl0ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworCisgICAgRVhQRUNUX0VR
KGl0ZW1zWzFdLnRva2Vucy5jb3VudCwgNFVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoImhleSwgIiwg
aXRlbXNbMV0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVR
KCJLaXRzIiwgaXRlbXNbMV0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQ
RUNUX1NUUkVRKCIgaXMgIiwgaXRlbXNbMV0udG9rZW5zWzJdLmNvbnRlbnQuVVRGOFN0cmluZyk7
CisgICAgRVhQRUNUX1NUUkVRKCJjdXV1dGUiLCBpdGVtc1sxXS50b2tlbnNbM10uY29udGVudC5V
VEY4U3RyaW5nKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfY29tcGxldGVU
ZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWNyZWF0ZUl0ZW0oaXRl
bXNbMV0uaWRlbnRpZmllciwgeworICAgICAgICB7IGl0ZW1zWzFdLnRva2Vuc1swXS5pZGVudGlm
aWVyLCBAIkhlbGxvLCAiIH0sCisgICAgICAgIHsgaXRlbXNbMV0udG9rZW5zWzFdLmlkZW50aWZp
ZXIsIEAia2l0dGVucyIgfSwKKyAgICAgICAgeyBpdGVtc1sxXS50b2tlbnNbMl0uaWRlbnRpZmll
ciwgQCIgYXJlICIgfSwKKyAgICAgICAgeyBpdGVtc1sxXS50b2tlbnNbM10uaWRlbnRpZmllciwg
QCJjdXRlIiB9LAorICAgIH0pLmdldCgpIGNvbXBsZXRpb246XihCT09MIHN1Y2Nlc3MpIHsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoc3VjY2Vzcyk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1d
OworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisgICAgRVhQRUNUX1dLX1NU
UkVRKCI8cD5oZWxsbG8sIHdvb29ybGQ8L3A+PHA+SGVsbG8sIDxiPmtpdHRlbnM8L2I+IGFyZSA8
ZW0+Y3V0ZTwvZW0+PC9wPiIsCisgICAgICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmlubmVySFRNTCJdKTsKKworICAgIGRvbmUgPSBmYWxz
ZTsKKyAgICBbd2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1
bGF0aW9uSXRlbSAqKWNyZWF0ZUl0ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwgeworICAgICAgICB7
IGl0ZW1zWzBdLnRva2Vuc1swXS5pZGVudGlmaWVyLCBAIkhlbGxvLCB3b3JsZC4iIH0sCisgICAg
fSkuZ2V0KCkgY29tcGxldGlvbjpeKEJPT0wgc3VjY2VzcykgeworICAgICAgICBFWFBFQ1RfVFJV
RShzdWNjZXNzKTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIjxwPkhlbGxvLCB3
b3JsZC48L3A+PHA+SGVsbG8sIDxiPmtpdHRlbnM8L2I+IGFyZSA8ZW0+Y3V0ZTwvZW0+PC9wPiIs
CisgICAgICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVu
dC5ib2R5LmlubmVySFRNTCJdKTsKK30KKworVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0
ZVRleHRNYW5pcHVsYXRpb25TaG91bGRGYWlsV2hlbkNvbnRlbnRJc0NoYW5nZWQpCit7CisgICAg
YXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxsb2Nd
IGluaXRdKTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOworICAgIFt3ZWJW
aWV3IF9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAg
W3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPCFET0NUWVBFIGh0bWw+Igor
ICAgICAgICAiPGh0bWw+PGJvZHk+PHA+IHdoYXQgPGVtPnRpbWU8L2VtPiBhcmUgdGhleSBub3c/
PC9wPjwvYm9keT48L2h0bWw+Il07CisKKyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcg
X3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29tcGxldGlvbkhhbmRsZXI6XnsKKyAgICAgICAg
ZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25l
KTsKKworICAgIGF1dG8gKml0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsKKyAgICBFWFBFQ1RfRVEo
aXRlbXMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwg
M1VMKTsKKyAgICBFWFBFQ1RfU1RSRVEoIndoYXQgIiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRl
bnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCJ0aW1lIiwgaXRlbXNbMF0udG9rZW5z
WzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCIgYXJlIHRoZXkgbm93
PyIsIGl0ZW1zWzBdLnRva2Vuc1syXS5jb250ZW50LlVURjhTdHJpbmcpOworCisgICAgW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Io
J2VtJykubmV4dFNpYmxpbmcuZGF0YSA9ICcgaXMgaXQgbm93IGluIExvbmRvbj8nIl07CisKKyAg
ICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbjoo
X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKiljcmVhdGVJdGVtKGl0ZW1zWzBdLmlkZW50aWZpZXIs
IHsKKyAgICAgICAgeyBpdGVtc1swXS50b2tlbnNbMF0uaWRlbnRpZmllciwgQCJXaGF0ICIgfSwK
KyAgICAgICAgeyBpdGVtc1swXS50b2tlbnNbMV0uaWRlbnRpZmllciwgQCJ0aW1lIiB9LAorICAg
ICAgICB7IGl0ZW1zWzBdLnRva2Vuc1syXS5pZGVudGlmaWVyLCBAIiBpcyBpdCBub3c/IiB9LAor
ICAgIH0pLmdldCgpIGNvbXBsZXRpb246XihCT09MIHN1Y2Nlc3MpIHsKKyAgICAgICAgRVhQRUNU
X0ZBTFNFKHN1Y2Nlc3MpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworICAgIEVYUEVDVF9XS19TVFJFUSgiPHA+IHdo
YXQgPGVtPnRpbWU8L2VtPiBpcyBpdCBub3cgaW4gTG9uZG9uPzwvcD4iLAorICAgICAgICBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhU
TUwiXSk7Cit9CisKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0
aW9uU2hvdWxkRmFpbFdoZW5Eb2N1bWVudEhhc0JlZW5OYXZpZ2F0ZWRBd2F5KQoreworICAgIGF1
dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBp
bml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBbd2ViVmll
dyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAInNpbXBsZSJdOworICAgIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmlubmVy
SFRNTCA9ICc8cD5oZXksIDxlbT5lYXJ0aDwvZW0+PC9wPiciXTsKKworICAgIGRvbmUgPSBmYWxz
ZTsKKyAgICBbd2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb21wbGV0aW9uSGFu
ZGxlcjpeeworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgYXV0byAqaXRlbXMgPSBbZGVsZWdhdGUgaXRlbXNd
OworICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNb
MF0udG9rZW5zLmNvdW50LCAyVUwpOworICAgIEVYUEVDVF9TVFJFUSgiaGV5LCAiLCBpdGVtc1sw
XS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoImVhcnRo
IiwgaXRlbXNbMF0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisKKyAgICBbd2ViVmll
dyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJjb3B5LWh0bWwiXTsKKyAgICBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhU
TUwgPSAnPHA+aGV5LCA8ZW0+ZWFydGg8L2VtPjwvcD4nIl07CisKKyAgICBkb25lID0gZmFsc2U7
CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29tcGxldGlvbkhhbmRs
ZXI6XnsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfY29t
cGxldGVUZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWNyZWF0ZUl0
ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwgeworICAgICAgICB7IGl0ZW1zWzBdLnRva2Vuc1swXS5p
ZGVudGlmaWVyLCBAImhlbGxvLCAiIH0sCisgICAgICAgIHsgaXRlbXNbMF0udG9rZW5zWzFdLmlk
ZW50aWZpZXIsIEAid29ybGQiIH0sCisgICAgfSkuZ2V0KCkgY29tcGxldGlvbjpeKEJPT0wgc3Vj
Y2VzcykgeworICAgICAgICBFWFBFQ1RfRkFMU0Uoc3VjY2Vzcyk7CisgICAgICAgIGRvbmUgPSB0
cnVlOworICAgIH1dOworCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorCkluZGV4OiBXZWJLaXQueGN3b3Jrc3Bh
Y2UveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9BbGwgU291cmNlLnhjc2NoZW1lCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC54Y3dvcmtzcGFjZS94Y3NoYXJlZGRhdGEveGNzY2hlbWVzL0FsbCBTb3VyY2Uu
eGNzY2hlbWUJKHJldmlzaW9uIDI1MTUyOCkKKysrIFdlYktpdC54Y3dvcmtzcGFjZS94Y3NoYXJl
ZGRhdGEveGNzY2hlbWVzL0FsbCBTb3VyY2UueGNzY2hlbWUJKHdvcmtpbmcgY29weSkKQEAgLTE0
NCwxMCArMTQ0LDEwIEBACiAgICAgICA8TWFjcm9FeHBhbnNpb24+CiAgICAgICAgICA8QnVpbGRh
YmxlUmVmZXJlbmNlCiAgICAgICAgICAgICBCdWlsZGFibGVJZGVudGlmaWVyID0gInByaW1hcnki
Ci0gICAgICAgICAgICBCbHVlcHJpbnRJZGVudGlmaWVyID0gIjhEMTEwNzI2MDQ4NkNFQjgwMEU0
NzA5MCIKLSAgICAgICAgICAgIEJ1aWxkYWJsZU5hbWUgPSAiTWluaUJyb3dzZXIuYXBwIgotICAg
ICAgICAgICAgQmx1ZXByaW50TmFtZSA9ICJNaW5pQnJvd3NlciIKLSAgICAgICAgICAgIFJlZmVy
ZW5jZWRDb250YWluZXIgPSAiY29udGFpbmVyOlRvb2xzL01pbmlCcm93c2VyL01pbmlCcm93c2Vy
Lnhjb2RlcHJvaiI+CisgICAgICAgICAgICBCbHVlcHJpbnRJZGVudGlmaWVyID0gIjhERDc2Rjk2
MDQ4NkFBNzYwMEQ5NkI1RSIKKyAgICAgICAgICAgIEJ1aWxkYWJsZU5hbWUgPSAiVGVzdFdlYktp
dEFQSSIKKyAgICAgICAgICAgIEJsdWVwcmludE5hbWUgPSAiVGVzdFdlYktpdEFQSSIKKyAgICAg
ICAgICAgIFJlZmVyZW5jZWRDb250YWluZXIgPSAiY29udGFpbmVyOlRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2oiPgogICAgICAgICAgPC9CdWlsZGFibGVSZWZlcmVu
Y2U+CiAgICAgICA8L01hY3JvRXhwYW5zaW9uPgogICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPgpA
QCAtMTY3LDEyICsxNjcsMTggQEAKICAgICAgICAgIHJ1bm5hYmxlRGVidWdnaW5nTW9kZSA9ICIw
Ij4KICAgICAgICAgIDxCdWlsZGFibGVSZWZlcmVuY2UKICAgICAgICAgICAgIEJ1aWxkYWJsZUlk
ZW50aWZpZXIgPSAicHJpbWFyeSIKLSAgICAgICAgICAgIEJsdWVwcmludElkZW50aWZpZXIgPSAi
OEQxMTA3MjYwNDg2Q0VCODAwRTQ3MDkwIgotICAgICAgICAgICAgQnVpbGRhYmxlTmFtZSA9ICJN
aW5pQnJvd3Nlci5hcHAiCi0gICAgICAgICAgICBCbHVlcHJpbnROYW1lID0gIk1pbmlCcm93c2Vy
IgotICAgICAgICAgICAgUmVmZXJlbmNlZENvbnRhaW5lciA9ICJjb250YWluZXI6VG9vbHMvTWlu
aUJyb3dzZXIvTWluaUJyb3dzZXIueGNvZGVwcm9qIj4KKyAgICAgICAgICAgIEJsdWVwcmludElk
ZW50aWZpZXIgPSAiOERENzZGOTYwNDg2QUE3NjAwRDk2QjVFIgorICAgICAgICAgICAgQnVpbGRh
YmxlTmFtZSA9ICJUZXN0V2ViS2l0QVBJIgorICAgICAgICAgICAgQmx1ZXByaW50TmFtZSA9ICJU
ZXN0V2ViS2l0QVBJIgorICAgICAgICAgICAgUmVmZXJlbmNlZENvbnRhaW5lciA9ICJjb250YWlu
ZXI6VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvaiI+CiAgICAgICAg
ICA8L0J1aWxkYWJsZVJlZmVyZW5jZT4KICAgICAgIDwvQnVpbGRhYmxlUHJvZHVjdFJ1bm5hYmxl
PgorICAgICAgPENvbW1hbmRMaW5lQXJndW1lbnRzPgorICAgICAgICAgPENvbW1hbmRMaW5lQXJn
dW1lbnQKKyAgICAgICAgICAgIGFyZ3VtZW50ID0gIi0tZ3Rlc3RfZmlsdGVyPVRleHRNYW5pcHVs
YXRpb24uQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uU2hvdWxkRmFpbFdoZW5Eb2N1bWVudEhhc0Jl
ZW5OYXZpZ2F0ZWRBd2F5IgorICAgICAgICAgICAgaXNFbmFibGVkID0gIllFUyI+CisgICAgICAg
ICA8L0NvbW1hbmRMaW5lQXJndW1lbnQ+CisgICAgICA8L0NvbW1hbmRMaW5lQXJndW1lbnRzPgog
ICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPgogICAgICAgPC9BZGRpdGlvbmFsT3B0aW9ucz4KICAg
IDwvTGF1bmNoQWN0aW9uPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381774</attachid>
            <date>2019-10-23 21:26:53 -0700</date>
            <delta_ts>2019-10-24 16:06:58 -0700</delta_ts>
            <desc>iOS build fix</desc>
            <filename>bug-203286-20191023212653.patch</filename>
            <type>text/plain</type>
            <size>74077</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MTUyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDE5LTEwLTIzICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIG1lY2hhbmlzbSB0byBm
aW5kIGFuZCBtYW5pcHVsYXRlIHRleHQgYnkgcGFyYWdyYXBocworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMjg2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIFRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyIHdoaWNoIGFsbG93cyBXZWJLaXQgY2xpZW50cyB0byBmaW5k
IGFuZCByZXBsYWNlCisgICAgICAgIHRleHQgY29udGVudCBpbiBhIGdpdmVuIGRvY3VtZW50IGJ5
IHBhcmFncmFwaCBib3VuZGFyeS4gRm9yIG5vdywgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIg
ZmluZHMKKyAgICAgICAgYWxsIHBhcmFncmFwaHMgaW4gdGhlIGRvY3VtZW50IGFuZCBpbnZva2Vz
IHRoZSBjYWxsYmFjayBmb3IgZWFjaCBwYXJhZ3JhcGguIEluIHRoZSBmdXR1cmUsIHRoaXMKKyAg
ICAgICAgY29udHJvbGxlciB3aWxsIHN1cHBvcnQgZGV0ZWN0aW5nIHJlbW92YWwgYW5kIGluc2Vy
dGlvbiBvZiBuZXcgY29udGVudCB0byB0aGUgZG9jdW1lbnQuCisKKyAgICAgICAgVGVzdHM6IFRl
eHRNYW5pcHVsYXRpb24uU3RhcnRUZXh0TWFuaXB1bGF0aW9uRmluZFNpbXBsZVBhcmFncmFwaHMK
KyAgICAgICAgICAgICAgIFRleHRNYW5pcHVsYXRpb24uU3RhcnRUZXh0TWFuaXB1bGF0aW9uRmlu
ZFBhcmFncmFwaHNXaXRoTXVsdGlsZVRva2VucworICAgICAgICAgICAgICAgVGV4dE1hbmlwdWxh
dGlvbi5Db21wbGV0ZVRleHRNYW5pcHVsYXRpb25TaG91bGRSZXBsYWNlU2ltcGxlUGFyYWdyYXBo
Q29udGVudAorICAgICAgICAgICAgICAgVGV4dE1hbmlwdWxhdGlvbi5Db21wbGV0ZVRleHRNYW5p
cHVsYXRpb25TaG91bGRGYWlsV2hlbkNvbnRlbnRJc0NoYW5nZWQKKyAgICAgICAgICAgICAgIFRl
eHRNYW5pcHVsYXRpb24uQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uU2hvdWxkRmFpbFdoZW5Eb2N1
bWVudEhhc0JlZW5OYXZpZ2F0ZWRBd2F5CisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6IENsZWFyIFRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyLiBPdGhlcndpc2UgbV9pdGVtcworICAgICAgICBpbiBUZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlciBtYXkga2VlcCBhIGJ1bmNoIG9mIG5vZGVzIGFsaXZlIGFuZCBub3QgbGV0IHRo
aXMgZG9jdW1lbnQgZGVzdHJ1Y3RlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0ZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlcik6IEFkZGVkLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5o
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnRleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
SWZFeGlzdHMpOiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIpOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpzdGFydE9ic2VydmluZ1BhcmFncmFw
aHMpOiBGaW5kcyBhbGwgcGFyZ3JhcGhzIGFuZCBpbnZva2UKKyAgICAgICAgdGhlIGNhbGxiYWNr
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OmFkZEl0ZW0p
OiBBZGRlZC4gQSBoZWxwZXIgZm9yIHN0YXJ0T2JzZXJ2aW5nUGFyYWdyYXBocy4KKyAgICAgICAg
KFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpjb21wbGV0ZU1hbmlwdWxhdGlv
bik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6
OnJlcGxhY2UpOiBBZGRlZC4gQSBoZWxwZXIgZm9yIGNvbXBsZXRlTWFuaXB1bGF0aW9uLgorICAg
ICAgICAqIGVkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9r
ZW46OmVuY29kZSBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuOjpkZWNvZGUpOiBBZGRlZC4KKwogMjAx
OS0xMC0yMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE5vdGlm
aWNhdGlvbiBzaG91bGQgbm90IHByZXZlbnQgZW50ZXJpbmcgdGhlIGJhY2svZm9yd2FyZCBjYWNo
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCShyZXZpc2lvbiAyNTE1MjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC01MDMsNiArNTAzLDcgQEAgc2V0
KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIGVkaXRpbmcvVGV4dEdyYW51
bGFyaXR5LmgKICAgICBlZGl0aW5nL1RleHRJdGVyYXRvci5oCiAgICAgZWRpdGluZy9UZXh0SXRl
cmF0b3JCZWhhdmlvci5oCisgICAgZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5o
CiAgICAgZWRpdGluZy9VbmRvU3RlcC5oCiAgICAgZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAog
ICAgIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNp
b24gMjUxNTI4KQorKysgU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEwNjEsNiArMTA2MSw3IEBAIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVt
ZW50Q28KIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAogZWRpdGluZy9UZXh0SW5zZXJ0
aW9uQmFzZUNvbW1hbmQuY3BwCiBlZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKK2VkaXRpbmcvVGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCiBl
ZGl0aW5nL1VubGlua0NvbW1hbmQuY3BwCiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDI1MTUyOCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjg1Miw2ICsyODUyLDcgQEAKIAkJ
OTk2RTU5REYxREYwMTI4RDAwNjYxMkI5IC8qIE5hdmlnYXRvcldlYkRyaXZlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTk2RTU5REMxREYwMEQ5MDAw
NjYxMkI5IC8qIE5hdmlnYXRvcldlYkRyaXZlci5oICovOyB9OwogCQk5QTUyOEU4NDE3RDdGNTJG
MDBBQTk1MTggLyogRmxvYXRpbmdPYmplY3RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5QTUyOEU4MjE3RDdGNTJGMDBBQTk1MTggLyogRmxvYXRpbmdP
YmplY3RzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJOUFCMUYzODAxOEUyNDg5QTAwNTM0NzQzIC8qIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlBQjFGMzdF
MThFMjQ4OUEwMDUzNDc0MyAvKiBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOUIwMkUwQzgyMzVFQUQy
QTAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAyRTBDMzIzNUU3NkFBMDA0MDQ0QjIg
LyogVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5QjI0REU4RTE1MTk0Qjk1MDBDNTlDMjcgLyogSFRN
TEJESUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDlCMjRERThDMTUxOTRCOTUwMEM1OUMyNyAvKiBIVE1MQkRJRWxlbWVudC5oICovOyB9Owog
CQk5QjI3RkM2MDIzNEQ5QURCMDAzOTRBNDYgLyogV2luZG93RXZlbnRMb29wLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjI3RkM1RTIzNEQ5QURBMDAz
OTRBNDYgLyogV2luZG93RXZlbnRMb29wLmggKi87IH07CiAJCTlCMkQ4QTc5MTQ5OTdDQ0YwMEVD
RUYzRSAvKiBVbmRvU3RlcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUIyRDhBNzgxNDk5N0NDRjAwRUNFRjNFIC8qIFVuZG9TdGVwLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExMDczLDYgKzExMDc0
LDggQEAKIAkJOUFDNkYwMjUyMTE0OEY1NDAwQ0JEQTA2IC8qIE1lZGlhRW5naW5lQ29uZmlndXJh
dGlvbkZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTWVkaWFFbmdp
bmVDb25maWd1cmF0aW9uRmFjdG9yeS5oOyBwYXRoID0gbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFF
bmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5QUM2RjAyRDIxMTQ4RjlGMDBDQkRBMDYgLyogTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFj
dG9yeU1vY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFF
bmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeU1vY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5QUM2RjAyRjIxMTQ4RkEyMDBDQkRBMDYgLyogTWVkaWFFbmdpbmVDb25maWd1cmF0
aW9uRmFjdG9yeU1vY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFF
bmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeU1vY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOUIwMkUwQzMyMzVFNzZBQTAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCMDJFMEM0MjM1RTc2QUEwMDQwNDRCMiAvKiBUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMDNE
ODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFkYWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlu
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSZWFkYWJsZUJ5dGVTdHJlYW1J
bnRlcm5hbHNCdWlsdGlucy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9SZWFkYWJs
ZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVD
VFNfRElSOyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0QzkgLyogU3RyZWFtSW50ZXJuYWxz
QnVpbHRpbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3RyZWFtSW50ZXJu
YWxzQnVpbHRpbnMuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvU3RyZWFtSW50ZXJu
YWxzQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJOUIw
M0Q4MDYxQkIzMTEwRDAwQjc2NEQ4IC8qIFJlYWRhYmxlU3RyZWFtQnVpbHRpbnMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUmVhZGFibGVTdHJlYW1CdWlsdGlucy5oOyBwYXRo
ID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9SZWFkYWJsZVN0cmVhbUJ1aWx0aW5zLmg7IHNvdXJj
ZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC0yMTQzNSw2ICsyMTQzOCw4IEBACiAJ
CQkJOTMzMDlEQ0MwOTlFNjQ5MTAwNTZFNTgxIC8qIFRleHRJdGVyYXRvci5jcHAgKi8sCiAJCQkJ
OTMzMDlEQ0QwOTlFNjQ5MTAwNTZFNTgxIC8qIFRleHRJdGVyYXRvci5oICovLAogCQkJCTkzOTIx
NDY4MThBNkQ3OTEwMDBFRTY4OCAvKiBUZXh0SXRlcmF0b3JCZWhhdmlvci5oICovLAorCQkJCTlC
MDJFMEM0MjM1RTc2QUEwMDQwNDRCMiAvKiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAg
Ki8sCisJCQkJOUIwMkUwQzMyMzVFNzZBQTAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyLmggKi8sCiAJCQkJOTMzMDlEQ0EwOTlFNjQ5MTAwNTZFNTgxIC8qIFR5cGluZ0NvbW1h
bmQuY3BwICovLAogCQkJCTkzMzA5RENCMDk5RTY0OTEwMDU2RTU4MSAvKiBUeXBpbmdDb21tYW5k
LmggKi8sCiAJCQkJOUIyRDhBNzgxNDk5N0NDRjAwRUNFRjNFIC8qIFVuZG9TdGVwLmggKi8sCkBA
IC0zMjM0Niw2ICszMjM1MSw3IEBACiAJCQkJQ0VDQURGQ0UxNTM3NzkxRDAwRTM3MDY4IC8qIFRl
eHRJbnNlcnRpb25CYXNlQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMUMwOTlF
NjQ5MjAwNTZFNTgxIC8qIFRleHRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5MjE0
NjkxOEE2RDc5MTAwMEVFNjg4IC8qIFRleHRJdGVyYXRvckJlaGF2aW9yLmggaW4gSGVhZGVycyAq
LywKKwkJCQk5QjAyRTBDODIzNUVBRDJBMDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUY0NUU5MEU2ODc3NjcwMDFDMTI4NyAvKiBU
ZXh0TWV0cmljcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTREOTg4QjQxN0JGRDFGNjAwODRGQjg4
IC8qIFRleHROb2RlVHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzE4REE1OTE4MUFG
NkE1MDBDNEVGMjIgLyogVGV4dFBhaW50ZXIuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyNTE1MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsNiArMjEzLDcgQEAKICNpbmNsdWRl
ICJTdWJyZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIlRleHRBdXRvU2l6aW5nLmgiCiAjaW5j
bHVkZSAiVGV4dEV2ZW50LmgiCisjaW5jbHVkZSAiVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJUZXh0Tm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlRvdWNoQWN0aW9u
LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtU291cmNlLmgiCkBAIC0yNDc5LDYgKzI0ODAsOCBAQCB2
b2lkIERvY3VtZW50OjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKQogCiAgICAgbV91bmRvTWFuYWdl
ci0+cmVtb3ZlQWxsSXRlbXMoKTsKIAorICAgIG1fdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIg
PSBudWxscHRyOyAvLyBGcmVlIG5vZGVzIGtlcHQgYWxpdmUgYnkgVGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXIuCisKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkKICAgICBpZiAodGhpcyAhPSAm
dG9wRG9jdW1lbnQoKSkgewogICAgICAgICAvLyBMZXQgdGhlIGF4IGNhY2hlIGtub3cgdGhhdCB0
aGlzIHN1YmZyYW1lIGdvZXMgb3V0IG9mIHNjb3BlLgpAQCAtODM1MCw0ICs4MzUzLDExIEBAIHZv
aWQgRG9jdW1lbnQ6OnNldFBpY3R1cmVJblBpY3R1cmVFbGVtZW4KIH0KICNlbmRpZgogCitUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlciYgRG9jdW1lbnQ6OnRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyKCkKK3sKKyAgICBpZiAoIW1fdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIpCisgICAgICAg
IG1fdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgPSBtYWtlVW5pcXVlPFRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyPigqdGhpcyk7CisgICAgcmV0dXJuICptX3RleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaAkocmV2aXNpb24gMjUxNTI4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE5Niw2ICsxOTYsNyBAQCBjbGFzcyBTdHlsZVNoZWV0OwogY2xh
c3MgU3R5bGVTaGVldENvbnRlbnRzOwogY2xhc3MgU3R5bGVTaGVldExpc3Q7CiBjbGFzcyBUZXh0
OworY2xhc3MgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBUZXh0UmVzb3VyY2VE
ZWNvZGVyOwogY2xhc3MgVHJlZVdhbGtlcjsKIGNsYXNzIFVuZG9NYW5hZ2VyOwpAQCAtMTU1Nyw2
ICsxNTU4LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UGljdHVyZUluUGljdHVyZUVsZW1lbnQo
SFRNTFZpZGVvRWxlbWVudCopOwogI2VuZGlmCiAKKyAgICBXRUJDT1JFX0VYUE9SVCBUZXh0TWFu
aXB1bGF0aW9uQ29udHJvbGxlciYgdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIoKTsKKyAgICBU
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlciogdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXJJZkV4
aXN0cygpIHsgcmV0dXJuIG1fdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuZ2V0KCk7IH0KKwog
cHJvdGVjdGVkOgogICAgIGVudW0gQ29uc3RydWN0aW9uRmxhZ3MgeyBTeW50aGVzaXplZCA9IDEs
IE5vblJlbmRlcmVkUGxhY2Vob2xkZXIgPSAxIDw8IDEgfTsKICAgICBEb2N1bWVudChGcmFtZSos
IGNvbnN0IFVSTCYsIHVuc2lnbmVkID0gRGVmYXVsdERvY3VtZW50Q2xhc3MsIHVuc2lnbmVkIGNv
bnN0cnVjdGlvbkZsYWdzID0gMCk7CkBAIC0yMDg2LDYgKzIwOTAsOCBAQCBwcml2YXRlOgogICAg
IFdlYWtQdHI8SFRNTFZpZGVvRWxlbWVudD4gbV9waWN0dXJlSW5QaWN0dXJlRWxlbWVudDsKICNl
bmRpZgogCisgICAgc3RkOjp1bmlxdWVfcHRyPFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyPiBt
X3RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOworCiAgICAgSGFzaE1hcDxFbGVtZW50KiwgRWxl
bWVudElkZW50aWZpZXI+IG1faWRlbnRpZmllZEVsZW1lbnRzTWFwOwogfTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxl
ci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkVkaXRpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRE
aXNhbGxvd2VkU2NvcGUuaCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJW
aXNpYmxlVW5pdHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitUZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlcjo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIoRG9jdW1lbnQmIGRvY3VtZW50
KQorICAgIDogbV9kb2N1bWVudChtYWtlV2Vha1B0cihkb2N1bWVudCkpCit7Cit9CisKK3ZvaWQg
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnN0YXJ0T2JzZXJ2aW5nUGFyYWdyYXBocyhNYW5p
cHVsYXRpb25JdGVtQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBhdXRvIGRvY3VtZW50ID0g
bWFrZVJlZlB0cihtX2RvY3VtZW50LmdldCgpKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7CisKKyAgICBW
aXNpYmxlUG9zaXRpb24gc3RhcnQgPSBmaXJzdFBvc2l0aW9uSW5Ob2RlKG1fZG9jdW1lbnQuZ2V0
KCkpOworICAgIFZpc2libGVQb3NpdGlvbiBlbmQgPSBsYXN0UG9zaXRpb25Jbk5vZGUobV9kb2N1
bWVudC5nZXQoKSk7CisgICAgVGV4dEl0ZXJhdG9yIGl0ZXJhdG9yIHsgc3RhcnQuZGVlcEVxdWl2
YWxlbnQoKSwgZW5kLmRlZXBFcXVpdmFsZW50KCkgfTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAg
ICAgICByZXR1cm47IC8vIFZpc2libGVQb3NpdGlvbiBvciBUZXh0SXRlcmF0b3IncyBjb25zdHJ1
Y3RvciBtYXkgaGF2ZSB1cGRhdGVkIHRoZSBsYXlvdXQgYW5kIGV4ZWN1dGVkIGFyYml0cmFyeSBz
Y3JpcHRzLgorCisgICAgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiB0b2tlbnNJbkN1cnJlbnRQ
YXJhZ3JhcGg7CisgICAgUG9zaXRpb24gc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGggPSBzdGFydC5k
ZWVwRXF1aXZhbGVudCgpOworICAgIHdoaWxlICghaXRlcmF0b3IuYXRFbmQoKSkgeworICAgICAg
ICBTdHJpbmdWaWV3IGN1cnJlbnRUZXh0ID0gaXRlcmF0b3IudGV4dCgpOworCisgICAgICAgIGlm
IChzdGFydE9mQ3VycmVudFBhcmFncmFwaC5pc051bGwoKSkKKyAgICAgICAgICAgIHN0YXJ0T2ZD
dXJyZW50UGFyYWdyYXBoID0gaXRlcmF0b3IucmFuZ2UoKS0+c3RhcnRQb3NpdGlvbigpOworCisg
ICAgICAgIHNpemVfdCBlbmRPZkxhc3ROZXdMaW5lID0gMDsKKyAgICAgICAgc2l6ZV90IG9mZnNl
dE9mTmV4dE5ld0xpbmUgPSAwOworICAgICAgICB3aGlsZSAoKG9mZnNldE9mTmV4dE5ld0xpbmUg
PSBjdXJyZW50VGV4dC5maW5kKCdcbicsIGVuZE9mTGFzdE5ld0xpbmUpKSAhPSBub3RGb3VuZCkg
eworICAgICAgICAgICAgaWYgKGVuZE9mTGFzdE5ld0xpbmUgPCBvZmZzZXRPZk5leHROZXdMaW5l
KSB7CisgICAgICAgICAgICAgICAgdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmFwcGVuZChNYW5p
cHVsYXRpb25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksCisgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRUZXh0LnN1YnN0cmluZyhlbmRPZkxhc3ROZXdMaW5lLCBvZmZzZXRP
Zk5leHROZXdMaW5lIC0gZW5kT2ZMYXN0TmV3TGluZSkudG9TdHJpbmcoKSB9KTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgYXV0byBsYXN0UmFuZ2UgPSBpdGVyYXRvci5yYW5nZSgpOwor
ICAgICAgICAgICAgaWYgKG9mZnNldE9mTmV4dE5ld0xpbmUgPCBjdXJyZW50VGV4dC5sZW5ndGgo
KSkgeworICAgICAgICAgICAgICAgIGxhc3RSYW5nZS0+c2V0U3RhcnQoZmlyc3RQb3NpdGlvbklu
T3JCZWZvcmVOb2RlKGl0ZXJhdG9yLm5vZGUoKSkpOyAvLyBNb3ZlIHRoZSBzdGFydCB0byB0aGUg
YmVnaW5uaW5nIG9mIHRoZSBjdXJyZW50IG5vZGUuCisgICAgICAgICAgICAgICAgVGV4dEl0ZXJh
dG9yOjpzdWJyYW5nZShsYXN0UmFuZ2UsIDAsIG9mZnNldE9mTmV4dE5ld0xpbmUpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgUG9zaXRpb24gZW5kT2ZDdXJyZW50UGFyYWdyYXBoID0gbGFz
dFJhbmdlLT5lbmRQb3NpdGlvbigpOworCisgICAgICAgICAgICBpZiAoIXRva2Vuc0luQ3VycmVu
dFBhcmFncmFwaC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgYWRkSXRlbShzdGFydE9mQ3Vy
cmVudFBhcmFncmFwaCwgZW5kT2ZDdXJyZW50UGFyYWdyYXBoLCBXVEZNb3ZlKHRva2Vuc0luQ3Vy
cmVudFBhcmFncmFwaCkpOworICAgICAgICAgICAgc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGguY2xl
YXIoKTsKKyAgICAgICAgICAgIGVuZE9mTGFzdE5ld0xpbmUgPSBvZmZzZXRPZk5leHROZXdMaW5l
ICsgMTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gcmVtYWluaW5nVGV4dCA9IGN1cnJlbnRU
ZXh0LnN1YnN0cmluZyhlbmRPZkxhc3ROZXdMaW5lKTsKKyAgICAgICAgaWYgKHJlbWFpbmluZ1Rl
eHQubGVuZ3RoKCkpCisgICAgICAgICAgICB0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGguYXBwZW5k
KE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUoKSwgcmVtYWlu
aW5nVGV4dC50b1N0cmluZygpIH0pOworCisgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsKKyAg
ICB9CisKKyAgICBpZiAoIXRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5pc0VtcHR5KCkpCisgICAg
ICAgIGFkZEl0ZW0oc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGgsIGVuZC5kZWVwRXF1aXZhbGVudCgp
LCBXVEZNb3ZlKHRva2Vuc0luQ3VycmVudFBhcmFncmFwaCkpOworfQorCit2b2lkIFRleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyOjphZGRJdGVtKGNvbnN0IFBvc2l0aW9uJiBzdGFydE9mUGFyYWdy
YXBoLCBjb25zdCBQb3NpdGlvbiYgZW5kT2ZQYXJhZ3JhcGgsIFZlY3RvcjxNYW5pcHVsYXRpb25U
b2tlbj4mJiB0b2tlbnMpCit7CisgICAgQVNTRVJUKG1fZG9jdW1lbnQpOworICAgIGF1dG8gcmVz
dWx0ID0gbV9pdGVtcy5hZGQobV9pdGVtSWRlbnRpZmllci5nZW5lcmF0ZSgpLCBNYW5pcHVsYXRp
b25JdGVtIHsgc3RhcnRPZlBhcmFncmFwaCwgZW5kT2ZQYXJhZ3JhcGgsIFdURk1vdmUodG9rZW5z
KSB9KTsKKyAgICBtX2NhbGxiYWNrKCptX2RvY3VtZW50LCByZXN1bHQuaXRlcmF0b3ItPmtleSwg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS50b2tlbnMpOworfQorCitib29sIFRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyOjpjb21wbGV0ZU1hbmlwdWxhdGlvbihJdGVtSWRlbnRpZmllciBpdGVtSWRl
bnRpZmllciwgY29uc3QgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiYgcmVwbGFjZW1lbnRUb2tl
bnMpCit7CisgICAgaWYgKCFpdGVtSWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgYXV0byBpdGVtSXRlcmF0b3IgPSBtX2l0ZW1zLmZpbmQoaXRlbUlkZW50aWZpZXIpOwor
ICAgIGlmIChpdGVtSXRlcmF0b3IgPT0gbV9pdGVtcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgYXV0byBkaWRSZXBsYWNlID0gcmVwbGFjZShpdGVtSXRlcmF0b3ItPnZhbHVl
LCByZXBsYWNlbWVudFRva2Vucyk7CisKKyAgICBtX2l0ZW1zLnJlbW92ZShpdGVtSXRlcmF0b3Ip
OworCisgICAgcmV0dXJuIGRpZFJlcGxhY2U7Cit9CisKK2Jvb2wgVGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXI6OnJlcGxhY2UoY29uc3QgTWFuaXB1bGF0aW9uSXRlbSYgaXRlbSwgY29uc3QgVmVj
dG9yPE1hbmlwdWxhdGlvblRva2VuPiYgcmVwbGFjZW1lbnRUb2tlbnMpCit7CisgICAgVGV4dEl0
ZXJhdG9yIGl0ZXJhdG9yIHsgaXRlbS5zdGFydCwgaXRlbS5lbmQgfTsKKyAgICBzaXplX3QgY3Vy
cmVudFRva2VuSW5kZXggPSAwOworICAgIEhhc2hNYXA8VG9rZW5JZGVudGlmaWVyLCBSZWY8Tm9k
ZT4+IHRva2VuVG9Ob2RlOworICAgIHdoaWxlICghaXRlcmF0b3IuYXRFbmQoKSkgeworICAgICAg
ICBhdXRvIHN0cmluZyA9IGl0ZXJhdG9yLnRleHQoKS50b1N0cmluZygpOworICAgICAgICBpZiAo
Y3VycmVudFRva2VuSW5kZXggPj0gaXRlbS50b2tlbnMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBhdXRvJiBjdXJyZW50VG9rZW4gPSBpdGVtLnRva2Vuc1tjdXJy
ZW50VG9rZW5JbmRleF07CisgICAgICAgIGlmIChpdGVyYXRvci50ZXh0KCkgIT0gY3VycmVudFRv
a2VuLmNvbnRlbnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHRva2VuVG9O
b2RlLmFkZChjdXJyZW50VG9rZW4uaWRlbnRpZmllciwgKml0ZXJhdG9yLm5vZGUoKSk7CisgICAg
ICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsKKyAgICAgICAgKytjdXJyZW50VG9rZW5JbmRleDsKKyAg
ICB9CisKKyAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHByZXNldmUgdGhlIG9yZGVyIG9mIHRo
ZSByZXBsYWNlbWVudCBhdCBhbGwuCisgICAgZm9yIChhdXRvJiB0b2tlbiA6IHJlcGxhY2VtZW50
VG9rZW5zKSB7CisgICAgICAgIGF1dG8qIG5vZGUgPSB0b2tlblRvTm9kZS5nZXQodG9rZW4uaWRl
bnRpZmllcik7CisgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgaWYgKCFpczxDaGFyYWN0ZXJEYXRhPihub2RlKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAvLyBGSVhNRTogSXQncyBub3Qgc2FmZSB0byB1cGRhdGUgRE9NIHdoaWxl
IGl0ZXJhdGluZyBvdmVyIHRoZSB0b2tlbnMuCisgICAgICAgIGRvd25jYXN0PENoYXJhY3RlckRh
dGE+KG5vZGUpLT5zZXREYXRhKHRva2VuLmNvbnRlbnQpOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJQb3NpdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFu
ZGxlci5oPgorI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBEb2N1bWVudDsKKworY2xhc3MgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXIgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI+IHsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBUZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlcihEb2N1bWVudCYpOworCisgICAgZW51bSBUb2tlbklkZW50aWZpZXJUeXBl
IHsgfTsKKyAgICB1c2luZyBUb2tlbklkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPFRva2Vu
SWRlbnRpZmllclR5cGU+OworCisgICAgc3RydWN0IE1hbmlwdWxhdGlvblRva2VuIHsKKyAgICAg
ICAgVG9rZW5JZGVudGlmaWVyIGlkZW50aWZpZXI7CisgICAgICAgIFN0cmluZyBjb250ZW50Owor
CisgICAgICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKKyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPE1h
bmlwdWxhdGlvblRva2VuPiBkZWNvZGUoRGVjb2RlciYpOworICAgIH07CisKKyAgICBlbnVtIEl0
ZW1JZGVudGlmaWVyVHlwZSB7IH07CisgICAgdXNpbmcgSXRlbUlkZW50aWZpZXIgPSBPYmplY3RJ
ZGVudGlmaWVyPEl0ZW1JZGVudGlmaWVyVHlwZT47CisKKyAgICB1c2luZyBNYW5pcHVsYXRpb25J
dGVtQ2FsbGJhY2sgPSBXVEY6OkZ1bmN0aW9uPHZvaWQoRG9jdW1lbnQmLCBJdGVtSWRlbnRpZmll
ciwgY29uc3QgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiYpPjsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHN0YXJ0T2JzZXJ2aW5nUGFyYWdyYXBocyhNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2sm
Jik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGNvbXBsZXRlTWFuaXB1bGF0aW9uKEl0ZW1J
ZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+Jik7CisKK3ByaXZhdGU6
CisgICAgc3RydWN0IE1hbmlwdWxhdGlvbkl0ZW0geworICAgICAgICBQb3NpdGlvbiBzdGFydDsK
KyAgICAgICAgUG9zaXRpb24gZW5kOworICAgICAgICBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+
IHRva2VuczsKKyAgICB9OworCisgICAgdm9pZCBhZGRJdGVtKGNvbnN0IFBvc2l0aW9uJiBzdGFy
dE9mUGFyYWdyYXBoLCBjb25zdCBQb3NpdGlvbiYgZW5kT2ZQYXJhZ3JhcGgsIFZlY3RvcjxNYW5p
cHVsYXRpb25Ub2tlbj4mJik7CisgICAgYm9vbCByZXBsYWNlKGNvbnN0IE1hbmlwdWxhdGlvbkl0
ZW0mLCBjb25zdCBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+Jik7CisKKyAgICBXZWFrUHRyPERv
Y3VtZW50PiBtX2RvY3VtZW50OworICAgIE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjayBtX2NhbGxi
YWNrOworICAgIEhhc2hNYXA8SXRlbUlkZW50aWZpZXIsIE1hbmlwdWxhdGlvbkl0ZW0+IG1faXRl
bXM7CisgICAgSXRlbUlkZW50aWZpZXIgbV9pdGVtSWRlbnRpZmllcjsKKyAgICBUb2tlbklkZW50
aWZpZXIgbV90b2tlbklkZW50aWZpZXI7Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgor
dm9pZCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW46OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgaWRlbnRpZmllciA8
PCBjb250ZW50OworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8VGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuPiBUZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQor
eworICAgIE1hbmlwdWxhdGlvblRva2VuIHJlc3VsdDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc3VsdC5pZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb250ZW50KSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjUxNTI4KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0OSBAQAorMjAxOS0xMC0yMyAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgYSBtZWNoYW5pc20gdG8gZmlu
ZCBhbmQgbWFuaXB1bGF0ZSB0ZXh0IGJ5IHBhcmFncmFwaHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzI4NgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBT
UEkgdG8gZmluZCBwYXJhZ3JhcGhzIG9mIHRleHQgYW5kIGxldCBjbGllbnQgcmVwbGFjZSB0aGUg
Y29udGVudCBvZiBlYWNoIHBhcmFncmFwaC4KKyAgICAgICAgRm9yIG5vdywgdGhpcyBTUEkgaXMg
bGltaXRlZCB0byBmaW5kICYgcmVwbGFjZSBjb250ZW50cyBvZiBtYWluIGZyYW1lJ3MgZG9jdW1l
bnQuCisKKyAgICAgICAgV0tXZWJWaWV3J3MgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29t
cGxldGlvbkhhbmRsZXIgc2VuZHMgU3RhcnRUZXh0TWFuaXB1bGF0aW9ucyBtZXNzYWdlIHRvIFdl
YkNvbnRlbnQgcHJvY2VzcworICAgICAgICB0byBmaW5kIGFsbCBwYXJhZ3JhcGhzIGluIHRoZSBt
YWluIGZyYW1lLiBXZWJDb250ZW50IHByb2Nlc3Mgd2lsbCBzZW5kIGJhY2sgRGlkRmluZFRleHRN
YW5pcHVsYXRpb25JdGVtIG1lc3NhZ2UKKyAgICAgICAgZm9yIGVhY2ggcGFyYWdyYXBoLCB3aGlj
aCBpbiB0dXJuIGNhbGxzIGJhY2sgX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlJ3MgX3dlYlZp
ZXc6IGRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbTouCisKKyAgICAgICAgVXBvbiByZWNlaXZp
bmcgdGhpcyBkZWxlZ2F0ZSBjYWxsYmFjaywgdGhlIGNsaWVudCBjYW4gaW52b2tlIFdLV2ViVmll
dydzIF9jb21wbGV0ZVRleHRNYW5pcHVsYXRpb24gdG8gcmVwbGFjZQorICAgICAgICB0aGUgY29u
dGVudC4gSXQgd2lsbCBzZW5kIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbiB0byBXZWJDb250ZW50
IHByb2Nlc3MsIHdoaWNoIHdpbGwgaW52b2tlIGNvbXBsZXRlTWFuaXB1bGF0aW9uCisgICAgICAg
IG9uIG1haW4gZnJhbWUncyBkb2N1bWVudCdzIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLgor
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgICgt
W1dLV2ViVmlldyBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlXSk6IEFkZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOl0pOiBBZGVkLgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29tcGxldGlvbkhhbmRs
ZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOmNv
bXBsZXRpb246XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2
YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9u
RGVsZWdhdGUuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0
TWFuaXB1bGF0aW9uSXRlbS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L19XS1RleHRNYW5pcHVsYXRpb25JdGVtLm1tOiBBZGRlZC4KKyAgICAgICAgKC1bX1dLVGV4dE1h
bmlwdWxhdGlvbkl0ZW0gaW5pdFdpdGhJZGVudGlmaWVyOnRva2VuczpdKToKKyAgICAgICAgKC1b
X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gaWRlbnRpZmllcl0pOgorICAgICAgICAoLVtfV0tUZXh0
TWFuaXB1bGF0aW9uSXRlbSB0b2tlbnNdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbTogQWRkZWQuCisgICAgICAgICgt
W19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiBpbml0XSk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c3RhcnRUZXh0
TWFuaXB1bGF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkRmluZFRl
eHRNYW5pcHVsYXRpb25JdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpjb21w
bGV0ZVRleHRNYW5pcHVsYXRpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAg
ICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c3RhcnRU
ZXh0TWFuaXB1bGF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNvbXBsZXRlVGV4
dE1hbmlwdWxhdGlvbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKwogMjAx
OS0xMC0yMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYkJh
Y2tGb3J3YXJkQ2FjaGU6OnJlbW92ZUVudHJpZXNNYXRjaGluZygpIG1heSByZS1lbnRlciBhbmQg
Y3Jhc2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQJKHJldmlzaW9uIDI1MTUyOCkKKysrIFNv
dXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDYgKzI2
MCw4IEBAIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHJvY2Vzc1Bvb2xDb25maWcKIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLUmVtb3RlV2ViSW5zcGVjdG9yVmlld0NvbnRyb2xsZXIubW0KIFVJUHJv
Y2Vzcy9BUEkvQ29jb2EvX1dLU2Vzc2lvblN0YXRlLm1tCiBVSVByb2Nlc3MvQVBJL0NvY29hL19X
S1RleHRJbnB1dENvbnRleHQubW0KK1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxh
dGlvbkl0ZW0ubW0KK1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvblRva2Vu
Lm1tCiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1RodW1ibmFpbFZpZXcubW0KIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5tbQogVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tVc2VyQ29udGVudEZpbHRlci5tbQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAyNTE1MjgpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NDE5LDYgKzk0MTks
MzQgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldE1vY2tXZWJBdXRoZW50aWNhdAogfQogI2VuZGlm
CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpzdGFydFRleHRNYW5pcHVsYXRpb25zKFRleHRNYW5pcHVs
YXRpb25JdGVtQ2FsbGJhY2smJiBjYWxsYmFjaywgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2Vzcygp
KSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgbV90ZXh0TWFuaXB1bGF0aW9uSXRlbUNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7
CisgICAgbV9wcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViUGFnZTo6U3RhcnRUZXh0TWFuaXB1bGF0aW9ucygpLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSwgbV93ZWJQYWdlSUQpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmluZFRl
eHRNYW5pcHVsYXRpb25JdGVtKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJ
dGVtSWRlbnRpZmllciBpdGVtSUQsCisgICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4mIHRva2VucykKK3sKKyAgICBp
ZiAoIW1fdGV4dE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjaykKKyAgICAgICAgcmV0dXJuOworICAg
IG1fdGV4dE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjayhpdGVtSUQsIHRva2Vucyk7Cit9CisKK3Zv
aWQgV2ViUGFnZVByb3h5Ojpjb21wbGV0ZVRleHRNYW5pcHVsYXRpb24oV2ViQ29yZTo6VGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1JRCwKKyAgICBjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRv
a2VuPiYgdG9rZW5zLCBXVEY6OkZ1bmN0aW9uPHZvaWQgKGJvb2wgc3VjY2Vzcyk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKSB7CisgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBt
X3Byb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJQ
YWdlOjpDb21wbGV0ZVRleHRNYW5pcHVsYXRpb24oaXRlbUlELCB0b2tlbnMpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgbV93ZWJQYWdlSUQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKIAogI3VuZGVmIE1FUkdFX1dIRUVMX0VWRU5UUwpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDI1MTUyOCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3Nyw3IEBACiAj
aW5jbHVkZSA8V2ViQ29yZS9Gb250QXR0cmlidXRlcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJh
bWVMb2FkZXJUeXBlcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+IC8vIEZJWE1F
OiBNb3ZlIExheW91dFZpZXdwb3J0Q29uc3RyYWludCB0byBpdHMgb3duIGZpbGUgYW5kIHN0b3Ag
aW5jbHVkaW5nIHRoaXMuCisjaW5jbHVkZSA8V2ViQ29yZS9HbG9iYWxGcmFtZUlkZW50aWZpZXIu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0lucHV0TW9kZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTGF5
b3V0UG9pbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0xheW91dFNpemUuaD4KQEAgLTkzLDYgKzk0
LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NlYXJjaFBvcHVwTWVudS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvVGV4dENoZWNraW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0R3JhbnVsYXJpdHku
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9Vc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9WaWV3cG9ydEFyZ3VtZW50cy5oPgogI2luY2x1ZGUgPG1lbW9yeT4KQEAgLTE2MTEs
NiArMTYxMywxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNb2NrV2ViQXV0aGVudGljYXRpb25D
b25maWd1cmF0aW9uKFdlYkNvcmU6Ok1vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24m
Jik7CiAjZW5kaWYKIAorICAgIHVzaW5nIFRleHRNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2sgPSBX
VEY6OkZ1bmN0aW9uPHZvaWQgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJ
dGVtSWRlbnRpZmllciwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4mKT47CisgICAgdm9pZCBzdGFydFRleHRNYW5pcHVs
YXRpb25zKFRleHRNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2smJiwgV1RGOjpDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgZGlkRmluZFRleHRNYW5pcHVsYXRpb25JdGVtKFdl
YkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRlbnRpZmllciwgY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25U
b2tlbj4mKTsKKyAgICB2b2lkIGNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihXZWJDb3JlOjpUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIsCisgICAgICAgIGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9r
ZW4+JiwgV1RGOjpGdW5jdGlvbjx2b2lkIChib29sIHN1Y2Nlc3MpPiYmKTsKKwogcHJpdmF0ZToK
ICAgICBXZWJQYWdlUHJveHkoUGFnZUNsaWVudCYsIFdlYlByb2Nlc3NQcm94eSYsIFJlZjxBUEk6
OlBhZ2VDb25maWd1cmF0aW9uPiYmKTsKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwpA
QCAtMjU3NCw2ICsyNTgyLDggQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3VzcGVu
ZGVkUGFnZVByb3h5PiBtX3N1c3BlbmRlZFBhZ2VLZXB0VG9QcmV2ZW50Rmxhc2hpbmc7CiAgICAg
V2Vha1B0cjxTdXNwZW5kZWRQYWdlUHJveHk+IG1fbGFzdFN1c3BlbmRlZFBhZ2U7CiAKKyAgICBU
ZXh0TWFuaXB1bGF0aW9uSXRlbUNhbGxiYWNrIG1fdGV4dE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFj
azsKKwogI2lmIEhBVkUoUEVOQ0lMS0lUKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxFZGl0YWJsZUlt
YWdlQ29udHJvbGxlcj4gbV9lZGl0YWJsZUltYWdlQ29udHJvbGxlcjsKICNlbmRpZgpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgko
cmV2aXNpb24gMjUxNTI4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC01ODEsNCArNTgxLDcgQEAgbWVzc2FnZXMg
LT4gV2ViUGFnZVByb3h5IHsKICAgICBTZW5kTWVzc2FnZVRvV2ViVmlldyhzdHJ1Y3QgV2ViS2l0
OjpVc2VyTWVzc2FnZSB1c2VyTWVzc2FnZSkKICAgICBTZW5kTWVzc2FnZVRvV2ViVmlld1dpdGhS
ZXBseShzdHJ1Y3QgV2ViS2l0OjpVc2VyTWVzc2FnZSB1c2VyTWVzc2FnZSkgLT4gKHN0cnVjdCBX
ZWJLaXQ6OlVzZXJNZXNzYWdlIHJlcGx5TWVzc2FnZSkgQXN5bmMKICNlbmRpZgorCisgICAgRGlk
RmluZFRleHRNYW5pcHVsYXRpb25JdGVtKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOjpJdGVtSWRlbnRpZmllciBpdGVtSUQsIFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+IHRva2VucykKKwogfQpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCShyZXZpc2lv
biAyNTE1MjgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC05OCw2ICs5OCw5IEBACiAjaW1wb3J0ICJfV0tSZW1vdGVP
YmplY3RSZWdpc3RyeUludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tTZXNzaW9uU3RhdGVJbnRlcm5h
bC5oIgogI2ltcG9ydCAiX1dLVGV4dElucHV0Q29udGV4dEludGVybmFsLmgiCisjaW1wb3J0ICJf
V0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUuaCIKKyNpbXBvcnQgIl9XS1RleHRNYW5pcHVsYXRp
b25JdGVtLmgiCisjaW1wb3J0ICJfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaCIKICNpbXBvcnQg
Il9XS1Zpc2l0ZWRMaW5rU3RvcmVJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLV2Vic2l0ZVBvbGlj
aWVzSW50ZXJuYWwuaCIKICNpbXBvcnQgPFdlYkNvcmUvRWxlbWVudENvbnRleHQuaD4KQEAgLTEx
Myw2ICsxMTYsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9TZXR0aW5ncy5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9TaGFyZWRCdWZmZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvU3RyaW5nVXRpbGl0aWVzLmg+
CisjaW1wb3J0IDxXZWJDb3JlL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1ZhbGlkYXRpb25CdWJibGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvVmlld3BvcnRB
cmd1bWVudHMuaD4KICNpbXBvcnQgPFdlYkNvcmUvV3JpdGluZ01vZGUuaD4KQEAgLTI3Niw2ICsy
ODAsOCBAQCBzdGF0aWMgT3B0aW9uYWw8V2ViQ29yZTo6U2Nyb2xsYmFyT3ZlcmxhCiAKICAgICBC
T09MIF91c2VQbGF0Zm9ybUZpbmRVSTsKIAorICAgIFdlYWtPYmpDUHRyPGlkIDxfV0tUZXh0TWFu
aXB1bGF0aW9uRGVsZWdhdGU+PiBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOworCiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKICAgICBSZXRhaW5QdHI8X1dLUmVtb3RlT2JqZWN0UmVnaXN0cnk+
IF9yZW1vdGVPYmplY3RSZWdpc3RyeTsKIApAQCAtNzQzOSw2ICs3NDQ1LDY1IEBAIC0gKHZvaWQp
X2V4ZWN1dGVFZGl0Q29tbWFuZDooTlNTdHJpbmcgKikKICAgICB9KTsKIH0KIAorLSAoaWQgPF9X
S1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4pX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZQorewor
ICAgIHJldHVybiBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmdldEF1dG9yZWxlYXNlZCgpOwor
fQorCistICh2b2lkKV9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6KGlkIDxfV0tUZXh0TWFu
aXB1bGF0aW9uRGVsZWdhdGU+KWRlbGVnYXRlCit7CisgICAgX3RleHRNYW5pcHVsYXRpb25EZWxl
Z2F0ZSA9IGRlbGVnYXRlOworfQorCistICh2b2lkKV9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0
aENvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBp
ZiAoIV90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAo
IV9wYWdlKQorICAgICAgICByZXR1cm47CisgICAgX3BhZ2UtPnN0YXJ0VGV4dE1hbmlwdWxhdGlv
bnMoW3dlYWtTZWxmID0gV2Vha09iakNQdHI8V0tXZWJWaWV3PihzZWxmKV0gKFdlYkNvcmU6OlRl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRlbnRpZmllciBpdGVtSUQsCisgICAgICAg
IGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1
bGF0aW9uVG9rZW4+JiB0b2tlbnMpIHsKKyAgICAgICAgaWYgKCF3ZWFrU2VsZikKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBhdXRvIHJldGFpbmVkU2VsZiA9IHdlYWtTZWxmLmdldCgp
OworICAgICAgICBhdXRvIGRlbGVnYXRlID0gW3JldGFpbmVkU2VsZiBfdGV4dE1hbmlwdWxhdGlv
bkRlbGVnYXRlXTsKKyAgICAgICAgaWYgKCFkZWxlZ2F0ZSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBOU011dGFibGVBcnJheSAqd2tUb2tlbnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJy
YXlXaXRoQ2FwYWNpdHk6dG9rZW5zLnNpemUoKV07CisgICAgICAgIGZvciAoYXV0byYgdG9rZW4g
OiB0b2tlbnMpIHsKKyAgICAgICAgICAgIGF1dG8gd2tUb2tlbiA9IGFkb3B0TlMoW1tfV0tUZXh0
TWFuaXB1bGF0aW9uVG9rZW4gYWxsb2NdIGluaXRdKTsKKyAgICAgICAgICAgIFt3a1Rva2VuIHNl
dElkZW50aWZpZXI6U3RyaW5nOjpudW1iZXIodG9rZW4uaWRlbnRpZmllci50b1VJbnQ2NCgpKV07
CisgICAgICAgICAgICBbd2tUb2tlbiBzZXRDb250ZW50OnRva2VuLmNvbnRlbnRdOworICAgICAg
ICAgICAgW3drVG9rZW5zIGFkZE9iamVjdDp3a1Rva2VuLmdldCgpXTsKKyAgICAgICAgfQorCisg
ICAgICAgIGF1dG8gaXRlbSA9IGFkb3B0TlMoW1tfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSBhbGxv
Y10gaW5pdFdpdGhJZGVudGlmaWVyOlN0cmluZzo6bnVtYmVyKGl0ZW1JRC50b1VJbnQ2NCgpKSB0
b2tlbnM6d2tUb2tlbnNdKTsKKyAgICAgICAgW2RlbGVnYXRlIF93ZWJWaWV3OnJldGFpbmVkU2Vs
Zi5nZXQoKSBkaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW06aXRlbS5nZXQoKV07CisgICAgfSwg
W2NhcHR1cmVkQ29tcGxldGlvbkJsb2NrID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVy
KV0gKCkgeworICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25CbG9jaygpOworICAgIH0pOworfQor
CistICh2b2lkKV9jb21wbGV0ZVRleHRNYW5pcHVsYXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25J
dGVtICopaXRlbSBjb21wbGV0aW9uOih2b2lkKF4pKEJPT0wgc3VjY2VzcykpY29tcGxldGlvbkhh
bmRsZXIKK3sKKyAgICBpZiAoIV9wYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGl0
ZW1JRCA9IG1ha2VPYmplY3RJZGVudGlmaWVyPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyOjpJdGVtSWRlbnRpZmllclR5cGU+KFN0cmluZyhpdGVtLmlkZW50aWZpZXIpLnRvVUlu
dDY0KCkpOworCisgICAgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
OjpNYW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zOworICAgIGZvciAoX1dLVGV4dE1hbmlwdWxhdGlv
blRva2VuICp3a1Rva2VuIGluIGl0ZW0udG9rZW5zKSB7CisgICAgICAgIGF1dG8gdG9rZW5JRCA9
IG1ha2VPYmplY3RJZGVudGlmaWVyPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
OjpUb2tlbklkZW50aWZpZXJUeXBlPihTdHJpbmcod2tUb2tlbi5pZGVudGlmaWVyKS50b1VJbnQ2
NCgpKTsKKyAgICAgICAgdG9rZW5zLmFwcGVuZChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4geyB0b2tlbklELCB3a1Rva2VuLmNvbnRlbnQgfSk7
CisgICAgfQorCisgICAgX3BhZ2UtPmNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihpdGVtSUQsIHRv
a2VucywgW2NhcHR1cmVkQ29tcGxldGlvbkJsb2NrID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25I
YW5kbGVyKV0gKGJvb2wgc3VjY2VzcykgeworICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25CbG9j
ayhzdWNjZXNzKTsKKyAgICB9KTsKK30KKwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKIC0g
KENHUmVjdClfZHJhZ0NhcmV0UmVjdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCShyZXZpc2lvbiAyNTE1MjgpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTMsNiArMTEzLDcgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUlu
dGVnZXIsIF9XS1JlY3RFZAogQGNsYXNzIF9XS1NhZmVCcm93c2luZ1dhcm5pbmc7CiBAY2xhc3Mg
X1dLU2Vzc2lvblN0YXRlOwogQGNsYXNzIF9XS1RleHRJbnB1dENvbnRleHQ7CitAY2xhc3MgX1dL
VGV4dE1hbmlwdWxhdGlvbkl0ZW07CiBAY2xhc3MgX1dLVGh1bWJuYWlsVmlldzsKIEBjbGFzcyBf
V0tXZWJzaXRlUG9saWNpZXM7CiBAY2xhc3MgX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVyOwpAQCAt
MTIwLDkgKzEyMSwxMCBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLUmVjdEVk
CiBAcHJvdG9jb2wgV0tIaXN0b3J5RGVsZWdhdGVQcml2YXRlOwogQHByb3RvY29sIF9XS0RpYWdu
b3N0aWNMb2dnaW5nRGVsZWdhdGU7CiBAcHJvdG9jb2wgX1dLRmluZERlbGVnYXRlOworQHByb3Rv
Y29sIF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZTsKIEBwcm90b2NvbCBfV0tJY29uTG9hZGluZ0RlbGVn
YXRlOwogQHByb3RvY29sIF9XS0lucHV0RGVsZWdhdGU7Ci1AcHJvdG9jb2wgX1dLRnVsbHNjcmVl
bkRlbGVnYXRlOworQHByb3RvY29sIF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTsKIAogQGlu
dGVyZmFjZSBXS1dlYlZpZXcgKFdLUHJpdmF0ZSkKIApAQCAtNTc1LDYgKzU3NywxMCBAQCB0eXBl
ZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLUmVjdEVkCiBAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIF9XS0luc3BlY3RvciAqX2luc3BlY3RvciBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBfV0tGcmFtZUhhbmRsZSAqX21haW5GcmFtZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0
LjQpLCBpb3MoMTIuMikpOwogCitAcHJvcGVydHkgKG5vbmF0b21pYywgd2Vhaywgc2V0dGVyPV9z
ZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6KSBpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVn
YXRlPiBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9zdGFydFRleHRNYW5pcHVsYXRp
b25zV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVy
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7Cist
ICh2b2lkKV9jb21wbGV0ZVRleHRNYW5pcHVsYXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25JdGVt
ICopaXRlbSBjb21wbGV0aW9uOih2b2lkKF4pKEJPT0wgc3VjY2VzcykpY29tcGxldGlvbkhhbmRs
ZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsK
KwogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0U2Nyb2xsaW5nVXBkYXRlc0Rpc2Fi
bGVkRm9yVGVzdGluZzopIEJPT0wgX3Njcm9sbGluZ1VwZGF0ZXNEaXNhYmxlZEZvclRlc3Rpbmcg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIAog
LSAodm9pZClfcHJvY2Vzc1dpbGxTdXNwZW5kSW1taW5lbnRseUZvclRlc3Rpbmc7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVn
YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0
L1dLRm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKwor
QGNsYXNzIF9XS0ZyYW1lSGFuZGxlOworQGNsYXNzIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtOwor
CitAcHJvdG9jb2wgX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIDxOU09iamVjdD4KKworQG9w
dGlvbmFsCisKKy0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkRmluZFRl
eHRNYW5pcHVsYXRpb25JdGVtOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWl0ZW07CisKK0Bl
bmQKKwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5p
cHVsYXRpb25JdGVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25JdGVtLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25JdGVtLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFdlYktp
dC9XS0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisK
K0BjbGFzcyBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW47CisKK1dLX0NMQVNTX0FWQUlMQUJMRSht
YWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tUZXh0TWFu
aXB1bGF0aW9uSXRlbSA6IE5TT2JqZWN0CisKKy0gKGluc3RhbmNldHlwZSlpbml0IE5TX1VOQVZB
SUxBQkxFOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSWRlbnRpZmllcjooTlNTdHJpbmcgKilp
ZGVudGlmaWVyIHRva2VuczooTlNBcnJheTxfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gKj4gKil0
b2tlbnM7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNTdHJpbmcg
KmlkZW50aWZpZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TQXJy
YXk8X1dLVGV4dE1hbmlwdWxhdGlvblRva2VuICo+ICp0b2tlbnM7CisKK0BlbmQKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4
dE1hbmlwdWxhdGlvbkl0ZW0ubW0JKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25JdGVtLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0uaCIKKworI2ltcG9ydCA8d3RmL1JldGFpblB0
ci5oPgorCitAaW1wbGVtZW50YXRpb24gX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0geworICAgIFJl
dGFpblB0cjxOU1N0cmluZz4gX2lkZW50aWZpZXI7CisgICAgUmV0YWluUHRyPE5TQXJyYXk8X1dL
VGV4dE1hbmlwdWxhdGlvblRva2VuICo+PiBfdG9rZW5zOworfQorCistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgdG9rZW5zOihOU0FycmF5
PF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiAqPiAqKXRva2VucworeworICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX2lkZW50aWZpZXIg
PSBpZGVudGlmaWVyOworICAgIF90b2tlbnMgPSB0b2tlbnM7CisgICAgcmV0dXJuIHNlbGY7Cit9
CisKKy0gKE5TU3RyaW5nICopaWRlbnRpZmllcgoreworICAgIHJldHVybiBfaWRlbnRpZmllci5n
ZXQoKTsKK30KKworLSAoTlNBcnJheTxfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gKj4gKil0b2tl
bnMKK3sKKyAgICByZXR1cm4gX3Rva2Vucy5nZXQoKTsKK30KKworQGVuZApJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFu
aXB1bGF0aW9uVG9rZW4uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24u
aD4KKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKK1dLX0NMQVNTX0FWQUlM
QUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tU
ZXh0TWFuaXB1bGF0aW9uVG9rZW4gOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywg
Y29weSkgTlNTdHJpbmcgKmlkZW50aWZpZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkg
TlNTdHJpbmcgKmNvbnRlbnQ7CisKK0BlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4ubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5t
bQkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
VGV4dE1hbmlwdWxhdGlvblRva2VuLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiX1dLVGV4dE1hbmlw
dWxhdGlvblRva2VuLmgiCisKKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworQGltcGxlbWVu
dGF0aW9uIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbgorCistIChpbnN0YW5jZXR5cGUpaW5pdAor
eworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIHJldHVybiBzZWxmOworfQorCitAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09B
dXRob3JpemF0aW9uU2Vzc2lvbi5tbQkocmV2aXNpb24gMjUxNTI4KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlvblNlc3Npb24u
bW0JKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbXBvcnQgIkFQSVVJQ2xpZW50
LmgiCiAjaW1wb3J0ICJTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5LmgiCiAjaW1wb3J0ICJXS1VJ
RGVsZWdhdGVQcml2YXRlLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgogI2ltcG9y
dCAiV2ViUGFnZVByb3h5LmgiCiAjaW1wb3J0ICJXZWJzaXRlRGF0YVN0b3JlLmgiCiAjaW1wb3J0
IDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1t
CShyZXZpc2lvbiAyNTE1MjgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tGdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBA
QAogI2ltcG9ydCA8V2ViQ29yZS9WaWRlb0Z1bGxzY3JlZW5Nb2RlbC5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9XZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9XZWJDb3JlRnVsbFNjcmVlbldpbmRvdy5oPgorI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3Jh
cGhpY3NTUEkuaD4KICNpbXBvcnQgPHBhbC9zeXN0ZW0vU2xlZXBEaXNhYmxlci5oPgogI2ltcG9y
dCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KIApJbmRleDogU291cmNlL1dlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNTE1MjgpCisrKyBT
b3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzMzLDYgKzEzMzMsOSBAQAogCQk5OUU3MTRDNTFDMTI0QTA0MDA2NjVCM0EgLyog
X1dLQXV0b21hdGlvbkRlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5OUU3MTRDMTFDMTI0OUU2MDA2NjVCM0EgLyogX1dLQXV0b21hdGlvbkRl
bGVnYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJOTlFNzE4OUEyMUY3OUQ5RTAwNTVFOTc1IC8qIF9XS1RvdWNoRXZlbnRHZW5lcmF0b3IubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OUU3MTg5NjIx
Rjc5RDlEMDA1NUU5NzUgLyogX1dLVG91Y2hFdmVudEdlbmVyYXRvci5tbSAqLzsgfTsKIAkJOTlF
NzE4OUMyMUY3OUQ5RTAwNTVFOTc1IC8qIF9XS1RvdWNoRXZlbnRHZW5lcmF0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5RTcxODk4MjFGNzlEOUUw
MDU1RTk3NSAvKiBfV0tUb3VjaEV2ZW50R2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOUIwMkUwQ0IyMzVFQjk1MzAwNDA0NEIyIC8q
IF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwMkUwQzkyMzVFQjYyRDAwNDA0NEIyIC8qIF9XS1RleHRN
YW5pcHVsYXRpb25EZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTlCMDJFMENDMjM1RUI5NTcwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1
bGF0aW9uSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOUIwMkUwQ0EyMzVFQjg4NDAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOUIwMkUw
RDcyMzVGQzk0RjAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwMkUwQ0QyMzVFQjk2NzAw
NDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlGQjVGMzk1MTY5RTZBODAwMDJDMjVCRiAv
KiBXS0NvbnRleHRQcml2YXRlTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5RkI1RjM5MzE2OUU2QTgwMDAyQzI1QkYgLyogV0tDb250ZXh0UHJpdmF0
ZU1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUExMDJBNzA4MUVDMEVFRTkwMEQ4MUQ4MiAvKiBjb20ubWFjcm9tZWRpYS5GbGFzaCBQbGF5ZXIg
RVNSLnBsdWdpbi5zYiBpbiBDb3B5IFBsdWctaW4gU2FuZGJveCBQcm9maWxlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTVFMzk0OTFENUJEOEE3MDBCNEI3Q0UgLyogY29t
Lm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyIEVTUi5wbHVnaW4uc2IgKi87IH07CiAJCUExMDQ2RUEx
MjA3OTI2MzEwMEYwQzVEOCAvKiBXS1BERlZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMDQ2RTlGMjA3OTI2MzEwMEYwQzVEOCAvKiBXS1BERlZp
ZXcuaCAqLzsgfTsKQEAgLTE3MjgsOCArMTczMSw2IEBACiAJCQljb21waWxlclNwZWMgPSBjb20u
YXBwbGUuY29tcGlsZXJzLnByb3h5LnNjcmlwdDsKIAkJCWZpbGVQYXR0ZXJucyA9ICIqLmgiOwog
CQkJZmlsZVR5cGUgPSBwYXR0ZXJuLnByb3h5OwotCQkJaW5wdXRGaWxlcyA9ICgKLQkJCSk7CiAJ
CQlpc0VkaXRhYmxlID0gMTsKIAkJCW91dHB1dEZpbGVzID0gKAogCQkJCSIkKEhFQURFUl9PVVRQ
VVRfRElSKS8kKElOUFVUX0ZJTEVfTkFNRSkiLApAQCAtNDA0Niw2ICs0MDQ3LDExIEBACiAJCTk5
RTcxODk2MjFGNzlEOUQwMDU1RTk3NSAvKiBfV0tUb3VjaEV2ZW50R2VuZXJhdG9yLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLVG91Y2hFdmVudEdlbmVyYXRv
ci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTlFNzE4OTgyMUY3OUQ5RTAwNTVF
OTc1IC8qIF9XS1RvdWNoRXZlbnRHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gX1dLVG91Y2hFdmVudEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5OUY2NDJEMjFGQUJFMzc4MDA5NjIxRTkgLyogQ29vcmRpbmF0ZVN5c3RlbS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb29yZGluYXRlU3lzdGVtLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCMDJFMEM5MjM1RUI2MkQwMDQwNDRCMiAvKiBfV0tU
ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLVGV4dE1hbmlwdWxh
dGlvbkRlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCMDJFMENBMjM1
RUI4ODQwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk5QjAyRTBDRDIzNUVCOTY3MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk5QjAyRTBDRTIzNUVCQjE0MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlw
dWxhdGlvblRva2VuLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLVGV4dE1hbmlwdWxhdGlv
blRva2VuLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjAyRTBEMDIzNUVCQ0NB
MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0ubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOUJDNTlENkMxRUZDQ0NCNjAwMUU4RDA5IC8qIENhbGxiYWNrSUQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbGJhY2tJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5QkM1OUQ2RDFFRkNEQzZEMDAxRThEMDkgLyogT3B0aW9uYWxDYWxsYmFja0lE
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wdGlvbmFsQ2FsbGJhY2tJRC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5RjU0Rjg4RTE2NDg4RTg3MDA3REY4MUEg
LyogQXV4aWxpYXJ5UHJvY2Vzc01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IEF1eGlsaWFyeVByb2Nlc3NNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC02MzQ1LDYgKzYzNTEsMTEgQEAKIAkJCQkyREU5QjEzODIyMzFGNjFDMDA1Mjg3Qjcg
LyogX1dLVGV4dElucHV0Q29udGV4dC5oICovLAogCQkJCTJERTlCMTM3MjIzMUY2MUMwMDUyODdC
NyAvKiBfV0tUZXh0SW5wdXRDb250ZXh0Lm1tICovLAogCQkJCTJERTlCMTNCMjIzMUY3N0MwMDUy
ODdCNyAvKiBfV0tUZXh0SW5wdXRDb250ZXh0SW50ZXJuYWwuaCAqLywKKwkJCQk5QjAyRTBDOTIz
NUVCNjJEMDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmggKi8sCisJCQkJ
OUIwMkUwQ0EyMzVFQjg4NDAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtLmggKi8s
CisJCQkJOUIwMkUwRDAyMzVFQkNDQTAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25JdGVt
Lm1tICovLAorCQkJCTlCMDJFMENEMjM1RUI5NjcwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0
aW9uVG9rZW4uaCAqLywKKwkJCQk5QjAyRTBDRTIzNUVCQjE0MDA0MDQ0QjIgLyogX1dLVGV4dE1h
bmlwdWxhdGlvblRva2VuLm1tICovLAogCQkJCTJENkIzNzE5MThBOTY3QUQwMDQyQUU4MCAvKiBf
V0tUaHVtYm5haWxWaWV3LmggKi8sCiAJCQkJMkQ2QjM3MUExOEE5NjdBRDAwNDJBRTgwIC8qIF9X
S1RodW1ibmFpbFZpZXcubW0gKi8sCiAJCQkJMkRBQ0U2NEQxOEFEQkZGMDAwRTRDQTc2IC8qIF9X
S1RodW1ibmFpbFZpZXdJbnRlcm5hbC5oICovLApAQCAtOTMxMCw2ICs5MzIxLDkgQEAKIAkJCQkx
QTAwMkQ0MzE5NkIzMzcwMDBCOUFENDQgLyogX1dLU2Vzc2lvblN0YXRlSW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTJERTlCMTNBMjIzMUY2MUMwMDUyODdCNyAvKiBfV0tUZXh0SW5wdXRD
b250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkyREU5QjEzQzIyMzFGNzdDMDA1Mjg3QjcgLyog
X1dLVGV4dElucHV0Q29udGV4dEludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQk5QjAyRTBD
QjIzNUVCOTUzMDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk5QjAyRTBDQzIzNUVCOTU3MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxh
dGlvbkl0ZW0uaCBpbiBIZWFkZXJzICovLAorCQkJCTlCMDJFMEQ3MjM1RkM5NEYwMDQwNDRCMiAv
KiBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTJENkIzNzFC
MThBOTY3QUQwMDQyQUU4MCAvKiBfV0tUaHVtYm5haWxWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyREFDRTY0RTE4QURCRkYwMDBFNENBNzYgLyogX1dLVGh1bWJuYWlsVmlld0ludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5OUU3MTg5QzIxRjc5RDlFMDA1NUU5NzUgLyogX1dLVG91Y2hF
dmVudEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMjUxNTI4KQorKysgU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY4MzYsNiArNjgzNiw1MSBAQCBPcHRpb25hbDxXZWJDb3JlOjpFbGVtZW50Q29udGV4dD4gV2Vi
UGFnCiAgICAgcmV0dXJuIFdlYkNvcmU6OkVsZW1lbnRDb250ZXh0IHsgZWxlbWVudFJlY3RJblJv
b3RWaWV3Q29vcmRpbmF0ZXMoZWxlbWVudCwgKmZyYW1lKSwgbV9pZGVudGlmaWVyLCBkb2N1bWVu
dC5pZGVudGlmaWVyKCksIGRvY3VtZW50LmlkZW50aWZpZXJGb3JFbGVtZW50KGVsZW1lbnQpIH07
CiB9CiAKK3ZvaWQgV2ViUGFnZTo6c3RhcnRUZXh0TWFuaXB1bGF0aW9ucyhDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgaWYgKCFtX3BhZ2UpCisg
ICAgICAgIHJldHVybjsKKworICAgIGF1dG8gbWFpbkRvY3VtZW50ID0gbWFrZVJlZlB0cihtX3Bh
Z2UtPm1haW5GcmFtZSgpLmRvY3VtZW50KCkpOworICAgIGlmICghbWFpbkRvY3VtZW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBtYWluRG9jdW1lbnQtPnRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyKCkuc3RhcnRPYnNlcnZpbmdQYXJhZ3JhcGhzKFt3ZWJQYWdlID0gbWFrZVdlYWtQdHIoKnRo
aXMpXSAoV2ViQ29yZTo6RG9jdW1lbnQmIGRvY3VtZW50LAorICAgICAgICBXZWJDb3JlOjpUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIgaXRlbUlkZW50aWZpZXIsIGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0
aW9uVG9rZW4+JiB0b2tlbnMpIHsKKyAgICAgICAgYXV0byogZnJhbWUgPSBkb2N1bWVudC5mcmFt
ZSgpOworICAgICAgICBpZiAoIXdlYlBhZ2UgfHwgIWZyYW1lIHx8IHdlYlBhZ2UtPm1haW5GcmFt
ZSgpICE9IGZyYW1lKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8qIHdlYkZy
YW1lID0gV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoKmZyYW1lKTsKKyAgICAgICAgaWYgKCF3ZWJG
cmFtZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB3ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbShpdGVtSWRlbnRp
ZmllciwgdG9rZW5zKSk7CisgICAgfSk7CisgICAgLy8gRm9yIG5vdywgd2UgYXNzdW1lIHN0YXJ0
T2JzZXJ2aW5nUGFyYWdyYXBocyBmaW5kIGFsbCBwYXJhZ3JhcGhzIHN5bmNocm9ub3VzbHkgYXQg
b25jZS4KKyAgICBjb21wbGV0aW9uSGFuZGxlcigpOworfQorCit2b2lkIFdlYlBhZ2U6OmNvbXBs
ZXRlVGV4dE1hbmlwdWxhdGlvbihXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6
SXRlbUlkZW50aWZpZXIgaXRlbUlELAorICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFu
aXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+JiB0b2tlbnMsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgYXV0byBj
b21wbGV0ZU1hbmlwdWxhdGlvbiA9IFsmXSB7CisgICAgICAgIGlmICghbV9wYWdlKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1dG8gbWFpbkRvY3VtZW50ID0gbWFrZVJl
ZlB0cihtX3BhZ2UtPm1haW5GcmFtZSgpLmRvY3VtZW50KCkpOworICAgICAgICBpZiAoIW1haW5E
b2N1bWVudCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBhdXRvKiBjb250
cm9sbGVyID0gbWFpbkRvY3VtZW50LT50ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcklmRXhpc3Rz
KCk7CisgICAgICAgIGlmICghY29udHJvbGxlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICByZXR1cm4gY29udHJvbGxlci0+Y29tcGxldGVNYW5pcHVsYXRpb24oaXRlbUlE
LCB0b2tlbnMpOworICAgIH07CisgICAgY29tcGxldGlvbkhhbmRsZXIoY29tcGxldGVNYW5pcHVs
YXRpb24oKSk7Cit9CisKIFBBTDo6U2Vzc2lvbklEIFdlYlBhZ2U6OnNlc3Npb25JRCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnNlc3Npb25JRCgpOwpJbmRl
eDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24g
MjUxNTI4KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Qb2ludGVy
SUQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlRGF0YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJBY3Rpdml0eS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlckNvbnRlbnRUeXBlcy5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbi5oPgpAQCAtMTE5Niw2ICsxMTk3LDEwIEBA
IHB1YmxpYzoKICAgICBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50Rm9yQ29udGV4dChjb25zdCBX
ZWJDb3JlOjpFbGVtZW50Q29udGV4dCYpIGNvbnN0OwogICAgIE9wdGlvbmFsPFdlYkNvcmU6OkVs
ZW1lbnRDb250ZXh0PiBjb250ZXh0Rm9yRWxlbWVudChXZWJDb3JlOjpFbGVtZW50JikgY29uc3Q7
CiAKKyAgICB2b2lkIHN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmKTsKKyAgICB2b2lkIGNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihXZWJDb3JlOjpUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIsCisgICAgICAgIGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9r
ZW4+JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CisKICNpZiBFTkFCTEUoQVBQ
TEVfUEFZKQogICAgIFdlYlBheW1lbnRDb29yZGluYXRvciogcGF5bWVudENvb3JkaW5hdG9yKCk7
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
bWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjUxNTI4KQorKysgU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpA
QCAtNTgyLDQgKzU4Miw3IEBAIEdlbmVyYXRlU3ludGhldGljRWRpdGluZ0NvbW1hbmQoZW51bTp1
aW4KICAgICBTZW5kTWVzc2FnZVRvV2ViRXh0ZW5zaW9uKHN0cnVjdCBXZWJLaXQ6OlVzZXJNZXNz
YWdlIHVzZXJNZXNzYWdlKQogICAgIFNlbmRNZXNzYWdlVG9XZWJFeHRlbnNpb25XaXRoUmVwbHko
c3RydWN0IFdlYktpdDo6VXNlck1lc3NhZ2UgdXNlck1lc3NhZ2UpIC0+IChzdHJ1Y3QgV2ViS2l0
OjpVc2VyTWVzc2FnZSByZXBseU1lc3NhZ2UpIEFzeW5jCiAjZW5kaWYKKworICAgIFN0YXJ0VGV4
dE1hbmlwdWxhdGlvbnMoKSAtPiAoKSBBc3luYworICAgIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlv
bihXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIgaXRl
bUlELCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxh
dGlvblRva2VuPiB0b2tlbnMpIC0+IChib29sIHN1Y2Nlc3MpIEFzeW5jCiB9CkluZGV4OiBUb29s
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTE1
MjgpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAor
MjAxOS0xMC0yMyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBB
ZGQgYSBtZWNoYW5pc20gdG8gZmluZCBhbmQgbWFuaXB1bGF0ZSB0ZXh0IGJ5IHBhcmFncmFwaHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzI4Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGJh
c2ljIEFQSSB0ZXN0cyBmb3IgdGhlIG5ldyBTUEkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW06IEFkZGVkLgor
ICAgICAgICAoLVtUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgaW5pdF0pOgorICAgICAgICAoLVtU
ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgX3dlYlZpZXc6ZGlkRmluZEl0ZW06Zm9yRnJhbWU6XSk6
CisgICAgICAgICgtW1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBpdGVtc10pOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6Y3JlYXRlSXRlbSk6CisKIDIwMTktMTAtMjMgIFdlbnNvbiBIc2llaCAg
PHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPUyAxM10gaW1wb3J0ZWQvbW96
aWxsYS9zdmcvdGV4dC90ZXh0cGF0aC1zZWxlY3Rpb24uc3ZnIGlzIGZsYWt5CkluZGV4OiBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjUxNTI4KQorKysgVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTczOSw2ICs3MzksNyBAQAogCQk5OTg0RkFDQzFDRkZBRjYwMDA4RDE5OEMgLyogV0tXZWJW
aWV3VGV4dElucHV0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTk4NEZBQ0ExQ0ZGQUVFRTAwOEQxOThDIC8qIFdLV2ViVmlld1RleHRJbnB1dC5tbSAq
LzsgfTsKIAkJOTk4NEZBQ0UxQ0ZGQjA5MDAwOEQxOThDIC8qIGVkaXRhYmxlLWJvZHkuaHRtbCBp
biBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OTg0
RkFDRDFDRkZCMDM4MDA4RDE5OEMgLyogZWRpdGFibGUtYm9keS5odG1sICovOyB9OwogCQk5OTk5
MTA4QjFGMzkzQzk2MDA4QUQ0NTUgLyogQ29weWluZy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5OTkxMDhBMUYzOTNDOEIwMDhBRDQ1NSAvKiBDb3B5
aW5nLm1tICovOyB9OworCQk5QjAyRTBENjIzNUZBNDdEMDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxh
dGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlC
MDJFMEQ1MjM1RkE0N0QwMDQwNDRCMiAvKiBUZXh0TWFuaXB1bGF0aW9uLm1tICovOyB9OwogCQk5
QjA3ODZBNTFDNTg4NUMzMDBEMTU5RTMgLyogSW5qZWN0ZWRCdW5kbGVNYWtlQWxsU2hhZG93Um9v
dHNPcGVuX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5QjA3ODZBNDFDNTg4NUMzMDBEMTU5RTMgLyogSW5qZWN0ZWRCdW5kbGVNYWtlQWxs
U2hhZG93Um9vdHNPcGVuX0J1bmRsZS5jcHAgKi87IH07CiAJCTlCMTlDREEwMUYwNkRGRTMwMDA1
NDhERCAvKiBOZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIxOUNEOUUxRjA2REZF
MzAwMDU0OEREIC8qIE5ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0g
Ki87IH07CiAJCTlCMUY2Rjc4MUY5MDU1ODQwMEI1NTc0NCAvKiBDb3B5SFRNTC5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMTA1NjQxMUY5MDQ1Qzcw
MEQ1NTgzRiAvKiBDb3B5SFRNTC5tbSAqLzsgfTsKQEAgLTExMjcsNyArMTEyOCw2IEBACiAJCQlk
c3RQYXRoID0gVGVzdFdlYktpdEFQSS5yZXNvdXJjZXM7CiAJCQlkc3RTdWJmb2xkZXJTcGVjID0g
NzsKIAkJCWZpbGVzID0gKAotCQkJCTU3OTgzMzdFMjM2MDE5QTQwMDhFNTU0NyAvKiB3ZWItYXV0
aGVudGljYXRpb24tbWFrZS1jcmVkZW50aWFsLWhpZC5odG1sIGluIENvcHkgUmVzb3VyY2VzICov
LAogCQkJCTU1QTgxN0ZGMjE4MTAyMUEwMDA0QTM5QSAvKiAxMDB4MTAwLXJlZC50Z2EgaW4gQ29w
eSBSZXNvdXJjZXMgKi8sCiAJCQkJMUE5RTUyQzkxM0U2NUVGNDAwNjkxN0Y1IC8qIDE4LWNoYXJh
Y3RlcnMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1NUE4MTgwMDIxODEwMjIxMDAw
NEEzOUEgLyogNDAweDQwMC1ncmVlbi5wbmcgaW4gQ29weSBSZXNvdXJjZXMgKi8sCkBAIC0xNDU4
LDYgKzE0NTgsNyBAQAogCQkJCTU3NjYzREVBMjM0RUE2NkQwMEU4NUUwOSAvKiB3ZWItYXV0aGVu
dGljYXRpb24tZ2V0LWFzc2VydGlvbi1uZmMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJ
CQk1Nzc0NTREMjIzNTlCQjAxMDA4RTFFRDcgLyogd2ViLWF1dGhlbnRpY2F0aW9uLWdldC1hc3Nl
cnRpb24tdTJmLW5vLWNyZWRlbnRpYWxzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJ
NTdDNjI0NTAyMzQ2QzIxRTAwMzgzRkU3IC8qIHdlYi1hdXRoZW50aWNhdGlvbi1nZXQtYXNzZXJ0
aW9uLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCisJCQkJNTc5ODMzN0UyMzYwMTlBNDAwOEU1
NTQ3IC8qIHdlYi1hdXRoZW50aWNhdGlvbi1tYWtlLWNyZWRlbnRpYWwtaGlkLmh0bWwgaW4gQ29w
eSBSZXNvdXJjZXMgKi8sCiAJCQkJMUMyQjgxODYxQzg5MjU5RDAwQTU1MjlGIC8qIHdlYmZvbnQu
aHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1MTcxNEVCNDFDRjhDNzhDMDA0NzIzQzQg
LyogV2ViUHJvY2Vzc0tpbGxJREJDbGVhbnVwLTEuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywK
IAkJCQk1MTcxNEVCNTFDRjhDNzhDMDA0NzIzQzQgLyogV2ViUHJvY2Vzc0tpbGxJREJDbGVhbnVw
LTIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKQEAgLTIxMzMsNiArMjEzNCw3IEBACiAJCTk5
ODRGQUNBMUNGRkFFRUUwMDhEMTk4QyAvKiBXS1dlYlZpZXdUZXh0SW5wdXQubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYlZpZXdUZXh0SW5wdXQubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5ODRGQUNEMUNGRkIwMzgwMDhEMTk4QyAvKiBl
ZGl0YWJsZS1ib2R5Lmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAiZWRpdGFibGUt
Ym9keS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTk5OTEwOEExRjM5M0M4
QjAwOEFENDU1IC8qIENvcHlpbmcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBDb3B5aW5nLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjAyRTBE
NTIzNUZBNDdEMDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFRleHRNYW5pcHVsYXRpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTlCMDc4NkEyMUM1ODgzMEYwMEQxNTlFMyAvKiBJbmplY3RlZEJ1bmRsZU1ha2VBbGxTaGFkb3dS
b290c09wZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0
ZWRCdW5kbGVNYWtlQWxsU2hhZG93Um9vdHNPcGVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOUIwNzg2QTQxQzU4ODVDMzAwRDE1OUUzIC8qIEluamVjdGVkQnVuZGxlTWFrZUFs
bFNoYWRvd1Jvb3RzT3Blbl9CdW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVNYWtlQWxsU2hhZG93Um9vdHNPcGVuX0J1bmRsZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMTA1NjQxMUY5MDQ1QzcwMEQ1NTgzRiAv
KiBDb3B5SFRNTC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvcHlIVE1MLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjk0NCw2ICsyOTQ2LDcgQEAKIAkJCQk1Nzc0QUE2NzIx
RkJCRjc4MDBBRjJBMUIgLyogVGVzdFNPQXV0aG9yaXphdGlvbi5tbSAqLywKIAkJCQlGNENENzRD
NzIwRkRCNDk2MDBERTM3OTQgLyogVGVzdFVSTFNjaGVtZUhhbmRsZXIuaCAqLywKIAkJCQlGNENE
NzRDODIwRkRCNDk2MDBERTM3OTQgLyogVGVzdFVSTFNjaGVtZUhhbmRsZXIubW0gKi8sCisJCQkJ
OUIwMkUwRDUyMzVGQTQ3RDAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRpb24ubW0gKi8sCiAJCQkJ
NUMxNkY4RkIyMzBDOTQyQjAwNzRDNEE4IC8qIFRleHRTaXplLm1tICovLAogCQkJCUMyMkZBMzJB
MjI4Rjg3MDgwMDlENzk4OCAvKiBUZXh0V2lkdGgubW0gKi8sCiAJCQkJNUM3M0E4MUEyMzIzMDU5
ODAwREVBODVBIC8qIFRMU0RlcHJlY2F0aW9uLm1tICovLApAQCAtNDgyOSw2ICs0ODMyLDcgQEAK
IAkJCQlGNDUwMzNGNTIwNkJFQzk1MDA5MzUxQ0UgLyogVGV4dEF1dG9zaXppbmdCb29zdC5tbSBp
biBTb3VyY2VzICovLAogCQkJCTkzRTYxOTNCMUY5MzFCM0EwMEFGMjQ1RSAvKiBUZXh0Q29kZWMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0UzNTI0RjkxQjE0NDFDNDAwMjhBN0M1IC8qIFRleHRG
aWVsZERpZEJlZ2luQW5kRW5kRWRpdGluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5QjAyRTBE
NjIzNUZBNDdEMDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbi5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTVDMTZGOEZDMjMwQzk0MzcwMDc0QzRBOCAvKiBUZXh0U2l6ZS5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUMyMkZBMzJCMjI4Rjg3MDgwMDlENzk4OCAvKiBUZXh0V2lkdGgubW0gaW4gU291cmNl
cyAqLywKIAkJCQk3Q0NFN0VERDFBNDExQTkyMDA0NDdDNEMgLyogVGltZVJhbmdlcy5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
VGV4dE1hbmlwdWxhdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW0JKG5vbmV4aXN0ZW50KQorKysgVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9ydCAiVGVzdC5o
IgorI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1By
aXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUuaD4K
KyNpbXBvcnQgPFdlYktpdC9fV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oPgorI2ltcG9ydCA8V2Vi
S2l0L19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+
CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK3N0YXRpYyBib29sIGRvbmUgPSBmYWxzZTsK
KworQGludGVyZmFjZSBUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgOiBOU09iamVjdCA8X1dLVGV4
dE1hbmlwdWxhdGlvbkRlbGVnYXRlPgorCistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3
ZWJWaWV3IGRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbTooX1dLVGV4dE1hbmlwdWxhdGlvbkl0
ZW0gKilpdGVtOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TQXJy
YXk8X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKj4gKml0ZW1zOworCitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgeworICAgIFJldGFpblB0cjxOU011dGFi
bGVBcnJheT4gX2l0ZW1zOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdAoreworICAgIGlmICgh
KHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworICAgIF9pdGVtcyA9
IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOworICAgIHJldHVybiBzZWxm
OworfQorCistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZEZpbmRUZXh0
TWFuaXB1bGF0aW9uSXRlbTooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVtCit7CisgICAg
W19pdGVtcyBhZGRPYmplY3Q6aXRlbV07Cit9CisKKy0gKE5TQXJyYXk8X1dLVGV4dE1hbmlwdWxh
dGlvbkl0ZW0gKj4gKilpdGVtcworeworICAgIHJldHVybiBfaXRlbXMuZ2V0KCk7Cit9CisKK0Bl
bmQKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitURVNUKFRleHRNYW5pcHVsYXRpb24s
IFN0YXJ0VGV4dE1hbmlwdWxhdGlvbkZpbmRTaW1wbGVQYXJhZ3JhcGhzKQoreworICAgIGF1dG8g
ZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0
XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBbd2ViVmlldyBf
c2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJW
aWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPiIKKyAgICAg
ICAgIjxodG1sPjxib2R5PmhlbGxvPGJyPndvcmxkPGRpdj5XZWJLaXQ8L2Rpdj48L2JvZHk+PC9o
dG1sPiJdOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9zdGFydFRleHRNYW5p
cHVsYXRpb25zV2l0aENvbXBsZXRpb25IYW5kbGVyOl57CisgICAgICAgIGRvbmUgPSB0cnVlOwor
ICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBhdXRv
ICppdGVtcyA9IFtkZWxlZ2F0ZSBpdGVtc107CisgICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAz
VUwpOworICAgIEVYUEVDVF9FUShpdGVtc1swXS50b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQ
RUNUX1NUUkVRKCJoZWxsbyIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcp
OworCisgICAgRVhQRUNUX0VRKGl0ZW1zWzFdLnRva2Vucy5jb3VudCwgMVVMKTsKKyAgICBFWFBF
Q1RfU1RSRVEoIndvcmxkIiwgaXRlbXNbMV0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7
CisKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMl0udG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVD
VF9TVFJFUSgiV2ViS2l0IiwgaXRlbXNbMl0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7
Cit9CisKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgU3RhcnRUZXh0TWFuaXB1bGF0aW9uRmluZE11
bHRpcGxlUGFyYWdyYXBoc0luU2luZ2xlVGV4dE5vZGUpCit7CisgICAgYXV0byBkZWxlZ2F0ZSA9
IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOworICAgIFt3ZWJWaWV3IF9zZXRUZXh0TWFu
aXB1bGF0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZpZXcgc3luY2hy
b25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPCFET0NUWVBFIGh0bWw+IgorICAgICAgICAiPGh0bWw+
PGJvZHk+PHByZT5oZWxsb1xud29ybGRcbldlYktpdDwvcHJlPjwvYm9keT48L2h0bWw+Il07CisK
KyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNX
aXRoQ29tcGxldGlvbkhhbmRsZXI6XnsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07Cisg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGF1dG8gKml0ZW1zID0g
W2RlbGVnYXRlIGl0ZW1zXTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDNVTCk7CisgICAg
RVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfU1RSRVEo
ImhlbGxvIiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisKKyAgICBF
WFBFQ1RfRVEoaXRlbXNbMV0udG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9TVFJFUSgi
d29ybGQiLCBpdGVtc1sxXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKworICAgIEVY
UEVDVF9FUShpdGVtc1syXS50b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX1NUUkVRKCJX
ZWJLaXQiLCBpdGVtc1syXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKK30KKworVEVT
VChUZXh0TWFuaXB1bGF0aW9uLCBTdGFydFRleHRNYW5pcHVsYXRpb25GaW5kUGFyYWdyYXBoc1dp
dGhNdWx0aWxlVG9rZW5zKQoreworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1h
bmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAw
LCA0MDAsIDQwMCldKTsKKyAgICBbd2ViVmlldyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRl
OmRlbGVnYXRlLmdldCgpXTsKKyAgICAKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhU
TUxTdHJpbmc6QCI8IURPQ1RZUEUgaHRtbD4iCisgICAgICAgICI8aHRtbD48Ym9keT5oZWxsbywg
IDxiPndvcmxkPC9iPjxicj48ZGl2PjxlbT4gPGI+V2ViPC9iPktpdDwvZW0+ICA8L2Rpdj48L2Jv
ZHk+PC9odG1sPiJdOworICAgIAorICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfc3Rh
cnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb21wbGV0aW9uSGFuZGxlcjpeeworICAgICAgICBkb25l
ID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwor
ICAgIAorICAgIGF1dG8gKml0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsKKyAgICBFWFBFQ1RfRVEo
aXRlbXMuY291bnQsIDJVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwg
MlVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoImhlbGxvLCAiLCBpdGVtc1swXS50b2tlbnNbMF0uY29u
dGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoIndvcmxkIiwgaXRlbXNbMF0udG9r
ZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgCisgICAgRVhQRUNUX0VRKGl0ZW1zWzFd
LnRva2Vucy5jb3VudCwgMlVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoIldlYiIsIGl0ZW1zWzFdLnRv
a2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgiS2l0IiwgaXRl
bXNbMV0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7Cit9CisKK3N0cnVjdCBUb2tlbiB7
CisgICAgTlNTdHJpbmcgKmlkZW50aWZpZXI7CisgICAgTlNTdHJpbmcgKmNvbnRlbnQ7Cit9Owor
Cit0ZW1wbGF0ZTxzaXplX3QgbGVuZ3RoPgorc3RhdGljIFJldGFpblB0cjxfV0tUZXh0TWFuaXB1
bGF0aW9uSXRlbT4gY3JlYXRlSXRlbShOU1N0cmluZyAqaXRlbUlkZW50aWZpZXIsIGNvbnN0IFRv
a2VuICgmdG9rZW5zKVtsZW5ndGhdKQoreworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4g
d2tUb2tlbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIFJldGFpblB0cjxf
V0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4+IHRva2VuID0gYWRvcHROUyhbW19XS1RleHRNYW5pcHVs
YXRpb25Ub2tlbiBhbGxvY10gaW5pdF0pOworICAgICAgICBbdG9rZW4gc2V0SWRlbnRpZmllcjog
dG9rZW5zW2ldLmlkZW50aWZpZXJdOworICAgICAgICBbdG9rZW4gc2V0Q29udGVudDogdG9rZW5z
W2ldLmNvbnRlbnRdOworICAgICAgICBbd2tUb2tlbnMgYWRkT2JqZWN0OnRva2VuLmdldCgpXTsK
KyAgICB9CisgICAgcmV0dXJuIGFkb3B0TlMoW1tfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSBhbGxv
Y10gaW5pdFdpdGhJZGVudGlmaWVyOml0ZW1JZGVudGlmaWVyIHRva2Vuczp3a1Rva2Vucy5nZXQo
KV0pOworfQorCitURVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlv
blNob3VsZFJlcGxhY2VTaW1wbGVQYXJhZ3JhcGhDb250ZW50KQoreworICAgIGF1dG8gZGVsZWdh
dGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7Cisg
ICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBbd2ViVmlldyBfc2V0VGV4
dE1hbmlwdWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3IHN5
bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPiIKKyAgICAgICAgIjxo
dG1sPjxib2R5PjxwPmhlbGxsbywgd29vb3JsZDwvcD48cD4gaGV5LCA8Yj4gS2l0czwvYj4gaXMg
PGVtPmN1dXV0ZTwvZW0+PC9wPjwvYm9keT48L2h0bWw+Il07CisKKyAgICBkb25lID0gZmFsc2U7
CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29tcGxldGlvbkhhbmRs
ZXI6XnsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGF1dG8gKml0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsK
KyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDJVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBd
LnRva2Vucy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoImhlbGxsbywgd29vb3JsZCIs
IGl0ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworCisgICAgRVhQRUNUX0VR
KGl0ZW1zWzFdLnRva2Vucy5jb3VudCwgNFVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoImhleSwgIiwg
aXRlbXNbMV0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVR
KCJLaXRzIiwgaXRlbXNbMV0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQ
RUNUX1NUUkVRKCIgaXMgIiwgaXRlbXNbMV0udG9rZW5zWzJdLmNvbnRlbnQuVVRGOFN0cmluZyk7
CisgICAgRVhQRUNUX1NUUkVRKCJjdXV1dGUiLCBpdGVtc1sxXS50b2tlbnNbM10uY29udGVudC5V
VEY4U3RyaW5nKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfY29tcGxldGVU
ZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWNyZWF0ZUl0ZW0oaXRl
bXNbMV0uaWRlbnRpZmllciwgeworICAgICAgICB7IGl0ZW1zWzFdLnRva2Vuc1swXS5pZGVudGlm
aWVyLCBAIkhlbGxvLCAiIH0sCisgICAgICAgIHsgaXRlbXNbMV0udG9rZW5zWzFdLmlkZW50aWZp
ZXIsIEAia2l0dGVucyIgfSwKKyAgICAgICAgeyBpdGVtc1sxXS50b2tlbnNbMl0uaWRlbnRpZmll
ciwgQCIgYXJlICIgfSwKKyAgICAgICAgeyBpdGVtc1sxXS50b2tlbnNbM10uaWRlbnRpZmllciwg
QCJjdXRlIiB9LAorICAgIH0pLmdldCgpIGNvbXBsZXRpb246XihCT09MIHN1Y2Nlc3MpIHsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoc3VjY2Vzcyk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1d
OworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisgICAgRVhQRUNUX1dLX1NU
UkVRKCI8cD5oZWxsbG8sIHdvb29ybGQ8L3A+PHA+SGVsbG8sIDxiPmtpdHRlbnM8L2I+IGFyZSA8
ZW0+Y3V0ZTwvZW0+PC9wPiIsCisgICAgICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmlubmVySFRNTCJdKTsKKworICAgIGRvbmUgPSBmYWxz
ZTsKKyAgICBbd2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1
bGF0aW9uSXRlbSAqKWNyZWF0ZUl0ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwgeworICAgICAgICB7
IGl0ZW1zWzBdLnRva2Vuc1swXS5pZGVudGlmaWVyLCBAIkhlbGxvLCB3b3JsZC4iIH0sCisgICAg
fSkuZ2V0KCkgY29tcGxldGlvbjpeKEJPT0wgc3VjY2VzcykgeworICAgICAgICBFWFBFQ1RfVFJV
RShzdWNjZXNzKTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIjxwPkhlbGxvLCB3
b3JsZC48L3A+PHA+SGVsbG8sIDxiPmtpdHRlbnM8L2I+IGFyZSA8ZW0+Y3V0ZTwvZW0+PC9wPiIs
CisgICAgICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVu
dC5ib2R5LmlubmVySFRNTCJdKTsKK30KKworVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0
ZVRleHRNYW5pcHVsYXRpb25TaG91bGRGYWlsV2hlbkNvbnRlbnRJc0NoYW5nZWQpCit7CisgICAg
YXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxsb2Nd
IGluaXRdKTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOworICAgIFt3ZWJW
aWV3IF9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAg
W3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPCFET0NUWVBFIGh0bWw+Igor
ICAgICAgICAiPGh0bWw+PGJvZHk+PHA+IHdoYXQgPGVtPnRpbWU8L2VtPiBhcmUgdGhleSBub3c/
PC9wPjwvYm9keT48L2h0bWw+Il07CisKKyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcg
X3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29tcGxldGlvbkhhbmRsZXI6XnsKKyAgICAgICAg
ZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25l
KTsKKworICAgIGF1dG8gKml0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsKKyAgICBFWFBFQ1RfRVEo
aXRlbXMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwg
M1VMKTsKKyAgICBFWFBFQ1RfU1RSRVEoIndoYXQgIiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRl
bnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCJ0aW1lIiwgaXRlbXNbMF0udG9rZW5z
WzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCIgYXJlIHRoZXkgbm93
PyIsIGl0ZW1zWzBdLnRva2Vuc1syXS5jb250ZW50LlVURjhTdHJpbmcpOworCisgICAgW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Io
J2VtJykubmV4dFNpYmxpbmcuZGF0YSA9ICcgaXMgaXQgbm93IGluIExvbmRvbj8nIl07CisKKyAg
ICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbjoo
X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKiljcmVhdGVJdGVtKGl0ZW1zWzBdLmlkZW50aWZpZXIs
IHsKKyAgICAgICAgeyBpdGVtc1swXS50b2tlbnNbMF0uaWRlbnRpZmllciwgQCJXaGF0ICIgfSwK
KyAgICAgICAgeyBpdGVtc1swXS50b2tlbnNbMV0uaWRlbnRpZmllciwgQCJ0aW1lIiB9LAorICAg
ICAgICB7IGl0ZW1zWzBdLnRva2Vuc1syXS5pZGVudGlmaWVyLCBAIiBpcyBpdCBub3c/IiB9LAor
ICAgIH0pLmdldCgpIGNvbXBsZXRpb246XihCT09MIHN1Y2Nlc3MpIHsKKyAgICAgICAgRVhQRUNU
X0ZBTFNFKHN1Y2Nlc3MpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworICAgIEVYUEVDVF9XS19TVFJFUSgiPHA+IHdo
YXQgPGVtPnRpbWU8L2VtPiBpcyBpdCBub3cgaW4gTG9uZG9uPzwvcD4iLAorICAgICAgICBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhU
TUwiXSk7Cit9CisKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0
aW9uU2hvdWxkRmFpbFdoZW5Eb2N1bWVudEhhc0JlZW5OYXZpZ2F0ZWRBd2F5KQoreworICAgIGF1
dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBp
bml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBbd2ViVmll
dyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAInNpbXBsZSJdOworICAgIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmlubmVy
SFRNTCA9ICc8cD5oZXksIDxlbT5lYXJ0aDwvZW0+PC9wPiciXTsKKworICAgIGRvbmUgPSBmYWxz
ZTsKKyAgICBbd2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb21wbGV0aW9uSGFu
ZGxlcjpeeworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgYXV0byAqaXRlbXMgPSBbZGVsZWdhdGUgaXRlbXNd
OworICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNb
MF0udG9rZW5zLmNvdW50LCAyVUwpOworICAgIEVYUEVDVF9TVFJFUSgiaGV5LCAiLCBpdGVtc1sw
XS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoImVhcnRo
IiwgaXRlbXNbMF0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisKKyAgICBbd2ViVmll
dyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJjb3B5LWh0bWwiXTsKKyAgICBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhU
TUwgPSAnPHA+aGV5LCA8ZW0+ZWFydGg8L2VtPjwvcD4nIl07CisKKyAgICBkb25lID0gZmFsc2U7
CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29tcGxldGlvbkhhbmRs
ZXI6XnsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfY29t
cGxldGVUZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWNyZWF0ZUl0
ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwgeworICAgICAgICB7IGl0ZW1zWzBdLnRva2Vuc1swXS5p
ZGVudGlmaWVyLCBAImhlbGxvLCAiIH0sCisgICAgICAgIHsgaXRlbXNbMF0udG9rZW5zWzFdLmlk
ZW50aWZpZXIsIEAid29ybGQiIH0sCisgICAgfSkuZ2V0KCkgY29tcGxldGlvbjpeKEJPT0wgc3Vj
Y2VzcykgeworICAgICAgICBFWFBFQ1RfRkFMU0Uoc3VjY2Vzcyk7CisgICAgICAgIGRvbmUgPSB0
cnVlOworICAgIH1dOworCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381851</attachid>
            <date>2019-10-24 16:07:09 -0700</date>
            <delta_ts>2019-10-24 16:33:27 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-203286-20191024160708.patch</filename>
            <type>text/plain</type>
            <size>74242</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MTU3MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDE5LTEwLTIzICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIG1lY2hhbmlzbSB0byBm
aW5kIGFuZCBtYW5pcHVsYXRlIHRleHQgYnkgcGFyYWdyYXBocworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMjg2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgV2Vuc29uIEhzaWVoLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBUZXh0TWFu
aXB1bGF0aW9uQ29udHJvbGxlciB3aGljaCBhbGxvd3MgV2ViS2l0IGNsaWVudHMgdG8gZmluZCBh
bmQgcmVwbGFjZQorICAgICAgICB0ZXh0IGNvbnRlbnQgaW4gYSBnaXZlbiBkb2N1bWVudCBieSBw
YXJhZ3JhcGggYm91bmRhcnkuIEZvciBub3csIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyIGZp
bmRzCisgICAgICAgIGFsbCBwYXJhZ3JhcGhzIGluIHRoZSBkb2N1bWVudCBhbmQgaW52b2tlcyB0
aGUgY2FsbGJhY2sgZm9yIGVhY2ggcGFyYWdyYXBoLiBJbiB0aGUgZnV0dXJlLCB0aGlzCisgICAg
ICAgIGNvbnRyb2xsZXIgd2lsbCBzdXBwb3J0IGRldGVjdGluZyByZW1vdmFsIGFuZCBpbnNlcnRp
b24gb2YgbmV3IGNvbnRlbnQgdG8gdGhlIGRvY3VtZW50LgorCisgICAgICAgIFRlc3RzOiBUZXh0
TWFuaXB1bGF0aW9uLlN0YXJ0VGV4dE1hbmlwdWxhdGlvbkZpbmRTaW1wbGVQYXJhZ3JhcGhzCisg
ICAgICAgICAgICAgICBUZXh0TWFuaXB1bGF0aW9uLlN0YXJ0VGV4dE1hbmlwdWxhdGlvbkZpbmRQ
YXJhZ3JhcGhzV2l0aE11bHRpbGVUb2tlbnMKKyAgICAgICAgICAgICAgIFRleHRNYW5pcHVsYXRp
b24uQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uU2hvdWxkUmVwbGFjZVNpbXBsZVBhcmFncmFwaENv
bnRlbnQKKyAgICAgICAgICAgICAgIFRleHRNYW5pcHVsYXRpb24uQ29tcGxldGVUZXh0TWFuaXB1
bGF0aW9uU2hvdWxkRmFpbFdoZW5Db250ZW50SXNDaGFuZ2VkCisgICAgICAgICAgICAgICBUZXh0
TWFuaXB1bGF0aW9uLkNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvblNob3VsZEZhaWxXaGVuRG9jdW1l
bnRIYXNCZWVuTmF2aWdhdGVkQXdheQorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAg
ICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24pOiBDbGVhciBUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlci4gT3RoZXJ3aXNlIG1faXRlbXMKKyAgICAgICAgaW4gVGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXIgbWF5IGtlZXAgYSBidW5jaCBvZiBub2RlcyBhbGl2ZSBhbmQgbm90IGxldCB0aGlz
IGRvY3VtZW50IGRlc3RydWN0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXIpOiBBZGRlZC4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcklm
RXhpc3RzKTogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXI6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyKTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6c3RhcnRPYnNlcnZpbmdQYXJhZ3JhcGhz
KTogRmluZHMgYWxsIHBhcmdyYXBocyBhbmQgaW52b2tlCisgICAgICAgIHRoZSBjYWxsYmFjay4K
KyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjphZGRJdGVtKTog
QWRkZWQuIEEgaGVscGVyIGZvciBzdGFydE9ic2VydmluZ1BhcmFncmFwaHMuCisgICAgICAgIChX
ZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6Y29tcGxldGVNYW5pcHVsYXRpb24p
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpy
ZXBsYWNlKTogQWRkZWQuIEEgaGVscGVyIGZvciBjb21wbGV0ZU1hbmlwdWxhdGlvbi4KKyAgICAg
ICAgKiBlZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2Vu
OjplbmNvZGUgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbjo6ZGVjb2RlKTogQWRkZWQuCisKIDIwMTkt
MTAtMjQgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQnVpbGQg
Zml4IGFmdGVyIHIyNTE1NjcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHJldmlzaW9uIDI1MTU3
MSkKKysrIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTUw
Myw2ICs1MDMsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAg
ZWRpdGluZy9UZXh0R3JhbnVsYXJpdHkuaAogICAgIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKICAg
ICBlZGl0aW5nL1RleHRJdGVyYXRvckJlaGF2aW9yLmgKKyAgICBlZGl0aW5nL1RleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyLmgKICAgICBlZGl0aW5nL1VuZG9TdGVwLmgKICAgICBlZGl0aW5nL1Zp
c2libGVQb3NpdGlvbi5oCiAgICAgZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CShyZXZpc2lvbiAyNTE1NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMTA2MSw2ICsxMDYxLDcgQEAgZWRpdGluZy9TcGxpdFRleHRO
b2RlQ29udGFpbmluZ0VsZW1lbnRDbwogZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCiBl
ZGl0aW5nL1RleHRJbnNlcnRpb25CYXNlQ29tbWFuZC5jcHAKIGVkaXRpbmcvVGV4dEl0ZXJhdG9y
LmNwcAorZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKIGVkaXRpbmcvVHlw
aW5nQ29tbWFuZC5jcHAKIGVkaXRpbmcvVW5saW5rQ29tbWFuZC5jcHAKIGVkaXRpbmcvVmlzaWJs
ZVBvc2l0aW9uLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjUxNTcxKQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yODUy
LDYgKzI4NTIsNyBAQAogCQk5OTZFNTlERjFERjAxMjhEMDA2NjEyQjkgLyogTmF2aWdhdG9yV2Vi
RHJpdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
OTZFNTlEQzFERjAwRDkwMDA2NjEyQjkgLyogTmF2aWdhdG9yV2ViRHJpdmVyLmggKi87IH07CiAJ
CTlBNTI4RTg0MTdEN0Y1MkYwMEFBOTUxOCAvKiBGbG9hdGluZ09iamVjdHMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlBNTI4RTgyMTdEN0Y1MkYwMEFB
OTUxOCAvKiBGbG9hdGluZ09iamVjdHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk5QUIxRjM4MDE4RTI0ODlBMDA1MzQ3NDMgLyogQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUFCMUYzN0UxOEUyNDg5QTAwNTM0NzQzIC8qIENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk5QjAyRTBDODIzNUVBRDJBMDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMDJFMEMz
MjM1RTc2QUEwMDQwNDRCMiAvKiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlCMjRERThFMTUxOTRC
OTUwMEM1OUMyNyAvKiBIVE1MQkRJRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOUIyNERFOEMxNTE5NEI5NTAwQzU5QzI3IC8qIEhUTUxCRElF
bGVtZW50LmggKi87IH07CiAJCTlCMjdGQzYwMjM0RDlBREIwMDM5NEE0NiAvKiBXaW5kb3dFdmVu
dExvb3AuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlC
MjdGQzVFMjM0RDlBREEwMDM5NEE0NiAvKiBXaW5kb3dFdmVudExvb3AuaCAqLzsgfTsKIAkJOUIy
RDhBNzkxNDk5N0NDRjAwRUNFRjNFIC8qIFVuZG9TdGVwLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjJEOEE3ODE0OTk3Q0NGMDBFQ0VGM0UgLyogVW5k
b1N0ZXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMTEwNzQsNiArMTEwNzUsOCBAQAogCQk5QUM2RjAyNTIxMTQ4RjU0MDBDQkRBMDYgLyogTWVk
aWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBNZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5Lmg7IHBhdGggPSBtZWRpYWNh
cGFiaWxpdGllcy9NZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTlBQzZGMDJEMjExNDhGOUYwMENCREEwNiAvKiBNZWRpYUVuZ2lu
ZUNvbmZpZ3VyYXRpb25GYWN0b3J5TW9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBNZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5TW9jay5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlBQzZGMDJGMjExNDhGQTIwMENCREEwNiAvKiBNZWRp
YUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5TW9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBNZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5TW9jay5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5QjAyRTBDMzIzNUU3NkFBMDA0MDQ0QjIgLyogVGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUIwMkUwQzQyMzVFNzZB
QTAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOUIwM0Q4MDYxQkIzMTEwRDAwQjczRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVh
bUludGVybmFsc0J1aWx0aW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJl
YWRhYmxlQnl0ZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmg7IHBhdGggPSBEZXJpdmVkU291cmNl
cy9XZWJDb3JlL1JlYWRhYmxlQnl0ZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRy
ZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTlCMDNEODA2MUJCMzExMEQwMEI3NjRDOSAv
KiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9TdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVD
VFNfRElSOyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDggLyogUmVhZGFibGVTdHJlYW1C
dWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSZWFkYWJsZVN0cmVh
bUJ1aWx0aW5zLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL1JlYWRhYmxlU3RyZWFt
QnVpbHRpbnMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTIxNDM4
LDYgKzIxNDQxLDggQEAKIAkJCQk5MzMwOURDQzA5OUU2NDkxMDA1NkU1ODEgLyogVGV4dEl0ZXJh
dG9yLmNwcCAqLywKIAkJCQk5MzMwOURDRDA5OUU2NDkxMDA1NkU1ODEgLyogVGV4dEl0ZXJhdG9y
LmggKi8sCiAJCQkJOTM5MjE0NjgxOEE2RDc5MTAwMEVFNjg4IC8qIFRleHRJdGVyYXRvckJlaGF2
aW9yLmggKi8sCisJCQkJOUIwMkUwQzQyMzVFNzZBQTAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyLmNwcCAqLywKKwkJCQk5QjAyRTBDMzIzNUU3NkFBMDA0MDQ0QjIgLyogVGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaCAqLywKIAkJCQk5MzMwOURDQTA5OUU2NDkxMDA1NkU1
ODEgLyogVHlwaW5nQ29tbWFuZC5jcHAgKi8sCiAJCQkJOTMzMDlEQ0IwOTlFNjQ5MTAwNTZFNTgx
IC8qIFR5cGluZ0NvbW1hbmQuaCAqLywKIAkJCQk5QjJEOEE3ODE0OTk3Q0NGMDBFQ0VGM0UgLyog
VW5kb1N0ZXAuaCAqLywKQEAgLTMyMzUyLDYgKzMyMzU3LDcgQEAKIAkJCQlDRUNBREZDRTE1Mzc3
OTFEMDBFMzcwNjggLyogVGV4dEluc2VydGlvbkJhc2VDb21tYW5kLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5MzMwOUUxQzA5OUU2NDkyMDA1NkU1ODEgLyogVGV4dEl0ZXJhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzkyMTQ2OTE4QTZENzkxMDAwRUU2ODggLyogVGV4dEl0ZXJhdG9yQmVoYXZp
b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTlCMDJFMEM4MjM1RUFEMkEwMDQwNDRCMiAvKiBUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFRjQ1RTkwRTY4
Nzc2NzAwMUMxMjg3IC8qIFRleHRNZXRyaWNzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEQ5ODhC
NDE3QkZEMUY2MDA4NEZCODggLyogVGV4dE5vZGVUcmF2ZXJzYWwuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFDMThEQTU5MTgxQUY2QTUwMEM0RUYyMiAvKiBUZXh0UGFpbnRlci5oIGluIEhlYWRlcnMg
Ki8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDI1MTU3MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMyw2ICsy
MTMsNyBAQAogI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiVGV4dEF1
dG9TaXppbmcuaCIKICNpbmNsdWRlICJUZXh0RXZlbnQuaCIKKyNpbmNsdWRlICJUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRleHROb2RlVHJhdmVyc2FsLmgiCiAjaW5j
bHVkZSAiVG91Y2hBY3Rpb24uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1Tb3VyY2UuaCIKQEAgLTI0
NzgsNiArMjQ3OSw4IEBAIHZvaWQgRG9jdW1lbnQ6OnByZXBhcmVGb3JEZXN0cnVjdGlvbigpCiAK
ICAgICBtX3VuZG9NYW5hZ2VyLT5yZW1vdmVBbGxJdGVtcygpOwogCisgICAgbV90ZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlciA9IG51bGxwdHI7IC8vIEZyZWUgbm9kZXMga2VwdCBhbGl2ZSBieSBU
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci4KKwogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZKQog
ICAgIGlmICh0aGlzICE9ICZ0b3BEb2N1bWVudCgpKSB7CiAgICAgICAgIC8vIExldCB0aGUgYXgg
Y2FjaGUga25vdyB0aGF0IHRoaXMgc3ViZnJhbWUgZ29lcyBvdXQgb2Ygc2NvcGUuCkBAIC04MzIx
LDQgKzgzMjQsMTEgQEAgdm9pZCBEb2N1bWVudDo6c2V0UGljdHVyZUluUGljdHVyZUVsZW1lbgog
fQogI2VuZGlmCiAKK1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyJiBEb2N1bWVudDo6dGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXIoKQoreworICAgIGlmICghbV90ZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcikKKyAgICAgICAgbV90ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlciA9IG1ha2VVbmlx
dWU8VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI+KCp0aGlzKTsKKyAgICByZXR1cm4gKm1fdGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAyNTE1NzEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDYgKzE5Niw3IEBAIGNsYXNz
IFN0eWxlU2hlZXQ7CiBjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7CiBjbGFzcyBTdHlsZVNoZWV0
TGlzdDsKIGNsYXNzIFRleHQ7CitjbGFzcyBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjsKIGNs
YXNzIFRleHRSZXNvdXJjZURlY29kZXI7CiBjbGFzcyBUcmVlV2Fsa2VyOwogY2xhc3MgVW5kb01h
bmFnZXI7CkBAIC0xNTUzLDYgKzE1NTQsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRQaWN0dXJl
SW5QaWN0dXJlRWxlbWVudChIVE1MVmlkZW9FbGVtZW50Kik7CiAjZW5kaWYKIAorICAgIFdFQkNP
UkVfRVhQT1JUIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyJiB0ZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcigpOworICAgIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyKiB0ZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlcklmRXhpc3RzKCkgeyByZXR1cm4gbV90ZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlci5nZXQoKTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgZW51bSBDb25zdHJ1Y3Rpb25GbGFncyB7
IFN5bnRoZXNpemVkID0gMSwgTm9uUmVuZGVyZWRQbGFjZWhvbGRlciA9IDEgPDwgMSB9OwogICAg
IERvY3VtZW50KEZyYW1lKiwgY29uc3QgVVJMJiwgdW5zaWduZWQgPSBEZWZhdWx0RG9jdW1lbnRD
bGFzcywgdW5zaWduZWQgY29uc3RydWN0aW9uRmxhZ3MgPSAwKTsKQEAgLTIwODAsNiArMjA4NCw4
IEBAIHByaXZhdGU6CiAgICAgV2Vha1B0cjxIVE1MVmlkZW9FbGVtZW50PiBtX3BpY3R1cmVJblBp
Y3R1cmVFbGVtZW50OwogI2VuZGlmCiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXI+IG1fdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI7CisKICAgICBIYXNo
TWFwPEVsZW1lbnQqLCBFbGVtZW50SWRlbnRpZmllcj4gbV9pZGVudGlmaWVkRWxlbWVudHNNYXA7
CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiRWRpdGluZy5oIgor
I2luY2x1ZGUgIlNjcmlwdERpc2FsbG93ZWRTY29wZS5oIgorI2luY2x1ZGUgIlRleHRJdGVyYXRv
ci5oIgorI2luY2x1ZGUgIlZpc2libGVVbml0cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcihE
b2N1bWVudCYgZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KG1ha2VXZWFrUHRyKGRvY3VtZW50
KSkKK3sKK30KKwordm9pZCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6c3RhcnRPYnNlcnZp
bmdQYXJhZ3JhcGhzKE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAg
IGF1dG8gZG9jdW1lbnQgPSBtYWtlUmVmUHRyKG1fZG9jdW1lbnQuZ2V0KCkpOworICAgIGlmICgh
ZG9jdW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKTsKKworICAgIFZpc2libGVQb3NpdGlvbiBzdGFydCA9IGZpcnN0UG9zaXRpb25Jbk5v
ZGUobV9kb2N1bWVudC5nZXQoKSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGVuZCA9IGxhc3RQb3Np
dGlvbkluTm9kZShtX2RvY3VtZW50LmdldCgpKTsKKyAgICBUZXh0SXRlcmF0b3IgaXRlcmF0b3Ig
eyBzdGFydC5kZWVwRXF1aXZhbGVudCgpLCBlbmQuZGVlcEVxdWl2YWxlbnQoKSB9OworICAgIGlm
ICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybjsgLy8gVmlzaWJsZVBvc2l0aW9uIG9yIFRleHRJ
dGVyYXRvcidzIGNvbnN0cnVjdG9yIG1heSBoYXZlIHVwZGF0ZWQgdGhlIGxheW91dCBhbmQgZXhl
Y3V0ZWQgYXJiaXRyYXJ5IHNjcmlwdHMuCisKKyAgICBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+
IHRva2Vuc0luQ3VycmVudFBhcmFncmFwaDsKKyAgICBQb3NpdGlvbiBzdGFydE9mQ3VycmVudFBh
cmFncmFwaCA9IHN0YXJ0LmRlZXBFcXVpdmFsZW50KCk7CisgICAgd2hpbGUgKCFpdGVyYXRvci5h
dEVuZCgpKSB7CisgICAgICAgIFN0cmluZ1ZpZXcgY3VycmVudFRleHQgPSBpdGVyYXRvci50ZXh0
KCk7CisKKyAgICAgICAgaWYgKHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoLmlzTnVsbCgpKQorICAg
ICAgICAgICAgc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGggPSBpdGVyYXRvci5yYW5nZSgpLT5zdGFy
dFBvc2l0aW9uKCk7CisKKyAgICAgICAgc2l6ZV90IGVuZE9mTGFzdE5ld0xpbmUgPSAwOworICAg
ICAgICBzaXplX3Qgb2Zmc2V0T2ZOZXh0TmV3TGluZSA9IDA7CisgICAgICAgIHdoaWxlICgob2Zm
c2V0T2ZOZXh0TmV3TGluZSA9IGN1cnJlbnRUZXh0LmZpbmQoJ1xuJywgZW5kT2ZMYXN0TmV3TGlu
ZSkpICE9IG5vdEZvdW5kKSB7CisgICAgICAgICAgICBpZiAoZW5kT2ZMYXN0TmV3TGluZSA8IG9m
ZnNldE9mTmV4dE5ld0xpbmUpIHsKKyAgICAgICAgICAgICAgICB0b2tlbnNJbkN1cnJlbnRQYXJh
Z3JhcGguYXBwZW5kKE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJh
dGUoKSwKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQuc3Vic3RyaW5nKGVuZE9mTGFz
dE5ld0xpbmUsIG9mZnNldE9mTmV4dE5ld0xpbmUgLSBlbmRPZkxhc3ROZXdMaW5lKS50b1N0cmlu
ZygpIH0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhdXRvIGxhc3RSYW5nZSA9IGl0
ZXJhdG9yLnJhbmdlKCk7CisgICAgICAgICAgICBpZiAob2Zmc2V0T2ZOZXh0TmV3TGluZSA8IGN1
cnJlbnRUZXh0Lmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgbGFzdFJhbmdlLT5zZXRTdGFy
dChmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoaXRlcmF0b3Iubm9kZSgpKSk7IC8vIE1vdmUg
dGhlIHN0YXJ0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQgbm9kZS4KKyAgICAgICAg
ICAgICAgICBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKGxhc3RSYW5nZSwgMCwgb2Zmc2V0T2ZOZXh0
TmV3TGluZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQb3NpdGlvbiBlbmRPZkN1cnJl
bnRQYXJhZ3JhcGggPSBsYXN0UmFuZ2UtPmVuZFBvc2l0aW9uKCk7CisKKyAgICAgICAgICAgIGlm
ICghdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBh
ZGRJdGVtKHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoLCBlbmRPZkN1cnJlbnRQYXJhZ3JhcGgsIFdU
Rk1vdmUodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoKSk7CisgICAgICAgICAgICBzdGFydE9mQ3Vy
cmVudFBhcmFncmFwaC5jbGVhcigpOworICAgICAgICAgICAgZW5kT2ZMYXN0TmV3TGluZSA9IG9m
ZnNldE9mTmV4dE5ld0xpbmUgKyAxOworICAgICAgICB9CisKKyAgICAgICAgYXV0byByZW1haW5p
bmdUZXh0ID0gY3VycmVudFRleHQuc3Vic3RyaW5nKGVuZE9mTGFzdE5ld0xpbmUpOworICAgICAg
ICBpZiAocmVtYWluaW5nVGV4dC5sZW5ndGgoKSkKKyAgICAgICAgICAgIHRva2Vuc0luQ3VycmVu
dFBhcmFncmFwaC5hcHBlbmQoTWFuaXB1bGF0aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRpZmllci5n
ZW5lcmF0ZSgpLCByZW1haW5pbmdUZXh0LnRvU3RyaW5nKCkgfSk7CisKKyAgICAgICAgaXRlcmF0
b3IuYWR2YW5jZSgpOworICAgIH0KKworICAgIGlmICghdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBo
LmlzRW1wdHkoKSkKKyAgICAgICAgYWRkSXRlbShzdGFydE9mQ3VycmVudFBhcmFncmFwaCwgZW5k
LmRlZXBFcXVpdmFsZW50KCksIFdURk1vdmUodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoKSk7Cit9
CisKK3ZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OmFkZEl0ZW0oY29uc3QgUG9zaXRp
b24mIHN0YXJ0T2ZQYXJhZ3JhcGgsIGNvbnN0IFBvc2l0aW9uJiBlbmRPZlBhcmFncmFwaCwgVmVj
dG9yPE1hbmlwdWxhdGlvblRva2VuPiYmIHRva2VucykKK3sKKyAgICBBU1NFUlQobV9kb2N1bWVu
dCk7CisgICAgYXV0byByZXN1bHQgPSBtX2l0ZW1zLmFkZChtX2l0ZW1JZGVudGlmaWVyLmdlbmVy
YXRlKCksIE1hbmlwdWxhdGlvbkl0ZW0geyBzdGFydE9mUGFyYWdyYXBoLCBlbmRPZlBhcmFncmFw
aCwgV1RGTW92ZSh0b2tlbnMpIH0pOworICAgIG1fY2FsbGJhY2soKm1fZG9jdW1lbnQsIHJlc3Vs
dC5pdGVyYXRvci0+a2V5LCByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnRva2Vucyk7Cit9CisKK2Jv
b2wgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OmNvbXBsZXRlTWFuaXB1bGF0aW9uKEl0ZW1J
ZGVudGlmaWVyIGl0ZW1JZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+
JiByZXBsYWNlbWVudFRva2VucykKK3sKKyAgICBpZiAoIWl0ZW1JZGVudGlmaWVyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGl0ZW1JdGVyYXRvciA9IG1faXRlbXMuZmluZChp
dGVtSWRlbnRpZmllcik7CisgICAgaWYgKGl0ZW1JdGVyYXRvciA9PSBtX2l0ZW1zLmVuZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGRpZFJlcGxhY2UgPSByZXBsYWNlKGl0
ZW1JdGVyYXRvci0+dmFsdWUsIHJlcGxhY2VtZW50VG9rZW5zKTsKKworICAgIG1faXRlbXMucmVt
b3ZlKGl0ZW1JdGVyYXRvcik7CisKKyAgICByZXR1cm4gZGlkUmVwbGFjZTsKK30KKworYm9vbCBU
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6cmVwbGFjZShjb25zdCBNYW5pcHVsYXRpb25JdGVt
JiBpdGVtLCBjb25zdCBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+JiByZXBsYWNlbWVudFRva2Vu
cykKK3sKKyAgICBUZXh0SXRlcmF0b3IgaXRlcmF0b3IgeyBpdGVtLnN0YXJ0LCBpdGVtLmVuZCB9
OworICAgIHNpemVfdCBjdXJyZW50VG9rZW5JbmRleCA9IDA7CisgICAgSGFzaE1hcDxUb2tlbklk
ZW50aWZpZXIsIFJlZjxOb2RlPj4gdG9rZW5Ub05vZGU7CisgICAgd2hpbGUgKCFpdGVyYXRvci5h
dEVuZCgpKSB7CisgICAgICAgIGF1dG8gc3RyaW5nID0gaXRlcmF0b3IudGV4dCgpLnRvU3RyaW5n
KCk7CisgICAgICAgIGlmIChjdXJyZW50VG9rZW5JbmRleCA+PSBpdGVtLnRva2Vucy5zaXplKCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8mIGN1cnJlbnRUb2tlbiA9
IGl0ZW0udG9rZW5zW2N1cnJlbnRUb2tlbkluZGV4XTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yLnRl
eHQoKSAhPSBjdXJyZW50VG9rZW4uY29udGVudCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgdG9rZW5Ub05vZGUuYWRkKGN1cnJlbnRUb2tlbi5pZGVudGlmaWVyLCAqaXRlcmF0
b3Iubm9kZSgpKTsKKyAgICAgICAgaXRlcmF0b3IuYWR2YW5jZSgpOworICAgICAgICArK2N1cnJl
bnRUb2tlbkluZGV4OworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3QgcHJlc2V2
ZSB0aGUgb3JkZXIgb2YgdGhlIHJlcGxhY2VtZW50IGF0IGFsbC4KKyAgICBmb3IgKGF1dG8mIHRv
a2VuIDogcmVwbGFjZW1lbnRUb2tlbnMpIHsKKyAgICAgICAgYXV0byogbm9kZSA9IHRva2VuVG9O
b2RlLmdldCh0b2tlbi5pZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWlzPENoYXJhY3RlckRhdGE+KG5vZGUpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBzYWZlIHRv
IHVwZGF0ZSBET00gd2hpbGUgaXRlcmF0aW5nIG92ZXIgdGhlIHRva2Vucy4KKyAgICAgICAgZG93
bmNhc3Q8Q2hhcmFjdGVyRGF0YT4obm9kZSktPnNldERhdGEodG9rZW4uY29udGVudCk7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlBvc2l0aW9uLmgiCisjaW5jbHVkZSA8
d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIu
aD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50OworCitjbGFzcyBUZXh0TWFu
aXB1bGF0aW9uQ29udHJvbGxlciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxUZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlcj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyKERvY3VtZW50Jik7CisKKyAgICBlbnVtIFRv
a2VuSWRlbnRpZmllclR5cGUgeyB9OworICAgIHVzaW5nIFRva2VuSWRlbnRpZmllciA9IE9iamVj
dElkZW50aWZpZXI8VG9rZW5JZGVudGlmaWVyVHlwZT47CisKKyAgICBzdHJ1Y3QgTWFuaXB1bGF0
aW9uVG9rZW4geworICAgICAgICBUb2tlbklkZW50aWZpZXIgaWRlbnRpZmllcjsKKyAgICAgICAg
U3RyaW5nIGNvbnRlbnQ7CisKKyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBl
bmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8TWFuaXB1bGF0aW9uVG9rZW4+IGRlY29kZShEZWNvZGVyJik7CisgICAg
fTsKKworICAgIGVudW0gSXRlbUlkZW50aWZpZXJUeXBlIHsgfTsKKyAgICB1c2luZyBJdGVtSWRl
bnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8SXRlbUlkZW50aWZpZXJUeXBlPjsKKworICAgIHVz
aW5nIE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjayA9IFdURjo6RnVuY3Rpb248dm9pZChEb2N1bWVu
dCYsIEl0ZW1JZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+Jik+Owor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3RhcnRPYnNlcnZpbmdQYXJhZ3JhcGhzKE1hbmlwdWxh
dGlvbkl0ZW1DYWxsYmFjayYmKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgY29tcGxldGVN
YW5pcHVsYXRpb24oSXRlbUlkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tl
bj4mKTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgTWFuaXB1bGF0aW9uSXRlbSB7CisgICAgICAg
IFBvc2l0aW9uIHN0YXJ0OworICAgICAgICBQb3NpdGlvbiBlbmQ7CisgICAgICAgIFZlY3RvcjxN
YW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zOworICAgIH07CisKKyAgICB2b2lkIGFkZEl0ZW0oY29u
c3QgUG9zaXRpb24mIHN0YXJ0T2ZQYXJhZ3JhcGgsIGNvbnN0IFBvc2l0aW9uJiBlbmRPZlBhcmFn
cmFwaCwgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiYmKTsKKyAgICBib29sIHJlcGxhY2UoY29u
c3QgTWFuaXB1bGF0aW9uSXRlbSYsIGNvbnN0IFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4mKTsK
KworICAgIFdlYWtQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CisgICAgTWFuaXB1bGF0aW9uSXRl
bUNhbGxiYWNrIG1fY2FsbGJhY2s7CisgICAgSGFzaE1hcDxJdGVtSWRlbnRpZmllciwgTWFuaXB1
bGF0aW9uSXRlbT4gbV9pdGVtczsKKyAgICBJdGVtSWRlbnRpZmllciBtX2l0ZW1JZGVudGlmaWVy
OworICAgIFRva2VuSWRlbnRpZmllciBtX3Rva2VuSWRlbnRpZmllcjsKK307CisKK3RlbXBsYXRl
PGNsYXNzIEVuY29kZXI+Cit2b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVs
YXRpb25Ub2tlbjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2Rl
ciA8PCBpZGVudGlmaWVyIDw8IGNvbnRlbnQ7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+
CitPcHRpb25hbDxUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+
IFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbjo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCit7CisgICAgTWFuaXB1bGF0aW9uVG9rZW4gcmVzdWx0OworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmlkZW50aWZpZXIpKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNvbnRlbnQpKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTE1NzEpCisrKyBTb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDE5
LTEwLTIzICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBh
IG1lY2hhbmlzbSB0byBmaW5kIGFuZCBtYW5pcHVsYXRlIHRleHQgYnkgcGFyYWdyYXBocworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMjg2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgV2Vuc29uIEhzaWVoLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50
cm9kdWNlcyBhIG5ldyBTUEkgdG8gZmluZCBwYXJhZ3JhcGhzIG9mIHRleHQgYW5kIGxldCBjbGll
bnQgcmVwbGFjZSB0aGUgY29udGVudCBvZiBlYWNoIHBhcmFncmFwaC4KKyAgICAgICAgRm9yIG5v
dywgdGhpcyBTUEkgaXMgbGltaXRlZCB0byBmaW5kICYgcmVwbGFjZSBjb250ZW50cyBvZiBtYWlu
IGZyYW1lJ3MgZG9jdW1lbnQuCisKKyAgICAgICAgV0tXZWJWaWV3J3MgX3N0YXJ0VGV4dE1hbmlw
dWxhdGlvbnNXaXRoQ29tcGxldGlvbkhhbmRsZXIgc2VuZHMgU3RhcnRUZXh0TWFuaXB1bGF0aW9u
cyBtZXNzYWdlIHRvIFdlYkNvbnRlbnQgcHJvY2VzcworICAgICAgICB0byBmaW5kIGFsbCBwYXJh
Z3JhcGhzIGluIHRoZSBtYWluIGZyYW1lLiBXZWJDb250ZW50IHByb2Nlc3Mgd2lsbCBzZW5kIGJh
Y2sgRGlkRmluZFRleHRNYW5pcHVsYXRpb25JdGVtIG1lc3NhZ2UKKyAgICAgICAgZm9yIGVhY2gg
cGFyYWdyYXBoLCB3aGljaCBpbiB0dXJuIGNhbGxzIGJhY2sgX1dLVGV4dE1hbmlwdWxhdGlvbkRl
bGVnYXRlJ3MgX3dlYlZpZXc6IGRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbTouCisKKyAgICAg
ICAgVXBvbiByZWNlaXZpbmcgdGhpcyBkZWxlZ2F0ZSBjYWxsYmFjaywgdGhlIGNsaWVudCBjYW4g
aW52b2tlIFdLV2ViVmlldydzIF9jb21wbGV0ZVRleHRNYW5pcHVsYXRpb24gdG8gcmVwbGFjZQor
ICAgICAgICB0aGUgY29udGVudC4gSXQgd2lsbCBzZW5kIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlv
biB0byBXZWJDb250ZW50IHByb2Nlc3MsIHdoaWNoIHdpbGwgaW52b2tlIGNvbXBsZXRlTWFuaXB1
bGF0aW9uCisgICAgICAgIG9uIG1haW4gZnJhbWUncyBkb2N1bWVudCdzIFRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcu
bW06CisgICAgICAgICgtW1dLV2ViVmlldyBfdGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlXSk6IEFk
ZWQuCisgICAgICAgICgtW1dLV2ViVmlldyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOl0p
OiBBZGVkLgorICAgICAgICAoLVtXS1dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRo
Q29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY29tcGxldGVUZXh0
TWFuaXB1bGF0aW9uOmNvbXBsZXRpb246XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXdQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tU
ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25JdGVtLm1tOiBBZGRlZC4KKyAgICAg
ICAgKC1bX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gaW5pdFdpdGhJZGVudGlmaWVyOnRva2Vuczpd
KToKKyAgICAgICAgKC1bX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gaWRlbnRpZmllcl0pOgorICAg
ICAgICAoLVtfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSB0b2tlbnNdKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oOiBBZGRlZC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbTogQWRk
ZWQuCisgICAgICAgICgtW19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiBpbml0XSk6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6c3RhcnRUZXh0TWFuaXB1bGF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6ZGlkRmluZFRleHRNYW5pcHVsYXRpb25JdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5Ojpjb21wbGV0ZVRleHRNYW5pcHVsYXRpb24pOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3Nh
Z2VzLmluOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6c3RhcnRUZXh0TWFuaXB1bGF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OmNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNz
YWdlcy5pbjoKKwogMjAxOS0xMC0yNCAgTWF0dCBMZXdpcyAgPGpsZXdpczNAYXBwbGUuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyNTE1NTguCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9Tb3Vy
Y2VzQ29jb2EudHh0CShyZXZpc2lvbiAyNTE1NzEpCisrKyBTb3VyY2UvV2ViS2l0L1NvdXJjZXND
b2NvYS50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI2MCw2ICsyNjAsOCBAQCBVSVByb2Nlc3MvQVBJ
L0NvY29hL19XS1Byb2Nlc3NQb29sQ29uZmlnCiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1JlbW90
ZVdlYkluc3BlY3RvclZpZXdDb250cm9sbGVyLm1tCiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1Nl
c3Npb25TdGF0ZS5tbQogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0SW5wdXRDb250ZXh0Lm1t
CitVSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25JdGVtLm1tCitVSVByb2Nl
c3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbQogVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tUaHVtYm5haWxWaWV3Lm1tCiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250
ZW50RXh0ZW5zaW9uU3RvcmUubW0KIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRG
aWx0ZXIubW0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAko
cmV2aXNpb24gMjUxNTcxKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQxOSw2ICs5NDE5LDM0IEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpzZXRNb2NrV2ViQXV0aGVudGljYXQKIH0KICNlbmRpZgogCit2b2lkIFdlYlBhZ2VQcm94
eTo6c3RhcnRUZXh0TWFuaXB1bGF0aW9ucyhUZXh0TWFuaXB1bGF0aW9uSXRlbUNhbGxiYWNrJiYg
Y2FsbGJhY2ssIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQoreworICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkgeworICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fdGV4dE1hbmlwdWxh
dGlvbkl0ZW1DYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOworICAgIG1fcHJvY2Vzcy0+Y29u
bmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OlN0YXJ0VGV4
dE1hbmlwdWxhdGlvbnMoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG1fd2ViUGFnZUlE
KTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OmRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbShX
ZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIgaXRlbUlE
LAorICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6
TWFuaXB1bGF0aW9uVG9rZW4+JiB0b2tlbnMpCit7CisgICAgaWYgKCFtX3RleHRNYW5pcHVsYXRp
b25JdGVtQ2FsbGJhY2spCisgICAgICAgIHJldHVybjsKKyAgICBtX3RleHRNYW5pcHVsYXRpb25J
dGVtQ2FsbGJhY2soaXRlbUlELCB0b2tlbnMpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6Y29t
cGxldGVUZXh0TWFuaXB1bGF0aW9uKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
OjpJdGVtSWRlbnRpZmllciBpdGVtSUQsCisgICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4mIHRva2VucywgV1RGOjpG
dW5jdGlvbjx2b2lkIChib29sIHN1Y2Nlc3MpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAg
IGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihm
YWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9wcm9jZXNzLT5jb25uZWN0aW9u
KCktPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFnZTo6Q29tcGxldGVUZXh0TWFu
aXB1bGF0aW9uKGl0ZW1JRCwgdG9rZW5zKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG1f
d2ViUGFnZUlEKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICN1bmRlZiBNRVJHRV9X
SEVFTF9FVkVOVFMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShy
ZXZpc2lvbiAyNTE1NzEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRm9u
dEF0dHJpYnV0ZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPiAvLyBGSVhNRTogTW92ZSBMYXlvdXRWaWV3cG9y
dENvbnN0cmFpbnQgdG8gaXRzIG93biBmaWxlIGFuZCBzdG9wIGluY2x1ZGluZyB0aGlzLgorI2lu
Y2x1ZGUgPFdlYkNvcmUvR2xvYmFsRnJhbWVJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9JbnB1dE1vZGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0xheW91dFBvaW50Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9MYXlvdXRTaXplLmg+CkBAIC05Myw2ICs5NCw3IEBACiAjaW5jbHVkZSA8V2Vi
Q29yZS9TZWFyY2hQb3B1cE1lbnUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRDaGVja2luZy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEdyYW51bGFyaXR5Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlcklu
dGVyZmFjZUxheW91dERpcmVjdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVmlld3BvcnRBcmd1
bWVudHMuaD4KICNpbmNsdWRlIDxtZW1vcnk+CkBAIC0xNjExLDYgKzE2MTMsMTIgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbihXZWJDb3Jl
OjpNb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uJiYpOwogI2VuZGlmCiAKKyAgICB1
c2luZyBUZXh0TWFuaXB1bGF0aW9uSXRlbUNhbGxiYWNrID0gV1RGOjpGdW5jdGlvbjx2b2lkIChX
ZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIsIGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9u
VG9rZW4+Jik+OworICAgIHZvaWQgc3RhcnRUZXh0TWFuaXB1bGF0aW9ucyhUZXh0TWFuaXB1bGF0
aW9uSXRlbUNhbGxiYWNrJiYsIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAg
ICB2b2lkIGRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbShXZWJDb3JlOjpUZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+Jik7CisgICAgdm9pZCBj
b21wbGV0ZVRleHRNYW5pcHVsYXRpb24oV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXI6Okl0ZW1JZGVudGlmaWVyLAorICAgICAgICBjb25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuPiYsIFdURjo6RnVuY3Rpb248
dm9pZCAoYm9vbCBzdWNjZXNzKT4mJik7CisKIHByaXZhdGU6CiAgICAgV2ViUGFnZVByb3h5KFBh
Z2VDbGllbnQmLCBXZWJQcm9jZXNzUHJveHkmLCBSZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4m
Jik7CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKQEAgLTI1NzQsNiArMjU4Miw4IEBA
IHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFN1c3BlbmRlZFBhZ2VQcm94eT4gbV9zdXNw
ZW5kZWRQYWdlS2VwdFRvUHJldmVudEZsYXNoaW5nOwogICAgIFdlYWtQdHI8U3VzcGVuZGVkUGFn
ZVByb3h5PiBtX2xhc3RTdXNwZW5kZWRQYWdlOwogCisgICAgVGV4dE1hbmlwdWxhdGlvbkl0ZW1D
YWxsYmFjayBtX3RleHRNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2s7CisKICNpZiBIQVZFKFBFTkNJ
TEtJVCkKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RWRpdGFibGVJbWFnZUNvbnRyb2xsZXI+IG1fZWRp
dGFibGVJbWFnZUNvbnRyb2xsZXI7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI1MTU3MSkKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2lu
ZyBjb3B5KQpAQCAtNTgxLDQgKzU4MSw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAg
ICAgU2VuZE1lc3NhZ2VUb1dlYlZpZXcoc3RydWN0IFdlYktpdDo6VXNlck1lc3NhZ2UgdXNlck1l
c3NhZ2UpCiAgICAgU2VuZE1lc3NhZ2VUb1dlYlZpZXdXaXRoUmVwbHkoc3RydWN0IFdlYktpdDo6
VXNlck1lc3NhZ2UgdXNlck1lc3NhZ2UpIC0+IChzdHJ1Y3QgV2ViS2l0OjpVc2VyTWVzc2FnZSBy
ZXBseU1lc3NhZ2UpIEFzeW5jCiAjZW5kaWYKKworICAgIERpZEZpbmRUZXh0TWFuaXB1bGF0aW9u
SXRlbShXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIg
aXRlbUlELCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlw
dWxhdGlvblRva2VuPiB0b2tlbnMpCisKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkocmV2aXNpb24gMjUxNTcxKQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpA
QCAtOTksNiArOTksOSBAQAogI2ltcG9ydCAiX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnlJbnRlcm5h
bC5oIgogI2ltcG9ydCAiX1dLU2Vzc2lvblN0YXRlSW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1Rl
eHRJbnB1dENvbnRleHRJbnRlcm5hbC5oIgorI2ltcG9ydCAiX1dLVGV4dE1hbmlwdWxhdGlvbkRl
bGVnYXRlLmgiCisjaW1wb3J0ICJfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oIgorI2ltcG9ydCAi
X1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmgiCiAjaW1wb3J0ICJfV0tWaXNpdGVkTGlua1N0b3Jl
SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1dlYnNpdGVQb2xpY2llc0ludGVybmFsLmgiCiAjaW1w
b3J0IDxXZWJDb3JlL0VsZW1lbnRDb250ZXh0Lmg+CkBAIC0xMTQsNiArMTE3LDcgQEAKICNpbXBv
cnQgPFdlYkNvcmUvU2V0dGluZ3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1N0cmluZ1V0aWxpdGllcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9U
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9WYWxpZGF0aW9u
QnViYmxlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1ZpZXdwb3J0QXJndW1lbnRzLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1dyaXRpbmdNb2RlLmg+CkBAIC0yNzcsNiArMjgxLDggQEAgc3RhdGljIE9wdGlv
bmFsPFdlYkNvcmU6OlNjcm9sbGJhck92ZXJsYQogCiAgICAgQk9PTCBfdXNlUGxhdGZvcm1GaW5k
VUk7CiAKKyAgICBXZWFrT2JqQ1B0cjxpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlPj4g
X3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTsKKwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAg
ICAgUmV0YWluUHRyPF9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5PiBfcmVtb3RlT2JqZWN0UmVnaXN0
cnk7CiAKQEAgLTc0NjEsNiArNzQ2Nyw2NSBAQCAtICh2b2lkKV9leGVjdXRlRWRpdENvbW1hbmQ6
KE5TU3RyaW5nICopCiAgICAgfSk7CiB9CiAKKy0gKGlkIDxfV0tUZXh0TWFuaXB1bGF0aW9uRGVs
ZWdhdGU+KV90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUKK3sKKyAgICByZXR1cm4gX3RleHRNYW5p
cHVsYXRpb25EZWxlZ2F0ZS5nZXRBdXRvcmVsZWFzZWQoKTsKK30KKworLSAodm9pZClfc2V0VGV4
dE1hbmlwdWxhdGlvbkRlbGVnYXRlOihpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlPilk
ZWxlZ2F0ZQoreworICAgIF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgPSBkZWxlZ2F0ZTsKK30K
KworLSAodm9pZClfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCheKSgpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgaWYgKCFfdGV4dE1hbmlwdWxhdGlv
bkRlbGVnYXRlKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFfcGFnZSkKKyAgICAgICAgcmV0
dXJuOworICAgIF9wYWdlLT5zdGFydFRleHRNYW5pcHVsYXRpb25zKFt3ZWFrU2VsZiA9IFdlYWtP
YmpDUHRyPFdLV2ViVmlldz4oc2VsZildIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlcjo6SXRlbUlkZW50aWZpZXIgaXRlbUlELAorICAgICAgICBjb25zdCBWZWN0b3I8V2ViQ29y
ZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuPiYgdG9rZW5z
KSB7CisgICAgICAgIGlmICghd2Vha1NlbGYpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgYXV0byByZXRhaW5lZFNlbGYgPSB3ZWFrU2VsZi5nZXQoKTsKKyAgICAgICAgYXV0byBkZWxl
Z2F0ZSA9IFtyZXRhaW5lZFNlbGYgX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZV07CisgICAgICAg
IGlmICghZGVsZWdhdGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgTlNNdXRhYmxl
QXJyYXkgKndrVG9rZW5zID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnRva2Vu
cy5zaXplKCldOworICAgICAgICBmb3IgKGF1dG8mIHRva2VuIDogdG9rZW5zKSB7CisgICAgICAg
ICAgICBhdXRvIHdrVG9rZW4gPSBhZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuIGFs
bG9jXSBpbml0XSk7CisgICAgICAgICAgICBbd2tUb2tlbiBzZXRJZGVudGlmaWVyOlN0cmluZzo6
bnVtYmVyKHRva2VuLmlkZW50aWZpZXIudG9VSW50NjQoKSldOworICAgICAgICAgICAgW3drVG9r
ZW4gc2V0Q29udGVudDp0b2tlbi5jb250ZW50XTsKKyAgICAgICAgICAgIFt3a1Rva2VucyBhZGRP
YmplY3Q6d2tUb2tlbi5nZXQoKV07CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGl0ZW0gPSBh
ZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRpZmll
cjpTdHJpbmc6Om51bWJlcihpdGVtSUQudG9VSW50NjQoKSkgdG9rZW5zOndrVG9rZW5zXSk7Cisg
ICAgICAgIFtkZWxlZ2F0ZSBfd2ViVmlldzpyZXRhaW5lZFNlbGYuZ2V0KCkgZGlkRmluZFRleHRN
YW5pcHVsYXRpb25JdGVtOml0ZW0uZ2V0KCldOworICAgIH0sIFtjYXB0dXJlZENvbXBsZXRpb25C
bG9jayA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildICgpIHsKKyAgICAgICAgY2Fw
dHVyZWRDb21wbGV0aW9uQmxvY2soKTsKKyAgICB9KTsKK30KKworLSAodm9pZClfY29tcGxldGVU
ZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWl0ZW0gY29tcGxldGlv
bjoodm9pZCheKShCT09MIHN1Y2Nlc3MpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgaWYgKCFf
cGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBpdGVtSUQgPSBtYWtlT2JqZWN0SWRl
bnRpZmllcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZp
ZXJUeXBlPihTdHJpbmcoaXRlbS5pZGVudGlmaWVyKS50b1VJbnQ2NCgpKTsKKworICAgIFZlY3Rv
cjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+
IHRva2VuczsKKyAgICBmb3IgKF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiAqd2tUb2tlbiBpbiBp
dGVtLnRva2VucykgeworICAgICAgICBhdXRvIHRva2VuSUQgPSBtYWtlT2JqZWN0SWRlbnRpZmll
cjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6VG9rZW5JZGVudGlmaWVyVHlw
ZT4oU3RyaW5nKHdrVG9rZW4uaWRlbnRpZmllcikudG9VSW50NjQoKSk7CisgICAgICAgIHRva2Vu
cy5hcHBlbmQoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlv
blRva2VuIHsgdG9rZW5JRCwgd2tUb2tlbi5jb250ZW50IH0pOworICAgIH0KKworICAgIF9wYWdl
LT5jb21wbGV0ZVRleHRNYW5pcHVsYXRpb24oaXRlbUlELCB0b2tlbnMsIFtjYXB0dXJlZENvbXBs
ZXRpb25CbG9jayA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChib29sIHN1Y2Nl
c3MpIHsKKyAgICAgICAgY2FwdHVyZWRDb21wbGV0aW9uQmxvY2soc3VjY2Vzcyk7CisgICAgfSk7
Cit9CisKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogCiAtIChDR1JlY3QpX2RyYWdDYXJldFJl
Y3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2
YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlld1ByaXZhdGUuaAkocmV2aXNpb24gMjUxNTcxKQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTEz
LDYgKzExMyw3IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tSZWN0RWQKIEBj
bGFzcyBfV0tTYWZlQnJvd3NpbmdXYXJuaW5nOwogQGNsYXNzIF9XS1Nlc3Npb25TdGF0ZTsKIEBj
bGFzcyBfV0tUZXh0SW5wdXRDb250ZXh0OworQGNsYXNzIF9XS1RleHRNYW5pcHVsYXRpb25JdGVt
OwogQGNsYXNzIF9XS1RodW1ibmFpbFZpZXc7CiBAY2xhc3MgX1dLV2Vic2l0ZVBvbGljaWVzOwog
QGNsYXNzIF9XS1dlYlZpZXdQcmludEZvcm1hdHRlcjsKQEAgLTEyMCw5ICsxMjEsMTAgQEAgdHlw
ZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1JlY3RFZAogQHByb3RvY29sIFdLSGlzdG9y
eURlbGVnYXRlUHJpdmF0ZTsKIEBwcm90b2NvbCBfV0tEaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRl
OwogQHByb3RvY29sIF9XS0ZpbmREZWxlZ2F0ZTsKK0Bwcm90b2NvbCBfV0tGdWxsc2NyZWVuRGVs
ZWdhdGU7CiBAcHJvdG9jb2wgX1dLSWNvbkxvYWRpbmdEZWxlZ2F0ZTsKIEBwcm90b2NvbCBfV0tJ
bnB1dERlbGVnYXRlOwotQHByb3RvY29sIF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZTsKK0Bwcm90b2Nv
bCBfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU7CiAKIEBpbnRlcmZhY2UgV0tXZWJWaWV3IChX
S1ByaXZhdGUpCiAKQEAgLTU3NSw2ICs1NzcsMTAgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUlu
dGVnZXIsIF9XS1JlY3RFZAogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tJbnNw
ZWN0b3IgKl9pbnNwZWN0b3IgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEy
LjIpKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgX1dLRnJhbWVIYW5kbGUgKl9t
YWluRnJhbWUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIAor
QHByb3BlcnR5IChub25hdG9taWMsIHdlYWssIHNldHRlcj1fc2V0VGV4dE1hbmlwdWxhdGlvbkRl
bGVnYXRlOikgaWQgPF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4gX3RleHRNYW5pcHVsYXRp
b25EZWxlZ2F0ZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9T
X1RCQSkpOworLSAodm9pZClfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb21wbGV0aW9uSGFu
ZGxlcjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfY29tcGxldGVUZXh0
TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWl0ZW0gY29tcGxldGlvbjoo
dm9pZCheKShCT09MIHN1Y2Nlc3MpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCBzZXR0ZXI9X3NldFNjcm9sbGluZ1VwZGF0ZXNEaXNhYmxlZEZvclRlc3Rpbmc6KSBCT09M
IF9zY3JvbGxpbmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIC0gKHZvaWQpX3Byb2Nlc3NXaWxs
U3VzcGVuZEltbWluZW50bHlGb3JUZXN0aW5nOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uRGVs
ZWdhdGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KKwor
I2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKK0BjbGFzcyBfV0tUZXh0TWFuaXB1
bGF0aW9uSXRlbTsKKworQHByb3RvY29sIF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSA8TlNP
YmplY3Q+CisKK0BvcHRpb25hbAorCistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJW
aWV3IGRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbTooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0g
KilpdGVtOworCitAZW5kCisKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0
aW9uSXRlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91
bmRhdGlvbi5oPgorCitAY2xhc3MgX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuOworCitXS19DTEFT
U19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKK0BpbnRlcmZh
Y2UgX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gOiBOU09iamVjdAorCistIChpbnN0YW5jZXR5cGUp
aW5pdCBOU19VTkFWQUlMQUJMRTsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aElkZW50aWZpZXI6
KE5TU3RyaW5nICopaWRlbnRpZmllciB0b2tlbnM6KE5TQXJyYXk8X1dLVGV4dE1hbmlwdWxhdGlv
blRva2VuICo+ICopdG9rZW5zOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNv
cHkpIE5TU3RyaW5nICppZGVudGlmaWVyOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
LCBjb3B5KSBOU0FycmF5PF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiAqPiAqdG9rZW5zOworCitA
ZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlw
dWxhdGlvbkl0ZW0ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25JdGVtLm1tCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5tbQko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oIgorCisjaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+CisKK0BpbXBsZW1lbnRhdGlvbiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRl
bSB7CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBfaWRlbnRpZmllcjsKKyAgICBSZXRhaW5QdHI8
TlNBcnJheTxfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gKj4+IF90b2tlbnM7Cit9CisKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aElkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllciB0b2tl
bnM6KE5TQXJyYXk8X1dLVGV4dE1hbmlwdWxhdGlvblRva2VuICo+ICopdG9rZW5zCit7CisgICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBf
aWRlbnRpZmllciA9IGlkZW50aWZpZXI7CisgICAgX3Rva2VucyA9IHRva2VuczsKKyAgICByZXR1
cm4gc2VsZjsKK30KKworLSAoTlNTdHJpbmcgKilpZGVudGlmaWVyCit7CisgICAgcmV0dXJuIF9p
ZGVudGlmaWVyLmdldCgpOworfQorCistIChOU0FycmF5PF9XS1RleHRNYW5pcHVsYXRpb25Ub2tl
biAqPiAqKXRva2VucworeworICAgIHJldHVybiBfdG9rZW5zLmdldCgpOworfQorCitAZW5kCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlv
blRva2VuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0L1dL
Rm91bmRhdGlvbi5oPgorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworV0tf
Q0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50
ZXJmYWNlIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljLCBjb3B5KSBOU1N0cmluZyAqaWRlbnRpZmllcjsKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljLCBjb3B5KSBOU1N0cmluZyAqY29udGVudDsKKworQGVuZApJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxh
dGlvblRva2VuLm1tCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4ubW0JKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiX1dL
VGV4dE1hbmlwdWxhdGlvblRva2VuLmgiCisKKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKwor
QGltcGxlbWVudGF0aW9uIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbgorQGVuZApJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvRG93bmxvYWRQcm94eU1hcENvY29hLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0Rvd25sb2FkUHJveHlNYXBD
b2NvYS5tbQkocmV2aXNpb24gMjUxNTcxKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvRG93bmxvYWRQcm94eU1hcENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW1wb3J0ICJEb3dubG9hZFByb3h5TWFwLmgiCiAKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQorI2ltcG9ydCA8d3RmL1dlYWtQdHIuaD4KICNpbXBvcnQgPFVJS2l0L1VJS2l0Lmg+CiAj
ZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0
aW9uL1NPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlvblNlc3Npb24u
bW0JKHJldmlzaW9uIDI1MTU3MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NP
QXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw2ICszNCw3IEBACiAjaW1wb3J0ICJBUElVSUNsaWVudC5oIgogI2ltcG9ydCAiU09BdXRo
b3JpemF0aW9uTG9hZFBvbGljeS5oIgogI2ltcG9ydCAiV0tVSURlbGVnYXRlUHJpdmF0ZS5oIgor
I2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgog
I2ltcG9ydCAiV2Vic2l0ZURhdGFTdG9yZS5oIgogI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJl
c3BvbnNlLmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tGdWxsU2NyZWVu
V2luZG93Q29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5tbQkocmV2aXNpb24gMjUxNTcxKQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUv
VmlkZW9GdWxsc2NyZWVuTW9kZWwuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUZ1bGxTY3Jl
ZW5QbGFjZWhvbGRlclZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUZ1bGxTY3JlZW5X
aW5kb3cuaD4KKyNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW1wb3J0
IDxwYWwvc3lzdGVtL1NsZWVwRGlzYWJsZXIuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNl
cHRpb25zLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjUxNTcxKQorKysgU291cmNlL1dlYktpdC9XZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTMzNCw2ICsxMzM0
LDkgQEAKIAkJOTlFNzE0QzUxQzEyNEEwNDAwNjY1QjNBIC8qIF9XS0F1dG9tYXRpb25EZWxlZ2F0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTlFNzE0
QzExQzEyNDlFNjAwNjY1QjNBIC8qIF9XS0F1dG9tYXRpb25EZWxlZ2F0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTk5RTcxODlBMjFGNzlEOUUw
MDU1RTk3NSAvKiBfV0tUb3VjaEV2ZW50R2VuZXJhdG9yLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTlFNzE4OTYyMUY3OUQ5RDAwNTVFOTc1IC8qIF9X
S1RvdWNoRXZlbnRHZW5lcmF0b3IubW0gKi87IH07CiAJCTk5RTcxODlDMjFGNzlEOUUwMDU1RTk3
NSAvKiBfV0tUb3VjaEV2ZW50R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5OUU3MTg5ODIxRjc5RDlFMDA1NUU5NzUgLyogX1dLVG91Y2hF
dmVudEdlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTlCMDJFMENCMjM1RUI5NTMwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9u
RGVsZWdhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDlCMDJFMEM5MjM1RUI2MkQwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk5QjAy
RTBDQzIzNUVCOTU3MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMDJFMENBMjM1RUI4ODQw
MDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTlCMDJFMEQ3MjM1RkM5NEYwMDQwNDRCMiAv
KiBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDlCMDJFMENEMjM1RUI5NjcwMDQwNDRCMiAvKiBfV0tUZXh0TWFu
aXB1bGF0aW9uVG9rZW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk5RkI1RjM5NTE2OUU2QTgwMDAyQzI1QkYgLyogV0tDb250ZXh0UHJpdmF0ZU1h
Yy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUZCNUYz
OTMxNjlFNkE4MDAwMkMyNUJGIC8qIFdLQ29udGV4dFByaXZhdGVNYWMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBMTAyQTcwODFFQzBFRUU5MDBE
ODFEODIgLyogY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyIEVTUi5wbHVnaW4uc2IgaW4gQ29w
eSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0E1RTM5NDkxRDVCRDhBNzAwQjRCN0NFIC8qIGNvbS5tYWNyb21lZGlhLkZsYXNoIFBs
YXllciBFU1IucGx1Z2luLnNiICovOyB9OwogCQlBMTA0NkVBMTIwNzkyNjMxMDBGMEM1RDggLyog
V0tQREZWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMTA0NkU5RjIwNzkyNjMxMDBGMEM1RDggLyogV0tQREZWaWV3LmggKi87IH07CkBAIC0xNzI5
LDggKzE3MzIsNiBAQAogCQkJY29tcGlsZXJTcGVjID0gY29tLmFwcGxlLmNvbXBpbGVycy5wcm94
eS5zY3JpcHQ7CiAJCQlmaWxlUGF0dGVybnMgPSAiKi5oIjsKIAkJCWZpbGVUeXBlID0gcGF0dGVy
bi5wcm94eTsKLQkJCWlucHV0RmlsZXMgPSAoCi0JCQkpOwogCQkJaXNFZGl0YWJsZSA9IDE7CiAJ
CQlvdXRwdXRGaWxlcyA9ICgKIAkJCQkiJChIRUFERVJfT1VUUFVUX0RJUikvJChJTlBVVF9GSUxF
X05BTUUpIiwKQEAgLTQwNTEsNiArNDA1MiwxMSBAQAogCQk5OUU3MTg5NjIxRjc5RDlEMDA1NUU5
NzUgLyogX1dLVG91Y2hFdmVudEdlbmVyYXRvci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IF9XS1RvdWNoRXZlbnRHZW5lcmF0b3IubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTk5RTcxODk4MjFGNzlEOUUwMDU1RTk3NSAvKiBfV0tUb3VjaEV2ZW50
R2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1RvdWNoRXZl
bnRHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTlGNjQyRDIxRkFC
RTM3ODAwOTYyMUU5IC8qIENvb3JkaW5hdGVTeXN0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29vcmRpbmF0ZVN5c3RlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk5QjAyRTBDOTIzNUVCNjJEMDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVn
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjAyRTBDQTIzNUVCODg0MDA0MDQ0QjIgLyogX1dL
VGV4dE1hbmlwdWxhdGlvbkl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLVGV4dE1hbmlwdWxhdGlv
bkl0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUIwMkUwQ0QyMzVFQjk2NzAw
NDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tU
ZXh0TWFuaXB1bGF0aW9uVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUIw
MkUwQ0UyMzVFQkIxNDAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUIwMkUwRDAyMzVFQkNDQTAwNDA0NEIyIC8qIF9XS1RleHRN
YW5pcHVsYXRpb25JdGVtLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLVGV4dE1hbmlwdWxh
dGlvbkl0ZW0ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCQzU5RDZDMUVGQ0ND
QjYwMDFFOEQwOSAvKiBDYWxsYmFja0lELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENhbGxiYWNrSUQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJDNTlENkQx
RUZDREM2RDAwMUU4RDA5IC8qIE9wdGlvbmFsQ2FsbGJhY2tJRC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBPcHRpb25hbENhbGxiYWNrSUQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOUY1NEY4OEUxNjQ4OEU4NzAwN0RGODFBIC8qIEF1eGlsaWFyeVByb2Nlc3NN
YWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBdXhpbGlhcnlQ
cm9jZXNzTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjM1MCw2ICs2MzU2
LDExIEBACiAJCQkJMkRFOUIxMzgyMjMxRjYxQzAwNTI4N0I3IC8qIF9XS1RleHRJbnB1dENvbnRl
eHQuaCAqLywKIAkJCQkyREU5QjEzNzIyMzFGNjFDMDA1Mjg3QjcgLyogX1dLVGV4dElucHV0Q29u
dGV4dC5tbSAqLywKIAkJCQkyREU5QjEzQjIyMzFGNzdDMDA1Mjg3QjcgLyogX1dLVGV4dElucHV0
Q29udGV4dEludGVybmFsLmggKi8sCisJCQkJOUIwMkUwQzkyMzVFQjYyRDAwNDA0NEIyIC8qIF9X
S1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oICovLAorCQkJCTlCMDJFMENBMjM1RUI4ODQwMDQw
NDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oICovLAorCQkJCTlCMDJFMEQwMjM1RUJD
Q0EwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5tbSAqLywKKwkJCQk5QjAyRTBD
RDIzNUVCOTY3MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmggKi8sCisJCQkJ
OUIwMkUwQ0UyMzVFQkIxNDAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbSAq
LywKIAkJCQkyRDZCMzcxOTE4QTk2N0FEMDA0MkFFODAgLyogX1dLVGh1bWJuYWlsVmlldy5oICov
LAogCQkJCTJENkIzNzFBMThBOTY3QUQwMDQyQUU4MCAvKiBfV0tUaHVtYm5haWxWaWV3Lm1tICov
LAogCQkJCTJEQUNFNjREMThBREJGRjAwMEU0Q0E3NiAvKiBfV0tUaHVtYm5haWxWaWV3SW50ZXJu
YWwuaCAqLywKQEAgLTkzMTksNiArOTMzMCw5IEBACiAJCQkJMUEwMDJENDMxOTZCMzM3MDAwQjlB
RDQ0IC8qIF9XS1Nlc3Npb25TdGF0ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkyREU5
QjEzQTIyMzFGNjFDMDA1Mjg3QjcgLyogX1dLVGV4dElucHV0Q29udGV4dC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkRFOUIxM0MyMjMxRjc3QzAwNTI4N0I3IC8qIF9XS1RleHRJbnB1dENvbnRleHRJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJOUIwMkUwQ0IyMzVFQjk1MzAwNDA0NEIyIC8q
IF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOUIwMkUw
Q0MyMzVFQjk1NzAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk5QjAyRTBENzIzNUZDOTRGMDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlv
blRva2VuLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDZCMzcxQjE4QTk2N0FEMDA0MkFFODAgLyog
X1dLVGh1bWJuYWlsVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRBQ0U2NEUxOEFEQkZGMDAw
RTRDQTc2IC8qIF9XS1RodW1ibmFpbFZpZXdJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTlFNzE4OUMyMUY3OUQ5RTAwNTVFOTc1IC8qIF9XS1RvdWNoRXZlbnRHZW5lcmF0b3IuaCBpbiBI
ZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAJKHJldmlzaW9uIDI1MTU3MSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODM2LDYgKzY4MzYsNTEgQEAg
T3B0aW9uYWw8V2ViQ29yZTo6RWxlbWVudENvbnRleHQ+IFdlYlBhZwogICAgIHJldHVybiBXZWJD
b3JlOjpFbGVtZW50Q29udGV4dCB7IGVsZW1lbnRSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzKGVs
ZW1lbnQsICpmcmFtZSksIG1faWRlbnRpZmllciwgZG9jdW1lbnQuaWRlbnRpZmllcigpLCBkb2N1
bWVudC5pZGVudGlmaWVyRm9yRWxlbWVudChlbGVtZW50KSB9OwogfQogCit2b2lkIFdlYlBhZ2U6
OnN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQoreworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBhdXRvIG1haW5Eb2N1bWVudCA9IG1ha2VSZWZQdHIobV9wYWdlLT5tYWluRnJhbWUoKS5kb2N1
bWVudCgpKTsKKyAgICBpZiAoIW1haW5Eb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bWFpbkRvY3VtZW50LT50ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcigpLnN0YXJ0T2JzZXJ2aW5n
UGFyYWdyYXBocyhbd2ViUGFnZSA9IG1ha2VXZWFrUHRyKCp0aGlzKV0gKFdlYkNvcmU6OkRvY3Vt
ZW50JiBkb2N1bWVudCwKKyAgICAgICAgV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1JZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuPiYgdG9rZW5zKSB7
CisgICAgICAgIGF1dG8qIGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKTsKKyAgICAgICAgaWYgKCF3
ZWJQYWdlIHx8ICFmcmFtZSB8fCB3ZWJQYWdlLT5tYWluRnJhbWUoKSAhPSBmcmFtZSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvKiB3ZWJGcmFtZSA9IFdlYkZyYW1lOjpmcm9t
Q29yZUZyYW1lKCpmcmFtZSk7CisgICAgICAgIGlmICghd2ViRnJhbWUpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpE
aWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW0oaXRlbUlkZW50aWZpZXIsIHRva2VucykpOworICAg
IH0pOworICAgIC8vIEZvciBub3csIHdlIGFzc3VtZSBzdGFydE9ic2VydmluZ1BhcmFncmFwaHMg
ZmluZCBhbGwgcGFyYWdyYXBocyBzeW5jaHJvbm91c2x5IGF0IG9uY2UuCisgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKK30KKwordm9pZCBXZWJQYWdlOjpjb21wbGV0ZVRleHRNYW5pcHVsYXRpb24o
V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1J
RCwKKyAgICBjb25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6
Ok1hbmlwdWxhdGlvblRva2VuPiYgdG9rZW5zLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGF1dG8gY29tcGxldGVNYW5pcHVsYXRpb24g
PSBbJl0geworICAgICAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICBhdXRvIG1haW5Eb2N1bWVudCA9IG1ha2VSZWZQdHIobV9wYWdlLT5tYWluRnJh
bWUoKS5kb2N1bWVudCgpKTsKKyAgICAgICAgaWYgKCFtYWluRG9jdW1lbnQpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXV0byogY29udHJvbGxlciA9IG1haW5Eb2N1bWVu
dC0+dGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXJJZkV4aXN0cygpOworICAgICAgICBpZiAoIWNv
bnRyb2xsZXIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmV0dXJuIGNv
bnRyb2xsZXItPmNvbXBsZXRlTWFuaXB1bGF0aW9uKGl0ZW1JRCwgdG9rZW5zKTsKKyAgICB9Owor
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGNvbXBsZXRlTWFuaXB1bGF0aW9uKCkpOworfQorCiBQQUw6
OlNlc3Npb25JRCBXZWJQYWdlOjpzZXNzaW9uSUQoKSBjb25zdAogewogICAgIHJldHVybiBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5zZXNzaW9uSUQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDI1MTU3MSkKKysrIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzMs
NiArNzMsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUG9pbnRlcklELmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9TZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9T
aGFyZURhdGEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Vc2VyQWN0aXZpdHkuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1VzZXJDb250ZW50VHlwZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJJbnRlcmZhY2VMYXlv
dXREaXJlY3Rpb24uaD4KQEAgLTExOTYsNiArMTE5NywxMCBAQCBwdWJsaWM6CiAgICAgV2ViQ29y
ZTo6RWxlbWVudCogZWxlbWVudEZvckNvbnRleHQoY29uc3QgV2ViQ29yZTo6RWxlbWVudENvbnRl
eHQmKSBjb25zdDsKICAgICBPcHRpb25hbDxXZWJDb3JlOjpFbGVtZW50Q29udGV4dD4gY29udGV4
dEZvckVsZW1lbnQoV2ViQ29yZTo6RWxlbWVudCYpIGNvbnN0OwogCisgICAgdm9pZCBzdGFydFRl
eHRNYW5pcHVsYXRpb25zKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBj
b21wbGV0ZVRleHRNYW5pcHVsYXRpb24oV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXI6Okl0ZW1JZGVudGlmaWVyLAorICAgICAgICBjb25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuPiYsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCk+JiYpOworCiAjaWYgRU5BQkxFKEFQUExFX1BBWSkKICAgICBXZWJQYXlt
ZW50Q29vcmRpbmF0b3IqIHBheW1lbnRDb29yZGluYXRvcigpOwogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMu
aW4JKHJldmlzaW9uIDI1MTU3MSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTU4Miw0ICs1ODIsNyBAQCBH
ZW5lcmF0ZVN5bnRoZXRpY0VkaXRpbmdDb21tYW5kKGVudW06dWluCiAgICAgU2VuZE1lc3NhZ2VU
b1dlYkV4dGVuc2lvbihzdHJ1Y3QgV2ViS2l0OjpVc2VyTWVzc2FnZSB1c2VyTWVzc2FnZSkKICAg
ICBTZW5kTWVzc2FnZVRvV2ViRXh0ZW5zaW9uV2l0aFJlcGx5KHN0cnVjdCBXZWJLaXQ6OlVzZXJN
ZXNzYWdlIHVzZXJNZXNzYWdlKSAtPiAoc3RydWN0IFdlYktpdDo6VXNlck1lc3NhZ2UgcmVwbHlN
ZXNzYWdlKSBBc3luYwogI2VuZGlmCisKKyAgICBTdGFydFRleHRNYW5pcHVsYXRpb25zKCkgLT4g
KCkgQXN5bmMKKyAgICBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb24oV2ViQ29yZTo6VGV4dE1hbmlw
dWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1JRCwgVmVjdG9yPFdlYkNvcmU6
OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zKSAt
PiAoYm9vbCBzdWNjZXNzKSBBc3luYwogfQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjUxNTcxKQorKysgVG9vbHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTktMTAtMjMgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIGEgbWVjaGFuaXNtIHRvIGZp
bmQgYW5kIG1hbmlwdWxhdGUgdGV4dCBieSBwYXJhZ3JhcGhzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDMyODYKKworICAgICAgICBSZXZpZXdlZCBi
eSBXZW5zb24gSHNpZWguCisKKyAgICAgICAgQWRkZWQgYmFzaWMgQVBJIHRlc3RzIGZvciB0aGUg
bmV3IFNQSS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbTogQWRkZWQuCisgICAgICAgICgtW1RleHRNYW5pcHVs
YXRpb25EZWxlZ2F0ZSBpbml0XSk6CisgICAgICAgICgtW1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0
ZSBfd2ViVmlldzpkaWRGaW5kSXRlbTpmb3JGcmFtZTpdKToKKyAgICAgICAgKC1bVGV4dE1hbmlw
dWxhdGlvbkRlbGVnYXRlIGl0ZW1zXSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpjcmVhdGVJ
dGVtKToKKwogMjAxOS0xMC0yNCAgTWF0dCBMZXdpcyAgPGpsZXdpczNAYXBwbGUuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyNTE1NTguCkluZGV4OiBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjUxNTcxKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc0
MCw2ICs3NDAsNyBAQAogCQk5OTg0RkFDQzFDRkZBRjYwMDA4RDE5OEMgLyogV0tXZWJWaWV3VGV4
dElucHV0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTk4NEZBQ0ExQ0ZGQUVFRTAwOEQxOThDIC8qIFdLV2ViVmlld1RleHRJbnB1dC5tbSAqLzsgfTsK
IAkJOTk4NEZBQ0UxQ0ZGQjA5MDAwOEQxOThDIC8qIGVkaXRhYmxlLWJvZHkuaHRtbCBpbiBDb3B5
IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OTg0RkFDRDFD
RkZCMDM4MDA4RDE5OEMgLyogZWRpdGFibGUtYm9keS5odG1sICovOyB9OwogCQk5OTk5MTA4QjFG
MzkzQzk2MDA4QUQ0NTUgLyogQ29weWluZy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk5OTkxMDhBMUYzOTNDOEIwMDhBRDQ1NSAvKiBDb3B5aW5nLm1t
ICovOyB9OworCQk5QjAyRTBENjIzNUZBNDdEMDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbi5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMDJFMEQ1
MjM1RkE0N0QwMDQwNDRCMiAvKiBUZXh0TWFuaXB1bGF0aW9uLm1tICovOyB9OwogCQk5QjA3ODZB
NTFDNTg4NUMzMDBEMTU5RTMgLyogSW5qZWN0ZWRCdW5kbGVNYWtlQWxsU2hhZG93Um9vdHNPcGVu
X0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5QjA3ODZBNDFDNTg4NUMzMDBEMTU5RTMgLyogSW5qZWN0ZWRCdW5kbGVNYWtlQWxsU2hhZG93
Um9vdHNPcGVuX0J1bmRsZS5jcHAgKi87IH07CiAJCTlCMTlDREEwMUYwNkRGRTMwMDA1NDhERCAv
KiBOZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIxOUNEOUUxRjA2REZFMzAwMDU0
OEREIC8qIE5ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nvbm5lY3Rpb24ubW0gKi87IH07
CiAJCTlCMUY2Rjc4MUY5MDU1ODQwMEI1NTc0NCAvKiBDb3B5SFRNTC5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMTA1NjQxMUY5MDQ1QzcwMEQ1NTgz
RiAvKiBDb3B5SFRNTC5tbSAqLzsgfTsKQEAgLTExMjgsNyArMTEyOSw2IEBACiAJCQlkc3RQYXRo
ID0gVGVzdFdlYktpdEFQSS5yZXNvdXJjZXM7CiAJCQlkc3RTdWJmb2xkZXJTcGVjID0gNzsKIAkJ
CWZpbGVzID0gKAotCQkJCTU3OTgzMzdFMjM2MDE5QTQwMDhFNTU0NyAvKiB3ZWItYXV0aGVudGlj
YXRpb24tbWFrZS1jcmVkZW50aWFsLWhpZC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJ
CTU1QTgxN0ZGMjE4MTAyMUEwMDA0QTM5QSAvKiAxMDB4MTAwLXJlZC50Z2EgaW4gQ29weSBSZXNv
dXJjZXMgKi8sCiAJCQkJMUE5RTUyQzkxM0U2NUVGNDAwNjkxN0Y1IC8qIDE4LWNoYXJhY3RlcnMu
aHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1NUE4MTgwMDIxODEwMjIxMDAwNEEzOUEg
LyogNDAweDQwMC1ncmVlbi5wbmcgaW4gQ29weSBSZXNvdXJjZXMgKi8sCkBAIC0xNDU5LDYgKzE0
NTksNyBAQAogCQkJCTU3NjYzREVBMjM0RUE2NkQwMEU4NUUwOSAvKiB3ZWItYXV0aGVudGljYXRp
b24tZ2V0LWFzc2VydGlvbi1uZmMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1Nzc0
NTREMjIzNTlCQjAxMDA4RTFFRDcgLyogd2ViLWF1dGhlbnRpY2F0aW9uLWdldC1hc3NlcnRpb24t
dTJmLW5vLWNyZWRlbnRpYWxzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJNTdDNjI0
NTAyMzQ2QzIxRTAwMzgzRkU3IC8qIHdlYi1hdXRoZW50aWNhdGlvbi1nZXQtYXNzZXJ0aW9uLmh0
bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCisJCQkJNTc5ODMzN0UyMzYwMTlBNDAwOEU1NTQ3IC8q
IHdlYi1hdXRoZW50aWNhdGlvbi1tYWtlLWNyZWRlbnRpYWwtaGlkLmh0bWwgaW4gQ29weSBSZXNv
dXJjZXMgKi8sCiAJCQkJMUMyQjgxODYxQzg5MjU5RDAwQTU1MjlGIC8qIHdlYmZvbnQuaHRtbCBp
biBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1MTcxNEVCNDFDRjhDNzhDMDA0NzIzQzQgLyogV2Vi
UHJvY2Vzc0tpbGxJREJDbGVhbnVwLTEuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1
MTcxNEVCNTFDRjhDNzhDMDA0NzIzQzQgLyogV2ViUHJvY2Vzc0tpbGxJREJDbGVhbnVwLTIuaHRt
bCBpbiBDb3B5IFJlc291cmNlcyAqLywKQEAgLTIxMzQsNiArMjEzNSw3IEBACiAJCTk5ODRGQUNB
MUNGRkFFRUUwMDhEMTk4QyAvKiBXS1dlYlZpZXdUZXh0SW5wdXQubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYlZpZXdUZXh0SW5wdXQubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5ODRGQUNEMUNGRkIwMzgwMDhEMTk4QyAvKiBlZGl0YWJs
ZS1ib2R5Lmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAiZWRpdGFibGUtYm9keS5o
dG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTk5OTEwOEExRjM5M0M4QjAwOEFE
NDU1IC8qIENvcHlpbmcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBDb3B5aW5nLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjAyRTBENTIzNUZB
NDdEMDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFRleHRNYW5pcHVsYXRpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMDc4
NkEyMUM1ODgzMEYwMEQxNTlFMyAvKiBJbmplY3RlZEJ1bmRsZU1ha2VBbGxTaGFkb3dSb290c09w
ZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRCdW5k
bGVNYWtlQWxsU2hhZG93Um9vdHNPcGVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOUIwNzg2QTQxQzU4ODVDMzAwRDE1OUUzIC8qIEluamVjdGVkQnVuZGxlTWFrZUFsbFNoYWRv
d1Jvb3RzT3Blbl9CdW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5qZWN0ZWRCdW5kbGVNYWtlQWxsU2hhZG93Um9vdHNPcGVuX0J1bmRsZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMTA1NjQxMUY5MDQ1QzcwMEQ1NTgzRiAvKiBDb3B5
SFRNTC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvcHlIVE1MLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjk0NSw2ICsyOTQ3LDcgQEAKIAkJCQk1Nzc0QUE2NzIxRkJCRjc4
MDBBRjJBMUIgLyogVGVzdFNPQXV0aG9yaXphdGlvbi5tbSAqLywKIAkJCQlGNENENzRDNzIwRkRC
NDk2MDBERTM3OTQgLyogVGVzdFVSTFNjaGVtZUhhbmRsZXIuaCAqLywKIAkJCQlGNENENzRDODIw
RkRCNDk2MDBERTM3OTQgLyogVGVzdFVSTFNjaGVtZUhhbmRsZXIubW0gKi8sCisJCQkJOUIwMkUw
RDUyMzVGQTQ3RDAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRpb24ubW0gKi8sCiAJCQkJNUMxNkY4
RkIyMzBDOTQyQjAwNzRDNEE4IC8qIFRleHRTaXplLm1tICovLAogCQkJCUMyMkZBMzJBMjI4Rjg3
MDgwMDlENzk4OCAvKiBUZXh0V2lkdGgubW0gKi8sCiAJCQkJNUM3M0E4MUEyMzIzMDU5ODAwREVB
ODVBIC8qIFRMU0RlcHJlY2F0aW9uLm1tICovLApAQCAtNDgzMCw2ICs0ODMzLDcgQEAKIAkJCQlG
NDUwMzNGNTIwNkJFQzk1MDA5MzUxQ0UgLyogVGV4dEF1dG9zaXppbmdCb29zdC5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzRTYxOTNCMUY5MzFCM0EwMEFGMjQ1RSAvKiBUZXh0Q29kZWMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQ0UzNTI0RjkxQjE0NDFDNDAwMjhBN0M1IC8qIFRleHRGaWVsZERp
ZEJlZ2luQW5kRW5kRWRpdGluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5QjAyRTBENjIzNUZB
NDdEMDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVD
MTZGOEZDMjMwQzk0MzcwMDc0QzRBOCAvKiBUZXh0U2l6ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CUMyMkZBMzJCMjI4Rjg3MDgwMDlENzk4OCAvKiBUZXh0V2lkdGgubW0gaW4gU291cmNlcyAqLywK
IAkJCQk3Q0NFN0VERDFBNDExQTkyMDA0NDdDNEMgLyogVGltZVJhbmdlcy5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1h
bmlwdWxhdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW0JKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9ydCAiVGVzdC5oIgorI2lt
cG9ydCAiVGVzdFdLV2ViVmlldy5oIgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUu
aD4KKyNpbXBvcnQgPFdlYktpdC9fV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUuaD4KKyNpbXBv
cnQgPFdlYktpdC9fV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oPgorI2ltcG9ydCA8V2ViS2l0L19X
S1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CisjaW1w
b3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK3N0YXRpYyBib29sIGRvbmUgPSBmYWxzZTsKKworQGlu
dGVyZmFjZSBUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgOiBOU09iamVjdCA8X1dLVGV4dE1hbmlw
dWxhdGlvbkRlbGVnYXRlPgorCistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3
IGRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbTooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilp
dGVtOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TQXJyYXk8X1dL
VGV4dE1hbmlwdWxhdGlvbkl0ZW0gKj4gKml0ZW1zOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgeworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJh
eT4gX2l0ZW1zOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdAoreworICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworICAgIF9pdGVtcyA9IGFkb3B0
TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOworICAgIHJldHVybiBzZWxmOworfQor
CistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZEZpbmRUZXh0TWFuaXB1
bGF0aW9uSXRlbTooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVtCit7CisgICAgW19pdGVt
cyBhZGRPYmplY3Q6aXRlbV07Cit9CisKKy0gKE5TQXJyYXk8X1dLVGV4dE1hbmlwdWxhdGlvbkl0
ZW0gKj4gKilpdGVtcworeworICAgIHJldHVybiBfaXRlbXMuZ2V0KCk7Cit9CisKK0BlbmQKKwor
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitURVNUKFRleHRNYW5pcHVsYXRpb24sIFN0YXJ0
VGV4dE1hbmlwdWxhdGlvbkZpbmRTaW1wbGVQYXJhZ3JhcGhzKQoreworICAgIGF1dG8gZGVsZWdh
dGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7Cisg
ICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBbd2ViVmlldyBfc2V0VGV4
dE1hbmlwdWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3IHN5
bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPiIKKyAgICAgICAgIjxo
dG1sPjxib2R5PmhlbGxvPGJyPndvcmxkPGRpdj5XZWJLaXQ8L2Rpdj48L2JvZHk+PC9odG1sPiJd
OworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRp
b25zV2l0aENvbXBsZXRpb25IYW5kbGVyOl57CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1d
OworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBhdXRvICppdGVt
cyA9IFtkZWxlZ2F0ZSBpdGVtc107CisgICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAzVUwpOwor
ICAgIEVYUEVDVF9FUShpdGVtc1swXS50b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX1NU
UkVRKCJoZWxsbyIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworCisg
ICAgRVhQRUNUX0VRKGl0ZW1zWzFdLnRva2Vucy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfU1RS
RVEoIndvcmxkIiwgaXRlbXNbMV0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisKKyAg
ICBFWFBFQ1RfRVEoaXRlbXNbMl0udG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9TVFJF
USgiV2ViS2l0IiwgaXRlbXNbMl0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7Cit9CisK
K1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgU3RhcnRUZXh0TWFuaXB1bGF0aW9uRmluZE11bHRpcGxl
UGFyYWdyYXBoc0luU2luZ2xlVGV4dE5vZGUpCit7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0
TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHdl
YlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01h
a2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOworICAgIFt3ZWJWaWV3IF9zZXRUZXh0TWFuaXB1bGF0
aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNs
eUxvYWRIVE1MU3RyaW5nOkAiPCFET0NUWVBFIGh0bWw+IgorICAgICAgICAiPGh0bWw+PGJvZHk+
PHByZT5oZWxsb1xud29ybGRcbldlYktpdDwvcHJlPjwvYm9keT48L2h0bWw+Il07CisKKyAgICBk
b25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29t
cGxldGlvbkhhbmRsZXI6XnsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGF1dG8gKml0ZW1zID0gW2RlbGVn
YXRlIGl0ZW1zXTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDNVTCk7CisgICAgRVhQRUNU
X0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoImhlbGxv
IiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisKKyAgICBFWFBFQ1Rf
RVEoaXRlbXNbMV0udG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9TVFJFUSgid29ybGQi
LCBpdGVtc1sxXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKworICAgIEVYUEVDVF9F
UShpdGVtc1syXS50b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX1NUUkVRKCJXZWJLaXQi
LCBpdGVtc1syXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKK30KKworVEVTVChUZXh0
TWFuaXB1bGF0aW9uLCBTdGFydFRleHRNYW5pcHVsYXRpb25GaW5kUGFyYWdyYXBoc1dpdGhNdWx0
aWxlVG9rZW5zKQoreworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxh
dGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhb
W1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAs
IDQwMCldKTsKKyAgICBbd2ViVmlldyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOmRlbGVn
YXRlLmdldCgpXTsKKyAgICAKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJp
bmc6QCI8IURPQ1RZUEUgaHRtbD4iCisgICAgICAgICI8aHRtbD48Ym9keT5oZWxsbywgIDxiPndv
cmxkPC9iPjxicj48ZGl2PjxlbT4gPGI+V2ViPC9iPktpdDwvZW0+ICA8L2Rpdj48L2JvZHk+PC9o
dG1sPiJdOworICAgIAorICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfc3RhcnRUZXh0
TWFuaXB1bGF0aW9uc1dpdGhDb21wbGV0aW9uSGFuZGxlcjpeeworICAgICAgICBkb25lID0gdHJ1
ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworICAgIAor
ICAgIGF1dG8gKml0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMu
Y291bnQsIDJVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgMlVMKTsK
KyAgICBFWFBFQ1RfU1RSRVEoImhlbGxvLCAiLCBpdGVtc1swXS50b2tlbnNbMF0uY29udGVudC5V
VEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoIndvcmxkIiwgaXRlbXNbMF0udG9rZW5zWzFd
LmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgCisgICAgRVhQRUNUX0VRKGl0ZW1zWzFdLnRva2Vu
cy5jb3VudCwgMlVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoIldlYiIsIGl0ZW1zWzFdLnRva2Vuc1sw
XS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgiS2l0IiwgaXRlbXNbMV0u
dG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7Cit9CisKK3N0cnVjdCBUb2tlbiB7CisgICAg
TlNTdHJpbmcgKmlkZW50aWZpZXI7CisgICAgTlNTdHJpbmcgKmNvbnRlbnQ7Cit9OworCit0ZW1w
bGF0ZTxzaXplX3QgbGVuZ3RoPgorc3RhdGljIFJldGFpblB0cjxfV0tUZXh0TWFuaXB1bGF0aW9u
SXRlbT4gY3JlYXRlSXRlbShOU1N0cmluZyAqaXRlbUlkZW50aWZpZXIsIGNvbnN0IFRva2VuICgm
dG9rZW5zKVtsZW5ndGhdKQoreworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gd2tUb2tl
bnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIFJldGFpblB0cjxfV0tUZXh0
TWFuaXB1bGF0aW9uVG9rZW4+IHRva2VuID0gYWRvcHROUyhbW19XS1RleHRNYW5pcHVsYXRpb25U
b2tlbiBhbGxvY10gaW5pdF0pOworICAgICAgICBbdG9rZW4gc2V0SWRlbnRpZmllcjogdG9rZW5z
W2ldLmlkZW50aWZpZXJdOworICAgICAgICBbdG9rZW4gc2V0Q29udGVudDogdG9rZW5zW2ldLmNv
bnRlbnRdOworICAgICAgICBbd2tUb2tlbnMgYWRkT2JqZWN0OnRva2VuLmdldCgpXTsKKyAgICB9
CisgICAgcmV0dXJuIGFkb3B0TlMoW1tfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSBhbGxvY10gaW5p
dFdpdGhJZGVudGlmaWVyOml0ZW1JZGVudGlmaWVyIHRva2Vuczp3a1Rva2Vucy5nZXQoKV0pOwor
fQorCitURVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvblNob3Vs
ZFJlcGxhY2VTaW1wbGVQYXJhZ3JhcGhDb250ZW50KQoreworICAgIGF1dG8gZGVsZWdhdGUgPSBh
ZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgYXV0
byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBbd2ViVmlldyBfc2V0VGV4dE1hbmlw
dWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3IHN5bmNocm9u
b3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPiIKKyAgICAgICAgIjxodG1sPjxi
b2R5PjxwPmhlbGxsbywgd29vb3JsZDwvcD48cD4gaGV5LCA8Yj4gS2l0czwvYj4gaXMgPGVtPmN1
dXV0ZTwvZW0+PC9wPjwvYm9keT48L2h0bWw+Il07CisKKyAgICBkb25lID0gZmFsc2U7CisgICAg
W3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29tcGxldGlvbkhhbmRsZXI6XnsK
KyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZkb25lKTsKKworICAgIGF1dG8gKml0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsKKyAgICBF
WFBFQ1RfRVEoaXRlbXMuY291bnQsIDJVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vu
cy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoImhlbGxsbywgd29vb3JsZCIsIGl0ZW1z
WzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworCisgICAgRVhQRUNUX0VRKGl0ZW1z
WzFdLnRva2Vucy5jb3VudCwgNFVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoImhleSwgIiwgaXRlbXNb
MV0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCJLaXRz
IiwgaXRlbXNbMV0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NU
UkVRKCIgaXMgIiwgaXRlbXNbMV0udG9rZW5zWzJdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAg
RVhQRUNUX1NUUkVRKCJjdXV1dGUiLCBpdGVtc1sxXS50b2tlbnNbM10uY29udGVudC5VVEY4U3Ry
aW5nKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfY29tcGxldGVUZXh0TWFu
aXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWNyZWF0ZUl0ZW0oaXRlbXNbMV0u
aWRlbnRpZmllciwgeworICAgICAgICB7IGl0ZW1zWzFdLnRva2Vuc1swXS5pZGVudGlmaWVyLCBA
IkhlbGxvLCAiIH0sCisgICAgICAgIHsgaXRlbXNbMV0udG9rZW5zWzFdLmlkZW50aWZpZXIsIEAi
a2l0dGVucyIgfSwKKyAgICAgICAgeyBpdGVtc1sxXS50b2tlbnNbMl0uaWRlbnRpZmllciwgQCIg
YXJlICIgfSwKKyAgICAgICAgeyBpdGVtc1sxXS50b2tlbnNbM10uaWRlbnRpZmllciwgQCJjdXRl
IiB9LAorICAgIH0pLmdldCgpIGNvbXBsZXRpb246XihCT09MIHN1Y2Nlc3MpIHsKKyAgICAgICAg
RVhQRUNUX1RSVUUoc3VjY2Vzcyk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCI8
cD5oZWxsbG8sIHdvb29ybGQ8L3A+PHA+SGVsbG8sIDxiPmtpdHRlbnM8L2I+IGFyZSA8ZW0+Y3V0
ZTwvZW0+PC9wPiIsCisgICAgICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJkb2N1bWVudC5ib2R5LmlubmVySFRNTCJdKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAg
ICBbd2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9u
SXRlbSAqKWNyZWF0ZUl0ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwgeworICAgICAgICB7IGl0ZW1z
WzBdLnRva2Vuc1swXS5pZGVudGlmaWVyLCBAIkhlbGxvLCB3b3JsZC4iIH0sCisgICAgfSkuZ2V0
KCkgY29tcGxldGlvbjpeKEJPT0wgc3VjY2VzcykgeworICAgICAgICBFWFBFQ1RfVFJVRShzdWNj
ZXNzKTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZkb25lKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIjxwPkhlbGxvLCB3b3JsZC48
L3A+PHA+SGVsbG8sIDxiPmtpdHRlbnM8L2I+IGFyZSA8ZW0+Y3V0ZTwvZW0+PC9wPiIsCisgICAg
ICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5
LmlubmVySFRNTCJdKTsKK30KKworVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0ZVRleHRN
YW5pcHVsYXRpb25TaG91bGRGYWlsV2hlbkNvbnRlbnRJc0NoYW5nZWQpCit7CisgICAgYXV0byBk
ZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRd
KTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOworICAgIFt3ZWJWaWV3IF9z
ZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZp
ZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPCFET0NUWVBFIGh0bWw+IgorICAgICAg
ICAiPGh0bWw+PGJvZHk+PHA+IHdoYXQgPGVtPnRpbWU8L2VtPiBhcmUgdGhleSBub3c/PC9wPjwv
Ym9keT48L2h0bWw+Il07CisKKyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX3N0YXJ0
VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29tcGxldGlvbkhhbmRsZXI6XnsKKyAgICAgICAgZG9uZSA9
IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKwor
ICAgIGF1dG8gKml0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMu
Y291bnQsIDFVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgM1VMKTsK
KyAgICBFWFBFQ1RfU1RSRVEoIndoYXQgIiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRlbnQuVVRG
OFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCJ0aW1lIiwgaXRlbXNbMF0udG9rZW5zWzFdLmNv
bnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCIgYXJlIHRoZXkgbm93PyIsIGl0
ZW1zWzBdLnRva2Vuc1syXS5jb250ZW50LlVURjhTdHJpbmcpOworCisgICAgW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2VtJyku
bmV4dFNpYmxpbmcuZGF0YSA9ICcgaXMgaXQgbm93IGluIExvbmRvbj8nIl07CisKKyAgICBkb25l
ID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbjooX1dLVGV4
dE1hbmlwdWxhdGlvbkl0ZW0gKiljcmVhdGVJdGVtKGl0ZW1zWzBdLmlkZW50aWZpZXIsIHsKKyAg
ICAgICAgeyBpdGVtc1swXS50b2tlbnNbMF0uaWRlbnRpZmllciwgQCJXaGF0ICIgfSwKKyAgICAg
ICAgeyBpdGVtc1swXS50b2tlbnNbMV0uaWRlbnRpZmllciwgQCJ0aW1lIiB9LAorICAgICAgICB7
IGl0ZW1zWzBdLnRva2Vuc1syXS5pZGVudGlmaWVyLCBAIiBpcyBpdCBub3c/IiB9LAorICAgIH0p
LmdldCgpIGNvbXBsZXRpb246XihCT09MIHN1Y2Nlc3MpIHsKKyAgICAgICAgRVhQRUNUX0ZBTFNF
KHN1Y2Nlc3MpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmRvbmUpOworICAgIEVYUEVDVF9XS19TVFJFUSgiPHA+IHdoYXQgPGVt
PnRpbWU8L2VtPiBpcyBpdCBub3cgaW4gTG9uZG9uPzwvcD4iLAorICAgICAgICBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwiXSk7
Cit9CisKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uU2hv
dWxkRmFpbFdoZW5Eb2N1bWVudEhhc0JlZW5OYXZpZ2F0ZWRBd2F5KQoreworICAgIGF1dG8gZGVs
ZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7
CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBbd2ViVmlldyBfc2V0
VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3
IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAInNpbXBsZSJdOworICAgIFt3ZWJWaWV3
IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmlubmVySFRNTCA9
ICc8cD5oZXksIDxlbT5lYXJ0aDwvZW0+PC9wPiciXTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAg
ICBbd2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb21wbGV0aW9uSGFuZGxlcjpe
eworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmRvbmUpOworCisgICAgYXV0byAqaXRlbXMgPSBbZGVsZWdhdGUgaXRlbXNdOworICAg
IEVYUEVDVF9FUShpdGVtcy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMF0udG9r
ZW5zLmNvdW50LCAyVUwpOworICAgIEVYUEVDVF9TVFJFUSgiaGV5LCAiLCBpdGVtc1swXS50b2tl
bnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoImVhcnRoIiwgaXRl
bXNbMF0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisKKyAgICBbd2ViVmlldyBzeW5j
aHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJjb3B5LWh0bWwiXTsKKyAgICBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAn
PHA+aGV5LCA8ZW0+ZWFydGg8L2VtPjwvcD4nIl07CisKKyAgICBkb25lID0gZmFsc2U7CisgICAg
W3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29tcGxldGlvbkhhbmRsZXI6XnsK
KyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZkb25lKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfY29tcGxldGVU
ZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWNyZWF0ZUl0ZW0oaXRl
bXNbMF0uaWRlbnRpZmllciwgeworICAgICAgICB7IGl0ZW1zWzBdLnRva2Vuc1swXS5pZGVudGlm
aWVyLCBAImhlbGxvLCAiIH0sCisgICAgICAgIHsgaXRlbXNbMF0udG9rZW5zWzFdLmlkZW50aWZp
ZXIsIEAid29ybGQiIH0sCisgICAgfSkuZ2V0KCkgY29tcGxldGlvbjpeKEJPT0wgc3VjY2Vzcykg
eworICAgICAgICBFWFBFQ1RfRkFMU0Uoc3VjY2Vzcyk7CisgICAgICAgIGRvbmUgPSB0cnVlOwor
ICAgIH1dOworCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381857</attachid>
            <date>2019-10-24 16:33:29 -0700</date>
            <delta_ts>2019-10-24 16:33:29 -0700</delta_ts>
            <desc>More iOS build fix</desc>
            <filename>bug-203286-20191024163328.patch</filename>
            <type>text/plain</type>
            <size>75799</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MTU3MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDE5LTEwLTIzICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIG1lY2hhbmlzbSB0byBm
aW5kIGFuZCBtYW5pcHVsYXRlIHRleHQgYnkgcGFyYWdyYXBocworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMjg2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgV2Vuc29uIEhzaWVoLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBUZXh0TWFu
aXB1bGF0aW9uQ29udHJvbGxlciB3aGljaCBhbGxvd3MgV2ViS2l0IGNsaWVudHMgdG8gZmluZCBh
bmQgcmVwbGFjZQorICAgICAgICB0ZXh0IGNvbnRlbnQgaW4gYSBnaXZlbiBkb2N1bWVudCBieSBw
YXJhZ3JhcGggYm91bmRhcnkuIEZvciBub3csIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyIGZp
bmRzCisgICAgICAgIGFsbCBwYXJhZ3JhcGhzIGluIHRoZSBkb2N1bWVudCBhbmQgaW52b2tlcyB0
aGUgY2FsbGJhY2sgZm9yIGVhY2ggcGFyYWdyYXBoLiBJbiB0aGUgZnV0dXJlLCB0aGlzCisgICAg
ICAgIGNvbnRyb2xsZXIgd2lsbCBzdXBwb3J0IGRldGVjdGluZyByZW1vdmFsIGFuZCBpbnNlcnRp
b24gb2YgbmV3IGNvbnRlbnQgdG8gdGhlIGRvY3VtZW50LgorCisgICAgICAgIFRlc3RzOiBUZXh0
TWFuaXB1bGF0aW9uLlN0YXJ0VGV4dE1hbmlwdWxhdGlvbkZpbmRTaW1wbGVQYXJhZ3JhcGhzCisg
ICAgICAgICAgICAgICBUZXh0TWFuaXB1bGF0aW9uLlN0YXJ0VGV4dE1hbmlwdWxhdGlvbkZpbmRQ
YXJhZ3JhcGhzV2l0aE11bHRpbGVUb2tlbnMKKyAgICAgICAgICAgICAgIFRleHRNYW5pcHVsYXRp
b24uQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uU2hvdWxkUmVwbGFjZVNpbXBsZVBhcmFncmFwaENv
bnRlbnQKKyAgICAgICAgICAgICAgIFRleHRNYW5pcHVsYXRpb24uQ29tcGxldGVUZXh0TWFuaXB1
bGF0aW9uU2hvdWxkRmFpbFdoZW5Db250ZW50SXNDaGFuZ2VkCisgICAgICAgICAgICAgICBUZXh0
TWFuaXB1bGF0aW9uLkNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvblNob3VsZEZhaWxXaGVuRG9jdW1l
bnRIYXNCZWVuTmF2aWdhdGVkQXdheQorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAg
ICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50OjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24pOiBDbGVhciBUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlci4gT3RoZXJ3aXNlIG1faXRlbXMKKyAgICAgICAgaW4gVGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXIgbWF5IGtlZXAgYSBidW5jaCBvZiBub2RlcyBhbGl2ZSBhbmQgbm90IGxldCB0aGlz
IGRvY3VtZW50IGRlc3RydWN0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXIpOiBBZGRlZC4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcklm
RXhpc3RzKTogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXI6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyKTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6c3RhcnRPYnNlcnZpbmdQYXJhZ3JhcGhz
KTogRmluZHMgYWxsIHBhcmdyYXBocyBhbmQgaW52b2tlCisgICAgICAgIHRoZSBjYWxsYmFjay4K
KyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjphZGRJdGVtKTog
QWRkZWQuIEEgaGVscGVyIGZvciBzdGFydE9ic2VydmluZ1BhcmFncmFwaHMuCisgICAgICAgIChX
ZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6Y29tcGxldGVNYW5pcHVsYXRpb24p
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpy
ZXBsYWNlKTogQWRkZWQuIEEgaGVscGVyIGZvciBjb21wbGV0ZU1hbmlwdWxhdGlvbi4KKyAgICAg
ICAgKiBlZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2Vu
OjplbmNvZGUgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbjo6ZGVjb2RlKTogQWRkZWQuCisKIDIwMTkt
MTAtMjQgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQnVpbGQg
Zml4IGFmdGVyIHIyNTE1NjcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHJldmlzaW9uIDI1MTU3
MSkKKysrIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTUw
Myw2ICs1MDMsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAg
ZWRpdGluZy9UZXh0R3JhbnVsYXJpdHkuaAogICAgIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKICAg
ICBlZGl0aW5nL1RleHRJdGVyYXRvckJlaGF2aW9yLmgKKyAgICBlZGl0aW5nL1RleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyLmgKICAgICBlZGl0aW5nL1VuZG9TdGVwLmgKICAgICBlZGl0aW5nL1Zp
c2libGVQb3NpdGlvbi5oCiAgICAgZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CShyZXZpc2lvbiAyNTE1NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMTA2MSw2ICsxMDYxLDcgQEAgZWRpdGluZy9TcGxpdFRleHRO
b2RlQ29udGFpbmluZ0VsZW1lbnRDbwogZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCiBl
ZGl0aW5nL1RleHRJbnNlcnRpb25CYXNlQ29tbWFuZC5jcHAKIGVkaXRpbmcvVGV4dEl0ZXJhdG9y
LmNwcAorZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKIGVkaXRpbmcvVHlw
aW5nQ29tbWFuZC5jcHAKIGVkaXRpbmcvVW5saW5rQ29tbWFuZC5jcHAKIGVkaXRpbmcvVmlzaWJs
ZVBvc2l0aW9uLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjUxNTcxKQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yODUy
LDYgKzI4NTIsNyBAQAogCQk5OTZFNTlERjFERjAxMjhEMDA2NjEyQjkgLyogTmF2aWdhdG9yV2Vi
RHJpdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
OTZFNTlEQzFERjAwRDkwMDA2NjEyQjkgLyogTmF2aWdhdG9yV2ViRHJpdmVyLmggKi87IH07CiAJ
CTlBNTI4RTg0MTdEN0Y1MkYwMEFBOTUxOCAvKiBGbG9hdGluZ09iamVjdHMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlBNTI4RTgyMTdEN0Y1MkYwMEFB
OTUxOCAvKiBGbG9hdGluZ09iamVjdHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk5QUIxRjM4MDE4RTI0ODlBMDA1MzQ3NDMgLyogQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUFCMUYzN0UxOEUyNDg5QTAwNTM0NzQzIC8qIENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk5QjAyRTBDODIzNUVBRDJBMDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMDJFMEMz
MjM1RTc2QUEwMDQwNDRCMiAvKiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTlCMjRERThFMTUxOTRC
OTUwMEM1OUMyNyAvKiBIVE1MQkRJRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOUIyNERFOEMxNTE5NEI5NTAwQzU5QzI3IC8qIEhUTUxCRElF
bGVtZW50LmggKi87IH07CiAJCTlCMjdGQzYwMjM0RDlBREIwMDM5NEE0NiAvKiBXaW5kb3dFdmVu
dExvb3AuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlC
MjdGQzVFMjM0RDlBREEwMDM5NEE0NiAvKiBXaW5kb3dFdmVudExvb3AuaCAqLzsgfTsKIAkJOUIy
RDhBNzkxNDk5N0NDRjAwRUNFRjNFIC8qIFVuZG9TdGVwLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjJEOEE3ODE0OTk3Q0NGMDBFQ0VGM0UgLyogVW5k
b1N0ZXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMTEwNzQsNiArMTEwNzUsOCBAQAogCQk5QUM2RjAyNTIxMTQ4RjU0MDBDQkRBMDYgLyogTWVk
aWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBNZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5Lmg7IHBhdGggPSBtZWRpYWNh
cGFiaWxpdGllcy9NZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTlBQzZGMDJEMjExNDhGOUYwMENCREEwNiAvKiBNZWRpYUVuZ2lu
ZUNvbmZpZ3VyYXRpb25GYWN0b3J5TW9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBNZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5TW9jay5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlBQzZGMDJGMjExNDhGQTIwMENCREEwNiAvKiBNZWRp
YUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5TW9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBNZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5TW9jay5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5QjAyRTBDMzIzNUU3NkFBMDA0MDQ0QjIgLyogVGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUIwMkUwQzQyMzVFNzZB
QTAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOUIwM0Q4MDYxQkIzMTEwRDAwQjczRjY0IC8qIFJlYWRhYmxlQnl0ZVN0cmVh
bUludGVybmFsc0J1aWx0aW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJl
YWRhYmxlQnl0ZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmg7IHBhdGggPSBEZXJpdmVkU291cmNl
cy9XZWJDb3JlL1JlYWRhYmxlQnl0ZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRy
ZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTlCMDNEODA2MUJCMzExMEQwMEI3NjRDOSAv
KiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9TdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVD
VFNfRElSOyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RDggLyogUmVhZGFibGVTdHJlYW1C
dWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSZWFkYWJsZVN0cmVh
bUJ1aWx0aW5zLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL1JlYWRhYmxlU3RyZWFt
QnVpbHRpbnMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTIxNDM4
LDYgKzIxNDQxLDggQEAKIAkJCQk5MzMwOURDQzA5OUU2NDkxMDA1NkU1ODEgLyogVGV4dEl0ZXJh
dG9yLmNwcCAqLywKIAkJCQk5MzMwOURDRDA5OUU2NDkxMDA1NkU1ODEgLyogVGV4dEl0ZXJhdG9y
LmggKi8sCiAJCQkJOTM5MjE0NjgxOEE2RDc5MTAwMEVFNjg4IC8qIFRleHRJdGVyYXRvckJlaGF2
aW9yLmggKi8sCisJCQkJOUIwMkUwQzQyMzVFNzZBQTAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyLmNwcCAqLywKKwkJCQk5QjAyRTBDMzIzNUU3NkFBMDA0MDQ0QjIgLyogVGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaCAqLywKIAkJCQk5MzMwOURDQTA5OUU2NDkxMDA1NkU1
ODEgLyogVHlwaW5nQ29tbWFuZC5jcHAgKi8sCiAJCQkJOTMzMDlEQ0IwOTlFNjQ5MTAwNTZFNTgx
IC8qIFR5cGluZ0NvbW1hbmQuaCAqLywKIAkJCQk5QjJEOEE3ODE0OTk3Q0NGMDBFQ0VGM0UgLyog
VW5kb1N0ZXAuaCAqLywKQEAgLTI5MDUwLDcgKzI5MDU1LDYgQEAKIAkJCQk3NTlDQjgzNzE5MkRB
OTE5MDAxMkJDNjQgLyogQ29udHJvbFN0YXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYw
MjkxMkIwMjY3NjAwQzFBMzU5IC8qIENvbnZvbHZlck5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUQ4QjYxNTJGMTAzMjQ5NTEwMEM4NTU0QSAvKiBDb29raWUuaCBpbiBIZWFkZXJzICovLAotCQkJ
CUU0QUJBQkU0MjM2MUEzMjkwMEZBNDM0NSAvKiBQcm9wZXJ0eUNhc2NhZGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUUxNDI0Qzk0MTY0QjUyQzgwMEYzMkQ0MCAvKiBDb29raWVKYXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTdBNTY5OTcwMjA4NkM2MTkwMDBFMDQzMyAvKiBDb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzNEMDIxMkQxMzFEQjM3QjAwNDA5
MUE4IC8qIENvb2tpZVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLApAQCAtMzE0ODUsNiArMzE0ODks
NyBAQAogCQkJCTFBQ0FERDc5MTg4MEQ5MUMwMEQ4QjcxRCAvKiBQcm9ncmVzc1RyYWNrZXJDbGll
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0N0E2MzNEMUZGNkZENTAwMDgxQjNDQyAvKiBQcm9t
aXNlZEF0dGFjaG1lbnRJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTc4RjQzNTFERTAwRUVC
MDAzREZDNkEgLyogUHJvbWlzZVJlamVjdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlF
NEFCQUJFNDIzNjFBMzI5MDBGQTQzNDUgLyogUHJvcGVydHlDYXNjYWRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFNEJCRUQwRjE0RjQwMjVEMDAzRjBCOTggLyogUHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkzN0JBQUU1ODE5ODBEMUREMDA1REZFNzEg
LyogUHJvdGVjdGlvblNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTRDNzY3NTBDRTkyM0Ex
MDA3RUYzQ0QgLyogUHJvdGVjdGlvblNwYWNlQmFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjM1
Miw2ICszMjM1Nyw3IEBACiAJCQkJQ0VDQURGQ0UxNTM3NzkxRDAwRTM3MDY4IC8qIFRleHRJbnNl
cnRpb25CYXNlQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMUMwOTlFNjQ5MjAw
NTZFNTgxIC8qIFRleHRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5MjE0NjkxOEE2
RDc5MTAwMEVFNjg4IC8qIFRleHRJdGVyYXRvckJlaGF2aW9yLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk5QjAyRTBDODIzNUVBRDJBMDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUY0NUU5MEU2ODc3NjcwMDFDMTI4NyAvKiBUZXh0TWV0
cmljcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTREOTg4QjQxN0JGRDFGNjAwODRGQjg4IC8qIFRl
eHROb2RlVHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzE4REE1OTE4MUFGNkE1MDBD
NEVGMjIgLyogVGV4dFBhaW50ZXIuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCShyZXZpc2lvbiAyNTE1NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsNiArMjEzLDcgQEAKICNpbmNsdWRlICJTdWJy
ZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIlRleHRBdXRvU2l6aW5nLmgiCiAjaW5jbHVkZSAi
VGV4dEV2ZW50LmgiCisjaW5jbHVkZSAiVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJUZXh0Tm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlRvdWNoQWN0aW9uLmgiCiAj
aW5jbHVkZSAiVHJhbnNmb3JtU291cmNlLmgiCkBAIC0yNDc4LDYgKzI0NzksOCBAQCB2b2lkIERv
Y3VtZW50OjpwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oKQogCiAgICAgbV91bmRvTWFuYWdlci0+cmVt
b3ZlQWxsSXRlbXMoKTsKIAorICAgIG1fdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgPSBudWxs
cHRyOyAvLyBGcmVlIG5vZGVzIGtlcHQgYWxpdmUgYnkgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXIuCisKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkKICAgICBpZiAodGhpcyAhPSAmdG9wRG9j
dW1lbnQoKSkgewogICAgICAgICAvLyBMZXQgdGhlIGF4IGNhY2hlIGtub3cgdGhhdCB0aGlzIHN1
YmZyYW1lIGdvZXMgb3V0IG9mIHNjb3BlLgpAQCAtODMyMSw0ICs4MzI0LDExIEBAIHZvaWQgRG9j
dW1lbnQ6OnNldFBpY3R1cmVJblBpY3R1cmVFbGVtZW4KIH0KICNlbmRpZgogCitUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlciYgRG9jdW1lbnQ6OnRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyKCkK
K3sKKyAgICBpZiAoIW1fdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIpCisgICAgICAgIG1fdGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgPSBtYWtlVW5pcXVlPFRleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyPigqdGhpcyk7CisgICAgcmV0dXJuICptX3RleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAko
cmV2aXNpb24gMjUxNTcxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTE5Niw2ICsxOTYsNyBAQCBjbGFzcyBTdHlsZVNoZWV0OwogY2xhc3MgU3R5
bGVTaGVldENvbnRlbnRzOwogY2xhc3MgU3R5bGVTaGVldExpc3Q7CiBjbGFzcyBUZXh0OworY2xh
c3MgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBUZXh0UmVzb3VyY2VEZWNvZGVy
OwogY2xhc3MgVHJlZVdhbGtlcjsKIGNsYXNzIFVuZG9NYW5hZ2VyOwpAQCAtMTU1Myw2ICsxNTU0
LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UGljdHVyZUluUGljdHVyZUVsZW1lbnQoSFRNTFZp
ZGVvRWxlbWVudCopOwogI2VuZGlmCiAKKyAgICBXRUJDT1JFX0VYUE9SVCBUZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlciYgdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIoKTsKKyAgICBUZXh0TWFu
aXB1bGF0aW9uQ29udHJvbGxlciogdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXJJZkV4aXN0cygp
IHsgcmV0dXJuIG1fdGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuZ2V0KCk7IH0KKwogcHJvdGVj
dGVkOgogICAgIGVudW0gQ29uc3RydWN0aW9uRmxhZ3MgeyBTeW50aGVzaXplZCA9IDEsIE5vblJl
bmRlcmVkUGxhY2Vob2xkZXIgPSAxIDw8IDEgfTsKICAgICBEb2N1bWVudChGcmFtZSosIGNvbnN0
IFVSTCYsIHVuc2lnbmVkID0gRGVmYXVsdERvY3VtZW50Q2xhc3MsIHVuc2lnbmVkIGNvbnN0cnVj
dGlvbkZsYWdzID0gMCk7CkBAIC0yMDgwLDYgKzIwODQsOCBAQCBwcml2YXRlOgogICAgIFdlYWtQ
dHI8SFRNTFZpZGVvRWxlbWVudD4gbV9waWN0dXJlSW5QaWN0dXJlRWxlbWVudDsKICNlbmRpZgog
CisgICAgc3RkOjp1bmlxdWVfcHRyPFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyPiBtX3RleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyOworCiAgICAgSGFzaE1hcDxFbGVtZW50KiwgRWxlbWVudElk
ZW50aWZpZXI+IG1faWRlbnRpZmllZEVsZW1lbnRzTWFwOwogfTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXIuaCIKKworI2luY2x1ZGUgIkVkaXRpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHREaXNhbGxv
d2VkU2NvcGUuaCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJWaXNpYmxl
VW5pdHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitUZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlcjo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIoRG9jdW1lbnQmIGRvY3VtZW50KQorICAg
IDogbV9kb2N1bWVudChtYWtlV2Vha1B0cihkb2N1bWVudCkpCit7Cit9CisKK3ZvaWQgVGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6OnN0YXJ0T2JzZXJ2aW5nUGFyYWdyYXBocyhNYW5pcHVsYXRp
b25JdGVtQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBhdXRvIGRvY3VtZW50ID0gbWFrZVJl
ZlB0cihtX2RvY3VtZW50LmdldCgpKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7CisKKyAgICBWaXNpYmxl
UG9zaXRpb24gc3RhcnQgPSBmaXJzdFBvc2l0aW9uSW5Ob2RlKG1fZG9jdW1lbnQuZ2V0KCkpOwor
ICAgIFZpc2libGVQb3NpdGlvbiBlbmQgPSBsYXN0UG9zaXRpb25Jbk5vZGUobV9kb2N1bWVudC5n
ZXQoKSk7CisgICAgVGV4dEl0ZXJhdG9yIGl0ZXJhdG9yIHsgc3RhcnQuZGVlcEVxdWl2YWxlbnQo
KSwgZW5kLmRlZXBFcXVpdmFsZW50KCkgfTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICBy
ZXR1cm47IC8vIFZpc2libGVQb3NpdGlvbiBvciBUZXh0SXRlcmF0b3IncyBjb25zdHJ1Y3RvciBt
YXkgaGF2ZSB1cGRhdGVkIHRoZSBsYXlvdXQgYW5kIGV4ZWN1dGVkIGFyYml0cmFyeSBzY3JpcHRz
LgorCisgICAgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiB0b2tlbnNJbkN1cnJlbnRQYXJhZ3Jh
cGg7CisgICAgUG9zaXRpb24gc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGggPSBzdGFydC5kZWVwRXF1
aXZhbGVudCgpOworICAgIHdoaWxlICghaXRlcmF0b3IuYXRFbmQoKSkgeworICAgICAgICBTdHJp
bmdWaWV3IGN1cnJlbnRUZXh0ID0gaXRlcmF0b3IudGV4dCgpOworCisgICAgICAgIGlmIChzdGFy
dE9mQ3VycmVudFBhcmFncmFwaC5pc051bGwoKSkKKyAgICAgICAgICAgIHN0YXJ0T2ZDdXJyZW50
UGFyYWdyYXBoID0gaXRlcmF0b3IucmFuZ2UoKS0+c3RhcnRQb3NpdGlvbigpOworCisgICAgICAg
IHNpemVfdCBlbmRPZkxhc3ROZXdMaW5lID0gMDsKKyAgICAgICAgc2l6ZV90IG9mZnNldE9mTmV4
dE5ld0xpbmUgPSAwOworICAgICAgICB3aGlsZSAoKG9mZnNldE9mTmV4dE5ld0xpbmUgPSBjdXJy
ZW50VGV4dC5maW5kKCdcbicsIGVuZE9mTGFzdE5ld0xpbmUpKSAhPSBub3RGb3VuZCkgeworICAg
ICAgICAgICAgaWYgKGVuZE9mTGFzdE5ld0xpbmUgPCBvZmZzZXRPZk5leHROZXdMaW5lKSB7Cisg
ICAgICAgICAgICAgICAgdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmFwcGVuZChNYW5pcHVsYXRp
b25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksCisgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRUZXh0LnN1YnN0cmluZyhlbmRPZkxhc3ROZXdMaW5lLCBvZmZzZXRPZk5leHRO
ZXdMaW5lIC0gZW5kT2ZMYXN0TmV3TGluZSkudG9TdHJpbmcoKSB9KTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgYXV0byBsYXN0UmFuZ2UgPSBpdGVyYXRvci5yYW5nZSgpOworICAgICAg
ICAgICAgaWYgKG9mZnNldE9mTmV4dE5ld0xpbmUgPCBjdXJyZW50VGV4dC5sZW5ndGgoKSkgewor
ICAgICAgICAgICAgICAgIGxhc3RSYW5nZS0+c2V0U3RhcnQoZmlyc3RQb3NpdGlvbkluT3JCZWZv
cmVOb2RlKGl0ZXJhdG9yLm5vZGUoKSkpOyAvLyBNb3ZlIHRoZSBzdGFydCB0byB0aGUgYmVnaW5u
aW5nIG9mIHRoZSBjdXJyZW50IG5vZGUuCisgICAgICAgICAgICAgICAgVGV4dEl0ZXJhdG9yOjpz
dWJyYW5nZShsYXN0UmFuZ2UsIDAsIG9mZnNldE9mTmV4dE5ld0xpbmUpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgUG9zaXRpb24gZW5kT2ZDdXJyZW50UGFyYWdyYXBoID0gbGFzdFJhbmdl
LT5lbmRQb3NpdGlvbigpOworCisgICAgICAgICAgICBpZiAoIXRva2Vuc0luQ3VycmVudFBhcmFn
cmFwaC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgYWRkSXRlbShzdGFydE9mQ3VycmVudFBh
cmFncmFwaCwgZW5kT2ZDdXJyZW50UGFyYWdyYXBoLCBXVEZNb3ZlKHRva2Vuc0luQ3VycmVudFBh
cmFncmFwaCkpOworICAgICAgICAgICAgc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGguY2xlYXIoKTsK
KyAgICAgICAgICAgIGVuZE9mTGFzdE5ld0xpbmUgPSBvZmZzZXRPZk5leHROZXdMaW5lICsgMTsK
KyAgICAgICAgfQorCisgICAgICAgIGF1dG8gcmVtYWluaW5nVGV4dCA9IGN1cnJlbnRUZXh0LnN1
YnN0cmluZyhlbmRPZkxhc3ROZXdMaW5lKTsKKyAgICAgICAgaWYgKHJlbWFpbmluZ1RleHQubGVu
Z3RoKCkpCisgICAgICAgICAgICB0b2tlbnNJbkN1cnJlbnRQYXJhZ3JhcGguYXBwZW5kKE1hbmlw
dWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUoKSwgcmVtYWluaW5nVGV4
dC50b1N0cmluZygpIH0pOworCisgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsKKyAgICB9CisK
KyAgICBpZiAoIXRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5pc0VtcHR5KCkpCisgICAgICAgIGFk
ZEl0ZW0oc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGgsIGVuZC5kZWVwRXF1aXZhbGVudCgpLCBXVEZN
b3ZlKHRva2Vuc0luQ3VycmVudFBhcmFncmFwaCkpOworfQorCit2b2lkIFRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyOjphZGRJdGVtKGNvbnN0IFBvc2l0aW9uJiBzdGFydE9mUGFyYWdyYXBoLCBj
b25zdCBQb3NpdGlvbiYgZW5kT2ZQYXJhZ3JhcGgsIFZlY3RvcjxNYW5pcHVsYXRpb25Ub2tlbj4m
JiB0b2tlbnMpCit7CisgICAgQVNTRVJUKG1fZG9jdW1lbnQpOworICAgIGF1dG8gcmVzdWx0ID0g
bV9pdGVtcy5hZGQobV9pdGVtSWRlbnRpZmllci5nZW5lcmF0ZSgpLCBNYW5pcHVsYXRpb25JdGVt
IHsgc3RhcnRPZlBhcmFncmFwaCwgZW5kT2ZQYXJhZ3JhcGgsIFdURk1vdmUodG9rZW5zKSB9KTsK
KyAgICBtX2NhbGxiYWNrKCptX2RvY3VtZW50LCByZXN1bHQuaXRlcmF0b3ItPmtleSwgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS50b2tlbnMpOworfQorCitib29sIFRleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyOjpjb21wbGV0ZU1hbmlwdWxhdGlvbihJdGVtSWRlbnRpZmllciBpdGVtSWRlbnRpZmll
ciwgY29uc3QgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiYgcmVwbGFjZW1lbnRUb2tlbnMpCit7
CisgICAgaWYgKCFpdGVtSWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
YXV0byBpdGVtSXRlcmF0b3IgPSBtX2l0ZW1zLmZpbmQoaXRlbUlkZW50aWZpZXIpOworICAgIGlm
IChpdGVtSXRlcmF0b3IgPT0gbV9pdGVtcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgYXV0byBkaWRSZXBsYWNlID0gcmVwbGFjZShpdGVtSXRlcmF0b3ItPnZhbHVlLCByZXBs
YWNlbWVudFRva2Vucyk7CisKKyAgICBtX2l0ZW1zLnJlbW92ZShpdGVtSXRlcmF0b3IpOworCisg
ICAgcmV0dXJuIGRpZFJlcGxhY2U7Cit9CisKK2Jvb2wgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXI6OnJlcGxhY2UoY29uc3QgTWFuaXB1bGF0aW9uSXRlbSYgaXRlbSwgY29uc3QgVmVjdG9yPE1h
bmlwdWxhdGlvblRva2VuPiYgcmVwbGFjZW1lbnRUb2tlbnMpCit7CisgICAgVGV4dEl0ZXJhdG9y
IGl0ZXJhdG9yIHsgaXRlbS5zdGFydCwgaXRlbS5lbmQgfTsKKyAgICBzaXplX3QgY3VycmVudFRv
a2VuSW5kZXggPSAwOworICAgIEhhc2hNYXA8VG9rZW5JZGVudGlmaWVyLCBSZWY8Tm9kZT4+IHRv
a2VuVG9Ob2RlOworICAgIHdoaWxlICghaXRlcmF0b3IuYXRFbmQoKSkgeworICAgICAgICBhdXRv
IHN0cmluZyA9IGl0ZXJhdG9yLnRleHQoKS50b1N0cmluZygpOworICAgICAgICBpZiAoY3VycmVu
dFRva2VuSW5kZXggPj0gaXRlbS50b2tlbnMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBhdXRvJiBjdXJyZW50VG9rZW4gPSBpdGVtLnRva2Vuc1tjdXJyZW50VG9r
ZW5JbmRleF07CisgICAgICAgIGlmIChpdGVyYXRvci50ZXh0KCkgIT0gY3VycmVudFRva2VuLmNv
bnRlbnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHRva2VuVG9Ob2RlLmFk
ZChjdXJyZW50VG9rZW4uaWRlbnRpZmllciwgKml0ZXJhdG9yLm5vZGUoKSk7CisgICAgICAgIGl0
ZXJhdG9yLmFkdmFuY2UoKTsKKyAgICAgICAgKytjdXJyZW50VG9rZW5JbmRleDsKKyAgICB9CisK
KyAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHByZXNldmUgdGhlIG9yZGVyIG9mIHRoZSByZXBs
YWNlbWVudCBhdCBhbGwuCisgICAgZm9yIChhdXRvJiB0b2tlbiA6IHJlcGxhY2VtZW50VG9rZW5z
KSB7CisgICAgICAgIGF1dG8qIG5vZGUgPSB0b2tlblRvTm9kZS5nZXQodG9rZW4uaWRlbnRpZmll
cik7CisgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgaWYgKCFpczxDaGFyYWN0ZXJEYXRhPihub2RlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAvLyBGSVhNRTogSXQncyBub3Qgc2FmZSB0byB1cGRhdGUgRE9NIHdoaWxlIGl0ZXJh
dGluZyBvdmVyIHRoZSB0b2tlbnMuCisgICAgICAgIGRvd25jYXN0PENoYXJhY3RlckRhdGE+KG5v
ZGUpLT5zZXREYXRhKHRva2VuLmNvbnRlbnQpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJQb3NpdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5o
PgorI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBEb2N1bWVudDsKKworY2xhc3MgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgOiBw
dWJsaWMgQ2FuTWFrZVdlYWtQdHI8VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI+IHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcihEb2N1bWVudCYpOworCisgICAgZW51bSBUb2tlbklkZW50aWZpZXJUeXBlIHsgfTsK
KyAgICB1c2luZyBUb2tlbklkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPFRva2VuSWRlbnRp
ZmllclR5cGU+OworCisgICAgc3RydWN0IE1hbmlwdWxhdGlvblRva2VuIHsKKyAgICAgICAgVG9r
ZW5JZGVudGlmaWVyIGlkZW50aWZpZXI7CisgICAgICAgIFN0cmluZyBjb250ZW50OworCisgICAg
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
KyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPE1hbmlwdWxh
dGlvblRva2VuPiBkZWNvZGUoRGVjb2RlciYpOworICAgIH07CisKKyAgICBlbnVtIEl0ZW1JZGVu
dGlmaWVyVHlwZSB7IH07CisgICAgdXNpbmcgSXRlbUlkZW50aWZpZXIgPSBPYmplY3RJZGVudGlm
aWVyPEl0ZW1JZGVudGlmaWVyVHlwZT47CisKKyAgICB1c2luZyBNYW5pcHVsYXRpb25JdGVtQ2Fs
bGJhY2sgPSBXVEY6OkZ1bmN0aW9uPHZvaWQoRG9jdW1lbnQmLCBJdGVtSWRlbnRpZmllciwgY29u
c3QgVmVjdG9yPE1hbmlwdWxhdGlvblRva2VuPiYpPjsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHN0YXJ0T2JzZXJ2aW5nUGFyYWdyYXBocyhNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2smJik7CisK
KyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGNvbXBsZXRlTWFuaXB1bGF0aW9uKEl0ZW1JZGVudGlm
aWVyLCBjb25zdCBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+Jik7CisKK3ByaXZhdGU6CisgICAg
c3RydWN0IE1hbmlwdWxhdGlvbkl0ZW0geworICAgICAgICBQb3NpdGlvbiBzdGFydDsKKyAgICAg
ICAgUG9zaXRpb24gZW5kOworICAgICAgICBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+IHRva2Vu
czsKKyAgICB9OworCisgICAgdm9pZCBhZGRJdGVtKGNvbnN0IFBvc2l0aW9uJiBzdGFydE9mUGFy
YWdyYXBoLCBjb25zdCBQb3NpdGlvbiYgZW5kT2ZQYXJhZ3JhcGgsIFZlY3RvcjxNYW5pcHVsYXRp
b25Ub2tlbj4mJik7CisgICAgYm9vbCByZXBsYWNlKGNvbnN0IE1hbmlwdWxhdGlvbkl0ZW0mLCBj
b25zdCBWZWN0b3I8TWFuaXB1bGF0aW9uVG9rZW4+Jik7CisKKyAgICBXZWFrUHRyPERvY3VtZW50
PiBtX2RvY3VtZW50OworICAgIE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjayBtX2NhbGxiYWNrOwor
ICAgIEhhc2hNYXA8SXRlbUlkZW50aWZpZXIsIE1hbmlwdWxhdGlvbkl0ZW0+IG1faXRlbXM7Cisg
ICAgSXRlbUlkZW50aWZpZXIgbV9pdGVtSWRlbnRpZmllcjsKKyAgICBUb2tlbklkZW50aWZpZXIg
bV90b2tlbklkZW50aWZpZXI7Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBU
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW46OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgaWRlbnRpZmllciA8PCBjb250
ZW50OworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8VGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuPiBUZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlcjo6TWFuaXB1bGF0aW9uVG9rZW46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAg
IE1hbmlwdWxhdGlvblRva2VuIHJlc3VsdDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3Vs
dC5pZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5jb250ZW50KSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwkocmV2aXNpb24gMjUxNTcxKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSw0OSBAQAorMjAxOS0xMC0yMyAgUnlvc3VrZSBOaXdhICA8
cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgYSBtZWNoYW5pc20gdG8gZmluZCBhbmQg
bWFuaXB1bGF0ZSB0ZXh0IGJ5IHBhcmFncmFwaHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzI4NgorCisgICAgICAgIFJldmlld2VkIGJ5IFdlbnNv
biBIc2llaC4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgU1BJIHRvIGZp
bmQgcGFyYWdyYXBocyBvZiB0ZXh0IGFuZCBsZXQgY2xpZW50IHJlcGxhY2UgdGhlIGNvbnRlbnQg
b2YgZWFjaCBwYXJhZ3JhcGguCisgICAgICAgIEZvciBub3csIHRoaXMgU1BJIGlzIGxpbWl0ZWQg
dG8gZmluZCAmIHJlcGxhY2UgY29udGVudHMgb2YgbWFpbiBmcmFtZSdzIGRvY3VtZW50LgorCisg
ICAgICAgIFdLV2ViVmlldydzIF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbXBsZXRpb25I
YW5kbGVyIHNlbmRzIFN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMgbWVzc2FnZSB0byBXZWJDb250ZW50
IHByb2Nlc3MKKyAgICAgICAgdG8gZmluZCBhbGwgcGFyYWdyYXBocyBpbiB0aGUgbWFpbiBmcmFt
ZS4gV2ViQ29udGVudCBwcm9jZXNzIHdpbGwgc2VuZCBiYWNrIERpZEZpbmRUZXh0TWFuaXB1bGF0
aW9uSXRlbSBtZXNzYWdlCisgICAgICAgIGZvciBlYWNoIHBhcmFncmFwaCwgd2hpY2ggaW4gdHVy
biBjYWxscyBiYWNrIF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSdzIF93ZWJWaWV3OiBkaWRG
aW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW06LgorCisgICAgICAgIFVwb24gcmVjZWl2aW5nIHRoaXMg
ZGVsZWdhdGUgY2FsbGJhY2ssIHRoZSBjbGllbnQgY2FuIGludm9rZSBXS1dlYlZpZXcncyBfY29t
cGxldGVUZXh0TWFuaXB1bGF0aW9uIHRvIHJlcGxhY2UKKyAgICAgICAgdGhlIGNvbnRlbnQuIEl0
IHdpbGwgc2VuZCBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb24gdG8gV2ViQ29udGVudCBwcm9jZXNz
LCB3aGljaCB3aWxsIGludm9rZSBjb21wbGV0ZU1hbmlwdWxhdGlvbgorICAgICAgICBvbiBtYWlu
IGZyYW1lJ3MgZG9jdW1lbnQncyBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZV0pOiBBZGVkLgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTpdKTogQWRlZC4KKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbXBsZXRpb25IYW5kbGVyOl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbjpjb21wbGV0aW9u
Ol0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRl
Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxh
dGlvbkl0ZW0uaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0
TWFuaXB1bGF0aW9uSXRlbS5tbTogQWRkZWQuCisgICAgICAgICgtW19XS1RleHRNYW5pcHVsYXRp
b25JdGVtIGluaXRXaXRoSWRlbnRpZmllcjp0b2tlbnM6XSk6CisgICAgICAgICgtW19XS1RleHRN
YW5pcHVsYXRpb25JdGVtIGlkZW50aWZpZXJdKToKKyAgICAgICAgKC1bX1dLVGV4dE1hbmlwdWxh
dGlvbkl0ZW0gdG9rZW5zXSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0
TWFuaXB1bGF0aW9uVG9rZW4uaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4ubW06IEFkZGVkLgorICAgICAgICAoLVtfV0tUZXh0
TWFuaXB1bGF0aW9uVG9rZW4gaW5pdF0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN0YXJ0VGV4dE1hbmlwdWxh
dGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZEZpbmRUZXh0TWFuaXB1
bGF0aW9uSXRlbSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y29tcGxldGVUZXh0
TWFuaXB1bGF0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnN0YXJ0VGV4dE1hbmlw
dWxhdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjb21wbGV0ZVRleHRNYW5pcHVs
YXRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisKIDIwMTktMTAtMjQg
IE1hdHQgTGV3aXMgIDxqbGV3aXMzQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBy
b2xsaW5nIG91dCByMjUxNTU4LgpJbmRleDogU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAkocmV2aXNpb24g
MjUxNTcxKQorKysgU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0yNjAsNiArMjYwLDggQEAgVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQcm9jZXNzUG9vbENv
bmZpZwogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tSZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29udHJv
bGxlci5tbQogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tTZXNzaW9uU3RhdGUubW0KIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLVGV4dElucHV0Q29udGV4dC5tbQorVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5tbQorVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFu
aXB1bGF0aW9uVG9rZW4ubW0KIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGh1bWJuYWlsVmlldy5t
bQogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLm1tCiBV
SVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVyLm1tCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDI1MTU3MSkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk0MTksNiArOTQxOSwzNCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0TW9ja1dlYkF1dGhlbnRp
Y2F0CiB9CiAjZW5kaWYKIAordm9pZCBXZWJQYWdlUHJveHk6OnN0YXJ0VGV4dE1hbmlwdWxhdGlv
bnMoVGV4dE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjayYmIGNhbGxiYWNrLCBXVEY6OkNvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBpZiAoIWhhc1J1
bm5pbmdQcm9jZXNzKCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBtX3RleHRNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKTsKKyAgICBtX3Byb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlOjpTdGFydFRleHRNYW5pcHVsYXRpb25zKCksIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpLCBtX3dlYlBhZ2VJRCk7Cit9CisKK3ZvaWQgV2ViUGFnZVBy
b3h5OjpkaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW0oV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1JRCwKKyAgICBjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuPiYgdG9r
ZW5zKQoreworICAgIGlmICghbV90ZXh0TWFuaXB1bGF0aW9uSXRlbUNhbGxiYWNrKQorICAgICAg
ICByZXR1cm47CisgICAgbV90ZXh0TWFuaXB1bGF0aW9uSXRlbUNhbGxiYWNrKGl0ZW1JRCwgdG9r
ZW5zKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OmNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihX
ZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIgaXRlbUlE
LAorICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6
TWFuaXB1bGF0aW9uVG9rZW4+JiB0b2tlbnMsIFdURjo6RnVuY3Rpb248dm9pZCAoYm9vbCBzdWNj
ZXNzKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNz
KCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6OldlYlBhZ2U6OkNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihpdGVtSUQsIHRva2Vu
cyksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBtX3dlYlBhZ2VJRCk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdAogCiAjdW5kZWYgTUVSR0VfV0hFRUxfRVZFTlRTCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMjUxNTcxKQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3
LDYgKzc3LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0ZvbnRBdHRyaWJ1dGVzLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9GcmFtZUxvYWRlclR5cGVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZp
ZXcuaD4gLy8gRklYTUU6IE1vdmUgTGF5b3V0Vmlld3BvcnRDb25zdHJhaW50IHRvIGl0cyBvd24g
ZmlsZSBhbmQgc3RvcCBpbmNsdWRpbmcgdGhpcy4KKyNpbmNsdWRlIDxXZWJDb3JlL0dsb2JhbEZy
YW1lSWRlbnRpZmllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW5wdXRNb2RlLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9MYXlvdXRQb2ludC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTGF5b3V0U2l6ZS5o
PgpAQCAtOTMsNiArOTQsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2VhcmNoUG9wdXBNZW51Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0Q2hlY2tpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Rl
eHRHcmFudWxhcml0eS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24u
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1ZpZXdwb3J0QXJndW1lbnRzLmg+CiAjaW5jbHVkZSA8bWVt
b3J5PgpAQCAtMTYxMSw2ICsxNjEzLDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1vY2tXZWJB
dXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24oV2ViQ29yZTo6TW9ja1dlYkF1dGhlbnRpY2F0aW9u
Q29uZmlndXJhdGlvbiYmKTsKICNlbmRpZgogCisgICAgdXNpbmcgVGV4dE1hbmlwdWxhdGlvbkl0
ZW1DYWxsYmFjayA9IFdURjo6RnVuY3Rpb248dm9pZCAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuPiYpPjsKKyAgICB2b2lkIHN0
YXJ0VGV4dE1hbmlwdWxhdGlvbnMoVGV4dE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjayYmLCBXVEY6
OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBkaWRGaW5kVGV4dE1hbmlw
dWxhdGlvbkl0ZW0oV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVu
dGlmaWVyLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6
Ok1hbmlwdWxhdGlvblRva2VuPiYpOworICAgIHZvaWQgY29tcGxldGVUZXh0TWFuaXB1bGF0aW9u
KFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpJdGVtSWRlbnRpZmllciwKKyAg
ICAgICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpN
YW5pcHVsYXRpb25Ub2tlbj4mLCBXVEY6OkZ1bmN0aW9uPHZvaWQgKGJvb2wgc3VjY2Vzcyk+JiYp
OworCiBwcml2YXRlOgogICAgIFdlYlBhZ2VQcm94eShQYWdlQ2xpZW50JiwgV2ViUHJvY2Vzc1By
b3h5JiwgUmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+JiYpOwogICAgIHZvaWQgcGxhdGZvcm1J
bml0aWFsaXplKCk7CkBAIC0yNTc0LDYgKzI1ODIsOCBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5p
cXVlX3B0cjxTdXNwZW5kZWRQYWdlUHJveHk+IG1fc3VzcGVuZGVkUGFnZUtlcHRUb1ByZXZlbnRG
bGFzaGluZzsKICAgICBXZWFrUHRyPFN1c3BlbmRlZFBhZ2VQcm94eT4gbV9sYXN0U3VzcGVuZGVk
UGFnZTsKIAorICAgIFRleHRNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2sgbV90ZXh0TWFuaXB1bGF0
aW9uSXRlbUNhbGxiYWNrOworCiAjaWYgSEFWRShQRU5DSUxLSVQpCiAgICAgc3RkOjp1bmlxdWVf
cHRyPEVkaXRhYmxlSW1hZ2VDb250cm9sbGVyPiBtX2VkaXRhYmxlSW1hZ2VDb250cm9sbGVyOwog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2Fn
ZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyNTE1NzEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTU4MSw0ICs1ODEs
NyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIFNlbmRNZXNzYWdlVG9XZWJWaWV3
KHN0cnVjdCBXZWJLaXQ6OlVzZXJNZXNzYWdlIHVzZXJNZXNzYWdlKQogICAgIFNlbmRNZXNzYWdl
VG9XZWJWaWV3V2l0aFJlcGx5KHN0cnVjdCBXZWJLaXQ6OlVzZXJNZXNzYWdlIHVzZXJNZXNzYWdl
KSAtPiAoc3RydWN0IFdlYktpdDo6VXNlck1lc3NhZ2UgcmVwbHlNZXNzYWdlKSBBc3luYwogI2Vu
ZGlmCisKKyAgICBEaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW0oV2ViQ29yZTo6VGV4dE1hbmlw
dWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1JRCwgVmVjdG9yPFdlYkNvcmU6
OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zKQor
CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXcubW0JKHJldmlzaW9uIDI1MTU3MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTk5LDYgKzk5LDkgQEAKICNpbXBv
cnQgIl9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1Nlc3Np
b25TdGF0ZUludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tUZXh0SW5wdXRDb250ZXh0SW50ZXJuYWwu
aCIKKyNpbXBvcnQgIl9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oIgorI2ltcG9ydCAiX1dL
VGV4dE1hbmlwdWxhdGlvbkl0ZW0uaCIKKyNpbXBvcnQgIl9XS1RleHRNYW5pcHVsYXRpb25Ub2tl
bi5oIgogI2ltcG9ydCAiX1dLVmlzaXRlZExpbmtTdG9yZUludGVybmFsLmgiCiAjaW1wb3J0ICJf
V0tXZWJzaXRlUG9saWNpZXNJbnRlcm5hbC5oIgogI2ltcG9ydCA8V2ViQ29yZS9FbGVtZW50Q29u
dGV4dC5oPgpAQCAtMTE0LDYgKzExNyw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1NldHRpbmdzLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TdHJp
bmdVdGlsaXRpZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvVmFsaWRhdGlvbkJ1YmJsZS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9WaWV3cG9ydEFyZ3VtZW50cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Xcml0aW5nTW9kZS5o
PgpAQCAtMjc3LDYgKzI4MSw4IEBAIHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpTY3JvbGxiYXJP
dmVybGEKIAogICAgIEJPT0wgX3VzZVBsYXRmb3JtRmluZFVJOwogCisgICAgV2Vha09iakNQdHI8
aWQgPF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4+IF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdh
dGU7CisKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIFJldGFpblB0cjxfV0tSZW1vdGVP
YmplY3RSZWdpc3RyeT4gX3JlbW90ZU9iamVjdFJlZ2lzdHJ5OwogCkBAIC03NDYxLDYgKzc0Njcs
NjUgQEAgLSAodm9pZClfZXhlY3V0ZUVkaXRDb21tYW5kOihOU1N0cmluZyAqKQogICAgIH0pOwog
fQogCistIChpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlPilfdGV4dE1hbmlwdWxhdGlv
bkRlbGVnYXRlCit7CisgICAgcmV0dXJuIF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUuZ2V0QXV0
b3JlbGVhc2VkKCk7Cit9CisKKy0gKHZvaWQpX3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZToo
aWQgPF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4pZGVsZWdhdGUKK3sKKyAgICBfdGV4dE1h
bmlwdWxhdGlvbkRlbGVnYXRlID0gZGVsZWdhdGU7Cit9CisKKy0gKHZvaWQpX3N0YXJ0VGV4dE1h
bmlwdWxhdGlvbnNXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoKSljb21wbGV0aW9uSGFu
ZGxlcgoreworICAgIGlmICghX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSkKKyAgICAgICAgcmV0
dXJuOworICAgIGlmICghX3BhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBfcGFnZS0+c3RhcnRU
ZXh0TWFuaXB1bGF0aW9ucyhbd2Vha1NlbGYgPSBXZWFrT2JqQ1B0cjxXS1dlYlZpZXc+KHNlbGYp
XSAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0
ZW1JRCwKKyAgICAgICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4mIHRva2VucykgeworICAgICAgICBpZiAoIXdlYWtT
ZWxmKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gcmV0YWluZWRTZWxmID0g
d2Vha1NlbGYuZ2V0KCk7CisgICAgICAgIGF1dG8gZGVsZWdhdGUgPSBbcmV0YWluZWRTZWxmIF90
ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGVdOworICAgICAgICBpZiAoIWRlbGVnYXRlKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIE5TTXV0YWJsZUFycmF5ICp3a1Rva2VucyA9IFtOU011
dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTp0b2tlbnMuc2l6ZSgpXTsKKyAgICAgICAgZm9y
IChhdXRvJiB0b2tlbiA6IHRva2VucykgeworICAgICAgICAgICAgYXV0byB3a1Rva2VuID0gYWRv
cHROUyhbW19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiBhbGxvY10gaW5pdF0pOworICAgICAgICAg
ICAgW3drVG9rZW4gc2V0SWRlbnRpZmllcjpTdHJpbmc6Om51bWJlcih0b2tlbi5pZGVudGlmaWVy
LnRvVUludDY0KCkpXTsKKyAgICAgICAgICAgIFt3a1Rva2VuIHNldENvbnRlbnQ6dG9rZW4uY29u
dGVudF07CisgICAgICAgICAgICBbd2tUb2tlbnMgYWRkT2JqZWN0OndrVG9rZW4uZ2V0KCldOwor
ICAgICAgICB9CisKKyAgICAgICAgYXV0byBpdGVtID0gYWRvcHROUyhbW19XS1RleHRNYW5pcHVs
YXRpb25JdGVtIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6U3RyaW5nOjpudW1iZXIoaXRlbUlE
LnRvVUludDY0KCkpIHRva2Vuczp3a1Rva2Vuc10pOworICAgICAgICBbZGVsZWdhdGUgX3dlYlZp
ZXc6cmV0YWluZWRTZWxmLmdldCgpIGRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbTppdGVtLmdl
dCgpXTsKKyAgICB9LCBbY2FwdHVyZWRDb21wbGV0aW9uQmxvY2sgPSBtYWtlQmxvY2tQdHIoY29t
cGxldGlvbkhhbmRsZXIpXSAoKSB7CisgICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkJsb2NrKCk7
CisgICAgfSk7Cit9CisKKy0gKHZvaWQpX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbjooX1dLVGV4
dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVtIGNvbXBsZXRpb246KHZvaWQoXikoQk9PTCBzdWNjZXNz
KSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIGlmICghX3BhZ2UpCisgICAgICAgIHJldHVybjsK
KworICAgIGF1dG8gaXRlbUlEID0gbWFrZU9iamVjdElkZW50aWZpZXI8V2ViQ29yZTo6VGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyVHlwZT4oU3RyaW5nKGl0ZW0uaWRl
bnRpZmllcikudG9VSW50NjQoKSk7CisKKyAgICBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuPiB0b2tlbnM7CisgICAgZm9yIChfV0tU
ZXh0TWFuaXB1bGF0aW9uVG9rZW4gKndrVG9rZW4gaW4gaXRlbS50b2tlbnMpIHsKKyAgICAgICAg
YXV0byB0b2tlbklEID0gbWFrZU9iamVjdElkZW50aWZpZXI8V2ViQ29yZTo6VGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXI6OlRva2VuSWRlbnRpZmllclR5cGU+KFN0cmluZyh3a1Rva2VuLmlkZW50
aWZpZXIpLnRvVUludDY0KCkpOworICAgICAgICB0b2tlbnMuYXBwZW5kKFdlYkNvcmU6OlRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbiB7IHRva2VuSUQsIHdrVG9r
ZW4uY29udGVudCB9KTsKKyAgICB9CisKKyAgICBfcGFnZS0+Y29tcGxldGVUZXh0TWFuaXB1bGF0
aW9uKGl0ZW1JRCwgdG9rZW5zLCBbY2FwdHVyZWRDb21wbGV0aW9uQmxvY2sgPSBtYWtlQmxvY2tQ
dHIoY29tcGxldGlvbkhhbmRsZXIpXSAoYm9vbCBzdWNjZXNzKSB7CisgICAgICAgIGNhcHR1cmVk
Q29tcGxldGlvbkJsb2NrKHN1Y2Nlc3MpOworICAgIH0pOworfQorCiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKIAogLSAoQ0dSZWN0KV9kcmFnQ2FyZXRSZWN0CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgJKHJldmlz
aW9uIDI1MTU3MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXdQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw2ICsxMTMsNyBAQCB0eXBlZGVmIE5T
X09QVElPTlMoTlNVSW50ZWdlciwgX1dLUmVjdEVkCiBAY2xhc3MgX1dLU2FmZUJyb3dzaW5nV2Fy
bmluZzsKIEBjbGFzcyBfV0tTZXNzaW9uU3RhdGU7CiBAY2xhc3MgX1dLVGV4dElucHV0Q29udGV4
dDsKK0BjbGFzcyBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbTsKIEBjbGFzcyBfV0tUaHVtYm5haWxW
aWV3OwogQGNsYXNzIF9XS1dlYnNpdGVQb2xpY2llczsKIEBjbGFzcyBfV0tXZWJWaWV3UHJpbnRG
b3JtYXR0ZXI7CkBAIC0xMjAsOSArMTIxLDEwIEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRl
Z2VyLCBfV0tSZWN0RWQKIEBwcm90b2NvbCBXS0hpc3RvcnlEZWxlZ2F0ZVByaXZhdGU7CiBAcHJv
dG9jb2wgX1dLRGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZTsKIEBwcm90b2NvbCBfV0tGaW5kRGVs
ZWdhdGU7CitAcHJvdG9jb2wgX1dLRnVsbHNjcmVlbkRlbGVnYXRlOwogQHByb3RvY29sIF9XS0lj
b25Mb2FkaW5nRGVsZWdhdGU7CiBAcHJvdG9jb2wgX1dLSW5wdXREZWxlZ2F0ZTsKLUBwcm90b2Nv
bCBfV0tGdWxsc2NyZWVuRGVsZWdhdGU7CitAcHJvdG9jb2wgX1dLVGV4dE1hbmlwdWxhdGlvbkRl
bGVnYXRlOwogCiBAaW50ZXJmYWNlIFdLV2ViVmlldyAoV0tQcml2YXRlKQogCkBAIC01NzUsNiAr
NTc3LDEwIEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tSZWN0RWQKIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgX1dLSW5zcGVjdG9yICpfaW5zcGVjdG9yIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7CiBAcHJvcGVydHkgKG5vbmF0
b21pYywgcmVhZG9ubHkpIF9XS0ZyYW1lSGFuZGxlICpfbWFpbkZyYW1lIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7CiAKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCB3
ZWFrLCBzZXR0ZXI9X3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTopIGlkIDxfV0tUZXh0TWFu
aXB1bGF0aW9uRGVsZWdhdGU+IF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3N0YXJ0
VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikodm9pZCkpY29t
cGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKTsKKy0gKHZvaWQpX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbjooX1dLVGV4dE1h
bmlwdWxhdGlvbkl0ZW0gKilpdGVtIGNvbXBsZXRpb246KHZvaWQoXikoQk9PTCBzdWNjZXNzKSlj
b21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3Mo
V0tfSU9TX1RCQSkpOworCiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRTY3JvbGxp
bmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nOikgQk9PTCBfc2Nyb2xsaW5nVXBkYXRlc0Rpc2Fi
bGVkRm9yVGVzdGluZyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOwogCiAtICh2b2lkKV9wcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVz
dGluZzsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFu
aXB1bGF0aW9uRGVsZWdhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25E
ZWxlZ2F0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW1wb3J0IDxXZWJLaXQvV0tGb3VuZGF0aW9uLmg+CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91
bmRhdGlvbi5oPgorCitAY2xhc3MgX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW07CisKK0Bwcm90b2Nv
bCBfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgPE5TT2JqZWN0PgorCitAb3B0aW9uYWwKKwor
LSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWRGaW5kVGV4dE1hbmlwdWxh
dGlvbkl0ZW06KF9XS1RleHRNYW5pcHVsYXRpb25JdGVtICopaXRlbTsKKworQGVuZAorCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvbkl0
ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
VGV4dE1hbmlwdWxhdGlvbkl0ZW0uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0uaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0L1dLRm91bmRh
dGlvbi5oPgorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworQGNsYXNzIF9X
S1RleHRNYW5pcHVsYXRpb25Ub2tlbjsKKworV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zKFdLX01B
Q19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpCitAaW50ZXJmYWNlIF9XS1RleHRNYW5pcHVsYXRpb25J
dGVtIDogTlNPYmplY3QKKworLSAoaW5zdGFuY2V0eXBlKWluaXQgTlNfVU5BVkFJTEFCTEU7Cist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIg
dG9rZW5zOihOU0FycmF5PF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiAqPiAqKXRva2VuczsKKwor
QHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBOU1N0cmluZyAqaWRlbnRpZmll
cjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNBcnJheTxfV0tUZXh0
TWFuaXB1bGF0aW9uVG9rZW4gKj4gKnRva2VuczsKKworQGVuZApJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25JdGVtLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0
aW9uSXRlbS5tbQkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0ubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiX1dLVGV4
dE1hbmlwdWxhdGlvbkl0ZW0uaCIKKworI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCitAaW1w
bGVtZW50YXRpb24gX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0geworICAgIFJldGFpblB0cjxOU1N0
cmluZz4gX2lkZW50aWZpZXI7CisgICAgUmV0YWluUHRyPE5TQXJyYXk8X1dLVGV4dE1hbmlwdWxh
dGlvblRva2VuICo+PiBfdG9rZW5zOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJZGVu
dGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXIgdG9rZW5zOihOU0FycmF5PF9XS1RleHRNYW5p
cHVsYXRpb25Ub2tlbiAqPiAqKXRva2VucworeworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5p
dF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX2lkZW50aWZpZXIgPSBpZGVudGlmaWVy
OworICAgIF90b2tlbnMgPSB0b2tlbnM7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKE5TU3Ry
aW5nICopaWRlbnRpZmllcgoreworICAgIHJldHVybiBfaWRlbnRpZmllci5nZXQoKTsKK30KKwor
LSAoTlNBcnJheTxfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gKj4gKil0b2tlbnMKK3sKKyAgICBy
ZXR1cm4gX3Rva2Vucy5nZXQoKTsKK30KKworQGVuZApJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9r
ZW4uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KKworI2ltcG9y
dCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKK1dLX0NMQVNTX0FWQUlMQUJMRShtYWNvcyhX
S19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKQorQGludGVyZmFjZSBfV0tUZXh0TWFuaXB1bGF0
aW9uVG9rZW4gOiBOU09iamVjdAorCitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJp
bmcgKmlkZW50aWZpZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgTlNTdHJpbmcgKmNv
bnRlbnQ7CisKK0BlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbQkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxh
dGlvblRva2VuLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIl9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5o
IgorCisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK0BpbXBsZW1lbnRhdGlvbiBfV0tUZXh0
TWFuaXB1bGF0aW9uVG9rZW4KK0BlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL0Rvd25sb2FkUHJveHlNYXBDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9Eb3dubG9hZFByb3h5TWFwQ29jb2EubW0JKHJldmlzaW9uIDI1MTU3
MSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL0Rvd25sb2FkUHJveHlNYXBDb2Nv
YS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBAQAogI2ltcG9ydCAiRG93bmxvYWRQ
cm94eU1hcC5oIgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpbXBvcnQgPHd0Zi9CbG9j
a1B0ci5oPgorI2ltcG9ydCA8d3RmL1dlYWtQdHIuaD4KICNpbXBvcnQgPFVJS2l0L1VJS2l0Lmg+
CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vz
c1Bvb2xDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCShyZXZpc2lvbiAyNTE1NzEpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw2ICs0MSw3IEBACiAjaW1wb3J0ICJXZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXIuaCIK
ICNpbXBvcnQgIldlYlBhZ2VHcm91cC5oIgogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNLZXlzLmgi
CisjaW1wb3J0ICJXZWJQcm9jZXNzQ2FjaGUuaCIKICNpbXBvcnQgIldlYlByb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuaCIKICNpbXBvcnQgIldlYlByb2Nlc3NNZXNzYWdlcy5oIgogI2ltcG9ydCAi
V2luZG93U2VydmVyQ29ubmVjdGlvbi5oIgpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0
aG9yaXphdGlvblNlc3Npb24ubW0JKHJldmlzaW9uIDI1MTU3MSkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25TZXNzaW9uLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW1wb3J0ICJBUElVSUNsaWVudC5o
IgogI2ltcG9ydCAiU09BdXRob3JpemF0aW9uTG9hZFBvbGljeS5oIgogI2ltcG9ydCAiV0tVSURl
bGVnYXRlUHJpdmF0ZS5oIgorI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQg
IldlYlBhZ2VQcm94eS5oIgogI2ltcG9ydCAiV2Vic2l0ZURhdGFTdG9yZS5oIgogI2ltcG9ydCA8
V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5tbQko
cmV2aXNpb24gMjUxNTcxKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLRnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAK
ICNpbXBvcnQgPFdlYkNvcmUvVmlkZW9GdWxsc2NyZWVuTW9kZWwuaD4KICNpbXBvcnQgPFdlYkNv
cmUvV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUv
V2ViQ29yZUZ1bGxTY3JlZW5XaW5kb3cuaD4KKyNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBo
aWNzU1BJLmg+CiAjaW1wb3J0IDxwYWwvc3lzdGVtL1NsZWVwRGlzYWJsZXIuaD4KICNpbXBvcnQg
PHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjUxNTcxKQorKysgU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMTMzNCw2ICsxMzM0LDkgQEAKIAkJOTlFNzE0QzUxQzEyNEEwNDAwNjY1QjNBIC8qIF9X
S0F1dG9tYXRpb25EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTlFNzE0QzExQzEyNDlFNjAwNjY1QjNBIC8qIF9XS0F1dG9tYXRpb25EZWxl
Z2F0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTk5RTcxODlBMjFGNzlEOUUwMDU1RTk3NSAvKiBfV0tUb3VjaEV2ZW50R2VuZXJhdG9yLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTlFNzE4OTYyMUY3
OUQ5RDAwNTVFOTc1IC8qIF9XS1RvdWNoRXZlbnRHZW5lcmF0b3IubW0gKi87IH07CiAJCTk5RTcx
ODlDMjFGNzlEOUUwMDU1RTk3NSAvKiBfV0tUb3VjaEV2ZW50R2VuZXJhdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OUU3MTg5ODIxRjc5RDlFMDA1
NUU5NzUgLyogX1dLVG91Y2hFdmVudEdlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTlCMDJFMENCMjM1RUI5NTMwMDQwNDRCMiAvKiBf
V0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDlCMDJFMEM5MjM1RUI2MkQwMDQwNDRCMiAvKiBfV0tUZXh0TWFu
aXB1bGF0aW9uRGVsZWdhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk5QjAyRTBDQzIzNUVCOTU3MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxh
dGlvbkl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDlCMDJFMENBMjM1RUI4ODQwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTlCMDJFMEQ3
MjM1RkM5NEYwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMDJFMENEMjM1RUI5NjcwMDQw
NDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5RkI1RjM5NTE2OUU2QTgwMDAyQzI1QkYgLyog
V0tDb250ZXh0UHJpdmF0ZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOUZCNUYzOTMxNjlFNkE4MDAwMkMyNUJGIC8qIFdLQ29udGV4dFByaXZhdGVN
YWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlB
MTAyQTcwODFFQzBFRUU5MDBEODFEODIgLyogY29tLm1hY3JvbWVkaWEuRmxhc2ggUGxheWVyIEVT
Ui5wbHVnaW4uc2IgaW4gQ29weSBQbHVnLWluIFNhbmRib3ggUHJvZmlsZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0E1RTM5NDkxRDVCRDhBNzAwQjRCN0NFIC8qIGNvbS5t
YWNyb21lZGlhLkZsYXNoIFBsYXllciBFU1IucGx1Z2luLnNiICovOyB9OwogCQlBMTA0NkVBMTIw
NzkyNjMxMDBGMEM1RDggLyogV0tQREZWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBMTA0NkU5RjIwNzkyNjMxMDBGMEM1RDggLyogV0tQREZWaWV3
LmggKi87IH07CkBAIC0xNzI5LDggKzE3MzIsNiBAQAogCQkJY29tcGlsZXJTcGVjID0gY29tLmFw
cGxlLmNvbXBpbGVycy5wcm94eS5zY3JpcHQ7CiAJCQlmaWxlUGF0dGVybnMgPSAiKi5oIjsKIAkJ
CWZpbGVUeXBlID0gcGF0dGVybi5wcm94eTsKLQkJCWlucHV0RmlsZXMgPSAoCi0JCQkpOwogCQkJ
aXNFZGl0YWJsZSA9IDE7CiAJCQlvdXRwdXRGaWxlcyA9ICgKIAkJCQkiJChIRUFERVJfT1VUUFVU
X0RJUikvJChJTlBVVF9GSUxFX05BTUUpIiwKQEAgLTQwNTEsNiArNDA1MiwxMSBAQAogCQk5OUU3
MTg5NjIxRjc5RDlEMDA1NUU5NzUgLyogX1dLVG91Y2hFdmVudEdlbmVyYXRvci5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IF9XS1RvdWNoRXZlbnRHZW5lcmF0b3Iu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5RTcxODk4MjFGNzlEOUUwMDU1RTk3
NSAvKiBfV0tUb3VjaEV2ZW50R2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IF9XS1RvdWNoRXZlbnRHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTlGNjQyRDIxRkFCRTM3ODAwOTYyMUU5IC8qIENvb3JkaW5hdGVTeXN0ZW0uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29vcmRpbmF0ZVN5c3RlbS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5QjAyRTBDOTIzNUVCNjJEMDA0MDQ0QjIgLyogX1dLVGV4
dE1hbmlwdWxhdGlvbkRlbGVnYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS1RleHRNYW5pcHVsYXRp
b25EZWxlZ2F0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QjAyRTBDQTIzNUVC
ODg0MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
OUIwMkUwQ0QyMzVFQjk2NzAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOUIwMkUwQ0UyMzVFQkIxNDAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVs
YXRpb25Ub2tlbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IF9XS1RleHRNYW5pcHVsYXRpb25U
b2tlbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUIwMkUwRDAyMzVFQkNDQTAw
NDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTlCQzU5RDZDMUVGQ0NDQjYwMDFFOEQwOSAvKiBDYWxsYmFja0lELmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxiYWNrSUQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOUJDNTlENkQxRUZDREM2RDAwMUU4RDA5IC8qIE9wdGlvbmFsQ2FsbGJhY2tJRC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcHRpb25hbENhbGxiYWNrSUQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUY1NEY4OEUxNjQ4OEU4NzAwN0RGODFBIC8q
IEF1eGlsaWFyeVByb2Nlc3NNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBBdXhpbGlhcnlQcm9jZXNzTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNjM1MCw2ICs2MzU2LDExIEBACiAJCQkJMkRFOUIxMzgyMjMxRjYxQzAwNTI4N0I3IC8q
IF9XS1RleHRJbnB1dENvbnRleHQuaCAqLywKIAkJCQkyREU5QjEzNzIyMzFGNjFDMDA1Mjg3Qjcg
LyogX1dLVGV4dElucHV0Q29udGV4dC5tbSAqLywKIAkJCQkyREU5QjEzQjIyMzFGNzdDMDA1Mjg3
QjcgLyogX1dLVGV4dElucHV0Q29udGV4dEludGVybmFsLmggKi8sCisJCQkJOUIwMkUwQzkyMzVF
QjYyRDAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oICovLAorCQkJCTlC
MDJFMENBMjM1RUI4ODQwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oICovLAor
CQkJCTlCMDJFMEQwMjM1RUJDQ0EwMDQwNDRCMiAvKiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5t
bSAqLywKKwkJCQk5QjAyRTBDRDIzNUVCOTY3MDA0MDQ0QjIgLyogX1dLVGV4dE1hbmlwdWxhdGlv
blRva2VuLmggKi8sCisJCQkJOUIwMkUwQ0UyMzVFQkIxNDAwNDA0NEIyIC8qIF9XS1RleHRNYW5p
cHVsYXRpb25Ub2tlbi5tbSAqLywKIAkJCQkyRDZCMzcxOTE4QTk2N0FEMDA0MkFFODAgLyogX1dL
VGh1bWJuYWlsVmlldy5oICovLAogCQkJCTJENkIzNzFBMThBOTY3QUQwMDQyQUU4MCAvKiBfV0tU
aHVtYm5haWxWaWV3Lm1tICovLAogCQkJCTJEQUNFNjREMThBREJGRjAwMEU0Q0E3NiAvKiBfV0tU
aHVtYm5haWxWaWV3SW50ZXJuYWwuaCAqLywKQEAgLTkzMTksNiArOTMzMCw5IEBACiAJCQkJMUEw
MDJENDMxOTZCMzM3MDAwQjlBRDQ0IC8qIF9XS1Nlc3Npb25TdGF0ZUludGVybmFsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkyREU5QjEzQTIyMzFGNjFDMDA1Mjg3QjcgLyogX1dLVGV4dElucHV0Q29u
dGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRFOUIxM0MyMjMxRjc3QzAwNTI4N0I3IC8qIF9X
S1RleHRJbnB1dENvbnRleHRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJOUIwMkUwQ0Iy
MzVFQjk1MzAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJOUIwMkUwQ0MyMzVFQjk1NzAwNDA0NEIyIC8qIF9XS1RleHRNYW5pcHVsYXRp
b25JdGVtLmggaW4gSGVhZGVycyAqLywKKwkJCQk5QjAyRTBENzIzNUZDOTRGMDA0MDQ0QjIgLyog
X1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDZCMzcxQjE4
QTk2N0FEMDA0MkFFODAgLyogX1dLVGh1bWJuYWlsVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MkRBQ0U2NEUxOEFEQkZGMDAwRTRDQTc2IC8qIF9XS1RodW1ibmFpbFZpZXdJbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTlFNzE4OUMyMUY3OUQ5RTAwNTVFOTc1IC8qIF9XS1RvdWNoRXZl
bnRHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDI1MTU3MSkKKysrIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
ODM2LDYgKzY4MzYsNTEgQEAgT3B0aW9uYWw8V2ViQ29yZTo6RWxlbWVudENvbnRleHQ+IFdlYlBh
ZwogICAgIHJldHVybiBXZWJDb3JlOjpFbGVtZW50Q29udGV4dCB7IGVsZW1lbnRSZWN0SW5Sb290
Vmlld0Nvb3JkaW5hdGVzKGVsZW1lbnQsICpmcmFtZSksIG1faWRlbnRpZmllciwgZG9jdW1lbnQu
aWRlbnRpZmllcigpLCBkb2N1bWVudC5pZGVudGlmaWVyRm9yRWxlbWVudChlbGVtZW50KSB9Owog
fQogCit2b2lkIFdlYlBhZ2U6OnN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGlmICghbV9wYWdlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBhdXRvIG1haW5Eb2N1bWVudCA9IG1ha2VSZWZQdHIobV9wYWdl
LT5tYWluRnJhbWUoKS5kb2N1bWVudCgpKTsKKyAgICBpZiAoIW1haW5Eb2N1bWVudCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbWFpbkRvY3VtZW50LT50ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxl
cigpLnN0YXJ0T2JzZXJ2aW5nUGFyYWdyYXBocyhbd2ViUGFnZSA9IG1ha2VXZWFrUHRyKCp0aGlz
KV0gKFdlYkNvcmU6OkRvY3VtZW50JiBkb2N1bWVudCwKKyAgICAgICAgV2ViQ29yZTo6VGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1JZGVudGlmaWVyLCBjb25z
dCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlv
blRva2VuPiYgdG9rZW5zKSB7CisgICAgICAgIGF1dG8qIGZyYW1lID0gZG9jdW1lbnQuZnJhbWUo
KTsKKyAgICAgICAgaWYgKCF3ZWJQYWdlIHx8ICFmcmFtZSB8fCB3ZWJQYWdlLT5tYWluRnJhbWUo
KSAhPSBmcmFtZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvKiB3ZWJGcmFt
ZSA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCpmcmFtZSk7CisgICAgICAgIGlmICghd2ViRnJh
bWUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpEaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW0oaXRlbUlkZW50aWZp
ZXIsIHRva2VucykpOworICAgIH0pOworICAgIC8vIEZvciBub3csIHdlIGFzc3VtZSBzdGFydE9i
c2VydmluZ1BhcmFncmFwaHMgZmluZCBhbGwgcGFyYWdyYXBocyBzeW5jaHJvbm91c2x5IGF0IG9u
Y2UuCisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKK30KKwordm9pZCBXZWJQYWdlOjpjb21wbGV0
ZVRleHRNYW5pcHVsYXRpb24oV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0
ZW1JZGVudGlmaWVyIGl0ZW1JRCwKKyAgICBjb25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlw
dWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuPiYgdG9rZW5zLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGF1dG8gY29t
cGxldGVNYW5pcHVsYXRpb24gPSBbJl0geworICAgICAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBhdXRvIG1haW5Eb2N1bWVudCA9IG1ha2VSZWZQ
dHIobV9wYWdlLT5tYWluRnJhbWUoKS5kb2N1bWVudCgpKTsKKyAgICAgICAgaWYgKCFtYWluRG9j
dW1lbnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXV0byogY29udHJv
bGxlciA9IG1haW5Eb2N1bWVudC0+dGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXJJZkV4aXN0cygp
OworICAgICAgICBpZiAoIWNvbnRyb2xsZXIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXItPmNvbXBsZXRlTWFuaXB1bGF0aW9uKGl0ZW1JRCwg
dG9rZW5zKTsKKyAgICB9OworICAgIGNvbXBsZXRpb25IYW5kbGVyKGNvbXBsZXRlTWFuaXB1bGF0
aW9uKCkpOworfQorCiBQQUw6OlNlc3Npb25JRCBXZWJQYWdlOjpzZXNzaW9uSUQoKSBjb25zdAog
ewogICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zZXNzaW9uSUQoKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDI1
MTU3MSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29y
a2luZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUG9pbnRlcklE
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9TaGFyZURhdGEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Vc2VyQWN0aXZpdHkuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJDb250ZW50VHlwZXMuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24uaD4KQEAgLTExOTYsNiArMTE5NywxMCBAQCBw
dWJsaWM6CiAgICAgV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudEZvckNvbnRleHQoY29uc3QgV2Vi
Q29yZTo6RWxlbWVudENvbnRleHQmKSBjb25zdDsKICAgICBPcHRpb25hbDxXZWJDb3JlOjpFbGVt
ZW50Q29udGV4dD4gY29udGV4dEZvckVsZW1lbnQoV2ViQ29yZTo6RWxlbWVudCYpIGNvbnN0Owog
CisgICAgdm9pZCBzdGFydFRleHRNYW5pcHVsYXRpb25zKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7CisgICAgdm9pZCBjb21wbGV0ZVRleHRNYW5pcHVsYXRpb24oV2ViQ29yZTo6VGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyLAorICAgICAgICBjb25zdCBWZWN0
b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2Vu
PiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOworCiAjaWYgRU5BQkxFKEFQUExF
X1BBWSkKICAgICBXZWJQYXltZW50Q29vcmRpbmF0b3IqIHBheW1lbnRDb29yZGluYXRvcigpOwog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1l
c3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UubWVzc2FnZXMuaW4JKHJldmlzaW9uIDI1MTU3MSkKKysrIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAg
LTU4Miw0ICs1ODIsNyBAQCBHZW5lcmF0ZVN5bnRoZXRpY0VkaXRpbmdDb21tYW5kKGVudW06dWlu
CiAgICAgU2VuZE1lc3NhZ2VUb1dlYkV4dGVuc2lvbihzdHJ1Y3QgV2ViS2l0OjpVc2VyTWVzc2Fn
ZSB1c2VyTWVzc2FnZSkKICAgICBTZW5kTWVzc2FnZVRvV2ViRXh0ZW5zaW9uV2l0aFJlcGx5KHN0
cnVjdCBXZWJLaXQ6OlVzZXJNZXNzYWdlIHVzZXJNZXNzYWdlKSAtPiAoc3RydWN0IFdlYktpdDo6
VXNlck1lc3NhZ2UgcmVwbHlNZXNzYWdlKSBBc3luYwogI2VuZGlmCisKKyAgICBTdGFydFRleHRN
YW5pcHVsYXRpb25zKCkgLT4gKCkgQXN5bmMKKyAgICBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb24o
V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1J
RCwgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRp
b25Ub2tlbj4gdG9rZW5zKSAtPiAoYm9vbCBzdWNjZXNzKSBBc3luYwogfQpJbmRleDogVG9vbHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjUxNTcx
KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIw
MTktMTAtMjMgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRk
IGEgbWVjaGFuaXNtIHRvIGZpbmQgYW5kIG1hbmlwdWxhdGUgdGV4dCBieSBwYXJhZ3JhcGhzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDMyODYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBXZW5zb24gSHNpZWguCisKKyAgICAgICAgQWRkZWQgYmFzaWMg
QVBJIHRlc3RzIGZvciB0aGUgbmV3IFNQSS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbTogQWRkZWQuCisgICAg
ICAgICgtW1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBpbml0XSk6CisgICAgICAgICgtW1RleHRN
YW5pcHVsYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzpkaWRGaW5kSXRlbTpmb3JGcmFtZTpdKToKKyAg
ICAgICAgKC1bVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGl0ZW1zXSk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpjcmVhdGVJdGVtKToKKwogMjAxOS0xMC0yNCAgTWF0dCBMZXdpcyAgPGpsZXdp
czNAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyNTE1NTgu
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRB
UEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjUxNTcxKQorKysgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTc0MCw2ICs3NDAsNyBAQAogCQk5OTg0RkFDQzFDRkZBRjYwMDA4RDE5
OEMgLyogV0tXZWJWaWV3VGV4dElucHV0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTk4NEZBQ0ExQ0ZGQUVFRTAwOEQxOThDIC8qIFdLV2ViVmlld1Rl
eHRJbnB1dC5tbSAqLzsgfTsKIAkJOTk4NEZBQ0UxQ0ZGQjA5MDAwOEQxOThDIC8qIGVkaXRhYmxl
LWJvZHkuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5OTg0RkFDRDFDRkZCMDM4MDA4RDE5OEMgLyogZWRpdGFibGUtYm9keS5odG1sICov
OyB9OwogCQk5OTk5MTA4QjFGMzkzQzk2MDA4QUQ0NTUgLyogQ29weWluZy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5OTkxMDhBMUYzOTNDOEIwMDhB
RDQ1NSAvKiBDb3B5aW5nLm1tICovOyB9OworCQk5QjAyRTBENjIzNUZBNDdEMDA0MDQ0QjIgLyog
VGV4dE1hbmlwdWxhdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDlCMDJFMEQ1MjM1RkE0N0QwMDQwNDRCMiAvKiBUZXh0TWFuaXB1bGF0aW9uLm1t
ICovOyB9OwogCQk5QjA3ODZBNTFDNTg4NUMzMDBEMTU5RTMgLyogSW5qZWN0ZWRCdW5kbGVNYWtl
QWxsU2hhZG93Um9vdHNPcGVuX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5QjA3ODZBNDFDNTg4NUMzMDBEMTU5RTMgLyogSW5qZWN0ZWRC
dW5kbGVNYWtlQWxsU2hhZG93Um9vdHNPcGVuX0J1bmRsZS5jcHAgKi87IH07CiAJCTlCMTlDREEw
MUYwNkRGRTMwMDA1NDhERCAvKiBOZXR3b3JrUHJvY2Vzc0NyYXNoV2l0aFBlbmRpbmdDb25uZWN0
aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIx
OUNEOUUxRjA2REZFMzAwMDU0OEREIC8qIE5ldHdvcmtQcm9jZXNzQ3Jhc2hXaXRoUGVuZGluZ0Nv
bm5lY3Rpb24ubW0gKi87IH07CiAJCTlCMUY2Rjc4MUY5MDU1ODQwMEI1NTc0NCAvKiBDb3B5SFRN
TC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMTA1
NjQxMUY5MDQ1QzcwMEQ1NTgzRiAvKiBDb3B5SFRNTC5tbSAqLzsgfTsKQEAgLTExMjgsNyArMTEy
OSw2IEBACiAJCQlkc3RQYXRoID0gVGVzdFdlYktpdEFQSS5yZXNvdXJjZXM7CiAJCQlkc3RTdWJm
b2xkZXJTcGVjID0gNzsKIAkJCWZpbGVzID0gKAotCQkJCTU3OTgzMzdFMjM2MDE5QTQwMDhFNTU0
NyAvKiB3ZWItYXV0aGVudGljYXRpb24tbWFrZS1jcmVkZW50aWFsLWhpZC5odG1sIGluIENvcHkg
UmVzb3VyY2VzICovLAogCQkJCTU1QTgxN0ZGMjE4MTAyMUEwMDA0QTM5QSAvKiAxMDB4MTAwLXJl
ZC50Z2EgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJMUE5RTUyQzkxM0U2NUVGNDAwNjkxN0Y1
IC8qIDE4LWNoYXJhY3RlcnMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1NUE4MTgw
MDIxODEwMjIxMDAwNEEzOUEgLyogNDAweDQwMC1ncmVlbi5wbmcgaW4gQ29weSBSZXNvdXJjZXMg
Ki8sCkBAIC0xNDU5LDYgKzE0NTksNyBAQAogCQkJCTU3NjYzREVBMjM0RUE2NkQwMEU4NUUwOSAv
KiB3ZWItYXV0aGVudGljYXRpb24tZ2V0LWFzc2VydGlvbi1uZmMuaHRtbCBpbiBDb3B5IFJlc291
cmNlcyAqLywKIAkJCQk1Nzc0NTREMjIzNTlCQjAxMDA4RTFFRDcgLyogd2ViLWF1dGhlbnRpY2F0
aW9uLWdldC1hc3NlcnRpb24tdTJmLW5vLWNyZWRlbnRpYWxzLmh0bWwgaW4gQ29weSBSZXNvdXJj
ZXMgKi8sCiAJCQkJNTdDNjI0NTAyMzQ2QzIxRTAwMzgzRkU3IC8qIHdlYi1hdXRoZW50aWNhdGlv
bi1nZXQtYXNzZXJ0aW9uLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCisJCQkJNTc5ODMzN0Uy
MzYwMTlBNDAwOEU1NTQ3IC8qIHdlYi1hdXRoZW50aWNhdGlvbi1tYWtlLWNyZWRlbnRpYWwtaGlk
Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJMUMyQjgxODYxQzg5MjU5RDAwQTU1MjlG
IC8qIHdlYmZvbnQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1MTcxNEVCNDFDRjhD
NzhDMDA0NzIzQzQgLyogV2ViUHJvY2Vzc0tpbGxJREJDbGVhbnVwLTEuaHRtbCBpbiBDb3B5IFJl
c291cmNlcyAqLywKIAkJCQk1MTcxNEVCNTFDRjhDNzhDMDA0NzIzQzQgLyogV2ViUHJvY2Vzc0tp
bGxJREJDbGVhbnVwLTIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKQEAgLTIxMzQsNiArMjEz
NSw3IEBACiAJCTk5ODRGQUNBMUNGRkFFRUUwMDhEMTk4QyAvKiBXS1dlYlZpZXdUZXh0SW5wdXQu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYlZpZXdUZXh0
SW5wdXQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk5ODRGQUNEMUNGRkIwMzgw
MDhEMTk4QyAvKiBlZGl0YWJsZS1ib2R5Lmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGgg
PSAiZWRpdGFibGUtYm9keS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTk5
OTEwOEExRjM5M0M4QjAwOEFENDU1IC8qIENvcHlpbmcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBDb3B5aW5nLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk5QjAyRTBENTIzNUZBNDdEMDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbi5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFRleHRNYW5pcHVsYXRpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTlCMDc4NkEyMUM1ODgzMEYwMEQxNTlFMyAvKiBJbmplY3RlZEJ1bmRsZU1h
a2VBbGxTaGFkb3dSb290c09wZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW5qZWN0ZWRCdW5kbGVNYWtlQWxsU2hhZG93Um9vdHNPcGVuLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIwNzg2QTQxQzU4ODVDMzAwRDE1OUUzIC8qIEluamVjdGVk
QnVuZGxlTWFrZUFsbFNoYWRvd1Jvb3RzT3Blbl9CdW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVNYWtlQWxsU2hhZG93Um9vdHNPcGVu
X0J1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCMTA1NjQxMUY5MDQ1
QzcwMEQ1NTgzRiAvKiBDb3B5SFRNTC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvcHlIVE1M
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjk0NSw2ICsyOTQ3LDcgQEAKIAkJ
CQk1Nzc0QUE2NzIxRkJCRjc4MDBBRjJBMUIgLyogVGVzdFNPQXV0aG9yaXphdGlvbi5tbSAqLywK
IAkJCQlGNENENzRDNzIwRkRCNDk2MDBERTM3OTQgLyogVGVzdFVSTFNjaGVtZUhhbmRsZXIuaCAq
LywKIAkJCQlGNENENzRDODIwRkRCNDk2MDBERTM3OTQgLyogVGVzdFVSTFNjaGVtZUhhbmRsZXIu
bW0gKi8sCisJCQkJOUIwMkUwRDUyMzVGQTQ3RDAwNDA0NEIyIC8qIFRleHRNYW5pcHVsYXRpb24u
bW0gKi8sCiAJCQkJNUMxNkY4RkIyMzBDOTQyQjAwNzRDNEE4IC8qIFRleHRTaXplLm1tICovLAog
CQkJCUMyMkZBMzJBMjI4Rjg3MDgwMDlENzk4OCAvKiBUZXh0V2lkdGgubW0gKi8sCiAJCQkJNUM3
M0E4MUEyMzIzMDU5ODAwREVBODVBIC8qIFRMU0RlcHJlY2F0aW9uLm1tICovLApAQCAtNDgzMCw2
ICs0ODMzLDcgQEAKIAkJCQlGNDUwMzNGNTIwNkJFQzk1MDA5MzUxQ0UgLyogVGV4dEF1dG9zaXpp
bmdCb29zdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzRTYxOTNCMUY5MzFCM0EwMEFGMjQ1RSAv
KiBUZXh0Q29kZWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0UzNTI0RjkxQjE0NDFDNDAwMjhB
N0M1IC8qIFRleHRGaWVsZERpZEJlZ2luQW5kRW5kRWRpdGluZy5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk5QjAyRTBENjIzNUZBNDdEMDA0MDQ0QjIgLyogVGV4dE1hbmlwdWxhdGlvbi5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTVDMTZGOEZDMjMwQzk0MzcwMDc0QzRBOCAvKiBUZXh0U2l6ZS5tbSBp
biBTb3VyY2VzICovLAogCQkJCUMyMkZBMzJCMjI4Rjg3MDgwMDlENzk4OCAvKiBUZXh0V2lkdGgu
bW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VERDFBNDExQTkyMDA0NDdDNEMgLyogVGltZVJh
bmdlcy5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW0JKG5vbmV4aXN0
ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1
bGF0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2lt
cG9ydCAiVGVzdC5oIgorI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgorI2ltcG9ydCA8V2ViS2l0
L1dLV2ViVmlld1ByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tUZXh0TWFuaXB1bGF0aW9u
RGVsZWdhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tUZXh0TWFuaXB1bGF0aW9uSXRlbS5oPgor
I2ltcG9ydCA8V2ViS2l0L19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oPgorI2ltcG9ydCA8d3Rm
L0Jsb2NrUHRyLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK3N0YXRpYyBib29sIGRv
bmUgPSBmYWxzZTsKKworQGludGVyZmFjZSBUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgOiBOU09i
amVjdCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlPgorCistICh2b2lkKV93ZWJWaWV3OihX
S1dlYlZpZXcgKil3ZWJWaWV3IGRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbTooX1dLVGV4dE1h
bmlwdWxhdGlvbkl0ZW0gKilpdGVtOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHks
IGNvcHkpIE5TQXJyYXk8X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKj4gKml0ZW1zOworCitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgeworICAgIFJldGFp
blB0cjxOU011dGFibGVBcnJheT4gX2l0ZW1zOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdAor
eworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIF9pdGVtcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOworICAg
IHJldHVybiBzZWxmOworfQorCistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3
IGRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbTooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilp
dGVtCit7CisgICAgW19pdGVtcyBhZGRPYmplY3Q6aXRlbV07Cit9CisKKy0gKE5TQXJyYXk8X1dL
VGV4dE1hbmlwdWxhdGlvbkl0ZW0gKj4gKilpdGVtcworeworICAgIHJldHVybiBfaXRlbXMuZ2V0
KCk7Cit9CisKK0BlbmQKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitURVNUKFRleHRN
YW5pcHVsYXRpb24sIFN0YXJ0VGV4dE1hbmlwdWxhdGlvbkZpbmRTaW1wbGVQYXJhZ3JhcGhzKQor
eworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRl
IGFsbG9jXSBpbml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAg
ICBbd2ViVmlldyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsK
KworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBo
dG1sPiIKKyAgICAgICAgIjxodG1sPjxib2R5PmhlbGxvPGJyPndvcmxkPGRpdj5XZWJLaXQ8L2Rp
dj48L2JvZHk+PC9odG1sPiJdOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9z
dGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbXBsZXRpb25IYW5kbGVyOl57CisgICAgICAgIGRv
bmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7
CisKKyAgICBhdXRvICppdGVtcyA9IFtkZWxlZ2F0ZSBpdGVtc107CisgICAgRVhQRUNUX0VRKGl0
ZW1zLmNvdW50LCAzVUwpOworICAgIEVYUEVDVF9FUShpdGVtc1swXS50b2tlbnMuY291bnQsIDFV
TCk7CisgICAgRVhQRUNUX1NUUkVRKCJoZWxsbyIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50
LlVURjhTdHJpbmcpOworCisgICAgRVhQRUNUX0VRKGl0ZW1zWzFdLnRva2Vucy5jb3VudCwgMVVM
KTsKKyAgICBFWFBFQ1RfU1RSRVEoIndvcmxkIiwgaXRlbXNbMV0udG9rZW5zWzBdLmNvbnRlbnQu
VVRGOFN0cmluZyk7CisKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMl0udG9rZW5zLmNvdW50LCAxVUwp
OworICAgIEVYUEVDVF9TVFJFUSgiV2ViS2l0IiwgaXRlbXNbMl0udG9rZW5zWzBdLmNvbnRlbnQu
VVRGOFN0cmluZyk7Cit9CisKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgU3RhcnRUZXh0TWFuaXB1
bGF0aW9uRmluZE11bHRpcGxlUGFyYWdyYXBoc0luU2luZ2xlVGV4dE5vZGUpCit7CisgICAgYXV0
byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgYWxsb2NdIGlu
aXRdKTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOworICAgIFt3ZWJWaWV3
IF9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dl
YlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPCFET0NUWVBFIGh0bWw+IgorICAg
ICAgICAiPGh0bWw+PGJvZHk+PHByZT5oZWxsb1xud29ybGRcbldlYktpdDwvcHJlPjwvYm9keT48
L2h0bWw+Il07CisKKyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1h
bmlwdWxhdGlvbnNXaXRoQ29tcGxldGlvbkhhbmRsZXI6XnsKKyAgICAgICAgZG9uZSA9IHRydWU7
CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGF1
dG8gKml0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQs
IDNVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgMVVMKTsKKyAgICBF
WFBFQ1RfU1RSRVEoImhlbGxvIiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmlu
Zyk7CisKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMV0udG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVY
UEVDVF9TVFJFUSgid29ybGQiLCBpdGVtc1sxXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5n
KTsKKworICAgIEVYUEVDVF9FUShpdGVtc1syXS50b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQ
RUNUX1NUUkVRKCJXZWJLaXQiLCBpdGVtc1syXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5n
KTsKK30KKworVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBTdGFydFRleHRNYW5pcHVsYXRpb25GaW5k
UGFyYWdyYXBoc1dpdGhNdWx0aWxlVG9rZW5zKQoreworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9w
dE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNN
YWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBbd2ViVmlldyBfc2V0VGV4dE1hbmlwdWxh
dGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICAKKyAgICBbd2ViVmlldyBzeW5jaHJv
bm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8IURPQ1RZUEUgaHRtbD4iCisgICAgICAgICI8aHRtbD48
Ym9keT5oZWxsbywgIDxiPndvcmxkPC9iPjxicj48ZGl2PjxlbT4gPGI+V2ViPC9iPktpdDwvZW0+
ICA8L2Rpdj48L2JvZHk+PC9odG1sPiJdOworICAgIAorICAgIGRvbmUgPSBmYWxzZTsKKyAgICBb
d2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb21wbGV0aW9uSGFuZGxlcjpeewor
ICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmRvbmUpOworICAgIAorICAgIGF1dG8gKml0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsKKyAg
ICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDJVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRv
a2Vucy5jb3VudCwgMlVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoImhlbGxvLCAiLCBpdGVtc1swXS50
b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoIndvcmxkIiwg
aXRlbXNbMF0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgCisgICAgRVhQRUNU
X0VRKGl0ZW1zWzFdLnRva2Vucy5jb3VudCwgMlVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoIldlYiIs
IGl0ZW1zWzFdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJF
USgiS2l0IiwgaXRlbXNbMV0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7Cit9CisKK3N0
cnVjdCBUb2tlbiB7CisgICAgTlNTdHJpbmcgKmlkZW50aWZpZXI7CisgICAgTlNTdHJpbmcgKmNv
bnRlbnQ7Cit9OworCit0ZW1wbGF0ZTxzaXplX3QgbGVuZ3RoPgorc3RhdGljIFJldGFpblB0cjxf
V0tUZXh0TWFuaXB1bGF0aW9uSXRlbT4gY3JlYXRlSXRlbShOU1N0cmluZyAqaXRlbUlkZW50aWZp
ZXIsIGNvbnN0IFRva2VuICgmdG9rZW5zKVtsZW5ndGhdKQoreworICAgIFJldGFpblB0cjxOU011
dGFibGVBcnJheT4gd2tUb2tlbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRdKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAg
IFJldGFpblB0cjxfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4+IHRva2VuID0gYWRvcHROUyhbW19X
S1RleHRNYW5pcHVsYXRpb25Ub2tlbiBhbGxvY10gaW5pdF0pOworICAgICAgICBbdG9rZW4gc2V0
SWRlbnRpZmllcjogdG9rZW5zW2ldLmlkZW50aWZpZXJdOworICAgICAgICBbdG9rZW4gc2V0Q29u
dGVudDogdG9rZW5zW2ldLmNvbnRlbnRdOworICAgICAgICBbd2tUb2tlbnMgYWRkT2JqZWN0OnRv
a2VuLmdldCgpXTsKKyAgICB9CisgICAgcmV0dXJuIGFkb3B0TlMoW1tfV0tUZXh0TWFuaXB1bGF0
aW9uSXRlbSBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOml0ZW1JZGVudGlmaWVyIHRva2Vuczp3
a1Rva2Vucy5nZXQoKV0pOworfQorCitURVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4
dE1hbmlwdWxhdGlvblNob3VsZFJlcGxhY2VTaW1wbGVQYXJhZ3JhcGhDb250ZW50KQoreworICAg
IGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlIGFsbG9j
XSBpbml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsKKyAgICBbd2Vi
VmlldyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAg
IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1sPiIK
KyAgICAgICAgIjxodG1sPjxib2R5PjxwPmhlbGxsbywgd29vb3JsZDwvcD48cD4gaGV5LCA8Yj4g
S2l0czwvYj4gaXMgPGVtPmN1dXV0ZTwvZW0+PC9wPjwvYm9keT48L2h0bWw+Il07CisKKyAgICBk
b25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29t
cGxldGlvbkhhbmRsZXI6XnsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGF1dG8gKml0ZW1zID0gW2RlbGVn
YXRlIGl0ZW1zXTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDJVTCk7CisgICAgRVhQRUNU
X0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfU1RSRVEoImhlbGxs
bywgd29vb3JsZCIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworCisg
ICAgRVhQRUNUX0VRKGl0ZW1zWzFdLnRva2Vucy5jb3VudCwgNFVMKTsKKyAgICBFWFBFQ1RfU1RS
RVEoImhleSwgIiwgaXRlbXNbMV0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAg
RVhQRUNUX1NUUkVRKCJLaXRzIiwgaXRlbXNbMV0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmlu
Zyk7CisgICAgRVhQRUNUX1NUUkVRKCIgaXMgIiwgaXRlbXNbMV0udG9rZW5zWzJdLmNvbnRlbnQu
VVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCJjdXV1dGUiLCBpdGVtc1sxXS50b2tlbnNb
M10uY29udGVudC5VVEY4U3RyaW5nKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmll
dyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWNy
ZWF0ZUl0ZW0oaXRlbXNbMV0uaWRlbnRpZmllciwgeworICAgICAgICB7IGl0ZW1zWzFdLnRva2Vu
c1swXS5pZGVudGlmaWVyLCBAIkhlbGxvLCAiIH0sCisgICAgICAgIHsgaXRlbXNbMV0udG9rZW5z
WzFdLmlkZW50aWZpZXIsIEAia2l0dGVucyIgfSwKKyAgICAgICAgeyBpdGVtc1sxXS50b2tlbnNb
Ml0uaWRlbnRpZmllciwgQCIgYXJlICIgfSwKKyAgICAgICAgeyBpdGVtc1sxXS50b2tlbnNbM10u
aWRlbnRpZmllciwgQCJjdXRlIiB9LAorICAgIH0pLmdldCgpIGNvbXBsZXRpb246XihCT09MIHN1
Y2Nlc3MpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoc3VjY2Vzcyk7CisgICAgICAgIGRvbmUgPSB0
cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisgICAg
RVhQRUNUX1dLX1NUUkVRKCI8cD5oZWxsbG8sIHdvb29ybGQ8L3A+PHA+SGVsbG8sIDxiPmtpdHRl
bnM8L2I+IGFyZSA8ZW0+Y3V0ZTwvZW0+PC9wPiIsCisgICAgICAgIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmlubmVySFRNTCJdKTsKKworICAg
IGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOihf
V0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWNyZWF0ZUl0ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwg
eworICAgICAgICB7IGl0ZW1zWzBdLnRva2Vuc1swXS5pZGVudGlmaWVyLCBAIkhlbGxvLCB3b3Js
ZC4iIH0sCisgICAgfSkuZ2V0KCkgY29tcGxldGlvbjpeKEJPT0wgc3VjY2VzcykgeworICAgICAg
ICBFWFBFQ1RfVFJVRShzdWNjZXNzKTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07Cisg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
IjxwPkhlbGxvLCB3b3JsZC48L3A+PHA+SGVsbG8sIDxiPmtpdHRlbnM8L2I+IGFyZSA8ZW0+Y3V0
ZTwvZW0+PC9wPiIsCisgICAgICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJkb2N1bWVudC5ib2R5LmlubmVySFRNTCJdKTsKK30KKworVEVTVChUZXh0TWFuaXB1bGF0
aW9uLCBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb25TaG91bGRGYWlsV2hlbkNvbnRlbnRJc0NoYW5n
ZWQpCit7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVs
ZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0p
OworICAgIFt3ZWJWaWV3IF9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0
KCldOworCisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPCFET0NU
WVBFIGh0bWw+IgorICAgICAgICAiPGh0bWw+PGJvZHk+PHA+IHdoYXQgPGVtPnRpbWU8L2VtPiBh
cmUgdGhleSBub3c/PC9wPjwvYm9keT48L2h0bWw+Il07CisKKyAgICBkb25lID0gZmFsc2U7Cisg
ICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29tcGxldGlvbkhhbmRsZXI6
XnsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZkb25lKTsKKworICAgIGF1dG8gKml0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsKKyAg
ICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRv
a2Vucy5jb3VudCwgM1VMKTsKKyAgICBFWFBFQ1RfU1RSRVEoIndoYXQgIiwgaXRlbXNbMF0udG9r
ZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCJ0aW1lIiwgaXRl
bXNbMF0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisgICAgRVhQRUNUX1NUUkVRKCIg
YXJlIHRoZXkgbm93PyIsIGl0ZW1zWzBdLnRva2Vuc1syXS5jb250ZW50LlVURjhTdHJpbmcpOwor
CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1
ZXJ5U2VsZWN0b3IoJ2VtJykubmV4dFNpYmxpbmcuZGF0YSA9ICcgaXMgaXQgbm93IGluIExvbmRv
bj8nIl07CisKKyAgICBkb25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX2NvbXBsZXRlVGV4dE1h
bmlwdWxhdGlvbjooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKiljcmVhdGVJdGVtKGl0ZW1zWzBd
LmlkZW50aWZpZXIsIHsKKyAgICAgICAgeyBpdGVtc1swXS50b2tlbnNbMF0uaWRlbnRpZmllciwg
QCJXaGF0ICIgfSwKKyAgICAgICAgeyBpdGVtc1swXS50b2tlbnNbMV0uaWRlbnRpZmllciwgQCJ0
aW1lIiB9LAorICAgICAgICB7IGl0ZW1zWzBdLnRva2Vuc1syXS5pZGVudGlmaWVyLCBAIiBpcyBp
dCBub3c/IiB9LAorICAgIH0pLmdldCgpIGNvbXBsZXRpb246XihCT09MIHN1Y2Nlc3MpIHsKKyAg
ICAgICAgRVhQRUNUX0ZBTFNFKHN1Y2Nlc3MpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9
XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworICAgIEVYUEVDVF9XS19T
VFJFUSgiPHA+IHdoYXQgPGVtPnRpbWU8L2VtPiBpcyBpdCBub3cgaW4gTG9uZG9uPzwvcD4iLAor
ICAgICAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQu
Ym9keS5pbm5lckhUTUwiXSk7Cit9CisKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29tcGxldGVU
ZXh0TWFuaXB1bGF0aW9uU2hvdWxkRmFpbFdoZW5Eb2N1bWVudEhhc0JlZW5OYXZpZ2F0ZWRBd2F5
KQoreworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGV4dE1hbmlwdWxhdGlvbkRlbGVn
YXRlIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCldKTsK
KyAgICBbd2ViVmlldyBfc2V0VGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgp
XTsKKworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAInNpbXBs
ZSJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVu
dC5ib2R5LmlubmVySFRNTCA9ICc8cD5oZXksIDxlbT5lYXJ0aDwvZW0+PC9wPiciXTsKKworICAg
IGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhD
b21wbGV0aW9uSGFuZGxlcjpeeworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgYXV0byAqaXRlbXMgPSBbZGVs
ZWdhdGUgaXRlbXNdOworICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwgMVVMKTsKKyAgICBFWFBF
Q1RfRVEoaXRlbXNbMF0udG9rZW5zLmNvdW50LCAyVUwpOworICAgIEVYUEVDVF9TVFJFUSgiaGV5
LCAiLCBpdGVtc1swXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1Rf
U1RSRVEoImVhcnRoIiwgaXRlbXNbMF0udG9rZW5zWzFdLmNvbnRlbnQuVVRGOFN0cmluZyk7CisK
KyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJjb3B5LWh0bWwi
XTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQu
Ym9keS5pbm5lckhUTUwgPSAnPHA+aGV5LCA8ZW0+ZWFydGg8L2VtPjwvcD4nIl07CisKKyAgICBk
b25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29t
cGxldGlvbkhhbmRsZXI6XnsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBb
d2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRl
bSAqKWNyZWF0ZUl0ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwgeworICAgICAgICB7IGl0ZW1zWzBd
LnRva2Vuc1swXS5pZGVudGlmaWVyLCBAImhlbGxvLCAiIH0sCisgICAgICAgIHsgaXRlbXNbMF0u
dG9rZW5zWzFdLmlkZW50aWZpZXIsIEAid29ybGQiIH0sCisgICAgfSkuZ2V0KCkgY29tcGxldGlv
bjpeKEJPT0wgc3VjY2VzcykgeworICAgICAgICBFWFBFQ1RfRkFMU0Uoc3VjY2Vzcyk7CisgICAg
ICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZkb25lKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>