<?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>176264</bug_id>
          
          <creation_ts>2017-09-01 19:19:40 -0700</creation_ts>
          <short_desc>[iOS DnD] Refactor drag and drop logic in WKContentView in preparation for supporting multiple drag items in a drag session</short_desc>
          <delta_ts>2017-09-27 12:41:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>jbedard</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1344720</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-09-01 19:19:40 -0700</bug_when>
    <thetext>Primarily, add a staging mechanism for writing items to the WebItemProviderPasteboard and coalescing drag item information in the UI process. Additionally, split some logic out of WKContentView and into a separate helper class to make hacking on this easier in later patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345131</commentid>
    <comment_count>1</comment_count>
      <attachid>319834</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-09-03 21:25:34 -0700</bug_when>
    <thetext>Created attachment 319834
First pass</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345132</commentid>
    <comment_count>2</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-09-03 21:26:05 -0700</bug_when>
    <thetext>Work towards &lt;rdar://problem/31144674&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345172</commentid>
    <comment_count>3</comment_count>
      <attachid>319834</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-04 00:00:30 -0700</bug_when>
    <thetext>Comment on attachment 319834
First pass

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

&gt; Source/WebKit/UIProcess/ios/DragDropInteractionState.h:54
&gt; +    bool possiblyNeedsDragPreviewUpdate;

Initialize this?

&gt; Source/WebKit/UIProcess/ios/DragDropInteractionState.h:56
&gt; +    NSInteger itemIdentifier;

Initialize this?

&gt; Source/WebKit/UIProcess/ios/DragDropInteractionState.h:59
&gt; +class DragDropInteractionState {

It’s a bit hard to get a sense of what this class does, because there are so many inline function bodies interspersed. I strongly suggest moving some of them out of the class so we can see what the class’s interface is more clearly.

&gt; Source/WebKit/UIProcess/ios/DragDropInteractionState.h:66
&gt; +    void stageDragItem(const WebCore::DragItem&amp;, RetainPtr&lt;UIImage&gt;);

RetainPtr&lt;UIImage&gt; is a strange argument type. Normally it would just be UIImage *; why does the argument need to be a RetainPtr?

&gt; Source/WebKit/UIProcess/ios/DragDropInteractionState.h:69
&gt; +        return !!m_stagedDragSource &amp;&amp; stagedDragSource().action != WebCore::DragSourceActionNone;

Can write m_stagedDragSource.has_value() instead of !!m_stagedDragSource.

&gt; Source/WebKit/UIProcess/ios/DragDropInteractionState.h:103
&gt; +        if (auto block = m_dragStartCompletionBlock) {
&gt; +            m_dragStartCompletionBlock = nil;
&gt; +            return block;
&gt; +        }
&gt; +        return nil;

This can be written as a one-liner:

    return WTFMove(m_dragStartCompletionBlock);

&gt; Source/WebKit/UIProcess/ios/DragDropInteractionState.h:112
&gt; +        if (auto block = m_dragCancelSetDownBlock) {
&gt; +            m_dragCancelSetDownBlock = nil;
&gt; +            return block;
&gt; +        }
&gt; +        return nil;

Ditto.

&gt; Source/WebKit/UIProcess/ios/DragDropInteractionState.mm:85
&gt; +static RetainPtr&lt;UIImage&gt; uiImageForImage(RefPtr&lt;Image&gt; image)

Argument type should just be Image*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345228</commentid>
    <comment_count>4</comment_count>
      <attachid>319834</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-09-04 10:30:18 -0700</bug_when>
    <thetext>Comment on attachment 319834
First pass

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

&gt;&gt; Source/WebKit/UIProcess/ios/DragDropInteractionState.h:54
&gt;&gt; +    bool possiblyNeedsDragPreviewUpdate;
&gt; 
&gt; Initialize this?

Done!

&gt;&gt; Source/WebKit/UIProcess/ios/DragDropInteractionState.h:56
&gt;&gt; +    NSInteger itemIdentifier;
&gt; 
&gt; Initialize this?

Done!

&gt;&gt; Source/WebKit/UIProcess/ios/DragDropInteractionState.h:59
&gt;&gt; +class DragDropInteractionState {
&gt; 
&gt; It’s a bit hard to get a sense of what this class does, because there are so many inline function bodies interspersed. I strongly suggest moving some of them out of the class so we can see what the class’s interface is more clearly.

Good call -- moved all inline implementations that aren&apos;t just simple getters to DragDropInteractionState.mm.

&gt;&gt; Source/WebKit/UIProcess/ios/DragDropInteractionState.h:66
&gt;&gt; +    void stageDragItem(const WebCore::DragItem&amp;, RetainPtr&lt;UIImage&gt;);
&gt; 
&gt; RetainPtr&lt;UIImage&gt; is a strange argument type. Normally it would just be UIImage *; why does the argument need to be a RetainPtr?

Good point -- this should be a UIImage * instead of a RetainPtr. Fixed.

&gt;&gt; Source/WebKit/UIProcess/ios/DragDropInteractionState.h:69
&gt;&gt; +        return !!m_stagedDragSource &amp;&amp; stagedDragSource().action != WebCore::DragSourceActionNone;
&gt; 
&gt; Can write m_stagedDragSource.has_value() instead of !!m_stagedDragSource.

True (though, looking at this again, I&apos;m unsure why this needs to be !! in the first place -- it seems just checking m_stagedDragSource should be sufficient and a lot cleaner.)

&gt;&gt; Source/WebKit/UIProcess/ios/DragDropInteractionState.h:103
&gt;&gt; +        return nil;
&gt; 
&gt; This can be written as a one-liner:
&gt; 
&gt;     return WTFMove(m_dragStartCompletionBlock);

Done. Much cleaner!

&gt;&gt; Source/WebKit/UIProcess/ios/DragDropInteractionState.h:112
&gt;&gt; +        return nil;
&gt; 
&gt; Ditto.

Done!

&gt;&gt; Source/WebKit/UIProcess/ios/DragDropInteractionState.mm:85
&gt;&gt; +static RetainPtr&lt;UIImage&gt; uiImageForImage(RefPtr&lt;Image&gt; image)
&gt; 
&gt; Argument type should just be Image*.

Done!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345260</commentid>
    <comment_count>5</comment_count>
      <attachid>319834</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-09-04 14:50:05 -0700</bug_when>
    <thetext>Comment on attachment 319834
First pass

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

&gt; Source/WebCore/platform/ios/PlatformPasteboardIOS.mm:182
&gt; +    if ([pasteboard respondsToSelector:@selector(stageRegistrationList:)])

On second thought, only staging the registration list here and not setting the item provider array will break bincompat with older (iOS 11) UIKit -- we&apos;ll need to continue doing both for now. (For internal reference: see &lt;rdar://problem/34244415&gt;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345262</commentid>
    <comment_count>6</comment_count>
      <attachid>319862</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-09-04 15:12:14 -0700</bug_when>
    <thetext>Created attachment 319862
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345273</commentid>
    <comment_count>7</comment_count>
      <attachid>319862</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-04 16:36:24 -0700</bug_when>
    <thetext>Comment on attachment 319862
Patch for landing

Clearing flags on attachment: 319862

Committed r221595: &lt;http://trac.webkit.org/changeset/221595&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350781</commentid>
    <comment_count>8</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-09-20 09:16:53 -0700</bug_when>
    <thetext>Committed r222265: &lt;http://trac.webkit.org/changeset/222265&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350782</commentid>
    <comment_count>9</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-09-20 09:18:06 -0700</bug_when>
    <thetext>(In reply to Jonathan Bedard from comment #8)
&gt; Committed r222265: &lt;http://trac.webkit.org/changeset/222265&gt;

A small build fix for iOS 11.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353609</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:41:58 -0700</bug_when>
    <thetext>&lt;rdar://problem/34693785&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319834</attachid>
            <date>2017-09-03 21:25:34 -0700</date>
            <delta_ts>2017-09-04 00:00:30 -0700</delta_ts>
            <desc>First pass</desc>
            <filename>bug-176264-20170903212533.patch</filename>
            <type>text/plain</type>
            <size>92508</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNDIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDNjYzEyYTc4ODk1Zjc3
YjlhM2NkNTNlZTAzNWM5YTkwMjkwZDcwYi4uYjFiZDVjODZlYTc3MTc2YmQ2ZjM4MTA2YmEwYjg2
MjYwNjFiMjQyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDE3LTA5LTAzICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1MgRG5EXSBS
ZWZhY3RvciBkcmFnIGFuZCBkcm9wIGxvZ2ljIGluIFdLQ29udGVudFZpZXcgaW4gcHJlcGFyYXRp
b24gZm9yIHN1cHBvcnRpbmcgbXVsdGlwbGUgZHJhZyBpdGVtcyBpbiBhIGRyYWcgc2Vzc2lvbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MjY0Cisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTE0NDY3ND4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlcyBzb21lIHNtYWxsIGFkanVzdG1lbnRzIHRv
IFdlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQuIFJhdGhlciB0aGFuIC1zZXRJdGVtUHJvdmlkZXJz
OiBvbiB0aGUKKyAgICAgICAgV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCB3aGVuIGluaXRpYXRp
bmcgYSBkcmFnLCBzaW1wbHkgc3RhZ2UgdGhlIFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkxp
c3QgdGhhdCB3aWxsIGJlCisgICAgICAgIHVzZWQgdG8gZ2VuZXJhdGUgYW4gaXRlbSBwcm92aWRl
ci4gV2UgZG8gdGhpcyBpbnN0ZWFkIG9mIGRpcmVjdGx5IHNldHRpbmcgaXRlbSBwcm92aWRlcnMg
dG8gYXZvaWQgb3ZlcndyaXRpbmcKKyAgICAgICAgaXRlbSBwcm92aWRlcnMgb24gdGhlIFdlYkl0
ZW1Qcm92aWRlclBhc3RlYm9hcmQgd2hlbiBhZGRpbmcgaXRlbXMgdG8gYW4gZXhpc3RpbmcgZHJh
ZyBzZXNzaW9uIC0tIGluIHRoaXMgdXBkYXRlZAorICAgICAgICBtb2RlbCwgd2Ugc2V0IGl0ZW0g
cHJvdmlkZXJzIG9uIHRoZSBXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIG9ubHkgYWZ0ZXIgVUlL
aXQgYWNrbm93bGVkZ2VzIHRoYXQgaXQgaGFzIHJlY2VpdmVkCisgICAgICAgIHRoZSBpdGVtIHBy
b3ZpZGVycyBnZW5lcmF0ZWQgdmlhIHRoZSByZWdpc3RyYXRpb24gbGlzdC4KKworICAgICAgICBU
ZXN0czogRGF0YUludGVyYWN0aW9uVGVzdHMuRHJhZ0V2ZW50Q2xpZW50Q29vcmRpbmF0ZXNCYXNp
YworICAgICAgICAgICAgICAgRGF0YUludGVyYWN0aW9uVGVzdHMuRHJhZ0V2ZW50Q2xpZW50Q29v
cmRpbmF0ZXNXaXRoU2Nyb2xsT2Zmc2V0CisgICAgICAgICAgICAgICBEYXRhSW50ZXJhY3Rpb25U
ZXN0cy5EcmFnRXZlbnRQYWdlQ29vcmRpbmF0ZXNCYXNpYworICAgICAgICAgICAgICAgRGF0YUlu
dGVyYWN0aW9uVGVzdHMuRHJhZ0V2ZW50UGFnZUNvb3JkaW5hdGVzV2l0aFNjcm9sbE9mZnNldAor
CisgICAgICAgICogcGxhdGZvcm0vaW9zL0Fic3RyYWN0UGFzdGVib2FyZC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW06CisgICAgICAgIChXZWJDb3Jl
OjpyZWdpc3Rlckl0ZW1Ub1Bhc3RlYm9hcmQpOgorCisgICAgICAgIENoYW5nZWQgdG8gb25seSBz
dGFnZSByZWdpc3RyYXRpb24gaW5mbyBvbiB0aGUgaXRlbSBwcm92aWRlciBwYXN0ZWJvYXJkLCBp
ZiBwb3NzaWJsZS4gVGhpcyBoYXMgbm8gZWZmZWN0IHRoZQorICAgICAgICBjb3B5L3Bhc3RlIGNv
ZGVwYXRoLCBzaW5jZSBpdCB1c2VzIGEgVUlQYXN0ZWJvYXJkLgorCisgICAgICAgICogcGxhdGZv
cm0vaW9zL1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9p
b3MvV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZC5tbToKKworICAgICAgICBSZW5hbWUgX3JlZ2lz
dHJhdGlvbkluZm9MaXN0cyB0byBfc3RhZ2VkUmVnaXN0cmF0aW9uSW5mb0xpc3QsIGFuZCBjaGFu
Z2UgaXQgZnJvbSBhbiBhcnJheSBvZiByZWdpc3RyYXRpb24gaW5mbworICAgICAgICBsaXN0cyB0
byBhIHNpbmdsZSByZWdpc3RyYXRpb24gaW5mbyBsaXN0LiBUaGlzIGNvdWxkIGJlIHVwZGF0ZWQg
aW4gdGhlIGZ1dHVyZSB0byBiZSBhbiBhcnJheSBvZiByZWdpc3RyYXRpb24KKyAgICAgICAgbGlz
dHMsIGJ1dCBjdXJyZW50bHksIGl0IHNlcnZlcyBubyBwdXJwb3NlIGFuZCBtYWtlcyBjb29yZGlu
YXRpb24gd2l0aCBEcmFnSXRlbSBpbmZvIG1vcmUgZGlmZmljdWx0LiBUaGlzIHdvdWxkCisgICAg
ICAgIG5lZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSByZWdpc3RyYXRpb24gbGlzdHMgaWYgd2UgYXJl
IHRvIGFkZCBhIHdheSB0byBiZWdpbiBhIGRyYWcgY29udGFpbmluZyBtdWx0aXBsZSBpdGVtcyBp
bgorICAgICAgICB2YW5pbGxhIHdlYiBjb250ZW50LCBzdWNoIGFzIGRyYWdnaW5nIG11bHRpcGxl
IHNlbGVjdGlvbnMuCisKKyAgICAgICAgKC1bV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCBpbml0
XSk6CisgICAgICAgICgtW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgc2V0SXRlbVByb3ZpZGVy
czpdKToKKyAgICAgICAgKC1bV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCBzdGFnZVJlZ2lzdHJh
dGlvbkxpc3Q6XSk6CisKKyAgICAgICAgU2V0cyB0aGUgc3RhZ2VkIGl0ZW0gcHJvdmlkZXIgcmVn
aXN0cmF0aW9uIGxpc3QuCisKKyAgICAgICAgKC1bV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCB0
YWtlUmVnaXN0cmF0aW9uTGlzdF0pOgorCisgICAgICAgIFJlbW92ZXMgdGhlIHN0YWdlZCBpdGVt
IHByb3ZpZGVyIHJlZ2lzdHJhdGlvbiBsaXN0IGZyb20gdGhlIFdlYkl0ZW1Qcm92aWRlclBhc3Rl
Ym9hcmQgYW5kIGFsc28gcmV0dXJucyBpdC4KKworICAgICAgICAoLVtXZWJJdGVtUHJvdmlkZXJQ
YXN0ZWJvYXJkIHJlZ2lzdHJhdGlvbkluZm9BdEluZGV4Ol0pOiBEZWxldGVkLgorICAgICAgICAo
LVtXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHNldFJlZ2lzdHJhdGlvbkluZm9MaXN0czpdKTog
RGVsZXRlZC4KKwogMjAxNy0wOC0yMiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgUkVHUkVTU0lPTiAocjIyMDA1Mik6IEFTU0VSVElPTiBGQUlMRUQ6ICFmcmFtZSgp
LmlzTWFpbkZyYW1lKCkgfHwgIW5lZWRzU3R5bGVSZWNhbGNPckxheW91dCgpICBpbiBXZWJDb3Jl
OjpGcmFtZVZpZXc6OnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwppbmRleCA0ODFiMGFjZTlkYWY2NDNkM2ZmZTY0MWI3OWUwZjA1ZDhkMjk4NGE5Li4yYmRmMGYx
MTliMmVhMzk0NWI0MGMyYmIxNzRhMjkyNGM1YTY1ZDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEy
NiBAQAorMjAxNy0wOS0wMyAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4K
KworICAgICAgICBbaU9TIERuRF0gUmVmYWN0b3IgZHJhZyBhbmQgZHJvcCBsb2dpYyBpbiBXS0Nv
bnRlbnRWaWV3IGluIHByZXBhcmF0aW9uIGZvciBzdXBwb3J0aW5nIG11bHRpcGxlIGRyYWcgaXRl
bXMgaW4gYSBkcmFnIHNlc3Npb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NjI2NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzExNDQ2NzQ+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBEYXRh
SW50ZXJhY3Rpb25TdGF0ZSBmcm9tIFdLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oIHRvIERyYWdE
cm9wSW50ZXJhY3Rpb25TdGF0ZS5oLCBhbmQgYWxzbyByZW5hbWUgaXQgdG8KKyAgICAgICAgRHJh
Z0Ryb3BJbnRlcmFjdGlvblN0YXRlLiBBZGRpdGlvbmFsbHksIHJlZmFjdG9yIGRyYWcgYW5kIGRy
b3Agc3RhdGUgaW4gdGhlIFVJIHByb2Nlc3MgdG8gY2FwdHVyZSBtZXRhZGF0YSBhYm91dAorICAg
ICAgICB0aGUgZHJhZ2dlZCBlbGVtZW50IGluIGEgc2VwYXJhdGUgRHJhZ1NvdXJjZVN0YXRlIHN0
cnVjdC4gVGhpcyBwYXRjaCBhbHNvIG1vdmVzIGRyYWcgYW5kIGRyb3Agc3RhdGUgdHJhbnNpdGlv
bgorICAgICAgICBsb2dpYyB0aGF0IGRvZXNuJ3QgaW52b2x2ZSBXS0NvbnRlbnRWaWV3IGludGVy
bmFscyBvdXQgb2YgV0tDb250ZW50VmlldywgYW5kIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9m
CisgICAgICAgIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS4KKworICAgICAgICBUbyBzdXBwb3J0
IG11bHRpcGxlIGRyYWcgaXRlbXMgcGVyIHNlc3Npb24sIHdlIGFsc28gaW50cm9kdWNlIGEgc2lt
cGxlIG1lY2hhbmlzbSB0byB0cmFjZSBhIFVJRHJhZ0l0ZW0gYmFjayB0bworICAgICAgICB0aGUg
RHJhZ1NvdXJjZVN0YXRlIHVzZWQgdG8gZ2VuZXJhdGUgaXQuIFdoZW4gZ2VuZXJhdGluZyBhIERy
YWdTb3VyY2VTdGF0ZSwgd2UgYXNzaWduIGl0IGEgdW5pcXVlIGlkZW50aWZpZXIsCisgICAgICAg
IHdoaWNoIHdlIGFsc28gc2V0IGFzIHRoZSBwcml2YXRlTG9jYWxDb250ZXh0IG9mIGFsbCBVSURy
YWdJdGVtcyBnZW5lcmF0ZWQgd2hlbiBiZWdpbm5pbmcgdGhlIGRyYWcgKHRoaXMKKyAgICAgICAg
aW5jbHVkZXMgZHJhZyBpdGVtcyByZXR1cm5lZCBieSBhbiBpbnRlcm5hbCBjbGllbnQgdGhhdCB1
c2VzIG9uZSBvZiB0aGUgU1BJIGhvb2tzIHRvIGF1Z21lbnQgZHJhZyBpdGVtcyB3aGVuCisgICAg
ICAgIHN0YXJ0aW5nIGEgZHJhZykuIFRoaXMgaXMgc3Vic2VxdWVudGx5IHVzZWQgaW4gdGhlIGlt
cGxlbWVudGF0aW9uIG9mIGxpZnQgYW5kIGNhbmNlbGxhdGlvbiBwcmV2aWV3IGRlbGVnYXRlCisg
ICAgICAgIG1ldGhvZHMgdG8gc3VwcGx5IHRoZSBhcHByb3ByaWF0ZSBkcmFnIHByZXZpZXcgZm9y
IGVhY2ggVUlEcmFnSXRlbS4KKworICAgICAgICBMYXN0bHksIGZpeCBhIGJ1ZyB3aGVyZWluIHRo
ZSBwYWdlWCBhbmQgcGFnZVkgb2YgbW91c2UgZHJhZyBldmVudHMgYXJlIGluY29uc2lzdGVudCB3
aXRoIG90aGVyIHN5bnRoZXRpYyBtb3VzZQorICAgICAgICBldmVudHMsIHN1Y2ggYXMgc3ludGhl
dGljIGNsaWNrcy4gRm9yIHN5bnRoZXRpYyBjbGlja3MsIHRoZSBQbGF0Zm9ybU1vdXNlRXZlbnQg
aXMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgc2FtZQorICAgICAgICBwb3NpdGlvbiBhbmQgZ2xvYmFs
UG9zaXRpb24uIFdoZXRoZXIgdGhpcyBpcyByZWFsbHkgaW50ZW5kZWQgaXMgdW5jbGVhciAoc2Vl
IGh0dHA6Ly93ZWJraXQub3JnL2IvMTczODU1KSwgYnV0CisgICAgICAgIGl0J3MgYSB0cml2aWFs
IGNoYW5nZSBmb3Igbm93IHRvIGtlZXAgbW91c2UgZXZlbnRzIG9uIGlPUyBjb25zaXN0ZW50IGJ5
IHR3ZWFraW5nIHRoZSBiZWhhdmlvciBkdXJpbmcgZHJhZyBhbmQKKyAgICAgICAgZHJvcC4gU2Vl
IFRvb2xzL0NoYW5nZUxvZyBmb3Igc29tZSBtb3JlIGluZm9ybWF0aW9uLgorCisgICAgICAgICog
UGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oOgorCisgICAgICAgIEFkZCAtW1VJRHJhZ0l0ZW0g
cHJpdmF0ZUxvY2FsQ29udGV4dF0uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL0RyYWdEcm9w
SW50ZXJhY3Rpb25TdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6RHJhZ0Ryb3BJbnRl
cmFjdGlvblN0YXRlOjpoYXNTdGFnZWREcmFnU291cmNlIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6RHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlOjpzdGFnZWREcmFnU291cmNlIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6RHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlOjpjbGVhclN0YWdlZERyYWdT
b3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpEcmFnRHJvcEludGVyYWN0aW9uU3RhdGU6OmRyYWdT
ZXNzaW9uV2lsbERlbGF5U2V0RG93bkFuaW1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkRyYWdE
cm9wSW50ZXJhY3Rpb25TdGF0ZTo6ZHJvcFNlc3Npb25EaWRFeGl0KToKKyAgICAgICAgKFdlYktp
dDo6RHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlOjpkcm9wU2Vzc2lvbldpbGxQZXJmb3JtRHJvcCk6
CisgICAgICAgIChXZWJLaXQ6OkRyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZTo6YWRqdXN0ZWRQb3Np
dGlvbkZvckRyYWdFbmQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpEcmFnRHJvcEludGVyYWN0
aW9uU3RhdGU6OmRpZEJlZ2luRHJhZ2dpbmcgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpEcmFn
RHJvcEludGVyYWN0aW9uU3RhdGU6OmlzUGVyZm9ybWluZ0Ryb3AgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpEcmFnRHJvcEludGVyYWN0aW9uU3RhdGU6OmRyYWdTZXNzaW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6RHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlOjpkcm9wU2Vzc2lvbiBjb25z
dCk6CisKKyAgICAgICAgV3JhcCBwcml2YXRlIGRyYWcvZHJvcCBzdGF0ZSBtZW1iZXIgdmFyaWFi
bGVzIGJlaGluZCBjb25zdCBnZXR0ZXJzLCBhbmQgbW92ZSBkcmFnIGFuZCBkcm9wIGxvZ2ljIHRo
YXQgaW52b2x2ZXMKKyAgICAgICAgb25seSB0aGUgRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlIGlu
dG8gaGVscGVyIG1ldGhvZHMgb24gRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLgorCisgICAgICAg
IChXZWJLaXQ6OkRyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZTo6QmxvY2tQdHI8dm9pZCk6CisgICAg
ICAgICogVUlQcm9jZXNzL2lvcy9EcmFnRHJvcEludGVyYWN0aW9uU3RhdGUubW06IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpkcmFnSXRlbU1hdGNoaW5nSWRlbnRpZmllcik6CisgICAgICAgIChX
ZWJLaXQ6OmNyZWF0ZVRhcmdldGVkRHJhZ1ByZXZpZXcpOgorICAgICAgICAoV2ViS2l0Ojp1aUlt
YWdlRm9ySW1hZ2UpOgorCisgICAgICAgIE1vdmUgZHJhZyBwcmV2aWV3IGNyZWF0aW9uIGxvZ2lj
IGhlcmUsIGZyb20gV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tLgorCisgICAgICAgIChXZWJL
aXQ6OnNob3VsZFVzZVRleHRJbmRpY2F0b3JUb0NyZWF0ZVByZXZpZXdGb3JEcmFnQWN0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6RHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlOjphY3RpdmVEcmFnU291
cmNlRm9ySXRlbSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkRyYWdEcm9wSW50ZXJhY3Rpb25T
dGF0ZTo6YW55QWN0aXZlRHJhZ1NvdXJjZUlzIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6RHJh
Z0Ryb3BJbnRlcmFjdGlvblN0YXRlOjpwcmVwYXJlRm9yRHJhZ1Nlc3Npb24pOgorICAgICAgICAo
V2ViS2l0OjpEcmFnRHJvcEludGVyYWN0aW9uU3RhdGU6OmRyYWdTZXNzaW9uV2lsbEJlZ2luKToK
KyAgICAgICAgKFdlYktpdDo6RHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlOjpwcmV2aWV3Rm9yRHJh
Z0l0ZW0gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpEcmFnRHJvcEludGVyYWN0aW9uU3RhdGU6
OmRyb3BTZXNzaW9uRGlkRW50ZXJPclVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkRyYWdEcm9w
SW50ZXJhY3Rpb25TdGF0ZTo6c3RhZ2VEcmFnSXRlbSk6CisgICAgICAgIChXZWJLaXQ6OkRyYWdE
cm9wSW50ZXJhY3Rpb25TdGF0ZTo6ZHJhZ0FuZERyb3BTZXNzaW9uc0RpZEVuZCk6CisgICAgICAg
IChXZWJLaXQ6OkRyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZTo6dXBkYXRlUHJldmlld3NGb3JBY3Rp
dmVEcmFnU291cmNlcyk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50
ZXJhY3Rpb24uaDoKKworICAgICAgICBNb3ZlIGRyYWctYW5kLWRyb3AtcmVsYXRlZCBzdGF0ZSB0
aWVkIHRvIHRoZSBXS0NvbnRlbnRWaWV3IGhlcmUsIGZyb20gRGF0YUludGVyYWN0aW9uU3RhdGUg
KGZvciBpbnN0YW5jZSwgdGhlCisgICAgICAgIFVJVmlldyBmb3IgdGhlIGRyb3AgY2FyZXQsIHRo
ZSBXS0NvbnRlbnRWaWV3IHNuYXBzaG90IHdoZW4gZHJvcHBpbmcsIGFuZCBhIGZsYWcgdXNlIHRv
IGtlZXAgdHJhY2sgb2YgaGlkaW5nIHRoZQorICAgICAgICBjYWxsb3V0IGJhciB3aGVuIGRyYWdn
aW5nIGEgdGV4dCBzZWxlY3Rpb24pLgorCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAgICAgICAoLVtX
S0NvbnRlbnRWaWV3IF9zdGFydEFzc2lzdGluZ05vZGU6dXNlcklzSW50ZXJhY3Rpbmc6Ymx1clBy
ZXZpb3VzTm9kZTp1c2VyT2JqZWN0Ol0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGFjdGlv
blNoZWV0QXNzaXN0YW50OnNob3dDdXN0b21TaGVldEZvckVsZW1lbnQ6XSk6CisgICAgICAgICgt
W1dLQ29udGVudFZpZXcgX2RpZENoYW5nZURyYWdJbnRlcmFjdGlvblBvbGljeV0pOgorICAgICAg
ICAoLVtXS0NvbnRlbnRWaWV3IHNldHVwRGF0YUludGVyYWN0aW9uRGVsZWdhdGVzXSk6CisgICAg
ICAgICgtW1dLQ29udGVudFZpZXcgdGVhcmRvd25EYXRhSW50ZXJhY3Rpb25EZWxlZ2F0ZXNdKToK
KyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfc3RhcnREcmFnOml0ZW06XSk6CisgICAgICAgICgt
W1dLQ29udGVudFZpZXcgX2RpZEhhbmRsZVN0YXJ0RGF0YUludGVyYWN0aW9uUmVxdWVzdDpdKToK
KyAgICAgICAgKC1bV0tDb250ZW50VmlldyBjb21wdXRlQ2xpZW50QW5kR2xvYmFsUG9pbnRzRm9y
RHJvcFNlc3Npb246b3V0Q2xpZW50UG9pbnQ6b3V0R2xvYmFsUG9pbnQ6XSk6CisgICAgICAgICgt
W1dLQ29udGVudFZpZXcgY2xlYW5VcERyYWdTb3VyY2VTZXNzaW9uU3RhdGVdKToKKyAgICAgICAg
KC1bV0tDb250ZW50VmlldyBfZGlkQ29uY2x1ZGVFZGl0RGF0YUludGVyYWN0aW9uOl0pOgorICAg
ICAgICAoLVtXS0NvbnRlbnRWaWV3IF9kaWRQZXJmb3JtRGF0YUludGVyYWN0aW9uQ29udHJvbGxl
ck9wZXJhdGlvbjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfZGlkQ2hhbmdlRGF0YUlu
dGVyYWN0aW9uQ2FyZXRSZWN0OmN1cnJlbnRSZWN0Ol0pOgorICAgICAgICAoLVtXS0NvbnRlbnRW
aWV3IGN1cnJlbnREcmFnT3JEcm9wU2Vzc2lvbl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3
IF9yZXN0b3JlQ2FsbG91dEJhcklmTmVlZGVkXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcg
X2RyYWdJbnRlcmFjdGlvbjpwcmVwYXJlRm9yU2Vzc2lvbjpjb21wbGV0aW9uOl0pOgorICAgICAg
ICAoLVtXS0NvbnRlbnRWaWV3IGRyYWdJbnRlcmFjdGlvbjppdGVtc0ZvckJlZ2lubmluZ1Nlc3Np
b246XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgZHJhZ0ludGVyYWN0aW9uOnByZXZpZXdG
b3JMaWZ0aW5nSXRlbTpzZXNzaW9uOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGRyYWdJ
bnRlcmFjdGlvbjp3aWxsQW5pbWF0ZUxpZnRXaXRoQW5pbWF0b3I6c2Vzc2lvbjpdKToKKyAgICAg
ICAgKC1bV0tDb250ZW50VmlldyBkcmFnSW50ZXJhY3Rpb246c2Vzc2lvbldpbGxCZWdpbjpdKToK
KyAgICAgICAgKC1bV0tDb250ZW50VmlldyBkcmFnSW50ZXJhY3Rpb246c2Vzc2lvbjpkaWRFbmRX
aXRoT3BlcmF0aW9uOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGRyYWdJbnRlcmFjdGlv
bjpwcmV2aWV3Rm9yQ2FuY2VsbGluZ0l0ZW06d2l0aERlZmF1bHQ6XSk6CisgICAgICAgICgtW1dL
Q29udGVudFZpZXcgX2RyYWdJbnRlcmFjdGlvbjppdGVtOnNob3VsZERlbGF5U2V0RG93bkFuaW1h
dGlvbldpdGhDb21wbGV0aW9uOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGRyYWdJbnRl
cmFjdGlvbjppdGVtOndpbGxBbmltYXRlQ2FuY2VsV2l0aEFuaW1hdG9yOl0pOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IGRyb3BJbnRlcmFjdGlvbjpzZXNzaW9uRGlkRW50ZXI6XSk6CisgICAg
ICAgICgtW1dLQ29udGVudFZpZXcgZHJvcEludGVyYWN0aW9uOnNlc3Npb25EaWRVcGRhdGU6XSk6
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgZHJvcEludGVyYWN0aW9uOnNlc3Npb25EaWRFeGl0
Ol0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGRyb3BJbnRlcmFjdGlvbjpwZXJmb3JtRHJv
cDpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBkcm9wSW50ZXJhY3Rpb246c2Vzc2lvbkRp
ZEVuZDpdKToKKworICAgICAgICBQdWxsIG91dCBsb2dpYyB0aGF0IG11dGF0ZXMgZHJhZyBhbmQg
ZHJvcCBzdGF0ZSBpbnRvIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS4gQWRqdXN0IHBsYWNlcyB0
aGF0IHByZXZpb3VzbHkKKyAgICAgICAgYWNjZXNzZWQgRGF0YUludGVyYWN0aW9uU3RhdGUncyBt
ZW1iZXJzIGRpcmVjdGx5IHdpdGggY29ycmVzcG9uZGluZyBnZXR0ZXJzIGluIERyYWdEcm9wSW50
ZXJhY3Rpb25TdGF0ZS4KKworICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9zaW11bGF0ZURhdGFJ
bnRlcmFjdGlvbkVudGVyZWQ6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3NpbXVsYXRl
RGF0YUludGVyYWN0aW9uVXBkYXRlZDpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfc2lt
dWxhdGVEYXRhSW50ZXJhY3Rpb25FbmRlZDpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBf
c2ltdWxhdGVEYXRhSW50ZXJhY3Rpb25QZXJmb3JtT3BlcmF0aW9uOl0pOgorICAgICAgICAoLVtX
S0NvbnRlbnRWaWV3IF9zaW11bGF0ZURhdGFJbnRlcmFjdGlvblNlc3Npb25EaWRFbmQ6XSk6Cisg
ICAgICAgICgtW1dLQ29udGVudFZpZXcgX3NpbXVsYXRlV2lsbEJlZ2luRGF0YUludGVyYWN0aW9u
V2l0aFNlc3Npb246XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3NpbXVsYXRlZEl0ZW1z
Rm9yU2Vzc2lvbjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfc2ltdWxhdGVQcmVwYXJl
Rm9yRGF0YUludGVyYWN0aW9uU2Vzc2lvbjpjb21wbGV0aW9uOl0pOgorCisgICAgICAgIFJlbmFt
ZSBfZGF0YUludGVyYWN0aW9uID0+IF9kcmFnSW50ZXJhY3Rpb24gYW5kIF9kYXRhT3BlcmF0aW9u
ID0+IF9kcm9wSW50ZXJhY3Rpb24uCisKKyAgICAgICAgKHVpSW1hZ2VGb3JJbWFnZSk6IERlbGV0
ZWQuCisgICAgICAgIChzaG91bGRVc2VUZXh0SW5kaWNhdG9yVG9DcmVhdGVQcmV2aWV3Rm9yRHJh
Z0FjdGlvbik6IERlbGV0ZWQuCisgICAgICAgICgtW1dLQ29udGVudFZpZXcgZHJhZ1ByZXZpZXdG
b3JJbWFnZTpmcmFtZUluUm9vdFZpZXdDb29yZGluYXRlczpjbGlwcGluZ1JlY3RzSW5GcmFtZUNv
b3JkaW5hdGVzOmJhY2tncm91bmRDb2xvcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tDb250
ZW50VmlldyBkcmFnUHJldmlld0ZvckN1cnJlbnREYXRhSW50ZXJhY3Rpb25TdGF0ZV0pOiBEZWxl
dGVkLgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF90cmFuc2l0aW9uRHJhZ1ByZXZpZXdUb0lt
YWdlSWZOZWNlc3Nhcnk6XSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisKIDIwMTctMDgtMzEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dh
cmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFNldmVyYWwgSW5wdXRNZXRob2RGaWx0
ZXIgdGVzdHMgYXJlIGZhaWxpbmcgYW5kIGNyYXNoaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvQWJzdHJhY3RQYXN0ZWJvYXJkLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvQWJzdHJhY3RQYXN0ZWJvYXJkLmgKaW5kZXggOTgzNmNiM2ZkZmM0MzRjNjkx
MGRjODJkZWQyMzNiNWRiYjkyNWZkMi4uOWE4OGU3OGU0OWU5NTBmMTJlZjEzMjcwZGYyNDEzZjc0
MTQ0MTEwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0Fic3RyYWN0
UGFzdGVib2FyZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9BYnN0cmFjdFBh
c3RlYm9hcmQuaApAQCAtNDksNyArNDksOCBAQCBOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgogCiBA
b3B0aW9uYWwKICNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAwMDAK
LS0gKHZvaWQpc2V0UmVnaXN0cmF0aW9uSW5mb0xpc3RzOihOU0FycmF5IDxXZWJJdGVtUHJvdmlk
ZXJSZWdpc3RyYXRpb25JbmZvTGlzdCAqPiAqKWluZm87CistICh2b2lkKXN0YWdlUmVnaXN0cmF0
aW9uTGlzdDoobnVsbGFibGUgV2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3QgKilp
bmZvOworLSAobnVsbGFibGUgV2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3QgKil0
YWtlUmVnaXN0cmF0aW9uTGlzdDsKICNlbmRpZgogLSAodm9pZClzZXRJdGVtczooTlNBcnJheTxO
U0RpY3Rpb25hcnkgKj4gKilpdGVtczsKIC0gKE5TQXJyYXk8TlNTdHJpbmcgKj4gKilwYXN0ZWJv
YXJkVHlwZXNCeUZpZGVsaXR5Rm9ySXRlbUF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXg7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9T
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5t
bQppbmRleCAyNWJmYjdhNzg3YjQ3MTE5YTM5MjdjMmVhMWM2NzYyMTBlYjQ1YzFkLi4xYTZmMzdi
ODU3YzY3N2FjMWQxYTNlZjYxM2UzMmE5MWNmODliMjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0KQEAgLTE3OSwxNSAr
MTc5LDEyIEBAIHN0YXRpYyBOU1N0cmluZyAqd2ViSU9TUGFzdGVQYm9hcmRUeXBlID0gQCJpT1Mg
cmljaCBjb250ZW50IHBhc3RlIHBhc3RlYm9hcmQgdHlwCiAKIHN0YXRpYyB2b2lkIHJlZ2lzdGVy
SXRlbVRvUGFzdGVib2FyZChXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdCAqcmVw
cmVzZW50YXRpb25zVG9SZWdpc3RlciwgaWQgPEFic3RyYWN0UGFzdGVib2FyZD4gcGFzdGVib2Fy
ZCkKIHsKLSAgICBVSUl0ZW1Qcm92aWRlciAqaXRlbVByb3ZpZGVyID0gW3JlcHJlc2VudGF0aW9u
c1RvUmVnaXN0ZXIgaXRlbVByb3ZpZGVyXTsKLSAgICBpZiAoIWl0ZW1Qcm92aWRlcikgeworICAg
IGlmIChbcGFzdGVib2FyZCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHN0YWdlUmVnaXN0
cmF0aW9uTGlzdDopXSkKKyAgICAgICAgW3Bhc3RlYm9hcmQgc3RhZ2VSZWdpc3RyYXRpb25MaXN0
OnJlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXJdOworICAgIGVsc2UgaWYgKFVJSXRlbVByb3ZpZGVy
ICppdGVtUHJvdmlkZXIgPSByZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVyLml0ZW1Qcm92aWRlcikK
KyAgICAgICAgW3Bhc3RlYm9hcmQgc2V0SXRlbVByb3ZpZGVyczpAWyBpdGVtUHJvdmlkZXIgXV07
CisgICAgZWxzZQogICAgICAgICBbcGFzdGVib2FyZCBzZXRJdGVtUHJvdmlkZXJzOkBbIF1dOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgW3Bhc3RlYm9hcmQgc2V0SXRlbVByb3ZpZGVy
czpAWyBpdGVtUHJvdmlkZXIgXV07Ci0gICAgaWYgKFtwYXN0ZWJvYXJkIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3Ioc2V0UmVnaXN0cmF0aW9uSW5mb0xpc3RzOildKQotICAgICAgICBbcGFz
dGVib2FyZCBzZXRSZWdpc3RyYXRpb25JbmZvTGlzdHM6QFsgcmVwcmVzZW50YXRpb25zVG9SZWdp
c3RlciBdXTsKIH0KIAogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9XZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZC5oCmluZGV4IDI1MDhmZDFmMWM0YmI3Mjlh
OGNmMzM0MWRhY2FkZTg0YWZhYTRlZjguLmI5MmEyNzQwZTU5YTUyZTNhNDA2MmYxZTU1YjEzZDc2
NmU3OTA5OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJJdGVt
UHJvdmlkZXJQYXN0ZWJvYXJkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dl
Ykl0ZW1Qcm92aWRlclBhc3RlYm9hcmQuaApAQCAtNzYsMTAgKzc2LDYgQEAgV0VCQ09SRV9FWFBP
UlQgQGludGVyZmFjZSBXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIDogTlNPYmplY3Q8QWJzdHJh
Y3RQYXN0ZWJvYXIKIAogKyAoaW5zdGFuY2V0eXBlKXNoYXJlZEluc3RhbmNlOwogCi0vLyBSZWdp
c3RyYXRpb24gaW5mbyBsaXN0cyBhcmUgb25seSBhdmFpbGFibGUgdXBvbiBzdGFydGluZyBkYXRh
IGludGVyYWN0aW9uLgotLSAoV2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3QgKily
ZWdpc3RyYXRpb25JbmZvQXRJbmRleDooTlNVSW50ZWdlcilpbmRleDsKLS0gKFVJSXRlbVByb3Zp
ZGVyICopaXRlbVByb3ZpZGVyQXRJbmRleDooTlNVSW50ZWdlcilpbmRleDsKLQogQHByb3BlcnR5
IChjb3B5LCBub25hdG9taWMsIG51bGxhYmxlKSBOU0FycmF5PF9fa2luZG9mIE5TSXRlbVByb3Zp
ZGVyICo+ICppdGVtUHJvdmlkZXJzOwogQHByb3BlcnR5IChyZWFkb25seSwgbm9uYXRvbWljKSBO
U0ludGVnZXIgbnVtYmVyT2ZJdGVtczsKIEBwcm9wZXJ0eSAocmVhZG9ubHksIG5vbmF0b21pYykg
TlNJbnRlZ2VyIGNoYW5nZUNvdW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZC5tbQppbmRleCBkODYyNjlhNzFiNmM2
NjI1MTRlZDMyZGJjMDlmMTE2NGUyY2YyYjJkLi40YmJiNjFjYzQ3ZmViNTVmYTRkZWVjYThiY2Jh
ZjYwMDBhNjg5NzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2Vi
SXRlbVByb3ZpZGVyUGFzdGVib2FyZC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZC5tbQpAQCAtMjA3LDcgKzIwNyw3IEBAIEBpbXBs
ZW1lbnRhdGlvbiBXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHsKICAgICBSZXRhaW5QdHI8TlNB
cnJheT4gX2NhY2hlZFR5cGVJZGVudGlmaWVyczsKICAgICBSZXRhaW5QdHI8TlNBcnJheT4gX3R5
cGVUb0ZpbGVVUkxNYXBzOwogICAgIFJldGFpblB0cjxOU0FycmF5PiBfc3VwcG9ydGVkVHlwZUlk
ZW50aWZpZXJzOwotICAgIFJldGFpblB0cjxOU0FycmF5PiBfcmVnaXN0cmF0aW9uSW5mb0xpc3Rz
OworICAgIFJldGFpblB0cjxXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdD4gX3N0
YWdlZFJlZ2lzdHJhdGlvbkluZm9MaXN0OwogfQogCiArIChpbnN0YW5jZXR5cGUpc2hhcmVkSW5z
dGFuY2UKQEAgLTIyOCw3ICsyMjgsNyBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdAogICAgICAgICBf
cGVuZGluZ09wZXJhdGlvbkNvdW50ID0gMDsKICAgICAgICAgX3R5cGVUb0ZpbGVVUkxNYXBzID0g
YWRvcHROUyhbW05TQXJyYXkgYWxsb2NdIGluaXRdKTsKICAgICAgICAgX3N1cHBvcnRlZFR5cGVJ
ZGVudGlmaWVycyA9IG5pbDsKLSAgICAgICAgX3JlZ2lzdHJhdGlvbkluZm9MaXN0cyA9IG5pbDsK
KyAgICAgICAgX3N0YWdlZFJlZ2lzdHJhdGlvbkluZm9MaXN0ID0gbmlsOwogICAgIH0KICAgICBy
ZXR1cm4gc2VsZjsKIH0KQEAgLTI3Nyw3ICsyNzcsNyBAQCAtICh2b2lkKXNldEl0ZW1Qcm92aWRl
cnM6KE5TQXJyYXk8X19raW5kb2YgTlNJdGVtUHJvdmlkZXIgKj4gKilpdGVtUHJvdmlkZXJzCiAg
ICAgX2l0ZW1Qcm92aWRlcnMgPSBpdGVtUHJvdmlkZXJzOwogICAgIF9jaGFuZ2VDb3VudCsrOwog
ICAgIF9jYWNoZWRUeXBlSWRlbnRpZmllcnMgPSBuaWw7Ci0gICAgX3JlZ2lzdHJhdGlvbkluZm9M
aXN0cyA9IG5pbDsKKyAgICBfc3RhZ2VkUmVnaXN0cmF0aW9uSW5mb0xpc3QgPSBuaWw7CiAKICAg
ICBOU011dGFibGVBcnJheSAqdHlwZVRvRmlsZVVSTE1hcHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJy
YXlXaXRoQ2FwYWNpdHk6aXRlbVByb3ZpZGVycy5jb3VudF07CiAgICAgW2l0ZW1Qcm92aWRlcnMg
ZW51bWVyYXRlT2JqZWN0c1VzaW5nQmxvY2s6W3R5cGVUb0ZpbGVVUkxNYXBzXSAoVUlJdGVtUHJv
dmlkZXIgKiwgTlNVSW50ZWdlciwgQk9PTCAqKSB7CkBAIC01MTUsMTEgKzUxNSw2IEBAIC0gKHZv
aWQpZG9BZnRlckxvYWRpbmdQcm92aWRlZENvbnRlbnRJbnRvRmlsZVVSTHM6KFdlYkl0ZW1Qcm92
aWRlckZpbGVMb2FkQmxvY2spCiAgICAgZGlzcGF0Y2hfZ3JvdXBfbm90aWZ5KGZpbGVMb2FkaW5n
R3JvdXAuZ2V0KCksIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIGl0ZW1Mb2FkQ29tcGxldGlv
bik7CiB9CiAKLS0gKFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0ICopcmVnaXN0
cmF0aW9uSW5mb0F0SW5kZXg6KE5TVUludGVnZXIpaW5kZXgKLXsKLSAgICByZXR1cm4gaW5kZXgg
PCBbX3JlZ2lzdHJhdGlvbkluZm9MaXN0cyBjb3VudF0gPyBbX3JlZ2lzdHJhdGlvbkluZm9MaXN0
cyBvYmplY3RBdEluZGV4OmluZGV4XSA6IG5pbDsKLX0KLQogLSAoVUlJdGVtUHJvdmlkZXIgKilp
dGVtUHJvdmlkZXJBdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4CiB7CiAgICAgcmV0dXJuIGluZGV4
IDwgW19pdGVtUHJvdmlkZXJzIGNvdW50XSA/IFtfaXRlbVByb3ZpZGVycyBvYmplY3RBdEluZGV4
OmluZGV4XSA6IG5pbDsKQEAgLTU0NSw5ICs1NDAsMTYgQEAgLSAodm9pZCllbnVtZXJhdGVJdGVt
UHJvdmlkZXJzV2l0aEJsb2NrOih2b2lkICheKShVSUl0ZW1Qcm92aWRlciAqaXRlbVByb3ZpZGVy
LAogICAgIFtfaXRlbVByb3ZpZGVycyBlbnVtZXJhdGVPYmplY3RzVXNpbmdCbG9jazpibG9ja107
CiB9CiAKLS0gKHZvaWQpc2V0UmVnaXN0cmF0aW9uSW5mb0xpc3RzOihOU0FycmF5IDxXZWJJdGVt
UHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdCAqPiAqKWluZm9MaXN0cworLSAodm9pZClzdGFn
ZVJlZ2lzdHJhdGlvbkxpc3Q6KG51bGxhYmxlIFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbklu
Zm9MaXN0ICopaW5mbworeworICAgIF9zdGFnZWRSZWdpc3RyYXRpb25JbmZvTGlzdCA9IGluZm8u
bnVtYmVyT2ZJdGVtcyA/IGluZm8gOiBuaWw7Cit9CisKKy0gKFdlYkl0ZW1Qcm92aWRlclJlZ2lz
dHJhdGlvbkluZm9MaXN0ICopdGFrZVJlZ2lzdHJhdGlvbkxpc3QKIHsKLSAgICBfcmVnaXN0cmF0
aW9uSW5mb0xpc3RzID0gaW5mb0xpc3RzOworICAgIGF1dG8gc3RhZ2VkUmVnaXN0cmF0aW9uSW5m
b0xpc3QgPSBfc3RhZ2VkUmVnaXN0cmF0aW9uSW5mb0xpc3Q7CisgICAgX3N0YWdlZFJlZ2lzdHJh
dGlvbkluZm9MaXN0ID0gbmlsOworICAgIHJldHVybiBzdGFnZWRSZWdpc3RyYXRpb25JbmZvTGlz
dC5hdXRvcmVsZWFzZSgpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lv
cy9VSUtpdFNQSS5oCmluZGV4IDg2ZTkyOWY1NTUyMzBmOTA4MGNkNGI1YTZjMWQ5YmU2NzZkNTQ0
ODguLmUxM2FkMzNmM2Y1ZGNkMDA3MzFjZWQzYTY1ZDM4N2Y3NzI0OTljZWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCkBAIC05MCw2ICs5MCw3IEBACiAjaWYg
RU5BQkxFKERSQUdfU1VQUE9SVCkKICNpbXBvcnQgPFVJS2l0L1VJRHJhZ0ludGVyYWN0aW9uLmg+
CiAjaW1wb3J0IDxVSUtpdC9VSURyYWdJbnRlcmFjdGlvbl9Qcml2YXRlLmg+CisjaW1wb3J0IDxV
SUtpdC9VSURyYWdJdGVtX1ByaXZhdGUuaD4KICNpbXBvcnQgPFVJS2l0L1VJRHJhZ1ByZXZpZXdQ
YXJhbWV0ZXJzLmg+CiAjaW1wb3J0IDxVSUtpdC9VSURyYWdQcmV2aWV3X1ByaXZhdGUuaD4KICNp
bXBvcnQgPFVJS2l0L1VJRHJhZ1Nlc3Npb24uaD4KQEAgLTkwMCw2ICs5MDEsMTAgQEAgdHlwZWRl
ZiBOU19PUFRJT05TKE5TVUludGVnZXIsIFVJRHJhZ09wZXJhdGlvbikKIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBhc3NpZ24sIGdldHRlcj1fbGlmdERlbGF5LCBzZXR0ZXI9X3NldExpZnREZWxheTop
IE5TVGltZUludGVydmFsIGxpZnREZWxheTsKIEBlbmQKIAorQGludGVyZmFjZSBVSURyYWdJdGVt
ICgpCitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nLCBudWxsYWJsZSwgc2V0dGVyPV9zZXRQ
cml2YXRlTG9jYWxDb250ZXh0OiwgZ2V0dGVyPV9wcml2YXRlTG9jYWxDb250ZXh0KSBpZCBwcml2
YXRlTG9jYWxDb250ZXh0OworQGVuZAorCiBAcHJvdG9jb2wgVUlUZXh0SW5wdXQ7CiBAaW50ZXJm
YWNlIF9VSVRleHREcmFnQ2FyZXRWaWV3IDogVUlWaWV3CiAtIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhUZXh0SW5wdXRWaWV3OihVSVZpZXc8VUlUZXh0SW5wdXQ+ICopdGV4dElucHV0VmlldzsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9EcmFnRHJvcEludGVyYWN0aW9u
U3RhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9EcmFnRHJvcEludGVyYWN0aW9u
U3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jNTc5MjNhZWQ4MTlkMzQ3MjgyNjFlNmQ0OTU1NzhhM2Y1ZDA4
ZWY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL0RyYWdE
cm9wSW50ZXJhY3Rpb25TdGF0ZS5oCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKSAmJiBQTEFURk9STShJT1MpCisK
KyNpbXBvcnQgIlVJS2l0U1BJLmgiCisjaW1wb3J0IDxXZWJDb3JlL0RyYWdBY3Rpb25zLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL0RyYWdEYXRhLmg+CisjaW1wb3J0IDxXZWJDb3JlL1RleHRJbmRpY2F0
b3IuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVVJMLmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYkl0ZW1Q
cm92aWRlclBhc3RlYm9hcmQuaD4KKyNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgorI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CitzdHJ1Y3QgRHJhZ0l0ZW07Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdHJ1
Y3QgRHJhZ1NvdXJjZVN0YXRlIHsKKyAgICBXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uIGFjdGlv
biB7IFdlYkNvcmU6OkRyYWdTb3VyY2VBY3Rpb25Ob25lIH07CisgICAgQ0dQb2ludCBhZGp1c3Rl
ZE9yaWdpbiB7IENHUG9pbnRaZXJvIH07CisgICAgQ0dSZWN0IGVsZW1lbnRCb3VuZHMgeyBDR1Jl
Y3RaZXJvIH07CisgICAgUmV0YWluUHRyPFVJSW1hZ2U+IGltYWdlOworICAgIHN0ZDo6b3B0aW9u
YWw8V2ViQ29yZTo6VGV4dEluZGljYXRvckRhdGE+IGluZGljYXRvckRhdGE7CisgICAgU3RyaW5n
IGxpbmtUaXRsZTsKKyAgICBXZWJDb3JlOjpVUkwgbGlua1VSTDsKKyAgICBib29sIHBvc3NpYmx5
TmVlZHNEcmFnUHJldmlld1VwZGF0ZTsKKworICAgIE5TSW50ZWdlciBpdGVtSWRlbnRpZmllcjsK
K307CisKK2NsYXNzIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZSB7CitwdWJsaWM6CisgICAgYm9v
bCBhbnlBY3RpdmVEcmFnU291cmNlSXMoV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlvbikgY29uc3Q7
CisKKyAgICAvLyBUaGVzZSBoZWxwZXIgbWV0aG9kcyBhcmUgdW5pcXVlIHRvIFVJRHJhZ0ludGVy
YWN0aW9uLgorICAgIHZvaWQgcHJlcGFyZUZvckRyYWdTZXNzaW9uKGlkIDxVSURyYWdTZXNzaW9u
PiwgZGlzcGF0Y2hfYmxvY2tfdCBjb21wbGV0aW9uSGFuZGxlcik7CisgICAgdm9pZCBkcmFnU2Vz
c2lvbldpbGxCZWdpbigpOworICAgIHZvaWQgc3RhZ2VEcmFnSXRlbShjb25zdCBXZWJDb3JlOjpE
cmFnSXRlbSYsIFJldGFpblB0cjxVSUltYWdlPik7CisgICAgYm9vbCBoYXNTdGFnZWREcmFnU291
cmNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhIW1fc3RhZ2VkRHJhZ1NvdXJjZSAm
JiBzdGFnZWREcmFnU291cmNlKCkuYWN0aW9uICE9IFdlYkNvcmU6OkRyYWdTb3VyY2VBY3Rpb25O
b25lOworICAgIH0KKyAgICBjb25zdCBEcmFnU291cmNlU3RhdGUmIHN0YWdlZERyYWdTb3VyY2Uo
KSBjb25zdCB7IHJldHVybiBtX3N0YWdlZERyYWdTb3VyY2UudmFsdWUoKTsgfQorICAgIGVudW0g
Y2xhc3MgRGlkQmVjb21lQWN0aXZlIHsgTm8sIFllcyB9OworICAgIHZvaWQgY2xlYXJTdGFnZWRE
cmFnU291cmNlKERpZEJlY29tZUFjdGl2ZSBkaWRCZWNvbWVBY3RpdmUgPSBEaWRCZWNvbWVBY3Rp
dmU6Ok5vKQorICAgIHsKKyAgICAgICAgaWYgKGRpZEJlY29tZUFjdGl2ZSA9PSBEaWRCZWNvbWVB
Y3RpdmU6OlllcykKKyAgICAgICAgICAgIG1fYWN0aXZlRHJhZ1NvdXJjZXMuYXBwZW5kKHN0YWdl
ZERyYWdTb3VyY2UoKSk7CisgICAgICAgIG1fc3RhZ2VkRHJhZ1NvdXJjZSA9IHN0ZDo6bnVsbG9w
dDsKKyAgICB9CisgICAgVUlUYXJnZXRlZERyYWdQcmV2aWV3ICpwcmV2aWV3Rm9yRHJhZ0l0ZW0o
VUlEcmFnSXRlbSAqLCBVSVZpZXcgKmNvbnRlbnRWaWV3LCBVSVZpZXcgKnByZXZpZXdDb250YWlu
ZXIpIGNvbnN0OworICAgIHZvaWQgZHJhZ1Nlc3Npb25XaWxsRGVsYXlTZXREb3duQW5pbWF0aW9u
KGRpc3BhdGNoX2Jsb2NrX3QgY29tcGxldGlvbikgeyBtX2RyYWdDYW5jZWxTZXREb3duQmxvY2sg
PSBjb21wbGV0aW9uOyB9CisKKyAgICAvLyBUaGVzZSBoZWxwZXIgbWV0aG9kcyBhcmUgdW5pcXVl
IHRvIFVJRHJvcEludGVyYWN0aW9uLgorICAgIHZvaWQgZHJvcFNlc3Npb25EaWRFbnRlck9yVXBk
YXRlKGlkIDxVSURyb3BTZXNzaW9uPiwgY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEmKTsKKyAgICB2
b2lkIGRyb3BTZXNzaW9uRGlkRXhpdCgpIHsgbV9kcm9wU2Vzc2lvbiA9IG5pbDsgfQorICAgIHZv
aWQgZHJvcFNlc3Npb25XaWxsUGVyZm9ybURyb3AoKSB7IG1faXNQZXJmb3JtaW5nRHJvcCA9IHRy
dWU7IH0KKworICAgIHZvaWQgZHJhZ0FuZERyb3BTZXNzaW9uc0RpZEVuZCgpOworCisgICAgQ0dQ
b2ludCBhZGp1c3RlZFBvc2l0aW9uRm9yRHJhZ0VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYWRqdXN0
ZWRQb3NpdGlvbkZvckRyYWdFbmQ7IH0KKworICAgIGJvb2wgZGlkQmVnaW5EcmFnZ2luZygpIGNv
bnN0IHsgcmV0dXJuIG1fZGlkQmVnaW5EcmFnZ2luZzsgfQorICAgIGJvb2wgaXNQZXJmb3JtaW5n
RHJvcCgpIGNvbnN0IHsgcmV0dXJuIG1faXNQZXJmb3JtaW5nRHJvcDsgfQorCisgICAgaWQ8VUlE
cmFnU2Vzc2lvbj4gZHJhZ1Nlc3Npb24oKSBjb25zdCB7IHJldHVybiBtX2RyYWdTZXNzaW9uLmdl
dCgpOyB9CisgICAgaWQ8VUlEcm9wU2Vzc2lvbj4gZHJvcFNlc3Npb24oKSBjb25zdCB7IHJldHVy
biBtX2Ryb3BTZXNzaW9uLmdldCgpOyB9CisKKyAgICBCbG9ja1B0cjx2b2lkKCk+IHRha2VEcmFn
U3RhcnRDb21wbGV0aW9uQmxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8gYmxvY2sgPSBt
X2RyYWdTdGFydENvbXBsZXRpb25CbG9jaykgeworICAgICAgICAgICAgbV9kcmFnU3RhcnRDb21w
bGV0aW9uQmxvY2sgPSBuaWw7CisgICAgICAgICAgICByZXR1cm4gYmxvY2s7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisKKyAgICBCbG9ja1B0cjx2b2lkKCk+IHRha2VE
cmFnQ2FuY2VsU2V0RG93bkJsb2NrKCkKKyAgICB7CisgICAgICAgIGlmIChhdXRvIGJsb2NrID0g
bV9kcmFnQ2FuY2VsU2V0RG93bkJsb2NrKSB7CisgICAgICAgICAgICBtX2RyYWdDYW5jZWxTZXRE
b3duQmxvY2sgPSBuaWw7CisgICAgICAgICAgICByZXR1cm4gYmxvY2s7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCB1cGRhdGVQcmV2
aWV3c0ZvckFjdGl2ZURyYWdTb3VyY2VzKCk7CisgICAgc3RkOjpvcHRpb25hbDxEcmFnU291cmNl
U3RhdGU+IGFjdGl2ZURyYWdTb3VyY2VGb3JJdGVtKFVJRHJhZ0l0ZW0gKikgY29uc3Q7CisKKyAg
ICBDR1BvaW50IG1fbGFzdEdsb2JhbFBvc2l0aW9uIHsgQ0dQb2ludFplcm8gfTsKKyAgICBDR1Bv
aW50IG1fYWRqdXN0ZWRQb3NpdGlvbkZvckRyYWdFbmQgeyBDR1BvaW50WmVybyB9OworICAgIGJv
b2wgbV9kaWRCZWdpbkRyYWdnaW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNQZXJmb3JtaW5n
RHJvcCB7IGZhbHNlIH07CisgICAgUmV0YWluUHRyPGlkIDxVSURyYWdTZXNzaW9uPj4gbV9kcmFn
U2Vzc2lvbjsKKyAgICBSZXRhaW5QdHI8aWQgPFVJRHJvcFNlc3Npb24+PiBtX2Ryb3BTZXNzaW9u
OworICAgIEJsb2NrUHRyPHZvaWQoKT4gbV9kcmFnU3RhcnRDb21wbGV0aW9uQmxvY2s7CisgICAg
QmxvY2tQdHI8dm9pZCgpPiBtX2RyYWdDYW5jZWxTZXREb3duQmxvY2s7CisKKyAgICBzdGQ6Om9w
dGlvbmFsPERyYWdTb3VyY2VTdGF0ZT4gbV9zdGFnZWREcmFnU291cmNlOworICAgIFZlY3RvcjxE
cmFnU291cmNlU3RhdGU+IG1fYWN0aXZlRHJhZ1NvdXJjZXM7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShEUkFHX1NVUFBPUlQpICYmIFBMQVRGT1JNKElP
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9EcmFnRHJvcEludGVy
YWN0aW9uU3RhdGUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvRHJhZ0Ryb3BJbnRl
cmFjdGlvblN0YXRlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhYzhkMmIwN2M2Y2FjZWFmMjc4OTRjNzNjMjJi
MWU4NDg5NTY3ODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLm1tCkBAIC0wLDAgKzEsMjMyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRyYWdEcm9wSW50ZXJhY3Rpb25T
dGF0ZS5oIgorCisjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkgJiYgUExBVEZPUk0oSU9TKQorCisj
aW1wb3J0IDxXZWJDb3JlL0RyYWdJdGVtLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ltYWdlLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBVSURyYWdJdGVtICpkcmFnSXRlbU1hdGNoaW5nSWRl
bnRpZmllcihpZCA8VUlEcmFnU2Vzc2lvbj4gc2Vzc2lvbiwgTlNJbnRlZ2VyIGlkZW50aWZpZXIp
Cit7CisgICAgZm9yIChVSURyYWdJdGVtICppdGVtIGluIHNlc3Npb24uaXRlbXMpIHsKKyAgICAg
ICAgaWQgY29udGV4dCA9IGl0ZW0ucHJpdmF0ZUxvY2FsQ29udGV4dDsKKyAgICAgICAgaWYgKFtj
b250ZXh0IGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0gJiYgW2NvbnRleHQgaW50ZWdl
clZhbHVlXSA9PSBpZGVudGlmaWVyKQorICAgICAgICAgICAgcmV0dXJuIGl0ZW07CisgICAgfQor
ICAgIHJldHVybiBuaWw7Cit9CisKK3N0YXRpYyBVSVRhcmdldGVkRHJhZ1ByZXZpZXcgKmNyZWF0
ZVRhcmdldGVkRHJhZ1ByZXZpZXcoVUlJbWFnZSAqaW1hZ2UsIFVJVmlldyAqcm9vdFZpZXcsIFVJ
VmlldyAqcHJldmlld0NvbnRhaW5lciwgY29uc3QgRmxvYXRSZWN0JiBmcmFtZUluUm9vdFZpZXdD
b29yZGluYXRlcywgY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIGNsaXBwaW5nUmVjdHNJbkZyYW1l
Q29vcmRpbmF0ZXMsIFVJQ29sb3IgKmJhY2tncm91bmRDb2xvcikKK3sKKyAgICBpZiAoZnJhbWVJ
blJvb3RWaWV3Q29vcmRpbmF0ZXMuaXNFbXB0eSgpIHx8ICFpbWFnZSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBOU011dGFibGVBcnJheSAqY2xpcHBpbmdSZWN0VmFsdWVzSW5GcmFt
ZUNvb3JkaW5hdGVzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmNsaXBwaW5n
UmVjdHNJbkZyYW1lQ29vcmRpbmF0ZXMuc2l6ZSgpXTsKKworICAgIEZsb2F0UmVjdCBmcmFtZUlu
Q29udGFpbmVyQ29vcmRpbmF0ZXMgPSBbcm9vdFZpZXcgY29udmVydFJlY3Q6ZnJhbWVJblJvb3RW
aWV3Q29vcmRpbmF0ZXMgdG9WaWV3OnByZXZpZXdDb250YWluZXJdOworICAgIGlmIChmcmFtZUlu
Q29udGFpbmVyQ29vcmRpbmF0ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIGZsb2F0IHdpZHRoU2NhbGluZ1JhdGlvID0gZnJhbWVJbkNvbnRhaW5lckNvb3JkaW5h
dGVzLndpZHRoKCkgLyBmcmFtZUluUm9vdFZpZXdDb29yZGluYXRlcy53aWR0aCgpOworICAgIGZs
b2F0IGhlaWdodFNjYWxpbmdSYXRpbyA9IGZyYW1lSW5Db250YWluZXJDb29yZGluYXRlcy5oZWln
aHQoKSAvIGZyYW1lSW5Sb290Vmlld0Nvb3JkaW5hdGVzLmhlaWdodCgpOworICAgIGZvciAoYXV0
byByZWN0IDogY2xpcHBpbmdSZWN0c0luRnJhbWVDb29yZGluYXRlcykgeworICAgICAgICByZWN0
LnNjYWxlKHdpZHRoU2NhbGluZ1JhdGlvLCBoZWlnaHRTY2FsaW5nUmF0aW8pOworICAgICAgICBb
Y2xpcHBpbmdSZWN0VmFsdWVzSW5GcmFtZUNvb3JkaW5hdGVzIGFkZE9iamVjdDpbTlNWYWx1ZSB2
YWx1ZVdpdGhDR1JlY3Q6cmVjdF1dOworICAgIH0KKworICAgIGF1dG8gaW1hZ2VWaWV3ID0gYWRv
cHROUyhbW1VJSW1hZ2VWaWV3IGFsbG9jXSBpbml0V2l0aEltYWdlOmltYWdlXSk7CisgICAgW2lt
YWdlVmlldyBzZXRGcmFtZTpmcmFtZUluQ29udGFpbmVyQ29vcmRpbmF0ZXNdOworCisgICAgUmV0
YWluUHRyPFVJRHJhZ1ByZXZpZXdQYXJhbWV0ZXJzPiBwYXJhbWV0ZXJzOworICAgIGlmIChjbGlw
cGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXMuY291bnQpCisgICAgICAgIHBhcmFtZXRl
cnMgPSBhZG9wdE5TKFtbVUlEcmFnUHJldmlld1BhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoVGV4
dExpbmVSZWN0czpjbGlwcGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXNdKTsKKyAgICBl
bHNlCisgICAgICAgIHBhcmFtZXRlcnMgPSBhZG9wdE5TKFtbVUlEcmFnUHJldmlld1BhcmFtZXRl
cnMgYWxsb2NdIGluaXRdKTsKKworICAgIGlmIChiYWNrZ3JvdW5kQ29sb3IpCisgICAgICAgIFtw
YXJhbWV0ZXJzIHNldEJhY2tncm91bmRDb2xvcjpiYWNrZ3JvdW5kQ29sb3JdOworCisgICAgQ0dQ
b2ludCBjZW50ZXJJbkNvbnRhaW5lckNvb3JkaW5hdGVzID0geyBDR1JlY3RHZXRNaWRYKGZyYW1l
SW5Db250YWluZXJDb29yZGluYXRlcyksIENHUmVjdEdldE1pZFkoZnJhbWVJbkNvbnRhaW5lckNv
b3JkaW5hdGVzKSB9OworICAgIGF1dG8gdGFyZ2V0ID0gYWRvcHROUyhbW1VJRHJhZ1ByZXZpZXdU
YXJnZXQgYWxsb2NdIGluaXRXaXRoQ29udGFpbmVyOnByZXZpZXdDb250YWluZXIgY2VudGVyOmNl
bnRlckluQ29udGFpbmVyQ29vcmRpbmF0ZXNdKTsKKyAgICBhdXRvIGRyYWdQcmV2aWV3ID0gYWRv
cHROUyhbW1VJVGFyZ2V0ZWREcmFnUHJldmlldyBhbGxvY10gaW5pdFdpdGhWaWV3OmltYWdlVmll
dy5nZXQoKSBwYXJhbWV0ZXJzOnBhcmFtZXRlcnMuZ2V0KCkgdGFyZ2V0OnRhcmdldC5nZXQoKV0p
OworICAgIHJldHVybiBkcmFnUHJldmlldy5hdXRvcmVsZWFzZSgpOworfQorCitzdGF0aWMgUmV0
YWluUHRyPFVJSW1hZ2U+IHVpSW1hZ2VGb3JJbWFnZShSZWZQdHI8SW1hZ2U+IGltYWdlKQorewor
ICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBjZ0lt
YWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlKCk7CisgICAgaWYgKCFjZ0ltYWdlKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBhZG9wdE5TKFtbVUlJbWFnZSBhbGxvY10gaW5p
dFdpdGhDR0ltYWdlOmNnSW1hZ2UuZ2V0KCldKTsKK30KKworc3RhdGljIGJvb2wgc2hvdWxkVXNl
VGV4dEluZGljYXRvclRvQ3JlYXRlUHJldmlld0ZvckRyYWdBY3Rpb24oRHJhZ1NvdXJjZUFjdGlv
biBhY3Rpb24pCit7CisgICAgaWYgKGFjdGlvbiAmIChEcmFnU291cmNlQWN0aW9uTGluayB8IERy
YWdTb3VyY2VBY3Rpb25TZWxlY3Rpb24pKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworI2lmIEVO
QUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCisgICAgaWYgKGFjdGlvbiAmIERyYWdTb3VyY2VBY3Rp
b25BdHRhY2htZW50KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitzdGQ6Om9wdGlvbmFsPERyYWdTb3VyY2VTdGF0ZT4gRHJhZ0Ryb3BJbnRl
cmFjdGlvblN0YXRlOjphY3RpdmVEcmFnU291cmNlRm9ySXRlbShVSURyYWdJdGVtICppdGVtKSBj
b25zdAoreworICAgIGlmICghW2l0ZW0ucHJpdmF0ZUxvY2FsQ29udGV4dCBpc0tpbmRPZkNsYXNz
OltOU051bWJlciBjbGFzc11dKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAg
YXV0byBpZGVudGlmaWVyID0gWyhOU051bWJlciAqKWl0ZW0ucHJpdmF0ZUxvY2FsQ29udGV4dCBp
bnRlZ2VyVmFsdWVdOworICAgIGZvciAoYXV0byYgc291cmNlIDogbV9hY3RpdmVEcmFnU291cmNl
cykgeworICAgICAgICBpZiAoc291cmNlLml0ZW1JZGVudGlmaWVyID09IGlkZW50aWZpZXIpCisg
ICAgICAgICAgICByZXR1cm4gc291cmNlOworICAgIH0KKyAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworfQorCitib29sIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZTo6YW55QWN0aXZlRHJhZ1NvdXJj
ZUlzKFdlYkNvcmU6OkRyYWdTb3VyY2VBY3Rpb24gYWN0aW9uKSBjb25zdAoreworICAgIGZvciAo
YXV0byYgc291cmNlIDogbV9hY3RpdmVEcmFnU291cmNlcykgeworICAgICAgICBpZiAoc291cmNl
LmFjdGlvbiAmIGFjdGlvbikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlOjpwcmVwYXJl
Rm9yRHJhZ1Nlc3Npb24oaWQgPFVJRHJhZ1Nlc3Npb24+IHNlc3Npb24sIGRpc3BhdGNoX2Jsb2Nr
X3QgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgbV9kcmFnU2Vzc2lvbiA9IHNlc3Npb247Cisg
ICAgbV9kcmFnU3RhcnRDb21wbGV0aW9uQmxvY2sgPSBjb21wbGV0aW9uSGFuZGxlcjsKK30KKwor
dm9pZCBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGU6OmRyYWdTZXNzaW9uV2lsbEJlZ2luKCkKK3sK
KyAgICBtX2RpZEJlZ2luRHJhZ2dpbmcgPSB0cnVlOworICAgIHVwZGF0ZVByZXZpZXdzRm9yQWN0
aXZlRHJhZ1NvdXJjZXMoKTsKK30KKworVUlUYXJnZXRlZERyYWdQcmV2aWV3ICpEcmFnRHJvcElu
dGVyYWN0aW9uU3RhdGU6OnByZXZpZXdGb3JEcmFnSXRlbShVSURyYWdJdGVtICppdGVtLCBVSVZp
ZXcgKmNvbnRlbnRWaWV3LCBVSVZpZXcgKnByZXZpZXdDb250YWluZXIpIGNvbnN0Cit7CisgICAg
YXV0byBmb3VuZFNvdXJjZSA9IGFjdGl2ZURyYWdTb3VyY2VGb3JJdGVtKGl0ZW0pOworICAgIGlm
ICghZm91bmRTb3VyY2UpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBhdXRvJiBzb3VyY2Ug
PSBmb3VuZFNvdXJjZS52YWx1ZSgpOworICAgIGlmICgoc291cmNlLmFjdGlvbiAmIERyYWdTb3Vy
Y2VBY3Rpb25JbWFnZSkgJiYgc291cmNlLmltYWdlKSB7CisgICAgICAgIFZlY3RvcjxGbG9hdFJl
Y3Q+IGVtcHR5Q2xpcHBpbmdSZWN0czsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVRhcmdldGVkRHJh
Z1ByZXZpZXcoc291cmNlLmltYWdlLmdldCgpLCBjb250ZW50VmlldywgcHJldmlld0NvbnRhaW5l
ciwgc291cmNlLmVsZW1lbnRCb3VuZHMsIGVtcHR5Q2xpcHBpbmdSZWN0cywgbmlsKTsKKyAgICB9
CisKKyAgICBpZiAoc2hvdWxkVXNlVGV4dEluZGljYXRvclRvQ3JlYXRlUHJldmlld0ZvckRyYWdB
Y3Rpb24oc291cmNlLmFjdGlvbikgJiYgc291cmNlLmluZGljYXRvckRhdGEpIHsKKyAgICAgICAg
YXV0byBpbmRpY2F0b3IgPSBzb3VyY2UuaW5kaWNhdG9yRGF0YS52YWx1ZSgpOworICAgICAgICBy
ZXR1cm4gY3JlYXRlVGFyZ2V0ZWREcmFnUHJldmlldyh1aUltYWdlRm9ySW1hZ2UoaW5kaWNhdG9y
LmNvbnRlbnRJbWFnZSkuZ2V0KCksIGNvbnRlbnRWaWV3LCBwcmV2aWV3Q29udGFpbmVyLCBpbmRp
Y2F0b3IudGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcywgaW5kaWNhdG9yLnRl
eHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMsIFtVSUNvbG9yIGNvbG9yV2l0aENHQ29s
b3I6Y2FjaGVkQ0dDb2xvcihpbmRpY2F0b3IuZXN0aW1hdGVkQmFja2dyb3VuZENvbG9yKV0pOwor
ICAgIH0KKworICAgIHJldHVybiBuaWw7Cit9CisKK3ZvaWQgRHJhZ0Ryb3BJbnRlcmFjdGlvblN0
YXRlOjpkcm9wU2Vzc2lvbkRpZEVudGVyT3JVcGRhdGUoaWQgPFVJRHJvcFNlc3Npb24+IHNlc3Np
b24sIGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKK3sKKyAgICBtX2Ryb3BTZXNzaW9uID0gc2Vz
c2lvbjsKKyAgICBtX2xhc3RHbG9iYWxQb3NpdGlvbiA9IGRyYWdEYXRhLmdsb2JhbFBvc2l0aW9u
KCk7Cit9CisKK3ZvaWQgRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlOjpzdGFnZURyYWdJdGVtKGNv
bnN0IERyYWdJdGVtJiBpdGVtLCBSZXRhaW5QdHI8VUlJbWFnZT4gZHJhZ0ltYWdlKQoreworICAg
IHN0YXRpYyBOU0ludGVnZXIgY3VycmVudERyYWdTb3VyY2VJdGVtSWRlbnRpZmllciA9IDA7CisK
KyAgICBtX2FkanVzdGVkUG9zaXRpb25Gb3JEcmFnRW5kID0gaXRlbS5ldmVudFBvc2l0aW9uSW5D
b250ZW50Q29vcmRpbmF0ZXM7CisgICAgbV9zdGFnZWREcmFnU291cmNlID0ge3sKKyAgICAgICAg
c3RhdGljX2Nhc3Q8RHJhZ1NvdXJjZUFjdGlvbj4oaXRlbS5zb3VyY2VBY3Rpb24pLAorICAgICAg
ICBpdGVtLmV2ZW50UG9zaXRpb25JbkNvbnRlbnRDb29yZGluYXRlcywKKyAgICAgICAgaXRlbS5l
bGVtZW50Qm91bmRzLAorICAgICAgICBkcmFnSW1hZ2UsCisgICAgICAgIGl0ZW0uaW1hZ2UuaW5k
aWNhdG9yRGF0YSgpLAorICAgICAgICBpdGVtLnRpdGxlLmlzRW1wdHkoKSA/IG5pbCA6IChOU1N0
cmluZyAqKWl0ZW0udGl0bGUsCisgICAgICAgIGl0ZW0udXJsLmlzRW1wdHkoKSA/IG5pbCA6IChO
U1VSTCAqKWl0ZW0udXJsLAorICAgICAgICB0cnVlLCAvLyBXZSBhc3N1bWUgaGVyZSB0aGF0IGRy
YWcgcHJldmlld3MgbmVlZCB0byBiZSB1cGRhdGVkIHVudGlsIHByb3ZlbiBvdGhlcndpc2UgaW4g
dXBkYXRlUHJldmlld3NGb3JBY3RpdmVEcmFnU291cmNlcygpLgorICAgICAgICArK2N1cnJlbnRE
cmFnU291cmNlSXRlbUlkZW50aWZpZXIKKyAgICB9fTsKK30KKwordm9pZCBEcmFnRHJvcEludGVy
YWN0aW9uU3RhdGU6OmRyYWdBbmREcm9wU2Vzc2lvbnNEaWRFbmQoKQoreworICAgIC8vIElmIGFu
eSBvZiBVSUtpdCdzIGNvbXBsZXRpb24gYmxvY2tzIGFyZSBzdGlsbCBpbi1mbGlnaHQgd2hlbiB0
aGUgZHJhZyBpbnRlcmFjdGlvbiBlbmRzLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZXkgYXJl
IHN0aWxsIGludm9rZWQKKyAgICAvLyB0byBwcmV2ZW50IFVJS2l0IGZyb20gZ2V0dGluZyBpbnRv
IGFuIGluY29uc2lzdGVudCBzdGF0ZS4KKyAgICBpZiAoYXV0byBjb21wbGV0aW9uQmxvY2sgPSB0
YWtlRHJhZ0NhbmNlbFNldERvd25CbG9jaygpKQorICAgICAgICBjb21wbGV0aW9uQmxvY2soKTsK
KworICAgIGlmIChhdXRvIGNvbXBsZXRpb25CbG9jayA9IHRha2VEcmFnU3RhcnRDb21wbGV0aW9u
QmxvY2soKSkKKyAgICAgICAgY29tcGxldGlvbkJsb2NrKCk7Cit9CisKK3ZvaWQgRHJhZ0Ryb3BJ
bnRlcmFjdGlvblN0YXRlOjp1cGRhdGVQcmV2aWV3c0ZvckFjdGl2ZURyYWdTb3VyY2VzKCkKK3sK
KyAgICBmb3IgKGF1dG8mIHNvdXJjZSA6IG1fYWN0aXZlRHJhZ1NvdXJjZXMpIHsKKyAgICAgICAg
aWYgKCFzb3VyY2UucG9zc2libHlOZWVkc0RyYWdQcmV2aWV3VXBkYXRlKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgaWYgKHNvdXJjZS5hY3Rpb24gJiBEcmFnU291cmNlQWN0aW9u
SW1hZ2UgfHwgIShzb3VyY2UuYWN0aW9uICYgRHJhZ1NvdXJjZUFjdGlvbkxpbmspKSB7CisgICAg
ICAgICAgICAvLyBDdXJyZW50bHksIG5vbi1pbWFnZSBsaW5rcyBhcmUgdGhlIG9ubHkgdHlwZSBv
ZiBzb3VyY2UgZm9yIHdoaWNoIHdlIG5lZWQgdG8gdXBkYXRlCisgICAgICAgICAgICAvLyBkcmFn
IHByZXZpZXcgcHJvdmlkZXJzIGFmdGVyIHRoZSBpbml0aWFsIGxpZnQuIEFsbCBvdGhlciBkcmFn
Z2VkIGNvbnRlbnQgc2hvdWxkIG1haW50YWluCisgICAgICAgICAgICAvLyB0aGUgc2FtZSB0YXJn
ZXRlZCBkcmFnIHByZXZpZXcgdXNlZCBkdXJpbmcgdGhlIGxpZnQgYW5pbWF0aW9uLgorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBVSURyYWdJdGVtICpkcmFnSXRl
bSA9IGRyYWdJdGVtTWF0Y2hpbmdJZGVudGlmaWVyKG1fZHJhZ1Nlc3Npb24uZ2V0KCksIHNvdXJj
ZS5pdGVtSWRlbnRpZmllcik7CisgICAgICAgIGlmICghZHJhZ0l0ZW0pCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBhdXRvIGxpbmtEcmFnZ2luZ0NlbnRlciA9IHNvdXJjZS5hZGp1
c3RlZE9yaWdpbjsKKyAgICAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiB0aXRsZSA9IChOU1N0cmlu
ZyAqKXNvdXJjZS5saW5rVGl0bGU7CisgICAgICAgIFJldGFpblB0cjxOU1VSTD4gdXJsID0gKE5T
VVJMICopc291cmNlLmxpbmtVUkw7CisgICAgICAgIGRyYWdJdGVtLnByZXZpZXdQcm92aWRlciA9
IFt0aXRsZSwgdXJsLCBsaW5rRHJhZ2dpbmdDZW50ZXJdICgpIC0+IFVJRHJhZ1ByZXZpZXcgKiB7
CisgICAgICAgICAgICBVSVVSTERyYWdQcmV2aWV3VmlldyAqcHJldmlld1ZpZXcgPSBbVUlVUkxE
cmFnUHJldmlld1ZpZXcgdmlld1dpdGhUaXRsZTp0aXRsZS5nZXQoKSBVUkw6dXJsLmdldCgpXTsK
KyAgICAgICAgICAgIHByZXZpZXdWaWV3LmNlbnRlciA9IGxpbmtEcmFnZ2luZ0NlbnRlcjsKKyAg
ICAgICAgICAgIFVJRHJhZ1ByZXZpZXdQYXJhbWV0ZXJzICpwYXJhbWV0ZXJzID0gW1tbVUlEcmFn
UHJldmlld1BhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoVGV4dExpbmVSZWN0czpAWyBbTlNWYWx1
ZSB2YWx1ZVdpdGhDR1JlY3Q6cHJldmlld1ZpZXcuYm91bmRzXSBdXSBhdXRvcmVsZWFzZV07Cisg
ICAgICAgICAgICByZXR1cm4gW1tbVUlEcmFnUHJldmlldyBhbGxvY10gaW5pdFdpdGhWaWV3OnBy
ZXZpZXdWaWV3IHBhcmFtZXRlcnM6cGFyYW1ldGVyc10gYXV0b3JlbGVhc2VdOworICAgICAgICB9
OworCisgICAgICAgIHNvdXJjZS5wb3NzaWJseU5lZWRzRHJhZ1ByZXZpZXdVcGRhdGUgPSBmYWxz
ZTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxF
KERSQUdfU1VQUE9SVCkgJiYgUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCmluZGV4IDYwYTlmNzdi
YjVkY2I3MTNiNTNhZjYxY2Q1YzQ3ZTY2ZmEzNDJiMjMuLjlmNzAzZDhiZjI4OWJmYjU4YjBlZDY0
NWI1NGEzODI4NmY5NDU0ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbXBv
cnQgIldLQ29udGVudFZpZXcuaCIKIAogI2ltcG9ydCAiQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24u
aCIKKyNpbXBvcnQgIkRyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oIgogI2ltcG9ydCAiRWRpdG9y
U3RhdGUuaCIKICNpbXBvcnQgIkdlc3R1cmVUeXBlcy5oIgogI2ltcG9ydCAiSW50ZXJhY3Rpb25J
bmZvcm1hdGlvbkF0UG9zaXRpb24uaCIKQEAgLTM5LDcgKzQwLDYgQEAKICNpbXBvcnQgIldLU3lu
dGhldGljQ2xpY2tUYXBHZXN0dXJlUmVjb2duaXplci5oIgogI2ltcG9ydCA8VUlLaXQvVUlWaWV3
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NvbG9yLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0RyYWdBY3Rp
b25zLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UXVhZC5oPgogI2ltcG9ydCA8d3RmL0Jsb2Nr
UHRyLmg+CiAjaW1wb3J0IDx3dGYvRm9yd2FyZC5oPgpAQCAtMTE4LDMzICsxMTgsNiBAQCB0eXBl
ZGVmIHN0ZDo6cGFpcjxXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25SZXF1ZXN0LCBJbnRl
cmFjdGlvbkluZm9ybWF0aW9uQwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotI2lmIEVOQUJMRShE
UkFHX1NVUFBPUlQpCi0KLXN0cnVjdCBXS0RhdGFJbnRlcmFjdGlvblN0YXRlIHsKLSAgICBSZXRh
aW5QdHI8VUlJbWFnZT4gaW1hZ2U7Ci0gICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpUZXh0SW5k
aWNhdG9yRGF0YT4gaW5kaWNhdG9yRGF0YTsKLSAgICBDR1BvaW50IGFkanVzdGVkT3JpZ2luIHsg
Q0dQb2ludFplcm8gfTsKLSAgICBDR1BvaW50IGxhc3RHbG9iYWxQb3NpdGlvbiB7IENHUG9pbnRa
ZXJvIH07Ci0gICAgQ0dSZWN0IGVsZW1lbnRCb3VuZHMgeyBDR1JlY3RaZXJvIH07Ci0gICAgQk9P
TCBkaWRCZWdpbkRyYWdnaW5nIHsgTk8gfTsKLSAgICBCT09MIGlzUGVyZm9ybWluZ09wZXJhdGlv
biB7IE5PIH07Ci0gICAgQk9PTCBpc0FuaW1hdGluZ0NvbmNsdWRlRWRpdERyYWcgeyBOTyB9Owot
ICAgIEJPT0wgc2hvdWxkUmVzdG9yZUNhbGxvdXRCYXIgeyBOTyB9OwotICAgIFJldGFpblB0cjxp
ZCA8VUlEcmFnU2Vzc2lvbj4+IGRyYWdTZXNzaW9uOwotICAgIFJldGFpblB0cjxpZCA8VUlEcm9w
U2Vzc2lvbj4+IGRyb3BTZXNzaW9uOwotICAgIEJsb2NrUHRyPHZvaWQoKT4gZHJhZ1N0YXJ0Q29t
cGxldGlvbkJsb2NrOwotICAgIEJsb2NrUHRyPHZvaWQoKT4gZHJhZ0NhbmNlbFNldERvd25CbG9j
azsKLSAgICBXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uIHNvdXJjZUFjdGlvbiB7IFdlYkNvcmU6
OkRyYWdTb3VyY2VBY3Rpb25Ob25lIH07Ci0KLSAgICBTdHJpbmcgbGlua1RpdGxlOwotICAgIFdl
YkNvcmU6OlVSTCBsaW5rVVJMOwotCi0gICAgUmV0YWluUHRyPFVJVmlldz4gdmlzaWJsZUNvbnRl
bnRWaWV3U25hcHNob3Q7Ci0gICAgUmV0YWluUHRyPF9VSVRleHREcmFnQ2FyZXRWaWV3PiBjYXJl
dFZpZXc7Ci19OwotCi0jZW5kaWYgLy8gRU5BQkxFKERSQUdfU1VQUE9SVCkKLQogc3RydWN0IFdL
U2VsZWN0aW9uRHJhd2luZ0luZm8gewogICAgIGVudW0gY2xhc3MgU2VsZWN0aW9uVHlwZSB7IE5v
bmUsIFBsdWdpbiwgUmFuZ2UgfTsKICAgICBXS1NlbGVjdGlvbkRyYXdpbmdJbmZvKCk7CkBAIC0y
NTYsOSArMjI5LDEzIEBAIHN0cnVjdCBXS0F1dG9Db3JyZWN0aW9uRGF0YSB7CiAgICAgQk9PTCBf
bmVlZHNEZWZlcnJlZEVuZFNjcm9sbGluZ1NlbGVjdGlvblVwZGF0ZTsKIAogI2lmIEVOQUJMRShE
QVRBX0lOVEVSQUNUSU9OKQotICAgIFdlYktpdDo6V0tEYXRhSW50ZXJhY3Rpb25TdGF0ZSBfZGF0
YUludGVyYWN0aW9uU3RhdGU7Ci0gICAgUmV0YWluUHRyPFVJRHJhZ0ludGVyYWN0aW9uPiBfZGF0
YUludGVyYWN0aW9uOwotICAgIFJldGFpblB0cjxVSURyb3BJbnRlcmFjdGlvbj4gX2RhdGFPcGVy
YXRpb247CisgICAgV2ViS2l0OjpEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUgX2RyYWdEcm9wSW50
ZXJhY3Rpb25TdGF0ZTsKKyAgICBSZXRhaW5QdHI8VUlEcmFnSW50ZXJhY3Rpb24+IF9kcmFnSW50
ZXJhY3Rpb247CisgICAgUmV0YWluUHRyPFVJRHJvcEludGVyYWN0aW9uPiBfZHJvcEludGVyYWN0
aW9uOworICAgIEJPT0wgX3Nob3VsZFJlc3RvcmVDYWxsb3V0QmFyQWZ0ZXJEcm9wOworICAgIEJP
T0wgX2lzQW5pbWF0aW5nQ29uY2x1ZGVFZGl0RHJhZzsKKyAgICBSZXRhaW5QdHI8VUlWaWV3PiBf
dmlzaWJsZUNvbnRlbnRWaWV3U25hcHNob3Q7CisgICAgUmV0YWluUHRyPF9VSVRleHREcmFnQ2Fy
ZXRWaWV3PiBfZWRpdERyb3BDYXJldFZpZXc7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KaW5k
ZXggZjIyM2UxYzUxNjY3ODE3OWEyMzI3ZjRiNWM3MmMyNTEzMzkwZTY3YS4uNWIwMjI2MWMxMjk4
OWNhY2E3Y2MxNDc2ZWYwODJlNzA2MWNkOTQ2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC0zODcwLDcg
KzM4NzAsNyBAQCAtICh2b2lkKV9zdGFydEFzc2lzdGluZ05vZGU6KGNvbnN0IEFzc2lzdGVkTm9k
ZUluZm9ybWF0aW9uJilpbmZvcm1hdGlvbiB1c2VySXNJbgogICAgICAgICAvLyBUaGUgZGVmYXVs
dCBiZWhhdmlvciBpcyB0byBhbGxvdyBub2RlIGFzc2lzdGFuY2UgaWYgdGhlIHVzZXIgaXMgaW50
ZXJhY3Rpbmcgb3IgdGhlIGtleWJvYXJkIGlzIGFscmVhZHkgYWN0aXZlLgogICAgICAgICBzaG91
bGRTaG93S2V5Ym9hcmQgPSB1c2VySXNJbnRlcmFjdGluZyB8fCBfdGV4dFNlbGVjdGlvbkFzc2lz
dGFudDsKICNpZiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikKLSAgICAgICAgc2hvdWxkU2hvd0tl
eWJvYXJkIHw9IF9kYXRhSW50ZXJhY3Rpb25TdGF0ZS5pc1BlcmZvcm1pbmdPcGVyYXRpb247Cisg
ICAgICAgIHNob3VsZFNob3dLZXlib2FyZCB8PSBfZHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmlz
UGVyZm9ybWluZ0Ryb3AoKTsKICNlbmRpZgogICAgIH0KICAgICBpZiAoIXNob3VsZFNob3dLZXli
b2FyZCkKQEAgLTQxNDQsNyArNDE0NCw3IEBAIC0gKEJPT0wpYWN0aW9uU2hlZXRBc3Npc3RhbnQ6
KFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQgKilhc3Npc3RhbnQgc2hvd0N1c3RvbVNoZWV0CiAgICAg
aWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6c2hv
d0N1c3RvbVNoZWV0Rm9yRWxlbWVudDopXSkgewogICAgICAgICBpZiAoW3VpRGVsZWdhdGUgX3dl
YlZpZXc6X3dlYlZpZXcgc2hvd0N1c3RvbVNoZWV0Rm9yRWxlbWVudDplbGVtZW50XSkgewogI2lm
IEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQotICAgICAgICAgICAgQk9PTCBzaG91bGRDYW5jZWxB
bGxUb3VjaGVzID0gIV9kYXRhSW50ZXJhY3Rpb25TdGF0ZS5zb3VyY2VBY3Rpb247CisgICAgICAg
ICAgICBCT09MIHNob3VsZENhbmNlbEFsbFRvdWNoZXMgPSAhX2RyYWdEcm9wSW50ZXJhY3Rpb25T
dGF0ZS5kcmFnU2Vzc2lvbigpOwogI2Vsc2UKICAgICAgICAgICAgIEJPT0wgc2hvdWxkQ2FuY2Vs
QWxsVG91Y2hlcyA9IFlFUzsKICNlbmRpZgpAQCAtNDIxNSw3ICs0MjE1LDcgQEAgc3RhdGljIEJP
T0wgc2hvdWxkRW5hYmxlRHJhZ0ludGVyYWN0aW9uRm9yUG9saWN5KF9XS0RyYWdJbnRlcmFjdGlv
blBvbGljeSBwb2xpY3kKIAogLSAodm9pZClfZGlkQ2hhbmdlRHJhZ0ludGVyYWN0aW9uUG9saWN5
CiB7Ci0gICAgW19kYXRhSW50ZXJhY3Rpb24gc2V0RW5hYmxlZDpzaG91bGRFbmFibGVEcmFnSW50
ZXJhY3Rpb25Gb3JQb2xpY3koX3dlYlZpZXcuX2RyYWdJbnRlcmFjdGlvblBvbGljeSldOworICAg
IFtfZHJhZ0ludGVyYWN0aW9uIHNldEVuYWJsZWQ6c2hvdWxkRW5hYmxlRHJhZ0ludGVyYWN0aW9u
Rm9yUG9saWN5KF93ZWJWaWV3Ll9kcmFnSW50ZXJhY3Rpb25Qb2xpY3kpXTsKIH0KIAogLSAoTlNU
aW1lSW50ZXJ2YWwpZHJhZ0xpZnREZWxheQpAQCAtNDIzNywyNSArNDIzNywyNSBAQCAtIChpZCA8
V0tVSURlbGVnYXRlUHJpdmF0ZT4pd2ViVmlld1VJRGVsZWdhdGUKIAogLSAodm9pZClzZXR1cERh
dGFJbnRlcmFjdGlvbkRlbGVnYXRlcwogewotICAgIF9kYXRhSW50ZXJhY3Rpb24gPSBhZG9wdE5T
KFtbVUlEcmFnSW50ZXJhY3Rpb24gYWxsb2NdIGluaXRXaXRoRGVsZWdhdGU6c2VsZl0pOwotICAg
IF9kYXRhT3BlcmF0aW9uID0gYWRvcHROUyhbW1VJRHJvcEludGVyYWN0aW9uIGFsbG9jXSBpbml0
V2l0aERlbGVnYXRlOnNlbGZdKTsKLSAgICBbX2RhdGFJbnRlcmFjdGlvbiBfc2V0TGlmdERlbGF5
OnNlbGYuZHJhZ0xpZnREZWxheV07Ci0gICAgW19kYXRhSW50ZXJhY3Rpb24gc2V0RW5hYmxlZDpz
aG91bGRFbmFibGVEcmFnSW50ZXJhY3Rpb25Gb3JQb2xpY3koX3dlYlZpZXcuX2RyYWdJbnRlcmFj
dGlvblBvbGljeSldOworICAgIF9kcmFnSW50ZXJhY3Rpb24gPSBhZG9wdE5TKFtbVUlEcmFnSW50
ZXJhY3Rpb24gYWxsb2NdIGluaXRXaXRoRGVsZWdhdGU6c2VsZl0pOworICAgIF9kcm9wSW50ZXJh
Y3Rpb24gPSBhZG9wdE5TKFtbVUlEcm9wSW50ZXJhY3Rpb24gYWxsb2NdIGluaXRXaXRoRGVsZWdh
dGU6c2VsZl0pOworICAgIFtfZHJhZ0ludGVyYWN0aW9uIF9zZXRMaWZ0RGVsYXk6c2VsZi5kcmFn
TGlmdERlbGF5XTsKKyAgICBbX2RyYWdJbnRlcmFjdGlvbiBzZXRFbmFibGVkOnNob3VsZEVuYWJs
ZURyYWdJbnRlcmFjdGlvbkZvclBvbGljeShfd2ViVmlldy5fZHJhZ0ludGVyYWN0aW9uUG9saWN5
KV07CiAKLSAgICBbc2VsZiBhZGRJbnRlcmFjdGlvbjpfZGF0YUludGVyYWN0aW9uLmdldCgpXTsK
LSAgICBbc2VsZiBhZGRJbnRlcmFjdGlvbjpfZGF0YU9wZXJhdGlvbi5nZXQoKV07CisgICAgW3Nl
bGYgYWRkSW50ZXJhY3Rpb246X2RyYWdJbnRlcmFjdGlvbi5nZXQoKV07CisgICAgW3NlbGYgYWRk
SW50ZXJhY3Rpb246X2Ryb3BJbnRlcmFjdGlvbi5nZXQoKV07CiB9CiAKIC0gKHZvaWQpdGVhcmRv
d25EYXRhSW50ZXJhY3Rpb25EZWxlZ2F0ZXMKIHsKLSAgICBpZiAoX2RhdGFJbnRlcmFjdGlvbikK
LSAgICAgICAgW3NlbGYgcmVtb3ZlSW50ZXJhY3Rpb246X2RhdGFJbnRlcmFjdGlvbi5nZXQoKV07
CisgICAgaWYgKF9kcmFnSW50ZXJhY3Rpb24pCisgICAgICAgIFtzZWxmIHJlbW92ZUludGVyYWN0
aW9uOl9kcmFnSW50ZXJhY3Rpb24uZ2V0KCldOwogCi0gICAgaWYgKF9kYXRhT3BlcmF0aW9uKQot
ICAgICAgICBbc2VsZiByZW1vdmVJbnRlcmFjdGlvbjpfZGF0YU9wZXJhdGlvbi5nZXQoKV07Cisg
ICAgaWYgKF9kcm9wSW50ZXJhY3Rpb24pCisgICAgICAgIFtzZWxmIHJlbW92ZUludGVyYWN0aW9u
Ol9kcm9wSW50ZXJhY3Rpb24uZ2V0KCldOwogCi0gICAgX2RhdGFJbnRlcmFjdGlvbiA9IG5pbDsK
LSAgICBfZGF0YU9wZXJhdGlvbiA9IG5pbDsKKyAgICBfZHJhZ0ludGVyYWN0aW9uID0gbmlsOwor
ICAgIF9kcm9wSW50ZXJhY3Rpb24gPSBuaWw7CiAKICAgICBbc2VsZiBjbGVhblVwRHJhZ1NvdXJj
ZVNlc3Npb25TdGF0ZV07CiB9CkBAIC00MjY0LDEyNCArNDI2NCw0MSBAQCAtICh2b2lkKV9zdGFy
dERyYWc6KFJldGFpblB0cjxDR0ltYWdlUmVmPilpbWFnZSBpdGVtOihjb25zdCBEcmFnSXRlbSYp
aXRlbQogewogICAgIEFTU0VSVChpdGVtLnNvdXJjZUFjdGlvbiAhPSBEcmFnU291cmNlQWN0aW9u
Tm9uZSk7CiAKLSAgICBfZGF0YUludGVyYWN0aW9uU3RhdGUuaW1hZ2UgPSBhZG9wdE5TKFtbVUlJ
bWFnZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOmltYWdlLmdldCgpIHNjYWxlOl9wYWdlLT5kZXZp
Y2VTY2FsZUZhY3RvcigpIG9yaWVudGF0aW9uOlVJSW1hZ2VPcmllbnRhdGlvblVwXSk7Ci0gICAg
X2RhdGFJbnRlcmFjdGlvblN0YXRlLmluZGljYXRvckRhdGEgPSBpdGVtLmltYWdlLmluZGljYXRv
ckRhdGEoKTsKLSAgICBfZGF0YUludGVyYWN0aW9uU3RhdGUuc291cmNlQWN0aW9uID0gc3RhdGlj
X2Nhc3Q8RHJhZ1NvdXJjZUFjdGlvbj4oaXRlbS5zb3VyY2VBY3Rpb24pOwotICAgIF9kYXRhSW50
ZXJhY3Rpb25TdGF0ZS5hZGp1c3RlZE9yaWdpbiA9IGl0ZW0uZXZlbnRQb3NpdGlvbkluQ29udGVu
dENvb3JkaW5hdGVzOwotICAgIF9kYXRhSW50ZXJhY3Rpb25TdGF0ZS5lbGVtZW50Qm91bmRzID0g
aXRlbS5lbGVtZW50Qm91bmRzOwotICAgIF9kYXRhSW50ZXJhY3Rpb25TdGF0ZS5saW5rVGl0bGUg
PSBpdGVtLnRpdGxlLmlzRW1wdHkoKSA/IG5pbCA6IChOU1N0cmluZyAqKWl0ZW0udGl0bGU7Ci0g
ICAgX2RhdGFJbnRlcmFjdGlvblN0YXRlLmxpbmtVUkwgPSBpdGVtLnVybC5pc0VtcHR5KCkgPyBu
aWwgOiAoTlNVUkwgKilpdGVtLnVybDsKKyAgICBhdXRvIGRyYWdJbWFnZSA9IGFkb3B0TlMoW1tV
SUltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6aW1hZ2UuZ2V0KCkgc2NhbGU6X3BhZ2UtPmRl
dmljZVNjYWxlRmFjdG9yKCkgb3JpZW50YXRpb246VUlJbWFnZU9yaWVudGF0aW9uVXBdKTsKKyAg
ICBfZHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLnN0YWdlRHJhZ0l0ZW0oaXRlbSwgZHJhZ0ltYWdl
KTsKIH0KIAogLSAodm9pZClfZGlkSGFuZGxlU3RhcnREYXRhSW50ZXJhY3Rpb25SZXF1ZXN0OihC
T09MKXN0YXJ0ZWQKIHsKLSAgICBCbG9ja1B0cjx2b2lkKCk+IHNhdmVkQ29tcGxldGlvbkJsb2Nr
ID0gX2RhdGFJbnRlcmFjdGlvblN0YXRlLmRyYWdTdGFydENvbXBsZXRpb25CbG9jazsKLSAgICBf
ZGF0YUludGVyYWN0aW9uU3RhdGUuZHJhZ1N0YXJ0Q29tcGxldGlvbkJsb2NrID0gbmlsOworICAg
IEJsb2NrUHRyPHZvaWQoKT4gc2F2ZWRDb21wbGV0aW9uQmxvY2sgPSBfZHJhZ0Ryb3BJbnRlcmFj
dGlvblN0YXRlLnRha2VEcmFnU3RhcnRDb21wbGV0aW9uQmxvY2soKTsKICAgICBBU1NFUlQoc2F2
ZWRDb21wbGV0aW9uQmxvY2spOwogCiAgICAgUkVMRUFTRV9MT0coRHJhZ0FuZERyb3AsICJIYW5k
bGluZyBkcmFnIHN0YXJ0IHJlcXVlc3QgKHN0YXJ0ZWQ6ICVkLCBjb21wbGV0aW9uIGJsb2NrOiAl
cCkiLCBzdGFydGVkLCBzYXZlZENvbXBsZXRpb25CbG9jay5nZXQoKSk7CiAgICAgaWYgKHNhdmVk
Q29tcGxldGlvbkJsb2NrKQogICAgICAgICBzYXZlZENvbXBsZXRpb25CbG9jaygpOwogCi0gICAg
aWYgKCFbX2RhdGFJbnRlcmFjdGlvblN0YXRlLmRyYWdTZXNzaW9uIGl0ZW1zXS5jb3VudCkgewot
ICAgICAgICBDR1BvaW50IGFkanVzdGVkT3JpZ2luID0gX2RhdGFJbnRlcmFjdGlvblN0YXRlLmFk
anVzdGVkT3JpZ2luOworICAgIGlmICghX2RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5kcmFnU2Vz
c2lvbigpLml0ZW1zLmNvdW50KSB7CisgICAgICAgIGF1dG8gcG9zaXRpb25Gb3JEcmFnRW5kID0g
cm91bmRlZEludFBvaW50KF9kcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuYWRqdXN0ZWRQb3NpdGlv
bkZvckRyYWdFbmQoKSk7CiAgICAgICAgIFtzZWxmIGNsZWFuVXBEcmFnU291cmNlU2Vzc2lvblN0
YXRlXTsKICAgICAgICAgaWYgKHN0YXJ0ZWQpIHsKICAgICAgICAgICAgIC8vIEEgY2xpZW50IG9m
IHRoZSBPYmplY3RpdmUgQyBTUEkgb3IgVUlLaXQgbWlnaHQgaGF2ZSBwcmV2ZW50ZWQgdGhlIGRy
YWcgZnJvbSBiZWdpbm5pbmcgZW50aXJlbHkgaW4gdGhlIFVJIHByb2Nlc3MsIGluIHdoaWNoIGNh
c2UKICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gYmFsYW5jZSB0aGUgYGRyYWdzdGFydGAgZXZl
bnQgd2l0aCBhIGBkcmFnZW5kYC4KLSAgICAgICAgICAgIF9wYWdlLT5kcmFnRW5kZWQocm91bmRl
ZEludFBvaW50KGFkanVzdGVkT3JpZ2luKSwgcm91bmRlZEludFBvaW50KFtzZWxmIGNvbnZlcnRQ
b2ludDphZGp1c3RlZE9yaWdpbiB0b1ZpZXc6c2VsZi53aW5kb3ddKSwgRHJhZ09wZXJhdGlvbk5v
bmUpOworICAgICAgICAgICAgX3BhZ2UtPmRyYWdFbmRlZChwb3NpdGlvbkZvckRyYWdFbmQsIHBv
c2l0aW9uRm9yRHJhZ0VuZCwgRHJhZ09wZXJhdGlvbk5vbmUpOwogICAgICAgICB9CiAgICAgfQog
fQogCi1zdGF0aWMgUmV0YWluUHRyPFVJSW1hZ2U+IHVpSW1hZ2VGb3JJbWFnZShSZWZQdHI8SW1h
Z2U+IGltYWdlKQotewotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgYXV0byBjZ0ltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlKCk7Ci0gICAgaWYgKCFjZ0lt
YWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBhZG9wdE5TKFtbVUlJ
bWFnZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOmNnSW1hZ2UuZ2V0KCldKTsKLX0KLQotc3RhdGlj
IEJPT0wgc2hvdWxkVXNlVGV4dEluZGljYXRvclRvQ3JlYXRlUHJldmlld0ZvckRyYWdBY3Rpb24o
RHJhZ1NvdXJjZUFjdGlvbiBhY3Rpb24pCi17Ci0gICAgaWYgKGFjdGlvbiAmIChEcmFnU291cmNl
QWN0aW9uTGluayB8IERyYWdTb3VyY2VBY3Rpb25TZWxlY3Rpb24pKQotICAgICAgICByZXR1cm4g
WUVTOwotCi0jaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKLSAgICBpZiAoYWN0aW9uICYg
RHJhZ1NvdXJjZUFjdGlvbkF0dGFjaG1lbnQpCi0gICAgICAgIHJldHVybiBZRVM7Ci0jZW5kaWYK
LQotICAgIHJldHVybiBOTzsKLX0KLQotLSAoUmV0YWluUHRyPFVJVGFyZ2V0ZWREcmFnUHJldmll
dz4pZHJhZ1ByZXZpZXdGb3JJbWFnZTooVUlJbWFnZSAqKWltYWdlIGZyYW1lSW5Sb290Vmlld0Nv
b3JkaW5hdGVzOihjb25zdCBGbG9hdFJlY3QmKWZyYW1lIGNsaXBwaW5nUmVjdHNJbkZyYW1lQ29v
cmRpbmF0ZXM6KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiljbGlwcGluZ1JlY3RzIGJhY2tncm91
bmRDb2xvcjooVUlDb2xvciAqKWJhY2tncm91bmRDb2xvcgotewotICAgIGlmIChmcmFtZS5pc0Vt
cHR5KCkgfHwgIWltYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFVJVmlldyAq
Y29udGFpbmVyID0gW3NlbGYgdW5zY2FsZWRWaWV3XTsKLSAgICBGbG9hdFJlY3QgZnJhbWVJbkNv
bnRhaW5lckNvb3JkaW5hdGVzOwotICAgIE5TTXV0YWJsZUFycmF5ICpjbGlwcGluZ1JlY3RWYWx1
ZXNJbkZyYW1lQ29vcmRpbmF0ZXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6
Y2xpcHBpbmdSZWN0cy5zaXplKCldOwotCi0gICAgZnJhbWVJbkNvbnRhaW5lckNvb3JkaW5hdGVz
ID0gW3NlbGYgY29udmVydFJlY3Q6ZnJhbWUgdG9WaWV3OmNvbnRhaW5lcl07Ci0gICAgaWYgKGZy
YW1lSW5Db250YWluZXJDb29yZGluYXRlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgZmxvYXQgd2lkdGhTY2FsaW5nUmF0aW8gPSBmcmFtZUluQ29udGFpbmVyQ29v
cmRpbmF0ZXMud2lkdGgoKSAvIGZyYW1lLndpZHRoKCk7Ci0gICAgZmxvYXQgaGVpZ2h0U2NhbGlu
Z1JhdGlvID0gZnJhbWVJbkNvbnRhaW5lckNvb3JkaW5hdGVzLmhlaWdodCgpIC8gZnJhbWUuaGVp
Z2h0KCk7Ci0gICAgZm9yIChhdXRvIHJlY3QgOiBjbGlwcGluZ1JlY3RzKSB7Ci0gICAgICAgIHJl
Y3Quc2NhbGUod2lkdGhTY2FsaW5nUmF0aW8sIGhlaWdodFNjYWxpbmdSYXRpbyk7Ci0gICAgICAg
IFtjbGlwcGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXMgYWRkT2JqZWN0OltOU1ZhbHVl
IHZhbHVlV2l0aENHUmVjdDpyZWN0XV07Ci0gICAgfQotCi0gICAgYXV0byBpbWFnZVZpZXcgPSBh
ZG9wdE5TKFtbVUlJbWFnZVZpZXcgYWxsb2NdIGluaXRXaXRoSW1hZ2U6aW1hZ2VdKTsKLSAgICBb
aW1hZ2VWaWV3IHNldEZyYW1lOmZyYW1lSW5Db250YWluZXJDb29yZGluYXRlc107Ci0KLSAgICBS
ZXRhaW5QdHI8VUlEcmFnUHJldmlld1BhcmFtZXRlcnM+IHBhcmFtZXRlcnM7Ci0gICAgaWYgKGNs
aXBwaW5nUmVjdFZhbHVlc0luRnJhbWVDb29yZGluYXRlcy5jb3VudCkKLSAgICAgICAgcGFyYW1l
dGVycyA9IGFkb3B0TlMoW1tVSURyYWdQcmV2aWV3UGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhU
ZXh0TGluZVJlY3RzOmNsaXBwaW5nUmVjdFZhbHVlc0luRnJhbWVDb29yZGluYXRlc10pOwotICAg
IGVsc2UKLSAgICAgICAgcGFyYW1ldGVycyA9IGFkb3B0TlMoW1tVSURyYWdQcmV2aWV3UGFyYW1l
dGVycyBhbGxvY10gaW5pdF0pOwotCi0gICAgaWYgKGJhY2tncm91bmRDb2xvcikKLSAgICAgICAg
W3BhcmFtZXRlcnMgc2V0QmFja2dyb3VuZENvbG9yOmJhY2tncm91bmRDb2xvcl07Ci0KLSAgICBD
R1BvaW50IGNlbnRlckluQ29udGFpbmVyQ29vcmRpbmF0ZXMgPSB7IENHUmVjdEdldE1pZFgoZnJh
bWVJbkNvbnRhaW5lckNvb3JkaW5hdGVzKSwgQ0dSZWN0R2V0TWlkWShmcmFtZUluQ29udGFpbmVy
Q29vcmRpbmF0ZXMpIH07Ci0gICAgYXV0byB0YXJnZXQgPSBhZG9wdE5TKFtbVUlEcmFnUHJldmll
d1RhcmdldCBhbGxvY10gaW5pdFdpdGhDb250YWluZXI6Y29udGFpbmVyIGNlbnRlcjpjZW50ZXJJ
bkNvbnRhaW5lckNvb3JkaW5hdGVzXSk7Ci0gICAgYXV0byBkcmFnUHJldmlldyA9IGFkb3B0TlMo
W1tVSVRhcmdldGVkRHJhZ1ByZXZpZXcgYWxsb2NdIGluaXRXaXRoVmlldzppbWFnZVZpZXcuZ2V0
KCkgcGFyYW1ldGVyczpwYXJhbWV0ZXJzLmdldCgpIHRhcmdldDp0YXJnZXQuZ2V0KCldKTsKLSAg
ICByZXR1cm4gZHJhZ1ByZXZpZXc7Ci19Ci0KLS0gKFJldGFpblB0cjxVSVRhcmdldGVkRHJhZ1By
ZXZpZXc+KWRyYWdQcmV2aWV3Rm9yQ3VycmVudERhdGFJbnRlcmFjdGlvblN0YXRlCi17Ci0gICAg
YXV0byBhY3Rpb24gPSBfZGF0YUludGVyYWN0aW9uU3RhdGUuc291cmNlQWN0aW9uOwotICAgIGlm
IChhY3Rpb24gJiBEcmFnU291cmNlQWN0aW9uSW1hZ2UgJiYgX2RhdGFJbnRlcmFjdGlvblN0YXRl
LmltYWdlKSB7Ci0gICAgICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGVtcHR5Q2xpcHBpbmdSZWN0czsK
LSAgICAgICAgcmV0dXJuIFtzZWxmIGRyYWdQcmV2aWV3Rm9ySW1hZ2U6X2RhdGFJbnRlcmFjdGlv
blN0YXRlLmltYWdlLmdldCgpIGZyYW1lSW5Sb290Vmlld0Nvb3JkaW5hdGVzOl9kYXRhSW50ZXJh
Y3Rpb25TdGF0ZS5lbGVtZW50Qm91bmRzIGNsaXBwaW5nUmVjdHNJbkZyYW1lQ29vcmRpbmF0ZXM6
ZW1wdHlDbGlwcGluZ1JlY3RzIGJhY2tncm91bmRDb2xvcjpuaWxdOwotICAgIH0KLQotICAgIGlm
IChzaG91bGRVc2VUZXh0SW5kaWNhdG9yVG9DcmVhdGVQcmV2aWV3Rm9yRHJhZ0FjdGlvbihhY3Rp
b24pICYmIF9kYXRhSW50ZXJhY3Rpb25TdGF0ZS5pbmRpY2F0b3JEYXRhKSB7Ci0gICAgICAgIGF1
dG8gaW5kaWNhdG9yID0gX2RhdGFJbnRlcmFjdGlvblN0YXRlLmluZGljYXRvckRhdGEudmFsdWUo
KTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIGRyYWdQcmV2aWV3Rm9ySW1hZ2U6dWlJbWFnZUZvcklt
YWdlKGluZGljYXRvci5jb250ZW50SW1hZ2UpLmdldCgpIGZyYW1lSW5Sb290Vmlld0Nvb3JkaW5h
dGVzOmluZGljYXRvci50ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzIGNsaXBw
aW5nUmVjdHNJbkZyYW1lQ29vcmRpbmF0ZXM6aW5kaWNhdG9yLnRleHRSZWN0c0luQm91bmRpbmdS
ZWN0Q29vcmRpbmF0ZXMgYmFja2dyb3VuZENvbG9yOltVSUNvbG9yIGNvbG9yV2l0aENHQ29sb3I6
Y2FjaGVkQ0dDb2xvcihpbmRpY2F0b3IuZXN0aW1hdGVkQmFja2dyb3VuZENvbG9yKV1dOwotICAg
IH0KLQotICAgIHJldHVybiBuaWw7Ci19Ci0KIC0gKHZvaWQpY29tcHV0ZUNsaWVudEFuZEdsb2Jh
bFBvaW50c0ZvckRyb3BTZXNzaW9uOihpZCA8VUlEcm9wU2Vzc2lvbj4pc2Vzc2lvbiBvdXRDbGll
bnRQb2ludDooQ0dQb2ludCAqKW91dENsaWVudFBvaW50IG91dEdsb2JhbFBvaW50OihDR1BvaW50
ICopb3V0R2xvYmFsUG9pbnQKIHsKKyAgICAvLyBGSVhNRTogVGhpcyBtYWtlcyB0aGUgYmVoYXZp
b3Igb2YgZHJhZyBldmVudHMgb24gaU9TIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBzeW50aGV0aWMg
bW91c2UgZXZlbnRzIG9uIGlPUyAoc2VlIFdlYlBhZ2U6OmNvbXBsZXRlU3ludGhldGljQ2xpY2sp
LgorICAgIC8vIEhvd2V2ZXIsIHdlIHNob3VsZCBleHBlcmltZW50IHdpdGggbWFraW5nIHRoZSBj
bGllbnQgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHdpbmRvdyBhbmQgdGhlIGdsb2JhbCBwb3Np
dGlvbiBpbiBkb2N1bWVudCBjb29yZGluYXRlcy4gU2VlCisgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Mzg1NSBmb3IgbW9yZSBkZXRhaWxzLgorICAgIGF1
dG8gbG9jYXRpb25JbkNvbnRlbnRWaWV3ID0gW3Nlc3Npb24gbG9jYXRpb25JblZpZXc6c2VsZl07
CiAgICAgaWYgKG91dENsaWVudFBvaW50KQotICAgICAgICAqb3V0Q2xpZW50UG9pbnQgPSBbc2Vz
c2lvbiBsb2NhdGlvbkluVmlldzpzZWxmXTsKKyAgICAgICAgKm91dENsaWVudFBvaW50ID0gbG9j
YXRpb25JbkNvbnRlbnRWaWV3OwogCi0gICAgaWYgKG91dEdsb2JhbFBvaW50KSB7Ci0gICAgICAg
IFVJV2luZG93ICp3aW5kb3cgPSBzZWxmLndpbmRvdzsKLSAgICAgICAgKm91dEdsb2JhbFBvaW50
ID0gd2luZG93ID8gW3Nlc3Npb24gbG9jYXRpb25JblZpZXc6d2luZG93XSA6IF9kYXRhSW50ZXJh
Y3Rpb25TdGF0ZS5sYXN0R2xvYmFsUG9zaXRpb247Ci0gICAgfQorICAgIGlmIChvdXRHbG9iYWxQ
b2ludCkKKyAgICAgICAgKm91dEdsb2JhbFBvaW50ID0gbG9jYXRpb25JbkNvbnRlbnRWaWV3Owog
fQogCiBzdGF0aWMgVUlEcm9wT3BlcmF0aW9uIGRyb3BPcGVyYXRpb25Gb3JXZWJDb3JlRHJhZ09w
ZXJhdGlvbihEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbikKQEAgLTQ0MTQsMjcgKzQzMzEsMjMgQEAg
LSAodm9pZCljbGVhblVwRHJhZ1NvdXJjZVNlc3Npb25TdGF0ZQogICAgICAgICBbW1dlYkl0ZW1Q
cm92aWRlclBhc3RlYm9hcmQgc2hhcmVkSW5zdGFuY2VdIHNldEl0ZW1Qcm92aWRlcnM6bmlsXTsK
ICAgICB9CiAKLSAgICBpZiAoYXV0byBjb21wbGV0aW9uQmxvY2sgPSBfZGF0YUludGVyYWN0aW9u
U3RhdGUuZHJhZ0NhbmNlbFNldERvd25CbG9jaykgewotICAgICAgICBfZGF0YUludGVyYWN0aW9u
U3RhdGUuZHJhZ0NhbmNlbFNldERvd25CbG9jayA9IG5pbDsKLSAgICAgICAgY29tcGxldGlvbkJs
b2NrKCk7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gY29tcGxldGlvbkJsb2NrID0gX2RhdGFJbnRl
cmFjdGlvblN0YXRlLmRyYWdTdGFydENvbXBsZXRpb25CbG9jaykgewotICAgICAgICAvLyBJZiB0
aGUgcHJldmlvdXMgZHJhZyBzZXNzaW9uIGlzIHN0aWxsIGluaXRpYWxpemluZywgd2UgbmVlZCB0
byBlbnN1cmUgdGhhdCBpdHMgY29tcGxldGlvbiBibG9jayBpcyBjYWxsZWQgdG8gcHJldmVudCBV
SUtpdCBmcm9tIGdldHRpbmcgb3V0IG9mIHN0YXRlLgotICAgICAgICBfZGF0YUludGVyYWN0aW9u
U3RhdGUuZHJhZ1N0YXJ0Q29tcGxldGlvbkJsb2NrID0gbmlsOwotICAgICAgICBjb21wbGV0aW9u
QmxvY2soKTsKLSAgICB9Ci0KKyAgICBbW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgc2hhcmVk
SW5zdGFuY2VdIHN0YWdlUmVnaXN0cmF0aW9uTGlzdDpuaWxdOwogICAgIFtzZWxmIF9yZXN0b3Jl
Q2FsbG91dEJhcklmTmVlZGVkXTsKLSAgICBbX2RhdGFJbnRlcmFjdGlvblN0YXRlLmNhcmV0Vmll
dyByZW1vdmVdOwotICAgIFtfZGF0YUludGVyYWN0aW9uU3RhdGUudmlzaWJsZUNvbnRlbnRWaWV3
U25hcHNob3QgcmVtb3ZlRnJvbVN1cGVydmlld107CiAKLSAgICBfZGF0YUludGVyYWN0aW9uU3Rh
dGUgPSB7IH07CisgICAgW192aXNpYmxlQ29udGVudFZpZXdTbmFwc2hvdCByZW1vdmVGcm9tU3Vw
ZXJ2aWV3XTsKKyAgICBfdmlzaWJsZUNvbnRlbnRWaWV3U25hcHNob3QgPSBuaWw7CisgICAgW19l
ZGl0RHJvcENhcmV0VmlldyByZW1vdmVdOworICAgIF9lZGl0RHJvcENhcmV0VmlldyA9IG5pbDsK
KyAgICBfaXNBbmltYXRpbmdDb25jbHVkZUVkaXREcmFnID0gTk87CisgICAgX3Nob3VsZFJlc3Rv
cmVDYWxsb3V0QmFyQWZ0ZXJEcm9wID0gTk87CisKKyAgICBfZHJhZ0Ryb3BJbnRlcmFjdGlvblN0
YXRlLmRyYWdBbmREcm9wU2Vzc2lvbnNEaWRFbmQoKTsKKyAgICBfZHJhZ0Ryb3BJbnRlcmFjdGlv
blN0YXRlID0geyB9OwogfQogCiBzdGF0aWMgTlNBcnJheTxVSUl0ZW1Qcm92aWRlciAqPiAqZXh0
cmFjdEl0ZW1Qcm92aWRlcnNGcm9tRHJhZ0l0ZW1zKE5TQXJyYXk8VUlEcmFnSXRlbSAqPiAqZHJh
Z0l0ZW1zKQogewotICAgIF9fYmxvY2sgTlNNdXRhYmxlQXJyYXk8VUlJdGVtUHJvdmlkZXIgKj4g
KnByb3ZpZGVycyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisgICAgTlNNdXRhYmxlQXJyYXk8
VUlJdGVtUHJvdmlkZXIgKj4gKnByb3ZpZGVycyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CiAg
ICAgZm9yIChVSURyYWdJdGVtICppdGVtIGluIGRyYWdJdGVtcykgewogICAgICAgICBSZXRhaW5Q
dHI8VUlJdGVtUHJvdmlkZXI+IHByb3ZpZGVyID0gaXRlbS5pdGVtUHJvdmlkZXI7CiAgICAgICAg
IGlmIChwcm92aWRlcikKQEAgLTQ0NjYsOSArNDM3OSw5IEBAIC0gKHZvaWQpX2RpZENvbmNsdWRl
RWRpdERhdGFJbnRlcmFjdGlvbjooc3RkOjpvcHRpb25hbDxUZXh0SW5kaWNhdG9yRGF0YT4pZGF0
YQogICAgIFt1bnNlbGVjdGVkQ29udGVudFNuYXBzaG90IHNldEZyYW1lOmRhdGEtPmNvbnRlbnRJ
bWFnZVdpdGhvdXRTZWxlY3Rpb25SZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzXTsKIAogICAgIFJl
dGFpblB0cjxXS0NvbnRlbnRWaWV3PiBwcm90ZWN0ZWRTZWxmID0gc2VsZjsKLSAgICBSZXRhaW5Q
dHI8VUlWaWV3PiB2aXNpYmxlQ29udGVudFZpZXdTbmFwc2hvdCA9IGFkb3B0TlMoX2RhdGFJbnRl
cmFjdGlvblN0YXRlLnZpc2libGVDb250ZW50Vmlld1NuYXBzaG90LmxlYWtSZWYoKSk7CisgICAg
UmV0YWluUHRyPFVJVmlldz4gdmlzaWJsZUNvbnRlbnRWaWV3U25hcHNob3QgPSBhZG9wdE5TKF92
aXNpYmxlQ29udGVudFZpZXdTbmFwc2hvdC5sZWFrUmVmKCkpOwogCi0gICAgX2RhdGFJbnRlcmFj
dGlvblN0YXRlLmlzQW5pbWF0aW5nQ29uY2x1ZGVFZGl0RHJhZyA9IFlFUzsKKyAgICBfaXNBbmlt
YXRpbmdDb25jbHVkZUVkaXREcmFnID0gWUVTOwogICAgIFtzZWxmIGluc2VydFN1YnZpZXc6dW5z
ZWxlY3RlZENvbnRlbnRTbmFwc2hvdC5nZXQoKSBiZWxvd1N1YnZpZXc6dmlzaWJsZUNvbnRlbnRW
aWV3U25hcHNob3QuZ2V0KCldOwogICAgIFtVSVZpZXcgYW5pbWF0ZVdpdGhEdXJhdGlvbjowLjI1
IGFuaW1hdGlvbnM6XigpIHsKICAgICAgICAgW3Zpc2libGVDb250ZW50Vmlld1NuYXBzaG90IHNl
dEFscGhhOjBdOwpAQCAtNDQ4NywzNyArNDQwMCwyMCBAQCAtICh2b2lkKV9kaWRQZXJmb3JtRGF0
YUludGVyYWN0aW9uQ29udHJvbGxlck9wZXJhdGlvbjooQk9PTCloYW5kbGVkCiB7CiAgICAgUkVM
RUFTRV9MT0coRHJhZ0FuZERyb3AsICJGaW5pc2hlZCBwZXJmb3JtaW5nIGRyYWcgY29udHJvbGxl
ciBvcGVyYXRpb24gKGhhbmRsZWQ6ICVkKSIsIGhhbmRsZWQpOwogICAgIFtbV2ViSXRlbVByb3Zp
ZGVyUGFzdGVib2FyZCBzaGFyZWRJbnN0YW5jZV0gZGVjcmVtZW50UGVuZGluZ09wZXJhdGlvbkNv
dW50XTsKLSAgICBSZXRhaW5QdHI8aWQgPFVJRHJvcFNlc3Npb24+PiBkcm9wU2Vzc2lvbiA9IF9k
YXRhSW50ZXJhY3Rpb25TdGF0ZS5kcm9wU2Vzc2lvbjsKKyAgICBpZCA8VUlEcm9wU2Vzc2lvbj4g
ZHJvcFNlc3Npb24gPSBfZHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmRyb3BTZXNzaW9uKCk7CiAg
ICAgaWYgKFtzZWxmLndlYlZpZXdVSURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IoX3dlYlZpZXc6ZGF0YUludGVyYWN0aW9uT3BlcmF0aW9uV2FzSGFuZGxlZDpmb3JTZXNzaW9u
Oml0ZW1Qcm92aWRlcnM6KV0pCi0gICAgICAgIFtzZWxmLndlYlZpZXdVSURlbGVnYXRlIF93ZWJW
aWV3Ol93ZWJWaWV3IGRhdGFJbnRlcmFjdGlvbk9wZXJhdGlvbldhc0hhbmRsZWQ6aGFuZGxlZCBm
b3JTZXNzaW9uOmRyb3BTZXNzaW9uLmdldCgpIGl0ZW1Qcm92aWRlcnM6W1dlYkl0ZW1Qcm92aWRl
clBhc3RlYm9hcmQgc2hhcmVkSW5zdGFuY2VdLml0ZW1Qcm92aWRlcnNdOworICAgICAgICBbc2Vs
Zi53ZWJWaWV3VUlEZWxlZ2F0ZSBfd2ViVmlldzpfd2ViVmlldyBkYXRhSW50ZXJhY3Rpb25PcGVy
YXRpb25XYXNIYW5kbGVkOmhhbmRsZWQgZm9yU2Vzc2lvbjpkcm9wU2Vzc2lvbiBpdGVtUHJvdmlk
ZXJzOltXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHNoYXJlZEluc3RhbmNlXS5pdGVtUHJvdmlk
ZXJzXTsKIAotICAgIGlmICghX2RhdGFJbnRlcmFjdGlvblN0YXRlLmlzQW5pbWF0aW5nQ29uY2x1
ZGVFZGl0RHJhZykKKyAgICBpZiAoIV9pc0FuaW1hdGluZ0NvbmNsdWRlRWRpdERyYWcpCiAgICAg
ICAgIHNlbGYuc3VwcHJlc3NBc3Npc3RhbnRTZWxlY3Rpb25WaWV3ID0gTk87CiAKICAgICBDR1Bv
aW50IGdsb2JhbDsKICAgICBDR1BvaW50IGNsaWVudDsKLSAgICBbc2VsZiBjb21wdXRlQ2xpZW50
QW5kR2xvYmFsUG9pbnRzRm9yRHJvcFNlc3Npb246ZHJvcFNlc3Npb24uZ2V0KCkgb3V0Q2xpZW50
UG9pbnQ6JmNsaWVudCBvdXRHbG9iYWxQb2ludDomZ2xvYmFsXTsKKyAgICBbc2VsZiBjb21wdXRl
Q2xpZW50QW5kR2xvYmFsUG9pbnRzRm9yRHJvcFNlc3Npb246ZHJvcFNlc3Npb24gb3V0Q2xpZW50
UG9pbnQ6JmNsaWVudCBvdXRHbG9iYWxQb2ludDomZ2xvYmFsXTsKICAgICBbc2VsZiBjbGVhblVw
RHJhZ1NvdXJjZVNlc3Npb25TdGF0ZV07CiAgICAgX3BhZ2UtPmRyYWdFbmRlZChyb3VuZGVkSW50
UG9pbnQoY2xpZW50KSwgcm91bmRlZEludFBvaW50KGdsb2JhbCksIF9wYWdlLT5jdXJyZW50RHJh
Z09wZXJhdGlvbigpKTsKIH0KIAotLSAodm9pZClfdHJhbnNpdGlvbkRyYWdQcmV2aWV3VG9JbWFn
ZUlmTmVjZXNzYXJ5OihpZCA8VUlEcmFnU2Vzc2lvbj4pc2Vzc2lvbgotewotICAgIGlmIChfZGF0
YUludGVyYWN0aW9uU3RhdGUuc291cmNlQWN0aW9uICYgRHJhZ1NvdXJjZUFjdGlvbkltYWdlIHx8
ICEoX2RhdGFJbnRlcmFjdGlvblN0YXRlLnNvdXJjZUFjdGlvbiAmIERyYWdTb3VyY2VBY3Rpb25M
aW5rKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBsaW5rRHJhZ2dpbmdDZW50ZXIgPSBf
ZGF0YUludGVyYWN0aW9uU3RhdGUuYWRqdXN0ZWRPcmlnaW47Ci0gICAgUmV0YWluUHRyPE5TU3Ry
aW5nPiB0aXRsZSA9IChOU1N0cmluZyAqKV9kYXRhSW50ZXJhY3Rpb25TdGF0ZS5saW5rVGl0bGU7
Ci0gICAgUmV0YWluUHRyPE5TVVJMPiB1cmwgPSAoTlNVUkwgKilfZGF0YUludGVyYWN0aW9uU3Rh
dGUubGlua1VSTDsKLSAgICBzZXNzaW9uLml0ZW1zLmZpcnN0T2JqZWN0LnByZXZpZXdQcm92aWRl
ciA9IFt0aXRsZSwgdXJsLCBsaW5rRHJhZ2dpbmdDZW50ZXJdICgpIC0+IFVJRHJhZ1ByZXZpZXcg
KiB7Ci0gICAgICAgIFVJVVJMRHJhZ1ByZXZpZXdWaWV3ICpwcmV2aWV3VmlldyA9IFtVSVVSTERy
YWdQcmV2aWV3VmlldyB2aWV3V2l0aFRpdGxlOnRpdGxlLmdldCgpIFVSTDp1cmwuZ2V0KCldOwot
ICAgICAgICBwcmV2aWV3Vmlldy5jZW50ZXIgPSBsaW5rRHJhZ2dpbmdDZW50ZXI7Ci0KLSAgICAg
ICAgVUlEcmFnUHJldmlld1BhcmFtZXRlcnMgKnBhcmFtZXRlcnMgPSBbW1tVSURyYWdQcmV2aWV3
UGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhUZXh0TGluZVJlY3RzOkBbIFtOU1ZhbHVlIHZhbHVl
V2l0aENHUmVjdDpwcmV2aWV3Vmlldy5ib3VuZHNdIF1dIGF1dG9yZWxlYXNlXTsKLSAgICAgICAg
cmV0dXJuIFtbW1VJRHJhZ1ByZXZpZXcgYWxsb2NdIGluaXRXaXRoVmlldzpwcmV2aWV3VmlldyBw
YXJhbWV0ZXJzOnBhcmFtZXRlcnNdIGF1dG9yZWxlYXNlXTsKLSAgICB9OwotfQotCiAtICh2b2lk
KV9kaWRDaGFuZ2VEYXRhSW50ZXJhY3Rpb25DYXJldFJlY3Q6KENHUmVjdClwcmV2aW91c1JlY3Qg
Y3VycmVudFJlY3Q6KENHUmVjdClyZWN0CiB7CiAgICAgQk9PTCBwcmV2aW91c1JlY3RJc0VtcHR5
ID0gQ0dSZWN0SXNFbXB0eShwcmV2aW91c1JlY3QpOwpAQCAtNDUyNiwxOCArNDQyMiwxOCBAQCAt
ICh2b2lkKV9kaWRDaGFuZ2VEYXRhSW50ZXJhY3Rpb25DYXJldFJlY3Q6KENHUmVjdClwcmV2aW91
c1JlY3QgY3VycmVudFJlY3Q6KENHUgogICAgICAgICByZXR1cm47CiAKICAgICBpZiAocHJldmlv
dXNSZWN0SXNFbXB0eSkgewotICAgICAgICBfZGF0YUludGVyYWN0aW9uU3RhdGUuY2FyZXRWaWV3
ID0gYWRvcHROUyhbW19VSVRleHREcmFnQ2FyZXRWaWV3IGFsbG9jXSBpbml0V2l0aFRleHRJbnB1
dFZpZXc6c2VsZl0pOwotICAgICAgICBbX2RhdGFJbnRlcmFjdGlvblN0YXRlLmNhcmV0VmlldyBp
bnNlcnRBdFBvc2l0aW9uOltXS1RleHRQb3NpdGlvbiB0ZXh0UG9zaXRpb25XaXRoUmVjdDpyZWN0
XV07CisgICAgICAgIF9lZGl0RHJvcENhcmV0VmlldyA9IGFkb3B0TlMoW1tfVUlUZXh0RHJhZ0Nh
cmV0VmlldyBhbGxvY10gaW5pdFdpdGhUZXh0SW5wdXRWaWV3OnNlbGZdKTsKKyAgICAgICAgW19l
ZGl0RHJvcENhcmV0VmlldyBpbnNlcnRBdFBvc2l0aW9uOltXS1RleHRQb3NpdGlvbiB0ZXh0UG9z
aXRpb25XaXRoUmVjdDpyZWN0XV07CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAo
Y3VycmVudFJlY3RJc0VtcHR5KSB7Ci0gICAgICAgIFtfZGF0YUludGVyYWN0aW9uU3RhdGUuY2Fy
ZXRWaWV3IHJlbW92ZV07Ci0gICAgICAgIF9kYXRhSW50ZXJhY3Rpb25TdGF0ZS5jYXJldFZpZXcg
PSBuaWw7CisgICAgICAgIFtfZWRpdERyb3BDYXJldFZpZXcgcmVtb3ZlXTsKKyAgICAgICAgX2Vk
aXREcm9wQ2FyZXRWaWV3ID0gbmlsOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgW19k
YXRhSW50ZXJhY3Rpb25TdGF0ZS5jYXJldFZpZXcgdXBkYXRlVG9Qb3NpdGlvbjpbV0tUZXh0UG9z
aXRpb24gdGV4dFBvc2l0aW9uV2l0aFJlY3Q6cmVjdF1dOworICAgIFtfZWRpdERyb3BDYXJldFZp
ZXcgdXBkYXRlVG9Qb3NpdGlvbjpbV0tUZXh0UG9zaXRpb24gdGV4dFBvc2l0aW9uV2l0aFJlY3Q6
cmVjdF1dOwogfQogCiAtIChXS0RyYWdEZXN0aW5hdGlvbkFjdGlvbilfZHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uRm9yRHJvcFNlc3Npb246KGlkIDxVSURyb3BTZXNzaW9uPilzZXNzaW9uCkBAIC00NTUx
LDIwICs0NDQ3LDIwIEBAIC0gKFdLRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKV9kcmFnRGVzdGluYXRp
b25BY3Rpb25Gb3JEcm9wU2Vzc2lvbjooaWQgPFVJRHJvcFNlc3NpCiAKIC0gKGlkIDxVSURyYWdE
cm9wU2Vzc2lvbj4pY3VycmVudERyYWdPckRyb3BTZXNzaW9uCiB7Ci0gICAgaWYgKF9kYXRhSW50
ZXJhY3Rpb25TdGF0ZS5kcm9wU2Vzc2lvbikKLSAgICAgICAgcmV0dXJuIF9kYXRhSW50ZXJhY3Rp
b25TdGF0ZS5kcm9wU2Vzc2lvbi5nZXQoKTsKLSAgICByZXR1cm4gX2RhdGFJbnRlcmFjdGlvblN0
YXRlLmRyYWdTZXNzaW9uLmdldCgpOworICAgIGlmIChfZHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRl
LmRyb3BTZXNzaW9uKCkpCisgICAgICAgIHJldHVybiBfZHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRl
LmRyb3BTZXNzaW9uKCk7CisgICAgcmV0dXJuIF9kcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuZHJh
Z1Nlc3Npb24oKTsKIH0KIAogLSAodm9pZClfcmVzdG9yZUNhbGxvdXRCYXJJZk5lZWRlZAogewot
ICAgIGlmICghX2RhdGFJbnRlcmFjdGlvblN0YXRlLnNob3VsZFJlc3RvcmVDYWxsb3V0QmFyKQor
ICAgIGlmICghX3Nob3VsZFJlc3RvcmVDYWxsb3V0QmFyQWZ0ZXJEcm9wKQogICAgICAgICByZXR1
cm47CiAKICAgICAvLyBGSVhNRTogVGhpcyBTUEkgc2hvdWxkIGJlIHJlbmFtZWQgaW4gVUlLaXQg
dG8gcmVmbGVjdCBhIG1vcmUgZ2VuZXJhbCBwdXJwb3NlIG9mIHJldmVhbGluZyBoaWRkZW4gaW50
ZXJhY3Rpb24gYXNzaXN0YW50IGNvbnRyb2xzLgogICAgIFtfd2ViU2VsZWN0aW9uQXNzaXN0YW50
IGRpZEVuZFNjcm9sbGluZ092ZXJmbG93XTsKICAgICBbX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQg
ZGlkRW5kU2Nyb2xsaW5nT3ZlcmZsb3ddOwotICAgIF9kYXRhSW50ZXJhY3Rpb25TdGF0ZS5zaG91
bGRSZXN0b3JlQ2FsbG91dEJhciA9IE5POworICAgIF9zaG91bGRSZXN0b3JlQ2FsbG91dEJhckFm
dGVyRHJvcCA9IE5POwogfQogCiAjcHJhZ21hIG1hcmsgLSBVSURyYWdJbnRlcmFjdGlvbkRlbGVn
YXRlCkBAIC00NjA0LDkgKzQ1MDAsOSBAQCAtICh2b2lkKV9kcmFnSW50ZXJhY3Rpb246KFVJRHJh
Z0ludGVyYWN0aW9uICopaW50ZXJhY3Rpb24gcHJlcGFyZUZvclNlc3Npb246KGlkCiAKICAgICBb
c2VsZiBjbGVhblVwRHJhZ1NvdXJjZVNlc3Npb25TdGF0ZV07CiAKKyAgICBfZHJhZ0Ryb3BJbnRl
cmFjdGlvblN0YXRlLnByZXBhcmVGb3JEcmFnU2Vzc2lvbihzZXNzaW9uLCBjb21wbGV0aW9uKTsK
KwogICAgIGF1dG8gZHJhZ09yaWdpbiA9IHJvdW5kZWRJbnRQb2ludChbc2Vzc2lvbiBsb2NhdGlv
bkluVmlldzpzZWxmXSk7Ci0gICAgX2RhdGFJbnRlcmFjdGlvblN0YXRlLmRyYWdTdGFydENvbXBs
ZXRpb25CbG9jayA9IGNvbXBsZXRpb247Ci0gICAgX2RhdGFJbnRlcmFjdGlvblN0YXRlLmRyYWdT
ZXNzaW9uID0gc2Vzc2lvbjsKICAgICBfcGFnZS0+cmVxdWVzdFN0YXJ0RGF0YUludGVyYWN0aW9u
KGRyYWdPcmlnaW4sIHJvdW5kZWRJbnRQb2ludChbc2VsZiBjb252ZXJ0UG9pbnQ6ZHJhZ09yaWdp
biB0b1ZpZXc6c2VsZi53aW5kb3ddKSk7CiAKICAgICBSRUxFQVNFX0xPRyhEcmFnQW5kRHJvcCwg
IkRyYWcgc2Vzc2lvbiByZXF1ZXN0ZWQ6ICVwIGF0IG9yaWdpbjogeyVkLCAlZH0iLCBzZXNzaW9u
LCBkcmFnT3JpZ2luLngoKSwgZHJhZ09yaWdpbi55KCkpOwpAQCAtNDYxNCw1NyArNDUxMCw1OCBA
QCAtICh2b2lkKV9kcmFnSW50ZXJhY3Rpb246KFVJRHJhZ0ludGVyYWN0aW9uICopaW50ZXJhY3Rp
b24gcHJlcGFyZUZvclNlc3Npb246KGlkCiAKIC0gKE5TQXJyYXk8VUlEcmFnSXRlbSAqPiAqKWRy
YWdJbnRlcmFjdGlvbjooVUlEcmFnSW50ZXJhY3Rpb24gKilpbnRlcmFjdGlvbiBpdGVtc0ZvckJl
Z2lubmluZ1Nlc3Npb246KGlkIDxVSURyYWdTZXNzaW9uPilzZXNzaW9uCiB7CisgICAgQVNTRVJU
KGludGVyYWN0aW9uID09IF9kcmFnSW50ZXJhY3Rpb24pOwogICAgIFJFTEVBU0VfTE9HKERyYWdB
bmREcm9wLCAiRHJhZyBpdGVtcyByZXF1ZXN0ZWQgZm9yIHNlc3Npb246ICVwIiwgc2Vzc2lvbik7
Ci0gICAgaWYgKF9kYXRhSW50ZXJhY3Rpb25TdGF0ZS5kcmFnU2Vzc2lvbiAhPSBzZXNzaW9uKSB7
Ci0gICAgICAgIFJFTEVBU0VfTE9HKERyYWdBbmREcm9wLCAiRHJhZyBzZXNzaW9uIGZhaWxlZDog
JXAgKGRlbGVnYXRlIHNlc3Npb24gZG9lcyBub3QgbWF0Y2ggJXApIiwgc2Vzc2lvbiwgX2RhdGFJ
bnRlcmFjdGlvblN0YXRlLmRyYWdTZXNzaW9uLmdldCgpKTsKKyAgICBpZiAoX2RyYWdEcm9wSW50
ZXJhY3Rpb25TdGF0ZS5kcmFnU2Vzc2lvbigpICE9IHNlc3Npb24pIHsKKyAgICAgICAgUkVMRUFT
RV9MT0coRHJhZ0FuZERyb3AsICJEcmFnIHNlc3Npb24gZmFpbGVkOiAlcCAoZGVsZWdhdGUgc2Vz
c2lvbiBkb2VzIG5vdCBtYXRjaCAlcCkiLCBzZXNzaW9uLCBfZHJhZ0Ryb3BJbnRlcmFjdGlvblN0
YXRlLmRyYWdTZXNzaW9uKCkpOwogICAgICAgICByZXR1cm4gQFsgXTsKICAgICB9CiAKLSAgICBp
ZiAoX2RhdGFJbnRlcmFjdGlvblN0YXRlLnNvdXJjZUFjdGlvbiA9PSBEcmFnU291cmNlQWN0aW9u
Tm9uZSkgewotICAgICAgICBSRUxFQVNFX0xPRyhEcmFnQW5kRHJvcCwgIkRyYWcgc2Vzc2lvbiBm
YWlsZWQ6ICVwIChubyBkcmFnIHNvdXJjZSBhY3Rpb24pIiwgc2Vzc2lvbik7CisgICAgaWYgKCFf
ZHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmhhc1N0YWdlZERyYWdTb3VyY2UoKSkgeworICAgICAg
ICBSRUxFQVNFX0xPRyhEcmFnQW5kRHJvcCwgIkRyYWcgc2Vzc2lvbiBmYWlsZWQ6ICVwIChtaXNz
aW5nIHN0YWdlZCBkcmFnIHNvdXJjZSkiLCBzZXNzaW9uKTsKICAgICAgICAgcmV0dXJuIEBbIF07
CiAgICAgfQogCi0gICAgV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCAqZHJhZ2dpbmdQYXN0ZWJv
YXJkID0gW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgc2hhcmVkSW5zdGFuY2VdOwotICAgIEFT
U0VSVChpbnRlcmFjdGlvbiA9PSBfZGF0YUludGVyYWN0aW9uKTsKLSAgICBOU1VJbnRlZ2VyIG51
bWJlck9mSXRlbXMgPSBkcmFnZ2luZ1Bhc3RlYm9hcmQubnVtYmVyT2ZJdGVtczsKLSAgICBpZiAo
IW51bWJlck9mSXRlbXMpIHsKKyAgICBhdXRvIHN0YWdlZERyYWdTb3VyY2UgPSBfZHJhZ0Ryb3BJ
bnRlcmFjdGlvblN0YXRlLnN0YWdlZERyYWdTb3VyY2UoKTsKKyAgICBXZWJJdGVtUHJvdmlkZXJS
ZWdpc3RyYXRpb25JbmZvTGlzdCAqcmVnaXN0cmF0aW9uTGlzdCA9IFtbV2ViSXRlbVByb3ZpZGVy
UGFzdGVib2FyZCBzaGFyZWRJbnN0YW5jZV0gdGFrZVJlZ2lzdHJhdGlvbkxpc3RdOworICAgIFVJ
SXRlbVByb3ZpZGVyICpkZWZhdWx0SXRlbVByb3ZpZGVyID0gcmVnaXN0cmF0aW9uTGlzdC5pdGVt
UHJvdmlkZXI7CisgICAgaWYgKCFkZWZhdWx0SXRlbVByb3ZpZGVyKSB7CiAgICAgICAgIFJFTEVB
U0VfTE9HKERyYWdBbmREcm9wLCAiRHJhZyBzZXNzaW9uIGZhaWxlZDogJXAgKG5vIGl0ZW0gcHJv
dmlkZXJzIGdlbmVyYXRlZCBiZWZvcmUgYWRqdXN0bWVudCkiLCBzZXNzaW9uKTsKICAgICAgICAg
X3BhZ2UtPmRyYWdDYW5jZWxsZWQoKTsKKyAgICAgICAgX2RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0
ZS5jbGVhclN0YWdlZERyYWdTb3VyY2UoKTsKICAgICAgICAgcmV0dXJuIEBbIF07CiAgICAgfQog
CiAgICAgLy8gR2l2ZSBpbnRlcm5hbCBjbGllbnRzIHN1Y2ggYXMgTWFpbCBvbmUgZmluYWwgY2hh
bmNlIHRvIGF1Z21lbnQgdGhlIGNvbnRlbnRzIG9mIGVhY2ggVUlJdGVtUHJvdmlkZXIgYmVmb3Jl
IHNlbmRpbmcgdGhlIGRyYWcgaXRlbXMgb2ZmIHRvIFVJS2l0LgorICAgIE5TQXJyYXkgKmFkanVz
dGVkSXRlbVByb3ZpZGVyczsKICAgICBpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4gdWlEZWxlZ2F0
ZSA9IHNlbGYud2ViVmlld1VJRGVsZWdhdGU7CiAgICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6YWRqdXN0ZWREYXRhSW50ZXJhY3Rpb25JdGVt
UHJvdmlkZXJzRm9ySXRlbVByb3ZpZGVyOnJlcHJlc2VudGluZ09iamVjdHM6YWRkaXRpb25hbERh
dGE6KV0pIHsKLSAgICAgICAgTlNNdXRhYmxlQXJyYXkgKmFkanVzdGVkSXRlbVByb3ZpZGVycyA9
IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0gICAgICAgIGZvciAoTlNVSW50ZWdlciBpdGVtSW5k
ZXggPSAwOyBpdGVtSW5kZXggPCBudW1iZXJPZkl0ZW1zOyArK2l0ZW1JbmRleCkgewotICAgICAg
ICAgICAgV2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3QgKmluZm9MaXN0ID0gW2Ry
YWdnaW5nUGFzdGVib2FyZCByZWdpc3RyYXRpb25JbmZvQXRJbmRleDppdGVtSW5kZXhdOwotICAg
ICAgICAgICAgYXV0byByZXByZXNlbnRpbmdPYmplY3RzID0gYWRvcHROUyhbW05TTXV0YWJsZUFy
cmF5IGFsbG9jXSBpbml0XSk7Ci0gICAgICAgICAgICBhdXRvIGFkZGl0aW9uYWxEYXRhID0gYWRv
cHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgICAgIFtp
bmZvTGlzdCBlbnVtZXJhdGVJdGVtczpbcmVwcmVzZW50aW5nT2JqZWN0cywgYWRkaXRpb25hbERh
dGFdIChXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvICppdGVtLCBOU1VJbnRlZ2VyKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZW0ucmVwcmVzZW50aW5nT2JqZWN0KQotICAgICAgICAg
ICAgICAgICAgICBbcmVwcmVzZW50aW5nT2JqZWN0cyBhZGRPYmplY3Q6aXRlbS5yZXByZXNlbnRp
bmdPYmplY3RdOwotICAgICAgICAgICAgICAgIGlmIChpdGVtLnR5cGVJZGVudGlmaWVyICYmIGl0
ZW0uZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgW2FkZGl0aW9uYWxEYXRhIHNldE9iamVjdDpp
dGVtLmRhdGEgZm9yS2V5Oml0ZW0udHlwZUlkZW50aWZpZXJdOwotICAgICAgICAgICAgfV07Ci0g
ICAgICAgICAgICBpZiAoTlNBcnJheSAqcmVwbGFjZW1lbnRJdGVtUHJvdmlkZXJzID0gW3VpRGVs
ZWdhdGUgX3dlYlZpZXc6X3dlYlZpZXcgYWRqdXN0ZWREYXRhSW50ZXJhY3Rpb25JdGVtUHJvdmlk
ZXJzRm9ySXRlbVByb3ZpZGVyOltkcmFnZ2luZ1Bhc3RlYm9hcmQgaXRlbVByb3ZpZGVyQXRJbmRl
eDppdGVtSW5kZXhdIHJlcHJlc2VudGluZ09iamVjdHM6cmVwcmVzZW50aW5nT2JqZWN0cy5nZXQo
KSBhZGRpdGlvbmFsRGF0YTphZGRpdGlvbmFsRGF0YS5nZXQoKV0pCi0gICAgICAgICAgICAgICAg
W2FkanVzdGVkSXRlbVByb3ZpZGVycyBhZGRPYmplY3RzRnJvbUFycmF5OnJlcGxhY2VtZW50SXRl
bVByb3ZpZGVyc107Ci0gICAgICAgIH0KLSAgICAgICAgZHJhZ2dpbmdQYXN0ZWJvYXJkLml0ZW1Q
cm92aWRlcnMgPSBhZGp1c3RlZEl0ZW1Qcm92aWRlcnM7Ci0gICAgfSBlbHNlIGlmIChbdWlEZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmFkanVzdGVkRGF0YUlu
dGVyYWN0aW9uSXRlbVByb3ZpZGVyczopXSkKLSAgICAgICAgZHJhZ2dpbmdQYXN0ZWJvYXJkLml0
ZW1Qcm92aWRlcnMgPSBbdWlEZWxlZ2F0ZSBfd2ViVmlldzpfd2ViVmlldyBhZGp1c3RlZERhdGFJ
bnRlcmFjdGlvbkl0ZW1Qcm92aWRlcnM6ZHJhZ2dpbmdQYXN0ZWJvYXJkLml0ZW1Qcm92aWRlcnNd
OworICAgICAgICBhdXRvIHJlcHJlc2VudGluZ09iamVjdHMgPSBhZG9wdE5TKFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgYXV0byBhZGRpdGlvbmFsRGF0YSA9IGFkb3B0
TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7CisgICAgICAgIFtyZWdpc3Ry
YXRpb25MaXN0IGVudW1lcmF0ZUl0ZW1zOltyZXByZXNlbnRpbmdPYmplY3RzLCBhZGRpdGlvbmFs
RGF0YV0gKFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm8gKml0ZW0sIE5TVUludGVnZXIp
IHsKKyAgICAgICAgICAgIGlmIChpdGVtLnJlcHJlc2VudGluZ09iamVjdCkKKyAgICAgICAgICAg
ICAgICBbcmVwcmVzZW50aW5nT2JqZWN0cyBhZGRPYmplY3Q6aXRlbS5yZXByZXNlbnRpbmdPYmpl
Y3RdOworICAgICAgICAgICAgaWYgKGl0ZW0udHlwZUlkZW50aWZpZXIgJiYgaXRlbS5kYXRhKQor
ICAgICAgICAgICAgICAgIFthZGRpdGlvbmFsRGF0YSBzZXRPYmplY3Q6aXRlbS5kYXRhIGZvcktl
eTppdGVtLnR5cGVJZGVudGlmaWVyXTsKKyAgICAgICAgfV07CisgICAgICAgIGFkanVzdGVkSXRl
bVByb3ZpZGVycyA9IFt1aURlbGVnYXRlIF93ZWJWaWV3Ol93ZWJWaWV3IGFkanVzdGVkRGF0YUlu
dGVyYWN0aW9uSXRlbVByb3ZpZGVyc0Zvckl0ZW1Qcm92aWRlcjpkZWZhdWx0SXRlbVByb3ZpZGVy
IHJlcHJlc2VudGluZ09iamVjdHM6cmVwcmVzZW50aW5nT2JqZWN0cy5nZXQoKSBhZGRpdGlvbmFs
RGF0YTphZGRpdGlvbmFsRGF0YS5nZXQoKV07CisgICAgfSBlbHNlCisgICAgICAgIGFkanVzdGVk
SXRlbVByb3ZpZGVycyA9IEBbIGRlZmF1bHRJdGVtUHJvdmlkZXIgXTsKIAotICAgIF9fYmxvY2sg
UmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBpdGVtc0ZvckRyYWdJbnRlcmFjdGlvbiA9IFtOU011
dGFibGVBcnJheSBhcnJheV07Ci0gICAgW2RyYWdnaW5nUGFzdGVib2FyZCBlbnVtZXJhdGVJdGVt
UHJvdmlkZXJzV2l0aEJsb2NrOl4oVUlJdGVtUHJvdmlkZXIgKml0ZW1Qcm92aWRlciwgTlNVSW50
ZWdlciBpbmRleCwgQk9PTCAqc3RvcCkgewotICAgICAgICBbaXRlbXNGb3JEcmFnSW50ZXJhY3Rp
b24gYWRkT2JqZWN0OltbW1VJRHJhZ0l0ZW0gYWxsb2NdIGluaXRXaXRoSXRlbVByb3ZpZGVyOml0
ZW1Qcm92aWRlcl0gYXV0b3JlbGVhc2VdXTsKLSAgICB9XTsKKyAgICBOU011dGFibGVBcnJheSAq
ZHJhZ0l0ZW1zID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmFkanVzdGVkSXRl
bVByb3ZpZGVycy5jb3VudF07CisgICAgZm9yIChVSUl0ZW1Qcm92aWRlciAqaXRlbVByb3ZpZGVy
IGluIGFkanVzdGVkSXRlbVByb3ZpZGVycykgeworICAgICAgICBhdXRvIGl0ZW0gPSBhZG9wdE5T
KFtbVUlEcmFnSXRlbSBhbGxvY10gaW5pdFdpdGhJdGVtUHJvdmlkZXI6aXRlbVByb3ZpZGVyXSk7
CisgICAgICAgIFtpdGVtIF9zZXRQcml2YXRlTG9jYWxDb250ZXh0OkAoc3RhZ2VkRHJhZ1NvdXJj
ZS5pdGVtSWRlbnRpZmllcildOworICAgICAgICBbZHJhZ0l0ZW1zIGFkZE9iamVjdDppdGVtLmF1
dG9yZWxlYXNlKCldOworICAgIH0KIAotICAgIGlmICghW2l0ZW1zRm9yRHJhZ0ludGVyYWN0aW9u
IGNvdW50XSkKKyAgICBpZiAoIVtkcmFnSXRlbXMgY291bnRdKQogICAgICAgICBfcGFnZS0+ZHJh
Z0NhbmNlbGxlZCgpOwogCi0gICAgUkVMRUFTRV9MT0coRHJhZ0FuZERyb3AsICJEcmFnIHNlc3Np
b246ICVwIHN0YXJ0aW5nIHdpdGggJXR1IGl0ZW1zIiwgc2Vzc2lvbiwgW2l0ZW1zRm9yRHJhZ0lu
dGVyYWN0aW9uIGNvdW50XSk7Ci0gICAgcmV0dXJuIGl0ZW1zRm9yRHJhZ0ludGVyYWN0aW9uLmdl
dCgpOworICAgIFJFTEVBU0VfTE9HKERyYWdBbmREcm9wLCAiRHJhZyBzZXNzaW9uOiAlcCBzdGFy
dGluZyB3aXRoICV0dSBpdGVtcyIsIHNlc3Npb24sIFtkcmFnSXRlbXMgY291bnRdKTsKKyAgICBf
ZHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmNsZWFyU3RhZ2VkRHJhZ1NvdXJjZShbZHJhZ0l0ZW1z
IGNvdW50XSA/IERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZTo6RGlkQmVjb21lQWN0aXZlOjpZZXMg
OiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGU6OkRpZEJlY29tZUFjdGl2ZTo6Tm8pOworCisgICAg
cmV0dXJuIGRyYWdJdGVtczsKIH0KIAogLSAoVUlUYXJnZXRlZERyYWdQcmV2aWV3ICopZHJhZ0lu
dGVyYWN0aW9uOihVSURyYWdJbnRlcmFjdGlvbiAqKWludGVyYWN0aW9uIHByZXZpZXdGb3JMaWZ0
aW5nSXRlbTooVUlEcmFnSXRlbSAqKWl0ZW0gc2Vzc2lvbjooaWQgPFVJRHJhZ1Nlc3Npb24+KXNl
c3Npb24KQEAgLTQ2NzUsMjcgKzQ1NzIsMjYgQEAgLSAoVUlUYXJnZXRlZERyYWdQcmV2aWV3ICop
ZHJhZ0ludGVyYWN0aW9uOihVSURyYWdJbnRlcmFjdGlvbiAqKWludGVyYWN0aW9uIHByZXYKICAg
ICAgICAgaWYgKG92ZXJyaWRlblByZXZpZXcpCiAgICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVu
UHJldmlldzsKICAgICB9Ci0gICAgcmV0dXJuIHNlbGYuZHJhZ1ByZXZpZXdGb3JDdXJyZW50RGF0
YUludGVyYWN0aW9uU3RhdGUuYXV0b3JlbGVhc2UoKTsKKyAgICByZXR1cm4gX2RyYWdEcm9wSW50
ZXJhY3Rpb25TdGF0ZS5wcmV2aWV3Rm9yRHJhZ0l0ZW0oaXRlbSwgc2VsZiwgc2VsZi51bnNjYWxl
ZFZpZXcpOwogfQogCiAtICh2b2lkKWRyYWdJbnRlcmFjdGlvbjooVUlEcmFnSW50ZXJhY3Rpb24g
KilpbnRlcmFjdGlvbiB3aWxsQW5pbWF0ZUxpZnRXaXRoQW5pbWF0b3I6KGlkIDxVSURyYWdBbmlt
YXRpbmc+KWFuaW1hdG9yIHNlc3Npb246KGlkIDxVSURyYWdTZXNzaW9uPilzZXNzaW9uCiB7Ci0g
ICAgaWYgKCFfZGF0YUludGVyYWN0aW9uU3RhdGUuc2hvdWxkUmVzdG9yZUNhbGxvdXRCYXIgJiYg
KF9kYXRhSW50ZXJhY3Rpb25TdGF0ZS5zb3VyY2VBY3Rpb24gJiBEcmFnU291cmNlQWN0aW9uU2Vs
ZWN0aW9uKSkgeworICAgIGlmICghX3Nob3VsZFJlc3RvcmVDYWxsb3V0QmFyQWZ0ZXJEcm9wICYm
IF9kcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuYW55QWN0aXZlRHJhZ1NvdXJjZUlzKERyYWdTb3Vy
Y2VBY3Rpb25TZWxlY3Rpb24pKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIFNQSSBzaG91bGQg
YmUgcmVuYW1lZCBpbiBVSUtpdCB0byByZWZsZWN0IGEgbW9yZSBnZW5lcmFsIHB1cnBvc2Ugb2Yg
aGlkaW5nIGludGVyYWN0aW9uIGFzc2lzdGFudCBjb250cm9scy4KICAgICAgICAgW193ZWJTZWxl
Y3Rpb25Bc3Npc3RhbnQgd2lsbFN0YXJ0U2Nyb2xsaW5nT3ZlcmZsb3ddOwogICAgICAgICBbX3Rl
eHRTZWxlY3Rpb25Bc3Npc3RhbnQgd2lsbFN0YXJ0U2Nyb2xsaW5nT3ZlcmZsb3ddOwotICAgICAg
ICBfZGF0YUludGVyYWN0aW9uU3RhdGUuc2hvdWxkUmVzdG9yZUNhbGxvdXRCYXIgPSBZRVM7Cisg
ICAgICAgIF9zaG91bGRSZXN0b3JlQ2FsbG91dEJhckFmdGVyRHJvcCA9IFlFUzsKICAgICB9CiAK
LSAgICBhdXRvIGFkanVzdGVkT3JpZ2luID0gX2RhdGFJbnRlcmFjdGlvblN0YXRlLmFkanVzdGVk
T3JpZ2luOworICAgIGF1dG8gcG9zaXRpb25Gb3JEcmFnRW5kID0gcm91bmRlZEludFBvaW50KF9k
cmFnRHJvcEludGVyYWN0aW9uU3RhdGUuYWRqdXN0ZWRQb3NpdGlvbkZvckRyYWdFbmQoKSk7CiAg
ICAgUmV0YWluUHRyPFdLQ29udGVudFZpZXc+IHByb3RlY3RlZFNlbGYoc2VsZik7Ci0gICAgW2Fu
aW1hdG9yIGFkZENvbXBsZXRpb246W3Nlc3Npb24sIGFkanVzdGVkT3JpZ2luLCBwcm90ZWN0ZWRT
ZWxmLCBwYWdlID0gX3BhZ2VdIChVSVZpZXdBbmltYXRpbmdQb3NpdGlvbiBmaW5hbFBvc2l0aW9u
KSB7CisgICAgW2FuaW1hdG9yIGFkZENvbXBsZXRpb246W3Nlc3Npb24sIHBvc2l0aW9uRm9yRHJh
Z0VuZCwgcHJvdGVjdGVkU2VsZiwgcGFnZSA9IF9wYWdlXSAoVUlWaWV3QW5pbWF0aW5nUG9zaXRp
b24gZmluYWxQb3NpdGlvbikgewogICAgICAgICBpZiAoZmluYWxQb3NpdGlvbiA9PSBVSVZpZXdB
bmltYXRpbmdQb3NpdGlvblN0YXJ0KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPRyhEcmFnQW5k
RHJvcCwgIkRyYWcgc2Vzc2lvbiBlbmRlZCBhdCBzdGFydDogJXAiLCBzZXNzaW9uKTsKICAgICAg
ICAgICAgIC8vIFRoZSBsaWZ0IHdhcyBjYW5jZWxlZCwgc28gLWRyb3BJbnRlcmFjdGlvbjpzZXNz
aW9uRGlkRW5kOiB3aWxsIG5ldmVyIGJlIGludm9rZWQuIFRoaXMgaXMgdGhlIGxhc3QgY2hhbmNl
IHRvIGNsZWFuIHVwLgogICAgICAgICAgICAgW3Byb3RlY3RlZFNlbGYgY2xlYW5VcERyYWdTb3Vy
Y2VTZXNzaW9uU3RhdGVdOwotICAgICAgICAgICAgYXV0byBvcmlnaW5JbldpbmRvd0Nvb3JkaW5h
dGVzID0gW3Byb3RlY3RlZFNlbGYgY29udmVydFBvaW50OmFkanVzdGVkT3JpZ2luIHRvVmlldzpb
cHJvdGVjdGVkU2VsZiB3aW5kb3ddXTsKLSAgICAgICAgICAgIHBhZ2UtPmRyYWdFbmRlZChyb3Vu
ZGVkSW50UG9pbnQoYWRqdXN0ZWRPcmlnaW4pLCByb3VuZGVkSW50UG9pbnQob3JpZ2luSW5XaW5k
b3dDb29yZGluYXRlcyksIERyYWdPcGVyYXRpb25Ob25lKTsKKyAgICAgICAgICAgIHBhZ2UtPmRy
YWdFbmRlZChwb3NpdGlvbkZvckRyYWdFbmQsIHBvc2l0aW9uRm9yRHJhZ0VuZCwgRHJhZ09wZXJh
dGlvbk5vbmUpOwogICAgICAgICB9CiAgICAgfV07CiB9CkBAIC00NzA4LDE2ICs0NjA0LDEzIEBA
IC0gKHZvaWQpZHJhZ0ludGVyYWN0aW9uOihVSURyYWdJbnRlcmFjdGlvbiAqKWludGVyYWN0aW9u
IHNlc3Npb25XaWxsQmVnaW46KGlkIDxVCiAgICAgICAgIFt1aURlbGVnYXRlIF93ZWJWaWV3Ol93
ZWJWaWV3IGRhdGFJbnRlcmFjdGlvbjppbnRlcmFjdGlvbiBzZXNzaW9uV2lsbEJlZ2luOnNlc3Np
b25dOwogCiAgICAgW19hY3Rpb25TaGVldEFzc2lzdGFudCBjbGVhbnVwU2hlZXRdOwotCi0gICAg
X2RhdGFJbnRlcmFjdGlvblN0YXRlLmRpZEJlZ2luRHJhZ2dpbmcgPSBZRVM7Ci0gICAgW3NlbGYg
X3RyYW5zaXRpb25EcmFnUHJldmlld1RvSW1hZ2VJZk5lY2Vzc2FyeTpzZXNzaW9uXTsKLQorICAg
IF9kcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuZHJhZ1Nlc3Npb25XaWxsQmVnaW4oKTsKICAgICBf
cGFnZS0+ZGlkU3RhcnREcmFnKCk7CiB9CiAKIC0gKHZvaWQpZHJhZ0ludGVyYWN0aW9uOihVSURy
YWdJbnRlcmFjdGlvbiAqKWludGVyYWN0aW9uIHNlc3Npb246KGlkIDxVSURyYWdTZXNzaW9uPilz
ZXNzaW9uIGRpZEVuZFdpdGhPcGVyYXRpb246KFVJRHJvcE9wZXJhdGlvbilvcGVyYXRpb24KIHsK
LSAgICBSRUxFQVNFX0xPRyhEcmFnQW5kRHJvcCwgIkRyYWcgc2Vzc2lvbiBlbmRlZDogJXAgKHdp
dGggb3BlcmF0aW9uOiAldHUsIHBlcmZvcm1pbmcgb3BlcmF0aW9uOiAlZCwgYmVnYW4gZHJhZ2dp
bmc6ICVkKSIsIHNlc3Npb24sIG9wZXJhdGlvbiwgX2RhdGFJbnRlcmFjdGlvblN0YXRlLmlzUGVy
Zm9ybWluZ09wZXJhdGlvbiwgX2RhdGFJbnRlcmFjdGlvblN0YXRlLmRpZEJlZ2luRHJhZ2dpbmcp
OworICAgIFJFTEVBU0VfTE9HKERyYWdBbmREcm9wLCAiRHJhZyBzZXNzaW9uIGVuZGVkOiAlcCAo
d2l0aCBvcGVyYXRpb246ICV0dSwgcGVyZm9ybWluZyBvcGVyYXRpb246ICVkLCBiZWdhbiBkcmFn
Z2luZzogJWQpIiwgc2Vzc2lvbiwgb3BlcmF0aW9uLCBfZHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRl
LmlzUGVyZm9ybWluZ0Ryb3AoKSwgX2RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5kaWRCZWdpbkRy
YWdnaW5nKCkpOwogCiAgICAgW3NlbGYgX3Jlc3RvcmVDYWxsb3V0QmFySWZOZWVkZWRdOwogCkBA
IC00NzI1LDExICs0NjE4LDExIEBAIC0gKHZvaWQpZHJhZ0ludGVyYWN0aW9uOihVSURyYWdJbnRl
cmFjdGlvbiAqKWludGVyYWN0aW9uIHNlc3Npb246KGlkIDxVSURyYWdTZXNzCiAgICAgaWYgKFt1
aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6ZGF0YUludGVy
YWN0aW9uOnNlc3Npb246ZGlkRW5kV2l0aE9wZXJhdGlvbjopXSkKICAgICAgICAgW3VpRGVsZWdh
dGUgX3dlYlZpZXc6X3dlYlZpZXcgZGF0YUludGVyYWN0aW9uOmludGVyYWN0aW9uIHNlc3Npb246
c2Vzc2lvbiBkaWRFbmRXaXRoT3BlcmF0aW9uOm9wZXJhdGlvbl07CiAKLSAgICBpZiAoX2RhdGFJ
bnRlcmFjdGlvblN0YXRlLmlzUGVyZm9ybWluZ09wZXJhdGlvbikKKyAgICBpZiAoX2RyYWdEcm9w
SW50ZXJhY3Rpb25TdGF0ZS5pc1BlcmZvcm1pbmdEcm9wKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIFtzZWxmIGNsZWFuVXBEcmFnU291cmNlU2Vzc2lvblN0YXRlXTsKLSAgICBfcGFnZS0+ZHJh
Z0VuZGVkKHJvdW5kZWRJbnRQb2ludChfZGF0YUludGVyYWN0aW9uU3RhdGUuYWRqdXN0ZWRPcmln
aW4pLCByb3VuZGVkSW50UG9pbnQoW3NlbGYgY29udmVydFBvaW50Ol9kYXRhSW50ZXJhY3Rpb25T
dGF0ZS5hZGp1c3RlZE9yaWdpbiB0b1ZpZXc6c2VsZi53aW5kb3ddKSwgb3BlcmF0aW9uKTsKKyAg
ICBfcGFnZS0+ZHJhZ0VuZGVkKHJvdW5kZWRJbnRQb2ludChfZHJhZ0Ryb3BJbnRlcmFjdGlvblN0
YXRlLmFkanVzdGVkUG9zaXRpb25Gb3JEcmFnRW5kKCkpLCByb3VuZGVkSW50UG9pbnQoX2RyYWdE
cm9wSW50ZXJhY3Rpb25TdGF0ZS5hZGp1c3RlZFBvc2l0aW9uRm9yRHJhZ0VuZCgpKSwgb3BlcmF0
aW9uKTsKIH0KIAogLSAoVUlUYXJnZXRlZERyYWdQcmV2aWV3ICopZHJhZ0ludGVyYWN0aW9uOihV
SURyYWdJbnRlcmFjdGlvbiAqKWludGVyYWN0aW9uIHByZXZpZXdGb3JDYW5jZWxsaW5nSXRlbToo
VUlEcmFnSXRlbSAqKWl0ZW0gd2l0aERlZmF1bHQ6KFVJVGFyZ2V0ZWREcmFnUHJldmlldyAqKWRl
ZmF1bHRQcmV2aWV3CkBAIC00NzQwLDEyICs0NjMzLDEyIEBAIC0gKFVJVGFyZ2V0ZWREcmFnUHJl
dmlldyAqKWRyYWdJbnRlcmFjdGlvbjooVUlEcmFnSW50ZXJhY3Rpb24gKilpbnRlcmFjdGlvbiBw
cmV2CiAgICAgICAgIGlmIChvdmVycmlkZW5QcmV2aWV3KQogICAgICAgICAgICAgcmV0dXJuIG92
ZXJyaWRlblByZXZpZXc7CiAgICAgfQotICAgIHJldHVybiBzZWxmLmRyYWdQcmV2aWV3Rm9yQ3Vy
cmVudERhdGFJbnRlcmFjdGlvblN0YXRlLmF1dG9yZWxlYXNlKCk7CisgICAgcmV0dXJuIF9kcmFn
RHJvcEludGVyYWN0aW9uU3RhdGUucHJldmlld0ZvckRyYWdJdGVtKGl0ZW0sIHNlbGYsIHNlbGYu
dW5zY2FsZWRWaWV3KTsKIH0KIAogLSAoQk9PTClfZHJhZ0ludGVyYWN0aW9uOihVSURyYWdJbnRl
cmFjdGlvbiAqKWludGVyYWN0aW9uIGl0ZW06KFVJRHJhZ0l0ZW0gKilpdGVtIHNob3VsZERlbGF5
U2V0RG93bkFuaW1hdGlvbldpdGhDb21wbGV0aW9uOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb24K
IHsKLSAgICBfZGF0YUludGVyYWN0aW9uU3RhdGUuZHJhZ0NhbmNlbFNldERvd25CbG9jayA9IGNv
bXBsZXRpb247CisgICAgX2RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5kcmFnU2Vzc2lvbldpbGxE
ZWxheVNldERvd25BbmltYXRpb24oY29tcGxldGlvbik7CiAgICAgcmV0dXJuIFlFUzsKIH0KIApA
QCAtNDc1Myw4ICs0NjQ2LDcgQEAgLSAodm9pZClkcmFnSW50ZXJhY3Rpb246KFVJRHJhZ0ludGVy
YWN0aW9uICopaW50ZXJhY3Rpb24gaXRlbTooVUlEcmFnSXRlbSAqKWl0ZW0KIHsKICAgICBbYW5p
bWF0b3IgYWRkQ29tcGxldGlvbjpbcHJvdGVjdGVkU2VsZiA9IHJldGFpblB0cihzZWxmKSwgcGFn
ZSA9IF9wYWdlXSAoVUlWaWV3QW5pbWF0aW5nUG9zaXRpb24gZmluYWxQb3NpdGlvbikgewogICAg
ICAgICBwYWdlLT5kcmFnQ2FuY2VsbGVkKCk7Ci0gICAgICAgIGlmIChhdXRvIGNvbXBsZXRpb24g
PSBwcm90ZWN0ZWRTZWxmLT5fZGF0YUludGVyYWN0aW9uU3RhdGUuZHJhZ0NhbmNlbFNldERvd25C
bG9jaykgewotICAgICAgICAgICAgcHJvdGVjdGVkU2VsZi0+X2RhdGFJbnRlcmFjdGlvblN0YXRl
LmRyYWdDYW5jZWxTZXREb3duQmxvY2sgPSBuaWw7CisgICAgICAgIGlmIChhdXRvIGNvbXBsZXRp
b24gPSBwcm90ZWN0ZWRTZWxmLT5fZHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLnRha2VEcmFnQ2Fu
Y2VsU2V0RG93bkJsb2NrKCkpIHsKICAgICAgICAgICAgIHBhZ2UtPmNhbGxBZnRlck5leHRQcmVz
ZW50YXRpb25VcGRhdGUoW2NvbXBsZXRpb25dIChDYWxsYmFja0Jhc2U6OkVycm9yKSB7CiAgICAg
ICAgICAgICAgICAgY29tcGxldGlvbigpOwogICAgICAgICAgICAgfSk7CkBAIC00Nzg1LDE0ICs0
Njc3LDEyIEBAIC0gKEJPT0wpZHJvcEludGVyYWN0aW9uOihVSURyb3BJbnRlcmFjdGlvbiAqKWlu
dGVyYWN0aW9uIGNhbkhhbmRsZVNlc3Npb246KGlkPFVJCiAtICh2b2lkKWRyb3BJbnRlcmFjdGlv
bjooVUlEcm9wSW50ZXJhY3Rpb24gKilpbnRlcmFjdGlvbiBzZXNzaW9uRGlkRW50ZXI6KGlkIDxV
SURyb3BTZXNzaW9uPilzZXNzaW9uCiB7CiAgICAgUkVMRUFTRV9MT0coRHJhZ0FuZERyb3AsICJE
cm9wIHNlc3Npb24gZW50ZXJlZDogJXAgd2l0aCAldHUgaXRlbXMiLCBzZXNzaW9uLCBzZXNzaW9u
Lml0ZW1zLmNvdW50KTsKLSAgICBfZGF0YUludGVyYWN0aW9uU3RhdGUuZHJvcFNlc3Npb24gPSBz
ZXNzaW9uOwotCi0gICAgW1tXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHNoYXJlZEluc3RhbmNl
XSBzZXRJdGVtUHJvdmlkZXJzOmV4dHJhY3RJdGVtUHJvdmlkZXJzRnJvbURyb3BTZXNzaW9uKHNl
c3Npb24pXTsKLQogICAgIGF1dG8gZHJhZ0RhdGEgPSBbc2VsZiBkcmFnRGF0YUZvckRyb3BTZXNz
aW9uOnNlc3Npb24gZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOltzZWxmIF9kcmFnRGVzdGluYXRpb25B
Y3Rpb25Gb3JEcm9wU2Vzc2lvbjpzZXNzaW9uXV07CiAKKyAgICBfZHJhZ0Ryb3BJbnRlcmFjdGlv
blN0YXRlLmRyb3BTZXNzaW9uRGlkRW50ZXJPclVwZGF0ZShzZXNzaW9uLCBkcmFnRGF0YSk7CisK
KyAgICBbW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgc2hhcmVkSW5zdGFuY2VdIHNldEl0ZW1Q
cm92aWRlcnM6ZXh0cmFjdEl0ZW1Qcm92aWRlcnNGcm9tRHJvcFNlc3Npb24oc2Vzc2lvbildOwog
ICAgIF9wYWdlLT5kcmFnRW50ZXJlZChkcmFnRGF0YSwgImRhdGEgaW50ZXJhY3Rpb24gcGFzdGVi
b2FyZCIpOwotICAgIF9kYXRhSW50ZXJhY3Rpb25TdGF0ZS5sYXN0R2xvYmFsUG9zaXRpb24gPSBk
cmFnRGF0YS5nbG9iYWxQb3NpdGlvbigpOwogfQogCiAtIChVSURyb3BQcm9wb3NhbCAqKWRyb3BJ
bnRlcmFjdGlvbjooVUlEcm9wSW50ZXJhY3Rpb24gKilpbnRlcmFjdGlvbiBzZXNzaW9uRGlkVXBk
YXRlOihpZCA8VUlEcm9wU2Vzc2lvbj4pc2Vzc2lvbgpAQCAtNDgwMSw3ICs0NjkxLDcgQEAgLSAo
VUlEcm9wUHJvcG9zYWwgKilkcm9wSW50ZXJhY3Rpb246KFVJRHJvcEludGVyYWN0aW9uICopaW50
ZXJhY3Rpb24gc2Vzc2lvbkRpZFUKIAogICAgIGF1dG8gZHJhZ0RhdGEgPSBbc2VsZiBkcmFnRGF0
YUZvckRyb3BTZXNzaW9uOnNlc3Npb24gZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOltzZWxmIF9kcmFn
RGVzdGluYXRpb25BY3Rpb25Gb3JEcm9wU2Vzc2lvbjpzZXNzaW9uXV07CiAgICAgX3BhZ2UtPmRy
YWdVcGRhdGVkKGRyYWdEYXRhLCAiZGF0YSBpbnRlcmFjdGlvbiBwYXN0ZWJvYXJkIik7Ci0gICAg
X2RhdGFJbnRlcmFjdGlvblN0YXRlLmxhc3RHbG9iYWxQb3NpdGlvbiA9IGRyYWdEYXRhLmdsb2Jh
bFBvc2l0aW9uKCk7CisgICAgX2RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5kcm9wU2Vzc2lvbkRp
ZEVudGVyT3JVcGRhdGUoc2Vzc2lvbiwgZHJhZ0RhdGEpOwogCiAgICAgTlNVSW50ZWdlciBvcGVy
YXRpb24gPSBkcm9wT3BlcmF0aW9uRm9yV2ViQ29yZURyYWdPcGVyYXRpb24oX3BhZ2UtPmN1cnJl
bnREcmFnT3BlcmF0aW9uKCkpOwogICAgIGlmIChbc2VsZi53ZWJWaWV3VUlEZWxlZ2F0ZSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OndpbGxVcGRhdGVEYXRhSW50ZXJhY3Rp
b25PcGVyYXRpb25Ub09wZXJhdGlvbjpmb3JTZXNzaW9uOildKQpAQCAtNDgxOSw3ICs0NzA5LDcg
QEAgLSAodm9pZClkcm9wSW50ZXJhY3Rpb246KFVJRHJvcEludGVyYWN0aW9uICopaW50ZXJhY3Rp
b24gc2Vzc2lvbkRpZEV4aXQ6KGlkIDxVSUQKICAgICBfcGFnZS0+ZHJhZ0V4aXRlZChkcmFnRGF0
YSwgImRhdGEgaW50ZXJhY3Rpb24gcGFzdGVib2FyZCIpOwogICAgIF9wYWdlLT5yZXNldEN1cnJl
bnREcmFnSW5mb3JtYXRpb24oKTsKIAotICAgIF9kYXRhSW50ZXJhY3Rpb25TdGF0ZS5kcm9wU2Vz
c2lvbiA9IG5pbDsKKyAgICBfZHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmRyb3BTZXNzaW9uRGlk
RXhpdCgpOwogfQogCiAtICh2b2lkKWRyb3BJbnRlcmFjdGlvbjooVUlEcm9wSW50ZXJhY3Rpb24g
KilpbnRlcmFjdGlvbiBwZXJmb3JtRHJvcDooaWQgPFVJRHJvcFNlc3Npb24+KXNlc3Npb24KQEAg
LTQ4MzcsOSArNDcyNywxMCBAQCAtICh2b2lkKWRyb3BJbnRlcmFjdGlvbjooVUlEcm9wSW50ZXJh
Y3Rpb24gKilpbnRlcmFjdGlvbiBwZXJmb3JtRHJvcDooaWQgPFVJRHJvcAogICAgICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAorICAgIF9kcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuZHJvcFNlc3Np
b25XaWxsUGVyZm9ybURyb3AoKTsKKwogICAgIFtbV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCBz
aGFyZWRJbnN0YW5jZV0gc2V0SXRlbVByb3ZpZGVyczppdGVtUHJvdmlkZXJzXTsKICAgICBbW1dl
Ykl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgc2hhcmVkSW5zdGFuY2VdIGluY3JlbWVudFBlbmRpbmdP
cGVyYXRpb25Db3VudF07Ci0gICAgX2RhdGFJbnRlcmFjdGlvblN0YXRlLmlzUGVyZm9ybWluZ09w
ZXJhdGlvbiA9IFlFUzsKICAgICBhdXRvIGRyYWdEYXRhID0gW3NlbGYgZHJhZ0RhdGFGb3JEcm9w
U2Vzc2lvbjpzZXNzaW9uIGRyYWdEZXN0aW5hdGlvbkFjdGlvbjpXS0RyYWdEZXN0aW5hdGlvbkFj
dGlvbkFueV07CiAKICAgICBSRUxFQVNFX0xPRyhEcmFnQW5kRHJvcCwgIkxvYWRpbmcgZGF0YSBm
cm9tICV0dSBpdGVtIHByb3ZpZGVycyBmb3Igc2Vzc2lvbjogJXAiLCBpdGVtUHJvdmlkZXJzLmNv
dW50LCBzZXNzaW9uKTsKQEAgLTQ4NjAsMTEgKzQ3NTEsMTEgQEAgLSAodm9pZClkcm9wSW50ZXJh
Y3Rpb246KFVJRHJvcEludGVyYWN0aW9uICopaW50ZXJhY3Rpb24gcGVyZm9ybURyb3A6KGlkIDxV
SURyb3AKICAgICAgICAgcmV0YWluZWRTZWxmLT5fcGFnZS0+Y3JlYXRlU2FuZGJveEV4dGVuc2lv
bnNJZk5lZWRlZChmaWxlbmFtZXMsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIHNhbmRib3hFeHRl
bnNpb25Gb3JVcGxvYWQpOwogICAgICAgICByZXRhaW5lZFNlbGYtPl9wYWdlLT5wZXJmb3JtRHJh
Z09wZXJhdGlvbihjYXB0dXJlZERyYWdEYXRhLCAiZGF0YSBpbnRlcmFjdGlvbiBwYXN0ZWJvYXJk
Iiwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgc2FuZGJveEV4dGVuc2lvbkZvclVwbG9hZCk7CiAK
LSAgICAgICAgcmV0YWluZWRTZWxmLT5fZGF0YUludGVyYWN0aW9uU3RhdGUudmlzaWJsZUNvbnRl
bnRWaWV3U25hcHNob3QgPSBbcmV0YWluZWRTZWxmIHNuYXBzaG90Vmlld0FmdGVyU2NyZWVuVXBk
YXRlczpOT107CisgICAgICAgIHJldGFpbmVkU2VsZi0+X3Zpc2libGVDb250ZW50Vmlld1NuYXBz
aG90ID0gW3JldGFpbmVkU2VsZiBzbmFwc2hvdFZpZXdBZnRlclNjcmVlblVwZGF0ZXM6Tk9dOwog
ICAgICAgICBbcmV0YWluZWRTZWxmIHNldFN1cHByZXNzQXNzaXN0YW50U2VsZWN0aW9uVmlldzpZ
RVNdOwogICAgICAgICBbVUlWaWV3IHBlcmZvcm1XaXRob3V0QW5pbWF0aW9uOltyZXRhaW5lZFNl
bGZdIHsKLSAgICAgICAgICAgIFtyZXRhaW5lZFNlbGYtPl9kYXRhSW50ZXJhY3Rpb25TdGF0ZS52
aXNpYmxlQ29udGVudFZpZXdTbmFwc2hvdCBzZXRGcmFtZTpbcmV0YWluZWRTZWxmIGJvdW5kc11d
OwotICAgICAgICAgICAgW3JldGFpbmVkU2VsZiBhZGRTdWJ2aWV3OnJldGFpbmVkU2VsZi0+X2Rh
dGFJbnRlcmFjdGlvblN0YXRlLnZpc2libGVDb250ZW50Vmlld1NuYXBzaG90LmdldCgpXTsKKyAg
ICAgICAgICAgIFtyZXRhaW5lZFNlbGYtPl92aXNpYmxlQ29udGVudFZpZXdTbmFwc2hvdCBzZXRG
cmFtZTpbcmV0YWluZWRTZWxmIGJvdW5kc11dOworICAgICAgICAgICAgW3JldGFpbmVkU2VsZiBh
ZGRTdWJ2aWV3OnJldGFpbmVkU2VsZi0+X3Zpc2libGVDb250ZW50Vmlld1NuYXBzaG90LmdldCgp
XTsKICAgICAgICAgfV07CiAgICAgfV07CiB9CkBAIC00ODg2LDkgKzQ3NzcsMTYgQEAgLSAoVUlU
YXJnZXRlZERyYWdQcmV2aWV3ICopZHJvcEludGVyYWN0aW9uOihVSURyb3BJbnRlcmFjdGlvbiAq
KWludGVyYWN0aW9uIHByZXYKIAogLSAodm9pZClkcm9wSW50ZXJhY3Rpb246KFVJRHJvcEludGVy
YWN0aW9uICopaW50ZXJhY3Rpb24gc2Vzc2lvbkRpZEVuZDooaWQgPFVJRHJvcFNlc3Npb24+KXNl
c3Npb24KIHsKLSAgICBSRUxFQVNFX0xPRyhEcmFnQW5kRHJvcCwgIkRyb3Agc2Vzc2lvbiBlbmRl
ZDogJXAgKHBlcmZvcm1pbmcgb3BlcmF0aW9uOiAlZCwgYmVnYW4gZHJhZ2dpbmc6ICVkKSIsIHNl
c3Npb24sIF9kYXRhSW50ZXJhY3Rpb25TdGF0ZS5pc1BlcmZvcm1pbmdPcGVyYXRpb24sIF9kYXRh
SW50ZXJhY3Rpb25TdGF0ZS5kaWRCZWdpbkRyYWdnaW5nKTsKLSAgICBpZiAoX2RhdGFJbnRlcmFj
dGlvblN0YXRlLmlzUGVyZm9ybWluZ09wZXJhdGlvbiB8fCBfZGF0YUludGVyYWN0aW9uU3RhdGUu
ZGlkQmVnaW5EcmFnZ2luZykKKyAgICBSRUxFQVNFX0xPRyhEcmFnQW5kRHJvcCwgIkRyb3Agc2Vz
c2lvbiBlbmRlZDogJXAgKHBlcmZvcm1pbmcgb3BlcmF0aW9uOiAlZCwgYmVnYW4gZHJhZ2dpbmc6
ICVkKSIsIHNlc3Npb24sIF9kcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaXNQZXJmb3JtaW5nRHJv
cCgpLCBfZHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmRpZEJlZ2luRHJhZ2dpbmcoKSk7CisgICAg
aWYgKF9kcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaXNQZXJmb3JtaW5nRHJvcCgpKSB7CisgICAg
ICAgIC8vIEluIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSBwZXJmb3JtaW5nIGEgZHJvcCwgd2FpdCB1
bnRpbCBhZnRlciB0aGUgZHJvcCBpcyBoYW5kbGVkIGluIHRoZSB3ZWIgcHJvY2VzcyB0byByZXNl
dCBkcmFnIGFuZCBkcm9wIGludGVyYWN0aW9uIHN0YXRlLgogICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKF9kcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuZGlkQmVnaW5EcmFnZ2luZygp
KSB7CisgICAgICAgIC8vIEluIHRoZSBjYXNlIHdoZXJlIHRoZSBjb250ZW50IHZpZXcgaXMgYSBz
b3VyY2Ugb2YgZHJhZyBpdGVtcywgd2FpdCB1bnRpbCAtZHJhZ0ludGVyYWN0aW9uOnNlc3Npb246
ZGlkRW5kV2l0aE9wZXJhdGlvbjogdG8gcmVzZXQgZHJhZyBhbmQgZHJvcCBpbnRlcmFjdGlvbiBz
dGF0ZS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIENHUG9pbnQgZ2xvYmFsOwogICAg
IENHUG9pbnQgY2xpZW50OwpAQCAtNDkwMSw0MiArNDc5OSw0MiBAQCAtICh2b2lkKWRyb3BJbnRl
cmFjdGlvbjooVUlEcm9wSW50ZXJhY3Rpb24gKilpbnRlcmFjdGlvbiBzZXNzaW9uRGlkRW5kOihp
ZCA8VUlEcgogCiAtICh2b2lkKV9zaW11bGF0ZURhdGFJbnRlcmFjdGlvbkVudGVyZWQ6KGlkKXNl
c3Npb24KIHsKLSAgICBbc2VsZiBkcm9wSW50ZXJhY3Rpb246X2RhdGFPcGVyYXRpb24uZ2V0KCkg
c2Vzc2lvbkRpZEVudGVyOnNlc3Npb25dOworICAgIFtzZWxmIGRyb3BJbnRlcmFjdGlvbjpfZHJv
cEludGVyYWN0aW9uLmdldCgpIHNlc3Npb25EaWRFbnRlcjpzZXNzaW9uXTsKIH0KIAogLSAoTlNV
SW50ZWdlcilfc2ltdWxhdGVEYXRhSW50ZXJhY3Rpb25VcGRhdGVkOihpZClzZXNzaW9uCiB7Ci0g
ICAgcmV0dXJuIFtzZWxmIGRyb3BJbnRlcmFjdGlvbjpfZGF0YU9wZXJhdGlvbi5nZXQoKSBzZXNz
aW9uRGlkVXBkYXRlOnNlc3Npb25dLm9wZXJhdGlvbjsKKyAgICByZXR1cm4gW3NlbGYgZHJvcElu
dGVyYWN0aW9uOl9kcm9wSW50ZXJhY3Rpb24uZ2V0KCkgc2Vzc2lvbkRpZFVwZGF0ZTpzZXNzaW9u
XS5vcGVyYXRpb247CiB9CiAKIC0gKHZvaWQpX3NpbXVsYXRlRGF0YUludGVyYWN0aW9uRW5kZWQ6
KGlkKXNlc3Npb24KIHsKLSAgICBbc2VsZiBkcm9wSW50ZXJhY3Rpb246X2RhdGFPcGVyYXRpb24u
Z2V0KCkgc2Vzc2lvbkRpZEVuZDpzZXNzaW9uXTsKKyAgICBbc2VsZiBkcm9wSW50ZXJhY3Rpb246
X2Ryb3BJbnRlcmFjdGlvbi5nZXQoKSBzZXNzaW9uRGlkRW5kOnNlc3Npb25dOwogfQogCiAtICh2
b2lkKV9zaW11bGF0ZURhdGFJbnRlcmFjdGlvblBlcmZvcm1PcGVyYXRpb246KGlkKXNlc3Npb24K
IHsKLSAgICBbc2VsZiBkcm9wSW50ZXJhY3Rpb246X2RhdGFPcGVyYXRpb24uZ2V0KCkgcGVyZm9y
bURyb3A6c2Vzc2lvbl07CisgICAgW3NlbGYgZHJvcEludGVyYWN0aW9uOl9kcm9wSW50ZXJhY3Rp
b24uZ2V0KCkgcGVyZm9ybURyb3A6c2Vzc2lvbl07CiB9CiAKIC0gKHZvaWQpX3NpbXVsYXRlRGF0
YUludGVyYWN0aW9uU2Vzc2lvbkRpZEVuZDooaWQpc2Vzc2lvbgogewotICAgIFtzZWxmIGRyYWdJ
bnRlcmFjdGlvbjpfZGF0YUludGVyYWN0aW9uLmdldCgpIHNlc3Npb246c2Vzc2lvbiBkaWRFbmRX
aXRoT3BlcmF0aW9uOlVJRHJvcE9wZXJhdGlvbkNvcHldOworICAgIFtzZWxmIGRyYWdJbnRlcmFj
dGlvbjpfZHJhZ0ludGVyYWN0aW9uLmdldCgpIHNlc3Npb246c2Vzc2lvbiBkaWRFbmRXaXRoT3Bl
cmF0aW9uOlVJRHJvcE9wZXJhdGlvbkNvcHldOwogfQogCiAtICh2b2lkKV9zaW11bGF0ZVdpbGxC
ZWdpbkRhdGFJbnRlcmFjdGlvbldpdGhTZXNzaW9uOihpZClzZXNzaW9uCiB7Ci0gICAgW3NlbGYg
ZHJhZ0ludGVyYWN0aW9uOl9kYXRhSW50ZXJhY3Rpb24uZ2V0KCkgc2Vzc2lvbldpbGxCZWdpbjpz
ZXNzaW9uXTsKKyAgICBbc2VsZiBkcmFnSW50ZXJhY3Rpb246X2RyYWdJbnRlcmFjdGlvbi5nZXQo
KSBzZXNzaW9uV2lsbEJlZ2luOnNlc3Npb25dOwogfQogCiAtIChOU0FycmF5ICopX3NpbXVsYXRl
ZEl0ZW1zRm9yU2Vzc2lvbjooaWQpc2Vzc2lvbgogewotICAgIHJldHVybiBbc2VsZiBkcmFnSW50
ZXJhY3Rpb246X2RhdGFJbnRlcmFjdGlvbi5nZXQoKSBpdGVtc0ZvckJlZ2lubmluZ1Nlc3Npb246
c2Vzc2lvbl07CisgICAgcmV0dXJuIFtzZWxmIGRyYWdJbnRlcmFjdGlvbjpfZHJhZ0ludGVyYWN0
aW9uLmdldCgpIGl0ZW1zRm9yQmVnaW5uaW5nU2Vzc2lvbjpzZXNzaW9uXTsKIH0KIAogLSAodm9p
ZClfc2ltdWxhdGVQcmVwYXJlRm9yRGF0YUludGVyYWN0aW9uU2Vzc2lvbjooaWQpc2Vzc2lvbiBj
b21wbGV0aW9uOihkaXNwYXRjaF9ibG9ja190KWNvbXBsZXRpb24KIHsKLSAgICBbc2VsZiBfZHJh
Z0ludGVyYWN0aW9uOl9kYXRhSW50ZXJhY3Rpb24uZ2V0KCkgcHJlcGFyZUZvclNlc3Npb246c2Vz
c2lvbiBjb21wbGV0aW9uOmNvbXBsZXRpb25dOworICAgIFtzZWxmIF9kcmFnSW50ZXJhY3Rpb246
X2RyYWdJbnRlcmFjdGlvbi5nZXQoKSBwcmVwYXJlRm9yU2Vzc2lvbjpzZXNzaW9uIGNvbXBsZXRp
b246Y29tcGxldGlvbl07CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggODMxZGI3MzdiNTAyYTcwNjJlOGZmMjViYTNk
YmIyYWFmZDI0ZmY1MC4uYTI3ZmU2Zjg1NGQ3ZTViOWU5MGM3NDc1MTk1YzdhNmI5MDJjMWM1NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0yMDU1LDYgKzIwNTUsOCBAQAogCQlGNDA5QkExODFFNkU2NEJDMDA5REEyOEUgLyogV0tEcmFn
RGVzdGluYXRpb25BY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY0MDlCQTE3MUU2RTY0QjMwMDlEQTI4RSAvKiBXS0RyYWdEZXN0aW5hdGlvbkFj
dGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUY0NERGRUIyMUU5RTc1MkYwMDM4RDE5NiAvKiBXZWJJY29uVXRpbGl0aWVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDRERkVCMDFFOUU3NTJGMDAz
OEQxOTYgLyogV2ViSWNvblV0aWxpdGllcy5oICovOyB9OwogCQlGNDRERkVCMzFFOUU3NTJGMDAz
OEQxOTYgLyogV2ViSWNvblV0aWxpdGllcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY0NERGRUIxMUU5RTc1MkYwMDM4RDE5NiAvKiBXZWJJY29uVXRp
bGl0aWVzLm1tICovOyB9OworCQlGNDk2QTQzMTFGNThBMjcyMDA0QzE3NTcgLyogRHJhZ0Ryb3BJ
bnRlcmFjdGlvblN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNDk2QTQyRjFGNThBMjcyMDA0QzE3NTcgLyogRHJhZ0Ryb3BJbnRlcmFjdGlvblN0
YXRlLmggKi87IH07CisJCUY0OTZBNDMyMUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVy
YWN0aW9uU3RhdGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNDk2QTQzMDFGNThBMjcyMDA0QzE3NTcgLyogRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRl
Lm1tICovOyB9OwogCQlGNjExM0UyNTEyNkNFMTgyMDA1N0QwQTcgLyogQVBJVXNlckNvbnRlbnRV
UkxQYXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNjExM0UyNDEyNkNFMTgyMDA1N0QwQTcgLyogQVBJVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmgg
Ki87IH07CiAJCUY2MTEzRTI4MTI2Q0UxOUIwMDU3RDBBNyAvKiBXS1VzZXJDb250ZW50VVJMUGF0
dGVybi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NjExM0UyNjEyNkNFMTlCMDA1N0QwQTcgLyogV0tVc2VyQ29udGVudFVSTFBhdHRlcm4uY3BwICov
OyB9OwogCQlGNjExM0UyOTEyNkNFMTlCMDA1N0QwQTcgLyogV0tVc2VyQ29udGVudFVSTFBhdHRl
cm4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY2MTEz
RTI3MTI2Q0UxOUIwMDU3RDBBNyAvKiBXS1VzZXJDb250ZW50VVJMUGF0dGVybi5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00NDU0LDYgKzQ0NTYs
OCBAQAogCQlGNDA5QkExNzFFNkU2NEIzMDA5REEyOEUgLyogV0tEcmFnRGVzdGluYXRpb25BY3Rp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tEcmFnRGVzdGluYXRpb25B
Y3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ0REZFQjAxRTlFNzUyRjAw
MzhEMTk2IC8qIFdlYkljb25VdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gV2ViSWNvblV0aWxpdGllcy5oOyBwYXRoID0gaW9zL1dlYkljb25VdGlsaXRpZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ0REZFQjExRTlFNzUyRjAwMzhEMTk2IC8q
IFdlYkljb25VdGlsaXRpZXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5h
bWUgPSBXZWJJY29uVXRpbGl0aWVzLm1tOyBwYXRoID0gaW9zL1dlYkljb25VdGlsaXRpZXMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0OTZBNDJGMUY1OEEyNzIwMDRDMTc1NyAv
KiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRHJhZ0Ryb3BJbnRl
cmFjdGlvblN0YXRlLmg7IHBhdGggPSBpb3MvRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0OTZBNDMwMUY1OEEyNzIwMDRDMTc1NyAvKiBE
cmFnRHJvcEludGVyYWN0aW9uU3RhdGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBEcmFnRHJv
cEludGVyYWN0aW9uU3RhdGUubW07IHBhdGggPSBpb3MvRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRl
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNjExM0UyNDEyNkNFMTgyMDA1N0Qw
QTcgLyogQVBJVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEFQSVVzZXJDb250ZW50VVJMUGF0dGVybi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGNjExM0UyNjEyNkNFMTlCMDA1N0QwQTcgLyogV0tVc2VyQ29udGVudFVSTFBh
dHRlcm4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tVc2VyQ29u
dGVudFVSTFBhdHRlcm4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNjExM0Uy
NzEyNkNFMTlCMDA1N0QwQTcgLyogV0tVc2VyQ29udGVudFVSTFBhdHRlcm4uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tVc2VyQ29udGVudFVSTFBhdHRlcm4uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU0ODAsNiArNTQ4NCw4IEBACiAJCQkJQTE5REQzQkYx
RDA3RDE2ODAwQUM4MjNCIC8qIF9XS1dlYlZpZXdQcmludEZvcm1hdHRlckludGVybmFsLmggKi8s
CiAJCQkJMUFENEMxOTExQjM5RjMzMjAwQUJDMjhFIC8qIEFwcGxpY2F0aW9uU3RhdGVUcmFja2Vy
LmggKi8sCiAJCQkJMUFENEMxOTAxQjM5RjMzMjAwQUJDMjhFIC8qIEFwcGxpY2F0aW9uU3RhdGVU
cmFja2VyLm1tICovLAorCQkJCUY0OTZBNDJGMUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcElu
dGVyYWN0aW9uU3RhdGUuaCAqLywKKwkJCQlGNDk2QTQzMDFGNThBMjcyMDA0QzE3NTcgLyogRHJh
Z0Ryb3BJbnRlcmFjdGlvblN0YXRlLm1tICovLAogCQkJCTJERDQ1QURDMUU1Rjg5NzIwMDZDMzU1
RiAvKiBJbnB1dFZpZXdVcGRhdGVEZWZlcnJlci5oICovLAogCQkJCTJERDQ1QUREMUU1Rjg5NzIw
MDZDMzU1RiAvKiBJbnB1dFZpZXdVcGRhdGVEZWZlcnJlci5tbSAqLywKIAkJCQkwRjBDMzY1RDE4
QzExMEE1MDBGNjA3RDcgLyogTGF5ZXJSZXByZXNlbnRhdGlvbi5tbSAqLywKQEAgLTg0NjgsNiAr
ODQ3NCw3IEBACiAJCQkJMUFEMjVFOTYxNjdBQjA4MTAwRUE5QkNEIC8qIERvd25sb2FkUHJveHlN
YXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjdENjFBMTI4OEI5RDkwMENGRDA4QyAvKiBEb3du
bG9hZFByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1MTczODgxMTJERjhGNEYw
MEVFM0Y0NyAvKiBEcmFnQ29udHJvbGxlckFjdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjQ5
NkE0MzExRjU4QTI3MjAwNEMxNzU3IC8qIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM4NDUyQTgxMTYyQzgwOTAwQ0FCOUI1IC8qIERyYXdpbmdBcmVhLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkI2NTkyMzEyMDhCNERCMDA0NDgxNkMgLyogRHJhd2luZ0Fy
ZWFJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTY0MjI5QTEyREQwMjkyMDBDQUFFMkMgLyog
RHJhd2luZ0FyZWFNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDAyOCw2ICsxMDAzNSw3
IEBACiAJCQkJMUFCN0Q0Q0IxMjg4QUFBNzAwQ0ZEMDhDIC8qIERvd25sb2FkUHJveHkuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUFEMjVFOTUxNjdBQjA4MTAwRUE5QkNEIC8qIERvd25sb2FkUHJv
eHlNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCN0Q2MTkxMjg4QjlEOTAwQ0ZEMDhDIC8q
IERvd25sb2FkUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRjQ5
NkE0MzIxRjU4QTI3MjAwNEMxNzU3IC8qIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUJDODQ1MkE3MTE2MkM4MDkwMENBQjlCNSAvKiBEcmF3aW5nQXJlYS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTY0MjI5OTEyREQwMjkyMDBDQUFFMkMgLyogRHJhd2lu
Z0FyZWFNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyNjUyMTYxMTgy
NjA4MTAwMjQzRTEyIC8qIERyYXdpbmdBcmVhUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYg
LS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzc2ZWQwOTdl
Y2NiMmY2NWU3YmJjMjc5NjYyNWZmMTcyOWRkMzJkYy4uNTA2MGVkZjRlMjM5NTZjMmFiMjU0NDlk
NzgzMTllMzAwMGY4ZDliYSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDE3LTA5LTAzICBXZW5zb24gSHNpZWggIDx3
ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1MgRG5EXSBSZWZhY3RvciBkcmFn
IGFuZCBkcm9wIGxvZ2ljIGluIFdLQ29udGVudFZpZXcgaW4gcHJlcGFyYXRpb24gZm9yIHN1cHBv
cnRpbmcgbXVsdGlwbGUgZHJhZyBpdGVtcyBpbiBhIGRyYWcgc2Vzc2lvbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MjY0CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8zMTE0NDY3ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRzIHR3byBuZXcgaU9TIGRyYWcgYW5kIGRyb3AgdGVzdHMgdG8gY2hl
Y2sgdGhhdCB0aGUgY2xpZW50WCBhbmQgY2xpZW50WSBhdHRyaWJ1dGVzIG9mIG1vdXNlIGV2ZW50
cyBwcm9wYWdhdGVkCisgICAgICAgIHRvIHRoZSBwYWdlIGR1cmluZyBkcm9wIGFyZSBjb3JyZWN0
LiBFYWNoIHRlc3QgZHJhZ3MgZnJvbSBhbiBpbWFnZSBlbGVtZW50IGFuZCBkcm9wcyBpbnRvIHRo
cmVlIGN1c3RvbS1kcm9wLQorICAgICAgICBoYW5kbGluZyBlbGVtZW50czsgYGRyYWdlbnRlcmAs
IGBkcmFnb3ZlcmAsIGFuZCBgZHJvcGAgZXZlbnQgbGlzdGVuZXJzIG9uIHRoZSBib2R5IHRoZW4g
dXNlIHRoZSBjbGllbnRYIGFuZAorICAgICAgICBjbGllbnRZIGV2ZW50IGF0dHJpYnV0ZXMgdG8g
aGl0LXRlc3QgZm9yIGRyb3AgdGFyZ2V0IGVsZW1lbnRzLiBUaGUgZmlyc3QgdGVzdCBpcyBzdWZm
aXhlZCB3aXRoICItQmFzaWMiOyB0aGUKKyAgICAgICAgc2Vjb25kIHRlc3QsIHN1ZmZpeGVkIHdp
dGggIi1XaXRoU2Nyb2xsT2Zmc2V0IiwgbWFrZXMgdGhlIGRvY3VtZW50IHNjcm9sbGFibGUgdG8g
Y2hlY2sgdGhhdCBjbGllbnRZIGlzIGNvcnJlY3QKKyAgICAgICAgd2hlbiBzY3JvbGxlZC4KKwor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvZHJvcC10
YXJnZXRzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0Rh
dGFJbnRlcmFjdGlvblRlc3RzLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6dGVzdERyYWdB
bmREcm9wT250b1RhcmdldEVsZW1lbnRzKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1Qp
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFdLV2ViVmlldy5tbToKKyAgICAg
ICAgKC1bVGVzdFdLV2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0Ol0pOgorCisg
ICAgICAgIExvZyBhIHdhcm5pbmcgbWVzc2FnZSB3aGVuIGFuIEFQSSB0ZXN0IGZhaWxzIGR1ZSB0
byBKYXZhU2NyaXB0IGV2YWx1YXRpb24gaW4gVGVzdFdLV2ViVmlldy4KKwogMjAxNy0wOC0zMSAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dU
S10gU2V2ZXJhbCBJbnB1dE1ldGhvZEZpbHRlciB0ZXN0cyBhcmUgZmFpbGluZyBhbmQgY3Jhc2hp
bmcKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYTBmYWE1ZWM4OTQzNmU2MjdkMTk5YmE5YzFi
MWJjOTAyZTQ1ODg0OS4uMWRiNTU1ZjA2N2JiMzUxMmMzODAzMmUyOTBkZTU4ZTI1MjdjY2YwNiAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY1Niw2ICs2NTYsNyBAQAogCQlFQ0E2ODBDRTFF
NjhDQzA5MDA3MzFEMjAgLyogU3RyaW5nVXRpbGl0aWVzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUNBNjgwQ0QxRTY4Q0MwOTAwNzMxRDIwIC8qIFN0
cmluZ1V0aWxpdGllcy5tbSAqLzsgfTsKIAkJRjQwN0ZFMzkxRjFEMERGQzAwMTdDRjI1IC8qIGVu
b3Jtb3VzLnN2ZyBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNDA3RkUzODFGMUQwREU2MDAxN0NGMjUgLyogZW5vcm1vdXMuc3ZnICovOyB9Owog
CQlGNDE1MDg2RDFEQTA0MEM1MDA0NEJFOUIgLyogcGxheS1hdWRpby1vbi1jbGljay5odG1sIGlu
IENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0MTUw
ODZDMURBMDQwQzEwMDQ0QkU5QiAvKiBwbGF5LWF1ZGlvLW9uLWNsaWNrLmh0bWwgKi87IH07CisJ
CUY0MTk0QUQxMUY1QTMyMDEwMEFERDgzRiAvKiBkcm9wLXRhcmdldHMuaHRtbCBpbiBDb3B5IFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDE5NEFEMDFGNUEy
RUE1MDBBREQ4M0YgLyogZHJvcC10YXJnZXRzLmh0bWwgKi87IH07CiAJCUY0MUFCOTlGMUVGNDY5
NkIwMDgzRkEwOCAvKiBhdXRvZm9jdXMtY29udGVudGVkaXRhYmxlLmh0bWwgaW4gQ29weSBSZXNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQxQUI5OTgxRUY0Njky
QzAwODNGQTA4IC8qIGF1dG9mb2N1cy1jb250ZW50ZWRpdGFibGUuaHRtbCAqLzsgfTsKIAkJRjQx
QUI5QTAxRUY0Njk2QjAwODNGQTA4IC8qIGJhY2tncm91bmQtaW1hZ2UtbGluay1hbmQtaW5wdXQu
aHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNDFBQjk5NzFFRjQ2OTJDMDA4M0ZBMDggLyogYmFja2dyb3VuZC1pbWFnZS1saW5rLWFuZC1p
bnB1dC5odG1sICovOyB9OwogCQlGNDFBQjlBMTFFRjQ2OTZCMDA4M0ZBMDggLyogY29udGVudGVk
aXRhYmxlLWFuZC10ZXh0YXJlYS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0MUFCOTlDMUVGNDY5MkMwMDgzRkEwOCAvKiBjb250ZW50
ZWRpdGFibGUtYW5kLXRleHRhcmVhLmh0bWwgKi87IH07CkBAIC04MjMsNiArODI0LDcgQEAKIAkJ
CQk1NzE0RUNCQjFDQThCRkU0MDAwNTFBQzggLyogRG93bmxvYWRSZXF1ZXN0T3JpZ2luYWxVUkxG
cmFtZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCUY0QTMyRUM0MUYwNUYzODUwMDQ3
QzU0NCAvKiBkcmFnc3RhcnQtY2hhbmdlLXNlbGVjdGlvbi1vZmZzY3JlZW4uaHRtbCBpbiBDb3B5
IFJlc291cmNlcyAqLywKIAkJCQlGNEQ1RTRFODFGMEM1RDM4MDA4QzFBNDkgLyogZHJhZ3N0YXJ0
LWNsZWFyLXNlbGVjdGlvbi5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAorCQkJCUY0MTk0QUQx
MUY1QTMyMDEwMEFERDgzRiAvKiBkcm9wLXRhcmdldHMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAq
LywKIAkJCQlBMTU1MDIyQzFFMDUwRDAzMDBBMjRDNTcgLyogZHVwbGljYXRlLWNvbXBsZXRpb24t
aGFuZGxlci1jYWxscy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTk5ODRGQUNFMUNG
RkIwOTAwMDhEMTk4QyAvKiBlZGl0YWJsZS1ib2R5Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8s
CiAJCQkJRjQ0RDA2NDUxRjM5NUMyNjAwMUEwRTI5IC8qIGVkaXRvci1zdGF0ZS10ZXN0LWhhcm5l
c3MuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKQEAgLTE2NzksNiArMTY4MSw3IEBACiAJCUYz
RkMzRUUyMTM2NzhCNzMwMDEyNkE2NSAvKiBsaWJndGVzdC5hICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgcGF0aCA9IGxpYmd0ZXN0
LmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUY0MDdGRTM4MUYxRDBE
RTYwMDE3Q0YyNSAvKiBlbm9ybW91cy5zdmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gZW5vcm1vdXMuc3ZnOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGNDE1MDg2QzFEQTA0MEMxMDA0NEJFOUIgLyogcGxheS1hdWRp
by1vbi1jbGljay5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gInBsYXktYXVkaW8t
b24tY2xpY2suaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0MTk0QUQwMUY1
QTJFQTUwMEFERDgzRiAvKiBkcm9wLXRhcmdldHMuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsg
cGF0aCA9ICJkcm9wLXRhcmdldHMuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUY0MUFCOTkzMUVGNDY5MkMwMDgzRkEwOCAvKiBpbWFnZS1hbmQtdGV4dGFyZWEuaHRtbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsg
cGF0aCA9ICJpbWFnZS1hbmQtdGV4dGFyZWEuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUY0MUFCOTk0MUVGNDY5MkMwMDgzRkEwOCAvKiBwcmV2ZW50LW9wZXJhdGlvbi5odG1s
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5o
dG1sOyBwYXRoID0gInByZXZlbnQtb3BlcmF0aW9uLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGNDFBQjk5NTFFRjQ2OTJDMDA4M0ZBMDggLyogdGV4dGFyZWEtdG8taW5wdXQu
aHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQuaHRtbDsgcGF0aCA9ICJ0ZXh0YXJlYS10by1pbnB1dC5odG1sIjsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTIxNDgsNiArMjE1MSw3IEBACiAJCQkJNTcxNEVDQkExQ0E4QkZEMTAw
MDUxQUM4IC8qIERvd25sb2FkUmVxdWVzdE9yaWdpbmFsVVJMRnJhbWUuaHRtbCAqLywKIAkJCQlG
NEEzMkVDMzFGMDVGMzc4MDA0N0M1NDQgLyogZHJhZ3N0YXJ0LWNoYW5nZS1zZWxlY3Rpb24tb2Zm
c2NyZWVuLmh0bWwgKi8sCiAJCQkJRjRENUU0RTcxRjBDNUQyNzAwOEMxQTQ5IC8qIGRyYWdzdGFy
dC1jbGVhci1zZWxlY3Rpb24uaHRtbCAqLywKKwkJCQlGNDE5NEFEMDFGNUEyRUE1MDBBREQ4M0Yg
LyogZHJvcC10YXJnZXRzLmh0bWwgKi8sCiAJCQkJQTE1NTAyMkIxRTA1MEJDNTAwQTI0QzU3IC8q
IGR1cGxpY2F0ZS1jb21wbGV0aW9uLWhhbmRsZXItY2FsbHMuaHRtbCAqLywKIAkJCQk5OTg0RkFD
RDFDRkZCMDM4MDA4RDE5OEMgLyogZWRpdGFibGUtYm9keS5odG1sICovLAogCQkJCUY0NEQwNjQ0
MUYzOTVDMEQwMDFBMEUyOSAvKiBlZGl0b3Itc3RhdGUtdGVzdC1oYXJuZXNzLmh0bWwgKi8sCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL2Ryb3AtdGFy
Z2V0cy5odG1sIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9kcm9wLXRh
cmdldHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lODJiMjk0Zjc5N2FkN2IxNGIyZmE0YzMwODkwNTJhOGUw
YmY1YzcyCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9kcm9wLXRhcmdldHMuaHRtbApAQCAtMCwwICsxLDExMSBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Ut
d2lkdGgiPgorPGhlYWQ+Cis8c3R5bGU+CisgICAgYm9keSB7CisgICAgICAgIHdpZHRoOiAxMDAl
OworICAgICAgICBoZWlnaHQ6IDEwMCU7CisgICAgICAgIG1hcmdpbjogMDsKKyAgICB9CisKKyAg
ICBpbWcgeworICAgICAgICB3aWR0aDogMTAwcHg7CisgICAgICAgIGhlaWdodDogMTAwcHg7Cisg
ICAgfQorCisgICAgI3RhcmdldDEgeworICAgICAgICBsZWZ0OiAwOworICAgICAgICB0b3A6IDIw
MHB4OworICAgIH0KKworICAgICN0YXJnZXQyIHsKKyAgICAgICAgbGVmdDogMjAwcHg7CisgICAg
ICAgIHRvcDogMDsKKyAgICB9CisKKyAgICAjdGFyZ2V0MyB7CisgICAgICAgIGxlZnQ6IDIwMHB4
OworICAgICAgICB0b3A6IDIwMHB4OworICAgIH0KKworICAgIC50YXJnZXQgeworICAgICAgICBw
b3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKKyAgICAg
ICAgYm9yZGVyLXJhZGl1czogNTAlOworICAgICAgICB3aWR0aDogMTAwcHg7CisgICAgICAgIGhl
aWdodDogMTAwcHg7CisgICAgICAgIGNvbG9yOiB3aGl0ZTsKKyAgICAgICAgdGV4dC1hbGlnbjog
Y2VudGVyOworICAgICAgICBsaW5lLWhlaWdodDogOTBweDsKKyAgICB9CisKKyAgICAjZGVzY3Jp
cHRpb24geworICAgICAgICBwYWRkaW5nLXRvcDogMjUwcHg7CisgICAgICAgIGRpc3BsYXk6IGJs
b2NrOworICAgIH0KKworICAgICNjb250YWluZXIgeworICAgICAgICBwb3NpdGlvbjogcmVsYXRp
dmU7CisgICAgfQorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHk+CisgICAgPGRpdiBpZD0iY29u
dGFpbmVyIj4KKyAgICA8aW1nIHNyYz0iYXBwbGUuZ2lmIj48L2ltZz4KKyAgICA8ZGl2IGlkPSJ0
YXJnZXQxIiBjbGFzcz0idGFyZ2V0Ij48L2Rpdj4KKyAgICA8ZGl2IGlkPSJ0YXJnZXQyIiBjbGFz
cz0idGFyZ2V0Ij48L2Rpdj4KKyAgICA8ZGl2IGlkPSJ0YXJnZXQzIiBjbGFzcz0idGFyZ2V0Ij48
L2Rpdj4KKyAgICA8Y29kZSBpZD0iZGVzY3JpcHRpb24iPgorICAgICAgICA8ZGl2PlRvIHRlc3Qg
dGhpcyBtYW51YWxseSwgZHJhZyB0aGUgaW1hZ2Ugb250byBlYWNoIG9mIHRoZSB0aHJlZSByZWQg
Y2lyY2xlcy48L2Rpdj4KKyAgICAgICAgPGRpdj5FYWNoIHJlZCBjaXJjbGUgc2hvdWxkIHR1cm4g
Z3JlZW4gdXBvbiBkcmFnZ2luZyBvdmVyIGl0LjwvZGl2PgorICAgICAgICA8ZGl2PlVwb24gZHJv
cCwgdGhlIHRleHQgIlBBU1MiIHNob3VsZCBhcHBlYXIgaW4gZWFjaCB0YXJnZXQuPC9kaXY+Cisg
ICAgPC9jb2RlPgorICAgIDwvZGl2PgorPC9ib2R5PgorCis8c2NyaXB0PgorICAgIGZ1bmN0aW9u
IGVsZW1lbnRBdE1vdXNlRXZlbnQoZSkgeworICAgICAgICBpZiAod2luZG93LnVzZVBhZ2VDb29y
ZGluYXRlcykKKyAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGUu
cGFnZVggLSBwYWdlWE9mZnNldCwgZS5wYWdlWSAtIHBhZ2VZT2Zmc2V0KTsKKyAgICAgICAgcmV0
dXJuIGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpOworICAg
IH0KKworICAgIGZ1bmN0aW9uIHRhcmdldEF0RXZlbnQoZSkgeworICAgICAgICBsZXQgdGFyZ2V0
ID0gZWxlbWVudEF0TW91c2VFdmVudChlKTsKKyAgICAgICAgcmV0dXJuIHRhcmdldCAmJiB0YXJn
ZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCJ0YXJnZXQiKSA/IHRhcmdldCA6IG51bGw7CisgICAgfQor
CisgICAgZnVuY3Rpb24gcmVzZXRUZXN0U3RhdGUoKSB7CisgICAgICAgIHRhcmdldDEuc3R5bGUu
YmFja2dyb3VuZENvbG9yID0gIiI7CisgICAgICAgIHRhcmdldDIuc3R5bGUuYmFja2dyb3VuZENv
bG9yID0gIiI7CisgICAgICAgIHRhcmdldDMuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gIiI7Cisg
ICAgICAgIHRhcmdldDEuaW5uZXJIVE1MID0gIiI7CisgICAgICAgIHRhcmdldDIuaW5uZXJIVE1M
ID0gIiI7CisgICAgICAgIHRhcmdldDMuaW5uZXJIVE1MID0gIiI7CisgICAgfQorCisgICAgZG9j
dW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJkcmFnc3RhcnQiLCByZXNldFRlc3RTdGF0ZSk7
CisgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW50ZXIiLCBldmVudCA9
PiB7CisgICAgICAgIGxldCB0YXJnZXQgPSB0YXJnZXRBdEV2ZW50KGV2ZW50KTsKKyAgICAgICAg
aWYgKHRhcmdldCkKKyAgICAgICAgICAgIHRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAi
Z3JlZW4iOworICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgIH0pOworCisgICAg
ZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIGV2ZW50ID0+IHsKKyAg
ICAgICAgbGV0IHRhcmdldCA9IHRhcmdldEF0RXZlbnQoZXZlbnQpOworICAgICAgICBpZiAodGFy
Z2V0KQorICAgICAgICAgICAgdGFyZ2V0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICJncmVlbiI7
CisgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgfSk7CisKKyAgICBkb2N1bWVu
dC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoImRyb3AiLCBldmVudCA9PiB7CisgICAgICAgIGxldCB0
YXJnZXQgPSB0YXJnZXRBdEV2ZW50KGV2ZW50KTsKKyAgICAgICAgaWYgKHRhcmdldCkKKyAgICAg
ICAgICAgIHRhcmdldC5pbm5lckhUTUwgPSBgPGNvZGU+UEFTUzwvY29kZT5gOworICAgICAgICBl
dmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgIH0pOworPC9zY3JpcHQ+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9EYXRhSW50ZXJhY3Rpb25UZXN0
cy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0RhdGFJbnRlcmFjdGlvblRlc3Rz
Lm1tCmluZGV4IDlhYjJhNjBiNDA5ZDhjZjZhNzg0MmRlZmM4ZjBmOGEzYWFlZTAxMDMuLjNmNzNi
ZjA2NjQ3ODhjYWQ3MDQzYTE2ZmM1NzdlMzAzMTI5OTgxYTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvaW9zL0RhdGFJbnRlcmFjdGlvblRlc3RzLm1tCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0RhdGFJbnRlcmFjdGlvblRlc3RzLm1tCkBAIC0xMDc2
LDYgKzEwNzYsNjIgQEAgVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgQ2FuY2VsbGVkTGlmdERv
ZXNOb3RDYXVzZVN1YnNlcXVlbnREcmFnc1RvRmFpbCkKICAgICBjaGVja1N0cmluZ0FycmF5c0Fy
ZUVxdWFsKEBbQCJkcmFnc3RhcnQiLCBAImRyYWdlbmQiXSwgW291dHB1dFRleHQgY29tcG9uZW50
c1NlcGFyYXRlZEJ5U3RyaW5nOkAiICJdKTsKIH0KIAorc3RhdGljIHZvaWQgdGVzdERyYWdBbmRE
cm9wT250b1RhcmdldEVsZW1lbnRzKFRlc3RXS1dlYlZpZXcgKndlYlZpZXcpCit7CisgICAgYXV0
byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBp
bml0V2l0aFdlYlZpZXc6d2ViVmlld10pOworICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50
TWFrZSg1MCwgNTApIHRvOkNHUG9pbnRNYWtlKDUwLCAyNTApXTsKKyAgICBFWFBFQ1RfV0tfU1RS
RVEoInJnYigwLCAxMjgsIDApIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAImdldENvbXB1dGVkU3R5bGUodGFyZ2V0MSkuYmFja2dyb3VuZENvbG9yIl0pOworICAgIEVY
UEVDVF9XS19TVFJFUSgiUEFTUyIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJ0YXJnZXQxLnRleHRDb250ZW50Il0pOworCisgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNH
UG9pbnRNYWtlKDUwLCA1MCkgdG86Q0dQb2ludE1ha2UoMjUwLCA1MCldOworICAgIEVYUEVDVF9X
S19TVFJFUSgicmdiKDAsIDEyOCwgMCkiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAiZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQyKS5iYWNrZ3JvdW5kQ29sb3IiXSk7Cisg
ICAgRVhQRUNUX1dLX1NUUkVRKCJQQVNTIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAInRhcmdldDIudGV4dENvbnRlbnQiXSk7CisKKyAgICBbc2ltdWxhdG9yIHJ1bkZy
b206Q0dQb2ludE1ha2UoNTAsIDUwKSB0bzpDR1BvaW50TWFrZSgyNTAsIDI1MCldOworICAgIEVY
UEVDVF9XS19TVFJFUSgicmdiKDAsIDEyOCwgMCkiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAiZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQzKS5iYWNrZ3JvdW5kQ29sb3Ii
XSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJQQVNTIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0
aW5nSmF2YVNjcmlwdDpAInRhcmdldDMudGV4dENvbnRlbnQiXSk7Cit9CisKK1RFU1QoRGF0YUlu
dGVyYWN0aW9uVGVzdHMsIERyYWdFdmVudENsaWVudENvb3JkaW5hdGVzQmFzaWMpCit7CisgICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91
c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJkcm9wLXRhcmdldHMiXTsKKworICAgIHRlc3REcmFnQW5k
RHJvcE9udG9UYXJnZXRFbGVtZW50cyh3ZWJWaWV3LmdldCgpKTsKK30KKworVEVTVChEYXRhSW50
ZXJhY3Rpb25UZXN0cywgRHJhZ0V2ZW50Q2xpZW50Q29vcmRpbmF0ZXNXaXRoU2Nyb2xsT2Zmc2V0
KQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcg
c3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHJvcC10YXJnZXRzIl07CisgICAgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuc3R5bGUu
bWFyZ2luID0gJzEwMDBweCAwJyJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IDEwMDAiXTsK
KyAgICBbd2ViVmlldyB3YWl0Rm9yTmV4dFByZXNlbnRhdGlvblVwZGF0ZV07CisKKyAgICB0ZXN0
RHJhZ0FuZERyb3BPbnRvVGFyZ2V0RWxlbWVudHMod2ViVmlldy5nZXQoKSk7Cit9CisKK1RFU1Qo
RGF0YUludGVyYWN0aW9uVGVzdHMsIERyYWdFdmVudFBhZ2VDb29yZGluYXRlc0Jhc2ljKQorewor
ICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hy
b25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHJvcC10YXJnZXRzIl07CisgICAgW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIndpbmRvdy51c2VQYWdlQ29vcmRpbmF0ZXMg
PSB0cnVlIl07CisKKyAgICB0ZXN0RHJhZ0FuZERyb3BPbnRvVGFyZ2V0RWxlbWVudHMod2ViVmll
dy5nZXQoKSk7Cit9CisKK1RFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIERyYWdFdmVudFBhZ2VD
b29yZGluYXRlc1dpdGhTY3JvbGxPZmZzZXQpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAz
MjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6
QCJkcm9wLXRhcmdldHMiXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAiZG9jdW1lbnQuYm9keS5zdHlsZS5tYXJnaW4gPSAnMTAwMHB4IDAnIl07CisgICAgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnNjcm9sbGluZ0Vs
ZW1lbnQuc2Nyb2xsVG9wID0gMTAwMCJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJ3aW5kb3cudXNlUGFnZUNvb3JkaW5hdGVzID0gdHJ1ZSJdOworICAgIFt3
ZWJWaWV3IHdhaXRGb3JOZXh0UHJlc2VudGF0aW9uVXBkYXRlXTsKKworICAgIHRlc3REcmFnQW5k
RHJvcE9udG9UYXJnZXRFbGVtZW50cyh3ZWJWaWV3LmdldCgpKTsKK30KKwogVEVTVChEYXRhSW50
ZXJhY3Rpb25UZXN0cywgRG9Ob3RDcmFzaFdoZW5TZWxlY3Rpb25Jc0NsZWFyZWRJbkRyYWdTdGFy
dCkKIHsKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0V0tXZWJWaWV3Lm1tIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9jb2NvYS9UZXN0V0tXZWJWaWV3Lm1tCmluZGV4IGI3NTZjYTE4NTc5M2Y3ZDNmYzI1
MTMzOWNiYTJkNWM3NzRlY2VmZDUuLjMzOWRjM2I2MzMzNTUyYjZhMjViM2NhNGIwMTExMmNkY2Iw
MTJlNjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFdLV2ViVmll
dy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcubW0KQEAg
LTI0Niw2ICsyNDYsOCBAQCAtIChOU1N0cmluZyAqKXN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6KE5TU3RyaW5nICopc2NyaXB0CiAgICAgICAgIGV2YWxSZXN1bHQgPSBbW05TU3RyaW5nIGFs
bG9jXSBpbml0V2l0aEZvcm1hdDpAIiVAIiwgcmVzdWx0XTsKICAgICAgICAgaXNXYWl0aW5nRm9y
SmF2YVNjcmlwdCA9IHRydWU7CiAgICAgICAgIEVYUEVDVF9UUlVFKCFlcnJvcik7CisgICAgICAg
IGlmIChlcnJvcikKKyAgICAgICAgICAgIE5TTG9nKEAiRW5jb3VudGVyZWQgZXJyb3I6ICVAIHdo
aWxlIGV2YWx1YXRpbmcgc2NyaXB0OiAlQCIsIGVycm9yLCBzY3JpcHQpOwogICAgIH1dOwogCiAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZpc1dhaXRpbmdGb3JKYXZhU2NyaXB0KTsK
</data>
<flag name="review"
          id="340027"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319862</attachid>
            <date>2017-09-04 15:12:14 -0700</date>
            <delta_ts>2017-09-04 16:36:24 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-176264-20170904151214.patch</filename>
            <type>text/plain</type>
            <size>92926</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNTk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTg1YjM0ZjkzNTI0NmZi
NGVlNzU3MDYzNTUwNjMxODJiMzhjNTY1OC4uYTU3MGIyYzBjYTM3NGQyNGZlZjkyYzZmN2FmNDlm
MTdiM2FjYjNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE3LTA5LTA0ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1MgRG5EXSBS
ZWZhY3RvciBkcmFnIGFuZCBkcm9wIGxvZ2ljIGluIFdLQ29udGVudFZpZXcgaW4gcHJlcGFyYXRp
b24gZm9yIHN1cHBvcnRpbmcgbXVsdGlwbGUgZHJhZyBpdGVtcyBpbiBhIGRyYWcgc2Vzc2lvbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MjY0Cisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTE0NDY3ND4KKworICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBBZGxlci4KKworICAgICAgICBNYWtlcyBzb21lIHNtYWxsIGFkanVzdG1lbnRzIHRvIFdl
Ykl0ZW1Qcm92aWRlclBhc3RlYm9hcmQuIFJhdGhlciB0aGFuIGp1c3QgLXNldEl0ZW1Qcm92aWRl
cnM6IG9uIHRoZQorICAgICAgICBXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHdoZW4gaW5pdGlh
dGluZyBhIGRyYWcsIGFsc28gc3RhZ2UgdGhlIFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkxp
c3QgdGhhdCB3aWxsIGJlCisgICAgICAgIHVzZWQgdG8gZ2VuZXJhdGUgYW4gaXRlbSBwcm92aWRl
ci4gV2hpbGUgaXQgd291bGQgYmUgY2xlYW5lciB0byBhdm9pZCBkaXJlY3RseSBzZXR0aW5nIGl0
ZW0gcHJvdmlkZXJzIHNvIHdlCisgICAgICAgIGRvbid0IG92ZXJ3cml0ZSBpdGVtIHByb3ZpZGVy
cyBvbiB0aGUgV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCB3aGVuIGFkZGluZyBpdGVtcyB0byBh
biBleGlzdGluZyBkcmFnIHNlc3Npb24sCisgICAgICAgIHRoaXMgaXNuJ3QgcG9zc2libGUgd2l0
aG91dCBicmVha2luZyBiaW5hcnkgY29tcGFiaWxpdHkgd2l0aCBvbGRlciBVSUtpdCB2ZXJzaW9u
cy4KKworICAgICAgICBJbXBvcnRhbnRseSwgV0tDb250ZW50VmlldyB3aWxsIG5vdyBpZ25vcmUg
YW55IGl0ZW0gcHJvdmlkZXJzIHRoYXQgaGF2ZSBiZWVuIHNldCBvbiB0aGUKKyAgICAgICAgV2Vi
SXRlbVByb3ZpZGVyUGFzdGVib2FyZCB3aGVuIGluaXRpYXRpbmcgYSBkcmFnIG9yIGFkZGluZyBp
dGVtcyB0byBhbiBleGlzdGluZyBkcmFnIHNlc3Npb24sIGFuZCBpbnN0ZWFkIG9ubHkKKyAgICAg
ICAgY29uc2lkZXIgdGhlIHN0YWdlZCByZWdpc3RyYXRpb24gbGlzdCB3aGVuIGdlbmVyYXRpbmcg
aXRlbSBwcm92aWRlcnMgZm9yIGRyYWdnaW5nLiBUaGlzIG9ubHkgaGFzIHRoZSBkcmF3YmFjayBv
ZgorICAgICAgICBnZW5lcmF0aW5nIGFuIHVubmVjZXNzYXJ5IGl0ZW0gcHJvdmlkZXIsIGJ1dCBv
dGhlcndpc2UgbWFpbnRhaW5zIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdoaWxlIGFsbG93aW5n
IHVzIHRvCisgICAgICAgIHByb3ZpZGUgV2ViS2l0MiBzdXBwb3J0IGZvciBtdWx0aXBsZSBpdGVt
cyBwZXIgZHJhZyBzZXNzaW9uLgorCisgICAgICAgIFRlc3RzOiBEYXRhSW50ZXJhY3Rpb25UZXN0
cy5EcmFnRXZlbnRDbGllbnRDb29yZGluYXRlc0Jhc2ljCisgICAgICAgICAgICAgICBEYXRhSW50
ZXJhY3Rpb25UZXN0cy5EcmFnRXZlbnRDbGllbnRDb29yZGluYXRlc1dpdGhTY3JvbGxPZmZzZXQK
KyAgICAgICAgICAgICAgIERhdGFJbnRlcmFjdGlvblRlc3RzLkRyYWdFdmVudFBhZ2VDb29yZGlu
YXRlc0Jhc2ljCisgICAgICAgICAgICAgICBEYXRhSW50ZXJhY3Rpb25UZXN0cy5EcmFnRXZlbnRQ
YWdlQ29vcmRpbmF0ZXNXaXRoU2Nyb2xsT2Zmc2V0CisKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3Mv
QWJzdHJhY3RQYXN0ZWJvYXJkLmg6CisgICAgICAgICogcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFz
dGVib2FyZElPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnJlZ2lzdGVySXRlbVRvUGFzdGVib2Fy
ZCk6CisKKyAgICAgICAgQ2hhbmdlZCB0byBvbmx5IHN0YWdlIHJlZ2lzdHJhdGlvbiBpbmZvIG9u
IHRoZSBpdGVtIHByb3ZpZGVyIHBhc3RlYm9hcmQsIGlmIHBvc3NpYmxlLiBUaGlzIGhhcyBubyBl
ZmZlY3Qgb24gdGhlCisgICAgICAgIGNvcHkvcGFzdGUgY29kZXBhdGgsIHNpbmNlIGl0IHVzZXMg
YSBVSVBhc3RlYm9hcmQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvV2ViSXRlbVByb3ZpZGVy
UGFzdGVib2FyZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJJdGVtUHJvdmlkZXJQYXN0
ZWJvYXJkLm1tOgorCisgICAgICAgIFJlbmFtZSBfcmVnaXN0cmF0aW9uSW5mb0xpc3RzIHRvIF9z
dGFnZWRSZWdpc3RyYXRpb25JbmZvTGlzdCwgYW5kIGNoYW5nZSBpdCBmcm9tIGFuIGFycmF5IG9m
IHJlZ2lzdHJhdGlvbiBpbmZvCisgICAgICAgIGxpc3RzIHRvIGEgc2luZ2xlIHJlZ2lzdHJhdGlv
biBpbmZvIGxpc3QuIFRoaXMgY291bGQgYmUgdXBkYXRlZCBpbiB0aGUgZnV0dXJlIHRvIGJlIGFu
IGFycmF5IG9mIHJlZ2lzdHJhdGlvbgorICAgICAgICBsaXN0cywgYnV0IGN1cnJlbnRseSwgaXQg
c2VydmVzIG5vIHB1cnBvc2UgYW5kIG1ha2VzIGNvb3JkaW5hdGlvbiB3aXRoIERyYWdJdGVtIGlu
Zm8gbW9yZSBkaWZmaWN1bHQuIFRoaXMgd291bGQKKyAgICAgICAgbmVlZCB0byBzdXBwb3J0IG11
bHRpcGxlIHJlZ2lzdHJhdGlvbiBsaXN0cyBpZiB3ZSBhcmUgdG8gYWRkIGEgd2F5IHRvIGJlZ2lu
IGEgZHJhZyBjb250YWluaW5nIG11bHRpcGxlIGl0ZW1zIGluCisgICAgICAgIHZhbmlsbGEgd2Vi
IGNvbnRlbnQsIHN1Y2ggYXMgZHJhZ2dpbmcgbXVsdGlwbGUgc2VsZWN0aW9ucy4KKworICAgICAg
ICAoLVtXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIGluaXRdKToKKyAgICAgICAgKC1bV2ViSXRl
bVByb3ZpZGVyUGFzdGVib2FyZCBzZXRJdGVtUHJvdmlkZXJzOl0pOgorICAgICAgICAoLVtXZWJJ
dGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHN0YWdlUmVnaXN0cmF0aW9uTGlzdDpdKToKKworICAgICAg
ICBTZXRzIHRoZSBzdGFnZWQgaXRlbSBwcm92aWRlciByZWdpc3RyYXRpb24gbGlzdC4KKworICAg
ICAgICAoLVtXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHRha2VSZWdpc3RyYXRpb25MaXN0XSk6
CisKKyAgICAgICAgUmVtb3ZlcyB0aGUgc3RhZ2VkIGl0ZW0gcHJvdmlkZXIgcmVnaXN0cmF0aW9u
IGxpc3QgZnJvbSB0aGUgV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCBhbmQgYWxzbyByZXR1cm5z
IGl0LgorCisgICAgICAgICgtW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgcmVnaXN0cmF0aW9u
SW5mb0F0SW5kZXg6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYkl0ZW1Qcm92aWRlclBhc3Rl
Ym9hcmQgc2V0UmVnaXN0cmF0aW9uSW5mb0xpc3RzOl0pOiBEZWxldGVkLgorCiAyMDE3LTA5LTA0
ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByMjIxNDk0IGFuZCByMjIxNTAwLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBkYThk
OGRkYzI1ZTM1OTQ3NTNkYjEyYWE1NjkyOGZmZjk2YTY5MjIzLi44ZmE1NmE4NjhhYjRmYmVlZWMz
NDMxZmFkYjViZTg3MDMyZTI4MzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNiBAQAorMjAxNy0w
OS0wNCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBb
aU9TIERuRF0gUmVmYWN0b3IgZHJhZyBhbmQgZHJvcCBsb2dpYyBpbiBXS0NvbnRlbnRWaWV3IGlu
IHByZXBhcmF0aW9uIGZvciBzdXBwb3J0aW5nIG11bHRpcGxlIGRyYWcgaXRlbXMgaW4gYSBkcmFn
IHNlc3Npb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NjI2NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzExNDQ2NzQ+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgTW92ZSBEYXRhSW50ZXJhY3Rpb25TdGF0
ZSBmcm9tIFdLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oIHRvIERyYWdEcm9wSW50ZXJhY3Rpb25T
dGF0ZS5oLCBhbmQgYWxzbyByZW5hbWUgaXQgdG8KKyAgICAgICAgRHJhZ0Ryb3BJbnRlcmFjdGlv
blN0YXRlLiBBZGRpdGlvbmFsbHksIHJlZmFjdG9yIGRyYWcgYW5kIGRyb3Agc3RhdGUgaW4gdGhl
IFVJIHByb2Nlc3MgdG8gY2FwdHVyZSBtZXRhZGF0YSBhYm91dAorICAgICAgICB0aGUgZHJhZ2dl
ZCBlbGVtZW50IGluIGEgc2VwYXJhdGUgRHJhZ1NvdXJjZVN0YXRlIHN0cnVjdC4gVGhpcyBwYXRj
aCBhbHNvIG1vdmVzIGRyYWcgYW5kIGRyb3Agc3RhdGUgdHJhbnNpdGlvbgorICAgICAgICBsb2dp
YyB0aGF0IGRvZXNuJ3QgaW52b2x2ZSBXS0NvbnRlbnRWaWV3IGludGVybmFscyBvdXQgb2YgV0tD
b250ZW50VmlldywgYW5kIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mCisgICAgICAgIERyYWdE
cm9wSW50ZXJhY3Rpb25TdGF0ZS4KKworICAgICAgICBUbyBzdXBwb3J0IG11bHRpcGxlIGRyYWcg
aXRlbXMgcGVyIHNlc3Npb24sIHdlIGFsc28gaW50cm9kdWNlIGEgc2ltcGxlIG1lY2hhbmlzbSB0
byB0cmFjZSBhIFVJRHJhZ0l0ZW0gYmFjayB0bworICAgICAgICB0aGUgRHJhZ1NvdXJjZVN0YXRl
IHVzZWQgdG8gZ2VuZXJhdGUgaXQuIFdoZW4gZ2VuZXJhdGluZyBhIERyYWdTb3VyY2VTdGF0ZSwg
d2UgYXNzaWduIGl0IGEgdW5pcXVlIGlkZW50aWZpZXIsCisgICAgICAgIHdoaWNoIHdlIGFsc28g
c2V0IGFzIHRoZSBwcml2YXRlTG9jYWxDb250ZXh0IG9mIGFsbCBVSURyYWdJdGVtcyBnZW5lcmF0
ZWQgd2hlbiBiZWdpbm5pbmcgdGhlIGRyYWcgKHRoaXMKKyAgICAgICAgaW5jbHVkZXMgZHJhZyBp
dGVtcyByZXR1cm5lZCBieSBhbiBpbnRlcm5hbCBjbGllbnQgdGhhdCB1c2VzIG9uZSBvZiB0aGUg
U1BJIGhvb2tzIHRvIGF1Z21lbnQgZHJhZyBpdGVtcyB3aGVuCisgICAgICAgIHN0YXJ0aW5nIGEg
ZHJhZykuIFRoaXMgaXMgc3Vic2VxdWVudGx5IHVzZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9m
IGxpZnQgYW5kIGNhbmNlbGxhdGlvbiBwcmV2aWV3IGRlbGVnYXRlCisgICAgICAgIG1ldGhvZHMg
dG8gc3VwcGx5IHRoZSBhcHByb3ByaWF0ZSBkcmFnIHByZXZpZXcgZm9yIGVhY2ggVUlEcmFnSXRl
bS4KKworICAgICAgICBMYXN0bHksIGZpeCBhIGJ1ZyB3aGVyZWluIHRoZSBwYWdlWCBhbmQgcGFn
ZVkgb2YgbW91c2UgZHJhZyBldmVudHMgYXJlIGluY29uc2lzdGVudCB3aXRoIG90aGVyIHN5bnRo
ZXRpYyBtb3VzZQorICAgICAgICBldmVudHMsIHN1Y2ggYXMgc3ludGhldGljIGNsaWNrcy4gRm9y
IHN5bnRoZXRpYyBjbGlja3MsIHRoZSBQbGF0Zm9ybU1vdXNlRXZlbnQgaXMgaW5pdGlhbGl6ZWQg
d2l0aCB0aGUgc2FtZQorICAgICAgICBwb3NpdGlvbiBhbmQgZ2xvYmFsUG9zaXRpb24uIFdoZXRo
ZXIgdGhpcyBpcyByZWFsbHkgaW50ZW5kZWQgaXMgdW5jbGVhciAoc2VlIGh0dHA6Ly93ZWJraXQu
b3JnL2IvMTczODU1KSwgYnV0CisgICAgICAgIGl0J3MgYSB0cml2aWFsIGNoYW5nZSBmb3Igbm93
IHRvIGtlZXAgbW91c2UgZXZlbnRzIG9uIGlPUyBjb25zaXN0ZW50IGJ5IHR3ZWFraW5nIHRoZSBi
ZWhhdmlvciBkdXJpbmcgZHJhZyBhbmQKKyAgICAgICAgZHJvcC4gU2VlIFRvb2xzL0NoYW5nZUxv
ZyBmb3Igc29tZSBtb3JlIGluZm9ybWF0aW9uLgorCisgICAgICAgICogUGxhdGZvcm0vc3BpL2lv
cy9VSUtpdFNQSS5oOgorCisgICAgICAgIEFkZCAtW1VJRHJhZ0l0ZW0gcHJpdmF0ZUxvY2FsQ29u
dGV4dF0uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL0RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0
ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6RHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlOjpz
dGFnZWREcmFnU291cmNlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6RHJhZ0Ryb3BJbnRlcmFj
dGlvblN0YXRlOjpkcm9wU2Vzc2lvbkRpZEV4aXQpOgorICAgICAgICAoV2ViS2l0OjpEcmFnRHJv
cEludGVyYWN0aW9uU3RhdGU6OmRyb3BTZXNzaW9uV2lsbFBlcmZvcm1Ecm9wKToKKyAgICAgICAg
KFdlYktpdDo6RHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlOjphZGp1c3RlZFBvc2l0aW9uRm9yRHJh
Z0VuZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkRyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZTo6
ZGlkQmVnaW5EcmFnZ2luZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkRyYWdEcm9wSW50ZXJh
Y3Rpb25TdGF0ZTo6aXNQZXJmb3JtaW5nRHJvcCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkRy
YWdEcm9wSW50ZXJhY3Rpb25TdGF0ZTo6ZHJhZ1Nlc3Npb24gY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpEcmFnRHJvcEludGVyYWN0aW9uU3RhdGU6OmRyb3BTZXNzaW9uIGNvbnN0KToKKworICAg
ICAgICBXcmFwIHByaXZhdGUgZHJhZy9kcm9wIHN0YXRlIG1lbWJlciB2YXJpYWJsZXMgYmVoaW5k
IGNvbnN0IGdldHRlcnMsIGFuZCBtb3ZlIGRyYWcgYW5kIGRyb3AgbG9naWMgdGhhdCBpbnZvbHZl
cworICAgICAgICBvbmx5IHRoZSBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUgaW50byBoZWxwZXIg
bWV0aG9kcyBvbiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuCisKKyAgICAgICAgKFdlYktpdDo6
RHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlOjpCbG9ja1B0cjx2b2lkKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvaW9zL0RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5tbTogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OmRyYWdJdGVtTWF0Y2hpbmdJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6Y3Jl
YXRlVGFyZ2V0ZWREcmFnUHJldmlldyk6CisgICAgICAgIChXZWJLaXQ6OnVpSW1hZ2VGb3JJbWFn
ZSk6CisKKyAgICAgICAgTW92ZSBkcmFnIHByZXZpZXcgY3JlYXRpb24gbG9naWMgaGVyZSwgZnJv
bSBXS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0uCisKKyAgICAgICAgKFdlYktpdDo6c2hvdWxk
VXNlVGV4dEluZGljYXRvclRvQ3JlYXRlUHJldmlld0ZvckRyYWdBY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpEcmFnRHJvcEludGVyYWN0aW9uU3RhdGU6OmFjdGl2ZURyYWdTb3VyY2VGb3JJdGVt
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6RHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlOjphbnlB
Y3RpdmVEcmFnU291cmNlSXMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpEcmFnRHJvcEludGVy
YWN0aW9uU3RhdGU6OnByZXBhcmVGb3JEcmFnU2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6OkRy
YWdEcm9wSW50ZXJhY3Rpb25TdGF0ZTo6ZHJhZ1Nlc3Npb25XaWxsQmVnaW4pOgorICAgICAgICAo
V2ViS2l0OjpEcmFnRHJvcEludGVyYWN0aW9uU3RhdGU6OnByZXZpZXdGb3JEcmFnSXRlbSBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OkRyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZTo6ZHJhZ1Nlc3Np
b25XaWxsRGVsYXlTZXREb3duQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6RHJhZ0Ryb3BJ
bnRlcmFjdGlvblN0YXRlOjpkcm9wU2Vzc2lvbkRpZEVudGVyT3JVcGRhdGUpOgorICAgICAgICAo
V2ViS2l0OjpEcmFnRHJvcEludGVyYWN0aW9uU3RhdGU6OnN0YWdlRHJhZ0l0ZW0pOgorICAgICAg
ICAoV2ViS2l0OjpEcmFnRHJvcEludGVyYWN0aW9uU3RhdGU6Omhhc1N0YWdlZERyYWdTb3VyY2Ug
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpEcmFnRHJvcEludGVyYWN0aW9uU3RhdGU6OmNsZWFy
U3RhZ2VkRHJhZ1NvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OkRyYWdEcm9wSW50ZXJhY3Rpb25T
dGF0ZTo6ZHJhZ0FuZERyb3BTZXNzaW9uc0RpZEVuZCk6CisgICAgICAgIChXZWJLaXQ6OkRyYWdE
cm9wSW50ZXJhY3Rpb25TdGF0ZTo6dXBkYXRlUHJldmlld3NGb3JBY3RpdmVEcmFnU291cmNlcyk6
CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaDoKKwor
ICAgICAgICBNb3ZlIGRyYWctYW5kLWRyb3AtcmVsYXRlZCBzdGF0ZSB0aWVkIHRvIHRoZSBXS0Nv
bnRlbnRWaWV3IGhlcmUsIGZyb20gRGF0YUludGVyYWN0aW9uU3RhdGUgKGZvciBpbnN0YW5jZSwg
dGhlCisgICAgICAgIFVJVmlldyBmb3IgdGhlIGRyb3AgY2FyZXQsIHRoZSBXS0NvbnRlbnRWaWV3
IHNuYXBzaG90IHdoZW4gZHJvcHBpbmcsIGFuZCBhIGZsYWcgdXNlIHRvIGtlZXAgdHJhY2sgb2Yg
aGlkaW5nIHRoZQorICAgICAgICBjYWxsb3V0IGJhciB3aGVuIGRyYWdnaW5nIGEgdGV4dCBzZWxl
Y3Rpb24pLgorCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3Mv
V0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9z
dGFydEFzc2lzdGluZ05vZGU6dXNlcklzSW50ZXJhY3Rpbmc6Ymx1clByZXZpb3VzTm9kZTp1c2Vy
T2JqZWN0Ol0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGFjdGlvblNoZWV0QXNzaXN0YW50
OnNob3dDdXN0b21TaGVldEZvckVsZW1lbnQ6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcg
X2RpZENoYW5nZURyYWdJbnRlcmFjdGlvblBvbGljeV0pOgorICAgICAgICAoLVtXS0NvbnRlbnRW
aWV3IHNldHVwRGF0YUludGVyYWN0aW9uRGVsZWdhdGVzXSk6CisgICAgICAgICgtW1dLQ29udGVu
dFZpZXcgdGVhcmRvd25EYXRhSW50ZXJhY3Rpb25EZWxlZ2F0ZXNdKToKKyAgICAgICAgKC1bV0tD
b250ZW50VmlldyBfc3RhcnREcmFnOml0ZW06XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcg
X2RpZEhhbmRsZVN0YXJ0RGF0YUludGVyYWN0aW9uUmVxdWVzdDpdKToKKyAgICAgICAgKC1bV0tD
b250ZW50VmlldyBjb21wdXRlQ2xpZW50QW5kR2xvYmFsUG9pbnRzRm9yRHJvcFNlc3Npb246b3V0
Q2xpZW50UG9pbnQ6b3V0R2xvYmFsUG9pbnQ6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcg
Y2xlYW5VcERyYWdTb3VyY2VTZXNzaW9uU3RhdGVdKToKKyAgICAgICAgKC1bV0tDb250ZW50Vmll
dyBfZGlkQ29uY2x1ZGVFZGl0RGF0YUludGVyYWN0aW9uOl0pOgorICAgICAgICAoLVtXS0NvbnRl
bnRWaWV3IF9kaWRQZXJmb3JtRGF0YUludGVyYWN0aW9uQ29udHJvbGxlck9wZXJhdGlvbjpdKToK
KyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfZGlkQ2hhbmdlRGF0YUludGVyYWN0aW9uQ2FyZXRS
ZWN0OmN1cnJlbnRSZWN0Ol0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGN1cnJlbnREcmFn
T3JEcm9wU2Vzc2lvbl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9yZXN0b3JlQ2FsbG91
dEJhcklmTmVlZGVkXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2RyYWdJbnRlcmFjdGlv
bjpwcmVwYXJlRm9yU2Vzc2lvbjpjb21wbGV0aW9uOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRW
aWV3IGRyYWdJbnRlcmFjdGlvbjppdGVtc0ZvckJlZ2lubmluZ1Nlc3Npb246XSk6CisgICAgICAg
ICgtW1dLQ29udGVudFZpZXcgZHJhZ0ludGVyYWN0aW9uOnByZXZpZXdGb3JMaWZ0aW5nSXRlbTpz
ZXNzaW9uOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGRyYWdJbnRlcmFjdGlvbjp3aWxs
QW5pbWF0ZUxpZnRXaXRoQW5pbWF0b3I6c2Vzc2lvbjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50
VmlldyBkcmFnSW50ZXJhY3Rpb246c2Vzc2lvbldpbGxCZWdpbjpdKToKKyAgICAgICAgKC1bV0tD
b250ZW50VmlldyBkcmFnSW50ZXJhY3Rpb246c2Vzc2lvbjpkaWRFbmRXaXRoT3BlcmF0aW9uOl0p
OgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGRyYWdJbnRlcmFjdGlvbjpwcmV2aWV3Rm9yQ2Fu
Y2VsbGluZ0l0ZW06d2l0aERlZmF1bHQ6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2Ry
YWdJbnRlcmFjdGlvbjppdGVtOnNob3VsZERlbGF5U2V0RG93bkFuaW1hdGlvbldpdGhDb21wbGV0
aW9uOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGRyYWdJbnRlcmFjdGlvbjppdGVtOndp
bGxBbmltYXRlQ2FuY2VsV2l0aEFuaW1hdG9yOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3
IGRyb3BJbnRlcmFjdGlvbjpzZXNzaW9uRGlkRW50ZXI6XSk6CisgICAgICAgICgtW1dLQ29udGVu
dFZpZXcgZHJvcEludGVyYWN0aW9uOnNlc3Npb25EaWRVcGRhdGU6XSk6CisgICAgICAgICgtW1dL
Q29udGVudFZpZXcgZHJvcEludGVyYWN0aW9uOnNlc3Npb25EaWRFeGl0Ol0pOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IGRyb3BJbnRlcmFjdGlvbjpwZXJmb3JtRHJvcDpdKToKKyAgICAgICAg
KC1bV0tDb250ZW50VmlldyBkcm9wSW50ZXJhY3Rpb246c2Vzc2lvbkRpZEVuZDpdKToKKworICAg
ICAgICBQdWxsIG91dCBsb2dpYyB0aGF0IG11dGF0ZXMgZHJhZyBhbmQgZHJvcCBzdGF0ZSBpbnRv
IERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS4gQWRqdXN0IHBsYWNlcyB0aGF0IHByZXZpb3VzbHkK
KyAgICAgICAgYWNjZXNzZWQgRGF0YUludGVyYWN0aW9uU3RhdGUncyBtZW1iZXJzIGRpcmVjdGx5
IHdpdGggY29ycmVzcG9uZGluZyBnZXR0ZXJzIGluIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS4K
KworICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9zaW11bGF0ZURhdGFJbnRlcmFjdGlvbkVudGVy
ZWQ6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3NpbXVsYXRlRGF0YUludGVyYWN0aW9u
VXBkYXRlZDpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfc2ltdWxhdGVEYXRhSW50ZXJh
Y3Rpb25FbmRlZDpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfc2ltdWxhdGVEYXRhSW50
ZXJhY3Rpb25QZXJmb3JtT3BlcmF0aW9uOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9z
aW11bGF0ZURhdGFJbnRlcmFjdGlvblNlc3Npb25EaWRFbmQ6XSk6CisgICAgICAgICgtW1dLQ29u
dGVudFZpZXcgX3NpbXVsYXRlV2lsbEJlZ2luRGF0YUludGVyYWN0aW9uV2l0aFNlc3Npb246XSk6
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3NpbXVsYXRlZEl0ZW1zRm9yU2Vzc2lvbjpdKToK
KyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfc2ltdWxhdGVQcmVwYXJlRm9yRGF0YUludGVyYWN0
aW9uU2Vzc2lvbjpjb21wbGV0aW9uOl0pOgorCisgICAgICAgIFJlbmFtZSBfZGF0YUludGVyYWN0
aW9uID0+IF9kcmFnSW50ZXJhY3Rpb24gYW5kIF9kYXRhT3BlcmF0aW9uID0+IF9kcm9wSW50ZXJh
Y3Rpb24uCisKKyAgICAgICAgKHVpSW1hZ2VGb3JJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChz
aG91bGRVc2VUZXh0SW5kaWNhdG9yVG9DcmVhdGVQcmV2aWV3Rm9yRHJhZ0FjdGlvbik6IERlbGV0
ZWQuCisgICAgICAgICgtW1dLQ29udGVudFZpZXcgZHJhZ1ByZXZpZXdGb3JJbWFnZTpmcmFtZUlu
Um9vdFZpZXdDb29yZGluYXRlczpjbGlwcGluZ1JlY3RzSW5GcmFtZUNvb3JkaW5hdGVzOmJhY2tn
cm91bmRDb2xvcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBkcmFnUHJl
dmlld0ZvckN1cnJlbnREYXRhSW50ZXJhY3Rpb25TdGF0ZV0pOiBEZWxldGVkLgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IF90cmFuc2l0aW9uRHJhZ1ByZXZpZXdUb0ltYWdlSWZOZWNlc3Nhcnk6
XSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisKIDIwMTctMDktMDMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFtUaHJlYWRlZCBDb21wb3NpdG9yXSBEZWFkbG9jayBpbiBUaHJlYWRlZERp
c3BsYXlSZWZyZXNoTW9uaXRvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL0Fic3RyYWN0UGFzdGVib2FyZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0Fi
c3RyYWN0UGFzdGVib2FyZC5oCmluZGV4IDk4MzZjYjNmZGZjNDM0YzY5MTBkYzgyZGVkMjMzYjVk
YmI5MjVmZDIuLjlhODhlNzhlNDllOTUwZjEyZWYxMzI3MGRmMjQxM2Y3NDE0NDExMGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9BYnN0cmFjdFBhc3RlYm9hcmQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvQWJzdHJhY3RQYXN0ZWJvYXJkLmgKQEAg
LTQ5LDcgKzQ5LDggQEAgTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KIAogQG9wdGlvbmFsCiAjaWYg
X19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMDAwCi0tICh2b2lkKXNldFJl
Z2lzdHJhdGlvbkluZm9MaXN0czooTlNBcnJheSA8V2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9u
SW5mb0xpc3QgKj4gKilpbmZvOworLSAodm9pZClzdGFnZVJlZ2lzdHJhdGlvbkxpc3Q6KG51bGxh
YmxlIFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0ICopaW5mbzsKKy0gKG51bGxh
YmxlIFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0ICopdGFrZVJlZ2lzdHJhdGlv
bkxpc3Q7CiAjZW5kaWYKIC0gKHZvaWQpc2V0SXRlbXM6KE5TQXJyYXk8TlNEaWN0aW9uYXJ5ICo+
ICopaXRlbXM7CiAtIChOU0FycmF5PE5TU3RyaW5nICo+ICopcGFzdGVib2FyZFR5cGVzQnlGaWRl
bGl0eUZvckl0ZW1BdEluZGV4OihOU1VJbnRlZ2VyKWluZGV4OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0KaW5kZXggMjViZmI3
YTc4N2I0NzExOWEzOTI3YzJlYTFjNjc2MjEwZWI0NWMxZC4uOTFmNmM5YTkxZjQ3MmNkZDBiNTc4
ZDFlNTFjYWMyYzAzZjRiNzYzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tCkBAIC0xNzksMTUgKzE3OSwxMyBAQCBzdGF0
aWMgTlNTdHJpbmcgKndlYklPU1Bhc3RlUGJvYXJkVHlwZSA9IEAiaU9TIHJpY2ggY29udGVudCBw
YXN0ZSBwYXN0ZWJvYXJkIHR5cAogCiBzdGF0aWMgdm9pZCByZWdpc3Rlckl0ZW1Ub1Bhc3RlYm9h
cmQoV2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3QgKnJlcHJlc2VudGF0aW9uc1Rv
UmVnaXN0ZXIsIGlkIDxBYnN0cmFjdFBhc3RlYm9hcmQ+IHBhc3RlYm9hcmQpCiB7Ci0gICAgVUlJ
dGVtUHJvdmlkZXIgKml0ZW1Qcm92aWRlciA9IFtyZXByZXNlbnRhdGlvbnNUb1JlZ2lzdGVyIGl0
ZW1Qcm92aWRlcl07Ci0gICAgaWYgKCFpdGVtUHJvdmlkZXIpIHsKKyAgICBpZiAoVUlJdGVtUHJv
dmlkZXIgKml0ZW1Qcm92aWRlciA9IHJlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXIuaXRlbVByb3Zp
ZGVyKQorICAgICAgICBbcGFzdGVib2FyZCBzZXRJdGVtUHJvdmlkZXJzOkBbIGl0ZW1Qcm92aWRl
ciBdXTsKKyAgICBlbHNlCiAgICAgICAgIFtwYXN0ZWJvYXJkIHNldEl0ZW1Qcm92aWRlcnM6QFsg
XV07Ci0gICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBbcGFzdGVib2FyZCBzZXRJdGVtUHJv
dmlkZXJzOkBbIGl0ZW1Qcm92aWRlciBdXTsKLSAgICBpZiAoW3Bhc3RlYm9hcmQgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3RvcihzZXRSZWdpc3RyYXRpb25JbmZvTGlzdHM6KV0pCi0gICAgICAg
IFtwYXN0ZWJvYXJkIHNldFJlZ2lzdHJhdGlvbkluZm9MaXN0czpAWyByZXByZXNlbnRhdGlvbnNU
b1JlZ2lzdGVyIF1dOworICAgIGlmIChbcGFzdGVib2FyZCByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKHN0YWdlUmVnaXN0cmF0aW9uTGlzdDopXSkKKyAgICAgICAgW3Bhc3RlYm9hcmQgc3Rh
Z2VSZWdpc3RyYXRpb25MaXN0OnJlcHJlc2VudGF0aW9uc1RvUmVnaXN0ZXJdOwogfQogCiAjZWxz
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkl0ZW1Qcm92aWRl
clBhc3RlYm9hcmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJJdGVtUHJvdmlk
ZXJQYXN0ZWJvYXJkLmgKaW5kZXggMjUwOGZkMWYxYzRiYjcyOWE4Y2YzMzQxZGFjYWRlODRhZmFh
NGVmOC4uYjkyYTI3NDBlNTlhNTJlM2E0MDYyZjFlNTViMTNkNzY2ZTc5MDk5NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViSXRlbVByb3ZpZGVyUGFzdGVi
b2FyZC5oCkBAIC03NiwxMCArNzYsNiBAQCBXRUJDT1JFX0VYUE9SVCBAaW50ZXJmYWNlIFdlYkl0
ZW1Qcm92aWRlclBhc3RlYm9hcmQgOiBOU09iamVjdDxBYnN0cmFjdFBhc3RlYm9hcgogCiArIChp
bnN0YW5jZXR5cGUpc2hhcmVkSW5zdGFuY2U7CiAKLS8vIFJlZ2lzdHJhdGlvbiBpbmZvIGxpc3Rz
IGFyZSBvbmx5IGF2YWlsYWJsZSB1cG9uIHN0YXJ0aW5nIGRhdGEgaW50ZXJhY3Rpb24uCi0tIChX
ZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdCAqKXJlZ2lzdHJhdGlvbkluZm9BdElu
ZGV4OihOU1VJbnRlZ2VyKWluZGV4OwotLSAoVUlJdGVtUHJvdmlkZXIgKilpdGVtUHJvdmlkZXJB
dEluZGV4OihOU1VJbnRlZ2VyKWluZGV4OwotCiBAcHJvcGVydHkgKGNvcHksIG5vbmF0b21pYywg
bnVsbGFibGUpIE5TQXJyYXk8X19raW5kb2YgTlNJdGVtUHJvdmlkZXIgKj4gKml0ZW1Qcm92aWRl
cnM7CiBAcHJvcGVydHkgKHJlYWRvbmx5LCBub25hdG9taWMpIE5TSW50ZWdlciBudW1iZXJPZkl0
ZW1zOwogQHByb3BlcnR5IChyZWFkb25seSwgbm9uYXRvbWljKSBOU0ludGVnZXIgY2hhbmdlQ291
bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViSXRlbVByb3Zp
ZGVyUGFzdGVib2FyZC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJJdGVtUHJv
dmlkZXJQYXN0ZWJvYXJkLm1tCmluZGV4IGQ4NjI2OWE3MWI2YzY2MjUxNGVkMzJkYmMwOWYxMTY0
ZTJjZjJiMmQuLjRiYmI2MWNjNDdmZWI1NWZhNGRlZWNhOGJjYmFmNjAwMGE2ODk3NWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJJdGVtUHJvdmlkZXJQYXN0ZWJv
YXJkLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJJdGVtUHJvdmlkZXJQ
YXN0ZWJvYXJkLm1tCkBAIC0yMDcsNyArMjA3LDcgQEAgQGltcGxlbWVudGF0aW9uIFdlYkl0ZW1Q
cm92aWRlclBhc3RlYm9hcmQgewogICAgIFJldGFpblB0cjxOU0FycmF5PiBfY2FjaGVkVHlwZUlk
ZW50aWZpZXJzOwogICAgIFJldGFpblB0cjxOU0FycmF5PiBfdHlwZVRvRmlsZVVSTE1hcHM7CiAg
ICAgUmV0YWluUHRyPE5TQXJyYXk+IF9zdXBwb3J0ZWRUeXBlSWRlbnRpZmllcnM7Ci0gICAgUmV0
YWluUHRyPE5TQXJyYXk+IF9yZWdpc3RyYXRpb25JbmZvTGlzdHM7CisgICAgUmV0YWluUHRyPFdl
Ykl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0PiBfc3RhZ2VkUmVnaXN0cmF0aW9uSW5m
b0xpc3Q7CiB9CiAKICsgKGluc3RhbmNldHlwZSlzaGFyZWRJbnN0YW5jZQpAQCAtMjI4LDcgKzIy
OCw3IEBAIC0gKGluc3RhbmNldHlwZSlpbml0CiAgICAgICAgIF9wZW5kaW5nT3BlcmF0aW9uQ291
bnQgPSAwOwogICAgICAgICBfdHlwZVRvRmlsZVVSTE1hcHMgPSBhZG9wdE5TKFtbTlNBcnJheSBh
bGxvY10gaW5pdF0pOwogICAgICAgICBfc3VwcG9ydGVkVHlwZUlkZW50aWZpZXJzID0gbmlsOwot
ICAgICAgICBfcmVnaXN0cmF0aW9uSW5mb0xpc3RzID0gbmlsOworICAgICAgICBfc3RhZ2VkUmVn
aXN0cmF0aW9uSW5mb0xpc3QgPSBuaWw7CiAgICAgfQogICAgIHJldHVybiBzZWxmOwogfQpAQCAt
Mjc3LDcgKzI3Nyw3IEBAIC0gKHZvaWQpc2V0SXRlbVByb3ZpZGVyczooTlNBcnJheTxfX2tpbmRv
ZiBOU0l0ZW1Qcm92aWRlciAqPiAqKWl0ZW1Qcm92aWRlcnMKICAgICBfaXRlbVByb3ZpZGVycyA9
IGl0ZW1Qcm92aWRlcnM7CiAgICAgX2NoYW5nZUNvdW50Kys7CiAgICAgX2NhY2hlZFR5cGVJZGVu
dGlmaWVycyA9IG5pbDsKLSAgICBfcmVnaXN0cmF0aW9uSW5mb0xpc3RzID0gbmlsOworICAgIF9z
dGFnZWRSZWdpc3RyYXRpb25JbmZvTGlzdCA9IG5pbDsKIAogICAgIE5TTXV0YWJsZUFycmF5ICp0
eXBlVG9GaWxlVVJMTWFwcyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTppdGVt
UHJvdmlkZXJzLmNvdW50XTsKICAgICBbaXRlbVByb3ZpZGVycyBlbnVtZXJhdGVPYmplY3RzVXNp
bmdCbG9jazpbdHlwZVRvRmlsZVVSTE1hcHNdIChVSUl0ZW1Qcm92aWRlciAqLCBOU1VJbnRlZ2Vy
LCBCT09MICopIHsKQEAgLTUxNSwxMSArNTE1LDYgQEAgLSAodm9pZClkb0FmdGVyTG9hZGluZ1By
b3ZpZGVkQ29udGVudEludG9GaWxlVVJMczooV2ViSXRlbVByb3ZpZGVyRmlsZUxvYWRCbG9jaykK
ICAgICBkaXNwYXRjaF9ncm91cF9ub3RpZnkoZmlsZUxvYWRpbmdHcm91cC5nZXQoKSwgZGlzcGF0
Y2hfZ2V0X21haW5fcXVldWUoKSwgaXRlbUxvYWRDb21wbGV0aW9uKTsKIH0KIAotLSAoV2ViSXRl
bVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3QgKilyZWdpc3RyYXRpb25JbmZvQXRJbmRleDoo
TlNVSW50ZWdlcilpbmRleAotewotICAgIHJldHVybiBpbmRleCA8IFtfcmVnaXN0cmF0aW9uSW5m
b0xpc3RzIGNvdW50XSA/IFtfcmVnaXN0cmF0aW9uSW5mb0xpc3RzIG9iamVjdEF0SW5kZXg6aW5k
ZXhdIDogbmlsOwotfQotCiAtIChVSUl0ZW1Qcm92aWRlciAqKWl0ZW1Qcm92aWRlckF0SW5kZXg6
KE5TVUludGVnZXIpaW5kZXgKIHsKICAgICByZXR1cm4gaW5kZXggPCBbX2l0ZW1Qcm92aWRlcnMg
Y291bnRdID8gW19pdGVtUHJvdmlkZXJzIG9iamVjdEF0SW5kZXg6aW5kZXhdIDogbmlsOwpAQCAt
NTQ1LDkgKzU0MCwxNiBAQCAtICh2b2lkKWVudW1lcmF0ZUl0ZW1Qcm92aWRlcnNXaXRoQmxvY2s6
KHZvaWQgKF4pKFVJSXRlbVByb3ZpZGVyICppdGVtUHJvdmlkZXIsCiAgICAgW19pdGVtUHJvdmlk
ZXJzIGVudW1lcmF0ZU9iamVjdHNVc2luZ0Jsb2NrOmJsb2NrXTsKIH0KIAotLSAodm9pZClzZXRS
ZWdpc3RyYXRpb25JbmZvTGlzdHM6KE5TQXJyYXkgPFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlv
bkluZm9MaXN0ICo+ICopaW5mb0xpc3RzCistICh2b2lkKXN0YWdlUmVnaXN0cmF0aW9uTGlzdDoo
bnVsbGFibGUgV2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3QgKilpbmZvCit7Cisg
ICAgX3N0YWdlZFJlZ2lzdHJhdGlvbkluZm9MaXN0ID0gaW5mby5udW1iZXJPZkl0ZW1zID8gaW5m
byA6IG5pbDsKK30KKworLSAoV2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3QgKil0
YWtlUmVnaXN0cmF0aW9uTGlzdAogewotICAgIF9yZWdpc3RyYXRpb25JbmZvTGlzdHMgPSBpbmZv
TGlzdHM7CisgICAgYXV0byBzdGFnZWRSZWdpc3RyYXRpb25JbmZvTGlzdCA9IF9zdGFnZWRSZWdp
c3RyYXRpb25JbmZvTGlzdDsKKyAgICBfc3RhZ2VkUmVnaXN0cmF0aW9uSW5mb0xpc3QgPSBuaWw7
CisgICAgcmV0dXJuIHN0YWdlZFJlZ2lzdHJhdGlvbkluZm9MaXN0LmF1dG9yZWxlYXNlKCk7CiB9
CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtp
dFNQSS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKaW5kZXgg
ZWY0OTUzMGU1OTkwZTZhMWM0NmU1ZjU0ZTZiZWJmMDBjOTJiNTk5OC4uYzkxYmI5MjM3ZWM2ZWM2
ZjBkZWNlNzVkNzcwODY5N2Q4NjgyMmM1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkv
aW9zL1VJS2l0U1BJLmgKQEAgLTkwLDYgKzkwLDcgQEAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JU
KQogI2ltcG9ydCA8VUlLaXQvVUlEcmFnSW50ZXJhY3Rpb24uaD4KICNpbXBvcnQgPFVJS2l0L1VJ
RHJhZ0ludGVyYWN0aW9uX1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJRHJhZ0l0ZW1fUHJp
dmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlEcmFnUHJldmlld1BhcmFtZXRlcnMuaD4KICNpbXBv
cnQgPFVJS2l0L1VJRHJhZ1ByZXZpZXdfUHJpdmF0ZS5oPgogI2ltcG9ydCA8VUlLaXQvVUlEcmFn
U2Vzc2lvbi5oPgpAQCAtODk5LDYgKzkwMCwxMCBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50
ZWdlciwgVUlEcmFnT3BlcmF0aW9uKQogQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgZ2V0
dGVyPV9saWZ0RGVsYXksIHNldHRlcj1fc2V0TGlmdERlbGF5OikgTlNUaW1lSW50ZXJ2YWwgbGlm
dERlbGF5OwogQGVuZAogCitAaW50ZXJmYWNlIFVJRHJhZ0l0ZW0gKCkKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCBzdHJvbmcsIG51bGxhYmxlLCBzZXR0ZXI9X3NldFByaXZhdGVMb2NhbENvbnRleHQ6
LCBnZXR0ZXI9X3ByaXZhdGVMb2NhbENvbnRleHQpIGlkIHByaXZhdGVMb2NhbENvbnRleHQ7CitA
ZW5kCisKIEBwcm90b2NvbCBVSVRleHRJbnB1dDsKIEBpbnRlcmZhY2UgX1VJVGV4dERyYWdDYXJl
dFZpZXcgOiBVSVZpZXcKIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aFRleHRJbnB1dFZpZXc6KFVJ
VmlldzxVSVRleHRJbnB1dD4gKil0ZXh0SW5wdXRWaWV3OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL0RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL0RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmEzZDhhZWI3NDJiY2I5YjhiZDU3YzExY2NiZmE0NGU1YjM2ZTM5ZGMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRl
LmgKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShEUkFHX1NVUFBPUlQpICYmIFBMQVRGT1JNKElPUykKKworI2ltcG9ydCAiVUlLaXRTUEku
aCIKKyNpbXBvcnQgPFdlYkNvcmUvRHJhZ0FjdGlvbnMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRHJh
Z0RhdGEuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVGV4dEluZGljYXRvci5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9VUkwuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZC5o
PgorI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Cisj
aW1wb3J0IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBEcmFn
SXRlbTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0cnVjdCBEcmFnU291cmNlU3RhdGUg
eworICAgIFdlYkNvcmU6OkRyYWdTb3VyY2VBY3Rpb24gYWN0aW9uIHsgV2ViQ29yZTo6RHJhZ1Nv
dXJjZUFjdGlvbk5vbmUgfTsKKyAgICBDR1BvaW50IGFkanVzdGVkT3JpZ2luIHsgQ0dQb2ludFpl
cm8gfTsKKyAgICBDR1JlY3QgZWxlbWVudEJvdW5kcyB7IENHUmVjdFplcm8gfTsKKyAgICBSZXRh
aW5QdHI8VUlJbWFnZT4gaW1hZ2U7CisgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpUZXh0SW5k
aWNhdG9yRGF0YT4gaW5kaWNhdG9yRGF0YTsKKyAgICBTdHJpbmcgbGlua1RpdGxlOworICAgIFdl
YkNvcmU6OlVSTCBsaW5rVVJMOworICAgIGJvb2wgcG9zc2libHlOZWVkc0RyYWdQcmV2aWV3VXBk
YXRlIHsgdHJ1ZSB9OworCisgICAgTlNJbnRlZ2VyIGl0ZW1JZGVudGlmaWVyIHsgMCB9OworfTsK
KworY2xhc3MgRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlIHsKK3B1YmxpYzoKKyAgICBib29sIGFu
eUFjdGl2ZURyYWdTb3VyY2VJcyhXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uKSBjb25zdDsKKwor
ICAgIC8vIFRoZXNlIGhlbHBlciBtZXRob2RzIGFyZSB1bmlxdWUgdG8gVUlEcmFnSW50ZXJhY3Rp
b24uCisgICAgdm9pZCBwcmVwYXJlRm9yRHJhZ1Nlc3Npb24oaWQgPFVJRHJhZ1Nlc3Npb24+LCBk
aXNwYXRjaF9ibG9ja190IGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICB2b2lkIGRyYWdTZXNzaW9u
V2lsbEJlZ2luKCk7CisgICAgdm9pZCBzdGFnZURyYWdJdGVtKGNvbnN0IFdlYkNvcmU6OkRyYWdJ
dGVtJiwgVUlJbWFnZSAqKTsKKyAgICBib29sIGhhc1N0YWdlZERyYWdTb3VyY2UoKSBjb25zdDsK
KyAgICBjb25zdCBEcmFnU291cmNlU3RhdGUmIHN0YWdlZERyYWdTb3VyY2UoKSBjb25zdCB7IHJl
dHVybiBtX3N0YWdlZERyYWdTb3VyY2UudmFsdWUoKTsgfQorICAgIGVudW0gY2xhc3MgRGlkQmVj
b21lQWN0aXZlIHsgTm8sIFllcyB9OworICAgIHZvaWQgY2xlYXJTdGFnZWREcmFnU291cmNlKERp
ZEJlY29tZUFjdGl2ZSA9IERpZEJlY29tZUFjdGl2ZTo6Tm8pOworICAgIFVJVGFyZ2V0ZWREcmFn
UHJldmlldyAqcHJldmlld0ZvckRyYWdJdGVtKFVJRHJhZ0l0ZW0gKiwgVUlWaWV3ICpjb250ZW50
VmlldywgVUlWaWV3ICpwcmV2aWV3Q29udGFpbmVyKSBjb25zdDsKKyAgICB2b2lkIGRyYWdTZXNz
aW9uV2lsbERlbGF5U2V0RG93bkFuaW1hdGlvbihkaXNwYXRjaF9ibG9ja190IGNvbXBsZXRpb24p
OworCisgICAgLy8gVGhlc2UgaGVscGVyIG1ldGhvZHMgYXJlIHVuaXF1ZSB0byBVSURyb3BJbnRl
cmFjdGlvbi4KKyAgICB2b2lkIGRyb3BTZXNzaW9uRGlkRW50ZXJPclVwZGF0ZShpZCA8VUlEcm9w
U2Vzc2lvbj4sIGNvbnN0IFdlYkNvcmU6OkRyYWdEYXRhJik7CisgICAgdm9pZCBkcm9wU2Vzc2lv
bkRpZEV4aXQoKSB7IG1fZHJvcFNlc3Npb24gPSBuaWw7IH0KKyAgICB2b2lkIGRyb3BTZXNzaW9u
V2lsbFBlcmZvcm1Ecm9wKCkgeyBtX2lzUGVyZm9ybWluZ0Ryb3AgPSB0cnVlOyB9CisKKyAgICAv
LyBUaGlzIGlzIGludm9rZWQgd2hlbiBib3RoIGRyYWcgYW5kIGRyb3AgaW50ZXJhY3Rpb25zIGFy
ZSBubyBsb25nZXIgYWN0aXZlLgorICAgIHZvaWQgZHJhZ0FuZERyb3BTZXNzaW9uc0RpZEVuZCgp
OworCisgICAgQ0dQb2ludCBhZGp1c3RlZFBvc2l0aW9uRm9yRHJhZ0VuZCgpIGNvbnN0IHsgcmV0
dXJuIG1fYWRqdXN0ZWRQb3NpdGlvbkZvckRyYWdFbmQ7IH0KKyAgICBib29sIGRpZEJlZ2luRHJh
Z2dpbmcoKSBjb25zdCB7IHJldHVybiBtX2RpZEJlZ2luRHJhZ2dpbmc7IH0KKyAgICBib29sIGlz
UGVyZm9ybWluZ0Ryb3AoKSBjb25zdCB7IHJldHVybiBtX2lzUGVyZm9ybWluZ0Ryb3A7IH0KKyAg
ICBpZDxVSURyYWdTZXNzaW9uPiBkcmFnU2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhZ1Nl
c3Npb24uZ2V0KCk7IH0KKyAgICBpZDxVSURyb3BTZXNzaW9uPiBkcm9wU2Vzc2lvbigpIGNvbnN0
IHsgcmV0dXJuIG1fZHJvcFNlc3Npb24uZ2V0KCk7IH0KKyAgICBCbG9ja1B0cjx2b2lkKCk+IHRh
a2VEcmFnU3RhcnRDb21wbGV0aW9uQmxvY2soKSB7IHJldHVybiBXVEZNb3ZlKG1fZHJhZ1N0YXJ0
Q29tcGxldGlvbkJsb2NrKTsgfQorICAgIEJsb2NrUHRyPHZvaWQoKT4gdGFrZURyYWdDYW5jZWxT
ZXREb3duQmxvY2soKSB7IHJldHVybiBXVEZNb3ZlKG1fZHJhZ0NhbmNlbFNldERvd25CbG9jayk7
IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHVwZGF0ZVByZXZpZXdzRm9yQWN0aXZlRHJhZ1NvdXJj
ZXMoKTsKKyAgICBzdGQ6Om9wdGlvbmFsPERyYWdTb3VyY2VTdGF0ZT4gYWN0aXZlRHJhZ1NvdXJj
ZUZvckl0ZW0oVUlEcmFnSXRlbSAqKSBjb25zdDsKKworICAgIENHUG9pbnQgbV9sYXN0R2xvYmFs
UG9zaXRpb24geyBDR1BvaW50WmVybyB9OworICAgIENHUG9pbnQgbV9hZGp1c3RlZFBvc2l0aW9u
Rm9yRHJhZ0VuZCB7IENHUG9pbnRaZXJvIH07CisgICAgYm9vbCBtX2RpZEJlZ2luRHJhZ2dpbmcg
eyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1BlcmZvcm1pbmdEcm9wIHsgZmFsc2UgfTsKKyAgICBS
ZXRhaW5QdHI8aWQgPFVJRHJhZ1Nlc3Npb24+PiBtX2RyYWdTZXNzaW9uOworICAgIFJldGFpblB0
cjxpZCA8VUlEcm9wU2Vzc2lvbj4+IG1fZHJvcFNlc3Npb247CisgICAgQmxvY2tQdHI8dm9pZCgp
PiBtX2RyYWdTdGFydENvbXBsZXRpb25CbG9jazsKKyAgICBCbG9ja1B0cjx2b2lkKCk+IG1fZHJh
Z0NhbmNlbFNldERvd25CbG9jazsKKworICAgIHN0ZDo6b3B0aW9uYWw8RHJhZ1NvdXJjZVN0YXRl
PiBtX3N0YWdlZERyYWdTb3VyY2U7CisgICAgVmVjdG9yPERyYWdTb3VyY2VTdGF0ZT4gbV9hY3Rp
dmVEcmFnU291cmNlczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKERSQUdfU1VQUE9SVCkgJiYgUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL0RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9EcmFnRHJvcEludGVyYWN0aW9uU3RhdGUubW0KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNzNmZjA3YmI0MGUyYjQ5ZTM4MGU0Yjg0NzZiMjBjMTMyMmRiODk2OQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9EcmFnRHJvcEludGVyYWN0aW9u
U3RhdGUubW0KQEAgLTAsMCArMSwyNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmgiCisKKyNpZiBFTkFCTEUo
RFJBR19TVVBQT1JUKSAmJiBQTEFURk9STShJT1MpCisKKyNpbXBvcnQgPFdlYkNvcmUvRHJhZ0l0
ZW0uaD4KKyNpbXBvcnQgPFdlYkNvcmUvSW1hZ2UuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3Rh
dGljIFVJRHJhZ0l0ZW0gKmRyYWdJdGVtTWF0Y2hpbmdJZGVudGlmaWVyKGlkIDxVSURyYWdTZXNz
aW9uPiBzZXNzaW9uLCBOU0ludGVnZXIgaWRlbnRpZmllcikKK3sKKyAgICBmb3IgKFVJRHJhZ0l0
ZW0gKml0ZW0gaW4gc2Vzc2lvbi5pdGVtcykgeworICAgICAgICBpZCBjb250ZXh0ID0gaXRlbS5w
cml2YXRlTG9jYWxDb250ZXh0OworICAgICAgICBpZiAoW2NvbnRleHQgaXNLaW5kT2ZDbGFzczpb
TlNOdW1iZXIgY2xhc3NdXSAmJiBbY29udGV4dCBpbnRlZ2VyVmFsdWVdID09IGlkZW50aWZpZXIp
CisgICAgICAgICAgICByZXR1cm4gaXRlbTsKKyAgICB9CisgICAgcmV0dXJuIG5pbDsKK30KKwor
c3RhdGljIFVJVGFyZ2V0ZWREcmFnUHJldmlldyAqY3JlYXRlVGFyZ2V0ZWREcmFnUHJldmlldyhV
SUltYWdlICppbWFnZSwgVUlWaWV3ICpyb290VmlldywgVUlWaWV3ICpwcmV2aWV3Q29udGFpbmVy
LCBjb25zdCBGbG9hdFJlY3QmIGZyYW1lSW5Sb290Vmlld0Nvb3JkaW5hdGVzLCBjb25zdCBWZWN0
b3I8RmxvYXRSZWN0PiYgY2xpcHBpbmdSZWN0c0luRnJhbWVDb29yZGluYXRlcywgVUlDb2xvciAq
YmFja2dyb3VuZENvbG9yKQoreworICAgIGlmIChmcmFtZUluUm9vdFZpZXdDb29yZGluYXRlcy5p
c0VtcHR5KCkgfHwgIWltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIE5TTXV0
YWJsZUFycmF5ICpjbGlwcGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXMgPSBbTlNNdXRh
YmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6Y2xpcHBpbmdSZWN0c0luRnJhbWVDb29yZGluYXRl
cy5zaXplKCldOworCisgICAgRmxvYXRSZWN0IGZyYW1lSW5Db250YWluZXJDb29yZGluYXRlcyA9
IFtyb290VmlldyBjb252ZXJ0UmVjdDpmcmFtZUluUm9vdFZpZXdDb29yZGluYXRlcyB0b1ZpZXc6
cHJldmlld0NvbnRhaW5lcl07CisgICAgaWYgKGZyYW1lSW5Db250YWluZXJDb29yZGluYXRlcy5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgZmxvYXQgd2lkdGhTY2Fs
aW5nUmF0aW8gPSBmcmFtZUluQ29udGFpbmVyQ29vcmRpbmF0ZXMud2lkdGgoKSAvIGZyYW1lSW5S
b290Vmlld0Nvb3JkaW5hdGVzLndpZHRoKCk7CisgICAgZmxvYXQgaGVpZ2h0U2NhbGluZ1JhdGlv
ID0gZnJhbWVJbkNvbnRhaW5lckNvb3JkaW5hdGVzLmhlaWdodCgpIC8gZnJhbWVJblJvb3RWaWV3
Q29vcmRpbmF0ZXMuaGVpZ2h0KCk7CisgICAgZm9yIChhdXRvIHJlY3QgOiBjbGlwcGluZ1JlY3Rz
SW5GcmFtZUNvb3JkaW5hdGVzKSB7CisgICAgICAgIHJlY3Quc2NhbGUod2lkdGhTY2FsaW5nUmF0
aW8sIGhlaWdodFNjYWxpbmdSYXRpbyk7CisgICAgICAgIFtjbGlwcGluZ1JlY3RWYWx1ZXNJbkZy
YW1lQ29vcmRpbmF0ZXMgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpyZWN0XV07
CisgICAgfQorCisgICAgYXV0byBpbWFnZVZpZXcgPSBhZG9wdE5TKFtbVUlJbWFnZVZpZXcgYWxs
b2NdIGluaXRXaXRoSW1hZ2U6aW1hZ2VdKTsKKyAgICBbaW1hZ2VWaWV3IHNldEZyYW1lOmZyYW1l
SW5Db250YWluZXJDb29yZGluYXRlc107CisKKyAgICBSZXRhaW5QdHI8VUlEcmFnUHJldmlld1Bh
cmFtZXRlcnM+IHBhcmFtZXRlcnM7CisgICAgaWYgKGNsaXBwaW5nUmVjdFZhbHVlc0luRnJhbWVD
b29yZGluYXRlcy5jb3VudCkKKyAgICAgICAgcGFyYW1ldGVycyA9IGFkb3B0TlMoW1tVSURyYWdQ
cmV2aWV3UGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhUZXh0TGluZVJlY3RzOmNsaXBwaW5nUmVj
dFZhbHVlc0luRnJhbWVDb29yZGluYXRlc10pOworICAgIGVsc2UKKyAgICAgICAgcGFyYW1ldGVy
cyA9IGFkb3B0TlMoW1tVSURyYWdQcmV2aWV3UGFyYW1ldGVycyBhbGxvY10gaW5pdF0pOworCisg
ICAgaWYgKGJhY2tncm91bmRDb2xvcikKKyAgICAgICAgW3BhcmFtZXRlcnMgc2V0QmFja2dyb3Vu
ZENvbG9yOmJhY2tncm91bmRDb2xvcl07CisKKyAgICBDR1BvaW50IGNlbnRlckluQ29udGFpbmVy
Q29vcmRpbmF0ZXMgPSB7IENHUmVjdEdldE1pZFgoZnJhbWVJbkNvbnRhaW5lckNvb3JkaW5hdGVz
KSwgQ0dSZWN0R2V0TWlkWShmcmFtZUluQ29udGFpbmVyQ29vcmRpbmF0ZXMpIH07CisgICAgYXV0
byB0YXJnZXQgPSBhZG9wdE5TKFtbVUlEcmFnUHJldmlld1RhcmdldCBhbGxvY10gaW5pdFdpdGhD
b250YWluZXI6cHJldmlld0NvbnRhaW5lciBjZW50ZXI6Y2VudGVySW5Db250YWluZXJDb29yZGlu
YXRlc10pOworICAgIGF1dG8gZHJhZ1ByZXZpZXcgPSBhZG9wdE5TKFtbVUlUYXJnZXRlZERyYWdQ
cmV2aWV3IGFsbG9jXSBpbml0V2l0aFZpZXc6aW1hZ2VWaWV3LmdldCgpIHBhcmFtZXRlcnM6cGFy
YW1ldGVycy5nZXQoKSB0YXJnZXQ6dGFyZ2V0LmdldCgpXSk7CisgICAgcmV0dXJuIGRyYWdQcmV2
aWV3LmF1dG9yZWxlYXNlKCk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8VUlJbWFnZT4gdWlJbWFn
ZUZvckltYWdlKEltYWdlKiBpbWFnZSkKK3sKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY2dJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZSgpOwor
ICAgIGlmICghY2dJbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4g
YWRvcHROUyhbW1VJSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpjZ0ltYWdlLmdldCgpXSk7
Cit9CisKK3N0YXRpYyBib29sIHNob3VsZFVzZVRleHRJbmRpY2F0b3JUb0NyZWF0ZVByZXZpZXdG
b3JEcmFnQWN0aW9uKERyYWdTb3VyY2VBY3Rpb24gYWN0aW9uKQoreworICAgIGlmIChhY3Rpb24g
JiAoRHJhZ1NvdXJjZUFjdGlvbkxpbmsgfCBEcmFnU291cmNlQWN0aW9uU2VsZWN0aW9uKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQorICAg
IGlmIChhY3Rpb24gJiBEcmFnU291cmNlQWN0aW9uQXR0YWNobWVudCkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisjZW5kaWYKKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RkOjpvcHRpb25hbDxE
cmFnU291cmNlU3RhdGU+IERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZTo6YWN0aXZlRHJhZ1NvdXJj
ZUZvckl0ZW0oVUlEcmFnSXRlbSAqaXRlbSkgY29uc3QKK3sKKyAgICBpZiAoIVtpdGVtLnByaXZh
dGVMb2NhbENvbnRleHQgaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgY2xhc3NdXSkKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGF1dG8gaWRlbnRpZmllciA9IFsoTlNOdW1iZXIg
KilpdGVtLnByaXZhdGVMb2NhbENvbnRleHQgaW50ZWdlclZhbHVlXTsKKyAgICBmb3IgKGF1dG8m
IHNvdXJjZSA6IG1fYWN0aXZlRHJhZ1NvdXJjZXMpIHsKKyAgICAgICAgaWYgKHNvdXJjZS5pdGVt
SWRlbnRpZmllciA9PSBpZGVudGlmaWVyKQorICAgICAgICAgICAgcmV0dXJuIHNvdXJjZTsKKyAg
ICB9CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworYm9vbCBEcmFnRHJvcEludGVyYWN0
aW9uU3RhdGU6OmFueUFjdGl2ZURyYWdTb3VyY2VJcyhXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9u
IGFjdGlvbikgY29uc3QKK3sKKyAgICBmb3IgKGF1dG8mIHNvdXJjZSA6IG1fYWN0aXZlRHJhZ1Nv
dXJjZXMpIHsKKyAgICAgICAgaWYgKHNvdXJjZS5hY3Rpb24gJiBhY3Rpb24pCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIERyYWdE
cm9wSW50ZXJhY3Rpb25TdGF0ZTo6cHJlcGFyZUZvckRyYWdTZXNzaW9uKGlkIDxVSURyYWdTZXNz
aW9uPiBzZXNzaW9uLCBkaXNwYXRjaF9ibG9ja190IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAg
IG1fZHJhZ1Nlc3Npb24gPSBzZXNzaW9uOworICAgIG1fZHJhZ1N0YXJ0Q29tcGxldGlvbkJsb2Nr
ID0gY29tcGxldGlvbkhhbmRsZXI7Cit9CisKK3ZvaWQgRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRl
OjpkcmFnU2Vzc2lvbldpbGxCZWdpbigpCit7CisgICAgbV9kaWRCZWdpbkRyYWdnaW5nID0gdHJ1
ZTsKKyAgICB1cGRhdGVQcmV2aWV3c0ZvckFjdGl2ZURyYWdTb3VyY2VzKCk7Cit9CisKK1VJVGFy
Z2V0ZWREcmFnUHJldmlldyAqRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlOjpwcmV2aWV3Rm9yRHJh
Z0l0ZW0oVUlEcmFnSXRlbSAqaXRlbSwgVUlWaWV3ICpjb250ZW50VmlldywgVUlWaWV3ICpwcmV2
aWV3Q29udGFpbmVyKSBjb25zdAoreworICAgIGF1dG8gZm91bmRTb3VyY2UgPSBhY3RpdmVEcmFn
U291cmNlRm9ySXRlbShpdGVtKTsKKyAgICBpZiAoIWZvdW5kU291cmNlKQorICAgICAgICByZXR1
cm4gbmlsOworCisgICAgYXV0byYgc291cmNlID0gZm91bmRTb3VyY2UudmFsdWUoKTsKKyAgICBp
ZiAoKHNvdXJjZS5hY3Rpb24gJiBEcmFnU291cmNlQWN0aW9uSW1hZ2UpICYmIHNvdXJjZS5pbWFn
ZSkgeworICAgICAgICBWZWN0b3I8RmxvYXRSZWN0PiBlbXB0eUNsaXBwaW5nUmVjdHM7CisgICAg
ICAgIHJldHVybiBjcmVhdGVUYXJnZXRlZERyYWdQcmV2aWV3KHNvdXJjZS5pbWFnZS5nZXQoKSwg
Y29udGVudFZpZXcsIHByZXZpZXdDb250YWluZXIsIHNvdXJjZS5lbGVtZW50Qm91bmRzLCBlbXB0
eUNsaXBwaW5nUmVjdHMsIG5pbCk7CisgICAgfQorCisgICAgaWYgKHNob3VsZFVzZVRleHRJbmRp
Y2F0b3JUb0NyZWF0ZVByZXZpZXdGb3JEcmFnQWN0aW9uKHNvdXJjZS5hY3Rpb24pICYmIHNvdXJj
ZS5pbmRpY2F0b3JEYXRhKSB7CisgICAgICAgIGF1dG8gaW5kaWNhdG9yID0gc291cmNlLmluZGlj
YXRvckRhdGEudmFsdWUoKTsKKyAgICAgICAgYXV0byB0ZXh0SW5kaWNhdG9ySW1hZ2UgPSB1aUlt
YWdlRm9ySW1hZ2UoaW5kaWNhdG9yLmNvbnRlbnRJbWFnZS5nZXQoKSk7CisgICAgICAgIHJldHVy
biBjcmVhdGVUYXJnZXRlZERyYWdQcmV2aWV3KHRleHRJbmRpY2F0b3JJbWFnZS5nZXQoKSwgY29u
dGVudFZpZXcsIHByZXZpZXdDb250YWluZXIsIGluZGljYXRvci50ZXh0Qm91bmRpbmdSZWN0SW5S
b290Vmlld0Nvb3JkaW5hdGVzLCBpbmRpY2F0b3IudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29y
ZGluYXRlcywgW1VJQ29sb3IgY29sb3JXaXRoQ0dDb2xvcjpjYWNoZWRDR0NvbG9yKGluZGljYXRv
ci5lc3RpbWF0ZWRCYWNrZ3JvdW5kQ29sb3IpXSk7CisgICAgfQorCisgICAgcmV0dXJuIG5pbDsK
K30KKwordm9pZCBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGU6OmRyYWdTZXNzaW9uV2lsbERlbGF5
U2V0RG93bkFuaW1hdGlvbihkaXNwYXRjaF9ibG9ja190IGNvbXBsZXRpb24pCit7CisgICAgbV9k
cmFnQ2FuY2VsU2V0RG93bkJsb2NrID0gY29tcGxldGlvbjsKK30KKwordm9pZCBEcmFnRHJvcElu
dGVyYWN0aW9uU3RhdGU6OmRyb3BTZXNzaW9uRGlkRW50ZXJPclVwZGF0ZShpZCA8VUlEcm9wU2Vz
c2lvbj4gc2Vzc2lvbiwgY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQoreworICAgIG1fZHJvcFNl
c3Npb24gPSBzZXNzaW9uOworICAgIG1fbGFzdEdsb2JhbFBvc2l0aW9uID0gZHJhZ0RhdGEuZ2xv
YmFsUG9zaXRpb24oKTsKK30KKwordm9pZCBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGU6OnN0YWdl
RHJhZ0l0ZW0oY29uc3QgRHJhZ0l0ZW0mIGl0ZW0sIFVJSW1hZ2UgKmRyYWdJbWFnZSkKK3sKKyAg
ICBzdGF0aWMgTlNJbnRlZ2VyIGN1cnJlbnREcmFnU291cmNlSXRlbUlkZW50aWZpZXIgPSAwOwor
CisgICAgbV9hZGp1c3RlZFBvc2l0aW9uRm9yRHJhZ0VuZCA9IGl0ZW0uZXZlbnRQb3NpdGlvbklu
Q29udGVudENvb3JkaW5hdGVzOworICAgIG1fc3RhZ2VkRHJhZ1NvdXJjZSA9IHt7CisgICAgICAg
IHN0YXRpY19jYXN0PERyYWdTb3VyY2VBY3Rpb24+KGl0ZW0uc291cmNlQWN0aW9uKSwKKyAgICAg
ICAgaXRlbS5ldmVudFBvc2l0aW9uSW5Db250ZW50Q29vcmRpbmF0ZXMsCisgICAgICAgIGl0ZW0u
ZWxlbWVudEJvdW5kcywKKyAgICAgICAgZHJhZ0ltYWdlLAorICAgICAgICBpdGVtLmltYWdlLmlu
ZGljYXRvckRhdGEoKSwKKyAgICAgICAgaXRlbS50aXRsZS5pc0VtcHR5KCkgPyBuaWwgOiAoTlNT
dHJpbmcgKilpdGVtLnRpdGxlLAorICAgICAgICBpdGVtLnVybC5pc0VtcHR5KCkgPyBuaWwgOiAo
TlNVUkwgKilpdGVtLnVybCwKKyAgICAgICAgdHJ1ZSwgLy8gV2UgYXNzdW1lIGhlcmUgdGhhdCBk
cmFnIHByZXZpZXdzIG5lZWQgdG8gYmUgdXBkYXRlZCB1bnRpbCBwcm92ZW4gb3RoZXJ3aXNlIGlu
IHVwZGF0ZVByZXZpZXdzRm9yQWN0aXZlRHJhZ1NvdXJjZXMoKS4KKyAgICAgICAgKytjdXJyZW50
RHJhZ1NvdXJjZUl0ZW1JZGVudGlmaWVyCisgICAgfX07Cit9CisKK2Jvb2wgRHJhZ0Ryb3BJbnRl
cmFjdGlvblN0YXRlOjpoYXNTdGFnZWREcmFnU291cmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9zdGFnZWREcmFnU291cmNlICYmIHN0YWdlZERyYWdTb3VyY2UoKS5hY3Rpb24gIT0gV2ViQ29y
ZTo6RHJhZ1NvdXJjZUFjdGlvbk5vbmU7Cit9CisKK3ZvaWQgRHJhZ0Ryb3BJbnRlcmFjdGlvblN0
YXRlOjpjbGVhclN0YWdlZERyYWdTb3VyY2UoRGlkQmVjb21lQWN0aXZlIGRpZEJlY29tZUFjdGl2
ZSkKK3sKKyAgICBpZiAoZGlkQmVjb21lQWN0aXZlID09IERpZEJlY29tZUFjdGl2ZTo6WWVzKQor
ICAgICAgICBtX2FjdGl2ZURyYWdTb3VyY2VzLmFwcGVuZChzdGFnZWREcmFnU291cmNlKCkpOwor
ICAgIG1fc3RhZ2VkRHJhZ1NvdXJjZSA9IHN0ZDo6bnVsbG9wdDsKK30KKwordm9pZCBEcmFnRHJv
cEludGVyYWN0aW9uU3RhdGU6OmRyYWdBbmREcm9wU2Vzc2lvbnNEaWRFbmQoKQoreworICAgIC8v
IElmIGFueSBvZiBVSUtpdCdzIGNvbXBsZXRpb24gYmxvY2tzIGFyZSBzdGlsbCBpbi1mbGlnaHQg
d2hlbiB0aGUgZHJhZyBpbnRlcmFjdGlvbiBlbmRzLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRo
ZXkgYXJlIHN0aWxsIGludm9rZWQKKyAgICAvLyB0byBwcmV2ZW50IFVJS2l0IGZyb20gZ2V0dGlu
ZyBpbnRvIGFuIGluY29uc2lzdGVudCBzdGF0ZS4KKyAgICBpZiAoYXV0byBjb21wbGV0aW9uQmxv
Y2sgPSB0YWtlRHJhZ0NhbmNlbFNldERvd25CbG9jaygpKQorICAgICAgICBjb21wbGV0aW9uQmxv
Y2soKTsKKworICAgIGlmIChhdXRvIGNvbXBsZXRpb25CbG9jayA9IHRha2VEcmFnU3RhcnRDb21w
bGV0aW9uQmxvY2soKSkKKyAgICAgICAgY29tcGxldGlvbkJsb2NrKCk7Cit9CisKK3ZvaWQgRHJh
Z0Ryb3BJbnRlcmFjdGlvblN0YXRlOjp1cGRhdGVQcmV2aWV3c0ZvckFjdGl2ZURyYWdTb3VyY2Vz
KCkKK3sKKyAgICBmb3IgKGF1dG8mIHNvdXJjZSA6IG1fYWN0aXZlRHJhZ1NvdXJjZXMpIHsKKyAg
ICAgICAgaWYgKCFzb3VyY2UucG9zc2libHlOZWVkc0RyYWdQcmV2aWV3VXBkYXRlKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHNvdXJjZS5hY3Rpb24gJiBEcmFnU291cmNl
QWN0aW9uSW1hZ2UgfHwgIShzb3VyY2UuYWN0aW9uICYgRHJhZ1NvdXJjZUFjdGlvbkxpbmspKSB7
CisgICAgICAgICAgICAvLyBDdXJyZW50bHksIG5vbi1pbWFnZSBsaW5rcyBhcmUgdGhlIG9ubHkg
dHlwZSBvZiBzb3VyY2UgZm9yIHdoaWNoIHdlIG5lZWQgdG8gdXBkYXRlCisgICAgICAgICAgICAv
LyBkcmFnIHByZXZpZXcgcHJvdmlkZXJzIGFmdGVyIHRoZSBpbml0aWFsIGxpZnQuIEFsbCBvdGhl
ciBkcmFnZ2VkIGNvbnRlbnQgc2hvdWxkIG1haW50YWluCisgICAgICAgICAgICAvLyB0aGUgc2Ft
ZSB0YXJnZXRlZCBkcmFnIHByZXZpZXcgdXNlZCBkdXJpbmcgdGhlIGxpZnQgYW5pbWF0aW9uLgor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBVSURyYWdJdGVtICpk
cmFnSXRlbSA9IGRyYWdJdGVtTWF0Y2hpbmdJZGVudGlmaWVyKG1fZHJhZ1Nlc3Npb24uZ2V0KCks
IHNvdXJjZS5pdGVtSWRlbnRpZmllcik7CisgICAgICAgIGlmICghZHJhZ0l0ZW0pCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBhdXRvIGxpbmtEcmFnZ2luZ0NlbnRlciA9IHNvdXJj
ZS5hZGp1c3RlZE9yaWdpbjsKKyAgICAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiB0aXRsZSA9IChO
U1N0cmluZyAqKXNvdXJjZS5saW5rVGl0bGU7CisgICAgICAgIFJldGFpblB0cjxOU1VSTD4gdXJs
ID0gKE5TVVJMICopc291cmNlLmxpbmtVUkw7CisgICAgICAgIGRyYWdJdGVtLnByZXZpZXdQcm92
aWRlciA9IFt0aXRsZSwgdXJsLCBsaW5rRHJhZ2dpbmdDZW50ZXJdICgpIC0+IFVJRHJhZ1ByZXZp
ZXcgKiB7CisgICAgICAgICAgICBVSVVSTERyYWdQcmV2aWV3VmlldyAqcHJldmlld1ZpZXcgPSBb
VUlVUkxEcmFnUHJldmlld1ZpZXcgdmlld1dpdGhUaXRsZTp0aXRsZS5nZXQoKSBVUkw6dXJsLmdl
dCgpXTsKKyAgICAgICAgICAgIHByZXZpZXdWaWV3LmNlbnRlciA9IGxpbmtEcmFnZ2luZ0NlbnRl
cjsKKyAgICAgICAgICAgIFVJRHJhZ1ByZXZpZXdQYXJhbWV0ZXJzICpwYXJhbWV0ZXJzID0gW1tb
VUlEcmFnUHJldmlld1BhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoVGV4dExpbmVSZWN0czpAWyBb
TlNWYWx1ZSB2YWx1ZVdpdGhDR1JlY3Q6cHJldmlld1ZpZXcuYm91bmRzXSBdXSBhdXRvcmVsZWFz
ZV07CisgICAgICAgICAgICByZXR1cm4gW1tbVUlEcmFnUHJldmlldyBhbGxvY10gaW5pdFdpdGhW
aWV3OnByZXZpZXdWaWV3IHBhcmFtZXRlcnM6cGFyYW1ldGVyc10gYXV0b3JlbGVhc2VdOworICAg
ICAgICB9OworCisgICAgICAgIHNvdXJjZS5wb3NzaWJseU5lZWRzRHJhZ1ByZXZpZXdVcGRhdGUg
PSBmYWxzZTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKERSQUdfU1VQUE9SVCkgJiYgUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCmluZGV4IDYw
YTlmNzdiYjVkY2I3MTNiNTNhZjYxY2Q1YzQ3ZTY2ZmEzNDJiMjMuLjlmNzAzZDhiZjI4OWJmYjU4
YjBlZDY0NWI1NGEzODI4NmY5NDU0ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKQEAgLTI4LDYgKzI4LDcgQEAK
ICNpbXBvcnQgIldLQ29udGVudFZpZXcuaCIKIAogI2ltcG9ydCAiQXNzaXN0ZWROb2RlSW5mb3Jt
YXRpb24uaCIKKyNpbXBvcnQgIkRyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oIgogI2ltcG9ydCAi
RWRpdG9yU3RhdGUuaCIKICNpbXBvcnQgIkdlc3R1cmVUeXBlcy5oIgogI2ltcG9ydCAiSW50ZXJh
Y3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24uaCIKQEAgLTM5LDcgKzQwLDYgQEAKICNpbXBvcnQg
IldLU3ludGhldGljQ2xpY2tUYXBHZXN0dXJlUmVjb2duaXplci5oIgogI2ltcG9ydCA8VUlLaXQv
VUlWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NvbG9yLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0Ry
YWdBY3Rpb25zLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UXVhZC5oPgogI2ltcG9ydCA8d3Rm
L0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvRm9yd2FyZC5oPgpAQCAtMTE4LDMzICsxMTgsNiBA
QCB0eXBlZGVmIHN0ZDo6cGFpcjxXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25SZXF1ZXN0
LCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotI2lmIEVO
QUJMRShEUkFHX1NVUFBPUlQpCi0KLXN0cnVjdCBXS0RhdGFJbnRlcmFjdGlvblN0YXRlIHsKLSAg
ICBSZXRhaW5QdHI8VUlJbWFnZT4gaW1hZ2U7Ci0gICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpU
ZXh0SW5kaWNhdG9yRGF0YT4gaW5kaWNhdG9yRGF0YTsKLSAgICBDR1BvaW50IGFkanVzdGVkT3Jp
Z2luIHsgQ0dQb2ludFplcm8gfTsKLSAgICBDR1BvaW50IGxhc3RHbG9iYWxQb3NpdGlvbiB7IENH
UG9pbnRaZXJvIH07Ci0gICAgQ0dSZWN0IGVsZW1lbnRCb3VuZHMgeyBDR1JlY3RaZXJvIH07Ci0g
ICAgQk9PTCBkaWRCZWdpbkRyYWdnaW5nIHsgTk8gfTsKLSAgICBCT09MIGlzUGVyZm9ybWluZ09w
ZXJhdGlvbiB7IE5PIH07Ci0gICAgQk9PTCBpc0FuaW1hdGluZ0NvbmNsdWRlRWRpdERyYWcgeyBO
TyB9OwotICAgIEJPT0wgc2hvdWxkUmVzdG9yZUNhbGxvdXRCYXIgeyBOTyB9OwotICAgIFJldGFp
blB0cjxpZCA8VUlEcmFnU2Vzc2lvbj4+IGRyYWdTZXNzaW9uOwotICAgIFJldGFpblB0cjxpZCA8
VUlEcm9wU2Vzc2lvbj4+IGRyb3BTZXNzaW9uOwotICAgIEJsb2NrUHRyPHZvaWQoKT4gZHJhZ1N0
YXJ0Q29tcGxldGlvbkJsb2NrOwotICAgIEJsb2NrUHRyPHZvaWQoKT4gZHJhZ0NhbmNlbFNldERv
d25CbG9jazsKLSAgICBXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uIHNvdXJjZUFjdGlvbiB7IFdl
YkNvcmU6OkRyYWdTb3VyY2VBY3Rpb25Ob25lIH07Ci0KLSAgICBTdHJpbmcgbGlua1RpdGxlOwot
ICAgIFdlYkNvcmU6OlVSTCBsaW5rVVJMOwotCi0gICAgUmV0YWluUHRyPFVJVmlldz4gdmlzaWJs
ZUNvbnRlbnRWaWV3U25hcHNob3Q7Ci0gICAgUmV0YWluUHRyPF9VSVRleHREcmFnQ2FyZXRWaWV3
PiBjYXJldFZpZXc7Ci19OwotCi0jZW5kaWYgLy8gRU5BQkxFKERSQUdfU1VQUE9SVCkKLQogc3Ry
dWN0IFdLU2VsZWN0aW9uRHJhd2luZ0luZm8gewogICAgIGVudW0gY2xhc3MgU2VsZWN0aW9uVHlw
ZSB7IE5vbmUsIFBsdWdpbiwgUmFuZ2UgfTsKICAgICBXS1NlbGVjdGlvbkRyYXdpbmdJbmZvKCk7
CkBAIC0yNTYsOSArMjI5LDEzIEBAIHN0cnVjdCBXS0F1dG9Db3JyZWN0aW9uRGF0YSB7CiAgICAg
Qk9PTCBfbmVlZHNEZWZlcnJlZEVuZFNjcm9sbGluZ1NlbGVjdGlvblVwZGF0ZTsKIAogI2lmIEVO
QUJMRShEQVRBX0lOVEVSQUNUSU9OKQotICAgIFdlYktpdDo6V0tEYXRhSW50ZXJhY3Rpb25TdGF0
ZSBfZGF0YUludGVyYWN0aW9uU3RhdGU7Ci0gICAgUmV0YWluUHRyPFVJRHJhZ0ludGVyYWN0aW9u
PiBfZGF0YUludGVyYWN0aW9uOwotICAgIFJldGFpblB0cjxVSURyb3BJbnRlcmFjdGlvbj4gX2Rh
dGFPcGVyYXRpb247CisgICAgV2ViS2l0OjpEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUgX2RyYWdE
cm9wSW50ZXJhY3Rpb25TdGF0ZTsKKyAgICBSZXRhaW5QdHI8VUlEcmFnSW50ZXJhY3Rpb24+IF9k
cmFnSW50ZXJhY3Rpb247CisgICAgUmV0YWluUHRyPFVJRHJvcEludGVyYWN0aW9uPiBfZHJvcElu
dGVyYWN0aW9uOworICAgIEJPT0wgX3Nob3VsZFJlc3RvcmVDYWxsb3V0QmFyQWZ0ZXJEcm9wOwor
ICAgIEJPT0wgX2lzQW5pbWF0aW5nQ29uY2x1ZGVFZGl0RHJhZzsKKyAgICBSZXRhaW5QdHI8VUlW
aWV3PiBfdmlzaWJsZUNvbnRlbnRWaWV3U25hcHNob3Q7CisgICAgUmV0YWluUHRyPF9VSVRleHRE
cmFnQ2FyZXRWaWV3PiBfZWRpdERyb3BDYXJldFZpZXc7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24u
bW0KaW5kZXggMzNiOGMyMDIxMzI3N2FlYTc3MDgxNjgxMDRlYjZiYzg3ZjkwNGFhZS4uYTk2ODk2
MTQ2MGIwN2E0NzEwNTRlNTJkZTJhYmI5NWYwM2IzMmUxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC0z
ODYxLDcgKzM4NjEsNyBAQCAtICh2b2lkKV9zdGFydEFzc2lzdGluZ05vZGU6KGNvbnN0IEFzc2lz
dGVkTm9kZUluZm9ybWF0aW9uJilpbmZvcm1hdGlvbiB1c2VySXNJbgogICAgICAgICAvLyBUaGUg
ZGVmYXVsdCBiZWhhdmlvciBpcyB0byBhbGxvdyBub2RlIGFzc2lzdGFuY2UgaWYgdGhlIHVzZXIg
aXMgaW50ZXJhY3Rpbmcgb3IgdGhlIGtleWJvYXJkIGlzIGFscmVhZHkgYWN0aXZlLgogICAgICAg
ICBzaG91bGRTaG93S2V5Ym9hcmQgPSB1c2VySXNJbnRlcmFjdGluZyB8fCBfdGV4dFNlbGVjdGlv
bkFzc2lzdGFudDsKICNpZiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikKLSAgICAgICAgc2hvdWxk
U2hvd0tleWJvYXJkIHw9IF9kYXRhSW50ZXJhY3Rpb25TdGF0ZS5pc1BlcmZvcm1pbmdPcGVyYXRp
b247CisgICAgICAgIHNob3VsZFNob3dLZXlib2FyZCB8PSBfZHJhZ0Ryb3BJbnRlcmFjdGlvblN0
YXRlLmlzUGVyZm9ybWluZ0Ryb3AoKTsKICNlbmRpZgogICAgIH0KICAgICBpZiAoIXNob3VsZFNo
b3dLZXlib2FyZCkKQEAgLTQxMzUsNyArNDEzNSw3IEBAIC0gKEJPT0wpYWN0aW9uU2hlZXRBc3Np
c3RhbnQ6KFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQgKilhc3Npc3RhbnQgc2hvd0N1c3RvbVNoZWV0
CiAgICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZp
ZXc6c2hvd0N1c3RvbVNoZWV0Rm9yRWxlbWVudDopXSkgewogICAgICAgICBpZiAoW3VpRGVsZWdh
dGUgX3dlYlZpZXc6X3dlYlZpZXcgc2hvd0N1c3RvbVNoZWV0Rm9yRWxlbWVudDplbGVtZW50XSkg
ewogI2lmIEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQotICAgICAgICAgICAgQk9PTCBzaG91bGRD
YW5jZWxBbGxUb3VjaGVzID0gIV9kYXRhSW50ZXJhY3Rpb25TdGF0ZS5zb3VyY2VBY3Rpb247Cisg
ICAgICAgICAgICBCT09MIHNob3VsZENhbmNlbEFsbFRvdWNoZXMgPSAhX2RyYWdEcm9wSW50ZXJh
Y3Rpb25TdGF0ZS5kcmFnU2Vzc2lvbigpOwogI2Vsc2UKICAgICAgICAgICAgIEJPT0wgc2hvdWxk
Q2FuY2VsQWxsVG91Y2hlcyA9IFlFUzsKICNlbmRpZgpAQCAtNDIwNiw3ICs0MjA2LDcgQEAgc3Rh
dGljIEJPT0wgc2hvdWxkRW5hYmxlRHJhZ0ludGVyYWN0aW9uRm9yUG9saWN5KF9XS0RyYWdJbnRl
cmFjdGlvblBvbGljeSBwb2xpY3kKIAogLSAodm9pZClfZGlkQ2hhbmdlRHJhZ0ludGVyYWN0aW9u
UG9saWN5CiB7Ci0gICAgW19kYXRhSW50ZXJhY3Rpb24gc2V0RW5hYmxlZDpzaG91bGRFbmFibGVE
cmFnSW50ZXJhY3Rpb25Gb3JQb2xpY3koX3dlYlZpZXcuX2RyYWdJbnRlcmFjdGlvblBvbGljeSld
OworICAgIFtfZHJhZ0ludGVyYWN0aW9uIHNldEVuYWJsZWQ6c2hvdWxkRW5hYmxlRHJhZ0ludGVy
YWN0aW9uRm9yUG9saWN5KF93ZWJWaWV3Ll9kcmFnSW50ZXJhY3Rpb25Qb2xpY3kpXTsKIH0KIAog
LSAoTlNUaW1lSW50ZXJ2YWwpZHJhZ0xpZnREZWxheQpAQCAtNDIyOCwyNSArNDIyOCwyNSBAQCAt
IChpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pd2ViVmlld1VJRGVsZWdhdGUKIAogLSAodm9pZClz
ZXR1cERhdGFJbnRlcmFjdGlvbkRlbGVnYXRlcwogewotICAgIF9kYXRhSW50ZXJhY3Rpb24gPSBh
ZG9wdE5TKFtbVUlEcmFnSW50ZXJhY3Rpb24gYWxsb2NdIGluaXRXaXRoRGVsZWdhdGU6c2VsZl0p
OwotICAgIF9kYXRhT3BlcmF0aW9uID0gYWRvcHROUyhbW1VJRHJvcEludGVyYWN0aW9uIGFsbG9j
XSBpbml0V2l0aERlbGVnYXRlOnNlbGZdKTsKLSAgICBbX2RhdGFJbnRlcmFjdGlvbiBfc2V0TGlm
dERlbGF5OnNlbGYuZHJhZ0xpZnREZWxheV07Ci0gICAgW19kYXRhSW50ZXJhY3Rpb24gc2V0RW5h
YmxlZDpzaG91bGRFbmFibGVEcmFnSW50ZXJhY3Rpb25Gb3JQb2xpY3koX3dlYlZpZXcuX2RyYWdJ
bnRlcmFjdGlvblBvbGljeSldOworICAgIF9kcmFnSW50ZXJhY3Rpb24gPSBhZG9wdE5TKFtbVUlE
cmFnSW50ZXJhY3Rpb24gYWxsb2NdIGluaXRXaXRoRGVsZWdhdGU6c2VsZl0pOworICAgIF9kcm9w
SW50ZXJhY3Rpb24gPSBhZG9wdE5TKFtbVUlEcm9wSW50ZXJhY3Rpb24gYWxsb2NdIGluaXRXaXRo
RGVsZWdhdGU6c2VsZl0pOworICAgIFtfZHJhZ0ludGVyYWN0aW9uIF9zZXRMaWZ0RGVsYXk6c2Vs
Zi5kcmFnTGlmdERlbGF5XTsKKyAgICBbX2RyYWdJbnRlcmFjdGlvbiBzZXRFbmFibGVkOnNob3Vs
ZEVuYWJsZURyYWdJbnRlcmFjdGlvbkZvclBvbGljeShfd2ViVmlldy5fZHJhZ0ludGVyYWN0aW9u
UG9saWN5KV07CiAKLSAgICBbc2VsZiBhZGRJbnRlcmFjdGlvbjpfZGF0YUludGVyYWN0aW9uLmdl
dCgpXTsKLSAgICBbc2VsZiBhZGRJbnRlcmFjdGlvbjpfZGF0YU9wZXJhdGlvbi5nZXQoKV07Cisg
ICAgW3NlbGYgYWRkSW50ZXJhY3Rpb246X2RyYWdJbnRlcmFjdGlvbi5nZXQoKV07CisgICAgW3Nl
bGYgYWRkSW50ZXJhY3Rpb246X2Ryb3BJbnRlcmFjdGlvbi5nZXQoKV07CiB9CiAKIC0gKHZvaWQp
dGVhcmRvd25EYXRhSW50ZXJhY3Rpb25EZWxlZ2F0ZXMKIHsKLSAgICBpZiAoX2RhdGFJbnRlcmFj
dGlvbikKLSAgICAgICAgW3NlbGYgcmVtb3ZlSW50ZXJhY3Rpb246X2RhdGFJbnRlcmFjdGlvbi5n
ZXQoKV07CisgICAgaWYgKF9kcmFnSW50ZXJhY3Rpb24pCisgICAgICAgIFtzZWxmIHJlbW92ZUlu
dGVyYWN0aW9uOl9kcmFnSW50ZXJhY3Rpb24uZ2V0KCldOwogCi0gICAgaWYgKF9kYXRhT3BlcmF0
aW9uKQotICAgICAgICBbc2VsZiByZW1vdmVJbnRlcmFjdGlvbjpfZGF0YU9wZXJhdGlvbi5nZXQo
KV07CisgICAgaWYgKF9kcm9wSW50ZXJhY3Rpb24pCisgICAgICAgIFtzZWxmIHJlbW92ZUludGVy
YWN0aW9uOl9kcm9wSW50ZXJhY3Rpb24uZ2V0KCldOwogCi0gICAgX2RhdGFJbnRlcmFjdGlvbiA9
IG5pbDsKLSAgICBfZGF0YU9wZXJhdGlvbiA9IG5pbDsKKyAgICBfZHJhZ0ludGVyYWN0aW9uID0g
bmlsOworICAgIF9kcm9wSW50ZXJhY3Rpb24gPSBuaWw7CiAKICAgICBbc2VsZiBjbGVhblVwRHJh
Z1NvdXJjZVNlc3Npb25TdGF0ZV07CiB9CkBAIC00MjU1LDEyNCArNDI1NSw0MSBAQCAtICh2b2lk
KV9zdGFydERyYWc6KFJldGFpblB0cjxDR0ltYWdlUmVmPilpbWFnZSBpdGVtOihjb25zdCBEcmFn
SXRlbSYpaXRlbQogewogICAgIEFTU0VSVChpdGVtLnNvdXJjZUFjdGlvbiAhPSBEcmFnU291cmNl
QWN0aW9uTm9uZSk7CiAKLSAgICBfZGF0YUludGVyYWN0aW9uU3RhdGUuaW1hZ2UgPSBhZG9wdE5T
KFtbVUlJbWFnZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOmltYWdlLmdldCgpIHNjYWxlOl9wYWdl
LT5kZXZpY2VTY2FsZUZhY3RvcigpIG9yaWVudGF0aW9uOlVJSW1hZ2VPcmllbnRhdGlvblVwXSk7
Ci0gICAgX2RhdGFJbnRlcmFjdGlvblN0YXRlLmluZGljYXRvckRhdGEgPSBpdGVtLmltYWdlLmlu
ZGljYXRvckRhdGEoKTsKLSAgICBfZGF0YUludGVyYWN0aW9uU3RhdGUuc291cmNlQWN0aW9uID0g
c3RhdGljX2Nhc3Q8RHJhZ1NvdXJjZUFjdGlvbj4oaXRlbS5zb3VyY2VBY3Rpb24pOwotICAgIF9k
YXRhSW50ZXJhY3Rpb25TdGF0ZS5hZGp1c3RlZE9yaWdpbiA9IGl0ZW0uZXZlbnRQb3NpdGlvbklu
Q29udGVudENvb3JkaW5hdGVzOwotICAgIF9kYXRhSW50ZXJhY3Rpb25TdGF0ZS5lbGVtZW50Qm91
bmRzID0gaXRlbS5lbGVtZW50Qm91bmRzOwotICAgIF9kYXRhSW50ZXJhY3Rpb25TdGF0ZS5saW5r
VGl0bGUgPSBpdGVtLnRpdGxlLmlzRW1wdHkoKSA/IG5pbCA6IChOU1N0cmluZyAqKWl0ZW0udGl0
bGU7Ci0gICAgX2RhdGFJbnRlcmFjdGlvblN0YXRlLmxpbmtVUkwgPSBpdGVtLnVybC5pc0VtcHR5
KCkgPyBuaWwgOiAoTlNVUkwgKilpdGVtLnVybDsKKyAgICBhdXRvIGRyYWdJbWFnZSA9IGFkb3B0
TlMoW1tVSUltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6aW1hZ2UuZ2V0KCkgc2NhbGU6X3Bh
Z2UtPmRldmljZVNjYWxlRmFjdG9yKCkgb3JpZW50YXRpb246VUlJbWFnZU9yaWVudGF0aW9uVXBd
KTsKKyAgICBfZHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLnN0YWdlRHJhZ0l0ZW0oaXRlbSwgZHJh
Z0ltYWdlLmdldCgpKTsKIH0KIAogLSAodm9pZClfZGlkSGFuZGxlU3RhcnREYXRhSW50ZXJhY3Rp
b25SZXF1ZXN0OihCT09MKXN0YXJ0ZWQKIHsKLSAgICBCbG9ja1B0cjx2b2lkKCk+IHNhdmVkQ29t
cGxldGlvbkJsb2NrID0gX2RhdGFJbnRlcmFjdGlvblN0YXRlLmRyYWdTdGFydENvbXBsZXRpb25C
bG9jazsKLSAgICBfZGF0YUludGVyYWN0aW9uU3RhdGUuZHJhZ1N0YXJ0Q29tcGxldGlvbkJsb2Nr
ID0gbmlsOworICAgIEJsb2NrUHRyPHZvaWQoKT4gc2F2ZWRDb21wbGV0aW9uQmxvY2sgPSBfZHJh
Z0Ryb3BJbnRlcmFjdGlvblN0YXRlLnRha2VEcmFnU3RhcnRDb21wbGV0aW9uQmxvY2soKTsKICAg
ICBBU1NFUlQoc2F2ZWRDb21wbGV0aW9uQmxvY2spOwogCiAgICAgUkVMRUFTRV9MT0coRHJhZ0Fu
ZERyb3AsICJIYW5kbGluZyBkcmFnIHN0YXJ0IHJlcXVlc3QgKHN0YXJ0ZWQ6ICVkLCBjb21wbGV0
aW9uIGJsb2NrOiAlcCkiLCBzdGFydGVkLCBzYXZlZENvbXBsZXRpb25CbG9jay5nZXQoKSk7CiAg
ICAgaWYgKHNhdmVkQ29tcGxldGlvbkJsb2NrKQogICAgICAgICBzYXZlZENvbXBsZXRpb25CbG9j
aygpOwogCi0gICAgaWYgKCFbX2RhdGFJbnRlcmFjdGlvblN0YXRlLmRyYWdTZXNzaW9uIGl0ZW1z
XS5jb3VudCkgewotICAgICAgICBDR1BvaW50IGFkanVzdGVkT3JpZ2luID0gX2RhdGFJbnRlcmFj
dGlvblN0YXRlLmFkanVzdGVkT3JpZ2luOworICAgIGlmICghX2RyYWdEcm9wSW50ZXJhY3Rpb25T
dGF0ZS5kcmFnU2Vzc2lvbigpLml0ZW1zLmNvdW50KSB7CisgICAgICAgIGF1dG8gcG9zaXRpb25G
b3JEcmFnRW5kID0gcm91bmRlZEludFBvaW50KF9kcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuYWRq
dXN0ZWRQb3NpdGlvbkZvckRyYWdFbmQoKSk7CiAgICAgICAgIFtzZWxmIGNsZWFuVXBEcmFnU291
cmNlU2Vzc2lvblN0YXRlXTsKICAgICAgICAgaWYgKHN0YXJ0ZWQpIHsKICAgICAgICAgICAgIC8v
IEEgY2xpZW50IG9mIHRoZSBPYmplY3RpdmUgQyBTUEkgb3IgVUlLaXQgbWlnaHQgaGF2ZSBwcmV2
ZW50ZWQgdGhlIGRyYWcgZnJvbSBiZWdpbm5pbmcgZW50aXJlbHkgaW4gdGhlIFVJIHByb2Nlc3Ms
IGluIHdoaWNoIGNhc2UKICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gYmFsYW5jZSB0aGUgYGRy
YWdzdGFydGAgZXZlbnQgd2l0aCBhIGBkcmFnZW5kYC4KLSAgICAgICAgICAgIF9wYWdlLT5kcmFn
RW5kZWQocm91bmRlZEludFBvaW50KGFkanVzdGVkT3JpZ2luKSwgcm91bmRlZEludFBvaW50KFtz
ZWxmIGNvbnZlcnRQb2ludDphZGp1c3RlZE9yaWdpbiB0b1ZpZXc6c2VsZi53aW5kb3ddKSwgRHJh
Z09wZXJhdGlvbk5vbmUpOworICAgICAgICAgICAgX3BhZ2UtPmRyYWdFbmRlZChwb3NpdGlvbkZv
ckRyYWdFbmQsIHBvc2l0aW9uRm9yRHJhZ0VuZCwgRHJhZ09wZXJhdGlvbk5vbmUpOwogICAgICAg
ICB9CiAgICAgfQogfQogCi1zdGF0aWMgUmV0YWluUHRyPFVJSW1hZ2U+IHVpSW1hZ2VGb3JJbWFn
ZShSZWZQdHI8SW1hZ2U+IGltYWdlKQotewotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgYXV0byBjZ0ltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlKCk7Ci0g
ICAgaWYgKCFjZ0ltYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBh
ZG9wdE5TKFtbVUlJbWFnZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOmNnSW1hZ2UuZ2V0KCldKTsK
LX0KLQotc3RhdGljIEJPT0wgc2hvdWxkVXNlVGV4dEluZGljYXRvclRvQ3JlYXRlUHJldmlld0Zv
ckRyYWdBY3Rpb24oRHJhZ1NvdXJjZUFjdGlvbiBhY3Rpb24pCi17Ci0gICAgaWYgKGFjdGlvbiAm
IChEcmFnU291cmNlQWN0aW9uTGluayB8IERyYWdTb3VyY2VBY3Rpb25TZWxlY3Rpb24pKQotICAg
ICAgICByZXR1cm4gWUVTOwotCi0jaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKLSAgICBp
ZiAoYWN0aW9uICYgRHJhZ1NvdXJjZUFjdGlvbkF0dGFjaG1lbnQpCi0gICAgICAgIHJldHVybiBZ
RVM7Ci0jZW5kaWYKLQotICAgIHJldHVybiBOTzsKLX0KLQotLSAoUmV0YWluUHRyPFVJVGFyZ2V0
ZWREcmFnUHJldmlldz4pZHJhZ1ByZXZpZXdGb3JJbWFnZTooVUlJbWFnZSAqKWltYWdlIGZyYW1l
SW5Sb290Vmlld0Nvb3JkaW5hdGVzOihjb25zdCBGbG9hdFJlY3QmKWZyYW1lIGNsaXBwaW5nUmVj
dHNJbkZyYW1lQ29vcmRpbmF0ZXM6KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiljbGlwcGluZ1Jl
Y3RzIGJhY2tncm91bmRDb2xvcjooVUlDb2xvciAqKWJhY2tncm91bmRDb2xvcgotewotICAgIGlm
IChmcmFtZS5pc0VtcHR5KCkgfHwgIWltYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIFVJVmlldyAqY29udGFpbmVyID0gW3NlbGYgdW5zY2FsZWRWaWV3XTsKLSAgICBGbG9hdFJl
Y3QgZnJhbWVJbkNvbnRhaW5lckNvb3JkaW5hdGVzOwotICAgIE5TTXV0YWJsZUFycmF5ICpjbGlw
cGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlX
aXRoQ2FwYWNpdHk6Y2xpcHBpbmdSZWN0cy5zaXplKCldOwotCi0gICAgZnJhbWVJbkNvbnRhaW5l
ckNvb3JkaW5hdGVzID0gW3NlbGYgY29udmVydFJlY3Q6ZnJhbWUgdG9WaWV3OmNvbnRhaW5lcl07
Ci0gICAgaWYgKGZyYW1lSW5Db250YWluZXJDb29yZGluYXRlcy5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgZmxvYXQgd2lkdGhTY2FsaW5nUmF0aW8gPSBmcmFtZUlu
Q29udGFpbmVyQ29vcmRpbmF0ZXMud2lkdGgoKSAvIGZyYW1lLndpZHRoKCk7Ci0gICAgZmxvYXQg
aGVpZ2h0U2NhbGluZ1JhdGlvID0gZnJhbWVJbkNvbnRhaW5lckNvb3JkaW5hdGVzLmhlaWdodCgp
IC8gZnJhbWUuaGVpZ2h0KCk7Ci0gICAgZm9yIChhdXRvIHJlY3QgOiBjbGlwcGluZ1JlY3RzKSB7
Ci0gICAgICAgIHJlY3Quc2NhbGUod2lkdGhTY2FsaW5nUmF0aW8sIGhlaWdodFNjYWxpbmdSYXRp
byk7Ci0gICAgICAgIFtjbGlwcGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXMgYWRkT2Jq
ZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpyZWN0XV07Ci0gICAgfQotCi0gICAgYXV0byBp
bWFnZVZpZXcgPSBhZG9wdE5TKFtbVUlJbWFnZVZpZXcgYWxsb2NdIGluaXRXaXRoSW1hZ2U6aW1h
Z2VdKTsKLSAgICBbaW1hZ2VWaWV3IHNldEZyYW1lOmZyYW1lSW5Db250YWluZXJDb29yZGluYXRl
c107Ci0KLSAgICBSZXRhaW5QdHI8VUlEcmFnUHJldmlld1BhcmFtZXRlcnM+IHBhcmFtZXRlcnM7
Ci0gICAgaWYgKGNsaXBwaW5nUmVjdFZhbHVlc0luRnJhbWVDb29yZGluYXRlcy5jb3VudCkKLSAg
ICAgICAgcGFyYW1ldGVycyA9IGFkb3B0TlMoW1tVSURyYWdQcmV2aWV3UGFyYW1ldGVycyBhbGxv
Y10gaW5pdFdpdGhUZXh0TGluZVJlY3RzOmNsaXBwaW5nUmVjdFZhbHVlc0luRnJhbWVDb29yZGlu
YXRlc10pOwotICAgIGVsc2UKLSAgICAgICAgcGFyYW1ldGVycyA9IGFkb3B0TlMoW1tVSURyYWdQ
cmV2aWV3UGFyYW1ldGVycyBhbGxvY10gaW5pdF0pOwotCi0gICAgaWYgKGJhY2tncm91bmRDb2xv
cikKLSAgICAgICAgW3BhcmFtZXRlcnMgc2V0QmFja2dyb3VuZENvbG9yOmJhY2tncm91bmRDb2xv
cl07Ci0KLSAgICBDR1BvaW50IGNlbnRlckluQ29udGFpbmVyQ29vcmRpbmF0ZXMgPSB7IENHUmVj
dEdldE1pZFgoZnJhbWVJbkNvbnRhaW5lckNvb3JkaW5hdGVzKSwgQ0dSZWN0R2V0TWlkWShmcmFt
ZUluQ29udGFpbmVyQ29vcmRpbmF0ZXMpIH07Ci0gICAgYXV0byB0YXJnZXQgPSBhZG9wdE5TKFtb
VUlEcmFnUHJldmlld1RhcmdldCBhbGxvY10gaW5pdFdpdGhDb250YWluZXI6Y29udGFpbmVyIGNl
bnRlcjpjZW50ZXJJbkNvbnRhaW5lckNvb3JkaW5hdGVzXSk7Ci0gICAgYXV0byBkcmFnUHJldmll
dyA9IGFkb3B0TlMoW1tVSVRhcmdldGVkRHJhZ1ByZXZpZXcgYWxsb2NdIGluaXRXaXRoVmlldzpp
bWFnZVZpZXcuZ2V0KCkgcGFyYW1ldGVyczpwYXJhbWV0ZXJzLmdldCgpIHRhcmdldDp0YXJnZXQu
Z2V0KCldKTsKLSAgICByZXR1cm4gZHJhZ1ByZXZpZXc7Ci19Ci0KLS0gKFJldGFpblB0cjxVSVRh
cmdldGVkRHJhZ1ByZXZpZXc+KWRyYWdQcmV2aWV3Rm9yQ3VycmVudERhdGFJbnRlcmFjdGlvblN0
YXRlCi17Ci0gICAgYXV0byBhY3Rpb24gPSBfZGF0YUludGVyYWN0aW9uU3RhdGUuc291cmNlQWN0
aW9uOwotICAgIGlmIChhY3Rpb24gJiBEcmFnU291cmNlQWN0aW9uSW1hZ2UgJiYgX2RhdGFJbnRl
cmFjdGlvblN0YXRlLmltYWdlKSB7Ci0gICAgICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGVtcHR5Q2xp
cHBpbmdSZWN0czsKLSAgICAgICAgcmV0dXJuIFtzZWxmIGRyYWdQcmV2aWV3Rm9ySW1hZ2U6X2Rh
dGFJbnRlcmFjdGlvblN0YXRlLmltYWdlLmdldCgpIGZyYW1lSW5Sb290Vmlld0Nvb3JkaW5hdGVz
Ol9kYXRhSW50ZXJhY3Rpb25TdGF0ZS5lbGVtZW50Qm91bmRzIGNsaXBwaW5nUmVjdHNJbkZyYW1l
Q29vcmRpbmF0ZXM6ZW1wdHlDbGlwcGluZ1JlY3RzIGJhY2tncm91bmRDb2xvcjpuaWxdOwotICAg
IH0KLQotICAgIGlmIChzaG91bGRVc2VUZXh0SW5kaWNhdG9yVG9DcmVhdGVQcmV2aWV3Rm9yRHJh
Z0FjdGlvbihhY3Rpb24pICYmIF9kYXRhSW50ZXJhY3Rpb25TdGF0ZS5pbmRpY2F0b3JEYXRhKSB7
Ci0gICAgICAgIGF1dG8gaW5kaWNhdG9yID0gX2RhdGFJbnRlcmFjdGlvblN0YXRlLmluZGljYXRv
ckRhdGEudmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIGRyYWdQcmV2aWV3Rm9ySW1hZ2U6
dWlJbWFnZUZvckltYWdlKGluZGljYXRvci5jb250ZW50SW1hZ2UpLmdldCgpIGZyYW1lSW5Sb290
Vmlld0Nvb3JkaW5hdGVzOmluZGljYXRvci50ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3Jk
aW5hdGVzIGNsaXBwaW5nUmVjdHNJbkZyYW1lQ29vcmRpbmF0ZXM6aW5kaWNhdG9yLnRleHRSZWN0
c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMgYmFja2dyb3VuZENvbG9yOltVSUNvbG9yIGNvbG9y
V2l0aENHQ29sb3I6Y2FjaGVkQ0dDb2xvcihpbmRpY2F0b3IuZXN0aW1hdGVkQmFja2dyb3VuZENv
bG9yKV1dOwotICAgIH0KLQotICAgIHJldHVybiBuaWw7Ci19Ci0KIC0gKHZvaWQpY29tcHV0ZUNs
aWVudEFuZEdsb2JhbFBvaW50c0ZvckRyb3BTZXNzaW9uOihpZCA8VUlEcm9wU2Vzc2lvbj4pc2Vz
c2lvbiBvdXRDbGllbnRQb2ludDooQ0dQb2ludCAqKW91dENsaWVudFBvaW50IG91dEdsb2JhbFBv
aW50OihDR1BvaW50ICopb3V0R2xvYmFsUG9pbnQKIHsKKyAgICAvLyBGSVhNRTogVGhpcyBtYWtl
cyB0aGUgYmVoYXZpb3Igb2YgZHJhZyBldmVudHMgb24gaU9TIGNvbnNpc3RlbnQgd2l0aCBvdGhl
ciBzeW50aGV0aWMgbW91c2UgZXZlbnRzIG9uIGlPUyAoc2VlIFdlYlBhZ2U6OmNvbXBsZXRlU3lu
dGhldGljQ2xpY2spLgorICAgIC8vIEhvd2V2ZXIsIHdlIHNob3VsZCBleHBlcmltZW50IHdpdGgg
bWFraW5nIHRoZSBjbGllbnQgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHdpbmRvdyBhbmQgdGhl
IGdsb2JhbCBwb3NpdGlvbiBpbiBkb2N1bWVudCBjb29yZGluYXRlcy4gU2VlCisgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Mzg1NSBmb3IgbW9yZSBkZXRh
aWxzLgorICAgIGF1dG8gbG9jYXRpb25JbkNvbnRlbnRWaWV3ID0gW3Nlc3Npb24gbG9jYXRpb25J
blZpZXc6c2VsZl07CiAgICAgaWYgKG91dENsaWVudFBvaW50KQotICAgICAgICAqb3V0Q2xpZW50
UG9pbnQgPSBbc2Vzc2lvbiBsb2NhdGlvbkluVmlldzpzZWxmXTsKKyAgICAgICAgKm91dENsaWVu
dFBvaW50ID0gbG9jYXRpb25JbkNvbnRlbnRWaWV3OwogCi0gICAgaWYgKG91dEdsb2JhbFBvaW50
KSB7Ci0gICAgICAgIFVJV2luZG93ICp3aW5kb3cgPSBzZWxmLndpbmRvdzsKLSAgICAgICAgKm91
dEdsb2JhbFBvaW50ID0gd2luZG93ID8gW3Nlc3Npb24gbG9jYXRpb25JblZpZXc6d2luZG93XSA6
IF9kYXRhSW50ZXJhY3Rpb25TdGF0ZS5sYXN0R2xvYmFsUG9zaXRpb247Ci0gICAgfQorICAgIGlm
IChvdXRHbG9iYWxQb2ludCkKKyAgICAgICAgKm91dEdsb2JhbFBvaW50ID0gbG9jYXRpb25JbkNv
bnRlbnRWaWV3OwogfQogCiBzdGF0aWMgVUlEcm9wT3BlcmF0aW9uIGRyb3BPcGVyYXRpb25Gb3JX
ZWJDb3JlRHJhZ09wZXJhdGlvbihEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbikKQEAgLTQ0MDUsMjcg
KzQzMjIsMjMgQEAgLSAodm9pZCljbGVhblVwRHJhZ1NvdXJjZVNlc3Npb25TdGF0ZQogICAgICAg
ICBbW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgc2hhcmVkSW5zdGFuY2VdIHNldEl0ZW1Qcm92
aWRlcnM6bmlsXTsKICAgICB9CiAKLSAgICBpZiAoYXV0byBjb21wbGV0aW9uQmxvY2sgPSBfZGF0
YUludGVyYWN0aW9uU3RhdGUuZHJhZ0NhbmNlbFNldERvd25CbG9jaykgewotICAgICAgICBfZGF0
YUludGVyYWN0aW9uU3RhdGUuZHJhZ0NhbmNlbFNldERvd25CbG9jayA9IG5pbDsKLSAgICAgICAg
Y29tcGxldGlvbkJsb2NrKCk7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gY29tcGxldGlvbkJsb2Nr
ID0gX2RhdGFJbnRlcmFjdGlvblN0YXRlLmRyYWdTdGFydENvbXBsZXRpb25CbG9jaykgewotICAg
ICAgICAvLyBJZiB0aGUgcHJldmlvdXMgZHJhZyBzZXNzaW9uIGlzIHN0aWxsIGluaXRpYWxpemlu
Zywgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCBpdHMgY29tcGxldGlvbiBibG9jayBpcyBjYWxsZWQg
dG8gcHJldmVudCBVSUtpdCBmcm9tIGdldHRpbmcgb3V0IG9mIHN0YXRlLgotICAgICAgICBfZGF0
YUludGVyYWN0aW9uU3RhdGUuZHJhZ1N0YXJ0Q29tcGxldGlvbkJsb2NrID0gbmlsOwotICAgICAg
ICBjb21wbGV0aW9uQmxvY2soKTsKLSAgICB9Ci0KKyAgICBbW1dlYkl0ZW1Qcm92aWRlclBhc3Rl
Ym9hcmQgc2hhcmVkSW5zdGFuY2VdIHN0YWdlUmVnaXN0cmF0aW9uTGlzdDpuaWxdOwogICAgIFtz
ZWxmIF9yZXN0b3JlQ2FsbG91dEJhcklmTmVlZGVkXTsKLSAgICBbX2RhdGFJbnRlcmFjdGlvblN0
YXRlLmNhcmV0VmlldyByZW1vdmVdOwotICAgIFtfZGF0YUludGVyYWN0aW9uU3RhdGUudmlzaWJs
ZUNvbnRlbnRWaWV3U25hcHNob3QgcmVtb3ZlRnJvbVN1cGVydmlld107CiAKLSAgICBfZGF0YUlu
dGVyYWN0aW9uU3RhdGUgPSB7IH07CisgICAgW192aXNpYmxlQ29udGVudFZpZXdTbmFwc2hvdCBy
ZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKyAgICBfdmlzaWJsZUNvbnRlbnRWaWV3U25hcHNob3QgPSBu
aWw7CisgICAgW19lZGl0RHJvcENhcmV0VmlldyByZW1vdmVdOworICAgIF9lZGl0RHJvcENhcmV0
VmlldyA9IG5pbDsKKyAgICBfaXNBbmltYXRpbmdDb25jbHVkZUVkaXREcmFnID0gTk87CisgICAg
X3Nob3VsZFJlc3RvcmVDYWxsb3V0QmFyQWZ0ZXJEcm9wID0gTk87CisKKyAgICBfZHJhZ0Ryb3BJ
bnRlcmFjdGlvblN0YXRlLmRyYWdBbmREcm9wU2Vzc2lvbnNEaWRFbmQoKTsKKyAgICBfZHJhZ0Ry
b3BJbnRlcmFjdGlvblN0YXRlID0geyB9OwogfQogCiBzdGF0aWMgTlNBcnJheTxVSUl0ZW1Qcm92
aWRlciAqPiAqZXh0cmFjdEl0ZW1Qcm92aWRlcnNGcm9tRHJhZ0l0ZW1zKE5TQXJyYXk8VUlEcmFn
SXRlbSAqPiAqZHJhZ0l0ZW1zKQogewotICAgIF9fYmxvY2sgTlNNdXRhYmxlQXJyYXk8VUlJdGVt
UHJvdmlkZXIgKj4gKnByb3ZpZGVycyA9IFtOU011dGFibGVBcnJheSBhcnJheV07CisgICAgTlNN
dXRhYmxlQXJyYXk8VUlJdGVtUHJvdmlkZXIgKj4gKnByb3ZpZGVycyA9IFtOU011dGFibGVBcnJh
eSBhcnJheV07CiAgICAgZm9yIChVSURyYWdJdGVtICppdGVtIGluIGRyYWdJdGVtcykgewogICAg
ICAgICBSZXRhaW5QdHI8VUlJdGVtUHJvdmlkZXI+IHByb3ZpZGVyID0gaXRlbS5pdGVtUHJvdmlk
ZXI7CiAgICAgICAgIGlmIChwcm92aWRlcikKQEAgLTQ0NTcsOSArNDM3MCw5IEBAIC0gKHZvaWQp
X2RpZENvbmNsdWRlRWRpdERhdGFJbnRlcmFjdGlvbjooc3RkOjpvcHRpb25hbDxUZXh0SW5kaWNh
dG9yRGF0YT4pZGF0YQogICAgIFt1bnNlbGVjdGVkQ29udGVudFNuYXBzaG90IHNldEZyYW1lOmRh
dGEtPmNvbnRlbnRJbWFnZVdpdGhvdXRTZWxlY3Rpb25SZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVz
XTsKIAogICAgIFJldGFpblB0cjxXS0NvbnRlbnRWaWV3PiBwcm90ZWN0ZWRTZWxmID0gc2VsZjsK
LSAgICBSZXRhaW5QdHI8VUlWaWV3PiB2aXNpYmxlQ29udGVudFZpZXdTbmFwc2hvdCA9IGFkb3B0
TlMoX2RhdGFJbnRlcmFjdGlvblN0YXRlLnZpc2libGVDb250ZW50Vmlld1NuYXBzaG90LmxlYWtS
ZWYoKSk7CisgICAgUmV0YWluUHRyPFVJVmlldz4gdmlzaWJsZUNvbnRlbnRWaWV3U25hcHNob3Qg
PSBhZG9wdE5TKF92aXNpYmxlQ29udGVudFZpZXdTbmFwc2hvdC5sZWFrUmVmKCkpOwogCi0gICAg
X2RhdGFJbnRlcmFjdGlvblN0YXRlLmlzQW5pbWF0aW5nQ29uY2x1ZGVFZGl0RHJhZyA9IFlFUzsK
KyAgICBfaXNBbmltYXRpbmdDb25jbHVkZUVkaXREcmFnID0gWUVTOwogICAgIFtzZWxmIGluc2Vy
dFN1YnZpZXc6dW5zZWxlY3RlZENvbnRlbnRTbmFwc2hvdC5nZXQoKSBiZWxvd1N1YnZpZXc6dmlz
aWJsZUNvbnRlbnRWaWV3U25hcHNob3QuZ2V0KCldOwogICAgIFtVSVZpZXcgYW5pbWF0ZVdpdGhE
dXJhdGlvbjowLjI1IGFuaW1hdGlvbnM6XigpIHsKICAgICAgICAgW3Zpc2libGVDb250ZW50Vmll
d1NuYXBzaG90IHNldEFscGhhOjBdOwpAQCAtNDQ3OCwzNyArNDM5MSwyMCBAQCAtICh2b2lkKV9k
aWRQZXJmb3JtRGF0YUludGVyYWN0aW9uQ29udHJvbGxlck9wZXJhdGlvbjooQk9PTCloYW5kbGVk
CiB7CiAgICAgUkVMRUFTRV9MT0coRHJhZ0FuZERyb3AsICJGaW5pc2hlZCBwZXJmb3JtaW5nIGRy
YWcgY29udHJvbGxlciBvcGVyYXRpb24gKGhhbmRsZWQ6ICVkKSIsIGhhbmRsZWQpOwogICAgIFtb
V2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCBzaGFyZWRJbnN0YW5jZV0gZGVjcmVtZW50UGVuZGlu
Z09wZXJhdGlvbkNvdW50XTsKLSAgICBSZXRhaW5QdHI8aWQgPFVJRHJvcFNlc3Npb24+PiBkcm9w
U2Vzc2lvbiA9IF9kYXRhSW50ZXJhY3Rpb25TdGF0ZS5kcm9wU2Vzc2lvbjsKKyAgICBpZCA8VUlE
cm9wU2Vzc2lvbj4gZHJvcFNlc3Npb24gPSBfZHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmRyb3BT
ZXNzaW9uKCk7CiAgICAgaWYgKFtzZWxmLndlYlZpZXdVSURlbGVnYXRlIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6ZGF0YUludGVyYWN0aW9uT3BlcmF0aW9uV2FzSGFuZGxl
ZDpmb3JTZXNzaW9uOml0ZW1Qcm92aWRlcnM6KV0pCi0gICAgICAgIFtzZWxmLndlYlZpZXdVSURl
bGVnYXRlIF93ZWJWaWV3Ol93ZWJWaWV3IGRhdGFJbnRlcmFjdGlvbk9wZXJhdGlvbldhc0hhbmRs
ZWQ6aGFuZGxlZCBmb3JTZXNzaW9uOmRyb3BTZXNzaW9uLmdldCgpIGl0ZW1Qcm92aWRlcnM6W1dl
Ykl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgc2hhcmVkSW5zdGFuY2VdLml0ZW1Qcm92aWRlcnNdOwor
ICAgICAgICBbc2VsZi53ZWJWaWV3VUlEZWxlZ2F0ZSBfd2ViVmlldzpfd2ViVmlldyBkYXRhSW50
ZXJhY3Rpb25PcGVyYXRpb25XYXNIYW5kbGVkOmhhbmRsZWQgZm9yU2Vzc2lvbjpkcm9wU2Vzc2lv
biBpdGVtUHJvdmlkZXJzOltXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHNoYXJlZEluc3RhbmNl
XS5pdGVtUHJvdmlkZXJzXTsKIAotICAgIGlmICghX2RhdGFJbnRlcmFjdGlvblN0YXRlLmlzQW5p
bWF0aW5nQ29uY2x1ZGVFZGl0RHJhZykKKyAgICBpZiAoIV9pc0FuaW1hdGluZ0NvbmNsdWRlRWRp
dERyYWcpCiAgICAgICAgIHNlbGYuc3VwcHJlc3NBc3Npc3RhbnRTZWxlY3Rpb25WaWV3ID0gTk87
CiAKICAgICBDR1BvaW50IGdsb2JhbDsKICAgICBDR1BvaW50IGNsaWVudDsKLSAgICBbc2VsZiBj
b21wdXRlQ2xpZW50QW5kR2xvYmFsUG9pbnRzRm9yRHJvcFNlc3Npb246ZHJvcFNlc3Npb24uZ2V0
KCkgb3V0Q2xpZW50UG9pbnQ6JmNsaWVudCBvdXRHbG9iYWxQb2ludDomZ2xvYmFsXTsKKyAgICBb
c2VsZiBjb21wdXRlQ2xpZW50QW5kR2xvYmFsUG9pbnRzRm9yRHJvcFNlc3Npb246ZHJvcFNlc3Np
b24gb3V0Q2xpZW50UG9pbnQ6JmNsaWVudCBvdXRHbG9iYWxQb2ludDomZ2xvYmFsXTsKICAgICBb
c2VsZiBjbGVhblVwRHJhZ1NvdXJjZVNlc3Npb25TdGF0ZV07CiAgICAgX3BhZ2UtPmRyYWdFbmRl
ZChyb3VuZGVkSW50UG9pbnQoY2xpZW50KSwgcm91bmRlZEludFBvaW50KGdsb2JhbCksIF9wYWdl
LT5jdXJyZW50RHJhZ09wZXJhdGlvbigpKTsKIH0KIAotLSAodm9pZClfdHJhbnNpdGlvbkRyYWdQ
cmV2aWV3VG9JbWFnZUlmTmVjZXNzYXJ5OihpZCA8VUlEcmFnU2Vzc2lvbj4pc2Vzc2lvbgotewot
ICAgIGlmIChfZGF0YUludGVyYWN0aW9uU3RhdGUuc291cmNlQWN0aW9uICYgRHJhZ1NvdXJjZUFj
dGlvbkltYWdlIHx8ICEoX2RhdGFJbnRlcmFjdGlvblN0YXRlLnNvdXJjZUFjdGlvbiAmIERyYWdT
b3VyY2VBY3Rpb25MaW5rKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBsaW5rRHJhZ2dp
bmdDZW50ZXIgPSBfZGF0YUludGVyYWN0aW9uU3RhdGUuYWRqdXN0ZWRPcmlnaW47Ci0gICAgUmV0
YWluUHRyPE5TU3RyaW5nPiB0aXRsZSA9IChOU1N0cmluZyAqKV9kYXRhSW50ZXJhY3Rpb25TdGF0
ZS5saW5rVGl0bGU7Ci0gICAgUmV0YWluUHRyPE5TVVJMPiB1cmwgPSAoTlNVUkwgKilfZGF0YUlu
dGVyYWN0aW9uU3RhdGUubGlua1VSTDsKLSAgICBzZXNzaW9uLml0ZW1zLmZpcnN0T2JqZWN0LnBy
ZXZpZXdQcm92aWRlciA9IFt0aXRsZSwgdXJsLCBsaW5rRHJhZ2dpbmdDZW50ZXJdICgpIC0+IFVJ
RHJhZ1ByZXZpZXcgKiB7Ci0gICAgICAgIFVJVVJMRHJhZ1ByZXZpZXdWaWV3ICpwcmV2aWV3Vmll
dyA9IFtVSVVSTERyYWdQcmV2aWV3VmlldyB2aWV3V2l0aFRpdGxlOnRpdGxlLmdldCgpIFVSTDp1
cmwuZ2V0KCldOwotICAgICAgICBwcmV2aWV3Vmlldy5jZW50ZXIgPSBsaW5rRHJhZ2dpbmdDZW50
ZXI7Ci0KLSAgICAgICAgVUlEcmFnUHJldmlld1BhcmFtZXRlcnMgKnBhcmFtZXRlcnMgPSBbW1tV
SURyYWdQcmV2aWV3UGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhUZXh0TGluZVJlY3RzOkBbIFtO
U1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpwcmV2aWV3Vmlldy5ib3VuZHNdIF1dIGF1dG9yZWxlYXNl
XTsKLSAgICAgICAgcmV0dXJuIFtbW1VJRHJhZ1ByZXZpZXcgYWxsb2NdIGluaXRXaXRoVmlldzpw
cmV2aWV3VmlldyBwYXJhbWV0ZXJzOnBhcmFtZXRlcnNdIGF1dG9yZWxlYXNlXTsKLSAgICB9Owot
fQotCiAtICh2b2lkKV9kaWRDaGFuZ2VEYXRhSW50ZXJhY3Rpb25DYXJldFJlY3Q6KENHUmVjdClw
cmV2aW91c1JlY3QgY3VycmVudFJlY3Q6KENHUmVjdClyZWN0CiB7CiAgICAgQk9PTCBwcmV2aW91
c1JlY3RJc0VtcHR5ID0gQ0dSZWN0SXNFbXB0eShwcmV2aW91c1JlY3QpOwpAQCAtNDUxNywxOCAr
NDQxMywxOCBAQCAtICh2b2lkKV9kaWRDaGFuZ2VEYXRhSW50ZXJhY3Rpb25DYXJldFJlY3Q6KENH
UmVjdClwcmV2aW91c1JlY3QgY3VycmVudFJlY3Q6KENHUgogICAgICAgICByZXR1cm47CiAKICAg
ICBpZiAocHJldmlvdXNSZWN0SXNFbXB0eSkgewotICAgICAgICBfZGF0YUludGVyYWN0aW9uU3Rh
dGUuY2FyZXRWaWV3ID0gYWRvcHROUyhbW19VSVRleHREcmFnQ2FyZXRWaWV3IGFsbG9jXSBpbml0
V2l0aFRleHRJbnB1dFZpZXc6c2VsZl0pOwotICAgICAgICBbX2RhdGFJbnRlcmFjdGlvblN0YXRl
LmNhcmV0VmlldyBpbnNlcnRBdFBvc2l0aW9uOltXS1RleHRQb3NpdGlvbiB0ZXh0UG9zaXRpb25X
aXRoUmVjdDpyZWN0XV07CisgICAgICAgIF9lZGl0RHJvcENhcmV0VmlldyA9IGFkb3B0TlMoW1tf
VUlUZXh0RHJhZ0NhcmV0VmlldyBhbGxvY10gaW5pdFdpdGhUZXh0SW5wdXRWaWV3OnNlbGZdKTsK
KyAgICAgICAgW19lZGl0RHJvcENhcmV0VmlldyBpbnNlcnRBdFBvc2l0aW9uOltXS1RleHRQb3Np
dGlvbiB0ZXh0UG9zaXRpb25XaXRoUmVjdDpyZWN0XV07CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoY3VycmVudFJlY3RJc0VtcHR5KSB7Ci0gICAgICAgIFtfZGF0YUludGVyYWN0
aW9uU3RhdGUuY2FyZXRWaWV3IHJlbW92ZV07Ci0gICAgICAgIF9kYXRhSW50ZXJhY3Rpb25TdGF0
ZS5jYXJldFZpZXcgPSBuaWw7CisgICAgICAgIFtfZWRpdERyb3BDYXJldFZpZXcgcmVtb3ZlXTsK
KyAgICAgICAgX2VkaXREcm9wQ2FyZXRWaWV3ID0gbmlsOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgW19kYXRhSW50ZXJhY3Rpb25TdGF0ZS5jYXJldFZpZXcgdXBkYXRlVG9Qb3NpdGlv
bjpbV0tUZXh0UG9zaXRpb24gdGV4dFBvc2l0aW9uV2l0aFJlY3Q6cmVjdF1dOworICAgIFtfZWRp
dERyb3BDYXJldFZpZXcgdXBkYXRlVG9Qb3NpdGlvbjpbV0tUZXh0UG9zaXRpb24gdGV4dFBvc2l0
aW9uV2l0aFJlY3Q6cmVjdF1dOwogfQogCiAtIChXS0RyYWdEZXN0aW5hdGlvbkFjdGlvbilfZHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uRm9yRHJvcFNlc3Npb246KGlkIDxVSURyb3BTZXNzaW9uPilzZXNz
aW9uCkBAIC00NTQyLDIwICs0NDM4LDIwIEBAIC0gKFdLRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKV9k
cmFnRGVzdGluYXRpb25BY3Rpb25Gb3JEcm9wU2Vzc2lvbjooaWQgPFVJRHJvcFNlc3NpCiAKIC0g
KGlkIDxVSURyYWdEcm9wU2Vzc2lvbj4pY3VycmVudERyYWdPckRyb3BTZXNzaW9uCiB7Ci0gICAg
aWYgKF9kYXRhSW50ZXJhY3Rpb25TdGF0ZS5kcm9wU2Vzc2lvbikKLSAgICAgICAgcmV0dXJuIF9k
YXRhSW50ZXJhY3Rpb25TdGF0ZS5kcm9wU2Vzc2lvbi5nZXQoKTsKLSAgICByZXR1cm4gX2RhdGFJ
bnRlcmFjdGlvblN0YXRlLmRyYWdTZXNzaW9uLmdldCgpOworICAgIGlmIChfZHJhZ0Ryb3BJbnRl
cmFjdGlvblN0YXRlLmRyb3BTZXNzaW9uKCkpCisgICAgICAgIHJldHVybiBfZHJhZ0Ryb3BJbnRl
cmFjdGlvblN0YXRlLmRyb3BTZXNzaW9uKCk7CisgICAgcmV0dXJuIF9kcmFnRHJvcEludGVyYWN0
aW9uU3RhdGUuZHJhZ1Nlc3Npb24oKTsKIH0KIAogLSAodm9pZClfcmVzdG9yZUNhbGxvdXRCYXJJ
Zk5lZWRlZAogewotICAgIGlmICghX2RhdGFJbnRlcmFjdGlvblN0YXRlLnNob3VsZFJlc3RvcmVD
YWxsb3V0QmFyKQorICAgIGlmICghX3Nob3VsZFJlc3RvcmVDYWxsb3V0QmFyQWZ0ZXJEcm9wKQog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogVGhpcyBTUEkgc2hvdWxkIGJlIHJlbmFt
ZWQgaW4gVUlLaXQgdG8gcmVmbGVjdCBhIG1vcmUgZ2VuZXJhbCBwdXJwb3NlIG9mIHJldmVhbGlu
ZyBoaWRkZW4gaW50ZXJhY3Rpb24gYXNzaXN0YW50IGNvbnRyb2xzLgogICAgIFtfd2ViU2VsZWN0
aW9uQXNzaXN0YW50IGRpZEVuZFNjcm9sbGluZ092ZXJmbG93XTsKICAgICBbX3RleHRTZWxlY3Rp
b25Bc3Npc3RhbnQgZGlkRW5kU2Nyb2xsaW5nT3ZlcmZsb3ddOwotICAgIF9kYXRhSW50ZXJhY3Rp
b25TdGF0ZS5zaG91bGRSZXN0b3JlQ2FsbG91dEJhciA9IE5POworICAgIF9zaG91bGRSZXN0b3Jl
Q2FsbG91dEJhckFmdGVyRHJvcCA9IE5POwogfQogCiAjcHJhZ21hIG1hcmsgLSBVSURyYWdJbnRl
cmFjdGlvbkRlbGVnYXRlCkBAIC00NTk1LDkgKzQ0OTEsOSBAQCAtICh2b2lkKV9kcmFnSW50ZXJh
Y3Rpb246KFVJRHJhZ0ludGVyYWN0aW9uICopaW50ZXJhY3Rpb24gcHJlcGFyZUZvclNlc3Npb246
KGlkCiAKICAgICBbc2VsZiBjbGVhblVwRHJhZ1NvdXJjZVNlc3Npb25TdGF0ZV07CiAKKyAgICBf
ZHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLnByZXBhcmVGb3JEcmFnU2Vzc2lvbihzZXNzaW9uLCBj
b21wbGV0aW9uKTsKKwogICAgIGF1dG8gZHJhZ09yaWdpbiA9IHJvdW5kZWRJbnRQb2ludChbc2Vz
c2lvbiBsb2NhdGlvbkluVmlldzpzZWxmXSk7Ci0gICAgX2RhdGFJbnRlcmFjdGlvblN0YXRlLmRy
YWdTdGFydENvbXBsZXRpb25CbG9jayA9IGNvbXBsZXRpb247Ci0gICAgX2RhdGFJbnRlcmFjdGlv
blN0YXRlLmRyYWdTZXNzaW9uID0gc2Vzc2lvbjsKICAgICBfcGFnZS0+cmVxdWVzdFN0YXJ0RGF0
YUludGVyYWN0aW9uKGRyYWdPcmlnaW4sIHJvdW5kZWRJbnRQb2ludChbc2VsZiBjb252ZXJ0UG9p
bnQ6ZHJhZ09yaWdpbiB0b1ZpZXc6c2VsZi53aW5kb3ddKSk7CiAKICAgICBSRUxFQVNFX0xPRyhE
cmFnQW5kRHJvcCwgIkRyYWcgc2Vzc2lvbiByZXF1ZXN0ZWQ6ICVwIGF0IG9yaWdpbjogeyVkLCAl
ZH0iLCBzZXNzaW9uLCBkcmFnT3JpZ2luLngoKSwgZHJhZ09yaWdpbi55KCkpOwpAQCAtNDYwNSw1
NyArNDUwMSw1OCBAQCAtICh2b2lkKV9kcmFnSW50ZXJhY3Rpb246KFVJRHJhZ0ludGVyYWN0aW9u
ICopaW50ZXJhY3Rpb24gcHJlcGFyZUZvclNlc3Npb246KGlkCiAKIC0gKE5TQXJyYXk8VUlEcmFn
SXRlbSAqPiAqKWRyYWdJbnRlcmFjdGlvbjooVUlEcmFnSW50ZXJhY3Rpb24gKilpbnRlcmFjdGlv
biBpdGVtc0ZvckJlZ2lubmluZ1Nlc3Npb246KGlkIDxVSURyYWdTZXNzaW9uPilzZXNzaW9uCiB7
CisgICAgQVNTRVJUKGludGVyYWN0aW9uID09IF9kcmFnSW50ZXJhY3Rpb24pOwogICAgIFJFTEVB
U0VfTE9HKERyYWdBbmREcm9wLCAiRHJhZyBpdGVtcyByZXF1ZXN0ZWQgZm9yIHNlc3Npb246ICVw
Iiwgc2Vzc2lvbik7Ci0gICAgaWYgKF9kYXRhSW50ZXJhY3Rpb25TdGF0ZS5kcmFnU2Vzc2lvbiAh
PSBzZXNzaW9uKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKERyYWdBbmREcm9wLCAiRHJhZyBzZXNz
aW9uIGZhaWxlZDogJXAgKGRlbGVnYXRlIHNlc3Npb24gZG9lcyBub3QgbWF0Y2ggJXApIiwgc2Vz
c2lvbiwgX2RhdGFJbnRlcmFjdGlvblN0YXRlLmRyYWdTZXNzaW9uLmdldCgpKTsKKyAgICBpZiAo
X2RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5kcmFnU2Vzc2lvbigpICE9IHNlc3Npb24pIHsKKyAg
ICAgICAgUkVMRUFTRV9MT0coRHJhZ0FuZERyb3AsICJEcmFnIHNlc3Npb24gZmFpbGVkOiAlcCAo
ZGVsZWdhdGUgc2Vzc2lvbiBkb2VzIG5vdCBtYXRjaCAlcCkiLCBzZXNzaW9uLCBfZHJhZ0Ryb3BJ
bnRlcmFjdGlvblN0YXRlLmRyYWdTZXNzaW9uKCkpOwogICAgICAgICByZXR1cm4gQFsgXTsKICAg
ICB9CiAKLSAgICBpZiAoX2RhdGFJbnRlcmFjdGlvblN0YXRlLnNvdXJjZUFjdGlvbiA9PSBEcmFn
U291cmNlQWN0aW9uTm9uZSkgewotICAgICAgICBSRUxFQVNFX0xPRyhEcmFnQW5kRHJvcCwgIkRy
YWcgc2Vzc2lvbiBmYWlsZWQ6ICVwIChubyBkcmFnIHNvdXJjZSBhY3Rpb24pIiwgc2Vzc2lvbik7
CisgICAgaWYgKCFfZHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmhhc1N0YWdlZERyYWdTb3VyY2Uo
KSkgeworICAgICAgICBSRUxFQVNFX0xPRyhEcmFnQW5kRHJvcCwgIkRyYWcgc2Vzc2lvbiBmYWls
ZWQ6ICVwIChtaXNzaW5nIHN0YWdlZCBkcmFnIHNvdXJjZSkiLCBzZXNzaW9uKTsKICAgICAgICAg
cmV0dXJuIEBbIF07CiAgICAgfQogCi0gICAgV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCAqZHJh
Z2dpbmdQYXN0ZWJvYXJkID0gW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgc2hhcmVkSW5zdGFu
Y2VdOwotICAgIEFTU0VSVChpbnRlcmFjdGlvbiA9PSBfZGF0YUludGVyYWN0aW9uKTsKLSAgICBO
U1VJbnRlZ2VyIG51bWJlck9mSXRlbXMgPSBkcmFnZ2luZ1Bhc3RlYm9hcmQubnVtYmVyT2ZJdGVt
czsKLSAgICBpZiAoIW51bWJlck9mSXRlbXMpIHsKKyAgICBhdXRvIHN0YWdlZERyYWdTb3VyY2Ug
PSBfZHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLnN0YWdlZERyYWdTb3VyY2UoKTsKKyAgICBXZWJJ
dGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvTGlzdCAqcmVnaXN0cmF0aW9uTGlzdCA9IFtbV2Vi
SXRlbVByb3ZpZGVyUGFzdGVib2FyZCBzaGFyZWRJbnN0YW5jZV0gdGFrZVJlZ2lzdHJhdGlvbkxp
c3RdOworICAgIFVJSXRlbVByb3ZpZGVyICpkZWZhdWx0SXRlbVByb3ZpZGVyID0gcmVnaXN0cmF0
aW9uTGlzdC5pdGVtUHJvdmlkZXI7CisgICAgaWYgKCFkZWZhdWx0SXRlbVByb3ZpZGVyKSB7CiAg
ICAgICAgIFJFTEVBU0VfTE9HKERyYWdBbmREcm9wLCAiRHJhZyBzZXNzaW9uIGZhaWxlZDogJXAg
KG5vIGl0ZW0gcHJvdmlkZXJzIGdlbmVyYXRlZCBiZWZvcmUgYWRqdXN0bWVudCkiLCBzZXNzaW9u
KTsKICAgICAgICAgX3BhZ2UtPmRyYWdDYW5jZWxsZWQoKTsKKyAgICAgICAgX2RyYWdEcm9wSW50
ZXJhY3Rpb25TdGF0ZS5jbGVhclN0YWdlZERyYWdTb3VyY2UoKTsKICAgICAgICAgcmV0dXJuIEBb
IF07CiAgICAgfQogCiAgICAgLy8gR2l2ZSBpbnRlcm5hbCBjbGllbnRzIHN1Y2ggYXMgTWFpbCBv
bmUgZmluYWwgY2hhbmNlIHRvIGF1Z21lbnQgdGhlIGNvbnRlbnRzIG9mIGVhY2ggVUlJdGVtUHJv
dmlkZXIgYmVmb3JlIHNlbmRpbmcgdGhlIGRyYWcgaXRlbXMgb2ZmIHRvIFVJS2l0LgorICAgIE5T
QXJyYXkgKmFkanVzdGVkSXRlbVByb3ZpZGVyczsKICAgICBpZCA8V0tVSURlbGVnYXRlUHJpdmF0
ZT4gdWlEZWxlZ2F0ZSA9IHNlbGYud2ViVmlld1VJRGVsZWdhdGU7CiAgICAgaWYgKFt1aURlbGVn
YXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6YWRqdXN0ZWREYXRhSW50
ZXJhY3Rpb25JdGVtUHJvdmlkZXJzRm9ySXRlbVByb3ZpZGVyOnJlcHJlc2VudGluZ09iamVjdHM6
YWRkaXRpb25hbERhdGE6KV0pIHsKLSAgICAgICAgTlNNdXRhYmxlQXJyYXkgKmFkanVzdGVkSXRl
bVByb3ZpZGVycyA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0gICAgICAgIGZvciAoTlNVSW50
ZWdlciBpdGVtSW5kZXggPSAwOyBpdGVtSW5kZXggPCBudW1iZXJPZkl0ZW1zOyArK2l0ZW1JbmRl
eCkgewotICAgICAgICAgICAgV2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3QgKmlu
Zm9MaXN0ID0gW2RyYWdnaW5nUGFzdGVib2FyZCByZWdpc3RyYXRpb25JbmZvQXRJbmRleDppdGVt
SW5kZXhdOwotICAgICAgICAgICAgYXV0byByZXByZXNlbnRpbmdPYmplY3RzID0gYWRvcHROUyhb
W05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0gICAgICAgICAgICBhdXRvIGFkZGl0aW9u
YWxEYXRhID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKLSAg
ICAgICAgICAgIFtpbmZvTGlzdCBlbnVtZXJhdGVJdGVtczpbcmVwcmVzZW50aW5nT2JqZWN0cywg
YWRkaXRpb25hbERhdGFdIChXZWJJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25JbmZvICppdGVtLCBO
U1VJbnRlZ2VyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZW0ucmVwcmVzZW50aW5nT2JqZWN0
KQotICAgICAgICAgICAgICAgICAgICBbcmVwcmVzZW50aW5nT2JqZWN0cyBhZGRPYmplY3Q6aXRl
bS5yZXByZXNlbnRpbmdPYmplY3RdOwotICAgICAgICAgICAgICAgIGlmIChpdGVtLnR5cGVJZGVu
dGlmaWVyICYmIGl0ZW0uZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgW2FkZGl0aW9uYWxEYXRh
IHNldE9iamVjdDppdGVtLmRhdGEgZm9yS2V5Oml0ZW0udHlwZUlkZW50aWZpZXJdOwotICAgICAg
ICAgICAgfV07Ci0gICAgICAgICAgICBpZiAoTlNBcnJheSAqcmVwbGFjZW1lbnRJdGVtUHJvdmlk
ZXJzID0gW3VpRGVsZWdhdGUgX3dlYlZpZXc6X3dlYlZpZXcgYWRqdXN0ZWREYXRhSW50ZXJhY3Rp
b25JdGVtUHJvdmlkZXJzRm9ySXRlbVByb3ZpZGVyOltkcmFnZ2luZ1Bhc3RlYm9hcmQgaXRlbVBy
b3ZpZGVyQXRJbmRleDppdGVtSW5kZXhdIHJlcHJlc2VudGluZ09iamVjdHM6cmVwcmVzZW50aW5n
T2JqZWN0cy5nZXQoKSBhZGRpdGlvbmFsRGF0YTphZGRpdGlvbmFsRGF0YS5nZXQoKV0pCi0gICAg
ICAgICAgICAgICAgW2FkanVzdGVkSXRlbVByb3ZpZGVycyBhZGRPYmplY3RzRnJvbUFycmF5OnJl
cGxhY2VtZW50SXRlbVByb3ZpZGVyc107Ci0gICAgICAgIH0KLSAgICAgICAgZHJhZ2dpbmdQYXN0
ZWJvYXJkLml0ZW1Qcm92aWRlcnMgPSBhZGp1c3RlZEl0ZW1Qcm92aWRlcnM7Ci0gICAgfSBlbHNl
IGlmIChbdWlEZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmFk
anVzdGVkRGF0YUludGVyYWN0aW9uSXRlbVByb3ZpZGVyczopXSkKLSAgICAgICAgZHJhZ2dpbmdQ
YXN0ZWJvYXJkLml0ZW1Qcm92aWRlcnMgPSBbdWlEZWxlZ2F0ZSBfd2ViVmlldzpfd2ViVmlldyBh
ZGp1c3RlZERhdGFJbnRlcmFjdGlvbkl0ZW1Qcm92aWRlcnM6ZHJhZ2dpbmdQYXN0ZWJvYXJkLml0
ZW1Qcm92aWRlcnNdOworICAgICAgICBhdXRvIHJlcHJlc2VudGluZ09iamVjdHMgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgYXV0byBhZGRpdGlvbmFs
RGF0YSA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XSk7CisgICAg
ICAgIFtyZWdpc3RyYXRpb25MaXN0IGVudW1lcmF0ZUl0ZW1zOltyZXByZXNlbnRpbmdPYmplY3Rz
LCBhZGRpdGlvbmFsRGF0YV0gKFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm8gKml0ZW0s
IE5TVUludGVnZXIpIHsKKyAgICAgICAgICAgIGlmIChpdGVtLnJlcHJlc2VudGluZ09iamVjdCkK
KyAgICAgICAgICAgICAgICBbcmVwcmVzZW50aW5nT2JqZWN0cyBhZGRPYmplY3Q6aXRlbS5yZXBy
ZXNlbnRpbmdPYmplY3RdOworICAgICAgICAgICAgaWYgKGl0ZW0udHlwZUlkZW50aWZpZXIgJiYg
aXRlbS5kYXRhKQorICAgICAgICAgICAgICAgIFthZGRpdGlvbmFsRGF0YSBzZXRPYmplY3Q6aXRl
bS5kYXRhIGZvcktleTppdGVtLnR5cGVJZGVudGlmaWVyXTsKKyAgICAgICAgfV07CisgICAgICAg
IGFkanVzdGVkSXRlbVByb3ZpZGVycyA9IFt1aURlbGVnYXRlIF93ZWJWaWV3Ol93ZWJWaWV3IGFk
anVzdGVkRGF0YUludGVyYWN0aW9uSXRlbVByb3ZpZGVyc0Zvckl0ZW1Qcm92aWRlcjpkZWZhdWx0
SXRlbVByb3ZpZGVyIHJlcHJlc2VudGluZ09iamVjdHM6cmVwcmVzZW50aW5nT2JqZWN0cy5nZXQo
KSBhZGRpdGlvbmFsRGF0YTphZGRpdGlvbmFsRGF0YS5nZXQoKV07CisgICAgfSBlbHNlCisgICAg
ICAgIGFkanVzdGVkSXRlbVByb3ZpZGVycyA9IEBbIGRlZmF1bHRJdGVtUHJvdmlkZXIgXTsKIAot
ICAgIF9fYmxvY2sgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBpdGVtc0ZvckRyYWdJbnRlcmFj
dGlvbiA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0gICAgW2RyYWdnaW5nUGFzdGVib2FyZCBl
bnVtZXJhdGVJdGVtUHJvdmlkZXJzV2l0aEJsb2NrOl4oVUlJdGVtUHJvdmlkZXIgKml0ZW1Qcm92
aWRlciwgTlNVSW50ZWdlciBpbmRleCwgQk9PTCAqc3RvcCkgewotICAgICAgICBbaXRlbXNGb3JE
cmFnSW50ZXJhY3Rpb24gYWRkT2JqZWN0OltbW1VJRHJhZ0l0ZW0gYWxsb2NdIGluaXRXaXRoSXRl
bVByb3ZpZGVyOml0ZW1Qcm92aWRlcl0gYXV0b3JlbGVhc2VdXTsKLSAgICB9XTsKKyAgICBOU011
dGFibGVBcnJheSAqZHJhZ0l0ZW1zID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5
OmFkanVzdGVkSXRlbVByb3ZpZGVycy5jb3VudF07CisgICAgZm9yIChVSUl0ZW1Qcm92aWRlciAq
aXRlbVByb3ZpZGVyIGluIGFkanVzdGVkSXRlbVByb3ZpZGVycykgeworICAgICAgICBhdXRvIGl0
ZW0gPSBhZG9wdE5TKFtbVUlEcmFnSXRlbSBhbGxvY10gaW5pdFdpdGhJdGVtUHJvdmlkZXI6aXRl
bVByb3ZpZGVyXSk7CisgICAgICAgIFtpdGVtIF9zZXRQcml2YXRlTG9jYWxDb250ZXh0OkAoc3Rh
Z2VkRHJhZ1NvdXJjZS5pdGVtSWRlbnRpZmllcildOworICAgICAgICBbZHJhZ0l0ZW1zIGFkZE9i
amVjdDppdGVtLmF1dG9yZWxlYXNlKCldOworICAgIH0KIAotICAgIGlmICghW2l0ZW1zRm9yRHJh
Z0ludGVyYWN0aW9uIGNvdW50XSkKKyAgICBpZiAoIVtkcmFnSXRlbXMgY291bnRdKQogICAgICAg
ICBfcGFnZS0+ZHJhZ0NhbmNlbGxlZCgpOwogCi0gICAgUkVMRUFTRV9MT0coRHJhZ0FuZERyb3As
ICJEcmFnIHNlc3Npb246ICVwIHN0YXJ0aW5nIHdpdGggJXR1IGl0ZW1zIiwgc2Vzc2lvbiwgW2l0
ZW1zRm9yRHJhZ0ludGVyYWN0aW9uIGNvdW50XSk7Ci0gICAgcmV0dXJuIGl0ZW1zRm9yRHJhZ0lu
dGVyYWN0aW9uLmdldCgpOworICAgIFJFTEVBU0VfTE9HKERyYWdBbmREcm9wLCAiRHJhZyBzZXNz
aW9uOiAlcCBzdGFydGluZyB3aXRoICV0dSBpdGVtcyIsIHNlc3Npb24sIFtkcmFnSXRlbXMgY291
bnRdKTsKKyAgICBfZHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmNsZWFyU3RhZ2VkRHJhZ1NvdXJj
ZShbZHJhZ0l0ZW1zIGNvdW50XSA/IERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZTo6RGlkQmVjb21l
QWN0aXZlOjpZZXMgOiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGU6OkRpZEJlY29tZUFjdGl2ZTo6
Tm8pOworCisgICAgcmV0dXJuIGRyYWdJdGVtczsKIH0KIAogLSAoVUlUYXJnZXRlZERyYWdQcmV2
aWV3ICopZHJhZ0ludGVyYWN0aW9uOihVSURyYWdJbnRlcmFjdGlvbiAqKWludGVyYWN0aW9uIHBy
ZXZpZXdGb3JMaWZ0aW5nSXRlbTooVUlEcmFnSXRlbSAqKWl0ZW0gc2Vzc2lvbjooaWQgPFVJRHJh
Z1Nlc3Npb24+KXNlc3Npb24KQEAgLTQ2NjYsMjcgKzQ1NjMsMjYgQEAgLSAoVUlUYXJnZXRlZERy
YWdQcmV2aWV3ICopZHJhZ0ludGVyYWN0aW9uOihVSURyYWdJbnRlcmFjdGlvbiAqKWludGVyYWN0
aW9uIHByZXYKICAgICAgICAgaWYgKG92ZXJyaWRlblByZXZpZXcpCiAgICAgICAgICAgICByZXR1
cm4gb3ZlcnJpZGVuUHJldmlldzsKICAgICB9Ci0gICAgcmV0dXJuIHNlbGYuZHJhZ1ByZXZpZXdG
b3JDdXJyZW50RGF0YUludGVyYWN0aW9uU3RhdGUuYXV0b3JlbGVhc2UoKTsKKyAgICByZXR1cm4g
X2RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5wcmV2aWV3Rm9yRHJhZ0l0ZW0oaXRlbSwgc2VsZiwg
c2VsZi51bnNjYWxlZFZpZXcpOwogfQogCiAtICh2b2lkKWRyYWdJbnRlcmFjdGlvbjooVUlEcmFn
SW50ZXJhY3Rpb24gKilpbnRlcmFjdGlvbiB3aWxsQW5pbWF0ZUxpZnRXaXRoQW5pbWF0b3I6KGlk
IDxVSURyYWdBbmltYXRpbmc+KWFuaW1hdG9yIHNlc3Npb246KGlkIDxVSURyYWdTZXNzaW9uPilz
ZXNzaW9uCiB7Ci0gICAgaWYgKCFfZGF0YUludGVyYWN0aW9uU3RhdGUuc2hvdWxkUmVzdG9yZUNh
bGxvdXRCYXIgJiYgKF9kYXRhSW50ZXJhY3Rpb25TdGF0ZS5zb3VyY2VBY3Rpb24gJiBEcmFnU291
cmNlQWN0aW9uU2VsZWN0aW9uKSkgeworICAgIGlmICghX3Nob3VsZFJlc3RvcmVDYWxsb3V0QmFy
QWZ0ZXJEcm9wICYmIF9kcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuYW55QWN0aXZlRHJhZ1NvdXJj
ZUlzKERyYWdTb3VyY2VBY3Rpb25TZWxlY3Rpb24pKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlz
IFNQSSBzaG91bGQgYmUgcmVuYW1lZCBpbiBVSUtpdCB0byByZWZsZWN0IGEgbW9yZSBnZW5lcmFs
IHB1cnBvc2Ugb2YgaGlkaW5nIGludGVyYWN0aW9uIGFzc2lzdGFudCBjb250cm9scy4KICAgICAg
ICAgW193ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgd2lsbFN0YXJ0U2Nyb2xsaW5nT3ZlcmZsb3ddOwog
ICAgICAgICBbX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQgd2lsbFN0YXJ0U2Nyb2xsaW5nT3ZlcmZs
b3ddOwotICAgICAgICBfZGF0YUludGVyYWN0aW9uU3RhdGUuc2hvdWxkUmVzdG9yZUNhbGxvdXRC
YXIgPSBZRVM7CisgICAgICAgIF9zaG91bGRSZXN0b3JlQ2FsbG91dEJhckFmdGVyRHJvcCA9IFlF
UzsKICAgICB9CiAKLSAgICBhdXRvIGFkanVzdGVkT3JpZ2luID0gX2RhdGFJbnRlcmFjdGlvblN0
YXRlLmFkanVzdGVkT3JpZ2luOworICAgIGF1dG8gcG9zaXRpb25Gb3JEcmFnRW5kID0gcm91bmRl
ZEludFBvaW50KF9kcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuYWRqdXN0ZWRQb3NpdGlvbkZvckRy
YWdFbmQoKSk7CiAgICAgUmV0YWluUHRyPFdLQ29udGVudFZpZXc+IHByb3RlY3RlZFNlbGYoc2Vs
Zik7Ci0gICAgW2FuaW1hdG9yIGFkZENvbXBsZXRpb246W3Nlc3Npb24sIGFkanVzdGVkT3JpZ2lu
LCBwcm90ZWN0ZWRTZWxmLCBwYWdlID0gX3BhZ2VdIChVSVZpZXdBbmltYXRpbmdQb3NpdGlvbiBm
aW5hbFBvc2l0aW9uKSB7CisgICAgW2FuaW1hdG9yIGFkZENvbXBsZXRpb246W3Nlc3Npb24sIHBv
c2l0aW9uRm9yRHJhZ0VuZCwgcHJvdGVjdGVkU2VsZiwgcGFnZSA9IF9wYWdlXSAoVUlWaWV3QW5p
bWF0aW5nUG9zaXRpb24gZmluYWxQb3NpdGlvbikgewogICAgICAgICBpZiAoZmluYWxQb3NpdGlv
biA9PSBVSVZpZXdBbmltYXRpbmdQb3NpdGlvblN0YXJ0KSB7CiAgICAgICAgICAgICBSRUxFQVNF
X0xPRyhEcmFnQW5kRHJvcCwgIkRyYWcgc2Vzc2lvbiBlbmRlZCBhdCBzdGFydDogJXAiLCBzZXNz
aW9uKTsKICAgICAgICAgICAgIC8vIFRoZSBsaWZ0IHdhcyBjYW5jZWxlZCwgc28gLWRyb3BJbnRl
cmFjdGlvbjpzZXNzaW9uRGlkRW5kOiB3aWxsIG5ldmVyIGJlIGludm9rZWQuIFRoaXMgaXMgdGhl
IGxhc3QgY2hhbmNlIHRvIGNsZWFuIHVwLgogICAgICAgICAgICAgW3Byb3RlY3RlZFNlbGYgY2xl
YW5VcERyYWdTb3VyY2VTZXNzaW9uU3RhdGVdOwotICAgICAgICAgICAgYXV0byBvcmlnaW5Jbldp
bmRvd0Nvb3JkaW5hdGVzID0gW3Byb3RlY3RlZFNlbGYgY29udmVydFBvaW50OmFkanVzdGVkT3Jp
Z2luIHRvVmlldzpbcHJvdGVjdGVkU2VsZiB3aW5kb3ddXTsKLSAgICAgICAgICAgIHBhZ2UtPmRy
YWdFbmRlZChyb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRPcmlnaW4pLCByb3VuZGVkSW50UG9pbnQo
b3JpZ2luSW5XaW5kb3dDb29yZGluYXRlcyksIERyYWdPcGVyYXRpb25Ob25lKTsKKyAgICAgICAg
ICAgIHBhZ2UtPmRyYWdFbmRlZChwb3NpdGlvbkZvckRyYWdFbmQsIHBvc2l0aW9uRm9yRHJhZ0Vu
ZCwgRHJhZ09wZXJhdGlvbk5vbmUpOwogICAgICAgICB9CiAgICAgfV07CiB9CkBAIC00Njk5LDE2
ICs0NTk1LDEzIEBAIC0gKHZvaWQpZHJhZ0ludGVyYWN0aW9uOihVSURyYWdJbnRlcmFjdGlvbiAq
KWludGVyYWN0aW9uIHNlc3Npb25XaWxsQmVnaW46KGlkIDxVCiAgICAgICAgIFt1aURlbGVnYXRl
IF93ZWJWaWV3Ol93ZWJWaWV3IGRhdGFJbnRlcmFjdGlvbjppbnRlcmFjdGlvbiBzZXNzaW9uV2ls
bEJlZ2luOnNlc3Npb25dOwogCiAgICAgW19hY3Rpb25TaGVldEFzc2lzdGFudCBjbGVhbnVwU2hl
ZXRdOwotCi0gICAgX2RhdGFJbnRlcmFjdGlvblN0YXRlLmRpZEJlZ2luRHJhZ2dpbmcgPSBZRVM7
Ci0gICAgW3NlbGYgX3RyYW5zaXRpb25EcmFnUHJldmlld1RvSW1hZ2VJZk5lY2Vzc2FyeTpzZXNz
aW9uXTsKLQorICAgIF9kcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuZHJhZ1Nlc3Npb25XaWxsQmVn
aW4oKTsKICAgICBfcGFnZS0+ZGlkU3RhcnREcmFnKCk7CiB9CiAKIC0gKHZvaWQpZHJhZ0ludGVy
YWN0aW9uOihVSURyYWdJbnRlcmFjdGlvbiAqKWludGVyYWN0aW9uIHNlc3Npb246KGlkIDxVSURy
YWdTZXNzaW9uPilzZXNzaW9uIGRpZEVuZFdpdGhPcGVyYXRpb246KFVJRHJvcE9wZXJhdGlvbilv
cGVyYXRpb24KIHsKLSAgICBSRUxFQVNFX0xPRyhEcmFnQW5kRHJvcCwgIkRyYWcgc2Vzc2lvbiBl
bmRlZDogJXAgKHdpdGggb3BlcmF0aW9uOiAldHUsIHBlcmZvcm1pbmcgb3BlcmF0aW9uOiAlZCwg
YmVnYW4gZHJhZ2dpbmc6ICVkKSIsIHNlc3Npb24sIG9wZXJhdGlvbiwgX2RhdGFJbnRlcmFjdGlv
blN0YXRlLmlzUGVyZm9ybWluZ09wZXJhdGlvbiwgX2RhdGFJbnRlcmFjdGlvblN0YXRlLmRpZEJl
Z2luRHJhZ2dpbmcpOworICAgIFJFTEVBU0VfTE9HKERyYWdBbmREcm9wLCAiRHJhZyBzZXNzaW9u
IGVuZGVkOiAlcCAod2l0aCBvcGVyYXRpb246ICV0dSwgcGVyZm9ybWluZyBvcGVyYXRpb246ICVk
LCBiZWdhbiBkcmFnZ2luZzogJWQpIiwgc2Vzc2lvbiwgb3BlcmF0aW9uLCBfZHJhZ0Ryb3BJbnRl
cmFjdGlvblN0YXRlLmlzUGVyZm9ybWluZ0Ryb3AoKSwgX2RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0
ZS5kaWRCZWdpbkRyYWdnaW5nKCkpOwogCiAgICAgW3NlbGYgX3Jlc3RvcmVDYWxsb3V0QmFySWZO
ZWVkZWRdOwogCkBAIC00NzE2LDExICs0NjA5LDExIEBAIC0gKHZvaWQpZHJhZ0ludGVyYWN0aW9u
OihVSURyYWdJbnRlcmFjdGlvbiAqKWludGVyYWN0aW9uIHNlc3Npb246KGlkIDxVSURyYWdTZXNz
CiAgICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZp
ZXc6ZGF0YUludGVyYWN0aW9uOnNlc3Npb246ZGlkRW5kV2l0aE9wZXJhdGlvbjopXSkKICAgICAg
ICAgW3VpRGVsZWdhdGUgX3dlYlZpZXc6X3dlYlZpZXcgZGF0YUludGVyYWN0aW9uOmludGVyYWN0
aW9uIHNlc3Npb246c2Vzc2lvbiBkaWRFbmRXaXRoT3BlcmF0aW9uOm9wZXJhdGlvbl07CiAKLSAg
ICBpZiAoX2RhdGFJbnRlcmFjdGlvblN0YXRlLmlzUGVyZm9ybWluZ09wZXJhdGlvbikKKyAgICBp
ZiAoX2RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5pc1BlcmZvcm1pbmdEcm9wKCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIFtzZWxmIGNsZWFuVXBEcmFnU291cmNlU2Vzc2lvblN0YXRlXTsKLSAg
ICBfcGFnZS0+ZHJhZ0VuZGVkKHJvdW5kZWRJbnRQb2ludChfZGF0YUludGVyYWN0aW9uU3RhdGUu
YWRqdXN0ZWRPcmlnaW4pLCByb3VuZGVkSW50UG9pbnQoW3NlbGYgY29udmVydFBvaW50Ol9kYXRh
SW50ZXJhY3Rpb25TdGF0ZS5hZGp1c3RlZE9yaWdpbiB0b1ZpZXc6c2VsZi53aW5kb3ddKSwgb3Bl
cmF0aW9uKTsKKyAgICBfcGFnZS0+ZHJhZ0VuZGVkKHJvdW5kZWRJbnRQb2ludChfZHJhZ0Ryb3BJ
bnRlcmFjdGlvblN0YXRlLmFkanVzdGVkUG9zaXRpb25Gb3JEcmFnRW5kKCkpLCByb3VuZGVkSW50
UG9pbnQoX2RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5hZGp1c3RlZFBvc2l0aW9uRm9yRHJhZ0Vu
ZCgpKSwgb3BlcmF0aW9uKTsKIH0KIAogLSAoVUlUYXJnZXRlZERyYWdQcmV2aWV3ICopZHJhZ0lu
dGVyYWN0aW9uOihVSURyYWdJbnRlcmFjdGlvbiAqKWludGVyYWN0aW9uIHByZXZpZXdGb3JDYW5j
ZWxsaW5nSXRlbTooVUlEcmFnSXRlbSAqKWl0ZW0gd2l0aERlZmF1bHQ6KFVJVGFyZ2V0ZWREcmFn
UHJldmlldyAqKWRlZmF1bHRQcmV2aWV3CkBAIC00NzMxLDEyICs0NjI0LDEyIEBAIC0gKFVJVGFy
Z2V0ZWREcmFnUHJldmlldyAqKWRyYWdJbnRlcmFjdGlvbjooVUlEcmFnSW50ZXJhY3Rpb24gKilp
bnRlcmFjdGlvbiBwcmV2CiAgICAgICAgIGlmIChvdmVycmlkZW5QcmV2aWV3KQogICAgICAgICAg
ICAgcmV0dXJuIG92ZXJyaWRlblByZXZpZXc7CiAgICAgfQotICAgIHJldHVybiBzZWxmLmRyYWdQ
cmV2aWV3Rm9yQ3VycmVudERhdGFJbnRlcmFjdGlvblN0YXRlLmF1dG9yZWxlYXNlKCk7CisgICAg
cmV0dXJuIF9kcmFnRHJvcEludGVyYWN0aW9uU3RhdGUucHJldmlld0ZvckRyYWdJdGVtKGl0ZW0s
IHNlbGYsIHNlbGYudW5zY2FsZWRWaWV3KTsKIH0KIAogLSAoQk9PTClfZHJhZ0ludGVyYWN0aW9u
OihVSURyYWdJbnRlcmFjdGlvbiAqKWludGVyYWN0aW9uIGl0ZW06KFVJRHJhZ0l0ZW0gKilpdGVt
IHNob3VsZERlbGF5U2V0RG93bkFuaW1hdGlvbldpdGhDb21wbGV0aW9uOih2b2lkKF4pKHZvaWQp
KWNvbXBsZXRpb24KIHsKLSAgICBfZGF0YUludGVyYWN0aW9uU3RhdGUuZHJhZ0NhbmNlbFNldERv
d25CbG9jayA9IGNvbXBsZXRpb247CisgICAgX2RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5kcmFn
U2Vzc2lvbldpbGxEZWxheVNldERvd25BbmltYXRpb24oY29tcGxldGlvbik7CiAgICAgcmV0dXJu
IFlFUzsKIH0KIApAQCAtNDc0NCw4ICs0NjM3LDcgQEAgLSAodm9pZClkcmFnSW50ZXJhY3Rpb246
KFVJRHJhZ0ludGVyYWN0aW9uICopaW50ZXJhY3Rpb24gaXRlbTooVUlEcmFnSXRlbSAqKWl0ZW0K
IHsKICAgICBbYW5pbWF0b3IgYWRkQ29tcGxldGlvbjpbcHJvdGVjdGVkU2VsZiA9IHJldGFpblB0
cihzZWxmKSwgcGFnZSA9IF9wYWdlXSAoVUlWaWV3QW5pbWF0aW5nUG9zaXRpb24gZmluYWxQb3Np
dGlvbikgewogICAgICAgICBwYWdlLT5kcmFnQ2FuY2VsbGVkKCk7Ci0gICAgICAgIGlmIChhdXRv
IGNvbXBsZXRpb24gPSBwcm90ZWN0ZWRTZWxmLT5fZGF0YUludGVyYWN0aW9uU3RhdGUuZHJhZ0Nh
bmNlbFNldERvd25CbG9jaykgewotICAgICAgICAgICAgcHJvdGVjdGVkU2VsZi0+X2RhdGFJbnRl
cmFjdGlvblN0YXRlLmRyYWdDYW5jZWxTZXREb3duQmxvY2sgPSBuaWw7CisgICAgICAgIGlmIChh
dXRvIGNvbXBsZXRpb24gPSBwcm90ZWN0ZWRTZWxmLT5fZHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRl
LnRha2VEcmFnQ2FuY2VsU2V0RG93bkJsb2NrKCkpIHsKICAgICAgICAgICAgIHBhZ2UtPmNhbGxB
ZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGUoW2NvbXBsZXRpb25dIChDYWxsYmFja0Jhc2U6OkVy
cm9yKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbigpOwogICAgICAgICAgICAgfSk7CkBA
IC00Nzc2LDE0ICs0NjY4LDEyIEBAIC0gKEJPT0wpZHJvcEludGVyYWN0aW9uOihVSURyb3BJbnRl
cmFjdGlvbiAqKWludGVyYWN0aW9uIGNhbkhhbmRsZVNlc3Npb246KGlkPFVJCiAtICh2b2lkKWRy
b3BJbnRlcmFjdGlvbjooVUlEcm9wSW50ZXJhY3Rpb24gKilpbnRlcmFjdGlvbiBzZXNzaW9uRGlk
RW50ZXI6KGlkIDxVSURyb3BTZXNzaW9uPilzZXNzaW9uCiB7CiAgICAgUkVMRUFTRV9MT0coRHJh
Z0FuZERyb3AsICJEcm9wIHNlc3Npb24gZW50ZXJlZDogJXAgd2l0aCAldHUgaXRlbXMiLCBzZXNz
aW9uLCBzZXNzaW9uLml0ZW1zLmNvdW50KTsKLSAgICBfZGF0YUludGVyYWN0aW9uU3RhdGUuZHJv
cFNlc3Npb24gPSBzZXNzaW9uOwotCi0gICAgW1tXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHNo
YXJlZEluc3RhbmNlXSBzZXRJdGVtUHJvdmlkZXJzOmV4dHJhY3RJdGVtUHJvdmlkZXJzRnJvbURy
b3BTZXNzaW9uKHNlc3Npb24pXTsKLQogICAgIGF1dG8gZHJhZ0RhdGEgPSBbc2VsZiBkcmFnRGF0
YUZvckRyb3BTZXNzaW9uOnNlc3Npb24gZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOltzZWxmIF9kcmFn
RGVzdGluYXRpb25BY3Rpb25Gb3JEcm9wU2Vzc2lvbjpzZXNzaW9uXV07CiAKKyAgICBfZHJhZ0Ry
b3BJbnRlcmFjdGlvblN0YXRlLmRyb3BTZXNzaW9uRGlkRW50ZXJPclVwZGF0ZShzZXNzaW9uLCBk
cmFnRGF0YSk7CisKKyAgICBbW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgc2hhcmVkSW5zdGFu
Y2VdIHNldEl0ZW1Qcm92aWRlcnM6ZXh0cmFjdEl0ZW1Qcm92aWRlcnNGcm9tRHJvcFNlc3Npb24o
c2Vzc2lvbildOwogICAgIF9wYWdlLT5kcmFnRW50ZXJlZChkcmFnRGF0YSwgImRhdGEgaW50ZXJh
Y3Rpb24gcGFzdGVib2FyZCIpOwotICAgIF9kYXRhSW50ZXJhY3Rpb25TdGF0ZS5sYXN0R2xvYmFs
UG9zaXRpb24gPSBkcmFnRGF0YS5nbG9iYWxQb3NpdGlvbigpOwogfQogCiAtIChVSURyb3BQcm9w
b3NhbCAqKWRyb3BJbnRlcmFjdGlvbjooVUlEcm9wSW50ZXJhY3Rpb24gKilpbnRlcmFjdGlvbiBz
ZXNzaW9uRGlkVXBkYXRlOihpZCA8VUlEcm9wU2Vzc2lvbj4pc2Vzc2lvbgpAQCAtNDc5Miw3ICs0
NjgyLDcgQEAgLSAoVUlEcm9wUHJvcG9zYWwgKilkcm9wSW50ZXJhY3Rpb246KFVJRHJvcEludGVy
YWN0aW9uICopaW50ZXJhY3Rpb24gc2Vzc2lvbkRpZFUKIAogICAgIGF1dG8gZHJhZ0RhdGEgPSBb
c2VsZiBkcmFnRGF0YUZvckRyb3BTZXNzaW9uOnNlc3Npb24gZHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
OltzZWxmIF9kcmFnRGVzdGluYXRpb25BY3Rpb25Gb3JEcm9wU2Vzc2lvbjpzZXNzaW9uXV07CiAg
ICAgX3BhZ2UtPmRyYWdVcGRhdGVkKGRyYWdEYXRhLCAiZGF0YSBpbnRlcmFjdGlvbiBwYXN0ZWJv
YXJkIik7Ci0gICAgX2RhdGFJbnRlcmFjdGlvblN0YXRlLmxhc3RHbG9iYWxQb3NpdGlvbiA9IGRy
YWdEYXRhLmdsb2JhbFBvc2l0aW9uKCk7CisgICAgX2RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5k
cm9wU2Vzc2lvbkRpZEVudGVyT3JVcGRhdGUoc2Vzc2lvbiwgZHJhZ0RhdGEpOwogCiAgICAgTlNV
SW50ZWdlciBvcGVyYXRpb24gPSBkcm9wT3BlcmF0aW9uRm9yV2ViQ29yZURyYWdPcGVyYXRpb24o
X3BhZ2UtPmN1cnJlbnREcmFnT3BlcmF0aW9uKCkpOwogICAgIGlmIChbc2VsZi53ZWJWaWV3VUlE
ZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OndpbGxVcGRhdGVE
YXRhSW50ZXJhY3Rpb25PcGVyYXRpb25Ub09wZXJhdGlvbjpmb3JTZXNzaW9uOildKQpAQCAtNDgx
MCw3ICs0NzAwLDcgQEAgLSAodm9pZClkcm9wSW50ZXJhY3Rpb246KFVJRHJvcEludGVyYWN0aW9u
ICopaW50ZXJhY3Rpb24gc2Vzc2lvbkRpZEV4aXQ6KGlkIDxVSUQKICAgICBfcGFnZS0+ZHJhZ0V4
aXRlZChkcmFnRGF0YSwgImRhdGEgaW50ZXJhY3Rpb24gcGFzdGVib2FyZCIpOwogICAgIF9wYWdl
LT5yZXNldEN1cnJlbnREcmFnSW5mb3JtYXRpb24oKTsKIAotICAgIF9kYXRhSW50ZXJhY3Rpb25T
dGF0ZS5kcm9wU2Vzc2lvbiA9IG5pbDsKKyAgICBfZHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmRy
b3BTZXNzaW9uRGlkRXhpdCgpOwogfQogCiAtICh2b2lkKWRyb3BJbnRlcmFjdGlvbjooVUlEcm9w
SW50ZXJhY3Rpb24gKilpbnRlcmFjdGlvbiBwZXJmb3JtRHJvcDooaWQgPFVJRHJvcFNlc3Npb24+
KXNlc3Npb24KQEAgLTQ4MjgsOSArNDcxOCwxMCBAQCAtICh2b2lkKWRyb3BJbnRlcmFjdGlvbjoo
VUlEcm9wSW50ZXJhY3Rpb24gKilpbnRlcmFjdGlvbiBwZXJmb3JtRHJvcDooaWQgPFVJRHJvcAog
ICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIF9kcmFnRHJvcEludGVyYWN0aW9uU3Rh
dGUuZHJvcFNlc3Npb25XaWxsUGVyZm9ybURyb3AoKTsKKwogICAgIFtbV2ViSXRlbVByb3ZpZGVy
UGFzdGVib2FyZCBzaGFyZWRJbnN0YW5jZV0gc2V0SXRlbVByb3ZpZGVyczppdGVtUHJvdmlkZXJz
XTsKICAgICBbW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgc2hhcmVkSW5zdGFuY2VdIGluY3Jl
bWVudFBlbmRpbmdPcGVyYXRpb25Db3VudF07Ci0gICAgX2RhdGFJbnRlcmFjdGlvblN0YXRlLmlz
UGVyZm9ybWluZ09wZXJhdGlvbiA9IFlFUzsKICAgICBhdXRvIGRyYWdEYXRhID0gW3NlbGYgZHJh
Z0RhdGFGb3JEcm9wU2Vzc2lvbjpzZXNzaW9uIGRyYWdEZXN0aW5hdGlvbkFjdGlvbjpXS0RyYWdE
ZXN0aW5hdGlvbkFjdGlvbkFueV07CiAKICAgICBSRUxFQVNFX0xPRyhEcmFnQW5kRHJvcCwgIkxv
YWRpbmcgZGF0YSBmcm9tICV0dSBpdGVtIHByb3ZpZGVycyBmb3Igc2Vzc2lvbjogJXAiLCBpdGVt
UHJvdmlkZXJzLmNvdW50LCBzZXNzaW9uKTsKQEAgLTQ4NTEsMTEgKzQ3NDIsMTEgQEAgLSAodm9p
ZClkcm9wSW50ZXJhY3Rpb246KFVJRHJvcEludGVyYWN0aW9uICopaW50ZXJhY3Rpb24gcGVyZm9y
bURyb3A6KGlkIDxVSURyb3AKICAgICAgICAgcmV0YWluZWRTZWxmLT5fcGFnZS0+Y3JlYXRlU2Fu
ZGJveEV4dGVuc2lvbnNJZk5lZWRlZChmaWxlbmFtZXMsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUs
IHNhbmRib3hFeHRlbnNpb25Gb3JVcGxvYWQpOwogICAgICAgICByZXRhaW5lZFNlbGYtPl9wYWdl
LT5wZXJmb3JtRHJhZ09wZXJhdGlvbihjYXB0dXJlZERyYWdEYXRhLCAiZGF0YSBpbnRlcmFjdGlv
biBwYXN0ZWJvYXJkIiwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgc2FuZGJveEV4dGVuc2lvbkZv
clVwbG9hZCk7CiAKLSAgICAgICAgcmV0YWluZWRTZWxmLT5fZGF0YUludGVyYWN0aW9uU3RhdGUu
dmlzaWJsZUNvbnRlbnRWaWV3U25hcHNob3QgPSBbcmV0YWluZWRTZWxmIHNuYXBzaG90Vmlld0Fm
dGVyU2NyZWVuVXBkYXRlczpOT107CisgICAgICAgIHJldGFpbmVkU2VsZi0+X3Zpc2libGVDb250
ZW50Vmlld1NuYXBzaG90ID0gW3JldGFpbmVkU2VsZiBzbmFwc2hvdFZpZXdBZnRlclNjcmVlblVw
ZGF0ZXM6Tk9dOwogICAgICAgICBbcmV0YWluZWRTZWxmIHNldFN1cHByZXNzQXNzaXN0YW50U2Vs
ZWN0aW9uVmlldzpZRVNdOwogICAgICAgICBbVUlWaWV3IHBlcmZvcm1XaXRob3V0QW5pbWF0aW9u
OltyZXRhaW5lZFNlbGZdIHsKLSAgICAgICAgICAgIFtyZXRhaW5lZFNlbGYtPl9kYXRhSW50ZXJh
Y3Rpb25TdGF0ZS52aXNpYmxlQ29udGVudFZpZXdTbmFwc2hvdCBzZXRGcmFtZTpbcmV0YWluZWRT
ZWxmIGJvdW5kc11dOwotICAgICAgICAgICAgW3JldGFpbmVkU2VsZiBhZGRTdWJ2aWV3OnJldGFp
bmVkU2VsZi0+X2RhdGFJbnRlcmFjdGlvblN0YXRlLnZpc2libGVDb250ZW50Vmlld1NuYXBzaG90
LmdldCgpXTsKKyAgICAgICAgICAgIFtyZXRhaW5lZFNlbGYtPl92aXNpYmxlQ29udGVudFZpZXdT
bmFwc2hvdCBzZXRGcmFtZTpbcmV0YWluZWRTZWxmIGJvdW5kc11dOworICAgICAgICAgICAgW3Jl
dGFpbmVkU2VsZiBhZGRTdWJ2aWV3OnJldGFpbmVkU2VsZi0+X3Zpc2libGVDb250ZW50Vmlld1Nu
YXBzaG90LmdldCgpXTsKICAgICAgICAgfV07CiAgICAgfV07CiB9CkBAIC00ODc3LDkgKzQ3Njgs
MTYgQEAgLSAoVUlUYXJnZXRlZERyYWdQcmV2aWV3ICopZHJvcEludGVyYWN0aW9uOihVSURyb3BJ
bnRlcmFjdGlvbiAqKWludGVyYWN0aW9uIHByZXYKIAogLSAodm9pZClkcm9wSW50ZXJhY3Rpb246
KFVJRHJvcEludGVyYWN0aW9uICopaW50ZXJhY3Rpb24gc2Vzc2lvbkRpZEVuZDooaWQgPFVJRHJv
cFNlc3Npb24+KXNlc3Npb24KIHsKLSAgICBSRUxFQVNFX0xPRyhEcmFnQW5kRHJvcCwgIkRyb3Ag
c2Vzc2lvbiBlbmRlZDogJXAgKHBlcmZvcm1pbmcgb3BlcmF0aW9uOiAlZCwgYmVnYW4gZHJhZ2dp
bmc6ICVkKSIsIHNlc3Npb24sIF9kYXRhSW50ZXJhY3Rpb25TdGF0ZS5pc1BlcmZvcm1pbmdPcGVy
YXRpb24sIF9kYXRhSW50ZXJhY3Rpb25TdGF0ZS5kaWRCZWdpbkRyYWdnaW5nKTsKLSAgICBpZiAo
X2RhdGFJbnRlcmFjdGlvblN0YXRlLmlzUGVyZm9ybWluZ09wZXJhdGlvbiB8fCBfZGF0YUludGVy
YWN0aW9uU3RhdGUuZGlkQmVnaW5EcmFnZ2luZykKKyAgICBSRUxFQVNFX0xPRyhEcmFnQW5kRHJv
cCwgIkRyb3Agc2Vzc2lvbiBlbmRlZDogJXAgKHBlcmZvcm1pbmcgb3BlcmF0aW9uOiAlZCwgYmVn
YW4gZHJhZ2dpbmc6ICVkKSIsIHNlc3Npb24sIF9kcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaXNQ
ZXJmb3JtaW5nRHJvcCgpLCBfZHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmRpZEJlZ2luRHJhZ2dp
bmcoKSk7CisgICAgaWYgKF9kcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaXNQZXJmb3JtaW5nRHJv
cCgpKSB7CisgICAgICAgIC8vIEluIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSBwZXJmb3JtaW5nIGEg
ZHJvcCwgd2FpdCB1bnRpbCBhZnRlciB0aGUgZHJvcCBpcyBoYW5kbGVkIGluIHRoZSB3ZWIgcHJv
Y2VzcyB0byByZXNldCBkcmFnIGFuZCBkcm9wIGludGVyYWN0aW9uIHN0YXRlLgogICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKF9kcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuZGlkQmVn
aW5EcmFnZ2luZygpKSB7CisgICAgICAgIC8vIEluIHRoZSBjYXNlIHdoZXJlIHRoZSBjb250ZW50
IHZpZXcgaXMgYSBzb3VyY2Ugb2YgZHJhZyBpdGVtcywgd2FpdCB1bnRpbCAtZHJhZ0ludGVyYWN0
aW9uOnNlc3Npb246ZGlkRW5kV2l0aE9wZXJhdGlvbjogdG8gcmVzZXQgZHJhZyBhbmQgZHJvcCBp
bnRlcmFjdGlvbiBzdGF0ZS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIENHUG9pbnQg
Z2xvYmFsOwogICAgIENHUG9pbnQgY2xpZW50OwpAQCAtNDg5Miw0MiArNDc5MCw0MiBAQCAtICh2
b2lkKWRyb3BJbnRlcmFjdGlvbjooVUlEcm9wSW50ZXJhY3Rpb24gKilpbnRlcmFjdGlvbiBzZXNz
aW9uRGlkRW5kOihpZCA8VUlEcgogCiAtICh2b2lkKV9zaW11bGF0ZURhdGFJbnRlcmFjdGlvbkVu
dGVyZWQ6KGlkKXNlc3Npb24KIHsKLSAgICBbc2VsZiBkcm9wSW50ZXJhY3Rpb246X2RhdGFPcGVy
YXRpb24uZ2V0KCkgc2Vzc2lvbkRpZEVudGVyOnNlc3Npb25dOworICAgIFtzZWxmIGRyb3BJbnRl
cmFjdGlvbjpfZHJvcEludGVyYWN0aW9uLmdldCgpIHNlc3Npb25EaWRFbnRlcjpzZXNzaW9uXTsK
IH0KIAogLSAoTlNVSW50ZWdlcilfc2ltdWxhdGVEYXRhSW50ZXJhY3Rpb25VcGRhdGVkOihpZClz
ZXNzaW9uCiB7Ci0gICAgcmV0dXJuIFtzZWxmIGRyb3BJbnRlcmFjdGlvbjpfZGF0YU9wZXJhdGlv
bi5nZXQoKSBzZXNzaW9uRGlkVXBkYXRlOnNlc3Npb25dLm9wZXJhdGlvbjsKKyAgICByZXR1cm4g
W3NlbGYgZHJvcEludGVyYWN0aW9uOl9kcm9wSW50ZXJhY3Rpb24uZ2V0KCkgc2Vzc2lvbkRpZFVw
ZGF0ZTpzZXNzaW9uXS5vcGVyYXRpb247CiB9CiAKIC0gKHZvaWQpX3NpbXVsYXRlRGF0YUludGVy
YWN0aW9uRW5kZWQ6KGlkKXNlc3Npb24KIHsKLSAgICBbc2VsZiBkcm9wSW50ZXJhY3Rpb246X2Rh
dGFPcGVyYXRpb24uZ2V0KCkgc2Vzc2lvbkRpZEVuZDpzZXNzaW9uXTsKKyAgICBbc2VsZiBkcm9w
SW50ZXJhY3Rpb246X2Ryb3BJbnRlcmFjdGlvbi5nZXQoKSBzZXNzaW9uRGlkRW5kOnNlc3Npb25d
OwogfQogCiAtICh2b2lkKV9zaW11bGF0ZURhdGFJbnRlcmFjdGlvblBlcmZvcm1PcGVyYXRpb246
KGlkKXNlc3Npb24KIHsKLSAgICBbc2VsZiBkcm9wSW50ZXJhY3Rpb246X2RhdGFPcGVyYXRpb24u
Z2V0KCkgcGVyZm9ybURyb3A6c2Vzc2lvbl07CisgICAgW3NlbGYgZHJvcEludGVyYWN0aW9uOl9k
cm9wSW50ZXJhY3Rpb24uZ2V0KCkgcGVyZm9ybURyb3A6c2Vzc2lvbl07CiB9CiAKIC0gKHZvaWQp
X3NpbXVsYXRlRGF0YUludGVyYWN0aW9uU2Vzc2lvbkRpZEVuZDooaWQpc2Vzc2lvbgogewotICAg
IFtzZWxmIGRyYWdJbnRlcmFjdGlvbjpfZGF0YUludGVyYWN0aW9uLmdldCgpIHNlc3Npb246c2Vz
c2lvbiBkaWRFbmRXaXRoT3BlcmF0aW9uOlVJRHJvcE9wZXJhdGlvbkNvcHldOworICAgIFtzZWxm
IGRyYWdJbnRlcmFjdGlvbjpfZHJhZ0ludGVyYWN0aW9uLmdldCgpIHNlc3Npb246c2Vzc2lvbiBk
aWRFbmRXaXRoT3BlcmF0aW9uOlVJRHJvcE9wZXJhdGlvbkNvcHldOwogfQogCiAtICh2b2lkKV9z
aW11bGF0ZVdpbGxCZWdpbkRhdGFJbnRlcmFjdGlvbldpdGhTZXNzaW9uOihpZClzZXNzaW9uCiB7
Ci0gICAgW3NlbGYgZHJhZ0ludGVyYWN0aW9uOl9kYXRhSW50ZXJhY3Rpb24uZ2V0KCkgc2Vzc2lv
bldpbGxCZWdpbjpzZXNzaW9uXTsKKyAgICBbc2VsZiBkcmFnSW50ZXJhY3Rpb246X2RyYWdJbnRl
cmFjdGlvbi5nZXQoKSBzZXNzaW9uV2lsbEJlZ2luOnNlc3Npb25dOwogfQogCiAtIChOU0FycmF5
ICopX3NpbXVsYXRlZEl0ZW1zRm9yU2Vzc2lvbjooaWQpc2Vzc2lvbgogewotICAgIHJldHVybiBb
c2VsZiBkcmFnSW50ZXJhY3Rpb246X2RhdGFJbnRlcmFjdGlvbi5nZXQoKSBpdGVtc0ZvckJlZ2lu
bmluZ1Nlc3Npb246c2Vzc2lvbl07CisgICAgcmV0dXJuIFtzZWxmIGRyYWdJbnRlcmFjdGlvbjpf
ZHJhZ0ludGVyYWN0aW9uLmdldCgpIGl0ZW1zRm9yQmVnaW5uaW5nU2Vzc2lvbjpzZXNzaW9uXTsK
IH0KIAogLSAodm9pZClfc2ltdWxhdGVQcmVwYXJlRm9yRGF0YUludGVyYWN0aW9uU2Vzc2lvbjoo
aWQpc2Vzc2lvbiBjb21wbGV0aW9uOihkaXNwYXRjaF9ibG9ja190KWNvbXBsZXRpb24KIHsKLSAg
ICBbc2VsZiBfZHJhZ0ludGVyYWN0aW9uOl9kYXRhSW50ZXJhY3Rpb24uZ2V0KCkgcHJlcGFyZUZv
clNlc3Npb246c2Vzc2lvbiBjb21wbGV0aW9uOmNvbXBsZXRpb25dOworICAgIFtzZWxmIF9kcmFn
SW50ZXJhY3Rpb246X2RyYWdJbnRlcmFjdGlvbi5nZXQoKSBwcmVwYXJlRm9yU2Vzc2lvbjpzZXNz
aW9uIGNvbXBsZXRpb246Y29tcGxldGlvbl07CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzE4MGRhMmZlMTNiN2My
MTU1OGE2ODJjZmZkZTdmN2YyZmJmMDVhNi4uYTJhMjg1ZTRkM2QwYjhhZGMwMmM2ZTc5Y2QyYThk
MDI5NDI0YWQwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0yMDU3LDYgKzIwNTcsOCBAQAogCQlGNDA5QkExODFFNkU2NEJDMDA5REEy
OEUgLyogV0tEcmFnRGVzdGluYXRpb25BY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0MDlCQTE3MUU2RTY0QjMwMDlEQTI4RSAvKiBXS0RyYWdE
ZXN0aW5hdGlvbkFjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUY0NERGRUIyMUU5RTc1MkYwMDM4RDE5NiAvKiBXZWJJY29uVXRpbGl0aWVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDRERkVC
MDFFOUU3NTJGMDAzOEQxOTYgLyogV2ViSWNvblV0aWxpdGllcy5oICovOyB9OwogCQlGNDRERkVC
MzFFOUU3NTJGMDAzOEQxOTYgLyogV2ViSWNvblV0aWxpdGllcy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NERGRUIxMUU5RTc1MkYwMDM4RDE5NiAv
KiBXZWJJY29uVXRpbGl0aWVzLm1tICovOyB9OworCQlGNDk2QTQzMTFGNThBMjcyMDA0QzE3NTcg
LyogRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGNDk2QTQyRjFGNThBMjcyMDA0QzE3NTcgLyogRHJhZ0Ryb3BJ
bnRlcmFjdGlvblN0YXRlLmggKi87IH07CisJCUY0OTZBNDMyMUY1OEEyNzIwMDRDMTc1NyAvKiBE
cmFnRHJvcEludGVyYWN0aW9uU3RhdGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNDk2QTQzMDFGNThBMjcyMDA0QzE3NTcgLyogRHJhZ0Ryb3BJbnRl
cmFjdGlvblN0YXRlLm1tICovOyB9OwogCQlGNjExM0UyNTEyNkNFMTgyMDA1N0QwQTcgLyogQVBJ
VXNlckNvbnRlbnRVUkxQYXR0ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNjExM0UyNDEyNkNFMTgyMDA1N0QwQTcgLyogQVBJVXNlckNvbnRlbnRV
UkxQYXR0ZXJuLmggKi87IH07CiAJCUY2MTEzRTI4MTI2Q0UxOUIwMDU3RDBBNyAvKiBXS1VzZXJD
b250ZW50VVJMUGF0dGVybi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNjExM0UyNjEyNkNFMTlCMDA1N0QwQTcgLyogV0tVc2VyQ29udGVudFVSTFBh
dHRlcm4uY3BwICovOyB9OwogCQlGNjExM0UyOTEyNkNFMTlCMDA1N0QwQTcgLyogV0tVc2VyQ29u
dGVudFVSTFBhdHRlcm4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY2MTEzRTI3MTI2Q0UxOUIwMDU3RDBBNyAvKiBXS1VzZXJDb250ZW50VVJMUGF0dGVy
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00
NDU5LDYgKzQ0NjEsOCBAQAogCQlGNDA5QkExNzFFNkU2NEIzMDA5REEyOEUgLyogV0tEcmFnRGVz
dGluYXRpb25BY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tEcmFn
RGVzdGluYXRpb25BY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ0REZF
QjAxRTlFNzUyRjAwMzhEMTk2IC8qIFdlYkljb25VdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gV2ViSWNvblV0aWxpdGllcy5oOyBwYXRoID0gaW9zL1dlYkljb25V
dGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ0REZFQjExRTlFNzUy
RjAwMzhEMTk2IC8qIFdlYkljb25VdGlsaXRpZXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IG5hbWUgPSBXZWJJY29uVXRpbGl0aWVzLm1tOyBwYXRoID0gaW9zL1dlYkljb25V
dGlsaXRpZXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0OTZBNDJGMUY1OEEy
NzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
RHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmg7IHBhdGggPSBpb3MvRHJhZ0Ryb3BJbnRlcmFjdGlv
blN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0OTZBNDMwMUY1OEEyNzIw
MDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5h
bWUgPSBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUubW07IHBhdGggPSBpb3MvRHJhZ0Ryb3BJbnRl
cmFjdGlvblN0YXRlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNjExM0UyNDEy
NkNFMTgyMDA1N0QwQTcgLyogQVBJVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSVVzZXJDb250ZW50VVJMUGF0dGVybi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGNjExM0UyNjEyNkNFMTlCMDA1N0QwQTcgLyogV0tVc2Vy
Q29udGVudFVSTFBhdHRlcm4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV0tVc2VyQ29udGVudFVSTFBhdHRlcm4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGNjExM0UyNzEyNkNFMTlCMDA1N0QwQTcgLyogV0tVc2VyQ29udGVudFVSTFBhdHRlcm4u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tVc2VyQ29udGVudFVSTFBhdHRl
cm4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1MTYsNiArNTUyMCw4IEBACiAJ
CQkJQTE5REQzQkYxRDA3RDE2ODAwQUM4MjNCIC8qIF9XS1dlYlZpZXdQcmludEZvcm1hdHRlcklu
dGVybmFsLmggKi8sCiAJCQkJMUFENEMxOTExQjM5RjMzMjAwQUJDMjhFIC8qIEFwcGxpY2F0aW9u
U3RhdGVUcmFja2VyLmggKi8sCiAJCQkJMUFENEMxOTAxQjM5RjMzMjAwQUJDMjhFIC8qIEFwcGxp
Y2F0aW9uU3RhdGVUcmFja2VyLm1tICovLAorCQkJCUY0OTZBNDJGMUY1OEEyNzIwMDRDMTc1NyAv
KiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaCAqLywKKwkJCQlGNDk2QTQzMDFGNThBMjcyMDA0
QzE3NTcgLyogRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLm1tICovLAogCQkJCTJERDQ1QURDMUU1
Rjg5NzIwMDZDMzU1RiAvKiBJbnB1dFZpZXdVcGRhdGVEZWZlcnJlci5oICovLAogCQkJCTJERDQ1
QUREMUU1Rjg5NzIwMDZDMzU1RiAvKiBJbnB1dFZpZXdVcGRhdGVEZWZlcnJlci5tbSAqLywKIAkJ
CQkwRjBDMzY1RDE4QzExMEE1MDBGNjA3RDcgLyogTGF5ZXJSZXByZXNlbnRhdGlvbi5tbSAqLywK
QEAgLTg0NzYsNiArODQ4Miw3IEBACiAJCQkJMUFEMjVFOTYxNjdBQjA4MTAwRUE5QkNEIC8qIERv
d25sb2FkUHJveHlNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjdENjFBMTI4OEI5RDkwMENG
RDA4QyAvKiBEb3dubG9hZFByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1MTcz
ODgxMTJERjhGNEYwMEVFM0Y0NyAvKiBEcmFnQ29udHJvbGxlckFjdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRjQ5NkE0MzExRjU4QTI3MjAwNEMxNzU3IC8qIERyYWdEcm9wSW50ZXJhY3Rpb25T
dGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4NDUyQTgxMTYyQzgwOTAwQ0FCOUI1IC8qIERy
YXdpbmdBcmVhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI2NTkyMzEyMDhCNERCMDA0NDgxNkMg
LyogRHJhd2luZ0FyZWFJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTY0MjI5QTEyREQwMjky
MDBDQUFFMkMgLyogRHJhd2luZ0FyZWFNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDAz
Nyw2ICsxMDA0NCw3IEBACiAJCQkJMUFCN0Q0Q0IxMjg4QUFBNzAwQ0ZEMDhDIC8qIERvd25sb2Fk
UHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFEMjVFOTUxNjdBQjA4MTAwRUE5QkNEIC8q
IERvd25sb2FkUHJveHlNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCN0Q2MTkxMjg4QjlE
OTAwQ0ZEMDhDIC8qIERvd25sb2FkUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRjQ5NkE0MzIxRjU4QTI3MjAwNEMxNzU3IC8qIERyYWdEcm9wSW50ZXJhY3Rpb25T
dGF0ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDODQ1MkE3MTE2MkM4MDkwMENBQjlCNSAvKiBE
cmF3aW5nQXJlYS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTY0MjI5OTEyREQwMjkyMDBDQUFF
MkMgLyogRHJhd2luZ0FyZWFNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkMyNjUyMTYxMTgyNjA4MTAwMjQzRTEyIC8qIERyYXdpbmdBcmVhUHJveHkuY3BwIGluIFNvdXJj
ZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggZDNmMzhmMmMwNjE2ZjdlMTZlNzBlMjJhN2ZlMDUzMDZiYTFiZWYzNS4uNTFiZjRjYzA3OWU1
OGViNjQzNzU1NmNhZDE5MzIyZmU2YzMxNzVhYiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9n
CisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDE3LTA5LTA0ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1MgRG5EXSBS
ZWZhY3RvciBkcmFnIGFuZCBkcm9wIGxvZ2ljIGluIFdLQ29udGVudFZpZXcgaW4gcHJlcGFyYXRp
b24gZm9yIHN1cHBvcnRpbmcgbXVsdGlwbGUgZHJhZyBpdGVtcyBpbiBhIGRyYWcgc2Vzc2lvbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MjY0Cisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMTE0NDY3ND4KKworICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBBZGxlci4KKworICAgICAgICBBZGRzIHR3byBuZXcgaU9TIGRyYWcgYW5kIGRyb3AgdGVz
dHMgdG8gY2hlY2sgdGhhdCB0aGUgY2xpZW50WCBhbmQgY2xpZW50WSBhdHRyaWJ1dGVzIG9mIG1v
dXNlIGV2ZW50cyBwcm9wYWdhdGVkCisgICAgICAgIHRvIHRoZSBwYWdlIGR1cmluZyBkcm9wIGFy
ZSBjb3JyZWN0LiBFYWNoIHRlc3QgZHJhZ3MgZnJvbSBhbiBpbWFnZSBlbGVtZW50IGFuZCBkcm9w
cyBpbnRvIHRocmVlIGN1c3RvbS1kcm9wLQorICAgICAgICBoYW5kbGluZyBlbGVtZW50czsgYGRy
YWdlbnRlcmAsIGBkcmFnb3ZlcmAsIGFuZCBgZHJvcGAgZXZlbnQgbGlzdGVuZXJzIG9uIHRoZSBi
b2R5IHRoZW4gdXNlIHRoZSBjbGllbnRYIGFuZAorICAgICAgICBjbGllbnRZIGV2ZW50IGF0dHJp
YnV0ZXMgdG8gaGl0LXRlc3QgZm9yIGRyb3AgdGFyZ2V0IGVsZW1lbnRzLiBUaGUgZmlyc3QgdGVz
dCBpcyBzdWZmaXhlZCB3aXRoICItQmFzaWMiOyB0aGUKKyAgICAgICAgc2Vjb25kIHRlc3QsIHN1
ZmZpeGVkIHdpdGggIi1XaXRoU2Nyb2xsT2Zmc2V0IiwgbWFrZXMgdGhlIGRvY3VtZW50IHNjcm9s
bGFibGUgdG8gY2hlY2sgdGhhdCBjbGllbnRZIGlzIGNvcnJlY3QKKyAgICAgICAgd2hlbiBzY3Jv
bGxlZC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvZHJvcC10YXJnZXRzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvaW9zL0RhdGFJbnRlcmFjdGlvblRlc3RzLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
dGVzdERyYWdBbmREcm9wT250b1RhcmdldEVsZW1lbnRzKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFdLV2ViVmlldy5t
bToKKyAgICAgICAgKC1bVGVzdFdLV2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
Ol0pOgorCisgICAgICAgIExvZyBhIHdhcm5pbmcgbWVzc2FnZSB3aGVuIGFuIEFQSSB0ZXN0IGZh
aWxzIGR1ZSB0byBKYXZhU2NyaXB0IGV2YWx1YXRpb24gaW4gVGVzdFdLV2ViVmlldy4KKwogMjAx
Ny0wOS0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFdTTCBJ
bnRMaXRlcmFsIHNob3VsZCBoYXZlIHZhcmlhYmxlIHR5cGUgc28gdGhhdCBpdCBjYW4gdW5pZnkg
d2l0aCB0aGluZ3MgbGlrZSB1aW50CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDNhN2ZlMTU1
NDYwM2MwZjIwMjBkYTA0NWMwYWY1OWZmMzQyNmY5NjAuLjI2MGNhYTJmYmU3NTg5Zjk0ODBhNTA4
MjUxOGYxNDkwN2FmMjdmYjEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdl
YktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NTgsNiArNjU4
LDcgQEAKIAkJRUNBNjgwQ0UxRTY4Q0MwOTAwNzMxRDIwIC8qIFN0cmluZ1V0aWxpdGllcy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVDQTY4MENEMUU2
OENDMDkwMDczMUQyMCAvKiBTdHJpbmdVdGlsaXRpZXMubW0gKi87IH07CiAJCUY0MDdGRTM5MUYx
RDBERkMwMDE3Q0YyNSAvKiBlbm9ybW91cy5zdmcgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQwN0ZFMzgxRjFEMERFNjAwMTdDRjI1IC8qIGVu
b3Jtb3VzLnN2ZyAqLzsgfTsKIAkJRjQxNTA4NkQxREEwNDBDNTAwNDRCRTlCIC8qIHBsYXktYXVk
aW8tb24tY2xpY2suaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNDE1MDg2QzFEQTA0MEMxMDA0NEJFOUIgLyogcGxheS1hdWRpby1vbi1j
bGljay5odG1sICovOyB9OworCQlGNDE5NEFEMTFGNUEzMjAxMDBBREQ4M0YgLyogZHJvcC10YXJn
ZXRzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRjQxOTRBRDAxRjVBMkVBNTAwQUREODNGIC8qIGRyb3AtdGFyZ2V0cy5odG1sICovOyB9
OwogCQlGNDFBQjk5RjFFRjQ2OTZCMDA4M0ZBMDggLyogYXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJs
ZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY0MUFCOTk4MUVGNDY5MkMwMDgzRkEwOCAvKiBhdXRvZm9jdXMtY29udGVudGVkaXRhYmxl
Lmh0bWwgKi87IH07CiAJCUY0MUFCOUEwMUVGNDY5NkIwMDgzRkEwOCAvKiBiYWNrZ3JvdW5kLWlt
YWdlLWxpbmstYW5kLWlucHV0Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjQxQUI5OTcxRUY0NjkyQzAwODNGQTA4IC8qIGJhY2tncm91
bmQtaW1hZ2UtbGluay1hbmQtaW5wdXQuaHRtbCAqLzsgfTsKIAkJRjQxQUI5QTExRUY0Njk2QjAw
ODNGQTA4IC8qIGNvbnRlbnRlZGl0YWJsZS1hbmQtdGV4dGFyZWEuaHRtbCBpbiBDb3B5IFJlc291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDFBQjk5QzFFRjQ2OTJD
MDA4M0ZBMDggLyogY29udGVudGVkaXRhYmxlLWFuZC10ZXh0YXJlYS5odG1sICovOyB9OwpAQCAt
ODI1LDYgKzgyNiw3IEBACiAJCQkJNTcxNEVDQkIxQ0E4QkZFNDAwMDUxQUM4IC8qIERvd25sb2Fk
UmVxdWVzdE9yaWdpbmFsVVJMRnJhbWUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQlG
NEEzMkVDNDFGMDVGMzg1MDA0N0M1NDQgLyogZHJhZ3N0YXJ0LWNoYW5nZS1zZWxlY3Rpb24tb2Zm
c2NyZWVuLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJRjRENUU0RTgxRjBDNUQzODAw
OEMxQTQ5IC8qIGRyYWdzdGFydC1jbGVhci1zZWxlY3Rpb24uaHRtbCBpbiBDb3B5IFJlc291cmNl
cyAqLywKKwkJCQlGNDE5NEFEMTFGNUEzMjAxMDBBREQ4M0YgLyogZHJvcC10YXJnZXRzLmh0bWwg
aW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJQTE1NTAyMkMxRTA1MEQwMzAwQTI0QzU3IC8qIGR1
cGxpY2F0ZS1jb21wbGV0aW9uLWhhbmRsZXItY2FsbHMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAq
LywKIAkJCQk5OTg0RkFDRTFDRkZCMDkwMDA4RDE5OEMgLyogZWRpdGFibGUtYm9keS5odG1sIGlu
IENvcHkgUmVzb3VyY2VzICovLAogCQkJCUY0NEQwNjQ1MUYzOTVDMjYwMDFBMEUyOSAvKiBlZGl0
b3Itc3RhdGUtdGVzdC1oYXJuZXNzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCkBAIC0xNjgz
LDYgKzE2ODUsNyBAQAogCQlGM0ZDM0VFMjEzNjc4QjczMDAxMjZBNjUgLyogbGliZ3Rlc3QuYSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGFyY2hpdmUu
YXI7IHBhdGggPSBsaWJndGVzdC5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OwogCQlGNDA3RkUzODFGMUQwREU2MDAxN0NGMjUgLyogZW5vcm1vdXMuc3ZnICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IGVub3Jt
b3VzLnN2Zzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQxNTA4NkMxREEwNDBDMTAw
NDRCRTlCIC8qIHBsYXktYXVkaW8tb24tY2xpY2suaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsg
cGF0aCA9ICJwbGF5LWF1ZGlvLW9uLWNsaWNrLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGNDE5NEFEMDFGNUEyRUE1MDBBREQ4M0YgLyogZHJvcC10YXJnZXRzLmh0bWwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAiZHJvcC10YXJnZXRzLmh0bWwiOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGNDFBQjk5MzFFRjQ2OTJDMDA4M0ZBMDggLyogaW1hZ2UtYW5k
LXRleHRhcmVhLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAiaW1hZ2UtYW5kLXRleHRhcmVhLmh0bWwiOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDFBQjk5NDFFRjQ2OTJDMDA4M0ZBMDggLyogcHJl
dmVudC1vcGVyYXRpb24uaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJwcmV2ZW50LW9wZXJhdGlvbi5odG1sIjsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQxQUI5OTUxRUY0NjkyQzAwODNGQTA4IC8q
IHRleHRhcmVhLXRvLWlucHV0Lmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAidGV4dGFyZWEtdG8taW5wdXQuaHRt
bCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTU0LDYgKzIxNTcsNyBAQAogCQkJ
CTU3MTRFQ0JBMUNBOEJGRDEwMDA1MUFDOCAvKiBEb3dubG9hZFJlcXVlc3RPcmlnaW5hbFVSTEZy
YW1lLmh0bWwgKi8sCiAJCQkJRjRBMzJFQzMxRjA1RjM3ODAwNDdDNTQ0IC8qIGRyYWdzdGFydC1j
aGFuZ2Utc2VsZWN0aW9uLW9mZnNjcmVlbi5odG1sICovLAogCQkJCUY0RDVFNEU3MUYwQzVEMjcw
MDhDMUE0OSAvKiBkcmFnc3RhcnQtY2xlYXItc2VsZWN0aW9uLmh0bWwgKi8sCisJCQkJRjQxOTRB
RDAxRjVBMkVBNTAwQUREODNGIC8qIGRyb3AtdGFyZ2V0cy5odG1sICovLAogCQkJCUExNTUwMjJC
MUUwNTBCQzUwMEEyNEM1NyAvKiBkdXBsaWNhdGUtY29tcGxldGlvbi1oYW5kbGVyLWNhbGxzLmh0
bWwgKi8sCiAJCQkJOTk4NEZBQ0QxQ0ZGQjAzODAwOEQxOThDIC8qIGVkaXRhYmxlLWJvZHkuaHRt
bCAqLywKIAkJCQlGNDREMDY0NDFGMzk1QzBEMDAxQTBFMjkgLyogZWRpdG9yLXN0YXRlLXRlc3Qt
aGFybmVzcy5odG1sICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9kcm9wLXRhcmdldHMuaHRtbCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvZHJvcC10YXJnZXRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTgyYjI5NGY3OTdhZDdi
MTRiMmZhNGMzMDg5MDUyYThlMGJmNWM3MgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvZHJvcC10YXJnZXRzLmh0bWwKQEAgLTAsMCArMSwx
MTEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29u
dGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoIj4KKzxoZWFkPgorPHN0eWxlPgorICAgIGJvZHkgewor
ICAgICAgICB3aWR0aDogMTAwJTsKKyAgICAgICAgaGVpZ2h0OiAxMDAlOworICAgICAgICBtYXJn
aW46IDA7CisgICAgfQorCisgICAgaW1nIHsKKyAgICAgICAgd2lkdGg6IDEwMHB4OworICAgICAg
ICBoZWlnaHQ6IDEwMHB4OworICAgIH0KKworICAgICN0YXJnZXQxIHsKKyAgICAgICAgbGVmdDog
MDsKKyAgICAgICAgdG9wOiAyMDBweDsKKyAgICB9CisKKyAgICAjdGFyZ2V0MiB7CisgICAgICAg
IGxlZnQ6IDIwMHB4OworICAgICAgICB0b3A6IDA7CisgICAgfQorCisgICAgI3RhcmdldDMgewor
ICAgICAgICBsZWZ0OiAyMDBweDsKKyAgICAgICAgdG9wOiAyMDBweDsKKyAgICB9CisKKyAgICAu
dGFyZ2V0IHsKKyAgICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgICAgICBiYWNrZ3JvdW5k
LWNvbG9yOiByZWQ7CisgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKKyAgICAgICAgd2lkdGg6
IDEwMHB4OworICAgICAgICBoZWlnaHQ6IDEwMHB4OworICAgICAgICBjb2xvcjogd2hpdGU7Cisg
ICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICAgICAgbGluZS1oZWlnaHQ6IDkwcHg7Cisg
ICAgfQorCisgICAgI2Rlc2NyaXB0aW9uIHsKKyAgICAgICAgcGFkZGluZy10b3A6IDI1MHB4Owor
ICAgICAgICBkaXNwbGF5OiBibG9jazsKKyAgICB9CisKKyAgICAjY29udGFpbmVyIHsKKyAgICAg
ICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5
PgorICAgIDxkaXYgaWQ9ImNvbnRhaW5lciI+CisgICAgPGltZyBzcmM9ImFwcGxlLmdpZiI+PC9p
bWc+CisgICAgPGRpdiBpZD0idGFyZ2V0MSIgY2xhc3M9InRhcmdldCI+PC9kaXY+CisgICAgPGRp
diBpZD0idGFyZ2V0MiIgY2xhc3M9InRhcmdldCI+PC9kaXY+CisgICAgPGRpdiBpZD0idGFyZ2V0
MyIgY2xhc3M9InRhcmdldCI+PC9kaXY+CisgICAgPGNvZGUgaWQ9ImRlc2NyaXB0aW9uIj4KKyAg
ICAgICAgPGRpdj5UbyB0ZXN0IHRoaXMgbWFudWFsbHksIGRyYWcgdGhlIGltYWdlIG9udG8gZWFj
aCBvZiB0aGUgdGhyZWUgcmVkIGNpcmNsZXMuPC9kaXY+CisgICAgICAgIDxkaXY+RWFjaCByZWQg
Y2lyY2xlIHNob3VsZCB0dXJuIGdyZWVuIHVwb24gZHJhZ2dpbmcgb3ZlciBpdC48L2Rpdj4KKyAg
ICAgICAgPGRpdj5VcG9uIGRyb3AsIHRoZSB0ZXh0ICJQQVNTIiBzaG91bGQgYXBwZWFyIGluIGVh
Y2ggdGFyZ2V0LjwvZGl2PgorICAgIDwvY29kZT4KKyAgICA8L2Rpdj4KKzwvYm9keT4KKworPHNj
cmlwdD4KKyAgICBmdW5jdGlvbiBlbGVtZW50QXRNb3VzZUV2ZW50KGUpIHsKKyAgICAgICAgaWYg
KHdpbmRvdy51c2VQYWdlQ29vcmRpbmF0ZXMpCisgICAgICAgICAgICByZXR1cm4gZG9jdW1lbnQu
ZWxlbWVudEZyb21Qb2ludChlLnBhZ2VYIC0gcGFnZVhPZmZzZXQsIGUucGFnZVkgLSBwYWdlWU9m
ZnNldCk7CisgICAgICAgIHJldHVybiBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGUuY2xpZW50
WCwgZS5jbGllbnRZKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0YXJnZXRBdEV2ZW50KGUpIHsK
KyAgICAgICAgbGV0IHRhcmdldCA9IGVsZW1lbnRBdE1vdXNlRXZlbnQoZSk7CisgICAgICAgIHJl
dHVybiB0YXJnZXQgJiYgdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygidGFyZ2V0IikgPyB0YXJn
ZXQgOiBudWxsOworICAgIH0KKworICAgIGZ1bmN0aW9uIHJlc2V0VGVzdFN0YXRlKCkgeworICAg
ICAgICB0YXJnZXQxLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICIiOworICAgICAgICB0YXJnZXQy
LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICIiOworICAgICAgICB0YXJnZXQzLnN0eWxlLmJhY2tn
cm91bmRDb2xvciA9ICIiOworICAgICAgICB0YXJnZXQxLmlubmVySFRNTCA9ICIiOworICAgICAg
ICB0YXJnZXQyLmlubmVySFRNTCA9ICIiOworICAgICAgICB0YXJnZXQzLmlubmVySFRNTCA9ICIi
OworICAgIH0KKworICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0
IiwgcmVzZXRUZXN0U3RhdGUpOworICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigi
ZHJhZ2VudGVyIiwgZXZlbnQgPT4geworICAgICAgICBsZXQgdGFyZ2V0ID0gdGFyZ2V0QXRFdmVu
dChldmVudCk7CisgICAgICAgIGlmICh0YXJnZXQpCisgICAgICAgICAgICB0YXJnZXQuc3R5bGUu
YmFja2dyb3VuZENvbG9yID0gImdyZWVuIjsKKyAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQo
KTsKKyAgICB9KTsKKworICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292
ZXIiLCBldmVudCA9PiB7CisgICAgICAgIGxldCB0YXJnZXQgPSB0YXJnZXRBdEV2ZW50KGV2ZW50
KTsKKyAgICAgICAgaWYgKHRhcmdldCkKKyAgICAgICAgICAgIHRhcmdldC5zdHlsZS5iYWNrZ3Jv
dW5kQ29sb3IgPSAiZ3JlZW4iOworICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAg
IH0pOworCisgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJkcm9wIiwgZXZlbnQg
PT4geworICAgICAgICBsZXQgdGFyZ2V0ID0gdGFyZ2V0QXRFdmVudChldmVudCk7CisgICAgICAg
IGlmICh0YXJnZXQpCisgICAgICAgICAgICB0YXJnZXQuaW5uZXJIVE1MID0gYDxjb2RlPlBBU1M8
L2NvZGU+YDsKKyAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICB9KTsKKzwvc2Ny
aXB0PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3Mv
RGF0YUludGVyYWN0aW9uVGVzdHMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9E
YXRhSW50ZXJhY3Rpb25UZXN0cy5tbQppbmRleCA5YWIyYTYwYjQwOWQ4Y2Y2YTc4NDJkZWZjOGYw
ZjhhM2FhZWUwMTAzLi4zZjczYmYwNjY0Nzg4Y2FkNzA0M2ExNmZjNTc3ZTMwMzEyOTk4MWE0IDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9EYXRhSW50ZXJhY3Rpb25U
ZXN0cy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9EYXRhSW50ZXJhY3Rp
b25UZXN0cy5tbQpAQCAtMTA3Niw2ICsxMDc2LDYyIEBAIFRFU1QoRGF0YUludGVyYWN0aW9uVGVz
dHMsIENhbmNlbGxlZExpZnREb2VzTm90Q2F1c2VTdWJzZXF1ZW50RHJhZ3NUb0ZhaWwpCiAgICAg
Y2hlY2tTdHJpbmdBcnJheXNBcmVFcXVhbChAW0AiZHJhZ3N0YXJ0IiwgQCJkcmFnZW5kIl0sIFtv
dXRwdXRUZXh0IGNvbXBvbmVudHNTZXBhcmF0ZWRCeVN0cmluZzpAIiAiXSk7CiB9CiAKK3N0YXRp
YyB2b2lkIHRlc3REcmFnQW5kRHJvcE9udG9UYXJnZXRFbGVtZW50cyhUZXN0V0tXZWJWaWV3ICp3
ZWJWaWV3KQoreworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlv
blNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXddKTsKKyAgICBbc2ltdWxh
dG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoNTAsIDUwKSB0bzpDR1BvaW50TWFrZSg1MCwgMjUwKV07
CisgICAgRVhQRUNUX1dLX1NUUkVRKCJyZ2IoMCwgMTI4LCAwKSIsIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRDb21wdXRlZFN0eWxlKHRhcmdldDEpLmJhY2tncm91
bmRDb2xvciJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIlBBU1MiLCBbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidGFyZ2V0MS50ZXh0Q29udGVudCJdKTsKKworICAgIFtz
aW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSg1MCwgNTApIHRvOkNHUG9pbnRNYWtlKDI1MCwg
NTApXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoInJnYigwLCAxMjgsIDApIiwgW3dlYlZpZXcgc3Ry
aW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldENvbXB1dGVkU3R5bGUodGFyZ2V0MikuYmFj
a2dyb3VuZENvbG9yIl0pOworICAgIEVYUEVDVF9XS19TVFJFUSgiUEFTUyIsIFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0YXJnZXQyLnRleHRDb250ZW50Il0pOworCisg
ICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDUwLCA1MCkgdG86Q0dQb2ludE1ha2Uo
MjUwLCAyNTApXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoInJnYigwLCAxMjgsIDApIiwgW3dlYlZp
ZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldENvbXB1dGVkU3R5bGUodGFyZ2V0
MykuYmFja2dyb3VuZENvbG9yIl0pOworICAgIEVYUEVDVF9XS19TVFJFUSgiUEFTUyIsIFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0YXJnZXQzLnRleHRDb250ZW50Il0p
OworfQorCitURVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBEcmFnRXZlbnRDbGllbnRDb29yZGlu
YXRlc0Jhc2ljKQoreworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAg
W3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZHJvcC10YXJnZXRzIl07
CisKKyAgICB0ZXN0RHJhZ0FuZERyb3BPbnRvVGFyZ2V0RWxlbWVudHMod2ViVmlldy5nZXQoKSk7
Cit9CisKK1RFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIERyYWdFdmVudENsaWVudENvb3JkaW5h
dGVzV2l0aFNjcm9sbE9mZnNldCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVz
dFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAw
KV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImRyb3At
dGFyZ2V0cyJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJk
b2N1bWVudC5ib2R5LnN0eWxlLm1hcmdpbiA9ICcxMDAwcHggMCciXTsKKyAgICBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5z
Y3JvbGxUb3AgPSAxMDAwIl07CisgICAgW3dlYlZpZXcgd2FpdEZvck5leHRQcmVzZW50YXRpb25V
cGRhdGVdOworCisgICAgdGVzdERyYWdBbmREcm9wT250b1RhcmdldEVsZW1lbnRzKHdlYlZpZXcu
Z2V0KCkpOworfQorCitURVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBEcmFnRXZlbnRQYWdlQ29v
cmRpbmF0ZXNCYXNpYykKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwor
ICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImRyb3AtdGFyZ2V0
cyJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ3aW5kb3cu
dXNlUGFnZUNvb3JkaW5hdGVzID0gdHJ1ZSJdOworCisgICAgdGVzdERyYWdBbmREcm9wT250b1Rh
cmdldEVsZW1lbnRzKHdlYlZpZXcuZ2V0KCkpOworfQorCitURVNUKERhdGFJbnRlcmFjdGlvblRl
c3RzLCBEcmFnRXZlbnRQYWdlQ29vcmRpbmF0ZXNXaXRoU2Nyb2xsT2Zmc2V0KQoreworICAgIGF1
dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
OkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNs
eUxvYWRUZXN0UGFnZU5hbWVkOkAiZHJvcC10YXJnZXRzIl07CisgICAgW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luID0gJzEw
MDBweCAwJyJdOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJk
b2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IDEwMDAiXTsKKyAgICBbd2ViVmll
dyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAid2luZG93LnVzZVBhZ2VDb29yZGluYXRl
cyA9IHRydWUiXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTmV4dFByZXNlbnRhdGlvblVwZGF0ZV07
CisKKyAgICB0ZXN0RHJhZ0FuZERyb3BPbnRvVGFyZ2V0RWxlbWVudHMod2ViVmlldy5nZXQoKSk7
Cit9CisKIFRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIERvTm90Q3Jhc2hXaGVuU2VsZWN0aW9u
SXNDbGVhcmVkSW5EcmFnU3RhcnQpCiB7CiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rl
c3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUw
MCldKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFdLV2ViVmll
dy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFdLV2ViVmlldy5tbQppbmRleCBi
NzU2Y2ExODU3OTNmN2QzZmMyNTEzMzljYmEyZDVjNzc0ZWNlZmQ1Li4zMzlkYzNiNjMzMzU1MmI2
YTI1YjNjYTRiMDExMTJjZGNiMDEyZTY2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L2NvY29hL1Rlc3RXS1dlYlZpZXcubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9U
ZXN0V0tXZWJWaWV3Lm1tCkBAIC0yNDYsNiArMjQ2LDggQEAgLSAoTlNTdHJpbmcgKilzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OihOU1N0cmluZyAqKXNjcmlwdAogICAgICAgICBldmFsUmVz
dWx0ID0gW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhGb3JtYXQ6QCIlQCIsIHJlc3VsdF07CiAg
ICAgICAgIGlzV2FpdGluZ0ZvckphdmFTY3JpcHQgPSB0cnVlOwogICAgICAgICBFWFBFQ1RfVFJV
RSghZXJyb3IpOworICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICBOU0xvZyhAIkVuY291
bnRlcmVkIGVycm9yOiAlQCB3aGlsZSBldmFsdWF0aW5nIHNjcmlwdDogJUAiLCBlcnJvciwgc2Ny
aXB0KTsKICAgICB9XTsKIAogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmaXNXYWl0aW5n
Rm9ySmF2YVNjcmlwdCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>