<?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>113994</bug_id>
          
          <creation_ts>2013-04-04 21:41:50 -0700</creation_ts>
          <short_desc>Remove WTFURL from WebKit</short_desc>
          <delta_ts>2013-04-05 00:04:17 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mifenton</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rakuco</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>869545</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-04 21:41:50 -0700</bug_when>
    <thetext>Remove WTFURL from WebKit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869548</commentid>
    <comment_count>1</comment_count>
      <attachid>196575</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-04 21:42:58 -0700</bug_when>
    <thetext>Created attachment 196575
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869551</commentid>
    <comment_count>2</comment_count>
      <attachid>196575</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-04-04 21:45:10 -0700</bug_when>
    <thetext>Comment on attachment 196575
Patch

rs=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869556</commentid>
    <comment_count>3</comment_count>
      <attachid>196575</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-04-04 21:55:53 -0700</bug_when>
    <thetext>Comment on attachment 196575
Patch

Attachment 196575 did not pass efl-ews (efl):
Output: http://webkit-commit-queue.appspot.com/results/17460295</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869570</commentid>
    <comment_count>4</comment_count>
      <attachid>196579</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-04 23:04:44 -0700</bug_when>
    <thetext>Created attachment 196579
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869592</commentid>
    <comment_count>5</comment_count>
      <attachid>196579</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-05 00:04:08 -0700</bug_when>
    <thetext>Comment on attachment 196579
Patch

Clearing flags on attachment: 196579

Committed r147715: &lt;http://trac.webkit.org/changeset/147715&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869593</commentid>
    <comment_count>6</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-05 00:04:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196575</attachid>
            <date>2013-04-04 21:42:58 -0700</date>
            <delta_ts>2013-04-04 23:04:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-113994-20130404214246.patch</filename>
            <type>text/plain</type>
            <size>437109</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ3Njk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGE1ODAwYzFhNTNmNWVkODU5NTEzZWE3
NTJjNmYwMTEzOTQwZmUxNzEuLjc2ZjU5N2UzMmI3YjVmZmRjYjAzOWM2MzhhMTliNWE1NWFmYTQz
MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTMtMDQtMDQgIEJlbmphbWluIFBvdWxhaW4gIDxi
cG91bGFpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFdURlVSTCBmcm9tIFdlYktpdAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzOTk0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFpbmZ1bCwg
YnV0IHRoYXQgaXMgZm9yIHRoZSBiZXN0IG5vdyA6KAorCisgICAgICAgICogR05VbWFrZWZpbGUu
bGlzdC5hbToKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiB3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uUGFyc2VkVVJMLmg6IFJlbW92ZWQuCisgICAg
ICAgICogd3RmL3VybC9hcGkvUGFyc2VkVVJMLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYv
dXJsL2FwaS9QYXJzZWRVUkwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvdXJsL2FwaS9VUkxC
dWZmZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvdXJsL2FwaS9VUkxRdWVyeUNoYXJzZXRD
b252ZXJ0ZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvdXJsL2FwaS9VUkxTdHJpbmcuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHd0Zi91cmwvYXBpL1VSTFN0cmluZy5oOiBSZW1vdmVkLgor
ICAgICAgICAqIHd0Zi91cmwvc3JjL1Jhd1VSTEJ1ZmZlci5oOiBSZW1vdmVkLgorICAgICAgICAq
IHd0Zi91cmwvc3JjL1VSTENhbm9uLmg6IFJlbW92ZWQuCisgICAgICAgICogd3RmL3VybC9zcmMv
VVJMQ2Fub25FdGMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTENhbm9u
RmlsZXN5c3RlbXVybC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd3RmL3VybC9zcmMvVVJMQ2Fu
b25GaWxldXJsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5vbkhv
c3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTENhbm9uSUNVLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5vbklQLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5vbkludGVybmFsLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5vbkludGVybmFsLmg6IFJlbW92ZWQuCisgICAgICAg
ICogd3RmL3VybC9zcmMvVVJMQ2Fub25NYWlsdG8uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHd0
Zi91cmwvc3JjL1VSTENhbm9uUGF0aC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd3RmL3VybC9z
cmMvVVJMQ2Fub25QYXRodXJsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvdXJsL3NyYy9V
UkxDYW5vblF1ZXJ5LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5v
blJlbGF0aXZlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5vblN0
ZFVSTC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd3RmL3VybC9zcmMvVVJMQ2hhcmFjdGVyVHlw
ZXMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTENoYXJhY3RlclR5cGVz
Lmg6IFJlbW92ZWQuCisgICAgICAgICogd3RmL3VybC9zcmMvVVJMQ29tcG9uZW50Lmg6IFJlbW92
ZWQuCisgICAgICAgICogd3RmL3VybC9zcmMvVVJMRmlsZS5oOiBSZW1vdmVkLgorICAgICAgICAq
IHd0Zi91cmwvc3JjL1VSTFBhcnNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvdXJsL3Ny
Yy9VUkxQYXJzZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTFBhcnNlRmls
ZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd3RmL3VybC9zcmMvVVJMUGFyc2VJbnRlcm5hbC5o
OiBSZW1vdmVkLgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTFNlZ21lbnRzLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxTZWdtZW50cy5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHd0Zi91cmwvc3JjL1VSTFV0aWwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHd0Zi91cmwv
c3JjL1VSTFV0aWwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxVdGlsSW50
ZXJuYWwuaDogUmVtb3ZlZC4KKwogMjAxMy0wNC0wNCAgTWFydGluIFJvYmluc29uICA8bXJvYmlu
c29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gUmVtb3ZlIHRoZSBneXAgYnVpbGQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCAyYjJmMGU2OTkyYjdkMmY1NmIyMWFmMTJjZWU5ZTU4NGRiYTJiMDU1Li43ZDM5
OTVlY2NmM2Y4NThhZjU5OGQ5MGQ5N2UyYjAwOTQ5NTNmMjI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUg
KzEsMzIgQEAKIDIwMTMtMDQtMDQgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5j
b20+CiAKKyAgICAgICAgUmVtb3ZlIFdURlVSTCBmcm9tIFdlYktpdAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzOTk0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMLmNwcDoKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6S1VSTDo6aXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9LVVJMLmg6CisgICAgICAgIChLVVJMKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL0tVUkxXVEZVUkwuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL0tVUkxXVEZVUkxJbXBsLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Y2YvS1VSTENGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OktVUkwpOgorICAgICAg
ICAoV2ViQ29yZTo6S1VSTDo6Y3JlYXRlQ0ZVUkwpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgICogcGxhdGZvcm0vbWFjL0tVUkxNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpL
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OmNyZWF0ZUNGVVJMKToKKworMjAxMy0wNC0w
NCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KKwogICAgICAgICBhbHRl
cm5hdGVGYW1pbHlOYW1lIHNob3VsZCByZXR1cm4gYSBudWxsLCBub3QgYW4gZW1wdHkgdmFsdWUK
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzk4Nwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwppbmRleCA4ODY0M2VlZGNmMjc2YmY0ZmY0YmM1
ZWZhM2JjMjY0YTkwMmI2ZDQwLi5iM2FjMThiN2I3MDhkMDdlMGMzZTI5YWQxOTczMDlkZWEyYTBk
YmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAx
My0wNC0wNCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZW1vdmUgV1RGVVJMIGZyb20gV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM5OTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Fib3V0RGF0YVVzZUZlYXR1cmVz
LmluOgorCiAyMDEzLTA0LTA0ICBUaWFuY2hlbmcgSmlhbmcgIDx0aWppYW5nQHJpbS5jb20+CiAK
ICAgICAgICAgW0JsYWNrQmVycnldIEFkanVzdCBmYXRmaW5nZXIgcmVzdWx0IHByaW9yaXR5CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV1RGL0dO
VW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggMjViNmMyNzM2M2VkNzA1ZmZmZTE5ZTM4YTA3ZjZlODk1
MzczOTM2Ny4uNGM2YmNiNjY2MGEwYzU4Y2NhOWUyOGI1YjVkMmY5YjExYmUzMDY1YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XVEYvR05V
bWFrZWZpbGUubGlzdC5hbQpAQCAtMjY3LDM5ICsyNjcsNCBAQCB3dGZfc291cmNlcyArPSBcCiAg
ICAgU291cmNlL1dURi93dGYvdW5pY29kZS9Vbmljb2RlTWFjcm9zRnJvbUlDVS5oIFwKICAgICBT
b3VyY2UvV1RGL3d0Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5jcHAgXAogICAgIFNvdXJjZS9X
VEYvd3RmL3VuaWNvZGUvaWN1L1VuaWNvZGVJY3UuaCBcCi0gICAgU291cmNlL1dURi93dGYvdXJs
L2FwaS9QYXJzZWRVUkwuY3BwIFwKLSAgICBTb3VyY2UvV1RGL3d0Zi91cmwvYXBpL1BhcnNlZFVS
TC5oIFwKLSAgICBTb3VyY2UvV1RGL3d0Zi91cmwvYXBpL1VSTEJ1ZmZlci5oIFwKLSAgICBTb3Vy
Y2UvV1RGL3d0Zi91cmwvYXBpL1VSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlci5oIFwKLSAgICBTb3Vy
Y2UvV1RGL3d0Zi91cmwvYXBpL1VSTFN0cmluZy5jcHAgXAotICAgIFNvdXJjZS9XVEYvd3RmL3Vy
bC9hcGkvVVJMU3RyaW5nLmggXAotICAgIFNvdXJjZS9XVEYvd3RmL3VybC9zcmMvUmF3VVJMQnVm
ZmVyLmggXAotICAgIFNvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25FdGMuY3BwIFwKLSAg
ICBTb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uRmlsZXN5c3RlbXVybC5jcHAgXAotICAg
IFNvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25GaWxldXJsLmNwcCBcCi0gICAgU291cmNl
L1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbkhvc3QuY3BwIFwKLSAgICBTb3VyY2UvV1RGL3d0Zi91
cmwvc3JjL1VSTENhbm9uSUNVLmNwcCBcCi0gICAgU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxD
YW5vbkludGVybmFsLmNwcCBcCi0gICAgU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbklu
dGVybmFsLmggXAotICAgIFNvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25JUC5jcHAgXAot
ICAgIFNvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25NYWlsdG8uY3BwIFwKLSAgICBTb3Vy
Y2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uUGF0aC5jcHAgXAotICAgIFNvdXJjZS9XVEYvd3Rm
L3VybC9zcmMvVVJMQ2Fub25QYXRodXJsLmNwcCBcCi0gICAgU291cmNlL1dURi93dGYvdXJsL3Ny
Yy9VUkxDYW5vblF1ZXJ5LmNwcCBcCi0gICAgU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5v
blJlbGF0aXZlLmNwcCBcCi0gICAgU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vblN0ZFVS
TC5jcHAgXAotICAgIFNvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub24uaCBcCi0gICAgU291
cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDaGFyYWN0ZXJUeXBlcy5jcHAgXAotICAgIFNvdXJjZS9X
VEYvd3RmL3VybC9zcmMvVVJMQ2hhcmFjdGVyVHlwZXMuaCBcCi0gICAgU291cmNlL1dURi93dGYv
dXJsL3NyYy9VUkxDb21wb25lbnQuaCBcCi0gICAgU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxG
aWxlLmggXAotICAgIFNvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMUGFyc2UuY3BwIFwKLSAgICBT
b3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFBhcnNlRmlsZS5jcHAgXAotICAgIFNvdXJjZS9XVEYv
d3RmL3VybC9zcmMvVVJMUGFyc2VJbnRlcm5hbC5oIFwKLSAgICBTb3VyY2UvV1RGL3d0Zi91cmwv
c3JjL1VSTFBhcnNlLmggXAotICAgIFNvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMU2VnbWVudHMu
Y3BwIFwKLSAgICBTb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFNlZ21lbnRzLmggXAotICAgIFNv
dXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMVXRpbC5jcHAgXAotICAgIFNvdXJjZS9XVEYvd3RmL3Vy
bC9zcmMvVVJMVXRpbC5oIFwKLSAgICBTb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFV0aWxJbnRl
cm5hbC5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi93aW4vT3duUHRyV2luLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjkwMzQ0ZThiYTAyZDhiMTk3Njhh
ZjdkODE3YmQ5MGNjNGVkNDQ5Mi4uMTAxNDI3ZDE2ZjlkMjExYWI0OTUwZTQ1NTBhNDRiMTI1OTdi
NDk4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00NCwz
MyArNDQsOCBAQAogCQkxNEYzQjBGNzE1RTQ1RTQ2MDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGht
ZXRpYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRG
M0IwRjYxNUU0NUU0NjAwMjEwMDY5IC8qIFNhdHVyYXRlZEFyaXRobWV0aWMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQkxQTZCQjc2OTE2MkYzMDA1MDBERDE2REIg
LyogU3RyZWFtQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQTZCQjc2ODE2MkYzMDA1MDBERDE2REIgLyogU3RyZWFtQnVmZmVyLmggKi87IH07
CiAJCTI2MTQ3QjBBMTVERENDREMwMEREQjkwNyAvKiBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjE0N0Iw
ODE1RERDQ0RDMDBEREI5MDcgLyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oICovOyB9Owot
CQkyNjYxMTIyRTE2MEZFQUQ0MDAxM0Y1QzMgLyogVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjYxMTIyRDE2
MEZFQUQ0MDAxM0Y1QzMgLyogVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyLmggKi87IH07Ci0JCTI2
RTZDMUVFMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkV0Yy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFDRTE2MDkwMzczMDBDQTZBRjQg
LyogVVJMQ2Fub25FdGMuY3BwICovOyB9OwotCQkyNkU2QzFFRjE2MDkwMzczMDBDQTZBRjQgLyog
VVJMQ2Fub25GaWxlc3lzdGVtdXJsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDI2RTZDMUNGMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkZpbGVz
eXN0ZW11cmwuY3BwICovOyB9OwotCQkyNkU2QzFGMDE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fu
b25GaWxldXJsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI2RTZDMUQwMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkZpbGV1cmwuY3BwICovOyB9
OwotCQkyNkU2QzFGMTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25Ib3N0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZDMUQxMTYwOTAzNzMw
MENBNkFGNCAvKiBVUkxDYW5vbkhvc3QuY3BwICovOyB9OwotCQkyNkU2QzFGMjE2MDkwMzczMDBD
QTZBRjQgLyogVVJMQ2Fub25JQ1UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMjZFNkMxRDIxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uSUNVLmNw
cCAqLzsgfTsKLQkJMjZFNkMxRjUxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uSW50ZXJuYWwu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFNkMx
RDUxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uSW50ZXJuYWwuY3BwICovOyB9OwotCQkyNkU2
QzFGNjE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFNkMxRDYxNjA5MDM3MzAwQ0E2QUY0
IC8qIFVSTENhbm9uSW50ZXJuYWwuaCAqLzsgfTsKLQkJMjZFNkMxRjcxNjA5MDM3MzAwQ0E2QUY0
IC8qIFVSTENhbm9uSVAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMjZFNkMxRDcxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uSVAuY3BwICovOyB9
OwotCQkyNkU2QzFGOTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25NYWlsdG8uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFNkMxRDkxNjA5MDM3
MzAwQ0E2QUY0IC8qIFVSTENhbm9uTWFpbHRvLmNwcCAqLzsgfTsKLQkJMjZFNkMxRkExNjA5MDM3
MzAwQ0E2QUY0IC8qIFVSTENhbm9uUGF0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFEQTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25Q
YXRoLmNwcCAqLzsgfTsKLQkJMjZFNkMxRkIxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUGF0
aHVybC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
NkU2QzFEQjE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25QYXRodXJsLmNwcCAqLzsgfTsKLQkJ
MjZFNkMxRkMxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUXVlcnkuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFNkMxREMxNjA5MDM3MzAwQ0E2
QUY0IC8qIFVSTENhbm9uUXVlcnkuY3BwICovOyB9OwotCQkyNkU2QzFGRDE2MDkwMzczMDBDQTZB
RjQgLyogVVJMQ2Fub25SZWxhdGl2ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFERDE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25SZWxh
dGl2ZS5jcHAgKi87IH07Ci0JCTI2RTZDMUZGMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vblN0
ZFVSTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
NkU2QzFERjE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25TdGRVUkwuY3BwICovOyB9OwotCQky
NkU2QzIwMTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZDMUUxMTYwOTAzNzMwMENBNkFGNCAvKiBV
UkxDYW5vbi5oICovOyB9OwotCQkyNkU2QzIwMzE2MDkwMzczMDBDQTZBRjQgLyogVVJMRmlsZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFNkMxRTMx
NjA5MDM3MzAwQ0E2QUY0IC8qIFVSTEZpbGUuaCAqLzsgfTsKLQkJMjZFNkMyMDQxNjA5MDM3MzAw
Q0E2QUY0IC8qIFVSTFBhcnNlRmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFFNDE2MDkwMzczMDBDQTZBRjQgLyogVVJMUGFyc2VGaWxl
LmNwcCAqLzsgfTsKLQkJMjZFNkMyMDUxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFBhcnNlSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZD
MUU1MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxQYXJzZUludGVybmFsLmggKi87IH07Ci0JCTI2RTZD
MjA3MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxQYXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFFNzE2MDkwMzczMDBDQTZBRjQgLyogVVJM
UGFyc2UuY3BwICovOyB9OwotCQkyNkU2QzIwODE2MDkwMzczMDBDQTZBRjQgLyogVVJMUGFyc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZDMUU4
MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxQYXJzZS5oICovOyB9OwotCQkyNkU2QzIwQTE2MDkwMzcz
MDBDQTZBRjQgLyogVVJMVXRpbEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFFQTE2MDkwMzczMDBDQTZBRjQgLyogVVJMVXRpbElu
dGVybmFsLmggKi87IH07Ci0JCTI2RTZDMjBDMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxVdGlsLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZDMUVD
MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxVdGlsLmNwcCAqLzsgfTsKLQkJMjZFNkMyMEQxNjA5MDM3
MzAwQ0E2QUY0IC8qIFVSTFV0aWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDI2RTZDMUVEMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxVdGlsLmggKi87IH07
CiAJCTJDMDUzODU0MTVCQzgxOTAwMEYyMUI5NiAvKiBHcmVnb3JpYW5EYXRlVGltZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkMwNTM4NTMxNUJDODE5
MDAwRjIxQjk2IC8qIEdyZWdvcmlhbkRhdGVUaW1lLmggKi87IH07CiAJCTJDQ0Q4OTJBMTVDMDM5
MDIwMDI4NTA4MyAvKiBHcmVnb3JpYW5EYXRlVGltZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQ0NEODkyOTE1QzAzOTAyMDAyODUwODMgLyogR3Jl
Z29yaWFuRGF0ZVRpbWUuY3BwICovOyB9OwotCQk0MzMwRjM4RjE1NzQ1QjA1MDBBQUZBOEYgLyog
VVJMU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQzMzBGMzhFMTU3NDVCMDUwMEFBRkE4RiAvKiBVUkxTdHJpbmcuY3BwICovOyB9OwogCQk0
RjAzMjFCQzE1NkFBOEQxMDA2RUJBRjYgLyogQml0QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGMDMyMUJCMTU2QUE4RDEwMDZFQkFGNiAvKiBC
aXRBcnJheS5oICovOyB9OwogCQk0RjFCMkRCNjE2MEI0NEFBMDA1ODY1NTkgLyogTWVtb3J5SW5z
dHJ1bWVudGF0aW9uSGFzaFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNEYxQjJEQjUxNjBCNDRBQTAwNTg2NTU5IC8qIE1lbW9yeUluc3RydW1lbnRh
dGlvbkhhc2hTZXQuaCAqLzsgfTsKIAkJNEYxRDExNTQxNUZGMTFCRTAwMjZFOTA4IC8qIE1lbW9y
eUluc3RydW1lbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNEYxRDExNTMxNUZGMTFCRTAwMjZFOTA4IC8qIE1lbW9yeUluc3RydW1lbnRhdGlv
bi5oICovOyB9OwpAQCAtMjkwLDE2ICsyNjUsNiBAQAogCQlBOEE0NzQ2QTE1MUE4MjVCMDA0MTIz
RkYgLyogVVRGOC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQThBNDczNTgxNTFBODI1QjAwNDEyM0ZGIC8qIFVURjguaCAqLzsgfTsKIAkJQThBNDc0NkQx
NTFBODI1QjAwNDEyM0ZGIC8qIFVuaW9uRmluZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczNUMxNTFBODI1QjAwNDEyM0ZGIC8qIFVuaW9uRmlu
ZC5oICovOyB9OwogCQlBOEE0NzQ2RTE1MUE4MjVCMDA0MTIzRkYgLyogVW51c2VkUGFyYW0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzVEMTUx
QTgyNUIwMDQxMjNGRiAvKiBVbnVzZWRQYXJhbS5oICovOyB9OwotCQlBOEE0NzQ2RjE1MUE4MjVC
MDA0MTIzRkYgLyogUGFyc2VkVVJMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzYwMTUxQTgyNUIwMDQxMjNGRiAvKiBQYXJzZWRVUkwuY3Bw
ICovOyB9OwotCQlBOEE0NzQ3MDE1MUE4MjVCMDA0MTIzRkYgLyogUGFyc2VkVVJMLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzM2MTE1MUE4MjVC
MDA0MTIzRkYgLyogUGFyc2VkVVJMLmggKi87IH07Ci0JCUE4QTQ3NDcxMTUxQTgyNUIwMDQxMjNG
RiAvKiBVUkxTdHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4QTQ3MzYyMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxTdHJpbmcuaCAqLzsgfTsKLQkJ
QThBNDc0NzIxNTFBODI1QjAwNDEyM0ZGIC8qIFJhd1VSTEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczNjQxNTFBODI1QjAwNDEyM0ZG
IC8qIFJhd1VSTEJ1ZmZlci5oICovOyB9OwotCQlBOEE0NzQ3MzE1MUE4MjVCMDA0MTIzRkYgLyog
VVJMQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBOEE0NzM2NTE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQnVmZmVyLmggKi87IH07Ci0JCUE4QTQ3
NDc0MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxDaGFyYWN0ZXJUeXBlcy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzM2NjE1MUE4MjVCMDA0MTIz
RkYgLyogVVJMQ2hhcmFjdGVyVHlwZXMuY3BwICovOyB9OwotCQlBOEE0NzQ3NTE1MUE4MjVCMDA0
MTIzRkYgLyogVVJMQ2hhcmFjdGVyVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzY3MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxDaGFyYWN0
ZXJUeXBlcy5oICovOyB9OwotCQlBOEE0NzQ3NjE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQ29tcG9u
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0
NzM2ODE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQ29tcG9uZW50LmggKi87IH07Ci0JCUE4QTQ3NDdC
MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxTZWdtZW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzM2RDE1MUE4MjVCMDA0MTIzRkYgLyogVVJM
U2VnbWVudHMuY3BwICovOyB9OwotCQlBOEE0NzQ3QzE1MUE4MjVCMDA0MTIzRkYgLyogVVJMU2Vn
bWVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4
QTQ3MzZFMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxTZWdtZW50cy5oICovOyB9OwogCQlBOEE0NzQ3
RDE1MUE4MjVCMDA0MTIzRkYgLyogVmFsdWVDaGVjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczNkYxNTFBODI1QjAwNDEyM0ZGIC8qIFZhbHVl
Q2hlY2suaCAqLzsgfTsKIAkJQThBNDc0N0UxNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3Rvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczNzAxNTFB
ODI1QjAwNDEyM0ZGIC8qIFZlY3Rvci5oICovOyB9OwogCQlBOEE0NzQ3RjE1MUE4MjVCMDA0MTIz
RkYgLyogVmVjdG9yVHJhaXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOEE0NzM3MTE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yVHJhaXRzLmggKi87
IH07CkBAIC0zNTUsMzMgKzMyMCw4IEBACiAJCTE0RjNCMEY2MTVFNDVFNDYwMDIxMDA2OSAvKiBT
YXR1cmF0ZWRBcml0aG1ldGljLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNh
dHVyYXRlZEFyaXRobWV0aWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE2QkI3
NjgxNjJGMzAwNTAwREQxNkRCIC8qIFN0cmVhbUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTdHJlYW1CdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMjYxNDdCMDgxNUREQ0NEQzAwRERCOTA3IC8qIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZWdlclRvU3RyaW5nQ29udmVy
c2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyNjYxMTIyRDE2MEZFQUQ0MDAx
M0Y1QzMgLyogVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkyNkU2QzFDRTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25FdGMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVVJMQ2Fub25FdGMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyNkU2QzFDRjE2MDkwMzczMDBDQTZBRjQgLyog
VVJMQ2Fub25GaWxlc3lzdGVtdXJsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFVSTENhbm9uRmlsZXN5c3RlbXVybC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTI2RTZDMUQwMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkZpbGV1cmwuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVVJMQ2Fub25GaWxldXJsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjZFNkMxRDExNjA5MDM3MzAwQ0E2QUY0IC8q
IFVSTENhbm9uSG9zdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBV
UkxDYW5vbkhvc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyNkU2QzFEMjE2
MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25JQ1UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVVJMQ2Fub25JQ1UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkyNkU2QzFENTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25JbnRlcm5hbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVUkxDYW5vbkludGVybmFsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjZFNkMxRDYxNjA5MDM3MzAwQ0E2QUY0IC8q
IFVSTENhbm9uSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVJM
Q2Fub25JbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyNkU2QzFENzE2
MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25JUC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBVUkxDYW5vbklQLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMjZFNkMxRDkxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uTWFpbHRvLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTENhbm9uTWFpbHRvLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjZFNkMxREExNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENh
bm9uUGF0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVUkxDYW5v
blBhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyNkU2QzFEQjE2MDkwMzcz
MDBDQTZBRjQgLyogVVJMQ2Fub25QYXRodXJsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFVSTENhbm9uUGF0aHVybC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTI2RTZDMURDMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vblF1ZXJ5LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTENhbm9uUXVlcnkuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyNkU2QzFERDE2MDkwMzczMDBDQTZBRjQgLyogVVJM
Q2Fub25SZWxhdGl2ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBV
UkxDYW5vblJlbGF0aXZlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjZFNkMx
REYxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uU3RkVVJMLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTENhbm9uU3RkVVJMLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMjZFNkMxRTExNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVSTENhbm9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTI2RTZDMUUzMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxGaWxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVSTEZpbGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMjZFNkMxRTQxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFBhcnNlRmlsZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVUkxQYXJzZUZpbGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyNkU2QzFFNTE2MDkwMzczMDBDQTZBRjQg
LyogVVJMUGFyc2VJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBV
UkxQYXJzZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTI2RTZDMUU3
MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxQYXJzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBVUkxQYXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTI2RTZDMUU4MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxQYXJzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBVUkxQYXJzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkyNkU2QzFFQTE2MDkwMzczMDBDQTZBRjQgLyogVVJMVXRpbEludGVybmFsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVSTFV0aWxJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkyNkU2QzFFQzE2MDkwMzczMDBDQTZBRjQgLyogVVJMVXRpbC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVUkxVdGlsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjZFNkMxRUQxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFV0
aWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVJMVXRpbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyQzA1Mzg1MzE1QkM4MTkwMDBGMjFCOTYgLyogR3JlZ29y
aWFuRGF0ZVRpbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JlZ29yaWFu
RGF0ZVRpbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkNDRDg5MjkxNUMwMzkw
MjAwMjg1MDgzIC8qIEdyZWdvcmlhbkRhdGVUaW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEdyZWdvcmlhbkRhdGVUaW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNDMzMEYzOEUxNTc0NUIwNTAwQUFGQThGIC8qIFVSTFN0cmluZy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVUkxTdHJpbmcuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0NERFRTc0QTE1MjI3NEJCMDBDNkVDMzcgLyogaU9TLnhj
Y29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IGlPUy54Y2NvbmZpZzsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEYwMzIxQkIxNTZBQThEMTAwNkVCQUY2IC8qIEJp
dEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpdEFycmF5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRGMUIyREI1MTYwQjQ0QUEwMDU4NjU1OSAvKiBN
ZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1lbW9yeUluc3RydW1lbnRhdGlvbkhhc2hTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTYxMCwxNiArNTUwLDYgQEAKIAkJQThBNDczNTgxNTFBODI1QjAwNDEyM0ZG
IC8qIFVURjguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVRGOC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzM1QzE1MUE4MjVCMDA0MTIzRkYgLyogVW5p
b25GaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuaW9uRmluZC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzM1RDE1MUE4MjVCMDA0MTIzRkYgLyog
VW51c2VkUGFyYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW51c2VkUGFy
YW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThBNDczNjAxNTFBODI1QjAwNDEy
M0ZGIC8qIFBhcnNlZFVSTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQYXJzZWRVUkwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBOEE0NzM2MTE1
MUE4MjVCMDA0MTIzRkYgLyogUGFyc2VkVVJMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFBhcnNlZFVSTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBOEE0NzM2
MjE1MUE4MjVCMDA0MTIzRkYgLyogVVJMU3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFVSTFN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBOEE0
NzM2NDE1MUE4MjVCMDA0MTIzRkYgLyogUmF3VVJMQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJhd1VSTEJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlBOEE0NzM2NTE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQnVmZmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVSTEJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlBOEE0NzM2NjE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQ2hhcmFjdGVyVHlwZXMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVVJMQ2hhcmFjdGVyVHlwZXMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBOEE0NzM2NzE1MUE4MjVCMDA0MTIz
RkYgLyogVVJMQ2hhcmFjdGVyVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVVJMQ2hhcmFjdGVyVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThB
NDczNjgxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTENvbXBvbmVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBVUkxDb21wb25lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQThBNDczNkQxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTFNlZ21lbnRzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTFNlZ21lbnRzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThBNDczNkUxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTFNlZ21l
bnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVSTFNlZ21lbnRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzZGMTUxQTgyNUIwMDQxMjNGRiAvKiBW
YWx1ZUNoZWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlQ2hlY2su
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczNzAxNTFBODI1QjAwNDEyM0ZG
IC8qIFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWZWN0b3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczNzExNTFBODI1QjAwNDEyM0ZGIC8q
IFZlY3RvclRyYWl0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWZWN0b3JU
cmFpdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY5OCw3ICs2MjgsNiBAQAog
CQkJCUE4QTQ3MzFCMTUxQTgyNUIwMDQxMjNGRiAvKiB0ZXh0ICovLAogCQkJCUE4QTQ3MzM5MTUx
QTgyNUIwMDQxMjNGRiAvKiB0aHJlYWRzICovLAogCQkJCUE4QTQ3MzQ4MTUxQTgyNUIwMDQxMjNG
RiAvKiB1bmljb2RlICovLAotCQkJCUE4QTQ3MzVFMTUxQTgyNUIwMDQxMjNGRiAvKiB1cmwgKi8s
CiAJCQkJQThBNDcyNTQxNTFBODI1QTAwNDEyM0ZGIC8qIEFsaWdubWVudC5oICovLAogCQkJCUE4
QTQ3MjU1MTUxQTgyNUEwMDQxMjNGRiAvKiBBbHdheXNJbmxpbmUuaCAqLywKIAkJCQlBOEE0NzI1
NjE1MUE4MjVBMDA0MTIzRkYgLyogQXJyYXlCdWZmZXIuY3BwICovLApAQCAtMTAxMSw2NCArOTQw
LDYgQEAKIAkJCXBhdGggPSBpY3U7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9Owot
CQlBOEE0NzM1RTE1MUE4MjVCMDA0MTIzRkYgLyogdXJsICovID0gewotCQkJaXNhID0gUEJYR3Jv
dXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQlBOEE0NzM1RjE1MUE4MjVCMDA0MTIzRkYgLyogYXBp
ICovLAotCQkJCUE4QTQ3MzYzMTUxQTgyNUIwMDQxMjNGRiAvKiBzcmMgKi8sCi0JCQkpOwotCQkJ
cGF0aCA9IHVybDsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCUE4QTQ3MzVG
MTUxQTgyNUIwMDQxMjNGRiAvKiBhcGkgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNo
aWxkcmVuID0gKAotCQkJCUE4QTQ3MzYwMTUxQTgyNUIwMDQxMjNGRiAvKiBQYXJzZWRVUkwuY3Bw
ICovLAotCQkJCUE4QTQ3MzYxMTUxQTgyNUIwMDQxMjNGRiAvKiBQYXJzZWRVUkwuaCAqLywKLQkJ
CQlBOEE0NzM2NTE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQnVmZmVyLmggKi8sCi0JCQkJMjY2MTEy
MkQxNjBGRUFENDAwMTNGNUMzIC8qIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlci5oICovLAotCQkJ
CTQzMzBGMzhFMTU3NDVCMDUwMEFBRkE4RiAvKiBVUkxTdHJpbmcuY3BwICovLAotCQkJCUE4QTQ3
MzYyMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxTdHJpbmcuaCAqLywKLQkJCSk7Ci0JCQlwYXRoID0g
YXBpOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJQThBNDczNjMxNTFBODI1
QjAwNDEyM0ZGIC8qIHNyYyAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4g
PSAoCi0JCQkJQThBNDczNjQxNTFBODI1QjAwNDEyM0ZGIC8qIFJhd1VSTEJ1ZmZlci5oICovLAot
CQkJCTI2RTZDMUUxMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbi5oICovLAotCQkJCTI2RTZD
MUNFMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkV0Yy5jcHAgKi8sCi0JCQkJMjZFNkMxQ0Yx
NjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uRmlsZXN5c3RlbXVybC5jcHAgKi8sCi0JCQkJMjZF
NkMxRDAxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uRmlsZXVybC5jcHAgKi8sCi0JCQkJMjZF
NkMxRDExNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uSG9zdC5jcHAgKi8sCi0JCQkJMjZFNkMx
RDIxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uSUNVLmNwcCAqLywKLQkJCQkyNkU2QzFENTE2
MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25JbnRlcm5hbC5jcHAgKi8sCi0JCQkJMjZFNkMxRDYx
NjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uSW50ZXJuYWwuaCAqLywKLQkJCQkyNkU2QzFENzE2
MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25JUC5jcHAgKi8sCi0JCQkJMjZFNkMxRDkxNjA5MDM3
MzAwQ0E2QUY0IC8qIFVSTENhbm9uTWFpbHRvLmNwcCAqLywKLQkJCQkyNkU2QzFEQTE2MDkwMzcz
MDBDQTZBRjQgLyogVVJMQ2Fub25QYXRoLmNwcCAqLywKLQkJCQkyNkU2QzFEQjE2MDkwMzczMDBD
QTZBRjQgLyogVVJMQ2Fub25QYXRodXJsLmNwcCAqLywKLQkJCQkyNkU2QzFEQzE2MDkwMzczMDBD
QTZBRjQgLyogVVJMQ2Fub25RdWVyeS5jcHAgKi8sCi0JCQkJMjZFNkMxREQxNjA5MDM3MzAwQ0E2
QUY0IC8qIFVSTENhbm9uUmVsYXRpdmUuY3BwICovLAotCQkJCTI2RTZDMURGMTYwOTAzNzMwMENB
NkFGNCAvKiBVUkxDYW5vblN0ZFVSTC5jcHAgKi8sCi0JCQkJQThBNDczNjYxNTFBODI1QjAwNDEy
M0ZGIC8qIFVSTENoYXJhY3RlclR5cGVzLmNwcCAqLywKLQkJCQlBOEE0NzM2NzE1MUE4MjVCMDA0
MTIzRkYgLyogVVJMQ2hhcmFjdGVyVHlwZXMuaCAqLywKLQkJCQlBOEE0NzM2ODE1MUE4MjVCMDA0
MTIzRkYgLyogVVJMQ29tcG9uZW50LmggKi8sCi0JCQkJMjZFNkMxRTMxNjA5MDM3MzAwQ0E2QUY0
IC8qIFVSTEZpbGUuaCAqLywKLQkJCQkyNkU2QzFFNzE2MDkwMzczMDBDQTZBRjQgLyogVVJMUGFy
c2UuY3BwICovLAotCQkJCTI2RTZDMUU4MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxQYXJzZS5oICov
LAotCQkJCTI2RTZDMUU0MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxQYXJzZUZpbGUuY3BwICovLAot
CQkJCTI2RTZDMUU1MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxQYXJzZUludGVybmFsLmggKi8sCi0J
CQkJQThBNDczNkQxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTFNlZ21lbnRzLmNwcCAqLywKLQkJCQlB
OEE0NzM2RTE1MUE4MjVCMDA0MTIzRkYgLyogVVJMU2VnbWVudHMuaCAqLywKLQkJCQkyNkU2QzFF
QzE2MDkwMzczMDBDQTZBRjQgLyogVVJMVXRpbC5jcHAgKi8sCi0JCQkJMjZFNkMxRUQxNjA5MDM3
MzAwQ0E2QUY0IC8qIFVSTFV0aWwuaCAqLywKLQkJCQkyNkU2QzFFQTE2MDkwMzczMDBDQTZBRjQg
LyogVVJMVXRpbEludGVybmFsLmggKi8sCi0JCQkpOwotCQkJcGF0aCA9IHNyYzsKLQkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07CiAvKiBFbmQgUEJYR3JvdXAgc2VjdGlvbiAqLwogCiAv
KiBCZWdpbiBQQlhIZWFkZXJzQnVpbGRQaGFzZSBzZWN0aW9uICovCkBAIC0xMTk3LDcgKzEwNjgs
NiBAQAogCQkJCUE4QTQ3NDA0MTUxQTgyNUIwMDQxMjNGRiAvKiBQYWdlUmVzZXJ2YXRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDA1MTUxQTgyNUIwMDQxMjNGRiAvKiBQYXJhbGxlbEpv
YnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDA4MTUxQTgyNUIwMDQxMjNGRiAvKiBQYXJh
bGxlbEpvYnNMaWJkaXNwYXRjaC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQThBNDc0NzAxNTFBODI1
QjAwNDEyM0ZGIC8qIFBhcnNlZFVSTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MEExNTFB
ODI1QjAwNDEyM0ZGIC8qIFBhc3NPd25BcnJheVB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThB
NDc0MEIxNTFBODI1QjAwNDEyM0ZGIC8qIFBhc3NPd25QdHIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE4QTQ3NDBDMTUxQTgyNUIwMDQxMjNGRiAvKiBQYXNzUmVmUHRyLmggaW4gSGVhZGVycyAqLywK
QEAgLTEyMTAsNyArMTA4MCw2IEBACiAJCQkJQThBNDc0MTUxNTFBODI1QjAwNDEyM0ZGIC8qIFJh
bmRvbU51bWJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MTYxNTFBODI1QjAwNDEyM0ZG
IC8qIFJhbmRvbU51bWJlclNlZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODcxMDVBMTY2NDNG
MTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlBOEE0NzQ3MjE1
MUE4MjVCMDA0MTIzRkYgLyogUmF3VVJMQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0
NzQxNzE1MUE4MjVCMDA0MTIzRkYgLyogUmVkQmxhY2tUcmVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEE0NzQxODE1MUE4MjVCMDA0MTIzRkYgLyogUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQThBNDc0MTkxNTFBODI1QjAwNDEyM0ZGIC8qIFJlZkNvdW50ZWRBcnJheS5oIGluIEhl
YWRlcnMgKi8sCkBAIC0xMjY2LDE5ICsxMTM1LDYgQEAKIAkJCQlBOEE0NzQ2ODE1MUE4MjVCMDA0
MTIzRkYgLyogVW5pY29kZU1hY3Jvc0Zyb21JQ1UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3
NDZEMTUxQTgyNUIwMDQxMjNGRiAvKiBVbmlvbkZpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
QTQ3NDZFMTUxQTgyNUIwMDQxMjNGRiAvKiBVbnVzZWRQYXJhbS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJQThBNDc0NzMxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMjZFNkMyMDExNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uLmggaW4gSGVhZGVycyAq
LywKLQkJCQkyNkU2QzFGNjE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25JbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJQThBNDc0NzUxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTENoYXJhY3Rl
clR5cGVzLmggaW4gSGVhZGVycyAqLywKLQkJCQlBOEE0NzQ3NjE1MUE4MjVCMDA0MTIzRkYgLyog
VVJMQ29tcG9uZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQkyNkU2QzIwMzE2MDkwMzczMDBDQTZB
RjQgLyogVVJMRmlsZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMjZFNkMyMDgxNjA5MDM3MzAwQ0E2
QUY0IC8qIFVSTFBhcnNlLmggaW4gSGVhZGVycyAqLywKLQkJCQkyNkU2QzIwNTE2MDkwMzczMDBD
QTZBRjQgLyogVVJMUGFyc2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMjY2MTEyMkUx
NjBGRUFENDAwMTNGNUMzIC8qIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQThBNDc0N0MxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTFNlZ21lbnRzLmggaW4gSGVh
ZGVycyAqLywKLQkJCQlBOEE0NzQ3MTE1MUE4MjVCMDA0MTIzRkYgLyogVVJMU3RyaW5nLmggaW4g
SGVhZGVycyAqLywKLQkJCQkyNkU2QzIwRDE2MDkwMzczMDBDQTZBRjQgLyogVVJMVXRpbC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMjZFNkMyMEExNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFV0aWxJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NkExNTFBODI1QjAwNDEyM0ZGIC8qIFVU
RjguaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0I5MTUxQTgyNUIwMDQxMjNGRiAvKiB1dGls
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0N0QxNTFBODI1QjAwNDEyM0ZGIC8qIFZhbHVl
Q2hlY2suaCBpbiBIZWFkZXJzICovLApAQCAtMTQwNCw3ICsxMjYwLDYgQEAKIAkJCQlBOEE0NzNG
OTE1MUE4MjVCMDA0MTIzRkYgLyogT1NSYW5kb21Tb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQThBNDc0MDAxNTFBODI1QjAwNDEyM0ZGIC8qIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQwMjE1MUE4MjVCMDA0MTIzRkYgLyogUGFnZUJsb2Nr
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUE4QTQ3NDZGMTUxQTgyNUIwMDQxMjNGRiAvKiBQYXJz
ZWRVUkwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RDMzNjIxNjVEQkE3MzAwNUFEMzg3IC8q
IFByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0M0Y2MTFGMTU2NUYwRjkwMERC
NTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDE0MTUxQTgyNUIw
MDQxMjNGRiAvKiBSYW5kb21OdW1iZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xNDI0LDI1ICsx
Mjc5LDYgQEAKIAkJCQlBOEE0NzQ0QTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDRFMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQ
dGhyZWFkcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ1ODE1MUE4MjVCMDA0MTIzRkYg
LyogVHlwZVRyYWl0cy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyNkU2QzFFRTE2MDkwMzczMDBD
QTZBRjQgLyogVVJMQ2Fub25FdGMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMjZFNkMxRUYxNjA5
MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uRmlsZXN5c3RlbXVybC5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQkyNkU2QzFGMDE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25GaWxldXJsLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTI2RTZDMUYxMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkhvc3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMjZFNkMxRjIxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENh
bm9uSUNVLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTI2RTZDMUY1MTYwOTAzNzMwMENBNkFGNCAv
KiBVUkxDYW5vbkludGVybmFsLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTI2RTZDMUY3MTYwOTAz
NzMwMENBNkFGNCAvKiBVUkxDYW5vbklQLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTI2RTZDMUY5
MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbk1haWx0by5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQkyNkU2QzFGQTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25QYXRoLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCTI2RTZDMUZCMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vblBhdGh1cmwuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJMjZFNkMxRkMxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9u
UXVlcnkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMjZFNkMxRkQxNjA5MDM3MzAwQ0E2QUY0IC8q
IFVSTENhbm9uUmVsYXRpdmUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMjZFNkMxRkYxNjA5MDM3
MzAwQ0E2QUY0IC8qIFVSTENhbm9uU3RkVVJMLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUE4QTQ3
NDc0MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxDaGFyYWN0ZXJUeXBlcy5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQkyNkU2QzIwNzE2MDkwMzczMDBDQTZBRjQgLyogVVJMUGFyc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJMjZFNkMyMDQxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFBhcnNlRmlsZS5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQlBOEE0NzQ3QjE1MUE4MjVCMDA0MTIzRkYgLyogVVJMU2VnbWVu
dHMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDMzMEYzOEYxNTc0NUIwNTAwQUFGQThGIC8qIFVS
TFN0cmluZy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyNkU2QzIwQzE2MDkwMzczMDBDQTZBRjQg
LyogVVJMVXRpbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ2OTE1MUE4MjVCMDA0MTIz
RkYgLyogVVRGOC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0NTE1MUE4MjVCMDA0MTIz
RkYgLyogV1RGU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDg2MTUxQTgyNUIw
MDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uUGFyc2VkVVJMLmggYi9Tb3VyY2Uv
V1RGL3d0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25QYXJzZWRVUkwuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggODI5NTVlNjg5OTdjNzMyM2MyMzFkYjg1NTkwZDRmYzhlZmIyODNkZi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25QYXJzZWRVUkwuaAorKysgL2Rldi9udWxsCkBAIC0x
LDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIE1lbW9yeUluc3RydW1lbnRhdGlvblBhcnNlZFVSTF9oCi0jZGVm
aW5lIE1lbW9yeUluc3RydW1lbnRhdGlvblBhcnNlZFVSTF9oCi0KLSNpbmNsdWRlIDx3dGYvTWVt
b3J5SW5zdHJ1bWVudGF0aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL01lbW9yeUluc3RydW1lbnRhdGlv
blN0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi91cmwvYXBpL1BhcnNlZFVSTC5oPgotCi1uYW1lc3Bh
Y2UgV1RGIHsKLQotaW5saW5lIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoY29uc3QgVVJMU3RyaW5n
KiB1cmxTdHJpbmcsIE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pCi17Ci0gICAg
TWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdXJsU3RyaW5nKTsKLSAgICBp
bmZvLmFkZE1lbWJlcih1cmxTdHJpbmctPnN0cmluZygpKTsKLX0KLQotaW5saW5lIHZvaWQgcmVw
b3J0TWVtb3J5VXNhZ2UoY29uc3QgUGFyc2VkVVJMKiBwYXJzZWRVUkwsIE1lbW9yeU9iamVjdElu
Zm8qIG1lbW9yeU9iamVjdEluZm8pCi17Ci0gICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5
T2JqZWN0SW5mbywgcGFyc2VkVVJMKTsKLSAgICBpbmZvLmFkZE1lbWJlcihwYXJzZWRVUkwtPnNw
ZWMoKSk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vICFkZWZpbmVkKE1lbW9yeUluc3RydW1lbnRhdGlv
bmlQYXJzZWRVUkxfaCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9hcGkvUGFyc2Vk
VVJMLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VybC9hcGkvUGFyc2VkVVJMLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYzcxM2EzMjdlNzFjNGQ2OWQ1YjQ1YjIwMmE1ZjI1Nzg0NGE2
ZDY3NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi91cmwvYXBpL1BhcnNlZFVSTC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNTkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUsIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQYXJzZWRVUkwuaCIKLQotI2lmIFVTRShXVEZV
UkwpCi0KLSNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+Ci0jaW5jbHVkZSA8d3RmL3Vy
bC9zcmMvUmF3VVJMQnVmZmVyLmg+Ci0jaW5jbHVkZSA8d3RmL3VybC9zcmMvVVJMQ29tcG9uZW50
Lmg+Ci0jaW5jbHVkZSA8d3RmL3VybC9zcmMvVVJMVXRpbC5oPgotCi1uYW1lc3BhY2UgV1RGIHsK
LQotUGFyc2VkVVJMOjpQYXJzZWRVUkwoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIFBhcnNlZFVS
TFN0cmluZ1RhZykKLXsKLSAgICB1bnNpZ25lZCB1cmxTdHJpbmdMZW5ndGggPSB1cmxTdHJpbmcu
bGVuZ3RoKCk7Ci0gICAgaWYgKCF1cmxTdHJpbmdMZW5ndGgpCi0gICAgICAgIHJldHVybjsgLy8g
RklYTUU6IHdlIHNob3VsZCBBU1NFUlQgb24gdGhpcywgYnV0IHBlb3BsZSB1c2UgS1VSTCBpbmNv
cnJlY3RseSB3aXRoIFBhcnNlZFVSTFN0cmluZ1RhZyA6KC4KLQotICAgIFJhd1VSTEJ1ZmZlcjxj
aGFyPiBvdXRwdXRCdWZmZXI7Ci0gICAgU3RyaW5nIGJhc2U7Ci0gICAgY29uc3QgQ1N0cmluZyYg
YmFzZVN0ciA9IGJhc2UudXRmOCgpOwotICAgIGJvb2wgaXNWYWxpZCA9IGZhbHNlOwotICAgIFVS
TFNlZ21lbnRzIGJhc2VTZWdtZW50czsKLQotICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgdGFrZSBz
aG9ydGN1dHMgaGVyZSEgV2UgZG8gbm90IGhhdmUgdG8gcmVzb2x2ZSB0aGUgcmVsYXRpdmUgcGFy
dC4KLSAgICBpZiAodXJsU3RyaW5nLmlzOEJpdCgpKQotICAgICAgICBpc1ZhbGlkID0gVVJMVXRp
bGl0aWVzOjpyZXNvbHZlUmVsYXRpdmUoYmFzZVN0ci5kYXRhKCksIGJhc2VTZWdtZW50cywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2hhcio+KHVybFN0cmluZy5jaGFyYWN0ZXJzOCgpKSwgdXJsU3RyaW5nTGVu
Z3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog
Y2hhcnNldENvbnZlcnRlciAqLyAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cHV0QnVmZmVyLCAmbV9zZWdtZW50cyk7Ci0gICAgZWxzZQotICAg
ICAgICBpc1ZhbGlkID0gVVJMVXRpbGl0aWVzOjpyZXNvbHZlUmVsYXRpdmUoYmFzZVN0ci5kYXRh
KCksIGJhc2VTZWdtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVybFN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgdXJsU3RyaW5nTGVuZ3RoLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2hhcnNldENv
bnZlcnRlciAqLyAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0cHV0QnVmZmVyLCAmbV9zZWdtZW50cyk7Ci0KLSAgICAvLyBGSVhNRTogd2Ugc2hv
dWxkIEFTU0VSVCBvbiBpc1ZhbGlkLCBidXQgcGVvcGxlIHVzZSBLVVJMIGluY29ycmVjdGx5IHdp
dGggUGFyc2VkVVJMU3RyaW5nVGFnIDooLgotICAgIGlmIChpc1ZhbGlkKQotICAgICAgICBtX3Nw
ZWMgPSBVUkxTdHJpbmcoU3RyaW5nKG91dHB1dEJ1ZmZlci5kYXRhKCksIG91dHB1dEJ1ZmZlci5s
ZW5ndGgoKSkpOwotfQotCi1QYXJzZWRVUkw6OlBhcnNlZFVSTChjb25zdCBTdHJpbmcmIHVybFN0
cmluZywgVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNoYXJzZXRDb252ZXJ0ZXIpCi17
Ci0gICAgdW5zaWduZWQgdXJsU3RyaW5nTGVuZ3RoID0gdXJsU3RyaW5nLmxlbmd0aCgpOwotICAg
IGlmICghdXJsU3RyaW5nTGVuZ3RoKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSYXdVUkxCdWZm
ZXI8Y2hhcj4gb3V0cHV0QnVmZmVyOwotICAgIFN0cmluZyBiYXNlOwotICAgIGNvbnN0IENTdHJp
bmcmIGJhc2VTdHIgPSBiYXNlLnV0ZjgoKTsKLSAgICBib29sIGlzVmFsaWQgPSBmYWxzZTsKLSAg
ICBVUkxTZWdtZW50cyBiYXNlU2VnbWVudHM7Ci0KLSAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIHRh
a2Ugc2hvcnRjdXRzIGhlcmUhIFdlIGRvIG5vdCBoYXZlIHRvIHJlc29sdmUgdGhlIHJlbGF0aXZl
IHBhcnQuCi0gICAgaWYgKHVybFN0cmluZy5pczhCaXQoKSkKLSAgICAgICAgaXNWYWxpZCA9IFVS
TFV0aWxpdGllczo6cmVzb2x2ZVJlbGF0aXZlKGJhc2VTdHIuZGF0YSgpLCBiYXNlU2VnbWVudHMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPih1cmxTdHJpbmcuY2hhcmFjdGVyczgoKSksIHVybFN0cmlu
Z0xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHF1ZXJ5Q2hhcnNldENvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHB1dEJ1ZmZlciwgJm1fc2VnbWVudHMpOwotICAgIGVsc2UKLSAg
ICAgICAgaXNWYWxpZCA9IFVSTFV0aWxpdGllczo6cmVzb2x2ZVJlbGF0aXZlKGJhc2VTdHIuZGF0
YSgpLCBiYXNlU2VnbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1cmxTdHJpbmcuY2hhcmFjdGVyczE2KCksIHVybFN0cmluZ0xlbmd0aCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5Q2hhcnNl
dENvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dHB1dEJ1ZmZlciwgJm1fc2VnbWVudHMpOwotCi0gICAgaWYgKGlzVmFsaWQpCi0gICAg
ICAgIG1fc3BlYyA9IFVSTFN0cmluZyhTdHJpbmcob3V0cHV0QnVmZmVyLmRhdGEoKSwgb3V0cHV0
QnVmZmVyLmxlbmd0aCgpKSk7Ci19Ci0KLVBhcnNlZFVSTDo6UGFyc2VkVVJMKGNvbnN0IFBhcnNl
ZFVSTCYgYmFzZSwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZSwgVVJMUXVlcnlDaGFyc2V0Q29udmVy
dGVyKiBxdWVyeUNoYXJzZXRDb252ZXJ0ZXIpCi17Ci0gICAgaWYgKCFiYXNlLmlzVmFsaWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgcmVsYXRpdmVMZW5ndGggPSByZWxhdGl2
ZS5sZW5ndGgoKTsKLSAgICBpZiAoIXJlbGF0aXZlTGVuZ3RoKSB7Ci0gICAgICAgICp0aGlzID0g
YmFzZS53aXRob3V0RnJhZ21lbnQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJh
d1VSTEJ1ZmZlcjxjaGFyPiBvdXRwdXRCdWZmZXI7Ci0gICAgY29uc3QgQ1N0cmluZyYgYmFzZVN0
ciA9IGJhc2UubV9zcGVjLm1fc3RyaW5nLnV0ZjgoKTsKLSAgICBib29sIGlzVmFsaWQgPSBmYWxz
ZTsKLQotICAgIGlmIChyZWxhdGl2ZS5pczhCaXQoKSkKLSAgICAgICAgaXNWYWxpZCA9IFVSTFV0
aWxpdGllczo6cmVzb2x2ZVJlbGF0aXZlKGJhc2VTdHIuZGF0YSgpLCBiYXNlLm1fc2VnbWVudHMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPihyZWxhdGl2ZS5jaGFyYWN0ZXJzOCgpKSwgcmVsYXRpdmVM
ZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBx
dWVyeUNoYXJzZXRDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRwdXRCdWZmZXIsICZtX3NlZ21lbnRzKTsKLSAgICBlbHNlCi0gICAg
ICAgIGlzVmFsaWQgPSBVUkxVdGlsaXRpZXM6OnJlc29sdmVSZWxhdGl2ZShiYXNlU3RyLmRhdGEo
KSwgYmFzZS5tX3NlZ21lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVsYXRpdmUuY2hhcmFjdGVyczE2KCksIHJlbGF0aXZlTGVuZ3RoLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlDaGFyc2V0
Q29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cHV0QnVmZmVyLCAmbV9zZWdtZW50cyk7Ci0KLSAgICBpZiAoaXNWYWxpZCkKLSAgICAg
ICAgbV9zcGVjID0gVVJMU3RyaW5nKFN0cmluZyhvdXRwdXRCdWZmZXIuZGF0YSgpLCBvdXRwdXRC
dWZmZXIubGVuZ3RoKCkpKTsKLX0KLQotUGFyc2VkVVJMIFBhcnNlZFVSTDo6aXNvbGF0ZWRDb3B5
KCkgY29uc3QKLXsKLSAgICBQYXJzZWRVUkwgY29weTsKLSAgICBjb3B5Lm1fc2VnbWVudHMgPSB0
aGlzLT5tX3NlZ21lbnRzOwotICAgIGNvcHkubV9zcGVjID0gVVJMU3RyaW5nKHRoaXMtPm1fc3Bl
Yy5zdHJpbmcoKS5pc29sYXRlZENvcHkoKSk7Ci0gICAgcmV0dXJuIGNvcHk7Ci19Ci0KLVN0cmlu
ZyBQYXJzZWRVUkw6OnNjaGVtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNlZ21lbnQobV9zZWdt
ZW50cy5zY2hlbWUpOwotfQotCi1ib29sIFBhcnNlZFVSTDo6aGFzU3RhbmRhcmRTY2hlbWUoKSBj
b25zdAotewotICAgIEFTU0VSVChtX3NlZ21lbnRzLnNjaGVtZS5pc1ZhbGlkKCkpOwotICAgIGNv
bnN0IFN0cmluZyYgdXJsU3RyaW5nU3BlYyA9IG1fc3BlYy5tX3N0cmluZzsKLSAgICBpZiAodXJs
U3RyaW5nU3BlYy5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIFVSTFV0aWxpdGllczo6aXNTdGFu
ZGFyZCh1cmxTdHJpbmdTcGVjLmNoYXJhY3RlcnM4KCksIG1fc2VnbWVudHMuc2NoZW1lKTsKLSAg
ICByZXR1cm4gVVJMVXRpbGl0aWVzOjppc1N0YW5kYXJkKHVybFN0cmluZ1NwZWMuY2hhcmFjdGVy
czE2KCksIG1fc2VnbWVudHMuc2NoZW1lKTsKLX0KLQotU3RyaW5nIFBhcnNlZFVSTDo6dXNlcm5h
bWUoKSBjb25zdAotewotICAgIHJldHVybiBzZWdtZW50KG1fc2VnbWVudHMudXNlcm5hbWUpOwot
fQotCi1TdHJpbmcgUGFyc2VkVVJMOjpwYXNzd29yZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNl
Z21lbnQobV9zZWdtZW50cy5wYXNzd29yZCk7Ci19Ci0KLVN0cmluZyBQYXJzZWRVUkw6Omhvc3Qo
KSBjb25zdAotewotICAgIHJldHVybiBzZWdtZW50KG1fc2VnbWVudHMuaG9zdCk7Ci19Ci0KLWJv
b2wgUGFyc2VkVVJMOjpoYXNQb3J0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zZWdtZW50cy5w
b3J0LmlzTm9uRW1wdHkoKTsKLX0KLQotU3RyaW5nIFBhcnNlZFVSTDo6cG9ydCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIHNlZ21lbnQobV9zZWdtZW50cy5wb3J0KTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIGdlbmVyYXRlTmV3U3Bl
Y1dpdGhQb3J0KGNvbnN0IFN0cmluZyYgc3BlYywgdW5zaWduZWQgbmV3U3BlY0xlbmd0aCwgdW5z
aWduZWQgcG9ydERlbGltaXRlclBvc2l0aW9uLCBjb25zdCBMQ2hhciogcG9ydFN0cmluZywgdW5z
aWduZWQgcG9ydFN0cmluZ0xlbmd0aCwgdW5zaWduZWQgcG9zdFBvcnRQb3NpdGlvbkluU291cmNl
KQotewotICAgIEFTU0VSVChuZXdTcGVjTGVuZ3RoID09IHBvcnREZWxpbWl0ZXJQb3NpdGlvbiAr
IDEgKyBwb3J0U3RyaW5nTGVuZ3RoICsgKHNwZWMubGVuZ3RoKCkgLSBwb3N0UG9ydFBvc2l0aW9u
SW5Tb3VyY2UpKTsKLQotICAgIENoYXJhY3RlclR5cGUqIGJ1ZmZlcjsKLSAgICBTdHJpbmcgbmV3
U3BlYyA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobmV3U3BlY0xlbmd0aCwgYnVm
ZmVyKTsKLQotICAgIC8vIENvcHkgZXZlcnl0aGluZyBwcmlvciB0byB0aGUgcG9ydCBwb3Npc2l0
b24uCi0gICAgQVNTRVJUKGJ1ZmZlciArIHBvcnREZWxpbWl0ZXJQb3NpdGlvbiA8IGJ1ZmZlciAr
IG5ld1NwZWNMZW5ndGgpOwotICAgIFN0cmluZ0ltcGw6OmNvcHlDaGFycyhidWZmZXIsIHNwZWMu
Z2V0Q2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpLCBwb3J0RGVsaW1pdGVyUG9zaXRpb24pOwot
Ci0gICAgLy8gQWRkIHRoZSBuZXcgcG9ydCBmcm9tIHRoZSBwb3NpdGlvbi4KLSAgICBidWZmZXJb
cG9ydERlbGltaXRlclBvc2l0aW9uXSA9ICc6JzsKLSAgICB1bnNpZ25lZCBwb3J0UG9zaXRpb24g
PSBwb3J0RGVsaW1pdGVyUG9zaXRpb24gKyAxOwotICAgIEFTU0VSVChidWZmZXIgKyBwb3J0UG9z
aXRpb24gKyBwb3J0U3RyaW5nTGVuZ3RoIDw9IGJ1ZmZlciArIG5ld1NwZWNMZW5ndGgpOwotICAg
IFN0cmluZ0ltcGw6OmNvcHlDaGFycyhidWZmZXIgKyBwb3J0UG9zaXRpb24sIHBvcnRTdHJpbmcs
IHBvcnRTdHJpbmdMZW5ndGgpOwotCi0gICAgLy8gQ29weSB0aGUgY2hhcmFjdGVyIHBvc3QtcG9y
dCBmcm9tIHRoZSBzb3VyY2UuCi0gICAgdW5zaWduZWQgcmVtYWluaW5nQ29tcG9uZW50c1Bvc2l0
aW9uSW5EZXN0aW5hdGlvbiA9IHBvcnRQb3NpdGlvbiArIHBvcnRTdHJpbmdMZW5ndGg7Ci0gICAg
QVNTRVJUKGJ1ZmZlciArIHJlbWFpbmluZ0NvbXBvbmVudHNQb3NpdGlvbkluRGVzdGluYXRpb24g
KyAoc3BlYy5sZW5ndGgoKSAtIHBvc3RQb3J0UG9zaXRpb25JblNvdXJjZSkgPT0gYnVmZmVyICsg
bmV3U3BlY0xlbmd0aCk7Ci0gICAgU3RyaW5nSW1wbDo6Y29weUNoYXJzKGJ1ZmZlciArIHJlbWFp
bmluZ0NvbXBvbmVudHNQb3NpdGlvbkluRGVzdGluYXRpb24sICYoc3BlYy5nZXRDaGFyYWN0ZXJz
PENoYXJhY3RlclR5cGU+KClbcG9zdFBvcnRQb3NpdGlvbkluU291cmNlXSksIHNwZWMubGVuZ3Ro
KCkgLSBwb3N0UG9ydFBvc2l0aW9uSW5Tb3VyY2UpOwotCi0gICAgcmV0dXJuIG5ld1NwZWM7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByZXBsYWNlUG9ydFdpdGhTdHJpbmcoU3RyaW5nJiBzcGVj
LCBVUkxTZWdtZW50cyYgc2VnbWVudHMsIGNvbnN0IExDaGFyKiBwb3J0U3RyaW5nLCB1bnNpZ25l
ZCBwb3J0U3RyaW5nTGVuZ3RoKQotewotICAgIC8vIENvbXB1dGUgdGhlIG5ldyBzcGVjIGxlbmd0
aC4KLSAgICBpbnQgbGVuZ3RoRGlmZmVyZW5jZTsKLSAgICBjb25zdCBVUkxDb21wb25lbnQgb2xk
UG9ydENvbXBvbmVudCA9IHNlZ21lbnRzLnBvcnQ7Ci0gICAgaWYgKG9sZFBvcnRDb21wb25lbnQu
aXNWYWxpZCgpKQotICAgICAgICBsZW5ndGhEaWZmZXJlbmNlID0gcG9ydFN0cmluZ0xlbmd0aCAt
IG9sZFBvcnRDb21wb25lbnQubGVuZ3RoKCk7Ci0gICAgZWxzZQotICAgICAgICBsZW5ndGhEaWZm
ZXJlbmNlID0gMSArIHBvcnRTdHJpbmdMZW5ndGg7Ci0gICAgdW5zaWduZWQgbmV3TGVuZ3RoID0g
c3BlYy5sZW5ndGgoKSArIGxlbmd0aERpZmZlcmVuY2U7Ci0KLSAgICAvLyBGaW5kIHRoZSBzdWJz
dHJpbmcgcG9zaXRpb25zIGZvciB0aGUgZ2VuZXJhdG9yIHRlbXBsYXRlLgotICAgIGludCBwb3J0
RGVsaW1pdGVyUG9zaXRpb24gPSBzZWdtZW50cy5jaGFyYWN0ZXJzQmVmb3JlKFVSTFNlZ21lbnRz
OjpQb3J0LCBVUkxTZWdtZW50czo6RGVsaW1pdGVySW5jbHVkZWQpOwotICAgIEFTU0VSVChwb3J0
RGVsaW1pdGVyUG9zaXRpb24gPiAwKTsKLQotICAgIHVuc2lnbmVkIHBvc3RQb3J0UG9zaXRpb25J
blNvdXJjZTsKLSAgICBpZiAob2xkUG9ydENvbXBvbmVudC5pc1ZhbGlkKCkpCi0gICAgICAgIHBv
c3RQb3J0UG9zaXRpb25JblNvdXJjZSA9IG9sZFBvcnRDb21wb25lbnQuZW5kKCk7Ci0gICAgZWxz
ZQotICAgICAgICBwb3N0UG9ydFBvc2l0aW9uSW5Tb3VyY2UgPSBwb3J0RGVsaW1pdGVyUG9zaXRp
b247Ci0KLSAgICAvLyBDcmVhdGUgdGhlIG5ldyBzcGVjIHdpdGggcG9ydFN0cmluZy4KLSAgICBp
ZiAoc3BlYy5pczhCaXQoKSkKLSAgICAgICAgc3BlYyA9IGdlbmVyYXRlTmV3U3BlY1dpdGhQb3J0
PExDaGFyPihzcGVjLCBuZXdMZW5ndGgsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb3J0RGVsaW1p
dGVyUG9zaXRpb24pLCBwb3J0U3RyaW5nLCBwb3J0U3RyaW5nTGVuZ3RoLCBwb3N0UG9ydFBvc2l0
aW9uSW5Tb3VyY2UpOwotICAgIGVsc2UKLSAgICAgICAgc3BlYyA9IGdlbmVyYXRlTmV3U3BlY1dp
dGhQb3J0PFVDaGFyPihzcGVjLCBuZXdMZW5ndGgsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb3J0
RGVsaW1pdGVyUG9zaXRpb24pLCBwb3J0U3RyaW5nLCBwb3J0U3RyaW5nTGVuZ3RoLCBwb3N0UG9y
dFBvc2l0aW9uSW5Tb3VyY2UpOwotCi0gICAgLy8gVXBkYXRlIHRoZSBVUkwgY29tcG9uZW50cy4K
LSAgICB1bnNpZ25lZCBwb3J0UG9zaXRpb24gPSBwb3J0RGVsaW1pdGVyUG9zaXRpb24gKyAxOwot
ICAgIHNlZ21lbnRzLnBvcnQuc2V0QmVnaW4ocG9ydFBvc2l0aW9uKTsKLSAgICBzZWdtZW50cy5w
b3J0LnNldExlbmd0aChwb3J0U3RyaW5nTGVuZ3RoKTsKLSAgICBzZWdtZW50cy5tb3ZlRnJvbUNv
bXBvbmVudEJ5KFVSTFNlZ21lbnRzOjpQYXRoLCBsZW5ndGhEaWZmZXJlbmNlKTsKLX0KLQotCi12
b2lkIFBhcnNlZFVSTDo6cmVwbGFjZVBvcnQodW5zaWduZWQgc2hvcnQgbmV3UG9ydCkKLXsKLSAg
ICBBU1NFUlQoaGFzU3RhbmRhcmRTY2hlbWUoKSk7Ci0KLSAgICAvLyBHZW5lcmF0ZSBhIGNoYXIq
IHN0cmluZyBmb3IgdGhlIHBvcnQgbnVtYmVyLgotICAgIExDaGFyIGJ1Zls1XTsKLSAgICBMQ2hh
ciogZW5kID0gYnVmICsgV1RGX0FSUkFZX0xFTkdUSChidWYpOwotICAgIExDaGFyKiBwID0gZW5k
OwotICAgIGRvIHsKLSAgICAgICAgKi0tcCA9IHN0YXRpY19jYXN0PExDaGFyPigobmV3UG9ydCAl
IDEwKSArICcwJyk7Ci0gICAgICAgIG5ld1BvcnQgLz0gMTA7Ci0gICAgfSB3aGlsZSAobmV3UG9y
dCk7Ci0gICAgY29uc3QgdW5zaWduZWQgcG9ydFN0cmluZ0xlbmd0aCA9IGVuZCAtIHA7Ci0KLSAg
ICByZXBsYWNlUG9ydFdpdGhTdHJpbmcobV9zcGVjLm1fc3RyaW5nLCBtX3NlZ21lbnRzLCBwLCBw
b3J0U3RyaW5nTGVuZ3RoKTsKLX0KLQotdm9pZCBQYXJzZWRVUkw6OnJlbW92ZVBvcnQoKQotewot
ICAgIGlmICghaGFzUG9ydCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyAxKSBSZW1vdmUg
dGhlIHBvcnQgZnJvbSB0aGUgc3BlYywgaW5jbHVkaW5nIHRoZSBkZWxpbWl0ZXIuCi0gICAgU3Ry
aW5nIG5ld1NwZWM7Ci0gICAgaW50IGJlZ2lubmluZyA9IG1fc2VnbWVudHMucG9ydC5iZWdpbigp
IC0gMTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBtX3NlZ21lbnRzLnBvcnQubGVuZ3RoKCkgKyAx
OwotCi0gICAgU3RyaW5nIG5ld1NwZWNTdHJpbmcgPSBtX3NwZWMuc3RyaW5nKCk7Ci0gICAgbmV3
U3BlY1N0cmluZy5yZW1vdmUoYmVnaW5uaW5nLCBsZW5ndGgpOwotICAgIG1fc3BlYyA9IFVSTFN0
cmluZyhuZXdTcGVjU3RyaW5nKTsKLQotICAgIC8vIDIpIFVwZGF0ZSB0aGUgY29tcG9uZW50cyBw
b3NpdGlvbnMuCi0gICAgbV9zZWdtZW50cy5wb3J0LnJlc2V0KCk7Ci0gICAgbV9zZWdtZW50cy5t
b3ZlRnJvbUNvbXBvbmVudEJ5KFVSTFNlZ21lbnRzOjpQYXRoLCAtbGVuZ3RoKTsKLX0KLQotU3Ry
aW5nIFBhcnNlZFVSTDo6cGF0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNlZ21lbnQobV9zZWdt
ZW50cy5wYXRoKTsKLX0KLQotU3RyaW5nIFBhcnNlZFVSTDo6cXVlcnkoKSBjb25zdAotewotICAg
IHJldHVybiBzZWdtZW50KG1fc2VnbWVudHMucXVlcnkpOwotfQotCi1ib29sIFBhcnNlZFVSTDo6
aGFzRnJhZ21lbnQoKSBjb25zdAotewotICAgIHJldHVybiBtX3NlZ21lbnRzLmZyYWdtZW50Lmlz
VmFsaWQoKTsKLX0KLQotU3RyaW5nIFBhcnNlZFVSTDo6ZnJhZ21lbnQoKSBjb25zdAotewotICAg
IHJldHVybiBzZWdtZW50KG1fc2VnbWVudHMuZnJhZ21lbnQpOwotfQotCi1QYXJzZWRVUkwgUGFy
c2VkVVJMOjp3aXRob3V0RnJhZ21lbnQoKSBjb25zdAotewotICAgIGlmICghaGFzRnJhZ21lbnQo
KSkKLSAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgUGFyc2VkVVJMIG5ld1VSTDsKLQotICAg
IGludCBjaGFyYWN0ZXJzQmVmb3JlRnJhZ2VtbnQgPSBtX3NlZ21lbnRzLmNoYXJhY3RlcnNCZWZv
cmUoVVJMU2VnbWVudHM6OkZyYWdtZW50LCBVUkxTZWdtZW50czo6RGVsaW1pdGVyRXhjbHVkZWQp
OwotICAgIG5ld1VSTC5tX3NwZWMgPSBVUkxTdHJpbmcobV9zcGVjLnN0cmluZygpLnN1YnN0cmlu
Z1NoYXJpbmdJbXBsKDAsIGNoYXJhY3RlcnNCZWZvcmVGcmFnZW1udCkpOwotCi0gICAgbmV3VVJM
Lm1fc2VnbWVudHMgPSBtX3NlZ21lbnRzOwotICAgIG5ld1VSTC5tX3NlZ21lbnRzLmZyYWdtZW50
ID0gVVJMQ29tcG9uZW50KCk7Ci0gICAgcmV0dXJuIG5ld1VSTDsKLX0KLQotU3RyaW5nIFBhcnNl
ZFVSTDo6YmFzZUFzU3RyaW5nKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogQWRkIFdURlVSTCBJ
bXBsZW1lbnRhdGlvbi4KLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBQYXJzZWRV
Ukw6OnNlZ21lbnQoY29uc3QgVVJMQ29tcG9uZW50JiBjb21wb25lbnQpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKGlzVmFsaWQoKSk7Ci0KLSAgICBpZiAoIWNvbXBvbmVudC5pc1ZhbGlkKCkpCi0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIFN0cmluZyBzZWdtZW50ID0gbV9zcGVjLnN0cmlu
ZygpLnN1YnN0cmluZyhjb21wb25lbnQuYmVnaW4oKSwgY29tcG9uZW50Lmxlbmd0aCgpKTsKLQot
ICAgIC8vIEZJWE1FOiBHb29nbGVVUkwgY3JlYXRlIGVtcHR5IHNlZ21lbnRzLiBUaGlzIGhhcHBl
biBmb3IgdGhlIGZyYWdtZW50IGZvciB0aGUgdGVzdCBmYXN0L3VybC9zZWdtZW50cy5odG1sCi0g
ICAgLy8gQVNTRVJUX1dJVEhfTUVTU0FHRSghc2VnbWVudC5pc0VtcHR5KCksICJBIHZhbGlkIFVS
TCBjb21wb25lbnQgc2hvdWxkIG5vdCBiZSBlbXB0eS4iKTsKLSAgICByZXR1cm4gc2VnbWVudDsK
LX0KLQotI2lmbmRlZiBOREVCVUcKLQotI2RlZmluZSBTSE9XX0NPTVBPTkVOVChwYXJzZWRVUkws
IGNvbXBvbmVudE5hbWUpIFwKLSAgICBpZiAoIXBhcnNlZFVSTC0+Y29tcG9uZW50TmFtZSgpLmlz
TnVsbCgpKSB7IFwKLSAgICAgICAgZGF0YUxvZygiICAgICIgI2NvbXBvbmVudE5hbWUgIiA9ICIp
OyBcCi0gICAgICAgIHBhcnNlZFVSTC0+Y29tcG9uZW50TmFtZSgpLnNob3coKTsgXAotICAgIH0K
LQotdm9pZCBQYXJzZWRVUkw6OnByaW50KCkgY29uc3QKLXsKLSAgICBpZiAoIWlzVmFsaWQoKSkg
ewotICAgICAgICBkYXRhTG9nKCJJbnZhbGlkIFBhcnNlZFVSTC5cbiIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgZGF0YUxvZygiVmFsaWQgUGFyc2VkVVJMIHdpdGg6XG4iKTsKLSAg
ICBkYXRhTG9nKCIgICAgbV9zcGVjID0gIik7Ci0gICAgbV9zcGVjLnByaW50KCk7Ci0KLSAgICBT
SE9XX0NPTVBPTkVOVCh0aGlzLCBzY2hlbWUpOwotICAgIFNIT1dfQ09NUE9ORU5UKHRoaXMsIHVz
ZXJuYW1lKTsKLSAgICBTSE9XX0NPTVBPTkVOVCh0aGlzLCBwYXNzd29yZCk7Ci0gICAgU0hPV19D
T01QT05FTlQodGhpcywgaG9zdCk7Ci0gICAgU0hPV19DT01QT05FTlQodGhpcywgcG9ydCk7Ci0g
ICAgU0hPV19DT01QT05FTlQodGhpcywgcGF0aCk7Ci0gICAgU0hPV19DT01QT05FTlQodGhpcywg
cXVlcnkpOwotICAgIFNIT1dfQ09NUE9ORU5UKHRoaXMsIGZyYWdtZW50KTsKLX0KLSNlbmRpZgot
Ci19Ci0KLSNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
dXJsL2FwaS9QYXJzZWRVUkwuaCBiL1NvdXJjZS9XVEYvd3RmL3VybC9hcGkvUGFyc2VkVVJMLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjMmE1ZDAwODk2ZGVjZjg4MGQ5MGQyMTVh
YzRjOGMyZThlOGNkM2MuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dURi93dGYvdXJsL2FwaS9QYXJzZWRVUkwuaAorKysgL2Rldi9udWxsCkBA
IC0xLDk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlLCBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIFBhcnNlZFVSTF9oCi0jZGVmaW5lIFBhcnNlZFVSTF9oCi0KLSNpZiBVU0Uo
V1RGVVJMKQotCi0jaW5jbHVkZSA8d3RmL3VybC9hcGkvVVJMU3RyaW5nLmg+Ci0jaW5jbHVkZSA8
d3RmL3VybC9zcmMvVVJMU2VnbWVudHMuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLWNsYXNzIFVS
TENvbXBvbmVudDsKLWNsYXNzIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlcjsKLQotLy8gUGFyc2Vk
VVJMIHJlcHJlc2VudHMgYSB2YWxpZCBVUkwgZGVjb21wb3NlZCBieSBjb21wb25lbnRzLgotY2xh
c3MgUGFyc2VkVVJMIHsKLXB1YmxpYzoKLSAgICBlbnVtIFBhcnNlZFVSTFN0cmluZ1RhZyB7IFBh
cnNlZFVSTFN0cmluZyB9OwotCi0gICAgUGFyc2VkVVJMKCkgeyB9OwotICAgIFdURl9FWFBPUlRf
UFJJVkFURSBleHBsaWNpdCBQYXJzZWRVUkwoY29uc3QgU3RyaW5nJiwgUGFyc2VkVVJMU3RyaW5n
VGFnKTsKLQotICAgIFdURl9FWFBPUlRfUFJJVkFURSBleHBsaWNpdCBQYXJzZWRVUkwoY29uc3Qg
U3RyaW5nJiwgVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyKik7Ci0gICAgV1RGX0VYUE9SVF9QUklW
QVRFIGV4cGxpY2l0IFBhcnNlZFVSTChjb25zdCBQYXJzZWRVUkwmIGJhc2UsIGNvbnN0IFN0cmlu
ZyYgcmVsYXRpdmUsIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciopOwotCi0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIFBhcnNlZFVSTCBpc29sYXRlZENvcHkoKSBjb25zdDsKLSAgICBib29sIGlzU2Fm
ZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlYy5pc1NhZmVUb1Nl
bmRUb0Fub3RoZXJUaHJlYWQoKTsgfQotCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1
cm4gIW1fc3BlYy5zdHJpbmcoKS5pc051bGwoKTsgfQotCi0gICAgLy8gUmV0dXJuIGEgVVJMIGNv
bXBvbmVudCBvciBhIG51bGwgU3RyaW5nIGlmIHRoZSBjb21wb25lbnQgaXMgdW5kZWZpbmVkIGZv
ciB0aGUgVVJMLgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgc2NoZW1lKCkgY29uc3Q7
Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgaGFzU3RhbmRhcmRTY2hlbWUoKSBjb25zdDsK
LQotICAgIFdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgdXNlcm5hbWUoKSBjb25zdDsKLSAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHBhc3N3b3JkKCkgY29uc3Q7Ci0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIFN0cmluZyBob3N0KCkgY29uc3Q7Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBoYXNQb3J0KCkgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBwb3J0
KCkgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVwbGFjZVBvcnQodW5zaWdu
ZWQgc2hvcnQgbmV3UG9ydCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVtb3ZlUG9y
dCgpOwotCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBwYXRoKCkgY29uc3Q7Ci0gICAg
V1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyBxdWVyeSgpIGNvbnN0OwotCi0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIGJvb2wgaGFzRnJhZ21lbnQoKSBjb25zdDsKLSAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgU3RyaW5nIGZyYWdtZW50KCkgY29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFBhcnNl
ZFVSTCB3aXRob3V0RnJhZ21lbnQoKSBjb25zdDsKLQotCi0gICAgV1RGX0VYUE9SVF9QUklWQVRF
IFN0cmluZyBiYXNlQXNTdHJpbmcoKSBjb25zdDsKLQotICAgIGNvbnN0IFVSTFN0cmluZyYgc3Bl
YygpIGNvbnN0IHsgcmV0dXJuIG1fc3BlYzsgfQotCi0jaWZuZGVmIE5ERUJVRwotICAgIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIHByaW50KCkgY29uc3Q7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAg
ICBpbmxpbmUgU3RyaW5nIHNlZ21lbnQoY29uc3QgVVJMQ29tcG9uZW50JikgY29uc3Q7Ci0KLSAg
ICBVUkxTdHJpbmcgbV9zcGVjOwotICAgIFVSTFNlZ21lbnRzIG1fc2VnbWVudHM7Ci19OwotCi19
Ci0KLSNlbmRpZiAvLyBVU0UoV1RGVVJMKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL3VybC9hcGkvVVJMQnVmZmVyLmggYi9Tb3VyY2UvV1RGL3d0Zi91cmwvYXBpL1VSTEJ1
ZmZlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZWNjZDA0ZmE1Y2ZmMzI2Njdk
ZTA1YzI3MDQ3Zjg5Y2NhMmY2YTdiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL3VybC9hcGkvVVJMQnVmZmVyLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBVUkxCdWZmZXJfaAotI2RlZmluZSBVUkxCdWZmZXJf
aAotCi0jaWYgVVNFKFdURlVSTCkKLQotbmFtZXNwYWNlIFdURiB7Ci0KLS8vIEJhc2UgY2xhc3Mg
Zm9yIHRoZSBjYW5vbmljYWxpemVyIG91dHB1dCwgdGhpcyBtYWludGFpbnMgYSBidWZmZXIgYW5k
Ci0vLyBzdXBwb3J0cyBzaW1wbGUgcmVzaXppbmcgYW5kIGFwcGVuZCBvcGVyYXRpb25zIG9uIGl0
LgotLy8KLS8vIEl0IGlzIFZFUlkgSU1QT1JUQU5UIHRoYXQgbm8gdmlydHVhbCBmdW5jdGlvbiBj
YWxscyBiZSBtYWRlIG9uIHRoZSBjb21tb24KLS8vIGNvZGUgcGF0aC4gV2Ugb25seSBoYXZlIHR3
byB2aXJ0dWFsIGZ1bmN0aW9uIGNhbGxzLCB0aGUgZGVzdHJ1Y3RvciBhbmQgYQotLy8gcmVzaXpl
IGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIGV4aXN0aW5nIGJ1ZmZlciBpcyBub3Qg
YmlnIGVub3VnaC4KLS8vIFRoZSBkZXJpdmVkIGNsYXNzIGlzIHRoZW4gaW4gY2hhcmdlIG9mIHNl
dHRpbmcgdXAgb3VyIGJ1ZmZlciB3aGljaCB3ZSB3aWxsCi0vLyBtYW5hZ2UuCi10ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotY2xhc3MgVVJMQnVmZmVyIHsKLXB1YmxpYzoKLSAgICBV
UkxCdWZmZXIoKSA6IG1fYnVmZmVyKDApLCBtX2NhcGFjaXR5KDApLCBtX2xlbmd0aCgwKSB7IH0K
LSAgICB2aXJ0dWFsIH5VUkxCdWZmZXIoKSB7IH0KLQotICAgIC8vIEltcGxlbWVudGVkIHRvIHJl
c2l6ZSB0aGUgYnVmZmVyLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCB1cGRhdGUgdGhlIGJ1ZmZlcgot
ICAgIC8vIHBvaW50ZXIgdG8gcG9pbnQgdG8gdGhlIG5ldyBidWZmZXIsIGFuZCBhbnkgb2xkIGRh
dGEgdXAgdG8gfG1fbGVuZ3RofCBpbgotICAgIC8vIHRoZSBidWZmZXIgbXVzdCBiZSBjb3BpZWQg
b3Zlci4KLSAgICAvLwotICAgIC8vIFRoZSBuZXcgc2l6ZSBtdXN0IGJlIGxhcmdlciB0aGFuIG1f
Y2FwYWNpdHkuCi0gICAgdmlydHVhbCB2b2lkIHJlc2l6ZShpbnQpID0gMDsKLQotICAgIGlubGlu
ZSBjaGFyIGF0KGludCBvZmZzZXQpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyW29mZnNldF07IH0K
LSAgICBpbmxpbmUgdm9pZCBzZXQoaW50IG9mZnNldCwgQ2hhcmFjdGVyVHlwZSBjaCkKLSAgICB7
Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQgQVNTRVJUKG9mZnNldCA8IGxlbmd0aCgpKTsKLSAgICAg
ICAgbV9idWZmZXJbb2Zmc2V0XSA9IGNoOwotICAgIH0KLQotICAgIC8vIFJldHVybnMgdGhlIGN1
cnJlbnQgY2FwYWNpdHkgb2YgdGhlIGJ1ZmZlci4gVGhlIGxlbmd0aCgpIGlzIHRoZSBudW1iZXIg
b2YKLSAgICAvLyBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBiZWVuIGRlY2xhcmVkIHRvIGJlIHdyaXR0
ZW4sIGJ1dCB0aGUgY2FwYWNpdHkoKSBpcwotICAgIC8vIHRoZSBudW1iZXIgdGhhdCBjYW4gYmUg
d3JpdHRlbiB3aXRob3V0IHJlYWxsb2NhdGlvbi4gSWYgdGhlIGNhbGxlciBtdXN0Ci0gICAgLy8g
d3JpdGUgbWFueSBjaGFyYWN0ZXJzIGF0IG9uY2UsIGl0IGNhbiBtYWtlIHN1cmUgdGhlcmUgaXMg
ZW5vdWdoIGNhcGFjaXR5LAotICAgIC8vIHdyaXRlIHRoZSBkYXRhLCB0aGVuIHVzZSBzZXRMZW5n
dGgoKSB0byBkZWNsYXJlIHRoZSBuZXcgbGVuZ3RoKCkuCi0gICAgaW50IGNhcGFjaXR5KCkgY29u
c3QgeyByZXR1cm4gbV9jYXBhY2l0eTsgfQotICAgIGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVy
biBtX2xlbmd0aDsgfQotCi0gICAgLy8gVGhlIG91dHB1dCB3aWxsIE5PVCBiZSAwLXRlcm1pbmF0
ZWQuIENhbGwgbGVuZ3RoKCkgdG8gZ2V0IHRoZSBsZW5ndGguCi0gICAgY29uc3QgQ2hhcmFjdGVy
VHlwZSogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyOyB9Ci0gICAgQ2hhcmFjdGVyVHlw
ZSogZGF0YSgpIHsgcmV0dXJuIG1fYnVmZmVyOyB9Ci0KLSAgICAvLyBTaG9ydGVucyB0aGUgVVJM
IHRvIHRoZSBuZXcgbGVuZ3RoLiBVc2VkIGZvciAiYmFja2luZyB1cCIgd2hlbiBwcm9jZXNzaW5n
Ci0gICAgLy8gcmVsYXRpdmUgcGF0aHMuIFRoaXMgY2FuIGFsc28gYmUgdXNlZCBpZiBhbiBleHRl
cm5hbCBmdW5jdGlvbiB3cml0ZXMgYSBsb3QKLSAgICAvLyBvZiBkYXRhIHRvIHRoZSBidWZmZXIg
KHdoZW4gdXNpbmcgdGhlICJSYXciIHZlcnNpb24gYmVsb3cpIGJleW9uZCB0aGUgZW5kLAotICAg
IC8vIHRvIGRlY2xhcmUgdGhlIG5ldyBsZW5ndGguCi0gICAgdm9pZCBzZXRMZW5ndGgoaW50IGxl
bmd0aCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQgQVNTRVJUKGxlbmd0aCA8IGNhcGFj
aXR5KCkpOwotICAgICAgICBtX2xlbmd0aCA9IGxlbmd0aDsKLSAgICB9Ci0KLSAgICAvLyBUaGlz
IGlzIHRoZSBtb3N0IHBlcmZvcm1hbmNlIGNyaXRpY2FsIGZ1bmN0aW9uLCBzaW5jZSBpdCBpcyBj
YWxsZWQgZm9yCi0gICAgLy8gZXZlcnkgY2hhcmFjdGVyLgotICAgIHZvaWQgYXBwZW5kKENoYXJh
Y3RlclR5cGUgY2gpCi0gICAgewotICAgICAgICAvLyBJbiBWQzIwMDUsIHB1dHRpbmcgdGhpcyBj
b21tb24gY2FzZSBmaXJzdCBzcGVlZHMgdXAgZXhlY3V0aW9uCi0gICAgICAgIC8vIGRyYW1hdGlj
YWxseSBiZWNhdXNlIHRoaXMgYnJhbmNoIGlzIHByZWRpY3RlZCBhcyB0YWtlbi4KLSAgICAgICAg
aWYgKG1fbGVuZ3RoIDwgbV9jYXBhY2l0eSkgewotICAgICAgICAgICAgbV9idWZmZXJbbV9sZW5n
dGhdID0gY2g7Ci0gICAgICAgICAgICArK21fbGVuZ3RoOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFncm93KDEpKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIG1fYnVmZmVyW21fbGVuZ3RoXSA9IGNoOwotICAgICAgICArK21fbGVuZ3RoOwot
ICAgIH0KLQotICAgIHZvaWQgYXBwZW5kKGNvbnN0IENoYXJhY3RlclR5cGUqIHN0ciwgaW50IHN0
ckxlbmd0aCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2xlbmd0aCArIHN0ckxlbmd0aCA+IG1fY2Fw
YWNpdHkpIHsKLSAgICAgICAgICAgIGlmICghZ3JvdyhtX2xlbmd0aCArIHN0ckxlbmd0aCAtIG1f
Y2FwYWNpdHkpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHN0ckxlbmd0aDsgaSsrKQotICAgICAgICAgICAgbV9idWZmZXJb
bV9sZW5ndGggKyBpXSA9IHN0cltpXTsKLSAgICAgICAgbV9sZW5ndGggKz0gc3RyTGVuZ3RoOwot
ICAgIH0KLQotcHJvdGVjdGVkOgotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgYnVmZmVyIGNv
dWxkIGJlIHJlc2l6ZWQsIGZhbHNlIG9uIE9PTS4KLSAgICBib29sIGdyb3coaW50IG1pbmltdW1B
ZGRpdGlvbmFsQ2FwYWNpdHkpCi0gICAgewotICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbmlt
dW1DYXBhY2l0eSA9IDE2OwotICAgICAgICBpbnQgbmV3Q2FwYWNpdHkgPSBtX2NhcGFjaXR5ID8g
bV9jYXBhY2l0eSA6IG1pbmltdW1DYXBhY2l0eTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAg
aWYgKG5ld0NhcGFjaXR5ID49ICgxIDw8IDMwKSkgLy8gUHJldmVudCBvdmVyZmxvdyBiZWxvdy4K
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBuZXdDYXBhY2l0eSAq
PSAyOwotICAgICAgICB9IHdoaWxlIChuZXdDYXBhY2l0eSA8IG1fY2FwYWNpdHkgKyBtaW5pbXVt
QWRkaXRpb25hbENhcGFjaXR5KTsKLSAgICAgICAgcmVzaXplKG5ld0NhcGFjaXR5KTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQ2hhcmFjdGVyVHlwZSogbV9idWZmZXI7Ci0g
ICAgaW50IG1fY2FwYWNpdHk7Ci0gICAgaW50IG1fbGVuZ3RoOyAvLyBVc2VkIGNoYXJhY3RlcnMg
aW4gdGhlIGJ1ZmZlci4KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gVVNF
KFdURlVSTCkKLQotI2VuZGlmIC8vIFVSTEJ1ZmZlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi91cmwvYXBpL1VSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlci5oIGIvU291cmNlL1dURi93dGYv
dXJsL2FwaS9VUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNTc3MWE0MmU0ZjhmMzQ4ZTdhODBiOGZkOWNjNjdlOTE2NzM5OWM1Ny4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi91
cmwvYXBpL1VSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA3IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXJfaAotI2RlZmluZSBVUkxRdWVyeUNoYXJzZXRD
b252ZXJ0ZXJfaAotCi0jaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgotCi0jaWYgVVNF
KFdURlVSTCkKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IGNsYXNzIFVSTEJ1ZmZlcjsKLQotY2xhc3MgVVJMUXVlcnlDaGFyc2V0Q29udmVydGVy
IHsKLXB1YmxpYzoKLSAgICBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIoKSB7IH0KLSAgICB2aXJ0
dWFsIH5VUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY29u
dmVydEZyb21VVEYxNihjb25zdCBVQ2hhciogaW5wdXQsIHVuc2lnbmVkIGlucHV0TGVuZ3RoLCBV
UkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0K
LSNlbmRpZiAvLyBVU0UoV1RGVVJMKQotCi0jZW5kaWYgLy8gVVJMUXVlcnlDaGFyc2V0Q29udmVy
dGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9hcGkvVVJMU3RyaW5nLmNwcCBi
L1NvdXJjZS9XVEYvd3RmL3VybC9hcGkvVVJMU3RyaW5nLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOTE0N2ZlMzk5ZjI5ZGVhNDIzMmVmYjFiZGYyNzdhZTI2Y2Q3ZTM5YS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi91cmwvYXBpL1VSTFN0cmluZy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlVSTFN0cmluZy5oIgotCi0jaWYgVVNFKFdURlVSTCkKLQotbmFt
ZXNwYWNlIFdURiB7Ci0KLSNpZm5kZWYgTkRFQlVHCi12b2lkIFVSTFN0cmluZzo6cHJpbnQoKSBj
b25zdAotewotICAgIG1fc3RyaW5nLnNob3coKTsKLX0KLSNlbmRpZiAvLyBuZGVmIE5ERUJVRwot
Ci19Ci0KLSNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
dXJsL2FwaS9VUkxTdHJpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL3VybC9hcGkvVVJMU3RyaW5nLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmZGQxYTE2YTIzNzA3YTE1MTRjZWNhMjll
MDUyOWY3ZGEyZTNkMmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dURi93dGYvdXJsL2FwaS9VUkxTdHJpbmcuaAorKysgL2Rldi9udWxsCkBA
IC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlLCBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIFVSTFN0cmluZ19oCi0jZGVmaW5lIFVSTFN0cmluZ19oCi0KLSNpZiBVU0Uo
V1RGVVJMKQotCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBX
VEYgewotCi0vLyBVUkxTdHJpbmcgcmVwcmVzZW50cyBhIHN0cmluZyB0aGF0J3MgYSBjYW5vbmlj
YWxpemVkIFVSTC4KLWNsYXNzIFVSTFN0cmluZyB7Ci1wdWJsaWM6Ci0gICAgVVJMU3RyaW5nKCkg
eyB9Ci0KLSAgICBjb25zdCBTdHJpbmcmIHN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5n
O30KLSAgICBib29sIGlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RyaW5nLmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpOyB9Ci0KLSNpZm5kZWYgTkRF
QlVHCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnQoKSBjb25zdDsKLSNlbmRpZgot
Ci1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBQYXJzZWRVUkw7Ci0KLSAgICAvLyBVUkxTdHJp
bmcgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgYnkgYSBQYXJzZWRVUkwuCi0gICAgZXhwbGljaXQg
VVJMU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotICAgICAgICA6IG1fc3RyaW5nKHN0cmlu
ZykKLSAgICB7Ci0gICAgfQotCi0gICAgU3RyaW5nIG1fc3RyaW5nOwotfTsKLQotfQotCi0jZW5k
aWYgLy8gVVNFKFdURlVSTCkKLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L3VybC9zcmMvUmF3VVJMQnVmZmVyLmggYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1Jhd1VSTEJ1
ZmZlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzE1YjBjOGY4OTlmOWQ3MTAy
NDc3OWMzNWMxNDU4ODQ2M2QzNjBiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvUmF3VVJMQnVmZmVyLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFJhd1VSTEJ1ZmZlcl9oCi0jZGVmaW5lIFJhd1VS
TEJ1ZmZlcl9oCi0KLSNpZiBVU0UoV1RGVVJMKQotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5j
bHVkZSA8d3RmL3VybC9hcGkvVVJMQnVmZmVyLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi0vLyBT
aW1wbGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFVSTEJ1ZmZlciB1c2luZyBuZXdbXS4gVGhpcyBj
bGFzcwotLy8gYWxzbyBzdXBwb3J0cyBhIHN0YXRpYyBidWZmZXIgc28gaWYgaXQgaXMgYWxsb2Nh
dGVkIG9uIHRoZSBzdGFjaywgbW9zdAotLy8gVVJMcyBjYW4gYmUgY2Fub25pY2FsaXplZCB3aXRo
IG5vIGhlYXAgYWxsb2NhdGlvbnMuCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCBp
bnQgaW5saW5lQ2FwYWNpdHkgPSAxMDI0PgotY2xhc3MgUmF3VVJMQnVmZmVyIDogcHVibGljIFVS
TEJ1ZmZlcjxDaGFyYWN0ZXJUeXBlPiB7Ci1wdWJsaWM6Ci0gICAgUmF3VVJMQnVmZmVyKCkgOiBV
UkxCdWZmZXI8Q2hhcmFjdGVyVHlwZT4oKQotICAgIHsKLSAgICAgICAgdGhpcy0+bV9idWZmZXIg
PSBtX2lubGluZUJ1ZmZlcjsKLSAgICAgICAgdGhpcy0+bV9jYXBhY2l0eSA9IGlubGluZUNhcGFj
aXR5OwotICAgIH0KLQotICAgIHZpcnR1YWwgflJhd1VSTEJ1ZmZlcigpCi0gICAgewotICAgICAg
ICBpZiAodGhpcy0+bV9idWZmZXIgIT0gbV9pbmxpbmVCdWZmZXIpCi0gICAgICAgICAgICBkZWxl
dGVbXSB0aGlzLT5tX2J1ZmZlcjsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKGlu
dCBzaXplKQotICAgIHsKLSAgICAgICAgQ2hhcmFjdGVyVHlwZSogbmV3QnVmZmVyID0gbmV3IENo
YXJhY3RlclR5cGVbc2l6ZV07Ci0gICAgICAgIG1lbWNweShuZXdCdWZmZXIsIHRoaXMtPm1fYnVm
ZmVyLCBzaXplb2YoQ2hhcmFjdGVyVHlwZSkgKiAodGhpcy0+bV9sZW5ndGggPCBzaXplID8gdGhp
cy0+bV9sZW5ndGggOiBzaXplKSk7Ci0gICAgICAgIGlmICh0aGlzLT5tX2J1ZmZlciAhPSBtX2lu
bGluZUJ1ZmZlcikKLSAgICAgICAgICAgIGRlbGV0ZVtdIHRoaXMtPm1fYnVmZmVyOwotICAgICAg
ICB0aGlzLT5tX2J1ZmZlciA9IG5ld0J1ZmZlcjsKLSAgICAgICAgdGhpcy0+bV9jYXBhY2l0eSA9
IHNpemU7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgQ2hhcmFjdGVyVHlwZSBtX2lubGluZUJ1
ZmZlcltpbmxpbmVDYXBhY2l0eV07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlm
IC8vIFVTRShXVEZVUkwpCi0KLSNlbmRpZiAvLyBSYXdVUkxCdWZmZXJfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbi5oIGIvU291cmNlL1dURi93dGYvdXJsL3Ny
Yy9VUkxDYW5vbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTRkMDRlNGM2MDY2
OGQyMTgwMGVmOTZlOWQxYWJiYTQ0ZTk4MWE1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub24uaAorKysg
L2Rldi9udWxsCkBAIC0xLDYxNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDcgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotI2lmbmRlZiBVUkxDYW5vbl9oCi0jZGVmaW5lIFVSTENhbm9uX2gKLQot
I2luY2x1ZGUgIlVSTFBhcnNlLmgiCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8d3Rm
L3VuaWNvZGUvVW5pY29kZS5oPgotI2luY2x1ZGUgPHd0Zi91cmwvYXBpL1VSTEJ1ZmZlci5oPgot
Ci0jaWYgVVNFKFdURlVSTCkKLQotbmFtZXNwYWNlIFdURiB7Ci0KLWNsYXNzIFVSTFF1ZXJ5Q2hh
cnNldENvbnZlcnRlcjsKLQotbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIgewotCi0vLyBXaGl0
ZXNwYWNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLS8vIFNlYXJjaGVzIGZvciB3aGl0ZXNwYWNlIHRoYXQgc2hvdWxk
IGJlIHJlbW92ZWQgZnJvbSB0aGUgbWlkZGxlIG9mIFVSTHMsIGFuZAotLy8gcmVtb3ZlcyBpdC4g
UmVtb3ZlZCB3aGl0ZXNwYWNlIGFyZSB0YWJzIGFuZCBuZXdsaW5lcywgYnV0IE5PVCBzcGFjZXMu
IFNwYWNlcwotLy8gYXJlIHByZXNlcnZlZCwgd2hpY2ggaXMgd2hhdCBtb3N0IGJyb3dzZXJzIGRv
LiBBIHBvaW50ZXIgdG8gdGhlIG91dHB1dCB3aWxsCi0vLyBiZSByZXR1cm5lZCwgYW5kIHRoZSBs
ZW5ndGggb2YgdGhhdCBvdXRwdXQgd2lsbCBiZSBpbiB8b3V0cHV0TGVuZ3RofC4KLS8vCi0vLyBU
aGlzIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHBhcnNpbmcgaWYgd2hpdGVzcGFjZSByZW1vdmFs
IGlzIGRlc2lyZWQgKHdoaWNoCi0vLyBpdCBub3JtYWxseSBpcyB3aGVuIHlvdSBhcmUgY2Fub25p
Y2FsaXppbmcpLgotLy8KLS8vIElmIG5vIHdoaXRlc3BhY2UgaXMgcmVtb3ZlZCwgdGhpcyBmdW5j
dGlvbiB3aWxsIG5vdCB1c2UgdGhlIGJ1ZmZlciBhbmQgd2lsbAotLy8gcmV0dXJuIGEgcG9pbnRl
ciB0byB0aGUgaW5wdXQsIHRvIGF2b2lkIHRoZSBleHRyYSBjb3B5LiBJZiBtb2RpZmljYXRpb24g
aXMKLS8vIHJlcXVpcmVkLCB0aGUgZ2l2ZW4gfGJ1ZmZlcnwgd2lsbCBiZSB1c2VkIGFuZCB0aGUg
cmV0dXJuZWQgcG9pbnRlciB3aWxsCi0vLyBwb2ludCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBi
dWZmZXIuCi0vLwotLy8gVGhlcmVmb3JlLCBjYWxsZXJzIHNob3VsZCBub3QgdXNlIHRoZSBidWZm
ZXIsIHNpbmNlIGl0IG1heSBhY3R1YWxsIGJlIGVtcHR5LAotLy8gdXNlIHRoZSBjb21wdXRlZCBw
b2ludGVyIGFuZCB8b3V0cHV0TGVuZ3RofCBpbnN0ZWFkLgotY29uc3QgY2hhciogcmVtb3ZlVVJM
V2hpdGVzcGFjZShjb25zdCBjaGFyKiBpbnB1dCwgaW50IGlucHV0TGVuZ3RoLCBVUkxCdWZmZXI8
Y2hhcj4mLCBpbnQmIG91dHB1dExlbmd0aCk7Ci1jb25zdCBVQ2hhciogcmVtb3ZlVVJMV2hpdGVz
cGFjZShjb25zdCBVQ2hhciogaW5wdXQsIGludCBpbnB1dExlbmd0aCwgVVJMQnVmZmVyPFVDaGFy
PiYsIGludCYgb3V0cHV0TGVuZ3RoKTsKLQotLy8gSUROIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBD
b252ZXJ0cyB0aGUgVW5pY29kZSBpbnB1dCByZXByZXNlbnRpbmcgYSBob3N0bmFtZSB0byBBU0NJ
SSB1c2luZyBJRE4gcnVsZXMuCi0vLyBUaGUgb3V0cHV0IG11c3QgZmFsbCBpbiB0aGUgQVNDSUkg
cmFuZ2UsIGJ1dCB3aWxsIGJlIGVuY29kZWQgaW4gVVRGLTE2LgotLy8KLS8vIE9uIHN1Y2Nlc3Ms
IHRoZSBvdXRwdXQgd2lsbCBiZSBmaWxsZWQgd2l0aCB0aGUgQVNDSUkgaG9zdCBuYW1lIGFuZCBp
dCB3aWxsCi0vLyByZXR1cm4gdHJ1ZS4gVW5saWtlIG1vc3Qgb3RoZXIgY2Fub25pY2FsaXphdGlv
biBmdW5jdGlvbnMsIHRoaXMgYXNzdW1lcyB0aGF0Ci0vLyB0aGUgb3V0cHV0IGlzIGVtcHR5LiBU
aGUgYmVnaW5uaW5nIG9mIHRoZSBob3N0IHdpbGwgYmUgYXQgb2Zmc2V0IDAsIGFuZAotLy8gdGhl
IGxlbmd0aCBvZiB0aGUgb3V0cHV0IHdpbGwgYmUgc2V0IHRvIHRoZSBsZW5ndGggb2YgdGhlIG5l
dyBob3N0IG5hbWUuCi0vLwotLy8gT24gZXJyb3IsIHJldHVybnMgZmFsc2UuIFRoZSBvdXRwdXQg
aW4gdGhpcyBjYXNlIGlzIHVuZGVmaW5lZC4KLWJvb2wgSUROVG9BU0NJSShjb25zdCBVQ2hhciog
c3JjLCBpbnQgc291cmNlTGVuZ3RoLCBVUkxCdWZmZXI8VUNoYXI+JiBvdXRwdXQpOwotCi0vLyBQ
aWVjZS1ieS1waWVjZSBjYW5vbmljYWxpemVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotLy8gVGhlc2UgaW5kaXZpZHVhbCBjYW5vbmljYWxpemVy
cyBhcHBlbmQgdGhlIGNhbm9uaWNhbGl6ZWQgdmVyc2lvbnMgb2YgdGhlCi0vLyBjb3JyZXNwb25k
aW5nIFVSTCBjb21wb25lbnQgdG8gdGhlIGdpdmVuIHN0ZDo6c3RyaW5nLiBUaGUgc3BlYyBhbmQg
dGhlCi0vLyBwcmV2aW91c2x5LWlkZW50aWZpZWQgcmFuZ2Ugb2YgdGhhdCBjb21wb25lbnQgYXJl
IHRoZSBpbnB1dC4gVGhlIHJhbmdlIG9mCi0vLyB0aGUgY2Fub25pY2FsaXplZCBjb21wb25lbnQg
d2lsbCBiZSB3cml0dGVuIHRvIHRoZSBvdXRwdXQgY29tcG9uZW50LgotLy8KLS8vIFRoZXNlIGZ1
bmN0aW9ucyBhbGwgYXBwZW5kIHRvIHRoZSBvdXRwdXQgc28gdGhleSBjYW4gYmUgY2hhaW5lZC4g
TWFrZSBzdXJlCi0vLyB0aGUgb3V0cHV0IGlzIGVtcHR5IHdoZW4geW91IHN0YXJ0LgotLy8KLS8v
IFRoZXNlIGZ1bmN0aW9ucyByZXR1cm5zIGJvb2xlYW4gdmFsdWVzIGluZGljYXRpbmcgc3VjY2Vz
cy4gT24gZmFpbHVyZSwgdGhleQotLy8gd2lsbCBhdHRlbXB0IHRvIHdyaXRlIHNvbWV0aGluZyBy
ZWFzb25hYmxlIHRvIHRoZSBvdXRwdXQgc28gdGhhdCwgaWYKLS8vIGRpc3BsYXllZCB0byB0aGUg
dXNlciwgdGhleSB3aWxsIHJlY29nbmlzZSBpdCBhcyBzb21ldGhpbmcgdGhhdCdzIG1lc3NlZCB1
cC4KLS8vIE5vdGhpbmcgbW9yZSBzaG91bGQgZXZlciBiZSBkb25lIHdpdGggdGhlc2UgaW52YWxp
ZCBVUkxzLCBob3dldmVyLgotCi0vLyBTY2hlbWU6IEFwcGVuZHMgdGhlIHNjaGVtZSBhbmQgY29s
b24gdG8gdGhlIFVSTC4gVGhlIG91dHB1dCBjb21wb25lbnQgd2lsbAotLy8gaW5kaWNhdGUgdGhl
IHJhbmdlIG9mIGNoYXJhY3RlcnMgdXAgdG8gYnV0IG5vdCBpbmNsdWRpbmcgdGhlIGNvbG9uLgot
Ly8KLS8vIENhbm9uaWNhbCBVUkxzIGFsd2F5cyBoYXZlIGEgc2NoZW1lLiBJZiB0aGUgc2NoZW1l
IGlzIG5vdCBwcmVzZW50IGluIHRoZQotLy8gaW5wdXQsIHRoaXMgd2lsbCBqdXN0IHdyaXRlIHRo
ZSBjb2xvbiB0byBpbmRpY2F0ZSBhbiBlbXB0eSBzY2hlbWUuIERvZXMgbm90Ci0vLyBhcHBlbmQg
c2xhc2hlcyB3aGljaCB3aWxsIGJlIG5lZWRlZCBiZWZvcmUgYW55IGF1dGhvcml0eSBjb21wb25l
bnRzIGZvciBtb3N0Ci0vLyBVUkxzLgotLy8KLS8vIFRoZSA4LWJpdCB2ZXJzaW9uIHJlcXVpcmVz
IFVURi04IGVuY29kaW5nLgotYm9vbCBjYW5vbmljYWxpemVTY2hlbWUoY29uc3QgY2hhciogc3Bl
YywgY29uc3QgVVJMQ29tcG9uZW50JiBzY2hlbWUsIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTENvbXBv
bmVudCYgb3VwdXRTY2hlbWUpOwotYm9vbCBjYW5vbmljYWxpemVTY2hlbWUoY29uc3QgVUNoYXIq
IHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgc2NoZW1lLCBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxD
b21wb25lbnQmIG91cHV0U2NoZW1lKTsKLQotLy8gVXNlciBpbmZvOiB1c2VybmFtZS9wYXNzd29y
ZC4gSWYgcHJlc2VudCwgdGhpcyB3aWxsIGFkZCB0aGUgZGVsaW1pdGVycyBzbwotLy8gdGhlIG91
dHB1dCB3aWxsIGJlICI8dXNlcm5hbWU+OjxwYXNzd29yZD5AIiBvciAiPHVzZXJuYW1lPkAiLiBF
bXB0eQotLy8gdXNlcm5hbWUvcGFzc3dvcmQgcGFpcnMsIG9yIGVtcHR5IHBhc3N3b3Jkcywgd2ls
bCBnZXQgY29udmVydGVkIHRvCi0vLyBub25leGlzdGFudCBpbiB0aGUgY2Fub25pY2FsIHZlcnNp
b24uCi0vLwotLy8gVGhlIGNvbXBvbmVudHMgZm9yIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQg
cmVmZXIgdG8gcmFuZ2VzIGluIHRoZQotLy8gcmVzcGVjdGl2ZSBzb3VyY2Ugc3RyaW5ncy4gVXN1
YWxseSwgdGhlc2Ugd2lsbCBiZSB0aGUgc2FtZSBzdHJpbmcsIHdoaWNoCi0vLyBpcyBsZWdhbCBh
cyBsb25nIGFzIHRoZSB0d28gY29tcG9uZW50cyBkb24ndCBvdmVybGFwLgotLy8KLS8vIFRoZSA4
LWJpdCB2ZXJzaW9uIHJlcXVpcmVzIFVURi04IGVuY29kaW5nLgotYm9vbCBjYW5vbmljYWxpemVV
c2VySW5mbyhjb25zdCBjaGFyKiB1c2VybmFtZVNvdXJjZSwgY29uc3QgVVJMQ29tcG9uZW50JiB1
c2VybmFtZSwgY29uc3QgY2hhciogcGFzc3dvcmRTb3VyY2UsIGNvbnN0IFVSTENvbXBvbmVudCYg
cGFzc3dvcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYsIFVS
TENvbXBvbmVudCYgb3V0cHV0VXNlcm5hbWUsIFVSTENvbXBvbmVudCYgb3V0cHV0UGFzc3dvcmQp
OwotYm9vbCBjYW5vbmljYWxpemVVc2VySW5mbyhjb25zdCBVQ2hhciogdXNlcm5hbWVTb3VyY2Us
IGNvbnN0IFVSTENvbXBvbmVudCYgdXNlcm5hbWUsIGNvbnN0IFVDaGFyKiBwYXNzd29yZFNvdXJj
ZSwgY29uc3QgVVJMQ29tcG9uZW50JiBwYXNzd29yZCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgVVJMQnVmZmVyPGNoYXI+JiwgVVJMQ29tcG9uZW50JiBvdXRwdXRVc2VybmFtZSwgVVJMQ29t
cG9uZW50JiBvdXRwdXRQYXNzd29yZCk7Ci0KLQotLy8gVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgZGV0
YWlsZWQgc3RhdGUgZXhwb3J0ZWQgZnJvbSB0aGUgSVAvSG9zdCBjYW5vbmljYWxpemVycy4KLS8v
IEFkZGl0aW9uYWwgZmllbGRzIG1heSBiZSBhZGRlZCBhcyBjYWxsZXJzIHJlcXVpcmUgdGhlbS4K
LXN0cnVjdCBDYW5vbkhvc3RJbmZvIHsKLSAgICBDYW5vbkhvc3RJbmZvKCkKLSAgICAgICAgOiBm
YW1pbHkoTkVVVFJBTCkKLSAgICAgICAgLCBpcHY0Q29tcG9uZW50c0NvdW50KDApCi0gICAgICAg
ICwgb3VwdXRIb3N0KCkKLSAgICB7Ci0gICAgfQotCi0gICAgLy8gQ29udmVuaWVuY2UgZnVuY3Rp
b24gdG8gdGVzdCBpZiBmYW1pbHkgaXMgYW4gSVAgYWRkcmVzcy4KLSAgICBib29sIElzSVBBZGRy
ZXNzKCkgY29uc3QgeyByZXR1cm4gZmFtaWx5ID09IElQVjQgfHwgZmFtaWx5ID09IElQVjY7IH0K
LQotICAgIC8vIFRoaXMgZmllbGQgc3VtbWFyaXplcyBob3cgdGhlIGlucHV0IHdhcyBjbGFzc2lm
aWVkIGJ5IHRoZSBjYW5vbmljYWxpemVyLgotICAgIGVudW0gRmFtaWx5IHsKLSAgICAgICAgLy8g
LSBEb2Vzbid0IHJlc2VtYmxlIGFuIElQIGFkZHJlc3MuIEFzIGZhciBhcyB0aGUgSVAKLSAgICAg
ICAgLy8gY2Fub25pY2FsaXplciBpcyBjb25jZXJuZWQsIGl0IHNob3VsZCBiZSB0cmVhdGVkIGFz
IGEKLSAgICAgICAgLy8gICBob3N0bmFtZS4KLSAgICAgICAgTkVVVFJBTCwKLQotICAgICAgICAv
LyAtIEFsbW9zdCBhbiBJUCwgYnV0IHdhcyBub3QgY2Fub25pY2FsaXplZC4gVGhpcyBjb3VsZCBi
ZSBhbgotICAgICAgICAvLyBJUHY0IGFkZHJlc3Mgd2hlcmUgdHJ1bmNhdGlvbiBvY2N1cnJlZCwg
b3Igc29tZXRoaW5nCi0gICAgICAgIC8vIGNvbnRhaW5pbmcgdGhlIHNwZWNpYWwgY2hhcmFjdGVy
cyA6W10gd2hpY2ggZGlkIG5vdCBwYXJzZQotICAgICAgICAvLyBhcyBhbiBJUHY2IGFkZHJlc3Mu
IE5ldmVyIGF0dGVtcHQgdG8gY29ubmVjdCB0byB0aGlzCi0gICAgICAgIC8vIGFkZHJlc3MsIGJl
Y2F1c2UgaXQgbWlnaHQgYWN0dWFsbHkgc3VjY2VlZCEKLSAgICAgICAgQlJPS0VOLAotCi0gICAg
ICAgIElQVjQsIC8vIC0gU3VjY2Vzc2Z1bGx5IGNhbm9uaWNhbGl6ZWQgYXMgYW4gSVB2NCBhZGRy
ZXNzLgotICAgICAgICBJUFY2LCAvLyAtIFN1Y2Nlc3NmdWxseSBjYW5vbmljYWxpemVkIGFzIGFu
IElQdjYgYWRkcmVzcy4KLSAgICB9OwotICAgIEZhbWlseSBmYW1pbHk7Ci0KLSAgICAvLyBJZiB8
ZmFtaWx5fCBpcyBJUFY0LCB0aGVuIHRoaXMgaXMgdGhlIG51bWJlciBvZiBub25lbXB0eSBkb3Qt
c2VwYXJhdGVkCi0gICAgLy8gY29tcG9uZW50cyBpbiB0aGUgaW5wdXQgdGV4dCwgZnJvbSAxIHRv
IDQuIElmIHxmYW1pbHl8IGlzIG5vdCBJUFY0LAotICAgIC8vIHRoaXMgdmFsdWUgaXMgdW5kZWZp
bmVkLgotICAgIGludCBpcHY0Q29tcG9uZW50c0NvdW50OwotCi0gICAgLy8gTG9jYXRpb24gb2Yg
aG9zdCB3aXRoaW4gdGhlIGNhbm9uaWNhbGl6ZWQgb3V0cHV0LgotICAgIC8vIGNhbm9uaWNhbGl6
ZUlQQWRkcmVzcygpIG9ubHkgc2V0cyB0aGlzIGZpZWxkIGlmIHxmYW1pbHl8IGlzIElQVjQgb3Ig
SVBWNi4KLSAgICBVUkxDb21wb25lbnQgb3VwdXRIb3N0OwotCi0gICAgLy8gfGFkZHJlc3N8IGNv
bnRhaW5zIHRoZSBwYXJzZWQgSVAgQWRkcmVzcyAoaWYgYW55KSBpbiBpdHMgZmlyc3QKLSAgICAv
LyBBZGRyZXNzTGVuZ3RoKCkgYnl0ZXMsIGluIG5ldHdvcmsgb3JkZXIuIElmIElzSVBBZGRyZXNz
KCkgaXMgZmFsc2UKLSAgICAvLyBBZGRyZXNzTGVuZ3RoKCkgd2lsbCByZXR1cm4gemVybyBhbmQg
dGhlIGNvbnRlbnQgb2YgfGFkZHJlc3N8IGlzIHVuZGVmaW5lZC4KLSAgICB1bnNpZ25lZCBjaGFy
IGFkZHJlc3NbMTZdOwotCi0gICAgLy8gQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gY2FsY3VsYXRl
IHRoZSBsZW5ndGggb2YgYW4gSVAgYWRkcmVzcyBjb3JyZXNwb25kaW5nCi0gICAgLy8gdG8gdGhl
IGN1cnJlbnQgSVAgdmVyc2lvbiBpbiB8ZmFtaWx5fCwgaWYgYW55LiBGb3IgdXNlIHdpdGggfGFk
ZHJlc3N8LgotICAgIGludCBBZGRyZXNzTGVuZ3RoKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBmYW1pbHkgPT0gSVBWNCA/IDQgOiAoZmFtaWx5ID09IElQVjYgPyAxNiA6IDApOwotICAg
IH0KLX07Ci0KLS8vIEhvc3QuCi0vLwotLy8gVGhlIDgtYml0IHZlcnNpb24gcmVxdWlyZXMgVVRG
LTggZW5jb2RpbmcuIFVzZSB0aGlzIHZlcnNpb24gd2hlbiB5b3Ugb25seQotLy8gbmVlZCB0byBr
bm93IHdoZXRoZXIgY2Fub25pY2FsaXphdGlvbiBzdWNjZWVkZWQuCi1ib29sIGNhbm9uaWNhbGl6
ZUhvc3QoY29uc3QgY2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBob3N0LCBVUkxCdWZm
ZXI8Y2hhcj4mLCBVUkxDb21wb25lbnQmIG91cHV0SG9zdCk7Ci1ib29sIGNhbm9uaWNhbGl6ZUhv
c3QoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgaG9zdCwgVVJMQnVmZmVy
PGNoYXI+JiwgVVJMQ29tcG9uZW50JiBvdXB1dEhvc3QpOwotCi0vLyBJUCBhZGRyZXNzZXMuCi0v
LwotLy8gVHJpZXMgdG8gaW50ZXJwcmV0IHRoZSBnaXZlbiBob3N0IG5hbWUgYXMgYW4gSVB2NCBv
ciBJUHY2IGFkZHJlc3MuIElmIGl0IGlzCi0vLyBhbiBJUCBhZGRyZXNzLCBpdCB3aWxsIGNhbm9u
aWNhbGl6ZSBpdCBhcyBzdWNoLCBhcHBlbmRpbmcgaXQgdG8gfG91dHB1dHwuCi0vLyBBZGRpdGlv
bmFsIHN0YXR1cyBpbmZvcm1hdGlvbiBpcyByZXR1cm5lZCB2aWEgdGhlIHwqaG9zdEluZm98IHBh
cmFtZXRlci4KLS8vIFNlZSB0aGUgZGVmaW5pdGlvbiBvZiBDYW5vbkhvc3RJbmZvIGFib3ZlIGZv
ciBkZXRhaWxzLgotLy8KLS8vIFRoaXMgaXMgY2FsbGVkIEFVVE9NQVRJQ0FMTFkgZnJvbSB0aGUg
aG9zdCBjYW5vbmljYWxpemVyLCB3aGljaCBlbnN1cmVzIHRoYXQKLS8vIHRoZSBpbnB1dCBpcyB1
bmVzY2FwZWQgYW5kIG5hbWUtcHJlcHBlZCwgZXRjLiBJdCBzaG91bGQgbm90IG5vcm1hbGx5IGJl
Ci0vLyBuZWNlc3Nhcnkgb3Igd2lzZSB0byBjYWxsIHRoaXMgZGlyZWN0bHkuCi12b2lkIGNhbm9u
aWNhbGl6ZUlQQWRkcmVzcyhjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGhv
c3QsIFVSTEJ1ZmZlcjxjaGFyPiYsIENhbm9uSG9zdEluZm8mKTsKLXZvaWQgY2Fub25pY2FsaXpl
SVBBZGRyZXNzKGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGhvc3QsIFVS
TEJ1ZmZlcjxjaGFyPiYsIENhbm9uSG9zdEluZm8mKTsKLQotLy8gUG9ydDogdGhpcyBmdW5jdGlv
biB3aWxsIGFkZCB0aGUgY29sb24gZm9yIHRoZSBwb3J0IGlmIGEgcG9ydCBpcyBwcmVzZW50Lgot
Ly8gVGhlIGNhbGxlciBjYW4gcGFzcyBVUkxQYXJzZXI6OlBPUlRfVU5TUEVDSUZJRUQgYXMgdGhl
Ci0vLyBkZWZhdWx0UG9ydEZvclNjaGVtZSBhcmd1bWVudCBpZiB0aGVyZSBpcyBubyBkZWZhdWx0
IHBvcnQuCi0vLwotLy8gVGhlIDgtYml0IHZlcnNpb24gcmVxdWlyZXMgVVRGLTggZW5jb2Rpbmcu
Ci1ib29sIGNhbm9uaWNhbGl6ZVBvcnQoY29uc3QgY2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9u
ZW50JiBwb3J0LCBpbnQgZGVmYXVsdFBvcnRGb3JTY2hlbWUsIFVSTEJ1ZmZlcjxjaGFyPiYsIFVS
TENvbXBvbmVudCYgb3VwdXRQb3J0KTsKLWJvb2wgY2Fub25pY2FsaXplUG9ydChjb25zdCBVQ2hh
ciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBwb3J0LCBpbnQgZGVmYXVsdFBvcnRGb3JTY2hl
bWUsIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTENvbXBvbmVudCYgb3VwdXRQb3J0KTsKLQotLy8gUmV0
dXJucyB0aGUgZGVmYXVsdCBwb3J0IGZvciB0aGUgZ2l2ZW4gY2Fub25pY2FsIHNjaGVtZSwgb3Ig
UE9SVF9VTlNQRUNJRklFRAotLy8gaWYgdGhlIHNjaGVtZSBpcyB1bmtub3duLgotaW50IGRlZmF1
bHRQb3J0Rm9yU2NoZW1lKGNvbnN0IGNoYXIqIHNjaGVtZSwgaW50IHNjaGVtZUxlbmd0aCk7Ci0K
LS8vIFBhdGguIElmIHRoZSBpbnB1dCBkb2VzIG5vdCBiZWdpbiBpbiBhIHNsYXNoIChpbmNsdWRp
bmcgaWYgdGhlIGlucHV0IGlzCi0vLyBlbXB0eSksIHdlJ2xsIHByZXBlbmQgYSBzbGFzaCB0byB0
aGUgcGF0aCB0byBtYWtlIGl0IGNhbm9uaWNhbC4KLS8vCi0vLyBUaGUgOC1iaXQgdmVyc2lvbiBh
c3N1bWVzIFVURi04IGVuY29kaW5nLCBidXQgZG9lcyBub3QgdmVyaWZ5IHRoZSB2YWxpZGl0eQot
Ly8gb2YgdGhlIFVURi04IChpLmUuLCB5b3UgY2FuIGhhdmUgaW52YWxpZCBVVEYtOCBzZXF1ZW5j
ZXMsIGludmFsaWQKLS8vIGNoYXJhY3RlcnMsIGV0Yy4pLiBOb3JtYWxseSwgVVJMcyB3aWxsIGNv
bWUgaW4gYXMgVVRGLTE2LCBzbyB0aGlzIGlzbid0Ci0vLyBhbiBpc3N1ZS4gU29tZWJvZHkgZ2l2
aW5nIHVzIGFuIDgtYml0IHBhdGggaXMgcmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcKLS8vIHRo
ZSBwYXRoIHRoYXQgdGhlIHNlcnZlciBleHBlY3RzICh3ZSdsbCBlc2NhcGUgaGlnaC1iaXQgY2hh
cmFjdGVycyksIHNvCi0vLyBpZiBzb21ldGhpbmcgaXMgaW52YWxpZCwgaXQncyB0aGVpciBwcm9i
bGVtLgotYm9vbCBDYW5vbmljYWxpemVQYXRoKGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENv
bXBvbmVudCYgcGF0aCwgVVJMQnVmZmVyPGNoYXI+JiwgVVJMQ29tcG9uZW50KiBvdXRwdXRQYXRo
KTsKLWJvb2wgQ2Fub25pY2FsaXplUGF0aChjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29t
cG9uZW50JiBwYXRoLCBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxDb21wb25lbnQqIG91dHB1dFBhdGgp
OwotCi0vLyBDYW5vbmljYWxpemVzIHRoZSBpbnB1dCBhcyBhIGZpbGUgcGF0aC4gVGhpcyBpcyBs
aWtlIENhbm9uaWNhbGl6ZVBhdGggZXhjZXB0Ci0vLyB0aGF0IGl0IGFsc28gaGFuZGxlcyBXaW5k
b3dzIGRyaXZlIHNwZWNzLiBGb3IgZXhhbXBsZSwgdGhlIHBhdGggY2FuIGJlZ2luCi0vLyB3aXRo
ICJjfFwiIGFuZCBpdCB3aWxsIGdldCBwcm9wZXJseSBjYW5vbmljYWxpemVkIHRvICJDOi8iLgot
Ly8gVGhlIHN0cmluZyB3aWxsIGJlIGFwcGVuZGVkIHRvIHxvdXRwdXR8IGFuZCB8b3V0cHV0UGF0
aHwgd2lsbCBiZSB1cGRhdGVkLgotLy8KLS8vIFRoZSA4LWJpdCB2ZXJzaW9uIHJlcXVpcmVzIFVU
Ri04IGVuY29kaW5nLgotYm9vbCBGaWxlQ2Fub25pY2FsaXplUGF0aChjb25zdCBjaGFyKiBzcGVj
LCBjb25zdCBVUkxDb21wb25lbnQmIHBhdGgsIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTENvbXBvbmVu
dCogb3V0cHV0UGF0aCk7Ci1ib29sIEZpbGVDYW5vbmljYWxpemVQYXRoKGNvbnN0IFVDaGFyKiBz
cGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHBhdGgsIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTENvbXBv
bmVudCogb3V0cHV0UGF0aCk7Ci0KLS8vIFF1ZXJ5OiBQcmVwZW5kcyB0aGUgPyBpZiBuZWVkZWQu
Ci0vLwotLy8gVGhlIDgtYml0IHZlcnNpb24gcmVxdWlyZXMgdGhlIGlucHV0IHRvIGJlIFVURi04
IGVuY29kaW5nLiBJbmNvcnJlY3RseQotLy8gZW5jb2RlZCBjaGFyYWN0ZXJzIChpbiBVVEYtOCBv
ciBVVEYtMTYpIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgVW5pY29kZQotLy8gImludmFsaWQg
Y2hhcmFjdGVyLiIgVGhpcyBmdW5jdGlvbiBjYW4gbm90IGZhaWwsIHdlIGFsd2F5cyBqdXN0IHRy
eSB0byBkbwotLy8gb3VyIGJlc3QgZm9yIGNyYXp5IGlucHV0IGhlcmUgc2luY2Ugd2ViIHBhZ2Vz
IGNhbiBzZXQgaXQgdGhlbXNlbHZlcy4KLS8vCi0vLyBUaGlzIHdpbGwgY29udmVydCB0aGUgZ2l2
ZW4gaW5wdXQgaW50byB0aGUgb3V0cHV0IGVuY29kaW5nIHRoYXQgdGhlIGdpdmVuCi0vLyBjaGFy
YWN0ZXIgc2V0IGNvbnZlcnRlciBvYmplY3QgcHJvdmlkZXMuIFRoZSBjb252ZXJ0ZXIgd2lsbCBv
bmx5IGJlIGNhbGxlZAotLy8gaWYgbmVjZXNzYXJ5LCBmb3IgQVNDSUkgaW5wdXQsIG5vIGNvbnZl
cnNpb25zIGFyZSBuZWNlc3NhcnkuCi0vLwotLy8gVGhlIGNvbnZlcnRlciBjYW4gYmUgbnVsbC4g
SW4gdGhpcyBjYXNlLCB0aGUgb3V0cHV0IGVuY29kaW5nIHdpbGwgYmUgVVRGLTguCi12b2lkIENh
bm9uaWNhbGl6ZVF1ZXJ5KGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcXVl
cnksIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciosIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTENvbXBv
bmVudCogb3V0cHV0UXVlcnkpOwotdm9pZCBDYW5vbmljYWxpemVRdWVyeShjb25zdCBVQ2hhciog
c3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBxdWVyeSwgVVJMUXVlcnlDaGFyc2V0Q29udmVydGVy
KiwgVVJMQnVmZmVyPGNoYXI+JiwgVVJMQ29tcG9uZW50KiBvdXRwdXRRdWVyeSk7Ci0KLS8vIFJl
ZjogUHJlcGVuZHMgdGhlICMgaWYgbmVlZGVkLiBUaGUgb3V0cHV0IHdpbGwgYmUgVVRGLTggKHRo
aXMgaXMgdGhlIG9ubHkKLS8vIGNhbm9uaWNhbGl6ZXIgdGhhdCBkb2VzIG5vdCBwcm9kdWNlIEFT
Q0lJIG91dHB1dCkuIFRoZSBvdXRwdXQgaXMKLS8vIGd1YXJhbnRlZWQgdG8gYmUgdmFsaWQgVVRG
LTguCi0vLwotLy8gVGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBmYWlsLiBJZiB0aGUgaW5wdXQgaXMg
aW52YWxpZCBVVEYtOC9VVEYtMTYsIHdlJ2xsIHVzZQotLy8gdGhlICJVbmljb2RlIHJlcGxhY2Vt
ZW50IGNoYXJhY3RlciIgZm9yIHRoZSBjb25mdXNpbmcgYml0cyBhbmQgY29weSB0aGUgcmVzdC4K
LXZvaWQgY2Fub25pY2FsaXplRnJhZ21lbnQoY29uc3QgY2hhciogc3BlYywgY29uc3QgVVJMQ29t
cG9uZW50JiBwYXRoLCBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxDb21wb25lbnQmIG91dHB1dEZyYWdt
ZW50KTsKLXZvaWQgY2Fub25pY2FsaXplRnJhZ21lbnQoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0
IFVSTENvbXBvbmVudCYgcGF0aCwgVVJMQnVmZmVyPGNoYXI+JiwgVVJMQ29tcG9uZW50JiBvdXRw
dXRGcmFnbWVudCk7Ci0KLS8vIEZ1bGwgY2Fub25pY2FsaXplciAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0vLyBUaGVzZSBmdW5j
dGlvbnMgcmVwbGFjZSBhbnkgc3RyaW5nIGNvbnRlbnRzLCByYXRoZXIgdGhhbiBhcHBlbmQgYXMg
YWJvdmUuCi0vLyBTZWUgdGhlIGFib3ZlIHBpZWNlLWJ5LXBpZWNlIGZ1bmN0aW9ucyBmb3IgaW5m
b3JtYXRpb24gc3BlY2lmaWMgdG8KLS8vIGNhbm9uaWNhbGl6aW5nIGluZGl2aWR1YWwgY29tcG9u
ZW50cy4KLS8vCi0vLyBUaGUgb3V0cHV0IHdpbGwgYmUgQVNDSUkgZXhjZXB0IHRoZSByZWZlcmVu
Y2UgZnJhZ21lbnQsIHdoaWNoIG1heSBiZSBVVEYtOC4KLS8vCi0vLyBUaGUgOC1iaXQgdmVyc2lv
bnMgcmVxdWlyZSBVVEYtOCBlbmNvZGluZy4KLQotLy8gVXNlIGZvciBzdGFuZGFyZCBVUkxzIHdp
dGggYXV0aG9yaXRpZXMgYW5kIHBhdGhzLgotYm9vbCBDYW5vbmljYWxpemVTdGFuZGFyZFVSTChj
b25zdCBjaGFyKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNl
ZCwgVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwgVVJMU2VnbWVudHMqIG91dHB1dFBh
cnNlZCk7Ci1ib29sIENhbm9uaWNhbGl6ZVN0YW5kYXJkVVJMKGNvbnN0IFVDaGFyKiBzcGVjLCBp
bnQgc3BlY0xlbmd0aCwgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNlZCwgVVJMUXVlcnlDaGFyc2V0
Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VVJMQnVmZmVyPGNoYXI+JiwgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCk7Ci0KLS8vIFVzZSBm
b3IgZmlsZSBVUkxzLgotYm9vbCBDYW5vbmljYWxpemVGaWxlVVJMKGNvbnN0IGNoYXIqIHNwZWMs
IGludCBzcGVjTGVuZ3RoLCBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLCBVUkxRdWVyeUNoYXJz
ZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgIFVS
TEJ1ZmZlcjxjaGFyPiYsIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpOwotYm9vbCBDYW5vbmlj
YWxpemVGaWxlVVJMKGNvbnN0IFVDaGFyKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwgY29uc3QgVVJM
U2VnbWVudHMmIHBhcnNlZCwgVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRl
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxTZWdtZW50
cyogb3V0cHV0UGFyc2VkKTsKLQotLy8gVXNlIGZvciBmaWxlc3lzdGVtIFVSTHMuCi1ib29sIGNh
bm9uaWNhbGl6ZUZpbGVTeXN0ZW1VUkwoY29uc3QgY2hhciogc3BlYywgY29uc3QgVVJMU2VnbWVu
dHMmIHBhcnNlZCwgVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxTZWdtZW50
cyYgb3V0cHV0UGFyc2VkKTsKLWJvb2wgY2Fub25pY2FsaXplRmlsZVN5c3RlbVVSTChjb25zdCBV
Q2hhciogc3BlYywgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNlZCwgVVJMUXVlcnlDaGFyc2V0Q29u
dmVydGVyKiBxdWVyeUNvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBV
UkxCdWZmZXI8Y2hhcj4mLCBVUkxTZWdtZW50cyYgb3V0cHV0UGFyc2VkKTsKLQotLy8gVXNlIGZv
ciBwYXRoIFVSTHMgc3VjaCBhcyBqYXZhc2NyaXB0LiBUaGlzIGRvZXMgbm90IG1vZGlmeSB0aGUg
cGF0aCBpbiBhbnkKLS8vIHdheSwgZm9yIGV4YW1wbGUsIGJ5IGVzY2FwaW5nIGl0LgotYm9vbCBj
YW5vbmljYWxpemVQYXRoVVJMKGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTFNlZ21lbnRzJiBw
YXJzZWQsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxTZWdtZW50cyYgb3VwdXRQYXJzZWQp
OwotYm9vbCBjYW5vbmljYWxpemVQYXRoVVJMKGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxT
ZWdtZW50cyYgcGFyc2VkLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVudHMmIG91
cHV0UGFyc2VkKTsKLQotLy8gVXNlIGZvciBtYWlsdG8gVVJMcy4gVGhpcyAiY2Fub25pY2FsaXpl
cyIgdGhlIHVybCBpbnRvIGEgcGF0aCBhbmQgcXVlcnkKLS8vIGNvbXBvbmVudC4gSXQgZG9lcyBu
b3QgYXR0ZW1wdCB0byBtZXJnZSAidG8iIGZpZWxkcy4gSXQgdXNlcyBVVEYtOCBmb3IKLS8vIHRo
ZSBxdWVyeSBlbmNvZGluZyBpZiB0aGVyZSBpcyBhIHF1ZXJ5LiBUaGlzIGlzIGJlY2F1c2UgYSBt
YWlsdG8gVVJMIGlzCi0vLyByZWFsbHkgaW50ZW5kZWQgZm9yIGFuIGV4dGVybmFsIG1haWwgcHJv
Z3JhbSwgYW5kIHRoZSBlbmNvZGluZyBvZiBhIHBhZ2UsCi0vLyBldGMuIHdoaWNoIHdvdWxkIGlu
Zmx1ZW5jZSBhIHF1ZXJ5IGVuY29kaW5nIG5vcm1hbGx5IGFyZSBpcnJlbGV2YW50LgotYm9vbCBj
YW5vbmljYWxpemVNYWlsdG9VUkwoY29uc3QgY2hhciogc3BlYywgY29uc3QgVVJMU2VnbWVudHMm
IHBhcnNlZCwgVVJMQnVmZmVyPGNoYXI+JiwgVVJMU2VnbWVudHMmIG91dHB1dFBhcnNlZCk7Ci1i
b29sIGNhbm9uaWNhbGl6ZU1haWx0b1VSTChjb25zdCBVQ2hhciogc3BlYywgIGNvbnN0IFVSTFNl
Z21lbnRzJiBwYXJzZWQsIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTFNlZ21lbnRzJiBvdXRwdXRQYXJz
ZWQpOwotCi0vLyBQYXJ0IHJlcGxhY2VyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEludGVybmFsIHN0cnVjdHVyZSB1
c2VkIGZvciBzdG9yaW5nIHNlcGFyYXRlIHN0cmluZ3MgZm9yIGVhY2ggY29tcG9uZW50LgotLy8g
VGhlIGJhc2ljIGNhbm9uaWNhbGl6YXRpb24gZnVuY3Rpb25zIHVzZSB0aGlzIHN0cnVjdHVyZSBp
bnRlcm5hbGx5IHNvIHRoYXQKLS8vIGNvbXBvbmVudCByZXBsYWNlbWVudCAoZGlmZmVyZW50IHN0
cmluZ3MgZm9yIGRpZmZlcmVudCBjb21wb25lbnRzKSBjYW4gYmUKLS8vIHRyZWF0ZWQgb24gdGhl
IHNhbWUgY29kZSBwYXRoIGFzIHJlZ3VsYXIgY2Fub25pY2FsaXphdGlvbiAodGhlIHNhbWUgc3Ry
aW5nCi0vLyBmb3IgZWFjaCBjb21wb25lbnQpLgotLy8KLS8vIEEgVVJMU2VnbWVudHMgc3RydWN0
dXJlIHVzdWFsbHkgZ29lcyBhbG9uZyB3aXRoIHRoaXMuIFRob3NlCi0vLyBjb21wb25lbnRzIGlk
ZW50aWZ5IG9mZnNldHMgd2l0aGluIHRoZXNlIHN0cmluZ3MsIHNvIHRoYXQgdGhleSBjYW4gYWxs
IGJlCi0vLyBpbiB0aGUgc2FtZSBzdHJpbmcsIG9yIHNwcmVhZCBhcmJpdHJhcmlseSBhY3Jvc3Mg
ZGlmZmVyZW50IG9uZXMuCi0vLwotLy8gVGhpcyBzdHJ1Y3R1cmVzIGRvZXMgbm90IG93biBhbnkg
ZGF0YS4gSXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvCi0vLyBlbnN1cmUgdGhh
dCB0aGUgZGF0YSB0aGUgcG9pbnRlcnMgcG9pbnQgdG8gc3RheXMgaW4gc2NvcGUgYW5kIGlzIG5v
dAotLy8gbW9kaWZpZWQuCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RydWN0
IFVSTENvbXBvbmVudFNvdXJjZSB7Ci0gICAgLy8gQ29uc3RydWN0b3Igbm9ybWFsbHkgdXNlZCBi
eSBjYWxsZXJzIHdpc2hpbmcgdG8gcmVwbGFjZSBjb21wb25lbnRzLiBUaGlzCi0gICAgLy8gd2ls
bCBtYWtlIHRoZW0gYWxsIG51bGwsIHdoaWNoIGlzIG5vIHJlcGxhY2VtZW50LiBUaGUgY2FsbGVy
IHdvdWxkIHRoZW4KLSAgICAvLyBvdmVycmlkZSB0aGUgY29tcG9uZW50cyB0aGV5IHdhbnQgdG8g
cmVwbGFjZS4KLSAgICBVUkxDb21wb25lbnRTb3VyY2UoKQotICAgICAgICA6IHNjaGVtZSgwKQot
ICAgICAgICAsIHVzZXJuYW1lKDApCi0gICAgICAgICwgcGFzc3dvcmQoMCkKLSAgICAgICAgLCBo
b3N0KDApCi0gICAgICAgICwgcG9ydCgwKQotICAgICAgICAsIHBhdGgoMCkKLSAgICAgICAgLCBx
dWVyeSgwKQotICAgICAgICAsIHJlZigwKQotICAgIHsKLSAgICB9Ci0KLSAgICAvLyBDb25zdHJ1
Y3RvciBub3JtYWxseSB1c2VkIGludGVybmFsbHkgdG8gaW5pdGlhbGl6ZSBhbGwgdGhlIGNvbXBv
bmVudHMgdG8KLSAgICAvLyBwb2ludCB0byB0aGUgc2FtZSBzcGVjLgotICAgIGV4cGxpY2l0IFVS
TENvbXBvbmVudFNvdXJjZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBkZWZhdWx0VmFsdWUpCi0gICAg
ICAgIDogc2NoZW1lKGRlZmF1bHRWYWx1ZSkKLSAgICAgICAgLCB1c2VybmFtZShkZWZhdWx0VmFs
dWUpCi0gICAgICAgICwgcGFzc3dvcmQoZGVmYXVsdFZhbHVlKQotICAgICAgICAsIGhvc3QoZGVm
YXVsdFZhbHVlKQotICAgICAgICAsIHBvcnQoZGVmYXVsdFZhbHVlKQotICAgICAgICAsIHBhdGgo
ZGVmYXVsdFZhbHVlKQotICAgICAgICAsIHF1ZXJ5KGRlZmF1bHRWYWx1ZSkKLSAgICAgICAgLCBy
ZWYoZGVmYXVsdFZhbHVlKQotICAgIHsKLSAgICB9Ci0KLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBl
KiBzY2hlbWU7Ci0gICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogdXNlcm5hbWU7Ci0gICAgY29uc3Qg
Q2hhcmFjdGVyVHlwZSogcGFzc3dvcmQ7Ci0gICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogaG9zdDsK
LSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBwb3J0OwotICAgIGNvbnN0IENoYXJhY3RlclR5cGUq
IHBhdGg7Ci0gICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogcXVlcnk7Ci0gICAgY29uc3QgQ2hhcmFj
dGVyVHlwZSogcmVmOwotfTsKLQotLy8gVGhpcyBzdHJ1Y3R1cmUgZW5jYXBzdWxhdGVzIGluZm9y
bWF0aW9uIG9uIG1vZGlmeWluZyBhIFVSTC4gRWFjaCBjb21wb25lbnQKLS8vIG1heSBlaXRoZXIg
YmUgbGVmdCB1bmNoYW5nZWQsIHJlcGxhY2VkLCBvciBkZWxldGVkLgotLy8KLS8vIEJ5IGRlZmF1
bHQsIGVhY2ggY29tcG9uZW50IGlzIHVuY2hhbmdlZC4gRm9yIHRob3NlIGNvbXBvbmVudHMgdGhh
dCBzaG91bGQgYmUKLS8vIG1vZGlmaWVkLCBjYWxsIGVpdGhlciBTZXQqIG9yIENsZWFyKiB0byBt
b2RpZnkgaXQuCi0vLwotLy8gVGhlIHN0cmluZyBwYXNzZWQgdG8gU2V0KiBmdW5jdGlvbnMgRE9F
UyBOT1QgR0VUIENPUElFRCBBTkQgTVVTVCBCRSBLRVBUCi0vLyBJTiBTQ09QRSBCWSBUSEUgQ0FM
TEVSIGZvciBhcyBsb25nIGFzIHRoaXMgb2JqZWN0IGV4aXN0cyEKLS8vCi0vLyBQcmVmZXIgdGhl
IDgtYml0IHJlcGxhY2VtZW50IHZlcnNpb24gaWYgcG9zc2libGUgc2luY2UgaXQgaXMgbW9yZSBl
ZmZpY2llbnQuCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotY2xhc3MgUmVwbGFj
ZW1lbnRzIHsKLXB1YmxpYzoKLSAgICBSZXBsYWNlbWVudHMoKQotICAgIHsKLSAgICB9Ci0KLSAg
ICAvLyBTY2hlbWUKLSAgICB2b2lkIFNldFNjaGVtZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzLCBj
b25zdCBVUkxDb21wb25lbnQmIGNvbXApCi0gICAgewotICAgICAgICBtX3NvdXJjZXMuc2NoZW1l
ID0gczsKLSAgICAgICAgbV9zZWdtZW50cy5zY2hlbWUgPSBjb21wOwotICAgIH0KLSAgICAvLyBO
b3RlOiB3ZSBkb24ndCBoYXZlIGEgQ2xlYXJTY2hlbWUgc2luY2UgdGhpcyBkb2Vzbid0IG1ha2Ug
YW55IHNlbnNlLgotICAgIGJvb2wgSXNTY2hlbWVPdmVycmlkZGVuKCkgY29uc3QgeyByZXR1cm4g
ISFtX3NvdXJjZXMuc2NoZW1lOyB9Ci0KLSAgICAvLyBVc2VybmFtZQotICAgIHZvaWQgU2V0VXNl
cm5hbWUoY29uc3QgQ2hhcmFjdGVyVHlwZSogcywgY29uc3QgVVJMQ29tcG9uZW50JiBjb21wKQot
ICAgIHsKLSAgICAgICAgbV9zb3VyY2VzLnVzZXJuYW1lID0gczsKLSAgICAgICAgbV9zZWdtZW50
cy51c2VybmFtZSA9IGNvbXA7Ci0gICAgfQotICAgIHZvaWQgQ2xlYXJVc2VybmFtZSgpCi0gICAg
ewotICAgICAgICBtX3NvdXJjZXMudXNlcm5hbWUgPSBQbGFjZWhvbGRlcigpOwotICAgICAgICBt
X3NlZ21lbnRzLnVzZXJuYW1lID0gVVJMQ29tcG9uZW50KCk7Ci0gICAgfQotICAgIGJvb2wgSXNV
c2VybmFtZU92ZXJyaWRkZW4oKSBjb25zdCB7IHJldHVybiAhIW1fc291cmNlcy51c2VybmFtZTsg
fQotCi0gICAgLy8gUGFzc3dvcmQKLSAgICB2b2lkIFNldFBhc3N3b3JkKGNvbnN0IENoYXJhY3Rl
clR5cGUqIHMsIGNvbnN0IFVSTENvbXBvbmVudCYgY29tcCkKLSAgICB7Ci0gICAgICAgIG1fc291
cmNlcy5wYXNzd29yZCA9IHM7Ci0gICAgICAgIG1fc2VnbWVudHMucGFzc3dvcmQgPSBjb21wOwot
ICAgIH0KLSAgICB2b2lkIENsZWFyUGFzc3dvcmQoKQotICAgIHsKLSAgICAgICAgbV9zb3VyY2Vz
LnBhc3N3b3JkID0gUGxhY2Vob2xkZXIoKTsKLSAgICAgICAgbV9zZWdtZW50cy5wYXNzd29yZCA9
IFVSTENvbXBvbmVudCgpOwotICAgIH0KLSAgICBib29sIElzUGFzc3dvcmRPdmVycmlkZGVuKCkg
Y29uc3QgeyByZXR1cm4gISFtX3NvdXJjZXMucGFzc3dvcmQ7IH0KLQotICAgIC8vIEhvc3QKLSAg
ICB2b2lkIFNldEhvc3QoY29uc3QgQ2hhcmFjdGVyVHlwZSogcywgY29uc3QgVVJMQ29tcG9uZW50
JiBjb21wKQotICAgIHsKLSAgICAgICAgbV9zb3VyY2VzLmhvc3QgPSBzOwotICAgICAgICBtX3Nl
Z21lbnRzLmhvc3QgPSBjb21wOwotICAgIH0KLSAgICB2b2lkIENsZWFySG9zdCgpCi0gICAgewot
ICAgICAgICBtX3NvdXJjZXMuaG9zdCA9IFBsYWNlaG9sZGVyKCk7Ci0gICAgICAgIG1fc2VnbWVu
dHMuaG9zdCA9IFVSTENvbXBvbmVudCgpOwotICAgIH0KLSAgICBib29sIElzSG9zdE92ZXJyaWRk
ZW4oKSBjb25zdCB7IHJldHVybiAhIW1fc291cmNlcy5ob3N0OyB9Ci0KLSAgICAvLyBQb3J0Ci0g
ICAgdm9pZCBTZXRQb3J0KGNvbnN0IENoYXJhY3RlclR5cGUqIHMsIGNvbnN0IFVSTENvbXBvbmVu
dCYgY29tcCkKLSAgICB7Ci0gICAgICAgIG1fc291cmNlcy5wb3J0ID0gczsKLSAgICAgICAgbV9z
ZWdtZW50cy5wb3J0ID0gY29tcDsKLSAgICB9Ci0gICAgdm9pZCBDbGVhclBvcnQoKQotICAgIHsK
LSAgICAgICAgbV9zb3VyY2VzLnBvcnQgPSBQbGFjZWhvbGRlcigpOwotICAgICAgICBtX3NlZ21l
bnRzLnBvcnQgPSBVUkxDb21wb25lbnQoKTsKLSAgICB9Ci0gICAgYm9vbCBJc1BvcnRPdmVycmlk
ZGVuKCkgY29uc3QgeyByZXR1cm4gISFtX3NvdXJjZXMucG9ydDsgfQotCi0gICAgLy8gUGF0aAot
ICAgIHZvaWQgU2V0UGF0aChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzLCBjb25zdCBVUkxDb21wb25l
bnQmIGNvbXApCi0gICAgewotICAgICAgICBtX3NvdXJjZXMucGF0aCA9IHM7Ci0gICAgICAgIG1f
c2VnbWVudHMucGF0aCA9IGNvbXA7Ci0gICAgfQotICAgIHZvaWQgQ2xlYXJQYXRoKCkKLSAgICB7
Ci0gICAgICAgIG1fc291cmNlcy5wYXRoID0gUGxhY2Vob2xkZXIoKTsKLSAgICAgICAgbV9zZWdt
ZW50cy5wYXRoID0gVVJMQ29tcG9uZW50KCk7Ci0gICAgfQotICAgIGJvb2wgSXNQYXRoT3ZlcnJp
ZGRlbigpIGNvbnN0IHsgcmV0dXJuICFtX3NvdXJjZXMucGF0aDsgfQotCi0gICAgLy8gUXVlcnkK
LSAgICB2b2lkIFNldFF1ZXJ5KGNvbnN0IENoYXJhY3RlclR5cGUqIHMsIGNvbnN0IFVSTENvbXBv
bmVudCYgY29tcCkKLSAgICB7Ci0gICAgICAgIG1fc291cmNlcy5xdWVyeSA9IHM7Ci0gICAgICAg
IG1fc2VnbWVudHMucXVlcnkgPSBjb21wOwotICAgIH0KLSAgICB2b2lkIENsZWFyUXVlcnkoKQot
ICAgIHsKLSAgICAgICAgbV9zb3VyY2VzLnF1ZXJ5ID0gUGxhY2Vob2xkZXIoKTsKLSAgICAgICAg
bV9zZWdtZW50cy5xdWVyeSA9IFVSTENvbXBvbmVudCgpOwotICAgIH0KLSAgICBib29sIElzUXVl
cnlPdmVycmlkZGVuKCkgY29uc3QgeyByZXR1cm4gIW1fc291cmNlcy5xdWVyeTsgfQotCi0gICAg
Ly8gUmVmCi0gICAgdm9pZCBTZXRSZWYoY29uc3QgQ2hhcmFjdGVyVHlwZSogcywgY29uc3QgVVJM
Q29tcG9uZW50JiBjb21wKQotICAgIHsKLSAgICAgICAgbV9zb3VyY2VzLnJlZiA9IHM7Ci0gICAg
ICAgIG1fc2VnbWVudHMuZnJhZ21lbnQgPSBjb21wOwotICAgIH0KLSAgICB2b2lkIENsZWFyUmVm
KCkKLSAgICB7Ci0gICAgICAgIG1fc291cmNlcy5yZWYgPSBQbGFjZWhvbGRlcigpOwotICAgICAg
ICBtX3NlZ21lbnRzLmZyYWdtZW50ID0gVVJMQ29tcG9uZW50KCk7Ci0gICAgfQotICAgIGJvb2wg
SXNSZWZPdmVycmlkZGVuKCkgY29uc3QgeyByZXR1cm4gIW1fc291cmNlcy5yZWY7IH0KLQotICAg
IC8vIEdldHRlcnMgZm9yIHRoZSBpdG5lcm5hbCBkYXRhLiBTZWUgdGhlIHZhcmlhYmxlcyBiZWxv
dyBmb3IgaG93IHRoZQotICAgIC8vIGluZm9ybWF0aW9uIGlzIGVuY29kZWQuCi0gICAgY29uc3Qg
VVJMQ29tcG9uZW50U291cmNlPENoYXJhY3RlclR5cGU+JiBzb3VyY2VzKCkgY29uc3QgeyByZXR1
cm4gbV9zb3VyY2VzOyB9Ci0gICAgY29uc3QgVVJMU2VnbWVudHMmIGNvbXBvbmVudHMoKSBjb25z
dCB7IHJldHVybiBtX3NlZ21lbnRzOyB9Ci0KLXByaXZhdGU6Ci0gICAgLy8gUmV0dXJucyBhIHBv
aW50ZXIgdG8gYSBzdGF0aWMgZW1wdHkgc3RyaW5nIHRoYXQgaXMgdXNlZCBhcyBhIHBsYWNlaG9s
ZGVyCi0gICAgLy8gdG8gaW5kaWNhdGUgYSBjb21wb25lbnQgc2hvdWxkIGJlIGRlbGV0ZWQgKHNl
ZSBiZWxvdykuCi0gICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogUGxhY2Vob2xkZXIoKQotICAgIHsK
LSAgICAgICAgc3RhdGljIGNvbnN0IENoYXJhY3RlclR5cGUgZW1wdHlTdHJpbmcgPSAwOwotICAg
ICAgICByZXR1cm4gJmVtcHR5U3RyaW5nOwotICAgIH0KLQotICAgIC8vIFdlIHN1cHBvcnQgdGhy
ZWUgc3RhdGVzOgotICAgIC8vCi0gICAgLy8gQWN0aW9uICAgICAgICAgICAgICAgICB8IFNvdXJj
ZSAgICAgICAgICAgICAgICBDb21wb25lbnQKLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAg
IC8vIERvbid0IGNoYW5nZSBjb21wb25lbnQgfCBudWxsICAgICAgICAgICAgICAgICAgKHVudXNl
ZCkKLSAgICAvLyBSZXBsYWNlIGNvbXBvbmVudCAgICAgIHwgKHJlcGxhY2VtZW50IHN0cmluZykg
IChyZXBsYWNlbWVudCBjb21wb25lbnQpCi0gICAgLy8gRGVsZXRlIGNvbXBvbmVudCAgICAgICB8
IChub24tbnVsbCkgICAgICAgICAgICAoaW52YWxpZCBjb21wb25lbnQ6ICgwLC0xKSkKLSAgICAv
LwotICAgIC8vIFdlIHVzZSBhIHBvaW50ZXIgdG8gdGhlIGVtcHR5IHN0cmluZyBmb3IgdGhlIHNv
dXJjZSB3aGVuIHRoZSBjb21wb25lbnQKLSAgICAvLyBzaG91bGQgYmUgZGVsZXRlZC4KLSAgICBV
UkxDb21wb25lbnRTb3VyY2U8Q2hhcmFjdGVyVHlwZT4gbV9zb3VyY2VzOwotICAgIFVSTFNlZ21l
bnRzIG1fc2VnbWVudHM7Ci19OwotCi0vLyBUaGUgYmFzZSBtdXN0IGJlIGFuIDgtYml0IGNhbm9u
aWNhbCBVUkwuCi1ib29sIFJlcGxhY2VTdGFuZGFyZFVSTChjb25zdCBjaGFyKiBiYXNlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXBsYWNlbWVudHM8Y2hhcj4mLAotICAgICAgICAg
ICAgICAgICAgICAgICAgVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKTsKLWJvb2wgUmVwbGFjZVN0YW5k
YXJkVVJMKGNvbnN0IGNoYXIqIGJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBV
UkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJl
cGxhY2VtZW50czxVQ2hhcj4mLAotICAgICAgICAgICAgICAgICAgICAgICAgVVJMUXVlcnlDaGFy
c2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIFVS
TEJ1ZmZlcjxjaGFyPiYsCi0gICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0
cHV0UGFyc2VkKTsKLQotLy8gRmlsZXN5c3RlbSBVUkxzIGNhbiBvbmx5IGhhdmUgdGhlIHBhdGgs
IHF1ZXJ5LCBvciByZWYgcmVwbGFjZWQuCi0vLyBBbGwgb3RoZXIgY29tcG9uZW50cyB3aWxsIGJl
IGlnbm9yZWQuCi1ib29sIFJlcGxhY2VGaWxlU3lzdGVtVVJMKGNvbnN0IGNoYXIqIGJhc2UsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXBsYWNlbWVudHM8Y2hhcj4mLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29u
dmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKTsKLWJvb2wg
UmVwbGFjZUZpbGVTeXN0ZW1VUkwoY29uc3QgY2hhciogYmFzZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFJlcGxhY2VtZW50czxVQ2hhcj4mLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKTsKLQotLy8gUmVwbGFjaW5nIHNvbWUg
cGFydHMgb2YgYSBmaWxlIFVSTCBpcyBub3QgcGVybWl0dGVkLiBFdmVyeXRoaW5nIGV4Y2VwdAot
Ly8gdGhlIGhvc3QsIHBhdGgsIHF1ZXJ5LCBhbmQgcmVmIHdpbGwgYmUgaWdub3JlZC4KLWJvb2wg
UmVwbGFjZUZpbGVVUkwoY29uc3QgY2hhciogYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgY29u
c3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFJl
cGxhY2VtZW50czxjaGFyPiYsCi0gICAgICAgICAgICAgICAgICAgIFVSTFF1ZXJ5Q2hhcnNldENv
bnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxj
aGFyPiYsCi0gICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpOwot
Ym9vbCBSZXBsYWNlRmlsZVVSTChjb25zdCBjaGFyKiBiYXNlLAotICAgICAgICAgICAgICAgICAg
ICBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKLSAgICAgICAgICAgICAgICAgICAgY29u
c3QgUmVwbGFjZW1lbnRzPFVDaGFyPiYsCi0gICAgICAgICAgICAgICAgICAgIFVSTFF1ZXJ5Q2hh
cnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgIFVSTEJ1
ZmZlcjxjaGFyPiYsCi0gICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJz
ZWQpOwotCi0vLyBQYXRoIFVSTHMgY2FuIG9ubHkgaGF2ZSB0aGUgc2NoZW1lIGFuZCBwYXRoIHJl
cGxhY2VkLiBBbGwgb3RoZXIgY29tcG9uZW50cwotLy8gd2lsbCBiZSBpZ25vcmVkLgotYm9vbCBS
ZXBsYWNlUGF0aFVSTChjb25zdCBjaGFyKiBiYXNlLAotICAgICAgICAgICAgICAgICAgICBjb25z
dCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVw
bGFjZW1lbnRzPGNoYXI+JiwKLSAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwK
LSAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCk7Ci1ib29sIFJl
cGxhY2VQYXRoVVJMKGNvbnN0IGNoYXIqIGJhc2UsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0
IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXBs
YWNlbWVudHM8VUNoYXI+JiwKLSAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwK
LSAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCk7Ci0KLS8vIE1h
aWx0byBVUkxzIGNhbiBvbmx5IGhhdmUgdGhlIHNjaGVtZSwgcGF0aCwgYW5kIHF1ZXJ5IHJlcGxh
Y2VkLgotLy8gQWxsIG90aGVyIGNvbXBvbmVudHMgd2lsbCBiZSBpZ25vcmVkLgotYm9vbCByZXBs
YWNlTWFpbHRvVVJMKGNvbnN0IGNoYXIqIGJhc2UsIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFy
c2VkLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlcGxhY2VtZW50czxjaGFyPiYsCi0g
ICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTFNlZ21lbnRz
JiBvdXRwdXRQYXJzZWQpOwotYm9vbCByZXBsYWNlTWFpbHRvVVJMKGNvbnN0IGNoYXIqIGJhc2Us
IGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAotICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFJlcGxhY2VtZW50czxVQ2hhcj4mLAotICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZl
cjxjaGFyPiYgb3V0cHV0LCBVUkxTZWdtZW50cyYgb3V0cHV0UGFyc2VkKTsKLQotLy8gUmVsYXRp
dmUgVVJMIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi0vLyBHaXZlbiBhbiBpbnB1dCBVUkwgb3IgVVJMIGZyYWdtZW50IHxm
cmFnbWVudHwsIGRldGVybWluZXMgaWYgaXQgaXMgYQotLy8gcmVsYXRpdmUgb3IgYWJzb2x1dGUg
VVJMIGFuZCBwbGFjZXMgdGhlIHJlc3VsdCBpbnRvIHwqaXNSZWxhdGl2ZXwuIElmIGl0IGlzCi0v
LyByZWxhdGl2ZSwgdGhlIHJlbGV2YW50IHBvcnRpb24gb2YgdGhlIFVSTCB3aWxsIGJlIHBsYWNl
ZCBpbnRvCi0vLyB8KnJlbGF0aXZlQ29tcG9uZW50fCAodGhlcmUgbWF5IGhhdmUgYmVlbiB0cmlt
bWVkIHdoaXRlc3BhY2UsIGZvciBleGFtcGxlKS4KLS8vIFRoaXMgdmFsdWUgaXMgcGFzc2VkIHRv
IHJlc29sdmVSZWxhdGl2ZVVSTC4gSWYgdGhlIGlucHV0IGlzIG5vdCByZWxhdGl2ZSwKLS8vIHRo
aXMgdmFsdWUgaXMgVU5ERUZJTkVEIChpdCBtYXkgYmUgY2hhbmdlZCBieSB0aGUgZnVuY3Rpb24p
LgotLy8KLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzICh3ZSBzdWNjZXNzZnVsbHkgZGV0ZXJt
aW5lZCB0aGUgVVJMIGlzIHJlbGF0aXZlIG9yCi0vLyBub3QpLiBGYWlsdXJlIG1lYW5zIHRoYXQg
dGhlIGNvbWJpbmF0aW9uIG9mIFVSTHMgZG9lc24ndCBtYWtlIGFueSBzZW5zZS4KLS8vCi0vLyBU
aGUgYmFzZSBVUkwgc2hvdWxkIGFsd2F5cyBiZSBjYW5vbmljYWwsIHRoZXJlZm9yZSBpcyBBU0NJ
SS4KLWJvb2wgaXNSZWxhdGl2ZVVSTChjb25zdCBjaGFyKiBiYXNlLCBjb25zdCBVUkxTZWdtZW50
cyYgYmFzZVBhcnNlZCwKLSAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBmcmFnbWVudCwg
aW50IGZyYWdtZW50TGVuZ3RoLAotICAgICAgICAgICAgICAgICAgIGJvb2wgaXNCYXNlSGllcmFy
Y2hpY2FsLAotICAgICAgICAgICAgICAgICAgIGJvb2wmIGlzUmVsYXRpdmUsIFVSTENvbXBvbmVu
dCYgcmVsYXRpdmVDb21wb25lbnQpOwotYm9vbCBpc1JlbGF0aXZlVVJMKGNvbnN0IGNoYXIqIGJh
c2UsIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAotICAgICAgICAgICAgICAgICAgIGNv
bnN0IFVDaGFyKiBmcmFnbWVudCwgaW50IGZyYWdtZW50TGVuZ3RoLAotICAgICAgICAgICAgICAg
ICAgIGJvb2wgaXNCYXNlSGllcmFyY2hpY2FsLAotICAgICAgICAgICAgICAgICAgIGJvb2wmIGlz
UmVsYXRpdmUsIFVSTENvbXBvbmVudCYgcmVsYXRpdmVDb21wb25lbnQpOwotCi0vLyBHaXZlbiBh
IGNhbm9uaWNhbCBwYXJzZWQgc291cmNlIFVSTCwgYSBVUkwgZnJhZ21lbnQga25vd24gdG8gYmUg
cmVsYXRpdmUsCi0vLyBhbmQgdGhlIGlkZW50aWZpZWQgcmVsZXZhbnQgcG9ydGlvbiBvZiB0aGUg
cmVsYXRpdmUgVVJMIChjb21wdXRlZCBieQotLy8gaXNSZWxhdGl2ZVVSTCksIHRoaXMgcHJvZHVj
ZXMgYSBuZXcgcGFyc2VkIGNhbm9uaWNhbCBVUkwgaW4gfG91dHB1dHwgYW5kCi0vLyB8b3V0cHV0
UGFyc2VkfC4KLS8vCi0vLyBJdCBhbHNvIHJlcXVpcmVzIGEgZmxhZyBpbmRpY2F0aW5nIHdoZXRo
ZXIgdGhlIGJhc2UgVVJMIGlzIGEgZmlsZTogVVJMCi0vLyB3aGljaCB0cmlnZ2VycyBhZGRpdGlv
bmFsIGxvZ2ljLgotLy8KLS8vIFRoZSBiYXNlIFVSTCBzaG91bGQgYmUgY2Fub25pY2FsIGFuZCBo
YXZlIGEgaG9zdCAobWF5IGJlIGVtcHR5IGZvciBmaWxlCi0vLyBVUkxzKSBhbmQgYSBwYXRoLiBJ
ZiBpdCBkb2Vzbid0IGhhdmUgdGhlc2UsIHdlIGNhbid0IHJlc29sdmUgcmVsYXRpdmUKLS8vIFVS
THMgb2ZmIG9mIGl0IGFuZCB3aWxsIHJldHVybiB0aGUgYmFzZSBhcyB0aGUgb3V0cHV0IHdpdGgg
YW4gZXJyb3IgZmxhZy4KLS8vIEJlY2F1c2VlIGl0IGlzIGNhbm9uaWNhbCBpcyBzaG91bGQgYWxz
byBiZSBBU0NJSS4KLS8vCi0vLyBUaGUgcXVlcnkgY2hhcnNldCBjb252ZXJ0ZXIgZm9sbG93cyB0
aGUgc2FtZSBydWxlcyBhcyBDYW5vbmljYWxpemVRdWVyeS4KLS8vCi0vLyBSZXR1cm5zIHRydWUg
b24gc3VjY2Vzcy4gT24gZmFpbHVyZSwgdGhlIG91dHB1dCB3aWxsIGJlICJzb21ldGhpbmcKLS8v
IHJlYXNvbmFibGUiIHRoYXQgd2lsbCBiZSBjb25zaXN0ZW50IGFuZCB2YWxpZCwganVzdCBwcm9i
YWJseSBub3Qgd2hhdAotLy8gd2FzIGludGVuZGVkIGJ5IHRoZSB3ZWIgcGFnZSBhdXRob3Igb3Ig
Y2FsbGVyLgotYm9vbCByZXNvbHZlUmVsYXRpdmVVUkwoY29uc3QgY2hhciogYmFzZVVSTCwgY29u
c3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsIGJvb2wgYmFzZUlzRmlsZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlbGF0aXZlVVJMLCBjb25zdCBVUkxDb21wb25lbnQm
IHJlbGF0aXZlQ29tcG9uZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgVVJMUXVlcnlDaGFy
c2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIFVS
TEJ1ZmZlcjxjaGFyPiYsIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpOwotYm9vbCByZXNvbHZl
UmVsYXRpdmVVUkwoY29uc3QgY2hhciogYmFzZVVSTCwgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQ
YXJzZWQsIGJvb2wgYmFzZUlzRmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVD
aGFyKiByZWxhdGl2ZVVSTCwgY29uc3QgVVJMQ29tcG9uZW50JiByZWxhdGl2ZUNvbXBvbmVudCwK
LSAgICAgICAgICAgICAgICAgICAgICAgIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciogcXVlcnlD
b252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxT
ZWdtZW50cyogb3V0cHV0UGFyc2VkKTsKLQotfSAvLyBuYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXpl
cgotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFVTRShXVEZVUkwpCi0KLSNlbmRp
ZiAvLyBVUkxDYW5vbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENh
bm9uRXRjLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25FdGMuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2NkZDljOTdkZjY1MTEyMDNmYTczMjViZGNlOGY3
MGQzMWMyN2EyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25FdGMuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMzc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwNyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLS8vIENhbm9uaWNhbGl6ZXJzIGZvciByYW5kb20gYml0cyB0aGF0IGFyZW4ndCBiaWcgZW5v
dWdoIGZvciB0aGVpciBvd24gZmlsZXMuCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJVUkxDYW5vbi5oIgotCi0jaW5jbHVkZSAiVVJMQ2Fub25JbnRlcm5hbC5oIgotI2luY2x1ZGUg
PHd0Zi9BU0NJSUNUeXBlLmg+Ci0KLSNpZiBVU0UoV1RGVVJMKQotCi1uYW1lc3BhY2UgV1RGIHsK
LQotbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIgewotCi1uYW1lc3BhY2UgewotCi0vLyBSZXR1
cm5zIHRydWUgaWYgdGhlIGdpdmVuIGNoYXJhY3RlciBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRo
ZSBtaWRkbGUgb2YgYQotLy8gVVJMLgotaW5saW5lIGJvb2wgaXNSZW1vdmFibGVVUkxXaGl0ZXNw
YWNlKGludCBjaGFyYWN0ZXIpCi17Ci0gICAgcmV0dXJuIGNoYXJhY3RlciA9PSAnXHInIHx8IGNo
YXJhY3RlciA9PSAnXG4nIHx8IGNoYXJhY3RlciA9PSAnXHQnOwotfQotCi0vLyBCYWNrZW5kIGZv
ciByZW1vdmVVUkxXaGl0ZXNwYWNlIChzZWUgZGVjbGFyYXRpb24gaW4gVVJMQ2Fub24uaCkuCi0v
LyBJdCBzdWNrcyB0aGF0IHdlIGhhdmUgdG8gZG8gdGhpcywgc2luY2UgdGhpcyB0YWtlcyBhYm91
dCAxMyUgb2YgdGhlIHRvdGFsIFVSTAotLy8gY2Fub25pY2FsaXphdGlvbiB0aW1lLgotdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWNvbnN0IENoYXJhY3RlclR5cGUqIGRvUmVtb3Zl
VVJMV2hpdGVzcGFjZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBpbnB1dCwgaW50IGlucHV0TGVuZ3Ro
LCBVUkxCdWZmZXI8Q2hhcmFjdGVyVHlwZT4mIGJ1ZmZlciwgaW50JiBvdXRwdXRMZW5ndGgpCi17
Ci0gICAgLy8gRmFzdCB2ZXJpZmljYXRpb24gdGhhdCB0aGVyZSdzIG5vdGhpbmcgdGhhdCBuZWVk
cyByZW1vdmFsLiBUaGlzIGlzIHRoZSA5OSUKLSAgICAvLyBjYXNlLCBzbyB3ZSB3YW50IGl0IHRv
IGJlIGZhc3QgYW5kIGRvbid0IGNhcmUgYWJvdXQgaW1wYWN0aW5nIHRoZSBzcGVlZAotICAgIC8v
IHdoZW4gd2UgZG8gZmluZCB3aGl0ZXNwYWNlLgotICAgIGJvb2wgZm91bmRXaGl0ZXNwYWNlID0g
ZmFsc2U7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dExlbmd0aDsgKytpKSB7Ci0gICAg
ICAgIGlmICghaXNSZW1vdmFibGVVUkxXaGl0ZXNwYWNlKGlucHV0W2ldKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBmb3VuZFdoaXRlc3BhY2UgPSB0cnVlOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBpZiAoIWZvdW5kV2hpdGVzcGFjZSkgewotICAgICAgICAvLyBEaWRu
J3QgZmluZCBhbnkgd2hpdGVzcGFjZSwgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4gV2Ug
Y2FuIGp1c3QKLSAgICAgICAgLy8gcmV0dXJuIHRoZSBpbnB1dCBhcyB0aGUgb3V0cHV0LgotICAg
ICAgICBvdXRwdXRMZW5ndGggPSBpbnB1dExlbmd0aDsKLSAgICAgICAgcmV0dXJuIGlucHV0Owot
ICAgIH0KLQotICAgIC8vIFJlbW92ZSB0aGUgd2hpdGVzcGFjZSBpbnRvIHRoZSBuZXcgYnVmZmVy
IGFuZCByZXR1cm4gaXQuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dExlbmd0aDsgaSsr
KSB7Ci0gICAgICAgIGlmICghaXNSZW1vdmFibGVVUkxXaGl0ZXNwYWNlKGlucHV0W2ldKSkKLSAg
ICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoaW5wdXRbaV0pOwotICAgIH0KLSAgICBvdXRwdXRMZW5n
dGggPSBidWZmZXIubGVuZ3RoKCk7Ci0gICAgcmV0dXJuIGJ1ZmZlci5kYXRhKCk7Ci19Ci0KLS8v
IENvbnRhaW5zIHRoZSBjYW5vbmljYWwgdmVyc2lvbiBvZiBlYWNoIHBvc3NpYmxlIGlucHV0IGxl
dHRlciBpbiB0aGUgc2NoZW1lCi0vLyAoYmFzaWNhbGx5LCBsb3dlci1jYXNlZCkuIFRoZSBjb3Jy
ZXNwb25kaW5nIGVudHJ5IHdpbGwgYmUgMCBpZiB0aGUgbGV0dGVyCi0vLyBpcyBub3QgYWxsb3dl
ZCBpbiBhIHNjaGVtZS4KLWNvbnN0IGNoYXIga1NjaGVtZUNhbm9uaWNhbFsweDgwXSA9IHsKLS8v
IDAwLTFmOiBhbGwgYXJlIGludmFsaWQKLSAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKLSAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwKLS8vICAnICcgICAhICAgICIgICAgIyAgICAkICAgICUgICAg
JiAgICAnICAgICggICAgKSAgICAqICAgICsgICAgLCAgICAtICAgIC4gICAgLwotICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAnKycsICAw
LCAgJy0nLCAnLicsICAwLAotLy8gICAwICAgIDEgICAgMiAgICAzICAgIDQgICAgNSAgICA2ICAg
IDcgICAgOCAgICA5ICAgIDogICAgOyAgICA8ICAgID0gICAgPiAgICA/Ci0gICAgJzAnLCAnMScs
ICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAgMCAsICAwICwgIDAgLCAg
MCAsICAwICwgIDAgLAotLy8gICBAICAgIEEgICAgQiAgICBDICAgIEQgICAgRSAgICBGICAgIEcg
ICAgSCAgICBJICAgIEogICAgSyAgICBMICAgIE0gICAgTiAgICBPCi0gICAgIDAgLCAnYScsICdi
JywgJ2MnLCAnZCcsICdlJywgJ2YnLCAnZycsICdoJywgJ2knLCAnaicsICdrJywgJ2wnLCAnbScs
ICduJywgJ28nLAotLy8gICBQICAgIFEgICAgUiAgICBTICAgIFQgICAgVSAgICBWICAgIFcgICAg
WCAgICBZICAgIFogICAgWyAgICBcICAgIF0gICAgXiAgICBfCi0gICAgJ3AnLCAncScsICdyJywg
J3MnLCAndCcsICd1JywgJ3YnLCAndycsICd4JywgJ3knLCAneicsICAwLCAgIDAgLCAgMCwgICAw
ICwgIDAsCi0vLyAgIGAgICAgYSAgICBiICAgIGMgICAgZCAgICBlICAgIGYgICAgZyAgICBoICAg
IGkgICAgaiAgICBrICAgIGwgICAgbSAgICBuICAgIG8KLSAgICAgMCAsICdhJywgJ2InLCAnYycs
ICdkJywgJ2UnLCAnZicsICdnJywgJ2gnLCAnaScsICdqJywgJ2snLCAnbCcsICdtJywgJ24nLCAn
bycsCi0vLyAgIHAgICAgcSAgICByICAgIHMgICAgdCAgICB1ICAgIHYgICAgdyAgICB4ICAgIHkg
ICAgeiAgICB7ICAgIHwgICAgfSAgICB+Ci0gICAgJ3AnLCAncScsICdyJywgJ3MnLCAndCcsICd1
JywgJ3YnLCAndycsICd4JywgJ3knLCAneicsICAwICwgIDAgLCAgMCAsICAwICwgIDAgfTsKLQot
Ly8gVGhpcyBjb3VsZCBiZSBhIHRhYmxlIGxvb2t1cCBhcyB3ZWxsIGJ5IHNldHRpbmcgdGhlIGhp
Z2ggYml0IGZvciBlYWNoCi0vLyB2YWxpZCBjaGFyYWN0ZXIsIGJ1dCBpdCdzIG9ubHkgY2FsbGVk
IG9uY2UgcGVyIFVSTCwgYW5kIGl0IG1ha2VzIHRoZSBsb29rdXAKLS8vIHRhYmxlIGVhc2llciB0
byByZWFkIG5vdCBoYXZpbmcgZXh0cmEgc3R1ZmYgaW4gaXQuCi1pbmxpbmUgYm9vbCBpc1NjaGVt
ZUZpcnN0Q2hhcih1bnNpZ25lZCBjaGFyIGNoYXJhY3RlcikKLXsKLSAgICByZXR1cm4gaXNBU0NJ
SUFscGhhKGNoYXJhY3Rlcik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUs
IHR5cGVuYW1lIFVDSEFSPgotYm9vbCBkb1NjaGVtZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVj
LCBjb25zdCBVUkxDb21wb25lbnQmIHNjaGVtZSwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVS
TENvbXBvbmVudCYgb3V0cHV0U2NoZW1lKQotewotICAgIGlmIChzY2hlbWUubGVuZ3RoKCkgPD0g
MCkgewotICAgICAgICAvLyBTY2hlbWUgaXMgdW5zcGVjaWZpZWQgb3IgZW1wdHksIGNvbnZlcnQg
dG8gZW1wdHkgYnkgYXBwZW5kaW5nIGEgY29sb24uCi0gICAgICAgIG91dHB1dFNjaGVtZSA9IFVS
TENvbXBvbmVudChvdXRwdXQubGVuZ3RoKCksIDApOwotICAgICAgICBvdXRwdXQuYXBwZW5kKCc6
Jyk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIFRoZSBvdXRwdXQgc2No
ZW1lIHN0YXJ0cyBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICAgIG91dHB1dFNjaGVtZS5t
b3ZlQnkob3V0cHV0Lmxlbmd0aCgpKTsKLQotICAgIC8vIERhbmdlcjogaXQncyBpbXBvcnRhbnQg
dGhhdCB0aGlzIGNvZGUgZG9lcyBub3Qgc3RyaXAgYW55IGNoYXJhY3RlcnM6IGl0Ci0gICAgLy8g
b25seSBlbWl0cyB0aGUgY2Fub25pY2FsIHZlcnNpb24gKGJlIGl0IHZhbGlkIG9yIGVzY2FwZWQp
IG9mIGVhY2ggb2YKLSAgICAvLyB0aGUgaW5wdXQgY2hhcmFjdGVycy4gU3RyaXBwaW5nIHdvdWxk
IHB1dCBpdCBvdXQgb2Ygc3luYyB3aXRoCi0gICAgLy8gVVJMVXRpbGl0aWVzOjpGaW5kQW5kQ29t
cGFyZVNjaGVtZSwgd2hpY2ggY291bGQgY2F1c2Ugc29tZSBzZWN1cml0eSBjaGVja3Mgb24KLSAg
ICAvLyBzY2hlbWVzIHRvIGJlIGluY29ycmVjdC4KLSAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwot
ICAgIGludCBlbmQgPSBzY2hlbWUuZW5kKCk7Ci0gICAgZm9yIChpbnQgaSA9IHNjaGVtZS5iZWdp
bigpOyBpIDwgZW5kOyArK2kpIHsKLSAgICAgICAgVUNIQVIgY2hhcmFjdGVyID0gc3RhdGljX2Nh
c3Q8VUNIQVI+KHNwZWNbaV0pOwotICAgICAgICBjaGFyIHJlcGxhY2VtZW50ID0gMDsKLSAgICAg
ICAgaWYgKGNoYXJhY3RlciA8IDB4ODApIHsKLSAgICAgICAgICAgIGlmIChpID09IHNjaGVtZS5i
ZWdpbigpKSB7Ci0gICAgICAgICAgICAgICAgLy8gTmVlZCB0byBkbyBhIHNwZWNpYWwgY2hlY2sg
Zm9yIHRoZSBmaXJzdCBsZXR0ZXIgb2YgdGhlIHNjaGVtZS4KLSAgICAgICAgICAgICAgICBpZiAo
aXNTY2hlbWVGaXJzdENoYXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oY2hhcmFjdGVyKSkp
Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50ID0ga1NjaGVtZUNhbm9uaWNhbFtjaGFy
YWN0ZXJdOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQg
PSBrU2NoZW1lQ2Fub25pY2FsW2NoYXJhY3Rlcl07Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
cmVwbGFjZW1lbnQpCi0gICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHJlcGxhY2VtZW50KTsKLSAg
ICAgICAgZWxzZSBpZiAoY2hhcmFjdGVyID09ICclJykgewotICAgICAgICAgICAgLy8gQ2Fub25p
Y2FsaXppbmcgdGhlIHNjaGVtZSBtdWx0aXBsZSB0aW1lcyBzaG91bGQgbGVhZCB0byB0aGUgc2Ft
ZQotICAgICAgICAgICAgLy8gcmVzdWx0LiBTaW5jZSBpbnZhbGlkIGNoYXJhY3RlcnMgd2lsbCBi
ZSBlc2NhcGVkLCB3ZSBuZWVkIHRvIHByZXNlcnZlCi0gICAgICAgICAgICAvLyB0aGUgcGVyY2Vu
dCB0byBhdm9pZCBtdWx0aXBsZSBlc2NhcGluZy4gVGhlIHNjaGVtZSB3aWxsIGJlIGludmFsaWQu
Ci0gICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgICAgICBvdXRwdXQuYXBwZW5k
KCclJyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBJbnZhbGlkIGNoYXJhY3Rl
ciwgc3RvcmUgaXQgYnV0IG1hcmsgdGhpcyBzY2hlbWUgYXMgaW52YWxpZC4KLSAgICAgICAgICAg
IHN1Y2Nlc3MgPSBmYWxzZTsKLQotICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGVzY2FwZSB0aGUg
b3V0cHV0IGFuZCBhbHNvIGhhbmRsZSBlbmNvZGluZyBpc3N1ZXMuCi0gICAgICAgICAgICAvLyBJ
Z25vcmUgdGhlIHJldHVybiB2YWx1ZSBzaW5jZSB3ZSBhbHJlYWR5IGZhaWxlZC4KLSAgICAgICAg
ICAgIEFwcGVuZFVURjhFc2NhcGVkQ2hhcihzcGVjLCAmaSwgZW5kLCBvdXRwdXQpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIG91dHB1dCBzY2hlbWUgZW5kcyB3aXRoIHRoZSB0aGUg
Y3VycmVudCBwb3NpdGlvbiwgYmVmb3JlIGFwcGVuZGluZwotICAgIC8vIHRoZSBjb2xvbi4KLSAg
ICBvdXRwdXRTY2hlbWUuc2V0TGVuZ3RoKG91dHB1dC5sZW5ndGgoKSAtIG91dHB1dFNjaGVtZS5i
ZWdpbigpKTsKLSAgICBvdXRwdXQuYXBwZW5kKCc6Jyk7Ci0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19
Ci0KLS8vIFRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgY29tcG9uZW50cyByZWZlcmVuY2UgcmFu
Z2VzIGluIHRoZSBjb3JyZXNwb25kaW5nCi0vLyAqX3NwZWMgc3RyaW5ncy4gVHlwaWNhbGx5LCB0
aGVzZSBzcGVjcyB3aWxsIGJlIHRoZSBzYW1lICh3ZSdyZQotLy8gY2Fub25pY2FsaXppbmcgYSBz
aW5nbGUgc291cmNlIHN0cmluZyksIGJ1dCBtYXkgYmUgZGlmZmVyZW50IHdoZW4KLS8vIHJlcGxh
Y2luZyBjb21wb25lbnRzLgotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5h
bWUgVUNIQVI+Ci1ib29sIGRvVXNlckluZm8oY29uc3QgQ2hhcmFjdGVyVHlwZSogdXNlcm5hbWVT
cGVjLAotICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgdXNlcm5hbWUsCi0gICAg
ICAgICAgICAgICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogcGFzc3dvcmRTcGVjLAotICAgICAgICAg
ICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgcGFzc3dvcmQsCi0gICAgICAgICAgICAgICAgVVJM
QnVmZmVyPGNoYXI+JiBvdXRwdXQsCi0gICAgICAgICAgICAgICAgVVJMQ29tcG9uZW50JiBvdXRw
dXRVc2VybmFtZSwKLSAgICAgICAgICAgICAgICBVUkxDb21wb25lbnQmIG91dHB1dFBhc3N3b3Jk
KQotewotICAgIGlmICh1c2VybmFtZS5sZW5ndGgoKSA8PSAwICYmIHBhc3N3b3JkLmxlbmd0aCgp
IDw9IDApIHsKLSAgICAgICAgLy8gQ29tbW9uIGNhc2U6IG5vIHVzZXIgaW5mby4gV2Ugc3RyaXAg
ZW1wdHkgdXNlcm5hbWUvcGFzc3dvcmRzLgotICAgICAgICBvdXRwdXRVc2VybmFtZSA9IFVSTENv
bXBvbmVudCgpOwotICAgICAgICBvdXRwdXRQYXNzd29yZCA9IFVSTENvbXBvbmVudCgpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBXcml0ZSB0aGUgdXNlcm5hbWUuCi0g
ICAgb3V0cHV0VXNlcm5hbWUuc2V0QmVnaW4ob3V0cHV0Lmxlbmd0aCgpKTsKLSAgICBpZiAodXNl
cm5hbWUubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgIC8vIFRoaXMgd2lsbCBlc2NhcGUgY2hhcmFj
dGVycyBub3QgdmFsaWQgZm9yIHRoZSB1c2VybmFtZS4KLSAgICAgICAgYXBwZW5kU3RyaW5nT2ZU
eXBlKCZ1c2VybmFtZVNwZWNbdXNlcm5hbWUuYmVnaW4oKV0sIHVzZXJuYW1lLmxlbmd0aCgpLCBV
UkxDaGFyYWN0ZXJUeXBlczo6VXNlckluZm9DaGFyYWN0ZXIsIG91dHB1dCk7Ci0gICAgfQotICAg
IG91dHB1dFVzZXJuYW1lLnNldExlbmd0aChvdXRwdXQubGVuZ3RoKCkgLSBvdXRwdXRVc2VybmFt
ZS5iZWdpbigpKTsKLQotICAgIC8vIFdoZW4gdGhlcmUgaXMgYSBwYXNzd29yZCwgd2UgbmVlZCB0
aGUgc2VwYXJhdG9yLiBOb3RlIHRoYXQgd2Ugc3RyaXAKLSAgICAvLyBlbXB0eSBidXQgc3BlY2lm
aWVkIHBhc3N3b3Jkcy4KLSAgICBpZiAocGFzc3dvcmQubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAg
IG91dHB1dC5hcHBlbmQoJzonKTsKLSAgICAgICAgb3V0cHV0UGFzc3dvcmQuc2V0QmVnaW4ob3V0
cHV0Lmxlbmd0aCgpKTsKLSAgICAgICAgYXBwZW5kU3RyaW5nT2ZUeXBlKCZwYXNzd29yZFNwZWNb
cGFzc3dvcmQuYmVnaW4oKV0sIHBhc3N3b3JkLmxlbmd0aCgpLCBVUkxDaGFyYWN0ZXJUeXBlczo6
VXNlckluZm9DaGFyYWN0ZXIsIG91dHB1dCk7Ci0gICAgICAgIG91dHB1dFBhc3N3b3JkLnNldExl
bmd0aChvdXRwdXQubGVuZ3RoKCkgLSBvdXRwdXRQYXNzd29yZC5iZWdpbigpKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgb3V0cHV0UGFzc3dvcmQgPSBVUkxDb21wb25lbnQoKTsKLQotICAgIG91dHB1
dC5hcHBlbmQoJ0AnKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gSGVscGVyIGZ1bmN0aW9u
cyBmb3IgY29udmVydGluZyBwb3J0IGludGVnZXJzIHRvIHN0cmluZ3MuCi1pbmxpbmUgdm9pZCB3
cml0ZVBvcnRJbnQoY2hhciogb3V0cHV0LCBpbnQgb3V0cHV0TGVuZ3RoLCBpbnQgcG9ydCkKLXsK
LSAgICBfaXRvYV9zKHBvcnQsIG91dHB1dCwgb3V0cHV0TGVuZ3RoLCAxMCk7Ci19Ci0KLS8vIFRo
aXMgZnVuY3Rpb24gd2lsbCBwcmVwZW5kIHRoZSBjb2xvbiBpZiB0aGVyZSB3aWxsIGJlIGEgcG9y
dC4KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIFVDSEFSPgotYm9v
bCBkb1BvcnQoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywKLSAgICAgICAgICAgIGNvbnN0IFVS
TENvbXBvbmVudCYgcG9ydCwKLSAgICAgICAgICAgIGludCBkZWZhdWx0UG9ydEZvclNjaGVtZSwK
LSAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAotICAgICAgICAgICAgVVJMQ29t
cG9uZW50JiBvdXRwdXRQb3J0Q29tcG9uZW50KQotewotICAgIGludCBwb3J0TnVtYmVyID0gVVJM
UGFyc2VyOjpQYXJzZVBvcnQoc3BlYywgcG9ydCk7Ci0gICAgaWYgKHBvcnROdW1iZXIgPT0gVVJM
UGFyc2VyOjpQT1JUX1VOU1BFQ0lGSUVEIHx8IHBvcnROdW1iZXIgPT0gZGVmYXVsdFBvcnRGb3JT
Y2hlbWUpIHsKLSAgICAgICAgb3V0cHV0UG9ydENvbXBvbmVudCA9IFVSTENvbXBvbmVudCgpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gTGVhdmUgcG9ydCBlbXB0eS4KLSAgICB9Ci0KLSAgICBp
ZiAocG9ydE51bWJlciA9PSBVUkxQYXJzZXI6OlBPUlRfSU5WQUxJRCkgewotICAgICAgICAvLyBJ
bnZhbGlkIHBvcnQ6IFdlJ2xsIGNvcHkgdGhlIHRleHQgZnJvbSB0aGUgaW5wdXQgc28gdGhlIHVz
ZXIgY2FuIHNlZQotICAgICAgICAvLyB3aGF0IHRoZSBlcnJvciB3YXMsIGFuZCBtYXJrIHRoZSBV
UkwgYXMgaW52YWxpZCBieSByZXR1cm5pbmcgZmFsc2UuCi0gICAgICAgIG91dHB1dC5hcHBlbmQo
JzonKTsKLSAgICAgICAgb3V0cHV0UG9ydENvbXBvbmVudC5zZXRCZWdpbihvdXRwdXQubGVuZ3Ro
KCkpOwotICAgICAgICBBcHBlbmRJbnZhbGlkTmFycm93U3RyaW5nKHNwZWMsIHBvcnQuYmVnaW4o
KSwgcG9ydC5lbmQoKSwgb3V0cHV0KTsKLSAgICAgICAgb3V0cHV0UG9ydENvbXBvbmVudC5zZXRM
ZW5ndGgob3V0cHV0Lmxlbmd0aCgpIC0gb3V0cHV0UG9ydENvbXBvbmVudC5iZWdpbigpKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIENvbnZlcnQgcG9ydCBudW1iZXIg
YmFjayB0byBhbiBpbnRlZ2VyLiBNYXggcG9ydCB2YWx1ZSBpcyA1IGRpZ2l0cywgYW5kCi0gICAg
Ly8gdGhlIFBhcnNlZDo6RXh0cmFjdFBvcnQgd2lsbCBoYXZlIG1hZGUgc3VyZSB0aGUgaW50ZWdl
ciBpcyBpbiByYW5nZS4KLSAgICBjb25zdCBpbnQgYnVmZmVyU2l6ZSA9IDY7Ci0gICAgY2hhciBi
dWZmZXJbYnVmZmVyU2l6ZV07Ci0gICAgd3JpdGVQb3J0SW50KGJ1ZmZlciwgYnVmZmVyU2l6ZSwg
cG9ydE51bWJlcik7Ci0KLSAgICAvLyBBcHBlbmQgdGhlIHBvcnQgbnVtYmVyIHRvIHRoZSBvdXRw
dXQsIHByZWNlZWRlZCBieSBhIGNvbG9uLgotICAgIG91dHB1dC5hcHBlbmQoJzonKTsKLSAgICBv
dXRwdXRQb3J0Q29tcG9uZW50LnNldEJlZ2luKG91dHB1dC5sZW5ndGgoKSk7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBidWZmZXJTaXplICYmIGJ1ZmZlcltpXTsgKytpKQotICAgICAgICBvdXRw
dXQuYXBwZW5kKGJ1ZmZlcltpXSk7Ci0KLSAgICBvdXRwdXRQb3J0Q29tcG9uZW50LnNldExlbmd0
aChvdXRwdXQubGVuZ3RoKCkgLSBvdXRwdXRQb3J0Q29tcG9uZW50LmJlZ2luKCkpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFt
ZSBVQ0hBUj4KLXZvaWQgZG9DYW5vbmljYWxpemVGcmFnbWVudChjb25zdCBDaGFyYWN0ZXJUeXBl
KiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGZyYWdtZW50LCBVUkxCdWZmZXI8Y2hhcj4mIG91
dHB1dCwgVVJMQ29tcG9uZW50JiBvdXRwdXRGcmFnbWVudCkKLXsKLSAgICBpZiAoZnJhZ21lbnQu
bGVuZ3RoKCkgPCAwKSB7Ci0gICAgICAgIC8vIENvbW1vbiBjYXNlIG9mIG5vIGZyYWdtZW50Lgot
ICAgICAgICBvdXRwdXRGcmFnbWVudCA9IFVSTENvbXBvbmVudCgpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgLy8gQXBwZW5kIHRoZSBmcmFnbWVudCBzZXBhcmF0b3IuIE5vdGUgdGhh
dCB3ZSBuZWVkIHRvIGRvIHRoaXMgZXZlbiB3aGVuIHRoZSBmcmFnbWVudAotICAgIC8vIGlzIGVt
cHR5IGJ1dCBwcmVzZW50LgotICAgIG91dHB1dC5hcHBlbmQoJyMnKTsKLSAgICBvdXRwdXRGcmFn
bWVudC5zZXRCZWdpbihvdXRwdXQubGVuZ3RoKCkpOwotCi0gICAgLy8gTm93IGl0ZXJhdGUgdGhy
b3VnaCBhbGwgdGhlIGNoYXJhY3RlcnMsIGNvbnZlcnRpbmcgdG8gVVRGLTggYW5kIHZhbGlkYXRp
bmcuCi0gICAgaW50IGVuZCA9IGZyYWdtZW50LmVuZCgpOwotICAgIGZvciAoaW50IGkgPSBmcmFn
bWVudC5iZWdpbigpOyBpIDwgZW5kOyArK2kpIHsKLSAgICAgICAgaWYgKCFzcGVjW2ldKSB7Ci0g
ICAgICAgICAgICAvLyBJRSBqdXN0IHN0cmlwcyBOVUxMcywgc28gd2UgZG8gdG9vLgotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PFVDSEFS
PihzcGVjW2ldKSA8IDB4MjApIHsKLSAgICAgICAgICAgIC8vIFVubGluZSBJRSBzZWVtcyB0bywg
d2UgZXNjYXBlIGNvbnRyb2wgY2hhcmFjdGVycy4gVGhpcyB3aWxsIHByb2JhYmx5Ci0gICAgICAg
ICAgICAvLyBtYWtlIHRoZSByZWZlcmVuY2UgZnJhZ21lbnQgdW51c2FibGUgb24gYSB3ZWIgcGFn
ZSwgYnV0IHBlb3BsZQotICAgICAgICAgICAgLy8gc2hvdWxkbid0IGJlIHVzaW5nIGNvbnRyb2wg
Y2hhcmFjdGVycyBpbiB0aGVpciBhbmNob3IgbmFtZXMuCi0gICAgICAgICAgICBhcHBlbmRVUkxF
c2NhcGVkQ2hhcmFjdGVyKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHNwZWNbaV0pLCBvdXRw
dXQpOwotICAgICAgICB9IGVsc2UgaWYgKHN0YXRpY19jYXN0PFVDSEFSPihzcGVjW2ldKSA8IDB4
ODApIHsKLSAgICAgICAgICAgIC8vIE5vcm1hbCBBU0NJSSBjaGFyYWN0ZXJzIGFyZSBqdXN0IGFw
cGVuZGVkLgotICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPihzcGVj
W2ldKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBOb24tQVNDSUkgY2hhcmFj
dGVycyBhcmUgYXBwZW5kZWQgdW5lc2NhcGVkLCBidXQgb25seSB3aGVuIHRoZXkgYXJlCi0gICAg
ICAgICAgICAvLyB2YWxpZC4gSW52YWxpZCBVbmljb2RlIGNoYXJhY3RlcnMgYXJlIHJlcGxhY2Vk
IHdpdGggdGhlICJpbnZhbGlkCi0gICAgICAgICAgICAvLyBjaGFyYWN0ZXIiIGFzIElFIHNlZW1z
IHRvIChyZWFkVVRGQ2hhciBwdXRzIHRoZSB1bmljb2RlIHJlcGxhY2VtZW50Ci0gICAgICAgICAg
ICAvLyBjaGFyYWN0ZXIgaW4gdGhlIG91dHB1dCBvbiBmYWlsdXJlIGZvciB1cykuCi0gICAgICAg
ICAgICB1bnNpZ25lZCBjb2RlUG9pbnQ7Ci0gICAgICAgICAgICByZWFkVVRGQ2hhcihzcGVjLCAm
aSwgZW5kLCAmY29kZVBvaW50KTsKLSAgICAgICAgICAgIEFwcGVuZFVURjhWYWx1ZShjb2RlUG9p
bnQsIG91dHB1dCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBvdXRwdXRGcmFnbWVudC5zZXRM
ZW5ndGgob3V0cHV0Lmxlbmd0aCgpIC0gb3V0cHV0RnJhZ21lbnQuYmVnaW4oKSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlCi0KLWNvbnN0IGNoYXIqIHJlbW92ZVVSTFdoaXRlc3BhY2UoY29uc3QgY2hh
ciogaW5wdXQsIGludCBpbnB1dExlbmd0aCwgVVJMQnVmZmVyPGNoYXI+JiBidWZmZXIsIGludCYg
b3V0cHV0TGVuZ3RoKQotewotICAgIHJldHVybiBkb1JlbW92ZVVSTFdoaXRlc3BhY2UoaW5wdXQs
IGlucHV0TGVuZ3RoLCBidWZmZXIsIG91dHB1dExlbmd0aCk7Ci19Ci0KLWNvbnN0IFVDaGFyKiBy
ZW1vdmVVUkxXaGl0ZXNwYWNlKGNvbnN0IFVDaGFyKiBpbnB1dCwgaW50IGlucHV0TGVuZ3RoLCBV
UkxCdWZmZXI8VUNoYXI+JiBidWZmZXIsIGludCYgb3V0cHV0TGVuZ3RoKQotewotICAgIHJldHVy
biBkb1JlbW92ZVVSTFdoaXRlc3BhY2UoaW5wdXQsIGlucHV0TGVuZ3RoLCBidWZmZXIsIG91dHB1
dExlbmd0aCk7Ci19Ci0KLWNoYXIgY2Fub25pY2FsU2NoZW1lQ2hhcihVQ2hhciBjaGFyYWN0ZXIp
Ci17Ci0gICAgaWYgKGNoYXJhY3RlciA+PSAweDgwKQotICAgICAgICByZXR1cm4gMDsgLy8gTm9u
LUFTQ0lJIGlzIG5vdCBzdXBwb3J0ZWQgYnkgc2NoZW1lcy4KLSAgICByZXR1cm4ga1NjaGVtZUNh
bm9uaWNhbFtjaGFyYWN0ZXJdOwotfQotCi1ib29sIGNhbm9uaWNhbGl6ZVNjaGVtZShjb25zdCBj
aGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHNjaGVtZSwgVVJMQnVmZmVyPGNoYXI+JiBv
dXRwdXQsIFVSTENvbXBvbmVudCYgb3V0cHV0U2NoZW1lKQotewotICAgIHJldHVybiBkb1NjaGVt
ZTxjaGFyLCB1bnNpZ25lZCBjaGFyPihzcGVjLCBzY2hlbWUsIG91dHB1dCwgb3V0cHV0U2NoZW1l
KTsKLX0KLQotYm9vbCBjYW5vbmljYWxpemVTY2hlbWUoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0
IFVSTENvbXBvbmVudCYgc2NoZW1lLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMQ29tcG9u
ZW50JiBvdXRwdXRTY2hlbWUpCi17Ci0gICAgcmV0dXJuIGRvU2NoZW1lPFVDaGFyLCBVQ2hhcj4o
c3BlYywgc2NoZW1lLCBvdXRwdXQsIG91dHB1dFNjaGVtZSk7Ci19Ci0KLWJvb2wgY2Fub25pY2Fs
aXplVXNlckluZm8oY29uc3QgY2hhciogdXNlcm5hbWVTb3VyY2UsIGNvbnN0IFVSTENvbXBvbmVu
dCYgdXNlcm5hbWUsIGNvbnN0IGNoYXIqIHBhc3N3b3JkU291cmNlLCBjb25zdCBVUkxDb21wb25l
bnQmIHBhc3N3b3JkLAotICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4m
IG91dHB1dCwgVVJMQ29tcG9uZW50JiBvdXRwdXRVc2VybmFtZSwgVVJMQ29tcG9uZW50JiBvdXRw
dXRQYXNzd29yZCkKLXsKLSAgICByZXR1cm4gZG9Vc2VySW5mbzxjaGFyLCB1bnNpZ25lZCBjaGFy
Pih1c2VybmFtZVNvdXJjZSwgdXNlcm5hbWUsIHBhc3N3b3JkU291cmNlLCBwYXNzd29yZCwgb3V0
cHV0LCBvdXRwdXRVc2VybmFtZSwgb3V0cHV0UGFzc3dvcmQpOwotfQotCi1ib29sIGNhbm9uaWNh
bGl6ZVVzZXJJbmZvKGNvbnN0IFVDaGFyKiB1c2VybmFtZVNvdXJjZSwgY29uc3QgVVJMQ29tcG9u
ZW50JiB1c2VybmFtZSwgY29uc3QgVUNoYXIqIHBhc3N3b3JkU291cmNlLCBjb25zdCBVUkxDb21w
b25lbnQmIHBhc3N3b3JkLAotICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hh
cj4mIG91dHB1dCwgVVJMQ29tcG9uZW50JiBvdXRwdXRVc2VybmFtZSwgVVJMQ29tcG9uZW50JiBv
dXRwdXRQYXNzd29yZCkKLXsKLSAgICByZXR1cm4gZG9Vc2VySW5mbzxVQ2hhciwgVUNoYXI+KHVz
ZXJuYW1lU291cmNlLCB1c2VybmFtZSwgcGFzc3dvcmRTb3VyY2UsIHBhc3N3b3JkLCBvdXRwdXQs
IG91dHB1dFVzZXJuYW1lLCBvdXRwdXRQYXNzd29yZCk7Ci19Ci0KLWJvb2wgY2Fub25pY2FsaXpl
UG9ydChjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHBvcnQsIGludCBkZWZh
dWx0UG9ydEZvclNjaGVtZSwKLSAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4m
IG91dHB1dCwgVVJMQ29tcG9uZW50JiBvdXRwdXRQb3J0Q29tcG9uZW50KQotewotICAgIHJldHVy
biBkb1BvcnQ8Y2hhciwgdW5zaWduZWQgY2hhcj4oc3BlYywgcG9ydCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRQb3J0Rm9yU2NoZW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCBvdXRwdXRQb3J0Q29tcG9uZW50
KTsKLX0KLQotYm9vbCBjYW5vbmljYWxpemVQb3J0KGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBV
UkxDb21wb25lbnQmIHBvcnQsIGludCBkZWZhdWx0UG9ydEZvclNjaGVtZSwKLSAgICAgICAgICAg
ICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMQ29tcG9uZW50JiBvdXRwdXRQ
b3J0Q29tcG9uZW50KQotewotICAgIHJldHVybiBkb1BvcnQ8VUNoYXIsIFVDaGFyPihzcGVjLCBw
b3J0LCBkZWZhdWx0UG9ydEZvclNjaGVtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cHV0LCBvdXRwdXRQb3J0Q29tcG9uZW50KTsKLX0KLQotdm9pZCBjYW5vbmljYWxpemVG
cmFnbWVudChjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHJlZiwgVVJMQnVm
ZmVyPGNoYXI+JiBvdXRwdXQsIFVSTENvbXBvbmVudCYgb3V0cHV0RnJhZ21lbnQpCi17Ci0gICAg
ZG9DYW5vbmljYWxpemVGcmFnbWVudDxjaGFyLCB1bnNpZ25lZCBjaGFyPihzcGVjLCByZWYsIG91
dHB1dCwgb3V0cHV0RnJhZ21lbnQpOwotfQotCi12b2lkIGNhbm9uaWNhbGl6ZUZyYWdtZW50KGNv
bnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHJlZiwgVVJMQnVmZmVyPGNoYXI+
JiBvdXRwdXQsIFVSTENvbXBvbmVudCYgb3V0cHV0RnJhZ21lbnQpCi17Ci0gICAgZG9DYW5vbmlj
YWxpemVGcmFnbWVudDxVQ2hhciwgVUNoYXI+KHNwZWMsIHJlZiwgb3V0cHV0LCBvdXRwdXRGcmFn
bWVudCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIKLQotfSAvLyBuYW1l
c3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvdXJsL3NyYy9VUkxDYW5vbkZpbGVzeXN0ZW11cmwuY3BwIGIvU291cmNlL1dURi93dGYv
dXJsL3NyYy9VUkxDYW5vbkZpbGVzeXN0ZW11cmwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAzNjFiYmJlZjc2ZWY5ZDZiZTQyZDZhMDE3MWYwOTc0YmE0ZWFhMmE4Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL3Vy
bC9zcmMvVVJMQ2Fub25GaWxlc3lzdGVtdXJsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2NCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBG
dW5jdGlvbnMgZm9yIGNhbm9uaWNhbGl6aW5nICJmaWxlc3lzdGVtOmZpbGU6IiBVUkxzLgotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVVJMQ2Fub24uaCIKLQotI2luY2x1ZGUgIlJh
d1VSTEJ1ZmZlci5oIgotI2luY2x1ZGUgIlVSTENhbm9uSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJV
UkxGaWxlLmgiCi0jaW5jbHVkZSAiVVJMUGFyc2VJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlVSTFV0
aWwuaCIKLSNpbmNsdWRlICJVUkxVdGlsSW50ZXJuYWwuaCIKLQotI2lmIFVTRShXVEZVUkwpCi0K
LW5hbWVzcGFjZSBXVEYgewotCi1uYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplciB7Ci0KLW5hbWVz
cGFjZSB7Ci0KLS8vIFdlIHVzZSB0aGUgVVJMQ29tcG9uZW50U291cmNlIGZvciB0aGUgb3V0ZXIg
VVJMLCBhcyBpdCBjYW4gaGF2ZSByZXBsYWNlbWVudHMsCi0vLyB3aGVyZWFzIHRoZSBpbm5lcl91
cmwgY2FuJ3QsIHNvIGl0IHVzZXMgc3BlYy4KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGUsIHR5cGVuYW1lIFVDSEFSPgotYm9vbCBkb0Nhbm9uaWNhbGl6ZUZpbGVTeXN0ZW1VUkwoY29u
c3QgQ2hhcmFjdGVyVHlwZSogc3BlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFVSTENvbXBvbmVudFNvdXJjZTxDaGFyYWN0ZXJUeXBlPiYgc291cmNlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNlZCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciog
Y2hhcnNldENvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1
ZmZlcjxjaGFyPiYgb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJM
U2VnbWVudHMmIG91dHB1dFBhcnNlZCkKLXsKLSAgICAvLyBmaWxlc3lzdGVtIG9ubHkgdXNlcyB7
c2NoZW1lLCBwYXRoLCBxdWVyeSwgcmVmfSAtLSBjbGVhciB0aGUgcmVzdC4KLSAgICBvdXRwdXRQ
YXJzZWQudXNlcm5hbWUgPSBVUkxDb21wb25lbnQoKTsKLSAgICBvdXRwdXRQYXJzZWQucGFzc3dv
cmQgPSBVUkxDb21wb25lbnQoKTsKLSAgICBvdXRwdXRQYXJzZWQuaG9zdCA9IFVSTENvbXBvbmVu
dCgpOwotICAgIG91dHB1dFBhcnNlZC5wb3J0ID0gVVJMQ29tcG9uZW50KCk7Ci0KLSAgICBjb25z
dCBVUkxTZWdtZW50cyogaW5uZXJQYXJzZWQgPSBwYXJzZWQuaW5uZXJVUkxTZWdtZW50cygpOwot
ICAgIFVSTFNlZ21lbnRzIG5ld0lubmVyUGFyc2VkOwotCi0gICAgLy8gU2NoZW1lIChrbm93biwg
c28gd2UgZG9uJ3QgYm90aGVyIHJ1bm5pbmcgaXQgdGhyb3VnaCB0aGUgbW9yZQotICAgIC8vIGNv
bXBsaWNhdGVkIHNjaGVtZSBjYW5vbmljYWxpemVyKS4KLSAgICBvdXRwdXRQYXJzZWQuc2NoZW1l
LnNldEJlZ2luKG91dHB1dC5sZW5ndGgoKSk7Ci0gICAgb3V0cHV0LmFwcGVuZCgiZmlsZXN5c3Rl
bToiLCAxMSk7Ci0gICAgb3V0cHV0UGFyc2VkLnNjaGVtZS5zZXRMZW5ndGgoMTApOwotCi0gICAg
aWYgKCFwYXJzZWQuaW5uZXJVUkxTZWdtZW50cygpIHx8ICFwYXJzZWQuaW5uZXJVUkxTZWdtZW50
cygpLT5zY2hlbWUuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29s
IHN1Y2Nlc3MgPSB0cnVlOwotICAgIGlmIChVUkxVdGlsaXRpZXM6OkNvbXBhcmVTY2hlbWVDb21w
b25lbnQoc3BlYywgaW5uZXJQYXJzZWQtPnNjaGVtZSwgVVJMVXRpbGl0aWVzOjprRmlsZVNjaGVt
ZSkpIHsKLSAgICAgICAgbmV3SW5uZXJQYXJzZWQuc2NoZW1lLnNldEJlZ2luKG91dHB1dC5sZW5n
dGgoKSk7Ci0gICAgICAgIG91dHB1dC5hcHBlbmQoImZpbGU6Ly8iLCA3KTsKLSAgICAgICAgbmV3
SW5uZXJQYXJzZWQuc2NoZW1lLnNldExlbmd0aCg0KTsKLSAgICAgICAgc3VjY2VzcyAmPSBDYW5v
bmljYWxpemVQYXRoKHNwZWMsIGlubmVyUGFyc2VkLT5wYXRoLCBvdXRwdXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3SW5uZXJQYXJzZWQucGF0aCk7Ci0gICAgfSBl
bHNlIGlmIChVUkxVdGlsaXRpZXM6OmlzU3RhbmRhcmQoc3BlYywgaW5uZXJQYXJzZWQtPnNjaGVt
ZSkpIHsKLSAgICAgICAgc3VjY2VzcyA9Ci0gICAgICAgIFVSTENhbm9uaWNhbGl6ZXI6OkNhbm9u
aWNhbGl6ZVN0YW5kYXJkVVJMKHNwZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcnNlZC5pbm5lclVSTFNlZ21lbnRzKCktPmxlbmd0aCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyc2Vk
LmlubmVyVVJMU2VnbWVudHMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhcnNldENvbnZlcnRlciwgb3V0cHV0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3SW5uZXJQYXJzZWQpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIC8vIFRPRE8oZXJpY3UpOiBUaGUgVVJMIGlzIHdyb25nLCBidXQg
c2hvdWxkIHdlIHRyeSB0byBvdXRwdXQgbW9yZSBvZiB3aGF0Ci0gICAgICAgIC8vIHdlIHdlcmUg
Z2l2ZW4/IEVjaG9pbmcgYmFjayBmaWxlc3lzdGVtOm1haWx0byBldGMuIGRvZXNuJ3Qgc2VlbSBh
bGwgdGhhdCB1c2VmdWwuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLy8gVGhl
IGZpbGVzeXN0ZW0gdHlwZSBtdXN0IGJlIG1vcmUgdGhhbiBqdXN0IGEgbGVhZGluZyBzbGFzaCBm
b3IgdmFsaWRpdHkuCi0gICAgc3VjY2VzcyAmPSBwYXJzZWQuaW5uZXJVUkxTZWdtZW50cygpLT5w
YXRoLmxlbmd0aCgpID4gMTsKLQotICAgIHN1Y2Nlc3MgJj0gQ2Fub25pY2FsaXplUGF0aChzb3Vy
Y2UucGF0aCwgcGFyc2VkLnBhdGgsIG91dHB1dCwgJm91dHB1dFBhcnNlZC5wYXRoKTsKLQotICAg
IC8vIElnbm9yZSBmYWlsdXJlcyBmb3IgcXVlcnkvcmVmIHNpbmNlIHRoZSBVUkwgY2FuIHByb2Jh
Ymx5IHN0aWxsIGJlIGxvYWRlZC4KLSAgICBDYW5vbmljYWxpemVRdWVyeShzb3VyY2UucXVlcnks
IHBhcnNlZC5xdWVyeSwgY2hhcnNldENvbnZlcnRlciwgb3V0cHV0LCAmb3V0cHV0UGFyc2VkLnF1
ZXJ5KTsKLSAgICBjYW5vbmljYWxpemVGcmFnbWVudChzb3VyY2UucmVmLCBwYXJzZWQuZnJhZ21l
bnQsIG91dHB1dCwgb3V0cHV0UGFyc2VkLmZyYWdtZW50KTsKLSAgICBpZiAoc3VjY2VzcykKLSAg
ICAgICAgb3V0cHV0UGFyc2VkLnNldElubmVyVVJMU2VnbWVudHMobmV3SW5uZXJQYXJzZWQpOwot
Ci0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLWJvb2wgY2Fub25p
Y2FsaXplRmlsZVN5c3RlbVVSTChjb25zdCBjaGFyKiBzcGVjLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyKiBjaGFyc2V0Q29udmVydGVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzJiBvdXRwdXRQYXJz
ZWQpCi17Ci0gICAgcmV0dXJuIGRvQ2Fub25pY2FsaXplRmlsZVN5c3RlbVVSTDxjaGFyLCB1bnNp
Z25lZCBjaGFyPihzcGVjLCBVUkxDb21wb25lbnRTb3VyY2U8Y2hhcj4oc3BlYyksIHBhcnNlZCwg
Y2hhcnNldENvbnZlcnRlciwgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOwotfQotCi1ib29sIGNhbm9u
aWNhbGl6ZUZpbGVTeXN0ZW1VUkwoY29uc3QgVUNoYXIqIHNwZWMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNlZCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqIGNoYXJzZXRDb252ZXJ0
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRw
dXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMmIG91dHB1dFBh
cnNlZCkKLXsKLSAgICByZXR1cm4gZG9DYW5vbmljYWxpemVGaWxlU3lzdGVtVVJMPFVDaGFyLCBV
Q2hhcj4oc3BlYywgVVJMQ29tcG9uZW50U291cmNlPFVDaGFyPihzcGVjKSwgcGFyc2VkLCBjaGFy
c2V0Q29udmVydGVyLCBvdXRwdXQsIG91dHB1dFBhcnNlZCk7Ci19Ci0KLWJvb2wgUmVwbGFjZUZp
bGVTeXN0ZW1VUkwoY29uc3QgY2hhciogYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFJlcGxhY2VtZW50czxjaGFyPiYgcmVwbGFjZW1lbnRzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqIGNoYXJzZXRDb252ZXJ0ZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKQotewotICAgIFVS
TENvbXBvbmVudFNvdXJjZTxjaGFyPiBzb3VyY2UoYmFzZSk7Ci0gICAgVVJMU2VnbWVudHMgcGFy
c2VkKGJhc2VQYXJzZWQpOwotICAgIFNldHVwT3ZlcnJpZGVDb21wb25lbnRzKGJhc2UsIHJlcGxh
Y2VtZW50cywgJnNvdXJjZSwgJnBhcnNlZCk7Ci0gICAgcmV0dXJuIGRvQ2Fub25pY2FsaXplRmls
ZVN5c3RlbVVSTDxjaGFyLCB1bnNpZ25lZCBjaGFyPihiYXNlLCBzb3VyY2UsIHBhcnNlZCwgY2hh
cnNldENvbnZlcnRlciwgb3V0cHV0LCAqb3V0cHV0UGFyc2VkKTsKLX0KLQotYm9vbCBSZXBsYWNl
RmlsZVN5c3RlbVVSTChjb25zdCBjaGFyKiBiYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUmVwbGFjZW1lbnRzPFVDaGFyPiYgcmVwbGFjZW1lbnRzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqIGNoYXJzZXRDb252ZXJ0ZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKQotewotICAg
IFJhd1VSTEJ1ZmZlcjxjaGFyPiB1dGY4OwotICAgIFVSTENvbXBvbmVudFNvdXJjZTxjaGFyPiBz
b3VyY2UoYmFzZSk7Ci0gICAgVVJMU2VnbWVudHMgcGFyc2VkKGJhc2VQYXJzZWQpOwotICAgIFNl
dHVwVVRGMTZPdmVycmlkZUNvbXBvbmVudHMoYmFzZSwgcmVwbGFjZW1lbnRzLCB1dGY4LCAmc291
cmNlLCAmcGFyc2VkKTsKLSAgICByZXR1cm4gZG9DYW5vbmljYWxpemVGaWxlU3lzdGVtVVJMPGNo
YXIsIHVuc2lnbmVkIGNoYXI+KGJhc2UsIHNvdXJjZSwgcGFyc2VkLCBjaGFyc2V0Q29udmVydGVy
LCBvdXRwdXQsICpvdXRwdXRQYXJzZWQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBVUkxDYW5vbmlj
YWxpemVyCi0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gVVNFKFdURlVSTCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25GaWxldXJsLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25GaWxldXJsLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNzNhOWY2ZGQxYmVmNmE5YzJlM2I5MTcyZDQ5ZDcwNDA3ZmRkZDIyYy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi91cmwvc3JjL1VSTENhbm9uRmlsZXVybC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMjQg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA3IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
RnVuY3Rpb25zIGZvciBjYW5vbmljYWxpemluZyAiZmlsZToiIFVSTHMuCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJVUkxDYW5vbi5oIgotCi0jaW5jbHVkZSAiUmF3VVJMQnVmZmVy
LmgiCi0jaW5jbHVkZSAiVVJMQ2Fub25JbnRlcm5hbC5oIgotI2luY2x1ZGUgIlVSTEZpbGUuaCIK
LSNpbmNsdWRlICJVUkxQYXJzZUludGVybmFsLmgiCi0KLSNpZiBVU0UoV1RGVVJMKQotCi1uYW1l
c3BhY2UgV1RGIHsKLQotbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIgewotCi1uYW1lc3BhY2Ug
ewotCi0jaWYgT1MoV0lORE9XUykKLQotLy8gR2l2ZW4gYSBwb2ludGVyIGludG8gdGhlIHNwZWMs
IHRoaXMgY29waWVzIGFuZCBjYW5vbmljYWxpemVzIHRoZSBkcml2ZQotLy8gbGV0dGVyIGFuZCBj
b2xvbiB0byB0aGUgb3V0cHV0LCBpZiBvbmUgaXMgZm91bmQuIElmIHRoZXJlIGlzIG5vdCBhIGRy
aXZlCi0vLyBzcGVjLCBpdCB3b24ndCBkbyBhbnl0aGluZy4gVGhlIGluZGV4IG9mIHRoZSBuZXh0
IGNoYXJhY3RlciBpbiB0aGUgaW5wdXQKLS8vIHNwZWMgaXMgcmV0dXJuZWQgKGFmdGVyIHRoZSBj
b2xvbiB3aGVuIGEgZHJpdmUgc3BlYyBpcyBmb3VuZCwgdGhlIGJlZ2luCi0vLyBvZmZzZXQgaWYg
b25lIGlzIG5vdCkuCi10ZW1wbGF0ZTx0eXBlbmFtZSBDSEFSPgotaW50IEZpbGVEb0RyaXZlU3Bl
Yyhjb25zdCBDSEFSKiBzcGVjLCBpbnQgYmVnaW4sIGludCBlbmQsIFVSTEJ1ZmZlcjxjaGFyPiYg
b3V0cHV0KQotewotICAgIC8vIFRoZSBwYXRoIGNvdWxkIGJlIG9uZSBvZiBzZXZlcmFsIHRoaW5n
czogL2Zvby9iYXIsIGM6L2Zvby9iYXIsIC9jOi9mb28sCi0gICAgLy8gKHdpdGggYmFja3NsYXNo
ZXMgaW5zdGVhZCBvZiBzbGFzaGVzIGFzIHdlbGwpLgotICAgIGludCBudW1TbGFzaGVzID0gVVJM
UGFyc2VyOjpjb3VudENvbnNlY3V0aXZlU2xhc2hlcyhzcGVjLCBiZWdpbiwgZW5kKTsKLSAgICBp
bnQgYWZ0ZXJTbGFzaGVzID0gYmVnaW4gKyBudW1TbGFzaGVzOwotCi0gICAgaWYgKCFVUkxQYXJz
ZXI6OmRvZXNCZWdpbldpbmRvd3NEcml2ZVNwZWMoc3BlYywgYWZ0ZXJTbGFzaGVzLCBlbmQpKQot
ICAgICAgICByZXR1cm4gYmVnaW47IC8vIEhhdmVuJ3QgY29uc3VtZWQgYW55IGNoYXJhY3RlcnMK
LQotICAgIC8vIEEgZHJpdmUgc3BlYyBpcyB0aGUgc3RhcnQgb2YgYSBwYXRoLCBzbyB3ZSBuZWVk
IHRvIGFkZCBhIHNsYXNoIGZvciB0aGUKLSAgICAvLyBhdXRob3JpdHkgdGVybWluYXRvciAodHlw
aWNhbGx5IHRoZSB0aGlyZCBzbGFzaCkuCi0gICAgb3V0cHV0LmFwcGVuZCgnLycpOwotCi0gICAg
Ly8gZG9lc0JlZ2luV2luZG93c0RyaXZlU3BlYyB3aWxsIGVuc3VyZSB0aGF0IHRoZSBkcml2ZSBs
ZXR0ZXIgaXMgdmFsaWQKLSAgICAvLyBhbmQgdGhhdCBpdCBpcyBmb2xsb3dlZCBieSBhIGNvbG9u
L3BpcGUuCi0KLSAgICAvLyBOb3JtYWxpemUgV2luZG93cyBkcml2ZSBsZXR0ZXJzIHRvIHVwcGVy
Y2FzZQotICAgIGlmIChzcGVjW2FmdGVyU2xhc2hlc10gPj0gJ2EnICYmIHNwZWNbYWZ0ZXJTbGFz
aGVzXSA8PSAneicpCi0gICAgICAgIG91dHB1dC5hcHBlbmQoc3BlY1thZnRlclNsYXNoZXNdIC0g
J2EnICsgJ0EnKTsKLSAgICBlbHNlCi0gICAgICAgIG91dHB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8
Y2hhcj4oc3BlY1thZnRlclNsYXNoZXNdKSk7Ci0KLSAgICAvLyBOb3JtYWxpemUgdGhlIGNoYXJh
Y3RlciBmb2xsb3dpbmcgaXQgdG8gYSBjb2xvbiByYXRoZXIgdGhhbiBwaXBlLgotICAgIG91dHB1
dC5hcHBlbmQoJzonKTsKLSAgICByZXR1cm4gYWZ0ZXJTbGFzaGVzICsgMjsKLX0KLQotI2VuZGlm
IC8vIE9TKFdJTkRPV1MpCi0KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVu
YW1lIFVDSEFSPgotYm9vbCBkb0ZpbGVDYW5vbmljYWxpemVQYXRoKGNvbnN0IENoYXJhY3RlclR5
cGUqIHNwZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50
JiBwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0
cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCYgb3V0cHV0UGF0
aCkKLXsKLSAgICAvLyBDb3BpZXMgYW5kIG5vcm1hbGl6ZXMgdGhlICJjOiIgYXQgdGhlIGJlZ2lu
bmluZywgaWYgcHJlc2VudC4KLSAgICBvdXRwdXRQYXRoLnNldEJlZ2luKG91dHB1dC5sZW5ndGgo
KSk7Ci0gICAgaW50IGFmdGVyRHJpdmU7Ci0jaWYgT1MoV0lORE9XUykKLSAgICBhZnRlckRyaXZl
ID0gRmlsZURvRHJpdmVTcGVjKHNwZWMsIHBhdGguYmVnaW4sIHBhdGguZW5kKCksIG91dHB1dCk7
Ci0jZWxzZQotICAgIGFmdGVyRHJpdmUgPSBwYXRoLmJlZ2luKCk7Ci0jZW5kaWYKLQotICAgIC8v
IENvcGllcyB0aGUgcmVzdCBvZiB0aGUgcGF0aCwgc3RhcnRpbmcgZnJvbSB0aGUgc2xhc2ggZm9s
bG93aW5nIHRoZQotICAgIC8vIGRyaXZlIGNvbG9uIChpZiBhbnksIFdpbmRvd3Mgb25seSksIG9y
IHRoZSBmaXJzdCBzbGFzaCBvZiB0aGUgcGF0aC4KLSAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwot
ICAgIGlmIChhZnRlckRyaXZlIDwgcGF0aC5lbmQoKSkgewotICAgICAgICAvLyBVc2UgdGhlIHJl
Z3VsYXIgcGF0aCBjYW5vbmljYWxpemVyIHRvIGNhbm9uaWNhbGl6ZSB0aGUgcmVzdCBvZiB0aGUK
LSAgICAgICAgLy8gcGF0aC4gR2l2ZSBpdCBhIGZha2Ugb3V0cHV0IGNvbXBvbmVudCB0byB3cml0
ZSBpbnRvLiBEb0Nhbm9uaWNhbGl6ZUZpbGUKLSAgICAgICAgLy8gd2lsbCBjb21wdXRlIHRoZSBm
dWxsIHBhdGggY29tcG9uZW50LgotICAgICAgICBVUkxDb21wb25lbnQgc3ViUGF0aCA9IFVSTENv
bXBvbmVudDo6ZnJvbVJhbmdlKGFmdGVyRHJpdmUsIHBhdGguZW5kKCkpOwotICAgICAgICBVUkxD
b21wb25lbnQgZmFrZU91dHB1dFBhdGg7Ci0gICAgICAgIHN1Y2Nlc3MgPSBDYW5vbmljYWxpemVQ
YXRoKHNwZWMsIHN1YlBhdGgsIG91dHB1dCwgJmZha2VPdXRwdXRQYXRoKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICAvLyBObyBpbnB1dCBwYXRoLCBjYW5vbmljYWxpemUgdG8gYSBzbGFzaC4KLSAg
ICAgICAgb3V0cHV0LmFwcGVuZCgnLycpOwotICAgIH0KLQotICAgIG91dHB1dFBhdGguc2V0TGVu
Z3RoKG91dHB1dC5sZW5ndGgoKSAtIG91dHB1dFBhdGguYmVnaW4oKSk7Ci0gICAgcmV0dXJuIHN1
Y2Nlc3M7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIFVD
SEFSPgotYm9vbCBkb0Nhbm9uaWNhbGl6ZUZpbGVVUkwoY29uc3QgVVJMQ29tcG9uZW50U291cmNl
PENoYXJhY3RlclR5cGU+JiBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBVUkxTZWdtZW50cyYgcGFyc2VkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMUXVl
cnlDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVVJMU2VnbWVudHMmIG91dHB1dFBhcnNlZCkKLXsKLSAgICAvLyBUaGluZ3Mgd2UgZG9uJ3Qg
c2V0IGluIGZpbGU6IFVSTHMuCi0gICAgb3V0cHV0UGFyc2VkLnVzZXJuYW1lID0gVVJMQ29tcG9u
ZW50KCk7Ci0gICAgb3V0cHV0UGFyc2VkLnBhc3N3b3JkID0gVVJMQ29tcG9uZW50KCk7Ci0gICAg
b3V0cHV0UGFyc2VkLnBvcnQgPSBVUkxDb21wb25lbnQoKTsKLQotICAgIC8vIFNjaGVtZSAoa25v
d24sIHNvIHdlIGRvbid0IGJvdGhlciBydW5uaW5nIGl0IHRocm91Z2ggdGhlIG1vcmUKLSAgICAv
LyBjb21wbGljYXRlZCBzY2hlbWUgY2Fub25pY2FsaXplcikuCi0gICAgb3V0cHV0UGFyc2VkLnNj
aGVtZS5zZXRCZWdpbihvdXRwdXQubGVuZ3RoKCkpOwotICAgIG91dHB1dC5hcHBlbmQoImZpbGU6
Ly8iLCA3KTsKLSAgICBvdXRwdXRQYXJzZWQuc2NoZW1lLnNldExlbmd0aCg0KTsKLQotICAgIC8v
IEFwcGVuZCB0aGUgaG9zdC4gRm9yIG1hbnkgZmlsZSBVUkxzLCB0aGlzIHdpbGwgYmUgZW1wdHku
IEZvciBVTkMsIHRoaXMKLSAgICAvLyB3aWxsIGJlIHByZXNlbnQuCi0gICAgLy8gVE9ETyhicmV0
dHcpIFRoaXMgZG9lc24ndCBkbyBhbnkgY2hlY2tpbmcgZm9yIGhvc3QgbmFtZSB2YWxpZGl0eS4g
V2UKLSAgICAvLyBzaG91bGQgcHJvYmFibHkgaGFuZGxlIHZhbGlkaXR5IGNoZWNraW5nIG9mIFVO
QyBob3N0cyBkaWZmZXJlbnRseSB0aGFuCi0gICAgLy8gZm9yIHJlZ3VsYXIgSVAgaG9zdHMuCi0g
ICAgYm9vbCBzdWNjZXNzID0gY2Fub25pY2FsaXplSG9zdChzb3VyY2UuaG9zdCwgcGFyc2VkLmhv
c3QsIG91dHB1dCwgb3V0cHV0UGFyc2VkLmhvc3QpOwotICAgIHN1Y2Nlc3MgJj0gZG9GaWxlQ2Fu
b25pY2FsaXplUGF0aDxDaGFyYWN0ZXJUeXBlLCBVQ0hBUj4oc291cmNlLnBhdGgsIHBhcnNlZC5w
YXRoLCBvdXRwdXQsIG91dHB1dFBhcnNlZC5wYXRoKTsKLSAgICBDYW5vbmljYWxpemVRdWVyeShz
b3VyY2UucXVlcnksIHBhcnNlZC5xdWVyeSwgcXVlcnlDb252ZXJ0ZXIsIG91dHB1dCwgJm91dHB1
dFBhcnNlZC5xdWVyeSk7Ci0KLSAgICAvLyBJZ25vcmUgZmFpbHVyZSBmb3IgcmVmcyBzaW5jZSB0
aGUgVVJMIGNhbiBwcm9iYWJseSBzdGlsbCBiZSBsb2FkZWQuCi0gICAgY2Fub25pY2FsaXplRnJh
Z21lbnQoc291cmNlLnJlZiwgcGFyc2VkLmZyYWdtZW50LCBvdXRwdXQsIG91dHB1dFBhcnNlZC5m
cmFnbWVudCk7Ci0KLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotfSAvLyBuYW1lc3BhY2UKLQot
Ym9vbCBDYW5vbmljYWxpemVGaWxlVVJMKGNvbnN0IGNoYXIqIHNwZWMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IC8qIHNwZWNMZW5ndGggKi8sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBV
UkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpCi17Ci0gICAgcmV0dXJuIGRvQ2Fub25pY2Fs
aXplRmlsZVVSTDxjaGFyLCB1bnNpZ25lZCBjaGFyPihVUkxDb21wb25lbnRTb3VyY2U8Y2hhcj4o
c3BlYyksIHBhcnNlZCwgcXVlcnlDb252ZXJ0ZXIsIG91dHB1dCwgKm91dHB1dFBhcnNlZCk7Ci19
Ci0KLWJvb2wgQ2Fub25pY2FsaXplRmlsZVVSTChjb25zdCBVQ2hhciogc3BlYywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgLyogc3BlY0xlbmd0aCAqLywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCkKLXsKLSAgICByZXR1cm4gZG9DYW5v
bmljYWxpemVGaWxlVVJMPFVDaGFyLCBVQ2hhcj4oVVJMQ29tcG9uZW50U291cmNlPFVDaGFyPihz
cGVjKSwgcGFyc2VkLCBxdWVyeUNvbnZlcnRlciwgb3V0cHV0LCAqb3V0cHV0UGFyc2VkKTsKLX0K
LQotYm9vbCBGaWxlQ2Fub25pY2FsaXplUGF0aChjb25zdCBjaGFyKiBzcGVjLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIHBhdGgsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBVUkxDb21wb25lbnQqIG91dHB1dFBhdGgpCi17Ci0gICAgcmV0dXJuIGRvRmlsZUNh
bm9uaWNhbGl6ZVBhdGg8Y2hhciwgdW5zaWduZWQgY2hhcj4oc3BlYywgcGF0aCwgb3V0cHV0LCAq
b3V0cHV0UGF0aCk7Ci19Ci0KLWJvb2wgRmlsZUNhbm9uaWNhbGl6ZVBhdGgoY29uc3QgVUNoYXIq
IHNwZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0
aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCogb3V0cHV0UGF0aCkKLXsKLSAg
ICByZXR1cm4gZG9GaWxlQ2Fub25pY2FsaXplUGF0aDxVQ2hhciwgVUNoYXI+KHNwZWMsIHBhdGgs
IG91dHB1dCwgKm91dHB1dFBhdGgpOwotfQotCi1ib29sIFJlcGxhY2VGaWxlVVJMKGNvbnN0IGNo
YXIqIGJhc2UsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFy
c2VkLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXBsYWNlbWVudHM8Y2hhcj4mIHJlcGxh
Y2VtZW50cywKLSAgICAgICAgICAgICAgICAgICAgVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyKiBx
dWVyeUNvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRw
dXQsCi0gICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpCi17Ci0g
ICAgVVJMQ29tcG9uZW50U291cmNlPGNoYXI+IHNvdXJjZShiYXNlKTsKLSAgICBVUkxTZWdtZW50
cyBwYXJzZWQoYmFzZVBhcnNlZCk7Ci0gICAgU2V0dXBPdmVycmlkZUNvbXBvbmVudHMoYmFzZSwg
cmVwbGFjZW1lbnRzLCAmc291cmNlLCAmcGFyc2VkKTsKLSAgICByZXR1cm4gZG9DYW5vbmljYWxp
emVGaWxlVVJMPGNoYXIsIHVuc2lnbmVkIGNoYXI+KHNvdXJjZSwgcGFyc2VkLCBxdWVyeUNvbnZl
cnRlciwgb3V0cHV0LCAqb3V0cHV0UGFyc2VkKTsKLX0KLQotYm9vbCBSZXBsYWNlRmlsZVVSTChj
b25zdCBjaGFyKiBiYXNlLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYg
YmFzZVBhcnNlZCwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVwbGFjZW1lbnRzPFVDaGFy
PiYgcmVwbGFjZW1lbnRzLAotICAgICAgICAgICAgICAgICAgICBVUkxRdWVyeUNoYXJzZXRDb252
ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hh
cj4mIG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNl
ZCkKLXsKLSAgICBSYXdVUkxCdWZmZXI8Y2hhcj4gdXRmODsKLSAgICBVUkxDb21wb25lbnRTb3Vy
Y2U8Y2hhcj4gc291cmNlKGJhc2UpOwotICAgIFVSTFNlZ21lbnRzIHBhcnNlZChiYXNlUGFyc2Vk
KTsKLSAgICBTZXR1cFVURjE2T3ZlcnJpZGVDb21wb25lbnRzKGJhc2UsIHJlcGxhY2VtZW50cywg
dXRmOCwgJnNvdXJjZSwgJnBhcnNlZCk7Ci0gICAgcmV0dXJuIGRvQ2Fub25pY2FsaXplRmlsZVVS
TDxjaGFyLCB1bnNpZ25lZCBjaGFyPihzb3VyY2UsIHBhcnNlZCwgcXVlcnlDb252ZXJ0ZXIsIG91
dHB1dCwgKm91dHB1dFBhcnNlZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6
ZXIKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbkhvc3QuY3BwIGIvU291cmNlL1dU
Ri93dGYvdXJsL3NyYy9VUkxDYW5vbkhvc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA1ZWEyZjk5MDZkNjRmMWFlNDQ0ZWQwZDI5NzkzMWM2MzA2ODRlYjljLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL3VybC9z
cmMvVVJMQ2Fub25Ib3N0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM4MyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IDIwMDcgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiVVJMQ2Fub24uaCIKLQotI2luY2x1ZGUgIlJhd1VSTEJ1ZmZlci5oIgot
I2luY2x1ZGUgIlVSTENhbm9uSW50ZXJuYWwuaCIKLQotI2lmIFVTRShXVEZVUkwpCi0KLW5hbWVz
cGFjZSBXVEYgewotCi1uYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplciB7Ci0KLW5hbWVzcGFjZSB7
Ci0KLS8vIEZvciByZWZlcmVuY2UsIGhlcmUncyB3aGF0IElFIHN1cHBvcnRzOgotLy8gS2V5OiAw
IChkaXNhbGxvd2VkOiBmYWlsdXJlIGlmIHByZXNlbnQgaW4gdGhlIGlucHV0KQotLy8gICAgICAr
IChhbGxvd2VkIGVpdGhlciBlc2NhcGVkIG9yIHVuZXNjYXBlZCwgYW5kIHVubW9kaWZpZWQpCi0v
LyAgICAgIFUgKGFsbG93ZWQgZXNjYXBlZCBvciB1bmVzY2FwZWQgYnV0IGFsd2F5cyB1bmVzY2Fw
ZWQgaWYgcHJlc2VudCBpbgotLy8gICAgICAgICBlc2NhcGVkIGZvcm0pCi0vLyAgICAgIEUgKGFs
bG93ZWQgZXNjYXBlZCBvciB1bmVzY2FwZWQgYnV0IGFsd2F5cyBlc2NhcGVkIGlmIHByZXNlbnQg
aW4KLS8vICAgICAgICAgdW5lc2NhcGVkIGZvcm0pCi0vLyAgICAgICUgKG9ubHkgYWxsb3dlZCBl
c2NhcGVkIGluIHRoZSBpbnB1dCwgd2lsbCBiZSB1bm1vZGlmaWVkKS4KLS8vICAgICAgSSBsZWZ0
IGJsYW5rIGFscGhhIG51bWVyaWMgY2hhcmFjdGVycy4KLS8vCi0vLyAgICAwMCAwMSAwMiAwMyAw
NCAwNSAwNiAwNyAwOCAwOSAwYSAwYiAwYyAwZCAwZSAwZgotLy8gICAgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIDAgICAwICBFICBFICBFICBFICBF
ICBFICBFICBFICBFICBFICBFICBFICBFICBFICBFCi0vLyAxICAgRSAgRSAgRSAgRSAgRSAgRSAg
RSAgRSAgRSAgRSAgRSAgRSAgRSAgRSAgRSAgRQotLy8gMiAgIEUgICsgIEUgIEUgICsgIEUgICsg
ICsgICsgICsgICsgICsgICsgIFUgIFUgIDAKLS8vIDMgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAlICAlICBFICArICBFICAwICA8LS0gVGhvc2UgYXJlICA6IDsgPCA9ID4gPwotLy8g
NCAgICUKLS8vIDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVICAwICBVICBV
ICBVICA8LS0gVGhvc2UgYXJlICBbIFwgXSBeIF8KLS8vIDYgICBFICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8LS0gVGhhdCdzICBgCi0vLyA3ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRSAgRSAgRSAgVSAgRSAgPC0tIFRob3NlIGFyZSB7
IHwgfSB+IChVTlBSSU5UQUJMRSkKLS8vCi0vLyBOT1RFOiBJIGRpZG4ndCBhY3R1YWxseSB0ZXN0
IGFsbCB0aGUgY29udHJvbCBjaGFyYWN0ZXJzLiBTb21lIG1heSBiZQotLy8gZGlzYWxsb3dlZCBp
biB0aGUgaW5wdXQsIGJ1dCB0aGV5IGFyZSBhbGwgYWNjZXB0ZWQgZXNjYXBlZCBleGNlcHQgZm9y
IDAuCi0vLyBJIGFsc28gZGlkbid0IHRlc3QgaWYgY2hhcmFjdGVycyBhZmZlY3RpbmcgSFRNTCBw
YXJzaW5nIGFyZSBhbGxvd2VkCi0vLyB1bmVzY2FwZWQsIGVnLiAoIikgb3IgKCMpLCB3aGljaCB3
b3VsZCBpbmRpY2F0ZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoLgotLy8gU3VycHJpc2luZ2x5
LCBzcGFjZSBpcyBhY2NlcHRlZCBpbiB0aGUgaW5wdXQgYW5kIGFsd2F5cyBlc2NhcGVkLgotCi0v
LyBUaGlzIHRhYmxlIGxpc3RzIHRoZSBjYW5vbmljYWwgdmVyc2lvbiBvZiBhbGwgY2hhcmFjdGVy
cyB3ZSBhbGxvdyBpbiB0aGUKLS8vIGlucHV0LCB3aXRoIDAgaW5kaWNhdGluZyBpdCBpcyBkaXNh
bGxvd2VkLiBXZSB1c2UgdGhlIG1hZ2ljIGtFc2NhcGVkSG9zdENoYXIKLS8vIHZhbHVlIHRvIGlu
ZGljYXRlIHRoYXQgdGhpcyBjaGFyYWN0ZXIgc2hvdWxkIGJlIGVzY2FwZWQuIFdlIGFyZSBhIGxp
dHRsZSBtb3JlCi0vLyByZXN0cmljdGl2ZSB0aGFuIElFLCBidXQgbGVzcyByZXN0cmljdGl2ZSB0
aGFuIEZpcmVmb3guCi0vLwotLy8gTm90ZSB0aGF0IHdlIGRpc2FsbG93IHRoZSAlIGNoYXJhY3Rl
ci4gV2Ugd2lsbCBhbGxvdyBpdCB3aGVuIHBhcnQgb2YgYW4KLS8vIGVzY2FwZSBzZXF1ZW5jZSwg
b2YgY291cnNlLCBidXQgdGhpcyBkaXNhbGxvd3MgIiUyNSIuIEV2ZW4gdGhvdWdoIElFIGFsbG93
cwotLy8gaXQsIGFsbG93aW5nIGl0IHdvdWxkIHB1dCB1cyBpbiBhIGZ1bm55IHN0YXRlLiBJZiB0
aGVyZSB3YXMgYW4gaW52YWxpZAotLy8gZXNjYXBlIHNlcXVlbmNlIGxpa2UgIiV6eiIsIHdlJ2xs
IGFkZCAiJTI1enoiIHRvIHRoZSBvdXRwdXQgYW5kIGZhaWwuCi0vLyBBbGxvd2luZyBwZXJjZW50
cyBtZWFucyB3ZSdsbCBzdWNjZWVkIGEgc2Vjb25kIHRpbWUsIHNvIHZhbGlkaXR5IHdvdWxkIGNo
YW5nZQotLy8gYmFzZWQgb24gaG93IG1hbnkgdGltZXMgeW91IHJ1biB0aGUgY2Fub25pY2FsaXpl
ci4gV2UgcHJlZmVyIHRvIGFsd2F5cyByZXBvcnQKLS8vIHRoZSBzYW1lIHZhaWxpZGl0eSwgc28g
cmVqZWN0IHRoaXMuCi1jb25zdCB1bnNpZ25lZCBjaGFyIGtFc2MgPSAweGZmOwotY29uc3QgdW5z
aWduZWQgY2hhciBrSG9zdENoYXJMb29rdXBbMHg4MF0gPSB7Ci0gICAgMCwgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAg
MCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLAotLy8gICcgJyAgICEgICAgICIgICAgICMgICAgICQgICAgICUgICAgICYgICAgICcgICAg
ICggICAgICkgICAgICogICAgICsgICAgICwgICAgIC0gICAgIC4gICAgIC8KLSAgICBrRXNjLCBr
RXNjLCBrRXNjLCBrRXNjLCBrRXNjLCAgIDAsICBrRXNjLCBrRXNjLCBrRXNjLCBrRXNjLCBrRXNj
LCAgJysnLCBrRXNjLCAgJy0nLCAgJy4nLCAgIDAsCi0vLyAgIDAgICAgMSAgICAyICAgIDMgICAg
NCAgICA1ICAgIDYgICAgNyAgICA4ICAgIDkgICAgOiAgICA7ICAgIDwgICAgPSAgICA+ICAgID8K
LSAgICAnMCcsICAnMScsICAnMicsICAnMycsICAnNCcsICAnNScsICAnNicsICAnNycsICAnOCcs
ICAnOScsICAnOicsICAgMCAsIGtFc2MsIGtFc2MsIGtFc2MsICAgMCAsCi0vLyAgIEAgICAgICBB
ICAgICBCICAgICBDICAgICBEICAgICBFICAgICBGICAgICBHICAgICBIICAgICBJICAgICBKICAg
ICBLICAgICBMICAgICBNICAgICBOICAgICBPCi0gICAga0VzYywgICdhJywgICdiJywgICdjJywg
ICdkJywgICdlJywgICdmJywgICdnJywgICdoJywgICdpJywgICdqJywgICdrJywgICdsJywgICdt
JywgICduJywgICdvJywKLS8vICAgUCAgICAgUSAgICAgUiAgICAgUyAgICAgVCAgICAgVSAgICAg
ViAgICAgVyAgICAgWCAgICAgWSAgICAgWiAgICAgWyAgICAgXCAgICAgXSAgICAgXiAgICAgXwot
ICAgICdwJywgICdxJywgICdyJywgICdzJywgICd0JywgICd1JywgICd2JywgICd3JywgICd4Jywg
ICd5JywgICd6JywgICdbJywgICAwICwgICddJywgICAwICwgICdfJywKLS8vICAgYCAgICAgIGEg
ICAgIGIgICAgIGMgICAgIGQgICAgIGUgICAgIGYgICAgIGcgICAgIGggICAgIGkgICAgIGogICAg
IGsgICAgIGwgICAgIG0gICAgIG4gICAgIG8KLSAgICBrRXNjLCAgJ2EnLCAgJ2InLCAgJ2MnLCAg
J2QnLCAgJ2UnLCAgJ2YnLCAgJ2cnLCAgJ2gnLCAgJ2knLCAgJ2onLCAgJ2snLCAgJ2wnLCAgJ20n
LCAgJ24nLCAgJ28nLAotLy8gICBwICAgICBxICAgICByICAgICBzICAgICB0ICAgICB1ICAgICB2
ICAgICB3ICAgICB4ICAgICB5ICAgICB6ICAgICB7ICAgICB8ICAgICB9ICAgICB+Ci0gICAgJ3An
LCAgJ3EnLCAgJ3InLCAgJ3MnLCAgJ3QnLCAgJ3UnLCAgJ3YnLCAgJ3cnLCAgJ3gnLCAgJ3knLCAg
J3onLCBrRXNjLCBrRXNjLCBrRXNjLCAgIDAgLCAgIDAgfTsKLQotdHlwZWRlZiBSYXdVUkxCdWZm
ZXI8Y2hhcj4gU3RhY2tCdWZmZXI7Ci10eXBlZGVmIFJhd1VSTEJ1ZmZlcjxVQ2hhcj4gU3RhY2tC
dWZmZXJXOwotCi0vLyBTY2FucyBhIGhvc3QgbmFtZSBhbmQgZmlsbHMgaW4gdGhlIG91dHB1dCBm
bGFncyBhY2NvcmRpbmcgdG8gd2hhdCB3ZSBmaW5kLgotLy8gfGhhc05vbkFTQ0lJfCB3aWxsIGJl
IHRydWUgaWYgdGhlcmUgYXJlIGFueSBub24tNy1iaXQgY2hhcmFjdGVycywgYW5kCi0vLyB8aGFz
RXNjYXBlZHwgd2lsbCBiZSB0cnVlIGlmIHRoZXJlIGlzIGEgcGVyY2VudCBzaWduLgotdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgVUNIQVI+Ci12b2lkIHNjYW5Ib3N0
bmFtZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGhvc3Qs
IGJvb2wmIGhhc05vbkFTQ0lJLCBib29sJiBoYXNFc2NhcGVkKQotewotICAgIGludCBlbmQgPSBo
b3N0LmVuZCgpOwotICAgIGhhc05vbkFTQ0lJID0gZmFsc2U7Ci0gICAgaGFzRXNjYXBlZCA9IGZh
bHNlOwotICAgIGZvciAoaW50IGkgPSBob3N0LmJlZ2luKCk7IGkgPCBlbmQ7ICsraSkgewotICAg
ICAgICBpZiAoc3RhdGljX2Nhc3Q8VUNIQVI+KHNwZWNbaV0pID49IDB4ODApCi0gICAgICAgICAg
ICBoYXNOb25BU0NJSSA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKHNwZWNbaV0gPT0gJyUnKQot
ICAgICAgICAgICAgaGFzRXNjYXBlZCA9IHRydWU7Ci0gICAgfQotfQotCi0vLyBDYW5vbmljYWxp
emVzIGEgaG9zdCBuYW1lIHRoYXQgaXMgZW50aXJlbHkgOC1iaXQgY2hhcmFjdGVycyAoZXZlbiB0
aG91Z2gKLS8vIHRoZSB0eXBlIGhvbGRpbmcgdGhlbSBtYXkgYmUgMTYgYml0cy4gRXNjYXBlZCBj
aGFyYWN0ZXJzIHdpbGwgYmUgdW5lc2NhcGVkLgotLy8gTm9uLTctYml0IGNoYXJhY3RlcnMgKGZv
ciBleGFtcGxlLCBVVEYtOCkgd2lsbCBiZSBwYXNzZWQgdW5jaGFuZ2VkLgotLy8KLS8vIFRoZSB8
Kmhhc05vbkFTQ0lJfCBmbGFnIHdpbGwgYmUgdHJ1ZSBpZiB0aGVyZSBhcmUgbm9uLTctYml0IGNo
YXJhY3RlcnMgaW4KLS8vIHRoZSBvdXRwdXQuCi0vLwotLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2Vk
IGluIHR3byBzaXR1YXRpb25zOgotLy8KLS8vICAqIFdoZW4gdGhlIGNhbGxlciBrbm93cyB0aGVy
ZSBpcyBubyBub24tQVNDSUkgb3IgcGVyY2VudCBlc2NhcGVkCi0vLyAgICBjaGFyYWN0ZXJzLiBU
aGlzIGlzIHdoYXQgRG9Ib3N0IGRvZXMuIFRoZSByZXN1bHQgd2lsbCBiZSBhIGNvbXBsZXRlbHkK
LS8vICAgIGNhbm9uaWNhbGl6ZWQgaG9zdCBzaW5jZSB3ZSBrbm93IG5vdGhpbmcgd2VpcmQgY2Fu
IGhhcHBlbiAoZXNjYXBlZAotLy8gICAgY2hhcmFjdGVycyBjb3VsZCBiZSB1bmVzY2FwZWQgdG8g
bm9uLTctYml0LCBzbyB0aGV5IGhhdmUgdG8gYmUgdHJlYXRlZAotLy8gICAgd2l0aCBzdXNwaWNp
b24gYXQgdGhpcyBwb2ludCkuIEl0IGRvZXMgbm90IHVzZSB0aGUgfGhhc05vbkFTQ0lJfCBmbGFn
LgotLy8KLS8vICAqIFdoZW4gdGhlIGNhbGxlciBoYXMgYW4gOC1iaXQgc3RyaW5nIHRoYXQgbWF5
IG5lZWQgdW5lc2NhcGluZy4KLS8vICAgIGRvQ29tcGxleEhvc3QgY2FsbHMgdXMgdGhpcyBzaXR1
YXRpb24gdG8gZG8gdW5lc2NhcGluZyBhbmQgdmFsaWRhdGlvbi4KLS8vICAgIEFmdGVyIHRoaXMs
IGl0IG1heSBkbyBvdGhlciBJRE4gb3BlcmF0aW9ucyBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9m
IHRoZQotLy8gICAgfCpoYXNOb25BU0NJSXwgZmxhZy4KLS8vCi0vLyBUaGUgcmV0dXJuIHZhbHVl
IGluZGljYXRlcyBpZiB0aGUgb3V0cHV0IGlzIGEgcG90ZW50aWFsbHkgdmFsaWQgaG9zdCBuYW1l
LgotdGVtcGxhdGU8dHlwZW5hbWUgSU5DSEFSLCB0eXBlbmFtZSBPVVRDSEFSPgotYm9vbCBkb1Np
bXBsZUhvc3QoY29uc3QgSU5DSEFSKiBob3N0LCBpbnQgaG9zdExlbmd0aCwgVVJMQnVmZmVyPE9V
VENIQVI+JiBvdXRwdXQsIGJvb2wmIGhhc05vbkFTQ0lJKQotewotICAgIGhhc05vbkFTQ0lJID0g
ZmFsc2U7Ci0KLSAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgaG9zdExlbmd0aDsgKytpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHNvdXJjZSA9IGhvc3RbaV07
Ci0gICAgICAgIGlmIChzb3VyY2UgPT0gJyUnKSB7Ci0gICAgICAgICAgICAvLyBVbmVzY2FwZSBm
aXJzdCwgaWYgcG9zc2libGUuCi0gICAgICAgICAgICAvLyBTb3VyY2Ugd2lsbCBiZSB1c2VkIG9u
bHkgaWYgZGVjb2RlIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4KLSAgICAgICAgICAgIGlmICgh
RGVjb2RlRXNjYXBlZChob3N0LCAmaSwgaG9zdExlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPigmc291cmNlKSkpIHsK
LSAgICAgICAgICAgICAgICAvLyBJbnZhbGlkIGVzY2FwZWQgY2hhcmFjdGVyLiBUaGVyZSBpcyBu
b3RoaW5nIHRoYXQgY2FuIG1ha2UgdGhpcwotICAgICAgICAgICAgICAgIC8vIGhvc3QgdmFsaWQu
IFdlIGFwcGVuZCBhbiBlc2NhcGVkIHBlcmNlbnQgc28gdGhlIFVSTCBsb29rcyByZWFzb25hYmxl
Ci0gICAgICAgICAgICAgICAgLy8gYW5kIG1hcmsgYXMgZmFpbGVkLgotICAgICAgICAgICAgICAg
IGFwcGVuZFVSTEVzY2FwZWRDaGFyYWN0ZXIoJyUnLCBvdXRwdXQpOwotICAgICAgICAgICAgICAg
IHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzb3VyY2UgPCAweDgwKSB7Ci0gICAgICAgICAg
ICAvLyBXZSBoYXZlIEFTQ0lJIGlucHV0LCB3ZSBjYW4gdXNlIG91ciBsb29rdXAgdGFibGUuCi0g
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHJlcGxhY2VtZW50ID0ga0hvc3RDaGFyTG9va3VwW3Nv
dXJjZV07Ci0gICAgICAgICAgICBpZiAoIXJlcGxhY2VtZW50KSB7Ci0gICAgICAgICAgICAgICAg
Ly8gSW52YWxpZCBjaGFyYWN0ZXIsIGFkZCBpdCBhcyBwZXJjZW50LWVzY2FwZWQgYW5kIG1hcmsg
YXMgZmFpbGVkLgotICAgICAgICAgICAgICAgIGFwcGVuZFVSTEVzY2FwZWRDaGFyYWN0ZXIoc291
cmNlLCBvdXRwdXQpOwotICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAocmVwbGFjZW1lbnQgPT0ga0VzYykgewotICAgICAgICAgICAgICAgIC8v
IFRoaXMgY2hhcmFjdGVyIGlzIHZhbGlkIGJ1dCBzaG91bGQgYmUgZXNjYXBlZC4KLSAgICAgICAg
ICAgICAgICBhcHBlbmRVUkxFc2NhcGVkQ2hhcmFjdGVyKHNvdXJjZSwgb3V0cHV0KTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gQ29tbW9uIGNhc2UsIHRoZSBnaXZl
biBjaGFyYWN0ZXIgaXMgdmFsaWQgaW4gYSBob3N0bmFtZSwgdGhlIGxvb2t1cAotICAgICAgICAg
ICAgICAgIC8vIHRhYmxlIHRlbGxzIHVzIHRoZSBjYW5vbmljYWwgcmVwcmVzZW50YXRpb24gb2Yg
dGhhdCBjaGFyYWN0ZXIgKGxvd2VyCi0gICAgICAgICAgICAgICAgLy8gY2FzZWQpLgotICAgICAg
ICAgICAgICAgIG91dHB1dC5hcHBlbmQocmVwbGFjZW1lbnQpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gSXQncyBhIG5vbi1hc2NpaSBjaGFyLiBKdXN0
IHB1c2ggaXQgdG8gdGhlIG91dHB1dC4KLSAgICAgICAgICAgIC8vIEluIGNhc2Ugd2hlcmUgd2Ug
aGF2ZSBVQ2hhciBpbnB1dCwgYW5kIGNoYXIgb3V0cHV0IGl0J3Mgc2FmZSB0bwotICAgICAgICAg
ICAgLy8gY2FzdCBVQ2hhci0+Y2hhciBvbmx5IGlmIGlucHV0IHN0cmluZyB3YXMgY29udmVydGVk
IHRvIEFTQ0lJLgotICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChzdGF0aWNfY2FzdDxPVVRDSEFS
Pihzb3VyY2UpKTsKLSAgICAgICAgICAgIGhhc05vbkFTQ0lJID0gdHJ1ZTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiBzdWNjZXNzOwotfQotCi0vLyBDYW5vbmljYWxpemVzIGEgaG9z
dCB0aGF0IHJlcXVpcmVzIElETiBjb252ZXJzaW9uLiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcwot
Ym9vbCBkb0lETkhvc3QoY29uc3QgVUNoYXIqIHNyYywgaW50IHNvdXJjZUxlbmd0aCwgVVJMQnVm
ZmVyPGNoYXI+JiBvdXRwdXQpCi17Ci0gICAgLy8gV2UgbmVlZCB0byBlc2NhcGUgVVJMIGJlZm9y
ZSBkb2luZyBJRE4gY29udmVyc2lvbiwgc2luY2UgcHVuaWNvZGUgc3RyaW5ncwotICAgIC8vIGNh
bm5vdCBiZSBlc2NhcGVkIGFmdGVyIHRoZXkgYXJlIGNyZWF0ZWQuCi0gICAgUmF3VVJMQnVmZmVy
PFVDaGFyPiB1cmxFc2NhcGVkSG9zdDsKLSAgICBib29sIGhhc05vbkFTQ0lJOwotICAgIGRvU2lt
cGxlSG9zdChzcmMsIHNvdXJjZUxlbmd0aCwgdXJsRXNjYXBlZEhvc3QsIGhhc05vbkFTQ0lJKTsK
LQotICAgIFN0YWNrQnVmZmVyVyB3aWRlT3V0cHV0OwotICAgIGlmICghSUROVG9BU0NJSSh1cmxF
c2NhcGVkSG9zdC5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgIHVybEVzY2FwZWRIb3N0Lmxl
bmd0aCgpLAotICAgICAgICAgICAgICAgICAgICB3aWRlT3V0cHV0KSkgewotICAgICAgICAvLyBT
b21lIGVycm9yLCBnaXZlIHVwLiBUaGlzIHdpbGwgd3JpdGUgc29tZSByZWFzb25hYmxlIGxvb2tp
bmcKLSAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0cmluZyB0byB0aGUgb3V0cHV0
LgotICAgICAgICBBcHBlbmRJbnZhbGlkTmFycm93U3RyaW5nKHNyYywgMCwgc291cmNlTGVuZ3Ro
LCBvdXRwdXQpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gTm93IHdl
IGNoZWNrIHRoZSBBU0NJSSBvdXRwdXQgbGlrZSBhIG5vcm1hbCBob3N0LiBJdCB3aWxsIGFsc28g
aGFuZGxlCi0gICAgLy8gdW5lc2NhcGluZy4gQWx0aG91Z2ggd2UgdW5lc2NhcGVkIGV2ZXJ5dGhp
bmcgYmVmb3JlIHRoaXMgZnVuY3Rpb24gY2FsbCwgaWYKLSAgICAvLyBzb21lYm9keSBkb2VzICUw
MCBhcyBmdWxsd2lkdGgsIElDVSB3aWxsIGNvbnZlcnQgdGhpcyB0byBBU0NJSS4KLSAgICBib29s
IHN1Y2Nlc3MgPSBkb1NpbXBsZUhvc3Qod2lkZU91dHB1dC5kYXRhKCksIHdpZGVPdXRwdXQubGVu
Z3RoKCksIG91dHB1dCwgaGFzTm9uQVNDSUkpOwotICAgIEFTU0VSVCghaGFzTm9uQVNDSUkpOwot
ICAgIHJldHVybiBzdWNjZXNzOwotfQotCi0vLyA4LWJpdCBjb252ZXJ0IGhvc3QgdG8gaXRzIEFT
Q0lJIHZlcnNpb246IHRoaXMgY29udmVydHMgdGhlIFVURi04IGlucHV0IHRvCi0vLyBVVEYtMTYu
IFRoZSBoYXNFc2NhcGVkIGZsYWcgc2hvdWxkIGJlIHNldCBpZiB0aGUgaW5wdXQgc3RyaW5nIHJl
cXVpcmVzCi0vLyB1bmVzY2FwaW5nLgotYm9vbCBkb0NvbXBsZXhIb3N0KGNvbnN0IGNoYXIqIGhv
c3QsIGludCBob3N0TGVuZ3RoLCBib29sIGhhc05vbkFTQ0lJLCBib29sIGhhc0VzY2FwZWQsIFVS
TEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQotewotICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgcG9zaXRp
b24gaW4gdGhlIG91dHB1dC4gV2UgbWF5IHdyaXRlIHN0dWZmIGFuZCByZXdpbmQgaXQKLSAgICAv
LyBiZWxvdywgc28gd2UgbmVlZCB0byBrbm93IHdoZXJlIHRvIHJld2luZCB0by4KLSAgICBpbnQg
YmVnaW5MZW5ndGggPSBvdXRwdXQubGVuZ3RoKCk7Ci0KLSAgICAvLyBQb2ludHMgdG8gdGhlIFVU
Ri04IGRhdGEgd2Ugd2FudCB0byBjb252ZXJ0LiBUaGlzIHdpbGwgZWl0aGVyIGJlIHRoZQotICAg
IC8vIGlucHV0IG9yIHRoZSB1bmVzY2FwZWQgdmVyc2lvbiB3cml0dGVuIHRvIHxvdXRwdXR8IGlm
IG5lY2Vzc2FyeS4KLSAgICBjb25zdCBjaGFyKiB1dGY4U291cmNlOwotICAgIGludCB1dGY4U291
cmNlTGVuZ3RoOwotICAgIGlmIChoYXNFc2NhcGVkKSB7Ci0gICAgICAgIC8vIFVuZXNjYXBlIGJl
Zm9yZSBjb252ZXJ0aW5nIHRvIFVURi0xNiBmb3IgSUROLiBXZSB3cml0ZSB0aGlzIGludG8gdGhl
Ci0gICAgICAgIC8vIG91dHB1dCBiZWNhdXNlIGl0IG1vc3QgbGlrZWx5IGRvZXMgbm90IHJlcXVp
cmUgSUROaXphdGlvbiwgYW5kIHdlIGNhbgotICAgICAgICAvLyBzYXZlIGFub3RoZXIgaHVnZSBz
dGFjayBidWZmZXIuIEl0IHdpbGwgYmUgcmVwbGFjZWQgYmVsb3cgaWYgaXQgcmVxdWlyZXMKLSAg
ICAgICAgLy8gSUROLiBUaGlzIHdpbGwgYWxzbyB1cGRhdGUgb3VyIG5vbi1BU0NJSSBmbGFnIHNv
IHdlIGtub3cgd2hldGhlciB0aGUKLSAgICAgICAgLy8gdW5lc2NhcGVkIGlucHV0IHJlcXVpcmVz
IElETi4KLSAgICAgICAgaWYgKCFkb1NpbXBsZUhvc3QoaG9zdCwgaG9zdExlbmd0aCwgb3V0cHV0
LCBoYXNOb25BU0NJSSkpIHsKLSAgICAgICAgICAgIC8vIEVycm9yIHdpdGggc29tZSBlc2NhcGUg
c2VxdWVuY2UuIFdlJ2xsIGNhbGwgdGhlIGN1cnJlbnQgb3V0cHV0Ci0gICAgICAgICAgICAvLyBj
b21wbGV0ZS4gZG9TaW1wbGVIb3N0IHdpbGwgaGF2ZSB3cml0dGVuIHNvbWUgInJlYXNvbmFibGUi
IG91dHB1dC4KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIFVuZXNjYXBpbmcgbWF5IGhhdmUgbGVmdCB1cyB3aXRoIEFTQ0lJIGlucHV0LCBpbiB3aGlj
aCBjYXNlIHRoZQotICAgICAgICAvLyB1bmVzY2FwZWQgdmVyc2lvbiB3ZSB3cm90ZSB0byBvdXRw
dXQgaXMgY29tcGxldGUuCi0gICAgICAgIGlmICghaGFzTm9uQVNDSUkpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgICAgICAvLyBTYXZlIHRoZSBwb2ludGVyIGludG8gdGhlIGRhdGEg
d2FzIGp1c3QgY29udmVydGVkIChpdCBtYXkgYmUgYXBwZW5kZWQgdG8KLSAgICAgICAgLy8gb3Ro
ZXIgZGF0YSBpbiB0aGUgb3V0cHV0IGJ1ZmZlcikuCi0gICAgICAgIHV0ZjhTb3VyY2UgPSAmb3V0
cHV0LmRhdGEoKVtiZWdpbkxlbmd0aF07Ci0gICAgICAgIHV0ZjhTb3VyY2VMZW5ndGggPSBvdXRw
dXQubGVuZ3RoKCkgLSBiZWdpbkxlbmd0aDsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBXZSBk
b24ndCBuZWVkIHRvIHVuZXNjYXBlLCB1c2UgaW5wdXQgZm9yIElETml6YXRpb24gbGF0ZXIuIChX
ZSBrbm93IHRoZQotICAgICAgICAvLyBpbnB1dCBoYXMgbm9uLUFTQ0lJLCBvciB0aGUgc2ltcGxl
IHZlcnNpb24gd291bGQgaGF2ZSBiZWVuIGNhbGxlZAotICAgICAgICAvLyBpbnN0ZWFkIG9mIHVz
LikKLSAgICAgICAgdXRmOFNvdXJjZSA9IGhvc3Q7Ci0gICAgICAgIHV0ZjhTb3VyY2VMZW5ndGgg
PSBob3N0TGVuZ3RoOwotICAgIH0KLQotICAgIC8vIE5vbi1BU0NJSSBpbnB1dCByZXF1aXJlcyBJ
RE4sIGNvbnZlcnQgdG8gVVRGLTE2IGFuZCBkbyB0aGUgSUROIGNvbnZlcnNpb24uCi0gICAgLy8g
QWJvdmUsIHdlIG1heSBoYXZlIHVzZWQgdGhlIG91dHB1dCB0byB3cml0ZSB0aGUgdW5lc2NhcGVk
IHZhbHVlcyB0bywgc28KLSAgICAvLyB3ZSBoYXZlIHRvIHJld2luZCBpdCB0byB3aGVyZSB3ZSBz
dGFydGVkIGFmdGVyIHdlIGNvbnZlcnQgaXQgdG8gVVRGLTE2LgotICAgIFN0YWNrQnVmZmVyVyB1
dGYxNjsKLSAgICBpZiAoIUNvbnZlcnRVVEY4VG9VVEYxNih1dGY4U291cmNlLCB1dGY4U291cmNl
TGVuZ3RoLCB1dGYxNikpIHsKLSAgICAgICAgLy8gSW4gdGhpcyBlcnJvciBjYXNlLCB0aGUgaW5w
dXQgbWF5IG9yIG1heSBub3QgYmUgdGhlIG91dHB1dC4KLSAgICAgICAgU3RhY2tCdWZmZXIgdXRm
ODsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1dGY4U291cmNlTGVuZ3RoOyBpKyspCi0g
ICAgICAgICAgICB1dGY4LmFwcGVuZCh1dGY4U291cmNlW2ldKTsKLSAgICAgICAgb3V0cHV0LnNl
dExlbmd0aChiZWdpbkxlbmd0aCk7Ci0gICAgICAgIEFwcGVuZEludmFsaWROYXJyb3dTdHJpbmco
dXRmOC5kYXRhKCksIDAsIHV0ZjgubGVuZ3RoKCksIG91dHB1dCk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgb3V0cHV0LnNldExlbmd0aChiZWdpbkxlbmd0aCk7Ci0KLSAgICAv
LyBUaGlzIHdpbGwgY2FsbCBkb1NpbXBsZUhvc3Qgd2hpY2ggd2lsbCBkbyBub3JtYWwgQVNDSUkg
Y2Fub25pY2FsaXphdGlvbgotICAgIC8vIGFuZCBhbHNvIGNoZWNrIGZvciBJUCBhZGRyZXNzZXMg
aW4gdGhlIG91dHB0LgotICAgIHJldHVybiBkb0lETkhvc3QodXRmMTYuZGF0YSgpLCB1dGYxNi5s
ZW5ndGgoKSwgb3V0cHV0KTsKLX0KLQotLy8gVVRGLTE2IGNvbnZlcnQgaG9zdCB0byBpdHMgQVND
SUkgdmVyc2lvbi4gVGhlIHNldCB1cCBpcyBhbHJlYWR5IHJlYWR5IGZvcgotLy8gdGhlIGJhY2tl
bmQsIHNvIHdlIGp1c3QgcGFzcyB0aHJvdWdoLiBUaGUgaGFzRXNjYXBlZCBmbGFnIHNob3VsZCBi
ZSBzZXQgaWYKLS8vIHRoZSBpbnB1dCBzdHJpbmcgcmVxdWlyZXMgdW5lc2NhcGluZy4KLWJvb2wg
ZG9Db21wbGV4SG9zdChjb25zdCBVQ2hhciogaG9zdCwgaW50IGhvc3RMZW5ndGgsIGJvb2wgaGFz
Tm9uQVNDSUksIGJvb2wgaGFzRXNjYXBlZCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCi17Ci0g
ICAgaWYgKGhhc0VzY2FwZWQpIHsKLSAgICAgICAgLy8gWWlrZXMsIHdlIGhhdmUgZXNjYXBlZCBj
aGFyYWN0ZXJzIHdpdGggd2lkZSBpbnB1dC4gVGhlIGVzY2FwZWQKLSAgICAgICAgLy8gY2hhcmFj
dGVycyBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgVVRGLTguIFRvIHNvbHZlIHRoaXMgcHJvYmxl
bSwKLSAgICAgICAgLy8gd2UgY29udmVydCB0byBVVEYtOCwgdW5lc2NhcGUsIHRoZW4gY29udmVy
dCBiYWNrIHRvIFVURi0xNiBmb3IgSUROLgotICAgICAgICAvLwotICAgICAgICAvLyBXZSBkb24n
dCBib3RoZXIgdG8gb3B0aW1pemUgdGhlIGNvbnZlcnNpb24gaW4gdGhlIEFTQ0lJIGNhc2UgKHdo
aWNoCi0gICAgICAgIC8vICpjb3VsZCoganVzdCBiZSBhIGNvcHkpIGFuZCB1c2UgdGhlIFVURi04
IHBhdGgsIGJlY2F1c2UgaXQgc2hvdWxkIGJlCi0gICAgICAgIC8vIHZlcnkgcmFyZSB0aGF0IGhv
c3QgbmFtZXMgaGF2ZSBlc2NhcGVkIGNoYXJhY3RlcnMsIGFuZCBpdCBpcyByZWxhdGl2ZWx5Ci0g
ICAgICAgIC8vIGZhc3QgdG8gZG8gdGhlIGNvbnZlcnNpb24gYW55d2F5LgotICAgICAgICBTdGFj
a0J1ZmZlciB1dGY4OwotICAgICAgICBpZiAoIUNvbnZlcnRVVEYxNlRvVVRGOChob3N0LCBob3N0
TGVuZ3RoLCB1dGY4KSkgewotICAgICAgICAgICAgQXBwZW5kSW52YWxpZE5hcnJvd1N0cmluZyho
b3N0LCAwLCBob3N0TGVuZ3RoLCBvdXRwdXQpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gT25jZSB3ZSBjb252ZXJ0IHRvIFVURi04LCB3ZSBjYW4g
dXNlIHRoZSA4LWJpdCB2ZXJzaW9uIG9mIHRoZSBjb21wbGV4Ci0gICAgICAgIC8vIGhvc3QgaGFu
ZGxpbmcgY29kZSBhYm92ZS4KLSAgICAgICAgcmV0dXJuIGRvQ29tcGxleEhvc3QodXRmOC5kYXRh
KCksIHV0ZjgubGVuZ3RoKCksIGhhc05vbkFTQ0lJLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoYXNFc2NhcGVkLCBvdXRwdXQpOwotICAgIH0KLQotICAgIC8vIE5vIHVuZXNjYXBpbmcg
bmVjZXNzYXJ5LCB3ZSBjYW4gc2FmZWx5IHBhc3MgdGhlIGlucHV0IHRvIElDVS4gVGhpcwotICAg
IC8vIGZ1bmN0aW9uIHdpbGwgb25seSBnZXQgY2FsbGVkIGlmIHdlIGVpdGhlciBoYXZlIGVzY2Fw
ZWQgb3Igbm9uLWFzY2lpCi0gICAgLy8gaW5wdXQsIHNvIGl0J3Mgc2FmZSB0byBqdXN0IHVzZSBJ
Q1Ugbm93LiBFdmVuIGlmIHRoZSBpbnB1dCBpcyBBU0NJSSwKLSAgICAvLyB0aGlzIGZ1bmN0aW9u
IHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5nIChqdXN0IHNsb3dlciB0aGFuIHdlIGNvdWxkKS4KLSAg
ICByZXR1cm4gZG9JRE5Ib3N0KGhvc3QsIGhvc3RMZW5ndGgsIG91dHB1dCk7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIFVDSEFSPgotdm9pZCBkb0hvc3Qo
Y29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBob3N0LCBVUkxC
dWZmZXI8Y2hhcj4mIG91dHB1dCwgQ2Fub25Ib3N0SW5mbyYgaG9zdEluZm8pCi17Ci0gICAgaWYg
KGhvc3QubGVuZ3RoKCkgPD0gMCkgewotICAgICAgICAvLyBFbXB0eSBob3N0cyBkb24ndCBuZWVk
IGFueXRoaW5nLgotICAgICAgICBob3N0SW5mby5mYW1pbHkgPSBDYW5vbkhvc3RJbmZvOjpORVVU
UkFMOwotICAgICAgICBob3N0SW5mby5vdXB1dEhvc3QgPSBVUkxDb21wb25lbnQoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGJvb2wgaGFzTm9uQVNDSUk7Ci0gICAgYm9vbCBoYXNF
c2NhcGVkOwotICAgIHNjYW5Ib3N0bmFtZTxDaGFyYWN0ZXJUeXBlLCBVQ0hBUj4oc3BlYywgaG9z
dCwgaGFzTm9uQVNDSUksIGhhc0VzY2FwZWQpOwotCi0gICAgLy8gS2VlcCB0cmFjayBvZiBvdXRw
dXQncyBpbml0aWFsIGxlbmd0aCwgc28gd2UgY2FuIHJld2luZCBsYXRlci4KLSAgICBjb25zdCBp
bnQgb3V0cHV0QmVnaW4gPSBvdXRwdXQubGVuZ3RoKCk7Ci0KLSAgICBib29sIHN1Y2Nlc3M7Ci0g
ICAgaWYgKCFoYXNOb25BU0NJSSAmJiAhaGFzRXNjYXBlZCkgewotICAgICAgICBzdWNjZXNzID0g
ZG9TaW1wbGVIb3N0KCZzcGVjW2hvc3QuYmVnaW4oKV0sIGhvc3QubGVuZ3RoKCksIG91dHB1dCwg
aGFzTm9uQVNDSUkpOwotICAgICAgICBBU1NFUlQoIWhhc05vbkFTQ0lJKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgc3VjY2VzcyA9IGRvQ29tcGxleEhvc3QoJnNwZWNbaG9zdC5iZWdpbigpXSwgaG9z
dC5sZW5ndGgoKSwgaGFzTm9uQVNDSUksIGhhc0VzY2FwZWQsIG91dHB1dCk7Ci0KLSAgICBpZiAo
IXN1Y2Nlc3MpIHsKLSAgICAgICAgLy8gQ2Fub25pY2FsaXphdGlvbiBmYWlsZWQuIFNldCBCUk9L
RU4gdG8gbm90aWZ5IHRoZSBjYWxsZXIuCi0gICAgICAgIGhvc3RJbmZvLmZhbWlseSA9IENhbm9u
SG9zdEluZm86OkJST0tFTjsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBBZnRlciBhbGwgdGhl
IG90aGVyIGNhbm9uaWNhbGl6YXRpb24sIGNoZWNrIGlmIHdlIGVuZGVkIHVwIHdpdGggYW4gSVAK
LSAgICAgICAgLy8gYWRkcmVzcy4gSVAgYWRkcmVzc2VzIGFyZSBzbWFsbCwgc28gd3JpdGluZyBp
bnRvIHRoaXMgdGVtcG9yYXJ5IGJ1ZmZlcgotICAgICAgICAvLyBzaG91bGQgbm90IGNhdXNlIGFu
IGFsbG9jYXRpb24uCi0gICAgICAgIFJhd1VSTEJ1ZmZlcjxjaGFyLCA2ND4gY2Fub25faXA7Ci0g
ICAgICAgIGNhbm9uaWNhbGl6ZUlQQWRkcmVzcyhvdXRwdXQuZGF0YSgpLCBVUkxDb21wb25lbnQ6
OmZyb21SYW5nZShvdXRwdXRCZWdpbiwgb3V0cHV0Lmxlbmd0aCgpKSwgY2Fub25faXAsIGhvc3RJ
bmZvKTsKLQotICAgICAgICAvLyBJZiB3ZSBnb3QgYW4gSVB2NC9JUHY2IGFkZHJlc3MsIGNvcHkg
dGhlIGNhbm9uaWNhbCBmb3JtIGJhY2sgdG8gdGhlCi0gICAgICAgIC8vIHJlYWwgYnVmZmVyLiBP
dGhlcndpc2UsIGl0J3MgYSBob3N0bmFtZSBvciBicm9rZW4gSVAsIGluIHdoaWNoIGNhc2UKLSAg
ICAgICAgLy8gd2UganVzdCBsZWF2ZSBpdCBpbiBwbGFjZS4KLSAgICAgICAgaWYgKGhvc3RJbmZv
LklzSVBBZGRyZXNzKCkpIHsKLSAgICAgICAgICAgIG91dHB1dC5zZXRMZW5ndGgob3V0cHV0QmVn
aW4pOwotICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChjYW5vbl9pcC5kYXRhKCksIGNhbm9uX2lw
Lmxlbmd0aCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGhvc3RJbmZvLm91cHV0SG9zdCA9
IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKG91dHB1dEJlZ2luLCBvdXRwdXQubGVuZ3RoKCkpOwot
fQotCi19IC8vIG5hbWVzcGFjZQotCi1ib29sIGNhbm9uaWNhbGl6ZUhvc3QoY29uc3QgY2hhciog
c3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBob3N0LCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwg
VVJMQ29tcG9uZW50JiBvdXB1dEhvc3QpCi17Ci0gICAgQ2Fub25Ib3N0SW5mbyBob3N0SW5mbzsK
LSAgICBkb0hvc3Q8Y2hhciwgdW5zaWduZWQgY2hhcj4oc3BlYywgaG9zdCwgb3V0cHV0LCBob3N0
SW5mbyk7Ci0gICAgb3VwdXRIb3N0ID0gaG9zdEluZm8ub3VwdXRIb3N0OwotICAgIHJldHVybiAo
aG9zdEluZm8uZmFtaWx5ICE9IENhbm9uSG9zdEluZm86OkJST0tFTik7Ci19Ci0KLWJvb2wgY2Fu
b25pY2FsaXplSG9zdChjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBob3N0
LCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMQ29tcG9uZW50JiBvdXB1dEhvc3QpCi17Ci0g
ICAgQ2Fub25Ib3N0SW5mbyBob3N0SW5mbzsKLSAgICBkb0hvc3Q8VUNoYXIsIFVDaGFyPihzcGVj
LCBob3N0LCBvdXRwdXQsIGhvc3RJbmZvKTsKLSAgICBvdXB1dEhvc3QgPSBob3N0SW5mby5vdXB1
dEhvc3Q7Ci0gICAgcmV0dXJuIChob3N0SW5mby5mYW1pbHkgIT0gQ2Fub25Ib3N0SW5mbzo6QlJP
S0VOKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplcgotCi19IC8vIG5hbWVz
cGFjZSBXVEYKLQotI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi91cmwvc3JjL1VSTENhbm9uSUNVLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJM
Q2Fub25JQ1UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjFmYTcwN2FhZDU3
M2QxYzYxNGVmZTE2NmIwMTA5ZDc4ODE4MzNhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25JQ1UuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIElDVSBpbnRlZ3JhdGlvbiBmdW5jdGlvbnMuCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShXVEZVUkwpCi0KLSNpbmNsdWRlICJVUkxDYW5v
bkludGVybmFsLmgiIC8vIGZvciBfaXRvYV9zCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVk
ZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8dW5pY29kZS91Y252Lmg+Ci0jaW5jbHVkZSA8dW5pY29k
ZS91Y252X2NiLmg+Ci0jaW5jbHVkZSA8dW5pY29kZS91aWRuYS5oPgotCi1uYW1lc3BhY2UgV1RG
IHsKLQotbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIgewotCi1uYW1lc3BhY2UgewotCi0vLyBD
YWxsZWQgd2hlbiBjb252ZXJ0aW5nIGEgY2hhcmFjdGVyIHRoYXQgY2FuIG5vdCBiZSByZXByZXNl
bnRlZCwgdGhpcyB3aWxsCi0vLyBhcHBlbmQgYW4gZXNjYXBlZCB2ZXJzaW9uIG9mIHRoZSBudW1l
cmljYWwgY2hhcmFjdGVyIHJlZmVyZW5jZSBmb3IgdGhhdCBjb2RlCi0vLyBwb2ludC4gSXQgaXMg
b2YgdGhlIGZvcm0gIiYjMTIzNDsiIGFuZCB3ZSB3aWxsIGVzY2FwZSB0aGUgbm9uLWRpZ2l0cyB0
bwotLy8gIiUyNiUyMzEyMzQlM0IiLiBXaHk/IFRoaXMgaXMgd2hhdCBOZXRzY2FwZSBkaWQgYmFj
ayBpbiB0aGUgb2xkZW4gZGF5cy4KLXZvaWQgYXBwZW5kVVJMRXNjYXBlZENoYXIoY29uc3Qgdm9p
ZCogLyogY29udGV4dCAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVUNvbnZlcnRlckZy
b21Vbmljb2RlQXJncyogZnJvbUFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFVDaGFyKiAvKiBjb2RlX3VuaXRzICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQz
Ml90IC8qIGxlbmd0aCAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXIzMiBjb2Rl
UG9pbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFVDb252ZXJ0ZXJDYWxsYmFja1JlYXNv
biByZWFzb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUqIGVycikKLXsK
LSAgICBpZiAocmVhc29uID09IFVDTlZfVU5BU1NJR05FRCkgewotICAgICAgICAqZXJyID0gVV9a
RVJPX0VSUk9SOwotCi0gICAgICAgIGNvbnN0IHN0YXRpYyBpbnQgcHJlZml4TGVuZ3RoID0gNjsK
LSAgICAgICAgY29uc3Qgc3RhdGljIGNoYXIgcHJlZml4W3ByZWZpeExlbmd0aCArIDFdID0gIiUy
NiUyMyI7IC8vICImIyIgcGVyY2VudC1lc2NhcGVkCi0gICAgICAgIHVjbnZfY2JGcm9tVVdyaXRl
Qnl0ZXMoZnJvbUFyZ3MsIHByZWZpeCwgcHJlZml4TGVuZ3RoLCAwLCBlcnIpOwotCi0gICAgICAg
IEFTU0VSVChjb2RlUG9pbnQgPCAweDExMDAwMCk7Ci0gICAgICAgIGNoYXIgbnVtYmVyWzhdOyAv
LyBNYXggVW5pY29kZSBjb2RlIHBvaW50IGlzIDcgZGlnaXRzLgotICAgICAgICBfaXRvYV9zKGNv
ZGVQb2ludCwgbnVtYmVyLCAxMCk7Ci0gICAgICAgIGludCBudW1iZXJMZW5ndGggPSBzdGF0aWNf
Y2FzdDxpbnQ+KHN0cmxlbihudW1iZXIpKTsKLSAgICAgICAgdWNudl9jYkZyb21VV3JpdGVCeXRl
cyhmcm9tQXJncywgbnVtYmVyLCBudW1iZXJMZW5ndGgsIDAsIGVycik7Ci0KLSAgICAgICAgY29u
c3Qgc3RhdGljIGludCBwb3N0Zml4TGVuZ3RoID0gMzsKLSAgICAgICAgY29uc3Qgc3RhdGljIGNo
YXIgcG9zdGZpeFtwb3N0Zml4TGVuZ3RoICsgMV0gPSAiJTNCIjsgLy8gIjsiIHBlcmNlbnQtZXNj
YXBlZAotICAgICAgICB1Y252X2NiRnJvbVVXcml0ZUJ5dGVzKGZyb21BcmdzLCBwb3N0Zml4LCBw
b3N0Zml4TGVuZ3RoLCAwLCBlcnIpOwotICAgIH0KLX0KLQotLy8gQSBjbGFzcyBmb3Igc2NvcGlu
ZyB0aGUgaW5zdGFsbGF0aW9uIG9mIHRoZSBpbnZhbGlkIGNoYXJhY3RlciBjYWxsYmFjay4KLWNs
YXNzIEFwcGVuZEhhbmRsZXJJbnN0YWxsZXIgewotcHVibGljOgotICAgIC8vIFRoZSBvd25lciBv
ZiB0aGlzIG9iamVjdCBtdXN0IGVuc3VyZSB0aGF0IHRoZSBjb252ZXJ0ZXIgaXMgYWxpdmUgZm9y
IHRoZQotICAgIC8vIGR1cmF0aW9uIG9mIHRoaXMgb2JqZWN0J3MgbGlmZXRpbWUuCi0gICAgQXBw
ZW5kSGFuZGxlckluc3RhbGxlcihVQ29udmVydGVyKiBjb252ZXJ0ZXIpCi0gICAgICAgIDogbV9j
b252ZXJ0ZXIoY29udmVydGVyKQotICAgIHsKLSAgICAgICAgVUVycm9yQ29kZSBlcnIgPSBVX1pF
Uk9fRVJST1I7Ci0gICAgICAgIHVjbnZfc2V0RnJvbVVDYWxsQmFjayhtX2NvbnZlcnRlciwgYXBw
ZW5kVVJMRXNjYXBlZENoYXIsIDAsICZtX29sZENhbGxiYWNrLCAmbV9vbGRDb250ZXh0LCAmZXJy
KTsKLSAgICB9Ci0KLSAgICB+QXBwZW5kSGFuZGxlckluc3RhbGxlcigpCi0gICAgewotICAgICAg
ICBVRXJyb3JDb2RlIGVyciA9IFVfWkVST19FUlJPUjsKLSAgICAgICAgdWNudl9zZXRGcm9tVUNh
bGxCYWNrKG1fY29udmVydGVyLCBtX29sZENhbGxiYWNrLCBtX29sZENvbnRleHQsIDAsIDAsICZl
cnIpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBVQ29udmVydGVyKiBtX2NvbnZlcnRlcjsKLQot
ICAgIFVDb252ZXJ0ZXJGcm9tVUNhbGxiYWNrIG1fb2xkQ2FsbGJhY2s7Ci0gICAgY29uc3Qgdm9p
ZCogbV9vbGRDb250ZXh0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UKLQotLy8gQ29udmVydHMgdGhl
IFVuaWNvZGUgaW5wdXQgcmVwcmVzZW50aW5nIGEgaG9zdG5hbWUgdG8gQVNDSUkgdXNpbmcgSURO
IHJ1bGVzLgotLy8gVGhlIG91dHB1dCBtdXN0IGJlIEFTQ0lJLCBidXQgaXMgcmVwcmVzZW50ZWQg
YXMgd2lkZSBjaGFyYWN0ZXJzLgotLy8KLS8vIE9uIHN1Y2Nlc3MsIHRoZSBvdXRwdXQgd2lsbCBi
ZSBmaWxsZWQgd2l0aCB0aGUgQVNDSUkgaG9zdCBuYW1lIGFuZCBpdCB3aWxsCi0vLyByZXR1cm4g
dHJ1ZS4gVW5saWtlIG1vc3Qgb3RoZXIgY2Fub25pY2FsaXphdGlvbiBmdW5jdGlvbnMsIHRoaXMg
YXNzdW1lcyB0aGF0Ci0vLyB0aGUgb3V0cHV0IGlzIGVtcHR5LiBUaGUgYmVnaW5uaW5nIG9mIHRo
ZSBob3N0IHdpbGwgYmUgYXQgb2Zmc2V0IDAsIGFuZAotLy8gdGhlIGxlbmd0aCBvZiB0aGUgb3V0
cHV0IHdpbGwgYmUgc2V0IHRvIHRoZSBsZW5ndGggb2YgdGhlIG5ldyBob3N0IG5hbWUuCi0vLwot
Ly8gT24gZXJyb3IsIHRoaXMgd2lsbCByZXR1cm4gZmFsc2UuIFRoZSBvdXRwdXQgaW4gdGhpcyBj
YXNlIGlzIHVuZGVmaW5lZC4KLWJvb2wgSUROVG9BU0NJSShjb25zdCBVQ2hhciogc3JjLCBpbnQg
c291cmNlTGVuZ3RoLCBVUkxCdWZmZXI8VUNoYXI+JiBvdXRwdXQpCi17Ci0gICAgQVNTRVJUKCFv
dXRwdXQubGVuZ3RoKCkpOyAvLyBPdXRwdXQgYnVmZmVyIGlzIGFzc3VtZWQgZW1wdHkuCi0gICAg
d2hpbGUgKHRydWUpIHsKLSAgICAgICAgLy8gVXNlIEFMTE9XX1VOQVNTSUdORUQgdG8gYmUgbW9y
ZSB0b2xlcmFudCBvZiBob3N0bmFtZXMgdGhhdCB2aW9sYXRlCi0gICAgICAgIC8vIHRoZSBzcGVj
ICh3aGljaCBkbyBleGlzdCkuIFRoaXMgZG9lcyBub3QgcHJlc2VudCBhbnkgcmlzayBhbmQgaXMg
YQotICAgICAgICAvLyBsaXR0bGUgbW9yZSBmdXR1cmUgcHJvb2YuCi0gICAgICAgIFVFcnJvckNv
ZGUgZXJyID0gVV9aRVJPX0VSUk9SOwotICAgICAgICBpbnQgbnVtQ29udmVydGVkID0gdWlkbmFf
SUROVG9BU0NJSShzcmMsIHNvdXJjZUxlbmd0aCwgb3V0cHV0LmRhdGEoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5jYXBhY2l0eSgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlETkFfQUxMT1dfVU5B
U1NJR05FRCwgMCwgJmVycik7Ci0gICAgICAgIGlmIChlcnIgPT0gVV9aRVJPX0VSUk9SKSB7Ci0g
ICAgICAgICAgICBvdXRwdXQuc2V0TGVuZ3RoKG51bUNvbnZlcnRlZCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXJyICE9IFVfQlVGRkVSX09WRVJG
TE9XX0VSUk9SKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBVbmtub3duIGVycm9yLCBn
aXZlIHVwLgotCi0gICAgICAgIC8vIE5vdCBlbm91Z2ggcm9vbSBpbiBvdXIgYnVmZmVyLCBleHBh
bmQuCi0gICAgICAgIG91dHB1dC5yZXNpemUob3V0cHV0LmNhcGFjaXR5KCkgKiAyKTsKLSAgICB9
Ci19Ci0KLWJvb2wgcmVhZFVURkNoYXIoY29uc3QgY2hhciogc3RyLCBpbnQqIGJlZ2luLCBpbnQg
bGVuZ3RoLCB1bnNpZ25lZCogY29kZVBvaW50T3V0KQotewotICAgIGludCBjb2RlUG9pbnQ7IC8v
IEF2b2lkcyB3YXJuaW5nIHdoZW4gVThfTkVYVCB3cml0ZXMgLTEgdG8gaXQuCi0gICAgVThfTkVY
VChzdHIsICpiZWdpbiwgbGVuZ3RoLCBjb2RlUG9pbnQpOwotICAgICpjb2RlUG9pbnRPdXQgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZVBvaW50KTsKLQotICAgIC8vIFRoZSBJQ1UgbWFjcm8g
YWJvdmUgbW92ZXMgdG8gdGhlIG5leHQgY2hhciwgd2Ugd2FudCB0byBwb2ludCB0byB0aGUgbGFz
dAotICAgIC8vIGNoYXIgY29uc3VtZWQuCi0gICAgKCpiZWdpbiktLTsKLQotICAgIC8vIFZhbGlk
YXRlIHRoZSBkZWNvZGVkIHZhbHVlLgotICAgIGlmIChVX0lTX1VOSUNPREVfQ0hBUihjb2RlUG9p
bnQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAqY29kZVBvaW50T3V0ID0ga1VuaWNvZGVS
ZXBsYWNlbWVudENoYXJhY3RlcjsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgcmVhZFVU
RkNoYXIoY29uc3QgVUNoYXIqIHN0ciwgaW50KiBiZWdpbiwgaW50IGxlbmd0aCwgdW5zaWduZWQq
IGNvZGVQb2ludCkKLXsKLSAgICBpZiAoVTE2X0lTX1NVUlJPR0FURShzdHJbKmJlZ2luXSkpIHsK
LSAgICAgICAgaWYgKCFVMTZfSVNfU1VSUk9HQVRFX0xFQUQoc3RyWypiZWdpbl0pIHx8ICpiZWdp
biArIDEgPj0gbGVuZ3RoIHx8ICFVMTZfSVNfVFJBSUwoc3RyWypiZWdpbiArIDFdKSkgewotICAg
ICAgICAgICAgLy8gSW52YWxpZCBzdXJyb2dhdGUgcGFpci4KLSAgICAgICAgICAgICpjb2RlUG9p
bnQgPSBrVW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyOwotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVmFsaWQgc3Vycm9nYXRlIHBhaXIuCi0gICAg
ICAgICpjb2RlUG9pbnQgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkoc3RyWypiZWdpbl0sIHN0clsq
YmVnaW4gKyAxXSk7Ci0gICAgICAgICgqYmVnaW4pKys7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
Ly8gTm90IGEgc3Vycm9nYXRlLCBqdXN0IG9uZSAxNi1iaXQgd29yZC4KLSAgICAgICAgKmNvZGVQ
b2ludCA9IHN0clsqYmVnaW5dOwotICAgIH0KLQotICAgIGlmIChVX0lTX1VOSUNPREVfQ0hBUigq
Y29kZVBvaW50KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBJbnZhbGlkIGNvZGUg
cG9pbnQuCi0gICAgKmNvZGVQb2ludCA9IGtVbmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXI7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBVUkxDYW5vbmljYWxpemVyCi0K
LX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gVVNFKFdURlVSTCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25JUC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi91
cmwvc3JjL1VSTENhbm9uSVAuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDYy
MzUzY2JjNWM1NmI3MzFlYTVlNzYzNDBmYzkzMjc2NGZlNDk4Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fu
b25JUC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2ODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5j
bHVkZSAiVVJMQ2Fub25JbnRlcm5hbC5oIgotI2luY2x1ZGUgIlVSTENoYXJhY3RlclR5cGVzLmgi
Ci0jaW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0ZGxp
Yi5oPgotCi0jaWYgVVNFKFdURlVSTCkKLQotbmFtZXNwYWNlIFdURiB7Ci0KLW5hbWVzcGFjZSBV
UkxDYW5vbmljYWxpemVyIHsKLQotbmFtZXNwYWNlIHsKLQotLy8gQ29udmVydHMgb25lIG9mIHRo
ZSBjaGFyYWN0ZXIgdHlwZXMgdGhhdCByZXByZXNlbnQgYSBudW1lcmljYWwgYmFzZSB0byB0aGUK
LS8vIGNvcnJlc3BvbmRpbmcgYmFzZS4KLXN0YXRpYyBpbmxpbmUgaW50IGJhc2VGb3JUeXBlKFVS
TENoYXJhY3RlclR5cGVzOjpDaGFyYWN0ZXJUeXBlcyB0eXBlKQotewotICAgIHN3aXRjaCAodHlw
ZSkgewotICAgIGNhc2UgVVJMQ2hhcmFjdGVyVHlwZXM6OkhleGFkZWNpbWFsQ2hhcmFjdGVyOgot
ICAgICAgICByZXR1cm4gMTY7Ci0gICAgY2FzZSBVUkxDaGFyYWN0ZXJUeXBlczo6RGVjaW1hbENo
YXJhY3RlcjoKLSAgICAgICAgcmV0dXJuIDEwOwotICAgIGNhc2UgVVJMQ2hhcmFjdGVyVHlwZXM6
Ok9jdGFsQ2hhcmFjdGVyOgotICAgICAgICByZXR1cm4gODsKLSAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLS8vIENvbnZlcnRzIGFuIElQdjQgY29tcG9uZW50IHRv
IGEgMzItYml0IG51bWJlciwgd2hpbGUgY2hlY2tpbmcgZm9yIG92ZXJmbG93LgotLy8KLS8vIFBv
c3NpYmxlIHJldHVybiB2YWx1ZXM6Ci0vLyAtIElQVjQgICAgLSBUaGUgbnVtYmVyIHdhcyB2YWxp
ZCwgYW5kIGRpZCBub3Qgb3ZlcmZsb3cuCi0vLyAtIEJST0tFTiAgLSBUaGUgaW5wdXQgd2FzIG51
bWVyaWMsIGJ1dCB0b28gbGFyZ2UgZm9yIGEgMzItYml0IGZpZWxkLgotLy8gLSBORVVUUkFMIC0g
SW5wdXQgd2FzIG5vdCBudW1lcmljLgotLy8KLS8vIFRoZSBpbnB1dCBpcyBhc3N1bWVkIHRvIGJl
IEFTQ0lJLiBGaW5kSVB2NENvbXBvbmVudHMgc2hvdWxkIGhhdmUgc3RyaXBwZWQKLS8vIG91dCBh
bnkgaW5wdXQgdGhhdCBpcyBncmVhdGVyIHRoYW4gNyBiaXRzLiBUaGUgY29tcG9uZW50cyBhcmUg
YXNzdW1lZAotLy8gdG8gYmUgbm9uLWVtcHR5LgotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4KLUNhbm9uSG9zdEluZm86OkZhbWlseSBJUHY0Q29tcG9uZW50VG9OdW1iZXIoY29uc3Qg
Q2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBjb21wb25lbnQsIHVpbnQz
Ml90KiBudW1iZXIpCi17Ci0gICAgLy8gRmlndXJlIG91dCB0aGUgYmFzZQotICAgIFVSTENoYXJh
Y3RlclR5cGVzOjpDaGFyYWN0ZXJUeXBlcyBiYXNlOwotICAgIGludCBiYXNlUHJlZml4TGVuZ3Ro
ID0gMDsgLy8gU2l6ZSBvZiB0aGUgcHJlZml4IGZvciB0aGlzIGJhc2UuCi0gICAgaWYgKHNwZWNb
Y29tcG9uZW50LmJlZ2luKCldID09ICcwJykgewotICAgICAgICAvLyBFaXRoZXIgaGV4IG9yIGRl
Yywgb3IgYSBzdGFuZGFsb25lIHplcm8uCi0gICAgICAgIGlmIChjb21wb25lbnQubGVuZ3RoKCkg
PT0gMSkgewotICAgICAgICAgICAgYmFzZSA9IFVSTENoYXJhY3RlclR5cGVzOjpEZWNpbWFsQ2hh
cmFjdGVyOwotICAgICAgICB9IGVsc2UgaWYgKHNwZWNbY29tcG9uZW50LmJlZ2luKCkgKyAxXSA9
PSAnWCcgfHwgc3BlY1tjb21wb25lbnQuYmVnaW4oKSArIDFdID09ICd4JykgewotICAgICAgICAg
ICAgYmFzZSA9IFVSTENoYXJhY3RlclR5cGVzOjpIZXhhZGVjaW1hbENoYXJhY3RlcjsKLSAgICAg
ICAgICAgIGJhc2VQcmVmaXhMZW5ndGggPSAyOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgYmFzZSA9IFVSTENoYXJhY3RlclR5cGVzOjpPY3RhbENoYXJhY3RlcjsKLSAgICAgICAgICAg
IGJhc2VQcmVmaXhMZW5ndGggPSAxOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIGJh
c2UgPSBVUkxDaGFyYWN0ZXJUeXBlczo6RGVjaW1hbENoYXJhY3RlcjsKLQotICAgIC8vIEV4dGVu
ZCB0aGUgcHJlZml4IHRvIGNvbnN1bWUgYWxsIGxlYWRpbmcgemVyb3MuCi0gICAgd2hpbGUgKGJh
c2VQcmVmaXhMZW5ndGggPCBjb21wb25lbnQubGVuZ3RoKCkgJiYgc3BlY1tjb21wb25lbnQuYmVn
aW4oKSArIGJhc2VQcmVmaXhMZW5ndGhdID09ICcwJykKLSAgICAgICAgKytiYXNlUHJlZml4TGVu
Z3RoOwotCi0gICAgLy8gUHV0IHRoZSBjb21wb25lbnQsIG1pbnVzIGFueSBiYXNlIHByZWZpeCwg
aW50byBhIHplcm8tdGVybWluYXRlZCBidWZmZXIgc28KLSAgICAvLyB3ZSBjYW4gY2FsbCB0aGUg
c3RhbmRhcmQgbGlicmFyeS4gQmVjYXVzZSBsZWFkaW5nIHplcm9zIGhhdmUgYWxyZWFkeSBiZWVu
Ci0gICAgLy8gZGlzY2FyZGVkLCBmaWxsaW5nIHRoZSBlbnRpcmUgYnVmZmVyIGlzIGd1YXJhbnRl
ZWQgdG8gdHJpZ2dlciB0aGUgMzItYml0Ci0gICAgLy8gb3ZlcmZsb3cgY2hlY2suCi0gICAgY29u
c3QgaW50IGtNYXhDb21wb25lbnRMZW4gPSAxNjsKLSAgICBjaGFyIGJ1ZltrTWF4Q29tcG9uZW50
TGVuICsgMV07IC8vIGRpZ2l0cyArICdcMCcKLSAgICBpbnQgZGVzdEkgPSAwOwotICAgIGZvciAo
aW50IGkgPSBjb21wb25lbnQuYmVnaW4oKSArIGJhc2VQcmVmaXhMZW5ndGg7IGkgPCBjb21wb25l
bnQuZW5kKCk7IGkrKykgewotICAgICAgICAvLyBXZSBrbm93IHRoZSBpbnB1dCBpcyA3LWJpdCwg
c28gY29udmVydCB0byBuYXJyb3cgKGlmIHRoaXMgaXMgdGhlIHdpZGUKLSAgICAgICAgLy8gdmVy
c2lvbiBvZiB0aGUgdGVtcGxhdGUpIGJ5IGNhc3RpbmcuCi0gICAgICAgIGNoYXIgaW5wdXQgPSBz
dGF0aWNfY2FzdDxjaGFyPihzcGVjW2ldKTsKLQotICAgICAgICAvLyBWYWxpZGF0ZSB0aGF0IHRo
aXMgY2hhcmFjdGVyIGlzIE9LIGZvciB0aGUgZ2l2ZW4gYmFzZS4KLSAgICAgICAgaWYgKCFVUkxD
aGFyYWN0ZXJUeXBlczo6aXNDaGFyYWN0ZXJPZlR5cGUoaW5wdXQsIGJhc2UpKQotICAgICAgICAg
ICAgcmV0dXJuIENhbm9uSG9zdEluZm86Ok5FVVRSQUw7Ci0KLSAgICAgICAgLy8gRmlsbCB0aGUg
YnVmZmVyLCBpZiB0aGVyZSdzIHNwYWNlIHJlbWFpbmluZy4gVGhpcyBjaGVjayBhbGxvd3MgdXMg
dG8KLSAgICAgICAgLy8gdmVyaWZ5IHRoYXQgYWxsIGNoYXJhY3RlcnMgYXJlIG51bWVyaWMsIGV2
ZW4gdGhvc2UgdGhhdCBkb24ndCBmaXQuCi0gICAgICAgIGlmIChkZXN0SSA8IGtNYXhDb21wb25l
bnRMZW4pCi0gICAgICAgICAgICBidWZbZGVzdEkrK10gPSBpbnB1dDsKLSAgICB9Ci0KLSAgICBi
dWZbZGVzdEldID0gJ1wwJzsKLQotICAgIC8vIFVzZSB0aGUgNjQtYml0IHN0cnRvaSBzbyB3ZSBn
ZXQgYSBiaWcgbnVtYmVyIChubyBoZXgsIGRlY2ltYWwsIG9yIG9jdGFsCi0gICAgLy8gbnVtYmVy
IGNhbiBvdmVyZmxvdyBhIDY0LWJpdCBudW1iZXIgaW4gPD0gMTYgY2hhcmFjdGVycykuCi0gICAg
dWludDY0X3QgbnVtID0gX3N0cnRvdWk2NChidWYsIDAsIGJhc2VGb3JUeXBlKGJhc2UpKTsKLQot
ICAgIC8vIENoZWNrIGZvciAzMi1iaXQgb3ZlcmZsb3cuCi0gICAgaWYgKG51bSA+IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkKLSAgICAgICAgcmV0dXJuIENhbm9uSG9zdElu
Zm86OkJST0tFTjsKLQotICAgIC8vIE5vIG92ZXJmbG93LiBTdWNjZXNzIQotICAgICpudW1iZXIg
PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obnVtKTsKLSAgICByZXR1cm4gQ2Fub25Ib3N0SW5mbzo6
SVBWNDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgVUNI
QVI+Ci1ib29sIGRvRmluZElQdjRDb21wb25lbnRzKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMs
IGNvbnN0IFVSTENvbXBvbmVudCYgaG9zdCwgVVJMQ29tcG9uZW50IGNvbXBvbmVudHNbNF0pCi17
Ci0gICAgaWYgKCFob3N0LmlzTm9uRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaW50IGN1cnJlbnRDb21wb25lbnQgPSAwOyAvLyBJbmRleCBvZiB0aGUgY29tcG9uZW50IHdl
J3JlIHdvcmtpbmcgb24uCi0gICAgaW50IGN1cnJlbnRDb21wb25lbnRCZWdpbiA9IGhvc3QuYmVn
aW4oKTsgLy8gU3RhcnQgb2YgdGhlIGN1cnJlbnQgY29tcG9uZW50LgotICAgIGludCBlbmQgPSBo
b3N0LmVuZCgpOwotICAgIGZvciAoaW50IGkgPSBob3N0LmJlZ2luKCk7IC8qIG5vdGhpbmcgKi87
ICsraSkgewotICAgICAgICBpZiAoaSA+PSBlbmQgfHwgc3BlY1tpXSA9PSAnLicpIHsKLSAgICAg
ICAgICAgIC8vIEZvdW5kIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgY29tcG9uZW50LgotICAgICAg
ICAgICAgaW50IGNvbXBvbmVudExlbmd0aCA9IGkgLSBjdXJyZW50Q29tcG9uZW50QmVnaW47Ci0g
ICAgICAgICAgICBjb21wb25lbnRzW2N1cnJlbnRDb21wb25lbnRdID0gVVJMQ29tcG9uZW50KGN1
cnJlbnRDb21wb25lbnRCZWdpbiwgY29tcG9uZW50TGVuZ3RoKTsKLQotICAgICAgICAgICAgLy8g
VGhlIG5leHQgY29tcG9uZW50IHN0YXJ0cyBhZnRlciB0aGUgZG90LgotICAgICAgICAgICAgY3Vy
cmVudENvbXBvbmVudEJlZ2luID0gaSArIDE7Ci0gICAgICAgICAgICBjdXJyZW50Q29tcG9uZW50
Kys7Ci0KLSAgICAgICAgICAgIC8vIERvbid0IGFsbG93IGVtcHR5IGNvbXBvbmVudHMgKHR3byBk
b3RzIGluIGEgcm93KSwgZXhjZXB0IHdlIG1heQotICAgICAgICAgICAgLy8gYWxsb3cgYW4gZW1w
dHkgY29tcG9uZW50IGF0IHRoZSBlbmQgKHRoaXMgd291bGQgaW5kaWNhdGUgdGhhdCB0aGUKLSAg
ICAgICAgICAgIC8vIGlucHV0IGVuZHMgaW4gYSBkb3QpLiBXZSBhbHNvIHdhbnQgdG8gZXJyb3Ig
aWYgdGhlIGNvbXBvbmVudCBpcwotICAgICAgICAgICAgLy8gZW1wdHkgYW5kIGl0J3MgdGhlIG9u
bHkgY29tcG9uZW50IChjdXJyZW50Q29tcG9uZW50ID09IDEpLgotICAgICAgICAgICAgaWYgKCFj
b21wb25lbnRMZW5ndGggJiYgKGkgPCBlbmQgfHwgY3VycmVudENvbXBvbmVudCA9PSAxKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlmIChpID49IGVuZCkK
LSAgICAgICAgICAgICAgICBicmVhazsgLy8gRW5kIG9mIHRoZSBpbnB1dC4KLQotICAgICAgICAg
ICAgaWYgKGN1cnJlbnRDb21wb25lbnQgPT0gNCkgewotICAgICAgICAgICAgICAgIC8vIEFueXRo
aW5nIGVsc2UgYWZ0ZXIgdGhlIDR0aCBjb21wb25lbnQgaXMgYW4gZXJyb3IgdW5sZXNzIGl0IGlz
IGEKLSAgICAgICAgICAgICAgICAvLyBkb3QgdGhhdCB3b3VsZCBvdGhlcndpc2UgYmUgdHJlYXRl
ZCBhcyB0aGUgZW5kIG9mIGlucHV0LgotICAgICAgICAgICAgICAgIGlmIChzcGVjW2ldID09ICcu
JyAmJiBpICsgMSA9PSBlbmQpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChz
dGF0aWNfY2FzdDxVQ0hBUj4oc3BlY1tpXSkgPj0gMHg4MCB8fCAhVVJMQ2hhcmFjdGVyVHlwZXM6
OmlzSVB2NENoYXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc3BlY1tpXSkpKSB7Ci0gICAg
ICAgICAgICAvLyBJbnZhbGlkIGNoYXJhY3RlciBmb3IgYW4gSVB2NCBhZGRyZXNzLgotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRmlsbCBpbiBh
bnkgdW51c2VkIGNvbXBvbmVudHMuCi0gICAgd2hpbGUgKGN1cnJlbnRDb21wb25lbnQgPCA0KQot
ICAgICAgICBjb21wb25lbnRzW2N1cnJlbnRDb21wb25lbnQrK10gPSBVUkxDb21wb25lbnQoKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgRmluZElQdjRDb21wb25lbnRzKGNv
bnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgaG9zdCwgVVJMQ29tcG9uZW50IGNv
bXBvbmVudHNbNF0pCi17Ci0gICAgcmV0dXJuIGRvRmluZElQdjRDb21wb25lbnRzPGNoYXIsIHVu
c2lnbmVkIGNoYXI+KHNwZWMsIGhvc3QsIGNvbXBvbmVudHMpOwotfQotCi1zdGF0aWMgYm9vbCBG
aW5kSVB2NENvbXBvbmVudHMoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYg
aG9zdCwgVVJMQ29tcG9uZW50IGNvbXBvbmVudHNbNF0pCi17Ci0gICAgcmV0dXJuIGRvRmluZElQ
djRDb21wb25lbnRzPFVDaGFyLCBVQ2hhcj4oc3BlYywgaG9zdCwgY29tcG9uZW50cyk7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1DYW5vbkhvc3RJbmZvOjpGYW1pbHkg
ZG9JUHY0QWRkcmVzc1RvTnVtYmVyKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVS
TENvbXBvbmVudCYgaG9zdCwgdW5zaWduZWQgY2hhciBhZGRyZXNzWzRdLCBpbnQmIGlwdjRDb21w
b25lbnRzQ291bnQpCi17Ci0gICAgLy8gVGhlIGlkZW50aWZpZWQgY29tcG9uZW50cy4gTm90IGFs
bCBtYXkgZXhpc3QuCi0gICAgVVJMQ29tcG9uZW50IGNvbXBvbmVudHNbNF07Ci0gICAgaWYgKCFG
aW5kSVB2NENvbXBvbmVudHMoc3BlYywgaG9zdCwgY29tcG9uZW50cykpCi0gICAgICAgIHJldHVy
biBDYW5vbkhvc3RJbmZvOjpORVVUUkFMOwotCi0gICAgLy8gQ29udmVydCBleGlzdGluZyBjb21w
b25lbnRzIHRvIGRpZ2l0cy4gVmFsdWVzIHVwIHRvCi0gICAgLy8gfGV4aXN0aW5nQ29tcG9uZW50
c3wgd2lsbCBiZSB2YWxpZC4KLSAgICB1aW50MzJfdCBjb21wb25lbnRWYWx1ZXNbNF07Ci0gICAg
aW50IGV4aXN0aW5nQ29tcG9uZW50cyA9IDA7Ci0KLSAgICAvLyBTZXQgdG8gdHJ1ZSBpZiBvbmUg
b3IgbW9yZSBjb21wb25lbnRzIGFyZSBCUk9LRU4uIEJST0tFTiBpcyBvbmx5Ci0gICAgLy8gcmV0
dXJuZWQgaWYgYWxsIGNvbXBvbmVudHMgYXJlIElQVjQgb3IgQlJPS0VOLCBzbywgZm9yIGV4YW1w
bGUsCi0gICAgLy8gMTIzNDU2Nzg5MTIzNDUuZGUgcmV0dXJucyBORVVUUkFMIHJhdGhlciB0aGFu
IGJyb2tlbi4KLSAgICBib29sIGJyb2tlbiA9IGZhbHNlOwotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgNDsgaSsrKSB7Ci0gICAgICAgIGlmIChjb21wb25lbnRzW2ldLmxlbmd0aCgpIDw9IDApCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgQ2Fub25Ib3N0SW5mbzo6RmFtaWx5IGZhbWls
eSA9IElQdjRDb21wb25lbnRUb051bWJlcihzcGVjLCBjb21wb25lbnRzW2ldLCAmY29tcG9uZW50
VmFsdWVzW2V4aXN0aW5nQ29tcG9uZW50c10pOwotCi0gICAgICAgIGlmIChmYW1pbHkgPT0gQ2Fu
b25Ib3N0SW5mbzo6QlJPS0VOKQotICAgICAgICAgICAgYnJva2VuID0gdHJ1ZTsKLSAgICAgICAg
ZWxzZSBpZiAoZmFtaWx5ICE9IENhbm9uSG9zdEluZm86OklQVjQpIHsKLSAgICAgICAgICAgIC8v
IFN0b3AgaWYgd2UgaGl0IGEgbm9uLUJST0tFTiBpbnZhbGlkIG5vbi1lbXB0eSBjb21wb25lbnQu
Ci0gICAgICAgICAgICByZXR1cm4gZmFtaWx5OwotICAgICAgICB9Ci0KLSAgICAgICAgZXhpc3Rp
bmdDb21wb25lbnRzKys7Ci0gICAgfQotCi0gICAgaWYgKGJyb2tlbikKLSAgICAgICAgcmV0dXJu
IENhbm9uSG9zdEluZm86OkJST0tFTjsKLQotICAgIC8vIFVzZSB0aGF0IHNlcXVlbmNlIG9mIG51
bWJlcnMgdG8gZmlsbCBvdXQgdGhlIDQtY29tcG9uZW50IElQIGFkZHJlc3MuCi0KLSAgICAvLyBG
aXJzdCwgcHJvY2VzcyBhbGwgY29tcG9uZW50cyBidXQgdGhlIGxhc3QsIHdoaWxlIG1ha2luZyBz
dXJlIGVhY2ggZml0cwotICAgIC8vIHdpdGhpbiBhbiA4LWJpdCBmaWVsZC4KLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGV4aXN0aW5nQ29tcG9uZW50cyAtIDE7IGkrKykgewotICAgICAgICBpZiAo
Y29tcG9uZW50VmFsdWVzW2ldID4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50OF90Pjo6bWF4KCkp
Ci0gICAgICAgICAgICByZXR1cm4gQ2Fub25Ib3N0SW5mbzo6QlJPS0VOOwotICAgICAgICBhZGRy
ZXNzW2ldID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oY29tcG9uZW50VmFsdWVzW2ldKTsK
LSAgICB9Ci0KLSAgICAvLyBOZXh0LCBjb25zdW1lIHRoZSBsYXN0IGNvbXBvbmVudCB0byBmaWxs
IGluIHRoZSByZW1haW5pbmcgYnl0ZXMuCi0gICAgdWludDMyX3QgbGFzdFZhbHVlID0gY29tcG9u
ZW50VmFsdWVzW2V4aXN0aW5nQ29tcG9uZW50cyAtIDFdOwotICAgIGZvciAoaW50IGkgPSAzOyBp
ID49IGV4aXN0aW5nQ29tcG9uZW50cyAtIDE7IGktLSkgewotICAgICAgICBhZGRyZXNzW2ldID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4obGFzdFZhbHVlKTsKLSAgICAgICAgbGFzdFZhbHVl
ID4+PSA4OwotICAgIH0KLQotICAgIC8vIElmIHRoZSBsYXN0IGNvbXBvbmVudCBoYXMgcmVzaWR1
YWwgYml0cywgcmVwb3J0IG92ZXJmbG93LgotICAgIGlmIChsYXN0VmFsdWUpCi0gICAgICAgIHJl
dHVybiBDYW5vbkhvc3RJbmZvOjpCUk9LRU47Ci0KLSAgICAvLyBUZWxsIHRoZSBjYWxsZXIgaG93
IG1hbnkgY29tcG9uZW50cyB3ZSBzYXcuCi0gICAgaXB2NENvbXBvbmVudHNDb3VudCA9IGV4aXN0
aW5nQ29tcG9uZW50czsKLQotICAgIC8vIFN1Y2Nlc3MhCi0gICAgcmV0dXJuIENhbm9uSG9zdElu
Zm86OklQVjQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRJUHY0QWRkcmVzcyhjb25z
dCB1bnNpZ25lZCBjaGFyIGFkZHJlc3NbNF0sIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQotewot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKSB7Ci0gICAgICAgIGNoYXIgYnVmZmVyWzE2
XTsKLSAgICAgICAgX2l0b2FfcyhhZGRyZXNzW2ldLCBidWZmZXIsIDEwKTsKLQotICAgICAgICBm
b3IgKGludCBjaCA9IDA7IGJ1ZmZlcltjaF07IGNoKyspCi0gICAgICAgICAgICBvdXRwdXQuYXBw
ZW5kKGJ1ZmZlcltjaF0pOwotCi0gICAgICAgIGlmIChpICE9IDMpCi0gICAgICAgICAgICBvdXRw
dXQuYXBwZW5kKCcuJyk7Ci0gICAgfQotfQotCi0vLyBSZXR1cm4gdHJ1ZSBpZiB3ZSd2ZSBtYWRl
IGEgZmluYWwgSVBWNC9CUk9LRU4gZGVjaXNpb24sIGZhbHNlIGlmIHRoZSByZXN1bHQKLS8vIGlz
IE5FVVRSQUwsIGFuZCB3ZSBjb3VsZCB1c2UgYSBzZWNvbmQgb3Bpbmlvbi4KLXRlbXBsYXRlPHR5
cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIFVDSEFSPgotYm9vbCBkb0Nhbm9uaWNhbGl6
ZUlQdjRBZGRyZXNzKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVu
dCYgaG9zdCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIENhbm9uSG9zdEluZm8mIGhvc3RJbmZv
KQotewotICAgIGhvc3RJbmZvLmZhbWlseSA9IGRvSVB2NEFkZHJlc3NUb051bWJlcihzcGVjLCBo
b3N0LCBob3N0SW5mby5hZGRyZXNzLCBob3N0SW5mby5pcHY0Q29tcG9uZW50c0NvdW50KTsKLQot
ICAgIHN3aXRjaCAoaG9zdEluZm8uZmFtaWx5KSB7Ci0gICAgY2FzZSBDYW5vbkhvc3RJbmZvOjpJ
UFY0OgotICAgICAgICAvLyBEZWZpbml0ZWx5IGFuIElQdjQgYWRkcmVzcy4KLSAgICAgICAgaG9z
dEluZm8ub3VwdXRIb3N0LnNldEJlZ2luKG91dHB1dC5sZW5ndGgoKSk7Ci0gICAgICAgIGFwcGVu
ZElQdjRBZGRyZXNzKGhvc3RJbmZvLmFkZHJlc3MsIG91dHB1dCk7Ci0gICAgICAgIGhvc3RJbmZv
Lm91cHV0SG9zdC5zZXRMZW5ndGgob3V0cHV0Lmxlbmd0aCgpIC0gaG9zdEluZm8ub3VwdXRIb3N0
LmJlZ2luKCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIENhbm9uSG9zdEluZm86
OkJST0tFTjoKLSAgICAgICAgLy8gRGVmaW5pdGVseSBicm9rZW4uCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIENvdWxkIGJlIElQdjYgb3IgYSBob3N0bmFt
ZS4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotLy8gSGVscGVyIGNsYXNzIHRo
YXQgZGVzY3JpYmVzIHRoZSBtYWluIGNvbXBvbmVudHMgb2YgYW4gSVB2NiBpbnB1dCBzdHJpbmcu
Ci0vLyBTZWUgdGhlIGZvbGxvd2luZyBleGFtcGxlcyB0byB1bmRlcnN0YW5kIGhvdyBpdCBicmVh
a3MgdXAgYW4gaW5wdXQgc3RyaW5nOgotLy8KLS8vIFtFeGFtcGxlIDFdOiBpbnB1dCA9ICJbOjph
YTpiYl0iCi0vLyAgPT0+IG51bUhleENvbXBvbmVudHMgPSAyCi0vLyAgPT0+IGhleENvbXBvbmVu
dHNbMF0gPSBDb21wb25lbnQoMywyKSAiYWEiCi0vLyAgPT0+IGhleENvbXBvbmVudHNbMV0gPSBD
b21wb25lbnQoNiwyKSAiYmIiCi0vLyAgPT0+IGluZGV4T2ZDb250cmFjdGlvbiA9IDAKLS8vICA9
PT4gaXB2NENvbXBvbmVudCA9IENvbXBvbmVudCgwLCAtMSkKLS8vCi0vLyBbRXhhbXBsZSAyXTog
aW5wdXQgPSAiWzE6Mjo6Mzo0OjVdIgotLy8gID09PiBudW1IZXhDb21wb25lbnRzID0gNQotLy8g
ID09PiBoZXhDb21wb25lbnRzWzBdID0gQ29tcG9uZW50KDEsMSkgIjEiCi0vLyAgPT0+IGhleENv
bXBvbmVudHNbMV0gPSBDb21wb25lbnQoMywxKSAiMiIKLS8vICA9PT4gaGV4Q29tcG9uZW50c1sy
XSA9IENvbXBvbmVudCg2LDEpICIzIgotLy8gID09PiBoZXhDb21wb25lbnRzWzNdID0gQ29tcG9u
ZW50KDgsMSkgIjQiCi0vLyAgPT0+IGhleENvbXBvbmVudHNbNF0gPSBDb21wb25lbnQoMTAsMSkg
IjUiCi0vLyAgPT0+IGluZGV4T2ZDb250cmFjdGlvbiA9IDIKLS8vICA9PT4gaXB2NENvbXBvbmVu
dCA9IENvbXBvbmVudCgwLCAtMSkKLS8vCi0vLyBbRXhhbXBsZSAzXTogaW5wdXQgPSAiWzo6ZmZm
ZjoxOTIuMTY4LjAuMV0iCi0vLyAgPT0+IG51bUhleENvbXBvbmVudHMgPSAxCi0vLyAgPT0+IGhl
eENvbXBvbmVudHNbMF0gPSBDb21wb25lbnQoMyw0KSAiZmZmZiIKLS8vICA9PT4gaW5kZXhPZkNv
bnRyYWN0aW9uID0gMAotLy8gID09PiBpcHY0Q29tcG9uZW50ID0gQ29tcG9uZW50KDgsIDExKSAi
MTkyLjE2OC4wLjEiCi0vLwotLy8gW0V4YW1wbGUgNF06IGlucHV0ID0gIlsxOjpdIgotLy8gID09
PiBudW1IZXhDb21wb25lbnRzID0gMQotLy8gID09PiBoZXhDb21wb25lbnRzWzBdID0gQ29tcG9u
ZW50KDEsMSkgIjEiCi0vLyAgPT0+IGluZGV4T2ZDb250cmFjdGlvbiA9IDEKLS8vICA9PT4gaXB2
NENvbXBvbmVudCA9IENvbXBvbmVudCgwLCAtMSkKLS8vCi0vLyBbRXhhbXBsZSA1XTogaW5wdXQg
PSAiWzo6MTkyLjE2OC4wLjFdIgotLy8gID09PiBudW1IZXhDb21wb25lbnRzID0gMAotLy8gID09
PiBpbmRleE9mQ29udHJhY3Rpb24gPSAwCi0vLyAgPT0+IGlwdjRDb21wb25lbnQgPSBDb21wb25l
bnQoOCwgMTEpICIxOTIuMTY4LjAuMSIKLS8vCi1zdHJ1Y3QgSVB2NlBhcnNlZCB7Ci0gICAgLy8g
WmVyby1vdXQgdGhlIHBhcnNlIGluZm9ybWF0aW9uLgotICAgIHZvaWQgcmVzZXQoKQotICAgIHsK
LSAgICAgICAgbnVtSGV4Q29tcG9uZW50cyA9IDA7Ci0gICAgICAgIGluZGV4T2ZDb250cmFjdGlv
biA9IC0xOwotICAgICAgICBpcHY0Q29tcG9uZW50LnJlc2V0KCk7Ci0gICAgfQotCi0gICAgLy8g
VGhlcmUgY2FuIGJlIHVwIHRvIDggaGV4IGNvbXBvbmVudHMgKGNvbG9uIHNlcGFyYXRlZCkgaW4g
dGhlIGxpdGVyYWwuCi0gICAgVVJMQ29tcG9uZW50IGhleENvbXBvbmVudHNbOF07Ci0KLSAgICAv
LyBUaGUgY291bnQgb2YgaGV4IGNvbXBvbmVudHMgcHJlc2VudC4gUmFuZ2VzIGZyb20gWzAsOF0u
Ci0gICAgaW50IG51bUhleENvbXBvbmVudHM7Ci0KLSAgICAvLyBUaGUgaW5kZXggb2YgdGhlIGhl
eCBjb21wb25lbnQgdGhhdCB0aGUgIjo6IiBjb250cmFjdGlvbiBwcmVjZWRlcywgb3IKLSAgICAv
LyAtMSBpZiB0aGVyZSBpcyBubyBjb250cmFjdGlvbi4KLSAgICBpbnQgaW5kZXhPZkNvbnRyYWN0
aW9uOwotCi0gICAgLy8gVGhlIHJhbmdlIG9mIGNoYXJhY3RlcnMgd2hpY2ggYXJlIGFuIElQdjQg
bGl0ZXJhbC4KLSAgICBVUkxDb21wb25lbnQgaXB2NENvbXBvbmVudDsKLX07Ci0KLS8vIFBhcnNl
IHRoZSBJUHY2IGlucHV0IHN0cmluZy4gSWYgcGFyc2luZyBzdWNjZWVkZWQgcmV0dXJucyB0cnVl
IGFuZCBmaWxscwotLy8gfHBhcnNlZHwgd2l0aCB0aGUgaW5mb3JtYXRpb24uIElmIHBhcnNpbmcg
ZmFpbGVkIChiZWNhdXNlIHRoZSBpbnB1dCBpcwotLy8gaW52YWxpZCkgcmV0dXJucyBmYWxzZS4K
LXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIFVDSEFSPgotYm9vbCBk
b1BhcnNlSVB2Nihjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQm
IGhvc3QsIElQdjZQYXJzZWQmIHBhcnNlZCkKLXsKLSAgICAvLyBaZXJvLW91dCB0aGUgaW5mby4K
LSAgICBwYXJzZWQucmVzZXQoKTsKLQotICAgIGlmICghaG9zdC5pc05vbkVtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFRoZSBpbmRleCBmb3Igc3RhcnQgYW5kIGVuZCBv
ZiBhZGRyZXNzIHJhbmdlIChubyBicmFja2V0cykuCi0gICAgaW50IGJlZ2luID0gaG9zdC5iZWdp
bigpOwotICAgIGludCBlbmQgPSBob3N0LmVuZCgpOwotCi0gICAgaW50IGN1cnJlbnRDb21wb25l
bnRCZWdpbiA9IGJlZ2luOyAvLyBTdGFydCBvZiB0aGUgY3VycmVudCBjb21wb25lbnQuCi0KLSAg
ICAvLyBTY2FuIHRocm91Z2ggdGhlIGlucHV0LCBzZWFyY2hpbmcgZm9yIGhleCBjb21wb25lbnRz
LCAiOjoiIGNvbnRyYWN0aW9ucywKLSAgICAvLyBhbmQgSVB2NCBjb21wb25lbnRzLgotICAgIGZv
ciAoaW50IGkgPSBiZWdpbjsgLyogaSA8PSBlbmQgKi87IGkrKykgewotICAgICAgICBib29sIGlz
Q29sb24gPSBzcGVjW2ldID09ICc6JzsKLSAgICAgICAgYm9vbCBpc0NvbnRyYWN0aW9uID0gaXND
b2xvbiAmJiBpIDwgZW5kIC0gMSAmJiBzcGVjW2kgKyAxXSA9PSAnOic7Ci0KLSAgICAgICAgLy8g
V2UgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGNvbXBvbmVudCBpZiB3ZSBlbmNvdW50
ZXIgYSBjb2xvbgotICAgICAgICAvLyAoc2VwYXJhdG9yIGJldHdlZW4gaGV4IGNvbXBvbmVudHMs
IG9yIHN0YXJ0IG9mIGEgY29udHJhY3Rpb24pLCBvciBlbmQgb2YKLSAgICAgICAgLy8gaW5wdXQu
Ci0gICAgICAgIGlmIChpc0NvbG9uIHx8IGkgPT0gZW5kKSB7Ci0gICAgICAgICAgICBpbnQgY29t
cG9uZW50TGVuZ3RoID0gaSAtIGN1cnJlbnRDb21wb25lbnRCZWdpbjsKLQotICAgICAgICAgICAg
Ly8gQSBjb21wb25lbnQgc2hvdWxkIG5vdCBoYXZlIG1vcmUgdGhhbiA0IGhleCBkaWdpdHMuCi0g
ICAgICAgICAgICBpZiAoY29tcG9uZW50TGVuZ3RoID4gNCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIC8vIERvbid0IGFsbG93IGVtcHR5IGNvbXBvbmVudHMu
Ci0gICAgICAgICAgICBpZiAoIWNvbXBvbmVudExlbmd0aCkgewotICAgICAgICAgICAgICAgIC8v
IFRoZSBleGNlcHRpb24gaXMgd2hlbiBjb250cmFjdGlvbnMgYXBwZWFyIGF0IGJlZ2lubmluZyBv
ZiB0aGUKLSAgICAgICAgICAgICAgICAvLyBpbnB1dCBvciBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1
dC4KLSAgICAgICAgICAgICAgICBpZiAoISgoaXNDb250cmFjdGlvbiAmJiBpID09IGJlZ2luKSB8
fCAoaSA9PSBlbmQgJiYgcGFyc2VkLmluZGV4T2ZDb250cmFjdGlvbiA9PSBwYXJzZWQubnVtSGV4
Q29tcG9uZW50cykpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEFkZCB0aGUgaGV4IGNvbXBvbmVudCB3ZSBqdXN0IGZv
dW5kIHRvIHJ1bm5pbmcgbGlzdC4KLSAgICAgICAgICAgIGlmIChjb21wb25lbnRMZW5ndGggPiAw
KSB7Ci0gICAgICAgICAgICAgICAgLy8gQ2FuJ3QgaGF2ZSBtb3JlIHRoYW4gOCBjb21wb25lbnRz
IQotICAgICAgICAgICAgICAgIGlmIChwYXJzZWQubnVtSGV4Q29tcG9uZW50cyA+PSA4KQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICBwYXJzZWQu
aGV4Q29tcG9uZW50c1twYXJzZWQubnVtSGV4Q29tcG9uZW50cysrXSA9Ci0gICAgICAgICAgICAg
ICAgVVJMQ29tcG9uZW50KGN1cnJlbnRDb21wb25lbnRCZWdpbiwgY29tcG9uZW50TGVuZ3RoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpID09IGVuZCkKLSAgICAg
ICAgICAgIGJyZWFrOyAvLyBSZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGlucHV0LCBET05FLgotCi0g
ICAgICAgIC8vIFdlIGZvdW5kIGEgIjo6IiBjb250cmFjdGlvbi4KLSAgICAgICAgaWYgKGlzQ29u
dHJhY3Rpb24pIHsKLSAgICAgICAgICAgIC8vIFRoZXJlIGNhbiBiZSBhdCBtb3N0IG9uZSBjb250
cmFjdGlvbiBpbiB0aGUgbGl0ZXJhbC4KLSAgICAgICAgICAgIGlmIChwYXJzZWQuaW5kZXhPZkNv
bnRyYWN0aW9uICE9IC0xKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIHBhcnNlZC5pbmRleE9mQ29udHJhY3Rpb24gPSBwYXJzZWQubnVtSGV4Q29tcG9uZW50czsK
LSAgICAgICAgICAgICsraTsgLy8gQ29uc3VtZSB0aGUgY29sb24gd2UgcGVla2VkLgotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGlzQ29sb24pIHsKLSAgICAgICAgICAgIC8vIENvbG9ucyBhcmUg
c2VwYXJhdG9ycyBiZXR3ZWVuIGNvbXBvbmVudHMsIGtlZXAgdHJhY2sgb2Ygd2hlcmUgdGhlCi0g
ICAgICAgICAgICAvLyBjdXJyZW50IGNvbXBvbmVudCBzdGFydGVkIChhZnRlciB0aGlzIGNvbG9u
KS4KLSAgICAgICAgICAgIGN1cnJlbnRDb21wb25lbnRCZWdpbiA9IGkgKyAxOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PFVDSEFSPihzcGVjW2ldKSA+PSAw
eDgwKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gTm90IEFTQ0lJLgotCi0gICAg
ICAgICAgICBpZiAoIVVSTENoYXJhY3RlclR5cGVzOjppc0hleENoYXIoc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oc3BlY1tpXSkpKSB7Ci0gICAgICAgICAgICAgICAgLy8gUmVndWxhciBjb21w
b25lbnRzIGFyZSBoZXggbnVtYmVycy4gSXQgaXMgYWxzbyBwb3NzaWJsZSBmb3IKLSAgICAgICAg
ICAgICAgICAvLyBhIGNvbXBvbmVudCB0byBiZSBhbiBJUHY0IGFkZHJlc3MgaW4gZG90dGVkIGZv
cm0uCi0gICAgICAgICAgICAgICAgaWYgKFVSTENoYXJhY3RlclR5cGVzOjppc0lQdjRDaGFyKHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHNwZWNbaV0pKSkgewotICAgICAgICAgICAgICAgICAg
ICAvLyBTaW5jZSBJUHY0IGFkZHJlc3MgY2FuIG9ubHkgYXBwZWFyIGF0IHRoZSBlbmQsIGFzc3Vt
ZSB0aGUgcmVzdAotICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgc3RyaW5nIGlzIGFuIElQ
djQgYWRkcmVzcy4gKFdlIHdpbGwgcGFyc2UgdGhpcyBzZXBhcmF0ZWx5Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIGxhdGVyKS4KLSAgICAgICAgICAgICAgICAgICAgcGFyc2VkLmlwdjRDb21wb25l
bnQgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShjdXJyZW50Q29tcG9uZW50QmVnaW4sIGVuZCk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAvLyBUaGUgY2hhcmFjdGVyIHdhcyBuZWl0aGVyIGEgaGV4IGRpZ2l0LCBub3IgYW4g
SVB2NCBjaGFyYWN0ZXIuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIFZlcmlm
aWVzIHRoZSBwYXJzZWQgSVB2NiBpbmZvcm1hdGlvbiwgY2hlY2tpbmcgdGhhdCB0aGUgdmFyaW91
cyBjb21wb25lbnRzCi0vLyBhZGQgdXAgdG8gdGhlIHJpZ2h0IG51bWJlciBvZiBiaXRzIChoZXgg
Y29tcG9uZW50cyBhcmUgMTYgYml0cywgd2hpbGUKLS8vIGVtYmVkZGVkIElQdjQgZm9ybWF0cyBh
cmUgMzIgYml0cywgYW5kIGNvbnRyYWN0aW9ucyBhcmUgcGxhY2Vob2xkZXMgZm9yCi0vLyAxNiBv
ciBtb3JlIGJpdHMpLiBSZXR1cm5zIHRydWUgaWYgc2l6ZXMgbWF0Y2ggdXAsIGZhbHNlIG90aGVy
d2lzZS4gT24KLS8vIHN1Y2Nlc3Mgd3JpdGVzIHRoZSBsZW5ndGggb2YgdGhlIGNvbnRyYWN0aW9u
IChpZiBhbnkpIHRvCi0vLyB8b3V0TnVtQnl0ZXNPZkNvbnRyYWN0aW9ufC4KLWJvb2wgQ2hlY2tJ
UHY2Q29tcG9uZW50c1NpemUoY29uc3QgSVB2NlBhcnNlZCYgcGFyc2VkLCBpbnQqIG91dE51bUJ5
dGVzT2ZDb250cmFjdGlvbikKLXsKLSAgICAvLyBFYWNoIGdyb3VwIG9mIGZvdXIgaGV4IGRpZ2l0
cyBjb250cmlidXRlcyAxNiBiaXRzLgotICAgIGludCBudW1CeXRlc1dpdGhvdXRDb250cmFjdGlv
biA9IHBhcnNlZC5udW1IZXhDb21wb25lbnRzICogMjsKLQotICAgIC8vIElmIGFuIElQdjQgYWRk
cmVzcyB3YXMgZW1iZWRkZWQgYXQgdGhlIGVuZCwgaXQgY29udHJpYnV0ZXMgMzIgYml0cy4KLSAg
ICBpZiAocGFyc2VkLmlwdjRDb21wb25lbnQuaXNWYWxpZCgpKQotICAgICAgICBudW1CeXRlc1dp
dGhvdXRDb250cmFjdGlvbiArPSA0OwotCi0gICAgLy8gSWYgdGhlcmUgd2FzIGEgIjo6IiBjb250
cmFjdGlvbiwgaXRzIHNpemUgaXMgZ29pbmcgdG8gYmU6Ci0gICAgLy8gTUFYKFsxNmJpdHNdLCBb
MTI4Yml0c10gLSBudW1CeXRlc1dpdGhvdXRDb250cmFjdGlvbikuCi0gICAgaW50IG51bUJ5dGVz
T2ZDb250cmFjdGlvbiA9IDA7Ci0gICAgaWYgKHBhcnNlZC5pbmRleE9mQ29udHJhY3Rpb24gIT0g
LTEpIHsKLSAgICAgICAgbnVtQnl0ZXNPZkNvbnRyYWN0aW9uID0gMTYgLSBudW1CeXRlc1dpdGhv
dXRDb250cmFjdGlvbjsKLSAgICAgICAgaWYgKG51bUJ5dGVzT2ZDb250cmFjdGlvbiA8IDIpCi0g
ICAgICAgICAgICBudW1CeXRlc09mQ29udHJhY3Rpb24gPSAyOwotICAgIH0KLQotICAgIC8vIENo
ZWNrIHRoYXQgdGhlIG51bWJlcnMgYWRkIHVwLgotICAgIGlmIChudW1CeXRlc1dpdGhvdXRDb250
cmFjdGlvbiArIG51bUJ5dGVzT2ZDb250cmFjdGlvbiAhPSAxNikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgKm91dE51bUJ5dGVzT2ZDb250cmFjdGlvbiA9IG51bUJ5dGVzT2ZDb250cmFj
dGlvbjsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gQ29udmVydHMgYSBoZXggY29tb25lbnQg
aW50byBhIG51bWJlci4gVGhpcyBjYW5ub3QgZmFpbCBzaW5jZSB0aGUgY2FsbGVyIGhhcwotLy8g
YWxyZWFkeSB2ZXJpZmllZCB0aGF0IGVhY2ggY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcgd2FzIGEg
aGV4IGRpZ2l0LCBhbmQKLS8vIHRoYXQgdGhlcmUgd2VyZSBubyBtb3JlIHRoYW4gNCBjaGFyYWN0
ZXJzLgotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXVpbnQxNl90IElQdjZIZXhD
b21wb25lbnRUb051bWJlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21w
b25lbnQmIGNvbXBvbmVudCkKLXsKLSAgICBBU1NFUlQoY29tcG9uZW50Lmxlbmd0aCgpIDw9IDQp
OwotCi0gICAgLy8gQ29weSB0aGUgaGV4IHN0cmluZyBpbnRvIGEgQy1zdHJpbmcuCi0gICAgY2hh
ciBidWZbNV07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb21wb25lbnQubGVuZ3RoKCk7ICsr
aSkKLSAgICAgICAgYnVmW2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4oc3BlY1tjb21wb25lbnQuYmVn
aW4oKSArIGldKTsKLSAgICBidWZbY29tcG9uZW50Lmxlbmd0aCgpXSA9ICdcMCc7Ci0KLSAgICAv
LyBDb252ZXJ0IGl0IHRvIGEgbnVtYmVyIChvdmVyZmxvdyBpcyBub3QgcG9zc2libGUsIHNpbmNl
IHdpdGggNCBoZXgKLSAgICAvLyBjaGFyYWN0ZXJzIHdlIGNhbiBhdCBtb3N0IGhhdmUgYSAxNiBi
aXQgbnVtYmVyKS4KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KF9zdHJ0b3VpNjQo
YnVmLCAwLCAxNikpOwotfQotCi0vLyBDb252ZXJ0cyBhbiBJUHY2IGFkZHJlc3MgdG8gYSAxMjgt
Yml0IG51bWJlciAobmV0d29yayBieXRlIG9yZGVyKSwgcmV0dXJuaW5nCi0vLyB0cnVlIG9uIHN1
Y2Nlc3MuIEZhbHNlIG1lYW5zIHRoYXQgdGhlIGlucHV0IHdhcyBub3QgYSB2YWxpZCBJUHY2IGFk
ZHJlc3MuCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBVQ0hBUj4K
LWJvb2wgZG9JUHY2QWRkcmVzc1RvTnVtYmVyKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIGhvc3QsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFkZHJlc3NbMTZdKQotewotICAg
IC8vIE1ha2Ugc3VyZSB0aGUgY29tcG9uZW50IGlzIGJvdW5kZWQgYnkgJ1snIGFuZCAnXScuCi0g
ICAgaW50IGVuZCA9IGhvc3QuZW5kKCk7Ci0gICAgaWYgKCFob3N0LmlzTm9uRW1wdHkoKSB8fCBz
cGVjW2hvc3QuYmVnaW4oKV0gIT0gJ1snIHx8IHNwZWNbZW5kIC0gMV0gIT0gJ10nKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBFeGNsdWRlIHRoZSBzcXVhcmUgYnJhY2tldHMuCi0g
ICAgVVJMQ29tcG9uZW50IGlwdjZDb21wb25lbnQoaG9zdC5iZWdpbigpICsgMSwgaG9zdC5sZW5n
dGgoKSAtIDIpOwotCi0gICAgLy8gUGFyc2UgdGhlIElQdjYgYWRkcmVzcyAtLSBpZGVudGlmeSB3
aGVyZSBhbGwgdGhlIGNvbG9uIHNlcGFyYXRlZCBoZXgKLSAgICAvLyBjb21wb25lbnRzIGFyZSwg
dGhlICI6OiIgY29udHJhY3Rpb24sIGFuZCB0aGUgZW1iZWRkZWQgSVB2NCBhZGRyZXNzLgotICAg
IElQdjZQYXJzZWQgaXB2NlBhcnNlZDsKLSAgICBpZiAoIWRvUGFyc2VJUHY2PENoYXJhY3RlclR5
cGUsIFVDSEFSPihzcGVjLCBpcHY2Q29tcG9uZW50LCBpcHY2UGFyc2VkKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgLy8gRG8gc29tZSBiYXNpYyBzaXplIGNoZWNrcyB0byBtYWtlIHN1
cmUgdGhhdCB0aGUgYWRkcmVzcyBkb2Vzbid0Ci0gICAgLy8gc3BlY2lmeSBtb3JlIHRoYW4gMTI4
IGJpdHMgb3IgZmV3ZXIgdGhhbiAxMjggYml0cy4gVGhpcyBhbHNvIHJlc29sdmVzCi0gICAgLy8g
aG93IG1heSB6ZXJvIGJ5dGVzIHRoZSAiOjoiIGNvbnRyYWN0aW9uIHJlcHJlc2VudHMuCi0gICAg
aW50IG51bUJ5dGVzT2ZDb250cmFjdGlvbjsKLSAgICBpZiAoIUNoZWNrSVB2NkNvbXBvbmVudHNT
aXplKGlwdjZQYXJzZWQsICZudW1CeXRlc09mQ29udHJhY3Rpb24pKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpbnQgY3VycmVudEluZGV4SW5BZGRyZXNzID0gMDsKLQotICAgIC8vIExv
b3AgdGhyb3VnaCBlYWNoIGhleCBjb21wb25lbnRzLCBhbmQgY29udHJhY3Rpb24gaW4gb3JkZXIu
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gaXB2NlBhcnNlZC5udW1IZXhDb21wb25lbnRzOyAr
K2kpIHsKLSAgICAgICAgLy8gQXBwZW5kIHRoZSBjb250cmFjdGlvbiBpZiBpdCBhcHBlYXJzIGJl
Zm9yZSB0aGlzIGNvbXBvbmVudC4KLSAgICAgICAgaWYgKGkgPT0gaXB2NlBhcnNlZC5pbmRleE9m
Q29udHJhY3Rpb24pIHsKLSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtQnl0ZXNP
ZkNvbnRyYWN0aW9uOyArK2opCi0gICAgICAgICAgICAgICAgYWRkcmVzc1tjdXJyZW50SW5kZXhJ
bkFkZHJlc3MrK10gPSAwOwotICAgICAgICB9Ci0gICAgICAgIC8vIEFwcGVuZCB0aGUgaGV4IGNv
bXBvbmVudCdzIHZhbHVlLgotICAgICAgICBpZiAoaSAhPSBpcHY2UGFyc2VkLm51bUhleENvbXBv
bmVudHMpIHsKLSAgICAgICAgICAgIC8vIEdldCB0aGUgMTYtYml0IHZhbHVlIGZvciB0aGlzIGhl
eCBjb21wb25lbnQuCi0gICAgICAgICAgICB1aW50MTZfdCBudW1iZXIgPSBJUHY2SGV4Q29tcG9u
ZW50VG9OdW1iZXI8Q2hhcmFjdGVyVHlwZT4oc3BlYywgaXB2NlBhcnNlZC5oZXhDb21wb25lbnRz
W2ldKTsKLSAgICAgICAgICAgIC8vIEFwcGVuZCB0byB8YWRkcmVzc3wsIGluIG5ldHdvcmsgYnl0
ZSBvcmRlci4KLSAgICAgICAgICAgIGFkZHJlc3NbY3VycmVudEluZGV4SW5BZGRyZXNzKytdID0g
KG51bWJlciAmIDB4RkYwMCkgPj4gODsKLSAgICAgICAgICAgIGFkZHJlc3NbY3VycmVudEluZGV4
SW5BZGRyZXNzKytdID0gKG51bWJlciAmIDB4MDBGRik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICAvLyBJZiB0aGVyZSB3YXMgYW4gSVB2NCBzZWN0aW9uLCBjb252ZXJ0IGl0IGludG8gYSAzMi1i
aXQgbnVtYmVyIGFuZCBhcHBlbmQKLSAgICAvLyBpdCB0byB8YWRkcmVzc3wuCi0gICAgaWYgKGlw
djZQYXJzZWQuaXB2NENvbXBvbmVudC5pc1ZhbGlkKCkpIHsKLSAgICAgICAgLy8gQXBwZW5kIHRo
ZSAzMi1iaXQgbnVtYmVyIHRvIHxhZGRyZXNzfC4KLSAgICAgICAgaW50IGlnbm9yZWRJUHY0Q29t
cG9uZW50c0NvdW50OwotICAgICAgICBpZiAoQ2Fub25Ib3N0SW5mbzo6SVBWNCAhPQotICAgICAg
ICAgICAgZG9JUHY0QWRkcmVzc1RvTnVtYmVyKHNwZWMsIGlwdjZQYXJzZWQuaXB2NENvbXBvbmVu
dCwgJmFkZHJlc3NbY3VycmVudEluZGV4SW5BZGRyZXNzXSwgaWdub3JlZElQdjRDb21wb25lbnRz
Q291bnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotCi0vLyBTZWFyY2hlcyBmb3IgdGhlIGxvbmdlc3Qgc2VxdWVuY2Ugb2YgemVyb3Mg
aW4gfGFkZHJlc3N8LCBhbmQgd3JpdGVzIHRoZQotLy8gcmFuZ2UgaW50byB8Y29udHJhY3Rpb25S
YW5nZXwuIFRoZSBydW4gb2YgemVyb3MgbXVzdCBiZSBhdCBsZWFzdCAxNiBiaXRzLAotLy8gYW5k
IGlmIHRoZXJlIGlzIGEgdGllIHRoZSBmaXJzdCBpcyBjaG9zZW4uCi12b2lkIENob29zZUlQdjZD
b250cmFjdGlvblJhbmdlKGNvbnN0IHVuc2lnbmVkIGNoYXIgYWRkcmVzc1sxNl0sIFVSTENvbXBv
bmVudCogY29udHJhY3Rpb25SYW5nZSkKLXsKLSAgICAvLyBUaGUgbG9uZ2VzdCBydW4gb2YgemVy
b3MgaW4gfGFkZHJlc3N8IHNlZW4gc28gZmFyLgotICAgIFVSTENvbXBvbmVudCBtYXhSYW5nZTsK
LQotICAgIC8vIFRoZSBjdXJyZW50IHJ1biBvZiB6ZXJvcyBpbiB8YWRkcmVzc3wgYmVpbmcgaXRl
cmF0ZWQgb3Zlci4KLSAgICBVUkxDb21wb25lbnQgY3VycmVudFJhbmdlOwotCi0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCAxNjsgaSArPSAyKSB7Ci0gICAgICAgIC8vIFRlc3QgZm9yIDE2IGJpdHMg
d29ydGggb2YgemVyby4KLSAgICAgICAgYm9vbCBpc1plcm8gPSAoIWFkZHJlc3NbaV0gJiYgIWFk
ZHJlc3NbaSArIDFdKTsKLQotICAgICAgICBpZiAoaXNaZXJvKSB7Ci0gICAgICAgICAgICAvLyBB
ZGQgdGhlIHplcm8gdG8gdGhlIGN1cnJlbnQgcmFuZ2UgKG9yIHN0YXJ0IGEgbmV3IG9uZSkuCi0g
ICAgICAgICAgICBpZiAoIWN1cnJlbnRSYW5nZS5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAg
Y3VycmVudFJhbmdlID0gVVJMQ29tcG9uZW50KGksIDApOwotICAgICAgICAgICAgY3VycmVudFJh
bmdlLnNldExlbmd0aChjdXJyZW50UmFuZ2UubGVuZ3RoKCkgKyAyKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmICghaXNaZXJvIHx8IGkgPT0gMTQpIHsKLSAgICAgICAgICAgIC8vIEp1c3QgY29t
cGxldGVkIGEgcnVuIG9mIHplcm9zLiBJZiB0aGUgcnVuIGlzIGdyZWF0ZXIgdGhhbiAxNiBiaXRz
LAotICAgICAgICAgICAgLy8gaXQgaXMgYSBjYW5kaWRhdGUgZm9yIHRoZSBjb250cmFjdGlvbi4K
LSAgICAgICAgICAgIGlmIChjdXJyZW50UmFuZ2UubGVuZ3RoKCkgPiAyICYmIGN1cnJlbnRSYW5n
ZS5sZW5ndGgoKSA+IG1heFJhbmdlLmxlbmd0aCgpKQotICAgICAgICAgICAgICAgIG1heFJhbmdl
ID0gY3VycmVudFJhbmdlOwotCi0gICAgICAgICAgICBjdXJyZW50UmFuZ2UucmVzZXQoKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICAqY29udHJhY3Rpb25SYW5nZSA9IG1heFJhbmdlOwotfQotCi1z
dGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kSVB2NkFkZHJlc3MoY29uc3QgdW5zaWduZWQgY2hhciBh
ZGRyZXNzWzE2XSwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCi17Ci0gICAgLy8gV2Ugd2lsbCBv
dXRwdXQgdGhlIGFkZHJlc3MgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBpbjoKLSAgICAvLyBodHRw
Oi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1rYXdhbXVyYS1pcHY2LXRleHQtcmVwcmVzZW50
YXRpb24tMDEjc2VjdGlvbi00Ci0KLSAgICAvLyBTdGFydCBieSBmaW5kaW5nIHdoZXJlIHRvIHBs
YWNlIHRoZSAiOjoiIGNvbnRyYWN0aW9uIChpZiBhbnkpLgotICAgIFVSTENvbXBvbmVudCBjb250
cmFjdGlvblJhbmdlOwotICAgIENob29zZUlQdjZDb250cmFjdGlvblJhbmdlKGFkZHJlc3MsICZj
b250cmFjdGlvblJhbmdlKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDE0OykgewotICAg
ICAgICAvLyBXZSBjaGVjayAyIGJ5dGVzIGF0IGEgdGltZSwgZnJvbSBieXRlcyAoMCwgMSkgdG8g
KDE0LCAxNSksIGluY2x1c2l2ZS4KLSAgICAgICAgQVNTRVJUKCEoaSAlIDIpKTsKLSAgICAgICAg
aWYgKGkgPT0gY29udHJhY3Rpb25SYW5nZS5iZWdpbigpICYmIGNvbnRyYWN0aW9uUmFuZ2UubGVu
Z3RoKCkgPiAwKSB7Ci0gICAgICAgICAgICAvLyBKdW1wIG92ZXIgdGhlIGNvbnRyYWN0aW9uLgot
ICAgICAgICAgICAgaWYgKCFpKQotICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJzonKTsK
LSAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJzonKTsKLSAgICAgICAgICAgIGkgPSBjb250cmFj
dGlvblJhbmdlLmVuZCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gQ29uc3Vt
ZSB0aGUgbmV4dCAxNiBiaXRzIGZyb20gfGFkZHJlc3N8LgotICAgICAgICAgICAgaW50IHggPSBh
ZGRyZXNzW2ldIDw8IDggfCBhZGRyZXNzW2kgKyAxXTsKLQotICAgICAgICAgICAgaSArPSAyOwot
Ci0gICAgICAgICAgICAvLyBTdHJpbmdpZnkgdGhlIDE2IGJpdCBudW1iZXIgKGF0IG1vc3QgcmVx
dWlyZXMgNCBoZXggZGlnaXRzKS4KLSAgICAgICAgICAgIGNoYXIgc3RyWzVdOwotICAgICAgICAg
ICAgX2l0b2Ffcyh4LCBzdHIsIDE2KTsKLSAgICAgICAgICAgIGZvciAoaW50IGNoID0gMDsgc3Ry
W2NoXTsgKytjaCkKLSAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHN0cltjaF0pOwotCi0g
ICAgICAgICAgICAvLyBQdXQgYSBjb2xvbiBhZnRlciBlYWNoIG51bWJlciwgZXhjZXB0IHRoZSBs
YXN0LgotICAgICAgICAgICAgaWYgKGkgPCAxNikKLSAgICAgICAgICAgICAgICBvdXRwdXQuYXBw
ZW5kKCc6Jyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vIFJldHVybiB0cnVlIGlmIHdlJ3Zl
IG1hZGUgYSBmaW5hbCBJUFY2L0JST0tFTiBkZWNpc2lvbiwgZmFsc2UgaWYgdGhlIHJlc3VsdAot
Ly8gaXMgTkVVVFJBTCwgYW5kIHdlIGNvdWxkIHVzZSBhIHNlY29uZCBvcGluaW9uLgotdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgVUNIQVI+Ci1ib29sIGRvQ2Fub25p
Y2FsaXplSVB2NkFkZHJlc3MoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJMQ29t
cG9uZW50JiBob3N0LCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgQ2Fub25Ib3N0SW5mbyYgaG9z
dEluZm8pCi17Ci0gICAgLy8gVHVybiB0aGUgSVAgYWRkcmVzcyBpbnRvIGEgMTI4IGJpdCBudW1i
ZXIuCi0gICAgaWYgKCFkb0lQdjZBZGRyZXNzVG9OdW1iZXI8Q2hhcmFjdGVyVHlwZSwgVUNIQVI+
KHNwZWMsIGhvc3QsIGhvc3RJbmZvLmFkZHJlc3MpKSB7Ci0gICAgICAgIC8vIElmIGl0J3Mgbm90
IGFuIElQdjYgYWRkcmVzcywgc2NhbiBmb3IgY2hhcmFjdGVycyB0aGF0IHNob3VsZCAqb25seSoK
LSAgICAgICAgLy8gZXhpc3QgaW4gYW4gSVB2NiBhZGRyZXNzLgotICAgICAgICBmb3IgKGludCBp
ID0gaG9zdC5iZWdpbigpOyBpIDwgaG9zdC5lbmQoKTsgaSsrKSB7Ci0gICAgICAgICAgICBzd2l0
Y2ggKHNwZWNbaV0pIHsKLSAgICAgICAgICAgIGNhc2UgJ1snOgotICAgICAgICAgICAgY2FzZSAn
XSc6Ci0gICAgICAgICAgICBjYXNlICc6JzoKLSAgICAgICAgICAgICAgICBob3N0SW5mby5mYW1p
bHkgPSBDYW5vbkhvc3RJbmZvOjpCUk9LRU47Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBObyBpbnZhbGlkIGNoYXJh
Y3RlcnMuIENvdWxkIHN0aWxsIGJlIElQdjQgb3IgYSBob3N0bmFtZS4KLSAgICAgICAgaG9zdElu
Zm8uZmFtaWx5ID0gQ2Fub25Ib3N0SW5mbzo6TkVVVFJBTDsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGhvc3RJbmZvLm91cHV0SG9zdC5zZXRCZWdpbihvdXRwdXQubGVuZ3Ro
KCkpOwotICAgIG91dHB1dC5hcHBlbmQoJ1snKTsKLSAgICBhcHBlbmRJUHY2QWRkcmVzcyhob3N0
SW5mby5hZGRyZXNzLCBvdXRwdXQpOwotICAgIG91dHB1dC5hcHBlbmQoJ10nKTsKLSAgICBob3N0
SW5mby5vdXB1dEhvc3Quc2V0TGVuZ3RoKG91dHB1dC5sZW5ndGgoKSAtIGhvc3RJbmZvLm91cHV0
SG9zdC5iZWdpbigpKTsKLQotICAgIGhvc3RJbmZvLmZhbWlseSA9IENhbm9uSG9zdEluZm86OklQ
VjY7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLXZvaWQgY2Fub25p
Y2FsaXplSVBBZGRyZXNzKGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgaG9z
dCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIENhbm9uSG9zdEluZm8mIGhvc3RJbmZvKQotewot
ICAgIGlmIChkb0Nhbm9uaWNhbGl6ZUlQdjRBZGRyZXNzPGNoYXIsIHVuc2lnbmVkIGNoYXI+KHNw
ZWMsIGhvc3QsIG91dHB1dCwgaG9zdEluZm8pKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGRv
Q2Fub25pY2FsaXplSVB2NkFkZHJlc3M8Y2hhciwgdW5zaWduZWQgY2hhcj4oc3BlYywgaG9zdCwg
b3V0cHV0LCBob3N0SW5mbykpCi0gICAgICAgIHJldHVybjsKLX0KLQotdm9pZCBjYW5vbmljYWxp
emVJUEFkZHJlc3MoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgaG9zdCwg
VVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIENhbm9uSG9zdEluZm8mIGhvc3RJbmZvKQotewotICAg
IGlmIChkb0Nhbm9uaWNhbGl6ZUlQdjRBZGRyZXNzPFVDaGFyLCBVQ2hhcj4oc3BlYywgaG9zdCwg
b3V0cHV0LCBob3N0SW5mbykpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoZG9DYW5vbmljYWxp
emVJUHY2QWRkcmVzczxVQ2hhciwgVUNoYXI+KHNwZWMsIGhvc3QsIG91dHB1dCwgaG9zdEluZm8p
KQotICAgICAgICByZXR1cm47Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIK
LQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbkludGVybmFsLmNwcCBiL1NvdXJjZS9X
VEYvd3RmL3VybC9zcmMvVVJMQ2Fub25JbnRlcm5hbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGI3YWUwOTgxNGU4ODRjZWVlNGJiYjU3NWRiOWJjOTY0NDVjNDNiMjUuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYv
dXJsL3NyYy9VUkxDYW5vbkludGVybmFsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMxMCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IDIwMDcgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVVJMQ2Fub25JbnRlcm5hbC5oIgotCi0jaW5jbHVkZSA8
Y3N0ZGlvPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVk
ZSA8c3RyaW5nPgotCi0jaWYgVVNFKFdURlVSTCkKLQotbmFtZXNwYWNlIFdURiB7Ci0KLW5hbWVz
cGFjZSBVUkxDYW5vbmljYWxpemVyIHsKLQotbmFtZXNwYWNlIHsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgVUNIQVI+Ci12b2lkIGRvQXBwZW5kU3RyaW5nT2ZU
eXBlKGNvbnN0IENoYXJhY3RlclR5cGUqIHNvdXJjZSwgaW50IGxlbmd0aCwgVVJMQ2hhcmFjdGVy
VHlwZXM6OkNoYXJhY3RlclR5cGVzIHR5cGUsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQotewot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKHN0YXRp
Y19jYXN0PFVDSEFSPihzb3VyY2VbaV0pID49IDB4ODApIHsKLSAgICAgICAgICAgIC8vIFJlYWRD
aGFyIHdpbGwgZmlsbCB0aGUgY29kZSBwb2ludCB3aXRoIGtVbmljb2RlUmVwbGFjZW1lbnRDaGFy
YWN0ZXIKLSAgICAgICAgICAgIC8vIHdoZW4gdGhlIGlucHV0IGlzIGludmFsaWQsIHdoaWNoIGlz
IHdoYXQgd2Ugd2FudC4KLSAgICAgICAgICAgIHVuc2lnbmVkIGNvZGVQb2ludDsKLSAgICAgICAg
ICAgIHJlYWRVVEZDaGFyKHNvdXJjZSwgJmksIGxlbmd0aCwgJmNvZGVQb2ludCk7Ci0gICAgICAg
ICAgICBBcHBlbmRVVEY4RXNjYXBlZFZhbHVlKGNvZGVQb2ludCwgb3V0cHV0KTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEp1c3QgYXBwZW5kIHRoZSA3LWJpdCBjaGFyYWN0ZXIs
IHBvc3NpYmx5IGVzY2FwaW5nIGl0LgotICAgICAgICAgICAgdW5zaWduZWQgY2hhciB1Y2ggPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihzb3VyY2VbaV0pOwotICAgICAgICAgICAgaWYgKCFV
UkxDaGFyYWN0ZXJUeXBlczo6aXNDaGFyYWN0ZXJPZlR5cGUodWNoLCB0eXBlKSkKLSAgICAgICAg
ICAgICAgICBhcHBlbmRVUkxFc2NhcGVkQ2hhcmFjdGVyKHVjaCwgb3V0cHV0KTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHVjaCk7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGUgaW5wdXQgdmFsdWVzIGFy
ZSBhbGwgY29udGFpbmVkIGluIDgtYml0LAotLy8gYWx0aG91Z2ggaXQgYWxsb3dzIGFueSB0eXBl
LiBSZXR1cm5zIHRydWUgaWYgaW5wdXQgaXMgdmFsaWQsIGZhbHNlIGlmIG5vdC4KLXRlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIFVDSEFSPgotdm9pZCBkb0FwcGVuZElu
dmFsaWROYXJyb3dTdHJpbmcoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgaW50IGJlZ2luLCBp
bnQgZW5kLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKLXsKLSAgICBmb3IgKGludCBpID0gYmVn
aW47IGkgPCBlbmQ7ICsraSkgewotICAgICAgICBVQ0hBUiB1Y2ggPSBzdGF0aWNfY2FzdDxVQ0hB
Uj4oc3BlY1tpXSk7Ci0gICAgICAgIGlmICh1Y2ggPj0gMHg4MCkgewotICAgICAgICAgICAgLy8g
SGFuZGxlIFVURi04LzE2IGVuY29kaW5ncy4gVGhpcyBjYWxsIHdpbGwgY29ycmVjdGx5IGhhbmRs
ZSB0aGUgZXJyb3IKLSAgICAgICAgICAgIC8vIGNhc2UgYnkgYXBwZW5kaW5nIHRoZSBpbnZhbGlk
IGNoYXJhY3Rlci4KLSAgICAgICAgICAgIEFwcGVuZFVURjhFc2NhcGVkQ2hhcihzcGVjLCAmaSwg
ZW5kLCBvdXRwdXQpOwotICAgICAgICB9IGVsc2UgaWYgKHVjaCA8PSAnICcgfHwgdWNoID09IDB4
N2YpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgZm9yIGVycm9yIGhhbmRsaW5n
LCBzbyB3ZSBlc2NhcGUgYWxsIGNvbnRyb2wKLSAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgYW5k
IHNwYWNlcywgYnV0IG5vdCBhbnl0aGluZyBlbHNlIHNpbmNlIHdlIGxhY2sKLSAgICAgICAgICAg
IC8vIGNvbnRleHQgdG8gZG8gc29tZXRoaW5nIG1vcmUgc3BlY2lmaWMuCi0gICAgICAgICAgICBh
cHBlbmRVUkxFc2NhcGVkQ2hhcmFjdGVyKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHVjaCks
IG91dHB1dCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChzdGF0
aWNfY2FzdDxjaGFyPih1Y2gpKTsKLSAgICB9Ci19Ci0KLS8vIE92ZXJyaWRlcyBvbmUgY29tcG9u
ZW50LCBzZWUgdGhlIFVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VtZW50cyBzdHJ1Y3R1cmUgZm9y
Ci0vLyB3aGF0IHRoZSB2YXJpb3VzIGNvbWJpb25hdGlvbnMgb2Ygc291cmNlIHBvaW50ZXIgYW5k
IGNvbXBvbmVudCBtZWFuLgotdm9pZCBkb092ZXJyaWRlQ29tcG9uZW50KGNvbnN0IGNoYXIqIG92
ZXJyaWRlU291cmNlLCBjb25zdCBVUkxDb21wb25lbnQmIG92ZXJyaWRlQ29tcG9uZW50LCBjb25z
dCBjaGFyKiYgZGVzdGluYXRpb24sIFVSTENvbXBvbmVudCYgZGVzdGluYXRpb25Db21wb25lbnQp
Ci17Ci0gICAgaWYgKG92ZXJyaWRlU291cmNlKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uID0gb3Zl
cnJpZGVTb3VyY2U7Ci0gICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50ID0gb3ZlcnJpZGVDb21w
b25lbnQ7Ci0gICAgfQotfQotCi0vLyBTaW1pbGFyIHRvIGRvT3ZlcnJpZGVDb21wb25lbnQgZXhj
ZXB0IHRoYXQgaXQgdGFrZXMgYSBVVEYtMTYgaW5wdXQgYW5kIGRvZXMKLS8vIG5vdCBhY3R1YWxs
eSBzZXQgdGhlIG91dHB1dCBjaGFyYWN0ZXIgcG9pbnRlci4KLS8vCi0vLyBUaGUgaW5wdXQgaXMg
Y29udmVydGVkIHRvIFVURi04IGF0IHRoZSBlbmQgb2YgdGhlIGdpdmVuIGJ1ZmZlciBhcyBhIHRl
bXBvcmFyeQotLy8gaG9sZGluZyBwbGFjZS4gVGhlIGNvbXBvbmVudCBpbmRlbnRpZnlpbmcgdGhl
IHBvcnRpb24gb2YgdGhlIGJ1ZmZlciB1c2VkIGluCi0vLyB0aGUgfHV0ZjhCdWZmZXJ8IHdpbGwg
YmUgc3BlY2lmaWVkIGluIHwqZGVzdGluYXRpb25Db21wb25lbnR8LgotLy8KLS8vIFRoaXMgd2ls
bCBub3QgYWN0dWFsbHkgc2V0IGFueSB8ZGVzdHwgcG9pbnRlciBsaWtlIGRvT3ZlcnJpZGVDb21w
b25lbnQKLS8vIGRvZXMgYmVjYXVzZSBhbGwgb2YgdGhlIHBvaW50ZXJzIHdpbGwgcG9pbnQgaW50
byB0aGUgfHV0ZjhCdWZmZXJ8LCB3aGljaAotLy8gbWF5IGdldCByZXNpemVkIHdoaWxlIHdlJ3Jl
IG92ZXJyaWRpbmcgYSBzdWJzZXF1ZW50IGNvbXBvbmVudC4gSW5zdGVhZCwgdGhlCi0vLyBjYWxs
ZXIgc2hvdWxkIHVzZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSB8dXRmOEJ1ZmZlcnwgYXMgdGhlIHN0
cmluZyBwb2ludGVyCi0vLyBmb3IgYWxsIGNvbXBvbmVudHMgb25jZSBhbGwgb3ZlcnJpZGVzIGhh
dmUgYmVlbiBwcmVwYXJlZC4KLWJvb2wgUHJlcGFyZVVURjE2T3ZlcnJpZGVDb21wb25lbnQoY29u
c3QgVUNoYXIqIG92ZXJyaWRlU291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBVUkxDb21wb25lbnQmIG92ZXJyaWRlQ29tcG9uZW50LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIHV0ZjhCdWZmZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCogZGVzdGluYXRpb25D
b21wb25lbnQpCi17Ci0gICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAgICBpZiAob3ZlcnJpZGVT
b3VyY2UpIHsKLSAgICAgICAgaWYgKCFvdmVycmlkZUNvbXBvbmVudC5pc1ZhbGlkKCkpIHsKLSAg
ICAgICAgICAgIC8vIE5vbi0idmFsaWQiIGNvbXBvbmVudCAobWVhbnMgZGVsZXRlKSwgc28gd2Ug
bmVlZCB0byBwcmVzZXJ2ZSB0aGF0LgotICAgICAgICAgICAgKmRlc3RpbmF0aW9uQ29tcG9uZW50
ID0gVVJMQ29tcG9uZW50KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBDb252
ZXJ0IHRvIFVURi04LgotICAgICAgICAgICAgZGVzdGluYXRpb25Db21wb25lbnQtPnNldEJlZ2lu
KHV0ZjhCdWZmZXIubGVuZ3RoKCkpOwotICAgICAgICAgICAgc3VjY2VzcyA9IENvbnZlcnRVVEYx
NlRvVVRGOCgmb3ZlcnJpZGVTb3VyY2Vbb3ZlcnJpZGVDb21wb25lbnQuYmVnaW4oKV0sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlQ29tcG9uZW50Lmxl
bmd0aCgpLCB1dGY4QnVmZmVyKTsKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uQ29tcG9uZW50LT5z
ZXRMZW5ndGgodXRmOEJ1ZmZlci5sZW5ndGgoKSAtIGRlc3RpbmF0aW9uQ29tcG9uZW50LT5iZWdp
bigpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotfSAvLyBu
YW1lc3BhY2UKLQotY29uc3QgY2hhciBrQ2hhclRvSGV4TG9va3VwWzhdID0gewotICAgIDAsIC8v
IDB4MDAgLSAweDFmCi0gICAgJzAnLCAvLyAweDIwIC0gMHgzZjogZGlnaXRzIDAgLSA5IGFyZSAw
eDMwIC0gMHgzOQotICAgICdBJyAtIDEwLCAvLyAweDQwIC0gMHg1ZjogbGV0dGVycyBBIC0gRiBh
cmUgMHg0MSAtIDB4NDYKLSAgICAnYScgLSAxMCwgLy8gMHg2MCAtIDB4N2Y6IGxldHRlcnMgYSAt
IGYgYXJlIDB4NjEgLSAweDY2Ci0gICAgMCwgLy8gMHg4MCAtIDB4OUYKLSAgICAwLCAvLyAweEEw
IC0gMHhCRgotICAgIDAsIC8vIDB4QzAgLSAweERGCi0gICAgMCwgLy8gMHhFMCAtIDB4RkYKLX07
Ci0KLWNvbnN0IFVDaGFyIGtVbmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXIgPSAweGZmZmQ7Ci0K
LXZvaWQgYXBwZW5kU3RyaW5nT2ZUeXBlKGNvbnN0IGNoYXIqIHNvdXJjZSwgaW50IGxlbmd0aCwg
VVJMQ2hhcmFjdGVyVHlwZXM6OkNoYXJhY3RlclR5cGVzIHVybENvbXBvbmVudFR5cGUsIFVSTEJ1
ZmZlcjxjaGFyPiYgb3V0cHV0KQotewotICAgIGRvQXBwZW5kU3RyaW5nT2ZUeXBlPGNoYXIsIHVu
c2lnbmVkIGNoYXI+KHNvdXJjZSwgbGVuZ3RoLCB1cmxDb21wb25lbnRUeXBlLCBvdXRwdXQpOwot
fQotCi12b2lkIGFwcGVuZFN0cmluZ09mVHlwZShjb25zdCBVQ2hhciogc291cmNlLCBpbnQgbGVu
Z3RoLCBVUkxDaGFyYWN0ZXJUeXBlczo6Q2hhcmFjdGVyVHlwZXMgdXJsQ29tcG9uZW50VHlwZSwg
VVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCi17Ci0gICAgZG9BcHBlbmRTdHJpbmdPZlR5cGU8VUNo
YXIsIFVDaGFyPihzb3VyY2UsIGxlbmd0aCwgdXJsQ29tcG9uZW50VHlwZSwgb3V0cHV0KTsKLX0K
LQotdm9pZCBBcHBlbmRJbnZhbGlkTmFycm93U3RyaW5nKGNvbnN0IGNoYXIqIHNwZWMsIGludCBi
ZWdpbiwgaW50IGVuZCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCi17Ci0gICAgZG9BcHBlbmRJ
bnZhbGlkTmFycm93U3RyaW5nPGNoYXIsIHVuc2lnbmVkIGNoYXI+KHNwZWMsIGJlZ2luLCBlbmQs
IG91dHB1dCk7Ci19Ci0KLXZvaWQgQXBwZW5kSW52YWxpZE5hcnJvd1N0cmluZyhjb25zdCBVQ2hh
ciogc3BlYywgaW50IGJlZ2luLCBpbnQgZW5kLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKLXsK
LSAgICBkb0FwcGVuZEludmFsaWROYXJyb3dTdHJpbmc8VUNoYXIsIFVDaGFyPihzcGVjLCBiZWdp
biwgZW5kLCBvdXRwdXQpOwotfQotCi1ib29sIENvbnZlcnRVVEYxNlRvVVRGOChjb25zdCBVQ2hh
ciogaW5wdXQsIGludCBpbnB1dExlbmd0aCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCi17Ci0g
ICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0TGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgdW5zaWduZWQgY29kZVBvaW50OwotICAgICAgICBzdWNjZXNz
ICY9IHJlYWRVVEZDaGFyKGlucHV0LCAmaSwgaW5wdXRMZW5ndGgsICZjb2RlUG9pbnQpOwotICAg
ICAgICBBcHBlbmRVVEY4VmFsdWUoY29kZVBvaW50LCBvdXRwdXQpOwotICAgIH0KLSAgICByZXR1
cm4gc3VjY2VzczsKLX0KLQotYm9vbCBDb252ZXJ0VVRGOFRvVVRGMTYoY29uc3QgY2hhciogaW5w
dXQsIGludCBpbnB1dExlbmd0aCwgVVJMQnVmZmVyPFVDaGFyPiYgb3V0cHV0KQotewotICAgIGJv
b2wgc3VjY2VzcyA9IHRydWU7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dExlbmd0aDsg
aSsrKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNvZGVQb2ludDsKLSAgICAgICAgc3VjY2VzcyAmPSBy
ZWFkVVRGQ2hhcihpbnB1dCwgJmksIGlucHV0TGVuZ3RoLCAmY29kZVBvaW50KTsKLSAgICAgICAg
QXBwZW5kVVRGMTZWYWx1ZShjb2RlUG9pbnQsIG91dHB1dCk7Ci0gICAgfQotICAgIHJldHVybiBz
dWNjZXNzOwotfQotCi12b2lkIFNldHVwT3ZlcnJpZGVDb21wb25lbnRzKGNvbnN0IGNoYXIqIC8q
IGJhc2UgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlcGxhY2VtZW50
czxjaGFyPiYgcmVwbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9uZW50
U291cmNlPGNoYXI+KiBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNl
Z21lbnRzKiBwYXJzZWQpCi17Ci0gICAgLy8gR2V0IHRoZSBzb3VyY2UgYW5kIHBhcnNlZCBzdHJ1
Y3R1cmVzIG9mIHRoZSB0aGluZ3Mgd2UgYXJlIHJlcGxhY2luZy4KLSAgICBjb25zdCBVUkxDb21w
b25lbnRTb3VyY2U8Y2hhcj4mIHJlcGxTb3VyY2UgPSByZXBsLnNvdXJjZXMoKTsKLSAgICBjb25z
dCBVUkxTZWdtZW50cyYgcmVwbFBhcnNlZCA9IHJlcGwuY29tcG9uZW50cygpOwotCi0gICAgZG9P
dmVycmlkZUNvbXBvbmVudChyZXBsU291cmNlLnNjaGVtZSwgcmVwbFBhcnNlZC5zY2hlbWUsIHNv
dXJjZS0+c2NoZW1lLCBwYXJzZWQtPnNjaGVtZSk7Ci0gICAgZG9PdmVycmlkZUNvbXBvbmVudChy
ZXBsU291cmNlLnVzZXJuYW1lLCByZXBsUGFyc2VkLnVzZXJuYW1lLCBzb3VyY2UtPnVzZXJuYW1l
LCBwYXJzZWQtPnVzZXJuYW1lKTsKLSAgICBkb092ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3VyY2Uu
cGFzc3dvcmQsIHJlcGxQYXJzZWQucGFzc3dvcmQsIHNvdXJjZS0+cGFzc3dvcmQsIHBhcnNlZC0+
cGFzc3dvcmQpOwotCi0gICAgLy8gT3VyIGhvc3Qgc2hvdWxkIGJlIGVtcHR5IGlmIG5vdCBwcmVz
ZW50LCBzbyBvdmVycmlkZSB0aGUgZGVmYXVsdCBzZXR1cC4KLSAgICBkb092ZXJyaWRlQ29tcG9u
ZW50KHJlcGxTb3VyY2UuaG9zdCwgcmVwbFBhcnNlZC5ob3N0LCBzb3VyY2UtPmhvc3QsIHBhcnNl
ZC0+aG9zdCk7Ci0gICAgaWYgKHBhcnNlZC0+aG9zdC5sZW5ndGgoKSA9PSAtMSkKLSAgICAgICAg
cGFyc2VkLT5ob3N0LnNldExlbmd0aCgwKTsKLQotICAgIGRvT3ZlcnJpZGVDb21wb25lbnQocmVw
bFNvdXJjZS5wb3J0LCByZXBsUGFyc2VkLnBvcnQsIHNvdXJjZS0+cG9ydCwgcGFyc2VkLT5wb3J0
KTsKLSAgICBkb092ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3VyY2UucGF0aCwgcmVwbFBhcnNlZC5w
YXRoLCBzb3VyY2UtPnBhdGgsIHBhcnNlZC0+cGF0aCk7Ci0gICAgZG9PdmVycmlkZUNvbXBvbmVu
dChyZXBsU291cmNlLnF1ZXJ5LCByZXBsUGFyc2VkLnF1ZXJ5LCBzb3VyY2UtPnF1ZXJ5LCBwYXJz
ZWQtPnF1ZXJ5KTsKLSAgICBkb092ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3VyY2UucmVmLCByZXBs
UGFyc2VkLmZyYWdtZW50LCBzb3VyY2UtPnJlZiwgcGFyc2VkLT5mcmFnbWVudCk7Ci19Ci0KLWJv
b2wgU2V0dXBVVEYxNk92ZXJyaWRlQ29tcG9uZW50cyhjb25zdCBjaGFyKiAvKiBiYXNlICovLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlcGxhY2VtZW50czxVQ2hh
cj4mIHJlcGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNo
YXI+JiB1dGY4QnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTENv
bXBvbmVudFNvdXJjZTxjaGFyPiogc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFVSTFNlZ21lbnRzKiBwYXJzZWQpCi0gICAgewotICAgICAgICBib29sIHN1Y2Nlc3Mg
PSB0cnVlOwotCi0gICAgICAgIC8vIEdldCB0aGUgc291cmNlIGFuZCBwYXJzZWQgc3RydWN0dXJl
cyBvZiB0aGUgdGhpbmdzIHdlIGFyZSByZXBsYWNpbmcuCi0gICAgICAgIGNvbnN0IFVSTENvbXBv
bmVudFNvdXJjZTxVQ2hhcj4mIHJlcGxTb3VyY2UgPSByZXBsLnNvdXJjZXMoKTsKLSAgICAgICAg
Y29uc3QgVVJMU2VnbWVudHMmIHJlcGxQYXJzZWQgPSByZXBsLmNvbXBvbmVudHMoKTsKLQotICAg
ICAgICBzdWNjZXNzICY9IFByZXBhcmVVVEYxNk92ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3VyY2Uu
c2NoZW1lLCByZXBsUGFyc2VkLnNjaGVtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1dGY4QnVmZmVyLCAmcGFyc2VkLT5zY2hlbWUpOwotICAgICAg
ICBzdWNjZXNzICY9IFByZXBhcmVVVEYxNk92ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3VyY2UudXNl
cm5hbWUsIHJlcGxQYXJzZWQudXNlcm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdXRmOEJ1ZmZlciwgJnBhcnNlZC0+dXNlcm5hbWUpOwotICAg
ICAgICBzdWNjZXNzICY9IFByZXBhcmVVVEYxNk92ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3VyY2Uu
cGFzc3dvcmQsIHJlcGxQYXJzZWQucGFzc3dvcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXRmOEJ1ZmZlciwgJnBhcnNlZC0+cGFzc3dvcmQpOwot
ICAgICAgICBzdWNjZXNzICY9IFByZXBhcmVVVEYxNk92ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3Vy
Y2UuaG9zdCwgcmVwbFBhcnNlZC5ob3N0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHV0ZjhCdWZmZXIsICZwYXJzZWQtPmhvc3QpOwotICAgICAgICBz
dWNjZXNzICY9IFByZXBhcmVVVEYxNk92ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3VyY2UucG9ydCwg
cmVwbFBhcnNlZC5wb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHV0ZjhCdWZmZXIsICZwYXJzZWQtPnBvcnQpOwotICAgICAgICBzdWNjZXNzICY9
IFByZXBhcmVVVEYxNk92ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3VyY2UucGF0aCwgcmVwbFBhcnNl
ZC5wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHV0ZjhCdWZmZXIsICZwYXJzZWQtPnBhdGgpOwotICAgICAgICBzdWNjZXNzICY9IFByZXBhcmVV
VEYxNk92ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3VyY2UucXVlcnksIHJlcGxQYXJzZWQucXVlcnks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRmOEJ1
ZmZlciwgJnBhcnNlZC0+cXVlcnkpOwotICAgICAgICBzdWNjZXNzICY9IFByZXBhcmVVVEYxNk92
ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3VyY2UucmVmLCByZXBsUGFyc2VkLmZyYWdtZW50LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0ZjhCdWZmZXIs
ICZwYXJzZWQtPmZyYWdtZW50KTsKLQotICAgICAgICAvLyBQcmVwYXJlVVRGMTZPdmVycmlkZUNv
bXBvbmVudCB3aWxsIG5vdCBoYXZlIHNldCB0aGUgZGF0YSBwb2ludGVyIHNpbmNlIHRoZQotICAg
ICAgICAvLyBidWZmZXIgY291bGQgYmUgcmVzaXplZCwgaW52YWxpZGF0aW5nIHRoZSBwb2ludGVy
cy4gV2Ugc2V0IHRoZSBkYXRhCi0gICAgICAgIC8vIHBvaW50ZXJzIGZvciBhZmZlY3RlZCBjb21w
b25lbnRzIG5vdyB0aGF0IHRoZSBidWZmZXIgaXMgZmluYWxpemVkLgotICAgICAgICBpZiAocmVw
bFNvdXJjZS5zY2hlbWUpCi0gICAgICAgICAgICBzb3VyY2UtPnNjaGVtZSA9IHV0ZjhCdWZmZXIu
ZGF0YSgpOwotICAgICAgICBpZiAocmVwbFNvdXJjZS51c2VybmFtZSkKLSAgICAgICAgICAgIHNv
dXJjZS0+dXNlcm5hbWUgPSB1dGY4QnVmZmVyLmRhdGEoKTsKLSAgICAgICAgaWYgKHJlcGxTb3Vy
Y2UucGFzc3dvcmQpCi0gICAgICAgICAgICBzb3VyY2UtPnBhc3N3b3JkID0gdXRmOEJ1ZmZlci5k
YXRhKCk7Ci0gICAgICAgIGlmIChyZXBsU291cmNlLmhvc3QpCi0gICAgICAgICAgICBzb3VyY2Ut
Pmhvc3QgPSB1dGY4QnVmZmVyLmRhdGEoKTsKLSAgICAgICAgaWYgKHJlcGxTb3VyY2UucG9ydCkK
LSAgICAgICAgICAgIHNvdXJjZS0+cG9ydCA9IHV0ZjhCdWZmZXIuZGF0YSgpOwotICAgICAgICBp
ZiAocmVwbFNvdXJjZS5wYXRoKQotICAgICAgICAgICAgc291cmNlLT5wYXRoID0gdXRmOEJ1ZmZl
ci5kYXRhKCk7Ci0gICAgICAgIGlmIChyZXBsU291cmNlLnF1ZXJ5KQotICAgICAgICAgICAgc291
cmNlLT5xdWVyeSA9IHV0ZjhCdWZmZXIuZGF0YSgpOwotICAgICAgICBpZiAocmVwbFNvdXJjZS5y
ZWYpCi0gICAgICAgICAgICBzb3VyY2UtPnJlZiA9IHV0ZjhCdWZmZXIuZGF0YSgpOwotCi0gICAg
ICAgIHJldHVybiBzdWNjZXNzOwotfQotCi0jaWYgIU9TKFdJTkRPV1MpCi1pbnQgX2l0b2Ffcyhp
bnQgdmFsdWUsIGNoYXIqIGJ1ZmZlciwgc2l6ZV90IHNpemVJbkNoYXJzLCBpbnQgcmFkaXgpCi17
Ci0gICAgaW50IHdyaXR0ZW47Ci0gICAgaWYgKHJhZGl4ID09IDEwKQotICAgICAgICB3cml0dGVu
ID0gc25wcmludGYoYnVmZmVyLCBzaXplSW5DaGFycywgIiVkIiwgdmFsdWUpOwotICAgIGVsc2Ug
aWYgKHJhZGl4ID09IDE2KQotICAgICAgICB3cml0dGVuID0gc25wcmludGYoYnVmZmVyLCBzaXpl
SW5DaGFycywgIiV4IiwgdmFsdWUpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEVJTlZBTDsK
LQotICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KHdyaXR0ZW4pID49IHNpemVJbkNoYXJzKSB7
Ci0gICAgICAgIC8vIE91dHB1dCB3YXMgdHJ1bmNhdGVkLCBvciB3cml0dGVuIHdhcyBuZWdhdGl2
ZS4KLSAgICAgICAgcmV0dXJuIEVJTlZBTDsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWlu
dCBfaXRvd19zKGludCB2YWx1ZSwgVUNoYXIqIGJ1ZmZlciwgc2l6ZV90IHNpemVJbkNoYXJzLCBp
bnQgcmFkaXgpCi17Ci0gICAgaWYgKHJhZGl4ICE9IDEwKQotICAgICAgICByZXR1cm4gRUlOVkFM
OwotCi0gICAgLy8gTm8gbW9yZSB0aGFuIDEyIGNoYXJhY3RlcnMgd2lsbCBiZSByZXF1aXJlZCBm
b3IgYSAzMi1iaXQgaW50ZWdlci4KLSAgICAvLyBBZGQgYW4gZXh0cmEgYnl0ZSBmb3IgdGhlIHRl
cm1pbmF0aW5nIG51bGwuCi0gICAgY2hhciB0ZW1wWzEzXTsKLSAgICBpbnQgd3JpdHRlbiA9IHNu
cHJpbnRmKHRlbXAsIHNpemVvZih0ZW1wKSwgIiVkIiwgdmFsdWUpOwotICAgIGlmIChzdGF0aWNf
Y2FzdDxzaXplX3Q+KHdyaXR0ZW4pID49IHNpemVJbkNoYXJzKSB7Ci0gICAgICAgIC8vIE91dHB1
dCB3YXMgdHJ1bmNhdGVkLCBvciB3cml0dGVuIHdhcyBuZWdhdGl2ZS4KLSAgICAgICAgcmV0dXJu
IEVJTlZBTDsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHdyaXR0ZW47ICsraSkK
LSAgICAgICAgYnVmZmVyW2ldID0gc3RhdGljX2Nhc3Q8VUNoYXI+KHRlbXBbaV0pOwotICAgIGJ1
ZmZlclt3cml0dGVuXSA9ICdcMCc7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLSNlbmRpZiAvLyAhT1Mo
V0lORE9XUykKLQotfSAvLyBuYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplcgotCi19IC8vIG5hbWVz
cGFjZSBXVEYKLQotI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi91cmwvc3JjL1VSTENhbm9uSW50ZXJuYWwuaCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMv
VVJMQ2Fub25JbnRlcm5hbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjI5NzA2
MzIxNjczNDgwOThmOTA3OWNkOTI4NDgyYzk4YzBlMWRmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25J
bnRlcm5hbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0g
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIFRoaXMgZmlsZSBpcyBpbnRlbmRlZCB0
byBiZSBpbmNsdWRlZCBpbiBhbm90aGVyIEMrKyBmaWxlIHdoZXJlIHRoZSBjaGFyYWN0ZXIKLS8v
IHR5cGVzIGFyZSBkZWZpbmVkLiBUaGlzIGFsbG93cyB1cyB0byB3cml0ZSBtb3N0bHkgZ2VuZXJp
YyBjb2RlLCBidXQgbm90IGhhdmUKLS8vIHRlbXBsYWNlIGJsb2F0IGJlY2F1c2UgZXZlcnl0aGlu
ZyBpcyBpbmxpbmVkIHdoZW4gYW55Ym9keSBjYWxscyBhbnkgb2Ygb3VyCi0vLyBmdW5jdGlvbnMu
Ci0KLSNpZm5kZWYgVVJMQ2Fub25JbnRlcm5hbF9oCi0jZGVmaW5lIFVSTENhbm9uSW50ZXJuYWxf
aAotCi0jaW5jbHVkZSAiVVJMQ2Fub24uaCIKLSNpbmNsdWRlICJVUkxDaGFyYWN0ZXJUeXBlcy5o
IgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KLQotI2lm
IFVTRShXVEZVUkwpCi0KLW5hbWVzcGFjZSBXVEYgewotCi1uYW1lc3BhY2UgVVJMQ2Fub25pY2Fs
aXplciB7Ci0KLS8vIEFwcGVuZHMgdGhlIGdpdmVuIHN0cmluZyB0byB0aGUgb3V0cHV0LCBlc2Nh
cGluZyBjaGFyYWN0ZXJzIHRoYXQgZG8gbm90Ci0vLyBtYXRjaCB0aGUgZ2l2ZW4gfHR5cGV8IGlu
IFNoYXJlZENoYXJUeXBlcy4KLXZvaWQgYXBwZW5kU3RyaW5nT2ZUeXBlKGNvbnN0IGNoYXIqIHNv
dXJjZSwgaW50IGxlbmd0aCwgVVJMQ2hhcmFjdGVyVHlwZXM6OkNoYXJhY3RlclR5cGVzIHVybENv
bXBvbmVudFR5cGUsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KTsKLXZvaWQgYXBwZW5kU3RyaW5n
T2ZUeXBlKGNvbnN0IFVDaGFyKiBzb3VyY2UsIGludCBsZW5ndGgsIFVSTENoYXJhY3RlclR5cGVz
OjpDaGFyYWN0ZXJUeXBlcyB1cmxDb21wb25lbnRUeXBlLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1
dCk7Ci0KLS8vIFRoaXMgbG9va3VwIHRhYmxlIGFsbG93cyBmYXN0IGNvbnZlcnNpb24gYmV0d2Vl
biBBU0NJSSBoZXggbGV0dGVycyBhbmQgdGhlaXIKLS8vIGNvcnJlc3BvbmRpbmcgbnVtZXJpY2Fs
IHZhbHVlLiBUaGUgOC1iaXQgcmFuZ2UgaXMgZGl2aWRlZCB1cCBpbnRvIDgKLS8vIHJlZ2lvbnMg
b2YgMHgyMCBjaGFyYWN0ZXJzIGVhY2guIEVhY2ggb2YgdGhlIHRocmVlIGNoYXJhY3RlciB0eXBl
cyAobnVtYmVycywKLS8vIHVwcGVyY2FzZSwgbG93ZXJjYXNlKSBmYWxscyBpbnRvIGRpZmZlcmVu
dCByZWdpb25zIG9mIHRoaXMgcmFuZ2UuIFRoZSB0YWJsZQotLy8gY29udGFpbnMgdGhlIGFtb3Vu
dCB0byBzdWJ0cmFjdCBmcm9tIGNoYXJhY3RlcnMgaW4gdGhhdCByYW5nZSB0byBnZXQgYXQKLS8v
IHRoZSBjb3JyZXNwb25kaW5nIG51bWVyaWNhbCB2YWx1ZS4KLS8vCi0vLyBTZWUgSGV4RGlnaXRU
b1ZhbHVlIGZvciB0aGUgbG9va3VwLgotZXh0ZXJuIGNvbnN0IGNoYXIga0NoYXJUb0hleExvb2t1
cFs4XTsKLQotLy8gQXNzdW1lcyB0aGUgaW5wdXQgaXMgYSB2YWxpZCBoZXggZGlnaXQhIENhbGwg
aXNIZXhDaGFyIGJlZm9yZSB1c2luZyB0aGlzLgotaW5saW5lIHVuc2lnbmVkIGNoYXIgaGV4Q2hh
clRvVmFsdWUodW5zaWduZWQgY2hhciBjaGFyYWN0ZXIpCi17Ci0gICAgcmV0dXJuIGNoYXJhY3Rl
ciAtIGtDaGFyVG9IZXhMb29rdXBbY2hhcmFjdGVyIC8gMHgyMF07Ci19Ci0KLS8vIEluZGljYXRl
cyBpZiB0aGUgZ2l2ZW4gY2hhcmFjdGVyIGlzIGEgZG90IG9yIGRvdCBlcXVpdmFsZW50LCByZXR1
cm5pbmcgdGhlCi0vLyBudW1iZXIgb2YgY2hhcmFjdGVycyB0YWtlbiBieSBpdC4gVGhpcyB3aWxs
IGJlIG9uZSBmb3IgYSBsaXRlcmFsIGRvdCwgMyBmb3IKLS8vIGFuIGVzY2FwZWQgZG90LiBJZiB0
aGUgY2hhcmFjdGVyIGlzIG5vdCBhIGRvdCwgdGhpcyB3aWxsIHJldHVybiAwLgotdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSBpbnQgaXNEb3QoY29uc3QgQ2hhcmFjdGVy
VHlwZSogc3BlYywgaW50IG9mZnNldCwgaW50IGVuZCkKLXsKLSAgICBpZiAoc3BlY1tvZmZzZXRd
ID09ICcuJykKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICBpZiAoc3BlY1tvZmZzZXRdID09ICcl
JyAmJiBvZmZzZXQgKyAzIDw9IGVuZCAmJiBzcGVjW29mZnNldCArIDFdID09ICcyJyAmJiAoc3Bl
Y1tvZmZzZXQgKyAyXSA9PSAnZScgfHwgc3BlY1tvZmZzZXQgKyAyXSA9PSAnRScpKSB7Ci0gICAg
ICAgIC8vIEZvdW5kICIlMmUiCi0gICAgICAgIHJldHVybiAzOwotICAgIH0KLSAgICByZXR1cm4g
MDsKLX0KLQotLy8gUmV0dXJucyB0aGUgY2Fub25pY2FsaXplZCB2ZXJzaW9uIG9mIHRoZSBpbnB1
dCBjaGFyYWN0ZXIgYWNjb3JkaW5nIHRvIHNjaGVtZQotLy8gcnVsZXMuIFRoaXMgaXMgaW1wbGVt
ZW50ZWQgYWxvbmdzaWRlIHRoZSBzY2hlbWUgY2Fub25pY2FsaXplciwgYW5kIGlzCi0vLyByZXF1
aXJlZCBmb3IgcmVsYXRpdmUgVVJMIHJlc29sdmluZyB0byB0ZXN0IGZvciBzY2hlbWUgZXF1YWxp
dHkuCi0vLwotLy8gUmV0dXJucyAwIGlmIHRoZSBpbnB1dCBjaGFyYWN0ZXIgaXMgbm90IGEgdmFs
aWQgc2NoZW1lIGNoYXJhY3Rlci4KLWNoYXIgY2Fub25pY2FsU2NoZW1lQ2hhcihVQ2hhcik7Ci0K
LS8vIFdyaXRlIGEgc2luZ2xlIGNoYXJhY3RlciwgZXNjYXBlZCwgdG8gdGhlIG91dHB1dC4gVGhp
cyBhbHdheXMgZXNjYXBlczogaXQKLS8vIGRvZXMgbm8gY2hlY2tpbmcgdGhhdCB0aGVlIGNoYXJh
Y3RlciByZXF1aXJlcyBlc2NhcGluZy4KLS8vIEVzY2FwaW5nIG1ha2VzIHNlbnNlIG9ubHkgOCBi
aXQgY2hhcnMsIHNvIGNvZGUgd29ya3MgaW4gYWxsIGNhc2VzIG9mCi0vLyBpbnB1dCBwYXJhbWV0
ZXJzICg4LzE2Yml0KS4KLXRlbXBsYXRlPHR5cGVuYW1lIEluQ2hhciwgdHlwZW5hbWUgT3V0Q2hh
cj4KLWlubGluZSB2b2lkIGFwcGVuZFVSTEVzY2FwZWRDaGFyYWN0ZXIoSW5DaGFyIGNoYXJhY3Rl
ciwgVVJMQnVmZmVyPE91dENoYXI+JiBidWZmZXIpCi17Ci0gICAgYnVmZmVyLmFwcGVuZCgnJScp
OwotICAgIGJ1ZmZlci5hcHBlbmQoV1RGOjpJbnRlcm5hbDo6dXBwZXJIZXhEaWdpdHNbY2hhcmFj
dGVyID4+IDRdKTsKLSAgICBidWZmZXIuYXBwZW5kKFdURjo6SW50ZXJuYWw6OnVwcGVySGV4RGln
aXRzW2NoYXJhY3RlciAmIDB4Zl0pOwotfQotCi0vLyBUaGUgY2hhcmFjdGVyIHdlJ2xsIHN1YnN0
aXR1dGUgZm9yIHVuZGVjb2RhYmxlIG9yIGludmFsaWQgY2hhcmFjdGVycy4KLWV4dGVybiBjb25z
dCBVQ2hhciBrVW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyOwotCi0vLyBVVEYtOCBmdW5jdGlv
bnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLS8vIFJlYWRzIG9uZSBjaGFyYWN0ZXIgaW4gVVRGLTggc3RhcnRpbmcgYXQgfCpi
ZWdpbnwgaW4gfHN0cnwgYW5kIHBsYWNlcwotLy8gdGhlIGRlY29kZWQgdmFsdWUgaW50byB8KmNv
ZGVQb2ludHwuIElmIHRoZSBjaGFyYWN0ZXIgaXMgdmFsaWQsIHdlIHdpbGwKLS8vIHJldHVybiB0
cnVlLiBJZiBpbnZhbGlkLCB3ZSdsbCByZXR1cm4gZmFsc2UgYW5kIHB1dCB0aGUKLS8vIGtVbmlj
b2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXIgaW50byB8KmNvZGVQb2ludHwuCi0vLwotLy8gfCpiZWdp
bnwgd2lsbCBiZSB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBsYXN0IGNoYXJhY3RlciBjb25zdW1l
ZCBzbyBpdAotLy8gY2FuIGJlIGluY3JlbWVudGVkIGluIGEgbG9vcCBhbmQgd2lsbCBiZSByZWFk
eSBmb3IgdGhlIG5leHQgY2hhcmFjdGVyLgotLy8gKGZvciBhIHNpbmdsZS1ieXRlIEFTQ0lJIGNo
YXJhY3RlciwgaXQgd2lsbCBub3QgYmUgY2hhbmdlZCkuCi0vLwotLy8gSW1wbGVtZW50YXRpb24g
aXMgaW4gVVJMQ2Fub25pY2FsaXplcl9pY3UuY2MuCi1ib29sIHJlYWRVVEZDaGFyKGNvbnN0IGNo
YXIqIHN0ciwgaW50KiBiZWdpbiwgaW50IGxlbmd0aCwgdW5zaWduZWQqIGNvZGVQb2ludE91dCk7
Ci0KLS8vIEdlbmVyaWMgVG8tVVRGLTggY29udmVydGVyLiBUaGlzIHdpbGwgY2FsbCB0aGUgZ2l2
ZW4gYXBwZW5kIG1ldGhvZCBmb3IgZWFjaAotLy8gY2hhcmFjdGVyIHRoYXQgc2hvdWxkIGJlIGFw
cGVuZGVkLCB3aXRoIHRoZSBnaXZlbiBvdXRwdXQgbWV0aG9kLiBXcmFwcGVycwotLy8gYXJlIHBy
b3ZpZGVkIGJlbG93IGZvciBlc2NhcGVkIGFuZCBub24tZXNjYXBlZCB2ZXJzaW9ucyBvZiB0aGlz
LgotLy8KLS8vIFRoZSBjaGFyYWN0ZXJ2YWx1ZSBtdXN0IGhhdmUgYWxyZWFkeSBiZWVuIGNoZWNr
ZWQgdGhhdCBpdCdzIGEgdmFsaWQgVW5pY29kZQotLy8gY2hhcmFjdGVyLgotdGVtcGxhdGU8Y2xh
c3MgT3V0cHV0LCB2b2lkIGFwcGVuZEZ1bmN0aW9uKHVuc2lnbmVkIGNoYXIsIE91dHB1dCYpPgot
aW5saW5lIHZvaWQgZG9BcHBlbmRVVEY4KHVuc2lnbmVkIGNoYXJhY3RlcnZhbHVlLCBPdXRwdXQm
IG91dHB1dCkKLXsKLSAgICBpZiAoY2hhcmFjdGVydmFsdWUgPD0gMHg3ZikgewotICAgICAgICBh
cHBlbmRGdW5jdGlvbihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjaGFyYWN0ZXJ2YWx1ZSks
IG91dHB1dCk7Ci0gICAgfSBlbHNlIGlmIChjaGFyYWN0ZXJ2YWx1ZSA8PSAweDdmZikgewotICAg
ICAgICAvLyAxMTB4eHh4eCAxMHh4eHh4eAotICAgICAgICBhcHBlbmRGdW5jdGlvbihzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPigweEMwIHwgKGNoYXJhY3RlcnZhbHVlID4+IDYpKSwgb3V0cHV0
KTsKLSAgICAgICAgYXBwZW5kRnVuY3Rpb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMHg4
MCB8IChjaGFyYWN0ZXJ2YWx1ZSAmIDB4M2YpKSwgb3V0cHV0KTsKLSAgICB9IGVsc2UgaWYgKGNo
YXJhY3RlcnZhbHVlIDw9IDB4ZmZmZikgewotICAgICAgICAvLyAxMTEweHh4eCAxMHh4eHh4eCAx
MHh4eHh4eAotICAgICAgICBhcHBlbmRGdW5jdGlvbihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
PigweGUwIHwgKGNoYXJhY3RlcnZhbHVlID4+IDEyKSksIG91dHB1dCk7Ci0gICAgICAgIGFwcGVu
ZEZ1bmN0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDB4ODAgfCAoKGNoYXJhY3RlcnZh
bHVlID4+IDYpICYgMHgzZikpLCBvdXRwdXQpOwotICAgICAgICBhcHBlbmRGdW5jdGlvbihzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigweDgwIHwgKGNoYXJhY3RlcnZhbHVlICYgMHgzZikpLCBv
dXRwdXQpOwotICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVydmFsdWUgPD0gMHgxMEZGRkYpIHsgLy8g
TWF4IHVuaWNvZGUgY29kZSBwb2ludC4KLSAgICAgICAgLy8gMTExMTB4eHggMTB4eHh4eHggMTB4
eHh4eHggMTB4eHh4eHgKLSAgICAgICAgYXBwZW5kRnVuY3Rpb24oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcj4oMHhmMCB8IChjaGFyYWN0ZXJ2YWx1ZSA+PiAxOCkpLCBvdXRwdXQpOwotICAgICAg
ICBhcHBlbmRGdW5jdGlvbihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigweDgwIHwgKChjaGFy
YWN0ZXJ2YWx1ZSA+PiAxMikgJiAweDNmKSksIG91dHB1dCk7Ci0gICAgICAgIGFwcGVuZEZ1bmN0
aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDB4ODAgfCAoKGNoYXJhY3RlcnZhbHVlID4+
IDYpICYgMHgzZikpLCBvdXRwdXQpOwotICAgICAgICBhcHBlbmRGdW5jdGlvbihzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyPigweDgwIHwgKGNoYXJhY3RlcnZhbHVlICYgMHgzZikpLCBvdXRwdXQp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEludmFsaWQgVVRGLTggY2hhcmFjdGVyICg+MjAg
Yml0cykuCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotLy8gSGVs
cGVyIHVzZWQgYnkgQXBwZW5kVVRGOFZhbHVlIGJlbG93LiBXZSB1c2UgYW4gdW5zaWduZWQgcGFy
YW1ldGVyIHNvIHRoZXJlCi0vLyBhcmUgbm8gZnVubnkgc2lnbiBwcm9ibGVtcyB3aXRoIHRoZSBp
bnB1dCwgYnV0IHRoZW4gaGF2ZSB0byBjb252ZXJ0IGl0IHRvCi0vLyBhIHJlZ3VsYXIgY2hhciBm
b3IgYXBwZW5kaW5nLgotaW5saW5lIHZvaWQgQXBwZW5kQ2hhclRvT3V0cHV0KHVuc2lnbmVkIGNo
YXIgY2hhcmFjdGVyLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKLXsKLSAgICBvdXRwdXQuYXBw
ZW5kKHN0YXRpY19jYXN0PGNoYXI+KGNoYXJhY3RlcikpOwotfQotCi0vLyBXcml0ZXMgdGhlIGdp
dmVuIGNoYXJhY3RlciB0byB0aGUgb3V0cHV0IGFzIFVURi04LiBUaGlzIGRvZXMgTk8gY2hlY2tp
bmcKLS8vIG9mIHRoZSB2YWxpZGl0eSBvZiB0aGUgdW5pY29kZSBjaGFyYWN0ZXJzOyB0aGUgY2Fs
bGVyIHNob3VsZCBlbnN1cmUgdGhhdAotLy8gdGhlIHZhbHVlIGl0IGlzIGFwcGVuZGluZyBpcyB2
YWxpZCB0byBhcHBlbmQuCi1pbmxpbmUgdm9pZCBBcHBlbmRVVEY4VmFsdWUodW5zaWduZWQgY2hh
cmFjdGVydmFsdWUsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQotewotICAgIGRvQXBwZW5kVVRG
ODxVUkxCdWZmZXI8Y2hhcj4sIEFwcGVuZENoYXJUb091dHB1dD4oY2hhcmFjdGVydmFsdWUsIG91
dHB1dCk7Ci19Ci0KLS8vIFdyaXRlcyB0aGUgZ2l2ZW4gY2hhcmFjdGVyIHRvIHRoZSBvdXRwdXQg
YXMgVVRGLTgsIGVzY2FwaW5nIEFMTAotLy8gY2hhcmFjdGVycyAoZXZlbiB3aGVuIHRoZXkgYXJl
IEFTQ0lJKS4gVGhpcyBkb2VzIE5PIGNoZWNraW5nIG9mIHRoZQotLy8gdmFsaWRpdHkgb2YgdGhl
IHVuaWNvZGUgY2hhcmFjdGVyczsgdGhlIGNhbGxlciBzaG91bGQgZW5zdXJlIHRoYXQgdGhlIHZh
bHVlCi0vLyBpdCBpcyBhcHBlbmRpbmcgaXMgdmFsaWQgdG8gYXBwZW5kLgotaW5saW5lIHZvaWQg
QXBwZW5kVVRGOEVzY2FwZWRWYWx1ZSh1bnNpZ25lZCBjaGFyYWN0ZXJ2YWx1ZSwgVVJMQnVmZmVy
PGNoYXI+JiBvdXRwdXQpCi17Ci0gICAgZG9BcHBlbmRVVEY4PFVSTEJ1ZmZlcjxjaGFyPiwgYXBw
ZW5kVVJMRXNjYXBlZENoYXJhY3Rlcj4oY2hhcmFjdGVydmFsdWUsIG91dHB1dCk7Ci19Ci0KLS8v
IFVURi0xNiBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gUmVhZHMgb25lIGNoYXJhY3RlciBpbiBVVEYtMTYg
c3RhcnRpbmcgYXQgfCpiZWdpbnwgaW4gfHN0cnwgYW5kIHBsYWNlcwotLy8gdGhlIGRlY29kZWQg
dmFsdWUgaW50byB8KmNvZGVQb2ludHwuIElmIHRoZSBjaGFyYWN0ZXIgaXMgdmFsaWQsIHdlIHdp
bGwKLS8vIHJldHVybiB0cnVlLiBJZiBpbnZhbGlkLCB3ZSdsbCByZXR1cm4gZmFsc2UgYW5kIHB1
dCB0aGUKLS8vIGtVbmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXIgaW50byB8KmNvZGVQb2ludHwu
Ci0vLwotLy8gfCpiZWdpbnwgd2lsbCBiZSB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBsYXN0IGNo
YXJhY3RlciBjb25zdW1lZCBzbyBpdAotLy8gY2FuIGJlIGluY3JlbWVudGVkIGluIGEgbG9vcCBh
bmQgd2lsbCBiZSByZWFkeSBmb3IgdGhlIG5leHQgY2hhcmFjdGVyLgotLy8gKGZvciBhIHNpbmds
ZS0xNi1iaXQtd29yZCBjaGFyYWN0ZXIsIGl0IHdpbGwgbm90IGJlIGNoYW5nZWQpLgotLy8KLS8v
IEltcGxlbWVudGF0aW9uIGlzIGluIFVSTENhbm9uaWNhbGl6ZXJfaWN1LmNjLgotYm9vbCByZWFk
VVRGQ2hhcihjb25zdCBVQ2hhciogc3RyLCBpbnQqIGJlZ2luLCBpbnQgbGVuZ3RoLCB1bnNpZ25l
ZCogY29kZVBvaW50KTsKLQotLy8gRXF1aXZhbGVudCB0byBVMTZfQVBQRU5EX1VOU0FGRSBpbiBJ
Q1UgYnV0IHVzZXMgb3VyIG91dHB1dCBtZXRob2QuCi1pbmxpbmUgdm9pZCBBcHBlbmRVVEYxNlZh
bHVlKHVuc2lnbmVkIGNvZGVQb2ludCwgVVJMQnVmZmVyPFVDaGFyPiYgb3V0cHV0KQotewotICAg
IGlmIChjb2RlUG9pbnQgPiAweGZmZmYpIHsKLSAgICAgICAgb3V0cHV0LmFwcGVuZChzdGF0aWNf
Y2FzdDxVQ2hhcj4oKGNvZGVQb2ludCA+PiAxMCkgKyAweGQ3YzApKTsKLSAgICAgICAgb3V0cHV0
LmFwcGVuZChzdGF0aWNfY2FzdDxVQ2hhcj4oKGNvZGVQb2ludCAmIDB4M2ZmKSB8IDB4ZGMwMCkp
OwotICAgIH0gZWxzZQotICAgICAgICBvdXRwdXQuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPihj
b2RlUG9pbnQpKTsKLX0KLQotLy8gRXNjYXBpbmcgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBXcml0ZXMgdGhl
IGdpdmVuIGNoYXJhY3RlciB0byB0aGUgb3V0cHV0IGFzIFVURi04LCBlc2NhcGVkLiBDYWxsIHRo
aXMKLS8vIGZ1bmN0aW9uIG9ubHkgd2hlbiB0aGUgaW5wdXQgaXMgd2lkZS4gUmV0dXJucyB0cnVl
IG9uIHN1Y2Nlc3MuIEZhaWx1cmUKLS8vIG1lYW5zIHRoZXJlIHdhcyBzb21lIHByb2JsZW0gd2l0
aCB0aGUgZW5jb2RpbmcsIHdlJ2xsIHN0aWxsIHRyeSB0bwotLy8gdXBkYXRlIHRoZSB8KmJlZ2lu
fCBwb2ludGVyIGFuZCBhZGQgYSBwbGFjZWhvbGRlciBjaGFyYWN0ZXIgdG8gdGhlCi0vLyBvdXRw
dXQgc28gcHJvY2Vzc2luZyBjYW4gY29udGludWUuCi0vLwotLy8gV2Ugd2lsbCBhcHBlbmQgdGhl
IGNoYXJhY3RlciBzdGFydGluZyBhdCBjaFtiZWdpbl0gd2l0aCB0aGUgYnVmZmVyIGNoCi0vLyBi
ZWluZyB8bGVuZ3RofC4gfCpiZWdpbnwgd2lsbCBiZSB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBs
YXN0IGNoYXJhY3RlcgotLy8gY29uc3VtZWQgKHdlIG1heSBjb25zdW1lIG1vcmUgdGhhbiBvbmUg
Zm9yIFVURi0xNikgc28gdGhhdCBpZiBjYWxsZWQgaW4KLS8vIGEgbG9vcCwgaW5jcmVtZW50aW5n
IHRoZSBwb2ludGVyIHdpbGwgbW92ZSB0byB0aGUgbmV4dCBjaGFyYWN0ZXIuCi0vLwotLy8gRXZl
cnkgc2luZ2xlIG91dHB1dCBjaGFyYWN0ZXIgd2lsbCBiZSBlc2NhcGVkLiBUaGlzIG1lYW5zIHRo
YXQgaWYgeW91Ci0vLyBnaXZlIGl0IGFuIEFTQ0lJIGNoYXJhY3RlciBhcyBpbnB1dCwgaXQgd2ls
bCBiZSBlc2NhcGVkLiBTb21lIGNvZGUgdXNlcwotLy8gdGhpcyB3aGVuIGl0IGtub3dzIHRoYXQg
YSBjaGFyYWN0ZXIgaXMgaW52YWxpZCBhY2NvcmRpbmcgdG8gaXRzIHJ1bGVzCi0vLyBmb3IgdmFs
aWRpdHkuIElmIHlvdSBkb24ndCB3YW50IGVzY2FwaW5nIGZvciBBU0NJSSBjaGFyYWN0ZXJzLCB5
b3Ugd2lsbAotLy8gaGF2ZSB0byBmaWx0ZXIgdGhlbSBvdXQgcHJpb3IgdG8gY2FsbGluZyB0aGlz
IGZ1bmN0aW9uLgotLy8KLS8vIEFzc3VtZXMgdGhhdCBjaFtiZWdpbl0gaXMgd2l0aGluIHJhbmdl
IGluIHRoZSBhcnJheSwgYnV0IGRvZXMgbm90IGFzc3VtZQotLy8gdGhhdCBhbnkgZm9sbG93aW5n
IGNoYXJhY3RlcnMgYXJlLgotaW5saW5lIGJvb2wgQXBwZW5kVVRGOEVzY2FwZWRDaGFyKGNvbnN0
IFVDaGFyKiBzdHIsIGludCogYmVnaW4sIGludCBsZW5ndGgsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0
cHV0KQotewotICAgIC8vIFVURi0xNiBpbnB1dC4gUmVhZFVDaGFyIHdpbGwgaGFuZGxlIGludmFs
aWQgY2hhcmFjdGVycyBmb3IgdXMgYW5kIGdpdmUKLSAgICAvLyB1cyB0aGUga1VuaWNvZGVSZXBs
YWNlbWVudENoYXJhY3Rlciwgc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyBzcGVjaWFsCi0gICAgLy8g
Y2hlY2tpbmcgYWZ0ZXIgZmFpbHVyZSwganVzdCBwYXNzIHRocm91Z2ggdGhlIGZhaWx1cmUgdG8g
dGhlIGNhbGxlci4KLSAgICB1bnNpZ25lZCBjaGFyYWN0ZXJ2YWx1ZTsKLSAgICBib29sIHN1Y2Nl
c3MgPSByZWFkVVRGQ2hhcihzdHIsIGJlZ2luLCBsZW5ndGgsICZjaGFyYWN0ZXJ2YWx1ZSk7Ci0g
ICAgQXBwZW5kVVRGOEVzY2FwZWRWYWx1ZShjaGFyYWN0ZXJ2YWx1ZSwgb3V0cHV0KTsKLSAgICBy
ZXR1cm4gc3VjY2VzczsKLX0KLQotLy8gSGFuZGxlcyBVVEYtOCBpbnB1dC4gU2VlIHRoZSB3aWRl
IHZlcnNpb24gYWJvdmUgZm9yIHVzYWdlLgotaW5saW5lIGJvb2wgQXBwZW5kVVRGOEVzY2FwZWRD
aGFyKGNvbnN0IGNoYXIqIHN0ciwgaW50KiBiZWdpbiwgaW50IGxlbmd0aCwgVVJMQnVmZmVyPGNo
YXI+JiBvdXRwdXQpCi17Ci0gICAgLy8gUmVhZFVURjhDaGFyIHdpbGwgaGFuZGxlIGludmFsaWQg
Y2hhcmFjdGVycyBmb3IgdXMgYW5kIGdpdmUgdXMgdGhlCi0gICAgLy8ga1VuaWNvZGVSZXBsYWNl
bWVudENoYXJhY3Rlciwgc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyBzcGVjaWFsIGNoZWNraW5nCi0g
ICAgLy8gYWZ0ZXIgZmFpbHVyZSwganVzdCBwYXNzIHRocm91Z2ggdGhlIGZhaWx1cmUgdG8gdGhl
IGNhbGxlci4KLSAgICB1bnNpZ25lZCBjaDsKLSAgICBib29sIHN1Y2Nlc3MgPSByZWFkVVRGQ2hh
cihzdHIsIGJlZ2luLCBsZW5ndGgsICZjaCk7Ci0gICAgQXBwZW5kVVRGOEVzY2FwZWRWYWx1ZShj
aCwgb3V0cHV0KTsKLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotLy8gR2l2ZW4gYSAnJScgY2hh
cmFjdGVyIGF0IHwqYmVnaW58IGluIHRoZSBzdHJpbmcgfHNwZWN8LCB0aGlzIHdpbGwgZGVjb2Rl
Ci0vLyB0aGUgZXNjYXBlZCB2YWx1ZSBhbmQgcHV0IGl0IGludG8gfCp1bmVzY2FwZWRWYWx1ZXwg
b24gc3VjY2VzcyAocmV0dXJucwotLy8gdHJ1ZSkuIE9uIGZhaWx1cmUsIHRoaXMgd2lsbCByZXR1
cm4gZmFsc2UsIGFuZCB3aWxsIG5vdCB3cml0ZSBpbnRvCi0vLyB8KnVuZXNjYXBlZFZhbHVlfC4K
LS8vCi0vLyB8KmJlZ2lufCB3aWxsIGJlIHVwZGF0ZWQgdG8gcG9pbnQgdG8gdGhlIGxhc3QgY2hh
cmFjdGVyIG9mIHRoZSBlc2NhcGUKLS8vIHNlcXVlbmNlIHNvIHRoYXQgd2hlbiBjYWxsZWQgd2l0
aCB0aGUgaW5kZXggb2YgYSBmb3IgbG9vcCwgdGhlIG5leHQgdGltZQotLy8gdGhyb3VnaCBpdCB3
aWxsIHBvaW50IHRvIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zaWRlcmVkLiBPbiBmYWls
dXJlLAotLy8gfCpiZWdpbnwgd2lsbCBiZSB1bmNoYW5nZWQuCi1pbmxpbmUgYm9vbCBJczhCaXRD
aGFyKGNoYXIpCi17Ci0gICAgcmV0dXJuIHRydWU7IC8vIHRoaXMgY2FzZSBpcyBzcGVjaWFsaXpl
ZCB0byBhdm9pZCBhIHdhcm5pbmcKLX0KLWlubGluZSBib29sIElzOEJpdENoYXIoVUNoYXIgYykK
LXsKLSAgICByZXR1cm4gYyA8PSAyNTU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENIQVI+Ci1p
bmxpbmUgYm9vbCBEZWNvZGVFc2NhcGVkKGNvbnN0IENIQVIqIHNwZWMsIGludCogYmVnaW4sIGlu
dCBlbmQsIHVuc2lnbmVkIGNoYXIqIHVuZXNjYXBlZFZhbHVlKQotewotICAgIGlmICgqYmVnaW4g
KyAzID4gZW5kIHx8ICFJczhCaXRDaGFyKHNwZWNbKmJlZ2luICsgMV0pIHx8ICFJczhCaXRDaGFy
KHNwZWNbKmJlZ2luICsgMl0pKSB7Ci0gICAgICAgIC8vIEludmFsaWQgZXNjYXBlIHNlcXVlbmNl
IGJlY2F1c2UgdGhlcmUncyBub3QgZW5vdWdoIHJvb20sIG9yIHRoZQotICAgICAgICAvLyBkaWdp
dHMgYXJlIG5vdCBBU0NJSS4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHVu
c2lnbmVkIGNoYXIgZmlyc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihzcGVjWypiZWdp
biArIDFdKTsKLSAgICB1bnNpZ25lZCBjaGFyIHNlY29uZCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KHNwZWNbKmJlZ2luICsgMl0pOwotICAgIGlmICghVVJMQ2hhcmFjdGVyVHlwZXM6Omlz
SGV4Q2hhcihmaXJzdCkgfHwgIVVSTENoYXJhY3RlclR5cGVzOjppc0hleENoYXIoc2Vjb25kKSkg
ewotICAgICAgICAvLyBJbnZhbGlkIGhleCBkaWdpdHMsIGZhaWwuCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICAvLyBWYWxpZCBlc2NhcGUgc2VxdWVuY2UuCi0gICAgKnVuZXNj
YXBlZFZhbHVlID0gKGhleENoYXJUb1ZhbHVlKGZpcnN0KSA8PCA0KSArIGhleENoYXJUb1ZhbHVl
KHNlY29uZCk7Ci0gICAgKmJlZ2luICs9IDI7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIEFw
cGVuZHMgdGhlIGdpdmVuIHN1YnN0cmluZyB0byB0aGUgb3V0cHV0LCBlc2NhcGluZyAic29tZSIg
Y2hhcmFjdGVycyB0aGF0Ci0vLyBpdCBmZWVscyBtYXkgbm90IGJlIHNhZmUuIEl0IGFzc3VtZXMg
dGhlIGlucHV0IHZhbHVlcyBhcmUgYWxsIGNvbnRhaW5lZCBpbgotLy8gOC1iaXQgYWx0aG91Z2gg
aXQgYWxsb3dzIGFueSB0eXBlLgotLy8KLS8vIFRoaXMgaXMgdXNlZCBpbiBlcnJvciBjYXNlcyB0
byBhcHBlbmQgaW52YWxpZCBvdXRwdXQgc28gdGhhdCBpdCBsb29rcwotLy8gYXBwcm94aW1hdGVs
eSBjb3JyZWN0LiBOb24tZXJyb3IgY2FzZXMgc2hvdWxkIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24g
c2luY2UKLS8vIHRoZSBlc2NhcGluZyBydWxlcyBhcmUgbm90IGd1YXJhbnRlZWQhCi12b2lkIEFw
cGVuZEludmFsaWROYXJyb3dTdHJpbmcoY29uc3QgY2hhciogc3BlYywgaW50IGJlZ2luLCBpbnQg
ZW5kLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCk7Ci12b2lkIEFwcGVuZEludmFsaWROYXJyb3dT
dHJpbmcoY29uc3QgVUNoYXIqIHNwZWMsIGludCBiZWdpbiwgaW50IGVuZCwgVVJMQnVmZmVyPGNo
YXI+JiBvdXRwdXQpOwotCi0vLyBNaXNjIGNhbm9uaWNhbGl6YXRpb24gaGVscGVycyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIENvbnZlcnRzIGJl
dHdlZW4gVVRGLTggYW5kIFVURi0xNiwgcmV0dXJuaW5nIHRydWUgb24gc3VjY2Vzc2Z1bCBjb252
ZXJzaW9uLgotLy8gVGhlIG91dHB1dCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBnaXZlbiBjYW5v
bmljYWxpemVyIG91dHB1dCAoc28gbWFrZSBzdXJlCi0vLyBpdCdzIGVtcHR5IGlmIHlvdSB3YW50
IHRvIHJlcGxhY2UpLgotLy8KLS8vIE9uIGludmFsaWQgaW5wdXQsIHRoaXMgd2lsbCBzdGlsbCB3
cml0ZSBhcyBtdWNoIG91dHB1dCBhcyBwb3NzaWJsZSwKLS8vIHJlcGxhY2luZyB0aGUgaW52YWxp
ZCBjaGFyYWN0ZXJzIHdpdGggdGhlICJpbnZhbGlkIGNoYXJhY3RlciIuIEl0IHdpbGwKLS8vIHJl
dHVybiBmYWxzZSBpbiB0aGUgZmFpbHVyZSBjYXNlLCBhbmQgdGhlIGNhbGxlciBzaG91bGQgbm90
IGNvbnRpbnVlIGFzCi0vLyBub3JtYWwuCi1ib29sIENvbnZlcnRVVEYxNlRvVVRGOChjb25zdCBV
Q2hhciogaW5wdXQsIGludCBpbnB1dExlbmd0aCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpOwot
Ym9vbCBDb252ZXJ0VVRGOFRvVVRGMTYoY29uc3QgY2hhciogaW5wdXQsIGludCBpbnB1dExlbmd0
aCwgVVJMQnVmZmVyPFVDaGFyPiYgb3V0cHV0KTsKLQotLy8gQ29udmVydHMgZnJvbSBVVEYtMTYg
dG8gOC1iaXQgdXNpbmcgdGhlIGNoYXJhY3RlciBzZXQgY29udmVydGVyLiBJZiB0aGUKLS8vIGNv
bnZlcnRlciBpcyBudWxsLCB0aGlzIHdpbGwgdXNlIFVURi04Lgotdm9pZCBDb252ZXJ0VVRGMTZU
b1F1ZXJ5RW5jb2RpbmcoY29uc3QgVUNoYXIqIGlucHV0LCBjb25zdCBVUkxDb21wb25lbnQmIHF1
ZXJ5LCBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCk7
Ci0KLS8vIEFwcGxpZXMgdGhlIHJlcGxhY2VtZW50cyB0byB0aGUgZ2l2ZW4gY29tcG9uZW50IHNv
dXJjZS4gVGhlIGNvbXBvbmVudCBzb3VyY2UKLS8vIHNob3VsZCBiZSBwcmUtaW5pdGlhbGl6ZWQg
dG8gdGhlICJvbGQiIGJhc2UuIFRoYXQgaXMsIGFsbCBwb2ludGVycyB3aWxsCi0vLyBwb2ludCB0
byB0aGUgc3BlYyBvZiB0aGUgb2xkIFVSTCwgYW5kIGFsbCBvZiB0aGUgUGFyc2VkIGNvbXBvbmVu
dHMgd2lsbAotLy8gYmUgaW5kaWNlcyBpbnRvIHRoYXQgc3RyaW5nLgotLy8KLS8vIFRoZSBwb2lu
dGVycyBhbmQgY29tcG9uZW50cyBpbiB0aGUgfHNvdXJjZXwgZm9yIGFsbCBub24tbnVsbCBzdHJp
bmdzIGluIHRoZQotLy8gfHJlcGx8IChyZXBsYWNlbWVudHMpIHdpbGwgYmUgdXBkYXRlZCB0byBy
ZWZlcmVuY2UgdGhvc2Ugc3RyaW5ncy4KLS8vIENhbm9uaWNhbGl6aW5nIHdpdGggdGhlIG5ldyB8
c291cmNlfCBhbmQgfHBhcnNlZHwgY2FuIHRoZW4gY29tYmluZSBVUkwKLS8vIGNvbXBvbmVudHMg
ZnJvbSBtYW55IGRpZmZlcmVudCBzdHJpbmdzLgotdm9pZCBTZXR1cE92ZXJyaWRlQ29tcG9uZW50
cyhjb25zdCBjaGFyKiBiYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBS
ZXBsYWNlbWVudHM8Y2hhcj4mLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxDb21w
b25lbnRTb3VyY2U8Y2hhcj4qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdt
ZW50cyogcGFyc2VkKTsKLQotLy8gTGlrZSB0aGUgYWJvdmUgOC1iaXQgdmVyc2lvbiwgZXhjZXB0
IHRoYXQgaXQgYWRkaXRpb25hbGx5IGNvbnZlcnRzIHRoZQotLy8gVVRGLTE2IGlucHV0IHRvIFVU
Ri04IGJlZm9yZSBkb2luZyB0aGUgb3ZlcnJpZGVzLgotLy8KLS8vIFRoZSBnaXZlbiB1dGY4QnVm
ZmVyIGlzIHVzZWQgdG8gc3RvcmUgdGhlIGNvbnZlcnRlZCBjb21wb25lbnRzLiBUaGV5IHdpbGwK
LS8vIGJlIGFwcGVuZGVkIG9uZSBhZnRlciBhbm90aGVyLCB3aXRoIHRoZSBwYXJzZWQgc3RydWN0
dXJlIGlkZW50aWZ5aW5nIHRoZQotLy8gYXBwcm9wcmlhdGUgc3Vic3RyaW5ncy4gVGhpcyBidWZm
ZXIgaXMgYSBwYXJhbWV0ZXIgYmVjYXVzZSB0aGUgc291cmNlIGhhcwotLy8gbm8gc3RvcmFnZSwg
c28gdGhlIGJ1ZmZlciBtdXN0IGhhdmUgdGhlIHNhbWUgbGlmZXRpbWUgYXMgdGhlIHNvdXJjZQot
Ly8gcGFyYW1ldGVyIG93bmVkIGJ5IHRoZSBjYWxsZXIuCi0vLwotLy8gVEhFIENBTExFUiBNVVNU
IE5PVCBBREQgVE8gVEhFIHx1dGY4QnVmZmVyfCBBRlRFUiBUSElTIENBTEwuIE1lbWJlcnMgb2YK
LS8vIHxzb3VyY2V8IHdpbGwgcG9pbnQgaW50byB0aGlzIGJ1ZmZlciwgd2hpY2ggY291bGQgYmUg
aW52YWxpZGF0ZWQgaWYKLS8vIGFkZGl0aW9uYWwgZGF0YSBpcyBhZGRlZCBhbmQgdGhlIENhbm9u
T3V0cHV0IHJlc2l6ZXMgaXRzIGJ1ZmZlci4KLS8vCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vz
cy4gRmFsZXMgbWVhbnMgdGhhdCB0aGUgaW5wdXQgd2FzIG5vdCB2YWxpZCBVVEYtMTYsCi0vLyBh
bHRob3VnaCB3ZSB3aWxsIGhhdmUgc3RpbGwgZG9uZSB0aGUgb3ZlcnJpZGUgd2l0aCAiaW52YWxp
ZCBjaGFyYWN0ZXJzIiBpbgotLy8gcGxhY2Ugb2YgZXJyb3JzLgotYm9vbCBTZXR1cFVURjE2T3Zl
cnJpZGVDb21wb25lbnRzKGNvbnN0IGNoYXIqIGJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUmVwbGFjZW1lbnRzPFVDaGFyPiYsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiB1dGY4QnVmZmVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudFNvdXJjZTxjaGFyPiosCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIHBhcnNlZCk7Ci0KLS8v
IEltcGxlbWVudGVkIGluIFVSTENhbm9uaWNhbGl6ZXJfcGF0aC5jYywgdGhlc2UgYXJlIHJlcXVp
cmVkIGJ5IHRoZSByZWxhdGl2ZSBVUkwKLS8vIHJlc29sdmVyIGFzIHdlbGwsIHNvIHdlIGRlY2xh
cmUgdGhlbSBoZXJlLgotYm9vbCBDYW5vbmljYWxpemVQYXJ0aWFsUGF0aChjb25zdCBjaGFyKiBz
cGVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIHBh
dGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYXRoQmVnaW5Jbk91dHB1dCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpOwot
Ym9vbCBDYW5vbmljYWxpemVQYXJ0aWFsUGF0aChjb25zdCBVQ2hhciogc3BlYywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgcGF0aEJlZ2luSW5PdXRwdXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KTsKLQotI2lmICFPUyhXSU5E
T1dTKQotLy8gSW1wbGVtZW50YXRpb25zIG9mIFdpbmRvd3MnIGludC10by1zdHJpbmcgY29udmVy
c2lvbnMKLWludCBfaXRvYV9zKGludCB2YWx1ZSwgY2hhciogYnVmZmVyLCBzaXplX3Qgc2l6ZUlu
Q2hhcnMsIGludCByYWRpeCk7Ci1pbnQgX2l0b3dfcyhpbnQgdmFsdWUsIFVDaGFyKiBidWZmZXIs
IHNpemVfdCBzaXplSW5DaGFycywgaW50IHJhZGl4KTsKLQotLy8gU2VjdXJlIHRlbXBsYXRlIG92
ZXJsb2FkcyBmb3IgdGhlc2UgZnVuY3Rpb25zCi10ZW1wbGF0ZTxzaXplX3QgTj4KLWlubGluZSBp
bnQgX2l0b2FfcyhpbnQgdmFsdWUsIGNoYXIgKCZidWZmZXIpW05dLCBpbnQgcmFkaXgpCi17Ci0g
ICAgcmV0dXJuIF9pdG9hX3ModmFsdWUsIGJ1ZmZlciwgTiwgcmFkaXgpOwotfQotCi10ZW1wbGF0
ZTxzaXplX3QgTj4KLWlubGluZSBpbnQgX2l0b3dfcyhpbnQgdmFsdWUsIFVDaGFyICgmYnVmZmVy
KVtOXSwgaW50IHJhZGl4KQotewotICAgIHJldHVybiBfaXRvd19zKHZhbHVlLCBidWZmZXIsIE4s
IHJhZGl4KTsKLX0KLQotLy8gX3N0cnRvdWk2NCBhbmQgc3RydG91bGwgYmVoYXZlIHRoZSBzYW1l
Ci1pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIF9zdHJ0b3VpNjQoY29uc3QgY2hhciogbnB0ciwg
Y2hhcioqIGVuZHB0ciwgaW50IGJhc2UpCi17Ci0gICAgcmV0dXJuIHN0cnRvdWxsKG5wdHIsIGVu
ZHB0ciwgYmFzZSk7Ci19Ci0jZW5kaWYgLy8gT1MoV0lORE9XUykKLQotfSAvLyBuYW1lc3BhY2Ug
VVJMQ2Fub25pY2FsaXplcgotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFVTRShX
VEZVUkwpCi0KLSNlbmRpZiAvLyBVUkxDYW5vbkludGVybmFsX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25NYWlsdG8uY3BwIGIvU291cmNlL1dURi93dGYvdXJs
L3NyYy9VUkxDYW5vbk1haWx0by5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJk
YjM1Mzg0NTMxZTM3YmI0MDZlNzQ5Mzc0YzFiNGM4ZWQzMjRmYWIuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxD
YW5vbk1haWx0by5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAyMDA4IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRnVuY3Rpb25zIGZvciBjYW5v
bmljYWxpemluZyAibWFpbHRvOiIgVVJMcy4KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlVSTENhbm9uLmgiCi0KLSNpbmNsdWRlICJSYXdVUkxCdWZmZXIuaCIKLSNpbmNsdWRlICJV
UkxDYW5vbkludGVybmFsLmgiCi0jaW5jbHVkZSAiVVJMRmlsZS5oIgotI2luY2x1ZGUgIlVSTFBh
cnNlSW50ZXJuYWwuaCIKLQotI2lmIFVTRShXVEZVUkwpCi0KLW5hbWVzcGFjZSBXVEYgewotCi1u
YW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplciB7Ci0KLW5hbWVzcGFjZSB7Ci0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgVUNIQVI+Ci1ib29sIGRvQ2Fub25pY2Fs
aXplTWFpbHRvVVJMKGNvbnN0IFVSTENvbXBvbmVudFNvdXJjZTxDaGFyYWN0ZXJUeXBlPiYgc291
cmNlLCBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwg
VVJMU2VnbWVudHMmIG91dHB1dFBhcnNlZCkKLXsKLSAgICAvLyBtYWlsdG86IG9ubHkgdXNlcyB7
c2NoZW1lLCBwYXRoLCBxdWVyeX0gLS0gY2xlYXIgdGhlIHJlc3QuCi0gICAgb3V0cHV0UGFyc2Vk
LnVzZXJuYW1lID0gVVJMQ29tcG9uZW50KCk7Ci0gICAgb3V0cHV0UGFyc2VkLnBhc3N3b3JkID0g
VVJMQ29tcG9uZW50KCk7Ci0gICAgb3V0cHV0UGFyc2VkLmhvc3QgPSBVUkxDb21wb25lbnQoKTsK
LSAgICBvdXRwdXRQYXJzZWQucG9ydCA9IFVSTENvbXBvbmVudCgpOwotICAgIG91dHB1dFBhcnNl
ZC5mcmFnbWVudCA9IFVSTENvbXBvbmVudCgpOwotCi0gICAgLy8gU2NoZW1lIChrbm93biwgc28g
d2UgZG9uJ3QgYm90aGVyIHJ1bm5pbmcgaXQgdGhyb3VnaCB0aGUgbW9yZQotICAgIC8vIGNvbXBs
aWNhdGVkIHNjaGVtZSBjYW5vbmljYWxpemVyKS4KLSAgICBvdXRwdXRQYXJzZWQuc2NoZW1lLnNl
dEJlZ2luKG91dHB1dC5sZW5ndGgoKSk7Ci0gICAgb3V0cHV0LmFwcGVuZCgibWFpbHRvOiIsIDcp
OwotICAgIG91dHB1dFBhcnNlZC5zY2hlbWUuc2V0TGVuZ3RoKDYpOwotCi0gICAgYm9vbCBzdWNj
ZXNzID0gdHJ1ZTsKLQotICAgIC8vIFBhdGgKLSAgICBpZiAocGFyc2VkLnBhdGguaXNWYWxpZCgp
KSB7Ci0gICAgICAgIG91dHB1dFBhcnNlZC5wYXRoLnNldEJlZ2luKG91dHB1dC5sZW5ndGgoKSk7
Ci0KLSAgICAgICAgLy8gQ29weSB0aGUgcGF0aCB1c2luZyBwYXRoIFVSTCdzIG1vcmUgbGF4IGVz
Y2FwaW5nIHJ1bGVzLgotICAgICAgICAvLyBXZSBjb252ZXJ0IHRvIFVURi04IGFuZCBlc2NhcGUg
bm9uLUFTQ0lJLCBidXQgbGVhdmUgYWxsCi0gICAgICAgIC8vIEFTQ0lJIGNoYXJhY3RlcnMgYWxv
bmUuCi0gICAgICAgIGludCBlbmQgPSBwYXJzZWQucGF0aC5lbmQoKTsKLSAgICAgICAgZm9yIChp
bnQgaSA9IHBhcnNlZC5wYXRoLmJlZ2luKCk7IGkgPCBlbmQ7ICsraSkgewotICAgICAgICAgICAg
VUNIQVIgdWNoID0gc3RhdGljX2Nhc3Q8VUNIQVI+KHNvdXJjZS5wYXRoW2ldKTsKLSAgICAgICAg
ICAgIGlmICh1Y2ggPCAweDIwIHx8IHVjaCA+PSAweDgwKQotICAgICAgICAgICAgICAgIHN1Y2Nl
c3MgJj0gQXBwZW5kVVRGOEVzY2FwZWRDaGFyKHNvdXJjZS5wYXRoLCAmaSwgZW5kLCBvdXRwdXQp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoc3RhdGlj
X2Nhc3Q8Y2hhcj4odWNoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBvdXRwdXRQYXJzZWQucGF0
aC5zZXRMZW5ndGgob3V0cHV0Lmxlbmd0aCgpIC0gb3V0cHV0UGFyc2VkLnBhdGguYmVnaW4oKSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gTm8gcGF0aCBhdCBhbGwKLSAgICAgICAgb3V0cHV0
UGFyc2VkLnBhdGgucmVzZXQoKTsKLSAgICB9Ci0KLSAgICAvLyBRdWVyeSAtLSBhbHdheXMgdXNl
IHRoZSBkZWZhdWx0IHV0ZjggY2hhcnNldCBjb252ZXJ0ZXIuCi0gICAgQ2Fub25pY2FsaXplUXVl
cnkoc291cmNlLnF1ZXJ5LCBwYXJzZWQucXVlcnksIDAsIG91dHB1dCwgJm91dHB1dFBhcnNlZC5x
dWVyeSk7Ci0KLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotfSAvLyBuYW1lc3BhY2UKLQotYm9v
bCBjYW5vbmljYWxpemVNYWlsdG9VUkwoY29uc3QgY2hhciogc3BlYywgY29uc3QgVVJMU2VnbWVu
dHMmIHBhcnNlZCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTFNlZ21lbnRzJiBvdXRwdXRQ
YXJzZWQpCi17Ci0gICAgcmV0dXJuIGRvQ2Fub25pY2FsaXplTWFpbHRvVVJMPGNoYXIsIHVuc2ln
bmVkIGNoYXI+KFVSTENvbXBvbmVudFNvdXJjZTxjaGFyPihzcGVjKSwgcGFyc2VkLCBvdXRwdXQs
IG91dHB1dFBhcnNlZCk7Ci19Ci0KLWJvb2wgY2Fub25pY2FsaXplTWFpbHRvVVJMKGNvbnN0IFVD
aGFyKiBzcGVjLCBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLCBVUkxCdWZmZXI8Y2hhcj4mIG91
dHB1dCwgVVJMU2VnbWVudHMmIG91dHB1dFBhcnNlZCkKLXsKLSAgICByZXR1cm4gZG9DYW5vbmlj
YWxpemVNYWlsdG9VUkw8VUNoYXIsIFVDaGFyPihVUkxDb21wb25lbnRTb3VyY2U8VUNoYXI+KHNw
ZWMpLCBwYXJzZWQsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKLX0KLQotYm9vbCByZXBsYWNlTWFp
bHRvVVJMKGNvbnN0IGNoYXIqIGJhc2UsIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAot
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlcGxhY2VtZW50czxjaGFyPiYgcmVwbGFjZW1l
bnRzLAotICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxT
ZWdtZW50cyYgb3V0cHV0UGFyc2VkKQotewotICAgIFVSTENvbXBvbmVudFNvdXJjZTxjaGFyPiBz
b3VyY2UoYmFzZSk7Ci0gICAgVVJMU2VnbWVudHMgcGFyc2VkKGJhc2VQYXJzZWQpOwotICAgIFNl
dHVwT3ZlcnJpZGVDb21wb25lbnRzKGJhc2UsIHJlcGxhY2VtZW50cywgJnNvdXJjZSwgJnBhcnNl
ZCk7Ci0gICAgcmV0dXJuIGRvQ2Fub25pY2FsaXplTWFpbHRvVVJMPGNoYXIsIHVuc2lnbmVkIGNo
YXI+KHNvdXJjZSwgcGFyc2VkLCBvdXRwdXQsIG91dHB1dFBhcnNlZCk7Ci19Ci0KLWJvb2wgcmVw
bGFjZU1haWx0b1VSTChjb25zdCBjaGFyKiBiYXNlLCBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBh
cnNlZCwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXBsYWNlbWVudHM8VUNoYXI+JiBy
ZXBsYWNlbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRw
dXQsIFVSTFNlZ21lbnRzJiBvdXRwdXRQYXJzZWQpCi17Ci0gICAgUmF3VVJMQnVmZmVyPGNoYXI+
IHV0Zjg7Ci0gICAgVVJMQ29tcG9uZW50U291cmNlPGNoYXI+IHNvdXJjZShiYXNlKTsKLSAgICBV
UkxTZWdtZW50cyBwYXJzZWQoYmFzZVBhcnNlZCk7Ci0gICAgU2V0dXBVVEYxNk92ZXJyaWRlQ29t
cG9uZW50cyhiYXNlLCByZXBsYWNlbWVudHMsIHV0ZjgsICZzb3VyY2UsICZwYXJzZWQpOwotICAg
IHJldHVybiBkb0Nhbm9uaWNhbGl6ZU1haWx0b1VSTDxjaGFyLCB1bnNpZ25lZCBjaGFyPihzb3Vy
Y2UsIHBhcnNlZCwgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBV
UkxDYW5vbmljYWxpemVyCi0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gVVNFKFdU
RlVSTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25QYXRoLmNw
cCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25QYXRoLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOWJjNDQzZmQ3Y2RmYmE0NzM4YWRhNDU0NDQ2ODJhNzhmM2UxODk4
NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uUGF0aC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNzIg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA3IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
Q2Fub25pY2FsaXphdGlvbiBmdW5jdGlvbnMgZm9yIHRoZSBwYXRocyBvZiBVUkxzLgotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVVJMQ2Fub24uaCIKLQotI2luY2x1ZGUgIlVSTENh
bm9uSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJVUkxQYXJzZUludGVybmFsLmgiCi0KLSNpZiBVU0Uo
V1RGVVJMKQotCi1uYW1lc3BhY2UgV1RGIHsKLQotbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIg
ewotCi1uYW1lc3BhY2UgewotCi1lbnVtIENoYXJhY3RlckZsYWdzIHsKLSAgICAvLyBQYXNzIHRo
cm91Z2ggdW5jaGFuZ2VkLCB3aGV0aGVyIGVzY2FwZWQgb3IgdW5lc2NhcGVkLiBUaGlzIGRvZXNu
J3QKLSAgICAvLyBhY3R1YWxseSBzZXQgYW55dGhpbmcgc28geW91IGNhbid0IE9SIGl0IHRvIGNo
ZWNrLCBpdCdzIGp1c3QgdG8gbWFrZSB0aGUKLSAgICAvLyB0YWJsZSBiZWxvdyBtb3JlIGNsZWFy
IHdoZW4gbmVpdGhlciBFU0NBUEUgb3IgVU5FU0NBUEUgaXMgc2V0LgotICAgIFBBU1MgPSAwLAot
Ci0gICAgLy8gVGhpcyBjaGFyYWN0ZXIgcmVxdWlyZXMgc3BlY2lhbCBoYW5kbGluZyBpbiBkb1Bh
cnRpYWxQYXRoLiBEb2luZyB0aGlzIHRlc3QKLSAgICAvLyBmaXJzdCBhbGxvd3MgdXMgdG8gZmls
dGVyIG91dCB0aGUgY29tbW9uIGNhc2VzIG9mIHJlZ3VsYXIgY2hhcmFjdGVycyB0aGF0Ci0gICAg
Ly8gY2FuIGJlIGRpcmVjdGx5IGNvcGllZC4KLSAgICBTUEVDSUFMID0gMSwKLQotICAgIC8vIFRo
aXMgY2hhcmFjdGVyIG11c3QgYmUgZXNjYXBlZCBpbiB0aGUgY2Fub25pY2FsIG91dHB1dC4gTm90
ZSB0aGF0IGFsbAotICAgIC8vIGVzY2FwZWQgY2hhcnMgYWxzbyBoYXZlIHRoZSAic3BlY2lhbCIg
Yml0IHNldCBzbyB0aGF0IHRoZSBjb2RlIHRoYXQgbG9va3MKLSAgICAvLyBmb3IgdGhpcyBpcyB0
cmlnZ2VyZWQuIE5vdCB2YWxpZCB3aXRoIFBBU1Mgb3IgRVNDQVBFCi0gICAgRVNDQVBFX0JJVCA9
IDIsCi0gICAgRVNDQVBFID0gRVNDQVBFX0JJVCB8IFNQRUNJQUwsCi0KLSAgICAvLyBUaGlzIGNo
YXJhY3RlciBtdXN0IGJlIHVuZXNjYXBlZCBpbiBjYW5vbmljYWwgb3V0cHV0LiBOb3QgdmFsaWQg
d2l0aAotICAgIC8vIEVTQ0FQRSBvciBQQVNTLiBXZSBET04nVCBzZXQgdGhlIFNQRUNJQUwgZmxh
ZyBzaW5jZSBpZiB3ZSBlbmNvdW50ZXIgdGhlc2UKLSAgICAvLyBjaGFyYWN0ZXJzIHVuZXNjYXBl
ZCwgdGhleSBzaG91bGQganVzdCBiZSBjb3BpZWQuCi0gICAgVU5FU0NBUEUgPSA0LAotCi0gICAg
Ly8gVGhpcyBjaGFyYWN0ZXIgaXMgZGlzYWxsb3dlZCBpbiBVUkxzLiBOb3RlIHRoYXQgdGhlICJz
cGVjaWFsIiBiaXQgaXMgYWxzbwotICAgIC8vIHNldCB0byB0cmlnZ2VyIGhhbmRsaW5nLgotICAg
IElOVkFMSURfQklUID0gOCwKLSAgICBJTlZBTElEID0gSU5WQUxJRF9CSVQgfCBTUEVDSUFMLAot
fTsKLQotLy8gVGhpcyB0YWJsZSBjb250YWlucyBvbmUgb2YgdGhlIGFib3ZlIGZsYWcgdmFsdWVz
LiBOb3RlIHNvbWUgZmxhZ3MgYXJlIG1vcmUKLS8vIHRoYW4gb25lIGJpdHMgYmVjYXVzZSB0aGV5
IGFsc28gdHVybiBvbiB0aGUgInNwZWNpYWwiIGZsYWcuIFNwZWNpYWwgaXMgdGhlCi0vLyBvbmx5
IGZsYWcgdGhhdCBtYXkgYmUgY29tYmluZWQgd2l0aCBvdGhlcnMuCi0vLwotLy8gVGhpcyB0YWJs
ZSBpcyBkZXNpZ25lZCB0byBtYXRjaCBleGFjdGx5IHdoYXQgSUUgZG9lcyB3aXRoIHRoZSBjaGFy
YWN0ZXJzLgotLy8KLS8vIERvdCBpcyBldmVuIG1vcmUgc3BlY2lhbCwgYW5kIHRoZSBlc2NhcGVk
IHZlcnNpb24gaXMgaGFuZGxlZCBzcGVjaWFsbHkgYnkKLS8vIGlzRG90LiBUaGVyZWZvcmUsIHdl
IGRvbid0IG5lZWQgdGhlICJlc2NhcGUiIGZsYWcsIGFuZCBldmVuIHRoZSAidW5lc2NhcGUiCi0v
LyBiaXQgaXMgbmV2ZXIgaGFuZGxlZCAod2UganVzdCBuZWVkIHRoZSAic3BlY2lhbCIpIGJpdC4K
LWNvbnN0IHVuc2lnbmVkIGNoYXIga1BhdGhDaGFyTG9va3VwWzB4MTAwXSA9IHsKLS8vICAgbnVs
bCAgICAgY29udHJvbCBjaGFycy4uLgotICAgICBJTlZBTElELCAgRVNDQVBFLCAgIEVTQ0FQRSwg
ICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQ
RSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVT
Q0FQRSwgICBFU0NBUEUsCi0vLyAgIGNvbnRyb2wgY2hhcnMuLi4KLSAgICAgRVNDQVBFLCAgIEVT
Q0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAg
IEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBF
LCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLAotLy8gICAnICcgICAgICAgISAgICAgICAg
ICIgICAgICAgICAjICAgICAgICAgJCAgICAgICAgICUgICAgICAgICAmICAgICAgICAgJyAgICAg
ICAgICggICAgICAgICApICAgICAgICAgKiAgICAgICAgICsgICAgICAgICAsICAgICAgICAgLSAg
ICAgICAgIC4gICAgICAgICAvCi0gICAgIEVTQ0FQRSwgICBQQVNTLCAgICAgRVNDQVBFLCAgIEVT
Q0FQRSwgICBQQVNTLCAgICAgRVNDQVBFLCAgIFBBU1MsICAgICBQQVNTLCAgICAgUEFTUywgICAg
IFBBU1MsICAgICBQQVNTLCAgICAgUEFTUywgICAgIFBBU1MsICAgICBVTkVTQ0FQRSwgU1BFQ0lB
TCwgIFBBU1MsCi0vLyAgIDAgICAgICAgICAxICAgICAgICAgMiAgICAgICAgIDMgICAgICAgICA0
ICAgICAgICAgNSAgICAgICAgIDYgICAgICAgICA3ICAgICAgICAgOCAgICAgICAgIDkgICAgICAg
ICA6ICAgICAgICAgOyAgICAgICAgIDwgICAgICAgICA9ICAgICAgICAgID4gICAgICAgID8KLSAg
ICAgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVT
Q0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFBBU1MsICAgICBQ
QVNTLCAgICAgRVNDQVBFLCAgIFBBU1MsICAgICBFU0NBUEUsICAgRVNDQVBFLAotLy8gICBAICAg
ICAgICAgQSAgICAgICAgIEIgICAgICAgICBDICAgICAgICAgRCAgICAgICAgIEUgICAgICAgICBG
ICAgICAgICAgRyAgICAgICAgIEggICAgICAgICBJICAgICAgICAgSiAgICAgICAgIEsgICAgICAg
ICBMICAgICAgICAgTSAgICAgICAgIE4gICAgICAgICBPCi0gICAgIFBBU1MsICAgICBVTkVTQ0FQ
RSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVT
Q0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBV
TkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLAotLy8gICBQICAgICAgICAgUSAgICAgICAgIFIg
ICAgICAgICBTICAgICAgICAgVCAgICAgICAgIFUgICAgICAgICBWICAgICAgICAgVyAgICAgICAg
IFggICAgICAgICBZICAgICAgICAgWiAgICAgICAgIFsgICAgICAgICBcICAgICAgICAgXSAgICAg
ICAgIF4gICAgICAgICBfCi0gICAgIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVND
QVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVO
RVNDQVBFLCBVTkVTQ0FQRSwgUEFTUywgICAgIEVTQ0FQRSwgICBQQVNTLCAgICAgRVNDQVBFLCAg
IFVORVNDQVBFLAotLy8gICBgICAgICAgICAgYSAgICAgICAgIGIgICAgICAgICBjICAgICAgICAg
ZCAgICAgICAgIGUgICAgICAgICBmICAgICAgICAgZyAgICAgICAgIGggICAgICAgICBpICAgICAg
ICAgaiAgICAgICAgIGsgICAgICAgICBsICAgICAgICAgbSAgICAgICAgIG4gICAgICAgICBvCi0g
ICAgIEVTQ0FQRSwgICBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5F
U0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwg
VU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLAotLy8gICBw
ICAgICAgICAgcSAgICAgICAgIHIgICAgICAgICBzICAgICAgICAgdCAgICAgICAgIHUgICAgICAg
ICB2ICAgICAgICAgdyAgICAgICAgIHggICAgICAgICB5ICAgICAgICAgeiAgICAgICAgIHsgICAg
ICAgICB8ICAgICAgICAgfSAgICAgICAgIH4gICAgICAgICA8TkJTUD4KLSAgICAgVU5FU0NBUEUs
IFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NB
UEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBFU0NBUEUsICAgRVND
QVBFLCAgIEVTQ0FQRSwgICBVTkVTQ0FQRSwgRVNDQVBFLAotLy8gICAuLi5hbGwgdGhlIGhpZ2gt
Yml0IGNoYXJhY3RlcnMgYXJlIGVzY2FwZWQKLSAgICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NB
UEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBF
U0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwg
ICBFU0NBUEUsICAgRVNDQVBFLAotICAgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBF
U0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwg
ICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQ
RSwgICBFU0NBUEUsCi0gICAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwg
ICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQ
RSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVT
Q0FQRSwKLSAgICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQ
RSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVT
Q0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLAot
ICAgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVT
Q0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAg
IEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsCi0gICAgIEVT
Q0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAg
IEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBF
LCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwKLSAgICAgRVNDQVBFLCAg
IEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBF
LCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVND
QVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLAotICAgICBFU0NBUEUsICAgRVNDQVBF
LCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVND
QVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAg
RVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEV9OwotCi1lbnVtIERvdERpc3Bvc2l0aW9uIHsKLSAg
ICAvLyBUaGUgZ2l2ZW4gZG90IGlzIGp1c3QgcGFydCBvZiBhIGZpbGVuYW1lIGFuZCBpcyBub3Qg
c3BlY2lhbC4KLSAgICBOT1RfQV9ESVJFQ1RPUlksCi0KLSAgICAvLyBUaGUgZ2l2ZW4gZG90IGlz
IHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KLSAgICBESVJFQ1RPUllfQ1VSLAotCi0gICAgLy8gVGhl
IGdpdmVuIGRvdCBpcyB0aGUgZmlyc3Qgb2YgYSBkb3VibGUgZG90IHRoYXQgc2hvdWxkIHRha2Ug
dXMgdXAgb25lLgotICAgIERJUkVDVE9SWV9VUAotfTsKLQotLy8gV2hlbiB0aGUgcGF0aCByZXNv
bHZlciBmaW5kcyBhIGRvdCwgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUKLS8vIGNo
YXJhY3RlciBmb2xsb3dpbmcgdGhhdCBkb3QgdG8gc2VlIHdoYXQgaXQgaXMuIFRoZSByZXR1cm4g
dmFsdWUKLS8vIGluZGljYXRlcyB3aGF0IHR5cGUgdGhpcyBkb3QgaXMgKHNlZSBhYm92ZSkuIFRo
aXMgY29kZSBoYW5kbGVzIHRoZSBjYXNlCi0vLyB3aGVyZSB0aGUgZG90IGlzIGF0IHRoZSBlbmQg
b2YgdGhlIGlucHV0LgotLy8KLS8vIHwqY29uc3VtZWRMZW5ndGh8IHdpbGwgY29udGFpbiB0aGUg
bnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhlIGlucHV0IHRoYXQKLS8vIGV4cHJlc3Mgd2hhdCB3
ZSBmb3VuZC4KLS8vCi0vLyBJZiB0aGUgaW5wdXQgaXMgIi4uL2ZvbyIsIHxhZnRlckRvdHwgPSAx
LCB8ZW5kfCA9IDYsIGFuZAotLy8gYXQgdGhlIGVuZCwgfCpjb25zdW1lZExlbmd0aHwgPSAyIGZv
ciB0aGUgIi4vIiB0aGlzIGZ1bmN0aW9uIGNvbnN1bWVkLiBUaGUKLS8vIG9yaWdpbmFsIGRvdCBs
ZW5ndGggc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIGNhbGxlci4KLXRlbXBsYXRlPHR5cGVuYW1l
IENIQVI+Ci1Eb3REaXNwb3NpdGlvbiBDbGFzc2lmeUFmdGVyRG90KGNvbnN0IENIQVIqIHNwZWMs
IGludCBhZnRlckRvdCwgaW50IGVuZCwgaW50KiBjb25zdW1lZExlbmd0aCkKLXsKLSAgICBpZiAo
YWZ0ZXJEb3QgPT0gZW5kKSB7Ci0gICAgICAgIC8vIFNpbmdsZSBkb3QgYXQgdGhlIGVuZC4KLSAg
ICAgICAgKmNvbnN1bWVkTGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJuIERJUkVDVE9SWV9DVVI7
Ci0gICAgfQotICAgIGlmIChVUkxQYXJzZXI6OmlzVVJMU2xhc2goc3BlY1thZnRlckRvdF0pKSB7
Ci0gICAgICAgIC8vIFNpbmdsZSBkb3QgZm9sbG93ZWQgYnkgYSBzbGFzaC4KLSAgICAgICAgKmNv
bnN1bWVkTGVuZ3RoID0gMTsgLy8gQ29uc3VtZSB0aGUgc2xhc2gKLSAgICAgICAgcmV0dXJuIERJ
UkVDVE9SWV9DVVI7Ci0gICAgfQotCi0gICAgaW50IHNlY29uZERvdExlbmd0aCA9IGlzRG90KHNw
ZWMsIGFmdGVyRG90LCBlbmQpOwotICAgIGlmIChzZWNvbmREb3RMZW5ndGgpIHsKLSAgICAgICAg
aW50IGFmdGVyU2Vjb25kRG90ID0gYWZ0ZXJEb3QgKyBzZWNvbmREb3RMZW5ndGg7Ci0gICAgICAg
IGlmIChhZnRlclNlY29uZERvdCA9PSBlbmQpIHsKLSAgICAgICAgICAgIC8vIERvdWJsZSBkb3Qg
YXQgdGhlIGVuZC4KLSAgICAgICAgICAgICpjb25zdW1lZExlbmd0aCA9IHNlY29uZERvdExlbmd0
aDsKLSAgICAgICAgICAgIHJldHVybiBESVJFQ1RPUllfVVA7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKFVSTFBhcnNlcjo6aXNVUkxTbGFzaChzcGVjW2FmdGVyU2Vjb25kRG90XSkpIHsKLSAgICAg
ICAgICAgIC8vIERvdWJsZSBkb3QgZm9sbG93ZWQgYnkgYSBzbGFzaC4KLSAgICAgICAgICAgICpj
b25zdW1lZExlbmd0aCA9IHNlY29uZERvdExlbmd0aCArIDE7Ci0gICAgICAgICAgICByZXR1cm4g
RElSRUNUT1JZX1VQOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIGRvdHMgYXJlIGZv
bGxvd2VkIGJ5IHNvbWV0aGluZyBlbHNlLCBub3QgYSBkaXJlY3RvcnkuCi0gICAgKmNvbnN1bWVk
TGVuZ3RoID0gMDsKLSAgICByZXR1cm4gTk9UX0FfRElSRUNUT1JZOwotfQotCi0vLyBSZXdpbmRz
IHRoZSBvdXRwdXQgdG8gdGhlIHByZXZpb3VzIHNsYXNoLiBJdCBpcyBhc3N1bWVkIHRoYXQgdGhl
IG91dHB1dAotLy8gZW5kcyB3aXRoIGEgc2xhc2ggYW5kIHRoaXMgZG9lc24ndCBjb3VudCAod2Ug
Y2FsbCB0aGlzIHdoZW4gd2UgYXJlCi0vLyBhcHBlbmRpbmcgZGlyZWN0b3J5IHBhdGhzLCBzbyB0
aGUgcHJldmlvdXMgcGF0aCBjb21wb25lbnQgaGFzIGFuZCBlbmRpbmcKLS8vIHNsYXNoKS4KLS8v
Ci0vLyBUaGlzIHdpbGwgc3RvcCBhdCB0aGUgZmlyc3Qgc2xhc2ggKGFzc3VtZWQgdG8gYmUgYXQg
cG9zaXRpb24KLS8vIHxwYXRoQmVnaW5Jbk91dHB1dHwgYW5kIG5vdCBnbyBhbnkgaGlnaGVyIHRo
YW4gdGhhdC4gU29tZSB3ZWIgcGFnZXMKLS8vIGRvICIuLiIgdG9vIG1hbnkgdGltZXMsIHNvIHdl
IG5lZWQgdG8gaGFuZGxlIHRoYXQgYnJva2VubmVzcy4KLS8vCi0vLyBJdCBzZWFyY2hlcyBmb3Ig
YSBsaXRlcmFsIHNsYXNoIHJhdGhlciB0aGFuIGluY2x1ZGluZyBhIGJhY2tzbGFzaCBhcyB3ZWxs
Ci0vLyBiZWNhdXNlIGl0IGlzIHJ1biBvbmx5IG9uIHRoZSBjYW5vbmljYWwgb3V0cHV0LgotLy8K
LS8vIFRoZSBvdXRwdXQgaXMgZ3VhcmFudGVlZCB0byBlbmQgaW4gYSBzbGFzaCB3aGVuIHRoaXMg
ZnVuY3Rpb24gY29tcGxldGVzLgotdm9pZCBCYWNrVXBUb1ByZXZpb3VzU2xhc2goaW50IHBhdGhC
ZWdpbkluT3V0cHV0LCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKLXsKLSAgICBBU1NFUlQob3V0
cHV0Lmxlbmd0aCgpID4gMCk7Ci0KLSAgICBpbnQgaSA9IG91dHB1dC5sZW5ndGgoKSAtIDE7Ci0g
ICAgQVNTRVJUKG91dHB1dC5hdChpKSA9PSAnLycpOwotICAgIGlmIChpID09IHBhdGhCZWdpbklu
T3V0cHV0KQotICAgICAgICByZXR1cm47IC8vIFdlJ3JlIGF0IHRoZSBmaXJzdCBzbGFzaCwgbm90
aGluZyB0byBkby4KLQotICAgIC8vIE5vdyBiYWNrIHVwIChza2lwcGluZyB0aGUgdHJhaWxpbmcg
c2xhc2gpIHVudGlsIHdlIGZpbmQgYW5vdGhlciBzbGFzaC4KLSAgICBpLS07Ci0gICAgd2hpbGUg
KG91dHB1dC5hdChpKSAhPSAnLycgJiYgaSA+IHBhdGhCZWdpbkluT3V0cHV0KQotICAgICAgICBp
LS07Ci0KLSAgICAvLyBOb3cgc2hyaW5rIHRoZSBvdXRwdXQgdG8ganVzdCBpbmNsdWRlIHRoYXQg
bGFzdCBzbGFzaCB3ZSBmb3VuZC4KLSAgICBvdXRwdXQuc2V0TGVuZ3RoKGkgKyAxKTsKLX0KLQot
Ly8gQXBwZW5kcyB0aGUgZ2l2ZW4gcGF0aCB0byB0aGUgb3V0cHV0LiBJdCBhc3N1bWVzIHRoYXQg
aWYgdGhlIGlucHV0IHBhdGgKLS8vIHN0YXJ0cyB3aXRoIGEgc2xhc2gsIGl0IHNob3VsZCBiZSBj
b3BpZWQgdG8gdGhlIG91dHB1dC4gSWYgbm8gcGF0aCBoYXMKLS8vIGFscmVhZHkgYmVlbiBhcHBl
bmRlZCB0byB0aGUgb3V0cHV0ICh0aGUgY2FzZSB3aGVuIG5vdCByZXNvbHZpbmcKLS8vIHJlbGF0
aXZlIFVSTHMpLCB0aGUgcGF0aCBzaG91bGQgYmVnaW4gd2l0aCBhIHNsYXNoLgotLy8KLS8vIElm
IHRoZXJlIGFyZSBhbHJlYWR5IHBhdGggY29tcG9uZW50cyAodGhpcyBtb2RlIGlzIHVzZWQgd2hl
biBhcHBlbmRpbmcKLS8vIHJlbGF0aXZlIHBhdGhzIGZvciByZXNvbHZpbmcpLCBpdCBhc3N1bWVz
IHRoYXQgdGhlIG91dHB1dCBhbHJlYWR5IGhhcwotLy8gYSB0cmFpbGluZyBzbGFzaCBhbmQgdGhh
dCBpZiB0aGUgaW5wdXQgYmVnaW5zIHdpdGggYSBzbGFzaCwgaXQgc2hvdWxkIGJlCi0vLyBjb3Bp
ZWQgdG8gdGhlIG91dHB1dC4KLS8vCi0vLyBXZSBkbyBub3QgY29sbGFwc2UgbXVsdGlwbGUgc2xh
c2hlcyBpbiBhIHJvdyB0byBhIHNpbmdsZSBzbGFzaC4gSXQgc2VlbXMKLS8vIG5vIHdlYiBicm93
c2VycyBkbyB0aGlzLCBhbmQgd2UgZG9uJ3Qgd2FudCBpbmNvbXBhYmFiaWxpdGllcywgZXZlbiB0
aG91Z2gKLS8vIGl0IHdvdWxkIGJlIGNvcnJlY3QgZm9yIG1vc3Qgc3lzdGVtcy4KLXRlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIHR5cGVuYW1lIFVDSEFSPgotYm9vbCBkb1BhcnRpYWxQ
YXRoKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0aCwg
aW50IHBhdGhCZWdpbkluT3V0cHV0LCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKLXsKLSAgICBp
bnQgZW5kID0gcGF0aC5lbmQoKTsKLQotICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0gICAgZm9y
IChpbnQgaSA9IHBhdGguYmVnaW4oKTsgaSA8IGVuZDsgKytpKSB7Ci0gICAgICAgIFVDSEFSIHVj
aCA9IHN0YXRpY19jYXN0PFVDSEFSPihzcGVjW2ldKTsKLSAgICAgICAgaWYgKHNpemVvZihDaGFy
YWN0ZXJUeXBlKSA+IHNpemVvZihjaGFyKSAmJiB1Y2ggPj0gMHg4MCkgewotICAgICAgICAgICAg
Ly8gV2Ugb25seSBuZWVkIHRvIHRlc3Qgd2lkZSBpbnB1dCBmb3IgaGF2aW5nIG5vbi1BU0NJSSBj
aGFyYWN0ZXJzLiBGb3IKLSAgICAgICAgICAgIC8vIG5hcnJvdyBpbnB1dCwgd2UnbGwgYWx3YXlz
IGp1c3QgdXNlIHRoZSBsb29rdXAgdGFibGUuIFdlIGRvbid0IHRyeSB0bwotICAgICAgICAgICAg
Ly8gZG8gYW55dGhpbmcgdHJpY2t5IHdpdGggZGVjb2RpbmcvdmFsaWRhdGluZyBVVEYtOC4gVGhp
cyBmdW5jdGlvbiB3aWxsCi0gICAgICAgICAgICAvLyByZWFkIG9uZSBvciB0d28gVVRGLTE2IGNo
YXJhY3RlcnMgYW5kIGFwcGVuZCB0aGUgb3V0cHV0IGFzIFVURi04LiBUaGlzCi0gICAgICAgICAg
ICAvLyBjYWxsIHdpbGwgYmUgcmVtb3ZlZCBpbiA4LWJpdCBtb2RlLgotICAgICAgICAgICAgc3Vj
Y2VzcyAmPSBBcHBlbmRVVEY4RXNjYXBlZENoYXIoc3BlYywgJmksIGVuZCwgb3V0cHV0KTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIE5vcm1hbCBBU0NJSSBjaGFyYWN0ZXIgb3Ig
OC1iaXQgaW5wdXQsIHVzZSB0aGUgbG9va3VwIHRhYmxlLgotICAgICAgICAgICAgdW5zaWduZWQg
Y2hhciBvdXRDaCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHVjaCk7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBjaGFyIGZsYWdzID0ga1BhdGhDaGFyTG9va3VwW291dENoXTsKLSAgICAgICAg
ICAgIGlmIChmbGFncyAmIFNQRUNJQUwpIHsKLSAgICAgICAgICAgICAgICAvLyBOZWVkcyBzcGVj
aWFsIGhhbmRsaW5nIG9mIHNvbWUgc29ydC4KLSAgICAgICAgICAgICAgICBpbnQgZG90bGVuOwot
ICAgICAgICAgICAgICAgIGlmICgoZG90bGVuID0gaXNEb3Qoc3BlYywgaSwgZW5kKSkgPiAwKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNlZSBpZiB0aGlzIGRvdCB3YXMgcHJlY2VlZGVkIGJ5
IGEgc2xhc2ggaW4gdGhlIG91dHB1dC4gV2UKLSAgICAgICAgICAgICAgICAgICAgLy8gYXNzdW1l
IHRoYXQgd2hlbiBjYW5vbmljYWxpemluZyBwYXRocywgdGhleSB3aWxsIGFsd2F5cwotICAgICAg
ICAgICAgICAgICAgICAvLyBzdGFydCB3aXRoIGEgc2xhc2ggYW5kIG5vdCBhIGRvdCwgc28gd2Ug
ZG9uJ3QgaGF2ZSB0bwotICAgICAgICAgICAgICAgICAgICAvLyBib3VuZHMgY2hlY2sgdGhlIG91
dHB1dC4KLSAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgLy8gTm90
ZSB0aGF0IHdlIGNoZWNrIHRoaXMgaW4gdGhlIGNhc2Ugb2YgZG90cyBzbyB3ZSBkb24ndCBoYXZl
IHRvCi0gICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSBzbGFzaGVzLiBTaW5jZSBz
bGFzaGVzIGFyZSBtdWNoIG1vcmUgY29tbW9uIHRoYW4KLSAgICAgICAgICAgICAgICAgICAgLy8g
ZG90cywgdGhpcyBhY3R1YWxseSBpbmNyZWFzZXMgcGVyZm9ybWFuY2UgbWVhc3VyYWJseSAodGhv
dWdoCi0gICAgICAgICAgICAgICAgICAgIC8vIHNsaWdodGx5KS4KLSAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKG91dHB1dC5sZW5ndGgoKSA+IHBhdGhCZWdpbkluT3V0cHV0KTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKG91dHB1dC5sZW5ndGgoKSA+IHBhdGhCZWdpbkluT3V0cHV0ICYmIG91
dHB1dC5hdChvdXRwdXQubGVuZ3RoKCkgLSAxKSA9PSAnLycpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFNsYXNoIGZvbGxvd2VkIGJ5IGEgZG90LCBjaGVjayB0byBzZWUgaWYgdGhpcyBp
cyBtZWFucyByZWxhdGl2ZQotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbnN1bWVkTGVu
Z3RoOwotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChDbGFzc2lmeUFmdGVyRG90PENo
YXJhY3RlclR5cGU+KHNwZWMsIGkgKyBkb3RsZW4sIGVuZCwgJmNvbnN1bWVkTGVuZ3RoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBOT1RfQV9ESVJFQ1RPUlk6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQ29weSB0aGUgZG90IHRvIHRoZSBvdXRwdXQsIGl0IG1lYW5z
IG5vdGhpbmcgc3BlY2lhbC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBw
ZW5kKCcuJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSBkb3RsZW4gLSAxOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBESVJFQ1RPUllfQ1VSOiAvLyBDdXJyZW50IGRpcmVjdG9yeSwganVzdCBza2lwIHRo
ZSBpbnB1dC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IGRvdGxlbiArIGNvbnN1
bWVkTGVuZ3RoIC0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRElSRUNUT1JZX1VQOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEJhY2tVcFRvUHJldmlvdXNTbGFzaChwYXRoQmVnaW5Jbk91dHB1dCwgb3V0cHV0
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IGRvdGxlbiArIGNvbnN1bWVkTGVu
Z3RoIC0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFRoaXMgZG90IGlzIG5vdCBwcmVjZWVkZWQgYnkgYSBzbGFzaCwgaXQg
aXMganVzdCBwYXJ0IG9mIHNvbWUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpbGUgbmFt
ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJy4nKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGkgKz0gZG90bGVuIC0gMTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3V0Q2ggPT0gJ1xcJykgewotICAgICAgICAgICAg
ICAgICAgICAvLyBDb252ZXJ0IGJhY2tzbGFzaGVzIHRvIGZvcndhcmQgc2xhc2hlcwotICAgICAg
ICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCcvJyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChvdXRDaCA9PSAnJScpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGVzY2Fw
ZSBzZXF1ZW5jZXMuCi0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgdW5lc2NhcGVk
VmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEZWNvZGVFc2NhcGVkKHNwZWMsICZpLCBl
bmQsICZ1bmVzY2FwZWRWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFZhbGlk
IGVzY2FwZSBzZXF1ZW5jZSwgc2VlIGlmIHdlIGtlZXAsIHJlamVjdCwgb3IgdW5lc2NhcGUgaXQu
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyIHVuZXNjYXBlZEZsYWdzID0ga1BhdGhDaGFy
TG9va3VwW3VuZXNjYXBlZFZhbHVlXTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVu
ZXNjYXBlZEZsYWdzICYgVU5FU0NBUEUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBUaGlzIGVzY2FwZWQgdmFsdWUgc2hvdWxkbid0IGJlIGVzY2FwZWQsIGNvcHkgaXQuCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCh1bmVzY2FwZWRWYWx1ZSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVuZXNjYXBlZEZsYWdzICYgSU5WQUxJ
RF9CSVQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnZhbGlkIGVzY2FwZWQg
Y2hhcmFjdGVyLCBjb3B5IGl0IGFuZCByZW1lbWJlciB0aGUgZXJyb3IuCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnJScpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4oc3BlY1tpIC0gMV0pKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHN0YXRpY19jYXN0PGNoYXI+
KHNwZWNbaV0pKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFZhbGlkIGVzY2FwZWQgY2hhcmFjdGVyIGJ1dCB3ZSBzaG91bGQga2VlcCBpdCBl
c2NhcGVkLiBXZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvbid0IHdhbnQgdG8g
Y2hhbmdlIHRoZSBjYXNlIG9mIGFueSBoZXggbGV0dGVycyBpbiBjYXNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gdGhlIHNlcnZlciBpcyBzZW5zaXRpdmUgdG8gdGhhdCwgc28gd2Ug
anVzdCBjb3B5IHRoZSB0d28KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFyYWN0
ZXJzIHdpdGhvdXQgY2hlY2tpbmcgKERlY29kZUVzY2FwZSB3aWxsIGhhdmUgYWR2YW5jZWQKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgdGhl
IHBhaXIpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJyUnKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHN0YXRpY19jYXN0PGNo
YXI+KHNwZWNbaSAtIDFdKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFw
cGVuZChzdGF0aWNfY2FzdDxjaGFyPihzcGVjW2ldKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBJbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZS4gSUU3IHJlamVjdHMgYW55IFVSTHMgd2l0aCBz
dWNoCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXF1ZW5jZXMsIHdoaWxlIEZpcmVmb3gs
IElFNiwgYW5kIFNhZmFyaSBhbGwgcGFzcyBpdCB0aHJvdWdoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyB1bmNoYW5nZWQuIFdlIGFyZSBtb3JlIHBlcm1pc3NpdmUgdW5saWtlIElFNy4gSSBk
b24ndCB0aGluayB0aGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4gY2F1c2Ugc2ln
bmlmaWNhbnQgcHJvYmxlbXMsIGlmIGl0IGRvZXMsIHdlIHNob3VsZCBjaGFuZ2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHRvIGJlIG1vcmUgbGlrZSBJRTcuCi0gICAgICAgICAgICAgICAg
ICAgICAgICBvdXRwdXQuYXBwZW5kKCclJyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmxhZ3MgJiBJTlZBTElEX0JJVCkgewotICAgICAgICAg
ICAgICAgICAgICAvLyBGb3IgTlVMTHMsIGV0Yy4gZmFpbC4KLSAgICAgICAgICAgICAgICAgICAg
YXBwZW5kVVJMRXNjYXBlZENoYXJhY3RlcihvdXRDaCwgb3V0cHV0KTsKLSAgICAgICAgICAgICAg
ICAgICAgc3VjY2VzcyA9IGZhbHNlOwotCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmbGFn
cyAmIEVTQ0FQRV9CSVQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjaGFyYWN0ZXIg
c2hvdWxkIGJlIGVzY2FwZWQuCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFVSTEVzY2FwZWRD
aGFyYWN0ZXIob3V0Q2gsIG91dHB1dCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBOb3RoaW5nIHNwZWNpYWwgYWJvdXQgdGhpcyBj
aGFyYWN0ZXIsIGp1c3QgYXBwZW5kIGl0LgotICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQo
b3V0Q2gpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBzdWNj
ZXNzOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBVQ0hB
Uj4KLWJvb2wgZG9QYXRoKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVSTENvbXBv
bmVudCYgcGF0aCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTENvbXBvbmVudCYgb3V0cHV0
UGF0aCkKLXsKLSAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwotICAgIG91dHB1dFBhdGguc2V0QmVn
aW4ob3V0cHV0Lmxlbmd0aCgpKTsKLSAgICBpZiAocGF0aC5sZW5ndGgoKSA+IDApIHsKLSAgICAg
ICAgLy8gV3JpdGUgb3V0IGFuIGluaXRpYWwgc2xhc2ggaWYgdGhlIGlucHV0IGhhcyBub25lLiBJ
ZiB3ZSBqdXN0IHBhcnNlIGEgVVJMCi0gICAgICAgIC8vIGFuZCB0aGVuIGNhbm9uaWNhbGl6ZSBp
dCwgaXQgd2lsbCBvZiBjb3Vyc2UgaGF2ZSBhIHNsYXNoIGFscmVhZHkuIFRoaXMKLSAgICAgICAg
Ly8gY2hlY2sgaXMgZm9yIHRoZSByZXBsYWNlbWVudCBhbmQgcmVsYXRpdmUgVVJMIHJlc29sdmlu
ZyBjYXNlcyBvZiBmaWxlCi0gICAgICAgIC8vIFVSTHMuCi0gICAgICAgIGlmICghVVJMUGFyc2Vy
Ojppc1VSTFNsYXNoKHNwZWNbcGF0aC5iZWdpbigpXSkpCi0gICAgICAgICAgICBvdXRwdXQuYXBw
ZW5kKCcvJyk7Ci0KLSAgICAgICAgc3VjY2VzcyA9IGRvUGFydGlhbFBhdGg8Q2hhcmFjdGVyVHlw
ZSwgVUNIQVI+KHNwZWMsIHBhdGgsIG91dHB1dFBhdGguYmVnaW4oKSwgb3V0cHV0KTsKLSAgICB9
IGVsc2UgewotICAgICAgICAvLyBObyBpbnB1dCwgY2Fub25pY2FsIHBhdGggaXMgYSBzbGFzaC4K
LSAgICAgICAgb3V0cHV0LmFwcGVuZCgnLycpOwotICAgIH0KLSAgICBvdXRwdXRQYXRoLnNldExl
bmd0aChvdXRwdXQubGVuZ3RoKCkgLSBvdXRwdXRQYXRoLmJlZ2luKCkpOwotICAgIHJldHVybiBz
dWNjZXNzOwotfQotCi19IC8vIG5hbWVzcGFjZQotCi1ib29sIENhbm9uaWNhbGl6ZVBhdGgoY29u
c3QgY2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLCBVUkxCdWZmZXI8Y2hhcj4m
IG91dHB1dCwgVVJMQ29tcG9uZW50KiBvdXRwdXRQYXRoKQotewotICAgIHJldHVybiBkb1BhdGg8
Y2hhciwgdW5zaWduZWQgY2hhcj4oc3BlYywgcGF0aCwgb3V0cHV0LCAqb3V0cHV0UGF0aCk7Ci19
Ci0KLWJvb2wgQ2Fub25pY2FsaXplUGF0aChjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29t
cG9uZW50JiBwYXRoLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMQ29tcG9uZW50KiBvdXRw
dXRQYXRoKQotewotICAgIHJldHVybiBkb1BhdGg8VUNoYXIsIFVDaGFyPihzcGVjLCBwYXRoLCBv
dXRwdXQsICpvdXRwdXRQYXRoKTsKLX0KLQotYm9vbCBDYW5vbmljYWxpemVQYXJ0aWFsUGF0aChj
b25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHBhdGgsIGludCBwYXRoQmVnaW5J
bk91dHB1dCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCi17Ci0gICAgcmV0dXJuIGRvUGFydGlh
bFBhdGg8Y2hhciwgdW5zaWduZWQgY2hhcj4oc3BlYywgcGF0aCwgcGF0aEJlZ2luSW5PdXRwdXQs
IG91dHB1dCk7Ci19Ci0KLWJvb2wgQ2Fub25pY2FsaXplUGFydGlhbFBhdGgoY29uc3QgVUNoYXIq
IHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0aCwgaW50IHBhdGhCZWdpbkluT3V0cHV0LCBV
UkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKLXsKLSAgICByZXR1cm4gZG9QYXJ0aWFsUGF0aDxVQ2hh
ciwgVUNoYXI+KHNwZWMsIHBhdGgsIHBhdGhCZWdpbkluT3V0cHV0LCBvdXRwdXQpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBVUkxDYW5vbmljYWxpemVyCi0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0j
ZW5kaWYgLy8gVVNFKFdURlVSTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMv
VVJMQ2Fub25QYXRodXJsLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25QYXRo
dXJsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VhMDM3YzIxNDFkMDJlMWY4
MGZkZWM2YjZiY2RlYmM3M2FlNjJhOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uUGF0aHVybC5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA3IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRnVuY3Rpb25zIGZvciBjYW5vbmljYWxpemluZyAicGF0
aCIgVVJMcy4gTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdGhlIHBhdGgKLS8vIG9mIGEgVVJMLCB0
aGVzZSBhcmUgVVJMcyB0aGF0IGhhdmUgbm8gYXV0aG9yaXR5IHNlY3Rpb24sIG9ubHkgYSBwYXRo
LiBGb3IKLS8vIGV4YW1wbGUsICJqYXZhc2NyaXB0OiIgYW5kICJkYXRhOiIuCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJVUkxDYW5vbi5oIgotCi0jaW5jbHVkZSAiUmF3VVJMQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiVVJMQ2Fub25JbnRlcm5hbC5oIgotCi0jaWYgVVNFKFdURlVSTCkK
LQotbmFtZXNwYWNlIFdURiB7Ci0KLW5hbWVzcGFjZSBVUkxDYW5vbmljYWxpemVyIHsKLQotbmFt
ZXNwYWNlIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgVUNI
QVI+Ci1ib29sIGRvQ2Fub25pY2FsaXplUGF0aFVSTChjb25zdCBVUkxDb21wb25lbnRTb3VyY2U8
Q2hhcmFjdGVyVHlwZT4mIHNvdXJjZSwgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNlZCwgVVJMQnVm
ZmVyPGNoYXI+JiBvdXRwdXQsIFVSTFNlZ21lbnRzJiBvdXB1dFBhcnNlZCkKLXsKLSAgICAvLyBT
Y2hlbWU6IHRoaXMgd2lsbCBhcHBlbmQgdGhlIGNvbG9uLgotICAgIGJvb2wgc3VjY2VzcyA9IGNh
bm9uaWNhbGl6ZVNjaGVtZShzb3VyY2Uuc2NoZW1lLCBwYXJzZWQuc2NoZW1lLCBvdXRwdXQsIG91
cHV0UGFyc2VkLnNjaGVtZSk7Ci0KLSAgICAvLyBXZSBhc3N1bWUgdGhlcmUncyBubyBhdXRob3Jp
dHkgZm9yIHBhdGggVVJMcy4gTm90ZSB0aGF0IGhvc3RzIHNob3VsZCBuZXZlcgotICAgIC8vIGhh
dmUgLTEgbGVuZ3RoLgotICAgIG91cHV0UGFyc2VkLnVzZXJuYW1lLnJlc2V0KCk7Ci0gICAgb3Vw
dXRQYXJzZWQucGFzc3dvcmQucmVzZXQoKTsKLSAgICBvdXB1dFBhcnNlZC5ob3N0LnJlc2V0KCk7
Ci0gICAgb3VwdXRQYXJzZWQucG9ydC5yZXNldCgpOwotCi0gICAgaWYgKHBhcnNlZC5wYXRoLmlz
VmFsaWQoKSkgewotICAgICAgICAvLyBDb3B5IHRoZSBwYXRoIHVzaW5nIHBhdGggVVJMJ3MgbW9y
ZSBsYXggZXNjYXBpbmcgcnVsZXMgKHRoaW5rIGZvcgotICAgICAgICAvLyBqYXZhc2NyaXB0Oiku
IFdlIGNvbnZlcnQgdG8gVVRGLTggYW5kIGVzY2FwZSBub24tQVNDSUksIGJ1dCBsZWF2ZSBhbGwK
LSAgICAgICAgLy8gQVNDSUkgY2hhcmFjdGVycyBhbG9uZS4gVGhpcyBoZWxwcyByZWFkYWJpbGl0
eSBvZiBKYXZhU3RyaXB0LgotICAgICAgICBvdXB1dFBhcnNlZC5wYXRoLnNldEJlZ2luKG91dHB1
dC5sZW5ndGgoKSk7Ci0gICAgICAgIGludCBlbmQgPSBwYXJzZWQucGF0aC5lbmQoKTsKLSAgICAg
ICAgZm9yIChpbnQgaSA9IHBhcnNlZC5wYXRoLmJlZ2luKCk7IGkgPCBlbmQ7ICsraSkgewotICAg
ICAgICAgICAgVUNIQVIgdWNoID0gc3RhdGljX2Nhc3Q8VUNIQVI+KHNvdXJjZS5wYXRoW2ldKTsK
LSAgICAgICAgICAgIGlmICh1Y2ggPCAweDIwIHx8IHVjaCA+PSAweDgwKQotICAgICAgICAgICAg
ICAgIHN1Y2Nlc3MgJj0gQXBwZW5kVVRGOEVzY2FwZWRDaGFyKHNvdXJjZS5wYXRoLCAmaSwgZW5k
LCBvdXRwdXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG91dHB1dC5hcHBl
bmQoc3RhdGljX2Nhc3Q8Y2hhcj4odWNoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgb3VwdXRQYXJz
ZWQucGF0aC5zZXRMZW5ndGgob3V0cHV0Lmxlbmd0aCgpIC0gb3VwdXRQYXJzZWQucGF0aC5iZWdp
bigpKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBFbXB0eSBwYXRoLgotICAgICAgICBvdXB1
dFBhcnNlZC5wYXRoLnJlc2V0KCk7Ci0gICAgfQotCi0gICAgLy8gQXNzdW1lIHRoZXJlJ3Mgbm8g
cXVlcnkgb3IgcmVmLgotICAgIG91cHV0UGFyc2VkLnF1ZXJ5LnJlc2V0KCk7Ci0gICAgb3VwdXRQ
YXJzZWQuZnJhZ21lbnQucmVzZXQoKTsKLQotICAgIHJldHVybiBzdWNjZXNzOwotfQotCi19IC8v
IG5hbWVzcGFjZQotCi1ib29sIGNhbm9uaWNhbGl6ZVBhdGhVUkwoY29uc3QgY2hhciogc3BlYywg
Y29uc3QgVVJMU2VnbWVudHMmIHBhcnNlZCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTFNl
Z21lbnRzJiBvdXB1dFBhcnNlZCkKLXsKLSAgICByZXR1cm4gZG9DYW5vbmljYWxpemVQYXRoVVJM
PGNoYXIsIHVuc2lnbmVkIGNoYXI+KFVSTENvbXBvbmVudFNvdXJjZTxjaGFyPihzcGVjKSwgcGFy
c2VkLCBvdXRwdXQsIG91cHV0UGFyc2VkKTsKLX0KLQotYm9vbCBjYW5vbmljYWxpemVQYXRoVVJM
KGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLCBVUkxCdWZmZXI8
Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVudHMmIG91cHV0UGFyc2VkKQotewotICAgIHJldHVybiBk
b0Nhbm9uaWNhbGl6ZVBhdGhVUkw8VUNoYXIsIFVDaGFyPihVUkxDb21wb25lbnRTb3VyY2U8VUNo
YXI+KHNwZWMpLCBwYXJzZWQsIG91dHB1dCwgb3VwdXRQYXJzZWQpOwotfQotCi1ib29sIFJlcGxh
Y2VQYXRoVVJMKGNvbnN0IGNoYXIqIGJhc2UsIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2Vk
LCBjb25zdCBSZXBsYWNlbWVudHM8Y2hhcj4mIHJlcGxhY2VtZW50cywgVVJMQnVmZmVyPGNoYXI+
JiBvdXRwdXQsIFVSTFNlZ21lbnRzKiBvdXB1dFBhcnNlZCkKLXsKLSAgICBVUkxDb21wb25lbnRT
b3VyY2U8Y2hhcj4gc291cmNlKGJhc2UpOwotICAgIFVSTFNlZ21lbnRzIHBhcnNlZChiYXNlUGFy
c2VkKTsKLSAgICBTZXR1cE92ZXJyaWRlQ29tcG9uZW50cyhiYXNlLCByZXBsYWNlbWVudHMsICZz
b3VyY2UsICZwYXJzZWQpOwotICAgIHJldHVybiBkb0Nhbm9uaWNhbGl6ZVBhdGhVUkw8Y2hhciwg
dW5zaWduZWQgY2hhcj4oc291cmNlLCBwYXJzZWQsIG91dHB1dCwgKm91cHV0UGFyc2VkKTsKLX0K
LQotYm9vbCBSZXBsYWNlUGF0aFVSTChjb25zdCBjaGFyKiBiYXNlLCBjb25zdCBVUkxTZWdtZW50
cyYgYmFzZVBhcnNlZCwgY29uc3QgUmVwbGFjZW1lbnRzPFVDaGFyPiYgcmVwbGFjZW1lbnRzLCBV
UkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVudHMqIG91cHV0UGFyc2VkKQotewotICAg
IFJhd1VSTEJ1ZmZlcjxjaGFyPiB1dGY4OwotICAgIFVSTENvbXBvbmVudFNvdXJjZTxjaGFyPiBz
b3VyY2UoYmFzZSk7Ci0gICAgVVJMU2VnbWVudHMgcGFyc2VkKGJhc2VQYXJzZWQpOwotICAgIFNl
dHVwVVRGMTZPdmVycmlkZUNvbXBvbmVudHMoYmFzZSwgcmVwbGFjZW1lbnRzLCB1dGY4LCAmc291
cmNlLCAmcGFyc2VkKTsKLSAgICByZXR1cm4gZG9DYW5vbmljYWxpemVQYXRoVVJMPGNoYXIsIHVu
c2lnbmVkIGNoYXI+KHNvdXJjZSwgcGFyc2VkLCBvdXRwdXQsICpvdXB1dFBhcnNlZCk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0K
LSNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3Ny
Yy9VUkxDYW5vblF1ZXJ5LmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25RdWVy
eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyMGQ0YzNkMTk4ZmQzOTc1OThl
NjQ1MzFlNWYxMDU5YjMyMzgyYmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vblF1ZXJ5LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDE4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDcgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVVJMQ2Fub24u
aCIKLQotI2luY2x1ZGUgIlJhd1VSTEJ1ZmZlci5oIgotI2luY2x1ZGUgIlVSTENhbm9uSW50ZXJu
YWwuaCIKLSNpbmNsdWRlICJVUkxDaGFyYWN0ZXJUeXBlcy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0FTQ0lJRmFzdFBhdGguaD4KLSNpbmNsdWRlIDx3dGYvdXJsL2FwaS9VUkxRdWVyeUNoYXJzZXRD
b252ZXJ0ZXIuaD4KLQotLy8gUXVlcnkgY2Fub25pY2FsaXphdGlvbiBpbiBJRQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSUUgaXMgdmVyeSBwZXJtaXNzaXZlIGZvciBxdWVy
eSBwYXJhbWV0ZXJzIHNwZWNpZmllZCBpbiBsaW5rcyBvbiB0aGUgcGFnZQotLy8gKGluIGNvbnRy
YXN0IHRvIGxpbmtzIHRoYXQgaXQgY29uc3RydWN0cyBpdHNlbGYgYmFzZWQgb24gZm9ybSBkYXRh
KS4gSXQgZG9lcwotLy8gbm90IHVuZXNjYXBlIGFueSBjaGFyYWN0ZXIuIEl0IGRvZXMgbm90IHJl
amVjdCBhbnkgZXNjYXBlIHNlcXVlbmNlIChiZSB0aGV5Ci0vLyBpbnZhbGlkIGxpa2UgIiUyeSIg
b3IgZnJlYWt5IGxpa2UgJTAwKS4KLS8vCi0vLyBJRSBvbmx5IGVzY2FwZXMgc3BhY2VzIGFuZCBu
b3RoaW5nIGVsc2UuIEVtYmVkZGVkIE5VTExzLCB0YWJzICgweDA5KSwKLS8vIExGICgweDBhKSwg
YW5kIENSICgweDBkKSBhcmUgcmVtb3ZlZCAodGhpcyBwcm9iYWJseSBoYXBwZW5zIGF0IGFuIGVh
cmxpZXIKLS8vIGxheWVyIHNpbmNlIHRoZXkgYXJlIHJlbW92ZWQgZnJvbSBhbGwgcG9ydGlvbnMg
b2YgdGhlIFVSTCkuIEFsbCBvdGhlcgotLy8gY2hhcmFjdGVycyBhcmUgcGFzc2VkIHVubW9kaWZp
ZWQuIEludmFsaWQgVVRGLTE2IHNlcXVlbmNlcyBhcmUgcHJlc2VydmVkIGFzCi0vLyB3ZWxsLCB3
aXRoIGVhY2ggY2hhcmFjdGVyIGluIHRoZSBpbnB1dCBiZWluZyBjb252ZXJ0ZWQgdG8gVVRGLTgu
IEl0IGlzIHRoZQotLy8gc2VydmVyJ3Mgam9iIHRvIG1ha2Ugc2Vuc2Ugb2YgdGhpcyBpbnZhbGlk
IHF1ZXJ5LgotLy8KLS8vIEludmFsaWQgbXVsdGlieXRlIHNlcXVlbmNlcyAoZm9yIGV4YW1wbGUs
IGludmFsaWQgVVRGLTggb24gYSBVVEYtOCBwYWdlKQotLy8gYXJlIGNvbnZlcnRlZCB0byB0aGUg
aW52YWxpZCBjaGFyYWN0ZXIgYW5kIHNlbnQgYXMgdW5lc2NhcGVkIFVURi04ICgweGVmLAotLy8g
MHhiZiwgMHhiZCkuIFRoaXMgbWF5IG5vdCBiZSBjYW5vbmljYWxpemF0aW9uLCB0aGUgcGFyc2Vy
IG1heSBnZW5lcmF0ZSB0aGVzZQotLy8gc3RyaW5ncyBiZWZvcmUgdGhlIFVSTCBoYW5kbGVyIGV2
ZXIgc2VlcyB0aGVtLgotLy8KLS8vIE91ciBxdWVyeSBjYW5vbmljYWxpemF0aW9uCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gV2UgZXNjYXBlIGFsbCBub24tQVNDSUkgY2hhcmFj
dGVycyBhbmQgY29udHJvbCBjaGFyYWN0ZXJzLCBsaWtlIEZpcmVmb3guCi0vLyBUaGlzIGlzIG1v
cmUgY29uZm9ybWFudCB0byB0aGUgVVJMIHNwZWMsIGFuZCB0aGVyZSBkbyBub3Qgc2VlbSB0byBi
ZSBtYW55Ci0vLyBwcm9ibGVtcyByZWxhdGluZyB0byBGaXJlZm94J3MgYmVoYXZpb3IuCi0vLwot
Ly8gTGlrZSBJRSwgd2Ugd2lsbCBuZXZlciB1bmVzY2FwZSAoYWx0aG91Z2ggdGhlIGFwcGxpY2F0
aW9uIG1heSB3YW50IHRvIHRyeQotLy8gdW5lc2NhcGluZyB0byBwcmVzZW50IHRoZSB1c2VyIHdp
dGggYSBtb3JlIHVuZGVyc3RhbmRhYmxlIFVSTCkuIFdlIHdpbGwKLS8vIHJlcGxhY2UgYWxsIGlu
dmFsaWQgc2VxdWVuY2VzIChpbmNsdWRpbmcgaW52YWxpZCBVVEYtMTYgc2VxdWVuY2VzLCB3aGlj
aCBJRQotLy8gZG9lc24ndCkgd2l0aCB0aGUgImludmFsaWQgY2hhcmFjdGVyLCIgYW5kIHdlIHdp
bGwgZXNjYXBlIGl0LgotCi0jaWYgVVNFKFdURlVSTCkKLQotbmFtZXNwYWNlIFdURiB7Ci0KLW5h
bWVzcGFjZSBVUkxDYW5vbmljYWxpemVyIHsKLQotbmFtZXNwYWNlIHsKLQotLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSBjaGFyYWN0ZXJzIHN0YXJ0aW5nIGF0IHxiZWdpbnwgYW5kIGdvaW5nIHVudGls
IHxlbmR8Ci0vLyAobm9uLWluY2x1c2l2ZSkgYXJlIGFsbCByZXByZXNlbnRhYmxlIGluIDctYml0
cy4KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29sIGlzQWxsQVNDSUkoY29u
c3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBxdWVyeSkKLXsKLSAg
ICByZXR1cm4gY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHNwZWMgKyBxdWVyeS5iZWdpbigpLCBxdWVy
eS5sZW5ndGgoKSk7Ci19Ci0KLS8vIEZJWE1FOiBCZW5qYW1pbjogZ2V0IHJpZCBvZiB0aGlzIHdo
ZW4gZXZlcnl0aGluZyBpcyBiYXNlZCBvbiBMQ2hhci4KLXRlbXBsYXRlPD4KLWJvb2wgaXNBbGxB
U0NJSTxjaGFyPihjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHF1ZXJ5KQot
ewotICAgIHJldHVybiBjaGFyYWN0ZXJzQXJlQWxsQVNDSUkocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KHNwZWMgKyBxdWVyeS5iZWdpbigpKSwgcXVlcnkubGVuZ3RoKCkpOwotfQotCi0v
LyBBcHBlbmRzIHRoZSBnaXZlbiBzdHJpbmcgdG8gdGhlIG91dHB1dCwgZXNjYXBpbmcgY2hhcmFj
dGVycyB0aGF0IGRvIG5vdAotLy8gbWF0Y2ggdGhlIGdpdmVuIHx0eXBlfCBpbiBTaGFyZWRDaGFy
VHlwZXMuIFRoaXMgdmVyc2lvbiB3aWxsIGFjY2VwdCA4IG9yIDE2Ci0vLyBiaXQgY2hhcmFjdGVy
cywgYnV0IGFzc3VtZXMgdGhhdCB0aGV5IGhhdmUgb25seSA3LWJpdCB2YWx1ZXMuIEl0IGFsc28g
YXNzdW1lcwotLy8gdGhhdCBhbGwgVVRGLTggdmFsdWVzIGFyZSBjb3JyZWN0LCBzbyBkb2Vzbid0
IGJvdGhlciBjaGVja2luZwotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXZvaWQg
YXBwZW5kUmF3OEJpdFF1ZXJ5U3RyaW5nKGNvbnN0IENoYXJhY3RlclR5cGUqIHNvdXJjZSwgaW50
IGxlbmd0aCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoIVVSTENoYXJhY3RlclR5cGVzOjppc1F1
ZXJ5Q2hhcihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihzb3VyY2VbaV0pKSkKLSAgICAgICAg
ICAgIGFwcGVuZFVSTEVzY2FwZWRDaGFyYWN0ZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o
c291cmNlW2ldKSwgb3V0cHV0KTsKLSAgICAgICAgZWxzZSAvLyBEb2Vzbid0IG5lZWQgZXNjYXBp
bmcuCi0gICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHN0YXRpY19jYXN0PGNoYXI+KHNvdXJjZVtp
XSkpOwotICAgIH0KLX0KLQotLy8gUnVucyB0aGUgY29udmVydGVyIG9uIHRoZSBnaXZlbiBVVEYt
OCBpbnB1dC4gU2luY2UgdGhlIGNvbnZlcnRlciBleHBlY3RzCi0vLyBVVEYtMTYsIHdlIGhhdmUg
dG8gY29udmVydCBmaXJzdC4gVGhlIGNvbnZlcnRlciBtdXN0IGJlIG5vbi1udWxsLgotdm9pZCBy
dW5Db252ZXJ0ZXIoY29uc3QgY2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBxdWVyeSwg
VVJMUXVlcnlDaGFyc2V0Q29udmVydGVyKiBjb252ZXJ0ZXIsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0
cHV0KQotewotICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCByZXBsYWNlIGFueSBtaXNlbmNvZGVk
IHZhbHVlcyB3aXRoIHRoZSBpbnZhbGlkCi0gICAgLy8gY2hhcmFjdGVyLiBUaGlzIGlzIHdoYXQg
d2Ugd2FudCBzbyB3ZSBkb24ndCBoYXZlIHRvIGNoZWNrIGZvciBlcnJvci4KLSAgICBSYXdVUkxC
dWZmZXI8VUNoYXI+IHV0ZjE2OwotICAgIENvbnZlcnRVVEY4VG9VVEYxNigmc3BlY1txdWVyeS5i
ZWdpbigpXSwgcXVlcnkubGVuZ3RoKCksIHV0ZjE2KTsKLSAgICBjb252ZXJ0ZXItPmNvbnZlcnRG
cm9tVVRGMTYodXRmMTYuZGF0YSgpLCB1dGYxNi5sZW5ndGgoKSwgb3V0cHV0KTsKLX0KLQotLy8g
UnVucyB0aGUgY29udmVydGVyIHdpdGggdGhlIGdpdmVuIFVURi0xNiBpbnB1dC4gV2UgZG9uJ3Qg
aGF2ZSB0byBkbwotLy8gYW55dGhpbmcsIGJ1dCB0aGlzIG92ZXJyaWRkZGVuIGZ1bmN0aW9uIGFs
bG93cyB1cyB0byB1c2UgdGhlIHNhbWUgY29kZQotLy8gZm9yIGJvdGggVVRGLTggYW5kIFVURi0x
NiBpbnB1dC4KLXZvaWQgcnVuQ29udmVydGVyKGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxD
b21wb25lbnQmIHF1ZXJ5LCBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqIGNvbnZlcnRlciwgVVJM
QnVmZmVyPGNoYXI+JiBvdXRwdXQpCi17Ci0gICAgY29udmVydGVyLT5jb252ZXJ0RnJvbVVURjE2
KCZzcGVjW3F1ZXJ5LmJlZ2luKCldLCBxdWVyeS5sZW5ndGgoKSwgb3V0cHV0KTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXZvaWQgZG9Db252ZXJ0VG9RdWVyeUVuY29k
aW5nKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcXVlcnks
IFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciogY29udmVydGVyLCBVUkxCdWZmZXI8Y2hhcj4mIG91
dHB1dCkKLXsKLSAgICBpZiAoaXNBbGxBU0NJSShzcGVjLCBxdWVyeSkpIHsKLSAgICAgICAgLy8g
RWFzeTogdGhlIGlucHV0IGNhbiBqdXN0IGFwcGVuZGVkIHdpdGggbm8gY2hhcmFjdGVyIHNldCBj
b252ZXJzaW9ucy4KLSAgICAgICAgYXBwZW5kUmF3OEJpdFF1ZXJ5U3RyaW5nKCZzcGVjW3F1ZXJ5
LmJlZ2luKCldLCBxdWVyeS5sZW5ndGgoKSwgb3V0cHV0KTsKLSAgICB9IGVsc2UgewotICAgICAg
ICAvLyBIYXJkZXI6IGNvbnZlcnQgdG8gdGhlIHByb3BlciBlbmNvZGluZyBmaXJzdC4KLSAgICAg
ICAgaWYgKGNvbnZlcnRlcikgewotICAgICAgICAgICAgLy8gUnVuIHRoZSBjb252ZXJ0ZXIgdG8g
Z2V0IGFuIDgtYml0IHN0cmluZywgdGhlbiBhcHBlbmQgaXQsIGVzY2FwaW5nCi0gICAgICAgICAg
ICAvLyBuZWNlc3NhcnkgdmFsdWVzLgotICAgICAgICAgICAgUmF3VVJMQnVmZmVyPGNoYXI+IGVp
Z2h0Qml0UXVlcnlTdHJpbmc7Ci0gICAgICAgICAgICBydW5Db252ZXJ0ZXIoc3BlYywgcXVlcnks
IGNvbnZlcnRlciwgZWlnaHRCaXRRdWVyeVN0cmluZyk7Ci0gICAgICAgICAgICBhcHBlbmRSYXc4
Qml0UXVlcnlTdHJpbmcoZWlnaHRCaXRRdWVyeVN0cmluZy5kYXRhKCksIGVpZ2h0Qml0UXVlcnlT
dHJpbmcubGVuZ3RoKCksIG91dHB1dCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAv
LyBObyBjb252ZXJ0ZXIsIGRvIG91ciBvd24gVVRGLTggY29udmVyc2lvbi4KLSAgICAgICAgICAg
IGFwcGVuZFN0cmluZ09mVHlwZSgmc3BlY1txdWVyeS5iZWdpbigpXSwgcXVlcnkubGVuZ3RoKCks
IFVSTENoYXJhY3RlclR5cGVzOjpRdWVyeUNoYXJhY3Rlciwgb3V0cHV0KTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXZvaWQgZG9DYW5v
bmljYWxpemVRdWVyeShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21wb25l
bnQmIHF1ZXJ5LCBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqIGNvbnZlcnRlciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMQ29tcG9uZW50JiBv
dXRwdXRRdWVyeUNvbXBvbmVudCkKLXsKLSAgICBpZiAocXVlcnkubGVuZ3RoKCkgPCAwKSB7Ci0g
ICAgICAgIG91dHB1dFF1ZXJ5Q29tcG9uZW50ID0gVVJMQ29tcG9uZW50KCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBvdXRwdXQuYXBwZW5kKCc/Jyk7Ci0gICAgb3V0cHV0UXVlcnlD
b21wb25lbnQuc2V0QmVnaW4ob3V0cHV0Lmxlbmd0aCgpKTsKLQotICAgIGRvQ29udmVydFRvUXVl
cnlFbmNvZGluZzxDaGFyYWN0ZXJUeXBlPihzcGVjLCBxdWVyeSwgY29udmVydGVyLCBvdXRwdXQp
OwotCi0gICAgb3V0cHV0UXVlcnlDb21wb25lbnQuc2V0TGVuZ3RoKG91dHB1dC5sZW5ndGgoKSAt
IG91dHB1dFF1ZXJ5Q29tcG9uZW50LmJlZ2luKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZQotCi12
b2lkIENhbm9uaWNhbGl6ZVF1ZXJ5KGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVu
dCYgcXVlcnksIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciogY29udmVydGVyLAotICAgICAgICAg
ICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMQ29tcG9uZW50KiBvdXRw
dXRRdWVyeUNvbXBvbmVudCkKLXsKLSAgICBkb0Nhbm9uaWNhbGl6ZVF1ZXJ5KHNwZWMsIHF1ZXJ5
LCBjb252ZXJ0ZXIsIG91dHB1dCwgKm91dHB1dFF1ZXJ5Q29tcG9uZW50KTsKLX0KLQotdm9pZCBD
YW5vbmljYWxpemVRdWVyeShjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBx
dWVyeSwgVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyKiBjb252ZXJ0ZXIsCi0gICAgICAgICAgICAg
ICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxDb21wb25lbnQqIG91dHB1dFF1
ZXJ5Q29tcG9uZW50KQotewotICAgIGRvQ2Fub25pY2FsaXplUXVlcnkoc3BlYywgcXVlcnksIGNv
bnZlcnRlciwgb3V0cHV0LCAqb3V0cHV0UXVlcnlDb21wb25lbnQpOwotfQotCi12b2lkIENvbnZl
cnRVVEYxNlRvUXVlcnlFbmNvZGluZyhjb25zdCBVQ2hhciogaW5wdXQsIGNvbnN0IFVSTENvbXBv
bmVudCYgcXVlcnksIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciogY29udmVydGVyLCBVUkxCdWZm
ZXI8Y2hhcj4mIG91dHB1dCkKLXsKLSAgICBkb0NvbnZlcnRUb1F1ZXJ5RW5jb2Rpbmc8VUNoYXI+
KGlucHV0LCBxdWVyeSwgY29udmVydGVyLCBvdXRwdXQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBV
UkxDYW5vbmljYWxpemVyCi0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gVVNFKFdU
RlVSTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25SZWxhdGl2
ZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uUmVsYXRpdmUuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWYwNTAwNjQzMGFmYzJiYTI3MzNjNjc0OTc3YmY2
YjRhNmVkY2NlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25SZWxhdGl2ZS5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw1NzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA3IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6
Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotLy8gQ2Fub25pY2FsaXplciBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBhbmQg
cmVzb2x2aW5nIHJlbGF0aXZlIFVSTHMuCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJVUkxDYW5vbi5oIgotCi0jaW5jbHVkZSAiVVJMQ2Fub25JbnRlcm5hbC5oIgotI2luY2x1ZGUg
IlVSTEZpbGUuaCIKLSNpbmNsdWRlICJVUkxQYXJzZUludGVybmFsLmgiCi0jaW5jbHVkZSAiVVJM
VXRpbEludGVybmFsLmgiCi0KLSNpZiBVU0UoV1RGVVJMKQotCi1uYW1lc3BhY2UgV1RGIHsKLQot
bmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIgewotCi1uYW1lc3BhY2UgewotCi0vLyBGaXJlZm94
IGRvZXMgYSBjYXNlLXNlbnNpdGl2ZSBjb21wYXJlICh3aGljaCBpcyBwcm9iYWJseSB3cm9uZy0t
TW96aWxsYSBidWcKLS8vIDM3OTAzNCksIHdoZXJlYXMgSUUgaXMgY2FzZS1pbnNlbnNldGl2ZS4K
LS8vCi0vLyBXZSBjaG9vc2UgdG8gYmUgbW9yZSBwZXJtaXNzaXZlIGxpa2UgSUUuIFdlIGRvbid0
IG5lZWQgdG8gd29ycnkgYWJvdXQKLS8vIHVuZXNjYXBpbmcgb3IgYW55dGhpbmcgaGVyZTogbmVp
dGhlciBJRSBvciBGaXJlZm94IGFsbG93IHRoaXMuIFdlIGFsc28KLS8vIGRvbid0IGhhdmUgdG8g
d29ycnkgYWJvdXQgaW52YWxpZCBzY2hlbWUgY2hhcmFjdGVycyBzaW5jZSB3ZSBhcmUgY29tcGFy
aW5nCi0vLyBhZ2FpbnN0IHRoZSBjYW5vbmljYWwgc2NoZW1lIG9mIHRoZSBiYXNlLgotLy8KLS8v
IFRoZSBiYXNlIFVSTCBzaG91bGQgYWx3YXlzIGJlIGNhbm9uaWNhbCwgdGhlcmVmb3JlIGlzIEFT
Q0lJLgotdGVtcGxhdGU8dHlwZW5hbWUgQ0hBUj4KLWJvb2wgQXJlU2NoZW1lc0VxdWFsKGNvbnN0
IGNoYXIqIGJhc2UsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIGJh
c2VTY2hlbWUsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSKiBjbXAsCi0gICAgICAg
ICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIGNtcFNjaGVtZSkKLXsKLSAgICBpZiAo
YmFzZVNjaGVtZS5sZW5ndGgoKSAhPSBjbXBTY2hlbWUubGVuZ3RoKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGJhc2VTY2hlbWUubGVuZ3RoKCk7IGkr
KykgewotICAgICAgICAvLyBXZSBhc3N1bWUgdGhlIGJhc2UgaXMgYWxyZWFkeSBjYW5vbmljYWws
IHNvIHdlIGRvbid0IGhhdmUgdG8KLSAgICAgICAgLy8gY2Fub25pY2FsaXplIGl0LgotICAgICAg
ICBpZiAoY2Fub25pY2FsU2NoZW1lQ2hhcihjbXBbY21wU2NoZW1lLmJlZ2luKCkgKyBpXSkgIT0K
LSAgICAgICAgICAgIGJhc2VbYmFzZVNjaGVtZS5iZWdpbigpICsgaV0pCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi0jaWYgT1MoV0lORE9X
UykKLS8vIEhlcmUsIHdlIGFsc28gYWxsb3cgV2luZG93cyBwYXRocyB0byBiZSByZXByZXNlbnRl
ZCBhcyAiL0M6LyIgc28gd2UgY2FuIGJlCi0vLyBjb25zaXN0ZW50IGFib3V0IFVSTCBwYXRocyBi
ZWdpbm5pbmcgd2l0aCBzbGFzaGVzLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UKLS8vIERvZXNCZWdp
bldpbmRvd3NEcml2ZVBhdGggZXhjZXB0IHRoYXQgaXQgYWxzbyByZXF1aXJlcyBhIHNsYXNoIGF0
IHRoZQotLy8gYmVnaW5uaW5nLgotdGVtcGxhdGU8dHlwZW5hbWUgQ0hBUj4KLWJvb2wgZG9lc0Jl
Z2luU2xhc2hXaW5kb3dzRHJpdmVTcGVjKGNvbnN0IENIQVIqIHNwZWMsIGludCBzdGFydE9mZnNl
dCwgaW50IHNwZWNMZW5ndGgpCi17Ci0gICAgaWYgKHN0YXJ0T2Zmc2V0ID49IHNwZWNMZW5ndGgp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gVVJMUGFyc2VyOjppc1VSTFNsYXNo
KHNwZWNbc3RhcnRPZmZzZXRdKSAmJiBVUkxQYXJzZXI6OmRvZXNCZWdpbldpbmRvd3NEcml2ZVNw
ZWMoc3BlYywgc3RhcnRPZmZzZXQgKyAxLCBzcGVjTGVuZ3RoKTsKLX0KLQotI2VuZGlmIC8vIE9T
KFdJTkRPV1MpCi0KLS8vIFNlZSBpc1JlbGF0aXZlVVJMIGluIHRoZSBoZWFkZXIgZmlsZSBmb3Ig
dXNhZ2UuCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBkb0lzUmVsYXRp
dmVVUkwoY29uc3QgY2hhciogYmFzZSwgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCi0g
ICAgICAgICAgICAgICAgICAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiB1cmwsIGludCB1cmxMZW5n
dGgsCi0gICAgICAgICAgICAgICAgICAgICBib29sIGlzQmFzZUhpZXJhcmNoaWNhbCwKLSAgICAg
ICAgICAgICAgICAgICAgIGJvb2wmIGlzUmVsYXRpdmUsIFVSTENvbXBvbmVudCYgcmVsYXRpdmVD
b21wb25lbnQpCi17Ci0gICAgaXNSZWxhdGl2ZSA9IGZhbHNlOyAvLyBTbyB3ZSBjYW4gZGVmYXVs
dCBsYXRlciB0byBub3QgcmVsYXRpdmUuCi0KLSAgICAvLyBUcmltIHdoaXRlc3BhY2UgYW5kIGNv
bnN0cnVjdCBhIG5ldyByYW5nZSBmb3IgdGhlIHN1YnN0cmluZy4KLSAgICBpbnQgYmVnaW4gPSAw
OwotICAgIFVSTFBhcnNlcjo6dHJpbVVSTCh1cmwsIGJlZ2luLCB1cmxMZW5ndGgpOwotICAgIGlm
IChiZWdpbiA+PSB1cmxMZW5ndGgpIHsKLSAgICAgICAgLy8gRW1wdHkgVVJMcyBhcmUgcmVsYXRp
dmUsIGJ1dCBkbyBub3RoaW5nLgotICAgICAgICByZWxhdGl2ZUNvbXBvbmVudCA9IFVSTENvbXBv
bmVudChiZWdpbiwgMCk7Ci0gICAgICAgIGlzUmVsYXRpdmUgPSB0cnVlOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSNpZiBPUyhXSU5ET1dTKQotICAgIC8vIFdlIHNwZWNpYWwgY2Fz
ZSBwYXRocyBsaWtlICJDOlxmb28iIHNvIHRoZXkgY2FuIGxpbmsgZGlyZWN0bHkgdG8gdGhlCi0g
ICAgLy8gZmlsZSBvbiBXaW5kb3dzIChJRSBjb21wYXRhYmlsaXR5KS4gVGhlIHNlY3VyaXR5IGRv
bWFpbiBzdHVmZiBzaG91bGQKLSAgICAvLyBwcmV2ZW50IGEgbGluayBsaWtlIHRoaXMgZnJvbSBh
Y3R1YWxseSBiZWluZyBmb2xsb3dlZCBpZiBpdHMgb24gYQotICAgIC8vIHdlYiBwYWdlLgotICAg
IC8vCi0gICAgLy8gV2UgdHJlYXQgIkM6L2ZvbyIgYXMgYW4gYWJzb2x1dGUgVVJMLiBXZSBjYW4g
Z28gYWhlYWQgYW5kIHRyZWF0ICIvYzovIgotICAgIC8vIGFzIHJlbGF0aXZlLCBhcyB0aGlzIHdp
bGwganVzdCByZXBsYWNlIHRoZSBwYXRoIHdoZW4gdGhlIGJhc2Ugc2NoZW1lCi0gICAgLy8gaXMg
YSBmaWxlIGFuZCB0aGUgYW5zd2VyIHdpbGwgc3RpbGwgYmUgY29ycmVjdC4KLSAgICAvLwotICAg
IC8vIFdlIHJlcXVpcmUgc3RyaWN0IGJhY2tzbGFzaGVzIHdoZW4gZGV0ZWN0aW5nIFVOQyBzaW5j
ZSB0d28gZm9yd2FyZAotICAgIC8vIHNoYXNoZXMgc2hvdWxkIGJlIHRyZWF0ZWQgYSBhIHJlbGF0
aXZlIFVSTCB3aXRoIGEgaG9zdG5hbWUuCi0gICAgaWYgKFVSTFBhcnNlcjo6ZG9lc0JlZ2luV2lu
ZG93c0RyaXZlU3BlYyh1cmwsIGJlZ2luLCB1cmxMZW5ndGgpIHx8IFVSTFBhcnNlcjo6ZG9lc0Jl
Z2luVU5DUGF0aCh1cmwsIGJlZ2luLCB1cmxMZW5ndGgsIHRydWUpKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSNlbmRpZiAvLyBPUyhXSU5ET1dTKQotCi0gICAgLy8gU2VlIGlmIHdlJ3ZlIGdvdCBh
IHNjaGVtZSwgaWYgbm90LCB3ZSBrbm93IHRoaXMgaXMgYSByZWxhdGl2ZSBVUkwuCi0gICAgLy8g
QlVUOiBKdXN0IGJlY2F1c2Ugd2UgaGF2ZSBhIHNjaGVtZSwgZG9lc24ndCBtYWtlIGl0IGFic29s
dXRlLgotICAgIC8vICJodHRwOmZvby5odG1sIiBpcyBhIHJlbGF0aXZlIFVSTCB3aXRoIHBhdGgg
ImZvby5odG1sIi4gSWYgdGhlIHNjaGVtZSBpcwotICAgIC8vIGVtcHR5LCB3ZSB0cmVhdCBpdCBh
cyByZWxhdGl2ZSAoIjpmb28iKSBsaWtlIElFIGRvZXMuCi0gICAgVVJMQ29tcG9uZW50IHNjaGVt
ZTsKLSAgICBpZiAoIVVSTFBhcnNlcjo6RXh0cmFjdFNjaGVtZSh1cmwsIHVybExlbmd0aCwgJnNj
aGVtZSkgfHwgIXNjaGVtZS5sZW5ndGgoKSkgewotICAgICAgICAvLyBEb24ndCBhbGxvdyByZWxh
dGl2ZSBVUkxzIGlmIHRoZSBiYXNlIHNjaGVtZSBkb2Vzbid0IHN1cHBvcnQgaXQuCi0gICAgICAg
IGlmICghaXNCYXNlSGllcmFyY2hpY2FsKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIHJlbGF0aXZlQ29tcG9uZW50ID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoYmVnaW4s
IHVybExlbmd0aCk7Ci0gICAgICAgIGlzUmVsYXRpdmUgPSB0cnVlOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgc2NoZW1lIGlzbid0IHZhbGlkLCB0aGVuIGl0
J3MgcmVsYXRpdmUuCi0gICAgaW50IHNjaGVtZUVuZCA9IHNjaGVtZS5lbmQoKTsKLSAgICBmb3Ig
KGludCBpID0gc2NoZW1lLmJlZ2luKCk7IGkgPCBzY2hlbWVFbmQ7IGkrKykgewotICAgICAgICBp
ZiAoIWNhbm9uaWNhbFNjaGVtZUNoYXIodXJsW2ldKSkgewotICAgICAgICAgICAgcmVsYXRpdmVD
b21wb25lbnQgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShiZWdpbiwgdXJsTGVuZ3RoKTsKLSAg
ICAgICAgICAgIGlzUmVsYXRpdmUgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgc2NoZW1lIGlzIG5vdCB0aGUgc2FtZSwg
dGhlbiB3ZSBjYW4ndCBjb3VudCBpdCBhcyByZWxhdGl2ZS4KLSAgICBpZiAoIUFyZVNjaGVtZXNF
cXVhbChiYXNlLCBiYXNlUGFyc2VkLnNjaGVtZSwgdXJsLCBzY2hlbWUpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIC8vIFdoZW4gdGhlIHNjaGVtZSB0aGF0IHRoZXkgYm90aCBzaGFyZSBp
cyBub3QgaGllcmFyY2hpY2FsLCB0cmVhdCB0aGUKLSAgICAvLyBpbmNvbWluZyBzY2hlbWUgYXMg
YWJzb2x1dGUgKHRoaXMgd2F5IHdpdGggdGhlIGJhc2Ugb2YgImRhdGE6Zm9vIiwKLSAgICAvLyAi
ZGF0YTpiYXIiIHdpbGwgYmUgcmVwb3J0ZWQgYXMgYWJzb2x1dGUuCi0gICAgaWYgKCFpc0Jhc2VI
aWVyYXJjaGljYWwpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaW50IGNvbG9uT2Zmc2V0
ID0gc2NoZW1lLmVuZCgpOwotCi0gICAgLy8gSWYgaXQncyBhIGZpbGVzeXN0ZW0gVVJMLCB0aGUg
b25seSB2YWxpZCB3YXkgdG8gbWFrZSBpdCByZWxhdGl2ZSBpcyBub3QgdG8KLSAgICAvLyBzdXBw
bHkgYSBzY2hlbWUuIFRoZXJlJ3Mgbm8gZXF1aXZhbGVudCB0byBlLmcuIGh0dHA6aW5kZXguaHRt
bC4KLSAgICBpZiAoVVJMVXRpbGl0aWVzOjpDb21wYXJlU2NoZW1lQ29tcG9uZW50KHVybCwgc2No
ZW1lLCAiZmlsZXN5c3RlbSIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEV4dHJh
Y3RTY2hlbWUgZ3VhcmFudGVlcyB0aGF0IHRoZSBjb2xvbiBpbW1lZGlhdGVseSBmb2xsb3dzIHdo
YXQgaXQKLSAgICAvLyBjb25zaWRlcnMgdG8gYmUgdGhlIHNjaGVtZS4gY291bnRDb25zZWN1dGl2
ZVNsYXNoZXMgd2lsbCBoYW5kbGUgdGhlCi0gICAgLy8gY2FzZSB3aGVyZSB0aGUgYmVnaW4gb2Zm
c2V0IGlzIHRoZSBlbmQgb2YgdGhlIGlucHV0LgotICAgIGludCBudW1TbGFzaGVzID0gVVJMUGFy
c2VyOjpjb3VudENvbnNlY3V0aXZlU2xhc2hlcyh1cmwsIGNvbG9uT2Zmc2V0ICsgMSwgdXJsTGVu
Z3RoKTsKLQotICAgIGlmICghbnVtU2xhc2hlcyB8fCBudW1TbGFzaGVzID09IDEpIHsKLSAgICAg
ICAgLy8gTm8gc2xhc2hlcyBtZWFucyBpdCdzIGEgcmVsYXRpdmUgcGF0aCBsaWtlICJodHRwOmZv
by5odG1sIi4gT25lIHNsYXNoCi0gICAgICAgIC8vIGlzIGFuIGFic29sdXRlIHBhdGguICJodHRw
Oi9ob21lL2Zvby5odG1sIgotICAgICAgICBpc1JlbGF0aXZlID0gdHJ1ZTsKLSAgICAgICAgcmVs
YXRpdmVDb21wb25lbnQgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShjb2xvbk9mZnNldCArIDEs
IHVybExlbmd0aCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIFR3byBv
ciBtb3JlIHNsYXNoZXMgYWZ0ZXIgdGhlIHNjaGVtZSB3ZSB0cmVhdCBhcyBhYnNvbHV0ZS4KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gQ29waWVzIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSByYW5n
ZSBbYmVnaW4sIGVuZCkgb2YgfHNwZWN8IHRvIHRoZSBvdXRwdXQsCi0vLyB1cCB1bnRpbCBhbmQg
aW5jbHVkaW5nIHRoZSBsYXN0IHNsYXNoLiBUaGVyZSBzaG91bGQgYmUgYSBzbGFzaCBpbiB0aGUK
LS8vIHJhbmdlLCBpZiBub3QsIG5vdGhpbmcgd2lsbCBiZSBjb3BpZWQuCi0vLwotLy8gVGhlIGlu
cHV0IGlzIGFzc3VtZWQgdG8gYmUgY2Fub25pY2FsLCBzbyB3ZSBzZWFyY2ggb25seSBmb3IgZXhh
Y3Qgc2xhc2hlcwotLy8gYW5kIG5vdCBiYWNrc2xhc2hlcyBhcyB3ZWxsLiBXZSBhbHNvIGtub3cg
dGhhdCBpdCdzIEFTQ0lJLgotdm9pZCBDb3B5VG9MYXN0U2xhc2goY29uc3QgY2hhciogc3BlYywg
aW50IGJlZ2luLCBpbnQgZW5kLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKLXsKLSAgICAvLyBG
aW5kIHRoZSBsYXN0IHNsYXNoLgotICAgIGludCBsYXN0U2xhc2ggPSAtMTsKLSAgICBmb3IgKGlu
dCBpID0gZW5kIC0gMTsgaSA+PSBiZWdpbjsgLS1pKSB7Ci0gICAgICAgIGlmIChzcGVjW2ldID09
ICcvJykgewotICAgICAgICAgICAgbGFzdFNsYXNoID0gaTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGlmIChsYXN0U2xhc2ggPCAwKQotICAgICAgICByZXR1cm47
IC8vIE5vIHNsYXNoLgotCi0gICAgLy8gQ29weS4KLSAgICBmb3IgKGludCBpID0gYmVnaW47IGkg
PD0gbGFzdFNsYXNoOyArK2kpCi0gICAgICAgIG91dHB1dC5hcHBlbmQoc3BlY1tpXSk7Ci19Ci0K
LS8vIENvcGllcyBhIHNpbmdsZSBjb21wb25lbnQgZnJvbSB0aGUgc291cmNlIHRvIHRoZSBvdXRw
dXQuIFRoaXMgaXMgdXNlZAotLy8gd2hlbiByZXNvbHZpbmcgcmVsYXRpdmUgVVJMcyBhbmQgYSBn
aXZlbiBjb21wb25lbnQgaXMgdW5jaGFuZ2VkLiBTaW5jZSB0aGUKLS8vIHNvdXJjZSBzaG91bGQg
YWxyZWFkeSBiZSBjYW5vbmljYWwsIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lh
bCwKLS8vIGFuZCB0aGUgaW5wdXQgaXMgQVNDSUkuCi12b2lkIENvcHlPbmVDb21wb25lbnQoY29u
c3QgY2hhciogc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVu
dCYgc291cmNlQ29tcG9uZW50LAotICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFy
PiYgb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCogb3V0cHV0Q29t
cG9uZW50KQotewotICAgIGlmIChzb3VyY2VDb21wb25lbnQubGVuZ3RoKCkgPCAwKSB7Ci0gICAg
ICAgIC8vIFRoaXMgY29tcG9uZW50IGlzIG5vdCBwcmVzZW50LgotICAgICAgICAqb3V0cHV0Q29t
cG9uZW50ID0gVVJMQ29tcG9uZW50KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBv
dXRwdXRDb21wb25lbnQtPnNldEJlZ2luKG91dHB1dC5sZW5ndGgoKSk7Ci0gICAgaW50IHNvdXJj
ZUVuZCA9IHNvdXJjZUNvbXBvbmVudC5lbmQoKTsKLSAgICBmb3IgKGludCBpID0gc291cmNlQ29t
cG9uZW50LmJlZ2luKCk7IGkgPCBzb3VyY2VFbmQ7IGkrKykKLSAgICAgICAgb3V0cHV0LmFwcGVu
ZChzb3VyY2VbaV0pOwotICAgIG91dHB1dENvbXBvbmVudC0+c2V0TGVuZ3RoKG91dHB1dC5sZW5n
dGgoKSAtIG91dHB1dENvbXBvbmVudC0+YmVnaW4oKSk7Ci19Ci0KLSNpZiBPUyhXSU5ET1dTKQot
Ci0vLyBDYWxsZWQgb24gV2luZG93cyB3aGVuIHRoZSBiYXNlIFVSTCBpcyBhIGZpbGUgVVJMLCB0
aGlzIHdpbGwgY29weSB0aGUgIkM6IgotLy8gdG8gdGhlIG91dHB1dCwgaWYgdGhlcmUgaXMgYSBk
cml2ZSBsZXR0ZXIgYW5kIGlmIHRoYXQgZHJpdmUgbGV0dGVyIGlzIG5vdAotLy8gYmVpbmcgb3Zl
cnJpZGRlbiBieSB0aGUgcmVsYXRpdmUgVVJMLiBPdGhlcndpc2UsIGRvIG5vdGhpbmcuCi0vLwot
Ly8gSXQgd2lsbCByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQg
Y2hhcmFjdGVyIGluIHRoZQotLy8gYmFzZSB0byBiZSBwcm9jZXNzZWQ6IGlmIHRoZXJlIGlzIGEg
IkM6IiwgdGhlIHNsYXNoIGFmdGVyIGl0LCBvciBpZgotLy8gdGhlcmUgaXMgbm8gZHJpdmUgbGV0
dGVyLCB0aGUgc2xhc2ggYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGF0aCwgb3IKLS8vIHRoZSBl
bmQgb2YgdGhlIGJhc2UuIFRoaXMgY2FuIGJlIHVzZWQgYXMgdGhlIHN0YXJ0aW5nIG9mZnNldCBm
b3IgZnVydGhlcgotLy8gcGF0aCBwcm9jZXNzaW5nLgotdGVtcGxhdGU8dHlwZW5hbWUgQ0hBUj4K
LWludCBDb3B5QmFzZURyaXZlU3BlY0lmTmVjZXNzYXJ5KGNvbnN0IGNoYXIqIGJhc2VVUkwsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZVBhdGhCZWdpbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiYXNlUGF0aEVuZCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVIqIHJlbGF0aXZlVVJMLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBhdGhTdGFydCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCByZWxhdGl2ZVVybExlbmd0aCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQotewotICAgIGlmIChiYXNl
UGF0aEJlZ2luID49IGJhc2VQYXRoRW5kKQotICAgICAgICByZXR1cm4gYmFzZVBhdGhCZWdpbjsg
Ly8gTm8gcGF0aC4KLQotICAgIC8vIElmIHRoZSByZWxhdGl2ZSBiZWdpbnMgd2l0aCBhIGRyaXZl
IHNwZWMsIGRvbid0IGRvIGFueXRoaW5nLiBUaGUgZXhpc3RpbmcKLSAgICAvLyBkcml2ZSBzcGVj
IGluIHRoZSBiYXNlIHdpbGwgYmUgcmVwbGFjZWQuCi0gICAgaWYgKFVSTFBhcnNlcjo6ZG9lc0Jl
Z2luV2luZG93c0RyaXZlU3BlYyhyZWxhdGl2ZVVSTCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhdGhTdGFydCwgcmVsYXRpdmVVcmxMZW5ndGgpKSB7Ci0g
ICAgICAgIHJldHVybiBiYXNlUGF0aEJlZ2luOyAvLyBSZWxhdGl2ZSBVUkwgcGF0aCBpcyAiQzov
Zm9vIgotICAgIH0KLQotICAgIC8vIFRoZSBwYXRoIHNob3VsZCBiZWdpbiB3aXRoIGEgc2xhc2gg
KGFzIGFsbCBjYW5vbmljYWwgcGF0aHMgZG8pLiBXZSBjaGVjawotICAgIC8vIGlmIGl0IGlzIGZv
bGxvd2VkIGJ5IGEgZHJpdmUgbGV0dGVyIGFuZCBjb3B5IGl0LgotICAgIGlmIChkb2VzQmVnaW5T
bGFzaFdpbmRvd3NEcml2ZVNwZWMoYmFzZVVSTCwgYmFzZVBhdGhCZWdpbiwgYmFzZVBhdGhFbmQp
KSB7Ci0gICAgICAgIC8vIENvcHkgdGhlIHR3by1jaGFyYWN0ZXIgZHJpdmUgc3BlYyB0byB0aGUg
b3V0cHV0LiBJdCB3aWxsIG5vdyBsb29rIGxpa2UKLSAgICAgICAgLy8gImZpbGU6Ly8vQzoiIHNv
IHRoZSByZXN0IG9mIGl0IGNhbiBiZSB0cmVhdGVkIGxpa2UgYSBzdGFuZGFyZCBwYXRoLgotICAg
ICAgICBvdXRwdXQuYXBwZW5kKCcvJyk7Ci0gICAgICAgIG91dHB1dC5hcHBlbmQoYmFzZVVSTFti
YXNlUGF0aEJlZ2luICsgMV0pOwotICAgICAgICBvdXRwdXQuYXBwZW5kKGJhc2VVUkxbYmFzZVBh
dGhCZWdpbiArIDJdKTsKLSAgICAgICAgcmV0dXJuIGJhc2VQYXRoQmVnaW4gKyAzOwotICAgIH0K
LQotICAgIHJldHVybiBiYXNlUGF0aEJlZ2luOwotfQotCi0jZW5kaWYgLy8gT1MoV0lORE9XUykK
LQotLy8gQSBzdWJyb3V0aW5lIG9mIGRvUmVzb2x2ZVJlbGF0aXZlVVJMLCB0aGlzIHJlc29sdmVz
IHRoZSBVUkwga25vd25pbmcgdGhhdAotLy8gdGhlIGlucHV0IGlzIGEgcmVsYXRpdmUgcGF0aCBv
ciBsZXNzIChxeXVlcnkgb3IgcmVmKS4KLXRlbXBsYXRlPHR5cGVuYW1lIENIQVI+Ci1ib29sIGRv
UmVzb2x2ZVJlbGF0aXZlUGF0aChjb25zdCBjaGFyKiBiYXNlVVJMLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIC8qIGJhc2VJc0ZpbGUgKi8sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBDSEFSKiByZWxhdGl2ZVVSTCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFVSTENvbXBvbmVudCYgcmVsYXRpdmVDb21wb25lbnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKQotewotICAg
IGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0KLSAgICAvLyBXZSBrbm93IHRoZSBhdXRob3JpdHkgc2Vj
dGlvbiBkaWRuJ3QgY2hhbmdlLCBjb3B5IGl0IHRvIHRoZSBvdXRwdXQuIFdlCi0gICAgLy8gYWxz
byBrbm93IHdlIGhhdmUgYSBwYXRoIHNvIGNhbiBjb3B5IHVwIHRvIHRoZXJlLgotICAgIFVSTENv
bXBvbmVudCBwYXRoLCBxdWVyeSwgcmVmOwotICAgIFVSTFBhcnNlcjo6cGFyc2VQYXRoSW50ZXJu
YWwocmVsYXRpdmVVUkwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2
ZUNvbXBvbmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXRoLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnF1ZXJ5LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJnJlZik7Ci0gICAgLy8gQ2Fub25pY2FsIFVSTHMgYWx3YXlzIGhhdmUg
YSBwYXRoLCBzbyB3ZSBjYW4gdXNlIHRoYXQgb2Zmc2V0LgotICAgIG91dHB1dC5hcHBlbmQoYmFz
ZVVSTCwgYmFzZVBhcnNlZC5wYXRoLmJlZ2luKCkpOwotCi0gICAgaWYgKHBhdGgubGVuZ3RoKCkg
PiAwKSB7Ci0gICAgICAgIC8vIFRoZSBwYXRoIGlzIHJlcGxhY2VkIG9yIG1vZGlmaWVkLgotICAg
ICAgICBpbnQgdHJ1ZVBhdGhCZWdpbiA9IG91dHB1dC5sZW5ndGgoKTsKLQotICAgICAgICAvLyBG
b3IgZmlsZTogVVJMcyBvbiBXaW5kb3dzLCB3ZSBkb24ndCB3YW50IHRvIHRyZWF0IHRoZSBkcml2
ZSBsZXR0ZXIgYW5kCi0gICAgICAgIC8vIGNvbG9uIGFzIHBhcnQgb2YgdGhlIHBhdGggZm9yIHJl
bGF0aXZlIGZpbGUgcmVzb2x1dGlvbiB3aGVuIHRoZQotICAgICAgICAvLyBpbmNvbWluZyBVUkwg
ZG9lcyBub3QgcHJvdmlkZSBhIGRyaXZlIHNwZWMuIFdlIHNhdmUgdGhlIHRydWUgcGF0aAotICAg
ICAgICAvLyBiZWdpbm5pbmcgc28gd2UgY2FuIGZpeCBpdCB1cCBhZnRlciB3ZSBhcmUgZG9uZS4K
LSAgICAgICAgaW50IGJhc2VQYXRoQmVnaW4gPSBiYXNlUGFyc2VkLnBhdGguYmVnaW4oKTsKLSNp
ZiBPUyhXSU5ET1dTKQotICAgICAgICBpZiAoYmFzZUlzRmlsZSkgewotICAgICAgICAgICAgYmFz
ZVBhdGhCZWdpbiA9IENvcHlCYXNlRHJpdmVTcGVjSWZOZWNlc3NhcnkoYmFzZVVSTCwgYmFzZVBh
cnNlZC5wYXRoLmJlZ2luKCksIGJhc2VQYXJzZWQucGF0aC5lbmQoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlVVJMLCBy
ZWxhdGl2ZUNvbXBvbmVudC5iZWdpbigpLCByZWxhdGl2ZUNvbXBvbmVudC5lbmQoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1
dCk7Ci0gICAgICAgICAgICAvLyBOb3cgdGhlIG91dHB1dCBsb29rcyBsaWtlIGVpdGhlciAiZmls
ZTovLyIgb3IgImZpbGU6Ly8vQzoiCi0gICAgICAgICAgICAvLyBhbmQgd2UgY2FuIHN0YXJ0IGFw
cGVuZGluZyB0aGUgcmVzdCBvZiB0aGUgcGF0aC4gfGJhc2VQYXRoQmVnaW58Ci0gICAgICAgICAg
ICAvLyBwb2ludHMgdG8gdGhlIGNoYXJhY3RlciBpbiB0aGUgYmFzZSB0aGF0IGNvbWVzIG5leHQu
Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBPUyhXSU5ET1dTKQotCi0gICAgICAgIGlmIChVUkxQYXJz
ZXI6OmlzVVJMU2xhc2gocmVsYXRpdmVVUkxbcGF0aC5iZWdpbigpXSkpIHsKLSAgICAgICAgICAg
IC8vIEVhc3kgY2FzZTogdGhlIHBhdGggaXMgYW4gYWJzb2x1dGUgcGF0aCBvbiB0aGUgc2VydmVy
LCBzbyB3ZSBjYW4KLSAgICAgICAgICAgIC8vIGp1c3QgcmVwbGFjZSBldmVyeXRoaW5nIGZyb20g
dGhlIHBhdGggb24gd2l0aCB0aGUgbmV3IHZlcnNpb25zLgotICAgICAgICAgICAgLy8gU2luY2Ug
dGhlIGlucHV0IHNob3VsZCBiZSBjYW5vbmljYWwgaGllcmFyY2hpY2FsIFVSTCwgd2Ugc2hvdWxk
Ci0gICAgICAgICAgICAvLyBhbHdheXMgaGF2ZSBhIHBhdGguCi0gICAgICAgICAgICBzdWNjZXNz
ICY9IENhbm9uaWNhbGl6ZVBhdGgocmVsYXRpdmVVUkwsIHBhdGgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCAmb3V0cHV0UGFyc2VkLT5wYXRoKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFJlbGF0aXZlIHBhdGgsIHJlcGxhY2UgdGhl
IHF1ZXJ5LCBhbmQgcmVmZXJlbmNlLiBXZSB0YWtlIHRoZQotICAgICAgICAgICAgLy8gb3JpZ2lu
YWwgcGF0aCB3aXRoIHRoZSBmaWxlIHBhcnQgc3RyaXBwZWQsIGFuZCBhcHBlbmQgdGhlIG5ldyBw
YXRoLgotICAgICAgICAgICAgLy8gVGhlIGNhbm9uaWNhbGl6ZXIgd2lsbCB0YWtlIGNhcmUgb2Yg
cmVzb2x2aW5nICIuLiIgYW5kICIuIgotICAgICAgICAgICAgaW50IHBhdGhCZWdpbiA9IG91dHB1
dC5sZW5ndGgoKTsKLSAgICAgICAgICAgIENvcHlUb0xhc3RTbGFzaChiYXNlVVJMLCBiYXNlUGF0
aEJlZ2luLCBiYXNlUGFyc2VkLnBhdGguZW5kKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cHV0KTsKLSAgICAgICAgICAgIHN1Y2Nlc3MgJj0gQ2Fub25pY2FsaXplUGFydGlhbFBh
dGgocmVsYXRpdmVVUkwsIHBhdGgsIHBhdGhCZWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0KTsKLSAgICAgICAgICAgIG91dHB1dFBhcnNl
ZC0+cGF0aCA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKHBhdGhCZWdpbiwgb3V0cHV0Lmxlbmd0
aCgpKTsKLQotICAgICAgICAgICAgLy8gQ29weSB0aGUgcmVzdCBvZiB0aGUgc3R1ZmYgYWZ0ZXIg
dGhlIHBhdGggZnJvbSB0aGUgcmVsYXRpdmUgcGF0aC4KLSAgICAgICAgfQotCi0gICAgICAgIC8v
IEZpbmlzaCB3aXRoIHRoZSBxdWVyeSBhbmQgcmVmZXJlbmNlIHBhcnQgKHRoZXNlIGNhbid0IGZh
aWwpLgotICAgICAgICBDYW5vbmljYWxpemVRdWVyeShyZWxhdGl2ZVVSTCwgcXVlcnksIHF1ZXJ5
Q29udmVydGVyLCBvdXRwdXQsICZvdXRwdXRQYXJzZWQtPnF1ZXJ5KTsKLSAgICAgICAgY2Fub25p
Y2FsaXplRnJhZ21lbnQocmVsYXRpdmVVUkwsIHJlZiwgb3V0cHV0LCBvdXRwdXRQYXJzZWQtPmZy
YWdtZW50KTsKLQotICAgICAgICAvLyBGaXggdGhlIHBhdGggYmVnaW5uaW5nIHRvIGFkZCBiYWNr
IHRoZSAiQzoiIHdlIG1heSBoYXZlIHdyaXR0ZW4gYWJvdmUuCi0gICAgICAgIG91dHB1dFBhcnNl
ZC0+cGF0aCA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKHRydWVQYXRoQmVnaW4sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFBhcnNl
ZC0+cGF0aC5lbmQoKSk7Ci0gICAgICAgIHJldHVybiBzdWNjZXNzOwotICAgIH0KLQotICAgIC8v
IElmIHdlIGdldCBoZXJlLCB0aGUgcGF0aCBpcyB1bmNoYW5nZWQ6IGNvcHkgdG8gb3V0cHV0Lgot
ICAgIENvcHlPbmVDb21wb25lbnQoYmFzZVVSTCwgYmFzZVBhcnNlZC5wYXRoLCBvdXRwdXQsICZv
dXRwdXRQYXJzZWQtPnBhdGgpOwotCi0gICAgaWYgKHF1ZXJ5LmlzVmFsaWQoKSkgewotICAgICAg
ICAvLyBKdXN0IHRoZSBxdWVyeSBzcGVjaWZpZWQsIHJlcGxhY2UgdGhlIHF1ZXJ5IGFuZCByZWZl
cmVuY2UgKGlnbm9yZQotICAgICAgICAvLyBmYWlsdXJlcyBmb3IgcmVmcykKLSAgICAgICAgQ2Fu
b25pY2FsaXplUXVlcnkocmVsYXRpdmVVUkwsIHF1ZXJ5LCBxdWVyeUNvbnZlcnRlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCAmb3V0cHV0UGFyc2VkLT5xdWVyeSk7Ci0gICAg
ICAgIGNhbm9uaWNhbGl6ZUZyYWdtZW50KHJlbGF0aXZlVVJMLCByZWYsIG91dHB1dCwgb3V0cHV0
UGFyc2VkLT5mcmFnbWVudCk7Ci0gICAgICAgIHJldHVybiBzdWNjZXNzOwotICAgIH0KLQotICAg
IC8vIElmIHdlIGdldCBoZXJlLCB0aGUgcXVlcnkgaXMgdW5jaGFuZ2VkOiBjb3B5IHRvIG91dHB1
dC4gTm90ZSB0aGF0IHRoZQotICAgIC8vIHJhbmdlIG9mIHRoZSBxdWVyeSBwYXJhbWV0ZXIgZG9l
c24ndCBpbmNsdWRlIHRoZSBxdWVzdGlvbiBtYXJrLCBzbyB3ZQotICAgIC8vIGhhdmUgdG8gYWRk
IGl0IG1hbnVhbGx5IGlmIHRoZXJlIGlzIGEgY29tcG9uZW50LgotICAgIGlmIChiYXNlUGFyc2Vk
LnF1ZXJ5LmlzVmFsaWQoKSkKLSAgICAgICAgb3V0cHV0LmFwcGVuZCgnPycpOwotICAgIENvcHlP
bmVDb21wb25lbnQoYmFzZVVSTCwgYmFzZVBhcnNlZC5xdWVyeSwgb3V0cHV0LCAmb3V0cHV0UGFy
c2VkLT5xdWVyeSk7Ci0KLSAgICBpZiAocmVmLmlzVmFsaWQoKSkgewotICAgICAgICAvLyBKdXN0
IHRoZSByZWZlcmVuY2Ugc3BlY2lmaWVkOiByZXBsYWNlIGl0IChpZ25vcmluZyBmYWlsdXJlcyku
Ci0gICAgICAgIGNhbm9uaWNhbGl6ZUZyYWdtZW50KHJlbGF0aXZlVVJMLCByZWYsIG91dHB1dCwg
b3V0cHV0UGFyc2VkLT5mcmFnbWVudCk7Ci0gICAgICAgIHJldHVybiBzdWNjZXNzOwotICAgIH0K
LQotICAgIC8vIFdlIHNob3VsZCBhbHdheXMgaGF2ZSBzb21ldGhpbmcgdG8gZG8gaW4gdGhpcyBm
dW5jdGlvbiwgdGhlIGNhbGxlciBjaGVja3MKLSAgICAvLyB0aGF0IHNvbWUgY29tcG9uZW50IGlz
IGJlaW5nIHJlcGxhY2VkLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBz
dWNjZXNzOwotfQotCi0vLyBSZXNvbHZlcyBhIHJlbGF0aXZlIFVSTCB0aGF0IGNvbnRhaW5zIGEg
aG9zdC4gVHlwaWNhbGx5LCB0aGVzZSB3aWxsCi0vLyBiZSBvZiB0aGUgZm9ybSAiLy93d3cuYXBw
bGUuY29tL2Zvby9iYXI/YmF6I2ZyYWdtZW50IiBhbmQgdGhlIG9ubHkgdGhpbmcgd2hpY2gKLS8v
IHNob3VsZCBiZSBrZXB0IGZyb20gdGhlIG9yaWdpbmFsIFVSTCBpcyB0aGUgc2NoZW1lLgotdGVt
cGxhdGU8dHlwZW5hbWUgQ0hBUj4KLWJvb2wgZG9SZXNvbHZlUmVsYXRpdmVIb3N0KGNvbnN0IGNo
YXIqIGJhc2VVUkwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50
cyYgYmFzZVBhcnNlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVIqIHJl
bGF0aXZlVVJMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50
JiByZWxhdGl2ZUNvbXBvbmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFF1ZXJ5
Q2hhcnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpCi17Ci0gICAgLy8gUGFyc2UgdGhlIHJlbGF0aXZl
IFVSTCwganVzdCBsaWtlIHdlIHdvdWxkIGZvciBhbnl0aGluZyBmb2xsb3dpbmcgYQotICAgIC8v
IHNjaGVtZS4KLSAgICBVUkxTZWdtZW50cyByZWxhdGl2ZVBhcnNlZDsgLy8gRXZlcnl0aGluZyBi
dXQgdGhlIHNjaGVtZSBpcyB2YWxpZC4KLSAgICBVUkxQYXJzZXI6OnBhcnNlQWZ0ZXJTY2hlbWUo
JnJlbGF0aXZlVVJMW3JlbGF0aXZlQ29tcG9uZW50LmJlZ2luKCldLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZWxhdGl2ZUNvbXBvbmVudC5sZW5ndGgoKSwgcmVsYXRpdmVDb21w
b25lbnQuYmVnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQ
YXJzZWQpOwotCi0gICAgLy8gTm93IHdlIGNhbiBqdXN0IHVzZSB0aGUgcmVwbGFjZW1lbnQgZnVu
Y3Rpb24gdG8gcmVwbGFjZSBhbGwgdGhlIG5lY2Vzc2FyeQotICAgIC8vIHBhcnRzIG9mIHRoZSBv
bGQgVVJMIHdpdGggdGhlIG5ldyBvbmUuCi0gICAgUmVwbGFjZW1lbnRzPENIQVI+IHJlcGxhY2Vt
ZW50czsKLSAgICByZXBsYWNlbWVudHMuU2V0VXNlcm5hbWUocmVsYXRpdmVVUkwsIHJlbGF0aXZl
UGFyc2VkLnVzZXJuYW1lKTsKLSAgICByZXBsYWNlbWVudHMuU2V0UGFzc3dvcmQocmVsYXRpdmVV
UkwsIHJlbGF0aXZlUGFyc2VkLnBhc3N3b3JkKTsKLSAgICByZXBsYWNlbWVudHMuU2V0SG9zdChy
ZWxhdGl2ZVVSTCwgcmVsYXRpdmVQYXJzZWQuaG9zdCk7Ci0gICAgcmVwbGFjZW1lbnRzLlNldFBv
cnQocmVsYXRpdmVVUkwsIHJlbGF0aXZlUGFyc2VkLnBvcnQpOwotICAgIHJlcGxhY2VtZW50cy5T
ZXRQYXRoKHJlbGF0aXZlVVJMLCByZWxhdGl2ZVBhcnNlZC5wYXRoKTsKLSAgICByZXBsYWNlbWVu
dHMuU2V0UXVlcnkocmVsYXRpdmVVUkwsIHJlbGF0aXZlUGFyc2VkLnF1ZXJ5KTsKLSAgICByZXBs
YWNlbWVudHMuU2V0UmVmKHJlbGF0aXZlVVJMLCByZWxhdGl2ZVBhcnNlZC5mcmFnbWVudCk7Ci0K
LSAgICByZXR1cm4gUmVwbGFjZVN0YW5kYXJkVVJMKGJhc2VVUkwsIGJhc2VQYXJzZWQsIHJlcGxh
Y2VtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5Q29udmVydGVyLCBv
dXRwdXQsIG91dHB1dFBhcnNlZCk7Ci19Ci0KLS8vIFJlc29sdmVzIGEgcmVsYXRpdmUgVVJMIHRo
YXQgaGFwcGVucyB0byBiZSBhbiBhYnNvbHV0ZSBmaWxlIHBhdGguIEV4YW1wbGVzCi0vLyBpbmNs
dWRlOiAiLy9ob3N0bmFtZS9wYXRoIiwgIi9jOi9mb28iLCBhbmQgIi8vaG9zdG5hbWUvYzovZm9v
Ii4KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29sIGRvUmVzb2x2ZUFic29s
dXRlRmlsZShjb25zdCBDaGFyYWN0ZXJUeXBlKiByZWxhdGl2ZVVSTCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgcmVsYXRpdmVDb21wb25lbnQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29u
dmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRw
dXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyYgb3V0cHV0UGFyc2Vk
KQotewotICAgIC8vIFBhcnNlIHRoZSBmaWxlIFVSTC4gVGhlIGZpbGUgVVJsIHBhcnNpbmcgZnVu
Y3Rpb24gdXNlcyB0aGUgc2FtZSBsb2dpYwotICAgIC8vIGFzIHdlIGRvIGZvciBkZXRlcm1pbmlu
ZyBpZiB0aGUgZmlsZSBpcyBhYnNvbHV0ZSwgaW4gd2hpY2ggY2FzZSBpdCB3aWxsCi0gICAgLy8g
bm90IGJvdGhlciB0byBsb29rIGZvciBhIHNjaGVtZS4KLSAgICBVUkxTZWdtZW50cyByZWxhdGl2
ZVBhcnNlZDsKLSAgICBVUkxQYXJzZXI6OlBhcnNlRmlsZVVSTCgmcmVsYXRpdmVVUkxbcmVsYXRp
dmVDb21wb25lbnQuYmVnaW4oKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRp
dmVDb21wb25lbnQubGVuZ3RoKCksICZyZWxhdGl2ZVBhcnNlZCk7Ci0KLSAgICByZXR1cm4gQ2Fu
b25pY2FsaXplRmlsZVVSTCgmcmVsYXRpdmVVUkxbcmVsYXRpdmVDb21wb25lbnQuYmVnaW4oKV0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVDb21wb25lbnQubGVuZ3Ro
KCksIHJlbGF0aXZlUGFyc2VkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5
Q29udmVydGVyLCBvdXRwdXQsICZvdXRwdXRQYXJzZWQpOwotfQotCi0vLyBUT0RPKGJyZXR0dykg
dHJlYXQgdHdvIHNsYXNoZXMgYXMgcm9vdCBsaWtlIE1vemlsbGEgZm9yIEZUUD8KLXRlbXBsYXRl
PHR5cGVuYW1lIENIQVI+Ci1ib29sIGRvUmVzb2x2ZVJlbGF0aXZlVVJMKGNvbnN0IGNoYXIqIGJh
c2VVUkwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNl
UGFyc2VkLAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJhc2VJc0ZpbGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVIqIHJlbGF0aXZlVVJMLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIHJlbGF0aXZlQ29tcG9uZW50LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5
Q29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91
dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNl
ZCkKLXsKLSAgICAvLyBTdGFydGluZyBwb2ludCBmb3Igb3VyIG91dHB1dCBwYXJzZWQuIFdlJ2xs
IGZpeCB3aGF0IHdlIGNoYW5nZS4KLSAgICAqb3V0cHV0UGFyc2VkID0gYmFzZVBhcnNlZDsKLQot
ICAgIC8vIFNhbml0eSBjaGVjazogdGhlIGlucHV0IHNob3VsZCBoYXZlIGEgaG9zdCBvciB3ZSds
bCBicmVhayBiYWRseSBiZWxvdy4KLSAgICAvLyBXZSBjYW4gb25seSByZXNvbHZlIHJlbGF0aXZl
IFVSTHMgd2l0aCBiYXNlIFVSTHMgdGhhdCBoYXZlIGhvc3RzIGFuZAotICAgIC8vIHBhdGhzIChl
dmVuIHRoZSBkZWZhdWx0IHBhdGggb2YgIi8iIGlzIE9LKS4KLSAgICAvLwotICAgIC8vIFdlIGFs
bG93IGhvc3RzIHdpdGggbm8gbGVuZ3RoIHNvIHdlIGNhbiBoYW5kbGUgZmlsZSBVUkxzLCBmb3Ig
ZXhhbXBsZS4KLSAgICBpZiAoYmFzZVBhcnNlZC5wYXRoLmxlbmd0aCgpIDw9IDApIHsKLSAgICAg
ICAgLy8gT24gZXJyb3IsIHJldHVybiB0aGUgaW5wdXQgKHJlc29sdmluZyBhIHJlbGF0aXZlIFVS
TCBvbiBhIG5vbi1yZWxhdGl2ZQotICAgICAgICAvLyBiYXNlID0gdGhlIGJhc2UpLgotICAgICAg
ICBpbnQgYmFzZUxlbmd0aCA9IGJhc2VQYXJzZWQubGVuZ3RoKCk7Ci0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgYmFzZUxlbmd0aDsgaSsrKQotICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChi
YXNlVVJMW2ldKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChyZWxh
dGl2ZUNvbXBvbmVudC5sZW5ndGgoKSA8PSAwKSB7Ci0gICAgICAgIC8vIEVtcHR5IHJlbGF0aXZl
IFVSTCwgbGVhdmUgdW5jaGFuZ2VkLCBvbmx5IHJlbW92aW5nIHRoZSByZWYgY29tcG9uZW50Lgot
ICAgICAgICBpbnQgYmFzZUxlbmd0aCA9IGJhc2VQYXJzZWQubGVuZ3RoKCk7Ci0gICAgICAgIGJh
c2VMZW5ndGggLT0gYmFzZVBhcnNlZC5mcmFnbWVudC5sZW5ndGgoKSArIDE7Ci0gICAgICAgIG91
dHB1dFBhcnNlZC0+ZnJhZ21lbnQucmVzZXQoKTsKLSAgICAgICAgb3V0cHV0LmFwcGVuZChiYXNl
VVJMLCBiYXNlTGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaW50
IG51bVNsYXNoZXMgPSBVUkxQYXJzZXI6OmNvdW50Q29uc2VjdXRpdmVTbGFzaGVzKHJlbGF0aXZl
VVJMLCByZWxhdGl2ZUNvbXBvbmVudC5iZWdpbigpLCByZWxhdGl2ZUNvbXBvbmVudC5lbmQoKSk7
Ci0KLSNpZiBPUyhXSU5ET1dTKQotICAgIC8vIE9uIFdpbmRvd3MsIHR3byBzbGFzaGVzIGZvciBh
IGZpbGUgcGF0aCAocmVnYXJkbGVzcyBvZiB3aGljaCBkaXJlY3Rpb24KLSAgICAvLyB0aGV5IGFy
ZSkgbWVhbnMgdGhhdCBpdCdzIFVOQy4gVHdvIGJhY2tzbGFzaGVzIG9uIGFueSBiYXNlIHNjaGVt
ZSBtZWFuCi0gICAgLy8gdGhhdCBpdCdzIGFuIGFic29sdXRlIFVOQyBwYXRoICh3ZSB1c2UgdGhl
IGJhc2VJc0ZpbGUgZmxhZyB0byBjb250cm9sCi0gICAgLy8gaG93IHN0cmljdCB0aGUgVU5DIGZp
bmRlciBpcykuCi0gICAgLy8KLSAgICAvLyBXZSBhbHNvIGFsbG93IFdpbmRvd3MgYWJzb2x1dGUg
ZHJpdmUgc3BlY3Mgb24gYW55IHNjaGVtZSAoZm9yIGV4YW1wbGUKLSAgICAvLyAiYzpcZm9vIikg
bGlrZSBJRSBkb2VzLiBUaGVyZSBtdXN0IGJlIG5vIHByZWNlZWRpbmcgc2xhc2hlcyBpbiB0aGlz
Ci0gICAgLy8gY2FzZSAod2UgcmVqZWN0IGFueXRoaW5nIGxpa2UgIi9jOi9mb28iKSBiZWNhdXNl
IHRoYXQgc2hvdWxkIGJlIHRyZWF0ZWQKLSAgICAvLyBhcyBhIHBhdGguIEZvciBmaWxlIFVSTHMs
IHdlIGFsbG93IGFueSBudW1iZXIgb2Ygc2xhc2hlcyBzaW5jZSB0aGF0IHdvdWxkCi0gICAgLy8g
YmUgc2V0dGluZyB0aGUgcGF0aC4KLSAgICAvLwotICAgIC8vIFRoaXMgYXNzdW1lcyB0aGUgYWJz
b2x1dGUgcGF0aCByZXNvbHZlciBoYW5kbGVzIGFic29sdXRlIFVSTHMgbGlrZSB0aGlzCi0gICAg
Ly8gcHJvcGVybHkuIFVSTFV0aWxpdGllczo6RG9DYW5vbmljYWxpemUgZG9lcyB0aGlzLgotICAg
IGludCBhZnRlclNsYXNoZXMgPSByZWxhdGl2ZUNvbXBvbmVudC5iZWdpbiArIG51bVNsYXNoZXM7
Ci0gICAgaWYgKFVSTFBhcnNlcjo6ZG9lc0JlZ2luVU5DUGF0aChyZWxhdGl2ZVVSTCwgcmVsYXRp
dmVDb21wb25lbnQuYmVnaW4oKSwgcmVsYXRpdmVDb21wb25lbnQuZW5kKCksICFiYXNlSXNGaWxl
KQotICAgICAgICB8fCAoKCFudW1TbGFzaGVzIHx8IGJhc2VJc0ZpbGUpICYmIFVSTFBhcnNlcjo6
ZG9lc0JlZ2luV2luZG93c0RyaXZlU3BlYyhyZWxhdGl2ZVVSTCwgYWZ0ZXJTbGFzaGVzLCByZWxh
dGl2ZUNvbXBvbmVudC5lbmQoKSkpKSB7Ci0gICAgICAgICAgICAgcmV0dXJuIGRvUmVzb2x2ZUFi
c29sdXRlRmlsZShyZWxhdGl2ZVVSTCwgcmVsYXRpdmVDb21wb25lbnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeUNvbnZlcnRlciwgb3V0cHV0LCAqb3V0
cHV0UGFyc2VkKTsKLSAgICAgICAgIH0KLSNlbHNlCi0gICAgLy8gT3RoZXIgcGxhdGZvcm1zIG5l
ZWQgZXhwbGljaXQgaGFuZGxpbmcgZm9yIGZpbGU6IFVSTHMgd2l0aCBtdWx0aXBsZQotICAgIC8v
IHNsYXNoZXMgYmVjYXVzZSB0aGUgZ2VuZXJpYyBzY2hlbWUgcGFyc2luZyBhbHdheXMgZXh0cmFj
dHMgYSBob3N0LCBidXQgYQotICAgIC8vIGZpbGU6IFVSTCBvbmx5IGhhcyBhIGhvc3QgaWYgaXQg
aGFzIGV4YWN0bHkgMiBzbGFzaGVzLiBUaGlzIGFsc28KLSAgICAvLyBoYW5kbGVzIHRoZSBzcGVj
aWFsIGNhc2Ugd2hlcmUgdGhlIFVSTCBpcyBvbmx5IHNsYXNoZXMsIHNpbmNlIHRoYXQKLSAgICAv
LyBkb2Vzbid0IGhhdmUgYSBob3N0IHBhcnQgZWl0aGVyLgotICAgIGlmIChiYXNlSXNGaWxlICYm
IChudW1TbGFzaGVzID4gMiB8fCBudW1TbGFzaGVzID09IHJlbGF0aXZlQ29tcG9uZW50Lmxlbmd0
aCgpKSkgewotICAgICAgICByZXR1cm4gZG9SZXNvbHZlQWJzb2x1dGVGaWxlKHJlbGF0aXZlVVJM
LCByZWxhdGl2ZUNvbXBvbmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBxdWVyeUNvbnZlcnRlciwgb3V0cHV0LCAqb3V0cHV0UGFyc2VkKTsKLSAgICB9Ci0jZW5kaWYK
LQotICAgIC8vIEFueSBvdGhlciBkb3VibGUtc2xhc2hlcyBtZWFuIHRoYXQgdGhpcyBpcyByZWxh
dGl2ZSB0byB0aGUgc2NoZW1lLgotICAgIGlmIChudW1TbGFzaGVzID49IDIpIHsKLSAgICAgICAg
cmV0dXJuIGRvUmVzb2x2ZVJlbGF0aXZlSG9zdChiYXNlVVJMLCBiYXNlUGFyc2VkLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlVVJMLCByZWxhdGl2ZUNvbXBv
bmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeUNvbnZlcnRl
ciwgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOwotICAgIH0KLQotICAgIC8vIFdoZW4gd2UgZ2V0IGhl
cmUsIHdlIGtub3cgdGhhdCB0aGUgcmVsYXRpdmUgVVJMIGlzIG9uIHRoZSBzYW1lIGhvc3QuCi0g
ICAgcmV0dXJuIGRvUmVzb2x2ZVJlbGF0aXZlUGF0aChiYXNlVVJMLCBiYXNlUGFyc2VkLCBiYXNl
SXNGaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVVUkwsIHJl
bGF0aXZlQ29tcG9uZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlD
b252ZXJ0ZXIsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UKLQot
Ym9vbCBpc1JlbGF0aXZlVVJMKGNvbnN0IGNoYXIqIGJhc2UsIGNvbnN0IFVSTFNlZ21lbnRzJiBi
YXNlUGFyc2VkLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZyYWdtZW50LCBpbnQg
ZnJhZ21lbnRMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgYm9vbCBpc0Jhc2VIaWVyYXJjaGlj
YWwsCi0gICAgICAgICAgICAgICAgICAgYm9vbCYgaXNSZWxhdGl2ZSwgVVJMQ29tcG9uZW50JiBy
ZWxhdGl2ZUNvbXBvbmVudCkKLXsKLSAgICByZXR1cm4gZG9Jc1JlbGF0aXZlVVJMPGNoYXI+KGJh
c2UsIGJhc2VQYXJzZWQsIGZyYWdtZW50LCBmcmFnbWVudExlbmd0aCwgaXNCYXNlSGllcmFyY2hp
Y2FsLCBpc1JlbGF0aXZlLCByZWxhdGl2ZUNvbXBvbmVudCk7Ci19Ci0KLWJvb2wgaXNSZWxhdGl2
ZVVSTChjb25zdCBjaGFyKiBiYXNlLCBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKLSAg
ICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogZnJhZ21lbnQsIGludCBmcmFnbWVudExlbmd0
aCwKLSAgICAgICAgICAgICAgICAgICBib29sIGlzQmFzZUhpZXJhcmNoaWNhbCwKLSAgICAgICAg
ICAgICAgICAgICBib29sJiBpc1JlbGF0aXZlLCBVUkxDb21wb25lbnQmIHJlbGF0aXZlQ29tcG9u
ZW50KQotewotICAgIHJldHVybiBkb0lzUmVsYXRpdmVVUkw8VUNoYXI+KGJhc2UsIGJhc2VQYXJz
ZWQsIGZyYWdtZW50LCBmcmFnbWVudExlbmd0aCwgaXNCYXNlSGllcmFyY2hpY2FsLCBpc1JlbGF0
aXZlLCByZWxhdGl2ZUNvbXBvbmVudCk7Ci19Ci0KLWJvb2wgcmVzb2x2ZVJlbGF0aXZlVVJMKGNv
bnN0IGNoYXIqIGJhc2VVUkwsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdt
ZW50cyYgYmFzZVBhcnNlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmFzZUlzRmls
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlbGF0aXZlVVJMLAotICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiByZWxhdGl2ZUNvbXBvbmVu
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciogcXVl
cnlDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91
dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQp
Ci17Ci0gICAgcmV0dXJuIGRvUmVzb2x2ZVJlbGF0aXZlVVJMPGNoYXI+KGJhc2VVUkwsIGJhc2VQ
YXJzZWQsIGJhc2VJc0ZpbGUsIHJlbGF0aXZlVVJMLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZWxhdGl2ZUNvbXBvbmVudCwgcXVlcnlDb252ZXJ0ZXIsIG91dHB1dCwg
b3V0cHV0UGFyc2VkKTsKLX0KLQotYm9vbCByZXNvbHZlUmVsYXRpdmVVUkwoY29uc3QgY2hhciog
YmFzZVVSTCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNl
UGFyc2VkLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBiYXNlSXNGaWxlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIHJlbGF0aXZlVVJMLAotICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiByZWxhdGl2ZUNvbXBvbmVudCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpCi17Ci0gICAg
cmV0dXJuIGRvUmVzb2x2ZVJlbGF0aXZlVVJMPFVDaGFyPihiYXNlVVJMLCBiYXNlUGFyc2VkLCBi
YXNlSXNGaWxlLCByZWxhdGl2ZVVSTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlbGF0aXZlQ29tcG9uZW50LCBxdWVyeUNvbnZlcnRlciwgb3V0cHV0LCBvdXRwdXRQ
YXJzZWQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBVUkxDYW5vbmljYWxpemVyCi0KLX0gLy8gbmFt
ZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gVVNFKFdURlVSTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL3VybC9zcmMvVVJMQ2Fub25TdGRVUkwuY3BwIGIvU291cmNlL1dURi93dGYvdXJsL3Ny
Yy9VUkxDYW5vblN0ZFVSTC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlMmRk
MWNlYWYxNDkyYTViMjZkM2I4ODYzMDU1MzgzMTg0MzM5M2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5v
blN0ZFVSTC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMTAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAyMDA3IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRnVuY3Rpb25zIHRvIGNhbm9uaWNh
bGl6ZSAic3RhbmRhcmQiIFVSTHMsIHdoaWNoIGFyZSBvbmVzIHRoYXQgaGF2ZSBhbgotLy8gYXV0
aG9yaXR5IHNlY3Rpb24gaW5jbHVkaW5nIGEgaG9zdCBuYW1lLgotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiVVJMQ2Fub24uaCIKLQotI2luY2x1ZGUgIlJhd1VSTEJ1ZmZlci5oIgot
I2luY2x1ZGUgIlVSTENhbm9uSW50ZXJuYWwuaCIKLQotI2lmIFVTRShXVEZVUkwpCi0KLW5hbWVz
cGFjZSBXVEYgewotCi1uYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplciB7Ci0KLW5hbWVzcGFjZSB7
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENIQVIsIHR5cGVuYW1lIFVDSEFSPgotYm9vbCBkb0Nhbm9u
aWNhbGl6ZVN0YW5kYXJkVVJMKGNvbnN0IFVSTENvbXBvbmVudFNvdXJjZTxDSEFSPiYgc291cmNl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJz
ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMUXVlcnlDaGFyc2V0Q29udmVy
dGVyKiBxdWVyeUNvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxC
dWZmZXI8Y2hhcj4mIG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxT
ZWdtZW50cyYgb3V0cHV0UGFyc2VkKQotewotICAgIC8vIFNjaGVtZTogdGhpcyB3aWxsIGFwcGVu
ZCB0aGUgY29sb24uCi0gICAgYm9vbCBzdWNjZXNzID0gY2Fub25pY2FsaXplU2NoZW1lKHNvdXJj
ZS5zY2hlbWUsIHBhcnNlZC5zY2hlbWUsIG91dHB1dCwgb3V0cHV0UGFyc2VkLnNjaGVtZSk7Ci0K
LSAgICAvLyBBdXRob3JpdHkgKHVzZXJuYW1lLCBwYXNzd29yZCwgaG9zdCwgcG9ydCkKLSAgICBi
b29sIGhhdmVBdXRob3JpdHk7Ci0gICAgaWYgKHBhcnNlZC51c2VybmFtZS5pc05vbkVtcHR5KCkg
fHwgcGFyc2VkLnBhc3N3b3JkLmlzVmFsaWQoKSB8fCBwYXJzZWQuaG9zdC5pc05vbkVtcHR5KCkg
fHwgcGFyc2VkLnBvcnQuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGhhdmVBdXRob3JpdHkgPSB0cnVl
OwotCi0gICAgICAgIC8vIE9ubHkgd3JpdGUgdGhlIGF1dGhvcml0eSBzZXBhcmF0b3JzIHdoZW4g
d2UgaGF2ZSBhIHNjaGVtZS4KLSAgICAgICAgaWYgKHBhcnNlZC5zY2hlbWUuaXNWYWxpZCgpKQot
ICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiLy8iLCAyKTsKLQotICAgICAgICAvLyBVc2VyIGlu
Zm86IHRoZSBjYW5vbmljYWxpemVyIHdpbGwgaGFuZGxlIHRoZSA6IGFuZCBALgotICAgICAgICBz
dWNjZXNzICY9IGNhbm9uaWNhbGl6ZVVzZXJJbmZvKHNvdXJjZS51c2VybmFtZSwgcGFyc2VkLnVz
ZXJuYW1lLCBzb3VyY2UucGFzc3dvcmQsIHBhcnNlZC5wYXNzd29yZCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIG91dHB1dFBhcnNlZC51c2VybmFtZSwg
b3V0cHV0UGFyc2VkLnBhc3N3b3JkKTsKLSAgICAgICAgc3VjY2VzcyAmPSBjYW5vbmljYWxpemVI
b3N0KHNvdXJjZS5ob3N0LCBwYXJzZWQuaG9zdCwgb3V0cHV0LCBvdXRwdXRQYXJzZWQuaG9zdCk7
Ci0KLSAgICAgICAgLy8gSG9zdCBtdXN0IG5vdCBiZSBlbXB0eSBmb3Igc3RhbmRhcmQgVVJMcy4K
LSAgICAgICAgaWYgKCFwYXJzZWQuaG9zdC5pc05vbkVtcHR5KCkpCi0gICAgICAgICAgICBzdWNj
ZXNzID0gZmFsc2U7Ci0KLSAgICAgICAgLy8gUG9ydDogdGhlIHBvcnQgY2Fub25pY2FsaXplciB3
aWxsIGhhbmRsZSB0aGUgY29sb24uCi0gICAgICAgIGludCBkZWZhdWx0UG9ydCA9IGRlZmF1bHRQ
b3J0Rm9yU2NoZW1lKCZvdXRwdXQuZGF0YSgpW291dHB1dFBhcnNlZC5zY2hlbWUuYmVnaW4oKV0s
IG91dHB1dFBhcnNlZC5zY2hlbWUubGVuZ3RoKCkpOwotICAgICAgICBzdWNjZXNzICY9IGNhbm9u
aWNhbGl6ZVBvcnQoc291cmNlLnBvcnQsIHBhcnNlZC5wb3J0LCBkZWZhdWx0UG9ydCwgb3V0cHV0
LCBvdXRwdXRQYXJzZWQucG9ydCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gTm8gYXV0aG9y
aXR5LCBjbGVhciB0aGUgY29tcG9uZW50cy4KLSAgICAgICAgaGF2ZUF1dGhvcml0eSA9IGZhbHNl
OwotICAgICAgICBvdXRwdXRQYXJzZWQuaG9zdC5yZXNldCgpOwotICAgICAgICBvdXRwdXRQYXJz
ZWQudXNlcm5hbWUucmVzZXQoKTsKLSAgICAgICAgb3V0cHV0UGFyc2VkLnBhc3N3b3JkLnJlc2V0
KCk7Ci0gICAgICAgIG91dHB1dFBhcnNlZC5wb3J0LnJlc2V0KCk7Ci0gICAgICAgIHN1Y2Nlc3Mg
PSBmYWxzZTsgLy8gU3RhbmRhcmQgVVJMcyBtdXN0IGhhdmUgYW4gYXV0aG9yaXR5LgotICAgIH0K
LQotICAgIC8vIFBhdGgKLSAgICBpZiAocGFyc2VkLnBhdGguaXNOb25FbXB0eSgpKQotICAgICAg
ICBzdWNjZXNzICY9IENhbm9uaWNhbGl6ZVBhdGgoc291cmNlLnBhdGgsIHBhcnNlZC5wYXRoLCBv
dXRwdXQsICZvdXRwdXRQYXJzZWQucGF0aCk7Ci0gICAgZWxzZSBpZiAoaGF2ZUF1dGhvcml0eSB8
fCBwYXJzZWQucXVlcnkuaXNOb25FbXB0eSgpIHx8IHBhcnNlZC5mcmFnbWVudC5pc05vbkVtcHR5
KCkpIHsKLSAgICAgICAgLy8gV2hlbiB3ZSBoYXZlIGFuIGVtcHR5IHBhdGgsIG1ha2UgdXAgYSBw
YXRoIHdoZW4gd2UgaGF2ZSBhbiBhdXRob3JpdHkKLSAgICAgICAgLy8gb3Igc29tZXRoaW5nIGZv
bGxvd2luZyB0aGUgcGF0aC4gVGhlIG9ubHkgdGltZSB3ZSBhbGxvdyBhbiBlbXB0eQotICAgICAg
ICAvLyBvdXRwdXQgcGF0aCBpcyB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgZWxzZS4KLSAgICAgICAg
b3V0cHV0UGFyc2VkLnBhdGggPSBVUkxDb21wb25lbnQob3V0cHV0Lmxlbmd0aCgpLCAxKTsKLSAg
ICAgICAgb3V0cHV0LmFwcGVuZCgnLycpOwotICAgIH0gZWxzZQotICAgICAgICBvdXRwdXRQYXJz
ZWQucGF0aC5yZXNldCgpOyAvLyBObyBwYXRoIGF0IGFsbAotCi0gICAgLy8gUXVlcnkKLSAgICBD
YW5vbmljYWxpemVRdWVyeShzb3VyY2UucXVlcnksIHBhcnNlZC5xdWVyeSwgcXVlcnlDb252ZXJ0
ZXIsIG91dHB1dCwgJm91dHB1dFBhcnNlZC5xdWVyeSk7Ci0KLSAgICAvLyBSZWY6IGlnbm9yZSBm
YWlsdXJlIGZvciB0aGlzLCBzaW5jZSB0aGUgcGFnZSBjYW4gcHJvYmFibHkgc3RpbGwgYmUgbG9h
ZGVkLgotICAgIGNhbm9uaWNhbGl6ZUZyYWdtZW50KHNvdXJjZS5yZWYsIHBhcnNlZC5mcmFnbWVu
dCwgb3V0cHV0LCBvdXRwdXRQYXJzZWQuZnJhZ21lbnQpOwotCi0gICAgcmV0dXJuIHN1Y2Nlc3M7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLQotLy8gUmV0dXJucyB0aGUgZGVmYXVsdCBwb3J0IGZv
ciB0aGUgZ2l2ZW4gY2Fub25pY2FsIHNjaGVtZSwgb3IgUE9SVF9VTlNQRUNJRklFRAotLy8gaWYg
dGhlIHNjaGVtZSBpcyB1bmtub3duLgotaW50IGRlZmF1bHRQb3J0Rm9yU2NoZW1lKGNvbnN0IGNo
YXIqIHNjaGVtZSwgaW50IHNjaGVtZUxlbmd0aCkKLXsKLSAgICBpbnQgZGVmYXVsdFBvcnQgPSBV
UkxQYXJzZXI6OlBPUlRfVU5TUEVDSUZJRUQ7Ci0gICAgc3dpdGNoIChzY2hlbWVMZW5ndGgpIHsK
LSAgICBjYXNlIDQ6Ci0gICAgICAgIGlmICghc3RybmNtcChzY2hlbWUsICJodHRwIiwgc2NoZW1l
TGVuZ3RoKSkKLSAgICAgICAgICAgIGRlZmF1bHRQb3J0ID0gODA7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgNToKLSAgICAgICAgaWYgKCFzdHJuY21wKHNjaGVtZSwgImh0dHBzIiwgc2NoZW1l
TGVuZ3RoKSkKLSAgICAgICAgICAgIGRlZmF1bHRQb3J0ID0gNDQzOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIDM6Ci0gICAgICAgIGlmICghc3RybmNtcChzY2hlbWUsICJmdHAiLCBzY2hlbWVM
ZW5ndGgpKQotICAgICAgICAgICAgZGVmYXVsdFBvcnQgPSAyMTsKLSAgICAgICAgZWxzZSBpZiAo
IXN0cm5jbXAoc2NoZW1lLCAid3NzIiwgc2NoZW1lTGVuZ3RoKSkKLSAgICAgICAgICAgIGRlZmF1
bHRQb3J0ID0gNDQzOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDY6Ci0gICAgICAgIGlmICgh
c3RybmNtcChzY2hlbWUsICJnb3BoZXIiLCBzY2hlbWVMZW5ndGgpKQotICAgICAgICAgICAgZGVm
YXVsdFBvcnQgPSA3MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBpZiAo
IXN0cm5jbXAoc2NoZW1lLCAid3MiLCBzY2hlbWVMZW5ndGgpKQotICAgICAgICAgICAgZGVmYXVs
dFBvcnQgPSA4MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBkZWZhdWx0UG9y
dDsKLX0KLQotYm9vbCBDYW5vbmljYWxpemVTdGFuZGFyZFVSTChjb25zdCBjaGFyKiBzcGVjLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgLyogc3BlY0xlbmd0aCAqLywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNlZCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNv
bnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBv
dXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQ
YXJzZWQpCi17Ci0gICAgcmV0dXJuIGRvQ2Fub25pY2FsaXplU3RhbmRhcmRVUkw8Y2hhciwgdW5z
aWduZWQgY2hhcj4oVVJMQ29tcG9uZW50U291cmNlPGNoYXI+KHNwZWMpLCBwYXJzZWQsIHF1ZXJ5
Q29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG91dHB1dCwgKm91dHB1dFBhcnNlZCk7Ci19Ci0KLWJvb2wgQ2Fub25pY2Fs
aXplU3RhbmRhcmRVUkwoY29uc3QgVUNoYXIqIHNwZWMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCAvKiBzcGVjTGVuZ3RoICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCkKLXsKLSAgICByZXR1cm4g
ZG9DYW5vbmljYWxpemVTdGFuZGFyZFVSTDxVQ2hhciwgVUNoYXI+KFVSTENvbXBvbmVudFNvdXJj
ZTxVQ2hhcj4oc3BlYyksIHBhcnNlZCwgcXVlcnlDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsICpvdXRwdXRQYXJzZWQp
OwotfQotCi0vLyBJdCBtaWdodCBiZSBuaWNlIGluIHRoZSBmdXR1cmUgdG8gb3B0aW1pemUgdGhp
cyBzbyB1bmNoYW5nZWQgY29tcG9uZW50cyBkb24ndAotLy8gbmVlZCB0byBiZSByZWNhbm9uaWNh
bGl6ZWQuIFRoaXMgaXMgZXNwZWNpYWxseSB0cnVlIHNpbmNlIHRoZSBjb21tb24gY2FzZSBmb3IK
LS8vIFJlcGxhY2VDb21wb25lbnRzIGlzIHJlbW92aW5nIHRoaW5ncyB3ZSBkb24ndCB3YW50LCBs
aWtlIHJlZmVyZW5jZSBmcmFnbWVudHMKLS8vIGFuZCB1c2VybmFtZXMuIFRoZXNlIGNhc2VzIGNh
biBiZWNvbWUgbW9yZSBlZmZpY2llbnQgaWYgd2UgY2FuIGFzc3VtZSB0aGUKLS8vIHJlc3Qgb2Yg
dGhlIFVSTCBpcyBPSyB3aXRoIHRoZXNlIHJlbW92ZWQgKG9yIG9ubHkgdGhlIG1vZGlmaWVkIHBh
cnRzCi0vLyByZWNhbm9uaWNhbGl6ZWQpLiBUaGlzIHdvdWxkIGJlIG11Y2ggbW9yZSBjb21wbGV4
IHRvIGltcGxlbWVudCwgaG93ZXZlci4KLS8vCi0vLyBZb3Ugd291bGQgYWxzbyBuZWVkIHRvIHVw
ZGF0ZSBEb1JlcGxhY2VDb21wb25lbnRzIGluIFVSTFV0aWxpdGllcy5jYyB3aGljaAotLy8gcmVs
aWVzIG9uIHRoaXMgcmUtY2hlY2tpbmcgZXZlcnl0aGluZyAoc2VlIHRoZSBjb21tZW50IHRoZXJl
IGZvciB3aHkpLgotYm9vbCBSZXBsYWNlU3RhbmRhcmRVUkwoY29uc3QgY2hhciogYmFzZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAotICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVwbGFjZW1lbnRzPGNoYXI+JiByZXBsYWNlbWVu
dHMsCi0gICAgICAgICAgICAgICAgICAgICAgICBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqIHF1
ZXJ5Q29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBv
dXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2Vk
KQotewotICAgIFVSTENvbXBvbmVudFNvdXJjZTxjaGFyPiBzb3VyY2UoYmFzZSk7Ci0gICAgVVJM
U2VnbWVudHMgcGFyc2VkKGJhc2VQYXJzZWQpOwotICAgIFNldHVwT3ZlcnJpZGVDb21wb25lbnRz
KGJhc2UsIHJlcGxhY2VtZW50cywgJnNvdXJjZSwgJnBhcnNlZCk7Ci0gICAgcmV0dXJuIGRvQ2Fu
b25pY2FsaXplU3RhbmRhcmRVUkw8Y2hhciwgdW5zaWduZWQgY2hhcj4oc291cmNlLCBwYXJzZWQs
IHF1ZXJ5Q29udmVydGVyLCBvdXRwdXQsICpvdXRwdXRQYXJzZWQpOwotfQotCi0vLyBGb3IgMTYt
Yml0IHJlcGxhY2VtZW50cywgd2UgdHVybiBhbGwgdGhlIHJlcGxhY2VtZW50cyBpbnRvIFVURi04
IHNvIHRoZQotLy8gcmVndWxhciBjb2RlcGF0aCBjYW4gYmUgdXNlZC4KLWJvb2wgUmVwbGFjZVN0
YW5kYXJkVVJMKGNvbnN0IGNoYXIqIGJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFJlcGxhY2VtZW50czxVQ2hhcj4mIHJlcGxhY2VtZW50cywKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpCi17Ci0gICAgUmF3VVJMQnVmZmVyPGNo
YXI+IHV0Zjg7Ci0gICAgVVJMQ29tcG9uZW50U291cmNlPGNoYXI+IHNvdXJjZShiYXNlKTsKLSAg
ICBVUkxTZWdtZW50cyBwYXJzZWQoYmFzZVBhcnNlZCk7Ci0gICAgU2V0dXBVVEYxNk92ZXJyaWRl
Q29tcG9uZW50cyhiYXNlLCByZXBsYWNlbWVudHMsIHV0ZjgsICZzb3VyY2UsICZwYXJzZWQpOwot
ICAgIHJldHVybiBkb0Nhbm9uaWNhbGl6ZVN0YW5kYXJkVVJMPGNoYXIsIHVuc2lnbmVkIGNoYXI+
KHNvdXJjZSwgcGFyc2VkLCBxdWVyeUNvbnZlcnRlciwgb3V0cHV0LCAqb3V0cHV0UGFyc2VkKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplcgotCi19IC8vIG5hbWVzcGFjZSBX
VEYKLQotI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91
cmwvc3JjL1VSTENoYXJhY3RlclR5cGVzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJM
Q2hhcmFjdGVyVHlwZXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWRkMjJm
Y2M4YTQ1OTJlZDkwNjU5NWMwODY5YTNiOGMyOTFkZjUwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2hhcmFj
dGVyVHlwZXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24u
Ci0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJVUkxDaGFyYWN0ZXJUeXBlcy5oIgotCi0jaWYgVVNFKFdURlVSTCkKLQot
bmFtZXNwYWNlIFdURiB7Ci1jb25zdCB1bnNpZ25lZCBjaGFyIFVSTENoYXJhY3RlclR5cGVzOjpj
aGFyYWN0ZXJUeXBlVGFibGVbMHgxMDBdID0gewotICAgIEludmFsaWRDaGFyYWN0ZXIsIEludmFs
aWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsCi0gICAgSW52
YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxp
ZENoYXJhY3RlciwKLSAgICBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZh
bGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLAotICAgIEludmFsaWRDaGFyYWN0ZXIsIElu
dmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIC8vIDB4
MDAgLSAweDBmCi0gICAgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxp
ZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwKLSAgICBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZh
bGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLAotICAgIElu
dmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFs
aWRDaGFyYWN0ZXIsCi0gICAgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52
YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgLy8gMHgxMCAtIDB4MWYKLSAgICBJbnZh
bGlkQ2hhcmFjdGVyLCAvLyAweDIwICAnICcgKGVzY2FwZSBzcGFjZXMgaW4gcXVlcmllcykKLSAg
ICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVy
LCAvLyAweDIxICAhCi0gICAgSW52YWxpZENoYXJhY3RlciwgLy8gMHgyMiAgIgotICAgIEludmFs
aWRDaGFyYWN0ZXIsIC8vIDB4MjMgICMgIChpbnZhbGlkIGluIHF1ZXJ5IHNpbmNlIGl0IG1hcmtz
IHRoZSByZWYpCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciwgLy8gMHgy
NCAgJAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4MjUgICUK
LSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDI2ICAmCi0gICAg
UXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3Rlciwg
Ly8gMHgyNyAgJwotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21w
b25lbnRDaGFyYWN0ZXIsIC8vIDB4MjggICgKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZv
Q2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDI5ICApCi0gICAgUXVlcnlDaGFy
YWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHgyYSAg
KgotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8vIDB4MmIgICsKLSAg
ICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyLCAvLyAweDJjICAsCi0gICAgUXVl
cnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8g
MHgyZCAgLQotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hh
cmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDJlICAuCi0gICAgUXVlcnlDaGFyYWN0
ZXIsIC8vIDB4MmYgIC8KLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwg
SVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwgRGVjaW1hbENoYXJhY3RlciB8
IE9jdGFsQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDMwICAwCi0gICAgUXVl
cnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVj
aW1hbENoYXJhY3RlciB8IERlY2ltYWxDaGFyYWN0ZXIgfCBPY3RhbENoYXJhY3RlciB8IENvbXBv
bmVudENoYXJhY3RlciwgLy8gMHgzMSAgMQotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9D
aGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBEZWNpbWFs
Q2hhcmFjdGVyIHwgT2N0YWxDaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4MzIg
IDIKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3Rl
ciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwgRGVjaW1hbENoYXJhY3RlciB8IE9jdGFsQ2hhcmFj
dGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDMzICAzCi0gICAgUXVlcnlDaGFyYWN0ZXIg
fCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3Rl
ciB8IERlY2ltYWxDaGFyYWN0ZXIgfCBPY3RhbENoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3Rl
ciwgLy8gMHgzNCAgNAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJ
UHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBEZWNpbWFsQ2hhcmFjdGVyIHwg
T2N0YWxDaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4MzUgIDUKLSAgICBRdWVy
eUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNp
bWFsQ2hhcmFjdGVyIHwgRGVjaW1hbENoYXJhY3RlciB8IE9jdGFsQ2hhcmFjdGVyIHwgQ29tcG9u
ZW50Q2hhcmFjdGVyLCAvLyAweDM2ICA2Ci0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0No
YXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IERlY2ltYWxD
aGFyYWN0ZXIgfCBPY3RhbENoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHgzNyAg
NwotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVy
IHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBEZWNpbWFsQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hh
cmFjdGVyLCAvLyAweDM4ICA4Ci0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3Rl
ciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IERlY2ltYWxDaGFyYWN0
ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4MzkgIDkKLSAgICBRdWVyeUNoYXJhY3Rlciwg
Ly8gMHgzYSAgOgotICAgIFF1ZXJ5Q2hhcmFjdGVyLCAvLyAweDNiICA7Ci0gICAgSW52YWxpZENo
YXJhY3RlciwgLy8gMHgzYyAgPCAgKFRyeSB0byBwcmV2ZW50IGNlcnRhaW4gdHlwZXMgb2YgWFNT
LikKLSAgICBRdWVyeUNoYXJhY3RlciwgLy8gMHgzZCAgPQotICAgIEludmFsaWRDaGFyYWN0ZXIs
IC8vIDB4M2UgID4gIChUcnkgdG8gcHJldmVudCBjZXJ0YWluIHR5cGVzIG9mIFhTUy4pCi0gICAg
UXVlcnlDaGFyYWN0ZXIsIC8vIDB4M2YgID8KLSAgICBRdWVyeUNoYXJhY3RlciwgLy8gMHg0MCAg
QAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVy
IHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NDEgIEEK
LSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8
IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDQyICBCCi0g
ICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBI
ZXhhZGVjaW1hbENoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg0MyAgQwotICAg
IFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4
YWRlY2ltYWxDaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NDQgIEQKLSAgICBR
dWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFk
ZWNpbWFsQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDQ1ICBFCi0gICAgUXVl
cnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVj
aW1hbENoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg0NiAgRgotICAgIFF1ZXJ5
Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4
NDcgIEcKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50
Q2hhcmFjdGVyLCAvLyAweDQ4ICBICi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJh
Y3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg0OSAgSQotICAgIFF1ZXJ5Q2hhcmFjdGVy
IHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NGEgIEoKLSAg
ICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVy
LCAvLyAweDRiICBLCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENv
bXBvbmVudENoYXJhY3RlciwgLy8gMHg0YyAgTAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlcklu
Zm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NGQgIE0KLSAgICBRdWVyeUNo
YXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDRl
ICBOCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENo
YXJhY3RlciwgLy8gMHg0ZiAgTwotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0
ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NTAgIFAKLSAgICBRdWVyeUNoYXJhY3RlciB8
IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDUxICBRCi0gICAg
UXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3Rlciwg
Ly8gMHg1MiAgUgotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21w
b25lbnRDaGFyYWN0ZXIsIC8vIDB4NTMgIFMKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZv
Q2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDU0ICBUCi0gICAgUXVlcnlDaGFy
YWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg1NSAg
VQotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFy
YWN0ZXIsIC8vIDB4NTYgIFYKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVy
IHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDU3ICBXCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBV
c2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8v
IDB4NTggIFgKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9u
ZW50Q2hhcmFjdGVyLCAvLyAweDU5ICBZCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0No
YXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg1YSAgWgotICAgIFF1ZXJ5Q2hhcmFj
dGVyLCAvLyAweDViICBbCi0gICAgUXVlcnlDaGFyYWN0ZXIsIC8vIDB4NWMgICdcJwotICAgIFF1
ZXJ5Q2hhcmFjdGVyLCAvLyAweDVkICBdCi0gICAgUXVlcnlDaGFyYWN0ZXIsIC8vIDB4NWUgIF4K
LSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFj
dGVyLCAvLyAweDVmICBfCi0gICAgUXVlcnlDaGFyYWN0ZXIsIC8vIDB4NjAgIGAKLSAgICBRdWVy
eUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNp
bWFsQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDYxICBhCi0gICAgUXVlcnlD
aGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1h
bENoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg2MiAgYgotICAgIFF1ZXJ5Q2hh
cmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxD
aGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NjMgIGMKLSAgICBRdWVyeUNoYXJh
Y3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hh
cmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDY0ICBkCi0gICAgUXVlcnlDaGFyYWN0
ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJh
Y3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg2NSAgZQotICAgIFF1ZXJ5Q2hhcmFjdGVy
IHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0
ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NjYgIGYKLSAgICBRdWVyeUNoYXJhY3RlciB8
IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDY3ICBnCi0gICAg
UXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3Rlciwg
Ly8gMHg2OCAgaAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21w
b25lbnRDaGFyYWN0ZXIsIC8vIDB4NjkgIGkKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZv
Q2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDZhICBqCi0gICAgUXVlcnlDaGFy
YWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg2YiAg
awotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFy
YWN0ZXIsIC8vIDB4NmMgIGwKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVy
IHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDZkICBtCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBV
c2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg2ZSAgbgotICAgIFF1
ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8v
IDB4NmYgIG8KLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9u
ZW50Q2hhcmFjdGVyLCAvLyAweDcwICBwCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0No
YXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg3MSAgcQotICAgIFF1ZXJ5Q2hhcmFj
dGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NzIgIHIK
LSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFj
dGVyLCAvLyAweDczICBzCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8
IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg3NCAgdAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNl
ckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NzUgIHUKLSAgICBRdWVy
eUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAw
eDc2ICB2Ci0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVu
dENoYXJhY3RlciwgLy8gMHg3NyAgdwotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFy
YWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDc4ICB4Ci0g
ICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3Rl
ciwgLy8gMHg3OSAgeQotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBD
b21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4N2EgIHoKLSAgICBRdWVyeUNoYXJhY3RlciwgLy8gMHg3
YiAgewotICAgIFF1ZXJ5Q2hhcmFjdGVyLCAvLyAweDdjICB8Ci0gICAgUXVlcnlDaGFyYWN0ZXIs
IC8vIDB4N2QgIH0KLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29t
cG9uZW50Q2hhcmFjdGVyLCAvLyAweDdlICB+Ci0gICAgSW52YWxpZENoYXJhY3RlciwgLy8gMHg3
ZgotICAgIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0
ZXIsIEludmFsaWRDaGFyYWN0ZXIsCi0gICAgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJh
Y3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwKLSAgICBJbnZhbGlkQ2hh
cmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFj
dGVyLAotICAgIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFy
YWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIC8vIDB4ODAgLSAweDhmCi0gICAgSW52YWxpZENoYXJh
Y3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3Rl
ciwKLSAgICBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFj
dGVyLCBJbnZhbGlkQ2hhcmFjdGVyLAotICAgIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFy
YWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsCi0gICAgSW52YWxpZENo
YXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJh
Y3RlciwgLy8gMHg5MCAtIDB4OWYKLSAgICBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFj
dGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLAotICAgIEludmFsaWRDaGFy
YWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0
ZXIsCi0gICAgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJh
Y3RlciwgSW52YWxpZENoYXJhY3RlciwKLSAgICBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hh
cmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCAvLyAweGEwIC0gMHhh
ZgotICAgIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0
ZXIsIEludmFsaWRDaGFyYWN0ZXIsCi0gICAgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJh
Y3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwKLSAgICBJbnZhbGlkQ2hh
cmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFj
dGVyLAotICAgIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFy
YWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIC8vIDB4YjAgLSAweGJmCi0gICAgSW52YWxpZENoYXJh
Y3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3Rl
ciwKLSAgICBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFj
dGVyLCBJbnZhbGlkQ2hhcmFjdGVyLAotICAgIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFy
YWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsCi0gICAgSW52YWxpZENo
YXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJh
Y3RlciwgLy8gMHhjMCAtIDB4Y2YKLSAgICBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFj
dGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLAotICAgIEludmFsaWRDaGFy
YWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0
ZXIsCi0gICAgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJh
Y3RlciwgSW52YWxpZENoYXJhY3RlciwKLSAgICBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hh
cmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCAvLyAweGQwIC0gMHhk
ZgotICAgIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0
ZXIsIEludmFsaWRDaGFyYWN0ZXIsCi0gICAgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJh
Y3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwKLSAgICBJbnZhbGlkQ2hh
cmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFj
dGVyLAotICAgIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFy
YWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIC8vIDB4ZTAgLSAweGVmCi0gICAgSW52YWxpZENoYXJh
Y3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3Rl
ciwKLSAgICBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFj
dGVyLCBJbnZhbGlkQ2hhcmFjdGVyLAotICAgIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFy
YWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsCi0gICAgSW52YWxpZENo
YXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJh
Y3RlciwgLy8gMHhmMCAtIDB4ZmYKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENoYXJhY3RlclR5cGVzLmggYi9T
b3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENoYXJhY3RlclR5cGVzLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDY2NTIxMDVlOGQ3NzUwZDVlMjNiNDk0YTMxODNiOGU3YTZjNTY4YzAu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dU
Ri93dGYvdXJsL3NyYy9VUkxDaGFyYWN0ZXJUeXBlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBVUkxDaGFyYWN0ZXJUeXBlc19oCi0jZGVmaW5lIFVSTENoYXJhY3RlclR5cGVz
X2gKLQotI2lmIFVTRShXVEZVUkwpCi0KLW5hbWVzcGFjZSBXVEYgewotCi1jbGFzcyBVUkxDaGFy
YWN0ZXJUeXBlcyB7Ci1wdWJsaWM6Ci0gICAgZW51bSBDaGFyYWN0ZXJUeXBlcyB7Ci0gICAgICAg
IEludmFsaWRDaGFyYWN0ZXIgPSAwLAotICAgICAgICBRdWVyeUNoYXJhY3RlciA9IDEgPDwgMCwK
LSAgICAgICAgVXNlckluZm9DaGFyYWN0ZXIgPSAxIDw8IDEsCi0gICAgICAgIElQdjRDaGFyYWN0
ZXIgPSAxIDw8IDIsCi0gICAgICAgIEhleGFkZWNpbWFsQ2hhcmFjdGVyID0gMSA8PCAzLAotICAg
ICAgICBEZWNpbWFsQ2hhcmFjdGVyID0gMSA8PCA0LAotICAgICAgICBPY3RhbENoYXJhY3RlciA9
IDEgPDwgNSwKLSAgICAgICAgQ29tcG9uZW50Q2hhcmFjdGVyID0gMSA8PCA2LAotICAgIH07Ci0K
LSAgICBzdGF0aWMgaW5saW5lIGJvb2wgaXNDb21wb25lbnRDaGFyKHVuc2lnbmVkIGNoYXIgY2hh
cmFjdGVyKSB7IHJldHVybiBpc0NoYXJhY3Rlck9mVHlwZShjaGFyYWN0ZXIsIENvbXBvbmVudENo
YXJhY3Rlcik7IH0KLSAgICBzdGF0aWMgaW5saW5lIGJvb2wgaXNIZXhDaGFyKHVuc2lnbmVkIGNo
YXIgY2hhcmFjdGVyKSB7IHJldHVybiBpc0NoYXJhY3Rlck9mVHlwZShjaGFyYWN0ZXIsIEhleGFk
ZWNpbWFsQ2hhcmFjdGVyKTsgfQotICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0lQdjRDaGFyKHVu
c2lnbmVkIGNoYXIgY2hhcmFjdGVyKSB7IHJldHVybiBpc0NoYXJhY3Rlck9mVHlwZShjaGFyYWN0
ZXIsIElQdjRDaGFyYWN0ZXIpOyB9Ci0gICAgc3RhdGljIGlubGluZSBib29sIGlzUXVlcnlDaGFy
KHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyKSB7IHJldHVybiBpc0NoYXJhY3Rlck9mVHlwZShjaGFy
YWN0ZXIsIFF1ZXJ5Q2hhcmFjdGVyKTsgfQotCi0gICAgc3RhdGljIGlubGluZSBib29sIGlzQ2hh
cmFjdGVyT2ZUeXBlKHVuc2lnbmVkIGNoYXIgSGV4Q2hhcmFjdGVyLCBDaGFyYWN0ZXJUeXBlcyB0
eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuICEhKGNoYXJhY3RlclR5cGVUYWJsZVtIZXhDaGFy
YWN0ZXJdICYgdHlwZSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBjaGFyIGNoYXJhY3RlclR5cGVUYWJsZVsweDEwMF07Ci19OwotCi19Ci0KLSNlbmRpZiAv
LyBVU0UoV1RGVVJMKQotCi0jZW5kaWYgLy8gVVJMQ2hhcmFjdGVyVHlwZXNfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDb21wb25lbnQuaCBiL1NvdXJjZS9XVEYvd3Rm
L3VybC9zcmMvVVJMQ29tcG9uZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2
YWUwNWE3NDM0ZTRjNmNjMGM0ZTQ2Yjc4NzQ2OTFlYzBiYzkwOWUuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxD
b21wb25lbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0g
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVVJMQ29tcG9uZW50
X2gKLSNkZWZpbmUgVVJMQ29tcG9uZW50X2gKLQotI2lmIFVTRShXVEZVUkwpCi0KLW5hbWVzcGFj
ZSBXVEYgewotCi0vLyBSZXByZXNlbnRzIGEgc3Vic3RyaW5nIGZvciBVUkwgcGFyc2luZy4KLWNs
YXNzIFVSTENvbXBvbmVudCB7Ci1wdWJsaWM6Ci0gICAgVVJMQ29tcG9uZW50KCkgOiBtX2JlZ2lu
KDApLCBtX2xlbmd0aCgtMSkgeyB9Ci0gICAgVVJMQ29tcG9uZW50KGludCBiZWdpbiwgaW50IGxl
bmd0aCkgOiBtX2JlZ2luKGJlZ2luKSwgbV9sZW5ndGgobGVuZ3RoKSB7IH0KLQotICAgIC8vIEhl
bHBlciB0aGF0IHJldHVybnMgYSBjb21wb25lbnQgY3JlYXRlZCB3aXRoIHRoZSBnaXZlbiBiZWdp
biBhbmQgZW5kaW5nCi0gICAgLy8gcG9pbnRzLiBUaGUgZW5kaW5nIHBvaW50IGlzIG5vbi1pbmNs
dXNpdmUuCi0gICAgc3RhdGljIGlubGluZSBVUkxDb21wb25lbnQgZnJvbVJhbmdlKGludCBiZWdp
biwgaW50IGVuZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBVUkxDb21wb25lbnQoYmVnaW4sIGVu
ZCAtIGJlZ2luKTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBjb21wb25l
bnQgaXMgdmFsaWQsIG1lYW5pbmcgdGhlIGxlbmd0aCBpcyBnaXZlbi4gRXZlbgotICAgIC8vIHZh
bGlkIGNvbXBvbmVudHMgbWF5IGJlIGVtcHR5IHRvIHJlY29yZCB0aGUgZmFjdCB0aGF0IHRoZXkg
ZXhpc3QuCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGggIT0gLTE7
IH0KLQotICAgIGJvb2wgaXNOb25FbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoID4gMDsg
fQotICAgIGJvb2wgaXNFbXB0eU9ySW52YWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoIDw9
IDA7IH0KLQotICAgIHZvaWQgcmVzZXQoKQotICAgIHsKLSAgICAgICAgbV9iZWdpbiA9IDA7Ci0g
ICAgICAgIG1fbGVuZ3RoID0gLTE7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFVSTENvbXBvbmVudCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW4gPT0gb3RoZXIubV9i
ZWdpbiAmJiBtX2xlbmd0aCA9PSBvdGhlci5tX2xlbmd0aDsgfQotCi0gICAgaW50IGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9iZWdpbjsgfQotICAgIHZvaWQgc2V0QmVnaW4oaW50IGJlZ2luKSB7
IG1fYmVnaW4gPSBiZWdpbjsgfQotICAgIHZvaWQgbW92ZUJ5KGludCBvZmZzZXQpIHsgbV9iZWdp
biArPSBvZmZzZXQ7IH0KLQotICAgIGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0
aDsgfQotICAgIHZvaWQgc2V0TGVuZ3RoKGludCBsZW5ndGgpIHsgbV9sZW5ndGggPSBsZW5ndGg7
IH0KLQotICAgIGludCBlbmQoKSBjb25zdCB7IHJldHVybiBtX2JlZ2luICsgbV9sZW5ndGg7IH0K
LQotcHJpdmF0ZToKLSAgICBpbnQgbV9iZWdpbjsgLy8gQnl0ZSBvZmZzZXQgaW4gdGhlIHN0cmlu
ZyBvZiB0aGlzIGNvbXBvbmVudC4KLSAgICBpbnQgbV9sZW5ndGg7IC8vIFdpbGwgYmUgLTEgaWYg
dGhlIGNvbXBvbmVudCBpcyB1bnNwZWNpZmllZC4KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgot
Ci0jZW5kaWYgLy8gVVNFKFdURlVSTCkKLQotI2VuZGlmIC8vIFVSTENvbXBvbmVudF9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTEZpbGUuaCBiL1NvdXJjZS9XVEYvd3Rm
L3VybC9zcmMvVVJMRmlsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGIxMmVi
ZGYzM2VlZTZiZGEyNTJlNDcwYzVkN2JlM2RjMjg4ZWFlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMRmlsZS5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwNyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIFByb3ZpZGVzIHNoYXJlZCBmdW5jdGlvbnMgdXNlZCBi
eSB0aGUgaW50ZXJuYWxzIG9mIHRoZSBwYXJzZXIgYW5kCi0vLyBjYW5vbmljYWxpemVyIGZvciBm
aWxlIFVSTHMuIERvIG5vdCB1c2Ugb3V0c2lkZSBvZiB0aGVzZSBtb2R1bGVzLgotCi0jaWZuZGVm
IFVSTEZpbGVfaAotI2RlZmluZSBVUkxGaWxlX2gKLQotI2luY2x1ZGUgIlVSTFBhcnNlSW50ZXJu
YWwuaCIKLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+Ci0KLSNpZiBVU0UoV1RGVVJM
KQotCi1uYW1lc3BhY2UgV1RGIHsKLQotbmFtZXNwYWNlIFVSTFBhcnNlciB7Ci0KLSNpZiBPUyhX
SU5ET1dTKQotLy8gV2UgYWxsb3cgYm90aCAiYzoiIGFuZCAiY3wiIGFzIGRyaXZlIGlkZW50aWZp
ZXJzLgotaW5saW5lIGJvb2wgaXNXaW5kb3dzRHJpdmVTZXBhcmF0b3IoVUNoYXIgY2hhcmFjdGVy
KQotewotICAgIHJldHVybiBjaGFyYWN0ZXIgPT0gJzonIHx8IGNoYXJhY3RlciA9PSAnfCc7Ci19
Ci1pbmxpbmUgYm9vbCBpc1dpbmRvd3NEcml2ZUxldHRlcihVQ2hhciBjaGFyYWN0ZXIpCi17Ci0g
ICAgcmV0dXJuIChjaGFyYWN0ZXIgPj0gJ0EnICYmIGNoYXJhY3RlciA8PSAnWicpIHx8IChjaGFy
YWN0ZXIgPj0gJ2EnICYmIGNoYXJhY3RlciA8PSAneicpOwotfQotI2VuZGlmIC8vIE9TKFdJTkRP
V1MpCi0KLS8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IHNsYXNoIGluIHRoZSBpbnB1
dCBhZnRlciB0aGUgZ2l2ZW4gaW5kZXgsIG9yCi0vLyBzcGVjTGVuZ3RoIGlmIHRoZSBlbmQgb2Yg
dGhlIGlucHV0IGlzIHJlYWNoZWQuCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgot
aW5saW5lIGludCBmaW5kTmV4dFNsYXNoKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGludCBi
ZWdpbkluZGV4LCBpbnQgc3BlY0xlbmd0aCkKLXsKLSAgICBpbnQgaWR4ID0gYmVnaW5JbmRleDsK
LSAgICB3aGlsZSAoaWR4IDwgc3BlY0xlbmd0aCAmJiAhaXNVUkxTbGFzaChzcGVjW2lkeF0pKQot
ICAgICAgICArK2lkeDsKLSAgICByZXR1cm4gaWR4OwotfQotCi0jaWYgT1MoV0lORE9XUykKLS8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgc3RhcnRPZmZzZXQgaW4gdGhlIGdpdmVuIHNwZWMgbG9va3Mg
bGlrZSBpdCBiZWdpbnMgYQotLy8gZHJpdmUgc3BlYywgZm9yIGV4YW1wbGUgImM6Ii4gVGhpcyBm
dW5jdGlvbiBleHBsaWNpdGx5IGhhbmRsZXMgc3RhcnRPZmZzZXQKLS8vIHZhbHVlcyB0aGF0IGFy
ZSBlcXVhbCB0byBvciBsYXJnZXIgdGhhbiB0aGUgc3BlY0xlbmd0aCB0byBzaW1wbGlmeSBjYWxs
ZXJzLgotLy8KLS8vIElmIHRoaXMgcmV0dXJucyB0cnVlLCB0aGUgc3BlYyBpcyBndWFyYW50ZWVk
IHRvIGhhdmUgYSB2YWxpZCBkcml2ZSBsZXR0ZXIKLS8vIHBsdXMgYSBjb2xvbiBzdGFydGluZyBh
dCB8c3RhcnRPZmZzZXR8LgotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWlubGlu
ZSBib29sIGRvZXNCZWdpbldpbmRvd3NEcml2ZVNwZWMoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3Bl
YywgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgc3BlY0xlbmd0aCkKLXsKLSAgICBpbnQgcmVtYWluaW5n
TGVuZ3RoID0gc3BlY0xlbmd0aCAtIHN0YXJ0T2Zmc2V0OwotICAgIGlmIChyZW1haW5pbmdMZW5n
dGggPCAyKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5vdCBlbm91Z2ggcm9vbS4KLSAgICBp
ZiAoIWlzV2luZG93c0RyaXZlTGV0dGVyKHNwZWNbc3RhcnRPZmZzZXRdKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBEb2Vzbid0IHN0YXJ0IHdpdGggYSB2YWxpZCBkcml2ZSBsZXR0ZXIuCi0g
ICAgaWYgKCFpc1dpbmRvd3NEcml2ZVNlcGFyYXRvcihzcGVjW3N0YXJ0T2Zmc2V0ICsgMV0pKQot
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIElzbid0IGZvbGxvd2VkIHdpdGggYSBkcml2ZSBzZXBh
cmF0b3IuCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3Rh
cnRPZmZzZXQgaW4gdGhlIGdpdmVuIHRleHQgbG9va3MgbGlrZSBpdCBiZWdpbnMgYQotLy8gVU5D
IHBhdGgsIGZvciBleGFtcGxlICJcXCIuIFRoaXMgZnVuY3Rpb24gZXhwbGljaXRseSBoYW5kbGVz
IHN0YXJ0T2Zmc2V0Ci0vLyB2YWx1ZXMgdGhhdCBhcmUgZXF1YWwgdG8gb3IgbGFyZ2VyIHRoYW4g
dGhlIHNwZWNMZW5ndGggdG8gc2ltcGxpZnkgY2FsbGVycy4KLS8vCi0vLyBXaGVuIHN0cmljdFNs
YXNoZXMgaXMgc2V0LCB0aGlzIGZ1bmN0aW9uIHdpbGwgb25seSBhY2NlcHQgYmFja3NsYXNoZXMg
YXMgaXMKLS8vIHN0YW5kYXJkIGZvciBXaW5kb3dzLiBPdGhlcndpc2UsIGl0IHdpbGwgYWNjZXB0
IGZvcndhcmQgc2xhc2hlcyBhcyB3ZWxsCi0vLyB3aGljaCB3ZSB1c2UgZm9yIGEgbG90IG9mIFVS
TCBoYW5kbGluZy4KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1pbmxpbmUgYm9v
bCBkb2VzQmVnaW5VTkNQYXRoKGNvbnN0IENoYXJhY3RlclR5cGUqIHRleHQsIGludCBzdGFydE9m
ZnNldCwgaW50IGxlbmd0aCwgYm9vbCBzdHJpY3RTbGFzaGVzKQotewotICAgIGludCByZW1haW5p
bmdMZW5ndGggPSBsZW5ndGggLSBzdGFydE9mZnNldDsKLSAgICBpZiAocmVtYWluaW5nTGVuZ3Ro
IDwgMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHN0cmljdFNsYXNoZXMpCi0g
ICAgICAgIHJldHVybiB0ZXh0W3N0YXJ0T2Zmc2V0XSA9PSAnXFwnICYmIHRleHRbc3RhcnRPZmZz
ZXQgKyAxXSA9PSAnXFwnOwotICAgIHJldHVybiBpc1VSTFNsYXNoKHRleHRbc3RhcnRPZmZzZXRd
KSAmJiBpc1VSTFNsYXNoKHRleHRbc3RhcnRPZmZzZXQgKyAxXSk7Ci19Ci0jZW5kaWYgLy8gT1Mo
V0lORE9XUykKLQotfSAvLyBuYW1lc3BhY2UgVVJMUGFyc2VyCi0KLX0gLy8gbmFtZXNwYWNlIFdU
RgotCi0jZW5kaWYgLy8gVVNFKFdURlVSTCkKLQotI2VuZGlmIC8vIFVSTEZpbGVfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxQYXJzZS5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi91cmwvc3JjL1VSTFBhcnNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFl
NjViNDIzNjc3MTZmN2FiYzNmNTYxY2U4NTI4ZTlhNjA4ZTRlNi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFBh
cnNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc4MCArMCwwIEBACi0vKiBCYXNlZCBvbiBuc1VS
TFBhcnNlcnMuY2MgZnJvbSBNb3ppbGxhCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMg
Q29ycG9yYXRpb24uCi0gKiBDb3B5cmlnaHQgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBN
b3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KLSAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlv
dSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotICogdGhl
IExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogaHR0
cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCi0gKgotICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5k
ZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKLSAqIFdJ
VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNl
ZSB0aGUgTGljZW5zZQotICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmln
aHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKLSAqIExpY2Vuc2UuCi0gKgotICogVGhlIE9y
aWdpbmFsIENvZGUgaXMgbW96aWxsYS5vcmcgY29kZS4KLSAqCi0gKiBUaGUgSW5pdGlhbCBEZXZl
bG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKLSAqIE5ldHNjYXBlIENvbW11bmljYXRpb25z
IENvcnBvcmF0aW9uLgotICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9w
ZXIgYXJlIENvcHlyaWdodCAoQykgMTk5OAotICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqIENvbnRyaWJ1dG9yKHMpOgotICogICBEYXJpbiBGaXNo
ZXIgKG9yaWdpbmFsIGF1dGhvcikKLSAqCi0gKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMg
b2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgotICogZWl0aGVyIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BM
IiksIG9yCi0gKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24g
Mi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKLSAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lv
bnMgb2YgdGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCi0gKiBvZiB0
aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0
aGlzIGZpbGUgb25seQotICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRo
ZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bwotICogdXNlIHlvdXIgdmVyc2lvbiBv
ZiB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKLSAq
IGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRo
ZW0gd2l0aCB0aGUgbm90aWNlCi0gKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0
aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQotICogdGhlIHByb3Zpc2lv
bnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1
bmRlcgotICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUg
TEdQTC4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlVSTFBhcnNl
LmgiCi0KLSNpbmNsdWRlICJVUkxQYXJzZUludGVybmFsLmgiCi0jaW5jbHVkZSAiVVJMVXRpbC5o
IgotI2luY2x1ZGUgIlVSTFV0aWxJbnRlcm5hbC5oIgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2lu
Y2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+Ci0KLSNpZiBVU0UoV1RGVVJMKQotCi1uYW1lc3BhY2Ug
V1RGIHsKLQotbmFtZXNwYWNlIFVSTFBhcnNlciB7Ci0KLW5hbWVzcGFjZSB7Ci0KLS8vIFJldHVy
bnMgdGhlIG9mZnNldCBvZiB0aGUgbmV4dCBhdXRob3JpdHkgdGVybWluYXRvciBpbiB0aGUgaW5w
dXQgc3RhcnRpbmcKLS8vIGZyb20gc3RhcnRPZmZzZXQuIElmIG5vIHRlcm1pbmF0b3IgaXMgZm91
bmQsIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBlcXVhbAotLy8gdG8gc3BlY0xlbmd0aC4KLXRl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1pbnQgZmluZE5leHRBdXRob3JpdHlUZXJt
aW5hdG9yKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGludCBzdGFydE9mZnNldCwgaW50IHNw
ZWNMZW5ndGgpCi17Ci0gICAgZm9yIChpbnQgaSA9IHN0YXJ0T2Zmc2V0OyBpIDwgc3BlY0xlbmd0
aDsgaSsrKSB7Ci0gICAgICAgIGlmIChJc0F1dGhvcml0eVRlcm1pbmF0b3Ioc3BlY1tpXSkpCi0g
ICAgICAgICAgICByZXR1cm4gaTsKLSAgICB9Ci0gICAgcmV0dXJuIHNwZWNMZW5ndGg7IC8vIE5v
dCBmb3VuZC4KLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXZvaWQgcGFy
c2VVc2VySW5mbyhjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQm
IHVzZXIsIFVSTENvbXBvbmVudCYgdXNlcm5hbWUsIFVSTENvbXBvbmVudCYgcGFzc3dvcmQpCi17
Ci0gICAgLy8gRmluZCB0aGUgZmlyc3QgY29sb24gaW4gdGhlIHVzZXIgc2VjdGlvbiwgd2hpY2gg
c2VwYXJhdGVzIHRoZSB1c2VybmFtZSBhbmQKLSAgICAvLyBwYXNzd29yZC4KLSAgICBpbnQgY29s
b25PZmZzZXQgPSAwOwotICAgIHdoaWxlIChjb2xvbk9mZnNldCA8IHVzZXIubGVuZ3RoKCkgJiYg
c3BlY1t1c2VyLmJlZ2luKCkgKyBjb2xvbk9mZnNldF0gIT0gJzonKQotICAgICAgICArK2NvbG9u
T2Zmc2V0OwotCi0gICAgaWYgKGNvbG9uT2Zmc2V0IDwgdXNlci5sZW5ndGgoKSkgewotICAgICAg
ICAvLyBGb3VuZCBzZXBhcmF0b3I6IDx1c2VybmFtZT46PHBhc3N3b3JkPgotICAgICAgICB1c2Vy
bmFtZSA9IFVSTENvbXBvbmVudCh1c2VyLmJlZ2luKCksIGNvbG9uT2Zmc2V0KTsKLSAgICAgICAg
cGFzc3dvcmQgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZSh1c2VyLmJlZ2luKCkgKyBjb2xvbk9m
ZnNldCArIDEsIHVzZXIuZW5kKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIE5vIHNlcGFy
YXRvciwgdHJlYXQgZXZlcnl0aGluZyBhcyB0aGUgdXNlcm5hbWUKLSAgICAgICAgdXNlcm5hbWUg
PSB1c2VyOwotICAgICAgICBwYXNzd29yZCA9IFVSTENvbXBvbmVudCgpOwotICAgIH0KLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXZvaWQgcGFyc2VTZXJ2ZXJJbmZvKGNv
bnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgc2VydmVySW5mbywg
VVJMQ29tcG9uZW50JiBob3N0bmFtZSwgVVJMQ29tcG9uZW50JiBwb3J0KQotewotICAgIGlmICgh
c2VydmVySW5mby5sZW5ndGgoKSkgewotICAgICAgICAvLyBObyBzZXJ2ZXIgaW5mbywgaG9zdCBu
YW1lIGlzIGVtcHR5LgotICAgICAgICBob3N0bmFtZSA9IFVSTENvbXBvbmVudCgpOwotICAgICAg
ICBwb3J0ID0gVVJMQ29tcG9uZW50KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBJZiB0aGUgaG9zdCBzdGFydHMgd2l0aCBhIGxlZnQtYnJhY2tldCwgYXNzdW1lIHRoZSBlbnRp
cmUgaG9zdCBpcyBhbgotICAgIC8vIElQdjYgbGl0ZXJhbC4gT3RoZXJ3aXNlLCBhc3N1bWUgbm9u
ZSBvZiB0aGUgaG9zdCBpcyBhbiBJUHY2IGxpdGVyYWwuCi0gICAgLy8gVGhpcyBhc3N1bXB0aW9u
IHdpbGwgYmUgb3ZlcnJpZGRlbiBpZiB3ZSBmaW5kIGEgcmlnaHQtYnJhY2tldC4KLSAgICAvLwot
ICAgIC8vIE91ciBJUHY2IGFkZHJlc3MgY2Fub25pY2FsaXphdGlvbiBjb2RlIHJlcXVpcmVzIGJv
dGggYnJhY2tldHMgdG8gZXhpc3QsCi0gICAgLy8gYnV0IHRoZSBhYmlsaXR5IHRvIGxvY2F0ZSBh
biBpbmNvbXBsZXRlIGFkZHJlc3MgY2FuIHN0aWxsIGJlIHVzZWZ1bC4KLSAgICBpbnQgaXB2NlRl
cm1pbmF0b3IgPSBzcGVjW3NlcnZlckluZm8uYmVnaW4oKV0gPT0gJ1snID8gc2VydmVySW5mby5l
bmQoKSA6IC0xOwotICAgIGludCBjb2xvbiA9IC0xOwotCi0gICAgLy8gRmluZCB0aGUgbGFzdCBy
aWdodC1icmFja2V0LCBhbmQgdGhlIGxhc3QgY29sb24uCi0gICAgZm9yIChpbnQgaSA9IHNlcnZl
ckluZm8uYmVnaW4oKTsgaSA8IHNlcnZlckluZm8uZW5kKCk7ICsraSkgewotICAgICAgICBzd2l0
Y2ggKHNwZWNbaV0pIHsKLSAgICAgICAgY2FzZSAnXSc6Ci0gICAgICAgICAgICBpcHY2VGVybWlu
YXRvciA9IGk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnOic6Ci0gICAgICAg
ICAgICBjb2xvbiA9IGk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChjb2xvbiA+IGlwdjZUZXJtaW5hdG9yKSB7Ci0gICAgICAgIC8vIEZvdW5kIGEgcG9y
dCBudW1iZXI6IDxob3N0bmFtZT46PHBvcnQ+Ci0gICAgICAgIGhvc3RuYW1lID0gVVJMQ29tcG9u
ZW50Ojpmcm9tUmFuZ2Uoc2VydmVySW5mby5iZWdpbigpLCBjb2xvbik7Ci0gICAgICAgIGlmICgh
aG9zdG5hbWUubGVuZ3RoKCkpCi0gICAgICAgICAgICBob3N0bmFtZS5yZXNldCgpOwotICAgICAg
ICBwb3J0ID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoY29sb24gKyAxLCBzZXJ2ZXJJbmZvLmVu
ZCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBObyBwb3J0OiA8aG9zdG5hbWU+Ci0gICAg
ICAgIGhvc3RuYW1lID0gc2VydmVySW5mbzsKLSAgICAgICAgcG9ydCA9IFVSTENvbXBvbmVudCgp
OwotICAgIH0KLX0KLQotLy8gR2l2ZW4gYW4gYWxyZWFkeS1pZGVudGlmaWVkIGF1dGggc2VjdGlv
biwgYnJlYWtzIGl0IGludG8gaXRzIGNvbnNpdHVlbnQKLS8vIHBhcnRzLiBUaGUgcG9ydCBudW1i
ZXIgd2lsbCBiZSBwYXJzZWQgYW5kIHRoZSByZXN1bHRpbmcgaW50ZWdlciB3aWxsIGJlCi0vLyBm
aWxsZWQgaW50byB0aGUgZ2l2ZW4gKnBvcnQgdmFyaWFibGUsIG9yIC0xIGlmIHRoZXJlIGlzIG5v
IHBvcnQgbnVtYmVyIG9yIGl0Ci0vLyBpcyBpbnZhbGlkLgotdGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4KLXZvaWQgZG9QYXJzZUF1dGhvcml0eShjb25zdCBDaGFyYWN0ZXJUeXBlKiBz
cGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGF1dGhvcml0eSwgVVJMQ29tcG9uZW50JiB1c2VybmFt
ZSwgVVJMQ29tcG9uZW50JiBwYXNzd29yZCwgVVJMQ29tcG9uZW50JiBob3N0bmFtZSwgVVJMQ29t
cG9uZW50JiBwb3J0KQotewotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoYXV0aG9yaXR5LmlzVmFs
aWQoKSwgIldlIHNob3VsZCBhbHdheXMgZ2V0IGFuIGF1dGhvcml0eSIpOwotICAgIGlmICghYXV0
aG9yaXR5Lmxlbmd0aCgpKSB7Ci0gICAgICAgIHVzZXJuYW1lID0gVVJMQ29tcG9uZW50KCk7Ci0g
ICAgICAgIHBhc3N3b3JkID0gVVJMQ29tcG9uZW50KCk7Ci0gICAgICAgIGhvc3RuYW1lID0gVVJM
Q29tcG9uZW50KCk7Ci0gICAgICAgIHBvcnQgPSBVUkxDb21wb25lbnQoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIFNlYXJjaCBiYWNrd2FyZHMgZm9yIEAsIHdoaWNoIGlzIHRo
ZSBzZXBhcmF0b3IgYmV0d2VlbiB0aGUgdXNlciBpbmZvIGFuZAotICAgIC8vIHRoZSBzZXJ2ZXIg
aW5mby4KLSAgICBpbnQgaSA9IGF1dGhvcml0eS5lbmQoKSAtIDE7Ci0gICAgd2hpbGUgKGkgPiBh
dXRob3JpdHkuYmVnaW4oKSAmJiBzcGVjW2ldICE9ICdAJykKLSAgICAgICAgLS1pOwotCi0gICAg
aWYgKHNwZWNbaV0gPT0gJ0AnKSB7Ci0gICAgICAgIC8vIEZvdW5kIHVzZXIgaW5mbzogPHVzZXIt
aW5mbz5APHNlcnZlci1pbmZvPgotICAgICAgICBwYXJzZVVzZXJJbmZvKHNwZWMsIFVSTENvbXBv
bmVudChhdXRob3JpdHkuYmVnaW4oKSwgaSAtIGF1dGhvcml0eS5iZWdpbigpKSwgdXNlcm5hbWUs
IHBhc3N3b3JkKTsKLSAgICAgICAgcGFyc2VTZXJ2ZXJJbmZvKHNwZWMsIFVSTENvbXBvbmVudDo6
ZnJvbVJhbmdlKGkgKyAxLCBhdXRob3JpdHkuZW5kKCkpLCBob3N0bmFtZSwgcG9ydCk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgLy8gTm8gdXNlciBpbmZvLCBldmVyeXRoaW5nIGlzIHNlcnZlciBp
bmZvLgotICAgICAgICB1c2VybmFtZSA9IFVSTENvbXBvbmVudCgpOwotICAgICAgICBwYXNzd29y
ZCA9IFVSTENvbXBvbmVudCgpOwotICAgICAgICBwYXJzZVNlcnZlckluZm8oc3BlYywgYXV0aG9y
aXR5LCBob3N0bmFtZSwgcG9ydCk7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgotdm9pZCBwYXJzZVBhdGgoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29u
c3QgVVJMQ29tcG9uZW50JiBoaWVyYXJjaGljYWxpZGVudGlmaWVycywgVVJMQ29tcG9uZW50JiBy
ZXNvdXJjZVBhdGgsIFVSTENvbXBvbmVudCYgcXVlcnksIFVSTENvbXBvbmVudCYgZnJhZ21lbnQp
Ci17Ci0gICAgLy8gcGF0aCA9IFsvXTxzZWdtZW50MT4vPHNlZ21lbnQyPi88Li4uPi88c2VnbWVu
dE4+OzxwYXJhbT4/PHF1ZXJ5PiM8cmVmPgotCi0gICAgLy8gU3BlY2lhbCBjYXNlIHdoZW4gdGhl
cmUgaXMgbm8gcGF0aC4KLSAgICBpZiAoaGllcmFyY2hpY2FsaWRlbnRpZmllcnMubGVuZ3RoKCkg
PT0gLTEpIHsKLSAgICAgICAgcmVzb3VyY2VQYXRoID0gVVJMQ29tcG9uZW50KCk7Ci0gICAgICAg
IHF1ZXJ5ID0gVVJMQ29tcG9uZW50KCk7Ci0gICAgICAgIGZyYWdtZW50ID0gVVJMQ29tcG9uZW50
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShoaWVy
YXJjaGljYWxpZGVudGlmaWVycy5sZW5ndGgoKSA+IDAsICJXZSBzaG91bGQgbmV2ZXIgaGF2ZSAw
IGxlbmd0aCBwYXRocyIpOwotCi0gICAgLy8gU2VhcmNoIGZvciBmaXJzdCBvY2N1cnJlbmNlIG9m
IGVpdGhlciA/IG9yICMuCi0gICAgaW50IHBhdGhFbmQgPSBoaWVyYXJjaGljYWxpZGVudGlmaWVy
cy5lbmQoKTsKLQotICAgIGludCBxdWVyeVNlcGFyYXRvciA9IC0xOyAvLyBJbmRleCBvZiB0aGUg
Jz8nCi0gICAgaW50IGZyYWdtZW50U2VwYXJhdG9yID0gLTE7IC8vIEluZGV4IG9mIHRoZSAnIycK
LSAgICBmb3IgKGludCBpID0gaGllcmFyY2hpY2FsaWRlbnRpZmllcnMuYmVnaW4oKTsgaSA8IHBh
dGhFbmQ7ICsraSkgewotICAgICAgICBzd2l0Y2ggKHNwZWNbaV0pIHsKLSAgICAgICAgY2FzZSAn
Pyc6Ci0gICAgICAgICAgICAvLyBPbmx5IG1hdGNoIHRoZSBxdWVyeSBzdHJpbmcgaWYgaXQgcHJl
Y2VkZXMgdGhlIHJlZmVyZW5jZSBmcmFnbWVudAotICAgICAgICAgICAgLy8gYW5kIHdoZW4gd2Ug
aGF2ZW4ndCBmb3VuZCBvbmUgYWxyZWFkeS4KLSAgICAgICAgICAgIGlmIChmcmFnbWVudFNlcGFy
YXRvciA8IDAgJiYgcXVlcnlTZXBhcmF0b3IgPCAwKQotICAgICAgICAgICAgICAgIHF1ZXJ5U2Vw
YXJhdG9yID0gaTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICcjJzoKLSAgICAg
ICAgICAgIC8vIFJlY29yZCB0aGUgZmlyc3QgIyBzaWduIG9ubHkuCi0gICAgICAgICAgICBpZiAo
ZnJhZ21lbnRTZXBhcmF0b3IgPCAwKQotICAgICAgICAgICAgICAgIGZyYWdtZW50U2VwYXJhdG9y
ID0gaTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTWFy
a2VycyBwb2ludGluZyB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIGVhY2ggb2YgdGhlc2UgY29ycmVz
cG9uZGluZwotICAgIC8vIGNvbXBvbmVudHMuIFRoZSBjb2RlIGJlbG93IHdvcmRzIGZyb20gdGhl
IGVuZCBiYWNrIHRvIHRoZSBiZWdpbm5pbmcsCi0gICAgLy8gYW5kIHdpbGwgdXBkYXRlIHRoZXNl
IGluZGljZXMgYXMgaXQgZmluZHMgY29tcG9uZW50cyB0aGF0IGV4aXN0LgotICAgIGludCByZXNv
dXJjZVBhdGhFbmQgPSAtMTsKLSAgICBpbnQgcXVlcnlFbmQgPSAtMTsKLQotICAgIC8vIFJlZiBm
cmFnbWVudDogZnJvbSB0aGUgIyB0byB0aGUgZW5kIG9mIHRoZSBwYXRoLgotICAgIGlmIChmcmFn
bWVudFNlcGFyYXRvciA+PSAwKSB7Ci0gICAgICAgIHJlc291cmNlUGF0aEVuZCA9IHF1ZXJ5RW5k
ID0gZnJhZ21lbnRTZXBhcmF0b3I7Ci0gICAgICAgIGZyYWdtZW50ID0gVVJMQ29tcG9uZW50Ojpm
cm9tUmFuZ2UoZnJhZ21lbnRTZXBhcmF0b3IgKyAxLCBwYXRoRW5kKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICByZXNvdXJjZVBhdGhFbmQgPSBxdWVyeUVuZCA9IHBhdGhFbmQ7Ci0gICAgICAgIGZy
YWdtZW50ID0gVVJMQ29tcG9uZW50KCk7Ci0gICAgfQotCi0gICAgLy8gUXVlcnkgZnJhZ21lbnQ6
IGV2ZXJ5dGhpbmcgZnJvbSB0aGUgPyB0byB0aGUgbmV4dCBib3VuZGFyeSAoZWl0aGVyIHRoZSBl
bmQKLSAgICAvLyBvZiB0aGUgcGF0aCBvciB0aGUgcmVmIGZyYWdtZW50KS4KLSAgICBpZiAocXVl
cnlTZXBhcmF0b3IgPj0gMCkgewotICAgICAgICByZXNvdXJjZVBhdGhFbmQgPSBxdWVyeVNlcGFy
YXRvcjsKLSAgICAgICAgcXVlcnkgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShxdWVyeVNlcGFy
YXRvciArIDEsIHF1ZXJ5RW5kKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcXVlcnkgPSBVUkxDb21w
b25lbnQoKTsKLQotICAgIC8vIEZpbGUgcGF0aDogdHJlYXQgYW4gZW1wdHkgZmlsZSBwYXRoIGFz
IG5vIGZpbGUgcGF0aC4KLSAgICBpZiAocmVzb3VyY2VQYXRoRW5kICE9IGhpZXJhcmNoaWNhbGlk
ZW50aWZpZXJzLmJlZ2luKCkpCi0gICAgICAgIHJlc291cmNlUGF0aCA9IFVSTENvbXBvbmVudDo6
ZnJvbVJhbmdlKGhpZXJhcmNoaWNhbGlkZW50aWZpZXJzLmJlZ2luKCksIHJlc291cmNlUGF0aEVu
ZCk7Ci0gICAgZWxzZQotICAgICAgICByZXNvdXJjZVBhdGggPSBVUkxDb21wb25lbnQoKTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWJvb2wgZG9FeHRyYWN0U2NoZW1l
KGNvbnN0IENoYXJhY3RlclR5cGUqIHVybCwgaW50IHVybExlbmd0aCwgVVJMQ29tcG9uZW50JiBz
Y2hlbWUpCi17Ci0gICAgLy8gU2tpcCBsZWFkaW5nIHdoaXRlc3BhY2UgYW5kIGNvbnRyb2wgY2hh
cmFjdGVycy4KLSAgICBpbnQgYmVnaW4gPSAwOwotICAgIHdoaWxlIChiZWdpbiA8IHVybExlbmd0
aCAmJiBzaG91bGRUcmltRnJvbVVSTCh1cmxbYmVnaW5dKSkKLSAgICAgICAgKytiZWdpbjsKLQot
ICAgIGlmIChiZWdpbiA9PSB1cmxMZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gSW5w
dXQgaXMgZW1wdHkgb3IgYWxsIHdoaXRlc3BhY2UuCi0KLSAgICAvLyBGaW5kIHRoZSBmaXJzdCBj
b2xvbiBjaGFyYWN0ZXIuCi0gICAgZm9yIChpbnQgaSA9IGJlZ2luOyBpIDwgdXJsTGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgaWYgKHVybFtpXSA9PSAnOicpIHsKLSAgICAgICAgICAgIHNjaGVtZSA9
IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKGJlZ2luLCBpKTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsgLy8gTm8gY29sb24gZm91
bmQ6IG5vIHNjaGVtZQotfQotCi0vLyBGaWxscyBpbiBhbGwgbWVtYmVycyBvZiB0aGUgUGFyc2Vk
IHN0cnVjdHVyZSBleGNlcHQgZm9yIHRoZSBzY2hlbWUuCi0vLwotLy8gfHNwZWN8IGlzIHRoZSBm
dWxsIHNwZWMgYmVpbmcgcGFyc2VkLCBvZiBsZW5ndGggfHNwZWNMZW5ndGh8LgotLy8gfGFmdGVy
U2NoZW1lfCBpcyB0aGUgY2hhcmFjdGVyIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgc2NoZW1l
IChhZnRlciB0aGUKLS8vICAgY29sb24pIHdoZXJlIHdlJ2xsIGJlZ2luIHBhcnNpbmcuCi0vLwot
Ly8gQ29tcGF0YWJpbGl0eSBkYXRhIHBvaW50cy4gSSBsaXN0ICJob3N0IiwgInBhdGgiIGV4dHJh
Y3RlZDoKLS8vIElucHV0ICAgICAgICAgICAgICAgIElFNiAgICAgICAgICAgICBGaXJlZm94ICAg
ICAgICAgICAgICAgIFVzCi0vLyAtLS0tLSAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLSAg
LS0tLS0tLS0tLS0tLS0gICAgICAgICAtLS0tLS0tLS0tLS0tLQotLy8gaHR0cDovL2Zvby5jb20v
ICAgICAgImZvby5jb20iLCAiLyIgICJmb28uY29tIiwgIi8iICAgICAgICAgImZvby5jb20iLCAi
LyIKLS8vIGh0dHA6Zm9vLmNvbS8gICAgICAgICJmb28uY29tIiwgIi8iICAiZm9vLmNvbSIsICIv
IiAgICAgICAgICJmb28uY29tIiwgIi8iCi0vLyBodHRwOi9mb28uY29tLyAgICAgICBmYWlsKCop
ICAgICAgICAgImZvby5jb20iLCAiLyIgICAgICAgICAiZm9vLmNvbSIsICIvIgotLy8gaHR0cDpc
Zm9vLmNvbS8gICAgICAgZmFpbCgqKSAgICAgICAgICJcZm9vLmNvbSIsICIvIihmYWlsKSAgImZv
by5jb20iLCAiLyIKLS8vIGh0dHA6Ly8vL2Zvby5jb20vICAgICJmb28uY29tIiwgIi8iICAiZm9v
LmNvbSIsICIvIiAgICAgICAgICJmb28uY29tIiwgIi8iCi0vLwotLy8gKCopIEludGVyZXN0aW5n
bHksIGFsdGhvdWdoIElFIGZhaWxzIHRvIGxvYWQgdGhlc2UgVVJMcywgaXRzIGhpc3RvcnkKLS8v
IGNhbm9uaWNhbGl6ZXIgaGFuZGxlcyB0aGVtLCBtZWFuaW5nIGlmIHlvdSd2ZSBiZWVuIHRvIHRo
ZSBjb3JyZXNwb25kaW5nCi0vLyAiaHR0cDovL2Zvby5jb20vIiBsaW5rLCBpdCB3aWxsIGJlIGNv
bG9yZWQuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXZvaWQgZG9QYXJzZUFm
dGVyU2NoZW1lKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGludCBzcGVjTGVuZ3RoLCBpbnQg
YWZ0ZXJTY2hlbWUsIFVSTFNlZ21lbnRzJiBwYXJzZWQpCi17Ci0gICAgaW50IHNsYXNoZXNDb3Vu
dCA9IGNvdW50Q29uc2VjdXRpdmVTbGFzaGVzKHNwZWMsIGFmdGVyU2NoZW1lLCBzcGVjTGVuZ3Ro
KTsKLSAgICBpbnQgYWZ0ZXJTbGFzaGVzID0gYWZ0ZXJTY2hlbWUgKyBzbGFzaGVzQ291bnQ7Ci0K
LSAgICAvLyBGaXJzdCBzcGxpdCBpbnRvIHR3byBtYWluIHBhcnRzLCB0aGUgYXV0aG9yaXR5ICh1
c2VybmFtZSwgcGFzc3dvcmQsIGhvc3QsCi0gICAgLy8gYW5kIHBvcnQpIGFuZCB0aGUgZnVsbCBw
YXRoIChwYXRoLCBxdWVyeSwgYW5kIHJlZmVyZW5jZSkuCi0gICAgVVJMQ29tcG9uZW50IGF1dGhv
cml0eTsKLSAgICBVUkxDb21wb25lbnQgZnVsbFBhdGg7Ci0KLSAgICAvLyBGb3VuZCAiLy88c29t
ZSBkYXRhPiIsIGxvb2tzIGxpa2UgYW4gYXV0aG9yaXR5IHNlY3Rpb24uIFRyZWF0IGV2ZXJ5dGhp
bmcKLSAgICAvLyBmcm9tIHRoZXJlIHRvIHRoZSBuZXh0IHNsYXNoIChvciBlbmQgb2Ygc3BlYykg
dG8gYmUgdGhlIGF1dGhvcml0eS4gTm90ZQotICAgIC8vIHRoYXQgd2UgaWdub3JlIHRoZSBudW1i
ZXIgb2Ygc2xhc2hlcyBhbmQgdHJlYXQgaXQgYXMgdGhlIGF1dGhvcml0eS4KLSAgICBpbnQgZW5k
QXV0aCA9IGZpbmROZXh0QXV0aG9yaXR5VGVybWluYXRvcihzcGVjLCBhZnRlclNsYXNoZXMsIHNw
ZWNMZW5ndGgpOwotICAgIGF1dGhvcml0eSA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKGFmdGVy
U2xhc2hlcywgZW5kQXV0aCk7Ci0KLSAgICBpZiAoZW5kQXV0aCA9PSBzcGVjTGVuZ3RoKSAvLyBO
byBiZWdpbm5pbmcgb2YgcGF0aCBmb3VuZC4KLSAgICAgICAgZnVsbFBhdGggPSBVUkxDb21wb25l
bnQoKTsKLSAgICBlbHNlIC8vIEV2ZXJ5dGhpbmcgc3RhcnRpbmcgZnJvbSB0aGUgc2xhc2ggdG8g
dGhlIGVuZCBpcyB0aGUgcGF0aC4KLSAgICAgICAgZnVsbFBhdGggPSBVUkxDb21wb25lbnQ6OmZy
b21SYW5nZShlbmRBdXRoLCBzcGVjTGVuZ3RoKTsKLQotICAgIC8vIE5vdyBwYXJzZSB0aG9zZSB0
d28gc3ViLXBhcnRzLgotICAgIGRvUGFyc2VBdXRob3JpdHkoc3BlYywgYXV0aG9yaXR5LCBwYXJz
ZWQudXNlcm5hbWUsIHBhcnNlZC5wYXNzd29yZCwgcGFyc2VkLmhvc3QsIHBhcnNlZC5wb3J0KTsK
LSAgICBwYXJzZVBhdGgoc3BlYywgZnVsbFBhdGgsIHBhcnNlZC5wYXRoLCBwYXJzZWQucXVlcnks
IHBhcnNlZC5mcmFnbWVudCk7Ci19Ci0KLS8vIFRoZSBtYWluIHBhcnNpbmcgZnVuY3Rpb24gZm9y
IHN0YW5kYXJkIFVSTHMuIFN0YW5kYXJkIFVSTHMgaGF2ZSBhIHNjaGVtZSwKLS8vIGhvc3QsIHBh
dGgsIGV0Yy4KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci12b2lkIGRvUGFyc2VT
dGFuZGFyZFVSTChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwgVVJM
U2VnbWVudHMmIHBhcnNlZCkKLXsKLSAgICBBU1NFUlQoc3BlY0xlbmd0aCA+PSAwKTsKLQotICAg
IC8vIFN0cmlwIGxlYWRpbmcgJiB0cmFpbGluZyBzcGFjZXMgYW5kIGNvbnRyb2wgY2hhcmFjdGVy
cy4KLSAgICBpbnQgYmVnaW4gPSAwOwotICAgIHRyaW1VUkwoc3BlYywgYmVnaW4sIHNwZWNMZW5n
dGgpOwotCi0gICAgaW50IGFmdGVyU2NoZW1lID0gLTE7Ci0gICAgaWYgKGRvRXh0cmFjdFNjaGVt
ZShzcGVjLCBzcGVjTGVuZ3RoLCBwYXJzZWQuc2NoZW1lKSkKLSAgICAgICAgYWZ0ZXJTY2hlbWUg
PSBwYXJzZWQuc2NoZW1lLmVuZCgpICsgMTsgLy8gU2tpcCBwYXN0IHRoZSBjb2xvbi4KLSAgICBl
bHNlIHsKLSAgICAgICAgLy8gU2F5IHRoZXJlJ3Mgbm8gc2NoZW1lIHdoZW4gdGhlcmUgaXMgbm8g
Y29sb24uIFdlIGNvdWxkIGFsc28gc2F5IHRoYXQKLSAgICAgICAgLy8gZXZlcnl0aGluZyBpcyB0
aGUgc2NoZW1lLiBCb3RoIHdvdWxkIHByb2R1Y2UgYW4gaW52YWxpZCBVUkwsIGJ1dCB0aGlzIHdh
eQotICAgICAgICAvLyBzZWVtcyBsZXNzIHdyb25nIGluIG1vcmUgY2FzZXMuCi0gICAgICAgIHBh
cnNlZC5zY2hlbWUucmVzZXQoKTsKLSAgICAgICAgYWZ0ZXJTY2hlbWUgPSBiZWdpbjsKLSAgICB9
Ci0gICAgZG9QYXJzZUFmdGVyU2NoZW1lKHNwZWMsIHNwZWNMZW5ndGgsIGFmdGVyU2NoZW1lLCBw
YXJzZWQpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotdm9pZCBkb1Bh
cnNlRmlsZVN5c3RlbVVSTChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBpbnQgc3BlY0xlbmd0
aCwgVVJMU2VnbWVudHMmIHBhcnNlZCkKLXsKLSAgICBBU1NFUlQoc3BlY0xlbmd0aCA+PSAwKTsK
LQotICAgIC8vIEdldCB0aGUgdW51c2VkIHBhcnRzIG9mIHRoZSBVUkwgb3V0IG9mIHRoZSB3YXku
Ci0gICAgcGFyc2VkLnVzZXJuYW1lLnJlc2V0KCk7Ci0gICAgcGFyc2VkLnBhc3N3b3JkLnJlc2V0
KCk7Ci0gICAgcGFyc2VkLmhvc3QucmVzZXQoKTsKLSAgICBwYXJzZWQucG9ydC5yZXNldCgpOwot
ICAgIHBhcnNlZC5wYXRoLnJlc2V0KCk7IC8vIE1heSB1c2UgdGhpczsgcmVzZXQgZm9yIGNvbnZl
bmllbmNlLgotICAgIHBhcnNlZC5mcmFnbWVudC5yZXNldCgpOyAvLyBNYXkgdXNlIHRoaXM7IHJl
c2V0IGZvciBjb252ZW5pZW5jZS4KLSAgICBwYXJzZWQucXVlcnkucmVzZXQoKTsgLy8gTWF5IHVz
ZSB0aGlzOyByZXNldCBmb3IgY29udmVuaWVuY2UuCi0gICAgcGFyc2VkLmNsZWFySW5uZXJVUkxT
ZWdtZW50cygpOyAvLyBNYXkgdXNlIHRoaXM7IHJlc2V0IGZvciBjb252ZW5pZW5jZS4KLQotICAg
IC8vIFN0cmlwIGxlYWRpbmcgJiB0cmFpbGluZyBzcGFjZXMgYW5kIGNvbnRyb2wgY2hhcmFjdGVy
cy4KLSAgICBpbnQgYmVnaW4gPSAwOwotICAgIHRyaW1VUkwoc3BlYywgYmVnaW4sIHNwZWNMZW5n
dGgpOwotCi0gICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNzIG9yIG9uZXMgdGhhdCBjb250YWluIG9u
bHkgd2hpdGVzcGFjZSBvciBjb250cm9sIGNoYXJzLgotICAgIGlmIChiZWdpbiA9PSBzcGVjTGVu
Z3RoKSB7Ci0gICAgICAgIHBhcnNlZC5zY2hlbWUucmVzZXQoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGludCBpbm5lclN0YXJ0ID0gLTE7Ci0KLSAgICAvLyBFeHRyYWN0IHRoZSBz
Y2hlbWUuIFdlIGFsc28gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzIG5vIHNjaGVtZS4K
LSAgICBpZiAoZG9FeHRyYWN0U2NoZW1lKCZzcGVjW2JlZ2luXSwgc3BlY0xlbmd0aCAtIGJlZ2lu
LCBwYXJzZWQuc2NoZW1lKSkgewotICAgICAgICAvLyBPZmZzZXQgdGhlIHJlc3VsdHMgc2luY2Ug
d2UgZ2F2ZSBFeHRyYWN0U2NoZW1lIGEgc3Vic3RyaW5nLgotICAgICAgICBwYXJzZWQuc2NoZW1l
Lm1vdmVCeShiZWdpbik7Ci0KLSAgICAgICAgaWYgKHBhcnNlZC5zY2hlbWUuZW5kKCkgPT0gc3Bl
Y0xlbmd0aCAtIDEpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaW5uZXJTdGFydCA9
IHBhcnNlZC5zY2hlbWUuZW5kKCkgKyAxOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIE5vIHNj
aGVtZSBmb3VuZDsgdGhhdCdzIG5vdCB2YWxpZCBmb3IgZmlsZXN5c3RlbSBVUkxzLgotICAgICAg
ICBwYXJzZWQuc2NoZW1lLnJlc2V0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBV
UkxDb21wb25lbnQgaW5uZXJTY2hlbWU7Ci0gICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogaW5uZXJT
cGVjID0gJnNwZWNbaW5uZXJTdGFydF07Ci0gICAgaW50IGlubmVyU3BlY0xlbmd0aCA9IHNwZWNM
ZW5ndGggLSBpbm5lclN0YXJ0OwotCi0gICAgaWYgKGRvRXh0cmFjdFNjaGVtZShpbm5lclNwZWMs
IGlubmVyU3BlY0xlbmd0aCwgaW5uZXJTY2hlbWUpKSB7Ci0gICAgICAgIC8vIE9mZnNldCB0aGUg
cmVzdWx0cyBzaW5jZSB3ZSBnYXZlIEV4dHJhY3RTY2hlbWUgYSBzdWJzdHJpbmcuCi0gICAgICAg
IGlubmVyU2NoZW1lLm1vdmVCeShpbm5lclN0YXJ0KTsKLQotICAgICAgICBpZiAoaW5uZXJTY2hl
bWUuZW5kKCkgPT0gc3BlY0xlbmd0aCAtIDEpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgLy8gTm8gc2NoZW1lIGZvdW5kOyB0aGF0J3Mgbm90IHZhbGlkIGZvciBm
aWxlc3lzdGVtIFVSTHMuCi0gICAgICAgIC8vIFRoZSBiZXN0IHdlIGNhbiBkbyBpcyByZXR1cm4g
ImZpbGVzeXN0ZW06Ly8iLgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVVJMU2VnbWVu
dHMgaW5uZXJQYXJzZWQ7Ci0gICAgaWYgKFVSTFV0aWxpdGllczo6Q29tcGFyZVNjaGVtZUNvbXBv
bmVudChzcGVjLCBpbm5lclNjaGVtZSwgVVJMVXRpbGl0aWVzOjprRmlsZVNjaGVtZSkpIHsKLSAg
ICAgICAgLy8gRmlsZSBVUkxzIGFyZSBzcGVjaWFsLgotICAgICAgICBQYXJzZUZpbGVVUkwoaW5u
ZXJTcGVjLCBpbm5lclNwZWNMZW5ndGgsICZpbm5lclBhcnNlZCk7Ci0gICAgfSBlbHNlIGlmIChV
UkxVdGlsaXRpZXM6OkNvbXBhcmVTY2hlbWVDb21wb25lbnQoc3BlYywgaW5uZXJTY2hlbWUsIFVS
TFV0aWxpdGllczo6a0ZpbGVTeXN0ZW1TY2hlbWUpKSB7Ci0gICAgICAgIC8vIEZpbGVzeXN0ZW0g
VVJMcyBkb24ndCBuZXN0LgotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChVUkxVdGls
aXRpZXM6OmlzU3RhbmRhcmQoc3BlYywgaW5uZXJTY2hlbWUpKSB7Ci0gICAgICAgIC8vIEFsbCAi
bm9ybWFsIiBVUkxzLgotICAgICAgICBkb1BhcnNlU3RhbmRhcmRVUkwoaW5uZXJTcGVjLCBpbm5l
clNwZWNMZW5ndGgsIGlubmVyUGFyc2VkKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gQWxsIG1lbWJlcnMgb2YgaW5uZXJQYXJzZWQgbmVlZCB0byBiZSBvZmZzZXQgYnkg
aW5uZXJTdGFydC4KLSAgICAvLyBJZiB3ZSBoYWQgYW55IHNjaGVtZSB0aGF0IHN1cHBvcnRlZCBu
ZXN0aW5nIG1vcmUgdGhhbiBvbmUgbGV2ZWwgZGVlcCwKLSAgICAvLyB3ZSdkIGhhdmUgdG8gcmVj
dXJzZSBpbnRvIHRoZSBpbm5lclBhcnNlZCdzIGlubmVyUGFyc2VkIHdoZW4KLSAgICAvLyBhZGp1
c3RpbmcgYnkgaW5uZXJTdGFydC4KLSAgICBpbm5lclBhcnNlZC5tb3ZlRnJvbUNvbXBvbmVudEJ5
KFVSTFNlZ21lbnRzOjpTY2hlbWUsIGlubmVyU3RhcnQpOwotCi0gICAgLy8gUXVlcnkgYW5kIHJl
ZiBtb3ZlIGZyb20gaW5uZXJQYXJzZWQgdG8gcGFyc2VkLgotICAgIHBhcnNlZC5xdWVyeSA9IGlu
bmVyUGFyc2VkLnF1ZXJ5OwotICAgIGlubmVyUGFyc2VkLnF1ZXJ5LnJlc2V0KCk7Ci0gICAgcGFy
c2VkLmZyYWdtZW50ID0gaW5uZXJQYXJzZWQuZnJhZ21lbnQ7Ci0gICAgaW5uZXJQYXJzZWQuZnJh
Z21lbnQucmVzZXQoKTsKLQotICAgIHBhcnNlZC5zZXRJbm5lclVSTFNlZ21lbnRzKGlubmVyUGFy
c2VkKTsKLSAgICBpZiAoIWlubmVyUGFyc2VkLnNjaGVtZS5pc1ZhbGlkKCkgfHwgIWlubmVyUGFy
c2VkLnBhdGguaXNWYWxpZCgpIHx8IGlubmVyUGFyc2VkLmlubmVyVVJMU2VnbWVudHMoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlIHBhdGggaW4gaW5uZXJQYXJzZWQgc2hvdWxkIHN0
YXJ0IHdpdGggYSBzbGFzaCwgdGhlbiBoYXZlIGEgZmlsZXN5c3RlbQotICAgIC8vIHR5cGUgZm9s
bG93ZWQgYnkgYSBzbGFzaC4gRnJvbSB0aGUgZmlyc3Qgc2xhc2ggdXAgdG8gYnV0IGV4Y2x1ZGlu
ZyB0aGUKLSAgICAvLyBzZWNvbmQgc2hvdWxkIGJlIHdoYXQgaXQga2VlcHM7IHRoZSByZXN0IGdv
ZXMgdG8gcGFyc2VkLiBJZiB0aGUgcGF0aCBlbmRzCi0gICAgLy8gYmVmb3JlIHRoZSBzZWNvbmQg
c2xhc2gsIGl0J3Mgc3RpbGwgcHJldHR5IGNsZWFyIHdoYXQgdGhlIHVzZXIgbWVhbnQsIHNvCi0g
ICAgLy8gd2UnbGwgbGV0IHRoYXQgdGhyb3VnaC4KLSAgICBpZiAoIWlzVVJMU2xhc2goc3BlY1tp
bm5lclBhcnNlZC5wYXRoLmJlZ2luKCldKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IGlu
bmVyUGF0aEVuZCA9IGlubmVyUGFyc2VkLnBhdGguYmVnaW4oKSArIDE7IC8vIHNraXAgdGhlIGxl
YWRpbmcgc2xhc2gKLSAgICB3aGlsZSAoaW5uZXJQYXRoRW5kIDwgc3BlY0xlbmd0aCAmJiAhaXNV
UkxTbGFzaChzcGVjW2lubmVyUGF0aEVuZF0pKQotICAgICAgICArK2lubmVyUGF0aEVuZDsKLSAg
ICBwYXJzZWQucGF0aC5zZXRCZWdpbihpbm5lclBhdGhFbmQpOwotICAgIGludCBuZXdJbm5lclBh
dGhMZW5ndGggPSBpbm5lclBhdGhFbmQgLSBpbm5lclBhcnNlZC5wYXRoLmJlZ2luKCk7Ci0gICAg
cGFyc2VkLnBhdGguc2V0TGVuZ3RoKGlubmVyUGFyc2VkLnBhdGgubGVuZ3RoKCkgLSBuZXdJbm5l
clBhdGhMZW5ndGgpOwotICAgIGlubmVyUGFyc2VkLnBhdGguc2V0TGVuZ3RoKG5ld0lubmVyUGF0
aExlbmd0aCk7Ci0gICAgcGFyc2VkLnNldElubmVyVVJMU2VnbWVudHMoaW5uZXJQYXJzZWQpOwot
fQotCi0vLyBJbml0aWFsaXplcyBhIHBhdGggVVJMIHdoaWNoIGlzIG1lcmVseSBhIHNjaGVtZSBm
b2xsb3dlZCBieSBhIHBhdGguIEV4YW1wbGVzCi0vLyBpbmNsdWRlICJhYm91dDpmb28iIGFuZCAi
amF2YXNjcmlwdDphbGVydCgnYmFyJyk7IgotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4KLXZvaWQgZG9QYXJzZVBhdGhVUkwoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgaW50IHNw
ZWNMZW5ndGgsIFVSTFNlZ21lbnRzJiBwYXJzZWQpCi17Ci0gICAgLy8gR2V0IHRoZSBub24tcGF0
aCBhbmQgbm9uLXNjaGVtZSBwYXJ0cyBvZiB0aGUgVVJMIG91dCBvZiB0aGUgd2F5LCB3ZSBuZXZl
cgotICAgIC8vIHVzZSB0aGVtLgotICAgIHBhcnNlZC51c2VybmFtZS5yZXNldCgpOwotICAgIHBh
cnNlZC5wYXNzd29yZC5yZXNldCgpOwotICAgIHBhcnNlZC5ob3N0LnJlc2V0KCk7Ci0gICAgcGFy
c2VkLnBvcnQucmVzZXQoKTsKLSAgICBwYXJzZWQucXVlcnkucmVzZXQoKTsKLSAgICBwYXJzZWQu
ZnJhZ21lbnQucmVzZXQoKTsKLQotICAgIC8vIFN0cmlwIGxlYWRpbmcgJiB0cmFpbGluZyBzcGFj
ZXMgYW5kIGNvbnRyb2wgY2hhcmFjdGVycy4KLSAgICBpbnQgYmVnaW4gPSAwOwotICAgIHRyaW1V
Ukwoc3BlYywgYmVnaW4sIHNwZWNMZW5ndGgpOwotCi0gICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNz
IG9yIG9uZXMgdGhhdCBjb250YWluIG9ubHkgd2hpdGVzcGFjZSBvciBjb250cm9sIGNoYXJzLgot
ICAgIGlmIChiZWdpbiA9PSBzcGVjTGVuZ3RoKSB7Ci0gICAgICAgIHBhcnNlZC5zY2hlbWUucmVz
ZXQoKTsKLSAgICAgICAgcGFyc2VkLnBhdGgucmVzZXQoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIEV4dHJhY3QgdGhlIHNjaGVtZSwgd2l0aCB0aGUgcGF0aCBiZWluZyBldmVy
eXRoaW5nIGZvbGxvd2luZy4gV2UgYWxzbwotICAgIC8vIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0
aGVyZSBpcyBubyBzY2hlbWUuCi0gICAgaWYgKEV4dHJhY3RTY2hlbWUoJnNwZWNbYmVnaW5dLCBz
cGVjTGVuZ3RoIC0gYmVnaW4sICZwYXJzZWQuc2NoZW1lKSkgewotICAgICAgICAvLyBPZmZzZXQg
dGhlIHJlc3VsdHMgc2luY2Ugd2UgZ2F2ZSBFeHRyYWN0U2NoZW1lIGEgc3Vic3RyaW5nLgotICAg
ICAgICBwYXJzZWQuc2NoZW1lLm1vdmVCeShiZWdpbik7Ci0KLSAgICAgICAgLy8gRm9yIGNvbXBh
dGFiaWxpdHkgd2l0aCB0aGUgc3RhbmRhcmQgVVJMIHBhcnNlciwgd2UgdHJlYXQgbm8gcGF0aCBh
cwotICAgICAgICAvLyAtMSwgcmF0aGVyIHRoYW4gaGF2aW5nIGEgbGVuZ3RoIG9mIDAgKHdlIG5v
cm1hbGx5IHdvdWxkbid0IGNhcmUgc28KLSAgICAgICAgLy8gbXVjaCBmb3IgdGhlc2Ugbm9uLXN0
YW5kYXJkIFVSTHMpLgotICAgICAgICBpZiAocGFyc2VkLnNjaGVtZS5lbmQoKSA9PSBzcGVjTGVu
Z3RoIC0gMSkKLSAgICAgICAgICAgIHBhcnNlZC5wYXRoLnJlc2V0KCk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHBhcnNlZC5wYXRoID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UocGFyc2Vk
LnNjaGVtZS5lbmQoKSArIDEsIHNwZWNMZW5ndGgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8v
IE5vIHNjaGVtZSBmb3VuZCwganVzdCBwYXRoLgotICAgICAgICBwYXJzZWQuc2NoZW1lLnJlc2V0
KCk7Ci0gICAgICAgIHBhcnNlZC5wYXRoID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoYmVnaW4s
IHNwZWNMZW5ndGgpOwotICAgIH0KLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4KLXZvaWQgZG9QYXJzZU1haWx0b1VSTChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBpbnQg
c3BlY0xlbmd0aCwgVVJMU2VnbWVudHMmIHBhcnNlZCkKLXsKLSAgICBBU1NFUlQoc3BlY0xlbmd0
aCA+PSAwKTsKLQotICAgIC8vIEdldCB0aGUgbm9uLXBhdGggYW5kIG5vbi1zY2hlbWUgcGFydHMg
b2YgdGhlIFVSTCBvdXQgb2YgdGhlIHdheSwgd2UgbmV2ZXIKLSAgICAvLyB1c2UgdGhlbS4KLSAg
ICBwYXJzZWQudXNlcm5hbWUucmVzZXQoKTsKLSAgICBwYXJzZWQucGFzc3dvcmQucmVzZXQoKTsK
LSAgICBwYXJzZWQuaG9zdC5yZXNldCgpOwotICAgIHBhcnNlZC5wb3J0LnJlc2V0KCk7Ci0gICAg
cGFyc2VkLmZyYWdtZW50LnJlc2V0KCk7Ci0gICAgcGFyc2VkLnF1ZXJ5LnJlc2V0KCk7IC8vIE1h
eSB1c2UgdGhpczsgcmVzZXQgZm9yIGNvbnZlbmllbmNlLgotCi0gICAgLy8gU3RyaXAgbGVhZGlu
ZyAmIHRyYWlsaW5nIHNwYWNlcyBhbmQgY29udHJvbCBjaGFyYWN0ZXJzLgotICAgIGludCBiZWdp
biA9IDA7Ci0gICAgdHJpbVVSTChzcGVjLCBiZWdpbiwgc3BlY0xlbmd0aCk7Ci0KLSAgICAvLyBI
YW5kbGUgZW1wdHkgc3BlY3Mgb3Igb25lcyB0aGF0IGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlIG9y
IGNvbnRyb2wgY2hhcnMuCi0gICAgaWYgKGJlZ2luID09IHNwZWNMZW5ndGgpIHsKLSAgICAgICAg
cGFyc2VkLnNjaGVtZS5yZXNldCgpOwotICAgICAgICBwYXJzZWQucGF0aC5yZXNldCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW50IHBhdGhCZWdpbiA9IC0xOwotICAgIGludCBw
YXRoRW5kID0gLTE7Ci0KLSAgICAvLyBFeHRyYWN0IHRoZSBzY2hlbWUsIHdpdGggdGhlIHBhdGgg
YmVpbmcgZXZlcnl0aGluZyBmb2xsb3dpbmcuIFdlIGFsc28KLSAgICAvLyBoYW5kbGUgdGhlIGNh
c2Ugd2hlcmUgdGhlcmUgaXMgbm8gc2NoZW1lLgotICAgIGlmIChFeHRyYWN0U2NoZW1lKCZzcGVj
W2JlZ2luXSwgc3BlY0xlbmd0aCAtIGJlZ2luLCAmcGFyc2VkLnNjaGVtZSkpIHsKLSAgICAgICAg
Ly8gT2Zmc2V0IHRoZSByZXN1bHRzIHNpbmNlIHdlIGdhdmUgRXh0cmFjdFNjaGVtZSBhIHN1YnN0
cmluZy4KLSAgICAgICAgcGFyc2VkLnNjaGVtZS5tb3ZlQnkoYmVnaW4pOwotCi0gICAgICAgIGlm
IChwYXJzZWQuc2NoZW1lLmVuZCgpICE9IHNwZWNMZW5ndGggLSAxKSB7Ci0gICAgICAgICAgICBw
YXRoQmVnaW4gPSBwYXJzZWQuc2NoZW1lLmVuZCgpICsgMTsKLSAgICAgICAgICAgIHBhdGhFbmQg
PSBzcGVjTGVuZ3RoOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gTm8gc2No
ZW1lIGZvdW5kLCBqdXN0IHBhdGguCi0gICAgICAgIHBhcnNlZC5zY2hlbWUucmVzZXQoKTsKLSAg
ICAgICAgcGF0aEJlZ2luID0gYmVnaW47Ci0gICAgICAgIHBhdGhFbmQgPSBzcGVjTGVuZ3RoOwot
ICAgIH0KLQotICAgIC8vIFNwbGl0IFtwYXRoQmVnaW4sIHBhdGhFbmQpIGludG8gYSBwYXRoICsg
cXVlcnkuCi0gICAgZm9yIChpbnQgaSA9IHBhdGhCZWdpbjsgaSA8IHBhdGhFbmQ7ICsraSkgewot
ICAgICAgICBpZiAoc3BlY1tpXSA9PSAnPycpIHsKLSAgICAgICAgICAgIHBhcnNlZC5xdWVyeSA9
IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKGkgKyAxLCBwYXRoRW5kKTsKLSAgICAgICAgICAgIHBh
dGhFbmQgPSBpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAv
LyBGb3IgY29tcGF0YWJpbGl0eSB3aXRoIHRoZSBzdGFuZGFyZCBVUkwgcGFyc2VyLCB0cmVhdCBu
byBwYXRoIGFzCi0gICAgLy8gLTEsIHJhdGhlciB0aGFuIGhhdmluZyBhIGxlbmd0aCBvZiAwCi0g
ICAgaWYgKHBhdGhCZWdpbiA9PSBwYXRoRW5kKQotICAgICAgICBwYXJzZWQucGF0aC5yZXNldCgp
OwotICAgIGVsc2UKLSAgICAgICAgcGFyc2VkLnBhdGggPSBVUkxDb21wb25lbnQ6OmZyb21SYW5n
ZShwYXRoQmVnaW4sIHBhdGhFbmQpOwotfQotCi0vLyBDb252ZXJ0cyBhIHBvcnQgbnVtYmVyIGlu
IGEgc3RyaW5nIHRvIGFuIGludGVnZXIuIFdlJ2QgbGlrZSB0byBqdXN0IGNhbGwKLS8vIHNzY2Fu
ZiBidXQgb3VyIGlucHV0IGlzIG5vdCBudWxsLXRlcm1pbmF0ZWQsIHdoaWNoIHNzY2FuZiByZXF1
aXJlcy4gSW5zdGVhZCwKLS8vIHdlIGNvcHkgdGhlIGRpZ2l0cyB0byBhIHNtYWxsIHN0YWNrIGJ1
ZmZlciAoc2luY2Ugd2Uga25vdyB0aGUgbWF4aW11bSBudW1iZXIKLS8vIG9mIGRpZ2l0cyBpbiBh
IHZhbGlkIHBvcnQgbnVtYmVyKSB0aGF0IHdlIGNhbiBudWxsIHRlcm1pbmF0ZS4KLXRlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1pbnQgZG9QYXJzZVBvcnQoY29uc3QgQ2hhcmFjdGVy
VHlwZSogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBjb21wb25lbnQpCi17Ci0gICAgLy8gRWFz
eSBzdWNjZXNzIGNhc2Ugd2hlbiB0aGVyZSBpcyBubyBwb3J0LgotICAgIGNvbnN0IGludCBrTWF4
RGlnaXRzID0gNTsKLSAgICBpZiAoIWNvbXBvbmVudC5pc05vbkVtcHR5KCkpCi0gICAgICAgIHJl
dHVybiBQT1JUX1VOU1BFQ0lGSUVEOwotCi0gICAgLy8gU2tpcCBvdmVyIGFueSBsZWFkaW5nIDBz
LgotICAgIFVSTENvbXBvbmVudCBkaWdpdENvbXBvbmVudChjb21wb25lbnQuZW5kKCksIDApOwot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29tcG9uZW50Lmxlbmd0aCgpOyBpKyspIHsKLSAgICAg
ICAgaWYgKHNwZWNbY29tcG9uZW50LmJlZ2luKCkgKyBpXSAhPSAnMCcpIHsKLSAgICAgICAgICAg
IGRpZ2l0Q29tcG9uZW50ID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoY29tcG9uZW50LmJlZ2lu
KCkgKyBpLCBjb21wb25lbnQuZW5kKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgaWYgKCFkaWdpdENvbXBvbmVudC5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJu
IDA7IC8vIEFsbCBkaWdpdHMgd2VyZSAwLgotCi0gICAgLy8gVmVyaWZ5IHdlIGRvbid0IGhhdmUg
dG9vIG1hbnkgZGlnaXRzICh3ZSdsbCBiZSBjb3B5aW5nIHRvIG91ciBidWZmZXIgc28KLSAgICAv
LyB3ZSBuZWVkIHRvIGRvdWJsZS1jaGVjaykuCi0gICAgaWYgKGRpZ2l0Q29tcG9uZW50Lmxlbmd0
aCgpID4ga01heERpZ2l0cykKLSAgICAgICAgcmV0dXJuIFBPUlRfSU5WQUxJRDsKLQotICAgIC8v
IENvcHkgdmFsaWQgZGlnaXRzIHRvIHRoZSBidWZmZXIuCi0gICAgY2hhciBkaWdpdHNba01heERp
Z2l0cyArIDFdOyAvLyArMSBmb3IgbnVsbCB0ZXJtaW5hdG9yCi0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBkaWdpdENvbXBvbmVudC5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgIENoYXJhY3RlclR5
cGUgY2ggPSBzcGVjW2RpZ2l0Q29tcG9uZW50LmJlZ2luKCkgKyBpXTsKLSAgICAgICAgaWYgKCFp
c0FTQ0lJRGlnaXQoY2gpKSB7Ci0gICAgICAgICAgICAvLyBJbnZhbGlkIHBvcnQgZGlnaXQsIGZh
aWwuCi0gICAgICAgICAgICByZXR1cm4gUE9SVF9JTlZBTElEOwotICAgICAgICB9Ci0gICAgICAg
IGRpZ2l0c1tpXSA9IHN0YXRpY19jYXN0PGNoYXI+KGNoKTsKLSAgICB9Ci0KLSAgICAvLyBOdWxs
LXRlcm1pbmF0ZSB0aGUgc3RyaW5nIGFuZCBjb252ZXJ0IHRvIGludGVnZXIuIFNpbmNlIHdlIGd1
YXJhbnRlZQotICAgIC8vIG9ubHkgZGlnaXRzLCBhdG9pJ3MgbGFjayBvZiBlcnJvciBoYW5kbGlu
ZyBpcyBPSy4KLSAgICBkaWdpdHNbZGlnaXRDb21wb25lbnQubGVuZ3RoKCldID0gMDsKLSAgICBp
bnQgcG9ydCA9IGF0b2koZGlnaXRzKTsKLSAgICBpZiAocG9ydCA+IDY1NTM1KQotICAgICAgICBy
ZXR1cm4gUE9SVF9JTlZBTElEOyAvLyBPdXQgb2YgcmFuZ2UuCi0gICAgcmV0dXJuIHBvcnQ7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci12b2lkIGRvRXh0cmFjdEZpbGVO
YW1lKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0aCwg
VVJMQ29tcG9uZW50JiBmaWxlTmFtZSkKLXsKLSAgICAvLyBIYW5kbGUgZW1wdHkgcGF0aHM6IHRo
ZXkgaGF2ZSBubyBmaWxlIG5hbWVzLgotICAgIGlmICghcGF0aC5pc05vbkVtcHR5KCkpIHsKLSAg
ICAgICAgZmlsZU5hbWUgPSBVUkxDb21wb25lbnQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIFNlYXJjaCBiYWNrd2FyZHMgZm9yIGEgcGFyYW1ldGVyLCB3aGljaCBpcyBhIG5v
cm1hbGx5IHVudXNlZCBmaWVsZCBpbiBhCi0gICAgLy8gVVJMIGRlbGltaXRlZCBieSBhIHNlbWlj
b2xvbi4gV2UgcGFyc2UgdGhlIHBhcmFtZXRlciBhcyBwYXJ0IG9mIHRoZQotICAgIC8vIHBhdGgs
IGJ1dCBoZXJlLCB3ZSBkb24ndCB3YW50IHRvIGNvdW50IGl0LiBUaGUgbGFzdCBzZW1pY29sb24g
aXMgdGhlCi0gICAgLy8gcGFyYW1ldGVyLiBUaGUgcGF0aCBzaG91bGQgc3RhcnQgd2l0aCBhIHNs
YXNoLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrCi0gICAgLy8gdGhlIGZpcnN0IG9uZS4KLSAg
ICBpbnQgZmlsZUVuZCA9IHBhdGguZW5kKCk7Ci0gICAgZm9yIChpbnQgaSA9IHBhdGguZW5kKCkg
LSAxOyBpID4gcGF0aC5iZWdpbigpOyAtLWkpIHsKLSAgICAgICAgaWYgKHNwZWNbaV0gPT0gJzsn
KSB7Ci0gICAgICAgICAgICBmaWxlRW5kID0gaTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgLy8gTm93IHNlYXJjaCBiYWNrd2FyZHMgZnJvbSB0aGUgZmlsZW5h
bWUgZW5kIHRvIHRoZSBwcmV2aW91cyBzbGFzaAotICAgIC8vIHRvIGZpbmQgdGhlIGJlZ2lubmlu
ZyBvZiB0aGUgZmlsZW5hbWUuCi0gICAgZm9yIChpbnQgaSA9IGZpbGVFbmQgLSAxOyBpID49IHBh
dGguYmVnaW4oKTsgLS1pKSB7Ci0gICAgICAgIGlmIChpc1VSTFNsYXNoKHNwZWNbaV0pKSB7Ci0g
ICAgICAgICAgICAvLyBGaWxlIG5hbWUgaXMgZXZlcnl0aGluZyBmb2xsb3dpbmcgdGhpcyBjaGFy
YWN0ZXIgdG8gdGhlIGVuZAotICAgICAgICAgICAgZmlsZU5hbWUgPSBVUkxDb21wb25lbnQ6OmZy
b21SYW5nZShpICsgMSwgZmlsZUVuZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICAvLyBObyBzbGFzaCBmb3VuZCwgdGhpcyBtZWFucyB0aGUgaW5wdXQgd2Fz
IGRlZ2VuZXJhdGUgKGdlbmVyYWxseSBwYXRocwotICAgIC8vIHdpbGwgc3RhcnQgd2l0aCBhIHNs
YXNoKS4gTGV0J3MgY2FsbCBldmVyeXRoaW5nIHRoZSBmaWxlIG5hbWUuCi0gICAgZmlsZU5hbWUg
PSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShwYXRoLmJlZ2luKCksIGZpbGVFbmQpOwotICAgIHJl
dHVybjsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWJvb2wgZG9FeHRy
YWN0UXVlcnlLZXlWYWx1ZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBVUkxDb21wb25lbnQm
IHF1ZXJ5LCBVUkxDb21wb25lbnQmIGtleSwgVVJMQ29tcG9uZW50JiB2YWx1ZSkKLXsKLSAgICBp
ZiAoIXF1ZXJ5LmlzTm9uRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50
IHN0YXJ0ID0gcXVlcnkuYmVnaW4oKTsKLSAgICBpbnQgY3VycmVudCA9IHN0YXJ0OwotICAgIGlu
dCBlbmQgPSBxdWVyeS5lbmQoKTsKLQotICAgIC8vIFdlIGFzc3VtZSB0aGUgYmVnaW5uaW5nIG9m
IHRoZSBpbnB1dCBpcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSAia2V5IiBhbmQgd2UKLSAgICAvLyBz
a2lwIHRvIHRoZSBlbmQgb2YgaXQuCi0gICAga2V5LnNldEJlZ2luKGN1cnJlbnQpOwotICAgIHdo
aWxlIChjdXJyZW50IDwgZW5kICYmIHNwZWNbY3VycmVudF0gIT0gJyYnICYmIHNwZWNbY3VycmVu
dF0gIT0gJz0nKQotICAgICAgICArK2N1cnJlbnQ7Ci0gICAga2V5LnNldExlbmd0aChjdXJyZW50
IC0ga2V5LmJlZ2luKCkpOwotCi0gICAgLy8gU2tpcCB0aGUgc2VwYXJhdG9yIGFmdGVyIHRoZSBr
ZXkgKGlmIGFueSkuCi0gICAgaWYgKGN1cnJlbnQgPCBlbmQgJiYgc3BlY1tjdXJyZW50XSA9PSAn
PScpCi0gICAgICAgICsrY3VycmVudDsKLQotICAgIC8vIEZpbmQgdGhlIHZhbHVlIHBhcnQuCi0g
ICAgdmFsdWUuc2V0QmVnaW4oY3VycmVudCk7Ci0gICAgd2hpbGUgKGN1cnJlbnQgPCBlbmQgJiYg
c3BlY1tjdXJyZW50XSAhPSAnJicpCi0gICAgICAgICsrY3VycmVudDsKLSAgICB2YWx1ZS5zZXRM
ZW5ndGgoY3VycmVudCAtIHZhbHVlLmJlZ2luKCkpOwotCi0gICAgLy8gRmluYWxseSBza2lwIHRo
ZSBuZXh0IHNlcGFyYXRvciBpZiBhbnkKLSAgICBpZiAoY3VycmVudCA8IGVuZCAmJiBzcGVjW2N1
cnJlbnRdID09ICcmJykKLSAgICAgICAgKytjdXJyZW50OwotCi0gICAgLy8gU2F2ZSB0aGUgbmV3
IHF1ZXJ5Ci0gICAgcXVlcnkgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShjdXJyZW50LCBlbmQp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZQotCi1ib29sIEV4dHJhY3RT
Y2hlbWUoY29uc3QgY2hhciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBVUkxDb21wb25lbnQqIHNjaGVt
ZSkKLXsKLSAgICByZXR1cm4gZG9FeHRyYWN0U2NoZW1lKHVybCwgdXJsTGVuZ3RoLCAqc2NoZW1l
KTsKLX0KLQotYm9vbCBFeHRyYWN0U2NoZW1lKGNvbnN0IFVDaGFyKiB1cmwsIGludCB1cmxMZW5n
dGgsIFVSTENvbXBvbmVudCogc2NoZW1lKQotewotICAgIHJldHVybiBkb0V4dHJhY3RTY2hlbWUo
dXJsLCB1cmxMZW5ndGgsICpzY2hlbWUpOwotfQotCi0vLyBUaGlzIGhhbmRsZXMgZXZlcnl0aGlu
ZyB0aGF0IG1heSBiZSBhbiBhdXRob3JpdHkgdGVybWluYXRvciwgaW5jbHVkaW5nCi0vLyBiYWNr
c2xhc2guIEZvciBzcGVjaWFsIGJhY2tzbGFzaCBoYW5kbGluZyBzZWUgRG9QYXJzZUFmdGVyU2No
ZW1lLgotYm9vbCBJc0F1dGhvcml0eVRlcm1pbmF0b3IoVUNoYXIgY2hhcmFjdGVyKQotewotICAg
IHJldHVybiBpc1VSTFNsYXNoKGNoYXJhY3RlcikgfHwgY2hhcmFjdGVyID09ICc/JyB8fCBjaGFy
YWN0ZXIgPT0gJyMnOwotfQotCi12b2lkIEV4dHJhY3RGaWxlTmFtZShjb25zdCBjaGFyKiB1cmws
IGNvbnN0IFVSTENvbXBvbmVudCYgcGF0aCwgVVJMQ29tcG9uZW50KiBmaWxlTmFtZSkKLXsKLSAg
ICBkb0V4dHJhY3RGaWxlTmFtZSh1cmwsIHBhdGgsICpmaWxlTmFtZSk7Ci19Ci0KLXZvaWQgRXh0
cmFjdEZpbGVOYW1lKGNvbnN0IFVDaGFyKiB1cmwsIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0aCwg
VVJMQ29tcG9uZW50KiBmaWxlTmFtZSkKLXsKLSAgICBkb0V4dHJhY3RGaWxlTmFtZSh1cmwsIHBh
dGgsICpmaWxlTmFtZSk7Ci19Ci0KLWJvb2wgRXh0cmFjdFF1ZXJ5S2V5VmFsdWUoY29uc3QgY2hh
ciogdXJsLCBVUkxDb21wb25lbnQqIHF1ZXJ5LCBVUkxDb21wb25lbnQqIGtleSwgVVJMQ29tcG9u
ZW50KiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gZG9FeHRyYWN0UXVlcnlLZXlWYWx1ZSh1cmwsICpx
dWVyeSwgKmtleSwgKnZhbHVlKTsKLX0KLQotYm9vbCBFeHRyYWN0UXVlcnlLZXlWYWx1ZShjb25z
dCBVQ2hhciogdXJsLCBVUkxDb21wb25lbnQqIHF1ZXJ5LCBVUkxDb21wb25lbnQqIGtleSwgIFVS
TENvbXBvbmVudCogdmFsdWUpCi17Ci0gICAgcmV0dXJuIGRvRXh0cmFjdFF1ZXJ5S2V5VmFsdWUo
dXJsLCAqcXVlcnksICprZXksICp2YWx1ZSk7Ci19Ci0KLXZvaWQgUGFyc2VBdXRob3JpdHkoY29u
c3QgY2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBhdXRoLCBVUkxDb21wb25lbnQqIHVz
ZXJuYW1lLCBVUkxDb21wb25lbnQqIHBhc3N3b3JkLCBVUkxDb21wb25lbnQqIGhvc3RuYW1lLCBV
UkxDb21wb25lbnQqIHBvcnROdW1iZXIpCi17Ci0gICAgZG9QYXJzZUF1dGhvcml0eShzcGVjLCBh
dXRoLCAqdXNlcm5hbWUsICpwYXNzd29yZCwgKmhvc3RuYW1lLCAqcG9ydE51bWJlcik7Ci19Ci0K
LXZvaWQgUGFyc2VBdXRob3JpdHkoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVu
dCYgYXV0aCwgVVJMQ29tcG9uZW50KiB1c2VybmFtZSwgVVJMQ29tcG9uZW50KiBwYXNzd29yZCwg
VVJMQ29tcG9uZW50KiBob3N0bmFtZSwgVVJMQ29tcG9uZW50KiBwb3J0TnVtYmVyKQotewotICAg
IGRvUGFyc2VBdXRob3JpdHkoc3BlYywgYXV0aCwgKnVzZXJuYW1lLCAqcGFzc3dvcmQsICpob3N0
bmFtZSwgKnBvcnROdW1iZXIpOwotfQotCi1pbnQgUGFyc2VQb3J0KGNvbnN0IGNoYXIqIHVybCwg
Y29uc3QgVVJMQ29tcG9uZW50JiBwb3J0KQotewotICAgIHJldHVybiBkb1BhcnNlUG9ydCh1cmws
IHBvcnQpOwotfQotCi1pbnQgUGFyc2VQb3J0KGNvbnN0IFVDaGFyKiB1cmwsIGNvbnN0IFVSTENv
bXBvbmVudCYgcG9ydCkKLXsKLSAgICByZXR1cm4gZG9QYXJzZVBvcnQodXJsLCBwb3J0KTsKLX0K
LQotdm9pZCBQYXJzZVN0YW5kYXJkVVJMKGNvbnN0IGNoYXIqIHVybCwgaW50IHVybExlbmd0aCwg
VVJMU2VnbWVudHMqIHBhcnNlZCkKLXsKLSAgICBkb1BhcnNlU3RhbmRhcmRVUkwodXJsLCB1cmxM
ZW5ndGgsICpwYXJzZWQpOwotfQotCi12b2lkIFBhcnNlU3RhbmRhcmRVUkwoY29uc3QgVUNoYXIq
IHVybCwgaW50IHVybExlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCkKLXsKLSAgICBkb1BhcnNl
U3RhbmRhcmRVUkwodXJsLCB1cmxMZW5ndGgsICpwYXJzZWQpOwotfQotCi12b2lkIFBhcnNlUGF0
aFVSTChjb25zdCBjaGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQp
Ci17Ci0gICAgZG9QYXJzZVBhdGhVUkwodXJsLCB1cmxMZW5ndGgsICpwYXJzZWQpOwotfQotCi12
b2lkIFBhcnNlUGF0aFVSTChjb25zdCBVQ2hhciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBVUkxTZWdt
ZW50cyogcGFyc2VkKQotewotICAgIGRvUGFyc2VQYXRoVVJMKHVybCwgdXJsTGVuZ3RoLCAqcGFy
c2VkKTsKLX0KLQotdm9pZCBQYXJzZUZpbGVTeXN0ZW1VUkwoY29uc3QgY2hhciogdXJsLCBpbnQg
dXJsTGVuZ3RoLCBVUkxTZWdtZW50cyogcGFyc2VkKQotewotICAgIGRvUGFyc2VGaWxlU3lzdGVt
VVJMKHVybCwgdXJsTGVuZ3RoLCAqcGFyc2VkKTsKLX0KLQotdm9pZCBQYXJzZUZpbGVTeXN0ZW1V
UkwoY29uc3QgVUNoYXIqIHVybCwgaW50IHVybExlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCkK
LXsKLSAgICBkb1BhcnNlRmlsZVN5c3RlbVVSTCh1cmwsIHVybExlbmd0aCwgKnBhcnNlZCk7Ci19
Ci0KLXZvaWQgUGFyc2VNYWlsdG9VUkwoY29uc3QgY2hhciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBV
UkxTZWdtZW50cyogcGFyc2VkKQotewotICAgIGRvUGFyc2VNYWlsdG9VUkwodXJsLCB1cmxMZW5n
dGgsICpwYXJzZWQpOwotfQotCi12b2lkIFBhcnNlTWFpbHRvVVJMKGNvbnN0IFVDaGFyKiB1cmws
IGludCB1cmxMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQpCi17Ci0gICAgZG9QYXJzZU1haWx0
b1VSTCh1cmwsIHVybExlbmd0aCwgKnBhcnNlZCk7Ci19Ci0KLXZvaWQgcGFyc2VQYXRoSW50ZXJu
YWwoY29uc3QgY2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLCBVUkxDb21wb25l
bnQqIGZpbGVwYXRoLCBVUkxDb21wb25lbnQqIHF1ZXJ5LCBVUkxDb21wb25lbnQqIGZyYWdtZW50
KQotewotICAgIHBhcnNlUGF0aChzcGVjLCBwYXRoLCAqZmlsZXBhdGgsICpxdWVyeSwgKmZyYWdt
ZW50KTsKLX0KLQotdm9pZCBwYXJzZVBhdGhJbnRlcm5hbChjb25zdCBVQ2hhciogc3BlYywgY29u
c3QgVVJMQ29tcG9uZW50JiBwYXRoLCBVUkxDb21wb25lbnQqIGZpbGVwYXRoLCBVUkxDb21wb25l
bnQqIHF1ZXJ5LCBVUkxDb21wb25lbnQqIGZyYWdtZW50KQotewotICAgIHBhcnNlUGF0aChzcGVj
LCBwYXRoLCAqZmlsZXBhdGgsICpxdWVyeSwgKmZyYWdtZW50KTsKLX0KLQotdm9pZCBwYXJzZUFm
dGVyU2NoZW1lKGNvbnN0IGNoYXIqIHNwZWMsIGludCBzcGVjTGVuZ3RoLCBpbnQgYWZ0ZXJTY2hl
bWUsIFVSTFNlZ21lbnRzJiBwYXJzZWQpCi17Ci0gICAgZG9QYXJzZUFmdGVyU2NoZW1lKHNwZWMs
IHNwZWNMZW5ndGgsIGFmdGVyU2NoZW1lLCBwYXJzZWQpOwotfQotCi12b2lkIHBhcnNlQWZ0ZXJT
Y2hlbWUoY29uc3QgVUNoYXIqIHNwZWMsIGludCBzcGVjTGVuZ3RoLCBpbnQgYWZ0ZXJTY2hlbWUs
IFVSTFNlZ21lbnRzJiBwYXJzZWQpCi17Ci0gICAgZG9QYXJzZUFmdGVyU2NoZW1lKHNwZWMsIHNw
ZWNMZW5ndGgsIGFmdGVyU2NoZW1lLCBwYXJzZWQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBVUkxQ
YXJzZXIKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxQYXJzZS5oIGIvU291cmNlL1dURi93
dGYvdXJsL3NyYy9VUkxQYXJzZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTdi
MTBhOTE4OTIxODIxMjM2MDNlMjZlYzk5NTk0ZTZkZGYzNDE0Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMUGFy
c2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIw
MDcgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFVSTFBhcnNlX2gKLSNkZWZpbmUgVVJM
UGFyc2VfaAotCi0jaW5jbHVkZSAiVVJMQ29tcG9uZW50LmgiCi0jaW5jbHVkZSAiVVJMU2VnbWVu
dHMuaCIKLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+Ci0KLSNpZiBVU0UoV1RGVVJM
KQotCi1uYW1lc3BhY2UgV1RGIHsKLQotbmFtZXNwYWNlIFVSTFBhcnNlciB7Ci0KLS8vIEluaXRp
YWxpemF0aW9uIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLS8vCi0vLyBUaGVzZSBmdW5jdGlvbnMgcGFyc2UgdGhlIGdpdmVuIFVS
TCwgZmlsbGluZyBpbiBhbGwgb2YgdGhlIHN0cnVjdHVyZSdzCi0vLyBjb21wb25lbnRzLiBUaGVz
ZSBmdW5jdGlvbnMgY2FuIG5vdCBmYWlsLCB0aGV5IHdpbGwgYWx3YXlzIGRvIHRoZWlyIGJlc3QK
LS8vIGF0IGludGVycHJldGluZyB0aGUgaW5wdXQgZ2l2ZW4uCi0vLwotLy8gVGhlIHN0cmluZyBs
ZW5ndGggb2YgdGhlIFVSTCBNVVNUIGJlIHNwZWNpZmllZCwgd2UgZG8gbm90IGNoZWNrIGZvciBO
VUxMcwotLy8gYXQgYW55IHBvaW50IGluIHRoZSBwcm9jZXNzLCBhbmQgd2lsbCBhY3R1YWxseSBo
YW5kbGUgZW1iZWRkZWQgTlVMTHMuCi0vLwotLy8gSU1QT1JUQU5UOiBUaGVzZSBmdW5jdGlvbnMg
ZG8gTk9UIGhhbmcgb24gdG8gdGhlIGdpdmVuIHBvaW50ZXIgb3IgY29weSBpdAotLy8gaW4gYW55
IHdheS4gU2VlIHRoZSBjb21tZW50IGFib3ZlIHRoZSBzdHJ1Y3QuCi0vLwotLy8gVGhlIDgtYml0
IHZlcnNpb25zIHJlcXVpcmUgVVRGLTggZW5jb2RpbmcuCi0KLS8vIFN0YW5kYXJkVVJMIGlzIGZv
ciB3aGVuIHRoZSBzY2hlbWUgaXMga25vd24gdG8gYmUgb25lIHRoYXQgaGFzIGFuCi0vLyBhdXRo
b3JpdHkgKGhvc3QpIGxpa2UgImh0dHAiLiBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IGhhbmRsZSB3
ZWlyZCBvbmVzCi0vLyBsaWtlICJhYm91dDoiIGFuZCAiamF2YXNjcmlwdDoiLCBvciBkbyB0aGUg
cmlnaHQgdGhpbmcgZm9yICJmaWxlOiIgVVJMcy4KLXZvaWQgUGFyc2VTdGFuZGFyZFVSTChjb25z
dCBjaGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQpOwotdm9pZCBQ
YXJzZVN0YW5kYXJkVVJMKGNvbnN0IFVDaGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVSTFNlZ21l
bnRzKiBwYXJzZWQpOwotCi0vLyBQYXRoVVJMIGlzIGZvciB3aGVuIHRoZSBzY2hlbWUgaXMga25v
d24gbm90IHRvIGhhdmUgYW4gYXV0aG9yaXR5IChob3N0KQotLy8gc2VjdGlvbiBidXQgdGhhdCBh
cmVuJ3QgZmlsZSBVUkxzIGVpdGhlci4gVGhlIHNjaGVtZSBpcyBwYXJzZWQsIGFuZAotLy8gZXZl
cnl0aGluZyBhZnRlciB0aGUgc2NoZW1lIGlzIGNvbnNpZGVyZWQgYXMgdGhlIHBhdGguIFRoaXMg
aXMgdXNlZCBmb3IKLS8vIHRoaW5ncyBsaWtlICJhYm91dDoiIGFuZCAiamF2YXNjcmlwdDoiCi12
b2lkIFBhcnNlUGF0aFVSTChjb25zdCBjaGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVSTFNlZ21l
bnRzKiBwYXJzZWQpOwotdm9pZCBQYXJzZVBhdGhVUkwoY29uc3QgVUNoYXIqIHVybCwgaW50IHVy
bExlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCk7Ci0KLS8vIEZpbGVVUkwgaXMgZm9yIGZpbGUg
VVJMcy4gVGhlcmUgYXJlIHNvbWUgc3BlY2lhbCBydWxlcyBmb3IgaW50ZXJwcmV0aW5nCi0vLyB0
aGVzZS4KLXZvaWQgUGFyc2VGaWxlVVJMKGNvbnN0IGNoYXIqIHVybCwgaW50IHVybExlbmd0aCwg
VVJMU2VnbWVudHMqIHBhcnNlZCk7Ci12b2lkIFBhcnNlRmlsZVVSTChjb25zdCBVQ2hhciogdXJs
LCBpbnQgdXJsTGVuZ3RoLCBVUkxTZWdtZW50cyogcGFyc2VkKTsKLQotLy8gRmlsZXN5c3RlbSBV
UkxzIGFyZSBzdHJ1Y3R1cmVkIGRpZmZlcmVudGx5IHRoYW4gb3RoZXIgVVJMcy4KLXZvaWQgUGFy
c2VGaWxlU3lzdGVtVVJMKGNvbnN0IGNoYXIqIHVybCwgaW50IHVybExlbmd0aCwgVVJMU2VnbWVu
dHMqIHBhcnNlZCk7Ci12b2lkIFBhcnNlRmlsZVN5c3RlbVVSTChjb25zdCBVQ2hhciogdXJsLCBp
bnQgdXJsTGVuZ3RoLCBVUkxTZWdtZW50cyogcGFyc2VkKTsKLQotLy8gTWFpbHRvVVJMIGlzIGZv
ciBtYWlsdG86IHVybHMuIFRoZXkgYXJlIG1hZGUgdXAgc2NoZW1lLHBhdGgscXVlcnkKLXZvaWQg
UGFyc2VNYWlsdG9VUkwoY29uc3QgY2hhciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBVUkxTZWdtZW50
cyogcGFyc2VkKTsKLXZvaWQgUGFyc2VNYWlsdG9VUkwoY29uc3QgVUNoYXIqIHVybCwgaW50IHVy
bExlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCk7Ci0KLS8vIEhlbHBlciBmdW5jdGlvbnMgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotLy8gTG9jYXRlcyB0aGUgc2NoZW1lIGFjY29yZGluZyB0byB0aGUgVVJMICBwYXJzZXIncyBy
dWxlcy4gVGhpcyBmdW5jdGlvbiBpcwotLy8gZGVzaWduZWQgc28gdGhlIGNhbGxlciBjYW4gZmlu
ZCB0aGUgc2NoZW1lIGFuZCBjYWxsIHRoZSBjb3JyZWN0IEluaXQqCi0vLyBmdW5jdGlvbiBhY2Nv
cmRpbmcgdG8gdGhlaXIga25vd24gc2NoZW1lIHR5cGVzLgotLy8KLS8vIEl0IGFsc28gZG9lcyBu
b3QgcGVyZm9ybSBhbnkgdmFsaWRhdGlvbiBvbiB0aGUgc2NoZW1lLgotLy8KLS8vIFRoaXMgZnVu
Y3Rpb24gd2lsbCByZXR1cm4gdHJ1ZSBpZiB0aGUgc2NoZW1lIGlzIGZvdW5kIGFuZCB3aWxsIHB1
dCB0aGUKLS8vIHNjaGVtZSdzIHJhbmdlIGludG8gKnNjaGVtZS4gRmFsc2UgbWVhbnMgbm8gc2No
ZW1lIGNvdWxkIGJlIGZvdW5kLiBOb3RlCi0vLyB0aGF0IGEgVVJMIGJlZ2lubmluZyB3aXRoIGEg
Y29sb24gaGFzIGEgc2NoZW1lLCBidXQgaXQgaXMgZW1wdHksIHNvIHRoaXMKLS8vIGZ1bmN0aW9u
IHdpbGwgcmV0dXJuIHRydWUgYnV0ICpzY2hlbWUgd2lsbCA9ICgwLDApLgotLy8KLS8vIFRoZSBz
Y2hlbWUgaXMgZm91bmQgYnkgc2tpcHBpbmcgc3BhY2VzIGFuZCBjb250cm9sIGNoYXJhY3RlcnMg
YXQgdGhlCi0vLyBiZWdpbm5pbmcsIGFuZCB0YWtpbmcgZXZlcnl0aGluZyBmcm9tIHRoZXJlIHRv
IHRoZSBmaXJzdCBjb2xvbiB0byBiZSB0aGUKLS8vIHNjaGVtZS4gVGhlIGNoYXJhY3RlciBhdCBz
Y2hlbWUuZW5kKCkgd2lsbCBiZSB0aGUgY29sb24gKHdlIG1heSBlbmhhbmNlCi0vLyB0aGlzIHRv
IGhhbmRsZSBmdWxsIHdpZHRoIGNvbG9ucyBvciBzb21ldGhpbmcsIHNvIGRvbid0IGNvdW50IG9u
IHRoZQotLy8gYWN0dWFsIGNoYXJhY3RlciB2YWx1ZSkuIFRoZSBjaGFyYWN0ZXIgYXQgc2NoZW1l
LmVuZCgpKzEgd2lsbCBiZSB0aGUKLS8vIGJlZ2lubmluZyBvZiB0aGUgcmVzdCBvZiB0aGUgVVJM
LCBiZSBpdCB0aGUgYXV0aG9yaXR5IG9yIHRoZSBwYXRoIChvciB0aGUKLS8vIGVuZCBvZiB0aGUg
c3RyaW5nKS4KLS8vCi0vLyBUaGUgOC1iaXQgdmVyc2lvbiByZXF1aXJlcyBVVEYtOCBlbmNvZGlu
Zy4KLWJvb2wgRXh0cmFjdFNjaGVtZShjb25zdCBjaGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVS
TENvbXBvbmVudCogc2NoZW1lKTsKLWJvb2wgRXh0cmFjdFNjaGVtZShjb25zdCBVQ2hhciogdXJs
LCBpbnQgdXJsTGVuZ3RoLCBVUkxDb21wb25lbnQqIHNjaGVtZSk7Ci0KLS8vIFJldHVybnMgdHJ1
ZSBpZiBjaCBpcyBhIGNoYXJhY3RlciB0aGF0IHRlcm1pbmF0ZXMgdGhlIGF1dGhvcml0eSBzZWdt
ZW50IG9mIGEgVVJMLgotYm9vbCBJc0F1dGhvcml0eVRlcm1pbmF0b3IoVUNoYXIpOwotCi0vLyBE
b2VzIGEgYmVzdCBlZmZvcnQgcGFyc2Ugb2YgaW5wdXQgfHNwZWN8LCBpbiByYW5nZSB8YXV0aHwu
IElmIGEgcGFydGljdWxhcgotLy8gY29tcG9uZW50IGlzIG5vdCBmb3VuZCwgaXQgd2lsbCBiZSBz
ZXQgdG8gaW52YWxpZC4KLXZvaWQgUGFyc2VBdXRob3JpdHkoY29uc3QgY2hhciogc3BlYywgY29u
c3QgVVJMQ29tcG9uZW50JiBhdXRoLAotICAgICAgICAgICAgICAgICAgICBVUkxDb21wb25lbnQq
IHVzZXJuYW1lLCBVUkxDb21wb25lbnQqIHBhc3N3b3JkLCBVUkxDb21wb25lbnQqIGhvc3RuYW1l
LCBVUkxDb21wb25lbnQqIHBvcnROdW1iZXIpOwotdm9pZCBQYXJzZUF1dGhvcml0eShjb25zdCBV
Q2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBhdXRoLAotICAgICAgICAgICAgICAgICAg
ICBVUkxDb21wb25lbnQqIHVzZXJuYW1lLCBVUkxDb21wb25lbnQqIHBhc3N3b3JkLCBVUkxDb21w
b25lbnQqIGhvc3RuYW1lLCBVUkxDb21wb25lbnQqIHBvcnROdW1iZXIpOwotCi0vLyBDb21wdXRl
cyB0aGUgaW50ZWdlciBwb3J0IHZhbHVlIGZyb20gdGhlIGdpdmVuIHBvcnQgY29tcG9uZW50LiBU
aGUgcG9ydAotLy8gY29tcG9uZW50IHNob3VsZCBoYXZlIGJlZW4gaWRlbnRpZmllZCBieSBvbmUg
b2YgdGhlIGluaXQgZnVuY3Rpb25zIG9uCi0vLyB8UGFyc2VkfCBmb3IgdGhlIGdpdmVuIGlucHV0
IHVybC4KLS8vCi0vLyBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgYSBwb3NpdGl2ZSBpbnRlZ2Vy
IGJldHdlZW4gMCBhbmQgNjRLLCBvciBvbmUgb2YKLS8vIHRoZSB0d28gc3BlY2lhbCB2YWx1ZXMg
YmVsb3cuCi1lbnVtIFNwZWNpYWxQb3J0IHsgUE9SVF9VTlNQRUNJRklFRCA9IC0xLCBQT1JUX0lO
VkFMSUQgPSAtMiB9OwotaW50IFBhcnNlUG9ydChjb25zdCBjaGFyKiB1cmwsIGNvbnN0IFVSTENv
bXBvbmVudCYgcG9ydCk7Ci1pbnQgUGFyc2VQb3J0KGNvbnN0IFVDaGFyKiB1cmwsIGNvbnN0IFVS
TENvbXBvbmVudCYgcG9ydCk7Ci0KLS8vIEV4dHJhY3RzIHRoZSByYW5nZSBvZiB0aGUgZmlsZSBu
YW1lIGluIHRoZSBnaXZlbiB1cmwuIFRoZSBwYXRoIG11c3QKLS8vIGFscmVhZHkgaGF2ZSBiZWVu
IGNvbXB1dGVkIGJ5IHRoZSBwYXJzZSBmdW5jdGlvbiwgYW5kIHRoZSBtYXRjaGluZyBVUkwKLS8v
IGFuZCBleHRyYWN0ZWQgcGF0aCBhcmUgcHJvdmlkZWQgdG8gdGhpcyBmdW5jdGlvbi4gVGhlIGZp
bGVuYW1lIGlzCi0vLyBkZWZpbmVkIGFzIGJlaW5nIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgbGFzdCBz
bGFzaC9iYWNrc2xhc2ggb2YgdGhlIHBhdGgKLS8vIHRvIHRoZSBlbmQgb2YgdGhlIHBhdGguCi0v
LwotLy8gVGhlIGZpbGUgbmFtZSB3aWxsIGJlIGVtcHR5IGlmIHRoZSBwYXRoIGlzIGVtcHR5IG9y
IHRoZXJlIGlzIG5vdGhpbmcKLS8vIGZvbGxvd2luZyB0aGUgbGFzdCBzbGFzaC4KLS8vCi0vLyBU
aGUgOC1iaXQgdmVyc2lvbiByZXF1aXJlcyBVVEYtOCBlbmNvZGluZy4KLXZvaWQgRXh0cmFjdEZp
bGVOYW1lKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLCBVUkxDb21w
b25lbnQqIGZpbGVOYW1lKTsKLXZvaWQgRXh0cmFjdEZpbGVOYW1lKGNvbnN0IFVDaGFyKiB1cmws
IGNvbnN0IFVSTENvbXBvbmVudCYgcGF0aCwgVVJMQ29tcG9uZW50KiBmaWxlTmFtZSk7Ci0KLS8v
IEV4dHJhY3QgdGhlIGZpcnN0IGtleS92YWx1ZSBmcm9tIHRoZSByYW5nZSBkZWZpbmVkIGJ5IHwq
cXVlcnl8LiBVcGRhdGVzCi0vLyB8KnF1ZXJ5fCB0byBzdGFydCBhdCB0aGUgZW5kIG9mIHRoZSBl
eHRyYWN0ZWQga2V5L3ZhbHVlIHBhaXIuIFRoaXMgaXMKLS8vIGRlc2lnbmVkIGZvciB1c2UgaW4g
YSBsb29wOiB5b3UgY2FuIGtlZXAgY2FsbGluZyBpdCB3aXRoIHRoZSBzYW1lIHF1ZXJ5Ci0vLyBv
YmplY3QgYW5kIGl0IHdpbGwgaXRlcmF0ZSBvdmVyIGFsbCBpdGVtcyBpbiB0aGUgcXVlcnkuCi0v
LwotLy8gU29tZSBrZXkvdmFsdWUgcGFpcnMgbWF5IGhhdmUgdGhlIGtleSwgdGhlIHZhbHVlLCBv
ciBib3RoIGJlIGVtcHR5IChmb3IKLS8vIGV4YW1wbGUsIHRoZSBxdWVyeSBzdHJpbmcgIj8mIiku
IFRoZXNlIHdpbGwgYmUgcmV0dXJuZWQuIE5vdGUgdGhhdCBhbiBlbXB0eQotLy8gbGFzdCBwYXJh
bWV0ZXIgImZvby5jb20/IiBvciBmb28uY29tP2EmIiB3aWxsIG5vdCBiZSByZXR1cm5lZCwgdGhp
cyBjYXNlCi0vLyBpcyB0aGUgc2FtZSBhcyAiZG9uZS4iCi0vLwotLy8gVGhlIGluaXRpYWwgcXVl
cnkgY29tcG9uZW50IHNob3VsZCBub3QgaW5jbHVkZSB0aGUgJz8nICh0aGlzIGlzIHRoZSBkZWZh
dWx0Ci0vLyBmb3IgcGFyc2VkIFVSTHMpLgotLy8KLS8vIElmIG5vIGtleS92YWx1ZSBhcmUgZm91
bmQgfCprZXl8IGFuZCB8KnZhbHVlfCB3aWxsIGJlIHVuY2hhbmdlZCBhbmQgaXQgd2lsbAotLy8g
cmV0dXJuIGZhbHNlLgotYm9vbCBFeHRyYWN0UXVlcnlLZXlWYWx1ZShjb25zdCBjaGFyKiB1cmws
IFVSTENvbXBvbmVudCogcXVlcnksIFVSTENvbXBvbmVudCoga2V5LCBVUkxDb21wb25lbnQqIHZh
bHVlKTsKLWJvb2wgRXh0cmFjdFF1ZXJ5S2V5VmFsdWUoY29uc3QgVUNoYXIqIHVybCwgVVJMQ29t
cG9uZW50KiBxdWVyeSwgVVJMQ29tcG9uZW50KiBrZXksIFVSTENvbXBvbmVudCogdmFsdWUpOwot
Ci19IC8vIG5hbWVzcGFjZSBVUkxQYXJzZXIKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRp
ZiAvLyBVU0UoV1RGVVJMKQotCi0jZW5kaWYgLy8gVVJMUGFyc2VfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvdXJsL3NyYy9VUkxQYXJzZUZpbGUuY3BwIGIvU291cmNlL1dURi93dGYvdXJs
L3NyYy9VUkxQYXJzZUZpbGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTE4
MjE5OTFmNjc5MmE4YjNiNmNkZjdjNzEyMDdjZmQ0ZGViYWQxLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMUGFy
c2VGaWxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI1MSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IDIwMDcgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiVVJMUGFyc2UuaCIKLQotI2luY2x1ZGUgIlVSTEZpbGUuaCIKLSNpbmNsdWRlICJVUkxQ
YXJzZUludGVybmFsLmgiCi0KLS8vIEludGVyZXN0aW5nIElFIGZpbGU6aXNtcy4uLgotLy8KLS8v
ICBJTlBVVCAgICAgICAgICAgICAgICAgICAgICBPVVRQVVQKLS8vICA9PT09PT09PT09PT09PT09
PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vICBmaWxlOi9mb28v
YmFyICAgICAgICAgICAgICBmaWxlOi8vL2Zvby9iYXIKLS8vICAgICAgVGhlIHJlc3VsdCBoZXJl
IHNlZW1zIHRvdGFsbHkgaW52YWxpZCE/IT8gVGhpcyBpc24ndCBVTkMuCi0vLwotLy8gIGZpbGU6
LwotLy8gIGZpbGU6Ly8gb3IgYW55IG90aGVyIG51bWJlciBvZiBzbGFzaGVzCi0vLyAgICAgIElF
NiBkb2Vzbid0IGRvIGFueXRoaW5nIGF0IGFsbCBpZiB5b3UgY2xpY2sgb24gdGhpcyBsaW5rLiBO
byBlcnJvcjoKLS8vICAgICAgbm90aGluZy4gSUU2J3MgaGlzdG9yeSBzeXN0ZW0gc2VlbXMgdG8g
YWx3YXlzIGNvbG9yIHRoaXMgbGluaywgc28gSSdtCi0vLyAgICAgIGd1ZXNzaW5nIHRoYXQgaXQg
bWFwcyBpbnRlcm5hbGx5IHRvIHRoZSBlbXB0eSBVUkwuCi0vLwotLy8gIEM6XCAgICAgICAgICAg
ICAgICAgICAgICAgIGZpbGU6Ly8vQzovCi0vLyAgICAgIFdoZW4gb24gYSBmaWxlOiBVUkwgc291
cmNlIHBhZ2UsIHRoaXMgbGluayB3aWxsIHdvcmsuIFdoZW4gb3ZlciBIVFRQLAotLy8gICAgICB0
aGUgZmlsZTogVVJMIHdpbGwgYXBwZWFyIGluIHRoZSBzdGF0dXMgYmFyIGJ1dCB0aGUgbGluayB3
aWxsIG5vdCB3b3JrCi0vLyAgICAgIChzZWN1cml0eSByZXN0cmljdGlvbiBmb3IgYWxsIGZpbGUg
VVJMcykuCi0vLwotLy8gIGZpbGU6Zm9vLyAgICAgICAgICAgICAgICAgIGZpbGU6Zm9vLyAgICAg
KGludmFsaWQ/IT8hPykKLS8vICBmaWxlOi9mb28vICAgICAgICAgICAgICAgICBmaWxlOi8vL2Zv
by8gIChpbnZhbGlkPyE/IT8pCi0vLyAgZmlsZTovL2Zvby8gICAgICAgICAgICAgICAgZmlsZTov
L2Zvby8gICAoVU5DIHRvIHNlcnZlciAiZm9vIikKLS8vICBmaWxlOi8vL2Zvby8gICAgICAgICAg
ICAgICBmaWxlOi8vL2Zvby8gIChpbnZhbGlkLCBzZWVtcyB0byBiZSBhIGZpbGUpCi0vLyAgZmls
ZTovLy8vZm9vLyAgICAgICAgICAgICAgZmlsZTovL2Zvby8gICAoVU5DIHRvIHNlcnZlciAiZm9v
IikKLS8vICAgICAgQW55IG1vcmUgdGhhbiBmb3VyIHNsYXNoZXMgaXMgYWxzbyB0cmVhdGVkIGFz
IFVOQy4KLS8vCi0vLyAgZmlsZTpDOi8gICAgICAgICAgICAgICAgICAgZmlsZTovL0M6LwotLy8g
IGZpbGU6L0M6LyAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DOi8KLS8vICAgICAgVGhlIG51bWJl
ciBvZiBzbGFzaGVzIGFmdGVyICJmaWxlOiIgZG9uJ3QgbWF0dGVyIGlmIHRoZSB0aGluZyBmb2xs
b3dpbmcKLS8vICAgICAgaXQgbG9va3MgbGlrZSBhbiBhYnNvbHV0ZSBkcml2ZSBwYXRoLiBBbHNv
LCBzbGFzaGVzIGFuZCBiYWNrc2xhc2hlcyBhcmUKLS8vICAgICAgZXF1YWxseSB2YWxpZCBoZXJl
LgotCi0jaWYgVVNFKFdURlVSTCkKLQotbmFtZXNwYWNlIFdURiB7Ci0KLW5hbWVzcGFjZSBVUkxQ
YXJzZXIgewotCi1uYW1lc3BhY2UgewotCi0vLyBBIHN1YmNvbXBvbmVudCBvZiBEb0luaXRGaWxl
VVJMLCB0aGUgaW5wdXQgb2YgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgYSBVTkMKLS8vIHBhdGgg
bmFtZSwgd2l0aCB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgc2xh
c2hlcyBmb2xsb3dpbmcKLS8vIHRoZSBzY2hlbWUgZ2l2ZW4gaW4gfGFmdGVyU2xhc2hlc3wuIFRo
aXMgd2lsbCBpbml0aWFsaXplIHRoZSBob3N0LCBwYXRoLAotLy8gcXVlcnksIGFuZCByZWYsIGFu
ZCBsZWF2ZSB0aGUgb3RoZXIgb3V0cHV0IGNvbXBvbmVudHMgdW50b3VjaGVkCi0vLyAoRG9Jbml0
RmlsZVVSTCBoYW5kbGVzIHRoZXNlIGZvciB1cykuCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPgotdm9pZCBkb1BhcnNlVU5DKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGludCBh
ZnRlclNsYXNoZXMsIGludCBzcGVjTGVuZ3RoLCBVUkxTZWdtZW50cyYgcGFyc2VkKQotewotICAg
IGludCBuZXh0U2xhc2ggPSBmaW5kTmV4dFNsYXNoKHNwZWMsIGFmdGVyU2xhc2hlcywgc3BlY0xl
bmd0aCk7Ci0gICAgaWYgKG5leHRTbGFzaCA9PSBzcGVjTGVuZ3RoKSB7Ci0gICAgICAgIC8vIE5v
IGFkZGl0aW9uYWwgc2xhc2ggZm91bmQsIGFzIGluICJmaWxlOi8vZm9vIiwgdHJlYXQgdGhlIHRl
eHQgYXMgdGhlCi0gICAgICAgIC8vIGhvc3Qgd2l0aCBubyBwYXRoICh0aGlzIHdpbGwgZW5kIHVw
IGJlaW5nIFVOQyB0byBzZXJ2ZXIgImZvbyIpLgotICAgICAgICBpbnQgaG9zdExlbmd0aCA9IHNw
ZWNMZW5ndGggLSBhZnRlclNsYXNoZXM7Ci0gICAgICAgIGlmIChob3N0TGVuZ3RoKQotICAgICAg
ICAgICAgcGFyc2VkLmhvc3QgPSBVUkxDb21wb25lbnQoYWZ0ZXJTbGFzaGVzLCBob3N0TGVuZ3Ro
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcGFyc2VkLmhvc3QucmVzZXQoKTsKLSAgICAg
ICAgcGFyc2VkLnBhdGgucmVzZXQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIE9T
KFdJTkRPV1MpCi0gICAgLy8gU2VlIGlmIHdlIGhhdmUgc29tZXRoaW5nIHRoYXQgbG9va3MgbGlr
ZSBhIHBhdGggZm9sbG93aW5nIHRoZSBmaXJzdAotICAgIC8vIGNvbXBvbmVudC4gQXMgaW4gImZp
bGU6Ly9sb2NhbGhvc3QvYzovIiwgd2UgZ2V0ICJjOi8iIG91dC4gV2Ugd2FudCB0bwotICAgIC8v
IHRyZWF0IHRoaXMgYXMgYSBoYXZpbmcgbm8gaG9zdCBidXQgdGhlIHBhdGggZ2l2ZW4uIFdvcmtz
IG9uIFdpbmRvd3Mgb25seS4KLSAgICBpZiAoZG9lc0JlZ2luV2luZG93c0RyaXZlU3BlYyhzcGVj
LCBuZXh0U2xhc2ggKyAxLCBzcGVjTGVuZ3RoKSkgewotICAgICAgICBwYXJzZWQuaG9zdC5yZXNl
dCgpOwotICAgICAgICBwYXJzZVBhdGhJbnRlcm5hbChzcGVjLCBNYWtlUmFuZ2UobmV4dFNsYXNo
LCBzcGVjTGVuZ3RoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcnNlZC5wYXRoLCAm
cGFyc2VkLnF1ZXJ5LCAmcGFyc2VkLnJlZik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5k
aWYKLQotICAgIC8vIE90aGVyd2lzZSwgZXZlcnl0aGluZyB1cCB1bnRpbCB0aGF0IGZpcnN0IHNs
YXNoIHdlIGZvdW5kIGlzIHRoZSBob3N0IG5hbWUsCi0gICAgLy8gd2hpY2ggd2lsbCBlbmQgdXAg
YmVpbmcgdGhlIFVOQyBob3N0LiBGb3IgZXhhbXBsZSAiZmlsZTovL2Zvby9iYXIudHh0IgotICAg
IC8vIHdpbGwgZ2V0IGEgc2VydmVyIG5hbWUgb2YgImZvbyIgYW5kIGEgcGF0aCBvZiAiL2JhciIu
IExhdGVyLCBvbiBXaW5kb3dzLAotICAgIC8vIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgdGhl
IGZpbGVuYW1lICJcXGZvb1xiYXIudHh0IiBpbiBwcm9wZXIgVU5DCi0gICAgLy8gbm90YXRpb24u
Ci0gICAgaW50IGhvc3RMZW5ndGggPSBuZXh0U2xhc2ggLSBhZnRlclNsYXNoZXM7Ci0gICAgaWYg
KGhvc3RMZW5ndGgpCi0gICAgICAgIHBhcnNlZC5ob3N0ID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFu
Z2UoYWZ0ZXJTbGFzaGVzLCBuZXh0U2xhc2gpOwotICAgIGVsc2UKLSAgICAgICAgcGFyc2VkLmhv
c3QucmVzZXQoKTsKLSAgICBpZiAobmV4dFNsYXNoIDwgc3BlY0xlbmd0aCkgewotICAgICAgICBw
YXJzZVBhdGhJbnRlcm5hbChzcGVjLCBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShuZXh0U2xhc2gs
IHNwZWNMZW5ndGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFyc2VkLnBhdGgsICZw
YXJzZWQucXVlcnksICZwYXJzZWQuZnJhZ21lbnQpOwotICAgIH0gZWxzZQotICAgICAgICBwYXJz
ZWQucGF0aC5yZXNldCgpOwotfQotCi0vLyBBIHN1YmNvbXBvbmVudCBvZiBEb1BhcnNlRmlsZVVS
TCwgdGhlIGlucHV0IHNob3VsZCBiZSBhIGxvY2FsIGZpbGUsIHdpdGggdGhlCi0vLyBiZWdpbm5p
bmcgb2YgdGhlIHBhdGggaW5kaWNhdGVkIGJ5IHRoZSBpbmRleCBpbiB8cGF0aEJlZ2lufC4gVGhp
cyB3aWxsCi0vLyBpbml0aWFsaXplIHRoZSBob3N0LCBwYXRoLCBxdWVyeSwgYW5kIHJlZiwgYW5k
IGxlYXZlIHRoZSBvdGhlciBvdXRwdXQKLS8vIGNvbXBvbmVudHMgdW50b3VjaGVkIChEb0luaXRG
aWxlVVJMIGhhbmRsZXMgdGhlc2UgZm9yIHVzKS4KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+Ci12b2lkIGRvUGFyc2VMb2NhbEZpbGUoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywg
aW50IHBhdGhCZWdpbiwgaW50IHNwZWNMZW5ndGgsIFVSTFNlZ21lbnRzJiBwYXJzZWQpCi17Ci0g
ICAgcGFyc2VkLmhvc3QucmVzZXQoKTsKLSAgICBwYXJzZVBhdGhJbnRlcm5hbChzcGVjLCBVUkxD
b21wb25lbnQ6OmZyb21SYW5nZShwYXRoQmVnaW4sIHNwZWNMZW5ndGgpLAotICAgICAgICAgICAg
ICAgICAgICAgICZwYXJzZWQucGF0aCwgJnBhcnNlZC5xdWVyeSwgJnBhcnNlZC5mcmFnbWVudCk7
Ci19Ci0KLS8vIEJhY2tlbmQgZm9yIHRoZSBleHRlcm5hbCBmdW5jdGlvbnMgdGhhdCBvcGVyYXRl
cyBvbiBlaXRoZXIgY2hhciB0eXBlLgotLy8gV2UgYXJlIGhhbmRlZCB0aGUgY2hhcmFjdGVyIGFm
dGVyIHRoZSAiZmlsZToiIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNwZWMuCi0vLyBVc3VhbGx5
IHRoaXMgaXMgYSBzbGFzaCwgYnV0IG5lZWRuJ3QgYmU7IHdlIGFsbG93IHBhdGhzIGxpa2UgImZp
bGU6YzpcZm9vIi4KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci12b2lkIGRvUGFy
c2VGaWxlVVJMKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGludCBzcGVjTGVuZ3RoLCBVUkxT
ZWdtZW50cyYgcGFyc2VkKQotewotICAgIEFTU0VSVChzcGVjTGVuZ3RoID49IDApOwotCi0gICAg
Ly8gR2V0IHRoZSBwYXJ0cyB3ZSBuZXZlciB1c2UgZm9yIGZpbGUgVVJMcyBvdXQgb2YgdGhlIHdh
eS4KLSAgICBwYXJzZWQudXNlcm5hbWUucmVzZXQoKTsKLSAgICBwYXJzZWQucGFzc3dvcmQucmVz
ZXQoKTsKLSAgICBwYXJzZWQucG9ydC5yZXNldCgpOwotCi0gICAgLy8gTWFueSBvZiB0aGUgY29k
ZSBwYXRocyBkb24ndCBzZXQgdGhlc2UsIHNvIGl0J3MgY29udmVuaWVudCB0byBqdXN0IGNsZWFy
Ci0gICAgLy8gdGhlbS4gV2UnbGwgd3JpdGUgdGhlbSBpbiB0aG9zZSBjYXNlcyB3ZSBuZWVkIHRo
ZW0uCi0gICAgcGFyc2VkLnF1ZXJ5LnJlc2V0KCk7Ci0gICAgcGFyc2VkLmZyYWdtZW50LnJlc2V0
KCk7Ci0KLSAgICAvLyBTdHJpcCBsZWFkaW5nICYgdHJhaWxpbmcgc3BhY2VzIGFuZCBjb250cm9s
IGNoYXJhY3RlcnMuCi0gICAgaW50IGJlZ2luID0gMDsKLSAgICB0cmltVVJMKHNwZWMsIGJlZ2lu
LCBzcGVjTGVuZ3RoKTsKLQotICAgIC8vIEZpbmQgdGhlIHNjaGVtZS4KLSAgICBpbnQgbnVtU2xh
c2hlczsKLSAgICBpbnQgYWZ0ZXJTY2hlbWU7Ci0gICAgaW50IGFmdGVyU2xhc2hlczsKLSNpZiBP
UyhXSU5ET1dTKQotICAgIC8vIFNlZSBob3cgbWFueSBzbGFzaGVzIHRoZXJlIGFyZS4gV2Ugd2Fu
dCB0byBoYW5kbGUgY2FzZXMgbGlrZSBVTkMgYnV0IGFsc28KLSAgICAvLyAiL2M6L2ZvbyIuIFRo
aXMgaXMgd2hlbiB0aGVyZSBpcyBubyBzY2hlbWUsIHNvIHdlIGNhbiBhbGxvdyBwYWdlcyB0byBk
bwotICAgIC8vIGxpbmtzIGxpa2UgImM6L2Zvby9iYXIiIG9yICIvL2Zvby9iYXIiLiBUaGlzIGlz
IGFsc28gY2FsbGVkIGJ5IHRoZQotICAgIC8vIHJlbGF0aXZlIFVSTCByZXNvbHZlciB3aGVuIGl0
IGRldGVybWluZXMgdGhlcmUgaXMgYW4gYWJzb2x1dGUgVVJMLCB3aGljaAotICAgIC8vIG1heSBn
aXZlIHVzIGlucHV0IGxpa2UgIi9jOi9mb28iLgotICAgIG51bVNsYXNoZXMgPSBjb3VudENvbnNl
Y3V0aXZlU2xhc2hlcyhzcGVjLCBiZWdpbiwgc3BlY0xlbmd0aCk7Ci0gICAgYWZ0ZXJTbGFzaGVz
ID0gYmVnaW4gKyBudW1TbGFzaGVzOwotICAgIGlmIChkb2VzQmVnaW5XaW5kb3dzRHJpdmVTcGVj
KHNwZWMsIGFmdGVyU2xhc2hlcywgc3BlY0xlbmd0aCkpIHsKLSAgICAgICAgLy8gV2luZG93cyBw
YXRoLCBkb24ndCB0cnkgdG8gZXh0cmFjdCB0aGUgc2NoZW1lIChmb3IgZXhhbXBsZSwgImM6XGZv
byIpLgotICAgICAgICBwYXJzZWQuc2NoZW1lLnJlc2V0KCk7Ci0gICAgICAgIGFmdGVyU2NoZW1l
ID0gYWZ0ZXJTbGFzaGVzOwotICAgIH0gZWxzZSBpZiAoZG9lc0JlZ2luVU5DUGF0aChzcGVjLCBi
ZWdpbiwgc3BlY0xlbmd0aCwgZmFsc2UpKSB7Ci0gICAgICAgIC8vIFdpbmRvd3MgVU5DIHBhdGg6
IGRvbid0IHRyeSB0byBleHRyYWN0IHRoZSBzY2hlbWUsIGJ1dCBrZWVwIHRoZSBzbGFzaGVzLgot
ICAgICAgICBwYXJzZWQuc2NoZW1lLnJlc2V0KCk7Ci0gICAgICAgIGFmdGVyU2NoZW1lID0gYmVn
aW47Ci0gICAgfSBlbHNlCi0jZW5kaWYKLSAgICB7Ci0gICAgICAgIGlmIChFeHRyYWN0U2NoZW1l
KCZzcGVjW2JlZ2luXSwgc3BlY0xlbmd0aCAtIGJlZ2luLCAmcGFyc2VkLnNjaGVtZSkpIHsKLSAg
ICAgICAgICAgIC8vIE9mZnNldCB0aGUgcmVzdWx0cyBzaW5jZSB3ZSBnYXZlIEV4dHJhY3RTY2hl
bWUgYSBzdWJzdHJpbmcuCi0gICAgICAgICAgICBwYXJzZWQuc2NoZW1lLm1vdmVCeShiZWdpbik7
Ci0gICAgICAgICAgICBhZnRlclNjaGVtZSA9IHBhcnNlZC5zY2hlbWUuZW5kKCkgKyAxOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gTm8gc2NoZW1lIGZvdW5kLCByZW1lbWJlciB0
aGF0LgotICAgICAgICAgICAgcGFyc2VkLnNjaGVtZS5yZXNldCgpOwotICAgICAgICAgICAgYWZ0
ZXJTY2hlbWUgPSBiZWdpbjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEhhbmRsZSBlbXB0
eSBzcGVjcyBvbmVzIHRoYXQgY29udGFpbiBvbmx5IHdoaXRlc3BhY2Ugb3IgY29udHJvbCBjaGFy
cywKLSAgICAvLyBvciB0aGF0IGFyZSBqdXN0IHRoZSBzY2hlbWUgKGZvciBleGFtcGxlICJmaWxl
OiIpLgotICAgIGlmIChhZnRlclNjaGVtZSA9PSBzcGVjTGVuZ3RoKSB7Ci0gICAgICAgIHBhcnNl
ZC5ob3N0LnJlc2V0KCk7Ci0gICAgICAgIHBhcnNlZC5wYXRoLnJlc2V0KCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBudW1TbGFzaGVzID0gY291bnRDb25zZWN1dGl2ZVNsYXNoZXMo
c3BlYywgYWZ0ZXJTY2hlbWUsIHNwZWNMZW5ndGgpOwotCi0gICAgYWZ0ZXJTbGFzaGVzID0gYWZ0
ZXJTY2hlbWUgKyBudW1TbGFzaGVzOwotI2lmIE9TKFdJTkRPV1MpCi0gICAgLy8gQ2hlY2sgd2hl
dGhlciB0aGUgaW5wdXQgaXMgYSBkcml2ZSBhZ2Fpbi4gV2UgY2hlY2tlZCBhYm92ZSBmb3Igd2lu
ZG93cwotICAgIC8vIGRyaXZlIHNwZWNzLCBidXQgdGhhdCdzIG9ubHkgYXQgdGhlIHZlcnkgYmVn
aW5uaW5nIHRvIHNlZSBpZiB3ZSBoYXZlIGEKLSAgICAvLyBzY2hlbWUgYXQgYWxsLiBUaGlzIHRl
c3Qgd2lsbCBiZSBkdXBsaWNhdGVkIGluIHRoYXQgY2FzZSwgYnV0IHdpbGwKLSAgICAvLyBhZGRp
dGlvbmFsbHkgaGFuZGxlIGFsbCBjYXNlcyB3aXRoIGEgcmVhbCBzY2hlbWUgc3VjaCBhcyAiZmls
ZTovLy9DOi8iLgotICAgIGlmICghZG9lc0JlZ2luV2luZG93c0RyaXZlU3BlYyhzcGVjLCBhZnRl
clNsYXNoZXMsIHNwZWNMZW5ndGgpICYmICBudW1TbGFzaGVzICE9IDMpIHsKLSAgICAgICAgLy8g
QW55dGhpbmcgbm90IGJlZ2lubmluZyB3aXRoIGEgZHJpdmUgc3BlYyAoImM6XCIpIG9uIFdpbmRv
d3MgaXMgdHJlYXRlZAotICAgICAgICAvLyBhcyBVTkMsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0
aHJlZSBzbGFzaGVzIHdoaWNoIGFsd2F5cyBtZWFucyBhIGZpbGUuCi0gICAgICAgIC8vIEV2ZW4g
SUU3IHRyZWF0cyBmaWxlOi8vL2Zvby9iYXIgYXMgIi9mb28vYmFyIiwgd2hpY2ggdGhlbiBmYWls
cy4KLSAgICAgICAgZG9QYXJzZVVOQyhzcGVjLCBhZnRlclNsYXNoZXMsIHNwZWNMZW5ndGgsIHBh
cnNlZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZWxzZQotICAgIC8vIGZpbGU6IFVSTCB3
aXRoIGV4YWN0bHkgMiBzbGFzaGVzIGlzIGNvbnNpZGVyZWQgdG8gaGF2ZSBhIGhvc3QgY29tcG9u
ZW50LgotICAgIGlmIChudW1TbGFzaGVzID09IDIpIHsKLSAgICAgICAgZG9QYXJzZVVOQyhzcGVj
LCBhZnRlclNsYXNoZXMsIHNwZWNMZW5ndGgsIHBhcnNlZCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0jZW5kaWYgLy8gT1MoV0lORE9XUykKLQotICAgIC8vIEVhc3kgYW5kIGNvbW1vbiBjYXNl
LCB0aGUgZnVsbCBwYXRoIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIHNjaGVtZQotICAgIC8vICht
b2R1bG8gc2xhc2hlcyksIGFzIGluICJmaWxlOi8vYzovZm9vIi4gSnVzdCB0cmVhdCBldmVyeXRo
aW5nIGZyb20KLSAgICAvLyB0aGVyZSB0byB0aGUgZW5kIGFzIHRoZSBwYXRoLiBFbXB0eSBob3N0
cyBoYXZlIDAgbGVuZ3RoIGluc3RlYWQgb2YgLTEuCi0gICAgLy8gV2UgaW5jbHVkZSB0aGUgbGFz
dCBzbGFzaCBhcyBwYXJ0IG9mIHRoZSBwYXRoIGlmIHRoZXJlIGlzIG9uZS4KLSAgICBkb1BhcnNl
TG9jYWxGaWxlKHNwZWMsCi0gICAgICAgICAgICAgICAgICAgICBudW1TbGFzaGVzID4gMCA/IGFm
dGVyU2NoZW1lICsgbnVtU2xhc2hlcyAtIDEgOiBhZnRlclNjaGVtZSwKLSAgICAgICAgICAgICAg
ICAgICAgIHNwZWNMZW5ndGgsIHBhcnNlZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLXZvaWQg
UGFyc2VGaWxlVVJMKGNvbnN0IGNoYXIqIHVybCwgaW50IHVybExlbmd0aCwgVVJMU2VnbWVudHMq
IHBhcnNlZCkKLXsKLSAgICBkb1BhcnNlRmlsZVVSTCh1cmwsIHVybExlbmd0aCwgKnBhcnNlZCk7
Ci19Ci0KLXZvaWQgUGFyc2VGaWxlVVJMKGNvbnN0IFVDaGFyKiB1cmwsIGludCB1cmxMZW5ndGgs
IFVSTFNlZ21lbnRzKiBwYXJzZWQpCi17Ci0gICAgZG9QYXJzZUZpbGVVUkwodXJsLCB1cmxMZW5n
dGgsICpwYXJzZWQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBVUkxQYXJzZXIKLQotfSAvLyBuYW1l
c3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvdXJsL3NyYy9VUkxQYXJzZUludGVybmFsLmggYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3Jj
L1VSTFBhcnNlSW50ZXJuYWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUyN2Fl
ZGQwMmE2MjgzMWE2MjI1ODJiMTE0YzdjOTYxZmZlN2IwZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFBhcnNl
SW50ZXJuYWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IDIwMDcgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBDb250YWlucyBjb21tb24gaW5saW5l
IGhlbHBlciBmdW5jdGlvbnMgdXNlZCBieSB0aGUgVVJMIHBhcnNpbmcgcm91dGluZXMuCi0KLSNp
Zm5kZWYgVVJMUGFyc2VJbnRlcm5hbF9oCi0jZGVmaW5lIFVSTFBhcnNlSW50ZXJuYWxfaAotCi0j
aW5jbHVkZSAiVVJMUGFyc2UuaCIKLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+Ci0K
LSNpZiBVU0UoV1RGVVJMKQotCi1uYW1lc3BhY2UgV1RGIHsKLQotbmFtZXNwYWNlIFVSTFBhcnNl
ciB7Ci0KLS8vIFdlIHRyZWF0IHNsYXNoZXMgYW5kIGJhY2tzbGFzaGVzIHRoZSBzYW1lIGZvciBJ
RSBjb21wYXRhYmlsaXR5LgotaW5saW5lIGJvb2wgaXNVUkxTbGFzaChVQ2hhciBjaCkKLXsKLSAg
ICByZXR1cm4gY2ggPT0gJy8nIHx8IGNoID09ICdcXCc7Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBp
ZiB3ZSBzaG91bGQgdHJpbSB0aGlzIGNoYXJhY3RlciBmcm9tIHRoZSBVUkwgYmVjYXVzZSBpdCBp
cyBhCi0vLyBzcGFjZSBvciBhIGNvbnRyb2wgY2hhcmFjdGVyLgotaW5saW5lIGJvb2wgc2hvdWxk
VHJpbUZyb21VUkwoVUNoYXIgY2gpCi17Ci0gICAgcmV0dXJuIGNoIDw9ICcgJzsKLX0KLQotLy8g
R2l2ZW4gYW4gYWxyZWFkeS1pbml0aWFsaXplZCBiZWdpbiBpbmRleCBhbmQgbGVuZ3RoLCB0aGlz
IHNocmlua3MgdGhlIHJhbmdlCi0vLyB0byBlbGltaW5hdGUgInNob3VsZC1iZS10cmltbWVkIiBj
aGFyYWN0ZXJzLiBOb3RlIHRoYXQgdGhlIGxlbmd0aCBkb2VzICpub3QqCi0vLyBpbmRpY2F0ZSB0
aGUgbGVuZ3RoIG9mIHVudHJpbW1lZCBkYXRhIGZyb20gfCpiZWdpbnwsIGJ1dCByYXRoZXIgdGhl
IHBvc2l0aW9uCi0vLyBpbiB0aGUgaW5wdXQgc3RyaW5nIChzbyB0aGUgc3RyaW5nIHN0YXJ0cyBh
dCBjaGFyYWN0ZXIgfCpiZWdpbnwgaW4gdGhlIHNwZWMsCi0vLyBhbmQgZ29lcyB1bnRpbCB8Kmxl
bnwpLgotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSB2b2lkIHRyaW1V
UkwoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgaW50JiBiZWdpbiwgaW50JiBsZW5ndGgpCi17
Ci0gICAgLy8gU3RyaXAgbGVhZGluZyB3aGl0ZXNwYWNlIGFuZCBjb250cm9sIGNoYXJhY3RlcnMu
Ci0gICAgd2hpbGUgKGJlZ2luIDwgbGVuZ3RoICYmIHNob3VsZFRyaW1Gcm9tVVJMKHNwZWNbYmVn
aW5dKSkKLSAgICAgICAgKytiZWdpbjsKLQotICAgIC8vIFN0cmlwIHRyYWlsaW5nIHdoaXRlc3Bh
Y2UgYW5kIGNvbnRyb2wgY2hhcmFjdGVycy4gV2UgbmVlZCB0aGUgPmkgdGVzdCBmb3IKLSAgICAv
LyB3aGVuIHRoZSBpbnB1dCBzdHJpbmcgaXMgYWxsIGJsYW5rczsgd2UgZG9uJ3Qgd2FudCB0byBi
YWNrIHBhc3QgdGhlIGlucHV0LgotICAgIHdoaWxlIChsZW5ndGggPiBiZWdpbiAmJiBzaG91bGRU
cmltRnJvbVVSTChzcGVjW2xlbmd0aCAtIDFdKSkKLSAgICAgICAgLS1sZW5ndGg7Ci19Ci0KLS8v
IENvdW50cyB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHNsYXNoZXMgc3RhcnRpbmcgYXQgdGhl
IGdpdmVuIG9mZnNldAotLy8gaW4gdGhlIGdpdmVuIHN0cmluZyBvZiB0aGUgZ2l2ZW4gbGVuZ3Ro
LgotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSBpbnQgY291bnRDb25z
ZWN1dGl2ZVNsYXNoZXMoY29uc3QgQ2hhcmFjdGVyVHlwZSAqc3RyLCBpbnQgYmVnaW5fb2Zmc2V0
LCBpbnQgc3RyTGVuZ3RoKQotewotICAgIGludCBjb3VudCA9IDA7Ci0gICAgd2hpbGUgKGJlZ2lu
X29mZnNldCArIGNvdW50IDwgc3RyTGVuZ3RoICYmIGlzVVJMU2xhc2goc3RyW2JlZ2luX29mZnNl
dCArIGNvdW50XSkpCi0gICAgICAgICsrY291bnQ7Ci0gICAgcmV0dXJuIGNvdW50OwotfQotCi0v
LyBJbnRlcm5hbCBmdW5jdGlvbnMgaW4gVVJMUGFyc2VyLmNjIHRoYXQgcGFyc2UgdGhlIHBhdGgs
IHRoYXQgaXMsIGV2ZXJ5dGhpbmcKLS8vIGZvbGxvd2luZyB0aGUgYXV0aG9yaXR5IHNlY3Rpb24u
IFRoZSBpbnB1dCBpcyB0aGUgcmFuZ2Ugb2YgZXZlcnl0aGluZwotLy8gZm9sbG93aW5nIHRoZSBh
dXRob3JpdHkgc2VjdGlvbiwgYW5kIHRoZSBvdXRwdXQgaXMgdGhlIGlkZW50aWZpZWQgcmFuZ2Vz
LgotLy8KLS8vIFRoaXMgaXMgZGVzaWduZWQgZm9yIHRoZSBmaWxlIFVSTCBwYXJzZXIgb3Igb3Ro
ZXIgY29uc3VtZXJzIHdobyBtYXkgZG8KLS8vIHNwZWNpYWwgc3R1ZmYgYXQgdGhlIGJlZ2lubmlu
ZywgYnV0IHdhbnQgcmVndWxhciBwYXRoIHBhcnNpbmcsIGl0IGp1c3QKLS8vIG1hcHMgdG8gdGhl
IGludGVybmFsIHBhcnNpbmcgZnVuY3Rpb24gZm9yIHBhdGhzLgotdm9pZCBwYXJzZVBhdGhJbnRl
cm5hbChjb25zdCBjaGFyKiBzcGVjLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxD
b21wb25lbnQmIHBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCogZmls
ZXBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCogcXVlcnksCi0gICAg
ICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCogZnJhZ21lbnQpOwotdm9pZCBwYXJzZVBh
dGhJbnRlcm5hbChjb25zdCBVQ2hhciogc3BlYywKLSAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVVJMQ29tcG9uZW50JiBwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICBVUkxDb21wb25l
bnQqIGZpbGVwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICBVUkxDb21wb25lbnQqIHF1ZXJ5
LAotICAgICAgICAgICAgICAgICAgICAgICBVUkxDb21wb25lbnQqIGZyYWdtZW50KTsKLQotCi0v
LyBHaXZlbiBhIHNwZWMgYW5kIGEgcG9pbnRlciB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBj
b2xvbiBmb2xsb3dpbmcgdGhlCi0vLyBzY2hlbWUsIHRoaXMgcGFyc2VzIGl0IGFuZCBmaWxscyBp
biB0aGUgc3RydWN0dXJlLCBFdmVyeSBpdGVtIGluIHRoZSBwYXJzZWQKLS8vIHN0cnVjdHVyZSBp
cyBmaWxsZWQgRVhDRVBUIGZvciB0aGUgc2NoZW1lLCB3aGljaCBpcyB1bnRvdWNoZWQuCi12b2lk
IHBhcnNlQWZ0ZXJTY2hlbWUoY29uc3QgY2hhciogc3BlYywgaW50IHNwZWNMZW5ndGgsIGludCBh
ZnRlclNjaGVtZSwgVVJMU2VnbWVudHMmIHBhcnNlZCk7Ci12b2lkIHBhcnNlQWZ0ZXJTY2hlbWUo
Y29uc3QgVUNoYXIqIHNwZWMsIGludCBzcGVjTGVuZ3RoLCBpbnQgYWZ0ZXJTY2hlbWUsIFVSTFNl
Z21lbnRzJiBwYXJzZWQpOwotCi19IC8vIG5hbWVzcGFjZSBVUkxQYXJzZXIKLQotfSAvLyBuYW1l
c3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBVU0UoV1RGVVJMKQotCi0jZW5kaWYgLy8gVVJMUGFyc2VJ
bnRlcm5hbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFNlZ21lbnRz
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMU2VnbWVudHMuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAxNGM5NWJlMzliNmQ0MGQ5ODUyZTZmOTQ2YjFmZTc3YzQ2NWFj
NDI2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XVEYvd3RmL3VybC9zcmMvVVJMU2VnbWVudHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTM4
ICswLDAgQEAKLS8qIEJhc2VkIG9uIG5zVVJMUGFyc2Vycy5jYyBmcm9tIE1vemlsbGEKLSAqIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIENvcHlyaWdodCAoQykgMTk5
OCBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KLSAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogT3RoZXIgY29udHJp
YnV0b3JzOgotICogICBEYXJpbiBGaXNoZXIgKG9yaWdpbmFsIGF1dGhvcikKLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2Vl
IHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCi0gKgotICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkg
YmUgdXNlZCB1bmRlciB0aGUgdGVybXMKLSAqIG9mIGVpdGhlciB0aGUgTW96aWxsYSBQdWJsaWMg
TGljZW5zZSBWZXJzaW9uIDEuMSwgZm91bmQgYXQKLSAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcv
TVBMLyAodGhlICJNUEwiKSBvciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIFZl
cnNpb24gMi4wLCBmb3VuZCBhdCBodHRwOi8vd3d3LmZzZi5vcmcvY29weWxlZnQvZ3BsLmh0bWwK
LSAqICh0aGUgIkdQTCIpLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBNUEwg
b3IgdGhlIEdQTCBhcmUKLSAqIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZSBhYm92ZS4gSWYg
eW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIKLSAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9u
bHkgdW5kZXIgdGhlIHRlcm1zIG9mIG9uZSBvZiB0aG9zZSB0d28KLSAqIGxpY2Vuc2VzICh0aGUg
TVBMIG9yIHRoZSBHUEwpIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyCi0gKiB2
ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTEdQTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lv
biBieQotICogZGVsZXRpbmd0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdp
dGggdGhlIG5vdGljZSBhbmQKLSAqIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIE1Q
TCBvciB0aGUgR1BMLCBhcyB0aGUgY2FzZSBtYXkgYmUuCi0gKiBJZiB5b3UgZG8gbm90IGRlbGV0
ZSB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyCi0gKiB2ZXJz
aW9uIG9mIHRoaXMgZmlsZSB1bmRlciBhbnkgb2YgdGhlIExHUEwsIHRoZSBNUEwgb3IgdGhlIEdQ
TC4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVVJMU2VnbWVudHMuaCIK
LQotI2lmIFVTRShXVEZVUkwpCi0KLW5hbWVzcGFjZSBXVEYgewotCi1pbnQgVVJMU2VnbWVudHM6
Omxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgaWYgKGZyYWdtZW50LmlzVmFsaWQoKSkKLSAgICAgICAg
cmV0dXJuIGZyYWdtZW50LmVuZCgpOwotICAgIHJldHVybiBjaGFyYWN0ZXJzQmVmb3JlKEZyYWdt
ZW50LCBEZWxpbWl0ZXJFeGNsdWRlZCk7Ci19Ci0KLWludCBVUkxTZWdtZW50czo6Y2hhcmFjdGVy
c0JlZm9yZShDb21wb25lbnRUeXBlIHR5cGUsIERlbGltaXRlckluY2x1c2lvbiBpbmNsdWRlRGVs
aW1pdGVyKSBjb25zdAotewotICAgIGlmICh0eXBlID09IFNjaGVtZSkKLSAgICAgICAgcmV0dXJu
IHNjaGVtZS5iZWdpbigpOwotCi0gICAgaW50IGN1cnJlbnQgPSAwOwotICAgIGlmIChzY2hlbWUu
aXNWYWxpZCgpKQotICAgICAgICBjdXJyZW50ID0gc2NoZW1lLmVuZCgpICsgMTsgLy8gQWR2YW5j
ZSBvdmVyIHRoZSAnOicgYXQgdGhlIGVuZCBvZiB0aGUgc2NoZW1lLgotCi0gICAgaWYgKHVzZXJu
YW1lLmlzVmFsaWQoKSkgewotICAgICAgICBpZiAodHlwZSA8PSBVc2VybmFtZSkKLSAgICAgICAg
ICAgIHJldHVybiB1c2VybmFtZS5iZWdpbigpOwotICAgICAgICBjdXJyZW50ID0gdXNlcm5hbWUu
ZW5kKCkgKyAxOyAvLyBBZHZhbmNlIG92ZXIgdGhlICdAJyBvciAnOicgYXQgdGhlIGVuZC4KLSAg
ICB9Ci0KLSAgICBpZiAocGFzc3dvcmQuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGlmICh0eXBlIDw9
IFBhc3N3b3JkKQotICAgICAgICAgICAgcmV0dXJuIHBhc3N3b3JkLmJlZ2luKCk7Ci0gICAgICAg
IGN1cnJlbnQgPSBwYXNzd29yZC5lbmQoKSArIDE7IC8vIEFkdmFuY2Ugb3ZlciB0aGUgJ0AnIGF0
IHRoZSBlbmQuCi0gICAgfQotCi0gICAgaWYgKGhvc3QuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGlm
ICh0eXBlIDw9IEhvc3QpCi0gICAgICAgICAgICByZXR1cm4gaG9zdC5iZWdpbigpOwotICAgICAg
ICBjdXJyZW50ID0gaG9zdC5lbmQoKTsKLSAgICB9Ci0KLSAgICBpZiAocG9ydC5pc1ZhbGlkKCkp
IHsKLSAgICAgICAgaWYgKHR5cGUgPCBQb3J0IHx8ICh0eXBlID09IFBvcnQgJiYgaW5jbHVkZURl
bGltaXRlciA9PSBEZWxpbWl0ZXJJbmNsdWRlZCkpCi0gICAgICAgICAgICByZXR1cm4gcG9ydC5i
ZWdpbigpIC0gMTsgLy8gQmFjayBvdmVyIGRlbGltaXRlci4KLSAgICAgICAgaWYgKHR5cGUgPT0g
UG9ydCkKLSAgICAgICAgICAgIHJldHVybiBwb3J0LmJlZ2luKCk7IC8vIERvbid0IHdhbnQgZGVs
aW1pdGVyIGNvdW50ZWQuCi0gICAgICAgIGN1cnJlbnQgPSBwb3J0LmVuZCgpOwotICAgIH0KLQot
ICAgIGlmIChwYXRoLmlzVmFsaWQoKSkgewotICAgICAgICBpZiAodHlwZSA8PSBQYXRoKQotICAg
ICAgICAgICAgcmV0dXJuIHBhdGguYmVnaW4oKTsKLSAgICAgICAgY3VycmVudCA9IHBhdGguZW5k
KCk7Ci0gICAgfQotCi0gICAgaWYgKHF1ZXJ5LmlzVmFsaWQoKSkgewotICAgICAgICBpZiAodHlw
ZSA8IFF1ZXJ5IHx8ICh0eXBlID09IFF1ZXJ5ICYmIGluY2x1ZGVEZWxpbWl0ZXIgPT0gRGVsaW1p
dGVySW5jbHVkZWQpKQotICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5LmJlZ2luKCkgLSAxOyAvLyBC
YWNrIG92ZXIgZGVsaW1pdGVyLgotICAgICAgICBpZiAodHlwZSA9PSBRdWVyeSkKLSAgICAgICAg
ICAgIHJldHVybiBxdWVyeS5iZWdpbigpOyAvLyBEb24ndCB3YW50IGRlbGltaXRlciBjb3VudGVk
LgotICAgICAgICBjdXJyZW50ID0gcXVlcnkuZW5kKCk7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdt
ZW50LmlzVmFsaWQoKSkgewotICAgICAgICBpZiAodHlwZSA9PSBGcmFnbWVudCAmJiBpbmNsdWRl
RGVsaW1pdGVyID09IERlbGltaXRlckV4Y2x1ZGVkKQotICAgICAgICAgICAgcmV0dXJuIGZyYWdt
ZW50LmJlZ2luKCk7IC8vIEJhY2sgb3ZlciBkZWxpbWl0ZXIuCi0KLSAgICAgICAgLy8gV2hlbiB0
aGVyZSBpcyBhIGZyYWdtZW50IGFuZCB3ZSBnZXQgaGVyZSwgdGhlIGNvbXBvbmVudCB3ZSB3YW50
ZWQgd2FzIGJlZm9yZQotICAgICAgICAvLyB0aGlzIGFuZCBub3QgZm91bmQsIHNvIHdlIGFsd2F5
cyBrbm93IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZyYWdtZW50IGlzIHJpZ2h0LgotICAgICAgICBy
ZXR1cm4gZnJhZ21lbnQuYmVnaW4oKSAtIDE7IC8vIERvbid0IHdhbnQgZGVsaW1pdGVyIGNvdW50
ZWQuCi0gICAgfQotCi0gICAgcmV0dXJuIGN1cnJlbnQ7Ci19Ci0KLXZvaWQgVVJMU2VnbWVudHM6
Om1vdmVGcm9tQ29tcG9uZW50QnkoQ29tcG9uZW50VHlwZSB0eXBlLCBpbnQgb2Zmc2V0KQotewot
ICAgIHN3aXRjaCAodHlwZSkgewotICAgIC8vIEZhbGwgdGhyb3VnaC4KLSAgICBjYXNlIFNjaGVt
ZToKLSAgICAgICAgc2NoZW1lLm1vdmVCeShvZmZzZXQpOwotICAgIGNhc2UgVXNlcm5hbWU6Ci0g
ICAgICAgIHVzZXJuYW1lLm1vdmVCeShvZmZzZXQpOwotICAgIGNhc2UgUGFzc3dvcmQ6Ci0gICAg
ICAgIHBhc3N3b3JkLm1vdmVCeShvZmZzZXQpOwotICAgIGNhc2UgSG9zdDoKLSAgICAgICAgaG9z
dC5tb3ZlQnkob2Zmc2V0KTsKLSAgICBjYXNlIFBvcnQ6Ci0gICAgICAgIHBvcnQubW92ZUJ5KG9m
ZnNldCk7Ci0gICAgY2FzZSBQYXRoOgotICAgICAgICBwYXRoLm1vdmVCeShvZmZzZXQpOwotICAg
IGNhc2UgUXVlcnk6Ci0gICAgICAgIHF1ZXJ5Lm1vdmVCeShvZmZzZXQpOwotICAgIGNhc2UgRnJh
Z21lbnQ6Ci0gICAgICAgIGZyYWdtZW50Lm1vdmVCeShvZmZzZXQpOwotICAgIH0KLX0KLQotfSAv
LyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvdXJsL3NyYy9VUkxTZWdtZW50cy5oIGIvU291cmNlL1dURi93dGYvdXJsL3Ny
Yy9VUkxTZWdtZW50cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzFlZWMzOTAx
ODA3NGY2YzhhYjMyYmFkMjY3YWZkYzNjMTBjMTU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMU2VnbWVudHMu
aAorKysgL2Rldi9udWxsCkBAIC0xLDE1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDcg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFVSTFNlZ21lbnRzX2gKLSNkZWZpbmUgVVJM
U2VnbWVudHNfaAotCi0jaW5jbHVkZSAiVVJMQ29tcG9uZW50LmgiCi0jaW5jbHVkZSA8d3RmL093
blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLSNpZiBVU0UoV1RGVVJMKQot
Ci1uYW1lc3BhY2UgV1RGIHsKLQotY2xhc3MgVVJMU2VnbWVudHM7Ci0KLS8vIEEgc3RydWN0dXJl
IHRoYXQgaG9sZHMgdGhlIGlkZW50aWZpZWQgcGFydHMgb2YgYW4gaW5wdXQgVVJMLiBUaGlzIHN0
cnVjdHVyZQotLy8gZG9lcyBOT1Qgc3RvcmUgdGhlIFVSTCBpdHNlbGYuIFRoZSBjYWxsZXIgd2ls
bCBoYXZlIHRvIHN0b3JlIHRoZSBVUkwgdGV4dAotLy8gYW5kIGl0cyBjb3JyZXNwb25kaW5nIFBh
cnNlZCBzdHJ1Y3R1cmUgc2VwYXJhdGVseS4KLWNsYXNzIFVSTFNlZ21lbnRzIHsKLXB1YmxpYzoK
LSAgICAvLyBJZGVudGlmaWVzIGRpZmZlcmVudCBjb21wb25lbnRzLgotICAgIGVudW0gQ29tcG9u
ZW50VHlwZSB7Ci0gICAgICAgIFNjaGVtZSwKLSAgICAgICAgVXNlcm5hbWUsCi0gICAgICAgIFBh
c3N3b3JkLAotICAgICAgICBIb3N0LAotICAgICAgICBQb3J0LAotICAgICAgICBQYXRoLAotICAg
ICAgICBRdWVyeSwKLSAgICAgICAgRnJhZ21lbnQsCi0gICAgfTsKLSAgICBlbnVtIERlbGltaXRl
ckluY2x1c2lvbiB7Ci0gICAgICAgIERlbGltaXRlckV4Y2x1ZGVkLAotICAgICAgICBEZWxpbWl0
ZXJJbmNsdWRlZAotICAgIH07Ci0KLSAgICBVUkxTZWdtZW50cygpIHsgfQotCi0gICAgVVJMU2Vn
bWVudHMoY29uc3QgVVJMU2VnbWVudHMmIG90aGVyU2VnbWVudCkKLSAgICB7Ci0gICAgICAgICp0
aGlzID0gb3RoZXJTZWdtZW50OwotICAgIH0KLQotICAgIFVSTFNlZ21lbnRzJiBvcGVyYXRvcj0o
Y29uc3QgVVJMU2VnbWVudHMmIG90aGVyU2VnbWVudCkKLSAgICB7Ci0gICAgICAgIHNjaGVtZSA9
IG90aGVyU2VnbWVudC5zY2hlbWU7Ci0gICAgICAgIHVzZXJuYW1lID0gb3RoZXJTZWdtZW50LnVz
ZXJuYW1lOwotICAgICAgICBwYXNzd29yZCA9IG90aGVyU2VnbWVudC5wYXNzd29yZDsKLSAgICAg
ICAgaG9zdCA9IG90aGVyU2VnbWVudC5ob3N0OwotICAgICAgICBwb3J0ID0gb3RoZXJTZWdtZW50
LnBvcnQ7Ci0gICAgICAgIHBhdGggPSBvdGhlclNlZ21lbnQucGF0aDsKLSAgICAgICAgcXVlcnkg
PSBvdGhlclNlZ21lbnQucXVlcnk7Ci0gICAgICAgIGZyYWdtZW50ID0gb3RoZXJTZWdtZW50LmZy
YWdtZW50OwotICAgICAgICBpZiAob3RoZXJTZWdtZW50Lm1faW5uZXJVUkxTZWdtZW50cykKLSAg
ICAgICAgICAgIG1faW5uZXJVUkxTZWdtZW50cyA9IGFkb3B0UHRyKG5ldyBVUkxTZWdtZW50cygq
b3RoZXJTZWdtZW50Lm1faW5uZXJVUkxTZWdtZW50cykpOwotICAgICAgICAgICAgcmV0dXJuICp0
aGlzOwotICAgIH0KLQotICAgIC8vIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgVVJMICh0aGUg
ZW5kIG9mIHRoZSBsYXN0IGNvbXBvbmVudCkuCi0gICAgLy8KLSAgICAvLyBOb3RlIHRoYXQgZm9y
IHNvbWUgaW52YWxpZCwgbm9uLWNhbm9uaWNhbCBVUkxzLCB0aGlzIG1heSBub3QgYmUgdGhlIGxl
bmd0aAotICAgIC8vIG9mIHRoZSBzdHJpbmcuIEZvciBleGFtcGxlICJodHRwOi8vIjogdGhlIHBh
cnNlZCBzdHJ1Y3R1cmUgd2lsbCBvbmx5Ci0gICAgLy8gY29udGFpbiBhbiBlbnRyeSBmb3IgdGhl
IGZvdXItY2hhcmFjdGVyIHNjaGVtZSwgYW5kIGl0IGRvZXNuJ3Qga25vdyBhYm91dAotICAgIC8v
IHRoZSAiOi8vIi4gRm9yIGFsbCBvdGhlciBsYXN0LWNvbXBvbmVudHMsIGl0IHdpbGwgcmV0dXJu
IHRoZSByZWFsIGxlbmd0aC4KLSAgICBpbnQgbGVuZ3RoKCkgY29uc3Q7Ci0KLSAgICAvLyBSZXR1
cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBiZWZvcmUgdGhlIGdpdmVuIGNvbXBvbmVudCBp
ZiBpdCBleGlzdHMsCi0gICAgLy8gb3Igd2hlcmUgdGhlIGNvbXBvbmVudCB3b3VsZCBiZSBpZiBp
dCBkaWQgZXhpc3QuIFRoaXMgd2lsbCByZXR1cm4gdGhlCi0gICAgLy8gc3RyaW5nIGxlbmd0aCBp
ZiB0aGUgY29tcG9uZW50IHdvdWxkIGJlIGFwcGVuZGVkIHRvIHRoZSBlbmQuCi0gICAgLy8KLSAg
ICAvLyBOb3RlIHRoYXQgdGhpcyBjYW4gZ2V0IGEgbGl0dGxlIGZ1bm55IGZvciB0aGUgcG9ydCwg
cXVlcnksIGFuZCBmcmFnbWVudAotICAgIC8vIGNvbXBvbmVudHMgd2hpY2ggaGF2ZSBhIGRlbGlt
aXRlciB0aGF0IGlzIG5vdCBjb3VudGVkIGFzIHBhcnQgb2YgdGhlCi0gICAgLy8gY29tcG9uZW50
LiBUaGUgfGluY2x1ZGVEZWxpbWl0ZXJ8IGZsYWcgY29udHJvbHMgaWYgeW91IHdhbnQgdGhpcyBj
b3VudGVkCi0gICAgLy8gYXMgcGFydCBvZiB0aGUgY29tcG9uZW50IG9yIG5vdCB3aGVuIHRoZSBj
b21wb25lbnQgZXhpc3RzLgotICAgIC8vCi0gICAgLy8gVGhpcyBleGFtcGxlIHNob3dzIHRoZSBk
aWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBmbGFncyBmb3IgdHdvIG9mIHRoZXNlCi0gICAgLy8g
ZGVsaW1pdGVkIGNvbXBvbmVudHMgdGhhdCBpcyBwcmVzZW50ICh0aGUgcG9ydCBhbmQgcXVlcnkp
IGFuZCBvbmUgdGhhdAotICAgIC8vIGlzbid0ICh0aGUgcmVmZXJlbmNlKS4gVGhlIGNvbXBvbmVu
dHMgdGhhdCB0aGlzIGZsYWcgYWZmZWN0cyBhcmUgbWFya2VkCi0gICAgLy8gd2l0aCBhICouCi0g
ICAgLy8gICAgICAgICAgICAgICAgIDAgICAgICAgICAxICAgICAgICAgMgotICAgIC8vICAgICAg
ICAgICAgICAgICAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAKLSAgICAvLyBFeGFtcGxlIGlucHV0OiBo
dHRwOi8vZm9vOjgwLz9xdWVyeQotICAgIC8vICAgICAgICAgICAgICBpbmNsdWRlX2RlbGltPXRy
dWUsICAuLi49ZmFsc2UgICgiPC0iIGluZGljYXRlcyBkaWZmZXJlbnQpCi0gICAgLy8gICAgICBT
Y2hlbWU6IDAgICAgICAgICAgICAgICAgICAgIDAKLSAgICAvLyAgICBVc2VybmFtZTogNSAgICAg
ICAgICAgICAgICAgICAgNQotICAgIC8vICAgIFBhc3N3b3JkOiA1ICAgICAgICAgICAgICAgICAg
ICA1Ci0gICAgLy8gICAgICAgIEhvc3Q6IDcgICAgICAgICAgICAgICAgICAgIDcKLSAgICAvLyAg
ICAgICAqUG9ydDogMTAgICAgICAgICAgICAgICAgICAgMTEgPC0KLSAgICAvLyAgICAgICAgUGF0
aDogMTMgICAgICAgICAgICAgICAgICAgMTMKLSAgICAvLyAgICAgICpRdWVyeTogMTQgICAgICAg
ICAgICAgICAgICAgMTUgPC0KLSAgICAvLyAgICAgICAgKkZyYWdtZW50OiAyMCAgICAgICAgICAg
ICAgICAgICAyMAotICAgIC8vCi0gICAgaW50IGNoYXJhY3RlcnNCZWZvcmUoQ29tcG9uZW50VHlw
ZSwgRGVsaW1pdGVySW5jbHVzaW9uKSBjb25zdDsKLQotICAgIC8vIFNoaWZ0IGFsbCB0aGUgY29t
cG9uZW50cyBmcm9tICdmaXJzdENvbXBvbmVudCcgdG8gdGhlIGxhc3QgY29tcG9uZW50IGJ5ICdv
ZmZzZXQnLgotICAgIHZvaWQgbW92ZUZyb21Db21wb25lbnRCeShDb21wb25lbnRUeXBlIGZpcnN0
Q29tcG9uZW50LCBpbnQgb2Zmc2V0KTsKLQotICAgIC8vIEVhY2ggY29tcG9uZW50IGV4Y2x1ZGVz
IHRoZSByZWxhdGVkIGRlbGltaXRlcnMgYW5kIGhhcyBhIGxlbmd0aCBvZiAtMQotICAgIC8vIGlm
IHRoYXQgY29tcG9uZW50IGlzIGFic2VudCBidXQgMCBpZiB0aGUgY29tcG9uZW50IGV4aXN0cyBi
dXQgaXMgZW1wdHkuCi0gICAgVVJMQ29tcG9uZW50IHNjaGVtZTsKLSAgICBVUkxDb21wb25lbnQg
dXNlcm5hbWU7Ci0gICAgVVJMQ29tcG9uZW50IHBhc3N3b3JkOwotICAgIFVSTENvbXBvbmVudCBo
b3N0OwotICAgIFVSTENvbXBvbmVudCBwb3J0OwotICAgIFVSTENvbXBvbmVudCBwYXRoOwotICAg
IFVSTENvbXBvbmVudCBxdWVyeTsKLSAgICBVUkxDb21wb25lbnQgZnJhZ21lbnQ7Ci0KLSAgICAv
LyBGSVhNRTogdGhpcyBpcyBhIGRhbW4gdWdseSBBUEkgYW5kIGlzIGJhc2ljYWxseSB1bnRlc3Rl
ZC4KLSAgICBjb25zdCBVUkxTZWdtZW50cyogaW5uZXJVUkxTZWdtZW50cygpIGNvbnN0IHsgcmV0
dXJuIG1faW5uZXJVUkxTZWdtZW50cy5nZXQoKTsgfQotICAgIHZvaWQgc2V0SW5uZXJVUkxTZWdt
ZW50cyhjb25zdCBVUkxTZWdtZW50cyYgdXJsU2VnbWVudHMpIHsgbV9pbm5lclVSTFNlZ21lbnRz
ID0gYWRvcHRQdHIobmV3IFVSTFNlZ21lbnRzKHVybFNlZ21lbnRzKSk7IH0KLSAgICB2b2lkIGNs
ZWFySW5uZXJVUkxTZWdtZW50cygpIHsgcmV0dXJuIG1faW5uZXJVUkxTZWdtZW50cy5jbGVhcigp
OyB9Ci0KLXByaXZhdGU6Ci0gICAgLy8gVGhlIEZpbGVzeXN0ZW0gQVBJIGRlc2NyaWJlIGEgVVJM
IGZvcm1hdCB3aXRoIGFuIGludGVybmFsIFVSTC4gRS5nLjogZmlsZXN5c3RlbTpodHRwOi8vd3d3
LmFwcGxlLmNvbS8KLSAgICAvLyBUaGUgaW5uZXIgVVJMIHNlZ21lbnQgY29udGFpbnMgdGhlIHBh
cnNlZCBpbm5lciBVUkwgb2YgYSBmaWxlc3lzdGVtOiBVUkwuCi0gICAgT3duUHRyPFVSTFNlZ21l
bnRzPiBtX2lubmVyVVJMU2VnbWVudHM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2Vu
ZGlmIC8vIFVTRShXVEZVUkwpCi0KLSNlbmRpZiAvLyBVUkxTZWdtZW50c19oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFV0aWwuY3BwIGIvU291cmNlL1dURi93dGYvdXJs
L3NyYy9VUkxVdGlsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNmYTBlOGFh
NjNiODU0N2JmNjEwMzRhODY1ZmNjNWRiNGU3MWU5Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFV0aWwuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNDczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwNyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJVUkxV
dGlsLmgiCi0KLSNpbmNsdWRlICJSYXdVUkxCdWZmZXIuaCIKLSNpbmNsdWRlICJVUkxDYW5vbklu
dGVybmFsLmgiCi0jaW5jbHVkZSAiVVJMRmlsZS5oIgotI2luY2x1ZGUgIlVSTFV0aWxJbnRlcm5h
bC5oIgotI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+Ci0KLSNpZiBVU0UoV1RGVVJMKQotCi1u
YW1lc3BhY2UgV1RGIHsKLQotbmFtZXNwYWNlIFVSTFV0aWxpdGllcyB7Ci0KLWNvbnN0IGNoYXIg
a0ZpbGVTY2hlbWVbXSA9ICJmaWxlIjsKLWNvbnN0IGNoYXIga0ZpbGVTeXN0ZW1TY2hlbWVbXSA9
ICJmaWxlc3lzdGVtIjsKLWNvbnN0IGNoYXIga01haWx0b1NjaGVtZVtdID0gIm1haWx0byI7Ci0K
LW5hbWVzcGFjZSB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEl0ZXI+Ci1zdGF0aWMgYm9vbCBsb3dl
ckNhc2VFcXVhbHNBU0NJSShJdGVyIGFCZWdpbiwgSXRlciBhRW5kLCBjb25zdCBjaGFyKiBiKQot
ewotICAgIGZvciAoSXRlciBpdCA9IGFCZWdpbjsgaXQgIT0gYUVuZDsgKytpdCwgKytiKSB7Ci0g
ICAgICAgIGlmICghKmIgfHwgdG9BU0NJSUxvd2VyKCppdCkgIT0gKmIpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiAhKCpiKTsKLX0KLQotY29uc3QgaW50IGtO
dW1TdGFuZGFyZFVSTFNjaGVtZXMgPSA4OwotY29uc3QgY2hhcioga1N0YW5kYXJkVVJMU2NoZW1l
c1trTnVtU3RhbmRhcmRVUkxTY2hlbWVzXSA9IHsKLSAgICAiaHR0cCIsCi0gICAgImh0dHBzIiwK
LSAgICBrRmlsZVNjaGVtZSwgLy8gWWVzLCBmaWxlIHVybHMgY2FuIGhhdmUgYSBob3N0bmFtZSEK
LSAgICAiZnRwIiwKLSAgICAiZ29waGVyIiwKLSAgICAid3MiLCAvLyBXZWJTb2NrZXQuCi0gICAg
IndzcyIsIC8vIFdlYlNvY2tldCBzZWN1cmUuCi0gICAga0ZpbGVTeXN0ZW1TY2hlbWUKLX07Ci0K
LS8vIEdpdmVuIGEgc3RyaW5nIGFuZCBhIHJhbmdlIGluc2lkZSB0aGUgc3RyaW5nLCBjb21wYXJl
cyBpdCB0byB0aGUgZ2l2ZW4KLS8vIGxvd2VyLWNhc2UgfGNvbXBhcmVUb3wgYnVmZmVyLgotdGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWlubGluZSBib29sIGRvQ29tcGFyZVNjaGVt
ZUNvbXBvbmVudChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQm
IGNvbXBvbmVudCwgY29uc3QgY2hhciogY29tcGFyZVRvKQotewotICAgIGlmICghY29tcG9uZW50
LmlzTm9uRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuICFjb21wYXJlVG9bMF07IC8vIFdoZW4gY29t
cG9uZW50IGlzIGVtcHR5LCBtYXRjaCBlbXB0eSBzY2hlbWUuCi0gICAgcmV0dXJuIGxvd2VyQ2Fz
ZUVxdWFsc0FTQ0lJKCZzcGVjW2NvbXBvbmVudC5iZWdpbigpXSwgJnNwZWNbY29tcG9uZW50LmVu
ZCgpXSwgY29tcGFyZVRvKTsKLX0KLQotLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzY2hl
bWUgaWRlbnRpZmllZCBieSB8c2NoZW1lfCB3aXRoaW4gfHNwZWN8IGlzIG9uZQotLy8gb2YgdGhl
IHJlZ2lzdGVyZWQgInN0YW5kYXJkIiBzY2hlbWVzLgotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KLWJvb2wgZG9Jc1N0YW5kYXJkKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNv
bnN0IFVSTENvbXBvbmVudCYgc2NoZW1lKQotewotICAgIGlmICghc2NoZW1lLmlzTm9uRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBFbXB0eSBvciBpbnZhbGlkIHNjaGVtZXMgYXJl
IG5vbi1zdGFuZGFyZC4KLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwga051bVN0YW5kYXJkVVJM
U2NoZW1lczsgKytpKSB7Ci0gICAgICAgIGlmIChsb3dlckNhc2VFcXVhbHNBU0NJSSgmc3BlY1tz
Y2hlbWUuYmVnaW4oKV0sICZzcGVjW3NjaGVtZS5lbmQoKV0sIGtTdGFuZGFyZFVSTFNjaGVtZXNb
aV0pKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWJvb2wgZG9GaW5kQW5kQ29t
cGFyZVNjaGVtZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzdHIsIGludCBzdHJMZW5ndGgsIGNvbnN0
IGNoYXIqIGNvbXBhcmUsIFVSTENvbXBvbmVudCogZm91bmRTY2hlbWUpCi17Ci0gICAgLy8gQmVm
b3JlIGV4dHJhY3Rpbmcgc2NoZW1lLCBjYW5vbmljYWxpemUgdGhlIFVSTCB0byByZW1vdmUgYW55
IHdoaXRlc3BhY2UuCi0gICAgLy8gVGhpcyBtYXRjaGVzIHRoZSBjYW5vbmljYWxpemF0aW9uIGRv
bmUgaW4gZG9DYW5vbmljYWxpemUgZnVuY3Rpb24uCi0gICAgUmF3VVJMQnVmZmVyPENoYXJhY3Rl
clR5cGU+IHdoaXRlc3BhY2VCdWZmZXI7Ci0gICAgaW50IHNwZWNMZW5ndGg7Ci0gICAgY29uc3Qg
Q2hhcmFjdGVyVHlwZSogc3BlYyA9IFVSTENhbm9uaWNhbGl6ZXI6OnJlbW92ZVVSTFdoaXRlc3Bh
Y2Uoc3RyLCBzdHJMZW5ndGgsIHdoaXRlc3BhY2VCdWZmZXIsIHNwZWNMZW5ndGgpOwotCi0gICAg
VVJMQ29tcG9uZW50IG91clNjaGVtZTsKLSAgICBpZiAoIVVSTFBhcnNlcjo6RXh0cmFjdFNjaGVt
ZShzcGVjLCBzcGVjTGVuZ3RoLCAmb3VyU2NoZW1lKSkgewotICAgICAgICAvLyBObyBzY2hlbWUu
Ci0gICAgICAgIGlmIChmb3VuZFNjaGVtZSkKLSAgICAgICAgICAgICpmb3VuZFNjaGVtZSA9IFVS
TENvbXBvbmVudCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChmb3Vu
ZFNjaGVtZSkKLSAgICAgICAgKmZvdW5kU2NoZW1lID0gb3VyU2NoZW1lOwotICAgIHJldHVybiBk
b0NvbXBhcmVTY2hlbWVDb21wb25lbnQoc3BlYywgb3VyU2NoZW1lLCBjb21wYXJlKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWJvb2wgZG9DYW5vbmljYWxpemUoY29u
c3QgQ2hhcmFjdGVyVHlwZSogaW5TcGVjLCBpbnQgaW5TcGVjTGVuZ3RoLAotICAgICAgICAgICAg
ICAgICAgICBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqIGNoYXJzZXRDb252ZXJ0ZXIsCi0gICAg
ICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxTZWdtZW50cyYgb3Vw
dXRQYXJzZWQpCi17Ci0gICAgLy8gUmVtb3ZlIGFueSB3aGl0ZXNwYWNlIGZyb20gdGhlIG1pZGRs
ZSBvZiB0aGUgcmVsYXRpdmUgVVJMLCBwb3NzaWJseQotICAgIC8vIGNvcHlpbmcgdG8gdGhlIG5l
dyBidWZmZXIuCi0gICAgUmF3VVJMQnVmZmVyPENoYXJhY3RlclR5cGU+IHdoaXRlc3BhY2VCdWZm
ZXI7Ci0gICAgaW50IHNwZWNMZW5ndGg7Ci0gICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYyA9
IFVSTENhbm9uaWNhbGl6ZXI6OnJlbW92ZVVSTFdoaXRlc3BhY2UoaW5TcGVjLCBpblNwZWNMZW5n
dGgsIHdoaXRlc3BhY2VCdWZmZXIsIHNwZWNMZW5ndGgpOwotCi0gICAgVVJMU2VnbWVudHMgcGFy
c2VkSW5wdXQ7Ci0jaWYgT1MoV0lORE9XUykKLSAgICAvLyBGb3IgV2luZG93cywgd2UgYWxsb3cg
dGhpbmdzIHRoYXQgbG9vayBsaWtlIGFic29sdXRlIFdpbmRvd3MgcGF0aHMgdG8gYmUKLSAgICAv
LyBmaXhlZCB1cCBtYWdpY2FsbHkgdG8gZmlsZSBVUkxzLiBUaGlzIGlzIGRvbmUgZm9yIElFIGNv
bXBhdGFiaWxpdHkuIEZvcgotICAgIC8vIGV4YW1wbGUsIHRoaXMgd2lsbCBjaGFuZ2UgImM6L2Zv
byIgaW50byBhIGZpbGUgVVJMIHJhdGhlciB0aGFuIHRyZWF0aW5nCi0gICAgLy8gaXQgYXMgYSBV
Ukwgd2l0aCB0aGUgcHJvdG9jb2wgImMiLiBJdCBhbHNvIHdvcmtzIGZvciBVTkMgKCJcXGZvb1xi
YXIudHh0IikuCi0gICAgLy8gVGhlcmUgaXMgc2ltaWxhciBsb2dpYyBpbiBVUkxDYW5vbmljYWxp
emVyX3JlbGF0aXZlLmNjIGZvcgotICAgIC8vCi0gICAgLy8gRm9yIE1heCAmIFVuaXgsIHdlIGRv
bid0IGRvIHRoaXMgKHRoZSBlcXVpdmFsZW50IHdvdWxkIGJlICIvZm9vL2JhciIgd2hpY2gKLSAg
ICAvLyBoYXMgbm8gbWVhbmluZyBhcyBhbiBhYnNvbHV0ZSBwYXRoIG5hbWUuIFRoaXMgaXMgYmVj
YXVzZSBicm93c2VycyBvbiBNYWMKLSAgICAvLyAmIFVuaXggZG9uJ3QgZ2VuZXJhbGx5IGRvIHRo
aXMsIHNvIHRoZXJlIGlzIG5vIGNvbXBhdGliaWxpdHkgcmVhc29uIGZvcgotICAgIC8vIGRvaW5n
IHNvLgotICAgIGlmIChVUkxQYXJzZXI6OmRvZXNCZWdpblVOQ1BhdGgoc3BlYywgMCwgc3BlY0xl
bmd0aCwgZmFsc2UpCi0gICAgICAgIHx8IFVSTFBhcnNlcjo6ZG9lc0JlZ2luV2luZG93c0RyaXZl
U3BlYyhzcGVjLCAwLCBzcGVjTGVuZ3RoKSkgewotICAgICAgICBVUkxQYXJzZXI6OlBhcnNlRmls
ZVVSTChzcGVjLCBzcGVjTGVuZ3RoLCAmcGFyc2VkSW5wdXQpOwotICAgICAgICByZXR1cm4gVVJM
Q2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXplRmlsZVVSTChzcGVjLCBzcGVjTGVuZ3RoLCBwYXJz
ZWRJbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhcnNldENvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCAqb3VwdXRQYXJzZWQpOwotICAgIH0KLSNlbmRp
ZgotCi0gICAgVVJMQ29tcG9uZW50IHNjaGVtZTsKLSAgICBpZiAoIVVSTFBhcnNlcjo6RXh0cmFj
dFNjaGVtZShzcGVjLCBzcGVjTGVuZ3RoLCAmc2NoZW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgLy8gVGhpcyBpcyB0aGUgcGFyc2VkIHZlcnNpb24gb2YgdGhlIGlucHV0IFVSTCwg
d2UgaGF2ZSB0byBjYW5vbmljYWxpemUgaXQKLSAgICAvLyBiZWZvcmUgc3RvcmluZyBpdCBpbiBv
dXIgb2JqZWN0LgotICAgIGJvb2wgc3VjY2VzczsKLSAgICBpZiAoZG9Db21wYXJlU2NoZW1lQ29t
cG9uZW50KHNwZWMsIHNjaGVtZSwga0ZpbGVTY2hlbWUpKSB7Ci0gICAgICAgIC8vIEZpbGUgVVJM
cyBhcmUgc3BlY2lhbC4KLSAgICAgICAgVVJMUGFyc2VyOjpQYXJzZUZpbGVVUkwoc3BlYywgc3Bl
Y0xlbmd0aCwgJnBhcnNlZElucHV0KTsKLSAgICAgICAgc3VjY2VzcyA9IFVSTENhbm9uaWNhbGl6
ZXI6OkNhbm9uaWNhbGl6ZUZpbGVVUkwoc3BlYywgc3BlY0xlbmd0aCwgcGFyc2VkSW5wdXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YXJzZXRDb252ZXJ0ZXIsIG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJm91cHV0UGFyc2VkKTsKLSAgICB9IGVsc2UgaWYgKGRv
Q29tcGFyZVNjaGVtZUNvbXBvbmVudChzcGVjLCBzY2hlbWUsIGtGaWxlU3lzdGVtU2NoZW1lKSkg
ewotICAgICAgICAvLyBGaWxlc3lzdGVtIFVSTHMgYXJlIHNwZWNpYWwuCi0gICAgICAgIFVSTFBh
cnNlcjo6UGFyc2VGaWxlU3lzdGVtVVJMKHNwZWMsIHNwZWNMZW5ndGgsICZwYXJzZWRJbnB1dCk7
Ci0gICAgICAgIHN1Y2Nlc3MgPSBVUkxDYW5vbmljYWxpemVyOjpjYW5vbmljYWxpemVGaWxlU3lz
dGVtVVJMKHNwZWMsIHBhcnNlZElucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0Q29udmVydGVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwdXQsIG91cHV0UGFyc2VkKTsKLQotICAgIH0gZWxzZSBpZiAoZG9Jc1N0YW5kYXJkKHNwZWMs
IHNjaGVtZSkpIHsKLSAgICAgICAgLy8gQWxsICJub3JtYWwiIFVSTHMuCi0gICAgICAgIFVSTFBh
cnNlcjo6UGFyc2VTdGFuZGFyZFVSTChzcGVjLCBzcGVjTGVuZ3RoLCAmcGFyc2VkSW5wdXQpOwot
ICAgICAgICBzdWNjZXNzID0gVVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXplU3RhbmRhcmRV
Ukwoc3BlYywgc3BlY0xlbmd0aCwgcGFyc2VkSW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0Q29udmVydGVyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cHV0LCAmb3VwdXRQYXJzZWQpOwotCi0gICAgfSBlbHNlIGlmIChkb0NvbXBhcmVTY2hl
bWVDb21wb25lbnQoc3BlYywgc2NoZW1lLCBrTWFpbHRvU2NoZW1lKSkgewotICAgICAgICAvLyBN
YWlsdG8gYXJlIHRyZWF0ZWQgbGlrZSBhIHN0YW5kYXJkIHVybCB3aXRoIG9ubHkgYSBzY2hlbWUs
IHBhdGgsIHF1ZXJ5Ci0gICAgICAgIFVSTFBhcnNlcjo6UGFyc2VNYWlsdG9VUkwoc3BlYywgc3Bl
Y0xlbmd0aCwgJnBhcnNlZElucHV0KTsKLSAgICAgICAgc3VjY2VzcyA9IFVSTENhbm9uaWNhbGl6
ZXI6OmNhbm9uaWNhbGl6ZU1haWx0b1VSTChzcGVjLCBwYXJzZWRJbnB1dCwgb3V0cHV0LCBvdXB1
dFBhcnNlZCk7Ci0KLSAgICB9IGVsc2UgewotICAgICAgICAvLyAiV2VpcmQiIFVSTHMgbGlrZSBk
YXRhOiBhbmQgamF2YXNjcmlwdDoKLSAgICAgICAgVVJMUGFyc2VyOjpQYXJzZVBhdGhVUkwoc3Bl
Yywgc3BlY0xlbmd0aCwgJnBhcnNlZElucHV0KTsKLSAgICAgICAgc3VjY2VzcyA9IFVSTENhbm9u
aWNhbGl6ZXI6OmNhbm9uaWNhbGl6ZVBhdGhVUkwoc3BlYywgcGFyc2VkSW5wdXQsIG91dHB1dCwg
b3VwdXRQYXJzZWQpOwotICAgIH0KLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWJvb2wgZG9SZXNvbHZlUmVsYXRpdmUoY29uc3QgY2hh
ciogYmFzZVNwZWMsIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAotICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBpblJlbGF0aXZlLCBpbnQgaW5SZWxhdGl2
ZUxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgVVJMUXVlcnlDaGFyc2V0Q29udmVydGVy
KiBjaGFyc2V0Q29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hh
cj4mIG91dHB1dCwgVVJMU2VnbWVudHMqIG91cHV0UGFyc2VkKQotewotICAgIC8vIFJlbW92ZSBh
bnkgd2hpdGVzcGFjZSBmcm9tIHRoZSBtaWRkbGUgb2YgdGhlIHJlbGF0aXZlIFVSTCwgcG9zc2li
bHkKLSAgICAvLyBjb3B5aW5nIHRvIHRoZSBuZXcgYnVmZmVyLgotICAgIFJhd1VSTEJ1ZmZlcjxD
aGFyYWN0ZXJUeXBlPiB3aGl0ZXNwYWNlQnVmZmVyOwotICAgIGludCByZWxhdGl2ZUxlbmd0aDsK
LSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiByZWxhdGl2ZSA9IFVSTENhbm9uaWNhbGl6ZXI6OnJl
bW92ZVVSTFdoaXRlc3BhY2UoaW5SZWxhdGl2ZSwgaW5SZWxhdGl2ZUxlbmd0aCwgd2hpdGVzcGFj
ZUJ1ZmZlciwgcmVsYXRpdmVMZW5ndGgpOwotCi0gICAgLy8gU2VlIGlmIG91ciBiYXNlIFVSTCBz
aG91bGQgYmUgdHJlYXRlZCBhcyAic3RhbmRhcmQiLgotICAgIGJvb2wgc3RhbmRhcmRCYXNlU2No
ZW1lID0gYmFzZVBhcnNlZC5zY2hlbWUuaXNOb25FbXB0eSgpICYmIGRvSXNTdGFuZGFyZChiYXNl
U3BlYywgYmFzZVBhcnNlZC5zY2hlbWUpOwotCi0gICAgYm9vbCBpc1JlbGF0aXZlOwotICAgIFVS
TENvbXBvbmVudCByZWxhdGl2ZUNvbXBvbmVudDsKLSAgICBpZiAoIVVSTENhbm9uaWNhbGl6ZXI6
OmlzUmVsYXRpdmVVUkwoYmFzZVNwZWMsIGJhc2VQYXJzZWQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLCByZWxhdGl2ZUxlbmd0aCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmRCYXNlU2NoZW1lLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlbGF0aXZlLCByZWxhdGl2
ZUNvbXBvbmVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gRXJyb3IgcmVzb2x2aW5nLgot
Ci0gICAgaWYgKGlzUmVsYXRpdmUpIHsKLSAgICAgICAgLy8gUmVsYXRpdmUsIHJlc29sdmUgYW5k
IGNhbm9uaWNhbGl6ZS4KLSAgICAgICAgYm9vbCBmaWxlQmFzZVNjaGVtZSA9IGJhc2VQYXJzZWQu
c2NoZW1lLmlzTm9uRW1wdHkoKSAmJiBkb0NvbXBhcmVTY2hlbWVDb21wb25lbnQoYmFzZVNwZWMs
IGJhc2VQYXJzZWQuc2NoZW1lLCBrRmlsZVNjaGVtZSk7Ci0gICAgICAgIHJldHVybiBVUkxDYW5v
bmljYWxpemVyOjpyZXNvbHZlUmVsYXRpdmVVUkwoYmFzZVNwZWMsIGJhc2VQYXJzZWQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUJhc2VT
Y2hlbWUsIHJlbGF0aXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlbGF0aXZlQ29tcG9uZW50LCBjaGFyc2V0Q29udmVydGVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgb3Vw
dXRQYXJzZWQpOwotICAgIH0KLQotICAgIC8vIE5vdCByZWxhdGl2ZSwgY2Fub25pY2FsaXplIHRo
ZSBpbnB1dC4KLSAgICByZXR1cm4gZG9DYW5vbmljYWxpemUocmVsYXRpdmUsIHJlbGF0aXZlTGVu
Z3RoLCBjaGFyc2V0Q29udmVydGVyLCBvdXRwdXQsICpvdXB1dFBhcnNlZCk7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1ib29sIGRvUmVwbGFjZUNvbXBvbmVudHMoY29u
c3QgY2hhciogc3BlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3BlY0xlbmd0aCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VtZW50
czxDaGFyYWN0ZXJUeXBlPiYgcmVwbGFjZW1lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAg
IFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciogY2hhcnNldENvbnZlcnRlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBVUkxTZWdtZW50cyYgb3V0cHV0UGFyc2VkKQotewotICAgIC8vIElmIHRoZSBzY2hl
bWUgaXMgb3ZlcnJpZGRlbiwganVzdCBkbyBhIHNpbXBsZSBzdHJpbmcgc3Vic3RpdHV0aW9uIGFu
ZAotICAgIC8vIHJlcGFyc2UgdGhlIHdob2xlIHRoaW5nLiBUaGVyZSBhcmUgbG90cyBvZiBlZGdl
IGNhc2VzIHRoYXQgd2UgcmVhbGx5IGRvbid0Ci0gICAgLy8gd2FudCB0byBkZWFsIHdpdGguIExp
a2Ugd2hhdCBoYXBwZW5zIGlmIEkgcmVwbGFjZSAiaHR0cDovL2U6ODA4MC9mb28iCi0gICAgLy8g
d2l0aCBhIGZpbGUuIERvZXMgaXQgYmVjb21lICJmaWxlOi8vL0U6LzgwODAvZm9vIiB3aGVyZSB0
aGUgcG9ydCBudW1iZXIKLSAgICAvLyBiZWNvbWVzIHBhcnQgb2YgdGhlIHBhdGg/IFBhcnNpbmcg
dGhhdCBzdHJpbmcgYXMgYSBmaWxlIFVSTCBzYXlzICJ5ZXMiCi0gICAgLy8gYnV0IGFsbW9zdCBu
byBzYW5lIHJ1bGUgZm9yIGRlYWxpbmcgd2l0aCB0aGUgY29tcG9uZW50cyBpbmRpdmlkdWFsbHkg
d291bGQKLSAgICAvLyBjb21lIHVwIHdpdGggdGhhdC4KLSAgICAvLwotICAgIC8vIFdoeSBhbGxv
dyB0aGVzZSBjcmF6eSBjYXNlcyBhdCBhbGw/IFByb2dyYW1hdGljYWxseSwgdGhlcmUgaXMgYWxt
b3N0IG5vCi0gICAgLy8gY2FzZSBmb3IgcmVwbGFjaW5nIHRoZSBzY2hlbWUuIFRoZSBtb3N0IGNv
bW1vbiBjYXNlIGZvciBoaXR0aW5nIHRoaXMgaXMKLSAgICAvLyBpbiBKUyB3aGVuIGJ1aWxkaW5n
IHVwIGEgVVJMIHVzaW5nIHRoZSBsb2NhdGlvbiBvYmplY3QuIEluIHRoaXMgY2FzZSwgdGhlCi0g
ICAgLy8gSlMgY29kZSBleHBlY3RzIHRoZSBzdHJpbmcgc3Vic3RpdHV0aW9uIGJlaGF2aW9yOgot
ICAgIC8vICAgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwOC9XRC1odG1sNS0yMDA4MDYxMC9zdHJ1
Y3R1cmVkLmh0bWwjY29tbW9uMwotICAgIGlmIChyZXBsYWNlbWVudHMuSXNTY2hlbWVPdmVycmlk
ZGVuKCkpIHsKLSAgICAgICAgLy8gQ2Fub25pY2FsaXplIHRoZSBuZXcgc2NoZW1lIHNvIGl0IGlz
IDgtYml0IGFuZCBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGgKLSAgICAgICAgLy8gdGhlIGV4aXN0
aW5nIHNwZWMuCi0gICAgICAgIFJhd1VSTEJ1ZmZlcjxjaGFyLCAxMjg+IHNjaGVtZV9yZXBsYWNl
ZDsKLSAgICAgICAgVVJMQ29tcG9uZW50IHNjaGVtZVJlcGxhY2VkUGFyc2VkOwotICAgICAgICBV
UkxDYW5vbmljYWxpemVyOjpjYW5vbmljYWxpemVTY2hlbWUocmVwbGFjZW1lbnRzLnNvdXJjZXMo
KS5zY2hlbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXBsYWNlbWVudHMuY29tcG9uZW50cygpLnNjaGVtZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNjaGVtZV9yZXBsYWNlZCwgc2NoZW1lUmVwbGFjZWRQYXJz
ZWQpOwotCi0gICAgICAgIC8vIFdlIGNhbiBhc3N1bWUgdGhhdCB0aGUgaW5wdXQgaXMgY2Fub25p
Y2FsaXplZCwgd2hpY2ggbWVhbnMgaXQgYWx3YXlzIGhhcwotICAgICAgICAvLyBhIGNvbG9uIGFm
dGVyIHRoZSBzY2hlbWUgKG9yIHdoZXJlIHRoZSBzY2hlbWUgd291bGQgYmUpLgotICAgICAgICBp
bnQgc3BlY0FmdGVyQ29sb24gPSBwYXJzZWQuc2NoZW1lLmlzVmFsaWQoKSA/IHBhcnNlZC5zY2hl
bWUuZW5kKCkgKyAxCi0gICAgICAgIDogMTsKLSAgICAgICAgaWYgKHNwZWNMZW5ndGggLSBzcGVj
QWZ0ZXJDb2xvbiA+IDApIHsKLSAgICAgICAgICAgIHNjaGVtZV9yZXBsYWNlZC5hcHBlbmQoJnNw
ZWNbc3BlY0FmdGVyQ29sb25dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
cGVjTGVuZ3RoIC0gc3BlY0FmdGVyQ29sb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2Ug
bm93IG5lZWQgdG8gY29tcGxldGVseSByZS1wYXJzZSB0aGUgcmVzdWx0aW5nIHN0cmluZyBzaW5j
ZSBpdHMgbWVhbmluZwotICAgICAgICAvLyBtYXkgaGF2ZSBjaGFuZ2VkIHdpdGggdGhlIGRpZmZl
cmVudCBzY2hlbWUuCi0gICAgICAgIFJhd1VSTEJ1ZmZlcjxjaGFyLCAxMjg+IHJlY2Fub25pY2Fs
aXplZDsKLSAgICAgICAgVVJMU2VnbWVudHMgcmVjYW5vbmljYWxpemVkUGFyc2VkOwotICAgICAg
ICBkb0Nhbm9uaWNhbGl6ZShzY2hlbWVfcmVwbGFjZWQuZGF0YSgpLCBzY2hlbWVfcmVwbGFjZWQu
bGVuZ3RoKCksCi0gICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXRDb252ZXJ0ZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgIHJlY2Fub25pY2FsaXplZCwgcmVjYW5vbmljYWxpemVkUGFyc2Vk
KTsKLQotICAgICAgICAvLyBSZWN1cnNlIHVzaW5nIHRoZSB2ZXJzaW9uIHdpdGggdGhlIHNjaGVt
ZSBhbHJlYWR5IHJlcGxhY2VkLiBUaGlzIHdpbGwgbm93Ci0gICAgICAgIC8vIHVzZSB0aGUgcmVw
bGFjZW1lbnQgcnVsZXMgZm9yIHRoZSBuZXcgc2NoZW1lLgotICAgICAgICAvLwotICAgICAgICAv
LyBXYXJuaW5nOiB0aGlzIGNvZGUgYXNzdW1lcyB0aGF0IFJlcGxhY2VDb21wb25lbnRzIHdpbGwg
cmUtY2hlY2sgYWxsCi0gICAgICAgIC8vIGNvbXBvbmVudHMgZm9yIHZhbGlkaXR5LiBUaGlzIGlz
IGJlY2F1c2Ugd2UgY2FuJ3QgZmFpbCBpZiBEb0Nhbm9uaWNhbGl6ZQotICAgICAgICAvLyBmYWls
ZWQgYWJvdmUgc2luY2UgdGhlb3JldGljYWxseSB0aGUgdGhpbmcgbWFraW5nIGl0IGZhaWwgY291
bGQgYmUKLSAgICAgICAgLy8gZ2V0dGluZyByZXBsYWNlZCBoZXJlLiBJZiBSZXBsYWNlQ29tcG9u
ZW50cyBkaWRuJ3QgcmUtY2hlY2sgZXZlcnl0aGluZywKLSAgICAgICAgLy8gd2Ugd291bGRuJ3Qg
a25vdyBpZiBzb21ldGhpbmcgKm5vdCogZ2V0dGluZyByZXBsYWNlZCBpcyBhIHByb2JsZW0uCi0g
ICAgICAgIC8vIElmIHRoZSBzY2hlbWUtc3BlY2lmaWMgcmVwbGFjZXJzIGFyZSBtYWRlIG1vcmUg
aW50ZWxsaWdlbnQgc28gdGhleSBkb24ndAotICAgICAgICAvLyByZS1jaGVjayBldmVyeXRoaW5n
LCB3ZSBzaG91bGQgaW5zdGVhZCByZWNhbm9uaWNhbGl6ZSB0aGUgd2hvbGUgdGhpbmcKLSAgICAg
ICAgLy8gYWZ0ZXIgdGhpcyBjYWxsIHRvIGNoZWNrIHZhbGlkaXR5ICh0aGlzIGFzc3VtZXMgcmVw
bGFjaW5nIHRoZSBzY2hlbWUgaXMKLSAgICAgICAgLy8gbXVjaCBtdWNoIGxlc3MgY29tbW9uIHRo
YW4gb3RoZXIgdHlwZXMgb2YgcmVwbGFjZW1lbnRzLCBsaWtlIGNsZWFyaW5nIHRoZQotICAgICAg
ICAvLyByZWYpLgotICAgICAgICBVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM8Q2hhcmFj
dGVyVHlwZT4gcmVwbGFjZW1lbnRzTm9TY2hlbWUgPSByZXBsYWNlbWVudHM7Ci0gICAgICAgIHJl
cGxhY2VtZW50c05vU2NoZW1lLlNldFNjaGVtZSgwLCBVUkxDb21wb25lbnQoKSk7Ci0gICAgICAg
IHJldHVybiBkb1JlcGxhY2VDb21wb25lbnRzKHJlY2Fub25pY2FsaXplZC5kYXRhKCksIHJlY2Fu
b25pY2FsaXplZC5sZW5ndGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVjYW5vbmljYWxpemVkUGFyc2VkLCByZXBsYWNlbWVudHNOb1NjaGVtZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnNldENvbnZlcnRlciwgb3V0cHV0LCBvdXRwdXRQ
YXJzZWQpOwotICAgIH0KLQotICAgIC8vIElmIHdlIGdldCBoZXJlLCB0aGVuIHdlIGtub3cgdGhl
IHNjaGVtZSBkb2Vzbid0IG5lZWQgdG8gYmUgcmVwbGFjZWQsIHNvIGNhbgotICAgIC8vIGp1c3Qg
a2V5IG9mZiB0aGUgc2NoZW1lIGluIHRoZSBzcGVjIHRvIGtub3cgaG93IHRvIGRvIHRoZSByZXBs
YWNlbWVudHMuCi0gICAgaWYgKGRvQ29tcGFyZVNjaGVtZUNvbXBvbmVudChzcGVjLCBwYXJzZWQu
c2NoZW1lLCBrRmlsZVNjaGVtZSkpIHsKLSAgICAgICAgcmV0dXJuIFVSTENhbm9uaWNhbGl6ZXI6
OlJlcGxhY2VGaWxlVVJMKHNwZWMsIHBhcnNlZCwgcmVwbGFjZW1lbnRzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnNldENvbnZlcnRlciwgb3V0
cHV0LCAmb3V0cHV0UGFyc2VkKTsKLSAgICB9Ci0gICAgaWYgKGRvQ29tcGFyZVNjaGVtZUNvbXBv
bmVudChzcGVjLCBwYXJzZWQuc2NoZW1lLCBrRmlsZVN5c3RlbVNjaGVtZSkpIHsKLSAgICAgICAg
cmV0dXJuIFVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VGaWxlU3lzdGVtVVJMKHNwZWMsIHBhcnNl
ZCwgcmVwbGFjZW1lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhcnNldENvbnZlcnRlciwgb3V0cHV0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dHB1dFBhcnNlZCk7Ci0g
ICAgfQotICAgIGlmIChkb0lzU3RhbmRhcmQoc3BlYywgcGFyc2VkLnNjaGVtZSkpIHsKLSAgICAg
ICAgcmV0dXJuIFVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VTdGFuZGFyZFVSTChzcGVjLCBwYXJz
ZWQsIHJlcGxhY2VtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyc2V0Q29udmVydGVyLCBvdXRwdXQsICZvdXRwdXRQYXJzZWQpOwot
ICAgIH0KLSAgICBpZiAoZG9Db21wYXJlU2NoZW1lQ29tcG9uZW50KHNwZWMsIHBhcnNlZC5zY2hl
bWUsIGtNYWlsdG9TY2hlbWUpKQotICAgICAgICByZXR1cm4gVVJMQ2Fub25pY2FsaXplcjo6cmVw
bGFjZU1haWx0b1VSTChzcGVjLCBwYXJzZWQsIHJlcGxhY2VtZW50cywgb3V0cHV0LCBvdXRwdXRQ
YXJzZWQpOwotCi0gICAgLy8gRGVmYXVsdCBpcyBhIHBhdGggVVJMLgotICAgIHJldHVybiBVUkxD
YW5vbmljYWxpemVyOjpSZXBsYWNlUGF0aFVSTChzcGVjLCBwYXJzZWQsIHJlcGxhY2VtZW50cywg
b3V0cHV0LCAmb3V0cHV0UGFyc2VkKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UKLQotYm9vbCBpc1N0
YW5kYXJkKGNvbnN0IExDaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHNjaGVtZSkKLXsK
LSAgICByZXR1cm4gZG9Jc1N0YW5kYXJkKHNwZWMsIHNjaGVtZSk7Ci19Ci0KLWJvb2wgaXNTdGFu
ZGFyZChjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBzY2hlbWUpCi17Ci0g
ICAgcmV0dXJuIGRvSXNTdGFuZGFyZChzcGVjLCBzY2hlbWUpOwotfQotCi1ib29sIEZpbmRBbmRD
b21wYXJlU2NoZW1lKGNvbnN0IGNoYXIqIHN0ciwgaW50IHN0ckxlbmd0aCwgY29uc3QgY2hhciog
Y29tcGFyZSwgVVJMQ29tcG9uZW50KiBmb3VuZFNjaGVtZSkKLXsKLSAgICByZXR1cm4gZG9GaW5k
QW5kQ29tcGFyZVNjaGVtZShzdHIsIHN0ckxlbmd0aCwgY29tcGFyZSwgZm91bmRTY2hlbWUpOwot
fQotCi1ib29sIEZpbmRBbmRDb21wYXJlU2NoZW1lKGNvbnN0IFVDaGFyKiBzdHIsIGludCBzdHJM
ZW5ndGgsIGNvbnN0IGNoYXIqIGNvbXBhcmUsIFVSTENvbXBvbmVudCogZm91bmRTY2hlbWUpCi17
Ci0gICAgcmV0dXJuIGRvRmluZEFuZENvbXBhcmVTY2hlbWUoc3RyLCBzdHJMZW5ndGgsIGNvbXBh
cmUsIGZvdW5kU2NoZW1lKTsKLX0KLQotYm9vbCBjYW5vbmljYWxpemUoY29uc3QgY2hhciogc3Bl
YywgaW50IHNwZWNMZW5ndGgsCi0gICAgICAgICAgICAgICAgICBVUkxRdWVyeUNoYXJzZXRDb252
ZXJ0ZXIqIGNoYXJzZXRDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hh
cj4mIG91dHB1dCwgVVJMU2VnbWVudHMmIG91cHV0UGFyc2VkKQotewotICAgIHJldHVybiBkb0Nh
bm9uaWNhbGl6ZShzcGVjLCBzcGVjTGVuZ3RoLCBjaGFyc2V0Q29udmVydGVyLCBvdXRwdXQsIG91
cHV0UGFyc2VkKTsKLX0KLQotYm9vbCBjYW5vbmljYWxpemUoY29uc3QgVUNoYXIqIHNwZWMsIGlu
dCBzcGVjTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgVVJMUXVlcnlDaGFyc2V0Q29udmVydGVy
KiBjaGFyc2V0Q29udmVydGVyLAotICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBv
dXRwdXQsIFVSTFNlZ21lbnRzJiBvdXB1dFBhcnNlZCkKLXsKLSAgICByZXR1cm4gZG9DYW5vbmlj
YWxpemUoc3BlYywgc3BlY0xlbmd0aCwgY2hhcnNldENvbnZlcnRlciwgb3V0cHV0LCBvdXB1dFBh
cnNlZCk7Ci19Ci0KLWJvb2wgcmVzb2x2ZVJlbGF0aXZlKGNvbnN0IGNoYXIqIGJhc2VTcGVjLCBj
b25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIHJlbGF0aXZlLCBpbnQgcmVsYXRpdmVMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAg
ICBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqIGNoYXJzZXRDb252ZXJ0ZXIsCi0gICAgICAgICAg
ICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVudHMqIG91cHV0UGFy
c2VkKQotewotICAgIHJldHVybiBkb1Jlc29sdmVSZWxhdGl2ZShiYXNlU3BlYywgYmFzZVBhcnNl
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmUsIHJlbGF0aXZlTGVuZ3Ro
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0Q29udmVydGVyLCBvdXRwdXQs
IG91cHV0UGFyc2VkKTsKLX0KLQotYm9vbCByZXNvbHZlUmVsYXRpdmUoY29uc3QgY2hhciogYmFz
ZVNwZWMsIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAotICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVUNoYXIqIHJlbGF0aXZlLCBpbnQgcmVsYXRpdmVMZW5ndGgsCi0gICAgICAgICAg
ICAgICAgICAgICBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqIGNoYXJzZXRDb252ZXJ0ZXIsCi0g
ICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVudHMq
IG91cHV0UGFyc2VkKQotewotICAgIHJldHVybiBkb1Jlc29sdmVSZWxhdGl2ZShiYXNlU3BlYywg
YmFzZVBhcnNlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmUsIHJlbGF0
aXZlTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0Q29udmVydGVy
LCBvdXRwdXQsIG91cHV0UGFyc2VkKTsKLX0KLQotYm9vbCBSZXBsYWNlQ29tcG9uZW50cyhjb25z
dCBjaGFyKiBzcGVjLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3BlY0xlbmd0aCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNlZCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZW1lbnRzPGNoYXI+
JiByZXBsYWNlbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgIFVSTFF1ZXJ5Q2hhcnNldENv
bnZlcnRlciogY2hhcnNldENvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVm
ZmVyPGNoYXI+JiBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBv
dXRwdXRQYXJzZWQpCi17Ci0gICAgcmV0dXJuIGRvUmVwbGFjZUNvbXBvbmVudHMoc3BlYywgc3Bl
Y0xlbmd0aCwgcGFyc2VkLCByZXBsYWNlbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhcnNldENvbnZlcnRlciwgb3V0cHV0LCAqb3V0cHV0UGFyc2VkKTsKLX0KLQotYm9v
bCBSZXBsYWNlQ29tcG9uZW50cyhjb25zdCBjaGFyKiBzcGVjLAotICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgc3BlY0xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMU2Vn
bWVudHMmIHBhcnNlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ2Fub25pY2Fs
aXplcjo6UmVwbGFjZW1lbnRzPFVDaGFyPiYgcmVwbGFjZW1lbnRzLAotICAgICAgICAgICAgICAg
ICAgICAgICBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqIGNoYXJzZXRDb252ZXJ0ZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAotICAgICAgICAgICAg
ICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKQotewotICAgIHJldHVybiBkb1Jl
cGxhY2VDb21wb25lbnRzKHNwZWMsIHNwZWNMZW5ndGgsIHBhcnNlZCwgcmVwbGFjZW1lbnRzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXRDb252ZXJ0ZXIsIG91dHB1dCwg
Km91dHB1dFBhcnNlZCk7Ci19Ci0KLXZvaWQgRGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGNvbnN0
IGNoYXIqIGlucHV0LCBpbnQgbGVuZ3RoLCBVUkxCdWZmZXI8VUNoYXI+JiBvdXRwdXQpCi17Ci0g
ICAgUmF3VVJMQnVmZmVyPGNoYXI+IHVuZXNjYXBlZENoYXJzOwotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKGlucHV0W2ldID09ICclJykgewotICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciBjaDsKLSAgICAgICAgICAgIGlmIChVUkxDYW5vbmljYWxp
emVyOjpEZWNvZGVFc2NhcGVkKGlucHV0LCAmaSwgbGVuZ3RoLCAmY2gpKQotICAgICAgICAgICAg
ICAgIHVuZXNjYXBlZENoYXJzLmFwcGVuZChjaCk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAvLyBJbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZSwgY29weSB0aGUgcGVyY2VudCBs
aXRlcmFsLgotICAgICAgICAgICAgICAgIHVuZXNjYXBlZENoYXJzLmFwcGVuZCgnJScpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gUmVndWxhciBub24t
ZXNjYXBlZCA4LWJpdCBjaGFyYWN0ZXIuCi0gICAgICAgICAgICB1bmVzY2FwZWRDaGFycy5hcHBl
bmQoaW5wdXRbaV0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ29udmVydCB0aGF0IDgt
Yml0IHRvIFVURi0xNi4gSXQncyBub3QgY2xlYXIgSUUgZG9lcyB0aGlzIGF0IGFsbCB0bwotICAg
IC8vIEphdmFTY3JpcHQgVVJMcywgYnV0IEZpcmVmb3ggYW5kIFNhZmFyaSBkby4KLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHVuZXNjYXBlZENoYXJzLmxlbmd0aCgpOyBpKyspIHsKLSAgICAgICAg
dW5zaWduZWQgY2hhciB1Y2ggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPih1bmVzY2FwZWRD
aGFycy5hdChpKSk7Ci0gICAgICAgIGlmICh1Y2ggPCAweDgwKSB7Ci0gICAgICAgICAgICAvLyBO
b24tVVRGLTgsIGp1c3QgYXBwZW5kIGRpcmVjdGx5Ci0gICAgICAgICAgICBvdXRwdXQuYXBwZW5k
KHVjaCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBuZXh0X2NoIHdpbGwgcG9p
bnQgdG8gdGhlIGxhc3QgY2hhcmFjdGVyIG9mIHRoZSBkZWNvZGVkCi0gICAgICAgICAgICAvLyBj
aGFyYWN0ZXIuCi0gICAgICAgICAgICBpbnQgbmV4dENoYXJhY3RlciA9IGk7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBjb2RlUG9pbnQ7Ci0gICAgICAgICAgICBpZiAoVVJMQ2Fub25pY2FsaXplcjo6
cmVhZFVURkNoYXIodW5lc2NhcGVkQ2hhcnMuZGF0YSgpLCAmbmV4dENoYXJhY3RlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmVzY2FwZWRDaGFycy5s
ZW5ndGgoKSwgJmNvZGVQb2ludCkpIHsKLSAgICAgICAgICAgICAgICAvLyBWYWxpZCBVVEYtOCBj
aGFyYWN0ZXIsIGNvbnZlcnQgdG8gVVRGLTE2LgotICAgICAgICAgICAgICAgIFVSTENhbm9uaWNh
bGl6ZXI6OkFwcGVuZFVURjE2VmFsdWUoY29kZVBvaW50LCBvdXRwdXQpOwotICAgICAgICAgICAg
ICAgIGkgPSBuZXh0Q2hhcmFjdGVyOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IHNlcXVlbmNlcyB0aGF0IGFyZSBub3QgdmFsaWQgVVRG
LTgsIHdlIGtlZXAKLSAgICAgICAgICAgICAgICAvLyBpbnZhbGlkIGNvZGUgcG9pbnRzIGFuZCBw
cm9tb3RlIHRvIFVURi0xNi4gV2UgY29weSBhbGwgY2hhcmFjdGVycwotICAgICAgICAgICAgICAg
IC8vIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIGVuZCBvZiB0aGUgaWRlbnRpZmll
ZCBzZXF1ZW5jZS4KLSAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IG5leHRDaGFyYWN0ZXIpIHsK
LSAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyPih1bmVzY2FwZWRDaGFycy5hdChpKSkpOwotICAgICAgICAgICAgICAgICAgICBpKys7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4odW5lc2NhcGVkQ2hhcnMuYXQoaSkpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBFbmNvZGVVUklDb21wb25lbnQoY29uc3QgY2hh
ciogaW5wdXQsIGludCBsZW5ndGgsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQotewotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBj
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oaW5wdXRbaV0pOwotICAgICAgICBpZiAoVVJM
Q2hhcmFjdGVyVHlwZXM6OmlzQ29tcG9uZW50Q2hhcihjKSkKLSAgICAgICAgICAgIG91dHB1dC5h
cHBlbmQoYyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFVSTENhbm9uaWNhbGl6ZXI6OmFw
cGVuZFVSTEVzY2FwZWRDaGFyYWN0ZXIoYywgb3V0cHV0KTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29t
cGFyZVNjaGVtZUNvbXBvbmVudChjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQm
IGNvbXBvbmVudCwgY29uc3QgY2hhciogY29tcGFyZVRvKQotewotICAgIHJldHVybiBkb0NvbXBh
cmVTY2hlbWVDb21wb25lbnQoc3BlYywgY29tcG9uZW50LCBjb21wYXJlVG8pOwotfQotCi1ib29s
IENvbXBhcmVTY2hlbWVDb21wb25lbnQoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBv
bmVudCYgY29tcG9uZW50LCBjb25zdCBjaGFyKiBjb21wYXJlVG8pCi17Ci0gICAgcmV0dXJuIGRv
Q29tcGFyZVNjaGVtZUNvbXBvbmVudChzcGVjLCBjb21wb25lbnQsIGNvbXBhcmVUbyk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFVSTFV0aWxpdGllcwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2Vu
ZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VS
TFV0aWwuaCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMVXRpbC5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBiYmM1MTFjZDc2MDhlNjRlYWFlYTU4NDE0ZTM4Mzk3OWUxYzdjOGQ2
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
VEYvd3RmL3VybC9zcmMvVVJMVXRpbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgMjAwNyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVVJM
VXRpbF9oCi0jZGVmaW5lIFVSTFV0aWxfaAotCi0jaW5jbHVkZSAiVVJMQ2Fub24uaCIKLSNpbmNs
dWRlICJVUkxQYXJzZS5oIgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KLSNpbmNs
dWRlIDx3dGYvdXJsL2FwaS9VUkxCdWZmZXIuaD4KLQotI2lmIFVTRShXVEZVUkwpCi0KLW5hbWVz
cGFjZSBXVEYgewotCi1jbGFzcyBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXI7Ci0KLW5hbWVzcGFj
ZSBVUkxVdGlsaXRpZXMgewotCi0vLyBMb2NhdGVzIHRoZSBzY2hlbWUgaW4gdGhlIGdpdmVuIHN0
cmluZyBhbmQgcGxhY2VzIGl0IGludG8gfGZvdW5kU2NoZW1lfCwKLS8vIHdoaWNoIG1heSBiZSAw
IHRvIGluZGljYXRlIHRoZSBjYWxsZXIgZG9lcyBub3QgY2FyZSBhYm91dCB0aGUgcmFuZ2UuCi0v
LwotLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiB8Y29tcGFyZXwgc2NoZW1lIG1hdGNoZXMg
dGhlIHNjaGVtZSBmb3VuZCBpbiB0aGUKLS8vIGlucHV0IChpZiBhbnkpLiBUaGUgfGNvbXBhcmV8
IHNjaGVtZSBtdXN0IGJlIGEgdmFsaWQgY2Fub25pY2FsIHNjaGVtZSBvcgotLy8gdGhlIHJlc3Vs
dCBvZiB0aGUgY29tcGFyaXNvbiBpcyB1bmRlZmluZWQuCi1ib29sIEZpbmRBbmRDb21wYXJlU2No
ZW1lKGNvbnN0IGNoYXIqIHN0ciwgaW50IHN0ckxlbmd0aCwgY29uc3QgY2hhciogY29tcGFyZSwg
VVJMQ29tcG9uZW50KiBmb3VuZFNjaGVtZSk7Ci1ib29sIEZpbmRBbmRDb21wYXJlU2NoZW1lKGNv
bnN0IFVDaGFyKiBzdHIsIGludCBzdHJMZW5ndGgsIGNvbnN0IGNoYXIqIGNvbXBhcmUsIFVSTENv
bXBvbmVudCogZm91bmRTY2hlbWUpOwotCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHN0
cmluZyByZXByZXNlbnRzIGEgc3RhbmRhcmQgVVJMLiBUaGlzIG1lYW5zIHRoYXQKLS8vIGVpdGhl
ciB0aGUgc2NoZW1lIGlzIGluIHRoZSBsaXN0IG9mIGtub3duIHN0YW5kYXJkIHNjaGVtZXMuCi1i
b29sIGlzU3RhbmRhcmQoY29uc3QgTENoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgc2No
ZW1lKTsKLWJvb2wgaXNTdGFuZGFyZChjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9u
ZW50JiBzY2hlbWUpOwotaW5saW5lIGJvb2wgaXNTdGFuZGFyZChjb25zdCBjaGFyKiBzcGVjLCBj
b25zdCBVUkxDb21wb25lbnQmIHNjaGVtZSkgeyByZXR1cm4gaXNTdGFuZGFyZChyZWludGVycHJl
dF9jYXN0PGNvbnN0IExDaGFyKj4oc3BlYyksIHNjaGVtZSk7IH0KLQotLy8gVVJMIGxpYnJhcnkg
d3JhcHBlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0vLyBQYXJzZXMgdGhlIGdpdmVuIHNwZWMgYWNjb3JkaW5nIHRvIHRoZSBleHRy
YWN0ZWQgc2NoZW1lIHR5cGUuIE5vcm1hbCB1c2VycwotLy8gc2hvdWxkIHVzZSB0aGUgVVJMIG9i
amVjdCwgYWx0aG91Z2ggdGhpcyBtYXkgYmUgdXNlZnVsIGlmIHBlcmZvcm1hbmNlIGlzCi0vLyBj
cml0aWNhbCBhbmQgeW91IGRvbid0IHdhbnQgdG8gZG8gdGhlIGhlYXAgYWxsb2NhdGlvbiBmb3Ig
dGhlIHN0ZDo6c3RyaW5nLgotLy8KLS8vIEFzIHdpdGggdGhlIFVSTENhbm9uaWNhbGl6ZXI6OkNh
bm9uaWNhbGl6ZSogZnVuY3Rpb25zLCB0aGUgY2hhcnNldCBjb252ZXJ0ZXIgY2FuCi0vLyBiZSAw
IHRvIHVzZSBVVEYtOCAoaXQgd2lsbCBiZSBmYXN0ZXIgaW4gdGhpcyBjYXNlKS4KLS8vCi0vLyBS
ZXR1cm5zIHRydWUgaWYgYSB2YWxpZCBVUkwgd2FzIHByb2R1Y2VkLCBmYWxzZSBpZiBub3QuIE9u
IGZhaWx1cmUsIHRoZQotLy8gb3V0cHV0IGFuZCBwYXJzZWQgc3RydWN0dXJlcyB3aWxsIHN0aWxs
IGJlIGZpbGxlZCBhbmQgd2lsbCBiZSBjb25zaXN0ZW50LAotLy8gYnV0IHRoZXkgd2lsbCBub3Qg
cmVwcmVzZW50IGEgbG9hZGFibGUgVVJMLgotYm9vbCBjYW5vbmljYWxpemUoY29uc3QgY2hhciog
c3BlYywgaW50IHNwZWNMZW5ndGgsIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciosCi0gICAgICAg
ICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxTZWdtZW50cyYgb3VwdXRQYXJzZWQpOwot
Ym9vbCBjYW5vbmljYWxpemUoY29uc3QgVUNoYXIqIHNwZWMsIGludCBzcGVjTGVuZ3RoLCBVUkxR
dWVyeUNoYXJzZXRDb252ZXJ0ZXIqLAotICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+
JiwgVVJMU2VnbWVudHMmIG91cHV0UGFyc2VkKTsKLQotLy8gUmVzb2x2ZXMgYSBwb3RlbnRpYWxs
eSByZWxhdGl2ZSBVUkwgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIHBhcnNlZCBiYXNlIFVSTC4KLS8v
IFRoZSBiYXNlIE1VU1QgYmUgdmFsaWQuIFRoZSByZXN1bHRpbmcgY2Fub25pY2FsIFVSTCBhbmQg
cGFyc2VkIGluZm9ybWF0aW9uCi0vLyB3aWxsIGJlIHBsYWNlZCBpbiB0byB0aGUgZ2l2ZW4gb3V0
IHZhcmlhYmxlcy4KLS8vCi0vLyBUaGUgcmVsYXRpdmUgbmVlZCBub3QgYmUgcmVsYXRpdmUuIElm
IHdlIGRpc2NvdmVyIHRoYXQgaXQncyBhYnNvbHV0ZSwgdGhpcwotLy8gd2lsbCBwcm9kdWNlIGEg
Y2Fub25pY2FsIHZlcnNpb24gb2YgdGhhdCBVUkwuIFNlZSBDYW5vbmljYWxpemUoKSBmb3IgbW9y
ZQotLy8gYWJvdXQgdGhlIGNoYXJzZXRDb252ZXJ0ZXIuCi0vLwotLy8gUmV0dXJucyB0cnVlIGlm
IHRoZSBvdXRwdXQgaXMgdmFsaWQsIGZhbHNlIGlmIHRoZSBpbnB1dCBjb3VsZCBub3QgcHJvZHVj
ZQotLy8gYSB2YWxpZCBVUkwuCi1ib29sIHJlc29sdmVSZWxhdGl2ZShjb25zdCBjaGFyKiBiYXNl
U3BlYywgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCi0gICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiByZWxhdGl2ZSwgaW50IHJlbGF0aXZlTGVuZ3RoLAotICAgICAgICAgICAg
ICAgICAgICAgVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyKiwKLSAgICAgICAgICAgICAgICAgICAg
IFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTFNlZ21lbnRzKiBvdXB1dFBhcnNlZCk7Ci1ib29sIHJlc29s
dmVSZWxhdGl2ZShjb25zdCBjaGFyKiBiYXNlU3BlYywgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQ
YXJzZWQsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogcmVsYXRpdmUsIGludCBy
ZWxhdGl2ZUxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgIFVSTFF1ZXJ5Q2hhcnNldENvbnZl
cnRlciosCi0gICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxTZWdtZW50
cyogb3VwdXRQYXJzZWQpOwotCi0vLyBSZXBsYWNlcyBjb21wb25lbnRzIGluIHRoZSBnaXZlbiBW
QUxJRCBpbnB1dCB1cmwuIFRoZSBuZXcgY2Fub25pY2FsIFVSTCBpbmZvCi0vLyBpcyB3cml0dGVu
IHRvIG91dHB1dCBhbmQgb3V0cHV0UGFyc2VkLgotLy8KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
cmVzdWx0aW5nIFVSTCBpcyB2YWxpZC4KLWJvb2wgUmVwbGFjZUNvbXBvbmVudHMoY29uc3QgY2hh
ciogc3BlYywgaW50IHNwZWNMZW5ndGgsIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsCi0gICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VtZW50czxj
aGFyPiYsCi0gICAgICAgICAgICAgICAgICAgICAgIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlcios
Ci0gICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTFNlZ21lbnRzKiBv
dXRwdXRQYXJzZWQpOwotYm9vbCBSZXBsYWNlQ29tcG9uZW50cyhjb25zdCBjaGFyKiBzcGVjLCBp
bnQgc3BlY0xlbmd0aCwgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNlZCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZW1lbnRzPFVDaGFyPiYsCi0g
ICAgICAgICAgICAgICAgICAgICAgIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciosCi0gICAgICAg
ICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJz
ZWQpOwotCi0vLyBVbmVzY2FwZXMgdGhlIGdpdmVuIHN0cmluZyB1c2luZyBVUkwgZXNjYXBpbmcg
cnVsZXMuCi12b2lkIERlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhjb25zdCBjaGFyKiBpbnB1dCwg
aW50IGxlbmd0aCwgVVJMQnVmZmVyPFVDaGFyPiYpOwotCi0vLyBFc2NhcGVzIHRoZSBnaXZlbiBz
dHJpbmcgYXMgZGVmaW5lZCBieSB0aGUgSlMgbWV0aG9kIGVuY29kZVVSSUNvbXBvbmVudC4KLS8v
IFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5j
ZS9HbG9iYWxfT2JqZWN0cy9lbmNvZGVVUklDb21wb25lbnQKLXZvaWQgRW5jb2RlVVJJQ29tcG9u
ZW50KGNvbnN0IGNoYXIqIGlucHV0LCBpbnQgbGVuZ3RoLCBVUkxCdWZmZXI8Y2hhcj4mKTsKLQot
Ci19IC8vIG5hbWVzcGFjZSBVUkxVdGlsaXRpZXMKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNl
bmRpZiAvLyBVU0UoV1RGVVJMKQotCi0jZW5kaWYgLy8gVVJMVXRpbF9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFV0aWxJbnRlcm5hbC5oIGIvU291cmNlL1dURi93dGYv
dXJsL3NyYy9VUkxVdGlsSW50ZXJuYWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDg0MGFlYzg2NGY2Y2I0N2I0YjAxYTk3MDNkYjVjZjVlZTE1OWI4NS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VS
TFV0aWxJbnRlcm5hbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBVUkxVdGlsSW50ZXJu
YWxfaAotI2RlZmluZSBVUkxVdGlsSW50ZXJuYWxfaAotCi0jaW5jbHVkZSAiVVJMUGFyc2UuaCIK
LQotI2lmIFVTRShXVEZVUkwpCi0KLW5hbWVzcGFjZSBXVEYgewotCi1uYW1lc3BhY2UgVVJMVXRp
bGl0aWVzIHsKLQotZXh0ZXJuIGNvbnN0IGNoYXIga0ZpbGVTY2hlbWVbXTsKLWV4dGVybiBjb25z
dCBjaGFyIGtGaWxlU3lzdGVtU2NoZW1lW107Ci1leHRlcm4gY29uc3QgY2hhciBrTWFpbHRvU2No
ZW1lW107Ci0KLS8vIEdpdmVuIGEgc3RyaW5nIGFuZCBhIHJhbmdlIGluc2lkZSB0aGUgc3RyaW5n
LCBjb21wYXJlcyBpdCB0byB0aGUgZ2l2ZW4KLS8vIGxvd2VyLWNhc2UgfGNvbXBhcmVUb3wgYnVm
ZmVyLgotYm9vbCBDb21wYXJlU2NoZW1lQ29tcG9uZW50KGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0
IFVSTENvbXBvbmVudCYsIGNvbnN0IGNoYXIqIGNvbXBhcmVUbyk7Ci1ib29sIENvbXBhcmVTY2hl
bWVDb21wb25lbnQoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYsIGNvbnN0
IGNoYXIqIGNvbXBhcmVUbyk7Ci0KLX0gLy8gbmFtZXNwYWNlIFVSTFV0aWxpdGllcwotCi19IC8v
IG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFVTRShXVEZVUkwpCi0KLSNlbmRpZiAvLyBVUkxV
dGlsSW50ZXJuYWxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZjc5YjI4MDBk
MWI2OTYxNjBmMDRkMDk2ZjlmYTczNjhkMzg1MjM3Ny4uZjA1NjFiYzAxZWE3MzcxYzQxOTcwYjVk
ZWIxODAzYzZlNjE4ZTU0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC01Nzg5
LDggKzU3ODksNiBAQCB3ZWJjb3JlX3BsYXRmb3JtX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0tVUkwuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkxIYXNoLmggXAotCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0tVUkxXVEZVUkwuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJM
V1RGVVJMSW1wbC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYW5ndWFnZS5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xhbmd1YWdlLmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0xlbmd0aEJveC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCA1NjM5ZjRjOGYy
MjM4MWMyNDYzOTAzNDQ1ZTRmOTJjNGFlMWJjYzAyLi42YjFlNmMyMzE4Mzk5MzI3YWExYjFiMzNl
MWYyYmQ3YmMwZWFiMWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5p
bgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtMjg0MSwxNiArMjg0MSw2
IEBAIF9fWk43V2ViQ29yZTRQYWdlMTFzZXRWaWV3TW9kZUVOUzBfOFZpZXdNb2RlRQogX19aTjdX
ZWJDb3JlMTJXb3JrZXJUaHJlYWQxN3dvcmtlclRocmVhZENvdW50RXYKICNlbmRpZgogCi0jaWYg
VVNFKFdURlVSTCkKLV9fWk5LN1dlYkNvcmU0S1VSTDZzdHJpbmdFdgotX19aTks3V2ViQ29yZTRL
VVJMN2hhc1BhdGhFdgotX19aTks3V2ViQ29yZTRLVVJMN2hhc1BvcnRFdgotX19aTks3V2ViQ29y
ZTRLVVJMN2lzRW1wdHlFdgotX19aTks3V2ViQ29yZTRLVVJMNmlzTnVsbEV2Ci1fX1pOSzdXZWJD
b3JlNEtVUkw3aXNWYWxpZEV2Ci1fX1pOSzdXZWJDb3JlNEtVUkwyMnByb3RvY29sSXNJbkhUVFBG
YW1pbHlFdgotI2VuZGlmCi0KICNpZiBQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpICYm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4MAogX19aTjdXZWJDb3JlMjdB
bHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIxNWFkZEFsdGVybmF0aXZlc0VSS04zV1RGOVJldGFp
blB0ckkxOE5TVGV4dEFsdGVybmF0aXZlc0VFCiBfX1pON1dlYkNvcmUyN0FsdGVybmF0aXZlVGV4
dFVJQ29udHJvbGxlcjIyYWx0ZXJuYXRpdmVzRm9yQ29udGV4dEV5CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggN2NjODU4ZDBhZGRm
NzMwZTYxMDZhNDAwMjllMTQwNTgyNmZhMWNhZi4uMmE1MjdlMzU4NzdlNGI5MTdjMDVkNzIzYjYx
MGZiNTRmYjMyMjNmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtNzM4LDcgKzczOCw2IEBACiAJCTI2NTU0MTUyMTQ4OUIyMzMw
MDBERkM1RCAvKiBDdXJzb3JJT1MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMjY1NTQxNEIxNDg5QUEyQjAwMERGQzVEIC8qIEN1cnNvcklPUy5jcHAg
Ki87IH07CiAJCTI2OTIzOTk1MTUwNUUxQUEwMDlFNTdGQyAvKiBKU0lEQlZlcnNpb25DaGFuZ2VF
dmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
NjkyMzk5MTE1MDVFMUFBMDA5RTU3RkMgLyogSlNJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwICov
OyB9OwogCQkyNjkyMzk5NjE1MDVFMUFBMDA5RTU3RkMgLyogSlNJREJWZXJzaW9uQ2hhbmdlRXZl
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2OTIz
OTkyMTUwNUUxQUEwMDlFNTdGQyAvKiBKU0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oICovOyB9Owot
CQkyNkE1MDM0RTE0RjA5ODM2MDBBQTczMEQgLyogS1VSTFdURlVSTEltcGwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2QTUwMzREMTRGMDk4MzYwMEFB
NzMwRCAvKiBLVVJMV1RGVVJMSW1wbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTI2QzE3QTNFMTQ5MUQyRDQwMEQxMkJBMiAvKiBGaWxlU3lzdGVt
SU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkMx
N0EzQzE0OTFEMkQ0MDBEMTJCQTIgLyogRmlsZVN5c3RlbUlPUy5oICovOyB9OwogCQkyNkMxN0Ez
RjE0OTFEMkQ0MDBEMTJCQTIgLyogRmlsZVN5c3RlbUlPUy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2QzE3QTNEMTQ5MUQyRDQwMEQxMkJBMiAvKiBG
aWxlU3lzdGVtSU9TLm1tICovOyB9OwogCQkyNkU5OEExMDEzMEE5RkNBMDA4RUI3QjIgLyogVGV4
dENvZGVjQVNDSUlGYXN0UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMjZFOThBMEYxMzBBOUZDQTAwOEVCN0IyIC8qIFRleHRDb2RlY0FTQ0lJRmFz
dFBhdGguaCAqLzsgfTsKQEAgLTgwMDUsNyArODAwNCw2IEBACiAJCTI2NTU0MTRCMTQ4OUFBMkIw
MDBERkM1RCAvKiBDdXJzb3JJT1MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQ3Vyc29ySU9TLmNwcDsgcGF0aCA9IGlvcy9DdXJzb3JJT1MuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyNjkyMzk5MTE1MDVFMUFBMDA5RTU3RkMgLyogSlNJREJWZXJz
aW9uQ2hhbmdlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyNjkyMzk5MjE1MDVFMUFBMDA5RTU3RkMgLyogSlNJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJREJWZXJzaW9uQ2hhbmdlRXZlbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjZBNTAzNEQxNEYwOTgzNjAwQUE3MzBE
IC8qIEtVUkxXVEZVUkxJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtV
UkxXVEZVUkxJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2QzE3QTNDMTQ5
MUQyRDQwMEQxMkJBMiAvKiBGaWxlU3lzdGVtSU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEZpbGVTeXN0ZW1JT1MuaDsgcGF0aCA9IGlvcy9GaWxlU3lzdGVtSU9TLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2QzE3QTNEMTQ5MUQyRDQwMEQxMkJBMiAvKiBG
aWxlU3lzdGVtSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0g
RmlsZVN5c3RlbUlPUy5tbTsgcGF0aCA9IGlvcy9GaWxlU3lzdGVtSU9TLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyNkU5OEEwRjEzMEE5RkNBMDA4RUI3QjIgLyogVGV4dENvZGVj
QVNDSUlGYXN0UGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q29k
ZWNBU0NJSUZhc3RQYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTQwNyw3
ICsyMTQwNSw2IEBACiAJCQkJNjU5MzkyMzUwOUFFNDM0NjAwMkM1MzFGIC8qIEtVUkwuY3BwICov
LAogCQkJCTY1OTM5MjM2MDlBRTQzNDYwMDJDNTMxRiAvKiBLVVJMLmggKi8sCiAJCQkJQkNCRDIx
QUEwRTQxN0FENDAwQTA3MEYyIC8qIEtVUkxIYXNoLmggKi8sCi0JCQkJMjZBNTAzNEQxNEYwOTgz
NjAwQUE3MzBEIC8qIEtVUkxXVEZVUkxJbXBsLmggKi8sCiAJCQkJRTE4NzcyRjAxMjZFMjYyOTAw
M0RENTg2IC8qIExhbmd1YWdlLmNwcCAqLywKIAkJCQk4NUVDOUFGOTBBNzFBMkM2MDBFRUVBRUQg
LyogTGFuZ3VhZ2UuaCAqLywKIAkJCQlENkZEQUVGMjE0OUMwNjE5MDAzN0IxRTUgLyogTGF5b3V0
VGVzdFN1cHBvcnQuY3BwICovLApAQCAtMjUyMDAsNyArMjUxOTcsNiBAQAogCQkJCTUyMUQ0NkY4
MTFBRUM5QjEwMDUxNDYxMyAvKiBLaWxsUmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU5Mzky
MzgwOUFFNDM0NjAwMkM1MzFGIC8qIEtVUkwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQkQyMUFC
MEU0MTdBRDQwMEEwNzBGMiAvKiBLVVJMSGFzaC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMjZBNTAz
NEUxNEYwOTgzNjAwQUE3MzBEIC8qIEtVUkxXVEZVUkxJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0NTBDRUJGMTE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTQ1NkZBMjcxMUFENEE4MzAwMjBCNDIwIC8qIExhYmVsc05vZGVMaXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NUVDOUFGQjBBNzFBMkM2MDBFRUVBRUQgLyogTGFuZ3VhZ2Uu
aCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VS
TC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAppbmRleCBiNWZiYzhjZGVh
N2UxNjg0MGNjN2YwNDYyZmZiY2JhZWRkMmQ0OWU4Li41ZGM2Y2VmM2U5Yjk2NGZhYWM5OGQ3ZTY2
ZWE5YTJkZTNlYmMxZDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJM
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcApAQCAtMzMsOSArMzMs
NyBAQAogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpZiAhVVNFKFdURlVSTCkKICNpbmNsdWRlIDx3dGYvSGV4
TnVtYmVyLmg+Ci0jZW5kaWYKICNpbmNsdWRlIDx3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uU3Ry
aW5nLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KQEAgLTY3LDcgKzY1LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzTGV0dGVy
TWF0Y2hJZ25vcmluZ0Nhc2UoVUNoYXIgY2hhcmFjdGVyLCBjaGFyIGxvd2VyY2FzZUxldHQKICAg
ICByZXR1cm4gKGNoYXJhY3RlciB8IDB4MjApID09IGxvd2VyY2FzZUxldHRlcjsKIH0KIAotI2lm
ICFVU0UoR09PR0xFVVJMKSAmJiAhVVNFKFdURlVSTCkKKyNpZiAhVVNFKEdPT0dMRVVSTCkKIAog
c3RhdGljIGNvbnN0IGNoYXIgd3NTY2hlbWVbXSA9IHsndycsICdzJ307CiBzdGF0aWMgY29uc3Qg
Y2hhciBmdHBTY2hlbWVbXSA9IHsnZicsICd0JywgJ3AnfTsKQEAgLTE3MTgsNyArMTcxNiw3IEBA
IHZvaWQgS1VSTDo6cHJpbnQoKSBjb25zdAogfQogI2VuZGlmCiAKLSNlbmRpZiAvLyAhVVNFKEdP
T0dMRVVSTCkgJiYgIVVTRShXVEZVUkwpCisjZW5kaWYgLy8gIVVTRShHT09HTEVVUkwpCiAKIFN0
cmluZyBLVVJMOjpzdHJpcHBlZEZvclVzZUFzUmVmZXJyZXIoKSBjb25zdAogewpAQCAtMTkwNyw4
ICsxOTA1LDYgQEAgdm9pZCBLVVJMOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZv
KiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9y
eU9iamVjdEluZm8sIHRoaXMpOwogI2lmIFVTRShHT09HTEVVUkwpCiAgICAgaW5mby5hZGRNZW1i
ZXIobV91cmwsICJ1cmwiKTsKLSNlbGlmIFVTRShXVEZVUkwpCi0gICAgaW5mby5hZGRNZW1iZXIo
bV91cmxJbXBsLCAidXJsSW1wbCIpOwogI2Vsc2UgLy8gIVVTRShHT09HTEVVUkwpCiAgICAgaW5m
by5hZGRNZW1iZXIobV9zdHJpbmcsICJzdHJpbmciKTsKICNlbmRpZgpAQCAtMTkxOCw4ICsxOTE0
LDYgQEAgYm9vbCBLVVJMOjppc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKSBjb25zdAogewog
I2lmIFVTRShHT09HTEVVUkwpCiAgICAgcmV0dXJuIG1fdXJsLmlzU2FmZVRvU2VuZFRvQW5vdGhl
clRocmVhZCgpOwotI2VsaWYgVVNFKFdURlVSTCkKLSAgICByZXR1cm4gbV91cmxJbXBsLT5pc1Nh
ZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKTsKICNlbHNlIC8vICFVU0UoR09PR0xFVVJMKQogICAg
IHJldHVybiBtX3N0cmluZy5pc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKTsKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vS1VSTC5oCmluZGV4IDhlYTlhMjRkNjE1OTY3M2FmNDEzMjg3ODU2MzM5NTg0
MjdhZDQ0NzUuLmI2NTVjMzk3Mjg3OWEyMDFkMTBkZmQzYTAwYTkwZTM5ZGI0YmM3NzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9LVVJMLmgKQEAgLTI2LDcgKzI2LDYgQEAKICNpZm5kZWYgS1VSTF9oCiAjZGVm
aW5lIEtVUkxfaAogCi0jaW5jbHVkZSAiS1VSTFdURlVSTEltcGwuaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CkBAIC02NywxNiArNjYsMTAgQEAgcHVibGljOgogICAgIEtVUkwoUGFyc2Vk
VVJMU3RyaW5nVGFnLCBjb25zdCBTdHJpbmcmKTsKICNpZiBVU0UoR09PR0xFVVJMKQogICAgIGV4
cGxpY2l0IEtVUkwoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fdXJsKFdURjo6
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKSB7IH0KLSNlbGlmIFVTRShXVEZVUkwpCi0gICAgZXhwbGlj
aXQgS1VSTChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpIDogbV91cmxJbXBsKFdURjo6
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKSB7IH0KICNlbHNlCiAgICAgZXhwbGljaXQgS1VSTChXVEY6
Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpIDogbV9zdHJpbmcoV1RGOjpIYXNoVGFibGVEZWxl
dGVkVmFsdWUpIHsgfQogI2VuZGlmCi0jaWYgIVVTRShXVEZVUkwpCiAgICAgYm9vbCBpc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHN0cmluZygpLmlzSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKCk7IH0KLSNlbHNlCi0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdXJsSW1wbC5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9Ci0j
ZW5kaWYKIAogICAgIC8vIFJlc29sdmVzIHRoZSByZWxhdGl2ZSBVUkwgd2l0aCB0aGUgZ2l2ZW4g
YmFzZSBVUkwuIElmIHByb3ZpZGVkLCB0aGUKICAgICAvLyBUZXh0RW5jb2RpbmcgaXMgdXNlZCB0
byBlbmNvZGUgbm9uLUFTQ0lJIGNoYXJhY2Vycy4gVGhlIGJhc2UgVVJMIGNhbiBiZQpAQCAtMTI0
LDkgKzExNyw2IEBAIHB1YmxpYzoKIAogI2lmIFVTRShHT09HTEVVUkwpCiAgICAgY29uc3QgU3Ry
aW5nJiBzdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX3VybC5zdHJpbmcoKTsgfQotI2VsaWYgVVNF
KFdURlVSTCkKLSAgICAvLyBGSVhNRTogU3BsaXQgdGhpcyBpbiBVUkxTdHJpbmcgYW5kIEludmFs
aWRVUkxTdHJpbmcsIGdldCByaWQgb2YgdGhlIGltcGxpY2l0IGNvbnZlcnNpb25zLgotICAgIGNv
bnN0IFN0cmluZyYgc3RyaW5nKCkgY29uc3Q7CiAjZWxzZQogICAgIGNvbnN0IFN0cmluZyYgc3Ry
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmc7IH0KICNlbmRpZgpAQCAtMjM4LDggKzIyOCw2
IEBAIHByaXZhdGU6CiAjaWYgVVNFKEdPT0dMRVVSTCkKICAgICBmcmllbmQgY2xhc3MgS1VSTEdv
b2dsZVByaXZhdGU7CiAgICAgS1VSTEdvb2dsZVByaXZhdGUgbV91cmw7Ci0jZWxpZiBVU0UoV1RG
VVJMKQotICAgIFJlZlB0cjxLVVJMV1RGVVJMSW1wbD4gbV91cmxJbXBsOwogI2Vsc2UgIC8vICFV
U0UoR09PR0xFVVJMKQogICAgIHZvaWQgaW5pdChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiwg
Y29uc3QgVGV4dEVuY29kaW5nJik7CiAgICAgdm9pZCBjb3B5VG9CdWZmZXIoVmVjdG9yPGNoYXIs
IDUxMj4mIGJ1ZmZlcikgY29uc3Q7CkBAIC0zMzUsNyArMzIzLDcgQEAgaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IEtVUkwmIGIpCiAgICAgcmV0dXJuIGEgIT0g
Yi5zdHJpbmcoKTsKIH0KIAotI2lmICFVU0UoR09PR0xFVVJMKSAmJiAhVVNFKFdURlVSTCkKKyNp
ZiAhVVNFKEdPT0dMRVVSTCkKIAogLy8gSW5saW5lIHZlcnNpb25zIG9mIHNvbWUgbm9uLUdvb2ds
ZVVSTCBmdW5jdGlvbnMgc28gd2UgY2FuIGdldCBpbmxpbmluZwogLy8gd2l0aG91dCBoYXZpbmcg
dG8gaGF2ZSBhIGxvdCBvZiB1Z2x5IGlmZGVmcyBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbi4KQEAg
LTM5NSw3ICszODMsNyBAQCBpbmxpbmUgdW5zaWduZWQgS1VSTDo6cGF0aEFmdGVyTGFzdFNsYXNo
KCkgY29uc3QKICAgICByZXR1cm4gbV9wYXRoQWZ0ZXJMYXN0U2xhc2g7CiB9CiAKLSNlbmRpZiAv
LyAhVVNFKEdPT0dMRVVSTCkgJiYgIVVTRShXVEZVUkwpCisjZW5kaWYgLy8gIVVTRShHT09HTEVV
UkwpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vS1VSTFdURlVSTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJM
V1RGVVJMLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U3Y2FhM2U3NGU3NGFi
ZWU3YjljNmNmNzg4ODM0ZjllZGE0MjE5ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMV1RGVVJMLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDQ3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotCi0jaW5jbHVkZSA8VGV4dEVuY29kaW5nLmg+Ci0jaW5j
bHVkZSA8d3RmL0RhdGFMb2cuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5j
bHVkZSA8d3RmL3VybC9hcGkvVVJMQnVmZmVyLmg+Ci0jaW5jbHVkZSA8d3RmL3VybC9hcGkvVVJM
UXVlcnlDaGFyc2V0Q29udmVydGVyLmg+Ci0KLSNpZiBVU0UoV1RGVVJMKQotCi11c2luZyBuYW1l
c3BhY2UgV1RGOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBtYXhpbXVtVmFsaWRQb3J0TnVtYmVyID0gMHhGRkZFOwotc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGludmFsaWRQb3J0TnVtYmVyID0gMHhGRkZGOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgZGV0YWNo
KFJlZlB0cjxLVVJMV1RGVVJMSW1wbD4mIHVybEltcGwpCi17Ci0gICAgaWYgKCF1cmxJbXBsKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAodXJsSW1wbC0+aGFzT25lUmVmKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHVybEltcGwgPSB1cmxJbXBsLT5jb3B5KCk7Ci19Ci0KLUtVUkw6OktV
UkwoUGFyc2VkVVJMU3RyaW5nVGFnLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKLSAgICA6IG1f
dXJsSW1wbChhZG9wdFJlZihuZXcgS1VSTFdURlVSTEltcGwoKSkpCi17Ci0gICAgbV91cmxJbXBs
LT5tX3BhcnNlZFVSTCA9IFBhcnNlZFVSTCh1cmxTdHJpbmcsIFBhcnNlZFVSTDo6UGFyc2VkVVJM
U3RyaW5nKTsKLQotICAgIC8vIEZJWE1FOiBGcmFtZTo6aW5pdCgpIGFjdHVhbGx5IGNyZWF0ZSBl
bXB0eSBVUkwsIGludmVzdGlnYXRlIHdoeSBub3QganVzdCBudWxsIFVSTC4KLSAgICAvLyBBU1NF
UlQobV91cmxJbXBsLT5tX3BhcnNlZFVSTC5pc1ZhbGlkKCkpOwotfQotCi1jbGFzcyBDaGFyc2V0
Q29udmVydGVyIDogcHVibGljIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciB7Ci1wdWJsaWM6Ci0g
ICAgQ2hhcnNldENvbnZlcnRlcihjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQotICAgICAg
ICA6IG1fZW5jb2RpbmcoZW5jb2RpbmcpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9p
ZCBjb252ZXJ0RnJvbVVURjE2KGNvbnN0IFVDaGFyKiBpbnB1dCwgdW5zaWduZWQgaW5wdXRMZW5n
dGgsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KSBPVkVSUklERQotICAgIHsKLSAgICAgICAgQ1N0
cmluZyBlbmNvZGVkID0gbV9lbmNvZGluZy5lbmNvZGUoaW5wdXQsIGlucHV0TGVuZ3RoLCBVUkxF
bmNvZGVkRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwotICAgICAgICBvdXRwdXQuYXBwZW5kKGVu
Y29kZWQuZGF0YSgpLCBzdGF0aWNfY2FzdDxpbnQ+KGVuY29kZWQubGVuZ3RoKCkpKTsKLSAgICB9
Ci0KLXByaXZhdGU6Ci0gICAgY29uc3QgVGV4dEVuY29kaW5nJiBtX2VuY29kaW5nOwotfTsKLQot
S1VSTDo6S1VSTChjb25zdCBLVVJMJiBiYXNlVVJMLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlKQot
ICAgIDogbV91cmxJbXBsKGFkb3B0UmVmKG5ldyBLVVJMV1RGVVJMSW1wbCgpKSkKLXsKLSAgICAv
LyBGSVhNRTogdGhlIGNhc2Ugd2l0aCBhIG51bGwgYmFzZVVSTCBpcyBjb21tb24uIFdlIHNob3Vs
ZCBoYXZlIGEgc2VwYXJhdGUgY29uc3RydWN0b3IgaW4gS1VSTC4KLSAgICAvLyBGSVhNRTogdGhl
IGNhc2Ugb2YgYW4gZW1wdHkgQmFzZSBpcyB1c2VsZXNzLCB3ZSBzaG91bGQgZ2V0IHJpZCBvZiBl
bXB0eSBVUkxzLgotICAgIENoYXJzZXRDb252ZXJ0ZXIgY2hhcnNldENvbnZlcnRlcihVVEY4RW5j
b2RpbmcoKSk7Ci0gICAgaWYgKGJhc2VVUkwuaXNFbXB0eSgpKQotICAgICAgICBtX3VybEltcGwt
Pm1fcGFyc2VkVVJMID0gUGFyc2VkVVJMKHJlbGF0aXZlLCAmY2hhcnNldENvbnZlcnRlcik7Ci0g
ICAgZWxzZQotICAgICAgICBtX3VybEltcGwtPm1fcGFyc2VkVVJMID0gUGFyc2VkVVJMKGJhc2VV
UkwubV91cmxJbXBsLT5tX3BhcnNlZFVSTCwgcmVsYXRpdmUsICZjaGFyc2V0Q29udmVydGVyKTsK
LQotICAgIGlmICghbV91cmxJbXBsLT5tX3BhcnNlZFVSTC5pc1ZhbGlkKCkpCi0gICAgICAgIG1f
dXJsSW1wbC0+bV9pbnZhbGlkVXJsU3RyaW5nID0gcmVsYXRpdmU7Ci19Ci0KLUtVUkw6OktVUkwo
Y29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZSwgY29uc3QgVGV4dEVu
Y29kaW5nJiBlbmNvZGluZykKLSAgICA6IG1fdXJsSW1wbChhZG9wdFJlZihuZXcgS1VSTFdURlVS
TEltcGwoKSkpCi17Ci0gICAgQ2hhcnNldENvbnZlcnRlciBjaGFyc2V0Q29udmVydGVyKGVuY29k
aW5nLmVuY29kaW5nRm9yRm9ybVN1Ym1pc3Npb24oKSk7Ci0gICAgaWYgKGJhc2VVUkwuaXNFbXB0
eSgpKQotICAgICAgICBtX3VybEltcGwtPm1fcGFyc2VkVVJMID0gUGFyc2VkVVJMKHJlbGF0aXZl
LCAmY2hhcnNldENvbnZlcnRlcik7Ci0gICAgZWxzZQotICAgICAgICBtX3VybEltcGwtPm1fcGFy
c2VkVVJMID0gUGFyc2VkVVJMKGJhc2VVUkwubV91cmxJbXBsLT5tX3BhcnNlZFVSTCwgcmVsYXRp
dmUsICZjaGFyc2V0Q29udmVydGVyKTsKLQotICAgIGlmICghbV91cmxJbXBsLT5tX3BhcnNlZFVS
TC5pc1ZhbGlkKCkpCi0gICAgICAgIG1fdXJsSW1wbC0+bV9pbnZhbGlkVXJsU3RyaW5nID0gcmVs
YXRpdmU7Ci19Ci0KLUtVUkwgS1VSTDo6Y29weSgpIGNvbnN0Ci17Ci0gICAgS1VSTCBvdGhlcjsK
LSAgICBpZiAoIWlzTnVsbCgpKQotICAgICAgICBvdGhlci5tX3VybEltcGwgPSBtX3VybEltcGwt
PmNvcHkoKTsKLSAgICByZXR1cm4gb3RoZXI7Ci19Ci0KLWJvb2wgS1VSTDo6aXNOdWxsKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gIW1fdXJsSW1wbDsKLX0KLQotLy8gRklYTUU6IENhbiB3ZSBnZXQg
cmlkIG9mIHRoZSBjb25jZXB0IG9mIEVtcHR5VVJMPyBDYW4gYW4gbnVsbCBVUkwgYmUgZW5vdWdo
PwotLy8gSWYgd2UgY2Fubm90IGdldCByaWQgb2YgdGhlIGNvbmNlcHQsIHdlIHNob3VsZCBtYWtl
IGEgc2hhcmVkIGVtcHR5IFVSTC4KLWJvb2wgS1VSTDo6aXNFbXB0eSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuICFtX3VybEltcGwKLSAgICAgICAgICAgfHwgKCFtX3VybEltcGwtPm1fcGFyc2VkVVJM
LmlzVmFsaWQoKSAmJiBtX3VybEltcGwtPm1faW52YWxpZFVybFN0cmluZy5pc0VtcHR5KCkpOwot
fQotCi1ib29sIEtVUkw6OmlzVmFsaWQoKSBjb25zdAotewotICAgIGlmICghbV91cmxJbXBsKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIGlzUGFyc2VkVVJMVmFsaWQgPSBtX3Vy
bEltcGwtPm1fcGFyc2VkVVJMLmlzVmFsaWQoKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgaWYgKGlz
UGFyc2VkVVJMVmFsaWQpCi0gICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV91cmxJbXBsLT5t
X2ludmFsaWRVcmxTdHJpbmcuaXNOdWxsKCksICJBIHZhbGlkIFVSTCBtdXN0IGhhdmUgYSBudWxs
IGludmFsaWRVcmxTdHJpbmcuIik7Ci0jZW5kaWYKLSAgICByZXR1cm4gaXNQYXJzZWRVUkxWYWxp
ZDsKLX0KLQotY29uc3QgU3RyaW5nJiBLVVJMOjpzdHJpbmcoKSBjb25zdAotewotICAgIGlmIChp
c051bGwoKSkKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0KLSAgICBpZiAoaXNWYWxp
ZCgpKQotICAgICAgICByZXR1cm4gbV91cmxJbXBsLT5tX3BhcnNlZFVSTC5zcGVjKCkuc3RyaW5n
KCk7Ci0KLSAgICByZXR1cm4gbV91cmxJbXBsLT5tX2ludmFsaWRVcmxTdHJpbmc7Ci19Ci0KLVN0
cmluZyBLVVJMOjpwcm90b2NvbCgpIGNvbnN0Ci17Ci0gICAgLy8gU2tpcCB0aGUgQVNTRVJUIGZv
ciBub3csIFN1YmZyYW1lTG9hZGVyOjpyZXF1ZXN0RnJhbWUoKSBkb2VzIG5vdCBjaGVjayB0aGUg
dmFsaWRpdHkgb2YgVVJMcy4KLSAgICAvLyBBU1NFUlQoaXNWYWxpZCgpKTsKLSAgICBpZiAoIWlz
VmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBtX3VybEltcGwt
Pm1fcGFyc2VkVVJMLnNjaGVtZSgpOwotfQotCi1TdHJpbmcgS1VSTDo6aG9zdCgpIGNvbnN0Ci17
Ci0gICAgLy8gU2tpcCB0aGUgQVNTRVJUIGZvciBub3csIEhUTUxBbmNob3JFbGVtZW50OjpwYXJz
ZUF0dHJpYnV0ZSgpIGRvZXMgbm90IGNoZWNrIHRoZSB2YWxpZGl0eSBvZiBVUkxzLgotICAgIC8v
IEFTU0VSVChpc1ZhbGlkKCkpOwotICAgIGlmICghaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0gICAgcmV0dXJuIG1fdXJsSW1wbC0+bV9wYXJzZWRVUkwuaG9zdCgpOwotfQot
Ci1ib29sIEtVUkw6Omhhc1BvcnQoKSBjb25zdAotewotICAgIC8vIFRoaXMgc2hvdWxkIGJlIGFu
IEFTU0VSVC4gSFRNTEFuY2hvckVsZW1lbnQ6OnBvcnQoKSBkb2VzIG5vdCBjaGVjayB0aGUgdmFs
aWRpdHkgb2YgdGhlIFVSTC4KLSAgICBpZiAoIWlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmV0dXJuIG1fdXJsSW1wbC0+bV9wYXJzZWRVUkwuaGFzUG9ydCgpOwotfQot
Ci11bnNpZ25lZCBzaG9ydCBLVVJMOjpwb3J0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaXNWYWxp
ZCgpKTsKLQotICAgIFN0cmluZyBwb3J0U3RyaW5nID0gbV91cmxJbXBsLT5tX3BhcnNlZFVSTC5w
b3J0KCk7Ci0gICAgaWYgKHBvcnRTdHJpbmcuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgYm9vbCBvayA9IGZhbHNlOwotICAgIHVuc2lnbmVkIHBvcnRWYWx1ZSA9IHBvcnRTdHJp
bmcudG9VSW50U3RyaWN0KCZvayk7Ci0KLSAgICBpZiAoIW9rIHx8IHBvcnRWYWx1ZSA+IG1heGlt
dW1WYWxpZFBvcnROdW1iZXIpCi0gICAgICAgIHJldHVybiBpbnZhbGlkUG9ydE51bWJlcjsKLQot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4ocG9ydFZhbHVlKTsKLX0KLQot
U3RyaW5nIEtVUkw6OnVzZXIoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBi
ZSBhbiBBU1NFUlQoKSwgY2FsbCBzaXRlIHNob3VsZCBub3QgdXNlIGludmFsaWQgVVJMcy4KLSAg
ICBpZiAoIWlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJu
IG1fdXJsSW1wbC0+bV9wYXJzZWRVUkwudXNlcm5hbWUoKTsKLX0KLQotU3RyaW5nIEtVUkw6OnBh
c3MoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBhbiBBU1NFUlQoKSwg
Y2FsbCBzaXRlIHNob3VsZCBub3QgdXNlIGludmFsaWQgVVJMcy4KLSAgICBpZiAoIWlzVmFsaWQo
KSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJuIG1fdXJsSW1wbC0+bV9w
YXJzZWRVUkwucGFzc3dvcmQoKTsKLX0KLQotYm9vbCBLVVJMOjpoYXNQYXRoKCkgY29uc3QKLXsK
LSAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgYW4gQVNTRVJUSU9OLCBjYWxsIHNpdGUgc2hv
dWxkIG5vdCB1c2UgaW52YWxpZCBVUkxzLgotICAgIGlmICghaXNWYWxpZCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gIXBhdGgoKS5pc0VtcHR5KCk7Ci19Ci0KLVN0cmlu
ZyBLVVJMOjpwYXRoKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgYW4g
QVNTRVJUSU9OLCBIVE1MQW5jaG9yRWxlbWVudCBzaG91bGQgbm90IHVzZSBpbnZhbGlkIFVSTHMu
Ci0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIHJl
dHVybiBtX3VybEltcGwtPm1fcGFyc2VkVVJMLnBhdGgoKTsKLX0KLQotU3RyaW5nIEtVUkw6Omxh
c3RQYXRoQ29tcG9uZW50KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaXNWYWxpZCgpKTsKLQotICAg
IFN0cmluZyBwYXRoU3RyaW5nID0gcGF0aCgpOwotICAgIHNpemVfdCBpbmRleCA9IHBhdGhTdHJp
bmcucmV2ZXJzZUZpbmQoJy8nKTsKLQotICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkKLSAgICAg
ICAgcmV0dXJuIHBhdGhTdHJpbmc7Ci0KLSAgICByZXR1cm4gcGF0aFN0cmluZy5zdWJzdHJpbmco
aW5kZXggKyAxKTsKLX0KLQotU3RyaW5nIEtVUkw6OnF1ZXJ5KCkgY29uc3QKLXsKLSAgICAvLyBG
SVhNRTogdGhpcyBzaG91bGQgYmUgYW4gQVNTRVJUSU9OLCBIVE1MQW5jaG9yRWxlbWVudCBzaG91
bGQgbm90IHVzZSBpbnZhbGlkIFVSTHMuCi0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKLQotICAgIHJldHVybiBtX3VybEltcGwtPm1fcGFyc2VkVVJMLnF1ZXJ5
KCk7Ci19Ci0KLWJvb2wgS1VSTDo6aGFzRnJhZ21lbnRJZGVudGlmaWVyKCkgY29uc3QKLXsKLSAg
ICAvLyBTa2lwIHRoZSBBU1NFUlQgZm9yIG5vdywgU2NyaXB0RWxlbWVudDo6cmVxdWVzdFNjcmlw
dCgpIGNyZWF0ZSByZXF1ZXN0cyBmb3IgaW52YWxpZCBVUkxzLgotICAgIC8vIEFTU0VSVChpc1Zh
bGlkKCkpOwotICAgIGlmICghaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICByZXR1cm4gbV91cmxJbXBsLT5tX3BhcnNlZFVSTC5oYXNGcmFnbWVudCgpOwotfQotCi1TdHJp
bmcgS1VSTDo6ZnJhZ21lbnRJZGVudGlmaWVyKCkgY29uc3QKLXsKLSAgICAvLyBTa2lwIHRoZSBB
U1NFUlQgZm9yIG5vdywgU2NyaXB0RWxlbWVudDo6cmVxdWVzdFNjcmlwdCgpIGNyZWF0ZSByZXF1
ZXN0cyBmb3IgaW52YWxpZCBVUkxzLgotICAgIC8vIEFTU0VSVChpc1ZhbGlkKCkpOwotICAgIGlm
ICghaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gbV91
cmxJbXBsLT5tX3BhcnNlZFVSTC5mcmFnbWVudCgpOwotfQotCi0vLyBGSVhNRTogdHJhY2sgYW4g
Zml4IHRoZSBiYWQgdXNlIG9mIHRoaXMgbWV0aG9kLgotU3RyaW5nIEtVUkw6OmJhc2VBc1N0cmlu
ZygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlzVmFsaWQoKSk7Ci0gICAgcmV0dXJuIG1fdXJsSW1w
bC0+bV9wYXJzZWRVUkwuYmFzZUFzU3RyaW5nKCk7Ci19Ci0KLS8vIEZJWE1FOiBHZXQgcmlkIG9m
IHRoaXMgZnVuY3Rpb24gZnJvbSBLVVJMLgotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0o
V0lOKQotU3RyaW5nIEtVUkw6OmZpbGVTeXN0ZW1QYXRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
c3RyaW5nKCk7Ci19Ci0jZW5kaWYKLQotYm9vbCBLVVJMOjpwcm90b2NvbElzKGNvbnN0IGNoYXIq
IHRlc3RQcm90b2NvbCkgY29uc3QKLXsKLSAgICBpZiAoIWlzVmFsaWQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiBXZWJDb3JlOjpwcm90b2NvbElzKHByb3RvY29sKCksIHRl
c3RQcm90b2NvbCk7Ci19Ci0KLWJvb2wgS1VSTDo6cHJvdG9jb2xJc0luSFRUUEZhbWlseSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHByb3RvY29sSXMoImh0dHAiKSB8fCBwcm90b2NvbElzKCJodHRw
cyIpOwotfQotCi1ib29sIEtVUkw6OnNldFByb3RvY29sKGNvbnN0IFN0cmluZyYpCi17Ci0gICAg
ZGV0YWNoKG1fdXJsSW1wbCk7Ci0gICAgLy8gRklYTUU6IEFkZCBXVEZVUkwgSW1wbGVtZW50YXRp
b24uCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEtVUkw6OnNldEhvc3QoY29uc3QgU3Ry
aW5nJikKLXsKLSAgICBkZXRhY2gobV91cmxJbXBsKTsKLSAgICAvLyBGSVhNRTogQWRkIFdURlVS
TCBJbXBsZW1lbnRhdGlvbi4KLX0KLQotdm9pZCBLVVJMOjpyZW1vdmVQb3J0KCkKLXsKLSAgICBp
ZiAoIWhhc1BvcnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGV0YWNoKG1fdXJsSW1wbCk7
Ci0gICAgbV91cmxJbXBsLT5tX3BhcnNlZFVSTC5yZW1vdmVQb3J0KCk7Ci19Ci0KLXZvaWQgS1VS
TDo6c2V0UG9ydCh1bnNpZ25lZCBzaG9ydCBuZXdQb3J0KQotewotICAgIGRldGFjaChtX3VybElt
cGwpOwotICAgIG1fdXJsSW1wbC0+bV9wYXJzZWRVUkwucmVwbGFjZVBvcnQobmV3UG9ydCk7Ci19
Ci0KLXZvaWQgS1VSTDo6c2V0SG9zdEFuZFBvcnQoY29uc3QgU3RyaW5nJikKLXsKLSAgICBkZXRh
Y2gobV91cmxJbXBsKTsKLSAgICAvLyBGSVhNRTogQWRkIFdURlVSTCBJbXBsZW1lbnRhdGlvbi4K
LX0KLQotdm9pZCBLVVJMOjpzZXRVc2VyKGNvbnN0IFN0cmluZyYpCi17Ci0gICAgZGV0YWNoKG1f
dXJsSW1wbCk7Ci0gICAgLy8gRklYTUU6IEFkZCBXVEZVUkwgSW1wbGVtZW50YXRpb24uCi19Ci0K
LXZvaWQgS1VSTDo6c2V0UGFzcyhjb25zdCBTdHJpbmcmKQotewotICAgIGRldGFjaChtX3VybElt
cGwpOwotICAgIC8vIEZJWE1FOiBBZGQgV1RGVVJMIEltcGxlbWVudGF0aW9uLgotfQotCi12b2lk
IEtVUkw6OnNldFBhdGgoY29uc3QgU3RyaW5nJikKLXsKLSAgICBkZXRhY2gobV91cmxJbXBsKTsK
LSAgICAvLyBGSVhNRTogQWRkIFdURlVSTCBJbXBsZW1lbnRhdGlvbi4KLX0KLQotdm9pZCBLVVJM
OjpzZXRRdWVyeShjb25zdCBTdHJpbmcmKQotewotICAgIGRldGFjaChtX3VybEltcGwpOwotICAg
IC8vIEZJWE1FOiBBZGQgV1RGVVJMIEltcGxlbWVudGF0aW9uLgotfQotCi12b2lkIEtVUkw6OnNl
dEZyYWdtZW50SWRlbnRpZmllcihjb25zdCBTdHJpbmcmKQotewotICAgIGRldGFjaChtX3VybElt
cGwpOwotICAgIC8vIEZJWE1FOiBBZGQgV1RGVVJMIEltcGxlbWVudGF0aW9uLgotfQotCi12b2lk
IEtVUkw6OnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpCi17Ci0gICAgaWYgKCFoYXNGcmFnbWVu
dElkZW50aWZpZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGV0YWNoKG1fdXJsSW1wbCk7
Ci0gICAgbV91cmxJbXBsLT5tX3BhcnNlZFVSTCA9IG1fdXJsSW1wbC0+bV9wYXJzZWRVUkwud2l0
aG91dEZyYWdtZW50KCk7Ci19Ci0KLXVuc2lnbmVkIEtVUkw6Omhvc3RTdGFydCgpIGNvbnN0Ci17
Ci0gICAgLy8gRklYTUU6IEFkZCBXVEZVUkwgSW1wbGVtZW50YXRpb24uCi0gICAgcmV0dXJuIDA7
Ci19Ci0KLXVuc2lnbmVkIEtVUkw6Omhvc3RFbmQoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBB
ZGQgV1RGVVJMIEltcGxlbWVudGF0aW9uLgotICAgIHJldHVybiAwOwotfQotCi11bnNpZ25lZCBL
VVJMOjpwYXRoU3RhcnQoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBBZGQgV1RGVVJMIEltcGxl
bWVudGF0aW9uLgotICAgIHJldHVybiAwOwotfQotCi11bnNpZ25lZCBLVVJMOjpwYXRoRW5kKCkg
Y29uc3QKLXsKLSAgICAvLyBGSVhNRTogQWRkIFdURlVSTCBJbXBsZW1lbnRhdGlvbi4KLSAgICBy
ZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgS1VSTDo6cGF0aEFmdGVyTGFzdFNsYXNoKCkgY29uc3QK
LXsKLSAgICAvLyBGSVhNRTogQWRkIFdURlVSTCBJbXBsZW1lbnRhdGlvbi4KLSAgICByZXR1cm4g
MDsKLX0KLQotI2lmbmRlZiBOREVCVUcKLXZvaWQgS1VSTDo6cHJpbnQoKSBjb25zdAotewotICAg
IGlmIChpc1ZhbGlkKCkpCi0gICAgICAgIG1fdXJsSW1wbC0+bV9wYXJzZWRVUkwucHJpbnQoKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgaWYgKGlzTnVsbCgpKQotICAgICAgICAgICAgZGF0YUxvZ0Yo
Ik51bGwgS1VSTCIpOwotICAgICAgICBlbHNlIGlmIChpc0VtcHR5KCkpCi0gICAgICAgICAgICBk
YXRhTG9nRigiRW1wdHkgS1VSTCIpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGRhdGFM
b2dGKCJJbnZhbGlkIEtVUkwgZnJvbSBzdHJpbmcgPSIpOwotICAgICAgICAgICAgbV91cmxJbXBs
LT5tX2ludmFsaWRVcmxTdHJpbmcuc2hvdygpOwotICAgICAgICB9Ci0gICAgfQotfQotI2VuZGlm
Ci0KLXZvaWQgS1VSTDo6aW52YWxpZGF0ZSgpCi17Ci0gICAgbV91cmxJbXBsID0gbnVsbHB0cjsK
LX0KLQotYm9vbCBLVVJMOjppc0hpZXJhcmNoaWNhbCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc1Zh
bGlkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV91cmxJbXBsLT5tX3Bh
cnNlZFVSTC5oYXNTdGFuZGFyZFNjaGVtZSgpOwotfQotCi1ib29sIHByb3RvY29sSXMoY29uc3Qg
U3RyaW5nJiwgY29uc3QgY2hhciopCi17Ci0gICAgLy8gRklYTUU6IEFkZCBXVEZVUkwgSW1wbGVt
ZW50YXRpb24uCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIGVxdWFsSWdub3JpbmdGcmFn
bWVudElkZW50aWZpZXIoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmKQotewotICAgIC8vIEZJWE1F
OiBBZGQgV1RGVVJMIEltcGxlbWVudGF0aW9uLgotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwoY29uc3QgS1VSTCYgYSwgY29uc3QgS1VSTCYg
YikKLXsKLSAgICBpZiAoIWEuaXNWYWxpZCgpIHx8ICFiLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGEucHJvdG9jb2woKSA9PSBiLnByb3RvY29sKCkKLSAg
ICAgICAgICAgJiYgYS5ob3N0KCkgPT0gYi5ob3N0KCkKLSAgICAgICAgICAgJiYgYS5wb3J0KCkg
PT0gYi5wb3J0KCk7Ci19Ci0KLVN0cmluZyBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKGNv
bnN0IFN0cmluZyYpCi17Ci0gICAgLy8gRklYTUU6IEFkZCBXVEZVUkwgSW1wbGVtZW50YXRpb24u
Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgZGVjb2RlVVJMRXNjYXBlU2VxdWVu
Y2VzKGNvbnN0IFN0cmluZyYpCi17Ci0gICAgLy8gRklYTUU6IEFkZCBXVEZVUkwgSW1wbGVtZW50
YXRpb24uCi0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgZGVjb2RlVVJMRXNjYXBl
U2VxdWVuY2VzKGNvbnN0IFN0cmluZyYsIGNvbnN0IFRleHRFbmNvZGluZyYpCi17Ci0gICAgLy8g
RklYTUU6IEFkZCBXVEZVUkwgSW1wbGVtZW50YXRpb24uCi0gICAgcmV0dXJuIFN0cmluZygpOwot
fQotCi19Ci0KLSNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vS1VSTFdURlVSTEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tV
UkxXVEZVUkxJbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2ODkyZDNjOGVh
Yzc1MTAwZjAxNjhjMzg4OGJiNTRhNDQ1NDBlOTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTFdURlVSTElt
cGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgS1VS
TFdURlVSTEltcGxfaAotI2RlZmluZSBLVVJMV1RGVVJMSW1wbF9oCi0KLSNpZiBVU0UoV1RGVVJM
KQotCi0jaW5jbHVkZSAiUGxhdGZvcm1NZW1vcnlJbnN0cnVtZW50YXRpb24uaCIKLSNpbmNsdWRl
IDx3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uUGFyc2VkVVJMLmg+Ci0jaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYv
dXJsL2FwaS9QYXJzZWRVUkwuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBLVVJM
V1RGVVJMSW1wbCA6IHB1YmxpYyBSZWZDb3VudGVkPEtVUkxXVEZVUkxJbXBsPiB7Ci1wdWJsaWM6
Ci0gICAgV1RGOjpQYXJzZWRVUkwgbV9wYXJzZWRVUkw7Ci0gICAgU3RyaW5nIG1faW52YWxpZFVy
bFN0cmluZzsKLQotICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyog
bWVtb3J5T2JqZWN0SW5mbykgY29uc3QKLSAgICB7Ci0gICAgICAgIE1lbW9yeUNsYXNzSW5mbyBp
bmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMpOwotICAgICAgICBpbmZvLmFkZE1lbWJlcihtX3Bh
cnNlZFVSTCwgInBhcnNlZFVSTCIpOwotICAgICAgICBpbmZvLmFkZE1lbWJlcihtX2ludmFsaWRV
cmxTdHJpbmcsICJpbnZhbGlkVXJsU3RyaW5nIik7Ci0gICAgfQotICAgIGJvb2wgaXNTYWZlVG9T
ZW5kVG9Bbm90aGVyVGhyZWFkKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2ludmFs
aWRVcmxTdHJpbmcuaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkKLSAgICAgICAgICAgICYm
IG1fcGFyc2VkVVJMLmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpOwotICAgIH0KLSAgICBQ
YXNzUmVmUHRyPEtVUkxXVEZVUkxJbXBsPiBjb3B5KCkgY29uc3Q7Ci19OwotCi1pbmxpbmUgUGFz
c1JlZlB0cjxLVVJMV1RGVVJMSW1wbD4gS1VSTFdURlVSTEltcGw6OmNvcHkoKSBjb25zdAotewot
ICAgIFJlZlB0cjxLVVJMV1RGVVJMSW1wbD4gY2xvbmUgPSBhZG9wdFJlZihuZXcgS1VSTFdURlVS
TEltcGwpOwotICAgIGNsb25lLT5tX3BhcnNlZFVSTCA9IG1fcGFyc2VkVVJMLmlzb2xhdGVkQ29w
eSgpOwotICAgIGNsb25lLT5tX2ludmFsaWRVcmxTdHJpbmcgPSBtX2ludmFsaWRVcmxTdHJpbmcu
aXNvbGF0ZWRDb3B5KCk7Ci0gICAgcmV0dXJuIGNsb25lLnJlbGVhc2UoKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKFdURlVSTCkKLQotI2VuZGlmIC8vIEtV
UkxXVEZVUkxJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL0tV
UkxDRk5ldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9LVVJMQ0ZOZXQuY3BwCmlu
ZGV4IDQ1OGQ5ODdmMTllMTU0MWZlNzA3ZWI4OGIyNDYyZDA4OTEzYTcxNTMuLmQ0ZWRlMGI5MDM3
ZmRmOWI1ODc1ZWIyMzEyMWQ3ZTY3YTY3NGM2MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NmL0tVUkxDRk5ldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2YvS1VSTENGTmV0LmNwcApAQCAtNDksMTMgKzQ5LDcgQEAgS1VSTDo6S1VSTChDRlVSTFJlZiB1
cmwpCiAgICAgY2hhciogYnl0ZXMgPSAmYnVmZmVyWzBdOwogICAgIENGVVJMR2V0Qnl0ZXModXJs
LCByZWludGVycHJldF9jYXN0PFVJbnQ4Kj4oYnl0ZXMpLCBieXRlc0xlbmd0aCk7CiAgICAgYnl0
ZXNbYnl0ZXNMZW5ndGhdID0gJ1wwJzsKLSNpZiAhVVNFKFdURlVSTCkKICAgICBwYXJzZShieXRl
cyk7Ci0jZWxzZQotICAgIC8vIEZJWE1FOiBBZGQgV1RGVVJMIEltcGxlbWVudGF0aW9uLgotICAg
IFVOVVNFRF9QQVJBTSh1cmwpOwotICAgIGludmFsaWRhdGUoKTsKLSNlbmRpZiAvLyBVU0UoV1RG
VVJMKQogfQogCiBDRlVSTFJlZiBjcmVhdGVDRlVSTEZyb21CdWZmZXIoY29uc3QgQ2hhckJ1ZmZl
ciYgYnVmZmVyKQpAQCAtNzMsMjEgKzY3LDE2IEBAIENGVVJMUmVmIGNyZWF0ZUNGVVJMRnJvbUJ1
ZmZlcihjb25zdCBDaGFyQnVmZmVyJiBidWZmZXIpCiAjaWYgIVBMQVRGT1JNKE1BQykgJiYgIShQ
TEFURk9STShRVCkgJiYgVVNFKFFUS0lUKSkKIENGVVJMUmVmIEtVUkw6OmNyZWF0ZUNGVVJMKCkg
Y29uc3QKIHsKLSNpZiAhVVNFKFdURlVSTCkKICAgICAvLyBGSVhNRTogV2hhdCBzaG91bGQgdGhp
cyByZXR1cm4gZm9yIGludmFsaWQgVVJMcz8KICAgICAvLyBDdXJyZW50bHkgaXQgdGhyb3dzIGF3
YXkgdGhlIGhpZ2ggYnl0ZXMgb2YgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBpbiB0aGF0
IGNhc2UsCiAgICAgLy8gd2hpY2ggaXMgY2xlYXJseSB3cm9uZy4KICAgICBDaGFyQnVmZmVyIGJ1
ZmZlcjsKICAgICBjb3B5VG9CdWZmZXIoYnVmZmVyKTsKICAgICByZXR1cm4gY3JlYXRlQ0ZVUkxG
cm9tQnVmZmVyKGJ1ZmZlcik7Ci0jZWxzZSAvLyBVU0UoV1RGVVJMKQotICAgIC8vIEZJWE1FOiBB
ZGQgV1RGVVJMIEltcGxlbWVudGF0aW9uLgotICAgIHJldHVybiAwOwotI2VuZGlmCiB9CiAjZW5k
aWYKIAotI2lmICFVU0UoV1RGVVJMKSAmJiAhKFBMQVRGT1JNKFFUKSAmJiBVU0UoUVRLSVQpKQor
I2lmICEoUExBVEZPUk0oUVQpICYmIFVTRShRVEtJVCkpCiBTdHJpbmcgS1VSTDo6ZmlsZVN5c3Rl
bVBhdGgoKSBjb25zdAogewogICAgIFJldGFpblB0cjxDRlVSTFJlZj4gY2ZVUkwoQWRvcHRDRiwg
Y3JlYXRlQ0ZVUkwoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
S1VSTE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9LVVJMTWFjLm1tCmluZGV4
IGQ1YzI1ZTE0N2JjMDc3NzgyZTBjNDI0OWE5ODI3NTQ5MGQ5OGQyNzcuLjk0ODFmOTBmMDcyNzdl
ZDI2OGQyMjMyNTQwNmY4MmRjOGNkNTNmZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9LVVJMTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9L
VVJMTWFjLm1tCkBAIC00OCwxNSArNDgsNyBAQCBLVVJMOjpLVVJMKE5TVVJMICp1cmwpCiAgICAg
Y2hhciogYnl0ZXMgPSAmYnVmZmVyWzBdOwogICAgIENGVVJMR2V0Qnl0ZXMocmVpbnRlcnByZXRf
Y2FzdDxDRlVSTFJlZj4odXJsKSwgcmVpbnRlcnByZXRfY2FzdDxVSW50OCo+KGJ5dGVzKSwgYnl0
ZXNMZW5ndGgpOwogICAgIGJ5dGVzW2J5dGVzTGVuZ3RoXSA9ICdcMCc7Ci0jaWYgIVVTRShXVEZV
UkwpCiAgICAgcGFyc2UoYnl0ZXMpOwotI2Vsc2UKLSAgICBtX3VybEltcGwgPSBhZG9wdFJlZihu
ZXcgS1VSTFdURlVSTEltcGwoKSk7Ci0gICAgU3RyaW5nIHVybFN0cmluZyhieXRlcywgYnl0ZXNM
ZW5ndGgpOwotICAgIG1fdXJsSW1wbC0+bV9wYXJzZWRVUkwgPSBQYXJzZWRVUkwodXJsU3RyaW5n
LCAwKTsKLSAgICBpZiAoIW1fdXJsSW1wbC0+bV9wYXJzZWRVUkwuaXNWYWxpZCgpKQotICAgICAg
ICBtX3VybEltcGwtPm1faW52YWxpZFVybFN0cmluZyA9IHVybFN0cmluZzsKLSNlbmRpZiAvLyBV
U0UoV1RGVVJMKQogfQogCiBLVVJMOjpvcGVyYXRvciBOU1VSTCAqKCkgY29uc3QKQEAgLTc1LDE1
ICs2Nyw3IEBAIENGVVJMUmVmIEtVUkw6OmNyZWF0ZUNGVVJMKCkgY29uc3QKICAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZVUkxSZWY+KFtbTlNVUkwgYWxsb2NdIGluaXRXaXRoU3Ry
aW5nOkAiIl0pOwogCiAgICAgQ2hhckJ1ZmZlciBidWZmZXI7Ci0jaWYgIVVTRShXVEZVUkwpCiAg
ICAgY29weVRvQnVmZmVyKGJ1ZmZlcik7Ci0jZWxzZQotICAgIFN0cmluZyB1cmxTdHJpbmcgPSBz
dHJpbmcoKTsKLSAgICBidWZmZXIucmVzaXplKHVybFN0cmluZy5sZW5ndGgoKSk7Ci0gICAgc2l6
ZV90IGxlbmd0aCA9IHVybFN0cmluZy5sZW5ndGgoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKQotICAgICAgICBidWZmZXJbaV0gPSBzdGF0aWNfY2FzdDxjaGFyPih1
cmxTdHJpbmdbaV0pOwotI2VuZGlmCiAgICAgcmV0dXJuIGNyZWF0ZUNGVVJMRnJvbUJ1ZmZlcihi
dWZmZXIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29y
ZVN1cHBvcnQvQWJvdXREYXRhVXNlRmVhdHVyZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViQ29yZVN1cHBvcnQvQWJvdXREYXRhVXNlRmVhdHVyZXMuaW4KaW5kZXggZWNjZmJmMzhm
YjAyNjRkNmQ3ZGFjMmE5YWRlNTQwNTYxYzI0YzI1OS4uNDZjZjk4MzEyMGQyY2VhZDFmYjZhZDVm
ZTc1ZWU2NTAzNzhmZDg0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dl
YkNvcmVTdXBwb3J0L0Fib3V0RGF0YVVzZUZlYXR1cmVzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9BYm91dERhdGFVc2VGZWF0dXJlcy5pbgpAQCAtMTEy
LDcgKzExMiw2IEBAIFdFQlAKIFdDSEFSX1VOSUNPREUKIFdJTklORVQKIFdLX1NDUk9MTEJBUl9Q
QUlOVEVSCi1XVEZVUkwKIFdYCiBXWEdDCiBaTElCCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2Uv
V2ViS2l0RmVhdHVyZXMuY21ha2UgYi9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UK
aW5kZXggNmRlMzVhMTM2ZmIxMzZjMmM3MDIxZjQ0ODQ4MzZlMjVjNDIxZDZmMy4uNWFjNzZiNmQ5
MmIxNWY2MDQzOTUxMGQ2YTIwMTVhMTA1OGRiYzQwZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtl
L1dlYktpdEZlYXR1cmVzLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5j
bWFrZQpAQCAtMTM2LDcgKzEzNiw2IEBAIG1hY3JvKFdFQktJVF9PUFRJT05fQkVHSU4pCiAgICAg
V0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1hTTFQgIlRvZ2dsZSBYU0xUIHN1cHBvcnQiIE9O
KQogICAgIFdFQktJVF9PUFRJT05fREVGSU5FKFVTRV9TWVNURU1fTUFMTE9DICJUb2dnbGUgc3lz
dGVtIGFsbG9jYXRvciBpbnN0ZWFkIG9mIFRDbWFsbG9jIiBPRkYpCiAgICAgV0VCS0lUX09QVElP
Tl9ERUZJTkUoV1RGX1VTRV9USUxFRF9CQUNLSU5HX1NUT1JFICJUb2dnbGUgVGlsZWQgQmFja2lu
ZyBTdG9yZSBzdXBwb3J0IiBPRkYpCi0gICAgV0VCS0lUX09QVElPTl9ERUZJTkUoV1RGX1VTRV9X
VEZVUkwgIlRvZ2dsZSB0aGUgdXNlIG9mIFdURlVSTCBmb3IgVVJMIHBhcnNpbmciIE9GRikKIGVu
ZG1hY3JvKCkKIAogbWFjcm8oV0VCS0lUX09QVElPTl9FTkQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
Y21ha2Vjb25maWcuaC5jbWFrZSBiL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCmluZGV4IGQ5
ZmJhYTJhN2ZmYmU4ODUzNDIzMGJkN2U2N2M5MzVlMmE2MTE5ZjEuLjdmNjJlOWE4MjU4Y2RmZDhj
MmQwZTQ3ODBhMjUxNmNkNzU3ODk3ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZWNvbmZpZy5o
LmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlCkBAIC0xMzIsNiArMTMyLDUg
QEAKICNjbWFrZWRlZmluZTAxIEVOQUJMRV9YU0xUCiAjY21ha2VkZWZpbmUwMSBVU0VfU1lTVEVN
X01BTExPQwogI2NtYWtlZGVmaW5lMDEgV1RGX1VTRV9USUxFRF9CQUNLSU5HX1NUT1JFCi0jY21h
a2VkZWZpbmUwMSBXVEZfVVNFX1dURlVSTAogCiAjZW5kaWYgLyogQ01BS0VDT05GSUdfSCAqLwpk
aWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDM5OTNmM2EwZTNkNDcyZDJh
NmI0NWU2NDIwYTk4MGMxOWZkMDBhNDIuLjVmMDc4MmU1YzljMzUxZTNlZGZjMmU0NTQ3NWYzOTYw
Yzc2NjY1YWQgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMyBAQAorMjAxMy0wNC0wNCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmUgV1RGVVJMIGZyb20gV2ViS2l0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM5OTQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9XZWJLaXRGZWF0
dXJlcy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2UvY21ha2Vjb25maWcuaC5jbWFrZToKKwogMjAx
My0wNC0wNCAgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgIDxjYWx2YXJpc0BpZ2FsaWEuY29tPgog
CiAgICAgICAgIFtHU3RyZWFtZXJdIFZpcnR1YWwgbW9kaWZpZXIgZm9yIE1lZGlhUGxheWVyOjpz
aW11bGF0ZUF1ZGlvSW50ZXJydXB0aW9uIG11c3QgZ28K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196579</attachid>
            <date>2013-04-04 23:04:44 -0700</date>
            <delta_ts>2013-04-05 00:04:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-113994-20130404230433.patch</filename>
            <type>text/plain</type>
            <size>443410</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ3NzA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGNjMjMwMWFlMzZiZWFhNDc2NzdjYjgz
YjkwNmY5NWZlYmM0NzdiMjAuLmNiNzI3OWZiM2VkMTI1NTAyNTNmNDczNjFjY2ZiOWM3ODk5N2I0
ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTMtMDQtMDQgIEJlbmphbWluIFBvdWxhaW4gIDxi
cG91bGFpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFdURlVSTCBmcm9tIFdlYktpdAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzOTk0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgorCisgICAgICAgIFBhaW5mdWwsIGJ1
dCB0aGF0IGlzIGZvciB0aGUgYmVzdCBub3cgOigKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxp
c3QuYW06CisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogd3RmL01lbW9yeUluc3RydW1lbnRhdGlvblBhcnNlZFVSTC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHd0Zi91cmwvYXBpL1BhcnNlZFVSTC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd3RmL3Vy
bC9hcGkvUGFyc2VkVVJMLmg6IFJlbW92ZWQuCisgICAgICAgICogd3RmL3VybC9hcGkvVVJMQnVm
ZmVyLmg6IFJlbW92ZWQuCisgICAgICAgICogd3RmL3VybC9hcGkvVVJMUXVlcnlDaGFyc2V0Q29u
dmVydGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogd3RmL3VybC9hcGkvVVJMU3RyaW5nLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvdXJsL2FwaS9VUkxTdHJpbmcuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiB3dGYvdXJsL3NyYy9SYXdVUkxCdWZmZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3
dGYvdXJsL3NyYy9VUkxDYW5vbi5oOiBSZW1vdmVkLgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VS
TENhbm9uRXRjLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5vbkZp
bGVzeXN0ZW11cmwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTENhbm9u
RmlsZXVybC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd3RmL3VybC9zcmMvVVJMQ2Fub25Ib3N0
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDYW5vbklDVS5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogd3RmL3VybC9zcmMvVVJMQ2Fub25JUC5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogd3RmL3VybC9zcmMvVVJMQ2Fub25JbnRlcm5hbC5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogd3RmL3VybC9zcmMvVVJMQ2Fub25JbnRlcm5hbC5oOiBSZW1vdmVkLgorICAgICAgICAq
IHd0Zi91cmwvc3JjL1VSTENhbm9uTWFpbHRvLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYv
dXJsL3NyYy9VUkxDYW5vblBhdGguY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHd0Zi91cmwvc3Jj
L1VSTENhbm9uUGF0aHVybC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd3RmL3VybC9zcmMvVVJM
Q2Fub25RdWVyeS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd3RmL3VybC9zcmMvVVJMQ2Fub25S
ZWxhdGl2ZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd3RmL3VybC9zcmMvVVJMQ2Fub25TdGRV
UkwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTENoYXJhY3RlclR5cGVz
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxDaGFyYWN0ZXJUeXBlcy5o
OiBSZW1vdmVkLgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTENvbXBvbmVudC5oOiBSZW1vdmVk
LgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTEZpbGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3
dGYvdXJsL3NyYy9VUkxQYXJzZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd3RmL3VybC9zcmMv
VVJMUGFyc2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxQYXJzZUZpbGUu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHd0Zi91cmwvc3JjL1VSTFBhcnNlSW50ZXJuYWwuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvdXJsL3NyYy9VUkxTZWdtZW50cy5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogd3RmL3VybC9zcmMvVVJMU2VnbWVudHMuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiB3dGYvdXJsL3NyYy9VUkxVdGlsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvdXJsL3Ny
Yy9VUkxVdGlsLmg6IFJlbW92ZWQuCisgICAgICAgICogd3RmL3VybC9zcmMvVVJMVXRpbEludGVy
bmFsLmg6IFJlbW92ZWQuCisKIDIwMTMtMDQtMDQgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFw
cGxlLmNvbT4KIAogICAgICAgICBOaXhlZCB0aGUgZGVmdW5jdCBjaHJvbWl1bSBmb2xkZXIgZnJv
bSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCA5N2E0MWJkMmJmMjdiYjM3NDM0MjNhZjUzYzU3NWM2MDg3Zjdh
NTc2Li41MTg4MjZlNDRiYjJjNzVjZTIzYTE3N2UxNGI0NWVmMzhjYTU4OWQ1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMzAgQEAKKzIwMTMtMDQtMDQgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFp
bkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFdURlVSTCBmcm9tIFdlYktpdAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzOTk0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlz
dC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vS1VSTC5jcHA6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnJlcG9ydE1lbW9yeVVzYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCk6
CisgICAgICAgICogcGxhdGZvcm0vS1VSTC5oOgorICAgICAgICAoS1VSTCk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMV1RGVVJMLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9LVVJMV1RGVVJMSW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2NmL0tVUkxDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpLVVJMKToK
KyAgICAgICAgKFdlYkNvcmU6OktVUkw6OmNyZWF0ZUNGVVJMKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9LVVJMTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6
S1VSTDo6S1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpjcmVhdGVDRlVSTCk6CisKIDIw
MTMtMDQtMDQgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUXQg
YnVpbGQgZml4IGF0dGVtcHQgYWZ0ZXIgcjE0NzY4NC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdl
TG9nCmluZGV4IDk1NjAxNTliNmYxNGNiNmJmODZhZWEzNjkxMWI0N2Y0OWJjOTdjZDUuLjAzYjQ3
ZmQyZjBhZGNhNjI3Y2Q0NmE5OWQ4ZjhlMzBiOTkzZjUxY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEzLTA0LTA0ICBCZW5qYW1pbiBQb3VsYWlu
ICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBXVEZVUkwgZnJvbSBXZWJL
aXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzk5
NAorCisgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KKworICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0Fib3V0RGF0YVVzZUZlYXR1cmVzLmluOgorCiAyMDEzLTA0LTA0ICBBbmRyZXcg
TG8gIDxhbmxvQHJpbS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVycnldIERPTVN1cHBvcnQ6Omlz
Rml4ZWRQb3NpdGlvbk9ySGFzRml4ZWRQb3NpdGlvbkFuY2VzdG9yIHN0b3BzIHRyYXZlcnNpbmcg
cmVuZGVyIHRyZWUgd2hlbiBpdCBoaXRzIGFuIGlmcmFtZSBlbGVtZW50CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxp
c3QuYW0KaW5kZXggMjViNmMyNzM2M2VkNzA1ZmZmZTE5ZTM4YTA3ZjZlODk1MzczOTM2Ny4uOTQ3
MjZjMWRmYWJhYmM4Mzg1NTRmMDc5ZTIyMDAxZmQ5OWFmNDU1OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XVEYvR05VbWFrZWZpbGUubGlz
dC5hbQpAQCAtOTMsNyArOTMsNiBAQCB3dGZfc291cmNlcyArPSBcCiAgICAgU291cmNlL1dURi93
dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaE1hcC5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9N
ZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoU2V0LmggXAogICAgIFNvdXJjZS9XVEYvd3RmL01lbW9y
eUluc3RydW1lbnRhdGlvbkxpc3RIYXNoU2V0LmggXAotICAgIFNvdXJjZS9XVEYvd3RmL01lbW9y
eUluc3RydW1lbnRhdGlvblBhcnNlZFVSTC5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9NZW1vcnlJ
bnN0cnVtZW50YXRpb25TZXF1ZW5jZS5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9NZW1vcnlJbnN0
cnVtZW50YXRpb25TdHJpbmcuaCBcCiAgICAgU291cmNlL1dURi93dGYvTWVtb3J5SW5zdHJ1bWVu
dGF0aW9uVmVjdG9yLmggXApAQCAtMjY3LDM5ICsyNjYsNCBAQCB3dGZfc291cmNlcyArPSBcCiAg
ICAgU291cmNlL1dURi93dGYvdW5pY29kZS9Vbmljb2RlTWFjcm9zRnJvbUlDVS5oIFwKICAgICBT
b3VyY2UvV1RGL3d0Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5jcHAgXAogICAgIFNvdXJjZS9X
VEYvd3RmL3VuaWNvZGUvaWN1L1VuaWNvZGVJY3UuaCBcCi0gICAgU291cmNlL1dURi93dGYvdXJs
L2FwaS9QYXJzZWRVUkwuY3BwIFwKLSAgICBTb3VyY2UvV1RGL3d0Zi91cmwvYXBpL1BhcnNlZFVS
TC5oIFwKLSAgICBTb3VyY2UvV1RGL3d0Zi91cmwvYXBpL1VSTEJ1ZmZlci5oIFwKLSAgICBTb3Vy
Y2UvV1RGL3d0Zi91cmwvYXBpL1VSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlci5oIFwKLSAgICBTb3Vy
Y2UvV1RGL3d0Zi91cmwvYXBpL1VSTFN0cmluZy5jcHAgXAotICAgIFNvdXJjZS9XVEYvd3RmL3Vy
bC9hcGkvVVJMU3RyaW5nLmggXAotICAgIFNvdXJjZS9XVEYvd3RmL3VybC9zcmMvUmF3VVJMQnVm
ZmVyLmggXAotICAgIFNvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25FdGMuY3BwIFwKLSAg
ICBTb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uRmlsZXN5c3RlbXVybC5jcHAgXAotICAg
IFNvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25GaWxldXJsLmNwcCBcCi0gICAgU291cmNl
L1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbkhvc3QuY3BwIFwKLSAgICBTb3VyY2UvV1RGL3d0Zi91
cmwvc3JjL1VSTENhbm9uSUNVLmNwcCBcCi0gICAgU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxD
YW5vbkludGVybmFsLmNwcCBcCi0gICAgU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbklu
dGVybmFsLmggXAotICAgIFNvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25JUC5jcHAgXAot
ICAgIFNvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25NYWlsdG8uY3BwIFwKLSAgICBTb3Vy
Y2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uUGF0aC5jcHAgXAotICAgIFNvdXJjZS9XVEYvd3Rm
L3VybC9zcmMvVVJMQ2Fub25QYXRodXJsLmNwcCBcCi0gICAgU291cmNlL1dURi93dGYvdXJsL3Ny
Yy9VUkxDYW5vblF1ZXJ5LmNwcCBcCi0gICAgU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5v
blJlbGF0aXZlLmNwcCBcCi0gICAgU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vblN0ZFVS
TC5jcHAgXAotICAgIFNvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub24uaCBcCi0gICAgU291
cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDaGFyYWN0ZXJUeXBlcy5jcHAgXAotICAgIFNvdXJjZS9X
VEYvd3RmL3VybC9zcmMvVVJMQ2hhcmFjdGVyVHlwZXMuaCBcCi0gICAgU291cmNlL1dURi93dGYv
dXJsL3NyYy9VUkxDb21wb25lbnQuaCBcCi0gICAgU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxG
aWxlLmggXAotICAgIFNvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMUGFyc2UuY3BwIFwKLSAgICBT
b3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFBhcnNlRmlsZS5jcHAgXAotICAgIFNvdXJjZS9XVEYv
d3RmL3VybC9zcmMvVVJMUGFyc2VJbnRlcm5hbC5oIFwKLSAgICBTb3VyY2UvV1RGL3d0Zi91cmwv
c3JjL1VSTFBhcnNlLmggXAotICAgIFNvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMU2VnbWVudHMu
Y3BwIFwKLSAgICBTb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFNlZ21lbnRzLmggXAotICAgIFNv
dXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMVXRpbC5jcHAgXAotICAgIFNvdXJjZS9XVEYvd3RmL3Vy
bC9zcmMvVVJMVXRpbC5oIFwKLSAgICBTb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFV0aWxJbnRl
cm5hbC5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi93aW4vT3duUHRyV2luLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi9XVEYucHJvIGIvU291cmNlL1dURi9XVEYucHJvCmluZGV4IGQ4ZDI3ZGVm
ODFiZjgxZmE4ZTczOTMxMjJhZjEyNmIzMzY2MWQyOWUuLjhlMmZjYmU3OGJkMWQ5MDcyNmEwYWU3
ZDUxYWE1MzYyNGNlYmQ4YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnBybworKysgYi9T
b3VyY2UvV1RGL1dURi5wcm8KQEAgLTk1LDcgKzk1LDYgQEAgSEVBREVSUyArPSBcCiAgICAgTWVt
b3J5SW5zdHJ1bWVudGF0aW9uSGFzaE1hcC5oIFwKICAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25I
YXNoU2V0LmggXAogICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkxpc3RIYXNoU2V0LmggXAotICAg
IE1lbW9yeUluc3RydW1lbnRhdGlvblBhcnNlZFVSTC5oIFwKICAgICBNZW1vcnlJbnN0cnVtZW50
YXRpb25TZXF1ZW5jZS5oIFwKICAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25TdHJpbmcuaCBcCiAg
ICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uVmVjdG9yLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri9XVEYudmN4cHJvai9XVEYudmN4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZj
eHByb2oKaW5kZXggMTBkMTg2MmI5NWYzOWI1ZmIwZTBjZjE2NGVlNWJmNTQ5YjVhZGIxZC4uOWEx
OGM5N2EyMjVlNTQ5ZDNjOTAxNDdjYzJhZjFhZDExZDUyNGQzNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi52Y3hwcm9q
L1dURi52Y3hwcm9qCkBAIC0xNzEsNyArMTcxLDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHd0ZlxNZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoTWFwLmgiIC8+DQogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cd3RmXE1lbW9yeUluc3RydW1lbnRhdGlvbkhhc2hTZXQuaCIgLz4NCiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcTWVtb3J5SW5zdHJ1bWVudGF0aW9uTGlzdEhh
c2hTZXQuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcTWVtb3J5SW5zdHJ1
bWVudGF0aW9uUGFyc2VkVVJMLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3Rm
XE1lbW9yeUluc3RydW1lbnRhdGlvblNlcXVlbmNlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cd3RmXE1lbW9yeUluc3RydW1lbnRhdGlvblN0cmluZy5oIiAvPg0KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxNZW1vcnlJbnN0cnVtZW50YXRpb25WZWN0b3IuaCIgLz4N
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnMg
Yi9Tb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnMKaW5kZXggMzc2M2E2
NDM0MzA1ZmFmYmFhZTU1NTg4NWE2Y2UyNzE3OGQzYjJmNy4uZTEzNzk0MDkzOTk1MDZlNzhlMTU2
MTlhMmNlN2E3OTRmYWUyMmU5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYudmN4cHJvai9X
VEYudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHBy
b2ouZmlsdGVycwpAQCAtNTIxLDkgKzUyMSw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
Llx3dGZcTWVtb3J5SW5zdHJ1bWVudGF0aW9uTGlzdEhhc2hTZXQuaCI+DQogICAgICAgPEZpbHRl
cj53dGY8L0ZpbHRlcj4NCiAgICAgPC9DbEluY2x1ZGU+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cd3RmXE1lbW9yeUluc3RydW1lbnRhdGlvblBhcnNlZFVSTC5oIj4NCi0gICAgICA8Rmls
dGVyPnd0ZjwvRmlsdGVyPg0KLSAgICA8L0NsSW5jbHVkZT4NCiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlx3dGZcTWVtb3J5SW5zdHJ1bWVudGF0aW9uU2VxdWVuY2UuaCI+DQogICAgICAgPEZp
bHRlcj53dGY8L0ZpbHRlcj4NCiAgICAgPC9DbEluY2x1ZGU+DQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjkwMzQ0ZThiYTAyZDhiMTk3NjhhZjdkODE3YmQ5
MGNjNGVkNDQ5Mi4uNjk1ZWE5YTgzMWJhYzNjYjE4OGQ0YTQwMGU1YmRiZmRhYjczNTY4YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00NCwzOSArNDQsMTMg
QEAKIAkJMTRGM0IwRjcxNUU0NUU0NjAwMjEwMDY5IC8qIFNhdHVyYXRlZEFyaXRobWV0aWMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RjNCMEY2MTVF
NDVFNDYwMDIxMDA2OSAvKiBTYXR1cmF0ZWRBcml0aG1ldGljLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMUE2QkI3NjkxNjJGMzAwNTAwREQxNkRCIC8qIFN0cmVh
bUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUE2QkI3NjgxNjJGMzAwNTAwREQxNkRCIC8qIFN0cmVhbUJ1ZmZlci5oICovOyB9OwogCQkyNjE0
N0IwQTE1RERDQ0RDMDBEREI5MDcgLyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjYxNDdCMDgxNUREQ0NE
QzAwRERCOTA3IC8qIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaCAqLzsgfTsKLQkJMjY2MTEy
MkUxNjBGRUFENDAwMTNGNUMzIC8qIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjY2MTEyMkQxNjBGRUFENDAw
MTNGNUMzIC8qIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlci5oICovOyB9OwotCQkyNkU2QzFFRTE2
MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25FdGMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFNkMxQ0UxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENh
bm9uRXRjLmNwcCAqLzsgfTsKLQkJMjZFNkMxRUYxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9u
RmlsZXN5c3RlbXVybC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyNkU2QzFDRjE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25GaWxlc3lzdGVtdXJs
LmNwcCAqLzsgfTsKLQkJMjZFNkMxRjAxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uRmlsZXVy
bC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2
QzFEMDE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25GaWxldXJsLmNwcCAqLzsgfTsKLQkJMjZF
NkMxRjExNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uSG9zdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFEMTE2MDkwMzczMDBDQTZBRjQg
LyogVVJMQ2Fub25Ib3N0LmNwcCAqLzsgfTsKLQkJMjZFNkMxRjIxNjA5MDM3MzAwQ0E2QUY0IC8q
IFVSTENhbm9uSUNVLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDI2RTZDMUQyMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbklDVS5jcHAgKi87IH07
Ci0JCTI2RTZDMUY1MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkludGVybmFsLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZDMUQ1MTYwOTAz
NzMwMENBNkFGNCAvKiBVUkxDYW5vbkludGVybmFsLmNwcCAqLzsgfTsKLQkJMjZFNkMxRjYxNjA5
MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZDMUQ2MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxD
YW5vbkludGVybmFsLmggKi87IH07Ci0JCTI2RTZDMUY3MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxD
YW5vbklQLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDI2RTZDMUQ3MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbklQLmNwcCAqLzsgfTsKLQkJMjZF
NkMxRjkxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uTWFpbHRvLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZDMUQ5MTYwOTAzNzMwMENBNkFG
NCAvKiBVUkxDYW5vbk1haWx0by5jcHAgKi87IH07Ci0JCTI2RTZDMUZBMTYwOTAzNzMwMENBNkFG
NCAvKiBVUkxDYW5vblBhdGguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMjZFNkMxREExNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUGF0aC5jcHAg
Ki87IH07Ci0JCTI2RTZDMUZCMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vblBhdGh1cmwuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFNkMxREIx
NjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUGF0aHVybC5jcHAgKi87IH07Ci0JCTI2RTZDMUZD
MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vblF1ZXJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZDMURDMTYwOTAzNzMwMENBNkFGNCAvKiBV
UkxDYW5vblF1ZXJ5LmNwcCAqLzsgfTsKLQkJMjZFNkMxRkQxNjA5MDM3MzAwQ0E2QUY0IC8qIFVS
TENhbm9uUmVsYXRpdmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMjZFNkMxREQxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUmVsYXRpdmUuY3Bw
ICovOyB9OwotCQkyNkU2QzFGRjE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25TdGRVUkwuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFNkMxREYx
NjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uU3RkVVJMLmNwcCAqLzsgfTsKLQkJMjZFNkMyMDEx
NjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFFMTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub24u
aCAqLzsgfTsKLQkJMjZFNkMyMDMxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTEZpbGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTZDMUUzMTYwOTAzNzMw
MENBNkFGNCAvKiBVUkxGaWxlLmggKi87IH07Ci0JCTI2RTZDMjA0MTYwOTAzNzMwMENBNkFGNCAv
KiBVUkxQYXJzZUZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMjZFNkMxRTQxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFBhcnNlRmlsZS5jcHAgKi87
IH07Ci0JCTI2RTZDMjA1MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxQYXJzZUludGVybmFsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFFNTE2MDkw
MzczMDBDQTZBRjQgLyogVVJMUGFyc2VJbnRlcm5hbC5oICovOyB9OwotCQkyNkU2QzIwNzE2MDkw
MzczMDBDQTZBRjQgLyogVVJMUGFyc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjZFNkMxRTcxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFBhcnNlLmNw
cCAqLzsgfTsKLQkJMjZFNkMyMDgxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFBhcnNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFFODE2MDkwMzcz
MDBDQTZBRjQgLyogVVJMUGFyc2UuaCAqLzsgfTsKLQkJMjZFNkMyMEExNjA5MDM3MzAwQ0E2QUY0
IC8qIFVSTFV0aWxJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMjZFNkMxRUExNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFV0aWxJbnRlcm5hbC5o
ICovOyB9OwotCQkyNkU2QzIwQzE2MDkwMzczMDBDQTZBRjQgLyogVVJMVXRpbC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU2QzFFQzE2MDkwMzcz
MDBDQTZBRjQgLyogVVJMVXRpbC5jcHAgKi87IH07Ci0JCTI2RTZDMjBEMTYwOTAzNzMwMENBNkFG
NCAvKiBVUkxVdGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyNkU2QzFFRDE2MDkwMzczMDBDQTZBRjQgLyogVVJMVXRpbC5oICovOyB9OwogCQkyQzA1
Mzg1NDE1QkM4MTkwMDBGMjFCOTYgLyogR3JlZ29yaWFuRGF0ZVRpbWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJDMDUzODUzMTVCQzgxOTAwMEYyMUI5
NiAvKiBHcmVnb3JpYW5EYXRlVGltZS5oICovOyB9OwogCQkyQ0NEODkyQTE1QzAzOTAyMDAyODUw
ODMgLyogR3JlZ29yaWFuRGF0ZVRpbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkNDRDg5MjkxNUMwMzkwMjAwMjg1MDgzIC8qIEdyZWdvcmlhbkRh
dGVUaW1lLmNwcCAqLzsgfTsKLQkJNDMzMEYzOEYxNTc0NUIwNTAwQUFGQThGIC8qIFVSTFN0cmlu
Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzMw
RjM4RTE1NzQ1QjA1MDBBQUZBOEYgLyogVVJMU3RyaW5nLmNwcCAqLzsgfTsKIAkJNEYwMzIxQkMx
NTZBQThEMTAwNkVCQUY2IC8qIEJpdEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0RjAzMjFCQjE1NkFBOEQxMDA2RUJBRjYgLyogQml0QXJyYXku
aCAqLzsgfTsKIAkJNEYxQjJEQjYxNjBCNDRBQTAwNTg2NTU5IC8qIE1lbW9yeUluc3RydW1lbnRh
dGlvbkhhc2hTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDRGMUIyREI1MTYwQjQ0QUEwMDU4NjU1OSAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25IYXNo
U2V0LmggKi87IH07CiAJCTRGMUQxMTU0MTVGRjExQkUwMDI2RTkwOCAvKiBNZW1vcnlJbnN0cnVt
ZW50YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDRGMUQxMTUzMTVGRjExQkUwMDI2RTkwOCAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb24uaCAqLzsg
fTsKIAkJNEZDQjcxMEExNjBBMUEwNzAwODQyNUVDIC8qIE1lbW9yeUluc3RydW1lbnRhdGlvblZl
Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEZD
QjcxMDkxNjBBMUEwNzAwODQyNUVDIC8qIE1lbW9yeUluc3RydW1lbnRhdGlvblZlY3Rvci5oICov
OyB9OwogCQk0RkNGMjdFMTE2MTcyRTg2MDBDQkYwMzcgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9u
U3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
RkNGMjdFMDE2MTcyRTg2MDBDQkYwMzcgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uU3RyaW5nLmgg
Ki87IH07Ci0JCTRGRDJBMzU5MTYxQjBFRTEwMEVCRjIzNiAvKiBNZW1vcnlJbnN0cnVtZW50YXRp
b25QYXJzZWRVUkwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDRGRDJBMzU4MTYxQjBFRTEwMEVCRjIzNiAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25QYXJz
ZWRVUkwuaCAqLzsgfTsKIAkJNEZEODU1NDcxNjEzM0UwRTAwQzVCNzA0IC8qIE1lbW9yeUluc3Ry
dW1lbnRhdGlvbkFycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNEZEODU1NDYxNjEzM0UwRTAwQzVCNzA0IC8qIE1lbW9yeUluc3Ry
dW1lbnRhdGlvbkFycmF5QnVmZmVyVmlldy5oICovOyB9OwogCQk3RTI5QzMzRTE1RkZENzlCMDA1
MTZENjEgLyogT2JqY1J1bnRpbWVFeHRyYXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdFMjlDMzNEMTVGRkQ3OUIwMDUxNkQ2MSAvKiBPYmpjUnVudGlt
ZUV4dHJhcy5oICovOyB9OwogCQk4MTM0MDEzODE1QjA5MkZEMDAxRkYwQjggLyogQmFzZTY0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgxMzQwMTM2
MTVCMDkyRkQwMDFGRjBCOCAvKiBCYXNlNjQuY3BwICovOyB9OwpAQCAtMjkwLDE2ICsyNjQsNiBA
QAogCQlBOEE0NzQ2QTE1MUE4MjVCMDA0MTIzRkYgLyogVVRGOC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczNTgxNTFBODI1QjAwNDEyM0ZGIC8q
IFVURjguaCAqLzsgfTsKIAkJQThBNDc0NkQxNTFBODI1QjAwNDEyM0ZGIC8qIFVuaW9uRmluZC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczNUMx
NTFBODI1QjAwNDEyM0ZGIC8qIFVuaW9uRmluZC5oICovOyB9OwogCQlBOEE0NzQ2RTE1MUE4MjVC
MDA0MTIzRkYgLyogVW51c2VkUGFyYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzVEMTUxQTgyNUIwMDQxMjNGRiAvKiBVbnVzZWRQYXJhbS5o
ICovOyB9OwotCQlBOEE0NzQ2RjE1MUE4MjVCMDA0MTIzRkYgLyogUGFyc2VkVVJMLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzYwMTUxQTgy
NUIwMDQxMjNGRiAvKiBQYXJzZWRVUkwuY3BwICovOyB9OwotCQlBOEE0NzQ3MDE1MUE4MjVCMDA0
MTIzRkYgLyogUGFyc2VkVVJMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOEE0NzM2MTE1MUE4MjVCMDA0MTIzRkYgLyogUGFyc2VkVVJMLmggKi87IH07
Ci0JCUE4QTQ3NDcxMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxTdHJpbmcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzYyMTUxQTgyNUIwMDQxMjNG
RiAvKiBVUkxTdHJpbmcuaCAqLzsgfTsKLQkJQThBNDc0NzIxNTFBODI1QjAwNDEyM0ZGIC8qIFJh
d1VSTEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQThBNDczNjQxNTFBODI1QjAwNDEyM0ZGIC8qIFJhd1VSTEJ1ZmZlci5oICovOyB9OwotCQlB
OEE0NzQ3MzE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzM2NTE1MUE4MjVCMDA0MTIzRkYgLyog
VVJMQnVmZmVyLmggKi87IH07Ci0JCUE4QTQ3NDc0MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxDaGFy
YWN0ZXJUeXBlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBOEE0NzM2NjE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQ2hhcmFjdGVyVHlwZXMuY3BwICov
OyB9OwotCQlBOEE0NzQ3NTE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQ2hhcmFjdGVyVHlwZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzY3MTUx
QTgyNUIwMDQxMjNGRiAvKiBVUkxDaGFyYWN0ZXJUeXBlcy5oICovOyB9OwotCQlBOEE0NzQ3NjE1
MUE4MjVCMDA0MTIzRkYgLyogVVJMQ29tcG9uZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzM2ODE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQ29t
cG9uZW50LmggKi87IH07Ci0JCUE4QTQ3NDdCMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxTZWdtZW50
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0
NzM2RDE1MUE4MjVCMDA0MTIzRkYgLyogVVJMU2VnbWVudHMuY3BwICovOyB9OwotCQlBOEE0NzQ3
QzE1MUE4MjVCMDA0MTIzRkYgLyogVVJMU2VnbWVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzZFMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxT
ZWdtZW50cy5oICovOyB9OwogCQlBOEE0NzQ3RDE1MUE4MjVCMDA0MTIzRkYgLyogVmFsdWVDaGVj
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDcz
NkYxNTFBODI1QjAwNDEyM0ZGIC8qIFZhbHVlQ2hlY2suaCAqLzsgfTsKIAkJQThBNDc0N0UxNTFB
ODI1QjAwNDEyM0ZGIC8qIFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQThBNDczNzAxNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3Rvci5oICovOyB9
OwogCQlBOEE0NzQ3RjE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yVHJhaXRzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzM3MTE1MUE4MjVCMDA0
MTIzRkYgLyogVmVjdG9yVHJhaXRzLmggKi87IH07CkBAIC0zNTUsNDAgKzMxOSwxNCBAQAogCQkx
NEYzQjBGNjE1RTQ1RTQ2MDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGhtZXRpYy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYXR1cmF0ZWRBcml0aG1ldGljLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBNkJCNzY4MTYyRjMwMDUwMEREMTZEQiAvKiBTdHJlYW1C
dWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyZWFtQnVmZmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2MTQ3QjA4MTVERENDREMwMEREQjkwNyAv
KiBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMjY2MTEyMkQxNjBGRUFENDAwMTNGNUMzIC8qIFVSTFF1ZXJ5Q2hhcnNldENvbnZl
cnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVUkxRdWVyeUNoYXJzZXRD
b252ZXJ0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjZFNkMxQ0UxNjA5MDM3
MzAwQ0E2QUY0IC8qIFVSTENhbm9uRXRjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFVSTENhbm9uRXRjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MjZFNkMxQ0YxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uRmlsZXN5c3RlbXVybC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVUkxDYW5vbkZpbGVzeXN0ZW11cmwu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyNkU2QzFEMDE2MDkwMzczMDBDQTZB
RjQgLyogVVJMQ2Fub25GaWxldXJsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFVSTENhbm9uRmlsZXVybC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTI2RTZDMUQxMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkhvc3QuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVVJMQ2Fub25Ib3N0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMjZFNkMxRDIxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uSUNV
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTENhbm9uSUNVLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjZFNkMxRDUxNjA5MDM3MzAwQ0E2QUY0
IC8qIFVSTENhbm9uSW50ZXJuYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVVJMQ2Fub25JbnRlcm5hbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTI2RTZDMUQ2MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkludGVybmFsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVSTENhbm9uSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMjZFNkMxRDcxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uSVAu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVVJMQ2Fub25JUC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTI2RTZDMUQ5MTYwOTAzNzMwMENBNkFGNCAv
KiBVUkxDYW5vbk1haWx0by5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBVUkxDYW5vbk1haWx0by5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTI2RTZD
MURBMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vblBhdGguY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVVJMQ2Fub25QYXRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMjZFNkMxREIxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUGF0aHVybC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVUkxDYW5vblBhdGh1cmwu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyNkU2QzFEQzE2MDkwMzczMDBDQTZB
RjQgLyogVVJMQ2Fub25RdWVyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBVUkxDYW5vblF1ZXJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjZF
NkMxREQxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUmVsYXRpdmUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVVJMQ2Fub25SZWxhdGl2ZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTI2RTZDMURGMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5v
blN0ZFVSTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVUkxDYW5v
blN0ZFVSTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTI2RTZDMUUxMTYwOTAz
NzMwMENBNkFGNCAvKiBVUkxDYW5vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBVUkxDYW5vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyNkU2QzFFMzE2MDkw
MzczMDBDQTZBRjQgLyogVVJMRmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBVUkxGaWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTI2RTZDMUU0MTYwOTAz
NzMwMENBNkFGNCAvKiBVUkxQYXJzZUZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gVVJMUGFyc2VGaWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMjZFNkMxRTUxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFBhcnNlSW50ZXJuYWwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVJMUGFyc2VJbnRlcm5hbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkyNkU2QzFFNzE2MDkwMzczMDBDQTZBRjQgLyogVVJMUGFyc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVVJMUGFyc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyNkU2QzFFODE2MDkwMzczMDBDQTZBRjQgLyog
VVJMUGFyc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVJMUGFyc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjZFNkMxRUExNjA5MDM3MzAwQ0E2QUY0IC8q
IFVSTFV0aWxJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVUkxV
dGlsSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjZFNkMxRUMxNjA5
MDM3MzAwQ0E2QUY0IC8qIFVSTFV0aWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVVJMVXRpbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTI2RTZD
MUVEMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxVdGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFVSTFV0aWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkMwNTM4
NTMxNUJDODE5MDAwRjIxQjk2IC8qIEdyZWdvcmlhbkRhdGVUaW1lLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEdyZWdvcmlhbkRhdGVUaW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTJDQ0Q4OTI5MTVDMDM5MDIwMDI4NTA4MyAvKiBHcmVnb3JpYW5EYXRlVGlt
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmVnb3JpYW5EYXRl
VGltZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQzMzBGMzhFMTU3NDVCMDUw
MEFBRkE4RiAvKiBVUkxTdHJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVVJMU3RyaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDRERUU3
NEExNTIyNzRCQjAwQzZFQzM3IC8qIGlPUy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25m
aWc7IHBhdGggPSBpT1MueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRG
MDMyMUJCMTU2QUE4RDEwMDZFQkFGNiAvKiBCaXRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBCaXRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
RjFCMkRCNTE2MEI0NEFBMDA1ODY1NTkgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaFNldC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZW1vcnlJbnN0cnVtZW50YXRpb25I
YXNoU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRGMUQxMTUzMTVGRjExQkUw
MDI2RTkwOCAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTRGQ0I3MTA5MTYwQTFBMDcwMDg0MjVFQyAvKiBNZW1vcnlJbnN0cnVtZW50YXRp
b25WZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVtb3J5SW5zdHJ1
bWVudGF0aW9uVmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRGQ0YyN0Uw
MTYxNzJFODYwMENCRjAzNyAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25TdHJpbmcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVtb3J5SW5zdHJ1bWVudGF0aW9uU3RyaW5nLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTRGRDJBMzU4MTYxQjBFRTEwMEVCRjIzNiAv
KiBNZW1vcnlJbnN0cnVtZW50YXRpb25QYXJzZWRVUkwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWVtb3J5SW5zdHJ1bWVudGF0aW9uUGFyc2VkVVJMLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTRGRDg1NTQ2MTYxMzNFMEUwMEM1QjcwNCAvKiBNZW1vcnlJbnN0
cnVtZW50YXRpb25BcnJheUJ1ZmZlclZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWVtb3J5SW5zdHJ1bWVudGF0aW9uQXJyYXlCdWZmZXJWaWV3Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTVEMjQ3QjYyMTQ2ODlCODYwMEU3OEI3NiAvKiBsaWJXVEYuYSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5h
cjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGliV1RGLmE7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07CiAJCTVEMjQ3QjZFMTQ2ODlDNDcwMEU3OEI3NiAvKiBCYXNlLnhj
Y29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC54Y2NvbmZpZzsgcGF0aCA9IEJhc2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC02MTAsMTYgKzU0OCw2IEBACiAJCUE4QTQ3MzU4MTUxQTgyNUIwMDQxMjNGRiAv
KiBVVEY4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVURjguaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczNUMxNTFBODI1QjAwNDEyM0ZGIC8qIFVuaW9u
RmluZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmlvbkZpbmQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczNUQxNTFBODI1QjAwNDEyM0ZGIC8qIFVu
dXNlZFBhcmFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVudXNlZFBhcmFt
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4QTQ3MzYwMTUxQTgyNUIwMDQxMjNG
RiAvKiBQYXJzZWRVUkwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UGFyc2VkVVJMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThBNDczNjExNTFB
ODI1QjAwNDEyM0ZGIC8qIFBhcnNlZFVSTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQYXJzZWRVUkwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThBNDczNjIx
NTFBODI1QjAwNDEyM0ZGIC8qIFVSTFN0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBVUkxTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThBNDcz
NjQxNTFBODI1QjAwNDEyM0ZGIC8qIFJhd1VSTEJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSYXdVUkxCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQThBNDczNjUxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTEJ1ZmZlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBVUkxCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQThBNDczNjYxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTENoYXJhY3RlclR5cGVzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTENoYXJhY3RlclR5cGVzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThBNDczNjcxNTFBODI1QjAwNDEyM0ZG
IC8qIFVSTENoYXJhY3RlclR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFVSTENoYXJhY3RlclR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4QTQ3
MzY4MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxDb21wb25lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVVJMQ29tcG9uZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUE4QTQ3MzZEMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxTZWdtZW50cy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVUkxTZWdtZW50cy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUE4QTQ3MzZFMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxTZWdtZW50
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVUkxTZWdtZW50cy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzM2RjE1MUE4MjVCMDA0MTIzRkYgLyogVmFs
dWVDaGVjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZUNoZWNrLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzcwMTUxQTgyNUIwMDQxMjNGRiAv
KiBWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmVjdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzcxMTUxQTgyNUIwMDQxMjNGRiAvKiBW
ZWN0b3JUcmFpdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmVjdG9yVHJh
aXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02OTgsNyArNjI2LDYgQEAKIAkJ
CQlBOEE0NzMxQjE1MUE4MjVCMDA0MTIzRkYgLyogdGV4dCAqLywKIAkJCQlBOEE0NzMzOTE1MUE4
MjVCMDA0MTIzRkYgLyogdGhyZWFkcyAqLywKIAkJCQlBOEE0NzM0ODE1MUE4MjVCMDA0MTIzRkYg
LyogdW5pY29kZSAqLywKLQkJCQlBOEE0NzM1RTE1MUE4MjVCMDA0MTIzRkYgLyogdXJsICovLAog
CQkJCUE4QTQ3MjU0MTUxQTgyNUEwMDQxMjNGRiAvKiBBbGlnbm1lbnQuaCAqLywKIAkJCQlBOEE0
NzI1NTE1MUE4MjVBMDA0MTIzRkYgLyogQWx3YXlzSW5saW5lLmggKi8sCiAJCQkJQThBNDcyNTYx
NTFBODI1QTAwNDEyM0ZGIC8qIEFycmF5QnVmZmVyLmNwcCAqLywKQEAgLTc5Myw3ICs3MjAsNiBA
QAogCQkJCUYzNTI1RTQ1MTYxOUE0RUUwMDI3OEJDMSAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25I
YXNoTWFwLmggKi8sCiAJCQkJNEYxQjJEQjUxNjBCNDRBQTAwNTg2NTU5IC8qIE1lbW9yeUluc3Ry
dW1lbnRhdGlvbkhhc2hTZXQuaCAqLywKIAkJCQlGMzUyNUUyOTE2MTQ5RkY0MDAyNzhCQzEgLyog
TWVtb3J5SW5zdHJ1bWVudGF0aW9uTGlzdEhhc2hTZXQuaCAqLywKLQkJCQk0RkQyQTM1ODE2MUIw
RUUxMDBFQkYyMzYgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uUGFyc2VkVVJMLmggKi8sCiAJCQkJ
RjNGQkM3MUYxNjFBRjdDRDAwQkI0QkQ0IC8qIE1lbW9yeUluc3RydW1lbnRhdGlvblNlcXVlbmNl
LmggKi8sCiAJCQkJNEZDRjI3RTAxNjE3MkU4NjAwQ0JGMDM3IC8qIE1lbW9yeUluc3RydW1lbnRh
dGlvblN0cmluZy5oICovLAogCQkJCTRGQ0I3MTA5MTYwQTFBMDcwMDg0MjVFQyAvKiBNZW1vcnlJ
bnN0cnVtZW50YXRpb25WZWN0b3IuaCAqLywKQEAgLTEwMTEsNjQgKzkzNyw2IEBACiAJCQlwYXRo
ID0gaWN1OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJQThBNDczNUUxNTFB
ODI1QjAwNDEyM0ZGIC8qIHVybCAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRy
ZW4gPSAoCi0JCQkJQThBNDczNUYxNTFBODI1QjAwNDEyM0ZGIC8qIGFwaSAqLywKLQkJCQlBOEE0
NzM2MzE1MUE4MjVCMDA0MTIzRkYgLyogc3JjICovLAotCQkJKTsKLQkJCXBhdGggPSB1cmw7Ci0J
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQlBOEE0NzM1RjE1MUE4MjVCMDA0MTIz
RkYgLyogYXBpICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJ
CQlBOEE0NzM2MDE1MUE4MjVCMDA0MTIzRkYgLyogUGFyc2VkVVJMLmNwcCAqLywKLQkJCQlBOEE0
NzM2MTE1MUE4MjVCMDA0MTIzRkYgLyogUGFyc2VkVVJMLmggKi8sCi0JCQkJQThBNDczNjUxNTFB
ODI1QjAwNDEyM0ZGIC8qIFVSTEJ1ZmZlci5oICovLAotCQkJCTI2NjExMjJEMTYwRkVBRDQwMDEz
RjVDMyAvKiBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIuaCAqLywKLQkJCQk0MzMwRjM4RTE1NzQ1
QjA1MDBBQUZBOEYgLyogVVJMU3RyaW5nLmNwcCAqLywKLQkJCQlBOEE0NzM2MjE1MUE4MjVCMDA0
MTIzRkYgLyogVVJMU3RyaW5nLmggKi8sCi0JCQkpOwotCQkJcGF0aCA9IGFwaTsKLQkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCUE4QTQ3MzYzMTUxQTgyNUIwMDQxMjNGRiAvKiBz
cmMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCUE4QTQ3
MzY0MTUxQTgyNUIwMDQxMjNGRiAvKiBSYXdVUkxCdWZmZXIuaCAqLywKLQkJCQkyNkU2QzFFMTE2
MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub24uaCAqLywKLQkJCQkyNkU2QzFDRTE2MDkwMzczMDBD
QTZBRjQgLyogVVJMQ2Fub25FdGMuY3BwICovLAotCQkJCTI2RTZDMUNGMTYwOTAzNzMwMENBNkFG
NCAvKiBVUkxDYW5vbkZpbGVzeXN0ZW11cmwuY3BwICovLAotCQkJCTI2RTZDMUQwMTYwOTAzNzMw
MENBNkFGNCAvKiBVUkxDYW5vbkZpbGV1cmwuY3BwICovLAotCQkJCTI2RTZDMUQxMTYwOTAzNzMw
MENBNkFGNCAvKiBVUkxDYW5vbkhvc3QuY3BwICovLAotCQkJCTI2RTZDMUQyMTYwOTAzNzMwMENB
NkFGNCAvKiBVUkxDYW5vbklDVS5jcHAgKi8sCi0JCQkJMjZFNkMxRDUxNjA5MDM3MzAwQ0E2QUY0
IC8qIFVSTENhbm9uSW50ZXJuYWwuY3BwICovLAotCQkJCTI2RTZDMUQ2MTYwOTAzNzMwMENBNkFG
NCAvKiBVUkxDYW5vbkludGVybmFsLmggKi8sCi0JCQkJMjZFNkMxRDcxNjA5MDM3MzAwQ0E2QUY0
IC8qIFVSTENhbm9uSVAuY3BwICovLAotCQkJCTI2RTZDMUQ5MTYwOTAzNzMwMENBNkFGNCAvKiBV
UkxDYW5vbk1haWx0by5jcHAgKi8sCi0JCQkJMjZFNkMxREExNjA5MDM3MzAwQ0E2QUY0IC8qIFVS
TENhbm9uUGF0aC5jcHAgKi8sCi0JCQkJMjZFNkMxREIxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENh
bm9uUGF0aHVybC5jcHAgKi8sCi0JCQkJMjZFNkMxREMxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENh
bm9uUXVlcnkuY3BwICovLAotCQkJCTI2RTZDMUREMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5v
blJlbGF0aXZlLmNwcCAqLywKLQkJCQkyNkU2QzFERjE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fu
b25TdGRVUkwuY3BwICovLAotCQkJCUE4QTQ3MzY2MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxDaGFy
YWN0ZXJUeXBlcy5jcHAgKi8sCi0JCQkJQThBNDczNjcxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTENo
YXJhY3RlclR5cGVzLmggKi8sCi0JCQkJQThBNDczNjgxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTENv
bXBvbmVudC5oICovLAotCQkJCTI2RTZDMUUzMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxGaWxlLmgg
Ki8sCi0JCQkJMjZFNkMxRTcxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFBhcnNlLmNwcCAqLywKLQkJ
CQkyNkU2QzFFODE2MDkwMzczMDBDQTZBRjQgLyogVVJMUGFyc2UuaCAqLywKLQkJCQkyNkU2QzFF
NDE2MDkwMzczMDBDQTZBRjQgLyogVVJMUGFyc2VGaWxlLmNwcCAqLywKLQkJCQkyNkU2QzFFNTE2
MDkwMzczMDBDQTZBRjQgLyogVVJMUGFyc2VJbnRlcm5hbC5oICovLAotCQkJCUE4QTQ3MzZEMTUx
QTgyNUIwMDQxMjNGRiAvKiBVUkxTZWdtZW50cy5jcHAgKi8sCi0JCQkJQThBNDczNkUxNTFBODI1
QjAwNDEyM0ZGIC8qIFVSTFNlZ21lbnRzLmggKi8sCi0JCQkJMjZFNkMxRUMxNjA5MDM3MzAwQ0E2
QUY0IC8qIFVSTFV0aWwuY3BwICovLAotCQkJCTI2RTZDMUVEMTYwOTAzNzMwMENBNkFGNCAvKiBV
UkxVdGlsLmggKi8sCi0JCQkJMjZFNkMxRUExNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTFV0aWxJbnRl
cm5hbC5oICovLAotCQkJKTsKLQkJCXBhdGggPSBzcmM7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwotCQl9OwogLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYSGVh
ZGVyc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwpAQCAtMTE3MSw3ICsxMDM5LDYgQEAKIAkJCQlGMzUy
NUU0NjE2MTlBNEVFMDAyNzhCQzEgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaE1hcC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNEYxQjJEQjYxNjBCNDRBQTAwNTg2NTU5IC8qIE1lbW9yeUluc3Ry
dW1lbnRhdGlvbkhhc2hTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzNTI1RTJBMTYxNDlGRjQw
MDI3OEJDMSAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25MaXN0SGFzaFNldC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNEZEMkEzNTkxNjFCMEVFMTAwRUJGMjM2IC8qIE1lbW9yeUluc3RydW1lbnRhdGlv
blBhcnNlZFVSTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjNGQkM3MjAxNjFBRjdDRDAwQkI0QkQ0
IC8qIE1lbW9yeUluc3RydW1lbnRhdGlvblNlcXVlbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0
RkNGMjdFMTE2MTcyRTg2MDBDQkYwMzcgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uU3RyaW5nLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0RkNCNzEwQTE2MEExQTA3MDA4NDI1RUMgLyogTWVtb3J5SW5z
dHJ1bWVudGF0aW9uVmVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTExOTcsNyArMTA2NCw2IEBA
CiAJCQkJQThBNDc0MDQxNTFBODI1QjAwNDEyM0ZGIC8qIFBhZ2VSZXNlcnZhdGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQThBNDc0MDUxNTFBODI1QjAwNDEyM0ZGIC8qIFBhcmFsbGVsSm9icy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MDgxNTFBODI1QjAwNDEyM0ZGIC8qIFBhcmFsbGVs
Sm9ic0xpYmRpc3BhdGNoLmggaW4gSGVhZGVycyAqLywKLQkJCQlBOEE0NzQ3MDE1MUE4MjVCMDA0
MTIzRkYgLyogUGFyc2VkVVJMLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQwQTE1MUE4MjVC
MDA0MTIzRkYgLyogUGFzc093bkFycmF5UHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQw
QjE1MUE4MjVCMDA0MTIzRkYgLyogUGFzc093blB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThB
NDc0MEMxNTFBODI1QjAwNDEyM0ZGIC8qIFBhc3NSZWZQdHIuaCBpbiBIZWFkZXJzICovLApAQCAt
MTIxMCw3ICsxMDc2LDYgQEAKIAkJCQlBOEE0NzQxNTE1MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9t
TnVtYmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxNjE1MUE4MjVCMDA0MTIzRkYgLyog
UmFuZG9tTnVtYmVyU2VlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4NzEwNUExNjY0M0YxOTAw
OTBCMEFEIC8qIFJhd1BvaW50ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUE4QTQ3NDcyMTUxQTgy
NUIwMDQxMjNGRiAvKiBSYXdVUkxCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDE3
MTUxQTgyNUIwMDQxMjNGRiAvKiBSZWRCbGFja1RyZWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
QTQ3NDE4MTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEE0NzQxOTE1MUE4MjVCMDA0MTIzRkYgLyogUmVmQ291bnRlZEFycmF5LmggaW4gSGVhZGVy
cyAqLywKQEAgLTEyNjYsMTkgKzExMzEsNiBAQAogCQkJCUE4QTQ3NDY4MTUxQTgyNUIwMDQxMjNG
RiAvKiBVbmljb2RlTWFjcm9zRnJvbUlDVS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NkQx
NTFBODI1QjAwNDEyM0ZGIC8qIFVuaW9uRmluZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0
NkUxNTFBODI1QjAwNDEyM0ZGIC8qIFVudXNlZFBhcmFtLmggaW4gSGVhZGVycyAqLywKLQkJCQlB
OEE0NzQ3MzE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQnVmZmVyLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkyNkU2QzIwMTE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub24uaCBpbiBIZWFkZXJzICovLAot
CQkJCTI2RTZDMUY2MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkludGVybmFsLmggaW4gSGVh
ZGVycyAqLywKLQkJCQlBOEE0NzQ3NTE1MUE4MjVCMDA0MTIzRkYgLyogVVJMQ2hhcmFjdGVyVHlw
ZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCUE4QTQ3NDc2MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxD
b21wb25lbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTI2RTZDMjAzMTYwOTAzNzMwMENBNkFGNCAv
KiBVUkxGaWxlLmggaW4gSGVhZGVycyAqLywKLQkJCQkyNkU2QzIwODE2MDkwMzczMDBDQTZBRjQg
LyogVVJMUGFyc2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTI2RTZDMjA1MTYwOTAzNzMwMENBNkFG
NCAvKiBVUkxQYXJzZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKLQkJCQkyNjYxMTIyRTE2MEZF
QUQ0MDAxM0Y1QzMgLyogVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyLmggaW4gSGVhZGVycyAqLywK
LQkJCQlBOEE0NzQ3QzE1MUE4MjVCMDA0MTIzRkYgLyogVVJMU2VnbWVudHMuaCBpbiBIZWFkZXJz
ICovLAotCQkJCUE4QTQ3NDcxMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxTdHJpbmcuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTI2RTZDMjBEMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxVdGlsLmggaW4gSGVh
ZGVycyAqLywKLQkJCQkyNkU2QzIwQTE2MDkwMzczMDBDQTZBRjQgLyogVVJMVXRpbEludGVybmFs
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ2QTE1MUE4MjVCMDA0MTIzRkYgLyogVVRGOC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczQjkxNTFBODI1QjAwNDEyM0ZGIC8qIHV0aWxzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ3RDE1MUE4MjVCMDA0MTIzRkYgLyogVmFsdWVDaGVj
ay5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNDA0LDcgKzEyNTYsNiBAQAogCQkJCUE4QTQ3M0Y5MTUx
QTgyNUIwMDQxMjNGRiAvKiBPU1JhbmRvbVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
OEE0NzQwMDE1MUE4MjVCMDA0MTIzRkYgLyogUGFnZUFsbG9jYXRpb25BbGlnbmVkLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE4QTQ3NDAyMTUxQTgyNUIwMDQxMjNGRiAvKiBQYWdlQmxvY2suY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJQThBNDc0NkYxNTFBODI1QjAwNDEyM0ZGIC8qIFBhcnNlZFVS
TC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM2MjE2NURCQTczMDA1QUQzODcgLyogUHJp
bnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQzRjYxMUYxNTY1RjBGOTAwREI1MTRB
IC8qIFJBTVNpemUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0MTQxNTFBODI1QjAwNDEy
M0ZGIC8qIFJhbmRvbU51bWJlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE0MjQsMjUgKzEyNzUs
NiBAQAogCQkJCUE4QTQ3NDRBMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQThBNDc0NEUxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1B0aHJl
YWRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDU4MTUxQTgyNUIwMDQxMjNGRiAvKiBU
eXBlVHJhaXRzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTI2RTZDMUVFMTYwOTAzNzMwMENBNkFG
NCAvKiBVUkxDYW5vbkV0Yy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyNkU2QzFFRjE2MDkwMzcz
MDBDQTZBRjQgLyogVVJMQ2Fub25GaWxlc3lzdGVtdXJsLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTI2RTZDMUYwMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vbkZpbGV1cmwuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJMjZFNkMxRjExNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uSG9zdC5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQkyNkU2QzFGMjE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25J
Q1UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMjZFNkMxRjUxNjA5MDM3MzAwQ0E2QUY0IC8qIFVS
TENhbm9uSW50ZXJuYWwuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMjZFNkMxRjcxNjA5MDM3MzAw
Q0E2QUY0IC8qIFVSTENhbm9uSVAuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMjZFNkMxRjkxNjA5
MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uTWFpbHRvLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTI2
RTZDMUZBMTYwOTAzNzMwMENBNkFGNCAvKiBVUkxDYW5vblBhdGguY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJMjZFNkMxRkIxNjA5MDM3MzAwQ0E2QUY0IC8qIFVSTENhbm9uUGF0aHVybC5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkyNkU2QzFGQzE2MDkwMzczMDBDQTZBRjQgLyogVVJMQ2Fub25RdWVy
eS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyNkU2QzFGRDE2MDkwMzczMDBDQTZBRjQgLyogVVJM
Q2Fub25SZWxhdGl2ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyNkU2QzFGRjE2MDkwMzczMDBD
QTZBRjQgLyogVVJMQ2Fub25TdGRVUkwuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQThBNDc0NzQx
NTFBODI1QjAwNDEyM0ZGIC8qIFVSTENoYXJhY3RlclR5cGVzLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTI2RTZDMjA3MTYwOTAzNzMwMENBNkFGNCAvKiBVUkxQYXJzZS5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQkyNkU2QzIwNDE2MDkwMzczMDBDQTZBRjQgLyogVVJMUGFyc2VGaWxlLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCUE4QTQ3NDdCMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxTZWdtZW50cy5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQk0MzMwRjM4RjE1NzQ1QjA1MDBBQUZBOEYgLyogVVJMU3Ry
aW5nLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTI2RTZDMjBDMTYwOTAzNzMwMENBNkFGNCAvKiBV
UkxVdGlsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDY5MTUxQTgyNUIwMDQxMjNGRiAv
KiBVVEY4LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDQ1MTUxQTgyNUIwMDQxMjNGRiAv
KiBXVEZTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0ODYxNTFBODI1QjAwNDEy
M0ZGIC8qIFdURlRocmVhZERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0
CmluZGV4IDNmMDYxYmNjY2YyMzg1YzY2YjRjYmM0ZDQ2MzM0N2UyMjcwMjVkNmUuLjY3YTI0YTM5
NGIyMWVkYTA1OTkxNTc3YzhhNDE4MjlhYTRhNGI5N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBA
IC01NCw3ICs1NCw2IEBAIHNldChXVEZfSEVBREVSUwogICAgIE1lbW9yeUluc3RydW1lbnRhdGlv
bkhhc2hNYXAuaAogICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkhhc2hTZXQuaAogICAgIE1lbW9y
eUluc3RydW1lbnRhdGlvbkxpc3RIYXNoU2V0LmgKLSAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25Q
YXJzZWRVUkwuaAogICAgIE1lbW9yeUluc3RydW1lbnRhdGlvblNlcXVlbmNlLmgKICAgICBNZW1v
cnlJbnN0cnVtZW50YXRpb25TdHJpbmcuaAogICAgIE1lbW9yeUluc3RydW1lbnRhdGlvblZlY3Rv
ci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25QYXJz
ZWRVUkwuaCBiL1NvdXJjZS9XVEYvd3RmL01lbW9yeUluc3RydW1lbnRhdGlvblBhcnNlZFVSTC5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Mjk1NWU2ODk5N2M3MzIzYzIzMWRiODU1
OTBkNGZjOGVmYjI4M2RmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL01lbW9yeUluc3RydW1lbnRhdGlvblBhcnNlZFVSTC5oCisr
KyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTWVtb3J5SW5zdHJ1bWVudGF0aW9u
UGFyc2VkVVJMX2gKLSNkZWZpbmUgTWVtb3J5SW5zdHJ1bWVudGF0aW9uUGFyc2VkVVJMX2gKLQot
I2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb24uaD4KLSNpbmNsdWRlIDx3dGYvTWVt
b3J5SW5zdHJ1bWVudGF0aW9uU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3VybC9hcGkvUGFyc2Vk
VVJMLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1pbmxpbmUgdm9pZCByZXBvcnRNZW1vcnlVc2Fn
ZShjb25zdCBVUkxTdHJpbmcqIHVybFN0cmluZywgTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2Jq
ZWN0SW5mbykKLXsKLSAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB1
cmxTdHJpbmcpOwotICAgIGluZm8uYWRkTWVtYmVyKHVybFN0cmluZy0+c3RyaW5nKCkpOwotfQot
Ci1pbmxpbmUgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShjb25zdCBQYXJzZWRVUkwqIHBhcnNlZFVS
TCwgTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykKLXsKLSAgICBNZW1vcnlDbGFz
c0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCBwYXJzZWRVUkwpOwotICAgIGluZm8uYWRkTWVt
YmVyKHBhcnNlZFVSTC0+c3BlYygpKTsKLX0KLQotfQotCi0jZW5kaWYgLy8gIWRlZmluZWQoTWVt
b3J5SW5zdHJ1bWVudGF0aW9uaVBhcnNlZFVSTF9oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvdXJsL2FwaS9QYXJzZWRVUkwuY3BwIGIvU291cmNlL1dURi93dGYvdXJsL2FwaS9QYXJzZWRV
UkwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzEzYTMyN2U3MWM0ZDY5ZDVi
NDViMjAyYTVmMjU3ODQ0YTZkNjc1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL3VybC9hcGkvUGFyc2VkVVJMLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDM1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBhcnNlZFVSTC5o
IgotCi0jaWYgVVNFKFdURlVSTCkKLQotI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4K
LSNpbmNsdWRlIDx3dGYvdXJsL3NyYy9SYXdVUkxCdWZmZXIuaD4KLSNpbmNsdWRlIDx3dGYvdXJs
L3NyYy9VUkxDb21wb25lbnQuaD4KLSNpbmNsdWRlIDx3dGYvdXJsL3NyYy9VUkxVdGlsLmg+Ci0K
LW5hbWVzcGFjZSBXVEYgewotCi1QYXJzZWRVUkw6OlBhcnNlZFVSTChjb25zdCBTdHJpbmcmIHVy
bFN0cmluZywgUGFyc2VkVVJMU3RyaW5nVGFnKQotewotICAgIHVuc2lnbmVkIHVybFN0cmluZ0xl
bmd0aCA9IHVybFN0cmluZy5sZW5ndGgoKTsKLSAgICBpZiAoIXVybFN0cmluZ0xlbmd0aCkKLSAg
ICAgICAgcmV0dXJuOyAvLyBGSVhNRTogd2Ugc2hvdWxkIEFTU0VSVCBvbiB0aGlzLCBidXQgcGVv
cGxlIHVzZSBLVVJMIGluY29ycmVjdGx5IHdpdGggUGFyc2VkVVJMU3RyaW5nVGFnIDooLgotCi0g
ICAgUmF3VVJMQnVmZmVyPGNoYXI+IG91dHB1dEJ1ZmZlcjsKLSAgICBTdHJpbmcgYmFzZTsKLSAg
ICBjb25zdCBDU3RyaW5nJiBiYXNlU3RyID0gYmFzZS51dGY4KCk7Ci0gICAgYm9vbCBpc1ZhbGlk
ID0gZmFsc2U7Ci0gICAgVVJMU2VnbWVudHMgYmFzZVNlZ21lbnRzOwotCi0gICAgLy8gRklYTUU6
IHdlIHNob3VsZCB0YWtlIHNob3J0Y3V0cyBoZXJlISBXZSBkbyBub3QgaGF2ZSB0byByZXNvbHZl
IHRoZSByZWxhdGl2ZSBwYXJ0LgotICAgIGlmICh1cmxTdHJpbmcuaXM4Qml0KCkpCi0gICAgICAg
IGlzVmFsaWQgPSBVUkxVdGlsaXRpZXM6OnJlc29sdmVSZWxhdGl2ZShiYXNlU3RyLmRhdGEoKSwg
YmFzZVNlZ21lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odXJsU3RyaW5nLmNoYXJhY3RlcnM4
KCkpLCB1cmxTdHJpbmdMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvKiBjaGFyc2V0Q29udmVydGVyICovIDAsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRCdWZmZXIsICZtX3NlZ21lbnRz
KTsKLSAgICBlbHNlCi0gICAgICAgIGlzVmFsaWQgPSBVUkxVdGlsaXRpZXM6OnJlc29sdmVSZWxh
dGl2ZShiYXNlU3RyLmRhdGEoKSwgYmFzZVNlZ21lbnRzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsU3RyaW5nLmNoYXJhY3RlcnMxNigpLCB1cmxT
dHJpbmdMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvKiBjaGFyc2V0Q29udmVydGVyICovIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRCdWZmZXIsICZtX3NlZ21lbnRzKTsKLQotICAg
IC8vIEZJWE1FOiB3ZSBzaG91bGQgQVNTRVJUIG9uIGlzVmFsaWQsIGJ1dCBwZW9wbGUgdXNlIEtV
UkwgaW5jb3JyZWN0bHkgd2l0aCBQYXJzZWRVUkxTdHJpbmdUYWcgOiguCi0gICAgaWYgKGlzVmFs
aWQpCi0gICAgICAgIG1fc3BlYyA9IFVSTFN0cmluZyhTdHJpbmcob3V0cHV0QnVmZmVyLmRhdGEo
KSwgb3V0cHV0QnVmZmVyLmxlbmd0aCgpKSk7Ci19Ci0KLVBhcnNlZFVSTDo6UGFyc2VkVVJMKGNv
bnN0IFN0cmluZyYgdXJsU3RyaW5nLCBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q2hh
cnNldENvbnZlcnRlcikKLXsKLSAgICB1bnNpZ25lZCB1cmxTdHJpbmdMZW5ndGggPSB1cmxTdHJp
bmcubGVuZ3RoKCk7Ci0gICAgaWYgKCF1cmxTdHJpbmdMZW5ndGgpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFJhd1VSTEJ1ZmZlcjxjaGFyPiBvdXRwdXRCdWZmZXI7Ci0gICAgU3RyaW5nIGJhc2U7
Ci0gICAgY29uc3QgQ1N0cmluZyYgYmFzZVN0ciA9IGJhc2UudXRmOCgpOwotICAgIGJvb2wgaXNW
YWxpZCA9IGZhbHNlOwotICAgIFVSTFNlZ21lbnRzIGJhc2VTZWdtZW50czsKLQotICAgIC8vIEZJ
WE1FOiB3ZSBzaG91bGQgdGFrZSBzaG9ydGN1dHMgaGVyZSEgV2UgZG8gbm90IGhhdmUgdG8gcmVz
b2x2ZSB0aGUgcmVsYXRpdmUgcGFydC4KLSAgICBpZiAodXJsU3RyaW5nLmlzOEJpdCgpKQotICAg
ICAgICBpc1ZhbGlkID0gVVJMVXRpbGl0aWVzOjpyZXNvbHZlUmVsYXRpdmUoYmFzZVN0ci5kYXRh
KCksIGJhc2VTZWdtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHVybFN0cmluZy5jaGFyYWN0
ZXJzOCgpKSwgdXJsU3RyaW5nTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcXVlcnlDaGFyc2V0Q29udmVydGVyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0QnVmZmVyLCAmbV9zZWdtZW50
cyk7Ci0gICAgZWxzZQotICAgICAgICBpc1ZhbGlkID0gVVJMVXRpbGl0aWVzOjpyZXNvbHZlUmVs
YXRpdmUoYmFzZVN0ci5kYXRhKCksIGJhc2VTZWdtZW50cywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybFN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgdXJs
U3RyaW5nTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcXVlcnlDaGFyc2V0Q29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0QnVmZmVyLCAmbV9zZWdtZW50cyk7Ci0KLSAgICBp
ZiAoaXNWYWxpZCkKLSAgICAgICAgbV9zcGVjID0gVVJMU3RyaW5nKFN0cmluZyhvdXRwdXRCdWZm
ZXIuZGF0YSgpLCBvdXRwdXRCdWZmZXIubGVuZ3RoKCkpKTsKLX0KLQotUGFyc2VkVVJMOjpQYXJz
ZWRVUkwoY29uc3QgUGFyc2VkVVJMJiBiYXNlLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlLCBVUkxR
dWVyeUNoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q2hhcnNldENvbnZlcnRlcikKLXsKLSAgICBpZiAo
IWJhc2UuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCByZWxhdGl2
ZUxlbmd0aCA9IHJlbGF0aXZlLmxlbmd0aCgpOwotICAgIGlmICghcmVsYXRpdmVMZW5ndGgpIHsK
LSAgICAgICAgKnRoaXMgPSBiYXNlLndpdGhvdXRGcmFnbWVudCgpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgUmF3VVJMQnVmZmVyPGNoYXI+IG91dHB1dEJ1ZmZlcjsKLSAgICBjb25z
dCBDU3RyaW5nJiBiYXNlU3RyID0gYmFzZS5tX3NwZWMubV9zdHJpbmcudXRmOCgpOwotICAgIGJv
b2wgaXNWYWxpZCA9IGZhbHNlOwotCi0gICAgaWYgKHJlbGF0aXZlLmlzOEJpdCgpKQotICAgICAg
ICBpc1ZhbGlkID0gVVJMVXRpbGl0aWVzOjpyZXNvbHZlUmVsYXRpdmUoYmFzZVN0ci5kYXRhKCks
IGJhc2UubV9zZWdtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHJlbGF0aXZlLmNoYXJhY3Rl
cnM4KCkpLCByZWxhdGl2ZUxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHF1ZXJ5Q2hhcnNldENvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dEJ1ZmZlciwgJm1fc2VnbWVudHMp
OwotICAgIGVsc2UKLSAgICAgICAgaXNWYWxpZCA9IFVSTFV0aWxpdGllczo6cmVzb2x2ZVJlbGF0
aXZlKGJhc2VTdHIuZGF0YSgpLCBiYXNlLm1fc2VnbWVudHMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5jaGFyYWN0ZXJzMTYoKSwgcmVs
YXRpdmVMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBxdWVyeUNoYXJzZXRDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRwdXRCdWZmZXIsICZtX3NlZ21lbnRzKTsKLQotICAgIGlm
IChpc1ZhbGlkKQotICAgICAgICBtX3NwZWMgPSBVUkxTdHJpbmcoU3RyaW5nKG91dHB1dEJ1ZmZl
ci5kYXRhKCksIG91dHB1dEJ1ZmZlci5sZW5ndGgoKSkpOwotfQotCi1QYXJzZWRVUkwgUGFyc2Vk
VVJMOjppc29sYXRlZENvcHkoKSBjb25zdAotewotICAgIFBhcnNlZFVSTCBjb3B5OwotICAgIGNv
cHkubV9zZWdtZW50cyA9IHRoaXMtPm1fc2VnbWVudHM7Ci0gICAgY29weS5tX3NwZWMgPSBVUkxT
dHJpbmcodGhpcy0+bV9zcGVjLnN0cmluZygpLmlzb2xhdGVkQ29weSgpKTsKLSAgICByZXR1cm4g
Y29weTsKLX0KLQotU3RyaW5nIFBhcnNlZFVSTDo6c2NoZW1lKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gc2VnbWVudChtX3NlZ21lbnRzLnNjaGVtZSk7Ci19Ci0KLWJvb2wgUGFyc2VkVVJMOjpoYXNT
dGFuZGFyZFNjaGVtZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fc2VnbWVudHMuc2NoZW1lLmlz
VmFsaWQoKSk7Ci0gICAgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmdTcGVjID0gbV9zcGVjLm1fc3Ry
aW5nOwotICAgIGlmICh1cmxTdHJpbmdTcGVjLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gVVJM
VXRpbGl0aWVzOjppc1N0YW5kYXJkKHVybFN0cmluZ1NwZWMuY2hhcmFjdGVyczgoKSwgbV9zZWdt
ZW50cy5zY2hlbWUpOwotICAgIHJldHVybiBVUkxVdGlsaXRpZXM6OmlzU3RhbmRhcmQodXJsU3Ry
aW5nU3BlYy5jaGFyYWN0ZXJzMTYoKSwgbV9zZWdtZW50cy5zY2hlbWUpOwotfQotCi1TdHJpbmcg
UGFyc2VkVVJMOjp1c2VybmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNlZ21lbnQobV9zZWdt
ZW50cy51c2VybmFtZSk7Ci19Ci0KLVN0cmluZyBQYXJzZWRVUkw6OnBhc3N3b3JkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gc2VnbWVudChtX3NlZ21lbnRzLnBhc3N3b3JkKTsKLX0KLQotU3RyaW5n
IFBhcnNlZFVSTDo6aG9zdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNlZ21lbnQobV9zZWdtZW50
cy5ob3N0KTsKLX0KLQotYm9vbCBQYXJzZWRVUkw6Omhhc1BvcnQoKSBjb25zdAotewotICAgIHJl
dHVybiBtX3NlZ21lbnRzLnBvcnQuaXNOb25FbXB0eSgpOwotfQotCi1TdHJpbmcgUGFyc2VkVVJM
Ojpwb3J0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2VnbWVudChtX3NlZ21lbnRzLnBvcnQpOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBTdHJp
bmcgZ2VuZXJhdGVOZXdTcGVjV2l0aFBvcnQoY29uc3QgU3RyaW5nJiBzcGVjLCB1bnNpZ25lZCBu
ZXdTcGVjTGVuZ3RoLCB1bnNpZ25lZCBwb3J0RGVsaW1pdGVyUG9zaXRpb24sIGNvbnN0IExDaGFy
KiBwb3J0U3RyaW5nLCB1bnNpZ25lZCBwb3J0U3RyaW5nTGVuZ3RoLCB1bnNpZ25lZCBwb3N0UG9y
dFBvc2l0aW9uSW5Tb3VyY2UpCi17Ci0gICAgQVNTRVJUKG5ld1NwZWNMZW5ndGggPT0gcG9ydERl
bGltaXRlclBvc2l0aW9uICsgMSArIHBvcnRTdHJpbmdMZW5ndGggKyAoc3BlYy5sZW5ndGgoKSAt
IHBvc3RQb3J0UG9zaXRpb25JblNvdXJjZSkpOwotCi0gICAgQ2hhcmFjdGVyVHlwZSogYnVmZmVy
OwotICAgIFN0cmluZyBuZXdTcGVjID0gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChu
ZXdTcGVjTGVuZ3RoLCBidWZmZXIpOwotCi0gICAgLy8gQ29weSBldmVyeXRoaW5nIHByaW9yIHRv
IHRoZSBwb3J0IHBvc2lzaXRvbi4KLSAgICBBU1NFUlQoYnVmZmVyICsgcG9ydERlbGltaXRlclBv
c2l0aW9uIDwgYnVmZmVyICsgbmV3U3BlY0xlbmd0aCk7Ci0gICAgU3RyaW5nSW1wbDo6Y29weUNo
YXJzKGJ1ZmZlciwgc3BlYy5nZXRDaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCksIHBvcnREZWxp
bWl0ZXJQb3NpdGlvbik7Ci0KLSAgICAvLyBBZGQgdGhlIG5ldyBwb3J0IGZyb20gdGhlIHBvc2l0
aW9uLgotICAgIGJ1ZmZlcltwb3J0RGVsaW1pdGVyUG9zaXRpb25dID0gJzonOwotICAgIHVuc2ln
bmVkIHBvcnRQb3NpdGlvbiA9IHBvcnREZWxpbWl0ZXJQb3NpdGlvbiArIDE7Ci0gICAgQVNTRVJU
KGJ1ZmZlciArIHBvcnRQb3NpdGlvbiArIHBvcnRTdHJpbmdMZW5ndGggPD0gYnVmZmVyICsgbmV3
U3BlY0xlbmd0aCk7Ci0gICAgU3RyaW5nSW1wbDo6Y29weUNoYXJzKGJ1ZmZlciArIHBvcnRQb3Np
dGlvbiwgcG9ydFN0cmluZywgcG9ydFN0cmluZ0xlbmd0aCk7Ci0KLSAgICAvLyBDb3B5IHRoZSBj
aGFyYWN0ZXIgcG9zdC1wb3J0IGZyb20gdGhlIHNvdXJjZS4KLSAgICB1bnNpZ25lZCByZW1haW5p
bmdDb21wb25lbnRzUG9zaXRpb25JbkRlc3RpbmF0aW9uID0gcG9ydFBvc2l0aW9uICsgcG9ydFN0
cmluZ0xlbmd0aDsKLSAgICBBU1NFUlQoYnVmZmVyICsgcmVtYWluaW5nQ29tcG9uZW50c1Bvc2l0
aW9uSW5EZXN0aW5hdGlvbiArIChzcGVjLmxlbmd0aCgpIC0gcG9zdFBvcnRQb3NpdGlvbkluU291
cmNlKSA9PSBidWZmZXIgKyBuZXdTcGVjTGVuZ3RoKTsKLSAgICBTdHJpbmdJbXBsOjpjb3B5Q2hh
cnMoYnVmZmVyICsgcmVtYWluaW5nQ29tcG9uZW50c1Bvc2l0aW9uSW5EZXN0aW5hdGlvbiwgJihz
cGVjLmdldENoYXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKVtwb3N0UG9ydFBvc2l0aW9uSW5Tb3Vy
Y2VdKSwgc3BlYy5sZW5ndGgoKSAtIHBvc3RQb3J0UG9zaXRpb25JblNvdXJjZSk7Ci0KLSAgICBy
ZXR1cm4gbmV3U3BlYzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJlcGxhY2VQb3J0V2l0aFN0
cmluZyhTdHJpbmcmIHNwZWMsIFVSTFNlZ21lbnRzJiBzZWdtZW50cywgY29uc3QgTENoYXIqIHBv
cnRTdHJpbmcsIHVuc2lnbmVkIHBvcnRTdHJpbmdMZW5ndGgpCi17Ci0gICAgLy8gQ29tcHV0ZSB0
aGUgbmV3IHNwZWMgbGVuZ3RoLgotICAgIGludCBsZW5ndGhEaWZmZXJlbmNlOwotICAgIGNvbnN0
IFVSTENvbXBvbmVudCBvbGRQb3J0Q29tcG9uZW50ID0gc2VnbWVudHMucG9ydDsKLSAgICBpZiAo
b2xkUG9ydENvbXBvbmVudC5pc1ZhbGlkKCkpCi0gICAgICAgIGxlbmd0aERpZmZlcmVuY2UgPSBw
b3J0U3RyaW5nTGVuZ3RoIC0gb2xkUG9ydENvbXBvbmVudC5sZW5ndGgoKTsKLSAgICBlbHNlCi0g
ICAgICAgIGxlbmd0aERpZmZlcmVuY2UgPSAxICsgcG9ydFN0cmluZ0xlbmd0aDsKLSAgICB1bnNp
Z25lZCBuZXdMZW5ndGggPSBzcGVjLmxlbmd0aCgpICsgbGVuZ3RoRGlmZmVyZW5jZTsKLQotICAg
IC8vIEZpbmQgdGhlIHN1YnN0cmluZyBwb3NpdGlvbnMgZm9yIHRoZSBnZW5lcmF0b3IgdGVtcGxh
dGUuCi0gICAgaW50IHBvcnREZWxpbWl0ZXJQb3NpdGlvbiA9IHNlZ21lbnRzLmNoYXJhY3RlcnNC
ZWZvcmUoVVJMU2VnbWVudHM6OlBvcnQsIFVSTFNlZ21lbnRzOjpEZWxpbWl0ZXJJbmNsdWRlZCk7
Ci0gICAgQVNTRVJUKHBvcnREZWxpbWl0ZXJQb3NpdGlvbiA+IDApOwotCi0gICAgdW5zaWduZWQg
cG9zdFBvcnRQb3NpdGlvbkluU291cmNlOwotICAgIGlmIChvbGRQb3J0Q29tcG9uZW50LmlzVmFs
aWQoKSkKLSAgICAgICAgcG9zdFBvcnRQb3NpdGlvbkluU291cmNlID0gb2xkUG9ydENvbXBvbmVu
dC5lbmQoKTsKLSAgICBlbHNlCi0gICAgICAgIHBvc3RQb3J0UG9zaXRpb25JblNvdXJjZSA9IHBv
cnREZWxpbWl0ZXJQb3NpdGlvbjsKLQotICAgIC8vIENyZWF0ZSB0aGUgbmV3IHNwZWMgd2l0aCBw
b3J0U3RyaW5nLgotICAgIGlmIChzcGVjLmlzOEJpdCgpKQotICAgICAgICBzcGVjID0gZ2VuZXJh
dGVOZXdTcGVjV2l0aFBvcnQ8TENoYXI+KHNwZWMsIG5ld0xlbmd0aCwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHBvcnREZWxpbWl0ZXJQb3NpdGlvbiksIHBvcnRTdHJpbmcsIHBvcnRTdHJpbmdMZW5n
dGgsIHBvc3RQb3J0UG9zaXRpb25JblNvdXJjZSk7Ci0gICAgZWxzZQotICAgICAgICBzcGVjID0g
Z2VuZXJhdGVOZXdTcGVjV2l0aFBvcnQ8VUNoYXI+KHNwZWMsIG5ld0xlbmd0aCwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHBvcnREZWxpbWl0ZXJQb3NpdGlvbiksIHBvcnRTdHJpbmcsIHBvcnRTdHJp
bmdMZW5ndGgsIHBvc3RQb3J0UG9zaXRpb25JblNvdXJjZSk7Ci0KLSAgICAvLyBVcGRhdGUgdGhl
IFVSTCBjb21wb25lbnRzLgotICAgIHVuc2lnbmVkIHBvcnRQb3NpdGlvbiA9IHBvcnREZWxpbWl0
ZXJQb3NpdGlvbiArIDE7Ci0gICAgc2VnbWVudHMucG9ydC5zZXRCZWdpbihwb3J0UG9zaXRpb24p
OwotICAgIHNlZ21lbnRzLnBvcnQuc2V0TGVuZ3RoKHBvcnRTdHJpbmdMZW5ndGgpOwotICAgIHNl
Z21lbnRzLm1vdmVGcm9tQ29tcG9uZW50QnkoVVJMU2VnbWVudHM6OlBhdGgsIGxlbmd0aERpZmZl
cmVuY2UpOwotfQotCi0KLXZvaWQgUGFyc2VkVVJMOjpyZXBsYWNlUG9ydCh1bnNpZ25lZCBzaG9y
dCBuZXdQb3J0KQotewotICAgIEFTU0VSVChoYXNTdGFuZGFyZFNjaGVtZSgpKTsKLQotICAgIC8v
IEdlbmVyYXRlIGEgY2hhciogc3RyaW5nIGZvciB0aGUgcG9ydCBudW1iZXIuCi0gICAgTENoYXIg
YnVmWzVdOwotICAgIExDaGFyKiBlbmQgPSBidWYgKyBXVEZfQVJSQVlfTEVOR1RIKGJ1Zik7Ci0g
ICAgTENoYXIqIHAgPSBlbmQ7Ci0gICAgZG8gewotICAgICAgICAqLS1wID0gc3RhdGljX2Nhc3Q8
TENoYXI+KChuZXdQb3J0ICUgMTApICsgJzAnKTsKLSAgICAgICAgbmV3UG9ydCAvPSAxMDsKLSAg
ICB9IHdoaWxlIChuZXdQb3J0KTsKLSAgICBjb25zdCB1bnNpZ25lZCBwb3J0U3RyaW5nTGVuZ3Ro
ID0gZW5kIC0gcDsKLQotICAgIHJlcGxhY2VQb3J0V2l0aFN0cmluZyhtX3NwZWMubV9zdHJpbmcs
IG1fc2VnbWVudHMsIHAsIHBvcnRTdHJpbmdMZW5ndGgpOwotfQotCi12b2lkIFBhcnNlZFVSTDo6
cmVtb3ZlUG9ydCgpCi17Ci0gICAgaWYgKCFoYXNQb3J0KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIDEpIFJlbW92ZSB0aGUgcG9ydCBmcm9tIHRoZSBzcGVjLCBpbmNsdWRpbmcgdGhlIGRl
bGltaXRlci4KLSAgICBTdHJpbmcgbmV3U3BlYzsKLSAgICBpbnQgYmVnaW5uaW5nID0gbV9zZWdt
ZW50cy5wb3J0LmJlZ2luKCkgLSAxOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fc2VnbWVudHMu
cG9ydC5sZW5ndGgoKSArIDE7Ci0KLSAgICBTdHJpbmcgbmV3U3BlY1N0cmluZyA9IG1fc3BlYy5z
dHJpbmcoKTsKLSAgICBuZXdTcGVjU3RyaW5nLnJlbW92ZShiZWdpbm5pbmcsIGxlbmd0aCk7Ci0g
ICAgbV9zcGVjID0gVVJMU3RyaW5nKG5ld1NwZWNTdHJpbmcpOwotCi0gICAgLy8gMikgVXBkYXRl
IHRoZSBjb21wb25lbnRzIHBvc2l0aW9ucy4KLSAgICBtX3NlZ21lbnRzLnBvcnQucmVzZXQoKTsK
LSAgICBtX3NlZ21lbnRzLm1vdmVGcm9tQ29tcG9uZW50QnkoVVJMU2VnbWVudHM6OlBhdGgsIC1s
ZW5ndGgpOwotfQotCi1TdHJpbmcgUGFyc2VkVVJMOjpwYXRoKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gc2VnbWVudChtX3NlZ21lbnRzLnBhdGgpOwotfQotCi1TdHJpbmcgUGFyc2VkVVJMOjpxdWVy
eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNlZ21lbnQobV9zZWdtZW50cy5xdWVyeSk7Ci19Ci0K
LWJvb2wgUGFyc2VkVVJMOjpoYXNGcmFnbWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2Vn
bWVudHMuZnJhZ21lbnQuaXNWYWxpZCgpOwotfQotCi1TdHJpbmcgUGFyc2VkVVJMOjpmcmFnbWVu
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNlZ21lbnQobV9zZWdtZW50cy5mcmFnbWVudCk7Ci19
Ci0KLVBhcnNlZFVSTCBQYXJzZWRVUkw6OndpdGhvdXRGcmFnbWVudCgpIGNvbnN0Ci17Ci0gICAg
aWYgKCFoYXNGcmFnbWVudCgpKQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICBQYXJzZWRV
UkwgbmV3VVJMOwotCi0gICAgaW50IGNoYXJhY3RlcnNCZWZvcmVGcmFnZW1udCA9IG1fc2VnbWVu
dHMuY2hhcmFjdGVyc0JlZm9yZShVUkxTZWdtZW50czo6RnJhZ21lbnQsIFVSTFNlZ21lbnRzOjpE
ZWxpbWl0ZXJFeGNsdWRlZCk7Ci0gICAgbmV3VVJMLm1fc3BlYyA9IFVSTFN0cmluZyhtX3NwZWMu
c3RyaW5nKCkuc3Vic3RyaW5nU2hhcmluZ0ltcGwoMCwgY2hhcmFjdGVyc0JlZm9yZUZyYWdlbW50
KSk7Ci0KLSAgICBuZXdVUkwubV9zZWdtZW50cyA9IG1fc2VnbWVudHM7Ci0gICAgbmV3VVJMLm1f
c2VnbWVudHMuZnJhZ21lbnQgPSBVUkxDb21wb25lbnQoKTsKLSAgICByZXR1cm4gbmV3VVJMOwot
fQotCi1TdHJpbmcgUGFyc2VkVVJMOjpiYXNlQXNTdHJpbmcoKSBjb25zdAotewotICAgIC8vIEZJ
WE1FOiBBZGQgV1RGVVJMIEltcGxlbWVudGF0aW9uLgotICAgIHJldHVybiBTdHJpbmcoKTsKLX0K
LQotU3RyaW5nIFBhcnNlZFVSTDo6c2VnbWVudChjb25zdCBVUkxDb21wb25lbnQmIGNvbXBvbmVu
dCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaXNWYWxpZCgpKTsKLQotICAgIGlmICghY29tcG9uZW50
LmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgU3RyaW5nIHNlZ21l
bnQgPSBtX3NwZWMuc3RyaW5nKCkuc3Vic3RyaW5nKGNvbXBvbmVudC5iZWdpbigpLCBjb21wb25l
bnQubGVuZ3RoKCkpOwotCi0gICAgLy8gRklYTUU6IEdvb2dsZVVSTCBjcmVhdGUgZW1wdHkgc2Vn
bWVudHMuIFRoaXMgaGFwcGVuIGZvciB0aGUgZnJhZ21lbnQgZm9yIHRoZSB0ZXN0IGZhc3QvdXJs
L3NlZ21lbnRzLmh0bWwKLSAgICAvLyBBU1NFUlRfV0lUSF9NRVNTQUdFKCFzZWdtZW50LmlzRW1w
dHkoKSwgIkEgdmFsaWQgVVJMIGNvbXBvbmVudCBzaG91bGQgbm90IGJlIGVtcHR5LiIpOwotICAg
IHJldHVybiBzZWdtZW50OwotfQotCi0jaWZuZGVmIE5ERUJVRwotCi0jZGVmaW5lIFNIT1dfQ09N
UE9ORU5UKHBhcnNlZFVSTCwgY29tcG9uZW50TmFtZSkgXAotICAgIGlmICghcGFyc2VkVVJMLT5j
b21wb25lbnROYW1lKCkuaXNOdWxsKCkpIHsgXAotICAgICAgICBkYXRhTG9nKCIgICAgIiAjY29t
cG9uZW50TmFtZSAiID0gIik7IFwKLSAgICAgICAgcGFyc2VkVVJMLT5jb21wb25lbnROYW1lKCku
c2hvdygpOyBcCi0gICAgfQotCi12b2lkIFBhcnNlZFVSTDo6cHJpbnQoKSBjb25zdAotewotICAg
IGlmICghaXNWYWxpZCgpKSB7Ci0gICAgICAgIGRhdGFMb2coIkludmFsaWQgUGFyc2VkVVJMLlxu
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkYXRhTG9nKCJWYWxpZCBQYXJzZWRV
Ukwgd2l0aDpcbiIpOwotICAgIGRhdGFMb2coIiAgICBtX3NwZWMgPSAiKTsKLSAgICBtX3NwZWMu
cHJpbnQoKTsKLQotICAgIFNIT1dfQ09NUE9ORU5UKHRoaXMsIHNjaGVtZSk7Ci0gICAgU0hPV19D
T01QT05FTlQodGhpcywgdXNlcm5hbWUpOwotICAgIFNIT1dfQ09NUE9ORU5UKHRoaXMsIHBhc3N3
b3JkKTsKLSAgICBTSE9XX0NPTVBPTkVOVCh0aGlzLCBob3N0KTsKLSAgICBTSE9XX0NPTVBPTkVO
VCh0aGlzLCBwb3J0KTsKLSAgICBTSE9XX0NPTVBPTkVOVCh0aGlzLCBwYXRoKTsKLSAgICBTSE9X
X0NPTVBPTkVOVCh0aGlzLCBxdWVyeSk7Ci0gICAgU0hPV19DT01QT05FTlQodGhpcywgZnJhZ21l
bnQpOwotfQotI2VuZGlmCi0KLX0KLQotI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi91cmwvYXBpL1BhcnNlZFVSTC5oIGIvU291cmNlL1dURi93dGYvdXJs
L2FwaS9QYXJzZWRVUkwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MyYTVkMDA4
OTZkZWNmODgwZDkwZDIxNWFjNGM4YzJlOGU4Y2QzYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi91cmwvYXBpL1BhcnNlZFVSTC5o
CisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUGFyc2VkVVJMX2gKLSNkZWZpbmUgUGFyc2Vk
VVJMX2gKLQotI2lmIFVTRShXVEZVUkwpCi0KLSNpbmNsdWRlIDx3dGYvdXJsL2FwaS9VUkxTdHJp
bmcuaD4KLSNpbmNsdWRlIDx3dGYvdXJsL3NyYy9VUkxTZWdtZW50cy5oPgotCi1uYW1lc3BhY2Ug
V1RGIHsKLQotY2xhc3MgVVJMQ29tcG9uZW50OwotY2xhc3MgVVJMUXVlcnlDaGFyc2V0Q29udmVy
dGVyOwotCi0vLyBQYXJzZWRVUkwgcmVwcmVzZW50cyBhIHZhbGlkIFVSTCBkZWNvbXBvc2VkIGJ5
IGNvbXBvbmVudHMuCi1jbGFzcyBQYXJzZWRVUkwgewotcHVibGljOgotICAgIGVudW0gUGFyc2Vk
VVJMU3RyaW5nVGFnIHsgUGFyc2VkVVJMU3RyaW5nIH07Ci0KLSAgICBQYXJzZWRVUkwoKSB7IH07
Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGV4cGxpY2l0IFBhcnNlZFVSTChjb25zdCBTdHJpbmcm
LCBQYXJzZWRVUkxTdHJpbmdUYWcpOwotCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGV4cGxpY2l0
IFBhcnNlZFVSTChjb25zdCBTdHJpbmcmLCBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqKTsKLSAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQgUGFyc2VkVVJMKGNvbnN0IFBhcnNlZFVSTCYg
YmFzZSwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZSwgVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyKik7
Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgUGFyc2VkVVJMIGlzb2xhdGVkQ29weSgpIGNvbnN0
OwotICAgIGJvb2wgaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkgY29uc3QgeyByZXR1cm4g
bV9zcGVjLmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpOyB9Ci0KLSAgICBib29sIGlzVmFs
aWQoKSBjb25zdCB7IHJldHVybiAhbV9zcGVjLnN0cmluZygpLmlzTnVsbCgpOyB9Ci0KLSAgICAv
LyBSZXR1cm4gYSBVUkwgY29tcG9uZW50IG9yIGEgbnVsbCBTdHJpbmcgaWYgdGhlIGNvbXBvbmVu
dCBpcyB1bmRlZmluZWQgZm9yIHRoZSBVUkwuCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0cmlu
ZyBzY2hlbWUoKSBjb25zdDsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXNTdGFuZGFy
ZFNjaGVtZSgpIGNvbnN0OwotCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyB1c2VybmFt
ZSgpIGNvbnN0OwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgcGFzc3dvcmQoKSBjb25z
dDsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGhvc3QoKSBjb25zdDsKLQotICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBib29sIGhhc1BvcnQoKSBjb25zdDsKLSAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgU3RyaW5nIHBvcnQoKSBjb25zdDsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBy
ZXBsYWNlUG9ydCh1bnNpZ25lZCBzaG9ydCBuZXdQb3J0KTsKLSAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCByZW1vdmVQb3J0KCk7Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHBh
dGgoKSBjb25zdDsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHF1ZXJ5KCkgY29uc3Q7
Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXNGcmFnbWVudCgpIGNvbnN0OwotICAg
IFdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcgZnJhZ21lbnQoKSBjb25zdDsKLSAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgUGFyc2VkVVJMIHdpdGhvdXRGcmFnbWVudCgpIGNvbnN0OwotCi0KLSAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIGJhc2VBc1N0cmluZygpIGNvbnN0OwotCi0gICAgY29u
c3QgVVJMU3RyaW5nJiBzcGVjKCkgY29uc3QgeyByZXR1cm4gbV9zcGVjOyB9Ci0KLSNpZm5kZWYg
TkRFQlVHCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnQoKSBjb25zdDsKLSNlbmRp
ZgotCi1wcml2YXRlOgotICAgIGlubGluZSBTdHJpbmcgc2VnbWVudChjb25zdCBVUkxDb21wb25l
bnQmKSBjb25zdDsKLQotICAgIFVSTFN0cmluZyBtX3NwZWM7Ci0gICAgVVJMU2VnbWVudHMgbV9z
ZWdtZW50czsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShXVEZVUkwpCi0KLSNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL2FwaS9VUkxCdWZmZXIuaCBiL1NvdXJjZS9XVEYv
d3RmL3VybC9hcGkvVVJMQnVmZmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZl
Y2NkMDRmYTVjZmYzMjY2N2RlMDVjMjcwNDdmODljY2EyZjZhN2IuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvdXJsL2FwaS9VUkxC
dWZmZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFVSTEJ1ZmZlcl9oCi0j
ZGVmaW5lIFVSTEJ1ZmZlcl9oCi0KLSNpZiBVU0UoV1RGVVJMKQotCi1uYW1lc3BhY2UgV1RGIHsK
LQotLy8gQmFzZSBjbGFzcyBmb3IgdGhlIGNhbm9uaWNhbGl6ZXIgb3V0cHV0LCB0aGlzIG1haW50
YWlucyBhIGJ1ZmZlciBhbmQKLS8vIHN1cHBvcnRzIHNpbXBsZSByZXNpemluZyBhbmQgYXBwZW5k
IG9wZXJhdGlvbnMgb24gaXQuCi0vLwotLy8gSXQgaXMgVkVSWSBJTVBPUlRBTlQgdGhhdCBubyB2
aXJ0dWFsIGZ1bmN0aW9uIGNhbGxzIGJlIG1hZGUgb24gdGhlIGNvbW1vbgotLy8gY29kZSBwYXRo
LiBXZSBvbmx5IGhhdmUgdHdvIHZpcnR1YWwgZnVuY3Rpb24gY2FsbHMsIHRoZSBkZXN0cnVjdG9y
IGFuZCBhCi0vLyByZXNpemUgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgZXhpc3Rp
bmcgYnVmZmVyIGlzIG5vdCBiaWcgZW5vdWdoLgotLy8gVGhlIGRlcml2ZWQgY2xhc3MgaXMgdGhl
biBpbiBjaGFyZ2Ugb2Ygc2V0dGluZyB1cCBvdXIgYnVmZmVyIHdoaWNoIHdlIHdpbGwKLS8vIG1h
bmFnZS4KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1jbGFzcyBVUkxCdWZmZXIg
ewotcHVibGljOgotICAgIFVSTEJ1ZmZlcigpIDogbV9idWZmZXIoMCksIG1fY2FwYWNpdHkoMCks
IG1fbGVuZ3RoKDApIHsgfQotICAgIHZpcnR1YWwgflVSTEJ1ZmZlcigpIHsgfQotCi0gICAgLy8g
SW1wbGVtZW50ZWQgdG8gcmVzaXplIHRoZSBidWZmZXIuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIHVw
ZGF0ZSB0aGUgYnVmZmVyCi0gICAgLy8gcG9pbnRlciB0byBwb2ludCB0byB0aGUgbmV3IGJ1ZmZl
ciwgYW5kIGFueSBvbGQgZGF0YSB1cCB0byB8bV9sZW5ndGh8IGluCi0gICAgLy8gdGhlIGJ1ZmZl
ciBtdXN0IGJlIGNvcGllZCBvdmVyLgotICAgIC8vCi0gICAgLy8gVGhlIG5ldyBzaXplIG11c3Qg
YmUgbGFyZ2VyIHRoYW4gbV9jYXBhY2l0eS4KLSAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKGludCkg
PSAwOwotCi0gICAgaW5saW5lIGNoYXIgYXQoaW50IG9mZnNldCkgY29uc3QgeyByZXR1cm4gbV9i
dWZmZXJbb2Zmc2V0XTsgfQotICAgIGlubGluZSB2b2lkIHNldChpbnQgb2Zmc2V0LCBDaGFyYWN0
ZXJUeXBlIGNoKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEFkZCBBU1NFUlQob2Zmc2V0IDwg
bGVuZ3RoKCkpOwotICAgICAgICBtX2J1ZmZlcltvZmZzZXRdID0gY2g7Ci0gICAgfQotCi0gICAg
Ly8gUmV0dXJucyB0aGUgY3VycmVudCBjYXBhY2l0eSBvZiB0aGUgYnVmZmVyLiBUaGUgbGVuZ3Ro
KCkgaXMgdGhlIG51bWJlciBvZgotICAgIC8vIGNoYXJhY3RlcnMgdGhhdCBoYXZlIGJlZW4gZGVj
bGFyZWQgdG8gYmUgd3JpdHRlbiwgYnV0IHRoZSBjYXBhY2l0eSgpIGlzCi0gICAgLy8gdGhlIG51
bWJlciB0aGF0IGNhbiBiZSB3cml0dGVuIHdpdGhvdXQgcmVhbGxvY2F0aW9uLiBJZiB0aGUgY2Fs
bGVyIG11c3QKLSAgICAvLyB3cml0ZSBtYW55IGNoYXJhY3RlcnMgYXQgb25jZSwgaXQgY2FuIG1h
a2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggY2FwYWNpdHksCi0gICAgLy8gd3JpdGUgdGhlIGRhdGEs
IHRoZW4gdXNlIHNldExlbmd0aCgpIHRvIGRlY2xhcmUgdGhlIG5ldyBsZW5ndGgoKS4KLSAgICBp
bnQgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2NhcGFjaXR5OyB9Ci0gICAgaW50IGxlbmd0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9Ci0KLSAgICAvLyBUaGUgb3V0cHV0IHdpbGwg
Tk9UIGJlIDAtdGVybWluYXRlZC4gQ2FsbCBsZW5ndGgoKSB0byBnZXQgdGhlIGxlbmd0aC4KLSAg
ICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXI7IH0K
LSAgICBDaGFyYWN0ZXJUeXBlKiBkYXRhKCkgeyByZXR1cm4gbV9idWZmZXI7IH0KLQotICAgIC8v
IFNob3J0ZW5zIHRoZSBVUkwgdG8gdGhlIG5ldyBsZW5ndGguIFVzZWQgZm9yICJiYWNraW5nIHVw
IiB3aGVuIHByb2Nlc3NpbmcKLSAgICAvLyByZWxhdGl2ZSBwYXRocy4gVGhpcyBjYW4gYWxzbyBi
ZSB1c2VkIGlmIGFuIGV4dGVybmFsIGZ1bmN0aW9uIHdyaXRlcyBhIGxvdAotICAgIC8vIG9mIGRh
dGEgdG8gdGhlIGJ1ZmZlciAod2hlbiB1c2luZyB0aGUgIlJhdyIgdmVyc2lvbiBiZWxvdykgYmV5
b25kIHRoZSBlbmQsCi0gICAgLy8gdG8gZGVjbGFyZSB0aGUgbmV3IGxlbmd0aC4KLSAgICB2b2lk
IHNldExlbmd0aChpbnQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEFkZCBBU1NF
UlQobGVuZ3RoIDwgY2FwYWNpdHkoKSk7Ci0gICAgICAgIG1fbGVuZ3RoID0gbGVuZ3RoOwotICAg
IH0KLQotICAgIC8vIFRoaXMgaXMgdGhlIG1vc3QgcGVyZm9ybWFuY2UgY3JpdGljYWwgZnVuY3Rp
b24sIHNpbmNlIGl0IGlzIGNhbGxlZCBmb3IKLSAgICAvLyBldmVyeSBjaGFyYWN0ZXIuCi0gICAg
dm9pZCBhcHBlbmQoQ2hhcmFjdGVyVHlwZSBjaCkKLSAgICB7Ci0gICAgICAgIC8vIEluIFZDMjAw
NSwgcHV0dGluZyB0aGlzIGNvbW1vbiBjYXNlIGZpcnN0IHNwZWVkcyB1cCBleGVjdXRpb24KLSAg
ICAgICAgLy8gZHJhbWF0aWNhbGx5IGJlY2F1c2UgdGhpcyBicmFuY2ggaXMgcHJlZGljdGVkIGFz
IHRha2VuLgotICAgICAgICBpZiAobV9sZW5ndGggPCBtX2NhcGFjaXR5KSB7Ci0gICAgICAgICAg
ICBtX2J1ZmZlclttX2xlbmd0aF0gPSBjaDsKLSAgICAgICAgICAgICsrbV9sZW5ndGg7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWdyb3coMSkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9idWZmZXJbbV9sZW5ndGhdID0gY2g7Ci0gICAg
ICAgICsrbV9sZW5ndGg7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBlbmQoY29uc3QgQ2hhcmFjdGVy
VHlwZSogc3RyLCBpbnQgc3RyTGVuZ3RoKQotICAgIHsKLSAgICAgICAgaWYgKG1fbGVuZ3RoICsg
c3RyTGVuZ3RoID4gbV9jYXBhY2l0eSkgewotICAgICAgICAgICAgaWYgKCFncm93KG1fbGVuZ3Ro
ICsgc3RyTGVuZ3RoIC0gbV9jYXBhY2l0eSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyBpKyspCi0gICAg
ICAgICAgICBtX2J1ZmZlclttX2xlbmd0aCArIGldID0gc3RyW2ldOwotICAgICAgICBtX2xlbmd0
aCArPSBzdHJMZW5ndGg7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgLy8gUmV0dXJucyB0cnVl
IGlmIHRoZSBidWZmZXIgY291bGQgYmUgcmVzaXplZCwgZmFsc2Ugb24gT09NLgotICAgIGJvb2wg
Z3JvdyhpbnQgbWluaW11bUFkZGl0aW9uYWxDYXBhY2l0eSkKLSAgICB7Ci0gICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWluaW11bUNhcGFjaXR5ID0gMTY7Ci0gICAgICAgIGludCBuZXdDYXBhY2l0
eSA9IG1fY2FwYWNpdHkgPyBtX2NhcGFjaXR5IDogbWluaW11bUNhcGFjaXR5OwotICAgICAgICBk
byB7Ci0gICAgICAgICAgICBpZiAobmV3Q2FwYWNpdHkgPj0gKDEgPDwgMzApKSAvLyBQcmV2ZW50
IG92ZXJmbG93IGJlbG93LgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIG5ld0NhcGFjaXR5ICo9IDI7Ci0gICAgICAgIH0gd2hpbGUgKG5ld0NhcGFjaXR5IDwgbV9j
YXBhY2l0eSArIG1pbmltdW1BZGRpdGlvbmFsQ2FwYWNpdHkpOwotICAgICAgICByZXNpemUobmV3
Q2FwYWNpdHkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBDaGFyYWN0ZXJU
eXBlKiBtX2J1ZmZlcjsKLSAgICBpbnQgbV9jYXBhY2l0eTsKLSAgICBpbnQgbV9sZW5ndGg7IC8v
IFVzZWQgY2hhcmFjdGVycyBpbiB0aGUgYnVmZmVyLgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV1RG
Ci0KLSNlbmRpZiAvLyBVU0UoV1RGVVJMKQotCi0jZW5kaWYgLy8gVVJMQnVmZmVyX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9hcGkvVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi91cmwvYXBpL1VSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlci5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzcxYTQyZTRmOGYzNDhlN2E4MGI4ZmQ5Y2M2N2U5
MTY3Mzk5YzU3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XVEYvd3RmL3VybC9hcGkvVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDcgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlcl9oCi0jZGVmaW5l
IFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlcl9oCi0KLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmlj
b2RlLmg+Ci0KLSNpZiBVU0UoV1RGVVJMKQotCi1uYW1lc3BhY2UgV1RGIHsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY2xhc3MgVVJMQnVmZmVyOwotCi1jbGFzcyBVUkxRdWVy
eUNoYXJzZXRDb252ZXJ0ZXIgewotcHVibGljOgotICAgIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRl
cigpIHsgfQotICAgIHZpcnR1YWwgflVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlcigpIHsgfQotICAg
IHZpcnR1YWwgdm9pZCBjb252ZXJ0RnJvbVVURjE2KGNvbnN0IFVDaGFyKiBpbnB1dCwgdW5zaWdu
ZWQgaW5wdXRMZW5ndGgsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KSA9IDA7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFVTRShXVEZVUkwpCi0KLSNlbmRpZiAvLyBVUkxR
dWVyeUNoYXJzZXRDb252ZXJ0ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL2Fw
aS9VUkxTdHJpbmcuY3BwIGIvU291cmNlL1dURi93dGYvdXJsL2FwaS9VUkxTdHJpbmcuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTQ3ZmUzOTlmMjlkZWE0MjMyZWZiMWJkZjI3
N2FlMjZjZDdlMzlhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XVEYvd3RmL3VybC9hcGkvVVJMU3RyaW5nLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVVJMU3RyaW5nLmgiCi0KLSNpZiBV
U0UoV1RGVVJMKQotCi1uYW1lc3BhY2UgV1RGIHsKLQotI2lmbmRlZiBOREVCVUcKLXZvaWQgVVJM
U3RyaW5nOjpwcmludCgpIGNvbnN0Ci17Ci0gICAgbV9zdHJpbmcuc2hvdygpOwotfQotI2VuZGlm
IC8vIG5kZWYgTkRFQlVHCi0KLX0KLQotI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi91cmwvYXBpL1VSTFN0cmluZy5oIGIvU291cmNlL1dURi93dGYvdXJs
L2FwaS9VUkxTdHJpbmcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZkZDFhMTZh
MjM3MDdhMTUxNGNlY2EyOWUwNTI5ZjdkYTJlM2QyYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi91cmwvYXBpL1VSTFN0cmluZy5o
CisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVVJMU3RyaW5nX2gKLSNkZWZpbmUgVVJMU3Ry
aW5nX2gKLQotI2lmIFVTRShXVEZVUkwpCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLS8vIFVSTFN0cmluZyByZXByZXNlbnRzIGEgc3RyaW5n
IHRoYXQncyBhIGNhbm9uaWNhbGl6ZWQgVVJMLgotY2xhc3MgVVJMU3RyaW5nIHsKLXB1YmxpYzoK
LSAgICBVUkxTdHJpbmcoKSB7IH0KLQotICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJpbmc7fQotICAgIGJvb2wgaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFk
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCk7
IH0KLQotI2lmbmRlZiBOREVCVUcKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcmludCgp
IGNvbnN0OwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFBhcnNlZFVSTDsK
LQotICAgIC8vIFVSTFN0cmluZyBjYW4gb25seSBiZSBjb25zdHJ1Y3RlZCBieSBhIFBhcnNlZFVS
TC4KLSAgICBleHBsaWNpdCBVUkxTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi0gICAgICAg
IDogbV9zdHJpbmcoc3RyaW5nKQotICAgIHsKLSAgICB9Ci0KLSAgICBTdHJpbmcgbV9zdHJpbmc7
Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBVU0UoV1RGVVJMKQotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9SYXdVUkxCdWZmZXIuaCBiL1NvdXJjZS9XVEYvd3Rm
L3VybC9zcmMvUmF3VVJMQnVmZmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEz
MTViMGM4Zjg5OWY5ZDcxMDI0Nzc5YzM1YzE0NTg4NDYzZDM2MGIuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9SYXdV
UkxCdWZmZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0g
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUmF3VVJMQnVmZmVy
X2gKLSNkZWZpbmUgUmF3VVJMQnVmZmVyX2gKLQotI2lmIFVTRShXVEZVUkwpCi0KLSNpbmNsdWRl
IDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdXJsL2FwaS9VUkxCdWZmZXIuaD4KLQotbmFtZXNw
YWNlIFdURiB7Ci0KLS8vIFNpbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVVJMQnVmZmVyIHVz
aW5nIG5ld1tdLiBUaGlzIGNsYXNzCi0vLyBhbHNvIHN1cHBvcnRzIGEgc3RhdGljIGJ1ZmZlciBz
byBpZiBpdCBpcyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrLCBtb3N0Ci0vLyBVUkxzIGNhbiBiZSBj
YW5vbmljYWxpemVkIHdpdGggbm8gaGVhcCBhbGxvY2F0aW9ucy4KLXRlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGUsIGludCBpbmxpbmVDYXBhY2l0eSA9IDEwMjQ+Ci1jbGFzcyBSYXdVUkxC
dWZmZXIgOiBwdWJsaWMgVVJMQnVmZmVyPENoYXJhY3RlclR5cGU+IHsKLXB1YmxpYzoKLSAgICBS
YXdVUkxCdWZmZXIoKSA6IFVSTEJ1ZmZlcjxDaGFyYWN0ZXJUeXBlPigpCi0gICAgewotICAgICAg
ICB0aGlzLT5tX2J1ZmZlciA9IG1faW5saW5lQnVmZmVyOwotICAgICAgICB0aGlzLT5tX2NhcGFj
aXR5ID0gaW5saW5lQ2FwYWNpdHk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+UmF3VVJMQnVmZmVy
KCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLT5tX2J1ZmZlciAhPSBtX2lubGluZUJ1ZmZlcikK
LSAgICAgICAgICAgIGRlbGV0ZVtdIHRoaXMtPm1fYnVmZmVyOwotICAgIH0KLQotICAgIHZpcnR1
YWwgdm9pZCByZXNpemUoaW50IHNpemUpCi0gICAgewotICAgICAgICBDaGFyYWN0ZXJUeXBlKiBu
ZXdCdWZmZXIgPSBuZXcgQ2hhcmFjdGVyVHlwZVtzaXplXTsKLSAgICAgICAgbWVtY3B5KG5ld0J1
ZmZlciwgdGhpcy0+bV9idWZmZXIsIHNpemVvZihDaGFyYWN0ZXJUeXBlKSAqICh0aGlzLT5tX2xl
bmd0aCA8IHNpemUgPyB0aGlzLT5tX2xlbmd0aCA6IHNpemUpKTsKLSAgICAgICAgaWYgKHRoaXMt
Pm1fYnVmZmVyICE9IG1faW5saW5lQnVmZmVyKQotICAgICAgICAgICAgZGVsZXRlW10gdGhpcy0+
bV9idWZmZXI7Ci0gICAgICAgIHRoaXMtPm1fYnVmZmVyID0gbmV3QnVmZmVyOwotICAgICAgICB0
aGlzLT5tX2NhcGFjaXR5ID0gc2l6ZTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICBDaGFyYWN0
ZXJUeXBlIG1faW5saW5lQnVmZmVyW2lubGluZUNhcGFjaXR5XTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdURgotCi0jZW5kaWYgLy8gVVNFKFdURlVSTCkKLQotI2VuZGlmIC8vIFJhd1VSTEJ1ZmZl
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGZlNGQwNGU0YzYwNjY4ZDIxODAwZWY5NmU5ZDFhYmJhNDRlOTgxYTUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvdXJsL3Ny
Yy9VUkxDYW5vbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNjE3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgMjAwNyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0jaWZuZGVmIFVSTENhbm9uX2gKLSNkZWZp
bmUgVVJMQ2Fub25faAotCi0jaW5jbHVkZSAiVVJMUGFyc2UuaCIKLSNpbmNsdWRlIDxzdGRsaWIu
aD4KLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+Ci0jaW5jbHVkZSA8d3RmL3VybC9h
cGkvVVJMQnVmZmVyLmg+Ci0KLSNpZiBVU0UoV1RGVVJMKQotCi1uYW1lc3BhY2UgV1RGIHsKLQot
Y2xhc3MgVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyOwotCi1uYW1lc3BhY2UgVVJMQ2Fub25pY2Fs
aXplciB7Ci0KLS8vIFdoaXRlc3BhY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gU2VhcmNoZXMgZm9yIHdoaXRl
c3BhY2UgdGhhdCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZSBtaWRkbGUgb2YgVVJMcywgYW5k
Ci0vLyByZW1vdmVzIGl0LiBSZW1vdmVkIHdoaXRlc3BhY2UgYXJlIHRhYnMgYW5kIG5ld2xpbmVz
LCBidXQgTk9UIHNwYWNlcy4gU3BhY2VzCi0vLyBhcmUgcHJlc2VydmVkLCB3aGljaCBpcyB3aGF0
IG1vc3QgYnJvd3NlcnMgZG8uIEEgcG9pbnRlciB0byB0aGUgb3V0cHV0IHdpbGwKLS8vIGJlIHJl
dHVybmVkLCBhbmQgdGhlIGxlbmd0aCBvZiB0aGF0IG91dHB1dCB3aWxsIGJlIGluIHxvdXRwdXRM
ZW5ndGh8LgotLy8KLS8vIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgcGFyc2luZyBpZiB3
aGl0ZXNwYWNlIHJlbW92YWwgaXMgZGVzaXJlZCAod2hpY2gKLS8vIGl0IG5vcm1hbGx5IGlzIHdo
ZW4geW91IGFyZSBjYW5vbmljYWxpemluZykuCi0vLwotLy8gSWYgbm8gd2hpdGVzcGFjZSBpcyBy
ZW1vdmVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgbm90IHVzZSB0aGUgYnVmZmVyIGFuZCB3aWxsCi0v
LyByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBpbnB1dCwgdG8gYXZvaWQgdGhlIGV4dHJhIGNvcHku
IElmIG1vZGlmaWNhdGlvbiBpcwotLy8gcmVxdWlyZWQsIHRoZSBnaXZlbiB8YnVmZmVyfCB3aWxs
IGJlIHVzZWQgYW5kIHRoZSByZXR1cm5lZCBwb2ludGVyIHdpbGwKLS8vIHBvaW50IHRvIHRoZSBi
ZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlci4KLS8vCi0vLyBUaGVyZWZvcmUsIGNhbGxlcnMgc2hvdWxk
IG5vdCB1c2UgdGhlIGJ1ZmZlciwgc2luY2UgaXQgbWF5IGFjdHVhbGwgYmUgZW1wdHksCi0vLyB1
c2UgdGhlIGNvbXB1dGVkIHBvaW50ZXIgYW5kIHxvdXRwdXRMZW5ndGh8IGluc3RlYWQuCi1jb25z
dCBjaGFyKiByZW1vdmVVUkxXaGl0ZXNwYWNlKGNvbnN0IGNoYXIqIGlucHV0LCBpbnQgaW5wdXRM
ZW5ndGgsIFVSTEJ1ZmZlcjxjaGFyPiYsIGludCYgb3V0cHV0TGVuZ3RoKTsKLWNvbnN0IFVDaGFy
KiByZW1vdmVVUkxXaGl0ZXNwYWNlKGNvbnN0IFVDaGFyKiBpbnB1dCwgaW50IGlucHV0TGVuZ3Ro
LCBVUkxCdWZmZXI8VUNoYXI+JiwgaW50JiBvdXRwdXRMZW5ndGgpOwotCi0vLyBJRE4gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLS8vIENvbnZlcnRzIHRoZSBVbmljb2RlIGlucHV0IHJlcHJlc2VudGluZyBh
IGhvc3RuYW1lIHRvIEFTQ0lJIHVzaW5nIElETiBydWxlcy4KLS8vIFRoZSBvdXRwdXQgbXVzdCBm
YWxsIGluIHRoZSBBU0NJSSByYW5nZSwgYnV0IHdpbGwgYmUgZW5jb2RlZCBpbiBVVEYtMTYuCi0v
LwotLy8gT24gc3VjY2VzcywgdGhlIG91dHB1dCB3aWxsIGJlIGZpbGxlZCB3aXRoIHRoZSBBU0NJ
SSBob3N0IG5hbWUgYW5kIGl0IHdpbGwKLS8vIHJldHVybiB0cnVlLiBVbmxpa2UgbW9zdCBvdGhl
ciBjYW5vbmljYWxpemF0aW9uIGZ1bmN0aW9ucywgdGhpcyBhc3N1bWVzIHRoYXQKLS8vIHRoZSBv
dXRwdXQgaXMgZW1wdHkuIFRoZSBiZWdpbm5pbmcgb2YgdGhlIGhvc3Qgd2lsbCBiZSBhdCBvZmZz
ZXQgMCwgYW5kCi0vLyB0aGUgbGVuZ3RoIG9mIHRoZSBvdXRwdXQgd2lsbCBiZSBzZXQgdG8gdGhl
IGxlbmd0aCBvZiB0aGUgbmV3IGhvc3QgbmFtZS4KLS8vCi0vLyBPbiBlcnJvciwgcmV0dXJucyBm
YWxzZS4gVGhlIG91dHB1dCBpbiB0aGlzIGNhc2UgaXMgdW5kZWZpbmVkLgotYm9vbCBJRE5Ub0FT
Q0lJKGNvbnN0IFVDaGFyKiBzcmMsIGludCBzb3VyY2VMZW5ndGgsIFVSTEJ1ZmZlcjxVQ2hhcj4m
IG91dHB1dCk7Ci0KLS8vIFBpZWNlLWJ5LXBpZWNlIGNhbm9uaWNhbGl6ZXJzIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0vLyBUaGVzZSBpbmRpdmlk
dWFsIGNhbm9uaWNhbGl6ZXJzIGFwcGVuZCB0aGUgY2Fub25pY2FsaXplZCB2ZXJzaW9ucyBvZiB0
aGUKLS8vIGNvcnJlc3BvbmRpbmcgVVJMIGNvbXBvbmVudCB0byB0aGUgZ2l2ZW4gc3RkOjpzdHJp
bmcuIFRoZSBzcGVjIGFuZCB0aGUKLS8vIHByZXZpb3VzbHktaWRlbnRpZmllZCByYW5nZSBvZiB0
aGF0IGNvbXBvbmVudCBhcmUgdGhlIGlucHV0LiBUaGUgcmFuZ2Ugb2YKLS8vIHRoZSBjYW5vbmlj
YWxpemVkIGNvbXBvbmVudCB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIG91dHB1dCBjb21wb25lbnQu
Ci0vLwotLy8gVGhlc2UgZnVuY3Rpb25zIGFsbCBhcHBlbmQgdG8gdGhlIG91dHB1dCBzbyB0aGV5
IGNhbiBiZSBjaGFpbmVkLiBNYWtlIHN1cmUKLS8vIHRoZSBvdXRwdXQgaXMgZW1wdHkgd2hlbiB5
b3Ugc3RhcnQuCi0vLwotLy8gVGhlc2UgZnVuY3Rpb25zIHJldHVybnMgYm9vbGVhbiB2YWx1ZXMg
aW5kaWNhdGluZyBzdWNjZXNzLiBPbiBmYWlsdXJlLCB0aGV5Ci0vLyB3aWxsIGF0dGVtcHQgdG8g
d3JpdGUgc29tZXRoaW5nIHJlYXNvbmFibGUgdG8gdGhlIG91dHB1dCBzbyB0aGF0LCBpZgotLy8g
ZGlzcGxheWVkIHRvIHRoZSB1c2VyLCB0aGV5IHdpbGwgcmVjb2duaXNlIGl0IGFzIHNvbWV0aGlu
ZyB0aGF0J3MgbWVzc2VkIHVwLgotLy8gTm90aGluZyBtb3JlIHNob3VsZCBldmVyIGJlIGRvbmUg
d2l0aCB0aGVzZSBpbnZhbGlkIFVSTHMsIGhvd2V2ZXIuCi0KLS8vIFNjaGVtZTogQXBwZW5kcyB0
aGUgc2NoZW1lIGFuZCBjb2xvbiB0byB0aGUgVVJMLiBUaGUgb3V0cHV0IGNvbXBvbmVudCB3aWxs
Ci0vLyBpbmRpY2F0ZSB0aGUgcmFuZ2Ugb2YgY2hhcmFjdGVycyB1cCB0byBidXQgbm90IGluY2x1
ZGluZyB0aGUgY29sb24uCi0vLwotLy8gQ2Fub25pY2FsIFVSTHMgYWx3YXlzIGhhdmUgYSBzY2hl
bWUuIElmIHRoZSBzY2hlbWUgaXMgbm90IHByZXNlbnQgaW4gdGhlCi0vLyBpbnB1dCwgdGhpcyB3
aWxsIGp1c3Qgd3JpdGUgdGhlIGNvbG9uIHRvIGluZGljYXRlIGFuIGVtcHR5IHNjaGVtZS4gRG9l
cyBub3QKLS8vIGFwcGVuZCBzbGFzaGVzIHdoaWNoIHdpbGwgYmUgbmVlZGVkIGJlZm9yZSBhbnkg
YXV0aG9yaXR5IGNvbXBvbmVudHMgZm9yIG1vc3QKLS8vIFVSTHMuCi0vLwotLy8gVGhlIDgtYml0
IHZlcnNpb24gcmVxdWlyZXMgVVRGLTggZW5jb2RpbmcuCi1ib29sIGNhbm9uaWNhbGl6ZVNjaGVt
ZShjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHNjaGVtZSwgVVJMQnVmZmVy
PGNoYXI+JiwgVVJMQ29tcG9uZW50JiBvdXB1dFNjaGVtZSk7Ci1ib29sIGNhbm9uaWNhbGl6ZVNj
aGVtZShjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBzY2hlbWUsIFVSTEJ1
ZmZlcjxjaGFyPiYsIFVSTENvbXBvbmVudCYgb3VwdXRTY2hlbWUpOwotCi0vLyBVc2VyIGluZm86
IHVzZXJuYW1lL3Bhc3N3b3JkLiBJZiBwcmVzZW50LCB0aGlzIHdpbGwgYWRkIHRoZSBkZWxpbWl0
ZXJzIHNvCi0vLyB0aGUgb3V0cHV0IHdpbGwgYmUgIjx1c2VybmFtZT46PHBhc3N3b3JkPkAiIG9y
ICI8dXNlcm5hbWU+QCIuIEVtcHR5Ci0vLyB1c2VybmFtZS9wYXNzd29yZCBwYWlycywgb3IgZW1w
dHkgcGFzc3dvcmRzLCB3aWxsIGdldCBjb252ZXJ0ZWQgdG8KLS8vIG5vbmV4aXN0YW50IGluIHRo
ZSBjYW5vbmljYWwgdmVyc2lvbi4KLS8vCi0vLyBUaGUgY29tcG9uZW50cyBmb3IgdGhlIHVzZXJu
YW1lIGFuZCBwYXNzd29yZCByZWZlciB0byByYW5nZXMgaW4gdGhlCi0vLyByZXNwZWN0aXZlIHNv
dXJjZSBzdHJpbmdzLiBVc3VhbGx5LCB0aGVzZSB3aWxsIGJlIHRoZSBzYW1lIHN0cmluZywgd2hp
Y2gKLS8vIGlzIGxlZ2FsIGFzIGxvbmcgYXMgdGhlIHR3byBjb21wb25lbnRzIGRvbid0IG92ZXJs
YXAuCi0vLwotLy8gVGhlIDgtYml0IHZlcnNpb24gcmVxdWlyZXMgVVRGLTggZW5jb2RpbmcuCi1i
b29sIGNhbm9uaWNhbGl6ZVVzZXJJbmZvKGNvbnN0IGNoYXIqIHVzZXJuYW1lU291cmNlLCBjb25z
dCBVUkxDb21wb25lbnQmIHVzZXJuYW1lLCBjb25zdCBjaGFyKiBwYXNzd29yZFNvdXJjZSwgY29u
c3QgVVJMQ29tcG9uZW50JiBwYXNzd29yZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVVJM
QnVmZmVyPGNoYXI+JiwgVVJMQ29tcG9uZW50JiBvdXRwdXRVc2VybmFtZSwgVVJMQ29tcG9uZW50
JiBvdXRwdXRQYXNzd29yZCk7Ci1ib29sIGNhbm9uaWNhbGl6ZVVzZXJJbmZvKGNvbnN0IFVDaGFy
KiB1c2VybmFtZVNvdXJjZSwgY29uc3QgVVJMQ29tcG9uZW50JiB1c2VybmFtZSwgY29uc3QgVUNo
YXIqIHBhc3N3b3JkU291cmNlLCBjb25zdCBVUkxDb21wb25lbnQmIHBhc3N3b3JkLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxDb21wb25lbnQmIG91dHB1
dFVzZXJuYW1lLCBVUkxDb21wb25lbnQmIG91dHB1dFBhc3N3b3JkKTsKLQotCi0vLyBUaGlzIHN0
cnVjdHVyZSBob2xkcyBkZXRhaWxlZCBzdGF0ZSBleHBvcnRlZCBmcm9tIHRoZSBJUC9Ib3N0IGNh
bm9uaWNhbGl6ZXJzLgotLy8gQWRkaXRpb25hbCBmaWVsZHMgbWF5IGJlIGFkZGVkIGFzIGNhbGxl
cnMgcmVxdWlyZSB0aGVtLgotc3RydWN0IENhbm9uSG9zdEluZm8gewotICAgIENhbm9uSG9zdElu
Zm8oKQotICAgICAgICA6IGZhbWlseShORVVUUkFMKQotICAgICAgICAsIGlwdjRDb21wb25lbnRz
Q291bnQoMCkKLSAgICAgICAgLCBvdXB1dEhvc3QoKQotICAgIHsKLSAgICB9Ci0KLSAgICAvLyBD
b252ZW5pZW5jZSBmdW5jdGlvbiB0byB0ZXN0IGlmIGZhbWlseSBpcyBhbiBJUCBhZGRyZXNzLgot
ICAgIGJvb2wgSXNJUEFkZHJlc3MoKSBjb25zdCB7IHJldHVybiBmYW1pbHkgPT0gSVBWNCB8fCBm
YW1pbHkgPT0gSVBWNjsgfQotCi0gICAgLy8gVGhpcyBmaWVsZCBzdW1tYXJpemVzIGhvdyB0aGUg
aW5wdXQgd2FzIGNsYXNzaWZpZWQgYnkgdGhlIGNhbm9uaWNhbGl6ZXIuCi0gICAgZW51bSBGYW1p
bHkgewotICAgICAgICAvLyAtIERvZXNuJ3QgcmVzZW1ibGUgYW4gSVAgYWRkcmVzcy4gQXMgZmFy
IGFzIHRoZSBJUAotICAgICAgICAvLyBjYW5vbmljYWxpemVyIGlzIGNvbmNlcm5lZCwgaXQgc2hv
dWxkIGJlIHRyZWF0ZWQgYXMgYQotICAgICAgICAvLyAgIGhvc3RuYW1lLgotICAgICAgICBORVVU
UkFMLAotCi0gICAgICAgIC8vIC0gQWxtb3N0IGFuIElQLCBidXQgd2FzIG5vdCBjYW5vbmljYWxp
emVkLiBUaGlzIGNvdWxkIGJlIGFuCi0gICAgICAgIC8vIElQdjQgYWRkcmVzcyB3aGVyZSB0cnVu
Y2F0aW9uIG9jY3VycmVkLCBvciBzb21ldGhpbmcKLSAgICAgICAgLy8gY29udGFpbmluZyB0aGUg
c3BlY2lhbCBjaGFyYWN0ZXJzIDpbXSB3aGljaCBkaWQgbm90IHBhcnNlCi0gICAgICAgIC8vIGFz
IGFuIElQdjYgYWRkcmVzcy4gTmV2ZXIgYXR0ZW1wdCB0byBjb25uZWN0IHRvIHRoaXMKLSAgICAg
ICAgLy8gYWRkcmVzcywgYmVjYXVzZSBpdCBtaWdodCBhY3R1YWxseSBzdWNjZWVkIQotICAgICAg
ICBCUk9LRU4sCi0KLSAgICAgICAgSVBWNCwgLy8gLSBTdWNjZXNzZnVsbHkgY2Fub25pY2FsaXpl
ZCBhcyBhbiBJUHY0IGFkZHJlc3MuCi0gICAgICAgIElQVjYsIC8vIC0gU3VjY2Vzc2Z1bGx5IGNh
bm9uaWNhbGl6ZWQgYXMgYW4gSVB2NiBhZGRyZXNzLgotICAgIH07Ci0gICAgRmFtaWx5IGZhbWls
eTsKLQotICAgIC8vIElmIHxmYW1pbHl8IGlzIElQVjQsIHRoZW4gdGhpcyBpcyB0aGUgbnVtYmVy
IG9mIG5vbmVtcHR5IGRvdC1zZXBhcmF0ZWQKLSAgICAvLyBjb21wb25lbnRzIGluIHRoZSBpbnB1
dCB0ZXh0LCBmcm9tIDEgdG8gNC4gSWYgfGZhbWlseXwgaXMgbm90IElQVjQsCi0gICAgLy8gdGhp
cyB2YWx1ZSBpcyB1bmRlZmluZWQuCi0gICAgaW50IGlwdjRDb21wb25lbnRzQ291bnQ7Ci0KLSAg
ICAvLyBMb2NhdGlvbiBvZiBob3N0IHdpdGhpbiB0aGUgY2Fub25pY2FsaXplZCBvdXRwdXQuCi0g
ICAgLy8gY2Fub25pY2FsaXplSVBBZGRyZXNzKCkgb25seSBzZXRzIHRoaXMgZmllbGQgaWYgfGZh
bWlseXwgaXMgSVBWNCBvciBJUFY2LgotICAgIFVSTENvbXBvbmVudCBvdXB1dEhvc3Q7Ci0KLSAg
ICAvLyB8YWRkcmVzc3wgY29udGFpbnMgdGhlIHBhcnNlZCBJUCBBZGRyZXNzIChpZiBhbnkpIGlu
IGl0cyBmaXJzdAotICAgIC8vIEFkZHJlc3NMZW5ndGgoKSBieXRlcywgaW4gbmV0d29yayBvcmRl
ci4gSWYgSXNJUEFkZHJlc3MoKSBpcyBmYWxzZQotICAgIC8vIEFkZHJlc3NMZW5ndGgoKSB3aWxs
IHJldHVybiB6ZXJvIGFuZCB0aGUgY29udGVudCBvZiB8YWRkcmVzc3wgaXMgdW5kZWZpbmVkLgot
ICAgIHVuc2lnbmVkIGNoYXIgYWRkcmVzc1sxNl07Ci0KLSAgICAvLyBDb252ZW5pZW5jZSBmdW5j
dGlvbiB0byBjYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiBhbiBJUCBhZGRyZXNzIGNvcnJlc3BvbmRp
bmcKLSAgICAvLyB0byB0aGUgY3VycmVudCBJUCB2ZXJzaW9uIGluIHxmYW1pbHl8LCBpZiBhbnku
IEZvciB1c2Ugd2l0aCB8YWRkcmVzc3wuCi0gICAgaW50IEFkZHJlc3NMZW5ndGgoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbWlseSA9PSBJUFY0ID8gNCA6IChmYW1pbHkgPT0gSVBW
NiA/IDE2IDogMCk7Ci0gICAgfQotfTsKLQotLy8gSG9zdC4KLS8vCi0vLyBUaGUgOC1iaXQgdmVy
c2lvbiByZXF1aXJlcyBVVEYtOCBlbmNvZGluZy4gVXNlIHRoaXMgdmVyc2lvbiB3aGVuIHlvdSBv
bmx5Ci0vLyBuZWVkIHRvIGtub3cgd2hldGhlciBjYW5vbmljYWxpemF0aW9uIHN1Y2NlZWRlZC4K
LWJvb2wgY2Fub25pY2FsaXplSG9zdChjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25l
bnQmIGhvc3QsIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTENvbXBvbmVudCYgb3VwdXRIb3N0KTsKLWJv
b2wgY2Fub25pY2FsaXplSG9zdChjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50
JiBob3N0LCBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxDb21wb25lbnQmIG91cHV0SG9zdCk7Ci0KLS8v
IElQIGFkZHJlc3Nlcy4KLS8vCi0vLyBUcmllcyB0byBpbnRlcnByZXQgdGhlIGdpdmVuIGhvc3Qg
bmFtZSBhcyBhbiBJUHY0IG9yIElQdjYgYWRkcmVzcy4gSWYgaXQgaXMKLS8vIGFuIElQIGFkZHJl
c3MsIGl0IHdpbGwgY2Fub25pY2FsaXplIGl0IGFzIHN1Y2gsIGFwcGVuZGluZyBpdCB0byB8b3V0
cHV0fC4KLS8vIEFkZGl0aW9uYWwgc3RhdHVzIGluZm9ybWF0aW9uIGlzIHJldHVybmVkIHZpYSB0
aGUgfCpob3N0SW5mb3wgcGFyYW1ldGVyLgotLy8gU2VlIHRoZSBkZWZpbml0aW9uIG9mIENhbm9u
SG9zdEluZm8gYWJvdmUgZm9yIGRldGFpbHMuCi0vLwotLy8gVGhpcyBpcyBjYWxsZWQgQVVUT01B
VElDQUxMWSBmcm9tIHRoZSBob3N0IGNhbm9uaWNhbGl6ZXIsIHdoaWNoIGVuc3VyZXMgdGhhdAot
Ly8gdGhlIGlucHV0IGlzIHVuZXNjYXBlZCBhbmQgbmFtZS1wcmVwcGVkLCBldGMuIEl0IHNob3Vs
ZCBub3Qgbm9ybWFsbHkgYmUKLS8vIG5lY2Vzc2FyeSBvciB3aXNlIHRvIGNhbGwgdGhpcyBkaXJl
Y3RseS4KLXZvaWQgY2Fub25pY2FsaXplSVBBZGRyZXNzKGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0
IFVSTENvbXBvbmVudCYgaG9zdCwgVVJMQnVmZmVyPGNoYXI+JiwgQ2Fub25Ib3N0SW5mbyYpOwot
dm9pZCBjYW5vbmljYWxpemVJUEFkZHJlc3MoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0IFVSTENv
bXBvbmVudCYgaG9zdCwgVVJMQnVmZmVyPGNoYXI+JiwgQ2Fub25Ib3N0SW5mbyYpOwotCi0vLyBQ
b3J0OiB0aGlzIGZ1bmN0aW9uIHdpbGwgYWRkIHRoZSBjb2xvbiBmb3IgdGhlIHBvcnQgaWYgYSBw
b3J0IGlzIHByZXNlbnQuCi0vLyBUaGUgY2FsbGVyIGNhbiBwYXNzIFVSTFBhcnNlcjo6UE9SVF9V
TlNQRUNJRklFRCBhcyB0aGUKLS8vIGRlZmF1bHRQb3J0Rm9yU2NoZW1lIGFyZ3VtZW50IGlmIHRo
ZXJlIGlzIG5vIGRlZmF1bHQgcG9ydC4KLS8vCi0vLyBUaGUgOC1iaXQgdmVyc2lvbiByZXF1aXJl
cyBVVEYtOCBlbmNvZGluZy4KLWJvb2wgY2Fub25pY2FsaXplUG9ydChjb25zdCBjaGFyKiBzcGVj
LCBjb25zdCBVUkxDb21wb25lbnQmIHBvcnQsIGludCBkZWZhdWx0UG9ydEZvclNjaGVtZSwgVVJM
QnVmZmVyPGNoYXI+JiwgVVJMQ29tcG9uZW50JiBvdXB1dFBvcnQpOwotYm9vbCBjYW5vbmljYWxp
emVQb3J0KGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHBvcnQsIGludCBk
ZWZhdWx0UG9ydEZvclNjaGVtZSwgVVJMQnVmZmVyPGNoYXI+JiwgVVJMQ29tcG9uZW50JiBvdXB1
dFBvcnQpOwotCi0vLyBSZXR1cm5zIHRoZSBkZWZhdWx0IHBvcnQgZm9yIHRoZSBnaXZlbiBjYW5v
bmljYWwgc2NoZW1lLCBvciBQT1JUX1VOU1BFQ0lGSUVECi0vLyBpZiB0aGUgc2NoZW1lIGlzIHVu
a25vd24uCi1pbnQgZGVmYXVsdFBvcnRGb3JTY2hlbWUoY29uc3QgY2hhciogc2NoZW1lLCBpbnQg
c2NoZW1lTGVuZ3RoKTsKLQotLy8gUGF0aC4gSWYgdGhlIGlucHV0IGRvZXMgbm90IGJlZ2luIGlu
IGEgc2xhc2ggKGluY2x1ZGluZyBpZiB0aGUgaW5wdXQgaXMKLS8vIGVtcHR5KSwgd2UnbGwgcHJl
cGVuZCBhIHNsYXNoIHRvIHRoZSBwYXRoIHRvIG1ha2UgaXQgY2Fub25pY2FsLgotLy8KLS8vIFRo
ZSA4LWJpdCB2ZXJzaW9uIGFzc3VtZXMgVVRGLTggZW5jb2RpbmcsIGJ1dCBkb2VzIG5vdCB2ZXJp
ZnkgdGhlIHZhbGlkaXR5Ci0vLyBvZiB0aGUgVVRGLTggKGkuZS4sIHlvdSBjYW4gaGF2ZSBpbnZh
bGlkIFVURi04IHNlcXVlbmNlcywgaW52YWxpZAotLy8gY2hhcmFjdGVycywgZXRjLikuIE5vcm1h
bGx5LCBVUkxzIHdpbGwgY29tZSBpbiBhcyBVVEYtMTYsIHNvIHRoaXMgaXNuJ3QKLS8vIGFuIGlz
c3VlLiBTb21lYm9keSBnaXZpbmcgdXMgYW4gOC1iaXQgcGF0aCBpcyByZXNwb25zaWJsZSBmb3Ig
Z2VuZXJhdGluZwotLy8gdGhlIHBhdGggdGhhdCB0aGUgc2VydmVyIGV4cGVjdHMgKHdlJ2xsIGVz
Y2FwZSBoaWdoLWJpdCBjaGFyYWN0ZXJzKSwgc28KLS8vIGlmIHNvbWV0aGluZyBpcyBpbnZhbGlk
LCBpdCdzIHRoZWlyIHByb2JsZW0uCi1ib29sIENhbm9uaWNhbGl6ZVBhdGgoY29uc3QgY2hhciog
c3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLCBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxDb21w
b25lbnQqIG91dHB1dFBhdGgpOwotYm9vbCBDYW5vbmljYWxpemVQYXRoKGNvbnN0IFVDaGFyKiBz
cGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHBhdGgsIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTENvbXBv
bmVudCogb3V0cHV0UGF0aCk7Ci0KLS8vIENhbm9uaWNhbGl6ZXMgdGhlIGlucHV0IGFzIGEgZmls
ZSBwYXRoLiBUaGlzIGlzIGxpa2UgQ2Fub25pY2FsaXplUGF0aCBleGNlcHQKLS8vIHRoYXQgaXQg
YWxzbyBoYW5kbGVzIFdpbmRvd3MgZHJpdmUgc3BlY3MuIEZvciBleGFtcGxlLCB0aGUgcGF0aCBj
YW4gYmVnaW4KLS8vIHdpdGggImN8XCIgYW5kIGl0IHdpbGwgZ2V0IHByb3Blcmx5IGNhbm9uaWNh
bGl6ZWQgdG8gIkM6LyIuCi0vLyBUaGUgc3RyaW5nIHdpbGwgYmUgYXBwZW5kZWQgdG8gfG91dHB1
dHwgYW5kIHxvdXRwdXRQYXRofCB3aWxsIGJlIHVwZGF0ZWQuCi0vLwotLy8gVGhlIDgtYml0IHZl
cnNpb24gcmVxdWlyZXMgVVRGLTggZW5jb2RpbmcuCi1ib29sIEZpbGVDYW5vbmljYWxpemVQYXRo
KGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0aCwgVVJMQnVmZmVyPGNo
YXI+JiwgVVJMQ29tcG9uZW50KiBvdXRwdXRQYXRoKTsKLWJvb2wgRmlsZUNhbm9uaWNhbGl6ZVBh
dGgoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0aCwgVVJMQnVmZmVy
PGNoYXI+JiwgVVJMQ29tcG9uZW50KiBvdXRwdXRQYXRoKTsKLQotLy8gUXVlcnk6IFByZXBlbmRz
IHRoZSA/IGlmIG5lZWRlZC4KLS8vCi0vLyBUaGUgOC1iaXQgdmVyc2lvbiByZXF1aXJlcyB0aGUg
aW5wdXQgdG8gYmUgVVRGLTggZW5jb2RpbmcuIEluY29ycmVjdGx5Ci0vLyBlbmNvZGVkIGNoYXJh
Y3RlcnMgKGluIFVURi04IG9yIFVURi0xNikgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBVbmlj
b2RlCi0vLyAiaW52YWxpZCBjaGFyYWN0ZXIuIiBUaGlzIGZ1bmN0aW9uIGNhbiBub3QgZmFpbCwg
d2UgYWx3YXlzIGp1c3QgdHJ5IHRvIGRvCi0vLyBvdXIgYmVzdCBmb3IgY3JhenkgaW5wdXQgaGVy
ZSBzaW5jZSB3ZWIgcGFnZXMgY2FuIHNldCBpdCB0aGVtc2VsdmVzLgotLy8KLS8vIFRoaXMgd2ls
bCBjb252ZXJ0IHRoZSBnaXZlbiBpbnB1dCBpbnRvIHRoZSBvdXRwdXQgZW5jb2RpbmcgdGhhdCB0
aGUgZ2l2ZW4KLS8vIGNoYXJhY3RlciBzZXQgY29udmVydGVyIG9iamVjdCBwcm92aWRlcy4gVGhl
IGNvbnZlcnRlciB3aWxsIG9ubHkgYmUgY2FsbGVkCi0vLyBpZiBuZWNlc3NhcnksIGZvciBBU0NJ
SSBpbnB1dCwgbm8gY29udmVyc2lvbnMgYXJlIG5lY2Vzc2FyeS4KLS8vCi0vLyBUaGUgY29udmVy
dGVyIGNhbiBiZSBudWxsLiBJbiB0aGlzIGNhc2UsIHRoZSBvdXRwdXQgZW5jb2Rpbmcgd2lsbCBi
ZSBVVEYtOC4KLXZvaWQgQ2Fub25pY2FsaXplUXVlcnkoY29uc3QgY2hhciogc3BlYywgY29uc3Qg
VVJMQ29tcG9uZW50JiBxdWVyeSwgVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyKiwgVVJMQnVmZmVy
PGNoYXI+JiwgVVJMQ29tcG9uZW50KiBvdXRwdXRRdWVyeSk7Ci12b2lkIENhbm9uaWNhbGl6ZVF1
ZXJ5KGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHF1ZXJ5LCBVUkxRdWVy
eUNoYXJzZXRDb252ZXJ0ZXIqLCBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxDb21wb25lbnQqIG91dHB1
dFF1ZXJ5KTsKLQotLy8gUmVmOiBQcmVwZW5kcyB0aGUgIyBpZiBuZWVkZWQuIFRoZSBvdXRwdXQg
d2lsbCBiZSBVVEYtOCAodGhpcyBpcyB0aGUgb25seQotLy8gY2Fub25pY2FsaXplciB0aGF0IGRv
ZXMgbm90IHByb2R1Y2UgQVNDSUkgb3V0cHV0KS4gVGhlIG91dHB1dCBpcwotLy8gZ3VhcmFudGVl
ZCB0byBiZSB2YWxpZCBVVEYtOC4KLS8vCi0vLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IGZhaWwu
IElmIHRoZSBpbnB1dCBpcyBpbnZhbGlkIFVURi04L1VURi0xNiwgd2UnbGwgdXNlCi0vLyB0aGUg
IlVuaWNvZGUgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIiBmb3IgdGhlIGNvbmZ1c2luZyBiaXRzIGFu
ZCBjb3B5IHRoZSByZXN0Lgotdm9pZCBjYW5vbmljYWxpemVGcmFnbWVudChjb25zdCBjaGFyKiBz
cGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHBhdGgsIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTENvbXBv
bmVudCYgb3V0cHV0RnJhZ21lbnQpOwotdm9pZCBjYW5vbmljYWxpemVGcmFnbWVudChjb25zdCBV
Q2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLCBVUkxCdWZmZXI8Y2hhcj4mLCBV
UkxDb21wb25lbnQmIG91dHB1dEZyYWdtZW50KTsKLQotLy8gRnVsbCBjYW5vbmljYWxpemVyIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ly8KLS8vIFRoZXNlIGZ1bmN0aW9ucyByZXBsYWNlIGFueSBzdHJpbmcgY29udGVudHMsIHJhdGhl
ciB0aGFuIGFwcGVuZCBhcyBhYm92ZS4KLS8vIFNlZSB0aGUgYWJvdmUgcGllY2UtYnktcGllY2Ug
ZnVuY3Rpb25zIGZvciBpbmZvcm1hdGlvbiBzcGVjaWZpYyB0bwotLy8gY2Fub25pY2FsaXppbmcg
aW5kaXZpZHVhbCBjb21wb25lbnRzLgotLy8KLS8vIFRoZSBvdXRwdXQgd2lsbCBiZSBBU0NJSSBl
eGNlcHQgdGhlIHJlZmVyZW5jZSBmcmFnbWVudCwgd2hpY2ggbWF5IGJlIFVURi04LgotLy8KLS8v
IFRoZSA4LWJpdCB2ZXJzaW9ucyByZXF1aXJlIFVURi04IGVuY29kaW5nLgotCi0vLyBVc2UgZm9y
IHN0YW5kYXJkIFVSTHMgd2l0aCBhdXRob3JpdGllcyBhbmQgcGF0aHMuCi1ib29sIENhbm9uaWNh
bGl6ZVN0YW5kYXJkVVJMKGNvbnN0IGNoYXIqIHNwZWMsIGludCBzcGVjTGVuZ3RoLCBjb25zdCBV
UkxTZWdtZW50cyYgcGFyc2VkLCBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVy
dGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxT
ZWdtZW50cyogb3V0cHV0UGFyc2VkKTsKLWJvb2wgQ2Fub25pY2FsaXplU3RhbmRhcmRVUkwoY29u
c3QgVUNoYXIqIHNwZWMsIGludCBzcGVjTGVuZ3RoLCBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2Vk
LCBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxTZWdtZW50cyogb3V0cHV0UGFy
c2VkKTsKLQotLy8gVXNlIGZvciBmaWxlIFVSTHMuCi1ib29sIENhbm9uaWNhbGl6ZUZpbGVVUkwo
Y29uc3QgY2hhciogc3BlYywgaW50IHNwZWNMZW5ndGgsIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJz
ZWQsIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNl
ZCk7Ci1ib29sIENhbm9uaWNhbGl6ZUZpbGVVUkwoY29uc3QgVUNoYXIqIHNwZWMsIGludCBzcGVj
TGVuZ3RoLCBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLCBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0
ZXIqIHF1ZXJ5Q29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxj
aGFyPiYsIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpOwotCi0vLyBVc2UgZm9yIGZpbGVzeXN0
ZW0gVVJMcy4KLWJvb2wgY2Fub25pY2FsaXplRmlsZVN5c3RlbVVSTChjb25zdCBjaGFyKiBzcGVj
LCBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLCBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqIHF1
ZXJ5Q29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxj
aGFyPiYsIFVSTFNlZ21lbnRzJiBvdXRwdXRQYXJzZWQpOwotYm9vbCBjYW5vbmljYWxpemVGaWxl
U3lzdGVtVVJMKGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLCBV
UkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTFNlZ21lbnRzJiBvdXRwdXRQYXJz
ZWQpOwotCi0vLyBVc2UgZm9yIHBhdGggVVJMcyBzdWNoIGFzIGphdmFzY3JpcHQuIFRoaXMgZG9l
cyBub3QgbW9kaWZ5IHRoZSBwYXRoIGluIGFueQotLy8gd2F5LCBmb3IgZXhhbXBsZSwgYnkgZXNj
YXBpbmcgaXQuCi1ib29sIGNhbm9uaWNhbGl6ZVBhdGhVUkwoY29uc3QgY2hhciogc3BlYywgY29u
c3QgVVJMU2VnbWVudHMmIHBhcnNlZCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTFNlZ21l
bnRzJiBvdXB1dFBhcnNlZCk7Ci1ib29sIGNhbm9uaWNhbGl6ZVBhdGhVUkwoY29uc3QgVUNoYXIq
IHNwZWMsIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0
LCBVUkxTZWdtZW50cyYgb3VwdXRQYXJzZWQpOwotCi0vLyBVc2UgZm9yIG1haWx0byBVUkxzLiBU
aGlzICJjYW5vbmljYWxpemVzIiB0aGUgdXJsIGludG8gYSBwYXRoIGFuZCBxdWVyeQotLy8gY29t
cG9uZW50LiBJdCBkb2VzIG5vdCBhdHRlbXB0IHRvIG1lcmdlICJ0byIgZmllbGRzLiBJdCB1c2Vz
IFVURi04IGZvcgotLy8gdGhlIHF1ZXJ5IGVuY29kaW5nIGlmIHRoZXJlIGlzIGEgcXVlcnkuIFRo
aXMgaXMgYmVjYXVzZSBhIG1haWx0byBVUkwgaXMKLS8vIHJlYWxseSBpbnRlbmRlZCBmb3IgYW4g
ZXh0ZXJuYWwgbWFpbCBwcm9ncmFtLCBhbmQgdGhlIGVuY29kaW5nIG9mIGEgcGFnZSwKLS8vIGV0
Yy4gd2hpY2ggd291bGQgaW5mbHVlbmNlIGEgcXVlcnkgZW5jb2Rpbmcgbm9ybWFsbHkgYXJlIGly
cmVsZXZhbnQuCi1ib29sIGNhbm9uaWNhbGl6ZU1haWx0b1VSTChjb25zdCBjaGFyKiBzcGVjLCBj
b25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLCBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxTZWdtZW50cyYg
b3V0cHV0UGFyc2VkKTsKLWJvb2wgY2Fub25pY2FsaXplTWFpbHRvVVJMKGNvbnN0IFVDaGFyKiBz
cGVjLCAgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNlZCwgVVJMQnVmZmVyPGNoYXI+JiwgVVJMU2Vn
bWVudHMmIG91dHB1dFBhcnNlZCk7Ci0KLS8vIFBhcnQgcmVwbGFjZXIgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gSW50
ZXJuYWwgc3RydWN0dXJlIHVzZWQgZm9yIHN0b3Jpbmcgc2VwYXJhdGUgc3RyaW5ncyBmb3IgZWFj
aCBjb21wb25lbnQuCi0vLyBUaGUgYmFzaWMgY2Fub25pY2FsaXphdGlvbiBmdW5jdGlvbnMgdXNl
IHRoaXMgc3RydWN0dXJlIGludGVybmFsbHkgc28gdGhhdAotLy8gY29tcG9uZW50IHJlcGxhY2Vt
ZW50IChkaWZmZXJlbnQgc3RyaW5ncyBmb3IgZGlmZmVyZW50IGNvbXBvbmVudHMpIGNhbiBiZQot
Ly8gdHJlYXRlZCBvbiB0aGUgc2FtZSBjb2RlIHBhdGggYXMgcmVndWxhciBjYW5vbmljYWxpemF0
aW9uICh0aGUgc2FtZSBzdHJpbmcKLS8vIGZvciBlYWNoIGNvbXBvbmVudCkuCi0vLwotLy8gQSBV
UkxTZWdtZW50cyBzdHJ1Y3R1cmUgdXN1YWxseSBnb2VzIGFsb25nIHdpdGggdGhpcy4gVGhvc2UK
LS8vIGNvbXBvbmVudHMgaWRlbnRpZnkgb2Zmc2V0cyB3aXRoaW4gdGhlc2Ugc3RyaW5ncywgc28g
dGhhdCB0aGV5IGNhbiBhbGwgYmUKLS8vIGluIHRoZSBzYW1lIHN0cmluZywgb3Igc3ByZWFkIGFy
Yml0cmFyaWx5IGFjcm9zcyBkaWZmZXJlbnQgb25lcy4KLS8vCi0vLyBUaGlzIHN0cnVjdHVyZXMg
ZG9lcyBub3Qgb3duIGFueSBkYXRhLiBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkg
dG8KLS8vIGVuc3VyZSB0aGF0IHRoZSBkYXRhIHRoZSBwb2ludGVycyBwb2ludCB0byBzdGF5cyBp
biBzY29wZSBhbmQgaXMgbm90Ci0vLyBtb2RpZmllZC4KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+Ci1zdHJ1Y3QgVVJMQ29tcG9uZW50U291cmNlIHsKLSAgICAvLyBDb25zdHJ1Y3Rv
ciBub3JtYWxseSB1c2VkIGJ5IGNhbGxlcnMgd2lzaGluZyB0byByZXBsYWNlIGNvbXBvbmVudHMu
IFRoaXMKLSAgICAvLyB3aWxsIG1ha2UgdGhlbSBhbGwgbnVsbCwgd2hpY2ggaXMgbm8gcmVwbGFj
ZW1lbnQuIFRoZSBjYWxsZXIgd291bGQgdGhlbgotICAgIC8vIG92ZXJyaWRlIHRoZSBjb21wb25l
bnRzIHRoZXkgd2FudCB0byByZXBsYWNlLgotICAgIFVSTENvbXBvbmVudFNvdXJjZSgpCi0gICAg
ICAgIDogc2NoZW1lKDApCi0gICAgICAgICwgdXNlcm5hbWUoMCkKLSAgICAgICAgLCBwYXNzd29y
ZCgwKQotICAgICAgICAsIGhvc3QoMCkKLSAgICAgICAgLCBwb3J0KDApCi0gICAgICAgICwgcGF0
aCgwKQotICAgICAgICAsIHF1ZXJ5KDApCi0gICAgICAgICwgcmVmKDApCi0gICAgewotICAgIH0K
LQotICAgIC8vIENvbnN0cnVjdG9yIG5vcm1hbGx5IHVzZWQgaW50ZXJuYWxseSB0byBpbml0aWFs
aXplIGFsbCB0aGUgY29tcG9uZW50cyB0bwotICAgIC8vIHBvaW50IHRvIHRoZSBzYW1lIHNwZWMu
Ci0gICAgZXhwbGljaXQgVVJMQ29tcG9uZW50U291cmNlKGNvbnN0IENoYXJhY3RlclR5cGUqIGRl
ZmF1bHRWYWx1ZSkKLSAgICAgICAgOiBzY2hlbWUoZGVmYXVsdFZhbHVlKQotICAgICAgICAsIHVz
ZXJuYW1lKGRlZmF1bHRWYWx1ZSkKLSAgICAgICAgLCBwYXNzd29yZChkZWZhdWx0VmFsdWUpCi0g
ICAgICAgICwgaG9zdChkZWZhdWx0VmFsdWUpCi0gICAgICAgICwgcG9ydChkZWZhdWx0VmFsdWUp
Ci0gICAgICAgICwgcGF0aChkZWZhdWx0VmFsdWUpCi0gICAgICAgICwgcXVlcnkoZGVmYXVsdFZh
bHVlKQotICAgICAgICAsIHJlZihkZWZhdWx0VmFsdWUpCi0gICAgewotICAgIH0KLQotICAgIGNv
bnN0IENoYXJhY3RlclR5cGUqIHNjaGVtZTsKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiB1c2Vy
bmFtZTsKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBwYXNzd29yZDsKLSAgICBjb25zdCBDaGFy
YWN0ZXJUeXBlKiBob3N0OwotICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHBvcnQ7Ci0gICAgY29u
c3QgQ2hhcmFjdGVyVHlwZSogcGF0aDsKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBxdWVyeTsK
LSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiByZWY7Ci19OwotCi0vLyBUaGlzIHN0cnVjdHVyZSBl
bmNhcHN1bGF0ZXMgaW5mb3JtYXRpb24gb24gbW9kaWZ5aW5nIGEgVVJMLiBFYWNoIGNvbXBvbmVu
dAotLy8gbWF5IGVpdGhlciBiZSBsZWZ0IHVuY2hhbmdlZCwgcmVwbGFjZWQsIG9yIGRlbGV0ZWQu
Ci0vLwotLy8gQnkgZGVmYXVsdCwgZWFjaCBjb21wb25lbnQgaXMgdW5jaGFuZ2VkLiBGb3IgdGhv
c2UgY29tcG9uZW50cyB0aGF0IHNob3VsZCBiZQotLy8gbW9kaWZpZWQsIGNhbGwgZWl0aGVyIFNl
dCogb3IgQ2xlYXIqIHRvIG1vZGlmeSBpdC4KLS8vCi0vLyBUaGUgc3RyaW5nIHBhc3NlZCB0byBT
ZXQqIGZ1bmN0aW9ucyBET0VTIE5PVCBHRVQgQ09QSUVEIEFORCBNVVNUIEJFIEtFUFQKLS8vIElO
IFNDT1BFIEJZIFRIRSBDQUxMRVIgZm9yIGFzIGxvbmcgYXMgdGhpcyBvYmplY3QgZXhpc3RzIQot
Ly8KLS8vIFByZWZlciB0aGUgOC1iaXQgcmVwbGFjZW1lbnQgdmVyc2lvbiBpZiBwb3NzaWJsZSBz
aW5jZSBpdCBpcyBtb3JlIGVmZmljaWVudC4KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+Ci1jbGFzcyBSZXBsYWNlbWVudHMgewotcHVibGljOgotICAgIFJlcGxhY2VtZW50cygpCi0g
ICAgewotICAgIH0KLQotICAgIC8vIFNjaGVtZQotICAgIHZvaWQgU2V0U2NoZW1lKGNvbnN0IENo
YXJhY3RlclR5cGUqIHMsIGNvbnN0IFVSTENvbXBvbmVudCYgY29tcCkKLSAgICB7Ci0gICAgICAg
IG1fc291cmNlcy5zY2hlbWUgPSBzOwotICAgICAgICBtX3NlZ21lbnRzLnNjaGVtZSA9IGNvbXA7
Ci0gICAgfQotICAgIC8vIE5vdGU6IHdlIGRvbid0IGhhdmUgYSBDbGVhclNjaGVtZSBzaW5jZSB0
aGlzIGRvZXNuJ3QgbWFrZSBhbnkgc2Vuc2UuCi0gICAgYm9vbCBJc1NjaGVtZU92ZXJyaWRkZW4o
KSBjb25zdCB7IHJldHVybiAhIW1fc291cmNlcy5zY2hlbWU7IH0KLQotICAgIC8vIFVzZXJuYW1l
Ci0gICAgdm9pZCBTZXRVc2VybmFtZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzLCBjb25zdCBVUkxD
b21wb25lbnQmIGNvbXApCi0gICAgewotICAgICAgICBtX3NvdXJjZXMudXNlcm5hbWUgPSBzOwot
ICAgICAgICBtX3NlZ21lbnRzLnVzZXJuYW1lID0gY29tcDsKLSAgICB9Ci0gICAgdm9pZCBDbGVh
clVzZXJuYW1lKCkKLSAgICB7Ci0gICAgICAgIG1fc291cmNlcy51c2VybmFtZSA9IFBsYWNlaG9s
ZGVyKCk7Ci0gICAgICAgIG1fc2VnbWVudHMudXNlcm5hbWUgPSBVUkxDb21wb25lbnQoKTsKLSAg
ICB9Ci0gICAgYm9vbCBJc1VzZXJuYW1lT3ZlcnJpZGRlbigpIGNvbnN0IHsgcmV0dXJuICEhbV9z
b3VyY2VzLnVzZXJuYW1lOyB9Ci0KLSAgICAvLyBQYXNzd29yZAotICAgIHZvaWQgU2V0UGFzc3dv
cmQoY29uc3QgQ2hhcmFjdGVyVHlwZSogcywgY29uc3QgVVJMQ29tcG9uZW50JiBjb21wKQotICAg
IHsKLSAgICAgICAgbV9zb3VyY2VzLnBhc3N3b3JkID0gczsKLSAgICAgICAgbV9zZWdtZW50cy5w
YXNzd29yZCA9IGNvbXA7Ci0gICAgfQotICAgIHZvaWQgQ2xlYXJQYXNzd29yZCgpCi0gICAgewot
ICAgICAgICBtX3NvdXJjZXMucGFzc3dvcmQgPSBQbGFjZWhvbGRlcigpOwotICAgICAgICBtX3Nl
Z21lbnRzLnBhc3N3b3JkID0gVVJMQ29tcG9uZW50KCk7Ci0gICAgfQotICAgIGJvb2wgSXNQYXNz
d29yZE92ZXJyaWRkZW4oKSBjb25zdCB7IHJldHVybiAhIW1fc291cmNlcy5wYXNzd29yZDsgfQot
Ci0gICAgLy8gSG9zdAotICAgIHZvaWQgU2V0SG9zdChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzLCBj
b25zdCBVUkxDb21wb25lbnQmIGNvbXApCi0gICAgewotICAgICAgICBtX3NvdXJjZXMuaG9zdCA9
IHM7Ci0gICAgICAgIG1fc2VnbWVudHMuaG9zdCA9IGNvbXA7Ci0gICAgfQotICAgIHZvaWQgQ2xl
YXJIb3N0KCkKLSAgICB7Ci0gICAgICAgIG1fc291cmNlcy5ob3N0ID0gUGxhY2Vob2xkZXIoKTsK
LSAgICAgICAgbV9zZWdtZW50cy5ob3N0ID0gVVJMQ29tcG9uZW50KCk7Ci0gICAgfQotICAgIGJv
b2wgSXNIb3N0T3ZlcnJpZGRlbigpIGNvbnN0IHsgcmV0dXJuICEhbV9zb3VyY2VzLmhvc3Q7IH0K
LQotICAgIC8vIFBvcnQKLSAgICB2b2lkIFNldFBvcnQoY29uc3QgQ2hhcmFjdGVyVHlwZSogcywg
Y29uc3QgVVJMQ29tcG9uZW50JiBjb21wKQotICAgIHsKLSAgICAgICAgbV9zb3VyY2VzLnBvcnQg
PSBzOwotICAgICAgICBtX3NlZ21lbnRzLnBvcnQgPSBjb21wOwotICAgIH0KLSAgICB2b2lkIENs
ZWFyUG9ydCgpCi0gICAgewotICAgICAgICBtX3NvdXJjZXMucG9ydCA9IFBsYWNlaG9sZGVyKCk7
Ci0gICAgICAgIG1fc2VnbWVudHMucG9ydCA9IFVSTENvbXBvbmVudCgpOwotICAgIH0KLSAgICBi
b29sIElzUG9ydE92ZXJyaWRkZW4oKSBjb25zdCB7IHJldHVybiAhIW1fc291cmNlcy5wb3J0OyB9
Ci0KLSAgICAvLyBQYXRoCi0gICAgdm9pZCBTZXRQYXRoKGNvbnN0IENoYXJhY3RlclR5cGUqIHMs
IGNvbnN0IFVSTENvbXBvbmVudCYgY29tcCkKLSAgICB7Ci0gICAgICAgIG1fc291cmNlcy5wYXRo
ID0gczsKLSAgICAgICAgbV9zZWdtZW50cy5wYXRoID0gY29tcDsKLSAgICB9Ci0gICAgdm9pZCBD
bGVhclBhdGgoKQotICAgIHsKLSAgICAgICAgbV9zb3VyY2VzLnBhdGggPSBQbGFjZWhvbGRlcigp
OwotICAgICAgICBtX3NlZ21lbnRzLnBhdGggPSBVUkxDb21wb25lbnQoKTsKLSAgICB9Ci0gICAg
Ym9vbCBJc1BhdGhPdmVycmlkZGVuKCkgY29uc3QgeyByZXR1cm4gIW1fc291cmNlcy5wYXRoOyB9
Ci0KLSAgICAvLyBRdWVyeQotICAgIHZvaWQgU2V0UXVlcnkoY29uc3QgQ2hhcmFjdGVyVHlwZSog
cywgY29uc3QgVVJMQ29tcG9uZW50JiBjb21wKQotICAgIHsKLSAgICAgICAgbV9zb3VyY2VzLnF1
ZXJ5ID0gczsKLSAgICAgICAgbV9zZWdtZW50cy5xdWVyeSA9IGNvbXA7Ci0gICAgfQotICAgIHZv
aWQgQ2xlYXJRdWVyeSgpCi0gICAgewotICAgICAgICBtX3NvdXJjZXMucXVlcnkgPSBQbGFjZWhv
bGRlcigpOwotICAgICAgICBtX3NlZ21lbnRzLnF1ZXJ5ID0gVVJMQ29tcG9uZW50KCk7Ci0gICAg
fQotICAgIGJvb2wgSXNRdWVyeU92ZXJyaWRkZW4oKSBjb25zdCB7IHJldHVybiAhbV9zb3VyY2Vz
LnF1ZXJ5OyB9Ci0KLSAgICAvLyBSZWYKLSAgICB2b2lkIFNldFJlZihjb25zdCBDaGFyYWN0ZXJU
eXBlKiBzLCBjb25zdCBVUkxDb21wb25lbnQmIGNvbXApCi0gICAgewotICAgICAgICBtX3NvdXJj
ZXMucmVmID0gczsKLSAgICAgICAgbV9zZWdtZW50cy5mcmFnbWVudCA9IGNvbXA7Ci0gICAgfQot
ICAgIHZvaWQgQ2xlYXJSZWYoKQotICAgIHsKLSAgICAgICAgbV9zb3VyY2VzLnJlZiA9IFBsYWNl
aG9sZGVyKCk7Ci0gICAgICAgIG1fc2VnbWVudHMuZnJhZ21lbnQgPSBVUkxDb21wb25lbnQoKTsK
LSAgICB9Ci0gICAgYm9vbCBJc1JlZk92ZXJyaWRkZW4oKSBjb25zdCB7IHJldHVybiAhbV9zb3Vy
Y2VzLnJlZjsgfQotCi0gICAgLy8gR2V0dGVycyBmb3IgdGhlIGl0bmVybmFsIGRhdGEuIFNlZSB0
aGUgdmFyaWFibGVzIGJlbG93IGZvciBob3cgdGhlCi0gICAgLy8gaW5mb3JtYXRpb24gaXMgZW5j
b2RlZC4KLSAgICBjb25zdCBVUkxDb21wb25lbnRTb3VyY2U8Q2hhcmFjdGVyVHlwZT4mIHNvdXJj
ZXMoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZXM7IH0KLSAgICBjb25zdCBVUkxTZWdtZW50cyYg
Y29tcG9uZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fc2VnbWVudHM7IH0KLQotcHJpdmF0ZToKLSAg
ICAvLyBSZXR1cm5zIGEgcG9pbnRlciB0byBhIHN0YXRpYyBlbXB0eSBzdHJpbmcgdGhhdCBpcyB1
c2VkIGFzIGEgcGxhY2Vob2xkZXIKLSAgICAvLyB0byBpbmRpY2F0ZSBhIGNvbXBvbmVudCBzaG91
bGQgYmUgZGVsZXRlZCAoc2VlIGJlbG93KS4KLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBQbGFj
ZWhvbGRlcigpCi0gICAgewotICAgICAgICBzdGF0aWMgY29uc3QgQ2hhcmFjdGVyVHlwZSBlbXB0
eVN0cmluZyA9IDA7Ci0gICAgICAgIHJldHVybiAmZW1wdHlTdHJpbmc7Ci0gICAgfQotCi0gICAg
Ly8gV2Ugc3VwcG9ydCB0aHJlZSBzdGF0ZXM6Ci0gICAgLy8KLSAgICAvLyBBY3Rpb24gICAgICAg
ICAgICAgICAgIHwgU291cmNlICAgICAgICAgICAgICAgIENvbXBvbmVudAotICAgIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0gICAgLy8gRG9uJ3QgY2hhbmdlIGNvbXBvbmVudCB8IG51bGwgICAgICAg
ICAgICAgICAgICAodW51c2VkKQotICAgIC8vIFJlcGxhY2UgY29tcG9uZW50ICAgICAgfCAocmVw
bGFjZW1lbnQgc3RyaW5nKSAgKHJlcGxhY2VtZW50IGNvbXBvbmVudCkKLSAgICAvLyBEZWxldGUg
Y29tcG9uZW50ICAgICAgIHwgKG5vbi1udWxsKSAgICAgICAgICAgIChpbnZhbGlkIGNvbXBvbmVu
dDogKDAsLTEpKQotICAgIC8vCi0gICAgLy8gV2UgdXNlIGEgcG9pbnRlciB0byB0aGUgZW1wdHkg
c3RyaW5nIGZvciB0aGUgc291cmNlIHdoZW4gdGhlIGNvbXBvbmVudAotICAgIC8vIHNob3VsZCBi
ZSBkZWxldGVkLgotICAgIFVSTENvbXBvbmVudFNvdXJjZTxDaGFyYWN0ZXJUeXBlPiBtX3NvdXJj
ZXM7Ci0gICAgVVJMU2VnbWVudHMgbV9zZWdtZW50czsKLX07Ci0KLS8vIFRoZSBiYXNlIG11c3Qg
YmUgYW4gOC1iaXQgY2Fub25pY2FsIFVSTC4KLWJvb2wgUmVwbGFjZVN0YW5kYXJkVVJMKGNvbnN0
IGNoYXIqIGJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYg
YmFzZVBhcnNlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlcGxhY2VtZW50czxj
aGFyPiYsCi0gICAgICAgICAgICAgICAgICAgICAgICBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIq
IHF1ZXJ5Q29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+
JiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpOwot
Ym9vbCBSZXBsYWNlU3RhbmRhcmRVUkwoY29uc3QgY2hhciogYmFzZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAotICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUmVwbGFjZW1lbnRzPFVDaGFyPiYsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwKLSAgICAgICAgICAgICAgICAgICAgICAg
IFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpOwotCi0vLyBGaWxlc3lzdGVtIFVSTHMgY2FuIG9u
bHkgaGF2ZSB0aGUgcGF0aCwgcXVlcnksIG9yIHJlZiByZXBsYWNlZC4KLS8vIEFsbCBvdGhlciBj
b21wb25lbnRzIHdpbGwgYmUgaWdub3JlZC4KLWJvb2wgUmVwbGFjZUZpbGVTeXN0ZW1VUkwoY29u
c3QgY2hhciogYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMU2VnbWVu
dHMmIGJhc2VQYXJzZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlcGxhY2Vt
ZW50czxjaGFyPiYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFF1ZXJ5Q2hhcnNldENv
bnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1
ZmZlcjxjaGFyPiYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRw
dXRQYXJzZWQpOwotYm9vbCBSZXBsYWNlRmlsZVN5c3RlbVVSTChjb25zdCBjaGFyKiBiYXNlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVwbGFjZW1lbnRzPFVDaGFyPiYsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciogcXVlcnlD
b252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpOwotCi0v
LyBSZXBsYWNpbmcgc29tZSBwYXJ0cyBvZiBhIGZpbGUgVVJMIGlzIG5vdCBwZXJtaXR0ZWQuIEV2
ZXJ5dGhpbmcgZXhjZXB0Ci0vLyB0aGUgaG9zdCwgcGF0aCwgcXVlcnksIGFuZCByZWYgd2lsbCBi
ZSBpZ25vcmVkLgotYm9vbCBSZXBsYWNlRmlsZVVSTChjb25zdCBjaGFyKiBiYXNlLAotICAgICAg
ICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKLSAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUmVwbGFjZW1lbnRzPGNoYXI+JiwKLSAgICAgICAgICAgICAgICAgICAg
VVJMUXVlcnlDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKLSAgICAgICAgICAgICAg
ICAgICAgVVJMQnVmZmVyPGNoYXI+JiwKLSAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMq
IG91dHB1dFBhcnNlZCk7Ci1ib29sIFJlcGxhY2VGaWxlVVJMKGNvbnN0IGNoYXIqIGJhc2UsCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAotICAgICAg
ICAgICAgICAgICAgICBjb25zdCBSZXBsYWNlbWVudHM8VUNoYXI+JiwKLSAgICAgICAgICAgICAg
ICAgICAgVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKLSAgICAgICAg
ICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwKLSAgICAgICAgICAgICAgICAgICAgVVJMU2Vn
bWVudHMqIG91dHB1dFBhcnNlZCk7Ci0KLS8vIFBhdGggVVJMcyBjYW4gb25seSBoYXZlIHRoZSBz
Y2hlbWUgYW5kIHBhdGggcmVwbGFjZWQuIEFsbCBvdGhlciBjb21wb25lbnRzCi0vLyB3aWxsIGJl
IGlnbm9yZWQuCi1ib29sIFJlcGxhY2VQYXRoVVJMKGNvbnN0IGNoYXIqIGJhc2UsCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAotICAgICAgICAgICAg
ICAgICAgICBjb25zdCBSZXBsYWNlbWVudHM8Y2hhcj4mLAotICAgICAgICAgICAgICAgICAgICBV
UkxCdWZmZXI8Y2hhcj4mLAotICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0
UGFyc2VkKTsKLWJvb2wgUmVwbGFjZVBhdGhVUkwoY29uc3QgY2hhciogYmFzZSwKLSAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFJlcGxhY2VtZW50czxVQ2hhcj4mLAotICAgICAgICAgICAgICAgICAgICBV
UkxCdWZmZXI8Y2hhcj4mLAotICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0
UGFyc2VkKTsKLQotLy8gTWFpbHRvIFVSTHMgY2FuIG9ubHkgaGF2ZSB0aGUgc2NoZW1lLCBwYXRo
LCBhbmQgcXVlcnkgcmVwbGFjZWQuCi0vLyBBbGwgb3RoZXIgY29tcG9uZW50cyB3aWxsIGJlIGln
bm9yZWQuCi1ib29sIHJlcGxhY2VNYWlsdG9VUkwoY29uc3QgY2hhciogYmFzZSwgY29uc3QgVVJM
U2VnbWVudHMmIGJhc2VQYXJzZWQsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVwbGFj
ZW1lbnRzPGNoYXI+JiwKLSAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91
dHB1dCwgVVJMU2VnbWVudHMmIG91dHB1dFBhcnNlZCk7Ci1ib29sIHJlcGxhY2VNYWlsdG9VUkwo
Y29uc3QgY2hhciogYmFzZSwgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCi0gICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUmVwbGFjZW1lbnRzPFVDaGFyPiYsCi0gICAgICAgICAgICAg
ICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTFNlZ21lbnRzJiBvdXRwdXRQYXJz
ZWQpOwotCi0vLyBSZWxhdGl2ZSBVUkwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEdpdmVuIGFuIGlucHV0IFVSTCBv
ciBVUkwgZnJhZ21lbnQgfGZyYWdtZW50fCwgZGV0ZXJtaW5lcyBpZiBpdCBpcyBhCi0vLyByZWxh
dGl2ZSBvciBhYnNvbHV0ZSBVUkwgYW5kIHBsYWNlcyB0aGUgcmVzdWx0IGludG8gfCppc1JlbGF0
aXZlfC4gSWYgaXQgaXMKLS8vIHJlbGF0aXZlLCB0aGUgcmVsZXZhbnQgcG9ydGlvbiBvZiB0aGUg
VVJMIHdpbGwgYmUgcGxhY2VkIGludG8KLS8vIHwqcmVsYXRpdmVDb21wb25lbnR8ICh0aGVyZSBt
YXkgaGF2ZSBiZWVuIHRyaW1tZWQgd2hpdGVzcGFjZSwgZm9yIGV4YW1wbGUpLgotLy8gVGhpcyB2
YWx1ZSBpcyBwYXNzZWQgdG8gcmVzb2x2ZVJlbGF0aXZlVVJMLiBJZiB0aGUgaW5wdXQgaXMgbm90
IHJlbGF0aXZlLAotLy8gdGhpcyB2YWx1ZSBpcyBVTkRFRklORUQgKGl0IG1heSBiZSBjaGFuZ2Vk
IGJ5IHRoZSBmdW5jdGlvbikuCi0vLwotLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MgKHdlIHN1
Y2Nlc3NmdWxseSBkZXRlcm1pbmVkIHRoZSBVUkwgaXMgcmVsYXRpdmUgb3IKLS8vIG5vdCkuIEZh
aWx1cmUgbWVhbnMgdGhhdCB0aGUgY29tYmluYXRpb24gb2YgVVJMcyBkb2Vzbid0IG1ha2UgYW55
IHNlbnNlLgotLy8KLS8vIFRoZSBiYXNlIFVSTCBzaG91bGQgYWx3YXlzIGJlIGNhbm9uaWNhbCwg
dGhlcmVmb3JlIGlzIEFTQ0lJLgotYm9vbCBpc1JlbGF0aXZlVVJMKGNvbnN0IGNoYXIqIGJhc2Us
IGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAotICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIGZyYWdtZW50LCBpbnQgZnJhZ21lbnRMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAg
Ym9vbCBpc0Jhc2VIaWVyYXJjaGljYWwsCi0gICAgICAgICAgICAgICAgICAgYm9vbCYgaXNSZWxh
dGl2ZSwgVVJMQ29tcG9uZW50JiByZWxhdGl2ZUNvbXBvbmVudCk7Ci1ib29sIGlzUmVsYXRpdmVV
UkwoY29uc3QgY2hhciogYmFzZSwgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCi0gICAg
ICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIGZyYWdtZW50LCBpbnQgZnJhZ21lbnRMZW5ndGgs
Ci0gICAgICAgICAgICAgICAgICAgYm9vbCBpc0Jhc2VIaWVyYXJjaGljYWwsCi0gICAgICAgICAg
ICAgICAgICAgYm9vbCYgaXNSZWxhdGl2ZSwgVVJMQ29tcG9uZW50JiByZWxhdGl2ZUNvbXBvbmVu
dCk7Ci0KLS8vIEdpdmVuIGEgY2Fub25pY2FsIHBhcnNlZCBzb3VyY2UgVVJMLCBhIFVSTCBmcmFn
bWVudCBrbm93biB0byBiZSByZWxhdGl2ZSwKLS8vIGFuZCB0aGUgaWRlbnRpZmllZCByZWxldmFu
dCBwb3J0aW9uIG9mIHRoZSByZWxhdGl2ZSBVUkwgKGNvbXB1dGVkIGJ5Ci0vLyBpc1JlbGF0aXZl
VVJMKSwgdGhpcyBwcm9kdWNlcyBhIG5ldyBwYXJzZWQgY2Fub25pY2FsIFVSTCBpbiB8b3V0cHV0
fCBhbmQKLS8vIHxvdXRwdXRQYXJzZWR8LgotLy8KLS8vIEl0IGFsc28gcmVxdWlyZXMgYSBmbGFn
IGluZGljYXRpbmcgd2hldGhlciB0aGUgYmFzZSBVUkwgaXMgYSBmaWxlOiBVUkwKLS8vIHdoaWNo
IHRyaWdnZXJzIGFkZGl0aW9uYWwgbG9naWMuCi0vLwotLy8gVGhlIGJhc2UgVVJMIHNob3VsZCBi
ZSBjYW5vbmljYWwgYW5kIGhhdmUgYSBob3N0IChtYXkgYmUgZW1wdHkgZm9yIGZpbGUKLS8vIFVS
THMpIGFuZCBhIHBhdGguIElmIGl0IGRvZXNuJ3QgaGF2ZSB0aGVzZSwgd2UgY2FuJ3QgcmVzb2x2
ZSByZWxhdGl2ZQotLy8gVVJMcyBvZmYgb2YgaXQgYW5kIHdpbGwgcmV0dXJuIHRoZSBiYXNlIGFz
IHRoZSBvdXRwdXQgd2l0aCBhbiBlcnJvciBmbGFnLgotLy8gQmVjYXVzZWUgaXQgaXMgY2Fub25p
Y2FsIGlzIHNob3VsZCBhbHNvIGJlIEFTQ0lJLgotLy8KLS8vIFRoZSBxdWVyeSBjaGFyc2V0IGNv
bnZlcnRlciBmb2xsb3dzIHRoZSBzYW1lIHJ1bGVzIGFzIENhbm9uaWNhbGl6ZVF1ZXJ5LgotLy8K
LS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLiBPbiBmYWlsdXJlLCB0aGUgb3V0cHV0IHdpbGwg
YmUgInNvbWV0aGluZwotLy8gcmVhc29uYWJsZSIgdGhhdCB3aWxsIGJlIGNvbnNpc3RlbnQgYW5k
IHZhbGlkLCBqdXN0IHByb2JhYmx5IG5vdCB3aGF0Ci0vLyB3YXMgaW50ZW5kZWQgYnkgdGhlIHdl
YiBwYWdlIGF1dGhvciBvciBjYWxsZXIuCi1ib29sIHJlc29sdmVSZWxhdGl2ZVVSTChjb25zdCBj
aGFyKiBiYXNlVVJMLCBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwgYm9vbCBiYXNlSXNG
aWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVsYXRpdmVVUkwsIGNv
bnN0IFVSTENvbXBvbmVudCYgcmVsYXRpdmVDb21wb25lbnQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNl
ZCk7Ci1ib29sIHJlc29sdmVSZWxhdGl2ZVVSTChjb25zdCBjaGFyKiBiYXNlVVJMLCBjb25zdCBV
UkxTZWdtZW50cyYgYmFzZVBhcnNlZCwgYm9vbCBiYXNlSXNGaWxlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVUNoYXIqIHJlbGF0aXZlVVJMLCBjb25zdCBVUkxDb21wb25lbnQmIHJl
bGF0aXZlQ29tcG9uZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgVVJMUXVlcnlDaGFyc2V0
Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1
ZmZlcjxjaGFyPiYsIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpOwotCi19IC8vIG5hbWVzcGFj
ZSBVUkxDYW5vbmljYWxpemVyCi0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gVVNF
KFdURlVSTCkKLQotI2VuZGlmIC8vIFVSTENhbm9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL3VybC9zcmMvVVJMQ2Fub25FdGMuY3BwIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxD
YW5vbkV0Yy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzY2RkOWM5N2RmNjUx
MTIwM2ZhNzMyNWJkY2U4ZjcwZDMxYzI3YTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbkV0Yy5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwzNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA3IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gQ2Fub25pY2FsaXplcnMgZm9yIHJhbmRvbSBiaXRzIHRo
YXQgYXJlbid0IGJpZyBlbm91Z2ggZm9yIHRoZWlyIG93biBmaWxlcy4KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlVSTENhbm9uLmgiCi0KLSNpbmNsdWRlICJVUkxDYW5vbkludGVy
bmFsLmgiCi0jaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KLQotI2lmIFVTRShXVEZVUkwpCi0K
LW5hbWVzcGFjZSBXVEYgewotCi1uYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplciB7Ci0KLW5hbWVz
cGFjZSB7Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gY2hhcmFjdGVyIHNob3VsZCBi
ZSByZW1vdmVkIGZyb20gdGhlIG1pZGRsZSBvZiBhCi0vLyBVUkwuCi1pbmxpbmUgYm9vbCBpc1Jl
bW92YWJsZVVSTFdoaXRlc3BhY2UoaW50IGNoYXJhY3RlcikKLXsKLSAgICByZXR1cm4gY2hhcmFj
dGVyID09ICdccicgfHwgY2hhcmFjdGVyID09ICdcbicgfHwgY2hhcmFjdGVyID09ICdcdCc7Ci19
Ci0KLS8vIEJhY2tlbmQgZm9yIHJlbW92ZVVSTFdoaXRlc3BhY2UgKHNlZSBkZWNsYXJhdGlvbiBp
biBVUkxDYW5vbi5oKS4KLS8vIEl0IHN1Y2tzIHRoYXQgd2UgaGF2ZSB0byBkbyB0aGlzLCBzaW5j
ZSB0aGlzIHRha2VzIGFib3V0IDEzJSBvZiB0aGUgdG90YWwgVVJMCi0vLyBjYW5vbmljYWxpemF0
aW9uIHRpbWUuCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotY29uc3QgQ2hhcmFj
dGVyVHlwZSogZG9SZW1vdmVVUkxXaGl0ZXNwYWNlKGNvbnN0IENoYXJhY3RlclR5cGUqIGlucHV0
LCBpbnQgaW5wdXRMZW5ndGgsIFVSTEJ1ZmZlcjxDaGFyYWN0ZXJUeXBlPiYgYnVmZmVyLCBpbnQm
IG91dHB1dExlbmd0aCkKLXsKLSAgICAvLyBGYXN0IHZlcmlmaWNhdGlvbiB0aGF0IHRoZXJlJ3Mg
bm90aGluZyB0aGF0IG5lZWRzIHJlbW92YWwuIFRoaXMgaXMgdGhlIDk5JQotICAgIC8vIGNhc2Us
IHNvIHdlIHdhbnQgaXQgdG8gYmUgZmFzdCBhbmQgZG9uJ3QgY2FyZSBhYm91dCBpbXBhY3Rpbmcg
dGhlIHNwZWVkCi0gICAgLy8gd2hlbiB3ZSBkbyBmaW5kIHdoaXRlc3BhY2UuCi0gICAgYm9vbCBm
b3VuZFdoaXRlc3BhY2UgPSBmYWxzZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0TGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgaWYgKCFpc1JlbW92YWJsZVVSTFdoaXRlc3BhY2UoaW5wdXRb
aV0pKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZvdW5kV2hpdGVzcGFjZSA9IHRy
dWU7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmICghZm91bmRXaGl0ZXNwYWNlKSB7
Ci0gICAgICAgIC8vIERpZG4ndCBmaW5kIGFueSB3aGl0ZXNwYWNlLCB3ZSBkb24ndCBuZWVkIHRv
IGRvIGFueXRoaW5nLiBXZSBjYW4ganVzdAotICAgICAgICAvLyByZXR1cm4gdGhlIGlucHV0IGFz
IHRoZSBvdXRwdXQuCi0gICAgICAgIG91dHB1dExlbmd0aCA9IGlucHV0TGVuZ3RoOwotICAgICAg
ICByZXR1cm4gaW5wdXQ7Ci0gICAgfQotCi0gICAgLy8gUmVtb3ZlIHRoZSB3aGl0ZXNwYWNlIGlu
dG8gdGhlIG5ldyBidWZmZXIgYW5kIHJldHVybiBpdC4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IGlucHV0TGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYgKCFpc1JlbW92YWJsZVVSTFdoaXRlc3Bh
Y2UoaW5wdXRbaV0pKQotICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChpbnB1dFtpXSk7Ci0gICAg
fQotICAgIG91dHB1dExlbmd0aCA9IGJ1ZmZlci5sZW5ndGgoKTsKLSAgICByZXR1cm4gYnVmZmVy
LmRhdGEoKTsKLX0KLQotLy8gQ29udGFpbnMgdGhlIGNhbm9uaWNhbCB2ZXJzaW9uIG9mIGVhY2gg
cG9zc2libGUgaW5wdXQgbGV0dGVyIGluIHRoZSBzY2hlbWUKLS8vIChiYXNpY2FsbHksIGxvd2Vy
LWNhc2VkKS4gVGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgd2lsbCBiZSAwIGlmIHRoZSBsZXR0ZXIK
LS8vIGlzIG5vdCBhbGxvd2VkIGluIGEgc2NoZW1lLgotY29uc3QgY2hhciBrU2NoZW1lQ2Fub25p
Y2FsWzB4ODBdID0gewotLy8gMDAtMWY6IGFsbCBhcmUgaW52YWxpZAotICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLAotICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAotLy8gICcgJyAgICEgICAgIiAg
ICAjICAgICQgICAgJSAgICAmICAgICcgICAgKCAgICApICAgICogICAgKyAgICAsICAgIC0gICAg
LiAgICAvCi0gICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICcrJywgIDAsICAnLScsICcuJywgIDAsCi0vLyAgIDAgICAgMSAgICAyICAgIDMg
ICAgNCAgICA1ICAgIDYgICAgNyAgICA4ICAgIDkgICAgOiAgICA7ICAgIDwgICAgPSAgICA+ICAg
ID8KLSAgICAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScs
ICAwICwgIDAgLCAgMCAsICAwICwgIDAgLCAgMCAsCi0vLyAgIEAgICAgQSAgICBCICAgIEMgICAg
RCAgICBFICAgIEYgICAgRyAgICBIICAgIEkgICAgSiAgICBLICAgIEwgICAgTSAgICBOICAgIE8K
LSAgICAgMCAsICdhJywgJ2InLCAnYycsICdkJywgJ2UnLCAnZicsICdnJywgJ2gnLCAnaScsICdq
JywgJ2snLCAnbCcsICdtJywgJ24nLCAnbycsCi0vLyAgIFAgICAgUSAgICBSICAgIFMgICAgVCAg
ICBVICAgIFYgICAgVyAgICBYICAgIFkgICAgWiAgICBbICAgIFwgICAgXSAgICBeICAgIF8KLSAg
ICAncCcsICdxJywgJ3InLCAncycsICd0JywgJ3UnLCAndicsICd3JywgJ3gnLCAneScsICd6Jywg
IDAsICAgMCAsICAwLCAgIDAgLCAgMCwKLS8vICAgYCAgICBhICAgIGIgICAgYyAgICBkICAgIGUg
ICAgZiAgICBnICAgIGggICAgaSAgICBqICAgIGsgICAgbCAgICBtICAgIG4gICAgbwotICAgICAw
ICwgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ2cnLCAnaCcsICdpJywgJ2onLCAnaycs
ICdsJywgJ20nLCAnbicsICdvJywKLS8vICAgcCAgICBxICAgIHIgICAgcyAgICB0ICAgIHUgICAg
diAgICB3ICAgIHggICAgeSAgICB6ICAgIHsgICAgfCAgICB9ICAgIH4KLSAgICAncCcsICdxJywg
J3InLCAncycsICd0JywgJ3UnLCAndicsICd3JywgJ3gnLCAneScsICd6JywgIDAgLCAgMCAsICAw
ICwgIDAgLCAgMCB9OwotCi0vLyBUaGlzIGNvdWxkIGJlIGEgdGFibGUgbG9va3VwIGFzIHdlbGwg
Ynkgc2V0dGluZyB0aGUgaGlnaCBiaXQgZm9yIGVhY2gKLS8vIHZhbGlkIGNoYXJhY3RlciwgYnV0
IGl0J3Mgb25seSBjYWxsZWQgb25jZSBwZXIgVVJMLCBhbmQgaXQgbWFrZXMgdGhlIGxvb2t1cAot
Ly8gdGFibGUgZWFzaWVyIHRvIHJlYWQgbm90IGhhdmluZyBleHRyYSBzdHVmZiBpbiBpdC4KLWlu
bGluZSBib29sIGlzU2NoZW1lRmlyc3RDaGFyKHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyKQotewot
ICAgIHJldHVybiBpc0FTQ0lJQWxwaGEoY2hhcmFjdGVyKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgVUNIQVI+Ci1ib29sIGRvU2NoZW1lKGNvbnN0IENo
YXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgc2NoZW1lLCBVUkxCdWZmZXI8
Y2hhcj4mIG91dHB1dCwgVVJMQ29tcG9uZW50JiBvdXRwdXRTY2hlbWUpCi17Ci0gICAgaWYgKHNj
aGVtZS5sZW5ndGgoKSA8PSAwKSB7Ci0gICAgICAgIC8vIFNjaGVtZSBpcyB1bnNwZWNpZmllZCBv
ciBlbXB0eSwgY29udmVydCB0byBlbXB0eSBieSBhcHBlbmRpbmcgYSBjb2xvbi4KLSAgICAgICAg
b3V0cHV0U2NoZW1lID0gVVJMQ29tcG9uZW50KG91dHB1dC5sZW5ndGgoKSwgMCk7Ci0gICAgICAg
IG91dHB1dC5hcHBlbmQoJzonKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
Ly8gVGhlIG91dHB1dCBzY2hlbWUgc3RhcnRzIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0g
ICAgb3V0cHV0U2NoZW1lLm1vdmVCeShvdXRwdXQubGVuZ3RoKCkpOwotCi0gICAgLy8gRGFuZ2Vy
OiBpdCdzIGltcG9ydGFudCB0aGF0IHRoaXMgY29kZSBkb2VzIG5vdCBzdHJpcCBhbnkgY2hhcmFj
dGVyczogaXQKLSAgICAvLyBvbmx5IGVtaXRzIHRoZSBjYW5vbmljYWwgdmVyc2lvbiAoYmUgaXQg
dmFsaWQgb3IgZXNjYXBlZCkgb2YgZWFjaCBvZgotICAgIC8vIHRoZSBpbnB1dCBjaGFyYWN0ZXJz
LiBTdHJpcHBpbmcgd291bGQgcHV0IGl0IG91dCBvZiBzeW5jIHdpdGgKLSAgICAvLyBVUkxVdGls
aXRpZXM6OkZpbmRBbmRDb21wYXJlU2NoZW1lLCB3aGljaCBjb3VsZCBjYXVzZSBzb21lIHNlY3Vy
aXR5IGNoZWNrcyBvbgotICAgIC8vIHNjaGVtZXMgdG8gYmUgaW5jb3JyZWN0LgotICAgIGJvb2wg
c3VjY2VzcyA9IHRydWU7Ci0gICAgaW50IGVuZCA9IHNjaGVtZS5lbmQoKTsKLSAgICBmb3IgKGlu
dCBpID0gc2NoZW1lLmJlZ2luKCk7IGkgPCBlbmQ7ICsraSkgewotICAgICAgICBVQ0hBUiBjaGFy
YWN0ZXIgPSBzdGF0aWNfY2FzdDxVQ0hBUj4oc3BlY1tpXSk7Ci0gICAgICAgIGNoYXIgcmVwbGFj
ZW1lbnQgPSAwOwotICAgICAgICBpZiAoY2hhcmFjdGVyIDwgMHg4MCkgewotICAgICAgICAgICAg
aWYgKGkgPT0gc2NoZW1lLmJlZ2luKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGRv
IGEgc3BlY2lhbCBjaGVjayBmb3IgdGhlIGZpcnN0IGxldHRlciBvZiB0aGUgc2NoZW1lLgotICAg
ICAgICAgICAgICAgIGlmIChpc1NjaGVtZUZpcnN0Q2hhcihzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyPihjaGFyYWN0ZXIpKSkKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSBrU2No
ZW1lQ2Fub25pY2FsW2NoYXJhY3Rlcl07Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICByZXBsYWNlbWVudCA9IGtTY2hlbWVDYW5vbmljYWxbY2hhcmFjdGVyXTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChyZXBsYWNlbWVudCkKLSAgICAgICAgICAgIG91dHB1dC5hcHBlbmQo
cmVwbGFjZW1lbnQpOwotICAgICAgICBlbHNlIGlmIChjaGFyYWN0ZXIgPT0gJyUnKSB7Ci0gICAg
ICAgICAgICAvLyBDYW5vbmljYWxpemluZyB0aGUgc2NoZW1lIG11bHRpcGxlIHRpbWVzIHNob3Vs
ZCBsZWFkIHRvIHRoZSBzYW1lCi0gICAgICAgICAgICAvLyByZXN1bHQuIFNpbmNlIGludmFsaWQg
Y2hhcmFjdGVycyB3aWxsIGJlIGVzY2FwZWQsIHdlIG5lZWQgdG8gcHJlc2VydmUKLSAgICAgICAg
ICAgIC8vIHRoZSBwZXJjZW50IHRvIGF2b2lkIG11bHRpcGxlIGVzY2FwaW5nLiBUaGUgc2NoZW1l
IHdpbGwgYmUgaW52YWxpZC4KLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICAgICAg
ICAgIG91dHB1dC5hcHBlbmQoJyUnKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8v
IEludmFsaWQgY2hhcmFjdGVyLCBzdG9yZSBpdCBidXQgbWFyayB0aGlzIHNjaGVtZSBhcyBpbnZh
bGlkLgotICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwotCi0gICAgICAgICAgICAvLyBUaGlz
IHdpbGwgZXNjYXBlIHRoZSBvdXRwdXQgYW5kIGFsc28gaGFuZGxlIGVuY29kaW5nIGlzc3Vlcy4K
LSAgICAgICAgICAgIC8vIElnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIHNpbmNlIHdlIGFscmVhZHkg
ZmFpbGVkLgotICAgICAgICAgICAgQXBwZW5kVVRGOEVzY2FwZWRDaGFyKHNwZWMsICZpLCBlbmQs
IG91dHB1dCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgb3V0cHV0IHNjaGVtZSBl
bmRzIHdpdGggdGhlIHRoZSBjdXJyZW50IHBvc2l0aW9uLCBiZWZvcmUgYXBwZW5kaW5nCi0gICAg
Ly8gdGhlIGNvbG9uLgotICAgIG91dHB1dFNjaGVtZS5zZXRMZW5ndGgob3V0cHV0Lmxlbmd0aCgp
IC0gb3V0cHV0U2NoZW1lLmJlZ2luKCkpOwotICAgIG91dHB1dC5hcHBlbmQoJzonKTsKLSAgICBy
ZXR1cm4gc3VjY2VzczsKLX0KLQotLy8gVGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBjb21wb25l
bnRzIHJlZmVyZW5jZSByYW5nZXMgaW4gdGhlIGNvcnJlc3BvbmRpbmcKLS8vICpfc3BlYyBzdHJp
bmdzLiBUeXBpY2FsbHksIHRoZXNlIHNwZWNzIHdpbGwgYmUgdGhlIHNhbWUgKHdlJ3JlCi0vLyBj
YW5vbmljYWxpemluZyBhIHNpbmdsZSBzb3VyY2Ugc3RyaW5nKSwgYnV0IG1heSBiZSBkaWZmZXJl
bnQgd2hlbgotLy8gcmVwbGFjaW5nIGNvbXBvbmVudHMuCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlLCB0eXBlbmFtZSBVQ0hBUj4KLWJvb2wgZG9Vc2VySW5mbyhjb25zdCBDaGFyYWN0
ZXJUeXBlKiB1c2VybmFtZVNwZWMsCi0gICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50
JiB1c2VybmFtZSwKLSAgICAgICAgICAgICAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBwYXNzd29y
ZFNwZWMsCi0gICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiBwYXNzd29yZCwKLSAg
ICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKLSAgICAgICAgICAgICAgICBV
UkxDb21wb25lbnQmIG91dHB1dFVzZXJuYW1lLAotICAgICAgICAgICAgICAgIFVSTENvbXBvbmVu
dCYgb3V0cHV0UGFzc3dvcmQpCi17Ci0gICAgaWYgKHVzZXJuYW1lLmxlbmd0aCgpIDw9IDAgJiYg
cGFzc3dvcmQubGVuZ3RoKCkgPD0gMCkgewotICAgICAgICAvLyBDb21tb24gY2FzZTogbm8gdXNl
ciBpbmZvLiBXZSBzdHJpcCBlbXB0eSB1c2VybmFtZS9wYXNzd29yZHMuCi0gICAgICAgIG91dHB1
dFVzZXJuYW1lID0gVVJMQ29tcG9uZW50KCk7Ci0gICAgICAgIG91dHB1dFBhc3N3b3JkID0gVVJM
Q29tcG9uZW50KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIFdyaXRl
IHRoZSB1c2VybmFtZS4KLSAgICBvdXRwdXRVc2VybmFtZS5zZXRCZWdpbihvdXRwdXQubGVuZ3Ro
KCkpOwotICAgIGlmICh1c2VybmFtZS5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgLy8gVGhpcyB3
aWxsIGVzY2FwZSBjaGFyYWN0ZXJzIG5vdCB2YWxpZCBmb3IgdGhlIHVzZXJuYW1lLgotICAgICAg
ICBhcHBlbmRTdHJpbmdPZlR5cGUoJnVzZXJuYW1lU3BlY1t1c2VybmFtZS5iZWdpbigpXSwgdXNl
cm5hbWUubGVuZ3RoKCksIFVSTENoYXJhY3RlclR5cGVzOjpVc2VySW5mb0NoYXJhY3Rlciwgb3V0
cHV0KTsKLSAgICB9Ci0gICAgb3V0cHV0VXNlcm5hbWUuc2V0TGVuZ3RoKG91dHB1dC5sZW5ndGgo
KSAtIG91dHB1dFVzZXJuYW1lLmJlZ2luKCkpOwotCi0gICAgLy8gV2hlbiB0aGVyZSBpcyBhIHBh
c3N3b3JkLCB3ZSBuZWVkIHRoZSBzZXBhcmF0b3IuIE5vdGUgdGhhdCB3ZSBzdHJpcAotICAgIC8v
IGVtcHR5IGJ1dCBzcGVjaWZpZWQgcGFzc3dvcmRzLgotICAgIGlmIChwYXNzd29yZC5sZW5ndGgo
KSA+IDApIHsKLSAgICAgICAgb3V0cHV0LmFwcGVuZCgnOicpOwotICAgICAgICBvdXRwdXRQYXNz
d29yZC5zZXRCZWdpbihvdXRwdXQubGVuZ3RoKCkpOwotICAgICAgICBhcHBlbmRTdHJpbmdPZlR5
cGUoJnBhc3N3b3JkU3BlY1twYXNzd29yZC5iZWdpbigpXSwgcGFzc3dvcmQubGVuZ3RoKCksIFVS
TENoYXJhY3RlclR5cGVzOjpVc2VySW5mb0NoYXJhY3Rlciwgb3V0cHV0KTsKLSAgICAgICAgb3V0
cHV0UGFzc3dvcmQuc2V0TGVuZ3RoKG91dHB1dC5sZW5ndGgoKSAtIG91dHB1dFBhc3N3b3JkLmJl
Z2luKCkpOwotICAgIH0gZWxzZQotICAgICAgICBvdXRwdXRQYXNzd29yZCA9IFVSTENvbXBvbmVu
dCgpOwotCi0gICAgb3V0cHV0LmFwcGVuZCgnQCcpOwotICAgIHJldHVybiB0cnVlOwotfQotCi0v
LyBIZWxwZXIgZnVuY3Rpb25zIGZvciBjb252ZXJ0aW5nIHBvcnQgaW50ZWdlcnMgdG8gc3RyaW5n
cy4KLWlubGluZSB2b2lkIHdyaXRlUG9ydEludChjaGFyKiBvdXRwdXQsIGludCBvdXRwdXRMZW5n
dGgsIGludCBwb3J0KQotewotICAgIF9pdG9hX3MocG9ydCwgb3V0cHV0LCBvdXRwdXRMZW5ndGgs
IDEwKTsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiB3aWxsIHByZXBlbmQgdGhlIGNvbG9uIGlmIHRo
ZXJlIHdpbGwgYmUgYSBwb3J0LgotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlw
ZW5hbWUgVUNIQVI+Ci1ib29sIGRvUG9ydChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLAotICAg
ICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiBwb3J0LAotICAgICAgICAgICAgaW50IGRlZmF1
bHRQb3J0Rm9yU2NoZW1lLAotICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCi0g
ICAgICAgICAgICBVUkxDb21wb25lbnQmIG91dHB1dFBvcnRDb21wb25lbnQpCi17Ci0gICAgaW50
IHBvcnROdW1iZXIgPSBVUkxQYXJzZXI6OlBhcnNlUG9ydChzcGVjLCBwb3J0KTsKLSAgICBpZiAo
cG9ydE51bWJlciA9PSBVUkxQYXJzZXI6OlBPUlRfVU5TUEVDSUZJRUQgfHwgcG9ydE51bWJlciA9
PSBkZWZhdWx0UG9ydEZvclNjaGVtZSkgewotICAgICAgICBvdXRwdXRQb3J0Q29tcG9uZW50ID0g
VVJMQ29tcG9uZW50KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOyAvLyBMZWF2ZSBwb3J0IGVtcHR5
LgotICAgIH0KLQotICAgIGlmIChwb3J0TnVtYmVyID09IFVSTFBhcnNlcjo6UE9SVF9JTlZBTElE
KSB7Ci0gICAgICAgIC8vIEludmFsaWQgcG9ydDogV2UnbGwgY29weSB0aGUgdGV4dCBmcm9tIHRo
ZSBpbnB1dCBzbyB0aGUgdXNlciBjYW4gc2VlCi0gICAgICAgIC8vIHdoYXQgdGhlIGVycm9yIHdh
cywgYW5kIG1hcmsgdGhlIFVSTCBhcyBpbnZhbGlkIGJ5IHJldHVybmluZyBmYWxzZS4KLSAgICAg
ICAgb3V0cHV0LmFwcGVuZCgnOicpOwotICAgICAgICBvdXRwdXRQb3J0Q29tcG9uZW50LnNldEJl
Z2luKG91dHB1dC5sZW5ndGgoKSk7Ci0gICAgICAgIEFwcGVuZEludmFsaWROYXJyb3dTdHJpbmco
c3BlYywgcG9ydC5iZWdpbigpLCBwb3J0LmVuZCgpLCBvdXRwdXQpOwotICAgICAgICBvdXRwdXRQ
b3J0Q29tcG9uZW50LnNldExlbmd0aChvdXRwdXQubGVuZ3RoKCkgLSBvdXRwdXRQb3J0Q29tcG9u
ZW50LmJlZ2luKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gQ29u
dmVydCBwb3J0IG51bWJlciBiYWNrIHRvIGFuIGludGVnZXIuIE1heCBwb3J0IHZhbHVlIGlzIDUg
ZGlnaXRzLCBhbmQKLSAgICAvLyB0aGUgUGFyc2VkOjpFeHRyYWN0UG9ydCB3aWxsIGhhdmUgbWFk
ZSBzdXJlIHRoZSBpbnRlZ2VyIGlzIGluIHJhbmdlLgotICAgIGNvbnN0IGludCBidWZmZXJTaXpl
ID0gNjsKLSAgICBjaGFyIGJ1ZmZlcltidWZmZXJTaXplXTsKLSAgICB3cml0ZVBvcnRJbnQoYnVm
ZmVyLCBidWZmZXJTaXplLCBwb3J0TnVtYmVyKTsKLQotICAgIC8vIEFwcGVuZCB0aGUgcG9ydCBu
dW1iZXIgdG8gdGhlIG91dHB1dCwgcHJlY2VlZGVkIGJ5IGEgY29sb24uCi0gICAgb3V0cHV0LmFw
cGVuZCgnOicpOwotICAgIG91dHB1dFBvcnRDb21wb25lbnQuc2V0QmVnaW4ob3V0cHV0Lmxlbmd0
aCgpKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ1ZmZlclNpemUgJiYgYnVmZmVyW2ldOyAr
K2kpCi0gICAgICAgIG91dHB1dC5hcHBlbmQoYnVmZmVyW2ldKTsKLQotICAgIG91dHB1dFBvcnRD
b21wb25lbnQuc2V0TGVuZ3RoKG91dHB1dC5sZW5ndGgoKSAtIG91dHB1dFBvcnRDb21wb25lbnQu
YmVnaW4oKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGUsIHR5cGVuYW1lIFVDSEFSPgotdm9pZCBkb0Nhbm9uaWNhbGl6ZUZyYWdtZW50KGNv
bnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgZnJhZ21lbnQsIFVS
TEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxDb21wb25lbnQmIG91dHB1dEZyYWdtZW50KQotewot
ICAgIGlmIChmcmFnbWVudC5sZW5ndGgoKSA8IDApIHsKLSAgICAgICAgLy8gQ29tbW9uIGNhc2Ug
b2Ygbm8gZnJhZ21lbnQuCi0gICAgICAgIG91dHB1dEZyYWdtZW50ID0gVVJMQ29tcG9uZW50KCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBBcHBlbmQgdGhlIGZyYWdtZW50IHNl
cGFyYXRvci4gTm90ZSB0aGF0IHdlIG5lZWQgdG8gZG8gdGhpcyBldmVuIHdoZW4gdGhlIGZyYWdt
ZW50Ci0gICAgLy8gaXMgZW1wdHkgYnV0IHByZXNlbnQuCi0gICAgb3V0cHV0LmFwcGVuZCgnIycp
OwotICAgIG91dHB1dEZyYWdtZW50LnNldEJlZ2luKG91dHB1dC5sZW5ndGgoKSk7Ci0KLSAgICAv
LyBOb3cgaXRlcmF0ZSB0aHJvdWdoIGFsbCB0aGUgY2hhcmFjdGVycywgY29udmVydGluZyB0byBV
VEYtOCBhbmQgdmFsaWRhdGluZy4KLSAgICBpbnQgZW5kID0gZnJhZ21lbnQuZW5kKCk7Ci0gICAg
Zm9yIChpbnQgaSA9IGZyYWdtZW50LmJlZ2luKCk7IGkgPCBlbmQ7ICsraSkgewotICAgICAgICBp
ZiAoIXNwZWNbaV0pIHsKLSAgICAgICAgICAgIC8vIElFIGp1c3Qgc3RyaXBzIE5VTExzLCBzbyB3
ZSBkbyB0b28uCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
c3RhdGljX2Nhc3Q8VUNIQVI+KHNwZWNbaV0pIDwgMHgyMCkgewotICAgICAgICAgICAgLy8gVW5s
aW5lIElFIHNlZW1zIHRvLCB3ZSBlc2NhcGUgY29udHJvbCBjaGFyYWN0ZXJzLiBUaGlzIHdpbGwg
cHJvYmFibHkKLSAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZmVyZW5jZSBmcmFnbWVudCB1bnVz
YWJsZSBvbiBhIHdlYiBwYWdlLCBidXQgcGVvcGxlCi0gICAgICAgICAgICAvLyBzaG91bGRuJ3Qg
YmUgdXNpbmcgY29udHJvbCBjaGFyYWN0ZXJzIGluIHRoZWlyIGFuY2hvciBuYW1lcy4KLSAgICAg
ICAgICAgIGFwcGVuZFVSTEVzY2FwZWRDaGFyYWN0ZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4oc3BlY1tpXSksIG91dHB1dCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RhdGljX2Nhc3Q8VUNI
QVI+KHNwZWNbaV0pIDwgMHg4MCkgewotICAgICAgICAgICAgLy8gTm9ybWFsIEFTQ0lJIGNoYXJh
Y3RlcnMgYXJlIGp1c3QgYXBwZW5kZWQuCi0gICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHN0YXRp
Y19jYXN0PGNoYXI+KHNwZWNbaV0pKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8v
IE5vbi1BU0NJSSBjaGFyYWN0ZXJzIGFyZSBhcHBlbmRlZCB1bmVzY2FwZWQsIGJ1dCBvbmx5IHdo
ZW4gdGhleSBhcmUKLSAgICAgICAgICAgIC8vIHZhbGlkLiBJbnZhbGlkIFVuaWNvZGUgY2hhcmFj
dGVycyBhcmUgcmVwbGFjZWQgd2l0aCB0aGUgImludmFsaWQKLSAgICAgICAgICAgIC8vIGNoYXJh
Y3RlciIgYXMgSUUgc2VlbXMgdG8gKHJlYWRVVEZDaGFyIHB1dHMgdGhlIHVuaWNvZGUgcmVwbGFj
ZW1lbnQKLSAgICAgICAgICAgIC8vIGNoYXJhY3RlciBpbiB0aGUgb3V0cHV0IG9uIGZhaWx1cmUg
Zm9yIHVzKS4KLSAgICAgICAgICAgIHVuc2lnbmVkIGNvZGVQb2ludDsKLSAgICAgICAgICAgIHJl
YWRVVEZDaGFyKHNwZWMsICZpLCBlbmQsICZjb2RlUG9pbnQpOwotICAgICAgICAgICAgQXBwZW5k
VVRGOFZhbHVlKGNvZGVQb2ludCwgb3V0cHV0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG91
dHB1dEZyYWdtZW50LnNldExlbmd0aChvdXRwdXQubGVuZ3RoKCkgLSBvdXRwdXRGcmFnbWVudC5i
ZWdpbigpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UKLQotY29uc3QgY2hhciogcmVtb3ZlVVJMV2hp
dGVzcGFjZShjb25zdCBjaGFyKiBpbnB1dCwgaW50IGlucHV0TGVuZ3RoLCBVUkxCdWZmZXI8Y2hh
cj4mIGJ1ZmZlciwgaW50JiBvdXRwdXRMZW5ndGgpCi17Ci0gICAgcmV0dXJuIGRvUmVtb3ZlVVJM
V2hpdGVzcGFjZShpbnB1dCwgaW5wdXRMZW5ndGgsIGJ1ZmZlciwgb3V0cHV0TGVuZ3RoKTsKLX0K
LQotY29uc3QgVUNoYXIqIHJlbW92ZVVSTFdoaXRlc3BhY2UoY29uc3QgVUNoYXIqIGlucHV0LCBp
bnQgaW5wdXRMZW5ndGgsIFVSTEJ1ZmZlcjxVQ2hhcj4mIGJ1ZmZlciwgaW50JiBvdXRwdXRMZW5n
dGgpCi17Ci0gICAgcmV0dXJuIGRvUmVtb3ZlVVJMV2hpdGVzcGFjZShpbnB1dCwgaW5wdXRMZW5n
dGgsIGJ1ZmZlciwgb3V0cHV0TGVuZ3RoKTsKLX0KLQotY2hhciBjYW5vbmljYWxTY2hlbWVDaGFy
KFVDaGFyIGNoYXJhY3RlcikKLXsKLSAgICBpZiAoY2hhcmFjdGVyID49IDB4ODApCi0gICAgICAg
IHJldHVybiAwOyAvLyBOb24tQVNDSUkgaXMgbm90IHN1cHBvcnRlZCBieSBzY2hlbWVzLgotICAg
IHJldHVybiBrU2NoZW1lQ2Fub25pY2FsW2NoYXJhY3Rlcl07Ci19Ci0KLWJvb2wgY2Fub25pY2Fs
aXplU2NoZW1lKGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgc2NoZW1lLCBV
UkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMQ29tcG9uZW50JiBvdXRwdXRTY2hlbWUpCi17Ci0g
ICAgcmV0dXJuIGRvU2NoZW1lPGNoYXIsIHVuc2lnbmVkIGNoYXI+KHNwZWMsIHNjaGVtZSwgb3V0
cHV0LCBvdXRwdXRTY2hlbWUpOwotfQotCi1ib29sIGNhbm9uaWNhbGl6ZVNjaGVtZShjb25zdCBV
Q2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBzY2hlbWUsIFVSTEJ1ZmZlcjxjaGFyPiYg
b3V0cHV0LCBVUkxDb21wb25lbnQmIG91dHB1dFNjaGVtZSkKLXsKLSAgICByZXR1cm4gZG9TY2hl
bWU8VUNoYXIsIFVDaGFyPihzcGVjLCBzY2hlbWUsIG91dHB1dCwgb3V0cHV0U2NoZW1lKTsKLX0K
LQotYm9vbCBjYW5vbmljYWxpemVVc2VySW5mbyhjb25zdCBjaGFyKiB1c2VybmFtZVNvdXJjZSwg
Y29uc3QgVVJMQ29tcG9uZW50JiB1c2VybmFtZSwgY29uc3QgY2hhciogcGFzc3dvcmRTb3VyY2Us
IGNvbnN0IFVSTENvbXBvbmVudCYgcGFzc3dvcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxDb21wb25lbnQmIG91dHB1dFVzZXJuYW1lLCBV
UkxDb21wb25lbnQmIG91dHB1dFBhc3N3b3JkKQotewotICAgIHJldHVybiBkb1VzZXJJbmZvPGNo
YXIsIHVuc2lnbmVkIGNoYXI+KHVzZXJuYW1lU291cmNlLCB1c2VybmFtZSwgcGFzc3dvcmRTb3Vy
Y2UsIHBhc3N3b3JkLCBvdXRwdXQsIG91dHB1dFVzZXJuYW1lLCBvdXRwdXRQYXNzd29yZCk7Ci19
Ci0KLWJvb2wgY2Fub25pY2FsaXplVXNlckluZm8oY29uc3QgVUNoYXIqIHVzZXJuYW1lU291cmNl
LCBjb25zdCBVUkxDb21wb25lbnQmIHVzZXJuYW1lLCBjb25zdCBVQ2hhciogcGFzc3dvcmRTb3Vy
Y2UsIGNvbnN0IFVSTENvbXBvbmVudCYgcGFzc3dvcmQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxDb21wb25lbnQmIG91dHB1dFVzZXJuYW1l
LCBVUkxDb21wb25lbnQmIG91dHB1dFBhc3N3b3JkKQotewotICAgIHJldHVybiBkb1VzZXJJbmZv
PFVDaGFyLCBVQ2hhcj4odXNlcm5hbWVTb3VyY2UsIHVzZXJuYW1lLCBwYXNzd29yZFNvdXJjZSwg
cGFzc3dvcmQsIG91dHB1dCwgb3V0cHV0VXNlcm5hbWUsIG91dHB1dFBhc3N3b3JkKTsKLX0KLQot
Ym9vbCBjYW5vbmljYWxpemVQb3J0KGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVu
dCYgcG9ydCwgaW50IGRlZmF1bHRQb3J0Rm9yU2NoZW1lLAotICAgICAgICAgICAgICAgICAgICAg
IFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxDb21wb25lbnQmIG91dHB1dFBvcnRDb21wb25l
bnQpCi17Ci0gICAgcmV0dXJuIGRvUG9ydDxjaGFyLCB1bnNpZ25lZCBjaGFyPihzcGVjLCBwb3J0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFBvcnRGb3JT
Y2hlbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIG91
dHB1dFBvcnRDb21wb25lbnQpOwotfQotCi1ib29sIGNhbm9uaWNhbGl6ZVBvcnQoY29uc3QgVUNo
YXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcG9ydCwgaW50IGRlZmF1bHRQb3J0Rm9yU2No
ZW1lLAotICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxD
b21wb25lbnQmIG91dHB1dFBvcnRDb21wb25lbnQpCi17Ci0gICAgcmV0dXJuIGRvUG9ydDxVQ2hh
ciwgVUNoYXI+KHNwZWMsIHBvcnQsIGRlZmF1bHRQb3J0Rm9yU2NoZW1lLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRwdXQsIG91dHB1dFBvcnRDb21wb25lbnQpOwotfQotCi12
b2lkIGNhbm9uaWNhbGl6ZUZyYWdtZW50KGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBv
bmVudCYgcmVmLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMQ29tcG9uZW50JiBvdXRwdXRG
cmFnbWVudCkKLXsKLSAgICBkb0Nhbm9uaWNhbGl6ZUZyYWdtZW50PGNoYXIsIHVuc2lnbmVkIGNo
YXI+KHNwZWMsIHJlZiwgb3V0cHV0LCBvdXRwdXRGcmFnbWVudCk7Ci19Ci0KLXZvaWQgY2Fub25p
Y2FsaXplRnJhZ21lbnQoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcmVm
LCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMQ29tcG9uZW50JiBvdXRwdXRGcmFnbWVudCkK
LXsKLSAgICBkb0Nhbm9uaWNhbGl6ZUZyYWdtZW50PFVDaGFyLCBVQ2hhcj4oc3BlYywgcmVmLCBv
dXRwdXQsIG91dHB1dEZyYWdtZW50KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVVJMQ2Fub25pY2Fs
aXplcgotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uRmlsZXN5c3RlbXVybC5jcHAg
Yi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uRmlsZXN5c3RlbXVybC5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2MWJiYmVmNzZlZjlkNmJlNDJkNmEwMTcxZjA5NzRi
YTRlYWEyYTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbkZpbGVzeXN0ZW11cmwuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLS8vIEZ1bmN0aW9ucyBmb3IgY2Fub25pY2FsaXppbmcgImZpbGVzeXN0ZW06
ZmlsZToiIFVSTHMuCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJVUkxDYW5vbi5o
IgotCi0jaW5jbHVkZSAiUmF3VVJMQnVmZmVyLmgiCi0jaW5jbHVkZSAiVVJMQ2Fub25JbnRlcm5h
bC5oIgotI2luY2x1ZGUgIlVSTEZpbGUuaCIKLSNpbmNsdWRlICJVUkxQYXJzZUludGVybmFsLmgi
Ci0jaW5jbHVkZSAiVVJMVXRpbC5oIgotI2luY2x1ZGUgIlVSTFV0aWxJbnRlcm5hbC5oIgotCi0j
aWYgVVNFKFdURlVSTCkKLQotbmFtZXNwYWNlIFdURiB7Ci0KLW5hbWVzcGFjZSBVUkxDYW5vbmlj
YWxpemVyIHsKLQotbmFtZXNwYWNlIHsKLQotLy8gV2UgdXNlIHRoZSBVUkxDb21wb25lbnRTb3Vy
Y2UgZm9yIHRoZSBvdXRlciBVUkwsIGFzIGl0IGNhbiBoYXZlIHJlcGxhY2VtZW50cywKLS8vIHdo
ZXJlYXMgdGhlIGlubmVyX3VybCBjYW4ndCwgc28gaXQgdXNlcyBzcGVjLgotdGVtcGxhdGU8dHlw
ZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgVUNIQVI+Ci1ib29sIGRvQ2Fub25pY2FsaXpl
RmlsZVN5c3RlbVVSTChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50U291cmNlPENoYXJhY3RlclR5cGU+
JiBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdt
ZW50cyYgcGFyc2VkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMUXVlcnlD
aGFyc2V0Q29udmVydGVyKiBjaGFyc2V0Q29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBVUkxTZWdtZW50cyYgb3V0cHV0UGFyc2VkKQotewotICAgIC8vIGZpbGVz
eXN0ZW0gb25seSB1c2VzIHtzY2hlbWUsIHBhdGgsIHF1ZXJ5LCByZWZ9IC0tIGNsZWFyIHRoZSBy
ZXN0LgotICAgIG91dHB1dFBhcnNlZC51c2VybmFtZSA9IFVSTENvbXBvbmVudCgpOwotICAgIG91
dHB1dFBhcnNlZC5wYXNzd29yZCA9IFVSTENvbXBvbmVudCgpOwotICAgIG91dHB1dFBhcnNlZC5o
b3N0ID0gVVJMQ29tcG9uZW50KCk7Ci0gICAgb3V0cHV0UGFyc2VkLnBvcnQgPSBVUkxDb21wb25l
bnQoKTsKLQotICAgIGNvbnN0IFVSTFNlZ21lbnRzKiBpbm5lclBhcnNlZCA9IHBhcnNlZC5pbm5l
clVSTFNlZ21lbnRzKCk7Ci0gICAgVVJMU2VnbWVudHMgbmV3SW5uZXJQYXJzZWQ7Ci0KLSAgICAv
LyBTY2hlbWUgKGtub3duLCBzbyB3ZSBkb24ndCBib3RoZXIgcnVubmluZyBpdCB0aHJvdWdoIHRo
ZSBtb3JlCi0gICAgLy8gY29tcGxpY2F0ZWQgc2NoZW1lIGNhbm9uaWNhbGl6ZXIpLgotICAgIG91
dHB1dFBhcnNlZC5zY2hlbWUuc2V0QmVnaW4ob3V0cHV0Lmxlbmd0aCgpKTsKLSAgICBvdXRwdXQu
YXBwZW5kKCJmaWxlc3lzdGVtOiIsIDExKTsKLSAgICBvdXRwdXRQYXJzZWQuc2NoZW1lLnNldExl
bmd0aCgxMCk7Ci0KLSAgICBpZiAoIXBhcnNlZC5pbm5lclVSTFNlZ21lbnRzKCkgfHwgIXBhcnNl
ZC5pbm5lclVSTFNlZ21lbnRzKCktPnNjaGVtZS5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0gICAgaWYgKFVSTFV0aWxpdGllczo6
Q29tcGFyZVNjaGVtZUNvbXBvbmVudChzcGVjLCBpbm5lclBhcnNlZC0+c2NoZW1lLCBVUkxVdGls
aXRpZXM6OmtGaWxlU2NoZW1lKSkgewotICAgICAgICBuZXdJbm5lclBhcnNlZC5zY2hlbWUuc2V0
QmVnaW4ob3V0cHV0Lmxlbmd0aCgpKTsKLSAgICAgICAgb3V0cHV0LmFwcGVuZCgiZmlsZTovLyIs
IDcpOwotICAgICAgICBuZXdJbm5lclBhcnNlZC5zY2hlbWUuc2V0TGVuZ3RoKDQpOwotICAgICAg
ICBzdWNjZXNzICY9IENhbm9uaWNhbGl6ZVBhdGgoc3BlYywgaW5uZXJQYXJzZWQtPnBhdGgsIG91
dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdJbm5lclBhcnNl
ZC5wYXRoKTsKLSAgICB9IGVsc2UgaWYgKFVSTFV0aWxpdGllczo6aXNTdGFuZGFyZChzcGVjLCBp
bm5lclBhcnNlZC0+c2NoZW1lKSkgewotICAgICAgICBzdWNjZXNzID0KLSAgICAgICAgVVJMQ2Fu
b25pY2FsaXplcjo6Q2Fub25pY2FsaXplU3RhbmRhcmRVUkwoc3BlYywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkLmlubmVyVVJMU2VnbWVu
dHMoKS0+bGVuZ3RoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICpwYXJzZWQuaW5uZXJVUkxTZWdtZW50cygpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0Q29udmVydGVyLCBvdXRwdXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdJ
bm5lclBhcnNlZCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gVE9ETyhlcmljdSk6IFRoZSBV
UkwgaXMgd3JvbmcsIGJ1dCBzaG91bGQgd2UgdHJ5IHRvIG91dHB1dCBtb3JlIG9mIHdoYXQKLSAg
ICAgICAgLy8gd2Ugd2VyZSBnaXZlbj8gRWNob2luZyBiYWNrIGZpbGVzeXN0ZW06bWFpbHRvIGV0
Yy4gZG9lc24ndCBzZWVtIGFsbCB0aGF0IHVzZWZ1bC4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICAvLyBUaGUgZmlsZXN5c3RlbSB0eXBlIG11c3QgYmUgbW9yZSB0aGFuIGp1c3Qg
YSBsZWFkaW5nIHNsYXNoIGZvciB2YWxpZGl0eS4KLSAgICBzdWNjZXNzICY9IHBhcnNlZC5pbm5l
clVSTFNlZ21lbnRzKCktPnBhdGgubGVuZ3RoKCkgPiAxOwotCi0gICAgc3VjY2VzcyAmPSBDYW5v
bmljYWxpemVQYXRoKHNvdXJjZS5wYXRoLCBwYXJzZWQucGF0aCwgb3V0cHV0LCAmb3V0cHV0UGFy
c2VkLnBhdGgpOwotCi0gICAgLy8gSWdub3JlIGZhaWx1cmVzIGZvciBxdWVyeS9yZWYgc2luY2Ug
dGhlIFVSTCBjYW4gcHJvYmFibHkgc3RpbGwgYmUgbG9hZGVkLgotICAgIENhbm9uaWNhbGl6ZVF1
ZXJ5KHNvdXJjZS5xdWVyeSwgcGFyc2VkLnF1ZXJ5LCBjaGFyc2V0Q29udmVydGVyLCBvdXRwdXQs
ICZvdXRwdXRQYXJzZWQucXVlcnkpOwotICAgIGNhbm9uaWNhbGl6ZUZyYWdtZW50KHNvdXJjZS5y
ZWYsIHBhcnNlZC5mcmFnbWVudCwgb3V0cHV0LCBvdXRwdXRQYXJzZWQuZnJhZ21lbnQpOwotICAg
IGlmIChzdWNjZXNzKQotICAgICAgICBvdXRwdXRQYXJzZWQuc2V0SW5uZXJVUkxTZWdtZW50cyhu
ZXdJbm5lclBhcnNlZCk7Ci0KLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UKLQotYm9vbCBjYW5vbmljYWxpemVGaWxlU3lzdGVtVVJMKGNvbnN0IGNoYXIqIHNwZWMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMU2VnbWVudHMmIHBhcnNlZCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIq
IGNoYXJzZXRDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVm
ZmVyPGNoYXI+JiBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2Vn
bWVudHMmIG91dHB1dFBhcnNlZCkKLXsKLSAgICByZXR1cm4gZG9DYW5vbmljYWxpemVGaWxlU3lz
dGVtVVJMPGNoYXIsIHVuc2lnbmVkIGNoYXI+KHNwZWMsIFVSTENvbXBvbmVudFNvdXJjZTxjaGFy
PihzcGVjKSwgcGFyc2VkLCBjaGFyc2V0Q29udmVydGVyLCBvdXRwdXQsIG91dHB1dFBhcnNlZCk7
Ci19Ci0KLWJvb2wgY2Fub25pY2FsaXplRmlsZVN5c3RlbVVSTChjb25zdCBVQ2hhciogc3BlYywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2Vk
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRl
ciogY2hhcnNldENvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxC
dWZmZXI8Y2hhcj4mIG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxT
ZWdtZW50cyYgb3V0cHV0UGFyc2VkKQotewotICAgIHJldHVybiBkb0Nhbm9uaWNhbGl6ZUZpbGVT
eXN0ZW1VUkw8VUNoYXIsIFVDaGFyPihzcGVjLCBVUkxDb21wb25lbnRTb3VyY2U8VUNoYXI+KHNw
ZWMpLCBwYXJzZWQsIGNoYXJzZXRDb252ZXJ0ZXIsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKLX0K
LQotYm9vbCBSZXBsYWNlRmlsZVN5c3RlbVVSTChjb25zdCBjaGFyKiBiYXNlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUmVwbGFjZW1lbnRzPGNoYXI+JiByZXBsYWNlbWVudHMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciogY2hh
cnNldENvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+
JiBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQ
YXJzZWQpCi17Ci0gICAgVVJMQ29tcG9uZW50U291cmNlPGNoYXI+IHNvdXJjZShiYXNlKTsKLSAg
ICBVUkxTZWdtZW50cyBwYXJzZWQoYmFzZVBhcnNlZCk7Ci0gICAgU2V0dXBPdmVycmlkZUNvbXBv
bmVudHMoYmFzZSwgcmVwbGFjZW1lbnRzLCAmc291cmNlLCAmcGFyc2VkKTsKLSAgICByZXR1cm4g
ZG9DYW5vbmljYWxpemVGaWxlU3lzdGVtVVJMPGNoYXIsIHVuc2lnbmVkIGNoYXI+KGJhc2UsIHNv
dXJjZSwgcGFyc2VkLCBjaGFyc2V0Q29udmVydGVyLCBvdXRwdXQsICpvdXRwdXRQYXJzZWQpOwot
fQotCi1ib29sIFJlcGxhY2VGaWxlU3lzdGVtVVJMKGNvbnN0IGNoYXIqIGJhc2UsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXBsYWNlbWVudHM8VUNoYXI+JiByZXBsYWNlbWVu
dHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciog
Y2hhcnNldENvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNo
YXI+JiBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRw
dXRQYXJzZWQpCi17Ci0gICAgUmF3VVJMQnVmZmVyPGNoYXI+IHV0Zjg7Ci0gICAgVVJMQ29tcG9u
ZW50U291cmNlPGNoYXI+IHNvdXJjZShiYXNlKTsKLSAgICBVUkxTZWdtZW50cyBwYXJzZWQoYmFz
ZVBhcnNlZCk7Ci0gICAgU2V0dXBVVEYxNk92ZXJyaWRlQ29tcG9uZW50cyhiYXNlLCByZXBsYWNl
bWVudHMsIHV0ZjgsICZzb3VyY2UsICZwYXJzZWQpOwotICAgIHJldHVybiBkb0Nhbm9uaWNhbGl6
ZUZpbGVTeXN0ZW1VUkw8Y2hhciwgdW5zaWduZWQgY2hhcj4oYmFzZSwgc291cmNlLCBwYXJzZWQs
IGNoYXJzZXRDb252ZXJ0ZXIsIG91dHB1dCwgKm91dHB1dFBhcnNlZCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAv
LyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5v
bkZpbGV1cmwuY3BwIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbkZpbGV1cmwuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2E5ZjZkZDFiZWY2YTljMmUzYjkxNzJk
NDlkNzA0MDdmZGRkMjJjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25GaWxldXJsLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDIyNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDcgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBGdW5jdGlvbnMgZm9yIGNhbm9uaWNhbGl6aW5nICJmaWxlOiIgVVJM
cy4KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlVSTENhbm9uLmgiCi0KLSNpbmNs
dWRlICJSYXdVUkxCdWZmZXIuaCIKLSNpbmNsdWRlICJVUkxDYW5vbkludGVybmFsLmgiCi0jaW5j
bHVkZSAiVVJMRmlsZS5oIgotI2luY2x1ZGUgIlVSTFBhcnNlSW50ZXJuYWwuaCIKLQotI2lmIFVT
RShXVEZVUkwpCi0KLW5hbWVzcGFjZSBXVEYgewotCi1uYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXpl
ciB7Ci0KLW5hbWVzcGFjZSB7Ci0KLSNpZiBPUyhXSU5ET1dTKQotCi0vLyBHaXZlbiBhIHBvaW50
ZXIgaW50byB0aGUgc3BlYywgdGhpcyBjb3BpZXMgYW5kIGNhbm9uaWNhbGl6ZXMgdGhlIGRyaXZl
Ci0vLyBsZXR0ZXIgYW5kIGNvbG9uIHRvIHRoZSBvdXRwdXQsIGlmIG9uZSBpcyBmb3VuZC4gSWYg
dGhlcmUgaXMgbm90IGEgZHJpdmUKLS8vIHNwZWMsIGl0IHdvbid0IGRvIGFueXRoaW5nLiBUaGUg
aW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIGluIHRoZSBpbnB1dAotLy8gc3BlYyBpcyByZXR1
cm5lZCAoYWZ0ZXIgdGhlIGNvbG9uIHdoZW4gYSBkcml2ZSBzcGVjIGlzIGZvdW5kLCB0aGUgYmVn
aW4KLS8vIG9mZnNldCBpZiBvbmUgaXMgbm90KS4KLXRlbXBsYXRlPHR5cGVuYW1lIENIQVI+Ci1p
bnQgRmlsZURvRHJpdmVTcGVjKGNvbnN0IENIQVIqIHNwZWMsIGludCBiZWdpbiwgaW50IGVuZCwg
VVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCi17Ci0gICAgLy8gVGhlIHBhdGggY291bGQgYmUgb25l
IG9mIHNldmVyYWwgdGhpbmdzOiAvZm9vL2JhciwgYzovZm9vL2JhciwgL2M6L2ZvbywKLSAgICAv
LyAod2l0aCBiYWNrc2xhc2hlcyBpbnN0ZWFkIG9mIHNsYXNoZXMgYXMgd2VsbCkuCi0gICAgaW50
IG51bVNsYXNoZXMgPSBVUkxQYXJzZXI6OmNvdW50Q29uc2VjdXRpdmVTbGFzaGVzKHNwZWMsIGJl
Z2luLCBlbmQpOwotICAgIGludCBhZnRlclNsYXNoZXMgPSBiZWdpbiArIG51bVNsYXNoZXM7Ci0K
LSAgICBpZiAoIVVSTFBhcnNlcjo6ZG9lc0JlZ2luV2luZG93c0RyaXZlU3BlYyhzcGVjLCBhZnRl
clNsYXNoZXMsIGVuZCkpCi0gICAgICAgIHJldHVybiBiZWdpbjsgLy8gSGF2ZW4ndCBjb25zdW1l
ZCBhbnkgY2hhcmFjdGVycwotCi0gICAgLy8gQSBkcml2ZSBzcGVjIGlzIHRoZSBzdGFydCBvZiBh
IHBhdGgsIHNvIHdlIG5lZWQgdG8gYWRkIGEgc2xhc2ggZm9yIHRoZQotICAgIC8vIGF1dGhvcml0
eSB0ZXJtaW5hdG9yICh0eXBpY2FsbHkgdGhlIHRoaXJkIHNsYXNoKS4KLSAgICBvdXRwdXQuYXBw
ZW5kKCcvJyk7Ci0KLSAgICAvLyBkb2VzQmVnaW5XaW5kb3dzRHJpdmVTcGVjIHdpbGwgZW5zdXJl
IHRoYXQgdGhlIGRyaXZlIGxldHRlciBpcyB2YWxpZAotICAgIC8vIGFuZCB0aGF0IGl0IGlzIGZv
bGxvd2VkIGJ5IGEgY29sb24vcGlwZS4KLQotICAgIC8vIE5vcm1hbGl6ZSBXaW5kb3dzIGRyaXZl
IGxldHRlcnMgdG8gdXBwZXJjYXNlCi0gICAgaWYgKHNwZWNbYWZ0ZXJTbGFzaGVzXSA+PSAnYScg
JiYgc3BlY1thZnRlclNsYXNoZXNdIDw9ICd6JykKLSAgICAgICAgb3V0cHV0LmFwcGVuZChzcGVj
W2FmdGVyU2xhc2hlc10gLSAnYScgKyAnQScpOwotICAgIGVsc2UKLSAgICAgICAgb3V0cHV0LmFw
cGVuZChzdGF0aWNfY2FzdDxjaGFyPihzcGVjW2FmdGVyU2xhc2hlc10pKTsKLQotICAgIC8vIE5v
cm1hbGl6ZSB0aGUgY2hhcmFjdGVyIGZvbGxvd2luZyBpdCB0byBhIGNvbG9uIHJhdGhlciB0aGFu
IHBpcGUuCi0gICAgb3V0cHV0LmFwcGVuZCgnOicpOwotICAgIHJldHVybiBhZnRlclNsYXNoZXMg
KyAyOwotfQotCi0jZW5kaWYgLy8gT1MoV0lORE9XUykKLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZSwgdHlwZW5hbWUgVUNIQVI+Ci1ib29sIGRvRmlsZUNhbm9uaWNhbGl6ZVBhdGgo
Y29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBVUkxDb21wb25lbnQmIHBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJM
QnVmZmVyPGNoYXI+JiBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQ29t
cG9uZW50JiBvdXRwdXRQYXRoKQotewotICAgIC8vIENvcGllcyBhbmQgbm9ybWFsaXplcyB0aGUg
ImM6IiBhdCB0aGUgYmVnaW5uaW5nLCBpZiBwcmVzZW50LgotICAgIG91dHB1dFBhdGguc2V0QmVn
aW4ob3V0cHV0Lmxlbmd0aCgpKTsKLSAgICBpbnQgYWZ0ZXJEcml2ZTsKLSNpZiBPUyhXSU5ET1dT
KQotICAgIGFmdGVyRHJpdmUgPSBGaWxlRG9Ecml2ZVNwZWMoc3BlYywgcGF0aC5iZWdpbiwgcGF0
aC5lbmQoKSwgb3V0cHV0KTsKLSNlbHNlCi0gICAgYWZ0ZXJEcml2ZSA9IHBhdGguYmVnaW4oKTsK
LSNlbmRpZgotCi0gICAgLy8gQ29waWVzIHRoZSByZXN0IG9mIHRoZSBwYXRoLCBzdGFydGluZyBm
cm9tIHRoZSBzbGFzaCBmb2xsb3dpbmcgdGhlCi0gICAgLy8gZHJpdmUgY29sb24gKGlmIGFueSwg
V2luZG93cyBvbmx5KSwgb3IgdGhlIGZpcnN0IHNsYXNoIG9mIHRoZSBwYXRoLgotICAgIGJvb2wg
c3VjY2VzcyA9IHRydWU7Ci0gICAgaWYgKGFmdGVyRHJpdmUgPCBwYXRoLmVuZCgpKSB7Ci0gICAg
ICAgIC8vIFVzZSB0aGUgcmVndWxhciBwYXRoIGNhbm9uaWNhbGl6ZXIgdG8gY2Fub25pY2FsaXpl
IHRoZSByZXN0IG9mIHRoZQotICAgICAgICAvLyBwYXRoLiBHaXZlIGl0IGEgZmFrZSBvdXRwdXQg
Y29tcG9uZW50IHRvIHdyaXRlIGludG8uIERvQ2Fub25pY2FsaXplRmlsZQotICAgICAgICAvLyB3
aWxsIGNvbXB1dGUgdGhlIGZ1bGwgcGF0aCBjb21wb25lbnQuCi0gICAgICAgIFVSTENvbXBvbmVu
dCBzdWJQYXRoID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoYWZ0ZXJEcml2ZSwgcGF0aC5lbmQo
KSk7Ci0gICAgICAgIFVSTENvbXBvbmVudCBmYWtlT3V0cHV0UGF0aDsKLSAgICAgICAgc3VjY2Vz
cyA9IENhbm9uaWNhbGl6ZVBhdGgoc3BlYywgc3ViUGF0aCwgb3V0cHV0LCAmZmFrZU91dHB1dFBh
dGgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIE5vIGlucHV0IHBhdGgsIGNhbm9uaWNhbGl6
ZSB0byBhIHNsYXNoLgotICAgICAgICBvdXRwdXQuYXBwZW5kKCcvJyk7Ci0gICAgfQotCi0gICAg
b3V0cHV0UGF0aC5zZXRMZW5ndGgob3V0cHV0Lmxlbmd0aCgpIC0gb3V0cHV0UGF0aC5iZWdpbigp
KTsKLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZSwgdHlwZW5hbWUgVUNIQVI+Ci1ib29sIGRvQ2Fub25pY2FsaXplRmlsZVVSTChjb25zdCBV
UkxDb21wb25lbnRTb3VyY2U8Q2hhcmFjdGVyVHlwZT4mIHNvdXJjZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyYgb3V0cHV0UGFyc2VkKQotewotICAgIC8v
IFRoaW5ncyB3ZSBkb24ndCBzZXQgaW4gZmlsZTogVVJMcy4KLSAgICBvdXRwdXRQYXJzZWQudXNl
cm5hbWUgPSBVUkxDb21wb25lbnQoKTsKLSAgICBvdXRwdXRQYXJzZWQucGFzc3dvcmQgPSBVUkxD
b21wb25lbnQoKTsKLSAgICBvdXRwdXRQYXJzZWQucG9ydCA9IFVSTENvbXBvbmVudCgpOwotCi0g
ICAgLy8gU2NoZW1lIChrbm93biwgc28gd2UgZG9uJ3QgYm90aGVyIHJ1bm5pbmcgaXQgdGhyb3Vn
aCB0aGUgbW9yZQotICAgIC8vIGNvbXBsaWNhdGVkIHNjaGVtZSBjYW5vbmljYWxpemVyKS4KLSAg
ICBvdXRwdXRQYXJzZWQuc2NoZW1lLnNldEJlZ2luKG91dHB1dC5sZW5ndGgoKSk7Ci0gICAgb3V0
cHV0LmFwcGVuZCgiZmlsZTovLyIsIDcpOwotICAgIG91dHB1dFBhcnNlZC5zY2hlbWUuc2V0TGVu
Z3RoKDQpOwotCi0gICAgLy8gQXBwZW5kIHRoZSBob3N0LiBGb3IgbWFueSBmaWxlIFVSTHMsIHRo
aXMgd2lsbCBiZSBlbXB0eS4gRm9yIFVOQywgdGhpcwotICAgIC8vIHdpbGwgYmUgcHJlc2VudC4K
LSAgICAvLyBUT0RPKGJyZXR0dykgVGhpcyBkb2Vzbid0IGRvIGFueSBjaGVja2luZyBmb3IgaG9z
dCBuYW1lIHZhbGlkaXR5LiBXZQotICAgIC8vIHNob3VsZCBwcm9iYWJseSBoYW5kbGUgdmFsaWRp
dHkgY2hlY2tpbmcgb2YgVU5DIGhvc3RzIGRpZmZlcmVudGx5IHRoYW4KLSAgICAvLyBmb3IgcmVn
dWxhciBJUCBob3N0cy4KLSAgICBib29sIHN1Y2Nlc3MgPSBjYW5vbmljYWxpemVIb3N0KHNvdXJj
ZS5ob3N0LCBwYXJzZWQuaG9zdCwgb3V0cHV0LCBvdXRwdXRQYXJzZWQuaG9zdCk7Ci0gICAgc3Vj
Y2VzcyAmPSBkb0ZpbGVDYW5vbmljYWxpemVQYXRoPENoYXJhY3RlclR5cGUsIFVDSEFSPihzb3Vy
Y2UucGF0aCwgcGFyc2VkLnBhdGgsIG91dHB1dCwgb3V0cHV0UGFyc2VkLnBhdGgpOwotICAgIENh
bm9uaWNhbGl6ZVF1ZXJ5KHNvdXJjZS5xdWVyeSwgcGFyc2VkLnF1ZXJ5LCBxdWVyeUNvbnZlcnRl
ciwgb3V0cHV0LCAmb3V0cHV0UGFyc2VkLnF1ZXJ5KTsKLQotICAgIC8vIElnbm9yZSBmYWlsdXJl
IGZvciByZWZzIHNpbmNlIHRoZSBVUkwgY2FuIHByb2JhYmx5IHN0aWxsIGJlIGxvYWRlZC4KLSAg
ICBjYW5vbmljYWxpemVGcmFnbWVudChzb3VyY2UucmVmLCBwYXJzZWQuZnJhZ21lbnQsIG91dHB1
dCwgb3V0cHV0UGFyc2VkLmZyYWdtZW50KTsKLQotICAgIHJldHVybiBzdWNjZXNzOwotfQotCi19
IC8vIG5hbWVzcGFjZQotCi1ib29sIENhbm9uaWNhbGl6ZUZpbGVVUkwoY29uc3QgY2hhciogc3Bl
YywKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgLyogc3BlY0xlbmd0aCAqLywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLAotICAgICAgICAg
ICAgICAgICAgICAgICAgIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCkKLXsKLSAgICBy
ZXR1cm4gZG9DYW5vbmljYWxpemVGaWxlVVJMPGNoYXIsIHVuc2lnbmVkIGNoYXI+KFVSTENvbXBv
bmVudFNvdXJjZTxjaGFyPihzcGVjKSwgcGFyc2VkLCBxdWVyeUNvbnZlcnRlciwgb3V0cHV0LCAq
b3V0cHV0UGFyc2VkKTsKLX0KLQotYm9vbCBDYW5vbmljYWxpemVGaWxlVVJMKGNvbnN0IFVDaGFy
KiBzcGVjLAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCAvKiBzcGVjTGVuZ3RoICovLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZl
cnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2VkKQotewot
ICAgIHJldHVybiBkb0Nhbm9uaWNhbGl6ZUZpbGVVUkw8VUNoYXIsIFVDaGFyPihVUkxDb21wb25l
bnRTb3VyY2U8VUNoYXI+KHNwZWMpLCBwYXJzZWQsIHF1ZXJ5Q29udmVydGVyLCBvdXRwdXQsICpv
dXRwdXRQYXJzZWQpOwotfQotCi1ib29sIEZpbGVDYW5vbmljYWxpemVQYXRoKGNvbnN0IGNoYXIq
IHNwZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0
aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCogb3V0cHV0UGF0aCkKLXsKLSAg
ICByZXR1cm4gZG9GaWxlQ2Fub25pY2FsaXplUGF0aDxjaGFyLCB1bnNpZ25lZCBjaGFyPihzcGVj
LCBwYXRoLCBvdXRwdXQsICpvdXRwdXRQYXRoKTsKLX0KLQotYm9vbCBGaWxlQ2Fub25pY2FsaXpl
UGF0aChjb25zdCBVQ2hhciogc3BlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VVJMQ29tcG9uZW50JiBwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8
Y2hhcj4mIG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9uZW50KiBv
dXRwdXRQYXRoKQotewotICAgIHJldHVybiBkb0ZpbGVDYW5vbmljYWxpemVQYXRoPFVDaGFyLCBV
Q2hhcj4oc3BlYywgcGF0aCwgb3V0cHV0LCAqb3V0cHV0UGF0aCk7Ci19Ci0KLWJvb2wgUmVwbGFj
ZUZpbGVVUkwoY29uc3QgY2hhciogYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJM
U2VnbWVudHMmIGJhc2VQYXJzZWQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlcGxhY2Vt
ZW50czxjaGFyPiYgcmVwbGFjZW1lbnRzLAotICAgICAgICAgICAgICAgICAgICBVUkxRdWVyeUNo
YXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICBVUkxC
dWZmZXI8Y2hhcj4mIG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91
dHB1dFBhcnNlZCkKLXsKLSAgICBVUkxDb21wb25lbnRTb3VyY2U8Y2hhcj4gc291cmNlKGJhc2Up
OwotICAgIFVSTFNlZ21lbnRzIHBhcnNlZChiYXNlUGFyc2VkKTsKLSAgICBTZXR1cE92ZXJyaWRl
Q29tcG9uZW50cyhiYXNlLCByZXBsYWNlbWVudHMsICZzb3VyY2UsICZwYXJzZWQpOwotICAgIHJl
dHVybiBkb0Nhbm9uaWNhbGl6ZUZpbGVVUkw8Y2hhciwgdW5zaWduZWQgY2hhcj4oc291cmNlLCBw
YXJzZWQsIHF1ZXJ5Q29udmVydGVyLCBvdXRwdXQsICpvdXRwdXRQYXJzZWQpOwotfQotCi1ib29s
IFJlcGxhY2VGaWxlVVJMKGNvbnN0IGNoYXIqIGJhc2UsCi0gICAgICAgICAgICAgICAgICAgIGNv
bnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBS
ZXBsYWNlbWVudHM8VUNoYXI+JiByZXBsYWNlbWVudHMsCi0gICAgICAgICAgICAgICAgICAgIFVS
TFF1ZXJ5Q2hhcnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAg
ICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICBVUkxTZWdt
ZW50cyogb3V0cHV0UGFyc2VkKQotewotICAgIFJhd1VSTEJ1ZmZlcjxjaGFyPiB1dGY4OwotICAg
IFVSTENvbXBvbmVudFNvdXJjZTxjaGFyPiBzb3VyY2UoYmFzZSk7Ci0gICAgVVJMU2VnbWVudHMg
cGFyc2VkKGJhc2VQYXJzZWQpOwotICAgIFNldHVwVVRGMTZPdmVycmlkZUNvbXBvbmVudHMoYmFz
ZSwgcmVwbGFjZW1lbnRzLCB1dGY4LCAmc291cmNlLCAmcGFyc2VkKTsKLSAgICByZXR1cm4gZG9D
YW5vbmljYWxpemVGaWxlVVJMPGNoYXIsIHVuc2lnbmVkIGNoYXI+KHNvdXJjZSwgcGFyc2VkLCBx
dWVyeUNvbnZlcnRlciwgb3V0cHV0LCAqb3V0cHV0UGFyc2VkKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgVVJMQ2Fub25pY2FsaXplcgotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFVT
RShXVEZVUkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uSG9z
dC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uSG9zdC5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlYTJmOTkwNmQ2NGYxYWU0NDRlZDBkMjk3OTMxYzYzMDY4
NGViOWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbkhvc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MzgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwNyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJVUkxDYW5vbi5oIgotCi0jaW5jbHVkZSAi
UmF3VVJMQnVmZmVyLmgiCi0jaW5jbHVkZSAiVVJMQ2Fub25JbnRlcm5hbC5oIgotCi0jaWYgVVNF
KFdURlVSTCkKLQotbmFtZXNwYWNlIFdURiB7Ci0KLW5hbWVzcGFjZSBVUkxDYW5vbmljYWxpemVy
IHsKLQotbmFtZXNwYWNlIHsKLQotLy8gRm9yIHJlZmVyZW5jZSwgaGVyZSdzIHdoYXQgSUUgc3Vw
cG9ydHM6Ci0vLyBLZXk6IDAgKGRpc2FsbG93ZWQ6IGZhaWx1cmUgaWYgcHJlc2VudCBpbiB0aGUg
aW5wdXQpCi0vLyAgICAgICsgKGFsbG93ZWQgZWl0aGVyIGVzY2FwZWQgb3IgdW5lc2NhcGVkLCBh
bmQgdW5tb2RpZmllZCkKLS8vICAgICAgVSAoYWxsb3dlZCBlc2NhcGVkIG9yIHVuZXNjYXBlZCBi
dXQgYWx3YXlzIHVuZXNjYXBlZCBpZiBwcmVzZW50IGluCi0vLyAgICAgICAgIGVzY2FwZWQgZm9y
bSkKLS8vICAgICAgRSAoYWxsb3dlZCBlc2NhcGVkIG9yIHVuZXNjYXBlZCBidXQgYWx3YXlzIGVz
Y2FwZWQgaWYgcHJlc2VudCBpbgotLy8gICAgICAgICB1bmVzY2FwZWQgZm9ybSkKLS8vICAgICAg
JSAob25seSBhbGxvd2VkIGVzY2FwZWQgaW4gdGhlIGlucHV0LCB3aWxsIGJlIHVubW9kaWZpZWQp
LgotLy8gICAgICBJIGxlZnQgYmxhbmsgYWxwaGEgbnVtZXJpYyBjaGFyYWN0ZXJzLgotLy8KLS8v
ICAgIDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3IDA4IDA5IDBhIDBiIDBjIDBkIDBlIDBmCi0vLyAg
ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gMCAg
IDAgIEUgIEUgIEUgIEUgIEUgIEUgIEUgIEUgIEUgIEUgIEUgIEUgIEUgIEUgIEUKLS8vIDEgICBF
ICBFICBFICBFICBFICBFICBFICBFICBFICBFICBFICBFICBFICBFICBFICBFCi0vLyAyICAgRSAg
KyAgRSAgRSAgKyAgRSAgKyAgKyAgKyAgKyAgKyAgKyAgKyAgVSAgVSAgMAotLy8gMyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICUgICUgIEUgICsgIEUgIDAgIDwtLSBUaG9zZSBhcmUg
IDogOyA8ID0gPiA/Ci0vLyA0ICAgJQotLy8gNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFUgIDAgIFUgIFUgIFUgIDwtLSBUaG9zZSBhcmUgIFsgXCBdIF4gXwotLy8gNiAgIEUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwtLSBUaGF0J3Mg
IGAKLS8vIDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFICBFICBFICBVICBF
ICA8LS0gVGhvc2UgYXJlIHsgfCB9IH4gKFVOUFJJTlRBQkxFKQotLy8KLS8vIE5PVEU6IEkgZGlk
bid0IGFjdHVhbGx5IHRlc3QgYWxsIHRoZSBjb250cm9sIGNoYXJhY3RlcnMuIFNvbWUgbWF5IGJl
Ci0vLyBkaXNhbGxvd2VkIGluIHRoZSBpbnB1dCwgYnV0IHRoZXkgYXJlIGFsbCBhY2NlcHRlZCBl
c2NhcGVkIGV4Y2VwdCBmb3IgMC4KLS8vIEkgYWxzbyBkaWRuJ3QgdGVzdCBpZiBjaGFyYWN0ZXJz
IGFmZmVjdGluZyBIVE1MIHBhcnNpbmcgYXJlIGFsbG93ZWQKLS8vIHVuZXNjYXBlZCwgZWcuICgi
KSBvciAoIyksIHdoaWNoIHdvdWxkIGluZGljYXRlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhdGgu
Ci0vLyBTdXJwcmlzaW5nbHksIHNwYWNlIGlzIGFjY2VwdGVkIGluIHRoZSBpbnB1dCBhbmQgYWx3
YXlzIGVzY2FwZWQuCi0KLS8vIFRoaXMgdGFibGUgbGlzdHMgdGhlIGNhbm9uaWNhbCB2ZXJzaW9u
IG9mIGFsbCBjaGFyYWN0ZXJzIHdlIGFsbG93IGluIHRoZQotLy8gaW5wdXQsIHdpdGggMCBpbmRp
Y2F0aW5nIGl0IGlzIGRpc2FsbG93ZWQuIFdlIHVzZSB0aGUgbWFnaWMga0VzY2FwZWRIb3N0Q2hh
cgotLy8gdmFsdWUgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIGNoYXJhY3RlciBzaG91bGQgYmUgZXNj
YXBlZC4gV2UgYXJlIGEgbGl0dGxlIG1vcmUKLS8vIHJlc3RyaWN0aXZlIHRoYW4gSUUsIGJ1dCBs
ZXNzIHJlc3RyaWN0aXZlIHRoYW4gRmlyZWZveC4KLS8vCi0vLyBOb3RlIHRoYXQgd2UgZGlzYWxs
b3cgdGhlICUgY2hhcmFjdGVyLiBXZSB3aWxsIGFsbG93IGl0IHdoZW4gcGFydCBvZiBhbgotLy8g
ZXNjYXBlIHNlcXVlbmNlLCBvZiBjb3Vyc2UsIGJ1dCB0aGlzIGRpc2FsbG93cyAiJTI1Ii4gRXZl
biB0aG91Z2ggSUUgYWxsb3dzCi0vLyBpdCwgYWxsb3dpbmcgaXQgd291bGQgcHV0IHVzIGluIGEg
ZnVubnkgc3RhdGUuIElmIHRoZXJlIHdhcyBhbiBpbnZhbGlkCi0vLyBlc2NhcGUgc2VxdWVuY2Ug
bGlrZSAiJXp6Iiwgd2UnbGwgYWRkICIlMjV6eiIgdG8gdGhlIG91dHB1dCBhbmQgZmFpbC4KLS8v
IEFsbG93aW5nIHBlcmNlbnRzIG1lYW5zIHdlJ2xsIHN1Y2NlZWQgYSBzZWNvbmQgdGltZSwgc28g
dmFsaWRpdHkgd291bGQgY2hhbmdlCi0vLyBiYXNlZCBvbiBob3cgbWFueSB0aW1lcyB5b3UgcnVu
IHRoZSBjYW5vbmljYWxpemVyLiBXZSBwcmVmZXIgdG8gYWx3YXlzIHJlcG9ydAotLy8gdGhlIHNh
bWUgdmFpbGlkaXR5LCBzbyByZWplY3QgdGhpcy4KLWNvbnN0IHVuc2lnbmVkIGNoYXIga0VzYyA9
IDB4ZmY7Ci1jb25zdCB1bnNpZ25lZCBjaGFyIGtIb3N0Q2hhckxvb2t1cFsweDgwXSA9IHsKLSAg
ICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICAgIDAsCi0vLyAgJyAnICAgISAgICAgIiAgICAgIyAgICAgJCAgICAg
JSAgICAgJiAgICAgJyAgICAgKCAgICAgKSAgICAgKiAgICAgKyAgICAgLCAgICAgLSAgICAgLiAg
ICAgLwotICAgIGtFc2MsIGtFc2MsIGtFc2MsIGtFc2MsIGtFc2MsICAgMCwgIGtFc2MsIGtFc2Ms
IGtFc2MsIGtFc2MsIGtFc2MsICAnKycsIGtFc2MsICAnLScsICAnLicsICAgMCwKLS8vICAgMCAg
ICAxICAgIDIgICAgMyAgICA0ICAgIDUgICAgNiAgICA3ICAgIDggICAgOSAgICA6ICAgIDsgICAg
PCAgICA9ICAgID4gICAgPwotICAgICcwJywgICcxJywgICcyJywgICczJywgICc0JywgICc1Jywg
ICc2JywgICc3JywgICc4JywgICc5JywgICc6JywgICAwICwga0VzYywga0VzYywga0VzYywgICAw
ICwKLS8vICAgQCAgICAgIEEgICAgIEIgICAgIEMgICAgIEQgICAgIEUgICAgIEYgICAgIEcgICAg
IEggICAgIEkgICAgIEogICAgIEsgICAgIEwgICAgIE0gICAgIE4gICAgIE8KLSAgICBrRXNjLCAg
J2EnLCAgJ2InLCAgJ2MnLCAgJ2QnLCAgJ2UnLCAgJ2YnLCAgJ2cnLCAgJ2gnLCAgJ2knLCAgJ2on
LCAgJ2snLCAgJ2wnLCAgJ20nLCAgJ24nLCAgJ28nLAotLy8gICBQICAgICBRICAgICBSICAgICBT
ICAgICBUICAgICBVICAgICBWICAgICBXICAgICBYICAgICBZICAgICBaICAgICBbICAgICBcICAg
ICBdICAgICBeICAgICBfCi0gICAgJ3AnLCAgJ3EnLCAgJ3InLCAgJ3MnLCAgJ3QnLCAgJ3UnLCAg
J3YnLCAgJ3cnLCAgJ3gnLCAgJ3knLCAgJ3onLCAgJ1snLCAgIDAgLCAgJ10nLCAgIDAgLCAgJ18n
LAotLy8gICBgICAgICAgYSAgICAgYiAgICAgYyAgICAgZCAgICAgZSAgICAgZiAgICAgZyAgICAg
aCAgICAgaSAgICAgaiAgICAgayAgICAgbCAgICAgbSAgICAgbiAgICAgbwotICAgIGtFc2MsICAn
YScsICAnYicsICAnYycsICAnZCcsICAnZScsICAnZicsICAnZycsICAnaCcsICAnaScsICAnaics
ICAnaycsICAnbCcsICAnbScsICAnbicsICAnbycsCi0vLyAgIHAgICAgIHEgICAgIHIgICAgIHMg
ICAgIHQgICAgIHUgICAgIHYgICAgIHcgICAgIHggICAgIHkgICAgIHogICAgIHsgICAgIHwgICAg
IH0gICAgIH4KLSAgICAncCcsICAncScsICAncicsICAncycsICAndCcsICAndScsICAndicsICAn
dycsICAneCcsICAneScsICAneicsIGtFc2MsIGtFc2MsIGtFc2MsICAgMCAsICAgMCB9OwotCi10
eXBlZGVmIFJhd1VSTEJ1ZmZlcjxjaGFyPiBTdGFja0J1ZmZlcjsKLXR5cGVkZWYgUmF3VVJMQnVm
ZmVyPFVDaGFyPiBTdGFja0J1ZmZlclc7Ci0KLS8vIFNjYW5zIGEgaG9zdCBuYW1lIGFuZCBmaWxs
cyBpbiB0aGUgb3V0cHV0IGZsYWdzIGFjY29yZGluZyB0byB3aGF0IHdlIGZpbmQuCi0vLyB8aGFz
Tm9uQVNDSUl8IHdpbGwgYmUgdHJ1ZSBpZiB0aGVyZSBhcmUgYW55IG5vbi03LWJpdCBjaGFyYWN0
ZXJzLCBhbmQKLS8vIHxoYXNFc2NhcGVkfCB3aWxsIGJlIHRydWUgaWYgdGhlcmUgaXMgYSBwZXJj
ZW50IHNpZ24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBVQ0hB
Uj4KLXZvaWQgc2Nhbkhvc3RuYW1lKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVS
TENvbXBvbmVudCYgaG9zdCwgYm9vbCYgaGFzTm9uQVNDSUksIGJvb2wmIGhhc0VzY2FwZWQpCi17
Ci0gICAgaW50IGVuZCA9IGhvc3QuZW5kKCk7Ci0gICAgaGFzTm9uQVNDSUkgPSBmYWxzZTsKLSAg
ICBoYXNFc2NhcGVkID0gZmFsc2U7Ci0gICAgZm9yIChpbnQgaSA9IGhvc3QuYmVnaW4oKTsgaSA8
IGVuZDsgKytpKSB7Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxVQ0hBUj4oc3BlY1tpXSkgPj0g
MHg4MCkKLSAgICAgICAgICAgIGhhc05vbkFTQ0lJID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAo
c3BlY1tpXSA9PSAnJScpCi0gICAgICAgICAgICBoYXNFc2NhcGVkID0gdHJ1ZTsKLSAgICB9Ci19
Ci0KLS8vIENhbm9uaWNhbGl6ZXMgYSBob3N0IG5hbWUgdGhhdCBpcyBlbnRpcmVseSA4LWJpdCBj
aGFyYWN0ZXJzIChldmVuIHRob3VnaAotLy8gdGhlIHR5cGUgaG9sZGluZyB0aGVtIG1heSBiZSAx
NiBiaXRzLiBFc2NhcGVkIGNoYXJhY3RlcnMgd2lsbCBiZSB1bmVzY2FwZWQuCi0vLyBOb24tNy1i
aXQgY2hhcmFjdGVycyAoZm9yIGV4YW1wbGUsIFVURi04KSB3aWxsIGJlIHBhc3NlZCB1bmNoYW5n
ZWQuCi0vLwotLy8gVGhlIHwqaGFzTm9uQVNDSUl8IGZsYWcgd2lsbCBiZSB0cnVlIGlmIHRoZXJl
IGFyZSBub24tNy1iaXQgY2hhcmFjdGVycyBpbgotLy8gdGhlIG91dHB1dC4KLS8vCi0vLyBUaGlz
IGZ1bmN0aW9uIGlzIHVzZWQgaW4gdHdvIHNpdHVhdGlvbnM6Ci0vLwotLy8gICogV2hlbiB0aGUg
Y2FsbGVyIGtub3dzIHRoZXJlIGlzIG5vIG5vbi1BU0NJSSBvciBwZXJjZW50IGVzY2FwZWQKLS8v
ICAgIGNoYXJhY3RlcnMuIFRoaXMgaXMgd2hhdCBEb0hvc3QgZG9lcy4gVGhlIHJlc3VsdCB3aWxs
IGJlIGEgY29tcGxldGVseQotLy8gICAgY2Fub25pY2FsaXplZCBob3N0IHNpbmNlIHdlIGtub3cg
bm90aGluZyB3ZWlyZCBjYW4gaGFwcGVuIChlc2NhcGVkCi0vLyAgICBjaGFyYWN0ZXJzIGNvdWxk
IGJlIHVuZXNjYXBlZCB0byBub24tNy1iaXQsIHNvIHRoZXkgaGF2ZSB0byBiZSB0cmVhdGVkCi0v
LyAgICB3aXRoIHN1c3BpY2lvbiBhdCB0aGlzIHBvaW50KS4gSXQgZG9lcyBub3QgdXNlIHRoZSB8
aGFzTm9uQVNDSUl8IGZsYWcuCi0vLwotLy8gICogV2hlbiB0aGUgY2FsbGVyIGhhcyBhbiA4LWJp
dCBzdHJpbmcgdGhhdCBtYXkgbmVlZCB1bmVzY2FwaW5nLgotLy8gICAgZG9Db21wbGV4SG9zdCBj
YWxscyB1cyB0aGlzIHNpdHVhdGlvbiB0byBkbyB1bmVzY2FwaW5nIGFuZCB2YWxpZGF0aW9uLgot
Ly8gICAgQWZ0ZXIgdGhpcywgaXQgbWF5IGRvIG90aGVyIElETiBvcGVyYXRpb25zIGRlcGVuZGlu
ZyBvbiB0aGUgdmFsdWUgb2YgdGhlCi0vLyAgICB8Kmhhc05vbkFTQ0lJfCBmbGFnLgotLy8KLS8v
IFRoZSByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIGlmIHRoZSBvdXRwdXQgaXMgYSBwb3RlbnRpYWxs
eSB2YWxpZCBob3N0IG5hbWUuCi10ZW1wbGF0ZTx0eXBlbmFtZSBJTkNIQVIsIHR5cGVuYW1lIE9V
VENIQVI+Ci1ib29sIGRvU2ltcGxlSG9zdChjb25zdCBJTkNIQVIqIGhvc3QsIGludCBob3N0TGVu
Z3RoLCBVUkxCdWZmZXI8T1VUQ0hBUj4mIG91dHB1dCwgYm9vbCYgaGFzTm9uQVNDSUkpCi17Ci0g
ICAgaGFzTm9uQVNDSUkgPSBmYWxzZTsKLQotICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBob3N0TGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdW5zaWduZWQg
c291cmNlID0gaG9zdFtpXTsKLSAgICAgICAgaWYgKHNvdXJjZSA9PSAnJScpIHsKLSAgICAgICAg
ICAgIC8vIFVuZXNjYXBlIGZpcnN0LCBpZiBwb3NzaWJsZS4KLSAgICAgICAgICAgIC8vIFNvdXJj
ZSB3aWxsIGJlIHVzZWQgb25seSBpZiBkZWNvZGUgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLgot
ICAgICAgICAgICAgaWYgKCFEZWNvZGVFc2NhcGVkKGhvc3QsICZpLCBob3N0TGVuZ3RoLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hh
cio+KCZzb3VyY2UpKSkgewotICAgICAgICAgICAgICAgIC8vIEludmFsaWQgZXNjYXBlZCBjaGFy
YWN0ZXIuIFRoZXJlIGlzIG5vdGhpbmcgdGhhdCBjYW4gbWFrZSB0aGlzCi0gICAgICAgICAgICAg
ICAgLy8gaG9zdCB2YWxpZC4gV2UgYXBwZW5kIGFuIGVzY2FwZWQgcGVyY2VudCBzbyB0aGUgVVJM
IGxvb2tzIHJlYXNvbmFibGUKLSAgICAgICAgICAgICAgICAvLyBhbmQgbWFyayBhcyBmYWlsZWQu
Ci0gICAgICAgICAgICAgICAgYXBwZW5kVVJMRXNjYXBlZENoYXJhY3RlcignJScsIG91dHB1dCk7
Ci0gICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNvdXJjZSA8IDB4
ODApIHsKLSAgICAgICAgICAgIC8vIFdlIGhhdmUgQVNDSUkgaW5wdXQsIHdlIGNhbiB1c2Ugb3Vy
IGxvb2t1cCB0YWJsZS4KLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVwbGFjZW1lbnQgPSBr
SG9zdENoYXJMb29rdXBbc291cmNlXTsKLSAgICAgICAgICAgIGlmICghcmVwbGFjZW1lbnQpIHsK
LSAgICAgICAgICAgICAgICAvLyBJbnZhbGlkIGNoYXJhY3RlciwgYWRkIGl0IGFzIHBlcmNlbnQt
ZXNjYXBlZCBhbmQgbWFyayBhcyBmYWlsZWQuCi0gICAgICAgICAgICAgICAgYXBwZW5kVVJMRXNj
YXBlZENoYXJhY3Rlcihzb3VyY2UsIG91dHB1dCk7Ci0gICAgICAgICAgICAgICAgc3VjY2VzcyA9
IGZhbHNlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChyZXBsYWNlbWVudCA9PSBrRXNjKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gVGhpcyBjaGFyYWN0ZXIgaXMgdmFsaWQgYnV0IHNob3VsZCBiZSBl
c2NhcGVkLgotICAgICAgICAgICAgICAgIGFwcGVuZFVSTEVzY2FwZWRDaGFyYWN0ZXIoc291cmNl
LCBvdXRwdXQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBDb21t
b24gY2FzZSwgdGhlIGdpdmVuIGNoYXJhY3RlciBpcyB2YWxpZCBpbiBhIGhvc3RuYW1lLCB0aGUg
bG9va3VwCi0gICAgICAgICAgICAgICAgLy8gdGFibGUgdGVsbHMgdXMgdGhlIGNhbm9uaWNhbCBy
ZXByZXNlbnRhdGlvbiBvZiB0aGF0IGNoYXJhY3RlciAobG93ZXIKLSAgICAgICAgICAgICAgICAv
LyBjYXNlZCkuCi0gICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChyZXBsYWNlbWVudCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBJdCdzIGEgbm9u
LWFzY2lpIGNoYXIuIEp1c3QgcHVzaCBpdCB0byB0aGUgb3V0cHV0LgotICAgICAgICAgICAgLy8g
SW4gY2FzZSB3aGVyZSB3ZSBoYXZlIFVDaGFyIGlucHV0LCBhbmQgY2hhciBvdXRwdXQgaXQncyBz
YWZlIHRvCi0gICAgICAgICAgICAvLyBjYXN0IFVDaGFyLT5jaGFyIG9ubHkgaWYgaW5wdXQgc3Ry
aW5nIHdhcyBjb252ZXJ0ZWQgdG8gQVNDSUkuCi0gICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHN0
YXRpY19jYXN0PE9VVENIQVI+KHNvdXJjZSkpOwotICAgICAgICAgICAgaGFzTm9uQVNDSUkgPSB0
cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLS8vIENh
bm9uaWNhbGl6ZXMgYSBob3N0IHRoYXQgcmVxdWlyZXMgSUROIGNvbnZlcnNpb24uIFJldHVybnMg
dHJ1ZSBvbiBzdWNjZXNzCi1ib29sIGRvSUROSG9zdChjb25zdCBVQ2hhciogc3JjLCBpbnQgc291
cmNlTGVuZ3RoLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKLXsKLSAgICAvLyBXZSBuZWVkIHRv
IGVzY2FwZSBVUkwgYmVmb3JlIGRvaW5nIElETiBjb252ZXJzaW9uLCBzaW5jZSBwdW5pY29kZSBz
dHJpbmdzCi0gICAgLy8gY2Fubm90IGJlIGVzY2FwZWQgYWZ0ZXIgdGhleSBhcmUgY3JlYXRlZC4K
LSAgICBSYXdVUkxCdWZmZXI8VUNoYXI+IHVybEVzY2FwZWRIb3N0OwotICAgIGJvb2wgaGFzTm9u
QVNDSUk7Ci0gICAgZG9TaW1wbGVIb3N0KHNyYywgc291cmNlTGVuZ3RoLCB1cmxFc2NhcGVkSG9z
dCwgaGFzTm9uQVNDSUkpOwotCi0gICAgU3RhY2tCdWZmZXJXIHdpZGVPdXRwdXQ7Ci0gICAgaWYg
KCFJRE5Ub0FTQ0lJKHVybEVzY2FwZWRIb3N0LmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAg
dXJsRXNjYXBlZEhvc3QubGVuZ3RoKCksCi0gICAgICAgICAgICAgICAgICAgIHdpZGVPdXRwdXQp
KSB7Ci0gICAgICAgIC8vIFNvbWUgZXJyb3IsIGdpdmUgdXAuIFRoaXMgd2lsbCB3cml0ZSBzb21l
IHJlYXNvbmFibGUgbG9va2luZwotICAgICAgICAvLyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3Ry
aW5nIHRvIHRoZSBvdXRwdXQuCi0gICAgICAgIEFwcGVuZEludmFsaWROYXJyb3dTdHJpbmcoc3Jj
LCAwLCBzb3VyY2VMZW5ndGgsIG91dHB1dCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICAvLyBOb3cgd2UgY2hlY2sgdGhlIEFTQ0lJIG91dHB1dCBsaWtlIGEgbm9ybWFsIGhv
c3QuIEl0IHdpbGwgYWxzbyBoYW5kbGUKLSAgICAvLyB1bmVzY2FwaW5nLiBBbHRob3VnaCB3ZSB1
bmVzY2FwZWQgZXZlcnl0aGluZyBiZWZvcmUgdGhpcyBmdW5jdGlvbiBjYWxsLCBpZgotICAgIC8v
IHNvbWVib2R5IGRvZXMgJTAwIGFzIGZ1bGx3aWR0aCwgSUNVIHdpbGwgY29udmVydCB0aGlzIHRv
IEFTQ0lJLgotICAgIGJvb2wgc3VjY2VzcyA9IGRvU2ltcGxlSG9zdCh3aWRlT3V0cHV0LmRhdGEo
KSwgd2lkZU91dHB1dC5sZW5ndGgoKSwgb3V0cHV0LCBoYXNOb25BU0NJSSk7Ci0gICAgQVNTRVJU
KCFoYXNOb25BU0NJSSk7Ci0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLS8vIDgtYml0IGNvbnZl
cnQgaG9zdCB0byBpdHMgQVNDSUkgdmVyc2lvbjogdGhpcyBjb252ZXJ0cyB0aGUgVVRGLTggaW5w
dXQgdG8KLS8vIFVURi0xNi4gVGhlIGhhc0VzY2FwZWQgZmxhZyBzaG91bGQgYmUgc2V0IGlmIHRo
ZSBpbnB1dCBzdHJpbmcgcmVxdWlyZXMKLS8vIHVuZXNjYXBpbmcuCi1ib29sIGRvQ29tcGxleEhv
c3QoY29uc3QgY2hhciogaG9zdCwgaW50IGhvc3RMZW5ndGgsIGJvb2wgaGFzTm9uQVNDSUksIGJv
b2wgaGFzRXNjYXBlZCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCi17Ci0gICAgLy8gU2F2ZSB0
aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgb3V0cHV0LiBXZSBtYXkgd3JpdGUgc3R1ZmYgYW5k
IHJld2luZCBpdAotICAgIC8vIGJlbG93LCBzbyB3ZSBuZWVkIHRvIGtub3cgd2hlcmUgdG8gcmV3
aW5kIHRvLgotICAgIGludCBiZWdpbkxlbmd0aCA9IG91dHB1dC5sZW5ndGgoKTsKLQotICAgIC8v
IFBvaW50cyB0byB0aGUgVVRGLTggZGF0YSB3ZSB3YW50IHRvIGNvbnZlcnQuIFRoaXMgd2lsbCBl
aXRoZXIgYmUgdGhlCi0gICAgLy8gaW5wdXQgb3IgdGhlIHVuZXNjYXBlZCB2ZXJzaW9uIHdyaXR0
ZW4gdG8gfG91dHB1dHwgaWYgbmVjZXNzYXJ5LgotICAgIGNvbnN0IGNoYXIqIHV0ZjhTb3VyY2U7
Ci0gICAgaW50IHV0ZjhTb3VyY2VMZW5ndGg7Ci0gICAgaWYgKGhhc0VzY2FwZWQpIHsKLSAgICAg
ICAgLy8gVW5lc2NhcGUgYmVmb3JlIGNvbnZlcnRpbmcgdG8gVVRGLTE2IGZvciBJRE4uIFdlIHdy
aXRlIHRoaXMgaW50byB0aGUKLSAgICAgICAgLy8gb3V0cHV0IGJlY2F1c2UgaXQgbW9zdCBsaWtl
bHkgZG9lcyBub3QgcmVxdWlyZSBJRE5pemF0aW9uLCBhbmQgd2UgY2FuCi0gICAgICAgIC8vIHNh
dmUgYW5vdGhlciBodWdlIHN0YWNrIGJ1ZmZlci4gSXQgd2lsbCBiZSByZXBsYWNlZCBiZWxvdyBp
ZiBpdCByZXF1aXJlcwotICAgICAgICAvLyBJRE4uIFRoaXMgd2lsbCBhbHNvIHVwZGF0ZSBvdXIg
bm9uLUFTQ0lJIGZsYWcgc28gd2Uga25vdyB3aGV0aGVyIHRoZQotICAgICAgICAvLyB1bmVzY2Fw
ZWQgaW5wdXQgcmVxdWlyZXMgSUROLgotICAgICAgICBpZiAoIWRvU2ltcGxlSG9zdChob3N0LCBo
b3N0TGVuZ3RoLCBvdXRwdXQsIGhhc05vbkFTQ0lJKSkgewotICAgICAgICAgICAgLy8gRXJyb3Ig
d2l0aCBzb21lIGVzY2FwZSBzZXF1ZW5jZS4gV2UnbGwgY2FsbCB0aGUgY3VycmVudCBvdXRwdXQK
LSAgICAgICAgICAgIC8vIGNvbXBsZXRlLiBkb1NpbXBsZUhvc3Qgd2lsbCBoYXZlIHdyaXR0ZW4g
c29tZSAicmVhc29uYWJsZSIgb3V0cHV0LgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gVW5lc2NhcGluZyBtYXkgaGF2ZSBsZWZ0IHVzIHdpdGggQVND
SUkgaW5wdXQsIGluIHdoaWNoIGNhc2UgdGhlCi0gICAgICAgIC8vIHVuZXNjYXBlZCB2ZXJzaW9u
IHdlIHdyb3RlIHRvIG91dHB1dCBpcyBjb21wbGV0ZS4KLSAgICAgICAgaWYgKCFoYXNOb25BU0NJ
SSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIC8vIFNhdmUgdGhlIHBvaW50
ZXIgaW50byB0aGUgZGF0YSB3YXMganVzdCBjb252ZXJ0ZWQgKGl0IG1heSBiZSBhcHBlbmRlZCB0
bwotICAgICAgICAvLyBvdGhlciBkYXRhIGluIHRoZSBvdXRwdXQgYnVmZmVyKS4KLSAgICAgICAg
dXRmOFNvdXJjZSA9ICZvdXRwdXQuZGF0YSgpW2JlZ2luTGVuZ3RoXTsKLSAgICAgICAgdXRmOFNv
dXJjZUxlbmd0aCA9IG91dHB1dC5sZW5ndGgoKSAtIGJlZ2luTGVuZ3RoOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gdW5lc2NhcGUsIHVzZSBpbnB1dCBmb3IgSURO
aXphdGlvbiBsYXRlci4gKFdlIGtub3cgdGhlCi0gICAgICAgIC8vIGlucHV0IGhhcyBub24tQVND
SUksIG9yIHRoZSBzaW1wbGUgdmVyc2lvbiB3b3VsZCBoYXZlIGJlZW4gY2FsbGVkCi0gICAgICAg
IC8vIGluc3RlYWQgb2YgdXMuKQotICAgICAgICB1dGY4U291cmNlID0gaG9zdDsKLSAgICAgICAg
dXRmOFNvdXJjZUxlbmd0aCA9IGhvc3RMZW5ndGg7Ci0gICAgfQotCi0gICAgLy8gTm9uLUFTQ0lJ
IGlucHV0IHJlcXVpcmVzIElETiwgY29udmVydCB0byBVVEYtMTYgYW5kIGRvIHRoZSBJRE4gY29u
dmVyc2lvbi4KLSAgICAvLyBBYm92ZSwgd2UgbWF5IGhhdmUgdXNlZCB0aGUgb3V0cHV0IHRvIHdy
aXRlIHRoZSB1bmVzY2FwZWQgdmFsdWVzIHRvLCBzbwotICAgIC8vIHdlIGhhdmUgdG8gcmV3aW5k
IGl0IHRvIHdoZXJlIHdlIHN0YXJ0ZWQgYWZ0ZXIgd2UgY29udmVydCBpdCB0byBVVEYtMTYuCi0g
ICAgU3RhY2tCdWZmZXJXIHV0ZjE2OwotICAgIGlmICghQ29udmVydFVURjhUb1VURjE2KHV0ZjhT
b3VyY2UsIHV0ZjhTb3VyY2VMZW5ndGgsIHV0ZjE2KSkgewotICAgICAgICAvLyBJbiB0aGlzIGVy
cm9yIGNhc2UsIHRoZSBpbnB1dCBtYXkgb3IgbWF5IG5vdCBiZSB0aGUgb3V0cHV0LgotICAgICAg
ICBTdGFja0J1ZmZlciB1dGY4OwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHV0ZjhTb3Vy
Y2VMZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHV0ZjguYXBwZW5kKHV0ZjhTb3VyY2VbaV0pOwot
ICAgICAgICBvdXRwdXQuc2V0TGVuZ3RoKGJlZ2luTGVuZ3RoKTsKLSAgICAgICAgQXBwZW5kSW52
YWxpZE5hcnJvd1N0cmluZyh1dGY4LmRhdGEoKSwgMCwgdXRmOC5sZW5ndGgoKSwgb3V0cHV0KTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBvdXRwdXQuc2V0TGVuZ3RoKGJlZ2lu
TGVuZ3RoKTsKLQotICAgIC8vIFRoaXMgd2lsbCBjYWxsIGRvU2ltcGxlSG9zdCB3aGljaCB3aWxs
IGRvIG5vcm1hbCBBU0NJSSBjYW5vbmljYWxpemF0aW9uCi0gICAgLy8gYW5kIGFsc28gY2hlY2sg
Zm9yIElQIGFkZHJlc3NlcyBpbiB0aGUgb3V0cHQuCi0gICAgcmV0dXJuIGRvSUROSG9zdCh1dGYx
Ni5kYXRhKCksIHV0ZjE2Lmxlbmd0aCgpLCBvdXRwdXQpOwotfQotCi0vLyBVVEYtMTYgY29udmVy
dCBob3N0IHRvIGl0cyBBU0NJSSB2ZXJzaW9uLiBUaGUgc2V0IHVwIGlzIGFscmVhZHkgcmVhZHkg
Zm9yCi0vLyB0aGUgYmFja2VuZCwgc28gd2UganVzdCBwYXNzIHRocm91Z2guIFRoZSBoYXNFc2Nh
cGVkIGZsYWcgc2hvdWxkIGJlIHNldCBpZgotLy8gdGhlIGlucHV0IHN0cmluZyByZXF1aXJlcyB1
bmVzY2FwaW5nLgotYm9vbCBkb0NvbXBsZXhIb3N0KGNvbnN0IFVDaGFyKiBob3N0LCBpbnQgaG9z
dExlbmd0aCwgYm9vbCBoYXNOb25BU0NJSSwgYm9vbCBoYXNFc2NhcGVkLCBVUkxCdWZmZXI8Y2hh
cj4mIG91dHB1dCkKLXsKLSAgICBpZiAoaGFzRXNjYXBlZCkgewotICAgICAgICAvLyBZaWtlcywg
d2UgaGF2ZSBlc2NhcGVkIGNoYXJhY3RlcnMgd2l0aCB3aWRlIGlucHV0LiBUaGUgZXNjYXBlZAot
ICAgICAgICAvLyBjaGFyYWN0ZXJzIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBVVEYtOC4gVG8g
c29sdmUgdGhpcyBwcm9ibGVtLAotICAgICAgICAvLyB3ZSBjb252ZXJ0IHRvIFVURi04LCB1bmVz
Y2FwZSwgdGhlbiBjb252ZXJ0IGJhY2sgdG8gVVRGLTE2IGZvciBJRE4uCi0gICAgICAgIC8vCi0g
ICAgICAgIC8vIFdlIGRvbid0IGJvdGhlciB0byBvcHRpbWl6ZSB0aGUgY29udmVyc2lvbiBpbiB0
aGUgQVNDSUkgY2FzZSAod2hpY2gKLSAgICAgICAgLy8gKmNvdWxkKiBqdXN0IGJlIGEgY29weSkg
YW5kIHVzZSB0aGUgVVRGLTggcGF0aCwgYmVjYXVzZSBpdCBzaG91bGQgYmUKLSAgICAgICAgLy8g
dmVyeSByYXJlIHRoYXQgaG9zdCBuYW1lcyBoYXZlIGVzY2FwZWQgY2hhcmFjdGVycywgYW5kIGl0
IGlzIHJlbGF0aXZlbHkKLSAgICAgICAgLy8gZmFzdCB0byBkbyB0aGUgY29udmVyc2lvbiBhbnl3
YXkuCi0gICAgICAgIFN0YWNrQnVmZmVyIHV0Zjg7Ci0gICAgICAgIGlmICghQ29udmVydFVURjE2
VG9VVEY4KGhvc3QsIGhvc3RMZW5ndGgsIHV0ZjgpKSB7Ci0gICAgICAgICAgICBBcHBlbmRJbnZh
bGlkTmFycm93U3RyaW5nKGhvc3QsIDAsIGhvc3RMZW5ndGgsIG91dHB1dCk7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBPbmNlIHdlIGNvbnZlcnQg
dG8gVVRGLTgsIHdlIGNhbiB1c2UgdGhlIDgtYml0IHZlcnNpb24gb2YgdGhlIGNvbXBsZXgKLSAg
ICAgICAgLy8gaG9zdCBoYW5kbGluZyBjb2RlIGFib3ZlLgotICAgICAgICByZXR1cm4gZG9Db21w
bGV4SG9zdCh1dGY4LmRhdGEoKSwgdXRmOC5sZW5ndGgoKSwgaGFzTm9uQVNDSUksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhhc0VzY2FwZWQsIG91dHB1dCk7Ci0gICAgfQotCi0gICAg
Ly8gTm8gdW5lc2NhcGluZyBuZWNlc3NhcnksIHdlIGNhbiBzYWZlbHkgcGFzcyB0aGUgaW5wdXQg
dG8gSUNVLiBUaGlzCi0gICAgLy8gZnVuY3Rpb24gd2lsbCBvbmx5IGdldCBjYWxsZWQgaWYgd2Ug
ZWl0aGVyIGhhdmUgZXNjYXBlZCBvciBub24tYXNjaWkKLSAgICAvLyBpbnB1dCwgc28gaXQncyBz
YWZlIHRvIGp1c3QgdXNlIElDVSBub3cuIEV2ZW4gaWYgdGhlIGlucHV0IGlzIEFTQ0lJLAotICAg
IC8vIHRoaXMgZnVuY3Rpb24gd2lsbCBkbyB0aGUgcmlnaHQgdGhpbmcgKGp1c3Qgc2xvd2VyIHRo
YW4gd2UgY291bGQpLgotICAgIHJldHVybiBkb0lETkhvc3QoaG9zdCwgaG9zdExlbmd0aCwgb3V0
cHV0KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgVUNI
QVI+Ci12b2lkIGRvSG9zdChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21w
b25lbnQmIGhvc3QsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBDYW5vbkhvc3RJbmZvJiBob3N0
SW5mbykKLXsKLSAgICBpZiAoaG9zdC5sZW5ndGgoKSA8PSAwKSB7Ci0gICAgICAgIC8vIEVtcHR5
IGhvc3RzIGRvbid0IG5lZWQgYW55dGhpbmcuCi0gICAgICAgIGhvc3RJbmZvLmZhbWlseSA9IENh
bm9uSG9zdEluZm86Ok5FVVRSQUw7Ci0gICAgICAgIGhvc3RJbmZvLm91cHV0SG9zdCA9IFVSTENv
bXBvbmVudCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYm9vbCBoYXNOb25BU0NJ
STsKLSAgICBib29sIGhhc0VzY2FwZWQ7Ci0gICAgc2Nhbkhvc3RuYW1lPENoYXJhY3RlclR5cGUs
IFVDSEFSPihzcGVjLCBob3N0LCBoYXNOb25BU0NJSSwgaGFzRXNjYXBlZCk7Ci0KLSAgICAvLyBL
ZWVwIHRyYWNrIG9mIG91dHB1dCdzIGluaXRpYWwgbGVuZ3RoLCBzbyB3ZSBjYW4gcmV3aW5kIGxh
dGVyLgotICAgIGNvbnN0IGludCBvdXRwdXRCZWdpbiA9IG91dHB1dC5sZW5ndGgoKTsKLQotICAg
IGJvb2wgc3VjY2VzczsKLSAgICBpZiAoIWhhc05vbkFTQ0lJICYmICFoYXNFc2NhcGVkKSB7Ci0g
ICAgICAgIHN1Y2Nlc3MgPSBkb1NpbXBsZUhvc3QoJnNwZWNbaG9zdC5iZWdpbigpXSwgaG9zdC5s
ZW5ndGgoKSwgb3V0cHV0LCBoYXNOb25BU0NJSSk7Ci0gICAgICAgIEFTU0VSVCghaGFzTm9uQVND
SUkpOwotICAgIH0gZWxzZQotICAgICAgICBzdWNjZXNzID0gZG9Db21wbGV4SG9zdCgmc3BlY1to
b3N0LmJlZ2luKCldLCBob3N0Lmxlbmd0aCgpLCBoYXNOb25BU0NJSSwgaGFzRXNjYXBlZCwgb3V0
cHV0KTsKLQotICAgIGlmICghc3VjY2VzcykgewotICAgICAgICAvLyBDYW5vbmljYWxpemF0aW9u
IGZhaWxlZC4gU2V0IEJST0tFTiB0byBub3RpZnkgdGhlIGNhbGxlci4KLSAgICAgICAgaG9zdElu
Zm8uZmFtaWx5ID0gQ2Fub25Ib3N0SW5mbzo6QlJPS0VOOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IC8vIEFmdGVyIGFsbCB0aGUgb3RoZXIgY2Fub25pY2FsaXphdGlvbiwgY2hlY2sgaWYgd2UgZW5k
ZWQgdXAgd2l0aCBhbiBJUAotICAgICAgICAvLyBhZGRyZXNzLiBJUCBhZGRyZXNzZXMgYXJlIHNt
YWxsLCBzbyB3cml0aW5nIGludG8gdGhpcyB0ZW1wb3JhcnkgYnVmZmVyCi0gICAgICAgIC8vIHNo
b3VsZCBub3QgY2F1c2UgYW4gYWxsb2NhdGlvbi4KLSAgICAgICAgUmF3VVJMQnVmZmVyPGNoYXIs
IDY0PiBjYW5vbl9pcDsKLSAgICAgICAgY2Fub25pY2FsaXplSVBBZGRyZXNzKG91dHB1dC5kYXRh
KCksIFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKG91dHB1dEJlZ2luLCBvdXRwdXQubGVuZ3RoKCkp
LCBjYW5vbl9pcCwgaG9zdEluZm8pOwotCi0gICAgICAgIC8vIElmIHdlIGdvdCBhbiBJUHY0L0lQ
djYgYWRkcmVzcywgY29weSB0aGUgY2Fub25pY2FsIGZvcm0gYmFjayB0byB0aGUKLSAgICAgICAg
Ly8gcmVhbCBidWZmZXIuIE90aGVyd2lzZSwgaXQncyBhIGhvc3RuYW1lIG9yIGJyb2tlbiBJUCwg
aW4gd2hpY2ggY2FzZQotICAgICAgICAvLyB3ZSBqdXN0IGxlYXZlIGl0IGluIHBsYWNlLgotICAg
ICAgICBpZiAoaG9zdEluZm8uSXNJUEFkZHJlc3MoKSkgewotICAgICAgICAgICAgb3V0cHV0LnNl
dExlbmd0aChvdXRwdXRCZWdpbik7Ci0gICAgICAgICAgICBvdXRwdXQuYXBwZW5kKGNhbm9uX2lw
LmRhdGEoKSwgY2Fub25faXAubGVuZ3RoKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaG9z
dEluZm8ub3VwdXRIb3N0ID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2Uob3V0cHV0QmVnaW4sIG91
dHB1dC5sZW5ndGgoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLWJvb2wgY2Fub25pY2FsaXpl
SG9zdChjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGhvc3QsIFVSTEJ1ZmZl
cjxjaGFyPiYgb3V0cHV0LCBVUkxDb21wb25lbnQmIG91cHV0SG9zdCkKLXsKLSAgICBDYW5vbkhv
c3RJbmZvIGhvc3RJbmZvOwotICAgIGRvSG9zdDxjaGFyLCB1bnNpZ25lZCBjaGFyPihzcGVjLCBo
b3N0LCBvdXRwdXQsIGhvc3RJbmZvKTsKLSAgICBvdXB1dEhvc3QgPSBob3N0SW5mby5vdXB1dEhv
c3Q7Ci0gICAgcmV0dXJuIChob3N0SW5mby5mYW1pbHkgIT0gQ2Fub25Ib3N0SW5mbzo6QlJPS0VO
KTsKLX0KLQotYm9vbCBjYW5vbmljYWxpemVIb3N0KGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBV
UkxDb21wb25lbnQmIGhvc3QsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxDb21wb25lbnQm
IG91cHV0SG9zdCkKLXsKLSAgICBDYW5vbkhvc3RJbmZvIGhvc3RJbmZvOwotICAgIGRvSG9zdDxV
Q2hhciwgVUNoYXI+KHNwZWMsIGhvc3QsIG91dHB1dCwgaG9zdEluZm8pOwotICAgIG91cHV0SG9z
dCA9IGhvc3RJbmZvLm91cHV0SG9zdDsKLSAgICByZXR1cm4gKGhvc3RJbmZvLmZhbWlseSAhPSBD
YW5vbkhvc3RJbmZvOjpCUk9LRU4pOwotfQotCi19IC8vIG5hbWVzcGFjZSBVUkxDYW5vbmljYWxp
emVyCi0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gVVNFKFdURlVSTCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25JQ1UuY3BwIGIvU291cmNlL1dU
Ri93dGYvdXJsL3NyYy9VUkxDYW5vbklDVS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGU2MWZhNzA3YWFkNTczZDFjNjE0ZWZlMTY2YjAxMDlkNzg4MTgzM2EuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvdXJsL3Ny
Yy9VUkxDYW5vbklDVS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxODcgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gSUNVIGludGVncmF0aW9u
IGZ1bmN0aW9ucy4KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKFdURlVSTCkKLQot
I2luY2x1ZGUgIlVSTENhbm9uSW50ZXJuYWwuaCIgLy8gZm9yIF9pdG9hX3MKLSNpbmNsdWRlIDxz
dGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx1bmljb2RlL3VjbnYuaD4K
LSNpbmNsdWRlIDx1bmljb2RlL3VjbnZfY2IuaD4KLSNpbmNsdWRlIDx1bmljb2RlL3VpZG5hLmg+
Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1uYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplciB7Ci0KLW5h
bWVzcGFjZSB7Ci0KLS8vIENhbGxlZCB3aGVuIGNvbnZlcnRpbmcgYSBjaGFyYWN0ZXIgdGhhdCBj
YW4gbm90IGJlIHJlcHJlc2VudGVkLCB0aGlzIHdpbGwKLS8vIGFwcGVuZCBhbiBlc2NhcGVkIHZl
cnNpb24gb2YgdGhlIG51bWVyaWNhbCBjaGFyYWN0ZXIgcmVmZXJlbmNlIGZvciB0aGF0IGNvZGUK
LS8vIHBvaW50LiBJdCBpcyBvZiB0aGUgZm9ybSAiJiMxMjM0OyIgYW5kIHdlIHdpbGwgZXNjYXBl
IHRoZSBub24tZGlnaXRzIHRvCi0vLyAiJTI2JTIzMTIzNCUzQiIuIFdoeT8gVGhpcyBpcyB3aGF0
IE5ldHNjYXBlIGRpZCBiYWNrIGluIHRoZSBvbGRlbiBkYXlzLgotdm9pZCBhcHBlbmRVUkxFc2Nh
cGVkQ2hhcihjb25zdCB2b2lkKiAvKiBjb250ZXh0ICovLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICBVQ29udmVydGVyRnJvbVVuaWNvZGVBcmdzKiBmcm9tQXJncywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVUNoYXIqIC8qIGNvZGVfdW5pdHMgKi8sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIGludDMyX3QgLyogbGVuZ3RoICovLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICBVQ2hhcjMyIGNvZGVQb2ludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVUNvbnZl
cnRlckNhbGxiYWNrUmVhc29uIHJlYXNvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVUVy
cm9yQ29kZSogZXJyKQotewotICAgIGlmIChyZWFzb24gPT0gVUNOVl9VTkFTU0lHTkVEKSB7Ci0g
ICAgICAgICplcnIgPSBVX1pFUk9fRVJST1I7Ci0KLSAgICAgICAgY29uc3Qgc3RhdGljIGludCBw
cmVmaXhMZW5ndGggPSA2OwotICAgICAgICBjb25zdCBzdGF0aWMgY2hhciBwcmVmaXhbcHJlZml4
TGVuZ3RoICsgMV0gPSAiJTI2JTIzIjsgLy8gIiYjIiBwZXJjZW50LWVzY2FwZWQKLSAgICAgICAg
dWNudl9jYkZyb21VV3JpdGVCeXRlcyhmcm9tQXJncywgcHJlZml4LCBwcmVmaXhMZW5ndGgsIDAs
IGVycik7Ci0KLSAgICAgICAgQVNTRVJUKGNvZGVQb2ludCA8IDB4MTEwMDAwKTsKLSAgICAgICAg
Y2hhciBudW1iZXJbOF07IC8vIE1heCBVbmljb2RlIGNvZGUgcG9pbnQgaXMgNyBkaWdpdHMuCi0g
ICAgICAgIF9pdG9hX3MoY29kZVBvaW50LCBudW1iZXIsIDEwKTsKLSAgICAgICAgaW50IG51bWJl
ckxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oc3RybGVuKG51bWJlcikpOwotICAgICAgICB1Y252
X2NiRnJvbVVXcml0ZUJ5dGVzKGZyb21BcmdzLCBudW1iZXIsIG51bWJlckxlbmd0aCwgMCwgZXJy
KTsKLQotICAgICAgICBjb25zdCBzdGF0aWMgaW50IHBvc3RmaXhMZW5ndGggPSAzOwotICAgICAg
ICBjb25zdCBzdGF0aWMgY2hhciBwb3N0Zml4W3Bvc3RmaXhMZW5ndGggKyAxXSA9ICIlM0IiOyAv
LyAiOyIgcGVyY2VudC1lc2NhcGVkCi0gICAgICAgIHVjbnZfY2JGcm9tVVdyaXRlQnl0ZXMoZnJv
bUFyZ3MsIHBvc3RmaXgsIHBvc3RmaXhMZW5ndGgsIDAsIGVycik7Ci0gICAgfQotfQotCi0vLyBB
IGNsYXNzIGZvciBzY29waW5nIHRoZSBpbnN0YWxsYXRpb24gb2YgdGhlIGludmFsaWQgY2hhcmFj
dGVyIGNhbGxiYWNrLgotY2xhc3MgQXBwZW5kSGFuZGxlckluc3RhbGxlciB7Ci1wdWJsaWM6Ci0g
ICAgLy8gVGhlIG93bmVyIG9mIHRoaXMgb2JqZWN0IG11c3QgZW5zdXJlIHRoYXQgdGhlIGNvbnZl
cnRlciBpcyBhbGl2ZSBmb3IgdGhlCi0gICAgLy8gZHVyYXRpb24gb2YgdGhpcyBvYmplY3QncyBs
aWZldGltZS4KLSAgICBBcHBlbmRIYW5kbGVySW5zdGFsbGVyKFVDb252ZXJ0ZXIqIGNvbnZlcnRl
cikKLSAgICAgICAgOiBtX2NvbnZlcnRlcihjb252ZXJ0ZXIpCi0gICAgewotICAgICAgICBVRXJy
b3JDb2RlIGVyciA9IFVfWkVST19FUlJPUjsKLSAgICAgICAgdWNudl9zZXRGcm9tVUNhbGxCYWNr
KG1fY29udmVydGVyLCBhcHBlbmRVUkxFc2NhcGVkQ2hhciwgMCwgJm1fb2xkQ2FsbGJhY2ssICZt
X29sZENvbnRleHQsICZlcnIpOwotICAgIH0KLQotICAgIH5BcHBlbmRIYW5kbGVySW5zdGFsbGVy
KCkKLSAgICB7Ci0gICAgICAgIFVFcnJvckNvZGUgZXJyID0gVV9aRVJPX0VSUk9SOwotICAgICAg
ICB1Y252X3NldEZyb21VQ2FsbEJhY2sobV9jb252ZXJ0ZXIsIG1fb2xkQ2FsbGJhY2ssIG1fb2xk
Q29udGV4dCwgMCwgMCwgJmVycik7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFVDb252ZXJ0ZXIq
IG1fY29udmVydGVyOwotCi0gICAgVUNvbnZlcnRlckZyb21VQ2FsbGJhY2sgbV9vbGRDYWxsYmFj
azsKLSAgICBjb25zdCB2b2lkKiBtX29sZENvbnRleHQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZQot
Ci0vLyBDb252ZXJ0cyB0aGUgVW5pY29kZSBpbnB1dCByZXByZXNlbnRpbmcgYSBob3N0bmFtZSB0
byBBU0NJSSB1c2luZyBJRE4gcnVsZXMuCi0vLyBUaGUgb3V0cHV0IG11c3QgYmUgQVNDSUksIGJ1
dCBpcyByZXByZXNlbnRlZCBhcyB3aWRlIGNoYXJhY3RlcnMuCi0vLwotLy8gT24gc3VjY2Vzcywg
dGhlIG91dHB1dCB3aWxsIGJlIGZpbGxlZCB3aXRoIHRoZSBBU0NJSSBob3N0IG5hbWUgYW5kIGl0
IHdpbGwKLS8vIHJldHVybiB0cnVlLiBVbmxpa2UgbW9zdCBvdGhlciBjYW5vbmljYWxpemF0aW9u
IGZ1bmN0aW9ucywgdGhpcyBhc3N1bWVzIHRoYXQKLS8vIHRoZSBvdXRwdXQgaXMgZW1wdHkuIFRo
ZSBiZWdpbm5pbmcgb2YgdGhlIGhvc3Qgd2lsbCBiZSBhdCBvZmZzZXQgMCwgYW5kCi0vLyB0aGUg
bGVuZ3RoIG9mIHRoZSBvdXRwdXQgd2lsbCBiZSBzZXQgdG8gdGhlIGxlbmd0aCBvZiB0aGUgbmV3
IGhvc3QgbmFtZS4KLS8vCi0vLyBPbiBlcnJvciwgdGhpcyB3aWxsIHJldHVybiBmYWxzZS4gVGhl
IG91dHB1dCBpbiB0aGlzIGNhc2UgaXMgdW5kZWZpbmVkLgotYm9vbCBJRE5Ub0FTQ0lJKGNvbnN0
IFVDaGFyKiBzcmMsIGludCBzb3VyY2VMZW5ndGgsIFVSTEJ1ZmZlcjxVQ2hhcj4mIG91dHB1dCkK
LXsKLSAgICBBU1NFUlQoIW91dHB1dC5sZW5ndGgoKSk7IC8vIE91dHB1dCBidWZmZXIgaXMgYXNz
dW1lZCBlbXB0eS4KLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAvLyBVc2UgQUxMT1dfVU5B
U1NJR05FRCB0byBiZSBtb3JlIHRvbGVyYW50IG9mIGhvc3RuYW1lcyB0aGF0IHZpb2xhdGUKLSAg
ICAgICAgLy8gdGhlIHNwZWMgKHdoaWNoIGRvIGV4aXN0KS4gVGhpcyBkb2VzIG5vdCBwcmVzZW50
IGFueSByaXNrIGFuZCBpcyBhCi0gICAgICAgIC8vIGxpdHRsZSBtb3JlIGZ1dHVyZSBwcm9vZi4K
LSAgICAgICAgVUVycm9yQ29kZSBlcnIgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgIGludCBudW1D
b252ZXJ0ZWQgPSB1aWRuYV9JRE5Ub0FTQ0lJKHNyYywgc291cmNlTGVuZ3RoLCBvdXRwdXQuZGF0
YSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
LmNhcGFjaXR5KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBVSUROQV9BTExPV19VTkFTU0lHTkVELCAwLCAmZXJyKTsKLSAgICAgICAgaWYgKGVyciA9PSBV
X1pFUk9fRVJST1IpIHsKLSAgICAgICAgICAgIG91dHB1dC5zZXRMZW5ndGgobnVtQ29udmVydGVk
KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChlcnIg
IT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IFVua25vd24gZXJyb3IsIGdpdmUgdXAuCi0KLSAgICAgICAgLy8gTm90IGVub3VnaCByb29tIGlu
IG91ciBidWZmZXIsIGV4cGFuZC4KLSAgICAgICAgb3V0cHV0LnJlc2l6ZShvdXRwdXQuY2FwYWNp
dHkoKSAqIDIpOwotICAgIH0KLX0KLQotYm9vbCByZWFkVVRGQ2hhcihjb25zdCBjaGFyKiBzdHIs
IGludCogYmVnaW4sIGludCBsZW5ndGgsIHVuc2lnbmVkKiBjb2RlUG9pbnRPdXQpCi17Ci0gICAg
aW50IGNvZGVQb2ludDsgLy8gQXZvaWRzIHdhcm5pbmcgd2hlbiBVOF9ORVhUIHdyaXRlcyAtMSB0
byBpdC4KLSAgICBVOF9ORVhUKHN0ciwgKmJlZ2luLCBsZW5ndGgsIGNvZGVQb2ludCk7Ci0gICAg
KmNvZGVQb2ludE91dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlUG9pbnQpOwotCi0gICAg
Ly8gVGhlIElDVSBtYWNybyBhYm92ZSBtb3ZlcyB0byB0aGUgbmV4dCBjaGFyLCB3ZSB3YW50IHRv
IHBvaW50IHRvIHRoZSBsYXN0Ci0gICAgLy8gY2hhciBjb25zdW1lZC4KLSAgICAoKmJlZ2luKS0t
OwotCi0gICAgLy8gVmFsaWRhdGUgdGhlIGRlY29kZWQgdmFsdWUuCi0gICAgaWYgKFVfSVNfVU5J
Q09ERV9DSEFSKGNvZGVQb2ludCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICpjb2RlUG9p
bnRPdXQgPSBrVW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotYm9vbCByZWFkVVRGQ2hhcihjb25zdCBVQ2hhciogc3RyLCBpbnQqIGJlZ2luLCBpbnQg
bGVuZ3RoLCB1bnNpZ25lZCogY29kZVBvaW50KQotewotICAgIGlmIChVMTZfSVNfU1VSUk9HQVRF
KHN0clsqYmVnaW5dKSkgewotICAgICAgICBpZiAoIVUxNl9JU19TVVJST0dBVEVfTEVBRChzdHJb
KmJlZ2luXSkgfHwgKmJlZ2luICsgMSA+PSBsZW5ndGggfHwgIVUxNl9JU19UUkFJTChzdHJbKmJl
Z2luICsgMV0pKSB7Ci0gICAgICAgICAgICAvLyBJbnZhbGlkIHN1cnJvZ2F0ZSBwYWlyLgotICAg
ICAgICAgICAgKmNvZGVQb2ludCA9IGtVbmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXI7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBWYWxpZCBzdXJy
b2dhdGUgcGFpci4KLSAgICAgICAgKmNvZGVQb2ludCA9IFUxNl9HRVRfU1VQUExFTUVOVEFSWShz
dHJbKmJlZ2luXSwgc3RyWypiZWdpbiArIDFdKTsKLSAgICAgICAgKCpiZWdpbikrKzsKLSAgICB9
IGVsc2UgewotICAgICAgICAvLyBOb3QgYSBzdXJyb2dhdGUsIGp1c3Qgb25lIDE2LWJpdCB3b3Jk
LgotICAgICAgICAqY29kZVBvaW50ID0gc3RyWypiZWdpbl07Ci0gICAgfQotCi0gICAgaWYgKFVf
SVNfVU5JQ09ERV9DSEFSKCpjb2RlUG9pbnQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IC8vIEludmFsaWQgY29kZSBwb2ludC4KLSAgICAqY29kZVBvaW50ID0ga1VuaWNvZGVSZXBsYWNl
bWVudENoYXJhY3RlcjsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFVS
TENhbm9uaWNhbGl6ZXIKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBVU0UoV1RG
VVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbklQLmNwcCBi
L1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25JUC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDQ0NjIzNTNjYmM1YzU2YjczMWVhNWU3NjM0MGZjOTMyNzY0ZmU0OTguLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93
dGYvdXJsL3NyYy9VUkxDYW5vbklQLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY4MyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpbmNsdWRlICJVUkxDYW5vbkludGVybmFsLmgiCi0jaW5jbHVkZSAiVVJM
Q2hhcmFjdGVyVHlwZXMuaCIKLSNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+
Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNpZiBVU0UoV1RGVVJMKQotCi1uYW1lc3BhY2UgV1RG
IHsKLQotbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIgewotCi1uYW1lc3BhY2UgewotCi0vLyBD
b252ZXJ0cyBvbmUgb2YgdGhlIGNoYXJhY3RlciB0eXBlcyB0aGF0IHJlcHJlc2VudCBhIG51bWVy
aWNhbCBiYXNlIHRvIHRoZQotLy8gY29ycmVzcG9uZGluZyBiYXNlLgotc3RhdGljIGlubGluZSBp
bnQgYmFzZUZvclR5cGUoVVJMQ2hhcmFjdGVyVHlwZXM6OkNoYXJhY3RlclR5cGVzIHR5cGUpCi17
Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBVUkxDaGFyYWN0ZXJUeXBlczo6SGV4YWRl
Y2ltYWxDaGFyYWN0ZXI6Ci0gICAgICAgIHJldHVybiAxNjsKLSAgICBjYXNlIFVSTENoYXJhY3Rl
clR5cGVzOjpEZWNpbWFsQ2hhcmFjdGVyOgotICAgICAgICByZXR1cm4gMTA7Ci0gICAgY2FzZSBV
UkxDaGFyYWN0ZXJUeXBlczo6T2N0YWxDaGFyYWN0ZXI6Ci0gICAgICAgIHJldHVybiA4OwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotLy8gQ29udmVydHMgYW4g
SVB2NCBjb21wb25lbnQgdG8gYSAzMi1iaXQgbnVtYmVyLCB3aGlsZSBjaGVja2luZyBmb3Igb3Zl
cmZsb3cuCi0vLwotLy8gUG9zc2libGUgcmV0dXJuIHZhbHVlczoKLS8vIC0gSVBWNCAgICAtIFRo
ZSBudW1iZXIgd2FzIHZhbGlkLCBhbmQgZGlkIG5vdCBvdmVyZmxvdy4KLS8vIC0gQlJPS0VOICAt
IFRoZSBpbnB1dCB3YXMgbnVtZXJpYywgYnV0IHRvbyBsYXJnZSBmb3IgYSAzMi1iaXQgZmllbGQu
Ci0vLyAtIE5FVVRSQUwgLSBJbnB1dCB3YXMgbm90IG51bWVyaWMuCi0vLwotLy8gVGhlIGlucHV0
IGlzIGFzc3VtZWQgdG8gYmUgQVNDSUkuIEZpbmRJUHY0Q29tcG9uZW50cyBzaG91bGQgaGF2ZSBz
dHJpcHBlZAotLy8gb3V0IGFueSBpbnB1dCB0aGF0IGlzIGdyZWF0ZXIgdGhhbiA3IGJpdHMuIFRo
ZSBjb21wb25lbnRzIGFyZSBhc3N1bWVkCi0vLyB0byBiZSBub24tZW1wdHkuCi10ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotQ2Fub25Ib3N0SW5mbzo6RmFtaWx5IElQdjRDb21wb25l
bnRUb051bWJlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQm
IGNvbXBvbmVudCwgdWludDMyX3QqIG51bWJlcikKLXsKLSAgICAvLyBGaWd1cmUgb3V0IHRoZSBi
YXNlCi0gICAgVVJMQ2hhcmFjdGVyVHlwZXM6OkNoYXJhY3RlclR5cGVzIGJhc2U7Ci0gICAgaW50
IGJhc2VQcmVmaXhMZW5ndGggPSAwOyAvLyBTaXplIG9mIHRoZSBwcmVmaXggZm9yIHRoaXMgYmFz
ZS4KLSAgICBpZiAoc3BlY1tjb21wb25lbnQuYmVnaW4oKV0gPT0gJzAnKSB7Ci0gICAgICAgIC8v
IEVpdGhlciBoZXggb3IgZGVjLCBvciBhIHN0YW5kYWxvbmUgemVyby4KLSAgICAgICAgaWYgKGNv
bXBvbmVudC5sZW5ndGgoKSA9PSAxKSB7Ci0gICAgICAgICAgICBiYXNlID0gVVJMQ2hhcmFjdGVy
VHlwZXM6OkRlY2ltYWxDaGFyYWN0ZXI7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3BlY1tjb21wb25l
bnQuYmVnaW4oKSArIDFdID09ICdYJyB8fCBzcGVjW2NvbXBvbmVudC5iZWdpbigpICsgMV0gPT0g
J3gnKSB7Ci0gICAgICAgICAgICBiYXNlID0gVVJMQ2hhcmFjdGVyVHlwZXM6OkhleGFkZWNpbWFs
Q2hhcmFjdGVyOwotICAgICAgICAgICAgYmFzZVByZWZpeExlbmd0aCA9IDI7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBiYXNlID0gVVJMQ2hhcmFjdGVyVHlwZXM6Ok9jdGFsQ2hhcmFj
dGVyOwotICAgICAgICAgICAgYmFzZVByZWZpeExlbmd0aCA9IDE7Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UKLSAgICAgICAgYmFzZSA9IFVSTENoYXJhY3RlclR5cGVzOjpEZWNpbWFsQ2hhcmFjdGVy
OwotCi0gICAgLy8gRXh0ZW5kIHRoZSBwcmVmaXggdG8gY29uc3VtZSBhbGwgbGVhZGluZyB6ZXJv
cy4KLSAgICB3aGlsZSAoYmFzZVByZWZpeExlbmd0aCA8IGNvbXBvbmVudC5sZW5ndGgoKSAmJiBz
cGVjW2NvbXBvbmVudC5iZWdpbigpICsgYmFzZVByZWZpeExlbmd0aF0gPT0gJzAnKQotICAgICAg
ICArK2Jhc2VQcmVmaXhMZW5ndGg7Ci0KLSAgICAvLyBQdXQgdGhlIGNvbXBvbmVudCwgbWludXMg
YW55IGJhc2UgcHJlZml4LCBpbnRvIGEgemVyby10ZXJtaW5hdGVkIGJ1ZmZlciBzbwotICAgIC8v
IHdlIGNhbiBjYWxsIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LiBCZWNhdXNlIGxlYWRpbmcgemVyb3Mg
aGF2ZSBhbHJlYWR5IGJlZW4KLSAgICAvLyBkaXNjYXJkZWQsIGZpbGxpbmcgdGhlIGVudGlyZSBi
dWZmZXIgaXMgZ3VhcmFudGVlZCB0byB0cmlnZ2VyIHRoZSAzMi1iaXQKLSAgICAvLyBvdmVyZmxv
dyBjaGVjay4KLSAgICBjb25zdCBpbnQga01heENvbXBvbmVudExlbiA9IDE2OwotICAgIGNoYXIg
YnVmW2tNYXhDb21wb25lbnRMZW4gKyAxXTsgLy8gZGlnaXRzICsgJ1wwJwotICAgIGludCBkZXN0
SSA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IGNvbXBvbmVudC5iZWdpbigpICsgYmFzZVByZWZpeExl
bmd0aDsgaSA8IGNvbXBvbmVudC5lbmQoKTsgaSsrKSB7Ci0gICAgICAgIC8vIFdlIGtub3cgdGhl
IGlucHV0IGlzIDctYml0LCBzbyBjb252ZXJ0IHRvIG5hcnJvdyAoaWYgdGhpcyBpcyB0aGUgd2lk
ZQotICAgICAgICAvLyB2ZXJzaW9uIG9mIHRoZSB0ZW1wbGF0ZSkgYnkgY2FzdGluZy4KLSAgICAg
ICAgY2hhciBpbnB1dCA9IHN0YXRpY19jYXN0PGNoYXI+KHNwZWNbaV0pOwotCi0gICAgICAgIC8v
IFZhbGlkYXRlIHRoYXQgdGhpcyBjaGFyYWN0ZXIgaXMgT0sgZm9yIHRoZSBnaXZlbiBiYXNlLgot
ICAgICAgICBpZiAoIVVSTENoYXJhY3RlclR5cGVzOjppc0NoYXJhY3Rlck9mVHlwZShpbnB1dCwg
YmFzZSkpCi0gICAgICAgICAgICByZXR1cm4gQ2Fub25Ib3N0SW5mbzo6TkVVVFJBTDsKLQotICAg
ICAgICAvLyBGaWxsIHRoZSBidWZmZXIsIGlmIHRoZXJlJ3Mgc3BhY2UgcmVtYWluaW5nLiBUaGlz
IGNoZWNrIGFsbG93cyB1cyB0bwotICAgICAgICAvLyB2ZXJpZnkgdGhhdCBhbGwgY2hhcmFjdGVy
cyBhcmUgbnVtZXJpYywgZXZlbiB0aG9zZSB0aGF0IGRvbid0IGZpdC4KLSAgICAgICAgaWYgKGRl
c3RJIDwga01heENvbXBvbmVudExlbikKLSAgICAgICAgICAgIGJ1ZltkZXN0SSsrXSA9IGlucHV0
OwotICAgIH0KLQotICAgIGJ1ZltkZXN0SV0gPSAnXDAnOwotCi0gICAgLy8gVXNlIHRoZSA2NC1i
aXQgc3RydG9pIHNvIHdlIGdldCBhIGJpZyBudW1iZXIgKG5vIGhleCwgZGVjaW1hbCwgb3Igb2N0
YWwKLSAgICAvLyBudW1iZXIgY2FuIG92ZXJmbG93IGEgNjQtYml0IG51bWJlciBpbiA8PSAxNiBj
aGFyYWN0ZXJzKS4KLSAgICB1aW50NjRfdCBudW0gPSBfc3RydG91aTY0KGJ1ZiwgMCwgYmFzZUZv
clR5cGUoYmFzZSkpOwotCi0gICAgLy8gQ2hlY2sgZm9yIDMyLWJpdCBvdmVyZmxvdy4KLSAgICBp
ZiAobnVtID4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKQotICAgICAgICBy
ZXR1cm4gQ2Fub25Ib3N0SW5mbzo6QlJPS0VOOwotCi0gICAgLy8gTm8gb3ZlcmZsb3cuIFN1Y2Nl
c3MhCi0gICAgKm51bWJlciA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihudW0pOwotICAgIHJldHVy
biBDYW5vbkhvc3RJbmZvOjpJUFY0OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlLCB0eXBlbmFtZSBVQ0hBUj4KLWJvb2wgZG9GaW5kSVB2NENvbXBvbmVudHMoY29uc3QgQ2hh
cmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBob3N0LCBVUkxDb21wb25lbnQg
Y29tcG9uZW50c1s0XSkKLXsKLSAgICBpZiAoIWhvc3QuaXNOb25FbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQgY3VycmVudENvbXBvbmVudCA9IDA7IC8vIEluZGV4IG9m
IHRoZSBjb21wb25lbnQgd2UncmUgd29ya2luZyBvbi4KLSAgICBpbnQgY3VycmVudENvbXBvbmVu
dEJlZ2luID0gaG9zdC5iZWdpbigpOyAvLyBTdGFydCBvZiB0aGUgY3VycmVudCBjb21wb25lbnQu
Ci0gICAgaW50IGVuZCA9IGhvc3QuZW5kKCk7Ci0gICAgZm9yIChpbnQgaSA9IGhvc3QuYmVnaW4o
KTsgLyogbm90aGluZyAqLzsgKytpKSB7Ci0gICAgICAgIGlmIChpID49IGVuZCB8fCBzcGVjW2ld
ID09ICcuJykgewotICAgICAgICAgICAgLy8gRm91bmQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBj
b21wb25lbnQuCi0gICAgICAgICAgICBpbnQgY29tcG9uZW50TGVuZ3RoID0gaSAtIGN1cnJlbnRD
b21wb25lbnRCZWdpbjsKLSAgICAgICAgICAgIGNvbXBvbmVudHNbY3VycmVudENvbXBvbmVudF0g
PSBVUkxDb21wb25lbnQoY3VycmVudENvbXBvbmVudEJlZ2luLCBjb21wb25lbnRMZW5ndGgpOwot
Ci0gICAgICAgICAgICAvLyBUaGUgbmV4dCBjb21wb25lbnQgc3RhcnRzIGFmdGVyIHRoZSBkb3Qu
Ci0gICAgICAgICAgICBjdXJyZW50Q29tcG9uZW50QmVnaW4gPSBpICsgMTsKLSAgICAgICAgICAg
IGN1cnJlbnRDb21wb25lbnQrKzsKLQotICAgICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgZW1wdHkg
Y29tcG9uZW50cyAodHdvIGRvdHMgaW4gYSByb3cpLCBleGNlcHQgd2UgbWF5Ci0gICAgICAgICAg
ICAvLyBhbGxvdyBhbiBlbXB0eSBjb21wb25lbnQgYXQgdGhlIGVuZCAodGhpcyB3b3VsZCBpbmRp
Y2F0ZSB0aGF0IHRoZQotICAgICAgICAgICAgLy8gaW5wdXQgZW5kcyBpbiBhIGRvdCkuIFdlIGFs
c28gd2FudCB0byBlcnJvciBpZiB0aGUgY29tcG9uZW50IGlzCi0gICAgICAgICAgICAvLyBlbXB0
eSBhbmQgaXQncyB0aGUgb25seSBjb21wb25lbnQgKGN1cnJlbnRDb21wb25lbnQgPT0gMSkuCi0g
ICAgICAgICAgICBpZiAoIWNvbXBvbmVudExlbmd0aCAmJiAoaSA8IGVuZCB8fCBjdXJyZW50Q29t
cG9uZW50ID09IDEpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAg
ICAgaWYgKGkgPj0gZW5kKQotICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBFbmQgb2YgdGhlIGlu
cHV0LgotCi0gICAgICAgICAgICBpZiAoY3VycmVudENvbXBvbmVudCA9PSA0KSB7Ci0gICAgICAg
ICAgICAgICAgLy8gQW55dGhpbmcgZWxzZSBhZnRlciB0aGUgNHRoIGNvbXBvbmVudCBpcyBhbiBl
cnJvciB1bmxlc3MgaXQgaXMgYQotICAgICAgICAgICAgICAgIC8vIGRvdCB0aGF0IHdvdWxkIG90
aGVyd2lzZSBiZSB0cmVhdGVkIGFzIHRoZSBlbmQgb2YgaW5wdXQuCi0gICAgICAgICAgICAgICAg
aWYgKHNwZWNbaV0gPT0gJy4nICYmIGkgKyAxID09IGVuZCkKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAg
ICAgICB9IGVsc2UgaWYgKHN0YXRpY19jYXN0PFVDSEFSPihzcGVjW2ldKSA+PSAweDgwIHx8ICFV
UkxDaGFyYWN0ZXJUeXBlczo6aXNJUHY0Q2hhcihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihz
cGVjW2ldKSkpIHsKLSAgICAgICAgICAgIC8vIEludmFsaWQgY2hhcmFjdGVyIGZvciBhbiBJUHY0
IGFkZHJlc3MuCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICAvLyBGaWxsIGluIGFueSB1bnVzZWQgY29tcG9uZW50cy4KLSAgICB3aGlsZSAoY3VycmVu
dENvbXBvbmVudCA8IDQpCi0gICAgICAgIGNvbXBvbmVudHNbY3VycmVudENvbXBvbmVudCsrXSA9
IFVSTENvbXBvbmVudCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBGaW5k
SVB2NENvbXBvbmVudHMoY29uc3QgY2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBob3N0
LCBVUkxDb21wb25lbnQgY29tcG9uZW50c1s0XSkKLXsKLSAgICByZXR1cm4gZG9GaW5kSVB2NENv
bXBvbmVudHM8Y2hhciwgdW5zaWduZWQgY2hhcj4oc3BlYywgaG9zdCwgY29tcG9uZW50cyk7Ci19
Ci0KLXN0YXRpYyBib29sIEZpbmRJUHY0Q29tcG9uZW50cyhjb25zdCBVQ2hhciogc3BlYywgY29u
c3QgVVJMQ29tcG9uZW50JiBob3N0LCBVUkxDb21wb25lbnQgY29tcG9uZW50c1s0XSkKLXsKLSAg
ICByZXR1cm4gZG9GaW5kSVB2NENvbXBvbmVudHM8VUNoYXIsIFVDaGFyPihzcGVjLCBob3N0LCBj
b21wb25lbnRzKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLUNhbm9u
SG9zdEluZm86OkZhbWlseSBkb0lQdjRBZGRyZXNzVG9OdW1iZXIoY29uc3QgQ2hhcmFjdGVyVHlw
ZSogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBob3N0LCB1bnNpZ25lZCBjaGFyIGFkZHJlc3Nb
NF0sIGludCYgaXB2NENvbXBvbmVudHNDb3VudCkKLXsKLSAgICAvLyBUaGUgaWRlbnRpZmllZCBj
b21wb25lbnRzLiBOb3QgYWxsIG1heSBleGlzdC4KLSAgICBVUkxDb21wb25lbnQgY29tcG9uZW50
c1s0XTsKLSAgICBpZiAoIUZpbmRJUHY0Q29tcG9uZW50cyhzcGVjLCBob3N0LCBjb21wb25lbnRz
KSkKLSAgICAgICAgcmV0dXJuIENhbm9uSG9zdEluZm86Ok5FVVRSQUw7Ci0KLSAgICAvLyBDb252
ZXJ0IGV4aXN0aW5nIGNvbXBvbmVudHMgdG8gZGlnaXRzLiBWYWx1ZXMgdXAgdG8KLSAgICAvLyB8
ZXhpc3RpbmdDb21wb25lbnRzfCB3aWxsIGJlIHZhbGlkLgotICAgIHVpbnQzMl90IGNvbXBvbmVu
dFZhbHVlc1s0XTsKLSAgICBpbnQgZXhpc3RpbmdDb21wb25lbnRzID0gMDsKLQotICAgIC8vIFNl
dCB0byB0cnVlIGlmIG9uZSBvciBtb3JlIGNvbXBvbmVudHMgYXJlIEJST0tFTi4gQlJPS0VOIGlz
IG9ubHkKLSAgICAvLyByZXR1cm5lZCBpZiBhbGwgY29tcG9uZW50cyBhcmUgSVBWNCBvciBCUk9L
RU4sIHNvLCBmb3IgZXhhbXBsZSwKLSAgICAvLyAxMjM0NTY3ODkxMjM0NS5kZSByZXR1cm5zIE5F
VVRSQUwgcmF0aGVyIHRoYW4gYnJva2VuLgotICAgIGJvb2wgYnJva2VuID0gZmFsc2U7Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKLSAgICAgICAgaWYgKGNvbXBvbmVudHNbaV0u
bGVuZ3RoKCkgPD0gMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBDYW5vbkhvc3RJ
bmZvOjpGYW1pbHkgZmFtaWx5ID0gSVB2NENvbXBvbmVudFRvTnVtYmVyKHNwZWMsIGNvbXBvbmVu
dHNbaV0sICZjb21wb25lbnRWYWx1ZXNbZXhpc3RpbmdDb21wb25lbnRzXSk7Ci0KLSAgICAgICAg
aWYgKGZhbWlseSA9PSBDYW5vbkhvc3RJbmZvOjpCUk9LRU4pCi0gICAgICAgICAgICBicm9rZW4g
PSB0cnVlOwotICAgICAgICBlbHNlIGlmIChmYW1pbHkgIT0gQ2Fub25Ib3N0SW5mbzo6SVBWNCkg
ewotICAgICAgICAgICAgLy8gU3RvcCBpZiB3ZSBoaXQgYSBub24tQlJPS0VOIGludmFsaWQgbm9u
LWVtcHR5IGNvbXBvbmVudC4KLSAgICAgICAgICAgIHJldHVybiBmYW1pbHk7Ci0gICAgICAgIH0K
LQotICAgICAgICBleGlzdGluZ0NvbXBvbmVudHMrKzsKLSAgICB9Ci0KLSAgICBpZiAoYnJva2Vu
KQotICAgICAgICByZXR1cm4gQ2Fub25Ib3N0SW5mbzo6QlJPS0VOOwotCi0gICAgLy8gVXNlIHRo
YXQgc2VxdWVuY2Ugb2YgbnVtYmVycyB0byBmaWxsIG91dCB0aGUgNC1jb21wb25lbnQgSVAgYWRk
cmVzcy4KLQotICAgIC8vIEZpcnN0LCBwcm9jZXNzIGFsbCBjb21wb25lbnRzIGJ1dCB0aGUgbGFz
dCwgd2hpbGUgbWFraW5nIHN1cmUgZWFjaCBmaXRzCi0gICAgLy8gd2l0aGluIGFuIDgtYml0IGZp
ZWxkLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXhpc3RpbmdDb21wb25lbnRzIC0gMTsgaSsr
KSB7Ci0gICAgICAgIGlmIChjb21wb25lbnRWYWx1ZXNbaV0gPiBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQ4X3Q+OjptYXgoKSkKLSAgICAgICAgICAgIHJldHVybiBDYW5vbkhvc3RJbmZvOjpCUk9L
RU47Ci0gICAgICAgIGFkZHJlc3NbaV0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjb21w
b25lbnRWYWx1ZXNbaV0pOwotICAgIH0KLQotICAgIC8vIE5leHQsIGNvbnN1bWUgdGhlIGxhc3Qg
Y29tcG9uZW50IHRvIGZpbGwgaW4gdGhlIHJlbWFpbmluZyBieXRlcy4KLSAgICB1aW50MzJfdCBs
YXN0VmFsdWUgPSBjb21wb25lbnRWYWx1ZXNbZXhpc3RpbmdDb21wb25lbnRzIC0gMV07Ci0gICAg
Zm9yIChpbnQgaSA9IDM7IGkgPj0gZXhpc3RpbmdDb21wb25lbnRzIC0gMTsgaS0tKSB7Ci0gICAg
ICAgIGFkZHJlc3NbaV0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihsYXN0VmFsdWUpOwot
ICAgICAgICBsYXN0VmFsdWUgPj49IDg7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIGxhc3QgY29t
cG9uZW50IGhhcyByZXNpZHVhbCBiaXRzLCByZXBvcnQgb3ZlcmZsb3cuCi0gICAgaWYgKGxhc3RW
YWx1ZSkKLSAgICAgICAgcmV0dXJuIENhbm9uSG9zdEluZm86OkJST0tFTjsKLQotICAgIC8vIFRl
bGwgdGhlIGNhbGxlciBob3cgbWFueSBjb21wb25lbnRzIHdlIHNhdy4KLSAgICBpcHY0Q29tcG9u
ZW50c0NvdW50ID0gZXhpc3RpbmdDb21wb25lbnRzOwotCi0gICAgLy8gU3VjY2VzcyEKLSAgICBy
ZXR1cm4gQ2Fub25Ib3N0SW5mbzo6SVBWNDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFwcGVu
ZElQdjRBZGRyZXNzKGNvbnN0IHVuc2lnbmVkIGNoYXIgYWRkcmVzc1s0XSwgVVJMQnVmZmVyPGNo
YXI+JiBvdXRwdXQpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHsKLSAgICAg
ICAgY2hhciBidWZmZXJbMTZdOwotICAgICAgICBfaXRvYV9zKGFkZHJlc3NbaV0sIGJ1ZmZlciwg
MTApOwotCi0gICAgICAgIGZvciAoaW50IGNoID0gMDsgYnVmZmVyW2NoXTsgY2grKykKLSAgICAg
ICAgICAgIG91dHB1dC5hcHBlbmQoYnVmZmVyW2NoXSk7Ci0KLSAgICAgICAgaWYgKGkgIT0gMykK
LSAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJy4nKTsKLSAgICB9Ci19Ci0KLS8vIFJldHVybiB0
cnVlIGlmIHdlJ3ZlIG1hZGUgYSBmaW5hbCBJUFY0L0JST0tFTiBkZWNpc2lvbiwgZmFsc2UgaWYg
dGhlIHJlc3VsdAotLy8gaXMgTkVVVFJBTCwgYW5kIHdlIGNvdWxkIHVzZSBhIHNlY29uZCBvcGlu
aW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgVUNIQVI+Ci1i
b29sIGRvQ2Fub25pY2FsaXplSVB2NEFkZHJlc3MoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywg
Y29uc3QgVVJMQ29tcG9uZW50JiBob3N0LCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgQ2Fub25I
b3N0SW5mbyYgaG9zdEluZm8pCi17Ci0gICAgaG9zdEluZm8uZmFtaWx5ID0gZG9JUHY0QWRkcmVz
c1RvTnVtYmVyKHNwZWMsIGhvc3QsIGhvc3RJbmZvLmFkZHJlc3MsIGhvc3RJbmZvLmlwdjRDb21w
b25lbnRzQ291bnQpOwotCi0gICAgc3dpdGNoIChob3N0SW5mby5mYW1pbHkpIHsKLSAgICBjYXNl
IENhbm9uSG9zdEluZm86OklQVjQ6Ci0gICAgICAgIC8vIERlZmluaXRlbHkgYW4gSVB2NCBhZGRy
ZXNzLgotICAgICAgICBob3N0SW5mby5vdXB1dEhvc3Quc2V0QmVnaW4ob3V0cHV0Lmxlbmd0aCgp
KTsKLSAgICAgICAgYXBwZW5kSVB2NEFkZHJlc3MoaG9zdEluZm8uYWRkcmVzcywgb3V0cHV0KTsK
LSAgICAgICAgaG9zdEluZm8ub3VwdXRIb3N0LnNldExlbmd0aChvdXRwdXQubGVuZ3RoKCkgLSBo
b3N0SW5mby5vdXB1dEhvc3QuYmVnaW4oKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNh
c2UgQ2Fub25Ib3N0SW5mbzo6QlJPS0VOOgotICAgICAgICAvLyBEZWZpbml0ZWx5IGJyb2tlbi4K
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgLy8gQ291bGQgYmUg
SVB2NiBvciBhIGhvc3RuYW1lLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi0v
LyBIZWxwZXIgY2xhc3MgdGhhdCBkZXNjcmliZXMgdGhlIG1haW4gY29tcG9uZW50cyBvZiBhbiBJ
UHY2IGlucHV0IHN0cmluZy4KLS8vIFNlZSB0aGUgZm9sbG93aW5nIGV4YW1wbGVzIHRvIHVuZGVy
c3RhbmQgaG93IGl0IGJyZWFrcyB1cCBhbiBpbnB1dCBzdHJpbmc6Ci0vLwotLy8gW0V4YW1wbGUg
MV06IGlucHV0ID0gIls6OmFhOmJiXSIKLS8vICA9PT4gbnVtSGV4Q29tcG9uZW50cyA9IDIKLS8v
ICA9PT4gaGV4Q29tcG9uZW50c1swXSA9IENvbXBvbmVudCgzLDIpICJhYSIKLS8vICA9PT4gaGV4
Q29tcG9uZW50c1sxXSA9IENvbXBvbmVudCg2LDIpICJiYiIKLS8vICA9PT4gaW5kZXhPZkNvbnRy
YWN0aW9uID0gMAotLy8gID09PiBpcHY0Q29tcG9uZW50ID0gQ29tcG9uZW50KDAsIC0xKQotLy8K
LS8vIFtFeGFtcGxlIDJdOiBpbnB1dCA9ICJbMToyOjozOjQ6NV0iCi0vLyAgPT0+IG51bUhleENv
bXBvbmVudHMgPSA1Ci0vLyAgPT0+IGhleENvbXBvbmVudHNbMF0gPSBDb21wb25lbnQoMSwxKSAi
MSIKLS8vICA9PT4gaGV4Q29tcG9uZW50c1sxXSA9IENvbXBvbmVudCgzLDEpICIyIgotLy8gID09
PiBoZXhDb21wb25lbnRzWzJdID0gQ29tcG9uZW50KDYsMSkgIjMiCi0vLyAgPT0+IGhleENvbXBv
bmVudHNbM10gPSBDb21wb25lbnQoOCwxKSAiNCIKLS8vICA9PT4gaGV4Q29tcG9uZW50c1s0XSA9
IENvbXBvbmVudCgxMCwxKSAiNSIKLS8vICA9PT4gaW5kZXhPZkNvbnRyYWN0aW9uID0gMgotLy8g
ID09PiBpcHY0Q29tcG9uZW50ID0gQ29tcG9uZW50KDAsIC0xKQotLy8KLS8vIFtFeGFtcGxlIDNd
OiBpbnB1dCA9ICJbOjpmZmZmOjE5Mi4xNjguMC4xXSIKLS8vICA9PT4gbnVtSGV4Q29tcG9uZW50
cyA9IDEKLS8vICA9PT4gaGV4Q29tcG9uZW50c1swXSA9IENvbXBvbmVudCgzLDQpICJmZmZmIgot
Ly8gID09PiBpbmRleE9mQ29udHJhY3Rpb24gPSAwCi0vLyAgPT0+IGlwdjRDb21wb25lbnQgPSBD
b21wb25lbnQoOCwgMTEpICIxOTIuMTY4LjAuMSIKLS8vCi0vLyBbRXhhbXBsZSA0XTogaW5wdXQg
PSAiWzE6Ol0iCi0vLyAgPT0+IG51bUhleENvbXBvbmVudHMgPSAxCi0vLyAgPT0+IGhleENvbXBv
bmVudHNbMF0gPSBDb21wb25lbnQoMSwxKSAiMSIKLS8vICA9PT4gaW5kZXhPZkNvbnRyYWN0aW9u
ID0gMQotLy8gID09PiBpcHY0Q29tcG9uZW50ID0gQ29tcG9uZW50KDAsIC0xKQotLy8KLS8vIFtF
eGFtcGxlIDVdOiBpbnB1dCA9ICJbOjoxOTIuMTY4LjAuMV0iCi0vLyAgPT0+IG51bUhleENvbXBv
bmVudHMgPSAwCi0vLyAgPT0+IGluZGV4T2ZDb250cmFjdGlvbiA9IDAKLS8vICA9PT4gaXB2NENv
bXBvbmVudCA9IENvbXBvbmVudCg4LCAxMSkgIjE5Mi4xNjguMC4xIgotLy8KLXN0cnVjdCBJUHY2
UGFyc2VkIHsKLSAgICAvLyBaZXJvLW91dCB0aGUgcGFyc2UgaW5mb3JtYXRpb24uCi0gICAgdm9p
ZCByZXNldCgpCi0gICAgewotICAgICAgICBudW1IZXhDb21wb25lbnRzID0gMDsKLSAgICAgICAg
aW5kZXhPZkNvbnRyYWN0aW9uID0gLTE7Ci0gICAgICAgIGlwdjRDb21wb25lbnQucmVzZXQoKTsK
LSAgICB9Ci0KLSAgICAvLyBUaGVyZSBjYW4gYmUgdXAgdG8gOCBoZXggY29tcG9uZW50cyAoY29s
b24gc2VwYXJhdGVkKSBpbiB0aGUgbGl0ZXJhbC4KLSAgICBVUkxDb21wb25lbnQgaGV4Q29tcG9u
ZW50c1s4XTsKLQotICAgIC8vIFRoZSBjb3VudCBvZiBoZXggY29tcG9uZW50cyBwcmVzZW50LiBS
YW5nZXMgZnJvbSBbMCw4XS4KLSAgICBpbnQgbnVtSGV4Q29tcG9uZW50czsKLQotICAgIC8vIFRo
ZSBpbmRleCBvZiB0aGUgaGV4IGNvbXBvbmVudCB0aGF0IHRoZSAiOjoiIGNvbnRyYWN0aW9uIHBy
ZWNlZGVzLCBvcgotICAgIC8vIC0xIGlmIHRoZXJlIGlzIG5vIGNvbnRyYWN0aW9uLgotICAgIGlu
dCBpbmRleE9mQ29udHJhY3Rpb247Ci0KLSAgICAvLyBUaGUgcmFuZ2Ugb2YgY2hhcmFjdGVycyB3
aGljaCBhcmUgYW4gSVB2NCBsaXRlcmFsLgotICAgIFVSTENvbXBvbmVudCBpcHY0Q29tcG9uZW50
OwotfTsKLQotLy8gUGFyc2UgdGhlIElQdjYgaW5wdXQgc3RyaW5nLiBJZiBwYXJzaW5nIHN1Y2Nl
ZWRlZCByZXR1cm5zIHRydWUgYW5kIGZpbGxzCi0vLyB8cGFyc2VkfCB3aXRoIHRoZSBpbmZvcm1h
dGlvbi4gSWYgcGFyc2luZyBmYWlsZWQgKGJlY2F1c2UgdGhlIGlucHV0IGlzCi0vLyBpbnZhbGlk
KSByZXR1cm5zIGZhbHNlLgotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5h
bWUgVUNIQVI+Ci1ib29sIGRvUGFyc2VJUHY2KGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNv
bnN0IFVSTENvbXBvbmVudCYgaG9zdCwgSVB2NlBhcnNlZCYgcGFyc2VkKQotewotICAgIC8vIFpl
cm8tb3V0IHRoZSBpbmZvLgotICAgIHBhcnNlZC5yZXNldCgpOwotCi0gICAgaWYgKCFob3N0Lmlz
Tm9uRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVGhlIGluZGV4IGZv
ciBzdGFydCBhbmQgZW5kIG9mIGFkZHJlc3MgcmFuZ2UgKG5vIGJyYWNrZXRzKS4KLSAgICBpbnQg
YmVnaW4gPSBob3N0LmJlZ2luKCk7Ci0gICAgaW50IGVuZCA9IGhvc3QuZW5kKCk7Ci0KLSAgICBp
bnQgY3VycmVudENvbXBvbmVudEJlZ2luID0gYmVnaW47IC8vIFN0YXJ0IG9mIHRoZSBjdXJyZW50
IGNvbXBvbmVudC4KLQotICAgIC8vIFNjYW4gdGhyb3VnaCB0aGUgaW5wdXQsIHNlYXJjaGluZyBm
b3IgaGV4IGNvbXBvbmVudHMsICI6OiIgY29udHJhY3Rpb25zLAotICAgIC8vIGFuZCBJUHY0IGNv
bXBvbmVudHMuCi0gICAgZm9yIChpbnQgaSA9IGJlZ2luOyAvKiBpIDw9IGVuZCAqLzsgaSsrKSB7
Ci0gICAgICAgIGJvb2wgaXNDb2xvbiA9IHNwZWNbaV0gPT0gJzonOwotICAgICAgICBib29sIGlz
Q29udHJhY3Rpb24gPSBpc0NvbG9uICYmIGkgPCBlbmQgLSAxICYmIHNwZWNbaSArIDFdID09ICc6
JzsKLQotICAgICAgICAvLyBXZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgY29tcG9u
ZW50IGlmIHdlIGVuY291bnRlciBhIGNvbG9uCi0gICAgICAgIC8vIChzZXBhcmF0b3IgYmV0d2Vl
biBoZXggY29tcG9uZW50cywgb3Igc3RhcnQgb2YgYSBjb250cmFjdGlvbiksIG9yIGVuZCBvZgot
ICAgICAgICAvLyBpbnB1dC4KLSAgICAgICAgaWYgKGlzQ29sb24gfHwgaSA9PSBlbmQpIHsKLSAg
ICAgICAgICAgIGludCBjb21wb25lbnRMZW5ndGggPSBpIC0gY3VycmVudENvbXBvbmVudEJlZ2lu
OwotCi0gICAgICAgICAgICAvLyBBIGNvbXBvbmVudCBzaG91bGQgbm90IGhhdmUgbW9yZSB0aGFu
IDQgaGV4IGRpZ2l0cy4KLSAgICAgICAgICAgIGlmIChjb21wb25lbnRMZW5ndGggPiA0KQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgLy8gRG9uJ3QgYWxsb3cg
ZW1wdHkgY29tcG9uZW50cy4KLSAgICAgICAgICAgIGlmICghY29tcG9uZW50TGVuZ3RoKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gVGhlIGV4Y2VwdGlvbiBpcyB3aGVuIGNvbnRyYWN0aW9ucyBhcHBl
YXIgYXQgYmVnaW5uaW5nIG9mIHRoZQotICAgICAgICAgICAgICAgIC8vIGlucHV0IG9yIGF0IHRo
ZSBlbmQgb2YgdGhlIGlucHV0LgotICAgICAgICAgICAgICAgIGlmICghKChpc0NvbnRyYWN0aW9u
ICYmIGkgPT0gYmVnaW4pIHx8IChpID09IGVuZCAmJiBwYXJzZWQuaW5kZXhPZkNvbnRyYWN0aW9u
ID09IHBhcnNlZC5udW1IZXhDb21wb25lbnRzKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQWRkIHRoZSBoZXggY29t
cG9uZW50IHdlIGp1c3QgZm91bmQgdG8gcnVubmluZyBsaXN0LgotICAgICAgICAgICAgaWYgKGNv
bXBvbmVudExlbmd0aCA+IDApIHsKLSAgICAgICAgICAgICAgICAvLyBDYW4ndCBoYXZlIG1vcmUg
dGhhbiA4IGNvbXBvbmVudHMhCi0gICAgICAgICAgICAgICAgaWYgKHBhcnNlZC5udW1IZXhDb21w
b25lbnRzID49IDgpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICAgICAgICAgIHBhcnNlZC5oZXhDb21wb25lbnRzW3BhcnNlZC5udW1IZXhDb21wb25lbnRzKytd
ID0KLSAgICAgICAgICAgICAgICBVUkxDb21wb25lbnQoY3VycmVudENvbXBvbmVudEJlZ2luLCBj
b21wb25lbnRMZW5ndGgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGkgPT0gZW5kKQotICAgICAgICAgICAgYnJlYWs7IC8vIFJlYWNoZWQgdGhlIGVuZCBvZiB0aGUg
aW5wdXQsIERPTkUuCi0KLSAgICAgICAgLy8gV2UgZm91bmQgYSAiOjoiIGNvbnRyYWN0aW9uLgot
ICAgICAgICBpZiAoaXNDb250cmFjdGlvbikgewotICAgICAgICAgICAgLy8gVGhlcmUgY2FuIGJl
IGF0IG1vc3Qgb25lIGNvbnRyYWN0aW9uIGluIHRoZSBsaXRlcmFsLgotICAgICAgICAgICAgaWYg
KHBhcnNlZC5pbmRleE9mQ29udHJhY3Rpb24gIT0gLTEpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgcGFyc2VkLmluZGV4T2ZDb250cmFjdGlvbiA9IHBhcnNlZC5u
dW1IZXhDb21wb25lbnRzOwotICAgICAgICAgICAgKytpOyAvLyBDb25zdW1lIHRoZSBjb2xvbiB3
ZSBwZWVrZWQuCi0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXNDb2xvbikgewotICAgICAgICAg
ICAgLy8gQ29sb25zIGFyZSBzZXBhcmF0b3JzIGJldHdlZW4gY29tcG9uZW50cywga2VlcCB0cmFj
ayBvZiB3aGVyZSB0aGUKLSAgICAgICAgICAgIC8vIGN1cnJlbnQgY29tcG9uZW50IHN0YXJ0ZWQg
KGFmdGVyIHRoaXMgY29sb24pLgotICAgICAgICAgICAgY3VycmVudENvbXBvbmVudEJlZ2luID0g
aSArIDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8VUNI
QVI+KHNwZWNbaV0pID49IDB4ODApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBO
b3QgQVNDSUkuCi0KLSAgICAgICAgICAgIGlmICghVVJMQ2hhcmFjdGVyVHlwZXM6OmlzSGV4Q2hh
cihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihzcGVjW2ldKSkpIHsKLSAgICAgICAgICAgICAg
ICAvLyBSZWd1bGFyIGNvbXBvbmVudHMgYXJlIGhleCBudW1iZXJzLiBJdCBpcyBhbHNvIHBvc3Np
YmxlIGZvcgotICAgICAgICAgICAgICAgIC8vIGEgY29tcG9uZW50IHRvIGJlIGFuIElQdjQgYWRk
cmVzcyBpbiBkb3R0ZWQgZm9ybS4KLSAgICAgICAgICAgICAgICBpZiAoVVJMQ2hhcmFjdGVyVHlw
ZXM6OmlzSVB2NENoYXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc3BlY1tpXSkpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIElQdjQgYWRkcmVzcyBjYW4gb25seSBhcHBlYXIg
YXQgdGhlIGVuZCwgYXNzdW1lIHRoZSByZXN0Ci0gICAgICAgICAgICAgICAgICAgIC8vIG9mIHRo
ZSBzdHJpbmcgaXMgYW4gSVB2NCBhZGRyZXNzLiAoV2Ugd2lsbCBwYXJzZSB0aGlzIHNlcGFyYXRl
bHkKLSAgICAgICAgICAgICAgICAgICAgLy8gbGF0ZXIpLgotICAgICAgICAgICAgICAgICAgICBw
YXJzZWQuaXB2NENvbXBvbmVudCA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKGN1cnJlbnRDb21w
b25lbnRCZWdpbiwgZW5kKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIC8vIFRoZSBjaGFyYWN0ZXIgd2FzIG5laXRoZXIgYSBo
ZXggZGlnaXQsIG5vciBhbiBJUHY0IGNoYXJhY3Rlci4KLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotLy8gVmVyaWZpZXMgdGhlIHBhcnNlZCBJUHY2IGluZm9ybWF0aW9uLCBjaGVja2lu
ZyB0aGF0IHRoZSB2YXJpb3VzIGNvbXBvbmVudHMKLS8vIGFkZCB1cCB0byB0aGUgcmlnaHQgbnVt
YmVyIG9mIGJpdHMgKGhleCBjb21wb25lbnRzIGFyZSAxNiBiaXRzLCB3aGlsZQotLy8gZW1iZWRk
ZWQgSVB2NCBmb3JtYXRzIGFyZSAzMiBiaXRzLCBhbmQgY29udHJhY3Rpb25zIGFyZSBwbGFjZWhv
bGRlcyBmb3IKLS8vIDE2IG9yIG1vcmUgYml0cykuIFJldHVybnMgdHJ1ZSBpZiBzaXplcyBtYXRj
aCB1cCwgZmFsc2Ugb3RoZXJ3aXNlLiBPbgotLy8gc3VjY2VzcyB3cml0ZXMgdGhlIGxlbmd0aCBv
ZiB0aGUgY29udHJhY3Rpb24gKGlmIGFueSkgdG8KLS8vIHxvdXROdW1CeXRlc09mQ29udHJhY3Rp
b258LgotYm9vbCBDaGVja0lQdjZDb21wb25lbnRzU2l6ZShjb25zdCBJUHY2UGFyc2VkJiBwYXJz
ZWQsIGludCogb3V0TnVtQnl0ZXNPZkNvbnRyYWN0aW9uKQotewotICAgIC8vIEVhY2ggZ3JvdXAg
b2YgZm91ciBoZXggZGlnaXRzIGNvbnRyaWJ1dGVzIDE2IGJpdHMuCi0gICAgaW50IG51bUJ5dGVz
V2l0aG91dENvbnRyYWN0aW9uID0gcGFyc2VkLm51bUhleENvbXBvbmVudHMgKiAyOwotCi0gICAg
Ly8gSWYgYW4gSVB2NCBhZGRyZXNzIHdhcyBlbWJlZGRlZCBhdCB0aGUgZW5kLCBpdCBjb250cmli
dXRlcyAzMiBiaXRzLgotICAgIGlmIChwYXJzZWQuaXB2NENvbXBvbmVudC5pc1ZhbGlkKCkpCi0g
ICAgICAgIG51bUJ5dGVzV2l0aG91dENvbnRyYWN0aW9uICs9IDQ7Ci0KLSAgICAvLyBJZiB0aGVy
ZSB3YXMgYSAiOjoiIGNvbnRyYWN0aW9uLCBpdHMgc2l6ZSBpcyBnb2luZyB0byBiZToKLSAgICAv
LyBNQVgoWzE2Yml0c10sIFsxMjhiaXRzXSAtIG51bUJ5dGVzV2l0aG91dENvbnRyYWN0aW9uKS4K
LSAgICBpbnQgbnVtQnl0ZXNPZkNvbnRyYWN0aW9uID0gMDsKLSAgICBpZiAocGFyc2VkLmluZGV4
T2ZDb250cmFjdGlvbiAhPSAtMSkgewotICAgICAgICBudW1CeXRlc09mQ29udHJhY3Rpb24gPSAx
NiAtIG51bUJ5dGVzV2l0aG91dENvbnRyYWN0aW9uOwotICAgICAgICBpZiAobnVtQnl0ZXNPZkNv
bnRyYWN0aW9uIDwgMikKLSAgICAgICAgICAgIG51bUJ5dGVzT2ZDb250cmFjdGlvbiA9IDI7Ci0g
ICAgfQotCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGUgbnVtYmVycyBhZGQgdXAuCi0gICAgaWYgKG51
bUJ5dGVzV2l0aG91dENvbnRyYWN0aW9uICsgbnVtQnl0ZXNPZkNvbnRyYWN0aW9uICE9IDE2KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAqb3V0TnVtQnl0ZXNPZkNvbnRyYWN0aW9uID0g
bnVtQnl0ZXNPZkNvbnRyYWN0aW9uOwotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBDb252ZXJ0
cyBhIGhleCBjb21vbmVudCBpbnRvIGEgbnVtYmVyLiBUaGlzIGNhbm5vdCBmYWlsIHNpbmNlIHRo
ZSBjYWxsZXIgaGFzCi0vLyBhbHJlYWR5IHZlcmlmaWVkIHRoYXQgZWFjaCBjaGFyYWN0ZXIgaW4g
dGhlIHN0cmluZyB3YXMgYSBoZXggZGlnaXQsIGFuZAotLy8gdGhhdCB0aGVyZSB3ZXJlIG5vIG1v
cmUgdGhhbiA0IGNoYXJhY3RlcnMuCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgot
dWludDE2X3QgSVB2NkhleENvbXBvbmVudFRvTnVtYmVyKGNvbnN0IENoYXJhY3RlclR5cGUqIHNw
ZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgY29tcG9uZW50KQotewotICAgIEFTU0VSVChjb21wb25l
bnQubGVuZ3RoKCkgPD0gNCk7Ci0KLSAgICAvLyBDb3B5IHRoZSBoZXggc3RyaW5nIGludG8gYSBD
LXN0cmluZy4KLSAgICBjaGFyIGJ1Zls1XTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbXBv
bmVudC5sZW5ndGgoKTsgKytpKQotICAgICAgICBidWZbaV0gPSBzdGF0aWNfY2FzdDxjaGFyPihz
cGVjW2NvbXBvbmVudC5iZWdpbigpICsgaV0pOwotICAgIGJ1Zltjb21wb25lbnQubGVuZ3RoKCld
ID0gJ1wwJzsKLQotICAgIC8vIENvbnZlcnQgaXQgdG8gYSBudW1iZXIgKG92ZXJmbG93IGlzIG5v
dCBwb3NzaWJsZSwgc2luY2Ugd2l0aCA0IGhleAotICAgIC8vIGNoYXJhY3RlcnMgd2UgY2FuIGF0
IG1vc3QgaGF2ZSBhIDE2IGJpdCBudW1iZXIpLgotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50
MTZfdD4oX3N0cnRvdWk2NChidWYsIDAsIDE2KSk7Ci19Ci0KLS8vIENvbnZlcnRzIGFuIElQdjYg
YWRkcmVzcyB0byBhIDEyOC1iaXQgbnVtYmVyIChuZXR3b3JrIGJ5dGUgb3JkZXIpLCByZXR1cm5p
bmcKLS8vIHRydWUgb24gc3VjY2Vzcy4gRmFsc2UgbWVhbnMgdGhhdCB0aGUgaW5wdXQgd2FzIG5v
dCBhIHZhbGlkIElQdjYgYWRkcmVzcy4KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUs
IHR5cGVuYW1lIFVDSEFSPgotYm9vbCBkb0lQdjZBZGRyZXNzVG9OdW1iZXIoY29uc3QgQ2hhcmFj
dGVyVHlwZSogc3BlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBv
bmVudCYgaG9zdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWRk
cmVzc1sxNl0pCi17Ci0gICAgLy8gTWFrZSBzdXJlIHRoZSBjb21wb25lbnQgaXMgYm91bmRlZCBi
eSAnWycgYW5kICddJy4KLSAgICBpbnQgZW5kID0gaG9zdC5lbmQoKTsKLSAgICBpZiAoIWhvc3Qu
aXNOb25FbXB0eSgpIHx8IHNwZWNbaG9zdC5iZWdpbigpXSAhPSAnWycgfHwgc3BlY1tlbmQgLSAx
XSAhPSAnXScpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEV4Y2x1ZGUgdGhlIHNx
dWFyZSBicmFja2V0cy4KLSAgICBVUkxDb21wb25lbnQgaXB2NkNvbXBvbmVudChob3N0LmJlZ2lu
KCkgKyAxLCBob3N0Lmxlbmd0aCgpIC0gMik7Ci0KLSAgICAvLyBQYXJzZSB0aGUgSVB2NiBhZGRy
ZXNzIC0tIGlkZW50aWZ5IHdoZXJlIGFsbCB0aGUgY29sb24gc2VwYXJhdGVkIGhleAotICAgIC8v
IGNvbXBvbmVudHMgYXJlLCB0aGUgIjo6IiBjb250cmFjdGlvbiwgYW5kIHRoZSBlbWJlZGRlZCBJ
UHY0IGFkZHJlc3MuCi0gICAgSVB2NlBhcnNlZCBpcHY2UGFyc2VkOwotICAgIGlmICghZG9QYXJz
ZUlQdjY8Q2hhcmFjdGVyVHlwZSwgVUNIQVI+KHNwZWMsIGlwdjZDb21wb25lbnQsIGlwdjZQYXJz
ZWQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBEbyBzb21lIGJhc2ljIHNpemUg
Y2hlY2tzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBhZGRyZXNzIGRvZXNuJ3QKLSAgICAvLyBzcGVj
aWZ5IG1vcmUgdGhhbiAxMjggYml0cyBvciBmZXdlciB0aGFuIDEyOCBiaXRzLiBUaGlzIGFsc28g
cmVzb2x2ZXMKLSAgICAvLyBob3cgbWF5IHplcm8gYnl0ZXMgdGhlICI6OiIgY29udHJhY3Rpb24g
cmVwcmVzZW50cy4KLSAgICBpbnQgbnVtQnl0ZXNPZkNvbnRyYWN0aW9uOwotICAgIGlmICghQ2hl
Y2tJUHY2Q29tcG9uZW50c1NpemUoaXB2NlBhcnNlZCwgJm51bUJ5dGVzT2ZDb250cmFjdGlvbikp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCBjdXJyZW50SW5kZXhJbkFkZHJlc3Mg
PSAwOwotCi0gICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggaGV4IGNvbXBvbmVudHMsIGFuZCBjb250
cmFjdGlvbiBpbiBvcmRlci4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8PSBpcHY2UGFyc2VkLm51
bUhleENvbXBvbmVudHM7ICsraSkgewotICAgICAgICAvLyBBcHBlbmQgdGhlIGNvbnRyYWN0aW9u
IGlmIGl0IGFwcGVhcnMgYmVmb3JlIHRoaXMgY29tcG9uZW50LgotICAgICAgICBpZiAoaSA9PSBp
cHY2UGFyc2VkLmluZGV4T2ZDb250cmFjdGlvbikgewotICAgICAgICAgICAgZm9yIChpbnQgaiA9
IDA7IGogPCBudW1CeXRlc09mQ29udHJhY3Rpb247ICsraikKLSAgICAgICAgICAgICAgICBhZGRy
ZXNzW2N1cnJlbnRJbmRleEluQWRkcmVzcysrXSA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgLy8g
QXBwZW5kIHRoZSBoZXggY29tcG9uZW50J3MgdmFsdWUuCi0gICAgICAgIGlmIChpICE9IGlwdjZQ
YXJzZWQubnVtSGV4Q29tcG9uZW50cykgewotICAgICAgICAgICAgLy8gR2V0IHRoZSAxNi1iaXQg
dmFsdWUgZm9yIHRoaXMgaGV4IGNvbXBvbmVudC4KLSAgICAgICAgICAgIHVpbnQxNl90IG51bWJl
ciA9IElQdjZIZXhDb21wb25lbnRUb051bWJlcjxDaGFyYWN0ZXJUeXBlPihzcGVjLCBpcHY2UGFy
c2VkLmhleENvbXBvbmVudHNbaV0pOwotICAgICAgICAgICAgLy8gQXBwZW5kIHRvIHxhZGRyZXNz
fCwgaW4gbmV0d29yayBieXRlIG9yZGVyLgotICAgICAgICAgICAgYWRkcmVzc1tjdXJyZW50SW5k
ZXhJbkFkZHJlc3MrK10gPSAobnVtYmVyICYgMHhGRjAwKSA+PiA4OwotICAgICAgICAgICAgYWRk
cmVzc1tjdXJyZW50SW5kZXhJbkFkZHJlc3MrK10gPSAobnVtYmVyICYgMHgwMEZGKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIC8vIElmIHRoZXJlIHdhcyBhbiBJUHY0IHNlY3Rpb24sIGNvbnZl
cnQgaXQgaW50byBhIDMyLWJpdCBudW1iZXIgYW5kIGFwcGVuZAotICAgIC8vIGl0IHRvIHxhZGRy
ZXNzfC4KLSAgICBpZiAoaXB2NlBhcnNlZC5pcHY0Q29tcG9uZW50LmlzVmFsaWQoKSkgewotICAg
ICAgICAvLyBBcHBlbmQgdGhlIDMyLWJpdCBudW1iZXIgdG8gfGFkZHJlc3N8LgotICAgICAgICBp
bnQgaWdub3JlZElQdjRDb21wb25lbnRzQ291bnQ7Ci0gICAgICAgIGlmIChDYW5vbkhvc3RJbmZv
OjpJUFY0ICE9Ci0gICAgICAgICAgICBkb0lQdjRBZGRyZXNzVG9OdW1iZXIoc3BlYywgaXB2NlBh
cnNlZC5pcHY0Q29tcG9uZW50LCAmYWRkcmVzc1tjdXJyZW50SW5kZXhJbkFkZHJlc3NdLCBpZ25v
cmVkSVB2NENvbXBvbmVudHNDb3VudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIFNlYXJjaGVzIGZvciB0aGUgbG9uZ2VzdCBz
ZXF1ZW5jZSBvZiB6ZXJvcyBpbiB8YWRkcmVzc3wsIGFuZCB3cml0ZXMgdGhlCi0vLyByYW5nZSBp
bnRvIHxjb250cmFjdGlvblJhbmdlfC4gVGhlIHJ1biBvZiB6ZXJvcyBtdXN0IGJlIGF0IGxlYXN0
IDE2IGJpdHMsCi0vLyBhbmQgaWYgdGhlcmUgaXMgYSB0aWUgdGhlIGZpcnN0IGlzIGNob3Nlbi4K
LXZvaWQgQ2hvb3NlSVB2NkNvbnRyYWN0aW9uUmFuZ2UoY29uc3QgdW5zaWduZWQgY2hhciBhZGRy
ZXNzWzE2XSwgVVJMQ29tcG9uZW50KiBjb250cmFjdGlvblJhbmdlKQotewotICAgIC8vIFRoZSBs
b25nZXN0IHJ1biBvZiB6ZXJvcyBpbiB8YWRkcmVzc3wgc2VlbiBzbyBmYXIuCi0gICAgVVJMQ29t
cG9uZW50IG1heFJhbmdlOwotCi0gICAgLy8gVGhlIGN1cnJlbnQgcnVuIG9mIHplcm9zIGluIHxh
ZGRyZXNzfCBiZWluZyBpdGVyYXRlZCBvdmVyLgotICAgIFVSTENvbXBvbmVudCBjdXJyZW50UmFu
Z2U7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpICs9IDIpIHsKLSAgICAgICAgLy8g
VGVzdCBmb3IgMTYgYml0cyB3b3J0aCBvZiB6ZXJvLgotICAgICAgICBib29sIGlzWmVybyA9ICgh
YWRkcmVzc1tpXSAmJiAhYWRkcmVzc1tpICsgMV0pOwotCi0gICAgICAgIGlmIChpc1plcm8pIHsK
LSAgICAgICAgICAgIC8vIEFkZCB0aGUgemVybyB0byB0aGUgY3VycmVudCByYW5nZSAob3Igc3Rh
cnQgYSBuZXcgb25lKS4KLSAgICAgICAgICAgIGlmICghY3VycmVudFJhbmdlLmlzVmFsaWQoKSkK
LSAgICAgICAgICAgICAgICBjdXJyZW50UmFuZ2UgPSBVUkxDb21wb25lbnQoaSwgMCk7Ci0gICAg
ICAgICAgICBjdXJyZW50UmFuZ2Uuc2V0TGVuZ3RoKGN1cnJlbnRSYW5nZS5sZW5ndGgoKSArIDIp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFpc1plcm8gfHwgaSA9PSAxNCkgewotICAgICAg
ICAgICAgLy8gSnVzdCBjb21wbGV0ZWQgYSBydW4gb2YgemVyb3MuIElmIHRoZSBydW4gaXMgZ3Jl
YXRlciB0aGFuIDE2IGJpdHMsCi0gICAgICAgICAgICAvLyBpdCBpcyBhIGNhbmRpZGF0ZSBmb3Ig
dGhlIGNvbnRyYWN0aW9uLgotICAgICAgICAgICAgaWYgKGN1cnJlbnRSYW5nZS5sZW5ndGgoKSA+
IDIgJiYgY3VycmVudFJhbmdlLmxlbmd0aCgpID4gbWF4UmFuZ2UubGVuZ3RoKCkpCi0gICAgICAg
ICAgICAgICAgbWF4UmFuZ2UgPSBjdXJyZW50UmFuZ2U7Ci0KLSAgICAgICAgICAgIGN1cnJlbnRS
YW5nZS5yZXNldCgpOwotICAgICAgICB9Ci0gICAgfQotICAgICpjb250cmFjdGlvblJhbmdlID0g
bWF4UmFuZ2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRJUHY2QWRkcmVzcyhjb25z
dCB1bnNpZ25lZCBjaGFyIGFkZHJlc3NbMTZdLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKLXsK
LSAgICAvLyBXZSB3aWxsIG91dHB1dCB0aGUgYWRkcmVzcyBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVz
IGluOgotICAgIC8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWthd2FtdXJhLWlw
djYtdGV4dC1yZXByZXNlbnRhdGlvbi0wMSNzZWN0aW9uLTQKLQotICAgIC8vIFN0YXJ0IGJ5IGZp
bmRpbmcgd2hlcmUgdG8gcGxhY2UgdGhlICI6OiIgY29udHJhY3Rpb24gKGlmIGFueSkuCi0gICAg
VVJMQ29tcG9uZW50IGNvbnRyYWN0aW9uUmFuZ2U7Ci0gICAgQ2hvb3NlSVB2NkNvbnRyYWN0aW9u
UmFuZ2UoYWRkcmVzcywgJmNvbnRyYWN0aW9uUmFuZ2UpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPD0gMTQ7KSB7Ci0gICAgICAgIC8vIFdlIGNoZWNrIDIgYnl0ZXMgYXQgYSB0aW1lLCBmcm9t
IGJ5dGVzICgwLCAxKSB0byAoMTQsIDE1KSwgaW5jbHVzaXZlLgotICAgICAgICBBU1NFUlQoIShp
ICUgMikpOwotICAgICAgICBpZiAoaSA9PSBjb250cmFjdGlvblJhbmdlLmJlZ2luKCkgJiYgY29u
dHJhY3Rpb25SYW5nZS5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgIC8vIEp1bXAgb3ZlciB0
aGUgY29udHJhY3Rpb24uCi0gICAgICAgICAgICBpZiAoIWkpCi0gICAgICAgICAgICAgICAgb3V0
cHV0LmFwcGVuZCgnOicpOwotICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnOicpOwotICAgICAg
ICAgICAgaSA9IGNvbnRyYWN0aW9uUmFuZ2UuZW5kKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBDb25zdW1lIHRoZSBuZXh0IDE2IGJpdHMgZnJvbSB8YWRkcmVzc3wuCi0gICAg
ICAgICAgICBpbnQgeCA9IGFkZHJlc3NbaV0gPDwgOCB8IGFkZHJlc3NbaSArIDFdOwotCi0gICAg
ICAgICAgICBpICs9IDI7Ci0KLSAgICAgICAgICAgIC8vIFN0cmluZ2lmeSB0aGUgMTYgYml0IG51
bWJlciAoYXQgbW9zdCByZXF1aXJlcyA0IGhleCBkaWdpdHMpLgotICAgICAgICAgICAgY2hhciBz
dHJbNV07Ci0gICAgICAgICAgICBfaXRvYV9zKHgsIHN0ciwgMTYpOwotICAgICAgICAgICAgZm9y
IChpbnQgY2ggPSAwOyBzdHJbY2hdOyArK2NoKQotICAgICAgICAgICAgICAgIG91dHB1dC5hcHBl
bmQoc3RyW2NoXSk7Ci0KLSAgICAgICAgICAgIC8vIFB1dCBhIGNvbG9uIGFmdGVyIGVhY2ggbnVt
YmVyLCBleGNlcHQgdGhlIGxhc3QuCi0gICAgICAgICAgICBpZiAoaSA8IDE2KQotICAgICAgICAg
ICAgICAgIG91dHB1dC5hcHBlbmQoJzonKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gUmV0
dXJuIHRydWUgaWYgd2UndmUgbWFkZSBhIGZpbmFsIElQVjYvQlJPS0VOIGRlY2lzaW9uLCBmYWxz
ZSBpZiB0aGUgcmVzdWx0Ci0vLyBpcyBORVVUUkFMLCBhbmQgd2UgY291bGQgdXNlIGEgc2Vjb25k
IG9waW5pb24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBVQ0hB
Uj4KLWJvb2wgZG9DYW5vbmljYWxpemVJUHY2QWRkcmVzcyhjb25zdCBDaGFyYWN0ZXJUeXBlKiBz
cGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGhvc3QsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBD
YW5vbkhvc3RJbmZvJiBob3N0SW5mbykKLXsKLSAgICAvLyBUdXJuIHRoZSBJUCBhZGRyZXNzIGlu
dG8gYSAxMjggYml0IG51bWJlci4KLSAgICBpZiAoIWRvSVB2NkFkZHJlc3NUb051bWJlcjxDaGFy
YWN0ZXJUeXBlLCBVQ0hBUj4oc3BlYywgaG9zdCwgaG9zdEluZm8uYWRkcmVzcykpIHsKLSAgICAg
ICAgLy8gSWYgaXQncyBub3QgYW4gSVB2NiBhZGRyZXNzLCBzY2FuIGZvciBjaGFyYWN0ZXJzIHRo
YXQgc2hvdWxkICpvbmx5KgotICAgICAgICAvLyBleGlzdCBpbiBhbiBJUHY2IGFkZHJlc3MuCi0g
ICAgICAgIGZvciAoaW50IGkgPSBob3N0LmJlZ2luKCk7IGkgPCBob3N0LmVuZCgpOyBpKyspIHsK
LSAgICAgICAgICAgIHN3aXRjaCAoc3BlY1tpXSkgewotICAgICAgICAgICAgY2FzZSAnWyc6Ci0g
ICAgICAgICAgICBjYXNlICddJzoKLSAgICAgICAgICAgIGNhc2UgJzonOgotICAgICAgICAgICAg
ICAgIGhvc3RJbmZvLmZhbWlseSA9IENhbm9uSG9zdEluZm86OkJST0tFTjsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8v
IE5vIGludmFsaWQgY2hhcmFjdGVycy4gQ291bGQgc3RpbGwgYmUgSVB2NCBvciBhIGhvc3RuYW1l
LgotICAgICAgICBob3N0SW5mby5mYW1pbHkgPSBDYW5vbkhvc3RJbmZvOjpORVVUUkFMOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaG9zdEluZm8ub3VwdXRIb3N0LnNldEJl
Z2luKG91dHB1dC5sZW5ndGgoKSk7Ci0gICAgb3V0cHV0LmFwcGVuZCgnWycpOwotICAgIGFwcGVu
ZElQdjZBZGRyZXNzKGhvc3RJbmZvLmFkZHJlc3MsIG91dHB1dCk7Ci0gICAgb3V0cHV0LmFwcGVu
ZCgnXScpOwotICAgIGhvc3RJbmZvLm91cHV0SG9zdC5zZXRMZW5ndGgob3V0cHV0Lmxlbmd0aCgp
IC0gaG9zdEluZm8ub3VwdXRIb3N0LmJlZ2luKCkpOwotCi0gICAgaG9zdEluZm8uZmFtaWx5ID0g
Q2Fub25Ib3N0SW5mbzo6SVBWNjsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UKLQotdm9pZCBjYW5vbmljYWxpemVJUEFkZHJlc3MoY29uc3QgY2hhciogc3BlYywgY29uc3Qg
VVJMQ29tcG9uZW50JiBob3N0LCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgQ2Fub25Ib3N0SW5m
byYgaG9zdEluZm8pCi17Ci0gICAgaWYgKGRvQ2Fub25pY2FsaXplSVB2NEFkZHJlc3M8Y2hhciwg
dW5zaWduZWQgY2hhcj4oc3BlYywgaG9zdCwgb3V0cHV0LCBob3N0SW5mbykpCi0gICAgICAgIHJl
dHVybjsKLSAgICBpZiAoZG9DYW5vbmljYWxpemVJUHY2QWRkcmVzczxjaGFyLCB1bnNpZ25lZCBj
aGFyPihzcGVjLCBob3N0LCBvdXRwdXQsIGhvc3RJbmZvKSkKLSAgICAgICAgcmV0dXJuOwotfQot
Ci12b2lkIGNhbm9uaWNhbGl6ZUlQQWRkcmVzcyhjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJM
Q29tcG9uZW50JiBob3N0LCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgQ2Fub25Ib3N0SW5mbyYg
aG9zdEluZm8pCi17Ci0gICAgaWYgKGRvQ2Fub25pY2FsaXplSVB2NEFkZHJlc3M8VUNoYXIsIFVD
aGFyPihzcGVjLCBob3N0LCBvdXRwdXQsIGhvc3RJbmZvKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmIChkb0Nhbm9uaWNhbGl6ZUlQdjZBZGRyZXNzPFVDaGFyLCBVQ2hhcj4oc3BlYywgaG9zdCwg
b3V0cHV0LCBob3N0SW5mbykpCi0gICAgICAgIHJldHVybjsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
VVJMQ2Fub25pY2FsaXplcgotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFVTRShX
VEZVUkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uSW50ZXJu
YWwuY3BwIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbkludGVybmFsLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdhZTA5ODE0ZTg4NGNlZWU0YmJiNTc1ZGI5YmM5
NjQ0NWM0M2IyNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uSW50ZXJuYWwuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMzEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwNyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJVUkxDYW5vbkludGVybmFs
LmgiCi0KLSNpbmNsdWRlIDxjc3RkaW8+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxz
dGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpZiBVU0UoV1RGVVJMKQotCi1uYW1lc3Bh
Y2UgV1RGIHsKLQotbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIgewotCi1uYW1lc3BhY2Ugewot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBVQ0hBUj4KLXZvaWQg
ZG9BcHBlbmRTdHJpbmdPZlR5cGUoY29uc3QgQ2hhcmFjdGVyVHlwZSogc291cmNlLCBpbnQgbGVu
Z3RoLCBVUkxDaGFyYWN0ZXJUeXBlczo6Q2hhcmFjdGVyVHlwZXMgdHlwZSwgVVJMQnVmZmVyPGNo
YXI+JiBvdXRwdXQpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewot
ICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8VUNIQVI+KHNvdXJjZVtpXSkgPj0gMHg4MCkgewotICAg
ICAgICAgICAgLy8gUmVhZENoYXIgd2lsbCBmaWxsIHRoZSBjb2RlIHBvaW50IHdpdGgga1VuaWNv
ZGVSZXBsYWNlbWVudENoYXJhY3RlcgotICAgICAgICAgICAgLy8gd2hlbiB0aGUgaW5wdXQgaXMg
aW52YWxpZCwgd2hpY2ggaXMgd2hhdCB3ZSB3YW50LgotICAgICAgICAgICAgdW5zaWduZWQgY29k
ZVBvaW50OwotICAgICAgICAgICAgcmVhZFVURkNoYXIoc291cmNlLCAmaSwgbGVuZ3RoLCAmY29k
ZVBvaW50KTsKLSAgICAgICAgICAgIEFwcGVuZFVURjhFc2NhcGVkVmFsdWUoY29kZVBvaW50LCBv
dXRwdXQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gSnVzdCBhcHBlbmQgdGhl
IDctYml0IGNoYXJhY3RlciwgcG9zc2libHkgZXNjYXBpbmcgaXQuCi0gICAgICAgICAgICB1bnNp
Z25lZCBjaGFyIHVjaCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHNvdXJjZVtpXSk7Ci0g
ICAgICAgICAgICBpZiAoIVVSTENoYXJhY3RlclR5cGVzOjppc0NoYXJhY3Rlck9mVHlwZSh1Y2gs
IHR5cGUpKQotICAgICAgICAgICAgICAgIGFwcGVuZFVSTEVzY2FwZWRDaGFyYWN0ZXIodWNoLCBv
dXRwdXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQo
dWNoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRo
ZSBpbnB1dCB2YWx1ZXMgYXJlIGFsbCBjb250YWluZWQgaW4gOC1iaXQsCi0vLyBhbHRob3VnaCBp
dCBhbGxvd3MgYW55IHR5cGUuIFJldHVybnMgdHJ1ZSBpZiBpbnB1dCBpcyB2YWxpZCwgZmFsc2Ug
aWYgbm90LgotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgVUNIQVI+
Ci12b2lkIGRvQXBwZW5kSW52YWxpZE5hcnJvd1N0cmluZyhjb25zdCBDaGFyYWN0ZXJUeXBlKiBz
cGVjLCBpbnQgYmVnaW4sIGludCBlbmQsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQotewotICAg
IGZvciAoaW50IGkgPSBiZWdpbjsgaSA8IGVuZDsgKytpKSB7Ci0gICAgICAgIFVDSEFSIHVjaCA9
IHN0YXRpY19jYXN0PFVDSEFSPihzcGVjW2ldKTsKLSAgICAgICAgaWYgKHVjaCA+PSAweDgwKSB7
Ci0gICAgICAgICAgICAvLyBIYW5kbGUgVVRGLTgvMTYgZW5jb2RpbmdzLiBUaGlzIGNhbGwgd2ls
bCBjb3JyZWN0bHkgaGFuZGxlIHRoZSBlcnJvcgotICAgICAgICAgICAgLy8gY2FzZSBieSBhcHBl
bmRpbmcgdGhlIGludmFsaWQgY2hhcmFjdGVyLgotICAgICAgICAgICAgQXBwZW5kVVRGOEVzY2Fw
ZWRDaGFyKHNwZWMsICZpLCBlbmQsIG91dHB1dCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodWNoIDw9
ICcgJyB8fCB1Y2ggPT0gMHg3ZikgewotICAgICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBm
b3IgZXJyb3IgaGFuZGxpbmcsIHNvIHdlIGVzY2FwZSBhbGwgY29udHJvbAotICAgICAgICAgICAg
Ly8gY2hhcmFjdGVycyBhbmQgc3BhY2VzLCBidXQgbm90IGFueXRoaW5nIGVsc2Ugc2luY2Ugd2Ug
bGFjawotICAgICAgICAgICAgLy8gY29udGV4dCB0byBkbyBzb21ldGhpbmcgbW9yZSBzcGVjaWZp
Yy4KLSAgICAgICAgICAgIGFwcGVuZFVSTEVzY2FwZWRDaGFyYWN0ZXIoc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4odWNoKSwgb3V0cHV0KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBv
dXRwdXQuYXBwZW5kKHN0YXRpY19jYXN0PGNoYXI+KHVjaCkpOwotICAgIH0KLX0KLQotLy8gT3Zl
cnJpZGVzIG9uZSBjb21wb25lbnQsIHNlZSB0aGUgVVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZW1l
bnRzIHN0cnVjdHVyZSBmb3IKLS8vIHdoYXQgdGhlIHZhcmlvdXMgY29tYmlvbmF0aW9ucyBvZiBz
b3VyY2UgcG9pbnRlciBhbmQgY29tcG9uZW50IG1lYW4uCi12b2lkIGRvT3ZlcnJpZGVDb21wb25l
bnQoY29uc3QgY2hhciogb3ZlcnJpZGVTb3VyY2UsIGNvbnN0IFVSTENvbXBvbmVudCYgb3ZlcnJp
ZGVDb21wb25lbnQsIGNvbnN0IGNoYXIqJiBkZXN0aW5hdGlvbiwgVVJMQ29tcG9uZW50JiBkZXN0
aW5hdGlvbkNvbXBvbmVudCkKLXsKLSAgICBpZiAob3ZlcnJpZGVTb3VyY2UpIHsKLSAgICAgICAg
ZGVzdGluYXRpb24gPSBvdmVycmlkZVNvdXJjZTsKLSAgICAgICAgZGVzdGluYXRpb25Db21wb25l
bnQgPSBvdmVycmlkZUNvbXBvbmVudDsKLSAgICB9Ci19Ci0KLS8vIFNpbWlsYXIgdG8gZG9PdmVy
cmlkZUNvbXBvbmVudCBleGNlcHQgdGhhdCBpdCB0YWtlcyBhIFVURi0xNiBpbnB1dCBhbmQgZG9l
cwotLy8gbm90IGFjdHVhbGx5IHNldCB0aGUgb3V0cHV0IGNoYXJhY3RlciBwb2ludGVyLgotLy8K
LS8vIFRoZSBpbnB1dCBpcyBjb252ZXJ0ZWQgdG8gVVRGLTggYXQgdGhlIGVuZCBvZiB0aGUgZ2l2
ZW4gYnVmZmVyIGFzIGEgdGVtcG9yYXJ5Ci0vLyBob2xkaW5nIHBsYWNlLiBUaGUgY29tcG9uZW50
IGluZGVudGlmeWluZyB0aGUgcG9ydGlvbiBvZiB0aGUgYnVmZmVyIHVzZWQgaW4KLS8vIHRoZSB8
dXRmOEJ1ZmZlcnwgd2lsbCBiZSBzcGVjaWZpZWQgaW4gfCpkZXN0aW5hdGlvbkNvbXBvbmVudHwu
Ci0vLwotLy8gVGhpcyB3aWxsIG5vdCBhY3R1YWxseSBzZXQgYW55IHxkZXN0fCBwb2ludGVyIGxp
a2UgZG9PdmVycmlkZUNvbXBvbmVudAotLy8gZG9lcyBiZWNhdXNlIGFsbCBvZiB0aGUgcG9pbnRl
cnMgd2lsbCBwb2ludCBpbnRvIHRoZSB8dXRmOEJ1ZmZlcnwsIHdoaWNoCi0vLyBtYXkgZ2V0IHJl
c2l6ZWQgd2hpbGUgd2UncmUgb3ZlcnJpZGluZyBhIHN1YnNlcXVlbnQgY29tcG9uZW50LiBJbnN0
ZWFkLCB0aGUKLS8vIGNhbGxlciBzaG91bGQgdXNlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHx1dGY4
QnVmZmVyfCBhcyB0aGUgc3RyaW5nIHBvaW50ZXIKLS8vIGZvciBhbGwgY29tcG9uZW50cyBvbmNl
IGFsbCBvdmVycmlkZXMgaGF2ZSBiZWVuIHByZXBhcmVkLgotYm9vbCBQcmVwYXJlVVRGMTZPdmVy
cmlkZUNvbXBvbmVudChjb25zdCBVQ2hhciogb3ZlcnJpZGVTb3VyY2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgb3ZlcnJpZGVDb21wb25l
bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYg
dXRmOEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9u
ZW50KiBkZXN0aW5hdGlvbkNvbXBvbmVudCkKLXsKLSAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwot
ICAgIGlmIChvdmVycmlkZVNvdXJjZSkgewotICAgICAgICBpZiAoIW92ZXJyaWRlQ29tcG9uZW50
LmlzVmFsaWQoKSkgewotICAgICAgICAgICAgLy8gTm9uLSJ2YWxpZCIgY29tcG9uZW50IChtZWFu
cyBkZWxldGUpLCBzbyB3ZSBuZWVkIHRvIHByZXNlcnZlIHRoYXQuCi0gICAgICAgICAgICAqZGVz
dGluYXRpb25Db21wb25lbnQgPSBVUkxDb21wb25lbnQoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIC8vIENvbnZlcnQgdG8gVVRGLTguCi0gICAgICAgICAgICBkZXN0aW5hdGlvbkNv
bXBvbmVudC0+c2V0QmVnaW4odXRmOEJ1ZmZlci5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBzdWNj
ZXNzID0gQ29udmVydFVURjE2VG9VVEY4KCZvdmVycmlkZVNvdXJjZVtvdmVycmlkZUNvbXBvbmVu
dC5iZWdpbigpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Zl
cnJpZGVDb21wb25lbnQubGVuZ3RoKCksIHV0ZjhCdWZmZXIpOwotICAgICAgICAgICAgZGVzdGlu
YXRpb25Db21wb25lbnQtPnNldExlbmd0aCh1dGY4QnVmZmVyLmxlbmd0aCgpIC0gZGVzdGluYXRp
b25Db21wb25lbnQtPmJlZ2luKCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBzdWNj
ZXNzOwotfQotCi19IC8vIG5hbWVzcGFjZQotCi1jb25zdCBjaGFyIGtDaGFyVG9IZXhMb29rdXBb
OF0gPSB7Ci0gICAgMCwgLy8gMHgwMCAtIDB4MWYKLSAgICAnMCcsIC8vIDB4MjAgLSAweDNmOiBk
aWdpdHMgMCAtIDkgYXJlIDB4MzAgLSAweDM5Ci0gICAgJ0EnIC0gMTAsIC8vIDB4NDAgLSAweDVm
OiBsZXR0ZXJzIEEgLSBGIGFyZSAweDQxIC0gMHg0NgotICAgICdhJyAtIDEwLCAvLyAweDYwIC0g
MHg3ZjogbGV0dGVycyBhIC0gZiBhcmUgMHg2MSAtIDB4NjYKLSAgICAwLCAvLyAweDgwIC0gMHg5
RgotICAgIDAsIC8vIDB4QTAgLSAweEJGCi0gICAgMCwgLy8gMHhDMCAtIDB4REYKLSAgICAwLCAv
LyAweEUwIC0gMHhGRgotfTsKLQotY29uc3QgVUNoYXIga1VuaWNvZGVSZXBsYWNlbWVudENoYXJh
Y3RlciA9IDB4ZmZmZDsKLQotdm9pZCBhcHBlbmRTdHJpbmdPZlR5cGUoY29uc3QgY2hhciogc291
cmNlLCBpbnQgbGVuZ3RoLCBVUkxDaGFyYWN0ZXJUeXBlczo6Q2hhcmFjdGVyVHlwZXMgdXJsQ29t
cG9uZW50VHlwZSwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCi17Ci0gICAgZG9BcHBlbmRTdHJp
bmdPZlR5cGU8Y2hhciwgdW5zaWduZWQgY2hhcj4oc291cmNlLCBsZW5ndGgsIHVybENvbXBvbmVu
dFR5cGUsIG91dHB1dCk7Ci19Ci0KLXZvaWQgYXBwZW5kU3RyaW5nT2ZUeXBlKGNvbnN0IFVDaGFy
KiBzb3VyY2UsIGludCBsZW5ndGgsIFVSTENoYXJhY3RlclR5cGVzOjpDaGFyYWN0ZXJUeXBlcyB1
cmxDb21wb25lbnRUeXBlLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKLXsKLSAgICBkb0FwcGVu
ZFN0cmluZ09mVHlwZTxVQ2hhciwgVUNoYXI+KHNvdXJjZSwgbGVuZ3RoLCB1cmxDb21wb25lbnRU
eXBlLCBvdXRwdXQpOwotfQotCi12b2lkIEFwcGVuZEludmFsaWROYXJyb3dTdHJpbmcoY29uc3Qg
Y2hhciogc3BlYywgaW50IGJlZ2luLCBpbnQgZW5kLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkK
LXsKLSAgICBkb0FwcGVuZEludmFsaWROYXJyb3dTdHJpbmc8Y2hhciwgdW5zaWduZWQgY2hhcj4o
c3BlYywgYmVnaW4sIGVuZCwgb3V0cHV0KTsKLX0KLQotdm9pZCBBcHBlbmRJbnZhbGlkTmFycm93
U3RyaW5nKGNvbnN0IFVDaGFyKiBzcGVjLCBpbnQgYmVnaW4sIGludCBlbmQsIFVSTEJ1ZmZlcjxj
aGFyPiYgb3V0cHV0KQotewotICAgIGRvQXBwZW5kSW52YWxpZE5hcnJvd1N0cmluZzxVQ2hhciwg
VUNoYXI+KHNwZWMsIGJlZ2luLCBlbmQsIG91dHB1dCk7Ci19Ci0KLWJvb2wgQ29udmVydFVURjE2
VG9VVEY4KGNvbnN0IFVDaGFyKiBpbnB1dCwgaW50IGlucHV0TGVuZ3RoLCBVUkxCdWZmZXI8Y2hh
cj4mIG91dHB1dCkKLXsKLSAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgaW5wdXRMZW5ndGg7ICsraSkgewotICAgICAgICB1bnNpZ25lZCBjb2RlUG9pbnQ7
Ci0gICAgICAgIHN1Y2Nlc3MgJj0gcmVhZFVURkNoYXIoaW5wdXQsICZpLCBpbnB1dExlbmd0aCwg
JmNvZGVQb2ludCk7Ci0gICAgICAgIEFwcGVuZFVURjhWYWx1ZShjb2RlUG9pbnQsIG91dHB1dCk7
Ci0gICAgfQotICAgIHJldHVybiBzdWNjZXNzOwotfQotCi1ib29sIENvbnZlcnRVVEY4VG9VVEYx
Nihjb25zdCBjaGFyKiBpbnB1dCwgaW50IGlucHV0TGVuZ3RoLCBVUkxCdWZmZXI8VUNoYXI+JiBv
dXRwdXQpCi17Ci0gICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IGlucHV0TGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdW5zaWduZWQgY29kZVBvaW50OwotICAg
ICAgICBzdWNjZXNzICY9IHJlYWRVVEZDaGFyKGlucHV0LCAmaSwgaW5wdXRMZW5ndGgsICZjb2Rl
UG9pbnQpOwotICAgICAgICBBcHBlbmRVVEYxNlZhbHVlKGNvZGVQb2ludCwgb3V0cHV0KTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLXZvaWQgU2V0dXBPdmVycmlkZUNvbXBvbmVu
dHMoY29uc3QgY2hhciogLyogYmFzZSAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgUmVwbGFjZW1lbnRzPGNoYXI+JiByZXBsLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBVUkxDb21wb25lbnRTb3VyY2U8Y2hhcj4qIHNvdXJjZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVVJMU2VnbWVudHMqIHBhcnNlZCkKLXsKLSAgICAvLyBHZXQgdGhlIHNvdXJj
ZSBhbmQgcGFyc2VkIHN0cnVjdHVyZXMgb2YgdGhlIHRoaW5ncyB3ZSBhcmUgcmVwbGFjaW5nLgot
ICAgIGNvbnN0IFVSTENvbXBvbmVudFNvdXJjZTxjaGFyPiYgcmVwbFNvdXJjZSA9IHJlcGwuc291
cmNlcygpOwotICAgIGNvbnN0IFVSTFNlZ21lbnRzJiByZXBsUGFyc2VkID0gcmVwbC5jb21wb25l
bnRzKCk7Ci0KLSAgICBkb092ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3VyY2Uuc2NoZW1lLCByZXBs
UGFyc2VkLnNjaGVtZSwgc291cmNlLT5zY2hlbWUsIHBhcnNlZC0+c2NoZW1lKTsKLSAgICBkb092
ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3VyY2UudXNlcm5hbWUsIHJlcGxQYXJzZWQudXNlcm5hbWUs
IHNvdXJjZS0+dXNlcm5hbWUsIHBhcnNlZC0+dXNlcm5hbWUpOwotICAgIGRvT3ZlcnJpZGVDb21w
b25lbnQocmVwbFNvdXJjZS5wYXNzd29yZCwgcmVwbFBhcnNlZC5wYXNzd29yZCwgc291cmNlLT5w
YXNzd29yZCwgcGFyc2VkLT5wYXNzd29yZCk7Ci0KLSAgICAvLyBPdXIgaG9zdCBzaG91bGQgYmUg
ZW1wdHkgaWYgbm90IHByZXNlbnQsIHNvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHNldHVwLgotICAg
IGRvT3ZlcnJpZGVDb21wb25lbnQocmVwbFNvdXJjZS5ob3N0LCByZXBsUGFyc2VkLmhvc3QsIHNv
dXJjZS0+aG9zdCwgcGFyc2VkLT5ob3N0KTsKLSAgICBpZiAocGFyc2VkLT5ob3N0Lmxlbmd0aCgp
ID09IC0xKQotICAgICAgICBwYXJzZWQtPmhvc3Quc2V0TGVuZ3RoKDApOwotCi0gICAgZG9PdmVy
cmlkZUNvbXBvbmVudChyZXBsU291cmNlLnBvcnQsIHJlcGxQYXJzZWQucG9ydCwgc291cmNlLT5w
b3J0LCBwYXJzZWQtPnBvcnQpOwotICAgIGRvT3ZlcnJpZGVDb21wb25lbnQocmVwbFNvdXJjZS5w
YXRoLCByZXBsUGFyc2VkLnBhdGgsIHNvdXJjZS0+cGF0aCwgcGFyc2VkLT5wYXRoKTsKLSAgICBk
b092ZXJyaWRlQ29tcG9uZW50KHJlcGxTb3VyY2UucXVlcnksIHJlcGxQYXJzZWQucXVlcnksIHNv
dXJjZS0+cXVlcnksIHBhcnNlZC0+cXVlcnkpOwotICAgIGRvT3ZlcnJpZGVDb21wb25lbnQocmVw
bFNvdXJjZS5yZWYsIHJlcGxQYXJzZWQuZnJhZ21lbnQsIHNvdXJjZS0+cmVmLCBwYXJzZWQtPmZy
YWdtZW50KTsKLX0KLQotYm9vbCBTZXR1cFVURjE2T3ZlcnJpZGVDb21wb25lbnRzKGNvbnN0IGNo
YXIqIC8qIGJhc2UgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UmVwbGFjZW1lbnRzPFVDaGFyPiYgcmVwbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBVUkxCdWZmZXI8Y2hhcj4mIHV0ZjhCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVVJMQ29tcG9uZW50U291cmNlPGNoYXI+KiBzb3VyY2UsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIHBhcnNlZCkKLSAgICB7Ci0gICAg
ICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBzb3VyY2UgYW5k
IHBhcnNlZCBzdHJ1Y3R1cmVzIG9mIHRoZSB0aGluZ3Mgd2UgYXJlIHJlcGxhY2luZy4KLSAgICAg
ICAgY29uc3QgVVJMQ29tcG9uZW50U291cmNlPFVDaGFyPiYgcmVwbFNvdXJjZSA9IHJlcGwuc291
cmNlcygpOwotICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgcmVwbFBhcnNlZCA9IHJlcGwuY29t
cG9uZW50cygpOwotCi0gICAgICAgIHN1Y2Nlc3MgJj0gUHJlcGFyZVVURjE2T3ZlcnJpZGVDb21w
b25lbnQocmVwbFNvdXJjZS5zY2hlbWUsIHJlcGxQYXJzZWQuc2NoZW1lLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0ZjhCdWZmZXIsICZwYXJzZWQt
PnNjaGVtZSk7Ci0gICAgICAgIHN1Y2Nlc3MgJj0gUHJlcGFyZVVURjE2T3ZlcnJpZGVDb21wb25l
bnQocmVwbFNvdXJjZS51c2VybmFtZSwgcmVwbFBhcnNlZC51c2VybmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGY4QnVmZmVyLCAmcGFyc2Vk
LT51c2VybmFtZSk7Ci0gICAgICAgIHN1Y2Nlc3MgJj0gUHJlcGFyZVVURjE2T3ZlcnJpZGVDb21w
b25lbnQocmVwbFNvdXJjZS5wYXNzd29yZCwgcmVwbFBhcnNlZC5wYXNzd29yZCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGY4QnVmZmVyLCAmcGFy
c2VkLT5wYXNzd29yZCk7Ci0gICAgICAgIHN1Y2Nlc3MgJj0gUHJlcGFyZVVURjE2T3ZlcnJpZGVD
b21wb25lbnQocmVwbFNvdXJjZS5ob3N0LCByZXBsUGFyc2VkLmhvc3QsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRmOEJ1ZmZlciwgJnBhcnNlZC0+
aG9zdCk7Ci0gICAgICAgIHN1Y2Nlc3MgJj0gUHJlcGFyZVVURjE2T3ZlcnJpZGVDb21wb25lbnQo
cmVwbFNvdXJjZS5wb3J0LCByZXBsUGFyc2VkLnBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRmOEJ1ZmZlciwgJnBhcnNlZC0+cG9ydCk7Ci0g
ICAgICAgIHN1Y2Nlc3MgJj0gUHJlcGFyZVVURjE2T3ZlcnJpZGVDb21wb25lbnQocmVwbFNvdXJj
ZS5wYXRoLCByZXBsUGFyc2VkLnBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdXRmOEJ1ZmZlciwgJnBhcnNlZC0+cGF0aCk7Ci0gICAgICAgIHN1
Y2Nlc3MgJj0gUHJlcGFyZVVURjE2T3ZlcnJpZGVDb21wb25lbnQocmVwbFNvdXJjZS5xdWVyeSwg
cmVwbFBhcnNlZC5xdWVyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1dGY4QnVmZmVyLCAmcGFyc2VkLT5xdWVyeSk7Ci0gICAgICAgIHN1Y2Nlc3Mg
Jj0gUHJlcGFyZVVURjE2T3ZlcnJpZGVDb21wb25lbnQocmVwbFNvdXJjZS5yZWYsIHJlcGxQYXJz
ZWQuZnJhZ21lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdXRmOEJ1ZmZlciwgJnBhcnNlZC0+ZnJhZ21lbnQpOwotCi0gICAgICAgIC8vIFByZXBh
cmVVVEYxNk92ZXJyaWRlQ29tcG9uZW50IHdpbGwgbm90IGhhdmUgc2V0IHRoZSBkYXRhIHBvaW50
ZXIgc2luY2UgdGhlCi0gICAgICAgIC8vIGJ1ZmZlciBjb3VsZCBiZSByZXNpemVkLCBpbnZhbGlk
YXRpbmcgdGhlIHBvaW50ZXJzLiBXZSBzZXQgdGhlIGRhdGEKLSAgICAgICAgLy8gcG9pbnRlcnMg
Zm9yIGFmZmVjdGVkIGNvbXBvbmVudHMgbm93IHRoYXQgdGhlIGJ1ZmZlciBpcyBmaW5hbGl6ZWQu
Ci0gICAgICAgIGlmIChyZXBsU291cmNlLnNjaGVtZSkKLSAgICAgICAgICAgIHNvdXJjZS0+c2No
ZW1lID0gdXRmOEJ1ZmZlci5kYXRhKCk7Ci0gICAgICAgIGlmIChyZXBsU291cmNlLnVzZXJuYW1l
KQotICAgICAgICAgICAgc291cmNlLT51c2VybmFtZSA9IHV0ZjhCdWZmZXIuZGF0YSgpOwotICAg
ICAgICBpZiAocmVwbFNvdXJjZS5wYXNzd29yZCkKLSAgICAgICAgICAgIHNvdXJjZS0+cGFzc3dv
cmQgPSB1dGY4QnVmZmVyLmRhdGEoKTsKLSAgICAgICAgaWYgKHJlcGxTb3VyY2UuaG9zdCkKLSAg
ICAgICAgICAgIHNvdXJjZS0+aG9zdCA9IHV0ZjhCdWZmZXIuZGF0YSgpOwotICAgICAgICBpZiAo
cmVwbFNvdXJjZS5wb3J0KQotICAgICAgICAgICAgc291cmNlLT5wb3J0ID0gdXRmOEJ1ZmZlci5k
YXRhKCk7Ci0gICAgICAgIGlmIChyZXBsU291cmNlLnBhdGgpCi0gICAgICAgICAgICBzb3VyY2Ut
PnBhdGggPSB1dGY4QnVmZmVyLmRhdGEoKTsKLSAgICAgICAgaWYgKHJlcGxTb3VyY2UucXVlcnkp
Ci0gICAgICAgICAgICBzb3VyY2UtPnF1ZXJ5ID0gdXRmOEJ1ZmZlci5kYXRhKCk7Ci0gICAgICAg
IGlmIChyZXBsU291cmNlLnJlZikKLSAgICAgICAgICAgIHNvdXJjZS0+cmVmID0gdXRmOEJ1ZmZl
ci5kYXRhKCk7Ci0KLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLSNpZiAhT1MoV0lORE9X
UykKLWludCBfaXRvYV9zKGludCB2YWx1ZSwgY2hhciogYnVmZmVyLCBzaXplX3Qgc2l6ZUluQ2hh
cnMsIGludCByYWRpeCkKLXsKLSAgICBpbnQgd3JpdHRlbjsKLSAgICBpZiAocmFkaXggPT0gMTAp
Ci0gICAgICAgIHdyaXR0ZW4gPSBzbnByaW50ZihidWZmZXIsIHNpemVJbkNoYXJzLCAiJWQiLCB2
YWx1ZSk7Ci0gICAgZWxzZSBpZiAocmFkaXggPT0gMTYpCi0gICAgICAgIHdyaXR0ZW4gPSBzbnBy
aW50ZihidWZmZXIsIHNpemVJbkNoYXJzLCAiJXgiLCB2YWx1ZSk7Ci0gICAgZWxzZQotICAgICAg
ICByZXR1cm4gRUlOVkFMOwotCi0gICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4od3JpdHRlbikg
Pj0gc2l6ZUluQ2hhcnMpIHsKLSAgICAgICAgLy8gT3V0cHV0IHdhcyB0cnVuY2F0ZWQsIG9yIHdy
aXR0ZW4gd2FzIG5lZ2F0aXZlLgotICAgICAgICByZXR1cm4gRUlOVkFMOwotICAgIH0KLSAgICBy
ZXR1cm4gMDsKLX0KLQotaW50IF9pdG93X3MoaW50IHZhbHVlLCBVQ2hhciogYnVmZmVyLCBzaXpl
X3Qgc2l6ZUluQ2hhcnMsIGludCByYWRpeCkKLXsKLSAgICBpZiAocmFkaXggIT0gMTApCi0gICAg
ICAgIHJldHVybiBFSU5WQUw7Ci0KLSAgICAvLyBObyBtb3JlIHRoYW4gMTIgY2hhcmFjdGVycyB3
aWxsIGJlIHJlcXVpcmVkIGZvciBhIDMyLWJpdCBpbnRlZ2VyLgotICAgIC8vIEFkZCBhbiBleHRy
YSBieXRlIGZvciB0aGUgdGVybWluYXRpbmcgbnVsbC4KLSAgICBjaGFyIHRlbXBbMTNdOwotICAg
IGludCB3cml0dGVuID0gc25wcmludGYodGVtcCwgc2l6ZW9mKHRlbXApLCAiJWQiLCB2YWx1ZSk7
Ci0gICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4od3JpdHRlbikgPj0gc2l6ZUluQ2hhcnMpIHsK
LSAgICAgICAgLy8gT3V0cHV0IHdhcyB0cnVuY2F0ZWQsIG9yIHdyaXR0ZW4gd2FzIG5lZ2F0aXZl
LgotICAgICAgICByZXR1cm4gRUlOVkFMOwotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgd3JpdHRlbjsgKytpKQotICAgICAgICBidWZmZXJbaV0gPSBzdGF0aWNfY2FzdDxVQ2hhcj4o
dGVtcFtpXSk7Ci0gICAgYnVmZmVyW3dyaXR0ZW5dID0gJ1wwJzsKLSAgICByZXR1cm4gMDsKLX0K
LQotI2VuZGlmIC8vICFPUyhXSU5ET1dTKQotCi19IC8vIG5hbWVzcGFjZSBVUkxDYW5vbmljYWxp
emVyCi0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gVVNFKFdURlVSTCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25JbnRlcm5hbC5oIGIvU291cmNl
L1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbkludGVybmFsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDliMjk3MDYzMjE2NzM0ODA5OGY5MDc5Y2Q5Mjg0ODJjOThjMGUxZGYuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYv
dXJsL3NyYy9VUkxDYW5vbkludGVybmFsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOTQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3Ry
aWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gVGhpcyBm
aWxlIGlzIGludGVuZGVkIHRvIGJlIGluY2x1ZGVkIGluIGFub3RoZXIgQysrIGZpbGUgd2hlcmUg
dGhlIGNoYXJhY3RlcgotLy8gdHlwZXMgYXJlIGRlZmluZWQuIFRoaXMgYWxsb3dzIHVzIHRvIHdy
aXRlIG1vc3RseSBnZW5lcmljIGNvZGUsIGJ1dCBub3QgaGF2ZQotLy8gdGVtcGxhY2UgYmxvYXQg
YmVjYXVzZSBldmVyeXRoaW5nIGlzIGlubGluZWQgd2hlbiBhbnlib2R5IGNhbGxzIGFueSBvZiBv
dXIKLS8vIGZ1bmN0aW9ucy4KLQotI2lmbmRlZiBVUkxDYW5vbkludGVybmFsX2gKLSNkZWZpbmUg
VVJMQ2Fub25JbnRlcm5hbF9oCi0KLSNpbmNsdWRlICJVUkxDYW5vbi5oIgotI2luY2x1ZGUgIlVS
TENoYXJhY3RlclR5cGVzLmgiCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8d3RmL0hl
eE51bWJlci5oPgotCi0jaWYgVVNFKFdURlVSTCkKLQotbmFtZXNwYWNlIFdURiB7Ci0KLW5hbWVz
cGFjZSBVUkxDYW5vbmljYWxpemVyIHsKLQotLy8gQXBwZW5kcyB0aGUgZ2l2ZW4gc3RyaW5nIHRv
IHRoZSBvdXRwdXQsIGVzY2FwaW5nIGNoYXJhY3RlcnMgdGhhdCBkbyBub3QKLS8vIG1hdGNoIHRo
ZSBnaXZlbiB8dHlwZXwgaW4gU2hhcmVkQ2hhclR5cGVzLgotdm9pZCBhcHBlbmRTdHJpbmdPZlR5
cGUoY29uc3QgY2hhciogc291cmNlLCBpbnQgbGVuZ3RoLCBVUkxDaGFyYWN0ZXJUeXBlczo6Q2hh
cmFjdGVyVHlwZXMgdXJsQ29tcG9uZW50VHlwZSwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpOwot
dm9pZCBhcHBlbmRTdHJpbmdPZlR5cGUoY29uc3QgVUNoYXIqIHNvdXJjZSwgaW50IGxlbmd0aCwg
VVJMQ2hhcmFjdGVyVHlwZXM6OkNoYXJhY3RlclR5cGVzIHVybENvbXBvbmVudFR5cGUsIFVSTEJ1
ZmZlcjxjaGFyPiYgb3V0cHV0KTsKLQotLy8gVGhpcyBsb29rdXAgdGFibGUgYWxsb3dzIGZhc3Qg
Y29udmVyc2lvbiBiZXR3ZWVuIEFTQ0lJIGhleCBsZXR0ZXJzIGFuZCB0aGVpcgotLy8gY29ycmVz
cG9uZGluZyBudW1lcmljYWwgdmFsdWUuIFRoZSA4LWJpdCByYW5nZSBpcyBkaXZpZGVkIHVwIGlu
dG8gOAotLy8gcmVnaW9ucyBvZiAweDIwIGNoYXJhY3RlcnMgZWFjaC4gRWFjaCBvZiB0aGUgdGhy
ZWUgY2hhcmFjdGVyIHR5cGVzIChudW1iZXJzLAotLy8gdXBwZXJjYXNlLCBsb3dlcmNhc2UpIGZh
bGxzIGludG8gZGlmZmVyZW50IHJlZ2lvbnMgb2YgdGhpcyByYW5nZS4gVGhlIHRhYmxlCi0vLyBj
b250YWlucyB0aGUgYW1vdW50IHRvIHN1YnRyYWN0IGZyb20gY2hhcmFjdGVycyBpbiB0aGF0IHJh
bmdlIHRvIGdldCBhdAotLy8gdGhlIGNvcnJlc3BvbmRpbmcgbnVtZXJpY2FsIHZhbHVlLgotLy8K
LS8vIFNlZSBIZXhEaWdpdFRvVmFsdWUgZm9yIHRoZSBsb29rdXAuCi1leHRlcm4gY29uc3QgY2hh
ciBrQ2hhclRvSGV4TG9va3VwWzhdOwotCi0vLyBBc3N1bWVzIHRoZSBpbnB1dCBpcyBhIHZhbGlk
IGhleCBkaWdpdCEgQ2FsbCBpc0hleENoYXIgYmVmb3JlIHVzaW5nIHRoaXMuCi1pbmxpbmUgdW5z
aWduZWQgY2hhciBoZXhDaGFyVG9WYWx1ZSh1bnNpZ25lZCBjaGFyIGNoYXJhY3RlcikKLXsKLSAg
ICByZXR1cm4gY2hhcmFjdGVyIC0ga0NoYXJUb0hleExvb2t1cFtjaGFyYWN0ZXIgLyAweDIwXTsK
LX0KLQotLy8gSW5kaWNhdGVzIGlmIHRoZSBnaXZlbiBjaGFyYWN0ZXIgaXMgYSBkb3Qgb3IgZG90
IGVxdWl2YWxlbnQsIHJldHVybmluZyB0aGUKLS8vIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRha2Vu
IGJ5IGl0LiBUaGlzIHdpbGwgYmUgb25lIGZvciBhIGxpdGVyYWwgZG90LCAzIGZvcgotLy8gYW4g
ZXNjYXBlZCBkb3QuIElmIHRoZSBjaGFyYWN0ZXIgaXMgbm90IGEgZG90LCB0aGlzIHdpbGwgcmV0
dXJuIDAuCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIGludCBpc0Rv
dChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBpbnQgb2Zmc2V0LCBpbnQgZW5kKQotewotICAg
IGlmIChzcGVjW29mZnNldF0gPT0gJy4nKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIGlmIChz
cGVjW29mZnNldF0gPT0gJyUnICYmIG9mZnNldCArIDMgPD0gZW5kICYmIHNwZWNbb2Zmc2V0ICsg
MV0gPT0gJzInICYmIChzcGVjW29mZnNldCArIDJdID09ICdlJyB8fCBzcGVjW29mZnNldCArIDJd
ID09ICdFJykpIHsKLSAgICAgICAgLy8gRm91bmQgIiUyZSIKLSAgICAgICAgcmV0dXJuIDM7Ci0g
ICAgfQotICAgIHJldHVybiAwOwotfQotCi0vLyBSZXR1cm5zIHRoZSBjYW5vbmljYWxpemVkIHZl
cnNpb24gb2YgdGhlIGlucHV0IGNoYXJhY3RlciBhY2NvcmRpbmcgdG8gc2NoZW1lCi0vLyBydWxl
cy4gVGhpcyBpcyBpbXBsZW1lbnRlZCBhbG9uZ3NpZGUgdGhlIHNjaGVtZSBjYW5vbmljYWxpemVy
LCBhbmQgaXMKLS8vIHJlcXVpcmVkIGZvciByZWxhdGl2ZSBVUkwgcmVzb2x2aW5nIHRvIHRlc3Qg
Zm9yIHNjaGVtZSBlcXVhbGl0eS4KLS8vCi0vLyBSZXR1cm5zIDAgaWYgdGhlIGlucHV0IGNoYXJh
Y3RlciBpcyBub3QgYSB2YWxpZCBzY2hlbWUgY2hhcmFjdGVyLgotY2hhciBjYW5vbmljYWxTY2hl
bWVDaGFyKFVDaGFyKTsKLQotLy8gV3JpdGUgYSBzaW5nbGUgY2hhcmFjdGVyLCBlc2NhcGVkLCB0
byB0aGUgb3V0cHV0LiBUaGlzIGFsd2F5cyBlc2NhcGVzOiBpdAotLy8gZG9lcyBubyBjaGVja2lu
ZyB0aGF0IHRoZWUgY2hhcmFjdGVyIHJlcXVpcmVzIGVzY2FwaW5nLgotLy8gRXNjYXBpbmcgbWFr
ZXMgc2Vuc2Ugb25seSA4IGJpdCBjaGFycywgc28gY29kZSB3b3JrcyBpbiBhbGwgY2FzZXMgb2YK
LS8vIGlucHV0IHBhcmFtZXRlcnMgKDgvMTZiaXQpLgotdGVtcGxhdGU8dHlwZW5hbWUgSW5DaGFy
LCB0eXBlbmFtZSBPdXRDaGFyPgotaW5saW5lIHZvaWQgYXBwZW5kVVJMRXNjYXBlZENoYXJhY3Rl
cihJbkNoYXIgY2hhcmFjdGVyLCBVUkxCdWZmZXI8T3V0Q2hhcj4mIGJ1ZmZlcikKLXsKLSAgICBi
dWZmZXIuYXBwZW5kKCclJyk7Ci0gICAgYnVmZmVyLmFwcGVuZChXVEY6OkludGVybmFsOjp1cHBl
ckhleERpZ2l0c1tjaGFyYWN0ZXIgPj4gNF0pOwotICAgIGJ1ZmZlci5hcHBlbmQoV1RGOjpJbnRl
cm5hbDo6dXBwZXJIZXhEaWdpdHNbY2hhcmFjdGVyICYgMHhmXSk7Ci19Ci0KLS8vIFRoZSBjaGFy
YWN0ZXIgd2UnbGwgc3Vic3RpdHV0ZSBmb3IgdW5kZWNvZGFibGUgb3IgaW52YWxpZCBjaGFyYWN0
ZXJzLgotZXh0ZXJuIGNvbnN0IFVDaGFyIGtVbmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXI7Ci0K
LS8vIFVURi04IGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gUmVhZHMgb25lIGNoYXJhY3RlciBpbiBVVEYt
OCBzdGFydGluZyBhdCB8KmJlZ2lufCBpbiB8c3RyfCBhbmQgcGxhY2VzCi0vLyB0aGUgZGVjb2Rl
ZCB2YWx1ZSBpbnRvIHwqY29kZVBvaW50fC4gSWYgdGhlIGNoYXJhY3RlciBpcyB2YWxpZCwgd2Ug
d2lsbAotLy8gcmV0dXJuIHRydWUuIElmIGludmFsaWQsIHdlJ2xsIHJldHVybiBmYWxzZSBhbmQg
cHV0IHRoZQotLy8ga1VuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlciBpbnRvIHwqY29kZVBvaW50
fC4KLS8vCi0vLyB8KmJlZ2lufCB3aWxsIGJlIHVwZGF0ZWQgdG8gcG9pbnQgdG8gdGhlIGxhc3Qg
Y2hhcmFjdGVyIGNvbnN1bWVkIHNvIGl0Ci0vLyBjYW4gYmUgaW5jcmVtZW50ZWQgaW4gYSBsb29w
IGFuZCB3aWxsIGJlIHJlYWR5IGZvciB0aGUgbmV4dCBjaGFyYWN0ZXIuCi0vLyAoZm9yIGEgc2lu
Z2xlLWJ5dGUgQVNDSUkgY2hhcmFjdGVyLCBpdCB3aWxsIG5vdCBiZSBjaGFuZ2VkKS4KLS8vCi0v
LyBJbXBsZW1lbnRhdGlvbiBpcyBpbiBVUkxDYW5vbmljYWxpemVyX2ljdS5jYy4KLWJvb2wgcmVh
ZFVURkNoYXIoY29uc3QgY2hhciogc3RyLCBpbnQqIGJlZ2luLCBpbnQgbGVuZ3RoLCB1bnNpZ25l
ZCogY29kZVBvaW50T3V0KTsKLQotLy8gR2VuZXJpYyBUby1VVEYtOCBjb252ZXJ0ZXIuIFRoaXMg
d2lsbCBjYWxsIHRoZSBnaXZlbiBhcHBlbmQgbWV0aG9kIGZvciBlYWNoCi0vLyBjaGFyYWN0ZXIg
dGhhdCBzaG91bGQgYmUgYXBwZW5kZWQsIHdpdGggdGhlIGdpdmVuIG91dHB1dCBtZXRob2QuIFdy
YXBwZXJzCi0vLyBhcmUgcHJvdmlkZWQgYmVsb3cgZm9yIGVzY2FwZWQgYW5kIG5vbi1lc2NhcGVk
IHZlcnNpb25zIG9mIHRoaXMuCi0vLwotLy8gVGhlIGNoYXJhY3RlcnZhbHVlIG11c3QgaGF2ZSBh
bHJlYWR5IGJlZW4gY2hlY2tlZCB0aGF0IGl0J3MgYSB2YWxpZCBVbmljb2RlCi0vLyBjaGFyYWN0
ZXIuCi10ZW1wbGF0ZTxjbGFzcyBPdXRwdXQsIHZvaWQgYXBwZW5kRnVuY3Rpb24odW5zaWduZWQg
Y2hhciwgT3V0cHV0Jik+Ci1pbmxpbmUgdm9pZCBkb0FwcGVuZFVURjgodW5zaWduZWQgY2hhcmFj
dGVydmFsdWUsIE91dHB1dCYgb3V0cHV0KQotewotICAgIGlmIChjaGFyYWN0ZXJ2YWx1ZSA8PSAw
eDdmKSB7Ci0gICAgICAgIGFwcGVuZEZ1bmN0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+
KGNoYXJhY3RlcnZhbHVlKSwgb3V0cHV0KTsKLSAgICB9IGVsc2UgaWYgKGNoYXJhY3RlcnZhbHVl
IDw9IDB4N2ZmKSB7Ci0gICAgICAgIC8vIDExMHh4eHh4IDEweHh4eHh4Ci0gICAgICAgIGFwcGVu
ZEZ1bmN0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDB4QzAgfCAoY2hhcmFjdGVydmFs
dWUgPj4gNikpLCBvdXRwdXQpOwotICAgICAgICBhcHBlbmRGdW5jdGlvbihzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPigweDgwIHwgKGNoYXJhY3RlcnZhbHVlICYgMHgzZikpLCBvdXRwdXQpOwot
ICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVydmFsdWUgPD0gMHhmZmZmKSB7Ci0gICAgICAgIC8vIDEx
MTB4eHh4IDEweHh4eHh4IDEweHh4eHh4Ci0gICAgICAgIGFwcGVuZEZ1bmN0aW9uKHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KDB4ZTAgfCAoY2hhcmFjdGVydmFsdWUgPj4gMTIpKSwgb3V0cHV0
KTsKLSAgICAgICAgYXBwZW5kRnVuY3Rpb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMHg4
MCB8ICgoY2hhcmFjdGVydmFsdWUgPj4gNikgJiAweDNmKSksIG91dHB1dCk7Ci0gICAgICAgIGFw
cGVuZEZ1bmN0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDB4ODAgfCAoY2hhcmFjdGVy
dmFsdWUgJiAweDNmKSksIG91dHB1dCk7Ci0gICAgfSBlbHNlIGlmIChjaGFyYWN0ZXJ2YWx1ZSA8
PSAweDEwRkZGRikgeyAvLyBNYXggdW5pY29kZSBjb2RlIHBvaW50LgotICAgICAgICAvLyAxMTEx
MHh4eCAxMHh4eHh4eCAxMHh4eHh4eCAxMHh4eHh4eAotICAgICAgICBhcHBlbmRGdW5jdGlvbihz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigweGYwIHwgKGNoYXJhY3RlcnZhbHVlID4+IDE4KSks
IG91dHB1dCk7Ci0gICAgICAgIGFwcGVuZEZ1bmN0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KDB4ODAgfCAoKGNoYXJhY3RlcnZhbHVlID4+IDEyKSAmIDB4M2YpKSwgb3V0cHV0KTsKLSAg
ICAgICAgYXBwZW5kRnVuY3Rpb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMHg4MCB8ICgo
Y2hhcmFjdGVydmFsdWUgPj4gNikgJiAweDNmKSksIG91dHB1dCk7Ci0gICAgICAgIGFwcGVuZEZ1
bmN0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDB4ODAgfCAoY2hhcmFjdGVydmFsdWUg
JiAweDNmKSksIG91dHB1dCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSW52YWxpZCBVVEYt
OCBjaGFyYWN0ZXIgKD4yMCBiaXRzKS4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgfQotfQotCi0vLyBIZWxwZXIgdXNlZCBieSBBcHBlbmRVVEY4VmFsdWUgYmVsb3cuIFdlIHVz
ZSBhbiB1bnNpZ25lZCBwYXJhbWV0ZXIgc28gdGhlcmUKLS8vIGFyZSBubyBmdW5ueSBzaWduIHBy
b2JsZW1zIHdpdGggdGhlIGlucHV0LCBidXQgdGhlbiBoYXZlIHRvIGNvbnZlcnQgaXQgdG8KLS8v
IGEgcmVndWxhciBjaGFyIGZvciBhcHBlbmRpbmcuCi1pbmxpbmUgdm9pZCBBcHBlbmRDaGFyVG9P
dXRwdXQodW5zaWduZWQgY2hhciBjaGFyYWN0ZXIsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQot
ewotICAgIG91dHB1dC5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4oY2hhcmFjdGVyKSk7Ci19Ci0K
LS8vIFdyaXRlcyB0aGUgZ2l2ZW4gY2hhcmFjdGVyIHRvIHRoZSBvdXRwdXQgYXMgVVRGLTguIFRo
aXMgZG9lcyBOTyBjaGVja2luZwotLy8gb2YgdGhlIHZhbGlkaXR5IG9mIHRoZSB1bmljb2RlIGNo
YXJhY3RlcnM7IHRoZSBjYWxsZXIgc2hvdWxkIGVuc3VyZSB0aGF0Ci0vLyB0aGUgdmFsdWUgaXQg
aXMgYXBwZW5kaW5nIGlzIHZhbGlkIHRvIGFwcGVuZC4KLWlubGluZSB2b2lkIEFwcGVuZFVURjhW
YWx1ZSh1bnNpZ25lZCBjaGFyYWN0ZXJ2YWx1ZSwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpCi17
Ci0gICAgZG9BcHBlbmRVVEY4PFVSTEJ1ZmZlcjxjaGFyPiwgQXBwZW5kQ2hhclRvT3V0cHV0Pihj
aGFyYWN0ZXJ2YWx1ZSwgb3V0cHV0KTsKLX0KLQotLy8gV3JpdGVzIHRoZSBnaXZlbiBjaGFyYWN0
ZXIgdG8gdGhlIG91dHB1dCBhcyBVVEYtOCwgZXNjYXBpbmcgQUxMCi0vLyBjaGFyYWN0ZXJzIChl
dmVuIHdoZW4gdGhleSBhcmUgQVNDSUkpLiBUaGlzIGRvZXMgTk8gY2hlY2tpbmcgb2YgdGhlCi0v
LyB2YWxpZGl0eSBvZiB0aGUgdW5pY29kZSBjaGFyYWN0ZXJzOyB0aGUgY2FsbGVyIHNob3VsZCBl
bnN1cmUgdGhhdCB0aGUgdmFsdWUKLS8vIGl0IGlzIGFwcGVuZGluZyBpcyB2YWxpZCB0byBhcHBl
bmQuCi1pbmxpbmUgdm9pZCBBcHBlbmRVVEY4RXNjYXBlZFZhbHVlKHVuc2lnbmVkIGNoYXJhY3Rl
cnZhbHVlLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKLXsKLSAgICBkb0FwcGVuZFVURjg8VVJM
QnVmZmVyPGNoYXI+LCBhcHBlbmRVUkxFc2NhcGVkQ2hhcmFjdGVyPihjaGFyYWN0ZXJ2YWx1ZSwg
b3V0cHV0KTsKLX0KLQotLy8gVVRGLTE2IGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBSZWFkcyBvbmUgY2hh
cmFjdGVyIGluIFVURi0xNiBzdGFydGluZyBhdCB8KmJlZ2lufCBpbiB8c3RyfCBhbmQgcGxhY2Vz
Ci0vLyB0aGUgZGVjb2RlZCB2YWx1ZSBpbnRvIHwqY29kZVBvaW50fC4gSWYgdGhlIGNoYXJhY3Rl
ciBpcyB2YWxpZCwgd2Ugd2lsbAotLy8gcmV0dXJuIHRydWUuIElmIGludmFsaWQsIHdlJ2xsIHJl
dHVybiBmYWxzZSBhbmQgcHV0IHRoZQotLy8ga1VuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlciBp
bnRvIHwqY29kZVBvaW50fC4KLS8vCi0vLyB8KmJlZ2lufCB3aWxsIGJlIHVwZGF0ZWQgdG8gcG9p
bnQgdG8gdGhlIGxhc3QgY2hhcmFjdGVyIGNvbnN1bWVkIHNvIGl0Ci0vLyBjYW4gYmUgaW5jcmVt
ZW50ZWQgaW4gYSBsb29wIGFuZCB3aWxsIGJlIHJlYWR5IGZvciB0aGUgbmV4dCBjaGFyYWN0ZXIu
Ci0vLyAoZm9yIGEgc2luZ2xlLTE2LWJpdC13b3JkIGNoYXJhY3RlciwgaXQgd2lsbCBub3QgYmUg
Y2hhbmdlZCkuCi0vLwotLy8gSW1wbGVtZW50YXRpb24gaXMgaW4gVVJMQ2Fub25pY2FsaXplcl9p
Y3UuY2MuCi1ib29sIHJlYWRVVEZDaGFyKGNvbnN0IFVDaGFyKiBzdHIsIGludCogYmVnaW4sIGlu
dCBsZW5ndGgsIHVuc2lnbmVkKiBjb2RlUG9pbnQpOwotCi0vLyBFcXVpdmFsZW50IHRvIFUxNl9B
UFBFTkRfVU5TQUZFIGluIElDVSBidXQgdXNlcyBvdXIgb3V0cHV0IG1ldGhvZC4KLWlubGluZSB2
b2lkIEFwcGVuZFVURjE2VmFsdWUodW5zaWduZWQgY29kZVBvaW50LCBVUkxCdWZmZXI8VUNoYXI+
JiBvdXRwdXQpCi17Ci0gICAgaWYgKGNvZGVQb2ludCA+IDB4ZmZmZikgewotICAgICAgICBvdXRw
dXQuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPigoY29kZVBvaW50ID4+IDEwKSArIDB4ZDdjMCkp
OwotICAgICAgICBvdXRwdXQuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPigoY29kZVBvaW50ICYg
MHgzZmYpIHwgMHhkYzAwKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG91dHB1dC5hcHBlbmQoc3Rh
dGljX2Nhc3Q8VUNoYXI+KGNvZGVQb2ludCkpOwotfQotCi0vLyBFc2NhcGluZyBmdW5jdGlvbnMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLS8vIFdyaXRlcyB0aGUgZ2l2ZW4gY2hhcmFjdGVyIHRvIHRoZSBvdXRwdXQgYXMgVVRGLTgs
IGVzY2FwZWQuIENhbGwgdGhpcwotLy8gZnVuY3Rpb24gb25seSB3aGVuIHRoZSBpbnB1dCBpcyB3
aWRlLiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4gRmFpbHVyZQotLy8gbWVhbnMgdGhlcmUgd2Fz
IHNvbWUgcHJvYmxlbSB3aXRoIHRoZSBlbmNvZGluZywgd2UnbGwgc3RpbGwgdHJ5IHRvCi0vLyB1
cGRhdGUgdGhlIHwqYmVnaW58IHBvaW50ZXIgYW5kIGFkZCBhIHBsYWNlaG9sZGVyIGNoYXJhY3Rl
ciB0byB0aGUKLS8vIG91dHB1dCBzbyBwcm9jZXNzaW5nIGNhbiBjb250aW51ZS4KLS8vCi0vLyBX
ZSB3aWxsIGFwcGVuZCB0aGUgY2hhcmFjdGVyIHN0YXJ0aW5nIGF0IGNoW2JlZ2luXSB3aXRoIHRo
ZSBidWZmZXIgY2gKLS8vIGJlaW5nIHxsZW5ndGh8LiB8KmJlZ2lufCB3aWxsIGJlIHVwZGF0ZWQg
dG8gcG9pbnQgdG8gdGhlIGxhc3QgY2hhcmFjdGVyCi0vLyBjb25zdW1lZCAod2UgbWF5IGNvbnN1
bWUgbW9yZSB0aGFuIG9uZSBmb3IgVVRGLTE2KSBzbyB0aGF0IGlmIGNhbGxlZCBpbgotLy8gYSBs
b29wLCBpbmNyZW1lbnRpbmcgdGhlIHBvaW50ZXIgd2lsbCBtb3ZlIHRvIHRoZSBuZXh0IGNoYXJh
Y3Rlci4KLS8vCi0vLyBFdmVyeSBzaW5nbGUgb3V0cHV0IGNoYXJhY3RlciB3aWxsIGJlIGVzY2Fw
ZWQuIFRoaXMgbWVhbnMgdGhhdCBpZiB5b3UKLS8vIGdpdmUgaXQgYW4gQVNDSUkgY2hhcmFjdGVy
IGFzIGlucHV0LCBpdCB3aWxsIGJlIGVzY2FwZWQuIFNvbWUgY29kZSB1c2VzCi0vLyB0aGlzIHdo
ZW4gaXQga25vd3MgdGhhdCBhIGNoYXJhY3RlciBpcyBpbnZhbGlkIGFjY29yZGluZyB0byBpdHMg
cnVsZXMKLS8vIGZvciB2YWxpZGl0eS4gSWYgeW91IGRvbid0IHdhbnQgZXNjYXBpbmcgZm9yIEFT
Q0lJIGNoYXJhY3RlcnMsIHlvdSB3aWxsCi0vLyBoYXZlIHRvIGZpbHRlciB0aGVtIG91dCBwcmlv
ciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCi0vLwotLy8gQXNzdW1lcyB0aGF0IGNoW2JlZ2lu
XSBpcyB3aXRoaW4gcmFuZ2UgaW4gdGhlIGFycmF5LCBidXQgZG9lcyBub3QgYXNzdW1lCi0vLyB0
aGF0IGFueSBmb2xsb3dpbmcgY2hhcmFjdGVycyBhcmUuCi1pbmxpbmUgYm9vbCBBcHBlbmRVVEY4
RXNjYXBlZENoYXIoY29uc3QgVUNoYXIqIHN0ciwgaW50KiBiZWdpbiwgaW50IGxlbmd0aCwgVVJM
QnVmZmVyPGNoYXI+JiBvdXRwdXQpCi17Ci0gICAgLy8gVVRGLTE2IGlucHV0LiBSZWFkVUNoYXIg
d2lsbCBoYW5kbGUgaW52YWxpZCBjaGFyYWN0ZXJzIGZvciB1cyBhbmQgZ2l2ZQotICAgIC8vIHVz
IHRoZSBrVW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRv
IHNwZWNpYWwKLSAgICAvLyBjaGVja2luZyBhZnRlciBmYWlsdXJlLCBqdXN0IHBhc3MgdGhyb3Vn
aCB0aGUgZmFpbHVyZSB0byB0aGUgY2FsbGVyLgotICAgIHVuc2lnbmVkIGNoYXJhY3RlcnZhbHVl
OwotICAgIGJvb2wgc3VjY2VzcyA9IHJlYWRVVEZDaGFyKHN0ciwgYmVnaW4sIGxlbmd0aCwgJmNo
YXJhY3RlcnZhbHVlKTsKLSAgICBBcHBlbmRVVEY4RXNjYXBlZFZhbHVlKGNoYXJhY3RlcnZhbHVl
LCBvdXRwdXQpOwotICAgIHJldHVybiBzdWNjZXNzOwotfQotCi0vLyBIYW5kbGVzIFVURi04IGlu
cHV0LiBTZWUgdGhlIHdpZGUgdmVyc2lvbiBhYm92ZSBmb3IgdXNhZ2UuCi1pbmxpbmUgYm9vbCBB
cHBlbmRVVEY4RXNjYXBlZENoYXIoY29uc3QgY2hhciogc3RyLCBpbnQqIGJlZ2luLCBpbnQgbGVu
Z3RoLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKLXsKLSAgICAvLyBSZWFkVVRGOENoYXIgd2ls
bCBoYW5kbGUgaW52YWxpZCBjaGFyYWN0ZXJzIGZvciB1cyBhbmQgZ2l2ZSB1cyB0aGUKLSAgICAv
LyBrVW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRvIHNw
ZWNpYWwgY2hlY2tpbmcKLSAgICAvLyBhZnRlciBmYWlsdXJlLCBqdXN0IHBhc3MgdGhyb3VnaCB0
aGUgZmFpbHVyZSB0byB0aGUgY2FsbGVyLgotICAgIHVuc2lnbmVkIGNoOwotICAgIGJvb2wgc3Vj
Y2VzcyA9IHJlYWRVVEZDaGFyKHN0ciwgYmVnaW4sIGxlbmd0aCwgJmNoKTsKLSAgICBBcHBlbmRV
VEY4RXNjYXBlZFZhbHVlKGNoLCBvdXRwdXQpOwotICAgIHJldHVybiBzdWNjZXNzOwotfQotCi0v
LyBHaXZlbiBhICclJyBjaGFyYWN0ZXIgYXQgfCpiZWdpbnwgaW4gdGhlIHN0cmluZyB8c3BlY3ws
IHRoaXMgd2lsbCBkZWNvZGUKLS8vIHRoZSBlc2NhcGVkIHZhbHVlIGFuZCBwdXQgaXQgaW50byB8
KnVuZXNjYXBlZFZhbHVlfCBvbiBzdWNjZXNzIChyZXR1cm5zCi0vLyB0cnVlKS4gT24gZmFpbHVy
ZSwgdGhpcyB3aWxsIHJldHVybiBmYWxzZSwgYW5kIHdpbGwgbm90IHdyaXRlIGludG8KLS8vIHwq
dW5lc2NhcGVkVmFsdWV8LgotLy8KLS8vIHwqYmVnaW58IHdpbGwgYmUgdXBkYXRlZCB0byBwb2lu
dCB0byB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIGVzY2FwZQotLy8gc2VxdWVuY2Ugc28gdGhh
dCB3aGVuIGNhbGxlZCB3aXRoIHRoZSBpbmRleCBvZiBhIGZvciBsb29wLCB0aGUgbmV4dCB0aW1l
Ci0vLyB0aHJvdWdoIGl0IHdpbGwgcG9pbnQgdG8gdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNv
bnNpZGVyZWQuIE9uIGZhaWx1cmUsCi0vLyB8KmJlZ2lufCB3aWxsIGJlIHVuY2hhbmdlZC4KLWlu
bGluZSBib29sIElzOEJpdENoYXIoY2hhcikKLXsKLSAgICByZXR1cm4gdHJ1ZTsgLy8gdGhpcyBj
YXNlIGlzIHNwZWNpYWxpemVkIHRvIGF2b2lkIGEgd2FybmluZwotfQotaW5saW5lIGJvb2wgSXM4
Qml0Q2hhcihVQ2hhciBjKQotewotICAgIHJldHVybiBjIDw9IDI1NTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgQ0hBUj4KLWlubGluZSBib29sIERlY29kZUVzY2FwZWQoY29uc3QgQ0hBUiogc3Bl
YywgaW50KiBiZWdpbiwgaW50IGVuZCwgdW5zaWduZWQgY2hhciogdW5lc2NhcGVkVmFsdWUpCi17
Ci0gICAgaWYgKCpiZWdpbiArIDMgPiBlbmQgfHwgIUlzOEJpdENoYXIoc3BlY1sqYmVnaW4gKyAx
XSkgfHwgIUlzOEJpdENoYXIoc3BlY1sqYmVnaW4gKyAyXSkpIHsKLSAgICAgICAgLy8gSW52YWxp
ZCBlc2NhcGUgc2VxdWVuY2UgYmVjYXVzZSB0aGVyZSdzIG5vdCBlbm91Z2ggcm9vbSwgb3IgdGhl
Ci0gICAgICAgIC8vIGRpZ2l0cyBhcmUgbm90IEFTQ0lJLgotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgdW5zaWduZWQgY2hhciBmaXJzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KHNwZWNbKmJlZ2luICsgMV0pOwotICAgIHVuc2lnbmVkIGNoYXIgc2Vjb25kID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oc3BlY1sqYmVnaW4gKyAyXSk7Ci0gICAgaWYgKCFVUkxD
aGFyYWN0ZXJUeXBlczo6aXNIZXhDaGFyKGZpcnN0KSB8fCAhVVJMQ2hhcmFjdGVyVHlwZXM6Omlz
SGV4Q2hhcihzZWNvbmQpKSB7Ci0gICAgICAgIC8vIEludmFsaWQgaGV4IGRpZ2l0cywgZmFpbC4K
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFZhbGlkIGVzY2FwZSBzZXF1
ZW5jZS4KLSAgICAqdW5lc2NhcGVkVmFsdWUgPSAoaGV4Q2hhclRvVmFsdWUoZmlyc3QpIDw8IDQp
ICsgaGV4Q2hhclRvVmFsdWUoc2Vjb25kKTsKLSAgICAqYmVnaW4gKz0gMjsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotLy8gQXBwZW5kcyB0aGUgZ2l2ZW4gc3Vic3RyaW5nIHRvIHRoZSBvdXRwdXQs
IGVzY2FwaW5nICJzb21lIiBjaGFyYWN0ZXJzIHRoYXQKLS8vIGl0IGZlZWxzIG1heSBub3QgYmUg
c2FmZS4gSXQgYXNzdW1lcyB0aGUgaW5wdXQgdmFsdWVzIGFyZSBhbGwgY29udGFpbmVkIGluCi0v
LyA4LWJpdCBhbHRob3VnaCBpdCBhbGxvd3MgYW55IHR5cGUuCi0vLwotLy8gVGhpcyBpcyB1c2Vk
IGluIGVycm9yIGNhc2VzIHRvIGFwcGVuZCBpbnZhbGlkIG91dHB1dCBzbyB0aGF0IGl0IGxvb2tz
Ci0vLyBhcHByb3hpbWF0ZWx5IGNvcnJlY3QuIE5vbi1lcnJvciBjYXNlcyBzaG91bGQgbm90IGNh
bGwgdGhpcyBmdW5jdGlvbiBzaW5jZQotLy8gdGhlIGVzY2FwaW5nIHJ1bGVzIGFyZSBub3QgZ3Vh
cmFudGVlZCEKLXZvaWQgQXBwZW5kSW52YWxpZE5hcnJvd1N0cmluZyhjb25zdCBjaGFyKiBzcGVj
LCBpbnQgYmVnaW4sIGludCBlbmQsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KTsKLXZvaWQgQXBw
ZW5kSW52YWxpZE5hcnJvd1N0cmluZyhjb25zdCBVQ2hhciogc3BlYywgaW50IGJlZ2luLCBpbnQg
ZW5kLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCk7Ci0KLS8vIE1pc2MgY2Fub25pY2FsaXphdGlv
biBoZWxwZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotLy8gQ29udmVydHMgYmV0d2VlbiBVVEYtOCBhbmQgVVRGLTE2LCByZXR1cm5pbmcgdHJ1ZSBv
biBzdWNjZXNzZnVsIGNvbnZlcnNpb24uCi0vLyBUaGUgb3V0cHV0IHdpbGwgYmUgYXBwZW5kZWQg
dG8gdGhlIGdpdmVuIGNhbm9uaWNhbGl6ZXIgb3V0cHV0IChzbyBtYWtlIHN1cmUKLS8vIGl0J3Mg
ZW1wdHkgaWYgeW91IHdhbnQgdG8gcmVwbGFjZSkuCi0vLwotLy8gT24gaW52YWxpZCBpbnB1dCwg
dGhpcyB3aWxsIHN0aWxsIHdyaXRlIGFzIG11Y2ggb3V0cHV0IGFzIHBvc3NpYmxlLAotLy8gcmVw
bGFjaW5nIHRoZSBpbnZhbGlkIGNoYXJhY3RlcnMgd2l0aCB0aGUgImludmFsaWQgY2hhcmFjdGVy
Ii4gSXQgd2lsbAotLy8gcmV0dXJuIGZhbHNlIGluIHRoZSBmYWlsdXJlIGNhc2UsIGFuZCB0aGUg
Y2FsbGVyIHNob3VsZCBub3QgY29udGludWUgYXMKLS8vIG5vcm1hbC4KLWJvb2wgQ29udmVydFVU
RjE2VG9VVEY4KGNvbnN0IFVDaGFyKiBpbnB1dCwgaW50IGlucHV0TGVuZ3RoLCBVUkxCdWZmZXI8
Y2hhcj4mIG91dHB1dCk7Ci1ib29sIENvbnZlcnRVVEY4VG9VVEYxNihjb25zdCBjaGFyKiBpbnB1
dCwgaW50IGlucHV0TGVuZ3RoLCBVUkxCdWZmZXI8VUNoYXI+JiBvdXRwdXQpOwotCi0vLyBDb252
ZXJ0cyBmcm9tIFVURi0xNiB0byA4LWJpdCB1c2luZyB0aGUgY2hhcmFjdGVyIHNldCBjb252ZXJ0
ZXIuIElmIHRoZQotLy8gY29udmVydGVyIGlzIG51bGwsIHRoaXMgd2lsbCB1c2UgVVRGLTguCi12
b2lkIENvbnZlcnRVVEYxNlRvUXVlcnlFbmNvZGluZyhjb25zdCBVQ2hhciogaW5wdXQsIGNvbnN0
IFVSTENvbXBvbmVudCYgcXVlcnksIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciosIFVSTEJ1ZmZl
cjxjaGFyPiYgb3V0cHV0KTsKLQotLy8gQXBwbGllcyB0aGUgcmVwbGFjZW1lbnRzIHRvIHRoZSBn
aXZlbiBjb21wb25lbnQgc291cmNlLiBUaGUgY29tcG9uZW50IHNvdXJjZQotLy8gc2hvdWxkIGJl
IHByZS1pbml0aWFsaXplZCB0byB0aGUgIm9sZCIgYmFzZS4gVGhhdCBpcywgYWxsIHBvaW50ZXJz
IHdpbGwKLS8vIHBvaW50IHRvIHRoZSBzcGVjIG9mIHRoZSBvbGQgVVJMLCBhbmQgYWxsIG9mIHRo
ZSBQYXJzZWQgY29tcG9uZW50cyB3aWxsCi0vLyBiZSBpbmRpY2VzIGludG8gdGhhdCBzdHJpbmcu
Ci0vLwotLy8gVGhlIHBvaW50ZXJzIGFuZCBjb21wb25lbnRzIGluIHRoZSB8c291cmNlfCBmb3Ig
YWxsIG5vbi1udWxsIHN0cmluZ3MgaW4gdGhlCi0vLyB8cmVwbHwgKHJlcGxhY2VtZW50cykgd2ls
bCBiZSB1cGRhdGVkIHRvIHJlZmVyZW5jZSB0aG9zZSBzdHJpbmdzLgotLy8gQ2Fub25pY2FsaXpp
bmcgd2l0aCB0aGUgbmV3IHxzb3VyY2V8IGFuZCB8cGFyc2VkfCBjYW4gdGhlbiBjb21iaW5lIFVS
TAotLy8gY29tcG9uZW50cyBmcm9tIG1hbnkgZGlmZmVyZW50IHN0cmluZ3MuCi12b2lkIFNldHVw
T3ZlcnJpZGVDb21wb25lbnRzKGNvbnN0IGNoYXIqIGJhc2UsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFJlcGxhY2VtZW50czxjaGFyPiYsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFVSTENvbXBvbmVudFNvdXJjZTxjaGFyPiosCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFVSTFNlZ21lbnRzKiBwYXJzZWQpOwotCi0vLyBMaWtlIHRoZSBhYm92ZSA4LWJp
dCB2ZXJzaW9uLCBleGNlcHQgdGhhdCBpdCBhZGRpdGlvbmFsbHkgY29udmVydHMgdGhlCi0vLyBV
VEYtMTYgaW5wdXQgdG8gVVRGLTggYmVmb3JlIGRvaW5nIHRoZSBvdmVycmlkZXMuCi0vLwotLy8g
VGhlIGdpdmVuIHV0ZjhCdWZmZXIgaXMgdXNlZCB0byBzdG9yZSB0aGUgY29udmVydGVkIGNvbXBv
bmVudHMuIFRoZXkgd2lsbAotLy8gYmUgYXBwZW5kZWQgb25lIGFmdGVyIGFub3RoZXIsIHdpdGgg
dGhlIHBhcnNlZCBzdHJ1Y3R1cmUgaWRlbnRpZnlpbmcgdGhlCi0vLyBhcHByb3ByaWF0ZSBzdWJz
dHJpbmdzLiBUaGlzIGJ1ZmZlciBpcyBhIHBhcmFtZXRlciBiZWNhdXNlIHRoZSBzb3VyY2UgaGFz
Ci0vLyBubyBzdG9yYWdlLCBzbyB0aGUgYnVmZmVyIG11c3QgaGF2ZSB0aGUgc2FtZSBsaWZldGlt
ZSBhcyB0aGUgc291cmNlCi0vLyBwYXJhbWV0ZXIgb3duZWQgYnkgdGhlIGNhbGxlci4KLS8vCi0v
LyBUSEUgQ0FMTEVSIE1VU1QgTk9UIEFERCBUTyBUSEUgfHV0ZjhCdWZmZXJ8IEFGVEVSIFRISVMg
Q0FMTC4gTWVtYmVycyBvZgotLy8gfHNvdXJjZXwgd2lsbCBwb2ludCBpbnRvIHRoaXMgYnVmZmVy
LCB3aGljaCBjb3VsZCBiZSBpbnZhbGlkYXRlZCBpZgotLy8gYWRkaXRpb25hbCBkYXRhIGlzIGFk
ZGVkIGFuZCB0aGUgQ2Fub25PdXRwdXQgcmVzaXplcyBpdHMgYnVmZmVyLgotLy8KLS8vIFJldHVy
bnMgdHJ1ZSBvbiBzdWNjZXNzLiBGYWxlcyBtZWFucyB0aGF0IHRoZSBpbnB1dCB3YXMgbm90IHZh
bGlkIFVURi0xNiwKLS8vIGFsdGhvdWdoIHdlIHdpbGwgaGF2ZSBzdGlsbCBkb25lIHRoZSBvdmVy
cmlkZSB3aXRoICJpbnZhbGlkIGNoYXJhY3RlcnMiIGluCi0vLyBwbGFjZSBvZiBlcnJvcnMuCi1i
b29sIFNldHVwVVRGMTZPdmVycmlkZUNvbXBvbmVudHMoY29uc3QgY2hhciogYmFzZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXBsYWNlbWVudHM8VUNoYXI+JiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIHV0ZjhC
dWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9uZW50U291
cmNlPGNoYXI+KiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50
cyogcGFyc2VkKTsKLQotLy8gSW1wbGVtZW50ZWQgaW4gVVJMQ2Fub25pY2FsaXplcl9wYXRoLmNj
LCB0aGVzZSBhcmUgcmVxdWlyZWQgYnkgdGhlIHJlbGF0aXZlIFVSTAotLy8gcmVzb2x2ZXIgYXMg
d2VsbCwgc28gd2UgZGVjbGFyZSB0aGVtIGhlcmUuCi1ib29sIENhbm9uaWNhbGl6ZVBhcnRpYWxQ
YXRoKGNvbnN0IGNoYXIqIHNwZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFVSTENvbXBvbmVudCYgcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBh
dGhCZWdpbkluT3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8
Y2hhcj4mIG91dHB1dCk7Ci1ib29sIENhbm9uaWNhbGl6ZVBhcnRpYWxQYXRoKGNvbnN0IFVDaGFy
KiBzcGVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQm
IHBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYXRoQmVnaW5Jbk91dHB1
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQp
OwotCi0jaWYgIU9TKFdJTkRPV1MpCi0vLyBJbXBsZW1lbnRhdGlvbnMgb2YgV2luZG93cycgaW50
LXRvLXN0cmluZyBjb252ZXJzaW9ucwotaW50IF9pdG9hX3MoaW50IHZhbHVlLCBjaGFyKiBidWZm
ZXIsIHNpemVfdCBzaXplSW5DaGFycywgaW50IHJhZGl4KTsKLWludCBfaXRvd19zKGludCB2YWx1
ZSwgVUNoYXIqIGJ1ZmZlciwgc2l6ZV90IHNpemVJbkNoYXJzLCBpbnQgcmFkaXgpOwotCi0vLyBT
ZWN1cmUgdGVtcGxhdGUgb3ZlcmxvYWRzIGZvciB0aGVzZSBmdW5jdGlvbnMKLXRlbXBsYXRlPHNp
emVfdCBOPgotaW5saW5lIGludCBfaXRvYV9zKGludCB2YWx1ZSwgY2hhciAoJmJ1ZmZlcilbTl0s
IGludCByYWRpeCkKLXsKLSAgICByZXR1cm4gX2l0b2Ffcyh2YWx1ZSwgYnVmZmVyLCBOLCByYWRp
eCk7Ci19Ci0KLXRlbXBsYXRlPHNpemVfdCBOPgotaW5saW5lIGludCBfaXRvd19zKGludCB2YWx1
ZSwgVUNoYXIgKCZidWZmZXIpW05dLCBpbnQgcmFkaXgpCi17Ci0gICAgcmV0dXJuIF9pdG93X3Mo
dmFsdWUsIGJ1ZmZlciwgTiwgcmFkaXgpOwotfQotCi0vLyBfc3RydG91aTY0IGFuZCBzdHJ0b3Vs
bCBiZWhhdmUgdGhlIHNhbWUKLWlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgX3N0cnRvdWk2NChj
b25zdCBjaGFyKiBucHRyLCBjaGFyKiogZW5kcHRyLCBpbnQgYmFzZSkKLXsKLSAgICByZXR1cm4g
c3RydG91bGwobnB0ciwgZW5kcHRyLCBiYXNlKTsKLX0KLSNlbmRpZiAvLyBPUyhXSU5ET1dTKQot
Ci19IC8vIG5hbWVzcGFjZSBVUkxDYW5vbmljYWxpemVyCi0KLX0gLy8gbmFtZXNwYWNlIFdURgot
Ci0jZW5kaWYgLy8gVVNFKFdURlVSTCkKLQotI2VuZGlmIC8vIFVSTENhbm9uSW50ZXJuYWxfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vbk1haWx0by5jcHAgYi9T
b3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uTWFpbHRvLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYmRiMzUzODQ1MzFlMzdiYjQwNmU3NDkzNzRjMWI0YzhlZDMyNGZhYi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi91cmwvc3JjL1VSTENhbm9uTWFpbHRvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzNCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBG
dW5jdGlvbnMgZm9yIGNhbm9uaWNhbGl6aW5nICJtYWlsdG86IiBVUkxzLgotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiVVJMQ2Fub24uaCIKLQotI2luY2x1ZGUgIlJhd1VSTEJ1ZmZl
ci5oIgotI2luY2x1ZGUgIlVSTENhbm9uSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJVUkxGaWxlLmgi
Ci0jaW5jbHVkZSAiVVJMUGFyc2VJbnRlcm5hbC5oIgotCi0jaWYgVVNFKFdURlVSTCkKLQotbmFt
ZXNwYWNlIFdURiB7Ci0KLW5hbWVzcGFjZSBVUkxDYW5vbmljYWxpemVyIHsKLQotbmFtZXNwYWNl
IHsKLQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBVQ0hBUj4K
LWJvb2wgZG9DYW5vbmljYWxpemVNYWlsdG9VUkwoY29uc3QgVVJMQ29tcG9uZW50U291cmNlPENo
YXJhY3RlclR5cGU+JiBzb3VyY2UsIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsIFVSTEJ1ZmZl
cjxjaGFyPiYgb3V0cHV0LCBVUkxTZWdtZW50cyYgb3V0cHV0UGFyc2VkKQotewotICAgIC8vIG1h
aWx0bzogb25seSB1c2VzIHtzY2hlbWUsIHBhdGgsIHF1ZXJ5fSAtLSBjbGVhciB0aGUgcmVzdC4K
LSAgICBvdXRwdXRQYXJzZWQudXNlcm5hbWUgPSBVUkxDb21wb25lbnQoKTsKLSAgICBvdXRwdXRQ
YXJzZWQucGFzc3dvcmQgPSBVUkxDb21wb25lbnQoKTsKLSAgICBvdXRwdXRQYXJzZWQuaG9zdCA9
IFVSTENvbXBvbmVudCgpOwotICAgIG91dHB1dFBhcnNlZC5wb3J0ID0gVVJMQ29tcG9uZW50KCk7
Ci0gICAgb3V0cHV0UGFyc2VkLmZyYWdtZW50ID0gVVJMQ29tcG9uZW50KCk7Ci0KLSAgICAvLyBT
Y2hlbWUgKGtub3duLCBzbyB3ZSBkb24ndCBib3RoZXIgcnVubmluZyBpdCB0aHJvdWdoIHRoZSBt
b3JlCi0gICAgLy8gY29tcGxpY2F0ZWQgc2NoZW1lIGNhbm9uaWNhbGl6ZXIpLgotICAgIG91dHB1
dFBhcnNlZC5zY2hlbWUuc2V0QmVnaW4ob3V0cHV0Lmxlbmd0aCgpKTsKLSAgICBvdXRwdXQuYXBw
ZW5kKCJtYWlsdG86IiwgNyk7Ci0gICAgb3V0cHV0UGFyc2VkLnNjaGVtZS5zZXRMZW5ndGgoNik7
Ci0KLSAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwotCi0gICAgLy8gUGF0aAotICAgIGlmIChwYXJz
ZWQucGF0aC5pc1ZhbGlkKCkpIHsKLSAgICAgICAgb3V0cHV0UGFyc2VkLnBhdGguc2V0QmVnaW4o
b3V0cHV0Lmxlbmd0aCgpKTsKLQotICAgICAgICAvLyBDb3B5IHRoZSBwYXRoIHVzaW5nIHBhdGgg
VVJMJ3MgbW9yZSBsYXggZXNjYXBpbmcgcnVsZXMuCi0gICAgICAgIC8vIFdlIGNvbnZlcnQgdG8g
VVRGLTggYW5kIGVzY2FwZSBub24tQVNDSUksIGJ1dCBsZWF2ZSBhbGwKLSAgICAgICAgLy8gQVND
SUkgY2hhcmFjdGVycyBhbG9uZS4KLSAgICAgICAgaW50IGVuZCA9IHBhcnNlZC5wYXRoLmVuZCgp
OwotICAgICAgICBmb3IgKGludCBpID0gcGFyc2VkLnBhdGguYmVnaW4oKTsgaSA8IGVuZDsgKytp
KSB7Ci0gICAgICAgICAgICBVQ0hBUiB1Y2ggPSBzdGF0aWNfY2FzdDxVQ0hBUj4oc291cmNlLnBh
dGhbaV0pOwotICAgICAgICAgICAgaWYgKHVjaCA8IDB4MjAgfHwgdWNoID49IDB4ODApCi0gICAg
ICAgICAgICAgICAgc3VjY2VzcyAmPSBBcHBlbmRVVEY4RXNjYXBlZENoYXIoc291cmNlLnBhdGgs
ICZpLCBlbmQsIG91dHB1dCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgb3V0
cHV0LmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPih1Y2gpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IG91dHB1dFBhcnNlZC5wYXRoLnNldExlbmd0aChvdXRwdXQubGVuZ3RoKCkgLSBvdXRwdXRQYXJz
ZWQucGF0aC5iZWdpbigpKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBObyBwYXRoIGF0IGFs
bAotICAgICAgICBvdXRwdXRQYXJzZWQucGF0aC5yZXNldCgpOwotICAgIH0KLQotICAgIC8vIFF1
ZXJ5IC0tIGFsd2F5cyB1c2UgdGhlIGRlZmF1bHQgdXRmOCBjaGFyc2V0IGNvbnZlcnRlci4KLSAg
ICBDYW5vbmljYWxpemVRdWVyeShzb3VyY2UucXVlcnksIHBhcnNlZC5xdWVyeSwgMCwgb3V0cHV0
LCAmb3V0cHV0UGFyc2VkLnF1ZXJ5KTsKLQotICAgIHJldHVybiBzdWNjZXNzOwotfQotCi19IC8v
IG5hbWVzcGFjZQotCi1ib29sIGNhbm9uaWNhbGl6ZU1haWx0b1VSTChjb25zdCBjaGFyKiBzcGVj
LCBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJM
U2VnbWVudHMmIG91dHB1dFBhcnNlZCkKLXsKLSAgICByZXR1cm4gZG9DYW5vbmljYWxpemVNYWls
dG9VUkw8Y2hhciwgdW5zaWduZWQgY2hhcj4oVVJMQ29tcG9uZW50U291cmNlPGNoYXI+KHNwZWMp
LCBwYXJzZWQsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKLX0KLQotYm9vbCBjYW5vbmljYWxpemVN
YWlsdG9VUkwoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsIFVS
TEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxTZWdtZW50cyYgb3V0cHV0UGFyc2VkKQotewotICAg
IHJldHVybiBkb0Nhbm9uaWNhbGl6ZU1haWx0b1VSTDxVQ2hhciwgVUNoYXI+KFVSTENvbXBvbmVu
dFNvdXJjZTxVQ2hhcj4oc3BlYyksIHBhcnNlZCwgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOwotfQot
Ci1ib29sIHJlcGxhY2VNYWlsdG9VUkwoY29uc3QgY2hhciogYmFzZSwgY29uc3QgVVJMU2VnbWVu
dHMmIGJhc2VQYXJzZWQsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVwbGFjZW1lbnRz
PGNoYXI+JiByZXBsYWNlbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNo
YXI+JiBvdXRwdXQsIFVSTFNlZ21lbnRzJiBvdXRwdXRQYXJzZWQpCi17Ci0gICAgVVJMQ29tcG9u
ZW50U291cmNlPGNoYXI+IHNvdXJjZShiYXNlKTsKLSAgICBVUkxTZWdtZW50cyBwYXJzZWQoYmFz
ZVBhcnNlZCk7Ci0gICAgU2V0dXBPdmVycmlkZUNvbXBvbmVudHMoYmFzZSwgcmVwbGFjZW1lbnRz
LCAmc291cmNlLCAmcGFyc2VkKTsKLSAgICByZXR1cm4gZG9DYW5vbmljYWxpemVNYWlsdG9VUkw8
Y2hhciwgdW5zaWduZWQgY2hhcj4oc291cmNlLCBwYXJzZWQsIG91dHB1dCwgb3V0cHV0UGFyc2Vk
KTsKLX0KLQotYm9vbCByZXBsYWNlTWFpbHRvVVJMKGNvbnN0IGNoYXIqIGJhc2UsIGNvbnN0IFVS
TFNlZ21lbnRzJiBiYXNlUGFyc2VkLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlcGxh
Y2VtZW50czxVQ2hhcj4mIHJlcGxhY2VtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICBVUkxC
dWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVudHMmIG91dHB1dFBhcnNlZCkKLXsKLSAgICBS
YXdVUkxCdWZmZXI8Y2hhcj4gdXRmODsKLSAgICBVUkxDb21wb25lbnRTb3VyY2U8Y2hhcj4gc291
cmNlKGJhc2UpOwotICAgIFVSTFNlZ21lbnRzIHBhcnNlZChiYXNlUGFyc2VkKTsKLSAgICBTZXR1
cFVURjE2T3ZlcnJpZGVDb21wb25lbnRzKGJhc2UsIHJlcGxhY2VtZW50cywgdXRmOCwgJnNvdXJj
ZSwgJnBhcnNlZCk7Ci0gICAgcmV0dXJuIGRvQ2Fub25pY2FsaXplTWFpbHRvVVJMPGNoYXIsIHVu
c2lnbmVkIGNoYXI+KHNvdXJjZSwgcGFyc2VkLCBvdXRwdXQsIG91dHB1dFBhcnNlZCk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0K
LSNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3Ny
Yy9VUkxDYW5vblBhdGguY3BwIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vblBhdGgu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmM0NDNmZDdjZGZiYTQ3MzhhZGE0
NTQ0NDY4MmE3OGYzZTE4OTg0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25QYXRoLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDM3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDcgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBDYW5vbmljYWxpemF0aW9uIGZ1bmN0aW9ucyBmb3IgdGhlIHBhdGhz
IG9mIFVSTHMuCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJVUkxDYW5vbi5oIgot
Ci0jaW5jbHVkZSAiVVJMQ2Fub25JbnRlcm5hbC5oIgotI2luY2x1ZGUgIlVSTFBhcnNlSW50ZXJu
YWwuaCIKLQotI2lmIFVTRShXVEZVUkwpCi0KLW5hbWVzcGFjZSBXVEYgewotCi1uYW1lc3BhY2Ug
VVJMQ2Fub25pY2FsaXplciB7Ci0KLW5hbWVzcGFjZSB7Ci0KLWVudW0gQ2hhcmFjdGVyRmxhZ3Mg
ewotICAgIC8vIFBhc3MgdGhyb3VnaCB1bmNoYW5nZWQsIHdoZXRoZXIgZXNjYXBlZCBvciB1bmVz
Y2FwZWQuIFRoaXMgZG9lc24ndAotICAgIC8vIGFjdHVhbGx5IHNldCBhbnl0aGluZyBzbyB5b3Ug
Y2FuJ3QgT1IgaXQgdG8gY2hlY2ssIGl0J3MganVzdCB0byBtYWtlIHRoZQotICAgIC8vIHRhYmxl
IGJlbG93IG1vcmUgY2xlYXIgd2hlbiBuZWl0aGVyIEVTQ0FQRSBvciBVTkVTQ0FQRSBpcyBzZXQu
Ci0gICAgUEFTUyA9IDAsCi0KLSAgICAvLyBUaGlzIGNoYXJhY3RlciByZXF1aXJlcyBzcGVjaWFs
IGhhbmRsaW5nIGluIGRvUGFydGlhbFBhdGguIERvaW5nIHRoaXMgdGVzdAotICAgIC8vIGZpcnN0
IGFsbG93cyB1cyB0byBmaWx0ZXIgb3V0IHRoZSBjb21tb24gY2FzZXMgb2YgcmVndWxhciBjaGFy
YWN0ZXJzIHRoYXQKLSAgICAvLyBjYW4gYmUgZGlyZWN0bHkgY29waWVkLgotICAgIFNQRUNJQUwg
PSAxLAotCi0gICAgLy8gVGhpcyBjaGFyYWN0ZXIgbXVzdCBiZSBlc2NhcGVkIGluIHRoZSBjYW5v
bmljYWwgb3V0cHV0LiBOb3RlIHRoYXQgYWxsCi0gICAgLy8gZXNjYXBlZCBjaGFycyBhbHNvIGhh
dmUgdGhlICJzcGVjaWFsIiBiaXQgc2V0IHNvIHRoYXQgdGhlIGNvZGUgdGhhdCBsb29rcwotICAg
IC8vIGZvciB0aGlzIGlzIHRyaWdnZXJlZC4gTm90IHZhbGlkIHdpdGggUEFTUyBvciBFU0NBUEUK
LSAgICBFU0NBUEVfQklUID0gMiwKLSAgICBFU0NBUEUgPSBFU0NBUEVfQklUIHwgU1BFQ0lBTCwK
LQotICAgIC8vIFRoaXMgY2hhcmFjdGVyIG11c3QgYmUgdW5lc2NhcGVkIGluIGNhbm9uaWNhbCBv
dXRwdXQuIE5vdCB2YWxpZCB3aXRoCi0gICAgLy8gRVNDQVBFIG9yIFBBU1MuIFdlIERPTidUIHNl
dCB0aGUgU1BFQ0lBTCBmbGFnIHNpbmNlIGlmIHdlIGVuY291bnRlciB0aGVzZQotICAgIC8vIGNo
YXJhY3RlcnMgdW5lc2NhcGVkLCB0aGV5IHNob3VsZCBqdXN0IGJlIGNvcGllZC4KLSAgICBVTkVT
Q0FQRSA9IDQsCi0KLSAgICAvLyBUaGlzIGNoYXJhY3RlciBpcyBkaXNhbGxvd2VkIGluIFVSTHMu
IE5vdGUgdGhhdCB0aGUgInNwZWNpYWwiIGJpdCBpcyBhbHNvCi0gICAgLy8gc2V0IHRvIHRyaWdn
ZXIgaGFuZGxpbmcuCi0gICAgSU5WQUxJRF9CSVQgPSA4LAotICAgIElOVkFMSUQgPSBJTlZBTElE
X0JJVCB8IFNQRUNJQUwsCi19OwotCi0vLyBUaGlzIHRhYmxlIGNvbnRhaW5zIG9uZSBvZiB0aGUg
YWJvdmUgZmxhZyB2YWx1ZXMuIE5vdGUgc29tZSBmbGFncyBhcmUgbW9yZQotLy8gdGhhbiBvbmUg
Yml0cyBiZWNhdXNlIHRoZXkgYWxzbyB0dXJuIG9uIHRoZSAic3BlY2lhbCIgZmxhZy4gU3BlY2lh
bCBpcyB0aGUKLS8vIG9ubHkgZmxhZyB0aGF0IG1heSBiZSBjb21iaW5lZCB3aXRoIG90aGVycy4K
LS8vCi0vLyBUaGlzIHRhYmxlIGlzIGRlc2lnbmVkIHRvIG1hdGNoIGV4YWN0bHkgd2hhdCBJRSBk
b2VzIHdpdGggdGhlIGNoYXJhY3RlcnMuCi0vLwotLy8gRG90IGlzIGV2ZW4gbW9yZSBzcGVjaWFs
LCBhbmQgdGhlIGVzY2FwZWQgdmVyc2lvbiBpcyBoYW5kbGVkIHNwZWNpYWxseSBieQotLy8gaXNE
b3QuIFRoZXJlZm9yZSwgd2UgZG9uJ3QgbmVlZCB0aGUgImVzY2FwZSIgZmxhZywgYW5kIGV2ZW4g
dGhlICJ1bmVzY2FwZSIKLS8vIGJpdCBpcyBuZXZlciBoYW5kbGVkICh3ZSBqdXN0IG5lZWQgdGhl
ICJzcGVjaWFsIikgYml0LgotY29uc3QgdW5zaWduZWQgY2hhciBrUGF0aENoYXJMb29rdXBbMHgx
MDBdID0gewotLy8gICBudWxsICAgICBjb250cm9sIGNoYXJzLi4uCi0gICAgIElOVkFMSUQsICBF
U0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwg
ICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQ
RSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwKLS8vICAgY29udHJvbCBjaGFycy4uLgot
ICAgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVT
Q0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAg
IEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsCi0vLyAgICcg
JyAgICAgICAhICAgICAgICAgIiAgICAgICAgICMgICAgICAgICAkICAgICAgICAgJSAgICAgICAg
ICYgICAgICAgICAnICAgICAgICAgKCAgICAgICAgICkgICAgICAgICAqICAgICAgICAgKyAgICAg
ICAgICwgICAgICAgICAtICAgICAgICAgLiAgICAgICAgIC8KLSAgICAgRVNDQVBFLCAgIFBBU1Ms
ICAgICBFU0NBUEUsICAgRVNDQVBFLCAgIFBBU1MsICAgICBFU0NBUEUsICAgUEFTUywgICAgIFBB
U1MsICAgICBQQVNTLCAgICAgUEFTUywgICAgIFBBU1MsICAgICBQQVNTLCAgICAgUEFTUywgICAg
IFVORVNDQVBFLCBTUEVDSUFMLCAgUEFTUywKLS8vICAgMCAgICAgICAgIDEgICAgICAgICAyICAg
ICAgICAgMyAgICAgICAgIDQgICAgICAgICA1ICAgICAgICAgNiAgICAgICAgIDcgICAgICAgICA4
ICAgICAgICAgOSAgICAgICAgIDogICAgICAgICA7ICAgICAgICAgPCAgICAgICAgID0gICAgICAg
ICAgPiAgICAgICAgPwotICAgICBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQ
RSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVT
Q0FQRSwgUEFTUywgICAgIFBBU1MsICAgICBFU0NBUEUsICAgUEFTUywgICAgIEVTQ0FQRSwgICBF
U0NBUEUsCi0vLyAgIEAgICAgICAgICBBICAgICAgICAgQiAgICAgICAgIEMgICAgICAgICBEICAg
ICAgICAgRSAgICAgICAgIEYgICAgICAgICBHICAgICAgICAgSCAgICAgICAgIEkgICAgICAgICBK
ICAgICAgICAgSyAgICAgICAgIEwgICAgICAgICBNICAgICAgICAgTiAgICAgICAgIE8KLSAgICAg
UEFTUywgICAgIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQ
RSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVT
Q0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsCi0vLyAgIFAgICAg
ICAgICBRICAgICAgICAgUiAgICAgICAgIFMgICAgICAgICBUICAgICAgICAgVSAgICAgICAgIFYg
ICAgICAgICBXICAgICAgICAgWCAgICAgICAgIFkgICAgICAgICBaICAgICAgICAgWyAgICAgICAg
IFwgICAgICAgICBdICAgICAgICAgXiAgICAgICAgIF8KLSAgICAgVU5FU0NBUEUsIFVORVNDQVBF
LCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVND
QVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBQQVNTLCAgICAgRVNDQVBFLCAgIFBB
U1MsICAgICBFU0NBUEUsICAgVU5FU0NBUEUsCi0vLyAgIGAgICAgICAgICBhICAgICAgICAgYiAg
ICAgICAgIGMgICAgICAgICBkICAgICAgICAgZSAgICAgICAgIGYgICAgICAgICBnICAgICAgICAg
aCAgICAgICAgIGkgICAgICAgICBqICAgICAgICAgayAgICAgICAgIGwgICAgICAgICBtICAgICAg
ICAgbiAgICAgICAgIG8KLSAgICAgRVNDQVBFLCAgIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NB
UEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5F
U0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwg
VU5FU0NBUEUsCi0vLyAgIHAgICAgICAgICBxICAgICAgICAgciAgICAgICAgIHMgICAgICAgICB0
ICAgICAgICAgdSAgICAgICAgIHYgICAgICAgICB3ICAgICAgICAgeCAgICAgICAgIHkgICAgICAg
ICB6ICAgICAgICAgeyAgICAgICAgIHwgICAgICAgICB9ICAgICAgICAgfiAgICAgICAgIDxOQlNQ
PgotICAgICBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUs
IFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NBUEUsIFVORVNDQVBFLCBVTkVTQ0FQRSwgVU5FU0NB
UEUsIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIFVORVNDQVBFLCBFU0NBUEUsCi0vLyAg
IC4uLmFsbCB0aGUgaGlnaC1iaXQgY2hhcmFjdGVycyBhcmUgZXNjYXBlZAotICAgICBFU0NBUEUs
ICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NB
UEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBF
U0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsCi0gICAgIEVTQ0FQRSwgICBFU0NB
UEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBF
U0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwg
ICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwKLSAgICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBF
U0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwg
ICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQ
RSwgICBFU0NBUEUsICAgRVNDQVBFLAotICAgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwg
ICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQ
RSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVT
Q0FQRSwgICBFU0NBUEUsCi0gICAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQ
RSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVT
Q0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAg
IEVTQ0FQRSwKLSAgICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVT
Q0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAg
IEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBF
LAotICAgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAg
IEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBF
LCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsCi0gICAg
IEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBF
LCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVND
QVBFLCAgIEVTQ0FQRSwgICBFU0NBUEUsICAgRVNDQVBFLCAgIEVTQ0FQRX07Ci0KLWVudW0gRG90
RGlzcG9zaXRpb24gewotICAgIC8vIFRoZSBnaXZlbiBkb3QgaXMganVzdCBwYXJ0IG9mIGEgZmls
ZW5hbWUgYW5kIGlzIG5vdCBzcGVjaWFsLgotICAgIE5PVF9BX0RJUkVDVE9SWSwKLQotICAgIC8v
IFRoZSBnaXZlbiBkb3QgaXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgotICAgIERJUkVDVE9SWV9D
VVIsCi0KLSAgICAvLyBUaGUgZ2l2ZW4gZG90IGlzIHRoZSBmaXJzdCBvZiBhIGRvdWJsZSBkb3Qg
dGhhdCBzaG91bGQgdGFrZSB1cyB1cCBvbmUuCi0gICAgRElSRUNUT1JZX1VQCi19OwotCi0vLyBX
aGVuIHRoZSBwYXRoIHJlc29sdmVyIGZpbmRzIGEgZG90LCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxl
ZCB3aXRoIHRoZQotLy8gY2hhcmFjdGVyIGZvbGxvd2luZyB0aGF0IGRvdCB0byBzZWUgd2hhdCBp
dCBpcy4gVGhlIHJldHVybiB2YWx1ZQotLy8gaW5kaWNhdGVzIHdoYXQgdHlwZSB0aGlzIGRvdCBp
cyAoc2VlIGFib3ZlKS4gVGhpcyBjb2RlIGhhbmRsZXMgdGhlIGNhc2UKLS8vIHdoZXJlIHRoZSBk
b3QgaXMgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQuCi0vLwotLy8gfCpjb25zdW1lZExlbmd0aHwg
d2lsbCBjb250YWluIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUgaW5wdXQgdGhhdAot
Ly8gZXhwcmVzcyB3aGF0IHdlIGZvdW5kLgotLy8KLS8vIElmIHRoZSBpbnB1dCBpcyAiLi4vZm9v
IiwgfGFmdGVyRG90fCA9IDEsIHxlbmR8ID0gNiwgYW5kCi0vLyBhdCB0aGUgZW5kLCB8KmNvbnN1
bWVkTGVuZ3RofCA9IDIgZm9yIHRoZSAiLi8iIHRoaXMgZnVuY3Rpb24gY29uc3VtZWQuIFRoZQot
Ly8gb3JpZ2luYWwgZG90IGxlbmd0aCBzaG91bGQgYmUgaGFuZGxlZCBieSB0aGUgY2FsbGVyLgot
dGVtcGxhdGU8dHlwZW5hbWUgQ0hBUj4KLURvdERpc3Bvc2l0aW9uIENsYXNzaWZ5QWZ0ZXJEb3Qo
Y29uc3QgQ0hBUiogc3BlYywgaW50IGFmdGVyRG90LCBpbnQgZW5kLCBpbnQqIGNvbnN1bWVkTGVu
Z3RoKQotewotICAgIGlmIChhZnRlckRvdCA9PSBlbmQpIHsKLSAgICAgICAgLy8gU2luZ2xlIGRv
dCBhdCB0aGUgZW5kLgotICAgICAgICAqY29uc3VtZWRMZW5ndGggPSAwOwotICAgICAgICByZXR1
cm4gRElSRUNUT1JZX0NVUjsKLSAgICB9Ci0gICAgaWYgKFVSTFBhcnNlcjo6aXNVUkxTbGFzaChz
cGVjW2FmdGVyRG90XSkpIHsKLSAgICAgICAgLy8gU2luZ2xlIGRvdCBmb2xsb3dlZCBieSBhIHNs
YXNoLgotICAgICAgICAqY29uc3VtZWRMZW5ndGggPSAxOyAvLyBDb25zdW1lIHRoZSBzbGFzaAot
ICAgICAgICByZXR1cm4gRElSRUNUT1JZX0NVUjsKLSAgICB9Ci0KLSAgICBpbnQgc2Vjb25kRG90
TGVuZ3RoID0gaXNEb3Qoc3BlYywgYWZ0ZXJEb3QsIGVuZCk7Ci0gICAgaWYgKHNlY29uZERvdExl
bmd0aCkgewotICAgICAgICBpbnQgYWZ0ZXJTZWNvbmREb3QgPSBhZnRlckRvdCArIHNlY29uZERv
dExlbmd0aDsKLSAgICAgICAgaWYgKGFmdGVyU2Vjb25kRG90ID09IGVuZCkgewotICAgICAgICAg
ICAgLy8gRG91YmxlIGRvdCBhdCB0aGUgZW5kLgotICAgICAgICAgICAgKmNvbnN1bWVkTGVuZ3Ro
ID0gc2Vjb25kRG90TGVuZ3RoOwotICAgICAgICAgICAgcmV0dXJuIERJUkVDVE9SWV9VUDsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoVVJMUGFyc2VyOjppc1VSTFNsYXNoKHNwZWNbYWZ0ZXJTZWNv
bmREb3RdKSkgewotICAgICAgICAgICAgLy8gRG91YmxlIGRvdCBmb2xsb3dlZCBieSBhIHNsYXNo
LgotICAgICAgICAgICAgKmNvbnN1bWVkTGVuZ3RoID0gc2Vjb25kRG90TGVuZ3RoICsgMTsKLSAg
ICAgICAgICAgIHJldHVybiBESVJFQ1RPUllfVVA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAv
LyBUaGUgZG90cyBhcmUgZm9sbG93ZWQgYnkgc29tZXRoaW5nIGVsc2UsIG5vdCBhIGRpcmVjdG9y
eS4KLSAgICAqY29uc3VtZWRMZW5ndGggPSAwOwotICAgIHJldHVybiBOT1RfQV9ESVJFQ1RPUlk7
Ci19Ci0KLS8vIFJld2luZHMgdGhlIG91dHB1dCB0byB0aGUgcHJldmlvdXMgc2xhc2guIEl0IGlz
IGFzc3VtZWQgdGhhdCB0aGUgb3V0cHV0Ci0vLyBlbmRzIHdpdGggYSBzbGFzaCBhbmQgdGhpcyBk
b2Vzbid0IGNvdW50ICh3ZSBjYWxsIHRoaXMgd2hlbiB3ZSBhcmUKLS8vIGFwcGVuZGluZyBkaXJl
Y3RvcnkgcGF0aHMsIHNvIHRoZSBwcmV2aW91cyBwYXRoIGNvbXBvbmVudCBoYXMgYW5kIGVuZGlu
ZwotLy8gc2xhc2gpLgotLy8KLS8vIFRoaXMgd2lsbCBzdG9wIGF0IHRoZSBmaXJzdCBzbGFzaCAo
YXNzdW1lZCB0byBiZSBhdCBwb3NpdGlvbgotLy8gfHBhdGhCZWdpbkluT3V0cHV0fCBhbmQgbm90
IGdvIGFueSBoaWdoZXIgdGhhbiB0aGF0LiBTb21lIHdlYiBwYWdlcwotLy8gZG8gIi4uIiB0b28g
bWFueSB0aW1lcywgc28gd2UgbmVlZCB0byBoYW5kbGUgdGhhdCBicm9rZW5uZXNzLgotLy8KLS8v
IEl0IHNlYXJjaGVzIGZvciBhIGxpdGVyYWwgc2xhc2ggcmF0aGVyIHRoYW4gaW5jbHVkaW5nIGEg
YmFja3NsYXNoIGFzIHdlbGwKLS8vIGJlY2F1c2UgaXQgaXMgcnVuIG9ubHkgb24gdGhlIGNhbm9u
aWNhbCBvdXRwdXQuCi0vLwotLy8gVGhlIG91dHB1dCBpcyBndWFyYW50ZWVkIHRvIGVuZCBpbiBh
IHNsYXNoIHdoZW4gdGhpcyBmdW5jdGlvbiBjb21wbGV0ZXMuCi12b2lkIEJhY2tVcFRvUHJldmlv
dXNTbGFzaChpbnQgcGF0aEJlZ2luSW5PdXRwdXQsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQot
ewotICAgIEFTU0VSVChvdXRwdXQubGVuZ3RoKCkgPiAwKTsKLQotICAgIGludCBpID0gb3V0cHV0
Lmxlbmd0aCgpIC0gMTsKLSAgICBBU1NFUlQob3V0cHV0LmF0KGkpID09ICcvJyk7Ci0gICAgaWYg
KGkgPT0gcGF0aEJlZ2luSW5PdXRwdXQpCi0gICAgICAgIHJldHVybjsgLy8gV2UncmUgYXQgdGhl
IGZpcnN0IHNsYXNoLCBub3RoaW5nIHRvIGRvLgotCi0gICAgLy8gTm93IGJhY2sgdXAgKHNraXBw
aW5nIHRoZSB0cmFpbGluZyBzbGFzaCkgdW50aWwgd2UgZmluZCBhbm90aGVyIHNsYXNoLgotICAg
IGktLTsKLSAgICB3aGlsZSAob3V0cHV0LmF0KGkpICE9ICcvJyAmJiBpID4gcGF0aEJlZ2luSW5P
dXRwdXQpCi0gICAgICAgIGktLTsKLQotICAgIC8vIE5vdyBzaHJpbmsgdGhlIG91dHB1dCB0byBq
dXN0IGluY2x1ZGUgdGhhdCBsYXN0IHNsYXNoIHdlIGZvdW5kLgotICAgIG91dHB1dC5zZXRMZW5n
dGgoaSArIDEpOwotfQotCi0vLyBBcHBlbmRzIHRoZSBnaXZlbiBwYXRoIHRvIHRoZSBvdXRwdXQu
IEl0IGFzc3VtZXMgdGhhdCBpZiB0aGUgaW5wdXQgcGF0aAotLy8gc3RhcnRzIHdpdGggYSBzbGFz
aCwgaXQgc2hvdWxkIGJlIGNvcGllZCB0byB0aGUgb3V0cHV0LiBJZiBubyBwYXRoIGhhcwotLy8g
YWxyZWFkeSBiZWVuIGFwcGVuZGVkIHRvIHRoZSBvdXRwdXQgKHRoZSBjYXNlIHdoZW4gbm90IHJl
c29sdmluZwotLy8gcmVsYXRpdmUgVVJMcyksIHRoZSBwYXRoIHNob3VsZCBiZWdpbiB3aXRoIGEg
c2xhc2guCi0vLwotLy8gSWYgdGhlcmUgYXJlIGFscmVhZHkgcGF0aCBjb21wb25lbnRzICh0aGlz
IG1vZGUgaXMgdXNlZCB3aGVuIGFwcGVuZGluZwotLy8gcmVsYXRpdmUgcGF0aHMgZm9yIHJlc29s
dmluZyksIGl0IGFzc3VtZXMgdGhhdCB0aGUgb3V0cHV0IGFscmVhZHkgaGFzCi0vLyBhIHRyYWls
aW5nIHNsYXNoIGFuZCB0aGF0IGlmIHRoZSBpbnB1dCBiZWdpbnMgd2l0aCBhIHNsYXNoLCBpdCBz
aG91bGQgYmUKLS8vIGNvcGllZCB0byB0aGUgb3V0cHV0LgotLy8KLS8vIFdlIGRvIG5vdCBjb2xs
YXBzZSBtdWx0aXBsZSBzbGFzaGVzIGluIGEgcm93IHRvIGEgc2luZ2xlIHNsYXNoLiBJdCBzZWVt
cwotLy8gbm8gd2ViIGJyb3dzZXJzIGRvIHRoaXMsIGFuZCB3ZSBkb24ndCB3YW50IGluY29tcGFi
YWJpbGl0aWVzLCBldmVuIHRob3VnaAotLy8gaXQgd291bGQgYmUgY29ycmVjdCBmb3IgbW9zdCBz
eXN0ZW1zLgotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgdHlwZW5hbWUgVUNIQVI+
Ci1ib29sIGRvUGFydGlhbFBhdGgoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJM
Q29tcG9uZW50JiBwYXRoLCBpbnQgcGF0aEJlZ2luSW5PdXRwdXQsIFVSTEJ1ZmZlcjxjaGFyPiYg
b3V0cHV0KQotewotICAgIGludCBlbmQgPSBwYXRoLmVuZCgpOwotCi0gICAgYm9vbCBzdWNjZXNz
ID0gdHJ1ZTsKLSAgICBmb3IgKGludCBpID0gcGF0aC5iZWdpbigpOyBpIDwgZW5kOyArK2kpIHsK
LSAgICAgICAgVUNIQVIgdWNoID0gc3RhdGljX2Nhc3Q8VUNIQVI+KHNwZWNbaV0pOwotICAgICAg
ICBpZiAoc2l6ZW9mKENoYXJhY3RlclR5cGUpID4gc2l6ZW9mKGNoYXIpICYmIHVjaCA+PSAweDgw
KSB7Ci0gICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gdGVzdCB3aWRlIGlucHV0IGZvciBo
YXZpbmcgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuIEZvcgotICAgICAgICAgICAgLy8gbmFycm93IGlu
cHV0LCB3ZSdsbCBhbHdheXMganVzdCB1c2UgdGhlIGxvb2t1cCB0YWJsZS4gV2UgZG9uJ3QgdHJ5
IHRvCi0gICAgICAgICAgICAvLyBkbyBhbnl0aGluZyB0cmlja3kgd2l0aCBkZWNvZGluZy92YWxp
ZGF0aW5nIFVURi04LiBUaGlzIGZ1bmN0aW9uIHdpbGwKLSAgICAgICAgICAgIC8vIHJlYWQgb25l
IG9yIHR3byBVVEYtMTYgY2hhcmFjdGVycyBhbmQgYXBwZW5kIHRoZSBvdXRwdXQgYXMgVVRGLTgu
IFRoaXMKLSAgICAgICAgICAgIC8vIGNhbGwgd2lsbCBiZSByZW1vdmVkIGluIDgtYml0IG1vZGUu
Ci0gICAgICAgICAgICBzdWNjZXNzICY9IEFwcGVuZFVURjhFc2NhcGVkQ2hhcihzcGVjLCAmaSwg
ZW5kLCBvdXRwdXQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gTm9ybWFsIEFT
Q0lJIGNoYXJhY3RlciBvciA4LWJpdCBpbnB1dCwgdXNlIHRoZSBsb29rdXAgdGFibGUuCi0gICAg
ICAgICAgICB1bnNpZ25lZCBjaGFyIG91dENoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o
dWNoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZmxhZ3MgPSBrUGF0aENoYXJMb29rdXBb
b3V0Q2hdOwotICAgICAgICAgICAgaWYgKGZsYWdzICYgU1BFQ0lBTCkgewotICAgICAgICAgICAg
ICAgIC8vIE5lZWRzIHNwZWNpYWwgaGFuZGxpbmcgb2Ygc29tZSBzb3J0LgotICAgICAgICAgICAg
ICAgIGludCBkb3RsZW47Ci0gICAgICAgICAgICAgICAgaWYgKChkb3RsZW4gPSBpc0RvdChzcGVj
LCBpLCBlbmQpKSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gU2VlIGlmIHRoaXMgZG90
IHdhcyBwcmVjZWVkZWQgYnkgYSBzbGFzaCBpbiB0aGUgb3V0cHV0LiBXZQotICAgICAgICAgICAg
ICAgICAgICAvLyBhc3N1bWUgdGhhdCB3aGVuIGNhbm9uaWNhbGl6aW5nIHBhdGhzLCB0aGV5IHdp
bGwgYWx3YXlzCi0gICAgICAgICAgICAgICAgICAgIC8vIHN0YXJ0IHdpdGggYSBzbGFzaCBhbmQg
bm90IGEgZG90LCBzbyB3ZSBkb24ndCBoYXZlIHRvCi0gICAgICAgICAgICAgICAgICAgIC8vIGJv
dW5kcyBjaGVjayB0aGUgb3V0cHV0LgotICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAg
ICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgY2hlY2sgdGhpcyBpbiB0aGUgY2FzZSBvZiBkb3Rz
IHNvIHdlIGRvbid0IGhhdmUgdG8KLSAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNl
IHNsYXNoZXMuIFNpbmNlIHNsYXNoZXMgYXJlIG11Y2ggbW9yZSBjb21tb24gdGhhbgotICAgICAg
ICAgICAgICAgICAgICAvLyBkb3RzLCB0aGlzIGFjdHVhbGx5IGluY3JlYXNlcyBwZXJmb3JtYW5j
ZSBtZWFzdXJhYmx5ICh0aG91Z2gKLSAgICAgICAgICAgICAgICAgICAgLy8gc2xpZ2h0bHkpLgot
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQob3V0cHV0Lmxlbmd0aCgpID4gcGF0aEJlZ2luSW5P
dXRwdXQpOwotICAgICAgICAgICAgICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aCgpID4gcGF0aEJl
Z2luSW5PdXRwdXQgJiYgb3V0cHV0LmF0KG91dHB1dC5sZW5ndGgoKSAtIDEpID09ICcvJykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2xhc2ggZm9sbG93ZWQgYnkgYSBkb3QsIGNoZWNr
IHRvIHNlZSBpZiB0aGlzIGlzIG1lYW5zIHJlbGF0aXZlCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgY29uc3VtZWRMZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKENs
YXNzaWZ5QWZ0ZXJEb3Q8Q2hhcmFjdGVyVHlwZT4oc3BlYywgaSArIGRvdGxlbiwgZW5kLCAmY29u
c3VtZWRMZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE5PVF9BX0RJUkVD
VE9SWToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb3B5IHRoZSBkb3QgdG8gdGhl
IG91dHB1dCwgaXQgbWVhbnMgbm90aGluZyBzcGVjaWFsLgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHB1dC5hcHBlbmQoJy4nKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ICs9IGRvdGxlbiAtIDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIERJUkVDVE9SWV9DVVI6IC8vIEN1cnJlbnQgZGlyZWN0
b3J5LCBqdXN0IHNraXAgdGhlIGlucHV0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkg
Kz0gZG90bGVuICsgY29uc3VtZWRMZW5ndGggLSAxOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBESVJFQ1RPUllfVVA6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFja1VwVG9QcmV2aW91c1NsYXNoKHBhdGhCZWdp
bkluT3V0cHV0LCBvdXRwdXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gZG90
bGVuICsgY29uc3VtZWRMZW5ndGggLSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBkb3QgaXMgbm90IHByZWNlZWRl
ZCBieSBhIHNsYXNoLCBpdCBpcyBqdXN0IHBhcnQgb2Ygc29tZQotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gZmlsZSBuYW1lLgotICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVu
ZCgnLicpOwotICAgICAgICAgICAgICAgICAgICAgICAgaSArPSBkb3RsZW4gLSAxOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvdXRDaCA9PSAnXFwn
KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgYmFja3NsYXNoZXMgdG8gZm9yd2Fy
ZCBzbGFzaGVzCi0gICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJy8nKTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKG91dENoID09ICclJykgewotICAgICAgICAgICAgICAgICAg
ICAvLyBIYW5kbGUgZXNjYXBlIHNlcXVlbmNlcy4KLSAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciB1bmVzY2FwZWRWYWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERlY29kZUVz
Y2FwZWQoc3BlYywgJmksIGVuZCwgJnVuZXNjYXBlZFZhbHVlKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gVmFsaWQgZXNjYXBlIHNlcXVlbmNlLCBzZWUgaWYgd2Uga2VlcCwgcmVqZWN0
LCBvciB1bmVzY2FwZSBpdC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgdW5lc2NhcGVk
RmxhZ3MgPSBrUGF0aENoYXJMb29rdXBbdW5lc2NhcGVkVmFsdWVdOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodW5lc2NhcGVkRmxhZ3MgJiBVTkVTQ0FQRSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFRoaXMgZXNjYXBlZCB2YWx1ZSBzaG91bGRuJ3QgYmUgZXNjYXBl
ZCwgY29weSBpdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHVu
ZXNjYXBlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodW5lc2Nh
cGVkRmxhZ3MgJiBJTlZBTElEX0JJVCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEludmFsaWQgZXNjYXBlZCBjaGFyYWN0ZXIsIGNvcHkgaXQgYW5kIHJlbWVtYmVyIHRoZSBlcnJv
ci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCclJyk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPihz
cGVjW2kgLSAxXSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQo
c3RhdGljX2Nhc3Q8Y2hhcj4oc3BlY1tpXSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gVmFsaWQgZXNjYXBlZCBjaGFyYWN0ZXIgYnV0IHdl
IHNob3VsZCBrZWVwIGl0IGVzY2FwZWQuIFdlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhlIGNhc2Ugb2YgYW55IGhleCBsZXR0ZXJzIGluIGNh
c2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgc2VydmVyIGlzIHNlbnNpdGl2
ZSB0byB0aGF0LCBzbyB3ZSBqdXN0IGNvcHkgdGhlIHR3bwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGNoYXJhY3RlcnMgd2l0aG91dCBjaGVja2luZyAoRGVjb2RlRXNjYXBlIHdpbGwg
aGF2ZSBhZHZhbmNlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBsYXN0
IGNoYXJhY3RlciBvZiB0aGUgcGFpcikuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
cHV0LmFwcGVuZCgnJScpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBl
bmQoc3RhdGljX2Nhc3Q8Y2hhcj4oc3BlY1tpIC0gMV0pKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvdXRwdXQuYXBwZW5kKHN0YXRpY19jYXN0PGNoYXI+KHNwZWNbaV0pKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEludmFsaWQgZXNjYXBlIHNlcXVlbmNlLiBJRTcgcmVqZWN0
cyBhbnkgVVJMcyB3aXRoIHN1Y2gKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlcXVlbmNl
cywgd2hpbGUgRmlyZWZveCwgSUU2LCBhbmQgU2FmYXJpIGFsbCBwYXNzIGl0IHRocm91Z2gKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHVuY2hhbmdlZC4gV2UgYXJlIG1vcmUgcGVybWlzc2l2
ZSB1bmxpa2UgSUU3LiBJIGRvbid0IHRoaW5rIHRoaXMKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGNhbiBjYXVzZSBzaWduaWZpY2FudCBwcm9ibGVtcywgaWYgaXQgZG9lcywgd2Ugc2hvdWxk
IGNoYW5nZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gYmUgbW9yZSBsaWtlIElFNy4K
LSAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJyUnKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmbGFncyAmIElOVkFMSURf
QklUKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZvciBOVUxMcywgZXRjLiBmYWlsLgotICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRVUkxFc2NhcGVkQ2hhcmFjdGVyKG91dENoLCBvdXRwdXQp
OwotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7Ci0KLSAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGZsYWdzICYgRVNDQVBFX0JJVCkgewotICAgICAgICAgICAgICAgICAgICAv
LyBUaGlzIGNoYXJhY3RlciBzaG91bGQgYmUgZXNjYXBlZC4KLSAgICAgICAgICAgICAgICAgICAg
YXBwZW5kVVJMRXNjYXBlZENoYXJhY3RlcihvdXRDaCwgb3V0cHV0KTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIE5vdGhpbmcgc3Bl
Y2lhbCBhYm91dCB0aGlzIGNoYXJhY3RlciwganVzdCBhcHBlbmQgaXQuCi0gICAgICAgICAgICAg
ICAgb3V0cHV0LmFwcGVuZChvdXRDaCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGUsIHR5cGVuYW1lIFVDSEFSPgotYm9vbCBkb1BhdGgoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3Bl
YywgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJM
Q29tcG9uZW50JiBvdXRwdXRQYXRoKQotewotICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0gICAg
b3V0cHV0UGF0aC5zZXRCZWdpbihvdXRwdXQubGVuZ3RoKCkpOwotICAgIGlmIChwYXRoLmxlbmd0
aCgpID4gMCkgewotICAgICAgICAvLyBXcml0ZSBvdXQgYW4gaW5pdGlhbCBzbGFzaCBpZiB0aGUg
aW5wdXQgaGFzIG5vbmUuIElmIHdlIGp1c3QgcGFyc2UgYSBVUkwKLSAgICAgICAgLy8gYW5kIHRo
ZW4gY2Fub25pY2FsaXplIGl0LCBpdCB3aWxsIG9mIGNvdXJzZSBoYXZlIGEgc2xhc2ggYWxyZWFk
eS4gVGhpcwotICAgICAgICAvLyBjaGVjayBpcyBmb3IgdGhlIHJlcGxhY2VtZW50IGFuZCByZWxh
dGl2ZSBVUkwgcmVzb2x2aW5nIGNhc2VzIG9mIGZpbGUKLSAgICAgICAgLy8gVVJMcy4KLSAgICAg
ICAgaWYgKCFVUkxQYXJzZXI6OmlzVVJMU2xhc2goc3BlY1twYXRoLmJlZ2luKCldKSkKLSAgICAg
ICAgICAgIG91dHB1dC5hcHBlbmQoJy8nKTsKLQotICAgICAgICBzdWNjZXNzID0gZG9QYXJ0aWFs
UGF0aDxDaGFyYWN0ZXJUeXBlLCBVQ0hBUj4oc3BlYywgcGF0aCwgb3V0cHV0UGF0aC5iZWdpbigp
LCBvdXRwdXQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIE5vIGlucHV0LCBjYW5vbmljYWwg
cGF0aCBpcyBhIHNsYXNoLgotICAgICAgICBvdXRwdXQuYXBwZW5kKCcvJyk7Ci0gICAgfQotICAg
IG91dHB1dFBhdGguc2V0TGVuZ3RoKG91dHB1dC5sZW5ndGgoKSAtIG91dHB1dFBhdGguYmVnaW4o
KSk7Ci0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLWJvb2wgQ2Fu
b25pY2FsaXplUGF0aChjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHBhdGgs
IFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxDb21wb25lbnQqIG91dHB1dFBhdGgpCi17Ci0g
ICAgcmV0dXJuIGRvUGF0aDxjaGFyLCB1bnNpZ25lZCBjaGFyPihzcGVjLCBwYXRoLCBvdXRwdXQs
ICpvdXRwdXRQYXRoKTsKLX0KLQotYm9vbCBDYW5vbmljYWxpemVQYXRoKGNvbnN0IFVDaGFyKiBz
cGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHBhdGgsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBV
UkxDb21wb25lbnQqIG91dHB1dFBhdGgpCi17Ci0gICAgcmV0dXJuIGRvUGF0aDxVQ2hhciwgVUNo
YXI+KHNwZWMsIHBhdGgsIG91dHB1dCwgKm91dHB1dFBhdGgpOwotfQotCi1ib29sIENhbm9uaWNh
bGl6ZVBhcnRpYWxQYXRoKGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0
aCwgaW50IHBhdGhCZWdpbkluT3V0cHV0LCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKLXsKLSAg
ICByZXR1cm4gZG9QYXJ0aWFsUGF0aDxjaGFyLCB1bnNpZ25lZCBjaGFyPihzcGVjLCBwYXRoLCBw
YXRoQmVnaW5Jbk91dHB1dCwgb3V0cHV0KTsKLX0KLQotYm9vbCBDYW5vbmljYWxpemVQYXJ0aWFs
UGF0aChjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLCBpbnQgcGF0
aEJlZ2luSW5PdXRwdXQsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQotewotICAgIHJldHVybiBk
b1BhcnRpYWxQYXRoPFVDaGFyLCBVQ2hhcj4oc3BlYywgcGF0aCwgcGF0aEJlZ2luSW5PdXRwdXQs
IG91dHB1dCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIKLQotfSAvLyBu
YW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvdXJsL3NyYy9VUkxDYW5vblBhdGh1cmwuY3BwIGIvU291cmNlL1dURi93dGYvdXJs
L3NyYy9VUkxDYW5vblBhdGh1cmwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBj
ZWEwMzdjMjE0MWQwMmUxZjgwZmRlYzZiNmJjZGViYzczYWU2MmE4Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJM
Q2Fub25QYXRodXJsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IDIwMDcgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgot
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBGdW5jdGlvbnMgZm9yIGNh
bm9uaWNhbGl6aW5nICJwYXRoIiBVUkxzLiBOb3QgdG8gYmUgY29uZnVzZWQgd2l0aCB0aGUgcGF0
aAotLy8gb2YgYSBVUkwsIHRoZXNlIGFyZSBVUkxzIHRoYXQgaGF2ZSBubyBhdXRob3JpdHkgc2Vj
dGlvbiwgb25seSBhIHBhdGguIEZvcgotLy8gZXhhbXBsZSwgImphdmFzY3JpcHQ6IiBhbmQgImRh
dGE6Ii4KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlVSTENhbm9uLmgiCi0KLSNp
bmNsdWRlICJSYXdVUkxCdWZmZXIuaCIKLSNpbmNsdWRlICJVUkxDYW5vbkludGVybmFsLmgiCi0K
LSNpZiBVU0UoV1RGVVJMKQotCi1uYW1lc3BhY2UgV1RGIHsKLQotbmFtZXNwYWNlIFVSTENhbm9u
aWNhbGl6ZXIgewotCi1uYW1lc3BhY2UgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlLCB0eXBlbmFtZSBVQ0hBUj4KLWJvb2wgZG9DYW5vbmljYWxpemVQYXRoVVJMKGNvbnN0IFVS
TENvbXBvbmVudFNvdXJjZTxDaGFyYWN0ZXJUeXBlPiYgc291cmNlLCBjb25zdCBVUkxTZWdtZW50
cyYgcGFyc2VkLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVudHMmIG91cHV0UGFy
c2VkKQotewotICAgIC8vIFNjaGVtZTogdGhpcyB3aWxsIGFwcGVuZCB0aGUgY29sb24uCi0gICAg
Ym9vbCBzdWNjZXNzID0gY2Fub25pY2FsaXplU2NoZW1lKHNvdXJjZS5zY2hlbWUsIHBhcnNlZC5z
Y2hlbWUsIG91dHB1dCwgb3VwdXRQYXJzZWQuc2NoZW1lKTsKLQotICAgIC8vIFdlIGFzc3VtZSB0
aGVyZSdzIG5vIGF1dGhvcml0eSBmb3IgcGF0aCBVUkxzLiBOb3RlIHRoYXQgaG9zdHMgc2hvdWxk
IG5ldmVyCi0gICAgLy8gaGF2ZSAtMSBsZW5ndGguCi0gICAgb3VwdXRQYXJzZWQudXNlcm5hbWUu
cmVzZXQoKTsKLSAgICBvdXB1dFBhcnNlZC5wYXNzd29yZC5yZXNldCgpOwotICAgIG91cHV0UGFy
c2VkLmhvc3QucmVzZXQoKTsKLSAgICBvdXB1dFBhcnNlZC5wb3J0LnJlc2V0KCk7Ci0KLSAgICBp
ZiAocGFyc2VkLnBhdGguaXNWYWxpZCgpKSB7Ci0gICAgICAgIC8vIENvcHkgdGhlIHBhdGggdXNp
bmcgcGF0aCBVUkwncyBtb3JlIGxheCBlc2NhcGluZyBydWxlcyAodGhpbmsgZm9yCi0gICAgICAg
IC8vIGphdmFzY3JpcHQ6KS4gV2UgY29udmVydCB0byBVVEYtOCBhbmQgZXNjYXBlIG5vbi1BU0NJ
SSwgYnV0IGxlYXZlIGFsbAotICAgICAgICAvLyBBU0NJSSBjaGFyYWN0ZXJzIGFsb25lLiBUaGlz
IGhlbHBzIHJlYWRhYmlsaXR5IG9mIEphdmFTdHJpcHQuCi0gICAgICAgIG91cHV0UGFyc2VkLnBh
dGguc2V0QmVnaW4ob3V0cHV0Lmxlbmd0aCgpKTsKLSAgICAgICAgaW50IGVuZCA9IHBhcnNlZC5w
YXRoLmVuZCgpOwotICAgICAgICBmb3IgKGludCBpID0gcGFyc2VkLnBhdGguYmVnaW4oKTsgaSA8
IGVuZDsgKytpKSB7Ci0gICAgICAgICAgICBVQ0hBUiB1Y2ggPSBzdGF0aWNfY2FzdDxVQ0hBUj4o
c291cmNlLnBhdGhbaV0pOwotICAgICAgICAgICAgaWYgKHVjaCA8IDB4MjAgfHwgdWNoID49IDB4
ODApCi0gICAgICAgICAgICAgICAgc3VjY2VzcyAmPSBBcHBlbmRVVEY4RXNjYXBlZENoYXIoc291
cmNlLnBhdGgsICZpLCBlbmQsIG91dHB1dCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgb3V0cHV0LmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPih1Y2gpKTsKLSAgICAgICAgfQot
ICAgICAgICBvdXB1dFBhcnNlZC5wYXRoLnNldExlbmd0aChvdXRwdXQubGVuZ3RoKCkgLSBvdXB1
dFBhcnNlZC5wYXRoLmJlZ2luKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEVtcHR5IHBh
dGguCi0gICAgICAgIG91cHV0UGFyc2VkLnBhdGgucmVzZXQoKTsKLSAgICB9Ci0KLSAgICAvLyBB
c3N1bWUgdGhlcmUncyBubyBxdWVyeSBvciByZWYuCi0gICAgb3VwdXRQYXJzZWQucXVlcnkucmVz
ZXQoKTsKLSAgICBvdXB1dFBhcnNlZC5mcmFnbWVudC5yZXNldCgpOwotCi0gICAgcmV0dXJuIHN1
Y2Nlc3M7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLWJvb2wgY2Fub25pY2FsaXplUGF0aFVSTChj
b25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLCBVUkxCdWZmZXI8Y2hh
cj4mIG91dHB1dCwgVVJMU2VnbWVudHMmIG91cHV0UGFyc2VkKQotewotICAgIHJldHVybiBkb0Nh
bm9uaWNhbGl6ZVBhdGhVUkw8Y2hhciwgdW5zaWduZWQgY2hhcj4oVVJMQ29tcG9uZW50U291cmNl
PGNoYXI+KHNwZWMpLCBwYXJzZWQsIG91dHB1dCwgb3VwdXRQYXJzZWQpOwotfQotCi1ib29sIGNh
bm9uaWNhbGl6ZVBhdGhVUkwoY29uc3QgVUNoYXIqIHNwZWMsIGNvbnN0IFVSTFNlZ21lbnRzJiBw
YXJzZWQsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxTZWdtZW50cyYgb3VwdXRQYXJzZWQp
Ci17Ci0gICAgcmV0dXJuIGRvQ2Fub25pY2FsaXplUGF0aFVSTDxVQ2hhciwgVUNoYXI+KFVSTENv
bXBvbmVudFNvdXJjZTxVQ2hhcj4oc3BlYyksIHBhcnNlZCwgb3V0cHV0LCBvdXB1dFBhcnNlZCk7
Ci19Ci0KLWJvb2wgUmVwbGFjZVBhdGhVUkwoY29uc3QgY2hhciogYmFzZSwgY29uc3QgVVJMU2Vn
bWVudHMmIGJhc2VQYXJzZWQsIGNvbnN0IFJlcGxhY2VtZW50czxjaGFyPiYgcmVwbGFjZW1lbnRz
LCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVudHMqIG91cHV0UGFyc2VkKQotewot
ICAgIFVSTENvbXBvbmVudFNvdXJjZTxjaGFyPiBzb3VyY2UoYmFzZSk7Ci0gICAgVVJMU2VnbWVu
dHMgcGFyc2VkKGJhc2VQYXJzZWQpOwotICAgIFNldHVwT3ZlcnJpZGVDb21wb25lbnRzKGJhc2Us
IHJlcGxhY2VtZW50cywgJnNvdXJjZSwgJnBhcnNlZCk7Ci0gICAgcmV0dXJuIGRvQ2Fub25pY2Fs
aXplUGF0aFVSTDxjaGFyLCB1bnNpZ25lZCBjaGFyPihzb3VyY2UsIHBhcnNlZCwgb3V0cHV0LCAq
b3VwdXRQYXJzZWQpOwotfQotCi1ib29sIFJlcGxhY2VQYXRoVVJMKGNvbnN0IGNoYXIqIGJhc2Us
IGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLCBjb25zdCBSZXBsYWNlbWVudHM8VUNoYXI+
JiByZXBsYWNlbWVudHMsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxTZWdtZW50cyogb3Vw
dXRQYXJzZWQpCi17Ci0gICAgUmF3VVJMQnVmZmVyPGNoYXI+IHV0Zjg7Ci0gICAgVVJMQ29tcG9u
ZW50U291cmNlPGNoYXI+IHNvdXJjZShiYXNlKTsKLSAgICBVUkxTZWdtZW50cyBwYXJzZWQoYmFz
ZVBhcnNlZCk7Ci0gICAgU2V0dXBVVEYxNk92ZXJyaWRlQ29tcG9uZW50cyhiYXNlLCByZXBsYWNl
bWVudHMsIHV0ZjgsICZzb3VyY2UsICZwYXJzZWQpOwotICAgIHJldHVybiBkb0Nhbm9uaWNhbGl6
ZVBhdGhVUkw8Y2hhciwgdW5zaWduZWQgY2hhcj4oc291cmNlLCBwYXJzZWQsIG91dHB1dCwgKm91
cHV0UGFyc2VkKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplcgotCi19IC8v
IG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uUXVlcnkuY3BwIGIvU291cmNlL1dURi93dGYvdXJs
L3NyYy9VUkxDYW5vblF1ZXJ5LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjIw
ZDRjM2QxOThmZDM5NzU5OGU2NDUzMWU1ZjEwNTliMzIzODJiYi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENh
bm9uUXVlcnkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTg5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgMjAwNyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJVUkxDYW5vbi5oIgotCi0jaW5jbHVkZSAiUmF3VVJMQnVmZmVyLmgiCi0jaW5jbHVk
ZSAiVVJMQ2Fub25JbnRlcm5hbC5oIgotI2luY2x1ZGUgIlVSTENoYXJhY3RlclR5cGVzLmgiCi0j
aW5jbHVkZSA8d3RmL3RleHQvQVNDSUlGYXN0UGF0aC5oPgotI2luY2x1ZGUgPHd0Zi91cmwvYXBp
L1VSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlci5oPgotCi0vLyBRdWVyeSBjYW5vbmljYWxpemF0aW9u
IGluIElFCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBJRSBpcyB2ZXJ5IHBl
cm1pc3NpdmUgZm9yIHF1ZXJ5IHBhcmFtZXRlcnMgc3BlY2lmaWVkIGluIGxpbmtzIG9uIHRoZSBw
YWdlCi0vLyAoaW4gY29udHJhc3QgdG8gbGlua3MgdGhhdCBpdCBjb25zdHJ1Y3RzIGl0c2VsZiBi
YXNlZCBvbiBmb3JtIGRhdGEpLiBJdCBkb2VzCi0vLyBub3QgdW5lc2NhcGUgYW55IGNoYXJhY3Rl
ci4gSXQgZG9lcyBub3QgcmVqZWN0IGFueSBlc2NhcGUgc2VxdWVuY2UgKGJlIHRoZXkKLS8vIGlu
dmFsaWQgbGlrZSAiJTJ5IiBvciBmcmVha3kgbGlrZSAlMDApLgotLy8KLS8vIElFIG9ubHkgZXNj
YXBlcyBzcGFjZXMgYW5kIG5vdGhpbmcgZWxzZS4gRW1iZWRkZWQgTlVMTHMsIHRhYnMgKDB4MDkp
LAotLy8gTEYgKDB4MGEpLCBhbmQgQ1IgKDB4MGQpIGFyZSByZW1vdmVkICh0aGlzIHByb2JhYmx5
IGhhcHBlbnMgYXQgYW4gZWFybGllcgotLy8gbGF5ZXIgc2luY2UgdGhleSBhcmUgcmVtb3ZlZCBm
cm9tIGFsbCBwb3J0aW9ucyBvZiB0aGUgVVJMKS4gQWxsIG90aGVyCi0vLyBjaGFyYWN0ZXJzIGFy
ZSBwYXNzZWQgdW5tb2RpZmllZC4gSW52YWxpZCBVVEYtMTYgc2VxdWVuY2VzIGFyZSBwcmVzZXJ2
ZWQgYXMKLS8vIHdlbGwsIHdpdGggZWFjaCBjaGFyYWN0ZXIgaW4gdGhlIGlucHV0IGJlaW5nIGNv
bnZlcnRlZCB0byBVVEYtOC4gSXQgaXMgdGhlCi0vLyBzZXJ2ZXIncyBqb2IgdG8gbWFrZSBzZW5z
ZSBvZiB0aGlzIGludmFsaWQgcXVlcnkuCi0vLwotLy8gSW52YWxpZCBtdWx0aWJ5dGUgc2VxdWVu
Y2VzIChmb3IgZXhhbXBsZSwgaW52YWxpZCBVVEYtOCBvbiBhIFVURi04IHBhZ2UpCi0vLyBhcmUg
Y29udmVydGVkIHRvIHRoZSBpbnZhbGlkIGNoYXJhY3RlciBhbmQgc2VudCBhcyB1bmVzY2FwZWQg
VVRGLTggKDB4ZWYsCi0vLyAweGJmLCAweGJkKS4gVGhpcyBtYXkgbm90IGJlIGNhbm9uaWNhbGl6
YXRpb24sIHRoZSBwYXJzZXIgbWF5IGdlbmVyYXRlIHRoZXNlCi0vLyBzdHJpbmdzIGJlZm9yZSB0
aGUgVVJMIGhhbmRsZXIgZXZlciBzZWVzIHRoZW0uCi0vLwotLy8gT3VyIHF1ZXJ5IGNhbm9uaWNh
bGl6YXRpb24KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBXZSBlc2NhcGUgYWxs
IG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGFuZCBjb250cm9sIGNoYXJhY3RlcnMsIGxpa2UgRmlyZWZv
eC4KLS8vIFRoaXMgaXMgbW9yZSBjb25mb3JtYW50IHRvIHRoZSBVUkwgc3BlYywgYW5kIHRoZXJl
IGRvIG5vdCBzZWVtIHRvIGJlIG1hbnkKLS8vIHByb2JsZW1zIHJlbGF0aW5nIHRvIEZpcmVmb3gn
cyBiZWhhdmlvci4KLS8vCi0vLyBMaWtlIElFLCB3ZSB3aWxsIG5ldmVyIHVuZXNjYXBlIChhbHRo
b3VnaCB0aGUgYXBwbGljYXRpb24gbWF5IHdhbnQgdG8gdHJ5Ci0vLyB1bmVzY2FwaW5nIHRvIHBy
ZXNlbnQgdGhlIHVzZXIgd2l0aCBhIG1vcmUgdW5kZXJzdGFuZGFibGUgVVJMKS4gV2Ugd2lsbAot
Ly8gcmVwbGFjZSBhbGwgaW52YWxpZCBzZXF1ZW5jZXMgKGluY2x1ZGluZyBpbnZhbGlkIFVURi0x
NiBzZXF1ZW5jZXMsIHdoaWNoIElFCi0vLyBkb2Vzbid0KSB3aXRoIHRoZSAiaW52YWxpZCBjaGFy
YWN0ZXIsIiBhbmQgd2Ugd2lsbCBlc2NhcGUgaXQuCi0KLSNpZiBVU0UoV1RGVVJMKQotCi1uYW1l
c3BhY2UgV1RGIHsKLQotbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIgewotCi1uYW1lc3BhY2Ug
ewotCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNoYXJhY3RlcnMgc3RhcnRpbmcgYXQgfGJlZ2lu
fCBhbmQgZ29pbmcgdW50aWwgfGVuZHwKLS8vIChub24taW5jbHVzaXZlKSBhcmUgYWxsIHJlcHJl
c2VudGFibGUgaW4gNy1iaXRzLgotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWJv
b2wgaXNBbGxBU0NJSShjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21wb25l
bnQmIHF1ZXJ5KQotewotICAgIHJldHVybiBjaGFyYWN0ZXJzQXJlQWxsQVNDSUkoc3BlYyArIHF1
ZXJ5LmJlZ2luKCksIHF1ZXJ5Lmxlbmd0aCgpKTsKLX0KLQotLy8gRklYTUU6IEJlbmphbWluOiBn
ZXQgcmlkIG9mIHRoaXMgd2hlbiBldmVyeXRoaW5nIGlzIGJhc2VkIG9uIExDaGFyLgotdGVtcGxh
dGU8PgotYm9vbCBpc0FsbEFTQ0lJPGNoYXI+KGNvbnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENv
bXBvbmVudCYgcXVlcnkpCi17Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNBcmVBbGxBU0NJSShyZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oc3BlYyArIHF1ZXJ5LmJlZ2luKCkpLCBxdWVyeS5s
ZW5ndGgoKSk7Ci19Ci0KLS8vIEFwcGVuZHMgdGhlIGdpdmVuIHN0cmluZyB0byB0aGUgb3V0cHV0
LCBlc2NhcGluZyBjaGFyYWN0ZXJzIHRoYXQgZG8gbm90Ci0vLyBtYXRjaCB0aGUgZ2l2ZW4gfHR5
cGV8IGluIFNoYXJlZENoYXJUeXBlcy4gVGhpcyB2ZXJzaW9uIHdpbGwgYWNjZXB0IDggb3IgMTYK
LS8vIGJpdCBjaGFyYWN0ZXJzLCBidXQgYXNzdW1lcyB0aGF0IHRoZXkgaGF2ZSBvbmx5IDctYml0
IHZhbHVlcy4gSXQgYWxzbyBhc3N1bWVzCi0vLyB0aGF0IGFsbCBVVEYtOCB2YWx1ZXMgYXJlIGNv
cnJlY3QsIHNvIGRvZXNuJ3QgYm90aGVyIGNoZWNraW5nCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgotdm9pZCBhcHBlbmRSYXc4Qml0UXVlcnlTdHJpbmcoY29uc3QgQ2hhcmFjdGVy
VHlwZSogc291cmNlLCBpbnQgbGVuZ3RoLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKLXsKLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmICghVVJMQ2hh
cmFjdGVyVHlwZXM6OmlzUXVlcnlDaGFyKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHNvdXJj
ZVtpXSkpKQotICAgICAgICAgICAgYXBwZW5kVVJMRXNjYXBlZENoYXJhY3RlcihzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyPihzb3VyY2VbaV0pLCBvdXRwdXQpOwotICAgICAgICBlbHNlIC8vIERv
ZXNuJ3QgbmVlZCBlc2NhcGluZy4KLSAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoc3RhdGljX2Nh
c3Q8Y2hhcj4oc291cmNlW2ldKSk7Ci0gICAgfQotfQotCi0vLyBSdW5zIHRoZSBjb252ZXJ0ZXIg
b24gdGhlIGdpdmVuIFVURi04IGlucHV0LiBTaW5jZSB0aGUgY29udmVydGVyIGV4cGVjdHMKLS8v
IFVURi0xNiwgd2UgaGF2ZSB0byBjb252ZXJ0IGZpcnN0LiBUaGUgY29udmVydGVyIG11c3QgYmUg
bm9uLW51bGwuCi12b2lkIHJ1bkNvbnZlcnRlcihjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxD
b21wb25lbnQmIHF1ZXJ5LCBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqIGNvbnZlcnRlciwgVVJM
QnVmZmVyPGNoYXI+JiBvdXRwdXQpCi17Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIHJlcGxh
Y2UgYW55IG1pc2VuY29kZWQgdmFsdWVzIHdpdGggdGhlIGludmFsaWQKLSAgICAvLyBjaGFyYWN0
ZXIuIFRoaXMgaXMgd2hhdCB3ZSB3YW50IHNvIHdlIGRvbid0IGhhdmUgdG8gY2hlY2sgZm9yIGVy
cm9yLgotICAgIFJhd1VSTEJ1ZmZlcjxVQ2hhcj4gdXRmMTY7Ci0gICAgQ29udmVydFVURjhUb1VU
RjE2KCZzcGVjW3F1ZXJ5LmJlZ2luKCldLCBxdWVyeS5sZW5ndGgoKSwgdXRmMTYpOwotICAgIGNv
bnZlcnRlci0+Y29udmVydEZyb21VVEYxNih1dGYxNi5kYXRhKCksIHV0ZjE2Lmxlbmd0aCgpLCBv
dXRwdXQpOwotfQotCi0vLyBSdW5zIHRoZSBjb252ZXJ0ZXIgd2l0aCB0aGUgZ2l2ZW4gVVRGLTE2
IGlucHV0LiBXZSBkb24ndCBoYXZlIHRvIGRvCi0vLyBhbnl0aGluZywgYnV0IHRoaXMgb3ZlcnJp
ZGRkZW4gZnVuY3Rpb24gYWxsb3dzIHVzIHRvIHVzZSB0aGUgc2FtZSBjb2RlCi0vLyBmb3IgYm90
aCBVVEYtOCBhbmQgVVRGLTE2IGlucHV0Lgotdm9pZCBydW5Db252ZXJ0ZXIoY29uc3QgVUNoYXIq
IHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgcXVlcnksIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRl
ciogY29udmVydGVyLCBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCkKLXsKLSAgICBjb252ZXJ0ZXIt
PmNvbnZlcnRGcm9tVVRGMTYoJnNwZWNbcXVlcnkuYmVnaW4oKV0sIHF1ZXJ5Lmxlbmd0aCgpLCBv
dXRwdXQpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotdm9pZCBkb0Nv
bnZlcnRUb1F1ZXJ5RW5jb2RpbmcoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJM
Q29tcG9uZW50JiBxdWVyeSwgVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyKiBjb252ZXJ0ZXIsIFVS
TEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQotewotICAgIGlmIChpc0FsbEFTQ0lJKHNwZWMsIHF1ZXJ5
KSkgewotICAgICAgICAvLyBFYXN5OiB0aGUgaW5wdXQgY2FuIGp1c3QgYXBwZW5kZWQgd2l0aCBu
byBjaGFyYWN0ZXIgc2V0IGNvbnZlcnNpb25zLgotICAgICAgICBhcHBlbmRSYXc4Qml0UXVlcnlT
dHJpbmcoJnNwZWNbcXVlcnkuYmVnaW4oKV0sIHF1ZXJ5Lmxlbmd0aCgpLCBvdXRwdXQpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIC8vIEhhcmRlcjogY29udmVydCB0byB0aGUgcHJvcGVyIGVuY29k
aW5nIGZpcnN0LgotICAgICAgICBpZiAoY29udmVydGVyKSB7Ci0gICAgICAgICAgICAvLyBSdW4g
dGhlIGNvbnZlcnRlciB0byBnZXQgYW4gOC1iaXQgc3RyaW5nLCB0aGVuIGFwcGVuZCBpdCwgZXNj
YXBpbmcKLSAgICAgICAgICAgIC8vIG5lY2Vzc2FyeSB2YWx1ZXMuCi0gICAgICAgICAgICBSYXdV
UkxCdWZmZXI8Y2hhcj4gZWlnaHRCaXRRdWVyeVN0cmluZzsKLSAgICAgICAgICAgIHJ1bkNvbnZl
cnRlcihzcGVjLCBxdWVyeSwgY29udmVydGVyLCBlaWdodEJpdFF1ZXJ5U3RyaW5nKTsKLSAgICAg
ICAgICAgIGFwcGVuZFJhdzhCaXRRdWVyeVN0cmluZyhlaWdodEJpdFF1ZXJ5U3RyaW5nLmRhdGEo
KSwgZWlnaHRCaXRRdWVyeVN0cmluZy5sZW5ndGgoKSwgb3V0cHV0KTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIC8vIE5vIGNvbnZlcnRlciwgZG8gb3VyIG93biBVVEYtOCBjb252ZXJz
aW9uLgotICAgICAgICAgICAgYXBwZW5kU3RyaW5nT2ZUeXBlKCZzcGVjW3F1ZXJ5LmJlZ2luKCld
LCBxdWVyeS5sZW5ndGgoKSwgVVJMQ2hhcmFjdGVyVHlwZXM6OlF1ZXJ5Q2hhcmFjdGVyLCBvdXRw
dXQpOwotICAgICAgICB9Ci0gICAgfQotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPgotdm9pZCBkb0Nhbm9uaWNhbGl6ZVF1ZXJ5KGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMs
IGNvbnN0IFVSTENvbXBvbmVudCYgcXVlcnksIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciogY29u
dmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0
LCBVUkxDb21wb25lbnQmIG91dHB1dFF1ZXJ5Q29tcG9uZW50KQotewotICAgIGlmIChxdWVyeS5s
ZW5ndGgoKSA8IDApIHsKLSAgICAgICAgb3V0cHV0UXVlcnlDb21wb25lbnQgPSBVUkxDb21wb25l
bnQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG91dHB1dC5hcHBlbmQoJz8nKTsK
LSAgICBvdXRwdXRRdWVyeUNvbXBvbmVudC5zZXRCZWdpbihvdXRwdXQubGVuZ3RoKCkpOwotCi0g
ICAgZG9Db252ZXJ0VG9RdWVyeUVuY29kaW5nPENoYXJhY3RlclR5cGU+KHNwZWMsIHF1ZXJ5LCBj
b252ZXJ0ZXIsIG91dHB1dCk7Ci0KLSAgICBvdXRwdXRRdWVyeUNvbXBvbmVudC5zZXRMZW5ndGgo
b3V0cHV0Lmxlbmd0aCgpIC0gb3V0cHV0UXVlcnlDb21wb25lbnQuYmVnaW4oKSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlCi0KLXZvaWQgQ2Fub25pY2FsaXplUXVlcnkoY29uc3QgY2hhciogc3BlYywg
Y29uc3QgVVJMQ29tcG9uZW50JiBxdWVyeSwgVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyKiBjb252
ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBV
UkxDb21wb25lbnQqIG91dHB1dFF1ZXJ5Q29tcG9uZW50KQotewotICAgIGRvQ2Fub25pY2FsaXpl
UXVlcnkoc3BlYywgcXVlcnksIGNvbnZlcnRlciwgb3V0cHV0LCAqb3V0cHV0UXVlcnlDb21wb25l
bnQpOwotfQotCi12b2lkIENhbm9uaWNhbGl6ZVF1ZXJ5KGNvbnN0IFVDaGFyKiBzcGVjLCBjb25z
dCBVUkxDb21wb25lbnQmIHF1ZXJ5LCBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqIGNvbnZlcnRl
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsIFVSTENv
bXBvbmVudCogb3V0cHV0UXVlcnlDb21wb25lbnQpCi17Ci0gICAgZG9DYW5vbmljYWxpemVRdWVy
eShzcGVjLCBxdWVyeSwgY29udmVydGVyLCBvdXRwdXQsICpvdXRwdXRRdWVyeUNvbXBvbmVudCk7
Ci19Ci0KLXZvaWQgQ29udmVydFVURjE2VG9RdWVyeUVuY29kaW5nKGNvbnN0IFVDaGFyKiBpbnB1
dCwgY29uc3QgVVJMQ29tcG9uZW50JiBxdWVyeSwgVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyKiBj
b252ZXJ0ZXIsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0KQotewotICAgIGRvQ29udmVydFRvUXVl
cnlFbmNvZGluZzxVQ2hhcj4oaW5wdXQsIHF1ZXJ5LCBjb252ZXJ0ZXIsIG91dHB1dCk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFVSTENhbm9uaWNhbGl6ZXIKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0K
LSNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3Ny
Yy9VUkxDYW5vblJlbGF0aXZlLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2Fub25S
ZWxhdGl2ZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlZjA1MDA2NDMwYWZj
MmJhMjczM2M2NzQ5NzdiZjZiNGE2ZWRjY2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vblJlbGF0aXZl
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIw
MDcgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBDYW5vbmljYWxpemVyIGZ1bmN0aW9ucyBmb3Ig
d29ya2luZyB3aXRoIGFuZCByZXNvbHZpbmcgcmVsYXRpdmUgVVJMcy4KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlVSTENhbm9uLmgiCi0KLSNpbmNsdWRlICJVUkxDYW5vbkludGVy
bmFsLmgiCi0jaW5jbHVkZSAiVVJMRmlsZS5oIgotI2luY2x1ZGUgIlVSTFBhcnNlSW50ZXJuYWwu
aCIKLSNpbmNsdWRlICJVUkxVdGlsSW50ZXJuYWwuaCIKLQotI2lmIFVTRShXVEZVUkwpCi0KLW5h
bWVzcGFjZSBXVEYgewotCi1uYW1lc3BhY2UgVVJMQ2Fub25pY2FsaXplciB7Ci0KLW5hbWVzcGFj
ZSB7Ci0KLS8vIEZpcmVmb3ggZG9lcyBhIGNhc2Utc2Vuc2l0aXZlIGNvbXBhcmUgKHdoaWNoIGlz
IHByb2JhYmx5IHdyb25nLS1Nb3ppbGxhIGJ1ZwotLy8gMzc5MDM0KSwgd2hlcmVhcyBJRSBpcyBj
YXNlLWluc2Vuc2V0aXZlLgotLy8KLS8vIFdlIGNob29zZSB0byBiZSBtb3JlIHBlcm1pc3NpdmUg
bGlrZSBJRS4gV2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dAotLy8gdW5lc2NhcGluZyBvciBh
bnl0aGluZyBoZXJlOiBuZWl0aGVyIElFIG9yIEZpcmVmb3ggYWxsb3cgdGhpcy4gV2UgYWxzbwot
Ly8gZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBpbnZhbGlkIHNjaGVtZSBjaGFyYWN0ZXJzIHNp
bmNlIHdlIGFyZSBjb21wYXJpbmcKLS8vIGFnYWluc3QgdGhlIGNhbm9uaWNhbCBzY2hlbWUgb2Yg
dGhlIGJhc2UuCi0vLwotLy8gVGhlIGJhc2UgVVJMIHNob3VsZCBhbHdheXMgYmUgY2Fub25pY2Fs
LCB0aGVyZWZvcmUgaXMgQVNDSUkuCi10ZW1wbGF0ZTx0eXBlbmFtZSBDSEFSPgotYm9vbCBBcmVT
Y2hlbWVzRXF1YWwoY29uc3QgY2hhciogYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFVSTENvbXBvbmVudCYgYmFzZVNjaGVtZSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENI
QVIqIGNtcCwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgY21wU2No
ZW1lKQotewotICAgIGlmIChiYXNlU2NoZW1lLmxlbmd0aCgpICE9IGNtcFNjaGVtZS5sZW5ndGgo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmFzZVNj
aGVtZS5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgIC8vIFdlIGFzc3VtZSB0aGUgYmFzZSBpcyBh
bHJlYWR5IGNhbm9uaWNhbCwgc28gd2UgZG9uJ3QgaGF2ZSB0bwotICAgICAgICAvLyBjYW5vbmlj
YWxpemUgaXQuCi0gICAgICAgIGlmIChjYW5vbmljYWxTY2hlbWVDaGFyKGNtcFtjbXBTY2hlbWUu
YmVnaW4oKSArIGldKSAhPQotICAgICAgICAgICAgYmFzZVtiYXNlU2NoZW1lLmJlZ2luKCkgKyBp
XSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLSNpZiBPUyhXSU5ET1dTKQotLy8gSGVyZSwgd2UgYWxzbyBhbGxvdyBXaW5kb3dzIHBhdGhz
IHRvIGJlIHJlcHJlc2VudGVkIGFzICIvQzovIiBzbyB3ZSBjYW4gYmUKLS8vIGNvbnNpc3RlbnQg
YWJvdXQgVVJMIHBhdGhzIGJlZ2lubmluZyB3aXRoIHNsYXNoZXMuIFRoaXMgZnVuY3Rpb24gaXMg
bGlrZQotLy8gRG9lc0JlZ2luV2luZG93c0RyaXZlUGF0aCBleGNlcHQgdGhhdCBpdCBhbHNvIHJl
cXVpcmVzIGEgc2xhc2ggYXQgdGhlCi0vLyBiZWdpbm5pbmcuCi10ZW1wbGF0ZTx0eXBlbmFtZSBD
SEFSPgotYm9vbCBkb2VzQmVnaW5TbGFzaFdpbmRvd3NEcml2ZVNwZWMoY29uc3QgQ0hBUiogc3Bl
YywgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgc3BlY0xlbmd0aCkKLXsKLSAgICBpZiAoc3RhcnRPZmZz
ZXQgPj0gc3BlY0xlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBVUkxQ
YXJzZXI6OmlzVVJMU2xhc2goc3BlY1tzdGFydE9mZnNldF0pICYmIFVSTFBhcnNlcjo6ZG9lc0Jl
Z2luV2luZG93c0RyaXZlU3BlYyhzcGVjLCBzdGFydE9mZnNldCArIDEsIHNwZWNMZW5ndGgpOwot
fQotCi0jZW5kaWYgLy8gT1MoV0lORE9XUykKLQotLy8gU2VlIGlzUmVsYXRpdmVVUkwgaW4gdGhl
IGhlYWRlciBmaWxlIGZvciB1c2FnZS4KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
Ci1ib29sIGRvSXNSZWxhdGl2ZVVSTChjb25zdCBjaGFyKiBiYXNlLCBjb25zdCBVUkxTZWdtZW50
cyYgYmFzZVBhcnNlZCwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENoYXJhY3RlclR5cGUq
IHVybCwgaW50IHVybExlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNCYXNlSGll
cmFyY2hpY2FsLAotICAgICAgICAgICAgICAgICAgICAgYm9vbCYgaXNSZWxhdGl2ZSwgVVJMQ29t
cG9uZW50JiByZWxhdGl2ZUNvbXBvbmVudCkKLXsKLSAgICBpc1JlbGF0aXZlID0gZmFsc2U7IC8v
IFNvIHdlIGNhbiBkZWZhdWx0IGxhdGVyIHRvIG5vdCByZWxhdGl2ZS4KLQotICAgIC8vIFRyaW0g
d2hpdGVzcGFjZSBhbmQgY29uc3RydWN0IGEgbmV3IHJhbmdlIGZvciB0aGUgc3Vic3RyaW5nLgot
ICAgIGludCBiZWdpbiA9IDA7Ci0gICAgVVJMUGFyc2VyOjp0cmltVVJMKHVybCwgYmVnaW4sIHVy
bExlbmd0aCk7Ci0gICAgaWYgKGJlZ2luID49IHVybExlbmd0aCkgewotICAgICAgICAvLyBFbXB0
eSBVUkxzIGFyZSByZWxhdGl2ZSwgYnV0IGRvIG5vdGhpbmcuCi0gICAgICAgIHJlbGF0aXZlQ29t
cG9uZW50ID0gVVJMQ29tcG9uZW50KGJlZ2luLCAwKTsKLSAgICAgICAgaXNSZWxhdGl2ZSA9IHRy
dWU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotI2lmIE9TKFdJTkRPV1MpCi0gICAg
Ly8gV2Ugc3BlY2lhbCBjYXNlIHBhdGhzIGxpa2UgIkM6XGZvbyIgc28gdGhleSBjYW4gbGluayBk
aXJlY3RseSB0byB0aGUKLSAgICAvLyBmaWxlIG9uIFdpbmRvd3MgKElFIGNvbXBhdGFiaWxpdHkp
LiBUaGUgc2VjdXJpdHkgZG9tYWluIHN0dWZmIHNob3VsZAotICAgIC8vIHByZXZlbnQgYSBsaW5r
IGxpa2UgdGhpcyBmcm9tIGFjdHVhbGx5IGJlaW5nIGZvbGxvd2VkIGlmIGl0cyBvbiBhCi0gICAg
Ly8gd2ViIHBhZ2UuCi0gICAgLy8KLSAgICAvLyBXZSB0cmVhdCAiQzovZm9vIiBhcyBhbiBhYnNv
bHV0ZSBVUkwuIFdlIGNhbiBnbyBhaGVhZCBhbmQgdHJlYXQgIi9jOi8iCi0gICAgLy8gYXMgcmVs
YXRpdmUsIGFzIHRoaXMgd2lsbCBqdXN0IHJlcGxhY2UgdGhlIHBhdGggd2hlbiB0aGUgYmFzZSBz
Y2hlbWUKLSAgICAvLyBpcyBhIGZpbGUgYW5kIHRoZSBhbnN3ZXIgd2lsbCBzdGlsbCBiZSBjb3Jy
ZWN0LgotICAgIC8vCi0gICAgLy8gV2UgcmVxdWlyZSBzdHJpY3QgYmFja3NsYXNoZXMgd2hlbiBk
ZXRlY3RpbmcgVU5DIHNpbmNlIHR3byBmb3J3YXJkCi0gICAgLy8gc2hhc2hlcyBzaG91bGQgYmUg
dHJlYXRlZCBhIGEgcmVsYXRpdmUgVVJMIHdpdGggYSBob3N0bmFtZS4KLSAgICBpZiAoVVJMUGFy
c2VyOjpkb2VzQmVnaW5XaW5kb3dzRHJpdmVTcGVjKHVybCwgYmVnaW4sIHVybExlbmd0aCkgfHwg
VVJMUGFyc2VyOjpkb2VzQmVnaW5VTkNQYXRoKHVybCwgYmVnaW4sIHVybExlbmd0aCwgdHJ1ZSkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotI2VuZGlmIC8vIE9TKFdJTkRPV1MpCi0KLSAgICAvLyBT
ZWUgaWYgd2UndmUgZ290IGEgc2NoZW1lLCBpZiBub3QsIHdlIGtub3cgdGhpcyBpcyBhIHJlbGF0
aXZlIFVSTC4KLSAgICAvLyBCVVQ6IEp1c3QgYmVjYXVzZSB3ZSBoYXZlIGEgc2NoZW1lLCBkb2Vz
bid0IG1ha2UgaXQgYWJzb2x1dGUuCi0gICAgLy8gImh0dHA6Zm9vLmh0bWwiIGlzIGEgcmVsYXRp
dmUgVVJMIHdpdGggcGF0aCAiZm9vLmh0bWwiLiBJZiB0aGUgc2NoZW1lIGlzCi0gICAgLy8gZW1w
dHksIHdlIHRyZWF0IGl0IGFzIHJlbGF0aXZlICgiOmZvbyIpIGxpa2UgSUUgZG9lcy4KLSAgICBV
UkxDb21wb25lbnQgc2NoZW1lOwotICAgIGlmICghVVJMUGFyc2VyOjpFeHRyYWN0U2NoZW1lKHVy
bCwgdXJsTGVuZ3RoLCAmc2NoZW1lKSB8fCAhc2NoZW1lLmxlbmd0aCgpKSB7Ci0gICAgICAgIC8v
IERvbid0IGFsbG93IHJlbGF0aXZlIFVSTHMgaWYgdGhlIGJhc2Ugc2NoZW1lIGRvZXNuJ3Qgc3Vw
cG9ydCBpdC4KLSAgICAgICAgaWYgKCFpc0Jhc2VIaWVyYXJjaGljYWwpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmVsYXRpdmVDb21wb25lbnQgPSBVUkxDb21wb25lbnQ6
OmZyb21SYW5nZShiZWdpbiwgdXJsTGVuZ3RoKTsKLSAgICAgICAgaXNSZWxhdGl2ZSA9IHRydWU7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIElmIHRoZSBzY2hlbWUgaXNu
J3QgdmFsaWQsIHRoZW4gaXQncyByZWxhdGl2ZS4KLSAgICBpbnQgc2NoZW1lRW5kID0gc2NoZW1l
LmVuZCgpOwotICAgIGZvciAoaW50IGkgPSBzY2hlbWUuYmVnaW4oKTsgaSA8IHNjaGVtZUVuZDsg
aSsrKSB7Ci0gICAgICAgIGlmICghY2Fub25pY2FsU2NoZW1lQ2hhcih1cmxbaV0pKSB7Ci0gICAg
ICAgICAgICByZWxhdGl2ZUNvbXBvbmVudCA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKGJlZ2lu
LCB1cmxMZW5ndGgpOwotICAgICAgICAgICAgaXNSZWxhdGl2ZSA9IHRydWU7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIHRoZSBzY2hlbWUg
aXMgbm90IHRoZSBzYW1lLCB0aGVuIHdlIGNhbid0IGNvdW50IGl0IGFzIHJlbGF0aXZlLgotICAg
IGlmICghQXJlU2NoZW1lc0VxdWFsKGJhc2UsIGJhc2VQYXJzZWQuc2NoZW1lLCB1cmwsIHNjaGVt
ZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gV2hlbiB0aGUgc2NoZW1lIHRoYXQg
dGhleSBib3RoIHNoYXJlIGlzIG5vdCBoaWVyYXJjaGljYWwsIHRyZWF0IHRoZQotICAgIC8vIGlu
Y29taW5nIHNjaGVtZSBhcyBhYnNvbHV0ZSAodGhpcyB3YXkgd2l0aCB0aGUgYmFzZSBvZiAiZGF0
YTpmb28iLAotICAgIC8vICJkYXRhOmJhciIgd2lsbCBiZSByZXBvcnRlZCBhcyBhYnNvbHV0ZS4K
LSAgICBpZiAoIWlzQmFzZUhpZXJhcmNoaWNhbCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBpbnQgY29sb25PZmZzZXQgPSBzY2hlbWUuZW5kKCk7Ci0KLSAgICAvLyBJZiBpdCdzIGEgZmls
ZXN5c3RlbSBVUkwsIHRoZSBvbmx5IHZhbGlkIHdheSB0byBtYWtlIGl0IHJlbGF0aXZlIGlzIG5v
dCB0bwotICAgIC8vIHN1cHBseSBhIHNjaGVtZS4gVGhlcmUncyBubyBlcXVpdmFsZW50IHRvIGUu
Zy4gaHR0cDppbmRleC5odG1sLgotICAgIGlmIChVUkxVdGlsaXRpZXM6OkNvbXBhcmVTY2hlbWVD
b21wb25lbnQodXJsLCBzY2hlbWUsICJmaWxlc3lzdGVtIikpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgLy8gRXh0cmFjdFNjaGVtZSBndWFyYW50ZWVzIHRoYXQgdGhlIGNvbG9uIGltbWVk
aWF0ZWx5IGZvbGxvd3Mgd2hhdCBpdAotICAgIC8vIGNvbnNpZGVycyB0byBiZSB0aGUgc2NoZW1l
LiBjb3VudENvbnNlY3V0aXZlU2xhc2hlcyB3aWxsIGhhbmRsZSB0aGUKLSAgICAvLyBjYXNlIHdo
ZXJlIHRoZSBiZWdpbiBvZmZzZXQgaXMgdGhlIGVuZCBvZiB0aGUgaW5wdXQuCi0gICAgaW50IG51
bVNsYXNoZXMgPSBVUkxQYXJzZXI6OmNvdW50Q29uc2VjdXRpdmVTbGFzaGVzKHVybCwgY29sb25P
ZmZzZXQgKyAxLCB1cmxMZW5ndGgpOwotCi0gICAgaWYgKCFudW1TbGFzaGVzIHx8IG51bVNsYXNo
ZXMgPT0gMSkgewotICAgICAgICAvLyBObyBzbGFzaGVzIG1lYW5zIGl0J3MgYSByZWxhdGl2ZSBw
YXRoIGxpa2UgImh0dHA6Zm9vLmh0bWwiLiBPbmUgc2xhc2gKLSAgICAgICAgLy8gaXMgYW4gYWJz
b2x1dGUgcGF0aC4gImh0dHA6L2hvbWUvZm9vLmh0bWwiCi0gICAgICAgIGlzUmVsYXRpdmUgPSB0
cnVlOwotICAgICAgICByZWxhdGl2ZUNvbXBvbmVudCA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdl
KGNvbG9uT2Zmc2V0ICsgMSwgdXJsTGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgLy8gVHdvIG9yIG1vcmUgc2xhc2hlcyBhZnRlciB0aGUgc2NoZW1lIHdlIHRyZWF0
IGFzIGFic29sdXRlLgotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBDb3BpZXMgYWxsIGNoYXJh
Y3RlcnMgaW4gdGhlIHJhbmdlIFtiZWdpbiwgZW5kKSBvZiB8c3BlY3wgdG8gdGhlIG91dHB1dCwK
LS8vIHVwIHVudGlsIGFuZCBpbmNsdWRpbmcgdGhlIGxhc3Qgc2xhc2guIFRoZXJlIHNob3VsZCBi
ZSBhIHNsYXNoIGluIHRoZQotLy8gcmFuZ2UsIGlmIG5vdCwgbm90aGluZyB3aWxsIGJlIGNvcGll
ZC4KLS8vCi0vLyBUaGUgaW5wdXQgaXMgYXNzdW1lZCB0byBiZSBjYW5vbmljYWwsIHNvIHdlIHNl
YXJjaCBvbmx5IGZvciBleGFjdCBzbGFzaGVzCi0vLyBhbmQgbm90IGJhY2tzbGFzaGVzIGFzIHdl
bGwuIFdlIGFsc28ga25vdyB0aGF0IGl0J3MgQVNDSUkuCi12b2lkIENvcHlUb0xhc3RTbGFzaChj
b25zdCBjaGFyKiBzcGVjLCBpbnQgYmVnaW4sIGludCBlbmQsIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0
cHV0KQotewotICAgIC8vIEZpbmQgdGhlIGxhc3Qgc2xhc2guCi0gICAgaW50IGxhc3RTbGFzaCA9
IC0xOwotICAgIGZvciAoaW50IGkgPSBlbmQgLSAxOyBpID49IGJlZ2luOyAtLWkpIHsKLSAgICAg
ICAgaWYgKHNwZWNbaV0gPT0gJy8nKSB7Ci0gICAgICAgICAgICBsYXN0U2xhc2ggPSBpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGxhc3RTbGFzaCA8IDAp
Ci0gICAgICAgIHJldHVybjsgLy8gTm8gc2xhc2guCi0KLSAgICAvLyBDb3B5LgotICAgIGZvciAo
aW50IGkgPSBiZWdpbjsgaSA8PSBsYXN0U2xhc2g7ICsraSkKLSAgICAgICAgb3V0cHV0LmFwcGVu
ZChzcGVjW2ldKTsKLX0KLQotLy8gQ29waWVzIGEgc2luZ2xlIGNvbXBvbmVudCBmcm9tIHRoZSBz
b3VyY2UgdG8gdGhlIG91dHB1dC4gVGhpcyBpcyB1c2VkCi0vLyB3aGVuIHJlc29sdmluZyByZWxh
dGl2ZSBVUkxzIGFuZCBhIGdpdmVuIGNvbXBvbmVudCBpcyB1bmNoYW5nZWQuIFNpbmNlIHRoZQot
Ly8gc291cmNlIHNob3VsZCBhbHJlYWR5IGJlIGNhbm9uaWNhbCwgd2UgZG9uJ3QgaGF2ZSB0byBk
byBhbnl0aGluZyBzcGVjaWFsLAotLy8gYW5kIHRoZSBpbnB1dCBpcyBBU0NJSS4KLXZvaWQgQ29w
eU9uZUNvbXBvbmVudChjb25zdCBjaGFyKiBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVVJMQ29tcG9uZW50JiBzb3VyY2VDb21wb25lbnQsCi0gICAgICAgICAgICAgICAgICAg
ICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgVVJMQ29t
cG9uZW50KiBvdXRwdXRDb21wb25lbnQpCi17Ci0gICAgaWYgKHNvdXJjZUNvbXBvbmVudC5sZW5n
dGgoKSA8IDApIHsKLSAgICAgICAgLy8gVGhpcyBjb21wb25lbnQgaXMgbm90IHByZXNlbnQuCi0g
ICAgICAgICpvdXRwdXRDb21wb25lbnQgPSBVUkxDb21wb25lbnQoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIG91dHB1dENvbXBvbmVudC0+c2V0QmVnaW4ob3V0cHV0Lmxlbmd0aCgp
KTsKLSAgICBpbnQgc291cmNlRW5kID0gc291cmNlQ29tcG9uZW50LmVuZCgpOwotICAgIGZvciAo
aW50IGkgPSBzb3VyY2VDb21wb25lbnQuYmVnaW4oKTsgaSA8IHNvdXJjZUVuZDsgaSsrKQotICAg
ICAgICBvdXRwdXQuYXBwZW5kKHNvdXJjZVtpXSk7Ci0gICAgb3V0cHV0Q29tcG9uZW50LT5zZXRM
ZW5ndGgob3V0cHV0Lmxlbmd0aCgpIC0gb3V0cHV0Q29tcG9uZW50LT5iZWdpbigpKTsKLX0KLQot
I2lmIE9TKFdJTkRPV1MpCi0KLS8vIENhbGxlZCBvbiBXaW5kb3dzIHdoZW4gdGhlIGJhc2UgVVJM
IGlzIGEgZmlsZSBVUkwsIHRoaXMgd2lsbCBjb3B5IHRoZSAiQzoiCi0vLyB0byB0aGUgb3V0cHV0
LCBpZiB0aGVyZSBpcyBhIGRyaXZlIGxldHRlciBhbmQgaWYgdGhhdCBkcml2ZSBsZXR0ZXIgaXMg
bm90Ci0vLyBiZWluZyBvdmVycmlkZGVuIGJ5IHRoZSByZWxhdGl2ZSBVUkwuIE90aGVyd2lzZSwg
ZG8gbm90aGluZy4KLS8vCi0vLyBJdCB3aWxsIHJldHVybiB0aGUgaW5kZXggb2YgdGhlIGJlZ2lu
bmluZyBvZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gdGhlCi0vLyBiYXNlIHRvIGJlIHByb2Nlc3Nl
ZDogaWYgdGhlcmUgaXMgYSAiQzoiLCB0aGUgc2xhc2ggYWZ0ZXIgaXQsIG9yIGlmCi0vLyB0aGVy
ZSBpcyBubyBkcml2ZSBsZXR0ZXIsIHRoZSBzbGFzaCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBw
YXRoLCBvcgotLy8gdGhlIGVuZCBvZiB0aGUgYmFzZS4gVGhpcyBjYW4gYmUgdXNlZCBhcyB0aGUg
c3RhcnRpbmcgb2Zmc2V0IGZvciBmdXJ0aGVyCi0vLyBwYXRoIHByb2Nlc3NpbmcuCi10ZW1wbGF0
ZTx0eXBlbmFtZSBDSEFSPgotaW50IENvcHlCYXNlRHJpdmVTcGVjSWZOZWNlc3NhcnkoY29uc3Qg
Y2hhciogYmFzZVVSTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiYXNl
UGF0aEJlZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJhc2VQYXRo
RW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUiogcmVsYXRp
dmVVUkwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGF0aFN0YXJ0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlbGF0aXZlVXJsTGVuZ3RoLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQp
Ci17Ci0gICAgaWYgKGJhc2VQYXRoQmVnaW4gPj0gYmFzZVBhdGhFbmQpCi0gICAgICAgIHJldHVy
biBiYXNlUGF0aEJlZ2luOyAvLyBObyBwYXRoLgotCi0gICAgLy8gSWYgdGhlIHJlbGF0aXZlIGJl
Z2lucyB3aXRoIGEgZHJpdmUgc3BlYywgZG9uJ3QgZG8gYW55dGhpbmcuIFRoZSBleGlzdGluZwot
ICAgIC8vIGRyaXZlIHNwZWMgaW4gdGhlIGJhc2Ugd2lsbCBiZSByZXBsYWNlZC4KLSAgICBpZiAo
VVJMUGFyc2VyOjpkb2VzQmVnaW5XaW5kb3dzRHJpdmVTcGVjKHJlbGF0aXZlVVJMLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFN0YXJ0LCByZWxhdGl2
ZVVybExlbmd0aCkpIHsKLSAgICAgICAgcmV0dXJuIGJhc2VQYXRoQmVnaW47IC8vIFJlbGF0aXZl
IFVSTCBwYXRoIGlzICJDOi9mb28iCi0gICAgfQotCi0gICAgLy8gVGhlIHBhdGggc2hvdWxkIGJl
Z2luIHdpdGggYSBzbGFzaCAoYXMgYWxsIGNhbm9uaWNhbCBwYXRocyBkbykuIFdlIGNoZWNrCi0g
ICAgLy8gaWYgaXQgaXMgZm9sbG93ZWQgYnkgYSBkcml2ZSBsZXR0ZXIgYW5kIGNvcHkgaXQuCi0g
ICAgaWYgKGRvZXNCZWdpblNsYXNoV2luZG93c0RyaXZlU3BlYyhiYXNlVVJMLCBiYXNlUGF0aEJl
Z2luLCBiYXNlUGF0aEVuZCkpIHsKLSAgICAgICAgLy8gQ29weSB0aGUgdHdvLWNoYXJhY3RlciBk
cml2ZSBzcGVjIHRvIHRoZSBvdXRwdXQuIEl0IHdpbGwgbm93IGxvb2sgbGlrZQotICAgICAgICAv
LyAiZmlsZTovLy9DOiIgc28gdGhlIHJlc3Qgb2YgaXQgY2FuIGJlIHRyZWF0ZWQgbGlrZSBhIHN0
YW5kYXJkIHBhdGguCi0gICAgICAgIG91dHB1dC5hcHBlbmQoJy8nKTsKLSAgICAgICAgb3V0cHV0
LmFwcGVuZChiYXNlVVJMW2Jhc2VQYXRoQmVnaW4gKyAxXSk7Ci0gICAgICAgIG91dHB1dC5hcHBl
bmQoYmFzZVVSTFtiYXNlUGF0aEJlZ2luICsgMl0pOwotICAgICAgICByZXR1cm4gYmFzZVBhdGhC
ZWdpbiArIDM7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJhc2VQYXRoQmVnaW47Ci19Ci0KLSNlbmRp
ZiAvLyBPUyhXSU5ET1dTKQotCi0vLyBBIHN1YnJvdXRpbmUgb2YgZG9SZXNvbHZlUmVsYXRpdmVV
UkwsIHRoaXMgcmVzb2x2ZXMgdGhlIFVSTCBrbm93bmluZyB0aGF0Ci0vLyB0aGUgaW5wdXQgaXMg
YSByZWxhdGl2ZSBwYXRoIG9yIGxlc3MgKHF5dWVyeSBvciByZWYpLgotdGVtcGxhdGU8dHlwZW5h
bWUgQ0hBUj4KLWJvb2wgZG9SZXNvbHZlUmVsYXRpdmVQYXRoKGNvbnN0IGNoYXIqIGJhc2VVUkws
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNl
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgLyogYmFzZUlzRmlsZSAqLywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVIqIHJlbGF0aXZlVVJMLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiByZWxhdGl2ZUNvbXBvbmVu
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciog
cXVlcnlDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxCdWZmZXI8Y2hh
cj4mIG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRw
dXRQYXJzZWQpCi17Ci0gICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKLQotICAgIC8vIFdlIGtub3cg
dGhlIGF1dGhvcml0eSBzZWN0aW9uIGRpZG4ndCBjaGFuZ2UsIGNvcHkgaXQgdG8gdGhlIG91dHB1
dC4gV2UKLSAgICAvLyBhbHNvIGtub3cgd2UgaGF2ZSBhIHBhdGggc28gY2FuIGNvcHkgdXAgdG8g
dGhlcmUuCi0gICAgVVJMQ29tcG9uZW50IHBhdGgsIHF1ZXJ5LCByZWY7Ci0gICAgVVJMUGFyc2Vy
OjpwYXJzZVBhdGhJbnRlcm5hbChyZWxhdGl2ZVVSTCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlbGF0aXZlQ29tcG9uZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJnBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcXVlcnksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVmKTsKLSAgICAvLyBDYW5vbmljYWwg
VVJMcyBhbHdheXMgaGF2ZSBhIHBhdGgsIHNvIHdlIGNhbiB1c2UgdGhhdCBvZmZzZXQuCi0gICAg
b3V0cHV0LmFwcGVuZChiYXNlVVJMLCBiYXNlUGFyc2VkLnBhdGguYmVnaW4oKSk7Ci0KLSAgICBp
ZiAocGF0aC5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgLy8gVGhlIHBhdGggaXMgcmVwbGFjZWQg
b3IgbW9kaWZpZWQuCi0gICAgICAgIGludCB0cnVlUGF0aEJlZ2luID0gb3V0cHV0Lmxlbmd0aCgp
OwotCi0gICAgICAgIC8vIEZvciBmaWxlOiBVUkxzIG9uIFdpbmRvd3MsIHdlIGRvbid0IHdhbnQg
dG8gdHJlYXQgdGhlIGRyaXZlIGxldHRlciBhbmQKLSAgICAgICAgLy8gY29sb24gYXMgcGFydCBv
ZiB0aGUgcGF0aCBmb3IgcmVsYXRpdmUgZmlsZSByZXNvbHV0aW9uIHdoZW4gdGhlCi0gICAgICAg
IC8vIGluY29taW5nIFVSTCBkb2VzIG5vdCBwcm92aWRlIGEgZHJpdmUgc3BlYy4gV2Ugc2F2ZSB0
aGUgdHJ1ZSBwYXRoCi0gICAgICAgIC8vIGJlZ2lubmluZyBzbyB3ZSBjYW4gZml4IGl0IHVwIGFm
dGVyIHdlIGFyZSBkb25lLgotICAgICAgICBpbnQgYmFzZVBhdGhCZWdpbiA9IGJhc2VQYXJzZWQu
cGF0aC5iZWdpbigpOwotI2lmIE9TKFdJTkRPV1MpCi0gICAgICAgIGlmIChiYXNlSXNGaWxlKSB7
Ci0gICAgICAgICAgICBiYXNlUGF0aEJlZ2luID0gQ29weUJhc2VEcml2ZVNwZWNJZk5lY2Vzc2Fy
eShiYXNlVVJMLCBiYXNlUGFyc2VkLnBhdGguYmVnaW4oKSwgYmFzZVBhcnNlZC5wYXRoLmVuZCgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVsYXRpdmVVUkwsIHJlbGF0aXZlQ29tcG9uZW50LmJlZ2luKCksIHJlbGF0aXZlQ29tcG9u
ZW50LmVuZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0cHV0KTsKLSAgICAgICAgICAgIC8vIE5vdyB0aGUgb3V0cHV0IGxvb2tz
IGxpa2UgZWl0aGVyICJmaWxlOi8vIiBvciAiZmlsZTovLy9DOiIKLSAgICAgICAgICAgIC8vIGFu
ZCB3ZSBjYW4gc3RhcnQgYXBwZW5kaW5nIHRoZSByZXN0IG9mIHRoZSBwYXRoLiB8YmFzZVBhdGhC
ZWdpbnwKLSAgICAgICAgICAgIC8vIHBvaW50cyB0byB0aGUgY2hhcmFjdGVyIGluIHRoZSBiYXNl
IHRoYXQgY29tZXMgbmV4dC4KLSAgICAgICAgfQotI2VuZGlmIC8vIE9TKFdJTkRPV1MpCi0KLSAg
ICAgICAgaWYgKFVSTFBhcnNlcjo6aXNVUkxTbGFzaChyZWxhdGl2ZVVSTFtwYXRoLmJlZ2luKCld
KSkgewotICAgICAgICAgICAgLy8gRWFzeSBjYXNlOiB0aGUgcGF0aCBpcyBhbiBhYnNvbHV0ZSBw
YXRoIG9uIHRoZSBzZXJ2ZXIsIHNvIHdlIGNhbgotICAgICAgICAgICAgLy8ganVzdCByZXBsYWNl
IGV2ZXJ5dGhpbmcgZnJvbSB0aGUgcGF0aCBvbiB3aXRoIHRoZSBuZXcgdmVyc2lvbnMuCi0gICAg
ICAgICAgICAvLyBTaW5jZSB0aGUgaW5wdXQgc2hvdWxkIGJlIGNhbm9uaWNhbCBoaWVyYXJjaGlj
YWwgVVJMLCB3ZSBzaG91bGQKLSAgICAgICAgICAgIC8vIGFsd2F5cyBoYXZlIGEgcGF0aC4KLSAg
ICAgICAgICAgIHN1Y2Nlc3MgJj0gQ2Fub25pY2FsaXplUGF0aChyZWxhdGl2ZVVSTCwgcGF0aCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsICZvdXRwdXRQ
YXJzZWQtPnBhdGgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gUmVsYXRpdmUg
cGF0aCwgcmVwbGFjZSB0aGUgcXVlcnksIGFuZCByZWZlcmVuY2UuIFdlIHRha2UgdGhlCi0gICAg
ICAgICAgICAvLyBvcmlnaW5hbCBwYXRoIHdpdGggdGhlIGZpbGUgcGFydCBzdHJpcHBlZCwgYW5k
IGFwcGVuZCB0aGUgbmV3IHBhdGguCi0gICAgICAgICAgICAvLyBUaGUgY2Fub25pY2FsaXplciB3
aWxsIHRha2UgY2FyZSBvZiByZXNvbHZpbmcgIi4uIiBhbmQgIi4iCi0gICAgICAgICAgICBpbnQg
cGF0aEJlZ2luID0gb3V0cHV0Lmxlbmd0aCgpOwotICAgICAgICAgICAgQ29weVRvTGFzdFNsYXNo
KGJhc2VVUkwsIGJhc2VQYXRoQmVnaW4sIGJhc2VQYXJzZWQucGF0aC5lbmQoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRwdXQpOwotICAgICAgICAgICAgc3VjY2VzcyAmPSBDYW5v
bmljYWxpemVQYXJ0aWFsUGF0aChyZWxhdGl2ZVVSTCwgcGF0aCwgcGF0aEJlZ2luLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQpOwotICAgICAg
ICAgICAgb3V0cHV0UGFyc2VkLT5wYXRoID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UocGF0aEJl
Z2luLCBvdXRwdXQubGVuZ3RoKCkpOwotCi0gICAgICAgICAgICAvLyBDb3B5IHRoZSByZXN0IG9m
IHRoZSBzdHVmZiBhZnRlciB0aGUgcGF0aCBmcm9tIHRoZSByZWxhdGl2ZSBwYXRoLgotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gRmluaXNoIHdpdGggdGhlIHF1ZXJ5IGFuZCByZWZlcmVuY2UgcGFy
dCAodGhlc2UgY2FuJ3QgZmFpbCkuCi0gICAgICAgIENhbm9uaWNhbGl6ZVF1ZXJ5KHJlbGF0aXZl
VVJMLCBxdWVyeSwgcXVlcnlDb252ZXJ0ZXIsIG91dHB1dCwgJm91dHB1dFBhcnNlZC0+cXVlcnkp
OwotICAgICAgICBjYW5vbmljYWxpemVGcmFnbWVudChyZWxhdGl2ZVVSTCwgcmVmLCBvdXRwdXQs
IG91dHB1dFBhcnNlZC0+ZnJhZ21lbnQpOwotCi0gICAgICAgIC8vIEZpeCB0aGUgcGF0aCBiZWdp
bm5pbmcgdG8gYWRkIGJhY2sgdGhlICJDOiIgd2UgbWF5IGhhdmUgd3JpdHRlbiBhYm92ZS4KLSAg
ICAgICAgb3V0cHV0UGFyc2VkLT5wYXRoID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UodHJ1ZVBh
dGhCZWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0cHV0UGFyc2VkLT5wYXRoLmVuZCgpKTsKLSAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7
Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHRoZSBwYXRoIGlzIHVuY2hhbmdlZDog
Y29weSB0byBvdXRwdXQuCi0gICAgQ29weU9uZUNvbXBvbmVudChiYXNlVVJMLCBiYXNlUGFyc2Vk
LnBhdGgsIG91dHB1dCwgJm91dHB1dFBhcnNlZC0+cGF0aCk7Ci0KLSAgICBpZiAocXVlcnkuaXNW
YWxpZCgpKSB7Ci0gICAgICAgIC8vIEp1c3QgdGhlIHF1ZXJ5IHNwZWNpZmllZCwgcmVwbGFjZSB0
aGUgcXVlcnkgYW5kIHJlZmVyZW5jZSAoaWdub3JlCi0gICAgICAgIC8vIGZhaWx1cmVzIGZvciBy
ZWZzKQotICAgICAgICBDYW5vbmljYWxpemVRdWVyeShyZWxhdGl2ZVVSTCwgcXVlcnksIHF1ZXJ5
Q29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsICZvdXRwdXRQYXJz
ZWQtPnF1ZXJ5KTsKLSAgICAgICAgY2Fub25pY2FsaXplRnJhZ21lbnQocmVsYXRpdmVVUkwsIHJl
Ziwgb3V0cHV0LCBvdXRwdXRQYXJzZWQtPmZyYWdtZW50KTsKLSAgICAgICAgcmV0dXJuIHN1Y2Nl
c3M7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHRoZSBxdWVyeSBpcyB1bmNoYW5n
ZWQ6IGNvcHkgdG8gb3V0cHV0LiBOb3RlIHRoYXQgdGhlCi0gICAgLy8gcmFuZ2Ugb2YgdGhlIHF1
ZXJ5IHBhcmFtZXRlciBkb2Vzbid0IGluY2x1ZGUgdGhlIHF1ZXN0aW9uIG1hcmssIHNvIHdlCi0g
ICAgLy8gaGF2ZSB0byBhZGQgaXQgbWFudWFsbHkgaWYgdGhlcmUgaXMgYSBjb21wb25lbnQuCi0g
ICAgaWYgKGJhc2VQYXJzZWQucXVlcnkuaXNWYWxpZCgpKQotICAgICAgICBvdXRwdXQuYXBwZW5k
KCc/Jyk7Ci0gICAgQ29weU9uZUNvbXBvbmVudChiYXNlVVJMLCBiYXNlUGFyc2VkLnF1ZXJ5LCBv
dXRwdXQsICZvdXRwdXRQYXJzZWQtPnF1ZXJ5KTsKLQotICAgIGlmIChyZWYuaXNWYWxpZCgpKSB7
Ci0gICAgICAgIC8vIEp1c3QgdGhlIHJlZmVyZW5jZSBzcGVjaWZpZWQ6IHJlcGxhY2UgaXQgKGln
bm9yaW5nIGZhaWx1cmVzKS4KLSAgICAgICAgY2Fub25pY2FsaXplRnJhZ21lbnQocmVsYXRpdmVV
UkwsIHJlZiwgb3V0cHV0LCBvdXRwdXRQYXJzZWQtPmZyYWdtZW50KTsKLSAgICAgICAgcmV0dXJu
IHN1Y2Nlc3M7Ci0gICAgfQotCi0gICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBoYXZlIHNvbWV0aGlu
ZyB0byBkbyBpbiB0aGlzIGZ1bmN0aW9uLCB0aGUgY2FsbGVyIGNoZWNrcwotICAgIC8vIHRoYXQg
c29tZSBjb21wb25lbnQgaXMgYmVpbmcgcmVwbGFjZWQuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLS8vIFJlc29sdmVzIGEgcmVsYXRpdmUgVVJM
IHRoYXQgY29udGFpbnMgYSBob3N0LiBUeXBpY2FsbHksIHRoZXNlIHdpbGwKLS8vIGJlIG9mIHRo
ZSBmb3JtICIvL3d3dy5hcHBsZS5jb20vZm9vL2Jhcj9iYXojZnJhZ21lbnQiIGFuZCB0aGUgb25s
eSB0aGluZyB3aGljaAotLy8gc2hvdWxkIGJlIGtlcHQgZnJvbSB0aGUgb3JpZ2luYWwgVVJMIGlz
IHRoZSBzY2hlbWUuCi10ZW1wbGF0ZTx0eXBlbmFtZSBDSEFSPgotYm9vbCBkb1Jlc29sdmVSZWxh
dGl2ZUhvc3QoY29uc3QgY2hhciogYmFzZVVSTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgQ0hBUiogcmVsYXRpdmVVUkwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBVUkxDb21wb25lbnQmIHJlbGF0aXZlQ29tcG9uZW50LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCkKLXsKLSAgICAvLyBQ
YXJzZSB0aGUgcmVsYXRpdmUgVVJMLCBqdXN0IGxpa2Ugd2Ugd291bGQgZm9yIGFueXRoaW5nIGZv
bGxvd2luZyBhCi0gICAgLy8gc2NoZW1lLgotICAgIFVSTFNlZ21lbnRzIHJlbGF0aXZlUGFyc2Vk
OyAvLyBFdmVyeXRoaW5nIGJ1dCB0aGUgc2NoZW1lIGlzIHZhbGlkLgotICAgIFVSTFBhcnNlcjo6
cGFyc2VBZnRlclNjaGVtZSgmcmVsYXRpdmVVUkxbcmVsYXRpdmVDb21wb25lbnQuYmVnaW4oKV0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlQ29tcG9uZW50Lmxlbmd0
aCgpLCByZWxhdGl2ZUNvbXBvbmVudC5iZWdpbigpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZWxhdGl2ZVBhcnNlZCk7Ci0KLSAgICAvLyBOb3cgd2UgY2FuIGp1c3QgdXNlIHRo
ZSByZXBsYWNlbWVudCBmdW5jdGlvbiB0byByZXBsYWNlIGFsbCB0aGUgbmVjZXNzYXJ5Ci0gICAg
Ly8gcGFydHMgb2YgdGhlIG9sZCBVUkwgd2l0aCB0aGUgbmV3IG9uZS4KLSAgICBSZXBsYWNlbWVu
dHM8Q0hBUj4gcmVwbGFjZW1lbnRzOwotICAgIHJlcGxhY2VtZW50cy5TZXRVc2VybmFtZShyZWxh
dGl2ZVVSTCwgcmVsYXRpdmVQYXJzZWQudXNlcm5hbWUpOwotICAgIHJlcGxhY2VtZW50cy5TZXRQ
YXNzd29yZChyZWxhdGl2ZVVSTCwgcmVsYXRpdmVQYXJzZWQucGFzc3dvcmQpOwotICAgIHJlcGxh
Y2VtZW50cy5TZXRIb3N0KHJlbGF0aXZlVVJMLCByZWxhdGl2ZVBhcnNlZC5ob3N0KTsKLSAgICBy
ZXBsYWNlbWVudHMuU2V0UG9ydChyZWxhdGl2ZVVSTCwgcmVsYXRpdmVQYXJzZWQucG9ydCk7Ci0g
ICAgcmVwbGFjZW1lbnRzLlNldFBhdGgocmVsYXRpdmVVUkwsIHJlbGF0aXZlUGFyc2VkLnBhdGgp
OwotICAgIHJlcGxhY2VtZW50cy5TZXRRdWVyeShyZWxhdGl2ZVVSTCwgcmVsYXRpdmVQYXJzZWQu
cXVlcnkpOwotICAgIHJlcGxhY2VtZW50cy5TZXRSZWYocmVsYXRpdmVVUkwsIHJlbGF0aXZlUGFy
c2VkLmZyYWdtZW50KTsKLQotICAgIHJldHVybiBSZXBsYWNlU3RhbmRhcmRVUkwoYmFzZVVSTCwg
YmFzZVBhcnNlZCwgcmVwbGFjZW1lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cXVlcnlDb252ZXJ0ZXIsIG91dHB1dCwgb3V0cHV0UGFyc2VkKTsKLX0KLQotLy8gUmVzb2x2ZXMg
YSByZWxhdGl2ZSBVUkwgdGhhdCBoYXBwZW5zIHRvIGJlIGFuIGFic29sdXRlIGZpbGUgcGF0aC4g
RXhhbXBsZXMKLS8vIGluY2x1ZGU6ICIvL2hvc3RuYW1lL3BhdGgiLCAiL2M6L2ZvbyIsIGFuZCAi
Ly9ob3N0bmFtZS9jOi9mb28iLgotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWJv
b2wgZG9SZXNvbHZlQWJzb2x1dGVGaWxlKGNvbnN0IENoYXJhY3RlclR5cGUqIHJlbGF0aXZlVVJM
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ29tcG9uZW50JiByZWxhdGl2
ZUNvbXBvbmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFF1ZXJ5Q2hhcnNldENv
bnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxC
dWZmZXI8Y2hhcj4mIG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21l
bnRzJiBvdXRwdXRQYXJzZWQpCi17Ci0gICAgLy8gUGFyc2UgdGhlIGZpbGUgVVJMLiBUaGUgZmls
ZSBVUmwgcGFyc2luZyBmdW5jdGlvbiB1c2VzIHRoZSBzYW1lIGxvZ2ljCi0gICAgLy8gYXMgd2Ug
ZG8gZm9yIGRldGVybWluaW5nIGlmIHRoZSBmaWxlIGlzIGFic29sdXRlLCBpbiB3aGljaCBjYXNl
IGl0IHdpbGwKLSAgICAvLyBub3QgYm90aGVyIHRvIGxvb2sgZm9yIGEgc2NoZW1lLgotICAgIFVS
TFNlZ21lbnRzIHJlbGF0aXZlUGFyc2VkOwotICAgIFVSTFBhcnNlcjo6UGFyc2VGaWxlVVJMKCZy
ZWxhdGl2ZVVSTFtyZWxhdGl2ZUNvbXBvbmVudC5iZWdpbigpXSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWxhdGl2ZUNvbXBvbmVudC5sZW5ndGgoKSwgJnJlbGF0aXZlUGFyc2VkKTsK
LQotICAgIHJldHVybiBDYW5vbmljYWxpemVGaWxlVVJMKCZyZWxhdGl2ZVVSTFtyZWxhdGl2ZUNv
bXBvbmVudC5iZWdpbigpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2
ZUNvbXBvbmVudC5sZW5ndGgoKSwgcmVsYXRpdmVQYXJzZWQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcXVlcnlDb252ZXJ0ZXIsIG91dHB1dCwgJm91dHB1dFBhcnNlZCk7Ci19Ci0K
LS8vIFRPRE8oYnJldHR3KSB0cmVhdCB0d28gc2xhc2hlcyBhcyByb290IGxpa2UgTW96aWxsYSBm
b3IgRlRQPwotdGVtcGxhdGU8dHlwZW5hbWUgQ0hBUj4KLWJvb2wgZG9SZXNvbHZlUmVsYXRpdmVV
UkwoY29uc3QgY2hhciogYmFzZVVSTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
YmFzZUlzRmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUiogcmVsYXRp
dmVVUkwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgcmVs
YXRpdmVDb21wb25lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFF1ZXJ5Q2hhcnNl
dENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFVS
TEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdt
ZW50cyogb3V0cHV0UGFyc2VkKQotewotICAgIC8vIFN0YXJ0aW5nIHBvaW50IGZvciBvdXIgb3V0
cHV0IHBhcnNlZC4gV2UnbGwgZml4IHdoYXQgd2UgY2hhbmdlLgotICAgICpvdXRwdXRQYXJzZWQg
PSBiYXNlUGFyc2VkOwotCi0gICAgLy8gU2FuaXR5IGNoZWNrOiB0aGUgaW5wdXQgc2hvdWxkIGhh
dmUgYSBob3N0IG9yIHdlJ2xsIGJyZWFrIGJhZGx5IGJlbG93LgotICAgIC8vIFdlIGNhbiBvbmx5
IHJlc29sdmUgcmVsYXRpdmUgVVJMcyB3aXRoIGJhc2UgVVJMcyB0aGF0IGhhdmUgaG9zdHMgYW5k
Ci0gICAgLy8gcGF0aHMgKGV2ZW4gdGhlIGRlZmF1bHQgcGF0aCBvZiAiLyIgaXMgT0spLgotICAg
IC8vCi0gICAgLy8gV2UgYWxsb3cgaG9zdHMgd2l0aCBubyBsZW5ndGggc28gd2UgY2FuIGhhbmRs
ZSBmaWxlIFVSTHMsIGZvciBleGFtcGxlLgotICAgIGlmIChiYXNlUGFyc2VkLnBhdGgubGVuZ3Ro
KCkgPD0gMCkgewotICAgICAgICAvLyBPbiBlcnJvciwgcmV0dXJuIHRoZSBpbnB1dCAocmVzb2x2
aW5nIGEgcmVsYXRpdmUgVVJMIG9uIGEgbm9uLXJlbGF0aXZlCi0gICAgICAgIC8vIGJhc2UgPSB0
aGUgYmFzZSkuCi0gICAgICAgIGludCBiYXNlTGVuZ3RoID0gYmFzZVBhcnNlZC5sZW5ndGgoKTsK
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBiYXNlTGVuZ3RoOyBpKyspCi0gICAgICAgICAg
ICBvdXRwdXQuYXBwZW5kKGJhc2VVUkxbaV0pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgaWYgKHJlbGF0aXZlQ29tcG9uZW50Lmxlbmd0aCgpIDw9IDApIHsKLSAgICAgICAg
Ly8gRW1wdHkgcmVsYXRpdmUgVVJMLCBsZWF2ZSB1bmNoYW5nZWQsIG9ubHkgcmVtb3ZpbmcgdGhl
IHJlZiBjb21wb25lbnQuCi0gICAgICAgIGludCBiYXNlTGVuZ3RoID0gYmFzZVBhcnNlZC5sZW5n
dGgoKTsKLSAgICAgICAgYmFzZUxlbmd0aCAtPSBiYXNlUGFyc2VkLmZyYWdtZW50Lmxlbmd0aCgp
ICsgMTsKLSAgICAgICAgb3V0cHV0UGFyc2VkLT5mcmFnbWVudC5yZXNldCgpOwotICAgICAgICBv
dXRwdXQuYXBwZW5kKGJhc2VVUkwsIGJhc2VMZW5ndGgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBpbnQgbnVtU2xhc2hlcyA9IFVSTFBhcnNlcjo6Y291bnRDb25zZWN1dGl2
ZVNsYXNoZXMocmVsYXRpdmVVUkwsIHJlbGF0aXZlQ29tcG9uZW50LmJlZ2luKCksIHJlbGF0aXZl
Q29tcG9uZW50LmVuZCgpKTsKLQotI2lmIE9TKFdJTkRPV1MpCi0gICAgLy8gT24gV2luZG93cywg
dHdvIHNsYXNoZXMgZm9yIGEgZmlsZSBwYXRoIChyZWdhcmRsZXNzIG9mIHdoaWNoIGRpcmVjdGlv
bgotICAgIC8vIHRoZXkgYXJlKSBtZWFucyB0aGF0IGl0J3MgVU5DLiBUd28gYmFja3NsYXNoZXMg
b24gYW55IGJhc2Ugc2NoZW1lIG1lYW4KLSAgICAvLyB0aGF0IGl0J3MgYW4gYWJzb2x1dGUgVU5D
IHBhdGggKHdlIHVzZSB0aGUgYmFzZUlzRmlsZSBmbGFnIHRvIGNvbnRyb2wKLSAgICAvLyBob3cg
c3RyaWN0IHRoZSBVTkMgZmluZGVyIGlzKS4KLSAgICAvLwotICAgIC8vIFdlIGFsc28gYWxsb3cg
V2luZG93cyBhYnNvbHV0ZSBkcml2ZSBzcGVjcyBvbiBhbnkgc2NoZW1lIChmb3IgZXhhbXBsZQot
ICAgIC8vICJjOlxmb28iKSBsaWtlIElFIGRvZXMuIFRoZXJlIG11c3QgYmUgbm8gcHJlY2VlZGlu
ZyBzbGFzaGVzIGluIHRoaXMKLSAgICAvLyBjYXNlICh3ZSByZWplY3QgYW55dGhpbmcgbGlrZSAi
L2M6L2ZvbyIpIGJlY2F1c2UgdGhhdCBzaG91bGQgYmUgdHJlYXRlZAotICAgIC8vIGFzIGEgcGF0
aC4gRm9yIGZpbGUgVVJMcywgd2UgYWxsb3cgYW55IG51bWJlciBvZiBzbGFzaGVzIHNpbmNlIHRo
YXQgd291bGQKLSAgICAvLyBiZSBzZXR0aW5nIHRoZSBwYXRoLgotICAgIC8vCi0gICAgLy8gVGhp
cyBhc3N1bWVzIHRoZSBhYnNvbHV0ZSBwYXRoIHJlc29sdmVyIGhhbmRsZXMgYWJzb2x1dGUgVVJM
cyBsaWtlIHRoaXMKLSAgICAvLyBwcm9wZXJseS4gVVJMVXRpbGl0aWVzOjpEb0Nhbm9uaWNhbGl6
ZSBkb2VzIHRoaXMuCi0gICAgaW50IGFmdGVyU2xhc2hlcyA9IHJlbGF0aXZlQ29tcG9uZW50LmJl
Z2luICsgbnVtU2xhc2hlczsKLSAgICBpZiAoVVJMUGFyc2VyOjpkb2VzQmVnaW5VTkNQYXRoKHJl
bGF0aXZlVVJMLCByZWxhdGl2ZUNvbXBvbmVudC5iZWdpbigpLCByZWxhdGl2ZUNvbXBvbmVudC5l
bmQoKSwgIWJhc2VJc0ZpbGUpCi0gICAgICAgIHx8ICgoIW51bVNsYXNoZXMgfHwgYmFzZUlzRmls
ZSkgJiYgVVJMUGFyc2VyOjpkb2VzQmVnaW5XaW5kb3dzRHJpdmVTcGVjKHJlbGF0aXZlVVJMLCBh
ZnRlclNsYXNoZXMsIHJlbGF0aXZlQ29tcG9uZW50LmVuZCgpKSkpIHsKLSAgICAgICAgICAgICBy
ZXR1cm4gZG9SZXNvbHZlQWJzb2x1dGVGaWxlKHJlbGF0aXZlVVJMLCByZWxhdGl2ZUNvbXBvbmVu
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5Q29udmVy
dGVyLCBvdXRwdXQsICpvdXRwdXRQYXJzZWQpOwotICAgICAgICAgfQotI2Vsc2UKLSAgICAvLyBP
dGhlciBwbGF0Zm9ybXMgbmVlZCBleHBsaWNpdCBoYW5kbGluZyBmb3IgZmlsZTogVVJMcyB3aXRo
IG11bHRpcGxlCi0gICAgLy8gc2xhc2hlcyBiZWNhdXNlIHRoZSBnZW5lcmljIHNjaGVtZSBwYXJz
aW5nIGFsd2F5cyBleHRyYWN0cyBhIGhvc3QsIGJ1dCBhCi0gICAgLy8gZmlsZTogVVJMIG9ubHkg
aGFzIGEgaG9zdCBpZiBpdCBoYXMgZXhhY3RseSAyIHNsYXNoZXMuIFRoaXMgYWxzbwotICAgIC8v
IGhhbmRsZXMgdGhlIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGUgVVJMIGlzIG9ubHkgc2xhc2hlcywg
c2luY2UgdGhhdAotICAgIC8vIGRvZXNuJ3QgaGF2ZSBhIGhvc3QgcGFydCBlaXRoZXIuCi0gICAg
aWYgKGJhc2VJc0ZpbGUgJiYgKG51bVNsYXNoZXMgPiAyIHx8IG51bVNsYXNoZXMgPT0gcmVsYXRp
dmVDb21wb25lbnQubGVuZ3RoKCkpKSB7Ci0gICAgICAgIHJldHVybiBkb1Jlc29sdmVBYnNvbHV0
ZUZpbGUocmVsYXRpdmVVUkwsIHJlbGF0aXZlQ29tcG9uZW50LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHF1ZXJ5Q29udmVydGVyLCBvdXRwdXQsICpvdXRwdXRQYXJzZWQp
OwotICAgIH0KLSNlbmRpZgotCi0gICAgLy8gQW55IG90aGVyIGRvdWJsZS1zbGFzaGVzIG1lYW4g
dGhhdCB0aGlzIGlzIHJlbGF0aXZlIHRvIHRoZSBzY2hlbWUuCi0gICAgaWYgKG51bVNsYXNoZXMg
Pj0gMikgewotICAgICAgICByZXR1cm4gZG9SZXNvbHZlUmVsYXRpdmVIb3N0KGJhc2VVUkwsIGJh
c2VQYXJzZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVV
UkwsIHJlbGF0aXZlQ29tcG9uZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHF1ZXJ5Q29udmVydGVyLCBvdXRwdXQsIG91dHB1dFBhcnNlZCk7Ci0gICAgfQotCi0gICAg
Ly8gV2hlbiB3ZSBnZXQgaGVyZSwgd2Uga25vdyB0aGF0IHRoZSByZWxhdGl2ZSBVUkwgaXMgb24g
dGhlIHNhbWUgaG9zdC4KLSAgICByZXR1cm4gZG9SZXNvbHZlUmVsYXRpdmVQYXRoKGJhc2VVUkws
IGJhc2VQYXJzZWQsIGJhc2VJc0ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZWxhdGl2ZVVSTCwgcmVsYXRpdmVDb21wb25lbnQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBxdWVyeUNvbnZlcnRlciwgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOwotfQotCi19
IC8vIG5hbWVzcGFjZQotCi1ib29sIGlzUmVsYXRpdmVVUkwoY29uc3QgY2hhciogYmFzZSwgY29u
c3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCi0gICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciogZnJhZ21lbnQsIGludCBmcmFnbWVudExlbmd0aCwKLSAgICAgICAgICAgICAgICAgICBib29s
IGlzQmFzZUhpZXJhcmNoaWNhbCwKLSAgICAgICAgICAgICAgICAgICBib29sJiBpc1JlbGF0aXZl
LCBVUkxDb21wb25lbnQmIHJlbGF0aXZlQ29tcG9uZW50KQotewotICAgIHJldHVybiBkb0lzUmVs
YXRpdmVVUkw8Y2hhcj4oYmFzZSwgYmFzZVBhcnNlZCwgZnJhZ21lbnQsIGZyYWdtZW50TGVuZ3Ro
LCBpc0Jhc2VIaWVyYXJjaGljYWwsIGlzUmVsYXRpdmUsIHJlbGF0aXZlQ29tcG9uZW50KTsKLX0K
LQotYm9vbCBpc1JlbGF0aXZlVVJMKGNvbnN0IGNoYXIqIGJhc2UsIGNvbnN0IFVSTFNlZ21lbnRz
JiBiYXNlUGFyc2VkLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBmcmFnbWVudCwg
aW50IGZyYWdtZW50TGVuZ3RoLAotICAgICAgICAgICAgICAgICAgIGJvb2wgaXNCYXNlSGllcmFy
Y2hpY2FsLAotICAgICAgICAgICAgICAgICAgIGJvb2wmIGlzUmVsYXRpdmUsIFVSTENvbXBvbmVu
dCYgcmVsYXRpdmVDb21wb25lbnQpCi17Ci0gICAgcmV0dXJuIGRvSXNSZWxhdGl2ZVVSTDxVQ2hh
cj4oYmFzZSwgYmFzZVBhcnNlZCwgZnJhZ21lbnQsIGZyYWdtZW50TGVuZ3RoLCBpc0Jhc2VIaWVy
YXJjaGljYWwsIGlzUmVsYXRpdmUsIHJlbGF0aXZlQ29tcG9uZW50KTsKLX0KLQotYm9vbCByZXNv
bHZlUmVsYXRpdmVVUkwoY29uc3QgY2hhciogYmFzZVVSTCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAotICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBiYXNlSXNGaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
cmVsYXRpdmVVUkwsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQm
IHJlbGF0aXZlQ29tcG9uZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgVVJMUXVlcnlDaGFy
c2V0Q29udmVydGVyKiBxdWVyeUNvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIFVS
TEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVu
dHMqIG91dHB1dFBhcnNlZCkKLXsKLSAgICByZXR1cm4gZG9SZXNvbHZlUmVsYXRpdmVVUkw8Y2hh
cj4oYmFzZVVSTCwgYmFzZVBhcnNlZCwgYmFzZUlzRmlsZSwgcmVsYXRpdmVVUkwsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlQ29tcG9uZW50LCBxdWVyeUNv
bnZlcnRlciwgb3V0cHV0LCBvdXRwdXRQYXJzZWQpOwotfQotCi1ib29sIHJlc29sdmVSZWxhdGl2
ZVVSTChjb25zdCBjaGFyKiBiYXNlVVJMLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGJh
c2VJc0ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogcmVsYXRpdmVV
UkwsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIHJlbGF0aXZl
Q29tcG9uZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgVVJMUXVlcnlDaGFyc2V0Q29udmVy
dGVyKiBxdWVyeUNvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxj
aGFyPiYgb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1
dFBhcnNlZCkKLXsKLSAgICByZXR1cm4gZG9SZXNvbHZlUmVsYXRpdmVVUkw8VUNoYXI+KGJhc2VV
UkwsIGJhc2VQYXJzZWQsIGJhc2VJc0ZpbGUsIHJlbGF0aXZlVVJMLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVDb21wb25lbnQsIHF1ZXJ5Q29udmVydGVy
LCBvdXRwdXQsIG91dHB1dFBhcnNlZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFVSTENhbm9uaWNh
bGl6ZXIKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBVU0UoV1RGVVJMKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDYW5vblN0ZFVSTC5jcHAgYi9Tb3Vy
Y2UvV1RGL3d0Zi91cmwvc3JjL1VSTENhbm9uU3RkVVJMLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNWUyZGQxY2VhZjE0OTJhNWIyNmQzYjg4NjMwNTUzODMxODQzMzkzZi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi91cmwvc3JjL1VSTENhbm9uU3RkVVJMLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIxMCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IDIwMDcgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBGdW5j
dGlvbnMgdG8gY2Fub25pY2FsaXplICJzdGFuZGFyZCIgVVJMcywgd2hpY2ggYXJlIG9uZXMgdGhh
dCBoYXZlIGFuCi0vLyBhdXRob3JpdHkgc2VjdGlvbiBpbmNsdWRpbmcgYSBob3N0IG5hbWUuCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJVUkxDYW5vbi5oIgotCi0jaW5jbHVkZSAi
UmF3VVJMQnVmZmVyLmgiCi0jaW5jbHVkZSAiVVJMQ2Fub25JbnRlcm5hbC5oIgotCi0jaWYgVVNF
KFdURlVSTCkKLQotbmFtZXNwYWNlIFdURiB7Ci0KLW5hbWVzcGFjZSBVUkxDYW5vbmljYWxpemVy
IHsKLQotbmFtZXNwYWNlIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgQ0hBUiwgdHlwZW5hbWUgVUNI
QVI+Ci1ib29sIGRvQ2Fub25pY2FsaXplU3RhbmRhcmRVUkwoY29uc3QgVVJMQ29tcG9uZW50U291
cmNlPENIQVI+JiBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VVJMU2VnbWVudHMmIHBhcnNlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxR
dWVyeUNoYXJzZXRDb252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFVSTFNlZ21lbnRzJiBvdXRwdXRQYXJzZWQpCi17Ci0gICAgLy8gU2NoZW1l
OiB0aGlzIHdpbGwgYXBwZW5kIHRoZSBjb2xvbi4KLSAgICBib29sIHN1Y2Nlc3MgPSBjYW5vbmlj
YWxpemVTY2hlbWUoc291cmNlLnNjaGVtZSwgcGFyc2VkLnNjaGVtZSwgb3V0cHV0LCBvdXRwdXRQ
YXJzZWQuc2NoZW1lKTsKLQotICAgIC8vIEF1dGhvcml0eSAodXNlcm5hbWUsIHBhc3N3b3JkLCBo
b3N0LCBwb3J0KQotICAgIGJvb2wgaGF2ZUF1dGhvcml0eTsKLSAgICBpZiAocGFyc2VkLnVzZXJu
YW1lLmlzTm9uRW1wdHkoKSB8fCBwYXJzZWQucGFzc3dvcmQuaXNWYWxpZCgpIHx8IHBhcnNlZC5o
b3N0LmlzTm9uRW1wdHkoKSB8fCBwYXJzZWQucG9ydC5pc1ZhbGlkKCkpIHsKLSAgICAgICAgaGF2
ZUF1dGhvcml0eSA9IHRydWU7Ci0KLSAgICAgICAgLy8gT25seSB3cml0ZSB0aGUgYXV0aG9yaXR5
IHNlcGFyYXRvcnMgd2hlbiB3ZSBoYXZlIGEgc2NoZW1lLgotICAgICAgICBpZiAocGFyc2VkLnNj
aGVtZS5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIvLyIsIDIpOwotCi0g
ICAgICAgIC8vIFVzZXIgaW5mbzogdGhlIGNhbm9uaWNhbGl6ZXIgd2lsbCBoYW5kbGUgdGhlIDog
YW5kIEAuCi0gICAgICAgIHN1Y2Nlc3MgJj0gY2Fub25pY2FsaXplVXNlckluZm8oc291cmNlLnVz
ZXJuYW1lLCBwYXJzZWQudXNlcm5hbWUsIHNvdXJjZS5wYXNzd29yZCwgcGFyc2VkLnBhc3N3b3Jk
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgb3V0cHV0
UGFyc2VkLnVzZXJuYW1lLCBvdXRwdXRQYXJzZWQucGFzc3dvcmQpOwotICAgICAgICBzdWNjZXNz
ICY9IGNhbm9uaWNhbGl6ZUhvc3Qoc291cmNlLmhvc3QsIHBhcnNlZC5ob3N0LCBvdXRwdXQsIG91
dHB1dFBhcnNlZC5ob3N0KTsKLQotICAgICAgICAvLyBIb3N0IG11c3Qgbm90IGJlIGVtcHR5IGZv
ciBzdGFuZGFyZCBVUkxzLgotICAgICAgICBpZiAoIXBhcnNlZC5ob3N0LmlzTm9uRW1wdHkoKSkK
LSAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLQotICAgICAgICAvLyBQb3J0OiB0aGUgcG9y
dCBjYW5vbmljYWxpemVyIHdpbGwgaGFuZGxlIHRoZSBjb2xvbi4KLSAgICAgICAgaW50IGRlZmF1
bHRQb3J0ID0gZGVmYXVsdFBvcnRGb3JTY2hlbWUoJm91dHB1dC5kYXRhKClbb3V0cHV0UGFyc2Vk
LnNjaGVtZS5iZWdpbigpXSwgb3V0cHV0UGFyc2VkLnNjaGVtZS5sZW5ndGgoKSk7Ci0gICAgICAg
IHN1Y2Nlc3MgJj0gY2Fub25pY2FsaXplUG9ydChzb3VyY2UucG9ydCwgcGFyc2VkLnBvcnQsIGRl
ZmF1bHRQb3J0LCBvdXRwdXQsIG91dHB1dFBhcnNlZC5wb3J0KTsKLSAgICB9IGVsc2UgewotICAg
ICAgICAvLyBObyBhdXRob3JpdHksIGNsZWFyIHRoZSBjb21wb25lbnRzLgotICAgICAgICBoYXZl
QXV0aG9yaXR5ID0gZmFsc2U7Ci0gICAgICAgIG91dHB1dFBhcnNlZC5ob3N0LnJlc2V0KCk7Ci0g
ICAgICAgIG91dHB1dFBhcnNlZC51c2VybmFtZS5yZXNldCgpOwotICAgICAgICBvdXRwdXRQYXJz
ZWQucGFzc3dvcmQucmVzZXQoKTsKLSAgICAgICAgb3V0cHV0UGFyc2VkLnBvcnQucmVzZXQoKTsK
LSAgICAgICAgc3VjY2VzcyA9IGZhbHNlOyAvLyBTdGFuZGFyZCBVUkxzIG11c3QgaGF2ZSBhbiBh
dXRob3JpdHkuCi0gICAgfQotCi0gICAgLy8gUGF0aAotICAgIGlmIChwYXJzZWQucGF0aC5pc05v
bkVtcHR5KCkpCi0gICAgICAgIHN1Y2Nlc3MgJj0gQ2Fub25pY2FsaXplUGF0aChzb3VyY2UucGF0
aCwgcGFyc2VkLnBhdGgsIG91dHB1dCwgJm91dHB1dFBhcnNlZC5wYXRoKTsKLSAgICBlbHNlIGlm
IChoYXZlQXV0aG9yaXR5IHx8IHBhcnNlZC5xdWVyeS5pc05vbkVtcHR5KCkgfHwgcGFyc2VkLmZy
YWdtZW50LmlzTm9uRW1wdHkoKSkgewotICAgICAgICAvLyBXaGVuIHdlIGhhdmUgYW4gZW1wdHkg
cGF0aCwgbWFrZSB1cCBhIHBhdGggd2hlbiB3ZSBoYXZlIGFuIGF1dGhvcml0eQotICAgICAgICAv
LyBvciBzb21ldGhpbmcgZm9sbG93aW5nIHRoZSBwYXRoLiBUaGUgb25seSB0aW1lIHdlIGFsbG93
IGFuIGVtcHR5Ci0gICAgICAgIC8vIG91dHB1dCBwYXRoIGlzIHdoZW4gdGhlcmUgaXMgbm90aGlu
ZyBlbHNlLgotICAgICAgICBvdXRwdXRQYXJzZWQucGF0aCA9IFVSTENvbXBvbmVudChvdXRwdXQu
bGVuZ3RoKCksIDEpOwotICAgICAgICBvdXRwdXQuYXBwZW5kKCcvJyk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIG91dHB1dFBhcnNlZC5wYXRoLnJlc2V0KCk7IC8vIE5vIHBhdGggYXQgYWxsCi0KLSAg
ICAvLyBRdWVyeQotICAgIENhbm9uaWNhbGl6ZVF1ZXJ5KHNvdXJjZS5xdWVyeSwgcGFyc2VkLnF1
ZXJ5LCBxdWVyeUNvbnZlcnRlciwgb3V0cHV0LCAmb3V0cHV0UGFyc2VkLnF1ZXJ5KTsKLQotICAg
IC8vIFJlZjogaWdub3JlIGZhaWx1cmUgZm9yIHRoaXMsIHNpbmNlIHRoZSBwYWdlIGNhbiBwcm9i
YWJseSBzdGlsbCBiZSBsb2FkZWQuCi0gICAgY2Fub25pY2FsaXplRnJhZ21lbnQoc291cmNlLnJl
ZiwgcGFyc2VkLmZyYWdtZW50LCBvdXRwdXQsIG91dHB1dFBhcnNlZC5mcmFnbWVudCk7Ci0KLSAg
ICByZXR1cm4gc3VjY2VzczsKLX0KLQotfSAvLyBuYW1lc3BhY2UKLQotCi0vLyBSZXR1cm5zIHRo
ZSBkZWZhdWx0IHBvcnQgZm9yIHRoZSBnaXZlbiBjYW5vbmljYWwgc2NoZW1lLCBvciBQT1JUX1VO
U1BFQ0lGSUVECi0vLyBpZiB0aGUgc2NoZW1lIGlzIHVua25vd24uCi1pbnQgZGVmYXVsdFBvcnRG
b3JTY2hlbWUoY29uc3QgY2hhciogc2NoZW1lLCBpbnQgc2NoZW1lTGVuZ3RoKQotewotICAgIGlu
dCBkZWZhdWx0UG9ydCA9IFVSTFBhcnNlcjo6UE9SVF9VTlNQRUNJRklFRDsKLSAgICBzd2l0Y2gg
KHNjaGVtZUxlbmd0aCkgewotICAgIGNhc2UgNDoKLSAgICAgICAgaWYgKCFzdHJuY21wKHNjaGVt
ZSwgImh0dHAiLCBzY2hlbWVMZW5ndGgpKQotICAgICAgICAgICAgZGVmYXVsdFBvcnQgPSA4MDsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA1OgotICAgICAgICBpZiAoIXN0cm5jbXAoc2NoZW1l
LCAiaHR0cHMiLCBzY2hlbWVMZW5ndGgpKQotICAgICAgICAgICAgZGVmYXVsdFBvcnQgPSA0NDM7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMzoKLSAgICAgICAgaWYgKCFzdHJuY21wKHNjaGVt
ZSwgImZ0cCIsIHNjaGVtZUxlbmd0aCkpCi0gICAgICAgICAgICBkZWZhdWx0UG9ydCA9IDIxOwot
ICAgICAgICBlbHNlIGlmICghc3RybmNtcChzY2hlbWUsICJ3c3MiLCBzY2hlbWVMZW5ndGgpKQot
ICAgICAgICAgICAgZGVmYXVsdFBvcnQgPSA0NDM7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
NjoKLSAgICAgICAgaWYgKCFzdHJuY21wKHNjaGVtZSwgImdvcGhlciIsIHNjaGVtZUxlbmd0aCkp
Ci0gICAgICAgICAgICBkZWZhdWx0UG9ydCA9IDcwOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IDI6Ci0gICAgICAgIGlmICghc3RybmNtcChzY2hlbWUsICJ3cyIsIHNjaGVtZUxlbmd0aCkpCi0g
ICAgICAgICAgICBkZWZhdWx0UG9ydCA9IDgwOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
cmV0dXJuIGRlZmF1bHRQb3J0OwotfQotCi1ib29sIENhbm9uaWNhbGl6ZVN0YW5kYXJkVVJMKGNv
bnN0IGNoYXIqIHNwZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAvKiBzcGVj
TGVuZ3RoICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50
cyYgcGFyc2VkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxRdWVyeUNoYXJzZXRD
b252ZXJ0ZXIqIHF1ZXJ5Q29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBV
UkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJM
U2VnbWVudHMqIG91dHB1dFBhcnNlZCkKLXsKLSAgICByZXR1cm4gZG9DYW5vbmljYWxpemVTdGFu
ZGFyZFVSTDxjaGFyLCB1bnNpZ25lZCBjaGFyPihVUkxDb21wb25lbnRTb3VyY2U8Y2hhcj4oc3Bl
YyksIHBhcnNlZCwgcXVlcnlDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LCAqb3V0cHV0UGFyc2VkKTsKLX0K
LQotYm9vbCBDYW5vbmljYWxpemVTdGFuZGFyZFVSTChjb25zdCBVQ2hhciogc3BlYywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IC8qIHNwZWNMZW5ndGggKi8sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBwYXJzZWQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkxTZWdtZW50cyogb3V0cHV0UGFyc2Vk
KQotewotICAgIHJldHVybiBkb0Nhbm9uaWNhbGl6ZVN0YW5kYXJkVVJMPFVDaGFyLCBVQ2hhcj4o
VVJMQ29tcG9uZW50U291cmNlPFVDaGFyPihzcGVjKSwgcGFyc2VkLCBxdWVyeUNvbnZlcnRlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1
dCwgKm91dHB1dFBhcnNlZCk7Ci19Ci0KLS8vIEl0IG1pZ2h0IGJlIG5pY2UgaW4gdGhlIGZ1dHVy
ZSB0byBvcHRpbWl6ZSB0aGlzIHNvIHVuY2hhbmdlZCBjb21wb25lbnRzIGRvbid0Ci0vLyBuZWVk
IHRvIGJlIHJlY2Fub25pY2FsaXplZC4gVGhpcyBpcyBlc3BlY2lhbGx5IHRydWUgc2luY2UgdGhl
IGNvbW1vbiBjYXNlIGZvcgotLy8gUmVwbGFjZUNvbXBvbmVudHMgaXMgcmVtb3ZpbmcgdGhpbmdz
IHdlIGRvbid0IHdhbnQsIGxpa2UgcmVmZXJlbmNlIGZyYWdtZW50cwotLy8gYW5kIHVzZXJuYW1l
cy4gVGhlc2UgY2FzZXMgY2FuIGJlY29tZSBtb3JlIGVmZmljaWVudCBpZiB3ZSBjYW4gYXNzdW1l
IHRoZQotLy8gcmVzdCBvZiB0aGUgVVJMIGlzIE9LIHdpdGggdGhlc2UgcmVtb3ZlZCAob3Igb25s
eSB0aGUgbW9kaWZpZWQgcGFydHMKLS8vIHJlY2Fub25pY2FsaXplZCkuIFRoaXMgd291bGQgYmUg
bXVjaCBtb3JlIGNvbXBsZXggdG8gaW1wbGVtZW50LCBob3dldmVyLgotLy8KLS8vIFlvdSB3b3Vs
ZCBhbHNvIG5lZWQgdG8gdXBkYXRlIERvUmVwbGFjZUNvbXBvbmVudHMgaW4gVVJMVXRpbGl0aWVz
LmNjIHdoaWNoCi0vLyByZWxpZXMgb24gdGhpcyByZS1jaGVja2luZyBldmVyeXRoaW5nIChzZWUg
dGhlIGNvbW1lbnQgdGhlcmUgZm9yIHdoeSkuCi1ib29sIFJlcGxhY2VTdGFuZGFyZFVSTChjb25z
dCBjaGFyKiBiYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMU2VnbWVudHMm
IGJhc2VQYXJzZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXBsYWNlbWVudHM8
Y2hhcj4mIHJlcGxhY2VtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgIFVSTFF1ZXJ5Q2hh
cnNldENvbnZlcnRlciogcXVlcnlDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBV
UkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21l
bnRzKiBvdXRwdXRQYXJzZWQpCi17Ci0gICAgVVJMQ29tcG9uZW50U291cmNlPGNoYXI+IHNvdXJj
ZShiYXNlKTsKLSAgICBVUkxTZWdtZW50cyBwYXJzZWQoYmFzZVBhcnNlZCk7Ci0gICAgU2V0dXBP
dmVycmlkZUNvbXBvbmVudHMoYmFzZSwgcmVwbGFjZW1lbnRzLCAmc291cmNlLCAmcGFyc2VkKTsK
LSAgICByZXR1cm4gZG9DYW5vbmljYWxpemVTdGFuZGFyZFVSTDxjaGFyLCB1bnNpZ25lZCBjaGFy
Pihzb3VyY2UsIHBhcnNlZCwgcXVlcnlDb252ZXJ0ZXIsIG91dHB1dCwgKm91dHB1dFBhcnNlZCk7
Ci19Ci0KLS8vIEZvciAxNi1iaXQgcmVwbGFjZW1lbnRzLCB3ZSB0dXJuIGFsbCB0aGUgcmVwbGFj
ZW1lbnRzIGludG8gVVRGLTggc28gdGhlCi0vLyByZWd1bGFyIGNvZGVwYXRoIGNhbiBiZSB1c2Vk
LgotYm9vbCBSZXBsYWNlU3RhbmRhcmRVUkwoY29uc3QgY2hhciogYmFzZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAotICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUmVwbGFjZW1lbnRzPFVDaGFyPiYgcmVwbGFjZW1lbnRzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyKiBxdWVyeUNvbnZl
cnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCkKLXsKLSAg
ICBSYXdVUkxCdWZmZXI8Y2hhcj4gdXRmODsKLSAgICBVUkxDb21wb25lbnRTb3VyY2U8Y2hhcj4g
c291cmNlKGJhc2UpOwotICAgIFVSTFNlZ21lbnRzIHBhcnNlZChiYXNlUGFyc2VkKTsKLSAgICBT
ZXR1cFVURjE2T3ZlcnJpZGVDb21wb25lbnRzKGJhc2UsIHJlcGxhY2VtZW50cywgdXRmOCwgJnNv
dXJjZSwgJnBhcnNlZCk7Ci0gICAgcmV0dXJuIGRvQ2Fub25pY2FsaXplU3RhbmRhcmRVUkw8Y2hh
ciwgdW5zaWduZWQgY2hhcj4oc291cmNlLCBwYXJzZWQsIHF1ZXJ5Q29udmVydGVyLCBvdXRwdXQs
ICpvdXRwdXRQYXJzZWQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBVUkxDYW5vbmljYWxpemVyCi0K
LX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gVVNFKFdURlVSTCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2hhcmFjdGVyVHlwZXMuY3BwIGIvU291cmNlL1dU
Ri93dGYvdXJsL3NyYy9VUkxDaGFyYWN0ZXJUeXBlcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDIxZGQyMmZjYzhhNDU5MmVkOTA2NTk1YzA4NjlhM2I4YzI5MWRmNTAuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYv
dXJsL3NyYy9VUkxDaGFyYWN0ZXJUeXBlcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzggKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlVSTENoYXJhY3RlclR5cGVzLmgiCi0KLSNp
ZiBVU0UoV1RGVVJMKQotCi1uYW1lc3BhY2UgV1RGIHsKLWNvbnN0IHVuc2lnbmVkIGNoYXIgVVJM
Q2hhcmFjdGVyVHlwZXM6OmNoYXJhY3RlclR5cGVUYWJsZVsweDEwMF0gPSB7Ci0gICAgSW52YWxp
ZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENo
YXJhY3RlciwKLSAgICBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlk
Q2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLAotICAgIEludmFsaWRDaGFyYWN0ZXIsIEludmFs
aWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsCi0gICAgSW52
YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxp
ZENoYXJhY3RlciwgLy8gMHgwMCAtIDB4MGYKLSAgICBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlk
Q2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLAotICAgIEludmFs
aWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRD
aGFyYWN0ZXIsCi0gICAgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxp
ZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwKLSAgICBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZh
bGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCAvLyAweDEw
IC0gMHgxZgotICAgIEludmFsaWRDaGFyYWN0ZXIsIC8vIDB4MjAgICcgJyAoZXNjYXBlIHNwYWNl
cyBpbiBxdWVyaWVzKQotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBD
b21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4MjEgICEKLSAgICBJbnZhbGlkQ2hhcmFjdGVyLCAvLyAw
eDIyICAiCi0gICAgSW52YWxpZENoYXJhY3RlciwgLy8gMHgyMyAgIyAgKGludmFsaWQgaW4gcXVl
cnkgc2luY2UgaXQgbWFya3MgdGhlIHJlZikKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZv
Q2hhcmFjdGVyLCAvLyAweDI0ICAkCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJh
Y3RlciwgLy8gMHgyNSAgJQotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIs
IC8vIDB4MjYgICYKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29t
cG9uZW50Q2hhcmFjdGVyLCAvLyAweDI3ICAnCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5m
b0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHgyOCAgKAotICAgIFF1ZXJ5Q2hh
cmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4Mjkg
ICkKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hh
cmFjdGVyLCAvLyAweDJhICAqCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3Rl
ciwgLy8gMHgyYiAgKwotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIsIC8v
IDB4MmMgICwKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9u
ZW50Q2hhcmFjdGVyLCAvLyAweDJkICAtCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0No
YXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4MmUgIC4K
LSAgICBRdWVyeUNoYXJhY3RlciwgLy8gMHgyZiAgLwotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNl
ckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBE
ZWNpbWFsQ2hhcmFjdGVyIHwgT2N0YWxDaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8v
IDB4MzAgIDAKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENo
YXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwgRGVjaW1hbENoYXJhY3RlciB8IE9jdGFs
Q2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDMxICAxCi0gICAgUXVlcnlDaGFy
YWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENo
YXJhY3RlciB8IERlY2ltYWxDaGFyYWN0ZXIgfCBPY3RhbENoYXJhY3RlciB8IENvbXBvbmVudENo
YXJhY3RlciwgLy8gMHgzMiAgMgotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0
ZXIgfCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBEZWNpbWFsQ2hhcmFj
dGVyIHwgT2N0YWxDaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4MzMgIDMKLSAg
ICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhl
eGFkZWNpbWFsQ2hhcmFjdGVyIHwgRGVjaW1hbENoYXJhY3RlciB8IE9jdGFsQ2hhcmFjdGVyIHwg
Q29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDM0ICA0Ci0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2Vy
SW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IERl
Y2ltYWxDaGFyYWN0ZXIgfCBPY3RhbENoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8g
MHgzNSAgNQotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hh
cmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBEZWNpbWFsQ2hhcmFjdGVyIHwgT2N0YWxD
aGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4MzYgIDYKLSAgICBRdWVyeUNoYXJh
Y3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hh
cmFjdGVyIHwgRGVjaW1hbENoYXJhY3RlciB8IE9jdGFsQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hh
cmFjdGVyLCAvLyAweDM3ICA3Ci0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3Rl
ciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IERlY2ltYWxDaGFyYWN0
ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4MzggIDgKLSAgICBRdWVyeUNoYXJhY3RlciB8
IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVy
IHwgRGVjaW1hbENoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHgzOSAgOQotICAg
IFF1ZXJ5Q2hhcmFjdGVyLCAvLyAweDNhICA6Ci0gICAgUXVlcnlDaGFyYWN0ZXIsIC8vIDB4M2Ig
IDsKLSAgICBJbnZhbGlkQ2hhcmFjdGVyLCAvLyAweDNjICA8ICAoVHJ5IHRvIHByZXZlbnQgY2Vy
dGFpbiB0eXBlcyBvZiBYU1MuKQotICAgIFF1ZXJ5Q2hhcmFjdGVyLCAvLyAweDNkICA9Ci0gICAg
SW52YWxpZENoYXJhY3RlciwgLy8gMHgzZSAgPiAgKFRyeSB0byBwcmV2ZW50IGNlcnRhaW4gdHlw
ZXMgb2YgWFNTLikKLSAgICBRdWVyeUNoYXJhY3RlciwgLy8gMHgzZiAgPwotICAgIFF1ZXJ5Q2hh
cmFjdGVyLCAvLyAweDQwICBACi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3Rl
ciB8IElQdjRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IENvbXBvbmVudENoYXJh
Y3RlciwgLy8gMHg0MSAgQQotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIg
fCBJUHY0Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0
ZXIsIC8vIDB4NDIgIEIKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwg
SVB2NENoYXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVy
LCAvLyAweDQzICBDCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQ
djRDaGFyYWN0ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3Rlciwg
Ly8gMHg0NCAgRAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0
Q2hhcmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8v
IDB4NDUgIEUKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENo
YXJhY3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAw
eDQ2ICBGCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVu
dENoYXJhY3RlciwgLy8gMHg0NyAgRwotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFy
YWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NDggIEgKLSAgICBRdWVyeUNoYXJhY3Rl
ciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDQ5ICBJCi0g
ICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3Rl
ciwgLy8gMHg0YSAgSgotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBD
b21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NGIgIEsKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJ
bmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDRjICBMCi0gICAgUXVlcnlD
aGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg0
ZCAgTQotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRD
aGFyYWN0ZXIsIC8vIDB4NGUgIE4KLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFj
dGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDRmICBPCi0gICAgUXVlcnlDaGFyYWN0ZXIg
fCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg1MCAgUAotICAg
IFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIs
IC8vIDB4NTEgIFEKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29t
cG9uZW50Q2hhcmFjdGVyLCAvLyAweDUyICBSCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5m
b0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg1MyAgUwotICAgIFF1ZXJ5Q2hh
cmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NTQg
IFQKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hh
cmFjdGVyLCAvLyAweDU1ICBVCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3Rl
ciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg1NiAgVgotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwg
VXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NTcgIFcKLSAgICBR
dWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8IENvbXBv
bmVudENoYXJhY3RlciwgLy8gMHg1OCAgWAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9D
aGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NTkgIFkKLSAgICBRdWVyeUNoYXJh
Y3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDVhICBa
Ci0gICAgUXVlcnlDaGFyYWN0ZXIsIC8vIDB4NWIgIFsKLSAgICBRdWVyeUNoYXJhY3RlciwgLy8g
MHg1YyAgJ1wnCi0gICAgUXVlcnlDaGFyYWN0ZXIsIC8vIDB4NWQgIF0KLSAgICBRdWVyeUNoYXJh
Y3RlciwgLy8gMHg1ZSAgXgotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIg
fCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NWYgIF8KLSAgICBRdWVyeUNoYXJhY3RlciwgLy8g
MHg2MCAgYAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hh
cmFjdGVyIHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4
NjEgIGEKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJh
Y3RlciB8IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDYy
ICBiCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0
ZXIgfCBIZXhhZGVjaW1hbENoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg2MyAg
YwotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBJUHY0Q2hhcmFjdGVy
IHwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NjQgIGQK
LSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgSVB2NENoYXJhY3RlciB8
IEhleGFkZWNpbWFsQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDY1ICBlCi0g
ICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBI
ZXhhZGVjaW1hbENoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg2NiAgZgotICAg
IFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIs
IC8vIDB4NjcgIGcKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29t
cG9uZW50Q2hhcmFjdGVyLCAvLyAweDY4ICBoCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5m
b0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg2OSAgaQotICAgIFF1ZXJ5Q2hh
cmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NmEg
IGoKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hh
cmFjdGVyLCAvLyAweDZiICBrCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3Rl
ciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg2YyAgbAotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwg
VXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NmQgIG0KLSAgICBR
dWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAv
LyAweDZlICBuCi0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBv
bmVudENoYXJhY3RlciwgLy8gMHg2ZiAgbwotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9D
aGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NzAgIHAKLSAgICBRdWVyeUNoYXJh
Y3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDcxICBx
Ci0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJh
Y3RlciwgLy8gMHg3MiAgcgotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIg
fCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4NzMgIHMKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVz
ZXJJbmZvQ2hhcmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDc0ICB0Ci0gICAgUXVl
cnlDaGFyYWN0ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8g
MHg3NSAgdQotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlckluZm9DaGFyYWN0ZXIgfCBDb21wb25l
bnRDaGFyYWN0ZXIsIC8vIDB4NzYgIHYKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hh
cmFjdGVyIHwgQ29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDc3ICB3Ci0gICAgUXVlcnlDaGFyYWN0
ZXIgfCBVc2VySW5mb0NoYXJhY3RlciB8IElQdjRDaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0
ZXIsIC8vIDB4NzggIHgKLSAgICBRdWVyeUNoYXJhY3RlciB8IFVzZXJJbmZvQ2hhcmFjdGVyIHwg
Q29tcG9uZW50Q2hhcmFjdGVyLCAvLyAweDc5ICB5Ci0gICAgUXVlcnlDaGFyYWN0ZXIgfCBVc2Vy
SW5mb0NoYXJhY3RlciB8IENvbXBvbmVudENoYXJhY3RlciwgLy8gMHg3YSAgegotICAgIFF1ZXJ5
Q2hhcmFjdGVyLCAvLyAweDdiICB7Ci0gICAgUXVlcnlDaGFyYWN0ZXIsIC8vIDB4N2MgIHwKLSAg
ICBRdWVyeUNoYXJhY3RlciwgLy8gMHg3ZCAgfQotICAgIFF1ZXJ5Q2hhcmFjdGVyIHwgVXNlcklu
Zm9DaGFyYWN0ZXIgfCBDb21wb25lbnRDaGFyYWN0ZXIsIC8vIDB4N2UgIH4KLSAgICBJbnZhbGlk
Q2hhcmFjdGVyLCAvLyAweDdmCi0gICAgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3Rl
ciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwKLSAgICBJbnZhbGlkQ2hhcmFj
dGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVy
LAotICAgIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0
ZXIsIEludmFsaWRDaGFyYWN0ZXIsCi0gICAgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJh
Y3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgLy8gMHg4MCAtIDB4OGYK
LSAgICBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVy
LCBJbnZhbGlkQ2hhcmFjdGVyLAotICAgIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0
ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsCi0gICAgSW52YWxpZENoYXJh
Y3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3Rl
ciwKLSAgICBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFj
dGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCAvLyAweDkwIC0gMHg5ZgotICAgIEludmFsaWRDaGFyYWN0
ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIs
Ci0gICAgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3Rl
ciwgSW52YWxpZENoYXJhY3RlciwKLSAgICBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFj
dGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLAotICAgIEludmFsaWRDaGFy
YWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0
ZXIsIC8vIDB4YTAgLSAweGFmCi0gICAgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3Rl
ciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwKLSAgICBJbnZhbGlkQ2hhcmFj
dGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVy
LAotICAgIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0
ZXIsIEludmFsaWRDaGFyYWN0ZXIsCi0gICAgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJh
Y3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgLy8gMHhiMCAtIDB4YmYK
LSAgICBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVy
LCBJbnZhbGlkQ2hhcmFjdGVyLAotICAgIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0
ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsCi0gICAgSW52YWxpZENoYXJh
Y3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3Rl
ciwKLSAgICBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFj
dGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCAvLyAweGMwIC0gMHhjZgotICAgIEludmFsaWRDaGFyYWN0
ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIs
Ci0gICAgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3Rl
ciwgSW52YWxpZENoYXJhY3RlciwKLSAgICBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFj
dGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLAotICAgIEludmFsaWRDaGFy
YWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0
ZXIsIC8vIDB4ZDAgLSAweGRmCi0gICAgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3Rl
ciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwKLSAgICBJbnZhbGlkQ2hhcmFj
dGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVy
LAotICAgIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0
ZXIsIEludmFsaWRDaGFyYWN0ZXIsCi0gICAgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJh
Y3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgLy8gMHhlMCAtIDB4ZWYK
LSAgICBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVy
LCBJbnZhbGlkQ2hhcmFjdGVyLAotICAgIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0
ZXIsIEludmFsaWRDaGFyYWN0ZXIsIEludmFsaWRDaGFyYWN0ZXIsCi0gICAgSW52YWxpZENoYXJh
Y3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3RlciwgSW52YWxpZENoYXJhY3Rl
ciwKLSAgICBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCBJbnZhbGlkQ2hhcmFj
dGVyLCBJbnZhbGlkQ2hhcmFjdGVyLCAvLyAweGYwIC0gMHhmZgotfTsKLQotfQotCi0jZW5kaWYg
Ly8gVVNFKFdURlVSTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2hh
cmFjdGVyVHlwZXMuaCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMQ2hhcmFjdGVyVHlwZXMu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY1MjEwNWU4ZDc3NTBkNWUyM2I0OTRh
MzE4M2I4ZTdhNmM1NjhjMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENoYXJhY3RlclR5cGVzLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFVSTENoYXJhY3RlclR5cGVzX2gKLSNkZWZpbmUg
VVJMQ2hhcmFjdGVyVHlwZXNfaAotCi0jaWYgVVNFKFdURlVSTCkKLQotbmFtZXNwYWNlIFdURiB7
Ci0KLWNsYXNzIFVSTENoYXJhY3RlclR5cGVzIHsKLXB1YmxpYzoKLSAgICBlbnVtIENoYXJhY3Rl
clR5cGVzIHsKLSAgICAgICAgSW52YWxpZENoYXJhY3RlciA9IDAsCi0gICAgICAgIFF1ZXJ5Q2hh
cmFjdGVyID0gMSA8PCAwLAotICAgICAgICBVc2VySW5mb0NoYXJhY3RlciA9IDEgPDwgMSwKLSAg
ICAgICAgSVB2NENoYXJhY3RlciA9IDEgPDwgMiwKLSAgICAgICAgSGV4YWRlY2ltYWxDaGFyYWN0
ZXIgPSAxIDw8IDMsCi0gICAgICAgIERlY2ltYWxDaGFyYWN0ZXIgPSAxIDw8IDQsCi0gICAgICAg
IE9jdGFsQ2hhcmFjdGVyID0gMSA8PCA1LAotICAgICAgICBDb21wb25lbnRDaGFyYWN0ZXIgPSAx
IDw8IDYsCi0gICAgfTsKLQotICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0NvbXBvbmVudENoYXIo
dW5zaWduZWQgY2hhciBjaGFyYWN0ZXIpIHsgcmV0dXJuIGlzQ2hhcmFjdGVyT2ZUeXBlKGNoYXJh
Y3RlciwgQ29tcG9uZW50Q2hhcmFjdGVyKTsgfQotICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0hl
eENoYXIodW5zaWduZWQgY2hhciBjaGFyYWN0ZXIpIHsgcmV0dXJuIGlzQ2hhcmFjdGVyT2ZUeXBl
KGNoYXJhY3RlciwgSGV4YWRlY2ltYWxDaGFyYWN0ZXIpOyB9Ci0gICAgc3RhdGljIGlubGluZSBi
b29sIGlzSVB2NENoYXIodW5zaWduZWQgY2hhciBjaGFyYWN0ZXIpIHsgcmV0dXJuIGlzQ2hhcmFj
dGVyT2ZUeXBlKGNoYXJhY3RlciwgSVB2NENoYXJhY3Rlcik7IH0KLSAgICBzdGF0aWMgaW5saW5l
IGJvb2wgaXNRdWVyeUNoYXIodW5zaWduZWQgY2hhciBjaGFyYWN0ZXIpIHsgcmV0dXJuIGlzQ2hh
cmFjdGVyT2ZUeXBlKGNoYXJhY3RlciwgUXVlcnlDaGFyYWN0ZXIpOyB9Ci0KLSAgICBzdGF0aWMg
aW5saW5lIGJvb2wgaXNDaGFyYWN0ZXJPZlR5cGUodW5zaWduZWQgY2hhciBIZXhDaGFyYWN0ZXIs
IENoYXJhY3RlclR5cGVzIHR5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gISEoY2hhcmFjdGVy
VHlwZVRhYmxlW0hleENoYXJhY3Rlcl0gJiB0eXBlKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyVHlwZVRhYmxlWzB4MTAwXTsKLX07
Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShXVEZVUkwpCi0KLSNlbmRpZiAvLyBVUkxDaGFyYWN0ZXJU
eXBlc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTENvbXBvbmVudC5o
IGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxDb21wb25lbnQuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggODZhZTA1YTc0MzRlNGM2Y2MwYzRlNDZiNzg3NDY5MWVjMGJjOTA5ZS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi91cmwvc3JjL1VSTENvbXBvbmVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBVUkxDb21wb25lbnRfaAotI2RlZmluZSBVUkxDb21wb25lbnRfaAotCi0jaWYgVVNFKFdU
RlVSTCkKLQotbmFtZXNwYWNlIFdURiB7Ci0KLS8vIFJlcHJlc2VudHMgYSBzdWJzdHJpbmcgZm9y
IFVSTCBwYXJzaW5nLgotY2xhc3MgVVJMQ29tcG9uZW50IHsKLXB1YmxpYzoKLSAgICBVUkxDb21w
b25lbnQoKSA6IG1fYmVnaW4oMCksIG1fbGVuZ3RoKC0xKSB7IH0KLSAgICBVUkxDb21wb25lbnQo
aW50IGJlZ2luLCBpbnQgbGVuZ3RoKSA6IG1fYmVnaW4oYmVnaW4pLCBtX2xlbmd0aChsZW5ndGgp
IHsgfQotCi0gICAgLy8gSGVscGVyIHRoYXQgcmV0dXJucyBhIGNvbXBvbmVudCBjcmVhdGVkIHdp
dGggdGhlIGdpdmVuIGJlZ2luIGFuZCBlbmRpbmcKLSAgICAvLyBwb2ludHMuIFRoZSBlbmRpbmcg
cG9pbnQgaXMgbm9uLWluY2x1c2l2ZS4KLSAgICBzdGF0aWMgaW5saW5lIFVSTENvbXBvbmVudCBm
cm9tUmFuZ2UoaW50IGJlZ2luLCBpbnQgZW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFVSTENv
bXBvbmVudChiZWdpbiwgZW5kIC0gYmVnaW4pOwotICAgIH0KLQotICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGlzIGNvbXBvbmVudCBpcyB2YWxpZCwgbWVhbmluZyB0aGUgbGVuZ3RoIGlzIGdpdmVu
LiBFdmVuCi0gICAgLy8gdmFsaWQgY29tcG9uZW50cyBtYXkgYmUgZW1wdHkgdG8gcmVjb3JkIHRo
ZSBmYWN0IHRoYXQgdGhleSBleGlzdC4KLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVy
biBtX2xlbmd0aCAhPSAtMTsgfQotCi0gICAgYm9vbCBpc05vbkVtcHR5KCkgY29uc3QgeyByZXR1
cm4gbV9sZW5ndGggPiAwOyB9Ci0gICAgYm9vbCBpc0VtcHR5T3JJbnZhbGlkKCkgY29uc3QgeyBy
ZXR1cm4gbV9sZW5ndGggPD0gMDsgfQotCi0gICAgdm9pZCByZXNldCgpCi0gICAgewotICAgICAg
ICBtX2JlZ2luID0gMDsKLSAgICAgICAgbV9sZW5ndGggPSAtMTsKLSAgICB9Ci0KLSAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgVVJMQ29tcG9uZW50JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9i
ZWdpbiA9PSBvdGhlci5tX2JlZ2luICYmIG1fbGVuZ3RoID09IG90aGVyLm1fbGVuZ3RoOyB9Ci0K
LSAgICBpbnQgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2JlZ2luOyB9Ci0gICAgdm9pZCBzZXRC
ZWdpbihpbnQgYmVnaW4pIHsgbV9iZWdpbiA9IGJlZ2luOyB9Ci0gICAgdm9pZCBtb3ZlQnkoaW50
IG9mZnNldCkgeyBtX2JlZ2luICs9IG9mZnNldDsgfQotCi0gICAgaW50IGxlbmd0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGVuZ3RoOyB9Ci0gICAgdm9pZCBzZXRMZW5ndGgoaW50IGxlbmd0aCkgeyBt
X2xlbmd0aCA9IGxlbmd0aDsgfQotCi0gICAgaW50IGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmVn
aW4gKyBtX2xlbmd0aDsgfQotCi1wcml2YXRlOgotICAgIGludCBtX2JlZ2luOyAvLyBCeXRlIG9m
ZnNldCBpbiB0aGUgc3RyaW5nIG9mIHRoaXMgY29tcG9uZW50LgotICAgIGludCBtX2xlbmd0aDsg
Ly8gV2lsbCBiZSAtMSBpZiB0aGUgY29tcG9uZW50IGlzIHVuc3BlY2lmaWVkLgotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBVU0UoV1RGVVJMKQotCi0jZW5kaWYgLy8gVVJM
Q29tcG9uZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMRmlsZS5o
IGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxGaWxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDQ4YjEyZWJkZjMzZWVlNmJkYTI1MmU0NzBjNWQ3YmUzZGMyODhlYWUuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYv
dXJsL3NyYy9VUkxGaWxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAyMDA3IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gUHJvdmlkZXMgc2hhcmVk
IGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBpbnRlcm5hbHMgb2YgdGhlIHBhcnNlciBhbmQKLS8vIGNh
bm9uaWNhbGl6ZXIgZm9yIGZpbGUgVVJMcy4gRG8gbm90IHVzZSBvdXRzaWRlIG9mIHRoZXNlIG1v
ZHVsZXMuCi0KLSNpZm5kZWYgVVJMRmlsZV9oCi0jZGVmaW5lIFVSTEZpbGVfaAotCi0jaW5jbHVk
ZSAiVVJMUGFyc2VJbnRlcm5hbC5oIgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4K
LQotI2lmIFVTRShXVEZVUkwpCi0KLW5hbWVzcGFjZSBXVEYgewotCi1uYW1lc3BhY2UgVVJMUGFy
c2VyIHsKLQotI2lmIE9TKFdJTkRPV1MpCi0vLyBXZSBhbGxvdyBib3RoICJjOiIgYW5kICJjfCIg
YXMgZHJpdmUgaWRlbnRpZmllcnMuCi1pbmxpbmUgYm9vbCBpc1dpbmRvd3NEcml2ZVNlcGFyYXRv
cihVQ2hhciBjaGFyYWN0ZXIpCi17Ci0gICAgcmV0dXJuIGNoYXJhY3RlciA9PSAnOicgfHwgY2hh
cmFjdGVyID09ICd8JzsKLX0KLWlubGluZSBib29sIGlzV2luZG93c0RyaXZlTGV0dGVyKFVDaGFy
IGNoYXJhY3RlcikKLXsKLSAgICByZXR1cm4gKGNoYXJhY3RlciA+PSAnQScgJiYgY2hhcmFjdGVy
IDw9ICdaJykgfHwgKGNoYXJhY3RlciA+PSAnYScgJiYgY2hhcmFjdGVyIDw9ICd6Jyk7Ci19Ci0j
ZW5kaWYgLy8gT1MoV0lORE9XUykKLQotLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG5leHQg
c2xhc2ggaW4gdGhlIGlucHV0IGFmdGVyIHRoZSBnaXZlbiBpbmRleCwgb3IKLS8vIHNwZWNMZW5n
dGggaWYgdGhlIGVuZCBvZiB0aGUgaW5wdXQgaXMgcmVhY2hlZC4KLXRlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+Ci1pbmxpbmUgaW50IGZpbmROZXh0U2xhc2goY29uc3QgQ2hhcmFjdGVy
VHlwZSogc3BlYywgaW50IGJlZ2luSW5kZXgsIGludCBzcGVjTGVuZ3RoKQotewotICAgIGludCBp
ZHggPSBiZWdpbkluZGV4OwotICAgIHdoaWxlIChpZHggPCBzcGVjTGVuZ3RoICYmICFpc1VSTFNs
YXNoKHNwZWNbaWR4XSkpCi0gICAgICAgICsraWR4OwotICAgIHJldHVybiBpZHg7Ci19Ci0KLSNp
ZiBPUyhXSU5ET1dTKQotLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzdGFydE9mZnNldCBpbiB0aGUg
Z2l2ZW4gc3BlYyBsb29rcyBsaWtlIGl0IGJlZ2lucyBhCi0vLyBkcml2ZSBzcGVjLCBmb3IgZXhh
bXBsZSAiYzoiLiBUaGlzIGZ1bmN0aW9uIGV4cGxpY2l0bHkgaGFuZGxlcyBzdGFydE9mZnNldAot
Ly8gdmFsdWVzIHRoYXQgYXJlIGVxdWFsIHRvIG9yIGxhcmdlciB0aGFuIHRoZSBzcGVjTGVuZ3Ro
IHRvIHNpbXBsaWZ5IGNhbGxlcnMuCi0vLwotLy8gSWYgdGhpcyByZXR1cm5zIHRydWUsIHRoZSBz
cGVjIGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBhIHZhbGlkIGRyaXZlIGxldHRlcgotLy8gcGx1cyBh
IGNvbG9uIHN0YXJ0aW5nIGF0IHxzdGFydE9mZnNldHwuCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgotaW5saW5lIGJvb2wgZG9lc0JlZ2luV2luZG93c0RyaXZlU3BlYyhjb25zdCBD
aGFyYWN0ZXJUeXBlKiBzcGVjLCBpbnQgc3RhcnRPZmZzZXQsIGludCBzcGVjTGVuZ3RoKQotewot
ICAgIGludCByZW1haW5pbmdMZW5ndGggPSBzcGVjTGVuZ3RoIC0gc3RhcnRPZmZzZXQ7Ci0gICAg
aWYgKHJlbWFpbmluZ0xlbmd0aCA8IDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gTm90IGVu
b3VnaCByb29tLgotICAgIGlmICghaXNXaW5kb3dzRHJpdmVMZXR0ZXIoc3BlY1tzdGFydE9mZnNl
dF0pKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIERvZXNuJ3Qgc3RhcnQgd2l0aCBhIHZhbGlk
IGRyaXZlIGxldHRlci4KLSAgICBpZiAoIWlzV2luZG93c0RyaXZlU2VwYXJhdG9yKHNwZWNbc3Rh
cnRPZmZzZXQgKyAxXSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gSXNuJ3QgZm9sbG93ZWQg
d2l0aCBhIGRyaXZlIHNlcGFyYXRvci4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSBzdGFydE9mZnNldCBpbiB0aGUgZ2l2ZW4gdGV4dCBsb29rcyBsaWtlIGl0
IGJlZ2lucyBhCi0vLyBVTkMgcGF0aCwgZm9yIGV4YW1wbGUgIlxcIi4gVGhpcyBmdW5jdGlvbiBl
eHBsaWNpdGx5IGhhbmRsZXMgc3RhcnRPZmZzZXQKLS8vIHZhbHVlcyB0aGF0IGFyZSBlcXVhbCB0
byBvciBsYXJnZXIgdGhhbiB0aGUgc3BlY0xlbmd0aCB0byBzaW1wbGlmeSBjYWxsZXJzLgotLy8K
LS8vIFdoZW4gc3RyaWN0U2xhc2hlcyBpcyBzZXQsIHRoaXMgZnVuY3Rpb24gd2lsbCBvbmx5IGFj
Y2VwdCBiYWNrc2xhc2hlcyBhcyBpcwotLy8gc3RhbmRhcmQgZm9yIFdpbmRvd3MuIE90aGVyd2lz
ZSwgaXQgd2lsbCBhY2NlcHQgZm9yd2FyZCBzbGFzaGVzIGFzIHdlbGwKLS8vIHdoaWNoIHdlIHVz
ZSBmb3IgYSBsb3Qgb2YgVVJMIGhhbmRsaW5nLgotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4KLWlubGluZSBib29sIGRvZXNCZWdpblVOQ1BhdGgoY29uc3QgQ2hhcmFjdGVyVHlwZSog
dGV4dCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgbGVuZ3RoLCBib29sIHN0cmljdFNsYXNoZXMpCi17
Ci0gICAgaW50IHJlbWFpbmluZ0xlbmd0aCA9IGxlbmd0aCAtIHN0YXJ0T2Zmc2V0OwotICAgIGlm
IChyZW1haW5pbmdMZW5ndGggPCAyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
c3RyaWN0U2xhc2hlcykKLSAgICAgICAgcmV0dXJuIHRleHRbc3RhcnRPZmZzZXRdID09ICdcXCcg
JiYgdGV4dFtzdGFydE9mZnNldCArIDFdID09ICdcXCc7Ci0gICAgcmV0dXJuIGlzVVJMU2xhc2go
dGV4dFtzdGFydE9mZnNldF0pICYmIGlzVVJMU2xhc2godGV4dFtzdGFydE9mZnNldCArIDFdKTsK
LX0KLSNlbmRpZiAvLyBPUyhXSU5ET1dTKQotCi19IC8vIG5hbWVzcGFjZSBVUkxQYXJzZXIKLQot
fSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBVU0UoV1RGVVJMKQotCi0jZW5kaWYgLy8g
VVJMRmlsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFBhcnNlLmNw
cCBiL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMUGFyc2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA5MWU2NWI0MjM2NzcxNmY3YWJjM2Y1NjFjZTg1MjhlOWE2MDhlNGU2Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYv
d3RmL3VybC9zcmMvVVJMUGFyc2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzgwICswLDAgQEAK
LS8qIEJhc2VkIG9uIG5zVVJMUGFyc2Vycy5jYyBmcm9tIE1vemlsbGEKLSAqIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIENvcHlyaWdodCAoQykgMTk5OCBOZXRzY2Fw
ZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KLSAqIENvcHlyaWdodCAyMDEyLCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJl
IHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgotICogMS4xICh0
aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoCi0gKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM
aWNlbnNlIGF0Ci0gKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KLSAqCi0gKiBTb2Z0d2Fy
ZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMg
SVMiIGJhc2lzLAotICogV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJl
c3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCi0gKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1
YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZQotICogTGljZW5z
ZS4KLSAqCi0gKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBtb3ppbGxhLm9yZyBjb2RlLgotICoKLSAq
IFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcwotICogTmV0c2Nh
cGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCi0gKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRo
ZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAxOTk4Ci0gKiB0aGUgSW5pdGlh
bCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogQ29udHJpYnV0b3Iocyk6
Ci0gKiAgIERhcmluIEZpc2hlciAob3JpZ2luYWwgYXV0aG9yKQotICoKLSAqIEFsdGVybmF0aXZl
bHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1z
IG9mCi0gKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBv
ciBsYXRlciAodGhlICJHUEwiKSwgb3IKLSAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAotICogaW4gd2hpY2gg
Y2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxl
IGluc3RlYWQKLSAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2Yg
eW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0
aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCi0gKiB1
c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwg
aW5kaWNhdGUgeW91cgotICogZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJv
dmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKLSAqIGFuZCBvdGhlciBwcm92aXNp
b25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRl
Ci0gKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNp
b24gb2YgdGhpcyBmaWxlIHVuZGVyCi0gKiB0aGUgdGVybXMgb2YgYW55IG9uZSBvZiB0aGUgTVBM
LCB0aGUgR1BMIG9yIHRoZSBMR1BMLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiVVJMUGFyc2UuaCIKLQotI2luY2x1ZGUgIlVSTFBhcnNlSW50ZXJuYWwuaCIKLSNp
bmNsdWRlICJVUkxVdGlsLmgiCi0jaW5jbHVkZSAiVVJMVXRpbEludGVybmFsLmgiCi0jaW5jbHVk
ZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KLQotI2lmIFVTRShXVEZV
UkwpCi0KLW5hbWVzcGFjZSBXVEYgewotCi1uYW1lc3BhY2UgVVJMUGFyc2VyIHsKLQotbmFtZXNw
YWNlIHsKLQotLy8gUmV0dXJucyB0aGUgb2Zmc2V0IG9mIHRoZSBuZXh0IGF1dGhvcml0eSB0ZXJt
aW5hdG9yIGluIHRoZSBpbnB1dCBzdGFydGluZwotLy8gZnJvbSBzdGFydE9mZnNldC4gSWYgbm8g
dGVybWluYXRvciBpcyBmb3VuZCwgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGVxdWFsCi0vLyB0
byBzcGVjTGVuZ3RoLgotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWludCBmaW5k
TmV4dEF1dGhvcml0eVRlcm1pbmF0b3IoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgaW50IHN0
YXJ0T2Zmc2V0LCBpbnQgc3BlY0xlbmd0aCkKLXsKLSAgICBmb3IgKGludCBpID0gc3RhcnRPZmZz
ZXQ7IGkgPCBzcGVjTGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYgKElzQXV0aG9yaXR5VGVybWlu
YXRvcihzcGVjW2ldKSkKLSAgICAgICAgICAgIHJldHVybiBpOwotICAgIH0KLSAgICByZXR1cm4g
c3BlY0xlbmd0aDsgLy8gTm90IGZvdW5kLgotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPgotdm9pZCBwYXJzZVVzZXJJbmZvKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNv
bnN0IFVSTENvbXBvbmVudCYgdXNlciwgVVJMQ29tcG9uZW50JiB1c2VybmFtZSwgVVJMQ29tcG9u
ZW50JiBwYXNzd29yZCkKLXsKLSAgICAvLyBGaW5kIHRoZSBmaXJzdCBjb2xvbiBpbiB0aGUgdXNl
ciBzZWN0aW9uLCB3aGljaCBzZXBhcmF0ZXMgdGhlIHVzZXJuYW1lIGFuZAotICAgIC8vIHBhc3N3
b3JkLgotICAgIGludCBjb2xvbk9mZnNldCA9IDA7Ci0gICAgd2hpbGUgKGNvbG9uT2Zmc2V0IDwg
dXNlci5sZW5ndGgoKSAmJiBzcGVjW3VzZXIuYmVnaW4oKSArIGNvbG9uT2Zmc2V0XSAhPSAnOicp
Ci0gICAgICAgICsrY29sb25PZmZzZXQ7Ci0KLSAgICBpZiAoY29sb25PZmZzZXQgPCB1c2VyLmxl
bmd0aCgpKSB7Ci0gICAgICAgIC8vIEZvdW5kIHNlcGFyYXRvcjogPHVzZXJuYW1lPjo8cGFzc3dv
cmQ+Ci0gICAgICAgIHVzZXJuYW1lID0gVVJMQ29tcG9uZW50KHVzZXIuYmVnaW4oKSwgY29sb25P
ZmZzZXQpOwotICAgICAgICBwYXNzd29yZCA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKHVzZXIu
YmVnaW4oKSArIGNvbG9uT2Zmc2V0ICsgMSwgdXNlci5lbmQoKSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgLy8gTm8gc2VwYXJhdG9yLCB0cmVhdCBldmVyeXRoaW5nIGFzIHRoZSB1c2VybmFtZQot
ICAgICAgICB1c2VybmFtZSA9IHVzZXI7Ci0gICAgICAgIHBhc3N3b3JkID0gVVJMQ29tcG9uZW50
KCk7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotdm9pZCBw
YXJzZVNlcnZlckluZm8oY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJMQ29tcG9u
ZW50JiBzZXJ2ZXJJbmZvLCBVUkxDb21wb25lbnQmIGhvc3RuYW1lLCBVUkxDb21wb25lbnQmIHBv
cnQpCi17Ci0gICAgaWYgKCFzZXJ2ZXJJbmZvLmxlbmd0aCgpKSB7Ci0gICAgICAgIC8vIE5vIHNl
cnZlciBpbmZvLCBob3N0IG5hbWUgaXMgZW1wdHkuCi0gICAgICAgIGhvc3RuYW1lID0gVVJMQ29t
cG9uZW50KCk7Ci0gICAgICAgIHBvcnQgPSBVUkxDb21wb25lbnQoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIC8vIElmIHRoZSBob3N0IHN0YXJ0cyB3aXRoIGEgbGVmdC1icmFja2V0
LCBhc3N1bWUgdGhlIGVudGlyZSBob3N0IGlzIGFuCi0gICAgLy8gSVB2NiBsaXRlcmFsLiBPdGhl
cndpc2UsIGFzc3VtZSBub25lIG9mIHRoZSBob3N0IGlzIGFuIElQdjYgbGl0ZXJhbC4KLSAgICAv
LyBUaGlzIGFzc3VtcHRpb24gd2lsbCBiZSBvdmVycmlkZGVuIGlmIHdlIGZpbmQgYSByaWdodC1i
cmFja2V0LgotICAgIC8vCi0gICAgLy8gT3VyIElQdjYgYWRkcmVzcyBjYW5vbmljYWxpemF0aW9u
IGNvZGUgcmVxdWlyZXMgYm90aCBicmFja2V0cyB0byBleGlzdCwKLSAgICAvLyBidXQgdGhlIGFi
aWxpdHkgdG8gbG9jYXRlIGFuIGluY29tcGxldGUgYWRkcmVzcyBjYW4gc3RpbGwgYmUgdXNlZnVs
LgotICAgIGludCBpcHY2VGVybWluYXRvciA9IHNwZWNbc2VydmVySW5mby5iZWdpbigpXSA9PSAn
WycgPyBzZXJ2ZXJJbmZvLmVuZCgpIDogLTE7Ci0gICAgaW50IGNvbG9uID0gLTE7Ci0KLSAgICAv
LyBGaW5kIHRoZSBsYXN0IHJpZ2h0LWJyYWNrZXQsIGFuZCB0aGUgbGFzdCBjb2xvbi4KLSAgICBm
b3IgKGludCBpID0gc2VydmVySW5mby5iZWdpbigpOyBpIDwgc2VydmVySW5mby5lbmQoKTsgKytp
KSB7Ci0gICAgICAgIHN3aXRjaCAoc3BlY1tpXSkgewotICAgICAgICBjYXNlICddJzoKLSAgICAg
ICAgICAgIGlwdjZUZXJtaW5hdG9yID0gaTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlICc6JzoKLSAgICAgICAgICAgIGNvbG9uID0gaTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGNvbG9uID4gaXB2NlRlcm1pbmF0b3IpIHsKLSAgICAg
ICAgLy8gRm91bmQgYSBwb3J0IG51bWJlcjogPGhvc3RuYW1lPjo8cG9ydD4KLSAgICAgICAgaG9z
dG5hbWUgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShzZXJ2ZXJJbmZvLmJlZ2luKCksIGNvbG9u
KTsKLSAgICAgICAgaWYgKCFob3N0bmFtZS5sZW5ndGgoKSkKLSAgICAgICAgICAgIGhvc3RuYW1l
LnJlc2V0KCk7Ci0gICAgICAgIHBvcnQgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShjb2xvbiAr
IDEsIHNlcnZlckluZm8uZW5kKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIE5vIHBvcnQ6
IDxob3N0bmFtZT4KLSAgICAgICAgaG9zdG5hbWUgPSBzZXJ2ZXJJbmZvOwotICAgICAgICBwb3J0
ID0gVVJMQ29tcG9uZW50KCk7Ci0gICAgfQotfQotCi0vLyBHaXZlbiBhbiBhbHJlYWR5LWlkZW50
aWZpZWQgYXV0aCBzZWN0aW9uLCBicmVha3MgaXQgaW50byBpdHMgY29uc2l0dWVudAotLy8gcGFy
dHMuIFRoZSBwb3J0IG51bWJlciB3aWxsIGJlIHBhcnNlZCBhbmQgdGhlIHJlc3VsdGluZyBpbnRl
Z2VyIHdpbGwgYmUKLS8vIGZpbGxlZCBpbnRvIHRoZSBnaXZlbiAqcG9ydCB2YXJpYWJsZSwgb3Ig
LTEgaWYgdGhlcmUgaXMgbm8gcG9ydCBudW1iZXIgb3IgaXQKLS8vIGlzIGludmFsaWQuCi10ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotdm9pZCBkb1BhcnNlQXV0aG9yaXR5KGNvbnN0
IENoYXJhY3RlclR5cGUqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgYXV0aG9yaXR5LCBVUkxD
b21wb25lbnQmIHVzZXJuYW1lLCBVUkxDb21wb25lbnQmIHBhc3N3b3JkLCBVUkxDb21wb25lbnQm
IGhvc3RuYW1lLCBVUkxDb21wb25lbnQmIHBvcnQpCi17Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShhdXRob3JpdHkuaXNWYWxpZCgpLCAiV2Ugc2hvdWxkIGFsd2F5cyBnZXQgYW4gYXV0aG9yaXR5
Iik7Ci0gICAgaWYgKCFhdXRob3JpdHkubGVuZ3RoKCkpIHsKLSAgICAgICAgdXNlcm5hbWUgPSBV
UkxDb21wb25lbnQoKTsKLSAgICAgICAgcGFzc3dvcmQgPSBVUkxDb21wb25lbnQoKTsKLSAgICAg
ICAgaG9zdG5hbWUgPSBVUkxDb21wb25lbnQoKTsKLSAgICAgICAgcG9ydCA9IFVSTENvbXBvbmVu
dCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gU2VhcmNoIGJhY2t3YXJkcyBm
b3IgQCwgd2hpY2ggaXMgdGhlIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSB1c2VyIGluZm8gYW5kCi0g
ICAgLy8gdGhlIHNlcnZlciBpbmZvLgotICAgIGludCBpID0gYXV0aG9yaXR5LmVuZCgpIC0gMTsK
LSAgICB3aGlsZSAoaSA+IGF1dGhvcml0eS5iZWdpbigpICYmIHNwZWNbaV0gIT0gJ0AnKQotICAg
ICAgICAtLWk7Ci0KLSAgICBpZiAoc3BlY1tpXSA9PSAnQCcpIHsKLSAgICAgICAgLy8gRm91bmQg
dXNlciBpbmZvOiA8dXNlci1pbmZvPkA8c2VydmVyLWluZm8+Ci0gICAgICAgIHBhcnNlVXNlcklu
Zm8oc3BlYywgVVJMQ29tcG9uZW50KGF1dGhvcml0eS5iZWdpbigpLCBpIC0gYXV0aG9yaXR5LmJl
Z2luKCkpLCB1c2VybmFtZSwgcGFzc3dvcmQpOwotICAgICAgICBwYXJzZVNlcnZlckluZm8oc3Bl
YywgVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoaSArIDEsIGF1dGhvcml0eS5lbmQoKSksIGhvc3Ru
YW1lLCBwb3J0KTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBObyB1c2VyIGluZm8sIGV2ZXJ5
dGhpbmcgaXMgc2VydmVyIGluZm8uCi0gICAgICAgIHVzZXJuYW1lID0gVVJMQ29tcG9uZW50KCk7
Ci0gICAgICAgIHBhc3N3b3JkID0gVVJMQ29tcG9uZW50KCk7Ci0gICAgICAgIHBhcnNlU2VydmVy
SW5mbyhzcGVjLCBhdXRob3JpdHksIGhvc3RuYW1lLCBwb3J0KTsKLSAgICB9Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci12b2lkIHBhcnNlUGF0aChjb25zdCBDaGFyYWN0
ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGhpZXJhcmNoaWNhbGlkZW50aWZpZXJz
LCBVUkxDb21wb25lbnQmIHJlc291cmNlUGF0aCwgVVJMQ29tcG9uZW50JiBxdWVyeSwgVVJMQ29t
cG9uZW50JiBmcmFnbWVudCkKLXsKLSAgICAvLyBwYXRoID0gWy9dPHNlZ21lbnQxPi88c2VnbWVu
dDI+LzwuLi4+LzxzZWdtZW50Tj47PHBhcmFtPj88cXVlcnk+IzxyZWY+Ci0KLSAgICAvLyBTcGVj
aWFsIGNhc2Ugd2hlbiB0aGVyZSBpcyBubyBwYXRoLgotICAgIGlmIChoaWVyYXJjaGljYWxpZGVu
dGlmaWVycy5sZW5ndGgoKSA9PSAtMSkgewotICAgICAgICByZXNvdXJjZVBhdGggPSBVUkxDb21w
b25lbnQoKTsKLSAgICAgICAgcXVlcnkgPSBVUkxDb21wb25lbnQoKTsKLSAgICAgICAgZnJhZ21l
bnQgPSBVUkxDb21wb25lbnQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKGhpZXJhcmNoaWNhbGlkZW50aWZpZXJzLmxlbmd0aCgpID4gMCwgIldlIHNo
b3VsZCBuZXZlciBoYXZlIDAgbGVuZ3RoIHBhdGhzIik7Ci0KLSAgICAvLyBTZWFyY2ggZm9yIGZp
cnN0IG9jY3VycmVuY2Ugb2YgZWl0aGVyID8gb3IgIy4KLSAgICBpbnQgcGF0aEVuZCA9IGhpZXJh
cmNoaWNhbGlkZW50aWZpZXJzLmVuZCgpOwotCi0gICAgaW50IHF1ZXJ5U2VwYXJhdG9yID0gLTE7
IC8vIEluZGV4IG9mIHRoZSAnPycKLSAgICBpbnQgZnJhZ21lbnRTZXBhcmF0b3IgPSAtMTsgLy8g
SW5kZXggb2YgdGhlICcjJwotICAgIGZvciAoaW50IGkgPSBoaWVyYXJjaGljYWxpZGVudGlmaWVy
cy5iZWdpbigpOyBpIDwgcGF0aEVuZDsgKytpKSB7Ci0gICAgICAgIHN3aXRjaCAoc3BlY1tpXSkg
ewotICAgICAgICBjYXNlICc/JzoKLSAgICAgICAgICAgIC8vIE9ubHkgbWF0Y2ggdGhlIHF1ZXJ5
IHN0cmluZyBpZiBpdCBwcmVjZWRlcyB0aGUgcmVmZXJlbmNlIGZyYWdtZW50Ci0gICAgICAgICAg
ICAvLyBhbmQgd2hlbiB3ZSBoYXZlbid0IGZvdW5kIG9uZSBhbHJlYWR5LgotICAgICAgICAgICAg
aWYgKGZyYWdtZW50U2VwYXJhdG9yIDwgMCAmJiBxdWVyeVNlcGFyYXRvciA8IDApCi0gICAgICAg
ICAgICAgICAgcXVlcnlTZXBhcmF0b3IgPSBpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgJyMnOgotICAgICAgICAgICAgLy8gUmVjb3JkIHRoZSBmaXJzdCAjIHNpZ24gb25seS4K
LSAgICAgICAgICAgIGlmIChmcmFnbWVudFNlcGFyYXRvciA8IDApCi0gICAgICAgICAgICAgICAg
ZnJhZ21lbnRTZXBhcmF0b3IgPSBpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvLyBNYXJrZXJzIHBvaW50aW5nIHRvIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgZWFj
aCBvZiB0aGVzZSBjb3JyZXNwb25kaW5nCi0gICAgLy8gY29tcG9uZW50cy4gVGhlIGNvZGUgYmVs
b3cgd29yZHMgZnJvbSB0aGUgZW5kIGJhY2sgdG8gdGhlIGJlZ2lubmluZywKLSAgICAvLyBhbmQg
d2lsbCB1cGRhdGUgdGhlc2UgaW5kaWNlcyBhcyBpdCBmaW5kcyBjb21wb25lbnRzIHRoYXQgZXhp
c3QuCi0gICAgaW50IHJlc291cmNlUGF0aEVuZCA9IC0xOwotICAgIGludCBxdWVyeUVuZCA9IC0x
OwotCi0gICAgLy8gUmVmIGZyYWdtZW50OiBmcm9tIHRoZSAjIHRvIHRoZSBlbmQgb2YgdGhlIHBh
dGguCi0gICAgaWYgKGZyYWdtZW50U2VwYXJhdG9yID49IDApIHsKLSAgICAgICAgcmVzb3VyY2VQ
YXRoRW5kID0gcXVlcnlFbmQgPSBmcmFnbWVudFNlcGFyYXRvcjsKLSAgICAgICAgZnJhZ21lbnQg
PSBVUkxDb21wb25lbnQ6OmZyb21SYW5nZShmcmFnbWVudFNlcGFyYXRvciArIDEsIHBhdGhFbmQp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc291cmNlUGF0aEVuZCA9IHF1ZXJ5RW5kID0gcGF0
aEVuZDsKLSAgICAgICAgZnJhZ21lbnQgPSBVUkxDb21wb25lbnQoKTsKLSAgICB9Ci0KLSAgICAv
LyBRdWVyeSBmcmFnbWVudDogZXZlcnl0aGluZyBmcm9tIHRoZSA/IHRvIHRoZSBuZXh0IGJvdW5k
YXJ5IChlaXRoZXIgdGhlIGVuZAotICAgIC8vIG9mIHRoZSBwYXRoIG9yIHRoZSByZWYgZnJhZ21l
bnQpLgotICAgIGlmIChxdWVyeVNlcGFyYXRvciA+PSAwKSB7Ci0gICAgICAgIHJlc291cmNlUGF0
aEVuZCA9IHF1ZXJ5U2VwYXJhdG9yOwotICAgICAgICBxdWVyeSA9IFVSTENvbXBvbmVudDo6ZnJv
bVJhbmdlKHF1ZXJ5U2VwYXJhdG9yICsgMSwgcXVlcnlFbmQpOwotICAgIH0gZWxzZQotICAgICAg
ICBxdWVyeSA9IFVSTENvbXBvbmVudCgpOwotCi0gICAgLy8gRmlsZSBwYXRoOiB0cmVhdCBhbiBl
bXB0eSBmaWxlIHBhdGggYXMgbm8gZmlsZSBwYXRoLgotICAgIGlmIChyZXNvdXJjZVBhdGhFbmQg
IT0gaGllcmFyY2hpY2FsaWRlbnRpZmllcnMuYmVnaW4oKSkKLSAgICAgICAgcmVzb3VyY2VQYXRo
ID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoaGllcmFyY2hpY2FsaWRlbnRpZmllcnMuYmVnaW4o
KSwgcmVzb3VyY2VQYXRoRW5kKTsKLSAgICBlbHNlCi0gICAgICAgIHJlc291cmNlUGF0aCA9IFVS
TENvbXBvbmVudCgpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9v
bCBkb0V4dHJhY3RTY2hlbWUoY29uc3QgQ2hhcmFjdGVyVHlwZSogdXJsLCBpbnQgdXJsTGVuZ3Ro
LCBVUkxDb21wb25lbnQmIHNjaGVtZSkKLXsKLSAgICAvLyBTa2lwIGxlYWRpbmcgd2hpdGVzcGFj
ZSBhbmQgY29udHJvbCBjaGFyYWN0ZXJzLgotICAgIGludCBiZWdpbiA9IDA7Ci0gICAgd2hpbGUg
KGJlZ2luIDwgdXJsTGVuZ3RoICYmIHNob3VsZFRyaW1Gcm9tVVJMKHVybFtiZWdpbl0pKQotICAg
ICAgICArK2JlZ2luOwotCi0gICAgaWYgKGJlZ2luID09IHVybExlbmd0aCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBJbnB1dCBpcyBlbXB0eSBvciBhbGwgd2hpdGVzcGFjZS4KLQotICAgIC8v
IEZpbmQgdGhlIGZpcnN0IGNvbG9uIGNoYXJhY3Rlci4KLSAgICBmb3IgKGludCBpID0gYmVnaW47
IGkgPCB1cmxMZW5ndGg7ICsraSkgewotICAgICAgICBpZiAodXJsW2ldID09ICc6JykgewotICAg
ICAgICAgICAgc2NoZW1lID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoYmVnaW4sIGkpOwotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNl
OyAvLyBObyBjb2xvbiBmb3VuZDogbm8gc2NoZW1lCi19Ci0KLS8vIEZpbGxzIGluIGFsbCBtZW1i
ZXJzIG9mIHRoZSBQYXJzZWQgc3RydWN0dXJlIGV4Y2VwdCBmb3IgdGhlIHNjaGVtZS4KLS8vCi0v
LyB8c3BlY3wgaXMgdGhlIGZ1bGwgc3BlYyBiZWluZyBwYXJzZWQsIG9mIGxlbmd0aCB8c3BlY0xl
bmd0aHwuCi0vLyB8YWZ0ZXJTY2hlbWV8IGlzIHRoZSBjaGFyYWN0ZXIgaW1tZWRpYXRlbHkgZm9s
bG93aW5nIHRoZSBzY2hlbWUgKGFmdGVyIHRoZQotLy8gICBjb2xvbikgd2hlcmUgd2UnbGwgYmVn
aW4gcGFyc2luZy4KLS8vCi0vLyBDb21wYXRhYmlsaXR5IGRhdGEgcG9pbnRzLiBJIGxpc3QgImhv
c3QiLCAicGF0aCIgZXh0cmFjdGVkOgotLy8gSW5wdXQgICAgICAgICAgICAgICAgSUU2ICAgICAg
ICAgICAgIEZpcmVmb3ggICAgICAgICAgICAgICAgVXMKLS8vIC0tLS0tICAgICAgICAgICAgICAg
IC0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLSAgICAgICAgIC0tLS0tLS0tLS0tLS0tCi0v
LyBodHRwOi8vZm9vLmNvbS8gICAgICAiZm9vLmNvbSIsICIvIiAgImZvby5jb20iLCAiLyIgICAg
ICAgICAiZm9vLmNvbSIsICIvIgotLy8gaHR0cDpmb28uY29tLyAgICAgICAgImZvby5jb20iLCAi
LyIgICJmb28uY29tIiwgIi8iICAgICAgICAgImZvby5jb20iLCAiLyIKLS8vIGh0dHA6L2Zvby5j
b20vICAgICAgIGZhaWwoKikgICAgICAgICAiZm9vLmNvbSIsICIvIiAgICAgICAgICJmb28uY29t
IiwgIi8iCi0vLyBodHRwOlxmb28uY29tLyAgICAgICBmYWlsKCopICAgICAgICAgIlxmb28uY29t
IiwgIi8iKGZhaWwpICAiZm9vLmNvbSIsICIvIgotLy8gaHR0cDovLy8vZm9vLmNvbS8gICAgImZv
by5jb20iLCAiLyIgICJmb28uY29tIiwgIi8iICAgICAgICAgImZvby5jb20iLCAiLyIKLS8vCi0v
LyAoKikgSW50ZXJlc3RpbmdseSwgYWx0aG91Z2ggSUUgZmFpbHMgdG8gbG9hZCB0aGVzZSBVUkxz
LCBpdHMgaGlzdG9yeQotLy8gY2Fub25pY2FsaXplciBoYW5kbGVzIHRoZW0sIG1lYW5pbmcgaWYg
eW91J3ZlIGJlZW4gdG8gdGhlIGNvcnJlc3BvbmRpbmcKLS8vICJodHRwOi8vZm9vLmNvbS8iIGxp
bmssIGl0IHdpbGwgYmUgY29sb3JlZC4KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBl
Pgotdm9pZCBkb1BhcnNlQWZ0ZXJTY2hlbWUoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgaW50
IHNwZWNMZW5ndGgsIGludCBhZnRlclNjaGVtZSwgVVJMU2VnbWVudHMmIHBhcnNlZCkKLXsKLSAg
ICBpbnQgc2xhc2hlc0NvdW50ID0gY291bnRDb25zZWN1dGl2ZVNsYXNoZXMoc3BlYywgYWZ0ZXJT
Y2hlbWUsIHNwZWNMZW5ndGgpOwotICAgIGludCBhZnRlclNsYXNoZXMgPSBhZnRlclNjaGVtZSAr
IHNsYXNoZXNDb3VudDsKLQotICAgIC8vIEZpcnN0IHNwbGl0IGludG8gdHdvIG1haW4gcGFydHMs
IHRoZSBhdXRob3JpdHkgKHVzZXJuYW1lLCBwYXNzd29yZCwgaG9zdCwKLSAgICAvLyBhbmQgcG9y
dCkgYW5kIHRoZSBmdWxsIHBhdGggKHBhdGgsIHF1ZXJ5LCBhbmQgcmVmZXJlbmNlKS4KLSAgICBV
UkxDb21wb25lbnQgYXV0aG9yaXR5OwotICAgIFVSTENvbXBvbmVudCBmdWxsUGF0aDsKLQotICAg
IC8vIEZvdW5kICIvLzxzb21lIGRhdGE+IiwgbG9va3MgbGlrZSBhbiBhdXRob3JpdHkgc2VjdGlv
bi4gVHJlYXQgZXZlcnl0aGluZwotICAgIC8vIGZyb20gdGhlcmUgdG8gdGhlIG5leHQgc2xhc2gg
KG9yIGVuZCBvZiBzcGVjKSB0byBiZSB0aGUgYXV0aG9yaXR5LiBOb3RlCi0gICAgLy8gdGhhdCB3
ZSBpZ25vcmUgdGhlIG51bWJlciBvZiBzbGFzaGVzIGFuZCB0cmVhdCBpdCBhcyB0aGUgYXV0aG9y
aXR5LgotICAgIGludCBlbmRBdXRoID0gZmluZE5leHRBdXRob3JpdHlUZXJtaW5hdG9yKHNwZWMs
IGFmdGVyU2xhc2hlcywgc3BlY0xlbmd0aCk7Ci0gICAgYXV0aG9yaXR5ID0gVVJMQ29tcG9uZW50
Ojpmcm9tUmFuZ2UoYWZ0ZXJTbGFzaGVzLCBlbmRBdXRoKTsKLQotICAgIGlmIChlbmRBdXRoID09
IHNwZWNMZW5ndGgpIC8vIE5vIGJlZ2lubmluZyBvZiBwYXRoIGZvdW5kLgotICAgICAgICBmdWxs
UGF0aCA9IFVSTENvbXBvbmVudCgpOwotICAgIGVsc2UgLy8gRXZlcnl0aGluZyBzdGFydGluZyBm
cm9tIHRoZSBzbGFzaCB0byB0aGUgZW5kIGlzIHRoZSBwYXRoLgotICAgICAgICBmdWxsUGF0aCA9
IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKGVuZEF1dGgsIHNwZWNMZW5ndGgpOwotCi0gICAgLy8g
Tm93IHBhcnNlIHRob3NlIHR3byBzdWItcGFydHMuCi0gICAgZG9QYXJzZUF1dGhvcml0eShzcGVj
LCBhdXRob3JpdHksIHBhcnNlZC51c2VybmFtZSwgcGFyc2VkLnBhc3N3b3JkLCBwYXJzZWQuaG9z
dCwgcGFyc2VkLnBvcnQpOwotICAgIHBhcnNlUGF0aChzcGVjLCBmdWxsUGF0aCwgcGFyc2VkLnBh
dGgsIHBhcnNlZC5xdWVyeSwgcGFyc2VkLmZyYWdtZW50KTsKLX0KLQotLy8gVGhlIG1haW4gcGFy
c2luZyBmdW5jdGlvbiBmb3Igc3RhbmRhcmQgVVJMcy4gU3RhbmRhcmQgVVJMcyBoYXZlIGEgc2No
ZW1lLAotLy8gaG9zdCwgcGF0aCwgZXRjLgotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4KLXZvaWQgZG9QYXJzZVN0YW5kYXJkVVJMKGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGlu
dCBzcGVjTGVuZ3RoLCBVUkxTZWdtZW50cyYgcGFyc2VkKQotewotICAgIEFTU0VSVChzcGVjTGVu
Z3RoID49IDApOwotCi0gICAgLy8gU3RyaXAgbGVhZGluZyAmIHRyYWlsaW5nIHNwYWNlcyBhbmQg
Y29udHJvbCBjaGFyYWN0ZXJzLgotICAgIGludCBiZWdpbiA9IDA7Ci0gICAgdHJpbVVSTChzcGVj
LCBiZWdpbiwgc3BlY0xlbmd0aCk7Ci0KLSAgICBpbnQgYWZ0ZXJTY2hlbWUgPSAtMTsKLSAgICBp
ZiAoZG9FeHRyYWN0U2NoZW1lKHNwZWMsIHNwZWNMZW5ndGgsIHBhcnNlZC5zY2hlbWUpKQotICAg
ICAgICBhZnRlclNjaGVtZSA9IHBhcnNlZC5zY2hlbWUuZW5kKCkgKyAxOyAvLyBTa2lwIHBhc3Qg
dGhlIGNvbG9uLgotICAgIGVsc2UgewotICAgICAgICAvLyBTYXkgdGhlcmUncyBubyBzY2hlbWUg
d2hlbiB0aGVyZSBpcyBubyBjb2xvbi4gV2UgY291bGQgYWxzbyBzYXkgdGhhdAotICAgICAgICAv
LyBldmVyeXRoaW5nIGlzIHRoZSBzY2hlbWUuIEJvdGggd291bGQgcHJvZHVjZSBhbiBpbnZhbGlk
IFVSTCwgYnV0IHRoaXMgd2F5Ci0gICAgICAgIC8vIHNlZW1zIGxlc3Mgd3JvbmcgaW4gbW9yZSBj
YXNlcy4KLSAgICAgICAgcGFyc2VkLnNjaGVtZS5yZXNldCgpOwotICAgICAgICBhZnRlclNjaGVt
ZSA9IGJlZ2luOwotICAgIH0KLSAgICBkb1BhcnNlQWZ0ZXJTY2hlbWUoc3BlYywgc3BlY0xlbmd0
aCwgYWZ0ZXJTY2hlbWUsIHBhcnNlZCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+Ci12b2lkIGRvUGFyc2VGaWxlU3lzdGVtVVJMKGNvbnN0IENoYXJhY3RlclR5cGUqIHNw
ZWMsIGludCBzcGVjTGVuZ3RoLCBVUkxTZWdtZW50cyYgcGFyc2VkKQotewotICAgIEFTU0VSVChz
cGVjTGVuZ3RoID49IDApOwotCi0gICAgLy8gR2V0IHRoZSB1bnVzZWQgcGFydHMgb2YgdGhlIFVS
TCBvdXQgb2YgdGhlIHdheS4KLSAgICBwYXJzZWQudXNlcm5hbWUucmVzZXQoKTsKLSAgICBwYXJz
ZWQucGFzc3dvcmQucmVzZXQoKTsKLSAgICBwYXJzZWQuaG9zdC5yZXNldCgpOwotICAgIHBhcnNl
ZC5wb3J0LnJlc2V0KCk7Ci0gICAgcGFyc2VkLnBhdGgucmVzZXQoKTsgLy8gTWF5IHVzZSB0aGlz
OyByZXNldCBmb3IgY29udmVuaWVuY2UuCi0gICAgcGFyc2VkLmZyYWdtZW50LnJlc2V0KCk7IC8v
IE1heSB1c2UgdGhpczsgcmVzZXQgZm9yIGNvbnZlbmllbmNlLgotICAgIHBhcnNlZC5xdWVyeS5y
ZXNldCgpOyAvLyBNYXkgdXNlIHRoaXM7IHJlc2V0IGZvciBjb252ZW5pZW5jZS4KLSAgICBwYXJz
ZWQuY2xlYXJJbm5lclVSTFNlZ21lbnRzKCk7IC8vIE1heSB1c2UgdGhpczsgcmVzZXQgZm9yIGNv
bnZlbmllbmNlLgotCi0gICAgLy8gU3RyaXAgbGVhZGluZyAmIHRyYWlsaW5nIHNwYWNlcyBhbmQg
Y29udHJvbCBjaGFyYWN0ZXJzLgotICAgIGludCBiZWdpbiA9IDA7Ci0gICAgdHJpbVVSTChzcGVj
LCBiZWdpbiwgc3BlY0xlbmd0aCk7Ci0KLSAgICAvLyBIYW5kbGUgZW1wdHkgc3BlY3Mgb3Igb25l
cyB0aGF0IGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlIG9yIGNvbnRyb2wgY2hhcnMuCi0gICAgaWYg
KGJlZ2luID09IHNwZWNMZW5ndGgpIHsKLSAgICAgICAgcGFyc2VkLnNjaGVtZS5yZXNldCgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW50IGlubmVyU3RhcnQgPSAtMTsKLQotICAg
IC8vIEV4dHJhY3QgdGhlIHNjaGVtZS4gV2UgYWxzbyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhl
cmUgaXMgbm8gc2NoZW1lLgotICAgIGlmIChkb0V4dHJhY3RTY2hlbWUoJnNwZWNbYmVnaW5dLCBz
cGVjTGVuZ3RoIC0gYmVnaW4sIHBhcnNlZC5zY2hlbWUpKSB7Ci0gICAgICAgIC8vIE9mZnNldCB0
aGUgcmVzdWx0cyBzaW5jZSB3ZSBnYXZlIEV4dHJhY3RTY2hlbWUgYSBzdWJzdHJpbmcuCi0gICAg
ICAgIHBhcnNlZC5zY2hlbWUubW92ZUJ5KGJlZ2luKTsKLQotICAgICAgICBpZiAocGFyc2VkLnNj
aGVtZS5lbmQoKSA9PSBzcGVjTGVuZ3RoIC0gMSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBpbm5lclN0YXJ0ID0gcGFyc2VkLnNjaGVtZS5lbmQoKSArIDE7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgLy8gTm8gc2NoZW1lIGZvdW5kOyB0aGF0J3Mgbm90IHZhbGlkIGZvciBmaWxlc3lz
dGVtIFVSTHMuCi0gICAgICAgIHBhcnNlZC5zY2hlbWUucmVzZXQoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIFVSTENvbXBvbmVudCBpbm5lclNjaGVtZTsKLSAgICBjb25zdCBDaGFy
YWN0ZXJUeXBlKiBpbm5lclNwZWMgPSAmc3BlY1tpbm5lclN0YXJ0XTsKLSAgICBpbnQgaW5uZXJT
cGVjTGVuZ3RoID0gc3BlY0xlbmd0aCAtIGlubmVyU3RhcnQ7Ci0KLSAgICBpZiAoZG9FeHRyYWN0
U2NoZW1lKGlubmVyU3BlYywgaW5uZXJTcGVjTGVuZ3RoLCBpbm5lclNjaGVtZSkpIHsKLSAgICAg
ICAgLy8gT2Zmc2V0IHRoZSByZXN1bHRzIHNpbmNlIHdlIGdhdmUgRXh0cmFjdFNjaGVtZSBhIHN1
YnN0cmluZy4KLSAgICAgICAgaW5uZXJTY2hlbWUubW92ZUJ5KGlubmVyU3RhcnQpOwotCi0gICAg
ICAgIGlmIChpbm5lclNjaGVtZS5lbmQoKSA9PSBzcGVjTGVuZ3RoIC0gMSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBObyBzY2hlbWUgZm91bmQ7IHRoYXQn
cyBub3QgdmFsaWQgZm9yIGZpbGVzeXN0ZW0gVVJMcy4KLSAgICAgICAgLy8gVGhlIGJlc3Qgd2Ug
Y2FuIGRvIGlzIHJldHVybiAiZmlsZXN5c3RlbTovLyIuCi0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBVUkxTZWdtZW50cyBpbm5lclBhcnNlZDsKLSAgICBpZiAoVVJMVXRpbGl0aWVzOjpD
b21wYXJlU2NoZW1lQ29tcG9uZW50KHNwZWMsIGlubmVyU2NoZW1lLCBVUkxVdGlsaXRpZXM6OmtG
aWxlU2NoZW1lKSkgewotICAgICAgICAvLyBGaWxlIFVSTHMgYXJlIHNwZWNpYWwuCi0gICAgICAg
IFBhcnNlRmlsZVVSTChpbm5lclNwZWMsIGlubmVyU3BlY0xlbmd0aCwgJmlubmVyUGFyc2VkKTsK
LSAgICB9IGVsc2UgaWYgKFVSTFV0aWxpdGllczo6Q29tcGFyZVNjaGVtZUNvbXBvbmVudChzcGVj
LCBpbm5lclNjaGVtZSwgVVJMVXRpbGl0aWVzOjprRmlsZVN5c3RlbVNjaGVtZSkpIHsKLSAgICAg
ICAgLy8gRmlsZXN5c3RlbSBVUkxzIGRvbid0IG5lc3QuCi0gICAgICAgIHJldHVybjsKLSAgICB9
IGVsc2UgaWYgKFVSTFV0aWxpdGllczo6aXNTdGFuZGFyZChzcGVjLCBpbm5lclNjaGVtZSkpIHsK
LSAgICAgICAgLy8gQWxsICJub3JtYWwiIFVSTHMuCi0gICAgICAgIGRvUGFyc2VTdGFuZGFyZFVS
TChpbm5lclNwZWMsIGlubmVyU3BlY0xlbmd0aCwgaW5uZXJQYXJzZWQpOwotICAgIH0gZWxzZQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBBbGwgbWVtYmVycyBvZiBpbm5lclBhcnNlZCBuZWVk
IHRvIGJlIG9mZnNldCBieSBpbm5lclN0YXJ0LgotICAgIC8vIElmIHdlIGhhZCBhbnkgc2NoZW1l
IHRoYXQgc3VwcG9ydGVkIG5lc3RpbmcgbW9yZSB0aGFuIG9uZSBsZXZlbCBkZWVwLAotICAgIC8v
IHdlJ2QgaGF2ZSB0byByZWN1cnNlIGludG8gdGhlIGlubmVyUGFyc2VkJ3MgaW5uZXJQYXJzZWQg
d2hlbgotICAgIC8vIGFkanVzdGluZyBieSBpbm5lclN0YXJ0LgotICAgIGlubmVyUGFyc2VkLm1v
dmVGcm9tQ29tcG9uZW50QnkoVVJMU2VnbWVudHM6OlNjaGVtZSwgaW5uZXJTdGFydCk7Ci0KLSAg
ICAvLyBRdWVyeSBhbmQgcmVmIG1vdmUgZnJvbSBpbm5lclBhcnNlZCB0byBwYXJzZWQuCi0gICAg
cGFyc2VkLnF1ZXJ5ID0gaW5uZXJQYXJzZWQucXVlcnk7Ci0gICAgaW5uZXJQYXJzZWQucXVlcnku
cmVzZXQoKTsKLSAgICBwYXJzZWQuZnJhZ21lbnQgPSBpbm5lclBhcnNlZC5mcmFnbWVudDsKLSAg
ICBpbm5lclBhcnNlZC5mcmFnbWVudC5yZXNldCgpOwotCi0gICAgcGFyc2VkLnNldElubmVyVVJM
U2VnbWVudHMoaW5uZXJQYXJzZWQpOwotICAgIGlmICghaW5uZXJQYXJzZWQuc2NoZW1lLmlzVmFs
aWQoKSB8fCAhaW5uZXJQYXJzZWQucGF0aC5pc1ZhbGlkKCkgfHwgaW5uZXJQYXJzZWQuaW5uZXJV
UkxTZWdtZW50cygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGUgcGF0aCBpbiBpbm5l
clBhcnNlZCBzaG91bGQgc3RhcnQgd2l0aCBhIHNsYXNoLCB0aGVuIGhhdmUgYSBmaWxlc3lzdGVt
Ci0gICAgLy8gdHlwZSBmb2xsb3dlZCBieSBhIHNsYXNoLiBGcm9tIHRoZSBmaXJzdCBzbGFzaCB1
cCB0byBidXQgZXhjbHVkaW5nIHRoZQotICAgIC8vIHNlY29uZCBzaG91bGQgYmUgd2hhdCBpdCBr
ZWVwczsgdGhlIHJlc3QgZ29lcyB0byBwYXJzZWQuIElmIHRoZSBwYXRoIGVuZHMKLSAgICAvLyBi
ZWZvcmUgdGhlIHNlY29uZCBzbGFzaCwgaXQncyBzdGlsbCBwcmV0dHkgY2xlYXIgd2hhdCB0aGUg
dXNlciBtZWFudCwgc28KLSAgICAvLyB3ZSdsbCBsZXQgdGhhdCB0aHJvdWdoLgotICAgIGlmICgh
aXNVUkxTbGFzaChzcGVjW2lubmVyUGFyc2VkLnBhdGguYmVnaW4oKV0pKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpbnQgaW5uZXJQYXRoRW5kID0gaW5uZXJQYXJzZWQucGF0aC5iZWdpbigpICsg
MTsgLy8gc2tpcCB0aGUgbGVhZGluZyBzbGFzaAotICAgIHdoaWxlIChpbm5lclBhdGhFbmQgPCBz
cGVjTGVuZ3RoICYmICFpc1VSTFNsYXNoKHNwZWNbaW5uZXJQYXRoRW5kXSkpCi0gICAgICAgICsr
aW5uZXJQYXRoRW5kOwotICAgIHBhcnNlZC5wYXRoLnNldEJlZ2luKGlubmVyUGF0aEVuZCk7Ci0g
ICAgaW50IG5ld0lubmVyUGF0aExlbmd0aCA9IGlubmVyUGF0aEVuZCAtIGlubmVyUGFyc2VkLnBh
dGguYmVnaW4oKTsKLSAgICBwYXJzZWQucGF0aC5zZXRMZW5ndGgoaW5uZXJQYXJzZWQucGF0aC5s
ZW5ndGgoKSAtIG5ld0lubmVyUGF0aExlbmd0aCk7Ci0gICAgaW5uZXJQYXJzZWQucGF0aC5zZXRM
ZW5ndGgobmV3SW5uZXJQYXRoTGVuZ3RoKTsKLSAgICBwYXJzZWQuc2V0SW5uZXJVUkxTZWdtZW50
cyhpbm5lclBhcnNlZCk7Ci19Ci0KLS8vIEluaXRpYWxpemVzIGEgcGF0aCBVUkwgd2hpY2ggaXMg
bWVyZWx5IGEgc2NoZW1lIGZvbGxvd2VkIGJ5IGEgcGF0aC4gRXhhbXBsZXMKLS8vIGluY2x1ZGUg
ImFib3V0OmZvbyIgYW5kICJqYXZhc2NyaXB0OmFsZXJ0KCdiYXInKTsiCi10ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgotdm9pZCBkb1BhcnNlUGF0aFVSTChjb25zdCBDaGFyYWN0ZXJU
eXBlKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwgVVJMU2VnbWVudHMmIHBhcnNlZCkKLXsKLSAgICAv
LyBHZXQgdGhlIG5vbi1wYXRoIGFuZCBub24tc2NoZW1lIHBhcnRzIG9mIHRoZSBVUkwgb3V0IG9m
IHRoZSB3YXksIHdlIG5ldmVyCi0gICAgLy8gdXNlIHRoZW0uCi0gICAgcGFyc2VkLnVzZXJuYW1l
LnJlc2V0KCk7Ci0gICAgcGFyc2VkLnBhc3N3b3JkLnJlc2V0KCk7Ci0gICAgcGFyc2VkLmhvc3Qu
cmVzZXQoKTsKLSAgICBwYXJzZWQucG9ydC5yZXNldCgpOwotICAgIHBhcnNlZC5xdWVyeS5yZXNl
dCgpOwotICAgIHBhcnNlZC5mcmFnbWVudC5yZXNldCgpOwotCi0gICAgLy8gU3RyaXAgbGVhZGlu
ZyAmIHRyYWlsaW5nIHNwYWNlcyBhbmQgY29udHJvbCBjaGFyYWN0ZXJzLgotICAgIGludCBiZWdp
biA9IDA7Ci0gICAgdHJpbVVSTChzcGVjLCBiZWdpbiwgc3BlY0xlbmd0aCk7Ci0KLSAgICAvLyBI
YW5kbGUgZW1wdHkgc3BlY3Mgb3Igb25lcyB0aGF0IGNvbnRhaW4gb25seSB3aGl0ZXNwYWNlIG9y
IGNvbnRyb2wgY2hhcnMuCi0gICAgaWYgKGJlZ2luID09IHNwZWNMZW5ndGgpIHsKLSAgICAgICAg
cGFyc2VkLnNjaGVtZS5yZXNldCgpOwotICAgICAgICBwYXJzZWQucGF0aC5yZXNldCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRXh0cmFjdCB0aGUgc2NoZW1lLCB3aXRoIHRo
ZSBwYXRoIGJlaW5nIGV2ZXJ5dGhpbmcgZm9sbG93aW5nLiBXZSBhbHNvCi0gICAgLy8gaGFuZGxl
IHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzIG5vIHNjaGVtZS4KLSAgICBpZiAoRXh0cmFjdFNjaGVt
ZSgmc3BlY1tiZWdpbl0sIHNwZWNMZW5ndGggLSBiZWdpbiwgJnBhcnNlZC5zY2hlbWUpKSB7Ci0g
ICAgICAgIC8vIE9mZnNldCB0aGUgcmVzdWx0cyBzaW5jZSB3ZSBnYXZlIEV4dHJhY3RTY2hlbWUg
YSBzdWJzdHJpbmcuCi0gICAgICAgIHBhcnNlZC5zY2hlbWUubW92ZUJ5KGJlZ2luKTsKLQotICAg
ICAgICAvLyBGb3IgY29tcGF0YWJpbGl0eSB3aXRoIHRoZSBzdGFuZGFyZCBVUkwgcGFyc2VyLCB3
ZSB0cmVhdCBubyBwYXRoIGFzCi0gICAgICAgIC8vIC0xLCByYXRoZXIgdGhhbiBoYXZpbmcgYSBs
ZW5ndGggb2YgMCAod2Ugbm9ybWFsbHkgd291bGRuJ3QgY2FyZSBzbwotICAgICAgICAvLyBtdWNo
IGZvciB0aGVzZSBub24tc3RhbmRhcmQgVVJMcykuCi0gICAgICAgIGlmIChwYXJzZWQuc2NoZW1l
LmVuZCgpID09IHNwZWNMZW5ndGggLSAxKQotICAgICAgICAgICAgcGFyc2VkLnBhdGgucmVzZXQo
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcGFyc2VkLnBhdGggPSBVUkxDb21wb25lbnQ6
OmZyb21SYW5nZShwYXJzZWQuc2NoZW1lLmVuZCgpICsgMSwgc3BlY0xlbmd0aCk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgLy8gTm8gc2NoZW1lIGZvdW5kLCBqdXN0IHBhdGguCi0gICAgICAgIHBh
cnNlZC5zY2hlbWUucmVzZXQoKTsKLSAgICAgICAgcGFyc2VkLnBhdGggPSBVUkxDb21wb25lbnQ6
OmZyb21SYW5nZShiZWdpbiwgc3BlY0xlbmd0aCk7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgotdm9pZCBkb1BhcnNlTWFpbHRvVVJMKGNvbnN0IENoYXJhY3Rl
clR5cGUqIHNwZWMsIGludCBzcGVjTGVuZ3RoLCBVUkxTZWdtZW50cyYgcGFyc2VkKQotewotICAg
IEFTU0VSVChzcGVjTGVuZ3RoID49IDApOwotCi0gICAgLy8gR2V0IHRoZSBub24tcGF0aCBhbmQg
bm9uLXNjaGVtZSBwYXJ0cyBvZiB0aGUgVVJMIG91dCBvZiB0aGUgd2F5LCB3ZSBuZXZlcgotICAg
IC8vIHVzZSB0aGVtLgotICAgIHBhcnNlZC51c2VybmFtZS5yZXNldCgpOwotICAgIHBhcnNlZC5w
YXNzd29yZC5yZXNldCgpOwotICAgIHBhcnNlZC5ob3N0LnJlc2V0KCk7Ci0gICAgcGFyc2VkLnBv
cnQucmVzZXQoKTsKLSAgICBwYXJzZWQuZnJhZ21lbnQucmVzZXQoKTsKLSAgICBwYXJzZWQucXVl
cnkucmVzZXQoKTsgLy8gTWF5IHVzZSB0aGlzOyByZXNldCBmb3IgY29udmVuaWVuY2UuCi0KLSAg
ICAvLyBTdHJpcCBsZWFkaW5nICYgdHJhaWxpbmcgc3BhY2VzIGFuZCBjb250cm9sIGNoYXJhY3Rl
cnMuCi0gICAgaW50IGJlZ2luID0gMDsKLSAgICB0cmltVVJMKHNwZWMsIGJlZ2luLCBzcGVjTGVu
Z3RoKTsKLQotICAgIC8vIEhhbmRsZSBlbXB0eSBzcGVjcyBvciBvbmVzIHRoYXQgY29udGFpbiBv
bmx5IHdoaXRlc3BhY2Ugb3IgY29udHJvbCBjaGFycy4KLSAgICBpZiAoYmVnaW4gPT0gc3BlY0xl
bmd0aCkgewotICAgICAgICBwYXJzZWQuc2NoZW1lLnJlc2V0KCk7Ci0gICAgICAgIHBhcnNlZC5w
YXRoLnJlc2V0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnQgcGF0aEJlZ2lu
ID0gLTE7Ci0gICAgaW50IHBhdGhFbmQgPSAtMTsKLQotICAgIC8vIEV4dHJhY3QgdGhlIHNjaGVt
ZSwgd2l0aCB0aGUgcGF0aCBiZWluZyBldmVyeXRoaW5nIGZvbGxvd2luZy4gV2UgYWxzbwotICAg
IC8vIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBubyBzY2hlbWUuCi0gICAgaWYgKEV4
dHJhY3RTY2hlbWUoJnNwZWNbYmVnaW5dLCBzcGVjTGVuZ3RoIC0gYmVnaW4sICZwYXJzZWQuc2No
ZW1lKSkgewotICAgICAgICAvLyBPZmZzZXQgdGhlIHJlc3VsdHMgc2luY2Ugd2UgZ2F2ZSBFeHRy
YWN0U2NoZW1lIGEgc3Vic3RyaW5nLgotICAgICAgICBwYXJzZWQuc2NoZW1lLm1vdmVCeShiZWdp
bik7Ci0KLSAgICAgICAgaWYgKHBhcnNlZC5zY2hlbWUuZW5kKCkgIT0gc3BlY0xlbmd0aCAtIDEp
IHsKLSAgICAgICAgICAgIHBhdGhCZWdpbiA9IHBhcnNlZC5zY2hlbWUuZW5kKCkgKyAxOwotICAg
ICAgICAgICAgcGF0aEVuZCA9IHNwZWNMZW5ndGg7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ugewot
ICAgICAgICAvLyBObyBzY2hlbWUgZm91bmQsIGp1c3QgcGF0aC4KLSAgICAgICAgcGFyc2VkLnNj
aGVtZS5yZXNldCgpOwotICAgICAgICBwYXRoQmVnaW4gPSBiZWdpbjsKLSAgICAgICAgcGF0aEVu
ZCA9IHNwZWNMZW5ndGg7Ci0gICAgfQotCi0gICAgLy8gU3BsaXQgW3BhdGhCZWdpbiwgcGF0aEVu
ZCkgaW50byBhIHBhdGggKyBxdWVyeS4KLSAgICBmb3IgKGludCBpID0gcGF0aEJlZ2luOyBpIDwg
cGF0aEVuZDsgKytpKSB7Ci0gICAgICAgIGlmIChzcGVjW2ldID09ICc/JykgewotICAgICAgICAg
ICAgcGFyc2VkLnF1ZXJ5ID0gVVJMQ29tcG9uZW50Ojpmcm9tUmFuZ2UoaSArIDEsIHBhdGhFbmQp
OwotICAgICAgICAgICAgcGF0aEVuZCA9IGk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8vIEZvciBjb21wYXRhYmlsaXR5IHdpdGggdGhlIHN0YW5kYXJkIFVS
TCBwYXJzZXIsIHRyZWF0IG5vIHBhdGggYXMKLSAgICAvLyAtMSwgcmF0aGVyIHRoYW4gaGF2aW5n
IGEgbGVuZ3RoIG9mIDAKLSAgICBpZiAocGF0aEJlZ2luID09IHBhdGhFbmQpCi0gICAgICAgIHBh
cnNlZC5wYXRoLnJlc2V0KCk7Ci0gICAgZWxzZQotICAgICAgICBwYXJzZWQucGF0aCA9IFVSTENv
bXBvbmVudDo6ZnJvbVJhbmdlKHBhdGhCZWdpbiwgcGF0aEVuZCk7Ci19Ci0KLS8vIENvbnZlcnRz
IGEgcG9ydCBudW1iZXIgaW4gYSBzdHJpbmcgdG8gYW4gaW50ZWdlci4gV2UnZCBsaWtlIHRvIGp1
c3QgY2FsbAotLy8gc3NjYW5mIGJ1dCBvdXIgaW5wdXQgaXMgbm90IG51bGwtdGVybWluYXRlZCwg
d2hpY2ggc3NjYW5mIHJlcXVpcmVzLiBJbnN0ZWFkLAotLy8gd2UgY29weSB0aGUgZGlnaXRzIHRv
IGEgc21hbGwgc3RhY2sgYnVmZmVyIChzaW5jZSB3ZSBrbm93IHRoZSBtYXhpbXVtIG51bWJlcgot
Ly8gb2YgZGlnaXRzIGluIGEgdmFsaWQgcG9ydCBudW1iZXIpIHRoYXQgd2UgY2FuIG51bGwgdGVy
bWluYXRlLgotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWludCBkb1BhcnNlUG9y
dChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGNvbXBvbmVu
dCkKLXsKLSAgICAvLyBFYXN5IHN1Y2Nlc3MgY2FzZSB3aGVuIHRoZXJlIGlzIG5vIHBvcnQuCi0g
ICAgY29uc3QgaW50IGtNYXhEaWdpdHMgPSA1OwotICAgIGlmICghY29tcG9uZW50LmlzTm9uRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIFBPUlRfVU5TUEVDSUZJRUQ7Ci0KLSAgICAvLyBTa2lwIG92
ZXIgYW55IGxlYWRpbmcgMHMuCi0gICAgVVJMQ29tcG9uZW50IGRpZ2l0Q29tcG9uZW50KGNvbXBv
bmVudC5lbmQoKSwgMCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb21wb25lbnQubGVuZ3Ro
KCk7IGkrKykgewotICAgICAgICBpZiAoc3BlY1tjb21wb25lbnQuYmVnaW4oKSArIGldICE9ICcw
JykgewotICAgICAgICAgICAgZGlnaXRDb21wb25lbnQgPSBVUkxDb21wb25lbnQ6OmZyb21SYW5n
ZShjb21wb25lbnQuYmVnaW4oKSArIGksIGNvbXBvbmVudC5lbmQoKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIWRpZ2l0Q29tcG9uZW50Lmxlbmd0aCgp
KQotICAgICAgICByZXR1cm4gMDsgLy8gQWxsIGRpZ2l0cyB3ZXJlIDAuCi0KLSAgICAvLyBWZXJp
Znkgd2UgZG9uJ3QgaGF2ZSB0b28gbWFueSBkaWdpdHMgKHdlJ2xsIGJlIGNvcHlpbmcgdG8gb3Vy
IGJ1ZmZlciBzbwotICAgIC8vIHdlIG5lZWQgdG8gZG91YmxlLWNoZWNrKS4KLSAgICBpZiAoZGln
aXRDb21wb25lbnQubGVuZ3RoKCkgPiBrTWF4RGlnaXRzKQotICAgICAgICByZXR1cm4gUE9SVF9J
TlZBTElEOwotCi0gICAgLy8gQ29weSB2YWxpZCBkaWdpdHMgdG8gdGhlIGJ1ZmZlci4KLSAgICBj
aGFyIGRpZ2l0c1trTWF4RGlnaXRzICsgMV07IC8vICsxIGZvciBudWxsIHRlcm1pbmF0b3IKLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGRpZ2l0Q29tcG9uZW50Lmxlbmd0aCgpOyBpKyspIHsKLSAg
ICAgICAgQ2hhcmFjdGVyVHlwZSBjaCA9IHNwZWNbZGlnaXRDb21wb25lbnQuYmVnaW4oKSArIGld
OwotICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdChjaCkpIHsKLSAgICAgICAgICAgIC8vIEludmFs
aWQgcG9ydCBkaWdpdCwgZmFpbC4KLSAgICAgICAgICAgIHJldHVybiBQT1JUX0lOVkFMSUQ7Ci0g
ICAgICAgIH0KLSAgICAgICAgZGlnaXRzW2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4oY2gpOwotICAg
IH0KLQotICAgIC8vIE51bGwtdGVybWluYXRlIHRoZSBzdHJpbmcgYW5kIGNvbnZlcnQgdG8gaW50
ZWdlci4gU2luY2Ugd2UgZ3VhcmFudGVlCi0gICAgLy8gb25seSBkaWdpdHMsIGF0b2kncyBsYWNr
IG9mIGVycm9yIGhhbmRsaW5nIGlzIE9LLgotICAgIGRpZ2l0c1tkaWdpdENvbXBvbmVudC5sZW5n
dGgoKV0gPSAwOwotICAgIGludCBwb3J0ID0gYXRvaShkaWdpdHMpOwotICAgIGlmIChwb3J0ID4g
NjU1MzUpCi0gICAgICAgIHJldHVybiBQT1JUX0lOVkFMSUQ7IC8vIE91dCBvZiByYW5nZS4KLSAg
ICByZXR1cm4gcG9ydDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXZv
aWQgZG9FeHRyYWN0RmlsZU5hbWUoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgY29uc3QgVVJM
Q29tcG9uZW50JiBwYXRoLCBVUkxDb21wb25lbnQmIGZpbGVOYW1lKQotewotICAgIC8vIEhhbmRs
ZSBlbXB0eSBwYXRoczogdGhleSBoYXZlIG5vIGZpbGUgbmFtZXMuCi0gICAgaWYgKCFwYXRoLmlz
Tm9uRW1wdHkoKSkgewotICAgICAgICBmaWxlTmFtZSA9IFVSTENvbXBvbmVudCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gU2VhcmNoIGJhY2t3YXJkcyBmb3IgYSBwYXJhbWV0
ZXIsIHdoaWNoIGlzIGEgbm9ybWFsbHkgdW51c2VkIGZpZWxkIGluIGEKLSAgICAvLyBVUkwgZGVs
aW1pdGVkIGJ5IGEgc2VtaWNvbG9uLiBXZSBwYXJzZSB0aGUgcGFyYW1ldGVyIGFzIHBhcnQgb2Yg
dGhlCi0gICAgLy8gcGF0aCwgYnV0IGhlcmUsIHdlIGRvbid0IHdhbnQgdG8gY291bnQgaXQuIFRo
ZSBsYXN0IHNlbWljb2xvbiBpcyB0aGUKLSAgICAvLyBwYXJhbWV0ZXIuIFRoZSBwYXRoIHNob3Vs
ZCBzdGFydCB3aXRoIGEgc2xhc2gsIHNvIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sKLSAgICAvLyB0
aGUgZmlyc3Qgb25lLgotICAgIGludCBmaWxlRW5kID0gcGF0aC5lbmQoKTsKLSAgICBmb3IgKGlu
dCBpID0gcGF0aC5lbmQoKSAtIDE7IGkgPiBwYXRoLmJlZ2luKCk7IC0taSkgewotICAgICAgICBp
ZiAoc3BlY1tpXSA9PSAnOycpIHsKLSAgICAgICAgICAgIGZpbGVFbmQgPSBpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBOb3cgc2VhcmNoIGJhY2t3YXJk
cyBmcm9tIHRoZSBmaWxlbmFtZSBlbmQgdG8gdGhlIHByZXZpb3VzIHNsYXNoCi0gICAgLy8gdG8g
ZmluZCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlbmFtZS4KLSAgICBmb3IgKGludCBpID0gZmls
ZUVuZCAtIDE7IGkgPj0gcGF0aC5iZWdpbigpOyAtLWkpIHsKLSAgICAgICAgaWYgKGlzVVJMU2xh
c2goc3BlY1tpXSkpIHsKLSAgICAgICAgICAgIC8vIEZpbGUgbmFtZSBpcyBldmVyeXRoaW5nIGZv
bGxvd2luZyB0aGlzIGNoYXJhY3RlciB0byB0aGUgZW5kCi0gICAgICAgICAgICBmaWxlTmFtZSA9
IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKGkgKyAxLCBmaWxlRW5kKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE5vIHNsYXNoIGZvdW5kLCB0aGlzIG1l
YW5zIHRoZSBpbnB1dCB3YXMgZGVnZW5lcmF0ZSAoZ2VuZXJhbGx5IHBhdGhzCi0gICAgLy8gd2ls
bCBzdGFydCB3aXRoIGEgc2xhc2gpLiBMZXQncyBjYWxsIGV2ZXJ5dGhpbmcgdGhlIGZpbGUgbmFt
ZS4KLSAgICBmaWxlTmFtZSA9IFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKHBhdGguYmVnaW4oKSwg
ZmlsZUVuZCk7Ci0gICAgcmV0dXJuOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJU
eXBlPgotYm9vbCBkb0V4dHJhY3RRdWVyeUtleVZhbHVlKGNvbnN0IENoYXJhY3RlclR5cGUqIHNw
ZWMsIFVSTENvbXBvbmVudCYgcXVlcnksIFVSTENvbXBvbmVudCYga2V5LCBVUkxDb21wb25lbnQm
IHZhbHVlKQotewotICAgIGlmICghcXVlcnkuaXNOb25FbXB0eSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpbnQgc3RhcnQgPSBxdWVyeS5iZWdpbigpOwotICAgIGludCBjdXJyZW50
ID0gc3RhcnQ7Ci0gICAgaW50IGVuZCA9IHF1ZXJ5LmVuZCgpOwotCi0gICAgLy8gV2UgYXNzdW1l
IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGlucHV0IGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlICJrZXki
IGFuZCB3ZQotICAgIC8vIHNraXAgdG8gdGhlIGVuZCBvZiBpdC4KLSAgICBrZXkuc2V0QmVnaW4o
Y3VycmVudCk7Ci0gICAgd2hpbGUgKGN1cnJlbnQgPCBlbmQgJiYgc3BlY1tjdXJyZW50XSAhPSAn
JicgJiYgc3BlY1tjdXJyZW50XSAhPSAnPScpCi0gICAgICAgICsrY3VycmVudDsKLSAgICBrZXku
c2V0TGVuZ3RoKGN1cnJlbnQgLSBrZXkuYmVnaW4oKSk7Ci0KLSAgICAvLyBTa2lwIHRoZSBzZXBh
cmF0b3IgYWZ0ZXIgdGhlIGtleSAoaWYgYW55KS4KLSAgICBpZiAoY3VycmVudCA8IGVuZCAmJiBz
cGVjW2N1cnJlbnRdID09ICc9JykKLSAgICAgICAgKytjdXJyZW50OwotCi0gICAgLy8gRmluZCB0
aGUgdmFsdWUgcGFydC4KLSAgICB2YWx1ZS5zZXRCZWdpbihjdXJyZW50KTsKLSAgICB3aGlsZSAo
Y3VycmVudCA8IGVuZCAmJiBzcGVjW2N1cnJlbnRdICE9ICcmJykKLSAgICAgICAgKytjdXJyZW50
OwotICAgIHZhbHVlLnNldExlbmd0aChjdXJyZW50IC0gdmFsdWUuYmVnaW4oKSk7Ci0KLSAgICAv
LyBGaW5hbGx5IHNraXAgdGhlIG5leHQgc2VwYXJhdG9yIGlmIGFueQotICAgIGlmIChjdXJyZW50
IDwgZW5kICYmIHNwZWNbY3VycmVudF0gPT0gJyYnKQotICAgICAgICArK2N1cnJlbnQ7Ci0KLSAg
ICAvLyBTYXZlIHRoZSBuZXcgcXVlcnkKLSAgICBxdWVyeSA9IFVSTENvbXBvbmVudDo6ZnJvbVJh
bmdlKGN1cnJlbnQsIGVuZCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
Ci0KLWJvb2wgRXh0cmFjdFNjaGVtZShjb25zdCBjaGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVS
TENvbXBvbmVudCogc2NoZW1lKQotewotICAgIHJldHVybiBkb0V4dHJhY3RTY2hlbWUodXJsLCB1
cmxMZW5ndGgsICpzY2hlbWUpOwotfQotCi1ib29sIEV4dHJhY3RTY2hlbWUoY29uc3QgVUNoYXIq
IHVybCwgaW50IHVybExlbmd0aCwgVVJMQ29tcG9uZW50KiBzY2hlbWUpCi17Ci0gICAgcmV0dXJu
IGRvRXh0cmFjdFNjaGVtZSh1cmwsIHVybExlbmd0aCwgKnNjaGVtZSk7Ci19Ci0KLS8vIFRoaXMg
aGFuZGxlcyBldmVyeXRoaW5nIHRoYXQgbWF5IGJlIGFuIGF1dGhvcml0eSB0ZXJtaW5hdG9yLCBp
bmNsdWRpbmcKLS8vIGJhY2tzbGFzaC4gRm9yIHNwZWNpYWwgYmFja3NsYXNoIGhhbmRsaW5nIHNl
ZSBEb1BhcnNlQWZ0ZXJTY2hlbWUuCi1ib29sIElzQXV0aG9yaXR5VGVybWluYXRvcihVQ2hhciBj
aGFyYWN0ZXIpCi17Ci0gICAgcmV0dXJuIGlzVVJMU2xhc2goY2hhcmFjdGVyKSB8fCBjaGFyYWN0
ZXIgPT0gJz8nIHx8IGNoYXJhY3RlciA9PSAnIyc7Ci19Ci0KLXZvaWQgRXh0cmFjdEZpbGVOYW1l
KGNvbnN0IGNoYXIqIHVybCwgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLCBVUkxDb21wb25lbnQq
IGZpbGVOYW1lKQotewotICAgIGRvRXh0cmFjdEZpbGVOYW1lKHVybCwgcGF0aCwgKmZpbGVOYW1l
KTsKLX0KLQotdm9pZCBFeHRyYWN0RmlsZU5hbWUoY29uc3QgVUNoYXIqIHVybCwgY29uc3QgVVJM
Q29tcG9uZW50JiBwYXRoLCBVUkxDb21wb25lbnQqIGZpbGVOYW1lKQotewotICAgIGRvRXh0cmFj
dEZpbGVOYW1lKHVybCwgcGF0aCwgKmZpbGVOYW1lKTsKLX0KLQotYm9vbCBFeHRyYWN0UXVlcnlL
ZXlWYWx1ZShjb25zdCBjaGFyKiB1cmwsIFVSTENvbXBvbmVudCogcXVlcnksIFVSTENvbXBvbmVu
dCoga2V5LCBVUkxDb21wb25lbnQqIHZhbHVlKQotewotICAgIHJldHVybiBkb0V4dHJhY3RRdWVy
eUtleVZhbHVlKHVybCwgKnF1ZXJ5LCAqa2V5LCAqdmFsdWUpOwotfQotCi1ib29sIEV4dHJhY3RR
dWVyeUtleVZhbHVlKGNvbnN0IFVDaGFyKiB1cmwsIFVSTENvbXBvbmVudCogcXVlcnksIFVSTENv
bXBvbmVudCoga2V5LCAgVVJMQ29tcG9uZW50KiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gZG9FeHRy
YWN0UXVlcnlLZXlWYWx1ZSh1cmwsICpxdWVyeSwgKmtleSwgKnZhbHVlKTsKLX0KLQotdm9pZCBQ
YXJzZUF1dGhvcml0eShjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGF1dGgs
IFVSTENvbXBvbmVudCogdXNlcm5hbWUsIFVSTENvbXBvbmVudCogcGFzc3dvcmQsIFVSTENvbXBv
bmVudCogaG9zdG5hbWUsIFVSTENvbXBvbmVudCogcG9ydE51bWJlcikKLXsKLSAgICBkb1BhcnNl
QXV0aG9yaXR5KHNwZWMsIGF1dGgsICp1c2VybmFtZSwgKnBhc3N3b3JkLCAqaG9zdG5hbWUsICpw
b3J0TnVtYmVyKTsKLX0KLQotdm9pZCBQYXJzZUF1dGhvcml0eShjb25zdCBVQ2hhciogc3BlYywg
Y29uc3QgVVJMQ29tcG9uZW50JiBhdXRoLCBVUkxDb21wb25lbnQqIHVzZXJuYW1lLCBVUkxDb21w
b25lbnQqIHBhc3N3b3JkLCBVUkxDb21wb25lbnQqIGhvc3RuYW1lLCBVUkxDb21wb25lbnQqIHBv
cnROdW1iZXIpCi17Ci0gICAgZG9QYXJzZUF1dGhvcml0eShzcGVjLCBhdXRoLCAqdXNlcm5hbWUs
ICpwYXNzd29yZCwgKmhvc3RuYW1lLCAqcG9ydE51bWJlcik7Ci19Ci0KLWludCBQYXJzZVBvcnQo
Y29uc3QgY2hhciogdXJsLCBjb25zdCBVUkxDb21wb25lbnQmIHBvcnQpCi17Ci0gICAgcmV0dXJu
IGRvUGFyc2VQb3J0KHVybCwgcG9ydCk7Ci19Ci0KLWludCBQYXJzZVBvcnQoY29uc3QgVUNoYXIq
IHVybCwgY29uc3QgVVJMQ29tcG9uZW50JiBwb3J0KQotewotICAgIHJldHVybiBkb1BhcnNlUG9y
dCh1cmwsIHBvcnQpOwotfQotCi12b2lkIFBhcnNlU3RhbmRhcmRVUkwoY29uc3QgY2hhciogdXJs
LCBpbnQgdXJsTGVuZ3RoLCBVUkxTZWdtZW50cyogcGFyc2VkKQotewotICAgIGRvUGFyc2VTdGFu
ZGFyZFVSTCh1cmwsIHVybExlbmd0aCwgKnBhcnNlZCk7Ci19Ci0KLXZvaWQgUGFyc2VTdGFuZGFy
ZFVSTChjb25zdCBVQ2hhciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBVUkxTZWdtZW50cyogcGFyc2Vk
KQotewotICAgIGRvUGFyc2VTdGFuZGFyZFVSTCh1cmwsIHVybExlbmd0aCwgKnBhcnNlZCk7Ci19
Ci0KLXZvaWQgUGFyc2VQYXRoVVJMKGNvbnN0IGNoYXIqIHVybCwgaW50IHVybExlbmd0aCwgVVJM
U2VnbWVudHMqIHBhcnNlZCkKLXsKLSAgICBkb1BhcnNlUGF0aFVSTCh1cmwsIHVybExlbmd0aCwg
KnBhcnNlZCk7Ci19Ci0KLXZvaWQgUGFyc2VQYXRoVVJMKGNvbnN0IFVDaGFyKiB1cmwsIGludCB1
cmxMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQpCi17Ci0gICAgZG9QYXJzZVBhdGhVUkwodXJs
LCB1cmxMZW5ndGgsICpwYXJzZWQpOwotfQotCi12b2lkIFBhcnNlRmlsZVN5c3RlbVVSTChjb25z
dCBjaGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQpCi17Ci0gICAg
ZG9QYXJzZUZpbGVTeXN0ZW1VUkwodXJsLCB1cmxMZW5ndGgsICpwYXJzZWQpOwotfQotCi12b2lk
IFBhcnNlRmlsZVN5c3RlbVVSTChjb25zdCBVQ2hhciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBVUkxT
ZWdtZW50cyogcGFyc2VkKQotewotICAgIGRvUGFyc2VGaWxlU3lzdGVtVVJMKHVybCwgdXJsTGVu
Z3RoLCAqcGFyc2VkKTsKLX0KLQotdm9pZCBQYXJzZU1haWx0b1VSTChjb25zdCBjaGFyKiB1cmws
IGludCB1cmxMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQpCi17Ci0gICAgZG9QYXJzZU1haWx0
b1VSTCh1cmwsIHVybExlbmd0aCwgKnBhcnNlZCk7Ci19Ci0KLXZvaWQgUGFyc2VNYWlsdG9VUkwo
Y29uc3QgVUNoYXIqIHVybCwgaW50IHVybExlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCkKLXsK
LSAgICBkb1BhcnNlTWFpbHRvVVJMKHVybCwgdXJsTGVuZ3RoLCAqcGFyc2VkKTsKLX0KLQotdm9p
ZCBwYXJzZVBhdGhJbnRlcm5hbChjb25zdCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQm
IHBhdGgsIFVSTENvbXBvbmVudCogZmlsZXBhdGgsIFVSTENvbXBvbmVudCogcXVlcnksIFVSTENv
bXBvbmVudCogZnJhZ21lbnQpCi17Ci0gICAgcGFyc2VQYXRoKHNwZWMsIHBhdGgsICpmaWxlcGF0
aCwgKnF1ZXJ5LCAqZnJhZ21lbnQpOwotfQotCi12b2lkIHBhcnNlUGF0aEludGVybmFsKGNvbnN0
IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIHBhdGgsIFVSTENvbXBvbmVudCogZmls
ZXBhdGgsIFVSTENvbXBvbmVudCogcXVlcnksIFVSTENvbXBvbmVudCogZnJhZ21lbnQpCi17Ci0g
ICAgcGFyc2VQYXRoKHNwZWMsIHBhdGgsICpmaWxlcGF0aCwgKnF1ZXJ5LCAqZnJhZ21lbnQpOwot
fQotCi12b2lkIHBhcnNlQWZ0ZXJTY2hlbWUoY29uc3QgY2hhciogc3BlYywgaW50IHNwZWNMZW5n
dGgsIGludCBhZnRlclNjaGVtZSwgVVJMU2VnbWVudHMmIHBhcnNlZCkKLXsKLSAgICBkb1BhcnNl
QWZ0ZXJTY2hlbWUoc3BlYywgc3BlY0xlbmd0aCwgYWZ0ZXJTY2hlbWUsIHBhcnNlZCk7Ci19Ci0K
LXZvaWQgcGFyc2VBZnRlclNjaGVtZShjb25zdCBVQ2hhciogc3BlYywgaW50IHNwZWNMZW5ndGgs
IGludCBhZnRlclNjaGVtZSwgVVJMU2VnbWVudHMmIHBhcnNlZCkKLXsKLSAgICBkb1BhcnNlQWZ0
ZXJTY2hlbWUoc3BlYywgc3BlY0xlbmd0aCwgYWZ0ZXJTY2hlbWUsIHBhcnNlZCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFVSTFBhcnNlcgotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8v
IFVTRShXVEZVUkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFBhcnNl
LmggYi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFBhcnNlLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGM5N2IxMGE5MTg5MjE4MjEyMzYwM2UyNmVjOTk1OTRlNmRkZjM0MTQuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93
dGYvdXJsL3NyYy9VUkxQYXJzZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgMjAwNyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRp
b24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0g
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVVJMUGFy
c2VfaAotI2RlZmluZSBVUkxQYXJzZV9oCi0KLSNpbmNsdWRlICJVUkxDb21wb25lbnQuaCIKLSNp
bmNsdWRlICJVUkxTZWdtZW50cy5oIgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4K
LQotI2lmIFVTRShXVEZVUkwpCi0KLW5hbWVzcGFjZSBXVEYgewotCi1uYW1lc3BhY2UgVVJMUGFy
c2VyIHsKLQotLy8gSW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLS8vIFRoZXNlIGZ1bmN0aW9ucyBw
YXJzZSB0aGUgZ2l2ZW4gVVJMLCBmaWxsaW5nIGluIGFsbCBvZiB0aGUgc3RydWN0dXJlJ3MKLS8v
IGNvbXBvbmVudHMuIFRoZXNlIGZ1bmN0aW9ucyBjYW4gbm90IGZhaWwsIHRoZXkgd2lsbCBhbHdh
eXMgZG8gdGhlaXIgYmVzdAotLy8gYXQgaW50ZXJwcmV0aW5nIHRoZSBpbnB1dCBnaXZlbi4KLS8v
Ci0vLyBUaGUgc3RyaW5nIGxlbmd0aCBvZiB0aGUgVVJMIE1VU1QgYmUgc3BlY2lmaWVkLCB3ZSBk
byBub3QgY2hlY2sgZm9yIE5VTExzCi0vLyBhdCBhbnkgcG9pbnQgaW4gdGhlIHByb2Nlc3MsIGFu
ZCB3aWxsIGFjdHVhbGx5IGhhbmRsZSBlbWJlZGRlZCBOVUxMcy4KLS8vCi0vLyBJTVBPUlRBTlQ6
IFRoZXNlIGZ1bmN0aW9ucyBkbyBOT1QgaGFuZyBvbiB0byB0aGUgZ2l2ZW4gcG9pbnRlciBvciBj
b3B5IGl0Ci0vLyBpbiBhbnkgd2F5LiBTZWUgdGhlIGNvbW1lbnQgYWJvdmUgdGhlIHN0cnVjdC4K
LS8vCi0vLyBUaGUgOC1iaXQgdmVyc2lvbnMgcmVxdWlyZSBVVEYtOCBlbmNvZGluZy4KLQotLy8g
U3RhbmRhcmRVUkwgaXMgZm9yIHdoZW4gdGhlIHNjaGVtZSBpcyBrbm93biB0byBiZSBvbmUgdGhh
dCBoYXMgYW4KLS8vIGF1dGhvcml0eSAoaG9zdCkgbGlrZSAiaHR0cCIuIFRoaXMgZnVuY3Rpb24g
d2lsbCBub3QgaGFuZGxlIHdlaXJkIG9uZXMKLS8vIGxpa2UgImFib3V0OiIgYW5kICJqYXZhc2Ny
aXB0OiIsIG9yIGRvIHRoZSByaWdodCB0aGluZyBmb3IgImZpbGU6IiBVUkxzLgotdm9pZCBQYXJz
ZVN0YW5kYXJkVVJMKGNvbnN0IGNoYXIqIHVybCwgaW50IHVybExlbmd0aCwgVVJMU2VnbWVudHMq
IHBhcnNlZCk7Ci12b2lkIFBhcnNlU3RhbmRhcmRVUkwoY29uc3QgVUNoYXIqIHVybCwgaW50IHVy
bExlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCk7Ci0KLS8vIFBhdGhVUkwgaXMgZm9yIHdoZW4g
dGhlIHNjaGVtZSBpcyBrbm93biBub3QgdG8gaGF2ZSBhbiBhdXRob3JpdHkgKGhvc3QpCi0vLyBz
ZWN0aW9uIGJ1dCB0aGF0IGFyZW4ndCBmaWxlIFVSTHMgZWl0aGVyLiBUaGUgc2NoZW1lIGlzIHBh
cnNlZCwgYW5kCi0vLyBldmVyeXRoaW5nIGFmdGVyIHRoZSBzY2hlbWUgaXMgY29uc2lkZXJlZCBh
cyB0aGUgcGF0aC4gVGhpcyBpcyB1c2VkIGZvcgotLy8gdGhpbmdzIGxpa2UgImFib3V0OiIgYW5k
ICJqYXZhc2NyaXB0OiIKLXZvaWQgUGFyc2VQYXRoVVJMKGNvbnN0IGNoYXIqIHVybCwgaW50IHVy
bExlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCk7Ci12b2lkIFBhcnNlUGF0aFVSTChjb25zdCBV
Q2hhciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBVUkxTZWdtZW50cyogcGFyc2VkKTsKLQotLy8gRmls
ZVVSTCBpcyBmb3IgZmlsZSBVUkxzLiBUaGVyZSBhcmUgc29tZSBzcGVjaWFsIHJ1bGVzIGZvciBp
bnRlcnByZXRpbmcKLS8vIHRoZXNlLgotdm9pZCBQYXJzZUZpbGVVUkwoY29uc3QgY2hhciogdXJs
LCBpbnQgdXJsTGVuZ3RoLCBVUkxTZWdtZW50cyogcGFyc2VkKTsKLXZvaWQgUGFyc2VGaWxlVVJM
KGNvbnN0IFVDaGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQpOwot
Ci0vLyBGaWxlc3lzdGVtIFVSTHMgYXJlIHN0cnVjdHVyZWQgZGlmZmVyZW50bHkgdGhhbiBvdGhl
ciBVUkxzLgotdm9pZCBQYXJzZUZpbGVTeXN0ZW1VUkwoY29uc3QgY2hhciogdXJsLCBpbnQgdXJs
TGVuZ3RoLCBVUkxTZWdtZW50cyogcGFyc2VkKTsKLXZvaWQgUGFyc2VGaWxlU3lzdGVtVVJMKGNv
bnN0IFVDaGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQpOwotCi0v
LyBNYWlsdG9VUkwgaXMgZm9yIG1haWx0bzogdXJscy4gVGhleSBhcmUgbWFkZSB1cCBzY2hlbWUs
cGF0aCxxdWVyeQotdm9pZCBQYXJzZU1haWx0b1VSTChjb25zdCBjaGFyKiB1cmwsIGludCB1cmxM
ZW5ndGgsIFVSTFNlZ21lbnRzKiBwYXJzZWQpOwotdm9pZCBQYXJzZU1haWx0b1VSTChjb25zdCBV
Q2hhciogdXJsLCBpbnQgdXJsTGVuZ3RoLCBVUkxTZWdtZW50cyogcGFyc2VkKTsKLQotLy8gSGVs
cGVyIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi0vLyBMb2NhdGVzIHRoZSBzY2hlbWUgYWNjb3JkaW5nIHRvIHRo
ZSBVUkwgIHBhcnNlcidzIHJ1bGVzLiBUaGlzIGZ1bmN0aW9uIGlzCi0vLyBkZXNpZ25lZCBzbyB0
aGUgY2FsbGVyIGNhbiBmaW5kIHRoZSBzY2hlbWUgYW5kIGNhbGwgdGhlIGNvcnJlY3QgSW5pdCoK
LS8vIGZ1bmN0aW9uIGFjY29yZGluZyB0byB0aGVpciBrbm93biBzY2hlbWUgdHlwZXMuCi0vLwot
Ly8gSXQgYWxzbyBkb2VzIG5vdCBwZXJmb3JtIGFueSB2YWxpZGF0aW9uIG9uIHRoZSBzY2hlbWUu
Ci0vLwotLy8gVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0cnVlIGlmIHRoZSBzY2hlbWUgaXMg
Zm91bmQgYW5kIHdpbGwgcHV0IHRoZQotLy8gc2NoZW1lJ3MgcmFuZ2UgaW50byAqc2NoZW1lLiBG
YWxzZSBtZWFucyBubyBzY2hlbWUgY291bGQgYmUgZm91bmQuIE5vdGUKLS8vIHRoYXQgYSBVUkwg
YmVnaW5uaW5nIHdpdGggYSBjb2xvbiBoYXMgYSBzY2hlbWUsIGJ1dCBpdCBpcyBlbXB0eSwgc28g
dGhpcwotLy8gZnVuY3Rpb24gd2lsbCByZXR1cm4gdHJ1ZSBidXQgKnNjaGVtZSB3aWxsID0gKDAs
MCkuCi0vLwotLy8gVGhlIHNjaGVtZSBpcyBmb3VuZCBieSBza2lwcGluZyBzcGFjZXMgYW5kIGNv
bnRyb2wgY2hhcmFjdGVycyBhdCB0aGUKLS8vIGJlZ2lubmluZywgYW5kIHRha2luZyBldmVyeXRo
aW5nIGZyb20gdGhlcmUgdG8gdGhlIGZpcnN0IGNvbG9uIHRvIGJlIHRoZQotLy8gc2NoZW1lLiBU
aGUgY2hhcmFjdGVyIGF0IHNjaGVtZS5lbmQoKSB3aWxsIGJlIHRoZSBjb2xvbiAod2UgbWF5IGVu
aGFuY2UKLS8vIHRoaXMgdG8gaGFuZGxlIGZ1bGwgd2lkdGggY29sb25zIG9yIHNvbWV0aGluZywg
c28gZG9uJ3QgY291bnQgb24gdGhlCi0vLyBhY3R1YWwgY2hhcmFjdGVyIHZhbHVlKS4gVGhlIGNo
YXJhY3RlciBhdCBzY2hlbWUuZW5kKCkrMSB3aWxsIGJlIHRoZQotLy8gYmVnaW5uaW5nIG9mIHRo
ZSByZXN0IG9mIHRoZSBVUkwsIGJlIGl0IHRoZSBhdXRob3JpdHkgb3IgdGhlIHBhdGggKG9yIHRo
ZQotLy8gZW5kIG9mIHRoZSBzdHJpbmcpLgotLy8KLS8vIFRoZSA4LWJpdCB2ZXJzaW9uIHJlcXVp
cmVzIFVURi04IGVuY29kaW5nLgotYm9vbCBFeHRyYWN0U2NoZW1lKGNvbnN0IGNoYXIqIHVybCwg
aW50IHVybExlbmd0aCwgVVJMQ29tcG9uZW50KiBzY2hlbWUpOwotYm9vbCBFeHRyYWN0U2NoZW1l
KGNvbnN0IFVDaGFyKiB1cmwsIGludCB1cmxMZW5ndGgsIFVSTENvbXBvbmVudCogc2NoZW1lKTsK
LQotLy8gUmV0dXJucyB0cnVlIGlmIGNoIGlzIGEgY2hhcmFjdGVyIHRoYXQgdGVybWluYXRlcyB0
aGUgYXV0aG9yaXR5IHNlZ21lbnQgb2YgYSBVUkwuCi1ib29sIElzQXV0aG9yaXR5VGVybWluYXRv
cihVQ2hhcik7Ci0KLS8vIERvZXMgYSBiZXN0IGVmZm9ydCBwYXJzZSBvZiBpbnB1dCB8c3BlY3ws
IGluIHJhbmdlIHxhdXRofC4gSWYgYSBwYXJ0aWN1bGFyCi0vLyBjb21wb25lbnQgaXMgbm90IGZv
dW5kLCBpdCB3aWxsIGJlIHNldCB0byBpbnZhbGlkLgotdm9pZCBQYXJzZUF1dGhvcml0eShjb25z
dCBjaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGF1dGgsCi0gICAgICAgICAgICAgICAg
ICAgIFVSTENvbXBvbmVudCogdXNlcm5hbWUsIFVSTENvbXBvbmVudCogcGFzc3dvcmQsIFVSTENv
bXBvbmVudCogaG9zdG5hbWUsIFVSTENvbXBvbmVudCogcG9ydE51bWJlcik7Ci12b2lkIFBhcnNl
QXV0aG9yaXR5KGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25lbnQmIGF1dGgsCi0g
ICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCogdXNlcm5hbWUsIFVSTENvbXBvbmVudCog
cGFzc3dvcmQsIFVSTENvbXBvbmVudCogaG9zdG5hbWUsIFVSTENvbXBvbmVudCogcG9ydE51bWJl
cik7Ci0KLS8vIENvbXB1dGVzIHRoZSBpbnRlZ2VyIHBvcnQgdmFsdWUgZnJvbSB0aGUgZ2l2ZW4g
cG9ydCBjb21wb25lbnQuIFRoZSBwb3J0Ci0vLyBjb21wb25lbnQgc2hvdWxkIGhhdmUgYmVlbiBp
ZGVudGlmaWVkIGJ5IG9uZSBvZiB0aGUgaW5pdCBmdW5jdGlvbnMgb24KLS8vIHxQYXJzZWR8IGZv
ciB0aGUgZ2l2ZW4gaW5wdXQgdXJsLgotLy8KLS8vIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBh
IHBvc2l0aXZlIGludGVnZXIgYmV0d2VlbiAwIGFuZCA2NEssIG9yIG9uZSBvZgotLy8gdGhlIHR3
byBzcGVjaWFsIHZhbHVlcyBiZWxvdy4KLWVudW0gU3BlY2lhbFBvcnQgeyBQT1JUX1VOU1BFQ0lG
SUVEID0gLTEsIFBPUlRfSU5WQUxJRCA9IC0yIH07Ci1pbnQgUGFyc2VQb3J0KGNvbnN0IGNoYXIq
IHVybCwgY29uc3QgVVJMQ29tcG9uZW50JiBwb3J0KTsKLWludCBQYXJzZVBvcnQoY29uc3QgVUNo
YXIqIHVybCwgY29uc3QgVVJMQ29tcG9uZW50JiBwb3J0KTsKLQotLy8gRXh0cmFjdHMgdGhlIHJh
bmdlIG9mIHRoZSBmaWxlIG5hbWUgaW4gdGhlIGdpdmVuIHVybC4gVGhlIHBhdGggbXVzdAotLy8g
YWxyZWFkeSBoYXZlIGJlZW4gY29tcHV0ZWQgYnkgdGhlIHBhcnNlIGZ1bmN0aW9uLCBhbmQgdGhl
IG1hdGNoaW5nIFVSTAotLy8gYW5kIGV4dHJhY3RlZCBwYXRoIGFyZSBwcm92aWRlZCB0byB0aGlz
IGZ1bmN0aW9uLiBUaGUgZmlsZW5hbWUgaXMKLS8vIGRlZmluZWQgYXMgYmVpbmcgZXZlcnl0aGlu
ZyBmcm9tIHRoZSBsYXN0IHNsYXNoL2JhY2tzbGFzaCBvZiB0aGUgcGF0aAotLy8gdG8gdGhlIGVu
ZCBvZiB0aGUgcGF0aC4KLS8vCi0vLyBUaGUgZmlsZSBuYW1lIHdpbGwgYmUgZW1wdHkgaWYgdGhl
IHBhdGggaXMgZW1wdHkgb3IgdGhlcmUgaXMgbm90aGluZwotLy8gZm9sbG93aW5nIHRoZSBsYXN0
IHNsYXNoLgotLy8KLS8vIFRoZSA4LWJpdCB2ZXJzaW9uIHJlcXVpcmVzIFVURi04IGVuY29kaW5n
Lgotdm9pZCBFeHRyYWN0RmlsZU5hbWUoY29uc3QgY2hhciogdXJsLCBjb25zdCBVUkxDb21wb25l
bnQmIHBhdGgsIFVSTENvbXBvbmVudCogZmlsZU5hbWUpOwotdm9pZCBFeHRyYWN0RmlsZU5hbWUo
Y29uc3QgVUNoYXIqIHVybCwgY29uc3QgVVJMQ29tcG9uZW50JiBwYXRoLCBVUkxDb21wb25lbnQq
IGZpbGVOYW1lKTsKLQotLy8gRXh0cmFjdCB0aGUgZmlyc3Qga2V5L3ZhbHVlIGZyb20gdGhlIHJh
bmdlIGRlZmluZWQgYnkgfCpxdWVyeXwuIFVwZGF0ZXMKLS8vIHwqcXVlcnl8IHRvIHN0YXJ0IGF0
IHRoZSBlbmQgb2YgdGhlIGV4dHJhY3RlZCBrZXkvdmFsdWUgcGFpci4gVGhpcyBpcwotLy8gZGVz
aWduZWQgZm9yIHVzZSBpbiBhIGxvb3A6IHlvdSBjYW4ga2VlcCBjYWxsaW5nIGl0IHdpdGggdGhl
IHNhbWUgcXVlcnkKLS8vIG9iamVjdCBhbmQgaXQgd2lsbCBpdGVyYXRlIG92ZXIgYWxsIGl0ZW1z
IGluIHRoZSBxdWVyeS4KLS8vCi0vLyBTb21lIGtleS92YWx1ZSBwYWlycyBtYXkgaGF2ZSB0aGUg
a2V5LCB0aGUgdmFsdWUsIG9yIGJvdGggYmUgZW1wdHkgKGZvcgotLy8gZXhhbXBsZSwgdGhlIHF1
ZXJ5IHN0cmluZyAiPyYiKS4gVGhlc2Ugd2lsbCBiZSByZXR1cm5lZC4gTm90ZSB0aGF0IGFuIGVt
cHR5Ci0vLyBsYXN0IHBhcmFtZXRlciAiZm9vLmNvbT8iIG9yIGZvby5jb20/YSYiIHdpbGwgbm90
IGJlIHJldHVybmVkLCB0aGlzIGNhc2UKLS8vIGlzIHRoZSBzYW1lIGFzICJkb25lLiIKLS8vCi0v
LyBUaGUgaW5pdGlhbCBxdWVyeSBjb21wb25lbnQgc2hvdWxkIG5vdCBpbmNsdWRlIHRoZSAnPycg
KHRoaXMgaXMgdGhlIGRlZmF1bHQKLS8vIGZvciBwYXJzZWQgVVJMcykuCi0vLwotLy8gSWYgbm8g
a2V5L3ZhbHVlIGFyZSBmb3VuZCB8KmtleXwgYW5kIHwqdmFsdWV8IHdpbGwgYmUgdW5jaGFuZ2Vk
IGFuZCBpdCB3aWxsCi0vLyByZXR1cm4gZmFsc2UuCi1ib29sIEV4dHJhY3RRdWVyeUtleVZhbHVl
KGNvbnN0IGNoYXIqIHVybCwgVVJMQ29tcG9uZW50KiBxdWVyeSwgVVJMQ29tcG9uZW50KiBrZXks
IFVSTENvbXBvbmVudCogdmFsdWUpOwotYm9vbCBFeHRyYWN0UXVlcnlLZXlWYWx1ZShjb25zdCBV
Q2hhciogdXJsLCBVUkxDb21wb25lbnQqIHF1ZXJ5LCBVUkxDb21wb25lbnQqIGtleSwgVVJMQ29t
cG9uZW50KiB2YWx1ZSk7Ci0KLX0gLy8gbmFtZXNwYWNlIFVSTFBhcnNlcgotCi19IC8vIG5hbWVz
cGFjZSBXVEYKLQotI2VuZGlmIC8vIFVTRShXVEZVUkwpCi0KLSNlbmRpZiAvLyBVUkxQYXJzZV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFBhcnNlRmlsZS5jcHAgYi9T
b3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFBhcnNlRmlsZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDkxMTgyMTk5MWY2NzkyYThiM2I2Y2RmN2M3MTIwN2NmZDRkZWJhZDEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93
dGYvdXJsL3NyYy9VUkxQYXJzZUZpbGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjUxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwNyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0
cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJVUkxQYXJzZS5oIgotCi0jaW5jbHVkZSAiVVJMRmlsZS5o
IgotI2luY2x1ZGUgIlVSTFBhcnNlSW50ZXJuYWwuaCIKLQotLy8gSW50ZXJlc3RpbmcgSUUgZmls
ZTppc21zLi4uCi0vLwotLy8gIElOUFVUICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVAotLy8g
ID09PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLy8gIGZpbGU6L2Zvby9iYXIgICAgICAgICAgICAgIGZpbGU6Ly8vZm9vL2JhcgotLy8gICAg
ICBUaGUgcmVzdWx0IGhlcmUgc2VlbXMgdG90YWxseSBpbnZhbGlkIT8hPyBUaGlzIGlzbid0IFVO
Qy4KLS8vCi0vLyAgZmlsZTovCi0vLyAgZmlsZTovLyBvciBhbnkgb3RoZXIgbnVtYmVyIG9mIHNs
YXNoZXMKLS8vICAgICAgSUU2IGRvZXNuJ3QgZG8gYW55dGhpbmcgYXQgYWxsIGlmIHlvdSBjbGlj
ayBvbiB0aGlzIGxpbmsuIE5vIGVycm9yOgotLy8gICAgICBub3RoaW5nLiBJRTYncyBoaXN0b3J5
IHN5c3RlbSBzZWVtcyB0byBhbHdheXMgY29sb3IgdGhpcyBsaW5rLCBzbyBJJ20KLS8vICAgICAg
Z3Vlc3NpbmcgdGhhdCBpdCBtYXBzIGludGVybmFsbHkgdG8gdGhlIGVtcHR5IFVSTC4KLS8vCi0v
LyAgQzpcICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovLy9DOi8KLS8vICAgICAgV2hlbiBv
biBhIGZpbGU6IFVSTCBzb3VyY2UgcGFnZSwgdGhpcyBsaW5rIHdpbGwgd29yay4gV2hlbiBvdmVy
IEhUVFAsCi0vLyAgICAgIHRoZSBmaWxlOiBVUkwgd2lsbCBhcHBlYXIgaW4gdGhlIHN0YXR1cyBi
YXIgYnV0IHRoZSBsaW5rIHdpbGwgbm90IHdvcmsKLS8vICAgICAgKHNlY3VyaXR5IHJlc3RyaWN0
aW9uIGZvciBhbGwgZmlsZSBVUkxzKS4KLS8vCi0vLyAgZmlsZTpmb28vICAgICAgICAgICAgICAg
ICAgZmlsZTpmb28vICAgICAoaW52YWxpZD8hPyE/KQotLy8gIGZpbGU6L2Zvby8gICAgICAgICAg
ICAgICAgIGZpbGU6Ly8vZm9vLyAgKGludmFsaWQ/IT8hPykKLS8vICBmaWxlOi8vZm9vLyAgICAg
ICAgICAgICAgICBmaWxlOi8vZm9vLyAgIChVTkMgdG8gc2VydmVyICJmb28iKQotLy8gIGZpbGU6
Ly8vZm9vLyAgICAgICAgICAgICAgIGZpbGU6Ly8vZm9vLyAgKGludmFsaWQsIHNlZW1zIHRvIGJl
IGEgZmlsZSkKLS8vICBmaWxlOi8vLy9mb28vICAgICAgICAgICAgICBmaWxlOi8vZm9vLyAgIChV
TkMgdG8gc2VydmVyICJmb28iKQotLy8gICAgICBBbnkgbW9yZSB0aGFuIGZvdXIgc2xhc2hlcyBp
cyBhbHNvIHRyZWF0ZWQgYXMgVU5DLgotLy8KLS8vICBmaWxlOkM6LyAgICAgICAgICAgICAgICAg
ICBmaWxlOi8vQzovCi0vLyAgZmlsZTovQzovICAgICAgICAgICAgICAgICAgZmlsZTovL0M6Lwot
Ly8gICAgICBUaGUgbnVtYmVyIG9mIHNsYXNoZXMgYWZ0ZXIgImZpbGU6IiBkb24ndCBtYXR0ZXIg
aWYgdGhlIHRoaW5nIGZvbGxvd2luZwotLy8gICAgICBpdCBsb29rcyBsaWtlIGFuIGFic29sdXRl
IGRyaXZlIHBhdGguIEFsc28sIHNsYXNoZXMgYW5kIGJhY2tzbGFzaGVzIGFyZQotLy8gICAgICBl
cXVhbGx5IHZhbGlkIGhlcmUuCi0KLSNpZiBVU0UoV1RGVVJMKQotCi1uYW1lc3BhY2UgV1RGIHsK
LQotbmFtZXNwYWNlIFVSTFBhcnNlciB7Ci0KLW5hbWVzcGFjZSB7Ci0KLS8vIEEgc3ViY29tcG9u
ZW50IG9mIERvSW5pdEZpbGVVUkwsIHRoZSBpbnB1dCBvZiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBi
ZSBhIFVOQwotLy8gcGF0aCBuYW1lLCB3aXRoIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFj
dGVyIGFmdGVyIHRoZSBzbGFzaGVzIGZvbGxvd2luZwotLy8gdGhlIHNjaGVtZSBnaXZlbiBpbiB8
YWZ0ZXJTbGFzaGVzfC4gVGhpcyB3aWxsIGluaXRpYWxpemUgdGhlIGhvc3QsIHBhdGgsCi0vLyBx
dWVyeSwgYW5kIHJlZiwgYW5kIGxlYXZlIHRoZSBvdGhlciBvdXRwdXQgY29tcG9uZW50cyB1bnRv
dWNoZWQKLS8vIChEb0luaXRGaWxlVVJMIGhhbmRsZXMgdGhlc2UgZm9yIHVzKS4KLXRlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci12b2lkIGRvUGFyc2VVTkMoY29uc3QgQ2hhcmFjdGVy
VHlwZSogc3BlYywgaW50IGFmdGVyU2xhc2hlcywgaW50IHNwZWNMZW5ndGgsIFVSTFNlZ21lbnRz
JiBwYXJzZWQpCi17Ci0gICAgaW50IG5leHRTbGFzaCA9IGZpbmROZXh0U2xhc2goc3BlYywgYWZ0
ZXJTbGFzaGVzLCBzcGVjTGVuZ3RoKTsKLSAgICBpZiAobmV4dFNsYXNoID09IHNwZWNMZW5ndGgp
IHsKLSAgICAgICAgLy8gTm8gYWRkaXRpb25hbCBzbGFzaCBmb3VuZCwgYXMgaW4gImZpbGU6Ly9m
b28iLCB0cmVhdCB0aGUgdGV4dCBhcyB0aGUKLSAgICAgICAgLy8gaG9zdCB3aXRoIG5vIHBhdGgg
KHRoaXMgd2lsbCBlbmQgdXAgYmVpbmcgVU5DIHRvIHNlcnZlciAiZm9vIikuCi0gICAgICAgIGlu
dCBob3N0TGVuZ3RoID0gc3BlY0xlbmd0aCAtIGFmdGVyU2xhc2hlczsKLSAgICAgICAgaWYgKGhv
c3RMZW5ndGgpCi0gICAgICAgICAgICBwYXJzZWQuaG9zdCA9IFVSTENvbXBvbmVudChhZnRlclNs
YXNoZXMsIGhvc3RMZW5ndGgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYXJzZWQuaG9z
dC5yZXNldCgpOwotICAgICAgICBwYXJzZWQucGF0aC5yZXNldCgpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0jaWYgT1MoV0lORE9XUykKLSAgICAvLyBTZWUgaWYgd2UgaGF2ZSBzb21ldGhp
bmcgdGhhdCBsb29rcyBsaWtlIGEgcGF0aCBmb2xsb3dpbmcgdGhlIGZpcnN0Ci0gICAgLy8gY29t
cG9uZW50LiBBcyBpbiAiZmlsZTovL2xvY2FsaG9zdC9jOi8iLCB3ZSBnZXQgImM6LyIgb3V0LiBX
ZSB3YW50IHRvCi0gICAgLy8gdHJlYXQgdGhpcyBhcyBhIGhhdmluZyBubyBob3N0IGJ1dCB0aGUg
cGF0aCBnaXZlbi4gV29ya3Mgb24gV2luZG93cyBvbmx5LgotICAgIGlmIChkb2VzQmVnaW5XaW5k
b3dzRHJpdmVTcGVjKHNwZWMsIG5leHRTbGFzaCArIDEsIHNwZWNMZW5ndGgpKSB7Ci0gICAgICAg
IHBhcnNlZC5ob3N0LnJlc2V0KCk7Ci0gICAgICAgIHBhcnNlUGF0aEludGVybmFsKHNwZWMsIE1h
a2VSYW5nZShuZXh0U2xhc2gsIHNwZWNMZW5ndGgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAmcGFyc2VkLnBhdGgsICZwYXJzZWQucXVlcnksICZwYXJzZWQucmVmKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgLy8gT3RoZXJ3aXNlLCBldmVyeXRoaW5nIHVwIHVu
dGlsIHRoYXQgZmlyc3Qgc2xhc2ggd2UgZm91bmQgaXMgdGhlIGhvc3QgbmFtZSwKLSAgICAvLyB3
aGljaCB3aWxsIGVuZCB1cCBiZWluZyB0aGUgVU5DIGhvc3QuIEZvciBleGFtcGxlICJmaWxlOi8v
Zm9vL2Jhci50eHQiCi0gICAgLy8gd2lsbCBnZXQgYSBzZXJ2ZXIgbmFtZSBvZiAiZm9vIiBhbmQg
YSBwYXRoIG9mICIvYmFyIi4gTGF0ZXIsIG9uIFdpbmRvd3MsCi0gICAgLy8gdGhpcyBzaG91bGQg
YmUgdHJlYXRlZCBhcyB0aGUgZmlsZW5hbWUgIlxcZm9vXGJhci50eHQiIGluIHByb3BlciBVTkMK
LSAgICAvLyBub3RhdGlvbi4KLSAgICBpbnQgaG9zdExlbmd0aCA9IG5leHRTbGFzaCAtIGFmdGVy
U2xhc2hlczsKLSAgICBpZiAoaG9zdExlbmd0aCkKLSAgICAgICAgcGFyc2VkLmhvc3QgPSBVUkxD
b21wb25lbnQ6OmZyb21SYW5nZShhZnRlclNsYXNoZXMsIG5leHRTbGFzaCk7Ci0gICAgZWxzZQot
ICAgICAgICBwYXJzZWQuaG9zdC5yZXNldCgpOwotICAgIGlmIChuZXh0U2xhc2ggPCBzcGVjTGVu
Z3RoKSB7Ci0gICAgICAgIHBhcnNlUGF0aEludGVybmFsKHNwZWMsIFVSTENvbXBvbmVudDo6ZnJv
bVJhbmdlKG5leHRTbGFzaCwgc3BlY0xlbmd0aCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICZwYXJzZWQucGF0aCwgJnBhcnNlZC5xdWVyeSwgJnBhcnNlZC5mcmFnbWVudCk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIHBhcnNlZC5wYXRoLnJlc2V0KCk7Ci19Ci0KLS8vIEEgc3ViY29tcG9uZW50
IG9mIERvUGFyc2VGaWxlVVJMLCB0aGUgaW5wdXQgc2hvdWxkIGJlIGEgbG9jYWwgZmlsZSwgd2l0
aCB0aGUKLS8vIGJlZ2lubmluZyBvZiB0aGUgcGF0aCBpbmRpY2F0ZWQgYnkgdGhlIGluZGV4IGlu
IHxwYXRoQmVnaW58LiBUaGlzIHdpbGwKLS8vIGluaXRpYWxpemUgdGhlIGhvc3QsIHBhdGgsIHF1
ZXJ5LCBhbmQgcmVmLCBhbmQgbGVhdmUgdGhlIG90aGVyIG91dHB1dAotLy8gY29tcG9uZW50cyB1
bnRvdWNoZWQgKERvSW5pdEZpbGVVUkwgaGFuZGxlcyB0aGVzZSBmb3IgdXMpLgotdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLXZvaWQgZG9QYXJzZUxvY2FsRmlsZShjb25zdCBDaGFy
YWN0ZXJUeXBlKiBzcGVjLCBpbnQgcGF0aEJlZ2luLCBpbnQgc3BlY0xlbmd0aCwgVVJMU2VnbWVu
dHMmIHBhcnNlZCkKLXsKLSAgICBwYXJzZWQuaG9zdC5yZXNldCgpOwotICAgIHBhcnNlUGF0aElu
dGVybmFsKHNwZWMsIFVSTENvbXBvbmVudDo6ZnJvbVJhbmdlKHBhdGhCZWdpbiwgc3BlY0xlbmd0
aCksCi0gICAgICAgICAgICAgICAgICAgICAgJnBhcnNlZC5wYXRoLCAmcGFyc2VkLnF1ZXJ5LCAm
cGFyc2VkLmZyYWdtZW50KTsKLX0KLQotLy8gQmFja2VuZCBmb3IgdGhlIGV4dGVybmFsIGZ1bmN0
aW9ucyB0aGF0IG9wZXJhdGVzIG9uIGVpdGhlciBjaGFyIHR5cGUuCi0vLyBXZSBhcmUgaGFuZGVk
IHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlICJmaWxlOiIgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUg
c3BlYy4KLS8vIFVzdWFsbHkgdGhpcyBpcyBhIHNsYXNoLCBidXQgbmVlZG4ndCBiZTsgd2UgYWxs
b3cgcGF0aHMgbGlrZSAiZmlsZTpjOlxmb28iLgotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVy
VHlwZT4KLXZvaWQgZG9QYXJzZUZpbGVVUkwoY29uc3QgQ2hhcmFjdGVyVHlwZSogc3BlYywgaW50
IHNwZWNMZW5ndGgsIFVSTFNlZ21lbnRzJiBwYXJzZWQpCi17Ci0gICAgQVNTRVJUKHNwZWNMZW5n
dGggPj0gMCk7Ci0KLSAgICAvLyBHZXQgdGhlIHBhcnRzIHdlIG5ldmVyIHVzZSBmb3IgZmlsZSBV
UkxzIG91dCBvZiB0aGUgd2F5LgotICAgIHBhcnNlZC51c2VybmFtZS5yZXNldCgpOwotICAgIHBh
cnNlZC5wYXNzd29yZC5yZXNldCgpOwotICAgIHBhcnNlZC5wb3J0LnJlc2V0KCk7Ci0KLSAgICAv
LyBNYW55IG9mIHRoZSBjb2RlIHBhdGhzIGRvbid0IHNldCB0aGVzZSwgc28gaXQncyBjb252ZW5p
ZW50IHRvIGp1c3QgY2xlYXIKLSAgICAvLyB0aGVtLiBXZSdsbCB3cml0ZSB0aGVtIGluIHRob3Nl
IGNhc2VzIHdlIG5lZWQgdGhlbS4KLSAgICBwYXJzZWQucXVlcnkucmVzZXQoKTsKLSAgICBwYXJz
ZWQuZnJhZ21lbnQucmVzZXQoKTsKLQotICAgIC8vIFN0cmlwIGxlYWRpbmcgJiB0cmFpbGluZyBz
cGFjZXMgYW5kIGNvbnRyb2wgY2hhcmFjdGVycy4KLSAgICBpbnQgYmVnaW4gPSAwOwotICAgIHRy
aW1VUkwoc3BlYywgYmVnaW4sIHNwZWNMZW5ndGgpOwotCi0gICAgLy8gRmluZCB0aGUgc2NoZW1l
LgotICAgIGludCBudW1TbGFzaGVzOwotICAgIGludCBhZnRlclNjaGVtZTsKLSAgICBpbnQgYWZ0
ZXJTbGFzaGVzOwotI2lmIE9TKFdJTkRPV1MpCi0gICAgLy8gU2VlIGhvdyBtYW55IHNsYXNoZXMg
dGhlcmUgYXJlLiBXZSB3YW50IHRvIGhhbmRsZSBjYXNlcyBsaWtlIFVOQyBidXQgYWxzbwotICAg
IC8vICIvYzovZm9vIi4gVGhpcyBpcyB3aGVuIHRoZXJlIGlzIG5vIHNjaGVtZSwgc28gd2UgY2Fu
IGFsbG93IHBhZ2VzIHRvIGRvCi0gICAgLy8gbGlua3MgbGlrZSAiYzovZm9vL2JhciIgb3IgIi8v
Zm9vL2JhciIuIFRoaXMgaXMgYWxzbyBjYWxsZWQgYnkgdGhlCi0gICAgLy8gcmVsYXRpdmUgVVJM
IHJlc29sdmVyIHdoZW4gaXQgZGV0ZXJtaW5lcyB0aGVyZSBpcyBhbiBhYnNvbHV0ZSBVUkwsIHdo
aWNoCi0gICAgLy8gbWF5IGdpdmUgdXMgaW5wdXQgbGlrZSAiL2M6L2ZvbyIuCi0gICAgbnVtU2xh
c2hlcyA9IGNvdW50Q29uc2VjdXRpdmVTbGFzaGVzKHNwZWMsIGJlZ2luLCBzcGVjTGVuZ3RoKTsK
LSAgICBhZnRlclNsYXNoZXMgPSBiZWdpbiArIG51bVNsYXNoZXM7Ci0gICAgaWYgKGRvZXNCZWdp
bldpbmRvd3NEcml2ZVNwZWMoc3BlYywgYWZ0ZXJTbGFzaGVzLCBzcGVjTGVuZ3RoKSkgewotICAg
ICAgICAvLyBXaW5kb3dzIHBhdGgsIGRvbid0IHRyeSB0byBleHRyYWN0IHRoZSBzY2hlbWUgKGZv
ciBleGFtcGxlLCAiYzpcZm9vIikuCi0gICAgICAgIHBhcnNlZC5zY2hlbWUucmVzZXQoKTsKLSAg
ICAgICAgYWZ0ZXJTY2hlbWUgPSBhZnRlclNsYXNoZXM7Ci0gICAgfSBlbHNlIGlmIChkb2VzQmVn
aW5VTkNQYXRoKHNwZWMsIGJlZ2luLCBzcGVjTGVuZ3RoLCBmYWxzZSkpIHsKLSAgICAgICAgLy8g
V2luZG93cyBVTkMgcGF0aDogZG9uJ3QgdHJ5IHRvIGV4dHJhY3QgdGhlIHNjaGVtZSwgYnV0IGtl
ZXAgdGhlIHNsYXNoZXMuCi0gICAgICAgIHBhcnNlZC5zY2hlbWUucmVzZXQoKTsKLSAgICAgICAg
YWZ0ZXJTY2hlbWUgPSBiZWdpbjsKLSAgICB9IGVsc2UKLSNlbmRpZgotICAgIHsKLSAgICAgICAg
aWYgKEV4dHJhY3RTY2hlbWUoJnNwZWNbYmVnaW5dLCBzcGVjTGVuZ3RoIC0gYmVnaW4sICZwYXJz
ZWQuc2NoZW1lKSkgewotICAgICAgICAgICAgLy8gT2Zmc2V0IHRoZSByZXN1bHRzIHNpbmNlIHdl
IGdhdmUgRXh0cmFjdFNjaGVtZSBhIHN1YnN0cmluZy4KLSAgICAgICAgICAgIHBhcnNlZC5zY2hl
bWUubW92ZUJ5KGJlZ2luKTsKLSAgICAgICAgICAgIGFmdGVyU2NoZW1lID0gcGFyc2VkLnNjaGVt
ZS5lbmQoKSArIDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBObyBzY2hlbWUg
Zm91bmQsIHJlbWVtYmVyIHRoYXQuCi0gICAgICAgICAgICBwYXJzZWQuc2NoZW1lLnJlc2V0KCk7
Ci0gICAgICAgICAgICBhZnRlclNjaGVtZSA9IGJlZ2luOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgLy8gSGFuZGxlIGVtcHR5IHNwZWNzIG9uZXMgdGhhdCBjb250YWluIG9ubHkgd2hpdGVzcGFj
ZSBvciBjb250cm9sIGNoYXJzLAotICAgIC8vIG9yIHRoYXQgYXJlIGp1c3QgdGhlIHNjaGVtZSAo
Zm9yIGV4YW1wbGUgImZpbGU6IikuCi0gICAgaWYgKGFmdGVyU2NoZW1lID09IHNwZWNMZW5ndGgp
IHsKLSAgICAgICAgcGFyc2VkLmhvc3QucmVzZXQoKTsKLSAgICAgICAgcGFyc2VkLnBhdGgucmVz
ZXQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG51bVNsYXNoZXMgPSBjb3VudENv
bnNlY3V0aXZlU2xhc2hlcyhzcGVjLCBhZnRlclNjaGVtZSwgc3BlY0xlbmd0aCk7Ci0KLSAgICBh
ZnRlclNsYXNoZXMgPSBhZnRlclNjaGVtZSArIG51bVNsYXNoZXM7Ci0jaWYgT1MoV0lORE9XUykK
LSAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBpbnB1dCBpcyBhIGRyaXZlIGFnYWluLiBXZSBjaGVj
a2VkIGFib3ZlIGZvciB3aW5kb3dzCi0gICAgLy8gZHJpdmUgc3BlY3MsIGJ1dCB0aGF0J3Mgb25s
eSBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgdG8gc2VlIGlmIHdlIGhhdmUgYQotICAgIC8vIHNjaGVt
ZSBhdCBhbGwuIFRoaXMgdGVzdCB3aWxsIGJlIGR1cGxpY2F0ZWQgaW4gdGhhdCBjYXNlLCBidXQg
d2lsbAotICAgIC8vIGFkZGl0aW9uYWxseSBoYW5kbGUgYWxsIGNhc2VzIHdpdGggYSByZWFsIHNj
aGVtZSBzdWNoIGFzICJmaWxlOi8vL0M6LyIuCi0gICAgaWYgKCFkb2VzQmVnaW5XaW5kb3dzRHJp
dmVTcGVjKHNwZWMsIGFmdGVyU2xhc2hlcywgc3BlY0xlbmd0aCkgJiYgIG51bVNsYXNoZXMgIT0g
MykgewotICAgICAgICAvLyBBbnl0aGluZyBub3QgYmVnaW5uaW5nIHdpdGggYSBkcml2ZSBzcGVj
ICgiYzpcIikgb24gV2luZG93cyBpcyB0cmVhdGVkCi0gICAgICAgIC8vIGFzIFVOQywgd2l0aCB0
aGUgZXhjZXB0aW9uIG9mIHRocmVlIHNsYXNoZXMgd2hpY2ggYWx3YXlzIG1lYW5zIGEgZmlsZS4K
LSAgICAgICAgLy8gRXZlbiBJRTcgdHJlYXRzIGZpbGU6Ly8vZm9vL2JhciBhcyAiL2Zvby9iYXIi
LCB3aGljaCB0aGVuIGZhaWxzLgotICAgICAgICBkb1BhcnNlVU5DKHNwZWMsIGFmdGVyU2xhc2hl
cywgc3BlY0xlbmd0aCwgcGFyc2VkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbHNlCi0g
ICAgLy8gZmlsZTogVVJMIHdpdGggZXhhY3RseSAyIHNsYXNoZXMgaXMgY29uc2lkZXJlZCB0byBo
YXZlIGEgaG9zdCBjb21wb25lbnQuCi0gICAgaWYgKG51bVNsYXNoZXMgPT0gMikgewotICAgICAg
ICBkb1BhcnNlVU5DKHNwZWMsIGFmdGVyU2xhc2hlcywgc3BlY0xlbmd0aCwgcGFyc2VkKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZiAvLyBPUyhXSU5ET1dTKQotCi0gICAgLy8gRWFz
eSBhbmQgY29tbW9uIGNhc2UsIHRoZSBmdWxsIHBhdGggaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUg
c2NoZW1lCi0gICAgLy8gKG1vZHVsbyBzbGFzaGVzKSwgYXMgaW4gImZpbGU6Ly9jOi9mb28iLiBK
dXN0IHRyZWF0IGV2ZXJ5dGhpbmcgZnJvbQotICAgIC8vIHRoZXJlIHRvIHRoZSBlbmQgYXMgdGhl
IHBhdGguIEVtcHR5IGhvc3RzIGhhdmUgMCBsZW5ndGggaW5zdGVhZCBvZiAtMS4KLSAgICAvLyBX
ZSBpbmNsdWRlIHRoZSBsYXN0IHNsYXNoIGFzIHBhcnQgb2YgdGhlIHBhdGggaWYgdGhlcmUgaXMg
b25lLgotICAgIGRvUGFyc2VMb2NhbEZpbGUoc3BlYywKLSAgICAgICAgICAgICAgICAgICAgIG51
bVNsYXNoZXMgPiAwID8gYWZ0ZXJTY2hlbWUgKyBudW1TbGFzaGVzIC0gMSA6IGFmdGVyU2NoZW1l
LAotICAgICAgICAgICAgICAgICAgICAgc3BlY0xlbmd0aCwgcGFyc2VkKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UKLQotdm9pZCBQYXJzZUZpbGVVUkwoY29uc3QgY2hhciogdXJsLCBpbnQgdXJsTGVu
Z3RoLCBVUkxTZWdtZW50cyogcGFyc2VkKQotewotICAgIGRvUGFyc2VGaWxlVVJMKHVybCwgdXJs
TGVuZ3RoLCAqcGFyc2VkKTsKLX0KLQotdm9pZCBQYXJzZUZpbGVVUkwoY29uc3QgVUNoYXIqIHVy
bCwgaW50IHVybExlbmd0aCwgVVJMU2VnbWVudHMqIHBhcnNlZCkKLXsKLSAgICBkb1BhcnNlRmls
ZVVSTCh1cmwsIHVybExlbmd0aCwgKnBhcnNlZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFVSTFBh
cnNlcgotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFBhcnNlSW50ZXJuYWwuaCBiL1NvdXJj
ZS9XVEYvd3RmL3VybC9zcmMvVVJMUGFyc2VJbnRlcm5hbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkZTI3YWVkZDAyYTYyODMxYTYyMjU4MmIxMTRjN2M5NjFmZmU3YjBlLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3Rm
L3VybC9zcmMvVVJMUGFyc2VJbnRlcm5hbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwNyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0
cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIENvbnRh
aW5zIGNvbW1vbiBpbmxpbmUgaGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBVUkwgcGFyc2lu
ZyByb3V0aW5lcy4KLQotI2lmbmRlZiBVUkxQYXJzZUludGVybmFsX2gKLSNkZWZpbmUgVVJMUGFy
c2VJbnRlcm5hbF9oCi0KLSNpbmNsdWRlICJVUkxQYXJzZS5oIgotI2luY2x1ZGUgPHd0Zi91bmlj
b2RlL1VuaWNvZGUuaD4KLQotI2lmIFVTRShXVEZVUkwpCi0KLW5hbWVzcGFjZSBXVEYgewotCi1u
YW1lc3BhY2UgVVJMUGFyc2VyIHsKLQotLy8gV2UgdHJlYXQgc2xhc2hlcyBhbmQgYmFja3NsYXNo
ZXMgdGhlIHNhbWUgZm9yIElFIGNvbXBhdGFiaWxpdHkuCi1pbmxpbmUgYm9vbCBpc1VSTFNsYXNo
KFVDaGFyIGNoKQotewotICAgIHJldHVybiBjaCA9PSAnLycgfHwgY2ggPT0gJ1xcJzsKLX0KLQot
Ly8gUmV0dXJucyB0cnVlIGlmIHdlIHNob3VsZCB0cmltIHRoaXMgY2hhcmFjdGVyIGZyb20gdGhl
IFVSTCBiZWNhdXNlIGl0IGlzIGEKLS8vIHNwYWNlIG9yIGEgY29udHJvbCBjaGFyYWN0ZXIuCi1p
bmxpbmUgYm9vbCBzaG91bGRUcmltRnJvbVVSTChVQ2hhciBjaCkKLXsKLSAgICByZXR1cm4gY2gg
PD0gJyAnOwotfQotCi0vLyBHaXZlbiBhbiBhbHJlYWR5LWluaXRpYWxpemVkIGJlZ2luIGluZGV4
IGFuZCBsZW5ndGgsIHRoaXMgc2hyaW5rcyB0aGUgcmFuZ2UKLS8vIHRvIGVsaW1pbmF0ZSAic2hv
dWxkLWJlLXRyaW1tZWQiIGNoYXJhY3RlcnMuIE5vdGUgdGhhdCB0aGUgbGVuZ3RoIGRvZXMgKm5v
dCoKLS8vIGluZGljYXRlIHRoZSBsZW5ndGggb2YgdW50cmltbWVkIGRhdGEgZnJvbSB8KmJlZ2lu
fCwgYnV0IHJhdGhlciB0aGUgcG9zaXRpb24KLS8vIGluIHRoZSBpbnB1dCBzdHJpbmcgKHNvIHRo
ZSBzdHJpbmcgc3RhcnRzIGF0IGNoYXJhY3RlciB8KmJlZ2lufCBpbiB0aGUgc3BlYywKLS8vIGFu
ZCBnb2VzIHVudGlsIHwqbGVufCkuCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgot
aW5saW5lIHZvaWQgdHJpbVVSTChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjLCBpbnQmIGJlZ2lu
LCBpbnQmIGxlbmd0aCkKLXsKLSAgICAvLyBTdHJpcCBsZWFkaW5nIHdoaXRlc3BhY2UgYW5kIGNv
bnRyb2wgY2hhcmFjdGVycy4KLSAgICB3aGlsZSAoYmVnaW4gPCBsZW5ndGggJiYgc2hvdWxkVHJp
bUZyb21VUkwoc3BlY1tiZWdpbl0pKQotICAgICAgICArK2JlZ2luOwotCi0gICAgLy8gU3RyaXAg
dHJhaWxpbmcgd2hpdGVzcGFjZSBhbmQgY29udHJvbCBjaGFyYWN0ZXJzLiBXZSBuZWVkIHRoZSA+
aSB0ZXN0IGZvcgotICAgIC8vIHdoZW4gdGhlIGlucHV0IHN0cmluZyBpcyBhbGwgYmxhbmtzOyB3
ZSBkb24ndCB3YW50IHRvIGJhY2sgcGFzdCB0aGUgaW5wdXQuCi0gICAgd2hpbGUgKGxlbmd0aCA+
IGJlZ2luICYmIHNob3VsZFRyaW1Gcm9tVVJMKHNwZWNbbGVuZ3RoIC0gMV0pKQotICAgICAgICAt
LWxlbmd0aDsKLX0KLQotLy8gQ291bnRzIHRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgc2xhc2hl
cyBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gb2Zmc2V0Ci0vLyBpbiB0aGUgZ2l2ZW4gc3RyaW5nIG9m
IHRoZSBnaXZlbiBsZW5ndGguCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5s
aW5lIGludCBjb3VudENvbnNlY3V0aXZlU2xhc2hlcyhjb25zdCBDaGFyYWN0ZXJUeXBlICpzdHIs
IGludCBiZWdpbl9vZmZzZXQsIGludCBzdHJMZW5ndGgpCi17Ci0gICAgaW50IGNvdW50ID0gMDsK
LSAgICB3aGlsZSAoYmVnaW5fb2Zmc2V0ICsgY291bnQgPCBzdHJMZW5ndGggJiYgaXNVUkxTbGFz
aChzdHJbYmVnaW5fb2Zmc2V0ICsgY291bnRdKSkKLSAgICAgICAgKytjb3VudDsKLSAgICByZXR1
cm4gY291bnQ7Ci19Ci0KLS8vIEludGVybmFsIGZ1bmN0aW9ucyBpbiBVUkxQYXJzZXIuY2MgdGhh
dCBwYXJzZSB0aGUgcGF0aCwgdGhhdCBpcywgZXZlcnl0aGluZwotLy8gZm9sbG93aW5nIHRoZSBh
dXRob3JpdHkgc2VjdGlvbi4gVGhlIGlucHV0IGlzIHRoZSByYW5nZSBvZiBldmVyeXRoaW5nCi0v
LyBmb2xsb3dpbmcgdGhlIGF1dGhvcml0eSBzZWN0aW9uLCBhbmQgdGhlIG91dHB1dCBpcyB0aGUg
aWRlbnRpZmllZCByYW5nZXMuCi0vLwotLy8gVGhpcyBpcyBkZXNpZ25lZCBmb3IgdGhlIGZpbGUg
VVJMIHBhcnNlciBvciBvdGhlciBjb25zdW1lcnMgd2hvIG1heSBkbwotLy8gc3BlY2lhbCBzdHVm
ZiBhdCB0aGUgYmVnaW5uaW5nLCBidXQgd2FudCByZWd1bGFyIHBhdGggcGFyc2luZywgaXQganVz
dAotLy8gbWFwcyB0byB0aGUgaW50ZXJuYWwgcGFyc2luZyBmdW5jdGlvbiBmb3IgcGF0aHMuCi12
b2lkIHBhcnNlUGF0aEludGVybmFsKGNvbnN0IGNoYXIqIHNwZWMsCi0gICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFVSTENvbXBvbmVudCYgcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAg
VVJMQ29tcG9uZW50KiBmaWxlcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9u
ZW50KiBxdWVyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgVVJMQ29tcG9uZW50KiBmcmFnbWVu
dCk7Ci12b2lkIHBhcnNlUGF0aEludGVybmFsKGNvbnN0IFVDaGFyKiBzcGVjLAotICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBVUkxDb21wb25lbnQmIHBhdGgsCi0gICAgICAgICAgICAgICAg
ICAgICAgIFVSTENvbXBvbmVudCogZmlsZXBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgIFVS
TENvbXBvbmVudCogcXVlcnksCi0gICAgICAgICAgICAgICAgICAgICAgIFVSTENvbXBvbmVudCog
ZnJhZ21lbnQpOwotCi0KLS8vIEdpdmVuIGEgc3BlYyBhbmQgYSBwb2ludGVyIHRvIHRoZSBjaGFy
YWN0ZXIgYWZ0ZXIgdGhlIGNvbG9uIGZvbGxvd2luZyB0aGUKLS8vIHNjaGVtZSwgdGhpcyBwYXJz
ZXMgaXQgYW5kIGZpbGxzIGluIHRoZSBzdHJ1Y3R1cmUsIEV2ZXJ5IGl0ZW0gaW4gdGhlIHBhcnNl
ZAotLy8gc3RydWN0dXJlIGlzIGZpbGxlZCBFWENFUFQgZm9yIHRoZSBzY2hlbWUsIHdoaWNoIGlz
IHVudG91Y2hlZC4KLXZvaWQgcGFyc2VBZnRlclNjaGVtZShjb25zdCBjaGFyKiBzcGVjLCBpbnQg
c3BlY0xlbmd0aCwgaW50IGFmdGVyU2NoZW1lLCBVUkxTZWdtZW50cyYgcGFyc2VkKTsKLXZvaWQg
cGFyc2VBZnRlclNjaGVtZShjb25zdCBVQ2hhciogc3BlYywgaW50IHNwZWNMZW5ndGgsIGludCBh
ZnRlclNjaGVtZSwgVVJMU2VnbWVudHMmIHBhcnNlZCk7Ci0KLX0gLy8gbmFtZXNwYWNlIFVSTFBh
cnNlcgotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFVTRShXVEZVUkwpCi0KLSNl
bmRpZiAvLyBVUkxQYXJzZUludGVybmFsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Vy
bC9zcmMvVVJMU2VnbWVudHMuY3BwIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxTZWdtZW50
cy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0Yzk1YmUzOWI2ZDQwZDk4NTJl
NmY5NDZiMWZlNzdjNDY1YWM0MjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxTZWdtZW50cy5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotLyogQmFzZWQgb24gbnNVUkxQYXJzZXJzLmNjIGZy
b20gTW96aWxsYQotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICog
Q29weXJpZ2h0IChDKSAxOTk4IE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBPdGhlciBjb250cmlidXRvcnM6Ci0gKiAgIERhcmluIEZpc2hlciAob3JpZ2luYWwgYXV0
aG9yKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKLSAqCi0gKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMg
b2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcwotICogb2YgZWl0aGVyIHRo
ZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xLCBmb3VuZCBhdAotICogaHR0cDov
L3d3dy5tb3ppbGxhLm9yZy9NUEwvICh0aGUgIk1QTCIpIG9yIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGZvdW5kIGF0IGh0dHA6Ly93d3cuZnNmLm9yZy9j
b3B5bGVmdC9ncGwuaHRtbAotICogKHRoZSAiR1BMIiksIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zp
c2lvbnMgb2YgdGhlIE1QTCBvciB0aGUgR1BMIGFyZQotICogYXBwbGljYWJsZSBpbnN0ZWFkIG9m
IHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91cgotICogdmVyc2lv
biBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVybXMgb2Ygb25lIG9mIHRob3NlIHR3bwot
ICogbGljZW5zZXMgKHRoZSBNUEwgb3IgdGhlIEdQTCkgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMg
dG8gdXNlIHlvdXIKLSAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBMR1BMLCBpbmRp
Y2F0ZSB5b3VyIGRlY2lzaW9uIGJ5Ci0gKiBkZWxldGluZ3RoZSBwcm92aXNpb25zIGFib3ZlIGFu
ZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZAotICogb3RoZXIgcHJvdmlzaW9ucyBy
ZXF1aXJlZCBieSB0aGUgTVBMIG9yIHRoZSBHUEwsIGFzIHRoZSBjYXNlIG1heSBiZS4KLSAqIElm
IHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkg
dXNlIHlvdXIKLSAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIGFueSBvZiB0aGUgTEdQTCwg
dGhlIE1QTCBvciB0aGUgR1BMLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJVUkxTZWdtZW50cy5oIgotCi0jaWYgVVNFKFdURlVSTCkKLQotbmFtZXNwYWNlIFdURiB7Ci0K
LWludCBVUkxTZWdtZW50czo6bGVuZ3RoKCkgY29uc3QKLXsKLSAgICBpZiAoZnJhZ21lbnQuaXNW
YWxpZCgpKQotICAgICAgICByZXR1cm4gZnJhZ21lbnQuZW5kKCk7Ci0gICAgcmV0dXJuIGNoYXJh
Y3RlcnNCZWZvcmUoRnJhZ21lbnQsIERlbGltaXRlckV4Y2x1ZGVkKTsKLX0KLQotaW50IFVSTFNl
Z21lbnRzOjpjaGFyYWN0ZXJzQmVmb3JlKENvbXBvbmVudFR5cGUgdHlwZSwgRGVsaW1pdGVySW5j
bHVzaW9uIGluY2x1ZGVEZWxpbWl0ZXIpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUgPT0gU2NoZW1l
KQotICAgICAgICByZXR1cm4gc2NoZW1lLmJlZ2luKCk7Ci0KLSAgICBpbnQgY3VycmVudCA9IDA7
Ci0gICAgaWYgKHNjaGVtZS5pc1ZhbGlkKCkpCi0gICAgICAgIGN1cnJlbnQgPSBzY2hlbWUuZW5k
KCkgKyAxOyAvLyBBZHZhbmNlIG92ZXIgdGhlICc6JyBhdCB0aGUgZW5kIG9mIHRoZSBzY2hlbWUu
Ci0KLSAgICBpZiAodXNlcm5hbWUuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGlmICh0eXBlIDw9IFVz
ZXJuYW1lKQotICAgICAgICAgICAgcmV0dXJuIHVzZXJuYW1lLmJlZ2luKCk7Ci0gICAgICAgIGN1
cnJlbnQgPSB1c2VybmFtZS5lbmQoKSArIDE7IC8vIEFkdmFuY2Ugb3ZlciB0aGUgJ0AnIG9yICc6
JyBhdCB0aGUgZW5kLgotICAgIH0KLQotICAgIGlmIChwYXNzd29yZC5pc1ZhbGlkKCkpIHsKLSAg
ICAgICAgaWYgKHR5cGUgPD0gUGFzc3dvcmQpCi0gICAgICAgICAgICByZXR1cm4gcGFzc3dvcmQu
YmVnaW4oKTsKLSAgICAgICAgY3VycmVudCA9IHBhc3N3b3JkLmVuZCgpICsgMTsgLy8gQWR2YW5j
ZSBvdmVyIHRoZSAnQCcgYXQgdGhlIGVuZC4KLSAgICB9Ci0KLSAgICBpZiAoaG9zdC5pc1ZhbGlk
KCkpIHsKLSAgICAgICAgaWYgKHR5cGUgPD0gSG9zdCkKLSAgICAgICAgICAgIHJldHVybiBob3N0
LmJlZ2luKCk7Ci0gICAgICAgIGN1cnJlbnQgPSBob3N0LmVuZCgpOwotICAgIH0KLQotICAgIGlm
IChwb3J0LmlzVmFsaWQoKSkgewotICAgICAgICBpZiAodHlwZSA8IFBvcnQgfHwgKHR5cGUgPT0g
UG9ydCAmJiBpbmNsdWRlRGVsaW1pdGVyID09IERlbGltaXRlckluY2x1ZGVkKSkKLSAgICAgICAg
ICAgIHJldHVybiBwb3J0LmJlZ2luKCkgLSAxOyAvLyBCYWNrIG92ZXIgZGVsaW1pdGVyLgotICAg
ICAgICBpZiAodHlwZSA9PSBQb3J0KQotICAgICAgICAgICAgcmV0dXJuIHBvcnQuYmVnaW4oKTsg
Ly8gRG9uJ3Qgd2FudCBkZWxpbWl0ZXIgY291bnRlZC4KLSAgICAgICAgY3VycmVudCA9IHBvcnQu
ZW5kKCk7Ci0gICAgfQotCi0gICAgaWYgKHBhdGguaXNWYWxpZCgpKSB7Ci0gICAgICAgIGlmICh0
eXBlIDw9IFBhdGgpCi0gICAgICAgICAgICByZXR1cm4gcGF0aC5iZWdpbigpOwotICAgICAgICBj
dXJyZW50ID0gcGF0aC5lbmQoKTsKLSAgICB9Ci0KLSAgICBpZiAocXVlcnkuaXNWYWxpZCgpKSB7
Ci0gICAgICAgIGlmICh0eXBlIDwgUXVlcnkgfHwgKHR5cGUgPT0gUXVlcnkgJiYgaW5jbHVkZURl
bGltaXRlciA9PSBEZWxpbWl0ZXJJbmNsdWRlZCkpCi0gICAgICAgICAgICByZXR1cm4gcXVlcnku
YmVnaW4oKSAtIDE7IC8vIEJhY2sgb3ZlciBkZWxpbWl0ZXIuCi0gICAgICAgIGlmICh0eXBlID09
IFF1ZXJ5KQotICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5LmJlZ2luKCk7IC8vIERvbid0IHdhbnQg
ZGVsaW1pdGVyIGNvdW50ZWQuCi0gICAgICAgIGN1cnJlbnQgPSBxdWVyeS5lbmQoKTsKLSAgICB9
Ci0KLSAgICBpZiAoZnJhZ21lbnQuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGlmICh0eXBlID09IEZy
YWdtZW50ICYmIGluY2x1ZGVEZWxpbWl0ZXIgPT0gRGVsaW1pdGVyRXhjbHVkZWQpCi0gICAgICAg
ICAgICByZXR1cm4gZnJhZ21lbnQuYmVnaW4oKTsgLy8gQmFjayBvdmVyIGRlbGltaXRlci4KLQot
ICAgICAgICAvLyBXaGVuIHRoZXJlIGlzIGEgZnJhZ21lbnQgYW5kIHdlIGdldCBoZXJlLCB0aGUg
Y29tcG9uZW50IHdlIHdhbnRlZCB3YXMgYmVmb3JlCi0gICAgICAgIC8vIHRoaXMgYW5kIG5vdCBm
b3VuZCwgc28gd2UgYWx3YXlzIGtub3cgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnJhZ21lbnQgaXMg
cmlnaHQuCi0gICAgICAgIHJldHVybiBmcmFnbWVudC5iZWdpbigpIC0gMTsgLy8gRG9uJ3Qgd2Fu
dCBkZWxpbWl0ZXIgY291bnRlZC4KLSAgICB9Ci0KLSAgICByZXR1cm4gY3VycmVudDsKLX0KLQot
dm9pZCBVUkxTZWdtZW50czo6bW92ZUZyb21Db21wb25lbnRCeShDb21wb25lbnRUeXBlIHR5cGUs
IGludCBvZmZzZXQpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgLy8gRmFsbCB0aHJvdWdo
LgotICAgIGNhc2UgU2NoZW1lOgotICAgICAgICBzY2hlbWUubW92ZUJ5KG9mZnNldCk7Ci0gICAg
Y2FzZSBVc2VybmFtZToKLSAgICAgICAgdXNlcm5hbWUubW92ZUJ5KG9mZnNldCk7Ci0gICAgY2Fz
ZSBQYXNzd29yZDoKLSAgICAgICAgcGFzc3dvcmQubW92ZUJ5KG9mZnNldCk7Ci0gICAgY2FzZSBI
b3N0OgotICAgICAgICBob3N0Lm1vdmVCeShvZmZzZXQpOwotICAgIGNhc2UgUG9ydDoKLSAgICAg
ICAgcG9ydC5tb3ZlQnkob2Zmc2V0KTsKLSAgICBjYXNlIFBhdGg6Ci0gICAgICAgIHBhdGgubW92
ZUJ5KG9mZnNldCk7Ci0gICAgY2FzZSBRdWVyeToKLSAgICAgICAgcXVlcnkubW92ZUJ5KG9mZnNl
dCk7Ci0gICAgY2FzZSBGcmFnbWVudDoKLSAgICAgICAgZnJhZ21lbnQubW92ZUJ5KG9mZnNldCk7
Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFVTRShXVEZVUkwp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFNlZ21lbnRzLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi91cmwvc3JjL1VSTFNlZ21lbnRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDk3MWVlYzM5MDE4MDc0ZjZjOGFiMzJiYWQyNjdhZmRjM2MxMGMxNTkuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvdXJs
L3NyYy9VUkxTZWdtZW50cy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgMjAwNyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24u
Ci0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVVJMU2VnbWVu
dHNfaAotI2RlZmluZSBVUkxTZWdtZW50c19oCi0KLSNpbmNsdWRlICJVUkxDb21wb25lbnQuaCIK
LSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQot
I2lmIFVTRShXVEZVUkwpCi0KLW5hbWVzcGFjZSBXVEYgewotCi1jbGFzcyBVUkxTZWdtZW50czsK
LQotLy8gQSBzdHJ1Y3R1cmUgdGhhdCBob2xkcyB0aGUgaWRlbnRpZmllZCBwYXJ0cyBvZiBhbiBp
bnB1dCBVUkwuIFRoaXMgc3RydWN0dXJlCi0vLyBkb2VzIE5PVCBzdG9yZSB0aGUgVVJMIGl0c2Vs
Zi4gVGhlIGNhbGxlciB3aWxsIGhhdmUgdG8gc3RvcmUgdGhlIFVSTCB0ZXh0Ci0vLyBhbmQgaXRz
IGNvcnJlc3BvbmRpbmcgUGFyc2VkIHN0cnVjdHVyZSBzZXBhcmF0ZWx5LgotY2xhc3MgVVJMU2Vn
bWVudHMgewotcHVibGljOgotICAgIC8vIElkZW50aWZpZXMgZGlmZmVyZW50IGNvbXBvbmVudHMu
Ci0gICAgZW51bSBDb21wb25lbnRUeXBlIHsKLSAgICAgICAgU2NoZW1lLAotICAgICAgICBVc2Vy
bmFtZSwKLSAgICAgICAgUGFzc3dvcmQsCi0gICAgICAgIEhvc3QsCi0gICAgICAgIFBvcnQsCi0g
ICAgICAgIFBhdGgsCi0gICAgICAgIFF1ZXJ5LAotICAgICAgICBGcmFnbWVudCwKLSAgICB9Owot
ICAgIGVudW0gRGVsaW1pdGVySW5jbHVzaW9uIHsKLSAgICAgICAgRGVsaW1pdGVyRXhjbHVkZWQs
Ci0gICAgICAgIERlbGltaXRlckluY2x1ZGVkCi0gICAgfTsKLQotICAgIFVSTFNlZ21lbnRzKCkg
eyB9Ci0KLSAgICBVUkxTZWdtZW50cyhjb25zdCBVUkxTZWdtZW50cyYgb3RoZXJTZWdtZW50KQot
ICAgIHsKLSAgICAgICAgKnRoaXMgPSBvdGhlclNlZ21lbnQ7Ci0gICAgfQotCi0gICAgVVJMU2Vn
bWVudHMmIG9wZXJhdG9yPShjb25zdCBVUkxTZWdtZW50cyYgb3RoZXJTZWdtZW50KQotICAgIHsK
LSAgICAgICAgc2NoZW1lID0gb3RoZXJTZWdtZW50LnNjaGVtZTsKLSAgICAgICAgdXNlcm5hbWUg
PSBvdGhlclNlZ21lbnQudXNlcm5hbWU7Ci0gICAgICAgIHBhc3N3b3JkID0gb3RoZXJTZWdtZW50
LnBhc3N3b3JkOwotICAgICAgICBob3N0ID0gb3RoZXJTZWdtZW50Lmhvc3Q7Ci0gICAgICAgIHBv
cnQgPSBvdGhlclNlZ21lbnQucG9ydDsKLSAgICAgICAgcGF0aCA9IG90aGVyU2VnbWVudC5wYXRo
OwotICAgICAgICBxdWVyeSA9IG90aGVyU2VnbWVudC5xdWVyeTsKLSAgICAgICAgZnJhZ21lbnQg
PSBvdGhlclNlZ21lbnQuZnJhZ21lbnQ7Ci0gICAgICAgIGlmIChvdGhlclNlZ21lbnQubV9pbm5l
clVSTFNlZ21lbnRzKQotICAgICAgICAgICAgbV9pbm5lclVSTFNlZ21lbnRzID0gYWRvcHRQdHIo
bmV3IFVSTFNlZ21lbnRzKCpvdGhlclNlZ21lbnQubV9pbm5lclVSTFNlZ21lbnRzKSk7Ci0gICAg
ICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJucyB0aGUgbGVuZ3Ro
IG9mIHRoZSBVUkwgKHRoZSBlbmQgb2YgdGhlIGxhc3QgY29tcG9uZW50KS4KLSAgICAvLwotICAg
IC8vIE5vdGUgdGhhdCBmb3Igc29tZSBpbnZhbGlkLCBub24tY2Fub25pY2FsIFVSTHMsIHRoaXMg
bWF5IG5vdCBiZSB0aGUgbGVuZ3RoCi0gICAgLy8gb2YgdGhlIHN0cmluZy4gRm9yIGV4YW1wbGUg
Imh0dHA6Ly8iOiB0aGUgcGFyc2VkIHN0cnVjdHVyZSB3aWxsIG9ubHkKLSAgICAvLyBjb250YWlu
IGFuIGVudHJ5IGZvciB0aGUgZm91ci1jaGFyYWN0ZXIgc2NoZW1lLCBhbmQgaXQgZG9lc24ndCBr
bm93IGFib3V0Ci0gICAgLy8gdGhlICI6Ly8iLiBGb3IgYWxsIG90aGVyIGxhc3QtY29tcG9uZW50
cywgaXQgd2lsbCByZXR1cm4gdGhlIHJlYWwgbGVuZ3RoLgotICAgIGludCBsZW5ndGgoKSBjb25z
dDsKLQotICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGJlZm9yZSB0aGUg
Z2l2ZW4gY29tcG9uZW50IGlmIGl0IGV4aXN0cywKLSAgICAvLyBvciB3aGVyZSB0aGUgY29tcG9u
ZW50IHdvdWxkIGJlIGlmIGl0IGRpZCBleGlzdC4gVGhpcyB3aWxsIHJldHVybiB0aGUKLSAgICAv
LyBzdHJpbmcgbGVuZ3RoIGlmIHRoZSBjb21wb25lbnQgd291bGQgYmUgYXBwZW5kZWQgdG8gdGhl
IGVuZC4KLSAgICAvLwotICAgIC8vIE5vdGUgdGhhdCB0aGlzIGNhbiBnZXQgYSBsaXR0bGUgZnVu
bnkgZm9yIHRoZSBwb3J0LCBxdWVyeSwgYW5kIGZyYWdtZW50Ci0gICAgLy8gY29tcG9uZW50cyB3
aGljaCBoYXZlIGEgZGVsaW1pdGVyIHRoYXQgaXMgbm90IGNvdW50ZWQgYXMgcGFydCBvZiB0aGUK
LSAgICAvLyBjb21wb25lbnQuIFRoZSB8aW5jbHVkZURlbGltaXRlcnwgZmxhZyBjb250cm9scyBp
ZiB5b3Ugd2FudCB0aGlzIGNvdW50ZWQKLSAgICAvLyBhcyBwYXJ0IG9mIHRoZSBjb21wb25lbnQg
b3Igbm90IHdoZW4gdGhlIGNvbXBvbmVudCBleGlzdHMuCi0gICAgLy8KLSAgICAvLyBUaGlzIGV4
YW1wbGUgc2hvd3MgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIGZsYWdzIGZvciB0d28g
b2YgdGhlc2UKLSAgICAvLyBkZWxpbWl0ZWQgY29tcG9uZW50cyB0aGF0IGlzIHByZXNlbnQgKHRo
ZSBwb3J0IGFuZCBxdWVyeSkgYW5kIG9uZSB0aGF0Ci0gICAgLy8gaXNuJ3QgKHRoZSByZWZlcmVu
Y2UpLiBUaGUgY29tcG9uZW50cyB0aGF0IHRoaXMgZmxhZyBhZmZlY3RzIGFyZSBtYXJrZWQKLSAg
ICAvLyB3aXRoIGEgKi4KLSAgICAvLyAgICAgICAgICAgICAgICAgMCAgICAgICAgIDEgICAgICAg
ICAyCi0gICAgLy8gICAgICAgICAgICAgICAgIDAxMjM0NTY3ODkwMTIzNDU2Nzg5MAotICAgIC8v
IEV4YW1wbGUgaW5wdXQ6IGh0dHA6Ly9mb286ODAvP3F1ZXJ5Ci0gICAgLy8gICAgICAgICAgICAg
IGluY2x1ZGVfZGVsaW09dHJ1ZSwgIC4uLj1mYWxzZSAgKCI8LSIgaW5kaWNhdGVzIGRpZmZlcmVu
dCkKLSAgICAvLyAgICAgIFNjaGVtZTogMCAgICAgICAgICAgICAgICAgICAgMAotICAgIC8vICAg
IFVzZXJuYW1lOiA1ICAgICAgICAgICAgICAgICAgICA1Ci0gICAgLy8gICAgUGFzc3dvcmQ6IDUg
ICAgICAgICAgICAgICAgICAgIDUKLSAgICAvLyAgICAgICAgSG9zdDogNyAgICAgICAgICAgICAg
ICAgICAgNwotICAgIC8vICAgICAgICpQb3J0OiAxMCAgICAgICAgICAgICAgICAgICAxMSA8LQot
ICAgIC8vICAgICAgICBQYXRoOiAxMyAgICAgICAgICAgICAgICAgICAxMwotICAgIC8vICAgICAg
KlF1ZXJ5OiAxNCAgICAgICAgICAgICAgICAgICAxNSA8LQotICAgIC8vICAgICAgICAqRnJhZ21l
bnQ6IDIwICAgICAgICAgICAgICAgICAgIDIwCi0gICAgLy8KLSAgICBpbnQgY2hhcmFjdGVyc0Jl
Zm9yZShDb21wb25lbnRUeXBlLCBEZWxpbWl0ZXJJbmNsdXNpb24pIGNvbnN0OwotCi0gICAgLy8g
U2hpZnQgYWxsIHRoZSBjb21wb25lbnRzIGZyb20gJ2ZpcnN0Q29tcG9uZW50JyB0byB0aGUgbGFz
dCBjb21wb25lbnQgYnkgJ29mZnNldCcuCi0gICAgdm9pZCBtb3ZlRnJvbUNvbXBvbmVudEJ5KENv
bXBvbmVudFR5cGUgZmlyc3RDb21wb25lbnQsIGludCBvZmZzZXQpOwotCi0gICAgLy8gRWFjaCBj
b21wb25lbnQgZXhjbHVkZXMgdGhlIHJlbGF0ZWQgZGVsaW1pdGVycyBhbmQgaGFzIGEgbGVuZ3Ro
IG9mIC0xCi0gICAgLy8gaWYgdGhhdCBjb21wb25lbnQgaXMgYWJzZW50IGJ1dCAwIGlmIHRoZSBj
b21wb25lbnQgZXhpc3RzIGJ1dCBpcyBlbXB0eS4KLSAgICBVUkxDb21wb25lbnQgc2NoZW1lOwot
ICAgIFVSTENvbXBvbmVudCB1c2VybmFtZTsKLSAgICBVUkxDb21wb25lbnQgcGFzc3dvcmQ7Ci0g
ICAgVVJMQ29tcG9uZW50IGhvc3Q7Ci0gICAgVVJMQ29tcG9uZW50IHBvcnQ7Ci0gICAgVVJMQ29t
cG9uZW50IHBhdGg7Ci0gICAgVVJMQ29tcG9uZW50IHF1ZXJ5OwotICAgIFVSTENvbXBvbmVudCBm
cmFnbWVudDsKLQotICAgIC8vIEZJWE1FOiB0aGlzIGlzIGEgZGFtbiB1Z2x5IEFQSSBhbmQgaXMg
YmFzaWNhbGx5IHVudGVzdGVkLgotICAgIGNvbnN0IFVSTFNlZ21lbnRzKiBpbm5lclVSTFNlZ21l
bnRzKCkgY29uc3QgeyByZXR1cm4gbV9pbm5lclVSTFNlZ21lbnRzLmdldCgpOyB9Ci0gICAgdm9p
ZCBzZXRJbm5lclVSTFNlZ21lbnRzKGNvbnN0IFVSTFNlZ21lbnRzJiB1cmxTZWdtZW50cykgeyBt
X2lubmVyVVJMU2VnbWVudHMgPSBhZG9wdFB0cihuZXcgVVJMU2VnbWVudHModXJsU2VnbWVudHMp
KTsgfQotICAgIHZvaWQgY2xlYXJJbm5lclVSTFNlZ21lbnRzKCkgeyByZXR1cm4gbV9pbm5lclVS
TFNlZ21lbnRzLmNsZWFyKCk7IH0KLQotcHJpdmF0ZToKLSAgICAvLyBUaGUgRmlsZXN5c3RlbSBB
UEkgZGVzY3JpYmUgYSBVUkwgZm9ybWF0IHdpdGggYW4gaW50ZXJuYWwgVVJMLiBFLmcuOiBmaWxl
c3lzdGVtOmh0dHA6Ly93d3cuYXBwbGUuY29tLwotICAgIC8vIFRoZSBpbm5lciBVUkwgc2VnbWVu
dCBjb250YWlucyB0aGUgcGFyc2VkIGlubmVyIFVSTCBvZiBhIGZpbGVzeXN0ZW06IFVSTC4KLSAg
ICBPd25QdHI8VVJMU2VnbWVudHM+IG1faW5uZXJVUkxTZWdtZW50czsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gVVNFKFdURlVSTCkKLQotI2VuZGlmIC8vIFVSTFNlZ21l
bnRzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMVXRpbC5jcHAgYi9T
b3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFV0aWwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAzM2ZhMGU4YWE2M2I4NTQ3YmY2MTAzNGE4NjVmY2M1ZGI0ZTcxZTkyLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL3Vy
bC9zcmMvVVJMVXRpbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NzMgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAyMDA3IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlVSTFV0aWwuaCIKLQotI2luY2x1ZGUgIlJhd1VSTEJ1ZmZlci5oIgotI2lu
Y2x1ZGUgIlVSTENhbm9uSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJVUkxGaWxlLmgiCi0jaW5jbHVk
ZSAiVVJMVXRpbEludGVybmFsLmgiCi0jaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KLQotI2lm
IFVTRShXVEZVUkwpCi0KLW5hbWVzcGFjZSBXVEYgewotCi1uYW1lc3BhY2UgVVJMVXRpbGl0aWVz
IHsKLQotY29uc3QgY2hhciBrRmlsZVNjaGVtZVtdID0gImZpbGUiOwotY29uc3QgY2hhciBrRmls
ZVN5c3RlbVNjaGVtZVtdID0gImZpbGVzeXN0ZW0iOwotY29uc3QgY2hhciBrTWFpbHRvU2NoZW1l
W10gPSAibWFpbHRvIjsKLQotbmFtZXNwYWNlIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSXRlcj4K
LXN0YXRpYyBib29sIGxvd2VyQ2FzZUVxdWFsc0FTQ0lJKEl0ZXIgYUJlZ2luLCBJdGVyIGFFbmQs
IGNvbnN0IGNoYXIqIGIpCi17Ci0gICAgZm9yIChJdGVyIGl0ID0gYUJlZ2luOyBpdCAhPSBhRW5k
OyArK2l0LCArK2IpIHsKLSAgICAgICAgaWYgKCEqYiB8fCB0b0FTQ0lJTG93ZXIoKml0KSAhPSAq
YikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuICEoKmIpOwot
fQotCi1jb25zdCBpbnQga051bVN0YW5kYXJkVVJMU2NoZW1lcyA9IDg7Ci1jb25zdCBjaGFyKiBr
U3RhbmRhcmRVUkxTY2hlbWVzW2tOdW1TdGFuZGFyZFVSTFNjaGVtZXNdID0gewotICAgICJodHRw
IiwKLSAgICAiaHR0cHMiLAotICAgIGtGaWxlU2NoZW1lLCAvLyBZZXMsIGZpbGUgdXJscyBjYW4g
aGF2ZSBhIGhvc3RuYW1lIQotICAgICJmdHAiLAotICAgICJnb3BoZXIiLAotICAgICJ3cyIsIC8v
IFdlYlNvY2tldC4KLSAgICAid3NzIiwgLy8gV2ViU29ja2V0IHNlY3VyZS4KLSAgICBrRmlsZVN5
c3RlbVNjaGVtZQotfTsKLQotLy8gR2l2ZW4gYSBzdHJpbmcgYW5kIGEgcmFuZ2UgaW5zaWRlIHRo
ZSBzdHJpbmcsIGNvbXBhcmVzIGl0IHRvIHRoZSBnaXZlbgotLy8gbG93ZXItY2FzZSB8Y29tcGFy
ZVRvfCBidWZmZXIuCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotaW5saW5lIGJv
b2wgZG9Db21wYXJlU2NoZW1lQ29tcG9uZW50KGNvbnN0IENoYXJhY3RlclR5cGUqIHNwZWMsIGNv
bnN0IFVSTENvbXBvbmVudCYgY29tcG9uZW50LCBjb25zdCBjaGFyKiBjb21wYXJlVG8pCi17Ci0g
ICAgaWYgKCFjb21wb25lbnQuaXNOb25FbXB0eSgpKQotICAgICAgICByZXR1cm4gIWNvbXBhcmVU
b1swXTsgLy8gV2hlbiBjb21wb25lbnQgaXMgZW1wdHksIG1hdGNoIGVtcHR5IHNjaGVtZS4KLSAg
ICByZXR1cm4gbG93ZXJDYXNlRXF1YWxzQVNDSUkoJnNwZWNbY29tcG9uZW50LmJlZ2luKCldLCAm
c3BlY1tjb21wb25lbnQuZW5kKCldLCBjb21wYXJlVG8pOwotfQotCi0vLyBSZXR1cm5zIHRydWUg
aWYgdGhlIGdpdmVuIHNjaGVtZSBpZGVudGlmaWVkIGJ5IHxzY2hlbWV8IHdpdGhpbiB8c3BlY3wg
aXMgb25lCi0vLyBvZiB0aGUgcmVnaXN0ZXJlZCAic3RhbmRhcmQiIHNjaGVtZXMuCi10ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBkb0lzU3RhbmRhcmQoY29uc3QgQ2hhcmFj
dGVyVHlwZSogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiBzY2hlbWUpCi17Ci0gICAgaWYgKCFz
Y2hlbWUuaXNOb25FbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEVtcHR5IG9yIGlu
dmFsaWQgc2NoZW1lcyBhcmUgbm9uLXN0YW5kYXJkLgotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBrTnVtU3RhbmRhcmRVUkxTY2hlbWVzOyArK2kpIHsKLSAgICAgICAgaWYgKGxvd2VyQ2FzZUVx
dWFsc0FTQ0lJKCZzcGVjW3NjaGVtZS5iZWdpbigpXSwgJnNwZWNbc2NoZW1lLmVuZCgpXSwga1N0
YW5kYXJkVVJMU2NoZW1lc1tpXSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgot
Ym9vbCBkb0ZpbmRBbmRDb21wYXJlU2NoZW1lKGNvbnN0IENoYXJhY3RlclR5cGUqIHN0ciwgaW50
IHN0ckxlbmd0aCwgY29uc3QgY2hhciogY29tcGFyZSwgVVJMQ29tcG9uZW50KiBmb3VuZFNjaGVt
ZSkKLXsKLSAgICAvLyBCZWZvcmUgZXh0cmFjdGluZyBzY2hlbWUsIGNhbm9uaWNhbGl6ZSB0aGUg
VVJMIHRvIHJlbW92ZSBhbnkgd2hpdGVzcGFjZS4KLSAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIGNh
bm9uaWNhbGl6YXRpb24gZG9uZSBpbiBkb0Nhbm9uaWNhbGl6ZSBmdW5jdGlvbi4KLSAgICBSYXdV
UkxCdWZmZXI8Q2hhcmFjdGVyVHlwZT4gd2hpdGVzcGFjZUJ1ZmZlcjsKLSAgICBpbnQgc3BlY0xl
bmd0aDsKLSAgICBjb25zdCBDaGFyYWN0ZXJUeXBlKiBzcGVjID0gVVJMQ2Fub25pY2FsaXplcjo6
cmVtb3ZlVVJMV2hpdGVzcGFjZShzdHIsIHN0ckxlbmd0aCwgd2hpdGVzcGFjZUJ1ZmZlciwgc3Bl
Y0xlbmd0aCk7Ci0KLSAgICBVUkxDb21wb25lbnQgb3VyU2NoZW1lOwotICAgIGlmICghVVJMUGFy
c2VyOjpFeHRyYWN0U2NoZW1lKHNwZWMsIHNwZWNMZW5ndGgsICZvdXJTY2hlbWUpKSB7Ci0gICAg
ICAgIC8vIE5vIHNjaGVtZS4KLSAgICAgICAgaWYgKGZvdW5kU2NoZW1lKQotICAgICAgICAgICAg
KmZvdW5kU2NoZW1lID0gVVJMQ29tcG9uZW50KCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgaWYgKGZvdW5kU2NoZW1lKQotICAgICAgICAqZm91bmRTY2hlbWUgPSBvdXJTY2hl
bWU7Ci0gICAgcmV0dXJuIGRvQ29tcGFyZVNjaGVtZUNvbXBvbmVudChzcGVjLCBvdXJTY2hlbWUs
IGNvbXBhcmUpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBk
b0Nhbm9uaWNhbGl6ZShjb25zdCBDaGFyYWN0ZXJUeXBlKiBpblNwZWMsIGludCBpblNwZWNMZW5n
dGgsCi0gICAgICAgICAgICAgICAgICAgIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciogY2hhcnNl
dENvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQs
IFVSTFNlZ21lbnRzJiBvdXB1dFBhcnNlZCkKLXsKLSAgICAvLyBSZW1vdmUgYW55IHdoaXRlc3Bh
Y2UgZnJvbSB0aGUgbWlkZGxlIG9mIHRoZSByZWxhdGl2ZSBVUkwsIHBvc3NpYmx5Ci0gICAgLy8g
Y29weWluZyB0byB0aGUgbmV3IGJ1ZmZlci4KLSAgICBSYXdVUkxCdWZmZXI8Q2hhcmFjdGVyVHlw
ZT4gd2hpdGVzcGFjZUJ1ZmZlcjsKLSAgICBpbnQgc3BlY0xlbmd0aDsKLSAgICBjb25zdCBDaGFy
YWN0ZXJUeXBlKiBzcGVjID0gVVJMQ2Fub25pY2FsaXplcjo6cmVtb3ZlVVJMV2hpdGVzcGFjZShp
blNwZWMsIGluU3BlY0xlbmd0aCwgd2hpdGVzcGFjZUJ1ZmZlciwgc3BlY0xlbmd0aCk7Ci0KLSAg
ICBVUkxTZWdtZW50cyBwYXJzZWRJbnB1dDsKLSNpZiBPUyhXSU5ET1dTKQotICAgIC8vIEZvciBX
aW5kb3dzLCB3ZSBhbGxvdyB0aGluZ3MgdGhhdCBsb29rIGxpa2UgYWJzb2x1dGUgV2luZG93cyBw
YXRocyB0byBiZQotICAgIC8vIGZpeGVkIHVwIG1hZ2ljYWxseSB0byBmaWxlIFVSTHMuIFRoaXMg
aXMgZG9uZSBmb3IgSUUgY29tcGF0YWJpbGl0eS4gRm9yCi0gICAgLy8gZXhhbXBsZSwgdGhpcyB3
aWxsIGNoYW5nZSAiYzovZm9vIiBpbnRvIGEgZmlsZSBVUkwgcmF0aGVyIHRoYW4gdHJlYXRpbmcK
LSAgICAvLyBpdCBhcyBhIFVSTCB3aXRoIHRoZSBwcm90b2NvbCAiYyIuIEl0IGFsc28gd29ya3Mg
Zm9yIFVOQyAoIlxcZm9vXGJhci50eHQiKS4KLSAgICAvLyBUaGVyZSBpcyBzaW1pbGFyIGxvZ2lj
IGluIFVSTENhbm9uaWNhbGl6ZXJfcmVsYXRpdmUuY2MgZm9yCi0gICAgLy8KLSAgICAvLyBGb3Ig
TWF4ICYgVW5peCwgd2UgZG9uJ3QgZG8gdGhpcyAodGhlIGVxdWl2YWxlbnQgd291bGQgYmUgIi9m
b28vYmFyIiB3aGljaAotICAgIC8vIGhhcyBubyBtZWFuaW5nIGFzIGFuIGFic29sdXRlIHBhdGgg
bmFtZS4gVGhpcyBpcyBiZWNhdXNlIGJyb3dzZXJzIG9uIE1hYwotICAgIC8vICYgVW5peCBkb24n
dCBnZW5lcmFsbHkgZG8gdGhpcywgc28gdGhlcmUgaXMgbm8gY29tcGF0aWJpbGl0eSByZWFzb24g
Zm9yCi0gICAgLy8gZG9pbmcgc28uCi0gICAgaWYgKFVSTFBhcnNlcjo6ZG9lc0JlZ2luVU5DUGF0
aChzcGVjLCAwLCBzcGVjTGVuZ3RoLCBmYWxzZSkKLSAgICAgICAgfHwgVVJMUGFyc2VyOjpkb2Vz
QmVnaW5XaW5kb3dzRHJpdmVTcGVjKHNwZWMsIDAsIHNwZWNMZW5ndGgpKSB7Ci0gICAgICAgIFVS
TFBhcnNlcjo6UGFyc2VGaWxlVVJMKHNwZWMsIHNwZWNMZW5ndGgsICZwYXJzZWRJbnB1dCk7Ci0g
ICAgICAgIHJldHVybiBVUkxDYW5vbmljYWxpemVyOjpDYW5vbmljYWxpemVGaWxlVVJMKHNwZWMs
IHNwZWNMZW5ndGgsIHBhcnNlZElucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0Q29udmVydGVyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQsICpvdXB1dFBhcnNl
ZCk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBVUkxDb21wb25lbnQgc2NoZW1lOwotICAgIGlmICgh
VVJMUGFyc2VyOjpFeHRyYWN0U2NoZW1lKHNwZWMsIHNwZWNMZW5ndGgsICZzY2hlbWUpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBUaGlzIGlzIHRoZSBwYXJzZWQgdmVyc2lvbiBv
ZiB0aGUgaW5wdXQgVVJMLCB3ZSBoYXZlIHRvIGNhbm9uaWNhbGl6ZSBpdAotICAgIC8vIGJlZm9y
ZSBzdG9yaW5nIGl0IGluIG91ciBvYmplY3QuCi0gICAgYm9vbCBzdWNjZXNzOwotICAgIGlmIChk
b0NvbXBhcmVTY2hlbWVDb21wb25lbnQoc3BlYywgc2NoZW1lLCBrRmlsZVNjaGVtZSkpIHsKLSAg
ICAgICAgLy8gRmlsZSBVUkxzIGFyZSBzcGVjaWFsLgotICAgICAgICBVUkxQYXJzZXI6OlBhcnNl
RmlsZVVSTChzcGVjLCBzcGVjTGVuZ3RoLCAmcGFyc2VkSW5wdXQpOwotICAgICAgICBzdWNjZXNz
ID0gVVJMQ2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXplRmlsZVVSTChzcGVjLCBzcGVjTGVuZ3Ro
LCBwYXJzZWRJbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhcnNldENvbnZlcnRlciwgb3V0cHV0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3VwdXRQYXJzZWQpOwot
ICAgIH0gZWxzZSBpZiAoZG9Db21wYXJlU2NoZW1lQ29tcG9uZW50KHNwZWMsIHNjaGVtZSwga0Zp
bGVTeXN0ZW1TY2hlbWUpKSB7Ci0gICAgICAgIC8vIEZpbGVzeXN0ZW0gVVJMcyBhcmUgc3BlY2lh
bC4KLSAgICAgICAgVVJMUGFyc2VyOjpQYXJzZUZpbGVTeXN0ZW1VUkwoc3BlYywgc3BlY0xlbmd0
aCwgJnBhcnNlZElucHV0KTsKLSAgICAgICAgc3VjY2VzcyA9IFVSTENhbm9uaWNhbGl6ZXI6OmNh
bm9uaWNhbGl6ZUZpbGVTeXN0ZW1VUkwoc3BlYywgcGFyc2VkSW5wdXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXRD
b252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHB1dCwgb3VwdXRQYXJzZWQpOwotCi0gICAgfSBlbHNlIGlmIChk
b0lzU3RhbmRhcmQoc3BlYywgc2NoZW1lKSkgewotICAgICAgICAvLyBBbGwgIm5vcm1hbCIgVVJM
cy4KLSAgICAgICAgVVJMUGFyc2VyOjpQYXJzZVN0YW5kYXJkVVJMKHNwZWMsIHNwZWNMZW5ndGgs
ICZwYXJzZWRJbnB1dCk7Ci0gICAgICAgIHN1Y2Nlc3MgPSBVUkxDYW5vbmljYWxpemVyOjpDYW5v
bmljYWxpemVTdGFuZGFyZFVSTChzcGVjLCBzcGVjTGVuZ3RoLCBwYXJzZWRJbnB1dCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YXJzZXRDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRwdXQsICZvdXB1dFBhcnNlZCk7Ci0KLSAgICB9IGVsc2Ug
aWYgKGRvQ29tcGFyZVNjaGVtZUNvbXBvbmVudChzcGVjLCBzY2hlbWUsIGtNYWlsdG9TY2hlbWUp
KSB7Ci0gICAgICAgIC8vIE1haWx0byBhcmUgdHJlYXRlZCBsaWtlIGEgc3RhbmRhcmQgdXJsIHdp
dGggb25seSBhIHNjaGVtZSwgcGF0aCwgcXVlcnkKLSAgICAgICAgVVJMUGFyc2VyOjpQYXJzZU1h
aWx0b1VSTChzcGVjLCBzcGVjTGVuZ3RoLCAmcGFyc2VkSW5wdXQpOwotICAgICAgICBzdWNjZXNz
ID0gVVJMQ2Fub25pY2FsaXplcjo6Y2Fub25pY2FsaXplTWFpbHRvVVJMKHNwZWMsIHBhcnNlZElu
cHV0LCBvdXRwdXQsIG91cHV0UGFyc2VkKTsKLQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vICJX
ZWlyZCIgVVJMcyBsaWtlIGRhdGE6IGFuZCBqYXZhc2NyaXB0OgotICAgICAgICBVUkxQYXJzZXI6
OlBhcnNlUGF0aFVSTChzcGVjLCBzcGVjTGVuZ3RoLCAmcGFyc2VkSW5wdXQpOwotICAgICAgICBz
dWNjZXNzID0gVVJMQ2Fub25pY2FsaXplcjo6Y2Fub25pY2FsaXplUGF0aFVSTChzcGVjLCBwYXJz
ZWRJbnB1dCwgb3V0cHV0LCBvdXB1dFBhcnNlZCk7Ci0gICAgfQotICAgIHJldHVybiBzdWNjZXNz
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotYm9vbCBkb1Jlc29sdmVS
ZWxhdGl2ZShjb25zdCBjaGFyKiBiYXNlU3BlYywgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJz
ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIGluUmVsYXRp
dmUsIGludCBpblJlbGF0aXZlTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICBVUkxRdWVy
eUNoYXJzZXRDb252ZXJ0ZXIqIGNoYXJzZXRDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxTZWdtZW50cyogb3VwdXRQYXJzZWQpCi17
Ci0gICAgLy8gUmVtb3ZlIGFueSB3aGl0ZXNwYWNlIGZyb20gdGhlIG1pZGRsZSBvZiB0aGUgcmVs
YXRpdmUgVVJMLCBwb3NzaWJseQotICAgIC8vIGNvcHlpbmcgdG8gdGhlIG5ldyBidWZmZXIuCi0g
ICAgUmF3VVJMQnVmZmVyPENoYXJhY3RlclR5cGU+IHdoaXRlc3BhY2VCdWZmZXI7Ci0gICAgaW50
IHJlbGF0aXZlTGVuZ3RoOwotICAgIGNvbnN0IENoYXJhY3RlclR5cGUqIHJlbGF0aXZlID0gVVJM
Q2Fub25pY2FsaXplcjo6cmVtb3ZlVVJMV2hpdGVzcGFjZShpblJlbGF0aXZlLCBpblJlbGF0aXZl
TGVuZ3RoLCB3aGl0ZXNwYWNlQnVmZmVyLCByZWxhdGl2ZUxlbmd0aCk7Ci0KLSAgICAvLyBTZWUg
aWYgb3VyIGJhc2UgVVJMIHNob3VsZCBiZSB0cmVhdGVkIGFzICJzdGFuZGFyZCIuCi0gICAgYm9v
bCBzdGFuZGFyZEJhc2VTY2hlbWUgPSBiYXNlUGFyc2VkLnNjaGVtZS5pc05vbkVtcHR5KCkgJiYg
ZG9Jc1N0YW5kYXJkKGJhc2VTcGVjLCBiYXNlUGFyc2VkLnNjaGVtZSk7Ci0KLSAgICBib29sIGlz
UmVsYXRpdmU7Ci0gICAgVVJMQ29tcG9uZW50IHJlbGF0aXZlQ29tcG9uZW50OwotICAgIGlmICgh
VVJMQ2Fub25pY2FsaXplcjo6aXNSZWxhdGl2ZVVSTChiYXNlU3BlYywgYmFzZVBhcnNlZCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmUsIHJlbGF0aXZl
TGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFuZGFy
ZEJhc2VTY2hlbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlz
UmVsYXRpdmUsIHJlbGF0aXZlQ29tcG9uZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBF
cnJvciByZXNvbHZpbmcuCi0KLSAgICBpZiAoaXNSZWxhdGl2ZSkgewotICAgICAgICAvLyBSZWxh
dGl2ZSwgcmVzb2x2ZSBhbmQgY2Fub25pY2FsaXplLgotICAgICAgICBib29sIGZpbGVCYXNlU2No
ZW1lID0gYmFzZVBhcnNlZC5zY2hlbWUuaXNOb25FbXB0eSgpICYmIGRvQ29tcGFyZVNjaGVtZUNv
bXBvbmVudChiYXNlU3BlYywgYmFzZVBhcnNlZC5zY2hlbWUsIGtGaWxlU2NoZW1lKTsKLSAgICAg
ICAgcmV0dXJuIFVSTENhbm9uaWNhbGl6ZXI6OnJlc29sdmVSZWxhdGl2ZVVSTChiYXNlU3BlYywg
YmFzZVBhcnNlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmaWxlQmFzZVNjaGVtZSwgcmVsYXRpdmUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVDb21wb25lbnQsIGNoYXJzZXRD
b252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0cHV0LCBvdXB1dFBhcnNlZCk7Ci0gICAgfQotCi0gICAgLy8gTm90IHJlbGF0aXZl
LCBjYW5vbmljYWxpemUgdGhlIGlucHV0LgotICAgIHJldHVybiBkb0Nhbm9uaWNhbGl6ZShyZWxh
dGl2ZSwgcmVsYXRpdmVMZW5ndGgsIGNoYXJzZXRDb252ZXJ0ZXIsIG91dHB1dCwgKm91cHV0UGFy
c2VkKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLWJvb2wgZG9SZXBs
YWNlQ29tcG9uZW50cyhjb25zdCBjaGFyKiBzcGVjLAotICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBzcGVjTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVSTFNlZ21l
bnRzJiBwYXJzZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ2Fub25pY2Fs
aXplcjo6UmVwbGFjZW1lbnRzPENoYXJhY3RlclR5cGU+JiByZXBsYWNlbWVudHMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgVVJMUXVlcnlDaGFyc2V0Q29udmVydGVyKiBjaGFyc2V0Q29udmVy
dGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzJiBvdXRwdXRQYXJzZWQpCi17Ci0g
ICAgLy8gSWYgdGhlIHNjaGVtZSBpcyBvdmVycmlkZGVuLCBqdXN0IGRvIGEgc2ltcGxlIHN0cmlu
ZyBzdWJzdGl0dXRpb24gYW5kCi0gICAgLy8gcmVwYXJzZSB0aGUgd2hvbGUgdGhpbmcuIFRoZXJl
IGFyZSBsb3RzIG9mIGVkZ2UgY2FzZXMgdGhhdCB3ZSByZWFsbHkgZG9uJ3QKLSAgICAvLyB3YW50
IHRvIGRlYWwgd2l0aC4gTGlrZSB3aGF0IGhhcHBlbnMgaWYgSSByZXBsYWNlICJodHRwOi8vZTo4
MDgwL2ZvbyIKLSAgICAvLyB3aXRoIGEgZmlsZS4gRG9lcyBpdCBiZWNvbWUgImZpbGU6Ly8vRTov
ODA4MC9mb28iIHdoZXJlIHRoZSBwb3J0IG51bWJlcgotICAgIC8vIGJlY29tZXMgcGFydCBvZiB0
aGUgcGF0aD8gUGFyc2luZyB0aGF0IHN0cmluZyBhcyBhIGZpbGUgVVJMIHNheXMgInllcyIKLSAg
ICAvLyBidXQgYWxtb3N0IG5vIHNhbmUgcnVsZSBmb3IgZGVhbGluZyB3aXRoIHRoZSBjb21wb25l
bnRzIGluZGl2aWR1YWxseSB3b3VsZAotICAgIC8vIGNvbWUgdXAgd2l0aCB0aGF0LgotICAgIC8v
Ci0gICAgLy8gV2h5IGFsbG93IHRoZXNlIGNyYXp5IGNhc2VzIGF0IGFsbD8gUHJvZ3JhbWF0aWNh
bGx5LCB0aGVyZSBpcyBhbG1vc3Qgbm8KLSAgICAvLyBjYXNlIGZvciByZXBsYWNpbmcgdGhlIHNj
aGVtZS4gVGhlIG1vc3QgY29tbW9uIGNhc2UgZm9yIGhpdHRpbmcgdGhpcyBpcwotICAgIC8vIGlu
IEpTIHdoZW4gYnVpbGRpbmcgdXAgYSBVUkwgdXNpbmcgdGhlIGxvY2F0aW9uIG9iamVjdC4gSW4g
dGhpcyBjYXNlLCB0aGUKLSAgICAvLyBKUyBjb2RlIGV4cGVjdHMgdGhlIHN0cmluZyBzdWJzdGl0
dXRpb24gYmVoYXZpb3I6Ci0gICAgLy8gICBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA4L1dELWh0
bWw1LTIwMDgwNjEwL3N0cnVjdHVyZWQuaHRtbCNjb21tb24zCi0gICAgaWYgKHJlcGxhY2VtZW50
cy5Jc1NjaGVtZU92ZXJyaWRkZW4oKSkgewotICAgICAgICAvLyBDYW5vbmljYWxpemUgdGhlIG5l
dyBzY2hlbWUgc28gaXQgaXMgOC1iaXQgYW5kIGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aAotICAg
ICAgICAvLyB0aGUgZXhpc3Rpbmcgc3BlYy4KLSAgICAgICAgUmF3VVJMQnVmZmVyPGNoYXIsIDEy
OD4gc2NoZW1lX3JlcGxhY2VkOwotICAgICAgICBVUkxDb21wb25lbnQgc2NoZW1lUmVwbGFjZWRQ
YXJzZWQ7Ci0gICAgICAgIFVSTENhbm9uaWNhbGl6ZXI6OmNhbm9uaWNhbGl6ZVNjaGVtZShyZXBs
YWNlbWVudHMuc291cmNlcygpLnNjaGVtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5jb21wb25lbnRzKCkuc2NoZW1lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1lX3JlcGxhY2VkLCBz
Y2hlbWVSZXBsYWNlZFBhcnNlZCk7Ci0KLSAgICAgICAgLy8gV2UgY2FuIGFzc3VtZSB0aGF0IHRo
ZSBpbnB1dCBpcyBjYW5vbmljYWxpemVkLCB3aGljaCBtZWFucyBpdCBhbHdheXMgaGFzCi0gICAg
ICAgIC8vIGEgY29sb24gYWZ0ZXIgdGhlIHNjaGVtZSAob3Igd2hlcmUgdGhlIHNjaGVtZSB3b3Vs
ZCBiZSkuCi0gICAgICAgIGludCBzcGVjQWZ0ZXJDb2xvbiA9IHBhcnNlZC5zY2hlbWUuaXNWYWxp
ZCgpID8gcGFyc2VkLnNjaGVtZS5lbmQoKSArIDEKLSAgICAgICAgOiAxOwotICAgICAgICBpZiAo
c3BlY0xlbmd0aCAtIHNwZWNBZnRlckNvbG9uID4gMCkgewotICAgICAgICAgICAgc2NoZW1lX3Jl
cGxhY2VkLmFwcGVuZCgmc3BlY1tzcGVjQWZ0ZXJDb2xvbl0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNwZWNMZW5ndGggLSBzcGVjQWZ0ZXJDb2xvbik7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBXZSBub3cgbmVlZCB0byBjb21wbGV0ZWx5IHJlLXBhcnNlIHRoZSByZXN1
bHRpbmcgc3RyaW5nIHNpbmNlIGl0cyBtZWFuaW5nCi0gICAgICAgIC8vIG1heSBoYXZlIGNoYW5n
ZWQgd2l0aCB0aGUgZGlmZmVyZW50IHNjaGVtZS4KLSAgICAgICAgUmF3VVJMQnVmZmVyPGNoYXIs
IDEyOD4gcmVjYW5vbmljYWxpemVkOwotICAgICAgICBVUkxTZWdtZW50cyByZWNhbm9uaWNhbGl6
ZWRQYXJzZWQ7Ci0gICAgICAgIGRvQ2Fub25pY2FsaXplKHNjaGVtZV9yZXBsYWNlZC5kYXRhKCks
IHNjaGVtZV9yZXBsYWNlZC5sZW5ndGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgY2hhcnNl
dENvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgcmVjYW5vbmljYWxpemVkLCByZWNh
bm9uaWNhbGl6ZWRQYXJzZWQpOwotCi0gICAgICAgIC8vIFJlY3Vyc2UgdXNpbmcgdGhlIHZlcnNp
b24gd2l0aCB0aGUgc2NoZW1lIGFscmVhZHkgcmVwbGFjZWQuIFRoaXMgd2lsbCBub3cKLSAgICAg
ICAgLy8gdXNlIHRoZSByZXBsYWNlbWVudCBydWxlcyBmb3IgdGhlIG5ldyBzY2hlbWUuCi0gICAg
ICAgIC8vCi0gICAgICAgIC8vIFdhcm5pbmc6IHRoaXMgY29kZSBhc3N1bWVzIHRoYXQgUmVwbGFj
ZUNvbXBvbmVudHMgd2lsbCByZS1jaGVjayBhbGwKLSAgICAgICAgLy8gY29tcG9uZW50cyBmb3Ig
dmFsaWRpdHkuIFRoaXMgaXMgYmVjYXVzZSB3ZSBjYW4ndCBmYWlsIGlmIERvQ2Fub25pY2FsaXpl
Ci0gICAgICAgIC8vIGZhaWxlZCBhYm92ZSBzaW5jZSB0aGVvcmV0aWNhbGx5IHRoZSB0aGluZyBt
YWtpbmcgaXQgZmFpbCBjb3VsZCBiZQotICAgICAgICAvLyBnZXR0aW5nIHJlcGxhY2VkIGhlcmUu
IElmIFJlcGxhY2VDb21wb25lbnRzIGRpZG4ndCByZS1jaGVjayBldmVyeXRoaW5nLAotICAgICAg
ICAvLyB3ZSB3b3VsZG4ndCBrbm93IGlmIHNvbWV0aGluZyAqbm90KiBnZXR0aW5nIHJlcGxhY2Vk
IGlzIGEgcHJvYmxlbS4KLSAgICAgICAgLy8gSWYgdGhlIHNjaGVtZS1zcGVjaWZpYyByZXBsYWNl
cnMgYXJlIG1hZGUgbW9yZSBpbnRlbGxpZ2VudCBzbyB0aGV5IGRvbid0Ci0gICAgICAgIC8vIHJl
LWNoZWNrIGV2ZXJ5dGhpbmcsIHdlIHNob3VsZCBpbnN0ZWFkIHJlY2Fub25pY2FsaXplIHRoZSB3
aG9sZSB0aGluZwotICAgICAgICAvLyBhZnRlciB0aGlzIGNhbGwgdG8gY2hlY2sgdmFsaWRpdHkg
KHRoaXMgYXNzdW1lcyByZXBsYWNpbmcgdGhlIHNjaGVtZSBpcwotICAgICAgICAvLyBtdWNoIG11
Y2ggbGVzcyBjb21tb24gdGhhbiBvdGhlciB0eXBlcyBvZiByZXBsYWNlbWVudHMsIGxpa2UgY2xl
YXJpbmcgdGhlCi0gICAgICAgIC8vIHJlZikuCi0gICAgICAgIFVSTENhbm9uaWNhbGl6ZXI6OlJl
cGxhY2VtZW50czxDaGFyYWN0ZXJUeXBlPiByZXBsYWNlbWVudHNOb1NjaGVtZSA9IHJlcGxhY2Vt
ZW50czsKLSAgICAgICAgcmVwbGFjZW1lbnRzTm9TY2hlbWUuU2V0U2NoZW1lKDAsIFVSTENvbXBv
bmVudCgpKTsKLSAgICAgICAgcmV0dXJuIGRvUmVwbGFjZUNvbXBvbmVudHMocmVjYW5vbmljYWxp
emVkLmRhdGEoKSwgcmVjYW5vbmljYWxpemVkLmxlbmd0aCgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZWNhbm9uaWNhbGl6ZWRQYXJzZWQsIHJlcGxhY2VtZW50c05vU2No
ZW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0Q29udmVydGVy
LCBvdXRwdXQsIG91dHB1dFBhcnNlZCk7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgZ2V0IGhlcmUs
IHRoZW4gd2Uga25vdyB0aGUgc2NoZW1lIGRvZXNuJ3QgbmVlZCB0byBiZSByZXBsYWNlZCwgc28g
Y2FuCi0gICAgLy8ganVzdCBrZXkgb2ZmIHRoZSBzY2hlbWUgaW4gdGhlIHNwZWMgdG8ga25vdyBo
b3cgdG8gZG8gdGhlIHJlcGxhY2VtZW50cy4KLSAgICBpZiAoZG9Db21wYXJlU2NoZW1lQ29tcG9u
ZW50KHNwZWMsIHBhcnNlZC5zY2hlbWUsIGtGaWxlU2NoZW1lKSkgewotICAgICAgICByZXR1cm4g
VVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZUZpbGVVUkwoc3BlYywgcGFyc2VkLCByZXBsYWNlbWVu
dHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
c2V0Q29udmVydGVyLCBvdXRwdXQsICZvdXRwdXRQYXJzZWQpOwotICAgIH0KLSAgICBpZiAoZG9D
b21wYXJlU2NoZW1lQ29tcG9uZW50KHNwZWMsIHBhcnNlZC5zY2hlbWUsIGtGaWxlU3lzdGVtU2No
ZW1lKSkgewotICAgICAgICByZXR1cm4gVVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZUZpbGVTeXN0
ZW1VUkwoc3BlYywgcGFyc2VkLCByZXBsYWNlbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0Q29udmVydGVyLCBvdXRwdXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
b3V0cHV0UGFyc2VkKTsKLSAgICB9Ci0gICAgaWYgKGRvSXNTdGFuZGFyZChzcGVjLCBwYXJzZWQu
c2NoZW1lKSkgewotICAgICAgICByZXR1cm4gVVJMQ2Fub25pY2FsaXplcjo6UmVwbGFjZVN0YW5k
YXJkVVJMKHNwZWMsIHBhcnNlZCwgcmVwbGFjZW1lbnRzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXRDb252ZXJ0ZXIsIG91dHB1dCwg
Jm91dHB1dFBhcnNlZCk7Ci0gICAgfQotICAgIGlmIChkb0NvbXBhcmVTY2hlbWVDb21wb25lbnQo
c3BlYywgcGFyc2VkLnNjaGVtZSwga01haWx0b1NjaGVtZSkpCi0gICAgICAgIHJldHVybiBVUkxD
YW5vbmljYWxpemVyOjpyZXBsYWNlTWFpbHRvVVJMKHNwZWMsIHBhcnNlZCwgcmVwbGFjZW1lbnRz
LCBvdXRwdXQsIG91dHB1dFBhcnNlZCk7Ci0KLSAgICAvLyBEZWZhdWx0IGlzIGEgcGF0aCBVUkwu
Ci0gICAgcmV0dXJuIFVSTENhbm9uaWNhbGl6ZXI6OlJlcGxhY2VQYXRoVVJMKHNwZWMsIHBhcnNl
ZCwgcmVwbGFjZW1lbnRzLCBvdXRwdXQsICZvdXRwdXRQYXJzZWQpOwotfQotCi19IC8vIG5hbWVz
cGFjZQotCi1ib29sIGlzU3RhbmRhcmQoY29uc3QgTENoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBv
bmVudCYgc2NoZW1lKQotewotICAgIHJldHVybiBkb0lzU3RhbmRhcmQoc3BlYywgc2NoZW1lKTsK
LX0KLQotYm9vbCBpc1N0YW5kYXJkKGNvbnN0IFVDaGFyKiBzcGVjLCBjb25zdCBVUkxDb21wb25l
bnQmIHNjaGVtZSkKLXsKLSAgICByZXR1cm4gZG9Jc1N0YW5kYXJkKHNwZWMsIHNjaGVtZSk7Ci19
Ci0KLWJvb2wgRmluZEFuZENvbXBhcmVTY2hlbWUoY29uc3QgY2hhciogc3RyLCBpbnQgc3RyTGVu
Z3RoLCBjb25zdCBjaGFyKiBjb21wYXJlLCBVUkxDb21wb25lbnQqIGZvdW5kU2NoZW1lKQotewot
ICAgIHJldHVybiBkb0ZpbmRBbmRDb21wYXJlU2NoZW1lKHN0ciwgc3RyTGVuZ3RoLCBjb21wYXJl
LCBmb3VuZFNjaGVtZSk7Ci19Ci0KLWJvb2wgRmluZEFuZENvbXBhcmVTY2hlbWUoY29uc3QgVUNo
YXIqIHN0ciwgaW50IHN0ckxlbmd0aCwgY29uc3QgY2hhciogY29tcGFyZSwgVVJMQ29tcG9uZW50
KiBmb3VuZFNjaGVtZSkKLXsKLSAgICByZXR1cm4gZG9GaW5kQW5kQ29tcGFyZVNjaGVtZShzdHIs
IHN0ckxlbmd0aCwgY29tcGFyZSwgZm91bmRTY2hlbWUpOwotfQotCi1ib29sIGNhbm9uaWNhbGl6
ZShjb25zdCBjaGFyKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwKLSAgICAgICAgICAgICAgICAgIFVS
TFF1ZXJ5Q2hhcnNldENvbnZlcnRlciogY2hhcnNldENvbnZlcnRlciwKLSAgICAgICAgICAgICAg
ICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxTZWdtZW50cyYgb3VwdXRQYXJzZWQpCi17
Ci0gICAgcmV0dXJuIGRvQ2Fub25pY2FsaXplKHNwZWMsIHNwZWNMZW5ndGgsIGNoYXJzZXRDb252
ZXJ0ZXIsIG91dHB1dCwgb3VwdXRQYXJzZWQpOwotfQotCi1ib29sIGNhbm9uaWNhbGl6ZShjb25z
dCBVQ2hhciogc3BlYywgaW50IHNwZWNMZW5ndGgsCi0gICAgICAgICAgICAgICAgICBVUkxRdWVy
eUNoYXJzZXRDb252ZXJ0ZXIqIGNoYXJzZXRDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICBV
UkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwgVVJMU2VnbWVudHMmIG91cHV0UGFyc2VkKQotewotICAg
IHJldHVybiBkb0Nhbm9uaWNhbGl6ZShzcGVjLCBzcGVjTGVuZ3RoLCBjaGFyc2V0Q29udmVydGVy
LCBvdXRwdXQsIG91cHV0UGFyc2VkKTsKLX0KLQotYm9vbCByZXNvbHZlUmVsYXRpdmUoY29uc3Qg
Y2hhciogYmFzZVNwZWMsIGNvbnN0IFVSTFNlZ21lbnRzJiBiYXNlUGFyc2VkLAotICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogcmVsYXRpdmUsIGludCByZWxhdGl2ZUxlbmd0aCwKLSAg
ICAgICAgICAgICAgICAgICAgIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciogY2hhcnNldENvbnZl
cnRlciwKLSAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0cHV0LCBVUkxT
ZWdtZW50cyogb3VwdXRQYXJzZWQpCi17Ci0gICAgcmV0dXJuIGRvUmVzb2x2ZVJlbGF0aXZlKGJh
c2VTcGVjLCBiYXNlUGFyc2VkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2
ZSwgcmVsYXRpdmVMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXRD
b252ZXJ0ZXIsIG91dHB1dCwgb3VwdXRQYXJzZWQpOwotfQotCi1ib29sIHJlc29sdmVSZWxhdGl2
ZShjb25zdCBjaGFyKiBiYXNlU3BlYywgY29uc3QgVVJMU2VnbWVudHMmIGJhc2VQYXJzZWQsCi0g
ICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogcmVsYXRpdmUsIGludCByZWxhdGl2ZUxl
bmd0aCwKLSAgICAgICAgICAgICAgICAgICAgIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciogY2hh
cnNldENvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYgb3V0
cHV0LCBVUkxTZWdtZW50cyogb3VwdXRQYXJzZWQpCi17Ci0gICAgcmV0dXJuIGRvUmVzb2x2ZVJl
bGF0aXZlKGJhc2VTcGVjLCBiYXNlUGFyc2VkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZWxhdGl2ZSwgcmVsYXRpdmVMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXJzZXRDb252ZXJ0ZXIsIG91dHB1dCwgb3VwdXRQYXJzZWQpOwotfQotCi1ib29sIFJlcGxh
Y2VDb21wb25lbnRzKGNvbnN0IGNoYXIqIHNwZWMsCi0gICAgICAgICAgICAgICAgICAgICAgIGlu
dCBzcGVjTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxTZWdtZW50cyYg
cGFyc2VkLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDYW5vbmljYWxpemVyOjpS
ZXBsYWNlbWVudHM8Y2hhcj4mIHJlcGxhY2VtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAg
VVJMUXVlcnlDaGFyc2V0Q29udmVydGVyKiBjaGFyc2V0Q29udmVydGVyLAotICAgICAgICAgICAg
ICAgICAgICAgICBVUkxCdWZmZXI8Y2hhcj4mIG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCkKLXsKLSAgICByZXR1cm4gZG9SZXBsYWNlQ29t
cG9uZW50cyhzcGVjLCBzcGVjTGVuZ3RoLCBwYXJzZWQsIHJlcGxhY2VtZW50cywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0Q29udmVydGVyLCBvdXRwdXQsICpvdXRwdXRQ
YXJzZWQpOwotfQotCi1ib29sIFJlcGxhY2VDb21wb25lbnRzKGNvbnN0IGNoYXIqIHNwZWMsCi0g
ICAgICAgICAgICAgICAgICAgICAgIGludCBzcGVjTGVuZ3RoLAotICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2VkLAotICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNlbWVudHM8VUNoYXI+JiByZXBsYWNlbWVudHMs
Ci0gICAgICAgICAgICAgICAgICAgICAgIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciogY2hhcnNl
dENvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiBvdXRw
dXQsCi0gICAgICAgICAgICAgICAgICAgICAgIFVSTFNlZ21lbnRzKiBvdXRwdXRQYXJzZWQpCi17
Ci0gICAgcmV0dXJuIGRvUmVwbGFjZUNvbXBvbmVudHMoc3BlYywgc3BlY0xlbmd0aCwgcGFyc2Vk
LCByZXBsYWNlbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnNldENv
bnZlcnRlciwgb3V0cHV0LCAqb3V0cHV0UGFyc2VkKTsKLX0KLQotdm9pZCBEZWNvZGVVUkxFc2Nh
cGVTZXF1ZW5jZXMoY29uc3QgY2hhciogaW5wdXQsIGludCBsZW5ndGgsIFVSTEJ1ZmZlcjxVQ2hh
cj4mIG91dHB1dCkKLXsKLSAgICBSYXdVUkxCdWZmZXI8Y2hhcj4gdW5lc2NhcGVkQ2hhcnM7Ci0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoaW5wdXRb
aV0gPT0gJyUnKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNoOwotICAgICAgICAgICAg
aWYgKFVSTENhbm9uaWNhbGl6ZXI6OkRlY29kZUVzY2FwZWQoaW5wdXQsICZpLCBsZW5ndGgsICZj
aCkpCi0gICAgICAgICAgICAgICAgdW5lc2NhcGVkQ2hhcnMuYXBwZW5kKGNoKTsKLSAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEludmFsaWQgZXNjYXBlIHNlcXVlbmNlLCBj
b3B5IHRoZSBwZXJjZW50IGxpdGVyYWwuCi0gICAgICAgICAgICAgICAgdW5lc2NhcGVkQ2hhcnMu
YXBwZW5kKCclJyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAvLyBSZWd1bGFyIG5vbi1lc2NhcGVkIDgtYml0IGNoYXJhY3Rlci4KLSAgICAgICAgICAgIHVu
ZXNjYXBlZENoYXJzLmFwcGVuZChpbnB1dFtpXSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAv
LyBDb252ZXJ0IHRoYXQgOC1iaXQgdG8gVVRGLTE2LiBJdCdzIG5vdCBjbGVhciBJRSBkb2VzIHRo
aXMgYXQgYWxsIHRvCi0gICAgLy8gSmF2YVNjcmlwdCBVUkxzLCBidXQgRmlyZWZveCBhbmQgU2Fm
YXJpIGRvLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdW5lc2NhcGVkQ2hhcnMubGVuZ3RoKCk7
IGkrKykgewotICAgICAgICB1bnNpZ25lZCBjaGFyIHVjaCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KHVuZXNjYXBlZENoYXJzLmF0KGkpKTsKLSAgICAgICAgaWYgKHVjaCA8IDB4ODApIHsK
LSAgICAgICAgICAgIC8vIE5vbi1VVEYtOCwganVzdCBhcHBlbmQgZGlyZWN0bHkKLSAgICAgICAg
ICAgIG91dHB1dC5hcHBlbmQodWNoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8v
IG5leHRfY2ggd2lsbCBwb2ludCB0byB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIGRlY29kZWQK
LSAgICAgICAgICAgIC8vIGNoYXJhY3Rlci4KLSAgICAgICAgICAgIGludCBuZXh0Q2hhcmFjdGVy
ID0gaTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNvZGVQb2ludDsKLSAgICAgICAgICAgIGlmIChV
UkxDYW5vbmljYWxpemVyOjpyZWFkVVRGQ2hhcih1bmVzY2FwZWRDaGFycy5kYXRhKCksICZuZXh0
Q2hhcmFjdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuZXNjYXBlZENoYXJzLmxlbmd0aCgpLCAmY29kZVBvaW50KSkgewotICAgICAgICAgICAgICAg
IC8vIFZhbGlkIFVURi04IGNoYXJhY3RlciwgY29udmVydCB0byBVVEYtMTYuCi0gICAgICAgICAg
ICAgICAgVVJMQ2Fub25pY2FsaXplcjo6QXBwZW5kVVRGMTZWYWx1ZShjb2RlUG9pbnQsIG91dHB1
dCk7Ci0gICAgICAgICAgICAgICAgaSA9IG5leHRDaGFyYWN0ZXI7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgc2VxdWVuY2VzIHRoYXQg
YXJlIG5vdCB2YWxpZCBVVEYtOCwgd2Uga2VlcAotICAgICAgICAgICAgICAgIC8vIGludmFsaWQg
Y29kZSBwb2ludHMgYW5kIHByb21vdGUgdG8gVVRGLTE2LiBXZSBjb3B5IGFsbCBjaGFyYWN0ZXJz
Ci0gICAgICAgICAgICAgICAgLy8gZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUgZW5k
IG9mIHRoZSBpZGVudGlmaWVkIHNlcXVlbmNlLgotICAgICAgICAgICAgICAgIHdoaWxlIChpIDwg
bmV4dENoYXJhY3RlcikgewotICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXI+KHVuZXNjYXBlZENoYXJzLmF0KGkpKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb3V0cHV0
LmFwcGVuZChzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPih1bmVzY2FwZWRDaGFycy5hdChpKSkp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEVuY29kZVVSSUNv
bXBvbmVudChjb25zdCBjaGFyKiBpbnB1dCwgaW50IGxlbmd0aCwgVVJMQnVmZmVyPGNoYXI+JiBv
dXRwdXQpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAg
ICB1bnNpZ25lZCBjaGFyIGMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihpbnB1dFtpXSk7
Ci0gICAgICAgIGlmIChVUkxDaGFyYWN0ZXJUeXBlczo6aXNDb21wb25lbnRDaGFyKGMpKQotICAg
ICAgICAgICAgb3V0cHV0LmFwcGVuZChjKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgVVJM
Q2Fub25pY2FsaXplcjo6YXBwZW5kVVJMRXNjYXBlZENoYXJhY3RlcihjLCBvdXRwdXQpOwotICAg
IH0KLX0KLQotYm9vbCBDb21wYXJlU2NoZW1lQ29tcG9uZW50KGNvbnN0IGNoYXIqIHNwZWMsIGNv
bnN0IFVSTENvbXBvbmVudCYgY29tcG9uZW50LCBjb25zdCBjaGFyKiBjb21wYXJlVG8pCi17Ci0g
ICAgcmV0dXJuIGRvQ29tcGFyZVNjaGVtZUNvbXBvbmVudChzcGVjLCBjb21wb25lbnQsIGNvbXBh
cmVUbyk7Ci19Ci0KLWJvb2wgQ29tcGFyZVNjaGVtZUNvbXBvbmVudChjb25zdCBVQ2hhciogc3Bl
YywgY29uc3QgVVJMQ29tcG9uZW50JiBjb21wb25lbnQsIGNvbnN0IGNoYXIqIGNvbXBhcmVUbykK
LXsKLSAgICByZXR1cm4gZG9Db21wYXJlU2NoZW1lQ29tcG9uZW50KHNwZWMsIGNvbXBvbmVudCwg
Y29tcGFyZVRvKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVVJMVXRpbGl0aWVzCi0KLX0gLy8gbmFt
ZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gVVNFKFdURlVSTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL3VybC9zcmMvVVJMVXRpbC5oIGIvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxVdGls
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiYzUxMWNkNzYwOGU2NGVhYWVhNTg0
MTRlMzgzOTc5ZTFjN2M4ZDYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dURi93dGYvdXJsL3NyYy9VUkxVdGlsLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwxMjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA3IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0g
KgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBVUkxVdGlsX2gKLSNkZWZpbmUgVVJMVXRpbF9oCi0KLSNpbmNsdWRlICJV
UkxDYW5vbi5oIgotI2luY2x1ZGUgIlVSTFBhcnNlLmgiCi0jaW5jbHVkZSA8d3RmL3VuaWNvZGUv
VW5pY29kZS5oPgotI2luY2x1ZGUgPHd0Zi91cmwvYXBpL1VSTEJ1ZmZlci5oPgotCi0jaWYgVVNF
KFdURlVSTCkKLQotbmFtZXNwYWNlIFdURiB7Ci0KLWNsYXNzIFVSTFF1ZXJ5Q2hhcnNldENvbnZl
cnRlcjsKLQotbmFtZXNwYWNlIFVSTFV0aWxpdGllcyB7Ci0KLS8vIExvY2F0ZXMgdGhlIHNjaGVt
ZSBpbiB0aGUgZ2l2ZW4gc3RyaW5nIGFuZCBwbGFjZXMgaXQgaW50byB8Zm91bmRTY2hlbWV8LAot
Ly8gd2hpY2ggbWF5IGJlIDAgdG8gaW5kaWNhdGUgdGhlIGNhbGxlciBkb2VzIG5vdCBjYXJlIGFi
b3V0IHRoZSByYW5nZS4KLS8vCi0vLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIHxjb21wYXJl
fCBzY2hlbWUgbWF0Y2hlcyB0aGUgc2NoZW1lIGZvdW5kIGluIHRoZQotLy8gaW5wdXQgKGlmIGFu
eSkuIFRoZSB8Y29tcGFyZXwgc2NoZW1lIG11c3QgYmUgYSB2YWxpZCBjYW5vbmljYWwgc2NoZW1l
IG9yCi0vLyB0aGUgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uIGlzIHVuZGVmaW5lZC4KLWJvb2wg
RmluZEFuZENvbXBhcmVTY2hlbWUoY29uc3QgY2hhciogc3RyLCBpbnQgc3RyTGVuZ3RoLCBjb25z
dCBjaGFyKiBjb21wYXJlLCBVUkxDb21wb25lbnQqIGZvdW5kU2NoZW1lKTsKLWJvb2wgRmluZEFu
ZENvbXBhcmVTY2hlbWUoY29uc3QgVUNoYXIqIHN0ciwgaW50IHN0ckxlbmd0aCwgY29uc3QgY2hh
ciogY29tcGFyZSwgVVJMQ29tcG9uZW50KiBmb3VuZFNjaGVtZSk7Ci0KLS8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIHJlcHJlc2VudHMgYSBzdGFuZGFyZCBVUkwuIFRoaXMgbWVh
bnMgdGhhdAotLy8gZWl0aGVyIHRoZSBzY2hlbWUgaXMgaW4gdGhlIGxpc3Qgb2Yga25vd24gc3Rh
bmRhcmQgc2NoZW1lcy4KLWJvb2wgaXNTdGFuZGFyZChjb25zdCBMQ2hhciogc3BlYywgY29uc3Qg
VVJMQ29tcG9uZW50JiBzY2hlbWUpOwotYm9vbCBpc1N0YW5kYXJkKGNvbnN0IFVDaGFyKiBzcGVj
LCBjb25zdCBVUkxDb21wb25lbnQmIHNjaGVtZSk7Ci1pbmxpbmUgYm9vbCBpc1N0YW5kYXJkKGNv
bnN0IGNoYXIqIHNwZWMsIGNvbnN0IFVSTENvbXBvbmVudCYgc2NoZW1lKSB7IHJldHVybiBpc1N0
YW5kYXJkKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihzcGVjKSwgc2NoZW1lKTsgfQot
Ci0vLyBVUkwgbGlicmFyeSB3cmFwcGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFBhcnNlcyB0aGUgZ2l2ZW4gc3BlYyBhY2Nv
cmRpbmcgdG8gdGhlIGV4dHJhY3RlZCBzY2hlbWUgdHlwZS4gTm9ybWFsIHVzZXJzCi0vLyBzaG91
bGQgdXNlIHRoZSBVUkwgb2JqZWN0LCBhbHRob3VnaCB0aGlzIG1heSBiZSB1c2VmdWwgaWYgcGVy
Zm9ybWFuY2UgaXMKLS8vIGNyaXRpY2FsIGFuZCB5b3UgZG9uJ3Qgd2FudCB0byBkbyB0aGUgaGVh
cCBhbGxvY2F0aW9uIGZvciB0aGUgc3RkOjpzdHJpbmcuCi0vLwotLy8gQXMgd2l0aCB0aGUgVVJM
Q2Fub25pY2FsaXplcjo6Q2Fub25pY2FsaXplKiBmdW5jdGlvbnMsIHRoZSBjaGFyc2V0IGNvbnZl
cnRlciBjYW4KLS8vIGJlIDAgdG8gdXNlIFVURi04IChpdCB3aWxsIGJlIGZhc3RlciBpbiB0aGlz
IGNhc2UpLgotLy8KLS8vIFJldHVybnMgdHJ1ZSBpZiBhIHZhbGlkIFVSTCB3YXMgcHJvZHVjZWQs
IGZhbHNlIGlmIG5vdC4gT24gZmFpbHVyZSwgdGhlCi0vLyBvdXRwdXQgYW5kIHBhcnNlZCBzdHJ1
Y3R1cmVzIHdpbGwgc3RpbGwgYmUgZmlsbGVkIGFuZCB3aWxsIGJlIGNvbnNpc3RlbnQsCi0vLyBi
dXQgdGhleSB3aWxsIG5vdCByZXByZXNlbnQgYSBsb2FkYWJsZSBVUkwuCi1ib29sIGNhbm9uaWNh
bGl6ZShjb25zdCBjaGFyKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwgVVJMUXVlcnlDaGFyc2V0Q29u
dmVydGVyKiwKLSAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxjaGFyPiYsIFVSTFNlZ21lbnRz
JiBvdXB1dFBhcnNlZCk7Ci1ib29sIGNhbm9uaWNhbGl6ZShjb25zdCBVQ2hhciogc3BlYywgaW50
IHNwZWNMZW5ndGgsIFVSTFF1ZXJ5Q2hhcnNldENvbnZlcnRlciosCi0gICAgICAgICAgICAgICAg
ICBVUkxCdWZmZXI8Y2hhcj4mLCBVUkxTZWdtZW50cyYgb3VwdXRQYXJzZWQpOwotCi0vLyBSZXNv
bHZlcyBhIHBvdGVudGlhbGx5IHJlbGF0aXZlIFVSTCByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gcGFy
c2VkIGJhc2UgVVJMLgotLy8gVGhlIGJhc2UgTVVTVCBiZSB2YWxpZC4gVGhlIHJlc3VsdGluZyBj
YW5vbmljYWwgVVJMIGFuZCBwYXJzZWQgaW5mb3JtYXRpb24KLS8vIHdpbGwgYmUgcGxhY2VkIGlu
IHRvIHRoZSBnaXZlbiBvdXQgdmFyaWFibGVzLgotLy8KLS8vIFRoZSByZWxhdGl2ZSBuZWVkIG5v
dCBiZSByZWxhdGl2ZS4gSWYgd2UgZGlzY292ZXIgdGhhdCBpdCdzIGFic29sdXRlLCB0aGlzCi0v
LyB3aWxsIHByb2R1Y2UgYSBjYW5vbmljYWwgdmVyc2lvbiBvZiB0aGF0IFVSTC4gU2VlIENhbm9u
aWNhbGl6ZSgpIGZvciBtb3JlCi0vLyBhYm91dCB0aGUgY2hhcnNldENvbnZlcnRlci4KLS8vCi0v
LyBSZXR1cm5zIHRydWUgaWYgdGhlIG91dHB1dCBpcyB2YWxpZCwgZmFsc2UgaWYgdGhlIGlucHV0
IGNvdWxkIG5vdCBwcm9kdWNlCi0vLyBhIHZhbGlkIFVSTC4KLWJvb2wgcmVzb2x2ZVJlbGF0aXZl
KGNvbnN0IGNoYXIqIGJhc2VTcGVjLCBjb25zdCBVUkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKLSAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlbGF0aXZlLCBpbnQgcmVsYXRpdmVMZW5n
dGgsCi0gICAgICAgICAgICAgICAgICAgICBVUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIqLAotICAg
ICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwgVVJMU2VnbWVudHMqIG91cHV0UGFy
c2VkKTsKLWJvb2wgcmVzb2x2ZVJlbGF0aXZlKGNvbnN0IGNoYXIqIGJhc2VTcGVjLCBjb25zdCBV
UkxTZWdtZW50cyYgYmFzZVBhcnNlZCwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFy
KiByZWxhdGl2ZSwgaW50IHJlbGF0aXZlTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgVVJM
UXVlcnlDaGFyc2V0Q29udmVydGVyKiwKLSAgICAgICAgICAgICAgICAgICAgIFVSTEJ1ZmZlcjxj
aGFyPiYsIFVSTFNlZ21lbnRzKiBvdXB1dFBhcnNlZCk7Ci0KLS8vIFJlcGxhY2VzIGNvbXBvbmVu
dHMgaW4gdGhlIGdpdmVuIFZBTElEIGlucHV0IHVybC4gVGhlIG5ldyBjYW5vbmljYWwgVVJMIGlu
Zm8KLS8vIGlzIHdyaXR0ZW4gdG8gb3V0cHV0IGFuZCBvdXRwdXRQYXJzZWQuCi0vLwotLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSByZXN1bHRpbmcgVVJMIGlzIHZhbGlkLgotYm9vbCBSZXBsYWNlQ29t
cG9uZW50cyhjb25zdCBjaGFyKiBzcGVjLCBpbnQgc3BlY0xlbmd0aCwgY29uc3QgVVJMU2VnbWVu
dHMmIHBhcnNlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVVJMQ2Fub25pY2FsaXpl
cjo6UmVwbGFjZW1lbnRzPGNoYXI+JiwKLSAgICAgICAgICAgICAgICAgICAgICAgVVJMUXVlcnlD
aGFyc2V0Q29udmVydGVyKiwKLSAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+
JiwgVVJMU2VnbWVudHMqIG91dHB1dFBhcnNlZCk7Ci1ib29sIFJlcGxhY2VDb21wb25lbnRzKGNv
bnN0IGNoYXIqIHNwZWMsIGludCBzcGVjTGVuZ3RoLCBjb25zdCBVUkxTZWdtZW50cyYgcGFyc2Vk
LAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVUkxDYW5vbmljYWxpemVyOjpSZXBsYWNl
bWVudHM8VUNoYXI+JiwKLSAgICAgICAgICAgICAgICAgICAgICAgVVJMUXVlcnlDaGFyc2V0Q29u
dmVydGVyKiwKLSAgICAgICAgICAgICAgICAgICAgICAgVVJMQnVmZmVyPGNoYXI+JiwgVVJMU2Vn
bWVudHMqIG91dHB1dFBhcnNlZCk7Ci0KLS8vIFVuZXNjYXBlcyB0aGUgZ2l2ZW4gc3RyaW5nIHVz
aW5nIFVSTCBlc2NhcGluZyBydWxlcy4KLXZvaWQgRGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGNv
bnN0IGNoYXIqIGlucHV0LCBpbnQgbGVuZ3RoLCBVUkxCdWZmZXI8VUNoYXI+Jik7Ci0KLS8vIEVz
Y2FwZXMgdGhlIGdpdmVuIHN0cmluZyBhcyBkZWZpbmVkIGJ5IHRoZSBKUyBtZXRob2QgZW5jb2Rl
VVJJQ29tcG9uZW50LgotLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0ph
dmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL2VuY29kZVVSSUNvbXBvbmVudAotdm9p
ZCBFbmNvZGVVUklDb21wb25lbnQoY29uc3QgY2hhciogaW5wdXQsIGludCBsZW5ndGgsIFVSTEJ1
ZmZlcjxjaGFyPiYpOwotCi0KLX0gLy8gbmFtZXNwYWNlIFVSTFV0aWxpdGllcwotCi19IC8vIG5h
bWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIFVTRShXVEZVUkwpCi0KLSNlbmRpZiAvLyBVUkxVdGls
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VybC9zcmMvVVJMVXRpbEludGVybmFsLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi91cmwvc3JjL1VSTFV0aWxJbnRlcm5hbC5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwODQwYWVjODY0ZjZjYjQ3YjRiMDFhOTcwM2RiNWNmNWVlMTU5Yjg1
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
VEYvd3RmL3VybC9zcmMvVVJMVXRpbEludGVybmFsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIFVSTFV0aWxJbnRlcm5hbF9oCi0jZGVmaW5lIFVSTFV0aWxJbnRlcm5hbF9oCi0KLSNpbmNs
dWRlICJVUkxQYXJzZS5oIgotCi0jaWYgVVNFKFdURlVSTCkKLQotbmFtZXNwYWNlIFdURiB7Ci0K
LW5hbWVzcGFjZSBVUkxVdGlsaXRpZXMgewotCi1leHRlcm4gY29uc3QgY2hhciBrRmlsZVNjaGVt
ZVtdOwotZXh0ZXJuIGNvbnN0IGNoYXIga0ZpbGVTeXN0ZW1TY2hlbWVbXTsKLWV4dGVybiBjb25z
dCBjaGFyIGtNYWlsdG9TY2hlbWVbXTsKLQotLy8gR2l2ZW4gYSBzdHJpbmcgYW5kIGEgcmFuZ2Ug
aW5zaWRlIHRoZSBzdHJpbmcsIGNvbXBhcmVzIGl0IHRvIHRoZSBnaXZlbgotLy8gbG93ZXItY2Fz
ZSB8Y29tcGFyZVRvfCBidWZmZXIuCi1ib29sIENvbXBhcmVTY2hlbWVDb21wb25lbnQoY29uc3Qg
Y2hhciogc3BlYywgY29uc3QgVVJMQ29tcG9uZW50JiwgY29uc3QgY2hhciogY29tcGFyZVRvKTsK
LWJvb2wgQ29tcGFyZVNjaGVtZUNvbXBvbmVudChjb25zdCBVQ2hhciogc3BlYywgY29uc3QgVVJM
Q29tcG9uZW50JiwgY29uc3QgY2hhciogY29tcGFyZVRvKTsKLQotfSAvLyBuYW1lc3BhY2UgVVJM
VXRpbGl0aWVzCi0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gVVNFKFdURlVSTCkK
LQotI2VuZGlmIC8vIFVSTFV0aWxJbnRlcm5hbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQppbmRleCBmNzliMjgwMGQxYjY5NjE2MGYwNGQwOTZmOWZhNzM2OGQzODUyMzc3Li5mMDU2MWJj
MDFlYTczNzFjNDE5NzBiNWRlYjE4MDNjNmU2MThlNTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KQEAgLTU3ODksOCArNTc4OSw2IEBAIHdlYmNvcmVfcGxhdGZvcm1fc291cmNlcyAr
PSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0tVUkwuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTEhhc2guaCBc
Ci0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTFdURlVSTC5jcHAgXAotCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0tVUkxXVEZVUkxJbXBsLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0xhbmd1YWdlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGFuZ3VhZ2UuaCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoQm94LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
CmluZGV4IDU2MzlmNGM4ZjIyMzgxYzI0NjM5MDM0NDVlNGY5MmM0YWUxYmNjMDIuLjZiMWU2YzIz
MTgzOTkzMjdhYTFiMWIzM2UxZjJiZDdiYzBlYWIxZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBA
IC0yODQxLDE2ICsyODQxLDYgQEAgX19aTjdXZWJDb3JlNFBhZ2UxMXNldFZpZXdNb2RlRU5TMF84
Vmlld01vZGVFCiBfX1pON1dlYkNvcmUxMldvcmtlclRocmVhZDE3d29ya2VyVGhyZWFkQ291bnRF
dgogI2VuZGlmCiAKLSNpZiBVU0UoV1RGVVJMKQotX19aTks3V2ViQ29yZTRLVVJMNnN0cmluZ0V2
Ci1fX1pOSzdXZWJDb3JlNEtVUkw3aGFzUGF0aEV2Ci1fX1pOSzdXZWJDb3JlNEtVUkw3aGFzUG9y
dEV2Ci1fX1pOSzdXZWJDb3JlNEtVUkw3aXNFbXB0eUV2Ci1fX1pOSzdXZWJDb3JlNEtVUkw2aXNO
dWxsRXYKLV9fWk5LN1dlYkNvcmU0S1VSTDdpc1ZhbGlkRXYKLV9fWk5LN1dlYkNvcmU0S1VSTDIy
cHJvdG9jb2xJc0luSFRUUEZhbWlseUV2Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKE1BQykgJiYg
IVBMQVRGT1JNKElPUykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgw
CiBfX1pON1dlYkNvcmUyN0FsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlcjE1YWRkQWx0ZXJuYXRp
dmVzRVJLTjNXVEY5UmV0YWluUHRySTE4TlNUZXh0QWx0ZXJuYXRpdmVzRUUKIF9fWk43V2ViQ29y
ZTI3QWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyMjJhbHRlcm5hdGl2ZXNGb3JDb250ZXh0RXkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCA3Y2M4NThkMGFkZGY3MzBlNjEwNmE0MDAyOWUxNDA1ODI2ZmExY2FmLi4yYTUyN2UzNTg3
N2U0YjkxN2MwNWQ3MjNiNjEwZmI1NGZiMzIyM2ZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03MzgsNyArNzM4LDYgQEAKIAkJ
MjY1NTQxNTIxNDg5QjIzMzAwMERGQzVEIC8qIEN1cnNvcklPUy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjU1NDE0QjE0ODlBQTJCMDAwREZDNUQg
LyogQ3Vyc29ySU9TLmNwcCAqLzsgfTsKIAkJMjY5MjM5OTUxNTA1RTFBQTAwOUU1N0ZDIC8qIEpT
SURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDI2OTIzOTkxMTUwNUUxQUEwMDlFNTdGQyAvKiBKU0lEQlZlcnNpb25D
aGFuZ2VFdmVudC5jcHAgKi87IH07CiAJCTI2OTIzOTk2MTUwNUUxQUEwMDlFNTdGQyAvKiBKU0lE
QlZlcnNpb25DaGFuZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMjY5MjM5OTIxNTA1RTFBQTAwOUU1N0ZDIC8qIEpTSURCVmVyc2lvbkNoYW5n
ZUV2ZW50LmggKi87IH07Ci0JCTI2QTUwMzRFMTRGMDk4MzYwMEFBNzMwRCAvKiBLVVJMV1RGVVJM
SW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZB
NTAzNEQxNEYwOTgzNjAwQUE3MzBEIC8qIEtVUkxXVEZVUkxJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjZDMTdBM0UxNDkxRDJENDAwRDEy
QkEyIC8qIEZpbGVTeXN0ZW1JT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDI2QzE3QTNDMTQ5MUQyRDQwMEQxMkJBMiAvKiBGaWxlU3lzdGVtSU9TLmgg
Ki87IH07CiAJCTI2QzE3QTNGMTQ5MUQyRDQwMEQxMkJBMiAvKiBGaWxlU3lzdGVtSU9TLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZDMTdBM0QxNDkx
RDJENDAwRDEyQkEyIC8qIEZpbGVTeXN0ZW1JT1MubW0gKi87IH07CiAJCTI2RTk4QTEwMTMwQTlG
Q0EwMDhFQjdCMiAvKiBUZXh0Q29kZWNBU0NJSUZhc3RQYXRoLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU5OEEwRjEzMEE5RkNBMDA4RUI3QjIgLyog
VGV4dENvZGVjQVNDSUlGYXN0UGF0aC5oICovOyB9OwpAQCAtODAwNSw3ICs4MDA0LDYgQEAKIAkJ
MjY1NTQxNEIxNDg5QUEyQjAwMERGQzVEIC8qIEN1cnNvcklPUy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDdXJzb3JJT1MuY3BwOyBwYXRoID0gaW9zL0N1cnNvcklP
Uy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2OTIzOTkxMTUwNUUxQUEwMDlF
NTdGQyAvKiBKU0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTI2OTIzOTkyMTUwNUUxQUEwMDlFNTdGQyAvKiBKU0lEQlZlcnNp
b25DaGFuZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0lEQlZl
cnNpb25DaGFuZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyNkE1MDM0
RDE0RjA5ODM2MDBBQTczMEQgLyogS1VSTFdURlVSTEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gS1VSTFdURlVSTEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMjZDMTdBM0MxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVTeXN0ZW1JT1MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsZVN5c3RlbUlPUy5oOyBwYXRoID0gaW9zL0Zp
bGVTeXN0ZW1JT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjZDMTdBM0QxNDkx
RDJENDAwRDEyQkEyIC8qIEZpbGVTeXN0ZW1JT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IG5hbWUgPSBGaWxlU3lzdGVtSU9TLm1tOyBwYXRoID0gaW9zL0ZpbGVTeXN0ZW1J
T1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2RTk4QTBGMTMwQTlGQ0EwMDhF
QjdCMiAvKiBUZXh0Q29kZWNBU0NJSUZhc3RQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRleHRDb2RlY0FTQ0lJRmFzdFBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTIxNDA3LDcgKzIxNDA1LDYgQEAKIAkJCQk2NTkzOTIzNTA5QUU0MzQ2MDAyQzUz
MUYgLyogS1VSTC5jcHAgKi8sCiAJCQkJNjU5MzkyMzYwOUFFNDM0NjAwMkM1MzFGIC8qIEtVUkwu
aCAqLywKIAkJCQlCQ0JEMjFBQTBFNDE3QUQ0MDBBMDcwRjIgLyogS1VSTEhhc2guaCAqLywKLQkJ
CQkyNkE1MDM0RDE0RjA5ODM2MDBBQTczMEQgLyogS1VSTFdURlVSTEltcGwuaCAqLywKIAkJCQlF
MTg3NzJGMDEyNkUyNjI5MDAzREQ1ODYgLyogTGFuZ3VhZ2UuY3BwICovLAogCQkJCTg1RUM5QUY5
MEE3MUEyQzYwMEVFRUFFRCAvKiBMYW5ndWFnZS5oICovLAogCQkJCUQ2RkRBRUYyMTQ5QzA2MTkw
MDM3QjFFNSAvKiBMYXlvdXRUZXN0U3VwcG9ydC5jcHAgKi8sCkBAIC0yNTIwMCw3ICsyNTE5Nyw2
IEBACiAJCQkJNTIxRDQ2RjgxMUFFQzlCMTAwNTE0NjEzIC8qIEtpbGxSaW5nLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk2NTkzOTIzODA5QUU0MzQ2MDAyQzUzMUYgLyogS1VSTC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkNCRDIxQUIwRTQxN0FENDAwQTA3MEYyIC8qIEtVUkxIYXNoLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkyNkE1MDM0RTE0RjA5ODM2MDBBQTczMEQgLyogS1VSTFdURlVSTEltcGwuaCBp
biBIZWFkZXJzICovLAogCQkJCTQ1MENFQkYxMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNDU2RkEyNzExQUQ0QTgzMDAyMEI0MjAgLyog
TGFiZWxzTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1RUM5QUZCMEE3MUEyQzYwMEVF
RUFFRCAvKiBMYW5ndWFnZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9LVVJMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3Bw
CmluZGV4IGI1ZmJjOGNkZWE3ZTE2ODQwY2M3ZjA0NjJmZmJjYmFlZGQyZDQ5ZTguLjVkYzZjZWYz
ZTliOTY0ZmFhYzk4ZDdlNjZlYTlhMmRlM2ViYzFkMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0tVUkwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkwu
Y3BwCkBAIC0zMyw5ICszMyw3IEBACiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVk
ZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2lmICFVU0UoV1RGVVJMKQog
I2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KLSNlbmRpZgogI2luY2x1ZGUgPHd0Zi9NZW1vcnlJ
bnN0cnVtZW50YXRpb25TdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtNjcsNyArNjUsNyBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgaXNMZXR0ZXJNYXRjaElnbm9yaW5nQ2FzZShVQ2hhciBjaGFyYWN0ZXIsIGNoYXIg
bG93ZXJjYXNlTGV0dAogICAgIHJldHVybiAoY2hhcmFjdGVyIHwgMHgyMCkgPT0gbG93ZXJjYXNl
TGV0dGVyOwogfQogCi0jaWYgIVVTRShHT09HTEVVUkwpICYmICFVU0UoV1RGVVJMKQorI2lmICFV
U0UoR09PR0xFVVJMKQogCiBzdGF0aWMgY29uc3QgY2hhciB3c1NjaGVtZVtdID0geyd3JywgJ3Mn
fTsKIHN0YXRpYyBjb25zdCBjaGFyIGZ0cFNjaGVtZVtdID0geydmJywgJ3QnLCAncCd9OwpAQCAt
MTcxOCw3ICsxNzE2LDcgQEAgdm9pZCBLVVJMOjpwcmludCgpIGNvbnN0CiB9CiAjZW5kaWYKIAot
I2VuZGlmIC8vICFVU0UoR09PR0xFVVJMKSAmJiAhVVNFKFdURlVSTCkKKyNlbmRpZiAvLyAhVVNF
KEdPT0dMRVVSTCkKIAogU3RyaW5nIEtVUkw6OnN0cmlwcGVkRm9yVXNlQXNSZWZlcnJlcigpIGNv
bnN0CiB7CkBAIC0xOTA3LDggKzE5MDUsNiBAQCB2b2lkIEtVUkw6OnJlcG9ydE1lbW9yeVVzYWdl
KE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiAgICAgTWVtb3J5Q2xh
c3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcyk7CiAjaWYgVVNFKEdPT0dMRVVSTCkK
ICAgICBpbmZvLmFkZE1lbWJlcihtX3VybCwgInVybCIpOwotI2VsaWYgVVNFKFdURlVSTCkKLSAg
ICBpbmZvLmFkZE1lbWJlcihtX3VybEltcGwsICJ1cmxJbXBsIik7CiAjZWxzZSAvLyAhVVNFKEdP
T0dMRVVSTCkKICAgICBpbmZvLmFkZE1lbWJlcihtX3N0cmluZywgInN0cmluZyIpOwogI2VuZGlm
CkBAIC0xOTE4LDggKzE5MTQsNiBAQCBib29sIEtVUkw6OmlzU2FmZVRvU2VuZFRvQW5vdGhlclRo
cmVhZCgpIGNvbnN0CiB7CiAjaWYgVVNFKEdPT0dMRVVSTCkKICAgICByZXR1cm4gbV91cmwuaXNT
YWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCk7Ci0jZWxpZiBVU0UoV1RGVVJMKQotICAgIHJldHVy
biBtX3VybEltcGwtPmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpOwogI2Vsc2UgLy8gIVVT
RShHT09HTEVVUkwpCiAgICAgcmV0dXJuIG1fc3RyaW5nLmlzU2FmZVRvU2VuZFRvQW5vdGhlclRo
cmVhZCgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJM
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgKaW5kZXggOGVhOWEyNGQ2MTU5Njcz
YWY0MTMyODc4NTYzMzk1ODQyN2FkNDQ3NS4uYjY1NWMzOTcyODc5YTIwMWQxMGRmZDNhMDBhOTBl
MzlkYjRiYzc3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkwuaApAQCAtMjYsNyArMjYsNiBAQAogI2lm
bmRlZiBLVVJMX2gKICNkZWZpbmUgS1VSTF9oCiAKLSNpbmNsdWRlICJLVVJMV1RGVVJMSW1wbC5o
IgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTY3LDE2ICs2NiwxMCBAQCBwdWJsaWM6
CiAgICAgS1VSTChQYXJzZWRVUkxTdHJpbmdUYWcsIGNvbnN0IFN0cmluZyYpOwogI2lmIFVTRShH
T09HTEVVUkwpCiAgICAgZXhwbGljaXQgS1VSTChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5
cGUpIDogbV91cmwoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpIHsgfQotI2VsaWYgVVNFKFdU
RlVSTCkKLSAgICBleHBsaWNpdCBLVVJMKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkg
OiBtX3VybEltcGwoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpIHsgfQogI2Vsc2UKICAgICBl
eHBsaWNpdCBLVVJMKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBtX3N0cmluZyhX
VEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkgeyB9CiAjZW5kaWYKLSNpZiAhVVNFKFdURlVSTCkK
ICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gc3RyaW5n
KCkuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQotI2Vsc2UKLSAgICBib29sIGlzSGFzaFRh
YmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV91cmxJbXBsLmlzSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKCk7IH0KLSNlbmRpZgogCiAgICAgLy8gUmVzb2x2ZXMgdGhlIHJlbGF0aXZlIFVS
TCB3aXRoIHRoZSBnaXZlbiBiYXNlIFVSTC4gSWYgcHJvdmlkZWQsIHRoZQogICAgIC8vIFRleHRF
bmNvZGluZyBpcyB1c2VkIHRvIGVuY29kZSBub24tQVNDSUkgY2hhcmFjZXJzLiBUaGUgYmFzZSBV
UkwgY2FuIGJlCkBAIC0xMjQsOSArMTE3LDYgQEAgcHVibGljOgogCiAjaWYgVVNFKEdPT0dMRVVS
TCkKICAgICBjb25zdCBTdHJpbmcmIHN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fdXJsLnN0cmlu
ZygpOyB9Ci0jZWxpZiBVU0UoV1RGVVJMKQotICAgIC8vIEZJWE1FOiBTcGxpdCB0aGlzIGluIFVS
TFN0cmluZyBhbmQgSW52YWxpZFVSTFN0cmluZywgZ2V0IHJpZCBvZiB0aGUgaW1wbGljaXQgY29u
dmVyc2lvbnMuCi0gICAgY29uc3QgU3RyaW5nJiBzdHJpbmcoKSBjb25zdDsKICNlbHNlCiAgICAg
Y29uc3QgU3RyaW5nJiBzdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZzsgfQogI2VuZGlm
CkBAIC0yMzgsOCArMjI4LDYgQEAgcHJpdmF0ZToKICNpZiBVU0UoR09PR0xFVVJMKQogICAgIGZy
aWVuZCBjbGFzcyBLVVJMR29vZ2xlUHJpdmF0ZTsKICAgICBLVVJMR29vZ2xlUHJpdmF0ZSBtX3Vy
bDsKLSNlbGlmIFVTRShXVEZVUkwpCi0gICAgUmVmUHRyPEtVUkxXVEZVUkxJbXBsPiBtX3VybElt
cGw7CiAjZWxzZSAgLy8gIVVTRShHT09HTEVVUkwpCiAgICAgdm9pZCBpbml0KGNvbnN0IEtVUkwm
LCBjb25zdCBTdHJpbmcmLCBjb25zdCBUZXh0RW5jb2RpbmcmKTsKICAgICB2b2lkIGNvcHlUb0J1
ZmZlcihWZWN0b3I8Y2hhciwgNTEyPiYgYnVmZmVyKSBjb25zdDsKQEAgLTMzNSw3ICszMjMsNyBA
QCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0cmluZyYgYSwgY29uc3QgS1VSTCYgYikK
ICAgICByZXR1cm4gYSAhPSBiLnN0cmluZygpOwogfQogCi0jaWYgIVVTRShHT09HTEVVUkwpICYm
ICFVU0UoV1RGVVJMKQorI2lmICFVU0UoR09PR0xFVVJMKQogCiAvLyBJbmxpbmUgdmVyc2lvbnMg
b2Ygc29tZSBub24tR29vZ2xlVVJMIGZ1bmN0aW9ucyBzbyB3ZSBjYW4gZ2V0IGlubGluaW5nCiAv
LyB3aXRob3V0IGhhdmluZyB0byBoYXZlIGEgbG90IG9mIHVnbHkgaWZkZWZzIGluIHRoZSBjbGFz
cyBkZWZpbml0aW9uLgpAQCAtMzk1LDcgKzM4Myw3IEBAIGlubGluZSB1bnNpZ25lZCBLVVJMOjpw
YXRoQWZ0ZXJMYXN0U2xhc2goKSBjb25zdAogICAgIHJldHVybiBtX3BhdGhBZnRlckxhc3RTbGFz
aDsKIH0KIAotI2VuZGlmIC8vICFVU0UoR09PR0xFVVJMKSAmJiAhVVNFKFdURlVSTCkKKyNlbmRp
ZiAvLyAhVVNFKEdPT0dMRVVSTCkKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMV1RGVVJMLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0tVUkxXVEZVUkwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjZTdjYWEzZTc0ZTc0YWJlZTdiOWM2Y2Y3ODg4MzRmOWVkYTQyMTlkLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0tVUkxXVEZVUkwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDc4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJLVVJMLmgiCi0KLSNpbmNsdWRlIDxUZXh0
RW5jb2RpbmcuaD4KLSNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdXJsL2FwaS9VUkxCdWZmZXIuaD4KLSNpbmNsdWRl
IDx3dGYvdXJsL2FwaS9VUkxRdWVyeUNoYXJzZXRDb252ZXJ0ZXIuaD4KLQotI2lmIFVTRShXVEZV
UkwpCi0KLXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG1heGltdW1WYWxpZFBvcnROdW1iZXIgPSAweEZGRkU7Ci1zdGF0
aWMgY29uc3QgdW5zaWduZWQgaW52YWxpZFBvcnROdW1iZXIgPSAweEZGRkY7Ci0KLXN0YXRpYyBp
bmxpbmUgdm9pZCBkZXRhY2goUmVmUHRyPEtVUkxXVEZVUkxJbXBsPiYgdXJsSW1wbCkKLXsKLSAg
ICBpZiAoIXVybEltcGwpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICh1cmxJbXBsLT5oYXNP
bmVSZWYoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdXJsSW1wbCA9IHVybEltcGwtPmNvcHko
KTsKLX0KLQotS1VSTDo6S1VSTChQYXJzZWRVUkxTdHJpbmdUYWcsIGNvbnN0IFN0cmluZyYgdXJs
U3RyaW5nKQotICAgIDogbV91cmxJbXBsKGFkb3B0UmVmKG5ldyBLVVJMV1RGVVJMSW1wbCgpKSkK
LXsKLSAgICBtX3VybEltcGwtPm1fcGFyc2VkVVJMID0gUGFyc2VkVVJMKHVybFN0cmluZywgUGFy
c2VkVVJMOjpQYXJzZWRVUkxTdHJpbmcpOwotCi0gICAgLy8gRklYTUU6IEZyYW1lOjppbml0KCkg
YWN0dWFsbHkgY3JlYXRlIGVtcHR5IFVSTCwgaW52ZXN0aWdhdGUgd2h5IG5vdCBqdXN0IG51bGwg
VVJMLgotICAgIC8vIEFTU0VSVChtX3VybEltcGwtPm1fcGFyc2VkVVJMLmlzVmFsaWQoKSk7Ci19
Ci0KLWNsYXNzIENoYXJzZXRDb252ZXJ0ZXIgOiBwdWJsaWMgVVJMUXVlcnlDaGFyc2V0Q29udmVy
dGVyIHsKLXB1YmxpYzoKLSAgICBDaGFyc2V0Q29udmVydGVyKGNvbnN0IFRleHRFbmNvZGluZyYg
ZW5jb2RpbmcpCi0gICAgICAgIDogbV9lbmNvZGluZyhlbmNvZGluZykKLSAgICB7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB2b2lkIGNvbnZlcnRGcm9tVVRGMTYoY29uc3QgVUNoYXIqIGlucHV0LCB1
bnNpZ25lZCBpbnB1dExlbmd0aCwgVVJMQnVmZmVyPGNoYXI+JiBvdXRwdXQpIE9WRVJSSURFCi0g
ICAgewotICAgICAgICBDU3RyaW5nIGVuY29kZWQgPSBtX2VuY29kaW5nLmVuY29kZShpbnB1dCwg
aW5wdXRMZW5ndGgsIFVSTEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7Ci0gICAgICAg
IG91dHB1dC5hcHBlbmQoZW5jb2RlZC5kYXRhKCksIHN0YXRpY19jYXN0PGludD4oZW5jb2RlZC5s
ZW5ndGgoKSkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBjb25zdCBUZXh0RW5jb2RpbmcmIG1f
ZW5jb2Rpbmc7Ci19OwotCi1LVVJMOjpLVVJMKGNvbnN0IEtVUkwmIGJhc2VVUkwsIGNvbnN0IFN0
cmluZyYgcmVsYXRpdmUpCi0gICAgOiBtX3VybEltcGwoYWRvcHRSZWYobmV3IEtVUkxXVEZVUkxJ
bXBsKCkpKQotewotICAgIC8vIEZJWE1FOiB0aGUgY2FzZSB3aXRoIGEgbnVsbCBiYXNlVVJMIGlz
IGNvbW1vbi4gV2Ugc2hvdWxkIGhhdmUgYSBzZXBhcmF0ZSBjb25zdHJ1Y3RvciBpbiBLVVJMLgot
ICAgIC8vIEZJWE1FOiB0aGUgY2FzZSBvZiBhbiBlbXB0eSBCYXNlIGlzIHVzZWxlc3MsIHdlIHNo
b3VsZCBnZXQgcmlkIG9mIGVtcHR5IFVSTHMuCi0gICAgQ2hhcnNldENvbnZlcnRlciBjaGFyc2V0
Q29udmVydGVyKFVURjhFbmNvZGluZygpKTsKLSAgICBpZiAoYmFzZVVSTC5pc0VtcHR5KCkpCi0g
ICAgICAgIG1fdXJsSW1wbC0+bV9wYXJzZWRVUkwgPSBQYXJzZWRVUkwocmVsYXRpdmUsICZjaGFy
c2V0Q29udmVydGVyKTsKLSAgICBlbHNlCi0gICAgICAgIG1fdXJsSW1wbC0+bV9wYXJzZWRVUkwg
PSBQYXJzZWRVUkwoYmFzZVVSTC5tX3VybEltcGwtPm1fcGFyc2VkVVJMLCByZWxhdGl2ZSwgJmNo
YXJzZXRDb252ZXJ0ZXIpOwotCi0gICAgaWYgKCFtX3VybEltcGwtPm1fcGFyc2VkVVJMLmlzVmFs
aWQoKSkKLSAgICAgICAgbV91cmxJbXBsLT5tX2ludmFsaWRVcmxTdHJpbmcgPSByZWxhdGl2ZTsK
LX0KLQotS1VSTDo6S1VSTChjb25zdCBLVVJMJiBiYXNlVVJMLCBjb25zdCBTdHJpbmcmIHJlbGF0
aXZlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQotICAgIDogbV91cmxJbXBsKGFkb3B0
UmVmKG5ldyBLVVJMV1RGVVJMSW1wbCgpKSkKLXsKLSAgICBDaGFyc2V0Q29udmVydGVyIGNoYXJz
ZXRDb252ZXJ0ZXIoZW5jb2RpbmcuZW5jb2RpbmdGb3JGb3JtU3VibWlzc2lvbigpKTsKLSAgICBp
ZiAoYmFzZVVSTC5pc0VtcHR5KCkpCi0gICAgICAgIG1fdXJsSW1wbC0+bV9wYXJzZWRVUkwgPSBQ
YXJzZWRVUkwocmVsYXRpdmUsICZjaGFyc2V0Q29udmVydGVyKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fdXJsSW1wbC0+bV9wYXJzZWRVUkwgPSBQYXJzZWRVUkwoYmFzZVVSTC5tX3VybEltcGwtPm1f
cGFyc2VkVVJMLCByZWxhdGl2ZSwgJmNoYXJzZXRDb252ZXJ0ZXIpOwotCi0gICAgaWYgKCFtX3Vy
bEltcGwtPm1fcGFyc2VkVVJMLmlzVmFsaWQoKSkKLSAgICAgICAgbV91cmxJbXBsLT5tX2ludmFs
aWRVcmxTdHJpbmcgPSByZWxhdGl2ZTsKLX0KLQotS1VSTCBLVVJMOjpjb3B5KCkgY29uc3QKLXsK
LSAgICBLVVJMIG90aGVyOwotICAgIGlmICghaXNOdWxsKCkpCi0gICAgICAgIG90aGVyLm1fdXJs
SW1wbCA9IG1fdXJsSW1wbC0+Y29weSgpOwotICAgIHJldHVybiBvdGhlcjsKLX0KLQotYm9vbCBL
VVJMOjppc051bGwoKSBjb25zdAotewotICAgIHJldHVybiAhbV91cmxJbXBsOwotfQotCi0vLyBG
SVhNRTogQ2FuIHdlIGdldCByaWQgb2YgdGhlIGNvbmNlcHQgb2YgRW1wdHlVUkw/IENhbiBhbiBu
dWxsIFVSTCBiZSBlbm91Z2g/Ci0vLyBJZiB3ZSBjYW5ub3QgZ2V0IHJpZCBvZiB0aGUgY29uY2Vw
dCwgd2Ugc2hvdWxkIG1ha2UgYSBzaGFyZWQgZW1wdHkgVVJMLgotYm9vbCBLVVJMOjppc0VtcHR5
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gIW1fdXJsSW1wbAotICAgICAgICAgICB8fCAoIW1fdXJs
SW1wbC0+bV9wYXJzZWRVUkwuaXNWYWxpZCgpICYmIG1fdXJsSW1wbC0+bV9pbnZhbGlkVXJsU3Ry
aW5nLmlzRW1wdHkoKSk7Ci19Ci0KLWJvb2wgS1VSTDo6aXNWYWxpZCgpIGNvbnN0Ci17Ci0gICAg
aWYgKCFtX3VybEltcGwpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgaXNQYXJz
ZWRVUkxWYWxpZCA9IG1fdXJsSW1wbC0+bV9wYXJzZWRVUkwuaXNWYWxpZCgpOwotI2lmbmRlZiBO
REVCVUcKLSAgICBpZiAoaXNQYXJzZWRVUkxWYWxpZCkKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRShtX3VybEltcGwtPm1faW52YWxpZFVybFN0cmluZy5pc051bGwoKSwgIkEgdmFsaWQgVVJM
IG11c3QgaGF2ZSBhIG51bGwgaW52YWxpZFVybFN0cmluZy4iKTsKLSNlbmRpZgotICAgIHJldHVy
biBpc1BhcnNlZFVSTFZhbGlkOwotfQotCi1jb25zdCBTdHJpbmcmIEtVUkw6OnN0cmluZygpIGNv
bnN0Ci17Ci0gICAgaWYgKGlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsK
LQotICAgIGlmIChpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBtX3VybEltcGwtPm1fcGFyc2Vk
VVJMLnNwZWMoKS5zdHJpbmcoKTsKLQotICAgIHJldHVybiBtX3VybEltcGwtPm1faW52YWxpZFVy
bFN0cmluZzsKLX0KLQotU3RyaW5nIEtVUkw6OnByb3RvY29sKCkgY29uc3QKLXsKLSAgICAvLyBT
a2lwIHRoZSBBU1NFUlQgZm9yIG5vdywgU3ViZnJhbWVMb2FkZXI6OnJlcXVlc3RGcmFtZSgpIGRv
ZXMgbm90IGNoZWNrIHRoZSB2YWxpZGl0eSBvZiBVUkxzLgotICAgIC8vIEFTU0VSVChpc1ZhbGlk
KCkpOwotICAgIGlmICghaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAg
cmV0dXJuIG1fdXJsSW1wbC0+bV9wYXJzZWRVUkwuc2NoZW1lKCk7Ci19Ci0KLVN0cmluZyBLVVJM
Ojpob3N0KCkgY29uc3QKLXsKLSAgICAvLyBTa2lwIHRoZSBBU1NFUlQgZm9yIG5vdywgSFRNTEFu
Y2hvckVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKCkgZG9lcyBub3QgY2hlY2sgdGhlIHZhbGlkaXR5
IG9mIFVSTHMuCi0gICAgLy8gQVNTRVJUKGlzVmFsaWQoKSk7Ci0gICAgaWYgKCFpc1ZhbGlkKCkp
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gbV91cmxJbXBsLT5tX3BhcnNl
ZFVSTC5ob3N0KCk7Ci19Ci0KLWJvb2wgS1VSTDo6aGFzUG9ydCgpIGNvbnN0Ci17Ci0gICAgLy8g
VGhpcyBzaG91bGQgYmUgYW4gQVNTRVJULiBIVE1MQW5jaG9yRWxlbWVudDo6cG9ydCgpIGRvZXMg
bm90IGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgVVJMLgotICAgIGlmICghaXNWYWxpZCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbV91cmxJbXBsLT5tX3BhcnNlZFVS
TC5oYXNQb3J0KCk7Ci19Ci0KLXVuc2lnbmVkIHNob3J0IEtVUkw6OnBvcnQoKSBjb25zdAotewot
ICAgIEFTU0VSVChpc1ZhbGlkKCkpOwotCi0gICAgU3RyaW5nIHBvcnRTdHJpbmcgPSBtX3VybElt
cGwtPm1fcGFyc2VkVVJMLnBvcnQoKTsKLSAgICBpZiAocG9ydFN0cmluZy5pc051bGwoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBib29sIG9rID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgcG9y
dFZhbHVlID0gcG9ydFN0cmluZy50b1VJbnRTdHJpY3QoJm9rKTsKLQotICAgIGlmICghb2sgfHwg
cG9ydFZhbHVlID4gbWF4aW11bVZhbGlkUG9ydE51bWJlcikKLSAgICAgICAgcmV0dXJuIGludmFs
aWRQb3J0TnVtYmVyOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pihw
b3J0VmFsdWUpOwotfQotCi1TdHJpbmcgS1VSTDo6dXNlcigpIGNvbnN0Ci17Ci0gICAgLy8gRklY
TUU6IHRoaXMgc2hvdWxkIGJlIGFuIEFTU0VSVCgpLCBjYWxsIHNpdGUgc2hvdWxkIG5vdCB1c2Ug
aW52YWxpZCBVUkxzLgotICAgIGlmICghaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gU3RyaW5n
KCk7Ci0KLSAgICByZXR1cm4gbV91cmxJbXBsLT5tX3BhcnNlZFVSTC51c2VybmFtZSgpOwotfQot
Ci1TdHJpbmcgS1VSTDo6cGFzcygpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IHRoaXMgc2hvdWxk
IGJlIGFuIEFTU0VSVCgpLCBjYWxsIHNpdGUgc2hvdWxkIG5vdCB1c2UgaW52YWxpZCBVUkxzLgot
ICAgIGlmICghaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICByZXR1
cm4gbV91cmxJbXBsLT5tX3BhcnNlZFVSTC5wYXNzd29yZCgpOwotfQotCi1ib29sIEtVUkw6Omhh
c1BhdGgoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBhbiBBU1NFUlRJ
T04sIGNhbGwgc2l0ZSBzaG91bGQgbm90IHVzZSBpbnZhbGlkIFVSTHMuCi0gICAgaWYgKCFpc1Zh
bGlkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiAhcGF0aCgpLmlzRW1w
dHkoKTsKLX0KLQotU3RyaW5nIEtVUkw6OnBhdGgoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiB0
aGlzIHNob3VsZCBiZSBhbiBBU1NFUlRJT04sIEhUTUxBbmNob3JFbGVtZW50IHNob3VsZCBub3Qg
dXNlIGludmFsaWQgVVJMcy4KLSAgICBpZiAoIWlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotCi0gICAgcmV0dXJuIG1fdXJsSW1wbC0+bV9wYXJzZWRVUkwucGF0aCgpOwotfQot
Ci1TdHJpbmcgS1VSTDo6bGFzdFBhdGhDb21wb25lbnQoKSBjb25zdAotewotICAgIEFTU0VSVChp
c1ZhbGlkKCkpOwotCi0gICAgU3RyaW5nIHBhdGhTdHJpbmcgPSBwYXRoKCk7Ci0gICAgc2l6ZV90
IGluZGV4ID0gcGF0aFN0cmluZy5yZXZlcnNlRmluZCgnLycpOwotCi0gICAgaWYgKGluZGV4ID09
IG5vdEZvdW5kKQotICAgICAgICByZXR1cm4gcGF0aFN0cmluZzsKLQotICAgIHJldHVybiBwYXRo
U3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEpOwotfQotCi1TdHJpbmcgS1VSTDo6cXVlcnkoKSBj
b25zdAotewotICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBhbiBBU1NFUlRJT04sIEhUTUxB
bmNob3JFbGVtZW50IHNob3VsZCBub3QgdXNlIGludmFsaWQgVVJMcy4KLSAgICBpZiAoIWlzVmFs
aWQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJuIG1fdXJsSW1wbC0+
bV9wYXJzZWRVUkwucXVlcnkoKTsKLX0KLQotYm9vbCBLVVJMOjpoYXNGcmFnbWVudElkZW50aWZp
ZXIoKSBjb25zdAotewotICAgIC8vIFNraXAgdGhlIEFTU0VSVCBmb3Igbm93LCBTY3JpcHRFbGVt
ZW50OjpyZXF1ZXN0U2NyaXB0KCkgY3JlYXRlIHJlcXVlc3RzIGZvciBpbnZhbGlkIFVSTHMuCi0g
ICAgLy8gQVNTRVJUKGlzVmFsaWQoKSk7Ci0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiBtX3VybEltcGwtPm1fcGFyc2VkVVJMLmhhc0ZyYWdt
ZW50KCk7Ci19Ci0KLVN0cmluZyBLVVJMOjpmcmFnbWVudElkZW50aWZpZXIoKSBjb25zdAotewot
ICAgIC8vIFNraXAgdGhlIEFTU0VSVCBmb3Igbm93LCBTY3JpcHRFbGVtZW50OjpyZXF1ZXN0U2Ny
aXB0KCkgY3JlYXRlIHJlcXVlc3RzIGZvciBpbnZhbGlkIFVSTHMuCi0gICAgLy8gQVNTRVJUKGlz
VmFsaWQoKSk7Ci0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LQotICAgIHJldHVybiBtX3VybEltcGwtPm1fcGFyc2VkVVJMLmZyYWdtZW50KCk7Ci19Ci0KLS8v
IEZJWE1FOiB0cmFjayBhbiBmaXggdGhlIGJhZCB1c2Ugb2YgdGhpcyBtZXRob2QuCi1TdHJpbmcg
S1VSTDo6YmFzZUFzU3RyaW5nKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaXNWYWxpZCgpKTsKLSAg
ICByZXR1cm4gbV91cmxJbXBsLT5tX3BhcnNlZFVSTC5iYXNlQXNTdHJpbmcoKTsKLX0KLQotLy8g
RklYTUU6IEdldCByaWQgb2YgdGhpcyBmdW5jdGlvbiBmcm9tIEtVUkwuCi0jaWYgUExBVEZPUk0o
TUFDKSB8fCBQTEFURk9STShXSU4pCi1TdHJpbmcgS1VSTDo6ZmlsZVN5c3RlbVBhdGgoKSBjb25z
dAotewotICAgIHJldHVybiBzdHJpbmcoKTsKLX0KLSNlbmRpZgotCi1ib29sIEtVUkw6OnByb3Rv
Y29sSXMoY29uc3QgY2hhciogdGVzdFByb3RvY29sKSBjb25zdAotewotICAgIGlmICghaXNWYWxp
ZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnByb3RvY29s
SXMocHJvdG9jb2woKSwgdGVzdFByb3RvY29sKTsKLX0KLQotYm9vbCBLVVJMOjpwcm90b2NvbElz
SW5IVFRQRmFtaWx5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcHJvdG9jb2xJcygiaHR0cCIpIHx8
IHByb3RvY29sSXMoImh0dHBzIik7Ci19Ci0KLWJvb2wgS1VSTDo6c2V0UHJvdG9jb2woY29uc3Qg
U3RyaW5nJikKLXsKLSAgICBkZXRhY2gobV91cmxJbXBsKTsKLSAgICAvLyBGSVhNRTogQWRkIFdU
RlVSTCBJbXBsZW1lbnRhdGlvbi4KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgS1VSTDo6
c2V0SG9zdChjb25zdCBTdHJpbmcmKQotewotICAgIGRldGFjaChtX3VybEltcGwpOwotICAgIC8v
IEZJWE1FOiBBZGQgV1RGVVJMIEltcGxlbWVudGF0aW9uLgotfQotCi12b2lkIEtVUkw6OnJlbW92
ZVBvcnQoKQotewotICAgIGlmICghaGFzUG9ydCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBk
ZXRhY2gobV91cmxJbXBsKTsKLSAgICBtX3VybEltcGwtPm1fcGFyc2VkVVJMLnJlbW92ZVBvcnQo
KTsKLX0KLQotdm9pZCBLVVJMOjpzZXRQb3J0KHVuc2lnbmVkIHNob3J0IG5ld1BvcnQpCi17Ci0g
ICAgZGV0YWNoKG1fdXJsSW1wbCk7Ci0gICAgbV91cmxJbXBsLT5tX3BhcnNlZFVSTC5yZXBsYWNl
UG9ydChuZXdQb3J0KTsKLX0KLQotdm9pZCBLVVJMOjpzZXRIb3N0QW5kUG9ydChjb25zdCBTdHJp
bmcmKQotewotICAgIGRldGFjaChtX3VybEltcGwpOwotICAgIC8vIEZJWE1FOiBBZGQgV1RGVVJM
IEltcGxlbWVudGF0aW9uLgotfQotCi12b2lkIEtVUkw6OnNldFVzZXIoY29uc3QgU3RyaW5nJikK
LXsKLSAgICBkZXRhY2gobV91cmxJbXBsKTsKLSAgICAvLyBGSVhNRTogQWRkIFdURlVSTCBJbXBs
ZW1lbnRhdGlvbi4KLX0KLQotdm9pZCBLVVJMOjpzZXRQYXNzKGNvbnN0IFN0cmluZyYpCi17Ci0g
ICAgZGV0YWNoKG1fdXJsSW1wbCk7Ci0gICAgLy8gRklYTUU6IEFkZCBXVEZVUkwgSW1wbGVtZW50
YXRpb24uCi19Ci0KLXZvaWQgS1VSTDo6c2V0UGF0aChjb25zdCBTdHJpbmcmKQotewotICAgIGRl
dGFjaChtX3VybEltcGwpOwotICAgIC8vIEZJWE1FOiBBZGQgV1RGVVJMIEltcGxlbWVudGF0aW9u
LgotfQotCi12b2lkIEtVUkw6OnNldFF1ZXJ5KGNvbnN0IFN0cmluZyYpCi17Ci0gICAgZGV0YWNo
KG1fdXJsSW1wbCk7Ci0gICAgLy8gRklYTUU6IEFkZCBXVEZVUkwgSW1wbGVtZW50YXRpb24uCi19
Ci0KLXZvaWQgS1VSTDo6c2V0RnJhZ21lbnRJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYpCi17Ci0g
ICAgZGV0YWNoKG1fdXJsSW1wbCk7Ci0gICAgLy8gRklYTUU6IEFkZCBXVEZVUkwgSW1wbGVtZW50
YXRpb24uCi19Ci0KLXZvaWQgS1VSTDo6cmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCkKLXsKLSAg
ICBpZiAoIWhhc0ZyYWdtZW50SWRlbnRpZmllcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBk
ZXRhY2gobV91cmxJbXBsKTsKLSAgICBtX3VybEltcGwtPm1fcGFyc2VkVVJMID0gbV91cmxJbXBs
LT5tX3BhcnNlZFVSTC53aXRob3V0RnJhZ21lbnQoKTsKLX0KLQotdW5zaWduZWQgS1VSTDo6aG9z
dFN0YXJ0KCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogQWRkIFdURlVSTCBJbXBsZW1lbnRhdGlv
bi4KLSAgICByZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgS1VSTDo6aG9zdEVuZCgpIGNvbnN0Ci17
Ci0gICAgLy8gRklYTUU6IEFkZCBXVEZVUkwgSW1wbGVtZW50YXRpb24uCi0gICAgcmV0dXJuIDA7
Ci19Ci0KLXVuc2lnbmVkIEtVUkw6OnBhdGhTdGFydCgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6
IEFkZCBXVEZVUkwgSW1wbGVtZW50YXRpb24uCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXVuc2lnbmVk
IEtVUkw6OnBhdGhFbmQoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBBZGQgV1RGVVJMIEltcGxl
bWVudGF0aW9uLgotICAgIHJldHVybiAwOwotfQotCi11bnNpZ25lZCBLVVJMOjpwYXRoQWZ0ZXJM
YXN0U2xhc2goKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBBZGQgV1RGVVJMIEltcGxlbWVudGF0
aW9uLgotICAgIHJldHVybiAwOwotfQotCi0jaWZuZGVmIE5ERUJVRwotdm9pZCBLVVJMOjpwcmlu
dCgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzVmFsaWQoKSkKLSAgICAgICAgbV91cmxJbXBsLT5tX3Bh
cnNlZFVSTC5wcmludCgpOwotICAgIGVsc2UgewotICAgICAgICBpZiAoaXNOdWxsKCkpCi0gICAg
ICAgICAgICBkYXRhTG9nRigiTnVsbCBLVVJMIik7Ci0gICAgICAgIGVsc2UgaWYgKGlzRW1wdHko
KSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCJFbXB0eSBLVVJMIik7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgZGF0YUxvZ0YoIkludmFsaWQgS1VSTCBmcm9tIHN0cmluZyA9Iik7Ci0gICAg
ICAgICAgICBtX3VybEltcGwtPm1faW52YWxpZFVybFN0cmluZy5zaG93KCk7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0jZW5kaWYKLQotdm9pZCBLVVJMOjppbnZhbGlkYXRlKCkKLXsKLSAgICBtX3Vy
bEltcGwgPSBudWxscHRyOwotfQotCi1ib29sIEtVUkw6OmlzSGllcmFyY2hpY2FsKCkgY29uc3QK
LXsKLSAgICBpZiAoIWlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVy
biBtX3VybEltcGwtPm1fcGFyc2VkVVJMLmhhc1N0YW5kYXJkU2NoZW1lKCk7Ci19Ci0KLWJvb2wg
cHJvdG9jb2xJcyhjb25zdCBTdHJpbmcmLCBjb25zdCBjaGFyKikKLXsKLSAgICAvLyBGSVhNRTog
QWRkIFdURlVSTCBJbXBsZW1lbnRhdGlvbi4KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
ZXF1YWxJZ25vcmluZ0ZyYWdtZW50SWRlbnRpZmllcihjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYp
Ci17Ci0gICAgLy8gRklYTUU6IEFkZCBXVEZVUkwgSW1wbGVtZW50YXRpb24uCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIHByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChjb25zdCBLVVJM
JiBhLCBjb25zdCBLVVJMJiBiKQotewotICAgIGlmICghYS5pc1ZhbGlkKCkgfHwgIWIuaXNWYWxp
ZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gYS5wcm90b2NvbCgpID09
IGIucHJvdG9jb2woKQotICAgICAgICAgICAmJiBhLmhvc3QoKSA9PSBiLmhvc3QoKQotICAgICAg
ICAgICAmJiBhLnBvcnQoKSA9PSBiLnBvcnQoKTsKLX0KLQotU3RyaW5nIGVuY29kZVdpdGhVUkxF
c2NhcGVTZXF1ZW5jZXMoY29uc3QgU3RyaW5nJikKLXsKLSAgICAvLyBGSVhNRTogQWRkIFdURlVS
TCBJbXBsZW1lbnRhdGlvbi4KLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBkZWNv
ZGVVUkxFc2NhcGVTZXF1ZW5jZXMoY29uc3QgU3RyaW5nJikKLXsKLSAgICAvLyBGSVhNRTogQWRk
IFdURlVSTCBJbXBsZW1lbnRhdGlvbi4KLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmlu
ZyBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoY29uc3QgU3RyaW5nJiwgY29uc3QgVGV4dEVuY29k
aW5nJikKLXsKLSAgICAvLyBGSVhNRTogQWRkIFdURlVSTCBJbXBsZW1lbnRhdGlvbi4KLSAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShXVEZVUkwpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMV1RGVVJMSW1wbC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vS1VSTFdURlVSTEltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMTY4OTJkM2M4ZWFjNzUxMDBmMDE2OGMzODg4YmI1NGE0NDU0MGU5Ny4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9LVVJMV1RGVVJMSW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBLVVJMV1RGVVJMSW1wbF9oCi0jZGVmaW5lIEtVUkxXVEZVUkxJbXBsX2gK
LQotI2lmIFVTRShXVEZVUkwpCi0KLSNpbmNsdWRlICJQbGF0Zm9ybU1lbW9yeUluc3RydW1lbnRh
dGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25QYXJzZWRVUkwuaD4K
LSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotI2luY2x1ZGUgPHd0Zi91cmwvYXBpL1BhcnNlZFVSTC5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEtVUkxXVEZVUkxJbXBsIDogcHVibGljIFJlZkNvdW50ZWQ8S1VSTFdURlVS
TEltcGw+IHsKLXB1YmxpYzoKLSAgICBXVEY6OlBhcnNlZFVSTCBtX3BhcnNlZFVSTDsKLSAgICBT
dHJpbmcgbV9pbnZhbGlkVXJsU3RyaW5nOwotCi0gICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShN
ZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAotICAgIHsKLSAgICAgICAg
TWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcyk7Ci0gICAgICAgIGlu
Zm8uYWRkTWVtYmVyKG1fcGFyc2VkVVJMLCAicGFyc2VkVVJMIik7Ci0gICAgICAgIGluZm8uYWRk
TWVtYmVyKG1faW52YWxpZFVybFN0cmluZywgImludmFsaWRVcmxTdHJpbmciKTsKLSAgICB9Ci0g
ICAgYm9vbCBpc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1faW52YWxpZFVybFN0cmluZy5pc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQo
KQotICAgICAgICAgICAgJiYgbV9wYXJzZWRVUkwuaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFk
KCk7Ci0gICAgfQotICAgIFBhc3NSZWZQdHI8S1VSTFdURlVSTEltcGw+IGNvcHkoKSBjb25zdDsK
LX07Ci0KLWlubGluZSBQYXNzUmVmUHRyPEtVUkxXVEZVUkxJbXBsPiBLVVJMV1RGVVJMSW1wbDo6
Y29weSgpIGNvbnN0Ci17Ci0gICAgUmVmUHRyPEtVUkxXVEZVUkxJbXBsPiBjbG9uZSA9IGFkb3B0
UmVmKG5ldyBLVVJMV1RGVVJMSW1wbCk7Ci0gICAgY2xvbmUtPm1fcGFyc2VkVVJMID0gbV9wYXJz
ZWRVUkwuaXNvbGF0ZWRDb3B5KCk7Ci0gICAgY2xvbmUtPm1faW52YWxpZFVybFN0cmluZyA9IG1f
aW52YWxpZFVybFN0cmluZy5pc29sYXRlZENvcHkoKTsKLSAgICByZXR1cm4gY2xvbmUucmVsZWFz
ZSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoV1RGVVJM
KQotCi0jZW5kaWYgLy8gS1VSTFdURlVSTEltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2YvS1VSTENGTmV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nm
L0tVUkxDRk5ldC5jcHAKaW5kZXggNDU4ZDk4N2YxOWUxNTQxZmU3MDdlYjg4YjI0NjJkMDg5MTNh
NzE1My4uZDRlZGUwYjkwMzdmZGY5YjU4NzVlYjIzMTIxZDdlNjdhNjc0YzYxNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvS1VSTENGTmV0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jZi9LVVJMQ0ZOZXQuY3BwCkBAIC00OSwxMyArNDksNyBAQCBLVVJM
OjpLVVJMKENGVVJMUmVmIHVybCkKICAgICBjaGFyKiBieXRlcyA9ICZidWZmZXJbMF07CiAgICAg
Q0ZVUkxHZXRCeXRlcyh1cmwsIHJlaW50ZXJwcmV0X2Nhc3Q8VUludDgqPihieXRlcyksIGJ5dGVz
TGVuZ3RoKTsKICAgICBieXRlc1tieXRlc0xlbmd0aF0gPSAnXDAnOwotI2lmICFVU0UoV1RGVVJM
KQogICAgIHBhcnNlKGJ5dGVzKTsKLSNlbHNlCi0gICAgLy8gRklYTUU6IEFkZCBXVEZVUkwgSW1w
bGVtZW50YXRpb24uCi0gICAgVU5VU0VEX1BBUkFNKHVybCk7Ci0gICAgaW52YWxpZGF0ZSgpOwot
I2VuZGlmIC8vIFVTRShXVEZVUkwpCiB9CiAKIENGVVJMUmVmIGNyZWF0ZUNGVVJMRnJvbUJ1ZmZl
cihjb25zdCBDaGFyQnVmZmVyJiBidWZmZXIpCkBAIC03MywyMSArNjcsMTYgQEAgQ0ZVUkxSZWYg
Y3JlYXRlQ0ZVUkxGcm9tQnVmZmVyKGNvbnN0IENoYXJCdWZmZXImIGJ1ZmZlcikKICNpZiAhUExB
VEZPUk0oTUFDKSAmJiAhKFBMQVRGT1JNKFFUKSAmJiBVU0UoUVRLSVQpKQogQ0ZVUkxSZWYgS1VS
TDo6Y3JlYXRlQ0ZVUkwoKSBjb25zdAogewotI2lmICFVU0UoV1RGVVJMKQogICAgIC8vIEZJWE1F
OiBXaGF0IHNob3VsZCB0aGlzIHJldHVybiBmb3IgaW52YWxpZCBVUkxzPwogICAgIC8vIEN1cnJl
bnRseSBpdCB0aHJvd3MgYXdheSB0aGUgaGlnaCBieXRlcyBvZiB0aGUgY2hhcmFjdGVycyBpbiB0
aGUgc3RyaW5nIGluIHRoYXQgY2FzZSwKICAgICAvLyB3aGljaCBpcyBjbGVhcmx5IHdyb25nLgog
ICAgIENoYXJCdWZmZXIgYnVmZmVyOwogICAgIGNvcHlUb0J1ZmZlcihidWZmZXIpOwogICAgIHJl
dHVybiBjcmVhdGVDRlVSTEZyb21CdWZmZXIoYnVmZmVyKTsKLSNlbHNlIC8vIFVTRShXVEZVUkwp
Ci0gICAgLy8gRklYTUU6IEFkZCBXVEZVUkwgSW1wbGVtZW50YXRpb24uCi0gICAgcmV0dXJuIDA7
Ci0jZW5kaWYKIH0KICNlbmRpZgogCi0jaWYgIVVTRShXVEZVUkwpICYmICEoUExBVEZPUk0oUVQp
ICYmIFVTRShRVEtJVCkpCisjaWYgIShQTEFURk9STShRVCkgJiYgVVNFKFFUS0lUKSkKIFN0cmlu
ZyBLVVJMOjpmaWxlU3lzdGVtUGF0aCgpIGNvbnN0CiB7CiAgICAgUmV0YWluUHRyPENGVVJMUmVm
PiBjZlVSTChBZG9wdENGLCBjcmVhdGVDRlVSTCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9LVVJMTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L0tVUkxNYWMubW0KaW5kZXggZDVjMjVlMTQ3YmMwNzc3ODJlMGM0MjQ5YTk4Mjc1NDkwZDk4ZDI3
Ny4uOTQ4MWY5MGYwNzI3N2VkMjY4ZDIyMzI1NDA2ZjgyZGM4Y2Q1M2ZmNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0tVUkxNYWMubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL0tVUkxNYWMubW0KQEAgLTQ4LDE1ICs0OCw3IEBAIEtVUkw6OktVUkwo
TlNVUkwgKnVybCkKICAgICBjaGFyKiBieXRlcyA9ICZidWZmZXJbMF07CiAgICAgQ0ZVUkxHZXRC
eXRlcyhyZWludGVycHJldF9jYXN0PENGVVJMUmVmPih1cmwpLCByZWludGVycHJldF9jYXN0PFVJ
bnQ4Kj4oYnl0ZXMpLCBieXRlc0xlbmd0aCk7CiAgICAgYnl0ZXNbYnl0ZXNMZW5ndGhdID0gJ1ww
JzsKLSNpZiAhVVNFKFdURlVSTCkKICAgICBwYXJzZShieXRlcyk7Ci0jZWxzZQotICAgIG1fdXJs
SW1wbCA9IGFkb3B0UmVmKG5ldyBLVVJMV1RGVVJMSW1wbCgpKTsKLSAgICBTdHJpbmcgdXJsU3Ry
aW5nKGJ5dGVzLCBieXRlc0xlbmd0aCk7Ci0gICAgbV91cmxJbXBsLT5tX3BhcnNlZFVSTCA9IFBh
cnNlZFVSTCh1cmxTdHJpbmcsIDApOwotICAgIGlmICghbV91cmxJbXBsLT5tX3BhcnNlZFVSTC5p
c1ZhbGlkKCkpCi0gICAgICAgIG1fdXJsSW1wbC0+bV9pbnZhbGlkVXJsU3RyaW5nID0gdXJsU3Ry
aW5nOwotI2VuZGlmIC8vIFVTRShXVEZVUkwpCiB9CiAKIEtVUkw6Om9wZXJhdG9yIE5TVVJMICoo
KSBjb25zdApAQCAtNzUsMTUgKzY3LDcgQEAgQ0ZVUkxSZWYgS1VSTDo6Y3JlYXRlQ0ZVUkwoKSBj
b25zdAogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDRlVSTFJlZj4oW1tOU1VSTCBh
bGxvY10gaW5pdFdpdGhTdHJpbmc6QCIiXSk7CiAKICAgICBDaGFyQnVmZmVyIGJ1ZmZlcjsKLSNp
ZiAhVVNFKFdURlVSTCkKICAgICBjb3B5VG9CdWZmZXIoYnVmZmVyKTsKLSNlbHNlCi0gICAgU3Ry
aW5nIHVybFN0cmluZyA9IHN0cmluZygpOwotICAgIGJ1ZmZlci5yZXNpemUodXJsU3RyaW5nLmxl
bmd0aCgpKTsKLSAgICBzaXplX3QgbGVuZ3RoID0gdXJsU3RyaW5nLmxlbmd0aCgpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCi0gICAgICAgIGJ1ZmZlcltpXSA9IHN0
YXRpY19jYXN0PGNoYXI+KHVybFN0cmluZ1tpXSk7Ci0jZW5kaWYKICAgICByZXR1cm4gY3JlYXRl
Q0ZVUkxGcm9tQnVmZmVyKGJ1ZmZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9BYm91dERhdGFVc2VGZWF0dXJlcy5pbiBiL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9BYm91dERhdGFVc2VGZWF0dXJlcy5p
bgppbmRleCBlY2NmYmYzOGZiMDI2NGQ2ZDdkYWMyYTlhZGU1NDA1NjFjMjRjMjU5Li40NmNmOTgz
MTIwZDJjZWFkMWZiNmFkNWZlNzVlZTY1MDM3OGZkODQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvQWJvdXREYXRhVXNlRmVhdHVyZXMuaW4KKysr
IGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0Fib3V0RGF0YVVzZUZl
YXR1cmVzLmluCkBAIC0xMTIsNyArMTEyLDYgQEAgV0VCUAogV0NIQVJfVU5JQ09ERQogV0lOSU5F
VAogV0tfU0NST0xMQkFSX1BBSU5URVIKLVdURlVSTAogV1gKIFdYR0MKIFpMSUIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9XZWJL
aXRGZWF0dXJlcy5jbWFrZQppbmRleCA2ZGUzNWExMzZmYjEzNmMyYzcwMjFmNDQ4NDgzNmUyNWM0
MjFkNmYzLi41YWM3NmI2ZDkyYjE1ZjYwNDM5NTEwZDZhMjAxNWExMDU4ZGJjNDBkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UKKysrIGIvU291cmNlL2NtYWtl
L1dlYktpdEZlYXR1cmVzLmNtYWtlCkBAIC0xMzYsNyArMTM2LDYgQEAgbWFjcm8oV0VCS0lUX09Q
VElPTl9CRUdJTikKICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShFTkFCTEVfWFNMVCAiVG9nZ2xl
IFhTTFQgc3VwcG9ydCIgT04pCiAgICAgV0VCS0lUX09QVElPTl9ERUZJTkUoVVNFX1NZU1RFTV9N
QUxMT0MgIlRvZ2dsZSBzeXN0ZW0gYWxsb2NhdG9yIGluc3RlYWQgb2YgVENtYWxsb2MiIE9GRikK
ICAgICBXRUJLSVRfT1BUSU9OX0RFRklORShXVEZfVVNFX1RJTEVEX0JBQ0tJTkdfU1RPUkUgIlRv
Z2dsZSBUaWxlZCBCYWNraW5nIFN0b3JlIHN1cHBvcnQiIE9GRikKLSAgICBXRUJLSVRfT1BUSU9O
X0RFRklORShXVEZfVVNFX1dURlVSTCAiVG9nZ2xlIHRoZSB1c2Ugb2YgV1RGVVJMIGZvciBVUkwg
cGFyc2luZyIgT0ZGKQogZW5kbWFjcm8oKQogCiBtYWNybyhXRUJLSVRfT1BUSU9OX0VORCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9jbWFrZWNvbmZpZy5oLmNtYWtlIGIvU291cmNlL2NtYWtlY29uZmln
LmguY21ha2UKaW5kZXggZDlmYmFhMmE3ZmZiZTg4NTM0MjMwYmQ3ZTY3YzkzNWUyYTYxMTlmMS4u
N2Y2MmU5YTgyNThjZGZkOGMyZDBlNDc4MGEyNTE2Y2Q3NTc4OTdmNyAxMDA2NDQKLS0tIGEvU291
cmNlL2NtYWtlY29uZmlnLmguY21ha2UKKysrIGIvU291cmNlL2NtYWtlY29uZmlnLmguY21ha2UK
QEAgLTEzMiw2ICsxMzIsNSBAQAogI2NtYWtlZGVmaW5lMDEgRU5BQkxFX1hTTFQKICNjbWFrZWRl
ZmluZTAxIFVTRV9TWVNURU1fTUFMTE9DCiAjY21ha2VkZWZpbmUwMSBXVEZfVVNFX1RJTEVEX0JB
Q0tJTkdfU1RPUkUKLSNjbWFrZWRlZmluZTAxIFdURl9VU0VfV1RGVVJMCiAKICNlbmRpZiAvKiBD
TUFLRUNPTkZJR19IICovCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXgg
ODIxODljYmU1NDNhZTQwNjQyZTExZjFkMDc1OWZkZTkxOGRjZjJlNy4uMmYyMjRmY2NmOWJmMjIx
ODE5Y2UzODQxZjUwZTNhMGY4NjRiMzQ0ZSAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0No
YW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEzLTA0LTA0ICBCZW5qYW1pbiBQb3VsYWluICA8
YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBXVEZVUkwgZnJvbSBXZWJLaXQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzk5NAor
CisgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KKworICAgICAgICAqIFNvdXJjZS9j
bWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2UvY21ha2Vjb25maWcu
aC5jbWFrZToKKwogMjAxMy0wNC0wNCAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29t
PgogCiAgICAgICAgIE5peGVkIHRoZSBkZWZ1bmN0IGNocm9taXVtIGZvbGRlciBmcm9tIE1hbnVh
bFRlc3RzCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>