<?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>124803</bug_id>
          
          <creation_ts>2013-11-22 16:33:05 -0800</creation_ts>
          <short_desc>Merge WebKit2 iOS specific code</short_desc>
          <delta_ts>2013-11-22 21:52:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>124806</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Enrica Casucci">enrica</reporter>
          <assigned_to name="Enrica Casucci">enrica</assigned_to>
          <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>953730</commentid>
    <comment_count>0</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2013-11-22 16:33:05 -0800</bug_when>
    <thetext>This is to track the work to upstream the iOS code to OpenSource.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953734</commentid>
    <comment_count>1</comment_count>
      <attachid>217728</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2013-11-22 16:44:56 -0800</bug_when>
    <thetext>Created attachment 217728
Patch1

This is part 1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953735</commentid>
    <comment_count>2</comment_count>
      <attachid>217729</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2013-11-22 16:45:30 -0800</bug_when>
    <thetext>Created attachment 217729
Patch2

This is part 2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953737</commentid>
    <comment_count>3</comment_count>
      <attachid>217731</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2013-11-22 16:46:20 -0800</bug_when>
    <thetext>Created attachment 217731
Patch3

This is part 3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953740</commentid>
    <comment_count>4</comment_count>
      <attachid>217728</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-11-22 17:02:30 -0800</bug_when>
    <thetext>Comment on attachment 217728
Patch1

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

&gt; NetworkProcess/EntryPoint/mac/XPCService/NetworkServiceEntryPoint.mm:39
&gt; +#if ENABLE(NETWORK_PROCESS)

should this whole file be #if ENABLE(NETWORK_PROCESS)&apos;d?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953752</commentid>
    <comment_count>5</comment_count>
      <attachid>217729</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-11-22 17:45:20 -0800</bug_when>
    <thetext>Comment on attachment 217729
Patch2

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

r+ from me and andersca with comments that don&apos;t necessarily need to all be addressed in this patch but should be addressed eventually.

&gt; ChangeLog:8
&gt; +        * UIProcess/API/C/WKNativeEvent.h:

Please remove this long list and just note that you did so.

&gt; UIProcess/API/C/WKPage.cpp:894
&gt;  // -- DEPRECATED --

WKPageSetInvalidMessageFunction shouldn&apos;t be in this NPAPI block.

&gt; UIProcess/API/ios/PageClientImplIOS.h:36
&gt; +    class PageClientImpl : public PageClient {

None of this should be indented.

&gt; UIProcess/API/ios/UIWKRemoteView.mm:1
&gt; +/*

We should get rid of this file, we won&apos;t need it.

&gt; UIProcess/API/ios/WKContentView.h:50
&gt; +NS_CLASS_AVAILABLE_IOS(8_0)

This should use WK_API_CLASS, not this.

&gt; UIProcess/API/ios/WKContentView.mm:267
&gt; +        [_delegate contentView:self
&gt; +didChangeViewportArgumentsSize:CGSizeMake(arguments.width, arguments.height)
&gt; +                  initialScale:arguments.zoom
&gt; +                  minimumScale:arguments.minZoom
&gt; +                  maximumScale:arguments.maxZoom
&gt; +             allowsUserScaling:arguments.userZoom];

This should be on a single line

&gt; UIProcess/API/ios/WKInteractionView.mm:71
&gt; +@property (copy,nonatomic) NSArray *selectionRects;

space after the comma

&gt; UIProcess/API/ios/WKInteractionView.mm:182
&gt; +- (void)setScrollView:(UIWebScrollView*)scrollView

space before the star

&gt; UIProcess/API/ios/WKInteractionView.mm:350
&gt; +        case UIGestureRecognizerStateBegan:

unindent cases

&gt; UIProcess/API/ios/WKInteractionView.mm:493
&gt; +    if (action == @selector(_promptForReplace:))
&gt; +        // FIXME: need to implement
&gt; +        return NO;
&gt; +
&gt; +    if (action == @selector(select:))
&gt; +        // Disable select in password fields so that you can&apos;t see word boundaries.
&gt; +        return !_page-&gt;editorState().isInPasswordField &amp;&amp; [self hasContent] &amp;&amp; !_page-&gt;editorState().selectionIsNone &amp;&amp; !_page-&gt;editorState().selectionIsRange;

Curly braces, please, even though they&apos;re not required.

&gt; UIProcess/API/ios/WKInteractionView.mm:761
&gt; +    WKInteractionView* view = static_cast&lt;WKInteractionView*&gt;(context);

stars are on the wrong side

&gt; UIProcess/API/ios/WKInteractionView.mm:767
&gt; +static void selectionChangedWithTouch(const WebCore::IntPoint&amp; point, uint32_t touch, WKErrorRef error, void* context)

We usually &apos;using namespace WebCore&apos; in implementation files to avoid all of these WebCore::s

&gt; UIProcess/API/ios/WKInteractionView.mm:773
&gt; +    WKInteractionView* view = static_cast&lt;WKInteractionView*&gt;(context);

stars on the wrong side

&gt; UIProcess/API/ios/WKInteractionView.mm:1331
&gt; +    return (id)[UIFont fontWithFamilyName:_autocorrectionData.fontName traits:(UIFontTrait)_autocorrectionData.fontTraits size:scaledSize];

Why is there an (id) here? This method returns a UIFont.

&gt; UIProcess/API/ios/WKView.mm:118
&gt; +- (void)contentViewdidCommitLoadForMainFrame:(WKContentView *)contentView

I thought the capitalization of this method was fixed recently?

&gt; UIProcess/API/mac/WKBrowsingContextController.mm:85
&gt; +    id&lt;WKBrowsingContextLoadDelegateInternal&gt; _loadDelegateInternal;

space after id, says andersca

&gt; UIProcess/API/mac/WKBrowsingContextController.mm:86
&gt; +#endif //PLATFORM(IOS)

space after //

&gt; UIProcess/API/mac/WKBrowsingContextController.mm:506
&gt; +#endif //PLATFORM(IOS)

space after //

&gt; UIProcess/API/mac/WKProcessGroup.mm:238
&gt; +- (WKGeolocationProviderIOS *) _geolocationProvider

no space between ) and _

&gt; UIProcess/API/mac/WKProcessGroupPrivate.h:29
&gt; +#if PLATFORM(IOS)

This can&apos;t be in API/SPI headers.

&gt; UIProcess/API/mac/WKProcessGroupPrivate.h:36
&gt; +#if PLATFORM(IOS)

Nor this.

&gt; UIProcess/PageClient.h:48
&gt; +OBJC_CLASS UIWKView;

I think we don&apos;t need this.

&gt; UIProcess/WebPageProxy.h:1191
&gt; +    HashMap&lt;uint64_t, RefPtr&lt;TouchesCallback&gt; &gt; m_touchesCallbacks;
&gt; +    HashMap&lt;uint64_t, RefPtr&lt;AutocorrectionDataCallback&gt; &gt; m_autocorrectionCallbacks;

no space between &gt;&gt;

&gt; UIProcess/ios/TiledCoreAnimationDrawingAreaProxyIOS.h:1
&gt; +/*

We should get rid of TCADA*IOS

&gt; UIProcess/ios/WebPageProxyIOS.mm:50
&gt; +    // Just return the iOS 5.1 user agent for now.
&gt; +    return &quot;Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3&quot;;

We should fix this.

&gt; UIProcess/mac/WebContextMac.mm:38
&gt; +#if !PLATFORM(IOS)
&gt;  #import &lt;QuartzCore/CARemoteLayerServer.h&gt;
&gt; +#endif

This should be in its own block. Also we really don&apos;t need it but we&apos;ll clean it up later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953755</commentid>
    <comment_count>6</comment_count>
      <attachid>217731</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-11-22 17:56:37 -0800</bug_when>
    <thetext>Comment on attachment 217731
Patch3

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

r+ from andersca and I with minor comments

&gt; ChangeLog:8
&gt; +        * WebProcess/EntryPoint/mac/LegacyProcess/WebContentProcessMain.mm:

elide list please

&gt; WebProcess/WebCoreSupport/WebEditorClient.h:162
&gt; +    virtual NSArray* supportedPasteboardTypesForCurrentSelection() OVERRIDE;
&gt; +    virtual NSArray* readDataFromPasteboard(NSString* type, int index) OVERRIDE;

stars on the wrong side</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953764</commentid>
    <comment_count>7</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2013-11-22 19:27:41 -0800</bug_when>
    <thetext>Committed revision 159724.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953768</commentid>
    <comment_count>8</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-11-22 19:56:26 -0800</bug_when>
    <thetext>Small build fix in http://trac.webkit.org/changeset/159725</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217728</attachid>
            <date>2013-11-22 16:44:56 -0800</date>
            <delta_ts>2013-11-22 17:02:30 -0800</delta_ts>
            <desc>Patch1</desc>
            <filename>ios-wk2-part1.txt</filename>
            <type>text/plain</type>
            <size>18936</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE1OTcy
MCkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDEzLTEx
LTIyICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgVXBzdHJl
YW0gaU9TIFdlYktpdDIgdG8gT3BlblNvdXJjZSAocGFydCAxKS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDgwMworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL21hYy9EYXRh
YmFzZVByb2Nlc3NNYWMubW06CisgICAgICAgIChXZWJLaXQ6OkRhdGFiYXNlUHJvY2Vzczo6aW5p
dGlhbGl6ZVByb2Nlc3NOYW1lKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9FbnRyeVBvaW50
L21hYy9YUENTZXJ2aWNlL05ldHdvcmtTZXJ2aWNlRW50cnlQb2ludC5tbToKKyAgICAgICAgKE5l
dHdvcmtTZXJ2aWNlSW5pdGlhbGl6ZXIpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdv
cmtSZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1JlbW90ZU5ldHdv
cmtpbmdDb250ZXh0Lmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvaW9zOiBBZGRlZC4KKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9pb3MvTmV0d29ya1Byb2Nlc3NJT1MubW06IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVByb2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVByb2Nlc3NOYW1lKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVTYW5kYm94KToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0
ZUZvckhvc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y2xlYXJDYWNoZUZv
ckFsbE9yaWdpbnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1J
bml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vz
czo6cGxhdGZvcm1UZXJtaW5hdGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL21hYy9EaXNr
Q2FjaGVNb25pdG9yLm1tOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrUHJv
Y2Vzc01hYy5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVQ
cm9jZXNzTmFtZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUlu
aXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvbWFjL05l
dHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbToKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0Nv
bm5lY3Rpb24uY3BwOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6Y3JlYXRlU3luY01l
c3NhZ2VFbmNvZGVyKToKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaDoK
KyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAg
KiBQbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VEZWNvZGVyLmg6CisgICAgICAgICogUGxhdGZvcm0v
Q29yZUlQQy9tYWMvQ29ubmVjdGlvbk1hYy5jcHA6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0
aW9uOjpvcGVuKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnJlY2VpdmVTb3VyY2VF
dmVudEhhbmRsZXIpOgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvbWFjL0ltcG9ydGFuY2VB
c3NlcnRpb24uaDoKKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL0VudHJ5UG9pbnQvbWFjL1hQQ1Nl
cnZpY2UvUGx1Z2luU2VydmljZUVudHJ5UG9pbnQubW06CisgICAgICAgIChQbHVnaW5TZXJ2aWNl
SW5pdGlhbGl6ZXIpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weToKKyAg
ICAgICAgKHN0cnVjdF9vcl9jbGFzcyk6CisKIDIwMTMtMTEtMjIgIEJlbmphbWluIFBvdWxhaW4g
IDxicG91bGFpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dLMl0gQW5vdGhlciBidWlsZCBmaXgg
Zm9yIE5ldHdvcmtQcm9jZXNzIG9uIGlPUwpJbmRleDogRGF0YWJhc2VQcm9jZXNzL21hYy9EYXRh
YmFzZVByb2Nlc3NNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gRGF0YWJhc2VQcm9jZXNzL21hYy9EYXRh
YmFzZVByb2Nlc3NNYWMubW0JKHJldmlzaW9uIDE1OTY1MSkKKysrIERhdGFiYXNlUHJvY2Vzcy9t
YWMvRGF0YWJhc2VQcm9jZXNzTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0NCwxMCBA
QAogCiB2b2lkIERhdGFiYXNlUHJvY2Vzczo6aW5pdGlhbGl6ZVByb2Nlc3NOYW1lKGNvbnN0IENo
aWxkUHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKIHsKKyNpZiAh
UExBVEZPUk0oSU9TKQogICAgIE5TU3RyaW5nICphcHBsaWNhdGlvbk5hbWUgPSBbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpXRUJfVUlfU1RSSU5HKCIlQCBEYXRhYmFzZSBTdG9yYWdlIiwgInZp
c2libGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UgcHJvY2Vzcy4gVGhlIGFyZ3VtZW50IGlzIHRoZSBh
cHBsaWNhdGlvbiBuYW1lLiIpLCAoTlNTdHJpbmcgKilwYXJhbWV0ZXJzLnVpUHJvY2Vzc05hbWVd
OwogICAgIFdLU2V0VmlzaWJsZUFwcGxpY2F0aW9uTmFtZSgoQ0ZTdHJpbmdSZWYpYXBwbGljYXRp
b25OYW1lKTsKKyNlbmRpZgogfQogCiB2b2lkIERhdGFiYXNlUHJvY2Vzczo6aW5pdGlhbGl6ZVNh
bmRib3goY29uc3QgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0
ZXJzLCBTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiBzYW5kYm94UGFyYW1ldGVycykK
SW5kZXg6IE5ldHdvcmtQcm9jZXNzL0VudHJ5UG9pbnQvbWFjL1hQQ1NlcnZpY2UvTmV0d29ya1Nl
cnZpY2VFbnRyeVBvaW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIE5ldHdvcmtQcm9jZXNzL0VudHJ5UG9p
bnQvbWFjL1hQQ1NlcnZpY2UvTmV0d29ya1NlcnZpY2VFbnRyeVBvaW50Lm1tCShyZXZpc2lvbiAx
NTk2NTEpCisrKyBOZXR3b3JrUHJvY2Vzcy9FbnRyeVBvaW50L21hYy9YUENTZXJ2aWNlL05ldHdv
cmtTZXJ2aWNlRW50cnlQb2ludC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzYsOSArMzYsMTEgQEAK
IAogdm9pZCBOZXR3b3JrU2VydmljZUluaXRpYWxpemVyKHhwY19jb25uZWN0aW9uX3QgY29ubmVj
dGlvbiwgeHBjX29iamVjdF90IGluaXRpYWxpemVyTWVzc2FnZSkKIHsKKyNpZiBFTkFCTEUoTkVU
V09SS19QUk9DRVNTKQogICAgIC8vIFJlbW92ZSB0aGUgU2VjSXRlbVNoaW0gZnJvbSB0aGUgRFlM
RF9JTlNFUlRfTElCUkFSSUVTIGVudmlyb25tZW50IHZhcmlhYmxlIHNvIGFueSBwcm9jZXNzZXMg
c3Bhd25lZCBieQogICAgIC8vIHRoZSB0aGlzIHByb2Nlc3MgZG9uJ3QgdHJ5IHRvIGluc2VydCB0
aGUgc2hpbSBhbmQgY3Jhc2guCiAgICAgRW52aXJvbm1lbnRVdGlsaXRpZXM6OnN0cmlwVmFsdWVz
RW5kaW5nV2l0aFN0cmluZygiRFlMRF9JTlNFUlRfTElCUkFSSUVTIiwgIi9TZWNJdGVtU2hpbS5k
eWxpYiIpOwogCiAgICAgWFBDU2VydmljZUluaXRpYWxpemVyPE5ldHdvcmtQcm9jZXNzLCBYUENT
ZXJ2aWNlSW5pdGlhbGl6ZXJEZWxlZ2F0ZT4oY29ubmVjdGlvbiwgaW5pdGlhbGl6ZXJNZXNzYWdl
KTsKKyNlbmRpZgogfQpJbmRleDogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgJ
KHJldmlzaW9uIDE1OTY1MSkKKysrIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsMTQgKzEwNSwxNiBAQAogCiAjaWYgUExBVEZPUk0o
TUFDKQogICAgIHN0YXRpYyBzaXplX3QgZmlsZUJhY2tlZFJlc291cmNlTWluaW11bVNpemUoKTsK
KyNpZiAhUExBVEZPUk0oSU9TKQogICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2FjaGVSZXNwb25zZUFz
eW5jKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgTlNDYWNoZWRVUkxSZXNwb25zZSAqKSBPVkVS
UklERTsKKyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCB3aWxsU3RvcEJ1ZmZlcmluZ0RhdGEoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50KSBPVkVSUklERTsKICNlbmRp
ZiAvLyBQTEFURk9STShNQUMpCiAKICAgICAvLyBNZXNzYWdlIGhhbmRsZXJzLgogICAgIHZvaWQg
ZGlkUmVjZWl2ZU5ldHdvcmtSZXNvdXJjZUxvYWRlck1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlv
biosIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJik7CiAKLSNpZiBQTEFURk9STShNQUMpICYmIF9f
TUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorI2lmIFBMQVRGT1JNKElPUykg
fHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAx
MDkwKQogICAgIHN0YXRpYyB2b2lkIHRyeUdldFNoYXJlYWJsZUhhbmRsZUZyb21DRlVSTENhY2hl
ZFJlc3BvbnNlKFNoYXJlYWJsZVJlc291cmNlOjpIYW5kbGUmLCBDRkNhY2hlZFVSTFJlc3BvbnNl
UmVmKTsKICNlbmRpZgogCkluZGV4OiBOZXR3b3JrUHJvY2Vzcy9SZW1vdGVOZXR3b3JraW5nQ29u
dGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIE5ldHdvcmtQcm9jZXNzL1JlbW90ZU5ldHdvcmtpbmdDb250
ZXh0LmgJKHJldmlzaW9uIDE1OTY1MSkKKysrIE5ldHdvcmtQcm9jZXNzL1JlbW90ZU5ldHdvcmtp
bmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDkgQEAKICAgICB2aXJ0dWFs
IGJvb2wgbG9jYWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZCgpIGNvbnN0IE9WRVJSSURFOwog
ICAgIHZpcnR1YWwgUmV0YWluUHRyPENGRGF0YVJlZj4gc291cmNlQXBwbGljYXRpb25BdWRpdERh
dGEoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OlJlc291cmNlRXJyb3Ig
YmxvY2tlZEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIGNvbnN0IE9WRVJS
SURFOworI2lmIFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0TmV0d29ya0Rh
dGFVc2FnZSh1aW50NjRfdCByYXdCeXRlc1NlbnQsIHVpbnQ2NF90IHJhd0J5dGVzUmVjZWl2ZWQs
IHVpbnQ2NF90IGNlbGx1bGFyQnl0ZXNTZW50LCB1aW50NjRfdCBjZWxsdWxhckJ5dGVzUmVjZWl2
ZWQpIE9WRVJSSURFIHsgfQorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKICNlbmRpZgogCiAjaWYg
VVNFKFNPVVApCkluZGV4OiBOZXR3b3JrUHJvY2Vzcy9pb3MvTmV0d29ya1Byb2Nlc3NJT1MubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTmV0d29ya1Byb2Nlc3MvaW9zL05ldHdvcmtQcm9jZXNzSU9TLm1tCShy
ZXZpc2lvbiAwKQorKysgTmV0d29ya1Byb2Nlc3MvaW9zL05ldHdvcmtQcm9jZXNzSU9TLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25m
aWcuaCIKKyNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzLmgiCisKKyNpZiBFTkFCTEUoTkVUV09SS19Q
Uk9DRVNTKQorCisjaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL1dlYkNvcmVUaHJlYWRTeXN0ZW1JbnRlcmZhY2UuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIE5ldHdvcmtQcm9jZXNzOjpp
bml0aWFsaXplUHJvY2Vzcyhjb25zdCBDaGlsZFByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRl
cnMmKQoreworI2lmIFBMQVRGT1JNKElPUykKKyAgICBJbml0V2ViQ29yZVRocmVhZFN5c3RlbUlu
dGVyZmFjZSgpOworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKK30KKwordm9pZCBOZXR3b3JrUHJv
Y2Vzczo6aW5pdGlhbGl6ZVByb2Nlc3NOYW1lKGNvbnN0IENoaWxkUHJvY2Vzc0luaXRpYWxpemF0
aW9uUGFyYW1ldGVycyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBOZXR3
b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZVNhbmRib3goY29uc3QgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6
YXRpb25QYXJhbWV0ZXJzJiwgU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycyYpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1T
ZXRDYWNoZU1vZGVsKENhY2hlTW9kZWwpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBOZXR3b3JrUHJvY2Vzczo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0
KGNvbnN0IFBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvJiwgY29uc3QgU3RyaW5nJikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hlRm9y
QWxsT3JpZ2lucyh1aW50MzJfdCkKK3sKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZv
cm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTmV0d29ya1By
b2Nlc3M6OnBsYXRmb3JtVGVybWluYXRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX1BST0NF
U1MpCkluZGV4OiBOZXR3b3JrUHJvY2Vzcy9tYWMvRGlza0NhY2hlTW9uaXRvci5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBOZXR3b3JrUHJvY2Vzcy9tYWMvRGlza0NhY2hlTW9uaXRvci5tbQkocmV2aXNpb24g
MTU5NjUxKQorKysgTmV0d29ya1Byb2Nlc3MvbWFjL0Rpc2tDYWNoZU1vbml0b3IubW0JKHdvcmtp
bmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNlbmRpZgogI2VuZGlmCiAKLSNpZiBfX01BQ19P
U19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKKyNpZiAhUExBVEZPUk0oSU9TKSAmJiBf
X01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKIAogdHlwZWRlZiB2b2lkIChe
Q0ZDYWNoZWRVUkxSZXNwb25zZUNhbGxCYWNrQmxvY2spKENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYp
OwogZXh0ZXJuICJDIiB2b2lkIF9DRkNhY2hlZFVSTFJlc3BvbnNlU2V0QmVjYW1lRmlsZUJhY2tl
ZENhbGxCYWNrQmxvY2soQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZiwgQ0ZDYWNoZWRVUkxSZXNwb25z
ZUNhbGxCYWNrQmxvY2ssIGRpc3BhdGNoX3F1ZXVlX3QpOwpAQCAtMTA2LDQgKzEwNiw0IEBACiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYgLy8gI2lmIF9fTUFDX09TX1hfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorI2VuZGlmIC8vICFQTEFURk9STShJT1MpICYmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MApJbmRleDogTmV0d29ya1Byb2Nlc3Mv
bWFjL05ldHdvcmtQcm9jZXNzTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIE5ldHdvcmtQcm9jZXNzL21h
Yy9OZXR3b3JrUHJvY2Vzc01hYy5tbQkocmV2aXNpb24gMTU5NjUxKQorKysgTmV0d29ya1Byb2Nl
c3MvbWFjL05ldHdvcmtQcm9jZXNzTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3
IEBACiAjaW1wb3J0ICJTZWNJdGVtU2hpbS5oIgogI2VuZGlmCiAKLSNpZiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKKyNpZiAhUExBVEZPUk0oSU9TKSAmJiBfX01BQ19P
U19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKIHR5cGVkZWYgc3RydWN0IF9DRlVSTENh
Y2hlKiBDRlVSTENhY2hlUmVmOwogZXh0ZXJuICJDIiBDRlVSTENhY2hlUmVmIENGVVJMQ2FjaGVD
b3B5U2hhcmVkVVJMQ2FjaGUoKTsKIGV4dGVybiAiQyIgdm9pZCBfQ0ZVUkxDYWNoZVNldE1pblNp
emVGb3JWTUNhY2hlZFJlc291cmNlKENGVVJMQ2FjaGVSZWYsIENGSW5kZXgpOwpAQCAtNzAsMTAg
KzcwLDE1IEBACiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVQcm9jZXNzTmFtZShj
b25zdCBDaGlsZFByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIFVOVVNFRF9QQVJBTShwYXJhbWV0ZXJzKTsKKyNlbHNl
CiAgICAgTlNTdHJpbmcgKmFwcGxpY2F0aW9uTmFtZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OldFQl9VSV9TVFJJTkcoIiVAIE5ldHdvcmtpbmciLCAidmlzaWJsZSBuYW1lIG9mIHRoZSBu
ZXR3b3JrIHByb2Nlc3MuIFRoZSBhcmd1bWVudCBpcyB0aGUgYXBwbGljYXRpb24gbmFtZS4iKSwg
KE5TU3RyaW5nICopcGFyYW1ldGVycy51aVByb2Nlc3NOYW1lXTsKICAgICBXS1NldFZpc2libGVB
cHBsaWNhdGlvbk5hbWUoKENGU3RyaW5nUmVmKWFwcGxpY2F0aW9uTmFtZSk7CisjZW5kaWYKIH0K
IAorI2lmICFQTEFURk9STShJT1MpCiBzdGF0aWMgdm9pZCBvdmVycmlkZVN5c3RlbVByb3hpZXMo
Y29uc3QgU3RyaW5nJiBodHRwUHJveHksIGNvbnN0IFN0cmluZyYgaHR0cHNQcm94eSkKIHsKICAg
ICBOU011dGFibGVEaWN0aW9uYXJ5ICpwcm94eVNldHRpbmdzID0gW05TTXV0YWJsZURpY3Rpb25h
cnkgZGljdGlvbmFyeV07CkBAIC0xMDYsNiArMTExLDcgQEAKICAgICBpZiAoW3Byb3h5U2V0dGlu
Z3MgY291bnRdID4gMCkKICAgICAgICAgV0tDRk5ldHdvcmtTZXRPdmVycmlkZVN5c3RlbVByb3h5
U2V0dGluZ3MoKENGRGljdGlvbmFyeVJlZilwcm94eVNldHRpbmdzKTsKIH0KKyNlbmRpZgogCiB2
b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyhjb25z
dCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKIHsKQEAgLTEy
MywxMCArMTI5LDEyIEBACiAgICAgU2VjSXRlbVNoaW06OnNoYXJlZCgpLmluaXRpYWxpemUodGhp
cyk7CiAjZW5kaWYKIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKCFwYXJhbWV0ZXJzLmh0
dHBQcm94eS5pc051bGwoKSB8fCAhcGFyYW1ldGVycy5odHRwc1Byb3h5LmlzTnVsbCgpKQogICAg
ICAgICBvdmVycmlkZVN5c3RlbVByb3hpZXMocGFyYW1ldGVycy5odHRwUHJveHksIHBhcmFtZXRl
cnMuaHR0cHNQcm94eSk7CisjZW5kaWYKIAotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVR
VUlSRUQgPj0gMTA5MAorI2lmIFBMQVRGT1JNKElPUykgfHwgX19NQUNfT1NfWF9WRVJTSU9OX01J
Tl9SRVFVSVJFRCA+PSAxMDkwCiAgICAgUmV0YWluUHRyPENGVVJMQ2FjaGVSZWY+IGNhY2hlID0g
YWRvcHRDRihDRlVSTENhY2hlQ29weVNoYXJlZFVSTENhY2hlKCkpOwogICAgIGlmICghY2FjaGUp
CiAgICAgICAgIHJldHVybjsKSW5kZXg6IE5ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrUmVzb3Vy
Y2VMb2FkZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtS
ZXNvdXJjZUxvYWRlck1hYy5tbQkocmV2aXNpb24gMTU5NjUxKQorKysgTmV0d29ya1Byb2Nlc3Mv
bWFjL05ldHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsOCBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXIuaCIKIAorI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisKICNpbXBvcnQgIkRpc2tDYWNo
ZU1vbml0b3IuaCIKICNpbXBvcnQgIlNoYXJlYWJsZVJlc291cmNlLmgiCiAjaW1wb3J0IDxXZWJD
b3JlL1Jlc291cmNlSGFuZGxlLmg+CkBAIC00Miw3ICs0NCw3IEBACiAjZW5kaWYKICNlbmRpZgog
Ci0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCisjaWYgUExBVEZP
Uk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKIHR5cGVk
ZWYgY29uc3Qgc3RydWN0IF9DRlVSTENhY2hlKiBDRlVSTENhY2hlUmVmOwogdHlwZWRlZiBjb25z
dCBzdHJ1Y3QgX0NGQ2FjaGVkVVJMUmVzcG9uc2UqIENGQ2FjaGVkVVJMUmVzcG9uc2VSZWY7CiBl
eHRlcm4gIkMiIENGVVJMQ2FjaGVSZWYgQ0ZVUkxDYWNoZUNvcHlTaGFyZWRVUkxDYWNoZSgpOwpA
QCAtNTcsNyArNTksNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotI2lmIF9fTUFDX09TX1hf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorI2lmIFBMQVRGT1JNKElPUykgfHwgX19NQUNf
T1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCiAKIHN0YXRpYyB2b2lkIHRyeUdldFNo
YXJlYWJsZUhhbmRsZUZyb21DRkRhdGEoU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZSYgaGFuZGxl
LCBDRkRhdGFSZWYgZGF0YSkKIHsKQEAgLTEwMSw2ICsxMDMsNyBAQAogICAgIHJldHVybiBTaGFy
ZWRNZW1vcnk6OnN5c3RlbVBhZ2VTaXplKCk7CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogdm9p
ZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OndpbGxDYWNoZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VI
YW5kbGUqIGhhbmRsZSwgTlNDYWNoZWRVUkxSZXNwb25zZSAqbnNSZXNwb25zZSkKIHsKICAgICBB
U1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKQEAgLTExMiw1ICsxMTUs
OSBAQAogCiAgICAgbV9oYW5kbGUtPmNvbnRpbnVlV2lsbENhY2hlUmVzcG9uc2UobnNSZXNwb25z
ZSk7CiB9CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQorCkluZGV4OiBQbGF0Zm9ybS9D
b3JlSVBDL0Nvbm5lY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBsYXRmb3JtL0NvcmVJUEMvQ29u
bmVjdGlvbi5jcHAJKHJldmlzaW9uIDE1OTY1MSkKKysrIFBsYXRmb3JtL0NvcmVJUEMvQ29ubmVj
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NCw3ICszNDQsNyBAQAogCiAgICAgLy8gRW5j
b2RlIHRoZSBzeW5jIHJlcXVlc3QgSUQuCiAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKG1fc3lu
Y1JlcXVlc3RJRCkgPT0gc2l6ZW9mKGludDY0X3QpLCBDYW5Vc2VBdG9taWNJbmNyZW1lbnQpOwot
ICAgIHN5bmNSZXF1ZXN0SUQgPSBhdG9taWNJbmNyZW1lbnQocmVpbnRlcnByZXRfY2FzdDxpbnQ2
NF90IHZvbGF0aWxlKj4oJm1fc3luY1JlcXVlc3RJRCkpOworICAgIHN5bmNSZXF1ZXN0SUQgPSAr
K21fc3luY1JlcXVlc3RJRDsKICAgICAqZW5jb2RlciA8PCBzeW5jUmVxdWVzdElEOwogCiAgICAg
cmV0dXJuIGVuY29kZXI7CkluZGV4OiBQbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBQbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaAkocmV2aXNpb24gMTU5NjUx
KQorKysgUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIw
NSw3ICsyMDUsNyBAQAogCiAgICAgQ2xpZW50KiBtX2NsaWVudDsKICAgICBib29sIG1faXNTZXJ2
ZXI7Ci0gICAgdWludDY0X3QgbV9zeW5jUmVxdWVzdElEOworICAgIHN0ZDo6YXRvbWljPHVpbnQ2
NF90PiBtX3N5bmNSZXF1ZXN0SUQ7CiAKICAgICBib29sIG1fb25seVNlbmRNZXNzYWdlc0FzRGlz
cGF0Y2hXaGVuV2FpdGluZ0ZvclN5bmNSZXBseVdoZW5Qcm9jZXNzaW5nU3VjaEFNZXNzYWdlOwog
ICAgIGJvb2wgbV9zaG91bGRFeGl0T25TeW5jTWVzc2FnZVNlbmRGYWlsdXJlOwpJbmRleDogUGxh
dGZvcm0vQ29yZUlQQy9NZXNzYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGxhdGZvcm0v
Q29yZUlQQy9NZXNzYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDE1OTY1MSkKKysrIFBsYXRmb3Jt
L0NvcmVJUEMvTWVzc2FnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3
IEBACiAjaW5jbHVkZSAiTWVzc2FnZUZsYWdzLmgiCiAjaW5jbHVkZSAiU3RyaW5nUmVmZXJlbmNl
LmgiCiAKLSNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPj0gMTA5MAorI2lmIFBMQVRGT1JNKElPUykgfHwgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19P
U19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKICNpbmNsdWRlICJJbXBvcnRhbmNlQXNz
ZXJ0aW9uLmgiCiAjZW5kaWYKIApAQCAtNjYsNyArNjYsNyBAQAogICAgIHJldHVybiBtX21lc3Nh
Z2VGbGFncyAmIERpc3BhdGNoTWVzc2FnZVdoZW5XYWl0aW5nRm9yU3luY1JlcGx5OwogfQogCi0j
aWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEw
OTAKKyNpZiBQTEFURk9STShJT1MpIHx8IFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJT
SU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCiB2b2lkIE1lc3NhZ2VEZWNvZGVyOjpzZXRJbXBvcnRh
bmNlQXNzZXJ0aW9uKHN0ZDo6dW5pcXVlX3B0cjxJbXBvcnRhbmNlQXNzZXJ0aW9uPiBhc3NlcnRp
b24pCiB7CiAgICAgbV9pbXBvcnRhbmNlQXNzZXJ0aW9uID0gc3RkOjptb3ZlKGFzc2VydGlvbik7
CkluZGV4OiBQbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
UGxhdGZvcm0vQ29yZUlQQy9NZXNzYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAxNTk2NTEpCisrKyBQ
bGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcg
KzQ2LDcgQEAKICAgICBib29sIGlzU3luY01lc3NhZ2UoKSBjb25zdDsKICAgICBib29sIHNob3Vs
ZERpc3BhdGNoTWVzc2FnZVdoZW5XYWl0aW5nRm9yU3luY1JlcGx5KCkgY29uc3Q7CiAKLSNpZiBQ
TEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAor
I2lmIFBMQVRGT1JNKElPUykgfHwgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05f
TUlOX1JFUVVJUkVEID49IDEwOTAKICAgICB2b2lkIHNldEltcG9ydGFuY2VBc3NlcnRpb24oc3Rk
Ojp1bmlxdWVfcHRyPEltcG9ydGFuY2VBc3NlcnRpb24+KTsKICNlbmRpZgogCkBAIC01Nyw3ICs1
Nyw3IEBACiAKICAgICB1aW50NjRfdCBtX2Rlc3RpbmF0aW9uSUQ7CiAKLSNpZiBQTEFURk9STShN
QUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorI2lmIFBMQVRG
T1JNKElPUykgfHwgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDEwOTAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1wb3J0YW5jZUFzc2VydGlvbj4gbV9p
bXBvcnRhbmNlQXNzZXJ0aW9uOwogI2VuZGlmCiB9OwpJbmRleDogUGxhdGZvcm0vQ29yZUlQQy9t
YWMvQ29ubmVjdGlvbk1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGxhdGZvcm0vQ29yZUlQQy9tYWMv
Q29ubmVjdGlvbk1hYy5jcHAJKHJldmlzaW9uIDE1OTY1MSkKKysrIFBsYXRmb3JtL0NvcmVJUEMv
bWFjL0Nvbm5lY3Rpb25NYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDcgQEAK
ICAgICAgICAgLy8gQ3JlYXRlIHRoZSByZWNlaXZlIHBvcnQuCiAgICAgICAgIG1hY2hfcG9ydF9h
bGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBNQUNIX1BPUlRfUklHSFRfUkVDRUlWRSwgJm1fcmVj
ZWl2ZVBvcnQpOwogCi0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkw
CisjaWYgUExBVEZPUk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49
IDEwOTAKICAgICAgICAgbWFjaF9wb3J0X3NldF9hdHRyaWJ1dGVzKG1hY2hfdGFza19zZWxmKCks
IG1fcmVjZWl2ZVBvcnQsIE1BQ0hfUE9SVF9JTVBPUlRBTkNFX1JFQ0VJVkVSLCAobWFjaF9wb3J0
X2luZm9fdCkwLCAwKTsKICNlbmRpZgogCkBAIC0zOTksNyArMzk5LDcgQEAKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8TWVzc2FnZURlY29kZXI+IGRlY29kZXIgPSBjcmVhdGVNZXNzYWdlRGVjb2Rlciho
ZWFkZXIpOwogICAgIEFTU0VSVChkZWNvZGVyKTsKIAotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPj0gMTA5MAorI2lmIFBMQVRGT1JNKElPUykgfHwgX19NQUNfT1NfWF9WRVJT
SU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCiAgICAgZGVjb2Rlci0+c2V0SW1wb3J0YW5jZUFzc2Vy
dGlvbihzdGQ6Om1ha2VfdW5pcXVlPEltcG9ydGFuY2VBc3NlcnRpb24+KGhlYWRlcikpOwogI2Vu
ZGlmCiAKSW5kZXg6IFBsYXRmb3JtL0NvcmVJUEMvbWFjL0ltcG9ydGFuY2VBc3NlcnRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBQbGF0Zm9ybS9Db3JlSVBDL21hYy9JbXBvcnRhbmNlQXNzZXJ0aW9uLmgJ
KHJldmlzaW9uIDE1OTY1MSkKKysrIFBsYXRmb3JtL0NvcmVJUEMvbWFjL0ltcG9ydGFuY2VBc3Nl
cnRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBJbXBvcnRh
bmNlQXNzZXJ0aW9uX2gKICNkZWZpbmUgSW1wb3J0YW5jZUFzc2VydGlvbl9oCiAKLSNpZiBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKKyNpZiBQTEFURk9STShJT1MpIHx8
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAogCiAjaWYgX19oYXNfaW5j
bHVkZSg8bGlicHJvY19pbnRlcm5hbC5oPikKICNpbmNsdWRlIDxsaWJwcm9jX2ludGVybmFsLmg+
CkBAIC01OCw2ICs1OCw2IEBACiAKIH0KIAotI2VuZGlmIC8vIF9fTUFDX09TX1hfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPj0gMTA5MAorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgfHwgX19NQUNfT1Nf
WF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCiAKICNlbmRpZiAvLyBJbXBvcnRhbmNlQXNz
ZXJ0aW9uX2gKSW5kZXg6IFBsdWdpblByb2Nlc3MvRW50cnlQb2ludC9tYWMvWFBDU2VydmljZS9Q
bHVnaW5TZXJ2aWNlRW50cnlQb2ludC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQbHVnaW5Qcm9jZXNzL0Vu
dHJ5UG9pbnQvbWFjL1hQQ1NlcnZpY2UvUGx1Z2luU2VydmljZUVudHJ5UG9pbnQubW0JKHJldmlz
aW9uIDE1OTY1MSkKKysrIFBsdWdpblByb2Nlc3MvRW50cnlQb2ludC9tYWMvWFBDU2VydmljZS9Q
bHVnaW5TZXJ2aWNlRW50cnlQb2ludC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOCBA
QAogI2ltcG9ydCAiWFBDU2VydmljZUVudHJ5UG9pbnQuaCIKICNpbXBvcnQgPHd0Zi9SdW5Mb29w
Lmg+CiAKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKwogbmFtZXNwYWNlIFdlYktp
dCB7CiAKIGNsYXNzIFBsdWdpblNlcnZpY2VJbml0aWFsaXplckRlbGVnYXRlIDogcHVibGljIFhQ
Q1NlcnZpY2VJbml0aWFsaXplckRlbGVnYXRlIHsKQEAgLTYxLDEwICs2MywxMyBAQAogCiB1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OwogCisjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCisKIGV4dGVybiAiQyIgV0tfRVhQT1JUIHZvaWQgUGx1Z2luU2VydmljZUluaXRpYWxpemVy
KHhwY19jb25uZWN0aW9uX3QgY29ubmVjdGlvbiwgeHBjX29iamVjdF90IGluaXRpYWxpemVyTWVz
c2FnZSk7CiAKIHZvaWQgUGx1Z2luU2VydmljZUluaXRpYWxpemVyKHhwY19jb25uZWN0aW9uX3Qg
Y29ubmVjdGlvbiwgeHBjX29iamVjdF90IGluaXRpYWxpemVyTWVzc2FnZSkKIHsKKyNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHRl
YXJkb3duIGZyb20gUGx1Z2luUHJvY2Vzc01haW4ubW0KIAogICAgIC8vIFJlbW92ZSB0aGUgUGx1
Z2luUHJvY2VzcyBzaGltIGZyb20gdGhlIERZTERfSU5TRVJUX0xJQlJBUklFUyBlbnZpcm9ubWVu
dCB2YXJpYWJsZSBzbyBhbnkgcHJvY2Vzc2VzCkBAIC03Miw0ICs3Nyw1IEBACiAgICAgRW52aXJv
bm1lbnRVdGlsaXRpZXM6OnN0cmlwVmFsdWVzRW5kaW5nV2l0aFN0cmluZygiRFlMRF9JTlNFUlRf
TElCUkFSSUVTIiwgIi9QbHVnaW5Qcm9jZXNzU2hpbS5keWxpYiIpOwogCiAgICAgWFBDU2Vydmlj
ZUluaXRpYWxpemVyPFBsdWdpblByb2Nlc3MsIFBsdWdpblNlcnZpY2VJbml0aWFsaXplckRlbGVn
YXRlPihjb25uZWN0aW9uLCBpbml0aWFsaXplck1lc3NhZ2UpOworI2VuZGlmIC8vIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQogfQpJbmRleDogU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQkocmV2aXNpb24gMTU5
NjUxKQorKysgU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0x
OTYsNiArMTk2LDcgQEAKICAgICAgICAgJ1dlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbicsCiAg
ICAgICAgICdXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb25zJywKICAgICAgICAgJ1dlYkNvcmU6
OlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbicsCisgICAgICAgICdXZWJDb3JlOjpWaWV3cG9y
dEFyZ3VtZW50cycsCiAgICAgICAgICdXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMnLAogICAg
ICAgICAnV2ViQ29yZTo6V2luZG93RmVhdHVyZXMnLAogICAgICAgICAnV2ViS2l0OjpBdHRyaWJ1
dGVkU3RyaW5nJywK
</data>
<flag name="review"
          id="240914"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217729</attachid>
            <date>2013-11-22 16:45:30 -0800</date>
            <delta_ts>2013-11-22 17:45:20 -0800</delta_ts>
            <desc>Patch2</desc>
            <filename>ios-wk2-part2.txt</filename>
            <type>text/plain</type>
            <size>236760</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE1OTcy
MSkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyNyBAQAorMjAxMy0x
MS0yMiAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgorCisgICAgICAgIFVwc3Ry
ZWFtIGlPUyBXZWJLaXQyIHRvIE9wZW5Tb3VyY2UgKHBhcnQgMikuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ4MDMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS05hdGl2
ZUV2ZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHA6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFjLmg6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFjLm1tOgorICAgICAgICAoV0tD
b250ZXh0SXNQbHVnSW5VcGRhdGVBdmFpbGFibGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
aW9zOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9QYWdlQ2xpZW50SW1wbElP
Uy5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9QYWdlQ2xpZW50SW1wbElP
Uy5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6flBhZ2VDbGllbnRJbXBsKToKKyAgICAg
ICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OlBhZ2VDbGllbnRJbXBsKToKKyAgICAgICAgKFdl
YktpdDo6UGFnZUNsaWVudEltcGw6OmNyZWF0ZURyYXdpbmdBcmVhUHJveHkpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2V0Vmlld05lZWRzRGlzcGxheSk6CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpkaXNwbGF5Vmlldyk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VDbGllbnRJbXBsOjpzY3JvbGxWaWV3KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudElt
cGw6OmNhblNjcm9sbFZpZXcpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6dmll
d1NpemUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6aXNWaWV3V2luZG93QWN0
aXZlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmlzVmlld0ZvY3VzZWQpOgor
ICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6aXNWaWV3VmlzaWJsZSk6CisgICAgICAg
IChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjppc1dpbmRvd1Zpc2libGUpOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlQ2xpZW50SW1wbDo6aXNWaWV3SW5XaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpQ
YWdlQ2xpZW50SW1wbDo6cHJvY2Vzc0RpZENyYXNoKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNs
aWVudEltcGw6OmRpZFJlbGF1bmNoUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGll
bnRJbXBsOjpwYWdlQ2xvc2VkKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnBy
ZWZlcmVuY2VzRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnRv
b2xUaXBDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRpZENoYW5n
ZUNvbnRlbnRTaXplKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNldEN1cnNv
cik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzZXRDdXJzb3JIaWRkZW5VbnRp
bE1vdXNlTW92ZXMpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZGlkQ2hhbmdl
Vmlld3BvcnRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnJl
Z2lzdGVyRWRpdENvbW1hbmQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6Y2xl
YXJBbGxFZGl0Q29tbWFuZHMpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6Y2Fu
VW5kb1JlZG8pOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZXhlY3V0ZVVuZG9S
ZWRvKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmFjY2Vzc2liaWxpdHlXZWJQ
cm9jZXNzVG9rZW5SZWNlaXZlZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpp
bnRlcnByZXRLZXlFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpleGVj
dXRlU2F2ZWRDb21tYW5kQnlTZWxlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJ
bXBsOjpzZXREcmFnSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2Vs
ZWN0aW9uRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnVwZGF0
ZVNlY3VyZUlucHV0U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6cmVz
ZXRTZWN1cmVJbnB1dFN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6Om5v
dGlmeUlucHV0Q29udGV4dEFib3V0RGlzY2FyZGVkQ29tcG9zaXRpb24pOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlQ2xpZW50SW1wbDo6bWFrZUZpcnN0UmVzcG9uZGVyKToKKyAgICAgICAgKFdlYktp
dDo6UGFnZUNsaWVudEltcGw6OmNvbnZlcnRUb0RldmljZVNwYWNlKToKKyAgICAgICAgKFdlYktp
dDo6UGFnZUNsaWVudEltcGw6OmNvbnZlcnRUb1VzZXJTcGFjZSk6CisgICAgICAgIChXZWJLaXQ6
OlBhZ2VDbGllbnRJbXBsOjpzY3JlZW5Ub1dpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VD
bGllbnRJbXBsOjp3aW5kb3dUb1NjcmVlbik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJ
bXBsOjpkb25lV2l0aEtleUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6
OmRvbmVXaXRoVG91Y2hFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpj
cmVhdGVQb3B1cE1lbnVQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpj
cmVhdGVDb250ZXh0TWVudVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6
OnNldEZpbmRJbmRpY2F0b3IpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZW50
ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGll
bnRJbXBsOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbDo6dXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOgorICAg
ICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jv
b3RMYXllcik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjptYWluRG9jdW1lbnRE
aWRSZWNlaXZlTW9iaWxlRG9jVHlwZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBs
OjpkaWRHZXRUYXBIaWdobGlnaHRHZW9tZXRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNs
aWVudEltcGw6OmRpZENoYW5nZVZpZXdwb3J0QXJndW1lbnRzKToKKyAgICAgICAgKFdlYktpdDo6
UGFnZUNsaWVudEltcGw6OnN0YXJ0QXNzaXN0aW5nTm9kZSk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VDbGllbnRJbXBsOjpzdG9wQXNzaXN0aW5nTm9kZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9pb3MvVUlXS1JlbW90ZVZpZXcuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9p
b3MvVUlXS1JlbW90ZVZpZXcubW06IEFkZGVkLgorICAgICAgICAoK1tVSVdLUmVtb3RlVmlldyBs
YXllckNsYXNzXSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9pb3MvV0tDb250ZW50Vmlldy5o
OiBBZGRlZC4KKyAgICAgICAgKE5TX0VOVU0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvaW9z
L1dLQ29udGVudFZpZXcubW06IEFkZGVkLgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGluaXRX
aXRoQ29kZXI6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgaW5pdFdpdGhGcmFtZTpdKToK
KyAgICAgICAgKC1bV0tDb250ZW50VmlldyBpbml0V2l0aEZyYW1lOnByb2Nlc3NHcm91cDpicm93
c2luZ0NvbnRleHRHcm91cDpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBkZWFsbG9jXSk6
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgd2lsbE1vdmVUb1dpbmRvdzpdKToKKyAgICAgICAg
KC1bV0tDb250ZW50VmlldyBkaWRNb3ZlVG9XaW5kb3ddKToKKyAgICAgICAgKC1bV0tDb250ZW50
VmlldyBicm93c2luZ0NvbnRleHRDb250cm9sbGVyXSk6CisgICAgICAgICgtW1dLQ29udGVudFZp
ZXcgY29udGVudFR5cGVdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBzZXRNaW5pbXVtU2l6
ZTpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBzZXRWaWV3cG9ydFNpemU6XSk6CisgICAg
ICAgICgtW1dLQ29udGVudFZpZXcgZGlkU2Nyb2xsVG86XSk6CisgICAgICAgICgtW1dLQ29udGVu
dFZpZXcgZGlkWm9vbVRvU2NhbGU6XSk6CisgICAgICAgIChkZWNpZGVQb2xpY3lGb3JHZW9sb2Nh
dGlvblBlcm1pc3Npb25SZXF1ZXN0KToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfY29tbW9u
SW5pdFdpdGhQcm9jZXNzR3JvdXA6YnJvd3NpbmdDb250ZXh0R3JvdXA6XSk6CisgICAgICAgICgt
W1dLQ29udGVudFZpZXcgX3dpbmRvd0RpZE1vdmVUb1NjcmVlbk5vdGlmaWNhdGlvbjpdKToKKyAg
ICAgICAgKC1bV0tDb250ZW50VmlldyBfdXBkYXRlRm9yU2NyZWVuOl0pOgorICAgICAgICAoLVtX
S0NvbnRlbnRWaWV3IF9kaWRDaGFuZ2VWaWV3cG9ydEFyZ3VtZW50czpXZWJDb3JlOjpdKToKKyAg
ICAgICAgKC1bV0tDb250ZW50VmlldyBzdGQ6Ol0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3
IF9wcm9jZXNzRGlkQ3Jhc2hdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfZGlkUmVsYXVu
Y2hQcm9jZXNzXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgYnJvd3NpbmdDb250ZXh0Q29u
dHJvbGxlckRpZENvbW1pdExvYWQ6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2RpZENo
YW5nZUNvbnRlbnRTaXplOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9tYWluRG9jdW1l
bnREaWRSZWNlaXZlTW9iaWxlRG9jVHlwZV0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9k
aWRHZXRUYXBIaWdobGlnaHRGb3JSZXF1ZXN0OmNvbG9yOnF1YWRzOnRvcExlZnRSYWRpdXM6dG9w
UmlnaHRSYWRpdXM6Ym90dG9tTGVmdFJhZGl1czpib3R0b21SaWdodFJhZGl1czpdKToKKyAgICAg
ICAgKC1bV0tDb250ZW50VmlldyBfc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcjpd
KToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfc3RhcnRBc3Npc3RpbmdOb2RlXSk6CisgICAg
ICAgICgtW1dLQ29udGVudFZpZXcgX3N0b3BBc3Npc3RpbmdOb2RlXSk6CisgICAgICAgICgtW1dL
Q29udGVudFZpZXcgX3NlbGVjdGlvbkNoYW5nZWRdKToKKyAgICAgICAgKC1bV0tDb250ZW50Vmll
dyBfaW50ZXJwcmV0S2V5RXZlbnQ6aXNDaGFyRXZlbnQ6XSk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9pb3MvV0tDb250ZW50Vmlld0ludGVybmFsLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvaW9zL1dLR2VvbG9jYXRpb25Qcm92aWRlcklPUy5oOiBBZGRlZC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2lvcy9XS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MubW06IEFkZGVkLgor
ICAgICAgICAoc3RhcnRVcGRhdGluZ0NhbGxiYWNrKToKKyAgICAgICAgKHN0b3BVcGRhdGluZ0Nh
bGxiYWNrKToKKyAgICAgICAgKHNldEVuYWJsZUhpZ2hBY2N1cmFjeSk6CisgICAgICAgICgtW1dL
R2VvbG9jYXRpb25Qcm92aWRlcklPUyBfc3RvcFVwZGF0aW5nSWZQb3NzaWJsZV0pOgorICAgICAg
ICAoLVtXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MgX3N0YXJ0VXBkYXRpbmddKToKKyAgICAgICAg
KC1bV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TIF9zdG9wVXBkYXRpbmddKToKKyAgICAgICAgKC1b
V0tHZW9sb2NhdGlvblByb3ZpZGVySU9TIF9zZXRFbmFibGVIaWdoQWNjdXJhY3k6XSk6CisgICAg
ICAgICgtW1dLR2VvbG9jYXRpb25Qcm92aWRlcklPUyBpbml0XSk6CisgICAgICAgICgtW1dLR2Vv
bG9jYXRpb25Qcm92aWRlcklPUyBpbml0V2l0aENvbnRleHQ6XSk6CisgICAgICAgICgtW1dLR2Vv
bG9jYXRpb25Qcm92aWRlcklPUyBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblJlcXVlc3RGcm9t
T3JpZ2luOmZyYW1lOnJlcXVlc3Q6d2luZG93Ol0pOgorICAgICAgICAoLVtXS0dlb2xvY2F0aW9u
UHJvdmlkZXJJT1MgZ2VvbG9jYXRpb25EZWxlZ2F0ZVN0YXJ0ZWRdKToKKyAgICAgICAgKC1bV0tH
ZW9sb2NhdGlvblByb3ZpZGVySU9TIGdlb2xvY2F0aW9uRGVsZWdhdGVVbmFibGVUb1N0YXJ0XSk6
CisgICAgICAgICgtW1dLR2VvbG9jYXRpb25Qcm92aWRlcklPUyBwb3NpdGlvbkNoYW5nZWQ6V2Vi
Q29yZTo6XSk6CisgICAgICAgICgtW1dLR2VvbG9jYXRpb25Qcm92aWRlcklPUyBlcnJvck9jY3Vy
cmVkOl0pOgorICAgICAgICAoLVtXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MgcmVzZXRHZW9sb2Nh
dGlvbl0pOgorICAgICAgICAoLVtXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MgcGVybWlzc2lvbkRl
bmllZDpdKToKKyAgICAgICAgKC1bV0tXZWJBbGxvd0RlbnlQb2xpY3lMaXN0ZW5lciBpbml0V2l0
aFByb3ZpZGVyOnBlcm1pc3Npb25SZXF1ZXN0UHJveHk6XSk6CisgICAgICAgICgtW1dLV2ViQWxs
b3dEZW55UG9saWN5TGlzdGVuZXIgYWxsb3ddKToKKyAgICAgICAgKC1bV0tXZWJBbGxvd0RlbnlQ
b2xpY3lMaXN0ZW5lciBkZW55XSk6CisgICAgICAgICgtW1dLV2ViQWxsb3dEZW55UG9saWN5TGlz
dGVuZXIgZGVueU9ubHlUaGlzUmVxdWVzdF0pOgorICAgICAgICAoLVtXS1dlYkFsbG93RGVueVBv
bGljeUxpc3RlbmVyIHNob3VsZENsZWFyQ2FjaGVdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2lvcy9XS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1NPYmpDU2VjdXJpdHlPcmlnaW4ubW06IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblJlcXVlc3RGcm9t
T3JpZ2luKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9XS0ludGVyYWN0aW9uVmlldy5o
OiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9XS0ludGVyYWN0aW9uVmlldy5t
bTogQWRkZWQuCisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IGluaXRXaXRoRnJhbWU6XSk6
CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IGRlYWxsb2NdKToKKyAgICAgICAgKC1bV0tJ
bnRlcmFjdGlvblZpZXcgc2V0U2Nyb2xsVmlldzpdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlv
blZpZXcgc2V0UGFnZTpXZWJLaXQ6Ol0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBj
YW5CZWNvbWVGaXJzdFJlc3BvbmRlcl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBy
ZXNpZ25GaXJzdFJlc3BvbmRlcl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBfd2Vi
VG91Y2hFdmVudHNSZWNvZ25pemVkOl0pOgorICAgICAgICAoaW5mbGF0ZVF1YWQpOgorICAgICAg
ICAoLVtXS0ludGVyYWN0aW9uVmlldyBfZGlkR2V0VGFwSGlnaGxpZ2h0Rm9yUmVxdWVzdDpjb2xv
cjpXZWJDb3JlOjpxdWFkczpXZWJDb3JlOjp0b3BMZWZ0UmFkaXVzOldlYkNvcmU6OnRvcFJpZ2h0
UmFkaXVzOldlYkNvcmU6OmJvdHRvbUxlZnRSYWRpdXM6V2ViQ29yZTo6Ym90dG9tUmlnaHRSYWRp
dXM6V2ViQ29yZTo6XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IF9jYW5jZWxMb25n
UHJlc3NHZXN0dXJlUmVjb2duaXplcl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBf
ZGlkU2Nyb2xsXSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IF9yZXF1aXJlc0tleWJv
YXJkUmVzZXRPblJlbG9hZF0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBnZXN0dXJl
UmVjb2duaXplclNob3VsZEJlZ2luOl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBf
Y2FuY2VsSW50ZXJhY3Rpb25dKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgX2hpZ2hs
aWdodExvbmdQcmVzc1JlY29nbml6ZWQ6XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3
IF9zaW5nbGVUYXBSZWNvZ25pemVkOl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBn
ZXN0dXJlUmVjb2duaXplcjpjYW5QcmV2ZW50R2VzdHVyZVJlY29nbml6ZXI6XSk6CisgICAgICAg
ICgtW1dLSW50ZXJhY3Rpb25WaWV3IF9hdHRlbXB0Q2xpY2tBdExvY2F0aW9uOl0pOgorICAgICAg
ICAoLVtXS0ludGVyYWN0aW9uVmlldyBpbnB1dEFjY2Vzc29yeVZpZXddKToKKyAgICAgICAgKC1b
V0tJbnRlcmFjdGlvblZpZXcgc3VwcG9ydGVkUGFzdGVib2FyZFR5cGVzRm9yQ3VycmVudFNlbGVj
dGlvbl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBfYWRkU2hvcnRjdXQ6XSk6Cisg
ICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IF9wcm9tcHRGb3JSZXBsYWNlOl0pOgorICAgICAg
ICAoLVtXS0ludGVyYWN0aW9uVmlldyByZXBsYWNlOl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0
aW9uVmlldyBjYW5QZXJmb3JtQWN0aW9uOndpdGhTZW5kZXI6XSk6CisgICAgICAgICgtW1dLSW50
ZXJhY3Rpb25WaWV3IF9yZXNldFNob3dpbmdUZXh0U3R5bGU6XSk6CisgICAgICAgICgtW1dLSW50
ZXJhY3Rpb25WaWV3IGNvcHk6XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IGN1dDpd
KToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgcGFzdGU6XSk6CisgICAgICAgICgtW1dL
SW50ZXJhY3Rpb25WaWV3IHNlbGVjdDpdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcg
c2VsZWN0QWxsOl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyB0b2dnbGVCb2xkZmFj
ZTpdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgdG9nZ2xlSXRhbGljczpdKToKKyAg
ICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgdG9nZ2xlVW5kZXJsaW5lOl0pOgorICAgICAgICAo
LVtXS0ludGVyYWN0aW9uVmlldyBfc2hvd1RleHRTdHlsZU9wdGlvbnM6XSk6CisgICAgICAgICgt
W1dLSW50ZXJhY3Rpb25WaWV3IF9zaG93RGljdGlvbmFyeTpdKToKKyAgICAgICAgKHNlbGVjdGVk
U3RyaW5nKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgX2RlZmluZTpdKToKKyAgICAg
ICAgKHRvV0tHZXN0dXJlVHlwZSk6CisgICAgICAgICh0b1VJV0tHZXN0dXJlVHlwZSk6CisgICAg
ICAgICh0b1dLU2VsZWN0aW9uVG91Y2gpOgorICAgICAgICAodG9VSVdLU2VsZWN0aW9uVG91Y2gp
OgorICAgICAgICAodG9XS0dlc3R1cmVSZWNvZ25pemVyU3RhdGUpOgorICAgICAgICAodG9VSUdl
c3R1cmVSZWNvZ25pemVyU3RhdGUpOgorICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlZFdpdGhHZXN0
dXJlKToKKyAgICAgICAgKHNlbGVjdGlvbkNoYW5nZWRXaXRoVG91Y2gpOgorICAgICAgICAoLVtX
S0ludGVyYWN0aW9uVmlldyBjaGFuZ2VTZWxlY3Rpb25XaXRoR2VzdHVyZUF0OndpdGhHZXN0dXJl
OndpdGhTdGF0ZTpdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgY2hhbmdlU2VsZWN0
aW9uV2l0aFRvdWNoQXQ6d2l0aFNlbGVjdGlvblRvdWNoOmJhc2VJc1N0YXJ0Ol0pOgorICAgICAg
ICAoLVtXS0ludGVyYWN0aW9uVmlldyBjaGFuZ2VTZWxlY3Rpb25XaXRoVG91Y2hlc0Zyb206dG86
d2l0aEdlc3R1cmU6d2l0aFN0YXRlOl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBh
dXRvY29ycmVjdGlvbkRhdGFdKToKKyAgICAgICAgKGF1dG9jb3JyZWN0aW9uRGF0YSk6CisgICAg
ICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IHJlcXVlc3RBdXRvY29ycmVjdGlvbkRhdGE6d2l0aENv
cnJlY3Rpb246XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IHJlcXVlc3RBdXRvY29y
cmVjdGlvblJlY3RzRm9yU3RyaW5nOndpdGhDb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAg
KC1bV0tJbnRlcmFjdGlvblZpZXcgdGV4dEZpcnN0UmVjdF0pOgorICAgICAgICAoLVtXS0ludGVy
YWN0aW9uVmlldyB0ZXh0TGFzdFJlY3RdKToKKyAgICAgICAgKGF1dG9jb3JyZWN0aW9uUmVzdWx0
KToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgYXBwbHlBdXRvY29ycmVjdGlvbjp0b1N0
cmluZzp3aXRoUmVjdDpdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgYXBwbHlBdXRv
Y29ycmVjdGlvbjp0b1N0cmluZzp3aXRoQ29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgt
W1dLSW50ZXJhY3Rpb25WaWV3IHJlcXVlc3RBdXRvY29ycmVjdGlvbkNvbnRleHRXaXRoQ29tcGxl
dGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IGFjY2Vzc29yeURv
bmVdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgYWNjZXNzb3J5VGFiOl0pOgorICAg
ICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBhY2Nlc3NvcnlBdXRvRmlsbF0pOgorICAgICAgICAo
LVtXS0ludGVyYWN0aW9uVmlldyBhY2Nlc3NvcnlDbGVhcl0pOgorICAgICAgICAoLVtXS0ludGVy
YWN0aW9uVmlldyBfdXBkYXRlQWNjZXNzb3J5XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25W
aWV3IHRleHRJblJhbmdlOl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyByZXBsYWNl
UmFuZ2U6d2l0aFRleHQ6XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IHNlbGVjdGVk
VGV4dFJhbmdlXSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IGNhcmV0UmVjdEZvclBv
c2l0aW9uOl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBzZWxlY3Rpb25SZWN0c0Zv
clJhbmdlOl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBzZXRTZWxlY3RlZFRleHRS
YW5nZTpdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgbWFya2VkVGV4dFJhbmdlXSk6
CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IG1hcmtlZFRleHRTdHlsZV0pOgorICAgICAg
ICAoLVtXS0ludGVyYWN0aW9uVmlldyBzZXRNYXJrZWRUZXh0U3R5bGU6XSk6CisgICAgICAgICgt
W1dLSW50ZXJhY3Rpb25WaWV3IHNldE1hcmtlZFRleHQ6c2VsZWN0ZWRSYW5nZTpdKToKKyAgICAg
ICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgdW5tYXJrVGV4dF0pOgorICAgICAgICAoLVtXS0ludGVy
YWN0aW9uVmlldyBiZWdpbm5pbmdPZkRvY3VtZW50XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rp
b25WaWV3IGVuZE9mRG9jdW1lbnRdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgdGV4
dFJhbmdlRnJvbVBvc2l0aW9uOnRvUG9zaXRpb246XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rp
b25WaWV3IHBvc2l0aW9uRnJvbVBvc2l0aW9uOm9mZnNldDpdKToKKyAgICAgICAgKC1bV0tJbnRl
cmFjdGlvblZpZXcgcG9zaXRpb25Gcm9tUG9zaXRpb246aW5EaXJlY3Rpb246b2Zmc2V0Ol0pOgor
ICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBjb21wYXJlUG9zaXRpb246dG9Qb3NpdGlvbjpd
KToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgb2Zmc2V0RnJvbVBvc2l0aW9uOnRvUG9z
aXRpb246XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IHRva2VuaXplcl0pOgorICAg
ICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBwb3NpdGlvbldpdGhpblJhbmdlOmZhcnRoZXN0SW5E
aXJlY3Rpb246XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IGNoYXJhY3RlclJhbmdl
QnlFeHRlbmRpbmdQb3NpdGlvbjppbkRpcmVjdGlvbjpdKToKKyAgICAgICAgKC1bV0tJbnRlcmFj
dGlvblZpZXcgYmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JQb3NpdGlvbjppbkRpcmVjdGlvbjpdKToK
KyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgc2V0QmFzZVdyaXRpbmdEaXJlY3Rpb246Zm9y
UmFuZ2U6XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IGZpcnN0UmVjdEZvclJhbmdl
Ol0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBjbG9zZXN0UG9zaXRpb25Ub1BvaW50
Ol0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBjbG9zZXN0UG9zaXRpb25Ub1BvaW50
OndpdGhpblJhbmdlOl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBjaGFyYWN0ZXJS
YW5nZUF0UG9pbnQ6XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IGRlbGV0ZUJhY2t3
YXJkXSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IGluc2VydFRleHQ6XSk6CisgICAg
ICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IGhhc1RleHRdKToKKyAgICAgICAgKC1bV0tJbnRlcmFj
dGlvblZpZXcgdGV4dElucHV0VHJhaXRzXSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3
IGludGVyYWN0aW9uQXNzaXN0YW50XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IHNl
bGVjdGlvblJhbmdlXSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IHJlY3RGb3JOU1Jh
bmdlOl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBfbWFya2VkVGV4dE5TUmFuZ2Vd
KToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgc2VsZWN0ZWRET01SYW5nZV0pOgorICAg
ICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBzZXRTZWxlY3RlZERPTVJhbmdlOmFmZmluaXR5RG93
bnN0cmVhbTpdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgcmVwbGFjZVJhbmdlV2l0
aFRleHRXaXRob3V0Q2xvc2luZ1R5cGluZzpyZXBsYWNlbWVudFRleHQ6XSk6CisgICAgICAgICgt
W1dLSW50ZXJhY3Rpb25WaWV3IHJlY3RDb250YWluaW5nQ2FyZXRTZWxlY3Rpb25dKToKKyAgICAg
ICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgcmVxdWlyZXNLZXlFdmVudHNdKToKKyAgICAgICAgKC1b
V0tJbnRlcmFjdGlvblZpZXcgaGFuZGxlS2V5V2ViRXZlbnQ6XSk6CisgICAgICAgICgtW1dLSW50
ZXJhY3Rpb25WaWV3IF9pbnRlcnByZXRLZXlFdmVudDppc0NoYXJFdmVudDpdKToKKyAgICAgICAg
KC1bV0tJbnRlcmFjdGlvblZpZXcgc2V0Qm90dG9tQnVmZmVySGVpZ2h0Ol0pOgorICAgICAgICAo
LVtXS0ludGVyYWN0aW9uVmlldyBhdXRvbWF0aWNhbGx5U2VsZWN0ZWRPdmVybGF5XSk6CisgICAg
ICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IHNlbGVjdGlvbkdyYW51bGFyaXR5XSk6CisgICAgICAg
ICgtW1dLSW50ZXJhY3Rpb25WaWV3IGluc2VydERpY3RhdGlvblJlc3VsdDp3aXRoQ29ycmVjdGlv
bklkZW50aWZpZXI6XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IG1ldGFkYXRhRGlj
dGlvbmFyaWVzRm9yRGljdGF0aW9uUmVzdWx0c10pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9u
VmlldyBwcmV2aW91c1VucGVydHVyYmVkRGljdGF0aW9uUmVzdWx0Qm91bmRhcnlGcm9tUG9zaXRp
b246XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IG5leHRVbnBlcnR1cmJlZERpY3Rh
dGlvblJlc3VsdEJvdW5kYXJ5RnJvbVBvc2l0aW9uOl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0
aW9uVmlldyBtb3ZlQmFja3dhcmQ6XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IG1v
dmVGb3J3YXJkOl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBjaGFyYWN0ZXJCZWZv
cmVDYXJldFNlbGVjdGlvbl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyB3b3JkQ29u
dGFpbmluZ0NhcmV0U2VsZWN0aW9uXSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IHdv
cmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0
aW9uVmlldyBtYXJrZWRUZXh0XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IHNldE1h
cmtlZFRleHQ6XSk6CisgICAgICAgICgtW1dLSW50ZXJhY3Rpb25WaWV3IGhhc0NvbnRlbnRdKToK
KyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgc2VsZWN0QWxsXSk6CisgICAgICAgICgtW1dL
SW50ZXJhY3Rpb25WaWV3IHRleHRDb2xvckZvckNhcmV0U2VsZWN0aW9uXSk6CisgICAgICAgICgt
W1dLSW50ZXJhY3Rpb25WaWV3IGZvbnRGb3JDYXJldFNlbGVjdGlvbl0pOgorICAgICAgICAoLVtX
S0ludGVyYWN0aW9uVmlldyBoYXNTZWxlY3Rpb25dKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlv
blZpZXcgaXNQb3NpdGlvbjphdEJvdW5kYXJ5OmluRGlyZWN0aW9uOl0pOgorICAgICAgICAoLVtX
S0ludGVyYWN0aW9uVmlldyBwb3NpdGlvbkZyb21Qb3NpdGlvbjp0b0JvdW5kYXJ5OmluRGlyZWN0
aW9uOl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyBpc1Bvc2l0aW9uOndpdGhpblRl
eHRVbml0OmluRGlyZWN0aW9uOl0pOgorICAgICAgICAoLVtXS0ludGVyYWN0aW9uVmlldyByYW5n
ZUVuY2xvc2luZ1Bvc2l0aW9uOndpdGhHcmFudWxhcml0eTppbkRpcmVjdGlvbjpdKToKKyAgICAg
ICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgdGFrZVRyYWl0c0Zyb206XSk6CisgICAgICAgICgtW1dL
SW50ZXJhY3Rpb25WaWV3IF9zdGFydEFzc2lzdGluZ0tleWJvYXJkXSk6CisgICAgICAgICgtW1dL
SW50ZXJhY3Rpb25WaWV3IF9zdG9wQXNzaXN0aW5nS2V5Ym9hcmRdKToKKyAgICAgICAgKC1bV0tJ
bnRlcmFjdGlvblZpZXcgX3N0YXJ0QXNzaXN0aW5nTm9kZV0pOgorICAgICAgICAoLVtXS0ludGVy
YWN0aW9uVmlldyBfc3RvcEFzc2lzdGluZ05vZGVdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlv
blZpZXcgX3NlbGVjdGlvbkNoYW5nZWRdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcg
c2hvdWxkSWdub3JlV2ViVG91Y2hdKToKKyAgICAgICAgKC1bV0tJbnRlcmFjdGlvblZpZXcgaXNB
bnlUb3VjaE92ZXJBY3RpdmVBcmVhOl0pOgorICAgICAgICAoLVtXS1RleHRSYW5nZSBfaXNDYXJl
dF0pOgorICAgICAgICAoLVtXS1RleHRSYW5nZSBfaXNSYW5nZWRdKToKKyAgICAgICAgKCtbV0tU
ZXh0UmFuZ2UgdGV4dFJhbmdlV2l0aFN0YXRlOmlzUmFuZ2U6aXNFZGl0YWJsZTpzdGFydFJlY3Q6
ZW5kUmVjdDpzZWxlY3Rpb25SZWN0czpzZWxlY3RlZFRleHRMZW5ndGg6XSk6CisgICAgICAgICgt
W1dLVGV4dFJhbmdlIGRlYWxsb2NdKToKKyAgICAgICAgKC1bV0tUZXh0UmFuZ2UgZGVzY3JpcHRp
b25dKToKKyAgICAgICAgKC1bV0tUZXh0UmFuZ2Ugc3RhcnRdKToKKyAgICAgICAgKC1bV0tUZXh0
UmFuZ2UgZW5kXSk6CisgICAgICAgICgtW1dLVGV4dFJhbmdlIGlzRW1wdHldKToKKyAgICAgICAg
KC1bV0tUZXh0UmFuZ2UgaXNFcXVhbDpdKToKKyAgICAgICAgKCtbV0tUZXh0UG9zaXRpb24gdGV4
dFBvc2l0aW9uV2l0aFJlY3Q6XSk6CisgICAgICAgICgtW1dLVGV4dFBvc2l0aW9uIGlzRXF1YWw6
XSk6CisgICAgICAgICgtW1dLVGV4dFBvc2l0aW9uIGRlc2NyaXB0aW9uXSk6CisgICAgICAgICgt
W1dLVGV4dFNlbGVjdGlvblJlY3QgaW5pdFdpdGhXZWJSZWN0Ol0pOgorICAgICAgICAoLVtXS1Rl
eHRTZWxlY3Rpb25SZWN0IGRlYWxsb2NdKToKKyAgICAgICAgKCtbV0tUZXh0U2VsZWN0aW9uUmVj
dCB0ZXh0U2VsZWN0aW9uUmVjdHNXaXRoV2ViUmVjdHM6XSk6CisgICAgICAgICgtW1dLVGV4dFNl
bGVjdGlvblJlY3QgcmVjdF0pOgorICAgICAgICAoLVtXS1RleHRTZWxlY3Rpb25SZWN0IHdyaXRp
bmdEaXJlY3Rpb25dKToKKyAgICAgICAgKC1bV0tUZXh0U2VsZWN0aW9uUmVjdCByYW5nZV0pOgor
ICAgICAgICAoLVtXS1RleHRTZWxlY3Rpb25SZWN0IGNvbnRhaW5zU3RhcnRdKToKKyAgICAgICAg
KC1bV0tUZXh0U2VsZWN0aW9uUmVjdCBjb250YWluc0VuZF0pOgorICAgICAgICAoLVtXS1RleHRT
ZWxlY3Rpb25SZWN0IGlzVmVydGljYWxdKToKKyAgICAgICAgKCtbV0tBdXRvY29ycmVjdGlvblJl
Y3RzIGF1dG9jb3JyZWN0aW9uUmVjdHNXaXRoUmVjdHM6bGFzdFJlY3Q6XSk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9pb3MvV0tTY3JvbGxWaWV3Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvaW9zL1dLU2Nyb2xsVmlldy5tbTogQWRkZWQuCisgICAgICAgICgtW1dLU2Nyb2xs
VmlldyB0b3VjaGVzU2hvdWxkQ2FuY2VsSW5Db250ZW50VmlldzpdKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2lvcy9XS1ZpZXcubW06IEFkZGVkLgorICAgICAgICAoLVtXS1ZpZXcgaW5pdFdp
dGhGcmFtZTpdKToKKyAgICAgICAgKC1bV0tWaWV3IGluaXRXaXRoRnJhbWU6cHJvY2Vzc0dyb3Vw
OmJyb3dzaW5nQ29udGV4dEdyb3VwOl0pOgorICAgICAgICAoLVtXS1ZpZXcgaW5pdFdpdGhGcmFt
ZTpwcm9jZXNzR3JvdXA6YnJvd3NpbmdDb250ZXh0R3JvdXA6cmVsYXRlZFRvVmlldzpdKToKKyAg
ICAgICAgKC1bV0tWaWV3IHNldEZyYW1lOl0pOgorICAgICAgICAoLVtXS1ZpZXcgc2V0Qm91bmRz
Ol0pOgorICAgICAgICAoLVtXS1ZpZXcgYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcl0pOgorICAg
ICAgICAoLVtXS1ZpZXcgY29udGVudFZpZXc6Y29udGVudHNTaXplRGlkQ2hhbmdlOl0pOgorICAg
ICAgICAoLVtXS1ZpZXcgY29udGVudFZpZXdkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lOl0pOgor
ICAgICAgICAoLVtXS1ZpZXcgY29udGVudFZpZXdEaWRSZWNlaXZlTW9iaWxlRG9jVHlwZTpdKToK
KyAgICAgICAgKC1bV0tWaWV3IGNvbnRlbnRWaWV3OmRpZENoYW5nZVZpZXdwb3J0QXJndW1lbnRz
U2l6ZTppbml0aWFsU2NhbGU6bWluaW11bVNjYWxlOm1heGltdW1TY2FsZTphbGxvd3NVc2VyU2Nh
bGluZzpdKToKKyAgICAgICAgKC1bV0tWaWV3IHZpZXdwb3J0SGFuZGxlckRpZENoYW5nZVNjYWxl
czpdKToKKyAgICAgICAgKC1bV0tWaWV3IHZpZXdwb3J0SGFuZGxlcjpkaWRDaGFuZ2VWaWV3cG9y
dFNpemU6XSk6CisgICAgICAgICgtW1dLVmlldyB2aWV3Rm9yWm9vbWluZ0luU2Nyb2xsVmlldzpd
KToKKyAgICAgICAgKC1bV0tWaWV3IHNjcm9sbFZpZXdXaWxsQmVnaW5ab29taW5nOndpdGhWaWV3
Ol0pOgorICAgICAgICAoLVtXS1ZpZXcgc2Nyb2xsVmlld0RpZEVuZERyYWdnaW5nOndpbGxEZWNl
bGVyYXRlOl0pOgorICAgICAgICAoLVtXS1ZpZXcgc2Nyb2xsVmlld0RpZEVuZERlY2VsZXJhdGlu
ZzpdKToKKyAgICAgICAgKC1bV0tWaWV3IHNjcm9sbFZpZXdEaWRTY3JvbGxUb1RvcDpdKToKKyAg
ICAgICAgKC1bV0tWaWV3IHNjcm9sbFZpZXdEaWRFbmRab29taW5nOndpdGhWaWV3OmF0U2NhbGU6
XSk6CisgICAgICAgICgtW1dLVmlldyBfY29tbW9uSW5pdGlhbGl6YXRpb25XaXRoUHJvY2Vzc0dy
b3VwOmJyb3dzaW5nQ29udGV4dEdyb3VwOl0pOgorICAgICAgICAoLVtXS1ZpZXcgX2ZyYW1lT3JC
b3VuZHNDaGFuZ2VkXSk6CisgICAgICAgICgtW1dLVmlldyBfc2V0RG9jdW1lbnRTY2FsZTpdKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIu
bW06CisgICAgICAgIChkaWRDb21taXRMb2FkRm9yRnJhbWUpOgorICAgICAgICAoLVtXS0Jyb3dz
aW5nQ29udGV4dENvbnRyb2xsZXIgbG9hZERlbGVnYXRlSW50ZXJuYWxdKToKKyAgICAgICAgKC1b
V0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyIHNldExvYWREZWxlZ2F0ZUludGVybmFsOl0pOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcklu
dGVybmFsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tQcm9jZXNzR3JvdXAubW06
CisgICAgICAgICgtW1dLUHJvY2Vzc0dyb3VwIGluaXRXaXRoSW5qZWN0ZWRCdW5kbGVVUkw6XSk6
CisgICAgICAgICgtW1dLUHJvY2Vzc0dyb3VwIF9nZW9sb2NhdGlvblByb3ZpZGVyXSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tQcm9jZXNzR3JvdXBQcml2YXRlLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9D
b3JyZWN0aW9uQ2FsbGJhY2suaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkF1dG9jb3JyZWN0
aW9uRGF0YUNhbGxiYWNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpBdXRvY29ycmVjdGlv
bkRhdGFDYWxsYmFjazo6fkF1dG9jb3JyZWN0aW9uRGF0YUNhbGxiYWNrKToKKyAgICAgICAgKFdl
YktpdDo6QXV0b2NvcnJlY3Rpb25EYXRhQ2FsbGJhY2s6OnBlcmZvcm1DYWxsYmFja1dpdGhSZXR1
cm5WYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9jb3JyZWN0aW9uRGF0YUNhbGxiYWNrOjpp
bnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6QXV0b2NvcnJlY3Rpb25EYXRhQ2FsbGJhY2s6
OkF1dG9jb3JyZWN0aW9uRGF0YUNhbGxiYWNrKToKKyAgICAgICAgKiBVSVByb2Nlc3MvRGF0YWJh
c2VzL21hYy9EYXRhYmFzZVByb2Nlc3NQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6c2hv
dWxkVXNlWFBDKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvbWFjL1Byb2Nlc3NMYXVu
Y2hlck1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6YWRkRFlMREVudmlyb25tZW50QWRkaXRpb25z
KToKKyAgICAgICAgKFdlYktpdDo6c2VydmljZU5hbWUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9O
ZXR3b3JrL21hYy9OZXR3b3JrUHJvY2Vzc1Byb3h5TWFjLm1tOgorICAgICAgICAoV2ViS2l0Ojpz
aG91bGRVc2VYUEMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0
OjpzaGFyZWRQcm9jZXNzQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OmFs
bG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdCk6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYkNvbnRleHQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViRWRpdENvbW1hbmRQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRDb21tYW5kUHJveHk6Om5hbWVGb3JFZGl0QWN0
aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eTo6cmVzZXRQZXJt
aXNzaW9ucyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkxvYWRlckNsaWVudC5jcHA6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYkxvYWRlckNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OldlYlBhZ2VQcm94eSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y2xvc2UpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OmRpZENvbW1pdExvYWRGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6dW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpwYWdlRGlkU2Nyb2xsKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpkaWRDaGFuZ2VDb250ZW50U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6ZWRpdG9yU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpyZXNldFN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXNl
dFN0YXRlQWZ0ZXJQcm9jZXNzRXhpdGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
Ojppbml0aWFsaXplQ3JlYXRpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpyZWNvbW1lbmRlZFNjcm9sbGJhclN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpzZXRNaW5pbXVtTGF5b3V0U2l6ZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpHZXN0dXJlQ2FsbGJhY2s6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDYWxsYmFjazo6fkdlc3R1cmVDYWxs
YmFjayk6CisgICAgICAgIChXZWJLaXQ6Okdlc3R1cmVDYWxsYmFjazo6cGVyZm9ybUNhbGxiYWNr
V2l0aFJldHVyblZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNhbGxiYWNrOjppbnZh
bGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6R2VzdHVyZUNhbGxiYWNrOjpHZXN0dXJlQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViS2l0OjpUb3VjaGVzQ2FsbGJhY2s6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OlRvdWNoZXNDYWxsYmFjazo6flRvdWNoZXNDYWxsYmFjayk6CisgICAgICAgIChX
ZWJLaXQ6OlRvdWNoZXNDYWxsYmFjazo6cGVyZm9ybUNhbGxiYWNrV2l0aFJldHVyblZhbHVlKToK
KyAgICAgICAgKFdlYktpdDo6VG91Y2hlc0NhbGxiYWNrOjppbnZhbGlkYXRlKToKKyAgICAgICAg
KFdlYktpdDo6VG91Y2hlc0NhbGxiYWNrOjpUb3VjaGVzQ2FsbGJhY2spOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL1dl
YlVJQ2xpZW50LmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViVUlDbGllbnQuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvaW9zOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1RleHRD
aGVja2VySU9TLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnN0YXRl
KToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tp
bmdBbGxvd2VkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpzZXRH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnNl
dEF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpU
ZXh0Q2hlY2tlcjo6c2V0QXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKToKKyAgICAg
ICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnNldEF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFi
bGVkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnNldEF1dG9tYXRpY0xpbmtEZXRl
Y3Rpb25FbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnNldEF1dG9tYXRp
Y1RleHRSZXBsYWNlbWVudEVuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6
aXNTbWFydEluc2VydERlbGV0ZUVuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tl
cjo6c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENo
ZWNrZXI6OnN1YnN0aXR1dGlvbnNQYW5lbElzU2hvd2luZyk6CisgICAgICAgIChXZWJLaXQ6OlRl
eHRDaGVja2VyOjp0b2dnbGVTdWJzdGl0dXRpb25zUGFuZWxJc1Nob3dpbmcpOgorICAgICAgICAo
V2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVD
aGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmdyYW1tYXJDaGVja2luZ0Vu
YWJsZWRTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dW5pcXVl
U3BlbGxEb2N1bWVudFRhZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjbG9zZVNw
ZWxsRG9jdW1lbnRXaXRoVGFnKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNr
VGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNrU3Bl
bGxpbmdPZlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja0dyYW1t
YXJPZlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNT
aG93aW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5nVUlJ
c1Nob3dpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdV
SVdpdGhNaXNzcGVsbGVkV29yZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp1cGRh
dGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hl
Y2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6
bGVhcm5Xb3JkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6Omlnbm9yZVdvcmQpOgor
ICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94
eUlPUy5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1RpbGVkQ29yZUFuaW1hdGlv
bkRyYXdpbmdBcmVhUHJveHlJT1MubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpUaWxlZENv
cmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5SU9TOjpUaWxlZENvcmVBbmltYXRpb25EcmF3aW5n
QXJlYVByb3h5SU9TKToKKyAgICAgICAgKFdlYktpdDo6VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2lu
Z0FyZWFQcm94eUlPUzo6flRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHlJT1MpOgor
ICAgICAgICAoV2ViS2l0OjpUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5SU9TOjpk
ZXZpY2VTY2FsZUZhY3RvckRpZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQ29yZUFu
aW1hdGlvbkRyYXdpbmdBcmVhUHJveHlJT1M6OnNpemVEaWRDaGFuZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5SU9TOjplbnRlckFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyUHJveHlJT1MubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJGdWxsU2Ny
ZWVuTWFuYWdlclByb3h5OjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnVsbFNj
cmVlbk1hbmFnZXJQcm94eTo6Y2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJGdWxsU2NyZWVu
TWFuYWdlclByb3h5Ojppc0Z1bGxTY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJGdWxsU2Ny
ZWVuTWFuYWdlclByb3h5OjplbnRlckZ1bGxTY3JlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJG
dWxsU2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbFNjcmVlbik6CisgICAgICAgIChXZWJLaXQ6
OldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk6OmJlZ2FuRW50ZXJGdWxsU2NyZWVuKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6YmVnYW5FeGl0RnVsbFNjcmVl
bik6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJJbnNwZWN0b3JQcm94eUlPUy5tbTogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5OjpjcmVhdGVJbnNwZWN0b3JX
aW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6dXBkYXRlSW5zcGVj
dG9yV2luZG93VGl0bGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1DcmVhdGVJbnNwZWN0b3JQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtT3Blbik6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybURpZENsb3NlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtQnJpbmdUb0Zyb250KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtSXNGcm9udCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybUluc3BlY3RlZFVSTENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1TYXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9y
UHJveHk6OnBsYXRmb3JtQXBwZW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJv
eHk6Omluc3BlY3RlZFZpZXdGcmFtZURpZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OldlYklu
c3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd1dpZHRoKToK
KyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGV0YWNoKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dI
ZWlnaHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRU
b29sYmFySGVpZ2h0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6Omluc3Bl
Y3RvclBhZ2VVUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVj
dG9yQmFzZVVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9y
bVNldEF0dGFjaGVkV2luZG93V2lkdGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6Z2V0SXNTcGVha2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c3BlYWsp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN0b3BTcGVha2luZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2VhcmNoV2l0aFNwb3RsaWdodCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2VhcmNoVGhlV2ViKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5Ojp3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmNvbmZpcm1Db21wb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6Y2FuY2VsQ29tcG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Omlu
c2VydFRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Omluc2VydERpY3RhdGVk
VGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0TWFya2VkUmFuZ2UpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldFNlbGVjdGVkUmFuZ2UpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldEF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2Up
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNoYXJhY3RlckluZGV4Rm9yUG9pbnQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJh
bmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpleGVjdXRlS2V5cHJlc3NDb21t
YW5kcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c3RyaW5nU2VsZWN0aW9uRm9y
UGFzdGVib2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGF0YVNlbGVjdGlv
bkZvclBhc3RlYm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlYWRTZWxl
Y3Rpb25Gcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVy
Zm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpnZXN0dXJlQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnRvdWNoZXNDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6YXV0b2Nv
cnJlY3Rpb25EYXRhQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNl
bGVjdFdpdGhHZXN0dXJlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp1cGRhdGVT
ZWxlY3Rpb25XaXRoVG91Y2hlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVx
dWVzdEF1dG9jb3JyZWN0aW9uRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
YXBwbHlBdXRvY29ycmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2Vs
ZWN0V2l0aFR3b1RvdWNoZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmV4dGVu
ZFNlbGVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aW50ZXJwcmV0UXVl
dWVkS2V5RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmludGVycHJldEtl
eUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZW5kQ29tcGxleFRleHRJ
bnB1dFRvUGx1Z2luKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRTbWFydElu
c2VydERlbGV0ZUVuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlZ2lz
dGVyV2ViUHJvY2Vzc0FjY2Vzc2liaWxpdHlUb2tlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6bWFrZUZpcnN0UmVzcG9uZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpyZWdpc3RlclVJUHJvY2Vzc0FjY2Vzc2liaWxpdHlUb2tlbnMpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5
U2VsZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNob3VsZERlbGF5V2lu
ZG93T3JkZXJpbmdGb3JFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6YWNj
ZXB0c0ZpcnN0TW91c2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZEZpbmlz
aFNjcm9sbGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkRmluaXNoWm9v
bWluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6dGFwSGlnaGxpZ2h0QXRQb3Np
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Ymx1ckFzc2lzdGVkTm9kZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bWFpbkRvY3VtZW50RGlkUmVjZWl2ZU1v
YmlsZURvY1R5cGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZEdldFRhcEhp
Z2hsaWdodEdlb21ldHJpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpZENo
YW5nZVZpZXdwb3J0QXJndW1lbnRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpz
dGFydEFzc2lzdGluZ05vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN0b3BB
c3Npc3RpbmdOb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRQZXJmb3Jt
RGljdGlvbmFyeUxvb2t1cCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2F2ZVBE
RlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvbik6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3Blbldp
dGhOYXRpdmVBcHBsaWNhdGlvblJhdyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
b3BlblBERkZyb21UZW1wb3JhcnlGb2xkZXJXaXRoTmF0aXZlQXBwbGljYXRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5
ZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUHJvY2Vzc1Byb3h5SU9TLm1tOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpmdWxsS2V5Ym9hcmRBY2Nlc3NF
bmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6c2hvdWxkVXNlWFBDKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnBhZ2VJc1Byb2Nlc3NTdXBwcmVzc2libGUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmFsbFBhZ2VzQXJlUHJvY2Vzc1N1cHByZXNz
aWJsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6dXBkYXRlUHJvY2Vzc1N1
cHByZXNzaW9uU3RhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvVGlsZWRDb3JlQW5pbWF0
aW9uRHJhd2luZ0FyZWFQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvVGlsZWRDb3Jl
QW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eS5tbToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dL
RnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIubW06CisgICAgICAgICogVUlQcm9jZXNzL21hYy9X
ZWJDb250ZXh0TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpyZWdpc3RlclVzZXJEZWZhdWx0c0lm
TmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6cmVnaXN0ZXJPY2NsdXNpb25Ob3RpZmljYXRpb25I
YW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OnVucmVnaXN0ZXJPY2NsdXNpb25Ob3RpZmljYXRp
b25IYW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OnBsYXRmb3JtSW5pdGlh
bGl6ZVdlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0OjpyZWdpc3Rlck5v
dGlmaWNhdGlvbk9ic2VydmVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OnVucmVn
aXN0ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0
Ojppc1VSTEtub3duSFNUU0hvc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0OjpyZXNl
dEhTVFNIb3N0cyk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJGdWxsU2NyZWVuTWFuYWdl
clByb3h5TWFjLm1tOgorCiAyMDEzLTExLTIyICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFtXSzJdIEFub3RoZXIgYnVpbGQgZml4IGZvciBOZXR3b3Jr
UHJvY2VzcyBvbiBpT1MKSW5kZXg6IFVJUHJvY2Vzcy9BUEkvQy9XS05hdGl2ZUV2ZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVUlQcm9jZXNzL0FQSS9DL1dLTmF0aXZlRXZlbnQuaAkocmV2aXNpb24gMTU5
NjUxKQorKysgVUlQcm9jZXNzL0FQSS9DL1dLTmF0aXZlRXZlbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjYsMTEgKzI2LDE1IEBACiAjaWZuZGVmIFdLTmF0aXZlRXZlbnRfaAogI2RlZmluZSBXS05h
dGl2ZUV2ZW50X2gKIAorI2lmZGVmIF9fQVBQTEVfXworI2luY2x1ZGUgPFRhcmdldENvbmRpdGlv
bmFscy5oPgorI2VuZGlmCisKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5k
aWYKIAotI2lmZGVmIF9fQVBQTEVfXworI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhVEFSR0VU
X09TX0lQSE9ORQogI2lmZGVmIF9fT0JKQ19fCiBAY2xhc3MgTlNFdmVudDsKICNlbGlmIF9fY3Bs
dXNwbHVzCkluZGV4OiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBV
SVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkocmV2aXNpb24gMTU5NjUxKQorKysgVUlQcm9jZXNz
L0FQSS9DL1dLUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4OSw2ICs4ODksNyBAQAogfQog
CiAKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIAogLy8gLS0gREVQUkVDQVRFRCAt
LQogCkBAIC05MzksMyArOTQwLDQgQEAKIAogLy8gLS0gREVQUkVDQVRFRCAtLQogCisjZW5kaWYg
Ly8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCkluZGV4OiBVSVByb2Nlc3MvQVBJL0MvbWFj
L1dLQ29udGV4dFByaXZhdGVNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBVSVByb2Nlc3MvQVBJL0MvbWFj
L1dLQ29udGV4dFByaXZhdGVNYWMuaAkocmV2aXNpb24gMTU5NjUxKQorKysgVUlQcm9jZXNzL0FQ
SS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3
LDggQEAKIAogV0tfRVhQT1JUIGJvb2wgV0tDb250ZXh0SXNQbHVnSW5VcGRhdGVBdmFpbGFibGUo
V0tDb250ZXh0UmVmIGNvbnRleHQsIFdLU3RyaW5nUmVmIHBsdWdJbkJ1bmRsZUlkZW50aWZpZXIp
OwogCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisKIFdLX0VYUE9SVCBXS0RpY3Rp
b25hcnlSZWYgV0tDb250ZXh0Q29weVBsdWdJbkluZm9Gb3JCdW5kbGVJZGVudGlmaWVyKFdLQ29u
dGV4dFJlZiBjb250ZXh0LCBXS1N0cmluZ1JlZiBwbHVnSW5CdW5kbGVJZGVudGlmaWVyKTsKIAog
dHlwZWRlZiB2b2lkICheV0tDb250ZXh0R2V0SW5mb0Zvckluc3RhbGxlZFBsdWdJbnNCbG9jayko
V0tBcnJheVJlZiwgV0tFcnJvclJlZik7CkBAIC02NCw2ICs2Niw4IEBACiAvKiBWYWx1ZSB0eXBl
OiBXS0Jvb2xlYW5SZWYgKi8KIFdLX0VYUE9SVCBXS1N0cmluZ1JlZiBXS1BsdWdJbkluZm9Jc1Nh
bmRib3hlZEtleSgpOwogCisjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisK
ICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCkluZGV4OiBVSVByb2Nlc3MvQVBJL0MvbWFj
L1dLQ29udGV4dFByaXZhdGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVUlQcm9jZXNzL0FQSS9DL21h
Yy9XS0NvbnRleHRQcml2YXRlTWFjLm1tCShyZXZpc2lvbiAxNTk2NTEpCisrKyBVSVByb2Nlc3Mv
QVBJL0MvbWFjL1dLQ29udGV4dFByaXZhdGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU2LDkg
KzU2LDE1IEBACiAKIGJvb2wgV0tDb250ZXh0SXNQbHVnSW5VcGRhdGVBdmFpbGFibGUoV0tDb250
ZXh0UmVmIGNvbnRleHRSZWYsIFdLU3RyaW5nUmVmIHBsdWdJbkJ1bmRsZUlkZW50aWZpZXJSZWYp
CiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCiAgICAgcmV0
dXJuIFdLSXNQbHVnaW5VcGRhdGVBdmFpbGFibGUoKE5TU3RyaW5nICopYWRvcHRDRihXS1N0cmlu
Z0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwbHVnSW5CdW5kbGVJZGVudGlmaWVy
UmVmKSkuZ2V0KCkpOworI2VuZGlmCiB9CiAKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKKwogV0tEaWN0aW9uYXJ5UmVmIFdLQ29udGV4dENvcHlQbHVnSW5JbmZvRm9yQnVuZGxlSWRl
bnRpZmllcihXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tTdHJpbmdSZWYgcGx1Z0luQnVuZGxl
SWRlbnRpZmllclJlZikKIHsKICAgICBQbHVnaW5Nb2R1bGVJbmZvIHBsdWdpbiA9IHRvSW1wbChj
b250ZXh0UmVmKS0+cGx1Z2luSW5mb1N0b3JlKCkuZmluZFBsdWdpbldpdGhCdW5kbGVJZGVudGlm
aWVyKHRvV1RGU3RyaW5nKHBsdWdJbkJ1bmRsZUlkZW50aWZpZXJSZWYpKTsKQEAgLTEyNiwzICsx
MzIsNSBAQAogewogICAgIHJldHVybiBXS1BsdWdpbkluZm9ybWF0aW9uSGFzU2FuZGJveFByb2Zp
bGVLZXkoKTsKIH0KKworI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpJbmRl
eDogVUlQcm9jZXNzL0FQSS9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBV
SVByb2Nlc3MvQVBJL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCShyZXZpc2lvbiAwKQorKysgVUlQ
cm9jZXNzL0FQSS9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGFnZUNsaWVudEltcGxJT1Nf
aAorI2RlZmluZSBQYWdlQ2xpZW50SW1wbElPU19oCisKKyNpbXBvcnQgIlBhZ2VDbGllbnQuaCIK
KyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworQGNsYXNzIFdLQ29udGVudFZpZXc7CisKK25h
bWVzcGFjZSBXZWJLaXQgeworICAgIAorICAgIGNsYXNzIFBhZ2VDbGllbnRJbXBsIDogcHVibGlj
IFBhZ2VDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8UGFn
ZUNsaWVudEltcGw+IGNyZWF0ZShXS0NvbnRlbnRWaWV3ICopOworICAgICAgICB2aXJ0dWFsIH5Q
YWdlQ2xpZW50SW1wbCgpOworICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBleHBsaWNp
dCBQYWdlQ2xpZW50SW1wbChXS0NvbnRlbnRWaWV3ICopOworICAgICAgICAKKyAgICAgICAgdmly
dHVhbCBzdGQ6OnVuaXF1ZV9wdHI8RHJhd2luZ0FyZWFQcm94eT4gY3JlYXRlRHJhd2luZ0FyZWFQ
cm94eSgpIE9WRVJSSURFOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlld05lZWRzRGlzcGxh
eShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgT1ZFUlJJREU7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBkaXNwbGF5VmlldygpIE9WRVJSSURFOworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuU2Nyb2xs
VmlldygpIE9WRVJSSURFOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVmlldyhjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3Jv
bGxPZmZzZXQpIE9WRVJSSURFOworICAgICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFNpemUgdmll
d1NpemUoKSBPVkVSUklERTsKKyAgICAgICAgdmlydHVhbCBib29sIGlzVmlld1dpbmRvd0FjdGl2
ZSgpIE9WRVJSSURFOworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3Rm9jdXNlZCgpIE9WRVJS
SURFOworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3VmlzaWJsZSgpIE9WRVJSSURFOworICAg
ICAgICB2aXJ0dWFsIGJvb2wgaXNXaW5kb3dWaXNpYmxlKCkgT1ZFUlJJREU7CisgICAgICAgIHZp
cnR1YWwgYm9vbCBpc1ZpZXdJbldpbmRvdygpIE9WRVJSSURFOworICAgICAgICB2aXJ0dWFsIHZv
aWQgcHJvY2Vzc0RpZENyYXNoKCkgT1ZFUlJJREU7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWxhdW5jaFByb2Nlc3MoKSBPVkVSUklERTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhZ2VDbG9z
ZWQoKSBPVkVSUklERTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHByZWZlcmVuY2VzRGlkQ2hhbmdl
KCkgT1ZFUlJJREU7CisgICAgICAgIHZpcnR1YWwgdm9pZCB0b29sVGlwQ2hhbmdlZChjb25zdCBT
dHJpbmcmLCBjb25zdCBTdHJpbmcmKSBPVkVSUklERTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZENoYW5nZUNvbnRlbnRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBPVkVSUklERTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKSBPVkVS
UklERTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zl
cyhib29sKSBPVkVSUklERTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpZXdwb3J0
UHJvcGVydGllcyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKSBPVkVSUklERTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJF
ZGl0Q29tbWFuZFByb3h5PiwgV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKSBPVkVSUklERTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsRWRpdENvbW1hbmRzKCkgT1ZFUlJJREU7CisgICAg
ICAgIHZpcnR1YWwgYm9vbCBjYW5VbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pIE9W
RVJSSURFOworICAgICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVVuZG9SZWRvKFdlYlBhZ2VQcm94
eTo6VW5kb09yUmVkbykgT1ZFUlJJREU7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3NpYmls
aXR5V2ViUHJvY2Vzc1Rva2VuUmVjZWl2ZWQoY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSYp
IE9WRVJSSURFOworICAgICAgICB2aXJ0dWFsIGJvb2wgaW50ZXJwcmV0S2V5RXZlbnQoY29uc3Qg
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+
JikgT1ZFUlJJREU7CisgICAgICAgIHZpcnR1YWwgYm9vbCBleGVjdXRlU2F2ZWRDb21tYW5kQnlT
ZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yKSBPVkVSUklERTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHNldERyYWdJbWFnZShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgY2xpZW50UG9zaXRp
b24sIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1hZ2UsIGJvb2wgaXNMaW5rRHJh
ZykgT1ZFUlJJREU7CisgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTZWN1cmVJbnB1dFN0YXRl
KCkgT1ZFUlJJREU7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZXNldFNlY3VyZUlucHV0U3RhdGUo
KSBPVkVSUklERTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUlucHV0Q29udGV4dEFib3V0
RGlzY2FyZGVkQ29tcG9zaXRpb24oKSBPVkVSUklERTsKKyAgICAgICAgdmlydHVhbCB2b2lkIG1h
a2VGaXJzdFJlc3BvbmRlcigpIE9WRVJSSURFOworICAgICAgICB2aXJ0dWFsIFdlYkNvcmU6OkZs
b2F0UmVjdCBjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBP
VkVSUklERTsKKyAgICAgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvVXNl
clNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIE9WRVJSSURFOworICAgICAgICB2aXJ0
dWFsIFdlYkNvcmU6OkludFBvaW50IHNjcmVlblRvV2luZG93KGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JikgT1ZFUlJJREU7CisgICAgICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB3aW5kb3dU
b1NjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgT1ZFUlJJREU7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBkb25lV2l0aEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBi
b29sIHdhc0V2ZW50SGFuZGxlZCkgT1ZFUlJJREU7CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykK
KyAgICAgICAgdmlydHVhbCB2b2lkIGRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJU
b3VjaEV2ZW50JiwgYm9vbCB3YXNFdmVudEhhbmRsZWQpIE9WRVJSSURFOworI2VuZGlmCisgICAg
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4gY3JlYXRlUG9wdXBNZW51
UHJveHkoV2ViUGFnZVByb3h5KikgT1ZFUlJJREU7CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxXZWJDb250ZXh0TWVudVByb3h5PiBjcmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94
eSopIE9WRVJSSURFOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RmluZEluZGljYXRvcihQYXNz
UmVmUHRyPEZpbmRJbmRpY2F0b3I+LCBib29sIGZhZGVPdXQsIGJvb2wgYW5pbWF0ZSkgT1ZFUlJJ
REU7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgICAgICB2aXJ0dWFsIHZv
aWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0
JikgT1ZFUlJJREU7CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3Np
dGluZ01vZGUoKSBPVkVSUklERTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBPVkVSUklERTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIoQ0FM
YXllciAqcm9vdExheWVyKSBPVkVSUklERTsKKyNlbmRpZgorCisgICAgICAgIHZpcnR1YWwgdm9p
ZCBtYWluRG9jdW1lbnREaWRSZWNlaXZlTW9iaWxlRG9jVHlwZSgpIE9WRVJSSURFOworCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRHZXRUYXBIaWdobGlnaHRHZW9tZXRyaWVzKHVpbnQ2NF90IHJl
cXVlc3RJRCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yLCBjb25zdCBWZWN0b3I8V2ViQ29y
ZTo6RmxvYXRRdWFkPiYgaGlnaGxpZ2h0ZWRRdWFkcywgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
dG9wTGVmdFJhZGl1cywgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgdG9wUmlnaHRSYWRpdXMsIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzKSBPVkVSUklERTsKKworICAgICAgICB2b2lkIGRpZENo
YW5nZVZpZXdwb3J0QXJndW1lbnRzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJiB2
aWV3cG9ydEFyZ3VtZW50cykgT1ZFUlJJREU7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHN0YXJ0
QXNzaXN0aW5nTm9kZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgYm9vbCBoYXNOZXh0Rm9jdXNh
YmxlLCBib29sIGhhc1ByZXZpb3VzRm9jdXNhYmxlKSBPVkVSUklERTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHN0b3BBc3Npc3RpbmdOb2RlKCkgT1ZFUlJJREU7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBzZWxlY3Rpb25EaWRDaGFuZ2UoKSBPVkVSUklERTsKKyAgICAgICAgdmlydHVhbCBib29sIGlu
dGVycHJldEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBib29sIGlzQ2hh
ckV2ZW50KSBPVkVSUklERTsKKworICAgICAgICBXS0NvbnRlbnRWaWV3ICptX3ZpZXc7CisgICAg
fTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUGFnZUNsaWVudEltcGxJT1Nf
aApJbmRleDogVUlQcm9jZXNzL0FQSS9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVUlQcm9jZXNzL0FQSS9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0JKHJldmlzaW9uIDAp
CisrKyBVSVByb2Nlc3MvQVBJL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDMzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiUGFnZUNsaWVudEltcGxJT1MuaCIKKworI2ltcG9ydCAiTmF0aXZlV2ViS2V5
Ym9hcmRFdmVudC5oIgorI2ltcG9ydCAiV0tDb250ZW50Vmlld0ludGVybmFsLmgiCisjaW1wb3J0
ICJXZWJDb250ZXh0TWVudVByb3h5LmgiCisjaW1wb3J0ICJXZWJFZGl0Q29tbWFuZFByb3h5Lmgi
CisjaW1wb3J0IDxVSUtpdC9VSVdlYlRvdWNoRXZlbnRzR2VzdHVyZVJlY29nbml6ZXIuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxhdGZv
cm1TY3JlZW4uaD4KKworQGludGVyZmFjZSBVSVZpZXcgKElQSSkKKy0gKFVJU2Nyb2xsVmlldyAq
KV9zY3JvbGxlcjsKK0BlbmQKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitQYXNzT3duUHRyPFBhZ2VDbGllbnRJbXBsPiBQYWdlQ2xpZW50SW1wbDo6
Y3JlYXRlKFdLQ29udGVudFZpZXcgKnZpZXcpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQ
YWdlQ2xpZW50SW1wbCh2aWV3KSk7Cit9CisKK1BhZ2VDbGllbnRJbXBsOjp+UGFnZUNsaWVudElt
cGwoKQoreworfQorICAgIAorUGFnZUNsaWVudEltcGw6OlBhZ2VDbGllbnRJbXBsKFdLQ29udGVu
dFZpZXcgKnZpZXcpCisgICAgOiBtX3ZpZXcodmlldykKK3sKK30KKyAgICAKK3N0ZDo6dW5pcXVl
X3B0cjxEcmF3aW5nQXJlYVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlRHJhd2luZ0FyZWFQ
cm94eSgpCit7CisgICAgcmV0dXJuIFttX3ZpZXcgX2NyZWF0ZURyYXdpbmdBcmVhUHJveHldOwor
fQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0IEludFJl
Y3QmIHJlY3QpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUGFnZUNs
aWVudEltcGw6OmRpc3BsYXlWaWV3KCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
Kwordm9pZCBQYWdlQ2xpZW50SW1wbDo6c2Nyb2xsVmlldyhjb25zdCBJbnRSZWN0JiwgY29uc3Qg
SW50U2l6ZSYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jvb2wgUGFnZUNs
aWVudEltcGw6OmNhblNjcm9sbFZpZXcoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitJbnRTaXplIFBhZ2VDbGllbnRJbXBsOjp2aWV3U2l6ZSgpCit7
CisgICAgaWYgKFVJU2Nyb2xsVmlldyAqc2Nyb2xsZXIgPSBbbV92aWV3IF9zY3JvbGxlcl0pCisg
ICAgICAgIHJldHVybiBJbnRTaXplKHNjcm9sbGVyLmJvdW5kcy5zaXplKTsKKworICAgIHJldHVy
biBJbnRTaXplKG1fdmlldy5ib3VuZHMuc2l6ZSk7Cit9CisKK2Jvb2wgUGFnZUNsaWVudEltcGw6
OmlzVmlld1dpbmRvd0FjdGl2ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3Rm9jdXNlZCgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQYWdlQ2xp
ZW50SW1wbDo6aXNWaWV3VmlzaWJsZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNXaW5kb3dWaXNpYmxlKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBh
Z2VDbGllbnRJbXBsOjppc1ZpZXdJbldpbmRvdygpCit7CisgICAgcmV0dXJuIFttX3ZpZXcgd2lu
ZG93XTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6cHJvY2Vzc0RpZENyYXNoKCkKK3sKKyAg
ICBbbV92aWV3IF9wcm9jZXNzRGlkQ3Jhc2hdOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpk
aWRSZWxhdW5jaFByb2Nlc3MoKQoreworICAgIFttX3ZpZXcgX2RpZFJlbGF1bmNoUHJvY2Vzc107
Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnBhZ2VDbG9zZWQoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnByZWZlcmVuY2VzRGlkQ2hhbmdl
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjp0
b29sVGlwQ2hhbmdlZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRpZENoYW5nZUNvbnRlbnRT
aXplKGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSkKK3sKKyAgICBbbV92aWV3IF9kaWRDaGFu
Z2VDb250ZW50U2l6ZTpjb250ZW50c1NpemVdOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpz
ZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRD
aGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29uc3QgVmlld3BvcnRBdHRyaWJ1dGVzJikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZWdpc3RlckVk
aXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYlBhZ2VQcm94eTo6
VW5kb09yUmVkbykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhZ2VDbGll
bnRJbXBsOjpjbGVhckFsbEVkaXRDb21tYW5kcygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworYm9vbCBQYWdlQ2xpZW50SW1wbDo6Y2FuVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRv
T3JSZWRvKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIFBhZ2VDbGllbnRJbXBsOjpleGVjdXRlVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRv
T3JSZWRvKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudElt
cGw6OmFjY2Vzc2liaWxpdHlXZWJQcm9jZXNzVG9rZW5SZWNlaXZlZChjb25zdCBDb3JlSVBDOjpE
YXRhUmVmZXJlbmNlJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFBhZ2VD
bGllbnRJbXBsOjppbnRlcnByZXRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50
JiwgVmVjdG9yPEtleXByZXNzQ29tbWFuZD4mKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFBhZ2VDbGllbnRJbXBsOjppbnRlcnByZXRLZXlF
dmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVudCwgYm9vbCBpc0NoYXJFdmVu
dCkKK3sKKyAgICByZXR1cm4gW21fdmlldyBfaW50ZXJwcmV0S2V5RXZlbnQ6ZXZlbnQubmF0aXZl
RXZlbnQoKSBpc0NoYXJFdmVudDppc0NoYXJFdmVudF07Cit9CisgICAgCitib29sIFBhZ2VDbGll
bnRJbXBsOjpleGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxlY3Rvcihjb25zdCBTdHJpbmcmKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFBhZ2VD
bGllbnRJbXBsOjpzZXREcmFnSW1hZ2UoY29uc3QgSW50UG9pbnQmLCBQYXNzUmVmUHRyPFNoYXJl
YWJsZUJpdG1hcD4sIGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQ
YWdlQ2xpZW50SW1wbDo6c2VsZWN0aW9uRGlkQ2hhbmdlKCkKK3sKKyAgICBbbV92aWV3IF9zZWxl
Y3Rpb25DaGFuZ2VkXTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6dXBkYXRlU2VjdXJlSW5w
dXRTdGF0ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYWdlQ2xpZW50
SW1wbDo6cmVzZXRTZWN1cmVJbnB1dFN0YXRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpub3RpZnlJbnB1dENvbnRleHRBYm91dERpc2NhcmRl
ZENvbXBvc2l0aW9uKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhZ2VD
bGllbnRJbXBsOjptYWtlRmlyc3RSZXNwb25kZXIoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK0Zsb2F0UmVjdCBQYWdlQ2xpZW50SW1wbDo6Y29udmVydFRvRGV2aWNlU3BhY2UoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IEZsb2F0UmVjdCgpOworfQorCitGbG9hdFJlY3QgUGFnZUNsaWVudEltcGw6OmNvbnZlcnRUb1Vz
ZXJTcGFjZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gRmxvYXRSZWN0KCk7Cit9CisKK0ludFBvaW50IFBhZ2VDbGllbnRJbXBsOjpz
Y3JlZW5Ub1dpbmRvdyhjb25zdCBJbnRQb2ludCYgcG9pbnQpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gSW50UG9pbnQoKTsKK30KKworSW50UmVjdCBQYWdlQ2xpZW50SW1w
bDo6d2luZG93VG9TY3JlZW4oY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBJbnRSZWN0KCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6
OmRvbmVXaXRoS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGJvb2wpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCit2
b2lkIFBhZ2VDbGllbnRJbXBsOjpkb25lV2l0aFRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91
Y2hFdmVudCYgbmF0aXZlV2VidG91Y2hFdmVudCwgYm9vbCBldmVudEhhbmRsZWQpCit7CisgICAg
W25hdGl2ZVdlYnRvdWNoRXZlbnQubmF0aXZlRXZlbnQoKSBzZXREZWZhdWx0UHJldmVudGVkOmV2
ZW50SGFuZGxlZF07Cit9CisjZW5kaWYKKworUGFzc1JlZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4g
UGFnZUNsaWVudEltcGw6OmNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94eSopCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworUGFzc1JlZlB0cjxXZWJD
b250ZXh0TWVudVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlQ29udGV4dE1lbnVQcm94eShX
ZWJQYWdlUHJveHkqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNldEZpbmRJbmRpY2F0b3IoUGFzc1JlZlB0cjxGaW5k
SW5kaWNhdG9yPiwgYm9vbCwgYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorICAg
IAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK3ZvaWQgUGFnZUNsaWVudEltcGw6
OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYg
bGF5ZXJUcmVlQ29udGV4dCkKK3sKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZXhpdEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIFBhZ2VDbGllbnRJbXBsOjp1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25z
dCBMYXllclRyZWVDb250ZXh0JikKK3sKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcihDQUxheWVyICpyb290TGF5ZXIpCit7CisgICAg
W21fdmlldyBfc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcjpyb290TGF5ZXJdOwor
fQorI2VuZGlmCisKK3ZvaWQgUGFnZUNsaWVudEltcGw6Om1haW5Eb2N1bWVudERpZFJlY2VpdmVN
b2JpbGVEb2NUeXBlKCkKK3sKKyAgICBbbV92aWV3IF9tYWluRG9jdW1lbnREaWRSZWNlaXZlTW9i
aWxlRG9jVHlwZV07Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRpZEdldFRhcEhpZ2hsaWdo
dEdlb21ldHJpZXModWludDY0X3QgcmVxdWVzdElELCBjb25zdCBXZWJDb3JlOjpDb2xvciYgY29s
b3IsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFF1YWQ+JiBoaWdobGlnaHRlZFF1YWRzLCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiB0b3BMZWZ0UmFkaXVzLCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiB0b3BSaWdodFJhZGl1cywgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgYm90dG9tTGVmdFJh
ZGl1cywgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgYm90dG9tUmlnaHRSYWRpdXMpCit7CisgICAg
W21fdmlldyBfZGlkR2V0VGFwSGlnaGxpZ2h0Rm9yUmVxdWVzdDpyZXF1ZXN0SUQgY29sb3I6Y29s
b3IgcXVhZHM6aGlnaGxpZ2h0ZWRRdWFkcyB0b3BMZWZ0UmFkaXVzOnRvcExlZnRSYWRpdXMgdG9w
UmlnaHRSYWRpdXM6dG9wUmlnaHRSYWRpdXMgYm90dG9tTGVmdFJhZGl1czpib3R0b21MZWZ0UmFk
aXVzIGJvdHRvbVJpZ2h0UmFkaXVzOmJvdHRvbVJpZ2h0UmFkaXVzXTsKK30KKwordm9pZCBQYWdl
Q2xpZW50SW1wbDo6ZGlkQ2hhbmdlVmlld3BvcnRBcmd1bWVudHMoY29uc3QgV2ViQ29yZTo6Vmll
d3BvcnRBcmd1bWVudHMmIHZpZXdwb3J0QXJndW1lbnRzKQoreworICAgIFttX3ZpZXcgX2RpZENo
YW5nZVZpZXdwb3J0QXJndW1lbnRzOnZpZXdwb3J0QXJndW1lbnRzXTsKK30KKwordm9pZCBQYWdl
Q2xpZW50SW1wbDo6c3RhcnRBc3Npc3RpbmdOb2RlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBi
b29sLCBib29sKQoreworICAgIFttX3ZpZXcgX3N0YXJ0QXNzaXN0aW5nTm9kZV07Cit9CisKK3Zv
aWQgUGFnZUNsaWVudEltcGw6OnN0b3BBc3Npc3RpbmdOb2RlKCkKK3sKKyAgICBbbV92aWV3IF9z
dG9wQXNzaXN0aW5nTm9kZV07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogVUlQ
cm9jZXNzL0FQSS9pb3MvVUlXS1JlbW90ZVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBVSVByb2Nlc3Mv
QVBJL2lvcy9VSVdLUmVtb3RlVmlldy5oCShyZXZpc2lvbiAwKQorKysgVUlQcm9jZXNzL0FQSS9p
b3MvVUlXS1JlbW90ZVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCA8VUlLaXQvVUlWaWV3Lmg+CisKK0BpbnRlcmZhY2UgVUlX
S1JlbW90ZVZpZXcgOiBVSVZpZXcKK0BlbmQKSW5kZXg6IFVJUHJvY2Vzcy9BUEkvaW9zL1VJV0tS
ZW1vdGVWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFVJUHJvY2Vzcy9BUEkvaW9zL1VJV0tSZW1vdGVW
aWV3Lm1tCShyZXZpc2lvbiAwKQorKysgVUlQcm9jZXNzL0FQSS9pb3MvVUlXS1JlbW90ZVZpZXcu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVUlXS1JlbW90ZVZpZXcuaCIKKworI2ltcG9ydCA8
UXVhcnR6Q29yZS9DQUxheWVySG9zdC5oPgorCitAaW1wbGVtZW50YXRpb24gVUlXS1JlbW90ZVZp
ZXcKKworKyAoQ2xhc3MpbGF5ZXJDbGFzcworeworICAgIHJldHVybiBbQ0FMYXllckhvc3QgY2xh
c3NdOworfQorCitAZW5kCisKSW5kZXg6IFVJUHJvY2Vzcy9BUEkvaW9zL1dLQ29udGVudFZpZXcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBVSVByb2Nlc3MvQVBJL2lvcy9XS0NvbnRlbnRWaWV3LmgJKHJldmlz
aW9uIDApCisrKyBVSVByb2Nlc3MvQVBJL2lvcy9XS0NvbnRlbnRWaWV3LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFVJS2l0L1VJS2l0Lmg+
CisjaW1wb3J0IDxXZWJLaXQyL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5oPgorI2ltcG9y
dCA8V2ViS2l0Mi9XS0Jyb3dzaW5nQ29udGV4dEdyb3VwLmg+CisjaW1wb3J0IDxXZWJLaXQyL1dL
UHJvY2Vzc0dyb3VwLmg+CisKK0BjbGFzcyBXS0NvbnRlbnRWaWV3OworCit0eXBlZGVmIE5TX0VO
VU0odW5zaWduZWQsIFdLQ29udGVudFR5cGUpCit7CisgICAgU3RhbmRhcmQgPSAwLAorICAgIFBs
YWluVGV4dCwKKyAgICBJbWFnZQorfTsKKworQHByb3RvY29sIFdLQ29udGVudFZpZXdEZWxlZ2F0
ZSA8TlNPYmplY3Q+CisKK0BvcHRpb25hbAorLSAodm9pZCljb250ZW50VmlldzooV0tDb250ZW50
VmlldyAqKWNvbnRlbnRWaWV3IGNvbnRlbnRzU2l6ZURpZENoYW5nZTooQ0dTaXplKW5ld1NpemU7
CistICh2b2lkKWNvbnRlbnRWaWV3ZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZTooV0tDb250ZW50
VmlldyAqKWNvbnRlbnRWaWV3OworLSAodm9pZCljb250ZW50Vmlld0RpZFJlY2VpdmVNb2JpbGVE
b2NUeXBlOihXS0NvbnRlbnRWaWV3ICopY29udGVudFZpZXc7CistICh2b2lkKWNvbnRlbnRWaWV3
OihXS0NvbnRlbnRWaWV3ICopY29udGVudFZpZXcgZGlkQ2hhbmdlVmlld3BvcnRBcmd1bWVudHNT
aXplOihDR1NpemUpbmV3U2l6ZSBpbml0aWFsU2NhbGU6KGZsb2F0KWluaXRpYWxTY2FsZSBtaW5p
bXVtU2NhbGU6KGZsb2F0KW1pbmltdW1TY2FsZSBtYXhpbXVtU2NhbGU6KGZsb2F0KW1heGltdW1T
Y2FsZSBhbGxvd3NVc2VyU2NhbGluZzooZmxvYXQpYWxsb3dzVXNlclNjYWxpbmc7CisKK0BlbmQK
KworTlNfQ0xBU1NfQVZBSUxBQkxFX0lPUyg4XzApCitAaW50ZXJmYWNlIFdLQ29udGVudFZpZXcg
OiBVSVZpZXcKK0Bwcm9wZXJ0eSAocmVhZG9ubHksIG5vbmF0b21pYykgV0tCcm93c2luZ0NvbnRl
eHRDb250cm9sbGVyICpicm93c2luZ0NvbnRleHRDb250cm9sbGVyOworCitAcHJvcGVydHkgKG5v
bmF0b21pYywgYXNzaWduKSBpZCA8V0tDb250ZW50Vmlld0RlbGVnYXRlPiBkZWxlZ2F0ZTsKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgV0tDb250ZW50VHlwZSBjb250ZW50VHlwZTsK
KworLSAoaWQpaW5pdFdpdGhGcmFtZTooQ0dSZWN0KWZyYW1lIHByb2Nlc3NHcm91cDooV0tQcm9j
ZXNzR3JvdXAgKilwcm9jZXNzR3JvdXAgYnJvd3NpbmdDb250ZXh0R3JvdXA6KFdLQnJvd3NpbmdD
b250ZXh0R3JvdXAgKilicm93c2luZ0NvbnRleHRHcm91cDsKKworLSAodm9pZClzZXRNaW5pbXVt
U2l6ZTooQ0dTaXplKXNpemU7CistICh2b2lkKXNldFZpZXdwb3J0U2l6ZTooQ0dTaXplKXNpemU7
CisKKy0gKHZvaWQpZGlkU2Nyb2xsVG86KENHUG9pbnQpY29udGVudE9mZnNldDsKKy0gKHZvaWQp
ZGlkWm9vbVRvU2NhbGU6KENHRmxvYXQpc2NhbGU7CisKK0BlbmQKSW5kZXg6IFVJUHJvY2Vzcy9B
UEkvaW9zL1dLQ29udGVudFZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVUlQcm9jZXNzL0FQSS9pb3Mv
V0tDb250ZW50Vmlldy5tbQkocmV2aXNpb24gMCkKKysrIFVJUHJvY2Vzcy9BUEkvaW9zL1dLQ29u
dGVudFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNDIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldLQ29udGVudFZpZXdJbnRlcm5hbC5oIgor
CisjaW1wb3J0ICJQYWdlQ2xpZW50SW1wbElPUy5oIgorI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWFQcm94eS5oIgorI2ltcG9ydCAiVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0Fy
ZWFQcm94eUlPUy5oIgorI2ltcG9ydCAiVUlXS1JlbW90ZVZpZXcuaCIKKyNpbXBvcnQgIldLQnJv
d3NpbmdDb250ZXh0Q29udHJvbGxlckludGVybmFsLmgiCisjaW1wb3J0ICJXS0Jyb3dzaW5nQ29u
dGV4dEdyb3VwUHJpdmF0ZS5oIgorI2ltcG9ydCAiV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLmgi
CisjaW1wb3J0ICJXS1Byb2Nlc3NHcm91cFByaXZhdGUuaCIKKyNpbXBvcnQgIldLSW50ZXJhY3Rp
b25WaWV3LmgiCisjaW1wb3J0ICJXZWJDb250ZXh0LmgiCisjaW1wb3J0ICJXZWJQYWdlR3JvdXAu
aCIKKyNpbXBvcnQgIldlYlN5c3RlbUludGVyZmFjZS5oIgorI2ltcG9ydCA8UXVhcnR6Q29yZS9D
QUxheWVySG9zdC5oPgorI2ltcG9ydCA8VUlLaXQvVUlXaW5kb3dfUHJpdmF0ZS5oPgorI2ltcG9y
dCA8V2ViQ29yZS9WaWV3cG9ydEFyZ3VtZW50cy5oPgorI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3Jl
VGhyZWFkU3lzdGVtSW50ZXJmYWNlLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworQGludGVy
ZmFjZSBXS0NvbnRlbnRWaWV3IChJbnRlcm5hbCkgPFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVn
YXRlSW50ZXJuYWw+CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS0NvbnRlbnRWaWV3IHsKKyAg
ICBSZXRhaW5QdHI8V0tQcm9jZXNzR3JvdXA+IF9wcm9jZXNzR3JvdXA7CisgICAgUmV0YWluUHRy
PFdLQnJvd3NpbmdDb250ZXh0R3JvdXA+IF9icm93c2luZ0NvbnRleHRHcm91cDsKKyAgICBPd25Q
dHI8UGFnZUNsaWVudEltcGw+IF9wYWdlQ2xpZW50OworICAgIFJlZlB0cjxXZWJQYWdlUHJveHk+
IF9wYWdlOworCisgICAgUmV0YWluUHRyPFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcj4gX2Jy
b3dzaW5nQ29udGV4dENvbnRyb2xsZXI7CisKKyAgICBSZXRhaW5QdHI8VUlWaWV3PiBfcm9vdENv
bnRlbnRWaWV3OworICAgIFJldGFpblB0cjxXS0ludGVyYWN0aW9uVmlldz4gX2ludGVyYWN0aW9u
VmlldzsKK30KKworLSAoaWQpaW5pdFdpdGhDb2RlcjooTlNDb2RlciAqKWNvZGVyCit7CisgICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aENvZGVyOmNvZGVyXSkpCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICBbc2VsZiBfY29tbW9uSW5pdFdpdGhQcm9jZXNzR3JvdXA6bmlsIGJyb3dz
aW5nQ29udGV4dEdyb3VwOm5pbF07CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGlkKWluaXRX
aXRoRnJhbWU6KENHUmVjdClmcmFtZQoreworICAgIHJldHVybiBbc2VsZiBpbml0V2l0aEZyYW1l
OmZyYW1lIHByb2Nlc3NHcm91cDpuaWwgYnJvd3NpbmdDb250ZXh0R3JvdXA6bmlsXTsKK30KKwor
LSAoaWQpaW5pdFdpdGhGcmFtZTooQ0dSZWN0KWZyYW1lIHByb2Nlc3NHcm91cDooV0tQcm9jZXNz
R3JvdXAgKilwcm9jZXNzR3JvdXAgYnJvd3NpbmdDb250ZXh0R3JvdXA6KFdLQnJvd3NpbmdDb250
ZXh0R3JvdXAgKilicm93c2luZ0NvbnRleHRHcm91cAoreworICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdFdpdGhGcmFtZTpmcmFtZV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgW3Nl
bGYgX2NvbW1vbkluaXRXaXRoUHJvY2Vzc0dyb3VwOnByb2Nlc3NHcm91cCBicm93c2luZ0NvbnRl
eHRHcm91cDpicm93c2luZ0NvbnRleHRHcm91cF07CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0g
KHZvaWQpZGVhbGxvYworeworICAgIF9wYWdlLT5jbG9zZSgpOworCisgICAgV2ViQ29udGV4dDo6
c3RhdGlzdGljcygpLndrVmlld0NvdW50LS07CisKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisK
Ky0gKHZvaWQpd2lsbE1vdmVUb1dpbmRvdzooVUlXaW5kb3cgKiluZXdXaW5kb3cKK3sKKyAgICBO
U05vdGlmaWNhdGlvbkNlbnRlciAqZGVmYXVsdENlbnRlciA9IFtOU05vdGlmaWNhdGlvbkNlbnRl
ciBkZWZhdWx0Q2VudGVyXTsKKyAgICBVSVdpbmRvdyAqd2luZG93ID0gc2VsZi53aW5kb3c7CisK
KyAgICBpZiAod2luZG93KQorICAgICAgICBbZGVmYXVsdENlbnRlciByZW1vdmVPYnNlcnZlcjpz
ZWxmIG5hbWU6VUlXaW5kb3dEaWRNb3ZlVG9TY3JlZW5Ob3RpZmljYXRpb24gb2JqZWN0OndpbmRv
d107CisKKyAgICBpZiAobmV3V2luZG93KQorICAgICAgICBbZGVmYXVsdENlbnRlciBhZGRPYnNl
cnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihfd2luZG93RGlkTW92ZVRvU2NyZWVuTm90aWZp
Y2F0aW9uOikgbmFtZTpVSVdpbmRvd0RpZE1vdmVUb1NjcmVlbk5vdGlmaWNhdGlvbiBvYmplY3Q6
bmV3V2luZG93XTsKK30KKworLSAodm9pZClkaWRNb3ZlVG9XaW5kb3cKK3sKKyAgICBpZiAoc2Vs
Zi53aW5kb3cpCisgICAgICAgIFtzZWxmIF91cGRhdGVGb3JTY3JlZW46c2VsZi53aW5kb3cuc2Ny
ZWVuXTsKKyAgICBfcGFnZS0+dmlld1N0YXRlRGlkQ2hhbmdlKFZpZXdTdGF0ZTo6SXNJbldpbmRv
dyk7Cit9CisKKy0gKFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAqKWJyb3dzaW5nQ29udGV4
dENvbnRyb2xsZXIKK3sKKyAgICByZXR1cm4gX2Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIuZ2V0
KCk7Cit9CisKKy0gKFdLQ29udGVudFR5cGUpY29udGVudFR5cGUKK3sKKyAgICBpZiAoX3BhZ2Ut
Pm1haW5GcmFtZSgpLT5taW1lVHlwZSgpID09ICJ0ZXh0L3BsYWluIikKKyAgICAgICAgcmV0dXJu
IFdLQ29udGVudFR5cGU6OlBsYWluVGV4dDsKKyAgICBlbHNlIGlmIChfcGFnZS0+bWFpbkZyYW1l
KCktPmlzRGlzcGxheWluZ1N0YW5kYWxvbmVJbWFnZURvY3VtZW50KCkpCisgICAgICAgIHJldHVy
biBXS0NvbnRlbnRUeXBlOjpJbWFnZTsKKyAgICByZXR1cm4gV0tDb250ZW50VHlwZTo6U3RhbmRh
cmQ7Cit9CisKKy0gKHZvaWQpc2V0TWluaW11bVNpemU6KENHU2l6ZSlzaXplCit7CisgICAgX3Bh
Z2UtPmRyYXdpbmdBcmVhKCktPnNldFNpemUoSW50U2l6ZShzaXplKSwgSW50U2l6ZSgpLCBJbnRT
aXplKCkpOworfQorCistICh2b2lkKXNldFZpZXdwb3J0U2l6ZTooQ0dTaXplKXNpemUKK3sKKyAg
ICBfcGFnZS0+c2V0Rml4ZWRMYXlvdXRTaXplKEludFNpemUoc2l6ZSkpOworfQorCistICh2b2lk
KWRpZFNjcm9sbFRvOihDR1BvaW50KWNvbnRlbnRPZmZzZXQKK3sKKyAgICBfcGFnZS0+ZGlkRmlu
aXNoU2Nyb2xsaW5nKGNvbnRlbnRPZmZzZXQpOworfQorCistICh2b2lkKWRpZFpvb21Ub1NjYWxl
OihDR0Zsb2F0KXNjYWxlCit7CisgICAgX3BhZ2UtPmRpZEZpbmlzaFpvb21pbmcoc2NhbGUpOwor
fQorCitzdGF0aWMgdm9pZCBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0KFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS1NlY3VyaXR5T3JpZ2luUmVm
IG9yaWdpbiwgV0tHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UmVmIHBlcm1pc3Npb25SZXF1
ZXN0LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIFdLQ29udGVudFZpZXcgKnZpZXcg
PSByZWludGVycHJldF9jYXN0PFdLQ29udGVudFZpZXcgKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xp
ZW50SW5mbykpOworICAgIEFTU0VSVChbdmlldyBpc0tpbmRPZkNsYXNzOltXS0NvbnRlbnRWaWV3
IGNsYXNzXV0pOworCisgICAgW1t2aWV3LT5fcHJvY2Vzc0dyb3VwIF9nZW9sb2NhdGlvblByb3Zp
ZGVyXSBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblJlcXVlc3RGcm9tT3JpZ2luOm9yaWdpbiBm
cmFtZTpmcmFtZSByZXF1ZXN0OnBlcm1pc3Npb25SZXF1ZXN0IHdpbmRvdzpbdmlldyB3aW5kb3dd
XTsKK30KKworLSAodm9pZClfY29tbW9uSW5pdFdpdGhQcm9jZXNzR3JvdXA6KFdLUHJvY2Vzc0dy
b3VwICopcHJvY2Vzc0dyb3VwIGJyb3dzaW5nQ29udGV4dEdyb3VwOihXS0Jyb3dzaW5nQ29udGV4
dEdyb3VwICopYnJvd3NpbmdDb250ZXh0R3JvdXAKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgbm90IGJlIG5lY2Vzc2FyeSwgZmluZCB3aHkgaGl0IHRlc3RpbmcgZG9lcyBub3Qgd29yayBv
dGhlcndpc2UuCisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzEyMjg3MzYzPgorICAgIHNlbGYuYmFj
a2dyb3VuZENvbG9yID0gW1VJQ29sb3IgYmxhY2tDb2xvcl07CisKKyAgICBJbml0V2ViQ29yZVRo
cmVhZFN5c3RlbUludGVyZmFjZSgpOworICAgIEluaXRXZWJDb3JlU3lzdGVtSW50ZXJmYWNlKCk7
CisgICAgUnVuTG9vcDo6aW5pdGlhbGl6ZU1haW5SdW5Mb29wKCk7CisKKyAgICBfcHJvY2Vzc0dy
b3VwID0gcHJvY2Vzc0dyb3VwID8gcHJvY2Vzc0dyb3VwIDogYWRvcHROUyhbW1dLUHJvY2Vzc0dy
b3VwIGFsbG9jXSBpbml0XSk7CisgICAgX2Jyb3dzaW5nQ29udGV4dEdyb3VwID0gYnJvd3NpbmdD
b250ZXh0R3JvdXAgPyBicm93c2luZ0NvbnRleHRHcm91cCA6IGFkb3B0TlMoW1tXS0Jyb3dzaW5n
Q29udGV4dEdyb3VwIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6bmlsXSk7CisgICAgX3BhZ2VD
bGllbnQgPSBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlKHNlbGYpOworICAgIFdlYkNvbnRleHQqIHBy
b2Nlc3NDb250ZXh0ID0gdG9JbXBsKFtfcHJvY2Vzc0dyb3VwIF9jb250ZXh0UmVmXSk7CisgICAg
X3BhZ2UgPSBwcm9jZXNzQ29udGV4dC0+Y3JlYXRlV2ViUGFnZShfcGFnZUNsaWVudC5nZXQoKSwg
dG9JbXBsKFtfYnJvd3NpbmdDb250ZXh0R3JvdXAgX3BhZ2VHcm91cFJlZl0pKTsKKyAgICBfcGFn
ZS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKKyAgICBfcGFnZS0+c2V0SW50cmluc2ljRGV2aWNlU2Nh
bGVGYWN0b3IoW1VJU2NyZWVuIG1haW5TY3JlZW5dLnNjYWxlKTsKKyAgICBfcGFnZS0+c2V0VXNl
Rml4ZWRMYXlvdXQodHJ1ZSk7CisKKyAgICBXS1BhZ2VVSUNsaWVudCBwYWdlVUlDbGllbnQgPSB7
CisgICAgICAgIGtXS1BhZ2VVSUNsaWVudEN1cnJlbnRWZXJzaW9uLAorICAgICAgICBzZWxmLAor
ICAgICAgICAwLCAvLyBjcmVhdGVOZXdQYWdlX2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKKyAgICAg
ICAgMCwgLy8gc2hvd1BhZ2UKKyAgICAgICAgMCwgLy8gY2xvc2VPdGhlclBhZ2UKKyAgICAgICAg
MCwgLy8gdGFrZUZvY3VzCisgICAgICAgIDAsIC8vIGZvY3VzCisgICAgICAgIDAsIC8vIHVuZm9j
dXMKKyAgICAgICAgMCwgLy8gcnVuSmF2YVNjcmlwdEFsZXJ0CisgICAgICAgIDAsIC8vIHJ1bkph
dmFTY3JpcHRDb25maXJtCisgICAgICAgIDAsIC8vIHJ1bkphdmFTY3JpcHRQcm9tcHQKKyAgICAg
ICAgMCwgLy8gc2V0U3RhdHVzVGV4dAorICAgICAgICAwLCAvLyBtb3VzZURpZE1vdmVPdmVyRWxl
bWVudF9kZXByZWNhdGVkRm9yVXNlV2l0aFYwCisgICAgICAgIDAsIC8vIG1pc3NpbmdQbHVnaW5C
dXR0b25DbGlja2VkCisgICAgICAgIDAsIC8vIGRpZE5vdEhhbmRsZUtleUV2ZW50CisgICAgICAg
IDAsIC8vIGRpZE5vdEhhbmRsZVdoZWVsRXZlbnQKKyAgICAgICAgMCwgLy8gdG9vbGJhcnNBcmVW
aXNpYmxlCisgICAgICAgIDAsIC8vIHNldFRvb2xiYXJzQXJlVmlzaWJsZQorICAgICAgICAwLCAv
LyBtZW51QmFySXNWaXNpYmxlCisgICAgICAgIDAsIC8vIHNldE1lbnVCYXJJc1Zpc2libGUKKyAg
ICAgICAgMCwgLy8gc3RhdHVzQmFySXNWaXNpYmxlCisgICAgICAgIDAsIC8vIHNldFN0YXR1c0Jh
cklzVmlzaWJsZQorICAgICAgICAwLCAvLyBpc1Jlc2l6YWJsZQorICAgICAgICAwLCAvLyBzZXRJ
c1Jlc2l6YWJsZQorICAgICAgICAwLCAvLyBnZXRXaW5kb3dGcmFtZU90aGVyUGFnZQorICAgICAg
ICAwLCAvLyBzZXRXaW5kb3dGcmFtZU90aGVyUGFnZQorICAgICAgICAwLCAvLyBydW5CZWZvcmVV
bmxvYWRDb25maXJtUGFuZWwKKyAgICAgICAgMCwgLy8gZGlkRHJhdworICAgICAgICAwLCAvLyBw
YWdlRGlkU2Nyb2xsCisgICAgICAgIDAsIC8vIGV4Y2VlZGVkRGF0YWJhc2VRdW90YQorICAgICAg
ICAwLCAvLyBydW5PcGVuUGFuZWwKKyAgICAgICAgZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdCwKKyAgICAgICAgMCwgLy8gaGVhZGVySGVpZ2h0CisgICAgICAgIDAs
IC8vIGZvb3RlckhlaWdodAorICAgICAgICAwLCAvLyBkcmF3SGVhZGVyCisgICAgICAgIDAsIC8v
IGRyYXdGb290ZXIKKyAgICAgICAgMCwgLy8gcHJpbnRGcmFtZQorICAgICAgICAwLCAvLyBydW5N
b2RhbAorICAgICAgICAwLCAvLyBkaWRDb21wbGV0ZVJ1YmJlckJhbmRGb3JNYWluRnJhbWUKKyAg
ICAgICAgMCwgLy8gc2F2ZURhdGFUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcgorICAgICAgICAwLCAv
LyBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0CisgICAgICAgIDAsIC8vIGNyZWF0ZU90aGVyUGFn
ZQorICAgICAgICAwLCAvLyBtb3VzZURpZE1vdmVPdmVyRWxlbWVudAorICAgICAgICAwLCAvLyBk
ZWNpZGVQb2xpY3lGb3JOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdAorICAgICAgICAwLCAv
LyB1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQKKyAgICAgICAgMCwgLy8gc2hvd0NvbG9y
UGlja2VyCisgICAgICAgIDAsIC8vIGhpZGVDb2xvclBpY2tlcgorICAgICAgICAwLCAvLyB1bmF2
YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQKKyAgICB9OworICAgIFdLUGFnZVNldFBhZ2VVSUNs
aWVudCh0b0FQSShfcGFnZS5nZXQoKSksICZwYWdlVUlDbGllbnQpOworCisgICAgX2Jyb3dzaW5n
Q29udGV4dENvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVy
IGFsbG9jXSBfaW5pdFdpdGhQYWdlUmVmOnRvQVBJKF9wYWdlLmdldCgpKV0pOworICAgIFtfYnJv
d3NpbmdDb250ZXh0Q29udHJvbGxlciBzZXRMb2FkRGVsZWdhdGVJbnRlcm5hbDpzZWxmXTsKKwor
ICAgIFdlYkNvbnRleHQ6OnN0YXRpc3RpY3MoKS53a1ZpZXdDb3VudCsrOworCisgICAgX3Jvb3RD
b250ZW50VmlldyA9IGFkb3B0TlMoW1tVSVZpZXcgYWxsb2NdIGluaXRdKTsKKyAgICBbW19yb290
Q29udGVudFZpZXcgbGF5ZXJdIHNldE1hc2tzVG9Cb3VuZHM6Tk9dOworICAgIFtfcm9vdENvbnRl
bnRWaWV3IHNldFVzZXJJbnRlcmFjdGlvbkVuYWJsZWQ6Tk9dOworCisgICAgW3NlbGYgYWRkU3Vi
dmlldzpfcm9vdENvbnRlbnRWaWV3LmdldCgpXTsKKworICAgIF9pbnRlcmFjdGlvblZpZXcgPSBh
ZG9wdE5TKFtbV0tJbnRlcmFjdGlvblZpZXcgYWxsb2NdIGluaXRdKTsKKyAgICBbX2ludGVyYWN0
aW9uVmlldyBzZXRQYWdlOl9wYWdlXTsKKyAgICBbc2VsZiBhZGRTdWJ2aWV3Ol9pbnRlcmFjdGlv
blZpZXcuZ2V0KCldOworfQorCistICh2b2lkKV93aW5kb3dEaWRNb3ZlVG9TY3JlZW5Ob3RpZmlj
YXRpb246KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgQVNTRVJUKG5vdGlm
aWNhdGlvbi5vYmplY3QgPT0gc2VsZi53aW5kb3cpOworCisgICAgVUlTY3JlZW4gKnNjcmVlbiA9
IG5vdGlmaWNhdGlvbi51c2VySW5mb1tVSVdpbmRvd05ld1NjcmVlblVzZXJJbmZvS2V5XTsKKyAg
ICBbc2VsZiBfdXBkYXRlRm9yU2NyZWVuOnNjcmVlbl07Cit9CisKKy0gKHZvaWQpX3VwZGF0ZUZv
clNjcmVlbjooVUlTY3JlZW4gKilzY3JlZW4KK3sKKyAgICBBU1NFUlQoc2NyZWVuKTsKKyAgICBf
cGFnZS0+c2V0SW50cmluc2ljRGV2aWNlU2NhbGVGYWN0b3Ioc2NyZWVuLnNjYWxlKTsKK30KKwor
LSAodm9pZClfZGlkQ2hhbmdlVmlld3BvcnRBcmd1bWVudHM6KGNvbnN0IFdlYkNvcmU6OlZpZXdw
b3J0QXJndW1lbnRzJilhcmd1bWVudHMKK3sKKyAgICBpZiAoW19kZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGNvbnRlbnRWaWV3OmRpZENoYW5nZVZpZXdwb3J0QXJndW1lbnRz
U2l6ZTppbml0aWFsU2NhbGU6bWluaW11bVNjYWxlOm1heGltdW1TY2FsZTphbGxvd3NVc2VyU2Nh
bGluZzopXSkKKyAgICAgICAgW19kZWxlZ2F0ZSBjb250ZW50VmlldzpzZWxmCitkaWRDaGFuZ2VW
aWV3cG9ydEFyZ3VtZW50c1NpemU6Q0dTaXplTWFrZShhcmd1bWVudHMud2lkdGgsIGFyZ3VtZW50
cy5oZWlnaHQpCisgICAgICAgICAgICAgICAgICBpbml0aWFsU2NhbGU6YXJndW1lbnRzLnpvb20K
KyAgICAgICAgICAgICAgICAgIG1pbmltdW1TY2FsZTphcmd1bWVudHMubWluWm9vbQorICAgICAg
ICAgICAgICAgICAgbWF4aW11bVNjYWxlOmFyZ3VtZW50cy5tYXhab29tCisgICAgICAgICAgICAg
YWxsb3dzVXNlclNjYWxpbmc6YXJndW1lbnRzLnVzZXJab29tXTsKK30KKworI3ByYWdtYSBtYXJr
IFBhZ2VDbGllbnRJbXBsIG1ldGhvZHMKKworLSAoc3RkOjp1bmlxdWVfcHRyPERyYXdpbmdBcmVh
UHJveHk+KV9jcmVhdGVEcmF3aW5nQXJlYVByb3h5Cit7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91
bmlxdWU8UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eT4oX3BhZ2UuZ2V0KCkpOworfQor
CistICh2b2lkKV9wcm9jZXNzRGlkQ3Jhc2gKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50Lgor
fQorCistICh2b2lkKV9kaWRSZWxhdW5jaFByb2Nlc3MKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVt
ZW50LgorfQorCistICh2b2lkKWJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJEaWRDb21taXRMb2Fk
OihXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKilzZW5kZXIKK3sKKyAgICBBU1NFUlQoc2Vu
ZGVyID09IF9icm93c2luZ0NvbnRleHRDb250cm9sbGVyKTsKKyAgICBpZiAoW19kZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNvbnRlbnRWaWV3ZGlkQ29tbWl0TG9hZEZvck1h
aW5GcmFtZTopXSkKKyAgICAgICAgW19kZWxlZ2F0ZSBjb250ZW50Vmlld2RpZENvbW1pdExvYWRG
b3JNYWluRnJhbWU6c2VsZl07Cit9CisKKy0gKHZvaWQpX2RpZENoYW5nZUNvbnRlbnRTaXplOihD
R1NpemUpY29udGVudHNTaXplCit7CisgICAgW3NlbGYgc2V0Qm91bmRzOntDR1BvaW50WmVybywg
Y29udGVudHNTaXplfV07CisgICAgW19pbnRlcmFjdGlvblZpZXcgc2V0RnJhbWU6Q0dSZWN0TWFr
ZSgwLCAwLCBjb250ZW50c1NpemUud2lkdGgsIGNvbnRlbnRzU2l6ZS5oZWlnaHQpXTsKKyAgICBb
X3Jvb3RDb250ZW50VmlldyBzZXRGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIGNvbnRlbnRzU2l6ZS53
aWR0aCwgY29udGVudHNTaXplLmhlaWdodCldOworCisgICAgaWYgKFtfZGVsZWdhdGUgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihjb250ZW50Vmlldzpjb250ZW50c1NpemVEaWRDaGFuZ2U6
KV0pCisgICAgICAgIFtfZGVsZWdhdGUgY29udGVudFZpZXc6c2VsZiBjb250ZW50c1NpemVEaWRD
aGFuZ2U6Y29udGVudHNTaXplXTsKK30KKworLSAodm9pZClfbWFpbkRvY3VtZW50RGlkUmVjZWl2
ZU1vYmlsZURvY1R5cGUKK3sKKyAgICBpZiAoW19kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKGNvbnRlbnRWaWV3RGlkUmVjZWl2ZU1vYmlsZURvY1R5cGU6KV0pCisgICAgICAg
IFtfZGVsZWdhdGUgY29udGVudFZpZXdEaWRSZWNlaXZlTW9iaWxlRG9jVHlwZTpzZWxmXTsKKwor
fQorCistICh2b2lkKV9kaWRHZXRUYXBIaWdobGlnaHRGb3JSZXF1ZXN0Oih1aW50NjRfdClyZXF1
ZXN0SUQgY29sb3I6KGNvbnN0IENvbG9yJiljb2xvciBxdWFkczooY29uc3QgVmVjdG9yPEZsb2F0
UXVhZD4mKWhpZ2hsaWdodGVkUXVhZHMgdG9wTGVmdFJhZGl1czooY29uc3QgSW50U2l6ZSYpdG9w
TGVmdFJhZGl1cyB0b3BSaWdodFJhZGl1czooY29uc3QgSW50U2l6ZSYpdG9wUmlnaHRSYWRpdXMg
Ym90dG9tTGVmdFJhZGl1czooY29uc3QgSW50U2l6ZSYpYm90dG9tTGVmdFJhZGl1cyBib3R0b21S
aWdodFJhZGl1czooY29uc3QgSW50U2l6ZSYpYm90dG9tUmlnaHRSYWRpdXMKK3sKKyAgICBbX2lu
dGVyYWN0aW9uVmlldyBfZGlkR2V0VGFwSGlnaGxpZ2h0Rm9yUmVxdWVzdDpyZXF1ZXN0SUQgY29s
b3I6Y29sb3IgcXVhZHM6aGlnaGxpZ2h0ZWRRdWFkcyB0b3BMZWZ0UmFkaXVzOnRvcExlZnRSYWRp
dXMgdG9wUmlnaHRSYWRpdXM6dG9wUmlnaHRSYWRpdXMgYm90dG9tTGVmdFJhZGl1czpib3R0b21M
ZWZ0UmFkaXVzIGJvdHRvbVJpZ2h0UmFkaXVzOmJvdHRvbVJpZ2h0UmFkaXVzXTsKK30KKworLSAo
dm9pZClfc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcjooQ0FMYXllciAqKXJvb3RM
YXllcgoreworICAgIFtbX3Jvb3RDb250ZW50VmlldyBsYXllcl0gc2V0U3VibGF5ZXJzOkBbcm9v
dExheWVyXV07Cit9CisKKy8vIEZJWE1FOiBjaGFuZ2UgdGhlIG5hbWUuIExlYXZlIGl0IGZvciBu
b3cgdG8gbWFrZSBpdCBlYXNpZXIgdG8gcmVmZXIgdG8gdGhlIFVJS2l0IGltcGxlbWVudGF0aW9u
LgorLSAodm9pZClfc3RhcnRBc3Npc3RpbmdOb2RlCit7CisgICAgW19pbnRlcmFjdGlvblZpZXcg
X3N0YXJ0QXNzaXN0aW5nTm9kZV07Cit9CisKKy0gKHZvaWQpX3N0b3BBc3Npc3RpbmdOb2RlCit7
CisgICAgW19pbnRlcmFjdGlvblZpZXcgX3N0b3BBc3Npc3RpbmdOb2RlXTsKK30KKworLSAodm9p
ZClfc2VsZWN0aW9uQ2hhbmdlZAoreworICAgIFtfaW50ZXJhY3Rpb25WaWV3IF9zZWxlY3Rpb25D
aGFuZ2VkXTsKK30KKworLSAoQk9PTClfaW50ZXJwcmV0S2V5RXZlbnQ6KFdlYklPU0V2ZW50ICop
dGhlRXZlbnQgaXNDaGFyRXZlbnQ6KEJPT0wpaXNDaGFyRXZlbnQKK3sKKyAgICByZXR1cm4gW19p
bnRlcmFjdGlvblZpZXcgX2ludGVycHJldEtleUV2ZW50OnRoZUV2ZW50IGlzQ2hhckV2ZW50Omlz
Q2hhckV2ZW50XTsKK30KKworQGVuZApJbmRleDogVUlQcm9jZXNzL0FQSS9pb3MvV0tDb250ZW50
Vmlld0ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVUlQcm9jZXNzL0FQSS9pb3MvV0tDb250ZW50
Vmlld0ludGVybmFsLmgJKHJldmlzaW9uIDApCisrKyBVSVByb2Nlc3MvQVBJL2lvcy9XS0NvbnRl
bnRWaWV3SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2ltcG9ydCAiV0tDb250ZW50Vmlldy5oIgorCisjaW1wb3J0IDx3dGYvRm9yd2FyZC5o
PgorI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBD
b2xvcjsKK2NsYXNzIEZsb2F0UXVhZDsKK2NsYXNzIEludFNpemU7CitzdHJ1Y3QgVmlld3BvcnRB
cmd1bWVudHM7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgRHJhd2luZ0FyZWFQcm94
eTsKK2NsYXNzIExheWVyVHJlZUNvbnRleHQ7Cit9CisKK0BjbGFzcyBXZWJJT1NFdmVudDsKKwor
QGludGVyZmFjZSBXS0NvbnRlbnRWaWV3ICgpCisKKy0gKHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6
OkRyYXdpbmdBcmVhUHJveHk+KV9jcmVhdGVEcmF3aW5nQXJlYVByb3h5OworLSAodm9pZClfcHJv
Y2Vzc0RpZENyYXNoOworLSAodm9pZClfZGlkUmVsYXVuY2hQcm9jZXNzOworLSAodm9pZClfZGlk
Q2hhbmdlQ29udGVudFNpemU6KENHU2l6ZSljb250ZW50c1NpemU7CistICh2b2lkKV9zZXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyOihDQUxheWVyICopcm9vdExheWVyOworCistICh2
b2lkKV9tYWluRG9jdW1lbnREaWRSZWNlaXZlTW9iaWxlRG9jVHlwZTsKKworLSAodm9pZClfZGlk
R2V0VGFwSGlnaGxpZ2h0Rm9yUmVxdWVzdDoodWludDY0X3QpcmVxdWVzdElEIGNvbG9yOihjb25z
dCBXZWJDb3JlOjpDb2xvciYpY29sb3IgcXVhZHM6KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9h
dFF1YWQ+JiloaWdobGlnaHRlZFF1YWRzIHRvcExlZnRSYWRpdXM6KGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmKXRvcExlZnRSYWRpdXMgdG9wUmlnaHRSYWRpdXM6KGNvbnN0IFdlYkNvcmU6OkludFNp
emUmKXRvcFJpZ2h0UmFkaXVzIGJvdHRvbUxlZnRSYWRpdXM6KGNvbnN0IFdlYkNvcmU6OkludFNp
emUmKWJvdHRvbUxlZnRSYWRpdXMgYm90dG9tUmlnaHRSYWRpdXM6KGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmKWJvdHRvbVJpZ2h0UmFkaXVzOworCistICh2b2lkKV9zdGFydEFzc2lzdGluZ05vZGU7
CistICh2b2lkKV9zdG9wQXNzaXN0aW5nTm9kZTsKKy0gKHZvaWQpX3NlbGVjdGlvbkNoYW5nZWQ7
CistIChCT09MKV9pbnRlcnByZXRLZXlFdmVudDooV2ViSU9TRXZlbnQgKil0aGVFdmVudCBpc0No
YXJFdmVudDooQk9PTClpc0NoYXJFdmVudDsKKy0gKHZvaWQpX2RpZENoYW5nZVZpZXdwb3J0QXJn
dW1lbnRzOihjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYpdmlld3BvcnRBcmd1bWVu
dHM7CisKK0BlbmQKSW5kZXg6IFVJUHJvY2Vzcy9BUEkvaW9zL1dLR2VvbG9jYXRpb25Qcm92aWRl
cklPUy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFVJUHJvY2Vzcy9BUEkvaW9zL1dLR2VvbG9jYXRpb25Qcm92
aWRlcklPUy5oCShyZXZpc2lvbiAwKQorKysgVUlQcm9jZXNzL0FQSS9pb3MvV0tHZW9sb2NhdGlv
blByb3ZpZGVySU9TLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vTlNPYmplY3QuaD4KKyNpbXBvcnQgPFdlYktpdDIvV0tC
YXNlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViQ29udGV4dDsKK30KKworQGNs
YXNzIFVJV2luZG93OworCitAaW50ZXJmYWNlIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUyA6IE5T
T2JqZWN0CistKGlkKWluaXRXaXRoQ29udGV4dDooV2ViS2l0OjpXZWJDb250ZXh0Kiljb250ZXh0
OworLSh2b2lkKWRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUmVxdWVzdEZyb21PcmlnaW46KFdL
U2VjdXJpdHlPcmlnaW5SZWYpb3JpZ2luIGZyYW1lOihXS0ZyYW1lUmVmKWZyYW1lIHJlcXVlc3Q6
KFdLR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFJlZilwZXJtaXNzaW9uUmVxdWVzdCB3aW5k
b3c6KFVJV2luZG93Kil3aW5kb3c7CitAZW5kCkluZGV4OiBVSVByb2Nlc3MvQVBJL2lvcy9XS0dl
b2xvY2F0aW9uUHJvdmlkZXJJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVUlQcm9jZXNzL0FQSS9pb3Mv
V0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLm1tCShyZXZpc2lvbiAwKQorKysgVUlQcm9jZXNzL0FQ
SS9pb3MvV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXS0dl
b2xvY2F0aW9uUHJvdmlkZXJJT1MuaCIKKworI2ltcG9ydCAiR2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdFByb3h5LmgiCisjaW1wb3J0ICJXZWJDb250ZXh0LmgiCisjaW1wb3J0ICJXZWJHZW9s
b2NhdGlvbk1hbmFnZXJQcm94eS5oIgorI2ltcG9ydCAiV2ViU2VjdXJpdHlPcmlnaW4uaCIKKyNp
bXBvcnQgPFdlYkdlb2xvY2F0aW9uUG9zaXRpb24uaD4KKyNpbXBvcnQgPFdlYkNvcmUvR2VvbG9j
YXRpb25Qb3NpdGlvbi5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYkdlb2xvY2F0aW9uQ29yZUxvY2F0
aW9uUHJvdmlkZXIuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJVSURlbGVnYXRlUHJpdmF0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0Mi9XS0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QuaD4KKyNpbXBv
cnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvUGFzc1JlZlB0ci5oPgorI2ltcG9y
dCA8d3RmL1JlZlB0ci5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3Rm
L0hhc2hTZXQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworQGludGVyZmFjZSBXS0dl
b2xvY2F0aW9uUHJvdmlkZXJJT1MgKCkKKy0odm9pZClfc3RhcnRVcGRhdGluZzsKKy0odm9pZClf
c3RvcFVwZGF0aW5nOworLSh2b2lkKV9zZXRFbmFibGVIaWdoQWNjdXJhY3k6KEJPT0wpZW5hYmxl
OworQGVuZAorCitAaW50ZXJmYWNlIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUyAoV2ViR2VvbG9j
YXRpb25Db3JlTG9jYXRpb25VcGRhdGVMaXN0ZW5lcikgPFdlYkdlb2xvY2F0aW9uQ29yZUxvY2F0
aW9uVXBkYXRlTGlzdGVuZXI+CitAZW5kCisKK0BpbnRlcmZhY2UgV0tXZWJBbGxvd0RlbnlQb2xp
Y3lMaXN0ZW5lciA6IE5TT2JqZWN0PFdlYkFsbG93RGVueVBvbGljeUxpc3RlbmVyPgorLSAoaWQp
aW5pdFdpdGhQcm92aWRlcjooV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TKilwcm92aWRlciBwZXJt
aXNzaW9uUmVxdWVzdFByb3h5OihQYXNzUmVmUHRyPEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVl
c3RQcm94eT4pcGVybWlzc2lvblJlcXVlc3RQcm94eTsKKy0gKHZvaWQpZGVueU9ubHlUaGlzUmVx
dWVzdCBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVDsKK0BlbmQKKworbmFtZXNwYWNlIFdlYktpdCB7
Cit2b2lkIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUmVxdWVzdEZyb21PcmlnaW4oV2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZywgaWQ8V2ViQWxsb3dE
ZW55UG9saWN5TGlzdGVuZXI+LCBVSVdpbmRvdyopOworfTsKKworc3RhdGljIHZvaWQgc3RhcnRV
cGRhdGluZ0NhbGxiYWNrKFdLR2VvbG9jYXRpb25NYW5hZ2VyUmVmIGdlb2xvY2F0aW9uTWFuYWdl
ciwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJ
T1MgKmdlb2xvY2F0aW9uUHJvdmlkZXIgPSByZWludGVycHJldF9jYXN0PFdLR2VvbG9jYXRpb25Q
cm92aWRlcklPUyo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKKyAgICBBU1NFUlQo
W2dlb2xvY2F0aW9uUHJvdmlkZXIgaXNLaW5kT2ZDbGFzczpbV0tHZW9sb2NhdGlvblByb3ZpZGVy
SU9TIGNsYXNzXV0pOworICAgIFtnZW9sb2NhdGlvblByb3ZpZGVyIF9zdGFydFVwZGF0aW5nXTsK
K30KKworc3RhdGljIHZvaWQgc3RvcFVwZGF0aW5nQ2FsbGJhY2soV0tHZW9sb2NhdGlvbk1hbmFn
ZXJSZWYgZ2VvbG9jYXRpb25NYW5hZ2VyLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAg
IFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUyAqZ2VvbG9jYXRpb25Qcm92aWRlciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8V0tHZW9sb2NhdGlvblByb3ZpZGVySU9TKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xp
ZW50SW5mbykpOworICAgIEFTU0VSVChbZ2VvbG9jYXRpb25Qcm92aWRlciBpc0tpbmRPZkNsYXNz
OltXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MgY2xhc3NdXSk7CisgICAgW2dlb2xvY2F0aW9uUHJv
dmlkZXIgX3N0b3BVcGRhdGluZ107Cit9CisKK3N0YXRpYyB2b2lkIHNldEVuYWJsZUhpZ2hBY2N1
cmFjeShXS0dlb2xvY2F0aW9uTWFuYWdlclJlZiBnZW9sb2NhdGlvbk1hbmFnZXIsIGJvb2wgZW5h
YmxlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIFdLR2VvbG9jYXRpb25Qcm92aWRl
cklPUyAqZ2VvbG9jYXRpb25Qcm92aWRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8V0tHZW9sb2NhdGlv
blByb3ZpZGVySU9TKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOworICAgIEFTU0VS
VChbZ2VvbG9jYXRpb25Qcm92aWRlciBpc0tpbmRPZkNsYXNzOltXS0dlb2xvY2F0aW9uUHJvdmlk
ZXJJT1MgY2xhc3NdXSk7CisgICAgW2dlb2xvY2F0aW9uUHJvdmlkZXIgX3NldEVuYWJsZUhpZ2hB
Y2N1cmFjeTplbmFibGVdOworfQorCitzdHJ1Y3QgR2VvbG9jYXRpb25SZXF1ZXN0RGF0YSB7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiBvcmlnaW47CisgICAgUmVmUHRyPFdl
YkZyYW1lUHJveHk+IGZyYW1lOworICAgIFJlZlB0cjxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0UHJveHk+IHBlcm1pc3Npb25SZXF1ZXN0OworICAgIFJldGFpblB0cjxVSVdpbmRvdz4gd2lu
ZG93OworfTsKKworQGltcGxlbWVudGF0aW9uIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUyB7Cisg
ICAgUmVmUHRyPFdlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5PiBfZ2VvbG9jYXRpb25NYW5hZ2Vy
OworICAgIFJldGFpblB0cjxXZWJHZW9sb2NhdGlvbkNvcmVMb2NhdGlvblByb3ZpZGVyPiBfY29y
ZUxvY2F0aW9uUHJvdmlkZXI7CisgICAgQk9PTCBfaXNXZWJDb3JlR2VvbG9jYXRpb25BY3RpdmU7
CisgICAgUmVmUHRyPFdlYkdlb2xvY2F0aW9uUG9zaXRpb24+IF9sYXN0QWN0aXZlUG9zaXRpb247
CisgICAgVmVjdG9yPEdlb2xvY2F0aW9uUmVxdWVzdERhdGE+IF9yZXF1ZXN0c1dhaXRpbmdGb3JD
b3JlTG9jYXRpb25TdGFydDsKKyAgICBIYXNoU2V0PHZvaWQqPiBfcmVxdWVzdHNJbldhcm1VcDsK
K30KKworLSh2b2lkKV9zdG9wVXBkYXRpbmdJZlBvc3NpYmxlCit7CisgICAgaWYgKF9pc1dlYkNv
cmVHZW9sb2NhdGlvbkFjdGl2ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKF9yZXF1ZXN0
c1dhaXRpbmdGb3JDb3JlTG9jYXRpb25TdGFydC5pc0VtcHR5KCkgJiYgX3JlcXVlc3RzSW5XYXJt
VXAuaXNFbXB0eSgpKSB7CisgICAgICAgIFtfY29yZUxvY2F0aW9uUHJvdmlkZXIuZ2V0KCkgc3Rv
cF07CisgICAgICAgIF9sYXN0QWN0aXZlUG9zaXRpb24uY2xlYXIoKTsKKyAgICB9Cit9CisKKyNw
cmFnbWEgbWFyayAtIFdLR2VvbG9jYXRpb25Qcm92aWRlciBjYWxsYmFja3MgaW1wbGVtZW50YXRp
b24uCistKHZvaWQpX3N0YXJ0VXBkYXRpbmcKK3sKKyAgICBfaXNXZWJDb3JlR2VvbG9jYXRpb25B
Y3RpdmUgPSBZRVM7CisgICAgW19jb3JlTG9jYXRpb25Qcm92aWRlci5nZXQoKSBzdGFydF07CisK
KyAgICAvLyBJZiB3ZSBoYXZlIHRoZSBsYXN0IHBvc2l0aW9uLCBpdCBpcyBmcm9tIHRoZSBpbml0
aWFsaXphdGlvbiBvciB3YXJtIHVwLiBJdCBpcyB0aGUgbGFzdCBrbm93bgorICAgIC8vIGdvb2Qg
cG9zaXRpb24gc28gd2UgY2FuIHJldHVybiBpdCBkaXJlY3RseS4KKyAgICBpZiAoX2xhc3RBY3Rp
dmVQb3NpdGlvbikKKyAgICAgICAgX2dlb2xvY2F0aW9uTWFuYWdlci0+cHJvdmlkZXJEaWRDaGFu
Z2VQb3NpdGlvbihfbGFzdEFjdGl2ZVBvc2l0aW9uLmdldCgpKTsKK30KKworLSh2b2lkKV9zdG9w
VXBkYXRpbmcKK3sKKyAgICBfaXNXZWJDb3JlR2VvbG9jYXRpb25BY3RpdmUgPSBOTzsKKyAgICBb
c2VsZiBfc3RvcFVwZGF0aW5nSWZQb3NzaWJsZV07Cit9CisKKy0odm9pZClfc2V0RW5hYmxlSGln
aEFjY3VyYWN5OihCT09MKWVuYWJsZUhpZ2hBY2N1cmFjeQoreworICAgIFtfY29yZUxvY2F0aW9u
UHJvdmlkZXIuZ2V0KCkgc2V0RW5hYmxlSGlnaEFjY3VyYWN5OmVuYWJsZUhpZ2hBY2N1cmFjeV07
Cit9CisKKyNwcmFnbWEgbWFyayAtIFB1YmxpYyBBUEkgaW1wbGVtZW50YXRpb24uCisKKy0oaWQp
aW5pdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBbc2VsZiBpbml0
V2l0aENvbnRleHQ6KFdlYkNvbnRleHQ6OnNoYXJlZFByb2Nlc3NDb250ZXh0KCkpXTsKK30KKwor
LShpZClpbml0V2l0aENvbnRleHQ6KFdlYkNvbnRleHQqKWNvbnRleHQKK3sKKyAgICBzZWxmID0g
W3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBf
Z2VvbG9jYXRpb25NYW5hZ2VyID0gY29udGV4dC0+c3VwcGxlbWVudDxXZWJHZW9sb2NhdGlvbk1h
bmFnZXJQcm94eT4oKTsKKyAgICBXS0dlb2xvY2F0aW9uUHJvdmlkZXIgcHJvdmlkZXJDYWxsYmFj
ayA9IHsKKyAgICAgICAga1dLR2VvbG9jYXRpb25Qcm92aWRlckN1cnJlbnRWZXJzaW9uLAorICAg
ICAgICBzZWxmLAorICAgICAgICBzdGFydFVwZGF0aW5nQ2FsbGJhY2ssCisgICAgICAgIHN0b3BV
cGRhdGluZ0NhbGxiYWNrLAorICAgICAgICBzZXRFbmFibGVIaWdoQWNjdXJhY3kKKyAgICB9Owor
ICAgIF9nZW9sb2NhdGlvbk1hbmFnZXItPmluaXRpYWxpemVQcm92aWRlcigmcHJvdmlkZXJDYWxs
YmFjayk7CisgICAgX2NvcmVMb2NhdGlvblByb3ZpZGVyID0gYWRvcHROUyhbW1dlYkdlb2xvY2F0
aW9uQ29yZUxvY2F0aW9uUHJvdmlkZXIgYWxsb2NdIGluaXRXaXRoTGlzdGVuZXI6c2VsZl0pOwor
ICAgIHJldHVybiBzZWxmOworfQorCistKHZvaWQpZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25S
ZXF1ZXN0RnJvbU9yaWdpbjooV0tTZWN1cml0eU9yaWdpblJlZilvcmlnaW4gZnJhbWU6KFdLRnJh
bWVSZWYpZnJhbWUgcmVxdWVzdDooV0tHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UmVmKXBl
cm1pc3Npb25SZXF1ZXN0IHdpbmRvdzooVUlXaW5kb3cqKXdpbmRvdworeworICAgIEdlb2xvY2F0
aW9uUmVxdWVzdERhdGEgZ2VvbG9jYXRpb25SZXF1ZXN0RGF0YTsKKyAgICBnZW9sb2NhdGlvblJl
cXVlc3REYXRhLm9yaWdpbiA9IHRvSW1wbChvcmlnaW4pLT5zZWN1cml0eU9yaWdpbigpOworICAg
IGdlb2xvY2F0aW9uUmVxdWVzdERhdGEuZnJhbWUgPSB0b0ltcGwoZnJhbWUpOworICAgIGdlb2xv
Y2F0aW9uUmVxdWVzdERhdGEucGVybWlzc2lvblJlcXVlc3QgPSB0b0ltcGwocGVybWlzc2lvblJl
cXVlc3QpOworICAgIGdlb2xvY2F0aW9uUmVxdWVzdERhdGEud2luZG93ID0gd2luZG93OworICAg
IF9yZXF1ZXN0c1dhaXRpbmdGb3JDb3JlTG9jYXRpb25TdGFydC5hcHBlbmQoZ2VvbG9jYXRpb25S
ZXF1ZXN0RGF0YSk7CisgICAgW19jb3JlTG9jYXRpb25Qcm92aWRlci5nZXQoKSBzdGFydF07Cit9
CitAZW5kCisKKyNwcmFnbWEgbWFyayAtIFdlYkdlb2xvY2F0aW9uQ29yZUxvY2F0aW9uVXBkYXRl
TGlzdGVuZXIgaW1wbGVtZW50YXRpb24uCisKK0BpbXBsZW1lbnRhdGlvbiBXS0dlb2xvY2F0aW9u
UHJvdmlkZXJJT1MgKFdlYkdlb2xvY2F0aW9uQ29yZUxvY2F0aW9uVXBkYXRlTGlzdGVuZXIpCist
ICh2b2lkKWdlb2xvY2F0aW9uRGVsZWdhdGVTdGFydGVkCit7CisgICAgVmVjdG9yPEdlb2xvY2F0
aW9uUmVxdWVzdERhdGE+IHJlcXVlc3RzOworICAgIHJlcXVlc3RzLnN3YXAoX3JlcXVlc3RzV2Fp
dGluZ0ZvckNvcmVMb2NhdGlvblN0YXJ0KTsKKyAgICBIYXNoU2V0PHZvaWQqPiBsYXRlc3RSZXF1
ZXN0c0Zvcldhcm11cDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlcXVlc3RzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eSogcGVy
bWlzc2lvblJlcXVlc3QgPSByZXF1ZXN0c1tpXS5wZXJtaXNzaW9uUmVxdWVzdC5nZXQoKTsKKyAg
ICAgICAgbGF0ZXN0UmVxdWVzdHNGb3JXYXJtdXAuYWRkKHBlcm1pc3Npb25SZXF1ZXN0KTsKKyAg
ICAgICAgX3JlcXVlc3RzSW5XYXJtVXAuYWRkKHBlcm1pc3Npb25SZXF1ZXN0KTsKKyAgICB9CisK
KyAgICAvLyBTdGFydCB0aGUgd2FybXVwIHBlcmlvZCBpbiB3aGljaCB3ZSBrZWVwIENvcmVMb2Nh
dGlvbiBydW5uaW5nIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSB1c2VyIHJlc3BvbnNlLgorICAgIGNv
bnN0IGludDY0X3Qgd2FybVVwVGltZW91dEludGVydmFsID0gMjAgKiBOU0VDX1BFUl9TRUM7Cisg
ICAgZGlzcGF0Y2hfdGltZV90IHdoZW4gPSBkaXNwYXRjaF90aW1lKERJU1BBVENIX1RJTUVfTk9X
LCB3YXJtVXBUaW1lb3V0SW50ZXJ2YWwpOworICAgIGRpc3BhdGNoX2FmdGVyKHdoZW4sIGRpc3Bh
dGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIEhhc2hTZXQ8dm9pZCo+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBsYXRlc3RSZXF1ZXN0c0Zvcldhcm11cC5lbmQoKTsKKyAgICAgICAgZm9y
IChIYXNoU2V0PHZvaWQqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsYXRlc3RSZXF1ZXN0c0Zvcldh
cm11cC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBfcmVxdWVzdHNJbldh
cm1VcC5yZW1vdmUoKml0KTsKKyAgICAgICAgW3NlbGYgX3N0b3BVcGRhdGluZ0lmUG9zc2libGVd
OworICAgIH0pOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXF1ZXN0cy5zaXplKCk7
ICsraSkgeworICAgICAgICBSZXRhaW5QdHI8V0tXZWJBbGxvd0RlbnlQb2xpY3lMaXN0ZW5lcj4g
cG9saWN5TGlzdGVuZXIgPSBhZG9wdE5TKFtbV0tXZWJBbGxvd0RlbnlQb2xpY3lMaXN0ZW5lciBh
bGxvY10gaW5pdFdpdGhQcm92aWRlcjpzZWxmIHBlcm1pc3Npb25SZXF1ZXN0UHJveHk6cmVxdWVz
dHNbaV0ucGVybWlzc2lvblJlcXVlc3QuZ2V0KCldKTsKKyAgICAgICAgZGVjaWRlUG9saWN5Rm9y
R2VvbG9jYXRpb25SZXF1ZXN0RnJvbU9yaWdpbihyZXF1ZXN0c1tpXS5vcmlnaW4uZ2V0KCksIHJl
cXVlc3RzW2ldLmZyYW1lLT51cmwoKSwgcG9saWN5TGlzdGVuZXIuZ2V0KCksIHJlcXVlc3RzW2ld
LndpbmRvdy5nZXQoKSk7CisgICAgfQorfQorCistICh2b2lkKWdlb2xvY2F0aW9uRGVsZWdhdGVV
bmFibGVUb1N0YXJ0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBfcmVxdWVzdHNXYWl0
aW5nRm9yQ29yZUxvY2F0aW9uU3RhcnQuc2l6ZSgpOyArK2kpCisgICAgICAgIF9yZXF1ZXN0c1dh
aXRpbmdGb3JDb3JlTG9jYXRpb25TdGFydFtpXS5wZXJtaXNzaW9uUmVxdWVzdC0+ZGVueSgpOwor
ICAgIF9yZXF1ZXN0c1dhaXRpbmdGb3JDb3JlTG9jYXRpb25TdGFydC5jbGVhcigpOworICAgIFtz
ZWxmIF9zdG9wVXBkYXRpbmdJZlBvc3NpYmxlXTsKK30KKworLSAodm9pZClwb3NpdGlvbkNoYW5n
ZWQ6KFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb24qKXBvc2l0aW9uCit7CisgICAgX2xhc3RB
Y3RpdmVQb3NpdGlvbiA9IFdlYkdlb2xvY2F0aW9uUG9zaXRpb246OmNyZWF0ZShwb3NpdGlvbi0+
dGltZXN0YW1wKCksIHBvc2l0aW9uLT5sYXRpdHVkZSgpLCBwb3NpdGlvbi0+bG9uZ2l0dWRlKCks
IHBvc2l0aW9uLT5hY2N1cmFjeSgpLCBwb3NpdGlvbi0+Y2FuUHJvdmlkZUFsdGl0dWRlKCksIHBv
c2l0aW9uLT5hbHRpdHVkZSgpLCBwb3NpdGlvbi0+Y2FuUHJvdmlkZUFsdGl0dWRlQWNjdXJhY3ko
KSwgcG9zaXRpb24tPmFsdGl0dWRlQWNjdXJhY3koKSwgcG9zaXRpb24tPmNhblByb3ZpZGVIZWFk
aW5nKCksIHBvc2l0aW9uLT5oZWFkaW5nKCksIHBvc2l0aW9uLT5jYW5Qcm92aWRlU3BlZWQoKSwg
cG9zaXRpb24tPnNwZWVkKCkpOworICAgIF9nZW9sb2NhdGlvbk1hbmFnZXItPnByb3ZpZGVyRGlk
Q2hhbmdlUG9zaXRpb24oX2xhc3RBY3RpdmVQb3NpdGlvbi5nZXQoKSk7Cit9CisKKy0gKHZvaWQp
ZXJyb3JPY2N1cnJlZDooTlNTdHJpbmcgKillcnJvck1lc3NhZ2UKK3sKKyAgICBfZ2VvbG9jYXRp
b25NYW5hZ2VyLT5wcm92aWRlckRpZEZhaWxUb0RldGVybWluZVBvc2l0aW9uKGVycm9yTWVzc2Fn
ZSk7Cit9CisKKy0gKHZvaWQpcmVzZXRHZW9sb2NhdGlvbgoreworICAgIF9nZW9sb2NhdGlvbk1h
bmFnZXItPnJlc2V0UGVybWlzc2lvbnMoKTsKK30KKworI3ByYWdtYSBtYXJrIC0gTWV0aG9kcyBm
b3IgdWRhdGluZyB0aGUgc3RhdGUgV0tXZWJBbGxvd0RlbnlQb2xpY3lMaXN0ZW5lcgorLSAodm9p
ZClwZXJtaXNzaW9uRGVuaWVkOihHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHkqKXBl
cm1pc3Npb25SZXF1ZXN0UHJveHkKK3sKKyAgICBfcmVxdWVzdHNJbldhcm1VcC5yZW1vdmUocGVy
bWlzc2lvblJlcXVlc3RQcm94eSk7CisgICAgW3NlbGYgX3N0b3BVcGRhdGluZ0lmUG9zc2libGVd
OworfQorCitAZW5kCisKKyMgcHJhZ21hIG1hcmsgLSBJbXBsZW1lbnRhdGlvbiBvZiBXS1dlYkFs
bG93RGVueVBvbGljeUxpc3RlbmVyCitAaW1wbGVtZW50YXRpb24gV0tXZWJBbGxvd0RlbnlQb2xp
Y3lMaXN0ZW5lciB7CisgICAgUmV0YWluUHRyPFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUz4gX3By
b3ZpZGVyOworICAgIFJlZlB0cjxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHk+IF9w
ZXJtaXNzaW9uUmVxdWVzdFByb3h5OworfQorCistIChpZClpbml0V2l0aFByb3ZpZGVyOihXS0dl
b2xvY2F0aW9uUHJvdmlkZXJJT1MqKXByb3ZpZGVyIHBlcm1pc3Npb25SZXF1ZXN0UHJveHk6KFBh
c3NSZWZQdHI8R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFByb3h5PilwZXJtaXNzaW9uUmVx
dWVzdFByb3h5Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfcHJvdmlkZXIgPSBwcm92aWRlcjsKKyAgICBfcGVy
bWlzc2lvblJlcXVlc3RQcm94eSA9IHBlcm1pc3Npb25SZXF1ZXN0UHJveHk7CisgICAgcmV0dXJu
IHNlbGY7Cit9CisKKy0gKHZvaWQpYWxsb3cKK3sKKyAgICBfcGVybWlzc2lvblJlcXVlc3RQcm94
eS0+YWxsb3coKTsKK30KKworLSAodm9pZClkZW55Cit7CisgICAgW19wcm92aWRlci5nZXQoKSBw
ZXJtaXNzaW9uRGVuaWVkOl9wZXJtaXNzaW9uUmVxdWVzdFByb3h5LmdldCgpXTsKKyAgICBfcGVy
bWlzc2lvblJlcXVlc3RQcm94eS0+ZGVueSgpOworfQorCistICh2b2lkKWRlbnlPbmx5VGhpc1Jl
cXVlc3QKK3sKKyAgICAvLyBUaGUgbWV0aG9kIGRlbnlPbmx5VGhpc1JlcXVlc3QgaXMgaUFkIHNw
ZWNpZmljIGZvciBXZWJLaXQxLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCistIChC
T09MKXNob3VsZENsZWFyQ2FjaGUKK3sKKyAgICByZXR1cm4gTk87Cit9CitAZW5kCkluZGV4OiBV
SVByb2Nlc3MvQVBJL2lvcy9XS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1NPYmpDU2VjdXJpdHlPcmln
aW4ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVUlQcm9jZXNzL0FQSS9pb3MvV0tHZW9sb2NhdGlvblByb3Zp
ZGVySU9TT2JqQ1NlY3VyaXR5T3JpZ2luLm1tCShyZXZpc2lvbiAwKQorKysgVUlQcm9jZXNzL0FQ
SS9pb3MvV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TT2JqQ1NlY3VyaXR5T3JpZ2luLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIldLR2VvbG9jYXRpb25Qcm92aWRlcklPUy5oIgorCisjaW1wb3J0IDxGb3Vu
ZGF0aW9uL05TVVJMLmg+CisjaW1wb3J0IDxVSUtpdC9VSVdlYkdlb2xvY2F0aW9uUG9saWN5RGVj
aWRlci5oPgorI2ltcG9ydCA8VUlLaXQvVUlXaW5kb3cuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Vj
dXJpdHlPcmlnaW4uaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJTZWN1cml0eU9yaWdpblByaXZhdGUu
aD4KKyNpbXBvcnQgPFdlYktpdC9XZWJVSURlbGVnYXRlUHJpdmF0ZS5oPgorI2ltcG9ydCA8d3Rm
L1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK0BpbnRlcmZh
Y2UgV2ViU2VjdXJpdHlPcmlnaW4gKFdlYkludGVybmFsKQorLSAoaWQpX2luaXRXaXRoV2ViQ29y
ZVNlY3VyaXR5T3JpZ2luOihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiAqKW9yaWdpbjsKK0BlbmQK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25S
ZXF1ZXN0RnJvbU9yaWdpbihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYg
dXJsU3RyaW5nLCBpZDxXZWJBbGxvd0RlbnlQb2xpY3lMaXN0ZW5lcj4sIFVJV2luZG93KiB3aW5k
b3cpOworCit2b2lkIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUmVxdWVzdEZyb21PcmlnaW4o
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcs
IGlkPFdlYkFsbG93RGVueVBvbGljeUxpc3RlbmVyPiBsaXN0ZW5lciwgVUlXaW5kb3cqIHdpbmRv
dykKK3sKKyAgICBSZXRhaW5QdHI8V2ViU2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luID0g
YWRvcHROUyhbW1dlYlNlY3VyaXR5T3JpZ2luIGFsbG9jXSBfaW5pdFdpdGhXZWJDb3JlU2VjdXJp
dHlPcmlnaW46b3JpZ2luXSk7CisgICAgUmV0YWluUHRyPE5TVVJMPiByZXF1ZXN0VXJsID0gYWRv
cHROUyhbW05TVVJMIGFsbG9jXSBpbml0V2l0aFN0cmluZzp1cmxTdHJpbmddKTsKKyAgICBbW1VJ
V2ViR2VvbG9jYXRpb25Qb2xpY3lEZWNpZGVyIHNoYXJlZFBvbGljeURlY2lkZXJdIGRlY2lkZVBv
bGljeUZvckdlb2xvY2F0aW9uUmVxdWVzdEZyb21PcmlnaW46c2VjdXJpdHlPcmlnaW4uZ2V0KCkg
cmVxdWVzdGluZ1VSTDpyZXF1ZXN0VXJsLmdldCgpIHdpbmRvdzp3aW5kb3cgbGlzdGVuZXI6bGlz
dGVuZXJdOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFVJUHJvY2Vzcy9BUEkv
aW9zL1dLSW50ZXJhY3Rpb25WaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVUlQcm9jZXNzL0FQSS9pb3Mv
V0tJbnRlcmFjdGlvblZpZXcuaAkocmV2aXNpb24gMCkKKysrIFVJUHJvY2Vzcy9BUEkvaW9zL1dL
SW50ZXJhY3Rpb25WaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbXBvcnQgPFVJS2l0L1VJV2ViRm9ybUFjY2Vzc29yeS5oPgorI2ltcG9y
dCA8VUlLaXQvVUlUZXh0SW5wdXRfUHJpdmF0ZS5oPgorI2ltcG9ydCA8VUlLaXQvVUlWaWV3Lmg+
CisjaW1wb3J0IDxVSUtpdC9VSVdlYlRvdWNoRXZlbnRzR2VzdHVyZVJlY29nbml6ZXIuaD4KKyNp
bXBvcnQgPFVJS2l0L1VJV0tUZXh0SW50ZXJhY3Rpb25Bc3Npc3RhbnQuaD4KKyNpbXBvcnQgPHd0
Zi9Gb3J3YXJkLmg+CisjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CisKK0BjbGFzcyBVSVdlYlNjcm9s
bFZpZXc7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENvbG9yOworY2xhc3MgRmxvYXRR
dWFkOworY2xhc3MgSW50U2l6ZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJQ
YWdlUHJveHk7Cit9CisKK0BjbGFzcyBXZWJJT1NFdmVudDsKKworQGludGVyZmFjZSBXS0ludGVy
YWN0aW9uVmlldyA6IFVJVmlldzxVSUdlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGUsIFVJV2ViVG91
Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplckRlbGVnYXRlLCBVSVRleHRJbnB1dFByaXZhdGUsIFVJ
V2ViRm9ybUFjY2Vzc29yeURlbGVnYXRlLCBVSVdLSW50ZXJhY3Rpb25WaWV3UHJvdG9jb2w+CisK
Ky0gKHZvaWQpc2V0U2Nyb2xsVmlldzooVUlXZWJTY3JvbGxWaWV3ICopc2Nyb2xsVmlldzsKKy0g
KHZvaWQpc2V0UGFnZTooUGFzc1JlZlB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4pcGFnZTsKKwor
LSAodm9pZClfZGlkR2V0VGFwSGlnaGxpZ2h0Rm9yUmVxdWVzdDoodWludDY0X3QpcmVxdWVzdElE
IGNvbG9yOihjb25zdCBXZWJDb3JlOjpDb2xvciYpY29sb3IgcXVhZHM6KGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpGbG9hdFF1YWQ+JiloaWdobGlnaHRlZFF1YWRzIHRvcExlZnRSYWRpdXM6KGNvbnN0
IFdlYkNvcmU6OkludFNpemUmKXRvcExlZnRSYWRpdXMgdG9wUmlnaHRSYWRpdXM6KGNvbnN0IFdl
YkNvcmU6OkludFNpemUmKXRvcFJpZ2h0UmFkaXVzIGJvdHRvbUxlZnRSYWRpdXM6KGNvbnN0IFdl
YkNvcmU6OkludFNpemUmKWJvdHRvbUxlZnRSYWRpdXMgYm90dG9tUmlnaHRSYWRpdXM6KGNvbnN0
IFdlYkNvcmU6OkludFNpemUmKWJvdHRvbVJpZ2h0UmFkaXVzOworCistICh2b2lkKV9zdGFydEFz
c2lzdGluZ05vZGU7CistICh2b2lkKV9zdG9wQXNzaXN0aW5nTm9kZTsKKy0gKHZvaWQpX3NlbGVj
dGlvbkNoYW5nZWQ7CistIChCT09MKV9pbnRlcnByZXRLZXlFdmVudDooV2ViSU9TRXZlbnQgKil0
aGVFdmVudCBpc0NoYXJFdmVudDooQk9PTClpc0NoYXJFdmVudDsKK0BlbmQKSW5kZXg6IFVJUHJv
Y2Vzcy9BUEkvaW9zL1dLSW50ZXJhY3Rpb25WaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFVJUHJvY2Vz
cy9BUEkvaW9zL1dLSW50ZXJhY3Rpb25WaWV3Lm1tCShyZXZpc2lvbiAwKQorKysgVUlQcm9jZXNz
L0FQSS9pb3MvV0tJbnRlcmFjdGlvblZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NjA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJX
S0ludGVyYWN0aW9uVmlldy5oIgorCisjaW1wb3J0ICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50Lmgi
CisjaW1wb3J0ICJOYXRpdmVXZWJUb3VjaEV2ZW50LmgiCisjaW1wb3J0ICJXS0Jhc2UuaCIKKyNp
bXBvcnQgIldLR2VzdHVyZVR5cGVzLmgiCisjaW1wb3J0ICJXZWJFdmVudC5oIgorI2ltcG9ydCAi
V2ViSU9TRXZlbnRGYWN0b3J5LmgiCisjaW1wb3J0ICJXZWJQYWdlTWVzc2FnZXMuaCIKKyNpbXBv
cnQgIldlYlByb2Nlc3NQcm94eS5oIgorI2ltcG9ydCA8VUlLaXQvVUlGb250X1ByaXZhdGUuaD4K
KyNpbXBvcnQgPFVJS2l0L1VJS2V5Ym9hcmRJbXBsLmg+CisjaW1wb3J0IDxVSUtpdC9VSUxvbmdQ
cmVzc0dlc3R1cmVSZWNvZ25pemVyX1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJVGFwR2Vz
dHVyZVJlY29nbml6ZXJfUHJpdmF0ZS5oPgorI2ltcG9ydCA8VUlLaXQvVUlUZXh0SW50ZXJhY3Rp
b25Bc3Npc3RhbnRfUHJpdmF0ZS5oPgorI2ltcG9ydCA8VUlLaXQvVUlXZWJTY3JvbGxWaWV3Lmg+
CisjaW1wb3J0IDxVSUtpdC9fVUlIaWdobGlnaHRWaWV3Lmg+CisjaW1wb3J0IDxVSUtpdC9fVUlX
ZWJIaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplci5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9Db2xvci5oPgorI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFF1YWQuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvV2ViRXZlbnQuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJTZWxlY3Rpb25SZWN0Lmg+CisjaW1w
b3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKKworc3RhdGljIGNvbnN0IGZsb2F0IGhpZ2hsaWdodERlbGF5ID0g
MC4xMjsKKworQGludGVyZmFjZSBXS1RleHRSYW5nZSA6IFVJVGV4dFJhbmdlIHsKKyAgICBDR1Jl
Y3QgX3N0YXJ0UmVjdDsKKyAgICBDR1JlY3QgX2VuZFJlY3Q7CisgICAgQk9PTCBfaXNOb25lOwor
ICAgIEJPT0wgX2lzUmFuZ2U7CisgICAgQk9PTCBfaXNFZGl0YWJsZTsKKyAgICBOU0FycmF5ICpf
c2VsZWN0aW9uUmVjdHM7CisgICAgTlNVSW50ZWdlciBfc2VsZWN0ZWRUZXh0TGVuZ3RoOworfQor
QHByb3BlcnR5IChub25hdG9taWMpIENHUmVjdCBzdGFydFJlY3Q7CitAcHJvcGVydHkgKG5vbmF0
b21pYykgQ0dSZWN0IGVuZFJlY3Q7CitAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCBpc05vbmU7
CitAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCBpc1JhbmdlOworQHByb3BlcnR5IChub25hdG9t
aWMpIEJPT0wgaXNFZGl0YWJsZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBOU1VJbnRlZ2VyIHNl
bGVjdGVkVGV4dExlbmd0aDsKK0Bwcm9wZXJ0eSAoY29weSxub25hdG9taWMpIE5TQXJyYXkgKnNl
bGVjdGlvblJlY3RzOworCisrIChXS1RleHRSYW5nZSAqKXRleHRSYW5nZVdpdGhTdGF0ZTooQk9P
TClpc05vbmUgaXNSYW5nZTooQk9PTClpc1JhbmdlIGlzRWRpdGFibGU6KEJPT0wpaXNFZGl0YWJs
ZSBzdGFydFJlY3Q6KENHUmVjdClzdGFydFJlY3QgZW5kUmVjdDooQ0dSZWN0KWVuZFJlY3Qgc2Vs
ZWN0aW9uUmVjdHM6KE5TQXJyYXkgKilzZWxlY3Rpb25SZWN0cyBzZWxlY3RlZFRleHRMZW5ndGg6
KE5TVUludGVnZXIpc2VsZWN0ZWRUZXh0TGVuZ3RoOworCitAZW5kCisKK0BpbnRlcmZhY2UgV0tU
ZXh0UG9zaXRpb24gOiBVSVRleHRQb3NpdGlvbiB7CisgICAgQ0dSZWN0IF9wb3NpdGlvblJlY3Q7
Cit9CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBDR1JlY3QgcG9zaXRpb25SZWN0OworCisrIChX
S1RleHRQb3NpdGlvbiAqKXRleHRQb3NpdGlvbldpdGhSZWN0OihDR1JlY3QpcG9zaXRpb25SZWN0
OworCitAZW5kCisKK0BpbnRlcmZhY2UgV0tUZXh0U2VsZWN0aW9uUmVjdCA6IFVJVGV4dFNlbGVj
dGlvblJlY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgV2ViU2VsZWN0aW9uUmVj
dCAqd2ViUmVjdDsKKworKyAoTlNBcnJheSAqKXRleHRTZWxlY3Rpb25SZWN0c1dpdGhXZWJSZWN0
czooTlNBcnJheSAqKXdlYlJlY3RzOworCitAZW5kCisKK0BpbnRlcmZhY2UgV0tBdXRvY29ycmVj
dGlvblJlY3RzIDogVUlXS0F1dG9jb3JyZWN0aW9uUmVjdHMgeworICAgIENHUmVjdCBfZmlyc3RS
ZWN0OworICAgIENHUmVjdCBfbGFzdFJlY3Q7Cit9CisrIChXS0F1dG9jb3JyZWN0aW9uUmVjdHMg
KilhdXRvY29ycmVjdGlvblJlY3RzV2l0aFJlY3RzOihDR1JlY3QpZmlyc3RSZWN0IGxhc3RSZWN0
OihDR1JlY3QpbGFzdFJlY3Q7CisKK0BlbmQKKworQGludGVyZmFjZSBVSVRleHRJbnRlcmFjdGlv
bkFzc2lzdGFudCAoVUlUZXh0SW50ZXJhY3Rpb25Bc3Npc3RhbnRfSW50ZXJuYWwpCisvLyBGSVhN
RTogdGhpcyBuZWVkcyB0byBiZSBtb3ZlZCBmcm9tIHRoZSBpbnRlcm5hbCBoZWFkZXIgdG8gdGhl
IHByaXZhdGUuCistIChpZClpbml0V2l0aFZpZXc6KFVJUmVzcG9uZGVyIDxVSVRleHRJbnB1dD4g
Kil2aWV3OworLSAodm9pZClzZWxlY3RXb3JkOworQGVuZAorCit0eXBlZGVmIHZvaWQgKF5VSVdL
QXV0b2NvcnJlY3Rpb25Db21wbGV0aW9uSGFuZGxlcikoVUlXS0F1dG9jb3JyZWN0aW9uUmVjdHMg
KnJlY3RzRm9ySW5wdXQpOworCitzdHJ1Y3QgV0tBdXRvQ29ycmVjdGlvbkRhdGF7CisgICAgU3Ry
aW5nIGZvbnROYW1lOworICAgIENHRmxvYXQgZm9udFNpemU7CisgICAgdWludDY0X3QgZm9udFRy
YWl0czsKKyAgICBDR1JlY3QgdGV4dEZpcnN0UmVjdDsKKyAgICBDR1JlY3QgdGV4dExhc3RSZWN0
OworICAgIFVJV0tBdXRvY29ycmVjdGlvbkNvbXBsZXRpb25IYW5kbGVyIGNvbXBsZXRpb25IYW5k
bGVyOworfTsKKworQGludGVyZmFjZSBXS0ludGVyYWN0aW9uVmlldyAoUHJpdmF0ZSkKK0Bwcm9w
ZXJ0eSAocmVhZG9ubHksIG5vbmF0b21pYykgV0tBdXRvQ29ycmVjdGlvbkRhdGEgKmF1dG9jb3Jy
ZWN0aW9uRGF0YTsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLSW50ZXJhY3Rpb25WaWV3IHsK
KyAgICBSZXRhaW5QdHI8VUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyPiBfdG91Y2hF
dmVudEdlc3R1cmVSZWNvZ25pemVyOworICAgIFJldGFpblB0cjxVSVRhcEdlc3R1cmVSZWNvZ25p
emVyPiBfc2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXI7CisgICAgUmV0YWluUHRyPF9VSVdlYkhp
Z2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyPiBfaGlnaGxpZ2h0TG9uZ1ByZXNzR2Vz
dHVyZVJlY29nbml6ZXI7CisKKyAgICBVSVdLVGV4dEludGVyYWN0aW9uQXNzaXN0YW50ICpfdGV4
dFNlbGVjdGlvbkFzc2lzdGFudDsKKyAgICBVSVRleHRJbnB1dFRyYWl0cyAqX3RyYWl0czsKKyAg
ICBCT09MIF9jYW5CZUZpcnN0UmVzcG9uZGVyOworICAgIFVJV2ViRm9ybUFjY2Vzc29yeSAqX2Fj
Y2Vzc29yeTsKKyAgICBpZCA8VUlUZXh0SW5wdXREZWxlZ2F0ZT4gX2lucHV0RGVsZWdhdGU7Cisg
ICAgQk9PTCBfc2hvd2luZ1RleHRTdHlsZU9wdGlvbnM7CisKKyAgICBfX3dlYWsgVUlXZWJTY3Jv
bGxWaWV3ICpfc2Nyb2xsVmlldzsKKyAgICBSZWZQdHI8V2ViUGFnZVByb3h5PiBfcGFnZTsKKwor
ICAgIFJldGFpblB0cjxfVUlIaWdobGlnaHRWaWV3PiBfaGlnaGxpZ2h0VmlldzsKKyAgICB1aW50
NjRfdCBfbGF0ZXN0VGFwSGlnaGxpZ2h0SUQ7CisgICAgQk9PTCBfaXNUYXBIaWdobGlnaHRJRFZh
bGlkOworICAgIFdLQXV0b0NvcnJlY3Rpb25EYXRhIF9hdXRvY29ycmVjdGlvbkRhdGE7Cit9CisK
K0BzeW50aGVzaXplIGlucHV0RGVsZWdhdGUgPSBfaW5wdXREZWxlZ2F0ZTsKKworLSAoaWQpaW5p
dFdpdGhGcmFtZTooQ0dSZWN0KWZyYW1lCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEZy
YW1lOmZyYW1lXTsKKyAgICBpZiAoc2VsZikgeworICAgICAgICBfdG91Y2hFdmVudEdlc3R1cmVS
ZWNvZ25pemVyID0gYWRvcHROUyhbW1VJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplciBh
bGxvY10gaW5pdFdpdGhUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKF93ZWJUb3VjaEV2ZW50
c1JlY29nbml6ZWQ6KSB0b3VjaERlbGVnYXRlOnNlbGZdKTsKKyAgICAgICAgW190b3VjaEV2ZW50
R2VzdHVyZVJlY29nbml6ZXIuZ2V0KCkgc2V0RGVsZWdhdGU6c2VsZl07CisgICAgICAgIFtzZWxm
IGFkZEdlc3R1cmVSZWNvZ25pemVyOl90b3VjaEV2ZW50R2VzdHVyZVJlY29nbml6ZXIuZ2V0KCld
OworCisgICAgICAgIF9zaW5nbGVUYXBHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tVSVRh
cEdlc3R1cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2Vs
ZWN0b3IoX3NpbmdsZVRhcFJlY29nbml6ZWQ6KV0pOworICAgICAgICBbX3NpbmdsZVRhcEdlc3R1
cmVSZWNvZ25pemVyLmdldCgpIHNldERlbGVnYXRlOnNlbGZdOworICAgICAgICBbc2VsZiBhZGRH
ZXN0dXJlUmVjb2duaXplcjpfc2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworCisg
ICAgICAgIF9oaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tf
VUlXZWJIaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciBhbGxvY10gaW5pdFdpdGhU
YXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKF9oaWdobGlnaHRMb25nUHJlc3NSZWNvZ25pemVk
OildKTsKKyAgICAgICAgW19oaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplci5nZXQo
KSBzZXREZWxheTpoaWdobGlnaHREZWxheV07CisgICAgICAgIFtfaGlnaGxpZ2h0TG9uZ1ByZXNz
R2VzdHVyZVJlY29nbml6ZXIuZ2V0KCkgc2V0RGVsZWdhdGU6c2VsZl07CisgICAgICAgIFtzZWxm
IGFkZEdlc3R1cmVSZWNvZ25pemVyOl9oaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXpl
ci5nZXQoKV07CisgICAgICAgIAorICAgICAgICBbc2VsZiBzZXRVc2VySW50ZXJhY3Rpb25FbmFi
bGVkOllFU107CisgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0g
YWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3Jlc2V0U2hvd2luZ1RleHRTdHls
ZTopIG5hbWU6VUlNZW51Q29udHJvbGxlckRpZEhpZGVNZW51Tm90aWZpY2F0aW9uIG9iamVjdDpu
aWxdOworICAgICAgICBfc2hvd2luZ1RleHRTdHlsZU9wdGlvbnMgPSBOTzsKKyAgICB9CisKKyAg
ICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW190b3VjaEV2ZW50
R2VzdHVyZVJlY29nbml6ZXIuZ2V0KCkgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICBbX3NpbmdsZVRh
cEdlc3R1cmVSZWNvZ25pemVyLmdldCgpIHNldERlbGVnYXRlOm5pbF07CisgICAgW19oaWdobGln
aHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplci5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxdOworICAg
IFtfdGV4dFNlbGVjdGlvbkFzc2lzdGFudCByZWxlYXNlXTsKKyAgICBbX2FjY2Vzc29yeSByZWxl
YXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpc2V0U2Nyb2xsVmlldzoo
VUlXZWJTY3JvbGxWaWV3KilzY3JvbGxWaWV3Cit7CisgICAgX3Njcm9sbFZpZXcgPSBzY3JvbGxW
aWV3OworfQorCistICh2b2lkKXNldFBhZ2U6KFBhc3NSZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJv
eHk+KXBhZ2UKK3sKKyAgICBfcGFnZSA9IHBhZ2U7Cit9CisKKy0gKEJPT0wpY2FuQmVjb21lRmly
c3RSZXNwb25kZXIKK3sKKyAgICByZXR1cm4gX2NhbkJlRmlyc3RSZXNwb25kZXI7Cit9CisKKy0g
KEJPT0wpcmVzaWduRmlyc3RSZXNwb25kZXIKK3sKKyAgICBbc2VsZiBfY2FuY2VsSW50ZXJhY3Rp
b25dOworICAgIHJldHVybiBbc3VwZXIgcmVzaWduRmlyc3RSZXNwb25kZXJdOworfQorCistICh2
b2lkKV93ZWJUb3VjaEV2ZW50c1JlY29nbml6ZWQ6KFVJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVj
b2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVyCit7CisgICAgTmF0aXZlV2ViVG91Y2hFdmVudCBu
YXRpdmVXZWJUb3VjaEV2ZW50KGdlc3R1cmVSZWNvZ25pemVyKTsKKworICAgIC8vIEZJWE1FOiB0
aGlzIGtpbmQgb2YgZXZlbnQgZGVsaXZlcnkgaXMgc3VwcG9zZWQgdG8gYmUgb25seSB1c2VkIGZv
ciB0ZXN0aW5nLiBXZSBtdXN0IHN3aXRjaCB0byBhc3luY2hyb25vdXMgaGFuZGxpbmcuCisgICAg
X3BhZ2UtPnNldFNob3VsZFNlbmRFdmVudHNTeW5jaHJvbm91c2x5KHRydWUpOworICAgIF9wYWdl
LT5oYW5kbGVUb3VjaEV2ZW50KG5hdGl2ZVdlYlRvdWNoRXZlbnQpOworICAgIF9wYWdlLT5zZXRT
aG91bGRTZW5kRXZlbnRzU3luY2hyb25vdXNseShmYWxzZSk7Cit9CisKK3N0YXRpYyBGbG9hdFF1
YWQgaW5mbGF0ZVF1YWQoY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBmbG9hdCBpbmZsYXRlU2l6ZSkK
K3sKKyAgICAvLyBXZSBzb3J0IHRoZSBvdXRwdXQgcG9pbnRzIGxpa2UgdGhpcyAoYXMgZXhwZWN0
ZWQgYnkgdGhlIGhpZ2hsaWdodCB2aWV3KToKKyAgICAvLyAgcDItLS0tLS1wMworICAgIC8vICB8
ICAgICAgIHwKKyAgICAvLyAgcDEtLS0tLS1wNAorCisgICAgLy8gMSkgU29ydCB0aGUgcG9pbnRz
IGhvcml6b250YWxseS4KKyAgICBGbG9hdFBvaW50IHBvaW50c1s0XSA9IHsgcXVhZC5wMSgpLCBx
dWFkLnA0KCksIHF1YWQucDIoKSwgcXVhZC5wMygpIH07CisgICAgaWYgKHBvaW50c1swXS54KCkg
PiBwb2ludHNbMV0ueCgpKQorICAgICAgICBzdGQ6OnN3YXAocG9pbnRzWzBdLCBwb2ludHNbMV0p
OworICAgIGlmIChwb2ludHNbMl0ueCgpID4gcG9pbnRzWzNdLngoKSkKKyAgICAgICAgc3RkOjpz
d2FwKHBvaW50c1syXSwgcG9pbnRzWzNdKTsKKworICAgIGlmIChwb2ludHNbMF0ueCgpID4gcG9p
bnRzWzJdLngoKSkKKyAgICAgICAgc3RkOjpzd2FwKHBvaW50c1swXSwgcG9pbnRzWzJdKTsKKyAg
ICBpZiAocG9pbnRzWzFdLngoKSA+IHBvaW50c1szXS54KCkpCisgICAgICAgIHN0ZDo6c3dhcChw
b2ludHNbMV0sIHBvaW50c1szXSk7CisKKyAgICBpZiAocG9pbnRzWzFdLngoKSA+IHBvaW50c1sy
XS54KCkpCisgICAgICAgIHN0ZDo6c3dhcChwb2ludHNbMV0sIHBvaW50c1syXSk7CisKKyAgICAv
LyAyKSBTd2FwIHRoZW0gdmVydGljYWxseSB0byBoYXZlIHRoZSBvdXRwdXQgcG9pbnRzIFtwMiwg
cDEsIHAzLCBwNF0uCisgICAgaWYgKHBvaW50c1sxXS55KCkgPCBwb2ludHNbMF0ueSgpKQorICAg
ICAgICBzdGQ6OnN3YXAocG9pbnRzWzBdLCBwb2ludHNbMV0pOworICAgIGlmIChwb2ludHNbM10u
eSgpIDwgcG9pbnRzWzJdLnkoKSkKKyAgICAgICAgc3RkOjpzd2FwKHBvaW50c1syXSwgcG9pbnRz
WzNdKTsKKworICAgIC8vIDMpIEFkanVzdCB0aGUgcG9zaXRpb25zLgorICAgIHBvaW50c1swXS5t
b3ZlKC1pbmZsYXRlU2l6ZSwgLWluZmxhdGVTaXplKTsKKyAgICBwb2ludHNbMV0ubW92ZSgtaW5m
bGF0ZVNpemUsIGluZmxhdGVTaXplKTsKKyAgICBwb2ludHNbMl0ubW92ZShpbmZsYXRlU2l6ZSwg
LWluZmxhdGVTaXplKTsKKyAgICBwb2ludHNbM10ubW92ZShpbmZsYXRlU2l6ZSwgaW5mbGF0ZVNp
emUpOworCisgICAgcmV0dXJuIEZsb2F0UXVhZChwb2ludHNbMV0sIHBvaW50c1swXSwgcG9pbnRz
WzJdLCBwb2ludHNbM10pOworfQorCistICh2b2lkKV9kaWRHZXRUYXBIaWdobGlnaHRGb3JSZXF1
ZXN0Oih1aW50NjRfdClyZXF1ZXN0SUQgY29sb3I6KGNvbnN0IFdlYkNvcmU6OkNvbG9yJiljb2xv
ciBxdWFkczooY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UXVhZD4mKWhpZ2hsaWdodGVkUXVh
ZHMgdG9wTGVmdFJhZGl1czooY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpdG9wTGVmdFJhZGl1cyB0
b3BSaWdodFJhZGl1czooY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpdG9wUmlnaHRSYWRpdXMgYm90
dG9tTGVmdFJhZGl1czooY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpYm90dG9tTGVmdFJhZGl1cyBi
b3R0b21SaWdodFJhZGl1czooY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpYm90dG9tUmlnaHRSYWRp
dXMKK3sKKyAgICBpZiAoIV9pc1RhcEhpZ2hsaWdodElEVmFsaWQgfHwgX2xhdGVzdFRhcEhpZ2hs
aWdodElEICE9IHJlcXVlc3RJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgQ0dGbG9h
dCBVSVdlYlZpZXdNaW5pbXVtSGlnaGxpZ2h0UmFkaXVzID0gMi4wOworICAgIGlmICghX2hpZ2hs
aWdodFZpZXcpIHsKKyAgICAgICAgX2hpZ2hsaWdodFZpZXcgPSBhZG9wdE5TKFtbX1VJSGlnaGxp
Z2h0VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RaZXJvXSk7CisgICAgICAgIFtfaGln
aGxpZ2h0Vmlldy5nZXQoKSBzZXRPcGFxdWU6Tk9dOworICAgICAgICBbX2hpZ2hsaWdodFZpZXcu
Z2V0KCkgc2V0Q29ybmVyUmFkaXVzOlVJV2ViVmlld01pbmltdW1IaWdobGlnaHRSYWRpdXNdOwor
ICAgIH0KKyAgICBbc2VsZiBhZGRTdWJ2aWV3Ol9oaWdobGlnaHRWaWV3LmdldCgpXTsKKworICAg
IFJldGFpblB0cjxVSUNvbG9yPiBoaWdobGlnaHRVSUtpdENvbG9yID0gYWRvcHROUyhbW1VJQ29s
b3IgYWxsb2NdIGluaXRXaXRoUmVkOihjb2xvci5yZWQoKSAvIDI1NS4wKSBncmVlbjooY29sb3Iu
Z3JlZW4oKSAvIDI1NS4wKSBibHVlOihjb2xvci5ibHVlKCkgLyAyNTUuMCkgYWxwaGE6KGNvbG9y
LmFscGhhKCkgLyAyNTUuMCldKTsKKyAgICBbX2hpZ2hsaWdodFZpZXcuZ2V0KCkgc2V0Q29sb3I6
aGlnaGxpZ2h0VUlLaXRDb2xvci5nZXQoKV07CisKKyAgICAvLyBMaWtlIFdlYktpdDEsIHdlIGRv
bid0IGJvdGhlciBoaWdobGlnaHRpbmcgaXRlbXMgdGhhdCBhcmUgYmlnZ2VyIHRoYW4gdGhlIGNv
bnN0cmFpbmluZyByZWN0LgorICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBub3QgYmUgZG9uZSBp
biBtaXhlZCBjb29yZGluYXRlIHN5c3RlbXMuIEl0IHNob3VsZCBiZSBleHByZXNzZWQgaW4gdGhl
IFNjcm9sbFZpZXcgY29vcmRpbmF0ZXMuCisgICAgQ0dSZWN0IGNvbnN0cmFpblJlY3QgPSBfc2Ny
b2xsVmlldy5ib3VuZHM7CisKKyAgICBib29sIGFsbEhpZ2hsaWdodFJlY3RzQXJlUmVjdGlsaW5l
YXIgPSB0cnVlOworICAgIGNvbnN0IHNpemVfdCBxdWFkQ291bnQgPSBoaWdobGlnaHRlZFF1YWRz
LnNpemUoKTsKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHJlY3RzID0gYWRvcHROUyhb
W05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnN0YXRpY19jYXN0PGNvbnN0
IE5TVUludGVnZXI+KHF1YWRDb3VudCldKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHF1
YWRDb3VudDsgKytpKSB7CisgICAgICAgIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCA9IGhpZ2hsaWdo
dGVkUXVhZHNbaV07CisgICAgICAgIGlmIChxdWFkLmlzUmVjdGlsaW5lYXIoKSkgeworICAgICAg
ICAgICAgQ0dSZWN0IHJlY3QgPSBxdWFkLmJvdW5kaW5nQm94KCk7CisgICAgICAgICAgICBpZiAo
KENHUmVjdEdldFdpZHRoKHJlY3QpID4gQ0dSZWN0R2V0V2lkdGgoY29uc3RyYWluUmVjdCkpIHx8
IChDR1JlY3RHZXRIZWlnaHQocmVjdCkgPiBDR1JlY3RHZXRIZWlnaHQoY29uc3RyYWluUmVjdCkp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICByZWN0ID0gQ0dSZWN0
SW5zZXQocmVjdCwgLVVJV2ViVmlld01pbmltdW1IaWdobGlnaHRSYWRpdXMsIC1VSVdlYlZpZXdN
aW5pbXVtSGlnaGxpZ2h0UmFkaXVzKTsKKyAgICAgICAgICAgIFtyZWN0cy5nZXQoKSBhZGRPYmpl
Y3Q6W05TVmFsdWUgdmFsdWVXaXRoQ0dSZWN0OnJlY3RdXTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGFsbEhpZ2hsaWdodFJlY3RzQXJlUmVjdGlsaW5lYXIgPSBmYWxzZTsKKyAgICAg
ICAgICAgIHJlY3RzLmNsZWFyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIEZJWE1FOiBXZWJLaXQxIHVzZXMgdGhlIHZpc2libGVSZWN0LiBVc2luZyB0
aGUgd2hvbGUgZnJhbWUgZnJvbSB0aGUgcGFnZSBzZWVtcyBvdmVya2lsbC4KKyAgICBDR1JlY3Qg
Ym91bmRhcnlSZWN0ID0gW3NlbGYgZnJhbWVdOworICAgIGlmIChhbGxIaWdobGlnaHRSZWN0c0Fy
ZVJlY3RpbGluZWFyKQorICAgICAgICBbX2hpZ2hsaWdodFZpZXcuZ2V0KCkgc2V0RnJhbWVzOnJl
Y3RzLmdldCgpIGJvdW5kYXJ5UmVjdDpib3VuZGFyeVJlY3RdOworICAgIGVsc2UgeworICAgICAg
ICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHF1YWRzID0gYWRvcHROUyhbW05TTXV0YWJsZUFy
cmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnN0YXRpY19jYXN0PGNvbnN0IE5TVUludGVnZXI+
KHF1YWRDb3VudCldKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBxdWFkQ291bnQ7
ICsraSkgeworICAgICAgICAgICAgY29uc3QgRmxvYXRRdWFkJiBxdWFkID0gaGlnaGxpZ2h0ZWRR
dWFkc1tpXTsKKyAgICAgICAgICAgIEZsb2F0UXVhZCBleHRlbmRlZFF1YWQgPSBpbmZsYXRlUXVh
ZChxdWFkLCBVSVdlYlZpZXdNaW5pbXVtSGlnaGxpZ2h0UmFkaXVzKTsKKyAgICAgICAgICAgIFtx
dWFkcy5nZXQoKSBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ0dQb2ludDpleHRlbmRlZFF1
YWQucDEoKV1dOworICAgICAgICAgICAgW3F1YWRzLmdldCgpIGFkZE9iamVjdDpbTlNWYWx1ZSB2
YWx1ZVdpdGhDR1BvaW50OmV4dGVuZGVkUXVhZC5wMigpXV07CisgICAgICAgICAgICBbcXVhZHMu
Z2V0KCkgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHUG9pbnQ6ZXh0ZW5kZWRRdWFkLnAz
KCldXTsKKyAgICAgICAgICAgIFtxdWFkcy5nZXQoKSBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVX
aXRoQ0dQb2ludDpleHRlbmRlZFF1YWQucDQoKV1dOworICAgICAgICB9CisgICAgICAgIFtfaGln
aGxpZ2h0Vmlldy5nZXQoKSBzZXRRdWFkczpxdWFkcy5nZXQoKSBib3VuZGFyeVJlY3Q6Ym91bmRh
cnlSZWN0XTsKKyAgICB9CisKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGJvcmRlclJh
ZGlpID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OjRd
KTsKKyAgICBbYm9yZGVyUmFkaWkuZ2V0KCkgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENH
U2l6ZTpDR1NpemVNYWtlKHRvcExlZnRSYWRpdXMud2lkdGgoKSArIFVJV2ViVmlld01pbmltdW1I
aWdobGlnaHRSYWRpdXMsIHRvcExlZnRSYWRpdXMuaGVpZ2h0KCkgKyBVSVdlYlZpZXdNaW5pbXVt
SGlnaGxpZ2h0UmFkaXVzKV1dOworICAgIFtib3JkZXJSYWRpaS5nZXQoKSBhZGRPYmplY3Q6W05T
VmFsdWUgdmFsdWVXaXRoQ0dTaXplOkNHU2l6ZU1ha2UodG9wUmlnaHRSYWRpdXMud2lkdGgoKSAr
IFVJV2ViVmlld01pbmltdW1IaWdobGlnaHRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLmhlaWdodCgp
ICsgVUlXZWJWaWV3TWluaW11bUhpZ2hsaWdodFJhZGl1cyldXTsKKyAgICBbYm9yZGVyUmFkaWku
Z2V0KCkgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHU2l6ZTpDR1NpemVNYWtlKGJvdHRv
bUxlZnRSYWRpdXMud2lkdGgoKSArIFVJV2ViVmlld01pbmltdW1IaWdobGlnaHRSYWRpdXMsIGJv
dHRvbUxlZnRSYWRpdXMuaGVpZ2h0KCkgKyBVSVdlYlZpZXdNaW5pbXVtSGlnaGxpZ2h0UmFkaXVz
KV1dOworICAgIFtib3JkZXJSYWRpaS5nZXQoKSBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRo
Q0dTaXplOkNHU2l6ZU1ha2UoYm90dG9tUmlnaHRSYWRpdXMud2lkdGgoKSArIFVJV2ViVmlld01p
bmltdW1IaWdobGlnaHRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzLmhlaWdodCgpICsgVUlXZWJW
aWV3TWluaW11bUhpZ2hsaWdodFJhZGl1cyldXTsKKyAgICBbX2hpZ2hsaWdodFZpZXcuZ2V0KCkg
c2V0Q29ybmVyUmFkaWk6Ym9yZGVyUmFkaWkuZ2V0KCldOworfQorCistICh2b2lkKV9jYW5jZWxM
b25nUHJlc3NHZXN0dXJlUmVjb2duaXplcgoreworICAgIFtfaGlnaGxpZ2h0TG9uZ1ByZXNzR2Vz
dHVyZVJlY29nbml6ZXIuZ2V0KCkgY2FuY2VsXTsKK30KKworLSAodm9pZClfZGlkU2Nyb2xsCit7
CisgICAgW3NlbGYgX2NhbmNlbExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyXTsKKyAgICBbc2Vs
ZiBfY2FuY2VsSW50ZXJhY3Rpb25dOworfQorCistIChCT09MKV9yZXF1aXJlc0tleWJvYXJkUmVz
ZXRPblJlbG9hZAoreworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKEJPT0wpZ2VzdHVyZVJlY29n
bml6ZXJTaG91bGRCZWdpbjooVUlHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVy
Cit7CisgICAgaWYgKF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50KSB7CisgICAgICAgIGlmIChnZXN0
dXJlUmVjb2duaXplciA9PSBfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgfHwg
Z2VzdHVyZVJlY29nbml6ZXIgPT0gX3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyKQorICAgICAg
ICAgICAgcmV0dXJuIE5POworICAgIH0KKyAgICByZXR1cm4gWUVTOworfQorCistICh2b2lkKV9j
YW5jZWxJbnRlcmFjdGlvbgoreworICAgIF9pc1RhcEhpZ2hsaWdodElEVmFsaWQgPSBOTzsKKyAg
ICBbX2hpZ2hsaWdodFZpZXcuZ2V0KCkgcmVtb3ZlRnJvbVN1cGVydmlld107Cit9CisKKy0gKHZv
aWQpX2hpZ2hsaWdodExvbmdQcmVzc1JlY29nbml6ZWQ6KFVJTG9uZ1ByZXNzR2VzdHVyZVJlY29n
bml6ZXIgKilnZXN0dXJlUmVjb2duaXplcgoreworICAgIEFTU0VSVChnZXN0dXJlUmVjb2duaXpl
ciA9PSBfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIpOworCisgICAgc3dpdGNo
IChbZ2VzdHVyZVJlY29nbml6ZXIgc3RhdGVdKSB7CisgICAgICAgIGNhc2UgVUlHZXN0dXJlUmVj
b2duaXplclN0YXRlQmVnYW46CisgICAgICAgICAgICBfcGFnZS0+dGFwSGlnaGxpZ2h0QXRQb3Np
dGlvbihbZ2VzdHVyZVJlY29nbml6ZXIgc3RhcnRQb2ludF0sIF9sYXRlc3RUYXBIaWdobGlnaHRJ
RCk7CisgICAgICAgICAgICBfaXNUYXBIaWdobGlnaHRJRFZhbGlkID0gWUVTOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVUlHZXN0dXJlUmVjb2duaXplclN0YXRlRW5kZWQ6Cisg
ICAgICAgICAgICBbc2VsZiBfYXR0ZW1wdENsaWNrQXRMb2NhdGlvbjpbZ2VzdHVyZVJlY29nbml6
ZXIgc3RhcnRQb2ludF1dOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVUlHZXN0
dXJlUmVjb2duaXplclN0YXRlQ2FuY2VsbGVkOgorICAgICAgICAgICAgW3NlbGYgX2NhbmNlbElu
dGVyYWN0aW9uXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCistICh2b2lkKV9zaW5nbGVUYXBSZWNvZ25pemVkOihV
SVRhcEdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIKK3sKKyAgICBbc2VsZiBf
YXR0ZW1wdENsaWNrQXRMb2NhdGlvbjpbZ2VzdHVyZVJlY29nbml6ZXIgbG9jYXRpb25dXTsKK30K
KworLSAoQk9PTClnZXN0dXJlUmVjb2duaXplcjooVUlHZXN0dXJlUmVjb2duaXplciAqKXByZXZl
bnRpbmdHZXN0dXJlUmVjb2duaXplciBjYW5QcmV2ZW50R2VzdHVyZVJlY29nbml6ZXI6KFVJR2Vz
dHVyZVJlY29nbml6ZXIgKilwcmV2ZW50ZWRHZXN0dXJlUmVjb2duaXplcgoreworICAgIEJPT0wg
c2hvdWxkTm90UHJldmVudFBhbkdlc3R1cmUgPSBwcmV2ZW50aW5nR2VzdHVyZVJlY29nbml6ZXIg
PT0gX2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyOworICAgIHJldHVybiAhKHNo
b3VsZE5vdFByZXZlbnRQYW5HZXN0dXJlICYmIFtwcmV2ZW50ZWRHZXN0dXJlUmVjb2duaXplciBp
c0tpbmRPZkNsYXNzOk5TQ2xhc3NGcm9tU3RyaW5nKEAiVUlTY3JvbGxWaWV3UGFuR2VzdHVyZVJl
Y29nbml6ZXIiKV0pOworfQorCistICh2b2lkKV9hdHRlbXB0Q2xpY2tBdExvY2F0aW9uOihDR1Bv
aW50KWxvY2F0aW9uCit7CisgICAgLy8gRklYTUU6IElkZWFsbHksIHdlIHNob3VsZCBhbHdheXMg
cHJvdmlkZSBzb21lIHZpc3VhbCBmZWVkYmFjayBvbiBjbGljay4gSWYgYSBzaG9ydCB0YXAgZGlk
IG5vdCB0cmlnZ2VyIHRoZQorICAgIC8vIHRhcCBoaWdobGlnaHQsIHdlIHNob3VsZCBzaG93IG9u
ZSBiYXNlZCBvbiBhIHRpbWVyIGlmIHdlIGNvbW1pdCB0aGUgc3ludGhldGljIG1vdXNlIGV2ZW50
cy4KKyAgICBbc2VsZiBfY2FuY2VsSW50ZXJhY3Rpb25dOworCisgICAgaWYgKCFbc2VsZiBpc0Zp
cnN0UmVzcG9uZGVyXSkKKyAgICAgICAgW3NlbGYgYmVjb21lRmlyc3RSZXNwb25kZXJdOworCisg
ICAgX3BhZ2UtPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGFuZGxlVGFwKElu
dFBvaW50KGxvY2F0aW9uKSksIF9wYWdlLT5wYWdlSUQoKSk7Cit9CisKKy0gKFVJVmlldyAqKWlu
cHV0QWNjZXNzb3J5VmlldworeworICAgIGlmICghX2NhbkJlRmlyc3RSZXNwb25kZXIpCisgICAg
ICAgIHJldHVybiBuaWw7CisgICAgCisgICAgaWYgKCFfYWNjZXNzb3J5KSB7CisgICAgICAgIF9h
Y2Nlc3NvcnkgPSBbW1VJV2ViRm9ybUFjY2Vzc29yeSBhbGxvY10gaW5pdF07CisgICAgICAgIF9h
Y2Nlc3NvcnkuZGVsZWdhdGUgPSBzZWxmOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gX2FjY2Vz
c29yeTsKK30KKworLSAoTlNBcnJheSAqKXN1cHBvcnRlZFBhc3RlYm9hcmRUeXBlc0ZvckN1cnJl
bnRTZWxlY3Rpb24KK3sKKyAgICBpZiAoX3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNO
b25lKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIHN0YXRpYyBOU011dGFibGVBcnJh
eSAqcmljaFR5cGVzID0gbmlsOworICAgIHN0YXRpYyBOU011dGFibGVBcnJheSAqcGxhaW5UZXh0
VHlwZXMgPSBuaWw7CisgICAgaWYgKCFwbGFpblRleHRUeXBlcykgeworICAgICAgICBwbGFpblRl
eHRUeXBlcyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOworICAgICAgICAvLyBGSVhN
RTogc2hvdWxkIGFkZCBbcGxhaW5UZXh0VHlwZXMgYWRkT2JqZWN0OihpZClrVVRUeXBlVVJMXTsK
KyAgICAgICAgLy8gd2hlbiB3ZSBmaWd1cmUgb3V0IGhvdyB0byBzaGFyZSB0aGlzIHR5cGUgYmV0
d2VlbiBXZWJDb3JlIGFuZCBXZWJLaXQyCisgICAgICAgIFtwbGFpblRleHRUeXBlcyBhZGRPYmpl
Y3RzRnJvbUFycmF5OlVJUGFzdGVib2FyZFR5cGVMaXN0U3RyaW5nXTsKKworICAgICAgICByaWNo
VHlwZXMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKKyAgICAgICAgLy8gRklYTUU6
IHNob3VsZCBhZGQgW3JpY2hUeXBlcyBhZGRPYmplY3Q6KFBhc3RlYm9hcmRUeXBlczo6V2ViQXJj
aGl2ZVBib2FyZFR5cGUpXTsKKyAgICAgICAgLy8gd2hlbiB3ZSBmaWd1cmUgb3V0IGhvdyB0byBz
aGFyZSB0aGlzIHR5cGUgYmV0d2VlbiBXZWJDb3JlIGFuZCBXZWJLaXQyCisgICAgICAgIFtyaWNo
VHlwZXMgYWRkT2JqZWN0c0Zyb21BcnJheTpVSVBhc3RlYm9hcmRUeXBlTGlzdEltYWdlXTsKKyAg
ICAgICAgW3JpY2hUeXBlcyBhZGRPYmplY3RzRnJvbUFycmF5OnBsYWluVGV4dFR5cGVzXTsKKyAg
ICB9CisKKyAgICByZXR1cm4gKF9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudFJpY2hseUVk
aXRhYmxlKSA/IHJpY2hUeXBlcyA6IHBsYWluVGV4dFR5cGVzOworfQorCistICh2b2lkKV9hZGRT
aG9ydGN1dDooaWQpc2VuZGVyCit7CisgICAgLy8gRklYTUU6IFRvIGJlIGltcGxlbWVudGVkLgor
fQorCistICh2b2lkKV9wcm9tcHRGb3JSZXBsYWNlOihpZClzZW5kZXIKK3sKKyAgICAvLyBGSVhN
RTogVG8gYmUgaW1wbGVtZW50ZWQuCit9CisKKy0gKHZvaWQpcmVwbGFjZTooaWQpc2VuZGVyCit7
CisgICAgLy8gRklYTUU6IFRvIGJlIGltcGxlbWVudGVkLgorfQorCistIChCT09MKWNhblBlcmZv
cm1BY3Rpb246KFNFTClhY3Rpb24gd2l0aFNlbmRlcjooaWQpc2VuZGVyCit7CisgICAgLy8gRklY
TUU6IG5lZWQgdG8gaGFuZGxlIGhhc1dlYlNlbGVjdGlvbgorICAgIEJPT0wgaGFzV2ViU2VsZWN0
aW9uID0gTk87CisKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcihfc2hvd1RleHRTdHlsZU9w
dGlvbnM6KSkKKyAgICAgICAgcmV0dXJuIF9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudFJp
Y2hseUVkaXRhYmxlICYmIF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzUmFuZ2UgJiYg
IV9zaG93aW5nVGV4dFN0eWxlT3B0aW9uczsKKyAgICBpZiAoX3Nob3dpbmdUZXh0U3R5bGVPcHRp
b25zKQorICAgICAgICByZXR1cm4gKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlQm9sZGZhY2U6
KSB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUl0YWxpY3M6KSB8fCBhY3Rpb24gPT0gQHNl
bGVjdG9yKHRvZ2dsZVVuZGVybGluZTopKTsKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcihj
dXQ6KSkKKyAgICAgICAgcmV0dXJuICFfcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0luUGFzc3dvcmRG
aWVsZCAmJiBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZSAmJiBfcGFnZS0+
ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc1JhbmdlOworICAgIAorICAgIGlmIChhY3Rpb24gPT0g
QHNlbGVjdG9yKHBhc3RlOikpIHsKKyAgICAgICAgaWYgKF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNl
bGVjdGlvbklzTm9uZSB8fCAhX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUp
CisgICAgICAgICAgICByZXR1cm4gTk87CisgICAgICAgIFVJUGFzdGVib2FyZCAqcGFzdGVib2Fy
ZCA9IFtVSVBhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRdOworICAgICAgICBOU0FycmF5ICp0
eXBlcyA9IFtzZWxmIHN1cHBvcnRlZFBhc3RlYm9hcmRUeXBlc0ZvckN1cnJlbnRTZWxlY3Rpb25d
OworICAgICAgICBOU0luZGV4U2V0ICppbmRpY2VzID0gW05TSW5kZXhTZXQgaW5kZXhTZXRXaXRo
SW5kZXhlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3Bhc3RlYm9hcmQgbnVtYmVyT2ZJdGVtc10p
XTsKKyAgICAgICAgcmV0dXJuIFtwYXN0ZWJvYXJkIGNvbnRhaW5zUGFzdGVib2FyZFR5cGVzOnR5
cGVzIGluSXRlbVNldDppbmRpY2VzXTsKKyAgICB9CisKKyAgICBpZiAoYWN0aW9uID09IEBzZWxl
Y3Rvcihjb3B5OikpIHsKKyAgICAgICAgaWYgKF9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzSW5QYXNz
d29yZEZpZWxkKQorICAgICAgICAgICAgcmV0dXJuIE5POworICAgICAgICByZXR1cm4gaGFzV2Vi
U2VsZWN0aW9uIHx8IF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzUmFuZ2U7CisgICAg
fQorCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoX2RlZmluZTopKSB7CisgICAgICAgIGlm
IChfcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0luUGFzc3dvcmRGaWVsZCB8fCAhKGhhc1dlYlNlbGVj
dGlvbiB8fCBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc1JhbmdlKSkKKyAgICAgICAg
ICAgIHJldHVybiBOTzsKKworICAgICAgICBOU1VJbnRlZ2VyIHRleHRMZW5ndGggPSBfcGFnZS0+
ZWRpdG9yU3RhdGUoKS5zZWxlY3RlZFRleHRMZW5ndGg7CisgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgYmUgY2FsbGluZyBVSVJlZmVyZW5jZUxpYnJhcnlWaWV3Q29udHJvbGxlciB0byBjaGVj
ayBpZiB0aGUgbGVuZ3RoIGlzCisgICAgICAgIC8vIGFjY2VwdGFibGUsIGJ1dCB0aGUgaW50ZXJm
YWNlIHRha2VzIGEgc3RyaW5nLgorICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vMTUyNTQ0MDY+
CisgICAgICAgIGlmICghdGV4dExlbmd0aCB8fCB0ZXh0TGVuZ3RoID4gMjAwKQorICAgICAgICAg
ICAgcmV0dXJuIE5POworCisgICAgICAgIHJldHVybiBZRVM7CisgICAgfQorCisgICAgaWYgKGFj
dGlvbiA9PSBAc2VsZWN0b3IoX2FkZFNob3J0Y3V0OikpIHsKKyAgICAgICAgaWYgKF9wYWdlLT5l
ZGl0b3JTdGF0ZSgpLmlzSW5QYXNzd29yZEZpZWxkIHx8ICEoaGFzV2ViU2VsZWN0aW9uIHx8IF9w
YWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzUmFuZ2UpKQorICAgICAgICAgICAgcmV0dXJu
IE5POworICAgICAgICAvLyBGSVhNRTogbmVlZCB0byBpbXBsZW1lbnQsIHJldHVybmluZyBOTyBh
bHdheXMgZm9yIG5vdy4KKyAgICAgICAgcmV0dXJuIE5POworICAgIH0KKworICAgIGlmIChhY3Rp
b24gPT0gQHNlbGVjdG9yKF9wcm9tcHRGb3JSZXBsYWNlOikpCisgICAgICAgIC8vIEZJWE1FOiBu
ZWVkIHRvIGltcGxlbWVudAorICAgICAgICByZXR1cm4gTk87CisKKyAgICBpZiAoYWN0aW9uID09
IEBzZWxlY3RvcihzZWxlY3Q6KSkKKyAgICAgICAgLy8gRGlzYWJsZSBzZWxlY3QgaW4gcGFzc3dv
cmQgZmllbGRzIHNvIHRoYXQgeW91IGNhbid0IHNlZSB3b3JkIGJvdW5kYXJpZXMuCisgICAgICAg
IHJldHVybiAhX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNJblBhc3N3b3JkRmllbGQgJiYgW3NlbGYg
aGFzQ29udGVudF0gJiYgIV9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzTm9uZSAmJiAh
X3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNSYW5nZTsKKworICAgIGlmIChhY3Rpb24g
PT0gQHNlbGVjdG9yKHNlbGVjdEFsbDopKSB7CisgICAgICAgIGlmIChfcGFnZS0+ZWRpdG9yU3Rh
dGUoKS5zZWxlY3Rpb25Jc05vbmUgfHwgIVtzZWxmIGhhc0NvbnRlbnRdKQorICAgICAgICAgICAg
cmV0dXJuIE5POworICAgICAgICBpZiAoIV9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklz
UmFuZ2UpCisgICAgICAgICAgICByZXR1cm4gWUVTOworICAgICAgICAvLyBFbmFibGUgc2VsZWN0
QWxsIGZvciBub24tZWRpdGFibGUgdGV4dCwgd2hlcmUgdGhlIHVzZXIgY2FuJ3QgYWNjZXNzCisg
ICAgICAgIC8vIHRoaXMgY29tbWFuZCB2aWEgbG9uZy1wcmVzcyB0byBnZXQgYSBjYXJldC4KKyAg
ICAgICAgaWYgKF9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlKQorICAgICAg
ICAgICAgcmV0dXJuIE5POworICAgICAgICAvLyBEb24ndCBhdHRlbXB0IHNlbGVjdEFsbCB3aXRo
IGdlbmVyYWwgd2ViIGNvbnRlbnQuCisgICAgICAgIGlmIChoYXNXZWJTZWxlY3Rpb24pCisgICAg
ICAgICAgICByZXR1cm4gTk87CisgICAgICAgIC8vIEZJWE1FOiBPbmx5IGVuYWJsZSBpZiB0aGUg
c2VsZWN0aW9uIGRvZXNuJ3QgYWxyZWFkeSBzcGFuIHRoZSBlbnRpcmUgZG9jdW1lbnQuCisgICAg
ICAgIHJldHVybiBZRVM7CisgICAgfQorCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IocmVw
bGFjZTopKQorICAgICAgICByZXR1cm4gX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRp
dGFibGUgJiYgIV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzSW5QYXNzd29yZEZpZWxkOworCisgICAg
cmV0dXJuIFtzdXBlciBjYW5QZXJmb3JtQWN0aW9uOmFjdGlvbiB3aXRoU2VuZGVyOnNlbmRlcl07
Cit9CisKKy0gKHZvaWQpX3Jlc2V0U2hvd2luZ1RleHRTdHlsZTooTlNOb3RpZmljYXRpb24gKilu
b3RpZmljYXRpb24KK3sKKyAgICBfc2hvd2luZ1RleHRTdHlsZU9wdGlvbnMgPSBOTzsKKyAgICBb
X3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQgaGlkZVRleHRTdHlsZU9wdGlvbnNdOworfQorCistICh2
b2lkKWNvcHk6KGlkKXNlbmRlcgoreworICAgIF9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQoQVND
SUlMaXRlcmFsKCJjb3B5IikpOworfQorCistICh2b2lkKWN1dDooaWQpc2VuZGVyCit7CisgICAg
W3NlbGYuaW5wdXREZWxlZ2F0ZSB0ZXh0V2lsbENoYW5nZTpzZWxmXTsKKworICAgIF9wYWdlLT5l
eGVjdXRlRWRpdENvbW1hbmQoQVNDSUlMaXRlcmFsKCJjdXQiKSk7CisKKyAgICBbc2VsZi5pbnB1
dERlbGVnYXRlIHRleHREaWRDaGFuZ2U6c2VsZl07Cit9CisKKy0gKHZvaWQpcGFzdGU6KGlkKXNl
bmRlcgoreworICAgIFtzZWxmLmlucHV0RGVsZWdhdGUgdGV4dFdpbGxDaGFuZ2U6c2VsZl07Cisg
ICAgCisgICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFuZChBU0NJSUxpdGVyYWwoInBhc3RlIikp
OworICAgIAorICAgIFtzZWxmLmlucHV0RGVsZWdhdGUgdGV4dERpZENoYW5nZTpzZWxmXTsKK30K
KworLSAodm9pZClzZWxlY3Q6KGlkKXNlbmRlcgoreworICAgIFtfdGV4dFNlbGVjdGlvbkFzc2lz
dGFudCBzZWxlY3RXb3JkXTsKKyAgICAvLyBXZSBjYW5ub3QgdXNlIHNlbGVjdFdvcmQgY29tbWFu
ZCwgYmVjYXVzZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gc2VsZWN0IHRoZSB3b3JkIGV2ZW4gd2hl
biBpdCBpcyB0aGUgbGFzdCBpbiB0aGUgcGFyYWdyYXBoLgorICAgIF9wYWdlLT5leHRlbmRTZWxl
Y3Rpb24oV29yZEdyYW51bGFyaXR5KTsKK30KKworLSAodm9pZClzZWxlY3RBbGw6KGlkKXNlbmRl
cgoreworICAgIFtfdGV4dFNlbGVjdGlvbkFzc2lzdGFudCBzZWxlY3RBbGw6c2VuZGVyXTsKKyAg
ICBfcGFnZS0+ZXhlY3V0ZUVkaXRDb21tYW5kKEFTQ0lJTGl0ZXJhbCgic2VsZWN0QWxsIikpOwor
fQorCistICh2b2lkKXRvZ2dsZUJvbGRmYWNlOihpZClzZW5kZXIKK3sKKyAgICBpZiAoIV9wYWdl
LT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKQorICAgICAgICByZXR1cm47
CisKKyAgICBfcGFnZS0+ZXhlY3V0ZUVkaXRDb21tYW5kKEFTQ0lJTGl0ZXJhbCgidG9nZ2xlQm9s
ZCIpKTsKK30KKworLSAodm9pZCl0b2dnbGVJdGFsaWNzOihpZClzZW5kZXIKK3sKKyAgICBpZiAo
IV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBfcGFnZS0+ZXhlY3V0ZUVkaXRDb21tYW5kKEFTQ0lJTGl0ZXJhbCgidG9n
Z2xlSXRhbGljIikpOworfQorCistICh2b2lkKXRvZ2dsZVVuZGVybGluZTooaWQpc2VuZGVyCit7
CisgICAgaWYgKCFfcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFuZChBU0NJSUxp
dGVyYWwoInRvZ2dsZVVuZGVybGluZSIpKTsKK30KKworLSAodm9pZClfc2hvd1RleHRTdHlsZU9w
dGlvbnM6KGlkKXNlbmRlcgoreworICAgIF9zaG93aW5nVGV4dFN0eWxlT3B0aW9ucyA9IFlFUzsK
KyAgICBbX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQgc2hvd1RleHRTdHlsZU9wdGlvbnNdOworfQor
CistICh2b2lkKV9zaG93RGljdGlvbmFyeTooTlNTdHJpbmcgKil0ZXh0Cit7CisgICAgQ0dSZWN0
IHByZXNlbnRhdGlvblJlY3QgPSBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25SZWN0c1sw
XS5yZWN0KCk7CisgICAgWyhVSVdLVGV4dEludGVyYWN0aW9uQXNzaXN0YW50ICopc2VsZi5pbnRl
cmFjdGlvbkFzc2lzdGFudCBzaG93RGljdGlvbmFyeUZvcjp0ZXh0IGZyb21SZWN0OnByZXNlbnRh
dGlvblJlY3RdOworfQorCitzdGF0aWMgdm9pZCBzZWxlY3RlZFN0cmluZyhXS1N0cmluZ1JlZiBz
dHJpbmcsIFdLRXJyb3JSZWYgZXJyb3IsIHZvaWQqIGNvbnRleHQpCit7CisgICAgaWYgKGVycm9y
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFzdHJpbmcpCisgICAgICAgIHJldHVybjsKKwor
ICAgIE5TU3RyaW5nICpjb252ZXJ0ZWRTdHJpbmcgPSB0b0ltcGwoc3RyaW5nKS0+c3RyaW5nKCk7
CisgICAgV0tJbnRlcmFjdGlvblZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxXS0ludGVyYWN0aW9u
Vmlldyo+KGNvbnRleHQpOworICAgIEFTU0VSVCh2aWV3KTsKKyAgICBbdmlldyBfc2hvd0RpY3Rp
b25hcnk6Y29udmVydGVkU3RyaW5nXTsKK30KKworLSAodm9pZClfZGVmaW5lOihpZClzZW5kZXIK
K3sKKyAgICBfcGFnZS0+Z2V0U2VsZWN0aW9uT3JDb250ZW50c0FzU3RyaW5nKFN0cmluZ0NhbGxi
YWNrOjpjcmVhdGUoc2VsZiwgc2VsZWN0ZWRTdHJpbmcpKTsKK30KKworLy8gVUlXS0ludGVyYWN0
aW9uVmlld1Byb3RvY29sCisKK3N0YXRpYyBpbmxpbmUgV0tHZXN0dXJlVHlwZSB0b1dLR2VzdHVy
ZVR5cGUoVUlXS0dlc3R1cmVUeXBlIGdlc3R1cmVUeXBlKQoreworICAgIHN3aXRjaCAoZ2VzdHVy
ZVR5cGUpIHsKKyAgICBjYXNlIFVJV0tHZXN0dXJlTG91cGU6CisgICAgICAgIHJldHVybiBXS0dl
c3R1cmVMb3VwZTsKKyAgICBjYXNlIFVJV0tHZXN0dXJlT25lRmluZ2VyVGFwOgorICAgICAgICBy
ZXR1cm4gV0tHZXN0dXJlT25lRmluZ2VyVGFwOworICAgIGNhc2UgVUlXS0dlc3R1cmVUYXBBbmRB
SGFsZjoKKyAgICAgICAgcmV0dXJuIFdLR2VzdHVyZVRhcEFuZEFIYWxmOworICAgIGNhc2UgVUlX
S0dlc3R1cmVEb3VibGVUYXA6CisgICAgICAgIHJldHVybiBXS0dlc3R1cmVEb3VibGVUYXA7Cisg
ICAgY2FzZSBVSVdLR2VzdHVyZVRhcEFuZEhhbGY6CisgICAgICAgIHJldHVybiBXS0dlc3R1cmVU
YXBBbmRIYWxmOworICAgIGNhc2UgVUlXS0dlc3R1cmVEb3VibGVUYXBJblVuZWRpdGFibGU6Cisg
ICAgICAgIHJldHVybiBXS0dlc3R1cmVEb3VibGVUYXBJblVuZWRpdGFibGU7CisgICAgY2FzZSBV
SVdLR2VzdHVyZU9uZUZpbmdlclRhcEluVW5lZGl0YWJsZToKKyAgICAgICAgcmV0dXJuIFdLR2Vz
dHVyZU9uZUZpbmdlclRhcEluVW5lZGl0YWJsZTsKKyAgICBjYXNlIFVJV0tHZXN0dXJlT25lRmlu
Z2VyVGFwU2VsZWN0c0FsbDoKKyAgICAgICAgcmV0dXJuIFdLR2VzdHVyZU9uZUZpbmdlclRhcFNl
bGVjdHNBbGw7CisgICAgY2FzZSBVSVdLR2VzdHVyZU9uZUZpbmdlckRvdWJsZVRhcDoKKyAgICAg
ICAgcmV0dXJuIFdLR2VzdHVyZU9uZUZpbmdlckRvdWJsZVRhcDsKKyAgICBjYXNlIFVJV0tHZXN0
dXJlT25lRmluZ2VyVHJpcGxlVGFwOgorICAgICAgICByZXR1cm4gV0tHZXN0dXJlT25lRmluZ2Vy
VHJpcGxlVGFwOworICAgIGNhc2UgVUlXS0dlc3R1cmVUd29GaW5nZXJTaW5nbGVUYXA6CisgICAg
ICAgIHJldHVybiBXS0dlc3R1cmVUd29GaW5nZXJTaW5nbGVUYXA7CisgICAgY2FzZSBVSVdLR2Vz
dHVyZVR3b0ZpbmdlclJhbmdlZFNlbGVjdEdlc3R1cmU6CisgICAgICAgIHJldHVybiBXS0dlc3R1
cmVUd29GaW5nZXJSYW5nZWRTZWxlY3RHZXN0dXJlOworICAgIGNhc2UgVUlXS0dlc3R1cmVUYXBP
bkxpbmtXaXRoR2VzdHVyZToKKyAgICAgICAgcmV0dXJuIFdLR2VzdHVyZVRhcE9uTGlua1dpdGhH
ZXN0dXJlOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gV0tH
ZXN0dXJlTG91cGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgVUlXS0dlc3R1cmVUeXBlIHRvVUlXS0dl
c3R1cmVUeXBlKFdLR2VzdHVyZVR5cGUgZ2VzdHVyZVR5cGUpCit7CisgICAgc3dpdGNoIChnZXN0
dXJlVHlwZSkgeworICAgIGNhc2UgV0tHZXN0dXJlTG91cGU6CisgICAgICAgIHJldHVybiBVSVdL
R2VzdHVyZUxvdXBlOworICAgIGNhc2UgV0tHZXN0dXJlT25lRmluZ2VyVGFwOgorICAgICAgICBy
ZXR1cm4gVUlXS0dlc3R1cmVPbmVGaW5nZXJUYXA7CisgICAgY2FzZSBXS0dlc3R1cmVUYXBBbmRB
SGFsZjoKKyAgICAgICAgcmV0dXJuIFVJV0tHZXN0dXJlVGFwQW5kQUhhbGY7CisgICAgY2FzZSBX
S0dlc3R1cmVEb3VibGVUYXA6CisgICAgICAgIHJldHVybiBVSVdLR2VzdHVyZURvdWJsZVRhcDsK
KyAgICBjYXNlIFdLR2VzdHVyZVRhcEFuZEhhbGY6CisgICAgICAgIHJldHVybiBVSVdLR2VzdHVy
ZVRhcEFuZEhhbGY7CisgICAgY2FzZSBXS0dlc3R1cmVEb3VibGVUYXBJblVuZWRpdGFibGU6Cisg
ICAgICAgIHJldHVybiBVSVdLR2VzdHVyZURvdWJsZVRhcEluVW5lZGl0YWJsZTsKKyAgICBjYXNl
IFdLR2VzdHVyZU9uZUZpbmdlclRhcEluVW5lZGl0YWJsZToKKyAgICAgICAgcmV0dXJuIFVJV0tH
ZXN0dXJlT25lRmluZ2VyVGFwSW5VbmVkaXRhYmxlOworICAgIGNhc2UgV0tHZXN0dXJlT25lRmlu
Z2VyVGFwU2VsZWN0c0FsbDoKKyAgICAgICAgcmV0dXJuIFVJV0tHZXN0dXJlT25lRmluZ2VyVGFw
U2VsZWN0c0FsbDsKKyAgICBjYXNlIFdLR2VzdHVyZU9uZUZpbmdlckRvdWJsZVRhcDoKKyAgICAg
ICAgcmV0dXJuIFVJV0tHZXN0dXJlT25lRmluZ2VyRG91YmxlVGFwOworICAgIGNhc2UgV0tHZXN0
dXJlT25lRmluZ2VyVHJpcGxlVGFwOgorICAgICAgICByZXR1cm4gVUlXS0dlc3R1cmVPbmVGaW5n
ZXJUcmlwbGVUYXA7CisgICAgY2FzZSBXS0dlc3R1cmVUd29GaW5nZXJTaW5nbGVUYXA6CisgICAg
ICAgIHJldHVybiBVSVdLR2VzdHVyZVR3b0ZpbmdlclNpbmdsZVRhcDsKKyAgICBjYXNlIFdLR2Vz
dHVyZVR3b0ZpbmdlclJhbmdlZFNlbGVjdEdlc3R1cmU6CisgICAgICAgIHJldHVybiBVSVdLR2Vz
dHVyZVR3b0ZpbmdlclJhbmdlZFNlbGVjdEdlc3R1cmU7CisgICAgY2FzZSBXS0dlc3R1cmVUYXBP
bkxpbmtXaXRoR2VzdHVyZToKKyAgICAgICAgcmV0dXJuIFVJV0tHZXN0dXJlVGFwT25MaW5rV2l0
aEdlc3R1cmU7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIFdLU2VsZWN0aW9uVG91Y2ggdG9X
S1NlbGVjdGlvblRvdWNoKFVJV0tTZWxlY3Rpb25Ub3VjaCB0b3VjaCkKK3sKKyAgICBzd2l0Y2gg
KHRvdWNoKSB7CisgICAgY2FzZSBVSVdLU2VsZWN0aW9uVG91Y2hTdGFydGVkOgorICAgICAgICBy
ZXR1cm4gV0tTZWxlY3Rpb25Ub3VjaFN0YXJ0ZWQ7CisgICAgY2FzZSBVSVdLU2VsZWN0aW9uVG91
Y2hNb3ZlZDoKKyAgICAgICAgcmV0dXJuIFdLU2VsZWN0aW9uVG91Y2hNb3ZlZDsKKyAgICBjYXNl
IFVJV0tTZWxlY3Rpb25Ub3VjaEVuZGVkOgorICAgICAgICByZXR1cm4gV0tTZWxlY3Rpb25Ub3Vj
aEVuZGVkOworICAgIGNhc2UgVUlXS1NlbGVjdGlvblRvdWNoRW5kZWRNb3ZpbmdGb3J3YXJkOgor
ICAgICAgICByZXR1cm4gV0tTZWxlY3Rpb25Ub3VjaEVuZGVkTW92aW5nRm9yd2FyZDsKKyAgICBj
YXNlIFVJV0tTZWxlY3Rpb25Ub3VjaEVuZGVkTW92aW5nQmFja3dhcmQ6CisgICAgICAgIHJldHVy
biBXS1NlbGVjdGlvblRvdWNoRW5kZWRNb3ZpbmdCYWNrd2FyZDsKKyAgICBjYXNlIFVJV0tTZWxl
Y3Rpb25Ub3VjaEVuZGVkTm90TW92aW5nOgorICAgICAgICByZXR1cm4gV0tTZWxlY3Rpb25Ub3Vj
aEVuZGVkTm90TW92aW5nOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gV0tTZWxlY3Rpb25Ub3VjaEVuZGVkOworfQorCitzdGF0aWMgaW5saW5lIFVJV0tTZWxl
Y3Rpb25Ub3VjaCB0b1VJV0tTZWxlY3Rpb25Ub3VjaChXS1NlbGVjdGlvblRvdWNoIHRvdWNoKQor
eworICAgIHN3aXRjaCAodG91Y2gpIHsKKyAgICBjYXNlIFdLU2VsZWN0aW9uVG91Y2hTdGFydGVk
OgorICAgICAgICByZXR1cm4gVUlXS1NlbGVjdGlvblRvdWNoU3RhcnRlZDsKKyAgICBjYXNlIFdL
U2VsZWN0aW9uVG91Y2hNb3ZlZDoKKyAgICAgICAgcmV0dXJuIFVJV0tTZWxlY3Rpb25Ub3VjaE1v
dmVkOworICAgIGNhc2UgV0tTZWxlY3Rpb25Ub3VjaEVuZGVkOgorICAgICAgICByZXR1cm4gVUlX
S1NlbGVjdGlvblRvdWNoRW5kZWQ7CisgICAgY2FzZSBXS1NlbGVjdGlvblRvdWNoRW5kZWRNb3Zp
bmdGb3J3YXJkOgorICAgICAgICByZXR1cm4gVUlXS1NlbGVjdGlvblRvdWNoRW5kZWRNb3ZpbmdG
b3J3YXJkOworICAgIGNhc2UgV0tTZWxlY3Rpb25Ub3VjaEVuZGVkTW92aW5nQmFja3dhcmQ6Cisg
ICAgICAgIHJldHVybiBVSVdLU2VsZWN0aW9uVG91Y2hFbmRlZE1vdmluZ0JhY2t3YXJkOworICAg
IGNhc2UgV0tTZWxlY3Rpb25Ub3VjaEVuZGVkTm90TW92aW5nOgorICAgICAgICByZXR1cm4gVUlX
S1NlbGVjdGlvblRvdWNoRW5kZWROb3RNb3Zpbmc7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5l
IFdLR2VzdHVyZVJlY29nbml6ZXJTdGF0ZSB0b1dLR2VzdHVyZVJlY29nbml6ZXJTdGF0ZShVSUdl
c3R1cmVSZWNvZ25pemVyU3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAg
IGNhc2UgVUlHZXN0dXJlUmVjb2duaXplclN0YXRlUG9zc2libGU6CisgICAgICAgIHJldHVybiBX
S0dlc3R1cmVSZWNvZ25pemVyU3RhdGVQb3NzaWJsZTsKKyAgICBjYXNlIFVJR2VzdHVyZVJlY29n
bml6ZXJTdGF0ZUJlZ2FuOgorICAgICAgICByZXR1cm4gV0tHZXN0dXJlUmVjb2duaXplclN0YXRl
QmVnYW47CisgICAgY2FzZSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVDaGFuZ2VkOgorICAgICAg
ICByZXR1cm4gV0tHZXN0dXJlUmVjb2duaXplclN0YXRlQ2hhbmdlZDsKKyAgICBjYXNlIFVJR2Vz
dHVyZVJlY29nbml6ZXJTdGF0ZUNhbmNlbGxlZDoKKyAgICAgICAgcmV0dXJuIFdLR2VzdHVyZVJl
Y29nbml6ZXJTdGF0ZUNhbmNlbGxlZDsKKyAgICBjYXNlIFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0
ZUVuZGVkOgorICAgICAgICByZXR1cm4gV0tHZXN0dXJlUmVjb2duaXplclN0YXRlRW5kZWQ7Cisg
ICAgY2FzZSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVGYWlsZWQ6CisgICAgICAgIHJldHVybiBX
S0dlc3R1cmVSZWNvZ25pemVyU3RhdGVGYWlsZWQ7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5l
IFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZSB0b1VJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZShXS0dl
c3R1cmVSZWNvZ25pemVyU3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAg
IGNhc2UgV0tHZXN0dXJlUmVjb2duaXplclN0YXRlUG9zc2libGU6CisgICAgICAgIHJldHVybiBV
SUdlc3R1cmVSZWNvZ25pemVyU3RhdGVQb3NzaWJsZTsKKyAgICBjYXNlIFdLR2VzdHVyZVJlY29n
bml6ZXJTdGF0ZUJlZ2FuOgorICAgICAgICByZXR1cm4gVUlHZXN0dXJlUmVjb2duaXplclN0YXRl
QmVnYW47CisgICAgY2FzZSBXS0dlc3R1cmVSZWNvZ25pemVyU3RhdGVDaGFuZ2VkOgorICAgICAg
ICByZXR1cm4gVUlHZXN0dXJlUmVjb2duaXplclN0YXRlQ2hhbmdlZDsKKyAgICBjYXNlIFdLR2Vz
dHVyZVJlY29nbml6ZXJTdGF0ZUNhbmNlbGxlZDoKKyAgICAgICAgcmV0dXJuIFVJR2VzdHVyZVJl
Y29nbml6ZXJTdGF0ZUNhbmNlbGxlZDsKKyAgICBjYXNlIFdLR2VzdHVyZVJlY29nbml6ZXJTdGF0
ZUVuZGVkOgorICAgICAgICByZXR1cm4gVUlHZXN0dXJlUmVjb2duaXplclN0YXRlRW5kZWQ7Cisg
ICAgY2FzZSBXS0dlc3R1cmVSZWNvZ25pemVyU3RhdGVGYWlsZWQ6CisgICAgICAgIHJldHVybiBV
SUdlc3R1cmVSZWNvZ25pemVyU3RhdGVGYWlsZWQ7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBz
ZWxlY3Rpb25DaGFuZ2VkV2l0aEdlc3R1cmUoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50
LCB1aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCB1aW50MzJfdCBm
bGFncywgV0tFcnJvclJlZiBlcnJvciwgdm9pZCogY29udGV4dCkKK3sKKyAgICBpZiAoZXJyb3Ip
IHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgV0tJbnRlcmFjdGlvblZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxXS0ludGVyYWN0aW9u
Vmlldyo+KGNvbnRleHQpOworICAgIEFTU0VSVCh2aWV3KTsKKyAgICAvLyBGSVhNRTogbmVlZCB0
byBwYXNzIGZsYWdzIHRvIHNlbGVjdGlvbkNoYW5nZWRXaXRoR2VzdHVyZUF0LgorICAgIFsoVUlX
S1RleHRJbnRlcmFjdGlvbkFzc2lzdGFudCAqKVt2aWV3IGludGVyYWN0aW9uQXNzaXN0YW50XSBz
ZWxlY3Rpb25DaGFuZ2VkV2l0aEdlc3R1cmVBdDooQ0dQb2ludClwb2ludCB3aXRoR2VzdHVyZTp0
b1VJV0tHZXN0dXJlVHlwZSgoV0tHZXN0dXJlVHlwZSlnZXN0dXJlVHlwZSkgd2l0aFN0YXRlOnRv
VUlHZXN0dXJlUmVjb2duaXplclN0YXRlKHN0YXRpY19jYXN0PFdLR2VzdHVyZVJlY29nbml6ZXJT
dGF0ZT4oZ2VzdHVyZVN0YXRlKSldOworfQorCitzdGF0aWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2Vk
V2l0aFRvdWNoKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWludDMyX3QgdG91Y2gs
IFdLRXJyb3JSZWYgZXJyb3IsIHZvaWQqIGNvbnRleHQpCit7CisgICAgaWYgKGVycm9yKSB7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IFdLSW50ZXJhY3Rpb25WaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8V0tJbnRlcmFjdGlvblZpZXcq
Pihjb250ZXh0KTsKKyAgICBBU1NFUlQodmlldyk7CisgICAgWyhVSVdLVGV4dEludGVyYWN0aW9u
QXNzaXN0YW50ICopW3ZpZXcgaW50ZXJhY3Rpb25Bc3Npc3RhbnRdIHNlbGVjdGlvbkNoYW5nZWRX
aXRoVG91Y2hBdDooQ0dQb2ludClwb2ludCB3aXRoU2VsZWN0aW9uVG91Y2g6dG9VSVdLU2VsZWN0
aW9uVG91Y2goKFdLU2VsZWN0aW9uVG91Y2gpdG91Y2gpXTsKK30KKworLSAodm9pZCljaGFuZ2VT
ZWxlY3Rpb25XaXRoR2VzdHVyZUF0OihDR1BvaW50KXBvaW50IHdpdGhHZXN0dXJlOihVSVdLR2Vz
dHVyZVR5cGUpZ2VzdHVyZVR5cGUgd2l0aFN0YXRlOihVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGUp
c3RhdGUKK3sKKyAgICBfcGFnZS0+c2VsZWN0V2l0aEdlc3R1cmUoV2ViQ29yZTo6SW50UG9pbnQo
cG9pbnQpLCBDaGFyYWN0ZXJHcmFudWxhcml0eSwgdG9XS0dlc3R1cmVUeXBlKGdlc3R1cmVUeXBl
KSwgdG9XS0dlc3R1cmVSZWNvZ25pemVyU3RhdGUoc3RhdGUpLCBHZXN0dXJlQ2FsbGJhY2s6OmNy
ZWF0ZShzZWxmLCBzZWxlY3Rpb25DaGFuZ2VkV2l0aEdlc3R1cmUpKTsKK30KKworLSAodm9pZClj
aGFuZ2VTZWxlY3Rpb25XaXRoVG91Y2hBdDooQ0dQb2ludClwb2ludCB3aXRoU2VsZWN0aW9uVG91
Y2g6KFVJV0tTZWxlY3Rpb25Ub3VjaCl0b3VjaCBiYXNlSXNTdGFydDooQk9PTCliYXNlSXNTdGFy
dAoreworICAgIF9wYWdlLT51cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hlcyhXZWJDb3JlOjpJbnRQ
b2ludChwb2ludCksIHRvV0tTZWxlY3Rpb25Ub3VjaCh0b3VjaCksIGJhc2VJc1N0YXJ0LCBUb3Vj
aGVzQ2FsbGJhY2s6OmNyZWF0ZShzZWxmLCBzZWxlY3Rpb25DaGFuZ2VkV2l0aFRvdWNoKSk7Cit9
CisKKy0gKHZvaWQpY2hhbmdlU2VsZWN0aW9uV2l0aFRvdWNoZXNGcm9tOihDR1BvaW50KWZyb20g
dG86KENHUG9pbnQpdG8gd2l0aEdlc3R1cmU6KFVJV0tHZXN0dXJlVHlwZSlnZXN0dXJlVHlwZSB3
aXRoU3RhdGU6KFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZSlnZXN0dXJlU3RhdGUKK3sKKyAgICBf
cGFnZS0+c2VsZWN0V2l0aFR3b1RvdWNoZXMoV2ViQ29yZTo6SW50UG9pbnQoZnJvbSksIFdlYkNv
cmU6OkludFBvaW50KHRvKSwgdG9XS0dlc3R1cmVUeXBlKGdlc3R1cmVUeXBlKSwgdG9XS0dlc3R1
cmVSZWNvZ25pemVyU3RhdGUoZ2VzdHVyZVN0YXRlKSwgR2VzdHVyZUNhbGxiYWNrOjpjcmVhdGUo
c2VsZiwgc2VsZWN0aW9uQ2hhbmdlZFdpdGhHZXN0dXJlKSk7Cit9CisKKy0gKFdLQXV0b0NvcnJl
Y3Rpb25EYXRhICopYXV0b2NvcnJlY3Rpb25EYXRhCit7CisgICAgcmV0dXJuICZfYXV0b2NvcnJl
Y3Rpb25EYXRhOworfQorCitzdGF0aWMgdm9pZCBhdXRvY29ycmVjdGlvbkRhdGEoY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBjb25zdCBTdHJpbmcmIGZvbnROYW1lLCBkb3VibGUgZm9u
dFNpemUsIHVpbnQ2NF90IHRyYWl0cywgV0tFcnJvclJlZiBlcnJvciwgdm9pZCogY29udGV4dCkK
K3sKKyAgICBXS0ludGVyYWN0aW9uVmlldyogdmlldyA9IHN0YXRpY19jYXN0PFdLSW50ZXJhY3Rp
b25WaWV3Kj4oY29udGV4dCk7CisgICAgQVNTRVJUKHZpZXcpOworICAgIENHUmVjdCBmaXJzdFJl
Y3QgPSBDR1JlY3RaZXJvOworICAgIENHUmVjdCBsYXN0UmVjdCA9IENHUmVjdFplcm87CisgICAg
aWYgKHJlY3RzLnNpemUoKSkgeworICAgICAgICBmaXJzdFJlY3QgPSByZWN0c1swXTsKKyAgICAg
ICAgbGFzdFJlY3QgPSByZWN0c1tyZWN0cy5zaXplKCkgLSAxXTsKKyAgICB9CisKKyAgICBXS0F1
dG9Db3JyZWN0aW9uRGF0YSAqYXV0b2NvcnJlY3Rpb25EYXRhID0gdmlldy5hdXRvY29ycmVjdGlv
bkRhdGE7CisgICAgYXV0b2NvcnJlY3Rpb25EYXRhLT5mb250TmFtZSA9IGZvbnROYW1lOworICAg
IGF1dG9jb3JyZWN0aW9uRGF0YS0+Zm9udFNpemUgPSBmb250U2l6ZTsKKyAgICBhdXRvY29ycmVj
dGlvbkRhdGEtPmZvbnRUcmFpdHMgPSB0cmFpdHM7CisgICAgYXV0b2NvcnJlY3Rpb25EYXRhLT50
ZXh0Rmlyc3RSZWN0ID0gZmlyc3RSZWN0OworICAgIGF1dG9jb3JyZWN0aW9uRGF0YS0+dGV4dExh
c3RSZWN0ID0gbGFzdFJlY3Q7CisKKyAgICBhdXRvY29ycmVjdGlvbkRhdGEtPmNvbXBsZXRpb25I
YW5kbGVyKHJlY3RzLnNpemUoKSA/IFtXS0F1dG9jb3JyZWN0aW9uUmVjdHMgYXV0b2NvcnJlY3Rp
b25SZWN0c1dpdGhSZWN0czpmaXJzdFJlY3QgbGFzdFJlY3Q6bGFzdFJlY3RdIDogbmlsKTsKKyAg
ICBbYXV0b2NvcnJlY3Rpb25EYXRhLT5jb21wbGV0aW9uSGFuZGxlciByZWxlYXNlXTsKKyAgICBh
dXRvY29ycmVjdGlvbkRhdGEtPmNvbXBsZXRpb25IYW5kbGVyID0gbmlsOworfQorCisvLyBGSVhN
RTogVGhpcyB3aWxsIGJlIHJlbW92ZWQgd2hlbiB3ZSBtYWtlIHJlcXVlc3RBdXRvY29ycmVjdGlv
blJlY3RzRm9yU3RyaW5nIG5vbiBvcHRpb25hbC4KKy0gKHZvaWQpcmVxdWVzdEF1dG9jb3JyZWN0
aW9uRGF0YTooTlNTdHJpbmcgKil0ZXh0IHdpdGhDb3JyZWN0aW9uOihOU1N0cmluZyAqKWNvcnJl
Y3Rpb24KK3sKK30KKworLy8gVGhlIGNvbXBsZXRpb24gaGFuZGxlciBjYW4gcGFzcyBuaWwgaWYg
aW5wdXQgZG9lcyBub3QgbWF0Y2ggdGhlIGFjdHVhbCB0ZXh0IHByZWNlZGluZyB0aGUgaW5zZXJ0
aW9uIHBvaW50LgorLSAodm9pZClyZXF1ZXN0QXV0b2NvcnJlY3Rpb25SZWN0c0ZvclN0cmluZzoo
TlNTdHJpbmcgKilpbnB1dCB3aXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFVJV0tBdXRv
Y29ycmVjdGlvblJlY3RzICpyZWN0c0ZvcklucHV0KSljb21wbGV0aW9uSGFuZGxlcgoreworICAg
IGlmICghaW5wdXQgfHwgIVtpbnB1dCBsZW5ndGhdKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKG5pbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgX2F1dG9jb3JyZWN0aW9uRGF0
YS5jb21wbGV0aW9uSGFuZGxlciA9IFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XTsKKyAgICBfcGFn
ZS0+cmVxdWVzdEF1dG9jb3JyZWN0aW9uRGF0YShpbnB1dCwgQXV0b2NvcnJlY3Rpb25EYXRhQ2Fs
bGJhY2s6OmNyZWF0ZShzZWxmLCBhdXRvY29ycmVjdGlvbkRhdGEpKTsKK30KKworLSAoQ0dSZWN0
KXRleHRGaXJzdFJlY3QKK3sKKyAgICByZXR1cm4gX2F1dG9jb3JyZWN0aW9uRGF0YS50ZXh0Rmly
c3RSZWN0OworfQorCistIChDR1JlY3QpdGV4dExhc3RSZWN0Cit7CisgICAgcmV0dXJuIF9hdXRv
Y29ycmVjdGlvbkRhdGEudGV4dExhc3RSZWN0OworfQorCitzdGF0aWMgdm9pZCBhdXRvY29ycmVj
dGlvblJlc3VsdChXS1N0cmluZ1JlZiBjb3JyZWN0aW9uLCBXS0Vycm9yUmVmIGVycm9yLCB2b2lk
KiBjb250ZXh0KQoreworICAgIFdLSW50ZXJhY3Rpb25WaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8
V0tJbnRlcmFjdGlvblZpZXcqPihjb250ZXh0KTsKKyAgICBBU1NFUlQodmlldyk7CisgICAgV0tB
dXRvQ29ycmVjdGlvbkRhdGEgKmF1dG9jb3JyZWN0aW9uRGF0YSA9IHZpZXcuYXV0b2NvcnJlY3Rp
b25EYXRhOworCisgICAgYXV0b2NvcnJlY3Rpb25EYXRhLT5jb21wbGV0aW9uSGFuZGxlcihjb3Jy
ZWN0aW9uID8gW1dLQXV0b2NvcnJlY3Rpb25SZWN0cyBhdXRvY29ycmVjdGlvblJlY3RzV2l0aFJl
Y3RzOmF1dG9jb3JyZWN0aW9uRGF0YS0+dGV4dEZpcnN0UmVjdCBsYXN0UmVjdDphdXRvY29ycmVj
dGlvbkRhdGEtPnRleHRMYXN0UmVjdF0gOiBuaWwpOworICAgIFthdXRvY29ycmVjdGlvbkRhdGEt
PmNvbXBsZXRpb25IYW5kbGVyIHJlbGVhc2VdOworICAgIGF1dG9jb3JyZWN0aW9uRGF0YS0+Y29t
cGxldGlvbkhhbmRsZXIgPSBuaWw7Cit9CisKKy8vIEZJWE1FOiBUaGlzIHdpbGwgYmUgcmVtb3Zl
ZCB3aGVuIHdlIG1ha2UgYXBwbHlBdXRvY29ycmVjdGlvbjooTlNTdHJpbmcgKiljb3JyZWN0aW9u
IHRvU3RyaW5nOihOU1N0cmluZyAqKWlucHV0IHdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAo
XikoVUlXS0F1dG9jb3JyZWN0aW9uUmVjdHMgKnJlY3RzRm9yQ29ycmVjdGlvbikpY29tcGxldGlv
bkhhbmRsZXIgbm9uIG9wdGlvbmFsLgorLSAodm9pZClhcHBseUF1dG9jb3JyZWN0aW9uOihOU1N0
cmluZyAqKW5ld1RleHQgdG9TdHJpbmc6KE5TU3RyaW5nICopaW5wdXQgd2l0aFJlY3Q6KENHUmVj
dClhdXRvY29ycmVjdFJlY3QKK3sKK30KKworLy8gVGhlIGNvbXBsZXRpb24gaGFuZGxlciBzaG91
bGQgcGFzcyB0aGUgcmVjdCBvZiB0aGUgY29ycmVjdGlvbiB0ZXh0IGFmdGVyIHJlcGxhY2luZyB0
aGUgaW5wdXQgdGV4dCwgb3IgbmlsIGlmIHRoZSByZXBsYWNlbWVudCBjb3VsZCBub3QgYmUgcGVy
Zm9ybWVkLgorLSAodm9pZClhcHBseUF1dG9jb3JyZWN0aW9uOihOU1N0cmluZyAqKWNvcnJlY3Rp
b24gdG9TdHJpbmc6KE5TU3RyaW5nICopaW5wdXQgd2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lk
ICheKShVSVdLQXV0b2NvcnJlY3Rpb25SZWN0cyAqcmVjdHNGb3JDb3JyZWN0aW9uKSljb21wbGV0
aW9uSGFuZGxlcgoreworICAgIF9hdXRvY29ycmVjdGlvbkRhdGEuY29tcGxldGlvbkhhbmRsZXIg
PSBbY29tcGxldGlvbkhhbmRsZXIgY29weV07CisgICAgX3BhZ2UtPmFwcGx5QXV0b2NvcnJlY3Rp
b24oY29ycmVjdGlvbiwgaW5wdXQsIFN0cmluZ0NhbGxiYWNrOjpjcmVhdGUoc2VsZiwgYXV0b2Nv
cnJlY3Rpb25SZXN1bHQpKTsKK30KKworLSAodm9pZClyZXF1ZXN0QXV0b2NvcnJlY3Rpb25Db250
ZXh0V2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShVSVdLQXV0b2NvcnJlY3Rpb25Db250
ZXh0ICphdXRvY29ycmVjdGlvbkNvbnRleHQpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgLy8g
RklYTUU6IE5lZWQgdG8gcmV0cmlldmUgdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlIFdlYlByb2Nl
c3MuCisgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKK30KKworLy8gVUlXZWJGb3JtQWNjZXNz
b3J5RGVsZWdhdGUKKy0gKHZvaWQpYWNjZXNzb3J5RG9uZQoreworICAgIFtzZWxmIHJlc2lnbkZp
cnN0UmVzcG9uZGVyXTsKKyAgICBfcGFnZS0+Ymx1ckFzc2lzdGVkTm9kZSgpOworfQorCistICh2
b2lkKWFjY2Vzc29yeVRhYjooQk9PTClpc05leHQKK3sKK30KKworLSAodm9pZClhY2Nlc3NvcnlB
dXRvRmlsbAoreworfQorCistICh2b2lkKWFjY2Vzc29yeUNsZWFyCit7Cit9CisKKy0gKHZvaWQp
X3VwZGF0ZUFjY2Vzc29yeQoreworICAgIC8vIEZJWE1FOiBuZWVkIHRvIGluaXRpYWxpemUgd2l0
aCB2YWx1cyBmcm9tIHRoZSBXZWJQcm9jZXNzLgorICAgIF9hY2Nlc3NvcnkubmV4dEVuYWJsZWQg
PSBZRVM7CisgICAgX2FjY2Vzc29yeS5wcmV2aW91c0VuYWJsZWQgPSBZRVM7CisgICAgCisgICAg
W19hY2Nlc3Nvcnkgc2V0Q2xlYXJWaXNpYmxlOk5PXTsKKworICAgIC8vIEZJWE1FOiBoaWRlIG9y
IHNob3cgdGhlIEF1dG9GaWxsIGJ1dHRvbiBhcyBuZWVkZWQuCit9CisKKy8vIEtleWJvYXJkIGlu
dGVyYWN0aW9uCisvLyBVSVRleHRJbnB1dCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgorCistIChO
U1N0cmluZyAqKXRleHRJblJhbmdlOihVSVRleHRSYW5nZSAqKXJhbmdlCit7CisgICAgcmV0dXJu
IG5pbDsKK30KKworLSAodm9pZClyZXBsYWNlUmFuZ2U6KFVJVGV4dFJhbmdlICopcmFuZ2Ugd2l0
aFRleHQ6KE5TU3RyaW5nICopdGV4dAoreworfQorCistIChVSVRleHRSYW5nZSAqKXNlbGVjdGVk
VGV4dFJhbmdlCit7CisgICAgdW5zaWduZWQgc2l6ZSA9IF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNl
bGVjdGlvblJlY3RzLnNpemUoKTsKKyAgICBOU011dGFibGVBcnJheSAqd2ViUmVjdHMgPSBbTlNN
dXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6c2l6ZV07CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBjb25zdCBXZWJDb3JlOjpTZWxlY3Rpb25S
ZWN0JiBjb3JlUmVjdCA9IF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvblJlY3RzW2ldOwor
ICAgICAgICBXZWJTZWxlY3Rpb25SZWN0ICp3ZWJSZWN0ID0gW1dlYlNlbGVjdGlvblJlY3Qgc2Vs
ZWN0aW9uUmVjdF07CisgICAgICAgIHdlYlJlY3QucmVjdCA9IGNvcmVSZWN0LnJlY3QoKTsKKyAg
ICAgICAgd2ViUmVjdC53cml0aW5nRGlyZWN0aW9uID0gY29yZVJlY3QuZGlyZWN0aW9uKCkgPT0g
TFRSID8gV0tXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBXS1dyaXRpbmdEaXJlY3Rpb25S
aWdodFRvTGVmdDsKKyAgICAgICAgd2ViUmVjdC5pc0xpbmVCcmVhayA9IGNvcmVSZWN0LmlzTGlu
ZUJyZWFrKCk7CisgICAgICAgIHdlYlJlY3QuaXNGaXJzdE9uTGluZSA9IGNvcmVSZWN0LmlzRmly
c3RPbkxpbmUoKTsKKyAgICAgICAgd2ViUmVjdC5pc0xhc3RPbkxpbmUgPSBjb3JlUmVjdC5pc0xh
c3RPbkxpbmUoKTsKKyAgICAgICAgd2ViUmVjdC5jb250YWluc1N0YXJ0ID0gY29yZVJlY3QuY29u
dGFpbnNTdGFydCgpOworICAgICAgICB3ZWJSZWN0LmNvbnRhaW5zRW5kID0gY29yZVJlY3QuY29u
dGFpbnNFbmQoKTsKKyAgICAgICAgd2ViUmVjdC5pc0luRml4ZWRQb3NpdGlvbiA9IGNvcmVSZWN0
LmlzSW5GaXhlZFBvc2l0aW9uKCk7CisgICAgICAgIHdlYlJlY3QuaXNIb3Jpem9udGFsID0gY29y
ZVJlY3QuaXNIb3Jpem9udGFsKCk7CisgICAgICAgIFt3ZWJSZWN0cyBhZGRPYmplY3Q6d2ViUmVj
dF07CisgICAgfQorCisgICAgcmV0dXJuIFtXS1RleHRSYW5nZSB0ZXh0UmFuZ2VXaXRoU3RhdGU6
X3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNOb25lCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlzUmFuZ2U6X3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNS
YW5nZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0VkaXRhYmxlOl9wYWdlLT5l
ZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGFydFJlY3Q6X3BhZ2UtPmVkaXRvclN0YXRlKCkuY2FyZXRSZWN0QXRTdGFydAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRSZWN0Ol9wYWdlLT5lZGl0b3JT
dGF0ZSgpLmNhcmV0UmVjdEF0RW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0
aW9uUmVjdHM6d2ViUmVjdHMKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkVGV4dExl
bmd0aDpfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3RlZFRleHRMZW5ndGhdOworfQorCistIChD
R1JlY3QpY2FyZXRSZWN0Rm9yUG9zaXRpb246KFVJVGV4dFBvc2l0aW9uICopcG9zaXRpb24KK3sK
KyAgICByZXR1cm4gKChXS1RleHRQb3NpdGlvbiAqKXBvc2l0aW9uKS5wb3NpdGlvblJlY3Q7Cit9
CisKKy0gKE5TQXJyYXkgKilzZWxlY3Rpb25SZWN0c0ZvclJhbmdlOihVSVRleHRSYW5nZSAqKXJh
bmdlCit7CisgICAgcmV0dXJuIFtXS1RleHRTZWxlY3Rpb25SZWN0IHRleHRTZWxlY3Rpb25SZWN0
c1dpdGhXZWJSZWN0czooKFdLVGV4dFJhbmdlICopcmFuZ2UpLnNlbGVjdGlvblJlY3RzXTsKK30K
KworLSAodm9pZClzZXRTZWxlY3RlZFRleHRSYW5nZTooVUlUZXh0UmFuZ2UgKilyYW5nZQorewor
fQorCistIChVSVRleHRSYW5nZSAqKW1hcmtlZFRleHRSYW5nZQoreworICAgIHJldHVybiBuaWw7
Cit9CisKKy0gKE5TRGljdGlvbmFyeSAqKW1hcmtlZFRleHRTdHlsZQoreworICAgIHJldHVybiBu
aWw7Cit9CisKKy0gKHZvaWQpc2V0TWFya2VkVGV4dFN0eWxlOihOU0RpY3Rpb25hcnkgKilzdHls
ZURpY3Rpb25hcnkKK3sKK30KKworLSAodm9pZClzZXRNYXJrZWRUZXh0OihOU1N0cmluZyAqKW1h
cmtlZFRleHQgc2VsZWN0ZWRSYW5nZTooTlNSYW5nZSlzZWxlY3RlZFJhbmdlCit7Cit9CisKKy0g
KHZvaWQpdW5tYXJrVGV4dAoreworfQorCistIChVSVRleHRQb3NpdGlvbiAqKWJlZ2lubmluZ09m
RG9jdW1lbnQKK3sKKyAgICByZXR1cm4gbmlsOworfQorCistIChVSVRleHRQb3NpdGlvbiAqKWVu
ZE9mRG9jdW1lbnQKK3sKKyAgICByZXR1cm4gbmlsOworfQorCistIChVSVRleHRSYW5nZSAqKXRl
eHRSYW5nZUZyb21Qb3NpdGlvbjooVUlUZXh0UG9zaXRpb24gKilmcm9tUG9zaXRpb24gdG9Qb3Np
dGlvbjooVUlUZXh0UG9zaXRpb24gKil0b1Bvc2l0aW9uCit7CisgICAgcmV0dXJuIG5pbDsKK30K
KworLSAoVUlUZXh0UG9zaXRpb24gKilwb3NpdGlvbkZyb21Qb3NpdGlvbjooVUlUZXh0UG9zaXRp
b24gKilwb3NpdGlvbiBvZmZzZXQ6KE5TSW50ZWdlcilvZmZzZXQKK3sKKyAgICByZXR1cm4gbmls
OworfQorCistIChVSVRleHRQb3NpdGlvbiAqKXBvc2l0aW9uRnJvbVBvc2l0aW9uOihVSVRleHRQ
b3NpdGlvbiAqKXBvc2l0aW9uIGluRGlyZWN0aW9uOihVSVRleHRMYXlvdXREaXJlY3Rpb24pZGly
ZWN0aW9uIG9mZnNldDooTlNJbnRlZ2VyKW9mZnNldAoreworICAgIHJldHVybiBuaWw7Cit9CisK
Ky0gKE5TQ29tcGFyaXNvblJlc3VsdCljb21wYXJlUG9zaXRpb246KFVJVGV4dFBvc2l0aW9uICop
cG9zaXRpb24gdG9Qb3NpdGlvbjooVUlUZXh0UG9zaXRpb24gKilvdGhlcgoreworICAgIHJldHVy
biBOU09yZGVyZWRTYW1lOworfQorCistIChOU0ludGVnZXIpb2Zmc2V0RnJvbVBvc2l0aW9uOihV
SVRleHRQb3NpdGlvbiAqKWZyb20gdG9Qb3NpdGlvbjooVUlUZXh0UG9zaXRpb24gKil0b1Bvc2l0
aW9uCit7CisgICAgcmV0dXJuIDA7Cit9CisKKy0gKGlkIDxVSVRleHRJbnB1dFRva2VuaXplcj4p
dG9rZW5pemVyCit7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoVUlUZXh0UG9zaXRpb24gKilw
b3NpdGlvbldpdGhpblJhbmdlOihVSVRleHRSYW5nZSAqKXJhbmdlIGZhcnRoZXN0SW5EaXJlY3Rp
b246KFVJVGV4dExheW91dERpcmVjdGlvbilkaXJlY3Rpb24KK3sKKyAgICByZXR1cm4gbmlsOwor
fQorCistIChVSVRleHRSYW5nZSAqKWNoYXJhY3RlclJhbmdlQnlFeHRlbmRpbmdQb3NpdGlvbjoo
VUlUZXh0UG9zaXRpb24gKilwb3NpdGlvbiBpbkRpcmVjdGlvbjooVUlUZXh0TGF5b3V0RGlyZWN0
aW9uKWRpcmVjdGlvbgoreworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKFVJVGV4dFdyaXRpbmdE
aXJlY3Rpb24pYmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JQb3NpdGlvbjooVUlUZXh0UG9zaXRpb24g
Kilwb3NpdGlvbiBpbkRpcmVjdGlvbjooVUlUZXh0U3RvcmFnZURpcmVjdGlvbilkaXJlY3Rpb24K
K3sKKyAgICByZXR1cm4gVUlUZXh0V3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0OworfQorCist
ICh2b2lkKXNldEJhc2VXcml0aW5nRGlyZWN0aW9uOihVSVRleHRXcml0aW5nRGlyZWN0aW9uKXdy
aXRpbmdEaXJlY3Rpb24gZm9yUmFuZ2U6KFVJVGV4dFJhbmdlICopcmFuZ2UKK3sKK30KKworLSAo
Q0dSZWN0KWZpcnN0UmVjdEZvclJhbmdlOihVSVRleHRSYW5nZSAqKXJhbmdlCit7CisgICAgcmV0
dXJuIENHUmVjdFplcm87Cit9CisKKy8qIEhpdCB0ZXN0aW5nLiAqLworLSAoVUlUZXh0UG9zaXRp
b24gKiljbG9zZXN0UG9zaXRpb25Ub1BvaW50OihDR1BvaW50KXBvaW50Cit7CisgICAgcmV0dXJu
IG5pbDsKK30KKworLSAoVUlUZXh0UG9zaXRpb24gKiljbG9zZXN0UG9zaXRpb25Ub1BvaW50OihD
R1BvaW50KXBvaW50IHdpdGhpblJhbmdlOihVSVRleHRSYW5nZSAqKXJhbmdlCit7CisgICAgcmV0
dXJuIG5pbDsKK30KKworLSAoVUlUZXh0UmFuZ2UgKiljaGFyYWN0ZXJSYW5nZUF0UG9pbnQ6KENH
UG9pbnQpcG9pbnQKK3sKKyAgICByZXR1cm4gbmlsOworfQorCistICh2b2lkKWRlbGV0ZUJhY2t3
YXJkCit7CisgICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFuZChBU0NJSUxpdGVyYWwoImRlbGV0
ZUJhY2t3YXJkIikpOworfQorCisvLyBJbnNlcnRzIHRoZSBnaXZlbiBzdHJpbmcsIHJlcGxhY2lu
ZyBhbnkgc2VsZWN0ZWQgb3IgbWFya2VkIHRleHQuCistICh2b2lkKWluc2VydFRleHQ6KE5TU3Ry
aW5nICopYVN0cmluZ1ZhbHVlCit7CisgICAgX3BhZ2UtPmluc2VydFRleHQoYVN0cmluZ1ZhbHVl
LCBOU05vdEZvdW5kLCAwKTsKK30KKworLSAoQk9PTCloYXNUZXh0Cit7CisgICAgcmV0dXJuIFlF
UzsKK30KKworLy8gZW5kIG9mIFVJVGV4dElucHV0IHByb3RvY29sIGltcGxlbWVudGF0aW9uCisK
Ky8vIFVJVGV4dElucHV0UHJpdmF0ZSBwcm90b2NvbAorLy8gRGlyZWN0IGFjY2VzcyB0byB0aGUg
KHByaXZhdGUpIFVJVGV4dElucHV0VHJhaXRzIG9iamVjdC4KKy0gKFVJVGV4dElucHV0VHJhaXRz
ICopdGV4dElucHV0VHJhaXRzCit7CisgICAgaWYgKCFfdHJhaXRzKQorICAgICAgICBfdHJhaXRz
ID0gW1tVSVRleHRJbnB1dFRyYWl0cyBhbGxvY10gaW5pdF07CisgICAgcmV0dXJuIF90cmFpdHM7
Cit9CisKKy0gKFVJVGV4dEludGVyYWN0aW9uQXNzaXN0YW50ICopaW50ZXJhY3Rpb25Bc3Npc3Rh
bnQKK3sKKyAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB3ZSdy
ZSBpbiBVSVdlYlNlbGVjdGlvbk1vZGVUZXh0T25seSBob3dldmVyIGl0IGlzCisgICAgLy8gcG9z
c2libGUgdGhhdCBpdCBjYW4gYmUgY2FsbGVkIHdoaWxlIHdlIGFyZSB0cmFuc2l0aW9uaW5nIGJl
dHdlZW4gbW9kZXMuCisgICAgLy8gYXNzZXJ0KCFfd2ViU2VsZWN0aW9uQXNzaXN0YW50KTsKKwor
ICAgIGlmICghX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQpCisgICAgICAgIF90ZXh0U2VsZWN0aW9u
QXNzaXN0YW50ID0gW1tVSVdLVGV4dEludGVyYWN0aW9uQXNzaXN0YW50IGFsbG9jXSBpbml0V2l0
aFZpZXc6c2VsZl07CisKKyAgICByZXR1cm4gX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQ7Cit9CisK
KworLy8gTlNSYW5nZSBzdXBwb3J0LiAgV291bGQgbGlrZSB0byBkZXByZWNhdGUgdG8gdGhlIGV4
dGVudCBwb3NzaWJsZSwgYWx0aG91Z2ggc29tZSBzdXBwb3J0CisvLyAoaS5lLiBzZWxlY3Rpb25S
YW5nZSkgaGFzIHNoaXBwZWQgYXMgQVBJLgorLSAoTlNSYW5nZSlzZWxlY3Rpb25SYW5nZQorewor
ICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKK30KKworLSAoQ0dSZWN0KXJl
Y3RGb3JOU1JhbmdlOihOU1JhbmdlKXJhbmdlCit7CisgICAgcmV0dXJuIENHUmVjdFplcm87Cit9
CisKKy0gKE5TUmFuZ2UpX21hcmtlZFRleHROU1JhbmdlCit7CisgICAgcmV0dXJuIE5TTWFrZVJh
bmdlKE5TTm90Rm91bmQsIDApOworfQorCisvLyBET00gcmFuZ2Ugc3VwcG9ydC4KKy0gKERPTVJh
bmdlICopc2VsZWN0ZWRET01SYW5nZQoreworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKHZvaWQp
c2V0U2VsZWN0ZWRET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBhZmZpbml0eURvd25zdHJlYW06
KEJPT0wpYWZmaW5pdHlEb3duc3RyZWFtCit7Cit9CisKKy8qIE1vZGlmeSB0ZXh0IHdpdGhvdXQg
c3RhcnRpbmcgYSBuZXcgdW5kbyBncm91cGluZy4KKyAqLworLSAodm9pZClyZXBsYWNlUmFuZ2VX
aXRoVGV4dFdpdGhvdXRDbG9zaW5nVHlwaW5nOihVSVRleHRSYW5nZSAqKXJhbmdlIHJlcGxhY2Vt
ZW50VGV4dDooTlNTdHJpbmcgKil0ZXh0Cit7Cit9CisKKy8vIENhcmV0IHJlY3Qgc3VwcG9ydC4g
IFNob3VsZG4ndCBiZSBuZWNlc3NhcnksIGJ1dCBmaXJzdFJlY3RGb3JSYW5nZSBkb2Vzbid0IG9m
ZmVyIHByZWNpc2VseQorLy8gdGhlIHNhbWUgZnVuY3Rpb25hbGl0eS4KKy0gKENHUmVjdClyZWN0
Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCit7CisgICAgcmV0dXJuIENHUmVjdFplcm87Cit9CisK
Ky8vIFdlYiBldmVudHMuCistIChCT09MKXJlcXVpcmVzS2V5RXZlbnRzCit7CisgICAgcmV0dXJu
IFlFUzsKK30KKworLSAodm9pZCloYW5kbGVLZXlXZWJFdmVudDooV2ViSU9TRXZlbnQgKil0aGVF
dmVudAoreworICAgIF9wYWdlLT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJk
RXZlbnQodGhlRXZlbnQpKTsKK30KKworLSAoQk9PTClfaW50ZXJwcmV0S2V5RXZlbnQ6KFdlYklP
U0V2ZW50ICopZXZlbnQgaXNDaGFyRXZlbnQ6KEJPT0wpaXNDaGFyRXZlbnQKK3sKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQga1dlYkVudGVyS2V5ID0gMHgwMDAzOworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBrV2ViQmFja3NwYWNlS2V5ID0gMHgwMDA4OworICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBrV2ViUmV0dXJuS2V5ID0gMHgwMDBEOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBrV2ViRGVsZXRlS2V5ID0gMHgwMDdGOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBrV2Vi
TGVmdEFycm93S2V5ID0gMHgwMEFDOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBrV2ViVXBB
cnJvd0tleSA9IDB4MDBBRDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQga1dlYlJpZ2h0QXJy
b3dLZXkgPSAweDAwQUU7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGtXZWJEb3duQXJyb3dL
ZXkgPSAweDAwQUY7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGtXZWJEZWxldGVGb3J3YXJk
S2V5ID0gMHhGNzI4OworCisgICAgaWYgKCFfcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRlbnRF
ZGl0YWJsZSAmJiBldmVudC5pc1RhYktleSkKKyAgICAgICAgcmV0dXJuIE5POworCisgICAgQk9P
TCBzaGlmdCA9IGV2ZW50Lm1vZGlmaWVyRmxhZ3MgJiBXZWJFdmVudEZsYWdNYXNrU2hpZnQ7CisK
KyAgICBzd2l0Y2ggKGV2ZW50LmNoYXJhY3RlclNldCkgeworICAgIGNhc2UgV2ViRXZlbnRDaGFy
YWN0ZXJTZXRTeW1ib2w6IHsKKyAgICAgICAgU3RyaW5nIGNvbW1hbmQ7CisgICAgICAgIE5TU3Ry
aW5nICpjaGFyYWN0ZXJzID0gW2V2ZW50IGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyc107Cisg
ICAgICAgIGlmIChbY2hhcmFjdGVycyBsZW5ndGhdID09IDApCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgc3dpdGNoIChbY2hhcmFjdGVycyBjaGFyYWN0ZXJBdEluZGV4OjBdKSB7CisgICAg
ICAgIGNhc2Uga1dlYkxlZnRBcnJvd0tleToKKyAgICAgICAgICAgIGNvbW1hbmQgPSBzaGlmdCA/
IEFTQ0lJTGl0ZXJhbCgibW92ZUxlZnRBbmRNb2RpZnlTZWxlY3Rpb24iKSA6ICBBU0NJSUxpdGVy
YWwoIm1vdmVMZWZ0Iik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtXZWJV
cEFycm93S2V5OgorICAgICAgICAgICAgY29tbWFuZCA9IHNoaWZ0ID8gQVNDSUlMaXRlcmFsKCJt
b3ZlVXBBbmRNb2RpZnlTZWxlY3Rpb24iKSA6ICBBU0NJSUxpdGVyYWwoIm1vdmVVcCIpOworICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBrV2ViUmlnaHRBcnJvd0tleToKKyAgICAg
ICAgICAgIGNvbW1hbmQgPSBzaGlmdCA/IEFTQ0lJTGl0ZXJhbCgibW92ZVJpZ2h0QW5kTW9kaWZ5
U2VsZWN0aW9uIikgOiAgQVNDSUlMaXRlcmFsKCJtb3ZlUmlnaHQiKTsKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGNhc2Uga1dlYkRvd25BcnJvd0tleToKKyAgICAgICAgICAgIGNvbW1h
bmQgPSBzaGlmdCA/IEFTQ0lJTGl0ZXJhbCgibW92ZURvd25BbmRNb2RpZnlTZWxlY3Rpb24iKSA6
ICBBU0NJSUxpdGVyYWwoIm1vdmVEb3duIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIWNvbW1hbmQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBfcGFnZS0+
ZXhlY3V0ZUVkaXRDb21tYW5kKGNvbW1hbmQpOworICAgICAgICAgICAgcmV0dXJuIFlFUzsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXZWJFdmVudENoYXJhY3Rl
clNldEFTQ0lJOgorICAgIGNhc2UgV2ViRXZlbnRDaGFyYWN0ZXJTZXRVbmljb2RlOiB7CisgICAg
ICAgIE5TU3RyaW5nICpjaGFyYWN0ZXJzID0gW2V2ZW50IGNoYXJhY3RlcnNdOworICAgICAgICBp
ZiAoW2NoYXJhY3RlcnMgbGVuZ3RoXSA9PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IHN3aXRjaCAoW2NoYXJhY3RlcnMgY2hhcmFjdGVyQXRJbmRleDowXSkgeworICAgICAgICBjYXNl
IGtXZWJCYWNrc3BhY2VLZXk6CisgICAgICAgIGNhc2Uga1dlYkRlbGV0ZUtleToKKyAgICAgICAg
ICAgIFtbVUlLZXlib2FyZEltcGwgc2hhcmVkSW5zdGFuY2VdIGRlbGV0ZUZyb21JbnB1dF07Cisg
ICAgICAgICAgICByZXR1cm4gWUVTOworCisgICAgICAgIGNhc2Uga1dlYkVudGVyS2V5OgorICAg
ICAgICBjYXNlIGtXZWJSZXR1cm5LZXk6CisgICAgICAgICAgICBpZiAoaXNDaGFyRXZlbnQpIHsK
KyAgICAgICAgICAgICAgICAvLyBNYXAgXHIgZnJvbSBIVyBrZXlib2FyZCB0byBcbiB0byBtYXRj
aCB0aGUgYmVoYXZpb3Igb2YgdGhlIHNvZnQga2V5Ym9hcmQuCisgICAgICAgICAgICAgICAgW1tV
SUtleWJvYXJkSW1wbCBzaGFyZWRJbnN0YW5jZV0gYWRkSW5wdXRTdHJpbmc6QCJcbiIgd2l0aEZs
YWdzOjBdOworICAgICAgICAgICAgICAgIHJldHVybiBZRVM7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gTk87CisKKyAgICAgICAgY2FzZSBrV2ViRGVsZXRlRm9yd2FyZEtleToK
KyAgICAgICAgICAgIF9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQoQVNDSUlMaXRlcmFsKCJkZWxl
dGVGb3J3YXJkIikpOworICAgICAgICAgICAgcmV0dXJuIFlFUzsKKworICAgICAgICBkZWZhdWx0
OiB7CisgICAgICAgICAgICBpZiAoaXNDaGFyRXZlbnQpIHsKKyAgICAgICAgICAgICAgICBbW1VJ
S2V5Ym9hcmRJbXBsIHNoYXJlZEluc3RhbmNlXSBhZGRJbnB1dFN0cmluZzpldmVudC5jaGFyYWN0
ZXJzIHdpdGhGbGFnczpldmVudC5rZXlib2FyZEZsYWdzXTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gWUVTOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIE5POworICAgICAgICB9
CisgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIE5POworICAgIH0KKworICAgIHJldHVybiBOTzsKK30KKworLy8gU2V0cyBhIGJ1ZmZlciB0
byBtYWtlIHJvb20gZm9yIGF1dG9jb3JyZWN0aW9uIHZpZXdzCistICh2b2lkKXNldEJvdHRvbUJ1
ZmZlckhlaWdodDooQ0dGbG9hdClib3R0b21CdWZmZXIKK3sKK30KKworLSAoVUlWaWV3ICopYXV0
b21hdGljYWxseVNlbGVjdGVkT3ZlcmxheQoreworICAgIHJldHVybiBzZWxmOworfQorCistIChV
SVRleHRHcmFudWxhcml0eSlzZWxlY3Rpb25HcmFudWxhcml0eQoreworICAgIHJldHVybiBVSVRl
eHRHcmFudWxhcml0eUNoYXJhY3RlcjsKK30KKworLSAodm9pZClpbnNlcnREaWN0YXRpb25SZXN1
bHQ6KE5TQXJyYXkgKilkaWN0YXRpb25SZXN1bHQgd2l0aENvcnJlY3Rpb25JZGVudGlmaWVyOihp
ZCljb3JyZWN0aW9uSWRlbnRpZmllcgoreworfQorCisvLyBTaG91bGQgcmV0dXJuIGFuIGFycmF5
IG9mIE5TRGljdGlvbmFyeSBvYmplY3RzIHRoYXQga2V5L3ZhbHVlIHBhcmllcyBmb3IgdGhlIGZp
bmFsIHRleHQsIGNvcnJlY3Rpb24gaWRlbnRpZmllciBhbmQKKy8vIGFsdGVybmF0aXZlIHNlbGVj
dGlvbiBjb3VudHMgdXNpbmcgdGhlIGtleXMgZGVmaW5lZCBhdCB0aGUgdG9wIG9mIHRoaXMgaGVh
ZGVyLgorLSAoTlNBcnJheSAqKW1ldGFkYXRhRGljdGlvbmFyaWVzRm9yRGljdGF0aW9uUmVzdWx0
cworeworICAgIHJldHVybiBuaWw7Cit9CisKKy8vIFJldHVybnMgdGhlIGRpY3RhdGlvbiByZXN1
bHQgYm91bmRhcmllcyBmcm9tIHBvc2l0aW9uIHNvIHRoYXQgdGV4dCB0aGF0IHdhcyBub3QgZGlj
dGF0ZWQgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gbG9nZ2luZy4KKy8vIElmIHRoZXNlIGFyZSBub3Qg
aW1wbGVtZW50ZWQsIG5vIHRleHQgd2lsbCBiZSBsb2dnZWQuCistIChVSVRleHRQb3NpdGlvbiAq
KXByZXZpb3VzVW5wZXJ0dXJiZWREaWN0YXRpb25SZXN1bHRCb3VuZGFyeUZyb21Qb3NpdGlvbjoo
VUlUZXh0UG9zaXRpb24gKilwb3NpdGlvbgoreworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKFVJ
VGV4dFBvc2l0aW9uICopbmV4dFVucGVydHVyYmVkRGljdGF0aW9uUmVzdWx0Qm91bmRhcnlGcm9t
UG9zaXRpb246KFVJVGV4dFBvc2l0aW9uICopcG9zaXRpb24KK3sKKyAgICByZXR1cm4gbmlsOwor
fQorCisvLyBUaGUgY2FuIGFsbCBiZSAoYW5kIGhhdmUgYmVlbikgdHJpdmlhbGx5IGltcGxlbWVu
dGVkIGluIHRlcm1zIG9mIFVJVGV4dElucHV0LiAgRGVwcmVjYXRlIGFuZCByZW1vdmUuCistICh2
b2lkKW1vdmVCYWNrd2FyZDoodW5zaWduZWQpY291bnQKK3sKK30KKworLSAodm9pZCltb3ZlRm9y
d2FyZDoodW5zaWduZWQpY291bnQKK3sKK30KKworLSAodW5pY2hhciljaGFyYWN0ZXJCZWZvcmVD
YXJldFNlbGVjdGlvbgoreworICAgIHJldHVybiAwOworfQorCistIChOU1N0cmluZyAqKXdvcmRD
b250YWluaW5nQ2FyZXRTZWxlY3Rpb24KK3sKKyAgICByZXR1cm4gbmlsOworfQorCistIChET01S
YW5nZSAqKXdvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbgoreworICAgIHJldHVybiBu
aWw7Cit9CisKKy0gKE5TU3RyaW5nICopbWFya2VkVGV4dAoreworICAgIHJldHVybiBuaWw7Cit9
CisKKy0gKHZvaWQpc2V0TWFya2VkVGV4dDooTlNTdHJpbmcgKil0ZXh0Cit7Cit9CisKKy0gKEJP
T0wpaGFzQ29udGVudAoreworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKHZvaWQpc2VsZWN0QWxs
Cit7Cit9CisKKy0gKFVJQ29sb3IgKil0ZXh0Q29sb3JGb3JDYXJldFNlbGVjdGlvbgoreworICAg
IHJldHVybiBbVUlDb2xvciBibGFja0NvbG9yXTsKK30KKworLSAoVUlGb250ICopZm9udEZvckNh
cmV0U2VsZWN0aW9uCit7CisgICAgQ0dGbG9hdCB6b29tU2NhbGUgPSAxLjA7ICAgIC8vIEZJWE1F
OiByZXRyaWV2ZSB0aGUgYWN0dWFsIGRvY3VtZW50IHNjYWxlIGZhY3Rvci4KKyAgICBDR0Zsb2F0
IHNjYWxlZFNpemUgPSBfYXV0b2NvcnJlY3Rpb25EYXRhLmZvbnRTaXplOworICAgIGlmIChDR0ZB
YnMoem9vbVNjYWxlIC0gMS4wKSA+IEZMVF9FUFNJTE9OKQorICAgICAgICBzY2FsZWRTaXplICo9
IHpvb21TY2FsZTsKKyAgICByZXR1cm4gKGlkKVtVSUZvbnQgZm9udFdpdGhGYW1pbHlOYW1lOl9h
dXRvY29ycmVjdGlvbkRhdGEuZm9udE5hbWUgdHJhaXRzOihVSUZvbnRUcmFpdClfYXV0b2NvcnJl
Y3Rpb25EYXRhLmZvbnRUcmFpdHMgc2l6ZTpzY2FsZWRTaXplXTsKK30KKworLSAoQk9PTCloYXNT
ZWxlY3Rpb24KK3sKKyAgICByZXR1cm4gTk87Cit9CisKKy0gKEJPT0wpaXNQb3NpdGlvbjooVUlU
ZXh0UG9zaXRpb24gKilwb3NpdGlvbiBhdEJvdW5kYXJ5OihVSVRleHRHcmFudWxhcml0eSlncmFu
dWxhcml0eSBpbkRpcmVjdGlvbjooVUlUZXh0RGlyZWN0aW9uKWRpcmVjdGlvbgoreworICAgIHJl
dHVybiBOTzsKK30KKworLSAoVUlUZXh0UG9zaXRpb24gKilwb3NpdGlvbkZyb21Qb3NpdGlvbjoo
VUlUZXh0UG9zaXRpb24gKilwb3NpdGlvbiB0b0JvdW5kYXJ5OihVSVRleHRHcmFudWxhcml0eSln
cmFudWxhcml0eSBpbkRpcmVjdGlvbjooVUlUZXh0RGlyZWN0aW9uKWRpcmVjdGlvbgoreworICAg
IHJldHVybiBuaWw7Cit9CisKKy0gKEJPT0wpaXNQb3NpdGlvbjooVUlUZXh0UG9zaXRpb24gKilw
b3NpdGlvbiB3aXRoaW5UZXh0VW5pdDooVUlUZXh0R3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHkgaW5E
aXJlY3Rpb246KFVJVGV4dERpcmVjdGlvbilkaXJlY3Rpb24KK3sKKyAgICByZXR1cm4gTk87Cit9
CisKKy0gKFVJVGV4dFJhbmdlICopcmFuZ2VFbmNsb3NpbmdQb3NpdGlvbjooVUlUZXh0UG9zaXRp
b24gKilwb3NpdGlvbiB3aXRoR3JhbnVsYXJpdHk6KFVJVGV4dEdyYW51bGFyaXR5KWdyYW51bGFy
aXR5IGluRGlyZWN0aW9uOihVSVRleHREaXJlY3Rpb24pZGlyZWN0aW9uCit7CisgICAgcmV0dXJu
IG5pbDsKK30KKworLSAodm9pZCl0YWtlVHJhaXRzRnJvbTooVUlUZXh0SW5wdXRUcmFpdHMgKil0
cmFpdHMKK3sKKyAgICBbW3NlbGYgdGV4dElucHV0VHJhaXRzXSB0YWtlVHJhaXRzRnJvbTp0cmFp
dHNdOworfQorCisvLyBGSVhNRTogSSB3YW50IHRvIGNoYW5nZSB0aGUgbmFtZSBvZiB0aGVzZSBm
dW5jdGlvbnMsIGJ1dCBJJ20gbGVhdmluZyBpdCBmb3Igbm93CisvLyB0byBtYWtlIGl0IGVhc2ll
ciB0byBsb29rIHVwIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9ucyBpbiBVSUtpdC4KKworLSAo
dm9pZClfc3RhcnRBc3Npc3RpbmdLZXlib2FyZAoreworICAgIGlmICghX3RleHRTZWxlY3Rpb25B
c3Npc3RhbnQpCisgICAgICAgIF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50ID0gW1tVSVdLVGV4dElu
dGVyYWN0aW9uQXNzaXN0YW50IGFsbG9jXSBpbml0V2l0aFZpZXc6c2VsZl07CisgICAgZWxzZSB7
CisgICAgICAgIC8vIFJlc2V0IHRoZSBnZXN0dXJlIHJlY29nbml6ZXJzIGluIGNhc2UgZWRpdGli
aWxpdHkgaGFzIGNoYW5nZWQuCisgICAgICAgIFtfdGV4dFNlbGVjdGlvbkFzc2lzdGFudCBzZXRH
ZXN0dXJlUmVjb2duaXplcnNdOworICAgIH0KKyAgICBbX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQg
YWN0aXZhdGVTZWxlY3Rpb25dOworfQorCistICh2b2lkKV9zdG9wQXNzaXN0aW5nS2V5Ym9hcmQK
K3sKKyAgICBpZiAoX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQpIHsKKyAgICAgICAgW190ZXh0U2Vs
ZWN0aW9uQXNzaXN0YW50IGRlYWN0aXZhdGVTZWxlY3Rpb25dOworICAgICAgICBbX3RleHRTZWxl
Y3Rpb25Bc3Npc3RhbnQgcmVsZWFzZV07CisgICAgICAgIF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50
ID0gbmlsOworICAgIH0KK30KKworLSAodm9pZClfc3RhcnRBc3Npc3RpbmdOb2RlCit7CisgICAg
X2NhbkJlRmlyc3RSZXNwb25kZXIgPSBZRVM7CisgICAgaWYgKCFbc2VsZiBpc0ZpcnN0UmVzcG9u
ZGVyXSkKKyAgICAgICAgW3NlbGYgYmVjb21lRmlyc3RSZXNwb25kZXJdOworCisgICAgW3NlbGYg
X3N0YXJ0QXNzaXN0aW5nS2V5Ym9hcmRdOworICAgIFtzZWxmIF91cGRhdGVBY2Nlc3NvcnldOwor
ICAgIFtzZWxmIHJlbG9hZElucHV0Vmlld3NdOworfQorCistICh2b2lkKV9zdG9wQXNzaXN0aW5n
Tm9kZQoreworICAgIF9jYW5CZUZpcnN0UmVzcG9uZGVyID0gTk87CisgICAgaWYgKFtzZWxmIGlz
Rmlyc3RSZXNwb25kZXJdKQorICAgICAgICBbc2VsZiByZXNpZ25GaXJzdFJlc3BvbmRlcl07Cisg
ICAgCisgICAgW3NlbGYgX3N0b3BBc3Npc3RpbmdLZXlib2FyZF07CisgICAgW3NlbGYgcmVsb2Fk
SW5wdXRWaWV3c107CisgICAgW3NlbGYgX3VwZGF0ZUFjY2Vzc29yeV07Cit9CisKKy0gKHZvaWQp
X3NlbGVjdGlvbkNoYW5nZWQKK3sKKyAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBmaWd1cmUgb3V0
IHdoYXQgdG8gZG8gaWYgdGhlIHNlbGVjdGlvbiBpcyBjaGFuZ2VkIGJ5IEphdmFzY3JpcHQuCisg
ICAgaWYgKCFfc2hvd2luZ1RleHRTdHlsZU9wdGlvbnMpCisgICAgICAgIFtfdGV4dFNlbGVjdGlv
bkFzc2lzdGFudCBzZWxlY3Rpb25DaGFuZ2VkXTsKK30KKworI3ByYWdtYSBtYXJrIC0gSW1wbGVt
ZW50YXRpb24gb2YgVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGUuCisK
Ky0gKEJPT0wpc2hvdWxkSWdub3JlV2ViVG91Y2gKK3sKKyAgICByZXR1cm4gTk87Cit9CisKKy0g
KEJPT0wpaXNBbnlUb3VjaE92ZXJBY3RpdmVBcmVhOihOU1NldCAqKXRvdWNoZXMKK3sKKyAgICBy
ZXR1cm4gWUVTOworfQorCitAZW5kCisKKy8vIFVJVGV4dFJhbmdlLCBVSVRleHRQb3NpdGlvbiBh
bmQgVUlUZXh0U2VsZWN0aW9uUmVjdCBpbXBsZW1lbnRhdGlvbnMgZm9yIFdLMgorCitAaW1wbGVt
ZW50YXRpb24gV0tUZXh0UmFuZ2UgKFVJVGV4dElucHV0QWRkaXRpb25zKQorCistIChCT09MKV9p
c0NhcmV0Cit7CisgICAgcmV0dXJuIHNlbGYuZW1wdHk7Cit9CisKKy0gKEJPT0wpX2lzUmFuZ2Vk
Cit7CisgICAgcmV0dXJuICFzZWxmLmVtcHR5OworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBXS1RleHRSYW5nZQorCisrKFdLVGV4dFJhbmdlICopdGV4dFJhbmdlV2l0aFN0YXRlOihCT09M
KWlzTm9uZSBpc1JhbmdlOihCT09MKWlzUmFuZ2UgaXNFZGl0YWJsZTooQk9PTClpc0VkaXRhYmxl
IHN0YXJ0UmVjdDooQ0dSZWN0KXN0YXJ0UmVjdCBlbmRSZWN0OihDR1JlY3QpZW5kUmVjdCBzZWxl
Y3Rpb25SZWN0czooTlNBcnJheSAqKXNlbGVjdGlvblJlY3RzIHNlbGVjdGVkVGV4dExlbmd0aDoo
TlNVSW50ZWdlcilzZWxlY3RlZFRleHRMZW5ndGgKK3sKKyAgICBXS1RleHRSYW5nZSAqcmFuZ2Ug
PSBbW1dLVGV4dFJhbmdlIGFsbG9jXSBpbml0XTsKKyAgICByYW5nZS5pc05vbmUgPSBpc05vbmU7
CisgICAgcmFuZ2UuaXNSYW5nZSA9IGlzUmFuZ2U7CisgICAgcmFuZ2UuaXNFZGl0YWJsZSA9IGlz
RWRpdGFibGU7CisgICAgcmFuZ2Uuc3RhcnRSZWN0ID0gc3RhcnRSZWN0OworICAgIHJhbmdlLmVu
ZFJlY3QgPSBlbmRSZWN0OworICAgIHJhbmdlLnNlbGVjdGVkVGV4dExlbmd0aCA9IHNlbGVjdGVk
VGV4dExlbmd0aDsKKyAgICByYW5nZS5zZWxlY3Rpb25SZWN0cyA9IHNlbGVjdGlvblJlY3RzOwor
ICAgIHJldHVybiBbcmFuZ2UgYXV0b3JlbGVhc2VdOworfQorCistICh2b2lkKWRlYWxsb2MKK3sK
KyAgICBbc2VsZi5zZWxlY3Rpb25SZWN0cyByZWxlYXNlXTsKKyAgICBbc3VwZXIgZGVhbGxvY107
Cit9CisKKy0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24KK3sKKyAgICByZXR1cm4gW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCglcCkgLSBzdGFydDolQCwgZW5kOiVAIiwgW3NlbGYgY2xh
c3NdLCBzZWxmLCBOU1N0cmluZ0Zyb21DR1JlY3Qoc2VsZi5zdGFydFJlY3QpLCBOU1N0cmluZ0Zy
b21DR1JlY3Qoc2VsZi5lbmRSZWN0KV07Cit9CisKKy0gKFdLVGV4dFBvc2l0aW9uICopc3RhcnQK
K3sKKyAgICBXS1RleHRQb3NpdGlvbiAqcG9zID0gW1dLVGV4dFBvc2l0aW9uIHRleHRQb3NpdGlv
bldpdGhSZWN0OnNlbGYuc3RhcnRSZWN0XTsKKyAgICByZXR1cm4gcG9zOworfQorCistIChVSVRl
eHRQb3NpdGlvbiAqKWVuZAoreworICAgIFdLVGV4dFBvc2l0aW9uICpwb3MgPSBbV0tUZXh0UG9z
aXRpb24gdGV4dFBvc2l0aW9uV2l0aFJlY3Q6c2VsZi5lbmRSZWN0XTsKKyAgICByZXR1cm4gcG9z
OworfQorCistIChCT09MKWlzRW1wdHkKK3sKKyAgICByZXR1cm4gIXNlbGYuaXNSYW5nZTsKK30K
KworLSAoQk9PTClpc0VxdWFsOihpZClvdGhlcgoreworICAgIGFzc2VydChbb3RoZXIgaXNLaW5k
T2ZDbGFzczpbV0tUZXh0UmFuZ2UgY2xhc3NdXSk7CisgICAgV0tUZXh0UmFuZ2UgKm90aGVyUmFu
Z2UgPSAoV0tUZXh0UmFuZ2UgKilvdGhlcjsKKyAgICAKKyAgICBpZiAoc2VsZiA9PSBvdGhlcikK
KyAgICAgICAgcmV0dXJuIFlFUzsKKyAgICAKKyAgICBpZiAoc2VsZi5pc1JhbmdlKSB7CisgICAg
ICAgIGlmICghb3RoZXJSYW5nZS5pc1JhbmdlKQorICAgICAgICAgICAgcmV0dXJuIE5POworICAg
ICAgICByZXR1cm4gQ0dSZWN0RXF1YWxUb1JlY3Qoc2VsZi5zdGFydFJlY3QsIG90aGVyUmFuZ2Uu
c3RhcnRSZWN0KSAmJiBDR1JlY3RFcXVhbFRvUmVjdChzZWxmLmVuZFJlY3QsIG90aGVyUmFuZ2Uu
ZW5kUmVjdCk7CisgICAgfSBlbHNlIGlmICghc2VsZi5pc1JhbmdlKSB7CisgICAgICAgIGlmIChv
dGhlclJhbmdlLmlzUmFuZ2UpCisgICAgICAgICAgICByZXR1cm4gTk87CisgICAgICAgIHJldHVy
biBDR1JlY3RFcXVhbFRvUmVjdChzZWxmLnN0YXJ0UmVjdCwgb3RoZXJSYW5nZS5zdGFydFJlY3Qp
OworICAgIH0KKyAgICByZXR1cm4gb3RoZXJSYW5nZS5pc05vbmU7Cit9CisKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIFdLVGV4dFBvc2l0aW9uCisKK0BzeW50aGVzaXplIHBvc2l0aW9uUmVjdCA9
IF9wb3NpdGlvblJlY3Q7CisKKysgKFdLVGV4dFBvc2l0aW9uICopdGV4dFBvc2l0aW9uV2l0aFJl
Y3Q6KENHUmVjdClwb3NpdGlvblJlY3QKK3sKKyAgICBXS1RleHRQb3NpdGlvbiAqcG9zID1bW1dL
VGV4dFBvc2l0aW9uIGFsbG9jXSBpbml0XTsKKyAgICBwb3MucG9zaXRpb25SZWN0ID0gcG9zaXRp
b25SZWN0OworICAgIHJldHVybiBbcG9zIGF1dG9yZWxlYXNlXTsKK30KKworLSAoQk9PTClpc0Vx
dWFsOihpZClvdGhlcgoreworICAgIGFzc2VydChbb3RoZXIgaXNLaW5kT2ZDbGFzczpbc2VsZiBj
bGFzc11dKTsKKyAgICByZXR1cm4gQ0dSZWN0RXF1YWxUb1JlY3Qoc2VsZi5wb3NpdGlvblJlY3Qs
ICgoV0tUZXh0UG9zaXRpb24gKilvdGhlcikucG9zaXRpb25SZWN0KTsKK30KKworLSAoTlNTdHJp
bmcgKilkZXNjcmlwdGlvbgoreworICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIjxXS1RleHRQb3NpdGlvbjogJXAsIHslQH0+Iiwgc2VsZiwgTlNTdHJpbmdGcm9tQ0dSZWN0
KHNlbGYucG9zaXRpb25SZWN0KV07Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLVGV4
dFNlbGVjdGlvblJlY3QKKworLSAoaWQpaW5pdFdpdGhXZWJSZWN0OihXZWJTZWxlY3Rpb25SZWN0
ICopd1JlY3QKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmIChzZWxmKQorICAg
ICAgICBzZWxmLndlYlJlY3QgPSB3UmVjdDsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2
b2lkKWRlYWxsb2MKK3sKKyAgICBzZWxmLndlYlJlY3QgPSBuaWw7CisgICAgW3N1cGVyIGRlYWxs
b2NdOworfQorCisvLyBGSVhNRTogd2UgYXJlIHVzaW5nIHRoaXMgaW1wbGVtZW50YXRpb24gZm9y
IG5vdworLy8gdGhhdCB1c2VzIFdlYlNlbGVjdGlvblJlY3QsIGJ1dCB3ZSB3YW50IHRvIHByb3Zp
ZGUgb3VyIG93bgorLy8gYmFzZWQgb24gV2ViQ29yZTo6U2VsZWN0aW9uUmVjdC4KKworKyAoTlNB
cnJheSAqKXRleHRTZWxlY3Rpb25SZWN0c1dpdGhXZWJSZWN0czooTlNBcnJheSAqKXdlYlJlY3Rz
Cit7CisgICAgTlNNdXRhYmxlQXJyYXkgKmFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0
aENhcGFjaXR5OndlYlJlY3RzLmNvdW50XTsKKyAgICBmb3IgKFdlYlNlbGVjdGlvblJlY3QgKndl
YlJlY3QgaW4gd2ViUmVjdHMpIHsKKyAgICAgICAgUmV0YWluUHRyPFdLVGV4dFNlbGVjdGlvblJl
Y3Q+IHJlY3QgPSBhZG9wdE5TKFtbV0tUZXh0U2VsZWN0aW9uUmVjdCBhbGxvY10gaW5pdFdpdGhX
ZWJSZWN0OndlYlJlY3RdKTsKKyAgICAgICAgW2FycmF5IGFkZE9iamVjdDpyZWN0LmdldCgpXTsK
KyAgICB9CisgICAgcmV0dXJuIGFycmF5OworfQorCistIChDR1JlY3QpcmVjdAoreworICAgIHJl
dHVybiBfd2ViUmVjdC5yZWN0OworfQorCistIChVSVRleHRXcml0aW5nRGlyZWN0aW9uKXdyaXRp
bmdEaXJlY3Rpb24KK3sKKyAgICByZXR1cm4gKFVJVGV4dFdyaXRpbmdEaXJlY3Rpb24pX3dlYlJl
Y3Qud3JpdGluZ0RpcmVjdGlvbjsKK30KKworLSAoVUlUZXh0UmFuZ2UgKilyYW5nZQoreworICAg
IHJldHVybiBuaWw7Cit9CisKKy0gKEJPT0wpY29udGFpbnNTdGFydAoreworICAgIHJldHVybiBf
d2ViUmVjdC5jb250YWluc1N0YXJ0OworfQorCistIChCT09MKWNvbnRhaW5zRW5kCit7CisgICAg
cmV0dXJuIF93ZWJSZWN0LmNvbnRhaW5zRW5kOworfQorCistIChCT09MKWlzVmVydGljYWwKK3sK
KyAgICByZXR1cm4gIV93ZWJSZWN0LmlzSG9yaXpvbnRhbDsKK30KKworQGVuZAorCitAaW1wbGVt
ZW50YXRpb24gV0tBdXRvY29ycmVjdGlvblJlY3RzCisKKysgKFdLQXV0b2NvcnJlY3Rpb25SZWN0
cyAqKWF1dG9jb3JyZWN0aW9uUmVjdHNXaXRoUmVjdHM6KENHUmVjdClmaXJzdFJlY3QgbGFzdFJl
Y3Q6KENHUmVjdClsYXN0UmVjdAoreworICAgIFdLQXV0b2NvcnJlY3Rpb25SZWN0cyAqcmVjdHMg
PVtbV0tBdXRvY29ycmVjdGlvblJlY3RzIGFsbG9jXSBpbml0XTsKKyAgICByZWN0cy5maXJzdFJl
Y3QgPSBmaXJzdFJlY3Q7CisgICAgcmVjdHMubGFzdFJlY3QgPSBsYXN0UmVjdDsKKyAgICByZXR1
cm4gW3JlY3RzIGF1dG9yZWxlYXNlXTsKK30KKworQGVuZApJbmRleDogVUlQcm9jZXNzL0FQSS9p
b3MvV0tTY3JvbGxWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVUlQcm9jZXNzL0FQSS9pb3MvV0tTY3Jv
bGxWaWV3LmgJKHJldmlzaW9uIDApCisrKyBVSVByb2Nlc3MvQVBJL2lvcy9XS1Njcm9sbFZpZXcu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8
VUlLaXQvVUlXZWJTY3JvbGxWaWV3Lmg+CisKK0BpbnRlcmZhY2UgV0tTY3JvbGxWaWV3IDogVUlX
ZWJTY3JvbGxWaWV3CitAZW5kCkluZGV4OiBVSVByb2Nlc3MvQVBJL2lvcy9XS1Njcm9sbFZpZXcu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVUlQcm9jZXNzL0FQSS9pb3MvV0tTY3JvbGxWaWV3Lm1tCShyZXZp
c2lvbiAwKQorKysgVUlQcm9jZXNzL0FQSS9pb3MvV0tTY3JvbGxWaWV3Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIldLU2Nyb2xsVmlldy5oIgorCitAaW1wbGVtZW50YXRpb24gV0tTY3JvbGxWaWV3CisK
Ky0gKEJPT0wpdG91Y2hlc1Nob3VsZENhbmNlbEluQ29udGVudFZpZXc6KFVJVmlldyAqKWNvbnRl
bnRWaWV3Cit7CisgICAgcmV0dXJuIE5POworfQorCitAZW5kCisKSW5kZXg6IFVJUHJvY2Vzcy9B
UEkvaW9zL1dLVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBVSVByb2Nlc3MvQVBJL2lvcy9XS1ZpZXcu
bW0JKHJldmlzaW9uIDApCisrKyBVSVByb2Nlc3MvQVBJL2lvcy9XS1ZpZXcubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIldLVmlldy5oIgorCisjaW1wb3J0ICJXS0NvbnRlbnRWaWV3LmgiCisjaW1wb3J0
ICJXS1Njcm9sbFZpZXcuaCIKKyNpbXBvcnQgPFVJS2l0L1VJU2NyZWVuLmg+CisjaW1wb3J0IDxV
SUtpdC9VSVNjcm9sbFZpZXdfUHJpdmF0ZS5oPgorI2ltcG9ydCA8VUlLaXQvX1VJV2ViVmlld3Bv
cnRIYW5kbGVyLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK3N0YXRpYyBjb25zdCBm
bG9hdCBtaW5XZWJWaWV3U2NhbGUgPSAwLjI1Oworc3RhdGljIGNvbnN0IGZsb2F0IG1heFdlYlZp
ZXdTY2FsZSA9IDU7CitzdGF0aWMgc3RydWN0IF9VSVdlYlZpZXdwb3J0Q29uZmlndXJhdGlvbiBz
dGFuZGFyZFZpZXdwb3J0Q29uZmlndXJhdGlvbiA9IHsgeyBVSVdlYlZpZXdwb3J0U3RhbmRhcmRW
aWV3cG9ydFdpZHRoLCBVSVdlYlZpZXdwb3J0R3Jvd3NBbmRTaHJpbmtzVG9GaXRIZWlnaHQgfSwg
VUlXZWJWaWV3cG9ydFNjYWxlRm9yU2NhbGVzVG9GaXQsIG1pbldlYlZpZXdTY2FsZSwgbWF4V2Vi
Vmlld1NjYWxlLCB0cnVlIH07CisKK0BpbnRlcmZhY2UgV0tWaWV3ICgpIDxVSVNjcm9sbFZpZXdE
ZWxlZ2F0ZSwgV0tDb250ZW50Vmlld0RlbGVnYXRlLCBfVUlXZWJWaWV3cG9ydEhhbmRsZXJEZWxl
Z2F0ZT4KKy0gKHZvaWQpX3NldERvY3VtZW50U2NhbGU6KENHRmxvYXQpbmV3U2NhbGU7CitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBXS1ZpZXcgeworICAgIFJldGFpblB0cjxXS1Njcm9sbFZpZXc+
IF9zY3JvbGxWaWV3OworICAgIFJldGFpblB0cjxXS0NvbnRlbnRWaWV3PiBfY29udGVudFZpZXc7
CisKKyAgICBCT09MIF91c2VySGFzQ2hhbmdlZFBhZ2VTY2FsZTsKKyAgICBSZXRhaW5QdHI8X1VJ
V2ViVmlld3BvcnRIYW5kbGVyPiBfdmlld3BvcnRIYW5kbGVyOworfQorCistIChpZClpbml0V2l0
aENvZGVyOihOU0NvZGVyICopY29kZXIKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorICAg
IHJldHVybiBuaWw7Cit9CisKKy0gKGlkKWluaXRXaXRoRnJhbWU6KENHUmVjdClmcmFtZQorewor
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhGcmFtZTpmcmFtZV0pKQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgW3NlbGYgX2NvbW1vbkluaXRpYWxpemF0aW9uV2l0aFByb2Nlc3NH
cm91cDpuaWwgYnJvd3NpbmdDb250ZXh0R3JvdXA6bmlsXTsKKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAoaWQpaW5pdFdpdGhGcmFtZTooQ0dSZWN0KWZyYW1lIHByb2Nlc3NHcm91cDooV0tQcm9j
ZXNzR3JvdXAgKilwcm9jZXNzR3JvdXAgYnJvd3NpbmdDb250ZXh0R3JvdXA6KFdLQnJvd3NpbmdD
b250ZXh0R3JvdXAgKilicm93c2luZ0NvbnRleHRHcm91cAoreworICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdFdpdGhGcmFtZTpmcmFtZV0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAg
W3NlbGYgX2NvbW1vbkluaXRpYWxpemF0aW9uV2l0aFByb2Nlc3NHcm91cDpwcm9jZXNzR3JvdXAg
YnJvd3NpbmdDb250ZXh0R3JvdXA6YnJvd3NpbmdDb250ZXh0R3JvdXBdOworICAgIHJldHVybiBz
ZWxmOworfQorCistIChpZClpbml0V2l0aEZyYW1lOihDR1JlY3QpZnJhbWUgcHJvY2Vzc0dyb3Vw
OihXS1Byb2Nlc3NHcm91cCAqKXByb2Nlc3NHcm91cCBicm93c2luZ0NvbnRleHRHcm91cDooV0tC
cm93c2luZ0NvbnRleHRHcm91cCAqKWJyb3dzaW5nQ29udGV4dEdyb3VwIHJlbGF0ZWRUb1ZpZXc6
KFdLVmlldyAqKXJlbGF0ZWRWaWV3Cit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KKyAgICBy
ZXR1cm4gbmlsOworfQorCistICh2b2lkKXNldEZyYW1lOihDR1JlY3QpZnJhbWUKK3sKKyAgICBD
R1JlY3Qgb2xkRnJhbWUgPSBbc2VsZiBmcmFtZV07CisgICAgW3N1cGVyIHNldEZyYW1lOmZyYW1l
XTsKKworICAgIGlmICghQ0dTaXplRXF1YWxUb1NpemUob2xkRnJhbWUuc2l6ZSwgZnJhbWUuc2l6
ZSkpCisgICAgICAgIFtzZWxmIF9mcmFtZU9yQm91bmRzQ2hhbmdlZF07Cit9CisKKy0gKHZvaWQp
c2V0Qm91bmRzOihDR1JlY3QpYm91bmRzCit7CisgICAgQ0dSZWN0IG9sZEJvdW5kcyA9IFtzZWxm
IGJvdW5kc107CisgICAgW3N1cGVyIHNldEJvdW5kczpib3VuZHNdOworICAgIAorICAgIGlmICgh
Q0dTaXplRXF1YWxUb1NpemUob2xkQm91bmRzLnNpemUsIGJvdW5kcy5zaXplKSkKKyAgICAgICAg
W3NlbGYgX2ZyYW1lT3JCb3VuZHNDaGFuZ2VkXTsKK30KKworLSAoV0tCcm93c2luZ0NvbnRleHRD
b250cm9sbGVyICopYnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcgoreworICAgIHJldHVybiBbX2Nv
bnRlbnRWaWV3IGJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJdOworfQorCisjcHJhZ21hIG1hcmsg
V0tDb250ZW50Vmlld0RlbGVnYXRlCisKKy0gKHZvaWQpY29udGVudFZpZXc6KFdLQ29udGVudFZp
ZXcgKiljb250ZW50VmlldyBjb250ZW50c1NpemVEaWRDaGFuZ2U6KENHU2l6ZSluZXdTaXplCit7
CisgICAgQ0dGbG9hdCB6b29tU2NhbGUgPSBbX3Njcm9sbFZpZXcgem9vbVNjYWxlXTsKKyAgICBD
R1NpemUgY29udGVudHNTaXplSW5TY3JvbGxWaWV3Q29vcmRpbmF0ZXMgPSBDR1NpemVNYWtlKG5l
d1NpemUud2lkdGggKiB6b29tU2NhbGUsIG5ld1NpemUuaGVpZ2h0ICogem9vbVNjYWxlKTsKKyAg
ICBbX3Njcm9sbFZpZXcgc2V0Q29udGVudFNpemU6Y29udGVudHNTaXplSW5TY3JvbGxWaWV3Q29v
cmRpbmF0ZXNdOworCisgICAgW192aWV3cG9ydEhhbmRsZXIgdXBkYXRlOl57CisgICAgICAgICBb
X3ZpZXdwb3J0SGFuZGxlciBzZXREb2N1bWVudEJvdW5kczp7Q0dQb2ludFplcm8sIG5ld1NpemV9
XTsKKyAgICB9XTsKK30KKworLSAodm9pZCljb250ZW50Vmlld2RpZENvbW1pdExvYWRGb3JNYWlu
RnJhbWU6KFdLQ29udGVudFZpZXcgKiljb250ZW50VmlldworeworICAgIF91c2VySGFzQ2hhbmdl
ZFBhZ2VTY2FsZSA9IE5POworCisgICAgV0tDb250ZW50VHlwZSBjb250ZW50VHlwZSA9IFtfY29u
dGVudFZpZXcgY29udGVudFR5cGVdOworICAgIFtfdmlld3BvcnRIYW5kbGVyIHVwZGF0ZTpeewor
ICAgICAgICBbX3ZpZXdwb3J0SGFuZGxlciBjbGVhcldlYktpdFZpZXdwb3J0Q29uZmlndXJhdGlv
bkZsYWdzXTsKKyAgICAgICAgc3RydWN0IF9VSVdlYlZpZXdwb3J0Q29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uID0gc3RhbmRhcmRWaWV3cG9ydENvbmZpZ3VyYXRpb247CisKKyAgICAgICAgaWYg
KGNvbnRlbnRUeXBlID09IFBsYWluVGV4dCkgeworICAgICAgICAgICAgQ0dGbG9hdCBzY3JlZW5X
aWR0aCA9IFtbVUlTY3JlZW4gbWFpblNjcmVlbl0gYm91bmRzXS5zaXplLndpZHRoOworICAgICAg
ICAgICAgY29uZmlndXJhdGlvbi5zaXplLndpZHRoID0gc2NyZWVuV2lkdGg7CisgICAgICAgIH0g
ZWxzZSBpZiAoY29udGVudFR5cGUgPT0gV0tDb250ZW50VHlwZTo6SW1hZ2UpCisgICAgICAgICAg
ICBjb25maWd1cmF0aW9uLm1pbmltdW1TY2FsZSA9IDAuMDE7CisKKyAgICAgICAgW192aWV3cG9y
dEhhbmRsZXIgcmVzZXRWaWV3cG9ydENvbmZpZ3VyYXRpb246JmNvbmZpZ3VyYXRpb25dOworICAg
IH1dOworfQorCistICh2b2lkKWNvbnRlbnRWaWV3RGlkUmVjZWl2ZU1vYmlsZURvY1R5cGU6KFdL
Q29udGVudFZpZXcgKiljb250ZW50VmlldworeworICAgIFtfdmlld3BvcnRIYW5kbGVyIHVwZGF0
ZTpeeworICAgICAgICBzdHJ1Y3QgX1VJV2ViVmlld3BvcnRDb25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24gPSBzdGFuZGFyZFZpZXdwb3J0Q29uZmlndXJhdGlvbjsKKyAgICAgICAgY29uZmlndXJh
dGlvbi5taW5pbXVtU2NhbGUgPSAxOworICAgICAgICBjb25maWd1cmF0aW9uLnNpemUgPSBDR1Np
emVNYWtlKDMyMC4wLCBVSVdlYlZpZXdwb3J0R3Jvd3NBbmRTaHJpbmtzVG9GaXRIZWlnaHQpOwor
ICAgICAgICBbX3ZpZXdwb3J0SGFuZGxlciByZXNldFZpZXdwb3J0Q29uZmlndXJhdGlvbjomY29u
ZmlndXJhdGlvbl07CisgICAgfV07Cit9CisKKy0gKHZvaWQpY29udGVudFZpZXc6KFdLQ29udGVu
dFZpZXcgKiljb250ZW50VmlldyBkaWRDaGFuZ2VWaWV3cG9ydEFyZ3VtZW50c1NpemU6KENHU2l6
ZSluZXdTaXplIGluaXRpYWxTY2FsZTooZmxvYXQpaW5pdGlhbFNjYWxlIG1pbmltdW1TY2FsZToo
ZmxvYXQpbWluaW11bVNjYWxlIG1heGltdW1TY2FsZTooZmxvYXQpbWF4aW11bVNjYWxlIGFsbG93
c1VzZXJTY2FsaW5nOihmbG9hdClhbGxvd3NVc2VyU2NhbGluZworeworICAgIFtfdmlld3BvcnRI
YW5kbGVyIHVwZGF0ZTpeeworICAgICAgICBbX3ZpZXdwb3J0SGFuZGxlciBhcHBseVdlYktpdFZp
ZXdwb3J0QXJndW1lbnRzU2l6ZTpuZXdTaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5pdGlhbFNjYWxlOmluaXRpYWxTY2FsZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltdW1TY2FsZTptaW5pbXVtU2Nh
bGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhpbXVt
U2NhbGU6bWF4aW11bVNjYWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFsbG93c1VzZXJTY2FsaW5nOmFsbG93c1VzZXJTY2FsaW5nXTsKKyAgICB9XTsKK30KKwor
I3ByYWdtYSBtYXJrIC0gX1VJV2ViVmlld3BvcnRIYW5kbGVyRGVsZWdhdGUKKy0gKHZvaWQpdmll
d3BvcnRIYW5kbGVyRGlkQ2hhbmdlU2NhbGVzOihfVUlXZWJWaWV3cG9ydEhhbmRsZXIgKil2aWV3
cG9ydEhhbmRsZXIKK3sKKyAgICBBU1NFUlQodmlld3BvcnRIYW5kbGVyID09IF92aWV3cG9ydEhh
bmRsZXIpOworICAgIFtfc2Nyb2xsVmlldyBzZXRNaW5pbXVtWm9vbVNjYWxlOnZpZXdwb3J0SGFu
ZGxlci5taW5pbXVtU2NhbGVdOworICAgIFtfc2Nyb2xsVmlldyBzZXRNYXhpbXVtWm9vbVNjYWxl
OnZpZXdwb3J0SGFuZGxlci5tYXhpbXVtU2NhbGVdOworICAgIFtfc2Nyb2xsVmlldyBzZXRab29t
RW5hYmxlZDp2aWV3cG9ydEhhbmRsZXIuYWxsb3dzVXNlclNjYWxpbmddOworCisgICAgaWYgKCFf
dXNlckhhc0NoYW5nZWRQYWdlU2NhbGUpCisgICAgICAgIFtzZWxmIF9zZXREb2N1bWVudFNjYWxl
OnZpZXdwb3J0SGFuZGxlci5pbml0aWFsU2NhbGVdOworICAgIGVsc2UgeworICAgICAgICBDR0Zs
b2F0IGN1cnJlbnRTY2FsZSA9IFtfc2Nyb2xsVmlldyB6b29tU2NhbGVdOworICAgICAgICBDR0Zs
b2F0IHZhbGlkU2NhbGUgPSBzdGQ6Om1heChzdGQ6Om1pbihjdXJyZW50U2NhbGUsIHN0YXRpY19j
YXN0PENHRmxvYXQ+KHZpZXdwb3J0SGFuZGxlci5tYXhpbXVtU2NhbGUpKSwgc3RhdGljX2Nhc3Q8
Q0dGbG9hdD4odmlld3BvcnRIYW5kbGVyLm1pbmltdW1TY2FsZSkpOworICAgICAgICBbc2VsZiBf
c2V0RG9jdW1lbnRTY2FsZTp2YWxpZFNjYWxlXTsKKyAgICB9Cit9CisKKy0gKHZvaWQpdmlld3Bv
cnRIYW5kbGVyOihfVUlXZWJWaWV3cG9ydEhhbmRsZXIgKil2aWV3cG9ydEhhbmRsZXIgZGlkQ2hh
bmdlVmlld3BvcnRTaXplOihDR1NpemUpbmV3U2l6ZQoreworICAgIEFTU0VSVCh2aWV3cG9ydEhh
bmRsZXIgPT0gX3ZpZXdwb3J0SGFuZGxlcik7CisgICAgW19jb250ZW50VmlldyBzZXRWaWV3cG9y
dFNpemU6bmV3U2l6ZV07Cit9CisKKworI3ByYWdtYSBtYXJrIC0gVUlTY3JvbGxWaWV3RGVsZWdh
dGUKKy0gKFVJVmlldyAqKXZpZXdGb3Jab29taW5nSW5TY3JvbGxWaWV3OihVSVNjcm9sbFZpZXcg
KilzY3JvbGxWaWV3Cit7CisgICAgQVNTRVJUKF9zY3JvbGxWaWV3ID09IHNjcm9sbFZpZXcpOwor
ICAgIHJldHVybiBfY29udGVudFZpZXcuZ2V0KCk7Cit9CisKKy0gKHZvaWQpc2Nyb2xsVmlld1dp
bGxCZWdpblpvb21pbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgd2l0aFZpZXc6KFVJVmll
dyAqKXZpZXcKK3sKKyAgICBpZiAoc2Nyb2xsVmlldy5waW5jaEdlc3R1cmVSZWNvZ25pemVyLnN0
YXRlID09IFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUJlZ2FuKQorICAgICAgICBfdXNlckhhc0No
YW5nZWRQYWdlU2NhbGUgPSBZRVM7Cit9CisKKy0gKHZvaWQpc2Nyb2xsVmlld0RpZEVuZERyYWdn
aW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3IHdpbGxEZWNlbGVyYXRlOihCT09MKWRlY2Vs
ZXJhdGUKK3sKKyAgICAvLyBJZiB3ZSdyZSBkZWNlbGVyYXRpbmcsIHNjcm9sbCBvZmZzZXQgd2ls
bCBiZSB1cGRhdGVkIHdoZW4gc2Nyb2xsVmlld0RpZEZpbmlzaERlY2VsZXJhdGluZzogaXMgY2Fs
bGVkLgorICAgIGlmICghZGVjZWxlcmF0ZSkKKyAgICAgICAgW19jb250ZW50VmlldyBkaWRTY3Jv
bGxUbzpzY3JvbGxWaWV3LmNvbnRlbnRPZmZzZXRdOworfQorCistICh2b2lkKXNjcm9sbFZpZXdE
aWRFbmREZWNlbGVyYXRpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcKK3sKKyAgICBbX2Nv
bnRlbnRWaWV3IGRpZFNjcm9sbFRvOnNjcm9sbFZpZXcuY29udGVudE9mZnNldF07Cit9CisKKy0g
KHZvaWQpc2Nyb2xsVmlld0RpZFNjcm9sbFRvVG9wOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3
Cit7CisgICAgW19jb250ZW50VmlldyBkaWRTY3JvbGxUbzpzY3JvbGxWaWV3LmNvbnRlbnRPZmZz
ZXRdOworfQorCistICh2b2lkKXNjcm9sbFZpZXdEaWRFbmRab29taW5nOihVSVNjcm9sbFZpZXcg
KilzY3JvbGxWaWV3IHdpdGhWaWV3OihVSVZpZXcgKil2aWV3IGF0U2NhbGU6KENHRmxvYXQpc2Nh
bGUKK3sKKyAgICBBU1NFUlQoc2Nyb2xsVmlldyA9PSBfc2Nyb2xsVmlldyk7CisgICAgW19jb250
ZW50VmlldyBkaWRab29tVG9TY2FsZTpzY2FsZV07Cit9CisKKyNwcmFnbWEgbWFyayBJbnRlcm5h
bAorCistICh2b2lkKV9jb21tb25Jbml0aWFsaXphdGlvbldpdGhQcm9jZXNzR3JvdXA6KFdLUHJv
Y2Vzc0dyb3VwICopcHJvY2Vzc0dyb3VwIGJyb3dzaW5nQ29udGV4dEdyb3VwOihXS0Jyb3dzaW5n
Q29udGV4dEdyb3VwICopYnJvd3NpbmdDb250ZXh0R3JvdXAKK3sKKyAgICBBU1NFUlQoIV9zY3Jv
bGxWaWV3KTsKKyAgICBBU1NFUlQoIV9jb250ZW50Vmlldyk7CisKKyAgICBDR1JlY3QgYm91bmRz
ID0gc2VsZi5ib3VuZHM7CisKKyAgICBfc2Nyb2xsVmlldyA9IGFkb3B0TlMoW1tXS1Njcm9sbFZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Ym91bmRzXSk7CisgICAgW19zY3JvbGxWaWV3IHNldERl
bGVnYXRlOnNlbGZdOworICAgIFtfc2Nyb2xsVmlldyBzZXRCb3VuY2VzWm9vbTpZRVNdOworCisg
ICAgW3NlbGYgYWRkU3Vidmlldzpfc2Nyb2xsVmlldy5nZXQoKV07CisKKyAgICBfY29udGVudFZp
ZXcgPSBhZG9wdE5TKFtbV0tDb250ZW50VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpib3VuZHMg
cHJvY2Vzc0dyb3VwOnByb2Nlc3NHcm91cCBicm93c2luZ0NvbnRleHRHcm91cDpicm93c2luZ0Nv
bnRleHRHcm91cF0pOworICAgIFtfY29udGVudFZpZXcgc2V0RGVsZWdhdGU6c2VsZl07CisgICAg
W1tfY29udGVudFZpZXcgbGF5ZXJdIHNldEFuY2hvclBvaW50OkNHUG9pbnRaZXJvXTsKKyAgICBb
X2NvbnRlbnRWaWV3IHNldEZyYW1lOmJvdW5kc107CisgICAgW19zY3JvbGxWaWV3IGFkZFN1YnZp
ZXc6X2NvbnRlbnRWaWV3LmdldCgpXTsKKworICAgIF92aWV3cG9ydEhhbmRsZXIgPSBhZG9wdE5T
KFtbX1VJV2ViVmlld3BvcnRIYW5kbGVyIGFsbG9jXSBpbml0XSk7CisgICAgW192aWV3cG9ydEhh
bmRsZXIgc2V0RGVsZWdhdGU6c2VsZl07CisKKyAgICBbc2VsZiBfZnJhbWVPckJvdW5kc0NoYW5n
ZWRdOworfQorCistICh2b2lkKV9mcmFtZU9yQm91bmRzQ2hhbmdlZAoreworICAgIENHUmVjdCBi
b3VuZHMgPSBbc2VsZiBib3VuZHNdOworICAgIFtfdmlld3BvcnRIYW5kbGVyIHVwZGF0ZTpeewor
ICAgICAgICBbX3ZpZXdwb3J0SGFuZGxlciBzZXRBdmFpbGFibGVWaWV3U2l6ZTpib3VuZHMuc2l6
ZV07CisgICAgfV07CisgICAgW19zY3JvbGxWaWV3IHNldEZyYW1lOmJvdW5kc107CisgICAgW19j
b250ZW50VmlldyBzZXRNaW5pbXVtU2l6ZTpib3VuZHMuc2l6ZV07Cit9CisKKy0gKHZvaWQpX3Nl
dERvY3VtZW50U2NhbGU6KENHRmxvYXQpbmV3U2NhbGUKK3sKKyAgICBDR1BvaW50IGNvbnRlbnRP
ZmZzZXRJbkRvY3VtZW50Q29vcmRpbmF0ZXMgPSBbX3Njcm9sbFZpZXcgY29udmVydFBvaW50Oltf
c2Nyb2xsVmlldyBjb250ZW50T2Zmc2V0XSB0b1ZpZXc6X2NvbnRlbnRWaWV3LmdldCgpXTsKKwor
ICAgIFtfc2Nyb2xsVmlldyBzZXRab29tU2NhbGU6bmV3U2NhbGVdOworICAgIFtfY29udGVudFZp
ZXcgZGlkWm9vbVRvU2NhbGU6bmV3U2NhbGVdOworCisgICAgQ0dQb2ludCBjb250ZW50T2Zmc2V0
ID0gW19zY3JvbGxWaWV3IGNvbnZlcnRQb2ludDpjb250ZW50T2Zmc2V0SW5Eb2N1bWVudENvb3Jk
aW5hdGVzIGZyb21WaWV3Ol9jb250ZW50Vmlldy5nZXQoKV07CisgICAgW19zY3JvbGxWaWV3IHNl
dENvbnRlbnRPZmZzZXQ6Y29udGVudE9mZnNldF07Cit9CisKK0BlbmQKSW5kZXg6IFVJUHJvY2Vz
cy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBV
SVByb2Nlc3MvQVBJL21hYy9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIubW0JKHJldmlzaW9u
IDE1OTY1MSkKKysrIFVJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxl
ci5tbQkod29ya2luZyBjb3B5KQpAQCAtODEsNiArODEsOSBAQAogICAgIAogICAgIC8vIERlbGVn
YXRlIGZvciBsb2FkIGNhbGxiYWNrcy4KICAgICBpZDxXS0Jyb3dzaW5nQ29udGV4dExvYWREZWxl
Z2F0ZT4gX2xvYWREZWxlZ2F0ZTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWQ8V0tCcm93c2lu
Z0NvbnRleHRMb2FkRGVsZWdhdGVJbnRlcm5hbD4gX2xvYWREZWxlZ2F0ZUludGVybmFsOworI2Vu
ZGlmIC8vUExBVEZPUk0oSU9TKQogCiAjaWYgV0tfQVBJX0VOQUJMRUQKICAgICAvLyBEZWxlZ2F0
ZSBmb3IgcG9saWN5IGNhbGxiYWNrcy4KQEAgLTQ5Nyw2ICs1MDAsMTAgQEAKICAgICAgICAgcmV0
dXJuOwogCiAgICAgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpicm93c2luZ0NvbnRleHQg
PSAoV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICopY2xpZW50SW5mbzsKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgaWYgKFticm93c2luZ0NvbnRleHQubG9hZERlbGVnYXRlSW50ZXJuYWwgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihicm93c2luZ0NvbnRleHRDb250cm9sbGVyRGlkQ29t
bWl0TG9hZDopXSkKKyAgICAgICAgW2Jyb3dzaW5nQ29udGV4dC5sb2FkRGVsZWdhdGVJbnRlcm5h
bCBicm93c2luZ0NvbnRleHRDb250cm9sbGVyRGlkQ29tbWl0TG9hZDpicm93c2luZ0NvbnRleHRd
OworI2VuZGlmIC8vUExBVEZPUk0oSU9TKQogICAgIGlmIChbYnJvd3NpbmdDb250ZXh0LmxvYWRE
ZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGJyb3dzaW5nQ29udGV4dENvbnRy
b2xsZXJEaWRDb21taXRMb2FkOildKQogICAgICAgICBbYnJvd3NpbmdDb250ZXh0LmxvYWREZWxl
Z2F0ZSBicm93c2luZ0NvbnRleHRDb250cm9sbGVyRGlkQ29tbWl0TG9hZDpicm93c2luZ0NvbnRl
eHRdOwogfQpAQCAtNjc0LDYgKzY4MSwxOCBAQAogfQogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJ
T1MpCistIChpZCA8V0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGVJbnRlcm5hbD4pbG9hZERl
bGVnYXRlSW50ZXJuYWwKK3sKKyAgICByZXR1cm4gX2RhdGEtPl9sb2FkRGVsZWdhdGVJbnRlcm5h
bDsKK30KKworLSAodm9pZClzZXRMb2FkRGVsZWdhdGVJbnRlcm5hbDooaWQgPFdLQnJvd3NpbmdD
b250ZXh0TG9hZERlbGVnYXRlSW50ZXJuYWw+KWxvYWREZWxlZ2F0ZUludGVybmFsCit7CisgICAg
X2RhdGEtPl9sb2FkRGVsZWdhdGVJbnRlcm5hbCA9IGxvYWREZWxlZ2F0ZUludGVybmFsOworfQor
I2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKwogLyogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQg
ZnJvbSBhc3NvY2lhdGUgdmlldy4gKi8KIAogLSAoaWQpX2luaXRXaXRoUGFnZVJlZjooV0tQYWdl
UmVmKXBhZ2VSZWYKSW5kZXg6IFVJUHJvY2Vzcy9BUEkvbWFjL1dLQnJvd3NpbmdDb250ZXh0Q29u
dHJvbGxlckludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVUlQcm9jZXNzL0FQSS9tYWMvV0tCcm93
c2luZ0NvbnRleHRDb250cm9sbGVySW50ZXJuYWwuaAkocmV2aXNpb24gMTU5NjUxKQorKysgVUlQ
cm9jZXNzL0FQSS9tYWMvV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVySW50ZXJuYWwuaAkod29y
a2luZyBjb3B5KQpAQCAtMjUsOCArMjUsMTkgQEAKIAogI2ltcG9ydCAiV0tCcm93c2luZ0NvbnRl
eHRDb250cm9sbGVyUHJpdmF0ZS5oIgogCisjaWYgUExBVEZPUk0oSU9TKQorQHByb3RvY29sIFdL
QnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlSW50ZXJuYWwgPE5TT2JqZWN0PgorQG9wdGlvbmFs
CistICh2b2lkKWJyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJEaWRDb21taXRMb2FkOihXS0Jyb3dz
aW5nQ29udGV4dENvbnRyb2xsZXIgKilzZW5kZXI7CitAZW5kCisjZW5kaWYgLy8gUExBVEZPUk0o
SU9TKQorCiBAaW50ZXJmYWNlIFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAoSW50ZXJuYWwp
CiAKKyNpZiBQTEFURk9STShJT1MpCitAcHJvcGVydHkgKGFzc2lnbikgaWQgPFdLQnJvd3NpbmdD
b250ZXh0TG9hZERlbGVnYXRlSW50ZXJuYWw+IGxvYWREZWxlZ2F0ZUludGVybmFsOworI2VuZGlm
IC8vIFBMQVRGT1JNKElPUykKKwogLyogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSBh
c3NvY2lhdGUgdmlldy4gKi8KIC0gKGlkKV9pbml0V2l0aFBhZ2VSZWY6KFdLUGFnZVJlZilwYWdl
UmVmOwogCkluZGV4OiBVSVByb2Nlc3MvQVBJL21hYy9XS1Byb2Nlc3NHcm91cC5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBVSVByb2Nlc3MvQVBJL21hYy9XS1Byb2Nlc3NHcm91cC5tbQkocmV2aXNpb24gMTU5
NjUxKQorKysgVUlQcm9jZXNzL0FQSS9tYWMvV0tQcm9jZXNzR3JvdXAubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDYgKzQyLDEyIEBACiAjaW1wb3J0ICJXZWJGcmFtZVByb3h5LmgiCiAjaW1wb3J0
IDx3dGYvUmV0YWluUHRyLmg+CiAKKyNpZiBQTEFURk9STShJT1MpCisjaW1wb3J0ICJXS0FQSUNh
c3QuaCIKKyNpbXBvcnQgIldLR2VvbG9jYXRpb25Qcm92aWRlcklPUy5oIgorI2ltcG9ydCA8V2Vi
Q29yZS9XZWJDb3JlVGhyZWFkU3lzdGVtSW50ZXJmYWNlLmg+CisjZW5kaWYKKwogdXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKIAogQGludGVyZmFjZSBXS1Byb2Nlc3NHcm91cERhdGEgOiBOU09iamVj
dCB7CkBAIC00OSw2ICs1NSwxMCBAQAogICAgIC8vIFVuZGVybHlpbmcgY29udGV4dCBvYmplY3Qu
CiAgICAgV0tSZXRhaW5QdHI8V0tDb250ZXh0UmVmPiBfY29udGV4dFJlZjsKIAorI2lmIFBMQVRG
T1JNKElPUykKKyAgICBSZXRhaW5QdHI8V0tHZW9sb2NhdGlvblByb3ZpZGVySU9TPiBfZ2VvbG9j
YXRpb25Qcm92aWRlcjsKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKICAgICAvLyBEZWxlZ2F0
ZSBmb3IgY2FsbGJhY2tzLgogICAgIGlkPFdLUHJvY2Vzc0dyb3VwRGVsZWdhdGU+IF9kZWxlZ2F0
ZTsKIH0KQEAgLTE3Niw2ICsxODYsMTEgQEAKIAogICAgIF9kYXRhID0gW1tXS1Byb2Nlc3NHcm91
cERhdGEgYWxsb2NdIGluaXRdOwogICAgIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhN
RTogUmVtb3ZlIG9uY2UgPHJkYXI6Ly9wcm9ibGVtLzE1MjU2NTcyPiAgaXMgZml4ZWQuCisgICAg
SW5pdFdlYkNvcmVUaHJlYWRTeXN0ZW1JbnRlcmZhY2UoKTsKKyNlbmRpZgorCiAgICAgaWYgKGJ1
bmRsZVVSTCkKICAgICAgICAgX2RhdGEtPl9jb250ZXh0UmVmID0gYWRvcHRXSyhXS0NvbnRleHRD
cmVhdGVXaXRoSW5qZWN0ZWRCdW5kbGVQYXRoKGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoQ0ZT
dHJpbmcoKENGU3RyaW5nUmVmKVtidW5kbGVVUkwgcGF0aF0pKS5nZXQoKSkpOwogICAgIGVsc2UK
QEAgLTIxOSw0ICsyMzQsMTMgQEAKICAgICByZXR1cm4gX2RhdGEtPl9jb250ZXh0UmVmLmdldCgp
OwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorLSAoV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TICop
IF9nZW9sb2NhdGlvblByb3ZpZGVyCit7CisgICAgaWYgKCFfZGF0YS0+X2dlb2xvY2F0aW9uUHJv
dmlkZXIpCisgICAgICAgIF9kYXRhLT5fZ2VvbG9jYXRpb25Qcm92aWRlciA9IGFkb3B0TlMoW1tX
S0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MgYWxsb2NdIGluaXRXaXRoQ29udGV4dDp0b0ltcGwoX2Rh
dGEtPl9jb250ZXh0UmVmLmdldCgpKV0pOworICAgIHJldHVybiBfZGF0YS0+X2dlb2xvY2F0aW9u
UHJvdmlkZXIuZ2V0KCk7Cit9CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCiBAZW5kCkluZGV4
OiBVSVByb2Nlc3MvQVBJL21hYy9XS1Byb2Nlc3NHcm91cFByaXZhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBVSVByb2Nlc3MvQVBJL21hYy9XS1Byb2Nlc3NHcm91cFByaXZhdGUuaAkocmV2aXNpb24gMTU5
NjUxKQorKysgVUlQcm9jZXNzL0FQSS9tYWMvV0tQcm9jZXNzR3JvdXBQcml2YXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDggKzI2LDE1IEBACiAjaW1wb3J0IDxXZWJLaXQyL1dLUHJvY2Vzc0dy
b3VwLmg+CiAjaW1wb3J0IDxXZWJLaXQyL1dLQmFzZS5oPgogCisjaWYgUExBVEZPUk0oSU9TKQor
QGNsYXNzIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUzsKKyNlbmRpZgorCiBAaW50ZXJmYWNlIFdL
UHJvY2Vzc0dyb3VwIChQcml2YXRlKQogCiBAcHJvcGVydHkocmVhZG9ubHkpIFdLQ29udGV4dFJl
ZiBfY29udGV4dFJlZjsKKyNpZiBQTEFURk9STShJT1MpCitAcHJvcGVydHkocmVhZG9ubHkpIFdL
R2VvbG9jYXRpb25Qcm92aWRlcklPUyAqX2dlb2xvY2F0aW9uUHJvdmlkZXI7CisjZW5kaWYKIAog
QGVuZApJbmRleDogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVUlQ
cm9jZXNzL0FQSS9tYWMvV0tWaWV3LmgJKHJldmlzaW9uIDE1OTY1MSkKKysrIFVJUHJvY2Vzcy9B
UEkvbWFjL1dLVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMywxMSBAQAogICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpZiBUQVJHRVRfT1NfSVBIT05F
CisjaW1wb3J0IDxVSUtpdC9VSUtpdC5oPgorI2Vsc2UKICNpbXBvcnQgPENvY29hL0NvY29hLmg+
CisjZW5kaWYKICNpbXBvcnQgPFdlYktpdDIvV0tEZWNsYXJhdGlvblNwZWNpZmllcnMuaD4KIAog
QGNsYXNzIFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcjsKQEAgLTMxLDE1ICszNSwyMCBAQAog
QGNsYXNzIFdLUHJvY2Vzc0dyb3VwOwogQGNsYXNzIFdLVmlld0RhdGE7CiAKKyNpZiBUQVJHRVRf
T1NfSVBIT05FCiBXS19FWFBPUlQKK0BpbnRlcmZhY2UgV0tWaWV3IDogVUlWaWV3IHsKKyNlbHNl
CitXS19FWFBPUlQKIEBpbnRlcmZhY2UgV0tWaWV3IDogTlNWaWV3IDxOU1RleHRJbnB1dENsaWVu
dD4geworI2VuZGlmCiBAcHJpdmF0ZQogICAgIFdLVmlld0RhdGEgKl9kYXRhOwogICAgIHVuc2ln
bmVkIF91bnVzZWQ7CiB9CiAKLS0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBwcm9j
ZXNzR3JvdXA6KFdLUHJvY2Vzc0dyb3VwICopcHJvY2Vzc0dyb3VwIGJyb3dzaW5nQ29udGV4dEdy
b3VwOihXS0Jyb3dzaW5nQ29udGV4dEdyb3VwICopYnJvd3NpbmdDb250ZXh0R3JvdXA7Ci0tIChp
ZClpbml0V2l0aEZyYW1lOihOU1JlY3QpZnJhbWUgcHJvY2Vzc0dyb3VwOihXS1Byb2Nlc3NHcm91
cCAqKXByb2Nlc3NHcm91cCBicm93c2luZ0NvbnRleHRHcm91cDooV0tCcm93c2luZ0NvbnRleHRH
cm91cCAqKWJyb3dzaW5nQ29udGV4dEdyb3VwIHJlbGF0ZWRUb1ZpZXc6KFdLVmlldyAqKXJlbGF0
ZWRWaWV3OworLSAoaWQpaW5pdFdpdGhGcmFtZTooQ0dSZWN0KWZyYW1lIHByb2Nlc3NHcm91cDoo
V0tQcm9jZXNzR3JvdXAgKilwcm9jZXNzR3JvdXAgYnJvd3NpbmdDb250ZXh0R3JvdXA6KFdLQnJv
d3NpbmdDb250ZXh0R3JvdXAgKilicm93c2luZ0NvbnRleHRHcm91cDsKKy0gKGlkKWluaXRXaXRo
RnJhbWU6KENHUmVjdClmcmFtZSBwcm9jZXNzR3JvdXA6KFdLUHJvY2Vzc0dyb3VwICopcHJvY2Vz
c0dyb3VwIGJyb3dzaW5nQ29udGV4dEdyb3VwOihXS0Jyb3dzaW5nQ29udGV4dEdyb3VwICopYnJv
d3NpbmdDb250ZXh0R3JvdXAgcmVsYXRlZFRvVmlldzooV0tWaWV3ICopcmVsYXRlZFZpZXc7CiAK
IEBwcm9wZXJ0eShyZWFkb25seSkgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpicm93c2lu
Z0NvbnRleHRDb250cm9sbGVyOwogCkluZGV4OiBVSVByb2Nlc3MvQXV0b0NvcnJlY3Rpb25DYWxs
YmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFVJUHJvY2Vzcy9BdXRvQ29ycmVjdGlvbkNhbGxiYWNrLmgJ
KHJldmlzaW9uIDApCisrKyBVSVByb2Nlc3MvQXV0b0NvcnJlY3Rpb25DYWxsYmFjay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEF1dG9Db3Jy
ZWN0aW9uQ2FsbGJhY2tfaAorI2RlZmluZSBBdXRvQ29ycmVjdGlvbkNhbGxiYWNrX2gKKworI2lu
Y2x1ZGUgIkdlbmVyaWNDYWxsYmFjay5oIgorI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1
ZGUgIldlYkVycm9yLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBBdXRvY29ycmVjdGlvbkRhdGFDYWxsYmFjayA6IHB1YmxpYyBDYWxs
YmFja0Jhc2UgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoKkNhbGxiYWNrRnVuY3Rpb24p
KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgY29uc3QgU3RyaW5nJiwgZG91Ymxl
LCB1aW50NjRfdCwgV0tFcnJvclJlZiwgdm9pZCopOworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
QXV0b2NvcnJlY3Rpb25EYXRhQ2FsbGJhY2s+IGNyZWF0ZSh2b2lkKiBjb250ZXh0LCBDYWxsYmFj
a0Z1bmN0aW9uIGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBB
dXRvY29ycmVjdGlvbkRhdGFDYWxsYmFjayhjb250ZXh0LCBjYWxsYmFjaykpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgfkF1dG9jb3JyZWN0aW9uRGF0YUNhbGxiYWNrKCkKKyAgICB7CisgICAgICAg
IEFTU0VSVCghbV9jYWxsYmFjayk7CisgICAgfQorCisgICAgdm9pZCBwZXJmb3JtQ2FsbGJhY2tX
aXRoUmV0dXJuVmFsdWUoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mIHJldHVyblZh
bHVlMSwgY29uc3QgU3RyaW5nJiByZXR1cm5WYWx1ZTIsIGRvdWJsZSByZXR1cm5WYWx1ZTMsIHVp
bnQ2NF90IHJldHVyblZhbHVlNCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2NhbGxiYWNrKTsK
KworICAgICAgICBtX2NhbGxiYWNrKHJldHVyblZhbHVlMSwgcmV0dXJuVmFsdWUyLCByZXR1cm5W
YWx1ZTMsIHJldHVyblZhbHVlNCwgMCwgY29udGV4dCgpKTsKKworICAgICAgICBtX2NhbGxiYWNr
ID0gMDsKKyAgICB9CisKKyAgICB2b2lkIGludmFsaWRhdGUoKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fY2FsbGJhY2spOworCisgICAgICAgIFJlZlB0cjxXZWJFcnJvcj4gZXJyb3IgPSBXZWJF
cnJvcjo6Y3JlYXRlKCk7CisgICAgICAgIG1fY2FsbGJhY2soVmVjdG9yPFdlYkNvcmU6OkZsb2F0
UmVjdD4oKSwgU3RyaW5nKCksIDAsIDAsIHRvQVBJKGVycm9yLmdldCgpKSwgY29udGV4dCgpKTsK
KworICAgICAgICBtX2NhbGxiYWNrID0gMDsKKyAgICB9CisKK3ByaXZhdGU6CisKKyAgICBBdXRv
Y29ycmVjdGlvbkRhdGFDYWxsYmFjayh2b2lkKiBjb250ZXh0LCBDYWxsYmFja0Z1bmN0aW9uIGNh
bGxiYWNrKQorICAgICAgICA6IENhbGxiYWNrQmFzZShjb250ZXh0KQorICAgICAgICAsIG1fY2Fs
bGJhY2soY2FsbGJhY2spCisgICAgeworICAgICAgICBBU1NFUlQobV9jYWxsYmFjayk7CisgICAg
fQorICAgIAorICAgIENhbGxiYWNrRnVuY3Rpb24gbV9jYWxsYmFjazsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gQXV0b0NvcnJlY3Rpb25DYWxsYmFja19oCkluZGV4
OiBVSVByb2Nlc3MvRGF0YWJhc2VzL21hYy9EYXRhYmFzZVByb2Nlc3NQcm94eU1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBVSVByb2Nlc3MvRGF0YWJhc2VzL21hYy9EYXRhYmFzZVByb2Nlc3NQcm94eU1h
Yy5tbQkocmV2aXNpb24gMTU5NjUxKQorKysgVUlQcm9jZXNzL0RhdGFiYXNlcy9tYWMvRGF0YWJh
c2VQcm9jZXNzUHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICAg
ICBpZiAoaWQgdmFsdWUgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBv
YmplY3RGb3JLZXk6QCJXZWJLaXQyVXNlWFBDU2VydmljZUZvcldlYlByb2Nlc3MiXSkKICAgICAg
ICAgcmV0dXJuIFt2YWx1ZSBib29sVmFsdWVdOwogCi0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01J
Tl9SRVFVSVJFRCA+PSAxMDkwCisjaWYgUExBVEZPUk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEID49IDEwOTAKICAgICByZXR1cm4gdHJ1ZTsKICNlbHNlCiAgICAgcmV0
dXJuIGZhbHNlOwpJbmRleDogVUlQcm9jZXNzL0xhdW5jaGVyL21hYy9Qcm9jZXNzTGF1bmNoZXJN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVUlQcm9jZXNzL0xhdW5jaGVyL21hYy9Qcm9jZXNzTGF1bmNo
ZXJNYWMubW0JKHJldmlzaW9uIDE1OTY1MSkKKysrIFVJUHJvY2Vzcy9MYXVuY2hlci9tYWMvUHJv
Y2Vzc0xhdW5jaGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsMTIgKzEwNywxNSBAQAog
ICAgICAgICBwcm9jZXNzU2hpbVBhdGhOU1N0cmluZyA9IFtbcHJvY2Vzc0FwcEV4ZWN1dGFibGVQ
YXRoIHN0cmluZ0J5RGVsZXRpbmdMYXN0UGF0aENvbXBvbmVudF0gc3RyaW5nQnlBcHBlbmRpbmdQ
YXRoQ29tcG9uZW50OkAiUGx1Z2luUHJvY2Vzc1NoaW0uZHlsaWIiXTsKICAgICB9IGVsc2UKICNl
bmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyNpZiBFTkFCTEUoTkVUV09SS19Q
Uk9DRVNTKQogICAgIGlmIChsYXVuY2hPcHRpb25zLnByb2Nlc3NUeXBlID09IFByb2Nlc3NMYXVu
Y2hlcjo6V2ViUHJvY2VzcykgewogICAgICAgICBOU1N0cmluZyAqcHJvY2Vzc1BhdGggPSBbd2Vi
S2l0MkJ1bmRsZSBwYXRoRm9yQXV4aWxpYXJ5RXhlY3V0YWJsZTpAIldlYlByb2Nlc3MuYXBwIl07
CiAgICAgICAgIE5TU3RyaW5nICpwcm9jZXNzQXBwRXhlY3V0YWJsZVBhdGggPSBbW05TQnVuZGxl
IGJ1bmRsZVdpdGhQYXRoOnByb2Nlc3NQYXRoXSBleGVjdXRhYmxlUGF0aF07CiAKICAgICAgICAg
cHJvY2Vzc1NoaW1QYXRoTlNTdHJpbmcgPSBbW3Byb2Nlc3NBcHBFeGVjdXRhYmxlUGF0aCBzdHJp
bmdCeURlbGV0aW5nTGFzdFBhdGhDb21wb25lbnRdIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBv
bmVudDpAIldlYlByb2Nlc3NTaGltLmR5bGliIl07Ci0gICAgfSBlbHNlIGlmIChsYXVuY2hPcHRp
b25zLnByb2Nlc3NUeXBlID09IFByb2Nlc3NMYXVuY2hlcjo6TmV0d29ya1Byb2Nlc3MpIHsKKyAg
ICB9IGVsc2UKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQorICAgIGlmIChsYXVu
Y2hPcHRpb25zLnByb2Nlc3NUeXBlID09IFByb2Nlc3NMYXVuY2hlcjo6TmV0d29ya1Byb2Nlc3Mp
IHsKICAgICAgICAgTlNTdHJpbmcgKnByb2Nlc3NQYXRoID0gW3dlYktpdDJCdW5kbGUgcGF0aEZv
ckF1eGlsaWFyeUV4ZWN1dGFibGU6QCJOZXR3b3JrUHJvY2Vzcy5hcHAiXTsKICAgICAgICAgTlNT
dHJpbmcgKnByb2Nlc3NBcHBFeGVjdXRhYmxlUGF0aCA9IFtbTlNCdW5kbGUgYnVuZGxlV2l0aFBh
dGg6cHJvY2Vzc1BhdGhdIGV4ZWN1dGFibGVQYXRoXTsKIApAQCAtMTQ0LDcgKzE0Nyw3IEBACiAg
ICAgICAgICAgICByZXR1cm4gImNvbS5hcHBsZS5XZWJLaXQuTmV0d29ya2luZy5EZXZlbG9wbWVu
dCI7CiAgICAgICAgIHJldHVybiAiY29tLmFwcGxlLldlYktpdC5OZXR3b3JraW5nIjsKICNlbmRp
ZgotI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisjaWYgRU5BQkxFKERBVEFCQVNFX1BST0NF
U1MpCiAgICAgY2FzZSBQcm9jZXNzTGF1bmNoZXI6OkRhdGFiYXNlUHJvY2VzczoKICAgICAgICAg
aWYgKGZvckRldmVsb3BtZW50KQogICAgICAgICAgICAgcmV0dXJuICJjb20uYXBwbGUuV2ViS2l0
LkRhdGFiYXNlcy5EZXZlbG9wbWVudCI7CkluZGV4OiBVSVByb2Nlc3MvTmV0d29yay9tYWMvTmV0
d29ya1Byb2Nlc3NQcm94eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBVSVByb2Nlc3MvTmV0d29yay9t
YWMvTmV0d29ya1Byb2Nlc3NQcm94eU1hYy5tbQkocmV2aXNpb24gMTU5NjUxKQorKysgVUlQcm9j
ZXNzL05ldHdvcmsvbWFjL05ldHdvcmtQcm9jZXNzUHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDcgKzQ3LDcgQEAKICAgICBpZiAoaWQgdmFsdWUgPSBbW05TVXNlckRlZmF1bHRzIHN0
YW5kYXJkVXNlckRlZmF1bHRzXSBvYmplY3RGb3JLZXk6QCJXZWJLaXQyVXNlWFBDU2VydmljZUZv
cldlYlByb2Nlc3MiXSkKICAgICAgICAgcmV0dXJuIFt2YWx1ZSBib29sVmFsdWVdOwogCi0jaWYg
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCisjaWYgUExBVEZPUk0oSU9T
KSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKICAgICByZXR1cm4g
dHJ1ZTsKICNlbHNlCiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogVUlQcm9jZXNzL1BhZ2VDbGll
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBVSVByb2Nlc3MvUGFnZUNsaWVudC5oCShyZXZpc2lvbiAxNTk2
NTEpCisrKyBVSVByb2Nlc3MvUGFnZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0
MywxMSBAQAogT0JKQ19DTEFTUyBXS1ZpZXc7CiBPQkpDX0NMQVNTIE5TVGV4dEFsdGVybmF0aXZl
czsKICNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQorT0JKQ19DTEFTUyBVSVdLVmlldzsKICNl
bmRpZgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBDdXJzb3I7CkBA
IC0xMzMsOCArMTM3LDggQEAKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0
KERvd25sb2FkUHJveHkqKSA9IDA7CiAjZW5kaWYgLy8gUExBVEZPUk0oRUZMKSB8fCBQTEFURk9S
TShHVEspCiAKLSNpZiBQTEFURk9STShFRkwpCi0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUNv
bnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgPSAwOworI2lmIFBMQVRGT1JNKEVG
TCkgfHwgUExBVEZPUk0oSU9TKQorICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VDb250ZW50U2l6
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgPSAwOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShH
VEspCkBAIC0xNTgsOSArMTYyLDEzIEBACiAgICAgdmlydHVhbCB2b2lkIHJlc2V0U2VjdXJlSW5w
dXRTdGF0ZSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5SW5wdXRDb250ZXh0QWJvdXRE
aXNjYXJkZWRDb21wb3NpdGlvbigpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgbWFrZUZpcnN0UmVz
cG9uZGVyKCkgPSAwOworI2VuZGlmCisKKyNpZiBVU0UoQVBQS0lUKQogICAgIHZpcnR1YWwgdm9p
ZCBzZXRQcm9taXNlZERhdGEoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgUGFzc1JlZlB0
cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGltYWdlQnVmZmVyLCBjb25zdCBTdHJpbmcmIGZpbGVu
YW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJp
bmcmIHZpc2libGVVcmwsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBhcmNoaXZl
QnVmZmVyKSA9IDA7CiAjZW5kaWYKKwogI2lmIFBMQVRGT1JNKEdUSykKICAgICB2aXJ0dWFsIHZv
aWQgZ2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2
ZW50JiwgY29uc3QgQXRvbWljU3RyaW5nJiwgVmVjdG9yPFdURjo6U3RyaW5nPiYpID0gMDsKICNl
bmRpZgpAQCAtMTg5LDcgKzE5Nyw3IEBACiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSA9IDA7CiAjZW5kaWYK
IAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiAhUExBVEZPUk0oSU9TKSAmJiBQTEFURk9STShNQUMp
CiAgICAgdmlydHVhbCB2b2lkIHBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQodWludDY0
X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIsIGJvb2wgcGx1Z2luSGFzRm9jdXNB
bmRXaW5kb3dIYXNGb2N1cykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRQbHVnaW5Db21wbGV4
VGV4dElucHV0U3RhdGUodWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIs
IFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRQ
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cChjb25zdCBBdHRyaWJ1dGVkU3RyaW5nJiwgY29uc3QgRGlj
dGlvbmFyeVBvcHVwSW5mbyYpID0gMDsKSW5kZXg6IFVJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBVSVByb2Nlc3MvV2ViQ29udGV4dC5jcHAJKHJldmlzaW9uIDE1OTY1MSkK
KysrIFVJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzEx
OCwxNCBAQAogICAgIHJldHVybiBjb250ZXh0cygpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQor
V2ViQ29udGV4dCogV2ViQ29udGV4dDo6c2hhcmVkUHJvY2Vzc0NvbnRleHQoKQoreworICAgIHN0
YXRpYyBXS0NvbnRleHRSZWYgc2hhcmVkQ29udGV4dFJlZiA9IFdLQ29udGV4dENyZWF0ZSgpOwor
ICAgIHJldHVybiB0b0ltcGwoc2hhcmVkQ29udGV4dFJlZik7Cit9CisjZW5kaWYKKwogV2ViQ29u
dGV4dDo6V2ViQ29udGV4dChQcm9jZXNzTW9kZWwgcHJvY2Vzc01vZGVsLCBjb25zdCBTdHJpbmcm
IGluamVjdGVkQnVuZGxlUGF0aCkKICAgICA6IG1fcHJvY2Vzc01vZGVsKHByb2Nlc3NNb2RlbCkK
ICAgICAsIG1fd2ViUHJvY2Vzc0NvdW50TGltaXQoVUlOVF9NQVgpCkBAIC0xMTA3LDcgKzExMTUs
OSBAQAogI2VuZGlmCiAjZW5kaWYKIAorI2lmICFQTEFURk9STShJT1MpCiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisjZW5kaWYKIH0KIAogdm9pZCBXZWJDb250ZXh0OjpzZXRIVFRQUGlwZWxp
bmluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQpJbmRleDogVUlQcm9jZXNzL1dlYkNvbnRleHQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBVSVByb2Nlc3MvV2ViQ29udGV4dC5oCShyZXZpc2lvbiAxNTk2NTEpCisr
KyBVSVByb2Nlc3MvV2ViQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCw2ICs5OCw5IEBA
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViQ29udGV4dD4gY3JlYXRlKGNvbnN0
IFN0cmluZyYgaW5qZWN0ZWRCdW5kbGVQYXRoKTsKICAgICB2aXJ0dWFsIH5XZWJDb250ZXh0KCk7
CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHN0YXRpYyBXZWJDb250ZXh0ICpzaGFyZWRQcm9jZXNz
Q29udGV4dCgpOworI2VuZGlmCiAKICAgICBzdGF0aWMgY29uc3QgVmVjdG9yPFdlYkNvbnRleHQq
PiYgYWxsQ29udGV4dHMoKTsKIApAQCAtNDcyLDcgKzQ3NSw3IEBACiAKICAgICBSZXRhaW5QdHI8
TlNPYmplY3Q+IG1fYXV0b21hdGljVGV4dFJlcGxhY2VtZW50Tm90aWZpY2F0aW9uT2JzZXJ2ZXI7
CiAgICAgUmV0YWluUHRyPE5TT2JqZWN0PiBtX2F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbk5v
dGlmaWNhdGlvbk9ic2VydmVyOwotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQg
Pj0gMTA5MAorI2lmICFQTEFURk9STShJT1MpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVR
VUlSRUQgPj0gMTA5MAogICAgIFJldGFpblB0cjxOU09iamVjdD4gbV9hdXRvbWF0aWNRdW90ZVN1
YnN0aXR1dGlvbk5vdGlmaWNhdGlvbk9ic2VydmVyOwogICAgIFJldGFpblB0cjxOU09iamVjdD4g
bV9hdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uTm90aWZpY2F0aW9uT2JzZXJ2ZXI7CiAjZW5kaWYK
SW5kZXg6IFVJUHJvY2Vzcy9XZWJFZGl0Q29tbWFuZFByb3h5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBV
SVByb2Nlc3MvV2ViRWRpdENvbW1hbmRQcm94eS5jcHAJKHJldmlzaW9uIDE1OTY1MSkKKysrIFVJ
UHJvY2Vzcy9XZWJFZGl0Q29tbWFuZFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDYg
KzEyOSwxMiBAQAogICAgICAgICByZXR1cm4gV0VCX1VJX1NUUklOR19LRVkoIkJvbGQiLCAiQm9s
ZCAoVW5kbyBhY3Rpb24gbmFtZSkiLCAiVW5kbyBhY3Rpb24gbmFtZSIpOwogICAgIGNhc2UgRWRp
dEFjdGlvbkl0YWxpY3M6CiAgICAgICAgIHJldHVybiBXRUJfVUlfU1RSSU5HX0tFWSgiSXRhbGlj
cyIsICJJdGFsaWNzIChVbmRvIGFjdGlvbiBuYW1lKSIsICJVbmRvIGFjdGlvbiBuYW1lIik7Cisj
aWYgUExBVEZPUk0oSU9TKQorICAgIGNhc2UgRWRpdEFjdGlvbkRlbGV0ZToKKyAgICAgICAgcmV0
dXJuIFdFQl9VSV9TVFJJTkdfS0VZKCJEZWxldGUiLCAiRGVsZXRlIChVbmRvIGFjdGlvbiBuYW1l
KSIsICJVbmRvIGFjdGlvbiBuYW1lIik7CisgICAgY2FzZSBFZGl0QWN0aW9uRGljdGF0aW9uOgor
ICAgICAgICByZXR1cm4gV0VCX1VJX1NUUklOR19LRVkoIkRpY3RhdGlvbiIsICJEaWN0YXRpb24g
KFVuZG8gYWN0aW9uIG5hbWUpIiwgIlVuZG8gYWN0aW9uIG5hbWUiKTsKKyNlbmRpZgogICAgIGNh
c2UgRWRpdEFjdGlvblBhc3RlOgogICAgICAgICByZXR1cm4gV0VCX1VJX1NUUklOR19LRVkoIlBh
c3RlIiwgIlBhc3RlIChVbmRvIGFjdGlvbiBuYW1lKSIsICJVbmRvIGFjdGlvbiBuYW1lIik7CiAg
ICAgY2FzZSBFZGl0QWN0aW9uUGFzdGVGb250OgpJbmRleDogVUlQcm9jZXNzL1dlYkdlb2xvY2F0
aW9uTWFuYWdlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBVSVByb2Nlc3MvV2ViR2VvbG9jYXRp
b25NYW5hZ2VyUHJveHkuY3BwCShyZXZpc2lvbiAxNTk2NTEpCisrKyBVSVByb2Nlc3MvV2ViR2Vv
bG9jYXRpb25NYW5hZ2VyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5MiwxMyBA
QAogICAgIGNvbnRleHQoKS0+c2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJHZW9sb2Nh
dGlvbk1hbmFnZXI6OkRpZEZhaWxUb0RldGVybWluZVBvc2l0aW9uKGVycm9yTWVzc2FnZSkpOwog
fQogCisjaWYgUExBVEZPUk0oSU9TKQordm9pZCBXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eTo6
cmVzZXRQZXJtaXNzaW9ucygpCit7CisgICAgY29udGV4dCgpLT5zZW5kVG9BbGxQcm9jZXNzZXMo
TWVzc2FnZXM6OldlYkdlb2xvY2F0aW9uTWFuYWdlcjo6UmVzZXRQZXJtaXNzaW9ucygpKTsKK30K
KyNlbmRpZgorCiB2b2lkIFdlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5OjpzdGFydFVwZGF0aW5n
KENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCiB7CiAgICAgYm9vbCB3YXNVcGRhdGlu
ZyA9IGlzVXBkYXRpbmcoKTsKSW5kZXg6IFVJUHJvY2Vzcy9XZWJHZW9sb2NhdGlvbk1hbmFnZXJQ
cm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFVJUHJvY2Vzcy9XZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94
eS5oCShyZXZpc2lvbiAxNTk2NTEpCisrKyBVSVByb2Nlc3MvV2ViR2VvbG9jYXRpb25NYW5hZ2Vy
UHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksOSBAQAogCiAgICAgdm9pZCBwcm92
aWRlckRpZENoYW5nZVBvc2l0aW9uKFdlYkdlb2xvY2F0aW9uUG9zaXRpb24qKTsKICAgICB2b2lk
IHByb3ZpZGVyRGlkRmFpbFRvRGV0ZXJtaW5lUG9zaXRpb24oY29uc3QgU3RyaW5nJiBlcnJvck1l
c3NhZ2UgPSBTdHJpbmcoKSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZvaWQgcmVzZXRQZXJt
aXNzaW9ucygpOworI2VuZGlmCiAKICAgICB1c2luZyBBUEk6Ok9iamVjdDo6cmVmOwogICAgIHVz
aW5nIEFQSTo6T2JqZWN0OjpkZXJlZjsKSW5kZXg6IFVJUHJvY2Vzcy9XZWJMb2FkZXJDbGllbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFVJUHJvY2Vzcy9XZWJMb2FkZXJDbGllbnQuY3BwCShyZXZpc2lv
biAxNTk2NTEpCisrKyBVSVByb2Nlc3MvV2ViTG9hZGVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjY3LDYgKzI2Nyw4IEBACiAgICAgICAgIG1fY2xpZW50LndpbGxHb1RvQmFja0Zvcndh
cmRMaXN0SXRlbSh0b0FQSShwYWdlKSwgdG9BUEkoaXRlbSksIHRvQVBJKHVzZXJEYXRhKSwgbV9j
bGllbnQuY2xpZW50SW5mbyk7CiB9CiAKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
Kwogdm9pZCBXZWJMb2FkZXJDbGllbnQ6OmRpZEZhaWxUb0luaXRpYWxpemVQbHVnaW4oV2ViUGFn
ZVByb3h5KiBwYWdlLCBJbW11dGFibGVEaWN0aW9uYXJ5KiBwbHVnaW5JbmZvcm1hdGlvbikKIHsK
ICAgICBpZiAobV9jbGllbnQuZGlkRmFpbFRvSW5pdGlhbGl6ZVBsdWdpbl9kZXByZWNhdGVkRm9y
VXNlV2l0aFYwKQpAQCAtMzI5LDQgKzMzMSw2IEBACiAgICAgcmV0dXJuIGxvYWRQb2xpY3k7CiB9
CiAKKyNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CkluZGV4OiBVSVByb2Nlc3MvV2ViTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVUlQcm9jZXNzL1dlYkxvYWRlckNsaWVudC5oCShyZXZpc2lvbiAxNTk2NTEpCisrKyBVSVBy
b2Nlc3MvV2ViTG9hZGVyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTkzLDkgKzkzLDExIEBA
CiAgICAgYm9vbCBzaG91bGRHb1RvQmFja0ZvcndhcmRMaXN0SXRlbShXZWJQYWdlUHJveHkqLCBX
ZWJCYWNrRm9yd2FyZExpc3RJdGVtKik7CiAgICAgdm9pZCB3aWxsR29Ub0JhY2tGb3J3YXJkTGlz
dEl0ZW0oV2ViUGFnZVByb3h5KiwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSosIEFQSTo6T2JqZWN0
Kik7CiAKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBQbHVnaW5Nb2R1bGVM
b2FkUG9saWN5IHBsdWdpbkxvYWRQb2xpY3koV2ViUGFnZVByb3h5KiwgUGx1Z2luTW9kdWxlTG9h
ZFBvbGljeSBjdXJyZW50UGx1Z2luTG9hZFBvbGljeSwgSW1tdXRhYmxlRGljdGlvbmFyeSosIFN0
cmluZyYgdW5hdmFpbGFiaWxpdHlEZXNjcmlwdGlvbk91dFBhcmFtZXRlcik7CiAgICAgdm9pZCBk
aWRGYWlsVG9Jbml0aWFsaXplUGx1Z2luKFdlYlBhZ2VQcm94eSosIEltbXV0YWJsZURpY3Rpb25h
cnkqKTsKICAgICB2b2lkIGRpZEJsb2NrSW5zZWN1cmVQbHVnaW5WZXJzaW9uKFdlYlBhZ2VQcm94
eSosIEltbXV0YWJsZURpY3Rpb25hcnkqKTsKKyNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJ
KHJldmlzaW9uIDE1OTY1MSkKKysrIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMDYsNyArMzA2LDcgQEAKICAgICAsIG1fbWVkaWFWb2x1bWUoMSkKICAgICAs
IG1fbWF5U3RhcnRNZWRpYVdoZW5JbldpbmRvdyh0cnVlKQogICAgICwgbV93YWl0aW5nRm9yRGlk
VXBkYXRlVmlld1N0YXRlKGZhbHNlKQotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShN
QUMpICYmICFQTEFURk9STShJT1MpCiAgICAgLCBtX2V4cG9zZWRSZWN0Q2hhbmdlZFRpbWVyKHRo
aXMsICZXZWJQYWdlUHJveHk6OmV4cG9zZWRSZWN0Q2hhbmdlZFRpbWVyRmlyZWQpCiAgICAgLCBt
X2NsaXBzVG9FeHBvc2VkUmVjdChmYWxzZSkKICAgICAsIG1fbGFzdFNlbnRDbGlwc1RvRXhwb3Nl
ZFJlY3QoZmFsc2UpCkBAIC01NjUsNyArNTY1LDcgQEAKICAgICBtX2NvbnRleHRNZW51Q2xpZW50
LmluaXRpYWxpemUoMCk7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9S
TShNQUMpICYmICFQTEFURk9STShJT1MpCiAgICAgbV9leHBvc2VkUmVjdENoYW5nZWRUaW1lci5z
dG9wKCk7CiAjZW5kaWYKIApAQCAtMjE3MSw3ICsyMTcxLDcgQEAKICAgICBpZiAoZnJhbWUtPmlz
TWFpbkZyYW1lKCkpCiAgICAgICAgIG1fcGFnZUxvYWRTdGF0ZS5kaWRDb21taXRMb2FkKCk7CiAK
LSNpZiBQTEFURk9STShNQUMpCisjaWYgVVNFKEFQUEtJVCkKICAgICAvLyBGSVhNRSAoYnVnIDU5
MTExKTogZGlkQ29tbWl0TG9hZEZvckZyYW1lIGNvbWVzIHRvbyBsYXRlIHdoZW4gcmVzdG9yaW5n
IGEgcGFnZSBmcm9tIGIvZiBjYWNoZSwgbWFraW5nIHVzIGRpc2FibGUgc2VjdXJlIGV2ZW50IG1v
ZGUgaW4gcGFzc3dvcmQgZmllbGRzLgogICAgIC8vIEZJWE1FOiBBIGxvYWQgZ29pbmcgb24gaW4g
b25lIGZyYW1lIHNob3VsZG4ndCBhZmZlY3QgdGV4dCBlZGl0aW5nIGluIG90aGVyIGZyYW1lcyBv
biB0aGUgcGFnZS4KICAgICBtX3BhZ2VDbGllbnQtPnJlc2V0U2VjdXJlSW5wdXRTdGF0ZSgpOwpA
QCAtMjYxMCw2ICsyNjEwLDcgQEAKICAgICBtX3Byb2Nlc3MtPmNvbnRleHQoKS0+c3RvcmFnZU1h
bmFnZXIoKS5zZXRBbGxvd2VkU2Vzc2lvblN0b3JhZ2VOYW1lc3BhY2VDb25uZWN0aW9uKG1fcGFn
ZUlELCAwKTsKIH0KIAorI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogdm9pZCBXZWJQ
YWdlUHJveHk6OnVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZCh1aW50MzJfdCBvcGFxdWVQ
bHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3Qg
U3RyaW5nJiBwbHVnaW5VUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYgcGx1Z2luc3BhZ2VBdHRyaWJ1
dGVVUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVVUkxTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cGFnZVVSTFN0cmluZykKIHsKICAgICBNRVNTQUdFX0NIRUNLX1VSTChwbHVnaW5VUkxTdHJpbmcp
OwpAQCAtMjYxOCwxMyArMjYxOSw5IEBACiAgICAgTUVTU0FHRV9DSEVDS19VUkwocGFnZVVSTFN0
cmluZyk7CiAKICAgICBSZWZQdHI8SW1tdXRhYmxlRGljdGlvbmFyeT4gcGx1Z2luSW5mb3JtYXRp
b247Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgU3RyaW5nIG5ld01pbWVU
eXBlID0gbWltZVR5cGU7CiAgICAgUGx1Z2luTW9kdWxlSW5mbyBwbHVnaW4gPSBtX3Byb2Nlc3Mt
PmNvbnRleHQoKS0+cGx1Z2luSW5mb1N0b3JlKCkuZmluZFBsdWdpbihuZXdNaW1lVHlwZSwgVVJM
KFVSTCgpLCBwbHVnaW5VUkxTdHJpbmcpKTsKICAgICBwbHVnaW5JbmZvcm1hdGlvbiA9IGNyZWF0
ZVBsdWdpbkluZm9ybWF0aW9uRGljdGlvbmFyeShwbHVnaW4sIGZyYW1lVVJMU3RyaW5nLCBtaW1l
VHlwZSwgcGFnZVVSTFN0cmluZywgcGx1Z2luc3BhZ2VBdHRyaWJ1dGVVUkxTdHJpbmcsIHBsdWdp
blVSTFN0cmluZyk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShtaW1lVHlwZSk7Ci0jZW5kaWYK
IAogICAgIFdLUGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24gcGx1Z2luVW5hdmFpbGFiaWxpdHlS
ZWFzb24gPSBrV0tQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvblBsdWdpbk1pc3Npbmc7CiAgICAg
c3dpdGNoIChzdGF0aWNfY2FzdDxSZW5kZXJFbWJlZGRlZE9iamVjdDo6UGx1Z2luVW5hdmFpbGFi
aWxpdHlSZWFzb24+KG9wYXF1ZVBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKSkgewpAQCAtMjY0
Myw2ICsyNjQwLDcgQEAKIAogICAgIG1fdWlDbGllbnQudW5hdmFpbGFibGVQbHVnaW5CdXR0b25D
bGlja2VkKHRoaXMsIHBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uLCBwbHVnaW5JbmZvcm1hdGlv
bi5nZXQoKSk7CiB9CisjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAKIHZv
aWQgV2ViUGFnZVByb3h5OjpzZXRUb29sYmFyc0FyZVZpc2libGUoYm9vbCB0b29sYmFyc0FyZVZp
c2libGUpCiB7CkBAIC0yNzQxLDcgKzI3MzksNyBAQAogdm9pZCBXZWJQYWdlUHJveHk6OnBhZ2VE
aWRTY3JvbGwoKQogewogICAgIG1fdWlDbGllbnQucGFnZURpZFNjcm9sbCh0aGlzKTsKLSNpZiBQ
TEFURk9STShNQUMpCisjaWYgIVBMQVRGT1JNKElPUykgJiYgUExBVEZPUk0oTUFDKQogICAgIGRp
c21pc3NDb3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dEln
bm9yZWQpOwogI2VuZGlmCiB9CkBAIC0yODE4LDEwICsyODE2LDEwIEBACiB9CiAjZW5kaWYgLy8g
UExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShHVEspCiAKLSNpZiBQTEFURk9STShFRkwpCi12b2lk
IFdlYlBhZ2VQcm94eTo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKGNvbnN0IEludFNpemUmIHNpemUp
CisjaWYgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShJT1MpCit2b2lkIFdlYlBhZ2VQcm94eTo6
ZGlkQ2hhbmdlQ29udGVudFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBtX3BhZ2VD
bGllbnQtPmRpZENoYW5nZUNvbnRlbnRzU2l6ZShzaXplKTsKKyAgICBtX3BhZ2VDbGllbnQtPmRp
ZENoYW5nZUNvbnRlbnRTaXplKHNpemUpOwogfQogI2VuZGlmCiAKQEAgLTI5NjcsNiArMjk2NSwx
MiBAQAogICAgICAgICBjYW5jZWxDb21wb3NpdGlvbigpOwogICAgICAgICBtX3BhZ2VDbGllbnQt
Pm5vdGlmeUlucHV0Q29udGV4dEFib3V0RGlzY2FyZGVkQ29tcG9zaXRpb24oKTsKICAgICB9Cisj
aWYgUExBVEZPUk0oSU9TKQorICAgIGVsc2UgeworICAgICAgICAvLyBXZSBuZWVkIHRvIG5vdGlm
eSB0aGUgY2xpZW50IG9uIGlPUyB0byBtYWtlIHN1cmUgdGhlIHNlbGVjdGlvbiBpcyByZWRyYXdu
LgorICAgICAgICBtX3BhZ2VDbGllbnQtPnNlbGVjdGlvbkRpZENoYW5nZSgpOworICAgIH0KKyNl
bmRpZgogI2VsaWYgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShHVEspCiAgICAgbV9wYWdlQ2xp
ZW50LT51cGRhdGVUZXh0SW5wdXRTdGF0ZSgpOwogI2VuZGlmCkBAIC0zNzQ1LDYgKzM3NDksMTEg
QEAKICAgICBpbnZhbGlkYXRlQ2FsbGJhY2tNYXAobV9zY3JpcHRWYWx1ZUNhbGxiYWNrcyk7CiAg
ICAgaW52YWxpZGF0ZUNhbGxiYWNrTWFwKG1fY29tcHV0ZWRQYWdlc0NhbGxiYWNrcyk7CiAgICAg
aW52YWxpZGF0ZUNhbGxiYWNrTWFwKG1fdmFsaWRhdGVDb21tYW5kQ2FsbGJhY2tzKTsKKyNpZiBQ
TEFURk9STShJT1MpCisgICAgaW52YWxpZGF0ZUNhbGxiYWNrTWFwKG1fZ2VzdHVyZUNhbGxiYWNr
cyk7CisgICAgaW52YWxpZGF0ZUNhbGxiYWNrTWFwKG1fdG91Y2hlc0NhbGxiYWNrcyk7CisgICAg
aW52YWxpZGF0ZUNhbGxiYWNrTWFwKG1fYXV0b2NvcnJlY3Rpb25DYWxsYmFja3MpOworI2VuZGlm
CiAjaWYgUExBVEZPUk0oR1RLKQogICAgIGludmFsaWRhdGVDYWxsYmFja01hcChtX3ByaW50Rmlu
aXNoZWRDYWxsYmFja3MpOwogI2VuZGlmCkBAIC0zODAxLDcgKzM4MTAsNyBAQAogICAgIC8vIEZJ
WE1FOiBOb3RpZnkgaW5wdXQgbWV0aG9kcyBhYm91dCBhYmFuZG9uZWQgY29tcG9zaXRpb24uCiAg
ICAgbV90ZW1wb3JhcmlseUNsb3NlZENvbXBvc2l0aW9uID0gZmFsc2U7CiAKLSNpZiBQTEFURk9S
TShNQUMpCisjaWYgIVBMQVRGT1JNKElPUykgJiYgUExBVEZPUk0oTUFDKQogICAgIGRpc21pc3ND
b3JyZWN0aW9uUGFuZWwoUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dElnbm9yZWQp
OwogICAgIG1fcGFnZUNsaWVudC0+ZGlzbWlzc0RpY3Rpb25hcnlMb29rdXBQYW5lbCgpOwogI2Vu
ZGlmCkBAIC0zODM5LDcgKzM4NDgsOSBAQAogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIG1fY3Jl
YXRpb25QYXJhbWV0ZXJzLmxheWVySG9zdGluZ01vZGUgPSBtX2xheWVySG9zdGluZ01vZGU7Cisj
aWYgIVBMQVRGT1JNKElPUykKICAgICBtX2NyZWF0aW9uUGFyYW1ldGVycy5jb2xvclNwYWNlID0g
bV9wYWdlQ2xpZW50LT5jb2xvclNwYWNlKCk7CisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKICNl
bmRpZgogfQogCkBAIC00MDEyLDcgKzQwMjMsNyBAQAogCiB2b2lkIFdlYlBhZ2VQcm94eTo6cmVj
b21tZW5kZWRTY3JvbGxiYXJTdHlsZURpZENoYW5nZShpbnQzMl90IG5ld1N0eWxlKQogewotI2lm
IFBMQVRGT1JNKE1BQykKKyNpZiBVU0UoQVBQS0lUKQogICAgIG1fcGFnZUNsaWVudC0+cmVjb21t
ZW5kZWRTY3JvbGxiYXJTdHlsZURpZENoYW5nZShuZXdTdHlsZSk7CiAjZWxzZQogICAgIFVOVVNF
RF9QQVJBTShuZXdTdHlsZSk7CkBAIC00MDM4LDYgKzQwNDksNyBAQAogICAgIG1fcGFnZUNvdW50
ID0gcGFnZUNvdW50OwogfQogCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiB2b2lk
IFdlYlBhZ2VQcm94eTo6ZGlkRmFpbFRvSW5pdGlhbGl6ZVBsdWdpbihjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBjb25zdCBTdHJpbmcmIGZyYW1lVVJMU3RyaW5nLCBjb25zdCBTdHJpbmcmIHBhZ2VV
UkxTdHJpbmcpCiB7CiAgICAgbV9sb2FkZXJDbGllbnQuZGlkRmFpbFRvSW5pdGlhbGl6ZVBsdWdp
bih0aGlzLCBjcmVhdGVQbHVnaW5JbmZvcm1hdGlvbkRpY3Rpb25hcnkobWltZVR5cGUsIGZyYW1l
VVJMU3RyaW5nLCBwYWdlVVJMU3RyaW5nKS5nZXQoKSk7CkBAIC00MDYxLDYgKzQwNzMsNyBAQAog
CiAgICAgbV9sb2FkZXJDbGllbnQuZGlkQmxvY2tJbnNlY3VyZVBsdWdpblZlcnNpb24odGhpcywg
cGx1Z2luSW5mb3JtYXRpb24uZ2V0KCkpOwogfQorI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQogCiBib29sIFdlYlBhZ2VQcm94eTo6d2lsbEhhbmRsZUhvcml6b250YWxTY3Jv
bGxFdmVudHMoKSBjb25zdAogewpAQCAtNDIxMCw3ICs0MjIzLDcgQEAKICAgICBtX3Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldE1pbmltdW1MYXlvdXRTaXplKG1pbmltdW1MYXlv
dXRTaXplKSwgbV9wYWdlSUQsIDApOwogICAgIG1fZHJhd2luZ0FyZWEtPm1pbmltdW1MYXlvdXRT
aXplRGlkQ2hhbmdlKCk7CiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgVVNFKEFQUEtJVCkKICAg
ICBpZiAobV9taW5pbXVtTGF5b3V0U2l6ZS53aWR0aCgpIDw9IDApCiAgICAgICAgIGludHJpbnNp
Y0NvbnRlbnRTaXplRGlkQ2hhbmdlKEludFNpemUoLTEsIC0xKSk7CiAjZW5kaWYKQEAgLTQyMjks
NyArNDI0Miw3IEBACiAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRB
dXRvU2l6aW5nU2hvdWxkRXhwYW5kVG9WaWV3SGVpZ2h0KHNob3VsZEV4cGFuZCksIG1fcGFnZUlE
LCAwKTsKIH0KIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiAhUExBVEZPUk0oSU9TKSAmJiBQTEFU
Rk9STShNQUMpCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzdWJzdGl0dXRpb25zUGFuZWxJc1Nob3dp
bmcoYm9vbCYgaXNTaG93aW5nKQogewpJbmRleDogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMTU5NjUxKQor
KysgVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3
IEBACiAjZGVmaW5lIFdlYlBhZ2VQcm94eV9oCiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNp
bmNsdWRlICJBdXRvQ29ycmVjdGlvbkNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5o
IgogI2luY2x1ZGUgIkRyYWdDb250cm9sbGVyQWN0aW9uLmgiCiAjaW5jbHVkZSAiRHJhd2luZ0Fy
ZWFQcm94eS5oIgpAQCAtNjUsNiArNjYsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1T
Y3JlZW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbFR5cGVzLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9UZXh0Q2hlY2tpbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHRHcmFudWxhcml0eS5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC0yMTksNiArMjIxLDk4IEBACiAgICAgQ2FsbGJhY2tG
dW5jdGlvbiBtX2NhbGxiYWNrOwogfTsKIAorI2lmIFBMQVRGT1JNKElPUykKK2NsYXNzIEdlc3R1
cmVDYWxsYmFjayA6IHB1YmxpYyBDYWxsYmFja0Jhc2UgeworcHVibGljOgorICAgIHR5cGVkZWYg
dm9pZCAoKkNhbGxiYWNrRnVuY3Rpb24pKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMy
X3QsIHVpbnQzMl90LCB1aW50MzJfdCwgV0tFcnJvclJlZiwgdm9pZCopOworCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8R2VzdHVyZUNhbGxiYWNrPiBjcmVhdGUodm9pZCogY29udGV4dCwgQ2FsbGJh
Y2tGdW5jdGlvbiBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
R2VzdHVyZUNhbGxiYWNrKGNvbnRleHQsIGNhbGxiYWNrKSk7CisgICAgfQorCisgICAgdmlydHVh
bCB+R2VzdHVyZUNhbGxiYWNrKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9jYWxsYmFjayk7
CisgICAgfQorCisgICAgdm9pZCBwZXJmb3JtQ2FsbGJhY2tXaXRoUmV0dXJuVmFsdWUoY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIHJldHVyblZhbHVlMSwgdWludDMyX3QgcmV0dXJuVmFsdWUyLCB1
aW50MzJfdCByZXR1cm5WYWx1ZTMsIHVpbnQzMl90IHJldHVyblZhbHVlNCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX2NhbGxiYWNrKTsKKworICAgICAgICBtX2NhbGxiYWNrKHJldHVyblZhbHVl
MSwgcmV0dXJuVmFsdWUyLCByZXR1cm5WYWx1ZTMsIHJldHVyblZhbHVlNCwgMCwgY29udGV4dCgp
KTsKKworICAgICAgICBtX2NhbGxiYWNrID0gMDsKKyAgICB9CisKKyAgICB2b2lkIGludmFsaWRh
dGUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fY2FsbGJhY2spOworCisgICAgICAgIFJlZlB0
cjxXZWJFcnJvcj4gZXJyb3IgPSBXZWJFcnJvcjo6Y3JlYXRlKCk7CisgICAgICAgIG1fY2FsbGJh
Y2soV2ViQ29yZTo6SW50UG9pbnQoKSwgMCwgMCwgMCwgdG9BUEkoZXJyb3IuZ2V0KCkpLCBjb250
ZXh0KCkpOworCisgICAgICAgIG1fY2FsbGJhY2sgPSAwOworICAgIH0KKworcHJpdmF0ZToKKwor
ICAgIEdlc3R1cmVDYWxsYmFjayh2b2lkKiBjb250ZXh0LCBDYWxsYmFja0Z1bmN0aW9uIGNhbGxi
YWNrKQorICAgICAgICA6IENhbGxiYWNrQmFzZShjb250ZXh0KQorICAgICAgICAsIG1fY2FsbGJh
Y2soY2FsbGJhY2spCisgICAgeworICAgICAgICBBU1NFUlQobV9jYWxsYmFjayk7CisgICAgfQor
CisgICAgQ2FsbGJhY2tGdW5jdGlvbiBtX2NhbGxiYWNrOworfTsKKworY2xhc3MgVG91Y2hlc0Nh
bGxiYWNrIDogcHVibGljIENhbGxiYWNrQmFzZSB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2b2lk
ICgqQ2FsbGJhY2tGdW5jdGlvbikoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCB1aW50MzJfdCwg
V0tFcnJvclJlZiwgdm9pZCopOworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VG91Y2hlc0NhbGxi
YWNrPiBjcmVhdGUodm9pZCogY29udGV4dCwgQ2FsbGJhY2tGdW5jdGlvbiBjYWxsYmFjaykKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVG91Y2hlc0NhbGxiYWNrKGNvbnRleHQs
IGNhbGxiYWNrKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+VG91Y2hlc0NhbGxiYWNrKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghbV9jYWxsYmFjayk7CisgICAgfQorCisgICAgdm9pZCBwZXJm
b3JtQ2FsbGJhY2tXaXRoUmV0dXJuVmFsdWUoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHJldHVy
blZhbHVlMSwgdWludDMyX3QgcmV0dXJuVmFsdWUyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
Y2FsbGJhY2spOworCisgICAgICAgIG1fY2FsbGJhY2socmV0dXJuVmFsdWUxLCByZXR1cm5WYWx1
ZTIsIDAsIGNvbnRleHQoKSk7CisKKyAgICAgICAgbV9jYWxsYmFjayA9IDA7CisgICAgfQorCisg
ICAgdm9pZCBpbnZhbGlkYXRlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2NhbGxiYWNrKTsK
KworICAgICAgICBSZWZQdHI8V2ViRXJyb3I+IGVycm9yID0gV2ViRXJyb3I6OmNyZWF0ZSgpOwor
ICAgICAgICBtX2NhbGxiYWNrKFdlYkNvcmU6OkludFBvaW50KCksIDAsIHRvQVBJKGVycm9yLmdl
dCgpKSwgY29udGV4dCgpKTsKKyAgICAgICAgCisgICAgICAgIG1fY2FsbGJhY2sgPSAwOworICAg
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgCisgICAgVG91Y2hlc0NhbGxiYWNrKHZvaWQqIGNvbnRl
eHQsIENhbGxiYWNrRnVuY3Rpb24gY2FsbGJhY2spCisgICAgICAgIDogQ2FsbGJhY2tCYXNlKGNv
bnRleHQpCisgICAgICAgICwgbV9jYWxsYmFjayhjYWxsYmFjaykKKyAgICB7CisgICAgICAgIEFT
U0VSVChtX2NhbGxiYWNrKTsKKyAgICB9CisgICAgCisgICAgQ2FsbGJhY2tGdW5jdGlvbiBtX2Nh
bGxiYWNrOworfTsKKyNlbmRpZgorCiBjbGFzcyBXZWJQYWdlUHJveHkKICAgICA6IHB1YmxpYyBB
UEk6OlR5cGVkT2JqZWN0PEFQSTo6T2JqZWN0OjpUeXBlOjpQYWdlPgogI2lmIEVOQUJMRShJTlBV
VF9UWVBFX0NPTE9SKQpAQCAtMzMyLDYgKzQyNiwxNCBAQAogCiAgICAgdm9pZCBleGVjdXRlRWRp
dENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSk7CiAgICAgdm9pZCB2YWxpZGF0ZUNv
bW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgUGFzc1JlZlB0cjxWYWxpZGF0ZUNvbW1h
bmRDYWxsYmFjaz4pOworI2lmIFBMQVRGT1JNKElPUykKKyAgICB2b2lkIHNlbGVjdFdpdGhHZXN0
dXJlKGNvbnN0IFdlYkNvcmU6OkludFBvaW50LCBXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHksIHVp
bnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIFBhc3NSZWZQdHI8R2Vz
dHVyZUNhbGxiYWNrPik7CisgICAgdm9pZCB1cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hlcyhjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCwgdWludDMyX3QgdG91Y2hlcywgYm9vbCBiYXNlSXNTdGFydCwg
UGFzc1JlZlB0cjxUb3VjaGVzQ2FsbGJhY2s+KTsKKyAgICB2b2lkIHNlbGVjdFdpdGhUd29Ub3Vj
aGVzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50IGZyb20sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50
IHRvLCB1aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCBQYXNzUmVm
UHRyPEdlc3R1cmVDYWxsYmFjaz4pOworICAgIHZvaWQgZXh0ZW5kU2VsZWN0aW9uKFdlYkNvcmU6
OlRleHRHcmFudWxhcml0eSk7CisgICAgdm9pZCByZXF1ZXN0QXV0b2NvcnJlY3Rpb25EYXRhKGNv
bnN0IFN0cmluZyYgdGV4dEZvckF1dG9jb3JyZWN0aW9uLCBQYXNzUmVmUHRyPEF1dG9jb3JyZWN0
aW9uRGF0YUNhbGxiYWNrPik7CisgICAgdm9pZCBhcHBseUF1dG9jb3JyZWN0aW9uKGNvbnN0IFN0
cmluZyYgY29ycmVjdGlvbiwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFRleHQsIFBhc3NSZWZQdHI8
U3RyaW5nQ2FsbGJhY2s+KTsKKyNlbmRpZgogCiAgICAgY29uc3QgRWRpdG9yU3RhdGUmIGVkaXRv
clN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9lZGl0b3JTdGF0ZTsgfQogICAgIGJvb2wgY2FuRGVs
ZXRlKCkgY29uc3QgeyByZXR1cm4gaGFzU2VsZWN0ZWRSYW5nZSgpICYmIGlzQ29udGVudEVkaXRh
YmxlKCk7IH0KQEAgLTcwNCw2ICs4MDYsMTUgQEAKICAgICB2b2lkIHNldFN1cHByZXNzVmlzaWJp
bGl0eVVwZGF0ZXMoYm9vbCBmbGFnKSB7IG1fc3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcyA9IGZs
YWc7IH0KICAgICBib29sIHN1cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXMoKSB7IHJldHVybiBtX3N1
cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXM7IH0KIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2b2lk
IGRpZEZpbmlzaFNjcm9sbGluZyhjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBjb250ZW50T2Zm
c2V0KTsKKyAgICB2b2lkIGRpZEZpbmlzaFpvb21pbmcoZmxvYXQgbmV3U2NhbGUpOworCisgICAg
dm9pZCB0YXBIaWdobGlnaHRBdFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCB1
aW50NjRfdCYgcmVxdWVzdElEKTsKKworICAgIHZvaWQgYmx1ckFzc2lzdGVkTm9kZSgpOworI2Vu
ZGlmCisKICAgICB2b2lkIHBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShjb25zdCBTdHJpbmcm
IG1lc3NhZ2VOYW1lLCBBUEk6Ok9iamVjdCogbWVzc2FnZUJvZHkpOwogCiAjaWYgRU5BQkxFKElO
UFVUX1RZUEVfQ09MT1IpCkBAIC04MDMsNyArOTE0LDkgQEAKICAgICB2b2lkIHNob3VsZEludGVy
cnVwdEphdmFTY3JpcHQoYm9vbCYgcmVzdWx0KTsKICAgICB2b2lkIHNldFN0YXR1c1RleHQoY29u
c3QgU3RyaW5nJik7CiAgICAgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBXZWJI
aXRUZXN0UmVzdWx0OjpEYXRhJiBoaXRUZXN0UmVzdWx0RGF0YSwgdWludDMyX3QgbW9kaWZpZXJz
LCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpOworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQogICAgIHZvaWQgdW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkKHVpbnQzMl90IG9w
YXF1ZVBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBj
b25zdCBTdHJpbmcmIHBsdWdpblVSTFN0cmluZywgY29uc3QgU3RyaW5nJiBwbHVnaW5zUGFnZVVS
TFN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZVVSTFN0cmluZywgY29uc3QgU3RyaW5nJiBwYWdl
VVJMU3RyaW5nKTsKKyNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICB2
b2lkIHNldFRvb2xiYXJzQXJlVmlzaWJsZShib29sIHRvb2xiYXJzQXJlVmlzaWJsZSk7CiAgICAg
dm9pZCBnZXRUb29sYmFyc0FyZVZpc2libGUoYm9vbCYgdG9vbGJhcnNBcmVWaXNpYmxlKTsKICAg
ICB2b2lkIHNldE1lbnVCYXJJc1Zpc2libGUoYm9vbCBtZW51QmFySXNWaXNpYmxlKTsKQEAgLTgy
OSw4ICs5NDIsMTAgQEAKICAgICB2b2lkIGRpZENoYW5nZVNjcm9sbGJhcnNGb3JNYWluRnJhbWUo
Ym9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyLCBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKTsK
ICAgICB2b2lkIGRpZENoYW5nZVNjcm9sbE9mZnNldFBpbm5pbmdGb3JNYWluRnJhbWUoYm9vbCBw
aW5uZWRUb0xlZnRTaWRlLCBib29sIHBpbm5lZFRvUmlnaHRTaWRlLCBib29sIHBpbm5lZFRvVG9w
U2lkZSwgYm9vbCBwaW5uZWRUb0JvdHRvbVNpZGUpOwogICAgIHZvaWQgZGlkQ2hhbmdlUGFnZUNv
dW50KHVuc2lnbmVkKTsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICB2b2lk
IGRpZEZhaWxUb0luaXRpYWxpemVQbHVnaW4oY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3Qg
U3RyaW5nJiBmcmFtZVVSTFN0cmluZywgY29uc3QgU3RyaW5nJiBwYWdlVVJMU3RyaW5nKTsKICAg
ICB2b2lkIGRpZEJsb2NrSW5zZWN1cmVQbHVnaW5WZXJzaW9uKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIGNvbnN0IFN0cmluZyYgcGx1Z2luVVJMU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lVVJM
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkxTdHJpbmcsIGJvb2wgcmVwbGFjZW1lbnRPYnNj
dXJlZCk7CisjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgdm9pZCBz
ZXRDYW5TaG9ydENpcmN1aXRIb3Jpem9udGFsV2hlZWxFdmVudHMoYm9vbCBjYW5TaG9ydENpcmN1
aXRIb3Jpem9udGFsV2hlZWxFdmVudHMpIHsgbV9jYW5TaG9ydENpcmN1aXRIb3Jpem9udGFsV2hl
ZWxFdmVudHMgPSBjYW5TaG9ydENpcmN1aXRIb3Jpem9udGFsV2hlZWxFdmVudHM7IH0KIAogICAg
IHZvaWQgcmVhdHRhY2hUb1dlYlByb2Nlc3MoKTsKQEAgLTg0OSw4ICs5NjQsOCBAQAogI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICB2b2lkIGRpZEZpbmRab29tYWJsZUFyZWEoY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAjZW5kaWYK
LSNpZiBQTEFURk9STShFRkwpCi0gICAgdm9pZCBkaWRDaGFuZ2VDb250ZW50c1NpemUoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYpOworI2lmIFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oSU9TKQor
ICAgIHZvaWQgZGlkQ2hhbmdlQ29udGVudFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwog
I2VuZGlmCiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpAQCAtOTUyLDYgKzEwNjcsMTIgQEAK
ICAgICB2b2lkIHNjcmlwdFZhbHVlQ2FsbGJhY2soY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5j
ZSYsIHVpbnQ2NF90KTsKICAgICB2b2lkIGNvbXB1dGVkUGFnZXNDYWxsYmFjayhjb25zdCBWZWN0
b3I8V2ViQ29yZTo6SW50UmVjdD4mLCBkb3VibGUgdG90YWxTY2FsZUZhY3RvckZvclByaW50aW5n
LCB1aW50NjRfdCk7CiAgICAgdm9pZCB2YWxpZGF0ZUNvbW1hbmRDYWxsYmFjayhjb25zdCBTdHJp
bmcmLCBib29sLCBpbnQsIHVpbnQ2NF90KTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgdm9pZCBn
ZXN0dXJlQ2FsbGJhY2soY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCB1aW50MzJfdCwgdWludDMy
X3QsIHVpbnQzMl90LCB1aW50NjRfdCk7CisgICAgdm9pZCB0b3VjaGVzQ2FsbGJhY2soY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmLCB1aW50MzJfdCwgdWludDY0X3QpOworICAgIHZvaWQgYXV0b2Nv
cnJlY3Rpb25EYXRhQ2FsbGJhY2soY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mLCBj
b25zdCBTdHJpbmcmLCBmbG9hdCwgdWludDY0X3QsIHVpbnQ2NF90KTsKKyAgICB2b2lkIGludGVy
cHJldEtleUV2ZW50KGNvbnN0IEVkaXRvclN0YXRlJiwgYm9vbCBpc0NoYXJFdmVudCwgYm9vbCYg
aGFuZGxlZCk7CisjZW5kaWYKICNpZiBQTEFURk9STShHVEspCiAgICAgdm9pZCBwcmludEZpbmlz
aGVkQ2FsbGJhY2soY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYsIHVpbnQ2NF90KTsKICNl
bmRpZgpAQCAtOTY5LDcgKzEwOTAsNyBAQAogCiAgICAgYm9vbCBtYXliZUluaXRpYWxpemVTYW5k
Ym94RXh0ZW5zaW9uSGFuZGxlKGNvbnN0IFdlYkNvcmU6OlVSTCYsIFNhbmRib3hFeHRlbnNpb246
OkhhbmRsZSYpOwogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBM
QVRGT1JNKElPUykKICAgICB2b2lkIHN1YnN0aXR1dGlvbnNQYW5lbElzU2hvd2luZyhib29sJik7
CiAgICAgdm9pZCBzaG93Q29ycmVjdGlvblBhbmVsKGludDMyX3QgcGFuZWxUeXBlLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIGJvdW5kaW5nQm94T2ZSZXBsYWNlZFN0cmluZywgY29uc3QgU3Ry
aW5nJiByZXBsYWNlZFN0cmluZywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlUmVwbGFjZW1lbnRTdHJpbmdzKTsKICAgICB2
b2lkIGRpc21pc3NDb3JyZWN0aW9uUGFuZWwoaW50MzJfdCByZWFzb24pOwpAQCAtOTgxLDggKzEx
MDIsMTkgQEAKICAgICB2b2lkIHJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBk
aWN0YXRpb25Db250ZXh0KTsKICAgICB2b2lkIGRpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRf
dCBkaWN0YXRpb25Db250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KTsKICNlbmRpZgotI2Vu
ZGlmIC8vIFBMQVRGT1JNKE1BQykKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpICYmICFQTEFURk9S
TShJT1MpCiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgdm9pZCBtYWluRG9jdW1lbnREaWRSZWNl
aXZlTW9iaWxlRG9jVHlwZSgpOworCisgICAgdm9pZCBkaWRHZXRUYXBIaWdobGlnaHRHZW9tZXRy
aWVzKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yLCBjb25z
dCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRRdWFkPiYgZ2VvbWV0cmllcywgY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgdG9wTGVmdFJhZGl1cywgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgdG9wUmlnaHRS
YWRpdXMsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGJvdHRvbUxlZnRSYWRpdXMsIGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIGJvdHRvbVJpZ2h0UmFkaXVzKTsKKworICAgIHZvaWQgZGlkQ2hhbmdl
Vmlld3BvcnRBcmd1bWVudHMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMmIHZpZXdw
b3J0QXJndW1lbnRzKTsKKworICAgIHZvaWQgc3RhcnRBc3Npc3RpbmdOb2RlKGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmLCBib29sIGhhc05leHRGb2N1c2FibGUsIGJvb2wgaGFzUHJldmlvdXNGb2N1
c2FibGUpOworICAgIHZvaWQgc3RvcEFzc2lzdGluZ05vZGUoKTsKKyNlbmRpZiAvLyBQTEFURk9S
TShJT1MpCisKICNpZiBVU0UoU09VUCkKICAgICB2b2lkIGRpZFJlY2VpdmVVUklSZXF1ZXN0KFN0
cmluZyB1cmlTdHJpbmcsIHVpbnQ2NF90IHJlcXVlc3RJRCk7CiAjZW5kaWYKQEAgLTEwNTMsNiAr
MTE4NSwxMSBAQAogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxTY3JpcHRWYWx1ZUNhbGxi
YWNrPj4gbV9zY3JpcHRWYWx1ZUNhbGxiYWNrczsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQ
dHI8Q29tcHV0ZWRQYWdlc0NhbGxiYWNrPj4gbV9jb21wdXRlZFBhZ2VzQ2FsbGJhY2tzOwogICAg
IEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxWYWxpZGF0ZUNvbW1hbmRDYWxsYmFjaz4+IG1fdmFs
aWRhdGVDb21tYW5kQ2FsbGJhY2tzOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBIYXNoTWFwPHVp
bnQ2NF90LCBSZWZQdHI8R2VzdHVyZUNhbGxiYWNrPj4gbV9nZXN0dXJlQ2FsbGJhY2tzOworICAg
IEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxUb3VjaGVzQ2FsbGJhY2s+ID4gbV90b3VjaGVzQ2Fs
bGJhY2tzOworICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxBdXRvY29ycmVjdGlvbkRhdGFD
YWxsYmFjaz4gPiBtX2F1dG9jb3JyZWN0aW9uQ2FsbGJhY2tzOworI2VuZGlmCiAjaWYgUExBVEZP
Uk0oR1RLKQogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxQcmludEZpbmlzaGVkQ2FsbGJh
Y2s+PiBtX3ByaW50RmluaXNoZWRDYWxsYmFja3M7CiAjZW5kaWYKQEAgLTEyMTIsNyArMTM0OSw5
IEBACiAgICAgYm9vbCBtX3dhaXRpbmdGb3JEaWRVcGRhdGVWaWV3U3RhdGU7CiAKICNpZiBQTEFU
Rk9STShNQUMpCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBXZWJDb3JlOjpUaW1lcjxXZWJQYWdl
UHJveHk+IG1fZXhwb3NlZFJlY3RDaGFuZ2VkVGltZXI7CisjZW5kaWYgLy8gUExBVEZPUk0oSU9T
KQogICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX2V4cG9zZWRSZWN0OwogICAgIFdlYkNvcmU6OkZs
b2F0UmVjdCBtX2xhc3RTZW50RXhwb3NlZFJlY3Q7CiAgICAgYm9vbCBtX2NsaXBzVG9FeHBvc2Vk
UmVjdDsKSW5kZXg6IFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTU5NjUx
KQorKysgVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpA
QCAtMzAsMTIgKzMwLDE2IEBACiAgICAgUnVuSmF2YVNjcmlwdFByb21wdCh1aW50NjRfdCBmcmFt
ZUlELCBXVEY6OlN0cmluZyBtZXNzYWdlLCBXVEY6OlN0cmluZyBkZWZhdWx0VmFsdWUpIC0+IChX
VEY6OlN0cmluZyByZXN1bHQpCiAgICAgU2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpIC0+IChi
b29sIHNob3VsZEludGVydXB0KQogICAgIE1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KFdlYktpdDo6
V2ViSGl0VGVzdFJlc3VsdDo6RGF0YSBoaXRUZXN0UmVzdWx0RGF0YSwgdWludDMyX3QgbW9kaWZp
ZXJzLCBXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyIHVzZXJEYXRhKSBW
YXJpYWRpYworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIFVuYXZhaWxhYmxl
UGx1Z2luQnV0dG9uQ2xpY2tlZCh1aW50MzJfdCBwbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbiwg
V1RGOjpTdHJpbmcgbWltZVR5cGUsIFdURjo6U3RyaW5nIHBsdWdpblVSTFN0cmluZywgV1RGOjpT
dHJpbmcgcGx1Z2luc3BhZ2VBdHRyaWJ1dGVVUkxTdHJpbmcsIFdURjo6U3RyaW5nIGZyYW1lVVJM
U3RyaW5nLCBXVEY6OlN0cmluZyBwYWdlVVJMU3RyaW5nKQorI2VuZGlmIC8vIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQogICAgIERpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhXZWJDb3Jl
OjpWaWV3cG9ydEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKICAgICBEaWRSZWNlaXZlRXZlbnQodWlu
dDMyX3QgdHlwZSwgYm9vbCBoYW5kbGVkKQogICAgIFN0b3BSZXNwb25zaXZlbmVzc1RpbWVyKCkK
KyNpZiAhUExBVEZPUk0oSU9TKQogICAgIFNldEN1cnNvcihXZWJDb3JlOjpDdXJzb3IgY3Vyc29y
KQogICAgIFNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sIGhpZGRlblVudGlsTW91
c2VNb3ZlcykKKyNlbmRpZgogICAgIFNldFN0YXR1c1RleHQoV1RGOjpTdHJpbmcgc3RhdHVzVGV4
dCkKICAgICBTZXRUb29sVGlwKFdURjo6U3RyaW5nIHRvb2xUaXApCiAgICAgU2V0Rm9jdXMoYm9v
bCBmb2N1c2VkKQpAQCAtNjUsOCArNjksMTAgQEAKICAgICBEaWRDaGFuZ2VTY3JvbGxiYXJzRm9y
TWFpbkZyYW1lKGJvb2wgaGFzSG9yaXpvbnRhbFNjcm9sbGJhciwgYm9vbCBoYXNWZXJ0aWNhbFNj
cm9sbGJhcikKICAgICBEaWRDaGFuZ2VTY3JvbGxPZmZzZXRQaW5uaW5nRm9yTWFpbkZyYW1lKGJv
b2wgcGlubmVkVG9MZWZ0U2lkZSwgYm9vbCBwaW5uZWRUb1JpZ2h0U2lkZSwgYm9vbCBwaW5uZWRU
b1RvcFNpZGUsIGJvb2wgcGlubmVkVG9Cb3R0b21TaWRlKQogICAgIERpZENoYW5nZVBhZ2VDb3Vu
dCh1bnNpZ25lZCBwYWdlQ291bnQpOworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQog
ICAgIERpZEZhaWxUb0luaXRpYWxpemVQbHVnaW4oV1RGOjpTdHJpbmcgbWltZVR5cGUsIFdURjo6
U3RyaW5nIGZyYW1lVVJMU3RyaW5nLCBXVEY6OlN0cmluZyBwYWdlVVJMU3RyaW5nKQogICAgIERp
ZEJsb2NrSW5zZWN1cmVQbHVnaW5WZXJzaW9uKFdURjo6U3RyaW5nIG1pbWVUeXBlLCBXVEY6OlN0
cmluZyBwbHVnaW5VUkxTdHJpbmcsIFdURjo6U3RyaW5nIGZyYW1lVVJMU3RyaW5nLCBXVEY6OlN0
cmluZyBwYWdlVVJMU3RyaW5nLCBib29sIHJlcGxhY2VtZW50T2JzY3VyZWQpCisjZW5kaWYgLy8g
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgU2V0Q2FuU2hvcnRDaXJjdWl0SG9yaXpv
bnRhbFdoZWVsRXZlbnRzKGJvb2wgY2FuU2hvcnRDaXJjdWl0SG9yaXpvbnRhbFdoZWVsRXZlbnRz
KQogCiAjaWYgUExBVEZPUk0oRUZMKQpAQCAtODEsOCArODcsOCBAQAogICAgIERpZEZpbmRab29t
YWJsZUFyZWEoV2ViQ29yZTo6SW50UG9pbnQgdGFyZ2V0LCBXZWJDb3JlOjpJbnRSZWN0IGFyZWEp
CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKEVGTCkKLSAgICBEaWRDaGFuZ2VDb250ZW50c1NpemUo
V2ViQ29yZTo6SW50U2l6ZSBuZXdTaXplKQorI2lmIFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0o
SU9TKQorICAgIERpZENoYW5nZUNvbnRlbnRTaXplKFdlYkNvcmU6OkludFNpemUgbmV3U2l6ZSkK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKQEAgLTE0MSw2ICsxNDcsMTIgQEAK
ICAgICBTY3JpcHRWYWx1ZUNhbGxiYWNrKENvcmVJUEM6OkRhdGFSZWZlcmVuY2UgcmVzdWx0RGF0
YSwgdWludDY0X3QgY2FsbGJhY2tJRCkKICAgICBDb21wdXRlZFBhZ2VzQ2FsbGJhY2soVmVjdG9y
PFdlYkNvcmU6OkludFJlY3Q+IHBhZ2VSZWN0cywgZG91YmxlIHRvdGFsU2NhbGVGYWN0b3JGb3JQ
cmludGluZywgdWludDY0X3QgY2FsbGJhY2tJRCkKICAgICBWYWxpZGF0ZUNvbW1hbmRDYWxsYmFj
ayhXVEY6OlN0cmluZyBjb21tYW5kLCBib29sIGlzRW5hYmxlZCwgaW50MzJfdCBzdGF0ZSwgdWlu
dDY0X3QgY2FsbGJhY2tJRCkKKyNpZiBQTEFURk9STShJT1MpCisgICAgR2VzdHVyZUNhbGxiYWNr
KFdlYkNvcmU6OkludFBvaW50IHBvaW50LCB1aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3Qg
Z2VzdHVyZVN0YXRlLCB1aW50MzJfdCBmbGFncywgdWludDY0X3QgY2FsbGJhY2tJRCkKKyAgICBU
b3VjaGVzQ2FsbGJhY2soV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIHVpbnQzMl90IHRvdWNoZXMs
IHVpbnQ2NF90IGNhbGxiYWNrSUQpCisgICAgQXV0b2NvcnJlY3Rpb25EYXRhQ2FsbGJhY2soVmVj
dG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4gdGV4dFJlY3RzLCBTdHJpbmcgZm9udE5hbWUsIGRvdWJs
ZSBmb250U2l6ZSwgdWludDY0X3QgdHJhaXRzLCB1aW50NjRfdCBjYWxsYmFja0lEKTsKKyAgICBJ
bnRlcnByZXRLZXlFdmVudChXZWJLaXQ6OkVkaXRvclN0YXRlIHN0YXRlLCBib29sIGlzQ2hhckV2
ZW50KSAtPiAoYm9vbCBoYW5kbGVkKQorI2VuZGlmCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIFBy
aW50RmluaXNoZWRDYWxsYmFjayhXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yLCB1aW50NjRf
dCBjYWxsYmFja0lEKQogI2VuZGlmCkBAIC0yNjUsMTAgKzI3NywxMCBAQAogICAgIFNlYXJjaFRo
ZVdlYihXVEY6OlN0cmluZyBzdHJpbmcpCiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykKKyNp
ZiBVU0UoQVBQS0lUKQogICAgIFN1YnN0aXR1dGlvbnNQYW5lbElzU2hvd2luZygpIC0+IChib29s
IGlzU2hvd2luZykKICNlbmRpZgotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiAhUExBVEZPUk0oSU9T
KSAmJiBQTEFURk9STShNQUMpCiAgICAgIyBBdXRvY29ycmVjdGlvbiBtZXNzYWdlcwogICAgIFNo
b3dDb3JyZWN0aW9uUGFuZWwoaW50MzJfdCBwYW5lbFR5cGUsIFdlYkNvcmU6OkZsb2F0UmVjdCBi
b3VuZGluZ0JveE9mUmVwbGFjZWRTdHJpbmcsIFN0cmluZyByZXBsYWNlZFN0cmluZywgU3RyaW5n
IHJlcGxhY2VtZW50U3RyaW5nLCBWZWN0b3I8U3RyaW5nPiBhbHRlcm5hdGl2ZVJlcGxhY2VtZW50
U3RyaW5ncykKICAgICBEaXNtaXNzQ29ycmVjdGlvblBhbmVsKGludDMyX3QgcmVhc29uKQpAQCAt
Mjg4LDYgKzMwMCwxNiBAQAogICAgIFdpbmRvd2VkUGx1Z2luR2VvbWV0cnlEaWRDaGFuZ2UoV2Vi
Q29yZTo6SW50UmVjdCBmcmFtZVJlY3QsIFdlYkNvcmU6OkludFJlY3QgY2xpcFJlY3QsIHVpbnQ2
NF90IHdpbmRvd0lEKQogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgTWFpbkRvY3Vt
ZW50RGlkUmVjZWl2ZU1vYmlsZURvY1R5cGUoKTsKKworICAgIERpZEdldFRhcEhpZ2hsaWdodEdl
b21ldHJpZXModWludDY0X3QgcmVxdWVzdElELCBXZWJDb3JlOjpDb2xvciBjb2xvciwgVmVjdG9y
PFdlYkNvcmU6OkZsb2F0UXVhZD4gZ2VvbWV0cmllcywgV2ViQ29yZTo6SW50U2l6ZSB0b3BMZWZ0
UmFkaXVzLCBXZWJDb3JlOjpJbnRTaXplIHRvcFJpZ2h0UmFkaXVzLCBXZWJDb3JlOjpJbnRTaXpl
IGJvdHRvbUxlZnRSYWRpdXMsIFdlYkNvcmU6OkludFNpemUgYm90dG9tUmlnaHRSYWRpdXMpCisg
ICAgRGlkQ2hhbmdlVmlld3BvcnRBcmd1bWVudHMoV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMg
dmlld3BvcnRBcmd1bWVudHMpCisKKyAgICBTdGFydEFzc2lzdGluZ05vZGUoV2ViQ29yZTo6SW50
UmVjdCBzY3JvbGxSZWN0LCBib29sIGhhc05leHRGb2N1c2FibGUsIGJvb2wgaGFzUHJldmlvdXNG
b2N1c2FibGUpCisgICAgU3RvcEFzc2lzdGluZ05vZGUoKQorI2VuZGlmCisKICAgICAjIFNlYXJj
aCBwb3B1cCBtZW51cwogICAgIFNhdmVSZWNlbnRTZWFyY2hlcyhXVEY6OlN0cmluZyBuYW1lLCBW
ZWN0b3I8U3RyaW5nPiBzZWFyY2hJdGVtcykKICAgICBMb2FkUmVjZW50U2VhcmNoZXMoV1RGOjpT
dHJpbmcgbmFtZSkgLT4gKFZlY3RvcjxTdHJpbmc+IHJlc3VsdCkKSW5kZXg6IFVJUHJvY2Vzcy9X
ZWJVSUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmNwcAko
cmV2aXNpb24gMTU5NjUxKQorKysgVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTc2LDYgKzE3Niw3IEBACiAgICAgbV9jbGllbnQubW91c2VEaWRNb3ZlT3ZlckVs
ZW1lbnQodG9BUEkocGFnZSksIHRvQVBJKHdlYkhpdFRlc3RSZXN1bHQuZ2V0KCkpLCB0b0FQSSht
b2RpZmllcnMpLCB0b0FQSSh1c2VyRGF0YSksIG1fY2xpZW50LmNsaWVudEluZm8pOwogfQogCisj
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiB2b2lkIFdlYlVJQ2xpZW50Ojp1bmF2YWls
YWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQoV2ViUGFnZVByb3h5KiBwYWdlLCBXS1BsdWdpblVuYXZh
aWxhYmlsaXR5UmVhc29uIHBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uLCBJbW11dGFibGVEaWN0
aW9uYXJ5KiBwbHVnaW5JbmZvcm1hdGlvbikKIHsKICAgICBpZiAocGx1Z2luVW5hdmFpbGFiaWxp
dHlSZWFzb24gPT0ga1dLUGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb25QbHVnaW5NaXNzaW5nKSB7
CkBAIC0yMDQsNiArMjA1LDcgQEAKICAgICAgICAgICAgIHRvQVBJKHBsdWdpbkluZm9ybWF0aW9u
KSwKICAgICAgICAgICAgIG1fY2xpZW50LmNsaWVudEluZm8pOwogfQorI2VuZGlmIC8vIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQogCiBib29sIFdlYlVJQ2xpZW50OjppbXBsZW1lbnRzRGlk
Tm90SGFuZGxlS2V5RXZlbnQoKSBjb25zdAogewpJbmRleDogVUlQcm9jZXNzL1dlYlVJQ2xpZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmgJKHJldmlzaW9uIDE1OTY1
MSkKKysrIFVJUHJvY2Vzcy9XZWJVSUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw4ICs3
MSwxMCBAQAogCiAgICAgdm9pZCBzZXRTdGF0dXNUZXh0KFdlYlBhZ2VQcm94eSosIGNvbnN0IFN0
cmluZyYpOwogICAgIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV2ViUGFnZVByb3h5Kiwg
Y29uc3QgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSYsIFdlYkV2ZW50OjpNb2RpZmllcnMsIEFQSTo6
T2JqZWN0Kik7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgdm9pZCB1bmF2
YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQoV2ViUGFnZVByb3h5KiwgV0tQbHVnaW5VbmF2YWls
YWJpbGl0eVJlYXNvbiwgSW1tdXRhYmxlRGljdGlvbmFyeSopOwotICAgIAorI2VuZGlmIC8vIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorCiAgICAgYm9vbCBpbXBsZW1lbnRzRGlkTm90SGFu
ZGxlS2V5RXZlbnQoKSBjb25zdDsKICAgICB2b2lkIGRpZE5vdEhhbmRsZUtleUV2ZW50KFdlYlBh
Z2VQcm94eSosIGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmKTsKIApJbmRleDogVUlQcm9j
ZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBVSVByb2Nlc3MvaW9zL1Rl
eHRDaGVja2VySU9TLm1tCShyZXZpc2lvbiAwKQorKysgVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tl
cklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGV4dENoZWNrZXIuaCIKKworI2ltcG9ydCAiVGV4
dENoZWNrZXJTdGF0ZS5oIgorI2ltcG9ydCA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisgICAgCitUZXh0
Q2hlY2tlclN0YXRlIHRleHRDaGVja2VyU3RhdGU7CisKK2NvbnN0IFRleHRDaGVja2VyU3RhdGUm
IFRleHRDaGVja2VyOjpzdGF0ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gdGV4dENoZWNrZXJTdGF0ZTsKK30KKworYm9vbCBUZXh0Q2hlY2tlcjo6aXNDb250aW51b3Vz
U3BlbGxDaGVja2luZ0FsbG93ZWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIFRleHRDaGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFRl
eHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBUZXh0Q2hlY2tlcjo6c2V0QXV0b21hdGljU3BlbGxpbmdD
b3JyZWN0aW9uRW5hYmxlZChib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgVGV4dENoZWNrZXI6OnNldEF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZChib29s
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXI6OnNldEF1
dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBUZXh0Q2hlY2tlcjo6c2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVu
YWJsZWQoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFRleHRDaGVj
a2VyOjpzZXRBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKGJvb2wpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworc3RhdGljIGJvb2wgc21hcnRJbnNlcnREZWxldGVFbmFibGVk
OworCitib29sIFRleHRDaGVja2VyOjppc1NtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gc21hcnRJbnNlcnREZWxldGVFbmFibGVk
OworfQorCit2b2lkIFRleHRDaGVja2VyOjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoYm9v
bCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFRleHRDaGVja2VyOjpzdWJz
dGl0dXRpb25zUGFuZWxJc1Nob3dpbmcoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIFRleHRDaGVja2VyOjp0b2dnbGVTdWJzdGl0dXRpb25z
UGFuZWxJc1Nob3dpbmcoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgVGV4
dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29s
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXI6OmdyYW1t
YXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCitpbnQ2NF90IFRleHRDaGVja2VyOjp1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdl
YlBhZ2VQcm94eSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30K
Kwordm9pZCBUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyhpbnQ2NF90KQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKyNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNL
SU5HKQorCitWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0
T2ZQYXJhZ3JhcGgoaW50NjRfdCwgY29uc3QgVUNoYXIqLCBpbnQsIHVpbnQ2NF90KQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+
KCk7Cit9CisKKyNlbmRpZgorCit2b2lkIFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJp
bmcoaW50NjRfdCwgY29uc3QgVUNoYXIqLCB1aW50MzJfdCwgaW50MzJfdCYsIGludDMyX3QmKQor
eworICAgIC8vIE1hYyB1c2VzIGNoZWNrVGV4dE9mUGFyYWdyYXBoIGluc3RlYWQuCisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJp
bmcoaW50NjRfdCwgY29uc3QgVUNoYXIqLCB1aW50MzJfdCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1t
YXJEZXRhaWw+JiwgaW50MzJfdCYsIGludDMyX3QmKQoreworICAgIC8vIE1hYyB1c2VzIGNoZWNr
VGV4dE9mUGFyYWdyYXBoIGluc3RlYWQuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9v
bCBUZXh0Q2hlY2tlcjo6c3BlbGxpbmdVSUlzU2hvd2luZygpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXI6OnRvZ2dsZVNw
ZWxsaW5nVUlJc1Nob3dpbmcoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
VGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoaW50NjRfdCwg
Y29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFRleHRD
aGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCwgY29uc3Qg
U3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoaW50NjRfdCwgY29uc3Qg
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgVmVjdG9yPFN0cmluZz4mKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXI6OmxlYXJuV29yZChpbnQ2NF90LCBjb25z
dCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgVGV4dENoZWNr
ZXI6Omlnbm9yZVdvcmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIFRleHRDaGVja2VyOjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhQ
YXNzUmVmUHRyPFRleHRDaGVja2VyQ29tcGxldGlvbj4pCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBVSVByb2Nlc3MvaW9zL1RpbGVk
Q29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHlJT1MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBVSVByb2Nl
c3MvaW9zL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHlJT1MuaAkocmV2aXNpb24g
MCkKKysrIFVJUHJvY2Vzcy9pb3MvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eUlP
Uy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHlJT1NfaAorI2RlZmluZSBUaWxlZENv
cmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5SU9TX2gKKworI2luY2x1ZGUgIkRyYXdpbmdBcmVh
UHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eUlPUyA6IHB1Ymxp
YyBEcmF3aW5nQXJlYVByb3h5IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBUaWxlZENvcmVBbmlt
YXRpb25EcmF3aW5nQXJlYVByb3h5SU9TKFdlYlBhZ2VQcm94eSopOworICAgIHZpcnR1YWwgflRp
bGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHlJT1MoKTsKKworcHJpdmF0ZToKKyAgICAv
LyBEcmF3aW5nQXJlYVByb3h5CisgICAgdmlydHVhbCB2b2lkIGRldmljZVNjYWxlRmFjdG9yRGlk
Q2hhbmdlKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNpemVEaWRDaGFuZ2UoKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1
aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBMYXllclRyZWVDb250ZXh0JikgT1ZF
UlJJREU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFRpbGVkQ29y
ZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHlJT1NfaApJbmRleDogVUlQcm9jZXNzL2lvcy9UaWxl
ZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5SU9TLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFVJUHJv
Y2Vzcy9pb3MvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eUlPUy5tbQkocmV2aXNp
b24gMCkKKysrIFVJUHJvY2Vzcy9pb3MvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94
eUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVBy
b3h5SU9TLmgiCisKKyNpbXBvcnQgIkRyYXdpbmdBcmVhTWVzc2FnZXMuaCIKKyNpbXBvcnQgIldl
YlBhZ2VQcm94eS5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Byb3h5LmgiCisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworVGlsZWRDb3JlQW5pbWF0aW9u
RHJhd2luZ0FyZWFQcm94eUlPUzo6VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eUlP
UyhXZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94eSkKKyAgICA6IERyYXdpbmdBcmVhUHJveHkoRHJh
d2luZ0FyZWFUeXBlVGlsZWRDb3JlQW5pbWF0aW9uSU9TLCB3ZWJQYWdlUHJveHkpCit7Cit9Cisg
ICAgCitUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5SU9TOjp+VGlsZWRDb3JlQW5p
bWF0aW9uRHJhd2luZ0FyZWFQcm94eUlPUygpCit7Cit9CisKK3ZvaWQgVGlsZWRDb3JlQW5pbWF0
aW9uRHJhd2luZ0FyZWFQcm94eUlPUzo6ZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKQorewor
ICAgIG1fd2ViUGFnZVByb3h5LT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVh
OjpTZXREZXZpY2VTY2FsZUZhY3RvcihtX3dlYlBhZ2VQcm94eS0+ZGV2aWNlU2NhbGVGYWN0b3Io
KSksIG1fd2ViUGFnZVByb3h5LT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgVGlsZWRDb3JlQW5pbWF0
aW9uRHJhd2luZ0FyZWFQcm94eUlPUzo6c2l6ZURpZENoYW5nZSgpCit7CisgICAgbV93ZWJQYWdl
UHJveHktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWE6OlVwZGF0ZUdlb21l
dHJ5KG1fc2l6ZSwgSW50U2l6ZSgpKSwgbV93ZWJQYWdlUHJveHktPnBhZ2VJRCgpKTsKK30KKwor
dm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5SU9TOjplbnRlckFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGNvbnN0IExh
eWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCit7CisgICAgbV93ZWJQYWdlUHJveHkt
PmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogVUlQcm9jZXNzL2lvcy9XZWJGdWxsU2NyZWVu
TWFuYWdlclByb3h5SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFVJUHJvY2Vzcy9pb3MvV2ViRnVsbFNj
cmVlbk1hbmFnZXJQcm94eUlPUy5tbQkocmV2aXNpb24gMCkKKysrIFVJUHJvY2Vzcy9pb3MvV2Vi
RnVsbFNjcmVlbk1hbmFnZXJQcm94eUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJGdWxsU2Ny
ZWVuTWFuYWdlclByb3h5LmgiCisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRG
T1JNKElPUykKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCit2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk6OmludmFsaWRhdGUoKQoreworICAg
IGlmICghbV93ZWJWaWV3KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV93ZWJWaWV3ID0g
MDsKK30KKwordm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjpjbG9zZSgpCit7CisgICAg
Ly8gTm8tb3AuCit9CisKK2Jvb2wgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6aXNGdWxsU2Ny
ZWVuKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViRnVsbFNjcmVlbk1hbmFn
ZXJQcm94eTo6ZW50ZXJGdWxsU2NyZWVuKCkKK3sKKyAgICAvLyBOby1vcC4KK30KKwordm9pZCBX
ZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbFNjcmVlbigpCit7CisgICAgLy8gTm8t
b3AuCit9CisgICAgCit2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk6OmJlZ2FuRW50ZXJG
dWxsU2NyZWVuKGNvbnN0IEludFJlY3QmIGluaXRpYWxGcmFtZSwgY29uc3QgSW50UmVjdCYgZmlu
YWxGcmFtZSkKK3sKKyAgICAvLyBOby1vcC4KK30KKwordm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdl
clByb3h5OjpiZWdhbkV4aXRGdWxsU2NyZWVuKGNvbnN0IEludFJlY3QmIGluaXRpYWxGcmFtZSwg
Y29uc3QgSW50UmVjdCYgZmluYWxGcmFtZSkKK3sKKyAgICAvLyBOby1vcC4KK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpJbmRleDogVUlQcm9jZXNzL2lvcy9XZWJJbnNwZWN0
b3JQcm94eUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBVSVByb2Nlc3MvaW9zL1dlYkluc3BlY3RvclBy
b3h5SU9TLm1tCShyZXZpc2lvbiAwKQorKysgVUlQcm9jZXNzL2lvcy9XZWJJbnNwZWN0b3JQcm94
eUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV2ViSW5zcGVjdG9yUHJveHkuaCIKKworI2lmIEVO
QUJMRShJTlNQRUNUT1IpCisKKyNpbXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUluc3Bl
Y3RvcldpbmRvdygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6dXBkYXRlSW5zcGVjdG9yV2luZG93VGl0bGUoKSBjb25zdAoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK1dlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtQ3JlYXRlSW5zcGVjdG9yUGFnZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gMDsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1PcGVuKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybURpZENsb3NlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUJyaW5nVG9Gcm9udCgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworYm9vbCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1Jc0Zyb250KCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmlu
ZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVVJMLCBjb25zdCBTdHJpbmcm
IGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVEaWFsb2cpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1BcHBlbmQoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRVUkwsIGNvbnN0IFN0cmluZyYgY29udGVu
dCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5
OjppbnNwZWN0ZWRWaWV3RnJhbWVEaWRDaGFuZ2UoQ0dGbG9hdCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1JbnNwZWN0
ZWRXaW5kb3dIZWlnaHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7
Cit9CisKK3Vuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRv
d1dpZHRoKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2
b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaCgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1EZXRhY2goKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRUb29sYmFy
SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitT
dHJpbmcgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKSBjb25zdAoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgV2Vi
SW5zcGVjdG9yUHJveHk6Omluc3BlY3RvckJhc2VVUkwoKSBjb25zdAoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit2b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRh
Y2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wgYXZhaWxhYmxlKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUikKSW5kZXg6IFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCShyZXZpc2lvbiAwKQorKysg
VUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0MDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldlYlBh
Z2VQcm94eS5oIgorCisjaW1wb3J0ICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCisjaW1wb3J0
ICJXZWJQYWdlTWVzc2FnZXMuaCIKKyNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgorI2ltcG9y
dCA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRCdWZm
ZXIuaD4KKyNpbXBvcnQgIlBhZ2VDbGllbnRJbXBsSU9TLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBXZWJQYWdlUHJveHk6OnBsYXRm
b3JtSW5pdGlhbGl6ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5nIFdl
YlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQoY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworCisgICAgLy8gSnVzdCByZXR1cm4gdGhlIGlPUyA1LjEgdXNlciBhZ2Vu
dCBmb3Igbm93LgorICAgIHJldHVybiAiTW96aWxsYS81LjAgKGlQYWQ7IENQVSBPUyA1XzEgbGlr
ZSBNYWMgT1MgWCkgQXBwbGVXZWJLaXQvNTM0LjQ2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lv
bi81LjEgTW9iaWxlLzlCMTc2IFNhZmFyaS83NTM0LjQ4LjMiOworfQorCit2b2lkIFdlYlBhZ2VQ
cm94eTo6Z2V0SXNTcGVha2luZyhib29sJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIFdlYlBhZ2VQcm94eTo6c3BlYWsoY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6c3RvcFNwZWFraW5nKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6c2VhcmNoV2l0aFNw
b3RsaWdodChjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgV2ViUGFnZVByb3h5OjpzZWFyY2hUaGVXZWIoY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6d2luZG93QW5kVmlld0ZyYW1l
c0NoYW5nZWQoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRQb2ludCYpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnNldENvbXBvc2l0aW9uKGNv
bnN0IFN0cmluZyYsIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4sIHVpbnQ2NF90LCB1aW50
NjRfdCwgdWludDY0X3QsIHVpbnQ2NF90KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisKK30K
Kwordm9pZCBXZWJQYWdlUHJveHk6OmNvbmZpcm1Db21wb3NpdGlvbigpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OmNhbmNlbENvbXBvc2l0aW9uKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworCit9CisKK2Jvb2wgV2ViUGFnZVByb3h5OjppbnNl
cnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0
LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kKQoreworICAgIGlmICghaXNWYWxpZCgpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBib29sIGhhbmRsZWQgPSB0cnVlOworICAg
IHByb2Nlc3MoKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6Okluc2VydFRleHQodGV4dCwg
cmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCByZXBsYWNlbWVudFJhbmdlRW5kKSwgTWVzc2FnZXM6Oldl
YlBhZ2U6Okluc2VydFRleHQ6OlJlcGx5KGhhbmRsZWQsIG1fZWRpdG9yU3RhdGUpLCBtX3BhZ2VJ
RCk7CisgICAgcmV0dXJuIGhhbmRsZWQ7Cit9CisKK2Jvb2wgV2ViUGFnZVByb3h5OjppbnNlcnRE
aWN0YXRlZFRleHQoY29uc3QgU3RyaW5nJiwgdWludDY0X3QsIHVpbnQ2NF90LCBjb25zdCBWZWN0
b3I8V2ViQ29yZTo6VGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlPiYpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpnZXRN
YXJrZWRSYW5nZSh1aW50NjRfdCYsIHVpbnQ2NF90JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0U2VsZWN0ZWRSYW5nZSh1aW50NjRfdCYsIHVp
bnQ2NF90JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlBhZ2VQcm94
eTo6Z2V0QXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZSh1aW50NjRfdCwgdWludDY0X3QsIEF0
dHJpYnV0ZWRTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3VpbnQ2NF90
IFdlYlBhZ2VQcm94eTo6Y2hhcmFjdGVySW5kZXhGb3JQb2ludChjb25zdCBJbnRQb2ludCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitJbnRSZWN0IFdlYlBh
Z2VQcm94eTo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UodWludDY0X3QsIHVpbnQ2NF90KQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEludFJlY3QoKTsKK30KKworYm9v
bCBXZWJQYWdlUHJveHk6OmV4ZWN1dGVLZXlwcmVzc0NvbW1hbmRzKGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpLZXlwcmVzc0NvbW1hbmQ+JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKworU3RyaW5nIFdlYlBhZ2VQcm94eTo6c3RyaW5nU2VsZWN0aW9uRm9y
UGFzdGVib2FyZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5n
KCk7Cit9CisKK1Bhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBXZWJQYWdlUHJveHk6
OmRhdGFTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBXZWJQYWdlUHJveHk6OnJlYWRT
ZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9y
bURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpnZXN0dXJl
Q2FsbGJhY2soY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCBnZXN0dXJl
VHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCB1aW50MzJfdCBmbGFncywgdWludDY0X3QgY2Fs
bGJhY2tJRCkKK3sKKyAgICBSZWZQdHI8R2VzdHVyZUNhbGxiYWNrPiBjYWxsYmFjayA9IG1fZ2Vz
dHVyZUNhbGxiYWNrcy50YWtlKGNhbGxiYWNrSUQpOworICAgIGlmICghY2FsbGJhY2spIHsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgY2FsbGJhY2stPnBlcmZvcm1DYWxsYmFja1dpdGhSZXR1cm5WYWx1ZShwb2ludCwgZ2Vz
dHVyZVR5cGUsIGdlc3R1cmVTdGF0ZSwgZmxhZ3MpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6
dG91Y2hlc0NhbGxiYWNrKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWludDMyX3Qg
dG91Y2hlcywgdWludDY0X3QgY2FsbGJhY2tJRCkKK3sKKyAgICBSZWZQdHI8VG91Y2hlc0NhbGxi
YWNrPiBjYWxsYmFjayA9IG1fdG91Y2hlc0NhbGxiYWNrcy50YWtlKGNhbGxiYWNrSUQpOworICAg
IGlmICghY2FsbGJhY2spIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBjYWxsYmFjay0+cGVyZm9ybUNhbGxiYWNrV2l0aFJldHVy
blZhbHVlKHBvaW50LCB0b3VjaGVzKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OmF1dG9jb3Jy
ZWN0aW9uRGF0YUNhbGxiYWNrKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiByZWN0
cywgY29uc3QgU3RyaW5nJiBmb250TmFtZSwgZmxvYXQgZm9udFNpemUsIHVpbnQ2NF90IGZvbnRU
cmFpdHMsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCit7CisgICAgUmVmUHRyPEF1dG9jb3JyZWN0aW9u
RGF0YUNhbGxiYWNrPiBjYWxsYmFjayA9IG1fYXV0b2NvcnJlY3Rpb25DYWxsYmFja3MudGFrZShj
YWxsYmFja0lEKTsKKyAgICBpZiAoIWNhbGxiYWNrKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FsbGJhY2stPnBlcmZvcm1D
YWxsYmFja1dpdGhSZXR1cm5WYWx1ZShyZWN0cywgZm9udE5hbWUsIGZvbnRTaXplLCBmb250VHJh
aXRzKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IFdl
YkNvcmU6OkludFBvaW50IHBvaW50LCBXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHksIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIFBhc3NSZWZQ
dHI8R2VzdHVyZUNhbGxiYWNrPiBjYWxsYmFjaykKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkgewor
ICAgICAgICBjYWxsYmFjay0+aW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBjYWxsYmFjay0+Y2FsbGJhY2tJRCgpOwor
ICAgIG1fZ2VzdHVyZUNhbGxiYWNrcy5zZXQoY2FsbGJhY2tJRCwgY2FsbGJhY2spOworICAgIG1f
cHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2VsZWN0V2l0aEdlc3R1cmUocG9pbnQs
ICh1aW50MzJfdClncmFudWxhcml0eSwgZ2VzdHVyZVR5cGUsIGdlc3R1cmVTdGF0ZSwgY2FsbGJh
Y2tJRCksIG1fcGFnZUlEKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0ZVNlbGVjdGlv
bldpdGhUb3VjaGVzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50IHBvaW50LCB1aW50MzJfdCB0b3Vj
aGVzLCBib29sIGJhc2VJc1N0YXJ0LCBQYXNzUmVmUHRyPFRvdWNoZXNDYWxsYmFjaz4gY2FsbGJh
Y2spCit7CisgICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgY2FsbGJhY2stPmludmFsaWRh
dGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQg
PSBjYWxsYmFjay0+Y2FsbGJhY2tJRCgpOworICAgIG1fdG91Y2hlc0NhbGxiYWNrcy5zZXQoY2Fs
bGJhY2tJRCwgY2FsbGJhY2spOworICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6VXBkYXRlU2VsZWN0aW9uV2l0aFRvdWNoZXMocG9pbnQsIHRvdWNoZXMsIGJhc2VJc1N0YXJ0
LCBjYWxsYmFja0lEKSwgbV9wYWdlSUQpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cmVxdWVz
dEF1dG9jb3JyZWN0aW9uRGF0YShjb25zdCBTdHJpbmcmIHRleHRGb3JBdXRvY29ycmVjdGlvbiwg
UGFzc1JlZlB0cjxBdXRvY29ycmVjdGlvbkRhdGFDYWxsYmFjaz4gY2FsbGJhY2spCit7CisgICAg
aWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgY2FsbGJhY2stPmludmFsaWRhdGUoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBjYWxsYmFjay0+
Y2FsbGJhY2tJRCgpOworICAgIG1fYXV0b2NvcnJlY3Rpb25DYWxsYmFja3Muc2V0KGNhbGxiYWNr
SUQsIGNhbGxiYWNrKTsKKyAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJl
cXVlc3RBdXRvY29ycmVjdGlvbkRhdGEodGV4dEZvckF1dG9jb3JyZWN0aW9uLCBjYWxsYmFja0lE
KSwgbV9wYWdlSUQpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6YXBwbHlBdXRvY29ycmVjdGlv
bihjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxUZXh0LCBQ
YXNzUmVmUHRyPFN0cmluZ0NhbGxiYWNrPiBjYWxsYmFjaykKK3sKKyAgICBpZiAoIWlzVmFsaWQo
KSkgeworICAgICAgICBjYWxsYmFjay0+aW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IGNhbGxiYWNrLT5jYWxsYmFja0lEKCk7
CisgICAgbV9zdHJpbmdDYWxsYmFja3Muc2V0KGNhbGxiYWNrSUQsIGNhbGxiYWNrKTsKKyAgICBt
X3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkFwcGx5QXV0b2NvcnJlY3Rpb24oY29y
cmVjdGlvbiwgb3JpZ2luYWxUZXh0LCBjYWxsYmFja0lEKSwgbV9wYWdlSUQpOworfQorCit2b2lk
IFdlYlBhZ2VQcm94eTo6c2VsZWN0V2l0aFR3b1RvdWNoZXMoY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQgZnJvbSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgdG8sIHVpbnQzMl90IGdlc3R1cmVUeXBl
LCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIFBhc3NSZWZQdHI8R2VzdHVyZUNhbGxiYWNrPiBjYWxs
YmFjaykKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkgeworICAgICAgICBjYWxsYmFjay0+aW52YWxp
ZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdWludDY0X3QgY2FsbGJhY2tJ
RCA9IGNhbGxiYWNrLT5jYWxsYmFja0lEKCk7CisgICAgbV9nZXN0dXJlQ2FsbGJhY2tzLnNldChj
YWxsYmFja0lELCBjYWxsYmFjayk7CisgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpTZWxlY3RXaXRoVHdvVG91Y2hlcyhmcm9tLCB0bywgZ2VzdHVyZVR5cGUsIGdlc3R1cmVT
dGF0ZSwgY2FsbGJhY2tJRCksIG1fcGFnZUlEKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OmV4
dGVuZFNlbGVjdGlvbihXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCit7Cisg
ICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpFeHRlbmRTZWxlY3Rpb24oc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KGdyYW51bGFyaXR5KSksIG1fcGFnZUlEKTsKK30KKwordm9pZCBX
ZWJQYWdlUHJveHk6OmludGVycHJldFF1ZXVlZEtleUV2ZW50KGNvbnN0IEVkaXRvclN0YXRlJiwg
Ym9vbCYsIFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+JikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6aW50ZXJwcmV0S2V5RXZlbnQoY29u
c3QgRWRpdG9yU3RhdGUmIHN0YXRlLCBib29sIGlzQ2hhckV2ZW50LCBib29sJiBoYW5kbGVkKQor
eworICAgIG1fZWRpdG9yU3RhdGUgPSBzdGF0ZTsKKyAgICBoYW5kbGVkID0gbV9wYWdlQ2xpZW50
LT5pbnRlcnByZXRLZXlFdmVudChtX2tleUV2ZW50UXVldWUuZmlyc3QoKSwgaXNDaGFyRXZlbnQp
OworfQorCisvLyBDb21wbGV4IHRleHQgaW5wdXQgc3VwcG9ydCBmb3IgcGx1Zy1pbnMuCit2b2lk
IFdlYlBhZ2VQcm94eTo6c2VuZENvbXBsZXhUZXh0SW5wdXRUb1BsdWdpbih1aW50NjRfdCwgY29u
c3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlBhZ2VQ
cm94eTo6c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGJvb2wpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnJlZ2lzdGVyV2ViUHJvY2Vzc0FjY2Vz
c2liaWxpdHlUb2tlbihjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfSAgICAKKwordm9pZCBXZWJQYWdlUHJveHk6Om1ha2VGaXJzdFJlc3Bv
bmRlcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6
OnJlZ2lzdGVyVUlQcm9jZXNzQWNjZXNzaWJpbGl0eVRva2Vucyhjb25zdCBDb3JlSVBDOjpEYXRh
UmVmZXJlbmNlJiwgY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSYpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnBsdWdpbkZvY3VzT3JXaW5kb3dG
b2N1c0NoYW5nZWQodWludDY0X3QsIGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBXZWJQYWdlUHJveHk6OnNldFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZSh1aW50
NjRfdCwgdWludDY0X3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJQ
YWdlUHJveHk6OmV4ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9yKGNvbnN0IFN0cmluZyYsIGJv
b2wmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgV2ViUGFnZVByb3h5Ojpz
aG91bGREZWxheVdpbmRvd09yZGVyaW5nRm9yRXZlbnQoY29uc3QgV2ViS2l0OjpXZWJNb3VzZUV2
ZW50JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBXZWJQYWdlUHJveHk6OmFjY2VwdHNGaXJzdE1vdXNlKGludCwgY29uc3QgV2ViS2l0OjpX
ZWJNb3VzZUV2ZW50JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OmRpZEZpbmlzaFNjcm9sbGluZyhjb25zdCBXZWJD
b3JlOjpGbG9hdFBvaW50JiBjb250ZW50T2Zmc2V0KQoreworICAgIHByb2Nlc3MoKS0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6RGlkRmluaXNoU2Nyb2xsaW5nKGNvbnRlbnRPZmZzZXQpLCBtX3Bh
Z2VJRCk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaWRGaW5pc2hab29taW5nKGZsb2F0IG5l
d1NjYWxlKQoreworICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkRmlu
aXNoWm9vbWluZyhuZXdTY2FsZSksIG1fcGFnZUlEKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6
OnRhcEhpZ2hsaWdodEF0UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9zaXRp
b24sIHVpbnQ2NF90JiByZXF1ZXN0SUQpCit7CisgICAgc3RhdGljIHVpbnQ2NF90IHVuaXF1ZVJl
cXVlc3RJRCA9IDA7CisgICAgcmVxdWVzdElEID0gKyt1bmlxdWVSZXF1ZXN0SUQ7CisKKyAgICBw
cm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlRhcEhpZ2hsaWdodEF0UG9zaXRpb24o
cmVxdWVzdElELCBwb3NpdGlvbiksIG1fcGFnZUlEKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6
OmJsdXJBc3Npc3RlZE5vZGUoKQoreworICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6Qmx1ckFzc2lzdGVkTm9kZSgpLCBtX3BhZ2VJRCk7Cit9CisKK3ZvaWQgV2ViUGFnZVBy
b3h5OjptYWluRG9jdW1lbnREaWRSZWNlaXZlTW9iaWxlRG9jVHlwZSgpCit7CisgICAgbV9wYWdl
Q2xpZW50LT5tYWluRG9jdW1lbnREaWRSZWNlaXZlTW9iaWxlRG9jVHlwZSgpOworfQorCit2b2lk
IFdlYlBhZ2VQcm94eTo6ZGlkR2V0VGFwSGlnaGxpZ2h0R2VvbWV0cmllcyh1aW50NjRfdCByZXF1
ZXN0SUQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvciwgY29uc3QgVmVjdG9yPFdlYkNvcmU6
OkZsb2F0UXVhZD4mIGhpZ2hsaWdodGVkUXVhZHMsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHRv
cExlZnRSYWRpdXMsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHRvcFJpZ2h0UmFkaXVzLCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBib3R0b21MZWZ0UmFkaXVzLCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBib3R0b21SaWdodFJhZGl1cykKK3sKKyAgICBtX3BhZ2VDbGllbnQtPmRpZEdldFRhcEhp
Z2hsaWdodEdlb21ldHJpZXMocmVxdWVzdElELCBjb2xvciwgaGlnaGxpZ2h0ZWRRdWFkcywgdG9w
TGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0
UmFkaXVzKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OmRpZENoYW5nZVZpZXdwb3J0QXJndW1l
bnRzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJiB2aWV3cG9ydEFyZ3VtZW50cykK
K3sKKyAgICBtX3BhZ2VDbGllbnQtPmRpZENoYW5nZVZpZXdwb3J0QXJndW1lbnRzKHZpZXdwb3J0
QXJndW1lbnRzKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnN0YXJ0QXNzaXN0aW5nTm9kZShj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBib29sIGhhc05leHRGb2N1c2FibGUs
IGJvb2wgaGFzUHJldmlvdXNGb2N1c2FibGUpCit7CisgICAgbV9wYWdlQ2xpZW50LT5zdGFydEFz
c2lzdGluZ05vZGUoc2Nyb2xsUmVjdCwgaGFzTmV4dEZvY3VzYWJsZSwgaGFzUHJldmlvdXNGb2N1
c2FibGUpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6c3RvcEFzc2lzdGluZ05vZGUoKQorewor
ICAgIG1fcGFnZUNsaWVudC0+c3RvcEFzc2lzdGluZ05vZGUoKTsKK30KKwordm9pZCBXZWJQYWdl
UHJveHk6OmRpZFBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwKGNvbnN0IEF0dHJpYnV0ZWRTdHJpbmcm
LCBjb25zdCBEaWN0aW9uYXJ5UG9wdXBJbmZvJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIFdlYlBhZ2VQcm94eTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVyQW5kT3Blbldp
dGhOYXRpdmVBcHBsaWNhdGlvbihjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBD
b3JlSVBDOjpEYXRhUmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6c2F2ZVBERlRvVGVtcG9yYXJ5Rm9sZGVy
QW5kT3BlbldpdGhOYXRpdmVBcHBsaWNhdGlvblJhdyhjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmLCBjb25zdCB1aW50OF90KiwgdW5zaWduZWQgbG9uZywgY29uc3QgU3RyaW5nJikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6b3BlblBERkZyb21U
ZW1wb3JhcnlGb2xkZXJXaXRoTmF0aXZlQXBwbGljYXRpb24oY29uc3QgU3RyaW5nJikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ1Jvb3RMYXllcihQbGF0Zm9ybUxheWVyKiByb290TGF5ZXIpCit7CisgICAg
bV9wYWdlQ2xpZW50LT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKHJvb3RMYXll
cik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogVUlQcm9jZXNzL2lvcy9XZWJQ
cm9jZXNzUHJveHlJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVUlQcm9jZXNzL2lvcy9XZWJQcm9jZXNz
UHJveHlJT1MubW0JKHJldmlzaW9uIDApCisrKyBVSVByb2Nlc3MvaW9zL1dlYlByb2Nlc3NQcm94
eUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKKworI2ltcG9ydCA8
V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworYm9vbCBX
ZWJQcm9jZXNzUHJveHk6OmZ1bGxLZXlib2FyZEFjY2Vzc0VuYWJsZWQoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBzaG91bGRV
c2VYUEMoKQoreworICAgIGlmIChpZCB2YWx1ZSA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRV
c2VyRGVmYXVsdHNdIG9iamVjdEZvcktleTpAIldlYktpdDJVc2VYUENTZXJ2aWNlRm9yV2ViUHJv
Y2VzcyJdKQorICAgICAgICByZXR1cm4gW3ZhbHVlIGJvb2xWYWx1ZV07CisKKyNpZiBVU0UoWFBD
X1NFUlZJQ0VTKQorICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7Cisj
ZW5kaWYKK30KKwordm9pZCBXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0TGF1bmNoT3B0aW9u
cyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jaE9wdGlvbnMpCit7CisgICAg
Ly8gV2Ugd2FudCB0aGUgd2ViIHByb2Nlc3MgdG8gbWF0Y2ggdGhlIGFyY2hpdGVjdHVyZSBvZiB0
aGUgVUkgcHJvY2Vzcy4KKyAgICBsYXVuY2hPcHRpb25zLmFyY2hpdGVjdHVyZSA9IFByb2Nlc3NM
YXVuY2hlcjo6TGF1bmNoT3B0aW9uczo6TWF0Y2hDdXJyZW50QXJjaGl0ZWN0dXJlOworICAgIGxh
dW5jaE9wdGlvbnMuZXhlY3V0YWJsZUhlYXAgPSBmYWxzZTsKKworICAgIGxhdW5jaE9wdGlvbnMu
dXNlWFBDID0gc2hvdWxkVXNlWFBDKCk7Cit9CisKK2Jvb2wgV2ViUHJvY2Vzc1Byb3h5OjpwYWdl
SXNQcm9jZXNzU3VwcHJlc3NpYmxlKFdlYlBhZ2VQcm94eSogcGFnZSkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBXZWJQcm9jZXNzUHJveHk6
OmFsbFBhZ2VzQXJlUHJvY2Vzc1N1cHByZXNzaWJsZSgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojp1
cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBVSVByb2Nlc3MvbWFjL1RpbGVkQ29y
ZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBVSVByb2Nlc3MvbWFj
L1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHkuaAkocmV2aXNpb24gMTU5NjUxKQor
KysgVUlQcm9jZXNzL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNpZm5kZWYgVGlsZWRDb3JlQW5pbWF0aW9u
RHJhd2luZ0FyZWFQcm94eV9oCiAjZGVmaW5lIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVh
UHJveHlfaAogCisjaWYgIVBMQVRGT1JNKElPUykKKwogI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJv
eHkuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC02Nyw0ICs2OSw2IEBACiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdAogCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKwogI2VuZGlmIC8vIFRp
bGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHlfaApJbmRleDogVUlQcm9jZXNzL21hYy9U
aWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVByb3h5Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFVJUHJv
Y2Vzcy9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQcm94eS5tbQkocmV2aXNpb24g
MTU5NjUxKQorKysgVUlQcm9jZXNzL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYVBy
b3h5Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaW1wb3J0ICJjb25maWcu
aCIKICNpbXBvcnQgIlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHkuaCIKIAorI2lm
ICFQTEFURk9STShJT1MpCisKICNpbXBvcnQgIkNvbG9yU3BhY2VEYXRhLmgiCiAjaW1wb3J0ICJE
cmF3aW5nQXJlYU1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJEcmF3aW5nQXJlYVByb3h5TWVzc2FnZXMu
aCIKQEAgLTE0NywzICsxNDksNSBAQAogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vICFQTEFURk9STShJT1MpCkluZGV4OiBVSVByb2Nlc3MvbWFjL1dLRnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVUlQcm9jZXNzL21hYy9XS0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVyLm1tCShyZXZpc2lvbiAxNTk2NTEpCisrKyBVSVByb2Nlc3MvbWFj
L1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTI1LDcg
KzI1LDcgQEAKIAogI2ltcG9ydCAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9B
UEkpCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKSAmJiAhUExBVEZPUk0oSU9TKQogCiAjaW1w
b3J0ICJXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmgiCiAKSW5kZXg6IFVJUHJvY2Vzcy9t
YWMvV2ViQ29udGV4dE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBVSVByb2Nlc3MvbWFjL1dlYkNvbnRl
eHRNYWMubW0JKHJldmlzaW9uIDE1OTY1MSkKKysrIFVJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsOSBAQAogI2ltcG9ydCAiV2ViS2l0U3lz
dGVtSW50ZXJmYWNlLmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgi
CiAjaW1wb3J0ICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKKyNpZiAhUExBVEZPUk0oSU9TKQogI2lt
cG9ydCA8UXVhcnR6Q29yZS9DQVJlbW90ZUxheWVyU2VydmVyLmg+CisjZW5kaWYKICNpbXBvcnQg
PFdlYkNvcmUvQ29sb3IuaD4KICNpbXBvcnQgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgpAQCAtNDcsNyArNDksNyBAQAogI2VuZGlmCiAK
IAotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorI2lmIFBMQVRG
T1JNKElPUykgfHwgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCiAKICNp
ZiBfX2hhc19pbmNsdWRlKDxDRk5ldHdvcmsvQ0ZVUkxQcm90b2NvbFByaXYuaD4pCiAjaW5jbHVk
ZSA8Q0ZOZXR3b3JrL0NGVVJMUHJvdG9jb2xQcml2Lmg+CkBAIC02NSw3ICs2Nyw5IEBACiBOU1N0
cmluZyAqV2ViU3RvcmFnZURpcmVjdG9yeURlZmF1bHRzS2V5ID0gQCJXZWJLaXRMb2NhbFN0b3Jh
Z2VEYXRhYmFzZVBhdGhQcmVmZXJlbmNlS2V5IjsKIE5TU3RyaW5nICpXZWJLaXRLZXJuaW5nQW5k
TGlnYXR1cmVzRW5hYmxlZEJ5RGVmYXVsdERlZmF1bHRzS2V5ID0gQCJXZWJLaXRLZXJuaW5nQW5k
TGlnYXR1cmVzRW5hYmxlZEJ5RGVmYXVsdCI7CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogc3RhdGlj
IE5TU3RyaW5nICpXZWJLaXRBcHBsaWNhdGlvbkRpZENoYW5nZUFjY2Vzc2liaWxpdHlFbmhhbmNl
ZFVzZXJJbnRlcmZhY2VOb3RpZmljYXRpb24gPSBAIk5TQXBwbGljYXRpb25EaWRDaGFuZ2VBY2Nl
c3NpYmlsaXR5RW5oYW5jZWRVc2VySW50ZXJmYWNlTm90aWZpY2F0aW9uIjsKKyNlbmRpZgogCiAv
LyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzkxMzg4MTc+IC0gQWZ0ZXIgdGhpcyAiYmFja3dhcmRz
IGNvbXBhdGliaWxpdHkiIHJhZGFyIGlzIHJlbW92ZWQsIHRoaXMgY29kZSBzaG91bGQgYmUgcmVt
b3ZlZCB0byBvbmx5IHJldHVybiBhbiBlbXB0eSBTdHJpbmcuCiBOU1N0cmluZyAqV2ViSWNvbkRh
dGFiYXNlRGlyZWN0b3J5RGVmYXVsdHNLZXkgPSBAIldlYkljb25EYXRhYmFzZURpcmVjdG9yeURl
ZmF1bHRzS2V5IjsKQEAgLTk0LDcgKzk4LDcgQEAKICAgICBkaWRSZWdpc3RlciA9IHRydWU7CiAg
ICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqcmVnaXN0cmF0aW9uRGljdGlvbmFyeSA9IFtOU011dGFi
bGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOwogICAgIAotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPj0gMTA5MAorI2lmIFBMQVRGT1JNKElPUykgfHwgX19NQUNfT1NfWF9WRVJT
SU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCiAgICAgW3JlZ2lzdHJhdGlvbkRpY3Rpb25hcnkgc2V0
T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdIGZvcktleTpXZWJLaXRLZXJuaW5n
QW5kTGlnYXR1cmVzRW5hYmxlZEJ5RGVmYXVsdERlZmF1bHRzS2V5XTsKICNlbmRpZgogCkBAIC0x
MTMsNyArMTE3LDcgQEAKICNlbmRpZgogfQogCi0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9S
RVFVSVJFRCA+PSAxMDkwCisjaWYgIVBMQVRGT1JNKElPUykgJiYgX19NQUNfT1NfWF9WRVJTSU9O
X01JTl9SRVFVSVJFRCA+PSAxMDkwCiBzdGF0aWMgdm9pZCBhcHBsaWNhdGlvbk9jY2x1c2lvblN0
YXRlQ2hhbmdlZCgpCiB7CiAgICAgY29uc3QgVmVjdG9yPFdlYkNvbnRleHQqPiYgY29udGV4dHMg
PSBXZWJDb250ZXh0OjphbGxDb250ZXh0cygpOwpAQCAtMTc1LDcgKzE3OSw3IEBACiAKIHN0YXRp
YyB2b2lkIHJlZ2lzdGVyT2NjbHVzaW9uTm90aWZpY2F0aW9uSGFuZGxlcnMoKQogewotI2lmIF9f
TUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorI2lmICFQTEFURk9STShJT1Mp
ICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAogICAgIGZvciAoY29u
c3QgT2NjbHVzaW9uTm90aWZpY2F0aW9uSGFuZGxlciYgb2NjbHVzaW9uTm90aWZpY2F0aW9uSGFu
ZGxlciA6IG9jY2x1c2lvbk5vdGlmaWNhdGlvbkhhbmRsZXJzKSB7CiAgICAgICAgIGJvb2wgcmVz
dWx0ID0gV0tSZWdpc3Rlck9jY2x1c2lvbk5vdGlmaWNhdGlvbkhhbmRsZXIob2NjbHVzaW9uTm90
aWZpY2F0aW9uSGFuZGxlci5ub3RpZmljYXRpb25UeXBlLCBvY2NsdXNpb25Ob3RpZmljYXRpb25I
YW5kbGVyLmhhbmRsZXIpOwogICAgICAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKQEAgLTE4Niw3
ICsxOTAsNyBAQAogCiBzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyT2NjbHVzaW9uTm90aWZpY2F0aW9u
SGFuZGxlcnMoKQogewotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5
MAorI2lmICFQTEFURk9STShJT1MpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQg
Pj0gMTA5MAogICAgIGZvciAoY29uc3QgT2NjbHVzaW9uTm90aWZpY2F0aW9uSGFuZGxlciYgb2Nj
bHVzaW9uTm90aWZpY2F0aW9uSGFuZGxlciA6IG9jY2x1c2lvbk5vdGlmaWNhdGlvbkhhbmRsZXJz
KSB7CiAgICAgICAgIGJvb2wgcmVzdWx0ID0gV0tVbnJlZ2lzdGVyT2NjbHVzaW9uTm90aWZpY2F0
aW9uSGFuZGxlcihvY2NsdXNpb25Ob3RpZmljYXRpb25IYW5kbGVyLm5vdGlmaWNhdGlvblR5cGUs
IG9jY2x1c2lvbk5vdGlmaWNhdGlvbkhhbmRsZXIuaGFuZGxlcik7CiAgICAgICAgIFVOVVNFRF9Q
QVJBTShyZXN1bHQpOwpAQCAtMjc0LDIyICsyNzgsMjggQEAKIHsKICAgICBwYXJhbWV0ZXJzLnBy
ZXNlbnRlckFwcGxpY2F0aW9uUGlkID0gZ2V0cGlkKCk7CiAKKyNpZiBQTEFURk9STShNQUMpICYm
ICFQTEFURk9STShJT1MpCiAgICAgcGFyYW1ldGVycy5hY2Nlc3NpYmlsaXR5RW5oYW5jZWRVc2Vy
SW50ZXJmYWNlRW5hYmxlZCA9IFtbTlNBcHAgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOkAi
QVhFbmhhbmNlZFVzZXJJbnRlcmZhY2UiXSBib29sVmFsdWVdOworI2Vsc2UKKyAgICBwYXJhbWV0
ZXJzLmFjY2Vzc2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VFbmFibGVkID0gZmFsc2U7Cisj
ZW5kaWYKIAogICAgIE5TVVJMQ2FjaGUgKnVybENhY2hlID0gW05TVVJMQ2FjaGUgc2hhcmVkVVJM
Q2FjaGVdOwogICAgIHBhcmFtZXRlcnMubnNVUkxDYWNoZU1lbW9yeUNhcGFjaXR5ID0gW3VybENh
Y2hlIG1lbW9yeUNhcGFjaXR5XTsKICAgICBwYXJhbWV0ZXJzLm5zVVJMQ2FjaGVEaXNrQ2FwYWNp
dHkgPSBbdXJsQ2FjaGUgZGlza0NhcGFjaXR5XTsKIAotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPj0gMTA5MAorI2lmICFQTEFURk9STShJT1MpICYmIF9fTUFDX09TX1hfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAogICAgIHBhcmFtZXRlcnMuc2hvdWxkRm9yY2VTY3Jl
ZW5Gb250U3Vic3RpdHV0aW9uID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0
c10gYm9vbEZvcktleTpAIk5TRm9udERlZmF1bHRTY3JlZW5Gb250U3Vic3RpdHV0aW9uRW5hYmxl
ZCJdOwogI2VuZGlmCiAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVLZXJuaW5nQW5kTGlnYXR1
cmVzQnlEZWZhdWx0ID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9v
bEZvcktleTpXZWJLaXRLZXJuaW5nQW5kTGlnYXR1cmVzRW5hYmxlZEJ5RGVmYXVsdERlZmF1bHRz
S2V5XTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgSEFWRShIT1NURURf
Q09SRV9BTklNQVRJT04pCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBtYWNoX3BvcnRfdCByZW5k
ZXJTZXJ2ZXJQb3J0ID0gW1tDQVJlbW90ZUxheWVyU2VydmVyIHNoYXJlZFNlcnZlcl0gc2VydmVy
UG9ydF07CiAgICAgaWYgKHJlbmRlclNlcnZlclBvcnQgIT0gTUFDSF9QT1JUX05VTEwpCiAgICAg
ICAgIHBhcmFtZXRlcnMuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ1BvcnQgPSBDb3JlSVBDOjpNYWNo
UG9ydChyZW5kZXJTZXJ2ZXJQb3J0LCBNQUNIX01TR19UWVBFX0NPUFlfU0VORCk7CiAjZW5kaWYK
KyNlbmRpZgogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJlYWxseSBiZSBjb25maWd1cmFi
bGU7IHdlIHNob3VsZG4ndCBqdXN0IGJsaW5kbHkgYWxsb3cgcmVhZCBhY2Nlc3MgdG8gdGhlIFVJ
IHByb2Nlc3MgYnVuZGxlLgogICAgIHBhcmFtZXRlcnMudWlQcm9jZXNzQnVuZGxlUmVzb3VyY2VQ
YXRoID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSByZXNvdXJjZVBhdGhdOwpAQCAtMzAwLDggKzMx
MCwxMCBAQAogI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCiAgICAgaWYgKCFtX3VzZXNOZXR3
b3JrUHJvY2VzcykgewogI2VuZGlmCisjaWYgRU5BQkxFKENVU1RPTV9QUk9UT0NPTFMpCiAgICAg
ICAgIGZvciAoTlNTdHJpbmcgKnNjaGVtZSBpbiBbV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVy
IGN1c3RvbVNjaGVtZXNdKQogICAgICAgICAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0
ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBlbmQoc2NoZW1lKTsKKyNlbmRpZgogI2lmIEVOQUJM
RShORVRXT1JLX1BST0NFU1MpCiAgICAgfQogI2VuZGlmCkBAIC01NTgsNiArNTcwLDcgQEAKIAog
dm9pZCBXZWJDb250ZXh0OjpyZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygpCiB7CisjaWYg
IVBMQVRGT1JNKElPUykKICAgICBtX2N1c3RvbVNjaGVtZVJlZ2lzdGVyZWRPYnNlcnZlciA9IFtb
TlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXJGb3JOYW1lOldl
YktpdDo6U2NoZW1lRm9yQ3VzdG9tUHJvdG9jb2xSZWdpc3RlcmVkTm90aWZpY2F0aW9uTmFtZSBv
YmplY3Q6bmlsIHF1ZXVlOltOU09wZXJhdGlvblF1ZXVlIGN1cnJlbnRRdWV1ZV0gdXNpbmdCbG9j
azpeKE5TTm90aWZpY2F0aW9uICpub3RpZmljYXRpb24pIHsKICAgICAgICAgTlNTdHJpbmcgKnNj
aGVtZSA9IFtub3RpZmljYXRpb24gb2JqZWN0XTsKICAgICAgICAgQVNTRVJUKFtzY2hlbWUgaXNL
aW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSk7CkBAIC01OTYsMTAgKzYwOSwxMiBAQAogICAg
ICAgICB0ZXh0Q2hlY2tlclN0YXRlQ2hhbmdlZCgpOwogICAgIH1dOwogI2VuZGlmCisjZW5kaWYg
Ly8gIVBMQVRGT1JNKElPUykKIH0KIAogdm9pZCBXZWJDb250ZXh0Ojp1bnJlZ2lzdGVyTm90aWZp
Y2F0aW9uT2JzZXJ2ZXJzKCkKIHsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIFtbTlNOb3RpZmlj
YXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9jdXN0b21TY2hlbWVS
ZWdpc3RlcmVkT2JzZXJ2ZXIuZ2V0KCldOwogICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVm
YXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9jdXN0b21TY2hlbWVVbnJlZ2lzdGVyZWRPYnNl
cnZlci5nZXQoKV07CiAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBy
ZW1vdmVPYnNlcnZlcjptX2VuaGFuY2VkQWNjZXNzaWJpbGl0eU9ic2VydmVyLmdldCgpXTsKQEAg
LTYxMCw5ICs2MjUsMTAgQEAKICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50
ZXJdIHJlbW92ZU9ic2VydmVyOm1fYXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25Ob3RpZmljYXRp
b25PYnNlcnZlci5nZXQoKV07CiAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2Vu
dGVyXSByZW1vdmVPYnNlcnZlcjptX2F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25Ob3RpZmljYXRp
b25PYnNlcnZlci5nZXQoKV07CiAjZW5kaWYKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogfQog
Ci0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCisjaWYgUExBVEZP
Uk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKIHN0YXRp
YyBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHByaXZhdGVCcm93c2luZ1Nlc3Npb24oKQogewogICAg
IHN0YXRpYyBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmIHNlc3Npb247CkBAIC02MjksNyArNjQ1LDcg
QEAKIAogYm9vbCBXZWJDb250ZXh0Ojppc1VSTEtub3duSFNUU0hvc3QoY29uc3QgU3RyaW5nJiB1
cmxTdHJpbmcsIGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkgY29uc3QKIHsKLSNpZiBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKKyNpZiBQTEFURk9STShJT1MpIHx8
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAogICAgIFJldGFpblB0cjxD
RlVSTFJlZj4gdXJsID0gVVJMKFVSTCgpLCB1cmxTdHJpbmcpLmNyZWF0ZUNGVVJMKCk7CiAKICAg
ICByZXR1cm4gX0NGTmV0d29ya0lzS25vd25IU1RTSG9zdFdpdGhTZXNzaW9uKHVybC5nZXQoKSwg
cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCA/IHByaXZhdGVCcm93c2luZ1Nlc3Npb24oKSA6IG51bGxw
dHIpOwpAQCAtNjQwLDcgKzY1Niw3IEBACiAKIHZvaWQgV2ViQ29udGV4dDo6cmVzZXRIU1RTSG9z
dHMoKQogewotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorI2lm
IFBMQVRGT1JNKElPUykgfHwgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkw
CiAgICAgX0NGTmV0d29ya1Jlc2V0SFNUU0hvc3RzV2l0aFNlc3Npb24obnVsbHB0cik7CiAgICAg
X0NGTmV0d29ya1Jlc2V0SFNUU0hvc3RzV2l0aFNlc3Npb24ocHJpdmF0ZUJyb3dzaW5nU2Vzc2lv
bigpKTsKICNlbmRpZgpJbmRleDogVUlQcm9jZXNzL21hYy9XZWJGdWxsU2NyZWVuTWFuYWdlclBy
b3h5TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFVJUHJvY2Vzcy9tYWMvV2ViRnVsbFNjcmVlbk1hbmFn
ZXJQcm94eU1hYy5tbQkocmV2aXNpb24gMTU5NjUxKQorKysgVUlQcm9jZXNzL21hYy9XZWJGdWxs
U2NyZWVuTWFuYWdlclByb3h5TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBA
CiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHku
aCIKIAotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9B
UEkpICYmICFQTEFURk9STShJT1MpCiAKICNpbXBvcnQgIkxheWVyVHJlZUNvbnRleHQuaCIKICNp
bXBvcnQgIldLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaCIK
</data>
<flag name="review"
          id="240915"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217731</attachid>
            <date>2013-11-22 16:46:20 -0800</date>
            <delta_ts>2013-11-22 17:56:37 -0800</delta_ts>
            <desc>Patch3</desc>
            <filename>ios-wk2-part3.txt</filename>
            <type>text/plain</type>
            <size>155665</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE1OTcy
MSkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwNSBAQAorMjAxMy0x
MS0yMiAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgorCisgICAgICAgIFVwc3Ry
ZWFtIGlPUyBXZWJLaXQyIHRvIE9wZW5Tb3VyY2UgKHBhcnQgMykuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ4MDMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvRW50cnlQb2ludC9t
YWMvTGVnYWN5UHJvY2Vzcy9XZWJDb250ZW50UHJvY2Vzc01haW4ubW06CisgICAgICAgIChXZWJL
aXQ6OldlYkNvbnRlbnRQcm9jZXNzTWFpbkRlbGVnYXRlOjpkb1ByZUluaXRpYWxpemF0aW9uV29y
ayk6CisgICAgICAgICogV2ViUHJvY2Vzcy9FbnRyeVBvaW50L21hYy9YUENTZXJ2aWNlL1dlYkNv
bnRlbnRTZXJ2aWNlL0luZm8taU9TLnBsaXN0OiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L0VudHJ5UG9pbnQvbWFjL1hQQ1NlcnZpY2UvV2ViQ29udGVudFNlcnZpY2VFbnRyeVBvaW50Lm1t
OgorICAgICAgICAoV2ViQ29udGVudFNlcnZpY2VJbml0aWFsaXplcik6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9HZW9sb2NhdGlvbi9XZWJHZW9sb2NhdGlvbk1hbmFnZXIuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJHZW9sb2NhdGlvbk1hbmFnZXI6OnJlc2V0UGVybWlzc2lvbnMpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvR2VvbG9jYXRpb24vV2ViR2VvbG9jYXRpb25NYW5hZ2VyLmg6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9XZWJHZW9sb2NhdGlvbk1hbmFnZXIubWVzc2Fn
ZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRs
ZVBhZ2UuY3BwOgorICAgICAgICAoV0tCdW5kbGVQYWdlU2V0VG9wT3ZlcmhhbmdJbWFnZSk6Cisg
ICAgICAgIChXS0J1bmRsZVBhZ2VTZXRCb3R0b21PdmVyaGFuZ0ltYWdlKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5oOgorICAgICAgICAq
IFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9tYWMvV0tOUEFQSVBsdWdJbkNvbnRhaW5lci5t
bToKKyAgICAgICAgKC1bV0tOUEFQSVBsdWdJbkNvbnRhaW5lciBvcGVuUGx1Z0luUHJlZmVyZW5j
ZVBhbmVdKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1NpbXBsZVBERlBsdWdp
bi5oOiBSZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvU2ltcGxlUERG
UGx1Z2luLm1tOiBSZW1vdmVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5W
aWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6ZGlkRmFpbFRvSW5pdGlhbGl6
ZVBsdWdpbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJBbHRlcm5h
dGl2ZVRleHRDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6Y29u
dGVudHNTaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6dW5h
dmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21l
Q2xpZW50OjpkaXNwYXRjaFZpZXdwb3J0UHJvcGVydGllc0RpZENoYW5nZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6ZGlkQWRkSGVhZGVyTGF5ZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDaHJvbWVDbGllbnQ6OmRpZEFkZEZvb3RlckxheWVyKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorICAgICAgICAoV2ViS2l0
OjpXZWJDaHJvbWVDbGllbnQ6OmFsbG93ZWRDb21wb3NpdGluZ1RyaWdnZXJzKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRhdGFiYXNlTWFuYWdlci5oOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2l0aW9uVG9Db21taXR0
ZWRGb3JOZXdQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNy
ZWF0ZUphdmFBcHBsZXRXaWRnZXQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L2lvczogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9p
b3MvV2ViQ2hyb21lQ2xpZW50SU9TLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViQ2hy
b21lQ2xpZW50OjpkaWRQcmV2ZW50RGVmYXVsdEZvckV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ2hyb21lQ2xpZW50OjplbGVtZW50RGlkRm9jdXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
aHJvbWVDbGllbnQ6OmVsZW1lbnREaWRCbHVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21l
Q2xpZW50OjpkaWRSZWNlaXZlTW9iaWxlRG9jVHlwZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNo
cm9tZUNsaWVudDo6c2V0TmVlZHNTY3JvbGxOb3RpZmljYXRpb25zKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ2hyb21lQ2xpZW50OjpvYnNlcnZlZENvbnRlbnRDaGFuZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDaHJvbWVDbGllbnQ6OmNsZWFyQ29udGVudENoYW5nZU9ic2VydmVycyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6bm90aWZ5UmV2ZWFsZWRTZWxlY3Rpb25CeVNj
cm9sbGluZ0ZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50Ojppc1N0b3Bw
aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpkaWRMYXlvdXQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmRpZFN0YXJ0T3ZlcmZsb3dTY3JvbGwpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmRpZEVuZE92ZXJmbG93U2Nyb2xsKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpzdXBwcmVzc0Zvcm1Ob3RpZmljYXRp
b25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpyZXN0b3JlRm9ybU5vdGlm
aWNhdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmFkZE9yVXBkYXRl
U2Nyb2xsaW5nTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnJlbW92
ZVNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50Ojp3ZWJB
cHBPcmllbnRhdGlvbnNVcGRhdGVkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L2lvcy9XZWJEYXRhYmFzZU1hbmFnZXJJT1MubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJEYXRhYmFzZU1hbmFnZXI6OmRpc3BhdGNoRGlkQWRkTmV3T3JpZ2luKToKKyAgICAgICAg
KFdlYktpdDo6V2ViRGF0YWJhc2VNYW5hZ2VyOjpkaXNwYXRjaERpZERlbGV0ZURhdGFiYXNlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViRGF0YWJhc2VNYW5hZ2VyOjpkaXNwYXRjaERpZERlbGV0ZURh
dGFiYXNlT3JpZ2luKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2lvcy9X
ZWJFZGl0b3JDbGllbnRJT1MubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JD
bGllbnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JD
bGllbnQ6OmhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bik6CisgICAgICAgIChXZWJLaXQ6OldlYkVk
aXRvckNsaWVudDo6dXNlclZpc2libGVTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0
b3JDbGllbnQ6OmNhbm9uaWNhbGl6ZVVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNs
aWVudDo6Y2Fub25pY2FsaXplVVJMU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9y
Q2xpZW50Ojpkb2N1bWVudEZyYWdtZW50RnJvbUF0dHJpYnV0ZWRTdHJpbmcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnNldEluc2VydGlvblBhc3RlYm9hcmQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnN1cHByZXNzU2VsZWN0aW9uTm90aWZpY2F0aW9u
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6cmVzdG9yZVNlbGVjdGlvbk5v
dGlmaWNhdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnN0YXJ0RGVs
YXlpbmdBbmRDb2FsZXNjaW5nQ29udGVudENoYW5nZU5vdGlmaWNhdGlvbnMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnN0b3BEZWxheWluZ0FuZENvYWxlc2NpbmdDb250ZW50
Q2hhbmdlTm90aWZpY2F0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6
d3JpdGVEYXRhVG9QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50
OjpzdXBwb3J0ZWRQYXN0ZWJvYXJkVHlwZXNGb3JDdXJyZW50U2VsZWN0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpyZWFkRGF0YUZyb21QYXN0ZWJvYXJkKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpoYXNSaWNobHlFZGl0YWJsZVNlbGVjdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6Z2V0UGFzdGVib2FyZEl0ZW1zQ291
bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OmRvY3VtZW50RnJhZ21lbnRG
cm9tRGVsZWdhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnBlcmZvcm1z
VHdvU3RlcFBhc3RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpwYXN0ZWJv
YXJkQ2hhbmdlQ291bnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvaW9z
L1dlYkZyYW1lTG9hZGVyQ2xpZW50SU9TLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OmRpZFJlc3RvcmVGcmFtZUhpZXJhcmNoeUZvckNhY2hlZEZyYW1l
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmZvcmNlTGF5b3V0V2l0
aG91dFJlY2FsY3VsYXRpbmdTdHlsZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUxvYWRl
ckNsaWVudDo6Y29ubmVjdGlvblByb3BlcnRpZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJTeXN0ZW1JbnRlcmZhY2UubW06CisgICAg
ICAgIChJbml0V2ViQ29yZVN5c3RlbUludGVyZmFjZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL0RyYXdpbmdBcmVhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWE6OmNy
ZWF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFBy
b3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
fldlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjplZGl0b3JTdGF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldERldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6bW91c2VFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6Om1v
dXNlRXZlbnRTeW5jRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmJlZ2lu
UHJpbnRpbmcpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL2lvczogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL2lvcy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYUlPUy5oOiBBZGRlZC4KKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVh
SU9TLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2lu
Z0FyZWFJT1M6On5UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYUlPUyk6CisgICAgICAgIChX
ZWJLaXQ6OlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhSU9TOjpUaWxlZENvcmVBbmltYXRp
b25EcmF3aW5nQXJlYUlPUyk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQ29yZUFuaW1hdGlvbkRy
YXdpbmdBcmVhSU9TOjpzZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZENv
cmVBbmltYXRpb25EcmF3aW5nQXJlYUlPUzo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KToKKyAgICAg
ICAgKFdlYktpdDo6VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFJT1M6OnNjcm9sbCk6Cisg
ICAgICAgIChXZWJLaXQ6OlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhSU9TOjpzZXRSb290
Q29tcG9zaXRpbmdMYXllcik6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQ29yZUFuaW1hdGlvbkRy
YXdpbmdBcmVhSU9TOjpzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCk6CisgICAgICAgIChX
ZWJLaXQ6OlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhSU9TOjpzaG91bGRVc2VUaWxlZEJh
Y2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYUlP
Uzo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQ29yZUFu
aW1hdGlvbkRyYXdpbmdBcmVhSU9TOjpub3RpZnlGbHVzaFJlcXVpcmVkKToKKyAgICAgICAgKFdl
YktpdDo6VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFJT1M6OnBhaW50Q29udGVudHMpOgor
ICAgICAgICAoV2ViS2l0OjpUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYUlPUzo6bWluaW11
bURvY3VtZW50U2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZENvcmVBbmltYXRpb25EcmF3
aW5nQXJlYUlPUzo6YWxsb3dDb21wb3NpdGluZ0xheWVyVmlzdWFsRGVncmFkYXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYUlPUzo6Zmx1c2hMYXll
cnMpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYUlPUzo6
dXBkYXRlR2VvbWV0cnkpOgorICAgICAgICAoV2ViS2l0OjpUaWxlZENvcmVBbmltYXRpb25EcmF3
aW5nQXJlYUlPUzo6c2V0RGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9pb3MvV2ViQmFja0ZvcndhcmRMaXN0UHJveHlJT1MubW06IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6Y3VycmVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjpzZXRDdXJyZW50KToKKyAgICAgICAgKFdl
YktpdDo6V2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OmNsZWFyQWxsUGFnZUNhY2hlcyk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6cGxhdGZvcm1QcmVmZXJlbmNlc0RpZENoYW5nZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OmV4ZWN1dGVLZXlwcmVzc0NvbW1hbmRzSW50ZXJuYWwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlOjpoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OnNlbmRDb21wbGV4VGV4dElucHV0VG9QbHVnaW4pOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlOjpzZXRDb21wb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OmNvbmZpcm1Db21wb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNhbmNl
bENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Y29udmVydFRvUmFuZ2UpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6aW5zZXJ0RGljdGF0ZWRUZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0TWFy
a2VkUmFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRTZWxlY3RlZFJhbmdlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0QXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5n
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNoYXJhY3RlckluZGV4Rm9yUG9pbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmV4ZWN1dGVLZXlwcmVzc0NvbW1hbmRzKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxl
Y3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1
cEZvclJhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybU5vbkVkaXRpbmdC
ZWhhdmlvckZvclNlbGVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURl
ZmF1bHRCZWhhdmlvckZvcktleUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVn
aXN0ZXJVSVByb2Nlc3NBY2Nlc3NpYmlsaXR5VG9rZW5zKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6Z2V0U3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OmdldERhdGFTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6YWNjZXNzaWJpbGl0eVJlbW90ZU9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OnBsYXRmb3JtSGFzTG9jYWxEYXRhRm9yVVJMKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6Y2FjaGVkU3VnZ2VzdGVkRmlsZW5hbWVGb3JVUkwpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpjYWNoZWRSZXNwb25zZU1JTUVUeXBlRm9yVVJMKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6Y2FjaGVkUmVzcG9uc2VEYXRhRm9yVVJMKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6cGxhdGZvcm1DYW5IYW5kbGVSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6c2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0V2ZW50KToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6YWNjZXB0c0ZpcnN0TW91c2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpz
ZXRMYXllckhvc3RpbmdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y29tcHV0ZVBh
Z2VzRm9yUHJpbnRpbmdQREZEb2N1bWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRy
YXdQYWdlc1RvUERGRnJvbVBERkRvY3VtZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aGFu
ZGxlVGFwKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dGFwSGlnaGxpZ2h0QXRQb3NpdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmJsdXJBc3Npc3RlZE5vZGUpOgorICAgICAg
ICAoV2ViS2l0Ojppbm5lckZyYW1lUXVhZCk6CisgICAgICAgIChXZWJLaXQ6OmNvbnN0cmFpblBv
aW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2VsZWN0V2l0aEdlc3R1cmUpOgorICAg
ICAgICAoV2ViS2l0OjpyYW5nZUZvclBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6cmFuZ2VB
dFdvcmRCb3VuZGFyeUZvclBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dXBk
YXRlU2VsZWN0aW9uV2l0aFRvdWNoZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZWxl
Y3RXaXRoVHdvVG91Y2hlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmV4dGVuZFNlbGVj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlcXVlc3RBdXRvY29ycmVjdGlvbkRh
dGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjphcHBseUF1dG9jb3JyZWN0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZWxlbWVudERpZEZvY3VzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6ZWxlbWVudERpZEJsdXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpk
aWRGaW5pc2hTY3JvbGxpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkaWRGaW5pc2ha
b29taW5nKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1h
dGlvbkRyYXdpbmdBcmVhLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxl
ZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbToKKyAgICAgICAgKFdlYktpdDo6VGlsZWRDb3Jl
QW5pbWF0aW9uRHJhd2luZ0FyZWE6OnVwZGF0ZVByZWZlcmVuY2VzKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpyZXNl
dEFsbEdlb2xvY2F0aW9uUGVybWlzc2lvbnMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJv
Y2Vzcy5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvaW9zOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL2lvcy9XZWJQcm9jZXNzSU9TLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
UHJvY2Vzczo6aW5pdGlhbGl6ZVByb2Nlc3NOYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzczo6aW5pdGlhbGl6ZVNhbmRib3gpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpw
bGF0Zm9ybVNldENhY2hlTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpwbGF0
Zm9ybUNsZWFyUmVzb3VyY2VDYWNoZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpw
bGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
czo6cGxhdGZvcm1Jbml0aWFsaXplUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3M6OnBsYXRmb3JtVGVybWluYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6dXBk
YXRlQWN0aXZlUGFnZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NNYWMu
bW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OmluaXRpYWxpemVTYW5kYm94KToKKwog
MjAxMy0xMS0yMiAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbV0syXSBBbm90aGVyIGJ1aWxkIGZpeCBmb3IgTmV0d29ya1Byb2Nlc3Mgb24gaU9TCklu
ZGV4OiBXZWJQcm9jZXNzL0VudHJ5UG9pbnQvbWFjL0xlZ2FjeVByb2Nlc3MvV2ViQ29udGVudFBy
b2Nlc3NNYWluLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYlByb2Nlc3MvRW50cnlQb2ludC9tYWMvTGVn
YWN5UHJvY2Vzcy9XZWJDb250ZW50UHJvY2Vzc01haW4ubW0JKHJldmlzaW9uIDE1OTY1MSkKKysr
IFdlYlByb2Nlc3MvRW50cnlQb2ludC9tYWMvTGVnYWN5UHJvY2Vzcy9XZWJDb250ZW50UHJvY2Vz
c01haW4ubW0JKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDExIEBACiAjaW1wb3J0IDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAorI2lmIFBM
QVRGT1JNKElPUykKKyNpbXBvcnQgPEdyYXBoaWNzU2VydmljZXMvR3JhcGhpY3NTZXJ2aWNlcy5o
PgorI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVGhyZWFkU3lzdGVtSW50ZXJmYWNlLmg+CisjZW5k
aWYgLy8gUExBVEZPUk0oSU9TKQorCiAjaWYgVVNFKEFQUEtJVCkKIEBpbnRlcmZhY2UgTlNBcHBs
aWNhdGlvbiAoV2ViTlNBcHBsaWNhdGlvbkRldGFpbHMpCiAtKHZvaWQpX2luc3RhbGxBdXRvcmVs
ZWFzZVBvb2xzT25DdXJyZW50VGhyZWFkSWZOZWNlc3Nhcnk7CkBAIC03Myw2ICs3OCwxMSBAQAog
ICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHdoZW4gPHJkYXI6Ly9wcm9ibGVtLzg5Mjk0MjY+IGlz
IGZpeGVkLgogICAgICAgICBbTlNBcHAgX2luc3RhbGxBdXRvcmVsZWFzZVBvb2xzT25DdXJyZW50
VGhyZWFkSWZOZWNlc3NhcnldOwogI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAg
IEdTSW5pdGlhbGl6ZSgpOworICAgICAgICBJbml0V2ViQ29yZVRocmVhZFN5c3RlbUludGVyZmFj
ZSgpOworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKICAgICB9CiAKICAgICB2aXJ0dWFsIGJvb2wg
Z2V0Q29ubmVjdGlvbklkZW50aWZpZXIoQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciYg
aWRlbnRpZmllcikKQEAgLTE2Nyw4ICsxNzcsMTIgQEAKIAogICAgIHZpcnR1YWwgdm9pZCBzdGFy
dFJ1bkxvb3AoKSBPVkVSUklERQogICAgIHsKKyNpZiBVU0UoQVBQS0lUKQogICAgICAgICBBU1NF
UlQoTlNBcHApOwogICAgICAgICBbTlNBcHAgcnVuXTsKKyNlbHNlCisgICAgICAgIFJ1bkxvb3A6
OnJ1bigpOworI2VuZGlmCiAgICAgfQogfTsKIApJbmRleDogV2ViUHJvY2Vzcy9FbnRyeVBvaW50
L21hYy9YUENTZXJ2aWNlL1dlYkNvbnRlbnRTZXJ2aWNlL0luZm8taU9TLnBsaXN0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYlByb2Nlc3MvRW50cnlQb2ludC9tYWMvWFBDU2VydmljZS9XZWJDb250ZW50U2Vy
dmljZS9JbmZvLWlPUy5wbGlzdAkocmV2aXNpb24gMCkKKysrIFdlYlByb2Nlc3MvRW50cnlQb2lu
dC9tYWMvWFBDU2VydmljZS9XZWJDb250ZW50U2VydmljZS9JbmZvLWlPUy5wbGlzdAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJV
VEYtOCI/PgorPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAv
L0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Cis8
cGxpc3QgdmVyc2lvbj0iMS4wIj4KKzxkaWN0PgorCTxrZXk+Q0ZCdW5kbGVHZXRJbmZvU3RyaW5n
PC9rZXk+CisJPHN0cmluZz4ke0JVTkRMRV9WRVJTSU9OfSwgQ29weXJpZ2h0IDIwMDMtMjAxMyBB
cHBsZSBJbmMuPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZURldmVsb3BtZW50UmVnaW9uPC9rZXk+
CisJPHN0cmluZz5FbmdsaXNoPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZUV4ZWN1dGFibGU8L2tl
eT4KKwk8c3RyaW5nPiR7RVhFQ1VUQUJMRV9OQU1FfTwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVJ
ZGVudGlmaWVyPC9rZXk+CisJPHN0cmluZz5jb20uYXBwbGUuV2ViS2l0LldlYkNvbnRlbnQ8L3N0
cmluZz4KKwk8a2V5PkNGQnVuZGxlSW5mb0RpY3Rpb25hcnlWZXJzaW9uPC9rZXk+CisJPHN0cmlu
Zz42LjA8L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlTmFtZTwva2V5PgorCTxzdHJpbmc+JHtQUk9E
VUNUX05BTUV9PC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZVBhY2thZ2VUeXBlPC9rZXk+CisJPHN0
cmluZz5YUEMhPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZzwva2V5
PgorCTxzdHJpbmc+JHtTSE9SVF9WRVJTSU9OX1NUUklOR308L3N0cmluZz4KKwk8a2V5PkNGQnVu
ZGxlU2lnbmF0dXJlPC9rZXk+CisJPHN0cmluZz4/Pz8/PC9zdHJpbmc+CisJPGtleT5DRkJ1bmRs
ZVZlcnNpb248L2tleT4KKwk8c3RyaW5nPiR7QlVORExFX1ZFUlNJT059PC9zdHJpbmc+CisJPGtl
eT5MU0ZpbGVRdWFyYW50aW5lRW5hYmxlZDwva2V5PgorCTx0cnVlLz4KKwk8a2V5PldlYktpdEVu
dHJ5UG9pbnQ8L2tleT4KKwk8c3RyaW5nPldlYkNvbnRlbnRTZXJ2aWNlSW5pdGlhbGl6ZXI8L3N0
cmluZz4KKwk8a2V5PlhQQ1NlcnZpY2U8L2tleT4KKwk8ZGljdD4KKwkJPGtleT5Kb2luRXhpc3Rp
bmdTZXNzaW9uPC9rZXk+CisJCTx0cnVlLz4KKwkJPGtleT5TZXJ2aWNlVHlwZTwva2V5PgorCQk8
c3RyaW5nPkFwcGxpY2F0aW9uPC9zdHJpbmc+CisJCTxrZXk+UnVuTG9vcFR5cGU8L2tleT4KKwkJ
PHN0cmluZz5OU1J1bkxvb3A8L3N0cmluZz4KKwkJPGtleT5fTXVsdGlwbGVJbnN0YW5jZXM8L2tl
eT4KKwkJPHRydWUvPgorCTwvZGljdD4KKzwvZGljdD4KKzwvcGxpc3Q+CkluZGV4OiBXZWJQcm9j
ZXNzL0VudHJ5UG9pbnQvbWFjL1hQQ1NlcnZpY2UvV2ViQ29udGVudFNlcnZpY2VFbnRyeVBvaW50
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYlByb2Nlc3MvRW50cnlQb2ludC9tYWMvWFBDU2VydmljZS9X
ZWJDb250ZW50U2VydmljZUVudHJ5UG9pbnQubW0JKHJldmlzaW9uIDE1OTY1MSkKKysrIFdlYlBy
b2Nlc3MvRW50cnlQb2ludC9tYWMvWFBDU2VydmljZS9XZWJDb250ZW50U2VydmljZUVudHJ5UG9p
bnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDExIEBACiAjaW1wb3J0ICJYUENTZXJ2
aWNlRW50cnlQb2ludC5oIgogI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KIAorI2lmIFBMQVRGT1JN
KElPUykKKyNpbXBvcnQgPEdyYXBoaWNzU2VydmljZXMvR3JhcGhpY3NTZXJ2aWNlcy5oPgorI2lt
cG9ydCA8V2ViQ29yZS9XZWJDb3JlVGhyZWFkU3lzdGVtSW50ZXJmYWNlLmg+CisjZW5kaWYgLy8g
UExBVEZPUk0oSU9TKQorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7CiAKQEAgLTQyLDUgKzQ3LDEwIEBACiAgICAgLy8gdGhlIHRoaXMgcHJvY2VzcyBk
b24ndCB0cnkgdG8gaW5zZXJ0IHRoZSBzaGltIGFuZCBjcmFzaC4KICAgICBFbnZpcm9ubWVudFV0
aWxpdGllczo6c3RyaXBWYWx1ZXNFbmRpbmdXaXRoU3RyaW5nKCJEWUxEX0lOU0VSVF9MSUJSQVJJ
RVMiLCAiL1dlYlByb2Nlc3NTaGltLmR5bGliIik7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAg
R1NJbml0aWFsaXplKCk7CisgICAgSW5pdFdlYkNvcmVUaHJlYWRTeXN0ZW1JbnRlcmZhY2UoKTsK
KyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKICAgICBYUENTZXJ2aWNlSW5pdGlhbGl6ZXI8V2Vi
UHJvY2VzcywgWFBDU2VydmljZUluaXRpYWxpemVyRGVsZWdhdGU+KGNvbm5lY3Rpb24sIGluaXRp
YWxpemVyTWVzc2FnZSk7CiB9CkluZGV4OiBXZWJQcm9jZXNzL0dlb2xvY2F0aW9uL1dlYkdlb2xv
Y2F0aW9uTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9X
ZWJHZW9sb2NhdGlvbk1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNTk2NTEpCisrKyBXZWJQcm9jZXNz
L0dlb2xvY2F0aW9uL1dlYkdlb2xvY2F0aW9uTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyNiw0ICsxMjYsMTEgQEAKICNlbmRpZiAvLyBFTkFCTEUoR0VPTE9DQVRJT04pCiB9CiAKKyNp
ZiBQTEFURk9STShJT1MpCit2b2lkIFdlYkdlb2xvY2F0aW9uTWFuYWdlcjo6cmVzZXRQZXJtaXNz
aW9ucygpCit7CisgICAgbV9wcm9jZXNzLT5yZXNldEFsbEdlb2xvY2F0aW9uUGVybWlzc2lvbnMo
KTsKK30KKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJ
bmRleDogV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9XZWJHZW9sb2NhdGlvbk1hbmFnZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJQcm9jZXNzL0dlb2xvY2F0aW9uL1dlYkdlb2xvY2F0aW9uTWFuYWdlci5o
CShyZXZpc2lvbiAxNTk2NTEpCisrKyBXZWJQcm9jZXNzL0dlb2xvY2F0aW9uL1dlYkdlb2xvY2F0
aW9uTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw5IEBACiAKICAgICB2b2lk
IGRpZENoYW5nZVBvc2l0aW9uKGNvbnN0IFdlYkdlb2xvY2F0aW9uUG9zaXRpb246OkRhdGEmKTsK
ICAgICB2b2lkIGRpZEZhaWxUb0RldGVybWluZVBvc2l0aW9uKGNvbnN0IFN0cmluZyYgZXJyb3JN
ZXNzYWdlKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgdm9pZCByZXNldFBlcm1pc3Npb25zKCk7
CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogCiAgICAgV2ViUHJvY2VzcyogbV9wcm9jZXNzOwog
ICAgIEhhc2hTZXQ8V2ViUGFnZSo+IG1fcGFnZVNldDsKSW5kZXg6IFdlYlByb2Nlc3MvR2VvbG9j
YXRpb24vV2ViR2VvbG9jYXRpb25NYW5hZ2VyLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YlByb2Nlc3MvR2VvbG9jYXRpb24vV2ViR2VvbG9jYXRpb25NYW5hZ2VyLm1lc3NhZ2VzLmluCShy
ZXZpc2lvbiAxNTk2NTEpCisrKyBXZWJQcm9jZXNzL0dlb2xvY2F0aW9uL1dlYkdlb2xvY2F0aW9u
TWFuYWdlci5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjMsNCArMjMsNyBAQAogbWVz
c2FnZXMgLT4gV2ViR2VvbG9jYXRpb25NYW5hZ2VyIHsKICAgICBEaWRDaGFuZ2VQb3NpdGlvbihX
ZWJLaXQ6OldlYkdlb2xvY2F0aW9uUG9zaXRpb246OkRhdGEgcG9zaXRpb24pOwogICAgIERpZEZh
aWxUb0RldGVybWluZVBvc2l0aW9uKFdURjo6U3RyaW5nIGVycm9yTWVzc2FnZSk7CisjaWYgUExB
VEZPUk0oSU9TKQorICAgIFJlc2V0UGVybWlzc2lvbnMoKTsKKyNlbmRpZgogfQpJbmRleDogV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcAkocmV2
aXNpb24gMTU5NjUxKQorKysgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRs
ZVBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDUsNyArMzQ1LDcgQEAKIAogdm9pZCBXS0J1
bmRsZVBhZ2VTZXRUb3BPdmVyaGFuZ0ltYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0lt
YWdlUmVmIGltYWdlUmVmKQogewotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMp
ICYmICFQTEFURk9STShJT1MpCiAgICAgdG9JbXBsKHBhZ2VSZWYpLT5zZXRUb3BPdmVyaGFuZ0lt
YWdlKHRvSW1wbChpbWFnZVJlZikpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocGFnZVJlZik7
CkBAIC0zNTUsNyArMzU1LDcgQEAKIAogdm9pZCBXS0J1bmRsZVBhZ2VTZXRCb3R0b21PdmVyaGFu
Z0ltYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0ltYWdlUmVmIGltYWdlUmVmKQogewot
I2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAg
ICAgdG9JbXBsKHBhZ2VSZWYpLT5zZXRCb3R0b21PdmVyaGFuZ0ltYWdlKHRvSW1wbChpbWFnZVJl
ZikpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocGFnZVJlZik7CkBAIC0zNjMsNiArMzYzLDcg
QEAKICNlbmRpZgogfQogCisjaWYgIVBMQVRGT1JNKElPUykKIHZvaWQgV0tCdW5kbGVQYWdlU2V0
SGVhZGVyQmFubmVyKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VCYW5uZXJS
ZWYgYmFubmVyUmVmKQogewogICAgIHRvSW1wbChwYWdlUmVmKS0+c2V0SGVhZGVyUGFnZUJhbm5l
cih0b0ltcGwoYmFubmVyUmVmKSk7CkBAIC0zNzIsNiArMzczLDcgQEAKIHsKICAgICB0b0ltcGwo
cGFnZVJlZiktPnNldEZvb3RlclBhZ2VCYW5uZXIodG9JbXBsKGJhbm5lclJlZikpOwogfQorI2Vu
ZGlmIC8vICFQTEFURk9STShJT1MpCiAKIGJvb2wgV0tCdW5kbGVQYWdlSGFzTG9jYWxEYXRhRm9y
VVJMKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS1VSTFJlZiB1cmxSZWYpCiB7CkluZGV4OiBX
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmgJKHJldmlz
aW9uIDE1OTY1MSkKKysrIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQ
YWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0Nyw4ICs0NDcsMTAgQEAKIFdLX0VYUE9SVCB2b2lk
IFdLQnVuZGxlUGFnZVNldFRvcE92ZXJoYW5nSW1hZ2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdL
SW1hZ2VSZWYgaW1hZ2UpOwogV0tfRVhQT1JUIHZvaWQgV0tCdW5kbGVQYWdlU2V0Qm90dG9tT3Zl
cmhhbmdJbWFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tJbWFnZVJlZiBpbWFnZSk7CiAKKyNp
ZiAhUExBVEZPUk0oSU9TKQogV0tfRVhQT1JUIHZvaWQgV0tCdW5kbGVQYWdlU2V0SGVhZGVyQmFu
bmVyKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZVBhZ2VCYW5uZXJSZWYgYmFubmVyKTsK
IFdLX0VYUE9SVCB2b2lkIFdLQnVuZGxlUGFnZVNldEZvb3RlckJhbm5lcihXS0J1bmRsZVBhZ2VS
ZWYgcGFnZSwgV0tCdW5kbGVQYWdlQmFubmVyUmVmIGJhbm5lcik7CisjZW5kaWYgLy8gIVBMQVRG
T1JNKElPUykKIAogV0tfRVhQT1JUIGJvb2wgV0tCdW5kbGVQYWdlSGFzTG9jYWxEYXRhRm9yVVJM
KFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1VSTFJlZiB1cmwpOwogV0tfRVhQT1JUIGJvb2wgV0tC
dW5kbGVQYWdlQ2FuSGFuZGxlUmVxdWVzdChXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCk7CkluZGV4
OiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvbWFjL1dLTlBBUElQbHVnSW5Db250YWluZXIu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL21hYy9XS05QQVBJ
UGx1Z0luQ29udGFpbmVyLm1tCShyZXZpc2lvbiAxNTk2NTEpCisrKyBXZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvbWFjL1dLTlBBUElQbHVnSW5Db250YWluZXIubW0JKHdvcmtpbmcgY29weSkK
QEAgLTY0LDggKzY0LDEyIEBACiAgICAgaWYgKCFfcGx1Z2luKQogICAgICAgICByZXR1cm4gTk87
CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIF9wbHVnaW4tPm9wZW5QbHVnaW5QcmVmZXJlbmNl
UGFuZSgpOwogICAgIHJldHVybiBZRVM7CisjZWxzZQorICAgIHJldHVybiBOTzsKKyNlbmRpZgog
fQogCiBAZW5kCkluZGV4OiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1NpbXBsZVBERlBsdWdpbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvU2ltcGxlUERGUGx1Z2luLmgJ
KHJldmlzaW9uIDE1OTY1MSkKKysrIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvU2ltcGxlUERGUGx1
Z2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjI3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIFNpbXBsZVBERlBsdWdpbl9oCi0jZGVmaW5lIFNpbXBsZVBERlBsdWdpbl9oCi0K
LSNpbmNsdWRlICJQbHVnaW4uaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGFibGVBcmVhLmg+
Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi10eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFx
dWVKU0NvbnRleHQqIEpTQ29udGV4dFJlZjsKLXR5cGVkZWYgc3RydWN0IE9wYXF1ZUpTVmFsdWUq
IEpTT2JqZWN0UmVmOwotdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYWx1
ZVJlZjsKLQotT0JKQ19DTEFTUyBOU0RhdGE7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLXN0cnVj
dCBQbHVnaW5JbmZvOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgUGx1Z2luVmll
dzsKLWNsYXNzIFdlYkZyYW1lOwotCi1jbGFzcyBTaW1wbGVQREZQbHVnaW4gOiBwdWJsaWMgUGx1
Z2luLCBwcm90ZWN0ZWQgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEgewotcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNpbXBsZVBERlBsdWdpbj4gY3JlYXRlKFdlYkZyYW1lKik7Ci0gICAg
flNpbXBsZVBERlBsdWdpbigpOwotCi0gICAgc3RhdGljIFdlYkNvcmU6OlBsdWdpbkluZm8gcGx1
Z2luSW5mbygpOwotCi0gICAgLy8gSW4tcHJvY2VzcyBQREZWaWV3cyBkb24ndCBzdXBwb3J0IGFz
eW5jaHJvbm91cyBpbml0aWFsaXphdGlvbi4KLSAgICB2aXJ0dWFsIGJvb2wgaXNCZWluZ0FzeW5j
aHJvbm91c2x5SW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgdm9p
ZCBkaWRNdXRhdGVQREZEb2N1bWVudCgpIHsgbV9wZGZEb2N1bWVudFdhc011dGF0ZWQgPSB0cnVl
OyB9Ci0gICAgCi0gICAgV2ViQ29yZTo6SW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBTaW1wbGVQREZQbHVnaW4oV2ViRnJh
bWUqKTsKLQotICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7
IH0KLQotICAgIHZvaWQgc2V0U2l6ZShXZWJDb3JlOjpJbnRTaXplIHNpemUpIHsgbV9zaXplID0g
c2l6ZTsgfQotCi0gICAgUmV0YWluUHRyPFBERkRvY3VtZW50PiBwZGZEb2N1bWVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fcGRmRG9jdW1lbnQ7IH0KLSAgICB2b2lkIHNldFBERkRvY3VtZW50KFJldGFp
blB0cjxQREZEb2N1bWVudD4gZG9jdW1lbnQpIHsgbV9wZGZEb2N1bWVudCA9IGRvY3VtZW50OyB9
Ci0KLSAgICBXZWJDb3JlOjpJbnRTaXplIHBkZkRvY3VtZW50U2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcGRmRG9jdW1lbnRTaXplOyB9Ci0gICAgdm9pZCBzZXRQREZEb2N1bWVudFNpemUoV2ViQ29y
ZTo6SW50U2l6ZSBzaXplKSB7IG1fcGRmRG9jdW1lbnRTaXplID0gc2l6ZTsgfQotCi0gICAgY29u
c3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSgpIHsgcmV0dXJuIG1fc3VnZ2VzdGVkRmlsZW5h
bWU7IH0KLSAgICAKLSAgICB2aXJ0dWFsIE5TRGF0YSAqbGl2ZURhdGEoKSBjb25zdDsKLSAgICBO
U0RhdGEgKnJhd0RhdGEoKSBjb25zdCB7IHJldHVybiAoTlNEYXRhICopbV9kYXRhLmdldCgpOyB9
Ci0KLSAgICBib29sIHBkZkRvY3VtZW50V2FzTXV0YXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGRm
RG9jdW1lbnRXYXNNdXRhdGVkOyB9Ci0KLSAgICAvLyBSZWd1bGFyIHBsdWctaW5zIGRvbid0IG5l
ZWQgYWNjZXNzIHRvIHZpZXcsIGJ1dCB3ZSBhZGQgc2Nyb2xsYmFycyB0byBlbWJlZGRpbmcgRnJh
bWVWaWV3IGZvciBwcm9wZXIgZXZlbnQgaGFuZGxpbmcuCi0gICAgUGx1Z2luVmlldyogcGx1Z2lu
VmlldygpOwotICAgIGNvbnN0IFBsdWdpblZpZXcqIHBsdWdpblZpZXcoKSBjb25zdDsKLQotICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVTY3JvbGxiYXJzKCk7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRy
PFdlYkNvcmU6OlNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFdlYkNvcmU6OlNjcm9sbGJhck9y
aWVudGF0aW9uKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveVNjcm9sbGJhcihXZWJDb3JlOjpT
Y3JvbGxiYXJPcmllbnRhdGlvbik7Ci0gICAgdmlydHVhbCB2b2lkIGFkZEFyY2hpdmVSZXNvdXJj
ZSgpOwotICAgIHZpcnR1YWwgdm9pZCBwZGZEb2N1bWVudERpZExvYWQoKTsKLSAgICB2aXJ0dWFs
IHZvaWQgY29tcHV0ZVBhZ2VCb3hlcygpOwotICAgIHZpcnR1YWwgdm9pZCBjYWxjdWxhdGVTaXpl
cygpOwotICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCk7Ci0gICAgdm9pZCBwYWludENvbnRl
bnQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGly
dHlSZWN0KTsKLSAgICB2b2lkIHBhaW50Q29udHJvbHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKLSAgICAKLSAgICB2b2lkIHJ1
blNjcmlwdHNJblBERkRvY3VtZW50KCk7Ci0KLSAgICAvLyBQbHVnLWluIG1ldGhvZHMKLSAgICB2
aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJik7Ci0gICAgdmlydHVhbCB2
b2lkIGRlc3Ryb3koKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0SW5XaW5kb3dDb29yZGlu
YXRlcyk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRyb2xUaW50cyhXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQqKTsKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTbmFwc2hvdHRpbmcoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaGFyZWFibGVC
aXRtYXA+IHNuYXBzaG90KCk7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHZpcnR1YWwgUGxhdGZv
cm1MYXllciogcGx1Z2luTGF5ZXIoKTsKLSNlbmRpZgotICAgIHZpcnR1YWwgYm9vbCBpc1RyYW5z
cGFyZW50KCk7Ci0gICAgdmlydHVhbCBib29sIHdhbnRzV2hlZWxFdmVudHMoKSBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIHZvaWQgZ2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgcGx1Z2luU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QsIGNvbnN0IFdl
YkNvcmU6OkFmZmluZVRyYW5zZm9ybSYgcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybSk7Ci0gICAg
dmlydHVhbCB2b2lkIHZpc2liaWxpdHlEaWRDaGFuZ2UoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZnJh
bWVEaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHJlcXVlc3RJRCk7Ci0gICAgdmlydHVhbCB2b2lk
IGZyYW1lRGlkRmFpbCh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgd2FzQ2FuY2VsbGVkKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkRXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90IHJlcXVlc3RJRCwg
Y29uc3QgU3RyaW5nJiByZXN1bHQpOwotICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRSZWNlaXZl
UmVzcG9uc2UodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IFdlYkNvcmU6OlVSTCYgcmVzcG9uc2VV
UkwsIHVpbnQzMl90IHN0cmVhbUxlbmd0aCwgdWludDMyX3QgbGFzdE1vZGlmaWVkVGltZSwgY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcm
IHN1Z2dlc3RlZEZpbGVOYW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkUmVjZWl2ZURh
dGEodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IGNoYXIqIGJ5dGVzLCBpbnQgbGVuZ3RoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCBzdHJlYW1JRCk7
Ci0gICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZEZhaWwodWludDY0X3Qgc3RyZWFtSUQsIGJvb2wg
d2FzQ2FuY2VsbGVkKTsKLSAgICB2aXJ0dWFsIHZvaWQgbWFudWFsU3RyZWFtRGlkUmVjZWl2ZVJl
c3BvbnNlKGNvbnN0IFdlYkNvcmU6OlVSTCYgcmVzcG9uc2VVUkwsIHVpbnQzMl90IHN0cmVhbUxl
bmd0aCwgdWludDMyX3QgbGFzdE1vZGlmaWVkVGltZSwgY29uc3QgV1RGOjpTdHJpbmcmIG1pbWVU
eXBlLCBjb25zdCBXVEY6OlN0cmluZyYgaGVhZGVycywgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRG
aWxlTmFtZSk7Ci0gICAgdmlydHVhbCB2b2lkIG1hbnVhbFN0cmVhbURpZFJlY2VpdmVEYXRhKGNv
bnN0IGNoYXIqIGJ5dGVzLCBpbnQgbGVuZ3RoKTsKLSAgICB2aXJ0dWFsIHZvaWQgbWFudWFsU3Ry
ZWFtRGlkRmluaXNoTG9hZGluZygpOwotICAgIHZpcnR1YWwgdm9pZCBtYW51YWxTdHJlYW1EaWRG
YWlsKGJvb2wgd2FzQ2FuY2VsbGVkKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlTW91c2VFdmVu
dChjb25zdCBXZWJNb3VzZUV2ZW50Jik7Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZVdoZWVsRXZl
bnQoY29uc3QgV2ViV2hlZWxFdmVudCYpOwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVNb3VzZUVu
dGVyRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVN
b3VzZUxlYXZlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOwotICAgIHZpcnR1YWwgYm9vbCBo
YW5kbGVDb250ZXh0TWVudUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKLSAgICB2aXJ0dWFs
IGJvb2wgaGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50Jik7Ci0gICAg
dmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wpOwotICAgIHZpcnR1YWwgTlBPYmplY3QqIHBsdWdp
blNjcmlwdGFibGVOUE9iamVjdCgpOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICB2aXJ0dWFsIHZv
aWQgd2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wpOwotICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dBbmRW
aWV3RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dGcmFtZUluU2Ny
ZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdGcmFtZUluV2luZG93
Q29vcmRpbmF0ZXMpOwotICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dWaXNpYmlsaXR5Q2hhbmdlZChi
b29sKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQp
OwotICAgIHZpcnR1YWwgdWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2VuZENvbXBsZXhUZXh0SW5wdXQoY29uc3QgU3Ry
aW5nJiB0ZXh0SW5wdXQpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckhvc3RpbmdNb2RlKExh
eWVySG9zdGluZ01vZGUpIE9WRVJSSURFOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQgc3Rv
cmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKGJvb2wpOwotICAgIHZpcnR1YWwgdm9pZCBwcml2YXRl
QnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCk7Ci0gICAgdmlydHVhbCBib29sIGdldEZvcm1WYWx1
ZShTdHJpbmcmIGZvcm1WYWx1ZSk7Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZVNjcm9sbChXZWJD
b3JlOjpTY3JvbGxEaXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5KTsKLSAgICB2
aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgIHZp
cnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpOwotCi0gICAgdmly
dHVhbCBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IHBkZkRvY3VtZW50Rm9yUHJpbnRpbmcoKSBjb25z
dCBPVkVSUklERSB7IHJldHVybiBtX3BkZkRvY3VtZW50OyB9Ci0KLSAgICAvLyBTY3JvbGxhYmxl
QXJlYSBtZXRob2RzLgotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBzY3JvbGxDb3JuZXJS
ZWN0KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxhYmxlQXJl
YSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IFdlYkNvcmU6OkludFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFdlYkNvcmU6OlNj
cm9sbGJhck9yaWVudGF0aW9uKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNB
Y3RpdmUoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9s
bGJhclJlY3QoV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGlzU2Nyb2xs
Q29ybmVyVmlzaWJsZSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgaW50IHNjcm9sbFBv
c2l0aW9uKFdlYkNvcmU6OlNjcm9sbGJhciopIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwg
V2ViQ29yZTo6SW50UG9pbnQgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0IE9W
RVJSSURFOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgbWF4aW11bVNjcm9sbFBvc2l0
aW9uKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBpbnQgdmlzaWJsZUhlaWdodCgpIGNv
bnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgaW50IHZpc2libGVXaWR0aCgpIGNvbnN0IE9WRVJS
SURFOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdCBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9s
bGJhcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQo
KTsgfQotICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3QgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gZmFsc2U7IH0gLy8gSWYgd2UgcmV0dXJuIHRydWUsIFNjcm9sbEFuaW1h
dG9yTWFjIHdpbGwga2VlcCBjeWNsaW5nIGEgdGltZXIgZm9yZXZlciwgd2FpdGluZyBmb3IgYSBn
b29kIHRpbWUgdG8gYW5pbWF0ZS4KLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYmFyU3R5bGVDaGFu
Z2VkKGludCBuZXdTdHlsZSwgYm9vbCBmb3JjZVVwZGF0ZSkgT1ZFUlJJREU7Ci0gICAgCi0gICAg
dmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5n
Vmlldyhjb25zdCBXZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBz
Y3JvbGxiYXJSZWN0KSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJl
Y3QgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFdlYkNvcmU6OlNj
cm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0IE9WRVJS
SURFOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJU
b0NvbnRhaW5pbmdWaWV3KGNvbnN0IFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBX
ZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29u
c3QgV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBhcmVudFBv
aW50KSBjb25zdCBPVkVSUklERTsKLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNFZGl0aW5nQ29t
bWFuZEVuYWJsZWQoY29uc3QgU3RyaW5nJikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGhh
bmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIE9WRVJSSURF
OwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkgT1ZFUlJJREU7Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQWxsb3dTY3JpcHRpbmcoKSBPVkVSUklERSB7IHJldHVy
biBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBbGxvd05hdmlnYXRpb25Gcm9tRHJh
Z3MoKSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGNvdW50RmluZE1h
dGNoZXMoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6RmluZE9wdGlvbnMsIHVuc2lnbmVkKSBPVkVS
UklERSB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBib29sIGZpbmRTdHJpbmcoY29uc3QgU3Ry
aW5nJiwgV2ViQ29yZTo6RmluZE9wdGlvbnMsIHVuc2lnbmVkKSBPVkVSUklERSB7IHJldHVybiBm
YWxzZTsgfQotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4g
bGl2ZVJlc291cmNlRGF0YSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBwZXJm
b3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYp
IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRTZWxl
Y3Rpb25TdHJpbmcoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBTdHJpbmcoKTsgfQotCi0gICAg
V2ViQ29yZTo6SW50U2l6ZSBtX3Njcm9sbE9mZnNldDsKLQotcHJpdmF0ZToKLQotICAgIEpTT2Jq
ZWN0UmVmIG1ha2VKU1BERkRvYyhKU0NvbnRleHRSZWYpOwotICAgIHN0YXRpYyBKU1ZhbHVlUmVm
IGpzUERGRG9jUHJpbnQoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7Ci0KLSAgICB2b2lkIGNvbnZlcnRQ
b3N0U2NyaXB0RGF0YUlmTmVlZGVkKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQWx3YXlz
QXV0b1N0YXJ0KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgV2ViQ29y
ZTo6SW50U2l6ZSBtX3NpemU7Ci0KLSAgICBXZWJDb3JlOjpVUkwgbV9zb3VyY2VVUkw7Ci0KLSAg
ICBTdHJpbmcgbV9zdWdnZXN0ZWRGaWxlbmFtZTsKLSAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0
YVJlZj4gbV9kYXRhOwotCi0gICAgUmV0YWluUHRyPFBERkRvY3VtZW50PiBtX3BkZkRvY3VtZW50
OwotICAgIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiBtX3BhZ2VCb3hlczsKLSAgICBXZWJDb3Jl
OjpJbnRTaXplIG1fcGRmRG9jdW1lbnRTaXplOyAvLyBBbGwgcGFnZXMsIGluY2x1ZGluZyBnYXBz
LgotCi0gICAgUmVmUHRyPFdlYkNvcmU6OlNjcm9sbGJhcj4gbV9ob3Jpem9udGFsU2Nyb2xsYmFy
OwotICAgIFJlZlB0cjxXZWJDb3JlOjpTY3JvbGxiYXI+IG1fdmVydGljYWxTY3JvbGxiYXI7Ci0K
LSAgICBXZWJGcmFtZSogbV9mcmFtZTsKLQotICAgIGJvb2wgbV9pc1Bvc3RTY3JpcHQ7Ci0gICAg
Ym9vbCBtX3BkZkRvY3VtZW50V2FzTXV0YXRlZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAotCi0jZW5kaWYgLy8gU2ltcGxlUERGUGx1Z2luX2gKSW5kZXg6IFdlYlByb2Nlc3MvUGx1Z2lu
cy9QREYvU2ltcGxlUERGUGx1Z2luLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYlByb2Nlc3MvUGx1Z2lu
cy9QREYvU2ltcGxlUERGUGx1Z2luLm1tCShyZXZpc2lvbiAxNTk2NTEpCisrKyBXZWJQcm9jZXNz
L1BsdWdpbnMvUERGL1NpbXBsZVBERlBsdWdpbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMSwxMDAy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEsIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNp
bXBvcnQgIlNpbXBsZVBERlBsdWdpbi5oIgotCi0jaW1wb3J0ICJQREZLaXRJbXBvcnRzLmgiCi0j
aW1wb3J0ICJQbHVnaW5WaWV3LmgiCi0jaW1wb3J0ICJTaGFyZWFibGVCaXRtYXAuaCIKLSNpbXBv
cnQgIldlYkV2ZW50LmgiCi0jaW1wb3J0ICJXZWJFdmVudENvbnZlcnNpb24uaCIKLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SlNPYmplY3RSZWYuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+Ci0j
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+Ci0jaW1wb3J0IDxQREZLaXQv
UERGS2l0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0FyY2hpdmVSZXNvdXJjZS5oPgotI2ltcG9ydCA8
V2ViQ29yZS9DaHJvbWUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KLSNp
bXBvcnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1l
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFw
aGljc0NvbnRleHQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRUUEhlYWRlck1hcC5oPgotI2ltcG9y
dCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvUGx1Z2luRGF0YS5oPgotI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJC
b3hNb2RlbE9iamVjdC5oPgotI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxBbmltYXRvci5oPgotI2lt
cG9ydCA8V2ViQ29yZS9TY3JvbGxiYXJUaGVtZS5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKLQotc3RhdGljIGNvbnN0IGNoYXIqIHBvc3RTY3JpcHRNSU1FVHlwZSA9ICJhcHBsaWNhdGlv
bi9wb3N0c2NyaXB0IjsKLQotc3RhdGljIHZvaWQgYXBwZW5kVmFsdWVzSW5QREZOYW1lU3VidHJl
ZVRvVmVjdG9yKENHUERGRGljdGlvbmFyeVJlZiBzdWJ0cmVlLCBWZWN0b3I8Q0dQREZPYmplY3RS
ZWY+JiB2YWx1ZXMpCi17Ci0gICAgQ0dQREZBcnJheVJlZiBuYW1lczsKLSAgICBpZiAoQ0dQREZE
aWN0aW9uYXJ5R2V0QXJyYXkoc3VidHJlZSwgIk5hbWVzIiwgJm5hbWVzKSkgewotICAgICAgICBz
aXplX3QgbmFtZUNvdW50ID0gQ0dQREZBcnJheUdldENvdW50KG5hbWVzKSAvIDI7Ci0gICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmFtZUNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIENH
UERGT2JqZWN0UmVmIG9iamVjdDsKLSAgICAgICAgICAgIENHUERGQXJyYXlHZXRPYmplY3QobmFt
ZXMsIDIgKiBpICsgMSwgJm9iamVjdCk7Ci0gICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKG9iamVj
dCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENHUERGQXJyYXlS
ZWYga2lkczsKLSAgICBpZiAoIUNHUERGRGljdGlvbmFyeUdldEFycmF5KHN1YnRyZWUsICJLaWRz
IiwgJmtpZHMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzaXplX3Qga2lkQ291bnQgPSBDR1BE
RkFycmF5R2V0Q291bnQoa2lkcyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBraWRDb3Vu
dDsgKytpKSB7Ci0gICAgICAgIENHUERGRGljdGlvbmFyeVJlZiBraWQ7Ci0gICAgICAgIGlmICgh
Q0dQREZBcnJheUdldERpY3Rpb25hcnkoa2lkcywgaSwgJmtpZCkpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgYXBwZW5kVmFsdWVzSW5QREZOYW1lU3VidHJlZVRvVmVjdG9yKGtpZCwg
dmFsdWVzKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGdldEFsbFZhbHVlc0luUERGTmFtZVRy
ZWUoQ0dQREZEaWN0aW9uYXJ5UmVmIHRyZWUsIFZlY3RvcjxDR1BERk9iamVjdFJlZj4mIGFsbFZh
bHVlcykKLXsKLSAgICBhcHBlbmRWYWx1ZXNJblBERk5hbWVTdWJ0cmVlVG9WZWN0b3IodHJlZSwg
YWxsVmFsdWVzKTsKLX0KLQotc3RhdGljIHZvaWQgZ2V0QWxsU2NyaXB0c0luUERGRG9jdW1lbnQo
Q0dQREZEb2N1bWVudFJlZiBwZGZEb2N1bWVudCwgVmVjdG9yPFJldGFpblB0cjxDRlN0cmluZ1Jl
Zj4+JiBzY3JpcHRzKQotewotICAgIGlmICghcGRmRG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIENHUERGRGljdGlvbmFyeVJlZiBwZGZDYXRhbG9nID0gQ0dQREZEb2N1bWVudEdldENh
dGFsb2cocGRmRG9jdW1lbnQpOwotICAgIGlmICghcGRmQ2F0YWxvZykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gR2V0IHRoZSBkaWN0aW9uYXJ5IG9mIGFsbCBkb2N1bWVudC1sZXZlbCBuYW1l
IHRyZWVzLgotICAgIENHUERGRGljdGlvbmFyeVJlZiBuYW1lc0RpY3Rpb25hcnk7Ci0gICAgaWYg
KCFDR1BERkRpY3Rpb25hcnlHZXREaWN0aW9uYXJ5KHBkZkNhdGFsb2csICJOYW1lcyIsICZuYW1l
c0RpY3Rpb25hcnkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBHZXQgdGhlIGRvY3VtZW50
LWxldmVsICJKYXZhU2NyaXB0IiBuYW1lIHRyZWUuCi0gICAgQ0dQREZEaWN0aW9uYXJ5UmVmIGph
dmFTY3JpcHROYW1lVHJlZTsKLSAgICBpZiAoIUNHUERGRGljdGlvbmFyeUdldERpY3Rpb25hcnko
bmFtZXNEaWN0aW9uYXJ5LCAiSmF2YVNjcmlwdCIsICZqYXZhU2NyaXB0TmFtZVRyZWUpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGUgbmFtZXMgYXJlIGFyYml0cmFyeS4gV2UgYXJlIG9u
bHkgaW50ZXJlc3RlZCBpbiB0aGUgdmFsdWVzLgotICAgIFZlY3RvcjxDR1BERk9iamVjdFJlZj4g
b2JqZWN0czsKLSAgICBnZXRBbGxWYWx1ZXNJblBERk5hbWVUcmVlKGphdmFTY3JpcHROYW1lVHJl
ZSwgb2JqZWN0cyk7Ci0gICAgc2l6ZV90IG9iamVjdENvdW50ID0gb2JqZWN0cy5zaXplKCk7Ci0K
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdENvdW50OyArK2kpIHsKLSAgICAgICAg
Q0dQREZEaWN0aW9uYXJ5UmVmIGphdmFTY3JpcHRBY3Rpb247Ci0gICAgICAgIGlmICghQ0dQREZP
YmplY3RHZXRWYWx1ZShyZWludGVycHJldF9jYXN0PENHUERGT2JqZWN0UmVmPihvYmplY3RzW2ld
KSwga0NHUERGT2JqZWN0VHlwZURpY3Rpb25hcnksICZqYXZhU2NyaXB0QWN0aW9uKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIEEgSmF2YVNjcmlwdCBhY3Rpb24gbXVzdCBo
YXZlIGFuIGFjdGlvbiB0eXBlIG9mICJKYXZhU2NyaXB0Ii4KLSAgICAgICAgY29uc3QgY2hhciog
YWN0aW9uVHlwZTsKLSAgICAgICAgaWYgKCFDR1BERkRpY3Rpb25hcnlHZXROYW1lKGphdmFTY3Jp
cHRBY3Rpb24sICJTIiwgJmFjdGlvblR5cGUpIHx8IHN0cmNtcChhY3Rpb25UeXBlLCAiSmF2YVNj
cmlwdCIpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgY29uc3QgVUludDgqIGJ5
dGVzID0gMDsKLSAgICAgICAgQ0ZJbmRleCBsZW5ndGg7Ci0gICAgICAgIENHUERGU3RyZWFtUmVm
IHN0cmVhbTsKLSAgICAgICAgQ0dQREZTdHJpbmdSZWYgc3RyaW5nOwotICAgICAgICBSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPiBkYXRhOwotICAgICAgICBpZiAoQ0dQREZEaWN0aW9uYXJ5R2V0U3RyZWFt
KGphdmFTY3JpcHRBY3Rpb24sICJKUyIsICZzdHJlYW0pKSB7Ci0gICAgICAgICAgICBDR1BERkRh
dGFGb3JtYXQgZm9ybWF0OwotICAgICAgICAgICAgZGF0YSA9IGFkb3B0Q0YoQ0dQREZTdHJlYW1D
b3B5RGF0YShzdHJlYW0sICZmb3JtYXQpKTsKLSAgICAgICAgICAgIGlmICghZGF0YSkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGJ5dGVzID0gQ0ZEYXRhR2V0Qnl0ZVB0
cihkYXRhLmdldCgpKTsKLSAgICAgICAgICAgIGxlbmd0aCA9IENGRGF0YUdldExlbmd0aChkYXRh
LmdldCgpKTsKLSAgICAgICAgfSBlbHNlIGlmIChDR1BERkRpY3Rpb25hcnlHZXRTdHJpbmcoamF2
YVNjcmlwdEFjdGlvbiwgIkpTIiwgJnN0cmluZykpIHsKLSAgICAgICAgICAgIGJ5dGVzID0gQ0dQ
REZTdHJpbmdHZXRCeXRlUHRyKHN0cmluZyk7Ci0gICAgICAgICAgICBsZW5ndGggPSBDR1BERlN0
cmluZ0dldExlbmd0aChzdHJpbmcpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghYnl0ZXMpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBDRlN0cmluZ0VuY29kaW5nIGVuY29kaW5n
ID0gKGxlbmd0aCA+IDEgJiYgYnl0ZXNbMF0gPT0gMHhGRSAmJiBieXRlc1sxXSA9PSAweEZGKSA/
IGtDRlN0cmluZ0VuY29kaW5nVW5pY29kZSA6IGtDRlN0cmluZ0VuY29kaW5nVVRGODsKLSAgICAg
ICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzY3JpcHQgPSBhZG9wdENGKENGU3RyaW5nQ3JlYXRl
V2l0aEJ5dGVzKGtDRkFsbG9jYXRvckRlZmF1bHQsIGJ5dGVzLCBsZW5ndGgsIGVuY29kaW5nLCB0
cnVlKSk7Ci0gICAgICAgIGlmICghc2NyaXB0KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgc2NyaXB0cy5hcHBlbmQoc2NyaXB0KTsKLSAgICB9Ci19Ci0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi1jb25zdCB1aW50NjRfdCBwZGZEb2N1bWVudFJlcXVlc3RJRCA9IDE7IC8vIFBsdWdp
bkNvbnRyb2xsZXIgc3VwcG9ydHMgbG9hZGluZyBtdWx0aXBsZSBzdHJlYW1zLCBidXQgd2Ugb25s
eSBuZWVkIG9uZSBmb3IgUERGLgotCi1jb25zdCBpbnQgZ3V0dGVySGVpZ2h0ID0gMTA7Ci1jb25z
dCBpbnQgc2hhZG93T2Zmc2V0WCA9IDA7Ci1jb25zdCBpbnQgc2hhZG93T2Zmc2V0WSA9IC0yOwot
Y29uc3QgaW50IHNoYWRvd1NpemUgPSA3OwotCi1QYXNzUmVmUHRyPFNpbXBsZVBERlBsdWdpbj4g
U2ltcGxlUERGUGx1Z2luOjpjcmVhdGUoV2ViRnJhbWUqIGZyYW1lKQotewotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU2ltcGxlUERGUGx1Z2luKGZyYW1lKSk7Ci19Ci0KLVNpbXBsZVBERlBsdWdp
bjo6U2ltcGxlUERGUGx1Z2luKFdlYkZyYW1lKiBmcmFtZSkKLSAgICA6IG1fZnJhbWUoZnJhbWUp
Ci0gICAgLCBtX2lzUG9zdFNjcmlwdChmYWxzZSkKLSAgICAsIG1fcGRmRG9jdW1lbnRXYXNNdXRh
dGVkKGZhbHNlKQotewotfQotCi1TaW1wbGVQREZQbHVnaW46On5TaW1wbGVQREZQbHVnaW4oKQot
ewotfQotCi1QbHVnaW5JbmZvIFNpbXBsZVBERlBsdWdpbjo6cGx1Z2luSW5mbygpCi17Ci0gICAg
UGx1Z2luSW5mbyBpbmZvOwotICAgIGluZm8ubmFtZSA9IGJ1aWx0SW5QREZQbHVnaW5OYW1lKCk7
Ci0gICAgaW5mby5pc0FwcGxpY2F0aW9uUGx1Z2luID0gdHJ1ZTsKLQotICAgIE1pbWVDbGFzc0lu
Zm8gcGRmTWltZUNsYXNzSW5mbzsKLSAgICBwZGZNaW1lQ2xhc3NJbmZvLnR5cGUgPSAiYXBwbGlj
YXRpb24vcGRmIjsKLSAgICBwZGZNaW1lQ2xhc3NJbmZvLmRlc2MgPSBwZGZEb2N1bWVudFR5cGVE
ZXNjcmlwdGlvbigpOwotICAgIHBkZk1pbWVDbGFzc0luZm8uZXh0ZW5zaW9ucy5hcHBlbmQoInBk
ZiIpOwotICAgIGluZm8ubWltZXMuYXBwZW5kKHBkZk1pbWVDbGFzc0luZm8pOwotICAgIAotICAg
IE1pbWVDbGFzc0luZm8gdGV4dFBERk1pbWVDbGFzc0luZm87Ci0gICAgdGV4dFBERk1pbWVDbGFz
c0luZm8udHlwZSA9ICJ0ZXh0L3BkZiI7Ci0gICAgdGV4dFBERk1pbWVDbGFzc0luZm8uZGVzYyA9
IHBkZkRvY3VtZW50VHlwZURlc2NyaXB0aW9uKCk7Ci0gICAgdGV4dFBERk1pbWVDbGFzc0luZm8u
ZXh0ZW5zaW9ucy5hcHBlbmQoInBkZiIpOwotICAgIGluZm8ubWltZXMuYXBwZW5kKHRleHRQREZN
aW1lQ2xhc3NJbmZvKTsKLQotICAgIE1pbWVDbGFzc0luZm8gcG9zdFNjcmlwdE1pbWVDbGFzc0lu
Zm87Ci0gICAgcG9zdFNjcmlwdE1pbWVDbGFzc0luZm8udHlwZSA9IHBvc3RTY3JpcHRNSU1FVHlw
ZTsKLSAgICBwb3N0U2NyaXB0TWltZUNsYXNzSW5mby5kZXNjID0gcG9zdFNjcmlwdERvY3VtZW50
VHlwZURlc2NyaXB0aW9uKCk7Ci0gICAgcG9zdFNjcmlwdE1pbWVDbGFzc0luZm8uZXh0ZW5zaW9u
cy5hcHBlbmQoInBzIik7Ci0gICAgaW5mby5taW1lcy5hcHBlbmQocG9zdFNjcmlwdE1pbWVDbGFz
c0luZm8pOwotCi0gICAgcmV0dXJuIGluZm87Ci19Ci0KLVBsdWdpblZpZXcqIFNpbXBsZVBERlBs
dWdpbjo6cGx1Z2luVmlldygpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXcq
Pihjb250cm9sbGVyKCkpOwotfQotCi1jb25zdCBQbHVnaW5WaWV3KiBTaW1wbGVQREZQbHVnaW46
OnBsdWdpblZpZXcoKSBjb25zdAotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBQbHVn
aW5WaWV3Kj4oY29udHJvbGxlcigpKTsKLX0KLQotdm9pZCBTaW1wbGVQREZQbHVnaW46OnVwZGF0
ZVNjcm9sbGJhcnMoKQotewotICAgIGJvb2wgaGFkU2Nyb2xsYmFycyA9IG1faG9yaXpvbnRhbFNj
cm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Nyb2xsYmFyOwotCi0gICAgaWYgKG1faG9yaXpvbnRhbFNj
cm9sbGJhcikgewotICAgICAgICBpZiAobV9zaXplLndpZHRoKCkgPj0gbV9wZGZEb2N1bWVudFNp
emUud2lkdGgoKSkKLSAgICAgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9s
bGJhcik7Ci0gICAgfSBlbHNlIGlmIChtX3NpemUud2lkdGgoKSA8IG1fcGRmRG9jdW1lbnRTaXpl
LndpZHRoKCkpCi0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhciA9IGNyZWF0ZVNjcm9sbGJh
cihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLQotICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7
Ci0gICAgICAgIGlmIChtX3NpemUuaGVpZ2h0KCkgPj0gbV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0
KCkpCi0gICAgICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSAg
ICB9IGVsc2UgaWYgKG1fc2l6ZS5oZWlnaHQoKSA8IG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgp
KQotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyID0gY3JlYXRlU2Nyb2xsYmFyKFZlcnRpY2Fs
U2Nyb2xsYmFyKTsKLQotICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gKG1faG9y
aXpvbnRhbFNjcm9sbGJhciAmJiAhbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3Jv
bGxiYXIoKSkgPyBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpIDogMDsKLSAgICBpbnQg
dmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IChtX3ZlcnRpY2FsU2Nyb2xsYmFyICYmICFtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX3ZlcnRpY2FsU2Nyb2xsYmFy
LT53aWR0aCgpIDogMDsKLQotICAgIGludCBwYWdlU3RlcCA9IG1fcGFnZUJveGVzLmlzRW1wdHko
KSA/IDAgOiBtX3BhZ2VCb3hlc1swXS5oZWlnaHQoKTsKLQotICAgIGlmIChtX2hvcml6b250YWxT
Y3JvbGxiYXIpIHsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3Jv
bGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKLSAgICAgICAgbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKG1fc2l6ZS53aWR0aCgpIC0gdmVydGljYWxTY3Jv
bGxiYXJXaWR0aCwgbV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSk7Ci0gICAgICAgIEludFJlY3Qg
c2Nyb2xsYmFyUmVjdChwbHVnaW5WaWV3KCktPngoKSwgcGx1Z2luVmlldygpLT55KCkgKyBtX3Np
emUuaGVpZ2h0KCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpLCBtX3NpemUud2lk
dGgoKSwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7Ci0gICAgICAgIGlmIChtX3Zl
cnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICAgICAgc2Nyb2xsYmFyUmVjdC5jb250cmFjdChtX3Zl
cnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCAwKTsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xs
YmFyLT5zZXRGcmFtZVJlY3Qoc2Nyb2xsYmFyUmVjdCk7Ci0gICAgfQotICAgIGlmIChtX3ZlcnRp
Y2FsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN0ZXBzKFNj
cm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwotICAgICAgICBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKG1fc2l6ZS5oZWlnaHQoKSAtIGhvcml6b250YWxT
Y3JvbGxiYXJIZWlnaHQsIG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpKTsKLSAgICAgICAgSW50
UmVjdCBzY3JvbGxiYXJSZWN0KEludFJlY3QocGx1Z2luVmlldygpLT54KCkgKyBtX3NpemUud2lk
dGgoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIHBsdWdpblZpZXcoKS0+eSgpLCBt
X3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAg
aWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIHNjcm9sbGJhclJlY3QuY29u
dHJhY3QoMCwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7Ci0gICAgICAgIG1fdmVy
dGljYWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChzY3JvbGxiYXJSZWN0KTsKLSAgICB9Ci0gICAg
Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+dmlldygp
OwotICAgIGlmICghZnJhbWVWaWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIGhhc1Nj
cm9sbGJhcnMgPSBtX2hvcml6b250YWxTY3JvbGxiYXIgfHwgbV92ZXJ0aWNhbFNjcm9sbGJhcjsK
LSAgICBpZiAoaGFkU2Nyb2xsYmFycyAhPSBoYXNTY3JvbGxiYXJzKSB7Ci0gICAgICAgIGlmICho
YXNTY3JvbGxiYXJzKQotICAgICAgICAgICAgZnJhbWVWaWV3LT5hZGRTY3JvbGxhYmxlQXJlYSh0
aGlzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZnJhbWVWaWV3LT5yZW1vdmVTY3JvbGxh
YmxlQXJlYSh0aGlzKTsKLQotICAgICAgICBmcmFtZVZpZXctPnNldE5lZWRzTGF5b3V0KCk7Ci0g
ICAgfQotfQotCi1QYXNzUmVmUHRyPFNjcm9sbGJhcj4gU2ltcGxlUERGUGx1Z2luOjpjcmVhdGVT
Y3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCi17Ci0gICAgUmVmUHRy
PFNjcm9sbGJhcj4gd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIodGhp
cywgb3JpZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIpOwotICAgIGRpZEFkZFNjcm9sbGJhcih3
aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9uKTsKLSAgICBwbHVnaW5WaWV3KCktPmZyYW1lKCktPnZp
ZXcoKS0+YWRkQ2hpbGQod2lkZ2V0LmdldCgpKTsKLSAgICByZXR1cm4gd2lkZ2V0LnJlbGVhc2Uo
KTsKLX0KLQotdm9pZCBTaW1wbGVQREZQbHVnaW46OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24pCi17Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4mIHNjcm9s
bGJhciA9IG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX2hvcml6b250YWxT
Y3JvbGxiYXIgOiBtX3ZlcnRpY2FsU2Nyb2xsYmFyOwotICAgIGlmICghc2Nyb2xsYmFyKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICB3aWxsUmVtb3ZlU2Nyb2xsYmFyKHNjcm9sbGJhci5nZXQoKSwg
b3JpZW50YXRpb24pOwotICAgIHNjcm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIHNj
cm9sbGJhci0+ZGlzY29ubmVjdEZyb21TY3JvbGxhYmxlQXJlYSgpOwotICAgIHNjcm9sbGJhciA9
IDA7Ci19Ci0KLXZvaWQgU2ltcGxlUERGUGx1Z2luOjphZGRBcmNoaXZlUmVzb3VyY2UoKQotewot
ICAgIC8vIEZJWE1FOiBJdCdzIGEgaGFjayB0byBmb3JjZSBhZGQgYSByZXNvdXJjZSB0byBEb2N1
bWVudExvYWRlci4gUERGIGRvY3VtZW50cyBzaG91bGQganVzdCBiZSBmZXRjaGVkIGFzIENhY2hl
ZFJlc291cmNlcy4KLQotICAgIC8vIEFkZCBqdXN0IGVub3VnaCBkYXRhIGZvciBjb250ZXh0IG1l
bnUgaGFuZGxpbmcgYW5kIHdlYiBhcmNoaXZlcyB0byB3b3JrLgotICAgIFJlc291cmNlUmVzcG9u
c2Ugc3ludGhlc2l6ZWRSZXNwb25zZTsKLSAgICBzeW50aGVzaXplZFJlc3BvbnNlLnNldFN1Z2dl
c3RlZEZpbGVuYW1lKG1fc3VnZ2VzdGVkRmlsZW5hbWUpOwotICAgIHN5bnRoZXNpemVkUmVzcG9u
c2Uuc2V0VVJMKG1fc291cmNlVVJMKTsgLy8gTmVlZHMgdG8gbWF0Y2ggdGhlIEhpdFRlc3RSZXN1
bHQ6OmFic29sdXRlUERGVVJMLgotICAgIHN5bnRoZXNpemVkUmVzcG9uc2Uuc2V0TWltZVR5cGUo
ImFwcGxpY2F0aW9uL3BkZiIpOwotCi0gICAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gcmVzb3Vy
Y2UgPSBBcmNoaXZlUmVzb3VyY2U6OmNyZWF0ZShTaGFyZWRCdWZmZXI6OndyYXBDRkRhdGEobV9k
YXRhLmdldCgpKSwgbV9zb3VyY2VVUkwsICJhcHBsaWNhdGlvbi9wZGYiLCBTdHJpbmcoKSwgU3Ry
aW5nKCksIHN5bnRoZXNpemVkUmVzcG9uc2UpOwotICAgIHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+
ZG9jdW1lbnQoKS0+bG9hZGVyKCktPmFkZEFyY2hpdmVSZXNvdXJjZShyZXNvdXJjZS5yZWxlYXNl
KCkpOwotfQotCi1zdGF0aWMgdm9pZCBqc1BERkRvY0luaXRpYWxpemUoSlNDb250ZXh0UmVmIGN0
eCwgSlNPYmplY3RSZWYgb2JqZWN0KQotewotICAgIFNpbXBsZVBERlBsdWdpbiogcGRmVmlldyA9
IHN0YXRpY19jYXN0PFNpbXBsZVBERlBsdWdpbio+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3Qp
KTsKLSAgICBwZGZWaWV3LT5yZWYoKTsKLX0KLQotc3RhdGljIHZvaWQganNQREZEb2NGaW5hbGl6
ZShKU09iamVjdFJlZiBvYmplY3QpCi17Ci0gICAgU2ltcGxlUERGUGx1Z2luKiBwZGZWaWV3ID0g
c3RhdGljX2Nhc3Q8U2ltcGxlUERGUGx1Z2luKj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkp
OwotICAgIHBkZlZpZXctPmRlcmVmKCk7Ci19Ci0KLUpTVmFsdWVSZWYgU2ltcGxlUERGUGx1Z2lu
Ojpqc1BERkRvY1ByaW50KEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIFNpbXBsZVBE
RlBsdWdpbiogcGRmVmlldyA9IHN0YXRpY19jYXN0PFNpbXBsZVBERlBsdWdpbio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgCi0gICAgV2ViRnJhbWUqIGZyYW1lID0gcGRm
Vmlldy0+bV9mcmFtZTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY3R4KTsKLSAgICAKLSAgICBGcmFtZSogY29yZUZyYW1lID0gZnJhbWUtPmNv
cmVGcmFtZSgpOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY3R4KTsKLSAgICAKLSAgICBQYWdlKiBwYWdlID0gY29yZUZyYW1lLT5wYWdl
KCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y3R4KTsKLSAgICAKLSAgICBwYWdlLT5jaHJvbWUoKS5wcmludChjb3JlRnJhbWUpOwotICAgIAot
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotfQotCi1KU09iamVjdFJlZiBT
aW1wbGVQREZQbHVnaW46Om1ha2VKU1BERkRvYyhKU0NvbnRleHRSZWYgY3R4KQotewotICAgIHN0
YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIGpzUERGRG9jU3RhdGljRnVuY3Rpb25zW10gPSB7Ci0gICAg
ICAgIHsgInByaW50IiwganNQREZEb2NQcmludCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7IDAsIDAsIDAg
fSwKLSAgICB9OwotICAgIAotICAgIHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBqc1BERkRvY0Ns
YXNzRGVmaW5pdGlvbiA9IHsKLSAgICAgICAgMCwKLSAgICAgICAga0pTQ2xhc3NBdHRyaWJ1dGVO
b25lLAotICAgICAgICAiRG9jIiwKLSAgICAgICAgMCwKLSAgICAgICAgMCwKLSAgICAgICAganNQ
REZEb2NTdGF0aWNGdW5jdGlvbnMsCi0gICAgICAgIGpzUERGRG9jSW5pdGlhbGl6ZSwganNQREZE
b2NGaW5hbGl6ZSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAotICAgIH07Ci0gICAgCi0gICAg
c3RhdGljIEpTQ2xhc3NSZWYganNQREZEb2NDbGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmpzUERGRG9j
Q2xhc3NEZWZpbml0aW9uKTsKLSAgICAKLSAgICByZXR1cm4gSlNPYmplY3RNYWtlKGN0eCwganNQ
REZEb2NDbGFzcywgdGhpcyk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJl
Zj4gY29udmVydFBvc3RTY3JpcHREYXRhVG9QREYoUmV0YWluUHRyPENGRGF0YVJlZj4gcG9zdFNj
cmlwdERhdGEpCi17Ci0gICAgLy8gQ29udmVydCBQb3N0U2NyaXB0IHRvIFBERiB1c2luZyB0aGUg
UXVhcnR6IDJEIEFQSS4KLSAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVu
dGF0aW9uL0dyYXBoaWNzSW1hZ2luZy9Db25jZXB0dWFsL2RyYXdpbmd3aXRocXVhcnR6MmQvZHFf
cHNfY29udmVydC9jaGFwdGVyXzE2X3NlY3Rpb25fMS5odG1sCi0KLSAgICBDR1BTQ29udmVydGVy
Q2FsbGJhY2tzIGNhbGxiYWNrcyA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OwotICAgIFJl
dGFpblB0cjxDR1BTQ29udmVydGVyUmVmPiBjb252ZXJ0ZXIgPSBhZG9wdENGKENHUFNDb252ZXJ0
ZXJDcmVhdGUoMCwgJmNhbGxiYWNrcywgMCkpOwotICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRl
clJlZj4gcHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aENGRGF0YShw
b3N0U2NyaXB0RGF0YS5nZXQoKSkpOwotICAgIFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBw
ZGZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQs
IDApKTsKLSAgICBSZXRhaW5QdHI8Q0dEYXRhQ29uc3VtZXJSZWY+IGNvbnN1bWVyID0gYWRvcHRD
RihDR0RhdGFDb25zdW1lckNyZWF0ZVdpdGhDRkRhdGEocGRmRGF0YS5nZXQoKSkpOwotCi0gICAg
Q0dQU0NvbnZlcnRlckNvbnZlcnQoY29udmVydGVyLmdldCgpLCBwcm92aWRlci5nZXQoKSwgY29u
c3VtZXIuZ2V0KCksIDApOwotCi0gICAgcmV0dXJuIHBkZkRhdGE7Ci19Ci0KLXZvaWQgU2ltcGxl
UERGUGx1Z2luOjpwZGZEb2N1bWVudERpZExvYWQoKQotewotICAgIGFkZEFyY2hpdmVSZXNvdXJj
ZSgpOwotCi0gICAgbV9wZGZEb2N1bWVudCA9IGFkb3B0TlMoW1twZGZEb2N1bWVudENsYXNzKCkg
YWxsb2NdIGluaXRXaXRoRGF0YTooTlNEYXRhICopbV9kYXRhLmdldCgpXSk7Ci0KLSAgICBjYWxj
dWxhdGVTaXplcygpOwotICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKLQotICAgIGNvbnRyb2xsZXIo
KS0+aW52YWxpZGF0ZShJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0
KCkpKTsKLQotICAgIHJ1blNjcmlwdHNJblBERkRvY3VtZW50KCk7Ci19Ci0gICAgCi12b2lkIFNp
bXBsZVBERlBsdWdpbjo6cnVuU2NyaXB0c0luUERGRG9jdW1lbnQoKQotewotICAgIFZlY3RvcjxS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+PiBzY3JpcHRzOwotICAgIGdldEFsbFNjcmlwdHNJblBERkRv
Y3VtZW50KFttX3BkZkRvY3VtZW50LmdldCgpIGRvY3VtZW50UmVmXSwgc2NyaXB0cyk7Ci0KLSAg
ICBzaXplX3Qgc2NyaXB0Q291bnQgPSBzY3JpcHRzLnNpemUoKTsKLSAgICBpZiAoIXNjcmlwdENv
dW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBKU0dsb2JhbENvbnRleHRSZWYgY3R4ID0gSlNH
bG9iYWxDb250ZXh0Q3JlYXRlKDApOwotICAgIEpTT2JqZWN0UmVmIGpzUERGRG9jID0gbWFrZUpT
UERGRG9jKGN0eCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNjcmlwdENvdW50OyAr
K2kpIHsKLSAgICAgICAgSlNTdHJpbmdSZWYgc2NyaXB0ID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZT
dHJpbmcoc2NyaXB0c1tpXS5nZXQoKSk7Ci0gICAgICAgIEpTRXZhbHVhdGVTY3JpcHQoY3R4LCBz
Y3JpcHQsIGpzUERGRG9jLCAwLCAwLCAwKTsKLSAgICAgICAgSlNTdHJpbmdSZWxlYXNlKHNjcmlw
dCk7Ci0gICAgfQotCi0gICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjdHgpOwotfQotICAgIAot
dm9pZCBTaW1wbGVQREZQbHVnaW46OmNvbXB1dGVQYWdlQm94ZXMoKQotewotICAgIHNpemVfdCBw
YWdlQ291bnQgPSBDR1BERkRvY3VtZW50R2V0TnVtYmVyT2ZQYWdlcyhbbV9wZGZEb2N1bWVudC5n
ZXQoKSBkb2N1bWVudFJlZl0pOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFnZUNvdW50
OyArK2kpIHsKLSAgICAgICAgQ0dQREZQYWdlUmVmIHBkZlBhZ2UgPSBDR1BERkRvY3VtZW50R2V0
UGFnZShbbV9wZGZEb2N1bWVudC5nZXQoKSBkb2N1bWVudFJlZl0sIGkgKyAxKTsKLSAgICAgICAg
QVNTRVJUKHBkZlBhZ2UpOwotICAgICAgICAKLSAgICAgICAgQ0dSZWN0IGJveCA9IENHUERGUGFn
ZUdldEJveFJlY3QocGRmUGFnZSwga0NHUERGQ3JvcEJveCk7Ci0gICAgICAgIGlmIChDR1JlY3RJ
c0VtcHR5KGJveCkpCi0gICAgICAgICAgICBib3ggPSBDR1BERlBhZ2VHZXRCb3hSZWN0KHBkZlBh
Z2UsIGtDR1BERk1lZGlhQm94KTsKLSAgICAgICAgbV9wYWdlQm94ZXMuYXBwZW5kKEludFJlY3Qo
Ym94KSk7Ci0gICAgfQotfQotCi12b2lkIFNpbXBsZVBERlBsdWdpbjo6Y2FsY3VsYXRlU2l6ZXMo
KQotewotICAgIHNpemVfdCBwYWdlQ291bnQgPSBDR1BERkRvY3VtZW50R2V0TnVtYmVyT2ZQYWdl
cyhbbV9wZGZEb2N1bWVudC5nZXQoKSBkb2N1bWVudFJlZl0pOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcGFnZUNvdW50OyArK2kpIHsKLSAgICAgICAgQ0dQREZQYWdlUmVmIHBkZlBhZ2Ug
PSBDR1BERkRvY3VtZW50R2V0UGFnZShbbV9wZGZEb2N1bWVudC5nZXQoKSBkb2N1bWVudFJlZl0s
IGkgKyAxKTsKLSAgICAgICAgQVNTRVJUKHBkZlBhZ2UpOwotCi0gICAgICAgIENHUmVjdCBib3gg
PSBDR1BERlBhZ2VHZXRCb3hSZWN0KHBkZlBhZ2UsIGtDR1BERkNyb3BCb3gpOwotICAgICAgICBp
ZiAoQ0dSZWN0SXNFbXB0eShib3gpKQotICAgICAgICAgICAgYm94ID0gQ0dQREZQYWdlR2V0Qm94
UmVjdChwZGZQYWdlLCBrQ0dQREZNZWRpYUJveCk7Ci0gICAgICAgIG1fcGFnZUJveGVzLmFwcGVu
ZChJbnRSZWN0KGJveCkpOwotICAgICAgICBtX3BkZkRvY3VtZW50U2l6ZS5zZXRXaWR0aChtYXgo
bV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSwgc3RhdGljX2Nhc3Q8aW50Pihib3guc2l6ZS53aWR0
aCkpKTsKLSAgICAgICAgbV9wZGZEb2N1bWVudFNpemUuZXhwYW5kKDAsIGJveC5zaXplLmhlaWdo
dCk7Ci0gICAgfQotICAgIG1fcGRmRG9jdW1lbnRTaXplLmV4cGFuZCgwLCBndXR0ZXJIZWlnaHQg
KiAobV9wYWdlQm94ZXMuc2l6ZSgpIC0gMSkpOwotfQotCi1ib29sIFNpbXBsZVBERlBsdWdpbjo6
aW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQotewotICAgIC8vIExvYWQg
dGhlIHNyYyBVUkwgaWYgbmVlZGVkLgotICAgIG1fc291cmNlVVJMID0gcGFyYW1ldGVycy51cmw7
Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLnNob3VsZFVzZU1hbnVhbExvYWRlciAmJiAhcGFyYW1ldGVy
cy51cmwuaXNFbXB0eSgpKQotICAgICAgICBjb250cm9sbGVyKCktPmxvYWRVUkwocGRmRG9jdW1l
bnRSZXF1ZXN0SUQsICJHRVQiLCBwYXJhbWV0ZXJzLnVybC5zdHJpbmcoKSwgU3RyaW5nKCksIEhU
VFBIZWFkZXJNYXAoKSwgVmVjdG9yPHVpbnQ4X3Q+KCksIGZhbHNlKTsKLQotICAgIGNvbnRyb2xs
ZXIoKS0+ZGlkSW5pdGlhbGl6ZVBsdWdpbigpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lk
IFNpbXBsZVBERlBsdWdpbjo6ZGVzdHJveSgpCi17Ci0gICAgaWYgKG1fZnJhbWUpIHsKLSAgICAg
ICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9mcmFtZS0+Y29yZUZyYW1lKCktPnZpZXco
KSkKLSAgICAgICAgICAgIGZyYW1lVmlldy0+cmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0g
ICAgfQotCi0gICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICBk
ZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLX0KLQotdm9pZCBTaW1wbGVQREZQ
bHVnaW46OnBhaW50KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgY29udGVudEFyZWFXaWxsUGFpbnQoKTsKLQotICAgIHBh
aW50QmFja2dyb3VuZChncmFwaGljc0NvbnRleHQsIGRpcnR5UmVjdCk7Ci0KLSAgICBpZiAoIW1f
cGRmRG9jdW1lbnQpIC8vIEZJWE1FOiBEcmF3IGxvYWRpbmcgcHJvZ3Jlc3MuCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHBhaW50Q29udGVudChncmFwaGljc0NvbnRleHQsIGRpcnR5UmVjdCk7Ci0g
ICAgcGFpbnRDb250cm9scyhncmFwaGljc0NvbnRleHQsIGRpcnR5UmVjdCk7Ci19Ci0KLXZvaWQg
U2ltcGxlUERGUGx1Z2luOjpwYWludEJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGlj
c0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmdyYXBoaWNzQ29udGV4dCk7Ci0gICAgZ3JhcGhpY3ND
b250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OmdyYXksIENvbG9yU3BhY2VEZXZpY2VSR0IpOwot
ICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QoZGlydHlSZWN0KTsKLX0KLQotdm9pZCBTaW1w
bGVQREZQbHVnaW46OnBhaW50Q29udGVudChHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4
dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcigqZ3JhcGhpY3NDb250ZXh0KTsKLSAgICBDR0NvbnRleHRSZWYgY29u
dGV4dCA9IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBncmFwaGlj
c0NvbnRleHQtPnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvbkhpZ2gp
OwotICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U2hvdWxkQW50aWFsaWFzKHRydWUpOwotICAgIGdy
YXBoaWNzQ29udGV4dC0+c2V0U2hvdWxkU21vb3RoRm9udHModHJ1ZSk7Ci0gICAgZ3JhcGhpY3ND
b250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OndoaXRlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsK
LQotICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xpcChkaXJ0eVJlY3QpOwotICAgIEludFJlY3QgY29u
dGVudFJlY3QoZGlydHlSZWN0KTsKLSAgICBjb250ZW50UmVjdC5tb3ZlQnkoSW50UG9pbnQobV9z
Y3JvbGxPZmZzZXQpKTsKLSAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtbV9zY3JvbGxP
ZmZzZXQud2lkdGgoKSwgLW1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKTsKLQotICAgIENHQ29udGV4
dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKLQotICAgIGludCBwYWdlVG9wID0gMDsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGFnZUJveGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IEludFJlY3QgcGFnZUJveCA9IG1fcGFnZUJveGVzW2ldOwotICAgICAgICBmbG9hdCBleHRyYU9m
ZnNldEZvckNlbnRlcmluZ1ggPSBtYXgocm91bmRmKChtX3NpemUud2lkdGgoKSAtIHBhZ2VCb3gu
d2lkdGgoKSkgLyAyLjBmKSwgMC4wZik7Ci0gICAgICAgIGZsb2F0IGV4dHJhT2Zmc2V0Rm9yQ2Vu
dGVyaW5nWSA9IChtX3BhZ2VCb3hlcy5zaXplKCkgPT0gMSkgPyBtYXgocm91bmRmKChtX3NpemUu
aGVpZ2h0KCkgLSBwYWdlQm94LmhlaWdodCgpICsgc2hhZG93T2Zmc2V0WSkgLyAyLjBmKSwgMC4w
ZikgOiAwOwotCi0gICAgICAgIGlmIChwYWdlVG9wID4gY29udGVudFJlY3QubWF4WSgpKQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChwYWdlVG9wICsgcGFnZUJveC5oZWlnaHQoKSAr
IGV4dHJhT2Zmc2V0Rm9yQ2VudGVyaW5nWSArIGd1dHRlckhlaWdodCA+PSBjb250ZW50UmVjdC55
KCkpIHsKLSAgICAgICAgICAgIENHUERGUGFnZVJlZiBwZGZQYWdlID0gQ0dQREZEb2N1bWVudEdl
dFBhZ2UoW21fcGRmRG9jdW1lbnQuZ2V0KCkgZG9jdW1lbnRSZWZdLCBpICsgMSk7Ci0KLSAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LT50cmFuc2xhdGUoZXh0cmFPZmZzZXRGb3JDZW50ZXJpbmdYIC0gcGFnZUJveC54KCksIC1l
eHRyYU9mZnNldEZvckNlbnRlcmluZ1kgLSBwYWdlQm94LnkoKSAtIHBhZ2VCb3guaGVpZ2h0KCkp
OwotCi0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFNoYWRvdyhGbG9hdFNpemUoc2hh
ZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd1NpemUsIENvbG9yOjpibGFjaywgQ29s
b3JTcGFjZURldmljZVJHQik7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmZpbGxSZWN0
KHBhZ2VCb3gpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5jbGVhclNoYWRvdygpOwot
Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmNsaXAocGFnZUJveCk7Ci0KLSAgICAgICAg
ICAgIENHQ29udGV4dERyYXdQREZQYWdlKGNvbnRleHQsIHBkZlBhZ2UpOwotICAgICAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcGFnZVRvcCAr
PSBwYWdlQm94LmhlaWdodCgpICsgZ3V0dGVySGVpZ2h0OwotICAgICAgICBDR0NvbnRleHRUcmFu
c2xhdGVDVE0oY29udGV4dCwgMCwgLXBhZ2VCb3guaGVpZ2h0KCkgLSBndXR0ZXJIZWlnaHQpOwot
ICAgIH0KLX0KLQotdm9pZCBTaW1wbGVQREZQbHVnaW46OnBhaW50Q29udHJvbHMoR3JhcGhpY3ND
b250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAg
ICB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqZ3JhcGhp
Y3NDb250ZXh0KTsKLSAgICAgICAgSW50UmVjdCBzY3JvbGxiYXJEaXJ0eVJlY3QgPSBkaXJ0eVJl
Y3Q7Ci0gICAgICAgIHNjcm9sbGJhckRpcnR5UmVjdC5tb3ZlQnkocGx1Z2luVmlldygpLT5mcmFt
ZVJlY3QoKS5sb2NhdGlvbigpKTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUo
LXBsdWdpblZpZXcoKS0+ZnJhbWVSZWN0KCkueCgpLCAtcGx1Z2luVmlldygpLT5mcmFtZVJlY3Qo
KS55KCkpOwotCi0gICAgICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgICAg
ICBtX2hvcml6b250YWxTY3JvbGxiYXItPnBhaW50KGdyYXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFy
RGlydHlSZWN0KTsKLQotICAgICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAg
ICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnBhaW50KGdyYXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFy
RGlydHlSZWN0KTsKLSAgICB9Ci0KLSAgICBJbnRSZWN0IGRpcnR5Q29ybmVyUmVjdCA9IGludGVy
c2VjdGlvbihzY3JvbGxDb3JuZXJSZWN0KCksIGRpcnR5UmVjdCk7Ci0gICAgU2Nyb2xsYmFyVGhl
bWU6OnRoZW1lKCktPnBhaW50U2Nyb2xsQ29ybmVyKDAsIGdyYXBoaWNzQ29udGV4dCwgZGlydHlD
b3JuZXJSZWN0KTsKLX0KLQotdm9pZCBTaW1wbGVQREZQbHVnaW46OnVwZGF0ZUNvbnRyb2xUaW50
cyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCkKLXsKLSAgICBBU1NFUlQoZ3JhcGhp
Y3NDb250ZXh0LT51cGRhdGluZ0NvbnRyb2xUaW50cygpKTsKLQotICAgIGlmIChtX2hvcml6b250
YWxTY3JvbGxiYXIpCi0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgp
OwotICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xs
YmFyLT5pbnZhbGlkYXRlKCk7Ci0gICAgaW52YWxpZGF0ZVNjcm9sbENvcm5lcihzY3JvbGxDb3Ju
ZXJSZWN0KCkpOwotfQotCi1QYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gU2ltcGxlUERGUGx1
Z2luOjpzbmFwc2hvdCgpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLSNpZiBQTEFURk9STShNQUMp
Ci1QbGF0Zm9ybUxheWVyKiBTaW1wbGVQREZQbHVnaW46OnBsdWdpbkxheWVyKCkKLXsKLSAgICBy
ZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0KLWJvb2wgU2ltcGxlUERGUGx1Z2luOjppc1RyYW5zcGFy
ZW50KCkKLXsKLSAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgZnJvbSB0aGUgd2Vi
IHByb2Nlc3MuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIFNpbXBsZVBERlBsdWdpbjo6d2FudHNXaGVlbEV2ZW50cygpCi17Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXZvaWQgU2ltcGxlUERGUGx1Z2luOjpnZW9tZXRyeURpZENoYW5nZShj
b25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtKQotewotICAgIGlmIChtX3NpemUg
PT0gc2l6ZSkgewotICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgbV9zaXplID0gc2l6ZTsKLSAgICB1cGRhdGVTY3JvbGxiYXJzKCk7Ci19Ci0K
LXZvaWQgU2ltcGxlUERGUGx1Z2luOjp2aXNpYmlsaXR5RGlkQ2hhbmdlKCkKLXsKLX0KLQotdm9p
ZCBTaW1wbGVQREZQbHVnaW46OmZyYW1lRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCkKLXsKLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBTaW1wbGVQREZQbHVnaW46OmZyYW1l
RGlkRmFpbCh1aW50NjRfdCwgYm9vbCkKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0K
LQotdm9pZCBTaW1wbGVQREZQbHVnaW46OmRpZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRfdCwg
Y29uc3QgV1RGOjpTdHJpbmcmKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12
b2lkIFNpbXBsZVBERlBsdWdpbjo6Y29udmVydFBvc3RTY3JpcHREYXRhSWZOZWVkZWQoKQotewot
ICAgIGlmICghbV9pc1Bvc3RTY3JpcHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3VnZ2Vz
dGVkRmlsZW5hbWUgPSBTdHJpbmcobV9zdWdnZXN0ZWRGaWxlbmFtZSArICIucGRmIik7Ci0gICAg
bV9kYXRhID0gY29udmVydFBvc3RTY3JpcHREYXRhVG9QREYobV9kYXRhKTsKLX0KLQotdm9pZCBT
aW1wbGVQREZQbHVnaW46OnN0cmVhbURpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBzdHJlYW1J
RCwgY29uc3QgVVJMJiwgdWludDMyX3QsIHVpbnQzMl90LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQotewotICAg
IEFTU0VSVF9VTlVTRUQoc3RyZWFtSUQsIHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElE
KTsKLQotICAgIG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0ZWRGaWxlbmFtZTsKLQotICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShtaW1lVHlwZSwgcG9zdFNjcmlwdE1JTUVUeXBlKSkKLSAg
ICAgICAgbV9pc1Bvc3RTY3JpcHQgPSB0cnVlOwotfQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAotdm9pZCBTaW1wbGVQREZQbHVnaW46OnN0cmVhbURpZFJlY2Vp
dmVEYXRhKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCkK
LXsKLSAgICBBU1NFUlRfVU5VU0VEKHN0cmVhbUlELCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVudFJl
cXVlc3RJRCk7Ci0KLSAgICBpZiAoIW1fZGF0YSkKLSAgICAgICAgbV9kYXRhID0gYWRvcHRDRihD
RkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApKTsKLQotICAgIENGRGF0YUFwcGVuZEJ5dGVzKG1fZGF0
YS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGJ5dGVzKSwgbGVuZ3RoKTsK
LX0KLQotdm9pZCBTaW1wbGVQREZQbHVnaW46OnN0cmVhbURpZEZpbmlzaExvYWRpbmcodWludDY0
X3Qgc3RyZWFtSUQpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChzdHJlYW1JRCwgc3RyZWFtSUQgPT0g
cGRmRG9jdW1lbnRSZXF1ZXN0SUQpOwotCi0gICAgY29udmVydFBvc3RTY3JpcHREYXRhSWZOZWVk
ZWQoKTsKLSAgICBwZGZEb2N1bWVudERpZExvYWQoKTsKLX0KLQotdm9pZCBTaW1wbGVQREZQbHVn
aW46OnN0cmVhbURpZEZhaWwodWludDY0X3Qgc3RyZWFtSUQsIGJvb2wgd2FzQ2FuY2VsbGVkKQot
ewotICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtSUQsIHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVx
dWVzdElEKTsKLQotICAgIG1fZGF0YS5jbGVhcigpOwotfQotCi12b2lkIFNpbXBsZVBERlBsdWdp
bjo6bWFudWFsU3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFVSTCYgcmVzcG9uc2VVUkws
IHVpbnQzMl90IHN0cmVhbUxlbmd0aCwgIHVpbnQzMl90IGxhc3RNb2RpZmllZFRpbWUsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgaGVhZGVycywgY29uc3QgU3RyaW5nJiBz
dWdnZXN0ZWRGaWxlbmFtZSkKLXsKLSAgICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVk
RmlsZW5hbWU7Ci0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobWltZVR5cGUsIHBvc3RTY3Jp
cHRNSU1FVHlwZSkpCi0gICAgICAgIG1faXNQb3N0U2NyaXB0ID0gdHJ1ZTsKLX0KLQotdm9pZCBT
aW1wbGVQREZQbHVnaW46Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGJ5
dGVzLCBpbnQgbGVuZ3RoKQotewotICAgIGlmICghbV9kYXRhKQotICAgICAgICBtX2RhdGEgPSBh
ZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOwotCi0gICAgQ0ZEYXRhQXBwZW5kQnl0
ZXMobV9kYXRhLmdldCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oYnl0ZXMpLCBs
ZW5ndGgpOwotfQotCi12b2lkIFNpbXBsZVBERlBsdWdpbjo6bWFudWFsU3RyZWFtRGlkRmluaXNo
TG9hZGluZygpCi17Ci0gICAgY29udmVydFBvc3RTY3JpcHREYXRhSWZOZWVkZWQoKTsKLSAgICBw
ZGZEb2N1bWVudERpZExvYWQoKTsKLX0KLQotTlNEYXRhICpTaW1wbGVQREZQbHVnaW46OmxpdmVE
YXRhKCkgY29uc3QKLXsKLSAgICAvLyBTYXZlIGRhdGEgc3RyYWlnaHQgZnJvbSB0aGUgcmVzb3Vy
Y2UgaW5zdGVhZCBvZiBQREZLaXQgaWYgdGhlIGRvY3VtZW50IGlzCi0gICAgLy8gdW50b3VjaGVk
IGJ5IHRoZSB1c2VyLCBzbyB0aGF0IFBERnMgd2hpY2ggUERGS2l0IGNhbid0IGRpc3BsYXkgd2ls
bCBzdGlsbCBiZSBkb3dubG9hZGFibGUuCi0gICAgaWYgKHBkZkRvY3VtZW50V2FzTXV0YXRlZCgp
KQotICAgICAgICByZXR1cm4gW21fcGRmRG9jdW1lbnQuZ2V0KCkgZGF0YVJlcHJlc2VudGF0aW9u
XTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiByYXdEYXRhKCk7Ci19Ci0KLVBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiBTaW1wbGVQREZQbHVnaW46OmxpdmVSZXNvdXJjZURhdGEoKSBjb25zdAot
ewotICAgIE5TRGF0YSAqcGRmRGF0YSA9IGxpdmVEYXRhKCk7Ci0KLSAgICBpZiAoIXBkZkRhdGEp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6d3JhcE5TRGF0
YShwZGZEYXRhKTsKLX0KLQotdm9pZCBTaW1wbGVQREZQbHVnaW46Om1hbnVhbFN0cmVhbURpZEZh
aWwoYm9vbCkKLXsKLSAgICBtX2RhdGEuY2xlYXIoKTsKLX0KLQotYm9vbCBTaW1wbGVQREZQbHVn
aW46OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgZXZlbnQpCi17Ci0gICAg
c3dpdGNoIChldmVudC50eXBlKCkpIHsKLSAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZU1vdmU6Ci0g
ICAgICAgIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCk7Ci0gICAgICAgIC8vIEZJWE1FOiBTaG91
bGQgYWxzbyBub3RpZnkgc2Nyb2xsYmFyIHRvIHNob3cgaG92ZXIgZWZmZWN0LiBTaG91bGQgYWxz
byBzZW5kIG1vdXNlRXhpdGVkIHRvIGhpZGUgaXQuCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
V2ViRXZlbnQ6Ok1vdXNlRG93bjogewotICAgICAgICAvLyBSZXR1cm5pbmcgZmFsc2UgYXMgd2ls
bCBtYWtlIEV2ZW50SGFuZGxlciB1bmZvY3VzIHRoZSBwbHVnLWluLCB3aGljaCBpcyBhcHByb3By
aWF0ZSB3aGVuIGNsaWNraW5nIHNjcm9sbGJhcnMuCi0gICAgICAgIC8vIElkZWFsbHksIHdlIHdv
dWxkbid0IGNoYW5nZSBmb2N1cyBhdCBhbGwsIGJ1dCBQbHVnaW5WaWV3IGFscmVhZHkgZGlkIHRo
YXQgZm9yIHVzLgotICAgICAgICAvLyBXaGVuIHN1cHBvcnQgZm9yIFBERiBmb3JtcyBpcyBhZGRl
ZCwgd2UnbGwgbmVlZCB0byBhY3R1YWxseSBmb2N1cyB0aGUgcGx1Zy1pbiB3aGVuIGNsaWNraW5n
IGluIGEgZm9ybS4KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgV2ViRXZlbnQ6Ok1v
dXNlVXA6IHsKLSAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IHBsYXRmb3JtRXZlbnQgPSBwbGF0
Zm9ybShldmVudCk7Ci0gICAgICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAg
ICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPm1vdXNlVXAocGxhdGZvcm1FdmVudCk7Ci0gICAg
ICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9s
bGJhci0+bW91c2VVcChwbGF0Zm9ybUV2ZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1ib29sIFNpbXBsZVBERlBsdWdpbjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBX
ZWJXaGVlbEV2ZW50JiBldmVudCkKLXsKLSAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgcGxhdGZvcm1F
dmVudCA9IHBsYXRmb3JtKGV2ZW50KTsKLSAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRs
ZVdoZWVsRXZlbnQocGxhdGZvcm1FdmVudCk7Ci19Ci0KLWJvb2wgU2ltcGxlUERGUGx1Z2luOjpo
YW5kbGVNb3VzZUVudGVyRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpCi17Ci0gICAgbW91c2VF
bnRlcmVkQ29udGVudEFyZWEoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgU2ltcGxl
UERGUGx1Z2luOjpoYW5kbGVNb3VzZUxlYXZlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpCi17
Ci0gICAgbW91c2VFeGl0ZWRDb250ZW50QXJlYSgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBTaW1wbGVQREZQbHVnaW46OmhhbmRsZUNvbnRleHRNZW51RXZlbnQoY29uc3QgV2ViTW91
c2VFdmVudCYpCi17Ci0gICAgLy8gVXNlIGRlZmF1bHQgV2ViS2l0IGNvbnRleHQgbWVudS4KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgU2ltcGxlUERGUGx1Z2luOjpoYW5kbGVLZXlib2Fy
ZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKQotewotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotdm9pZCBTaW1wbGVQREZQbHVnaW46OnNldEZvY3VzKGJvb2wgaGFzRm9jdXMpCi17Ci19Ci0K
LU5QT2JqZWN0KiBTaW1wbGVQREZQbHVnaW46OnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgpCi17
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLSNpZiBQTEFURk9STShNQUMpCi0KLXZvaWQgU2ltcGxlUERG
UGx1Z2luOjp3aW5kb3dGb2N1c0NoYW5nZWQoYm9vbCkKLXsKLX0KLQotdm9pZCBTaW1wbGVQREZQ
bHVnaW46OndpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
dmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcykKLXsKLX0KLQotdm9pZCBTaW1wbGVQREZQbHVn
aW46OndpbmRvd1Zpc2liaWxpdHlDaGFuZ2VkKGJvb2wpCi17Ci19Ci0KLXZvaWQgU2ltcGxlUERG
UGx1Z2luOjpjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdlZChmbG9hdCkKLXsKLX0KLQotdWludDY0
X3QgU2ltcGxlUERGUGx1Z2luOjpwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgU2ltcGxlUERGUGx1Z2luOjpzZW5kQ29t
cGxleFRleHRJbnB1dChjb25zdCBTdHJpbmcmKQotewotfQotCi12b2lkIFNpbXBsZVBERlBsdWdp
bjo6c2V0TGF5ZXJIb3N0aW5nTW9kZShMYXllckhvc3RpbmdNb2RlKQotewotfQotCi0jZW5kaWYK
LQotdm9pZCBTaW1wbGVQREZQbHVnaW46OnN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZChib29s
KQotewotfQotCi12b2lkIFNpbXBsZVBERlBsdWdpbjo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFu
Z2VkKGJvb2wpCi17Ci19Ci0KLWJvb2wgU2ltcGxlUERGUGx1Z2luOjpnZXRGb3JtVmFsdWUoU3Ry
aW5nJikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgU2ltcGxlUERGUGx1Z2luOjpo
YW5kbGVTY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHkpCi17Ci0gICAgcmV0dXJuIHNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5
KTsKLX0KLQotU2Nyb2xsYmFyKiBTaW1wbGVQREZQbHVnaW46Omhvcml6b250YWxTY3JvbGxiYXIo
KQotewotICAgIHJldHVybiBtX2hvcml6b250YWxTY3JvbGxiYXIuZ2V0KCk7Ci19Ci0KLVNjcm9s
bGJhciogU2ltcGxlUERGUGx1Z2luOjp2ZXJ0aWNhbFNjcm9sbGJhcigpCi17Ci0gICAgcmV0dXJu
IG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7Ci19Ci0KLUludFJlY3QgU2ltcGxlUERGUGx1Z2lu
OjpzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QKLXsKLSAgICBpZiAoIW1faG9yaXpvbnRhbFNjcm9s
bGJhciB8fCAhbV92ZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsK
LSAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgewot
ICAgICAgICBBU1NFUlQobV92ZXJ0aWNhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkp
OwotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIH0KLSAgICByZXR1cm4gSW50UmVjdChw
bHVnaW5WaWV3KCktPndpZHRoKCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBwbHVn
aW5WaWV3KCktPmhlaWdodCgpIC0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSwgbV92
ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQo
KSk7Ci19Ci0KLVNjcm9sbGFibGVBcmVhKiBTaW1wbGVQREZQbHVnaW46OmVuY2xvc2luZ1Njcm9s
bGFibGVBcmVhKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogV2FsayB1cCB0aGUgZnJhbWUgdHJl
ZSBhbmQgbG9vayBmb3IgYSBzY3JvbGxhYmxlIHBhcmVudCBmcmFtZSBvciBSZW5kZXJMYXllci4K
LSAgICByZXR1cm4gMDsKLX0KLQotSW50UmVjdCBTaW1wbGVQREZQbHVnaW46OnNjcm9sbGFibGVB
cmVhQm91bmRpbmdCb3goKSBjb25zdAotewotICAgIHJldHVybiBwbHVnaW5WaWV3KCktPmZyYW1l
UmVjdCgpOwotfQotCi12b2lkIFNpbXBsZVBERlBsdWdpbjo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0
IEludFBvaW50JiBvZmZzZXQpCi17Ci0gICAgbV9zY3JvbGxPZmZzZXQgPSBJbnRTaXplKG9mZnNl
dC54KCksIG9mZnNldC55KCkpOwotICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBiZXR0ZXIgZm9y
IHBlcmZvcm1hbmNlIHRvIGJsaXQgcGFydHMgdGhhdCByZW1haW4gdmlzaWJsZS4KLSAgICBjb250
cm9sbGVyKCktPmludmFsaWRhdGUoSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXpl
LmhlaWdodCgpKSk7Ci19Ci0KLWludCBTaW1wbGVQREZQbHVnaW46OnNjcm9sbFNpemUoU2Nyb2xs
YmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Ci17Ci0gICAgU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIgPSAoKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpID8gbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyIDogbV92ZXJ0aWNhbFNjcm9sbGJhcikuZ2V0KCk7Ci0gICAgcmV0dXJuIHNj
cm9sbGJhciA/IChzY3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0gc2Nyb2xsYmFyLT52aXNpYmxlU2l6
ZSgpKSA6IDA7Ci19Ci0KLWJvb2wgU2ltcGxlUERGUGx1Z2luOjppc0FjdGl2ZSgpIGNvbnN0Ci17
Ci0gICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKSkgewotICAg
ICAgICBpZiAoUGFnZSogcGFnZSA9IGNvcmVGcmFtZS0+cGFnZSgpKQotICAgICAgICAgICAgcmV0
dXJuIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmlzQWN0aXZlKCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi12b2lkIFNpbXBsZVBERlBsdWdpbjo6aW52YWxpZGF0ZVNjcm9sbGJh
clJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAg
SW50UmVjdCBkaXJ0eVJlY3QgPSByZWN0OwotICAgIGRpcnR5UmVjdC5tb3ZlQnkoc2Nyb2xsYmFy
LT5sb2NhdGlvbigpKTsKLSAgICBkaXJ0eVJlY3QubW92ZUJ5KC1wbHVnaW5WaWV3KCktPmxvY2F0
aW9uKCkpOwotICAgIGNvbnRyb2xsZXIoKS0+aW52YWxpZGF0ZShkaXJ0eVJlY3QpOwotfQotCi12
b2lkIFNpbXBsZVBERlBsdWdpbjo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50
UmVjdCYgcmVjdCkKLXsKLSAgICBjb250cm9sbGVyKCktPmludmFsaWRhdGUocmVjdCk7Ci19Ci0K
LWJvb2wgU2ltcGxlUERGUGx1Z2luOjppc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdAotewot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotaW50IFNpbXBsZVBERlBsdWdpbjo6c2Nyb2xsUG9zaXRp
b24oU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0Ci17Ci0gICAgaWYgKHNjcm9sbGJhci0+b3Jp
ZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICByZXR1cm4gbV9zY3Jv
bGxPZmZzZXQud2lkdGgoKTsKLSAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZl
cnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICByZXR1cm4gbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCk7
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUludFBvaW50
IFNpbXBsZVBERlBsdWdpbjo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBJ
bnRQb2ludChtX3Njcm9sbE9mZnNldC53aWR0aCgpLCBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKSk7
Ci19Ci0KLUludFBvaW50IFNpbXBsZVBERlBsdWdpbjo6bWluaW11bVNjcm9sbFBvc2l0aW9uKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gSW50UG9pbnQoMCwgMCk7Ci19Ci0KLUludFBvaW50IFNpbXBs
ZVBERlBsdWdpbjo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKLXsKLSAgICBpbnQgaG9y
aXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IChtX2hvcml6b250YWxTY3JvbGxiYXIgJiYgIW1faG9y
aXpvbnRhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpID8gbV9ob3Jpem9udGFsU2Ny
b2xsYmFyLT5oZWlnaHQoKSA6IDA7Ci0gICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSAo
bV92ZXJ0aWNhbFNjcm9sbGJhciAmJiAhbV92ZXJ0aWNhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Ny
b2xsYmFyKCkpID8gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSA6IDA7Ci0KLSAgICBJbnRQ
b2ludCBtYXhpbXVtT2Zmc2V0KG1fcGRmRG9jdW1lbnRTaXplLndpZHRoKCkgLSBtX3NpemUud2lk
dGgoKSArIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgsIG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgp
IC0gbV9zaXplLmhlaWdodCgpICsgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk7Ci0gICAgbWF4
aW11bU9mZnNldC5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7Ci0gICAgcmV0dXJuIG1heGltdW1PZmZz
ZXQ7Ci19Ci0KLWludCBTaW1wbGVQREZQbHVnaW46OnZpc2libGVIZWlnaHQoKSBjb25zdAotewot
ICAgIHJldHVybiBtX3NpemUuaGVpZ2h0KCk7Ci19Ci0KLWludCBTaW1wbGVQREZQbHVnaW46OnZp
c2libGVXaWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOwotfQotCi1J
bnRTaXplIFNpbXBsZVBERlBsdWdpbjo6Y29udGVudHNTaXplKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9wZGZEb2N1bWVudFNpemU7Ci19Ci0KLWJvb2wgU2ltcGxlUERGUGx1Z2luOjpzY3JvbGxi
YXJzQ2FuQmVBY3RpdmUoKSBjb25zdAotewotICAgIHJldHVybiAhcGx1Z2luVmlldygpLT5mcmFt
ZSgpLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpOwotfQotCi12b2lkIFNpbXBsZVBERlBsdWdp
bjo6c2Nyb2xsYmFyU3R5bGVDaGFuZ2VkKGludCwgYm9vbCBmb3JjZVVwZGF0ZSkKLXsKLSAgICBp
ZiAoIWZvcmNlVXBkYXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB0aGUgUERGIHdh
cyBzY3JvbGxlZCBhbGwgdGhlIHdheSB0byBib3R0b20gcmlnaHQgYW5kIHNjcm9sbGJhcnMgY2hh
bmdlIHRvIG92ZXJsYXkgc3R5bGUsIHdlIGRvbid0IHdhbnQgdG8gZGlzcGxheSB3aGl0ZSByZWN0
YW5nbGVzIHdoZXJlIHNjcm9sbGJhcnMgd2VyZS4KLSAgICBJbnRQb2ludCBuZXdTY3JvbGxPZmZz
ZXQgPSBJbnRQb2ludChtX3Njcm9sbE9mZnNldCkuc2hydW5rVG8obWF4aW11bVNjcm9sbFBvc2l0
aW9uKCkpOwotICAgIHNldFNjcm9sbE9mZnNldChuZXdTY3JvbGxPZmZzZXQpOwotCi0gICAgLy8g
QXMgc2l6ZSBvZiB0aGUgY29udGVudCBhcmVhIGNoYW5nZXMsIHNjcm9sbGJhcnMgbWF5IG5lZWQg
dG8gYXBwZWFyIG9yIHRvIGRpc2FwcGVhci4KLSAgICB1cGRhdGVTY3JvbGxiYXJzKCk7Ci0KLSAg
ICBTY3JvbGxhYmxlQXJlYTo6Y29udGVudHNSZXNpemVkKCk7Ci19Ci0KLUludFJlY3QgU2ltcGxl
UERGUGx1Z2luOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Ny
b2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHNjcm9sbGJhclJlY3QpIGNvbnN0Ci17
Ci0gICAgSW50UmVjdCByZWN0ID0gc2Nyb2xsYmFyUmVjdDsKLSAgICByZWN0Lm1vdmUoc2Nyb2xs
YmFyLT5sb2NhdGlvbigpIC0gcGx1Z2luVmlldygpLT5sb2NhdGlvbigpKTsKLSAgICAKLSAgICBy
ZXR1cm4gcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmNvbnZlcnRGcm9tUmVuZGVyZXIo
cGx1Z2luVmlldygpLT5yZW5kZXJlcigpLCByZWN0KTsKLX0KLQotSW50UmVjdCBTaW1wbGVQREZQ
bHVnaW46OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxi
YXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKLXsKLSAgICBJ
bnRSZWN0IHJlY3QgPSBwbHVnaW5WaWV3KCktPmZyYW1lKCktPnZpZXcoKS0+Y29udmVydFRvUmVu
ZGVyZXIocGx1Z2luVmlldygpLT5yZW5kZXJlcigpLCBwYXJlbnRSZWN0KTsKLSAgICByZWN0Lm1v
dmUocGx1Z2luVmlldygpLT5sb2NhdGlvbigpIC0gc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKLSAg
ICAKLSAgICByZXR1cm4gcmVjdDsKLX0KLQotSW50UG9pbnQgU2ltcGxlUERGUGx1Z2luOjpjb252
ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxi
YXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKLXsKLSAgICBJbnRQb2lu
dCBwb2ludCA9IHNjcm9sbGJhclBvaW50OwotICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFyLT5sb2Nh
dGlvbigpIC0gcGx1Z2luVmlldygpLT5sb2NhdGlvbigpKTsKLSAgICAKLSAgICByZXR1cm4gcGx1
Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmNvbnZlcnRGcm9tUmVuZGVyZXIocGx1Z2luVmll
dygpLT5yZW5kZXJlcigpLCBwb2ludCk7Ci19Ci0KLUludFBvaW50IFNpbXBsZVBERlBsdWdpbjo6
Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Ny
b2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0Ci17Ci0gICAgSW50UG9p
bnQgcG9pbnQgPSBwbHVnaW5WaWV3KCktPmZyYW1lKCktPnZpZXcoKS0+Y29udmVydFRvUmVuZGVy
ZXIocGx1Z2luVmlldygpLT5yZW5kZXJlcigpLCBwYXJlbnRQb2ludCk7Ci0gICAgcG9pbnQubW92
ZShwbHVnaW5WaWV3KCktPmxvY2F0aW9uKCkgLSBzY3JvbGxiYXItPmxvY2F0aW9uKCkpOwotICAg
IAotICAgIHJldHVybiBwb2ludDsKLX0KLQotYm9vbCBTaW1wbGVQREZQbHVnaW46OmlzRWRpdGlu
Z0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIFNpbXBsZVBERlBsdWdpbjo6aGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5n
JiwgY29uc3QgU3RyaW5nJikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0gICAgCi1ib29sIFNp
bXBsZVBERlBsdWdpbjo6aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpCi17Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYlByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5WaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHAJKHJldmlzaW9uIDE1OTY1MSkKKysrIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5W
aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgyLDkgKzU4MiwxMSBAQAogewogICAgIG1fcGx1
Z2luID0gMDsKIAorI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIFN0cmluZyBm
cmFtZVVSTFN0cmluZyA9IGZyYW1lKCktPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCktPnJlc3Bv
bnNlVVJMKCkuc3RyaW5nKCk7CiAgICAgU3RyaW5nIHBhZ2VVUkxTdHJpbmcgPSBtX3dlYlBhZ2Ut
PmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCktPnJlc3Bv
bnNlVVJMKCkuc3RyaW5nKCk7CiAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkRpZEZhaWxUb0luaXRpYWxpemVQbHVnaW4obV9wYXJhbWV0ZXJzLm1pbWVUeXBlLCBm
cmFtZVVSTFN0cmluZywgcGFnZVVSTFN0cmluZykpOworI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQogfQogCiB2b2lkIFBsdWdpblZpZXc6OmRpZEluaXRpYWxpemVQbHVnaW4o
KQpJbmRleDogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJBbHRlcm5hdGl2ZVRleHRDbGll
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkFsdGVybmF0
aXZlVGV4dENsaWVudC5oCShyZXZpc2lvbiAxNTk2NTEpCisrKyBXZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkFsdGVybmF0aXZlVGV4dENsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3
ICs1MCwxNiBAQAogICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gZGljdGF0aW9uQWx0ZXJuYXRp
dmVzKHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQpIE9WRVJSSURFOwogI2VuZGlmCiBwcml2YXRl
OgorI2lmIFBMQVRGT1JNKElPUykKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjaWYg
ZGVmaW5lZChfX2hhc193YXJuaW5nKSAmJiBfX2hhc193YXJuaW5nKCItV3VudXNlZC1wcml2YXRl
LWZpZWxkIikKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1wcml2
YXRlLWZpZWxkIgorI2VuZGlmCisjZW5kaWYKICAgICBXZWJQYWdlICptX3BhZ2U7CisjaWYgUExB
VEZPUk0oSU9TKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCiB9OwogCiB9
CkluZGV4OiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3Bw
CShyZXZpc2lvbiAxNTk2NTEpCisrKyBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4OCw4ICs0ODgsMTEgQEAKICAgICBpZiAo
bV9wYWdlLT51c2VGaXhlZExheW91dCgpKQogICAgICAgICBtX3BhZ2UtPmRyYXdpbmdBcmVhKCkt
PmxheWVyVHJlZUhvc3QoKS0+c2l6ZURpZENoYW5nZShzaXplKTsKIAotICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRDaGFuZ2VDb250ZW50c1NpemUoc2l6ZSkpOwor
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRDaGFuZ2VDb250ZW50
U2l6ZShzaXplKSk7CiAjZW5kaWYKKyNpZiBQTEFURk9STShJT1MpCisgICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZENoYW5nZUNvbnRlbnRTaXplKHNpemUpKTsKKyNl
bmRpZgogCiAgICAgbV9wYWdlLT5kcmF3aW5nQXJlYSgpLT5tYWluRnJhbWVDb250ZW50U2l6ZUNo
YW5nZWQoc2l6ZSk7CiAKQEAgLTUzMyw2ICs1MzYsNyBAQAogICAgIAogdm9pZCBXZWJDaHJvbWVD
bGllbnQ6OnVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZChFbGVtZW50KiBlbGVtZW50LCBS
ZW5kZXJFbWJlZGRlZE9iamVjdDo6UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24gcGx1Z2luVW5h
dmFpbGFiaWxpdHlSZWFzb24pIGNvbnN0CiB7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCiAgICAgQVNTRVJUKGVsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSB8fCBlbGVtZW50
LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykp
OwogICAgIEFTU0VSVChwbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbiA9PSBSZW5kZXJFbWJlZGRl
ZE9iamVjdDo6UGx1Z2luTWlzc2luZyB8fCBwbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbiA9PSBS
ZW5kZXJFbWJlZGRlZE9iamVjdDo6SW5zZWN1cmVQbHVnaW5WZXJzaW9uIHx8IHBsdWdpblVuYXZh
aWxhYmlsaXR5UmVhc29uKTsKIApAQCAtNTQ1LDYgKzU0OSw3IEBACiAgICAgaWYgKCFwbHVnaW5z
cGFnZUF0dHJpYnV0ZVVSTC5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCiAgICAgICAgIHBsdWdp
bnNwYWdlQXR0cmlidXRlVVJMID0gVVJMKCk7CiAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZChwbHVnaW5VbmF2YWls
YWJpbGl0eVJlYXNvbiwgcGx1Z2luRWxlbWVudC0+c2VydmljZVR5cGUoKSwgcGx1Z2luVVJMU3Ry
aW5nLCBwbHVnaW5zcGFnZUF0dHJpYnV0ZVVSTC5zdHJpbmcoKSwgZnJhbWVVUkxTdHJpbmcsIHBh
Z2VVUkxTdHJpbmcpKTsKKyNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIH0K
IAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNjcm9sbGJhcnNNb2RlRGlkQ2hhbmdlKCkgY29uc3QK
QEAgLTY4NCw2ICs2ODksNyBAQAogICAgIGxvYWRlci0+bm90aWZ5RmluaXNoZWQoSWNvbjo6Y3Jl
YXRlSWNvbkZvckZpbGVzKGZpbGVuYW1lcykpOwogfQogCisjaWYgIVBMQVRGT1JNKElPUykKIHZv
aWQgV2ViQ2hyb21lQ2xpZW50OjpzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJiBjdXJz
b3IpCiB7CiAjaWYgVVNFKExBWllfTkFUSVZFX0NVUlNPUikKQEAgLTY5NSw2ICs3MDEsNyBAQAog
ewogICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZXRDdXJzb3JIaWRk
ZW5VbnRpbE1vdXNlTW92ZXMoaGlkZGVuVW50aWxNb3VzZU1vdmVzKSk7CiB9CisjZW5kaWYKIAog
I2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkgJiYgIVVTRShSRVFVRVNUX0FOSU1B
VElPTl9GUkFNRV9USU1FUikKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzY2hlZHVsZUFuaW1hdGlv
bigpCkBAIC04MDksOCArODE2LDEzIEBACiB9CiAjZW5kaWYKIAotdm9pZCBXZWJDaHJvbWVDbGll
bnQ6OmRpc3BhdGNoVmlld3BvcnRQcm9wZXJ0aWVzRGlkQ2hhbmdlKGNvbnN0IFZpZXdwb3J0QXJn
dW1lbnRzJikgY29uc3QKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpkaXNwYXRjaFZpZXdwb3J0UHJv
cGVydGllc0RpZENoYW5nZShjb25zdCBWaWV3cG9ydEFyZ3VtZW50cyYgdmlld3BvcnRBcmd1bWVu
dHMpIGNvbnN0CiB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpEaWRDaGFuZ2VWaWV3cG9ydEFyZ3VtZW50cyh2aWV3cG9ydEFyZ3Vt
ZW50cykpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odmlld3BvcnRBcmd1bWVudHMpOworI2Vu
ZGlmCiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAgICAgaWYgKCFtX3BhZ2UtPnVzZUZp
eGVkTGF5b3V0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTg3OSwxNCArODkxLDE4IEBACiAKIHZv
aWQgV2ViQ2hyb21lQ2xpZW50OjpkaWRBZGRIZWFkZXJMYXllcihHcmFwaGljc0xheWVyKiBoZWFk
ZXJQYXJlbnQpCiB7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogICAgIGlmIChQYWdlQmFu
bmVyKiBiYW5uZXIgPSBtX3BhZ2UtPmhlYWRlclBhZ2VCYW5uZXIoKSkKICAgICAgICAgYmFubmVy
LT5kaWRBZGRQYXJlbnRMYXllcihoZWFkZXJQYXJlbnQpOworI2VuZGlmCiB9CiAKIHZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjpkaWRBZGRGb290ZXJMYXllcihHcmFwaGljc0xheWVyKiBmb290ZXJQYXJl
bnQpCiB7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogICAgIGlmIChQYWdlQmFubmVyKiBi
YW5uZXIgPSBtX3BhZ2UtPmZvb3RlclBhZ2VCYW5uZXIoKSkKICAgICAgICAgYmFubmVyLT5kaWRB
ZGRQYXJlbnRMYXllcihmb290ZXJQYXJlbnQpOworI2VuZGlmCiB9CiAKIGJvb2wgV2ViQ2hyb21l
Q2xpZW50OjpzaG91bGRVc2VUaWxlZEJhY2tpbmdGb3JGcmFtZVZpZXcoY29uc3QgRnJhbWVWaWV3
KiBmcmFtZVZpZXcpIGNvbnN0CkluZGV4OiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDE1OTY1MSkKKysrIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NSwxMSArMTU1LDM4
IEBACiAgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkNvbG9yQ2hvb3Nlcj4gY3JlYXRl
Q29sb3JDaG9vc2VyKFdlYkNvcmU6OkNvbG9yQ2hvb3NlckNsaWVudCosIGNvbnN0IFdlYkNvcmU6
OkNvbG9yJikgT1ZFUlJJREU7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykKKyNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQorICAgIHZpcnR1YWwgdm9pZCBkaWRQcmV2ZW50RGVmYXVsdEZvckV2
ZW50KCkgT1ZFUlJJREU7CisjZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZU1vYmls
ZURvY1R5cGUoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNTY3JvbGxOb3Rp
ZmljYXRpb25zKFdlYkNvcmU6OkZyYW1lKiwgYm9vbCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIG9ic2VydmVkQ29udGVudENoYW5nZShXZWJDb3JlOjpGcmFtZSopIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBjbGVhckNvbnRlbnRDaGFuZ2VPYnNlcnZlcnMoV2ViQ29yZTo6RnJhbWUq
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5UmV2ZWFsZWRTZWxlY3Rpb25CeVNj
cm9sbGluZ0ZyYW1lKFdlYkNvcmU6OkZyYW1lKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29s
IGlzU3RvcHBpbmcoKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRMYXlvdXQoTGF5
b3V0VHlwZSA9IE5vcm1hbExheW91dCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZFN0
YXJ0T3ZlcmZsb3dTY3JvbGwoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRW5kT3Zl
cmZsb3dTY3JvbGwoKSBPVkVSUklERTsKKworICAgIC8vIEZJWE1FOiBTZWUgPHJkYXI6Ly9wcm9i
bGVtLzU5NzU1NTk+CisgICAgdmlydHVhbCB2b2lkIHN1cHByZXNzRm9ybU5vdGlmaWNhdGlvbnMo
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZUZvcm1Ob3RpZmljYXRpb25zKCkg
T1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkT3JVcGRhdGVTY3JvbGxpbmdMYXllcihX
ZWJDb3JlOjpOb2RlKiwgUGxhdGZvcm1MYXllciogc2Nyb2xsaW5nTGF5ZXIsIFBsYXRmb3JtTGF5
ZXIqIGNvbnRlbnRzTGF5ZXIsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbFNpemUsIGJv
b2wgYWxsb3dIb3Jpem9udGFsU2Nyb2xsYmFyLCBib29sIGFsbG93VmVydGljYWxTY3JvbGxiYXIp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVTY3JvbGxpbmdMYXllcihXZWJDb3Jl
OjpOb2RlKiwgUGxhdGZvcm1MYXllciogc2Nyb2xsaW5nTGF5ZXIsIFBsYXRmb3JtTGF5ZXIqIGNv
bnRlbnRzTGF5ZXIpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHdlYkFwcE9yaWVudGF0
aW9uc1VwZGF0ZWQoKSBPVkVSUklERTsKKyNlbmRpZgorCiAgICAgdmlydHVhbCB2b2lkIHJ1bk9w
ZW5QYW5lbChXZWJDb3JlOjpGcmFtZSosIFBhc3NSZWZQdHI8V2ViQ29yZTo6RmlsZUNob29zZXI+
KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgbG9hZEljb25Gb3JGaWxlcyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYsIFdlYkNvcmU6OkZpbGVJY29uTG9hZGVyKikgT1ZFUlJJREU7CiAKKyNpZiAh
UExBVEZPUk0oSU9TKQogICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6
Q3Vyc29yJikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvckhpZGRlblVudGls
TW91c2VNb3Zlcyhib29sKSBPVkVSUklERTsKKyNlbmRpZgogI2lmIEVOQUJMRShSRVFVRVNUX0FO
SU1BVElPTl9GUkFNRSkgJiYgIVVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUikKICAg
ICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSBPVkVSUklERTsKICNlbmRpZgpAQCAt
MTkwLDYgKzIxNyw5IEBACiAgICAgICAgICAgICBWaWRlb1RyaWdnZXIgfAogICAgICAgICAgICAg
UGx1Z2luVHJpZ2dlcnwgCiAgICAgICAgICAgICBDYW52YXNUcmlnZ2VyIHwKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgICAgICAgICBBbmltYXRlZE9wYWNpdHlUcmlnZ2VyIHwgLy8gQWxsb3cgb3Bh
Y2l0eSBhbmltYXRpb25zIHRvIHRyaWdnZXIgY29tcG9zaXRpbmcgbW9kZSBmb3IgaVBob25lOiA8
cmRhcjovL3Byb2JsZW0vNzgzMDY3Nz4KKyNlbmRpZgogICAgICAgICAgICAgQW5pbWF0aW9uVHJp
Z2dlcik7CiAgICAgfQogCkBAIC0yMDAsNiArMjMwLDExIEBACiAgICAgdmlydHVhbCB2b2lkIG5l
ZWRUb3VjaEV2ZW50cyhib29sKSBPVkVSUklERTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9T
KQorICAgIHZpcnR1YWwgdm9pZCBlbGVtZW50RGlkRm9jdXMoY29uc3QgV2ViQ29yZTo6Tm9kZSop
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBlbGVtZW50RGlkQmx1cihjb25zdCBXZWJDb3Jl
OjpOb2RlKikgT1ZFUlJJREU7CisjZW5kaWYKKwogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkK
ICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsU2NyZWVuRm9yRWxlbWVudChjb25zdCBXZWJD
b3JlOjpFbGVtZW50KiwgYm9vbCB3aXRoS2V5Ym9hcmQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwg
dm9pZCBlbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KFdlYkNvcmU6OkVsZW1lbnQqKSBPVkVSUklE
RTsKSW5kZXg6IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRGF0YWJhc2VNYW5hZ2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEYXRhYmFzZU1hbmFn
ZXIuaAkocmV2aXNpb24gMTU5NjUxKQorKysgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJE
YXRhYmFzZU1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTIgQEAKICAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4oV2ViQ29yZTo6U2VjdXJpdHlPcmln
aW4qKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRNb2RpZnlEYXRhYmFz
ZShXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZGVudGlm
aWVyKSBPVkVSUklERTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hEaWRBZGROZXdPcmlnaW4oV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWREZWxldGVEYXRhYmFzZSgpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZERlbGV0ZURhdGFiYXNlT3JpZ2luKCkgT1ZFUlJJ
REU7CisjZW5kaWYKKwogICAgIFdlYlByb2Nlc3MqIG1fcHJvY2VzczsKIH07CiAKSW5kZXg6IFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkocmV2aXNpb24gMTU5
NjUxKQorKysgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTUyLDYgKzE1MiwyMCBAQAogI2lmIFBMQVRGT1JNKEdUSykKICAgICB2
aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd1VuaWNvZGVNZW51KCkgT1ZFUlJJREU7CiAjZW5kaWYKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgdmlydHVhbCB2b2lkIHN1cHByZXNzU2VsZWN0aW9uTm90aWZp
Y2F0aW9ucygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlU2VsZWN0aW9uTm90
aWZpY2F0aW9ucygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzdGFydERlbGF5aW5nQW5k
Q29hbGVzY2luZ0NvbnRlbnRDaGFuZ2VOb3RpZmljYXRpb25zKCkgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIHN0b3BEZWxheWluZ0FuZENvYWxlc2NpbmdDb250ZW50Q2hhbmdlTm90aWZpY2F0
aW9ucygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB3cml0ZURhdGFUb1Bhc3RlYm9hcmQo
TlNEaWN0aW9uYXJ5KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBOU0FycmF5KiBzdXBwb3J0ZWRQ
YXN0ZWJvYXJkVHlwZXNGb3JDdXJyZW50U2VsZWN0aW9uKCkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBOU0FycmF5KiByZWFkRGF0YUZyb21QYXN0ZWJvYXJkKE5TU3RyaW5nKiB0eXBlLCBpbnQgaW5k
ZXgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBoYXNSaWNobHlFZGl0YWJsZVNlbGVjdGlv
bigpIE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IGdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50KiBkb2N1bWVu
dEZyYWdtZW50RnJvbURlbGVnYXRlKGludCBpbmRleCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBi
b29sIHBlcmZvcm1zVHdvU3RlcFBhc3RlKFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQqKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIGludCBwYXN0ZWJvYXJkQ2hhbmdlQ291bnQoKSBPVkVSUklERTsK
KyNlbmRpZgogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzR2xvYmFsU2VsZWN0aW9uKCkgT1ZF
UlJJREU7CiAKSW5kZXg6IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJD
bGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJh
bWVMb2FkZXJDbGllbnQuY3BwCShyZXZpc2lvbiAxNTk2NTEpCisrKyBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIx
MSw3ICsxMjExLDExIEBACiAgICAgYm9vbCBzaG91bGRVc2VGaXhlZExheW91dCA9IGlzTWFpbkZy
YW1lICYmIHdlYlBhZ2UtPnVzZUZpeGVkTGF5b3V0KCk7CiAgICAgYm9vbCBzaG91bGREaXNhYmxl
U2Nyb2xsaW5nID0gaXNNYWluRnJhbWUgJiYgIXdlYlBhZ2UtPm1haW5GcmFtZUlzU2Nyb2xsYWJs
ZSgpOwogICAgIGJvb2wgc2hvdWxkSGlkZVNjcm9sbGJhcnMgPSBzaG91bGRVc2VGaXhlZExheW91
dCB8fCBzaG91bGREaXNhYmxlU2Nyb2xsaW5nOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBJbnRS
ZWN0IGN1cnJlbnRGaXhlZFZpc2libGVDb250ZW50UmVjdCA9IEludFJlY3QoKTsKKyNlbHNlCiAg
ICAgSW50UmVjdCBjdXJyZW50Rml4ZWRWaXNpYmxlQ29udGVudFJlY3QgPSBtX2ZyYW1lLT5jb3Jl
RnJhbWUoKS0+dmlldygpID8gbV9mcmFtZS0+Y29yZUZyYW1lKCktPnZpZXcoKS0+Zml4ZWRWaXNp
YmxlQ29udGVudFJlY3QoKSA6IEludFJlY3QoKTsKKyNlbmRpZgogCiAgICAgbV9mcmFtZUNhbWVG
cm9tUGFnZUNhY2hlID0gZmFsc2U7CiAKQEAgLTEyMzAsNyArMTIzNCwxMCBAQAogCiAgICAgbV9m
cmFtZS0+Y29yZUZyYW1lKCktPnZpZXcoKS0+c2V0UHJvaGliaXRzU2Nyb2xsaW5nKHNob3VsZERp
c2FibGVTY3JvbGxpbmcpOwogICAgIG1fZnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3KCktPnNldFZp
c3VhbFVwZGF0ZXNBbGxvd2VkQnlDbGllbnQoIXdlYlBhZ2UtPnNob3VsZEV4dGVuZEluY3JlbWVu
dGFsUmVuZGVyaW5nU3VwcHJlc3Npb24oKSk7Ci0gICAgCisjaWYgUExBVEZPUk0oSU9TKQorICAg
IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3KCktPnNldERlbGVnYXRlc1Njcm9sbGluZyh0cnVl
KTsKKyNlbmRpZgorCiAgICAgaWYgKHdlYlBhZ2UtPnNjcm9sbFBpbm5pbmdCZWhhdmlvcigpICE9
IERvTm90UGluKQogICAgICAgICBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+dmlldygpLT5zZXRTY3Jv
bGxQaW5uaW5nQmVoYXZpb3Iod2ViUGFnZS0+c2Nyb2xsUGlubmluZ0JlaGF2aW9yKCkpOwogCkBA
IC0xMzY2LDYgKzEzNzMsNyBAQAogCiBQYXNzUmVmUHRyPFdpZGdldD4gV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYgcGx1Z2luU2l6ZSwg
SFRNTEFwcGxldEVsZW1lbnQqIGFwcGxldEVsZW1lbnQsIGNvbnN0IFVSTCYsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMp
CiB7CisjaWYgIVBMQVRGT1JNKElPUykKICAgICBSZWZQdHI8V2lkZ2V0PiBwbHVnaW4gPSBjcmVh
dGVQbHVnaW4ocGx1Z2luU2l6ZSwgYXBwbGV0RWxlbWVudCwgVVJMKCksIHBhcmFtTmFtZXMsIHBh
cmFtVmFsdWVzLCBhcHBsZXRFbGVtZW50LT5zZXJ2aWNlVHlwZSgpLCBmYWxzZSk7CiAgICAgaWYg
KCFwbHVnaW4pIHsKICAgICAgICAgaWYgKFdlYlBhZ2UqIHdlYlBhZ2UgPSBtX2ZyYW1lLT5wYWdl
KCkpIHsKQEAgLTEzNzUsNiArMTM4Myw5IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJu
IHBsdWdpbi5yZWxlYXNlKCk7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmIC8vICFQTEFU
Rk9STShJT1MpCiB9CiAKICNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKSW5kZXg6
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgJ
KHJldmlzaW9uIDE1OTY1MSkKKysrIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVM
b2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksOSBAQAogICAgIAogICAg
IHZpcnR1YWwgdm9pZCBtYWtlUmVwcmVzZW50YXRpb24oV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIq
KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZm9yY2VMYXlvdXQoKSBPVkVSUklERTsKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgdmlydHVhbCB2b2lkIGZvcmNlTGF5b3V0V2l0aG91dFJlY2Fs
Y3VsYXRpbmdTdHlsZXMoKSBPVkVSUklERTsKKyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBmb3Jj
ZUxheW91dEZvck5vbkhUTUwoKSBPVkVSUklERTsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgc2V0
Q29waWVzT25TY3JvbGwoKSBPVkVSUklERTsKQEAgLTY1LDYgKzY4LDkgQEAKICNpZiBVU0UoUFJP
VEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQogICAgIHZpcnR1YWwgYm9vbCBjYW5BdXRoZW50
aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2UmKSBP
VkVSUklERTsKICNlbmRpZgorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2aXJ0dWFsIFJldGFpblB0
cjxDRkRpY3Rpb25hcnlSZWY+IGNvbm5lY3Rpb25Qcm9wZXJ0aWVzKFdlYkNvcmU6OkRvY3VtZW50
TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKSBPVkVSUklERTsKKyNlbmRpZgogICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpEb2N1bWVu
dExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSYpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2Vp
dmVDb250ZW50TGVuZ3RoKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBpbnQgZGF0YUxlbmd0aCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoRGlkRmluaXNoTG9hZGluZyhXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllcikgT1ZFUlJJREU7CkBAIC0xNjcsNiArMTczLDkgQEAKICAgICAKICAg
ICB2aXJ0dWFsIHZvaWQgc2F2ZVBsYXRmb3JtRGF0YVRvQ2FjaGVkRnJhbWUoV2ViQ29yZTo6Q2Fj
aGVkRnJhbWUqKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNpdGlvblRvQ29tbWl0
dGVkRnJvbUNhY2hlZEZyYW1lKFdlYkNvcmU6OkNhY2hlZEZyYW1lKikgT1ZFUlJJREU7CisjaWYg
UExBVEZPUk0oSU9TKQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZXN0b3JlRnJhbWVIaWVyYXJjaHlG
b3JDYWNoZWRGcmFtZSgpIE9WRVJSSURFOworI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHRyYW5z
aXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UoKSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBkaWRTYXZlVG9QYWdlQ2FjaGUoKSBPVkVSUklERTsKSW5kZXg6IFdlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvaW9zL1dlYkNocm9tZUNsaWVudElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L2lvcy9XZWJDaHJvbWVDbGllbnRJT1MubW0JKHJldmlzaW9uIDAp
CisrKyBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2lvcy9XZWJDaHJvbWVDbGllbnRJT1MubW0J
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIldlYkNocm9tZUNsaWVudC5oIgorCisjaW1wb3J0IDxXZWJDb3Jl
L05vdEltcGxlbWVudGVkLmg+CisjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNp
bXBvcnQgIldlYkZyYW1lLmgiCisjaW1wb3J0ICJXZWJQYWdlLmgiCisjaW1wb3J0ICJXZWJQYWdl
UHJveHlNZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworI2lmIEVOQUJMRShUT1VD
SF9FVkVOVFMpCit2b2lkIFdlYkNocm9tZUNsaWVudDo6ZGlkUHJldmVudERlZmF1bHRGb3JFdmVu
dCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCit2b2lkIFdlYkNocm9t
ZUNsaWVudDo6ZWxlbWVudERpZEZvY3VzKGNvbnN0IFdlYkNvcmU6Ok5vZGUqIG5vZGUpCit7Cisg
ICAgbV9wYWdlLT5lbGVtZW50RGlkRm9jdXMoY29uc3RfY2FzdDxXZWJDb3JlOjpOb2RlKj4obm9k
ZSkpOworfQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6ZWxlbWVudERpZEJsdXIoY29uc3QgV2Vi
Q29yZTo6Tm9kZSogbm9kZSkKK3sKKyAgICBtX3BhZ2UtPmVsZW1lbnREaWRCbHVyKGNvbnN0X2Nh
c3Q8V2ViQ29yZTo6Tm9kZSo+KG5vZGUpKTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmRp
ZFJlY2VpdmVNb2JpbGVEb2NUeXBlKCkKK3sKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6TWFpbkRvY3VtZW50RGlkUmVjZWl2ZU1vYmlsZURvY1R5cGUoKSk7Cit9CisK
K3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzZXROZWVkc1Njcm9sbE5vdGlmaWNhdGlvbnMoV2ViQ29y
ZTo6RnJhbWUqLCBib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjpvYnNlcnZlZENvbnRlbnRDaGFuZ2UoV2ViQ29yZTo6RnJhbWUqKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpjbGVhckNv
bnRlbnRDaGFuZ2VPYnNlcnZlcnMoV2ViQ29yZTo6RnJhbWUqKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpub3RpZnlSZXZlYWxlZFNlbGVjdGlv
bkJ5U2Nyb2xsaW5nRnJhbWUoV2ViQ29yZTo6RnJhbWUqKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK2Jvb2wgV2ViQ2hyb21lQ2xpZW50Ojppc1N0b3BwaW5nKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJDaHJvbWVDbGll
bnQ6OmRpZExheW91dChMYXlvdXRUeXBlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgV2ViQ2hyb21lQ2xpZW50OjpkaWRTdGFydE92ZXJmbG93U2Nyb2xsKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6ZGlkRW5kT3ZlcmZs
b3dTY3JvbGwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViQ2hyb21l
Q2xpZW50OjpzdXBwcmVzc0Zvcm1Ob3RpZmljYXRpb25zKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6cmVzdG9yZUZvcm1Ob3RpZmljYXRpb25z
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6
YWRkT3JVcGRhdGVTY3JvbGxpbmdMYXllcihXZWJDb3JlOjpOb2RlKiwgUGxhdGZvcm1MYXllcios
IFBsYXRmb3JtTGF5ZXIqLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgYm9vbCwgYm9vbCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkNocm9tZUNsaWVudDo6cmVtb3Zl
U2Nyb2xsaW5nTGF5ZXIoV2ViQ29yZTo6Tm9kZSosIFBsYXRmb3JtTGF5ZXIqLCBQbGF0Zm9ybUxh
eWVyKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkNocm9tZUNsaWVu
dDo6d2ViQXBwT3JpZW50YXRpb25zVXBkYXRlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9pb3MvV2ViRGF0YWJhc2VNYW5hZ2VySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvaW9zL1dlYkRhdGFiYXNlTWFuYWdlcklPUy5tbQkocmV2aXNpb24gMCkK
KysrIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvaW9zL1dlYkRhdGFiYXNlTWFuYWdlcklPUy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJXZWJEYXRhYmFzZU1hbmFnZXIuaCIKKworI2ltcG9ydCA8V2Vi
Q29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBXZWJE
YXRhYmFzZU1hbmFnZXI6OmRpc3BhdGNoRGlkQWRkTmV3T3JpZ2luKFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkRhdGFiYXNl
TWFuYWdlcjo6ZGlzcGF0Y2hEaWREZWxldGVEYXRhYmFzZSgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBXZWJEYXRhYmFzZU1hbmFnZXI6OmRpc3BhdGNoRGlkRGVsZXRlRGF0
YWJhc2VPcmlnaW4oKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApJbmRleDogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9pb3MvV2ViRWRpdG9y
Q2xpZW50SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvaW9z
L1dlYkVkaXRvckNsaWVudElPUy5tbQkocmV2aXNpb24gMCkKKysrIFdlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvaW9zL1dlYkVkaXRvckNsaWVudElPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV2Vi
RWRpdG9yQ2xpZW50LmgiCisKKyNpbXBvcnQgIldlYlBhZ2UuaCIKKyNpbXBvcnQgPFdlYkNvcmUv
S2V5Ym9hcmRFdmVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisgICAgCit2b2lk
IFdlYkVkaXRvckNsaWVudDo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVu
dCkKK3sKKyAgICBpZiAobV9wYWdlLT5oYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudChldmVudCwg
ZmFsc2UpKQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKK30KKwordm9pZCBX
ZWJFZGl0b3JDbGllbnQ6OmhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bihLZXlib2FyZEV2ZW50KiBl
dmVudCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitOU1N0cmluZyAqV2ViRWRpdG9y
Q2xpZW50Ojp1c2VyVmlzaWJsZVN0cmluZyhOU1VSTCAqKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIG5pbDsKK30KKworTlNVUkwgKldlYkVkaXRvckNsaWVudDo6Y2Fub25p
Y2FsaXplVVJMKE5TVVJMICopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
bmlsOworfQorCitOU1VSTCAqV2ViRWRpdG9yQ2xpZW50OjpjYW5vbmljYWxpemVVUkxTdHJpbmco
TlNTdHJpbmcgKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBuaWw7Cit9
CisKK0RvY3VtZW50RnJhZ21lbnQqIFdlYkVkaXRvckNsaWVudDo6ZG9jdW1lbnRGcmFnbWVudEZy
b21BdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyAqLCBWZWN0b3I8UmVmUHRyPEFy
Y2hpdmVSZXNvdXJjZT4gPiYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
MDsKK30KKwordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNldEluc2VydGlvblBhc3RlYm9hcmQoY29u
c3QgU3RyaW5nJikKK3sKKyAgICAvLyBUaGlzIGlzIHVzZWQgb25seSBieSBNYWlsLCBubyBuZWVk
IHRvIGltcGxlbWVudCBpdCBub3cuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBX
ZWJFZGl0b3JDbGllbnQ6OnN1cHByZXNzU2VsZWN0aW9uTm90aWZpY2F0aW9ucygpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlc3RvcmVTZWxl
Y3Rpb25Ob3RpZmljYXRpb25zKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFdlYkVkaXRvckNsaWVudDo6c3RhcnREZWxheWluZ0FuZENvYWxlc2NpbmdDb250ZW50Q2hhbmdl
Tm90aWZpY2F0aW9ucygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJF
ZGl0b3JDbGllbnQ6OnN0b3BEZWxheWluZ0FuZENvYWxlc2NpbmdDb250ZW50Q2hhbmdlTm90aWZp
Y2F0aW9ucygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJFZGl0b3JD
bGllbnQ6OndyaXRlRGF0YVRvUGFzdGVib2FyZChOU0RpY3Rpb25hcnkqKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK05TQXJyYXkqIFdlYkVkaXRvckNsaWVudDo6c3VwcG9ydGVkUGFz
dGVib2FyZFR5cGVzRm9yQ3VycmVudFNlbGVjdGlvbigpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gMDsKK30KKworTlNBcnJheSogV2ViRWRpdG9yQ2xpZW50OjpyZWFkRGF0
YUZyb21QYXN0ZWJvYXJkKE5TU3RyaW5nKiwgaW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpoYXNSaWNobHlFZGl0
YWJsZVNlbGVjdGlvbigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2ludCBXZWJFZGl0b3JDbGllbnQ6OmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitXZWJDb3JlOjpE
b2N1bWVudEZyYWdtZW50KiBXZWJFZGl0b3JDbGllbnQ6OmRvY3VtZW50RnJhZ21lbnRGcm9tRGVs
ZWdhdGUoaW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpwZXJmb3Jtc1R3b1N0ZXBQYXN0ZShXZWJDb3JlOjpEb2N1
bWVudEZyYWdtZW50KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKworaW50IFdlYkVkaXRvckNsaWVudDo6cGFzdGVib2FyZENoYW5nZUNvdW50KCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKSW5kZXg6IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvaW9zL1dlYkZyYW1lTG9h
ZGVyQ2xpZW50SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
aW9zL1dlYkZyYW1lTG9hZGVyQ2xpZW50SU9TLm1tCShyZXZpc2lvbiAwKQorKysgV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9pb3MvV2ViRnJhbWVMb2FkZXJDbGllbnRJT1MubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiV2ViRnJhbWVMb2FkZXJDbGllbnQuaCIKKworI2ltcG9ydCA8V2ViQ29yZS9Ob3RJ
bXBsZW1lbnRlZC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK3ZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpZFJlc3RvcmVGcmFtZUhpZXJh
cmNoeUZvckNhY2hlZEZyYW1lKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpmb3JjZUxheW91dFdpdGhvdXRSZWNhbGN1bGF0aW5nU3R5
bGVzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitSZXRhaW5QdHI8Q0ZEaWN0aW9u
YXJ5UmVmPiBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y29ubmVjdGlvblByb3BlcnRpZXMoRG9jdW1l
bnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cklu
ZGV4OiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtpbmdDb250
ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJh
bWVOZXR3b3JraW5nQ29udGV4dC5oCShyZXZpc2lvbiAxNTk2NTEpCisrKyBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU4LDYgKzU4LDkgQEAKICAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkRhdGFSZWY+IHNv
dXJjZUFwcGxpY2F0aW9uQXVkaXREYXRhKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBX
ZWJDb3JlOjpSZXNvdXJjZUVycm9yIGJsb2NrZWRFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6Ok5ldHdvcmtT
dG9yYWdlU2Vzc2lvbiYgc3RvcmFnZVNlc3Npb24oKSBjb25zdCBPVkVSUklERTsKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgdmlydHVhbCB2b2lkIHJlcG9ydE5ldHdvcmtEYXRhVXNhZ2UodWludDY0
X3QgcmF3Qnl0ZXNTZW50LCB1aW50NjRfdCByYXdCeXRlc1JlY2VpdmVkLCB1aW50NjRfdCBjZWxs
dWxhckJ5dGVzU2VudCwgdWludDY0X3QgY2VsbHVsYXJCeXRlc1JlY2VpdmVkKSBPVkVSUklERSB7
IH0KKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCiB9OwogCiB9CkluZGV4OiBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L21hYy9XZWJTeXN0ZW1JbnRlcmZhY2UubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViU3lzdGVtSW50ZXJmYWNlLm1tCShyZXZpc2lv
biAxNTk2NTEpCisrKyBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJTeXN0ZW1JbnRl
cmZhY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTM2LDE2ICszNiwxOCBAQAogICAgIHN0YXRpYyBk
aXNwYXRjaF9vbmNlX3QgaW5pdE9uY2U7CiAgICAgCiAgICAgZGlzcGF0Y2hfb25jZSgmaW5pdE9u
Y2UsIF57CisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAgSU5JVChBZHZhbmNlRGVmYXVsdEJ1
dHRvblB1bHNlQW5pbWF0aW9uKTsKKyNlbmRpZgogICAgICAgICBJTklUKENBTGF5ZXJFbnVtZXJh
dGVSZWN0c0JlaW5nRHJhd25XaXRoQmxvY2spOwogICAgICAgICBJTklUKENvcHlDRkxvY2FsaXph
dGlvblByZWZlcnJlZE5hbWUpOwogICAgICAgICBJTklUKENHQ29udGV4dEdldFNob3VsZFNtb290
aEZvbnRzKTsKICAgICAgICAgSU5JVChDR1BhdHRlcm5DcmVhdGVXaXRoSW1hZ2VBbmRUcmFuc2Zv
cm0pOwogICAgICAgICBJTklUKENHQ29udGV4dFJlc2V0Q2xpcCk7Ci0jaWYgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwCisjaWYgIVBMQVRGT1JNKElPUykgJiYgX19NQUNf
T1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwCiAgICAgICAgIElOSVQoQ0dDb250ZXh0
RHJhd3NXaXRoQ29ycmVjdFNoYWRvd09mZnNldHMpOwogI2VuZGlmCi0jaWYgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCisjaWYgUExBVEZPUk0oSU9TKSB8fCBfX01BQ19P
U19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKICAgICAgICAgSU5JVChDVEZvbnRUcmFu
c2Zvcm1HbHlwaHMpOwogI2VuZGlmCiAgICAgICAgIElOSVQoQ29weUNPTk5FQ1RQcm94eVJlc3Bv
bnNlKTsKQEAgLTUzLDYgKzU1LDcgQEAKICAgICAgICAgSU5JVChDb3B5TlNVUkxSZXNwb25zZUNl
cnRpZmljYXRlQ2hhaW4pOwogICAgICAgICBJTklUKENyZWF0ZUNUTGluZVdpdGhVbmlDaGFyUHJv
dmlkZXIpOwogICAgICAgICBJTklUKENyZWF0ZUN1c3RvbUNGUmVhZFN0cmVhbSk7CisjaWYgIVBM
QVRGT1JNKElPUykKICAgICAgICAgSU5JVChEcmF3QmV6ZWxlZFRleHRBcmVhKTsKICAgICAgICAg
SU5JVChEcmF3QmV6ZWxlZFRleHRGaWVsZENlbGwpOwogICAgICAgICBJTklUKERyYXdDYXBzTG9j
a0luZGljYXRvcik7CkBAIC02NSwxOCArNjgsMjQgQEAKICAgICAgICAgSU5JVChHZXRGb250SW5M
YW5ndWFnZUZvclJhbmdlKTsKICAgICAgICAgSU5JVChHZXRHbHlwaFRyYW5zZm9ybWVkQWR2YW5j
ZXMpOwogICAgICAgICBJTklUKEdldEdseXBoc0ZvckNoYXJhY3RlcnMpOworI2VuZGlmCiAgICAg
ICAgIElOSVQoR2V0VmVydGljYWxHbHlwaHNGb3JDaGFyYWN0ZXJzKTsKICAgICAgICAgSU5JVChH
ZXRIVFRQUGlwZWxpbmluZ1ByaW9yaXR5KTsKICAgICAgICAgSU5JVChHZXRNSU1FVHlwZUZvckV4
dGVuc2lvbik7CiAgICAgICAgIElOSVQoR2V0TlNVUkxSZXNwb25zZUxhc3RNb2RpZmllZERhdGUp
OworI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIElOSVQoU2lnbmVkUHVibGljS2V5QW5kQ2hh
bGxlbmdlU3RyaW5nKTsKICAgICAgICAgSU5JVChHZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1F
VHlwZSk7CisjZW5kaWYKICAgICAgICAgSU5JVChHZXRVc2VyVG9CYXNlQ1RNKTsKICAgICAgICAg
SU5JVChDR0NvbnRleHRJc1BERkNvbnRleHQpOworI2lmICFQTEFURk9STShJT1MpCiAgICAgICAg
IElOSVQoR2V0V2hlZWxFdmVudERlbHRhcyk7CiAgICAgICAgIElOSVQoR2V0TlNFdmVudEtleUNo
YXIpOwogICAgICAgICBJTklUKEhpdFRlc3RNZWRpYVVJUGFydCk7CisjZW5kaWYKICAgICAgICAg
SU5JVChJbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJIb3N0KTsKKyNpZiAh
UExBVEZPUk0oSU9TKQogICAgICAgICBJTklUKE1lYXN1cmVNZWRpYVVJUGFydCk7CiAgICAgICAg
IElOSVQoUG9wdXBNZW51KTsKICAgICAgICAgSU5JVChRVEluY2x1ZGVPbmx5TW9kZXJuTWVkaWFG
aWxlVHlwZXMpOwpAQCAtOTYsOSArMTA1LDEyIEBACiAgICAgICAgIElOSVQoUVRDbGVhck1lZGlh
RG93bmxvYWRDYWNoZSk7CiAgICAgICAgIElOSVQoU2V0QmFzZUNUTSk7CiAgICAgICAgIElOSVQo
U2V0Q0dGb250UmVuZGVyaW5nTW9kZSk7CisjZW5kaWYKICAgICAgICAgSU5JVChTZXRDT05ORUNU
UHJveHlBdXRob3JpemF0aW9uRm9yU3RyZWFtKTsKICAgICAgICAgSU5JVChTZXRDT05ORUNUUHJv
eHlGb3JTdHJlYW0pOworI2lmICFQTEFURk9STShJT1MpCiAgICAgICAgIElOSVQoU2V0RHJhZ0lt
YWdlKTsKKyNlbmRpZgogICAgICAgICBJTklUKFNldEhUVFBQaXBlbGluaW5nTWF4aW11bVByaW9y
aXR5KTsKICAgICAgICAgSU5JVChTZXRIVFRQUGlwZWxpbmluZ1ByaW9yaXR5KTsKICAgICAgICAg
SU5JVChTZXRIVFRQUGlwZWxpbmluZ01pbmltdW1GYXN0TGFuZVByaW9yaXR5KTsKQEAgLTEyMCwx
MiArMTMyLDE3IEBACiAgICAgICAgIElOSVQoRGVsZXRlQWxsSFRUUENvb2tpZXMpOwogICAgICAg
ICBJTklUKERlbGV0ZUhUVFBDb29raWUpOwogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICAgICAg
SU5JVChTZXRNZXRhZGF0YVVSTCk7Ci0gICAgICAgIAorI2VuZGlmIC8vICFQTEFURk9STShJT1Mp
CisKKyNpZiAhUExBVEZPUk0oSU9TX1NJTVVMQVRPUikKICAgICAgICAgSU5JVChJT1N1cmZhY2VD
b250ZXh0Q3JlYXRlKTsKICAgICAgICAgSU5JVChJT1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2Up
OworI2VuZGlmIC8vICFQTEFURk9STShJT1NfU0lNVUxBVE9SKQogICAgICAgICBJTklUKENyZWF0
ZUNUVHlwZXNldHRlcldpdGhVbmlDaGFyUHJvdmlkZXJBbmRPcHRpb25zKTsKICAgICAgICAgSU5J
VChDVFJ1bkdldEluaXRpYWxBZHZhbmNlKTsKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBJ
TklUKFJlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSk7CiAgICAgICAgIElOSVQoRXhlY3V0YWJsZVdh
c0xpbmtlZE9uT3JCZWZvcmVTbm93TGVvcGFyZCk7CiAgICAgICAgIElOSVQoQ29weURlZmF1bHRT
ZWFyY2hQcm92aWRlckRpc3BsYXlOYW1lKTsKQEAgLTEzNCw2ICsxNTEsNyBAQAogICAgICAgICBJ
TklUKEN1cnNvcik7CiAgICAgICAgIElOSVQoV2luZG93U2V0U2NhbGVkRnJhbWUpOwogICAgICAg
ICBJTklUKFdpbmRvd1NldEFscGhhKTsKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiAjaWYg
VVNFKENGTkVUV09SSykKICAgICAgICAgSU5JVChHZXREZWZhdWx0SFRUUENvb2tpZVN0b3JhZ2Up
OwpAQCAtMTQ0LDYgKzE2Miw3IEBACiAgICAgICAgIElOSVQoU2V0UmVxdWVzdFN0b3JhZ2VTZXNz
aW9uKTsKICNlbmRpZgogCisjaWYgIVBMQVRGT1JNKElPUykKICNpZiBQTEFURk9STShNQUMpCiAg
ICAgICAgIElOSVQoU3BlZWNoU3ludGhlc2lzR2V0Vm9pY2VJZGVudGlmaWVycyk7CiAgICAgICAg
IElOSVQoU3BlZWNoU3ludGhlc2lzR2V0RGVmYXVsdFZvaWNlSWRlbnRpZmllckZvckxvY2FsZSk7
CkBAIC0xNTgsNiArMTc3LDcgQEAKICAgICAgICAgSU5JVChBY2Nlc3NpYmlsaXR5SGFuZGxlRm9j
dXNDaGFuZ2VkKTsKICAgICAgICAgSU5JVChDcmVhdGVBWFVJRWxlbWVudFJlZik7CiAgICAgICAg
IElOSVQoVW5yZWdpc3RlclVuaXF1ZUlkRm9yRWxlbWVudCk7CisjZW5kaWYKIAogICAgICAgICBJ
TklUKEdldENGVVJMUmVzcG9uc2VNSU1FVHlwZSk7CiAgICAgICAgIElOSVQoR2V0Q0ZVUkxSZXNw
b25zZVVSTCk7CkBAIC0xNjUsMTUgKzE4NSwxNyBAQAogICAgICAgICBJTklUKENvcHlDRlVSTFJl
c3BvbnNlU3VnZ2VzdGVkRmlsZW5hbWUpOwogICAgICAgICBJTklUKFNldENGVVJMUmVzcG9uc2VN
SU1FVHlwZSk7CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgICAgICBJTklUKENyZWF0ZVZNUHJl
c3N1cmVEaXNwYXRjaE9uTWFpblF1ZXVlKTsKKyNlbmRpZgogCiAgICAgICAgIElOSVQoRGVzdHJv
eVJlbmRlcmluZ1Jlc291cmNlcyk7CiAKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDEwODAKKyNpZiAhUExBVEZPUk0oSU9TKSAgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01J
Tl9SRVFVSVJFRCA+PSAxMDgwCiAgICAgICAgIElOSVQoRXhlY3V0YWJsZVdhc0xpbmtlZE9uT3JC
ZWZvcmVMaW9uKTsKICNlbmRpZgogICAgICAgICAKLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID49IDEwOTAKKyNpZiAhUExBVEZPUk0oSU9TKSAgJiYgX19NQUNfT1NfWF9WRVJT
SU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCiAgICAgICAgIElOSVQoQ3JlYXRlTWVtb3J5U3RhdHVz
UHJlc3N1cmVDcml0aWNhbERpc3BhdGNoT25NYWluUXVldWUpOwogI2VuZGlmCiAKQEAgLTE4Nywx
MyArMjA5LDIzIEBACiAgICAgICAgIElOSVQoRmlsdGVySXNCdWZmZXJpbmcpOwogICAgICAgICBJ
TklUKEZpbHRlckFkZERhdGEpOwogICAgICAgICBJTklUKEZpbHRlckRhdGFDb21wbGV0ZSk7Cisj
aWYgUExBVEZPUk0oSU9TKQorICAgICAgICBJTklUKEZpbHRlclVuYmxvY2tXaXRoQ29tcGxldGlv
bik7CiAjZW5kaWYKKyNlbmRpZgogCiAjaWYgIVBMQVRGT1JNKElPUykgJiYgUExBVEZPUk0oTUFD
KSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwODAKICAgICAgICAgSU5J
VChOU0VsYXN0aWNEZWx0YUZvclRpbWVEZWx0YSk7CiAgICAgICAgIElOSVQoTlNFbGFzdGljRGVs
dGFGb3JSZWJvdW5kRGVsdGEpOwogICAgICAgICBJTklUKE5TUmVib3VuZERlbHRhRm9yRWxhc3Rp
Y0RlbHRhKTsKICNlbmRpZgorI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgSU5JVChFeGVjdXRh
YmxlV2FzTGlua2VkT25PckFmdGVySU9TVmVyc2lvbik7CisgICAgICAgIElOSVQoR2V0RGV2aWNl
Q2xhc3MpOworICAgICAgICBJTklUKEdldFZpZXdwb3J0U2NyZWVuU2l6ZSk7CisgICAgICAgIElO
SVQoR2V0U2NyZWVuU2NhbGVGYWN0b3IpOworICAgICAgICBJTklUKElzR0IxODAzMENvbXBsaWFu
Y2VSZXF1aXJlZCk7CisjZW5kaWYKIAogI2lmIEVOQUJMRShQVUJMSUNfU1VGRklYX0xJU1QpCiAg
ICAgICAgIElOSVQoSXNQdWJsaWNTdWZmaXgpOwpJbmRleDogV2ViUHJvY2Vzcy9XZWJQYWdlL0Ry
YXdpbmdBcmVhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWEuY3BwCShyZXZpc2lvbiAxNTk2NTEpCisrKyBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCwxMCBAQAogI2luY2x1ZGUgPHd0Zi9G
dW5jdGlvbmFsLmg+CiAKIC8vIFN1YmNsYXNzZXMKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVk
ZSAiVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFJT1MuaCIKKyNlbmRpZgorCiAjaWYgUExB
VEZPUk0oTUFDKQogI2luY2x1ZGUgIlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmgiCiAjaW5j
bHVkZSAiVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEuaCIKQEAgLTQ3LDggKzUxLDEzIEBA
CiB7CiAgICAgc3dpdGNoIChwYXJhbWV0ZXJzLmRyYXdpbmdBcmVhVHlwZSkgewogI2lmIFBMQVRG
T1JNKE1BQykKKyNpZiBQTEFURk9STShJT1MpCisgICAgY2FzZSBEcmF3aW5nQXJlYVR5cGVUaWxl
ZENvcmVBbmltYXRpb25JT1M6CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRpbGVk
Q29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhSU9TPih3ZWJQYWdlLCBwYXJhbWV0ZXJzKTsKKyNlbHNl
CiAgICAgY2FzZSBEcmF3aW5nQXJlYVR5cGVUaWxlZENvcmVBbmltYXRpb246CiAgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhPih3ZWJQ
YWdlLCBwYXJhbWV0ZXJzKTsKKyNlbmRpZgogICAgIGNhc2UgRHJhd2luZ0FyZWFUeXBlUmVtb3Rl
TGF5ZXJUcmVlOgogICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxSZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYT4od2ViUGFnZSwgcGFyYW1ldGVycyk7CiAjZWxzZQpJbmRleDogV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmgJKHJldmlzaW9uIDE1OTY1
MSkKKysrIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Miw2ICs2MiwxMiBAQAogCiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7
CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgdmlydHVhbCB1bnNpZ25lZCBjdXJyZW50KCkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnJlbnQodW5zaWduZWQgbmV3Q3VycmVudCkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGNsZWFyQWxsUGFnZUNhY2hlcygpIE9WRVJSSURF
OworI2VuZGlmCisKICAgICBXZWJQYWdlKiBtX3BhZ2U7CiAgICAgSGFzaFNldDx1aW50NjRfdD4g
bV9hc3NvY2lhdGVkSXRlbUlEczsKIH07CkluZGV4OiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZp
c2lvbiAxNTk2NTEpCisrKyBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNyw2ICsxMzcsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU3Vic3RpdHV0ZURh
dGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRJdGVyYXRvci5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvVmlzaWJsZVBvc2l0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9WaXNpYmxlVW5pdHMuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL21hcmt1cC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1
ZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CkBAIC0yNzMsNiArMjc0LDkgQEAKICAg
ICAsIG1faXNTaG93aW5nQ29udGV4dE1lbnUoZmFsc2UpCiAjZW5kaWYKICAgICAsIG1fd2lsbEdv
VG9CYWNrRm9yd2FyZEl0ZW1DYWxsYmFja0VuYWJsZWQodHJ1ZSkKKyNpZiBQTEFURk9STShJT1Mp
CisgICAgLCBtX3Nob3VsZFJldHVybldvcmRBdFNlbGVjdGlvbihmYWxzZSkKKyNlbmRpZgogI2lm
IEVOQUJMRShQQUdFX1ZJU0lCSUxJVFlfQVBJKQogICAgICwgbV92aXNpYmlsaXR5U3RhdGUoV2Vi
Q29yZTo6UGFnZVZpc2liaWxpdHlTdGF0ZVZpc2libGUpCiAjZW5kaWYKQEAgLTQzNywxMCArNDQx
LDEyIEBACiAgICAgZm9yIChIYXNoU2V0PFBsdWdpblZpZXcqPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX3BsdWdpblZpZXdzLmJlZ2luKCksIGVuZCA9IG1fcGx1Z2luVmlld3MuZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkKICAgICAgICAgKCppdCktPndlYlBhZ2VEZXN0cm95ZWQoKTsKIAorI2lmICFQ
TEFURk9STShJT1MpCiAgICAgaWYgKG1faGVhZGVyQmFubmVyKQogICAgICAgICBtX2hlYWRlckJh
bm5lci0+ZGV0YWNoRnJvbVBhZ2UoKTsKICAgICBpZiAobV9mb290ZXJCYW5uZXIpCiAgICAgICAg
IG1fZm9vdGVyQmFubmVyLT5kZXRhY2hGcm9tUGFnZSgpOworI2VuZGlmIC8vICFQTEFURk9STShJ
T1MpCiAKICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OldlYlBhZ2U6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlSUQpOwogCkBAIC02
MTIsNiArNjE4LDIyIEBACiAgICAgcmVzdWx0Lmhhc0NvbXBvc2l0aW9uID0gZnJhbWUuZWRpdG9y
KCkuaGFzQ29tcG9zaXRpb24oKTsKICAgICByZXN1bHQuc2hvdWxkSWdub3JlQ29tcG9zaXRpb25T
ZWxlY3Rpb25DaGFuZ2UgPSBmcmFtZS5lZGl0b3IoKS5pZ25vcmVDb21wb3NpdGlvblNlbGVjdGlv
bkNoYW5nZSgpOwogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxl
Y3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKTsKKyAgICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQoKSkg
eworICAgICAgICByZXN1bHQuY2FyZXRSZWN0QXRTdGFydCA9IHNlbGVjdGlvbi5hYnNvbHV0ZUNh
cmV0Qm91bmRzKCk7CisgICAgICAgIHJlc3VsdC5jYXJldFJlY3RBdEVuZCA9IHJlc3VsdC5jYXJl
dFJlY3RBdFN0YXJ0OworICAgICAgICBpZiAobV9zaG91bGRSZXR1cm5Xb3JkQXRTZWxlY3Rpb24p
CisgICAgICAgICAgICByZXN1bHQud29yZEF0U2VsZWN0aW9uID0gcGxhaW5UZXh0KHdvcmRSYW5n
ZUZyb21Qb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSkuZ2V0KCkpOworICAgIH0gZWxzZSBpZiAo
c2VsZWN0aW9uLmlzUmFuZ2UoKSkgeworICAgICAgICByZXN1bHQuY2FyZXRSZWN0QXRTdGFydCA9
IFZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSkuYWJzb2x1dGVDYXJldEJvdW5kcygp
OworICAgICAgICByZXN1bHQuY2FyZXRSZWN0QXRFbmQgPSBWaXNpYmxlUG9zaXRpb24oc2VsZWN0
aW9uLmVuZCgpKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCk7CisgICAgICAgIFJlZlB0cjxSYW5nZT4g
c2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgICAgICBz
ZWxlY3RlZFJhbmdlLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHMocmVzdWx0LnNlbGVjdGlvblJlY3Rz
KTsKKyAgICAgICAgcmVzdWx0LnNlbGVjdGVkVGV4dExlbmd0aCA9IHBsYWluVGV4dChzZWxlY3Rl
ZFJhbmdlLmdldCgpLCBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IsIHRydWUpLmxlbmd0aCgp
OworICAgIH0KKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIHJlc3VsdC5jdXJzb3JS
ZWN0ID0gZnJhbWUuc2VsZWN0aW9uKCkuYWJzb2x1dGVDYXJldEJvdW5kcygpOwogI2VuZGlmCkBA
IC0xMjA0LDcgKzEyMjYsNyBAQAogICAgIG1fcGFnZS0+c2V0RGV2aWNlU2NhbGVGYWN0b3Ioc2Nh
bGVGYWN0b3IpOwogCiAgICAgLy8gVGVsbCBhbGwgb3VyIHBsdWctaW4gdmlld3MgdGhhdCB0aGUg
ZGV2aWNlIHNjYWxlIGZhY3RvciBjaGFuZ2VkLgotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFU
Rk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAgICAgZm9yIChIYXNoU2V0PFBsdWdpblZpZXcq
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpblZpZXdzLmJlZ2luKCksIGVuZCA9IG1fcGx1
Z2luVmlld3MuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgKCppdCktPnNldERldmlj
ZVNjYWxlRmFjdG9yKHNjYWxlRmFjdG9yKTsKIApAQCAtMTM1OSw2ICsxMzgxLDcgQEAKICAgICBt
X2RyYXdpbmdBcmVhLT5kaWRVbmluc3RhbGxQYWdlT3ZlcmxheShwYWdlT3ZlcmxheSk7CiB9CiAK
KyNpZiAhUExBVEZPUk0oSU9TKQogdm9pZCBXZWJQYWdlOjpzZXRIZWFkZXJQYWdlQmFubmVyKFBh
c3NSZWZQdHI8UGFnZUJhbm5lcj4gcGFnZUJhbm5lcikKIHsKICAgICBpZiAobV9oZWFkZXJCYW5u
ZXIpCkBAIC0xNDA2LDYgKzE0MjksNyBAQAogICAgIGlmIChtX2Zvb3RlckJhbm5lcikKICAgICAg
ICAgbV9mb290ZXJCYW5uZXItPnNob3dJZkhpZGRlbigpOwogfQorI2VuZGlmIC8vICFQTEFURk9S
TShJT1MpCiAKIFBhc3NSZWZQdHI8V2ViSW1hZ2U+IFdlYlBhZ2U6OnNjYWxlZFNuYXBzaG90V2l0
aE9wdGlvbnMoY29uc3QgSW50UmVjdCYgcmVjdCwgZG91YmxlIHNjYWxlRmFjdG9yLCBTbmFwc2hv
dE9wdGlvbnMgb3B0aW9ucykKIHsKQEAgLTE2MDEsMTAgKzE2MjUsMTIgQEAKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmICghaGFuZGxl
ZCAmJiBtX2hlYWRlckJhbm5lcikKICAgICAgICAgaGFuZGxlZCA9IG1faGVhZGVyQmFubmVyLT5t
b3VzZUV2ZW50KG1vdXNlRXZlbnQpOwogICAgIGlmICghaGFuZGxlZCAmJiBtX2Zvb3RlckJhbm5l
cikKICAgICAgICAgaGFuZGxlZCA9IG1fZm9vdGVyQmFubmVyLT5tb3VzZUV2ZW50KG1vdXNlRXZl
bnQpOworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKICAgICBpZiAoIWhhbmRsZWQgJiYgY2Fu
SGFuZGxlVXNlckV2ZW50cygpKSB7CiAgICAgICAgIEN1cnJlbnRFdmVudCBjdXJyZW50RXZlbnQo
bW91c2VFdmVudCk7CkBAIC0xNjMxLDEwICsxNjU3LDEyIEBACiAgICAgICAgICAgICBpZiAoKGhh
bmRsZWQgPSAoKml0KS0+bW91c2VFdmVudChtb3VzZUV2ZW50KSkpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgfQorI2lmICFQTEFURk9STShJT1MpCiAgICAgaWYgKCFoYW5kbGVkICYmIG1f
aGVhZGVyQmFubmVyKQogICAgICAgICBoYW5kbGVkID0gbV9oZWFkZXJCYW5uZXItPm1vdXNlRXZl
bnQobW91c2VFdmVudCk7CiAgICAgaWYgKCFoYW5kbGVkICYmIG1fZm9vdGVyQmFubmVyKQogICAg
ICAgICBoYW5kbGVkID0gbV9mb290ZXJCYW5uZXItPm1vdXNlRXZlbnQobW91c2VFdmVudCk7Cisj
ZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogICAgIGlmICghaGFuZGxlZCkgewogICAgICAgICBD
dXJyZW50RXZlbnQgY3VycmVudEV2ZW50KG1vdXNlRXZlbnQpOwpAQCAtMTk2NCw3ICsxOTkyLDcg
QEAKICAgICAgICAgbV9wYWdlLT5zZXRDYW5TdGFydE1lZGlhKHRydWUpOwogfQogCi0jaWYgIVBM
QVRGT1JNKE1BQykKKyNpZiAhUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1MpCiB2b2lkIFdl
YlBhZ2U6OmRpZFVwZGF0ZVZpZXdTdGF0ZVRpbWVyRmlyZWQoKQogewogICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6RGlkVXBkYXRlVmlld1N0YXRlKCkpOwpAQCAtMjgxOCwxMSArMjg0
NiwxMyBAQAogICAgIG5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcigpLT5kaWRS
ZWNlaXZlTm90aWZpY2F0aW9uUGVybWlzc2lvbkRlY2lzaW9uKG5vdGlmaWNhdGlvbklELCBhbGxv
d2VkKTsKIH0KIAorI2lmICFQTEFURk9STShJT1MpCiB2b2lkIFdlYlBhZ2U6OmFkdmFuY2VUb05l
eHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogewogICAgIEZyYW1lJiBm
cmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAg
ICAgZnJhbWUuZWRpdG9yKCkuYWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKHN0YXJ0QmVmb3JlU2Vs
ZWN0aW9uKTsKIH0KKyNlbmRpZgogCiB2b2lkIFdlYlBhZ2U6OmNoYW5nZVNwZWxsaW5nVG9Xb3Jk
KGNvbnN0IFN0cmluZyYgd29yZCkKIHsKQEAgLTMyMzMsNyArMzI2Myw3IEBACiAKICNlbmRpZgog
Ci0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykK
IFJldGFpblB0cjxQREZEb2N1bWVudD4gV2ViUGFnZTo6cGRmRG9jdW1lbnRGb3JQcmludGluZ0Zy
YW1lKEZyYW1lKiBjb3JlRnJhbWUpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29yZUZy
YW1lLT5kb2N1bWVudCgpOwpAQCAtMzI2MSw3ICszMjkxLDcgQEAKICAgICBpZiAoIWNvcmVGcmFt
ZSkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1B
QykgJiYgIVBMQVRGT1JNKElPUykKICAgICBpZiAocGRmRG9jdW1lbnRGb3JQcmludGluZ0ZyYW1l
KGNvcmVGcmFtZSkpCiAgICAgICAgIHJldHVybjsKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCklu
ZGV4OiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDE1OTY1MSkKKysrIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDggKzc1LDEyIEBACiAjZW5kaWYK
IAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisjaWYgUExBVEZPUk0oSU9TKQorI2luY2x1ZGUg
PFdlYkNvcmUvUGxhdGZvcm1Ub3VjaEV2ZW50SU9TLmg+CisjZWxzZQogI2luY2x1ZGUgPFdlYkNv
cmUvUGxhdGZvcm1Ub3VjaEV2ZW50Lmg+CiAjZW5kaWYKKyNlbmRpZgogCiAjaWYgRU5BQkxFKENP
TlRFWFRfTUVOVVMpCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGll
bnQuaCIKQEAgLTEwOCw2ICsxMTIsNyBAQAogICAgIGNsYXNzIEZyYW1lOwogICAgIGNsYXNzIEZy
YW1lVmlldzsKICAgICBjbGFzcyBIVE1MUGx1Z0luRWxlbWVudDsKKyAgICBjbGFzcyBJbnRQb2lu
dDsKICAgICBjbGFzcyBLZXlib2FyZEV2ZW50OwogICAgIGNsYXNzIFBhZ2U7CiAgICAgY2xhc3Mg
UHJpbnRDb250ZXh0OwpAQCAtMzUxLDggKzM1NiwxMCBAQAogCiAgICAgYm9vbCBoYXNDYWNoZWRX
aW5kb3dGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2FjaGVkV2luZG93RnJhbWU7IH0KIAor
I2lmICFQTEFURk9STShJT1MpCiAgICAgdm9pZCBzZXRUb3BPdmVyaGFuZ0ltYWdlKFBhc3NSZWZQ
dHI8V2ViSW1hZ2U+KTsKICAgICB2b2lkIHNldEJvdHRvbU92ZXJoYW5nSW1hZ2UoUGFzc1JlZlB0
cjxXZWJJbWFnZT4pOworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKICAgICB2b2lkIHVwZGF0
ZUhlYWRlckFuZEZvb3RlckxheWVyc0ZvckRldmljZVNjYWxlQ2hhbmdlKGZsb2F0IHNjYWxlRmFj
dG9yKTsKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCkBAIC0zNjQsNiArMzcxLDcgQEAKICAgICBi
b29sIGhhc1BhZ2VPdmVybGF5KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlT3ZlcmxheXMuc2l6ZSgp
OyB9CiAgICAgUGFnZU92ZXJsYXlMaXN0JiBwYWdlT3ZlcmxheXMoKSB7IHJldHVybiBtX3BhZ2VP
dmVybGF5czsgfQogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICB2b2lkIHNldEhlYWRlclBhZ2VC
YW5uZXIoUGFzc1JlZlB0cjxQYWdlQmFubmVyPik7CiAgICAgUGFnZUJhbm5lciogaGVhZGVyUGFn
ZUJhbm5lcigpOwogICAgIHZvaWQgc2V0Rm9vdGVyUGFnZUJhbm5lcihQYXNzUmVmUHRyPFBhZ2VC
YW5uZXI+KTsKQEAgLTM3MSw2ICszNzksNyBAQAogCiAgICAgdm9pZCBoaWRlUGFnZUJhbm5lcnMo
KTsKICAgICB2b2lkIHNob3dQYWdlQmFubmVycygpOworI2VuZGlmIC8vICFQTEFURk9STShJT1Mp
CiAKICAgICBXZWJDb3JlOjpJbnRQb2ludCBzY3JlZW5Ub1dpbmRvdyhjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYpOwogICAgIFdlYkNvcmU6OkludFJlY3Qgd2luZG93VG9TY3JlZW4oY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYpOwpAQCAtMzg1LDYgKzM5NCwyMSBAQAogICAgIEdlb2xvY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RNYW5hZ2VyJiBnZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdl
cigpIHsgcmV0dXJuIG1fZ2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI7IH0KICNl
bmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHZvaWQgaGFuZGxlVGFwKGNvbnN0IFdlYkNv
cmU6OkludFBvaW50Jik7CisgICAgdm9pZCB0YXBIaWdobGlnaHRBdFBvc2l0aW9uKHVpbnQ2NF90
IHJlcXVlc3RJRCwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOworCisgICAgdm9pZCBibHVy
QXNzaXN0ZWROb2RlKCk7CisgICAgdm9pZCBzZWxlY3RXaXRoR2VzdHVyZShjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYsIHVpbnQzMl90IGdyYW51bGFyaXR5LCB1aW50MzJfdCBnZXN0dXJlVHlwZSwg
dWludDMyX3QgZ2VzdHVyZVN0YXRlLCB1aW50NjRfdCBjYWxsYmFja0lEKTsKKyAgICB2b2lkIHVw
ZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwg
dWludDMyX3QgdG91Y2hlcywgYm9vbCBiYXNlSXNTdGFydCwgdWludDY0X3QgY2FsbGJhY2tJRCk7
CisgICAgdm9pZCBzZWxlY3RXaXRoVHdvVG91Y2hlcyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
ZnJvbSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHRvLCB1aW50MzJfdCBnZXN0dXJlVHlwZSwg
dWludDMyX3QgZ2VzdHVyZVN0YXRlLCB1aW50NjRfdCBjYWxsYmFja0lEKTsKKyAgICB2b2lkIGV4
dGVuZFNlbGVjdGlvbih1aW50MzJfdCBncmFudWxhcml0eSk7CisgICAgdm9pZCBlbGVtZW50RGlk
Rm9jdXMoV2ViQ29yZTo6Tm9kZSopOworICAgIHZvaWQgZWxlbWVudERpZEJsdXIoV2ViQ29yZTo6
Tm9kZSopOworICAgIHZvaWQgcmVxdWVzdEF1dG9jb3JyZWN0aW9uRGF0YShjb25zdCBTdHJpbmcm
IHRleHRGb3JBdXRvY29ycmVjdGlvbiwgdWludDY0X3QgY2FsbGJhY2tJRCk7CisgICAgdm9pZCBh
cHBseUF1dG9jb3JyZWN0aW9uKGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbiwgY29uc3QgU3RyaW5n
JiBvcmlnaW5hbFRleHQsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOworI2VuZGlmCisKICAgICBOb3Rp
ZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIqIG5vdGlmaWNhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlcigpOwogCiAgICAgdm9pZCBwYWdlRGlkU2Nyb2xsKCk7CkBAIC01ODAsNiAr
NjA0LDExIEBACiAjZW5kaWYKICAgICB2b2lkIHNldFRocm90dGxlZChib29sIGlzVGhyb3R0bGVk
KTsKIAorI2lmIFBMQVRGT1JNKElPUykKKyAgICB2b2lkIGRpZEZpbmlzaFNjcm9sbGluZyhjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50JiBjb250ZW50T2Zmc2V0KTsKKyAgICB2b2lkIGRpZEZpbmlz
aFpvb21pbmcoZmxvYXQpOworI2VuZGlmCisKICNpZiBQTEFURk9STShHVEspICYmIFVTRShURVhU
VVJFX01BUFBFUl9HTCkKICAgICB1aW50NjRfdCBuYXRpdmVXaW5kb3dIYW5kbGUoKSB7IHJldHVy
biBtX25hdGl2ZVdpbmRvd0hhbmRsZTsgfQogI2VuZGlmCkBAIC05MDIsOCArOTMxLDEwIEBACiAj
ZW5kaWYKICNlbmRpZgogCisjaWYgIVBMQVRGT1JNKElPUykKICAgICBSZWZQdHI8UGFnZUJhbm5l
cj4gbV9oZWFkZXJCYW5uZXI7CiAgICAgUmVmUHRyPFBhZ2VCYW5uZXI+IG1fZm9vdGVyQmFubmVy
OworI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKICAgICBSdW5Mb29wOjpUaW1lcjxXZWJQYWdl
PiBtX3NldENhblN0YXJ0TWVkaWFUaW1lcjsKICAgICBSdW5Mb29wOjpUaW1lcjxXZWJQYWdlPiBt
X3NlbmREaWRVcGRhdGVWaWV3U3RhdGVUaW1lcjsKQEAgLTk4Myw3ICsxMDE0LDEzIEBACiAjZW5k
aWYKICAgICAKICAgICBib29sIG1fd2lsbEdvVG9CYWNrRm9yd2FyZEl0ZW1DYWxsYmFja0VuYWJs
ZWQ7Ci0gICAgCisKKyNpZiBQTEFURk9STShJT1MpCisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGU+
IG1fYXNzaXN0ZWROb2RlOworICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gbV9jdXJyZW50V29y
ZFJhbmdlOworICAgIGJvb2wgbV9zaG91bGRSZXR1cm5Xb3JkQXRTZWxlY3Rpb247CisjZW5kaWYK
KwogI2lmIEVOQUJMRShQQUdFX1ZJU0lCSUxJVFlfQVBJKQogICAgIFdlYkNvcmU6OlBhZ2VWaXNp
YmlsaXR5U3RhdGUgbV92aXNpYmlsaXR5U3RhdGU7CiAjZW5kaWYKSW5kZXg6IFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxNTk2NTEpCisrKyBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcs
MTggQEAKICAgICBNb3VzZUV2ZW50KFdlYktpdDo6V2ViTW91c2VFdmVudCBldmVudCkKICAgICBN
b3VzZUV2ZW50U3luY0ZvclRlc3RpbmcoV2ViS2l0OjpXZWJNb3VzZUV2ZW50IGV2ZW50KSAtPiAo
Ym9vbCBoYW5kbGVkKQogICAgIFdoZWVsRXZlbnRTeW5jRm9yVGVzdGluZyhXZWJLaXQ6OldlYldo
ZWVsRXZlbnQgZXZlbnQpIC0+IChib29sIGhhbmRsZWQpCisjaWYgUExBVEZPUk0oSU9TKQorICAg
IEhhbmRsZVRhcChXZWJDb3JlOjpJbnRQb2ludCBwb2ludCkKKyAgICBUYXBIaWdobGlnaHRBdFBv
c2l0aW9uKHVpbnQ2NF90IHJlcXVlc3RJRCwgV2ViQ29yZTo6RmxvYXRQb2ludCBwb2ludCkKKyAg
ICBCbHVyQXNzaXN0ZWROb2RlKCkKKyAgICBTZWxlY3RXaXRoR2VzdHVyZShXZWJDb3JlOjpJbnRQ
b2ludCBwb2ludCwgdWludDMyX3QgZ3JhbnVsYXJpdHksIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1
aW50MzJfdCBnZXN0dXJlU3RhdGUsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCisgICAgVXBkYXRlU2Vs
ZWN0aW9uV2l0aFRvdWNoZXMoV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIHVpbnQzMl90IHRvdWNo
ZXMsIGJvb2wgYmFzZUlzU3RhcnQsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCisgICAgU2VsZWN0V2l0
aFR3b1RvdWNoZXMoV2ViQ29yZTo6SW50UG9pbnQgZnJvbSwgV2ViQ29yZTo6SW50UG9pbnQgdG8s
IHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIHVpbnQ2NF90IGNh
bGxiYWNrSUQpCisgICAgRXh0ZW5kU2VsZWN0aW9uKHVpbnQzMl90IGdyYW51bGFyaXR5KQorICAg
IFJlcXVlc3RBdXRvY29ycmVjdGlvbkRhdGEoU3RyaW5nIHRleHRGb3JBdXRvY29ycmVjdGlvbiwg
dWludDY0X3QgY2FsbGJhY2tJRCkKKyAgICBBcHBseUF1dG9jb3JyZWN0aW9uKFN0cmluZyBjb3Jy
ZWN0aW9uLCBTdHJpbmcgb3JpZ2luYWxUZXh0LCB1aW50NjRfdCBjYWxsYmFja0lEKQorI2VuZGlm
CisKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIFRvdWNoRXZlbnQoV2ViS2l0OjpXZWJU
b3VjaEV2ZW50IGV2ZW50KQogICAgIFRvdWNoRXZlbnRTeW5jRm9yVGVzdGluZyhXZWJLaXQ6Oldl
YlRvdWNoRXZlbnQgZXZlbnQpIC0+IChib29sIGhhbmRsZWQpCkBAIC0yOTAsNiArMzAyLDExIEBA
CiAgICAgU2V0VmlzaWJpbGl0eVN0YXRlKHVpbnQzMl90IHZpc2liaWxpdHlTdGF0ZSwgYm9vbCBp
c0luaXRpYWxTdGF0ZSkKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9TKQorICAgIERpZEZpbmlz
aFNjcm9sbGluZyhXZWJDb3JlOjpGbG9hdFBvaW50IGNvbnRlbnRPZmZzZXQpOworICAgIERpZEZp
bmlzaFpvb21pbmcoZmxvYXQgc2NhbGUpOworI2VuZGlmCisKICNpZiBQTEFURk9STShHVEspICYm
IFVTRShURVhUVVJFX01BUFBFUl9HTCkKICAgICBTZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nV2lu
ZG93SWQoaW50NjRfdCBpZCkKICNlbmRpZgpJbmRleDogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9U
aWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYUlPUy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYlByb2Nl
c3MvV2ViUGFnZS9pb3MvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFJT1MuaAkocmV2aXNp
b24gMCkKKysrIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2lu
Z0FyZWFJT1MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYUlPU19oCisjZGVmaW5lIFRpbGVk
Q29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhSU9TX2gKKworI2luY2x1ZGUgIkRyYXdpbmdBcmVhLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9MYXllckZsdXNoU2NoZWR1bGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9MYXllckZsdXNo
U2NoZWR1bGVyQ2xpZW50Lmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitPQkpDX0NM
QVNTIENBQ29udGV4dDsKK09CSkNfQ0xBU1MgQ0FMYXllcjsKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhSU9TIDogcHVibGljIERyYXdp
bmdBcmVhLCBwcml2YXRlIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQsIHByaXZhdGUgV2Vi
Q29yZTo6TGF5ZXJGbHVzaFNjaGVkdWxlckNsaWVudCB7CitwdWJsaWM6CisgICAgVGlsZWRDb3Jl
QW5pbWF0aW9uRHJhd2luZ0FyZWFJT1MoV2ViUGFnZSosIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBh
cmFtZXRlcnMmKTsKKyAgICB2aXJ0dWFsIH5UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYUlP
UygpOworCitwcml2YXRlOgorICAgIC8vIERyYXdpbmdBcmVhCisgICAgdmlydHVhbCB2b2lkIHNl
dE5lZWRzRGlzcGxheSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3Bs
YXlJblJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBzY3JvbGwoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpIE9WRVJS
SURFOworCisgICAgLy8gR3JhcGhpY3NMYXllckNsaWVudAorICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRVc2VUaWxlZEJhY2tpbmcoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0IE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciop
IE9WRVJSSURFOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5D
bGlwKSBPVkVSUklERTsKKyAgICAKKyAgICB2aXJ0dWFsIGZsb2F0IG1pbmltdW1Eb2N1bWVudFNj
YWxlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGFsbG93Q29tcG9zaXRpbmdM
YXllclZpc3VhbERlZ3JhZGF0aW9uKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICAvLyBMYXllckZs
dXNoU2NoZWR1bGVyQ2xpZW50CisgICAgdmlydHVhbCBib29sIGZsdXNoTGF5ZXJzKCkgT1ZFUlJJ
REU7CisKKyAgICAvLyBNZXNzYWdlIGhhbmRsZXJzLgorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVH
ZW9tZXRyeShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiB2aWV3U2l6ZSwgY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgbGF5ZXJQb3NpdGlvbik7CisgICAgdmlydHVhbCB2b2lkIHNldERldmljZVNjYWxl
RmFjdG9yKGZsb2F0KSBPVkVSUklERTsKKworICAgIFdlYkNvcmU6OkxheWVyRmx1c2hTY2hlZHVs
ZXIgbV9sYXllckZsdXNoU2NoZWR1bGVyOworCisgICAgUmV0YWluUHRyPENBQ29udGV4dD4gbV9j
b250ZXh0OworICAgIFJldGFpblB0cjxDQUxheWVyPiBtX3Jvb3RMYXllcjsKKworICAgIE93blB0
cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX2NvbnRlbnRMYXllcjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFJ
T1NfaApJbmRleDogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9UaWxlZENvcmVBbmltYXRpb25EcmF3
aW5nQXJlYUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1RpbGVk
Q29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhSU9TLm1tCShyZXZpc2lvbiAwKQorKysgV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYUlPUy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5o
IgorI2ltcG9ydCAiVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFJT1MuaCIKKworI2ltcG9y
dCAiRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmgiCisjaW1wb3J0ICJXZWJQYWdlLmgiCisjaW1w
b3J0IDxRdWFydHpDb3JlL0NBQ29udGV4dC5oPgorI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpD
b3JlLmg+CisjaW1wb3J0IDxVSUtpdC9VSUtpdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5o
PgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhp
Y3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDQS5oPgorI2ltcG9y
dCA8V2ViQ29yZS9NYWluRnJhbWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUNB
TGF5ZXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYUlPUzo6flRpbGVkQ29yZUFuaW1hdGlv
bkRyYXdpbmdBcmVhSU9TKCkKK3sKKyAgICBtX2xheWVyRmx1c2hTY2hlZHVsZXIuaW52YWxpZGF0
ZSgpOworfQorCitUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYUlPUzo6VGlsZWRDb3JlQW5p
bWF0aW9uRHJhd2luZ0FyZWFJT1MoV2ViUGFnZSogd2ViUGFnZSwgY29uc3QgV2ViUGFnZUNyZWF0
aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKKyAgICA6IERyYXdpbmdBcmVhKERyYXdpbmdBcmVh
VHlwZVRpbGVkQ29yZUFuaW1hdGlvbklPUywgd2ViUGFnZSkKKyAgICAsIG1fbGF5ZXJGbHVzaFNj
aGVkdWxlcih0aGlzKQoreworICAgIFBhZ2UqIHBhZ2UgPSB3ZWJQYWdlLT5jb3JlUGFnZSgpOwor
CisgICAgcGFnZS0+c2V0dGluZ3MoKS5zZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSh0cnVlKTsKKyAg
ICBwYWdlLT5zZXR0aW5ncygpLnNldFNjcm9sbGluZ0Nvb3JkaW5hdG9yRW5hYmxlZCh0cnVlKTsK
KyAgICBwYWdlLT5zZXR0aW5ncygpLnNldERlbGVnYXRlc1BhZ2VTY2FsaW5nKHRydWUpOworICAg
IAorICAgIG1fcm9vdExheWVyID0gW0NBTGF5ZXIgbGF5ZXJdOworICAgIENHUmVjdCByb290TGF5
ZXJGcmFtZSA9IG1fd2ViUGFnZS0+Ym91bmRzKCk7CisgICAgbV9yb290TGF5ZXIuZ2V0KCkuZnJh
bWUgPSByb290TGF5ZXJGcmFtZTsKKyAgICBtX3Jvb3RMYXllci5nZXQoKS5vcGFxdWUgPSBZRVM7
CisKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gb3B0aW9ucyA9IGFkb3B0TlMo
W1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7CisKKyAgICBbb3B0aW9ucy5nZXQo
KSBzZXRPYmplY3Q6QFlFUyBmb3JLZXk6a0NBQ29udGV4dElnbm9yZXNIaXRUZXN0XTsKKworICAg
IG1fY29udGV4dCA9IFtDQUNvbnRleHQgcmVtb3RlQ29udGV4dFdpdGhPcHRpb25zOm9wdGlvbnMu
Z2V0KCldOworICAgIFttX2NvbnRleHQuZ2V0KCkgc2V0TGV2ZWw6LUNHRkxPQVRfTUFYXTsKKyAg
ICAKKyAgICBbbV9jb250ZXh0LmdldCgpIHNldExheWVyOm1fcm9vdExheWVyLmdldCgpXTsKKwor
ICAgIExheWVyVHJlZUNvbnRleHQgbGF5ZXJUcmVlQ29udGV4dDsKKyAgICBsYXllclRyZWVDb250
ZXh0LmNvbnRleHRJRCA9IFttX2NvbnRleHQuZ2V0KCkgY29udGV4dElkXTsKKworICAgIG1fd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6RW50ZXJBY2NlbGVyYXRlZENv
bXBvc2l0aW5nTW9kZSgwLCBsYXllclRyZWVDb250ZXh0KSk7CisKKyAgICBwYWdlLT5zZXR0aW5n
cygpLnNldFNob3dEZWJ1Z0JvcmRlcnModHJ1ZSk7CisgICAgcGFnZS0+c2V0dGluZ3MoKS5zZXRT
aG93UmVwYWludENvdW50ZXIoZmFsc2UpOworfQorCit2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRy
YXdpbmdBcmVhSU9TOjpzZXROZWVkc0Rpc3BsYXkoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFJT1M6OnNldE5lZWRzRGlz
cGxheUluUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhSU9TOjpzY3JvbGwo
Y29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFJT1M6OnNldFJvb3RDb21w
b3NpdGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCit7CisgICAgQ0FMYXll
ciAqcm9vdENvbXBvc2l0aW5nTGF5ZXIgPSBncmFwaGljc0xheWVyID8gZ3JhcGhpY3NMYXllci0+
cGxhdGZvcm1MYXllcigpIDogbmlsOworICAgIGlmICghcm9vdENvbXBvc2l0aW5nTGF5ZXIpCisg
ICAgICAgIHJldHVybjsKKworICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFu
c2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOworICAgIAorICAgIG1fcm9vdExheWVyLmdl
dCgpLnN1YmxheWVycyA9IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDpyb290Q29tcG9zaXRpbmdM
YXllcl07CisKKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworfQorCit2b2lkIFRpbGVkQ29y
ZUFuaW1hdGlvbkRyYXdpbmdBcmVhSU9TOjpzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgp
Cit7CisgICAgbV9sYXllckZsdXNoU2NoZWR1bGVyLnNjaGVkdWxlKCk7Cit9CisKK2Jvb2wgVGls
ZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFJT1M6OnNob3VsZFVzZVRpbGVkQmFja2luZyhjb25z
dCBHcmFwaGljc0xheWVyKikgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBU
aWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYUlPUzo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChj
b25zdCBHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpCit7Cit9CisgICAgCit2b2lkIFRpbGVk
Q29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhSU9TOjpub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IEdy
YXBoaWNzTGF5ZXIqKQoreworfQorCit2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVh
SU9TOjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQm
IGdyYXBoaWNzQ29udGV4dCwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJl
Y3QmIGNsaXBSZWN0KQoreworfQorCitmbG9hdCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJl
YUlPUzo6bWluaW11bURvY3VtZW50U2NhbGUoKSBjb25zdAoreworICAgIHJldHVybiAxLjA7Cit9
CisKK2Jvb2wgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFJT1M6OmFsbG93Q29tcG9zaXRp
bmdMYXllclZpc3VhbERlZ3JhZGF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFJT1M6OmZsdXNoTGF5ZXJzKCkK
K3sKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgbV93ZWJQYWdlLT5sYXlvdXRJZk5l
ZWRlZCgpOworICAgICAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUo
KS52aWV3KCktPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworICAg
IH0KK30KKwordm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYUlPUzo6dXBkYXRlR2Vv
bWV0cnkoY29uc3QgSW50U2l6ZSYgdmlld1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGxh
eWVyUG9zaXRpb24pCit7CisgICAgbV93ZWJQYWdlLT5zZXRTaXplKHZpZXdTaXplKTsKKyAgICBt
X3dlYlBhZ2UtPmxheW91dElmTmVlZGVkKCk7Cit9CisKK3ZvaWQgVGlsZWRDb3JlQW5pbWF0aW9u
RHJhd2luZ0FyZWFJT1M6OnNldERldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFj
dG9yKQoreworICAgIG1fd2ViUGFnZS0+c2V0RGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVG
YWN0b3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvV2ViQmFja0ZvcndhcmRMaXN0UHJveHlJT1MubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
UHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJCYWNrRm9yd2FyZExpc3RQcm94eUlPUy5tbQkocmV2aXNp
b24gMCkKKysrIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViQmFja0ZvcndhcmRMaXN0UHJveHlJ
T1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuaCIKKworI2lt
cG9ydCA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
dW5zaWduZWQgV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OmN1cnJlbnQoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgV2ViQmFja0ZvcndhcmRMaXN0
UHJveHk6OnNldEN1cnJlbnQodW5zaWduZWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KworYm9vbCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6Y2xlYXJBbGxQYWdlQ2FjaGVzKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCShyZXZp
c2lvbiAwKQorKysgV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJXZWJQYWdlLmgiCisKKyNpbXBvcnQgIkVkaXRvclN0YXRlLmgiCisjaW1wb3J0
ICJXZWJDaHJvbWVDbGllbnQuaCIKKyNpbXBvcnQgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgor
I2ltcG9ydCAiV2ViRnJhbWUuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCisj
aW1wb3J0ICJXZWJQcm9jZXNzLmgiCisjaW1wb3J0ICJXS0dlc3R1cmVUeXBlcy5oIgorI2ltcG9y
dCA8Q29yZVRleHQvQ1RGb250Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0Nocm9tZS5oPgorI2ltcG9y
dCA8V2ViQ29yZS9FbGVtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50SGFuZGxlci5oPgor
I2ltcG9ydCA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRmxv
YXRRdWFkLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Zy
YW1lVmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9NYWluRnJhbWUuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgorI2ltcG9ydCA8
V2ViQ29yZS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxhdGZv
cm1Nb3VzZUV2ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorI2ltcG9y
dCA8V2ViQ29yZS9UZXh0SXRlcmF0b3IuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVmlzaWJsZVVuaXRz
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYkV2ZW50Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBXZWJQYWdlOjpwbGF0Zm9ybUluaXRp
YWxpemUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6cGxh
dGZvcm1QcmVmZXJlbmNlc0RpZENoYW5nZShjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJikKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFdlYlBhZ2U6OmV4ZWN1dGVLZXlwcmVz
c0NvbW1hbmRzSW50ZXJuYWwoY29uc3QgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4m
LCBLZXlib2FyZEV2ZW50KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBXZWJQYWdlOjpoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudChLZXli
b2FyZEV2ZW50KiBldmVudCwgYm9vbCkKK3sKKyAgICBib29sIGV2ZW50V2FzSGFuZGxlZCA9IGZh
bHNlOworICAgIGJvb2wgc2VuZFJlc3VsdCA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkludGVy
cHJldEtleUV2ZW50KGVkaXRvclN0YXRlKCksIGV2ZW50LT5rZXlFdmVudCgpLT50eXBlKCkgPT0g
UGxhdGZvcm1LZXlib2FyZEV2ZW50OjpDaGFyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpJbnRlcnByZXRLZXlFdmVudDo6UmVwbHkoZXZlbnRXYXNIYW5k
bGVkKSwgbV9wYWdlSUQpOworICAgIGlmICghc2VuZFJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIGV2ZW50V2FzSGFuZGxlZDsKK30KKwordm9pZCBXZWJQYWdlOjpz
ZW5kQ29tcGxleFRleHRJbnB1dFRvUGx1Z2luKHVpbnQ2NF90LCBjb25zdCBTdHJpbmcmKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6c2V0Q29tcG9zaXRpb24o
Y29uc3QgU3RyaW5nJiwgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiwgdWludDY0X3QsIHVp
bnQ2NF90LCB1aW50NjRfdCwgdWludDY0X3QsIEVkaXRvclN0YXRlJikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlBhZ2U6OmNvbmZpcm1Db21wb3NpdGlvbihFZGl0b3JT
dGF0ZSYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJQYWdlOjpjYW5j
ZWxDb21wb3NpdGlvbihFZGl0b3JTdGF0ZSYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kworc3RhdGljIFBhc3NSZWZQdHI8UmFuZ2U+IGNvbnZlcnRUb1JhbmdlKEZyYW1lKiBmcmFtZSwg
TlNSYW5nZSBuc3JhbmdlKQoreworICAgIGlmIChuc3JhbmdlLmxvY2F0aW9uID4gSU5UX01BWCkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKG5zcmFuZ2UubGVuZ3RoID4gSU5UX01BWCB8fCBu
c3JhbmdlLmxvY2F0aW9uICsgbnNyYW5nZS5sZW5ndGggPiBJTlRfTUFYKQorICAgICAgICBuc3Jh
bmdlLmxlbmd0aCA9IElOVF9NQVggLSBuc3JhbmdlLmxvY2F0aW9uOworICAgIAorICAgIC8vIG91
ciBjcml0aWNhbCBhc3N1bXB0aW9uIGlzIHRoYXQgd2UgYXJlIG9ubHkgY2FsbGVkIGJ5IGlucHV0
IG1ldGhvZHMgdGhhdAorICAgIC8vIGNvbmNlbnRyYXRlIG9uIGEgZ2l2ZW4gYXJlYSBjb250YWlu
aW5nIHRoZSBzZWxlY3Rpb24KKyAgICAvLyBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZSBvZiB0
ZXh0IGZpZWxkcyBhbmQgdGV4dGFyZWFzLiBUaGUgRE9NIGZvciB0aG9zZSBpcyBub3QKKyAgICAv
LyBkaXJlY3RseSBpbiB0aGUgZG9jdW1lbnQgRE9NLCBzbyBzZXJpYWxpemF0aW9uIGlzIHByb2Js
ZW1hdGljLiBPdXIgc29sdXRpb24gaXMKKyAgICAvLyB0byB1c2UgdGhlIHJvb3QgZWRpdGFibGUg
ZWxlbWVudCBvZiB0aGUgc2VsZWN0aW9uIHN0YXJ0IGFzIHRoZSBwb3NpdGlvbmFsIGJhc2UuCisg
ICAgLy8gVGhhdCBmaXRzIHdpdGggQXBwS2l0J3MgaWRlYSBvZiBhbiBpbnB1dCBjb250ZXh0Lgor
ICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKGZyYW1l
LT5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKSwgbnNy
YW5nZS5sb2NhdGlvbiwgbnNyYW5nZS5sZW5ndGgpOworfQorCit2b2lkIFdlYlBhZ2U6Omluc2Vy
dFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQs
IHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VFbmQsIGJvb2wmIGhhbmRsZWQsIEVkaXRvclN0YXRl
JiBuZXdTdGF0ZSkKK3sKKyAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxl
cigpLmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIAorICAgIGlmIChyZXBsYWNlbWVudFJhbmdl
U3RhcnQgIT0gTlNOb3RGb3VuZCkgeworICAgICAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50
UmFuZ2UgPSBjb252ZXJ0VG9SYW5nZSgmZnJhbWUsIE5TTWFrZVJhbmdlKHJlcGxhY2VtZW50UmFu
Z2VTdGFydCwgcmVwbGFjZW1lbnRSYW5nZUVuZCAtIHJlcGxhY2VtZW50UmFuZ2VTdGFydCkpOwor
ICAgICAgICBpZiAocmVwbGFjZW1lbnRSYW5nZSkKKyAgICAgICAgICAgIGZyYW1lLnNlbGVjdGlv
bigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCks
IFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CisgICAgfQorICAgIAorICAgIGlmICghZnJhbWUuZWRp
dG9yKCkuaGFzQ29tcG9zaXRpb24oKSkgeworICAgICAgICAvLyBBbiBpbnNlcnRUZXh0OiBtaWdo
dCBiZSBoYW5kbGVkIGJ5IG90aGVyIHJlc3BvbmRlcnMgaW4gdGhlIGNoYWluIGlmIHdlIGRvbid0
IGhhbmRsZSBpdC4KKyAgICAgICAgLy8gT25lIGV4YW1wbGUgaXMgc3BhY2UgYmFyIHRoYXQgcmVz
dWx0cyBpbiBzY3JvbGxpbmcgZG93biB0aGUgcGFnZS4KKyAgICAgICAgaGFuZGxlZCA9IGZyYW1l
LmVkaXRvcigpLmluc2VydFRleHQodGV4dCwgMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaGFu
ZGxlZCA9IHRydWU7CisgICAgICAgIGZyYW1lLmVkaXRvcigpLmNvbmZpcm1Db21wb3NpdGlvbih0
ZXh0KTsKKyAgICB9CisgICAgCisgICAgbmV3U3RhdGUgPSBlZGl0b3JTdGF0ZSgpOworfQorCit2
b2lkIFdlYlBhZ2U6Omluc2VydERpY3RhdGVkVGV4dChjb25zdCBTdHJpbmcmLCB1aW50NjRfdCwg
dWludDY0X3QsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZT4mLCBi
b29sJiwgRWRpdG9yU3RhdGUmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
V2ViUGFnZTo6Z2V0TWFya2VkUmFuZ2UodWludDY0X3QmLCB1aW50NjRfdCYpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJQYWdlOjpnZXRTZWxlY3RlZFJhbmdlKHVpbnQ2
NF90JiwgdWludDY0X3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2Vi
UGFnZTo6Z2V0QXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZSh1aW50NjRfdCwgdWludDY0X3Qs
IEF0dHJpYnV0ZWRTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
V2ViUGFnZTo6Y2hhcmFjdGVySW5kZXhGb3JQb2ludChJbnRQb2ludCwgdWludDY0X3QmKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6Zmlyc3RSZWN0Rm9yQ2hh
cmFjdGVyUmFuZ2UodWludDY0X3QsIHVpbnQ2NF90LCBXZWJDb3JlOjpJbnRSZWN0JikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlBhZ2U6OmV4ZWN1dGVLZXlwcmVzc0Nv
bW1hbmRzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+JiwgYm9vbCYsIEVk
aXRvclN0YXRlJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlBhZ2U6
OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JikKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9u
YXJ5TG9va3VwRm9yU2VsZWN0aW9uKEZyYW1lKiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlv
bmFyeUxvb2t1cEZvclJhbmdlKEZyYW1lKiwgUmFuZ2UqLCBOU0RpY3Rpb25hcnkgKikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFdlYlBhZ2U6OnBlcmZvcm1Ob25FZGl0aW5n
QmVoYXZpb3JGb3JTZWxlY3Rvcihjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpLZXlib2FyZEV2ZW50
KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBXZWJQYWdlOjpwZXJmb3JtRGVmYXVsdEJlaGF2aW9yRm9yS2V5RXZlbnQoY29uc3QgV2ViS2V5
Ym9hcmRFdmVudCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgV2ViUGFnZTo6cmVnaXN0ZXJVSVByb2Nlc3NBY2Nlc3NpYmlsaXR5VG9rZW5z
KGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJl
bmNlJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlBhZ2U6OnJlYWRT
ZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChjb25zdCBTdHJpbmcmLCBib29sJikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlBhZ2U6OmdldFN0cmluZ1NlbGVjdGlvbkZvclBh
c3RlYm9hcmQoU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdl
YlBhZ2U6OmdldERhdGFTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKGNvbnN0IFN0cmluZywgU2hhcmVk
TWVtb3J5OjpIYW5kbGUmLCB1aW50NjRfdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KworV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdCogV2ViUGFnZTo6YWNjZXNzaWJpbGl0eVJl
bW90ZU9iamVjdCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30K
KworYm9vbCBXZWJQYWdlOjpwbGF0Zm9ybUhhc0xvY2FsRGF0YUZvclVSTChjb25zdCBXZWJDb3Jl
OjpVUkwmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
CitTdHJpbmcgV2ViUGFnZTo6Y2FjaGVkU3VnZ2VzdGVkRmlsZW5hbWVGb3JVUkwoY29uc3QgVVJM
JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwor
U3RyaW5nIFdlYlBhZ2U6OmNhY2hlZFJlc3BvbnNlTUlNRVR5cGVGb3JVUkwoY29uc3QgVVJMJikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IFdlYlBhZ2U6OmNhY2hlZFJlc3BvbnNlRGF0YUZvclVSTChj
b25zdCBVUkwmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K2Jvb2wgV2ViUGFnZTo6cGxhdGZvcm1DYW5IYW5kbGVSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgV2ViUGFnZTo6c2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0V2ZW50KGNv
bnN0IFdlYktpdDo6V2ViTW91c2VFdmVudCYsIGJvb2wmKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6YWNjZXB0c0ZpcnN0TW91c2UoaW50LCBjb25zdCBXZWJL
aXQ6OldlYk1vdXNlRXZlbnQmLCBib29sJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIFdlYlBhZ2U6OnNldExheWVySG9zdGluZ01vZGUoTGF5ZXJIb3N0aW5nTW9kZSkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlBhZ2U6OmNvbXB1dGVQYWdlc0Zv
clByaW50aW5nUERGRG9jdW1lbnQodWludDY0X3QsIGNvbnN0IFByaW50SW5mbyYsIFZlY3RvcjxJ
bnRSZWN0PiYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJQYWdlOjpk
cmF3UGFnZXNUb1BERkZyb21QREZEb2N1bWVudChDR0NvbnRleHRSZWYsIFBERkRvY3VtZW50ICos
IGNvbnN0IFByaW50SW5mbyYsIHVpbnQzMl90LCB1aW50MzJfdCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIFdlYlBhZ2U6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29s
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6aGFuZGxlVGFw
KGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sKKyAgICBGcmFtZSYgbWFpbmZyYW1lID0gbV9wYWdl
LT5tYWluRnJhbWUoKTsKKyAgICBGbG9hdFBvaW50IGFkanVzdGVkUG9pbnQ7CisgICAgbWFpbmZy
YW1lLm5vZGVSZXNwb25kaW5nVG9DbGlja0V2ZW50cyhwb2ludCwgYWRqdXN0ZWRQb2ludCk7Cisg
ICAgSW50UG9pbnQgcm91bmRlZEFkanVzdGVkUG9pbnQgPSByb3VuZGVkSW50UG9pbnQoYWRqdXN0
ZWRQb2ludCk7CisKKyAgICBtYWluZnJhbWUuZXZlbnRIYW5kbGVyKCkubW91c2VNb3ZlZChQbGF0
Zm9ybU1vdXNlRXZlbnQocm91bmRlZEFkanVzdGVkUG9pbnQsIHJvdW5kZWRBZGp1c3RlZFBvaW50
LCBOb0J1dHRvbiwgUGxhdGZvcm1FdmVudDo6TW91c2VNb3ZlZCwgMCwgZmFsc2UsIGZhbHNlLCBm
YWxzZSwgZmFsc2UsIDApKTsKKyAgICBtYWluZnJhbWUuZXZlbnRIYW5kbGVyKCkuaGFuZGxlTW91
c2VQcmVzc0V2ZW50KFBsYXRmb3JtTW91c2VFdmVudChyb3VuZGVkQWRqdXN0ZWRQb2ludCwgcm91
bmRlZEFkanVzdGVkUG9pbnQsIExlZnRCdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlUHJlc3Nl
ZCwgMSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDApKTsKKyAgICBtYWluZnJhbWUuZXZl
bnRIYW5kbGVyKCkuaGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KHJv
dW5kZWRBZGp1c3RlZFBvaW50LCByb3VuZGVkQWRqdXN0ZWRQb2ludCwgTGVmdEJ1dHRvbiwgUGxh
dGZvcm1FdmVudDo6TW91c2VSZWxlYXNlZCwgMSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2Us
IDApKTsKK30KKwordm9pZCBXZWJQYWdlOjp0YXBIaWdobGlnaHRBdFBvc2l0aW9uKHVpbnQ2NF90
IHJlcXVlc3RJRCwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCit7CisgICAgRnJhbWUmIG1h
aW5mcmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCk7CisgICAgRmxvYXRQb2ludCBhZGp1c3RlZFBv
aW50OworICAgIE5vZGUqIG5vZGUgPSBtYWluZnJhbWUubm9kZVJlc3BvbmRpbmdUb0NsaWNrRXZl
bnRzKHBvc2l0aW9uLCBhZGp1c3RlZFBvaW50KTsKKworICAgIGlmICghbm9kZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7
CisKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKKyAgICBpZiAocmVuZGVyZXIpIHsKKyAg
ICAgICAgcmVuZGVyZXItPmFic29sdXRlUXVhZHMocXVhZHMpOworICAgICAgICBDb2xvciBoaWdo
bGlnaHRDb2xvciA9IG5vZGUtPmNvbXB1dGVkU3R5bGUoKS0+dGFwSGlnaGxpZ2h0Q29sb3IoKTsK
KworICAgICAgICBSb3VuZGVkUmVjdDo6UmFkaWkgYm9yZGVyUmFkaWk7CisgICAgICAgIGlmIChy
ZW5kZXJlci0+aXNCb3goKSkgeworICAgICAgICAgICAgUmVuZGVyQm94KiBib3ggPSB0b1JlbmRl
ckJveChyZW5kZXJlcik7CisgICAgICAgICAgICBib3JkZXJSYWRpaSA9IGJveC0+Ym9yZGVyUmFk
aWkoKTsKKyAgICAgICAgfQorCisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
RGlkR2V0VGFwSGlnaGxpZ2h0R2VvbWV0cmllcyhyZXF1ZXN0SUQsIGhpZ2hsaWdodENvbG9yLCBx
dWFkcywgYm9yZGVyUmFkaWkudG9wTGVmdCgpLCBib3JkZXJSYWRpaS50b3BSaWdodCgpLCBib3Jk
ZXJSYWRpaS5ib3R0b21MZWZ0KCksIGJvcmRlclJhZGlpLmJvdHRvbVJpZ2h0KCkpKTsKKyAgICB9
Cit9CisKK3ZvaWQgV2ViUGFnZTo6Ymx1ckFzc2lzdGVkTm9kZSgpCit7CisgICAgaWYgKG1fYXNz
aXN0ZWROb2RlICYmIG1fYXNzaXN0ZWROb2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIHRv
RWxlbWVudChtX2Fzc2lzdGVkTm9kZS5nZXQoKSktPmJsdXIoKTsKK30KKworc3RhdGljIEZsb2F0
UXVhZCBpbm5lckZyYW1lUXVhZChGcmFtZSogZnJhbWUsIE5vZGUqIGFzc2lzdGVkTm9kZSkKK3sK
KyAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hl
ZXRzKCk7CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlcjsKKyAgICBpZiAoYXNzaXN0ZWROb2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGV4dGFyZWFUYWcpIHx8IGFzc2lzdGVkTm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSkKKyAgICAgICAgcmVuZGVyZXIgPSBhc3Npc3Rl
ZE5vZGUtPnJlbmRlcmVyKCk7CisgICAgZWxzZQorICAgICAgICByZW5kZXJlciA9IGFzc2lzdGVk
Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpLT5yZW5kZXJlcigpOworICAgIAorICAgIGlmICgh
cmVuZGVyZXIpCisgICAgICAgIHJldHVybiBGbG9hdFF1YWQoKTsKKworICAgIFJlbmRlclN0eWxl
JiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOworICAgIEludFJlY3QgYm91bmRpbmdCb3ggPSBy
ZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QodHJ1ZSAvKiB1c2UgdHJhbnNmb3Jtcyov
KTsKKworICAgIGJvdW5kaW5nQm94Lm1vdmUoc3R5bGUuYm9yZGVyTGVmdFdpZHRoKCksIHN0eWxl
LmJvcmRlclRvcFdpZHRoKCkpOworICAgIGJvdW5kaW5nQm94LnNldFdpZHRoKGJvdW5kaW5nQm94
LndpZHRoKCkgLSBzdHlsZS5ib3JkZXJMZWZ0V2lkdGgoKSAtIHN0eWxlLmJvcmRlclJpZ2h0V2lk
dGgoKSk7CisgICAgYm91bmRpbmdCb3guc2V0SGVpZ2h0KGJvdW5kaW5nQm94LmhlaWdodCgpIC0g
c3R5bGUuYm9yZGVyQm90dG9tV2lkdGgoKSAtIHN0eWxlLmJvcmRlclRvcFdpZHRoKCkpOworCisg
ICAgcmV0dXJuIEZsb2F0UXVhZChib3VuZGluZ0JveCk7Cit9CisKK3N0YXRpYyBJbnRQb2ludCBj
b25zdHJhaW5Qb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQsIEZyYW1lKiBmcmFtZSwgTm9kZSog
YXNzaXN0ZWROb2RlKQoreworICAgIGNvbnN0IGludCBERUZBVUxUX0NPTlNUUkFJTl9JTlNFVCA9
IDI7CisgICAgSW50UmVjdCBpbm5lckZyYW1lID0gaW5uZXJGcmFtZVF1YWQoZnJhbWUsIGFzc2lz
dGVkTm9kZSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICBJbnRQb2ludCBjb25zdHJhaW5l
ZFBvaW50ID0gcG9pbnQ7CisKKyAgICBpbnQgbWluWCA9IGlubmVyRnJhbWUueCgpICsgREVGQVVM
VF9DT05TVFJBSU5fSU5TRVQ7CisgICAgaW50IG1heFggPSBpbm5lckZyYW1lLm1heFgoKSAtIERF
RkFVTFRfQ09OU1RSQUlOX0lOU0VUOworICAgIGludCBtaW5ZID0gaW5uZXJGcmFtZS55KCkgKyBE
RUZBVUxUX0NPTlNUUkFJTl9JTlNFVDsKKyAgICBpbnQgbWF4WSA9IGlubmVyRnJhbWUubWF4WSgp
IC0gREVGQVVMVF9DT05TVFJBSU5fSU5TRVQ7CisKKyAgICBpZiAocG9pbnQueCgpIDwgbWluWCkK
KyAgICAgICAgY29uc3RyYWluZWRQb2ludC5zZXRYKG1pblgpOworICAgIGVsc2UgaWYgKHBvaW50
LngoKSA+IG1heFgpCisgICAgICAgIGNvbnN0cmFpbmVkUG9pbnQuc2V0WChtYXhYKTsKKworICAg
IGlmIChwb2ludC55KCkgPCBtaW5ZKQorICAgICAgICBjb25zdHJhaW5lZFBvaW50LnNldFkobWlu
WSk7CisgICAgZWxzZSBpZiAocG9pbnQueSgpID49IG1heFkpCisgICAgICAgIGNvbnN0cmFpbmVk
UG9pbnQuc2V0WShtYXhZKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgcmV0dXJuIGNvbnN0
cmFpbmVkUG9pbnQ7Cit9CisKK3ZvaWQgV2ViUGFnZTo6c2VsZWN0V2l0aEdlc3R1cmUoY29uc3Qg
SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCBncmFudWxhcml0eSwgdWludDMyX3QgZ2VzdHVyZVR5
cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgdWludDY0X3QgY2FsbGJhY2tJRCkKK3sKKyAgICBG
cmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFt
ZSgpOworICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRQb2ludChwb2ludCk7CisgICAgTm9kZSogbm9k
ZSA9IGZyYW1lLm5vZGVSZXNwb25kaW5nVG9DbGlja0V2ZW50cyhGbG9hdFBvaW50KHBvaW50KSwg
YWRqdXN0ZWRQb2ludCk7CisgICAgaWYgKG5vZGUgJiYgbm9kZSAhPSBtX2Fzc2lzdGVkTm9kZS5n
ZXQoKSkgeworICAgICAgICBoYW5kbGVUYXAoSW50UG9pbnQoYWRqdXN0ZWRQb2ludCkpOworICAg
ICAgICBpZiAoIW1fYXNzaXN0ZWROb2RlKSB7CisgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6Okdlc3R1cmVDYWxsYmFjayhwb2ludCwgZ2VzdHVyZVR5cGUsIGdlc3R1cmVT
dGF0ZSwgMCwgY2FsbGJhY2tJRCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgfQorICAgIEludFBvaW50IGNvbnN0cmFpbmVkUG9pbnQgPSBjb25zdHJhaW5Qb2ludChwb2lu
dCwgJmZyYW1lLCBtX2Fzc2lzdGVkTm9kZS5nZXQoKSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHBv
c2l0aW9uID0gZnJhbWUudmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoY29uc3RyYWluZWRQb2ludCk7
CisgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKSB7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6R2VzdHVyZUNhbGxiYWNrKHBvaW50LCBnZXN0dXJlVHlwZSwgZ2VzdHVyZVN0
YXRlLCAwLCBjYWxsYmFja0lEKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUmVmUHRy
PFJhbmdlPiByYW5nZTsKKyAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PFdLR2VzdHVyZVR5cGU+KGdl
c3R1cmVUeXBlKSkgeworICAgIGNhc2UgV0tHZXN0dXJlT25lRmluZ2VyVGFwOgorICAgIHsKKyAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHJlc3VsdDsKKyAgICAgICAgLy8gbW92ZSB0aGUgdGhlIHBv
c2l0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIHdvcmQKKyAgICAgICAgaWYgKGF0Qm91bmRhcnlPZkdy
YW51bGFyaXR5KHBvc2l0aW9uLCBMaW5lR3JhbnVsYXJpdHksIERpcmVjdGlvbkZvcndhcmQpKSB7
CisgICAgICAgICAgICAvLyBEb24ndCBjcm9zcyBsaW5lIGJvdW5kYXJpZXMuCisgICAgICAgICAg
ICByZXN1bHQgPSBwb3NpdGlvbjsKKyAgICAgICAgfSBlbHNlIGlmICh3aXRoaW5UZXh0VW5pdE9m
R3JhbnVsYXJpdHkocG9zaXRpb24sIFdvcmRHcmFudWxhcml0eSwgRGlyZWN0aW9uRm9yd2FyZCkp
IHsKKyAgICAgICAgICAgIC8vIFRoZSBwb3NpdGlvbiBsaWVzIHdpdGhpbiBhIHdvcmQuCisgICAg
ICAgICAgICBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFu
dWxhcml0eShwb3NpdGlvbiwgV29yZEdyYW51bGFyaXR5LCBEaXJlY3Rpb25Gb3J3YXJkKTsKKwor
ICAgICAgICAgICAgcmVzdWx0ID0gd29yZFJhbmdlLT5zdGFydFBvc2l0aW9uKCk7CisgICAgICAg
ICAgICBpZiAoZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKHBvc2l0aW9uLCByZXN1bHQpID4gMSkK
KyAgICAgICAgICAgICAgICByZXN1bHQgPSB3b3JkUmFuZ2UtPmVuZFBvc2l0aW9uKCk7CisgICAg
ICAgIH0gZWxzZSBpZiAoYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFdvcmRHcmFu
dWxhcml0eSwgRGlyZWN0aW9uQmFja3dhcmQpKSB7CisgICAgICAgICAgICAvLyBUaGUgcG9zaXRp
b24gaXMgYXQgdGhlIGVuZCBvZiBhIHdvcmQuCisgICAgICAgICAgICByZXN1bHQgPSBwb3NpdGlv
bjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFRoZSBwb3NpdGlvbiBpcyBub3Qg
d2l0aGluIGEgd29yZC4KKyAgICAgICAgICAgIC8vIEdvIHRvIHRoZSBuZXh0IGJvdW5kYXJ5Lgor
ICAgICAgICAgICAgcmVzdWx0ID0gcG9zaXRpb25PZk5leHRCb3VuZGFyeU9mR3JhbnVsYXJpdHko
cG9zaXRpb24sIFdvcmRHcmFudWxhcml0eSwgRGlyZWN0aW9uRm9yd2FyZCk7CisKKyAgICAgICAg
ICAgIC8vIElmIHRoZXJlIGlzIG5vIHN1Y2ggYm91bmRhcnkgd2UgZ28gdG8gdGhlIGVuZCBvZiB0
aGUgZWxlbWVudC4KKyAgICAgICAgICAgIGlmIChyZXN1bHQuaXNOdWxsKCkpCisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gZW5kT2ZFZGl0YWJsZUNvbnRlbnQocG9zaXRpb24pOworICAgICAgICB9
CisgICAgICAgIGlmIChyZXN1bHQuaXNOb3ROdWxsKCkpCisgICAgICAgICAgICByYW5nZSA9IFJh
bmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHJlc3VsdCwgcmVzdWx0KTsKKyAgICAgICAg
aWYgKHJhbmdlKQorICAgICAgICAgICAgbV9zaG91bGRSZXR1cm5Xb3JkQXRTZWxlY3Rpb24gPSB0
cnVlOworICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdLR2VzdHVyZUxvdXBlOgor
ICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9u
LCBwb3NpdGlvbik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXS0dlc3R1cmVUYXBBbmRB
SGFsZjoKKyAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxXS0dlc3R1cmVSZWNvZ25pemVyU3Rh
dGU+KGdlc3R1cmVTdGF0ZSkpIHsKKyAgICAgICAgY2FzZSBXS0dlc3R1cmVSZWNvZ25pemVyU3Rh
dGVCZWdhbjoKKyAgICAgICAgICAgIHJhbmdlID0gd29yZFJhbmdlRnJvbVBvc2l0aW9uKHBvc2l0
aW9uKTsKKyAgICAgICAgICAgIG1fY3VycmVudFdvcmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZy
YW1lLmRvY3VtZW50KCksIHJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHJhbmdlLT5lbmRQb3NpdGlv
bigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdLR2VzdHVyZVJlY29nbml6
ZXJTdGF0ZUNoYW5nZWQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNy
ZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgbV9jdXJyZW50V29yZFJhbmdlLT5zdGFydFBvc2l0aW9u
KCksIG1fY3VycmVudFdvcmRSYW5nZS0+ZW5kUG9zaXRpb24oKSk7CisgICAgICAgICAgICBFeGNl
cHRpb25Db2RlIGVjOworICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgcmFuZ2UtPnN0YXJ0UG9z
aXRpb24oKSkKKyAgICAgICAgICAgICAgICByYW5nZS0+c2V0U3RhcnQocG9zaXRpb24uZGVlcEVx
dWl2YWxlbnQoKSwgZWMpOworICAgICAgICAgICAgaWYgKHBvc2l0aW9uID4gcmFuZ2UtPmVuZFBv
c2l0aW9uKCkpCisgICAgICAgICAgICAgICAgcmFuZ2UtPnNldEVuZChwb3NpdGlvbi5kZWVwRXF1
aXZhbGVudCgpLCBlYyk7CisgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFdLR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUVuZGVkOgorICAgICAgICBjYXNlIFdLR2VzdHVy
ZVJlY29nbml6ZXJTdGF0ZUNhbmNlbGxlZDoKKyAgICAgICAgICAgIG1fY3VycmVudFdvcmRSYW5n
ZSA9IG51bGxwdHI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXS0dlc3R1cmVS
ZWNvZ25pemVyU3RhdGVGYWlsZWQ6CisgICAgICAgIGNhc2UgV0tHZXN0dXJlUmVjb2duaXplclN0
YXRlUG9zc2libGU6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgV0tHZXN0dXJlT25lRmluZ2VyRG91YmxlVGFw
OgorICAgICAgICBpZiAoYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkocG9zaXRpb24sIExpbmVHcmFu
dWxhcml0eSwgRGlyZWN0aW9uRm9yd2FyZCkpIHsKKyAgICAgICAgICAgIC8vIERvdWJsZS10YXAg
YXQgZW5kIG9mIGxpbmUgb25seSBwbGFjZXMgaW5zZXJ0aW9uIHBvaW50IHRoZXJlLgorICAgICAg
ICAgICAgLy8gVGhpcyBoZWxwcyB0byBnZXQgdGhlIGNhbGxvdXQgZm9yIHBhc3RpbmcgYXQgZW5k
cyBvZiBsaW5lcywKKyAgICAgICAgICAgIC8vIHBhcmFncmFwaHMsIGFuZCBkb2N1bWVudHMuCisg
ICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0
aW9uLCBwb3NpdGlvbik7CisgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJhbmdlID0gd29y
ZFJhbmdlRnJvbVBvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IFdLR2VzdHVyZVR3b0ZpbmdlclNpbmdsZVRhcDoKKyAgICAgICAgLy8gU2luZ2xlIHRhcCB3aXRo
IHR3byBmaW5nZXJzIHNlbGVjdHMgdGhlIGVudGlyZSBwYXJhZ3JhcGguCisgICAgICAgIHJhbmdl
ID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBQYXJhZ3JhcGhHcmFu
dWxhcml0eSwgRGlyZWN0aW9uRm9yd2FyZCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBX
S0dlc3R1cmVPbmVGaW5nZXJUcmlwbGVUYXA6CisgICAgICAgIGlmIChhdEJvdW5kYXJ5T2ZHcmFu
dWxhcml0eShwb3NpdGlvbiwgTGluZUdyYW51bGFyaXR5LCBEaXJlY3Rpb25Gb3J3YXJkKSkgewor
ICAgICAgICAgICAgLy8gVHJpcGxlLXRhcCBhdCBlbmQgb2YgbGluZSBvbmx5IHBsYWNlcyBpbnNl
cnRpb24gcG9pbnQgdGhlcmUuCisgICAgICAgICAgICAvLyBUaGlzIGhlbHBzIHRvIGdldCB0aGUg
Y2FsbG91dCBmb3IgcGFzdGluZyBhdCBlbmRzIG9mIGxpbmVzLAorICAgICAgICAgICAgLy8gcGFy
YWdyYXBocywgYW5kIGRvY3VtZW50cy4KKyAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0
ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0aW9uKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICByYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShwb3Np
dGlvbiwgUGFyYWdyYXBoR3JhbnVsYXJpdHksIERpcmVjdGlvbkZvcndhcmQpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGlmIChyYW5nZSkKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShy
YW5nZS5nZXQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgdHJ1ZSk7CisKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6Okdlc3R1cmVDYWxsYmFjayhwb2ludCwgZ2VzdHVyZVR5cGUsIGdl
c3R1cmVTdGF0ZSwgMCwgY2FsbGJhY2tJRCkpOworICAgIG1fc2hvdWxkUmV0dXJuV29yZEF0U2Vs
ZWN0aW9uID0gZmFsc2U7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZUZvclBv
c2l0aW9uKEZyYW1lKiBmcmFtZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgYm9v
bCBiYXNlSXNTdGFydCkKK3sKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOworICAgIFZpc2libGVQ
b3NpdGlvbiByZXN1bHQgPSBwb3NpdGlvbjsKKworICAgIGlmIChiYXNlSXNTdGFydCkgeworICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0aW9uU3RhcnQgPSBmcmFtZS0+c2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CisgICAgICAgIGJvb2wgd291bGRGbGlwID0gcG9z
aXRpb24gPD0gc2VsZWN0aW9uU3RhcnQ7CisKKyAgICAgICAgaWYgKHdvdWxkRmxpcCkKKyAgICAg
ICAgICAgIHJlc3VsdCA9IHNlbGVjdGlvblN0YXJ0Lm5leHQoKTsKKworICAgICAgICBpZiAocmVz
dWx0LmlzTm90TnVsbCgpKQorICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFt
ZS0+ZG9jdW1lbnQoKSwgc2VsZWN0aW9uU3RhcnQsIHJlc3VsdCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvbkVuZCA9IGZyYW1lLT5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS52aXNpYmxlRW5kKCk7CisgICAgICAgIGJvb2wgd291bGRGbGlwID0gcG9zaXRp
b24gPj0gc2VsZWN0aW9uRW5kOworCisgICAgICAgIGlmICh3b3VsZEZsaXApCisgICAgICAgICAg
ICByZXN1bHQgPSBzZWxlY3Rpb25FbmQucHJldmlvdXMoKTsKKworICAgICAgICBpZiAocmVzdWx0
LmlzTm90TnVsbCgpKQorICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS0+
ZG9jdW1lbnQoKSwgcmVzdWx0LCBzZWxlY3Rpb25FbmQpOworICAgIH0KKworICAgIHJldHVybiBy
YW5nZS5yZWxlYXNlKCk7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZUF0V29y
ZEJvdW5kYXJ5Rm9yUG9zaXRpb24oRnJhbWUqIGZyYW1lLCBjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHBvc2l0aW9uLCBib29sIGJhc2VJc1N0YXJ0LCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9u
KQoreworICAgIFNlbGVjdGlvbkRpcmVjdGlvbiBzYW1lRGlyZWN0aW9uID0gYmFzZUlzU3RhcnQg
PyBEaXJlY3Rpb25Gb3J3YXJkIDogRGlyZWN0aW9uQmFja3dhcmQ7CisgICAgU2VsZWN0aW9uRGly
ZWN0aW9uIG9wcG9zaXRlRGlyZWN0aW9uID0gYmFzZUlzU3RhcnQgPyBEaXJlY3Rpb25CYWNrd2Fy
ZCA6IERpcmVjdGlvbkZvcndhcmQ7CisgICAgVmlzaWJsZVBvc2l0aW9uIGJhc2UgPSBiYXNlSXNT
dGFydCA/IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSA6IGZy
YW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlRW5kKCk7CisgICAgVmlzaWJsZVBv
c2l0aW9uIGV4dGVudCA9IGJhc2VJc1N0YXJ0ID8gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnZpc2libGVFbmQoKSA6IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxl
U3RhcnQoKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gaW5pdGlhbEV4dGVudCA9IHBvc2l0aW9uOwor
CisgICAgaWYgKGF0Qm91bmRhcnlPZkdyYW51bGFyaXR5KGV4dGVudCwgV29yZEdyYW51bGFyaXR5
LCBzYW1lRGlyZWN0aW9uKSkgeworICAgICAgICAvLyBUaGlzIGlzIGEgd29yZCBib3VuZGFyeS4g
TGVhdmUgc2VsZWN0aW9uIHdoZXJlIGl0IGlzLgorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICBpZiAoYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkoZXh0ZW50LCBXb3JkR3JhbnVsYXJpdHks
IG9wcG9zaXRlRGlyZWN0aW9uKSkgeworICAgICAgICAvLyBUaGlzIGlzIGEgd29yZCBib3VuZGFy
eSBpbiB0aGUgd3JvbmcgZGlyZWN0aW9uLiBOdWRnZSB0aGUgc2VsZWN0aW9uIHRvIGEgY2hhcmFj
dGVyIGJlZm9yZSBwcm9jZWVkaW5nLgorICAgICAgICBleHRlbnQgPSBiYXNlSXNTdGFydCA/IGV4
dGVudC5wcmV2aW91cygpIDogZXh0ZW50Lm5leHQoKTsKKyAgICB9CisKKyAgICAvLyBFeHRlbmQg
dG8gdGhlIGJvdW5kYXJ5IG9mIHRoZSB3b3JkLgorCisgICAgVmlzaWJsZVBvc2l0aW9uIHdvcmRC
b3VuZGFyeSA9IHBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5KGV4dGVudCwgV29y
ZEdyYW51bGFyaXR5LCBzYW1lRGlyZWN0aW9uKTsKKyAgICBpZiAod29yZEJvdW5kYXJ5LmlzTm90
TnVsbCgpCisgICAgICAgICYmIGF0Qm91bmRhcnlPZkdyYW51bGFyaXR5KHdvcmRCb3VuZGFyeSwg
V29yZEdyYW51bGFyaXR5LCBzYW1lRGlyZWN0aW9uKQorICAgICAgICAmJiBpbml0aWFsRXh0ZW50
ICE9IHdvcmRCb3VuZGFyeSkgeworICAgICAgICBleHRlbnQgPSB3b3JkQm91bmRhcnk7CisgICAg
ICAgIHJldHVybiAoYmFzZSA8IGV4dGVudCkgPyBSYW5nZTo6Y3JlYXRlKCpmcmFtZS0+ZG9jdW1l
bnQoKSwgYmFzZSwgZXh0ZW50KSA6IFJhbmdlOjpjcmVhdGUoKmZyYW1lLT5kb2N1bWVudCgpLCBl
eHRlbnQsIGJhc2UpOworICAgIH0KKyAgICAvLyBDb252ZXJzZWx5LCBpZiB0aGUgaW5pdGlhbCBl
eHRlbnQgZXF1YWxzIHRoZSBjdXJyZW50IHdvcmQgYm91bmRhcnksIHRoZW4KKyAgICAvLyBydW4g
dGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiB0byBzZWUgaWYgdGhlIHNlbGVjdGlvbiBzaG91bGQg
ZXh0ZW5kCisgICAgLy8gdGhlIG90aGVyIGRpcmVjdGlvbiB0byB0aGUgb3RoZXIgd29yZC4KKwor
ICAgIC8vIElmIHRoaXMgaXMgd2hlcmUgdGhlIGV4dGVudCB3YXMgaW5pdGlhbGx5LCB0aGVuIGl0
ZXJhdGUgaW4gdGhlIG90aGVyIGRpcmVjdGlvbiBpbiB0aGUgZG9jdW1lbnQgdW50aWwgd2UgaGl0
IHRoZSBuZXh0IHdvcmQuCisgICAgd2hpbGUgKGV4dGVudC5pc05vdE51bGwoKQorICAgICAgICAg
ICAmJiAhYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkoZXh0ZW50LCBXb3JkR3JhbnVsYXJpdHksIHNh
bWVEaXJlY3Rpb24pCisgICAgICAgICAgICYmIGV4dGVudCAhPSBiYXNlCisgICAgICAgICAgICYm
ICFhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eShleHRlbnQsIExpbmVCb3VuZGFyeSwgc2FtZURpcmVj
dGlvbikKKyAgICAgICAgICAgJiYgIWF0Qm91bmRhcnlPZkdyYW51bGFyaXR5KGV4dGVudCwgTGlu
ZUJvdW5kYXJ5LCBvcHBvc2l0ZURpcmVjdGlvbikpIHsKKyAgICAgICAgZXh0ZW50ID0gYmFzZUlz
U3RhcnQgPyBleHRlbnQubmV4dCgpIDogZXh0ZW50LnByZXZpb3VzKCk7CisgICAgfQorCisgICAg
Ly8gRG9uJ3QgbGV0IHRoZSBzbWFydCBleHRlbnNpb24gbWFrZSB0aGUgZXh0ZW50IGVxdWFsIHRo
ZSBiYXNlLgorICAgIC8vIEV4cGFuZCBvdXQgdG8gd29yZCBib3VuZGFyeS4KKyAgICBpZiAoZXh0
ZW50LmlzTnVsbCgpIHx8IGV4dGVudCA9PSBiYXNlKQorICAgICAgICBleHRlbnQgPSB3b3JkQm91
bmRhcnk7CisgICAgaWYgKGV4dGVudC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICByZXR1cm4gKGJhc2UgPCBleHRlbnQpID8gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUtPmRvY3VtZW50
KCksIGJhc2UsIGV4dGVudCkgOiBSYW5nZTo6Y3JlYXRlKCpmcmFtZS0+ZG9jdW1lbnQoKSwgZXh0
ZW50LCBiYXNlKTsKK30KKwordm9pZCBXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hl
cyhjb25zdCBJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IHRvdWNoZXMsIGJvb2wgYmFzZUlzU3Rh
cnQsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCit7CisgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBWaXNpYmxlUG9zaXRp
b24gcG9zaXRpb24gPSBmcmFtZS52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChwb2ludCk7CisgICAg
aWYgKHBvc2l0aW9uLmlzTnVsbCgpKSB7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6VG91Y2hlc0NhbGxiYWNrKHBvaW50LCB0b3VjaGVzLCBjYWxsYmFja0lEKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOworICAgIFZpc2li
bGVQb3NpdGlvbiByZXN1bHQ7CisgICAgCisgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxXS1NlbGVj
dGlvblRvdWNoPih0b3VjaGVzKSkgeworICAgICAgICBjYXNlIFdLU2VsZWN0aW9uVG91Y2hTdGFy
dGVkOgorICAgICAgICBjYXNlIFdLU2VsZWN0aW9uVG91Y2hFbmRlZE5vdE1vdmluZzoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgY2FzZSBXS1NlbGVjdGlvblRvdWNoRW5k
ZWQ6CisgICAgICAgICAgICByZXN1bHQgPSBjbG9zZXN0V29yZEJvdW5kYXJ5Rm9yUG9zaXRpb24o
cG9zaXRpb24pOworICAgICAgICAgICAgaWYgKHJlc3VsdC5pc05vdE51bGwoKSkKKyAgICAgICAg
ICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHJlc3VsdCwg
cmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgV0tTZWxlY3Rpb25U
b3VjaEVuZGVkTW92aW5nRm9yd2FyZDoKKyAgICAgICAgICAgIHJhbmdlID0gcmFuZ2VBdFdvcmRC
b3VuZGFyeUZvclBvc2l0aW9uKCZmcmFtZSwgcG9zaXRpb24sIGJhc2VJc1N0YXJ0LCBEaXJlY3Rp
b25Gb3J3YXJkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgV0tTZWxlY3Rpb25Ub3VjaEVuZGVkTW92aW5nQmFja3dhcmQ6CisgICAgICAgICAgICByYW5n
ZSA9IHJhbmdlQXRXb3JkQm91bmRhcnlGb3JQb3NpdGlvbigmZnJhbWUsIHBvc2l0aW9uLCBiYXNl
SXNTdGFydCwgRGlyZWN0aW9uQmFja3dhcmQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgY2FzZSBXS1NlbGVjdGlvblRvdWNoTW92ZWQ6CisgICAgICAgICAgICByYW5nZSA9IHJhbmdl
Rm9yUG9zaXRpb24oJmZyYW1lLCBwb3NpdGlvbiwgYmFzZUlzU3RhcnQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGlmIChyYW5nZSkKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCku
c2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgdHJ1ZSk7
CisKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlRvdWNoZXNDYWxsYmFjayhwb2lu
dCwgdG91Y2hlcywgY2FsbGJhY2tJRCkpOworfQorCit2b2lkIFdlYlBhZ2U6OnNlbGVjdFdpdGhU
d29Ub3VjaGVzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBmcm9tLCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgdG8sIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUs
IHVpbnQ2NF90IGNhbGxiYWNrSUQpCit7CisgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1
c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBWaXNpYmxlUG9zaXRpb24g
ZnJvbVBvc2l0aW9uID0gZnJhbWUudmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJvbSk7CisgICAg
VmlzaWJsZVBvc2l0aW9uIHRvUG9zaXRpb24gPSBmcmFtZS52aXNpYmxlUG9zaXRpb25Gb3JQb2lu
dCh0byk7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKKyAgICBpZiAoZnJvbVBvc2l0aW9uLmlz
Tm90TnVsbCgpICYmIHRvUG9zaXRpb24uaXNOb3ROdWxsKCkpIHsKKyAgICAgICAgaWYgKGZyb21Q
b3NpdGlvbiA8IHRvUG9zaXRpb24pCisgICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUo
KmZyYW1lLmRvY3VtZW50KCksIGZyb21Qb3NpdGlvbiwgdG9Qb3NpdGlvbik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwg
dG9Qb3NpdGlvbiwgZnJvbVBvc2l0aW9uKTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgZnJvbVBvc2l0aW9uLmFmZmluaXR5KCksIHRydWUp
OworICAgIH0KKworICAgIC8vIFdlIGNhbiB1c2UgdGhlIHNhbWUgY2FsbGJhY2sgZm9yIHRoZSBn
ZXN0dXJlcyB3aXRoIG9uZSBwb2ludC4KKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
Okdlc3R1cmVDYWxsYmFjayhmcm9tLCBnZXN0dXJlVHlwZSwgZ2VzdHVyZVN0YXRlLCAwLCBjYWxs
YmFja0lEKSk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6ZXh0ZW5kU2VsZWN0aW9uKHVpbnQzMl90IGdy
YW51bGFyaXR5KQoreworICAgIC8vIEZvciB0aGUgbW9tZW50IHdlIGhhbmRsZSBvbmx5IFdvcmRH
cmFudWxhcml0eS4KKyAgICBpZiAoZ3JhbnVsYXJpdHkgIT0gV29yZEdyYW51bGFyaXR5KQorICAg
ICAgICByZXR1cm47CisKKyAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxl
cigpLmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIEFTU0VSVChmcmFtZS5zZWxlY3Rpb24oKS5p
c0NhcmV0KCkpOworICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0
ZWRSYW5nZSh3b3JkUmFuZ2VGcm9tUG9zaXRpb24ocG9zaXRpb24pLmdldCgpLCBwb3NpdGlvbi5h
ZmZpbml0eSgpLCB0cnVlKTsKK30KKwordm9pZCBXZWJQYWdlOjpyZXF1ZXN0QXV0b2NvcnJlY3Rp
b25EYXRhKGNvbnN0IFN0cmluZyYgdGV4dEZvckF1dG9jb3JyZWN0aW9uLCB1aW50NjRfdCBjYWxs
YmFja0lEKQoreworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7CisgICAgRnJhbWUmIGZyYW1lID0g
bV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBBU1NF
UlQoZnJhbWUuc2VsZWN0aW9uKCkuaXNDYXJldCgpKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9z
aXRpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpOworICAgIFZlY3Rv
cjxTZWxlY3Rpb25SZWN0PiBzZWxlY3Rpb25SZWN0czsKKworICAgIHJhbmdlID0gd29yZFJhbmdl
RnJvbVBvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICBTdHJpbmcgdGV4dEZvclJhbmdlID0gcGxhaW5U
ZXh0KHJhbmdlLmdldCgpKTsKKyAgICBjb25zdCB1bnNpZ25lZCBtYXhTZWFyY2hBdHRlbXB0cyA9
IDU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7ICBpIDwgbWF4U2VhcmNoQXR0ZW1wdHMgJiYgdGV4
dEZvclJhbmdlICE9IHRleHRGb3JBdXRvY29ycmVjdGlvbjsgKytpKQorICAgIHsKKyAgICAgICAg
cG9zaXRpb24gPSByYW5nZS0+c3RhcnRQb3NpdGlvbigpLnByZXZpb3VzKCk7CisgICAgICAgIGlm
IChwb3NpdGlvbi5pc051bGwoKSB8fCBwb3NpdGlvbiA9PSByYW5nZS0+c3RhcnRQb3NpdGlvbigp
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJh
bWUuZG9jdW1lbnQoKSwgd29yZFJhbmdlRnJvbVBvc2l0aW9uKHBvc2l0aW9uKS0+c3RhcnRQb3Np
dGlvbigpLCByYW5nZS0+ZW5kUG9zaXRpb24oKSk7CisgICAgICAgIHRleHRGb3JSYW5nZSA9IHBs
YWluVGV4dChyYW5nZS5nZXQoKSk7CisgICAgfQorICAgIGlmICh0ZXh0Rm9yUmFuZ2UgPT0gdGV4
dEZvckF1dG9jb3JyZWN0aW9uKQorICAgICAgICByYW5nZS0+Y29sbGVjdFNlbGVjdGlvblJlY3Rz
KHNlbGVjdGlvblJlY3RzKTsKKworICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHJlY3RzRm9yVGV4dDsK
KyAgICByZWN0c0ZvclRleHQucmVzaXplKHNlbGVjdGlvblJlY3RzLnNpemUoKSk7CisKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNlbGVjdGlvblJlY3RzLnNpemUoKTsgaSsrKQorICAgICAg
ICByZWN0c0ZvclRleHRbaV0gPSBzZWxlY3Rpb25SZWN0c1tpXS5yZWN0KCk7CisKKyAgICBib29s
IG11bHRpcGxlRm9udHMgPSBmYWxzZTsKKyAgICBDVEZvbnRSZWYgZm9udCA9IG5pbDsKKyAgICBp
ZiAoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gZnJhbWUuZWRpdG9yKCkuZm9udEZv
clNlbGVjdGlvbihtdWx0aXBsZUZvbnRzKSkKKyAgICAgICAgZm9udCA9IGZvbnREYXRhLT5nZXRD
VEZvbnQoKTsKKworICAgIENHRmxvYXQgZm9udFNpemUgPSBDVEZvbnRHZXRTaXplKGZvbnQpOwor
ICAgIHVpbnQ2NF90IGZvbnRUcmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250KTsK
KyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IGZvbnROYW1lID0gYWRvcHROUygoTlNTdHJpbmcgKilD
VEZvbnRDb3B5RmFtaWx5TmFtZShmb250KSk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpBdXRvY29ycmVjdGlvbkRhdGFDYWxsYmFjayhyZWN0c0ZvclRleHQsIGZvbnROYW1lLmdl
dCgpLCBmb250U2l6ZSwgZm9udFRyYWl0cywgY2FsbGJhY2tJRCkpOworfQorCit2b2lkIFdlYlBh
Z2U6OmFwcGx5QXV0b2NvcnJlY3Rpb24oY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uLCBjb25zdCBT
dHJpbmcmIG9yaWdpbmFsVGV4dCwgdWludDY0X3QgY2FsbGJhY2tJRCkKK3sKKyAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlOworICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVy
KCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgQVNTRVJUKGZyYW1lLnNlbGVjdGlvbigpLmlz
Q2FyZXQoKSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsKKworICAgIHJhbmdlID0gd29yZFJhbmdlRnJvbVBvc2l0
aW9uKHBvc2l0aW9uKTsKKyAgICBTdHJpbmcgdGV4dEZvclJhbmdlID0gcGxhaW5UZXh0KHJhbmdl
LmdldCgpKTsKKyAgICBpZiAodGV4dEZvclJhbmdlICE9IG9yaWdpbmFsVGV4dCkgeworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9yaWdpbmFsVGV4dC5sZW5ndGgoKTsgKytpKQorICAg
ICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbi5wcmV2aW91cygpOworICAgICAgICBpZiAocG9z
aXRpb24uaXNOdWxsKCkpCisgICAgICAgICAgICBwb3NpdGlvbiA9IHN0YXJ0T2ZEb2N1bWVudChz
dGF0aWNfY2FzdDxOb2RlKj4oZnJhbWUuZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpKTsK
KyAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlv
biwgZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgICAgIGlmIChy
YW5nZSkKKyAgICAgICAgICAgIHRleHRGb3JSYW5nZSA9IChyYW5nZSkgPyBwbGFpblRleHQocmFu
Z2UuZ2V0KCkpIDogZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgdW5zaWduZWQgbG9vcENvdW50ID0g
MDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgbWF4UG9zaXRpb25zQXR0ZW1wdHMgPSAxMDsKKyAg
ICAgICAgd2hpbGUgKHRleHRGb3JSYW5nZS5sZW5ndGgoKSAmJiB0ZXh0Rm9yUmFuZ2UubGVuZ3Ro
KCkgPiBvcmlnaW5hbFRleHQubGVuZ3RoKCkgJiYgbG9vcENvdW50IDwgbWF4UG9zaXRpb25zQXR0
ZW1wdHMpIHsKKyAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24ubmV4dCgpOworICAgICAg
ICAgICAgaWYgKHBvc2l0aW9uLmlzTm90TnVsbCgpICYmIHBvc2l0aW9uID49IGZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpCisgICAgICAgICAgICAgICAgcmFuZ2UgPSBOVUxM
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0
ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnN0YXJ0KCkpOworICAgICAgICAgICAgdGV4dEZvclJhbmdlID0gKHJhbmdlKSA/IHBsYWlu
VGV4dChyYW5nZS5nZXQoKSkgOiBlbXB0eVN0cmluZygpOworICAgICAgICAgICAgbG9vcENvdW50
Kys7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHRleHRGb3JSYW5nZSAhPSBvcmlnaW5hbFRl
eHQpIHsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTdHJpbmdDYWxsYmFj
ayhTdHJpbmcoKSwgY2FsbGJhY2tJRCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
ZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgVVBTVFJFQU0s
IHRydWUpOworICAgIGlmIChjb3JyZWN0aW9uLmxlbmd0aCgpKQorICAgICAgICBmcmFtZS5lZGl0
b3IoKS5pbnNlcnRUZXh0KGNvcnJlY3Rpb24sIDApOworICAgIGVsc2UKKyAgICAgICAgZnJhbWUu
ZWRpdG9yKCkuZGVsZXRlV2l0aERpcmVjdGlvbihEaXJlY3Rpb25CYWNrd2FyZCwgQ2hhcmFjdGVy
R3JhbnVsYXJpdHksIGZhbHNlLCB0cnVlKTsKKworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6U3RyaW5nQ2FsbGJhY2soY29ycmVjdGlvbiwgY2FsbGJhY2tJRCkpOworfQorCit2b2lk
IFdlYlBhZ2U6OmVsZW1lbnREaWRGb2N1cyhXZWJDb3JlOjpOb2RlKiBub2RlKQoreworICAgIG1f
YXNzaXN0ZWROb2RlID0gbm9kZTsKKyAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShXZWJDb3JlOjpI
VE1MTmFtZXM6OmlucHV0VGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKFdlYkNvcmU6OkhUTUxOYW1l
czo6dGV4dGFyZWFUYWcpIHx8IG5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQorICAgICAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlN0YXJ0QXNzaXN0aW5nTm9kZShXZWJDb3JlOjpJ
bnRSZWN0KCksIHRydWUsIHRydWUpKTsgICAgCit9CisKK3ZvaWQgV2ViUGFnZTo6ZWxlbWVudERp
ZEJsdXIoV2ViQ29yZTo6Tm9kZSogbm9kZSkKK3sKKyAgICBpZiAobV9hc3Npc3RlZE5vZGUgPT0g
bm9kZSkgeworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlN0b3BBc3Npc3Rp
bmdOb2RlKCkpOworICAgICAgICBtX2Fzc2lzdGVkTm9kZSA9IDA7CisgICAgfQorfQorCit2b2lk
IFdlYlBhZ2U6OmRpZEZpbmlzaFNjcm9sbGluZyhjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBj
b250ZW50T2Zmc2V0KQoreworICAgIG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT5zZXRTY3Jv
bGxPZmZzZXQoV2ViQ29yZTo6SW50UG9pbnQoY29udGVudE9mZnNldCkpOworfQorCit2b2lkIFdl
YlBhZ2U6OmRpZEZpbmlzaFpvb21pbmcoZmxvYXQgbmV3U2NhbGUpCit7CisgICAgbV9wYWdlLT5t
YWluRnJhbWUoKS5zZXREb2N1bWVudFNjYWxlKG5ld1NjYWxlKTsKKyAgICBtX3BhZ2UtPnNldFBh
Z2VTY2FsZUZhY3RvcihuZXdTY2FsZSwgbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPnNjcm9s
bFBvc2l0aW9uKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVh
LmgJKHJldmlzaW9uIDE1OTY1MSkKKysrIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3Jl
QW5pbWF0aW9uRHJhd2luZ0FyZWEuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAog
I2lmbmRlZiBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYV9oCiAjZGVmaW5lIFRpbGVkQ29y
ZUFuaW1hdGlvbkRyYXdpbmdBcmVhX2gKIAorI2lmICFQTEFURk9STShJT1MpCisKICNpbmNsdWRl
ICJEcmF3aW5nQXJlYS5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgpAQCAtMTQ1LDQgKzE0Nyw2IEBACiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdAogCisjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKKwogI2VuZGlmIC8vIFRpbGVk
Q29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhX2gKSW5kZXg6IFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
VGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbQkocmV2aXNpb24g
MTU5NjUxKQorKysgV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3
aW5nQXJlYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAogI2ltcG9ydCAiY29u
ZmlnLmgiCiAjaW1wb3J0ICJUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5oIgogCisjaWYg
IVBMQVRGT1JNKElPUykKKwogI2ltcG9ydCAiQ29sb3JTcGFjZURhdGEuaCIKICNpbXBvcnQgIkRy
YXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oIgogI2ltcG9ydCAiTGF5ZXJIb3N0aW5nQ29udGV4dC5o
IgpAQCAtMjUyLDcgKzI1NCw5IEBACiAgICAgfQogCiAgICAgLy8gRml4ZWQgcG9zaXRpb24gZWxl
bWVudHMgbmVlZCB0byBiZSBjb21wb3NpdGVkIGFuZCBjcmVhdGUgc3RhY2tpbmcgY29udGV4dHMK
LSAgICAvLyBpbiBvcmRlciB0byBiZSBzY3JvbGxlZCBieSB0aGUgU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuCisgICAgLy8gaW4gb3JkZXIgdG8gYmUgc2Nyb2xsZWQgYnkgdGhlIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yLiBXZSBhbHNvIHdhbnQgdG8ga2VlcAorICAgIC8vIFNldHRpbmdzOnNldEZpeGVkUG9z
aXRpb25DcmVhdGVzU3RhY2tpbmdDb250ZXh0KCkgZW5hYmxlZCBmb3IgaU9TLiBTZWUKKyAgICAv
LyA8cmRhcjovL3Byb2JsZW0vOTgxMzI2Mj4gZm9yIG1vcmUgZGV0YWlscy4KICAgICBzZXR0aW5n
cy5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQodHJ1ZSk7
CiAgICAgc2V0dGluZ3Muc2V0Rml4ZWRQb3NpdGlvbkNyZWF0ZXNTdGFja2luZ0NvbnRleHQodHJ1
ZSk7CiAKQEAgLTY5NCwzICs2OTgsNSBAQAogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vICFQTEFURk9STShJT1MpCkluZGV4OiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDE1OTY1
MSkKKysrIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNDYs
NyArMTE0NiwxOCBAQAogfQogCiAjZW5kaWYKLSAgICAKKworI2lmIFBMQVRGT1JNKElPUykKK3Zv
aWQgV2ViUHJvY2Vzczo6cmVzZXRBbGxHZW9sb2NhdGlvblBlcm1pc3Npb25zKCkKK3sKKyAgICBm
b3IgKGF1dG8gaXQgPSBtX3BhZ2VNYXAuYmVnaW4oKSwgZW5kID0gbV9wYWdlTWFwLmVuZCgpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgV2ViUGFnZSogcGFnZSA9ICgqaXQpLnZhbHVlLmdl
dCgpOworICAgICAgICBpZiAoRnJhbWUqIG1haW5GcmFtZSA9IHBhZ2UtPm1haW5GcmFtZSgpKQor
ICAgICAgICAgICAgbWFpbkZyYW1lLT5yZXNldEFsbEdlb2xvY2F0aW9uUGVybWlzc2lvbigpOwor
ICAgIH0KK30KKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisKIHZvaWQgV2ViUHJvY2Vzczo6cGFn
ZURpZEVudGVyV2luZG93KHVpbnQ2NF90IHBhZ2VJRCkKIHsKICAgICBtX3BhZ2VzSW5XaW5kb3dz
LmFkZChwYWdlSUQpOwpJbmRleDogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgJKHJldmlzaW9uIDE1OTY1MSkKKysrIFdlYlByb2Nl
c3MvV2ViUHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsNiArMTc3LDEwIEBACiAgICAg
dm9pZCBhbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgQ2VydGlmaWNh
dGVJbmZvJiwgY29uc3QgU3RyaW5nJiBob3N0KTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oSU9T
KQorICAgIHZvaWQgcmVzZXRBbGxHZW9sb2NhdGlvblBlcm1pc3Npb25zKCk7CisjZW5kaWYgLy8g
UExBVEZPUk0oSU9TKQorCiBwcml2YXRlOgogICAgIFdlYlByb2Nlc3MoKTsKIApAQCAtMjQ1LDcg
KzI0OSw3IEBACiAgICAgdmlydHVhbCBib29sIHNob3VsZFRlcm1pbmF0ZSgpIE9WRVJSSURFOwog
ICAgIHZpcnR1YWwgdm9pZCB0ZXJtaW5hdGUoKSBPVkVSUklERTsKIAotI2lmIFBMQVRGT1JNKE1B
QykKKyNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpCiAgICAgdmlydHVhbCB2b2lk
IHN0b3BSdW5Mb29wKCkgT1ZFUlJJREU7CiAjZW5kaWYKIApJbmRleDogV2ViUHJvY2Vzcy9pb3Mv
V2ViUHJvY2Vzc0lPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJQcm9jZXNzL2lvcy9XZWJQcm9jZXNz
SU9TLm1tCShyZXZpc2lvbiAwKQorKysgV2ViUHJvY2Vzcy9pb3MvV2ViUHJvY2Vzc0lPUy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJXZWJQcm9jZXNzLmgiCisKKyNpbXBvcnQgPFdlYkNvcmUvTm90SW1w
bGVtZW50ZWQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCit2b2lkIFdlYlByb2Nlc3M6OmluaXRpYWxpemVQcm9jZXNzTmFtZShjb25zdCBDaGls
ZFByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVNhbmRib3goY29uc3QgQ2hpbGRQ
cm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiwgU2FuZGJveEluaXRpYWxpemF0aW9uUGFy
YW1ldGVycyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJQcm9jZXNz
OjpwbGF0Zm9ybVNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtQ2xlYXJSZXNvdXJjZUNhY2hlcyhS
ZXNvdXJjZUNhY2hlc1RvQ2xlYXIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKGNvbnN0IFdlYlByb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMmLCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxp
emVQcm9jZXNzKGNvbnN0IENoaWxkUHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybVRl
cm1pbmF0ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJQcm9jZXNz
Ojp1cGRhdGVBY3RpdmVQYWdlcygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzTWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NNYWMubW0JKHJldmlzaW9u
IDE1OTY1MSkKKysrIFdlYlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTIyNCwxMSArMjI0LDE2IEBACiAKIHZvaWQgV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVNh
bmRib3goY29uc3QgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0
ZXJzLCBTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiBzYW5kYm94UGFyYW1ldGVycykK
IHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgVU5VU0VEX1BBUkFNKHBhcmFtZXRlcnMpOworICAg
IFVOVVNFRF9QQVJBTShzYW5kYm94UGFyYW1ldGVycyk7CisjZWxzZQogICAgIC8vIE5lZWQgdG8g
b3ZlcmlkZSB0aGUgZGVmYXVsdCwgYmVjYXVzZSBzZXJ2aWNlIGhhcyBhIGRpZmZlcmVudCBidW5k
bGUgSUQuCiAgICAgTlNCdW5kbGUgKndlYmtpdDJCdW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9y
Q2xhc3M6TlNDbGFzc0Zyb21TdHJpbmcoQCJXS1ZpZXciKV07CiAgICAgc2FuZGJveFBhcmFtZXRl
cnMuc2V0T3ZlcnJpZGVTYW5kYm94UHJvZmlsZVBhdGgoW3dlYmtpdDJCdW5kbGUgcGF0aEZvclJl
c291cmNlOkAiY29tLmFwcGxlLldlYlByb2Nlc3MiIG9mVHlwZTpAInNiIl0pOwogCiAgICAgQ2hp
bGRQcm9jZXNzOjppbml0aWFsaXplU2FuZGJveChwYXJhbWV0ZXJzLCBzYW5kYm94UGFyYW1ldGVy
cyk7CisjZW5kaWYKIH0KIAogdm9pZCBXZWJQcm9jZXNzOjp1cGRhdGVBY3RpdmVQYWdlcygpCg==
</data>
<flag name="review"
          id="240918"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>