<?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>225480</bug_id>
          
          <creation_ts>2021-05-06 13:41:33 -0700</creation_ts>
          <short_desc>Sampled Page Top Color: move logic out of `Document`</short_desc>
          <delta_ts>2021-05-14 17:29:30 -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>New Bugs</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="Devin Rousso">hi</reporter>
          <assigned_to name="Devin Rousso">hi</assigned_to>
          <cc>annulen</cc>
    
    <cc>bdakin</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>kangil.han</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1757614</commentid>
    <comment_count>0</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-05-06 13:41:33 -0700</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757615</commentid>
    <comment_count>1</comment_count>
      <attachid>427931</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-05-06 13:42:46 -0700</bug_when>
    <thetext>Created attachment 427931
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757672</commentid>
    <comment_count>2</comment_count>
      <attachid>427944</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-05-06 15:33:14 -0700</bug_when>
    <thetext>Created attachment 427944
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757889</commentid>
    <comment_count>3</comment_count>
      <attachid>427944</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-07 09:17:37 -0700</bug_when>
    <thetext>Comment on attachment 427944
Patch

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

&gt; Source/WebCore/ChangeLog:4
&gt; +        Sampled Page Top Color: move logic out of `Document`
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=225480

If you are moving it out of Document, might I suggest moving it to its own struct/class? It seems like an object Page could own.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758292</commentid>
    <comment_count>4</comment_count>
      <attachid>427944</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-08 22:01:54 -0700</bug_when>
    <thetext>Comment on attachment 427944
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:4
&gt;&gt; +        https://bugs.webkit.org/show_bug.cgi?id=225480
&gt; 
&gt; If you are moving it out of Document, might I suggest moving it to its own struct/class? It seems like an object Page could own.

I agree that this is a good suggestion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759817</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-13 13:42:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/77984539&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759951</commentid>
    <comment_count>6</comment_count>
      <attachid>428591</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-05-13 18:25:02 -0700</bug_when>
    <thetext>Created attachment 428591
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760257</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-14 15:30:55 -0700</bug_when>
    <thetext>Tools/Scripts/svn-apply failed to apply attachment 428591 to trunk.
Please resolve the conflicts and upload a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760294</commentid>
    <comment_count>8</comment_count>
      <attachid>428683</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-05-14 16:40:48 -0700</bug_when>
    <thetext>Created attachment 428683
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760310</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-14 17:29:27 -0700</bug_when>
    <thetext>Committed r277523 (237751@main): &lt;https://commits.webkit.org/237751@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 428683.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427931</attachid>
            <date>2021-05-06 13:42:46 -0700</date>
            <delta_ts>2021-05-06 15:33:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225480-20210506144245.patch</filename>
            <type>text/plain</type>
            <size>26341</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxOTYxNGE3NjQ0ZTcwMDQwZjU5OWE4Zjg5OTkxODFkMjEyOGU3YzdlLi5l
MGQ3ZjIxMWFlODYzM2E1MzY2NTRhMTcxNDU3ZDBiZTYyOGMxMDE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDQgQEAKKzIwMjEtMDUtMDYgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29t
PgorCisgICAgICAgIFNhbXBsZWQgUGFnZSBUb3AgQ29sb3I6IG1vdmUgbG9naWMgb3V0IG9mIGBE
b2N1bWVudGAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyNTQ4MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEhhdmluZyBgZGV0ZXJtaW5lU2FtcGxlZFBhZ2VUb3BDb2xvcmAgYmUgY2FsbGVkIGluIGBlbnF1
ZXVlUGFpbnRUaW1pbmdFbnRyeUlmTmVlZGVkYCBhcyB3aGF0CisgICAgICAgIGlzIGJhc2ljYWxs
eSBhIHNpZGUgZWZmZWN0IGlzIG5vdCBncmVhdC4gVGhlIG9ubHkgcmVhc29uIGl0IHdhcyB0aGVy
ZSBpbiB0aGUgZmlyc3QgcGxhY2Ugd2FzCisgICAgICAgIHRvIHRha2UgYWR2YW50YWdlIG9mIHRo
ZSBsb2dpYyB0aGF0IGRlY2lkZWQgImlzIHRoaXMgdGhlIGZpcnN0IGNvbnRlbnRmdWwgcGFpbnQi
LCBidXQgdGhhdAorICAgICAgICBsb2dpYyBjYW4gYmUgcmVwbGljYXRlZCBlbHNld2hlcmUuIFNp
bmNlIHRoZSBzYW1wbGVkIHBhZ2UgdG9wIGNvbG9yIGRlYWxzIG1vcmUgd2l0aCB0aGUgcGFnZQor
ICAgICAgICBhcyBhIHdob2xlIGluc3RlYWQgb2YgYW4gaW5kaXZpZHVhbCBgRG9jdW1lbnRgICh3
aGljaCBpbmNsdWRlcyBzdWJmcmFtZXMpLCBpdCBtYWtlcyBtb3JlCisgICAgICAgIHNlbnNlIHRv
IGhhdmUgdGhpcyBsb2dpYyBiZSBvbiBgUGFnZWAgaW5zdGVhZC4KKworICAgICAgICAqIGRvbS9E
b2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNhbXBsZWRQYWdlVG9wQ29s
b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6ZW5xdWV1ZVBhaW50VGltaW5nRW50cnlJZk5lZWRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjppc1ZhbGlkUGFnZVNhbXBsZUxvY2F0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OnNhbXBsZVBhZ2VDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpjb2xvckRpZmZlcmVuY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXZlcmFn
ZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkZXRlcm1pbmVT
YW1wbGVkUGFnZVRvcENvbG9yKTogRGVsZXRlZC4KKworICAgICAgICAqIHBhZ2UvUGFnZS5oOgor
ICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpkb0FmdGVy
VXBkYXRlUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNhbXBsZWRQYWdlVG9w
Q29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6aXNWYWxpZFBhZ2VTYW1wbGVMb2NhdGlv
bik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6c2FtcGxlUGFnZUNvbG9yKTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpjb2xvckRpZmZlcmVuY2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmF2ZXJhZ2VDb2xvcik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6ZGV0ZXJt
aW5lU2FtcGxlZFBhZ2VUb3BDb2xvcklmTmVlZGVkKTogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpQYWdlOjpkaWRDaGFuZ2VNYWluRG9jdW1lbnQpOgorCisgICAgICAgICogcGFnZS9GcmFtZVZp
ZXcuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVZpZXc6Omhhc0NvbnRlbnRmdWxEZXNjZW5kYW50cyBjb25zdCk6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpoYXNDb250ZW5mdWxEZXNjZW5kYW50cyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIERyaXZlLWJ5OiBGaXggaW5jb3JyZWN0IHNwZWxsaW5nLgorCiAyMDIx
LTA1LTA1ICBDYW1lcm9uIE1jQ29ybWFjayAgPGhleWNhbUBhcHBsZS5jb20+CiAKICAgICAgICAg
UmVtb3ZlIHVudXNlZCBEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6d2FzVXNl
ZEZvckRyYXdpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDQxOWVhZDY3NTJmMzUxNTJj
MmMxZmE4Y2NmNjkyYTc5NWQ1ZThjMWEuLmZlMDg1NzFkYjcwYTUxMmUwMDcxZmU3Yzk2NmNmZmFj
N2M1NjdjY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtODIsNyArODIsNiBAQAogI2lu
Y2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFt
ZUxvYWRlckNsaWVudC5oIgotI2luY2x1ZGUgIkZyYW1lU25hcHNob3R0aW5nLmgiCiAjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiRnVsbHNjcmVlbk1hbmFnZXIuaCIKICNpbmNsdWRl
ICJHQ1JlYWNoYWJsZVJlZi5oIgpAQCAtMTI0LDcgKzEyMyw2IEBACiAjaW5jbHVkZSAiSURCT3Bl
bkRCUmVxdWVzdC5oIgogI2luY2x1ZGUgIklkbGVDYWxsYmFja0NvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZl
ci5oIgogI2luY2x1ZGUgIkltYWdlTG9hZGVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VPdmVybGF5Q29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgpAQCAtMTc3
LDExICsxNzUsOSBAQAogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlci5oIgogI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKLSNpbmNs
dWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUg
IlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgot
I2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCkBAIC0z
MjU4LDcgKzMyNTQsNyBAQCB2b2lkIERvY3VtZW50OjplbnF1ZXVlUGFpbnRUaW1pbmdFbnRyeUlm
TmVlZGVkKCkKICAgICBpZiAoIXZpZXcoKS0+aXNWaXN1YWxseU5vbkVtcHR5KCkgfHwgdmlldygp
LT5uZWVkc0xheW91dCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIXZpZXcoKS0+aGFz
Q29udGVuZnVsRGVzY2VuZGFudHMoKSkKKyAgICBpZiAoIXZpZXcoKS0+aGFzQ29udGVudGZ1bERl
c2NlbmRhbnRzKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghQ29udGVudGZ1bFBhaW50
Q2hlY2tlcjo6cXVhbGlmaWVzRm9yQ29udGVudGZ1bFBhaW50KCp2aWV3KCkpKQpAQCAtMzI2Niw4
ICszMjYyLDYgQEAgdm9pZCBEb2N1bWVudDo6ZW5xdWV1ZVBhaW50VGltaW5nRW50cnlJZk5lZWRl
ZCgpCiAKICAgICBkb21XaW5kb3coKS0+cGVyZm9ybWFuY2UoKS5yZXBvcnRGaXJzdENvbnRlbnRm
dWxQYWludCgpOwogICAgIG1fZGlkRW5xdWV1ZUZpcnN0Q29udGVudGZ1bFBhaW50ID0gdHJ1ZTsK
LQotICAgIGRldGVybWluZVNhbXBsZWRQYWdlVG9wQ29sb3IoKTsKIH0KIAogRXhjZXB0aW9uT3I8
dm9pZD4gRG9jdW1lbnQ6OndyaXRlKERvY3VtZW50KiByZXNwb25zaWJsZURvY3VtZW50LCBTZWdt
ZW50ZWRTdHJpbmcmJiB0ZXh0KQpAQCAtMzg3MSwxOTIgKzM4NjUsNiBAQCB2b2lkIERvY3VtZW50
Ojp0aGVtZUNvbG9yQ2hhbmdlZCgpCiAjZW5kaWYgLy8gRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQog
fQogCi1zdGF0aWMgYm9vbCBpc1ZhbGlkUGFnZVNhbXBsZUxvY2F0aW9uKERvY3VtZW50JiBkb2N1
bWVudCwgY29uc3QgSW50UG9pbnQmIGxvY2F0aW9uKQotewotICAgIC8vIEZJWE1FOiA8aHR0cHM6
Ly93ZWJraXQub3JnL2IvMjI1MTY3PiAoU2FtcGxlZCBQYWdlIFRvcCBDb2xvcjogaG9vayBpbnRv
IHBhaW50aW5nIGxvZ2ljIGluc3RlYWQgb2YgdGFraW5nIHNuYXBzaG90cykKLQotICAgIGNvbnN0
ZXhwciBPcHRpb25TZXQ8SGl0VGVzdFJlcXVlc3Q6OlJlcXVlc3RUeXBlPiBoaXRUZXN0UmVxdWVz
dFR5cGVzIHsgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5LCBIaXRUZXN0UmVxdWVzdDo6RGlzYWxs
b3dVc2VyQWdlbnRTaGFkb3dDb250ZW50LCBIaXRUZXN0UmVxdWVzdDo6Q29sbGVjdE11bHRpcGxl
RWxlbWVudHMsIEhpdFRlc3RSZXF1ZXN0OjpJbmNsdWRlQWxsRWxlbWVudHNVbmRlclBvaW50IH07
Ci0gICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0KGxvY2F0aW9uKTsKLSAgICBkb2N1bWVu
dC5oaXRUZXN0KGhpdFRlc3RSZXF1ZXN0VHlwZXMsIGhpdFRlc3RSZXN1bHQpOwotCi0gICAgZm9y
IChhdXRvJiBoaXRUZXN0Tm9kZSA6IGhpdFRlc3RSZXN1bHQubGlzdEJhc2VkVGVzdFJlc3VsdCgp
KSB7Ci0gICAgICAgIGF1dG8mIG5vZGUgPSBoaXRUZXN0Tm9kZS5nZXQoKTsKLQotICAgICAgICBh
dXRvKiByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKCFyZW5kZXJlcikK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAvLyBTa2lwIGltYWdlcyAoYm90
aCBgPGltZz5gIGFuZCBDU1MgYGJhY2tncm91bmQtaW1hZ2VgKSBhcyB0aGV5J3JlIGxpa2VseSBu
b3QgYSBzb2xpZCBjb2xvci4KLSAgICAgICAgaWYgKGlzPFJlbmRlckltYWdlPihyZW5kZXJlcikg
fHwgcmVuZGVyZXItPnN0eWxlKCkuaGFzQmFja2dyb3VuZEltYWdlKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gU2tpcCBub2RlcyB3aXRoIGFuaW1hdGlvbnMgYXMg
dGhlIHNhbXBsZSBtYXkgZ2V0IGFuIG9kZCBjb2xvciBpZiB0aGUgYW5pbWF0aW9uIGlzIGluLXBy
b2dyZXNzLgotICAgICAgICBpZiAocmVuZGVyZXItPnN0eWxlKCkuaGFzVHJhbnNpdGlvbnMoKSB8
fCByZW5kZXJlci0+c3R5bGUoKS5oYXNBbmltYXRpb25zKCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgLy8gU2tpcCAzcmQtcGFydHkgYDxpZnJhbWU+YCBhcyB0aGUgY29u
dGVudCBsaWtlbHkgd29uJ3QgbWF0Y2ggdGhlIHJlc3Qgb2YgdGhlIHBhZ2UuCi0gICAgICAgIGlm
IChpczxIVE1MSUZyYW1lRWxlbWVudD4obm9kZSkgJiYgIWFyZVJlZ2lzdHJhYmxlRG9tYWluc0Vx
dWFsKGRvd25jYXN0PEhUTUxJRnJhbWVFbGVtZW50Pihub2RlKS5sb2NhdGlvbigpLCBkb2N1bWVu
dC51cmwoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXN0YXRpYyBPcHRpb25hbDxMYWI8ZmxvYXQ+PiBzYW1wbGVQYWdlQ29sb3Io
RG9jdW1lbnQmIGRvY3VtZW50LCBJbnRQb2ludCYmIGxvY2F0aW9uKQotewotICAgIC8vIEZJWE1F
OiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjI1MTY3PiAoU2FtcGxlZCBQYWdlIFRvcCBDb2xvcjog
aG9vayBpbnRvIHBhaW50aW5nIGxvZ2ljIGluc3RlYWQgb2YgdGFraW5nIHNuYXBzaG90cykKLQot
ICAgIGlmICghaXNWYWxpZFBhZ2VTYW1wbGVMb2NhdGlvbihkb2N1bWVudCwgbG9jYXRpb24pKQot
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgQVNTRVJUKGRvY3VtZW50LnZpZXco
KSk7Ci0gICAgYXV0byBzbmFwc2hvdCA9IHNuYXBzaG90RnJhbWVSZWN0KGRvY3VtZW50LnZpZXco
KS0+ZnJhbWUoKSwgSW50UmVjdChsb2NhdGlvbiwgSW50U2l6ZSgxLCAxKSksIFNuYXBzaG90T3B0
aW9uc0V4Y2x1ZGVTZWxlY3Rpb25IaWdobGlnaHRpbmcgfCBTbmFwc2hvdE9wdGlvbnNQYWludEV2
ZXJ5dGhpbmdFeGNsdWRpbmdTZWxlY3Rpb24pOwotICAgIGlmICghc25hcHNob3QpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBhdXRvIHNuYXBzaG90RGF0YSA9IHNuYXBzaG90
LT50b0JHUkFEYXRhKCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxMYWI8ZmxvYXQ+PihTUkdC
QTx1aW50OF90PiB7IHNuYXBzaG90RGF0YVsyXSwgc25hcHNob3REYXRhWzFdLCBzbmFwc2hvdERh
dGFbMF0sIHNuYXBzaG90RGF0YVszXSB9KTsKLX0KLQotc3RhdGljIGRvdWJsZSBjb2xvckRpZmZl
cmVuY2UoTGFiPGZsb2F0PiYgbGhzLCBMYWI8ZmxvYXQ+JiByaHMpCi17Ci0gICAgcmV0dXJuIHNx
cnQocG93KHJocy5saWdodG5lc3MgLSBsaHMubGlnaHRuZXNzLCAyKSArIHBvdyhyaHMuYSAtIGxo
cy5hLCAyKSArIHBvdyhyaHMuYiAtIGxocy5iLCAyKSk7Ci19Ci0KLXN0YXRpYyBMYWI8ZmxvYXQ+
IGF2ZXJhZ2VDb2xvcihMYWI8ZmxvYXQ+IGNvbG9yc1tdLCBzaXplX3QgY291bnQpCi17Ci0gICAg
ZmxvYXQgdG90YWxMaWdodG5lc3MgPSAwOwotICAgIGZsb2F0IHRvdGFsQSA9IDA7Ci0gICAgZmxv
YXQgdG90YWxCID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsK
LSAgICAgICAgdG90YWxMaWdodG5lc3MgKz0gY29sb3JzW2ldLmxpZ2h0bmVzczsKLSAgICAgICAg
dG90YWxBICs9IGNvbG9yc1tpXS5hOwotICAgICAgICB0b3RhbEIgKz0gY29sb3JzW2ldLmI7Ci0g
ICAgfQotICAgIHJldHVybiB7Ci0gICAgICAgIHRvdGFsTGlnaHRuZXNzIC8gY291bnQsCi0gICAg
ICAgIHRvdGFsQSAvIGNvdW50LAotICAgICAgICB0b3RhbEIgLyBjb3VudCwKLSAgICAgICAgMSwK
LSAgICB9OwotfQotCi12b2lkIERvY3VtZW50OjpkZXRlcm1pbmVTYW1wbGVkUGFnZVRvcENvbG9y
KCkKLXsKLSAgICBpZiAobV9zYW1wbGVkUGFnZVRvcENvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgYXV0byBtYXhEaWZmZXJlbmNlID0gc2V0dGluZ3MoKS5zYW1wbGVkUGFn
ZVRvcENvbG9yTWF4RGlmZmVyZW5jZSgpOwotICAgIGlmIChtYXhEaWZmZXJlbmNlIDw9IDApCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmICghaXNUb3BEb2N1bWVudCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBhdXRvKiBmcmFtZVZpZXcgPSB2aWV3KCk7Ci0gICAgaWYgKCFmcmFtZVZpZXcp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gbm90aWZ5RGlkU2FtcGxlUGFnZVRvcENvbG9y
T25TY29wZUV4aXQgPSBtYWtlU2NvcGVFeGl0KFsmXSB7Ci0gICAgICAgIGlmIChhdXRvKiBwYWdl
ID0gdGhpcy0+cGFnZSgpKQotICAgICAgICAgICAgcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuc2Ft
cGxlZFBhZ2VUb3BDb2xvckNoYW5nZWQoKTsKLSAgICB9KTsKLQotICAgIC8vIERlY3JlYXNlIHRo
ZSB3aWR0aCBieSBvbmUgcGl4ZWwgc28gdGhhdCB0aGUgbGFzdCBzbmFwc2hvdCBpcyB3aXRoaW4g
Ym91bmRzIGFuZCBub3Qgb2ZmLWJ5LW9uZS4KLSAgICBhdXRvIGZyYW1lV2lkdGggPSBmcmFtZVZp
ZXctPmNvbnRlbnRzV2lkdGgoKSAtIDE7Ci0KLSAgICBjb25zdGV4cHIgYXV0byBudW1TbmFwc2hv
dHMgPSA1OwotICAgIHNpemVfdCBub25NYXRjaGluZ0NvbG9ySW5kZXggPSBudW1TbmFwc2hvdHM7
Ci0KLSAgICBMYWI8ZmxvYXQ+IHNuYXBzaG90c1tudW1TbmFwc2hvdHNdOwotICAgIGRvdWJsZSBk
aWZmZXJlbmNlc1tudW1TbmFwc2hvdHMgLSAxXTsKLQotICAgIGF1dG8gc2hvdWxkU3RvcEFmdGVy
RmluZGluZ05vbk1hdGNoaW5nQ29sb3IgPSBbJl0gKHNpemVfdCBpKSAtPiBib29sIHsKLSAgICAg
ICAgLy8gQmFpbCBpZiB0aGUgbm9uLW1hdGNoaW5nIGNvbG9yIGlzIG5vdCB0aGUgZmlyc3Qgb3Ig
bGFzdCBzbmFwc2hvdCwgb3IgdGhlcmUgYWxyZWFkeSBpcyBhbiBub24tbWF0Y2hpbmcgY29sb3Iu
Ci0gICAgICAgIGlmICgoaSAmJiBpIDwgbnVtU25hcHNob3RzIC0gMSkgfHwgbm9uTWF0Y2hpbmdD
b2xvckluZGV4ICE9IG51bVNuYXBzaG90cykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgICAgIG5vbk1hdGNoaW5nQ29sb3JJbmRleCA9IGk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9OwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1TbmFwc2hvdHM7ICsraSkg
ewotICAgICAgICBhdXRvIHNuYXBzaG90ID0gc2FtcGxlUGFnZUNvbG9yKCp0aGlzLCBJbnRQb2lu
dChmcmFtZVdpZHRoICogaSAvIChudW1TbmFwc2hvdHMgLSAxKSwgMCkpOwotICAgICAgICBpZiAo
IXNuYXBzaG90KSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkU3RvcEFmdGVyRmluZGluZ05vbk1h
dGNoaW5nQ29sb3IoaSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBzbmFwc2hvdHNbaV0gPSAqc25hcHNob3Q7Ci0K
LSAgICAgICAgaWYgKGkpIHsKLSAgICAgICAgICAgIC8vIEVhY2ggYGRpZmZlcmVuY2VgIGl0ZW0g
Y29tcGFyZXMgYGlgIHdpdGggYGkgLSAxYCBzbyBpZiB0aGUgZmlyc3QgY29tcGFyaXNvbiAoYGkg
PT0gMWApCi0gICAgICAgICAgICAvLyBpcyB0b28gbGFyZ2Ugb2YgYSBkaWZmZXJlbmNlLCB3ZSBz
aG91bGQgdHJlYXQgYGkgLSAxYCAoaS5lLiBgMGApIGFzIHRoZSBwcm9ibGVtIHNpbmNlCi0gICAg
ICAgICAgICAvLyB3ZSBvbmx5IGFsbG93IGZvciBub24tbWF0Y2hpbmcgY29sb3JzIGJlaW5nIHRo
ZSBmaXJzdCBvciBsYXN0IHNhbXBsZWQgY29sb3IuCi0gICAgICAgICAgICBhdXRvIGVmZmVjdGl2
ZU5vbk1hdGNoaW5nQ29sb3JJbmRleCA9IGkgPT0gMSA/IDAgOiBpOwotCi0gICAgICAgICAgICBk
aWZmZXJlbmNlc1tpIC0gMV0gPSBjb2xvckRpZmZlcmVuY2Uoc25hcHNob3RzW2kgLSAxXSwgc25h
cHNob3RzW2ldKTsKLSAgICAgICAgICAgIGlmIChkaWZmZXJlbmNlc1tpIC0gMV0gPiBtYXhEaWZm
ZXJlbmNlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0b3BBZnRlckZpbmRpbmdOb25N
YXRjaGluZ0NvbG9yKGVmZmVjdGl2ZU5vbk1hdGNoaW5nQ29sb3JJbmRleCkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgZG91YmxlIGN1bXVsdWF0aXZlRGlmZmVyZW5jZSA9IDA7Ci0gICAg
ICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGk7ICsraikgewotICAgICAgICAgICAgICAg
IGlmIChqID09IG5vbk1hdGNoaW5nQ29sb3JJbmRleCkKLSAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgY3VtdWx1YXRpdmVEaWZmZXJlbmNlICs9IGRpZmZlcmVu
Y2VzW2pdOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGN1bXVsdWF0aXZlRGlmZmVy
ZW5jZSA+IG1heERpZmZlcmVuY2UpIHsKLSAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3RvcEFm
dGVyRmluZGluZ05vbk1hdGNoaW5nQ29sb3IoZWZmZWN0aXZlTm9uTWF0Y2hpbmdDb2xvckluZGV4
KSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IGFscmVhZHkgaWRlbnRp
ZmllZCBhIG5vbi1tYXRjaGluZyBzbmFwc2hvdCBhbmQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0
aGUgZmlyc3QKLSAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHNlY29uZCBzbmFwc2hvdHMgb3Ig
dGhlIHNlY29uZC10by1sYXN0IGFuZCBsYXN0IHNuYXBzaG90cyBpcyBsZXNzIHRoYW4gdGhlIG1h
eGltdW0sIG1hcmsKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGZpcnN0L2xhc3Qgc25hcHNo
b3QgYXMgbm9uLW1hdGNoaW5nIHRvIGdpdmUgYSBjaGFuY2UgZm9yIHRoZSByZXN0IG9mIHRoZSBz
bmFwc2hvdHMgdG8gbWF0Y2guCi0gICAgICAgICAgICAgICAgICAgIGlmIChub25NYXRjaGluZ0Nv
bG9ySW5kZXggPT0gbnVtU25hcHNob3RzICYmICghaSB8fCBpID09IG51bVNuYXBzaG90cyAtIDEp
ICYmIGN1bXVsdWF0aXZlRGlmZmVyZW5jZSAtIGRpZmZlcmVuY2VzW2kgLSAxXSA8PSBtYXhEaWZm
ZXJlbmNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub25NYXRjaGluZ0NvbG9ySW5kZXgg
PSBlZmZlY3RpdmVOb25NYXRjaGluZ0NvbG9ySW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRGVjcmVhc2UgdGhlIGhlaWdo
dCBieSBvbmUgcGl4ZWwgc28gdGhhdCB0aGUgbGFzdCBzbmFwc2hvdCBpcyB3aXRoaW4gYm91bmRz
IGFuZCBub3Qgb2ZmLWJ5LW9uZS4KLSAgICBhdXRvIG1pbkhlaWdodCA9IHNldHRpbmdzKCkuc2Ft
cGxlZFBhZ2VUb3BDb2xvck1pbkhlaWdodCgpIC0gMTsKLSAgICBpZiAobWluSGVpZ2h0ID4gMCkg
ewotICAgICAgICBpZiAobm9uTWF0Y2hpbmdDb2xvckluZGV4KSB7Ci0gICAgICAgICAgICBpZiAo
YXV0byBsZWZ0TWlkZGxlU25hcHNob3QgPSBzYW1wbGVQYWdlQ29sb3IoKnRoaXMsIEludFBvaW50
KDAsIG1pbkhlaWdodCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yRGlmZmVyZW5jZSgq
bGVmdE1pZGRsZVNuYXBzaG90LCBzbmFwc2hvdHNbMF0pID4gbWF4RGlmZmVyZW5jZSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKG5vbk1hdGNoaW5nQ29sb3JJbmRleCAhPSBudW1TbmFwc2hvdHMgLSAxKSB7Ci0gICAg
ICAgICAgICBpZiAoYXV0byByaWdodE1pZGRsZVNuYXBzaG90ID0gc2FtcGxlUGFnZUNvbG9yKCp0
aGlzLCBJbnRQb2ludChmcmFtZVdpZHRoLCBtaW5IZWlnaHQpKSkgewotICAgICAgICAgICAgICAg
IGlmIChjb2xvckRpZmZlcmVuY2UoKnJpZ2h0TWlkZGxlU25hcHNob3QsIHNuYXBzaG90c1tudW1T
bmFwc2hvdHMgLSAxXSkgPiBtYXhEaWZmZXJlbmNlKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIHNuYXBzaG90
c1RvQXZlcmFnZSA9IHNuYXBzaG90czsKLSAgICBhdXRvIHZhbGlkU25hcHNob3RDb3VudCA9IG51
bVNuYXBzaG90czsKLSAgICBpZiAoIW5vbk1hdGNoaW5nQ29sb3JJbmRleCkgewotICAgICAgICAv
LyBTa2lwIHRoZSBmaXJzdCBzbmFwc2hvdCBieSBtb3ZpbmcgdGhlIHBvaW50ZXIgdGhhdCBpbmRp
Y2F0ZXMgd2hlcmUgdGhlIHNuYXBzaG90IGFycmF5Ci0gICAgICAgIC8vIHN0YXJ0cyBhbmQgZGVj
cmVhc2luZyB0aGUgY291bnQgb2Ygc25hcHNob3RzIHRvIGF2ZXJhZ2UuCi0gICAgICAgICsrc25h
cHNob3RzVG9BdmVyYWdlOwotICAgICAgICAtLXZhbGlkU25hcHNob3RDb3VudDsKLSAgICB9IGVs
c2UgaWYgKG5vbk1hdGNoaW5nQ29sb3JJbmRleCA9PSBudW1TbmFwc2hvdHMgLSAxKSB7Ci0gICAg
ICAgIC8vIFNraXAgdGhlIGxhc3Qgc25hcHNob3QgYnkgZGVjcmVhc2luZyB0aGUgY291bnQgb2Yg
c25hcHNob3RzIHRvIGF2ZXJhZ2UuCi0gICAgICAgIC0tdmFsaWRTbmFwc2hvdENvdW50OwotICAg
IH0KLSAgICBtX3NhbXBsZWRQYWdlVG9wQ29sb3IgPSBhdmVyYWdlQ29sb3Ioc25hcHNob3RzVG9B
dmVyYWdlLCB2YWxpZFNuYXBzaG90Q291bnQpOwotfQotCiAjaWYgRU5BQkxFKERBUktfTU9ERV9D
U1MpCiBzdGF0aWMgdm9pZCBwcm9jZXNzQ29sb3JTY2hlbWVTdHJpbmcoU3RyaW5nVmlldyBjb2xv
clNjaGVtZSwgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKFN0cmluZ1ZpZXcga2V5KT4mIGNhbGxi
YWNrKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCA0YTBmZGQ1MjAwYTYwZjQ1ODkzNGM0ZTQ0
NTA0YjgwYjc1NDIyY2MwLi5hM2RhYWExYzIyZDdkMzkwYzRlNzFiZDdmMTY3NTkxNGFjODMxZDhk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtNzQzLDggKzc0Myw2IEBAIHB1YmxpYzoKIAogICAg
IGNvbnN0IENvbG9yJiB0aGVtZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhRWxlbWVudFRo
ZW1lQ29sb3IuaXNWYWxpZCgpID8gbV9tZXRhRWxlbWVudFRoZW1lQ29sb3IgOiBtX2FwcGxpY2F0
aW9uTWFuaWZlc3RUaGVtZUNvbG9yOyB9CiAKLSAgICBjb25zdCBDb2xvciYgc2FtcGxlZFBhZ2VU
b3BDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlZFBhZ2VUb3BDb2xvcjsgfQotCiAgICAg
dm9pZCBzZXRUZXh0Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKSB7IG1fdGV4dENvbG9yID0gY29s
b3I7IH0KICAgICBjb25zdCBDb2xvciYgdGV4dENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0
Q29sb3I7IH0KIApAQCAtMTY3NCw4ICsxNjcyLDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdGhl
bWVDb2xvckNoYW5nZWQoKTsKIAotICAgIHZvaWQgZGV0ZXJtaW5lU2FtcGxlZFBhZ2VUb3BDb2xv
cigpOwotCiAgICAgdm9pZCBpbnZhbGlkYXRlQWNjZXNzS2V5Q2FjaGVTbG93Q2FzZSgpOwogICAg
IHZvaWQgYnVpbGRBY2Nlc3NLZXlDYWNoZSgpOwogCkBAIC0xNzk3LDggKzE3OTMsNiBAQCBwcml2
YXRlOgogICAgIENvbG9yIG1fbWV0YUVsZW1lbnRUaGVtZUNvbG9yOwogICAgIENvbG9yIG1fYXBw
bGljYXRpb25NYW5pZmVzdFRoZW1lQ29sb3I7CiAKLSAgICBDb2xvciBtX3NhbXBsZWRQYWdlVG9w
Q29sb3I7Ci0KICAgICBDb2xvciBtX3RleHRDb2xvciB7IENvbG9yOjpibGFjayB9OwogICAgIENv
bG9yIG1fbGlua0NvbG9yOwogICAgIENvbG9yIG1fdmlzaXRlZExpbmtDb2xvcjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmNwcAppbmRleCA5NzI0ZGFlY2VjMmFhMTY5OWE0Y2I4OTdkMzQ2NWViNzc3
NzliYzRjLi42NTgzYzM2OWZkYTFjMDZkOTQzNzVjY2RjMjNmYzhiNzIyMzBiZjVhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC00NjE3LDcgKzQ2MTcsNyBAQCB2b2lkIEZyYW1lVmll
dzo6Y2hlY2tBbmREaXNwYXRjaERpZFJlYWNoVmlzdWFsbHlOb25FbXB0eVN0YXRlKCkKICAgICAg
ICAgZnJhbWUoKS5sb2FkZXIoKS5kaWRSZWFjaFZpc3VhbGx5Tm9uRW1wdHlTdGF0ZSgpOwogfQog
Ci1ib29sIEZyYW1lVmlldzo6aGFzQ29udGVuZnVsRGVzY2VuZGFudHMoKSBjb25zdAorYm9vbCBG
cmFtZVZpZXc6Omhhc0NvbnRlbnRmdWxEZXNjZW5kYW50cygpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1fdmlzdWFsbHlOb25FbXB0eUNoYXJhY3RlckNvdW50IHx8IG1fdmlzdWFsbHlOb25FbXB0eVBp
eGVsQ291bnQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5o
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAppbmRleCBmNGE2MDc4ZTkyNjdhYzQz
ZmE0MzFmNWY5ZWM4NjdlOTkyMTJlMDU2Li45ZWQxYzcyM2U5OWMyYTJjYTYxOWNjODg1ZWUyYWNh
NTY2NmY5YTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKQEAgLTQxMyw3ICs0MTMsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBpbmNyZW1lbnRWaXN1YWxseU5vbkVtcHR5Q2hhcmFjdGVyQ291bnQo
Y29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBpbmNyZW1lbnRWaXN1YWxseU5vbkVtcHR5UGl4ZWxD
b3VudChjb25zdCBJbnRTaXplJik7CiAgICAgYm9vbCBpc1Zpc3VhbGx5Tm9uRW1wdHkoKSBjb25z
dCB7IHJldHVybiBtX2NvbnRlbnRRdWFsaWZpZXNBc1Zpc3VhbGx5Tm9uRW1wdHk7IH0KLSAgICBi
b29sIGhhc0NvbnRlbmZ1bERlc2NlbmRhbnRzKCkgY29uc3Q7CisgICAgYm9vbCBoYXNDb250ZW50
ZnVsRGVzY2VuZGFudHMoKSBjb25zdDsKICAgICB2b2lkIGNoZWNrQW5kRGlzcGF0Y2hEaWRSZWFj
aFZpc3VhbGx5Tm9uRW1wdHlTdGF0ZSgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbmFi
bGVGaXhlZFdpZHRoQXV0b1NpemVNb2RlKGJvb2wgZW5hYmxlLCBjb25zdCBJbnRTaXplJiBtaW5T
aXplKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDUzNGEyNmU0MDExZjNhODExNjIzOGUwYzEyZjFk
NGFhZDI5ODUyNWIuLjI5OGUxMzMxZGQwZTc3NjAxYWU4MzEwY2UyZTdlNjU1MjIxNzAyNTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkNocm9tZS5oIgog
I2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkNvbnN0YW50UHJvcGVydHlNYXAu
aCIKKyNpbmNsdWRlICJDb250ZW50ZnVsUGFpbnRDaGVja2VyLmgiCiAjaW5jbHVkZSAiQ29udGV4
dE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJDb29raWVKYXIuaCIKQEAgLTYzLDIxICs2NCwyOSBAQAogI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJGcmFtZVNl
bGVjdGlvbi5oIgorI2luY2x1ZGUgIkZyYW1lU25hcHNob3R0aW5nLmgiCiAjaW5jbHVkZSAiRnJh
bWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiRnVsbHNjcmVlbk1h
bmFnZXIuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJRnJhbWVF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxN
ZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIaXN0b3J5Q29udHJv
bGxlci5oIgogI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlcXVl
c3QuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSURCQ29ubmVjdGlv
blRvU2VydmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbWFnZU92
ZXJsYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5oIgorI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJMYXlvdXREaXNhbGxvd2VkU2NvcGUuaCIKICNp
bmNsdWRlICJMZWdhY3lTY2hlbWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIkxpYldlYlJUQ1Byb3Zp
ZGVyLmgiCkBAIC0xMDcsNyArMTE2LDkgQEAKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIK
ICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckRlc2NlbmRhbnRJdGVyYXRvci5o
IgorI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5o
IgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKQEAg
LTE2NzIsNiArMTY4Myw4IEBAIHZvaWQgUGFnZTo6ZG9BZnRlclVwZGF0ZVJlbmRlcmluZygpCiAg
ICAgICAgIEFTU0VSVCghZnJhbWVWaWV3IHx8ICFmcmFtZVZpZXctPm5lZWRzTGF5b3V0KCkpOwog
ICAgIH0KICNlbmRpZgorCisgICAgZGV0ZXJtaW5lU2FtcGxlZFBhZ2VUb3BDb2xvcklmTmVlZGVk
KCk7CiB9CiAKIHZvaWQgUGFnZTo6ZmluYWxpemVSZW5kZXJpbmdVcGRhdGUoT3B0aW9uU2V0PEZp
bmFsaXplUmVuZGVyaW5nVXBkYXRlRmxhZ3M+IGZsYWdzKQpAQCAtMjU1NiwxMSArMjU2OSwyMDQg
QEAgQ29sb3IgUGFnZTo6cGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yKCkgY29uc3QKIAogQ29s
b3IgUGFnZTo6c2FtcGxlZFBhZ2VUb3BDb2xvcigpIGNvbnN0CiB7Ci0gICAgYXV0byogZG9jdW1l
bnQgPSBtYWluRnJhbWUoKS5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAg
IHJldHVybiB7IH07CisgICAgcmV0dXJuIG1fc2FtcGxlZFBhZ2VUb3BDb2xvci52YWx1ZU9yKENv
bG9yKCkpOworfQogCi0gICAgcmV0dXJuIGRvY3VtZW50LT5zYW1wbGVkUGFnZVRvcENvbG9yKCk7
CitzdGF0aWMgYm9vbCBpc1ZhbGlkUGFnZVNhbXBsZUxvY2F0aW9uKERvY3VtZW50JiBkb2N1bWVu
dCwgY29uc3QgSW50UG9pbnQmIGxvY2F0aW9uKQoreworICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93
ZWJraXQub3JnL2IvMjI1MTY3PiAoU2FtcGxlZCBQYWdlIFRvcCBDb2xvcjogaG9vayBpbnRvIHBh
aW50aW5nIGxvZ2ljIGluc3RlYWQgb2YgdGFraW5nIHNuYXBzaG90cykKKworICAgIGNvbnN0ZXhw
ciBPcHRpb25TZXQ8SGl0VGVzdFJlcXVlc3Q6OlJlcXVlc3RUeXBlPiBoaXRUZXN0UmVxdWVzdFR5
cGVzIHsgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5LCBIaXRUZXN0UmVxdWVzdDo6RGlzYWxsb3dV
c2VyQWdlbnRTaGFkb3dDb250ZW50LCBIaXRUZXN0UmVxdWVzdDo6Q29sbGVjdE11bHRpcGxlRWxl
bWVudHMsIEhpdFRlc3RSZXF1ZXN0OjpJbmNsdWRlQWxsRWxlbWVudHNVbmRlclBvaW50IH07Cisg
ICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0KGxvY2F0aW9uKTsKKyAgICBkb2N1bWVudC5o
aXRUZXN0KGhpdFRlc3RSZXF1ZXN0VHlwZXMsIGhpdFRlc3RSZXN1bHQpOworCisgICAgZm9yIChh
dXRvJiBoaXRUZXN0Tm9kZSA6IGhpdFRlc3RSZXN1bHQubGlzdEJhc2VkVGVzdFJlc3VsdCgpKSB7
CisgICAgICAgIGF1dG8mIG5vZGUgPSBoaXRUZXN0Tm9kZS5nZXQoKTsKKworICAgICAgICBhdXRv
KiByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKCFyZW5kZXJlcikKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBTa2lwIGltYWdlcyAoYm90aCBg
PGltZz5gIGFuZCBDU1MgYGJhY2tncm91bmQtaW1hZ2VgKSBhcyB0aGV5J3JlIGxpa2VseSBub3Qg
YSBzb2xpZCBjb2xvci4KKyAgICAgICAgaWYgKGlzPFJlbmRlckltYWdlPihyZW5kZXJlcikgfHwg
cmVuZGVyZXItPnN0eWxlKCkuaGFzQmFja2dyb3VuZEltYWdlKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgLy8gU2tpcCBub2RlcyB3aXRoIGFuaW1hdGlvbnMgYXMgdGhl
IHNhbXBsZSBtYXkgZ2V0IGFuIG9kZCBjb2xvciBpZiB0aGUgYW5pbWF0aW9uIGlzIGluLXByb2dy
ZXNzLgorICAgICAgICBpZiAocmVuZGVyZXItPnN0eWxlKCkuaGFzVHJhbnNpdGlvbnMoKSB8fCBy
ZW5kZXJlci0+c3R5bGUoKS5oYXNBbmltYXRpb25zKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgLy8gU2tpcCAzcmQtcGFydHkgYDxpZnJhbWU+YCBhcyB0aGUgY29udGVu
dCBsaWtlbHkgd29uJ3QgbWF0Y2ggdGhlIHJlc3Qgb2YgdGhlIHBhZ2UuCisgICAgICAgIGlmIChp
czxIVE1MSUZyYW1lRWxlbWVudD4obm9kZSkgJiYgIWFyZVJlZ2lzdHJhYmxlRG9tYWluc0VxdWFs
KGRvd25jYXN0PEhUTUxJRnJhbWVFbGVtZW50Pihub2RlKS5sb2NhdGlvbigpLCBkb2N1bWVudC51
cmwoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxMYWI8ZmxvYXQ+PiBzYW1wbGVQYWdlQ29sb3IoRG9j
dW1lbnQmIGRvY3VtZW50LCBJbnRQb2ludCYmIGxvY2F0aW9uKQoreworICAgIC8vIEZJWE1FOiA8
aHR0cHM6Ly93ZWJraXQub3JnL2IvMjI1MTY3PiAoU2FtcGxlZCBQYWdlIFRvcCBDb2xvcjogaG9v
ayBpbnRvIHBhaW50aW5nIGxvZ2ljIGluc3RlYWQgb2YgdGFraW5nIHNuYXBzaG90cykKKworICAg
IGlmICghaXNWYWxpZFBhZ2VTYW1wbGVMb2NhdGlvbihkb2N1bWVudCwgbG9jYXRpb24pKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgQVNTRVJUKGRvY3VtZW50LnZpZXcoKSk7
CisgICAgYXV0byBzbmFwc2hvdCA9IHNuYXBzaG90RnJhbWVSZWN0KGRvY3VtZW50LnZpZXcoKS0+
ZnJhbWUoKSwgSW50UmVjdChsb2NhdGlvbiwgSW50U2l6ZSgxLCAxKSksIFNuYXBzaG90T3B0aW9u
c0V4Y2x1ZGVTZWxlY3Rpb25IaWdobGlnaHRpbmcgfCBTbmFwc2hvdE9wdGlvbnNQYWludEV2ZXJ5
dGhpbmdFeGNsdWRpbmdTZWxlY3Rpb24pOworICAgIGlmICghc25hcHNob3QpCisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRvIHNuYXBzaG90RGF0YSA9IHNuYXBzaG90LT50
b0JHUkFEYXRhKCk7CisgICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxMYWI8ZmxvYXQ+PihTUkdCQTx1
aW50OF90PiB7IHNuYXBzaG90RGF0YVsyXSwgc25hcHNob3REYXRhWzFdLCBzbmFwc2hvdERhdGFb
MF0sIHNuYXBzaG90RGF0YVszXSB9KTsKK30KKworc3RhdGljIGRvdWJsZSBjb2xvckRpZmZlcmVu
Y2UoTGFiPGZsb2F0PiYgbGhzLCBMYWI8ZmxvYXQ+JiByaHMpCit7CisgICAgcmV0dXJuIHNxcnQo
cG93KHJocy5saWdodG5lc3MgLSBsaHMubGlnaHRuZXNzLCAyKSArIHBvdyhyaHMuYSAtIGxocy5h
LCAyKSArIHBvdyhyaHMuYiAtIGxocy5iLCAyKSk7Cit9CisKK3N0YXRpYyBMYWI8ZmxvYXQ+IGF2
ZXJhZ2VDb2xvcihMYWI8ZmxvYXQ+IGNvbG9yc1tdLCBzaXplX3QgY291bnQpCit7CisgICAgZmxv
YXQgdG90YWxMaWdodG5lc3MgPSAwOworICAgIGZsb2F0IHRvdGFsQSA9IDA7CisgICAgZmxvYXQg
dG90YWxCID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAg
ICAgICAgdG90YWxMaWdodG5lc3MgKz0gY29sb3JzW2ldLmxpZ2h0bmVzczsKKyAgICAgICAgdG90
YWxBICs9IGNvbG9yc1tpXS5hOworICAgICAgICB0b3RhbEIgKz0gY29sb3JzW2ldLmI7CisgICAg
fQorICAgIHJldHVybiB7CisgICAgICAgIHRvdGFsTGlnaHRuZXNzIC8gY291bnQsCisgICAgICAg
IHRvdGFsQSAvIGNvdW50LAorICAgICAgICB0b3RhbEIgLyBjb3VudCwKKyAgICAgICAgMSwKKyAg
ICB9OworfQorCit2b2lkIFBhZ2U6OmRldGVybWluZVNhbXBsZWRQYWdlVG9wQ29sb3JJZk5lZWRl
ZCgpCit7CisgICAgaWYgKG1fc2FtcGxlZFBhZ2VUb3BDb2xvcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYXV0byBtYXhEaWZmZXJlbmNlID0gc2V0dGluZ3MoKS5zYW1wbGVkUGFnZVRvcENvbG9y
TWF4RGlmZmVyZW5jZSgpOworICAgIGlmIChtYXhEaWZmZXJlbmNlIDw9IDApCisgICAgICAgIHJl
dHVybjsKKworICAgIGF1dG8qIG1haW5Eb2N1bWVudCA9IG1haW5GcmFtZSgpLmRvY3VtZW50KCk7
CisgICAgaWYgKCFtYWluRG9jdW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIGZy
YW1lVmlldyA9IG1haW5GcmFtZSgpLnZpZXcoKTsKKyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gRG9uJ3QgdGFrZSBzbmFwc2hvdHMgaWYgdGhlIGxheWVyIHRy
ZWUgaXMgc3RpbGwgZnJvemVuLgorICAgIGlmIChmcmFtZVZpZXctPm5lZWRzTGF5b3V0KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIERvbid0IGF0dGVtcHQgdG8gaGl0IHRlc3Qgb3Igc25h
cHNob3QgaWYgd2UgZG9uJ3QgaGF2ZSBhbnkgY29udGVudCB5ZXQuCisgICAgaWYgKCFmcmFtZVZp
ZXctPmlzVmlzdWFsbHlOb25FbXB0eSgpIHx8ICFmcmFtZVZpZXctPmhhc0NvbnRlbnRmdWxEZXNj
ZW5kYW50cygpIHx8ICFDb250ZW50ZnVsUGFpbnRDaGVja2VyOjpxdWFsaWZpZXNGb3JDb250ZW50
ZnVsUGFpbnQoKmZyYW1lVmlldykpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFNldCB0aGlz
IG5vdyB0byBwcmV2ZW50IHRoaXMgbWV0aG9kIGZyb20gYmVpbmcgY2FsbGVkIGFnYWluIGZvciB0
aGUgc2FtZSBtYWluIGRvY3VtZW50LgorICAgIG1fc2FtcGxlZFBhZ2VUb3BDb2xvciA9IENvbG9y
KCk7CisKKyAgICBhdXRvIG5vdGlmeVNhbXBsZWRQYWdlVG9wQ29sb3JDaGFuZ2VkT25TY29wZUV4
aXQgPSBtYWtlU2NvcGVFeGl0KFsmXSB7CisgICAgICAgIGNocm9tZSgpLmNsaWVudCgpLnNhbXBs
ZWRQYWdlVG9wQ29sb3JDaGFuZ2VkKCk7CisgICAgfSk7CisKKyAgICAvLyBEZWNyZWFzZSB0aGUg
d2lkdGggYnkgb25lIHBpeGVsIHNvIHRoYXQgdGhlIGxhc3Qgc25hcHNob3QgaXMgd2l0aGluIGJv
dW5kcyBhbmQgbm90IG9mZi1ieS1vbmUuCisgICAgYXV0byBmcmFtZVdpZHRoID0gZnJhbWVWaWV3
LT5jb250ZW50c1dpZHRoKCkgLSAxOworCisgICAgY29uc3RleHByIGF1dG8gbnVtU25hcHNob3Rz
ID0gNTsKKyAgICBzaXplX3Qgbm9uTWF0Y2hpbmdDb2xvckluZGV4ID0gbnVtU25hcHNob3RzOwor
CisgICAgTGFiPGZsb2F0PiBzbmFwc2hvdHNbbnVtU25hcHNob3RzXTsKKyAgICBkb3VibGUgZGlm
ZmVyZW5jZXNbbnVtU25hcHNob3RzIC0gMV07CisKKyAgICBhdXRvIHNob3VsZFN0b3BBZnRlckZp
bmRpbmdOb25NYXRjaGluZ0NvbG9yID0gWyZdIChzaXplX3QgaSkgLT4gYm9vbCB7CisgICAgICAg
IC8vIEJhaWwgaWYgdGhlIG5vbi1tYXRjaGluZyBjb2xvciBpcyBub3QgdGhlIGZpcnN0IG9yIGxh
c3Qgc25hcHNob3QsIG9yIHRoZXJlIGFscmVhZHkgaXMgYW4gbm9uLW1hdGNoaW5nIGNvbG9yLgor
ICAgICAgICBpZiAoKGkgJiYgaSA8IG51bVNuYXBzaG90cyAtIDEpIHx8IG5vbk1hdGNoaW5nQ29s
b3JJbmRleCAhPSBudW1TbmFwc2hvdHMpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
ICAgICBub25NYXRjaGluZ0NvbG9ySW5kZXggPSBpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtU25hcHNob3RzOyArK2kpIHsK
KyAgICAgICAgYXV0byBzbmFwc2hvdCA9IHNhbXBsZVBhZ2VDb2xvcigqbWFpbkRvY3VtZW50LCBJ
bnRQb2ludChmcmFtZVdpZHRoICogaSAvIChudW1TbmFwc2hvdHMgLSAxKSwgMCkpOworICAgICAg
ICBpZiAoIXNuYXBzaG90KSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3RvcEFmdGVyRmluZGlu
Z05vbk1hdGNoaW5nQ29sb3IoaSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBzbmFwc2hvdHNbaV0gPSAqc25hcHNo
b3Q7CisKKyAgICAgICAgaWYgKGkpIHsKKyAgICAgICAgICAgIC8vIEVhY2ggYGRpZmZlcmVuY2Vg
IGl0ZW0gY29tcGFyZXMgYGlgIHdpdGggYGkgLSAxYCBzbyBpZiB0aGUgZmlyc3QgY29tcGFyaXNv
biAoYGkgPT0gMWApCisgICAgICAgICAgICAvLyBpcyB0b28gbGFyZ2Ugb2YgYSBkaWZmZXJlbmNl
LCB3ZSBzaG91bGQgdHJlYXQgYGkgLSAxYCAoaS5lLiBgMGApIGFzIHRoZSBwcm9ibGVtIHNpbmNl
CisgICAgICAgICAgICAvLyB3ZSBvbmx5IGFsbG93IGZvciBub24tbWF0Y2hpbmcgY29sb3JzIGJl
aW5nIHRoZSBmaXJzdCBvciBsYXN0IHNhbXBsZWQgY29sb3IuCisgICAgICAgICAgICBhdXRvIGVm
ZmVjdGl2ZU5vbk1hdGNoaW5nQ29sb3JJbmRleCA9IGkgPT0gMSA/IDAgOiBpOworCisgICAgICAg
ICAgICBkaWZmZXJlbmNlc1tpIC0gMV0gPSBjb2xvckRpZmZlcmVuY2Uoc25hcHNob3RzW2kgLSAx
XSwgc25hcHNob3RzW2ldKTsKKyAgICAgICAgICAgIGlmIChkaWZmZXJlbmNlc1tpIC0gMV0gPiBt
YXhEaWZmZXJlbmNlKSB7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0b3BBZnRlckZpbmRp
bmdOb25NYXRjaGluZ0NvbG9yKGVmZmVjdGl2ZU5vbk1hdGNoaW5nQ29sb3JJbmRleCkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZG91YmxlIGN1bXVsdWF0aXZlRGlmZmVyZW5jZSA9IDA7
CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGk7ICsraikgeworICAgICAgICAg
ICAgICAgIGlmIChqID09IG5vbk1hdGNoaW5nQ29sb3JJbmRleCkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgY3VtdWx1YXRpdmVEaWZmZXJlbmNlICs9IGRp
ZmZlcmVuY2VzW2pdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGN1bXVsdWF0aXZl
RGlmZmVyZW5jZSA+IG1heERpZmZlcmVuY2UpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxk
U3RvcEFmdGVyRmluZGluZ05vbk1hdGNoaW5nQ29sb3IoZWZmZWN0aXZlTm9uTWF0Y2hpbmdDb2xv
ckluZGV4KSkgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IGFscmVhZHkg
aWRlbnRpZmllZCBhIG5vbi1tYXRjaGluZyBzbmFwc2hvdCBhbmQgdGhlIGRpZmZlcmVuY2UgYmV0
d2VlbiB0aGUgZmlyc3QKKyAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHNlY29uZCBzbmFwc2hv
dHMgb3IgdGhlIHNlY29uZC10by1sYXN0IGFuZCBsYXN0IHNuYXBzaG90cyBpcyBsZXNzIHRoYW4g
dGhlIG1heGltdW0sIG1hcmsKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGZpcnN0L2xhc3Qg
c25hcHNob3QgYXMgbm9uLW1hdGNoaW5nIHRvIGdpdmUgYSBjaGFuY2UgZm9yIHRoZSByZXN0IG9m
IHRoZSBzbmFwc2hvdHMgdG8gbWF0Y2guCisgICAgICAgICAgICAgICAgICAgIGlmIChub25NYXRj
aGluZ0NvbG9ySW5kZXggPT0gbnVtU25hcHNob3RzICYmICghaSB8fCBpID09IG51bVNuYXBzaG90
cyAtIDEpICYmIGN1bXVsdWF0aXZlRGlmZmVyZW5jZSAtIGRpZmZlcmVuY2VzW2kgLSAxXSA8PSBt
YXhEaWZmZXJlbmNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBub25NYXRjaGluZ0NvbG9y
SW5kZXggPSBlZmZlY3RpdmVOb25NYXRjaGluZ0NvbG9ySW5kZXg7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gRGVjcmVhc2UgdGhl
IGhlaWdodCBieSBvbmUgcGl4ZWwgc28gdGhhdCB0aGUgbGFzdCBzbmFwc2hvdCBpcyB3aXRoaW4g
Ym91bmRzIGFuZCBub3Qgb2ZmLWJ5LW9uZS4KKyAgICBhdXRvIG1pbkhlaWdodCA9IHNldHRpbmdz
KCkuc2FtcGxlZFBhZ2VUb3BDb2xvck1pbkhlaWdodCgpIC0gMTsKKyAgICBpZiAobWluSGVpZ2h0
ID4gMCkgeworICAgICAgICBpZiAobm9uTWF0Y2hpbmdDb2xvckluZGV4KSB7CisgICAgICAgICAg
ICBpZiAoYXV0byBsZWZ0TWlkZGxlU25hcHNob3QgPSBzYW1wbGVQYWdlQ29sb3IoKm1haW5Eb2N1
bWVudCwgSW50UG9pbnQoMCwgbWluSGVpZ2h0KSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29s
b3JEaWZmZXJlbmNlKCpsZWZ0TWlkZGxlU25hcHNob3QsIHNuYXBzaG90c1swXSkgPiBtYXhEaWZm
ZXJlbmNlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobm9uTWF0Y2hpbmdDb2xvckluZGV4ICE9IG51bVNuYXBzaG90
cyAtIDEpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHJpZ2h0TWlkZGxlU25hcHNob3QgPSBzYW1w
bGVQYWdlQ29sb3IoKm1haW5Eb2N1bWVudCwgSW50UG9pbnQoZnJhbWVXaWR0aCwgbWluSGVpZ2h0
KSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29sb3JEaWZmZXJlbmNlKCpyaWdodE1pZGRsZVNu
YXBzaG90LCBzbmFwc2hvdHNbbnVtU25hcHNob3RzIC0gMV0pID4gbWF4RGlmZmVyZW5jZSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgYXV0byBzbmFwc2hvdHNUb0F2ZXJhZ2UgPSBzbmFwc2hvdHM7CisgICAgYXV0byB2
YWxpZFNuYXBzaG90Q291bnQgPSBudW1TbmFwc2hvdHM7CisgICAgaWYgKCFub25NYXRjaGluZ0Nv
bG9ySW5kZXgpIHsKKyAgICAgICAgLy8gU2tpcCB0aGUgZmlyc3Qgc25hcHNob3QgYnkgbW92aW5n
IHRoZSBwb2ludGVyIHRoYXQgaW5kaWNhdGVzIHdoZXJlIHRoZSBzbmFwc2hvdCBhcnJheQorICAg
ICAgICAvLyBzdGFydHMgYW5kIGRlY3JlYXNpbmcgdGhlIGNvdW50IG9mIHNuYXBzaG90cyB0byBh
dmVyYWdlLgorICAgICAgICArK3NuYXBzaG90c1RvQXZlcmFnZTsKKyAgICAgICAgLS12YWxpZFNu
YXBzaG90Q291bnQ7CisgICAgfSBlbHNlIGlmIChub25NYXRjaGluZ0NvbG9ySW5kZXggPT0gbnVt
U25hcHNob3RzIC0gMSkgeworICAgICAgICAvLyBTa2lwIHRoZSBsYXN0IHNuYXBzaG90IGJ5IGRl
Y3JlYXNpbmcgdGhlIGNvdW50IG9mIHNuYXBzaG90cyB0byBhdmVyYWdlLgorICAgICAgICAtLXZh
bGlkU25hcHNob3RDb3VudDsKKyAgICB9CisgICAgbV9zYW1wbGVkUGFnZVRvcENvbG9yID0gQ29s
b3IoYXZlcmFnZUNvbG9yKHNuYXBzaG90c1RvQXZlcmFnZSwgdmFsaWRTbmFwc2hvdENvdW50KSk7
CiB9CiAKIC8vIFRoZXNlIGFyZSBtYWdpY2FsIGNvbnN0YW50cyB0aGF0IG1pZ2h0IGJlIHR3ZWFr
ZWQgb3ZlciB0aW1lLgpAQCAtMzI2Niw2ICszNDcyLDggQEAgdm9pZCBQYWdlOjpkaWRDaGFuZ2VN
YWluRG9jdW1lbnQoKQogICAgIG1fcnRjQ29udHJvbGxlci5yZXNldChtX3Nob3VsZEVuYWJsZUlD
RUNhbmRpZGF0ZUZpbHRlcmluZ0J5RGVmYXVsdCk7CiAjZW5kaWYKICAgICBtX3BvaW50ZXJDYXB0
dXJlQ29udHJvbGxlci0+cmVzZXQoKTsKKworICAgIG1fc2FtcGxlZFBhZ2VUb3BDb2xvciA9IFdU
Rjo6bnVsbG9wdDsKIH0KIAogUmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyJiBQYWdlOjpyZW5kZXJp
bmdVcGRhdGVTY2hlZHVsZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAppbmRleCA2ZGQwN2UxYmE5MWYzMTRkYTYw
ZTJhZjNjNzQwOWNhNTM4MmVkZTUxLi5mYmQ2MGU3M2RmNzM0YmI5YWM0OWU2NzE2ZmQxMDVlNWE3
MWU2MDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2UuaApAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSAiQWN0
aXZpdHlTdGF0ZS5oIgogI2luY2x1ZGUgIkFuaW1hdGlvbkZyYW1lUmF0ZS5oIgorI2luY2x1ZGUg
IkNvbG9yLmgiCiAjaW5jbHVkZSAiRGlzYWJsZWRBZGFwdGF0aW9ucy5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiRmluZE9wdGlvbnMuaCIKQEAgLTk0LDcgKzk1LDYgQEAgY2xh
c3MgQXV0aGVudGljYXRvckNvb3JkaW5hdG9yOwogY2xhc3MgQmFja0ZvcndhcmRDb250cm9sbGVy
OwogY2xhc3MgQ2FjaGVTdG9yYWdlUHJvdmlkZXI7CiBjbGFzcyBDaHJvbWU7Ci1jbGFzcyBDb2xv
cjsKIGNsYXNzIENvbnRleHRNZW51Q29udHJvbGxlcjsKIGNsYXNzIENvb2tpZUphcjsKIGNsYXNz
IERPTVJlY3RMaXN0OwpAQCAtODg5LDYgKzg4OSw4IEBAIHByaXZhdGU6CiAKICAgICBSZW5kZXJp
bmdVcGRhdGVTY2hlZHVsZXImIHJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlcigpOwogCisgICAgdm9p
ZCBkZXRlcm1pbmVTYW1wbGVkUGFnZVRvcENvbG9ySWZOZWVkZWQoKTsKKwogICAgIFdoZWVsRXZl
bnRUZXN0TW9uaXRvciYgZW5zdXJlV2hlZWxFdmVudFRlc3RNb25pdG9yKCk7CiAKICAgICBjb25z
dCBzdGQ6OnVuaXF1ZV9wdHI8Q2hyb21lPiBtX2Nocm9tZTsKQEAgLTExNTIsNiArMTE1NCw4IEBA
IHByaXZhdGU6CiAKICAgICBNb25vdG9uaWNUaW1lIG1fbGFzdFJlbmRlcmluZ1VwZGF0ZVRpbWVz
dGFtcDsKIAorICAgIE9wdGlvbmFsPENvbG9yPiBtX3NhbXBsZWRQYWdlVG9wQ29sb3I7CisKICAg
ICBjb25zdCBib29sIG1faHR0cHNVcGdyYWRlRW5hYmxlZCB7IHRydWUgfTsKICAgICBtdXRhYmxl
IE1lZGlhU2Vzc2lvbkdyb3VwSWRlbnRpZmllciBtX21lZGlhU2Vzc2lvbkdyb3VwSWRlbnRpZmll
cjsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427944</attachid>
            <date>2021-05-06 15:33:14 -0700</date>
            <delta_ts>2021-05-13 18:24:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225480-20210506163313.patch</filename>
            <type>text/plain</type>
            <size>27067</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwNjY2YjMyMGViYjI0N2RkYmFhYTVlZWY1YzljODkyYzBmN2I0MDIwLi43
NjBhNjdhMzNjYTJlNDMwMWU1ZTcyNDhiNGRiNDNmNzhiMTNhNjY1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDQgQEAKKzIwMjEtMDUtMDYgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29t
PgorCisgICAgICAgIFNhbXBsZWQgUGFnZSBUb3AgQ29sb3I6IG1vdmUgbG9naWMgb3V0IG9mIGBE
b2N1bWVudGAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyNTQ4MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEhhdmluZyBgZGV0ZXJtaW5lU2FtcGxlZFBhZ2VUb3BDb2xvcmAgYmUgY2FsbGVkIGluIGBlbnF1
ZXVlUGFpbnRUaW1pbmdFbnRyeUlmTmVlZGVkYCBhcyB3aGF0CisgICAgICAgIGlzIGJhc2ljYWxs
eSBhIHNpZGUgZWZmZWN0IGlzIG5vdCBncmVhdC4gVGhlIG9ubHkgcmVhc29uIGl0IHdhcyB0aGVy
ZSBpbiB0aGUgZmlyc3QgcGxhY2Ugd2FzCisgICAgICAgIHRvIHRha2UgYWR2YW50YWdlIG9mIHRo
ZSBsb2dpYyB0aGF0IGRlY2lkZWQgImlzIHRoaXMgdGhlIGZpcnN0IGNvbnRlbnRmdWwgcGFpbnQi
LCBidXQgdGhhdAorICAgICAgICBsb2dpYyBjYW4gYmUgcmVwbGljYXRlZCBlbHNld2hlcmUuIFNp
bmNlIHRoZSBzYW1wbGVkIHBhZ2UgdG9wIGNvbG9yIGRlYWxzIG1vcmUgd2l0aCB0aGUgcGFnZQor
ICAgICAgICBhcyBhIHdob2xlIGluc3RlYWQgb2YgYW4gaW5kaXZpZHVhbCBgRG9jdW1lbnRgICh3
aGljaCBpbmNsdWRlcyBzdWJmcmFtZXMpLCBpdCBtYWtlcyBtb3JlCisgICAgICAgIHNlbnNlIHRv
IGhhdmUgdGhpcyBsb2dpYyBiZSBvbiBgUGFnZWAgaW5zdGVhZC4KKworICAgICAgICAqIGRvbS9E
b2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNhbXBsZWRQYWdlVG9wQ29s
b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudDo6ZW5xdWV1ZVBhaW50VGltaW5nRW50cnlJZk5lZWRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjppc1ZhbGlkUGFnZVNhbXBsZUxvY2F0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OnNhbXBsZVBhZ2VDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpjb2xvckRpZmZlcmVuY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXZlcmFn
ZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkZXRlcm1pbmVT
YW1wbGVkUGFnZVRvcENvbG9yKTogRGVsZXRlZC4KKworICAgICAgICAqIHBhZ2UvUGFnZS5oOgor
ICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpkb0FmdGVy
VXBkYXRlUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNhbXBsZWRQYWdlVG9w
Q29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6aXNWYWxpZFBhZ2VTYW1wbGVMb2NhdGlv
bik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6c2FtcGxlUGFnZUNvbG9yKTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpjb2xvckRpZmZlcmVuY2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmF2ZXJhZ2VDb2xvcik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6ZGV0ZXJt
aW5lU2FtcGxlZFBhZ2VUb3BDb2xvcklmTmVlZGVkKTogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpQYWdlOjpkaWRDaGFuZ2VNYWluRG9jdW1lbnQpOgorCisgICAgICAgICogcGFnZS9GcmFtZVZp
ZXcuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVZpZXc6Omhhc0NvbnRlbnRmdWxEZXNjZW5kYW50cyBjb25zdCk6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpoYXNDb250ZW5mdWxEZXNjZW5kYW50cyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIERyaXZlLWJ5OiBGaXggaW5jb3JyZWN0IHNwZWxsaW5nLgorCiAyMDIx
LTA1LTA2ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBTYW1w
bGVkIFBhZ2UgVG9wIENvbG9yOiBtYWtlIGhpdCB0ZXN0cyBjb25zaWRlciBlbGVtZW50cyB3aXRo
IGBwb2ludGVyLWV2ZW50czogbm9uZWAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IGQ5MGRi
MjgxN2RjNzEyMzljYmY4OTkxMGVhZWMwNDE3NWM1YTUwYTQuLmZlMDg1NzFkYjcwYTUxMmUwMDcx
ZmU3Yzk2NmNmZmFjN2M1NjdjY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtODIsNyAr
ODIsNiBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNp
bmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgotI2luY2x1ZGUgIkZyYW1lU25hcHNob3R0aW5n
LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiRnVsbHNjcmVlbk1hbmFnZXIu
aCIKICNpbmNsdWRlICJHQ1JlYWNoYWJsZVJlZi5oIgpAQCAtMTI0LDcgKzEyMyw2IEBACiAjaW5j
bHVkZSAiSURCT3BlbkRCUmVxdWVzdC5oIgogI2luY2x1ZGUgIklkbGVDYWxsYmFja0NvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkltYWdlTG9hZGVyLmgiCiAjaW5jbHVkZSAiSW1h
Z2VPdmVybGF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlv
bi5oIgpAQCAtMTc3LDExICsxNzUsOSBAQAogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAi
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5oIgogI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0
b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxp
bmVCcmVhay5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJl
ZVVwZGF0ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lk
Z2V0LmgiCkBAIC0zMjU4LDcgKzMyNTQsNyBAQCB2b2lkIERvY3VtZW50OjplbnF1ZXVlUGFpbnRU
aW1pbmdFbnRyeUlmTmVlZGVkKCkKICAgICBpZiAoIXZpZXcoKS0+aXNWaXN1YWxseU5vbkVtcHR5
KCkgfHwgdmlldygpLT5uZWVkc0xheW91dCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
IXZpZXcoKS0+aGFzQ29udGVuZnVsRGVzY2VuZGFudHMoKSkKKyAgICBpZiAoIXZpZXcoKS0+aGFz
Q29udGVudGZ1bERlc2NlbmRhbnRzKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghQ29u
dGVudGZ1bFBhaW50Q2hlY2tlcjo6cXVhbGlmaWVzRm9yQ29udGVudGZ1bFBhaW50KCp2aWV3KCkp
KQpAQCAtMzI2Niw4ICszMjYyLDYgQEAgdm9pZCBEb2N1bWVudDo6ZW5xdWV1ZVBhaW50VGltaW5n
RW50cnlJZk5lZWRlZCgpCiAKICAgICBkb21XaW5kb3coKS0+cGVyZm9ybWFuY2UoKS5yZXBvcnRG
aXJzdENvbnRlbnRmdWxQYWludCgpOwogICAgIG1fZGlkRW5xdWV1ZUZpcnN0Q29udGVudGZ1bFBh
aW50ID0gdHJ1ZTsKLQotICAgIGRldGVybWluZVNhbXBsZWRQYWdlVG9wQ29sb3IoKTsKIH0KIAog
RXhjZXB0aW9uT3I8dm9pZD4gRG9jdW1lbnQ6OndyaXRlKERvY3VtZW50KiByZXNwb25zaWJsZURv
Y3VtZW50LCBTZWdtZW50ZWRTdHJpbmcmJiB0ZXh0KQpAQCAtMzg3MSwxOTcgKzM4NjUsNiBAQCB2
b2lkIERvY3VtZW50Ojp0aGVtZUNvbG9yQ2hhbmdlZCgpCiAjZW5kaWYgLy8gRU5BQkxFKFJVQkJF
Ul9CQU5ESU5HKQogfQogCi1zdGF0aWMgYm9vbCBpc1ZhbGlkUGFnZVNhbXBsZUxvY2F0aW9uKERv
Y3VtZW50JiBkb2N1bWVudCwgY29uc3QgSW50UG9pbnQmIGxvY2F0aW9uKQotewotICAgIC8vIEZJ
WE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjI1MTY3PiAoU2FtcGxlZCBQYWdlIFRvcCBDb2xv
cjogaG9vayBpbnRvIHBhaW50aW5nIGxvZ2ljIGluc3RlYWQgb2YgdGFraW5nIHNuYXBzaG90cykK
LQotICAgIGNvbnN0ZXhwciBPcHRpb25TZXQ8SGl0VGVzdFJlcXVlc3Q6OlJlcXVlc3RUeXBlPiBo
aXRUZXN0UmVxdWVzdFR5cGVzIHsgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5LCBIaXRUZXN0UmVx
dWVzdDo6SWdub3JlQ1NTUG9pbnRlckV2ZW50c1Byb3BlcnR5LCBIaXRUZXN0UmVxdWVzdDo6RGlz
YWxsb3dVc2VyQWdlbnRTaGFkb3dDb250ZW50LCBIaXRUZXN0UmVxdWVzdDo6Q29sbGVjdE11bHRp
cGxlRWxlbWVudHMsIEhpdFRlc3RSZXF1ZXN0OjpJbmNsdWRlQWxsRWxlbWVudHNVbmRlclBvaW50
IH07Ci0gICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0KGxvY2F0aW9uKTsKLSAgICBkb2N1
bWVudC5oaXRUZXN0KGhpdFRlc3RSZXF1ZXN0VHlwZXMsIGhpdFRlc3RSZXN1bHQpOwotCi0gICAg
Zm9yIChhdXRvJiBoaXRUZXN0Tm9kZSA6IGhpdFRlc3RSZXN1bHQubGlzdEJhc2VkVGVzdFJlc3Vs
dCgpKSB7Ci0gICAgICAgIGF1dG8mIG5vZGUgPSBoaXRUZXN0Tm9kZS5nZXQoKTsKLQotICAgICAg
ICBhdXRvKiByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKCFyZW5kZXJl
cikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAvLyBTa2lwIGltYWdlcyAo
Ym90aCBgPGltZz5gIGFuZCBDU1MgYGJhY2tncm91bmQtaW1hZ2VgKSBhcyB0aGV5J3JlIGxpa2Vs
eSBub3QgYSBzb2xpZCBjb2xvci4KLSAgICAgICAgaWYgKGlzPFJlbmRlckltYWdlPihyZW5kZXJl
cikgfHwgcmVuZGVyZXItPnN0eWxlKCkuaGFzQmFja2dyb3VuZEltYWdlKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gU2tpcCBub2RlcyB3aXRoIGFuaW1hdGlvbnMg
YXMgdGhlIHNhbXBsZSBtYXkgZ2V0IGFuIG9kZCBjb2xvciBpZiB0aGUgYW5pbWF0aW9uIGlzIGlu
LXByb2dyZXNzLgotICAgICAgICBpZiAocmVuZGVyZXItPnN0eWxlKCkuaGFzVHJhbnNpdGlvbnMo
KSB8fCByZW5kZXJlci0+c3R5bGUoKS5oYXNBbmltYXRpb25zKCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gU2tpcCBgPGNhbnZhcz5gIGJ1dCBvbmx5IGlmIHRoZXkn
dmUgYmVlbiBkcmF3biBpbnRvLiBHdWVzcyB0aGlzIGJ5IHNlZWluZyBpZiB0aGVyZSdzIGFscmVh
ZHkKLSAgICAgICAgLy8gYSBgQ2FudmFzUmVuZGVyaW5nQ29udGV4dGAsIHdoaWNoIGlzIG9ubHkg
Y3JlYXRlZCBieSBKYXZhU2NyaXB0LgotICAgICAgICBpZiAoaXM8SFRNTENhbnZhc0VsZW1lbnQ+
KG5vZGUpICYmIGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50Pihub2RlKS5yZW5kZXJpbmdDb250
ZXh0KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gU2tpcCAzcmQt
cGFydHkgYDxpZnJhbWU+YCBhcyB0aGUgY29udGVudCBsaWtlbHkgd29uJ3QgbWF0Y2ggdGhlIHJl
c3Qgb2YgdGhlIHBhZ2UuCi0gICAgICAgIGlmIChpczxIVE1MSUZyYW1lRWxlbWVudD4obm9kZSkg
JiYgIWFyZVJlZ2lzdHJhYmxlRG9tYWluc0VxdWFsKGRvd25jYXN0PEhUTUxJRnJhbWVFbGVtZW50
Pihub2RlKS5sb2NhdGlvbigpLCBkb2N1bWVudC51cmwoKSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBPcHRpb25hbDxM
YWI8ZmxvYXQ+PiBzYW1wbGVQYWdlQ29sb3IoRG9jdW1lbnQmIGRvY3VtZW50LCBJbnRQb2ludCYm
IGxvY2F0aW9uKQotewotICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjI1MTY3
PiAoU2FtcGxlZCBQYWdlIFRvcCBDb2xvcjogaG9vayBpbnRvIHBhaW50aW5nIGxvZ2ljIGluc3Rl
YWQgb2YgdGFraW5nIHNuYXBzaG90cykKLQotICAgIGlmICghaXNWYWxpZFBhZ2VTYW1wbGVMb2Nh
dGlvbihkb2N1bWVudCwgbG9jYXRpb24pKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
Ci0gICAgQVNTRVJUKGRvY3VtZW50LnZpZXcoKSk7Ci0gICAgYXV0byBzbmFwc2hvdCA9IHNuYXBz
aG90RnJhbWVSZWN0KGRvY3VtZW50LnZpZXcoKS0+ZnJhbWUoKSwgSW50UmVjdChsb2NhdGlvbiwg
SW50U2l6ZSgxLCAxKSksIFNuYXBzaG90T3B0aW9uc0V4Y2x1ZGVTZWxlY3Rpb25IaWdobGlnaHRp
bmcgfCBTbmFwc2hvdE9wdGlvbnNQYWludEV2ZXJ5dGhpbmdFeGNsdWRpbmdTZWxlY3Rpb24pOwot
ICAgIGlmICghc25hcHNob3QpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBh
dXRvIHNuYXBzaG90RGF0YSA9IHNuYXBzaG90LT50b0JHUkFEYXRhKCk7Ci0gICAgcmV0dXJuIGNv
bnZlcnRDb2xvcjxMYWI8ZmxvYXQ+PihTUkdCQTx1aW50OF90PiB7IHNuYXBzaG90RGF0YVsyXSwg
c25hcHNob3REYXRhWzFdLCBzbmFwc2hvdERhdGFbMF0sIHNuYXBzaG90RGF0YVszXSB9KTsKLX0K
LQotc3RhdGljIGRvdWJsZSBjb2xvckRpZmZlcmVuY2UoTGFiPGZsb2F0PiYgbGhzLCBMYWI8Zmxv
YXQ+JiByaHMpCi17Ci0gICAgcmV0dXJuIHNxcnQocG93KHJocy5saWdodG5lc3MgLSBsaHMubGln
aHRuZXNzLCAyKSArIHBvdyhyaHMuYSAtIGxocy5hLCAyKSArIHBvdyhyaHMuYiAtIGxocy5iLCAy
KSk7Ci19Ci0KLXN0YXRpYyBMYWI8ZmxvYXQ+IGF2ZXJhZ2VDb2xvcihMYWI8ZmxvYXQ+IGNvbG9y
c1tdLCBzaXplX3QgY291bnQpCi17Ci0gICAgZmxvYXQgdG90YWxMaWdodG5lc3MgPSAwOwotICAg
IGZsb2F0IHRvdGFsQSA9IDA7Ci0gICAgZmxvYXQgdG90YWxCID0gMDsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgdG90YWxMaWdodG5lc3MgKz0gY29s
b3JzW2ldLmxpZ2h0bmVzczsKLSAgICAgICAgdG90YWxBICs9IGNvbG9yc1tpXS5hOwotICAgICAg
ICB0b3RhbEIgKz0gY29sb3JzW2ldLmI7Ci0gICAgfQotICAgIHJldHVybiB7Ci0gICAgICAgIHRv
dGFsTGlnaHRuZXNzIC8gY291bnQsCi0gICAgICAgIHRvdGFsQSAvIGNvdW50LAotICAgICAgICB0
b3RhbEIgLyBjb3VudCwKLSAgICAgICAgMSwKLSAgICB9OwotfQotCi12b2lkIERvY3VtZW50Ojpk
ZXRlcm1pbmVTYW1wbGVkUGFnZVRvcENvbG9yKCkKLXsKLSAgICBpZiAobV9zYW1wbGVkUGFnZVRv
cENvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBtYXhEaWZmZXJl
bmNlID0gc2V0dGluZ3MoKS5zYW1wbGVkUGFnZVRvcENvbG9yTWF4RGlmZmVyZW5jZSgpOwotICAg
IGlmIChtYXhEaWZmZXJlbmNlIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghaXNU
b3BEb2N1bWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvKiBmcmFtZVZpZXcgPSB2
aWV3KCk7Ci0gICAgaWYgKCFmcmFtZVZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8g
bm90aWZ5RGlkU2FtcGxlUGFnZVRvcENvbG9yT25TY29wZUV4aXQgPSBtYWtlU2NvcGVFeGl0KFsm
XSB7Ci0gICAgICAgIGlmIChhdXRvKiBwYWdlID0gdGhpcy0+cGFnZSgpKQotICAgICAgICAgICAg
cGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuc2FtcGxlZFBhZ2VUb3BDb2xvckNoYW5nZWQoKTsKLSAg
ICB9KTsKLQotICAgIC8vIERlY3JlYXNlIHRoZSB3aWR0aCBieSBvbmUgcGl4ZWwgc28gdGhhdCB0
aGUgbGFzdCBzbmFwc2hvdCBpcyB3aXRoaW4gYm91bmRzIGFuZCBub3Qgb2ZmLWJ5LW9uZS4KLSAg
ICBhdXRvIGZyYW1lV2lkdGggPSBmcmFtZVZpZXctPmNvbnRlbnRzV2lkdGgoKSAtIDE7Ci0KLSAg
ICBjb25zdGV4cHIgYXV0byBudW1TbmFwc2hvdHMgPSA1OwotICAgIHNpemVfdCBub25NYXRjaGlu
Z0NvbG9ySW5kZXggPSBudW1TbmFwc2hvdHM7Ci0KLSAgICBMYWI8ZmxvYXQ+IHNuYXBzaG90c1tu
dW1TbmFwc2hvdHNdOwotICAgIGRvdWJsZSBkaWZmZXJlbmNlc1tudW1TbmFwc2hvdHMgLSAxXTsK
LQotICAgIGF1dG8gc2hvdWxkU3RvcEFmdGVyRmluZGluZ05vbk1hdGNoaW5nQ29sb3IgPSBbJl0g
KHNpemVfdCBpKSAtPiBib29sIHsKLSAgICAgICAgLy8gQmFpbCBpZiB0aGUgbm9uLW1hdGNoaW5n
IGNvbG9yIGlzIG5vdCB0aGUgZmlyc3Qgb3IgbGFzdCBzbmFwc2hvdCwgb3IgdGhlcmUgYWxyZWFk
eSBpcyBhbiBub24tbWF0Y2hpbmcgY29sb3IuCi0gICAgICAgIGlmICgoaSAmJiBpIDwgbnVtU25h
cHNob3RzIC0gMSkgfHwgbm9uTWF0Y2hpbmdDb2xvckluZGV4ICE9IG51bVNuYXBzaG90cykKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIG5vbk1hdGNoaW5nQ29sb3JJbmRleCA9
IGk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9OwotCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBudW1TbmFwc2hvdHM7ICsraSkgewotICAgICAgICBhdXRvIHNuYXBzaG90ID0gc2Ft
cGxlUGFnZUNvbG9yKCp0aGlzLCBJbnRQb2ludChmcmFtZVdpZHRoICogaSAvIChudW1TbmFwc2hv
dHMgLSAxKSwgMCkpOwotICAgICAgICBpZiAoIXNuYXBzaG90KSB7Ci0gICAgICAgICAgICBpZiAo
c2hvdWxkU3RvcEFmdGVyRmluZGluZ05vbk1hdGNoaW5nQ29sb3IoaSkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBz
bmFwc2hvdHNbaV0gPSAqc25hcHNob3Q7Ci0KLSAgICAgICAgaWYgKGkpIHsKLSAgICAgICAgICAg
IC8vIEVhY2ggYGRpZmZlcmVuY2VgIGl0ZW0gY29tcGFyZXMgYGlgIHdpdGggYGkgLSAxYCBzbyBp
ZiB0aGUgZmlyc3QgY29tcGFyaXNvbiAoYGkgPT0gMWApCi0gICAgICAgICAgICAvLyBpcyB0b28g
bGFyZ2Ugb2YgYSBkaWZmZXJlbmNlLCB3ZSBzaG91bGQgdHJlYXQgYGkgLSAxYCAoaS5lLiBgMGAp
IGFzIHRoZSBwcm9ibGVtIHNpbmNlCi0gICAgICAgICAgICAvLyB3ZSBvbmx5IGFsbG93IGZvciBu
b24tbWF0Y2hpbmcgY29sb3JzIGJlaW5nIHRoZSBmaXJzdCBvciBsYXN0IHNhbXBsZWQgY29sb3Iu
Ci0gICAgICAgICAgICBhdXRvIGVmZmVjdGl2ZU5vbk1hdGNoaW5nQ29sb3JJbmRleCA9IGkgPT0g
MSA/IDAgOiBpOwotCi0gICAgICAgICAgICBkaWZmZXJlbmNlc1tpIC0gMV0gPSBjb2xvckRpZmZl
cmVuY2Uoc25hcHNob3RzW2kgLSAxXSwgc25hcHNob3RzW2ldKTsKLSAgICAgICAgICAgIGlmIChk
aWZmZXJlbmNlc1tpIC0gMV0gPiBtYXhEaWZmZXJlbmNlKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHNob3VsZFN0b3BBZnRlckZpbmRpbmdOb25NYXRjaGluZ0NvbG9yKGVmZmVjdGl2ZU5vbk1hdGNo
aW5nQ29sb3JJbmRleCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZG91YmxlIGN1bXVs
dWF0aXZlRGlmZmVyZW5jZSA9IDA7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8
IGk7ICsraikgewotICAgICAgICAgICAgICAgIGlmIChqID09IG5vbk1hdGNoaW5nQ29sb3JJbmRl
eCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgY3VtdWx1
YXRpdmVEaWZmZXJlbmNlICs9IGRpZmZlcmVuY2VzW2pdOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKGN1bXVsdWF0aXZlRGlmZmVyZW5jZSA+IG1heERpZmZlcmVuY2UpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoc2hvdWxkU3RvcEFmdGVyRmluZGluZ05vbk1hdGNoaW5nQ29sb3IoZWZm
ZWN0aXZlTm9uTWF0Y2hpbmdDb2xvckluZGV4KSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJ
ZiB3ZSBoYXZlbid0IGFscmVhZHkgaWRlbnRpZmllZCBhIG5vbi1tYXRjaGluZyBzbmFwc2hvdCBh
bmQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZmlyc3QKLSAgICAgICAgICAgICAgICAgICAg
Ly8gYW5kIHNlY29uZCBzbmFwc2hvdHMgb3IgdGhlIHNlY29uZC10by1sYXN0IGFuZCBsYXN0IHNu
YXBzaG90cyBpcyBsZXNzIHRoYW4gdGhlIG1heGltdW0sIG1hcmsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gdGhlIGZpcnN0L2xhc3Qgc25hcHNob3QgYXMgbm9uLW1hdGNoaW5nIHRvIGdpdmUgYSBj
aGFuY2UgZm9yIHRoZSByZXN0IG9mIHRoZSBzbmFwc2hvdHMgdG8gbWF0Y2guCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChub25NYXRjaGluZ0NvbG9ySW5kZXggPT0gbnVtU25hcHNob3RzICYmICgh
aSB8fCBpID09IG51bVNuYXBzaG90cyAtIDEpICYmIGN1bXVsdWF0aXZlRGlmZmVyZW5jZSAtIGRp
ZmZlcmVuY2VzW2kgLSAxXSA8PSBtYXhEaWZmZXJlbmNlKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBub25NYXRjaGluZ0NvbG9ySW5kZXggPSBlZmZlY3RpdmVOb25NYXRjaGluZ0NvbG9ySW5k
ZXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgLy8gRGVjcmVhc2UgdGhlIGhlaWdodCBieSBvbmUgcGl4ZWwgc28gdGhhdCB0aGUgbGFz
dCBzbmFwc2hvdCBpcyB3aXRoaW4gYm91bmRzIGFuZCBub3Qgb2ZmLWJ5LW9uZS4KLSAgICBhdXRv
IG1pbkhlaWdodCA9IHNldHRpbmdzKCkuc2FtcGxlZFBhZ2VUb3BDb2xvck1pbkhlaWdodCgpIC0g
MTsKLSAgICBpZiAobWluSGVpZ2h0ID4gMCkgewotICAgICAgICBpZiAobm9uTWF0Y2hpbmdDb2xv
ckluZGV4KSB7Ci0gICAgICAgICAgICBpZiAoYXV0byBsZWZ0TWlkZGxlU25hcHNob3QgPSBzYW1w
bGVQYWdlQ29sb3IoKnRoaXMsIEludFBvaW50KDAsIG1pbkhlaWdodCkpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGNvbG9yRGlmZmVyZW5jZSgqbGVmdE1pZGRsZVNuYXBzaG90LCBzbmFwc2hvdHNb
MF0pID4gbWF4RGlmZmVyZW5jZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5vbk1hdGNoaW5nQ29sb3JJbmRleCAh
PSBudW1TbmFwc2hvdHMgLSAxKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byByaWdodE1pZGRsZVNu
YXBzaG90ID0gc2FtcGxlUGFnZUNvbG9yKCp0aGlzLCBJbnRQb2ludChmcmFtZVdpZHRoLCBtaW5I
ZWlnaHQpKSkgewotICAgICAgICAgICAgICAgIGlmIChjb2xvckRpZmZlcmVuY2UoKnJpZ2h0TWlk
ZGxlU25hcHNob3QsIHNuYXBzaG90c1tudW1TbmFwc2hvdHMgLSAxXSkgPiBtYXhEaWZmZXJlbmNl
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBhdXRvIHNuYXBzaG90c1RvQXZlcmFnZSA9IHNuYXBzaG90czsKLSAgICBh
dXRvIHZhbGlkU25hcHNob3RDb3VudCA9IG51bVNuYXBzaG90czsKLSAgICBpZiAoIW5vbk1hdGNo
aW5nQ29sb3JJbmRleCkgewotICAgICAgICAvLyBTa2lwIHRoZSBmaXJzdCBzbmFwc2hvdCBieSBt
b3ZpbmcgdGhlIHBvaW50ZXIgdGhhdCBpbmRpY2F0ZXMgd2hlcmUgdGhlIHNuYXBzaG90IGFycmF5
Ci0gICAgICAgIC8vIHN0YXJ0cyBhbmQgZGVjcmVhc2luZyB0aGUgY291bnQgb2Ygc25hcHNob3Rz
IHRvIGF2ZXJhZ2UuCi0gICAgICAgICsrc25hcHNob3RzVG9BdmVyYWdlOwotICAgICAgICAtLXZh
bGlkU25hcHNob3RDb3VudDsKLSAgICB9IGVsc2UgaWYgKG5vbk1hdGNoaW5nQ29sb3JJbmRleCA9
PSBudW1TbmFwc2hvdHMgLSAxKSB7Ci0gICAgICAgIC8vIFNraXAgdGhlIGxhc3Qgc25hcHNob3Qg
YnkgZGVjcmVhc2luZyB0aGUgY291bnQgb2Ygc25hcHNob3RzIHRvIGF2ZXJhZ2UuCi0gICAgICAg
IC0tdmFsaWRTbmFwc2hvdENvdW50OwotICAgIH0KLSAgICBtX3NhbXBsZWRQYWdlVG9wQ29sb3Ig
PSBhdmVyYWdlQ29sb3Ioc25hcHNob3RzVG9BdmVyYWdlLCB2YWxpZFNuYXBzaG90Q291bnQpOwot
fQotCiAjaWYgRU5BQkxFKERBUktfTU9ERV9DU1MpCiBzdGF0aWMgdm9pZCBwcm9jZXNzQ29sb3JT
Y2hlbWVTdHJpbmcoU3RyaW5nVmlldyBjb2xvclNjaGVtZSwgY29uc3QgV1RGOjpGdW5jdGlvbjx2
b2lkKFN0cmluZ1ZpZXcga2V5KT4mIGNhbGxiYWNrKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRl
eCA0YTBmZGQ1MjAwYTYwZjQ1ODkzNGM0ZTQ0NTA0YjgwYjc1NDIyY2MwLi5hM2RhYWExYzIyZDdk
MzkwYzRlNzFiZDdmMTY3NTkxNGFjODMxZDhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtNzQz
LDggKzc0Myw2IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IENvbG9yJiB0aGVtZUNvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9tZXRhRWxlbWVudFRoZW1lQ29sb3IuaXNWYWxpZCgpID8gbV9tZXRhRWxl
bWVudFRoZW1lQ29sb3IgOiBtX2FwcGxpY2F0aW9uTWFuaWZlc3RUaGVtZUNvbG9yOyB9CiAKLSAg
ICBjb25zdCBDb2xvciYgc2FtcGxlZFBhZ2VUb3BDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Ft
cGxlZFBhZ2VUb3BDb2xvcjsgfQotCiAgICAgdm9pZCBzZXRUZXh0Q29sb3IoY29uc3QgQ29sb3Im
IGNvbG9yKSB7IG1fdGV4dENvbG9yID0gY29sb3I7IH0KICAgICBjb25zdCBDb2xvciYgdGV4dENv
bG9yKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Q29sb3I7IH0KIApAQCAtMTY3NCw4ICsxNjcyLDYg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdGhlbWVDb2xvckNoYW5nZWQoKTsKIAotICAgIHZvaWQg
ZGV0ZXJtaW5lU2FtcGxlZFBhZ2VUb3BDb2xvcigpOwotCiAgICAgdm9pZCBpbnZhbGlkYXRlQWNj
ZXNzS2V5Q2FjaGVTbG93Q2FzZSgpOwogICAgIHZvaWQgYnVpbGRBY2Nlc3NLZXlDYWNoZSgpOwog
CkBAIC0xNzk3LDggKzE3OTMsNiBAQCBwcml2YXRlOgogICAgIENvbG9yIG1fbWV0YUVsZW1lbnRU
aGVtZUNvbG9yOwogICAgIENvbG9yIG1fYXBwbGljYXRpb25NYW5pZmVzdFRoZW1lQ29sb3I7CiAK
LSAgICBDb2xvciBtX3NhbXBsZWRQYWdlVG9wQ29sb3I7Ci0KICAgICBDb2xvciBtX3RleHRDb2xv
ciB7IENvbG9yOjpibGFjayB9OwogICAgIENvbG9yIG1fbGlua0NvbG9yOwogICAgIENvbG9yIG1f
dmlzaXRlZExpbmtDb2xvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCA5NzI0ZGFl
Y2VjMmFhMTY5OWE0Y2I4OTdkMzQ2NWViNzc3NzliYzRjLi42NTgzYzM2OWZkYTFjMDZkOTQzNzVj
Y2RjMjNmYzhiNzIyMzBiZjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC00NjE3
LDcgKzQ2MTcsNyBAQCB2b2lkIEZyYW1lVmlldzo6Y2hlY2tBbmREaXNwYXRjaERpZFJlYWNoVmlz
dWFsbHlOb25FbXB0eVN0YXRlKCkKICAgICAgICAgZnJhbWUoKS5sb2FkZXIoKS5kaWRSZWFjaFZp
c3VhbGx5Tm9uRW1wdHlTdGF0ZSgpOwogfQogCi1ib29sIEZyYW1lVmlldzo6aGFzQ29udGVuZnVs
RGVzY2VuZGFudHMoKSBjb25zdAorYm9vbCBGcmFtZVZpZXc6Omhhc0NvbnRlbnRmdWxEZXNjZW5k
YW50cygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fdmlzdWFsbHlOb25FbXB0eUNoYXJhY3RlckNv
dW50IHx8IG1fdmlzdWFsbHlOb25FbXB0eVBpeGVsQ291bnQ7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuaAppbmRleCBmNGE2MDc4ZTkyNjdhYzQzZmE0MzFmNWY5ZWM4NjdlOTkyMTJlMDU2Li45ZWQx
YzcyM2U5OWMyYTJjYTYxOWNjODg1ZWUyYWNhNTY2NmY5YTBmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmgKQEAgLTQxMyw3ICs0MTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbmNyZW1lbnRWaXN1
YWxseU5vbkVtcHR5Q2hhcmFjdGVyQ291bnQoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBpbmNy
ZW1lbnRWaXN1YWxseU5vbkVtcHR5UGl4ZWxDb3VudChjb25zdCBJbnRTaXplJik7CiAgICAgYm9v
bCBpc1Zpc3VhbGx5Tm9uRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRRdWFsaWZpZXNB
c1Zpc3VhbGx5Tm9uRW1wdHk7IH0KLSAgICBib29sIGhhc0NvbnRlbmZ1bERlc2NlbmRhbnRzKCkg
Y29uc3Q7CisgICAgYm9vbCBoYXNDb250ZW50ZnVsRGVzY2VuZGFudHMoKSBjb25zdDsKICAgICB2
b2lkIGNoZWNrQW5kRGlzcGF0Y2hEaWRSZWFjaFZpc3VhbGx5Tm9uRW1wdHlTdGF0ZSgpOwogCiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbmFibGVGaXhlZFdpZHRoQXV0b1NpemVNb2RlKGJvb2wg
ZW5hYmxlLCBjb25zdCBJbnRTaXplJiBtaW5TaXplKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDUz
NGEyNmU0MDExZjNhODExNjIzOGUwYzEyZjFkNGFhZDI5ODUyNWIuLmM4ZGZkODczOTg3ZmE4NzUz
MTg4NGZkNGQ2NzdkMjg1OTQyMWU3MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtMzUsNiArMzUs
NyBAQAogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2lu
Y2x1ZGUgIkNvbnN0YW50UHJvcGVydHlNYXAuaCIKKyNpbmNsdWRlICJDb250ZW50ZnVsUGFpbnRD
aGVja2VyLmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJDb250
ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIKQEAgLTYzLDIxICs2
NCwyOSBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJD
bGllbnQuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgorI2luY2x1ZGUgIkZyYW1lU25h
cHNob3R0aW5nLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCiAjaW5jbHVkZSAiRnVsbHNjcmVlbk1hbmFnZXIuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEltYWdl
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
VGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIaXN0b3J5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkhpc3RvcnlJdGVt
LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0
LmgiCiAjaW5jbHVkZSAiSURCQ29ubmVjdGlvblRvU2VydmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKICNpbmNsdWRlICJJbWFnZU92ZXJsYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIkludFBvaW50Lmgi
CisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJM
YXlvdXREaXNhbGxvd2VkU2NvcGUuaCIKICNpbmNsdWRlICJMZWdhY3lTY2hlbWVSZWdpc3RyeS5o
IgogI2luY2x1ZGUgIkxpYldlYlJUQ1Byb3ZpZGVyLmgiCkBAIC0xMDcsNyArMTE2LDkgQEAKICNp
bmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUg
IlJlbmRlckRlc2NlbmRhbnRJdGVyYXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUu
aCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNp
bmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKQEAgLTE2NzIsNiArMTY4Myw4IEBAIHZvaWQgUGFnZTo6
ZG9BZnRlclVwZGF0ZVJlbmRlcmluZygpCiAgICAgICAgIEFTU0VSVCghZnJhbWVWaWV3IHx8ICFm
cmFtZVZpZXctPm5lZWRzTGF5b3V0KCkpOwogICAgIH0KICNlbmRpZgorCisgICAgZGV0ZXJtaW5l
U2FtcGxlZFBhZ2VUb3BDb2xvcklmTmVlZGVkKCk7CiB9CiAKIHZvaWQgUGFnZTo6ZmluYWxpemVS
ZW5kZXJpbmdVcGRhdGUoT3B0aW9uU2V0PEZpbmFsaXplUmVuZGVyaW5nVXBkYXRlRmxhZ3M+IGZs
YWdzKQpAQCAtMjU1NiwxMSArMjU2OSwyMDkgQEAgQ29sb3IgUGFnZTo6cGFnZUV4dGVuZGVkQmFj
a2dyb3VuZENvbG9yKCkgY29uc3QKIAogQ29sb3IgUGFnZTo6c2FtcGxlZFBhZ2VUb3BDb2xvcigp
IGNvbnN0CiB7Ci0gICAgYXV0byogZG9jdW1lbnQgPSBtYWluRnJhbWUoKS5kb2N1bWVudCgpOwot
ICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIG1fc2Ft
cGxlZFBhZ2VUb3BDb2xvci52YWx1ZU9yKENvbG9yKCkpOworfQogCi0gICAgcmV0dXJuIGRvY3Vt
ZW50LT5zYW1wbGVkUGFnZVRvcENvbG9yKCk7CitzdGF0aWMgYm9vbCBpc1ZhbGlkUGFnZVNhbXBs
ZUxvY2F0aW9uKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgSW50UG9pbnQmIGxvY2F0aW9uKQor
eworICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjI1MTY3PiAoU2FtcGxlZCBQ
YWdlIFRvcCBDb2xvcjogaG9vayBpbnRvIHBhaW50aW5nIGxvZ2ljIGluc3RlYWQgb2YgdGFraW5n
IHNuYXBzaG90cykKKworICAgIGNvbnN0ZXhwciBPcHRpb25TZXQ8SGl0VGVzdFJlcXVlc3Q6OlJl
cXVlc3RUeXBlPiBoaXRUZXN0UmVxdWVzdFR5cGVzIHsgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5
LCBIaXRUZXN0UmVxdWVzdDo6SWdub3JlQ1NTUG9pbnRlckV2ZW50c1Byb3BlcnR5LCBIaXRUZXN0
UmVxdWVzdDo6RGlzYWxsb3dVc2VyQWdlbnRTaGFkb3dDb250ZW50LCBIaXRUZXN0UmVxdWVzdDo6
Q29sbGVjdE11bHRpcGxlRWxlbWVudHMsIEhpdFRlc3RSZXF1ZXN0OjpJbmNsdWRlQWxsRWxlbWVu
dHNVbmRlclBvaW50IH07CisgICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0KGxvY2F0aW9u
KTsKKyAgICBkb2N1bWVudC5oaXRUZXN0KGhpdFRlc3RSZXF1ZXN0VHlwZXMsIGhpdFRlc3RSZXN1
bHQpOworCisgICAgZm9yIChhdXRvJiBoaXRUZXN0Tm9kZSA6IGhpdFRlc3RSZXN1bHQubGlzdEJh
c2VkVGVzdFJlc3VsdCgpKSB7CisgICAgICAgIGF1dG8mIG5vZGUgPSBoaXRUZXN0Tm9kZS5nZXQo
KTsKKworICAgICAgICBhdXRvKiByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKTsKKyAgICAgICAg
aWYgKCFyZW5kZXJlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBT
a2lwIGltYWdlcyAoYm90aCBgPGltZz5gIGFuZCBDU1MgYGJhY2tncm91bmQtaW1hZ2VgKSBhcyB0
aGV5J3JlIGxpa2VseSBub3QgYSBzb2xpZCBjb2xvci4KKyAgICAgICAgaWYgKGlzPFJlbmRlcklt
YWdlPihyZW5kZXJlcikgfHwgcmVuZGVyZXItPnN0eWxlKCkuaGFzQmFja2dyb3VuZEltYWdlKCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gU2tpcCBub2RlcyB3aXRo
IGFuaW1hdGlvbnMgYXMgdGhlIHNhbXBsZSBtYXkgZ2V0IGFuIG9kZCBjb2xvciBpZiB0aGUgYW5p
bWF0aW9uIGlzIGluLXByb2dyZXNzLgorICAgICAgICBpZiAocmVuZGVyZXItPnN0eWxlKCkuaGFz
VHJhbnNpdGlvbnMoKSB8fCByZW5kZXJlci0+c3R5bGUoKS5oYXNBbmltYXRpb25zKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gU2tpcCBgPGNhbnZhcz5gIGJ1dCBv
bmx5IGlmIHRoZXkndmUgYmVlbiBkcmF3biBpbnRvLiBHdWVzcyB0aGlzIGJ5IHNlZWluZyBpZiB0
aGVyZSdzIGFscmVhZHkKKyAgICAgICAgLy8gYSBgQ2FudmFzUmVuZGVyaW5nQ29udGV4dGAsIHdo
aWNoIGlzIG9ubHkgY3JlYXRlZCBieSBKYXZhU2NyaXB0LgorICAgICAgICBpZiAoaXM8SFRNTENh
bnZhc0VsZW1lbnQ+KG5vZGUpICYmIGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50Pihub2RlKS5y
ZW5kZXJpbmdDb250ZXh0KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
Ly8gU2tpcCAzcmQtcGFydHkgYDxpZnJhbWU+YCBhcyB0aGUgY29udGVudCBsaWtlbHkgd29uJ3Qg
bWF0Y2ggdGhlIHJlc3Qgb2YgdGhlIHBhZ2UuCisgICAgICAgIGlmIChpczxIVE1MSUZyYW1lRWxl
bWVudD4obm9kZSkgJiYgIWFyZVJlZ2lzdHJhYmxlRG9tYWluc0VxdWFsKGRvd25jYXN0PEhUTUxJ
RnJhbWVFbGVtZW50Pihub2RlKS5sb2NhdGlvbigpLCBkb2N1bWVudC51cmwoKSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRp
YyBPcHRpb25hbDxMYWI8ZmxvYXQ+PiBzYW1wbGVQYWdlQ29sb3IoRG9jdW1lbnQmIGRvY3VtZW50
LCBJbnRQb2ludCYmIGxvY2F0aW9uKQoreworICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQu
b3JnL2IvMjI1MTY3PiAoU2FtcGxlZCBQYWdlIFRvcCBDb2xvcjogaG9vayBpbnRvIHBhaW50aW5n
IGxvZ2ljIGluc3RlYWQgb2YgdGFraW5nIHNuYXBzaG90cykKKworICAgIGlmICghaXNWYWxpZFBh
Z2VTYW1wbGVMb2NhdGlvbihkb2N1bWVudCwgbG9jYXRpb24pKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworCisgICAgQVNTRVJUKGRvY3VtZW50LnZpZXcoKSk7CisgICAgYXV0byBzbmFw
c2hvdCA9IHNuYXBzaG90RnJhbWVSZWN0KGRvY3VtZW50LnZpZXcoKS0+ZnJhbWUoKSwgSW50UmVj
dChsb2NhdGlvbiwgSW50U2l6ZSgxLCAxKSksIFNuYXBzaG90T3B0aW9uc0V4Y2x1ZGVTZWxlY3Rp
b25IaWdobGlnaHRpbmcgfCBTbmFwc2hvdE9wdGlvbnNQYWludEV2ZXJ5dGhpbmdFeGNsdWRpbmdT
ZWxlY3Rpb24pOworICAgIGlmICghc25hcHNob3QpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisKKyAgICBhdXRvIHNuYXBzaG90RGF0YSA9IHNuYXBzaG90LT50b0JHUkFEYXRhKCk7Cisg
ICAgcmV0dXJuIGNvbnZlcnRDb2xvcjxMYWI8ZmxvYXQ+PihTUkdCQTx1aW50OF90PiB7IHNuYXBz
aG90RGF0YVsyXSwgc25hcHNob3REYXRhWzFdLCBzbmFwc2hvdERhdGFbMF0sIHNuYXBzaG90RGF0
YVszXSB9KTsKK30KKworc3RhdGljIGRvdWJsZSBjb2xvckRpZmZlcmVuY2UoTGFiPGZsb2F0PiYg
bGhzLCBMYWI8ZmxvYXQ+JiByaHMpCit7CisgICAgcmV0dXJuIHNxcnQocG93KHJocy5saWdodG5l
c3MgLSBsaHMubGlnaHRuZXNzLCAyKSArIHBvdyhyaHMuYSAtIGxocy5hLCAyKSArIHBvdyhyaHMu
YiAtIGxocy5iLCAyKSk7Cit9CisKK3N0YXRpYyBMYWI8ZmxvYXQ+IGF2ZXJhZ2VDb2xvcihMYWI8
ZmxvYXQ+IGNvbG9yc1tdLCBzaXplX3QgY291bnQpCit7CisgICAgZmxvYXQgdG90YWxMaWdodG5l
c3MgPSAwOworICAgIGZsb2F0IHRvdGFsQSA9IDA7CisgICAgZmxvYXQgdG90YWxCID0gMDsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgdG90YWxMaWdo
dG5lc3MgKz0gY29sb3JzW2ldLmxpZ2h0bmVzczsKKyAgICAgICAgdG90YWxBICs9IGNvbG9yc1tp
XS5hOworICAgICAgICB0b3RhbEIgKz0gY29sb3JzW2ldLmI7CisgICAgfQorICAgIHJldHVybiB7
CisgICAgICAgIHRvdGFsTGlnaHRuZXNzIC8gY291bnQsCisgICAgICAgIHRvdGFsQSAvIGNvdW50
LAorICAgICAgICB0b3RhbEIgLyBjb3VudCwKKyAgICAgICAgMSwKKyAgICB9OworfQorCit2b2lk
IFBhZ2U6OmRldGVybWluZVNhbXBsZWRQYWdlVG9wQ29sb3JJZk5lZWRlZCgpCit7CisgICAgaWYg
KG1fc2FtcGxlZFBhZ2VUb3BDb2xvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBtYXhE
aWZmZXJlbmNlID0gc2V0dGluZ3MoKS5zYW1wbGVkUGFnZVRvcENvbG9yTWF4RGlmZmVyZW5jZSgp
OworICAgIGlmIChtYXhEaWZmZXJlbmNlIDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIGF1
dG8qIG1haW5Eb2N1bWVudCA9IG1haW5GcmFtZSgpLmRvY3VtZW50KCk7CisgICAgaWYgKCFtYWlu
RG9jdW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIGZyYW1lVmlldyA9IG1haW5G
cmFtZSgpLnZpZXcoKTsKKyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gRG9uJ3QgdGFrZSBzbmFwc2hvdHMgaWYgdGhlIGxheWVyIHRyZWUgaXMgc3RpbGwgZnJv
emVuLgorICAgIGlmIChmcmFtZVZpZXctPm5lZWRzTGF5b3V0KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIERvbid0IGF0dGVtcHQgdG8gaGl0IHRlc3Qgb3Igc25hcHNob3QgaWYgd2UgZG9u
J3QgaGF2ZSBhbnkgY29udGVudCB5ZXQuCisgICAgaWYgKCFmcmFtZVZpZXctPmlzVmlzdWFsbHlO
b25FbXB0eSgpIHx8ICFmcmFtZVZpZXctPmhhc0NvbnRlbnRmdWxEZXNjZW5kYW50cygpIHx8ICFD
b250ZW50ZnVsUGFpbnRDaGVja2VyOjpxdWFsaWZpZXNGb3JDb250ZW50ZnVsUGFpbnQoKmZyYW1l
VmlldykpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFNldCB0aGlzIG5vdyB0byBwcmV2ZW50
IHRoaXMgbWV0aG9kIGZyb20gYmVpbmcgY2FsbGVkIGFnYWluIGZvciB0aGUgc2FtZSBtYWluIGRv
Y3VtZW50LgorICAgIG1fc2FtcGxlZFBhZ2VUb3BDb2xvciA9IENvbG9yKCk7CisKKyAgICBhdXRv
IG5vdGlmeVNhbXBsZWRQYWdlVG9wQ29sb3JDaGFuZ2VkT25TY29wZUV4aXQgPSBtYWtlU2NvcGVF
eGl0KFsmXSB7CisgICAgICAgIGNocm9tZSgpLmNsaWVudCgpLnNhbXBsZWRQYWdlVG9wQ29sb3JD
aGFuZ2VkKCk7CisgICAgfSk7CisKKyAgICAvLyBEZWNyZWFzZSB0aGUgd2lkdGggYnkgb25lIHBp
eGVsIHNvIHRoYXQgdGhlIGxhc3Qgc25hcHNob3QgaXMgd2l0aGluIGJvdW5kcyBhbmQgbm90IG9m
Zi1ieS1vbmUuCisgICAgYXV0byBmcmFtZVdpZHRoID0gZnJhbWVWaWV3LT5jb250ZW50c1dpZHRo
KCkgLSAxOworCisgICAgY29uc3RleHByIGF1dG8gbnVtU25hcHNob3RzID0gNTsKKyAgICBzaXpl
X3Qgbm9uTWF0Y2hpbmdDb2xvckluZGV4ID0gbnVtU25hcHNob3RzOworCisgICAgTGFiPGZsb2F0
PiBzbmFwc2hvdHNbbnVtU25hcHNob3RzXTsKKyAgICBkb3VibGUgZGlmZmVyZW5jZXNbbnVtU25h
cHNob3RzIC0gMV07CisKKyAgICBhdXRvIHNob3VsZFN0b3BBZnRlckZpbmRpbmdOb25NYXRjaGlu
Z0NvbG9yID0gWyZdIChzaXplX3QgaSkgLT4gYm9vbCB7CisgICAgICAgIC8vIEJhaWwgaWYgdGhl
IG5vbi1tYXRjaGluZyBjb2xvciBpcyBub3QgdGhlIGZpcnN0IG9yIGxhc3Qgc25hcHNob3QsIG9y
IHRoZXJlIGFscmVhZHkgaXMgYW4gbm9uLW1hdGNoaW5nIGNvbG9yLgorICAgICAgICBpZiAoKGkg
JiYgaSA8IG51bVNuYXBzaG90cyAtIDEpIHx8IG5vbk1hdGNoaW5nQ29sb3JJbmRleCAhPSBudW1T
bmFwc2hvdHMpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBub25NYXRjaGlu
Z0NvbG9ySW5kZXggPSBpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtU25hcHNob3RzOyArK2kpIHsKKyAgICAgICAgYXV0byBz
bmFwc2hvdCA9IHNhbXBsZVBhZ2VDb2xvcigqbWFpbkRvY3VtZW50LCBJbnRQb2ludChmcmFtZVdp
ZHRoICogaSAvIChudW1TbmFwc2hvdHMgLSAxKSwgMCkpOworICAgICAgICBpZiAoIXNuYXBzaG90
KSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkU3RvcEFmdGVyRmluZGluZ05vbk1hdGNoaW5nQ29s
b3IoaSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKworICAgICAgICBzbmFwc2hvdHNbaV0gPSAqc25hcHNob3Q7CisKKyAgICAgICAg
aWYgKGkpIHsKKyAgICAgICAgICAgIC8vIEVhY2ggYGRpZmZlcmVuY2VgIGl0ZW0gY29tcGFyZXMg
YGlgIHdpdGggYGkgLSAxYCBzbyBpZiB0aGUgZmlyc3QgY29tcGFyaXNvbiAoYGkgPT0gMWApCisg
ICAgICAgICAgICAvLyBpcyB0b28gbGFyZ2Ugb2YgYSBkaWZmZXJlbmNlLCB3ZSBzaG91bGQgdHJl
YXQgYGkgLSAxYCAoaS5lLiBgMGApIGFzIHRoZSBwcm9ibGVtIHNpbmNlCisgICAgICAgICAgICAv
LyB3ZSBvbmx5IGFsbG93IGZvciBub24tbWF0Y2hpbmcgY29sb3JzIGJlaW5nIHRoZSBmaXJzdCBv
ciBsYXN0IHNhbXBsZWQgY29sb3IuCisgICAgICAgICAgICBhdXRvIGVmZmVjdGl2ZU5vbk1hdGNo
aW5nQ29sb3JJbmRleCA9IGkgPT0gMSA/IDAgOiBpOworCisgICAgICAgICAgICBkaWZmZXJlbmNl
c1tpIC0gMV0gPSBjb2xvckRpZmZlcmVuY2Uoc25hcHNob3RzW2kgLSAxXSwgc25hcHNob3RzW2ld
KTsKKyAgICAgICAgICAgIGlmIChkaWZmZXJlbmNlc1tpIC0gMV0gPiBtYXhEaWZmZXJlbmNlKSB7
CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0b3BBZnRlckZpbmRpbmdOb25NYXRjaGluZ0Nv
bG9yKGVmZmVjdGl2ZU5vbk1hdGNoaW5nQ29sb3JJbmRleCkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgZG91YmxlIGN1bXVsdWF0aXZlRGlmZmVyZW5jZSA9IDA7CisgICAgICAgICAgICBm
b3IgKHNpemVfdCBqID0gMDsgaiA8IGk7ICsraikgeworICAgICAgICAgICAgICAgIGlmIChqID09
IG5vbk1hdGNoaW5nQ29sb3JJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgY3VtdWx1YXRpdmVEaWZmZXJlbmNlICs9IGRpZmZlcmVuY2VzW2pdOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGN1bXVsdWF0aXZlRGlmZmVyZW5jZSA+IG1h
eERpZmZlcmVuY2UpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3RvcEFmdGVyRmluZGlu
Z05vbk1hdGNoaW5nQ29sb3IoZWZmZWN0aXZlTm9uTWF0Y2hpbmdDb2xvckluZGV4KSkgeworICAg
ICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IGFscmVhZHkgaWRlbnRpZmllZCBhIG5v
bi1tYXRjaGluZyBzbmFwc2hvdCBhbmQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZmlyc3QK
KyAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHNlY29uZCBzbmFwc2hvdHMgb3IgdGhlIHNlY29u
ZC10by1sYXN0IGFuZCBsYXN0IHNuYXBzaG90cyBpcyBsZXNzIHRoYW4gdGhlIG1heGltdW0sIG1h
cmsKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGZpcnN0L2xhc3Qgc25hcHNob3QgYXMgbm9u
LW1hdGNoaW5nIHRvIGdpdmUgYSBjaGFuY2UgZm9yIHRoZSByZXN0IG9mIHRoZSBzbmFwc2hvdHMg
dG8gbWF0Y2guCisgICAgICAgICAgICAgICAgICAgIGlmIChub25NYXRjaGluZ0NvbG9ySW5kZXgg
PT0gbnVtU25hcHNob3RzICYmICghaSB8fCBpID09IG51bVNuYXBzaG90cyAtIDEpICYmIGN1bXVs
dWF0aXZlRGlmZmVyZW5jZSAtIGRpZmZlcmVuY2VzW2kgLSAxXSA8PSBtYXhEaWZmZXJlbmNlKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBub25NYXRjaGluZ0NvbG9ySW5kZXggPSBlZmZlY3Rp
dmVOb25NYXRjaGluZ0NvbG9ySW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gRGVjcmVhc2UgdGhlIGhlaWdodCBieSBvbmUg
cGl4ZWwgc28gdGhhdCB0aGUgbGFzdCBzbmFwc2hvdCBpcyB3aXRoaW4gYm91bmRzIGFuZCBub3Qg
b2ZmLWJ5LW9uZS4KKyAgICBhdXRvIG1pbkhlaWdodCA9IHNldHRpbmdzKCkuc2FtcGxlZFBhZ2VU
b3BDb2xvck1pbkhlaWdodCgpIC0gMTsKKyAgICBpZiAobWluSGVpZ2h0ID4gMCkgeworICAgICAg
ICBpZiAobm9uTWF0Y2hpbmdDb2xvckluZGV4KSB7CisgICAgICAgICAgICBpZiAoYXV0byBsZWZ0
TWlkZGxlU25hcHNob3QgPSBzYW1wbGVQYWdlQ29sb3IoKm1haW5Eb2N1bWVudCwgSW50UG9pbnQo
MCwgbWluSGVpZ2h0KSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29sb3JEaWZmZXJlbmNlKCps
ZWZ0TWlkZGxlU25hcHNob3QsIHNuYXBzaG90c1swXSkgPiBtYXhEaWZmZXJlbmNlKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobm9uTWF0Y2hpbmdDb2xvckluZGV4ICE9IG51bVNuYXBzaG90cyAtIDEpIHsKKyAgICAg
ICAgICAgIGlmIChhdXRvIHJpZ2h0TWlkZGxlU25hcHNob3QgPSBzYW1wbGVQYWdlQ29sb3IoKm1h
aW5Eb2N1bWVudCwgSW50UG9pbnQoZnJhbWVXaWR0aCwgbWluSGVpZ2h0KSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoY29sb3JEaWZmZXJlbmNlKCpyaWdodE1pZGRsZVNuYXBzaG90LCBzbmFwc2hv
dHNbbnVtU25hcHNob3RzIC0gMV0pID4gbWF4RGlmZmVyZW5jZSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgYXV0byBz
bmFwc2hvdHNUb0F2ZXJhZ2UgPSBzbmFwc2hvdHM7CisgICAgYXV0byB2YWxpZFNuYXBzaG90Q291
bnQgPSBudW1TbmFwc2hvdHM7CisgICAgaWYgKCFub25NYXRjaGluZ0NvbG9ySW5kZXgpIHsKKyAg
ICAgICAgLy8gU2tpcCB0aGUgZmlyc3Qgc25hcHNob3QgYnkgbW92aW5nIHRoZSBwb2ludGVyIHRo
YXQgaW5kaWNhdGVzIHdoZXJlIHRoZSBzbmFwc2hvdCBhcnJheQorICAgICAgICAvLyBzdGFydHMg
YW5kIGRlY3JlYXNpbmcgdGhlIGNvdW50IG9mIHNuYXBzaG90cyB0byBhdmVyYWdlLgorICAgICAg
ICArK3NuYXBzaG90c1RvQXZlcmFnZTsKKyAgICAgICAgLS12YWxpZFNuYXBzaG90Q291bnQ7Cisg
ICAgfSBlbHNlIGlmIChub25NYXRjaGluZ0NvbG9ySW5kZXggPT0gbnVtU25hcHNob3RzIC0gMSkg
eworICAgICAgICAvLyBTa2lwIHRoZSBsYXN0IHNuYXBzaG90IGJ5IGRlY3JlYXNpbmcgdGhlIGNv
dW50IG9mIHNuYXBzaG90cyB0byBhdmVyYWdlLgorICAgICAgICAtLXZhbGlkU25hcHNob3RDb3Vu
dDsKKyAgICB9CisgICAgbV9zYW1wbGVkUGFnZVRvcENvbG9yID0gQ29sb3IoYXZlcmFnZUNvbG9y
KHNuYXBzaG90c1RvQXZlcmFnZSwgdmFsaWRTbmFwc2hvdENvdW50KSk7CiB9CiAKIC8vIFRoZXNl
IGFyZSBtYWdpY2FsIGNvbnN0YW50cyB0aGF0IG1pZ2h0IGJlIHR3ZWFrZWQgb3ZlciB0aW1lLgpA
QCAtMzI2Niw2ICszNDc3LDggQEAgdm9pZCBQYWdlOjpkaWRDaGFuZ2VNYWluRG9jdW1lbnQoKQog
ICAgIG1fcnRjQ29udHJvbGxlci5yZXNldChtX3Nob3VsZEVuYWJsZUlDRUNhbmRpZGF0ZUZpbHRl
cmluZ0J5RGVmYXVsdCk7CiAjZW5kaWYKICAgICBtX3BvaW50ZXJDYXB0dXJlQ29udHJvbGxlci0+
cmVzZXQoKTsKKworICAgIG1fc2FtcGxlZFBhZ2VUb3BDb2xvciA9IFdURjo6bnVsbG9wdDsKIH0K
IAogUmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyJiBQYWdlOjpyZW5kZXJpbmdVcGRhdGVTY2hlZHVs
ZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuaAppbmRleCA2ZGQwN2UxYmE5MWYzMTRkYTYwZTJhZjNjNzQwOWNhNTM4
MmVkZTUxLi5mYmQ2MGU3M2RmNzM0YmI5YWM0OWU2NzE2ZmQxMDVlNWE3MWU2MDQ3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2UuaApAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSAiQWN0aXZpdHlTdGF0ZS5oIgog
I2luY2x1ZGUgIkFuaW1hdGlvbkZyYW1lUmF0ZS5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5j
bHVkZSAiRGlzYWJsZWRBZGFwdGF0aW9ucy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRmluZE9wdGlvbnMuaCIKQEAgLTk0LDcgKzk1LDYgQEAgY2xhc3MgQXV0aGVudGljYXRv
ckNvb3JkaW5hdG9yOwogY2xhc3MgQmFja0ZvcndhcmRDb250cm9sbGVyOwogY2xhc3MgQ2FjaGVT
dG9yYWdlUHJvdmlkZXI7CiBjbGFzcyBDaHJvbWU7Ci1jbGFzcyBDb2xvcjsKIGNsYXNzIENvbnRl
eHRNZW51Q29udHJvbGxlcjsKIGNsYXNzIENvb2tpZUphcjsKIGNsYXNzIERPTVJlY3RMaXN0OwpA
QCAtODg5LDYgKzg4OSw4IEBAIHByaXZhdGU6CiAKICAgICBSZW5kZXJpbmdVcGRhdGVTY2hlZHVs
ZXImIHJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlcigpOwogCisgICAgdm9pZCBkZXRlcm1pbmVTYW1w
bGVkUGFnZVRvcENvbG9ySWZOZWVkZWQoKTsKKwogICAgIFdoZWVsRXZlbnRUZXN0TW9uaXRvciYg
ZW5zdXJlV2hlZWxFdmVudFRlc3RNb25pdG9yKCk7CiAKICAgICBjb25zdCBzdGQ6OnVuaXF1ZV9w
dHI8Q2hyb21lPiBtX2Nocm9tZTsKQEAgLTExNTIsNiArMTE1NCw4IEBAIHByaXZhdGU6CiAKICAg
ICBNb25vdG9uaWNUaW1lIG1fbGFzdFJlbmRlcmluZ1VwZGF0ZVRpbWVzdGFtcDsKIAorICAgIE9w
dGlvbmFsPENvbG9yPiBtX3NhbXBsZWRQYWdlVG9wQ29sb3I7CisKICAgICBjb25zdCBib29sIG1f
aHR0cHNVcGdyYWRlRW5hYmxlZCB7IHRydWUgfTsKICAgICBtdXRhYmxlIE1lZGlhU2Vzc2lvbkdy
b3VwSWRlbnRpZmllciBtX21lZGlhU2Vzc2lvbkdyb3VwSWRlbnRpZmllcjsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428591</attachid>
            <date>2021-05-13 18:25:02 -0700</date>
            <delta_ts>2021-05-14 16:40:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225480-20210513192501.patch</filename>
            <type>text/plain</type>
            <size>38754</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmNjBlMzQ0ZWFiY2M1ZmMzZTAyMDcyZDU1ODM1YTRhMWM2MTY3NTBhLi4y
MDUyMzY3MjNmYTcwYTMyM2Q1NmVjZWU0MWRmMTg3MDBkOTNlNDI4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNTMgQEAKKzIwMjEtMDUtMTMgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29t
PgorCisgICAgICAgIFNhbXBsZWQgUGFnZSBUb3AgQ29sb3I6IG1vdmUgbG9naWMgb3V0IG9mIGBE
b2N1bWVudGAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyNTQ4MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzc5ODQ1Mzk+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSGF2aW5nIGBkZXRlcm1pbmVTYW1w
bGVkUGFnZVRvcENvbG9yYCBiZSBjYWxsZWQgaW4gYGVucXVldWVQYWludFRpbWluZ0VudHJ5SWZO
ZWVkZWRgIGFzIHdoYXQKKyAgICAgICAgaXMgYmFzaWNhbGx5IGEgc2lkZSBlZmZlY3QgaXMgbm90
IGdyZWF0LiBUaGUgb25seSByZWFzb24gaXQgd2FzIHRoZXJlIGluIHRoZSBmaXJzdCBwbGFjZSB3
YXMKKyAgICAgICAgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGxvZ2ljIHRoYXQgZGVjaWRlZCAi
aXMgdGhpcyB0aGUgZmlyc3QgY29udGVudGZ1bCBwYWludCIsIGJ1dCB0aGF0CisgICAgICAgIGxv
Z2ljIGNhbiBiZSByZXBsaWNhdGVkIGVsc2V3aGVyZS4gU2luY2UgdGhlIHNhbXBsZWQgcGFnZSB0
b3AgY29sb3IgZGVhbHMgbW9yZSB3aXRoIHRoZSBwYWdlCisgICAgICAgIGFzIGEgd2hvbGUgaW5z
dGVhZCBvZiBhbiBpbmRpdmlkdWFsIGBEb2N1bWVudGAgKHdoaWNoIGluY2x1ZGVzIHN1YmZyYW1l
cyksIGl0IG1ha2VzIG1vcmUKKyAgICAgICAgc2Vuc2UgdG8gaGF2ZSB0aGlzIGxvZ2ljIGJlIG9u
IGEgdXRpbGl0eSBgUGFnZUNvbG9yU2FtcGxlcmAgdGhhdCdzIHVzZWQgaW4gYFBhZ2VgIGluc3Rl
YWQuCisKKyAgICAgICAgVGVzdDogU2FtcGxlZFBhZ2VUb3BDb2xvci5NYWluRG9jdW1lbnRDaGFu
Z2UKKworICAgICAgICAqIHBhZ2UvUGFnZUNvbG9yU2FtcGxlci5oOiBBZGRlZC4KKyAgICAgICAg
KiBwYWdlL1BhZ2VDb2xvclNhbXBsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omlz
VmFsaWRTYW1wbGVMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzYW1wbGVDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpjb2xvckRpZmZlcmVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6YXZl
cmFnZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb2xvclNhbXBsZXI6OnNhbXBsZVRv
cCk6CisgICAgICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2U6OmRvQWZ0ZXJVcGRhdGVSZW5kZXJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZTo6c2FtcGxlZFBhZ2VUb3BDb2xvciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlOjpkaWRDaGFuZ2VNYWluRG9jdW1lbnQpOgorCisgICAgICAgICogZG9tL0RvY3Vt
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2FtcGxlZFBhZ2VUb3BDb2xvciBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjplbnF1ZXVlUGFpbnRUaW1pbmdFbnRyeUlmTmVlZGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OmlzVmFsaWRQYWdlU2FtcGxlTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6c2FtcGxlUGFnZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmNvbG9yRGlmZmVyZW5jZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphdmVyYWdlQ29s
b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmRldGVybWluZVNhbXBs
ZWRQYWdlVG9wQ29sb3IpOiBEZWxldGVkLgorCisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuaDoK
KyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZp
ZXc6Omhhc0NvbnRlbnRmdWxEZXNjZW5kYW50cyBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVWaWV3OjpoYXNDb250ZW5mdWxEZXNjZW5kYW50cyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIERyaXZlLWJ5OiBGaXggaW5jb3JyZWN0IHNwZWxsaW5nLgorCisgICAgICAgICog
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisKIDIwMjEtMDUtMTMgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBw
bGUuY29tPgogCiAgICAgICAgIFtpT1NdIFJFR1JFU1NJT04ocjI3MTIxNikgcG9pbnRlcmV2ZW50
cy9pb3MvcG9pbnRlci1ldmVudHMtbm8tbW91c2Vkb3duLXdoZW4tcHJldmVudC1kZWZhdWx0LWNh
bGxlZC1vbi1wb2ludGVyZG93bi5odG1sIGlzIGNvbnNpc3RlbnRseSBmYWlsaW5nCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVy
cy5jbWFrZQppbmRleCBkZGExZjdjZDU1MmNiZGI3YzNkMmEzN2JmODIxZWUzNDg0NTZlYjllLi5i
ZTZlYWM5ZTkwOWVkYWI0MGE5ZmJhYmM2YmFlYjc4MTg5MDg0YzU0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21h
a2UKQEAgLTkwNiw2ICs5MDYsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFE
RVJTCiAgICAgcGFnZS9OYXZpZ2F0b3JJc0xvZ2dlZEluLmgKICAgICBwYWdlL1BERkltYWdlQ2Fj
aGluZ1BvbGljeS5oCiAgICAgcGFnZS9QYWdlLmgKKyAgICBwYWdlL1BhZ2VDb2xvclNhbXBsZXIu
aAogICAgIHBhZ2UvUGFnZUNvbmZpZ3VyYXRpb24uaAogICAgIHBhZ2UvUGFnZUNvbnNvbGVDbGll
bnQuaAogICAgIHBhZ2UvUGFnZUdyb3VwLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggMjdmMjk5YjZiZTIx
NDBiODU4MmVlNzNmNDczM2VkYzg0MTJkOTI4NC4uMDY1ZjY2Yjg4NDFiN2Y4OWRkYWUwM2Q2YTc0
NDc1MGU4MGYzZGU1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE3MjAsNiArMTcyMCw3IEBAIHBhZ2Uv
TmF2aWdhdG9yQmFzZS5jcHAKIHBhZ2UvTmF2aWdhdG9ySXNMb2dnZWRJbi5jcHAKIHBhZ2UvT3Jp
Z2luQWNjZXNzRW50cnkuY3BwCiBwYWdlL1BhZ2UuY3BwCitwYWdlL1BhZ2VDb2xvclNhbXBsZXIu
Y3BwCiBwYWdlL1BhZ2VDb25maWd1cmF0aW9uLmNwcAogcGFnZS9QYWdlQ29uc29sZUNsaWVudC5j
cHAKIHBhZ2UvUGFnZURlYnVnZ2FibGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYWY4MjI0OTA5YmZkNDYwYWZlZWJjNGQw
MmQ4YTU0NGE2ZmVjYzExZC4uN2ExZmVmZjg2NThkY2FkNjZmZjA1OWEwN2ZiZThlODc3MWYzNzg1
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMjk4OSw2ICsyOTg5LDcgQEAKIAkJOTVBMUUyRTkyNUNDNzVBOTAwMjY4QzhFIC8q
IE1lZGlhQ29udHJvbHNDb250ZXh0TWVudUl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk1QTFFMkU3MjVDQzc1QTgwMDI2OEM4RSAvKiBNZWRpYUNv
bnRyb2xzQ29udGV4dE1lbnVJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJOTVBQTU3MTAyNUVFRUQzMjAwNEU5MjgzIC8qIEluc3BlY3RvckNh
bnZhc0NhbGxUcmFjZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDk1QUE1NzBFMjVFRUVEMzEwMDRFOTI4MyAvKiBJbnNwZWN0b3JDYW52YXNDYWxsVHJh
Y2VyLmggKi87IH07CiAJCTk1REY5RDI1MjUyQkVEQjIwMDBEN0Y0NiAvKiBQb2ludGVyQ2hhcmFj
dGVyaXN0aWNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5NURGOUQyMzI1MkJFRDk5MDAwRDdGNDYgLyogUG9pbnRlckNoYXJhY3RlcmlzdGljcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTk1RjQ1RDI3
MjY0REZCRjEwMEQwQjhCOCAvKiBQYWdlQ29sb3JTYW1wbGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NUY0NUQyNjI2NERGQkVCMDBEMEI4QjggLyog
UGFnZUNvbG9yU2FtcGxlci5oICovOyB9OwogCQk5NzA1OTk3QTEwN0Q5NzUyMDBBNTBBN0MgLyog
UG9saWN5Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTcwNTk5NzYxMDdEOTc1MjAwQTUwQTdDIC8qIFBvbGljeUNoZWNrZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5NzBCNzI4QTE0NEZG
QUM2MDBGMDBBMzcgLyogRXZlbnRJbnRlcmZhY2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzBCNzI4OTE0NEZGQUM2MDBGMDBBMzcgLyogRXZlbnRJ
bnRlcmZhY2VzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJOTcwQjcyQTYxNDUwMDhFQjAwRjAwQTM3IC8qIEV2ZW50SGVhZGVycy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcwQjcyQTUxNDUwMDhFQjAw
RjAwQTM3IC8qIEV2ZW50SGVhZGVycy5oICovOyB9OwpAQCAtMTE5NDEsNiArMTE5NDIsOCBAQAog
CQk5NUFBNTcwRDI1RUVFRDMwMDA0RTkyODMgLyogSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JDYW52YXND
YWxsVHJhY2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTVBQTU3MEUyNUVF
RUQzMTAwNEU5MjgzIC8qIEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5NURGOUQyMzI1MkJFRDk5MDAwRDdGNDYgLyogUG9pbnRl
ckNoYXJhY3RlcmlzdGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2ludGVyQ2hhcmFjdGVyaXN0aWNz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk1RjQ1RDI0MjY0REZCRUIwMEQwQjhC
OCAvKiBQYWdlQ29sb3JTYW1wbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VDb2xvclNh
bXBsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NUY0NUQyNjI2NERGQkVC
MDBEMEI4QjggLyogUGFnZUNvbG9yU2FtcGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlQ29sb3JT
YW1wbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MDU5OTc1MTA3RDk3NTIw
MEE1MEE3QyAvKiBQb2xpY3lDaGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFBvbGljeUNoZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5NzA1OTk3NjEwN0Q5NzUyMDBBNTBBN0MgLyogUG9saWN5Q2hlY2tlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQb2xpY3lDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk3MEI3Mjg5MTQ0RkZBQzYwMEYwMEEzNyAvKiBFdmVudEludGVyZmFjZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRXZlbnRJbnRlcmZhY2VzLmg7IHBh
dGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0V2ZW50SW50ZXJmYWNlcy5oOyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtMjI0MDYsNiArMjI0MDksOCBAQAogCQkJCTAw
MTQ2Mjg5MTAzQ0QxREUwMDBCMjBEQiAvKiBPcmlnaW5BY2Nlc3NFbnRyeS5oICovLAogCQkJCTY1
RkVBODY4MDk4MzNBREUwMEJFRDRBQiAvKiBQYWdlLmNwcCAqLywKIAkJCQk2NUEyMTQ2NzA5N0Ez
MjkxMDBCOTA1MEEgLyogUGFnZS5oICovLAorCQkJCTk1RjQ1RDI0MjY0REZCRUIwMEQwQjhCOCAv
KiBQYWdlQ29sb3JTYW1wbGVyLmNwcCAqLywKKwkJCQk5NUY0NUQyNjI2NERGQkVCMDBEMEI4Qjgg
LyogUGFnZUNvbG9yU2FtcGxlci5oICovLAogCQkJCUNENUU1QjYwMUExNUYxNTYwMDBDNjA5RSAv
KiBQYWdlQ29uZmlndXJhdGlvbi5jcHAgKi8sCiAJCQkJQ0Q1RTVCNUUxQTE1Q0U1NDAwMEM2MDlF
IC8qIFBhZ2VDb25maWd1cmF0aW9uLmggKi8sCiAJCQkJREFBQ0IzRDkxNkYyNDE2NDAwNjY2MTM1
IC8qIFBhZ2VDb25zb2xlQ2xpZW50LmNwcCAqLywKQEAgLTM0MzYzLDYgKzM0MzY4LDcgQEAKIAkJ
CQk4MzI2QkY4RTI0RDM1QzMzMDAxRjhBODUgLyogT3ZlclNhbXBsZVR5cGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTY1QTIxNDY4MDk3QTMyOTEwMEI5MDUwQSAvKiBQYWdlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5MTI3OEQ1RTIxREVEQUQ2MDBCNTcxODQgLyogUGFnZUF1ZGl0QWdlbnQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTk1RjQ1RDI3MjY0REZCRjEwMEQwQjhCOCAvKiBQYWdlQ29sb3JTYW1w
bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDVFNUI1RjFBMTVDRTU0MDAwQzYwOUUgLyogUGFn
ZUNvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QjgxQ0MyMUZBQTQ0QkMwMDM3
RDFFNiAvKiBQYWdlQ29uc29sZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlEQUVEMjAzMTE2
RjI0NDQ4MDA3MEVDMEYgLyogUGFnZUNvbnNvbGVDbGllbnQuaCBpbiBIZWFkZXJzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggZWE0MmYzMzQxYTZhNTdlYTBjNWE5ZTExMTgyNGY1ZTUx
MjBkZjAxYi4uNDAwOTRiOWVjMzJlOGRmODFiZGRiMmY3N2ExMTcwOTNhYzYxMTBjYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCkBAIC04Miw3ICs4Miw2IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50Lmgi
Ci0jaW5jbHVkZSAiRnJhbWVTbmFwc2hvdHRpbmcuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
ICNpbmNsdWRlICJGdWxsc2NyZWVuTWFuYWdlci5oIgogI2luY2x1ZGUgIkdDUmVhY2hhYmxlUmVm
LmgiCkBAIC0xMjUsNyArMTI0LDYgQEAKICNpbmNsdWRlICJJREJPcGVuREJSZXF1ZXN0LmgiCiAj
aW5jbHVkZSAiSWRsZUNhbGxiYWNrQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkltYWdlQml0bWFw
UmVuZGVyaW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAi
SW1hZ2VMb2FkZXIuaCIKICNpbmNsdWRlICJJbWFnZU92ZXJsYXlDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCkBAIC0xNzgsMTEgKzE3Niw5IEBACiAj
aW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmgi
CiAjaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJlbmRlckltYWdl
LmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCi0jaW5jbHVkZSAiUmVuZGVy
U3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlci5oIgogI2luY2x1ZGUgIlJlbmRl
clZpZXcuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKQEAgLTMyNzMsNyArMzI2OSw3IEBA
IHZvaWQgRG9jdW1lbnQ6OmVucXVldWVQYWludFRpbWluZ0VudHJ5SWZOZWVkZWQoKQogICAgIGlm
ICghdmlldygpLT5pc1Zpc3VhbGx5Tm9uRW1wdHkoKSB8fCB2aWV3KCktPm5lZWRzTGF5b3V0KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghdmlldygpLT5oYXNDb250ZW5mdWxEZXNjZW5k
YW50cygpKQorICAgIGlmICghdmlldygpLT5oYXNDb250ZW50ZnVsRGVzY2VuZGFudHMoKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFDb250ZW50ZnVsUGFpbnRDaGVja2VyOjpxdWFsaWZp
ZXNGb3JDb250ZW50ZnVsUGFpbnQoKnZpZXcoKSkpCkBAIC0zMjgxLDggKzMyNzcsNiBAQCB2b2lk
IERvY3VtZW50OjplbnF1ZXVlUGFpbnRUaW1pbmdFbnRyeUlmTmVlZGVkKCkKIAogICAgIGRvbVdp
bmRvdygpLT5wZXJmb3JtYW5jZSgpLnJlcG9ydEZpcnN0Q29udGVudGZ1bFBhaW50KCk7CiAgICAg
bV9kaWRFbnF1ZXVlRmlyc3RDb250ZW50ZnVsUGFpbnQgPSB0cnVlOwotCi0gICAgZGV0ZXJtaW5l
U2FtcGxlZFBhZ2VUb3BDb2xvcigpOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBEb2N1bWVudDo6
d3JpdGUoRG9jdW1lbnQqIHJlc3BvbnNpYmxlRG9jdW1lbnQsIFNlZ21lbnRlZFN0cmluZyYmIHRl
eHQpCkBAIC0zOTEwLDE5NyArMzkwNCw2IEBAIHZvaWQgRG9jdW1lbnQ6OnRoZW1lQ29sb3JDaGFu
Z2VkKCkKICNlbmRpZiAvLyBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCiB9CiAKLXN0YXRpYyBib29s
IGlzVmFsaWRQYWdlU2FtcGxlTG9jYXRpb24oRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBJbnRQ
b2ludCYgbG9jYXRpb24pCi17Ci0gICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8y
MjUxNjc+IChTYW1wbGVkIFBhZ2UgVG9wIENvbG9yOiBob29rIGludG8gcGFpbnRpbmcgbG9naWMg
aW5zdGVhZCBvZiB0YWtpbmcgc25hcHNob3RzKQotCi0gICAgY29uc3RleHByIE9wdGlvblNldDxI
aXRUZXN0UmVxdWVzdDo6VHlwZT4gaGl0VGVzdFJlcXVlc3RUeXBlcyB7IEhpdFRlc3RSZXF1ZXN0
OjpUeXBlOjpSZWFkT25seSwgSGl0VGVzdFJlcXVlc3Q6OlR5cGU6Oklnbm9yZUNTU1BvaW50ZXJF
dmVudHNQcm9wZXJ0eSwgSGl0VGVzdFJlcXVlc3Q6OlR5cGU6OkRpc2FsbG93VXNlckFnZW50U2hh
ZG93Q29udGVudCwgSGl0VGVzdFJlcXVlc3Q6OlR5cGU6OkNvbGxlY3RNdWx0aXBsZUVsZW1lbnRz
LCBIaXRUZXN0UmVxdWVzdDo6VHlwZTo6SW5jbHVkZUFsbEVsZW1lbnRzVW5kZXJQb2ludCB9Owot
ICAgIEhpdFRlc3RSZXN1bHQgaGl0VGVzdFJlc3VsdChsb2NhdGlvbik7Ci0gICAgZG9jdW1lbnQu
aGl0VGVzdChoaXRUZXN0UmVxdWVzdFR5cGVzLCBoaXRUZXN0UmVzdWx0KTsKLQotICAgIGZvciAo
YXV0byYgaGl0VGVzdE5vZGUgOiBoaXRUZXN0UmVzdWx0Lmxpc3RCYXNlZFRlc3RSZXN1bHQoKSkg
ewotICAgICAgICBhdXRvJiBub2RlID0gaGl0VGVzdE5vZGUuZ2V0KCk7Ci0KLSAgICAgICAgYXV0
byogcmVuZGVyZXIgPSBub2RlLnJlbmRlcmVyKCk7Ci0gICAgICAgIGlmICghcmVuZGVyZXIpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gU2tpcCBpbWFnZXMgKGJvdGgg
YDxpbWc+YCBhbmQgQ1NTIGBiYWNrZ3JvdW5kLWltYWdlYCkgYXMgdGhleSdyZSBsaWtlbHkgbm90
IGEgc29saWQgY29sb3IuCi0gICAgICAgIGlmIChpczxSZW5kZXJJbWFnZT4ocmVuZGVyZXIpIHx8
IHJlbmRlcmVyLT5zdHlsZSgpLmhhc0JhY2tncm91bmRJbWFnZSgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIFNraXAgbm9kZXMgd2l0aCBhbmltYXRpb25zIGFzIHRo
ZSBzYW1wbGUgbWF5IGdldCBhbiBvZGQgY29sb3IgaWYgdGhlIGFuaW1hdGlvbiBpcyBpbi1wcm9n
cmVzcy4KLSAgICAgICAgaWYgKHJlbmRlcmVyLT5zdHlsZSgpLmhhc1RyYW5zaXRpb25zKCkgfHwg
cmVuZGVyZXItPnN0eWxlKCkuaGFzQW5pbWF0aW9ucygpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIC8vIFNraXAgYDxjYW52YXM+YCBidXQgb25seSBpZiB0aGV5J3ZlIGJl
ZW4gZHJhd24gaW50by4gR3Vlc3MgdGhpcyBieSBzZWVpbmcgaWYgdGhlcmUncyBhbHJlYWR5Ci0g
ICAgICAgIC8vIGEgYENhbnZhc1JlbmRlcmluZ0NvbnRleHRgLCB3aGljaCBpcyBvbmx5IGNyZWF0
ZWQgYnkgSmF2YVNjcmlwdC4KLSAgICAgICAgaWYgKGlzPEhUTUxDYW52YXNFbGVtZW50Pihub2Rl
KSAmJiBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4obm9kZSkucmVuZGVyaW5nQ29udGV4dCgp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIFNraXAgM3JkLXBhcnR5
IGA8aWZyYW1lPmAgYXMgdGhlIGNvbnRlbnQgbGlrZWx5IHdvbid0IG1hdGNoIHRoZSByZXN0IG9m
IHRoZSBwYWdlLgotICAgICAgICBpZiAoaXM8SFRNTElGcmFtZUVsZW1lbnQ+KG5vZGUpICYmICFh
cmVSZWdpc3RyYWJsZURvbWFpbnNFcXVhbChkb3duY2FzdDxIVE1MSUZyYW1lRWxlbWVudD4obm9k
ZSkubG9jYXRpb24oKSwgZG9jdW1lbnQudXJsKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgT3B0aW9uYWw8TGFiPGZs
b2F0Pj4gc2FtcGxlUGFnZUNvbG9yKERvY3VtZW50JiBkb2N1bWVudCwgSW50UG9pbnQmJiBsb2Nh
dGlvbikKLXsKLSAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIyNTE2Nz4gKFNh
bXBsZWQgUGFnZSBUb3AgQ29sb3I6IGhvb2sgaW50byBwYWludGluZyBsb2dpYyBpbnN0ZWFkIG9m
IHRha2luZyBzbmFwc2hvdHMpCi0KLSAgICBpZiAoIWlzVmFsaWRQYWdlU2FtcGxlTG9jYXRpb24o
ZG9jdW1lbnQsIGxvY2F0aW9uKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAg
IEFTU0VSVChkb2N1bWVudC52aWV3KCkpOwotICAgIGF1dG8gc25hcHNob3QgPSBzbmFwc2hvdEZy
YW1lUmVjdChkb2N1bWVudC52aWV3KCktPmZyYW1lKCksIEludFJlY3QobG9jYXRpb24sIEludFNp
emUoMSwgMSkpLCBTbmFwc2hvdE9wdGlvbnNFeGNsdWRlU2VsZWN0aW9uSGlnaGxpZ2h0aW5nIHwg
U25hcHNob3RPcHRpb25zUGFpbnRFdmVyeXRoaW5nRXhjbHVkaW5nU2VsZWN0aW9uKTsKLSAgICBp
ZiAoIXNuYXBzaG90KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgYXV0byBz
bmFwc2hvdERhdGEgPSBzbmFwc2hvdC0+dG9CR1JBRGF0YSgpOwotICAgIHJldHVybiBjb252ZXJ0
Q29sb3I8TGFiPGZsb2F0Pj4oU1JHQkE8dWludDhfdD4geyBzbmFwc2hvdERhdGFbMl0sIHNuYXBz
aG90RGF0YVsxXSwgc25hcHNob3REYXRhWzBdLCBzbmFwc2hvdERhdGFbM10gfSk7Ci19Ci0KLXN0
YXRpYyBkb3VibGUgY29sb3JEaWZmZXJlbmNlKExhYjxmbG9hdD4mIGxocywgTGFiPGZsb2F0PiYg
cmhzKQotewotICAgIHJldHVybiBzcXJ0KHBvdyhyaHMubGlnaHRuZXNzIC0gbGhzLmxpZ2h0bmVz
cywgMikgKyBwb3cocmhzLmEgLSBsaHMuYSwgMikgKyBwb3cocmhzLmIgLSBsaHMuYiwgMikpOwot
fQotCi1zdGF0aWMgTGFiPGZsb2F0PiBhdmVyYWdlQ29sb3IoTGFiPGZsb2F0PiBjb2xvcnNbXSwg
c2l6ZV90IGNvdW50KQotewotICAgIGZsb2F0IHRvdGFsTGlnaHRuZXNzID0gMDsKLSAgICBmbG9h
dCB0b3RhbEEgPSAwOwotICAgIGZsb2F0IHRvdGFsQiA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIHRvdGFsTGlnaHRuZXNzICs9IGNvbG9yc1tp
XS5saWdodG5lc3M7Ci0gICAgICAgIHRvdGFsQSArPSBjb2xvcnNbaV0uYTsKLSAgICAgICAgdG90
YWxCICs9IGNvbG9yc1tpXS5iOwotICAgIH0KLSAgICByZXR1cm4gewotICAgICAgICB0b3RhbExp
Z2h0bmVzcyAvIGNvdW50LAotICAgICAgICB0b3RhbEEgLyBjb3VudCwKLSAgICAgICAgdG90YWxC
IC8gY291bnQsCi0gICAgICAgIDEsCi0gICAgfTsKLX0KLQotdm9pZCBEb2N1bWVudDo6ZGV0ZXJt
aW5lU2FtcGxlZFBhZ2VUb3BDb2xvcigpCi17Ci0gICAgaWYgKG1fc2FtcGxlZFBhZ2VUb3BDb2xv
ci5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gbWF4RGlmZmVyZW5jZSA9
IHNldHRpbmdzKCkuc2FtcGxlZFBhZ2VUb3BDb2xvck1heERpZmZlcmVuY2UoKTsKLSAgICBpZiAo
bWF4RGlmZmVyZW5jZSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWlzVG9wRG9j
dW1lbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byogZnJhbWVWaWV3ID0gdmlldygp
OwotICAgIGlmICghZnJhbWVWaWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIG5vdGlm
eURpZFNhbXBsZVBhZ2VUb3BDb2xvck9uU2NvcGVFeGl0ID0gbWFrZVNjb3BlRXhpdChbJl0gewot
ICAgICAgICBpZiAoYXV0byogcGFnZSA9IHRoaXMtPnBhZ2UoKSkKLSAgICAgICAgICAgIHBhZ2Ut
PmNocm9tZSgpLmNsaWVudCgpLnNhbXBsZWRQYWdlVG9wQ29sb3JDaGFuZ2VkKCk7Ci0gICAgfSk7
Ci0KLSAgICAvLyBEZWNyZWFzZSB0aGUgd2lkdGggYnkgb25lIHBpeGVsIHNvIHRoYXQgdGhlIGxh
c3Qgc25hcHNob3QgaXMgd2l0aGluIGJvdW5kcyBhbmQgbm90IG9mZi1ieS1vbmUuCi0gICAgYXV0
byBmcmFtZVdpZHRoID0gZnJhbWVWaWV3LT5jb250ZW50c1dpZHRoKCkgLSAxOwotCi0gICAgY29u
c3RleHByIGF1dG8gbnVtU25hcHNob3RzID0gNTsKLSAgICBzaXplX3Qgbm9uTWF0Y2hpbmdDb2xv
ckluZGV4ID0gbnVtU25hcHNob3RzOwotCi0gICAgTGFiPGZsb2F0PiBzbmFwc2hvdHNbbnVtU25h
cHNob3RzXTsKLSAgICBkb3VibGUgZGlmZmVyZW5jZXNbbnVtU25hcHNob3RzIC0gMV07Ci0KLSAg
ICBhdXRvIHNob3VsZFN0b3BBZnRlckZpbmRpbmdOb25NYXRjaGluZ0NvbG9yID0gWyZdIChzaXpl
X3QgaSkgLT4gYm9vbCB7Ci0gICAgICAgIC8vIEJhaWwgaWYgdGhlIG5vbi1tYXRjaGluZyBjb2xv
ciBpcyBub3QgdGhlIGZpcnN0IG9yIGxhc3Qgc25hcHNob3QsIG9yIHRoZXJlIGFscmVhZHkgaXMg
YW4gbm9uLW1hdGNoaW5nIGNvbG9yLgotICAgICAgICBpZiAoKGkgJiYgaSA8IG51bVNuYXBzaG90
cyAtIDEpIHx8IG5vbk1hdGNoaW5nQ29sb3JJbmRleCAhPSBudW1TbmFwc2hvdHMpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBub25NYXRjaGluZ0NvbG9ySW5kZXggPSBpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbnVtU25hcHNob3RzOyArK2kpIHsKLSAgICAgICAgYXV0byBzbmFwc2hvdCA9IHNhbXBsZVBh
Z2VDb2xvcigqdGhpcywgSW50UG9pbnQoZnJhbWVXaWR0aCAqIGkgLyAobnVtU25hcHNob3RzIC0g
MSksIDApKTsKLSAgICAgICAgaWYgKCFzbmFwc2hvdCkgewotICAgICAgICAgICAgaWYgKHNob3Vs
ZFN0b3BBZnRlckZpbmRpbmdOb25NYXRjaGluZ0NvbG9yKGkpKQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgc25hcHNo
b3RzW2ldID0gKnNuYXBzaG90OwotCi0gICAgICAgIGlmIChpKSB7Ci0gICAgICAgICAgICAvLyBF
YWNoIGBkaWZmZXJlbmNlYCBpdGVtIGNvbXBhcmVzIGBpYCB3aXRoIGBpIC0gMWAgc28gaWYgdGhl
IGZpcnN0IGNvbXBhcmlzb24gKGBpID09IDFgKQotICAgICAgICAgICAgLy8gaXMgdG9vIGxhcmdl
IG9mIGEgZGlmZmVyZW5jZSwgd2Ugc2hvdWxkIHRyZWF0IGBpIC0gMWAgKGkuZS4gYDBgKSBhcyB0
aGUgcHJvYmxlbSBzaW5jZQotICAgICAgICAgICAgLy8gd2Ugb25seSBhbGxvdyBmb3Igbm9uLW1h
dGNoaW5nIGNvbG9ycyBiZWluZyB0aGUgZmlyc3Qgb3IgbGFzdCBzYW1wbGVkIGNvbG9yLgotICAg
ICAgICAgICAgYXV0byBlZmZlY3RpdmVOb25NYXRjaGluZ0NvbG9ySW5kZXggPSBpID09IDEgPyAw
IDogaTsKLQotICAgICAgICAgICAgZGlmZmVyZW5jZXNbaSAtIDFdID0gY29sb3JEaWZmZXJlbmNl
KHNuYXBzaG90c1tpIC0gMV0sIHNuYXBzaG90c1tpXSk7Ci0gICAgICAgICAgICBpZiAoZGlmZmVy
ZW5jZXNbaSAtIDFdID4gbWF4RGlmZmVyZW5jZSkgewotICAgICAgICAgICAgICAgIGlmIChzaG91
bGRTdG9wQWZ0ZXJGaW5kaW5nTm9uTWF0Y2hpbmdDb2xvcihlZmZlY3RpdmVOb25NYXRjaGluZ0Nv
bG9ySW5kZXgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRvdWJsZSBjdW11bHVhdGl2
ZURpZmZlcmVuY2UgPSAwOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBpOyAr
K2opIHsKLSAgICAgICAgICAgICAgICBpZiAoaiA9PSBub25NYXRjaGluZ0NvbG9ySW5kZXgpCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGN1bXVsdWF0aXZl
RGlmZmVyZW5jZSArPSBkaWZmZXJlbmNlc1tqXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChjdW11bHVhdGl2ZURpZmZlcmVuY2UgPiBtYXhEaWZmZXJlbmNlKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHNob3VsZFN0b3BBZnRlckZpbmRpbmdOb25NYXRjaGluZ0NvbG9yKGVmZmVjdGl2
ZU5vbk1hdGNoaW5nQ29sb3JJbmRleCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2Ug
aGF2ZW4ndCBhbHJlYWR5IGlkZW50aWZpZWQgYSBub24tbWF0Y2hpbmcgc25hcHNob3QgYW5kIHRo
ZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGZpcnN0Ci0gICAgICAgICAgICAgICAgICAgIC8vIGFu
ZCBzZWNvbmQgc25hcHNob3RzIG9yIHRoZSBzZWNvbmQtdG8tbGFzdCBhbmQgbGFzdCBzbmFwc2hv
dHMgaXMgbGVzcyB0aGFuIHRoZSBtYXhpbXVtLCBtYXJrCi0gICAgICAgICAgICAgICAgICAgIC8v
IHRoZSBmaXJzdC9sYXN0IHNuYXBzaG90IGFzIG5vbi1tYXRjaGluZyB0byBnaXZlIGEgY2hhbmNl
IGZvciB0aGUgcmVzdCBvZiB0aGUgc25hcHNob3RzIHRvIG1hdGNoLgotICAgICAgICAgICAgICAg
ICAgICBpZiAobm9uTWF0Y2hpbmdDb2xvckluZGV4ID09IG51bVNuYXBzaG90cyAmJiAoIWkgfHwg
aSA9PSBudW1TbmFwc2hvdHMgLSAxKSAmJiBjdW11bHVhdGl2ZURpZmZlcmVuY2UgLSBkaWZmZXJl
bmNlc1tpIC0gMV0gPD0gbWF4RGlmZmVyZW5jZSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
bm9uTWF0Y2hpbmdDb2xvckluZGV4ID0gZWZmZWN0aXZlTm9uTWF0Y2hpbmdDb2xvckluZGV4Owot
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAg
IC8vIERlY3JlYXNlIHRoZSBoZWlnaHQgYnkgb25lIHBpeGVsIHNvIHRoYXQgdGhlIGxhc3Qgc25h
cHNob3QgaXMgd2l0aGluIGJvdW5kcyBhbmQgbm90IG9mZi1ieS1vbmUuCi0gICAgYXV0byBtaW5I
ZWlnaHQgPSBzZXR0aW5ncygpLnNhbXBsZWRQYWdlVG9wQ29sb3JNaW5IZWlnaHQoKSAtIDE7Ci0g
ICAgaWYgKG1pbkhlaWdodCA+IDApIHsKLSAgICAgICAgaWYgKG5vbk1hdGNoaW5nQ29sb3JJbmRl
eCkgewotICAgICAgICAgICAgaWYgKGF1dG8gbGVmdE1pZGRsZVNuYXBzaG90ID0gc2FtcGxlUGFn
ZUNvbG9yKCp0aGlzLCBJbnRQb2ludCgwLCBtaW5IZWlnaHQpKSkgewotICAgICAgICAgICAgICAg
IGlmIChjb2xvckRpZmZlcmVuY2UoKmxlZnRNaWRkbGVTbmFwc2hvdCwgc25hcHNob3RzWzBdKSA+
IG1heERpZmZlcmVuY2UpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChub25NYXRjaGluZ0NvbG9ySW5kZXggIT0gbnVt
U25hcHNob3RzIC0gMSkgewotICAgICAgICAgICAgaWYgKGF1dG8gcmlnaHRNaWRkbGVTbmFwc2hv
dCA9IHNhbXBsZVBhZ2VDb2xvcigqdGhpcywgSW50UG9pbnQoZnJhbWVXaWR0aCwgbWluSGVpZ2h0
KSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29sb3JEaWZmZXJlbmNlKCpyaWdodE1pZGRsZVNu
YXBzaG90LCBzbmFwc2hvdHNbbnVtU25hcHNob3RzIC0gMV0pID4gbWF4RGlmZmVyZW5jZSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgYXV0byBzbmFwc2hvdHNUb0F2ZXJhZ2UgPSBzbmFwc2hvdHM7Ci0gICAgYXV0byB2
YWxpZFNuYXBzaG90Q291bnQgPSBudW1TbmFwc2hvdHM7Ci0gICAgaWYgKCFub25NYXRjaGluZ0Nv
bG9ySW5kZXgpIHsKLSAgICAgICAgLy8gU2tpcCB0aGUgZmlyc3Qgc25hcHNob3QgYnkgbW92aW5n
IHRoZSBwb2ludGVyIHRoYXQgaW5kaWNhdGVzIHdoZXJlIHRoZSBzbmFwc2hvdCBhcnJheQotICAg
ICAgICAvLyBzdGFydHMgYW5kIGRlY3JlYXNpbmcgdGhlIGNvdW50IG9mIHNuYXBzaG90cyB0byBh
dmVyYWdlLgotICAgICAgICArK3NuYXBzaG90c1RvQXZlcmFnZTsKLSAgICAgICAgLS12YWxpZFNu
YXBzaG90Q291bnQ7Ci0gICAgfSBlbHNlIGlmIChub25NYXRjaGluZ0NvbG9ySW5kZXggPT0gbnVt
U25hcHNob3RzIC0gMSkgewotICAgICAgICAvLyBTa2lwIHRoZSBsYXN0IHNuYXBzaG90IGJ5IGRl
Y3JlYXNpbmcgdGhlIGNvdW50IG9mIHNuYXBzaG90cyB0byBhdmVyYWdlLgotICAgICAgICAtLXZh
bGlkU25hcHNob3RDb3VudDsKLSAgICB9Ci0gICAgbV9zYW1wbGVkUGFnZVRvcENvbG9yID0gYXZl
cmFnZUNvbG9yKHNuYXBzaG90c1RvQXZlcmFnZSwgdmFsaWRTbmFwc2hvdENvdW50KTsKLX0KLQog
I2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKQogc3RhdGljIHZvaWQgcHJvY2Vzc0NvbG9yU2NoZW1l
U3RyaW5nKFN0cmluZ1ZpZXcgY29sb3JTY2hlbWUsIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChT
dHJpbmdWaWV3IGtleSk+JiBjYWxsYmFjaykKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggMzYx
YzlmODZhMDM3ZGQ2ZjRhNGFjMzA3YjBhNDVmZmUyN2U3YWE3Ny4uODRmZDIxYTY2ZDc4YTRmNDI4
NjdmMWY0ZDA1NDRiNDY2OTg1MzIwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTc0NCw4ICs3
NDQsNiBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBDb2xvciYgdGhlbWVDb2xvcigpOwogCi0gICAg
Y29uc3QgQ29sb3ImIHNhbXBsZWRQYWdlVG9wQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3NhbXBs
ZWRQYWdlVG9wQ29sb3I7IH0KLQogICAgIHZvaWQgc2V0VGV4dENvbG9yKGNvbnN0IENvbG9yJiBj
b2xvcikgeyBtX3RleHRDb2xvciA9IGNvbG9yOyB9CiAgICAgY29uc3QgQ29sb3ImIHRleHRDb2xv
cigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dENvbG9yOyB9CiAKQEAgLTE2NzcsOCArMTY3NSw2IEBA
IHByaXZhdGU6CiAgICAgV2Vha1B0cjxIVE1MTWV0YUVsZW1lbnQ+IGRldGVybWluZUFjdGl2ZVRo
ZW1lQ29sb3JNZXRhRWxlbWVudCgpOwogICAgIHZvaWQgdGhlbWVDb2xvckNoYW5nZWQoKTsKIAot
ICAgIHZvaWQgZGV0ZXJtaW5lU2FtcGxlZFBhZ2VUb3BDb2xvcigpOwotCiAgICAgdm9pZCBpbnZh
bGlkYXRlQWNjZXNzS2V5Q2FjaGVTbG93Q2FzZSgpOwogICAgIHZvaWQgYnVpbGRBY2Nlc3NLZXlD
YWNoZSgpOwogCkBAIC0xODAyLDggKzE3OTgsNiBAQCBwcml2YXRlOgogICAgIFdlYWtQdHI8SFRN
TE1ldGFFbGVtZW50PiBtX2FjdGl2ZVRoZW1lQ29sb3JNZXRhRWxlbWVudDsKICAgICBDb2xvciBt
X2FwcGxpY2F0aW9uTWFuaWZlc3RUaGVtZUNvbG9yOwogCi0gICAgQ29sb3IgbV9zYW1wbGVkUGFn
ZVRvcENvbG9yOwotCiAgICAgQ29sb3IgbV90ZXh0Q29sb3IgeyBDb2xvcjo6YmxhY2sgfTsKICAg
ICBDb2xvciBtX2xpbmtDb2xvcjsKICAgICBDb2xvciBtX3Zpc2l0ZWRMaW5rQ29sb3I7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggOTcyNGRhZWNlYzJhYTE2OTlhNGNiODk3ZDM0NjVl
Yjc3Nzc5YmM0Yy4uNjU4M2MzNjlmZGExYzA2ZDk0Mzc1Y2NkYzIzZmM4YjcyMjMwYmY1YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtNDYxNyw3ICs0NjE3LDcgQEAgdm9pZCBGcmFt
ZVZpZXc6OmNoZWNrQW5kRGlzcGF0Y2hEaWRSZWFjaFZpc3VhbGx5Tm9uRW1wdHlTdGF0ZSgpCiAg
ICAgICAgIGZyYW1lKCkubG9hZGVyKCkuZGlkUmVhY2hWaXN1YWxseU5vbkVtcHR5U3RhdGUoKTsK
IH0KIAotYm9vbCBGcmFtZVZpZXc6Omhhc0NvbnRlbmZ1bERlc2NlbmRhbnRzKCkgY29uc3QKK2Jv
b2wgRnJhbWVWaWV3OjpoYXNDb250ZW50ZnVsRGVzY2VuZGFudHMoKSBjb25zdAogewogICAgIHJl
dHVybiBtX3Zpc3VhbGx5Tm9uRW1wdHlDaGFyYWN0ZXJDb3VudCB8fCBtX3Zpc3VhbGx5Tm9uRW1w
dHlQaXhlbENvdW50OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKaW5kZXggZjRhNjA3OGU5MjY3
YWM0M2ZhNDMxZjVmOWVjODY3ZTk5MjEyZTA1Ni4uOWVkMWM3MjNlOTljMmEyY2E2MTljYzg4NWVl
MmFjYTU2NjZmOWEwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCkBAIC00MTMsNyArNDEzLDcg
QEAgcHVibGljOgogICAgIHZvaWQgaW5jcmVtZW50VmlzdWFsbHlOb25FbXB0eUNoYXJhY3RlckNv
dW50KGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgaW5jcmVtZW50VmlzdWFsbHlOb25FbXB0eVBp
eGVsQ291bnQoY29uc3QgSW50U2l6ZSYpOwogICAgIGJvb2wgaXNWaXN1YWxseU5vbkVtcHR5KCkg
Y29uc3QgeyByZXR1cm4gbV9jb250ZW50UXVhbGlmaWVzQXNWaXN1YWxseU5vbkVtcHR5OyB9Ci0g
ICAgYm9vbCBoYXNDb250ZW5mdWxEZXNjZW5kYW50cygpIGNvbnN0OworICAgIGJvb2wgaGFzQ29u
dGVudGZ1bERlc2NlbmRhbnRzKCkgY29uc3Q7CiAgICAgdm9pZCBjaGVja0FuZERpc3BhdGNoRGlk
UmVhY2hWaXN1YWxseU5vbkVtcHR5U3RhdGUoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZW5hYmxlRml4ZWRXaWR0aEF1dG9TaXplTW9kZShib29sIGVuYWJsZSwgY29uc3QgSW50U2l6ZSYg
bWluU2l6ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCAyYzQ1YWI5YWU0ZjhhNDNkYjI5M2EwYTE2
MmYwZjI4OTE4NTBkOGU2Li5lY2YyZTM0NDM1YTg3OTlhMzU5YjY5Yzg1MjRjOWY2YTUxM2MyN2Fl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTg3LDYgKzg3LDcgQEAKICNpbmNsdWRlICJNZWRpYUNh
blN0YXJ0TGlzdGVuZXIuaCIKICNpbmNsdWRlICJNZWRpYVJlY29yZGVyUHJvdmlkZXIuaCIKICNp
bmNsdWRlICJOYXZpZ2F0b3IuaCIKKyNpbmNsdWRlICJQYWdlQ29sb3JTYW1wbGVyLmgiCiAjaW5j
bHVkZSAiUGFnZUNvbmZpZ3VyYXRpb24uaCIKICNpbmNsdWRlICJQYWdlQ29uc29sZUNsaWVudC5o
IgogI2luY2x1ZGUgIlBhZ2VEZWJ1Z2dhYmxlLmgiCkBAIC0xNjcyLDYgKzE2NzMsMTIgQEAgdm9p
ZCBQYWdlOjpkb0FmdGVyVXBkYXRlUmVuZGVyaW5nKCkKICAgICAgICAgQVNTRVJUKCFmcmFtZVZp
ZXcgfHwgIWZyYW1lVmlldy0+bmVlZHNMYXlvdXQoKSk7CiAgICAgfQogI2VuZGlmCisKKyAgICBp
ZiAoIW1fc2FtcGxlZFBhZ2VUb3BDb2xvcikgeworICAgICAgICBtX3NhbXBsZWRQYWdlVG9wQ29s
b3IgPSBQYWdlQ29sb3JTYW1wbGVyOjpzYW1wbGVUb3AoKnRoaXMpOworICAgICAgICBpZiAobV9z
YW1wbGVkUGFnZVRvcENvbG9yKQorICAgICAgICAgICAgY2hyb21lKCkuY2xpZW50KCkuc2FtcGxl
ZFBhZ2VUb3BDb2xvckNoYW5nZWQoKTsKKyAgICB9CiB9CiAKIHZvaWQgUGFnZTo6ZmluYWxpemVS
ZW5kZXJpbmdVcGRhdGUoT3B0aW9uU2V0PEZpbmFsaXplUmVuZGVyaW5nVXBkYXRlRmxhZ3M+IGZs
YWdzKQpAQCAtMjU1NiwxMSArMjU2Myw3IEBAIENvbG9yIFBhZ2U6OnBhZ2VFeHRlbmRlZEJhY2tn
cm91bmRDb2xvcigpIGNvbnN0CiAKIENvbG9yIFBhZ2U6OnNhbXBsZWRQYWdlVG9wQ29sb3IoKSBj
b25zdAogewotICAgIGF1dG8qIGRvY3VtZW50ID0gbWFpbkZyYW1lKCkuZG9jdW1lbnQoKTsKLSAg
ICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgcmV0dXJuIGRvY3Vt
ZW50LT5zYW1wbGVkUGFnZVRvcENvbG9yKCk7CisgICAgcmV0dXJuIG1fc2FtcGxlZFBhZ2VUb3BD
b2xvci52YWx1ZU9yKENvbG9yKCkpOwogfQogCiAvLyBUaGVzZSBhcmUgbWFnaWNhbCBjb25zdGFu
dHMgdGhhdCBtaWdodCBiZSB0d2Vha2VkIG92ZXIgdGltZS4KQEAgLTMyNjYsNiArMzI2OSwxMSBA
QCB2b2lkIFBhZ2U6OmRpZENoYW5nZU1haW5Eb2N1bWVudCgpCiAgICAgbV9ydGNDb250cm9sbGVy
LnJlc2V0KG1fc2hvdWxkRW5hYmxlSUNFQ2FuZGlkYXRlRmlsdGVyaW5nQnlEZWZhdWx0KTsKICNl
bmRpZgogICAgIG1fcG9pbnRlckNhcHR1cmVDb250cm9sbGVyLT5yZXNldCgpOworCisgICAgaWYg
KG1fc2FtcGxlZFBhZ2VUb3BDb2xvcikgeworICAgICAgICBtX3NhbXBsZWRQYWdlVG9wQ29sb3Ig
PSBXVEY6Om51bGxvcHQ7CisgICAgICAgIGNocm9tZSgpLmNsaWVudCgpLnNhbXBsZWRQYWdlVG9w
Q29sb3JDaGFuZ2VkKCk7CisgICAgfQogfQogCiBSZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXImIFBh
Z2U6OnJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCmluZGV4IDgwYzYyMzli
YWVmZGRkYjEyOGM4MjE2NTQwNTQ2OWQ2YjlkYmRjNTcuLjhjNWI2NDNiYzdiZDliY2U2ZGQ4ZDgz
NTRiNWVjZGFiMjEzODBkMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC0yMiw2ICsyMiw3IEBACiAKICNp
bmNsdWRlICJBY3Rpdml0eVN0YXRlLmgiCiAjaW5jbHVkZSAiQW5pbWF0aW9uRnJhbWVSYXRlLmgi
CisjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJEaXNhYmxlZEFkYXB0YXRpb25zLmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGaW5kT3B0aW9ucy5oIgpAQCAtOTQsNyAr
OTUsNiBAQCBjbGFzcyBBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3I7CiBjbGFzcyBCYWNrRm9yd2Fy
ZENvbnRyb2xsZXI7CiBjbGFzcyBDYWNoZVN0b3JhZ2VQcm92aWRlcjsKIGNsYXNzIENocm9tZTsK
LWNsYXNzIENvbG9yOwogY2xhc3MgQ29udGV4dE1lbnVDb250cm9sbGVyOwogY2xhc3MgQ29va2ll
SmFyOwogY2xhc3MgRE9NUmVjdExpc3Q7CkBAIC0xMTUyLDYgKzExNTIsOCBAQCBwcml2YXRlOgog
CiAgICAgTW9ub3RvbmljVGltZSBtX2xhc3RSZW5kZXJpbmdVcGRhdGVUaW1lc3RhbXA7CiAKKyAg
ICBPcHRpb25hbDxDb2xvcj4gbV9zYW1wbGVkUGFnZVRvcENvbG9yOworCiAgICAgY29uc3QgYm9v
bCBtX2h0dHBzVXBncmFkZUVuYWJsZWQgeyB0cnVlIH07CiAgICAgbXV0YWJsZSBNZWRpYVNlc3Np
b25Hcm91cElkZW50aWZpZXIgbV9tZWRpYVNlc3Npb25Hcm91cElkZW50aWZpZXI7CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29sb3JTYW1wbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbG9yU2FtcGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTA5ZmVjNWIw
OGMxMmI4NjY0MzE1MGE0YWQ4Nzg5NzdlZTNmYWY5YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbG9yU2FtcGxlci5jcHAKQEAgLTAsMCArMSwyNTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUGFnZUNvbG9yU2FtcGxlci5oIgorCisjaW5jbHVkZSAiQ29udGVu
dGZ1bFBhaW50Q2hlY2tlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJh
bWUuaCIKKyNpbmNsdWRlICJGcmFtZVNuYXBzaG90dGluZy5oIgorI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgorI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTElGcmFt
ZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgorI2luY2x1ZGUgIkhpdFRl
c3RSZXN1bHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkludFBvaW50
LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRl
ICJOb2RlLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJlZ2lzdHJhYmxlRG9tYWlu
LmgiCisjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIK
KyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVk
ZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0YXRpYyBib29sIGlzVmFsaWRTYW1wbGVMb2NhdGlvbihEb2N1bWVudCYgZG9jdW1lbnQsIGNv
bnN0IEludFBvaW50JiBsb2NhdGlvbikKK3sKKyAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0
Lm9yZy9iLzIyNTE2Nz4gKFNhbXBsZWQgUGFnZSBUb3AgQ29sb3I6IGhvb2sgaW50byBwYWludGlu
ZyBsb2dpYyBpbnN0ZWFkIG9mIHRha2luZyBzbmFwc2hvdHMpCisKKyAgICBjb25zdGV4cHIgT3B0
aW9uU2V0PEhpdFRlc3RSZXF1ZXN0OjpUeXBlPiBoaXRUZXN0UmVxdWVzdFR5cGVzIHsgSGl0VGVz
dFJlcXVlc3Q6OlR5cGU6OlJlYWRPbmx5LCBIaXRUZXN0UmVxdWVzdDo6VHlwZTo6SWdub3JlQ1NT
UG9pbnRlckV2ZW50c1Byb3BlcnR5LCBIaXRUZXN0UmVxdWVzdDo6VHlwZTo6RGlzYWxsb3dVc2Vy
QWdlbnRTaGFkb3dDb250ZW50LCBIaXRUZXN0UmVxdWVzdDo6VHlwZTo6Q29sbGVjdE11bHRpcGxl
RWxlbWVudHMsIEhpdFRlc3RSZXF1ZXN0OjpUeXBlOjpJbmNsdWRlQWxsRWxlbWVudHNVbmRlclBv
aW50IH07CisgICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0KGxvY2F0aW9uKTsKKyAgICBk
b2N1bWVudC5oaXRUZXN0KGhpdFRlc3RSZXF1ZXN0VHlwZXMsIGhpdFRlc3RSZXN1bHQpOworCisg
ICAgZm9yIChhdXRvJiBoaXRUZXN0Tm9kZSA6IGhpdFRlc3RSZXN1bHQubGlzdEJhc2VkVGVzdFJl
c3VsdCgpKSB7CisgICAgICAgIGF1dG8mIG5vZGUgPSBoaXRUZXN0Tm9kZS5nZXQoKTsKKworICAg
ICAgICBhdXRvKiByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKCFyZW5k
ZXJlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBTa2lwIGltYWdl
cyAoYm90aCBgPGltZz5gIGFuZCBDU1MgYGJhY2tncm91bmQtaW1hZ2VgKSBhcyB0aGV5J3JlIGxp
a2VseSBub3QgYSBzb2xpZCBjb2xvci4KKyAgICAgICAgaWYgKGlzPFJlbmRlckltYWdlPihyZW5k
ZXJlcikgfHwgcmVuZGVyZXItPnN0eWxlKCkuaGFzQmFja2dyb3VuZEltYWdlKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gU2tpcCBub2RlcyB3aXRoIGFuaW1hdGlv
bnMgYXMgdGhlIHNhbXBsZSBtYXkgZ2V0IGFuIG9kZCBjb2xvciBpZiB0aGUgYW5pbWF0aW9uIGlz
IGluLXByb2dyZXNzLgorICAgICAgICBpZiAocmVuZGVyZXItPnN0eWxlKCkuaGFzVHJhbnNpdGlv
bnMoKSB8fCByZW5kZXJlci0+c3R5bGUoKS5oYXNBbmltYXRpb25zKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gU2tpcCBgPGNhbnZhcz5gIGJ1dCBvbmx5IGlmIHRo
ZXkndmUgYmVlbiBkcmF3biBpbnRvLiBHdWVzcyB0aGlzIGJ5IHNlZWluZyBpZiB0aGVyZSdzIGFs
cmVhZHkKKyAgICAgICAgLy8gYSBgQ2FudmFzUmVuZGVyaW5nQ29udGV4dGAsIHdoaWNoIGlzIG9u
bHkgY3JlYXRlZCBieSBKYXZhU2NyaXB0LgorICAgICAgICBpZiAoaXM8SFRNTENhbnZhc0VsZW1l
bnQ+KG5vZGUpICYmIGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50Pihub2RlKS5yZW5kZXJpbmdD
b250ZXh0KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gU2tpcCAz
cmQtcGFydHkgYDxpZnJhbWU+YCBhcyB0aGUgY29udGVudCBsaWtlbHkgd29uJ3QgbWF0Y2ggdGhl
IHJlc3Qgb2YgdGhlIHBhZ2UuCisgICAgICAgIGlmIChpczxIVE1MSUZyYW1lRWxlbWVudD4obm9k
ZSkgJiYgIWFyZVJlZ2lzdHJhYmxlRG9tYWluc0VxdWFsKGRvd25jYXN0PEhUTUxJRnJhbWVFbGVt
ZW50Pihub2RlKS5sb2NhdGlvbigpLCBkb2N1bWVudC51cmwoKSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBPcHRpb25h
bDxMYWI8ZmxvYXQ+PiBzYW1wbGVDb2xvcihEb2N1bWVudCYgZG9jdW1lbnQsIEludFBvaW50JiYg
bG9jYXRpb24pCit7CisgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMjUxNjc+
IChTYW1wbGVkIFBhZ2UgVG9wIENvbG9yOiBob29rIGludG8gcGFpbnRpbmcgbG9naWMgaW5zdGVh
ZCBvZiB0YWtpbmcgc25hcHNob3RzKQorCisgICAgaWYgKCFpc1ZhbGlkU2FtcGxlTG9jYXRpb24o
ZG9jdW1lbnQsIGxvY2F0aW9uKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IEFTU0VSVChkb2N1bWVudC52aWV3KCkpOworICAgIGF1dG8gc25hcHNob3QgPSBzbmFwc2hvdEZy
YW1lUmVjdChkb2N1bWVudC52aWV3KCktPmZyYW1lKCksIEludFJlY3QobG9jYXRpb24sIEludFNp
emUoMSwgMSkpLCBTbmFwc2hvdE9wdGlvbnNFeGNsdWRlU2VsZWN0aW9uSGlnaGxpZ2h0aW5nIHwg
U25hcHNob3RPcHRpb25zUGFpbnRFdmVyeXRoaW5nRXhjbHVkaW5nU2VsZWN0aW9uKTsKKyAgICBp
ZiAoIXNuYXBzaG90KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgYXV0byBz
bmFwc2hvdERhdGEgPSBzbmFwc2hvdC0+dG9CR1JBRGF0YSgpOworICAgIHJldHVybiBjb252ZXJ0
Q29sb3I8TGFiPGZsb2F0Pj4oU1JHQkE8dWludDhfdD4geyBzbmFwc2hvdERhdGFbMl0sIHNuYXBz
aG90RGF0YVsxXSwgc25hcHNob3REYXRhWzBdLCBzbmFwc2hvdERhdGFbM10gfSk7Cit9CisKK3N0
YXRpYyBkb3VibGUgY29sb3JEaWZmZXJlbmNlKExhYjxmbG9hdD4mIGxocywgTGFiPGZsb2F0PiYg
cmhzKQoreworICAgIHJldHVybiBzcXJ0KHBvdyhyaHMubGlnaHRuZXNzIC0gbGhzLmxpZ2h0bmVz
cywgMikgKyBwb3cocmhzLmEgLSBsaHMuYSwgMikgKyBwb3cocmhzLmIgLSBsaHMuYiwgMikpOwor
fQorCitzdGF0aWMgTGFiPGZsb2F0PiBhdmVyYWdlQ29sb3IoTGFiPGZsb2F0PiBjb2xvcnNbXSwg
c2l6ZV90IGNvdW50KQoreworICAgIGZsb2F0IHRvdGFsTGlnaHRuZXNzID0gMDsKKyAgICBmbG9h
dCB0b3RhbEEgPSAwOworICAgIGZsb2F0IHRvdGFsQiA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIHRvdGFsTGlnaHRuZXNzICs9IGNvbG9yc1tp
XS5saWdodG5lc3M7CisgICAgICAgIHRvdGFsQSArPSBjb2xvcnNbaV0uYTsKKyAgICAgICAgdG90
YWxCICs9IGNvbG9yc1tpXS5iOworICAgIH0KKyAgICByZXR1cm4geworICAgICAgICB0b3RhbExp
Z2h0bmVzcyAvIGNvdW50LAorICAgICAgICB0b3RhbEEgLyBjb3VudCwKKyAgICAgICAgdG90YWxC
IC8gY291bnQsCisgICAgICAgIDEsCisgICAgfTsKK30KKworT3B0aW9uYWw8Q29sb3I+IFBhZ2VD
b2xvclNhbXBsZXI6OnNhbXBsZVRvcChQYWdlJiBwYWdlKQoreworICAgIC8vIElmIGBXVEY6Om51
bGxvcHRgIGlzIHJldHVybmVkIHRoZW4gdGhhdCBtZWFucyB0aGF0IG5vIHNhbXBsZXMgd2VyZSB0
YWtlbiAoaS5lLiB0aGUgYFBhZ2VgIGlzIG5vdCByZWFkeSB5ZXQpLgorICAgIC8vIElmIGFuIGlu
dmFsaWQgYENvbG9yYCBpcyByZXR1cm5lZCB0aGVuIHRoYXQgbWVhbnMgdGhhdCBzYW1wbGVzIFdl
cmUgdGFrZW4gYnV0IHRoZXkgd2VyZSB0b28gZGlmZmVyZW50LgorCisgICAgYXV0byBtYXhEaWZm
ZXJlbmNlID0gcGFnZS5zZXR0aW5ncygpLnNhbXBsZWRQYWdlVG9wQ29sb3JNYXhEaWZmZXJlbmNl
KCk7CisgICAgaWYgKG1heERpZmZlcmVuY2UgPD0gMCkgeworICAgICAgICAvLyBQcmV0ZW5kIHRo
YXQgdGhlIHNhbXBsZXMgYXJlIHRvbyBkaWZmZXJlbnQgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGlz
IG5vdCBjYWxsZWQgYWdhaW4uCisgICAgICAgIHJldHVybiBDb2xvcigpOworICAgIH0KKworICAg
IGF1dG8gbWFpbkRvY3VtZW50ID0gbWFrZVJlZlB0cihwYWdlLm1haW5GcmFtZSgpLmRvY3VtZW50
KCkpOworICAgIGlmICghbWFpbkRvY3VtZW50KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworCisgICAgYXV0byBmcmFtZVZpZXcgPSBtYWtlUmVmUHRyKHBhZ2UubWFpbkZyYW1lKCkudmll
dygpKTsKKyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KworICAgIC8vIERvbid0IHRha2Ugc2FtcGxlcyBpZiB0aGUgbGF5ZXIgdHJlZSBpcyBzdGlsbCBm
cm96ZW4uCisgICAgaWYgKGZyYW1lVmlldy0+bmVlZHNMYXlvdXQoKSkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworICAgIC8vIERvbid0IGF0dGVtcHQgdG8gaGl0IHRlc3Qgb3Igc2Ft
cGxlIGlmIHdlIGRvbid0IGhhdmUgYW55IGNvbnRlbnQgeWV0LgorICAgIGlmICghZnJhbWVWaWV3
LT5pc1Zpc3VhbGx5Tm9uRW1wdHkoKSB8fCAhZnJhbWVWaWV3LT5oYXNDb250ZW50ZnVsRGVzY2Vu
ZGFudHMoKSB8fCAhQ29udGVudGZ1bFBhaW50Q2hlY2tlcjo6cXVhbGlmaWVzRm9yQ29udGVudGZ1
bFBhaW50KCpmcmFtZVZpZXcpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAg
Ly8gRGVjcmVhc2UgdGhlIHdpZHRoIGJ5IG9uZSBwaXhlbCBzbyB0aGF0IHRoZSBsYXN0IHNhbXBs
ZSBpcyB3aXRoaW4gYm91bmRzIGFuZCBub3Qgb2ZmLWJ5LW9uZS4KKyAgICBhdXRvIGZyYW1lV2lk
dGggPSBmcmFtZVZpZXctPmNvbnRlbnRzV2lkdGgoKSAtIDE7CisKKyAgICBjb25zdGV4cHIgYXV0
byBudW1TYW1wbGVzID0gNTsKKyAgICBzaXplX3Qgbm9uTWF0Y2hpbmdDb2xvckluZGV4ID0gbnVt
U2FtcGxlczsKKworICAgIExhYjxmbG9hdD4gc2FtcGxlc1tudW1TYW1wbGVzXTsKKyAgICBkb3Vi
bGUgZGlmZmVyZW5jZXNbbnVtU2FtcGxlcyAtIDFdOworCisgICAgYXV0byBzaG91bGRTdG9wQWZ0
ZXJGaW5kaW5nTm9uTWF0Y2hpbmdDb2xvciA9IFsmXSAoc2l6ZV90IGkpIC0+IGJvb2wgeworICAg
ICAgICAvLyBCYWlsIGlmIHRoZSBub24tbWF0Y2hpbmcgY29sb3IgaXMgbm90IHRoZSBmaXJzdCBv
ciBsYXN0IHNhbXBsZSwgb3IgdGhlcmUgYWxyZWFkeSBpcyBhbiBub24tbWF0Y2hpbmcgY29sb3Iu
CisgICAgICAgIGlmICgoaSAmJiBpIDwgbnVtU2FtcGxlcyAtIDEpIHx8IG5vbk1hdGNoaW5nQ29s
b3JJbmRleCAhPSBudW1TYW1wbGVzKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAg
ICAgbm9uTWF0Y2hpbmdDb2xvckluZGV4ID0gaTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH07CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVNhbXBsZXM7ICsraSkgeworICAg
ICAgICBhdXRvIHNhbXBsZSA9IHNhbXBsZUNvbG9yKCptYWluRG9jdW1lbnQsIEludFBvaW50KGZy
YW1lV2lkdGggKiBpIC8gKG51bVNhbXBsZXMgLSAxKSwgMCkpOworICAgICAgICBpZiAoIXNhbXBs
ZSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFN0b3BBZnRlckZpbmRpbmdOb25NYXRjaGluZ0Nv
bG9yKGkpKQorICAgICAgICAgICAgICAgIHJldHVybiBDb2xvcigpOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKworICAgICAgICBzYW1wbGVzW2ldID0gKnNhbXBsZTsKKworICAg
ICAgICBpZiAoaSkgeworICAgICAgICAgICAgLy8gRWFjaCBgZGlmZmVyZW5jZWAgaXRlbSBjb21w
YXJlcyBgaWAgd2l0aCBgaSAtIDFgIHNvIGlmIHRoZSBmaXJzdCBjb21wYXJpc29uIChgaSA9PSAx
YCkKKyAgICAgICAgICAgIC8vIGlzIHRvbyBsYXJnZSBvZiBhIGRpZmZlcmVuY2UsIHdlIHNob3Vs
ZCB0cmVhdCBgaSAtIDFgIChpLmUuIGAwYCkgYXMgdGhlIHByb2JsZW0gc2luY2UKKyAgICAgICAg
ICAgIC8vIHdlIG9ubHkgYWxsb3cgZm9yIG5vbi1tYXRjaGluZyBjb2xvcnMgYmVpbmcgdGhlIGZp
cnN0IG9yIGxhc3Qgc2FtcGxlZCBjb2xvci4KKyAgICAgICAgICAgIGF1dG8gZWZmZWN0aXZlTm9u
TWF0Y2hpbmdDb2xvckluZGV4ID0gaSA9PSAxID8gMCA6IGk7CisKKyAgICAgICAgICAgIGRpZmZl
cmVuY2VzW2kgLSAxXSA9IGNvbG9yRGlmZmVyZW5jZShzYW1wbGVzW2kgLSAxXSwgc2FtcGxlc1tp
XSk7CisgICAgICAgICAgICBpZiAoZGlmZmVyZW5jZXNbaSAtIDFdID4gbWF4RGlmZmVyZW5jZSkg
eworICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdG9wQWZ0ZXJGaW5kaW5nTm9uTWF0Y2hpbmdD
b2xvcihlZmZlY3RpdmVOb25NYXRjaGluZ0NvbG9ySW5kZXgpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gQ29sb3IoKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZG91YmxlIGN1bXVsdWF0aXZlRGlmZmVyZW5jZSA9IDA7CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGk7ICsraikgeworICAgICAgICAgICAgICAg
IGlmIChqID09IG5vbk1hdGNoaW5nQ29sb3JJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgY3VtdWx1YXRpdmVEaWZmZXJlbmNlICs9IGRpZmZlcmVu
Y2VzW2pdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGN1bXVsdWF0aXZlRGlmZmVy
ZW5jZSA+IG1heERpZmZlcmVuY2UpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3RvcEFm
dGVyRmluZGluZ05vbk1hdGNoaW5nQ29sb3IoZWZmZWN0aXZlTm9uTWF0Y2hpbmdDb2xvckluZGV4
KSkgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IGFscmVhZHkgaWRlbnRp
ZmllZCBhIG5vbi1tYXRjaGluZyBzYW1wbGUgYW5kIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhl
IGZpcnN0CisgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBzZWNvbmQgc2FtcGxlcyBvciB0aGUg
c2Vjb25kLXRvLWxhc3QgYW5kIGxhc3Qgc2FtcGxlcyBpcyBsZXNzIHRoYW4gdGhlIG1heGltdW0s
IG1hcmsKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGZpcnN0L2xhc3Qgc2FtcGxlIGFzIG5v
bi1tYXRjaGluZyB0byBnaXZlIGEgY2hhbmNlIGZvciB0aGUgcmVzdCBvZiB0aGUgc2FtcGxlcyB0
byBtYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vbk1hdGNoaW5nQ29sb3JJbmRleCA9
PSBudW1TYW1wbGVzICYmICghaSB8fCBpID09IG51bVNhbXBsZXMgLSAxKSAmJiBjdW11bHVhdGl2
ZURpZmZlcmVuY2UgLSBkaWZmZXJlbmNlc1tpIC0gMV0gPD0gbWF4RGlmZmVyZW5jZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgbm9uTWF0Y2hpbmdDb2xvckluZGV4ID0gZWZmZWN0aXZlTm9u
TWF0Y2hpbmdDb2xvckluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gRGVjcmVhc2UgdGhlIGhlaWdodCBieSBv
bmUgcGl4ZWwgc28gdGhhdCB0aGUgbGFzdCBzYW1wbGUgaXMgd2l0aGluIGJvdW5kcyBhbmQgbm90
IG9mZi1ieS1vbmUuCisgICAgYXV0byBtaW5IZWlnaHQgPSBwYWdlLnNldHRpbmdzKCkuc2FtcGxl
ZFBhZ2VUb3BDb2xvck1pbkhlaWdodCgpIC0gMTsKKyAgICBpZiAobWluSGVpZ2h0ID4gMCkgewor
ICAgICAgICBpZiAobm9uTWF0Y2hpbmdDb2xvckluZGV4KSB7CisgICAgICAgICAgICBpZiAoYXV0
byBsZWZ0TWlkZGxlU2FtcGxlID0gc2FtcGxlQ29sb3IoKm1haW5Eb2N1bWVudCwgSW50UG9pbnQo
MCwgbWluSGVpZ2h0KSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29sb3JEaWZmZXJlbmNlKCps
ZWZ0TWlkZGxlU2FtcGxlLCBzYW1wbGVzWzBdKSA+IG1heERpZmZlcmVuY2UpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBDb2xvcigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaWYgKG5vbk1hdGNoaW5nQ29sb3JJbmRleCAhPSBudW1TYW1wbGVzIC0gMSkgeworICAg
ICAgICAgICAgaWYgKGF1dG8gcmlnaHRNaWRkbGVTYW1wbGUgPSBzYW1wbGVDb2xvcigqbWFpbkRv
Y3VtZW50LCBJbnRQb2ludChmcmFtZVdpZHRoLCBtaW5IZWlnaHQpKSkgeworICAgICAgICAgICAg
ICAgIGlmIChjb2xvckRpZmZlcmVuY2UoKnJpZ2h0TWlkZGxlU2FtcGxlLCBzYW1wbGVzW251bVNh
bXBsZXMgLSAxXSkgPiBtYXhEaWZmZXJlbmNlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Q29sb3IoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gc2Ft
cGxlc1RvQXZlcmFnZSA9IHNhbXBsZXM7CisgICAgYXV0byB2YWxpZFNhbXBsZUNvdW50ID0gbnVt
U2FtcGxlczsKKyAgICBpZiAoIW5vbk1hdGNoaW5nQ29sb3JJbmRleCkgeworICAgICAgICAvLyBT
a2lwIHRoZSBmaXJzdCBzYW1wbGUgYnkgbW92aW5nIHRoZSBwb2ludGVyIHRoYXQgaW5kaWNhdGVz
IHdoZXJlIHRoZSBzYW1wbGUgYXJyYXkKKyAgICAgICAgLy8gc3RhcnRzIGFuZCBkZWNyZWFzaW5n
IHRoZSBjb3VudCBvZiBzYW1wbGVzIHRvIGF2ZXJhZ2UuCisgICAgICAgICsrc2FtcGxlc1RvQXZl
cmFnZTsKKyAgICAgICAgLS12YWxpZFNhbXBsZUNvdW50OworICAgIH0gZWxzZSBpZiAobm9uTWF0
Y2hpbmdDb2xvckluZGV4ID09IG51bVNhbXBsZXMgLSAxKSB7CisgICAgICAgIC8vIFNraXAgdGhl
IGxhc3Qgc2FtcGxlIGJ5IGRlY3JlYXNpbmcgdGhlIGNvdW50IG9mIHNhbXBsZXMgdG8gYXZlcmFn
ZS4KKyAgICAgICAgLS12YWxpZFNhbXBsZUNvdW50OworICAgIH0KKyAgICByZXR1cm4gQ29sb3Io
YXZlcmFnZUNvbG9yKHNhbXBsZXNUb0F2ZXJhZ2UsIHZhbGlkU2FtcGxlQ291bnQpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlQ29sb3JTYW1wbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb2xvclNhbXBsZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hOWZkOTE2ODIwYjhlNDhkZDdlNmRkMGY2ZDBkOGUzNGRjZDFhMDY5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29sb3JTYW1wbGVyLmgK
QEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBhZ2U7CisKK2NsYXNz
IFBhZ2VDb2xvclNhbXBsZXIgeworcHVibGljOgorICAgIHN0YXRpYyBPcHRpb25hbDxDb2xvcj4g
c2FtcGxlVG9wKFBhZ2UmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxMmYzOTc0NTc3YWU2
YTQ4NTVhOTQyOGM2YWIxYjExNzM5M2E5NWQ3Li5lMTMwYTJiYjhmNzM2M2I2ZGYxNjc1NWIwMjQy
MjZmNDc4NTI5YzM1IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDUtMTMgIERldmluIFJvdXNzbyAgPGRyb3Vz
c29AYXBwbGUuY29tPgorCisgICAgICAgIFNhbXBsZWQgUGFnZSBUb3AgQ29sb3I6IG1vdmUgbG9n
aWMgb3V0IG9mIGBEb2N1bWVudGAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyNTQ4MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzc5ODQ1Mzk+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NhbXBsZWRQYWdlVG9wQ29sb3IubW06CisgICAgICAg
IChURVNULlNhbXBsZWRQYWdlVG9wQ29sb3IuTWFpbkRvY3VtZW50Q2hhbmdlKTogQWRkZWQuCisK
IDIwMjEtMDUtMTMgIEFha2FzaCBKYWluICA8YWFrYXNoX2phaW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFtld3NdIFN0eWxlIGZpeGVzIGluIHN0ZXBzLnB5CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NhbXBsZWRQYWdlVG9wQ29sb3IubW0gYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NhbXBsZWRQYWdlVG9wQ29sb3IubW0K
aW5kZXggN2YyNzIxYjY1YzA3MDIyMTM5NDI1OWQ2YjA3YWE2MmJlOTNjNzIyMS4uMjQ5ZmMzZWU5
Y2IyYzI1ODRhODg1ZjM3ZDhhZDQ0YjUwZTljMjlhYyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TYW1wbGVkUGFnZVRvcENvbG9yLm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2FtcGxlZFBhZ2VUb3BDb2xvci5t
bQpAQCAtMzU5LDYgKzM1OSw0NyBAQCBURVNUKFNhbXBsZWRQYWdlVG9wQ29sb3IsIERJU0FCTEVE
X0Rpc3BsYXlQMykKICAgICBFWFBFQ1RfRVEoY29tcG9uZW50c1szXSwgMSk7CiB9CiAKK1RFU1Qo
U2FtcGxlZFBhZ2VUb3BDb2xvciwgTWFpbkRvY3VtZW50Q2hhbmdlKQoreworICAgIGF1dG8gd2Vi
VmlldyA9IGNyZWF0ZVdlYlZpZXdXaXRoU2FtcGxlZFBhZ2VUb3BDb2xvck1heERpZmZlcmVuY2Uo
NSk7CisgICAgRVhQRUNUX05VTEwoW3dlYlZpZXcgX3NhbXBsZWRQYWdlVG9wQ29sb3JdKTsKKwor
ICAgIHNpemVfdCBub3RpZmljYXRpb25Db3VudCA9IDA7CisgICAgYXV0byBzYW1wbGVkUGFnZVRv
cENvbG9yT2JzZXJ2ZXIgPSBhZG9wdE5TKFtbVGVzdEtWT1dyYXBwZXIgYWxsb2NdIGluaXRXaXRo
T2JzZXJ2YWJsZTp3ZWJWaWV3LmdldCgpIGtleVBhdGg6QCJfc2FtcGxlZFBhZ2VUb3BDb2xvciIg
Y2FsbGJhY2s6WyZdIHsKKyAgICAgICAgKytub3RpZmljYXRpb25Db3VudDsKKyAgICB9XSk7CisK
KyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmdBbmRXYWl0VW50aWxBbGxJ
bW1lZGlhdGVDaGlsZEZyYW1lc1BhaW50OkAiPGJvZHk+VGVzdCJdOworICAgIEVYUEVDVF9FUShX
ZWJDb3JlOjpDb2xvcihbd2ViVmlldyBfc2FtcGxlZFBhZ2VUb3BDb2xvcl0uQ0dDb2xvciksIFdl
YkNvcmU6OkNvbG9yOjp3aGl0ZSk7CisgICAgRVhQRUNUX0VRKG5vdGlmaWNhdGlvbkNvdW50LCAx
VUwpOworCisgICAgbm90aWZpY2F0aW9uQ291bnQgPSAwOworCisgICAgW3dlYlZpZXcgc3luY2hy
b25vdXNseUxvYWRIVE1MU3RyaW5nQW5kV2FpdFVudGlsQWxsSW1tZWRpYXRlQ2hpbGRGcmFtZXNQ
YWludDpAIjxib2R5PlRlc3QiXTsKKyAgICBFWFBFQ1RfRVEoV2ViQ29yZTo6Q29sb3IoW3dlYlZp
ZXcgX3NhbXBsZWRQYWdlVG9wQ29sb3JdLkNHQ29sb3IpLCBXZWJDb3JlOjpDb2xvcjo6d2hpdGUp
OworICAgIC8vIERlcGVuZGluZyBvbiB0aW1pbmcsIGEgbm90aWZpY2F0aW9uIGNhbiBiZSBzZW50
IGZvciB3aGVuIHRoZSBtYWluIGRvY3VtZW50IGNoYW5nZXMgYW5kIHRoZW4KKyAgICAvLyB3aGVu
IHRoZSBuZXcgbWFpbiBkb2N1bWVudCByZW5kZXJzIG9yIGJvdGggY2FuIGJlIGNvYWxlc2NlZCBp
ZiByZW5kZXJpbmcgaXMgZmFzdCBlbm91Z2guCisgICAgRVhQRUNUX1RSVUUobm90aWZpY2F0aW9u
Q291bnQgPT0gMCB8fCBub3RpZmljYXRpb25Db3VudCA9PSAyKTsKKworICAgIG5vdGlmaWNhdGlv
bkNvdW50ID0gMDsKKworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZ0Fu
ZFdhaXRVbnRpbEFsbEltbWVkaWF0ZUNoaWxkRnJhbWVzUGFpbnQ6QCI8Ym9keT4iXTsKKyAgICBF
WFBFQ1RfTlVMTChbd2ViVmlldyBfc2FtcGxlZFBhZ2VUb3BDb2xvcl0pOworICAgIEVYUEVDVF9F
UShub3RpZmljYXRpb25Db3VudCwgMVVMKTsKKworICAgIG5vdGlmaWNhdGlvbkNvdW50ID0gMDsK
KworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZ0FuZFdhaXRVbnRpbEFs
bEltbWVkaWF0ZUNoaWxkRnJhbWVzUGFpbnQ6QCI8Ym9keT4iXTsKKyAgICBFWFBFQ1RfTlVMTChb
d2ViVmlldyBfc2FtcGxlZFBhZ2VUb3BDb2xvcl0pOworICAgIEVYUEVDVF9FUShub3RpZmljYXRp
b25Db3VudCwgMFVMKTsKKworICAgIG5vdGlmaWNhdGlvbkNvdW50ID0gMDsKKworICAgIFt3ZWJW
aWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZ0FuZFdhaXRVbnRpbEFsbEltbWVkaWF0ZUNo
aWxkRnJhbWVzUGFpbnQ6QCI8Ym9keT5UZXN0Il07CisgICAgRVhQRUNUX0VRKFdlYkNvcmU6OkNv
bG9yKFt3ZWJWaWV3IF9zYW1wbGVkUGFnZVRvcENvbG9yXS5DR0NvbG9yKSwgV2ViQ29yZTo6Q29s
b3I6OndoaXRlKTsKKyAgICBFWFBFQ1RfRVEobm90aWZpY2F0aW9uQ291bnQsIDFVTCk7Cit9CisK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogCiAvLyBUaGVyZSdzIG5vIEFQSS9TUEkgdG8gZ2V0
IHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBzY3JvbGwgYXJlYSBvbiBtYWNPUy4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428683</attachid>
            <date>2021-05-14 16:40:48 -0700</date>
            <delta_ts>2021-05-14 17:29:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225480-20210514174047.patch</filename>
            <type>text/plain</type>
            <size>38739</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5ZmZhMmY0NzcyNWJiM2UzMGI3OWE5OTNhMTRlMzE0OGEzODg4NzhkLi5m
YWM4NjliZmE4MjEwY2U4ZmJjMDhhNGQxZDNhNTg1YmUyNDBhMmNlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNTMgQEAKKzIwMjEtMDUtMTQgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29t
PgorCisgICAgICAgIFNhbXBsZWQgUGFnZSBUb3AgQ29sb3I6IG1vdmUgbG9naWMgb3V0IG9mIGBE
b2N1bWVudGAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyNTQ4MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzc5ODQ1Mzk+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgVGltIEhvcnRvbi4KKworICAgICAgICBIYXZpbmcgYGRldGVybWluZVNhbXBsZWRQ
YWdlVG9wQ29sb3JgIGJlIGNhbGxlZCBpbiBgZW5xdWV1ZVBhaW50VGltaW5nRW50cnlJZk5lZWRl
ZGAgYXMgd2hhdAorICAgICAgICBpcyBiYXNpY2FsbHkgYSBzaWRlIGVmZmVjdCBpcyBub3QgZ3Jl
YXQuIFRoZSBvbmx5IHJlYXNvbiBpdCB3YXMgdGhlcmUgaW4gdGhlIGZpcnN0IHBsYWNlIHdhcwor
ICAgICAgICB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbG9naWMgdGhhdCBkZWNpZGVkICJpcyB0
aGlzIHRoZSBmaXJzdCBjb250ZW50ZnVsIHBhaW50IiwgYnV0IHRoYXQKKyAgICAgICAgbG9naWMg
Y2FuIGJlIHJlcGxpY2F0ZWQgZWxzZXdoZXJlLiBTaW5jZSB0aGUgc2FtcGxlZCBwYWdlIHRvcCBj
b2xvciBkZWFscyBtb3JlIHdpdGggdGhlIHBhZ2UKKyAgICAgICAgYXMgYSB3aG9sZSBpbnN0ZWFk
IG9mIGFuIGluZGl2aWR1YWwgYERvY3VtZW50YCAod2hpY2ggaW5jbHVkZXMgc3ViZnJhbWVzKSwg
aXQgbWFrZXMgbW9yZQorICAgICAgICBzZW5zZSB0byBoYXZlIHRoaXMgbG9naWMgYmUgb24gYSB1
dGlsaXR5IGBQYWdlQ29sb3JTYW1wbGVyYCB0aGF0J3MgdXNlZCBpbiBgUGFnZWAgaW5zdGVhZC4K
KworICAgICAgICBUZXN0OiBTYW1wbGVkUGFnZVRvcENvbG9yLk1haW5Eb2N1bWVudENoYW5nZQor
CisgICAgICAgICogcGFnZS9QYWdlQ29sb3JTYW1wbGVyLmg6IEFkZGVkLgorICAgICAgICAqIHBh
Z2UvUGFnZUNvbG9yU2FtcGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6aXNWYWxp
ZFNhbXBsZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnNhbXBsZUNvbG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbG9yRGlmZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjphdmVyYWdl
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbG9yU2FtcGxlcjo6c2FtcGxlVG9wKToK
KyAgICAgICAgKiBwYWdlL1BhZ2UuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UGFnZTo6ZG9BZnRlclVwZGF0ZVJlbmRlcmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlOjpzYW1wbGVkUGFnZVRvcENvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2U6OmRpZENoYW5nZU1haW5Eb2N1bWVudCk6CisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzYW1wbGVkUGFnZVRvcENvbG9yIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OmVucXVldWVQYWludFRpbWluZ0VudHJ5SWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6aXNWYWxpZFBhZ2VTYW1wbGVMb2NhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpzYW1wbGVQYWdlQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29s
b3JEaWZmZXJlbmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmF2ZXJhZ2VDb2xvcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGV0ZXJtaW5lU2FtcGxlZFBh
Z2VUb3BDb2xvcik6IERlbGV0ZWQuCisKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAg
ICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6
aGFzQ29udGVudGZ1bERlc2NlbmRhbnRzIGNvbnN0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVZpZXc6Omhhc0NvbnRlbmZ1bERlc2NlbmRhbnRzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgRHJpdmUtYnk6IEZpeCBpbmNvcnJlY3Qgc3BlbGxpbmcuCisKKyAgICAgICAgKiBTb3Vy
Y2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0OgorICAgICAgICAqIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKwogMjAyMS0wNS0xNCAgQWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+
CiAKICAgICAgICAgW3Nob3dSZW5kZXJUcmVlXSBEbyBub3QgaW50ZWdyYWwgZmxvb3IgdGhlIG92
ZXJmbG93IHZhbHVlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBi
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggZGRhMWY3Y2Q1NTJjYmRiN2MzZDJh
MzdiZjgyMWVlMzQ4NDU2ZWI5ZS4uYmU2ZWFjOWU5MDllZGFiNDBhOWZiYWJjNmJhZWI3ODE4OTA4
NGM1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC05MDYsNiArOTA2LDcgQEAgc2V0KFdlYkNvcmVf
UFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBhZ2UvTmF2aWdhdG9ySXNMb2dnZWRJbi5o
CiAgICAgcGFnZS9QREZJbWFnZUNhY2hpbmdQb2xpY3kuaAogICAgIHBhZ2UvUGFnZS5oCisgICAg
cGFnZS9QYWdlQ29sb3JTYW1wbGVyLmgKICAgICBwYWdlL1BhZ2VDb25maWd1cmF0aW9uLmgKICAg
ICBwYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmgKICAgICBwYWdlL1BhZ2VHcm91cC5oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CmluZGV4IDI3ZjI5OWI2YmUyMTQwYjg1ODJlZTczZjQ3MzNlZGM4NDEyZDkyODQuLjA2NWY2
NmI4ODQxYjdmODlkZGFlMDNkNmE3NDQ3NTBlODBmM2RlNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0x
NzIwLDYgKzE3MjAsNyBAQCBwYWdlL05hdmlnYXRvckJhc2UuY3BwCiBwYWdlL05hdmlnYXRvcklz
TG9nZ2VkSW4uY3BwCiBwYWdlL09yaWdpbkFjY2Vzc0VudHJ5LmNwcAogcGFnZS9QYWdlLmNwcAor
cGFnZS9QYWdlQ29sb3JTYW1wbGVyLmNwcAogcGFnZS9QYWdlQ29uZmlndXJhdGlvbi5jcHAKIHBh
Z2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCiBwYWdlL1BhZ2VEZWJ1Z2dhYmxlLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDFj
MzU5MTkwMmIxMjBiZDNhYjA2MGJkOGM1YjFiN2YyYWIzYzE3YjkuLjEyYzRhOTY2ZDZkZGVjOWMy
ZjNlNjZmMzE4MGEwNzkwOTY4N2IxMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI5ODcsNiArMjk4Nyw3IEBACiAJCTk1QTFF
MkU5MjVDQzc1QTkwMDI2OEM4RSAvKiBNZWRpYUNvbnRyb2xzQ29udGV4dE1lbnVJdGVtLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NUExRTJFNzI1Q0M3
NUE4MDAyNjhDOEUgLyogTWVkaWFDb250cm9sc0NvbnRleHRNZW51SXRlbS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTk1QUE1NzEwMjVFRUVEMzIw
MDRFOTI4MyAvKiBJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NUFBNTcwRTI1RUVFRDMxMDA0RTkyODMgLyog
SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlci5oICovOyB9OwogCQk5NURGOUQyNTI1MkJFREIyMDAw
RDdGNDYgLyogUG9pbnRlckNoYXJhY3RlcmlzdGljcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTVERjlEMjMyNTJCRUQ5OTAwMEQ3RjQ2IC8qIFBvaW50
ZXJDaGFyYWN0ZXJpc3RpY3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk5NUY0NUQyNzI2NERGQkYxMDBEMEI4QjggLyogUGFnZUNvbG9yU2FtcGxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTVGNDVE
MjYyNjRERkJFQjAwRDBCOEI4IC8qIFBhZ2VDb2xvclNhbXBsZXIuaCAqLzsgfTsKIAkJOTcwNTk5
N0ExMDdEOTc1MjAwQTUwQTdDIC8qIFBvbGljeUNoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MDU5OTc2MTA3RDk3NTIwMEE1MEE3QyAvKiBQ
b2xpY3lDaGVja2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJOTcwQjcyOEExNDRGRkFDNjAwRjAwQTM3IC8qIEV2ZW50SW50ZXJmYWNlcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcwQjcyODkxNDRG
RkFDNjAwRjAwQTM3IC8qIEV2ZW50SW50ZXJmYWNlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTk3MEI3MkE2MTQ1MDA4RUIwMEYwMEEzNyAvKiBF
dmVudEhlYWRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk3MEI3MkE1MTQ1MDA4RUIwMEYwMEEzNyAvKiBFdmVudEhlYWRlcnMuaCAqLzsgfTsKQEAg
LTExOTM3LDYgKzExOTM4LDggQEAKIAkJOTVBQTU3MEQyNUVFRUQzMDAwNEU5MjgzIC8qIEluc3Bl
Y3RvckNhbnZhc0NhbGxUcmFjZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTk1QUE1NzBFMjVFRUVEMzEwMDRFOTI4MyAvKiBJbnNwZWN0b3JDYW52YXNDYWxs
VHJhY2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckNhbnZh
c0NhbGxUcmFjZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTVERjlEMjMyNTJC
RUQ5OTAwMEQ3RjQ2IC8qIFBvaW50ZXJDaGFyYWN0ZXJpc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UG9pbnRlckNoYXJhY3RlcmlzdGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
NUY0NUQyNDI2NERGQkVCMDBEMEI4QjggLyogUGFnZUNvbG9yU2FtcGxlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQYWdlQ29sb3JTYW1wbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTVGNDVEMjYyNjRERkJFQjAwRDBCOEI4IC8qIFBhZ2VDb2xvclNhbXBsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUGFnZUNvbG9yU2FtcGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5NzA1OTk3NTEwN0Q5NzUyMDBBNTBBN0MgLyogUG9saWN5Q2hlY2tlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2xpY3lDaGVja2VyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcwNTk5NzYxMDdEOTc1MjAwQTUwQTdDIC8qIFBvbGlj
eUNoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9saWN5Q2hlY2tl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzBCNzI4OTE0NEZGQUM2MDBGMDBB
MzcgLyogRXZlbnRJbnRlcmZhY2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEV2ZW50SW50ZXJmYWNlcy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9FdmVudElu
dGVyZmFjZXMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTIyNDAy
LDYgKzIyNDA1LDggQEAKIAkJCQkwMDE0NjI4OTEwM0NEMURFMDAwQjIwREIgLyogT3JpZ2luQWNj
ZXNzRW50cnkuaCAqLywKIAkJCQk2NUZFQTg2ODA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5jcHAg
Ki8sCiAJCQkJNjVBMjE0NjcwOTdBMzI5MTAwQjkwNTBBIC8qIFBhZ2UuaCAqLywKKwkJCQk5NUY0
NUQyNDI2NERGQkVCMDBEMEI4QjggLyogUGFnZUNvbG9yU2FtcGxlci5jcHAgKi8sCisJCQkJOTVG
NDVEMjYyNjRERkJFQjAwRDBCOEI4IC8qIFBhZ2VDb2xvclNhbXBsZXIuaCAqLywKIAkJCQlDRDVF
NUI2MDFBMTVGMTU2MDAwQzYwOUUgLyogUGFnZUNvbmZpZ3VyYXRpb24uY3BwICovLAogCQkJCUNE
NUU1QjVFMUExNUNFNTQwMDBDNjA5RSAvKiBQYWdlQ29uZmlndXJhdGlvbi5oICovLAogCQkJCURB
QUNCM0Q5MTZGMjQxNjQwMDY2NjEzNSAvKiBQYWdlQ29uc29sZUNsaWVudC5jcHAgKi8sCkBAIC0z
NDM1Niw2ICszNDM2MSw3IEBACiAJCQkJODMyNkJGOEUyNEQzNUMzMzAwMUY4QTg1IC8qIE92ZXJT
YW1wbGVUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NUEyMTQ2ODA5N0EzMjkxMDBCOTA1MEEg
LyogUGFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTEyNzhENUUyMURFREFENjAwQjU3MTg0IC8q
IFBhZ2VBdWRpdEFnZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk5NUY0NUQyNzI2NERGQkYxMDBE
MEI4QjggLyogUGFnZUNvbG9yU2FtcGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q1RTVCNUYx
QTE1Q0U1NDAwMEM2MDlFIC8qIFBhZ2VDb25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNUI4MUNDMjFGQUE0NEJDMDAzN0QxRTYgLyogUGFnZUNvbnNvbGVBZ2VudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJREFFRDIwMzExNkYyNDQ0ODAwNzBFQzBGIC8qIFBhZ2VDb25zb2xlQ2xpZW50
LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IGZlMzY4MmRmZGJj
NmIyOWY1NzBkNmZhOGNmM2E3OTJhMzkyNzk0YTQuLjk4NWQxNDhmYWJiNWFhNWE0NTI0Yzg0YmVj
ZTRjNmQzNjdmNDUzZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtODIsNyArODIsNiBA
QAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRl
ICJGcmFtZUxvYWRlckNsaWVudC5oIgotI2luY2x1ZGUgIkZyYW1lU25hcHNob3R0aW5nLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiRnVsbHNjcmVlbk1hbmFnZXIuaCIKICNp
bmNsdWRlICJHQ1JlYWNoYWJsZVJlZi5oIgpAQCAtMTI1LDcgKzEyNCw2IEBACiAjaW5jbHVkZSAi
SURCT3BlbkRCUmVxdWVzdC5oIgogI2luY2x1ZGUgIklkbGVDYWxsYmFja0NvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkltYWdlTG9hZGVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VPdmVy
bGF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgpA
QCAtMTc4LDExICsxNzYsOSBAQAogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVhbHRp
bWVNZWRpYVNvdXJjZUNlbnRlci5oIgogI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIK
LSNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVh
ay5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0
ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0Lmgi
CkBAIC0zMjczLDcgKzMyNjksNyBAQCB2b2lkIERvY3VtZW50OjplbnF1ZXVlUGFpbnRUaW1pbmdF
bnRyeUlmTmVlZGVkKCkKICAgICBpZiAoIXZpZXcoKS0+aXNWaXN1YWxseU5vbkVtcHR5KCkgfHwg
dmlldygpLT5uZWVkc0xheW91dCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIXZpZXco
KS0+aGFzQ29udGVuZnVsRGVzY2VuZGFudHMoKSkKKyAgICBpZiAoIXZpZXcoKS0+aGFzQ29udGVu
dGZ1bERlc2NlbmRhbnRzKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghQ29udGVudGZ1
bFBhaW50Q2hlY2tlcjo6cXVhbGlmaWVzRm9yQ29udGVudGZ1bFBhaW50KCp2aWV3KCkpKQpAQCAt
MzI4MSw4ICszMjc3LDYgQEAgdm9pZCBEb2N1bWVudDo6ZW5xdWV1ZVBhaW50VGltaW5nRW50cnlJ
Zk5lZWRlZCgpCiAKICAgICBkb21XaW5kb3coKS0+cGVyZm9ybWFuY2UoKS5yZXBvcnRGaXJzdENv
bnRlbnRmdWxQYWludCgpOwogICAgIG1fZGlkRW5xdWV1ZUZpcnN0Q29udGVudGZ1bFBhaW50ID0g
dHJ1ZTsKLQotICAgIGRldGVybWluZVNhbXBsZWRQYWdlVG9wQ29sb3IoKTsKIH0KIAogRXhjZXB0
aW9uT3I8dm9pZD4gRG9jdW1lbnQ6OndyaXRlKERvY3VtZW50KiByZXNwb25zaWJsZURvY3VtZW50
LCBTZWdtZW50ZWRTdHJpbmcmJiB0ZXh0KQpAQCAtMzkwMywxOTcgKzM4OTcsNiBAQCB2b2lkIERv
Y3VtZW50Ojp0aGVtZUNvbG9yQ2hhbmdlZCgpCiAgICAgICAgIHBhZ2UtPmNocm9tZSgpLmNsaWVu
dCgpLnRoZW1lQ29sb3JDaGFuZ2VkKCk7CiB9CiAKLXN0YXRpYyBib29sIGlzVmFsaWRQYWdlU2Ft
cGxlTG9jYXRpb24oRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBJbnRQb2ludCYgbG9jYXRpb24p
Ci17Ci0gICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMjUxNjc+IChTYW1wbGVk
IFBhZ2UgVG9wIENvbG9yOiBob29rIGludG8gcGFpbnRpbmcgbG9naWMgaW5zdGVhZCBvZiB0YWtp
bmcgc25hcHNob3RzKQotCi0gICAgY29uc3RleHByIE9wdGlvblNldDxIaXRUZXN0UmVxdWVzdDo6
VHlwZT4gaGl0VGVzdFJlcXVlc3RUeXBlcyB7IEhpdFRlc3RSZXF1ZXN0OjpUeXBlOjpSZWFkT25s
eSwgSGl0VGVzdFJlcXVlc3Q6OlR5cGU6Oklnbm9yZUNTU1BvaW50ZXJFdmVudHNQcm9wZXJ0eSwg
SGl0VGVzdFJlcXVlc3Q6OlR5cGU6OkRpc2FsbG93VXNlckFnZW50U2hhZG93Q29udGVudCwgSGl0
VGVzdFJlcXVlc3Q6OlR5cGU6OkNvbGxlY3RNdWx0aXBsZUVsZW1lbnRzLCBIaXRUZXN0UmVxdWVz
dDo6VHlwZTo6SW5jbHVkZUFsbEVsZW1lbnRzVW5kZXJQb2ludCB9OwotICAgIEhpdFRlc3RSZXN1
bHQgaGl0VGVzdFJlc3VsdChsb2NhdGlvbik7Ci0gICAgZG9jdW1lbnQuaGl0VGVzdChoaXRUZXN0
UmVxdWVzdFR5cGVzLCBoaXRUZXN0UmVzdWx0KTsKLQotICAgIGZvciAoYXV0byYgaGl0VGVzdE5v
ZGUgOiBoaXRUZXN0UmVzdWx0Lmxpc3RCYXNlZFRlc3RSZXN1bHQoKSkgewotICAgICAgICBhdXRv
JiBub2RlID0gaGl0VGVzdE5vZGUuZ2V0KCk7Ci0KLSAgICAgICAgYXV0byogcmVuZGVyZXIgPSBu
b2RlLnJlbmRlcmVyKCk7Ci0gICAgICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gU2tpcCBpbWFnZXMgKGJvdGggYDxpbWc+YCBhbmQgQ1NT
IGBiYWNrZ3JvdW5kLWltYWdlYCkgYXMgdGhleSdyZSBsaWtlbHkgbm90IGEgc29saWQgY29sb3Iu
Ci0gICAgICAgIGlmIChpczxSZW5kZXJJbWFnZT4ocmVuZGVyZXIpIHx8IHJlbmRlcmVyLT5zdHls
ZSgpLmhhc0JhY2tncm91bmRJbWFnZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIC8vIFNraXAgbm9kZXMgd2l0aCBhbmltYXRpb25zIGFzIHRoZSBzYW1wbGUgbWF5IGdl
dCBhbiBvZGQgY29sb3IgaWYgdGhlIGFuaW1hdGlvbiBpcyBpbi1wcm9ncmVzcy4KLSAgICAgICAg
aWYgKHJlbmRlcmVyLT5zdHlsZSgpLmhhc1RyYW5zaXRpb25zKCkgfHwgcmVuZGVyZXItPnN0eWxl
KCkuaGFzQW5pbWF0aW9ucygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
IC8vIFNraXAgYDxjYW52YXM+YCBidXQgb25seSBpZiB0aGV5J3ZlIGJlZW4gZHJhd24gaW50by4g
R3Vlc3MgdGhpcyBieSBzZWVpbmcgaWYgdGhlcmUncyBhbHJlYWR5Ci0gICAgICAgIC8vIGEgYENh
bnZhc1JlbmRlcmluZ0NvbnRleHRgLCB3aGljaCBpcyBvbmx5IGNyZWF0ZWQgYnkgSmF2YVNjcmlw
dC4KLSAgICAgICAgaWYgKGlzPEhUTUxDYW52YXNFbGVtZW50Pihub2RlKSAmJiBkb3duY2FzdDxI
VE1MQ2FudmFzRWxlbWVudD4obm9kZSkucmVuZGVyaW5nQ29udGV4dCgpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIFNraXAgM3JkLXBhcnR5IGA8aWZyYW1lPmAgYXMg
dGhlIGNvbnRlbnQgbGlrZWx5IHdvbid0IG1hdGNoIHRoZSByZXN0IG9mIHRoZSBwYWdlLgotICAg
ICAgICBpZiAoaXM8SFRNTElGcmFtZUVsZW1lbnQ+KG5vZGUpICYmICFhcmVSZWdpc3RyYWJsZURv
bWFpbnNFcXVhbChkb3duY2FzdDxIVE1MSUZyYW1lRWxlbWVudD4obm9kZSkubG9jYXRpb24oKSwg
ZG9jdW1lbnQudXJsKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgT3B0aW9uYWw8TGFiPGZsb2F0Pj4gc2FtcGxlUGFn
ZUNvbG9yKERvY3VtZW50JiBkb2N1bWVudCwgSW50UG9pbnQmJiBsb2NhdGlvbikKLXsKLSAgICAv
LyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIyNTE2Nz4gKFNhbXBsZWQgUGFnZSBUb3Ag
Q29sb3I6IGhvb2sgaW50byBwYWludGluZyBsb2dpYyBpbnN0ZWFkIG9mIHRha2luZyBzbmFwc2hv
dHMpCi0KLSAgICBpZiAoIWlzVmFsaWRQYWdlU2FtcGxlTG9jYXRpb24oZG9jdW1lbnQsIGxvY2F0
aW9uKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIEFTU0VSVChkb2N1bWVu
dC52aWV3KCkpOwotICAgIGF1dG8gc25hcHNob3QgPSBzbmFwc2hvdEZyYW1lUmVjdChkb2N1bWVu
dC52aWV3KCktPmZyYW1lKCksIEludFJlY3QobG9jYXRpb24sIEludFNpemUoMSwgMSkpLCBTbmFw
c2hvdE9wdGlvbnNFeGNsdWRlU2VsZWN0aW9uSGlnaGxpZ2h0aW5nIHwgU25hcHNob3RPcHRpb25z
UGFpbnRFdmVyeXRoaW5nRXhjbHVkaW5nU2VsZWN0aW9uKTsKLSAgICBpZiAoIXNuYXBzaG90KQot
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgYXV0byBzbmFwc2hvdERhdGEgPSBz
bmFwc2hvdC0+dG9CR1JBRGF0YSgpOwotICAgIHJldHVybiBjb252ZXJ0Q29sb3I8TGFiPGZsb2F0
Pj4oU1JHQkE8dWludDhfdD4geyBzbmFwc2hvdERhdGFbMl0sIHNuYXBzaG90RGF0YVsxXSwgc25h
cHNob3REYXRhWzBdLCBzbmFwc2hvdERhdGFbM10gfSk7Ci19Ci0KLXN0YXRpYyBkb3VibGUgY29s
b3JEaWZmZXJlbmNlKExhYjxmbG9hdD4mIGxocywgTGFiPGZsb2F0PiYgcmhzKQotewotICAgIHJl
dHVybiBzcXJ0KHBvdyhyaHMubGlnaHRuZXNzIC0gbGhzLmxpZ2h0bmVzcywgMikgKyBwb3cocmhz
LmEgLSBsaHMuYSwgMikgKyBwb3cocmhzLmIgLSBsaHMuYiwgMikpOwotfQotCi1zdGF0aWMgTGFi
PGZsb2F0PiBhdmVyYWdlQ29sb3IoTGFiPGZsb2F0PiBjb2xvcnNbXSwgc2l6ZV90IGNvdW50KQot
ewotICAgIGZsb2F0IHRvdGFsTGlnaHRuZXNzID0gMDsKLSAgICBmbG9hdCB0b3RhbEEgPSAwOwot
ICAgIGZsb2F0IHRvdGFsQiA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7Ci0gICAgICAgIHRvdGFsTGlnaHRuZXNzICs9IGNvbG9yc1tpXS5saWdodG5lc3M7Ci0g
ICAgICAgIHRvdGFsQSArPSBjb2xvcnNbaV0uYTsKLSAgICAgICAgdG90YWxCICs9IGNvbG9yc1tp
XS5iOwotICAgIH0KLSAgICByZXR1cm4gewotICAgICAgICB0b3RhbExpZ2h0bmVzcyAvIGNvdW50
LAotICAgICAgICB0b3RhbEEgLyBjb3VudCwKLSAgICAgICAgdG90YWxCIC8gY291bnQsCi0gICAg
ICAgIDEsCi0gICAgfTsKLX0KLQotdm9pZCBEb2N1bWVudDo6ZGV0ZXJtaW5lU2FtcGxlZFBhZ2VU
b3BDb2xvcigpCi17Ci0gICAgaWYgKG1fc2FtcGxlZFBhZ2VUb3BDb2xvci5pc1ZhbGlkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gbWF4RGlmZmVyZW5jZSA9IHNldHRpbmdzKCkuc2Ft
cGxlZFBhZ2VUb3BDb2xvck1heERpZmZlcmVuY2UoKTsKLSAgICBpZiAobWF4RGlmZmVyZW5jZSA8
PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWlzVG9wRG9jdW1lbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYXV0byogZnJhbWVWaWV3ID0gdmlldygpOwotICAgIGlmICghZnJh
bWVWaWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIG5vdGlmeURpZFNhbXBsZVBhZ2VU
b3BDb2xvck9uU2NvcGVFeGl0ID0gbWFrZVNjb3BlRXhpdChbJl0gewotICAgICAgICBpZiAoYXV0
byogcGFnZSA9IHRoaXMtPnBhZ2UoKSkKLSAgICAgICAgICAgIHBhZ2UtPmNocm9tZSgpLmNsaWVu
dCgpLnNhbXBsZWRQYWdlVG9wQ29sb3JDaGFuZ2VkKCk7Ci0gICAgfSk7Ci0KLSAgICAvLyBEZWNy
ZWFzZSB0aGUgd2lkdGggYnkgb25lIHBpeGVsIHNvIHRoYXQgdGhlIGxhc3Qgc25hcHNob3QgaXMg
d2l0aGluIGJvdW5kcyBhbmQgbm90IG9mZi1ieS1vbmUuCi0gICAgYXV0byBmcmFtZVdpZHRoID0g
ZnJhbWVWaWV3LT5jb250ZW50c1dpZHRoKCkgLSAxOwotCi0gICAgY29uc3RleHByIGF1dG8gbnVt
U25hcHNob3RzID0gNTsKLSAgICBzaXplX3Qgbm9uTWF0Y2hpbmdDb2xvckluZGV4ID0gbnVtU25h
cHNob3RzOwotCi0gICAgTGFiPGZsb2F0PiBzbmFwc2hvdHNbbnVtU25hcHNob3RzXTsKLSAgICBk
b3VibGUgZGlmZmVyZW5jZXNbbnVtU25hcHNob3RzIC0gMV07Ci0KLSAgICBhdXRvIHNob3VsZFN0
b3BBZnRlckZpbmRpbmdOb25NYXRjaGluZ0NvbG9yID0gWyZdIChzaXplX3QgaSkgLT4gYm9vbCB7
Ci0gICAgICAgIC8vIEJhaWwgaWYgdGhlIG5vbi1tYXRjaGluZyBjb2xvciBpcyBub3QgdGhlIGZp
cnN0IG9yIGxhc3Qgc25hcHNob3QsIG9yIHRoZXJlIGFscmVhZHkgaXMgYW4gbm9uLW1hdGNoaW5n
IGNvbG9yLgotICAgICAgICBpZiAoKGkgJiYgaSA8IG51bVNuYXBzaG90cyAtIDEpIHx8IG5vbk1h
dGNoaW5nQ29sb3JJbmRleCAhPSBudW1TbmFwc2hvdHMpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgICAgICBub25NYXRjaGluZ0NvbG9ySW5kZXggPSBpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtU25hcHNob3Rz
OyArK2kpIHsKLSAgICAgICAgYXV0byBzbmFwc2hvdCA9IHNhbXBsZVBhZ2VDb2xvcigqdGhpcywg
SW50UG9pbnQoZnJhbWVXaWR0aCAqIGkgLyAobnVtU25hcHNob3RzIC0gMSksIDApKTsKLSAgICAg
ICAgaWYgKCFzbmFwc2hvdCkgewotICAgICAgICAgICAgaWYgKHNob3VsZFN0b3BBZnRlckZpbmRp
bmdOb25NYXRjaGluZ0NvbG9yKGkpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgc25hcHNob3RzW2ldID0gKnNuYXBz
aG90OwotCi0gICAgICAgIGlmIChpKSB7Ci0gICAgICAgICAgICAvLyBFYWNoIGBkaWZmZXJlbmNl
YCBpdGVtIGNvbXBhcmVzIGBpYCB3aXRoIGBpIC0gMWAgc28gaWYgdGhlIGZpcnN0IGNvbXBhcmlz
b24gKGBpID09IDFgKQotICAgICAgICAgICAgLy8gaXMgdG9vIGxhcmdlIG9mIGEgZGlmZmVyZW5j
ZSwgd2Ugc2hvdWxkIHRyZWF0IGBpIC0gMWAgKGkuZS4gYDBgKSBhcyB0aGUgcHJvYmxlbSBzaW5j
ZQotICAgICAgICAgICAgLy8gd2Ugb25seSBhbGxvdyBmb3Igbm9uLW1hdGNoaW5nIGNvbG9ycyBi
ZWluZyB0aGUgZmlyc3Qgb3IgbGFzdCBzYW1wbGVkIGNvbG9yLgotICAgICAgICAgICAgYXV0byBl
ZmZlY3RpdmVOb25NYXRjaGluZ0NvbG9ySW5kZXggPSBpID09IDEgPyAwIDogaTsKLQotICAgICAg
ICAgICAgZGlmZmVyZW5jZXNbaSAtIDFdID0gY29sb3JEaWZmZXJlbmNlKHNuYXBzaG90c1tpIC0g
MV0sIHNuYXBzaG90c1tpXSk7Ci0gICAgICAgICAgICBpZiAoZGlmZmVyZW5jZXNbaSAtIDFdID4g
bWF4RGlmZmVyZW5jZSkgewotICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdG9wQWZ0ZXJGaW5k
aW5nTm9uTWF0Y2hpbmdDb2xvcihlZmZlY3RpdmVOb25NYXRjaGluZ0NvbG9ySW5kZXgpKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRvdWJsZSBjdW11bHVhdGl2ZURpZmZlcmVuY2UgPSAw
OwotICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBpOyArK2opIHsKLSAgICAgICAg
ICAgICAgICBpZiAoaiA9PSBub25NYXRjaGluZ0NvbG9ySW5kZXgpCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGN1bXVsdWF0aXZlRGlmZmVyZW5jZSArPSBk
aWZmZXJlbmNlc1tqXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjdW11bHVhdGl2
ZURpZmZlcmVuY2UgPiBtYXhEaWZmZXJlbmNlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNob3Vs
ZFN0b3BBZnRlckZpbmRpbmdOb25NYXRjaGluZ0NvbG9yKGVmZmVjdGl2ZU5vbk1hdGNoaW5nQ29s
b3JJbmRleCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBhbHJlYWR5
IGlkZW50aWZpZWQgYSBub24tbWF0Y2hpbmcgc25hcHNob3QgYW5kIHRoZSBkaWZmZXJlbmNlIGJl
dHdlZW4gdGhlIGZpcnN0Ci0gICAgICAgICAgICAgICAgICAgIC8vIGFuZCBzZWNvbmQgc25hcHNo
b3RzIG9yIHRoZSBzZWNvbmQtdG8tbGFzdCBhbmQgbGFzdCBzbmFwc2hvdHMgaXMgbGVzcyB0aGFu
IHRoZSBtYXhpbXVtLCBtYXJrCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBmaXJzdC9sYXN0
IHNuYXBzaG90IGFzIG5vbi1tYXRjaGluZyB0byBnaXZlIGEgY2hhbmNlIGZvciB0aGUgcmVzdCBv
ZiB0aGUgc25hcHNob3RzIHRvIG1hdGNoLgotICAgICAgICAgICAgICAgICAgICBpZiAobm9uTWF0
Y2hpbmdDb2xvckluZGV4ID09IG51bVNuYXBzaG90cyAmJiAoIWkgfHwgaSA9PSBudW1TbmFwc2hv
dHMgLSAxKSAmJiBjdW11bHVhdGl2ZURpZmZlcmVuY2UgLSBkaWZmZXJlbmNlc1tpIC0gMV0gPD0g
bWF4RGlmZmVyZW5jZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbm9uTWF0Y2hpbmdDb2xv
ckluZGV4ID0gZWZmZWN0aXZlTm9uTWF0Y2hpbmdDb2xvckluZGV4OwotICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIERlY3JlYXNlIHRo
ZSBoZWlnaHQgYnkgb25lIHBpeGVsIHNvIHRoYXQgdGhlIGxhc3Qgc25hcHNob3QgaXMgd2l0aGlu
IGJvdW5kcyBhbmQgbm90IG9mZi1ieS1vbmUuCi0gICAgYXV0byBtaW5IZWlnaHQgPSBzZXR0aW5n
cygpLnNhbXBsZWRQYWdlVG9wQ29sb3JNaW5IZWlnaHQoKSAtIDE7Ci0gICAgaWYgKG1pbkhlaWdo
dCA+IDApIHsKLSAgICAgICAgaWYgKG5vbk1hdGNoaW5nQ29sb3JJbmRleCkgewotICAgICAgICAg
ICAgaWYgKGF1dG8gbGVmdE1pZGRsZVNuYXBzaG90ID0gc2FtcGxlUGFnZUNvbG9yKCp0aGlzLCBJ
bnRQb2ludCgwLCBtaW5IZWlnaHQpKSkgewotICAgICAgICAgICAgICAgIGlmIChjb2xvckRpZmZl
cmVuY2UoKmxlZnRNaWRkbGVTbmFwc2hvdCwgc25hcHNob3RzWzBdKSA+IG1heERpZmZlcmVuY2Up
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChub25NYXRjaGluZ0NvbG9ySW5kZXggIT0gbnVtU25hcHNob3RzIC0gMSkg
ewotICAgICAgICAgICAgaWYgKGF1dG8gcmlnaHRNaWRkbGVTbmFwc2hvdCA9IHNhbXBsZVBhZ2VD
b2xvcigqdGhpcywgSW50UG9pbnQoZnJhbWVXaWR0aCwgbWluSGVpZ2h0KSkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoY29sb3JEaWZmZXJlbmNlKCpyaWdodE1pZGRsZVNuYXBzaG90LCBzbmFwc2hv
dHNbbnVtU25hcHNob3RzIC0gMV0pID4gbWF4RGlmZmVyZW5jZSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgYXV0byBz
bmFwc2hvdHNUb0F2ZXJhZ2UgPSBzbmFwc2hvdHM7Ci0gICAgYXV0byB2YWxpZFNuYXBzaG90Q291
bnQgPSBudW1TbmFwc2hvdHM7Ci0gICAgaWYgKCFub25NYXRjaGluZ0NvbG9ySW5kZXgpIHsKLSAg
ICAgICAgLy8gU2tpcCB0aGUgZmlyc3Qgc25hcHNob3QgYnkgbW92aW5nIHRoZSBwb2ludGVyIHRo
YXQgaW5kaWNhdGVzIHdoZXJlIHRoZSBzbmFwc2hvdCBhcnJheQotICAgICAgICAvLyBzdGFydHMg
YW5kIGRlY3JlYXNpbmcgdGhlIGNvdW50IG9mIHNuYXBzaG90cyB0byBhdmVyYWdlLgotICAgICAg
ICArK3NuYXBzaG90c1RvQXZlcmFnZTsKLSAgICAgICAgLS12YWxpZFNuYXBzaG90Q291bnQ7Ci0g
ICAgfSBlbHNlIGlmIChub25NYXRjaGluZ0NvbG9ySW5kZXggPT0gbnVtU25hcHNob3RzIC0gMSkg
ewotICAgICAgICAvLyBTa2lwIHRoZSBsYXN0IHNuYXBzaG90IGJ5IGRlY3JlYXNpbmcgdGhlIGNv
dW50IG9mIHNuYXBzaG90cyB0byBhdmVyYWdlLgotICAgICAgICAtLXZhbGlkU25hcHNob3RDb3Vu
dDsKLSAgICB9Ci0gICAgbV9zYW1wbGVkUGFnZVRvcENvbG9yID0gYXZlcmFnZUNvbG9yKHNuYXBz
aG90c1RvQXZlcmFnZSwgdmFsaWRTbmFwc2hvdENvdW50KTsKLX0KLQogI2lmIEVOQUJMRShEQVJL
X01PREVfQ1NTKQogc3RhdGljIHZvaWQgcHJvY2Vzc0NvbG9yU2NoZW1lU3RyaW5nKFN0cmluZ1Zp
ZXcgY29sb3JTY2hlbWUsIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChTdHJpbmdWaWV3IGtleSk+
JiBjYWxsYmFjaykKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggMzYxYzlmODZhMDM3ZGQ2ZjRh
NGFjMzA3YjBhNDVmZmUyN2U3YWE3Ny4uODRmZDIxYTY2ZDc4YTRmNDI4NjdmMWY0ZDA1NDRiNDY2
OTg1MzIwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTc0NCw4ICs3NDQsNiBAQCBwdWJsaWM6
CiAKICAgICBjb25zdCBDb2xvciYgdGhlbWVDb2xvcigpOwogCi0gICAgY29uc3QgQ29sb3ImIHNh
bXBsZWRQYWdlVG9wQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZWRQYWdlVG9wQ29sb3I7
IH0KLQogICAgIHZvaWQgc2V0VGV4dENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikgeyBtX3RleHRD
b2xvciA9IGNvbG9yOyB9CiAgICAgY29uc3QgQ29sb3ImIHRleHRDb2xvcigpIGNvbnN0IHsgcmV0
dXJuIG1fdGV4dENvbG9yOyB9CiAKQEAgLTE2NzcsOCArMTY3NSw2IEBAIHByaXZhdGU6CiAgICAg
V2Vha1B0cjxIVE1MTWV0YUVsZW1lbnQ+IGRldGVybWluZUFjdGl2ZVRoZW1lQ29sb3JNZXRhRWxl
bWVudCgpOwogICAgIHZvaWQgdGhlbWVDb2xvckNoYW5nZWQoKTsKIAotICAgIHZvaWQgZGV0ZXJt
aW5lU2FtcGxlZFBhZ2VUb3BDb2xvcigpOwotCiAgICAgdm9pZCBpbnZhbGlkYXRlQWNjZXNzS2V5
Q2FjaGVTbG93Q2FzZSgpOwogICAgIHZvaWQgYnVpbGRBY2Nlc3NLZXlDYWNoZSgpOwogCkBAIC0x
ODAyLDggKzE3OTgsNiBAQCBwcml2YXRlOgogICAgIFdlYWtQdHI8SFRNTE1ldGFFbGVtZW50PiBt
X2FjdGl2ZVRoZW1lQ29sb3JNZXRhRWxlbWVudDsKICAgICBDb2xvciBtX2FwcGxpY2F0aW9uTWFu
aWZlc3RUaGVtZUNvbG9yOwogCi0gICAgQ29sb3IgbV9zYW1wbGVkUGFnZVRvcENvbG9yOwotCiAg
ICAgQ29sb3IgbV90ZXh0Q29sb3IgeyBDb2xvcjo6YmxhY2sgfTsKICAgICBDb2xvciBtX2xpbmtD
b2xvcjsKICAgICBDb2xvciBtX3Zpc2l0ZWRMaW5rQ29sb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAKaW5kZXggOTcyNGRhZWNlYzJhYTE2OTlhNGNiODk3ZDM0NjVlYjc3Nzc5YmM0Yy4uNjU4
M2MzNjlmZGExYzA2ZDk0Mzc1Y2NkYzIzZmM4YjcyMjMwYmY1YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcApAQCAtNDYxNyw3ICs0NjE3LDcgQEAgdm9pZCBGcmFtZVZpZXc6OmNoZWNrQW5k
RGlzcGF0Y2hEaWRSZWFjaFZpc3VhbGx5Tm9uRW1wdHlTdGF0ZSgpCiAgICAgICAgIGZyYW1lKCku
bG9hZGVyKCkuZGlkUmVhY2hWaXN1YWxseU5vbkVtcHR5U3RhdGUoKTsKIH0KIAotYm9vbCBGcmFt
ZVZpZXc6Omhhc0NvbnRlbmZ1bERlc2NlbmRhbnRzKCkgY29uc3QKK2Jvb2wgRnJhbWVWaWV3Ojpo
YXNDb250ZW50ZnVsRGVzY2VuZGFudHMoKSBjb25zdAogewogICAgIHJldHVybiBtX3Zpc3VhbGx5
Tm9uRW1wdHlDaGFyYWN0ZXJDb3VudCB8fCBtX3Zpc3VhbGx5Tm9uRW1wdHlQaXhlbENvdW50Owog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKaW5kZXggZjRhNjA3OGU5MjY3YWM0M2ZhNDMxZjVmOWVj
ODY3ZTk5MjEyZTA1Ni4uOWVkMWM3MjNlOTljMmEyY2E2MTljYzg4NWVlMmFjYTU2NjZmOWEwZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCkBAIC00MTMsNyArNDEzLDcgQEAgcHVibGljOgogICAg
IHZvaWQgaW5jcmVtZW50VmlzdWFsbHlOb25FbXB0eUNoYXJhY3RlckNvdW50KGNvbnN0IFN0cmlu
ZyYpOwogICAgIHZvaWQgaW5jcmVtZW50VmlzdWFsbHlOb25FbXB0eVBpeGVsQ291bnQoY29uc3Qg
SW50U2l6ZSYpOwogICAgIGJvb2wgaXNWaXN1YWxseU5vbkVtcHR5KCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZW50UXVhbGlmaWVzQXNWaXN1YWxseU5vbkVtcHR5OyB9Ci0gICAgYm9vbCBoYXNDb250
ZW5mdWxEZXNjZW5kYW50cygpIGNvbnN0OworICAgIGJvb2wgaGFzQ29udGVudGZ1bERlc2NlbmRh
bnRzKCkgY29uc3Q7CiAgICAgdm9pZCBjaGVja0FuZERpc3BhdGNoRGlkUmVhY2hWaXN1YWxseU5v
bkVtcHR5U3RhdGUoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5hYmxlRml4ZWRXaWR0
aEF1dG9TaXplTW9kZShib29sIGVuYWJsZSwgY29uc3QgSW50U2l6ZSYgbWluU2l6ZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmNwcAppbmRleCBlNjRmNzIxYzE4MGU1ODQ1Mjc0OWM1NmUwZTY5NmNkZjVkZGI4NDcy
Li5hZjk4NmRiMmM5NzdkOWNlNjc4ODk2ZDJiMDQ2OTIzNTYzM2Y0ZTU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAKQEAgLTg3LDYgKzg3LDcgQEAKICNpbmNsdWRlICJNZWRpYUNhblN0YXJ0TGlzdGVuZXIu
aCIKICNpbmNsdWRlICJNZWRpYVJlY29yZGVyUHJvdmlkZXIuaCIKICNpbmNsdWRlICJOYXZpZ2F0
b3IuaCIKKyNpbmNsdWRlICJQYWdlQ29sb3JTYW1wbGVyLmgiCiAjaW5jbHVkZSAiUGFnZUNvbmZp
Z3VyYXRpb24uaCIKICNpbmNsdWRlICJQYWdlQ29uc29sZUNsaWVudC5oIgogI2luY2x1ZGUgIlBh
Z2VEZWJ1Z2dhYmxlLmgiCkBAIC0xNjcyLDYgKzE2NzMsMTIgQEAgdm9pZCBQYWdlOjpkb0FmdGVy
VXBkYXRlUmVuZGVyaW5nKCkKICAgICAgICAgQVNTRVJUKCFmcmFtZVZpZXcgfHwgIWZyYW1lVmll
dy0+bmVlZHNMYXlvdXQoKSk7CiAgICAgfQogI2VuZGlmCisKKyAgICBpZiAoIW1fc2FtcGxlZFBh
Z2VUb3BDb2xvcikgeworICAgICAgICBtX3NhbXBsZWRQYWdlVG9wQ29sb3IgPSBQYWdlQ29sb3JT
YW1wbGVyOjpzYW1wbGVUb3AoKnRoaXMpOworICAgICAgICBpZiAobV9zYW1wbGVkUGFnZVRvcENv
bG9yKQorICAgICAgICAgICAgY2hyb21lKCkuY2xpZW50KCkuc2FtcGxlZFBhZ2VUb3BDb2xvckNo
YW5nZWQoKTsKKyAgICB9CiB9CiAKIHZvaWQgUGFnZTo6ZmluYWxpemVSZW5kZXJpbmdVcGRhdGUo
T3B0aW9uU2V0PEZpbmFsaXplUmVuZGVyaW5nVXBkYXRlRmxhZ3M+IGZsYWdzKQpAQCAtMjU1Niwx
MSArMjU2Myw3IEBAIENvbG9yIFBhZ2U6OnBhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvcigpIGNv
bnN0CiAKIENvbG9yIFBhZ2U6OnNhbXBsZWRQYWdlVG9wQ29sb3IoKSBjb25zdAogewotICAgIGF1
dG8qIGRvY3VtZW50ID0gbWFpbkZyYW1lKCkuZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50
KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgcmV0dXJuIGRvY3VtZW50LT5zYW1wbGVkUGFn
ZVRvcENvbG9yKCk7CisgICAgcmV0dXJuIG1fc2FtcGxlZFBhZ2VUb3BDb2xvci52YWx1ZU9yKENv
bG9yKCkpOwogfQogCiB2b2lkIFBhZ2U6OnNldFVuZGVyUGFnZUJhY2tncm91bmRDb2xvck92ZXJy
aWRlKENvbG9yJiYgdW5kZXJQYWdlQmFja2dyb3VuZENvbG9yT3ZlcnJpZGUpCkBAIC0zMjg1LDYg
KzMyODgsMTEgQEAgdm9pZCBQYWdlOjpkaWRDaGFuZ2VNYWluRG9jdW1lbnQoKQogICAgIG1fcnRj
Q29udHJvbGxlci5yZXNldChtX3Nob3VsZEVuYWJsZUlDRUNhbmRpZGF0ZUZpbHRlcmluZ0J5RGVm
YXVsdCk7CiAjZW5kaWYKICAgICBtX3BvaW50ZXJDYXB0dXJlQ29udHJvbGxlci0+cmVzZXQoKTsK
KworICAgIGlmIChtX3NhbXBsZWRQYWdlVG9wQ29sb3IpIHsKKyAgICAgICAgbV9zYW1wbGVkUGFn
ZVRvcENvbG9yID0gV1RGOjpudWxsb3B0OworICAgICAgICBjaHJvbWUoKS5jbGllbnQoKS5zYW1w
bGVkUGFnZVRvcENvbG9yQ2hhbmdlZCgpOworICAgIH0KIH0KIAogUmVuZGVyaW5nVXBkYXRlU2No
ZWR1bGVyJiBQYWdlOjpyZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXIoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAppbmRl
eCAyMGQ2ZDk2ZDc3NGUyMTcxM2Y0MzYxYzE2ZWE4YWNkMzQyYWVlYzJiLi5kYjU2M2RlZjFiMWE2
YzAxMjhlNDlhY2QzMjI3ZGQxNTU2MDViZmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaApAQCAtMjIsNiArMjIs
NyBAQAogCiAjaW5jbHVkZSAiQWN0aXZpdHlTdGF0ZS5oIgogI2luY2x1ZGUgIkFuaW1hdGlvbkZy
YW1lUmF0ZS5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRGlzYWJsZWRBZGFwdGF0
aW9ucy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRmluZE9wdGlvbnMuaCIK
QEAgLTk0LDcgKzk1LDYgQEAgY2xhc3MgQXV0aGVudGljYXRvckNvb3JkaW5hdG9yOwogY2xhc3Mg
QmFja0ZvcndhcmRDb250cm9sbGVyOwogY2xhc3MgQ2FjaGVTdG9yYWdlUHJvdmlkZXI7CiBjbGFz
cyBDaHJvbWU7Ci1jbGFzcyBDb2xvcjsKIGNsYXNzIENvbnRleHRNZW51Q29udHJvbGxlcjsKIGNs
YXNzIENvb2tpZUphcjsKIGNsYXNzIERPTVJlY3RMaXN0OwpAQCAtMTE1Niw2ICsxMTU2LDcgQEAg
cHJpdmF0ZToKICAgICBNb25vdG9uaWNUaW1lIG1fbGFzdFJlbmRlcmluZ1VwZGF0ZVRpbWVzdGFt
cDsKIAogICAgIENvbG9yIG1fdW5kZXJQYWdlQmFja2dyb3VuZENvbG9yT3ZlcnJpZGU7CisgICAg
T3B0aW9uYWw8Q29sb3I+IG1fc2FtcGxlZFBhZ2VUb3BDb2xvcjsKIAogICAgIGNvbnN0IGJvb2wg
bV9odHRwc1VwZ3JhZGVFbmFibGVkIHsgdHJ1ZSB9OwogICAgIG11dGFibGUgTWVkaWFTZXNzaW9u
R3JvdXBJZGVudGlmaWVyIG1fbWVkaWFTZXNzaW9uR3JvdXBJZGVudGlmaWVyOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29sb3JTYW1wbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZUNvbG9yU2FtcGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTA5ZmVjNWIwOGMxMmI4
NjY0MzE1MGE0YWQ4Nzg5NzdlZTNmYWY5YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZUNvbG9yU2FtcGxlci5jcHAKQEAgLTAsMCArMSwyNTUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUGFnZUNvbG9yU2FtcGxlci5oIgorCisjaW5jbHVkZSAiQ29udGVudGZ1bFBh
aW50Q2hlY2tlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJGcmFtZVNuYXBzaG90dGluZy5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgor
I2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTElGcmFtZUVsZW1l
bnQuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1
bHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkludFBvaW50LmgiCisj
aW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJOb2Rl
LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJlZ2lzdHJhYmxlRG9tYWluLmgiCisj
aW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNs
dWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSA8d3Rm
L0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1VSTC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRp
YyBib29sIGlzVmFsaWRTYW1wbGVMb2NhdGlvbihEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IElu
dFBvaW50JiBsb2NhdGlvbikKK3sKKyAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9i
LzIyNTE2Nz4gKFNhbXBsZWQgUGFnZSBUb3AgQ29sb3I6IGhvb2sgaW50byBwYWludGluZyBsb2dp
YyBpbnN0ZWFkIG9mIHRha2luZyBzbmFwc2hvdHMpCisKKyAgICBjb25zdGV4cHIgT3B0aW9uU2V0
PEhpdFRlc3RSZXF1ZXN0OjpUeXBlPiBoaXRUZXN0UmVxdWVzdFR5cGVzIHsgSGl0VGVzdFJlcXVl
c3Q6OlR5cGU6OlJlYWRPbmx5LCBIaXRUZXN0UmVxdWVzdDo6VHlwZTo6SWdub3JlQ1NTUG9pbnRl
ckV2ZW50c1Byb3BlcnR5LCBIaXRUZXN0UmVxdWVzdDo6VHlwZTo6RGlzYWxsb3dVc2VyQWdlbnRT
aGFkb3dDb250ZW50LCBIaXRUZXN0UmVxdWVzdDo6VHlwZTo6Q29sbGVjdE11bHRpcGxlRWxlbWVu
dHMsIEhpdFRlc3RSZXF1ZXN0OjpUeXBlOjpJbmNsdWRlQWxsRWxlbWVudHNVbmRlclBvaW50IH07
CisgICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0KGxvY2F0aW9uKTsKKyAgICBkb2N1bWVu
dC5oaXRUZXN0KGhpdFRlc3RSZXF1ZXN0VHlwZXMsIGhpdFRlc3RSZXN1bHQpOworCisgICAgZm9y
IChhdXRvJiBoaXRUZXN0Tm9kZSA6IGhpdFRlc3RSZXN1bHQubGlzdEJhc2VkVGVzdFJlc3VsdCgp
KSB7CisgICAgICAgIGF1dG8mIG5vZGUgPSBoaXRUZXN0Tm9kZS5nZXQoKTsKKworICAgICAgICBh
dXRvKiByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKCFyZW5kZXJlcikK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBTa2lwIGltYWdlcyAoYm90
aCBgPGltZz5gIGFuZCBDU1MgYGJhY2tncm91bmQtaW1hZ2VgKSBhcyB0aGV5J3JlIGxpa2VseSBu
b3QgYSBzb2xpZCBjb2xvci4KKyAgICAgICAgaWYgKGlzPFJlbmRlckltYWdlPihyZW5kZXJlcikg
fHwgcmVuZGVyZXItPnN0eWxlKCkuaGFzQmFja2dyb3VuZEltYWdlKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gU2tpcCBub2RlcyB3aXRoIGFuaW1hdGlvbnMgYXMg
dGhlIHNhbXBsZSBtYXkgZ2V0IGFuIG9kZCBjb2xvciBpZiB0aGUgYW5pbWF0aW9uIGlzIGluLXBy
b2dyZXNzLgorICAgICAgICBpZiAocmVuZGVyZXItPnN0eWxlKCkuaGFzVHJhbnNpdGlvbnMoKSB8
fCByZW5kZXJlci0+c3R5bGUoKS5oYXNBbmltYXRpb25zKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgLy8gU2tpcCBgPGNhbnZhcz5gIGJ1dCBvbmx5IGlmIHRoZXkndmUg
YmVlbiBkcmF3biBpbnRvLiBHdWVzcyB0aGlzIGJ5IHNlZWluZyBpZiB0aGVyZSdzIGFscmVhZHkK
KyAgICAgICAgLy8gYSBgQ2FudmFzUmVuZGVyaW5nQ29udGV4dGAsIHdoaWNoIGlzIG9ubHkgY3Jl
YXRlZCBieSBKYXZhU2NyaXB0LgorICAgICAgICBpZiAoaXM8SFRNTENhbnZhc0VsZW1lbnQ+KG5v
ZGUpICYmIGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50Pihub2RlKS5yZW5kZXJpbmdDb250ZXh0
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gU2tpcCAzcmQtcGFy
dHkgYDxpZnJhbWU+YCBhcyB0aGUgY29udGVudCBsaWtlbHkgd29uJ3QgbWF0Y2ggdGhlIHJlc3Qg
b2YgdGhlIHBhZ2UuCisgICAgICAgIGlmIChpczxIVE1MSUZyYW1lRWxlbWVudD4obm9kZSkgJiYg
IWFyZVJlZ2lzdHJhYmxlRG9tYWluc0VxdWFsKGRvd25jYXN0PEhUTUxJRnJhbWVFbGVtZW50Pihu
b2RlKS5sb2NhdGlvbigpLCBkb2N1bWVudC51cmwoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxMYWI8
ZmxvYXQ+PiBzYW1wbGVDb2xvcihEb2N1bWVudCYgZG9jdW1lbnQsIEludFBvaW50JiYgbG9jYXRp
b24pCit7CisgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMjUxNjc+IChTYW1w
bGVkIFBhZ2UgVG9wIENvbG9yOiBob29rIGludG8gcGFpbnRpbmcgbG9naWMgaW5zdGVhZCBvZiB0
YWtpbmcgc25hcHNob3RzKQorCisgICAgaWYgKCFpc1ZhbGlkU2FtcGxlTG9jYXRpb24oZG9jdW1l
bnQsIGxvY2F0aW9uKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIEFTU0VS
VChkb2N1bWVudC52aWV3KCkpOworICAgIGF1dG8gc25hcHNob3QgPSBzbmFwc2hvdEZyYW1lUmVj
dChkb2N1bWVudC52aWV3KCktPmZyYW1lKCksIEludFJlY3QobG9jYXRpb24sIEludFNpemUoMSwg
MSkpLCBTbmFwc2hvdE9wdGlvbnNFeGNsdWRlU2VsZWN0aW9uSGlnaGxpZ2h0aW5nIHwgU25hcHNo
b3RPcHRpb25zUGFpbnRFdmVyeXRoaW5nRXhjbHVkaW5nU2VsZWN0aW9uKTsKKyAgICBpZiAoIXNu
YXBzaG90KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgYXV0byBzbmFwc2hv
dERhdGEgPSBzbmFwc2hvdC0+dG9CR1JBRGF0YSgpOworICAgIHJldHVybiBjb252ZXJ0Q29sb3I8
TGFiPGZsb2F0Pj4oU1JHQkE8dWludDhfdD4geyBzbmFwc2hvdERhdGFbMl0sIHNuYXBzaG90RGF0
YVsxXSwgc25hcHNob3REYXRhWzBdLCBzbmFwc2hvdERhdGFbM10gfSk7Cit9CisKK3N0YXRpYyBk
b3VibGUgY29sb3JEaWZmZXJlbmNlKExhYjxmbG9hdD4mIGxocywgTGFiPGZsb2F0PiYgcmhzKQor
eworICAgIHJldHVybiBzcXJ0KHBvdyhyaHMubGlnaHRuZXNzIC0gbGhzLmxpZ2h0bmVzcywgMikg
KyBwb3cocmhzLmEgLSBsaHMuYSwgMikgKyBwb3cocmhzLmIgLSBsaHMuYiwgMikpOworfQorCitz
dGF0aWMgTGFiPGZsb2F0PiBhdmVyYWdlQ29sb3IoTGFiPGZsb2F0PiBjb2xvcnNbXSwgc2l6ZV90
IGNvdW50KQoreworICAgIGZsb2F0IHRvdGFsTGlnaHRuZXNzID0gMDsKKyAgICBmbG9hdCB0b3Rh
bEEgPSAwOworICAgIGZsb2F0IHRvdGFsQiA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjb3VudDsgKytpKSB7CisgICAgICAgIHRvdGFsTGlnaHRuZXNzICs9IGNvbG9yc1tpXS5saWdo
dG5lc3M7CisgICAgICAgIHRvdGFsQSArPSBjb2xvcnNbaV0uYTsKKyAgICAgICAgdG90YWxCICs9
IGNvbG9yc1tpXS5iOworICAgIH0KKyAgICByZXR1cm4geworICAgICAgICB0b3RhbExpZ2h0bmVz
cyAvIGNvdW50LAorICAgICAgICB0b3RhbEEgLyBjb3VudCwKKyAgICAgICAgdG90YWxCIC8gY291
bnQsCisgICAgICAgIDEsCisgICAgfTsKK30KKworT3B0aW9uYWw8Q29sb3I+IFBhZ2VDb2xvclNh
bXBsZXI6OnNhbXBsZVRvcChQYWdlJiBwYWdlKQoreworICAgIC8vIElmIGBXVEY6Om51bGxvcHRg
IGlzIHJldHVybmVkIHRoZW4gdGhhdCBtZWFucyB0aGF0IG5vIHNhbXBsZXMgd2VyZSB0YWtlbiAo
aS5lLiB0aGUgYFBhZ2VgIGlzIG5vdCByZWFkeSB5ZXQpLgorICAgIC8vIElmIGFuIGludmFsaWQg
YENvbG9yYCBpcyByZXR1cm5lZCB0aGVuIHRoYXQgbWVhbnMgdGhhdCBzYW1wbGVzIFdlcmUgdGFr
ZW4gYnV0IHRoZXkgd2VyZSB0b28gZGlmZmVyZW50LgorCisgICAgYXV0byBtYXhEaWZmZXJlbmNl
ID0gcGFnZS5zZXR0aW5ncygpLnNhbXBsZWRQYWdlVG9wQ29sb3JNYXhEaWZmZXJlbmNlKCk7Cisg
ICAgaWYgKG1heERpZmZlcmVuY2UgPD0gMCkgeworICAgICAgICAvLyBQcmV0ZW5kIHRoYXQgdGhl
IHNhbXBsZXMgYXJlIHRvbyBkaWZmZXJlbnQgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBj
YWxsZWQgYWdhaW4uCisgICAgICAgIHJldHVybiBDb2xvcigpOworICAgIH0KKworICAgIGF1dG8g
bWFpbkRvY3VtZW50ID0gbWFrZVJlZlB0cihwYWdlLm1haW5GcmFtZSgpLmRvY3VtZW50KCkpOwor
ICAgIGlmICghbWFpbkRvY3VtZW50KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisg
ICAgYXV0byBmcmFtZVZpZXcgPSBtYWtlUmVmUHRyKHBhZ2UubWFpbkZyYW1lKCkudmlldygpKTsK
KyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IC8vIERvbid0IHRha2Ugc2FtcGxlcyBpZiB0aGUgbGF5ZXIgdHJlZSBpcyBzdGlsbCBmcm96ZW4u
CisgICAgaWYgKGZyYW1lVmlldy0+bmVlZHNMYXlvdXQoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKworICAgIC8vIERvbid0IGF0dGVtcHQgdG8gaGl0IHRlc3Qgb3Igc2FtcGxlIGlm
IHdlIGRvbid0IGhhdmUgYW55IGNvbnRlbnQgeWV0LgorICAgIGlmICghZnJhbWVWaWV3LT5pc1Zp
c3VhbGx5Tm9uRW1wdHkoKSB8fCAhZnJhbWVWaWV3LT5oYXNDb250ZW50ZnVsRGVzY2VuZGFudHMo
KSB8fCAhQ29udGVudGZ1bFBhaW50Q2hlY2tlcjo6cXVhbGlmaWVzRm9yQ29udGVudGZ1bFBhaW50
KCpmcmFtZVZpZXcpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgLy8gRGVj
cmVhc2UgdGhlIHdpZHRoIGJ5IG9uZSBwaXhlbCBzbyB0aGF0IHRoZSBsYXN0IHNhbXBsZSBpcyB3
aXRoaW4gYm91bmRzIGFuZCBub3Qgb2ZmLWJ5LW9uZS4KKyAgICBhdXRvIGZyYW1lV2lkdGggPSBm
cmFtZVZpZXctPmNvbnRlbnRzV2lkdGgoKSAtIDE7CisKKyAgICBjb25zdGV4cHIgYXV0byBudW1T
YW1wbGVzID0gNTsKKyAgICBzaXplX3Qgbm9uTWF0Y2hpbmdDb2xvckluZGV4ID0gbnVtU2FtcGxl
czsKKworICAgIExhYjxmbG9hdD4gc2FtcGxlc1tudW1TYW1wbGVzXTsKKyAgICBkb3VibGUgZGlm
ZmVyZW5jZXNbbnVtU2FtcGxlcyAtIDFdOworCisgICAgYXV0byBzaG91bGRTdG9wQWZ0ZXJGaW5k
aW5nTm9uTWF0Y2hpbmdDb2xvciA9IFsmXSAoc2l6ZV90IGkpIC0+IGJvb2wgeworICAgICAgICAv
LyBCYWlsIGlmIHRoZSBub24tbWF0Y2hpbmcgY29sb3IgaXMgbm90IHRoZSBmaXJzdCBvciBsYXN0
IHNhbXBsZSwgb3IgdGhlcmUgYWxyZWFkeSBpcyBhbiBub24tbWF0Y2hpbmcgY29sb3IuCisgICAg
ICAgIGlmICgoaSAmJiBpIDwgbnVtU2FtcGxlcyAtIDEpIHx8IG5vbk1hdGNoaW5nQ29sb3JJbmRl
eCAhPSBudW1TYW1wbGVzKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgbm9u
TWF0Y2hpbmdDb2xvckluZGV4ID0gaTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVNhbXBsZXM7ICsraSkgeworICAgICAgICBh
dXRvIHNhbXBsZSA9IHNhbXBsZUNvbG9yKCptYWluRG9jdW1lbnQsIEludFBvaW50KGZyYW1lV2lk
dGggKiBpIC8gKG51bVNhbXBsZXMgLSAxKSwgMCkpOworICAgICAgICBpZiAoIXNhbXBsZSkgewor
ICAgICAgICAgICAgaWYgKHNob3VsZFN0b3BBZnRlckZpbmRpbmdOb25NYXRjaGluZ0NvbG9yKGkp
KQorICAgICAgICAgICAgICAgIHJldHVybiBDb2xvcigpOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKworICAgICAgICBzYW1wbGVzW2ldID0gKnNhbXBsZTsKKworICAgICAgICBp
ZiAoaSkgeworICAgICAgICAgICAgLy8gRWFjaCBgZGlmZmVyZW5jZWAgaXRlbSBjb21wYXJlcyBg
aWAgd2l0aCBgaSAtIDFgIHNvIGlmIHRoZSBmaXJzdCBjb21wYXJpc29uIChgaSA9PSAxYCkKKyAg
ICAgICAgICAgIC8vIGlzIHRvbyBsYXJnZSBvZiBhIGRpZmZlcmVuY2UsIHdlIHNob3VsZCB0cmVh
dCBgaSAtIDFgIChpLmUuIGAwYCkgYXMgdGhlIHByb2JsZW0gc2luY2UKKyAgICAgICAgICAgIC8v
IHdlIG9ubHkgYWxsb3cgZm9yIG5vbi1tYXRjaGluZyBjb2xvcnMgYmVpbmcgdGhlIGZpcnN0IG9y
IGxhc3Qgc2FtcGxlZCBjb2xvci4KKyAgICAgICAgICAgIGF1dG8gZWZmZWN0aXZlTm9uTWF0Y2hp
bmdDb2xvckluZGV4ID0gaSA9PSAxID8gMCA6IGk7CisKKyAgICAgICAgICAgIGRpZmZlcmVuY2Vz
W2kgLSAxXSA9IGNvbG9yRGlmZmVyZW5jZShzYW1wbGVzW2kgLSAxXSwgc2FtcGxlc1tpXSk7Cisg
ICAgICAgICAgICBpZiAoZGlmZmVyZW5jZXNbaSAtIDFdID4gbWF4RGlmZmVyZW5jZSkgeworICAg
ICAgICAgICAgICAgIGlmIChzaG91bGRTdG9wQWZ0ZXJGaW5kaW5nTm9uTWF0Y2hpbmdDb2xvcihl
ZmZlY3RpdmVOb25NYXRjaGluZ0NvbG9ySW5kZXgpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gQ29sb3IoKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZG91YmxlIGN1bXVsdWF0aXZlRGlmZmVyZW5jZSA9IDA7CisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGk7ICsraikgeworICAgICAgICAgICAgICAgIGlmIChq
ID09IG5vbk1hdGNoaW5nQ29sb3JJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgY3VtdWx1YXRpdmVEaWZmZXJlbmNlICs9IGRpZmZlcmVuY2VzW2pd
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGN1bXVsdWF0aXZlRGlmZmVyZW5jZSA+
IG1heERpZmZlcmVuY2UpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3RvcEFmdGVyRmlu
ZGluZ05vbk1hdGNoaW5nQ29sb3IoZWZmZWN0aXZlTm9uTWF0Y2hpbmdDb2xvckluZGV4KSkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IGFscmVhZHkgaWRlbnRpZmllZCBh
IG5vbi1tYXRjaGluZyBzYW1wbGUgYW5kIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGZpcnN0
CisgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBzZWNvbmQgc2FtcGxlcyBvciB0aGUgc2Vjb25k
LXRvLWxhc3QgYW5kIGxhc3Qgc2FtcGxlcyBpcyBsZXNzIHRoYW4gdGhlIG1heGltdW0sIG1hcmsK
KyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGZpcnN0L2xhc3Qgc2FtcGxlIGFzIG5vbi1tYXRj
aGluZyB0byBnaXZlIGEgY2hhbmNlIGZvciB0aGUgcmVzdCBvZiB0aGUgc2FtcGxlcyB0byBtYXRj
aC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vbk1hdGNoaW5nQ29sb3JJbmRleCA9PSBudW1T
YW1wbGVzICYmICghaSB8fCBpID09IG51bVNhbXBsZXMgLSAxKSAmJiBjdW11bHVhdGl2ZURpZmZl
cmVuY2UgLSBkaWZmZXJlbmNlc1tpIC0gMV0gPD0gbWF4RGlmZmVyZW5jZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbm9uTWF0Y2hpbmdDb2xvckluZGV4ID0gZWZmZWN0aXZlTm9uTWF0Y2hp
bmdDb2xvckluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gRGVjcmVhc2UgdGhlIGhlaWdodCBieSBvbmUgcGl4
ZWwgc28gdGhhdCB0aGUgbGFzdCBzYW1wbGUgaXMgd2l0aGluIGJvdW5kcyBhbmQgbm90IG9mZi1i
eS1vbmUuCisgICAgYXV0byBtaW5IZWlnaHQgPSBwYWdlLnNldHRpbmdzKCkuc2FtcGxlZFBhZ2VU
b3BDb2xvck1pbkhlaWdodCgpIC0gMTsKKyAgICBpZiAobWluSGVpZ2h0ID4gMCkgeworICAgICAg
ICBpZiAobm9uTWF0Y2hpbmdDb2xvckluZGV4KSB7CisgICAgICAgICAgICBpZiAoYXV0byBsZWZ0
TWlkZGxlU2FtcGxlID0gc2FtcGxlQ29sb3IoKm1haW5Eb2N1bWVudCwgSW50UG9pbnQoMCwgbWlu
SGVpZ2h0KSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29sb3JEaWZmZXJlbmNlKCpsZWZ0TWlk
ZGxlU2FtcGxlLCBzYW1wbGVzWzBdKSA+IG1heERpZmZlcmVuY2UpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBDb2xvcigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKG5vbk1hdGNoaW5nQ29sb3JJbmRleCAhPSBudW1TYW1wbGVzIC0gMSkgeworICAgICAgICAg
ICAgaWYgKGF1dG8gcmlnaHRNaWRkbGVTYW1wbGUgPSBzYW1wbGVDb2xvcigqbWFpbkRvY3VtZW50
LCBJbnRQb2ludChmcmFtZVdpZHRoLCBtaW5IZWlnaHQpKSkgeworICAgICAgICAgICAgICAgIGlm
IChjb2xvckRpZmZlcmVuY2UoKnJpZ2h0TWlkZGxlU2FtcGxlLCBzYW1wbGVzW251bVNhbXBsZXMg
LSAxXSkgPiBtYXhEaWZmZXJlbmNlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29sb3Io
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gc2FtcGxlc1Rv
QXZlcmFnZSA9IHNhbXBsZXM7CisgICAgYXV0byB2YWxpZFNhbXBsZUNvdW50ID0gbnVtU2FtcGxl
czsKKyAgICBpZiAoIW5vbk1hdGNoaW5nQ29sb3JJbmRleCkgeworICAgICAgICAvLyBTa2lwIHRo
ZSBmaXJzdCBzYW1wbGUgYnkgbW92aW5nIHRoZSBwb2ludGVyIHRoYXQgaW5kaWNhdGVzIHdoZXJl
IHRoZSBzYW1wbGUgYXJyYXkKKyAgICAgICAgLy8gc3RhcnRzIGFuZCBkZWNyZWFzaW5nIHRoZSBj
b3VudCBvZiBzYW1wbGVzIHRvIGF2ZXJhZ2UuCisgICAgICAgICsrc2FtcGxlc1RvQXZlcmFnZTsK
KyAgICAgICAgLS12YWxpZFNhbXBsZUNvdW50OworICAgIH0gZWxzZSBpZiAobm9uTWF0Y2hpbmdD
b2xvckluZGV4ID09IG51bVNhbXBsZXMgLSAxKSB7CisgICAgICAgIC8vIFNraXAgdGhlIGxhc3Qg
c2FtcGxlIGJ5IGRlY3JlYXNpbmcgdGhlIGNvdW50IG9mIHNhbXBsZXMgdG8gYXZlcmFnZS4KKyAg
ICAgICAgLS12YWxpZFNhbXBsZUNvdW50OworICAgIH0KKyAgICByZXR1cm4gQ29sb3IoYXZlcmFn
ZUNvbG9yKHNhbXBsZXNUb0F2ZXJhZ2UsIHZhbGlkU2FtcGxlQ291bnQpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29s
b3JTYW1wbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb2xvclNhbXBsZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hOWZkOTE2ODIwYjhlNDhkZDdlNmRkMGY2ZDBkOGUzNGRjZDFhMDY5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29sb3JTYW1wbGVyLmgKQEAgLTAs
MCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBhZ2U7CisKK2NsYXNzIFBhZ2VD
b2xvclNhbXBsZXIgeworcHVibGljOgorICAgIHN0YXRpYyBPcHRpb25hbDxDb2xvcj4gc2FtcGxl
VG9wKFBhZ2UmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhY2NkMmQ2ODAyMzU0N2Y4Yjcw
MDNhYjY3MGM5NTBhZjNkODZkNzc0Li5kYzUzZjA3ZWI2OGMzNTRlNTExZTg3YzkxYmY1Y2NkOGNk
OTZmNjc3IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDUtMTQgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBw
bGUuY29tPgorCisgICAgICAgIFNhbXBsZWQgUGFnZSBUb3AgQ29sb3I6IG1vdmUgbG9naWMgb3V0
IG9mIGBEb2N1bWVudGAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyNTQ4MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzc5ODQ1Mzk+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgVGltIEhvcnRvbi4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvU2FtcGxlZFBhZ2VUb3BDb2xvci5tbToKKyAgICAgICAgKFRFU1QuU2Ft
cGxlZFBhZ2VUb3BDb2xvci5NYWluRG9jdW1lbnRDaGFuZ2UpOiBBZGRlZC4KKwogMjAyMS0wNS0x
NCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIERyb3AgImdldCIg
cHJlZml4IGZyb20gV1RGOjpGaWxlU3lzdGVtJ3MgZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoKSAv
IGdldEZpbGVDcmVhdGlvblRpbWUoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9TYW1wbGVkUGFnZVRvcENvbG9yLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TYW1wbGVkUGFnZVRvcENvbG9yLm1tCmluZGV4IDhiM2Yx
MThjZGMzODM5OWI3NmM5YmQyMjJiZjQyOGY1ODU4ODE0NjAuLjhhZDg0MmExNTAyOGI4MTdmODMz
NDYxYjY5ZDU4Y2I4MjUyZDcwZWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvU2FtcGxlZFBhZ2VUb3BDb2xvci5tbQorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NhbXBsZWRQYWdlVG9wQ29sb3IubW0KQEAgLTM1MCwz
ICszNTAsNDQgQEAgVEVTVChTYW1wbGVkUGFnZVRvcENvbG9yLCBESVNBQkxFRF9EaXNwbGF5UDMp
CiAgICAgRVhQRUNUX0lOX1JBTkdFKGNvbXBvbmVudHNbMl0sIDEuMDAsIDEuMDEpOwogICAgIEVY
UEVDVF9FUShjb21wb25lbnRzWzNdLCAxKTsKIH0KKworVEVTVChTYW1wbGVkUGFnZVRvcENvbG9y
LCBNYWluRG9jdW1lbnRDaGFuZ2UpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gY3JlYXRlV2ViVmll
d1dpdGhTYW1wbGVkUGFnZVRvcENvbG9yTWF4RGlmZmVyZW5jZSg1KTsKKyAgICBFWFBFQ1RfTlVM
TChbd2ViVmlldyBfc2FtcGxlZFBhZ2VUb3BDb2xvcl0pOworCisgICAgc2l6ZV90IG5vdGlmaWNh
dGlvbkNvdW50ID0gMDsKKyAgICBhdXRvIHNhbXBsZWRQYWdlVG9wQ29sb3JPYnNlcnZlciA9IGFk
b3B0TlMoW1tUZXN0S1ZPV3JhcHBlciBhbGxvY10gaW5pdFdpdGhPYnNlcnZhYmxlOndlYlZpZXcu
Z2V0KCkga2V5UGF0aDpAIl9zYW1wbGVkUGFnZVRvcENvbG9yIiBjYWxsYmFjazpbJl0geworICAg
ICAgICArK25vdGlmaWNhdGlvbkNvdW50OworICAgIH1dKTsKKworICAgIFt3ZWJWaWV3IHN5bmNo
cm9ub3VzbHlMb2FkSFRNTFN0cmluZ0FuZFdhaXRVbnRpbEFsbEltbWVkaWF0ZUNoaWxkRnJhbWVz
UGFpbnQ6QCI8Ym9keT5UZXN0Il07CisgICAgRVhQRUNUX0VRKFdlYkNvcmU6OkNvbG9yKFt3ZWJW
aWV3IF9zYW1wbGVkUGFnZVRvcENvbG9yXS5DR0NvbG9yKSwgV2ViQ29yZTo6Q29sb3I6OndoaXRl
KTsKKyAgICBFWFBFQ1RfRVEobm90aWZpY2F0aW9uQ291bnQsIDFVTCk7CisKKyAgICBub3RpZmlj
YXRpb25Db3VudCA9IDA7CisKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJp
bmdBbmRXYWl0VW50aWxBbGxJbW1lZGlhdGVDaGlsZEZyYW1lc1BhaW50OkAiPGJvZHk+VGVzdCJd
OworICAgIEVYUEVDVF9FUShXZWJDb3JlOjpDb2xvcihbd2ViVmlldyBfc2FtcGxlZFBhZ2VUb3BD
b2xvcl0uQ0dDb2xvciksIFdlYkNvcmU6OkNvbG9yOjp3aGl0ZSk7CisgICAgLy8gRGVwZW5kaW5n
IG9uIHRpbWluZywgYSBub3RpZmljYXRpb24gY2FuIGJlIHNlbnQgZm9yIHdoZW4gdGhlIG1haW4g
ZG9jdW1lbnQgY2hhbmdlcyBhbmQgdGhlbgorICAgIC8vIHdoZW4gdGhlIG5ldyBtYWluIGRvY3Vt
ZW50IHJlbmRlcnMgb3IgYm90aCBjYW4gYmUgY29hbGVzY2VkIGlmIHJlbmRlcmluZyBpcyBmYXN0
IGVub3VnaC4KKyAgICBFWFBFQ1RfVFJVRShub3RpZmljYXRpb25Db3VudCA9PSAwIHx8IG5vdGlm
aWNhdGlvbkNvdW50ID09IDIpOworCisgICAgbm90aWZpY2F0aW9uQ291bnQgPSAwOworCisgICAg
W3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nQW5kV2FpdFVudGlsQWxsSW1tZWRp
YXRlQ2hpbGRGcmFtZXNQYWludDpAIjxib2R5PiJdOworICAgIEVYUEVDVF9OVUxMKFt3ZWJWaWV3
IF9zYW1wbGVkUGFnZVRvcENvbG9yXSk7CisgICAgRVhQRUNUX0VRKG5vdGlmaWNhdGlvbkNvdW50
LCAxVUwpOworCisgICAgbm90aWZpY2F0aW9uQ291bnQgPSAwOworCisgICAgW3dlYlZpZXcgc3lu
Y2hyb25vdXNseUxvYWRIVE1MU3RyaW5nQW5kV2FpdFVudGlsQWxsSW1tZWRpYXRlQ2hpbGRGcmFt
ZXNQYWludDpAIjxib2R5PiJdOworICAgIEVYUEVDVF9OVUxMKFt3ZWJWaWV3IF9zYW1wbGVkUGFn
ZVRvcENvbG9yXSk7CisgICAgRVhQRUNUX0VRKG5vdGlmaWNhdGlvbkNvdW50LCAwVUwpOworCisg
ICAgbm90aWZpY2F0aW9uQ291bnQgPSAwOworCisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxv
YWRIVE1MU3RyaW5nQW5kV2FpdFVudGlsQWxsSW1tZWRpYXRlQ2hpbGRGcmFtZXNQYWludDpAIjxi
b2R5PlRlc3QiXTsKKyAgICBFWFBFQ1RfRVEoV2ViQ29yZTo6Q29sb3IoW3dlYlZpZXcgX3NhbXBs
ZWRQYWdlVG9wQ29sb3JdLkNHQ29sb3IpLCBXZWJDb3JlOjpDb2xvcjo6d2hpdGUpOworICAgIEVY
UEVDVF9FUShub3RpZmljYXRpb25Db3VudCwgMVVMKTsKK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>