<?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>136170</bug_id>
          
          <creation_ts>2014-08-22 14:19:48 -0700</creation_ts>
          <short_desc>Remove LevelDB</short_desc>
          <delta_ts>2014-08-22 23:33:28 -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="Nagy Renátó">rnagy</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>alecflett</cc>
    
    <cc>bunhere</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jsbell</cc>
    
    <cc>ossy</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1030796</commentid>
    <comment_count>0</comment_count>
    <who name="Nagy Renátó">rnagy</who>
    <bug_when>2014-08-22 14:19:48 -0700</bug_when>
    <thetext>Nobody uses LevelDB, so we should remove it from trunk. Here is the webkit-dev discussion about it - https://lists.webkit.org/pipermail/webkit-dev/2014-April/026484.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030797</commentid>
    <comment_count>1</comment_count>
      <attachid>236998</attachid>
    <who name="Nagy Renátó">rnagy</who>
    <bug_when>2014-08-22 14:29:09 -0700</bug_when>
    <thetext>Created attachment 236998
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030894</commentid>
    <comment_count>2</comment_count>
      <attachid>236998</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2014-08-22 22:49:17 -0700</bug_when>
    <thetext>Comment on attachment 236998
Proposed patch

I think no ports use levelDB anymore. rs=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030906</commentid>
    <comment_count>3</comment_count>
      <attachid>236998</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-22 23:33:23 -0700</bug_when>
    <thetext>Comment on attachment 236998
Proposed patch

Clearing flags on attachment: 236998

Committed r172883: &lt;http://trac.webkit.org/changeset/172883&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030907</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-22 23:33:28 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236998</attachid>
            <date>2014-08-22 14:29:09 -0700</date>
            <delta_ts>2014-08-22 23:33:23 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-Remove-LevelDB.patch</filename>
            <type>text/plain</type>
            <size>1202758</size>
            <attacher name="Nagy Renátó">rnagy</attacher>
            
              <data encoding="base64">RnJvbSAxZDYwMTIxODY3MWI2NTE0NmMwYmRlNjE4NjFlYWQxMTgwNWE4YTEwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSZW5hdG8gTmFneSA8bmFneS5yZW5hdG9Ac3R1ZC51LXN6ZWdl
ZC5odT4KRGF0ZTogRnJpLCAyMiBBdWcgMjAxNCAyMzowNDozOCArMDIwMApTdWJqZWN0OiBbUEFU
Q0hdIFJlbW92ZSBMZXZlbERCCgotLS0KIFNvdXJjZS9UaGlyZFBhcnR5L0NoYW5nZUxvZyAgICAg
ICAgICAgICAgICAgICAgICAgIHwgIDEzOSArKwogU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9B
VVRIT1JTICAgICAgICAgICAgICAgICAgfCAgICA4IC0KIFNvdXJjZS9UaGlyZFBhcnR5L2xldmVs
ZGIvTElDRU5TRSAgICAgICAgICAgICAgICAgIHwgICAyNyAtCiBTb3VyY2UvVGhpcmRQYXJ0eS9s
ZXZlbGRiL01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAyMDIgLS0KIFNvdXJjZS9UaGlyZFBh
cnR5L2xldmVsZGIvTkVXUyAgICAgICAgICAgICAgICAgICAgIHwgICAxNyAtCiBTb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL1JFQURNRSAgICAgICAgICAgICAgICAgICB8ICAgNTEgLQogU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi9UT0RPICAgICAgICAgICAgICAgICAgICAgfCAgIDE0IC0KIFNv
dXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvYnVpbGRfZGV0ZWN0X3BsYXRmb3JtICAgIHwgIDIwMyAt
LQogU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9idWlsZGVyLmNjICAgICAgICAgICAgfCAg
IDg4IC0KIFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvYnVpbGRlci5oICAgICAgICAgICAg
IHwgICAzNCAtCiBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2MuY2MgICAgICAgICAgICAg
ICAgICB8ICA1OTUgLS0tLS0tCiBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2NfdGVzdC5j
ICAgICAgICAgICAgICB8ICAzOTAgLS0tLQogU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9j
b3JydXB0aW9uX3Rlc3QuY2MgICAgfCAgMzU5IC0tLS0KIFNvdXJjZS9UaGlyZFBhcnR5L2xldmVs
ZGIvZGIvZGJfYmVuY2guY2MgICAgICAgICAgIHwgIDk3OSAtLS0tLS0tLS0tCiBTb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL2RiL2RiX2ltcGwuY2MgICAgICAgICAgICB8IDE0NjcgLS0tLS0tLS0t
LS0tLS0KIFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZGJfaW1wbC5oICAgICAgICAgICAg
IHwgIDIwMiAtLQogU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9kYl9pdGVyLmNjICAgICAg
ICAgICAgfCAgMjk5IC0tLQogU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9kYl9pdGVyLmgg
ICAgICAgICAgICAgfCAgIDI2IC0KIFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZGJfdGVz
dC5jYyAgICAgICAgICAgIHwgMjAyNyAtLS0tLS0tLS0tLS0tLS0tLS0tLQogU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi9kYi9kYmZvcm1hdC5jYyAgICAgICAgICAgfCAgMTQwIC0tCiBTb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2RiZm9ybWF0LmggICAgICAgICAgICB8ICAyMjcgLS0tCiBT
b3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2RiZm9ybWF0X3Rlc3QuY2MgICAgICB8ICAxMTIg
LS0KIFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZmlsZW5hbWUuY2MgICAgICAgICAgIHwg
IDEzOSAtLQogU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9maWxlbmFtZS5oICAgICAgICAg
ICAgfCAgIDgwIC0KIFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZmlsZW5hbWVfdGVzdC5j
YyAgICAgIHwgIDEyMiAtLQogU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9sZXZlbGRiX21h
aW4uY2MgICAgICAgfCAgMjM4IC0tLQogU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9sb2df
Zm9ybWF0LmggICAgICAgICAgfCAgIDM1IC0KIFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIv
bG9nX3JlYWRlci5jYyAgICAgICAgIHwgIDI1OSAtLS0KIFNvdXJjZS9UaGlyZFBhcnR5L2xldmVs
ZGIvZGIvbG9nX3JlYWRlci5oICAgICAgICAgIHwgIDEwOCAtLQogU291cmNlL1RoaXJkUGFydHkv
bGV2ZWxkYi9kYi9sb2dfdGVzdC5jYyAgICAgICAgICAgfCAgNTAwIC0tLS0tCiBTb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL2RiL2xvZ193cml0ZXIuY2MgICAgICAgICB8ICAxMDMgLQogU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9sb2dfd3JpdGVyLmggICAgICAgICAgfCAgIDQ4IC0KIFNv
dXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvbWVtdGFibGUuY2MgICAgICAgICAgIHwgIDE0NSAt
LQogU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9tZW10YWJsZS5oICAgICAgICAgICAgfCAg
IDkxIC0KIFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvcmVwYWlyLmNjICAgICAgICAgICAg
IHwgIDM4OSAtLS0tCiBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3NraXBsaXN0LmggICAg
ICAgICAgICB8ICAzNzkgLS0tLQogU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9za2lwbGlz
dF90ZXN0LmNjICAgICAgfCAgMzc4IC0tLS0KIFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIv
c25hcHNob3QuaCAgICAgICAgICAgIHwgICA2NiAtCiBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRi
L2RiL3RhYmxlX2NhY2hlLmNjICAgICAgICB8ICAxMjEgLS0KIFNvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvZGIvdGFibGVfY2FjaGUuaCAgICAgICAgIHwgICA2MSAtCiBTb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL2RiL3ZlcnNpb25fZWRpdC5jYyAgICAgICB8ICAyNjYgLS0tCiBTb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL2RiL3ZlcnNpb25fZWRpdC5oICAgICAgICB8ICAxMDcgLS0KIFNvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvdmVyc2lvbl9lZGl0X3Rlc3QuY2MgIHwgICA0NiAtCiBT
b3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3ZlcnNpb25fc2V0LmNjICAgICAgICB8IDE0Mzgg
LS0tLS0tLS0tLS0tLS0KIFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvdmVyc2lvbl9zZXQu
aCAgICAgICAgIHwgIDM4MyAtLS0tCiBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3ZlcnNp
b25fc2V0X3Rlc3QuY2MgICB8ICAxNzkgLS0KIFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIv
d3JpdGVfYmF0Y2guY2MgICAgICAgIHwgIDE0NyAtLQogLi4uL1RoaXJkUGFydHkvbGV2ZWxkYi9k
Yi93cml0ZV9iYXRjaF9pbnRlcm5hbC5oICAgfCAgIDQ5IC0KIFNvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvZGIvd3JpdGVfYmF0Y2hfdGVzdC5jYyAgIHwgIDEyMCAtLQogLi4uL2xldmVsZGIvZG9j
L2JlbmNoL2RiX2JlbmNoX3NxbGl0ZTMuY2MgICAgICAgICAgfCAgNzE4IC0tLS0tLS0KIC4uLi9s
ZXZlbGRiL2RvYy9iZW5jaC9kYl9iZW5jaF90cmVlX2RiLmNjICAgICAgICAgIHwgIDUyOCAtLS0t
LQogU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kb2MvYmVuY2htYXJrLmh0bWwgICAgICAgfCAg
NDU5IC0tLS0tCiBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RvYy9kb2MuY3NzICAgICAgICAg
ICAgICB8ICAgODkgLQogU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kb2MvaW1wbC5odG1sICAg
ICAgICAgICAgfCAgMjEzIC0tCiBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RvYy9pbmRleC5o
dG1sICAgICAgICAgICB8ICA1NDkgLS0tLS0tCiBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2Rv
Yy9sb2dfZm9ybWF0LnR4dCAgICAgICB8ICAgNzUgLQogU291cmNlL1RoaXJkUGFydHkvbGV2ZWxk
Yi9kb2MvdGFibGVfZm9ybWF0LnR4dCAgICAgfCAgMTA0IC0KIFNvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvaGVscGVycy9tZW1lbnYvbWVtZW52LmNjIHwgIDM4NCAtLS0tCiBTb3VyY2UvVGhpcmRQ
YXJ0eS9sZXZlbGRiL2hlbHBlcnMvbWVtZW52L21lbWVudi5oICB8ICAgMjAgLQogLi4uL2xldmVs
ZGIvaGVscGVycy9tZW1lbnYvbWVtZW52X3Rlc3QuY2MgICAgICAgICAgfCAgMjMyIC0tLQogU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvYy5oICAgICAgfCAgMjkxIC0t
LQogU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvY2FjaGUuaCAgfCAg
IDk5IC0KIC4uLi9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9jb21wYXJhdG9yLmggICAgICAgICAg
IHwgICA2MyAtCiBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9kYi5o
ICAgICB8ICAxNjEgLS0KIFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRi
L2Vudi5oICAgIHwgIDMzMyAtLS0tCiAuLi4vbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvZmlsdGVy
X3BvbGljeS5oICAgICAgICB8ICAgNzAgLQogLi4uL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRl
L2xldmVsZGIvaXRlcmF0b3IuaCAgfCAgMTAwIC0KIC4uLi9UaGlyZFBhcnR5L2xldmVsZGIvaW5j
bHVkZS9sZXZlbGRiL29wdGlvbnMuaCAgIHwgIDE5NSAtLQogU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi9pbmNsdWRlL2xldmVsZGIvc2xpY2UuaCAgfCAgMTA5IC0tCiBTb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9zdGF0dXMuaCB8ICAxMDYgLQogU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvdGFibGUuaCAgfCAgIDg1IC0KIC4uLi9sZXZl
bGRiL2luY2x1ZGUvbGV2ZWxkYi90YWJsZV9idWlsZGVyLmggICAgICAgIHwgICA5MiAtCiAuLi4v
bGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvd3JpdGVfYmF0Y2guaCAgICAgICAgICB8ICAgNjQgLQog
U291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9wb3J0L1JFQURNRSAgICAgICAgICAgICAgfCAgIDEw
IC0KIFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9ydC9hdG9taWNfcG9pbnRlci5oICAgIHwg
IDIyNCAtLS0KIFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9ydC9wb3J0LmggICAgICAgICAg
ICAgIHwgICAxOSAtCiBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3BvcnQvcG9ydF9leGFtcGxl
LmggICAgICB8ICAxMzUgLS0KIFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9ydC9wb3J0X3Bv
c2l4LmNjICAgICAgIHwgICA1NCAtCiBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3BvcnQvcG9y
dF9wb3NpeC5oICAgICAgICB8ICAxNTQgLS0KIC4uLi9UaGlyZFBhcnR5L2xldmVsZGIvcG9ydC90
aHJlYWRfYW5ub3RhdGlvbnMuaCAgIHwgICA1OSAtCiBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRi
L3BvcnQvd2luL3N0ZGludC5oICAgICAgICB8ICAgMjQgLQogU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi90YWJsZS9ibG9jay5jYyAgICAgICAgICAgfCAgMjY3IC0tLQogU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi90YWJsZS9ibG9jay5oICAgICAgICAgICAgfCAgIDQ0IC0KIFNvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvdGFibGUvYmxvY2tfYnVpbGRlci5jYyAgIHwgIDEwOSAtLQogU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9ibG9ja19idWlsZGVyLmggICAgfCAgIDU3IC0KIFNv
dXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvZmlsdGVyX2Jsb2NrLmNjICAgIHwgIDExMSAt
LQogU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9maWx0ZXJfYmxvY2suaCAgICAgfCAg
IDY4IC0KIC4uLi9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvZmlsdGVyX2Jsb2NrX3Rlc3QuY2Mg
IHwgIDEyOCAtLQogU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9mb3JtYXQuY2MgICAg
ICAgICAgfCAgMTQ1IC0tCiBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2Zvcm1hdC5o
ICAgICAgICAgICB8ICAxMDggLS0KIFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvaXRl
cmF0b3IuY2MgICAgICAgIHwgICA2NyAtCiBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxl
L2l0ZXJhdG9yX3dyYXBwZXIuaCB8ICAgNjMgLQogU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90
YWJsZS9tZXJnZXIuY2MgICAgICAgICAgfCAgMTk3IC0tCiBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZl
bGRiL3RhYmxlL21lcmdlci5oICAgICAgICAgICB8ICAgMjYgLQogU291cmNlL1RoaXJkUGFydHkv
bGV2ZWxkYi90YWJsZS90YWJsZS5jYyAgICAgICAgICAgfCAgMjc2IC0tLQogU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi90YWJsZS90YWJsZV9idWlsZGVyLmNjICAgfCAgMjcwIC0tLQogU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS90YWJsZV90ZXN0LmNjICAgICAgfCAgODM4IC0tLS0t
LS0tCiAuLi4vVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL3R3b19sZXZlbF9pdGVyYXRvci5jYyB8
ICAxODIgLS0KIC4uLi9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvdHdvX2xldmVsX2l0ZXJhdG9y
LmggIHwgICAzNCAtCiBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvYXJlbmEuY2MgICAg
ICAgICAgICB8ICAgNjggLQogU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2FyZW5hLmgg
ICAgICAgICAgICAgfCAgIDY4IC0KIFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9hcmVu
YV90ZXN0LmNjICAgICAgIHwgICA2OCAtCiBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwv
Ymxvb20uY2MgICAgICAgICAgICB8ICAgOTUgLQogU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91
dGlsL2Jsb29tX3Rlc3QuY2MgICAgICAgfCAgMTYwIC0tCiBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZl
bGRiL3V0aWwvY2FjaGUuY2MgICAgICAgICAgICB8ICAzMjggLS0tLQogU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi91dGlsL2NhY2hlX3Rlc3QuY2MgICAgICAgfCAgMTg2IC0tCiBTb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL3V0aWwvY29kaW5nLmNjICAgICAgICAgICB8ICAxOTQgLS0KIFNvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9jb2RpbmcuaCAgICAgICAgICAgIHwgIDEwNCAtCiBT
b3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvY29kaW5nX3Rlc3QuY2MgICAgICB8ICAxOTYg
LS0KIFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9jb21wYXJhdG9yLmNjICAgICAgIHwg
ICA4MSAtCiBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvY3JjMzJjLmNjICAgICAgICAg
ICB8ICAzMzIgLS0tLQogU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2NyYzMyYy5oICAg
ICAgICAgICAgfCAgIDQ1IC0KIFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9jcmMzMmNf
dGVzdC5jYyAgICAgIHwgICA3MiAtCiBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvZW52
LmNjICAgICAgICAgICAgICB8ICAgOTYgLQogU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGls
L2Vudl9wb3NpeC5jYyAgICAgICAgfCAgNjk4IC0tLS0tLS0KIFNvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvdXRpbC9lbnZfdGVzdC5jYyAgICAgICAgIHwgIDEwNCAtCiBTb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL3V0aWwvZmlsdGVyX3BvbGljeS5jYyAgICB8ICAgMTEgLQogU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi91dGlsL2hhc2guY2MgICAgICAgICAgICAgfCAgIDQ1IC0KIFNvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvdXRpbC9oYXNoLmggICAgICAgICAgICAgIHwgICAxOSAtCiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvaGlzdG9ncmFtLmNjICAgICAgICB8ICAxMzkgLS0K
IFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9oaXN0b2dyYW0uaCAgICAgICAgIHwgICA0
MiAtCiBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvbG9nZ2luZy5jYyAgICAgICAgICB8
ICAgODEgLQogU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2xvZ2dpbmcuaCAgICAgICAg
ICAgfCAgIDQ3IC0KIFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9tdXRleGxvY2suaCAg
ICAgICAgIHwgICA0MSAtCiBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvb3B0aW9ucy5j
YyAgICAgICAgICB8ICAgMjkgLQogU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL3Bvc2l4
X2xvZ2dlci5oICAgICAgfCAgIDk4IC0KIFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9y
YW5kb20uaCAgICAgICAgICAgIHwgICA1OSAtCiBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0
aWwvc3RhdHVzLmNjICAgICAgICAgICB8ICAgNzUgLQogU291cmNlL1RoaXJkUGFydHkvbGV2ZWxk
Yi91dGlsL3Rlc3RoYXJuZXNzLmNjICAgICAgfCAgIDc3IC0KIFNvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvdXRpbC90ZXN0aGFybmVzcy5oICAgICAgIHwgIDEzOCAtLQogU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi91dGlsL3Rlc3R1dGlsLmNjICAgICAgICAgfCAgIDUxIC0KIFNvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvdXRpbC90ZXN0dXRpbC5oICAgICAgICAgIHwgICA1MyAtCiBTb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dCAgICAgICAgICAgICAgICAgICAgICB8ICAgNzQgLQogU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQyICsK
IC4uLi9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcCAgIHwgICAx
MyAtCiAuLi4vaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwICAgICAgICB8
ICAgMzcgLQogLi4uL2xldmVsZGIvSURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQi5jcHAgICAg
ICAgfCAgMjAyIC0tCiAuLi4vbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCLmgg
ICAgICAgICB8ICAxMDEgLQogLi4uL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUxl
dmVsREIuY3BwICAgfCAxODk1IC0tLS0tLS0tLS0tLS0tLS0tLQogLi4uL2luZGV4ZWRkYi9sZXZl
bGRiL0lEQkJhY2tpbmdTdG9yZUxldmVsREIuaCAgICAgfCAgMTQzIC0tCiAuLi4vbGV2ZWxkYi9J
REJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIuY3BwICB8ICAgODUgLQogLi4uL2xldmVs
ZGIvSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCLmggICAgfCAgIDcxIC0KIC4uLi9p
bmRleGVkZGIvbGV2ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwIHwgIDE5NiAtLQog
Li4uL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5oICAgfCAgIDg3
IC0KIC4uLi9pbmRleGVkZGIvbGV2ZWxkYi9JREJJbmRleFdyaXRlckxldmVsREIuY3BwICAgIHwg
ICA5NCAtCiAuLi4vaW5kZXhlZGRiL2xldmVsZGIvSURCSW5kZXhXcml0ZXJMZXZlbERCLmggICAg
ICB8ICAgNjYgLQogLi4uL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGlu
Zy5jcHAgfCAxODA3IC0tLS0tLS0tLS0tLS0tLS0tCiAuLi4vTW9kdWxlcy9pbmRleGVkZGIvbGV2
ZWxkYi9JREJMZXZlbERCQ29kaW5nLmggICB8ICAzNjcgLS0tLQogLi4uL2xldmVsZGIvSURCU2Vy
dmVyQ29ubmVjdGlvbkxldmVsREIuY3BwICAgICAgICAgfCAgNjI3IC0tLS0tLQogLi4uL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmggfCAgIDk4IC0KIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ogICAgIHwgICAgMSAtCiAu
Li4vV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzICAgICAgICB8ICAgIDYg
LQogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgfCAg
IDk2IC0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RhdGFiYXNlU3RyYXRlZ3kuY3BwICAgICAg
IHwgICAgOCAtCiAuLi4vV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJDb21wYXJhdG9y
LmggICB8ICAgNDkgLQogLi4uL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJh
c2UuY3BwICAgfCAgMzMzIC0tLS0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2
ZWxEQkRhdGFiYXNlLmggIHwgICA4OSAtCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRi
L0xldmVsREJJdGVyYXRvci5oICB8ICAgNTEgLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2
ZWxkYi9MZXZlbERCU2xpY2UuaCAgICAgfCAgIDY4IC0KIC4uLi9wbGF0Zm9ybS9sZXZlbGRiL0xl
dmVsREJUcmFuc2FjdGlvbi5jcHAgICAgICAgIHwgIDUyNSAtLS0tLQogLi4uL1dlYkNvcmUvcGxh
dGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24uaCAgfCAgMTkwIC0tCiAuLi4vV2ViQ29y
ZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNoLmNwcCB8ICAgNjggLQogLi4uL1dl
YkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCV3JpdGVCYXRjaC5oICAgfCAgIDYyIC0KIFRv
b2xzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMCAr
CiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jb25maWcvd2F0Y2hsaXN0ICAgICB8ICAg
IDEgLQogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5ICAgICAgICAgICAg
fCAgICAxIC0KIDE2NiBmaWxlcyBjaGFuZ2VkLCAxOTEgaW5zZXJ0aW9ucygrKSwgMzM2ODMgZGVs
ZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9B
VVRIT1JTCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9MSUNF
TlNFCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9NYWtlZmls
ZQogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvTkVXUwogZGVs
ZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvUkVBRE1FCiBkZWxldGUg
bW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9UT0RPCiBkZWxldGUgbW9kZSAx
MDA3NTUgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9idWlsZF9kZXRlY3RfcGxhdGZvcm0KIGRl
bGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2J1aWxkZXIuY2MK
IGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2J1aWxkZXIu
aAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvYy5jYwog
ZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvY190ZXN0LmMK
IGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2NvcnJ1cHRp
b25fdGVzdC5jYwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
ZGIvZGJfYmVuY2guY2MKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZl
bGRiL2RiL2RiX2ltcGwuY2MKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9s
ZXZlbGRiL2RiL2RiX2ltcGwuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvZGIvZGJfaXRlci5jYwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBh
cnR5L2xldmVsZGIvZGIvZGJfaXRlci5oCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi9kYi9kYl90ZXN0LmNjCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1Ro
aXJkUGFydHkvbGV2ZWxkYi9kYi9kYmZvcm1hdC5jYwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZGJmb3JtYXQuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZGJmb3JtYXRfdGVzdC5jYwogZGVsZXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZmlsZW5hbWUuY2MKIGRlbGV0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2ZpbGVuYW1lLmgKIGRlbGV0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2ZpbGVuYW1lX3Rlc3Qu
Y2MKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2xldmVs
ZGJfbWFpbi5jYwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
ZGIvbG9nX2Zvcm1hdC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi9kYi9sb2dfcmVhZGVyLmNjCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi9kYi9sb2dfcmVhZGVyLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL2RiL2xvZ190ZXN0LmNjCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9sb2dfd3JpdGVyLmNjCiBkZWxldGUgbW9kZSAxMDA2NDQg
U291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9sb2dfd3JpdGVyLmgKIGRlbGV0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL21lbXRhYmxlLmNjCiBkZWxldGUgbW9k
ZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9tZW10YWJsZS5oCiBkZWxldGUg
bW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9yZXBhaXIuY2MKIGRlbGV0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3NraXBsaXN0LmgKIGRl
bGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3NraXBsaXN0X3Rl
c3QuY2MKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3Nu
YXBzaG90LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2Ri
L3RhYmxlX2NhY2hlLmNjCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi9kYi90YWJsZV9jYWNoZS5oCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi9kYi92ZXJzaW9uX2VkaXQuY2MKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3ZlcnNpb25fZWRpdC5oCiBkZWxldGUgbW9kZSAxMDA2NDQg
U291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi92ZXJzaW9uX2VkaXRfdGVzdC5jYwogZGVsZXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvdmVyc2lvbl9zZXQuY2MK
IGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3ZlcnNpb25f
c2V0LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3Zl
cnNpb25fc2V0X3Rlc3QuY2MKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9s
ZXZlbGRiL2RiL3dyaXRlX2JhdGNoLmNjCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi9kYi93cml0ZV9iYXRjaF9pbnRlcm5hbC5oCiBkZWxldGUgbW9kZSAxMDA2
NDQgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi93cml0ZV9iYXRjaF90ZXN0LmNjCiBkZWxl
dGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kb2MvYmVuY2gvZGJfYmVu
Y2hfc3FsaXRlMy5jYwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xldmVs
ZGIvZG9jL2JlbmNoL2RiX2JlbmNoX3RyZWVfZGIuY2MKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RvYy9iZW5jaG1hcmsuaHRtbAogZGVsZXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZG9jL2RvYy5jc3MKIGRlbGV0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RvYy9pbXBsLmh0bWwKIGRlbGV0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RvYy9pbmRleC5odG1sCiBkZWxldGUg
bW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kb2MvbG9nX2Zvcm1hdC50eHQK
IGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RvYy90YWJsZV9m
b3JtYXQudHh0CiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9o
ZWxwZXJzL21lbWVudi9tZW1lbnYuY2MKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQ
YXJ0eS9sZXZlbGRiL2hlbHBlcnMvbWVtZW52L21lbWVudi5oCiBkZWxldGUgbW9kZSAxMDA2NDQg
U291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9oZWxwZXJzL21lbWVudi9tZW1lbnZfdGVzdC5jYwog
ZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZl
bGRiL2MuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5j
bHVkZS9sZXZlbGRiL2NhY2hlLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9jb21wYXJhdG9yLmgKIGRlbGV0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9kYi5oCiBkZWxldGUg
bW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvZW52
LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUv
bGV2ZWxkYi9maWx0ZXJfcG9saWN5LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQ
YXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9pdGVyYXRvci5oCiBkZWxldGUgbW9kZSAxMDA2
NDQgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvb3B0aW9ucy5oCiBk
ZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVs
ZGIvc2xpY2UuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
aW5jbHVkZS9sZXZlbGRiL3N0YXR1cy5oCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvdGFibGUuaAogZGVsZXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL3RhYmxlX2J1aWxkZXIu
aAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9s
ZXZlbGRiL3dyaXRlX2JhdGNoLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL3BvcnQvUkVBRE1FCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi9wb3J0L2F0b21pY19wb2ludGVyLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3BvcnQvcG9ydC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9wb3J0L3BvcnRfZXhhbXBsZS5oCiBkZWxldGUgbW9kZSAx
MDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9wb3J0L3BvcnRfcG9zaXguY2MKIGRlbGV0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3BvcnQvcG9ydF9wb3NpeC5o
CiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9wb3J0L3RocmVh
ZF9hbm5vdGF0aW9ucy5oCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi9wb3J0L3dpbi9zdGRpbnQuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBh
cnR5L2xldmVsZGIvdGFibGUvYmxvY2suY2MKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2Jsb2NrLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2Jsb2NrX2J1aWxkZXIuY2MKIGRlbGV0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2Jsb2NrX2J1aWxkZXIuaAogZGVs
ZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvZmlsdGVyX2Js
b2NrLmNjCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJs
ZS9maWx0ZXJfYmxvY2suaAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvdGFibGUvZmlsdGVyX2Jsb2NrX3Rlc3QuY2MKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2Zvcm1hdC5jYwogZGVsZXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvZm9ybWF0LmgKIGRlbGV0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2l0ZXJhdG9yLmNjCiBkZWxldGUg
bW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9pdGVyYXRvcl93cmFw
cGVyLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxl
L21lcmdlci5jYwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
dGFibGUvbWVyZ2VyLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZl
bGRiL3RhYmxlL3RhYmxlLmNjCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkv
bGV2ZWxkYi90YWJsZS90YWJsZV9idWlsZGVyLmNjCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS90YWJsZV90ZXN0LmNjCiBkZWxldGUgbW9kZSAxMDA2
NDQgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS90d29fbGV2ZWxfaXRlcmF0b3IuY2MK
IGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL3R3b19s
ZXZlbF9pdGVyYXRvci5oCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi91dGlsL2FyZW5hLmNjCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkv
bGV2ZWxkYi91dGlsL2FyZW5hLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL3V0aWwvYXJlbmFfdGVzdC5jYwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvdXRpbC9ibG9vbS5jYwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9ibG9vbV90ZXN0LmNjCiBkZWxldGUgbW9kZSAxMDA2
NDQgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2NhY2hlLmNjCiBkZWxldGUgbW9kZSAx
MDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2NhY2hlX3Rlc3QuY2MKIGRlbGV0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvY29kaW5nLmNjCiBk
ZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2NvZGluZy5o
CiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2NvZGlu
Z190ZXN0LmNjCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91
dGlsL2NvbXBhcmF0b3IuY2MKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9s
ZXZlbGRiL3V0aWwvY3JjMzJjLmNjCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi91dGlsL2NyYzMyYy5oCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi91dGlsL2NyYzMyY190ZXN0LmNjCiBkZWxldGUgbW9kZSAxMDA2NDQgU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2Vudi5jYwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9lbnZfcG9zaXguY2MKIGRlbGV0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvZW52X3Rlc3QuY2MKIGRlbGV0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvZmlsdGVyX3BvbGljeS5j
YwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9oYXNo
LmNjCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2hh
c2guaAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9o
aXN0b2dyYW0uY2MKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRi
L3V0aWwvaGlzdG9ncmFtLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9s
ZXZlbGRiL3V0aWwvbG9nZ2luZy5jYwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBh
cnR5L2xldmVsZGIvdXRpbC9sb2dnaW5nLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL3V0aWwvbXV0ZXhsb2NrLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvb3B0aW9ucy5jYwogZGVsZXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9wb3NpeF9sb2dnZXIuaAogZGVsZXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9yYW5kb20uaAogZGVsZXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9zdGF0dXMuY2MKIGRl
bGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvdGVzdGhhcm5l
c3MuY2MKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwv
dGVzdGhhcm5lc3MuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5L2xldmVs
ZGIvdXRpbC90ZXN0dXRpbC5jYwogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvdXRpbC90ZXN0dXRpbC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERC
LmNwcAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2xldmVsZGIvSURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQi5oCiBkZWxldGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3Rv
cmVMZXZlbERCLmNwcAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oCiBkZWxldGUgbW9kZSAx
MDA2NDQgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5n
U3RvcmVUcmFuc2FjdGlvbkxldmVsREIuY3BwCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bkxldmVsREIuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcAogZGVsZXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9y
eUJhY2tlbmRMZXZlbERCLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkluZGV4V3JpdGVyTGV2ZWxEQi5jcHAKIGRlbGV0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQklu
ZGV4V3JpdGVyTGV2ZWxEQi5oCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmNwcAogZGVsZXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxE
QkNvZGluZy5oCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvbGV2ZWxkYi9JREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5jcHAKIGRlbGV0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlNlcnZl
ckNvbm5lY3Rpb25MZXZlbERCLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9sZXZlbGRiL0xldmVsREJDb21wYXJhdG9yLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJEYXRhYmFzZS5jcHAKIGRlbGV0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJEYXRh
YmFzZS5oCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxk
Yi9MZXZlbERCSXRlcmF0b3IuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2xldmVsZGIvTGV2ZWxEQlNsaWNlLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5jcHAKIGRlbGV0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2Fj
dGlvbi5oCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxk
Yi9MZXZlbERCV3JpdGVCYXRjaC5jcHAKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNoLmgKCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9DaGFuZ2VMb2cKaW5k
ZXggNjA3YWU4Mi4uMzlkNzc5NCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MiBAQAor
MjAxNC0wOC0yMiAgUmVuYXRvIE5hZ3kgIDxuYWd5LnJlbmF0b0BzdHVkLnUtc3plZ2VkLmh1Pgor
CisgICAgICAgIFJlbW92ZSBMZXZlbERCLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBsZXZlbGRiL0FVVEhPUlM6IFJlbW92ZWQuCisgICAgICAgICog
bGV2ZWxkYi9MSUNFTlNFOiBSZW1vdmVkLgorICAgICAgICAqIGxldmVsZGIvTWFrZWZpbGU6IFJl
bW92ZWQuCisgICAgICAgICogbGV2ZWxkYi9ORVdTOiBSZW1vdmVkLgorICAgICAgICAqIGxldmVs
ZGIvUkVBRE1FOiBSZW1vdmVkLgorICAgICAgICAqIGxldmVsZGIvVE9ETzogUmVtb3ZlZC4KKyAg
ICAgICAgKiBsZXZlbGRiL2J1aWxkX2RldGVjdF9wbGF0Zm9ybTogUmVtb3ZlZC4KKyAgICAgICAg
KiBsZXZlbGRiL2RiL2J1aWxkZXIuY2M6IFJlbW92ZWQuCisgICAgICAgICogbGV2ZWxkYi9kYi9i
dWlsZGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogbGV2ZWxkYi9kYi9jLmNjOiBSZW1vdmVkLgor
ICAgICAgICAqIGxldmVsZGIvZGIvY190ZXN0LmM6IFJlbW92ZWQuCisgICAgICAgICogbGV2ZWxk
Yi9kYi9jb3JydXB0aW9uX3Rlc3QuY2M6IFJlbW92ZWQuCisgICAgICAgICogbGV2ZWxkYi9kYi9k
Yl9iZW5jaC5jYzogUmVtb3ZlZC4KKyAgICAgICAgKiBsZXZlbGRiL2RiL2RiX2ltcGwuY2M6IFJl
bW92ZWQuCisgICAgICAgICogbGV2ZWxkYi9kYi9kYl9pbXBsLmg6IFJlbW92ZWQuCisgICAgICAg
ICogbGV2ZWxkYi9kYi9kYl9pdGVyLmNjOiBSZW1vdmVkLgorICAgICAgICAqIGxldmVsZGIvZGIv
ZGJfaXRlci5oOiBSZW1vdmVkLgorICAgICAgICAqIGxldmVsZGIvZGIvZGJfdGVzdC5jYzogUmVt
b3ZlZC4KKyAgICAgICAgKiBsZXZlbGRiL2RiL2RiZm9ybWF0LmNjOiBSZW1vdmVkLgorICAgICAg
ICAqIGxldmVsZGIvZGIvZGJmb3JtYXQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBsZXZlbGRiL2Ri
L2RiZm9ybWF0X3Rlc3QuY2M6IFJlbW92ZWQuCisgICAgICAgICogbGV2ZWxkYi9kYi9maWxlbmFt
ZS5jYzogUmVtb3ZlZC4KKyAgICAgICAgKiBsZXZlbGRiL2RiL2ZpbGVuYW1lLmg6IFJlbW92ZWQu
CisgICAgICAgICogbGV2ZWxkYi9kYi9maWxlbmFtZV90ZXN0LmNjOiBSZW1vdmVkLgorICAgICAg
ICAqIGxldmVsZGIvZGIvbGV2ZWxkYl9tYWluLmNjOiBSZW1vdmVkLgorICAgICAgICAqIGxldmVs
ZGIvZGIvbG9nX2Zvcm1hdC5oOiBSZW1vdmVkLgorICAgICAgICAqIGxldmVsZGIvZGIvbG9nX3Jl
YWRlci5jYzogUmVtb3ZlZC4KKyAgICAgICAgKiBsZXZlbGRiL2RiL2xvZ19yZWFkZXIuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBsZXZlbGRiL2RiL2xvZ190ZXN0LmNjOiBSZW1vdmVkLgorICAgICAg
ICAqIGxldmVsZGIvZGIvbG9nX3dyaXRlci5jYzogUmVtb3ZlZC4KKyAgICAgICAgKiBsZXZlbGRi
L2RiL2xvZ193cml0ZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBsZXZlbGRiL2RiL21lbXRhYmxl
LmNjOiBSZW1vdmVkLgorICAgICAgICAqIGxldmVsZGIvZGIvbWVtdGFibGUuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBsZXZlbGRiL2RiL3JlcGFpci5jYzogUmVtb3ZlZC4KKyAgICAgICAgKiBsZXZl
bGRiL2RiL3NraXBsaXN0Lmg6IFJlbW92ZWQuCisgICAgICAgICogbGV2ZWxkYi9kYi9za2lwbGlz
dF90ZXN0LmNjOiBSZW1vdmVkLgorICAgICAgICAqIGxldmVsZGIvZGIvc25hcHNob3QuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBsZXZlbGRiL2RiL3RhYmxlX2NhY2hlLmNjOiBSZW1vdmVkLgorICAg
ICAgICAqIGxldmVsZGIvZGIvdGFibGVfY2FjaGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBsZXZl
bGRiL2RiL3ZlcnNpb25fZWRpdC5jYzogUmVtb3ZlZC4KKyAgICAgICAgKiBsZXZlbGRiL2RiL3Zl
cnNpb25fZWRpdC5oOiBSZW1vdmVkLgorICAgICAgICAqIGxldmVsZGIvZGIvdmVyc2lvbl9lZGl0
X3Rlc3QuY2M6IFJlbW92ZWQuCisgICAgICAgICogbGV2ZWxkYi9kYi92ZXJzaW9uX3NldC5jYzog
UmVtb3ZlZC4KKyAgICAgICAgKiBsZXZlbGRiL2RiL3ZlcnNpb25fc2V0Lmg6IFJlbW92ZWQuCisg
ICAgICAgICogbGV2ZWxkYi9kYi92ZXJzaW9uX3NldF90ZXN0LmNjOiBSZW1vdmVkLgorICAgICAg
ICAqIGxldmVsZGIvZGIvd3JpdGVfYmF0Y2guY2M6IFJlbW92ZWQuCisgICAgICAgICogbGV2ZWxk
Yi9kYi93cml0ZV9iYXRjaF9pbnRlcm5hbC5oOiBSZW1vdmVkLgorICAgICAgICAqIGxldmVsZGIv
ZGIvd3JpdGVfYmF0Y2hfdGVzdC5jYzogUmVtb3ZlZC4KKyAgICAgICAgKiBsZXZlbGRiL2RvYy9i
ZW5jaC9kYl9iZW5jaF9zcWxpdGUzLmNjOiBSZW1vdmVkLgorICAgICAgICAqIGxldmVsZGIvZG9j
L2JlbmNoL2RiX2JlbmNoX3RyZWVfZGIuY2M6IFJlbW92ZWQuCisgICAgICAgICogbGV2ZWxkYi9k
b2MvYmVuY2htYXJrLmh0bWw6IFJlbW92ZWQuCisgICAgICAgICogbGV2ZWxkYi9kb2MvZG9jLmNz
czogUmVtb3ZlZC4KKyAgICAgICAgKiBsZXZlbGRiL2RvYy9pbXBsLmh0bWw6IFJlbW92ZWQuCisg
ICAgICAgICogbGV2ZWxkYi9kb2MvaW5kZXguaHRtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBsZXZl
bGRiL2RvYy9sb2dfZm9ybWF0LnR4dDogUmVtb3ZlZC4KKyAgICAgICAgKiBsZXZlbGRiL2RvYy90
YWJsZV9mb3JtYXQudHh0OiBSZW1vdmVkLgorICAgICAgICAqIGxldmVsZGIvaGVscGVycy9tZW1l
bnYvbWVtZW52LmNjOiBSZW1vdmVkLgorICAgICAgICAqIGxldmVsZGIvaGVscGVycy9tZW1lbnYv
bWVtZW52Lmg6IFJlbW92ZWQuCisgICAgICAgICogbGV2ZWxkYi9oZWxwZXJzL21lbWVudi9tZW1l
bnZfdGVzdC5jYzogUmVtb3ZlZC4KKyAgICAgICAgKiBsZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9j
Lmg6IFJlbW92ZWQuCisgICAgICAgICogbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvY2FjaGUuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBsZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9jb21wYXJhdG9yLmg6
IFJlbW92ZWQuCisgICAgICAgICogbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvZGIuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBsZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9lbnYuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBsZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9maWx0ZXJfcG9saWN5Lmg6IFJlbW92ZWQu
CisgICAgICAgICogbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvaXRlcmF0b3IuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBsZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9vcHRpb25zLmg6IFJlbW92ZWQuCisg
ICAgICAgICogbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvc2xpY2UuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBsZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9zdGF0dXMuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBsZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi90YWJsZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGxl
dmVsZGIvaW5jbHVkZS9sZXZlbGRiL3RhYmxlX2J1aWxkZXIuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBsZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi93cml0ZV9iYXRjaC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGxldmVsZGIvcG9ydC9SRUFETUU6IFJlbW92ZWQuCisgICAgICAgICogbGV2ZWxkYi9wb3J0
L2F0b21pY19wb2ludGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogbGV2ZWxkYi9wb3J0L3BvcnQu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBsZXZlbGRiL3BvcnQvcG9ydF9leGFtcGxlLmg6IFJlbW92
ZWQuCisgICAgICAgICogbGV2ZWxkYi9wb3J0L3BvcnRfcG9zaXguY2M6IFJlbW92ZWQuCisgICAg
ICAgICogbGV2ZWxkYi9wb3J0L3BvcnRfcG9zaXguaDogUmVtb3ZlZC4KKyAgICAgICAgKiBsZXZl
bGRiL3BvcnQvdGhyZWFkX2Fubm90YXRpb25zLmg6IFJlbW92ZWQuCisgICAgICAgICogbGV2ZWxk
Yi9wb3J0L3dpbi9zdGRpbnQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBsZXZlbGRiL3RhYmxlL2Js
b2NrLmNjOiBSZW1vdmVkLgorICAgICAgICAqIGxldmVsZGIvdGFibGUvYmxvY2suaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBsZXZlbGRiL3RhYmxlL2Jsb2NrX2J1aWxkZXIuY2M6IFJlbW92ZWQuCisg
ICAgICAgICogbGV2ZWxkYi90YWJsZS9ibG9ja19idWlsZGVyLmg6IFJlbW92ZWQuCisgICAgICAg
ICogbGV2ZWxkYi90YWJsZS9maWx0ZXJfYmxvY2suY2M6IFJlbW92ZWQuCisgICAgICAgICogbGV2
ZWxkYi90YWJsZS9maWx0ZXJfYmxvY2suaDogUmVtb3ZlZC4KKyAgICAgICAgKiBsZXZlbGRiL3Rh
YmxlL2ZpbHRlcl9ibG9ja190ZXN0LmNjOiBSZW1vdmVkLgorICAgICAgICAqIGxldmVsZGIvdGFi
bGUvZm9ybWF0LmNjOiBSZW1vdmVkLgorICAgICAgICAqIGxldmVsZGIvdGFibGUvZm9ybWF0Lmg6
IFJlbW92ZWQuCisgICAgICAgICogbGV2ZWxkYi90YWJsZS9pdGVyYXRvci5jYzogUmVtb3ZlZC4K
KyAgICAgICAgKiBsZXZlbGRiL3RhYmxlL2l0ZXJhdG9yX3dyYXBwZXIuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBsZXZlbGRiL3RhYmxlL21lcmdlci5jYzogUmVtb3ZlZC4KKyAgICAgICAgKiBsZXZl
bGRiL3RhYmxlL21lcmdlci5oOiBSZW1vdmVkLgorICAgICAgICAqIGxldmVsZGIvdGFibGUvdGFi
bGUuY2M6IFJlbW92ZWQuCisgICAgICAgICogbGV2ZWxkYi90YWJsZS90YWJsZV9idWlsZGVyLmNj
OiBSZW1vdmVkLgorICAgICAgICAqIGxldmVsZGIvdGFibGUvdGFibGVfdGVzdC5jYzogUmVtb3Zl
ZC4KKyAgICAgICAgKiBsZXZlbGRiL3RhYmxlL3R3b19sZXZlbF9pdGVyYXRvci5jYzogUmVtb3Zl
ZC4KKyAgICAgICAgKiBsZXZlbGRiL3RhYmxlL3R3b19sZXZlbF9pdGVyYXRvci5oOiBSZW1vdmVk
LgorICAgICAgICAqIGxldmVsZGIvdXRpbC9hcmVuYS5jYzogUmVtb3ZlZC4KKyAgICAgICAgKiBs
ZXZlbGRiL3V0aWwvYXJlbmEuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBsZXZlbGRiL3V0aWwvYXJl
bmFfdGVzdC5jYzogUmVtb3ZlZC4KKyAgICAgICAgKiBsZXZlbGRiL3V0aWwvYmxvb20uY2M6IFJl
bW92ZWQuCisgICAgICAgICogbGV2ZWxkYi91dGlsL2Jsb29tX3Rlc3QuY2M6IFJlbW92ZWQuCisg
ICAgICAgICogbGV2ZWxkYi91dGlsL2NhY2hlLmNjOiBSZW1vdmVkLgorICAgICAgICAqIGxldmVs
ZGIvdXRpbC9jYWNoZV90ZXN0LmNjOiBSZW1vdmVkLgorICAgICAgICAqIGxldmVsZGIvdXRpbC9j
b2RpbmcuY2M6IFJlbW92ZWQuCisgICAgICAgICogbGV2ZWxkYi91dGlsL2NvZGluZy5oOiBSZW1v
dmVkLgorICAgICAgICAqIGxldmVsZGIvdXRpbC9jb2RpbmdfdGVzdC5jYzogUmVtb3ZlZC4KKyAg
ICAgICAgKiBsZXZlbGRiL3V0aWwvY29tcGFyYXRvci5jYzogUmVtb3ZlZC4KKyAgICAgICAgKiBs
ZXZlbGRiL3V0aWwvY3JjMzJjLmNjOiBSZW1vdmVkLgorICAgICAgICAqIGxldmVsZGIvdXRpbC9j
cmMzMmMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBsZXZlbGRiL3V0aWwvY3JjMzJjX3Rlc3QuY2M6
IFJlbW92ZWQuCisgICAgICAgICogbGV2ZWxkYi91dGlsL2Vudi5jYzogUmVtb3ZlZC4KKyAgICAg
ICAgKiBsZXZlbGRiL3V0aWwvZW52X3Bvc2l4LmNjOiBSZW1vdmVkLgorICAgICAgICAqIGxldmVs
ZGIvdXRpbC9lbnZfdGVzdC5jYzogUmVtb3ZlZC4KKyAgICAgICAgKiBsZXZlbGRiL3V0aWwvZmls
dGVyX3BvbGljeS5jYzogUmVtb3ZlZC4KKyAgICAgICAgKiBsZXZlbGRiL3V0aWwvaGFzaC5jYzog
UmVtb3ZlZC4KKyAgICAgICAgKiBsZXZlbGRiL3V0aWwvaGFzaC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGxldmVsZGIvdXRpbC9oaXN0b2dyYW0uY2M6IFJlbW92ZWQuCisgICAgICAgICogbGV2ZWxk
Yi91dGlsL2hpc3RvZ3JhbS5oOiBSZW1vdmVkLgorICAgICAgICAqIGxldmVsZGIvdXRpbC9sb2dn
aW5nLmNjOiBSZW1vdmVkLgorICAgICAgICAqIGxldmVsZGIvdXRpbC9sb2dnaW5nLmg6IFJlbW92
ZWQuCisgICAgICAgICogbGV2ZWxkYi91dGlsL211dGV4bG9jay5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGxldmVsZGIvdXRpbC9vcHRpb25zLmNjOiBSZW1vdmVkLgorICAgICAgICAqIGxldmVsZGIv
dXRpbC9wb3NpeF9sb2dnZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBsZXZlbGRiL3V0aWwvcmFu
ZG9tLmg6IFJlbW92ZWQuCisgICAgICAgICogbGV2ZWxkYi91dGlsL3N0YXR1cy5jYzogUmVtb3Zl
ZC4KKyAgICAgICAgKiBsZXZlbGRiL3V0aWwvdGVzdGhhcm5lc3MuY2M6IFJlbW92ZWQuCisgICAg
ICAgICogbGV2ZWxkYi91dGlsL3Rlc3RoYXJuZXNzLmg6IFJlbW92ZWQuCisgICAgICAgICogbGV2
ZWxkYi91dGlsL3Rlc3R1dGlsLmNjOiBSZW1vdmVkLgorICAgICAgICAqIGxldmVsZGIvdXRpbC90
ZXN0dXRpbC5oOiBSZW1vdmVkLgorCiAyMDE0LTA4LTExICBBbmR5IEVzdGVzICA8YWVzdGVzQGFw
cGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBHZXQgcmlkIG9mIGlPUy54Y2NvbmZpZwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9BVVRIT1JTIGIvU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi9BVVRIT1JTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2E5NDA3
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvQVVUSE9SUworKysgL2Rl
di9udWxsCkBAIC0xLDggKzAsMCBAQAotIyBOYW1lcyBzaG91bGQgYmUgYWRkZWQgdG8gdGhpcyBm
aWxlIGxpa2Ugc286Ci0jIE5hbWUgb3IgT3JnYW5pemF0aW9uIDxlbWFpbCBhZGRyZXNzPgotCi1H
b29nbGUgSW5jLgotCi0jIEluaXRpYWwgdmVyc2lvbiBhdXRob3JzOgotSmVmZnJleSBEZWFuIDxq
ZWZmQGdvb2dsZS5jb20+Ci1TYW5qYXkgR2hlbWF3YXQgPHNhbmpheUBnb29nbGUuY29tPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9MSUNFTlNFIGIvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi9MSUNFTlNFCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTgw
MjA4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvTElDRU5TRQorKysg
L2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLUNvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxE
QiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLW1ldDoKLQotICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi1jb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi1pbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi1k
aXN0cmlidXRpb24uCi0gICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLWNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi10aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0iQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi1BIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi1TUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi1MSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLURBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi1PRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9NYWtlZmlsZSBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDQyYzQ5NTIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9NYWtlZmls
ZQorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMSBU
aGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBu
YW1lcyBvZiBjb250cmlidXRvcnMuCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotIyBVbmNvbW1lbnQgZXhhY3RseSBvbmUgb2YgdGhlIGxpbmVzIGxh
YmVsbGVkIChBKSwgKEIpLCBhbmQgKEMpIGJlbG93Ci0jIHRvIHN3aXRjaCBiZXR3ZWVuIGNvbXBp
bGF0aW9uIG1vZGVzLgotCi1PUFQgPz0gLU8yIC1ETkRFQlVHICAgICAgICMgKEEpIFByb2R1Y3Rp
b24gdXNlIChvcHRpbWl6ZWQgbW9kZSkKLSMgT1BUID89IC1nMiAgICAgICAgICAgICAgIyAoQikg
RGVidWcgbW9kZSwgdy8gZnVsbCBsaW5lLWxldmVsIGRlYnVnZ2luZyBzeW1ib2xzCi0jIE9QVCA/
PSAtTzIgLWcyIC1ETkRFQlVHICMgKEMpIFByb2ZpbGluZyBtb2RlOiBvcHQsIGJ1dCB3L2RlYnVn
Z2luZyBzeW1ib2xzCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotIyBkZXRlY3Qgd2hhdCBwbGF0Zm9ybSB3ZSdyZSBidWlsZGluZyBvbgotJChzaGVs
bCBDQz0kKENDKSBDWFg9JChDWFgpIFRBUkdFVF9PUz0kKFRBUkdFVF9PUykgXAotICAgIC4vYnVp
bGRfZGV0ZWN0X3BsYXRmb3JtIGJ1aWxkX2NvbmZpZy5tayAuLykKLSMgdGhpcyBmaWxlIGlzIGdl
bmVyYXRlZCBieSB0aGUgcHJldmlvdXMgbGluZSB0byBzZXQgYnVpbGQgZmxhZ3MgYW5kIHNvdXJj
ZXMKLWluY2x1ZGUgYnVpbGRfY29uZmlnLm1rCi0KLUNGTEFHUyArPSAtSS4gLUkuL2luY2x1ZGUg
JChQTEFURk9STV9DQ0ZMQUdTKSAkKE9QVCkKLUNYWEZMQUdTICs9IC1JLiAtSS4vaW5jbHVkZSAk
KFBMQVRGT1JNX0NYWEZMQUdTKSAkKE9QVCkKLQotTERGTEFHUyArPSAkKFBMQVRGT1JNX0xERkxB
R1MpCi1MSUJTICs9ICQoUExBVEZPUk1fTElCUykKLQotTElCT0JKRUNUUyA9ICQoU09VUkNFUzou
Y2M9Lm8pCi1NRU1FTlZPQkpFQ1RTID0gJChNRU1FTlZfU09VUkNFUzouY2M9Lm8pCi0KLVRFU1RV
VElMID0gLi91dGlsL3Rlc3R1dGlsLm8KLVRFU1RIQVJORVNTID0gLi91dGlsL3Rlc3RoYXJuZXNz
Lm8gJChURVNUVVRJTCkKLQotVEVTVFMgPSBcCi0JYXJlbmFfdGVzdCBcCi0JYmxvb21fdGVzdCBc
Ci0JY190ZXN0IFwKLQljYWNoZV90ZXN0IFwKLQljb2RpbmdfdGVzdCBcCi0JY29ycnVwdGlvbl90
ZXN0IFwKLQljcmMzMmNfdGVzdCBcCi0JZGJfdGVzdCBcCi0JZGJmb3JtYXRfdGVzdCBcCi0JZW52
X3Rlc3QgXAotCWZpbGVuYW1lX3Rlc3QgXAotCWZpbHRlcl9ibG9ja190ZXN0IFwKLQlsb2dfdGVz
dCBcCi0JbWVtZW52X3Rlc3QgXAotCXNraXBsaXN0X3Rlc3QgXAotCXRhYmxlX3Rlc3QgXAotCXZl
cnNpb25fZWRpdF90ZXN0IFwKLQl2ZXJzaW9uX3NldF90ZXN0IFwKLQl3cml0ZV9iYXRjaF90ZXN0
Ci0KLVBST0dSQU1TID0gZGJfYmVuY2ggbGV2ZWxkYnV0aWwgJChURVNUUykKLUJFTkNITUFSS1Mg
PSBkYl9iZW5jaF9zcWxpdGUzIGRiX2JlbmNoX3RyZWVfZGIKLQotTElCUkFSWSA9IGxpYmxldmVs
ZGIuYQotTUVNRU5WTElCUkFSWSA9IGxpYm1lbWVudi5hCi0KLWRlZmF1bHQ6IGFsbAotCi0jIFNo
b3VsZCB3ZSBidWlsZCBzaGFyZWQgbGlicmFyaWVzPwotaWZuZXEgKCQoUExBVEZPUk1fU0hBUkVE
X0VYVCksKQotCi1pZm5lcSAoJChQTEFURk9STV9TSEFSRURfVkVSU0lPTkVEKSx0cnVlKQotU0hB
UkVEMSA9IGxpYmxldmVsZGIuJChQTEFURk9STV9TSEFSRURfRVhUKQotU0hBUkVEMiA9ICQoU0hB
UkVEMSkKLVNIQVJFRDMgPSAkKFNIQVJFRDEpCi1TSEFSRUQgPSAkKFNIQVJFRDEpCi1lbHNlCi0j
IFVwZGF0ZSBkYi5oIGlmIHlvdSBjaGFuZ2UgdGhlc2UuCi1TSEFSRURfTUFKT1IgPSAxCi1TSEFS
RURfTUlOT1IgPSA5Ci1TSEFSRUQxID0gbGlibGV2ZWxkYi4kKFBMQVRGT1JNX1NIQVJFRF9FWFQp
Ci1TSEFSRUQyID0gJChTSEFSRUQxKS4kKFNIQVJFRF9NQUpPUikKLVNIQVJFRDMgPSAkKFNIQVJF
RDEpLiQoU0hBUkVEX01BSk9SKS4kKFNIQVJFRF9NSU5PUikKLVNIQVJFRCA9ICQoU0hBUkVEMSkg
JChTSEFSRUQyKSAkKFNIQVJFRDMpCi0kKFNIQVJFRDEpOiAkKFNIQVJFRDMpCi0JbG4gLWZzICQo
U0hBUkVEMykgJChTSEFSRUQxKQotJChTSEFSRUQyKTogJChTSEFSRUQzKQotCWxuIC1mcyAkKFNI
QVJFRDMpICQoU0hBUkVEMikKLWVuZGlmCi0KLSQoU0hBUkVEMyk6Ci0JJChDWFgpICQoTERGTEFH
UykgJChQTEFURk9STV9TSEFSRURfTERGTEFHUykkKFNIQVJFRDIpICQoQ1hYRkxBR1MpICQoUExB
VEZPUk1fU0hBUkVEX0NGTEFHUykgJChTT1VSQ0VTKSAtbyAkKFNIQVJFRDMpICQoTElCUykKLQot
ZW5kaWYgICMgUExBVEZPUk1fU0hBUkVEX0VYVAotCi1hbGw6ICQoU0hBUkVEKSAkKExJQlJBUlkp
Ci0KLWNoZWNrOiBhbGwgJChQUk9HUkFNUykgJChURVNUUykKLQlmb3IgdCBpbiAkKFRFU1RTKTsg
ZG8gZWNobyAiKioqKiogUnVubmluZyAkJHQiOyAuLyQkdCB8fCBleGl0IDE7IGRvbmUKLQotY2xl
YW46Ci0JLXJtIC1mICQoUFJPR1JBTVMpICQoQkVOQ0hNQVJLUykgJChMSUJSQVJZKSAkKFNIQVJF
RCkgJChNRU1FTlZMSUJSQVJZKSAqLyoubyAqLyovKi5vIGlvcy14ODYvKi8qLm8gaW9zLWFybS8q
LyoubyBidWlsZF9jb25maWcubWsKLQktcm0gLXJmIGlvcy14ODYvKiBpb3MtYXJtLyoKLQotJChM
SUJSQVJZKTogJChMSUJPQkpFQ1RTKQotCXJtIC1mICRACi0JJChBUikgLXJzICRAICQoTElCT0JK
RUNUUykKLQotZGJfYmVuY2g6IGRiL2RiX2JlbmNoLm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RVVElM
KQotCSQoQ1hYKSAkKExERkxBR1MpIGRiL2RiX2JlbmNoLm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RV
VElMKSAtbyAkQCAkKExJQlMpCi0KLWRiX2JlbmNoX3NxbGl0ZTM6IGRvYy9iZW5jaC9kYl9iZW5j
aF9zcWxpdGUzLm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RVVElMKQotCSQoQ1hYKSAkKExERkxBR1Mp
IGRvYy9iZW5jaC9kYl9iZW5jaF9zcWxpdGUzLm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RVVElMKSAt
byAkQCAtbHNxbGl0ZTMgJChMSUJTKQotCi1kYl9iZW5jaF90cmVlX2RiOiBkb2MvYmVuY2gvZGJf
YmVuY2hfdHJlZV9kYi5vICQoTElCT0JKRUNUUykgJChURVNUVVRJTCkKLQkkKENYWCkgJChMREZM
QUdTKSBkb2MvYmVuY2gvZGJfYmVuY2hfdHJlZV9kYi5vICQoTElCT0JKRUNUUykgJChURVNUVVRJ
TCkgLW8gJEAgLWxreW90b2NhYmluZXQgJChMSUJTKQotCi1sZXZlbGRidXRpbDogZGIvbGV2ZWxk
Yl9tYWluLm8gJChMSUJPQkpFQ1RTKQotCSQoQ1hYKSAkKExERkxBR1MpIGRiL2xldmVsZGJfbWFp
bi5vICQoTElCT0JKRUNUUykgLW8gJEAgJChMSUJTKQotCi1hcmVuYV90ZXN0OiB1dGlsL2FyZW5h
X3Rlc3QubyAkKExJQk9CSkVDVFMpICQoVEVTVEhBUk5FU1MpCi0JJChDWFgpICQoTERGTEFHUykg
dXRpbC9hcmVuYV90ZXN0Lm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RIQVJORVNTKSAtbyAkQCAkKExJ
QlMpCi0KLWJsb29tX3Rlc3Q6IHV0aWwvYmxvb21fdGVzdC5vICQoTElCT0JKRUNUUykgJChURVNU
SEFSTkVTUykKLQkkKENYWCkgJChMREZMQUdTKSB1dGlsL2Jsb29tX3Rlc3QubyAkKExJQk9CSkVD
VFMpICQoVEVTVEhBUk5FU1MpIC1vICRAICQoTElCUykKLQotY190ZXN0OiBkYi9jX3Rlc3QubyAk
KExJQk9CSkVDVFMpICQoVEVTVEhBUk5FU1MpCi0JJChDWFgpICQoTERGTEFHUykgZGIvY190ZXN0
Lm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RIQVJORVNTKSAtbyAkQCAkKExJQlMpCi0KLWNhY2hlX3Rl
c3Q6IHV0aWwvY2FjaGVfdGVzdC5vICQoTElCT0JKRUNUUykgJChURVNUSEFSTkVTUykKLQkkKENY
WCkgJChMREZMQUdTKSB1dGlsL2NhY2hlX3Rlc3QubyAkKExJQk9CSkVDVFMpICQoVEVTVEhBUk5F
U1MpIC1vICRAICQoTElCUykKLQotY29kaW5nX3Rlc3Q6IHV0aWwvY29kaW5nX3Rlc3QubyAkKExJ
Qk9CSkVDVFMpICQoVEVTVEhBUk5FU1MpCi0JJChDWFgpICQoTERGTEFHUykgdXRpbC9jb2Rpbmdf
dGVzdC5vICQoTElCT0JKRUNUUykgJChURVNUSEFSTkVTUykgLW8gJEAgJChMSUJTKQotCi1jb3Jy
dXB0aW9uX3Rlc3Q6IGRiL2NvcnJ1cHRpb25fdGVzdC5vICQoTElCT0JKRUNUUykgJChURVNUSEFS
TkVTUykKLQkkKENYWCkgJChMREZMQUdTKSBkYi9jb3JydXB0aW9uX3Rlc3QubyAkKExJQk9CSkVD
VFMpICQoVEVTVEhBUk5FU1MpIC1vICRAICQoTElCUykKLQotY3JjMzJjX3Rlc3Q6IHV0aWwvY3Jj
MzJjX3Rlc3QubyAkKExJQk9CSkVDVFMpICQoVEVTVEhBUk5FU1MpCi0JJChDWFgpICQoTERGTEFH
UykgdXRpbC9jcmMzMmNfdGVzdC5vICQoTElCT0JKRUNUUykgJChURVNUSEFSTkVTUykgLW8gJEAg
JChMSUJTKQotCi1kYl90ZXN0OiBkYi9kYl90ZXN0Lm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RIQVJO
RVNTKQotCSQoQ1hYKSAkKExERkxBR1MpIGRiL2RiX3Rlc3QubyAkKExJQk9CSkVDVFMpICQoVEVT
VEhBUk5FU1MpIC1vICRAICQoTElCUykKLQotZGJmb3JtYXRfdGVzdDogZGIvZGJmb3JtYXRfdGVz
dC5vICQoTElCT0JKRUNUUykgJChURVNUSEFSTkVTUykKLQkkKENYWCkgJChMREZMQUdTKSBkYi9k
YmZvcm1hdF90ZXN0Lm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RIQVJORVNTKSAtbyAkQCAkKExJQlMp
Ci0KLWVudl90ZXN0OiB1dGlsL2Vudl90ZXN0Lm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RIQVJORVNT
KQotCSQoQ1hYKSAkKExERkxBR1MpIHV0aWwvZW52X3Rlc3QubyAkKExJQk9CSkVDVFMpICQoVEVT
VEhBUk5FU1MpIC1vICRAICQoTElCUykKLQotZmlsZW5hbWVfdGVzdDogZGIvZmlsZW5hbWVfdGVz
dC5vICQoTElCT0JKRUNUUykgJChURVNUSEFSTkVTUykKLQkkKENYWCkgJChMREZMQUdTKSBkYi9m
aWxlbmFtZV90ZXN0Lm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RIQVJORVNTKSAtbyAkQCAkKExJQlMp
Ci0KLWZpbHRlcl9ibG9ja190ZXN0OiB0YWJsZS9maWx0ZXJfYmxvY2tfdGVzdC5vICQoTElCT0JK
RUNUUykgJChURVNUSEFSTkVTUykKLQkkKENYWCkgJChMREZMQUdTKSB0YWJsZS9maWx0ZXJfYmxv
Y2tfdGVzdC5vICQoTElCT0JKRUNUUykgJChURVNUSEFSTkVTUykgLW8gJEAgJChMSUJTKQotCi1s
b2dfdGVzdDogZGIvbG9nX3Rlc3QubyAkKExJQk9CSkVDVFMpICQoVEVTVEhBUk5FU1MpCi0JJChD
WFgpICQoTERGTEFHUykgZGIvbG9nX3Rlc3QubyAkKExJQk9CSkVDVFMpICQoVEVTVEhBUk5FU1Mp
IC1vICRAICQoTElCUykKLQotdGFibGVfdGVzdDogdGFibGUvdGFibGVfdGVzdC5vICQoTElCT0JK
RUNUUykgJChURVNUSEFSTkVTUykKLQkkKENYWCkgJChMREZMQUdTKSB0YWJsZS90YWJsZV90ZXN0
Lm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RIQVJORVNTKSAtbyAkQCAkKExJQlMpCi0KLXNraXBsaXN0
X3Rlc3Q6IGRiL3NraXBsaXN0X3Rlc3QubyAkKExJQk9CSkVDVFMpICQoVEVTVEhBUk5FU1MpCi0J
JChDWFgpICQoTERGTEFHUykgZGIvc2tpcGxpc3RfdGVzdC5vICQoTElCT0JKRUNUUykgJChURVNU
SEFSTkVTUykgLW8gJEAgJChMSUJTKQotCi12ZXJzaW9uX2VkaXRfdGVzdDogZGIvdmVyc2lvbl9l
ZGl0X3Rlc3QubyAkKExJQk9CSkVDVFMpICQoVEVTVEhBUk5FU1MpCi0JJChDWFgpICQoTERGTEFH
UykgZGIvdmVyc2lvbl9lZGl0X3Rlc3QubyAkKExJQk9CSkVDVFMpICQoVEVTVEhBUk5FU1MpIC1v
ICRAICQoTElCUykKLQotdmVyc2lvbl9zZXRfdGVzdDogZGIvdmVyc2lvbl9zZXRfdGVzdC5vICQo
TElCT0JKRUNUUykgJChURVNUSEFSTkVTUykKLQkkKENYWCkgJChMREZMQUdTKSBkYi92ZXJzaW9u
X3NldF90ZXN0Lm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RIQVJORVNTKSAtbyAkQCAkKExJQlMpCi0K
LXdyaXRlX2JhdGNoX3Rlc3Q6IGRiL3dyaXRlX2JhdGNoX3Rlc3QubyAkKExJQk9CSkVDVFMpICQo
VEVTVEhBUk5FU1MpCi0JJChDWFgpICQoTERGTEFHUykgZGIvd3JpdGVfYmF0Y2hfdGVzdC5vICQo
TElCT0JKRUNUUykgJChURVNUSEFSTkVTUykgLW8gJEAgJChMSUJTKQotCi0kKE1FTUVOVkxJQlJB
UlkpIDogJChNRU1FTlZPQkpFQ1RTKQotCXJtIC1mICRACi0JJChBUikgLXJzICRAICQoTUVNRU5W
T0JKRUNUUykKLQotbWVtZW52X3Rlc3QgOiBoZWxwZXJzL21lbWVudi9tZW1lbnZfdGVzdC5vICQo
TUVNRU5WTElCUkFSWSkgJChMSUJSQVJZKSAkKFRFU1RIQVJORVNTKQotCSQoQ1hYKSAkKExERkxB
R1MpIGhlbHBlcnMvbWVtZW52L21lbWVudl90ZXN0Lm8gJChNRU1FTlZMSUJSQVJZKSAkKExJQlJB
UlkpICQoVEVTVEhBUk5FU1MpIC1vICRAICQoTElCUykKLQotaWZlcSAoJChQTEFURk9STSksIElP
UykKLSMgRm9yIGlPUywgY3JlYXRlIHVuaXZlcnNhbCBvYmplY3QgZmlsZXMgdG8gYmUgdXNlZCBv
biBib3RoIHRoZSBzaW11bGF0b3IgYW5kCi0jIGEgZGV2aWNlLgotUExBVEZPUk1TUk9PVD0vQXBw
bGljYXRpb25zL1hjb2RlLmFwcC9Db250ZW50cy9EZXZlbG9wZXIvUGxhdGZvcm1zCi1TSU1VTEFU
T1JST09UPSQoUExBVEZPUk1TUk9PVCkvaVBob25lU2ltdWxhdG9yLnBsYXRmb3JtL0RldmVsb3Bl
cgotREVWSUNFUk9PVD0kKFBMQVRGT1JNU1JPT1QpL2lQaG9uZU9TLnBsYXRmb3JtL0RldmVsb3Bl
cgotSU9TVkVSU0lPTj0kKHNoZWxsIGRlZmF1bHRzIHJlYWQgJChQTEFURk9STVNST09UKS9pUGhv
bmVPUy5wbGF0Zm9ybS92ZXJzaW9uIENGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nKQotCi0uY2Mu
bzoKLQlta2RpciAtcCBpb3MteDg2LyQoZGlyICRAKQotCSQoQ1hYKSAkKENYWEZMQUdTKSAtaXN5
c3Jvb3QgJChTSU1VTEFUT1JST09UKS9TREtzL2lQaG9uZVNpbXVsYXRvciQoSU9TVkVSU0lPTiku
c2RrIC1hcmNoIGk2ODYgLWMgJDwgLW8gaW9zLXg4Ni8kQAotCW1rZGlyIC1wIGlvcy1hcm0vJChk
aXIgJEApCi0JJChERVZJQ0VST09UKS91c3IvYmluLyQoQ1hYKSAkKENYWEZMQUdTKSAtaXN5c3Jv
b3QgJChERVZJQ0VST09UKS9TREtzL2lQaG9uZU9TJChJT1NWRVJTSU9OKS5zZGsgLWFyY2ggYXJt
djYgLWFyY2ggYXJtdjcgLWMgJDwgLW8gaW9zLWFybS8kQAotCWxpcG8gaW9zLXg4Ni8kQCBpb3Mt
YXJtLyRAIC1jcmVhdGUgLW91dHB1dCAkQAotCi0uYy5vOgotCW1rZGlyIC1wIGlvcy14ODYvJChk
aXIgJEApCi0JJChDQykgJChDRkxBR1MpIC1pc3lzcm9vdCAkKFNJTVVMQVRPUlJPT1QpL1NES3Mv
aVBob25lU2ltdWxhdG9yJChJT1NWRVJTSU9OKS5zZGsgLWFyY2ggaTY4NiAtYyAkPCAtbyBpb3Mt
eDg2LyRACi0JbWtkaXIgLXAgaW9zLWFybS8kKGRpciAkQCkKLQkkKERFVklDRVJPT1QpL3Vzci9i
aW4vJChDQykgJChDRkxBR1MpIC1pc3lzcm9vdCAkKERFVklDRVJPT1QpL1NES3MvaVBob25lT1Mk
KElPU1ZFUlNJT04pLnNkayAtYXJjaCBhcm12NiAtYXJjaCBhcm12NyAtYyAkPCAtbyBpb3MtYXJt
LyRACi0JbGlwbyBpb3MteDg2LyRAIGlvcy1hcm0vJEAgLWNyZWF0ZSAtb3V0cHV0ICRACi0KLWVs
c2UKLS5jYy5vOgotCSQoQ1hYKSAkKENYWEZMQUdTKSAtYyAkPCAtbyAkQAotCi0uYy5vOgotCSQo
Q0MpICQoQ0ZMQUdTKSAtYyAkPCAtbyAkQAotZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvTkVXUyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvTkVXUwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZkOTkyNC4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL05FV1MKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1S
ZWxlYXNlIDEuMiAyMDExLTA1LTE2Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUZpeGVzIGZv
ciBsYXJnZXIgZGF0YWJhc2VzICh0ZXN0ZWQgdXAgdG8gb25lIGJpbGxpb24gMTAwLWJ5dGUgZW50
cmllcywKLWkuZS4sIH4xMDBHQikuCi0KLSgxKSBQbGFjZSBoYXJkIGxpbWl0IG9uIG51bWJlciBv
ZiBsZXZlbC0wIGZpbGVzLiAgVGhpcyBmaXhlcyBlcnJvcnMKLW9mIHRoZSBmb3JtICJ0b28gbWFu
eSBvcGVuIGZpbGVzIi4KLQotKDIpIEZpeGVkIG1lbXRhYmxlIG1hbmFnZW1lbnQuICBCZWZvcmUg
dGhlIGZpeCwgYSBoZWF2eSB3cml0ZSBidXJzdAotY291bGQgY2F1c2UgdW5ib3VuZGVkIG1lbW9y
eSB1c2FnZS4KLQotQSBmaXggZm9yIGEgbG9nZ2luZyBidWcgd2hlcmUgdGhlIHJlYWRlciB3b3Vs
ZCBpbmNvcnJlY3RseSBjb21wbGFpbgotYWJvdXQgY29ycnVwdGlvbi4KLQotQWxsb3cgcHVibGlj
IGFjY2VzcyB0byBXcml0ZUJhdGNoIGNvbnRlbnRzIHNvIHRoYXQgdXNlcnMgY2FuIGVhc2lseQot
d3JhcCBhIERCLgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9SRUFETUUg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMzYxOGFkZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRi
L1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLWxldmVsZGI6IEEga2V5LXZh
bHVlIHN0b3JlCi1BdXRob3JzOiBTYW5qYXkgR2hlbWF3YXQgKHNhbmpheUBnb29nbGUuY29tKSBh
bmQgSmVmZiBEZWFuIChqZWZmQGdvb2dsZS5jb20pCi0KLVRoZSBjb2RlIHVuZGVyIHRoaXMgZGly
ZWN0b3J5IGltcGxlbWVudHMgYSBzeXN0ZW0gZm9yIG1haW50YWluaW5nIGEKLXBlcnNpc3RlbnQg
a2V5L3ZhbHVlIHN0b3JlLgotCi1TZWUgZG9jL2luZGV4Lmh0bWwgZm9yIG1vcmUgZXhwbGFuYXRp
b24uCi1TZWUgZG9jL2ltcGwuaHRtbCBmb3IgYSBicmllZiBvdmVydmlldyBvZiB0aGUgaW1wbGVt
ZW50YXRpb24uCi0KLVRoZSBwdWJsaWMgaW50ZXJmYWNlIGlzIGluIGluY2x1ZGUvKi5oLiAgQ2Fs
bGVycyBzaG91bGQgbm90IGluY2x1ZGUgb3IKLXJlbHkgb24gdGhlIGRldGFpbHMgb2YgYW55IG90
aGVyIGhlYWRlciBmaWxlcyBpbiB0aGlzIHBhY2thZ2UuICBUaG9zZQotaW50ZXJuYWwgQVBJcyBt
YXkgYmUgY2hhbmdlZCB3aXRob3V0IHdhcm5pbmcuCi0KLUd1aWRlIHRvIGhlYWRlciBmaWxlczoK
LQotaW5jbHVkZS9kYi5oCi0gICAgTWFpbiBpbnRlcmZhY2UgdG8gdGhlIERCOiBTdGFydCBoZXJl
Ci0KLWluY2x1ZGUvb3B0aW9ucy5oCi0gICAgQ29udHJvbCBvdmVyIHRoZSBiZWhhdmlvciBvZiBh
biBlbnRpcmUgZGF0YWJhc2UsIGFuZCBhbHNvCi0gICAgY29udHJvbCBvdmVyIHRoZSBiZWhhdmlv
ciBvZiBpbmRpdmlkdWFsIHJlYWRzIGFuZCB3cml0ZXMuCi0KLWluY2x1ZGUvY29tcGFyYXRvci5o
Ci0gICAgQWJzdHJhY3Rpb24gZm9yIHVzZXItc3BlY2lmaWVkIGNvbXBhcmlzb24gZnVuY3Rpb24u
ICBJZiB5b3Ugd2FudAotICAgIGp1c3QgYnl0ZXdpc2UgY29tcGFyaXNvbiBvZiBrZXlzLCB5b3Ug
Y2FuIHVzZSB0aGUgZGVmYXVsdCBjb21wYXJhdG9yLAotICAgIGJ1dCBjbGllbnRzIGNhbiB3cml0
ZSB0aGVpciBvd24gY29tcGFyYXRvciBpbXBsZW1lbnRhdGlvbnMgaWYgdGhleQotICAgIHdhbnQg
Y3VzdG9tIG9yZGVyaW5nIChlLmcuIHRvIGhhbmRsZSBkaWZmZXJlbnQgY2hhcmFjdGVyCi0gICAg
ZW5jb2RpbmdzLCBldGMuKQotCi1pbmNsdWRlL2l0ZXJhdG9yLmgKLSAgICBJbnRlcmZhY2UgZm9y
IGl0ZXJhdGluZyBvdmVyIGRhdGEuIFlvdSBjYW4gZ2V0IGFuIGl0ZXJhdG9yCi0gICAgZnJvbSBh
IERCIG9iamVjdC4KLQotaW5jbHVkZS93cml0ZV9iYXRjaC5oCi0gICAgSW50ZXJmYWNlIGZvciBh
dG9taWNhbGx5IGFwcGx5aW5nIG11bHRpcGxlIHVwZGF0ZXMgdG8gYSBkYXRhYmFzZS4KLQotaW5j
bHVkZS9zbGljZS5oCi0gICAgQSBzaW1wbGUgbW9kdWxlIGZvciBtYWludGFpbmluZyBhIHBvaW50
ZXIgYW5kIGEgbGVuZ3RoIGludG8gc29tZQotICAgIG90aGVyIGJ5dGUgYXJyYXkuCi0KLWluY2x1
ZGUvc3RhdHVzLmgKLSAgICBTdGF0dXMgaXMgcmV0dXJuZWQgZnJvbSBtYW55IG9mIHRoZSBwdWJs
aWMgaW50ZXJmYWNlcyBhbmQgaXMgdXNlZAotICAgIHRvIHJlcG9ydCBzdWNjZXNzIGFuZCB2YXJp
b3VzIGtpbmRzIG9mIGVycm9ycy4KLQotaW5jbHVkZS9lbnYuaAotICAgIEFic3RyYWN0aW9uIG9m
IHRoZSBPUyBlbnZpcm9ubWVudC4gIEEgcG9zaXggaW1wbGVtZW50YXRpb24gb2YKLSAgICB0aGlz
IGludGVyZmFjZSBpcyBpbiB1dGlsL2Vudl9wb3NpeC5jYwotCi1pbmNsdWRlL3RhYmxlLmgKLWlu
Y2x1ZGUvdGFibGVfYnVpbGRlci5oCi0gICAgTG93ZXItbGV2ZWwgbW9kdWxlcyB0aGF0IG1vc3Qg
Y2xpZW50cyBwcm9iYWJseSB3b24ndCB1c2UgZGlyZWN0bHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvVE9ETyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvVE9ETwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTYwM2MwNy4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL1RPRE8KKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBA
Ci1zcwotLSBTdGF0cwotCi1kYgotLSBNYXliZSBpbXBsZW1lbnQgREI6OkJ1bGtEZWxldGVGb3JS
YW5nZShzdGFydF9rZXksIGVuZF9rZXkpCi0gIHRoYXQgd291bGQgYmxvdyBhd2F5IGZpbGVzIHdo
b3NlIHJhbmdlcyBhcmUgZW50aXJlbHkgY29udGFpbmVkCi0gIHdpdGhpbiBbc3RhcnRfa2V5Li5l
bmRfa2V5XT8gIEZvciBDaHJvbWUsIGRlbGV0aW9uIG9mIG9ic29sZXRlCi0gIG9iamVjdCBzdG9y
ZXMsIGV0Yy4gY2FuIGJlIGRvbmUgaW4gdGhlIGJhY2tncm91bmQgYW55d2F5LCBzbwotICBwcm9i
YWJseSBub3QgdGhhdCBpbXBvcnRhbnQuCi0tIFRoZXJlIGhhdmUgYmVlbiByZXF1ZXN0cyBmb3Ig
TXVsdGlHZXQuCi0KLUFmdGVyIGEgcmFuZ2UgaXMgY29tcGxldGVseSBkZWxldGVkLCB3aGF0IGdl
dHMgcmlkIG9mIHRoZQotY29ycmVzcG9uZGluZyBmaWxlcyBpZiB3ZSBkbyBubyBmdXR1cmUgY2hh
bmdlcyB0byB0aGF0IHJhbmdlLiAgTWFrZQotdGhlIGNvbmRpdGlvbnMgZm9yIHRyaWdnZXJpbmcg
Y29tcGFjdGlvbnMgZmlyZSBpbiBtb3JlIHNpdHVhdGlvbnM/CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL2J1aWxkX2RldGVjdF9wbGF0Zm9ybSBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xldmVsZGIvYnVpbGRfZGV0ZWN0X3BsYXRmb3JtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1
NQppbmRleCA1ODAxZDIwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
YnVpbGRfZGV0ZWN0X3BsYXRmb3JtCisrKyAvZGV2L251bGwKQEAgLTEsMjAzICswLDAgQEAKLSMh
L2Jpbi9zaAotIwotIyBEZXRlY3RzIE9TIHdlJ3JlIGNvbXBpbGluZyBvbiBhbmQgb3V0cHV0cyBh
IGZpbGUgc3BlY2lmaWVkIGJ5IHRoZSBmaXJzdAotIyBhcmd1bWVudCwgd2hpY2ggaW4gdHVybiBn
ZXRzIHJlYWQgd2hpbGUgcHJvY2Vzc2luZyBNYWtlZmlsZS4KLSMKLSMgVGhlIG91dHB1dCB3aWxs
IHNldCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKLSMgICBDQyAgICAgICAgICAgICAgICAgICAg
ICAgICAgQyBDb21waWxlciBwYXRoCi0jICAgQ1hYICAgICAgICAgICAgICAgICAgICAgICAgIEMr
KyBDb21waWxlciBwYXRoCi0jICAgUExBVEZPUk1fTERGTEFHUyAgICAgICAgICAgIExpbmtlciBm
bGFncwotIyAgIFBMQVRGT1JNX0xJQlMgICAgICAgICAgICAgICBMaWJyYXJpZXMgZmxhZ3MKLSMg
ICBQTEFURk9STV9TSEFSRURfRVhUICAgICAgICAgRXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFy
aWVzCi0jICAgUExBVEZPUk1fU0hBUkVEX0xERkxBR1MgICAgIEZsYWdzIGZvciBidWlsZGluZyBz
aGFyZWQgbGlicmFyeQotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZsYWcg
aXMgZW1iZWRkZWQganVzdCBiZWZvcmUgdGhlIG5hbWUKLSMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5IHdpdGhvdXQgaW50ZXJ2ZW5pbmcgc3BhY2Vz
Ci0jICAgUExBVEZPUk1fU0hBUkVEX0NGTEFHUyAgICAgIEZsYWdzIGZvciBjb21waWxpbmcgb2Jq
ZWN0cyBmb3Igc2hhcmVkIGxpYnJhcnkKLSMgICBQTEFURk9STV9DQ0ZMQUdTICAgICAgICAgICAg
QyBjb21waWxlciBmbGFncwotIyAgIFBMQVRGT1JNX0NYWEZMQUdTICAgICAgICAgICBDKysgY29t
cGlsZXIgZmxhZ3MuICBXaWxsIGNvbnRhaW46Ci0jICAgUExBVEZPUk1fU0hBUkVEX1ZFUlNJT05F
RCAgIFNldCB0byAndHJ1ZScgaWYgcGxhdGZvcm0gc3VwcG9ydHMgdmVyc2lvbmVkCi0jICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZCBsaWJyYXJpZXMsIGVtcHR5IG90aGVyd2lz
ZS4KLSMKLSMgVGhlIFBMQVRGT1JNX0NDRkxBR1MgYW5kIFBMQVRGT1JNX0NYWEZMQUdTIG1pZ2h0
IGluY2x1ZGUgdGhlIGZvbGxvd2luZzoKLSMKLSMgICAgICAgLURMRVZFTERCX0NTVERBVE9NSUNf
UFJFU0VOVCBpZiA8Y3N0ZGF0b21pYz4gaXMgcHJlc2VudAotIyAgICAgICAtRExFVkVMREJfUExB
VEZPUk1fUE9TSVggICAgIGZvciBQb3NpeC1iYXNlZCBwbGF0Zm9ybXMKLSMgICAgICAgLURTTkFQ
UFkgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgU25hcHB5IGxpYnJhcnkgaXMgcHJlc2VudAot
IwotCi1PVVRQVVQ9JDEKLVBSRUZJWD0kMgotaWYgdGVzdCAteiAiJE9VVFBVVCIgfHwgdGVzdCAt
eiAiJFBSRUZJWCI7IHRoZW4KLSAgZWNobyAidXNhZ2U6ICQwIDxvdXRwdXQtZmlsZW5hbWU+IDxk
aXJlY3RvcnlfcHJlZml4PiIgPiYyCi0gIGV4aXQgMQotZmkKLQotIyBEZWxldGUgZXhpc3Rpbmcg
b3V0cHV0LCBpZiBpdCBleGlzdHMKLXJtIC1mICRPVVRQVVQKLXRvdWNoICRPVVRQVVQKLQotaWYg
dGVzdCAteiAiJENDIjsgdGhlbgotICAgIENDPWNjCi1maQotCi1pZiB0ZXN0IC16ICIkQ1hYIjsg
dGhlbgotICAgIENYWD1nKysKLWZpCi0KLSMgRGV0ZWN0IE9TCi1pZiB0ZXN0IC16ICIkVEFSR0VU
X09TIjsgdGhlbgotICAgIFRBUkdFVF9PUz1gdW5hbWUgLXNgCi1maQotCi1DT01NT05fRkxBR1M9
Ci1DUk9TU19DT01QSUxFPQotUExBVEZPUk1fQ0NGTEFHUz0KLVBMQVRGT1JNX0NYWEZMQUdTPQot
UExBVEZPUk1fTERGTEFHUz0KLVBMQVRGT1JNX0xJQlM9Ci1QTEFURk9STV9TSEFSRURfRVhUPSJz
byIKLVBMQVRGT1JNX1NIQVJFRF9MREZMQUdTPSItc2hhcmVkIC1XbCwtc29uYW1lIC1XbCwiCi1Q
TEFURk9STV9TSEFSRURfQ0ZMQUdTPSItZlBJQyIKLVBMQVRGT1JNX1NIQVJFRF9WRVJTSU9ORUQ9
dHJ1ZQotCi1NRU1DTVBfRkxBRz0KLWlmIFsgIiRDWFgiID0gImcrKyIgXTsgdGhlbgotICAgICMg
VXNlIGxpYmMncyBtZW1jbXAgaW5zdGVhZCBvZiBHQ0MncyBtZW1jbXAuICBUaGlzIHJlc3VsdHMg
aW4gfjQwJQotICAgICMgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgb24gcmVhZHJhbmRvbSB1bmRl
ciBnY2MgNC40LjMgb24gTGludXgveDg2LgotICAgIE1FTUNNUF9GTEFHPSItZm5vLWJ1aWx0aW4t
bWVtY21wIgotZmkKLQotY2FzZSAiJFRBUkdFVF9PUyIgaW4KLSAgICBEYXJ3aW4pCi0gICAgICAg
IFBMQVRGT1JNPU9TX01BQ09TWAotICAgICAgICBDT01NT05fRkxBR1M9IiRNRU1DTVBfRkxBRyAt
RE9TX01BQ09TWCIKLSAgICAgICAgUExBVEZPUk1fU0hBUkVEX0VYVD1keWxpYgotICAgICAgICBb
IC16ICIkSU5TVEFMTF9QQVRIIiBdICYmIElOU1RBTExfUEFUSD1gcHdkYAotICAgICAgICBQTEFU
Rk9STV9TSEFSRURfTERGTEFHUz0iLWR5bmFtaWNsaWIgLWluc3RhbGxfbmFtZSAkSU5TVEFMTF9Q
QVRILyIKLSAgICAgICAgUE9SVF9GSUxFPXBvcnQvcG9ydF9wb3NpeC5jYwotICAgICAgICA7Owot
ICAgIExpbnV4KQotICAgICAgICBQTEFURk9STT1PU19MSU5VWAotICAgICAgICBDT01NT05fRkxB
R1M9IiRNRU1DTVBfRkxBRyAtcHRocmVhZCAtRE9TX0xJTlVYIgotICAgICAgICBQTEFURk9STV9M
REZMQUdTPSItcHRocmVhZCIKLSAgICAgICAgUE9SVF9GSUxFPXBvcnQvcG9ydF9wb3NpeC5jYwot
ICAgICAgICA7OwotICAgIFN1bk9TKQotICAgICAgICBQTEFURk9STT1PU19TT0xBUklTCi0gICAg
ICAgIENPTU1PTl9GTEFHUz0iJE1FTUNNUF9GTEFHIC1EX1JFRU5UUkFOVCAtRE9TX1NPTEFSSVMi
Ci0gICAgICAgIFBMQVRGT1JNX0xJQlM9Ii1scHRocmVhZCAtbHJ0IgotICAgICAgICBQT1JUX0ZJ
TEU9cG9ydC9wb3J0X3Bvc2l4LmNjCi0gICAgICAgIDs7Ci0gICAgRnJlZUJTRCkKLSAgICAgICAg
UExBVEZPUk09T1NfRlJFRUJTRAotICAgICAgICBDT01NT05fRkxBR1M9IiRNRU1DTVBfRkxBRyAt
RF9SRUVOVFJBTlQgLURPU19GUkVFQlNEIgotICAgICAgICBQTEFURk9STV9MSUJTPSItbHB0aHJl
YWQiCi0gICAgICAgIFBPUlRfRklMRT1wb3J0L3BvcnRfcG9zaXguY2MKLSAgICAgICAgOzsKLSAg
ICBOZXRCU0QpCi0gICAgICAgIFBMQVRGT1JNPU9TX05FVEJTRAotICAgICAgICBDT01NT05fRkxB
R1M9IiRNRU1DTVBfRkxBRyAtRF9SRUVOVFJBTlQgLURPU19ORVRCU0QiCi0gICAgICAgIFBMQVRG
T1JNX0xJQlM9Ii1scHRocmVhZCAtbGdjY19zIgotICAgICAgICBQT1JUX0ZJTEU9cG9ydC9wb3J0
X3Bvc2l4LmNjCi0gICAgICAgIDs7Ci0gICAgT3BlbkJTRCkKLSAgICAgICAgUExBVEZPUk09T1Nf
T1BFTkJTRAotICAgICAgICBDT01NT05fRkxBR1M9IiRNRU1DTVBfRkxBRyAtRF9SRUVOVFJBTlQg
LURPU19PUEVOQlNEIgotICAgICAgICBQTEFURk9STV9MREZMQUdTPSItcHRocmVhZCIKLSAgICAg
ICAgUE9SVF9GSUxFPXBvcnQvcG9ydF9wb3NpeC5jYwotICAgICAgICA7OwotICAgIERyYWdvbkZs
eSkKLSAgICAgICAgUExBVEZPUk09T1NfRFJBR09ORkxZQlNECi0gICAgICAgIENPTU1PTl9GTEFH
Uz0iJE1FTUNNUF9GTEFHIC1EX1JFRU5UUkFOVCAtRE9TX0RSQUdPTkZMWUJTRCIKLSAgICAgICAg
UExBVEZPUk1fTElCUz0iLWxwdGhyZWFkIgotICAgICAgICBQT1JUX0ZJTEU9cG9ydC9wb3J0X3Bv
c2l4LmNjCi0gICAgICAgIDs7Ci0gICAgT1NfQU5EUk9JRF9DUk9TU0NPTVBJTEUpCi0gICAgICAg
IFBMQVRGT1JNPU9TX0FORFJPSUQKLSAgICAgICAgQ09NTU9OX0ZMQUdTPSIkTUVNQ01QX0ZMQUcg
LURfUkVFTlRSQU5UIC1ET1NfQU5EUk9JRCAtRExFVkVMREJfUExBVEZPUk1fUE9TSVgiCi0gICAg
ICAgIFBMQVRGT1JNX0xERkxBR1M9IiIgICMgQWxsIHB0aHJlYWQgZmVhdHVyZXMgYXJlIGluIHRo
ZSBBbmRyb2lkIEMgbGlicmFyeQotICAgICAgICBQT1JUX0ZJTEU9cG9ydC9wb3J0X3Bvc2l4LmNj
Ci0gICAgICAgIENST1NTX0NPTVBJTEU9dHJ1ZQotICAgICAgICA7OwotICAgIEhQLVVYKQotICAg
ICAgICBQTEFURk9STT1PU19IUFVYCi0gICAgICAgIENPTU1PTl9GTEFHUz0iJE1FTUNNUF9GTEFH
IC1EX1JFRU5UUkFOVCAtRE9TX0hQVVgiCi0gICAgICAgIFBMQVRGT1JNX0xERkxBR1M9Ii1wdGhy
ZWFkIgotICAgICAgICBQT1JUX0ZJTEU9cG9ydC9wb3J0X3Bvc2l4LmNjCi0gICAgICAgICMgbWFu
IGxkOiAraCBpbnRlcm5hbF9uYW1lCi0gICAgICAgIFBMQVRGT1JNX1NIQVJFRF9MREZMQUdTPSIt
c2hhcmVkIC1XbCwraCAtV2wsIgotICAgICAgICA7OwotICAgICopCi0gICAgICAgIGVjaG8gIlVu
a25vd24gcGxhdGZvcm0hIiA+JjIKLSAgICAgICAgZXhpdCAxCi1lc2FjCi0KLSMgV2Ugd2FudCB0
byBtYWtlIGEgbGlzdCBvZiBhbGwgY2MgZmlsZXMgd2l0aGluIHV0aWwsIGRiLCB0YWJsZSwgYW5k
IGhlbHBlcnMKLSMgZXhjZXB0IGZvciB0aGUgdGVzdCBhbmQgYmVuY2htYXJrIGZpbGVzLiBCeSBk
ZWZhdWx0LCBmaW5kIHdpbGwgb3V0cHV0IGEgbGlzdAotIyBvZiBhbGwgZmlsZXMgbWF0Y2hpbmcg
ZWl0aGVyIHJ1bGUsIHNvIHdlIG5lZWQgdG8gYXBwZW5kIC1wcmludCB0byBtYWtlIHRoZQotIyBw
cnVuZSB0YWtlIGVmZmVjdC4KLURJUlM9IiRQUkVGSVgvZGIgJFBSRUZJWC91dGlsICRQUkVGSVgv
dGFibGUiCi0KLXNldCAtZiAjIHRlbXBvcmFyaWx5IGRpc2FibGUgZ2xvYmJpbmcgc28gdGhhdCBv
dXIgcGF0dGVybnMgYXJlbid0IGV4cGFuZGVkCi1QUlVORV9URVNUPSItbmFtZSAqdGVzdCouY2Mg
LXBydW5lIgotUFJVTkVfQkVOQ0g9Ii1uYW1lICpfYmVuY2guY2MgLXBydW5lIgotUFJVTkVfVE9P
TD0iLW5hbWUgbGV2ZWxkYl9tYWluLmNjIC1wcnVuZSIKLVBPUlRBQkxFX0ZJTEVTPWBmaW5kICRE
SVJTICRQUlVORV9URVNUIC1vICRQUlVORV9CRU5DSCAtbyAkUFJVTkVfVE9PTCAtbyAtbmFtZSAn
Ki5jYycgLXByaW50IHwgc29ydCB8IHNlZCAicyxeJFBSRUZJWC8sLCIgfCB0ciAiXG4iICIgImAK
LQotc2V0ICtmICMgcmUtZW5hYmxlIGdsb2JiaW5nCi0KLSMgVGhlIHNvdXJjZXMgY29uc2lzdCBv
ZiB0aGUgcG9ydGFibGUgZmlsZXMsIHBsdXMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIHBvcnQKLSMg
ZmlsZS4KLWVjaG8gIlNPVVJDRVM9JFBPUlRBQkxFX0ZJTEVTICRQT1JUX0ZJTEUiID4+ICRPVVRQ
VVQKLWVjaG8gIk1FTUVOVl9TT1VSQ0VTPWhlbHBlcnMvbWVtZW52L21lbWVudi5jYyIgPj4gJE9V
VFBVVAotCi1pZiBbICIkQ1JPU1NfQ09NUElMRSIgPSAidHJ1ZSIgXTsgdGhlbgotICAgICMgQ3Jv
c3MtY29tcGlsaW5nOyBkbyBub3QgdHJ5IGFueSBjb21waWxhdGlvbiB0ZXN0cy4KLSAgICB0cnVl
Ci1lbHNlCi0gICAgIyBJZiAtc3RkPWMrKzB4IHdvcmtzLCB1c2UgPGNzdGRhdG9taWM+LiAgT3Ro
ZXJ3aXNlIHVzZSBwb3J0X3Bvc2l4LmguCi0gICAgJENYWCAkQ1hYRkxBR1MgLXN0ZD1jKysweCAt
eCBjKysgLSAtbyAvZGV2L251bGwgMj4vZGV2L251bGwgIDw8RU9GCi0gICAgICAjaW5jbHVkZSA8
Y3N0ZGF0b21pYz4KLSAgICAgIGludCBtYWluKCkge30KLUVPRgotICAgIGlmIFsgIiQ/IiA9IDAg
XTsgdGhlbgotICAgICAgICBDT01NT05fRkxBR1M9IiRDT01NT05fRkxBR1MgLURMRVZFTERCX1BM
QVRGT1JNX1BPU0lYIC1ETEVWRUxEQl9DU1REQVRPTUlDX1BSRVNFTlQiCi0gICAgICAgIFBMQVRG
T1JNX0NYWEZMQUdTPSItc3RkPWMrKzB4IgotICAgIGVsc2UKLSAgICAgICAgQ09NTU9OX0ZMQUdT
PSIkQ09NTU9OX0ZMQUdTIC1ETEVWRUxEQl9QTEFURk9STV9QT1NJWCIKLSAgICBmaQotCi0gICAg
IyBUZXN0IHdoZXRoZXIgU25hcHB5IGxpYnJhcnkgaXMgaW5zdGFsbGVkCi0gICAgIyBodHRwOi8v
Y29kZS5nb29nbGUuY29tL3Avc25hcHB5LwotICAgICRDWFggJENYWEZMQUdTIC14IGMrKyAtIC1v
IC9kZXYvbnVsbCAyPi9kZXYvbnVsbCAgPDxFT0YKLSAgICAgICNpbmNsdWRlIDxzbmFwcHkuaD4K
LSAgICAgIGludCBtYWluKCkge30KLUVPRgotICAgIGlmIFsgIiQ/IiA9IDAgXTsgdGhlbgotICAg
ICAgICBDT01NT05fRkxBR1M9IiRDT01NT05fRkxBR1MgLURTTkFQUFkiCi0gICAgICAgIFBMQVRG
T1JNX0xJQlM9IiRQTEFURk9STV9MSUJTIC1sc25hcHB5IgotICAgIGZpCi0KLSAgICAjIFRlc3Qg
d2hldGhlciB0Y21hbGxvYyBpcyBhdmFpbGFibGUKLSAgICAkQ1hYICRDWFhGTEFHUyAteCBjKysg
LSAtbyAvZGV2L251bGwgLWx0Y21hbGxvYyAyPi9kZXYvbnVsbCAgPDxFT0YKLSAgICAgIGludCBt
YWluKCkge30KLUVPRgotICAgIGlmIFsgIiQ/IiA9IDAgXTsgdGhlbgotICAgICAgICBQTEFURk9S
TV9MSUJTPSIkUExBVEZPUk1fTElCUyAtbHRjbWFsbG9jIgotICAgIGZpCi1maQotCi1QTEFURk9S
TV9DQ0ZMQUdTPSIkUExBVEZPUk1fQ0NGTEFHUyAkQ09NTU9OX0ZMQUdTIgotUExBVEZPUk1fQ1hY
RkxBR1M9IiRQTEFURk9STV9DWFhGTEFHUyAkQ09NTU9OX0ZMQUdTIgotCi1lY2hvICJDQz0kQ0Mi
ID4+ICRPVVRQVVQKLWVjaG8gIkNYWD0kQ1hYIiA+PiAkT1VUUFVUCi1lY2hvICJQTEFURk9STT0k
UExBVEZPUk0iID4+ICRPVVRQVVQKLWVjaG8gIlBMQVRGT1JNX0xERkxBR1M9JFBMQVRGT1JNX0xE
RkxBR1MiID4+ICRPVVRQVVQKLWVjaG8gIlBMQVRGT1JNX0xJQlM9JFBMQVRGT1JNX0xJQlMiID4+
ICRPVVRQVVQKLWVjaG8gIlBMQVRGT1JNX0NDRkxBR1M9JFBMQVRGT1JNX0NDRkxBR1MiID4+ICRP
VVRQVVQKLWVjaG8gIlBMQVRGT1JNX0NYWEZMQUdTPSRQTEFURk9STV9DWFhGTEFHUyIgPj4gJE9V
VFBVVAotZWNobyAiUExBVEZPUk1fU0hBUkVEX0NGTEFHUz0kUExBVEZPUk1fU0hBUkVEX0NGTEFH
UyIgPj4gJE9VVFBVVAotZWNobyAiUExBVEZPUk1fU0hBUkVEX0VYVD0kUExBVEZPUk1fU0hBUkVE
X0VYVCIgPj4gJE9VVFBVVAotZWNobyAiUExBVEZPUk1fU0hBUkVEX0xERkxBR1M9JFBMQVRGT1JN
X1NIQVJFRF9MREZMQUdTIiA+PiAkT1VUUFVUCi1lY2hvICJQTEFURk9STV9TSEFSRURfVkVSU0lP
TkVEPSRQTEFURk9STV9TSEFSRURfVkVSU0lPTkVEIiA+PiAkT1VUUFVUCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2J1aWxkZXIuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL2RiL2J1aWxkZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0
MTk4ODIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9idWlsZGVy
LmNjCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEx
IFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBm
b3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgotCi0jaW5jbHVkZSAiZGIvYnVpbGRlci5oIgotCi0j
aW5jbHVkZSAiZGIvZmlsZW5hbWUuaCIKLSNpbmNsdWRlICJkYi9kYmZvcm1hdC5oIgotI2luY2x1
ZGUgImRiL3RhYmxlX2NhY2hlLmgiCi0jaW5jbHVkZSAiZGIvdmVyc2lvbl9lZGl0LmgiCi0jaW5j
bHVkZSAibGV2ZWxkYi9kYi5oIgotI2luY2x1ZGUgImxldmVsZGIvZW52LmgiCi0jaW5jbHVkZSAi
bGV2ZWxkYi9pdGVyYXRvci5oIgotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7Ci0KLVN0YXR1cyBCdWls
ZFRhYmxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBkYm5hbWUsCi0gICAgICAgICAgICAgICAgICBFbnYq
IGVudiwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMsCi0gICAgICAg
ICAgICAgICAgICBUYWJsZUNhY2hlKiB0YWJsZV9jYWNoZSwKLSAgICAgICAgICAgICAgICAgIEl0
ZXJhdG9yKiBpdGVyLAotICAgICAgICAgICAgICAgICAgRmlsZU1ldGFEYXRhKiBtZXRhKSB7Ci0g
IFN0YXR1cyBzOwotICBtZXRhLT5maWxlX3NpemUgPSAwOwotICBpdGVyLT5TZWVrVG9GaXJzdCgp
OwotCi0gIHN0ZDo6c3RyaW5nIGZuYW1lID0gVGFibGVGaWxlTmFtZShkYm5hbWUsIG1ldGEtPm51
bWJlcik7Ci0gIGlmIChpdGVyLT5WYWxpZCgpKSB7Ci0gICAgV3JpdGFibGVGaWxlKiBmaWxlOwot
ICAgIHMgPSBlbnYtPk5ld1dyaXRhYmxlRmlsZShmbmFtZSwgJmZpbGUpOwotICAgIGlmICghcy5v
aygpKSB7Ci0gICAgICByZXR1cm4gczsKLSAgICB9Ci0KLSAgICBUYWJsZUJ1aWxkZXIqIGJ1aWxk
ZXIgPSBuZXcgVGFibGVCdWlsZGVyKG9wdGlvbnMsIGZpbGUpOwotICAgIG1ldGEtPnNtYWxsZXN0
LkRlY29kZUZyb20oaXRlci0+a2V5KCkpOwotICAgIGZvciAoOyBpdGVyLT5WYWxpZCgpOyBpdGVy
LT5OZXh0KCkpIHsKLSAgICAgIFNsaWNlIGtleSA9IGl0ZXItPmtleSgpOwotICAgICAgbWV0YS0+
bGFyZ2VzdC5EZWNvZGVGcm9tKGtleSk7Ci0gICAgICBidWlsZGVyLT5BZGQoa2V5LCBpdGVyLT52
YWx1ZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBGaW5pc2ggYW5kIGNoZWNrIGZvciBidWlsZGVyIGVy
cm9ycwotICAgIGlmIChzLm9rKCkpIHsKLSAgICAgIHMgPSBidWlsZGVyLT5GaW5pc2goKTsKLSAg
ICAgIGlmIChzLm9rKCkpIHsKLSAgICAgICAgbWV0YS0+ZmlsZV9zaXplID0gYnVpbGRlci0+Rmls
ZVNpemUoKTsKLSAgICAgICAgYXNzZXJ0KG1ldGEtPmZpbGVfc2l6ZSA+IDApOwotICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICBidWlsZGVyLT5BYmFuZG9uKCk7Ci0gICAgfQotICAgIGRlbGV0
ZSBidWlsZGVyOwotCi0gICAgLy8gRmluaXNoIGFuZCBjaGVjayBmb3IgZmlsZSBlcnJvcnMKLSAg
ICBpZiAocy5vaygpKSB7Ci0gICAgICBzID0gZmlsZS0+U3luYygpOwotICAgIH0KLSAgICBpZiAo
cy5vaygpKSB7Ci0gICAgICBzID0gZmlsZS0+Q2xvc2UoKTsKLSAgICB9Ci0gICAgZGVsZXRlIGZp
bGU7Ci0gICAgZmlsZSA9IE5VTEw7Ci0KLSAgICBpZiAocy5vaygpKSB7Ci0gICAgICAvLyBWZXJp
ZnkgdGhhdCB0aGUgdGFibGUgaXMgdXNhYmxlCi0gICAgICBJdGVyYXRvciogaXQgPSB0YWJsZV9j
YWNoZS0+TmV3SXRlcmF0b3IoUmVhZE9wdGlvbnMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtZXRhLT5udW1iZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YS0+ZmlsZV9zaXplKTsKLSAgICAgIHMgPSBp
dC0+c3RhdHVzKCk7Ci0gICAgICBkZWxldGUgaXQ7Ci0gICAgfQotICB9Ci0KLSAgLy8gQ2hlY2sg
Zm9yIGlucHV0IGl0ZXJhdG9yIGVycm9ycwotICBpZiAoIWl0ZXItPnN0YXR1cygpLm9rKCkpIHsK
LSAgICBzID0gaXRlci0+c3RhdHVzKCk7Ci0gIH0KLQotICBpZiAocy5vaygpICYmIG1ldGEtPmZp
bGVfc2l6ZSA+IDApIHsKLSAgICAvLyBLZWVwIGl0Ci0gIH0gZWxzZSB7Ci0gICAgZW52LT5EZWxl
dGVGaWxlKGZuYW1lKTsKLSAgfQotICByZXR1cm4gczsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGxl
dmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvYnVpbGRlci5o
IGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9idWlsZGVyLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDYyNDMxZmMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGV2ZWxkYi9kYi9idWlsZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vLyBD
b3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0
aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCi0KLSNpZm5kZWYgU1RP
UkFHRV9MRVZFTERCX0RCX0JVSUxERVJfSF8KLSNkZWZpbmUgU1RPUkFHRV9MRVZFTERCX0RCX0JV
SUxERVJfSF8KLQotI2luY2x1ZGUgImxldmVsZGIvc3RhdHVzLmgiCi0KLW5hbWVzcGFjZSBsZXZl
bGRiIHsKLQotc3RydWN0IE9wdGlvbnM7Ci1zdHJ1Y3QgRmlsZU1ldGFEYXRhOwotCi1jbGFzcyBF
bnY7Ci1jbGFzcyBJdGVyYXRvcjsKLWNsYXNzIFRhYmxlQ2FjaGU7Ci1jbGFzcyBWZXJzaW9uRWRp
dDsKLQotLy8gQnVpbGQgYSBUYWJsZSBmaWxlIGZyb20gdGhlIGNvbnRlbnRzIG9mICppdGVyLiAg
VGhlIGdlbmVyYXRlZCBmaWxlCi0vLyB3aWxsIGJlIG5hbWVkIGFjY29yZGluZyB0byBtZXRhLT5u
dW1iZXIuICBPbiBzdWNjZXNzLCB0aGUgcmVzdCBvZgotLy8gKm1ldGEgd2lsbCBiZSBmaWxsZWQg
d2l0aCBtZXRhZGF0YSBhYm91dCB0aGUgZ2VuZXJhdGVkIHRhYmxlLgotLy8gSWYgbm8gZGF0YSBp
cyBwcmVzZW50IGluICppdGVyLCBtZXRhLT5maWxlX3NpemUgd2lsbCBiZSBzZXQgdG8KLS8vIHpl
cm8sIGFuZCBubyBUYWJsZSBmaWxlIHdpbGwgYmUgcHJvZHVjZWQuCi1leHRlcm4gU3RhdHVzIEJ1
aWxkVGFibGUoY29uc3Qgc3RkOjpzdHJpbmcmIGRibmFtZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBFbnYqIGVudiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPcHRpb25zJiBv
cHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlQ2FjaGUqIHRhYmxlX2NhY2hl
LAotICAgICAgICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yKiBpdGVyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIEZpbGVNZXRhRGF0YSogbWV0YSk7Ci0KLX0gIC8vIG5hbWVzcGFjZSBsZXZl
bGRiCi0KLSNlbmRpZiAgLy8gU1RPUkFHRV9MRVZFTERCX0RCX0JVSUxERVJfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvYy5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvZGIvYy5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhmZjBhZC4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2MuY2MKKysrIC9kZXYv
bnVsbApAQCAtMSw1OTUgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERC
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2Yg
Y29udHJpYnV0b3JzLgotCi0jaW5jbHVkZSAibGV2ZWxkYi9jLmgiCi0KLSNpbmNsdWRlIDxzdGRs
aWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlICJsZXZlbGRiL2NhY2hlLmgiCi0j
aW5jbHVkZSAibGV2ZWxkYi9jb21wYXJhdG9yLmgiCi0jaW5jbHVkZSAibGV2ZWxkYi9kYi5oIgot
I2luY2x1ZGUgImxldmVsZGIvZW52LmgiCi0jaW5jbHVkZSAibGV2ZWxkYi9maWx0ZXJfcG9saWN5
LmgiCi0jaW5jbHVkZSAibGV2ZWxkYi9pdGVyYXRvci5oIgotI2luY2x1ZGUgImxldmVsZGIvb3B0
aW9ucy5oIgotI2luY2x1ZGUgImxldmVsZGIvc3RhdHVzLmgiCi0jaW5jbHVkZSAibGV2ZWxkYi93
cml0ZV9iYXRjaC5oIgotCi11c2luZyBsZXZlbGRiOjpDYWNoZTsKLXVzaW5nIGxldmVsZGI6OkNv
bXBhcmF0b3I7Ci11c2luZyBsZXZlbGRiOjpDb21wcmVzc2lvblR5cGU7Ci11c2luZyBsZXZlbGRi
OjpEQjsKLXVzaW5nIGxldmVsZGI6OkVudjsKLXVzaW5nIGxldmVsZGI6OkZpbGVMb2NrOwotdXNp
bmcgbGV2ZWxkYjo6RmlsdGVyUG9saWN5OwotdXNpbmcgbGV2ZWxkYjo6SXRlcmF0b3I7Ci11c2lu
ZyBsZXZlbGRiOjprTWFqb3JWZXJzaW9uOwotdXNpbmcgbGV2ZWxkYjo6a01pbm9yVmVyc2lvbjsK
LXVzaW5nIGxldmVsZGI6OkxvZ2dlcjsKLXVzaW5nIGxldmVsZGI6Ok5ld0Jsb29tRmlsdGVyUG9s
aWN5OwotdXNpbmcgbGV2ZWxkYjo6TmV3TFJVQ2FjaGU7Ci11c2luZyBsZXZlbGRiOjpPcHRpb25z
OwotdXNpbmcgbGV2ZWxkYjo6UmFuZG9tQWNjZXNzRmlsZTsKLXVzaW5nIGxldmVsZGI6OlJhbmdl
OwotdXNpbmcgbGV2ZWxkYjo6UmVhZE9wdGlvbnM7Ci11c2luZyBsZXZlbGRiOjpTZXF1ZW50aWFs
RmlsZTsKLXVzaW5nIGxldmVsZGI6OlNsaWNlOwotdXNpbmcgbGV2ZWxkYjo6U25hcHNob3Q7Ci11
c2luZyBsZXZlbGRiOjpTdGF0dXM7Ci11c2luZyBsZXZlbGRiOjpXcml0YWJsZUZpbGU7Ci11c2lu
ZyBsZXZlbGRiOjpXcml0ZUJhdGNoOwotdXNpbmcgbGV2ZWxkYjo6V3JpdGVPcHRpb25zOwotCi1l
eHRlcm4gIkMiIHsKLQotc3RydWN0IGxldmVsZGJfdCAgICAgICAgICAgICAgeyBEQiogICAgICAg
ICAgICAgICByZXA7IH07Ci1zdHJ1Y3QgbGV2ZWxkYl9pdGVyYXRvcl90ICAgICB7IEl0ZXJhdG9y
KiAgICAgICAgIHJlcDsgfTsKLXN0cnVjdCBsZXZlbGRiX3dyaXRlYmF0Y2hfdCAgIHsgV3JpdGVC
YXRjaCAgICAgICAgcmVwOyB9Owotc3RydWN0IGxldmVsZGJfc25hcHNob3RfdCAgICAgeyBjb25z
dCBTbmFwc2hvdCogICByZXA7IH07Ci1zdHJ1Y3QgbGV2ZWxkYl9yZWFkb3B0aW9uc190ICB7IFJl
YWRPcHRpb25zICAgICAgIHJlcDsgfTsKLXN0cnVjdCBsZXZlbGRiX3dyaXRlb3B0aW9uc190IHsg
V3JpdGVPcHRpb25zICAgICAgcmVwOyB9Owotc3RydWN0IGxldmVsZGJfb3B0aW9uc190ICAgICAg
eyBPcHRpb25zICAgICAgICAgICByZXA7IH07Ci1zdHJ1Y3QgbGV2ZWxkYl9jYWNoZV90ICAgICAg
ICB7IENhY2hlKiAgICAgICAgICAgIHJlcDsgfTsKLXN0cnVjdCBsZXZlbGRiX3NlcWZpbGVfdCAg
ICAgIHsgU2VxdWVudGlhbEZpbGUqICAgcmVwOyB9Owotc3RydWN0IGxldmVsZGJfcmFuZG9tZmls
ZV90ICAgeyBSYW5kb21BY2Nlc3NGaWxlKiByZXA7IH07Ci1zdHJ1Y3QgbGV2ZWxkYl93cml0YWJs
ZWZpbGVfdCB7IFdyaXRhYmxlRmlsZSogICAgIHJlcDsgfTsKLXN0cnVjdCBsZXZlbGRiX2xvZ2dl
cl90ICAgICAgIHsgTG9nZ2VyKiAgICAgICAgICAgcmVwOyB9Owotc3RydWN0IGxldmVsZGJfZmls
ZWxvY2tfdCAgICAgeyBGaWxlTG9jayogICAgICAgICByZXA7IH07Ci0KLXN0cnVjdCBsZXZlbGRi
X2NvbXBhcmF0b3JfdCA6IHB1YmxpYyBDb21wYXJhdG9yIHsKLSAgdm9pZCogc3RhdGVfOwotICB2
b2lkICgqZGVzdHJ1Y3Rvcl8pKHZvaWQqKTsKLSAgaW50ICgqY29tcGFyZV8pKAotICAgICAgdm9p
ZCosCi0gICAgICBjb25zdCBjaGFyKiBhLCBzaXplX3QgYWxlbiwKLSAgICAgIGNvbnN0IGNoYXIq
IGIsIHNpemVfdCBibGVuKTsKLSAgY29uc3QgY2hhciogKCpuYW1lXykodm9pZCopOwotCi0gIHZp
cnR1YWwgfmxldmVsZGJfY29tcGFyYXRvcl90KCkgewotICAgICgqZGVzdHJ1Y3Rvcl8pKHN0YXRl
Xyk7Ci0gIH0KLQotICB2aXJ0dWFsIGludCBDb21wYXJlKGNvbnN0IFNsaWNlJiBhLCBjb25zdCBT
bGljZSYgYikgY29uc3QgewotICAgIHJldHVybiAoKmNvbXBhcmVfKShzdGF0ZV8sIGEuZGF0YSgp
LCBhLnNpemUoKSwgYi5kYXRhKCksIGIuc2l6ZSgpKTsKLSAgfQotCi0gIHZpcnR1YWwgY29uc3Qg
Y2hhciogTmFtZSgpIGNvbnN0IHsKLSAgICByZXR1cm4gKCpuYW1lXykoc3RhdGVfKTsKLSAgfQot
Ci0gIC8vIE5vLW9wcyBzaW5jZSB0aGUgQyBiaW5kaW5nIGRvZXMgbm90IHN1cHBvcnQga2V5IHNo
b3J0ZW5pbmcgbWV0aG9kcy4KLSAgdmlydHVhbCB2b2lkIEZpbmRTaG9ydGVzdFNlcGFyYXRvcihz
dGQ6OnN0cmluZyosIGNvbnN0IFNsaWNlJikgY29uc3QgeyB9Ci0gIHZpcnR1YWwgdm9pZCBGaW5k
U2hvcnRTdWNjZXNzb3Ioc3RkOjpzdHJpbmcqIGtleSkgY29uc3QgeyB9Ci19OwotCi1zdHJ1Y3Qg
bGV2ZWxkYl9maWx0ZXJwb2xpY3lfdCA6IHB1YmxpYyBGaWx0ZXJQb2xpY3kgewotICB2b2lkKiBz
dGF0ZV87Ci0gIHZvaWQgKCpkZXN0cnVjdG9yXykodm9pZCopOwotICBjb25zdCBjaGFyKiAoKm5h
bWVfKSh2b2lkKik7Ci0gIGNoYXIqICgqY3JlYXRlXykoCi0gICAgICB2b2lkKiwKLSAgICAgIGNv
bnN0IGNoYXIqIGNvbnN0KiBrZXlfYXJyYXksIGNvbnN0IHNpemVfdCoga2V5X2xlbmd0aF9hcnJh
eSwKLSAgICAgIGludCBudW1fa2V5cywKLSAgICAgIHNpemVfdCogZmlsdGVyX2xlbmd0aCk7Ci0g
IHVuc2lnbmVkIGNoYXIgKCprZXlfbWF0Y2hfKSgKLSAgICAgIHZvaWQqLAotICAgICAgY29uc3Qg
Y2hhcioga2V5LCBzaXplX3QgbGVuZ3RoLAotICAgICAgY29uc3QgY2hhciogZmlsdGVyLCBzaXpl
X3QgZmlsdGVyX2xlbmd0aCk7Ci0KLSAgdmlydHVhbCB+bGV2ZWxkYl9maWx0ZXJwb2xpY3lfdCgp
IHsKLSAgICAoKmRlc3RydWN0b3JfKShzdGF0ZV8pOwotICB9Ci0KLSAgdmlydHVhbCBjb25zdCBj
aGFyKiBOYW1lKCkgY29uc3QgewotICAgIHJldHVybiAoKm5hbWVfKShzdGF0ZV8pOwotICB9Ci0K
LSAgdmlydHVhbCB2b2lkIENyZWF0ZUZpbHRlcihjb25zdCBTbGljZSoga2V5cywgaW50IG4sIHN0
ZDo6c3RyaW5nKiBkc3QpIGNvbnN0IHsKLSAgICBzdGQ6OnZlY3Rvcjxjb25zdCBjaGFyKj4ga2V5
X3BvaW50ZXJzKG4pOwotICAgIHN0ZDo6dmVjdG9yPHNpemVfdD4ga2V5X3NpemVzKG4pOwotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICBrZXlfcG9pbnRlcnNbaV0gPSBr
ZXlzW2ldLmRhdGEoKTsKLSAgICAgIGtleV9zaXplc1tpXSA9IGtleXNbaV0uc2l6ZSgpOwotICAg
IH0KLSAgICBzaXplX3QgbGVuOwotICAgIGNoYXIqIGZpbHRlciA9ICgqY3JlYXRlXykoc3RhdGVf
LCAma2V5X3BvaW50ZXJzWzBdLCAma2V5X3NpemVzWzBdLCBuLCAmbGVuKTsKLSAgICBkc3QtPmFw
cGVuZChmaWx0ZXIsIGxlbik7Ci0gICAgZnJlZShmaWx0ZXIpOwotICB9Ci0KLSAgdmlydHVhbCBi
b29sIEtleU1heU1hdGNoKGNvbnN0IFNsaWNlJiBrZXksIGNvbnN0IFNsaWNlJiBmaWx0ZXIpIGNv
bnN0IHsKLSAgICByZXR1cm4gKCprZXlfbWF0Y2hfKShzdGF0ZV8sIGtleS5kYXRhKCksIGtleS5z
aXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmRhdGEoKSwgZmlsdGVyLnNp
emUoKSk7Ci0gIH0KLX07Ci0KLXN0cnVjdCBsZXZlbGRiX2Vudl90IHsKLSAgRW52KiByZXA7Ci0g
IGJvb2wgaXNfZGVmYXVsdDsKLX07Ci0KLXN0YXRpYyBib29sIFNhdmVFcnJvcihjaGFyKiogZXJy
cHRyLCBjb25zdCBTdGF0dXMmIHMpIHsKLSAgYXNzZXJ0KGVycnB0ciAhPSBOVUxMKTsKLSAgaWYg
KHMub2soKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfSBlbHNlIGlmICgqZXJycHRyID09IE5V
TEwpIHsKLSAgICAqZXJycHRyID0gc3RyZHVwKHMuVG9TdHJpbmcoKS5jX3N0cigpKTsKLSAgfSBl
bHNlIHsKLSAgICAvLyBUT0RPKHNhbmpheSk6IE1lcmdlIHdpdGggZXhpc3RpbmcgZXJyb3I/Ci0g
ICAgZnJlZSgqZXJycHRyKTsKLSAgICAqZXJycHRyID0gc3RyZHVwKHMuVG9TdHJpbmcoKS5jX3N0
cigpKTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGNoYXIqIENvcHlTdHJpbmco
Y29uc3Qgc3RkOjpzdHJpbmcmIHN0cikgewotICBjaGFyKiByZXN1bHQgPSByZWludGVycHJldF9j
YXN0PGNoYXIqPihtYWxsb2Moc2l6ZW9mKGNoYXIpICogc3RyLnNpemUoKSkpOwotICBtZW1jcHko
cmVzdWx0LCBzdHIuZGF0YSgpLCBzaXplb2YoY2hhcikgKiBzdHIuc2l6ZSgpKTsKLSAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotbGV2ZWxkYl90KiBsZXZlbGRiX29wZW4oCi0gICAgY29uc3QgbGV2ZWxk
Yl9vcHRpb25zX3QqIG9wdGlvbnMsCi0gICAgY29uc3QgY2hhciogbmFtZSwKLSAgICBjaGFyKiog
ZXJycHRyKSB7Ci0gIERCKiBkYjsKLSAgaWYgKFNhdmVFcnJvcihlcnJwdHIsIERCOjpPcGVuKG9w
dGlvbnMtPnJlcCwgc3RkOjpzdHJpbmcobmFtZSksICZkYikpKSB7Ci0gICAgcmV0dXJuIE5VTEw7
Ci0gIH0KLSAgbGV2ZWxkYl90KiByZXN1bHQgPSBuZXcgbGV2ZWxkYl90OwotICByZXN1bHQtPnJl
cCA9IGRiOwotICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIGxldmVsZGJfY2xvc2UobGV2ZWxk
Yl90KiBkYikgewotICBkZWxldGUgZGItPnJlcDsKLSAgZGVsZXRlIGRiOwotfQotCi12b2lkIGxl
dmVsZGJfcHV0KAotICAgIGxldmVsZGJfdCogZGIsCi0gICAgY29uc3QgbGV2ZWxkYl93cml0ZW9w
dGlvbnNfdCogb3B0aW9ucywKLSAgICBjb25zdCBjaGFyKiBrZXksIHNpemVfdCBrZXlsZW4sCi0g
ICAgY29uc3QgY2hhciogdmFsLCBzaXplX3QgdmFsbGVuLAotICAgIGNoYXIqKiBlcnJwdHIpIHsK
LSAgU2F2ZUVycm9yKGVycnB0ciwKLSAgICAgICAgICAgIGRiLT5yZXAtPlB1dChvcHRpb25zLT5y
ZXAsIFNsaWNlKGtleSwga2V5bGVuKSwgU2xpY2UodmFsLCB2YWxsZW4pKSk7Ci19Ci0KLXZvaWQg
bGV2ZWxkYl9kZWxldGUoCi0gICAgbGV2ZWxkYl90KiBkYiwKLSAgICBjb25zdCBsZXZlbGRiX3dy
aXRlb3B0aW9uc190KiBvcHRpb25zLAotICAgIGNvbnN0IGNoYXIqIGtleSwgc2l6ZV90IGtleWxl
biwKLSAgICBjaGFyKiogZXJycHRyKSB7Ci0gIFNhdmVFcnJvcihlcnJwdHIsIGRiLT5yZXAtPkRl
bGV0ZShvcHRpb25zLT5yZXAsIFNsaWNlKGtleSwga2V5bGVuKSkpOwotfQotCi0KLXZvaWQgbGV2
ZWxkYl93cml0ZSgKLSAgICBsZXZlbGRiX3QqIGRiLAotICAgIGNvbnN0IGxldmVsZGJfd3JpdGVv
cHRpb25zX3QqIG9wdGlvbnMsCi0gICAgbGV2ZWxkYl93cml0ZWJhdGNoX3QqIGJhdGNoLAotICAg
IGNoYXIqKiBlcnJwdHIpIHsKLSAgU2F2ZUVycm9yKGVycnB0ciwgZGItPnJlcC0+V3JpdGUob3B0
aW9ucy0+cmVwLCAmYmF0Y2gtPnJlcCkpOwotfQotCi1jaGFyKiBsZXZlbGRiX2dldCgKLSAgICBs
ZXZlbGRiX3QqIGRiLAotICAgIGNvbnN0IGxldmVsZGJfcmVhZG9wdGlvbnNfdCogb3B0aW9ucywK
LSAgICBjb25zdCBjaGFyKiBrZXksIHNpemVfdCBrZXlsZW4sCi0gICAgc2l6ZV90KiB2YWxsZW4s
Ci0gICAgY2hhcioqIGVycnB0cikgewotICBjaGFyKiByZXN1bHQgPSBOVUxMOwotICBzdGQ6OnN0
cmluZyB0bXA7Ci0gIFN0YXR1cyBzID0gZGItPnJlcC0+R2V0KG9wdGlvbnMtPnJlcCwgU2xpY2Uo
a2V5LCBrZXlsZW4pLCAmdG1wKTsKLSAgaWYgKHMub2soKSkgewotICAgICp2YWxsZW4gPSB0bXAu
c2l6ZSgpOwotICAgIHJlc3VsdCA9IENvcHlTdHJpbmcodG1wKTsKLSAgfSBlbHNlIHsKLSAgICAq
dmFsbGVuID0gMDsKLSAgICBpZiAoIXMuSXNOb3RGb3VuZCgpKSB7Ci0gICAgICBTYXZlRXJyb3Io
ZXJycHRyLCBzKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotbGV2ZWxkYl9p
dGVyYXRvcl90KiBsZXZlbGRiX2NyZWF0ZV9pdGVyYXRvcigKLSAgICBsZXZlbGRiX3QqIGRiLAot
ICAgIGNvbnN0IGxldmVsZGJfcmVhZG9wdGlvbnNfdCogb3B0aW9ucykgewotICBsZXZlbGRiX2l0
ZXJhdG9yX3QqIHJlc3VsdCA9IG5ldyBsZXZlbGRiX2l0ZXJhdG9yX3Q7Ci0gIHJlc3VsdC0+cmVw
ID0gZGItPnJlcC0+TmV3SXRlcmF0b3Iob3B0aW9ucy0+cmVwKTsKLSAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotY29uc3QgbGV2ZWxkYl9zbmFwc2hvdF90KiBsZXZlbGRiX2NyZWF0ZV9zbmFwc2hvdCgK
LSAgICBsZXZlbGRiX3QqIGRiKSB7Ci0gIGxldmVsZGJfc25hcHNob3RfdCogcmVzdWx0ID0gbmV3
IGxldmVsZGJfc25hcHNob3RfdDsKLSAgcmVzdWx0LT5yZXAgPSBkYi0+cmVwLT5HZXRTbmFwc2hv
dCgpOwotICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIGxldmVsZGJfcmVsZWFzZV9zbmFwc2hv
dCgKLSAgICBsZXZlbGRiX3QqIGRiLAotICAgIGNvbnN0IGxldmVsZGJfc25hcHNob3RfdCogc25h
cHNob3QpIHsKLSAgZGItPnJlcC0+UmVsZWFzZVNuYXBzaG90KHNuYXBzaG90LT5yZXApOwotICBk
ZWxldGUgc25hcHNob3Q7Ci19Ci0KLWNoYXIqIGxldmVsZGJfcHJvcGVydHlfdmFsdWUoCi0gICAg
bGV2ZWxkYl90KiBkYiwKLSAgICBjb25zdCBjaGFyKiBwcm9wbmFtZSkgewotICBzdGQ6OnN0cmlu
ZyB0bXA7Ci0gIGlmIChkYi0+cmVwLT5HZXRQcm9wZXJ0eShTbGljZShwcm9wbmFtZSksICZ0bXAp
KSB7Ci0gICAgLy8gV2UgdXNlIHN0cmR1cCgpIHNpbmNlIHdlIGV4cGVjdCBodW1hbiByZWFkYWJs
ZSBvdXRwdXQuCi0gICAgcmV0dXJuIHN0cmR1cCh0bXAuY19zdHIoKSk7Ci0gIH0gZWxzZSB7Ci0g
ICAgcmV0dXJuIE5VTEw7Ci0gIH0KLX0KLQotdm9pZCBsZXZlbGRiX2FwcHJveGltYXRlX3NpemVz
KAotICAgIGxldmVsZGJfdCogZGIsCi0gICAgaW50IG51bV9yYW5nZXMsCi0gICAgY29uc3QgY2hh
ciogY29uc3QqIHJhbmdlX3N0YXJ0X2tleSwgY29uc3Qgc2l6ZV90KiByYW5nZV9zdGFydF9rZXlf
bGVuLAotICAgIGNvbnN0IGNoYXIqIGNvbnN0KiByYW5nZV9saW1pdF9rZXksIGNvbnN0IHNpemVf
dCogcmFuZ2VfbGltaXRfa2V5X2xlbiwKLSAgICB1aW50NjRfdCogc2l6ZXMpIHsKLSAgUmFuZ2Uq
IHJhbmdlcyA9IG5ldyBSYW5nZVtudW1fcmFuZ2VzXTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBu
dW1fcmFuZ2VzOyBpKyspIHsKLSAgICByYW5nZXNbaV0uc3RhcnQgPSBTbGljZShyYW5nZV9zdGFy
dF9rZXlbaV0sIHJhbmdlX3N0YXJ0X2tleV9sZW5baV0pOwotICAgIHJhbmdlc1tpXS5saW1pdCA9
IFNsaWNlKHJhbmdlX2xpbWl0X2tleVtpXSwgcmFuZ2VfbGltaXRfa2V5X2xlbltpXSk7Ci0gIH0K
LSAgZGItPnJlcC0+R2V0QXBwcm94aW1hdGVTaXplcyhyYW5nZXMsIG51bV9yYW5nZXMsIHNpemVz
KTsKLSAgZGVsZXRlW10gcmFuZ2VzOwotfQotCi12b2lkIGxldmVsZGJfY29tcGFjdF9yYW5nZSgK
LSAgICBsZXZlbGRiX3QqIGRiLAotICAgIGNvbnN0IGNoYXIqIHN0YXJ0X2tleSwgc2l6ZV90IHN0
YXJ0X2tleV9sZW4sCi0gICAgY29uc3QgY2hhciogbGltaXRfa2V5LCBzaXplX3QgbGltaXRfa2V5
X2xlbikgewotICBTbGljZSBhLCBiOwotICBkYi0+cmVwLT5Db21wYWN0UmFuZ2UoCi0gICAgICAv
LyBQYXNzIE5VTEwgU2xpY2UgaWYgY29ycmVzcG9uZGluZyAiY29uc3QgY2hhcioiIGlzIE5VTEwK
LSAgICAgIChzdGFydF9rZXkgPyAoYSA9IFNsaWNlKHN0YXJ0X2tleSwgc3RhcnRfa2V5X2xlbiks
ICZhKSA6IE5VTEwpLAotICAgICAgKGxpbWl0X2tleSA/IChiID0gU2xpY2UobGltaXRfa2V5LCBs
aW1pdF9rZXlfbGVuKSwgJmIpIDogTlVMTCkpOwotfQotCi12b2lkIGxldmVsZGJfZGVzdHJveV9k
YigKLSAgICBjb25zdCBsZXZlbGRiX29wdGlvbnNfdCogb3B0aW9ucywKLSAgICBjb25zdCBjaGFy
KiBuYW1lLAotICAgIGNoYXIqKiBlcnJwdHIpIHsKLSAgU2F2ZUVycm9yKGVycnB0ciwgRGVzdHJv
eURCKG5hbWUsIG9wdGlvbnMtPnJlcCkpOwotfQotCi12b2lkIGxldmVsZGJfcmVwYWlyX2RiKAot
ICAgIGNvbnN0IGxldmVsZGJfb3B0aW9uc190KiBvcHRpb25zLAotICAgIGNvbnN0IGNoYXIqIG5h
bWUsCi0gICAgY2hhcioqIGVycnB0cikgewotICBTYXZlRXJyb3IoZXJycHRyLCBSZXBhaXJEQihu
YW1lLCBvcHRpb25zLT5yZXApKTsKLX0KLQotdm9pZCBsZXZlbGRiX2l0ZXJfZGVzdHJveShsZXZl
bGRiX2l0ZXJhdG9yX3QqIGl0ZXIpIHsKLSAgZGVsZXRlIGl0ZXItPnJlcDsKLSAgZGVsZXRlIGl0
ZXI7Ci19Ci0KLXVuc2lnbmVkIGNoYXIgbGV2ZWxkYl9pdGVyX3ZhbGlkKGNvbnN0IGxldmVsZGJf
aXRlcmF0b3JfdCogaXRlcikgewotICByZXR1cm4gaXRlci0+cmVwLT5WYWxpZCgpOwotfQotCi12
b2lkIGxldmVsZGJfaXRlcl9zZWVrX3RvX2ZpcnN0KGxldmVsZGJfaXRlcmF0b3JfdCogaXRlcikg
ewotICBpdGVyLT5yZXAtPlNlZWtUb0ZpcnN0KCk7Ci19Ci0KLXZvaWQgbGV2ZWxkYl9pdGVyX3Nl
ZWtfdG9fbGFzdChsZXZlbGRiX2l0ZXJhdG9yX3QqIGl0ZXIpIHsKLSAgaXRlci0+cmVwLT5TZWVr
VG9MYXN0KCk7Ci19Ci0KLXZvaWQgbGV2ZWxkYl9pdGVyX3NlZWsobGV2ZWxkYl9pdGVyYXRvcl90
KiBpdGVyLCBjb25zdCBjaGFyKiBrLCBzaXplX3Qga2xlbikgewotICBpdGVyLT5yZXAtPlNlZWso
U2xpY2Uoaywga2xlbikpOwotfQotCi12b2lkIGxldmVsZGJfaXRlcl9uZXh0KGxldmVsZGJfaXRl
cmF0b3JfdCogaXRlcikgewotICBpdGVyLT5yZXAtPk5leHQoKTsKLX0KLQotdm9pZCBsZXZlbGRi
X2l0ZXJfcHJldihsZXZlbGRiX2l0ZXJhdG9yX3QqIGl0ZXIpIHsKLSAgaXRlci0+cmVwLT5QcmV2
KCk7Ci19Ci0KLWNvbnN0IGNoYXIqIGxldmVsZGJfaXRlcl9rZXkoY29uc3QgbGV2ZWxkYl9pdGVy
YXRvcl90KiBpdGVyLCBzaXplX3QqIGtsZW4pIHsKLSAgU2xpY2UgcyA9IGl0ZXItPnJlcC0+a2V5
KCk7Ci0gICprbGVuID0gcy5zaXplKCk7Ci0gIHJldHVybiBzLmRhdGEoKTsKLX0KLQotY29uc3Qg
Y2hhciogbGV2ZWxkYl9pdGVyX3ZhbHVlKGNvbnN0IGxldmVsZGJfaXRlcmF0b3JfdCogaXRlciwg
c2l6ZV90KiB2bGVuKSB7Ci0gIFNsaWNlIHMgPSBpdGVyLT5yZXAtPnZhbHVlKCk7Ci0gICp2bGVu
ID0gcy5zaXplKCk7Ci0gIHJldHVybiBzLmRhdGEoKTsKLX0KLQotdm9pZCBsZXZlbGRiX2l0ZXJf
Z2V0X2Vycm9yKGNvbnN0IGxldmVsZGJfaXRlcmF0b3JfdCogaXRlciwgY2hhcioqIGVycnB0cikg
ewotICBTYXZlRXJyb3IoZXJycHRyLCBpdGVyLT5yZXAtPnN0YXR1cygpKTsKLX0KLQotbGV2ZWxk
Yl93cml0ZWJhdGNoX3QqIGxldmVsZGJfd3JpdGViYXRjaF9jcmVhdGUoKSB7Ci0gIHJldHVybiBu
ZXcgbGV2ZWxkYl93cml0ZWJhdGNoX3Q7Ci19Ci0KLXZvaWQgbGV2ZWxkYl93cml0ZWJhdGNoX2Rl
c3Ryb3kobGV2ZWxkYl93cml0ZWJhdGNoX3QqIGIpIHsKLSAgZGVsZXRlIGI7Ci19Ci0KLXZvaWQg
bGV2ZWxkYl93cml0ZWJhdGNoX2NsZWFyKGxldmVsZGJfd3JpdGViYXRjaF90KiBiKSB7Ci0gIGIt
PnJlcC5DbGVhcigpOwotfQotCi12b2lkIGxldmVsZGJfd3JpdGViYXRjaF9wdXQoCi0gICAgbGV2
ZWxkYl93cml0ZWJhdGNoX3QqIGIsCi0gICAgY29uc3QgY2hhcioga2V5LCBzaXplX3Qga2xlbiwK
LSAgICBjb25zdCBjaGFyKiB2YWwsIHNpemVfdCB2bGVuKSB7Ci0gIGItPnJlcC5QdXQoU2xpY2Uo
a2V5LCBrbGVuKSwgU2xpY2UodmFsLCB2bGVuKSk7Ci19Ci0KLXZvaWQgbGV2ZWxkYl93cml0ZWJh
dGNoX2RlbGV0ZSgKLSAgICBsZXZlbGRiX3dyaXRlYmF0Y2hfdCogYiwKLSAgICBjb25zdCBjaGFy
KiBrZXksIHNpemVfdCBrbGVuKSB7Ci0gIGItPnJlcC5EZWxldGUoU2xpY2Uoa2V5LCBrbGVuKSk7
Ci19Ci0KLXZvaWQgbGV2ZWxkYl93cml0ZWJhdGNoX2l0ZXJhdGUoCi0gICAgbGV2ZWxkYl93cml0
ZWJhdGNoX3QqIGIsCi0gICAgdm9pZCogc3RhdGUsCi0gICAgdm9pZCAoKnB1dCkodm9pZCosIGNv
bnN0IGNoYXIqIGssIHNpemVfdCBrbGVuLCBjb25zdCBjaGFyKiB2LCBzaXplX3QgdmxlbiksCi0g
ICAgdm9pZCAoKmRlbGV0ZWQpKHZvaWQqLCBjb25zdCBjaGFyKiBrLCBzaXplX3Qga2xlbikpIHsK
LSAgY2xhc3MgSCA6IHB1YmxpYyBXcml0ZUJhdGNoOjpIYW5kbGVyIHsKLSAgIHB1YmxpYzoKLSAg
ICB2b2lkKiBzdGF0ZV87Ci0gICAgdm9pZCAoKnB1dF8pKHZvaWQqLCBjb25zdCBjaGFyKiBrLCBz
aXplX3Qga2xlbiwgY29uc3QgY2hhciogdiwgc2l6ZV90IHZsZW4pOwotICAgIHZvaWQgKCpkZWxl
dGVkXykodm9pZCosIGNvbnN0IGNoYXIqIGssIHNpemVfdCBrbGVuKTsKLSAgICB2aXJ0dWFsIHZv
aWQgUHV0KGNvbnN0IFNsaWNlJiBrZXksIGNvbnN0IFNsaWNlJiB2YWx1ZSkgewotICAgICAgKCpw
dXRfKShzdGF0ZV8sIGtleS5kYXRhKCksIGtleS5zaXplKCksIHZhbHVlLmRhdGEoKSwgdmFsdWUu
c2l6ZSgpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIERlbGV0ZShjb25zdCBTbGljZSYga2V5
KSB7Ci0gICAgICAoKmRlbGV0ZWRfKShzdGF0ZV8sIGtleS5kYXRhKCksIGtleS5zaXplKCkpOwot
ICAgIH0KLSAgfTsKLSAgSCBoYW5kbGVyOwotICBoYW5kbGVyLnN0YXRlXyA9IHN0YXRlOwotICBo
YW5kbGVyLnB1dF8gPSBwdXQ7Ci0gIGhhbmRsZXIuZGVsZXRlZF8gPSBkZWxldGVkOwotICBiLT5y
ZXAuSXRlcmF0ZSgmaGFuZGxlcik7Ci19Ci0KLWxldmVsZGJfb3B0aW9uc190KiBsZXZlbGRiX29w
dGlvbnNfY3JlYXRlKCkgewotICByZXR1cm4gbmV3IGxldmVsZGJfb3B0aW9uc190OwotfQotCi12
b2lkIGxldmVsZGJfb3B0aW9uc19kZXN0cm95KGxldmVsZGJfb3B0aW9uc190KiBvcHRpb25zKSB7
Ci0gIGRlbGV0ZSBvcHRpb25zOwotfQotCi12b2lkIGxldmVsZGJfb3B0aW9uc19zZXRfY29tcGFy
YXRvcigKLSAgICBsZXZlbGRiX29wdGlvbnNfdCogb3B0LAotICAgIGxldmVsZGJfY29tcGFyYXRv
cl90KiBjbXApIHsKLSAgb3B0LT5yZXAuY29tcGFyYXRvciA9IGNtcDsKLX0KLQotdm9pZCBsZXZl
bGRiX29wdGlvbnNfc2V0X2ZpbHRlcl9wb2xpY3koCi0gICAgbGV2ZWxkYl9vcHRpb25zX3QqIG9w
dCwKLSAgICBsZXZlbGRiX2ZpbHRlcnBvbGljeV90KiBwb2xpY3kpIHsKLSAgb3B0LT5yZXAuZmls
dGVyX3BvbGljeSA9IHBvbGljeTsKLX0KLQotdm9pZCBsZXZlbGRiX29wdGlvbnNfc2V0X2NyZWF0
ZV9pZl9taXNzaW5nKAotICAgIGxldmVsZGJfb3B0aW9uc190KiBvcHQsIHVuc2lnbmVkIGNoYXIg
dikgewotICBvcHQtPnJlcC5jcmVhdGVfaWZfbWlzc2luZyA9IHY7Ci19Ci0KLXZvaWQgbGV2ZWxk
Yl9vcHRpb25zX3NldF9lcnJvcl9pZl9leGlzdHMoCi0gICAgbGV2ZWxkYl9vcHRpb25zX3QqIG9w
dCwgdW5zaWduZWQgY2hhciB2KSB7Ci0gIG9wdC0+cmVwLmVycm9yX2lmX2V4aXN0cyA9IHY7Ci19
Ci0KLXZvaWQgbGV2ZWxkYl9vcHRpb25zX3NldF9wYXJhbm9pZF9jaGVja3MoCi0gICAgbGV2ZWxk
Yl9vcHRpb25zX3QqIG9wdCwgdW5zaWduZWQgY2hhciB2KSB7Ci0gIG9wdC0+cmVwLnBhcmFub2lk
X2NoZWNrcyA9IHY7Ci19Ci0KLXZvaWQgbGV2ZWxkYl9vcHRpb25zX3NldF9lbnYobGV2ZWxkYl9v
cHRpb25zX3QqIG9wdCwgbGV2ZWxkYl9lbnZfdCogZW52KSB7Ci0gIG9wdC0+cmVwLmVudiA9IChl
bnYgPyBlbnYtPnJlcCA6IE5VTEwpOwotfQotCi12b2lkIGxldmVsZGJfb3B0aW9uc19zZXRfaW5m
b19sb2cobGV2ZWxkYl9vcHRpb25zX3QqIG9wdCwgbGV2ZWxkYl9sb2dnZXJfdCogbCkgewotICBv
cHQtPnJlcC5pbmZvX2xvZyA9IChsID8gbC0+cmVwIDogTlVMTCk7Ci19Ci0KLXZvaWQgbGV2ZWxk
Yl9vcHRpb25zX3NldF93cml0ZV9idWZmZXJfc2l6ZShsZXZlbGRiX29wdGlvbnNfdCogb3B0LCBz
aXplX3QgcykgewotICBvcHQtPnJlcC53cml0ZV9idWZmZXJfc2l6ZSA9IHM7Ci19Ci0KLXZvaWQg
bGV2ZWxkYl9vcHRpb25zX3NldF9tYXhfb3Blbl9maWxlcyhsZXZlbGRiX29wdGlvbnNfdCogb3B0
LCBpbnQgbikgewotICBvcHQtPnJlcC5tYXhfb3Blbl9maWxlcyA9IG47Ci19Ci0KLXZvaWQgbGV2
ZWxkYl9vcHRpb25zX3NldF9jYWNoZShsZXZlbGRiX29wdGlvbnNfdCogb3B0LCBsZXZlbGRiX2Nh
Y2hlX3QqIGMpIHsKLSAgb3B0LT5yZXAuYmxvY2tfY2FjaGUgPSBjLT5yZXA7Ci19Ci0KLXZvaWQg
bGV2ZWxkYl9vcHRpb25zX3NldF9ibG9ja19zaXplKGxldmVsZGJfb3B0aW9uc190KiBvcHQsIHNp
emVfdCBzKSB7Ci0gIG9wdC0+cmVwLmJsb2NrX3NpemUgPSBzOwotfQotCi12b2lkIGxldmVsZGJf
b3B0aW9uc19zZXRfYmxvY2tfcmVzdGFydF9pbnRlcnZhbChsZXZlbGRiX29wdGlvbnNfdCogb3B0
LCBpbnQgbikgewotICBvcHQtPnJlcC5ibG9ja19yZXN0YXJ0X2ludGVydmFsID0gbjsKLX0KLQot
dm9pZCBsZXZlbGRiX29wdGlvbnNfc2V0X2NvbXByZXNzaW9uKGxldmVsZGJfb3B0aW9uc190KiBv
cHQsIGludCB0KSB7Ci0gIG9wdC0+cmVwLmNvbXByZXNzaW9uID0gc3RhdGljX2Nhc3Q8Q29tcHJl
c3Npb25UeXBlPih0KTsKLX0KLQotbGV2ZWxkYl9jb21wYXJhdG9yX3QqIGxldmVsZGJfY29tcGFy
YXRvcl9jcmVhdGUoCi0gICAgdm9pZCogc3RhdGUsCi0gICAgdm9pZCAoKmRlc3RydWN0b3IpKHZv
aWQqKSwKLSAgICBpbnQgKCpjb21wYXJlKSgKLSAgICAgICAgdm9pZCosCi0gICAgICAgIGNvbnN0
IGNoYXIqIGEsIHNpemVfdCBhbGVuLAotICAgICAgICBjb25zdCBjaGFyKiBiLCBzaXplX3QgYmxl
biksCi0gICAgY29uc3QgY2hhciogKCpuYW1lKSh2b2lkKikpIHsKLSAgbGV2ZWxkYl9jb21wYXJh
dG9yX3QqIHJlc3VsdCA9IG5ldyBsZXZlbGRiX2NvbXBhcmF0b3JfdDsKLSAgcmVzdWx0LT5zdGF0
ZV8gPSBzdGF0ZTsKLSAgcmVzdWx0LT5kZXN0cnVjdG9yXyA9IGRlc3RydWN0b3I7Ci0gIHJlc3Vs
dC0+Y29tcGFyZV8gPSBjb21wYXJlOwotICByZXN1bHQtPm5hbWVfID0gbmFtZTsKLSAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotdm9pZCBsZXZlbGRiX2NvbXBhcmF0b3JfZGVzdHJveShsZXZlbGRiX2Nv
bXBhcmF0b3JfdCogY21wKSB7Ci0gIGRlbGV0ZSBjbXA7Ci19Ci0KLWxldmVsZGJfZmlsdGVycG9s
aWN5X3QqIGxldmVsZGJfZmlsdGVycG9saWN5X2NyZWF0ZSgKLSAgICB2b2lkKiBzdGF0ZSwKLSAg
ICB2b2lkICgqZGVzdHJ1Y3Rvcikodm9pZCopLAotICAgIGNoYXIqICgqY3JlYXRlX2ZpbHRlciko
Ci0gICAgICAgIHZvaWQqLAotICAgICAgICBjb25zdCBjaGFyKiBjb25zdCoga2V5X2FycmF5LCBj
b25zdCBzaXplX3QqIGtleV9sZW5ndGhfYXJyYXksCi0gICAgICAgIGludCBudW1fa2V5cywKLSAg
ICAgICAgc2l6ZV90KiBmaWx0ZXJfbGVuZ3RoKSwKLSAgICB1bnNpZ25lZCBjaGFyICgqa2V5X21h
eV9tYXRjaCkoCi0gICAgICAgIHZvaWQqLAotICAgICAgICBjb25zdCBjaGFyKiBrZXksIHNpemVf
dCBsZW5ndGgsCi0gICAgICAgIGNvbnN0IGNoYXIqIGZpbHRlciwgc2l6ZV90IGZpbHRlcl9sZW5n
dGgpLAotICAgIGNvbnN0IGNoYXIqICgqbmFtZSkodm9pZCopKSB7Ci0gIGxldmVsZGJfZmlsdGVy
cG9saWN5X3QqIHJlc3VsdCA9IG5ldyBsZXZlbGRiX2ZpbHRlcnBvbGljeV90OwotICByZXN1bHQt
PnN0YXRlXyA9IHN0YXRlOwotICByZXN1bHQtPmRlc3RydWN0b3JfID0gZGVzdHJ1Y3RvcjsKLSAg
cmVzdWx0LT5jcmVhdGVfID0gY3JlYXRlX2ZpbHRlcjsKLSAgcmVzdWx0LT5rZXlfbWF0Y2hfID0g
a2V5X21heV9tYXRjaDsKLSAgcmVzdWx0LT5uYW1lXyA9IG5hbWU7Ci0gIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXZvaWQgbGV2ZWxkYl9maWx0ZXJwb2xpY3lfZGVzdHJveShsZXZlbGRiX2ZpbHRlcnBv
bGljeV90KiBmaWx0ZXIpIHsKLSAgZGVsZXRlIGZpbHRlcjsKLX0KLQotbGV2ZWxkYl9maWx0ZXJw
b2xpY3lfdCogbGV2ZWxkYl9maWx0ZXJwb2xpY3lfY3JlYXRlX2Jsb29tKGludCBiaXRzX3Blcl9r
ZXkpIHsKLSAgLy8gTWFrZSBhIGxldmVsZGJfZmlsdGVycG9saWN5X3QsIGJ1dCBvdmVycmlkZSBh
bGwgb2YgaXRzIG1ldGhvZHMgc28KLSAgLy8gdGhleSBkZWxlZ2F0ZSB0byBhIE5ld0Jsb29tRmls
dGVyUG9saWN5KCkgaW5zdGVhZCBvZiB1c2VyCi0gIC8vIHN1cHBsaWVkIEMgZnVuY3Rpb25zLgot
ICBzdHJ1Y3QgV3JhcHBlciA6IHB1YmxpYyBsZXZlbGRiX2ZpbHRlcnBvbGljeV90IHsKLSAgICBj
b25zdCBGaWx0ZXJQb2xpY3kqIHJlcF87Ci0gICAgfldyYXBwZXIoKSB7IGRlbGV0ZSByZXBfOyB9
Ci0gICAgY29uc3QgY2hhciogTmFtZSgpIGNvbnN0IHsgcmV0dXJuIHJlcF8tPk5hbWUoKTsgfQot
ICAgIHZvaWQgQ3JlYXRlRmlsdGVyKGNvbnN0IFNsaWNlKiBrZXlzLCBpbnQgbiwgc3RkOjpzdHJp
bmcqIGRzdCkgY29uc3QgewotICAgICAgcmV0dXJuIHJlcF8tPkNyZWF0ZUZpbHRlcihrZXlzLCBu
LCBkc3QpOwotICAgIH0KLSAgICBib29sIEtleU1heU1hdGNoKGNvbnN0IFNsaWNlJiBrZXksIGNv
bnN0IFNsaWNlJiBmaWx0ZXIpIGNvbnN0IHsKLSAgICAgIHJldHVybiByZXBfLT5LZXlNYXlNYXRj
aChrZXksIGZpbHRlcik7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIERvTm90aGluZyh2b2lkKikg
eyB9Ci0gIH07Ci0gIFdyYXBwZXIqIHdyYXBwZXIgPSBuZXcgV3JhcHBlcjsKLSAgd3JhcHBlci0+
cmVwXyA9IE5ld0Jsb29tRmlsdGVyUG9saWN5KGJpdHNfcGVyX2tleSk7Ci0gIHdyYXBwZXItPnN0
YXRlXyA9IE5VTEw7Ci0gIHdyYXBwZXItPmRlc3RydWN0b3JfID0gJldyYXBwZXI6OkRvTm90aGlu
ZzsKLSAgcmV0dXJuIHdyYXBwZXI7Ci19Ci0KLWxldmVsZGJfcmVhZG9wdGlvbnNfdCogbGV2ZWxk
Yl9yZWFkb3B0aW9uc19jcmVhdGUoKSB7Ci0gIHJldHVybiBuZXcgbGV2ZWxkYl9yZWFkb3B0aW9u
c190OwotfQotCi12b2lkIGxldmVsZGJfcmVhZG9wdGlvbnNfZGVzdHJveShsZXZlbGRiX3JlYWRv
cHRpb25zX3QqIG9wdCkgewotICBkZWxldGUgb3B0OwotfQotCi12b2lkIGxldmVsZGJfcmVhZG9w
dGlvbnNfc2V0X3ZlcmlmeV9jaGVja3N1bXMoCi0gICAgbGV2ZWxkYl9yZWFkb3B0aW9uc190KiBv
cHQsCi0gICAgdW5zaWduZWQgY2hhciB2KSB7Ci0gIG9wdC0+cmVwLnZlcmlmeV9jaGVja3N1bXMg
PSB2OwotfQotCi12b2lkIGxldmVsZGJfcmVhZG9wdGlvbnNfc2V0X2ZpbGxfY2FjaGUoCi0gICAg
bGV2ZWxkYl9yZWFkb3B0aW9uc190KiBvcHQsIHVuc2lnbmVkIGNoYXIgdikgewotICBvcHQtPnJl
cC5maWxsX2NhY2hlID0gdjsKLX0KLQotdm9pZCBsZXZlbGRiX3JlYWRvcHRpb25zX3NldF9zbmFw
c2hvdCgKLSAgICBsZXZlbGRiX3JlYWRvcHRpb25zX3QqIG9wdCwKLSAgICBjb25zdCBsZXZlbGRi
X3NuYXBzaG90X3QqIHNuYXApIHsKLSAgb3B0LT5yZXAuc25hcHNob3QgPSAoc25hcCA/IHNuYXAt
PnJlcCA6IE5VTEwpOwotfQotCi1sZXZlbGRiX3dyaXRlb3B0aW9uc190KiBsZXZlbGRiX3dyaXRl
b3B0aW9uc19jcmVhdGUoKSB7Ci0gIHJldHVybiBuZXcgbGV2ZWxkYl93cml0ZW9wdGlvbnNfdDsK
LX0KLQotdm9pZCBsZXZlbGRiX3dyaXRlb3B0aW9uc19kZXN0cm95KGxldmVsZGJfd3JpdGVvcHRp
b25zX3QqIG9wdCkgewotICBkZWxldGUgb3B0OwotfQotCi12b2lkIGxldmVsZGJfd3JpdGVvcHRp
b25zX3NldF9zeW5jKAotICAgIGxldmVsZGJfd3JpdGVvcHRpb25zX3QqIG9wdCwgdW5zaWduZWQg
Y2hhciB2KSB7Ci0gIG9wdC0+cmVwLnN5bmMgPSB2OwotfQotCi1sZXZlbGRiX2NhY2hlX3QqIGxl
dmVsZGJfY2FjaGVfY3JlYXRlX2xydShzaXplX3QgY2FwYWNpdHkpIHsKLSAgbGV2ZWxkYl9jYWNo
ZV90KiBjID0gbmV3IGxldmVsZGJfY2FjaGVfdDsKLSAgYy0+cmVwID0gTmV3TFJVQ2FjaGUoY2Fw
YWNpdHkpOwotICByZXR1cm4gYzsKLX0KLQotdm9pZCBsZXZlbGRiX2NhY2hlX2Rlc3Ryb3kobGV2
ZWxkYl9jYWNoZV90KiBjYWNoZSkgewotICBkZWxldGUgY2FjaGUtPnJlcDsKLSAgZGVsZXRlIGNh
Y2hlOwotfQotCi1sZXZlbGRiX2Vudl90KiBsZXZlbGRiX2NyZWF0ZV9kZWZhdWx0X2VudigpIHsK
LSAgbGV2ZWxkYl9lbnZfdCogcmVzdWx0ID0gbmV3IGxldmVsZGJfZW52X3Q7Ci0gIHJlc3VsdC0+
cmVwID0gRW52OjpEZWZhdWx0KCk7Ci0gIHJlc3VsdC0+aXNfZGVmYXVsdCA9IHRydWU7Ci0gIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgbGV2ZWxkYl9lbnZfZGVzdHJveShsZXZlbGRiX2Vudl90
KiBlbnYpIHsKLSAgaWYgKCFlbnYtPmlzX2RlZmF1bHQpIGRlbGV0ZSBlbnYtPnJlcDsKLSAgZGVs
ZXRlIGVudjsKLX0KLQotdm9pZCBsZXZlbGRiX2ZyZWUodm9pZCogcHRyKSB7Ci0gIGZyZWUocHRy
KTsKLX0KLQotaW50IGxldmVsZGJfbWFqb3JfdmVyc2lvbigpIHsKLSAgcmV0dXJuIGtNYWpvclZl
cnNpb247Ci19Ci0KLWludCBsZXZlbGRiX21pbm9yX3ZlcnNpb24oKSB7Ci0gIHJldHVybiBrTWlu
b3JWZXJzaW9uOwotfQotCi19ICAvLyBlbmQgZXh0ZXJuICJDIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9jX3Rlc3QuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVs
ZGIvZGIvY190ZXN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjZDVlZTAuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9jX3Rlc3QuYworKysgL2Rl
di9udWxsCkBAIC0xLDM5MCArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVs
REIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSAgIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBv
ZiBjb250cmlidXRvcnMuICovCi0KLSNpbmNsdWRlICJsZXZlbGRiL2MuaCIKLQotI2luY2x1ZGUg
PHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5j
bHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8dW5pc3Rk
Lmg+Ci0KLWNvbnN0IGNoYXIqIHBoYXNlID0gIiI7Ci1zdGF0aWMgY2hhciBkYm5hbWVbMjAwXTsK
LQotc3RhdGljIHZvaWQgU3RhcnRQaGFzZShjb25zdCBjaGFyKiBuYW1lKSB7Ci0gIGZwcmludGYo
c3RkZXJyLCAiPT09IFRlc3QgJXNcbiIsIG5hbWUpOwotICBwaGFzZSA9IG5hbWU7Ci19Ci0KLXN0
YXRpYyBjb25zdCBjaGFyKiBHZXRUZW1wRGlyKHZvaWQpIHsKLSAgICBjb25zdCBjaGFyKiByZXQg
PSBnZXRlbnYoIlRFU1RfVE1QRElSIik7Ci0gICAgaWYgKHJldCA9PSBOVUxMIHx8IHJldFswXSA9
PSAnXDAnKQotICAgICAgICByZXQgPSAiL3RtcCI7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotI2Rl
ZmluZSBDaGVja05vRXJyb3IoZXJyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICBpZiAoKGVycikgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGZwcmludGYoc3RkZXJyLCAiJXM6
JWQ6ICVzOiAlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLCBwaGFzZSwgKGVycikpOyBcCi0gICAg
YWJvcnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIH0KLQotI2RlZmluZSBDaGVja0NvbmRpdGlvbihjb25kKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoIShjb25kKSkgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICVzOiAlc1xuIiwgX19GSUxFX18sIF9fTElORV9f
LCBwaGFzZSwgI2NvbmQpOyBcCi0gICAgYWJvcnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0KLQotc3RhdGljIHZvaWQg
Q2hlY2tFcXVhbChjb25zdCBjaGFyKiBleHBlY3RlZCwgY29uc3QgY2hhciogdiwgc2l6ZV90IG4p
IHsKLSAgaWYgKGV4cGVjdGVkID09IE5VTEwgJiYgdiA9PSBOVUxMKSB7Ci0gICAgLy8gb2sKLSAg
fSBlbHNlIGlmIChleHBlY3RlZCAhPSBOVUxMICYmIHYgIT0gTlVMTCAmJiBuID09IHN0cmxlbihl
eHBlY3RlZCkgJiYKLSAgICAgICAgICAgICBtZW1jbXAoZXhwZWN0ZWQsIHYsIG4pID09IDApIHsK
LSAgICAvLyBvawotICAgIHJldHVybjsKLSAgfSBlbHNlIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwg
IiVzOiBleHBlY3RlZCAnJXMnLCBnb3QgJyVzJ1xuIiwKLSAgICAgICAgICAgIHBoYXNlLAotICAg
ICAgICAgICAgKGV4cGVjdGVkID8gZXhwZWN0ZWQgOiAiKG51bGwpIiksCi0gICAgICAgICAgICAo
diA/IHYgOiAiKG51bGwiKSk7Ci0gICAgYWJvcnQoKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZCBG
cmVlKGNoYXIqKiBwdHIpIHsKLSAgaWYgKCpwdHIpIHsKLSAgICBmcmVlKCpwdHIpOwotICAgICpw
dHIgPSBOVUxMOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lkIENoZWNrR2V0KAotICAgIGxldmVsZGJf
dCogZGIsCi0gICAgY29uc3QgbGV2ZWxkYl9yZWFkb3B0aW9uc190KiBvcHRpb25zLAotICAgIGNv
bnN0IGNoYXIqIGtleSwKLSAgICBjb25zdCBjaGFyKiBleHBlY3RlZCkgewotICBjaGFyKiBlcnIg
PSBOVUxMOwotICBzaXplX3QgdmFsX2xlbjsKLSAgY2hhciogdmFsOwotICB2YWwgPSBsZXZlbGRi
X2dldChkYiwgb3B0aW9ucywga2V5LCBzdHJsZW4oa2V5KSwgJnZhbF9sZW4sICZlcnIpOwotICBD
aGVja05vRXJyb3IoZXJyKTsKLSAgQ2hlY2tFcXVhbChleHBlY3RlZCwgdmFsLCB2YWxfbGVuKTsK
LSAgRnJlZSgmdmFsKTsKLX0KLQotc3RhdGljIHZvaWQgQ2hlY2tJdGVyKGxldmVsZGJfaXRlcmF0
b3JfdCogaXRlciwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBrZXksIGNvbnN0
IGNoYXIqIHZhbCkgewotICBzaXplX3QgbGVuOwotICBjb25zdCBjaGFyKiBzdHI7Ci0gIHN0ciA9
IGxldmVsZGJfaXRlcl9rZXkoaXRlciwgJmxlbik7Ci0gIENoZWNrRXF1YWwoa2V5LCBzdHIsIGxl
bik7Ci0gIHN0ciA9IGxldmVsZGJfaXRlcl92YWx1ZShpdGVyLCAmbGVuKTsKLSAgQ2hlY2tFcXVh
bCh2YWwsIHN0ciwgbGVuKTsKLX0KLQotLy8gQ2FsbGJhY2sgZnJvbSBsZXZlbGRiX3dyaXRlYmF0
Y2hfaXRlcmF0ZSgpCi1zdGF0aWMgdm9pZCBDaGVja1B1dCh2b2lkKiBwdHIsCi0gICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBrLCBzaXplX3Qga2xlbiwKLSAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIHYsIHNpemVfdCB2bGVuKSB7Ci0gIGludCogc3RhdGUgPSAoaW50Kikg
cHRyOwotICBDaGVja0NvbmRpdGlvbigqc3RhdGUgPCAyKTsKLSAgc3dpdGNoICgqc3RhdGUpIHsK
LSAgICBjYXNlIDA6Ci0gICAgICBDaGVja0VxdWFsKCJiYXIiLCBrLCBrbGVuKTsKLSAgICAgIENo
ZWNrRXF1YWwoImIiLCB2LCB2bGVuKTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMToKLSAgICAg
IENoZWNrRXF1YWwoImJveCIsIGssIGtsZW4pOwotICAgICAgQ2hlY2tFcXVhbCgiYyIsIHYsIHZs
ZW4pOwotICAgICAgYnJlYWs7Ci0gIH0KLSAgKCpzdGF0ZSkrKzsKLX0KLQotLy8gQ2FsbGJhY2sg
ZnJvbSBsZXZlbGRiX3dyaXRlYmF0Y2hfaXRlcmF0ZSgpCi1zdGF0aWMgdm9pZCBDaGVja0RlbCh2
b2lkKiBwdHIsIGNvbnN0IGNoYXIqIGssIHNpemVfdCBrbGVuKSB7Ci0gIGludCogc3RhdGUgPSAo
aW50KikgcHRyOwotICBDaGVja0NvbmRpdGlvbigqc3RhdGUgPT0gMik7Ci0gIENoZWNrRXF1YWwo
ImJhciIsIGssIGtsZW4pOwotICAoKnN0YXRlKSsrOwotfQotCi1zdGF0aWMgdm9pZCBDbXBEZXN0
cm95KHZvaWQqIGFyZykgeyB9Ci0KLXN0YXRpYyBpbnQgQ21wQ29tcGFyZSh2b2lkKiBhcmcsIGNv
bnN0IGNoYXIqIGEsIHNpemVfdCBhbGVuLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIGIsIHNpemVfdCBibGVuKSB7Ci0gIGludCBuID0gKGFsZW4gPCBibGVuKSA/IGFsZW4gOiBi
bGVuOwotICBpbnQgciA9IG1lbWNtcChhLCBiLCBuKTsKLSAgaWYgKHIgPT0gMCkgewotICAgIGlm
IChhbGVuIDwgYmxlbikgciA9IC0xOwotICAgIGVsc2UgaWYgKGFsZW4gPiBibGVuKSByID0gKzE7
Ci0gIH0KLSAgcmV0dXJuIHI7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBDbXBOYW1lKHZvaWQq
IGFyZykgewotICByZXR1cm4gImZvbyI7Ci19Ci0KLS8vIEN1c3RvbSBmaWx0ZXIgcG9saWN5Ci1z
dGF0aWMgdW5zaWduZWQgY2hhciBmYWtlX2ZpbHRlcl9yZXN1bHQgPSAxOwotc3RhdGljIHZvaWQg
RmlsdGVyRGVzdHJveSh2b2lkKiBhcmcpIHsgfQotc3RhdGljIGNvbnN0IGNoYXIqIEZpbHRlck5h
bWUodm9pZCogYXJnKSB7Ci0gIHJldHVybiAiVGVzdEZpbHRlciI7Ci19Ci1zdGF0aWMgY2hhciog
RmlsdGVyQ3JlYXRlKAotICAgIHZvaWQqIGFyZywKLSAgICBjb25zdCBjaGFyKiBjb25zdCoga2V5
X2FycmF5LCBjb25zdCBzaXplX3QqIGtleV9sZW5ndGhfYXJyYXksCi0gICAgaW50IG51bV9rZXlz
LAotICAgIHNpemVfdCogZmlsdGVyX2xlbmd0aCkgewotICAqZmlsdGVyX2xlbmd0aCA9IDQ7Ci0g
IGNoYXIqIHJlc3VsdCA9IG1hbGxvYyg0KTsKLSAgbWVtY3B5KHJlc3VsdCwgImZha2UiLCA0KTsK
LSAgcmV0dXJuIHJlc3VsdDsKLX0KLXVuc2lnbmVkIGNoYXIgRmlsdGVyS2V5TWF0Y2goCi0gICAg
dm9pZCogYXJnLAotICAgIGNvbnN0IGNoYXIqIGtleSwgc2l6ZV90IGxlbmd0aCwKLSAgICBjb25z
dCBjaGFyKiBmaWx0ZXIsIHNpemVfdCBmaWx0ZXJfbGVuZ3RoKSB7Ci0gIENoZWNrQ29uZGl0aW9u
KGZpbHRlcl9sZW5ndGggPT0gNCk7Ci0gIENoZWNrQ29uZGl0aW9uKG1lbWNtcChmaWx0ZXIsICJm
YWtlIiwgNCkgPT0gMCk7Ci0gIHJldHVybiBmYWtlX2ZpbHRlcl9yZXN1bHQ7Ci19Ci0KLWludCBt
YWluKGludCBhcmdjLCBjaGFyKiogYXJndikgewotICBsZXZlbGRiX3QqIGRiOwotICBsZXZlbGRi
X2NvbXBhcmF0b3JfdCogY21wOwotICBsZXZlbGRiX2NhY2hlX3QqIGNhY2hlOwotICBsZXZlbGRi
X2Vudl90KiBlbnY7Ci0gIGxldmVsZGJfb3B0aW9uc190KiBvcHRpb25zOwotICBsZXZlbGRiX3Jl
YWRvcHRpb25zX3QqIHJvcHRpb25zOwotICBsZXZlbGRiX3dyaXRlb3B0aW9uc190KiB3b3B0aW9u
czsKLSAgY2hhciogZXJyID0gTlVMTDsKLSAgaW50IHJ1biA9IC0xOwotCi0gIENoZWNrQ29uZGl0
aW9uKGxldmVsZGJfbWFqb3JfdmVyc2lvbigpID49IDEpOwotICBDaGVja0NvbmRpdGlvbihsZXZl
bGRiX21pbm9yX3ZlcnNpb24oKSA+PSAxKTsKLQotICBzbnByaW50ZihkYm5hbWUsIHNpemVvZihk
Ym5hbWUpLAotICAgICAgICAgICAiJXMvbGV2ZWxkYl9jX3Rlc3QtJWQiLAotICAgICAgICAgICBH
ZXRUZW1wRGlyKCksCi0gICAgICAgICAgICgoaW50KSBnZXRldWlkKCkpKTsKLQotICBTdGFydFBo
YXNlKCJjcmVhdGVfb2JqZWN0cyIpOwotICBjbXAgPSBsZXZlbGRiX2NvbXBhcmF0b3JfY3JlYXRl
KE5VTEwsIENtcERlc3Ryb3ksIENtcENvbXBhcmUsIENtcE5hbWUpOwotICBlbnYgPSBsZXZlbGRi
X2NyZWF0ZV9kZWZhdWx0X2VudigpOwotICBjYWNoZSA9IGxldmVsZGJfY2FjaGVfY3JlYXRlX2xy
dSgxMDAwMDApOwotCi0gIG9wdGlvbnMgPSBsZXZlbGRiX29wdGlvbnNfY3JlYXRlKCk7Ci0gIGxl
dmVsZGJfb3B0aW9uc19zZXRfY29tcGFyYXRvcihvcHRpb25zLCBjbXApOwotICBsZXZlbGRiX29w
dGlvbnNfc2V0X2Vycm9yX2lmX2V4aXN0cyhvcHRpb25zLCAxKTsKLSAgbGV2ZWxkYl9vcHRpb25z
X3NldF9jYWNoZShvcHRpb25zLCBjYWNoZSk7Ci0gIGxldmVsZGJfb3B0aW9uc19zZXRfZW52KG9w
dGlvbnMsIGVudik7Ci0gIGxldmVsZGJfb3B0aW9uc19zZXRfaW5mb19sb2cob3B0aW9ucywgTlVM
TCk7Ci0gIGxldmVsZGJfb3B0aW9uc19zZXRfd3JpdGVfYnVmZmVyX3NpemUob3B0aW9ucywgMTAw
MDAwKTsKLSAgbGV2ZWxkYl9vcHRpb25zX3NldF9wYXJhbm9pZF9jaGVja3Mob3B0aW9ucywgMSk7
Ci0gIGxldmVsZGJfb3B0aW9uc19zZXRfbWF4X29wZW5fZmlsZXMob3B0aW9ucywgMTApOwotICBs
ZXZlbGRiX29wdGlvbnNfc2V0X2Jsb2NrX3NpemUob3B0aW9ucywgMTAyNCk7Ci0gIGxldmVsZGJf
b3B0aW9uc19zZXRfYmxvY2tfcmVzdGFydF9pbnRlcnZhbChvcHRpb25zLCA4KTsKLSAgbGV2ZWxk
Yl9vcHRpb25zX3NldF9jb21wcmVzc2lvbihvcHRpb25zLCBsZXZlbGRiX25vX2NvbXByZXNzaW9u
KTsKLQotICByb3B0aW9ucyA9IGxldmVsZGJfcmVhZG9wdGlvbnNfY3JlYXRlKCk7Ci0gIGxldmVs
ZGJfcmVhZG9wdGlvbnNfc2V0X3ZlcmlmeV9jaGVja3N1bXMocm9wdGlvbnMsIDEpOwotICBsZXZl
bGRiX3JlYWRvcHRpb25zX3NldF9maWxsX2NhY2hlKHJvcHRpb25zLCAwKTsKLQotICB3b3B0aW9u
cyA9IGxldmVsZGJfd3JpdGVvcHRpb25zX2NyZWF0ZSgpOwotICBsZXZlbGRiX3dyaXRlb3B0aW9u
c19zZXRfc3luYyh3b3B0aW9ucywgMSk7Ci0KLSAgU3RhcnRQaGFzZSgiZGVzdHJveSIpOwotICBs
ZXZlbGRiX2Rlc3Ryb3lfZGIob3B0aW9ucywgZGJuYW1lLCAmZXJyKTsKLSAgRnJlZSgmZXJyKTsK
LQotICBTdGFydFBoYXNlKCJvcGVuX2Vycm9yIik7Ci0gIGRiID0gbGV2ZWxkYl9vcGVuKG9wdGlv
bnMsIGRibmFtZSwgJmVycik7Ci0gIENoZWNrQ29uZGl0aW9uKGVyciAhPSBOVUxMKTsKLSAgRnJl
ZSgmZXJyKTsKLQotICBTdGFydFBoYXNlKCJsZXZlbGRiX2ZyZWUiKTsKLSAgZGIgPSBsZXZlbGRi
X29wZW4ob3B0aW9ucywgZGJuYW1lLCAmZXJyKTsKLSAgQ2hlY2tDb25kaXRpb24oZXJyICE9IE5V
TEwpOwotICBsZXZlbGRiX2ZyZWUoZXJyKTsKLSAgZXJyID0gTlVMTDsKLQotICBTdGFydFBoYXNl
KCJvcGVuIik7Ci0gIGxldmVsZGJfb3B0aW9uc19zZXRfY3JlYXRlX2lmX21pc3Npbmcob3B0aW9u
cywgMSk7Ci0gIGRiID0gbGV2ZWxkYl9vcGVuKG9wdGlvbnMsIGRibmFtZSwgJmVycik7Ci0gIENo
ZWNrTm9FcnJvcihlcnIpOwotICBDaGVja0dldChkYiwgcm9wdGlvbnMsICJmb28iLCBOVUxMKTsK
LQotICBTdGFydFBoYXNlKCJwdXQiKTsKLSAgbGV2ZWxkYl9wdXQoZGIsIHdvcHRpb25zLCAiZm9v
IiwgMywgImhlbGxvIiwgNSwgJmVycik7Ci0gIENoZWNrTm9FcnJvcihlcnIpOwotICBDaGVja0dl
dChkYiwgcm9wdGlvbnMsICJmb28iLCAiaGVsbG8iKTsKLQotICBTdGFydFBoYXNlKCJjb21wYWN0
YWxsIik7Ci0gIGxldmVsZGJfY29tcGFjdF9yYW5nZShkYiwgTlVMTCwgMCwgTlVMTCwgMCk7Ci0g
IENoZWNrR2V0KGRiLCByb3B0aW9ucywgImZvbyIsICJoZWxsbyIpOwotCi0gIFN0YXJ0UGhhc2Uo
ImNvbXBhY3RyYW5nZSIpOwotICBsZXZlbGRiX2NvbXBhY3RfcmFuZ2UoZGIsICJhIiwgMSwgInoi
LCAxKTsKLSAgQ2hlY2tHZXQoZGIsIHJvcHRpb25zLCAiZm9vIiwgImhlbGxvIik7Ci0KLSAgU3Rh
cnRQaGFzZSgid3JpdGViYXRjaCIpOwotICB7Ci0gICAgbGV2ZWxkYl93cml0ZWJhdGNoX3QqIHdi
ID0gbGV2ZWxkYl93cml0ZWJhdGNoX2NyZWF0ZSgpOwotICAgIGxldmVsZGJfd3JpdGViYXRjaF9w
dXQod2IsICJmb28iLCAzLCAiYSIsIDEpOwotICAgIGxldmVsZGJfd3JpdGViYXRjaF9jbGVhcih3
Yik7Ci0gICAgbGV2ZWxkYl93cml0ZWJhdGNoX3B1dCh3YiwgImJhciIsIDMsICJiIiwgMSk7Ci0g
ICAgbGV2ZWxkYl93cml0ZWJhdGNoX3B1dCh3YiwgImJveCIsIDMsICJjIiwgMSk7Ci0gICAgbGV2
ZWxkYl93cml0ZWJhdGNoX2RlbGV0ZSh3YiwgImJhciIsIDMpOwotICAgIGxldmVsZGJfd3JpdGUo
ZGIsIHdvcHRpb25zLCB3YiwgJmVycik7Ci0gICAgQ2hlY2tOb0Vycm9yKGVycik7Ci0gICAgQ2hl
Y2tHZXQoZGIsIHJvcHRpb25zLCAiZm9vIiwgImhlbGxvIik7Ci0gICAgQ2hlY2tHZXQoZGIsIHJv
cHRpb25zLCAiYmFyIiwgTlVMTCk7Ci0gICAgQ2hlY2tHZXQoZGIsIHJvcHRpb25zLCAiYm94Iiwg
ImMiKTsKLSAgICBpbnQgcG9zID0gMDsKLSAgICBsZXZlbGRiX3dyaXRlYmF0Y2hfaXRlcmF0ZSh3
YiwgJnBvcywgQ2hlY2tQdXQsIENoZWNrRGVsKTsKLSAgICBDaGVja0NvbmRpdGlvbihwb3MgPT0g
Myk7Ci0gICAgbGV2ZWxkYl93cml0ZWJhdGNoX2Rlc3Ryb3kod2IpOwotICB9Ci0KLSAgU3RhcnRQ
aGFzZSgiaXRlciIpOwotICB7Ci0gICAgbGV2ZWxkYl9pdGVyYXRvcl90KiBpdGVyID0gbGV2ZWxk
Yl9jcmVhdGVfaXRlcmF0b3IoZGIsIHJvcHRpb25zKTsKLSAgICBDaGVja0NvbmRpdGlvbighbGV2
ZWxkYl9pdGVyX3ZhbGlkKGl0ZXIpKTsKLSAgICBsZXZlbGRiX2l0ZXJfc2Vla190b19maXJzdChp
dGVyKTsKLSAgICBDaGVja0NvbmRpdGlvbihsZXZlbGRiX2l0ZXJfdmFsaWQoaXRlcikpOwotICAg
IENoZWNrSXRlcihpdGVyLCAiYm94IiwgImMiKTsKLSAgICBsZXZlbGRiX2l0ZXJfbmV4dChpdGVy
KTsKLSAgICBDaGVja0l0ZXIoaXRlciwgImZvbyIsICJoZWxsbyIpOwotICAgIGxldmVsZGJfaXRl
cl9wcmV2KGl0ZXIpOwotICAgIENoZWNrSXRlcihpdGVyLCAiYm94IiwgImMiKTsKLSAgICBsZXZl
bGRiX2l0ZXJfcHJldihpdGVyKTsKLSAgICBDaGVja0NvbmRpdGlvbighbGV2ZWxkYl9pdGVyX3Zh
bGlkKGl0ZXIpKTsKLSAgICBsZXZlbGRiX2l0ZXJfc2Vla190b19sYXN0KGl0ZXIpOwotICAgIENo
ZWNrSXRlcihpdGVyLCAiZm9vIiwgImhlbGxvIik7Ci0gICAgbGV2ZWxkYl9pdGVyX3NlZWsoaXRl
ciwgImIiLCAxKTsKLSAgICBDaGVja0l0ZXIoaXRlciwgImJveCIsICJjIik7Ci0gICAgbGV2ZWxk
Yl9pdGVyX2dldF9lcnJvcihpdGVyLCAmZXJyKTsKLSAgICBDaGVja05vRXJyb3IoZXJyKTsKLSAg
ICBsZXZlbGRiX2l0ZXJfZGVzdHJveShpdGVyKTsKLSAgfQotCi0gIFN0YXJ0UGhhc2UoImFwcHJv
eGltYXRlX3NpemVzIik7Ci0gIHsKLSAgICBpbnQgaTsKLSAgICBpbnQgbiA9IDIwMDAwOwotICAg
IGNoYXIga2V5YnVmWzEwMF07Ci0gICAgY2hhciB2YWxidWZbMTAwXTsKLSAgICB1aW50NjRfdCBz
aXplc1syXTsKLSAgICBjb25zdCBjaGFyKiBzdGFydFsyXSA9IHsgImEiLCAiazAwMDAwMDAwMDAw
MDAwMDEwMDAwIiB9OwotICAgIHNpemVfdCBzdGFydF9sZW5bMl0gPSB7IDEsIDIxIH07Ci0gICAg
Y29uc3QgY2hhciogbGltaXRbMl0gPSB7ICJrMDAwMDAwMDAwMDAwMDAwMTAwMDAiLCAieiIgfTsK
LSAgICBzaXplX3QgbGltaXRfbGVuWzJdID0geyAyMSwgMSB9OwotICAgIGxldmVsZGJfd3JpdGVv
cHRpb25zX3NldF9zeW5jKHdvcHRpb25zLCAwKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsr
KSB7Ci0gICAgICBzbnByaW50ZihrZXlidWYsIHNpemVvZihrZXlidWYpLCAiayUwMjBkIiwgaSk7
Ci0gICAgICBzbnByaW50Zih2YWxidWYsIHNpemVvZih2YWxidWYpLCAidiUwMjBkIiwgaSk7Ci0g
ICAgICBsZXZlbGRiX3B1dChkYiwgd29wdGlvbnMsIGtleWJ1Ziwgc3RybGVuKGtleWJ1ZiksIHZh
bGJ1Ziwgc3RybGVuKHZhbGJ1ZiksCi0gICAgICAgICAgICAgICAgICAmZXJyKTsKLSAgICAgIENo
ZWNrTm9FcnJvcihlcnIpOwotICAgIH0KLSAgICBsZXZlbGRiX2FwcHJveGltYXRlX3NpemVzKGRi
LCAyLCBzdGFydCwgc3RhcnRfbGVuLCBsaW1pdCwgbGltaXRfbGVuLCBzaXplcyk7Ci0gICAgQ2hl
Y2tDb25kaXRpb24oc2l6ZXNbMF0gPiAwKTsKLSAgICBDaGVja0NvbmRpdGlvbihzaXplc1sxXSA+
IDApOwotICB9Ci0KLSAgU3RhcnRQaGFzZSgicHJvcGVydHkiKTsKLSAgewotICAgIGNoYXIqIHBy
b3AgPSBsZXZlbGRiX3Byb3BlcnR5X3ZhbHVlKGRiLCAibm9zdWNocHJvcCIpOwotICAgIENoZWNr
Q29uZGl0aW9uKHByb3AgPT0gTlVMTCk7Ci0gICAgcHJvcCA9IGxldmVsZGJfcHJvcGVydHlfdmFs
dWUoZGIsICJsZXZlbGRiLnN0YXRzIik7Ci0gICAgQ2hlY2tDb25kaXRpb24ocHJvcCAhPSBOVUxM
KTsKLSAgICBGcmVlKCZwcm9wKTsKLSAgfQotCi0gIFN0YXJ0UGhhc2UoInNuYXBzaG90Iik7Ci0g
IHsKLSAgICBjb25zdCBsZXZlbGRiX3NuYXBzaG90X3QqIHNuYXA7Ci0gICAgc25hcCA9IGxldmVs
ZGJfY3JlYXRlX3NuYXBzaG90KGRiKTsKLSAgICBsZXZlbGRiX2RlbGV0ZShkYiwgd29wdGlvbnMs
ICJmb28iLCAzLCAmZXJyKTsKLSAgICBDaGVja05vRXJyb3IoZXJyKTsKLSAgICBsZXZlbGRiX3Jl
YWRvcHRpb25zX3NldF9zbmFwc2hvdChyb3B0aW9ucywgc25hcCk7Ci0gICAgQ2hlY2tHZXQoZGIs
IHJvcHRpb25zLCAiZm9vIiwgImhlbGxvIik7Ci0gICAgbGV2ZWxkYl9yZWFkb3B0aW9uc19zZXRf
c25hcHNob3Qocm9wdGlvbnMsIE5VTEwpOwotICAgIENoZWNrR2V0KGRiLCByb3B0aW9ucywgImZv
byIsIE5VTEwpOwotICAgIGxldmVsZGJfcmVsZWFzZV9zbmFwc2hvdChkYiwgc25hcCk7Ci0gIH0K
LQotICBTdGFydFBoYXNlKCJyZXBhaXIiKTsKLSAgewotICAgIGxldmVsZGJfY2xvc2UoZGIpOwot
ICAgIGxldmVsZGJfb3B0aW9uc19zZXRfY3JlYXRlX2lmX21pc3Npbmcob3B0aW9ucywgMCk7Ci0g
ICAgbGV2ZWxkYl9vcHRpb25zX3NldF9lcnJvcl9pZl9leGlzdHMob3B0aW9ucywgMCk7Ci0gICAg
bGV2ZWxkYl9yZXBhaXJfZGIob3B0aW9ucywgZGJuYW1lLCAmZXJyKTsKLSAgICBDaGVja05vRXJy
b3IoZXJyKTsKLSAgICBkYiA9IGxldmVsZGJfb3BlbihvcHRpb25zLCBkYm5hbWUsICZlcnIpOwot
ICAgIENoZWNrTm9FcnJvcihlcnIpOwotICAgIENoZWNrR2V0KGRiLCByb3B0aW9ucywgImZvbyIs
IE5VTEwpOwotICAgIENoZWNrR2V0KGRiLCByb3B0aW9ucywgImJhciIsIE5VTEwpOwotICAgIENo
ZWNrR2V0KGRiLCByb3B0aW9ucywgImJveCIsICJjIik7Ci0gICAgbGV2ZWxkYl9vcHRpb25zX3Nl
dF9jcmVhdGVfaWZfbWlzc2luZyhvcHRpb25zLCAxKTsKLSAgICBsZXZlbGRiX29wdGlvbnNfc2V0
X2Vycm9yX2lmX2V4aXN0cyhvcHRpb25zLCAxKTsKLSAgfQotCi0gIFN0YXJ0UGhhc2UoImZpbHRl
ciIpOwotICBmb3IgKHJ1biA9IDA7IHJ1biA8IDI7IHJ1bisrKSB7Ci0gICAgLy8gRmlyc3QgcnVu
IHVzZXMgY3VzdG9tIGZpbHRlciwgc2Vjb25kIHJ1biB1c2VzIGJsb29tIGZpbHRlcgotICAgIENo
ZWNrTm9FcnJvcihlcnIpOwotICAgIGxldmVsZGJfZmlsdGVycG9saWN5X3QqIHBvbGljeTsKLSAg
ICBpZiAocnVuID09IDApIHsKLSAgICAgIHBvbGljeSA9IGxldmVsZGJfZmlsdGVycG9saWN5X2Ny
ZWF0ZSgKLSAgICAgICAgICBOVUxMLCBGaWx0ZXJEZXN0cm95LCBGaWx0ZXJDcmVhdGUsIEZpbHRl
cktleU1hdGNoLCBGaWx0ZXJOYW1lKTsKLSAgICB9IGVsc2UgewotICAgICAgcG9saWN5ID0gbGV2
ZWxkYl9maWx0ZXJwb2xpY3lfY3JlYXRlX2Jsb29tKDEwKTsKLSAgICB9Ci0KLSAgICAvLyBDcmVh
dGUgbmV3IGRhdGFiYXNlCi0gICAgbGV2ZWxkYl9jbG9zZShkYik7Ci0gICAgbGV2ZWxkYl9kZXN0
cm95X2RiKG9wdGlvbnMsIGRibmFtZSwgJmVycik7Ci0gICAgbGV2ZWxkYl9vcHRpb25zX3NldF9m
aWx0ZXJfcG9saWN5KG9wdGlvbnMsIHBvbGljeSk7Ci0gICAgZGIgPSBsZXZlbGRiX29wZW4ob3B0
aW9ucywgZGJuYW1lLCAmZXJyKTsKLSAgICBDaGVja05vRXJyb3IoZXJyKTsKLSAgICBsZXZlbGRi
X3B1dChkYiwgd29wdGlvbnMsICJmb28iLCAzLCAiZm9vdmFsdWUiLCA4LCAmZXJyKTsKLSAgICBD
aGVja05vRXJyb3IoZXJyKTsKLSAgICBsZXZlbGRiX3B1dChkYiwgd29wdGlvbnMsICJiYXIiLCAz
LCAiYmFydmFsdWUiLCA4LCAmZXJyKTsKLSAgICBDaGVja05vRXJyb3IoZXJyKTsKLSAgICBsZXZl
bGRiX2NvbXBhY3RfcmFuZ2UoZGIsIE5VTEwsIDAsIE5VTEwsIDApOwotCi0gICAgZmFrZV9maWx0
ZXJfcmVzdWx0ID0gMTsKLSAgICBDaGVja0dldChkYiwgcm9wdGlvbnMsICJmb28iLCAiZm9vdmFs
dWUiKTsKLSAgICBDaGVja0dldChkYiwgcm9wdGlvbnMsICJiYXIiLCAiYmFydmFsdWUiKTsKLSAg
ICBpZiAocGhhc2UgPT0gMCkgewotICAgICAgLy8gTXVzdCBub3QgZmluZCB2YWx1ZSB3aGVuIGN1
c3RvbSBmaWx0ZXIgcmV0dXJucyBmYWxzZQotICAgICAgZmFrZV9maWx0ZXJfcmVzdWx0ID0gMDsK
LSAgICAgIENoZWNrR2V0KGRiLCByb3B0aW9ucywgImZvbyIsIE5VTEwpOwotICAgICAgQ2hlY2tH
ZXQoZGIsIHJvcHRpb25zLCAiYmFyIiwgTlVMTCk7Ci0gICAgICBmYWtlX2ZpbHRlcl9yZXN1bHQg
PSAxOwotCi0gICAgICBDaGVja0dldChkYiwgcm9wdGlvbnMsICJmb28iLCAiZm9vdmFsdWUiKTsK
LSAgICAgIENoZWNrR2V0KGRiLCByb3B0aW9ucywgImJhciIsICJiYXJ2YWx1ZSIpOwotICAgIH0K
LSAgICBsZXZlbGRiX29wdGlvbnNfc2V0X2ZpbHRlcl9wb2xpY3kob3B0aW9ucywgTlVMTCk7Ci0g
ICAgbGV2ZWxkYl9maWx0ZXJwb2xpY3lfZGVzdHJveShwb2xpY3kpOwotICB9Ci0KLSAgU3RhcnRQ
aGFzZSgiY2xlYW51cCIpOwotICBsZXZlbGRiX2Nsb3NlKGRiKTsKLSAgbGV2ZWxkYl9vcHRpb25z
X2Rlc3Ryb3kob3B0aW9ucyk7Ci0gIGxldmVsZGJfcmVhZG9wdGlvbnNfZGVzdHJveShyb3B0aW9u
cyk7Ci0gIGxldmVsZGJfd3JpdGVvcHRpb25zX2Rlc3Ryb3kod29wdGlvbnMpOwotICBsZXZlbGRi
X2NhY2hlX2Rlc3Ryb3koY2FjaGUpOwotICBsZXZlbGRiX2NvbXBhcmF0b3JfZGVzdHJveShjbXAp
OwotICBsZXZlbGRiX2Vudl9kZXN0cm95KGVudik7Ci0KLSAgZnByaW50ZihzdGRlcnIsICJQQVNT
XG4iKTsKLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZl
bGRiL2RiL2NvcnJ1cHRpb25fdGVzdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIv
Y29ycnVwdGlvbl90ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWIyZDVm
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvY29ycnVwdGlvbl90
ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMzU5ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykg
MjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZp
bGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KLQotI2luY2x1ZGUgImxldmVsZGIvZGIuaCIK
LQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzeXMv
c3RhdC5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgImxldmVsZGIvY2FjaGUu
aCIKLSNpbmNsdWRlICJsZXZlbGRiL2Vudi5oIgotI2luY2x1ZGUgImxldmVsZGIvdGFibGUuaCIK
LSNpbmNsdWRlICJsZXZlbGRiL3dyaXRlX2JhdGNoLmgiCi0jaW5jbHVkZSAiZGIvZGJfaW1wbC5o
IgotI2luY2x1ZGUgImRiL2ZpbGVuYW1lLmgiCi0jaW5jbHVkZSAiZGIvbG9nX2Zvcm1hdC5oIgot
I2luY2x1ZGUgImRiL3ZlcnNpb25fc2V0LmgiCi0jaW5jbHVkZSAidXRpbC9sb2dnaW5nLmgiCi0j
aW5jbHVkZSAidXRpbC90ZXN0aGFybmVzcy5oIgotI2luY2x1ZGUgInV0aWwvdGVzdHV0aWwuaCIK
LQotbmFtZXNwYWNlIGxldmVsZGIgewotCi1zdGF0aWMgY29uc3QgaW50IGtWYWx1ZVNpemUgPSAx
MDAwOwotCi1jbGFzcyBDb3JydXB0aW9uVGVzdCB7Ci0gcHVibGljOgotICB0ZXN0OjpFcnJvckVu
diBlbnZfOwotICBzdGQ6OnN0cmluZyBkYm5hbWVfOwotICBDYWNoZSogdGlueV9jYWNoZV87Ci0g
IE9wdGlvbnMgb3B0aW9uc187Ci0gIERCKiBkYl87Ci0KLSAgQ29ycnVwdGlvblRlc3QoKSB7Ci0g
ICAgdGlueV9jYWNoZV8gPSBOZXdMUlVDYWNoZSgxMDApOwotICAgIG9wdGlvbnNfLmVudiA9ICZl
bnZfOwotICAgIGRibmFtZV8gPSB0ZXN0OjpUbXBEaXIoKSArICIvZGJfdGVzdCI7Ci0gICAgRGVz
dHJveURCKGRibmFtZV8sIG9wdGlvbnNfKTsKLQotICAgIGRiXyA9IE5VTEw7Ci0gICAgb3B0aW9u
c18uY3JlYXRlX2lmX21pc3NpbmcgPSB0cnVlOwotICAgIFJlb3BlbigpOwotICAgIG9wdGlvbnNf
LmNyZWF0ZV9pZl9taXNzaW5nID0gZmFsc2U7Ci0gIH0KLQotICB+Q29ycnVwdGlvblRlc3QoKSB7
Ci0gICAgIGRlbGV0ZSBkYl87Ci0gICAgIERlc3Ryb3lEQihkYm5hbWVfLCBPcHRpb25zKCkpOwot
ICAgICBkZWxldGUgdGlueV9jYWNoZV87Ci0gIH0KLQotICBTdGF0dXMgVHJ5UmVvcGVuKE9wdGlv
bnMqIG9wdGlvbnMgPSBOVUxMKSB7Ci0gICAgZGVsZXRlIGRiXzsKLSAgICBkYl8gPSBOVUxMOwot
ICAgIE9wdGlvbnMgb3B0ID0gKG9wdGlvbnMgPyAqb3B0aW9ucyA6IG9wdGlvbnNfKTsKLSAgICBv
cHQuZW52ID0gJmVudl87Ci0gICAgb3B0LmJsb2NrX2NhY2hlID0gdGlueV9jYWNoZV87Ci0gICAg
cmV0dXJuIERCOjpPcGVuKG9wdCwgZGJuYW1lXywgJmRiXyk7Ci0gIH0KLQotICB2b2lkIFJlb3Bl
bihPcHRpb25zKiBvcHRpb25zID0gTlVMTCkgewotICAgIEFTU0VSVF9PSyhUcnlSZW9wZW4ob3B0
aW9ucykpOwotICB9Ci0KLSAgdm9pZCBSZXBhaXJEQigpIHsKLSAgICBkZWxldGUgZGJfOwotICAg
IGRiXyA9IE5VTEw7Ci0gICAgQVNTRVJUX09LKDo6bGV2ZWxkYjo6UmVwYWlyREIoZGJuYW1lXywg
b3B0aW9uc18pKTsKLSAgfQotCi0gIHZvaWQgQnVpbGQoaW50IG4pIHsKLSAgICBzdGQ6OnN0cmlu
ZyBrZXlfc3BhY2UsIHZhbHVlX3NwYWNlOwotICAgIFdyaXRlQmF0Y2ggYmF0Y2g7Ci0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgIC8vaWYgKChpICUgMTAwKSA9PSAwKSBm
cHJpbnRmKHN0ZGVyciwgIkAgJWQgb2YgJWRcbiIsIGksIG4pOwotICAgICAgU2xpY2Uga2V5ID0g
S2V5KGksICZrZXlfc3BhY2UpOwotICAgICAgYmF0Y2guQ2xlYXIoKTsKLSAgICAgIGJhdGNoLlB1
dChrZXksIFZhbHVlKGksICZ2YWx1ZV9zcGFjZSkpOwotICAgICAgQVNTRVJUX09LKGRiXy0+V3Jp
dGUoV3JpdGVPcHRpb25zKCksICZiYXRjaCkpOwotICAgIH0KLSAgfQotCi0gIHZvaWQgQ2hlY2so
aW50IG1pbl9leHBlY3RlZCwgaW50IG1heF9leHBlY3RlZCkgewotICAgIGludCBuZXh0X2V4cGVj
dGVkID0gMDsKLSAgICBpbnQgbWlzc2VkID0gMDsKLSAgICBpbnQgYmFkX2tleXMgPSAwOwotICAg
IGludCBiYWRfdmFsdWVzID0gMDsKLSAgICBpbnQgY29ycmVjdCA9IDA7Ci0gICAgc3RkOjpzdHJp
bmcgdmFsdWVfc3BhY2U7Ci0gICAgSXRlcmF0b3IqIGl0ZXIgPSBkYl8tPk5ld0l0ZXJhdG9yKFJl
YWRPcHRpb25zKCkpOwotICAgIGZvciAoaXRlci0+U2Vla1RvRmlyc3QoKTsgaXRlci0+VmFsaWQo
KTsgaXRlci0+TmV4dCgpKSB7Ci0gICAgICB1aW50NjRfdCBrZXk7Ci0gICAgICBTbGljZSBpbihp
dGVyLT5rZXkoKSk7Ci0gICAgICBpZiAoIUNvbnN1bWVEZWNpbWFsTnVtYmVyKCZpbiwgJmtleSkg
fHwKLSAgICAgICAgICAhaW4uZW1wdHkoKSB8fAotICAgICAgICAgIGtleSA8IG5leHRfZXhwZWN0
ZWQpIHsKLSAgICAgICAgYmFkX2tleXMrKzsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0g
ICAgICBtaXNzZWQgKz0gKGtleSAtIG5leHRfZXhwZWN0ZWQpOwotICAgICAgbmV4dF9leHBlY3Rl
ZCA9IGtleSArIDE7Ci0gICAgICBpZiAoaXRlci0+dmFsdWUoKSAhPSBWYWx1ZShrZXksICZ2YWx1
ZV9zcGFjZSkpIHsKLSAgICAgICAgYmFkX3ZhbHVlcysrOwotICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgY29ycmVjdCsrOwotICAgICAgfQotICAgIH0KLSAgICBkZWxldGUgaXRlcjsKLQotICAgIGZw
cmludGYoc3RkZXJyLAotICAgICAgICAgICAgImV4cGVjdGVkPSVkLi4lZDsgZ290PSVkOyBiYWRf
a2V5cz0lZDsgYmFkX3ZhbHVlcz0lZDsgbWlzc2VkPSVkXG4iLAotICAgICAgICAgICAgbWluX2V4
cGVjdGVkLCBtYXhfZXhwZWN0ZWQsIGNvcnJlY3QsIGJhZF9rZXlzLCBiYWRfdmFsdWVzLCBtaXNz
ZWQpOwotICAgIEFTU0VSVF9MRShtaW5fZXhwZWN0ZWQsIGNvcnJlY3QpOwotICAgIEFTU0VSVF9H
RShtYXhfZXhwZWN0ZWQsIGNvcnJlY3QpOwotICB9Ci0KLSAgdm9pZCBDb3JydXB0KEZpbGVUeXBl
IGZpbGV0eXBlLCBpbnQgb2Zmc2V0LCBpbnQgYnl0ZXNfdG9fY29ycnVwdCkgewotICAgIC8vIFBp
Y2sgZmlsZSB0byBjb3JydXB0Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGZpbGVuYW1l
czsKLSAgICBBU1NFUlRfT0soZW52Xy5HZXRDaGlsZHJlbihkYm5hbWVfLCAmZmlsZW5hbWVzKSk7
Ci0gICAgdWludDY0X3QgbnVtYmVyOwotICAgIEZpbGVUeXBlIHR5cGU7Ci0gICAgc3RkOjpzdHJp
bmcgZm5hbWU7Ci0gICAgaW50IHBpY2tlZF9udW1iZXIgPSAtMTsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IGZpbGVuYW1lcy5zaXplKCk7IGkrKykgewotICAgICAgaWYgKFBhcnNlRmlsZU5hbWUo
ZmlsZW5hbWVzW2ldLCAmbnVtYmVyLCAmdHlwZSkgJiYKLSAgICAgICAgICB0eXBlID09IGZpbGV0
eXBlICYmCi0gICAgICAgICAgaW50KG51bWJlcikgPiBwaWNrZWRfbnVtYmVyKSB7ICAvLyBQaWNr
IGxhdGVzdCBmaWxlCi0gICAgICAgIGZuYW1lID0gZGJuYW1lXyArICIvIiArIGZpbGVuYW1lc1tp
XTsKLSAgICAgICAgcGlja2VkX251bWJlciA9IG51bWJlcjsKLSAgICAgIH0KLSAgICB9Ci0gICAg
QVNTRVJUX1RSVUUoIWZuYW1lLmVtcHR5KCkpIDw8IGZpbGV0eXBlOwotCi0gICAgc3RydWN0IHN0
YXQgc2J1ZjsKLSAgICBpZiAoc3RhdChmbmFtZS5jX3N0cigpLCAmc2J1ZikgIT0gMCkgewotICAg
ICAgY29uc3QgY2hhciogbXNnID0gc3RyZXJyb3IoZXJybm8pOwotICAgICAgQVNTRVJUX1RSVUUo
ZmFsc2UpIDw8IGZuYW1lIDw8ICI6ICIgPDwgbXNnOwotICAgIH0KLQotICAgIGlmIChvZmZzZXQg
PCAwKSB7Ci0gICAgICAvLyBSZWxhdGl2ZSB0byBlbmQgb2YgZmlsZTsgbWFrZSBpdCBhYnNvbHV0
ZQotICAgICAgaWYgKC1vZmZzZXQgPiBzYnVmLnN0X3NpemUpIHsKLSAgICAgICAgb2Zmc2V0ID0g
MDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG9mZnNldCA9IHNidWYuc3Rfc2l6ZSArIG9mZnNl
dDsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG9mZnNldCA+IHNidWYuc3Rfc2l6ZSkgewotICAg
ICAgb2Zmc2V0ID0gc2J1Zi5zdF9zaXplOwotICAgIH0KLSAgICBpZiAob2Zmc2V0ICsgYnl0ZXNf
dG9fY29ycnVwdCA+IHNidWYuc3Rfc2l6ZSkgewotICAgICAgYnl0ZXNfdG9fY29ycnVwdCA9IHNi
dWYuc3Rfc2l6ZSAtIG9mZnNldDsKLSAgICB9Ci0KLSAgICAvLyBEbyBpdAotICAgIHN0ZDo6c3Ry
aW5nIGNvbnRlbnRzOwotICAgIFN0YXR1cyBzID0gUmVhZEZpbGVUb1N0cmluZyhFbnY6OkRlZmF1
bHQoKSwgZm5hbWUsICZjb250ZW50cyk7Ci0gICAgQVNTRVJUX1RSVUUocy5vaygpKSA8PCBzLlRv
U3RyaW5nKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBieXRlc190b19jb3JydXB0OyBpKysp
IHsKLSAgICAgIGNvbnRlbnRzW2kgKyBvZmZzZXRdIF49IDB4ODA7Ci0gICAgfQotICAgIHMgPSBX
cml0ZVN0cmluZ1RvRmlsZShFbnY6OkRlZmF1bHQoKSwgY29udGVudHMsIGZuYW1lKTsKLSAgICBB
U1NFUlRfVFJVRShzLm9rKCkpIDw8IHMuVG9TdHJpbmcoKTsKLSAgfQotCi0gIGludCBQcm9wZXJ0
eShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgewotICAgIHN0ZDo6c3RyaW5nIHByb3BlcnR5Owot
ICAgIGludCByZXN1bHQ7Ci0gICAgaWYgKGRiXy0+R2V0UHJvcGVydHkobmFtZSwgJnByb3BlcnR5
KSAmJgotICAgICAgICBzc2NhbmYocHJvcGVydHkuY19zdHIoKSwgIiVkIiwgJnJlc3VsdCkgPT0g
MSkgewotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIC0x
OwotICAgIH0KLSAgfQotCi0gIC8vIFJldHVybiB0aGUgaXRoIGtleQotICBTbGljZSBLZXkoaW50
IGksIHN0ZDo6c3RyaW5nKiBzdG9yYWdlKSB7Ci0gICAgY2hhciBidWZbMTAwXTsKLSAgICBzbnBy
aW50ZihidWYsIHNpemVvZihidWYpLCAiJTAxNmQiLCBpKTsKLSAgICBzdG9yYWdlLT5hc3NpZ24o
YnVmLCBzdHJsZW4oYnVmKSk7Ci0gICAgcmV0dXJuIFNsaWNlKCpzdG9yYWdlKTsKLSAgfQotCi0g
IC8vIFJldHVybiB0aGUgdmFsdWUgdG8gYXNzb2NpYXRlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkK
LSAgU2xpY2UgVmFsdWUoaW50IGssIHN0ZDo6c3RyaW5nKiBzdG9yYWdlKSB7Ci0gICAgUmFuZG9t
IHIoayk7Ci0gICAgcmV0dXJuIHRlc3Q6OlJhbmRvbVN0cmluZygmciwga1ZhbHVlU2l6ZSwgc3Rv
cmFnZSk7Ci0gIH0KLX07Ci0KLVRFU1QoQ29ycnVwdGlvblRlc3QsIFJlY292ZXJ5KSB7Ci0gIEJ1
aWxkKDEwMCk7Ci0gIENoZWNrKDEwMCwgMTAwKTsKLSAgQ29ycnVwdChrTG9nRmlsZSwgMTksIDEp
OyAgICAgIC8vIFdyaXRlQmF0Y2ggdGFnIGZvciBmaXJzdCByZWNvcmQKLSAgQ29ycnVwdChrTG9n
RmlsZSwgbG9nOjprQmxvY2tTaXplICsgMTAwMCwgMSk7ICAvLyBTb21ld2hlcmUgaW4gc2Vjb25k
IGJsb2NrCi0gIFJlb3BlbigpOwotCi0gIC8vIFRoZSA2NCByZWNvcmRzIGluIHRoZSBmaXJzdCB0
d28gbG9nIGJsb2NrcyBhcmUgY29tcGxldGVseSBsb3N0LgotICBDaGVjaygzNiwgMzYpOwotfQot
Ci1URVNUKENvcnJ1cHRpb25UZXN0LCBSZWNvdmVyV3JpdGVFcnJvcikgewotICBlbnZfLndyaXRh
YmxlX2ZpbGVfZXJyb3JfID0gdHJ1ZTsKLSAgU3RhdHVzIHMgPSBUcnlSZW9wZW4oKTsKLSAgQVNT
RVJUX1RSVUUoIXMub2soKSk7Ci19Ci0KLVRFU1QoQ29ycnVwdGlvblRlc3QsIE5ld0ZpbGVFcnJv
ckR1cmluZ1dyaXRlKSB7Ci0gIC8vIERvIGVub3VnaCB3cml0aW5nIHRvIGZvcmNlIG1pbm9yIGNv
bXBhY3Rpb24KLSAgZW52Xy53cml0YWJsZV9maWxlX2Vycm9yXyA9IHRydWU7Ci0gIGNvbnN0IGlu
dCBudW0gPSAzICsgKE9wdGlvbnMoKS53cml0ZV9idWZmZXJfc2l6ZSAvIGtWYWx1ZVNpemUpOwot
ICBzdGQ6OnN0cmluZyB2YWx1ZV9zdG9yYWdlOwotICBTdGF0dXMgczsKLSAgZm9yIChpbnQgaSA9
IDA7IHMub2soKSAmJiBpIDwgbnVtOyBpKyspIHsKLSAgICBXcml0ZUJhdGNoIGJhdGNoOwotICAg
IGJhdGNoLlB1dCgiYSIsIFZhbHVlKDEwMCwgJnZhbHVlX3N0b3JhZ2UpKTsKLSAgICBzID0gZGJf
LT5Xcml0ZShXcml0ZU9wdGlvbnMoKSwgJmJhdGNoKTsKLSAgfQotICBBU1NFUlRfVFJVRSghcy5v
aygpKTsKLSAgQVNTRVJUX0dFKGVudl8ubnVtX3dyaXRhYmxlX2ZpbGVfZXJyb3JzXywgMSk7Ci0g
IGVudl8ud3JpdGFibGVfZmlsZV9lcnJvcl8gPSBmYWxzZTsKLSAgUmVvcGVuKCk7Ci19Ci0KLVRF
U1QoQ29ycnVwdGlvblRlc3QsIFRhYmxlRmlsZSkgewotICBCdWlsZCgxMDApOwotICBEQkltcGwq
IGRiaSA9IHJlaW50ZXJwcmV0X2Nhc3Q8REJJbXBsKj4oZGJfKTsKLSAgZGJpLT5URVNUX0NvbXBh
Y3RNZW1UYWJsZSgpOwotICBkYmktPlRFU1RfQ29tcGFjdFJhbmdlKDAsIE5VTEwsIE5VTEwpOwot
ICBkYmktPlRFU1RfQ29tcGFjdFJhbmdlKDEsIE5VTEwsIE5VTEwpOwotCi0gIENvcnJ1cHQoa1Rh
YmxlRmlsZSwgMTAwLCAxKTsKLSAgQ2hlY2soOTksIDk5KTsKLX0KLQotVEVTVChDb3JydXB0aW9u
VGVzdCwgVGFibGVGaWxlSW5kZXhEYXRhKSB7Ci0gIEJ1aWxkKDEwMDAwKTsgIC8vIEVub3VnaCB0
byBidWlsZCBtdWx0aXBsZSBUYWJsZXMKLSAgREJJbXBsKiBkYmkgPSByZWludGVycHJldF9jYXN0
PERCSW1wbCo+KGRiXyk7Ci0gIGRiaS0+VEVTVF9Db21wYWN0TWVtVGFibGUoKTsKLQotICBDb3Jy
dXB0KGtUYWJsZUZpbGUsIC0yMDAwLCA1MDApOwotICBSZW9wZW4oKTsKLSAgQ2hlY2soNTAwMCwg
OTk5OSk7Ci19Ci0KLVRFU1QoQ29ycnVwdGlvblRlc3QsIE1pc3NpbmdEZXNjcmlwdG9yKSB7Ci0g
IEJ1aWxkKDEwMDApOwotICBSZXBhaXJEQigpOwotICBSZW9wZW4oKTsKLSAgQ2hlY2soMTAwMCwg
MTAwMCk7Ci19Ci0KLVRFU1QoQ29ycnVwdGlvblRlc3QsIFNlcXVlbmNlTnVtYmVyUmVjb3Zlcnkp
IHsKLSAgQVNTRVJUX09LKGRiXy0+UHV0KFdyaXRlT3B0aW9ucygpLCAiZm9vIiwgInYxIikpOwot
ICBBU1NFUlRfT0soZGJfLT5QdXQoV3JpdGVPcHRpb25zKCksICJmb28iLCAidjIiKSk7Ci0gIEFT
U0VSVF9PSyhkYl8tPlB1dChXcml0ZU9wdGlvbnMoKSwgImZvbyIsICJ2MyIpKTsKLSAgQVNTRVJU
X09LKGRiXy0+UHV0KFdyaXRlT3B0aW9ucygpLCAiZm9vIiwgInY0IikpOwotICBBU1NFUlRfT0so
ZGJfLT5QdXQoV3JpdGVPcHRpb25zKCksICJmb28iLCAidjUiKSk7Ci0gIFJlcGFpckRCKCk7Ci0g
IFJlb3BlbigpOwotICBzdGQ6OnN0cmluZyB2OwotICBBU1NFUlRfT0soZGJfLT5HZXQoUmVhZE9w
dGlvbnMoKSwgImZvbyIsICZ2KSk7Ci0gIEFTU0VSVF9FUSgidjUiLCB2KTsKLSAgLy8gV3JpdGUg
c29tZXRoaW5nLiAgSWYgc2VxdWVuY2UgbnVtYmVyIHdhcyBub3QgcmVjb3ZlcmVkIHByb3Blcmx5
LAotICAvLyBpdCB3aWxsIGJlIGhpZGRlbiBieSBhbiBlYXJsaWVyIHdyaXRlLgotICBBU1NFUlRf
T0soZGJfLT5QdXQoV3JpdGVPcHRpb25zKCksICJmb28iLCAidjYiKSk7Ci0gIEFTU0VSVF9PSyhk
Yl8tPkdldChSZWFkT3B0aW9ucygpLCAiZm9vIiwgJnYpKTsKLSAgQVNTRVJUX0VRKCJ2NiIsIHYp
OwotICBSZW9wZW4oKTsKLSAgQVNTRVJUX09LKGRiXy0+R2V0KFJlYWRPcHRpb25zKCksICJmb28i
LCAmdikpOwotICBBU1NFUlRfRVEoInY2Iiwgdik7Ci19Ci0KLVRFU1QoQ29ycnVwdGlvblRlc3Qs
IENvcnJ1cHRlZERlc2NyaXB0b3IpIHsKLSAgQVNTRVJUX09LKGRiXy0+UHV0KFdyaXRlT3B0aW9u
cygpLCAiZm9vIiwgImhlbGxvIikpOwotICBEQkltcGwqIGRiaSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
REJJbXBsKj4oZGJfKTsKLSAgZGJpLT5URVNUX0NvbXBhY3RNZW1UYWJsZSgpOwotICBkYmktPlRF
U1RfQ29tcGFjdFJhbmdlKDAsIE5VTEwsIE5VTEwpOwotCi0gIENvcnJ1cHQoa0Rlc2NyaXB0b3JG
aWxlLCAwLCAxMDAwKTsKLSAgU3RhdHVzIHMgPSBUcnlSZW9wZW4oKTsKLSAgQVNTRVJUX1RSVUUo
IXMub2soKSk7Ci0KLSAgUmVwYWlyREIoKTsKLSAgUmVvcGVuKCk7Ci0gIHN0ZDo6c3RyaW5nIHY7
Ci0gIEFTU0VSVF9PSyhkYl8tPkdldChSZWFkT3B0aW9ucygpLCAiZm9vIiwgJnYpKTsKLSAgQVNT
RVJUX0VRKCJoZWxsbyIsIHYpOwotfQotCi1URVNUKENvcnJ1cHRpb25UZXN0LCBDb21wYWN0aW9u
SW5wdXRFcnJvcikgewotICBCdWlsZCgxMCk7Ci0gIERCSW1wbCogZGJpID0gcmVpbnRlcnByZXRf
Y2FzdDxEQkltcGwqPihkYl8pOwotICBkYmktPlRFU1RfQ29tcGFjdE1lbVRhYmxlKCk7Ci0gIGNv
bnN0IGludCBsYXN0ID0gY29uZmlnOjprTWF4TWVtQ29tcGFjdExldmVsOwotICBBU1NFUlRfRVEo
MSwgUHJvcGVydHkoImxldmVsZGIubnVtLWZpbGVzLWF0LWxldmVsIiArIE51bWJlclRvU3RyaW5n
KGxhc3QpKSk7Ci0KLSAgQ29ycnVwdChrVGFibGVGaWxlLCAxMDAsIDEpOwotICBDaGVjayg5LCA5
KTsKLQotICAvLyBGb3JjZSBjb21wYWN0aW9ucyBieSB3cml0aW5nIGxvdHMgb2YgdmFsdWVzCi0g
IEJ1aWxkKDEwMDAwKTsKLSAgQ2hlY2soMTAwMDAsIDEwMDAwKTsKLX0KLQotVEVTVChDb3JydXB0
aW9uVGVzdCwgQ29tcGFjdGlvbklucHV0RXJyb3JQYXJhbm9pZCkgewotICBPcHRpb25zIG9wdGlv
bnM7Ci0gIG9wdGlvbnMucGFyYW5vaWRfY2hlY2tzID0gdHJ1ZTsKLSAgb3B0aW9ucy53cml0ZV9i
dWZmZXJfc2l6ZSA9IDEwNDg1NzY7Ci0gIFJlb3Blbigmb3B0aW9ucyk7Ci0gIERCSW1wbCogZGJp
ID0gcmVpbnRlcnByZXRfY2FzdDxEQkltcGwqPihkYl8pOwotCi0gIC8vIEZpbGwgbGV2ZWxzID49
IDEgc28gbWVtdGFibGUgY29tcGFjdGlvbiBvdXRwdXRzIHRvIGxldmVsIDEKLSAgZm9yIChpbnQg
bGV2ZWwgPSAxOyBsZXZlbCA8IGNvbmZpZzo6a051bUxldmVsczsgbGV2ZWwrKykgewotICAgIGRi
aS0+UHV0KFdyaXRlT3B0aW9ucygpLCAiIiwgImJlZ2luIik7Ci0gICAgZGJpLT5QdXQoV3JpdGVP
cHRpb25zKCksICJ+IiwgImVuZCIpOwotICAgIGRiaS0+VEVTVF9Db21wYWN0TWVtVGFibGUoKTsK
LSAgfQotCi0gIEJ1aWxkKDEwKTsKLSAgZGJpLT5URVNUX0NvbXBhY3RNZW1UYWJsZSgpOwotICBB
U1NFUlRfRVEoMSwgUHJvcGVydHkoImxldmVsZGIubnVtLWZpbGVzLWF0LWxldmVsMCIpKTsKLQot
ICBDb3JydXB0KGtUYWJsZUZpbGUsIDEwMCwgMSk7Ci0gIENoZWNrKDksIDkpOwotCi0gIC8vIFdy
aXRlIG11c3QgZXZlbnR1YWxseSBmYWlsIGJlY2F1c2Ugb2YgY29ycnVwdGVkIHRhYmxlCi0gIFN0
YXR1cyBzOwotICBzdGQ6OnN0cmluZyB0bXAxLCB0bXAyOwotICBmb3IgKGludCBpID0gMDsgaSA8
IDEwMDAwICYmIHMub2soKTsgaSsrKSB7Ci0gICAgcyA9IGRiXy0+UHV0KFdyaXRlT3B0aW9ucygp
LCBLZXkoaSwgJnRtcDEpLCBWYWx1ZShpLCAmdG1wMikpOwotICB9Ci0gIEFTU0VSVF9UUlVFKCFz
Lm9rKCkpIDw8ICJ3cml0ZSBkaWQgbm90IGZhaWwgaW4gY29ycnVwdGVkIHBhcmFub2lkIGRiIjsK
LX0KLQotVEVTVChDb3JydXB0aW9uVGVzdCwgVW5yZWxhdGVkS2V5cykgewotICBCdWlsZCgxMCk7
Ci0gIERCSW1wbCogZGJpID0gcmVpbnRlcnByZXRfY2FzdDxEQkltcGwqPihkYl8pOwotICBkYmkt
PlRFU1RfQ29tcGFjdE1lbVRhYmxlKCk7Ci0gIENvcnJ1cHQoa1RhYmxlRmlsZSwgMTAwLCAxKTsK
LQotICBzdGQ6OnN0cmluZyB0bXAxLCB0bXAyOwotICBBU1NFUlRfT0soZGJfLT5QdXQoV3JpdGVP
cHRpb25zKCksIEtleSgxMDAwLCAmdG1wMSksIFZhbHVlKDEwMDAsICZ0bXAyKSkpOwotICBzdGQ6
OnN0cmluZyB2OwotICBBU1NFUlRfT0soZGJfLT5HZXQoUmVhZE9wdGlvbnMoKSwgS2V5KDEwMDAs
ICZ0bXAxKSwgJnYpKTsKLSAgQVNTRVJUX0VRKFZhbHVlKDEwMDAsICZ0bXAyKS5Ub1N0cmluZygp
LCB2KTsKLSAgZGJpLT5URVNUX0NvbXBhY3RNZW1UYWJsZSgpOwotICBBU1NFUlRfT0soZGJfLT5H
ZXQoUmVhZE9wdGlvbnMoKSwgS2V5KDEwMDAsICZ0bXAxKSwgJnYpKTsKLSAgQVNTRVJUX0VRKFZh
bHVlKDEwMDAsICZ0bXAyKS5Ub1N0cmluZygpLCB2KTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGxl
dmVsZGIKLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7Ci0gIHJldHVybiBsZXZl
bGRiOjp0ZXN0OjpSdW5BbGxUZXN0cygpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi9kYi9kYl9iZW5jaC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIv
ZGJfYmVuY2guY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhYmRmODcuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9kYl9iZW5jaC5jYworKysgL2Rl
di9udWxsCkBAIC0xLDk3OSArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVs
REIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBv
ZiBjb250cmlidXRvcnMuCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzdGRp
by5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgImRiL2RiX2ltcGwuaCIKLSNpbmNs
dWRlICJkYi92ZXJzaW9uX3NldC5oIgotI2luY2x1ZGUgImxldmVsZGIvY2FjaGUuaCIKLSNpbmNs
dWRlICJsZXZlbGRiL2RiLmgiCi0jaW5jbHVkZSAibGV2ZWxkYi9lbnYuaCIKLSNpbmNsdWRlICJs
ZXZlbGRiL3dyaXRlX2JhdGNoLmgiCi0jaW5jbHVkZSAicG9ydC9wb3J0LmgiCi0jaW5jbHVkZSAi
dXRpbC9jcmMzMmMuaCIKLSNpbmNsdWRlICJ1dGlsL2hpc3RvZ3JhbS5oIgotI2luY2x1ZGUgInV0
aWwvbXV0ZXhsb2NrLmgiCi0jaW5jbHVkZSAidXRpbC9yYW5kb20uaCIKLSNpbmNsdWRlICJ1dGls
L3Rlc3R1dGlsLmgiCi0KLS8vIENvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG9wZXJhdGlvbnMgdG8g
cnVuIGluIHRoZSBzcGVjaWZpZWQgb3JkZXIKLS8vICAgQWN0dWFsIGJlbmNobWFya3M6Ci0vLyAg
ICAgIGZpbGxzZXEgICAgICAgLS0gd3JpdGUgTiB2YWx1ZXMgaW4gc2VxdWVudGlhbCBrZXkgb3Jk
ZXIgaW4gYXN5bmMgbW9kZQotLy8gICAgICBmaWxscmFuZG9tICAgIC0tIHdyaXRlIE4gdmFsdWVz
IGluIHJhbmRvbSBrZXkgb3JkZXIgaW4gYXN5bmMgbW9kZQotLy8gICAgICBvdmVyd3JpdGUgICAg
IC0tIG92ZXJ3cml0ZSBOIHZhbHVlcyBpbiByYW5kb20ga2V5IG9yZGVyIGluIGFzeW5jIG1vZGUK
LS8vICAgICAgZmlsbHN5bmMgICAgICAtLSB3cml0ZSBOLzEwMCB2YWx1ZXMgaW4gcmFuZG9tIGtl
eSBvcmRlciBpbiBzeW5jIG1vZGUKLS8vICAgICAgZmlsbDEwMEsgICAgICAtLSB3cml0ZSBOLzEw
MDAgMTAwSyB2YWx1ZXMgaW4gcmFuZG9tIG9yZGVyIGluIGFzeW5jIG1vZGUKLS8vICAgICAgZGVs
ZXRlc2VxICAgICAtLSBkZWxldGUgTiBrZXlzIGluIHNlcXVlbnRpYWwgb3JkZXIKLS8vICAgICAg
ZGVsZXRlcmFuZG9tICAtLSBkZWxldGUgTiBrZXlzIGluIHJhbmRvbSBvcmRlcgotLy8gICAgICBy
ZWFkc2VxICAgICAgIC0tIHJlYWQgTiB0aW1lcyBzZXF1ZW50aWFsbHkKLS8vICAgICAgcmVhZHJl
dmVyc2UgICAtLSByZWFkIE4gdGltZXMgaW4gcmV2ZXJzZSBvcmRlcgotLy8gICAgICByZWFkcmFu
ZG9tICAgIC0tIHJlYWQgTiB0aW1lcyBpbiByYW5kb20gb3JkZXIKLS8vICAgICAgcmVhZG1pc3Np
bmcgICAtLSByZWFkIE4gbWlzc2luZyBrZXlzIGluIHJhbmRvbSBvcmRlcgotLy8gICAgICByZWFk
aG90ICAgICAgIC0tIHJlYWQgTiB0aW1lcyBpbiByYW5kb20gb3JkZXIgZnJvbSAxJSBzZWN0aW9u
IG9mIERCCi0vLyAgICAgIHNlZWtyYW5kb20gICAgLS0gTiByYW5kb20gc2Vla3MKLS8vICAgICAg
Y3JjMzJjICAgICAgICAtLSByZXBlYXRlZCBjcmMzMmMgb2YgNEsgb2YgZGF0YQotLy8gICAgICBh
Y3F1aXJlbG9hZCAgIC0tIGxvYWQgTioxMDAwIHRpbWVzCi0vLyAgIE1ldGEgb3BlcmF0aW9uczoK
LS8vICAgICAgY29tcGFjdCAgICAgLS0gQ29tcGFjdCB0aGUgZW50aXJlIERCCi0vLyAgICAgIHN0
YXRzICAgICAgIC0tIFByaW50IERCIHN0YXRzCi0vLyAgICAgIHNzdGFibGVzICAgIC0tIFByaW50
IHNzdGFibGUgaW5mbwotLy8gICAgICBoZWFwcHJvZmlsZSAtLSBEdW1wIGEgaGVhcCBwcm9maWxl
IChpZiBzdXBwb3J0ZWQgYnkgdGhpcyBwb3J0KQotc3RhdGljIGNvbnN0IGNoYXIqIEZMQUdTX2Jl
bmNobWFya3MgPQotICAgICJmaWxsc2VxLCIKLSAgICAiZmlsbHN5bmMsIgotICAgICJmaWxscmFu
ZG9tLCIKLSAgICAib3ZlcndyaXRlLCIKLSAgICAicmVhZHJhbmRvbSwiCi0gICAgInJlYWRyYW5k
b20sIiAgLy8gRXh0cmEgcnVuIHRvIGFsbG93IHByZXZpb3VzIGNvbXBhY3Rpb25zIHRvIHF1aWVz
Y2UKLSAgICAicmVhZHNlcSwiCi0gICAgInJlYWRyZXZlcnNlLCIKLSAgICAiY29tcGFjdCwiCi0g
ICAgInJlYWRyYW5kb20sIgotICAgICJyZWFkc2VxLCIKLSAgICAicmVhZHJldmVyc2UsIgotICAg
ICJmaWxsMTAwSywiCi0gICAgImNyYzMyYywiCi0gICAgInNuYXBweWNvbXAsIgotICAgICJzbmFw
cHl1bmNvbXAsIgotICAgICJhY3F1aXJlbG9hZCwiCi0gICAgOwotCi0vLyBOdW1iZXIgb2Yga2V5
L3ZhbHVlcyB0byBwbGFjZSBpbiBkYXRhYmFzZQotc3RhdGljIGludCBGTEFHU19udW0gPSAxMDAw
MDAwOwotCi0vLyBOdW1iZXIgb2YgcmVhZCBvcGVyYXRpb25zIHRvIGRvLiAgSWYgbmVnYXRpdmUs
IGRvIEZMQUdTX251bSByZWFkcy4KLXN0YXRpYyBpbnQgRkxBR1NfcmVhZHMgPSAtMTsKLQotLy8g
TnVtYmVyIG9mIGNvbmN1cnJlbnQgdGhyZWFkcyB0byBydW4uCi1zdGF0aWMgaW50IEZMQUdTX3Ro
cmVhZHMgPSAxOwotCi0vLyBTaXplIG9mIGVhY2ggdmFsdWUKLXN0YXRpYyBpbnQgRkxBR1NfdmFs
dWVfc2l6ZSA9IDEwMDsKLQotLy8gQXJyYW5nZSB0byBnZW5lcmF0ZSB2YWx1ZXMgdGhhdCBzaHJp
bmsgdG8gdGhpcyBmcmFjdGlvbiBvZgotLy8gdGhlaXIgb3JpZ2luYWwgc2l6ZSBhZnRlciBjb21w
cmVzc2lvbgotc3RhdGljIGRvdWJsZSBGTEFHU19jb21wcmVzc2lvbl9yYXRpbyA9IDAuNTsKLQot
Ly8gUHJpbnQgaGlzdG9ncmFtIG9mIG9wZXJhdGlvbiB0aW1pbmdzCi1zdGF0aWMgYm9vbCBGTEFH
U19oaXN0b2dyYW0gPSBmYWxzZTsKLQotLy8gTnVtYmVyIG9mIGJ5dGVzIHRvIGJ1ZmZlciBpbiBt
ZW10YWJsZSBiZWZvcmUgY29tcGFjdGluZwotLy8gKGluaXRpYWxpemVkIHRvIGRlZmF1bHQgdmFs
dWUgYnkgIm1haW4iKQotc3RhdGljIGludCBGTEFHU193cml0ZV9idWZmZXJfc2l6ZSA9IDA7Ci0K
LS8vIE51bWJlciBvZiBieXRlcyB0byB1c2UgYXMgYSBjYWNoZSBvZiB1bmNvbXByZXNzZWQgZGF0
YS4KLS8vIE5lZ2F0aXZlIG1lYW5zIHVzZSBkZWZhdWx0IHNldHRpbmdzLgotc3RhdGljIGludCBG
TEFHU19jYWNoZV9zaXplID0gLTE7Ci0KLS8vIE1heGltdW0gbnVtYmVyIG9mIGZpbGVzIHRvIGtl
ZXAgb3BlbiBhdCB0aGUgc2FtZSB0aW1lICh1c2UgZGVmYXVsdCBpZiA9PSAwKQotc3RhdGljIGlu
dCBGTEFHU19vcGVuX2ZpbGVzID0gMDsKLQotLy8gQmxvb20gZmlsdGVyIGJpdHMgcGVyIGtleS4K
LS8vIE5lZ2F0aXZlIG1lYW5zIHVzZSBkZWZhdWx0IHNldHRpbmdzLgotc3RhdGljIGludCBGTEFH
U19ibG9vbV9iaXRzID0gLTE7Ci0KLS8vIElmIHRydWUsIGRvIG5vdCBkZXN0cm95IHRoZSBleGlz
dGluZyBkYXRhYmFzZS4gIElmIHlvdSBzZXQgdGhpcwotLy8gZmxhZyBhbmQgYWxzbyBzcGVjaWZ5
IGEgYmVuY2htYXJrIHRoYXQgd2FudHMgYSBmcmVzaCBkYXRhYmFzZSwgdGhhdAotLy8gYmVuY2ht
YXJrIHdpbGwgZmFpbC4KLXN0YXRpYyBib29sIEZMQUdTX3VzZV9leGlzdGluZ19kYiA9IGZhbHNl
OwotCi0vLyBVc2UgdGhlIGRiIHdpdGggdGhlIGZvbGxvd2luZyBuYW1lLgotc3RhdGljIGNvbnN0
IGNoYXIqIEZMQUdTX2RiID0gTlVMTDsKLQotbmFtZXNwYWNlIGxldmVsZGIgewotCi1uYW1lc3Bh
Y2UgewotCi0vLyBIZWxwZXIgZm9yIHF1aWNrbHkgZ2VuZXJhdGluZyByYW5kb20gZGF0YS4KLWNs
YXNzIFJhbmRvbUdlbmVyYXRvciB7Ci0gcHJpdmF0ZToKLSAgc3RkOjpzdHJpbmcgZGF0YV87Ci0g
IGludCBwb3NfOwotCi0gcHVibGljOgotICBSYW5kb21HZW5lcmF0b3IoKSB7Ci0gICAgLy8gV2Ug
dXNlIGEgbGltaXRlZCBhbW91bnQgb2YgZGF0YSBvdmVyIGFuZCBvdmVyIGFnYWluIGFuZCBlbnN1
cmUKLSAgICAvLyB0aGF0IGl0IGlzIGxhcmdlciB0aGFuIHRoZSBjb21wcmVzc2lvbiB3aW5kb3cg
KDMyS0IpLCBhbmQgYWxzbwotICAgIC8vIGxhcmdlIGVub3VnaCB0byBzZXJ2ZSBhbGwgdHlwaWNh
bCB2YWx1ZSBzaXplcyB3ZSB3YW50IHRvIHdyaXRlLgotICAgIFJhbmRvbSBybmQoMzAxKTsKLSAg
ICBzdGQ6OnN0cmluZyBwaWVjZTsKLSAgICB3aGlsZSAoZGF0YV8uc2l6ZSgpIDwgMTA0ODU3Nikg
ewotICAgICAgLy8gQWRkIGEgc2hvcnQgZnJhZ21lbnQgdGhhdCBpcyBhcyBjb21wcmVzc2libGUg
YXMgc3BlY2lmaWVkCi0gICAgICAvLyBieSBGTEFHU19jb21wcmVzc2lvbl9yYXRpby4KLSAgICAg
IHRlc3Q6OkNvbXByZXNzaWJsZVN0cmluZygmcm5kLCBGTEFHU19jb21wcmVzc2lvbl9yYXRpbywg
MTAwLCAmcGllY2UpOwotICAgICAgZGF0YV8uYXBwZW5kKHBpZWNlKTsKLSAgICB9Ci0gICAgcG9z
XyA9IDA7Ci0gIH0KLQotICBTbGljZSBHZW5lcmF0ZShpbnQgbGVuKSB7Ci0gICAgaWYgKHBvc18g
KyBsZW4gPiBkYXRhXy5zaXplKCkpIHsKLSAgICAgIHBvc18gPSAwOwotICAgICAgYXNzZXJ0KGxl
biA8IGRhdGFfLnNpemUoKSk7Ci0gICAgfQotICAgIHBvc18gKz0gbGVuOwotICAgIHJldHVybiBT
bGljZShkYXRhXy5kYXRhKCkgKyBwb3NfIC0gbGVuLCBsZW4pOwotICB9Ci19OwotCi1zdGF0aWMg
U2xpY2UgVHJpbVNwYWNlKFNsaWNlIHMpIHsKLSAgaW50IHN0YXJ0ID0gMDsKLSAgd2hpbGUgKHN0
YXJ0IDwgcy5zaXplKCkgJiYgaXNzcGFjZShzW3N0YXJ0XSkpIHsKLSAgICBzdGFydCsrOwotICB9
Ci0gIGludCBsaW1pdCA9IHMuc2l6ZSgpOwotICB3aGlsZSAobGltaXQgPiBzdGFydCAmJiBpc3Nw
YWNlKHNbbGltaXQtMV0pKSB7Ci0gICAgbGltaXQtLTsKLSAgfQotICByZXR1cm4gU2xpY2Uocy5k
YXRhKCkgKyBzdGFydCwgbGltaXQgLSBzdGFydCk7Ci19Ci0KLXN0YXRpYyB2b2lkIEFwcGVuZFdp
dGhTcGFjZShzdGQ6OnN0cmluZyogc3RyLCBTbGljZSBtc2cpIHsKLSAgaWYgKG1zZy5lbXB0eSgp
KSByZXR1cm47Ci0gIGlmICghc3RyLT5lbXB0eSgpKSB7Ci0gICAgc3RyLT5wdXNoX2JhY2soJyAn
KTsKLSAgfQotICBzdHItPmFwcGVuZChtc2cuZGF0YSgpLCBtc2cuc2l6ZSgpKTsKLX0KLQotY2xh
c3MgU3RhdHMgewotIHByaXZhdGU6Ci0gIGRvdWJsZSBzdGFydF87Ci0gIGRvdWJsZSBmaW5pc2hf
OwotICBkb3VibGUgc2Vjb25kc187Ci0gIGludCBkb25lXzsKLSAgaW50IG5leHRfcmVwb3J0XzsK
LSAgaW50NjRfdCBieXRlc187Ci0gIGRvdWJsZSBsYXN0X29wX2ZpbmlzaF87Ci0gIEhpc3RvZ3Jh
bSBoaXN0XzsKLSAgc3RkOjpzdHJpbmcgbWVzc2FnZV87Ci0KLSBwdWJsaWM6Ci0gIFN0YXRzKCkg
eyBTdGFydCgpOyB9Ci0KLSAgdm9pZCBTdGFydCgpIHsKLSAgICBuZXh0X3JlcG9ydF8gPSAxMDA7
Ci0gICAgbGFzdF9vcF9maW5pc2hfID0gc3RhcnRfOwotICAgIGhpc3RfLkNsZWFyKCk7Ci0gICAg
ZG9uZV8gPSAwOwotICAgIGJ5dGVzXyA9IDA7Ci0gICAgc2Vjb25kc18gPSAwOwotICAgIHN0YXJ0
XyA9IEVudjo6RGVmYXVsdCgpLT5Ob3dNaWNyb3MoKTsKLSAgICBmaW5pc2hfID0gc3RhcnRfOwot
ICAgIG1lc3NhZ2VfLmNsZWFyKCk7Ci0gIH0KLQotICB2b2lkIE1lcmdlKGNvbnN0IFN0YXRzJiBv
dGhlcikgewotICAgIGhpc3RfLk1lcmdlKG90aGVyLmhpc3RfKTsKLSAgICBkb25lXyArPSBvdGhl
ci5kb25lXzsKLSAgICBieXRlc18gKz0gb3RoZXIuYnl0ZXNfOwotICAgIHNlY29uZHNfICs9IG90
aGVyLnNlY29uZHNfOwotICAgIGlmIChvdGhlci5zdGFydF8gPCBzdGFydF8pIHN0YXJ0XyA9IG90
aGVyLnN0YXJ0XzsKLSAgICBpZiAob3RoZXIuZmluaXNoXyA+IGZpbmlzaF8pIGZpbmlzaF8gPSBv
dGhlci5maW5pc2hfOwotCi0gICAgLy8gSnVzdCBrZWVwIHRoZSBtZXNzYWdlcyBmcm9tIG9uZSB0
aHJlYWQKLSAgICBpZiAobWVzc2FnZV8uZW1wdHkoKSkgbWVzc2FnZV8gPSBvdGhlci5tZXNzYWdl
XzsKLSAgfQotCi0gIHZvaWQgU3RvcCgpIHsKLSAgICBmaW5pc2hfID0gRW52OjpEZWZhdWx0KCkt
Pk5vd01pY3JvcygpOwotICAgIHNlY29uZHNfID0gKGZpbmlzaF8gLSBzdGFydF8pICogMWUtNjsK
LSAgfQotCi0gIHZvaWQgQWRkTWVzc2FnZShTbGljZSBtc2cpIHsKLSAgICBBcHBlbmRXaXRoU3Bh
Y2UoJm1lc3NhZ2VfLCBtc2cpOwotICB9Ci0KLSAgdm9pZCBGaW5pc2hlZFNpbmdsZU9wKCkgewot
ICAgIGlmIChGTEFHU19oaXN0b2dyYW0pIHsKLSAgICAgIGRvdWJsZSBub3cgPSBFbnY6OkRlZmF1
bHQoKS0+Tm93TWljcm9zKCk7Ci0gICAgICBkb3VibGUgbWljcm9zID0gbm93IC0gbGFzdF9vcF9m
aW5pc2hfOwotICAgICAgaGlzdF8uQWRkKG1pY3Jvcyk7Ci0gICAgICBpZiAobWljcm9zID4gMjAw
MDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJsb25nIG9wOiAlLjFmIG1pY3JvcyUzMHNc
ciIsIG1pY3JvcywgIiIpOwotICAgICAgICBmZmx1c2goc3RkZXJyKTsKLSAgICAgIH0KLSAgICAg
IGxhc3Rfb3BfZmluaXNoXyA9IG5vdzsKLSAgICB9Ci0KLSAgICBkb25lXysrOwotICAgIGlmIChk
b25lXyA+PSBuZXh0X3JlcG9ydF8pIHsKLSAgICAgIGlmICAgICAgKG5leHRfcmVwb3J0XyA8IDEw
MDApICAgbmV4dF9yZXBvcnRfICs9IDEwMDsKLSAgICAgIGVsc2UgaWYgKG5leHRfcmVwb3J0XyA8
IDUwMDApICAgbmV4dF9yZXBvcnRfICs9IDUwMDsKLSAgICAgIGVsc2UgaWYgKG5leHRfcmVwb3J0
XyA8IDEwMDAwKSAgbmV4dF9yZXBvcnRfICs9IDEwMDA7Ci0gICAgICBlbHNlIGlmIChuZXh0X3Jl
cG9ydF8gPCA1MDAwMCkgIG5leHRfcmVwb3J0XyArPSA1MDAwOwotICAgICAgZWxzZSBpZiAobmV4
dF9yZXBvcnRfIDwgMTAwMDAwKSBuZXh0X3JlcG9ydF8gKz0gMTAwMDA7Ci0gICAgICBlbHNlIGlm
IChuZXh0X3JlcG9ydF8gPCA1MDAwMDApIG5leHRfcmVwb3J0XyArPSA1MDAwMDsKLSAgICAgIGVs
c2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9yZXBvcnRfICs9IDEwMDAwMDsKLSAg
ICAgIGZwcmludGYoc3RkZXJyLCAiLi4uIGZpbmlzaGVkICVkIG9wcyUzMHNcciIsIGRvbmVfLCAi
Iik7Ci0gICAgICBmZmx1c2goc3RkZXJyKTsKLSAgICB9Ci0gIH0KLQotICB2b2lkIEFkZEJ5dGVz
KGludDY0X3QgbikgewotICAgIGJ5dGVzXyArPSBuOwotICB9Ci0KLSAgdm9pZCBSZXBvcnQoY29u
c3QgU2xpY2UmIG5hbWUpIHsKLSAgICAvLyBQcmV0ZW5kIGF0IGxlYXN0IG9uZSBvcCB3YXMgZG9u
ZSBpbiBjYXNlIHdlIGFyZSBydW5uaW5nIGEgYmVuY2htYXJrCi0gICAgLy8gdGhhdCBkb2VzIG5v
dCBjYWxsIEZpbmlzaGVkU2luZ2xlT3AoKS4KLSAgICBpZiAoZG9uZV8gPCAxKSBkb25lXyA9IDE7
Ci0KLSAgICBzdGQ6OnN0cmluZyBleHRyYTsKLSAgICBpZiAoYnl0ZXNfID4gMCkgewotICAgICAg
Ly8gUmF0ZSBpcyBjb21wdXRlZCBvbiBhY3R1YWwgZWxhcHNlZCB0aW1lLCBub3QgdGhlIHN1bSBv
ZiBwZXItdGhyZWFkCi0gICAgICAvLyBlbGFwc2VkIHRpbWVzLgotICAgICAgZG91YmxlIGVsYXBz
ZWQgPSAoZmluaXNoXyAtIHN0YXJ0XykgKiAxZS02OwotICAgICAgY2hhciByYXRlWzEwMF07Ci0g
ICAgICBzbnByaW50ZihyYXRlLCBzaXplb2YocmF0ZSksICIlNi4xZiBNQi9zIiwKLSAgICAgICAg
ICAgICAgIChieXRlc18gLyAxMDQ4NTc2LjApIC8gZWxhcHNlZCk7Ci0gICAgICBleHRyYSA9IHJh
dGU7Ci0gICAgfQotICAgIEFwcGVuZFdpdGhTcGFjZSgmZXh0cmEsIG1lc3NhZ2VfKTsKLQotICAg
IGZwcmludGYoc3Rkb3V0LCAiJS0xMnMgOiAlMTEuM2YgbWljcm9zL29wOyVzJXNcbiIsCi0gICAg
ICAgICAgICBuYW1lLlRvU3RyaW5nKCkuY19zdHIoKSwKLSAgICAgICAgICAgIHNlY29uZHNfICog
MWU2IC8gZG9uZV8sCi0gICAgICAgICAgICAoZXh0cmEuZW1wdHkoKSA/ICIiIDogIiAiKSwKLSAg
ICAgICAgICAgIGV4dHJhLmNfc3RyKCkpOwotICAgIGlmIChGTEFHU19oaXN0b2dyYW0pIHsKLSAg
ICAgIGZwcmludGYoc3Rkb3V0LCAiTWljcm9zZWNvbmRzIHBlciBvcDpcbiVzXG4iLCBoaXN0Xy5U
b1N0cmluZygpLmNfc3RyKCkpOwotICAgIH0KLSAgICBmZmx1c2goc3Rkb3V0KTsKLSAgfQotfTsK
LQotLy8gU3RhdGUgc2hhcmVkIGJ5IGFsbCBjb25jdXJyZW50IGV4ZWN1dGlvbnMgb2YgdGhlIHNh
bWUgYmVuY2htYXJrLgotc3RydWN0IFNoYXJlZFN0YXRlIHsKLSAgcG9ydDo6TXV0ZXggbXU7Ci0g
IHBvcnQ6OkNvbmRWYXIgY3Y7Ci0gIGludCB0b3RhbDsKLQotICAvLyBFYWNoIHRocmVhZCBnb2Vz
IHRocm91Z2ggdGhlIGZvbGxvd2luZyBzdGF0ZXM6Ci0gIC8vICAgICgxKSBpbml0aWFsaXppbmcK
LSAgLy8gICAgKDIpIHdhaXRpbmcgZm9yIG90aGVycyB0byBiZSBpbml0aWFsaXplZAotICAvLyAg
ICAoMykgcnVubmluZwotICAvLyAgICAoNCkgZG9uZQotCi0gIGludCBudW1faW5pdGlhbGl6ZWQ7
Ci0gIGludCBudW1fZG9uZTsKLSAgYm9vbCBzdGFydDsKLQotICBTaGFyZWRTdGF0ZSgpIDogY3Yo
Jm11KSB7IH0KLX07Ci0KLS8vIFBlci10aHJlYWQgc3RhdGUgZm9yIGNvbmN1cnJlbnQgZXhlY3V0
aW9ucyBvZiB0aGUgc2FtZSBiZW5jaG1hcmsuCi1zdHJ1Y3QgVGhyZWFkU3RhdGUgewotICBpbnQg
dGlkOyAgICAgICAgICAgICAvLyAwLi5uLTEgd2hlbiBydW5uaW5nIGluIG4gdGhyZWFkcwotICBS
YW5kb20gcmFuZDsgICAgICAgICAvLyBIYXMgZGlmZmVyZW50IHNlZWRzIGZvciBkaWZmZXJlbnQg
dGhyZWFkcwotICBTdGF0cyBzdGF0czsKLSAgU2hhcmVkU3RhdGUqIHNoYXJlZDsKLQotICBUaHJl
YWRTdGF0ZShpbnQgaW5kZXgpCi0gICAgICA6IHRpZChpbmRleCksCi0gICAgICAgIHJhbmQoMTAw
MCArIGluZGV4KSB7Ci0gIH0KLX07Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1jbGFzcyBCZW5jaG1h
cmsgewotIHByaXZhdGU6Ci0gIENhY2hlKiBjYWNoZV87Ci0gIGNvbnN0IEZpbHRlclBvbGljeSog
ZmlsdGVyX3BvbGljeV87Ci0gIERCKiBkYl87Ci0gIGludCBudW1fOwotICBpbnQgdmFsdWVfc2l6
ZV87Ci0gIGludCBlbnRyaWVzX3Blcl9iYXRjaF87Ci0gIFdyaXRlT3B0aW9ucyB3cml0ZV9vcHRp
b25zXzsKLSAgaW50IHJlYWRzXzsKLSAgaW50IGhlYXBfY291bnRlcl87Ci0KLSAgdm9pZCBQcmlu
dEhlYWRlcigpIHsKLSAgICBjb25zdCBpbnQga0tleVNpemUgPSAxNjsKLSAgICBQcmludEVudmly
b25tZW50KCk7Ci0gICAgZnByaW50ZihzdGRvdXQsICJLZXlzOiAgICAgICAlZCBieXRlcyBlYWNo
XG4iLCBrS2V5U2l6ZSk7Ci0gICAgZnByaW50ZihzdGRvdXQsICJWYWx1ZXM6ICAgICAlZCBieXRl
cyBlYWNoICglZCBieXRlcyBhZnRlciBjb21wcmVzc2lvbilcbiIsCi0gICAgICAgICAgICBGTEFH
U192YWx1ZV9zaXplLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihGTEFHU192YWx1ZV9z
aXplICogRkxBR1NfY29tcHJlc3Npb25fcmF0aW8gKyAwLjUpKTsKLSAgICBmcHJpbnRmKHN0ZG91
dCwgIkVudHJpZXM6ICAgICVkXG4iLCBudW1fKTsKLSAgICBmcHJpbnRmKHN0ZG91dCwgIlJhd1Np
emU6ICAgICUuMWYgTUIgKGVzdGltYXRlZClcbiIsCi0gICAgICAgICAgICAoKHN0YXRpY19jYXN0
PGludDY0X3Q+KGtLZXlTaXplICsgRkxBR1NfdmFsdWVfc2l6ZSkgKiBudW1fKQotICAgICAgICAg
ICAgIC8gMTA0ODU3Ni4wKSk7Ci0gICAgZnByaW50ZihzdGRvdXQsICJGaWxlU2l6ZTogICAlLjFm
IE1CIChlc3RpbWF0ZWQpXG4iLAotICAgICAgICAgICAgKCgoa0tleVNpemUgKyBGTEFHU192YWx1
ZV9zaXplICogRkxBR1NfY29tcHJlc3Npb25fcmF0aW8pICogbnVtXykKLSAgICAgICAgICAgICAv
IDEwNDg1NzYuMCkpOwotICAgIFByaW50V2FybmluZ3MoKTsKLSAgICBmcHJpbnRmKHN0ZG91dCwg
Ii0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0g
IH0KLQotICB2b2lkIFByaW50V2FybmluZ3MoKSB7Ci0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYg
IWRlZmluZWQoX19PUFRJTUlaRV9fKQotICAgIGZwcmludGYoc3Rkb3V0LAotICAgICAgICAgICAg
IldBUk5JTkc6IE9wdGltaXphdGlvbiBpcyBkaXNhYmxlZDogYmVuY2htYXJrcyB1bm5lY2Vzc2Fy
aWx5IHNsb3dcbiIKLSAgICAgICAgICAgICk7Ci0jZW5kaWYKLSNpZm5kZWYgTkRFQlVHCi0gICAg
ZnByaW50ZihzdGRvdXQsCi0gICAgICAgICAgICAiV0FSTklORzogQXNzZXJ0aW9ucyBhcmUgZW5h
YmxlZDsgYmVuY2htYXJrcyB1bm5lY2Vzc2FyaWx5IHNsb3dcbiIpOwotI2VuZGlmCi0KLSAgICAv
LyBTZWUgaWYgc25hcHB5IGlzIHdvcmtpbmcgYnkgYXR0ZW1wdGluZyB0byBjb21wcmVzcyBhIGNv
bXByZXNzaWJsZSBzdHJpbmcKLSAgICBjb25zdCBjaGFyIHRleHRbXSA9ICJ5eXl5eXl5eXl5eXl5
eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eSI7Ci0gICAgc3RkOjpzdHJpbmcgY29tcHJlc3Nl
ZDsKLSAgICBpZiAoIXBvcnQ6OlNuYXBweV9Db21wcmVzcyh0ZXh0LCBzaXplb2YodGV4dCksICZj
b21wcmVzc2VkKSkgewotICAgICAgZnByaW50ZihzdGRvdXQsICJXQVJOSU5HOiBTbmFwcHkgY29t
cHJlc3Npb24gaXMgbm90IGVuYWJsZWRcbiIpOwotICAgIH0gZWxzZSBpZiAoY29tcHJlc3NlZC5z
aXplKCkgPj0gc2l6ZW9mKHRleHQpKSB7Ci0gICAgICBmcHJpbnRmKHN0ZG91dCwgIldBUk5JTkc6
IFNuYXBweSBjb21wcmVzc2lvbiBpcyBub3QgZWZmZWN0aXZlXG4iKTsKLSAgICB9Ci0gIH0KLQot
ICB2b2lkIFByaW50RW52aXJvbm1lbnQoKSB7Ci0gICAgZnByaW50ZihzdGRlcnIsICJMZXZlbERC
OiAgICB2ZXJzaW9uICVkLiVkXG4iLAotICAgICAgICAgICAga01ham9yVmVyc2lvbiwga01pbm9y
VmVyc2lvbik7Ci0KLSNpZiBkZWZpbmVkKF9fbGludXgpCi0gICAgdGltZV90IG5vdyA9IHRpbWUo
TlVMTCk7Ci0gICAgZnByaW50ZihzdGRlcnIsICJEYXRlOiAgICAgICAlcyIsIGN0aW1lKCZub3cp
KTsgIC8vIGN0aW1lKCkgYWRkcyBuZXdsaW5lCi0KLSAgICBGSUxFKiBjcHVpbmZvID0gZm9wZW4o
Ii9wcm9jL2NwdWluZm8iLCAiciIpOwotICAgIGlmIChjcHVpbmZvICE9IE5VTEwpIHsKLSAgICAg
IGNoYXIgbGluZVsxMDAwXTsKLSAgICAgIGludCBudW1fY3B1cyA9IDA7Ci0gICAgICBzdGQ6OnN0
cmluZyBjcHVfdHlwZTsKLSAgICAgIHN0ZDo6c3RyaW5nIGNhY2hlX3NpemU7Ci0gICAgICB3aGls
ZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBjcHVpbmZvKSAhPSBOVUxMKSB7Ci0gICAgICAg
IGNvbnN0IGNoYXIqIHNlcCA9IHN0cmNocihsaW5lLCAnOicpOwotICAgICAgICBpZiAoc2VwID09
IE5VTEwpIHsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBTbGljZSBr
ZXkgPSBUcmltU3BhY2UoU2xpY2UobGluZSwgc2VwIC0gMSAtIGxpbmUpKTsKLSAgICAgICAgU2xp
Y2UgdmFsID0gVHJpbVNwYWNlKFNsaWNlKHNlcCArIDEpKTsKLSAgICAgICAgaWYgKGtleSA9PSAi
bW9kZWwgbmFtZSIpIHsKLSAgICAgICAgICArK251bV9jcHVzOwotICAgICAgICAgIGNwdV90eXBl
ID0gdmFsLlRvU3RyaW5nKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJjYWNoZSBzaXpl
IikgewotICAgICAgICAgIGNhY2hlX3NpemUgPSB2YWwuVG9TdHJpbmcoKTsKLSAgICAgICAgfQot
ICAgICAgfQotICAgICAgZmNsb3NlKGNwdWluZm8pOwotICAgICAgZnByaW50ZihzdGRlcnIsICJD
UFU6ICAgICAgICAlZCAqICVzXG4iLCBudW1fY3B1cywgY3B1X3R5cGUuY19zdHIoKSk7Ci0gICAg
ICBmcHJpbnRmKHN0ZGVyciwgIkNQVUNhY2hlOiAgICVzXG4iLCBjYWNoZV9zaXplLmNfc3RyKCkp
OwotICAgIH0KLSNlbmRpZgotICB9Ci0KLSBwdWJsaWM6Ci0gIEJlbmNobWFyaygpCi0gIDogY2Fj
aGVfKEZMQUdTX2NhY2hlX3NpemUgPj0gMCA/IE5ld0xSVUNhY2hlKEZMQUdTX2NhY2hlX3NpemUp
IDogTlVMTCksCi0gICAgZmlsdGVyX3BvbGljeV8oRkxBR1NfYmxvb21fYml0cyA+PSAwCi0gICAg
ICAgICAgICAgICAgICAgPyBOZXdCbG9vbUZpbHRlclBvbGljeShGTEFHU19ibG9vbV9iaXRzKQot
ICAgICAgICAgICAgICAgICAgIDogTlVMTCksCi0gICAgZGJfKE5VTEwpLAotICAgIG51bV8oRkxB
R1NfbnVtKSwKLSAgICB2YWx1ZV9zaXplXyhGTEFHU192YWx1ZV9zaXplKSwKLSAgICBlbnRyaWVz
X3Blcl9iYXRjaF8oMSksCi0gICAgcmVhZHNfKEZMQUdTX3JlYWRzIDwgMCA/IEZMQUdTX251bSA6
IEZMQUdTX3JlYWRzKSwKLSAgICBoZWFwX2NvdW50ZXJfKDApIHsKLSAgICBzdGQ6OnZlY3Rvcjxz
dGQ6OnN0cmluZz4gZmlsZXM7Ci0gICAgRW52OjpEZWZhdWx0KCktPkdldENoaWxkcmVuKEZMQUdT
X2RiLCAmZmlsZXMpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZXMuc2l6ZSgpOyBpKysp
IHsKLSAgICAgIGlmIChTbGljZShmaWxlc1tpXSkuc3RhcnRzX3dpdGgoImhlYXAtIikpIHsKLSAg
ICAgICAgRW52OjpEZWZhdWx0KCktPkRlbGV0ZUZpbGUoc3RkOjpzdHJpbmcoRkxBR1NfZGIpICsg
Ii8iICsgZmlsZXNbaV0pOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoIUZMQUdTX3VzZV9leGlz
dGluZ19kYikgewotICAgICAgRGVzdHJveURCKEZMQUdTX2RiLCBPcHRpb25zKCkpOwotICAgIH0K
LSAgfQotCi0gIH5CZW5jaG1hcmsoKSB7Ci0gICAgZGVsZXRlIGRiXzsKLSAgICBkZWxldGUgY2Fj
aGVfOwotICAgIGRlbGV0ZSBmaWx0ZXJfcG9saWN5XzsKLSAgfQotCi0gIHZvaWQgUnVuKCkgewot
ICAgIFByaW50SGVhZGVyKCk7Ci0gICAgT3BlbigpOwotCi0gICAgY29uc3QgY2hhciogYmVuY2ht
YXJrcyA9IEZMQUdTX2JlbmNobWFya3M7Ci0gICAgd2hpbGUgKGJlbmNobWFya3MgIT0gTlVMTCkg
ewotICAgICAgY29uc3QgY2hhciogc2VwID0gc3RyY2hyKGJlbmNobWFya3MsICcsJyk7Ci0gICAg
ICBTbGljZSBuYW1lOwotICAgICAgaWYgKHNlcCA9PSBOVUxMKSB7Ci0gICAgICAgIG5hbWUgPSBi
ZW5jaG1hcmtzOwotICAgICAgICBiZW5jaG1hcmtzID0gTlVMTDsKLSAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgIG5hbWUgPSBTbGljZShiZW5jaG1hcmtzLCBzZXAgLSBiZW5jaG1hcmtzKTsKLSAgICAg
ICAgYmVuY2htYXJrcyA9IHNlcCArIDE7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFJlc2V0IHBhcmFt
ZXRlcnMgdGhhdCBtYXkgYmUgb3ZlcnJpZGRkZW4gYndsb3cKLSAgICAgIG51bV8gPSBGTEFHU19u
dW07Ci0gICAgICByZWFkc18gPSAoRkxBR1NfcmVhZHMgPCAwID8gRkxBR1NfbnVtIDogRkxBR1Nf
cmVhZHMpOwotICAgICAgdmFsdWVfc2l6ZV8gPSBGTEFHU192YWx1ZV9zaXplOwotICAgICAgZW50
cmllc19wZXJfYmF0Y2hfID0gMTsKLSAgICAgIHdyaXRlX29wdGlvbnNfID0gV3JpdGVPcHRpb25z
KCk7Ci0KLSAgICAgIHZvaWQgKEJlbmNobWFyazo6Km1ldGhvZCkoVGhyZWFkU3RhdGUqKSA9IE5V
TEw7Ci0gICAgICBib29sIGZyZXNoX2RiID0gZmFsc2U7Ci0gICAgICBpbnQgbnVtX3RocmVhZHMg
PSBGTEFHU190aHJlYWRzOwotCi0gICAgICBpZiAobmFtZSA9PSBTbGljZSgiZmlsbHNlcSIpKSB7
Ci0gICAgICAgIGZyZXNoX2RiID0gdHJ1ZTsKLSAgICAgICAgbWV0aG9kID0gJkJlbmNobWFyazo6
V3JpdGVTZXE7Ci0gICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2UoImZpbGxiYXRjaCIpKSB7
Ci0gICAgICAgIGZyZXNoX2RiID0gdHJ1ZTsKLSAgICAgICAgZW50cmllc19wZXJfYmF0Y2hfID0g
MTAwMDsKLSAgICAgICAgbWV0aG9kID0gJkJlbmNobWFyazo6V3JpdGVTZXE7Ci0gICAgICB9IGVs
c2UgaWYgKG5hbWUgPT0gU2xpY2UoImZpbGxyYW5kb20iKSkgewotICAgICAgICBmcmVzaF9kYiA9
IHRydWU7Ci0gICAgICAgIG1ldGhvZCA9ICZCZW5jaG1hcms6OldyaXRlUmFuZG9tOwotICAgICAg
fSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJvdmVyd3JpdGUiKSkgewotICAgICAgICBmcmVzaF9k
YiA9IGZhbHNlOwotICAgICAgICBtZXRob2QgPSAmQmVuY2htYXJrOjpXcml0ZVJhbmRvbTsKLSAg
ICAgIH0gZWxzZSBpZiAobmFtZSA9PSBTbGljZSgiZmlsbHN5bmMiKSkgewotICAgICAgICBmcmVz
aF9kYiA9IHRydWU7Ci0gICAgICAgIG51bV8gLz0gMTAwMDsKLSAgICAgICAgd3JpdGVfb3B0aW9u
c18uc3luYyA9IHRydWU7Ci0gICAgICAgIG1ldGhvZCA9ICZCZW5jaG1hcms6OldyaXRlUmFuZG9t
OwotICAgICAgfSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJmaWxsMTAwSyIpKSB7Ci0gICAgICAg
IGZyZXNoX2RiID0gdHJ1ZTsKLSAgICAgICAgbnVtXyAvPSAxMDAwOwotICAgICAgICB2YWx1ZV9z
aXplXyA9IDEwMCAqIDEwMDA7Ci0gICAgICAgIG1ldGhvZCA9ICZCZW5jaG1hcms6OldyaXRlUmFu
ZG9tOwotICAgICAgfSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJyZWFkc2VxIikpIHsKLSAgICAg
ICAgbWV0aG9kID0gJkJlbmNobWFyazo6UmVhZFNlcXVlbnRpYWw7Ci0gICAgICB9IGVsc2UgaWYg
KG5hbWUgPT0gU2xpY2UoInJlYWRyZXZlcnNlIikpIHsKLSAgICAgICAgbWV0aG9kID0gJkJlbmNo
bWFyazo6UmVhZFJldmVyc2U7Ci0gICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2UoInJlYWRy
YW5kb20iKSkgewotICAgICAgICBtZXRob2QgPSAmQmVuY2htYXJrOjpSZWFkUmFuZG9tOwotICAg
ICAgfSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJyZWFkbWlzc2luZyIpKSB7Ci0gICAgICAgIG1l
dGhvZCA9ICZCZW5jaG1hcms6OlJlYWRNaXNzaW5nOwotICAgICAgfSBlbHNlIGlmIChuYW1lID09
IFNsaWNlKCJzZWVrcmFuZG9tIikpIHsKLSAgICAgICAgbWV0aG9kID0gJkJlbmNobWFyazo6U2Vl
a1JhbmRvbTsKLSAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBTbGljZSgicmVhZGhvdCIpKSB7Ci0g
ICAgICAgIG1ldGhvZCA9ICZCZW5jaG1hcms6OlJlYWRIb3Q7Ci0gICAgICB9IGVsc2UgaWYgKG5h
bWUgPT0gU2xpY2UoInJlYWRyYW5kb21zbWFsbCIpKSB7Ci0gICAgICAgIHJlYWRzXyAvPSAxMDAw
OwotICAgICAgICBtZXRob2QgPSAmQmVuY2htYXJrOjpSZWFkUmFuZG9tOwotICAgICAgfSBlbHNl
IGlmIChuYW1lID09IFNsaWNlKCJkZWxldGVzZXEiKSkgewotICAgICAgICBtZXRob2QgPSAmQmVu
Y2htYXJrOjpEZWxldGVTZXE7Ci0gICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2UoImRlbGV0
ZXJhbmRvbSIpKSB7Ci0gICAgICAgIG1ldGhvZCA9ICZCZW5jaG1hcms6OkRlbGV0ZVJhbmRvbTsK
LSAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBTbGljZSgicmVhZHdoaWxld3JpdGluZyIpKSB7Ci0g
ICAgICAgIG51bV90aHJlYWRzKys7ICAvLyBBZGQgZXh0cmEgdGhyZWFkIGZvciB3cml0aW5nCi0g
ICAgICAgIG1ldGhvZCA9ICZCZW5jaG1hcms6OlJlYWRXaGlsZVdyaXRpbmc7Ci0gICAgICB9IGVs
c2UgaWYgKG5hbWUgPT0gU2xpY2UoImNvbXBhY3QiKSkgewotICAgICAgICBtZXRob2QgPSAmQmVu
Y2htYXJrOjpDb21wYWN0OwotICAgICAgfSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJjcmMzMmMi
KSkgewotICAgICAgICBtZXRob2QgPSAmQmVuY2htYXJrOjpDcmMzMmM7Ci0gICAgICB9IGVsc2Ug
aWYgKG5hbWUgPT0gU2xpY2UoImFjcXVpcmVsb2FkIikpIHsKLSAgICAgICAgbWV0aG9kID0gJkJl
bmNobWFyazo6QWNxdWlyZUxvYWQ7Ci0gICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2UoInNu
YXBweWNvbXAiKSkgewotICAgICAgICBtZXRob2QgPSAmQmVuY2htYXJrOjpTbmFwcHlDb21wcmVz
czsKLSAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBTbGljZSgic25hcHB5dW5jb21wIikpIHsKLSAg
ICAgICAgbWV0aG9kID0gJkJlbmNobWFyazo6U25hcHB5VW5jb21wcmVzczsKLSAgICAgIH0gZWxz
ZSBpZiAobmFtZSA9PSBTbGljZSgiaGVhcHByb2ZpbGUiKSkgewotICAgICAgICBIZWFwUHJvZmls
ZSgpOwotICAgICAgfSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJzdGF0cyIpKSB7Ci0gICAgICAg
IFByaW50U3RhdHMoImxldmVsZGIuc3RhdHMiKTsKLSAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBT
bGljZSgic3N0YWJsZXMiKSkgewotICAgICAgICBQcmludFN0YXRzKCJsZXZlbGRiLnNzdGFibGVz
Iik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAobmFtZSAhPSBTbGljZSgpKSB7ICAvLyBO
byBlcnJvciBtZXNzYWdlIGZvciBlbXB0eSBuYW1lCi0gICAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJ1bmtub3duIGJlbmNobWFyayAnJXMnXG4iLCBuYW1lLlRvU3RyaW5nKCkuY19zdHIoKSk7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKGZyZXNoX2RiKSB7Ci0gICAgICAgIGlmIChG
TEFHU191c2VfZXhpc3RpbmdfZGIpIHsKLSAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIiUtMTJz
IDogc2tpcHBlZCAoLS11c2VfZXhpc3RpbmdfZGIgaXMgdHJ1ZSlcbiIsCi0gICAgICAgICAgICAg
ICAgICBuYW1lLlRvU3RyaW5nKCkuY19zdHIoKSk7Ci0gICAgICAgICAgbWV0aG9kID0gTlVMTDsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBkZWxldGUgZGJfOwotICAgICAgICAgIGRiXyA9
IE5VTEw7Ci0gICAgICAgICAgRGVzdHJveURCKEZMQUdTX2RiLCBPcHRpb25zKCkpOwotICAgICAg
ICAgIE9wZW4oKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAobWV0aG9kICE9IE5V
TEwpIHsKLSAgICAgICAgUnVuQmVuY2htYXJrKG51bV90aHJlYWRzLCBuYW1lLCBtZXRob2QpOwot
ICAgICAgfQotICAgIH0KLSAgfQotCi0gcHJpdmF0ZToKLSAgc3RydWN0IFRocmVhZEFyZyB7Ci0g
ICAgQmVuY2htYXJrKiBibTsKLSAgICBTaGFyZWRTdGF0ZSogc2hhcmVkOwotICAgIFRocmVhZFN0
YXRlKiB0aHJlYWQ7Ci0gICAgdm9pZCAoQmVuY2htYXJrOjoqbWV0aG9kKShUaHJlYWRTdGF0ZSop
OwotICB9OwotCi0gIHN0YXRpYyB2b2lkIFRocmVhZEJvZHkodm9pZCogdikgewotICAgIFRocmVh
ZEFyZyogYXJnID0gcmVpbnRlcnByZXRfY2FzdDxUaHJlYWRBcmcqPih2KTsKLSAgICBTaGFyZWRT
dGF0ZSogc2hhcmVkID0gYXJnLT5zaGFyZWQ7Ci0gICAgVGhyZWFkU3RhdGUqIHRocmVhZCA9IGFy
Zy0+dGhyZWFkOwotICAgIHsKLSAgICAgIE11dGV4TG9jayBsKCZzaGFyZWQtPm11KTsKLSAgICAg
IHNoYXJlZC0+bnVtX2luaXRpYWxpemVkKys7Ci0gICAgICBpZiAoc2hhcmVkLT5udW1faW5pdGlh
bGl6ZWQgPj0gc2hhcmVkLT50b3RhbCkgewotICAgICAgICBzaGFyZWQtPmN2LlNpZ25hbEFsbCgp
OwotICAgICAgfQotICAgICAgd2hpbGUgKCFzaGFyZWQtPnN0YXJ0KSB7Ci0gICAgICAgIHNoYXJl
ZC0+Y3YuV2FpdCgpOwotICAgICAgfQotICAgIH0KLQotICAgIHRocmVhZC0+c3RhdHMuU3RhcnQo
KTsKLSAgICAoYXJnLT5ibS0+KihhcmctPm1ldGhvZCkpKHRocmVhZCk7Ci0gICAgdGhyZWFkLT5z
dGF0cy5TdG9wKCk7Ci0KLSAgICB7Ci0gICAgICBNdXRleExvY2sgbCgmc2hhcmVkLT5tdSk7Ci0g
ICAgICBzaGFyZWQtPm51bV9kb25lKys7Ci0gICAgICBpZiAoc2hhcmVkLT5udW1fZG9uZSA+PSBz
aGFyZWQtPnRvdGFsKSB7Ci0gICAgICAgIHNoYXJlZC0+Y3YuU2lnbmFsQWxsKCk7Ci0gICAgICB9
Ci0gICAgfQotICB9Ci0KLSAgdm9pZCBSdW5CZW5jaG1hcmsoaW50IG4sIFNsaWNlIG5hbWUsCi0g
ICAgICAgICAgICAgICAgICAgIHZvaWQgKEJlbmNobWFyazo6Km1ldGhvZCkoVGhyZWFkU3RhdGUq
KSkgewotICAgIFNoYXJlZFN0YXRlIHNoYXJlZDsKLSAgICBzaGFyZWQudG90YWwgPSBuOwotICAg
IHNoYXJlZC5udW1faW5pdGlhbGl6ZWQgPSAwOwotICAgIHNoYXJlZC5udW1fZG9uZSA9IDA7Ci0g
ICAgc2hhcmVkLnN0YXJ0ID0gZmFsc2U7Ci0KLSAgICBUaHJlYWRBcmcqIGFyZyA9IG5ldyBUaHJl
YWRBcmdbbl07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgIGFyZ1tp
XS5ibSA9IHRoaXM7Ci0gICAgICBhcmdbaV0ubWV0aG9kID0gbWV0aG9kOwotICAgICAgYXJnW2ld
LnNoYXJlZCA9ICZzaGFyZWQ7Ci0gICAgICBhcmdbaV0udGhyZWFkID0gbmV3IFRocmVhZFN0YXRl
KGkpOwotICAgICAgYXJnW2ldLnRocmVhZC0+c2hhcmVkID0gJnNoYXJlZDsKLSAgICAgIEVudjo6
RGVmYXVsdCgpLT5TdGFydFRocmVhZChUaHJlYWRCb2R5LCAmYXJnW2ldKTsKLSAgICB9Ci0KLSAg
ICBzaGFyZWQubXUuTG9jaygpOwotICAgIHdoaWxlIChzaGFyZWQubnVtX2luaXRpYWxpemVkIDwg
bikgewotICAgICAgc2hhcmVkLmN2LldhaXQoKTsKLSAgICB9Ci0KLSAgICBzaGFyZWQuc3RhcnQg
PSB0cnVlOwotICAgIHNoYXJlZC5jdi5TaWduYWxBbGwoKTsKLSAgICB3aGlsZSAoc2hhcmVkLm51
bV9kb25lIDwgbikgewotICAgICAgc2hhcmVkLmN2LldhaXQoKTsKLSAgICB9Ci0gICAgc2hhcmVk
Lm11LlVubG9jaygpOwotCi0gICAgZm9yIChpbnQgaSA9IDE7IGkgPCBuOyBpKyspIHsKLSAgICAg
IGFyZ1swXS50aHJlYWQtPnN0YXRzLk1lcmdlKGFyZ1tpXS50aHJlYWQtPnN0YXRzKTsKLSAgICB9
Ci0gICAgYXJnWzBdLnRocmVhZC0+c3RhdHMuUmVwb3J0KG5hbWUpOwotCi0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgIGRlbGV0ZSBhcmdbaV0udGhyZWFkOwotICAgIH0K
LSAgICBkZWxldGVbXSBhcmc7Ci0gIH0KLQotICB2b2lkIENyYzMyYyhUaHJlYWRTdGF0ZSogdGhy
ZWFkKSB7Ci0gICAgLy8gQ2hlY2tzdW0gYWJvdXQgNTAwTUIgb2YgZGF0YSB0b3RhbAotICAgIGNv
bnN0IGludCBzaXplID0gNDA5NjsKLSAgICBjb25zdCBjaGFyKiBsYWJlbCA9ICIoNEsgcGVyIG9w
KSI7Ci0gICAgc3RkOjpzdHJpbmcgZGF0YShzaXplLCAneCcpOwotICAgIGludDY0X3QgYnl0ZXMg
PSAwOwotICAgIHVpbnQzMl90IGNyYyA9IDA7Ci0gICAgd2hpbGUgKGJ5dGVzIDwgNTAwICogMTA0
ODU3NikgewotICAgICAgY3JjID0gY3JjMzJjOjpWYWx1ZShkYXRhLmRhdGEoKSwgc2l6ZSk7Ci0g
ICAgICB0aHJlYWQtPnN0YXRzLkZpbmlzaGVkU2luZ2xlT3AoKTsKLSAgICAgIGJ5dGVzICs9IHNp
emU7Ci0gICAgfQotICAgIC8vIFByaW50IHNvIHJlc3VsdCBpcyBub3QgZGVhZAotICAgIGZwcmlu
dGYoc3RkZXJyLCAiLi4uIGNyYz0weCV4XHIiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGNy
YykpOwotCi0gICAgdGhyZWFkLT5zdGF0cy5BZGRCeXRlcyhieXRlcyk7Ci0gICAgdGhyZWFkLT5z
dGF0cy5BZGRNZXNzYWdlKGxhYmVsKTsKLSAgfQotCi0gIHZvaWQgQWNxdWlyZUxvYWQoVGhyZWFk
U3RhdGUqIHRocmVhZCkgewotICAgIGludCBkdW1teTsKLSAgICBwb3J0OjpBdG9taWNQb2ludGVy
IGFwKCZkdW1teSk7Ci0gICAgaW50IGNvdW50ID0gMDsKLSAgICB2b2lkICpwdHIgPSBOVUxMOwot
ICAgIHRocmVhZC0+c3RhdHMuQWRkTWVzc2FnZSgiKGVhY2ggb3AgaXMgMTAwMCBsb2FkcykiKTsK
LSAgICB3aGlsZSAoY291bnQgPCAxMDAwMDApIHsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
MTAwMDsgaSsrKSB7Ci0gICAgICAgIHB0ciA9IGFwLkFjcXVpcmVfTG9hZCgpOwotICAgICAgfQot
ICAgICAgY291bnQrKzsKLSAgICAgIHRocmVhZC0+c3RhdHMuRmluaXNoZWRTaW5nbGVPcCgpOwot
ICAgIH0KLSAgICBpZiAocHRyID09IE5VTEwpIGV4aXQoMSk7IC8vIERpc2FibGUgdW51c2VkIHZh
cmlhYmxlIHdhcm5pbmcuCi0gIH0KLQotICB2b2lkIFNuYXBweUNvbXByZXNzKFRocmVhZFN0YXRl
KiB0aHJlYWQpIHsKLSAgICBSYW5kb21HZW5lcmF0b3IgZ2VuOwotICAgIFNsaWNlIGlucHV0ID0g
Z2VuLkdlbmVyYXRlKE9wdGlvbnMoKS5ibG9ja19zaXplKTsKLSAgICBpbnQ2NF90IGJ5dGVzID0g
MDsKLSAgICBpbnQ2NF90IHByb2R1Y2VkID0gMDsKLSAgICBib29sIG9rID0gdHJ1ZTsKLSAgICBz
dGQ6OnN0cmluZyBjb21wcmVzc2VkOwotICAgIHdoaWxlIChvayAmJiBieXRlcyA8IDEwMjQgKiAx
MDQ4NTc2KSB7ICAvLyBDb21wcmVzcyAxRwotICAgICAgb2sgPSBwb3J0OjpTbmFwcHlfQ29tcHJl
c3MoaW5wdXQuZGF0YSgpLCBpbnB1dC5zaXplKCksICZjb21wcmVzc2VkKTsKLSAgICAgIHByb2R1
Y2VkICs9IGNvbXByZXNzZWQuc2l6ZSgpOwotICAgICAgYnl0ZXMgKz0gaW5wdXQuc2l6ZSgpOwot
ICAgICAgdGhyZWFkLT5zdGF0cy5GaW5pc2hlZFNpbmdsZU9wKCk7Ci0gICAgfQotCi0gICAgaWYg
KCFvaykgewotICAgICAgdGhyZWFkLT5zdGF0cy5BZGRNZXNzYWdlKCIoc25hcHB5IGZhaWx1cmUp
Iik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGNoYXIgYnVmWzEwMF07Ci0gICAgICBzbnByaW50Zihi
dWYsIHNpemVvZihidWYpLCAiKG91dHB1dDogJS4xZiUlKSIsCi0gICAgICAgICAgICAgICAocHJv
ZHVjZWQgKiAxMDAuMCkgLyBieXRlcyk7Ci0gICAgICB0aHJlYWQtPnN0YXRzLkFkZE1lc3NhZ2Uo
YnVmKTsKLSAgICAgIHRocmVhZC0+c3RhdHMuQWRkQnl0ZXMoYnl0ZXMpOwotICAgIH0KLSAgfQot
Ci0gIHZvaWQgU25hcHB5VW5jb21wcmVzcyhUaHJlYWRTdGF0ZSogdGhyZWFkKSB7Ci0gICAgUmFu
ZG9tR2VuZXJhdG9yIGdlbjsKLSAgICBTbGljZSBpbnB1dCA9IGdlbi5HZW5lcmF0ZShPcHRpb25z
KCkuYmxvY2tfc2l6ZSk7Ci0gICAgc3RkOjpzdHJpbmcgY29tcHJlc3NlZDsKLSAgICBib29sIG9r
ID0gcG9ydDo6U25hcHB5X0NvbXByZXNzKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCAmY29t
cHJlc3NlZCk7Ci0gICAgaW50NjRfdCBieXRlcyA9IDA7Ci0gICAgY2hhciogdW5jb21wcmVzc2Vk
ID0gbmV3IGNoYXJbaW5wdXQuc2l6ZSgpXTsKLSAgICB3aGlsZSAob2sgJiYgYnl0ZXMgPCAxMDI0
ICogMTA0ODU3NikgeyAgLy8gQ29tcHJlc3MgMUcKLSAgICAgIG9rID0gIHBvcnQ6OlNuYXBweV9V
bmNvbXByZXNzKGNvbXByZXNzZWQuZGF0YSgpLCBjb21wcmVzc2VkLnNpemUoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuY29tcHJlc3NlZCk7Ci0gICAgICBieXRlcyAr
PSBpbnB1dC5zaXplKCk7Ci0gICAgICB0aHJlYWQtPnN0YXRzLkZpbmlzaGVkU2luZ2xlT3AoKTsK
LSAgICB9Ci0gICAgZGVsZXRlW10gdW5jb21wcmVzc2VkOwotCi0gICAgaWYgKCFvaykgewotICAg
ICAgdGhyZWFkLT5zdGF0cy5BZGRNZXNzYWdlKCIoc25hcHB5IGZhaWx1cmUpIik7Ci0gICAgfSBl
bHNlIHsKLSAgICAgIHRocmVhZC0+c3RhdHMuQWRkQnl0ZXMoYnl0ZXMpOwotICAgIH0KLSAgfQot
Ci0gIHZvaWQgT3BlbigpIHsKLSAgICBhc3NlcnQoZGJfID09IE5VTEwpOwotICAgIE9wdGlvbnMg
b3B0aW9uczsKLSAgICBvcHRpb25zLmNyZWF0ZV9pZl9taXNzaW5nID0gIUZMQUdTX3VzZV9leGlz
dGluZ19kYjsKLSAgICBvcHRpb25zLmJsb2NrX2NhY2hlID0gY2FjaGVfOwotICAgIG9wdGlvbnMu
d3JpdGVfYnVmZmVyX3NpemUgPSBGTEFHU193cml0ZV9idWZmZXJfc2l6ZTsKLSAgICBvcHRpb25z
Lm1heF9vcGVuX2ZpbGVzID0gRkxBR1Nfb3Blbl9maWxlczsKLSAgICBvcHRpb25zLmZpbHRlcl9w
b2xpY3kgPSBmaWx0ZXJfcG9saWN5XzsKLSAgICBTdGF0dXMgcyA9IERCOjpPcGVuKG9wdGlvbnMs
IEZMQUdTX2RiLCAmZGJfKTsKLSAgICBpZiAoIXMub2soKSkgewotICAgICAgZnByaW50ZihzdGRl
cnIsICJvcGVuIGVycm9yOiAlc1xuIiwgcy5Ub1N0cmluZygpLmNfc3RyKCkpOwotICAgICAgZXhp
dCgxKTsKLSAgICB9Ci0gIH0KLQotICB2b2lkIFdyaXRlU2VxKFRocmVhZFN0YXRlKiB0aHJlYWQp
IHsKLSAgICBEb1dyaXRlKHRocmVhZCwgdHJ1ZSk7Ci0gIH0KLQotICB2b2lkIFdyaXRlUmFuZG9t
KFRocmVhZFN0YXRlKiB0aHJlYWQpIHsKLSAgICBEb1dyaXRlKHRocmVhZCwgZmFsc2UpOwotICB9
Ci0KLSAgdm9pZCBEb1dyaXRlKFRocmVhZFN0YXRlKiB0aHJlYWQsIGJvb2wgc2VxKSB7Ci0gICAg
aWYgKG51bV8gIT0gRkxBR1NfbnVtKSB7Ci0gICAgICBjaGFyIG1zZ1sxMDBdOwotICAgICAgc25w
cmludGYobXNnLCBzaXplb2YobXNnKSwgIiglZCBvcHMpIiwgbnVtXyk7Ci0gICAgICB0aHJlYWQt
PnN0YXRzLkFkZE1lc3NhZ2UobXNnKTsKLSAgICB9Ci0KLSAgICBSYW5kb21HZW5lcmF0b3IgZ2Vu
OwotICAgIFdyaXRlQmF0Y2ggYmF0Y2g7Ci0gICAgU3RhdHVzIHM7Ci0gICAgaW50NjRfdCBieXRl
cyA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fOyBpICs9IGVudHJpZXNfcGVyX2Jh
dGNoXykgewotICAgICAgYmF0Y2guQ2xlYXIoKTsKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwg
ZW50cmllc19wZXJfYmF0Y2hfOyBqKyspIHsKLSAgICAgICAgY29uc3QgaW50IGsgPSBzZXEgPyBp
K2ogOiAodGhyZWFkLT5yYW5kLk5leHQoKSAlIEZMQUdTX251bSk7Ci0gICAgICAgIGNoYXIga2V5
WzEwMF07Ci0gICAgICAgIHNucHJpbnRmKGtleSwgc2l6ZW9mKGtleSksICIlMDE2ZCIsIGspOwot
ICAgICAgICBiYXRjaC5QdXQoa2V5LCBnZW4uR2VuZXJhdGUodmFsdWVfc2l6ZV8pKTsKLSAgICAg
ICAgYnl0ZXMgKz0gdmFsdWVfc2l6ZV8gKyBzdHJsZW4oa2V5KTsKLSAgICAgICAgdGhyZWFkLT5z
dGF0cy5GaW5pc2hlZFNpbmdsZU9wKCk7Ci0gICAgICB9Ci0gICAgICBzID0gZGJfLT5Xcml0ZSh3
cml0ZV9vcHRpb25zXywgJmJhdGNoKTsKLSAgICAgIGlmICghcy5vaygpKSB7Ci0gICAgICAgIGZw
cmludGYoc3RkZXJyLCAicHV0IGVycm9yOiAlc1xuIiwgcy5Ub1N0cmluZygpLmNfc3RyKCkpOwot
ICAgICAgICBleGl0KDEpOwotICAgICAgfQotICAgIH0KLSAgICB0aHJlYWQtPnN0YXRzLkFkZEJ5
dGVzKGJ5dGVzKTsKLSAgfQotCi0gIHZvaWQgUmVhZFNlcXVlbnRpYWwoVGhyZWFkU3RhdGUqIHRo
cmVhZCkgewotICAgIEl0ZXJhdG9yKiBpdGVyID0gZGJfLT5OZXdJdGVyYXRvcihSZWFkT3B0aW9u
cygpKTsKLSAgICBpbnQgaSA9IDA7Ci0gICAgaW50NjRfdCBieXRlcyA9IDA7Ci0gICAgZm9yIChp
dGVyLT5TZWVrVG9GaXJzdCgpOyBpIDwgcmVhZHNfICYmIGl0ZXItPlZhbGlkKCk7IGl0ZXItPk5l
eHQoKSkgewotICAgICAgYnl0ZXMgKz0gaXRlci0+a2V5KCkuc2l6ZSgpICsgaXRlci0+dmFsdWUo
KS5zaXplKCk7Ci0gICAgICB0aHJlYWQtPnN0YXRzLkZpbmlzaGVkU2luZ2xlT3AoKTsKLSAgICAg
ICsraTsKLSAgICB9Ci0gICAgZGVsZXRlIGl0ZXI7Ci0gICAgdGhyZWFkLT5zdGF0cy5BZGRCeXRl
cyhieXRlcyk7Ci0gIH0KLQotICB2b2lkIFJlYWRSZXZlcnNlKFRocmVhZFN0YXRlKiB0aHJlYWQp
IHsKLSAgICBJdGVyYXRvciogaXRlciA9IGRiXy0+TmV3SXRlcmF0b3IoUmVhZE9wdGlvbnMoKSk7
Ci0gICAgaW50IGkgPSAwOwotICAgIGludDY0X3QgYnl0ZXMgPSAwOwotICAgIGZvciAoaXRlci0+
U2Vla1RvTGFzdCgpOyBpIDwgcmVhZHNfICYmIGl0ZXItPlZhbGlkKCk7IGl0ZXItPlByZXYoKSkg
ewotICAgICAgYnl0ZXMgKz0gaXRlci0+a2V5KCkuc2l6ZSgpICsgaXRlci0+dmFsdWUoKS5zaXpl
KCk7Ci0gICAgICB0aHJlYWQtPnN0YXRzLkZpbmlzaGVkU2luZ2xlT3AoKTsKLSAgICAgICsraTsK
LSAgICB9Ci0gICAgZGVsZXRlIGl0ZXI7Ci0gICAgdGhyZWFkLT5zdGF0cy5BZGRCeXRlcyhieXRl
cyk7Ci0gIH0KLQotICB2b2lkIFJlYWRSYW5kb20oVGhyZWFkU3RhdGUqIHRocmVhZCkgewotICAg
IFJlYWRPcHRpb25zIG9wdGlvbnM7Ci0gICAgc3RkOjpzdHJpbmcgdmFsdWU7Ci0gICAgaW50IGZv
dW5kID0gMDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlYWRzXzsgaSsrKSB7Ci0gICAgICBj
aGFyIGtleVsxMDBdOwotICAgICAgY29uc3QgaW50IGsgPSB0aHJlYWQtPnJhbmQuTmV4dCgpICUg
RkxBR1NfbnVtOwotICAgICAgc25wcmludGYoa2V5LCBzaXplb2Yoa2V5KSwgIiUwMTZkIiwgayk7
Ci0gICAgICBpZiAoZGJfLT5HZXQob3B0aW9ucywga2V5LCAmdmFsdWUpLm9rKCkpIHsKLSAgICAg
ICAgZm91bmQrKzsKLSAgICAgIH0KLSAgICAgIHRocmVhZC0+c3RhdHMuRmluaXNoZWRTaW5nbGVP
cCgpOwotICAgIH0KLSAgICBjaGFyIG1zZ1sxMDBdOwotICAgIHNucHJpbnRmKG1zZywgc2l6ZW9m
KG1zZyksICIoJWQgb2YgJWQgZm91bmQpIiwgZm91bmQsIG51bV8pOwotICAgIHRocmVhZC0+c3Rh
dHMuQWRkTWVzc2FnZShtc2cpOwotICB9Ci0KLSAgdm9pZCBSZWFkTWlzc2luZyhUaHJlYWRTdGF0
ZSogdGhyZWFkKSB7Ci0gICAgUmVhZE9wdGlvbnMgb3B0aW9uczsKLSAgICBzdGQ6OnN0cmluZyB2
YWx1ZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlYWRzXzsgaSsrKSB7Ci0gICAgICBjaGFy
IGtleVsxMDBdOwotICAgICAgY29uc3QgaW50IGsgPSB0aHJlYWQtPnJhbmQuTmV4dCgpICUgRkxB
R1NfbnVtOwotICAgICAgc25wcmludGYoa2V5LCBzaXplb2Yoa2V5KSwgIiUwMTZkLiIsIGspOwot
ICAgICAgZGJfLT5HZXQob3B0aW9ucywga2V5LCAmdmFsdWUpOwotICAgICAgdGhyZWFkLT5zdGF0
cy5GaW5pc2hlZFNpbmdsZU9wKCk7Ci0gICAgfQotICB9Ci0KLSAgdm9pZCBSZWFkSG90KFRocmVh
ZFN0YXRlKiB0aHJlYWQpIHsKLSAgICBSZWFkT3B0aW9ucyBvcHRpb25zOwotICAgIHN0ZDo6c3Ry
aW5nIHZhbHVlOwotICAgIGNvbnN0IGludCByYW5nZSA9IChGTEFHU19udW0gKyA5OSkgLyAxMDA7
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWFkc187IGkrKykgewotICAgICAgY2hhciBrZXlb
MTAwXTsKLSAgICAgIGNvbnN0IGludCBrID0gdGhyZWFkLT5yYW5kLk5leHQoKSAlIHJhbmdlOwot
ICAgICAgc25wcmludGYoa2V5LCBzaXplb2Yoa2V5KSwgIiUwMTZkIiwgayk7Ci0gICAgICBkYl8t
PkdldChvcHRpb25zLCBrZXksICZ2YWx1ZSk7Ci0gICAgICB0aHJlYWQtPnN0YXRzLkZpbmlzaGVk
U2luZ2xlT3AoKTsKLSAgICB9Ci0gIH0KLQotICB2b2lkIFNlZWtSYW5kb20oVGhyZWFkU3RhdGUq
IHRocmVhZCkgewotICAgIFJlYWRPcHRpb25zIG9wdGlvbnM7Ci0gICAgc3RkOjpzdHJpbmcgdmFs
dWU7Ci0gICAgaW50IGZvdW5kID0gMDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlYWRzXzsg
aSsrKSB7Ci0gICAgICBJdGVyYXRvciogaXRlciA9IGRiXy0+TmV3SXRlcmF0b3Iob3B0aW9ucyk7
Ci0gICAgICBjaGFyIGtleVsxMDBdOwotICAgICAgY29uc3QgaW50IGsgPSB0aHJlYWQtPnJhbmQu
TmV4dCgpICUgRkxBR1NfbnVtOwotICAgICAgc25wcmludGYoa2V5LCBzaXplb2Yoa2V5KSwgIiUw
MTZkIiwgayk7Ci0gICAgICBpdGVyLT5TZWVrKGtleSk7Ci0gICAgICBpZiAoaXRlci0+VmFsaWQo
KSAmJiBpdGVyLT5rZXkoKSA9PSBrZXkpIGZvdW5kKys7Ci0gICAgICBkZWxldGUgaXRlcjsKLSAg
ICAgIHRocmVhZC0+c3RhdHMuRmluaXNoZWRTaW5nbGVPcCgpOwotICAgIH0KLSAgICBjaGFyIG1z
Z1sxMDBdOwotICAgIHNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICIoJWQgb2YgJWQgZm91bmQp
IiwgZm91bmQsIG51bV8pOwotICAgIHRocmVhZC0+c3RhdHMuQWRkTWVzc2FnZShtc2cpOwotICB9
Ci0KLSAgdm9pZCBEb0RlbGV0ZShUaHJlYWRTdGF0ZSogdGhyZWFkLCBib29sIHNlcSkgewotICAg
IFJhbmRvbUdlbmVyYXRvciBnZW47Ci0gICAgV3JpdGVCYXRjaCBiYXRjaDsKLSAgICBTdGF0dXMg
czsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bV87IGkgKz0gZW50cmllc19wZXJfYmF0Y2hf
KSB7Ci0gICAgICBiYXRjaC5DbGVhcigpOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBlbnRy
aWVzX3Blcl9iYXRjaF87IGorKykgewotICAgICAgICBjb25zdCBpbnQgayA9IHNlcSA/IGkraiA6
ICh0aHJlYWQtPnJhbmQuTmV4dCgpICUgRkxBR1NfbnVtKTsKLSAgICAgICAgY2hhciBrZXlbMTAw
XTsKLSAgICAgICAgc25wcmludGYoa2V5LCBzaXplb2Yoa2V5KSwgIiUwMTZkIiwgayk7Ci0gICAg
ICAgIGJhdGNoLkRlbGV0ZShrZXkpOwotICAgICAgICB0aHJlYWQtPnN0YXRzLkZpbmlzaGVkU2lu
Z2xlT3AoKTsKLSAgICAgIH0KLSAgICAgIHMgPSBkYl8tPldyaXRlKHdyaXRlX29wdGlvbnNfLCAm
YmF0Y2gpOwotICAgICAgaWYgKCFzLm9rKCkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJk
ZWwgZXJyb3I6ICVzXG4iLCBzLlRvU3RyaW5nKCkuY19zdHIoKSk7Ci0gICAgICAgIGV4aXQoMSk7
Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgdm9pZCBEZWxldGVTZXEoVGhyZWFkU3RhdGUqIHRo
cmVhZCkgewotICAgIERvRGVsZXRlKHRocmVhZCwgdHJ1ZSk7Ci0gIH0KLQotICB2b2lkIERlbGV0
ZVJhbmRvbShUaHJlYWRTdGF0ZSogdGhyZWFkKSB7Ci0gICAgRG9EZWxldGUodGhyZWFkLCBmYWxz
ZSk7Ci0gIH0KLQotICB2b2lkIFJlYWRXaGlsZVdyaXRpbmcoVGhyZWFkU3RhdGUqIHRocmVhZCkg
ewotICAgIGlmICh0aHJlYWQtPnRpZCA+IDApIHsKLSAgICAgIFJlYWRSYW5kb20odGhyZWFkKTsK
LSAgICB9IGVsc2UgewotICAgICAgLy8gU3BlY2lhbCB0aHJlYWQgdGhhdCBrZWVwcyB3cml0aW5n
IHVudGlsIG90aGVyIHRocmVhZHMgYXJlIGRvbmUuCi0gICAgICBSYW5kb21HZW5lcmF0b3IgZ2Vu
OwotICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgewotICAgICAgICAgIE11dGV4TG9jayBs
KCZ0aHJlYWQtPnNoYXJlZC0+bXUpOwotICAgICAgICAgIGlmICh0aHJlYWQtPnNoYXJlZC0+bnVt
X2RvbmUgKyAxID49IHRocmVhZC0+c2hhcmVkLT5udW1faW5pdGlhbGl6ZWQpIHsKLSAgICAgICAg
ICAgIC8vIE90aGVyIHRocmVhZHMgaGF2ZSBmaW5pc2hlZAotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgaW50IGsgPSB0aHJlYWQtPnJh
bmQuTmV4dCgpICUgRkxBR1NfbnVtOwotICAgICAgICBjaGFyIGtleVsxMDBdOwotICAgICAgICBz
bnByaW50ZihrZXksIHNpemVvZihrZXkpLCAiJTAxNmQiLCBrKTsKLSAgICAgICAgU3RhdHVzIHMg
PSBkYl8tPlB1dCh3cml0ZV9vcHRpb25zXywga2V5LCBnZW4uR2VuZXJhdGUodmFsdWVfc2l6ZV8p
KTsKLSAgICAgICAgaWYgKCFzLm9rKCkpIHsKLSAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInB1
dCBlcnJvcjogJXNcbiIsIHMuVG9TdHJpbmcoKS5jX3N0cigpKTsKLSAgICAgICAgICBleGl0KDEp
OwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIERvIG5vdCBjb3VudCBhbnkgb2YgdGhl
IHByZWNlZGluZyB3b3JrL2RlbGF5IGluIHN0YXRzLgotICAgICAgdGhyZWFkLT5zdGF0cy5TdGFy
dCgpOwotICAgIH0KLSAgfQotCi0gIHZvaWQgQ29tcGFjdChUaHJlYWRTdGF0ZSogdGhyZWFkKSB7
Ci0gICAgZGJfLT5Db21wYWN0UmFuZ2UoTlVMTCwgTlVMTCk7Ci0gIH0KLQotICB2b2lkIFByaW50
U3RhdHMoY29uc3QgY2hhcioga2V5KSB7Ci0gICAgc3RkOjpzdHJpbmcgc3RhdHM7Ci0gICAgaWYg
KCFkYl8tPkdldFByb3BlcnR5KGtleSwgJnN0YXRzKSkgewotICAgICAgc3RhdHMgPSAiKGZhaWxl
ZCkiOwotICAgIH0KLSAgICBmcHJpbnRmKHN0ZG91dCwgIlxuJXNcbiIsIHN0YXRzLmNfc3RyKCkp
OwotICB9Ci0KLSAgc3RhdGljIHZvaWQgV3JpdGVUb0ZpbGUodm9pZCogYXJnLCBjb25zdCBjaGFy
KiBidWYsIGludCBuKSB7Ci0gICAgcmVpbnRlcnByZXRfY2FzdDxXcml0YWJsZUZpbGUqPihhcmcp
LT5BcHBlbmQoU2xpY2UoYnVmLCBuKSk7Ci0gIH0KLQotICB2b2lkIEhlYXBQcm9maWxlKCkgewot
ICAgIGNoYXIgZm5hbWVbMTAwXTsKLSAgICBzbnByaW50ZihmbmFtZSwgc2l6ZW9mKGZuYW1lKSwg
IiVzL2hlYXAtJTA0ZCIsIEZMQUdTX2RiLCArK2hlYXBfY291bnRlcl8pOwotICAgIFdyaXRhYmxl
RmlsZSogZmlsZTsKLSAgICBTdGF0dXMgcyA9IEVudjo6RGVmYXVsdCgpLT5OZXdXcml0YWJsZUZp
bGUoZm5hbWUsICZmaWxlKTsKLSAgICBpZiAoIXMub2soKSkgewotICAgICAgZnByaW50ZihzdGRl
cnIsICIlc1xuIiwgcy5Ub1N0cmluZygpLmNfc3RyKCkpOwotICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBib29sIG9rID0gcG9ydDo6R2V0SGVhcFByb2ZpbGUoV3JpdGVUb0ZpbGUsIGZpbGUpOwot
ICAgIGRlbGV0ZSBmaWxlOwotICAgIGlmICghb2spIHsKLSAgICAgIGZwcmludGYoc3RkZXJyLCAi
aGVhcCBwcm9maWxpbmcgbm90IHN1cHBvcnRlZFxuIik7Ci0gICAgICBFbnY6OkRlZmF1bHQoKS0+
RGVsZXRlRmlsZShmbmFtZSk7Ci0gICAgfQotICB9Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbGV2
ZWxkYgotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKLSAgRkxBR1Nfd3JpdGVf
YnVmZmVyX3NpemUgPSBsZXZlbGRiOjpPcHRpb25zKCkud3JpdGVfYnVmZmVyX3NpemU7Ci0gIEZM
QUdTX29wZW5fZmlsZXMgPSBsZXZlbGRiOjpPcHRpb25zKCkubWF4X29wZW5fZmlsZXM7Ci0gIHN0
ZDo6c3RyaW5nIGRlZmF1bHRfZGJfcGF0aDsKLQotICBmb3IgKGludCBpID0gMTsgaSA8IGFyZ2M7
IGkrKykgewotICAgIGRvdWJsZSBkOwotICAgIGludCBuOwotICAgIGNoYXIganVuazsKLSAgICBp
ZiAobGV2ZWxkYjo6U2xpY2UoYXJndltpXSkuc3RhcnRzX3dpdGgoIi0tYmVuY2htYXJrcz0iKSkg
ewotICAgICAgRkxBR1NfYmVuY2htYXJrcyA9IGFyZ3ZbaV0gKyBzdHJsZW4oIi0tYmVuY2htYXJr
cz0iKTsKLSAgICB9IGVsc2UgaWYgKHNzY2FuZihhcmd2W2ldLCAiLS1jb21wcmVzc2lvbl9yYXRp
bz0lbGYlYyIsICZkLCAmanVuaykgPT0gMSkgewotICAgICAgRkxBR1NfY29tcHJlc3Npb25fcmF0
aW8gPSBkOwotICAgIH0gZWxzZSBpZiAoc3NjYW5mKGFyZ3ZbaV0sICItLWhpc3RvZ3JhbT0lZCVj
IiwgJm4sICZqdW5rKSA9PSAxICYmCi0gICAgICAgICAgICAgICAobiA9PSAwIHx8IG4gPT0gMSkp
IHsKLSAgICAgIEZMQUdTX2hpc3RvZ3JhbSA9IG47Ci0gICAgfSBlbHNlIGlmIChzc2NhbmYoYXJn
dltpXSwgIi0tdXNlX2V4aXN0aW5nX2RiPSVkJWMiLCAmbiwgJmp1bmspID09IDEgJiYKLSAgICAg
ICAgICAgICAgIChuID09IDAgfHwgbiA9PSAxKSkgewotICAgICAgRkxBR1NfdXNlX2V4aXN0aW5n
X2RiID0gbjsKLSAgICB9IGVsc2UgaWYgKHNzY2FuZihhcmd2W2ldLCAiLS1udW09JWQlYyIsICZu
LCAmanVuaykgPT0gMSkgewotICAgICAgRkxBR1NfbnVtID0gbjsKLSAgICB9IGVsc2UgaWYgKHNz
Y2FuZihhcmd2W2ldLCAiLS1yZWFkcz0lZCVjIiwgJm4sICZqdW5rKSA9PSAxKSB7Ci0gICAgICBG
TEFHU19yZWFkcyA9IG47Ci0gICAgfSBlbHNlIGlmIChzc2NhbmYoYXJndltpXSwgIi0tdGhyZWFk
cz0lZCVjIiwgJm4sICZqdW5rKSA9PSAxKSB7Ci0gICAgICBGTEFHU190aHJlYWRzID0gbjsKLSAg
ICB9IGVsc2UgaWYgKHNzY2FuZihhcmd2W2ldLCAiLS12YWx1ZV9zaXplPSVkJWMiLCAmbiwgJmp1
bmspID09IDEpIHsKLSAgICAgIEZMQUdTX3ZhbHVlX3NpemUgPSBuOwotICAgIH0gZWxzZSBpZiAo
c3NjYW5mKGFyZ3ZbaV0sICItLXdyaXRlX2J1ZmZlcl9zaXplPSVkJWMiLCAmbiwgJmp1bmspID09
IDEpIHsKLSAgICAgIEZMQUdTX3dyaXRlX2J1ZmZlcl9zaXplID0gbjsKLSAgICB9IGVsc2UgaWYg
KHNzY2FuZihhcmd2W2ldLCAiLS1jYWNoZV9zaXplPSVkJWMiLCAmbiwgJmp1bmspID09IDEpIHsK
LSAgICAgIEZMQUdTX2NhY2hlX3NpemUgPSBuOwotICAgIH0gZWxzZSBpZiAoc3NjYW5mKGFyZ3Zb
aV0sICItLWJsb29tX2JpdHM9JWQlYyIsICZuLCAmanVuaykgPT0gMSkgewotICAgICAgRkxBR1Nf
Ymxvb21fYml0cyA9IG47Ci0gICAgfSBlbHNlIGlmIChzc2NhbmYoYXJndltpXSwgIi0tb3Blbl9m
aWxlcz0lZCVjIiwgJm4sICZqdW5rKSA9PSAxKSB7Ci0gICAgICBGTEFHU19vcGVuX2ZpbGVzID0g
bjsKLSAgICB9IGVsc2UgaWYgKHN0cm5jbXAoYXJndltpXSwgIi0tZGI9IiwgNSkgPT0gMCkgewot
ICAgICAgRkxBR1NfZGIgPSBhcmd2W2ldICsgNTsKLSAgICB9IGVsc2UgewotICAgICAgZnByaW50
ZihzdGRlcnIsICJJbnZhbGlkIGZsYWcgJyVzJ1xuIiwgYXJndltpXSk7Ci0gICAgICBleGl0KDEp
OwotICAgIH0KLSAgfQotCi0gIC8vIENob29zZSBhIGxvY2F0aW9uIGZvciB0aGUgdGVzdCBkYXRh
YmFzZSBpZiBub25lIGdpdmVuIHdpdGggLS1kYj08cGF0aD4KLSAgaWYgKEZMQUdTX2RiID09IE5V
TEwpIHsKLSAgICAgIGxldmVsZGI6OkVudjo6RGVmYXVsdCgpLT5HZXRUZXN0RGlyZWN0b3J5KCZk
ZWZhdWx0X2RiX3BhdGgpOwotICAgICAgZGVmYXVsdF9kYl9wYXRoICs9ICIvZGJiZW5jaCI7Ci0g
ICAgICBGTEFHU19kYiA9IGRlZmF1bHRfZGJfcGF0aC5jX3N0cigpOwotICB9Ci0KLSAgbGV2ZWxk
Yjo6QmVuY2htYXJrIGJlbmNobWFyazsKLSAgYmVuY2htYXJrLlJ1bigpOwotICByZXR1cm4gMDsK
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZGJfaW1wbC5jYyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZGJfaW1wbC5jYwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYzlkZTE2OS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
ZXZlbGRiL2RiL2RiX2ltcGwuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxNDY3ICswLDAgQEAKLS8v
IENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2Vl
IHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KLQotI2luY2x1ZGUg
ImRiL2RiX2ltcGwuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxzZXQ+Ci0j
aW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+
Ci0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgImRiL2J1aWxkZXIuaCIKLSNpbmNsdWRlICJk
Yi9kYl9pdGVyLmgiCi0jaW5jbHVkZSAiZGIvZGJmb3JtYXQuaCIKLSNpbmNsdWRlICJkYi9maWxl
bmFtZS5oIgotI2luY2x1ZGUgImRiL2xvZ19yZWFkZXIuaCIKLSNpbmNsdWRlICJkYi9sb2dfd3Jp
dGVyLmgiCi0jaW5jbHVkZSAiZGIvbWVtdGFibGUuaCIKLSNpbmNsdWRlICJkYi90YWJsZV9jYWNo
ZS5oIgotI2luY2x1ZGUgImRiL3ZlcnNpb25fc2V0LmgiCi0jaW5jbHVkZSAiZGIvd3JpdGVfYmF0
Y2hfaW50ZXJuYWwuaCIKLSNpbmNsdWRlICJsZXZlbGRiL2RiLmgiCi0jaW5jbHVkZSAibGV2ZWxk
Yi9lbnYuaCIKLSNpbmNsdWRlICJsZXZlbGRiL3N0YXR1cy5oIgotI2luY2x1ZGUgImxldmVsZGIv
dGFibGUuaCIKLSNpbmNsdWRlICJsZXZlbGRiL3RhYmxlX2J1aWxkZXIuaCIKLSNpbmNsdWRlICJw
b3J0L3BvcnQuaCIKLSNpbmNsdWRlICJ0YWJsZS9ibG9jay5oIgotI2luY2x1ZGUgInRhYmxlL21l
cmdlci5oIgotI2luY2x1ZGUgInRhYmxlL3R3b19sZXZlbF9pdGVyYXRvci5oIgotI2luY2x1ZGUg
InV0aWwvY29kaW5nLmgiCi0jaW5jbHVkZSAidXRpbC9sb2dnaW5nLmgiCi0jaW5jbHVkZSAidXRp
bC9tdXRleGxvY2suaCIKLQotbmFtZXNwYWNlIGxldmVsZGIgewotCi0vLyBJbmZvcm1hdGlvbiBr
ZXB0IGZvciBldmVyeSB3YWl0aW5nIHdyaXRlcgotc3RydWN0IERCSW1wbDo6V3JpdGVyIHsKLSAg
U3RhdHVzIHN0YXR1czsKLSAgV3JpdGVCYXRjaCogYmF0Y2g7Ci0gIGJvb2wgc3luYzsKLSAgYm9v
bCBkb25lOwotICBwb3J0OjpDb25kVmFyIGN2OwotCi0gIGV4cGxpY2l0IFdyaXRlcihwb3J0OjpN
dXRleCogbXUpIDogY3YobXUpIHsgfQotfTsKLQotc3RydWN0IERCSW1wbDo6Q29tcGFjdGlvblN0
YXRlIHsKLSAgQ29tcGFjdGlvbiogY29uc3QgY29tcGFjdGlvbjsKLQotICAvLyBTZXF1ZW5jZSBu
dW1iZXJzIDwgc21hbGxlc3Rfc25hcHNob3QgYXJlIG5vdCBzaWduaWZpY2FudCBzaW5jZSB3ZQot
ICAvLyB3aWxsIG5ldmVyIGhhdmUgdG8gc2VydmljZSBhIHNuYXBzaG90IGJlbG93IHNtYWxsZXN0
X3NuYXBzaG90LgotICAvLyBUaGVyZWZvcmUgaWYgd2UgaGF2ZSBzZWVuIGEgc2VxdWVuY2UgbnVt
YmVyIFMgPD0gc21hbGxlc3Rfc25hcHNob3QsCi0gIC8vIHdlIGNhbiBkcm9wIGFsbCBlbnRyaWVz
IGZvciB0aGUgc2FtZSBrZXkgd2l0aCBzZXF1ZW5jZSBudW1iZXJzIDwgUy4KLSAgU2VxdWVuY2VO
dW1iZXIgc21hbGxlc3Rfc25hcHNob3Q7Ci0KLSAgLy8gRmlsZXMgcHJvZHVjZWQgYnkgY29tcGFj
dGlvbgotICBzdHJ1Y3QgT3V0cHV0IHsKLSAgICB1aW50NjRfdCBudW1iZXI7Ci0gICAgdWludDY0
X3QgZmlsZV9zaXplOwotICAgIEludGVybmFsS2V5IHNtYWxsZXN0LCBsYXJnZXN0OwotICB9Owot
ICBzdGQ6OnZlY3RvcjxPdXRwdXQ+IG91dHB1dHM7Ci0KLSAgLy8gU3RhdGUga2VwdCBmb3Igb3V0
cHV0IGJlaW5nIGdlbmVyYXRlZAotICBXcml0YWJsZUZpbGUqIG91dGZpbGU7Ci0gIFRhYmxlQnVp
bGRlciogYnVpbGRlcjsKLQotICB1aW50NjRfdCB0b3RhbF9ieXRlczsKLQotICBPdXRwdXQqIGN1
cnJlbnRfb3V0cHV0KCkgeyByZXR1cm4gJm91dHB1dHNbb3V0cHV0cy5zaXplKCktMV07IH0KLQot
ICBleHBsaWNpdCBDb21wYWN0aW9uU3RhdGUoQ29tcGFjdGlvbiogYykKLSAgICAgIDogY29tcGFj
dGlvbihjKSwKLSAgICAgICAgb3V0ZmlsZShOVUxMKSwKLSAgICAgICAgYnVpbGRlcihOVUxMKSwK
LSAgICAgICAgdG90YWxfYnl0ZXMoMCkgewotICB9Ci19OwotCi0vLyBGaXggdXNlci1zdXBwbGll
ZCBvcHRpb25zIHRvIGJlIHJlYXNvbmFibGUKLXRlbXBsYXRlIDxjbGFzcyBULGNsYXNzIFY+Ci1z
dGF0aWMgdm9pZCBDbGlwVG9SYW5nZShUKiBwdHIsIFYgbWludmFsdWUsIFYgbWF4dmFsdWUpIHsK
LSAgaWYgKHN0YXRpY19jYXN0PFY+KCpwdHIpID4gbWF4dmFsdWUpICpwdHIgPSBtYXh2YWx1ZTsK
LSAgaWYgKHN0YXRpY19jYXN0PFY+KCpwdHIpIDwgbWludmFsdWUpICpwdHIgPSBtaW52YWx1ZTsK
LX0KLU9wdGlvbnMgU2FuaXRpemVPcHRpb25zKGNvbnN0IHN0ZDo6c3RyaW5nJiBkYm5hbWUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRlcm5hbEtleUNvbXBhcmF0b3IqIGljbXAs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRlcm5hbEZpbHRlclBvbGljeSogaXBv
bGljeSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMmIHNyYykgewotICBP
cHRpb25zIHJlc3VsdCA9IHNyYzsKLSAgcmVzdWx0LmNvbXBhcmF0b3IgPSBpY21wOwotICByZXN1
bHQuZmlsdGVyX3BvbGljeSA9IChzcmMuZmlsdGVyX3BvbGljeSAhPSBOVUxMKSA/IGlwb2xpY3kg
OiBOVUxMOwotICBDbGlwVG9SYW5nZSgmcmVzdWx0Lm1heF9vcGVuX2ZpbGVzLCAgICAgICAgICAg
IDIwLCAgICAgNTAwMDApOwotICBDbGlwVG9SYW5nZSgmcmVzdWx0LndyaXRlX2J1ZmZlcl9zaXpl
LCAgICAgICAgIDY0PDwxMCwgMTw8MzApOwotICBDbGlwVG9SYW5nZSgmcmVzdWx0LmJsb2NrX3Np
emUsICAgICAgICAgICAgICAgIDE8PDEwLCAgNDw8MjApOwotICBpZiAocmVzdWx0LmluZm9fbG9n
ID09IE5VTEwpIHsKLSAgICAvLyBPcGVuIGEgbG9nIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5
IGFzIHRoZSBkYgotICAgIHNyYy5lbnYtPkNyZWF0ZURpcihkYm5hbWUpOyAgLy8gSW4gY2FzZSBp
dCBkb2VzIG5vdCBleGlzdAotICAgIHNyYy5lbnYtPlJlbmFtZUZpbGUoSW5mb0xvZ0ZpbGVOYW1l
KGRibmFtZSksIE9sZEluZm9Mb2dGaWxlTmFtZShkYm5hbWUpKTsKLSAgICBTdGF0dXMgcyA9IHNy
Yy5lbnYtPk5ld0xvZ2dlcihJbmZvTG9nRmlsZU5hbWUoZGJuYW1lKSwgJnJlc3VsdC5pbmZvX2xv
Zyk7Ci0gICAgaWYgKCFzLm9rKCkpIHsKLSAgICAgIC8vIE5vIHBsYWNlIHN1aXRhYmxlIGZvciBs
b2dnaW5nCi0gICAgICByZXN1bHQuaW5mb19sb2cgPSBOVUxMOwotICAgIH0KLSAgfQotICBpZiAo
cmVzdWx0LmJsb2NrX2NhY2hlID09IE5VTEwpIHsKLSAgICByZXN1bHQuYmxvY2tfY2FjaGUgPSBO
ZXdMUlVDYWNoZSg4IDw8IDIwKTsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi1EQkltcGw6
OkRCSW1wbChjb25zdCBPcHRpb25zJiBvcHRpb25zLCBjb25zdCBzdGQ6OnN0cmluZyYgZGJuYW1l
KQotICAgIDogZW52XyhvcHRpb25zLmVudiksCi0gICAgICBpbnRlcm5hbF9jb21wYXJhdG9yXyhv
cHRpb25zLmNvbXBhcmF0b3IpLAotICAgICAgaW50ZXJuYWxfZmlsdGVyX3BvbGljeV8ob3B0aW9u
cy5maWx0ZXJfcG9saWN5KSwKLSAgICAgIG9wdGlvbnNfKFNhbml0aXplT3B0aW9ucygKLSAgICAg
ICAgICBkYm5hbWUsICZpbnRlcm5hbF9jb21wYXJhdG9yXywgJmludGVybmFsX2ZpbHRlcl9wb2xp
Y3lfLCBvcHRpb25zKSksCi0gICAgICBvd25zX2luZm9fbG9nXyhvcHRpb25zXy5pbmZvX2xvZyAh
PSBvcHRpb25zLmluZm9fbG9nKSwKLSAgICAgIG93bnNfY2FjaGVfKG9wdGlvbnNfLmJsb2NrX2Nh
Y2hlICE9IG9wdGlvbnMuYmxvY2tfY2FjaGUpLAotICAgICAgZGJuYW1lXyhkYm5hbWUpLAotICAg
ICAgZGJfbG9ja18oTlVMTCksCi0gICAgICBzaHV0dGluZ19kb3duXyhOVUxMKSwKLSAgICAgIGJn
X2N2XygmbXV0ZXhfKSwKLSAgICAgIG1lbV8obmV3IE1lbVRhYmxlKGludGVybmFsX2NvbXBhcmF0
b3JfKSksCi0gICAgICBpbW1fKE5VTEwpLAotICAgICAgbG9nZmlsZV8oTlVMTCksCi0gICAgICBs
b2dmaWxlX251bWJlcl8oMCksCi0gICAgICBsb2dfKE5VTEwpLAotICAgICAgdG1wX2JhdGNoXyhu
ZXcgV3JpdGVCYXRjaCksCi0gICAgICBiZ19jb21wYWN0aW9uX3NjaGVkdWxlZF8oZmFsc2UpLAot
ICAgICAgbWFudWFsX2NvbXBhY3Rpb25fKE5VTEwpIHsKLSAgbWVtXy0+UmVmKCk7Ci0gIGhhc19p
bW1fLlJlbGVhc2VfU3RvcmUoTlVMTCk7Ci0KLSAgLy8gUmVzZXJ2ZSB0ZW4gZmlsZXMgb3Igc28g
Zm9yIG90aGVyIHVzZXMgYW5kIGdpdmUgdGhlIHJlc3QgdG8gVGFibGVDYWNoZS4KLSAgY29uc3Qg
aW50IHRhYmxlX2NhY2hlX3NpemUgPSBvcHRpb25zLm1heF9vcGVuX2ZpbGVzIC0gMTA7Ci0gIHRh
YmxlX2NhY2hlXyA9IG5ldyBUYWJsZUNhY2hlKGRibmFtZV8sICZvcHRpb25zXywgdGFibGVfY2Fj
aGVfc2l6ZSk7Ci0KLSAgdmVyc2lvbnNfID0gbmV3IFZlcnNpb25TZXQoZGJuYW1lXywgJm9wdGlv
bnNfLCB0YWJsZV9jYWNoZV8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnRlcm5h
bF9jb21wYXJhdG9yXyk7Ci19Ci0KLURCSW1wbDo6fkRCSW1wbCgpIHsKLSAgLy8gV2FpdCBmb3Ig
YmFja2dyb3VuZCB3b3JrIHRvIGZpbmlzaAotICBtdXRleF8uTG9jaygpOwotICBzaHV0dGluZ19k
b3duXy5SZWxlYXNlX1N0b3JlKHRoaXMpOyAgLy8gQW55IG5vbi1OVUxMIHZhbHVlIGlzIG9rCi0g
IHdoaWxlIChiZ19jb21wYWN0aW9uX3NjaGVkdWxlZF8pIHsKLSAgICBiZ19jdl8uV2FpdCgpOwot
ICB9Ci0gIG11dGV4Xy5VbmxvY2soKTsKLQotICBpZiAoZGJfbG9ja18gIT0gTlVMTCkgewotICAg
IGVudl8tPlVubG9ja0ZpbGUoZGJfbG9ja18pOwotICB9Ci0KLSAgZGVsZXRlIHZlcnNpb25zXzsK
LSAgaWYgKG1lbV8gIT0gTlVMTCkgbWVtXy0+VW5yZWYoKTsKLSAgaWYgKGltbV8gIT0gTlVMTCkg
aW1tXy0+VW5yZWYoKTsKLSAgZGVsZXRlIHRtcF9iYXRjaF87Ci0gIGRlbGV0ZSBsb2dfOwotICBk
ZWxldGUgbG9nZmlsZV87Ci0gIGRlbGV0ZSB0YWJsZV9jYWNoZV87Ci0KLSAgaWYgKG93bnNfaW5m
b19sb2dfKSB7Ci0gICAgZGVsZXRlIG9wdGlvbnNfLmluZm9fbG9nOwotICB9Ci0gIGlmIChvd25z
X2NhY2hlXykgewotICAgIGRlbGV0ZSBvcHRpb25zXy5ibG9ja19jYWNoZTsKLSAgfQotfQotCi1T
dGF0dXMgREJJbXBsOjpOZXdEQigpIHsKLSAgVmVyc2lvbkVkaXQgbmV3X2RiOwotICBuZXdfZGIu
U2V0Q29tcGFyYXRvck5hbWUodXNlcl9jb21wYXJhdG9yKCktPk5hbWUoKSk7Ci0gIG5ld19kYi5T
ZXRMb2dOdW1iZXIoMCk7Ci0gIG5ld19kYi5TZXROZXh0RmlsZSgyKTsKLSAgbmV3X2RiLlNldExh
c3RTZXF1ZW5jZSgwKTsKLQotICBjb25zdCBzdGQ6OnN0cmluZyBtYW5pZmVzdCA9IERlc2NyaXB0
b3JGaWxlTmFtZShkYm5hbWVfLCAxKTsKLSAgV3JpdGFibGVGaWxlKiBmaWxlOwotICBTdGF0dXMg
cyA9IGVudl8tPk5ld1dyaXRhYmxlRmlsZShtYW5pZmVzdCwgJmZpbGUpOwotICBpZiAoIXMub2so
KSkgewotICAgIHJldHVybiBzOwotICB9Ci0gIHsKLSAgICBsb2c6OldyaXRlciBsb2coZmlsZSk7
Ci0gICAgc3RkOjpzdHJpbmcgcmVjb3JkOwotICAgIG5ld19kYi5FbmNvZGVUbygmcmVjb3JkKTsK
LSAgICBzID0gbG9nLkFkZFJlY29yZChyZWNvcmQpOwotICAgIGlmIChzLm9rKCkpIHsKLSAgICAg
IHMgPSBmaWxlLT5DbG9zZSgpOwotICAgIH0KLSAgfQotICBkZWxldGUgZmlsZTsKLSAgaWYgKHMu
b2soKSkgewotICAgIC8vIE1ha2UgIkNVUlJFTlQiIGZpbGUgdGhhdCBwb2ludHMgdG8gdGhlIG5l
dyBtYW5pZmVzdCBmaWxlLgotICAgIHMgPSBTZXRDdXJyZW50RmlsZShlbnZfLCBkYm5hbWVfLCAx
KTsKLSAgfSBlbHNlIHsKLSAgICBlbnZfLT5EZWxldGVGaWxlKG1hbmlmZXN0KTsKLSAgfQotICBy
ZXR1cm4gczsKLX0KLQotdm9pZCBEQkltcGw6Ok1heWJlSWdub3JlRXJyb3IoU3RhdHVzKiBzKSBj
b25zdCB7Ci0gIGlmIChzLT5vaygpIHx8IG9wdGlvbnNfLnBhcmFub2lkX2NoZWNrcykgewotICAg
IC8vIE5vIGNoYW5nZSBuZWVkZWQKLSAgfSBlbHNlIHsKLSAgICBMb2cob3B0aW9uc18uaW5mb19s
b2csICJJZ25vcmluZyBlcnJvciAlcyIsIHMtPlRvU3RyaW5nKCkuY19zdHIoKSk7Ci0gICAgKnMg
PSBTdGF0dXM6Ok9LKCk7Ci0gIH0KLX0KLQotdm9pZCBEQkltcGw6OkRlbGV0ZU9ic29sZXRlRmls
ZXMoKSB7Ci0gIC8vIE1ha2UgYSBzZXQgb2YgYWxsIG9mIHRoZSBsaXZlIGZpbGVzCi0gIHN0ZDo6
c2V0PHVpbnQ2NF90PiBsaXZlID0gcGVuZGluZ19vdXRwdXRzXzsKLSAgdmVyc2lvbnNfLT5BZGRM
aXZlRmlsZXMoJmxpdmUpOwotCi0gIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBmaWxlbmFtZXM7
Ci0gIGVudl8tPkdldENoaWxkcmVuKGRibmFtZV8sICZmaWxlbmFtZXMpOyAvLyBJZ25vcmluZyBl
cnJvcnMgb24gcHVycG9zZQotICB1aW50NjRfdCBudW1iZXI7Ci0gIEZpbGVUeXBlIHR5cGU7Ci0g
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZW5hbWVzLnNpemUoKTsgaSsrKSB7Ci0gICAgaWYg
KFBhcnNlRmlsZU5hbWUoZmlsZW5hbWVzW2ldLCAmbnVtYmVyLCAmdHlwZSkpIHsKLSAgICAgIGJv
b2wga2VlcCA9IHRydWU7Ci0gICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBrTG9n
RmlsZToKLSAgICAgICAgICBrZWVwID0gKChudW1iZXIgPj0gdmVyc2lvbnNfLT5Mb2dOdW1iZXIo
KSkgfHwKLSAgICAgICAgICAgICAgICAgIChudW1iZXIgPT0gdmVyc2lvbnNfLT5QcmV2TG9nTnVt
YmVyKCkpKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBrRGVzY3JpcHRvckZpbGU6
Ci0gICAgICAgICAgLy8gS2VlcCBteSBtYW5pZmVzdCBmaWxlLCBhbmQgYW55IG5ld2VyIGluY2Fy
bmF0aW9ucycKLSAgICAgICAgICAvLyAoaW4gY2FzZSB0aGVyZSBpcyBhIHJhY2UgdGhhdCBhbGxv
d3Mgb3RoZXIgaW5jYXJuYXRpb25zKQotICAgICAgICAgIGtlZXAgPSAobnVtYmVyID49IHZlcnNp
b25zXy0+TWFuaWZlc3RGaWxlTnVtYmVyKCkpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIGtUYWJsZUZpbGU6Ci0gICAgICAgICAga2VlcCA9IChsaXZlLmZpbmQobnVtYmVyKSAhPSBs
aXZlLmVuZCgpKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBrVGVtcEZpbGU6Ci0g
ICAgICAgICAgLy8gQW55IHRlbXAgZmlsZXMgdGhhdCBhcmUgY3VycmVudGx5IGJlaW5nIHdyaXR0
ZW4gdG8gbXVzdAotICAgICAgICAgIC8vIGJlIHJlY29yZGVkIGluIHBlbmRpbmdfb3V0cHV0c18s
IHdoaWNoIGlzIGluc2VydGVkIGludG8gImxpdmUiCi0gICAgICAgICAga2VlcCA9IChsaXZlLmZp
bmQobnVtYmVyKSAhPSBsaXZlLmVuZCgpKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBrQ3VycmVudEZpbGU6Ci0gICAgICAgIGNhc2Uga0RCTG9ja0ZpbGU6Ci0gICAgICAgIGNhc2Ug
a0luZm9Mb2dGaWxlOgotICAgICAgICAgIGtlZXAgPSB0cnVlOwotICAgICAgICAgIGJyZWFrOwot
ICAgICAgfQotCi0gICAgICBpZiAoIWtlZXApIHsKLSAgICAgICAgaWYgKHR5cGUgPT0ga1RhYmxl
RmlsZSkgewotICAgICAgICAgIHRhYmxlX2NhY2hlXy0+RXZpY3QobnVtYmVyKTsKLSAgICAgICAg
fQotICAgICAgICBMb2cob3B0aW9uc18uaW5mb19sb2csICJEZWxldGUgdHlwZT0lZCAjJWxsZFxu
IiwKLSAgICAgICAgICAgIGludCh0eXBlKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmcgbG9uZz4obnVtYmVyKSk7Ci0gICAgICAgIGVudl8tPkRlbGV0ZUZpbGUoZGJuYW1l
XyArICIvIiArIGZpbGVuYW1lc1tpXSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLVN0YXR1
cyBEQkltcGw6OlJlY292ZXIoVmVyc2lvbkVkaXQqIGVkaXQpIHsKLSAgbXV0ZXhfLkFzc2VydEhl
bGQoKTsKLQotICAvLyBJZ25vcmUgZXJyb3IgZnJvbSBDcmVhdGVEaXIgc2luY2UgdGhlIGNyZWF0
aW9uIG9mIHRoZSBEQiBpcwotICAvLyBjb21taXR0ZWQgb25seSB3aGVuIHRoZSBkZXNjcmlwdG9y
IGlzIGNyZWF0ZWQsIGFuZCB0aGlzIGRpcmVjdG9yeQotICAvLyBtYXkgYWxyZWFkeSBleGlzdCBm
cm9tIGEgcHJldmlvdXMgZmFpbGVkIGNyZWF0aW9uIGF0dGVtcHQuCi0gIGVudl8tPkNyZWF0ZURp
cihkYm5hbWVfKTsKLSAgYXNzZXJ0KGRiX2xvY2tfID09IE5VTEwpOwotICBTdGF0dXMgcyA9IGVu
dl8tPkxvY2tGaWxlKExvY2tGaWxlTmFtZShkYm5hbWVfKSwgJmRiX2xvY2tfKTsKLSAgaWYgKCFz
Lm9rKCkpIHsKLSAgICByZXR1cm4gczsKLSAgfQotCi0gIGlmICghZW52Xy0+RmlsZUV4aXN0cyhD
dXJyZW50RmlsZU5hbWUoZGJuYW1lXykpKSB7Ci0gICAgaWYgKG9wdGlvbnNfLmNyZWF0ZV9pZl9t
aXNzaW5nKSB7Ci0gICAgICBzID0gTmV3REIoKTsKLSAgICAgIGlmICghcy5vaygpKSB7Ci0gICAg
ICAgIHJldHVybiBzOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gU3RhdHVz
OjpJbnZhbGlkQXJndW1lbnQoCi0gICAgICAgICAgZGJuYW1lXywgImRvZXMgbm90IGV4aXN0IChj
cmVhdGVfaWZfbWlzc2luZyBpcyBmYWxzZSkiKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgaWYg
KG9wdGlvbnNfLmVycm9yX2lmX2V4aXN0cykgewotICAgICAgcmV0dXJuIFN0YXR1czo6SW52YWxp
ZEFyZ3VtZW50KAotICAgICAgICAgIGRibmFtZV8sICJleGlzdHMgKGVycm9yX2lmX2V4aXN0cyBp
cyB0cnVlKSIpOwotICAgIH0KLSAgfQotCi0gIHMgPSB2ZXJzaW9uc18tPlJlY292ZXIoKTsKLSAg
aWYgKHMub2soKSkgewotICAgIFNlcXVlbmNlTnVtYmVyIG1heF9zZXF1ZW5jZSgwKTsKLQotICAg
IC8vIFJlY292ZXIgZnJvbSBhbGwgbmV3ZXIgbG9nIGZpbGVzIHRoYW4gdGhlIG9uZXMgbmFtZWQg
aW4gdGhlCi0gICAgLy8gZGVzY3JpcHRvciAobmV3IGxvZyBmaWxlcyBtYXkgaGF2ZSBiZWVuIGFk
ZGVkIGJ5IHRoZSBwcmV2aW91cwotICAgIC8vIGluY2FybmF0aW9uIHdpdGhvdXQgcmVnaXN0ZXJp
bmcgdGhlbSBpbiB0aGUgZGVzY3JpcHRvcikuCi0gICAgLy8KLSAgICAvLyBOb3RlIHRoYXQgUHJl
dkxvZ051bWJlcigpIGlzIG5vIGxvbmdlciB1c2VkLCBidXQgd2UgcGF5Ci0gICAgLy8gYXR0ZW50
aW9uIHRvIGl0IGluIGNhc2Ugd2UgYXJlIHJlY292ZXJpbmcgYSBkYXRhYmFzZQotICAgIC8vIHBy
b2R1Y2VkIGJ5IGFuIG9sZGVyIHZlcnNpb24gb2YgbGV2ZWxkYi4KLSAgICBjb25zdCB1aW50NjRf
dCBtaW5fbG9nID0gdmVyc2lvbnNfLT5Mb2dOdW1iZXIoKTsKLSAgICBjb25zdCB1aW50NjRfdCBw
cmV2X2xvZyA9IHZlcnNpb25zXy0+UHJldkxvZ051bWJlcigpOwotICAgIHN0ZDo6dmVjdG9yPHN0
ZDo6c3RyaW5nPiBmaWxlbmFtZXM7Ci0gICAgcyA9IGVudl8tPkdldENoaWxkcmVuKGRibmFtZV8s
ICZmaWxlbmFtZXMpOwotICAgIGlmICghcy5vaygpKSB7Ci0gICAgICByZXR1cm4gczsKLSAgICB9
Ci0gICAgdWludDY0X3QgbnVtYmVyOwotICAgIEZpbGVUeXBlIHR5cGU7Ci0gICAgc3RkOjp2ZWN0
b3I8dWludDY0X3Q+IGxvZ3M7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlbmFtZXMu
c2l6ZSgpOyBpKyspIHsKLSAgICAgIGlmIChQYXJzZUZpbGVOYW1lKGZpbGVuYW1lc1tpXSwgJm51
bWJlciwgJnR5cGUpCi0gICAgICAgICAgJiYgdHlwZSA9PSBrTG9nRmlsZQotICAgICAgICAgICYm
ICgobnVtYmVyID49IG1pbl9sb2cpIHx8IChudW1iZXIgPT0gcHJldl9sb2cpKSkgewotICAgICAg
ICBsb2dzLnB1c2hfYmFjayhudW1iZXIpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFJlY292
ZXIgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBsb2dzIHdlcmUgZ2VuZXJhdGVkCi0gICAgc3Rk
Ojpzb3J0KGxvZ3MuYmVnaW4oKSwgbG9ncy5lbmQoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsb2dzLnNpemUoKTsgaSsrKSB7Ci0gICAgICBzID0gUmVjb3ZlckxvZ0ZpbGUobG9nc1tp
XSwgZWRpdCwgJm1heF9zZXF1ZW5jZSk7Ci0KLSAgICAgIC8vIFRoZSBwcmV2aW91cyBpbmNhcm5h
dGlvbiBtYXkgbm90IGhhdmUgd3JpdHRlbiBhbnkgTUFOSUZFU1QKLSAgICAgIC8vIHJlY29yZHMg
YWZ0ZXIgYWxsb2NhdGluZyB0aGlzIGxvZyBudW1iZXIuICBTbyB3ZSBtYW51YWxseQotICAgICAg
Ly8gdXBkYXRlIHRoZSBmaWxlIG51bWJlciBhbGxvY2F0aW9uIGNvdW50ZXIgaW4gVmVyc2lvblNl
dC4KLSAgICAgIHZlcnNpb25zXy0+TWFya0ZpbGVOdW1iZXJVc2VkKGxvZ3NbaV0pOwotICAgIH0K
LQotICAgIGlmIChzLm9rKCkpIHsKLSAgICAgIGlmICh2ZXJzaW9uc18tPkxhc3RTZXF1ZW5jZSgp
IDwgbWF4X3NlcXVlbmNlKSB7Ci0gICAgICAgIHZlcnNpb25zXy0+U2V0TGFzdFNlcXVlbmNlKG1h
eF9zZXF1ZW5jZSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLVN0
YXR1cyBEQkltcGw6OlJlY292ZXJMb2dGaWxlKHVpbnQ2NF90IGxvZ19udW1iZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uRWRpdCogZWRpdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNlcXVlbmNlTnVtYmVyKiBtYXhfc2VxdWVuY2UpIHsKLSAgc3RydWN0
IExvZ1JlcG9ydGVyIDogcHVibGljIGxvZzo6UmVhZGVyOjpSZXBvcnRlciB7Ci0gICAgRW52KiBl
bnY7Ci0gICAgTG9nZ2VyKiBpbmZvX2xvZzsKLSAgICBjb25zdCBjaGFyKiBmbmFtZTsKLSAgICBT
dGF0dXMqIHN0YXR1czsgIC8vIE5VTEwgaWYgb3B0aW9uc18ucGFyYW5vaWRfY2hlY2tzPT1mYWxz
ZQotICAgIHZpcnR1YWwgdm9pZCBDb3JydXB0aW9uKHNpemVfdCBieXRlcywgY29uc3QgU3RhdHVz
JiBzKSB7Ci0gICAgICBMb2coaW5mb19sb2csICIlcyVzOiBkcm9wcGluZyAlZCBieXRlczsgJXMi
LAotICAgICAgICAgICh0aGlzLT5zdGF0dXMgPT0gTlVMTCA/ICIoaWdub3JpbmcgZXJyb3IpICIg
OiAiIiksCi0gICAgICAgICAgZm5hbWUsIHN0YXRpY19jYXN0PGludD4oYnl0ZXMpLCBzLlRvU3Ry
aW5nKCkuY19zdHIoKSk7Ci0gICAgICBpZiAodGhpcy0+c3RhdHVzICE9IE5VTEwgJiYgdGhpcy0+
c3RhdHVzLT5vaygpKSAqdGhpcy0+c3RhdHVzID0gczsKLSAgICB9Ci0gIH07Ci0KLSAgbXV0ZXhf
LkFzc2VydEhlbGQoKTsKLQotICAvLyBPcGVuIHRoZSBsb2cgZmlsZQotICBzdGQ6OnN0cmluZyBm
bmFtZSA9IExvZ0ZpbGVOYW1lKGRibmFtZV8sIGxvZ19udW1iZXIpOwotICBTZXF1ZW50aWFsRmls
ZSogZmlsZTsKLSAgU3RhdHVzIHN0YXR1cyA9IGVudl8tPk5ld1NlcXVlbnRpYWxGaWxlKGZuYW1l
LCAmZmlsZSk7Ci0gIGlmICghc3RhdHVzLm9rKCkpIHsKLSAgICBNYXliZUlnbm9yZUVycm9yKCZz
dGF0dXMpOwotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLQotICAvLyBDcmVhdGUgdGhlIGxvZyBy
ZWFkZXIuCi0gIExvZ1JlcG9ydGVyIHJlcG9ydGVyOwotICByZXBvcnRlci5lbnYgPSBlbnZfOwot
ICByZXBvcnRlci5pbmZvX2xvZyA9IG9wdGlvbnNfLmluZm9fbG9nOwotICByZXBvcnRlci5mbmFt
ZSA9IGZuYW1lLmNfc3RyKCk7Ci0gIHJlcG9ydGVyLnN0YXR1cyA9IChvcHRpb25zXy5wYXJhbm9p
ZF9jaGVja3MgPyAmc3RhdHVzIDogTlVMTCk7Ci0gIC8vIFdlIGludGVudGlhbGx5IG1ha2UgbG9n
OjpSZWFkZXIgZG8gY2hlY2tzdW1taW5nIGV2ZW4gaWYKLSAgLy8gcGFyYW5vaWRfY2hlY2tzPT1m
YWxzZSBzbyB0aGF0IGNvcnJ1cHRpb25zIGNhdXNlIGVudGlyZSBjb21taXRzCi0gIC8vIHRvIGJl
IHNraXBwZWQgaW5zdGVhZCBvZiBwcm9wYWdhdGluZyBiYWQgaW5mb3JtYXRpb24gKGxpa2Ugb3Zl
cmx5Ci0gIC8vIGxhcmdlIHNlcXVlbmNlIG51bWJlcnMpLgotICBsb2c6OlJlYWRlciByZWFkZXIo
ZmlsZSwgJnJlcG9ydGVyLCB0cnVlLypjaGVja3N1bSovLAotICAgICAgICAgICAgICAgICAgICAg
MC8qaW5pdGlhbF9vZmZzZXQqLyk7Ci0gIExvZyhvcHRpb25zXy5pbmZvX2xvZywgIlJlY292ZXJp
bmcgbG9nICMlbGx1IiwKLSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGxvZ19udW1iZXIpOwot
Ci0gIC8vIFJlYWQgYWxsIHRoZSByZWNvcmRzIGFuZCBhZGQgdG8gYSBtZW10YWJsZQotICBzdGQ6
OnN0cmluZyBzY3JhdGNoOwotICBTbGljZSByZWNvcmQ7Ci0gIFdyaXRlQmF0Y2ggYmF0Y2g7Ci0g
IE1lbVRhYmxlKiBtZW0gPSBOVUxMOwotICB3aGlsZSAocmVhZGVyLlJlYWRSZWNvcmQoJnJlY29y
ZCwgJnNjcmF0Y2gpICYmCi0gICAgICAgICBzdGF0dXMub2soKSkgewotICAgIGlmIChyZWNvcmQu
c2l6ZSgpIDwgMTIpIHsKLSAgICAgIHJlcG9ydGVyLkNvcnJ1cHRpb24oCi0gICAgICAgICAgcmVj
b3JkLnNpemUoKSwgU3RhdHVzOjpDb3JydXB0aW9uKCJsb2cgcmVjb3JkIHRvbyBzbWFsbCIpKTsK
LSAgICAgIGNvbnRpbnVlOwotICAgIH0KLSAgICBXcml0ZUJhdGNoSW50ZXJuYWw6OlNldENvbnRl
bnRzKCZiYXRjaCwgcmVjb3JkKTsKLQotICAgIGlmIChtZW0gPT0gTlVMTCkgewotICAgICAgbWVt
ID0gbmV3IE1lbVRhYmxlKGludGVybmFsX2NvbXBhcmF0b3JfKTsKLSAgICAgIG1lbS0+UmVmKCk7
Ci0gICAgfQotICAgIHN0YXR1cyA9IFdyaXRlQmF0Y2hJbnRlcm5hbDo6SW5zZXJ0SW50bygmYmF0
Y2gsIG1lbSk7Ci0gICAgTWF5YmVJZ25vcmVFcnJvcigmc3RhdHVzKTsKLSAgICBpZiAoIXN0YXR1
cy5vaygpKSB7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY29uc3QgU2VxdWVuY2VOdW1iZXIg
bGFzdF9zZXEgPQotICAgICAgICBXcml0ZUJhdGNoSW50ZXJuYWw6OlNlcXVlbmNlKCZiYXRjaCkg
KwotICAgICAgICBXcml0ZUJhdGNoSW50ZXJuYWw6OkNvdW50KCZiYXRjaCkgLSAxOwotICAgIGlm
IChsYXN0X3NlcSA+ICptYXhfc2VxdWVuY2UpIHsKLSAgICAgICptYXhfc2VxdWVuY2UgPSBsYXN0
X3NlcTsKLSAgICB9Ci0KLSAgICBpZiAobWVtLT5BcHByb3hpbWF0ZU1lbW9yeVVzYWdlKCkgPiBv
cHRpb25zXy53cml0ZV9idWZmZXJfc2l6ZSkgewotICAgICAgc3RhdHVzID0gV3JpdGVMZXZlbDBU
YWJsZShtZW0sIGVkaXQsIE5VTEwpOwotICAgICAgaWYgKCFzdGF0dXMub2soKSkgewotICAgICAg
ICAvLyBSZWZsZWN0IGVycm9ycyBpbW1lZGlhdGVseSBzbyB0aGF0IGNvbmRpdGlvbnMgbGlrZSBm
dWxsCi0gICAgICAgIC8vIGZpbGUtc3lzdGVtcyBjYXVzZSB0aGUgREI6Ok9wZW4oKSB0byBmYWls
LgotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIG1lbS0+VW5yZWYoKTsKLSAgICAgIG1l
bSA9IE5VTEw7Ci0gICAgfQotICB9Ci0KLSAgaWYgKHN0YXR1cy5vaygpICYmIG1lbSAhPSBOVUxM
KSB7Ci0gICAgc3RhdHVzID0gV3JpdGVMZXZlbDBUYWJsZShtZW0sIGVkaXQsIE5VTEwpOwotICAg
IC8vIFJlZmxlY3QgZXJyb3JzIGltbWVkaWF0ZWx5IHNvIHRoYXQgY29uZGl0aW9ucyBsaWtlIGZ1
bGwKLSAgICAvLyBmaWxlLXN5c3RlbXMgY2F1c2UgdGhlIERCOjpPcGVuKCkgdG8gZmFpbC4KLSAg
fQotCi0gIGlmIChtZW0gIT0gTlVMTCkgbWVtLT5VbnJlZigpOwotICBkZWxldGUgZmlsZTsKLSAg
cmV0dXJuIHN0YXR1czsKLX0KLQotU3RhdHVzIERCSW1wbDo6V3JpdGVMZXZlbDBUYWJsZShNZW1U
YWJsZSogbWVtLCBWZXJzaW9uRWRpdCogZWRpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVmVyc2lvbiogYmFzZSkgewotICBtdXRleF8uQXNzZXJ0SGVsZCgpOwotICBjb25zdCB1
aW50NjRfdCBzdGFydF9taWNyb3MgPSBlbnZfLT5Ob3dNaWNyb3MoKTsKLSAgRmlsZU1ldGFEYXRh
IG1ldGE7Ci0gIG1ldGEubnVtYmVyID0gdmVyc2lvbnNfLT5OZXdGaWxlTnVtYmVyKCk7Ci0gIHBl
bmRpbmdfb3V0cHV0c18uaW5zZXJ0KG1ldGEubnVtYmVyKTsKLSAgSXRlcmF0b3IqIGl0ZXIgPSBt
ZW0tPk5ld0l0ZXJhdG9yKCk7Ci0gIExvZyhvcHRpb25zXy5pbmZvX2xvZywgIkxldmVsLTAgdGFi
bGUgIyVsbHU6IHN0YXJ0ZWQiLAotICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgbWV0YS5udW1i
ZXIpOwotCi0gIFN0YXR1cyBzOwotICB7Ci0gICAgbXV0ZXhfLlVubG9jaygpOwotICAgIHMgPSBC
dWlsZFRhYmxlKGRibmFtZV8sIGVudl8sIG9wdGlvbnNfLCB0YWJsZV9jYWNoZV8sIGl0ZXIsICZt
ZXRhKTsKLSAgICBtdXRleF8uTG9jaygpOwotICB9Ci0KLSAgTG9nKG9wdGlvbnNfLmluZm9fbG9n
LCAiTGV2ZWwtMCB0YWJsZSAjJWxsdTogJWxsZCBieXRlcyAlcyIsCi0gICAgICAodW5zaWduZWQg
bG9uZyBsb25nKSBtZXRhLm51bWJlciwKLSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIG1ldGEu
ZmlsZV9zaXplLAotICAgICAgcy5Ub1N0cmluZygpLmNfc3RyKCkpOwotICBkZWxldGUgaXRlcjsK
LSAgcGVuZGluZ19vdXRwdXRzXy5lcmFzZShtZXRhLm51bWJlcik7Ci0KLQotICAvLyBOb3RlIHRo
YXQgaWYgZmlsZV9zaXplIGlzIHplcm8sIHRoZSBmaWxlIGhhcyBiZWVuIGRlbGV0ZWQgYW5kCi0g
IC8vIHNob3VsZCBub3QgYmUgYWRkZWQgdG8gdGhlIG1hbmlmZXN0LgotICBpbnQgbGV2ZWwgPSAw
OwotICBpZiAocy5vaygpICYmIG1ldGEuZmlsZV9zaXplID4gMCkgewotICAgIGNvbnN0IFNsaWNl
IG1pbl91c2VyX2tleSA9IG1ldGEuc21hbGxlc3QudXNlcl9rZXkoKTsKLSAgICBjb25zdCBTbGlj
ZSBtYXhfdXNlcl9rZXkgPSBtZXRhLmxhcmdlc3QudXNlcl9rZXkoKTsKLSAgICBpZiAoYmFzZSAh
PSBOVUxMKSB7Ci0gICAgICBsZXZlbCA9IGJhc2UtPlBpY2tMZXZlbEZvck1lbVRhYmxlT3V0cHV0
KG1pbl91c2VyX2tleSwgbWF4X3VzZXJfa2V5KTsKLSAgICB9Ci0gICAgZWRpdC0+QWRkRmlsZShs
ZXZlbCwgbWV0YS5udW1iZXIsIG1ldGEuZmlsZV9zaXplLAotICAgICAgICAgICAgICAgICAgbWV0
YS5zbWFsbGVzdCwgbWV0YS5sYXJnZXN0KTsKLSAgfQotCi0gIENvbXBhY3Rpb25TdGF0cyBzdGF0
czsKLSAgc3RhdHMubWljcm9zID0gZW52Xy0+Tm93TWljcm9zKCkgLSBzdGFydF9taWNyb3M7Ci0g
IHN0YXRzLmJ5dGVzX3dyaXR0ZW4gPSBtZXRhLmZpbGVfc2l6ZTsKLSAgc3RhdHNfW2xldmVsXS5B
ZGQoc3RhdHMpOwotICByZXR1cm4gczsKLX0KLQotU3RhdHVzIERCSW1wbDo6Q29tcGFjdE1lbVRh
YmxlKCkgewotICBtdXRleF8uQXNzZXJ0SGVsZCgpOwotICBhc3NlcnQoaW1tXyAhPSBOVUxMKTsK
LQotICAvLyBTYXZlIHRoZSBjb250ZW50cyBvZiB0aGUgbWVtdGFibGUgYXMgYSBuZXcgVGFibGUK
LSAgVmVyc2lvbkVkaXQgZWRpdDsKLSAgVmVyc2lvbiogYmFzZSA9IHZlcnNpb25zXy0+Y3VycmVu
dCgpOwotICBiYXNlLT5SZWYoKTsKLSAgU3RhdHVzIHMgPSBXcml0ZUxldmVsMFRhYmxlKGltbV8s
ICZlZGl0LCBiYXNlKTsKLSAgYmFzZS0+VW5yZWYoKTsKLQotICBpZiAocy5vaygpICYmIHNodXR0
aW5nX2Rvd25fLkFjcXVpcmVfTG9hZCgpKSB7Ci0gICAgcyA9IFN0YXR1czo6SU9FcnJvcigiRGVs
ZXRpbmcgREIgZHVyaW5nIG1lbXRhYmxlIGNvbXBhY3Rpb24iKTsKLSAgfQotCi0gIC8vIFJlcGxh
Y2UgaW1tdXRhYmxlIG1lbXRhYmxlIHdpdGggdGhlIGdlbmVyYXRlZCBUYWJsZQotICBpZiAocy5v
aygpKSB7Ci0gICAgZWRpdC5TZXRQcmV2TG9nTnVtYmVyKDApOwotICAgIGVkaXQuU2V0TG9nTnVt
YmVyKGxvZ2ZpbGVfbnVtYmVyXyk7ICAvLyBFYXJsaWVyIGxvZ3Mgbm8gbG9uZ2VyIG5lZWRlZAot
ICAgIHMgPSB2ZXJzaW9uc18tPkxvZ0FuZEFwcGx5KCZlZGl0LCAmbXV0ZXhfKTsKLSAgfQotCi0g
IGlmIChzLm9rKCkpIHsKLSAgICAvLyBDb21taXQgdG8gdGhlIG5ldyBzdGF0ZQotICAgIGltbV8t
PlVucmVmKCk7Ci0gICAgaW1tXyA9IE5VTEw7Ci0gICAgaGFzX2ltbV8uUmVsZWFzZV9TdG9yZShO
VUxMKTsKLSAgICBEZWxldGVPYnNvbGV0ZUZpbGVzKCk7Ci0gIH0KLQotICByZXR1cm4gczsKLX0K
LQotdm9pZCBEQkltcGw6OkNvbXBhY3RSYW5nZShjb25zdCBTbGljZSogYmVnaW4sIGNvbnN0IFNs
aWNlKiBlbmQpIHsKLSAgaW50IG1heF9sZXZlbF93aXRoX2ZpbGVzID0gMTsKLSAgewotICAgIE11
dGV4TG9jayBsKCZtdXRleF8pOwotICAgIFZlcnNpb24qIGJhc2UgPSB2ZXJzaW9uc18tPmN1cnJl
bnQoKTsKLSAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgY29uZmlnOjprTnVtTGV2ZWxz
OyBsZXZlbCsrKSB7Ci0gICAgICBpZiAoYmFzZS0+T3ZlcmxhcEluTGV2ZWwobGV2ZWwsIGJlZ2lu
LCBlbmQpKSB7Ci0gICAgICAgIG1heF9sZXZlbF93aXRoX2ZpbGVzID0gbGV2ZWw7Ci0gICAgICB9
Ci0gICAgfQotICB9Ci0gIFRFU1RfQ29tcGFjdE1lbVRhYmxlKCk7IC8vIFRPRE8oc2FuamF5KTog
U2tpcCBpZiBtZW10YWJsZSBkb2VzIG5vdCBvdmVybGFwCi0gIGZvciAoaW50IGxldmVsID0gMDsg
bGV2ZWwgPCBtYXhfbGV2ZWxfd2l0aF9maWxlczsgbGV2ZWwrKykgewotICAgIFRFU1RfQ29tcGFj
dFJhbmdlKGxldmVsLCBiZWdpbiwgZW5kKTsKLSAgfQotfQotCi12b2lkIERCSW1wbDo6VEVTVF9D
b21wYWN0UmFuZ2UoaW50IGxldmVsLCBjb25zdCBTbGljZSogYmVnaW4sY29uc3QgU2xpY2UqIGVu
ZCkgewotICBhc3NlcnQobGV2ZWwgPj0gMCk7Ci0gIGFzc2VydChsZXZlbCArIDEgPCBjb25maWc6
OmtOdW1MZXZlbHMpOwotCi0gIEludGVybmFsS2V5IGJlZ2luX3N0b3JhZ2UsIGVuZF9zdG9yYWdl
OwotCi0gIE1hbnVhbENvbXBhY3Rpb24gbWFudWFsOwotICBtYW51YWwubGV2ZWwgPSBsZXZlbDsK
LSAgbWFudWFsLmRvbmUgPSBmYWxzZTsKLSAgaWYgKGJlZ2luID09IE5VTEwpIHsKLSAgICBtYW51
YWwuYmVnaW4gPSBOVUxMOwotICB9IGVsc2UgewotICAgIGJlZ2luX3N0b3JhZ2UgPSBJbnRlcm5h
bEtleSgqYmVnaW4sIGtNYXhTZXF1ZW5jZU51bWJlciwga1ZhbHVlVHlwZUZvclNlZWspOwotICAg
IG1hbnVhbC5iZWdpbiA9ICZiZWdpbl9zdG9yYWdlOwotICB9Ci0gIGlmIChlbmQgPT0gTlVMTCkg
ewotICAgIG1hbnVhbC5lbmQgPSBOVUxMOwotICB9IGVsc2UgewotICAgIGVuZF9zdG9yYWdlID0g
SW50ZXJuYWxLZXkoKmVuZCwgMCwgc3RhdGljX2Nhc3Q8VmFsdWVUeXBlPigwKSk7Ci0gICAgbWFu
dWFsLmVuZCA9ICZlbmRfc3RvcmFnZTsKLSAgfQotCi0gIE11dGV4TG9jayBsKCZtdXRleF8pOwot
ICB3aGlsZSAoIW1hbnVhbC5kb25lKSB7Ci0gICAgd2hpbGUgKG1hbnVhbF9jb21wYWN0aW9uXyAh
PSBOVUxMKSB7Ci0gICAgICBiZ19jdl8uV2FpdCgpOwotICAgIH0KLSAgICBtYW51YWxfY29tcGFj
dGlvbl8gPSAmbWFudWFsOwotICAgIE1heWJlU2NoZWR1bGVDb21wYWN0aW9uKCk7Ci0gICAgd2hp
bGUgKG1hbnVhbF9jb21wYWN0aW9uXyA9PSAmbWFudWFsKSB7Ci0gICAgICBiZ19jdl8uV2FpdCgp
OwotICAgIH0KLSAgfQotfQotCi1TdGF0dXMgREJJbXBsOjpURVNUX0NvbXBhY3RNZW1UYWJsZSgp
IHsKLSAgLy8gTlVMTCBiYXRjaCBtZWFucyBqdXN0IHdhaXQgZm9yIGVhcmxpZXIgd3JpdGVzIHRv
IGJlIGRvbmUKLSAgU3RhdHVzIHMgPSBXcml0ZShXcml0ZU9wdGlvbnMoKSwgTlVMTCk7Ci0gIGlm
IChzLm9rKCkpIHsKLSAgICAvLyBXYWl0IHVudGlsIHRoZSBjb21wYWN0aW9uIGNvbXBsZXRlcwot
ICAgIE11dGV4TG9jayBsKCZtdXRleF8pOwotICAgIHdoaWxlIChpbW1fICE9IE5VTEwgJiYgYmdf
ZXJyb3JfLm9rKCkpIHsKLSAgICAgIGJnX2N2Xy5XYWl0KCk7Ci0gICAgfQotICAgIGlmIChpbW1f
ICE9IE5VTEwpIHsKLSAgICAgIHMgPSBiZ19lcnJvcl87Ci0gICAgfQotICB9Ci0gIHJldHVybiBz
OwotfQotCi12b2lkIERCSW1wbDo6TWF5YmVTY2hlZHVsZUNvbXBhY3Rpb24oKSB7Ci0gIG11dGV4
Xy5Bc3NlcnRIZWxkKCk7Ci0gIGlmIChiZ19jb21wYWN0aW9uX3NjaGVkdWxlZF8pIHsKLSAgICAv
LyBBbHJlYWR5IHNjaGVkdWxlZAotICB9IGVsc2UgaWYgKHNodXR0aW5nX2Rvd25fLkFjcXVpcmVf
TG9hZCgpKSB7Ci0gICAgLy8gREIgaXMgYmVpbmcgZGVsZXRlZDsgbm8gbW9yZSBiYWNrZ3JvdW5k
IGNvbXBhY3Rpb25zCi0gIH0gZWxzZSBpZiAoaW1tXyA9PSBOVUxMICYmCi0gICAgICAgICAgICAg
bWFudWFsX2NvbXBhY3Rpb25fID09IE5VTEwgJiYKLSAgICAgICAgICAgICAhdmVyc2lvbnNfLT5O
ZWVkc0NvbXBhY3Rpb24oKSkgewotICAgIC8vIE5vIHdvcmsgdG8gYmUgZG9uZQotICB9IGVsc2Ug
ewotICAgIGJnX2NvbXBhY3Rpb25fc2NoZWR1bGVkXyA9IHRydWU7Ci0gICAgZW52Xy0+U2NoZWR1
bGUoJkRCSW1wbDo6QkdXb3JrLCB0aGlzKTsKLSAgfQotfQotCi12b2lkIERCSW1wbDo6QkdXb3Jr
KHZvaWQqIGRiKSB7Ci0gIHJlaW50ZXJwcmV0X2Nhc3Q8REJJbXBsKj4oZGIpLT5CYWNrZ3JvdW5k
Q2FsbCgpOwotfQotCi12b2lkIERCSW1wbDo6QmFja2dyb3VuZENhbGwoKSB7Ci0gIE11dGV4TG9j
ayBsKCZtdXRleF8pOwotICBhc3NlcnQoYmdfY29tcGFjdGlvbl9zY2hlZHVsZWRfKTsKLSAgaWYg
KCFzaHV0dGluZ19kb3duXy5BY3F1aXJlX0xvYWQoKSkgewotICAgIFN0YXR1cyBzID0gQmFja2dy
b3VuZENvbXBhY3Rpb24oKTsKLSAgICBpZiAocy5vaygpKSB7Ci0gICAgICAvLyBTdWNjZXNzCi0g
ICAgfSBlbHNlIGlmIChzaHV0dGluZ19kb3duXy5BY3F1aXJlX0xvYWQoKSkgewotICAgICAgLy8g
RXJyb3IgbW9zdCBsaWtlbHkgZHVlIHRvIHNodXRkb3duOyBkbyBub3Qgd2FpdAotICAgIH0gZWxz
ZSB7Ci0gICAgICAvLyBXYWl0IGEgbGl0dGxlIGJpdCBiZWZvcmUgcmV0cnlpbmcgYmFja2dyb3Vu
ZCBjb21wYWN0aW9uIGluCi0gICAgICAvLyBjYXNlIHRoaXMgaXMgYW4gZW52aXJvbm1lbnRhbCBw
cm9ibGVtIGFuZCB3ZSBkbyBub3Qgd2FudCB0bwotICAgICAgLy8gY2hldyB1cCByZXNvdXJjZXMg
Zm9yIGZhaWxlZCBjb21wYWN0aW9ucyBmb3IgdGhlIGR1cmF0aW9uIG9mCi0gICAgICAvLyB0aGUg
cHJvYmxlbS4KLSAgICAgIGJnX2N2Xy5TaWduYWxBbGwoKTsgIC8vIEluIGNhc2UgYSB3YWl0ZXIg
Y2FuIHByb2NlZWQgZGVzcGl0ZSB0aGUgZXJyb3IKLSAgICAgIExvZyhvcHRpb25zXy5pbmZvX2xv
ZywgIldhaXRpbmcgYWZ0ZXIgYmFja2dyb3VuZCBjb21wYWN0aW9uIGVycm9yOiAlcyIsCi0gICAg
ICAgICAgcy5Ub1N0cmluZygpLmNfc3RyKCkpOwotICAgICAgbXV0ZXhfLlVubG9jaygpOwotICAg
ICAgZW52Xy0+U2xlZXBGb3JNaWNyb3NlY29uZHMoMTAwMDAwMCk7Ci0gICAgICBtdXRleF8uTG9j
aygpOwotICAgIH0KLSAgfQotCi0gIGJnX2NvbXBhY3Rpb25fc2NoZWR1bGVkXyA9IGZhbHNlOwot
Ci0gIC8vIFByZXZpb3VzIGNvbXBhY3Rpb24gbWF5IGhhdmUgcHJvZHVjZWQgdG9vIG1hbnkgZmls
ZXMgaW4gYSBsZXZlbCwKLSAgLy8gc28gcmVzY2hlZHVsZSBhbm90aGVyIGNvbXBhY3Rpb24gaWYg
bmVlZGVkLgotICBNYXliZVNjaGVkdWxlQ29tcGFjdGlvbigpOwotICBiZ19jdl8uU2lnbmFsQWxs
KCk7Ci19Ci0KLVN0YXR1cyBEQkltcGw6OkJhY2tncm91bmRDb21wYWN0aW9uKCkgewotICBtdXRl
eF8uQXNzZXJ0SGVsZCgpOwotCi0gIGlmIChpbW1fICE9IE5VTEwpIHsKLSAgICByZXR1cm4gQ29t
cGFjdE1lbVRhYmxlKCk7Ci0gIH0KLQotICBDb21wYWN0aW9uKiBjOwotICBib29sIGlzX21hbnVh
bCA9IChtYW51YWxfY29tcGFjdGlvbl8gIT0gTlVMTCk7Ci0gIEludGVybmFsS2V5IG1hbnVhbF9l
bmQ7Ci0gIGlmIChpc19tYW51YWwpIHsKLSAgICBNYW51YWxDb21wYWN0aW9uKiBtID0gbWFudWFs
X2NvbXBhY3Rpb25fOwotICAgIGMgPSB2ZXJzaW9uc18tPkNvbXBhY3RSYW5nZShtLT5sZXZlbCwg
bS0+YmVnaW4sIG0tPmVuZCk7Ci0gICAgbS0+ZG9uZSA9IChjID09IE5VTEwpOwotICAgIGlmIChj
ICE9IE5VTEwpIHsKLSAgICAgIG1hbnVhbF9lbmQgPSBjLT5pbnB1dCgwLCBjLT5udW1faW5wdXRf
ZmlsZXMoMCkgLSAxKS0+bGFyZ2VzdDsKLSAgICB9Ci0gICAgTG9nKG9wdGlvbnNfLmluZm9fbG9n
LAotICAgICAgICAiTWFudWFsIGNvbXBhY3Rpb24gYXQgbGV2ZWwtJWQgZnJvbSAlcyAuLiAlczsg
d2lsbCBzdG9wIGF0ICVzXG4iLAotICAgICAgICBtLT5sZXZlbCwKLSAgICAgICAgKG0tPmJlZ2lu
ID8gbS0+YmVnaW4tPkRlYnVnU3RyaW5nKCkuY19zdHIoKSA6ICIoYmVnaW4pIiksCi0gICAgICAg
IChtLT5lbmQgPyBtLT5lbmQtPkRlYnVnU3RyaW5nKCkuY19zdHIoKSA6ICIoZW5kKSIpLAotICAg
ICAgICAobS0+ZG9uZSA/ICIoZW5kKSIgOiBtYW51YWxfZW5kLkRlYnVnU3RyaW5nKCkuY19zdHIo
KSkpOwotICB9IGVsc2UgewotICAgIGMgPSB2ZXJzaW9uc18tPlBpY2tDb21wYWN0aW9uKCk7Ci0g
IH0KLQotICBTdGF0dXMgc3RhdHVzOwotICBpZiAoYyA9PSBOVUxMKSB7Ci0gICAgLy8gTm90aGlu
ZyB0byBkbwotICB9IGVsc2UgaWYgKCFpc19tYW51YWwgJiYgYy0+SXNUcml2aWFsTW92ZSgpKSB7
Ci0gICAgLy8gTW92ZSBmaWxlIHRvIG5leHQgbGV2ZWwKLSAgICBhc3NlcnQoYy0+bnVtX2lucHV0
X2ZpbGVzKDApID09IDEpOwotICAgIEZpbGVNZXRhRGF0YSogZiA9IGMtPmlucHV0KDAsIDApOwot
ICAgIGMtPmVkaXQoKS0+RGVsZXRlRmlsZShjLT5sZXZlbCgpLCBmLT5udW1iZXIpOwotICAgIGMt
PmVkaXQoKS0+QWRkRmlsZShjLT5sZXZlbCgpICsgMSwgZi0+bnVtYmVyLCBmLT5maWxlX3NpemUs
Ci0gICAgICAgICAgICAgICAgICAgICAgIGYtPnNtYWxsZXN0LCBmLT5sYXJnZXN0KTsKLSAgICBz
dGF0dXMgPSB2ZXJzaW9uc18tPkxvZ0FuZEFwcGx5KGMtPmVkaXQoKSwgJm11dGV4Xyk7Ci0gICAg
VmVyc2lvblNldDo6TGV2ZWxTdW1tYXJ5U3RvcmFnZSB0bXA7Ci0gICAgTG9nKG9wdGlvbnNfLmlu
Zm9fbG9nLCAiTW92ZWQgIyVsbGQgdG8gbGV2ZWwtJWQgJWxsZCBieXRlcyAlczogJXNcbiIsCi0g
ICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oZi0+bnVtYmVyKSwKLSAgICAg
ICAgYy0+bGV2ZWwoKSArIDEsCi0gICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9u
Zz4oZi0+ZmlsZV9zaXplKSwKLSAgICAgICAgc3RhdHVzLlRvU3RyaW5nKCkuY19zdHIoKSwKLSAg
ICAgICAgdmVyc2lvbnNfLT5MZXZlbFN1bW1hcnkoJnRtcCkpOwotICB9IGVsc2UgewotICAgIENv
bXBhY3Rpb25TdGF0ZSogY29tcGFjdCA9IG5ldyBDb21wYWN0aW9uU3RhdGUoYyk7Ci0gICAgc3Rh
dHVzID0gRG9Db21wYWN0aW9uV29yayhjb21wYWN0KTsKLSAgICBDbGVhbnVwQ29tcGFjdGlvbihj
b21wYWN0KTsKLSAgICBjLT5SZWxlYXNlSW5wdXRzKCk7Ci0gICAgRGVsZXRlT2Jzb2xldGVGaWxl
cygpOwotICB9Ci0gIGRlbGV0ZSBjOwotCi0gIGlmIChzdGF0dXMub2soKSkgewotICAgIC8vIERv
bmUKLSAgfSBlbHNlIGlmIChzaHV0dGluZ19kb3duXy5BY3F1aXJlX0xvYWQoKSkgewotICAgIC8v
IElnbm9yZSBjb21wYWN0aW9uIGVycm9ycyBmb3VuZCBkdXJpbmcgc2h1dHRpbmcgZG93bgotICB9
IGVsc2UgewotICAgIExvZyhvcHRpb25zXy5pbmZvX2xvZywKLSAgICAgICAgIkNvbXBhY3Rpb24g
ZXJyb3I6ICVzIiwgc3RhdHVzLlRvU3RyaW5nKCkuY19zdHIoKSk7Ci0gICAgaWYgKG9wdGlvbnNf
LnBhcmFub2lkX2NoZWNrcyAmJiBiZ19lcnJvcl8ub2soKSkgewotICAgICAgYmdfZXJyb3JfID0g
c3RhdHVzOwotICAgIH0KLSAgfQotCi0gIGlmIChpc19tYW51YWwpIHsKLSAgICBNYW51YWxDb21w
YWN0aW9uKiBtID0gbWFudWFsX2NvbXBhY3Rpb25fOwotICAgIGlmICghc3RhdHVzLm9rKCkpIHsK
LSAgICAgIG0tPmRvbmUgPSB0cnVlOwotICAgIH0KLSAgICBpZiAoIW0tPmRvbmUpIHsKLSAgICAg
IC8vIFdlIG9ubHkgY29tcGFjdGVkIHBhcnQgb2YgdGhlIHJlcXVlc3RlZCByYW5nZS4gIFVwZGF0
ZSAqbQotICAgICAgLy8gdG8gdGhlIHJhbmdlIHRoYXQgaXMgbGVmdCB0byBiZSBjb21wYWN0ZWQu
Ci0gICAgICBtLT50bXBfc3RvcmFnZSA9IG1hbnVhbF9lbmQ7Ci0gICAgICBtLT5iZWdpbiA9ICZt
LT50bXBfc3RvcmFnZTsKLSAgICB9Ci0gICAgbWFudWFsX2NvbXBhY3Rpb25fID0gTlVMTDsKLSAg
fQotICByZXR1cm4gc3RhdHVzOwotfQotCi12b2lkIERCSW1wbDo6Q2xlYW51cENvbXBhY3Rpb24o
Q29tcGFjdGlvblN0YXRlKiBjb21wYWN0KSB7Ci0gIG11dGV4Xy5Bc3NlcnRIZWxkKCk7Ci0gIGlm
IChjb21wYWN0LT5idWlsZGVyICE9IE5VTEwpIHsKLSAgICAvLyBNYXkgaGFwcGVuIGlmIHdlIGdl
dCBhIHNodXRkb3duIGNhbGwgaW4gdGhlIG1pZGRsZSBvZiBjb21wYWN0aW9uCi0gICAgY29tcGFj
dC0+YnVpbGRlci0+QWJhbmRvbigpOwotICAgIGRlbGV0ZSBjb21wYWN0LT5idWlsZGVyOwotICB9
IGVsc2UgewotICAgIGFzc2VydChjb21wYWN0LT5vdXRmaWxlID09IE5VTEwpOwotICB9Ci0gIGRl
bGV0ZSBjb21wYWN0LT5vdXRmaWxlOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbXBhY3Qt
Pm91dHB1dHMuc2l6ZSgpOyBpKyspIHsKLSAgICBjb25zdCBDb21wYWN0aW9uU3RhdGU6Ok91dHB1
dCYgb3V0ID0gY29tcGFjdC0+b3V0cHV0c1tpXTsKLSAgICBwZW5kaW5nX291dHB1dHNfLmVyYXNl
KG91dC5udW1iZXIpOwotICB9Ci0gIGRlbGV0ZSBjb21wYWN0OwotfQotCi1TdGF0dXMgREJJbXBs
OjpPcGVuQ29tcGFjdGlvbk91dHB1dEZpbGUoQ29tcGFjdGlvblN0YXRlKiBjb21wYWN0KSB7Ci0g
IGFzc2VydChjb21wYWN0ICE9IE5VTEwpOwotICBhc3NlcnQoY29tcGFjdC0+YnVpbGRlciA9PSBO
VUxMKTsKLSAgdWludDY0X3QgZmlsZV9udW1iZXI7Ci0gIHsKLSAgICBtdXRleF8uTG9jaygpOwot
ICAgIGZpbGVfbnVtYmVyID0gdmVyc2lvbnNfLT5OZXdGaWxlTnVtYmVyKCk7Ci0gICAgcGVuZGlu
Z19vdXRwdXRzXy5pbnNlcnQoZmlsZV9udW1iZXIpOwotICAgIENvbXBhY3Rpb25TdGF0ZTo6T3V0
cHV0IG91dDsKLSAgICBvdXQubnVtYmVyID0gZmlsZV9udW1iZXI7Ci0gICAgb3V0LnNtYWxsZXN0
LkNsZWFyKCk7Ci0gICAgb3V0Lmxhcmdlc3QuQ2xlYXIoKTsKLSAgICBjb21wYWN0LT5vdXRwdXRz
LnB1c2hfYmFjayhvdXQpOwotICAgIG11dGV4Xy5VbmxvY2soKTsKLSAgfQotCi0gIC8vIE1ha2Ug
dGhlIG91dHB1dCBmaWxlCi0gIHN0ZDo6c3RyaW5nIGZuYW1lID0gVGFibGVGaWxlTmFtZShkYm5h
bWVfLCBmaWxlX251bWJlcik7Ci0gIFN0YXR1cyBzID0gZW52Xy0+TmV3V3JpdGFibGVGaWxlKGZu
YW1lLCAmY29tcGFjdC0+b3V0ZmlsZSk7Ci0gIGlmIChzLm9rKCkpIHsKLSAgICBjb21wYWN0LT5i
dWlsZGVyID0gbmV3IFRhYmxlQnVpbGRlcihvcHRpb25zXywgY29tcGFjdC0+b3V0ZmlsZSk7Ci0g
IH0KLSAgcmV0dXJuIHM7Ci19Ci0KLVN0YXR1cyBEQkltcGw6OkZpbmlzaENvbXBhY3Rpb25PdXRw
dXRGaWxlKENvbXBhY3Rpb25TdGF0ZSogY29tcGFjdCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yKiBpbnB1dCkgewotICBhc3NlcnQoY29tcGFjdCAh
PSBOVUxMKTsKLSAgYXNzZXJ0KGNvbXBhY3QtPm91dGZpbGUgIT0gTlVMTCk7Ci0gIGFzc2VydChj
b21wYWN0LT5idWlsZGVyICE9IE5VTEwpOwotCi0gIGNvbnN0IHVpbnQ2NF90IG91dHB1dF9udW1i
ZXIgPSBjb21wYWN0LT5jdXJyZW50X291dHB1dCgpLT5udW1iZXI7Ci0gIGFzc2VydChvdXRwdXRf
bnVtYmVyICE9IDApOwotCi0gIC8vIENoZWNrIGZvciBpdGVyYXRvciBlcnJvcnMKLSAgU3RhdHVz
IHMgPSBpbnB1dC0+c3RhdHVzKCk7Ci0gIGNvbnN0IHVpbnQ2NF90IGN1cnJlbnRfZW50cmllcyA9
IGNvbXBhY3QtPmJ1aWxkZXItPk51bUVudHJpZXMoKTsKLSAgaWYgKHMub2soKSkgewotICAgIHMg
PSBjb21wYWN0LT5idWlsZGVyLT5GaW5pc2goKTsKLSAgfSBlbHNlIHsKLSAgICBjb21wYWN0LT5i
dWlsZGVyLT5BYmFuZG9uKCk7Ci0gIH0KLSAgY29uc3QgdWludDY0X3QgY3VycmVudF9ieXRlcyA9
IGNvbXBhY3QtPmJ1aWxkZXItPkZpbGVTaXplKCk7Ci0gIGNvbXBhY3QtPmN1cnJlbnRfb3V0cHV0
KCktPmZpbGVfc2l6ZSA9IGN1cnJlbnRfYnl0ZXM7Ci0gIGNvbXBhY3QtPnRvdGFsX2J5dGVzICs9
IGN1cnJlbnRfYnl0ZXM7Ci0gIGRlbGV0ZSBjb21wYWN0LT5idWlsZGVyOwotICBjb21wYWN0LT5i
dWlsZGVyID0gTlVMTDsKLQotICAvLyBGaW5pc2ggYW5kIGNoZWNrIGZvciBmaWxlIGVycm9ycwot
ICBpZiAocy5vaygpKSB7Ci0gICAgcyA9IGNvbXBhY3QtPm91dGZpbGUtPlN5bmMoKTsKLSAgfQot
ICBpZiAocy5vaygpKSB7Ci0gICAgcyA9IGNvbXBhY3QtPm91dGZpbGUtPkNsb3NlKCk7Ci0gIH0K
LSAgZGVsZXRlIGNvbXBhY3QtPm91dGZpbGU7Ci0gIGNvbXBhY3QtPm91dGZpbGUgPSBOVUxMOwot
Ci0gIGlmIChzLm9rKCkgJiYgY3VycmVudF9lbnRyaWVzID4gMCkgewotICAgIC8vIFZlcmlmeSB0
aGF0IHRoZSB0YWJsZSBpcyB1c2FibGUKLSAgICBJdGVyYXRvciogaXRlciA9IHRhYmxlX2NhY2hl
Xy0+TmV3SXRlcmF0b3IoUmVhZE9wdGlvbnMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X251bWJlciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9ieXRlcyk7Ci0gICAgcyA9IGl0ZXIt
PnN0YXR1cygpOwotICAgIGRlbGV0ZSBpdGVyOwotICAgIGlmIChzLm9rKCkpIHsKLSAgICAgIExv
ZyhvcHRpb25zXy5pbmZvX2xvZywKLSAgICAgICAgICAiR2VuZXJhdGVkIHRhYmxlICMlbGx1OiAl
bGxkIGtleXMsICVsbGQgYnl0ZXMiLAotICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIG91
dHB1dF9udW1iZXIsCi0gICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgY3VycmVudF9lbnRy
aWVzLAotICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGN1cnJlbnRfYnl0ZXMpOwotICAg
IH0KLSAgfQotICByZXR1cm4gczsKLX0KLQotCi1TdGF0dXMgREJJbXBsOjpJbnN0YWxsQ29tcGFj
dGlvblJlc3VsdHMoQ29tcGFjdGlvblN0YXRlKiBjb21wYWN0KSB7Ci0gIG11dGV4Xy5Bc3NlcnRI
ZWxkKCk7Ci0gIExvZyhvcHRpb25zXy5pbmZvX2xvZywgICJDb21wYWN0ZWQgJWRAJWQgKyAlZEAl
ZCBmaWxlcyA9PiAlbGxkIGJ5dGVzIiwKLSAgICAgIGNvbXBhY3QtPmNvbXBhY3Rpb24tPm51bV9p
bnB1dF9maWxlcygwKSwKLSAgICAgIGNvbXBhY3QtPmNvbXBhY3Rpb24tPmxldmVsKCksCi0gICAg
ICBjb21wYWN0LT5jb21wYWN0aW9uLT5udW1faW5wdXRfZmlsZXMoMSksCi0gICAgICBjb21wYWN0
LT5jb21wYWN0aW9uLT5sZXZlbCgpICsgMSwKLSAgICAgIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4o
Y29tcGFjdC0+dG90YWxfYnl0ZXMpKTsKLQotICAvLyBBZGQgY29tcGFjdGlvbiBvdXRwdXRzCi0g
IGNvbXBhY3QtPmNvbXBhY3Rpb24tPkFkZElucHV0RGVsZXRpb25zKGNvbXBhY3QtPmNvbXBhY3Rp
b24tPmVkaXQoKSk7Ci0gIGNvbnN0IGludCBsZXZlbCA9IGNvbXBhY3QtPmNvbXBhY3Rpb24tPmxl
dmVsKCk7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29tcGFjdC0+b3V0cHV0cy5zaXplKCk7
IGkrKykgewotICAgIGNvbnN0IENvbXBhY3Rpb25TdGF0ZTo6T3V0cHV0JiBvdXQgPSBjb21wYWN0
LT5vdXRwdXRzW2ldOwotICAgIGNvbXBhY3QtPmNvbXBhY3Rpb24tPmVkaXQoKS0+QWRkRmlsZSgK
LSAgICAgICAgbGV2ZWwgKyAxLAotICAgICAgICBvdXQubnVtYmVyLCBvdXQuZmlsZV9zaXplLCBv
dXQuc21hbGxlc3QsIG91dC5sYXJnZXN0KTsKLSAgfQotICByZXR1cm4gdmVyc2lvbnNfLT5Mb2dB
bmRBcHBseShjb21wYWN0LT5jb21wYWN0aW9uLT5lZGl0KCksICZtdXRleF8pOwotfQotCi1TdGF0
dXMgREJJbXBsOjpEb0NvbXBhY3Rpb25Xb3JrKENvbXBhY3Rpb25TdGF0ZSogY29tcGFjdCkgewot
ICBjb25zdCB1aW50NjRfdCBzdGFydF9taWNyb3MgPSBlbnZfLT5Ob3dNaWNyb3MoKTsKLSAgaW50
NjRfdCBpbW1fbWljcm9zID0gMDsgIC8vIE1pY3JvcyBzcGVudCBkb2luZyBpbW1fIGNvbXBhY3Rp
b25zCi0KLSAgTG9nKG9wdGlvbnNfLmluZm9fbG9nLCAgIkNvbXBhY3RpbmcgJWRAJWQgKyAlZEAl
ZCBmaWxlcyIsCi0gICAgICBjb21wYWN0LT5jb21wYWN0aW9uLT5udW1faW5wdXRfZmlsZXMoMCks
Ci0gICAgICBjb21wYWN0LT5jb21wYWN0aW9uLT5sZXZlbCgpLAotICAgICAgY29tcGFjdC0+Y29t
cGFjdGlvbi0+bnVtX2lucHV0X2ZpbGVzKDEpLAotICAgICAgY29tcGFjdC0+Y29tcGFjdGlvbi0+
bGV2ZWwoKSArIDEpOwotCi0gIGFzc2VydCh2ZXJzaW9uc18tPk51bUxldmVsRmlsZXMoY29tcGFj
dC0+Y29tcGFjdGlvbi0+bGV2ZWwoKSkgPiAwKTsKLSAgYXNzZXJ0KGNvbXBhY3QtPmJ1aWxkZXIg
PT0gTlVMTCk7Ci0gIGFzc2VydChjb21wYWN0LT5vdXRmaWxlID09IE5VTEwpOwotICBpZiAoc25h
cHNob3RzXy5lbXB0eSgpKSB7Ci0gICAgY29tcGFjdC0+c21hbGxlc3Rfc25hcHNob3QgPSB2ZXJz
aW9uc18tPkxhc3RTZXF1ZW5jZSgpOwotICB9IGVsc2UgewotICAgIGNvbXBhY3QtPnNtYWxsZXN0
X3NuYXBzaG90ID0gc25hcHNob3RzXy5vbGRlc3QoKS0+bnVtYmVyXzsKLSAgfQotCi0gIC8vIFJl
bGVhc2UgbXV0ZXggd2hpbGUgd2UncmUgYWN0dWFsbHkgZG9pbmcgdGhlIGNvbXBhY3Rpb24gd29y
awotICBtdXRleF8uVW5sb2NrKCk7Ci0KLSAgSXRlcmF0b3IqIGlucHV0ID0gdmVyc2lvbnNfLT5N
YWtlSW5wdXRJdGVyYXRvcihjb21wYWN0LT5jb21wYWN0aW9uKTsKLSAgaW5wdXQtPlNlZWtUb0Zp
cnN0KCk7Ci0gIFN0YXR1cyBzdGF0dXM7Ci0gIFBhcnNlZEludGVybmFsS2V5IGlrZXk7Ci0gIHN0
ZDo6c3RyaW5nIGN1cnJlbnRfdXNlcl9rZXk7Ci0gIGJvb2wgaGFzX2N1cnJlbnRfdXNlcl9rZXkg
PSBmYWxzZTsKLSAgU2VxdWVuY2VOdW1iZXIgbGFzdF9zZXF1ZW5jZV9mb3Jfa2V5ID0ga01heFNl
cXVlbmNlTnVtYmVyOwotICBmb3IgKDsgaW5wdXQtPlZhbGlkKCkgJiYgIXNodXR0aW5nX2Rvd25f
LkFjcXVpcmVfTG9hZCgpOyApIHsKLSAgICAvLyBQcmlvcml0aXplIGltbXV0YWJsZSBjb21wYWN0
aW9uIHdvcmsKLSAgICBpZiAoaGFzX2ltbV8uTm9CYXJyaWVyX0xvYWQoKSAhPSBOVUxMKSB7Ci0g
ICAgICBjb25zdCB1aW50NjRfdCBpbW1fc3RhcnQgPSBlbnZfLT5Ob3dNaWNyb3MoKTsKLSAgICAg
IG11dGV4Xy5Mb2NrKCk7Ci0gICAgICBpZiAoaW1tXyAhPSBOVUxMKSB7Ci0gICAgICAgIENvbXBh
Y3RNZW1UYWJsZSgpOwotICAgICAgICBiZ19jdl8uU2lnbmFsQWxsKCk7ICAvLyBXYWtldXAgTWFr
ZVJvb21Gb3JXcml0ZSgpIGlmIG5lY2Vzc2FyeQotICAgICAgfQotICAgICAgbXV0ZXhfLlVubG9j
aygpOwotICAgICAgaW1tX21pY3JvcyArPSAoZW52Xy0+Tm93TWljcm9zKCkgLSBpbW1fc3RhcnQp
OwotICAgIH0KLQotICAgIFNsaWNlIGtleSA9IGlucHV0LT5rZXkoKTsKLSAgICBpZiAoY29tcGFj
dC0+Y29tcGFjdGlvbi0+U2hvdWxkU3RvcEJlZm9yZShrZXkpICYmCi0gICAgICAgIGNvbXBhY3Qt
PmJ1aWxkZXIgIT0gTlVMTCkgewotICAgICAgc3RhdHVzID0gRmluaXNoQ29tcGFjdGlvbk91dHB1
dEZpbGUoY29tcGFjdCwgaW5wdXQpOwotICAgICAgaWYgKCFzdGF0dXMub2soKSkgewotICAgICAg
ICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBIYW5kbGUga2V5L3ZhbHVlLCBhZGQg
dG8gc3RhdGUsIGV0Yy4KLSAgICBib29sIGRyb3AgPSBmYWxzZTsKLSAgICBpZiAoIVBhcnNlSW50
ZXJuYWxLZXkoa2V5LCAmaWtleSkpIHsKLSAgICAgIC8vIERvIG5vdCBoaWRlIGVycm9yIGtleXMK
LSAgICAgIGN1cnJlbnRfdXNlcl9rZXkuY2xlYXIoKTsKLSAgICAgIGhhc19jdXJyZW50X3VzZXJf
a2V5ID0gZmFsc2U7Ci0gICAgICBsYXN0X3NlcXVlbmNlX2Zvcl9rZXkgPSBrTWF4U2VxdWVuY2VO
dW1iZXI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmICghaGFzX2N1cnJlbnRfdXNlcl9rZXkgfHwK
LSAgICAgICAgICB1c2VyX2NvbXBhcmF0b3IoKS0+Q29tcGFyZShpa2V5LnVzZXJfa2V5LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNsaWNlKGN1cnJlbnRfdXNlcl9rZXkp
KSAhPSAwKSB7Ci0gICAgICAgIC8vIEZpcnN0IG9jY3VycmVuY2Ugb2YgdGhpcyB1c2VyIGtleQot
ICAgICAgICBjdXJyZW50X3VzZXJfa2V5LmFzc2lnbihpa2V5LnVzZXJfa2V5LmRhdGEoKSwgaWtl
eS51c2VyX2tleS5zaXplKCkpOwotICAgICAgICBoYXNfY3VycmVudF91c2VyX2tleSA9IHRydWU7
Ci0gICAgICAgIGxhc3Rfc2VxdWVuY2VfZm9yX2tleSA9IGtNYXhTZXF1ZW5jZU51bWJlcjsKLSAg
ICAgIH0KLQotICAgICAgaWYgKGxhc3Rfc2VxdWVuY2VfZm9yX2tleSA8PSBjb21wYWN0LT5zbWFs
bGVzdF9zbmFwc2hvdCkgewotICAgICAgICAvLyBIaWRkZW4gYnkgYW4gbmV3ZXIgZW50cnkgZm9y
IHNhbWUgdXNlciBrZXkKLSAgICAgICAgZHJvcCA9IHRydWU7ICAgIC8vIChBKQotICAgICAgfSBl
bHNlIGlmIChpa2V5LnR5cGUgPT0ga1R5cGVEZWxldGlvbiAmJgotICAgICAgICAgICAgICAgICBp
a2V5LnNlcXVlbmNlIDw9IGNvbXBhY3QtPnNtYWxsZXN0X3NuYXBzaG90ICYmCi0gICAgICAgICAg
ICAgICAgIGNvbXBhY3QtPmNvbXBhY3Rpb24tPklzQmFzZUxldmVsRm9yS2V5KGlrZXkudXNlcl9r
ZXkpKSB7Ci0gICAgICAgIC8vIEZvciB0aGlzIHVzZXIga2V5OgotICAgICAgICAvLyAoMSkgdGhl
cmUgaXMgbm8gZGF0YSBpbiBoaWdoZXIgbGV2ZWxzCi0gICAgICAgIC8vICgyKSBkYXRhIGluIGxv
d2VyIGxldmVscyB3aWxsIGhhdmUgbGFyZ2VyIHNlcXVlbmNlIG51bWJlcnMKLSAgICAgICAgLy8g
KDMpIGRhdGEgaW4gbGF5ZXJzIHRoYXQgYXJlIGJlaW5nIGNvbXBhY3RlZCBoZXJlIGFuZCBoYXZl
Ci0gICAgICAgIC8vICAgICBzbWFsbGVyIHNlcXVlbmNlIG51bWJlcnMgd2lsbCBiZSBkcm9wcGVk
IGluIHRoZSBuZXh0Ci0gICAgICAgIC8vICAgICBmZXcgaXRlcmF0aW9ucyBvZiB0aGlzIGxvb3Ag
KGJ5IHJ1bGUgKEEpIGFib3ZlKS4KLSAgICAgICAgLy8gVGhlcmVmb3JlIHRoaXMgZGVsZXRpb24g
bWFya2VyIGlzIG9ic29sZXRlIGFuZCBjYW4gYmUgZHJvcHBlZC4KLSAgICAgICAgZHJvcCA9IHRy
dWU7Ci0gICAgICB9Ci0KLSAgICAgIGxhc3Rfc2VxdWVuY2VfZm9yX2tleSA9IGlrZXkuc2VxdWVu
Y2U7Ci0gICAgfQotI2lmIDAKLSAgICBMb2cob3B0aW9uc18uaW5mb19sb2csCi0gICAgICAgICIg
IENvbXBhY3Q6ICVzLCBzZXEgJWQsIHR5cGU6ICVkICVkLCBkcm9wOiAlZCwgaXNfYmFzZTogJWQs
ICIKLSAgICAgICAgIiVkIHNtYWxsZXN0X3NuYXBzaG90OiAlZCIsCi0gICAgICAgIGlrZXkudXNl
cl9rZXkuVG9TdHJpbmcoKS5jX3N0cigpLAotICAgICAgICAoaW50KWlrZXkuc2VxdWVuY2UsIGlr
ZXkudHlwZSwga1R5cGVWYWx1ZSwgZHJvcCwKLSAgICAgICAgY29tcGFjdC0+Y29tcGFjdGlvbi0+
SXNCYXNlTGV2ZWxGb3JLZXkoaWtleS51c2VyX2tleSksCi0gICAgICAgIChpbnQpbGFzdF9zZXF1
ZW5jZV9mb3Jfa2V5LCAoaW50KWNvbXBhY3QtPnNtYWxsZXN0X3NuYXBzaG90KTsKLSNlbmRpZgot
Ci0gICAgaWYgKCFkcm9wKSB7Ci0gICAgICAvLyBPcGVuIG91dHB1dCBmaWxlIGlmIG5lY2Vzc2Fy
eQotICAgICAgaWYgKGNvbXBhY3QtPmJ1aWxkZXIgPT0gTlVMTCkgewotICAgICAgICBzdGF0dXMg
PSBPcGVuQ29tcGFjdGlvbk91dHB1dEZpbGUoY29tcGFjdCk7Ci0gICAgICAgIGlmICghc3RhdHVz
Lm9rKCkpIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYg
KGNvbXBhY3QtPmJ1aWxkZXItPk51bUVudHJpZXMoKSA9PSAwKSB7Ci0gICAgICAgIGNvbXBhY3Qt
PmN1cnJlbnRfb3V0cHV0KCktPnNtYWxsZXN0LkRlY29kZUZyb20oa2V5KTsKLSAgICAgIH0KLSAg
ICAgIGNvbXBhY3QtPmN1cnJlbnRfb3V0cHV0KCktPmxhcmdlc3QuRGVjb2RlRnJvbShrZXkpOwot
ICAgICAgY29tcGFjdC0+YnVpbGRlci0+QWRkKGtleSwgaW5wdXQtPnZhbHVlKCkpOwotCi0gICAg
ICAvLyBDbG9zZSBvdXRwdXQgZmlsZSBpZiBpdCBpcyBiaWcgZW5vdWdoCi0gICAgICBpZiAoY29t
cGFjdC0+YnVpbGRlci0+RmlsZVNpemUoKSA+PQotICAgICAgICAgIGNvbXBhY3QtPmNvbXBhY3Rp
b24tPk1heE91dHB1dEZpbGVTaXplKCkpIHsKLSAgICAgICAgc3RhdHVzID0gRmluaXNoQ29tcGFj
dGlvbk91dHB1dEZpbGUoY29tcGFjdCwgaW5wdXQpOwotICAgICAgICBpZiAoIXN0YXR1cy5vaygp
KSB7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBp
bnB1dC0+TmV4dCgpOwotICB9Ci0KLSAgaWYgKHN0YXR1cy5vaygpICYmIHNodXR0aW5nX2Rvd25f
LkFjcXVpcmVfTG9hZCgpKSB7Ci0gICAgc3RhdHVzID0gU3RhdHVzOjpJT0Vycm9yKCJEZWxldGlu
ZyBEQiBkdXJpbmcgY29tcGFjdGlvbiIpOwotICB9Ci0gIGlmIChzdGF0dXMub2soKSAmJiBjb21w
YWN0LT5idWlsZGVyICE9IE5VTEwpIHsKLSAgICBzdGF0dXMgPSBGaW5pc2hDb21wYWN0aW9uT3V0
cHV0RmlsZShjb21wYWN0LCBpbnB1dCk7Ci0gIH0KLSAgaWYgKHN0YXR1cy5vaygpKSB7Ci0gICAg
c3RhdHVzID0gaW5wdXQtPnN0YXR1cygpOwotICB9Ci0gIGRlbGV0ZSBpbnB1dDsKLSAgaW5wdXQg
PSBOVUxMOwotCi0gIENvbXBhY3Rpb25TdGF0cyBzdGF0czsKLSAgc3RhdHMubWljcm9zID0gZW52
Xy0+Tm93TWljcm9zKCkgLSBzdGFydF9taWNyb3MgLSBpbW1fbWljcm9zOwotICBmb3IgKGludCB3
aGljaCA9IDA7IHdoaWNoIDwgMjsgd2hpY2grKykgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y29tcGFjdC0+Y29tcGFjdGlvbi0+bnVtX2lucHV0X2ZpbGVzKHdoaWNoKTsgaSsrKSB7Ci0gICAg
ICBzdGF0cy5ieXRlc19yZWFkICs9IGNvbXBhY3QtPmNvbXBhY3Rpb24tPmlucHV0KHdoaWNoLCBp
KS0+ZmlsZV9zaXplOwotICAgIH0KLSAgfQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbXBh
Y3QtPm91dHB1dHMuc2l6ZSgpOyBpKyspIHsKLSAgICBzdGF0cy5ieXRlc193cml0dGVuICs9IGNv
bXBhY3QtPm91dHB1dHNbaV0uZmlsZV9zaXplOwotICB9Ci0KLSAgbXV0ZXhfLkxvY2soKTsKLSAg
c3RhdHNfW2NvbXBhY3QtPmNvbXBhY3Rpb24tPmxldmVsKCkgKyAxXS5BZGQoc3RhdHMpOwotCi0g
IGlmIChzdGF0dXMub2soKSkgewotICAgIHN0YXR1cyA9IEluc3RhbGxDb21wYWN0aW9uUmVzdWx0
cyhjb21wYWN0KTsKLSAgfQotICBWZXJzaW9uU2V0OjpMZXZlbFN1bW1hcnlTdG9yYWdlIHRtcDsK
LSAgTG9nKG9wdGlvbnNfLmluZm9fbG9nLAotICAgICAgImNvbXBhY3RlZCB0bzogJXMiLCB2ZXJz
aW9uc18tPkxldmVsU3VtbWFyeSgmdG1wKSk7Ci0gIHJldHVybiBzdGF0dXM7Ci19Ci0KLW5hbWVz
cGFjZSB7Ci1zdHJ1Y3QgSXRlclN0YXRlIHsKLSAgcG9ydDo6TXV0ZXgqIG11OwotICBWZXJzaW9u
KiB2ZXJzaW9uOwotICBNZW1UYWJsZSogbWVtOwotICBNZW1UYWJsZSogaW1tOwotfTsKLQotc3Rh
dGljIHZvaWQgQ2xlYW51cEl0ZXJhdG9yU3RhdGUodm9pZCogYXJnMSwgdm9pZCogYXJnMikgewot
ICBJdGVyU3RhdGUqIHN0YXRlID0gcmVpbnRlcnByZXRfY2FzdDxJdGVyU3RhdGUqPihhcmcxKTsK
LSAgc3RhdGUtPm11LT5Mb2NrKCk7Ci0gIHN0YXRlLT5tZW0tPlVucmVmKCk7Ci0gIGlmIChzdGF0
ZS0+aW1tICE9IE5VTEwpIHN0YXRlLT5pbW0tPlVucmVmKCk7Ci0gIHN0YXRlLT52ZXJzaW9uLT5V
bnJlZigpOwotICBzdGF0ZS0+bXUtPlVubG9jaygpOwotICBkZWxldGUgc3RhdGU7Ci19Ci19ICAv
LyBuYW1lc3BhY2UKLQotSXRlcmF0b3IqIERCSW1wbDo6TmV3SW50ZXJuYWxJdGVyYXRvcihjb25z
dCBSZWFkT3B0aW9ucyYgb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU2VxdWVuY2VOdW1iZXIqIGxhdGVzdF9zbmFwc2hvdCkgewotICBJdGVyU3RhdGUqIGNs
ZWFudXAgPSBuZXcgSXRlclN0YXRlOwotICBtdXRleF8uTG9jaygpOwotICAqbGF0ZXN0X3NuYXBz
aG90ID0gdmVyc2lvbnNfLT5MYXN0U2VxdWVuY2UoKTsKLQotICAvLyBDb2xsZWN0IHRvZ2V0aGVy
IGFsbCBuZWVkZWQgY2hpbGQgaXRlcmF0b3JzCi0gIHN0ZDo6dmVjdG9yPEl0ZXJhdG9yKj4gbGlz
dDsKLSAgbGlzdC5wdXNoX2JhY2sobWVtXy0+TmV3SXRlcmF0b3IoKSk7Ci0gIG1lbV8tPlJlZigp
OwotICBpZiAoaW1tXyAhPSBOVUxMKSB7Ci0gICAgbGlzdC5wdXNoX2JhY2soaW1tXy0+TmV3SXRl
cmF0b3IoKSk7Ci0gICAgaW1tXy0+UmVmKCk7Ci0gIH0KLSAgdmVyc2lvbnNfLT5jdXJyZW50KCkt
PkFkZEl0ZXJhdG9ycyhvcHRpb25zLCAmbGlzdCk7Ci0gIEl0ZXJhdG9yKiBpbnRlcm5hbF9pdGVy
ID0KLSAgICAgIE5ld01lcmdpbmdJdGVyYXRvcigmaW50ZXJuYWxfY29tcGFyYXRvcl8sICZsaXN0
WzBdLCBsaXN0LnNpemUoKSk7Ci0gIHZlcnNpb25zXy0+Y3VycmVudCgpLT5SZWYoKTsKLQotICBj
bGVhbnVwLT5tdSA9ICZtdXRleF87Ci0gIGNsZWFudXAtPm1lbSA9IG1lbV87Ci0gIGNsZWFudXAt
PmltbSA9IGltbV87Ci0gIGNsZWFudXAtPnZlcnNpb24gPSB2ZXJzaW9uc18tPmN1cnJlbnQoKTsK
LSAgaW50ZXJuYWxfaXRlci0+UmVnaXN0ZXJDbGVhbnVwKENsZWFudXBJdGVyYXRvclN0YXRlLCBj
bGVhbnVwLCBOVUxMKTsKLQotICBtdXRleF8uVW5sb2NrKCk7Ci0gIHJldHVybiBpbnRlcm5hbF9p
dGVyOwotfQotCi1JdGVyYXRvciogREJJbXBsOjpURVNUX05ld0ludGVybmFsSXRlcmF0b3IoKSB7
Ci0gIFNlcXVlbmNlTnVtYmVyIGlnbm9yZWQ7Ci0gIHJldHVybiBOZXdJbnRlcm5hbEl0ZXJhdG9y
KFJlYWRPcHRpb25zKCksICZpZ25vcmVkKTsKLX0KLQotaW50NjRfdCBEQkltcGw6OlRFU1RfTWF4
TmV4dExldmVsT3ZlcmxhcHBpbmdCeXRlcygpIHsKLSAgTXV0ZXhMb2NrIGwoJm11dGV4Xyk7Ci0g
IHJldHVybiB2ZXJzaW9uc18tPk1heE5leHRMZXZlbE92ZXJsYXBwaW5nQnl0ZXMoKTsKLX0KLQot
U3RhdHVzIERCSW1wbDo6R2V0KGNvbnN0IFJlYWRPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFNsaWNlJiBrZXksCi0gICAgICAgICAgICAgICAgICAgc3RkOjpzdHJp
bmcqIHZhbHVlKSB7Ci0gIFN0YXR1cyBzOwotICBNdXRleExvY2sgbCgmbXV0ZXhfKTsKLSAgU2Vx
dWVuY2VOdW1iZXIgc25hcHNob3Q7Ci0gIGlmIChvcHRpb25zLnNuYXBzaG90ICE9IE5VTEwpIHsK
LSAgICBzbmFwc2hvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgU25hcHNob3RJbXBsKj4ob3B0
aW9ucy5zbmFwc2hvdCktPm51bWJlcl87Ci0gIH0gZWxzZSB7Ci0gICAgc25hcHNob3QgPSB2ZXJz
aW9uc18tPkxhc3RTZXF1ZW5jZSgpOwotICB9Ci0KLSAgTWVtVGFibGUqIG1lbSA9IG1lbV87Ci0g
IE1lbVRhYmxlKiBpbW0gPSBpbW1fOwotICBWZXJzaW9uKiBjdXJyZW50ID0gdmVyc2lvbnNfLT5j
dXJyZW50KCk7Ci0gIG1lbS0+UmVmKCk7Ci0gIGlmIChpbW0gIT0gTlVMTCkgaW1tLT5SZWYoKTsK
LSAgY3VycmVudC0+UmVmKCk7Ci0KLSAgYm9vbCBoYXZlX3N0YXRfdXBkYXRlID0gZmFsc2U7Ci0g
IFZlcnNpb246OkdldFN0YXRzIHN0YXRzOwotCi0gIC8vIFVubG9jayB3aGlsZSByZWFkaW5nIGZy
b20gZmlsZXMgYW5kIG1lbXRhYmxlcwotICB7Ci0gICAgbXV0ZXhfLlVubG9jaygpOwotICAgIC8v
IEZpcnN0IGxvb2sgaW4gdGhlIG1lbXRhYmxlLCB0aGVuIGluIHRoZSBpbW11dGFibGUgbWVtdGFi
bGUgKGlmIGFueSkuCi0gICAgTG9va3VwS2V5IGxrZXkoa2V5LCBzbmFwc2hvdCk7Ci0gICAgaWYg
KG1lbS0+R2V0KGxrZXksIHZhbHVlLCAmcykpIHsKLSAgICAgIC8vIERvbmUKLSAgICB9IGVsc2Ug
aWYgKGltbSAhPSBOVUxMICYmIGltbS0+R2V0KGxrZXksIHZhbHVlLCAmcykpIHsKLSAgICAgIC8v
IERvbmUKLSAgICB9IGVsc2UgewotICAgICAgcyA9IGN1cnJlbnQtPkdldChvcHRpb25zLCBsa2V5
LCB2YWx1ZSwgJnN0YXRzKTsKLSAgICAgIGhhdmVfc3RhdF91cGRhdGUgPSB0cnVlOwotICAgIH0K
LSAgICBtdXRleF8uTG9jaygpOwotICB9Ci0KLSAgaWYgKGhhdmVfc3RhdF91cGRhdGUgJiYgY3Vy
cmVudC0+VXBkYXRlU3RhdHMoc3RhdHMpKSB7Ci0gICAgTWF5YmVTY2hlZHVsZUNvbXBhY3Rpb24o
KTsKLSAgfQotICBtZW0tPlVucmVmKCk7Ci0gIGlmIChpbW0gIT0gTlVMTCkgaW1tLT5VbnJlZigp
OwotICBjdXJyZW50LT5VbnJlZigpOwotICByZXR1cm4gczsKLX0KLQotSXRlcmF0b3IqIERCSW1w
bDo6TmV3SXRlcmF0b3IoY29uc3QgUmVhZE9wdGlvbnMmIG9wdGlvbnMpIHsKLSAgU2VxdWVuY2VO
dW1iZXIgbGF0ZXN0X3NuYXBzaG90OwotICBJdGVyYXRvciogaW50ZXJuYWxfaXRlciA9IE5ld0lu
dGVybmFsSXRlcmF0b3Iob3B0aW9ucywgJmxhdGVzdF9zbmFwc2hvdCk7Ci0gIHJldHVybiBOZXdE
Qkl0ZXJhdG9yKAotICAgICAgJmRibmFtZV8sIGVudl8sIHVzZXJfY29tcGFyYXRvcigpLCBpbnRl
cm5hbF9pdGVyLAotICAgICAgKG9wdGlvbnMuc25hcHNob3QgIT0gTlVMTAotICAgICAgID8gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBTbmFwc2hvdEltcGwqPihvcHRpb25zLnNuYXBzaG90KS0+bnVt
YmVyXwotICAgICAgIDogbGF0ZXN0X3NuYXBzaG90KSk7Ci19Ci0KLWNvbnN0IFNuYXBzaG90KiBE
QkltcGw6OkdldFNuYXBzaG90KCkgewotICBNdXRleExvY2sgbCgmbXV0ZXhfKTsKLSAgcmV0dXJu
IHNuYXBzaG90c18uTmV3KHZlcnNpb25zXy0+TGFzdFNlcXVlbmNlKCkpOwotfQotCi12b2lkIERC
SW1wbDo6UmVsZWFzZVNuYXBzaG90KGNvbnN0IFNuYXBzaG90KiBzKSB7Ci0gIE11dGV4TG9jayBs
KCZtdXRleF8pOwotICBzbmFwc2hvdHNfLkRlbGV0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IFNu
YXBzaG90SW1wbCo+KHMpKTsKLX0KLQotLy8gQ29udmVuaWVuY2UgbWV0aG9kcwotU3RhdHVzIERC
SW1wbDo6UHV0KGNvbnN0IFdyaXRlT3B0aW9ucyYgbywgY29uc3QgU2xpY2UmIGtleSwgY29uc3Qg
U2xpY2UmIHZhbCkgewotICByZXR1cm4gREI6OlB1dChvLCBrZXksIHZhbCk7Ci19Ci0KLVN0YXR1
cyBEQkltcGw6OkRlbGV0ZShjb25zdCBXcml0ZU9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IFNsaWNl
JiBrZXkpIHsKLSAgcmV0dXJuIERCOjpEZWxldGUob3B0aW9ucywga2V5KTsKLX0KLQotU3RhdHVz
IERCSW1wbDo6V3JpdGUoY29uc3QgV3JpdGVPcHRpb25zJiBvcHRpb25zLCBXcml0ZUJhdGNoKiBt
eV9iYXRjaCkgewotICBXcml0ZXIgdygmbXV0ZXhfKTsKLSAgdy5iYXRjaCA9IG15X2JhdGNoOwot
ICB3LnN5bmMgPSBvcHRpb25zLnN5bmM7Ci0gIHcuZG9uZSA9IGZhbHNlOwotCi0gIE11dGV4TG9j
ayBsKCZtdXRleF8pOwotICB3cml0ZXJzXy5wdXNoX2JhY2soJncpOwotICB3aGlsZSAoIXcuZG9u
ZSAmJiAmdyAhPSB3cml0ZXJzXy5mcm9udCgpKSB7Ci0gICAgdy5jdi5XYWl0KCk7Ci0gIH0KLSAg
aWYgKHcuZG9uZSkgewotICAgIHJldHVybiB3LnN0YXR1czsKLSAgfQotCi0gIC8vIE1heSB0ZW1w
b3JhcmlseSB1bmxvY2sgYW5kIHdhaXQuCi0gIFN0YXR1cyBzdGF0dXMgPSBNYWtlUm9vbUZvcldy
aXRlKG15X2JhdGNoID09IE5VTEwpOwotICB1aW50NjRfdCBsYXN0X3NlcXVlbmNlID0gdmVyc2lv
bnNfLT5MYXN0U2VxdWVuY2UoKTsKLSAgV3JpdGVyKiBsYXN0X3dyaXRlciA9ICZ3OwotICBpZiAo
c3RhdHVzLm9rKCkgJiYgbXlfYmF0Y2ggIT0gTlVMTCkgeyAgLy8gTlVMTCBiYXRjaCBpcyBmb3Ig
Y29tcGFjdGlvbnMKLSAgICBXcml0ZUJhdGNoKiB1cGRhdGVzID0gQnVpbGRCYXRjaEdyb3VwKCZs
YXN0X3dyaXRlcik7Ci0gICAgV3JpdGVCYXRjaEludGVybmFsOjpTZXRTZXF1ZW5jZSh1cGRhdGVz
LCBsYXN0X3NlcXVlbmNlICsgMSk7Ci0gICAgbGFzdF9zZXF1ZW5jZSArPSBXcml0ZUJhdGNoSW50
ZXJuYWw6OkNvdW50KHVwZGF0ZXMpOwotCi0gICAgLy8gQWRkIHRvIGxvZyBhbmQgYXBwbHkgdG8g
bWVtdGFibGUuICBXZSBjYW4gcmVsZWFzZSB0aGUgbG9jawotICAgIC8vIGR1cmluZyB0aGlzIHBo
YXNlIHNpbmNlICZ3IGlzIGN1cnJlbnRseSByZXNwb25zaWJsZSBmb3IgbG9nZ2luZwotICAgIC8v
IGFuZCBwcm90ZWN0cyBhZ2FpbnN0IGNvbmN1cnJlbnQgbG9nZ2VycyBhbmQgY29uY3VycmVudCB3
cml0ZXMKLSAgICAvLyBpbnRvIG1lbV8uCi0gICAgewotICAgICAgbXV0ZXhfLlVubG9jaygpOwot
ICAgICAgc3RhdHVzID0gbG9nXy0+QWRkUmVjb3JkKFdyaXRlQmF0Y2hJbnRlcm5hbDo6Q29udGVu
dHModXBkYXRlcykpOwotICAgICAgaWYgKHN0YXR1cy5vaygpICYmIG9wdGlvbnMuc3luYykgewot
ICAgICAgICBzdGF0dXMgPSBsb2dmaWxlXy0+U3luYygpOwotICAgICAgfQotICAgICAgaWYgKHN0
YXR1cy5vaygpKSB7Ci0gICAgICAgIHN0YXR1cyA9IFdyaXRlQmF0Y2hJbnRlcm5hbDo6SW5zZXJ0
SW50byh1cGRhdGVzLCBtZW1fKTsKLSAgICAgIH0KLSAgICAgIG11dGV4Xy5Mb2NrKCk7Ci0gICAg
fQotICAgIGlmICh1cGRhdGVzID09IHRtcF9iYXRjaF8pIHRtcF9iYXRjaF8tPkNsZWFyKCk7Ci0K
LSAgICB2ZXJzaW9uc18tPlNldExhc3RTZXF1ZW5jZShsYXN0X3NlcXVlbmNlKTsKLSAgfQotCi0g
IHdoaWxlICh0cnVlKSB7Ci0gICAgV3JpdGVyKiByZWFkeSA9IHdyaXRlcnNfLmZyb250KCk7Ci0g
ICAgd3JpdGVyc18ucG9wX2Zyb250KCk7Ci0gICAgaWYgKHJlYWR5ICE9ICZ3KSB7Ci0gICAgICBy
ZWFkeS0+c3RhdHVzID0gc3RhdHVzOwotICAgICAgcmVhZHktPmRvbmUgPSB0cnVlOwotICAgICAg
cmVhZHktPmN2LlNpZ25hbCgpOwotICAgIH0KLSAgICBpZiAocmVhZHkgPT0gbGFzdF93cml0ZXIp
IGJyZWFrOwotICB9Ci0KLSAgLy8gTm90aWZ5IG5ldyBoZWFkIG9mIHdyaXRlIHF1ZXVlCi0gIGlm
ICghd3JpdGVyc18uZW1wdHkoKSkgewotICAgIHdyaXRlcnNfLmZyb250KCktPmN2LlNpZ25hbCgp
OwotICB9Ci0KLSAgcmV0dXJuIHN0YXR1czsKLX0KLQotLy8gUkVRVUlSRVM6IFdyaXRlciBsaXN0
IG11c3QgYmUgbm9uLWVtcHR5Ci0vLyBSRVFVSVJFUzogRmlyc3Qgd3JpdGVyIG11c3QgaGF2ZSBh
IG5vbi1OVUxMIGJhdGNoCi1Xcml0ZUJhdGNoKiBEQkltcGw6OkJ1aWxkQmF0Y2hHcm91cChXcml0
ZXIqKiBsYXN0X3dyaXRlcikgewotICBhc3NlcnQoIXdyaXRlcnNfLmVtcHR5KCkpOwotICBXcml0
ZXIqIGZpcnN0ID0gd3JpdGVyc18uZnJvbnQoKTsKLSAgV3JpdGVCYXRjaCogcmVzdWx0ID0gZmly
c3QtPmJhdGNoOwotICBhc3NlcnQocmVzdWx0ICE9IE5VTEwpOwotCi0gIHNpemVfdCBzaXplID0g
V3JpdGVCYXRjaEludGVybmFsOjpCeXRlU2l6ZShmaXJzdC0+YmF0Y2gpOwotCi0gIC8vIEFsbG93
IHRoZSBncm91cCB0byBncm93IHVwIHRvIGEgbWF4aW11bSBzaXplLCBidXQgaWYgdGhlCi0gIC8v
IG9yaWdpbmFsIHdyaXRlIGlzIHNtYWxsLCBsaW1pdCB0aGUgZ3Jvd3RoIHNvIHdlIGRvIG5vdCBz
bG93Ci0gIC8vIGRvd24gdGhlIHNtYWxsIHdyaXRlIHRvbyBtdWNoLgotICBzaXplX3QgbWF4X3Np
emUgPSAxIDw8IDIwOwotICBpZiAoc2l6ZSA8PSAoMTI4PDwxMCkpIHsKLSAgICBtYXhfc2l6ZSA9
IHNpemUgKyAoMTI4PDwxMCk7Ci0gIH0KLQotICAqbGFzdF93cml0ZXIgPSBmaXJzdDsKLSAgc3Rk
OjpkZXF1ZTxXcml0ZXIqPjo6aXRlcmF0b3IgaXRlciA9IHdyaXRlcnNfLmJlZ2luKCk7Ci0gICsr
aXRlcjsgIC8vIEFkdmFuY2UgcGFzdCAiZmlyc3QiCi0gIGZvciAoOyBpdGVyICE9IHdyaXRlcnNf
LmVuZCgpOyArK2l0ZXIpIHsKLSAgICBXcml0ZXIqIHcgPSAqaXRlcjsKLSAgICBpZiAody0+c3lu
YyAmJiAhZmlyc3QtPnN5bmMpIHsKLSAgICAgIC8vIERvIG5vdCBpbmNsdWRlIGEgc3luYyB3cml0
ZSBpbnRvIGEgYmF0Y2ggaGFuZGxlZCBieSBhIG5vbi1zeW5jIHdyaXRlLgotICAgICAgYnJlYWs7
Ci0gICAgfQotCi0gICAgaWYgKHctPmJhdGNoICE9IE5VTEwpIHsKLSAgICAgIHNpemUgKz0gV3Jp
dGVCYXRjaEludGVybmFsOjpCeXRlU2l6ZSh3LT5iYXRjaCk7Ci0gICAgICBpZiAoc2l6ZSA+IG1h
eF9zaXplKSB7Ci0gICAgICAgIC8vIERvIG5vdCBtYWtlIGJhdGNoIHRvbyBiaWcKLSAgICAgICAg
YnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEFwcGVuZCB0byAqcmV1c2x0Ci0gICAgICBpZiAo
cmVzdWx0ID09IGZpcnN0LT5iYXRjaCkgewotICAgICAgICAvLyBTd2l0Y2ggdG8gdGVtcG9yYXJ5
IGJhdGNoIGluc3RlYWQgb2YgZGlzdHVyYmluZyBjYWxsZXIncyBiYXRjaAotICAgICAgICByZXN1
bHQgPSB0bXBfYmF0Y2hfOwotICAgICAgICBhc3NlcnQoV3JpdGVCYXRjaEludGVybmFsOjpDb3Vu
dChyZXN1bHQpID09IDApOwotICAgICAgICBXcml0ZUJhdGNoSW50ZXJuYWw6OkFwcGVuZChyZXN1
bHQsIGZpcnN0LT5iYXRjaCk7Ci0gICAgICB9Ci0gICAgICBXcml0ZUJhdGNoSW50ZXJuYWw6OkFw
cGVuZChyZXN1bHQsIHctPmJhdGNoKTsKLSAgICB9Ci0gICAgKmxhc3Rfd3JpdGVyID0gdzsKLSAg
fQotICByZXR1cm4gcmVzdWx0OwotfQotCi0vLyBSRVFVSVJFUzogbXV0ZXhfIGlzIGhlbGQKLS8v
IFJFUVVJUkVTOiB0aGlzIHRocmVhZCBpcyBjdXJyZW50bHkgYXQgdGhlIGZyb250IG9mIHRoZSB3
cml0ZXIgcXVldWUKLVN0YXR1cyBEQkltcGw6Ok1ha2VSb29tRm9yV3JpdGUoYm9vbCBmb3JjZSkg
ewotICBtdXRleF8uQXNzZXJ0SGVsZCgpOwotICBhc3NlcnQoIXdyaXRlcnNfLmVtcHR5KCkpOwot
ICBib29sIGFsbG93X2RlbGF5ID0gIWZvcmNlOwotICBTdGF0dXMgczsKLSAgd2hpbGUgKHRydWUp
IHsKLSAgICBpZiAoIWJnX2Vycm9yXy5vaygpKSB7Ci0gICAgICAvLyBZaWVsZCBwcmV2aW91cyBl
cnJvcgotICAgICAgcyA9IGJnX2Vycm9yXzsKLSAgICAgIGJyZWFrOwotICAgIH0gZWxzZSBpZiAo
Ci0gICAgICAgIGFsbG93X2RlbGF5ICYmCi0gICAgICAgIHZlcnNpb25zXy0+TnVtTGV2ZWxGaWxl
cygwKSA+PSBjb25maWc6OmtMMF9TbG93ZG93bldyaXRlc1RyaWdnZXIpIHsKLSAgICAgIC8vIFdl
IGFyZSBnZXR0aW5nIGNsb3NlIHRvIGhpdHRpbmcgYSBoYXJkIGxpbWl0IG9uIHRoZSBudW1iZXIg
b2YKLSAgICAgIC8vIEwwIGZpbGVzLiAgUmF0aGVyIHRoYW4gZGVsYXlpbmcgYSBzaW5nbGUgd3Jp
dGUgYnkgc2V2ZXJhbAotICAgICAgLy8gc2Vjb25kcyB3aGVuIHdlIGhpdCB0aGUgaGFyZCBsaW1p
dCwgc3RhcnQgZGVsYXlpbmcgZWFjaAotICAgICAgLy8gaW5kaXZpZHVhbCB3cml0ZSBieSAxbXMg
dG8gcmVkdWNlIGxhdGVuY3kgdmFyaWFuY2UuICBBbHNvLAotICAgICAgLy8gdGhpcyBkZWxheSBo
YW5kcyBvdmVyIHNvbWUgQ1BVIHRvIHRoZSBjb21wYWN0aW9uIHRocmVhZCBpbgotICAgICAgLy8g
Y2FzZSBpdCBpcyBzaGFyaW5nIHRoZSBzYW1lIGNvcmUgYXMgdGhlIHdyaXRlci4KLSAgICAgIG11
dGV4Xy5VbmxvY2soKTsKLSAgICAgIGVudl8tPlNsZWVwRm9yTWljcm9zZWNvbmRzKDEwMDApOwot
ICAgICAgYWxsb3dfZGVsYXkgPSBmYWxzZTsgIC8vIERvIG5vdCBkZWxheSBhIHNpbmdsZSB3cml0
ZSBtb3JlIHRoYW4gb25jZQotICAgICAgbXV0ZXhfLkxvY2soKTsKLSAgICB9IGVsc2UgaWYgKCFm
b3JjZSAmJgotICAgICAgICAgICAgICAgKG1lbV8tPkFwcHJveGltYXRlTWVtb3J5VXNhZ2UoKSA8
PSBvcHRpb25zXy53cml0ZV9idWZmZXJfc2l6ZSkpIHsKLSAgICAgIC8vIFRoZXJlIGlzIHJvb20g
aW4gY3VycmVudCBtZW10YWJsZQotICAgICAgYnJlYWs7Ci0gICAgfSBlbHNlIGlmIChpbW1fICE9
IE5VTEwpIHsKLSAgICAgIC8vIFdlIGhhdmUgZmlsbGVkIHVwIHRoZSBjdXJyZW50IG1lbXRhYmxl
LCBidXQgdGhlIHByZXZpb3VzCi0gICAgICAvLyBvbmUgaXMgc3RpbGwgYmVpbmcgY29tcGFjdGVk
LCBzbyB3ZSB3YWl0LgotICAgICAgYmdfY3ZfLldhaXQoKTsKLSAgICB9IGVsc2UgaWYgKHZlcnNp
b25zXy0+TnVtTGV2ZWxGaWxlcygwKSA+PSBjb25maWc6OmtMMF9TdG9wV3JpdGVzVHJpZ2dlcikg
ewotICAgICAgLy8gVGhlcmUgYXJlIHRvbyBtYW55IGxldmVsLTAgZmlsZXMuCi0gICAgICBMb2co
b3B0aW9uc18uaW5mb19sb2csICJ3YWl0aW5nLi4uXG4iKTsKLSAgICAgIGJnX2N2Xy5XYWl0KCk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIEF0dGVtcHQgdG8gc3dpdGNoIHRvIGEgbmV3IG1lbXRh
YmxlIGFuZCB0cmlnZ2VyIGNvbXBhY3Rpb24gb2Ygb2xkCi0gICAgICBhc3NlcnQodmVyc2lvbnNf
LT5QcmV2TG9nTnVtYmVyKCkgPT0gMCk7Ci0gICAgICB1aW50NjRfdCBuZXdfbG9nX251bWJlciA9
IHZlcnNpb25zXy0+TmV3RmlsZU51bWJlcigpOwotICAgICAgV3JpdGFibGVGaWxlKiBsZmlsZSA9
IE5VTEw7Ci0gICAgICBzID0gZW52Xy0+TmV3V3JpdGFibGVGaWxlKExvZ0ZpbGVOYW1lKGRibmFt
ZV8sIG5ld19sb2dfbnVtYmVyKSwgJmxmaWxlKTsKLSAgICAgIGlmICghcy5vaygpKSB7Ci0gICAg
ICAgIC8vIEF2b2lkIGNoZXdpbmcgdGhyb3VnaCBmaWxlIG51bWJlciBzcGFjZSBpbiBhIHRpZ2h0
IGxvb3AuCi0gICAgICAgIHZlcnNpb25zXy0+UmV1c2VGaWxlTnVtYmVyKG5ld19sb2dfbnVtYmVy
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBkZWxldGUgbG9nXzsKLSAgICAgIGRl
bGV0ZSBsb2dmaWxlXzsKLSAgICAgIGxvZ2ZpbGVfID0gbGZpbGU7Ci0gICAgICBsb2dmaWxlX251
bWJlcl8gPSBuZXdfbG9nX251bWJlcjsKLSAgICAgIGxvZ18gPSBuZXcgbG9nOjpXcml0ZXIobGZp
bGUpOwotICAgICAgaW1tXyA9IG1lbV87Ci0gICAgICBoYXNfaW1tXy5SZWxlYXNlX1N0b3JlKGlt
bV8pOwotICAgICAgbWVtXyA9IG5ldyBNZW1UYWJsZShpbnRlcm5hbF9jb21wYXJhdG9yXyk7Ci0g
ICAgICBtZW1fLT5SZWYoKTsKLSAgICAgIGZvcmNlID0gZmFsc2U7ICAgLy8gRG8gbm90IGZvcmNl
IGFub3RoZXIgY29tcGFjdGlvbiBpZiBoYXZlIHJvb20KLSAgICAgIE1heWJlU2NoZWR1bGVDb21w
YWN0aW9uKCk7Ci0gICAgfQotICB9Ci0gIHJldHVybiBzOwotfQotCi1ib29sIERCSW1wbDo6R2V0
UHJvcGVydHkoY29uc3QgU2xpY2UmIHByb3BlcnR5LCBzdGQ6OnN0cmluZyogdmFsdWUpIHsKLSAg
dmFsdWUtPmNsZWFyKCk7Ci0KLSAgTXV0ZXhMb2NrIGwoJm11dGV4Xyk7Ci0gIFNsaWNlIGluID0g
cHJvcGVydHk7Ci0gIFNsaWNlIHByZWZpeCgibGV2ZWxkYi4iKTsKLSAgaWYgKCFpbi5zdGFydHNf
d2l0aChwcmVmaXgpKSByZXR1cm4gZmFsc2U7Ci0gIGluLnJlbW92ZV9wcmVmaXgocHJlZml4LnNp
emUoKSk7Ci0KLSAgaWYgKGluLnN0YXJ0c193aXRoKCJudW0tZmlsZXMtYXQtbGV2ZWwiKSkgewot
ICAgIGluLnJlbW92ZV9wcmVmaXgoc3RybGVuKCJudW0tZmlsZXMtYXQtbGV2ZWwiKSk7Ci0gICAg
dWludDY0X3QgbGV2ZWw7Ci0gICAgYm9vbCBvayA9IENvbnN1bWVEZWNpbWFsTnVtYmVyKCZpbiwg
JmxldmVsKSAmJiBpbi5lbXB0eSgpOwotICAgIGlmICghb2sgfHwgbGV2ZWwgPj0gY29uZmlnOjpr
TnVtTGV2ZWxzKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGNo
YXIgYnVmWzEwMF07Ci0gICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQiLAotICAg
ICAgICAgICAgICAgdmVyc2lvbnNfLT5OdW1MZXZlbEZpbGVzKHN0YXRpY19jYXN0PGludD4obGV2
ZWwpKSk7Ci0gICAgICAqdmFsdWUgPSBidWY7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
IH0gZWxzZSBpZiAoaW4gPT0gInN0YXRzIikgewotICAgIGNoYXIgYnVmWzIwMF07Ci0gICAgc25w
cmludGYoYnVmLCBzaXplb2YoYnVmKSwKLSAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENvbXBhY3Rpb25zXG4iCi0gICAgICAgICAgICAgIkxldmVsICBGaWxlcyBT
aXplKE1CKSBUaW1lKHNlYykgUmVhZChNQikgV3JpdGUoTUIpXG4iCi0gICAgICAgICAgICAgIi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCi0gICAg
ICAgICAgICAgKTsKLSAgICB2YWx1ZS0+YXBwZW5kKGJ1Zik7Ci0gICAgZm9yIChpbnQgbGV2ZWwg
PSAwOyBsZXZlbCA8IGNvbmZpZzo6a051bUxldmVsczsgbGV2ZWwrKykgewotICAgICAgaW50IGZp
bGVzID0gdmVyc2lvbnNfLT5OdW1MZXZlbEZpbGVzKGxldmVsKTsKLSAgICAgIGlmIChzdGF0c19b
bGV2ZWxdLm1pY3JvcyA+IDAgfHwgZmlsZXMgPiAwKSB7Ci0gICAgICAgIHNucHJpbnRmKAotICAg
ICAgICAgICAgYnVmLCBzaXplb2YoYnVmKSwKLSAgICAgICAgICAgICIlM2QgJThkICU4LjBmICU5
LjBmICU4LjBmICU5LjBmXG4iLAotICAgICAgICAgICAgbGV2ZWwsCi0gICAgICAgICAgICBmaWxl
cywKLSAgICAgICAgICAgIHZlcnNpb25zXy0+TnVtTGV2ZWxCeXRlcyhsZXZlbCkgLyAxMDQ4NTc2
LjAsCi0gICAgICAgICAgICBzdGF0c19bbGV2ZWxdLm1pY3JvcyAvIDFlNiwKLSAgICAgICAgICAg
IHN0YXRzX1tsZXZlbF0uYnl0ZXNfcmVhZCAvIDEwNDg1NzYuMCwKLSAgICAgICAgICAgIHN0YXRz
X1tsZXZlbF0uYnl0ZXNfd3JpdHRlbiAvIDEwNDg1NzYuMCk7Ci0gICAgICAgIHZhbHVlLT5hcHBl
bmQoYnVmKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0gZWxzZSBpZiAo
aW4gPT0gInNzdGFibGVzIikgewotICAgICp2YWx1ZSA9IHZlcnNpb25zXy0+Y3VycmVudCgpLT5E
ZWJ1Z1N0cmluZygpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcmV0dXJuIGZhbHNlOwot
fQotCi12b2lkIERCSW1wbDo6R2V0QXBwcm94aW1hdGVTaXplcygKLSAgICBjb25zdCBSYW5nZSog
cmFuZ2UsIGludCBuLAotICAgIHVpbnQ2NF90KiBzaXplcykgewotICAvLyBUT0RPKG9wdCk6IGJl
dHRlciBpbXBsZW1lbnRhdGlvbgotICBWZXJzaW9uKiB2OwotICB7Ci0gICAgTXV0ZXhMb2NrIGwo
Jm11dGV4Xyk7Ci0gICAgdmVyc2lvbnNfLT5jdXJyZW50KCktPlJlZigpOwotICAgIHYgPSB2ZXJz
aW9uc18tPmN1cnJlbnQoKTsKLSAgfQotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7
Ci0gICAgLy8gQ29udmVydCB1c2VyX2tleSBpbnRvIGEgY29ycmVzcG9uZGluZyBpbnRlcm5hbCBr
ZXkuCi0gICAgSW50ZXJuYWxLZXkgazEocmFuZ2VbaV0uc3RhcnQsIGtNYXhTZXF1ZW5jZU51bWJl
ciwga1ZhbHVlVHlwZUZvclNlZWspOwotICAgIEludGVybmFsS2V5IGsyKHJhbmdlW2ldLmxpbWl0
LCBrTWF4U2VxdWVuY2VOdW1iZXIsIGtWYWx1ZVR5cGVGb3JTZWVrKTsKLSAgICB1aW50NjRfdCBz
dGFydCA9IHZlcnNpb25zXy0+QXBwcm94aW1hdGVPZmZzZXRPZih2LCBrMSk7Ci0gICAgdWludDY0
X3QgbGltaXQgPSB2ZXJzaW9uc18tPkFwcHJveGltYXRlT2Zmc2V0T2YodiwgazIpOwotICAgIHNp
emVzW2ldID0gKGxpbWl0ID49IHN0YXJ0ID8gbGltaXQgLSBzdGFydCA6IDApOwotICB9Ci0KLSAg
ewotICAgIE11dGV4TG9jayBsKCZtdXRleF8pOwotICAgIHYtPlVucmVmKCk7Ci0gIH0KLX0KLQot
Ly8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgb2YgY29udmVuaWVuY2UgbWV0aG9kcyB0aGF0IHN1
YmNsYXNzZXMgb2YgREIKLS8vIGNhbiBjYWxsIGlmIHRoZXkgd2lzaAotU3RhdHVzIERCOjpQdXQo
Y29uc3QgV3JpdGVPcHRpb25zJiBvcHQsIGNvbnN0IFNsaWNlJiBrZXksIGNvbnN0IFNsaWNlJiB2
YWx1ZSkgewotICBXcml0ZUJhdGNoIGJhdGNoOwotICBiYXRjaC5QdXQoa2V5LCB2YWx1ZSk7Ci0g
IHJldHVybiBXcml0ZShvcHQsICZiYXRjaCk7Ci19Ci0KLVN0YXR1cyBEQjo6RGVsZXRlKGNvbnN0
IFdyaXRlT3B0aW9ucyYgb3B0LCBjb25zdCBTbGljZSYga2V5KSB7Ci0gIFdyaXRlQmF0Y2ggYmF0
Y2g7Ci0gIGJhdGNoLkRlbGV0ZShrZXkpOwotICByZXR1cm4gV3JpdGUob3B0LCAmYmF0Y2gpOwot
fQotCi1EQjo6fkRCKCkgeyB9Ci0KLVN0YXR1cyBEQjo6T3Blbihjb25zdCBPcHRpb25zJiBvcHRp
b25zLCBjb25zdCBzdGQ6OnN0cmluZyYgZGJuYW1lLAotICAgICAgICAgICAgICAgIERCKiogZGJw
dHIpIHsKLSAgKmRicHRyID0gTlVMTDsKLQotICBEQkltcGwqIGltcGwgPSBuZXcgREJJbXBsKG9w
dGlvbnMsIGRibmFtZSk7Ci0gIGltcGwtPm11dGV4Xy5Mb2NrKCk7Ci0gIFZlcnNpb25FZGl0IGVk
aXQ7Ci0gIFN0YXR1cyBzID0gaW1wbC0+UmVjb3ZlcigmZWRpdCk7IC8vIEhhbmRsZXMgY3JlYXRl
X2lmX21pc3NpbmcsIGVycm9yX2lmX2V4aXN0cwotICBpZiAocy5vaygpKSB7Ci0gICAgdWludDY0
X3QgbmV3X2xvZ19udW1iZXIgPSBpbXBsLT52ZXJzaW9uc18tPk5ld0ZpbGVOdW1iZXIoKTsKLSAg
ICBXcml0YWJsZUZpbGUqIGxmaWxlOwotICAgIHMgPSBvcHRpb25zLmVudi0+TmV3V3JpdGFibGVG
aWxlKExvZ0ZpbGVOYW1lKGRibmFtZSwgbmV3X2xvZ19udW1iZXIpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZsZmlsZSk7Ci0gICAgaWYgKHMub2soKSkgewotICAgICAg
ZWRpdC5TZXRMb2dOdW1iZXIobmV3X2xvZ19udW1iZXIpOwotICAgICAgaW1wbC0+bG9nZmlsZV8g
PSBsZmlsZTsKLSAgICAgIGltcGwtPmxvZ2ZpbGVfbnVtYmVyXyA9IG5ld19sb2dfbnVtYmVyOwot
ICAgICAgaW1wbC0+bG9nXyA9IG5ldyBsb2c6OldyaXRlcihsZmlsZSk7Ci0gICAgICBzID0gaW1w
bC0+dmVyc2lvbnNfLT5Mb2dBbmRBcHBseSgmZWRpdCwgJmltcGwtPm11dGV4Xyk7Ci0gICAgfQot
ICAgIGlmIChzLm9rKCkpIHsKLSAgICAgIGltcGwtPkRlbGV0ZU9ic29sZXRlRmlsZXMoKTsKLSAg
ICAgIGltcGwtPk1heWJlU2NoZWR1bGVDb21wYWN0aW9uKCk7Ci0gICAgfQotICB9Ci0gIGltcGwt
Pm11dGV4Xy5VbmxvY2soKTsKLSAgaWYgKHMub2soKSkgewotICAgICpkYnB0ciA9IGltcGw7Ci0g
IH0gZWxzZSB7Ci0gICAgZGVsZXRlIGltcGw7Ci0gIH0KLSAgcmV0dXJuIHM7Ci19Ci0KLVNuYXBz
aG90Ojp+U25hcHNob3QoKSB7Ci19Ci0KLVN0YXR1cyBEZXN0cm95REIoY29uc3Qgc3RkOjpzdHJp
bmcmIGRibmFtZSwgY29uc3QgT3B0aW9ucyYgb3B0aW9ucykgewotICBFbnYqIGVudiA9IG9wdGlv
bnMuZW52OwotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZmlsZW5hbWVzOwotICAvLyBJZ25v
cmUgZXJyb3IgaW4gY2FzZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QKLSAgZW52LT5HZXRDaGls
ZHJlbihkYm5hbWUsICZmaWxlbmFtZXMpOwotICBpZiAoZmlsZW5hbWVzLmVtcHR5KCkpIHsKLSAg
ICByZXR1cm4gU3RhdHVzOjpPSygpOwotICB9Ci0KLSAgRmlsZUxvY2sqIGxvY2s7Ci0gIGNvbnN0
IHN0ZDo6c3RyaW5nIGxvY2tuYW1lID0gTG9ja0ZpbGVOYW1lKGRibmFtZSk7Ci0gIFN0YXR1cyBy
ZXN1bHQgPSBlbnYtPkxvY2tGaWxlKGxvY2tuYW1lLCAmbG9jayk7Ci0gIGlmIChyZXN1bHQub2so
KSkgewotICAgIHVpbnQ2NF90IG51bWJlcjsKLSAgICBGaWxlVHlwZSB0eXBlOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZmlsZW5hbWVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICBpZiAoUGFy
c2VGaWxlTmFtZShmaWxlbmFtZXNbaV0sICZudW1iZXIsICZ0eXBlKSAmJgotICAgICAgICAgIHR5
cGUgIT0ga0RCTG9ja0ZpbGUpIHsgIC8vIExvY2sgZmlsZSB3aWxsIGJlIGRlbGV0ZWQgYXQgZW5k
Ci0gICAgICAgIFN0YXR1cyBkZWwgPSBlbnYtPkRlbGV0ZUZpbGUoZGJuYW1lICsgIi8iICsgZmls
ZW5hbWVzW2ldKTsKLSAgICAgICAgaWYgKHJlc3VsdC5vaygpICYmICFkZWwub2soKSkgewotICAg
ICAgICAgIHJlc3VsdCA9IGRlbDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBlbnYt
PlVubG9ja0ZpbGUobG9jayk7ICAvLyBJZ25vcmUgZXJyb3Igc2luY2Ugc3RhdGUgaXMgYWxyZWFk
eSBnb25lCi0gICAgZW52LT5EZWxldGVGaWxlKGxvY2tuYW1lKTsKLSAgICBlbnYtPkRlbGV0ZURp
cihkYm5hbWUpOyAgLy8gSWdub3JlIGVycm9yIGluIGNhc2UgZGlyIGNvbnRhaW5zIG90aGVyIGZp
bGVzCi0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZGJfaW1wbC5oIGIvU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9kYl9pbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGJkMjlkZDguLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxk
Yi9kYi9kYl9pbXBsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMDIgKzAsMCBAQAotLy8gQ29weXJp
Z2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFV
VEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgotCi0jaWZuZGVmIFNUT1JBR0Vf
TEVWRUxEQl9EQl9EQl9JTVBMX0hfCi0jZGVmaW5lIFNUT1JBR0VfTEVWRUxEQl9EQl9EQl9JTVBM
X0hfCi0KLSNpbmNsdWRlIDxkZXF1ZT4KLSNpbmNsdWRlIDxzZXQ+Ci0jaW5jbHVkZSAiZGIvZGJm
b3JtYXQuaCIKLSNpbmNsdWRlICJkYi9sb2dfd3JpdGVyLmgiCi0jaW5jbHVkZSAiZGIvc25hcHNo
b3QuaCIKLSNpbmNsdWRlICJsZXZlbGRiL2RiLmgiCi0jaW5jbHVkZSAibGV2ZWxkYi9lbnYuaCIK
LSNpbmNsdWRlICJwb3J0L3BvcnQuaCIKLSNpbmNsdWRlICJwb3J0L3RocmVhZF9hbm5vdGF0aW9u
cy5oIgotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7Ci0KLWNsYXNzIE1lbVRhYmxlOwotY2xhc3MgVGFi
bGVDYWNoZTsKLWNsYXNzIFZlcnNpb247Ci1jbGFzcyBWZXJzaW9uRWRpdDsKLWNsYXNzIFZlcnNp
b25TZXQ7Ci0KLWNsYXNzIERCSW1wbCA6IHB1YmxpYyBEQiB7Ci0gcHVibGljOgotICBEQkltcGwo
Y29uc3QgT3B0aW9ucyYgb3B0aW9ucywgY29uc3Qgc3RkOjpzdHJpbmcmIGRibmFtZSk7Ci0gIHZp
cnR1YWwgfkRCSW1wbCgpOwotCi0gIC8vIEltcGxlbWVudGF0aW9ucyBvZiB0aGUgREIgaW50ZXJm
YWNlCi0gIHZpcnR1YWwgU3RhdHVzIFB1dChjb25zdCBXcml0ZU9wdGlvbnMmLCBjb25zdCBTbGlj
ZSYga2V5LCBjb25zdCBTbGljZSYgdmFsdWUpOwotICB2aXJ0dWFsIFN0YXR1cyBEZWxldGUoY29u
c3QgV3JpdGVPcHRpb25zJiwgY29uc3QgU2xpY2UmIGtleSk7Ci0gIHZpcnR1YWwgU3RhdHVzIFdy
aXRlKGNvbnN0IFdyaXRlT3B0aW9ucyYgb3B0aW9ucywgV3JpdGVCYXRjaCogdXBkYXRlcyk7Ci0g
IHZpcnR1YWwgU3RhdHVzIEdldChjb25zdCBSZWFkT3B0aW9ucyYgb3B0aW9ucywKLSAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFNsaWNlJiBrZXksCi0gICAgICAgICAgICAgICAgICAgICBzdGQ6
OnN0cmluZyogdmFsdWUpOwotICB2aXJ0dWFsIEl0ZXJhdG9yKiBOZXdJdGVyYXRvcihjb25zdCBS
ZWFkT3B0aW9ucyYpOwotICB2aXJ0dWFsIGNvbnN0IFNuYXBzaG90KiBHZXRTbmFwc2hvdCgpOwot
ICB2aXJ0dWFsIHZvaWQgUmVsZWFzZVNuYXBzaG90KGNvbnN0IFNuYXBzaG90KiBzbmFwc2hvdCk7
Ci0gIHZpcnR1YWwgYm9vbCBHZXRQcm9wZXJ0eShjb25zdCBTbGljZSYgcHJvcGVydHksIHN0ZDo6
c3RyaW5nKiB2YWx1ZSk7Ci0gIHZpcnR1YWwgdm9pZCBHZXRBcHByb3hpbWF0ZVNpemVzKGNvbnN0
IFJhbmdlKiByYW5nZSwgaW50IG4sIHVpbnQ2NF90KiBzaXplcyk7Ci0gIHZpcnR1YWwgdm9pZCBD
b21wYWN0UmFuZ2UoY29uc3QgU2xpY2UqIGJlZ2luLCBjb25zdCBTbGljZSogZW5kKTsKLQotICAv
LyBFeHRyYSBtZXRob2RzIChmb3IgdGVzdGluZykgdGhhdCBhcmUgbm90IGluIHRoZSBwdWJsaWMg
REIgaW50ZXJmYWNlCi0KLSAgLy8gQ29tcGFjdCBhbnkgZmlsZXMgaW4gdGhlIG5hbWVkIGxldmVs
IHRoYXQgb3ZlcmxhcCBbKmJlZ2luLCplbmRdCi0gIHZvaWQgVEVTVF9Db21wYWN0UmFuZ2UoaW50
IGxldmVsLCBjb25zdCBTbGljZSogYmVnaW4sIGNvbnN0IFNsaWNlKiBlbmQpOwotCi0gIC8vIEZv
cmNlIGN1cnJlbnQgbWVtdGFibGUgY29udGVudHMgdG8gYmUgY29tcGFjdGVkLgotICBTdGF0dXMg
VEVTVF9Db21wYWN0TWVtVGFibGUoKTsKLQotICAvLyBSZXR1cm4gYW4gaW50ZXJuYWwgaXRlcmF0
b3Igb3ZlciB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZGF0YWJhc2UuCi0gIC8vIFRoZSBrZXlz
IG9mIHRoaXMgaXRlcmF0b3IgYXJlIGludGVybmFsIGtleXMgKHNlZSBmb3JtYXQuaCkuCi0gIC8v
IFRoZSByZXR1cm5lZCBpdGVyYXRvciBzaG91bGQgYmUgZGVsZXRlZCB3aGVuIG5vIGxvbmdlciBu
ZWVkZWQuCi0gIEl0ZXJhdG9yKiBURVNUX05ld0ludGVybmFsSXRlcmF0b3IoKTsKLQotICAvLyBS
ZXR1cm4gdGhlIG1heGltdW0gb3ZlcmxhcHBpbmcgZGF0YSAoaW4gYnl0ZXMpIGF0IG5leHQgbGV2
ZWwgZm9yIGFueQotICAvLyBmaWxlIGF0IGEgbGV2ZWwgPj0gMS4KLSAgaW50NjRfdCBURVNUX01h
eE5leHRMZXZlbE92ZXJsYXBwaW5nQnl0ZXMoKTsKLQotIHByaXZhdGU6Ci0gIGZyaWVuZCBjbGFz
cyBEQjsKLSAgc3RydWN0IENvbXBhY3Rpb25TdGF0ZTsKLSAgc3RydWN0IFdyaXRlcjsKLQotICBJ
dGVyYXRvciogTmV3SW50ZXJuYWxJdGVyYXRvcihjb25zdCBSZWFkT3B0aW9ucyYsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNlcXVlbmNlTnVtYmVyKiBsYXRlc3Rfc25hcHNob3Qp
OwotCi0gIFN0YXR1cyBOZXdEQigpOwotCi0gIC8vIFJlY292ZXIgdGhlIGRlc2NyaXB0b3IgZnJv
bSBwZXJzaXN0ZW50IHN0b3JhZ2UuICBNYXkgZG8gYSBzaWduaWZpY2FudAotICAvLyBhbW91bnQg
b2Ygd29yayB0byByZWNvdmVyIHJlY2VudGx5IGxvZ2dlZCB1cGRhdGVzLiAgQW55IGNoYW5nZXMg
dG8KLSAgLy8gYmUgbWFkZSB0byB0aGUgZGVzY3JpcHRvciBhcmUgYWRkZWQgdG8gKmVkaXQuCi0g
IFN0YXR1cyBSZWNvdmVyKFZlcnNpb25FZGl0KiBlZGl0KSBFWENMVVNJVkVfTE9DS1NfUkVRVUlS
RUQobXV0ZXhfKTsKLQotICB2b2lkIE1heWJlSWdub3JlRXJyb3IoU3RhdHVzKiBzKSBjb25zdDsK
LQotICAvLyBEZWxldGUgYW55IHVubmVlZGVkIGZpbGVzIGFuZCBzdGFsZSBpbi1tZW1vcnkgZW50
cmllcy4KLSAgdm9pZCBEZWxldGVPYnNvbGV0ZUZpbGVzKCk7Ci0KLSAgLy8gQ29tcGFjdCB0aGUg
aW4tbWVtb3J5IHdyaXRlIGJ1ZmZlciB0byBkaXNrLiAgU3dpdGNoZXMgdG8gYSBuZXcKLSAgLy8g
bG9nLWZpbGUvbWVtdGFibGUgYW5kIHdyaXRlcyBhIG5ldyBkZXNjcmlwdG9yIGlmZiBzdWNjZXNz
ZnVsLgotICBTdGF0dXMgQ29tcGFjdE1lbVRhYmxlKCkKLSAgICAgIEVYQ0xVU0lWRV9MT0NLU19S
RVFVSVJFRChtdXRleF8pOwotCi0gIFN0YXR1cyBSZWNvdmVyTG9nRmlsZSh1aW50NjRfdCBsb2df
bnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbkVkaXQqIGVkaXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBTZXF1ZW5jZU51bWJlciogbWF4X3NlcXVlbmNlKQotICAgICAg
RVhDTFVTSVZFX0xPQ0tTX1JFUVVJUkVEKG11dGV4Xyk7Ci0KLSAgU3RhdHVzIFdyaXRlTGV2ZWww
VGFibGUoTWVtVGFibGUqIG1lbSwgVmVyc2lvbkVkaXQqIGVkaXQsIFZlcnNpb24qIGJhc2UpCi0g
ICAgICBFWENMVVNJVkVfTE9DS1NfUkVRVUlSRUQobXV0ZXhfKTsKLQotICBTdGF0dXMgTWFrZVJv
b21Gb3JXcml0ZShib29sIGZvcmNlIC8qIGNvbXBhY3QgZXZlbiBpZiB0aGVyZSBpcyByb29tPyAq
LykKLSAgICAgIEVYQ0xVU0lWRV9MT0NLU19SRVFVSVJFRChtdXRleF8pOwotICBXcml0ZUJhdGNo
KiBCdWlsZEJhdGNoR3JvdXAoV3JpdGVyKiogbGFzdF93cml0ZXIpOwotCi0gIHZvaWQgTWF5YmVT
Y2hlZHVsZUNvbXBhY3Rpb24oKSBFWENMVVNJVkVfTE9DS1NfUkVRVUlSRUQobXV0ZXhfKTsKLSAg
c3RhdGljIHZvaWQgQkdXb3JrKHZvaWQqIGRiKTsKLSAgdm9pZCBCYWNrZ3JvdW5kQ2FsbCgpOwot
ICBTdGF0dXMgQmFja2dyb3VuZENvbXBhY3Rpb24oKSBFWENMVVNJVkVfTE9DS1NfUkVRVUlSRUQo
bXV0ZXhfKTsKLSAgdm9pZCBDbGVhbnVwQ29tcGFjdGlvbihDb21wYWN0aW9uU3RhdGUqIGNvbXBh
Y3QpCi0gICAgICBFWENMVVNJVkVfTE9DS1NfUkVRVUlSRUQobXV0ZXhfKTsKLSAgU3RhdHVzIERv
Q29tcGFjdGlvbldvcmsoQ29tcGFjdGlvblN0YXRlKiBjb21wYWN0KQotICAgICAgRVhDTFVTSVZF
X0xPQ0tTX1JFUVVJUkVEKG11dGV4Xyk7Ci0KLSAgU3RhdHVzIE9wZW5Db21wYWN0aW9uT3V0cHV0
RmlsZShDb21wYWN0aW9uU3RhdGUqIGNvbXBhY3QpOwotICBTdGF0dXMgRmluaXNoQ29tcGFjdGlv
bk91dHB1dEZpbGUoQ29tcGFjdGlvblN0YXRlKiBjb21wYWN0LCBJdGVyYXRvciogaW5wdXQpOwot
ICBTdGF0dXMgSW5zdGFsbENvbXBhY3Rpb25SZXN1bHRzKENvbXBhY3Rpb25TdGF0ZSogY29tcGFj
dCkKLSAgICAgIEVYQ0xVU0lWRV9MT0NLU19SRVFVSVJFRChtdXRleF8pOwotCi0gIC8vIENvbnN0
YW50IGFmdGVyIGNvbnN0cnVjdGlvbgotICBFbnYqIGNvbnN0IGVudl87Ci0gIGNvbnN0IEludGVy
bmFsS2V5Q29tcGFyYXRvciBpbnRlcm5hbF9jb21wYXJhdG9yXzsKLSAgY29uc3QgSW50ZXJuYWxG
aWx0ZXJQb2xpY3kgaW50ZXJuYWxfZmlsdGVyX3BvbGljeV87Ci0gIGNvbnN0IE9wdGlvbnMgb3B0
aW9uc187ICAvLyBvcHRpb25zXy5jb21wYXJhdG9yID09ICZpbnRlcm5hbF9jb21wYXJhdG9yXwot
ICBib29sIG93bnNfaW5mb19sb2dfOwotICBib29sIG93bnNfY2FjaGVfOwotICBjb25zdCBzdGQ6
OnN0cmluZyBkYm5hbWVfOwotCi0gIC8vIHRhYmxlX2NhY2hlXyBwcm92aWRlcyBpdHMgb3duIHN5
bmNocm9uaXphdGlvbgotICBUYWJsZUNhY2hlKiB0YWJsZV9jYWNoZV87Ci0KLSAgLy8gTG9jayBv
dmVyIHRoZSBwZXJzaXN0ZW50IERCIHN0YXRlLiAgTm9uLU5VTEwgaWZmIHN1Y2Nlc3NmdWxseSBh
Y3F1aXJlZC4KLSAgRmlsZUxvY2sqIGRiX2xvY2tfOwotCi0gIC8vIFN0YXRlIGJlbG93IGlzIHBy
b3RlY3RlZCBieSBtdXRleF8KLSAgcG9ydDo6TXV0ZXggbXV0ZXhfOwotICBwb3J0OjpBdG9taWNQ
b2ludGVyIHNodXR0aW5nX2Rvd25fOwotICBwb3J0OjpDb25kVmFyIGJnX2N2XzsgICAgICAgICAg
Ly8gU2lnbmFsbGVkIHdoZW4gYmFja2dyb3VuZCB3b3JrIGZpbmlzaGVzCi0gIE1lbVRhYmxlKiBt
ZW1fOwotICBNZW1UYWJsZSogaW1tXzsgICAgICAgICAgICAgICAgLy8gTWVtdGFibGUgYmVpbmcg
Y29tcGFjdGVkCi0gIHBvcnQ6OkF0b21pY1BvaW50ZXIgaGFzX2ltbV87ICAvLyBTbyBiZyB0aHJl
YWQgY2FuIGRldGVjdCBub24tTlVMTCBpbW1fCi0gIFdyaXRhYmxlRmlsZSogbG9nZmlsZV87Ci0g
IHVpbnQ2NF90IGxvZ2ZpbGVfbnVtYmVyXzsKLSAgbG9nOjpXcml0ZXIqIGxvZ187Ci0KLSAgLy8g
UXVldWUgb2Ygd3JpdGVycy4KLSAgc3RkOjpkZXF1ZTxXcml0ZXIqPiB3cml0ZXJzXzsKLSAgV3Jp
dGVCYXRjaCogdG1wX2JhdGNoXzsKLQotICBTbmFwc2hvdExpc3Qgc25hcHNob3RzXzsKLQotICAv
LyBTZXQgb2YgdGFibGUgZmlsZXMgdG8gcHJvdGVjdCBmcm9tIGRlbGV0aW9uIGJlY2F1c2UgdGhl
eSBhcmUKLSAgLy8gcGFydCBvZiBvbmdvaW5nIGNvbXBhY3Rpb25zLgotICBzdGQ6OnNldDx1aW50
NjRfdD4gcGVuZGluZ19vdXRwdXRzXzsKLQotICAvLyBIYXMgYSBiYWNrZ3JvdW5kIGNvbXBhY3Rp
b24gYmVlbiBzY2hlZHVsZWQgb3IgaXMgcnVubmluZz8KLSAgYm9vbCBiZ19jb21wYWN0aW9uX3Nj
aGVkdWxlZF87Ci0KLSAgLy8gSW5mb3JtYXRpb24gZm9yIGEgbWFudWFsIGNvbXBhY3Rpb24KLSAg
c3RydWN0IE1hbnVhbENvbXBhY3Rpb24gewotICAgIGludCBsZXZlbDsKLSAgICBib29sIGRvbmU7
Ci0gICAgY29uc3QgSW50ZXJuYWxLZXkqIGJlZ2luOyAgIC8vIE5VTEwgbWVhbnMgYmVnaW5uaW5n
IG9mIGtleSByYW5nZQotICAgIGNvbnN0IEludGVybmFsS2V5KiBlbmQ7ICAgICAvLyBOVUxMIG1l
YW5zIGVuZCBvZiBrZXkgcmFuZ2UKLSAgICBJbnRlcm5hbEtleSB0bXBfc3RvcmFnZTsgICAgLy8g
VXNlZCB0byBrZWVwIHRyYWNrIG9mIGNvbXBhY3Rpb24gcHJvZ3Jlc3MKLSAgfTsKLSAgTWFudWFs
Q29tcGFjdGlvbiogbWFudWFsX2NvbXBhY3Rpb25fOwotCi0gIFZlcnNpb25TZXQqIHZlcnNpb25z
XzsKLQotICAvLyBIYXZlIHdlIGVuY291bnRlcmVkIGEgYmFja2dyb3VuZCBlcnJvciBpbiBwYXJh
bm9pZCBtb2RlPwotICBTdGF0dXMgYmdfZXJyb3JfOwotCi0gIC8vIFBlciBsZXZlbCBjb21wYWN0
aW9uIHN0YXRzLiAgc3RhdHNfW2xldmVsXSBzdG9yZXMgdGhlIHN0YXRzIGZvcgotICAvLyBjb21w
YWN0aW9ucyB0aGF0IHByb2R1Y2VkIGRhdGEgZm9yIHRoZSBzcGVjaWZpZWQgImxldmVsIi4KLSAg
c3RydWN0IENvbXBhY3Rpb25TdGF0cyB7Ci0gICAgaW50NjRfdCBtaWNyb3M7Ci0gICAgaW50NjRf
dCBieXRlc19yZWFkOwotICAgIGludDY0X3QgYnl0ZXNfd3JpdHRlbjsKLQotICAgIENvbXBhY3Rp
b25TdGF0cygpIDogbWljcm9zKDApLCBieXRlc19yZWFkKDApLCBieXRlc193cml0dGVuKDApIHsg
fQotCi0gICAgdm9pZCBBZGQoY29uc3QgQ29tcGFjdGlvblN0YXRzJiBjKSB7Ci0gICAgICB0aGlz
LT5taWNyb3MgKz0gYy5taWNyb3M7Ci0gICAgICB0aGlzLT5ieXRlc19yZWFkICs9IGMuYnl0ZXNf
cmVhZDsKLSAgICAgIHRoaXMtPmJ5dGVzX3dyaXR0ZW4gKz0gYy5ieXRlc193cml0dGVuOwotICAg
IH0KLSAgfTsKLSAgQ29tcGFjdGlvblN0YXRzIHN0YXRzX1tjb25maWc6OmtOdW1MZXZlbHNdOwot
Ci0gIC8vIE5vIGNvcHlpbmcgYWxsb3dlZAotICBEQkltcGwoY29uc3QgREJJbXBsJik7Ci0gIHZv
aWQgb3BlcmF0b3I9KGNvbnN0IERCSW1wbCYpOwotCi0gIGNvbnN0IENvbXBhcmF0b3IqIHVzZXJf
Y29tcGFyYXRvcigpIGNvbnN0IHsKLSAgICByZXR1cm4gaW50ZXJuYWxfY29tcGFyYXRvcl8udXNl
cl9jb21wYXJhdG9yKCk7Ci0gIH0KLX07Ci0KLS8vIFNhbml0aXplIGRiIG9wdGlvbnMuICBUaGUg
Y2FsbGVyIHNob3VsZCBkZWxldGUgcmVzdWx0LmluZm9fbG9nIGlmCi0vLyBpdCBpcyBub3QgZXF1
YWwgdG8gc3JjLmluZm9fbG9nLgotZXh0ZXJuIE9wdGlvbnMgU2FuaXRpemVPcHRpb25zKGNvbnN0
IHN0ZDo6c3RyaW5nJiBkYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJ
bnRlcm5hbEtleUNvbXBhcmF0b3IqIGljbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgSW50ZXJuYWxGaWx0ZXJQb2xpY3kqIGlwb2xpY3ksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgT3B0aW9ucyYgc3JjKTsKLQotfSAgLy8gbmFtZXNwYWNlIGxl
dmVsZGIKLQotI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfREJfREJfSU1QTF9IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9kYl9pdGVyLmNjIGIvU291cmNlL1Ro
aXJkUGFydHkvbGV2ZWxkYi9kYi9kYl9pdGVyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA4N2RjYTJkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIv
ZGJfaXRlci5jYworKysgL2Rldi9udWxsCkBAIC0xLDI5OSArMCwwIEBACi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9S
UyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCi0KLSNpbmNsdWRlICJkYi9kYl9pdGVy
LmgiCi0KLSNpbmNsdWRlICJkYi9maWxlbmFtZS5oIgotI2luY2x1ZGUgImRiL2RiZm9ybWF0Lmgi
Ci0jaW5jbHVkZSAibGV2ZWxkYi9lbnYuaCIKLSNpbmNsdWRlICJsZXZlbGRiL2l0ZXJhdG9yLmgi
Ci0jaW5jbHVkZSAicG9ydC9wb3J0LmgiCi0jaW5jbHVkZSAidXRpbC9sb2dnaW5nLmgiCi0jaW5j
bHVkZSAidXRpbC9tdXRleGxvY2suaCIKLQotbmFtZXNwYWNlIGxldmVsZGIgewotCi0jaWYgMAot
c3RhdGljIHZvaWQgRHVtcEludGVybmFsSXRlcihJdGVyYXRvciogaXRlcikgewotICBmb3IgKGl0
ZXItPlNlZWtUb0ZpcnN0KCk7IGl0ZXItPlZhbGlkKCk7IGl0ZXItPk5leHQoKSkgewotICAgIFBh
cnNlZEludGVybmFsS2V5IGs7Ci0gICAgaWYgKCFQYXJzZUludGVybmFsS2V5KGl0ZXItPmtleSgp
LCAmaykpIHsKLSAgICAgIGZwcmludGYoc3RkZXJyLCAiQ29ycnVwdCAnJXMnXG4iLCBFc2NhcGVT
dHJpbmcoaXRlci0+a2V5KCkpLmNfc3RyKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBmcHJpbnRm
KHN0ZGVyciwgIkAgJyVzJ1xuIiwgay5EZWJ1Z1N0cmluZygpLmNfc3RyKCkpOwotICAgIH0KLSAg
fQotfQotI2VuZGlmCi0KLW5hbWVzcGFjZSB7Ci0KLS8vIE1lbXRhYmxlcyBhbmQgc3N0YWJsZXMg
dGhhdCBtYWtlIHRoZSBEQiByZXByZXNlbnRhdGlvbiBjb250YWluCi0vLyAodXNlcmtleSxzZXEs
dHlwZSkgPT4gdXNlcnZhbHVlIGVudHJpZXMuICBEQkl0ZXIKLS8vIGNvbWJpbmVzIG11bHRpcGxl
IGVudHJpZXMgZm9yIHRoZSBzYW1lIHVzZXJrZXkgZm91bmQgaW4gdGhlIERCCi0vLyByZXByZXNl
bnRhdGlvbiBpbnRvIGEgc2luZ2xlIGVudHJ5IHdoaWxlIGFjY291bnRpbmcgZm9yIHNlcXVlbmNl
Ci0vLyBudW1iZXJzLCBkZWxldGlvbiBtYXJrZXJzLCBvdmVyd3JpdGVzLCBldGMuCi1jbGFzcyBE
Qkl0ZXI6IHB1YmxpYyBJdGVyYXRvciB7Ci0gcHVibGljOgotICAvLyBXaGljaCBkaXJlY3Rpb24g
aXMgdGhlIGl0ZXJhdG9yIGN1cnJlbnRseSBtb3Zpbmc/Ci0gIC8vICgxKSBXaGVuIG1vdmluZyBm
b3J3YXJkLCB0aGUgaW50ZXJuYWwgaXRlcmF0b3IgaXMgcG9zaXRpb25lZCBhdAotICAvLyAgICAg
dGhlIGV4YWN0IGVudHJ5IHRoYXQgeWllbGRzIHRoaXMtPmtleSgpLCB0aGlzLT52YWx1ZSgpCi0g
IC8vICgyKSBXaGVuIG1vdmluZyBiYWNrd2FyZHMsIHRoZSBpbnRlcm5hbCBpdGVyYXRvciBpcyBw
b3NpdGlvbmVkCi0gIC8vICAgICBqdXN0IGJlZm9yZSBhbGwgZW50cmllcyB3aG9zZSB1c2VyIGtl
eSA9PSB0aGlzLT5rZXkoKS4KLSAgZW51bSBEaXJlY3Rpb24gewotICAgIGtGb3J3YXJkLAotICAg
IGtSZXZlcnNlCi0gIH07Ci0KLSAgREJJdGVyKGNvbnN0IHN0ZDo6c3RyaW5nKiBkYm5hbWUsIEVu
diogZW52LAotICAgICAgICAgY29uc3QgQ29tcGFyYXRvciogY21wLCBJdGVyYXRvciogaXRlciwg
U2VxdWVuY2VOdW1iZXIgcykKLSAgICAgIDogZGJuYW1lXyhkYm5hbWUpLAotICAgICAgICBlbnZf
KGVudiksCi0gICAgICAgIHVzZXJfY29tcGFyYXRvcl8oY21wKSwKLSAgICAgICAgaXRlcl8oaXRl
ciksCi0gICAgICAgIHNlcXVlbmNlXyhzKSwKLSAgICAgICAgZGlyZWN0aW9uXyhrRm9yd2FyZCks
Ci0gICAgICAgIHZhbGlkXyhmYWxzZSkgewotICB9Ci0gIHZpcnR1YWwgfkRCSXRlcigpIHsKLSAg
ICBkZWxldGUgaXRlcl87Ci0gIH0KLSAgdmlydHVhbCBib29sIFZhbGlkKCkgY29uc3QgeyByZXR1
cm4gdmFsaWRfOyB9Ci0gIHZpcnR1YWwgU2xpY2Uga2V5KCkgY29uc3QgewotICAgIGFzc2VydCh2
YWxpZF8pOwotICAgIHJldHVybiAoZGlyZWN0aW9uXyA9PSBrRm9yd2FyZCkgPyBFeHRyYWN0VXNl
cktleShpdGVyXy0+a2V5KCkpIDogc2F2ZWRfa2V5XzsKLSAgfQotICB2aXJ0dWFsIFNsaWNlIHZh
bHVlKCkgY29uc3QgewotICAgIGFzc2VydCh2YWxpZF8pOwotICAgIHJldHVybiAoZGlyZWN0aW9u
XyA9PSBrRm9yd2FyZCkgPyBpdGVyXy0+dmFsdWUoKSA6IHNhdmVkX3ZhbHVlXzsKLSAgfQotICB2
aXJ0dWFsIFN0YXR1cyBzdGF0dXMoKSBjb25zdCB7Ci0gICAgaWYgKHN0YXR1c18ub2soKSkgewot
ICAgICAgcmV0dXJuIGl0ZXJfLT5zdGF0dXMoKTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJu
IHN0YXR1c187Ci0gICAgfQotICB9Ci0KLSAgdmlydHVhbCB2b2lkIE5leHQoKTsKLSAgdmlydHVh
bCB2b2lkIFByZXYoKTsKLSAgdmlydHVhbCB2b2lkIFNlZWsoY29uc3QgU2xpY2UmIHRhcmdldCk7
Ci0gIHZpcnR1YWwgdm9pZCBTZWVrVG9GaXJzdCgpOwotICB2aXJ0dWFsIHZvaWQgU2Vla1RvTGFz
dCgpOwotCi0gcHJpdmF0ZToKLSAgdm9pZCBGaW5kTmV4dFVzZXJFbnRyeShib29sIHNraXBwaW5n
LCBzdGQ6OnN0cmluZyogc2tpcCk7Ci0gIHZvaWQgRmluZFByZXZVc2VyRW50cnkoKTsKLSAgYm9v
bCBQYXJzZUtleShQYXJzZWRJbnRlcm5hbEtleSoga2V5KTsKLQotICBpbmxpbmUgdm9pZCBTYXZl
S2V5KGNvbnN0IFNsaWNlJiBrLCBzdGQ6OnN0cmluZyogZHN0KSB7Ci0gICAgZHN0LT5hc3NpZ24o
ay5kYXRhKCksIGsuc2l6ZSgpKTsKLSAgfQotCi0gIGlubGluZSB2b2lkIENsZWFyU2F2ZWRWYWx1
ZSgpIHsKLSAgICBpZiAoc2F2ZWRfdmFsdWVfLmNhcGFjaXR5KCkgPiAxMDQ4NTc2KSB7Ci0gICAg
ICBzdGQ6OnN0cmluZyBlbXB0eTsKLSAgICAgIHN3YXAoZW1wdHksIHNhdmVkX3ZhbHVlXyk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgIHNhdmVkX3ZhbHVlXy5jbGVhcigpOwotICAgIH0KLSAgfQotCi0g
IGNvbnN0IHN0ZDo6c3RyaW5nKiBjb25zdCBkYm5hbWVfOwotICBFbnYqIGNvbnN0IGVudl87Ci0g
IGNvbnN0IENvbXBhcmF0b3IqIGNvbnN0IHVzZXJfY29tcGFyYXRvcl87Ci0gIEl0ZXJhdG9yKiBj
b25zdCBpdGVyXzsKLSAgU2VxdWVuY2VOdW1iZXIgY29uc3Qgc2VxdWVuY2VfOwotCi0gIFN0YXR1
cyBzdGF0dXNfOwotICBzdGQ6OnN0cmluZyBzYXZlZF9rZXlfOyAgICAgLy8gPT0gY3VycmVudCBr
ZXkgd2hlbiBkaXJlY3Rpb25fPT1rUmV2ZXJzZQotICBzdGQ6OnN0cmluZyBzYXZlZF92YWx1ZV87
ICAgLy8gPT0gY3VycmVudCByYXcgdmFsdWUgd2hlbiBkaXJlY3Rpb25fPT1rUmV2ZXJzZQotICBE
aXJlY3Rpb24gZGlyZWN0aW9uXzsKLSAgYm9vbCB2YWxpZF87Ci0KLSAgLy8gTm8gY29weWluZyBh
bGxvd2VkCi0gIERCSXRlcihjb25zdCBEQkl0ZXImKTsKLSAgdm9pZCBvcGVyYXRvcj0oY29uc3Qg
REJJdGVyJik7Ci19OwotCi1pbmxpbmUgYm9vbCBEQkl0ZXI6OlBhcnNlS2V5KFBhcnNlZEludGVy
bmFsS2V5KiBpa2V5KSB7Ci0gIGlmICghUGFyc2VJbnRlcm5hbEtleShpdGVyXy0+a2V5KCksIGlr
ZXkpKSB7Ci0gICAgc3RhdHVzXyA9IFN0YXR1czo6Q29ycnVwdGlvbigiY29ycnVwdGVkIGludGVy
bmFsIGtleSBpbiBEQkl0ZXIiKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0gZWxzZSB7Ci0gICAg
cmV0dXJuIHRydWU7Ci0gIH0KLX0KLQotdm9pZCBEQkl0ZXI6Ok5leHQoKSB7Ci0gIGFzc2VydCh2
YWxpZF8pOwotCi0gIGlmIChkaXJlY3Rpb25fID09IGtSZXZlcnNlKSB7ICAvLyBTd2l0Y2ggZGly
ZWN0aW9ucz8KLSAgICBkaXJlY3Rpb25fID0ga0ZvcndhcmQ7Ci0gICAgLy8gaXRlcl8gaXMgcG9p
bnRpbmcganVzdCBiZWZvcmUgdGhlIGVudHJpZXMgZm9yIHRoaXMtPmtleSgpLAotICAgIC8vIHNv
IGFkdmFuY2UgaW50byB0aGUgcmFuZ2Ugb2YgZW50cmllcyBmb3IgdGhpcy0+a2V5KCkgYW5kIHRo
ZW4KLSAgICAvLyB1c2UgdGhlIG5vcm1hbCBza2lwcGluZyBjb2RlIGJlbG93LgotICAgIGlmICgh
aXRlcl8tPlZhbGlkKCkpIHsKLSAgICAgIGl0ZXJfLT5TZWVrVG9GaXJzdCgpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICBpdGVyXy0+TmV4dCgpOwotICAgIH0KLSAgICBpZiAoIWl0ZXJfLT5WYWxpZCgp
KSB7Ci0gICAgICB2YWxpZF8gPSBmYWxzZTsKLSAgICAgIHNhdmVkX2tleV8uY2xlYXIoKTsKLSAg
ICAgIHJldHVybjsKLSAgICB9Ci0gIH0KLQotICAvLyBUZW1wb3JhcmlseSB1c2Ugc2F2ZWRfa2V5
XyBhcyBzdG9yYWdlIGZvciBrZXkgdG8gc2tpcC4KLSAgc3RkOjpzdHJpbmcqIHNraXAgPSAmc2F2
ZWRfa2V5XzsKLSAgU2F2ZUtleShFeHRyYWN0VXNlcktleShpdGVyXy0+a2V5KCkpLCBza2lwKTsK
LSAgRmluZE5leHRVc2VyRW50cnkodHJ1ZSwgc2tpcCk7Ci19Ci0KLXZvaWQgREJJdGVyOjpGaW5k
TmV4dFVzZXJFbnRyeShib29sIHNraXBwaW5nLCBzdGQ6OnN0cmluZyogc2tpcCkgewotICAvLyBM
b29wIHVudGlsIHdlIGhpdCBhbiBhY2NlcHRhYmxlIGVudHJ5IHRvIHlpZWxkCi0gIGFzc2VydChp
dGVyXy0+VmFsaWQoKSk7Ci0gIGFzc2VydChkaXJlY3Rpb25fID09IGtGb3J3YXJkKTsKLSAgZG8g
ewotICAgIFBhcnNlZEludGVybmFsS2V5IGlrZXk7Ci0gICAgaWYgKFBhcnNlS2V5KCZpa2V5KSAm
JiBpa2V5LnNlcXVlbmNlIDw9IHNlcXVlbmNlXykgewotICAgICAgc3dpdGNoIChpa2V5LnR5cGUp
IHsKLSAgICAgICAgY2FzZSBrVHlwZURlbGV0aW9uOgotICAgICAgICAgIC8vIEFycmFuZ2UgdG8g
c2tpcCBhbGwgdXBjb21pbmcgZW50cmllcyBmb3IgdGhpcyBrZXkgc2luY2UKLSAgICAgICAgICAv
LyB0aGV5IGFyZSBoaWRkZW4gYnkgdGhpcyBkZWxldGlvbi4KLSAgICAgICAgICBTYXZlS2V5KGlr
ZXkudXNlcl9rZXksIHNraXApOwotICAgICAgICAgIHNraXBwaW5nID0gdHJ1ZTsKLSAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBrVHlwZVZhbHVlOgotICAgICAgICAgIGlmIChza2lwcGlu
ZyAmJgotICAgICAgICAgICAgICB1c2VyX2NvbXBhcmF0b3JfLT5Db21wYXJlKGlrZXkudXNlcl9r
ZXksICpza2lwKSA8PSAwKSB7Ci0gICAgICAgICAgICAvLyBFbnRyeSBoaWRkZW4KLSAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgdmFsaWRfID0gdHJ1ZTsKLSAgICAgICAgICAgIHNhdmVk
X2tleV8uY2xlYXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICB9Ci0gICAgICAg
ICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIGl0ZXJfLT5OZXh0KCk7Ci0gIH0gd2hpbGUg
KGl0ZXJfLT5WYWxpZCgpKTsKLSAgc2F2ZWRfa2V5Xy5jbGVhcigpOwotICB2YWxpZF8gPSBmYWxz
ZTsKLX0KLQotdm9pZCBEQkl0ZXI6OlByZXYoKSB7Ci0gIGFzc2VydCh2YWxpZF8pOwotCi0gIGlm
IChkaXJlY3Rpb25fID09IGtGb3J3YXJkKSB7ICAvLyBTd2l0Y2ggZGlyZWN0aW9ucz8KLSAgICAv
LyBpdGVyXyBpcyBwb2ludGluZyBhdCB0aGUgY3VycmVudCBlbnRyeS4gIFNjYW4gYmFja3dhcmRz
IHVudGlsCi0gICAgLy8gdGhlIGtleSBjaGFuZ2VzIHNvIHdlIGNhbiB1c2UgdGhlIG5vcm1hbCBy
ZXZlcnNlIHNjYW5uaW5nIGNvZGUuCi0gICAgYXNzZXJ0KGl0ZXJfLT5WYWxpZCgpKTsgIC8vIE90
aGVyd2lzZSB2YWxpZF8gd291bGQgaGF2ZSBiZWVuIGZhbHNlCi0gICAgU2F2ZUtleShFeHRyYWN0
VXNlcktleShpdGVyXy0+a2V5KCkpLCAmc2F2ZWRfa2V5Xyk7Ci0gICAgd2hpbGUgKHRydWUpIHsK
LSAgICAgIGl0ZXJfLT5QcmV2KCk7Ci0gICAgICBpZiAoIWl0ZXJfLT5WYWxpZCgpKSB7Ci0gICAg
ICAgIHZhbGlkXyA9IGZhbHNlOwotICAgICAgICBzYXZlZF9rZXlfLmNsZWFyKCk7Ci0gICAgICAg
IENsZWFyU2F2ZWRWYWx1ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBpZiAo
dXNlcl9jb21wYXJhdG9yXy0+Q29tcGFyZShFeHRyYWN0VXNlcktleShpdGVyXy0+a2V5KCkpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWRfa2V5XykgPCAwKSB7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBkaXJlY3Rpb25fID0ga1JldmVyc2U7
Ci0gIH0KLQotICBGaW5kUHJldlVzZXJFbnRyeSgpOwotfQotCi12b2lkIERCSXRlcjo6RmluZFBy
ZXZVc2VyRW50cnkoKSB7Ci0gIGFzc2VydChkaXJlY3Rpb25fID09IGtSZXZlcnNlKTsKLQotICBW
YWx1ZVR5cGUgdmFsdWVfdHlwZSA9IGtUeXBlRGVsZXRpb247Ci0gIGlmIChpdGVyXy0+VmFsaWQo
KSkgewotICAgIGRvIHsKLSAgICAgIFBhcnNlZEludGVybmFsS2V5IGlrZXk7Ci0gICAgICBpZiAo
UGFyc2VLZXkoJmlrZXkpICYmIGlrZXkuc2VxdWVuY2UgPD0gc2VxdWVuY2VfKSB7Ci0gICAgICAg
IGlmICgodmFsdWVfdHlwZSAhPSBrVHlwZURlbGV0aW9uKSAmJgotICAgICAgICAgICAgdXNlcl9j
b21wYXJhdG9yXy0+Q29tcGFyZShpa2V5LnVzZXJfa2V5LCBzYXZlZF9rZXlfKSA8IDApIHsKLSAg
ICAgICAgICAvLyBXZSBlbmNvdW50ZXJlZCBhIG5vbi1kZWxldGVkIHZhbHVlIGluIGVudHJpZXMg
Zm9yIHByZXZpb3VzIGtleXMsCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
dmFsdWVfdHlwZSA9IGlrZXkudHlwZTsKLSAgICAgICAgaWYgKHZhbHVlX3R5cGUgPT0ga1R5cGVE
ZWxldGlvbikgewotICAgICAgICAgIHNhdmVkX2tleV8uY2xlYXIoKTsKLSAgICAgICAgICBDbGVh
clNhdmVkVmFsdWUoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBTbGljZSByYXdfdmFs
dWUgPSBpdGVyXy0+dmFsdWUoKTsKLSAgICAgICAgICBpZiAoc2F2ZWRfdmFsdWVfLmNhcGFjaXR5
KCkgPiByYXdfdmFsdWUuc2l6ZSgpICsgMTA0ODU3NikgewotICAgICAgICAgICAgc3RkOjpzdHJp
bmcgZW1wdHk7Ci0gICAgICAgICAgICBzd2FwKGVtcHR5LCBzYXZlZF92YWx1ZV8pOwotICAgICAg
ICAgIH0KLSAgICAgICAgICBTYXZlS2V5KEV4dHJhY3RVc2VyS2V5KGl0ZXJfLT5rZXkoKSksICZz
YXZlZF9rZXlfKTsKLSAgICAgICAgICBzYXZlZF92YWx1ZV8uYXNzaWduKHJhd192YWx1ZS5kYXRh
KCksIHJhd192YWx1ZS5zaXplKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpdGVyXy0+
UHJldigpOwotICAgIH0gd2hpbGUgKGl0ZXJfLT5WYWxpZCgpKTsKLSAgfQotCi0gIGlmICh2YWx1
ZV90eXBlID09IGtUeXBlRGVsZXRpb24pIHsKLSAgICAvLyBFbmQKLSAgICB2YWxpZF8gPSBmYWxz
ZTsKLSAgICBzYXZlZF9rZXlfLmNsZWFyKCk7Ci0gICAgQ2xlYXJTYXZlZFZhbHVlKCk7Ci0gICAg
ZGlyZWN0aW9uXyA9IGtGb3J3YXJkOwotICB9IGVsc2UgewotICAgIHZhbGlkXyA9IHRydWU7Ci0g
IH0KLX0KLQotdm9pZCBEQkl0ZXI6OlNlZWsoY29uc3QgU2xpY2UmIHRhcmdldCkgewotICBkaXJl
Y3Rpb25fID0ga0ZvcndhcmQ7Ci0gIENsZWFyU2F2ZWRWYWx1ZSgpOwotICBzYXZlZF9rZXlfLmNs
ZWFyKCk7Ci0gIEFwcGVuZEludGVybmFsS2V5KAotICAgICAgJnNhdmVkX2tleV8sIFBhcnNlZElu
dGVybmFsS2V5KHRhcmdldCwgc2VxdWVuY2VfLCBrVmFsdWVUeXBlRm9yU2VlaykpOwotICBpdGVy
Xy0+U2VlayhzYXZlZF9rZXlfKTsKLSAgaWYgKGl0ZXJfLT5WYWxpZCgpKSB7Ci0gICAgRmluZE5l
eHRVc2VyRW50cnkoZmFsc2UsICZzYXZlZF9rZXlfIC8qIHRlbXBvcmFyeSBzdG9yYWdlICovKTsK
LSAgfSBlbHNlIHsKLSAgICB2YWxpZF8gPSBmYWxzZTsKLSAgfQotfQotCi12b2lkIERCSXRlcjo6
U2Vla1RvRmlyc3QoKSB7Ci0gIGRpcmVjdGlvbl8gPSBrRm9yd2FyZDsKLSAgQ2xlYXJTYXZlZFZh
bHVlKCk7Ci0gIGl0ZXJfLT5TZWVrVG9GaXJzdCgpOwotICBpZiAoaXRlcl8tPlZhbGlkKCkpIHsK
LSAgICBGaW5kTmV4dFVzZXJFbnRyeShmYWxzZSwgJnNhdmVkX2tleV8gLyogdGVtcG9yYXJ5IHN0
b3JhZ2UgKi8pOwotICB9IGVsc2UgewotICAgIHZhbGlkXyA9IGZhbHNlOwotICB9Ci19Ci0KLXZv
aWQgREJJdGVyOjpTZWVrVG9MYXN0KCkgewotICBkaXJlY3Rpb25fID0ga1JldmVyc2U7Ci0gIENs
ZWFyU2F2ZWRWYWx1ZSgpOwotICBpdGVyXy0+U2Vla1RvTGFzdCgpOwotICBGaW5kUHJldlVzZXJF
bnRyeSgpOwotfQotCi19ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLUl0ZXJhdG9yKiBOZXdE
Qkl0ZXJhdG9yKAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nKiBkYm5hbWUsCi0gICAgRW52KiBlbnYs
Ci0gICAgY29uc3QgQ29tcGFyYXRvciogdXNlcl9rZXlfY29tcGFyYXRvciwKLSAgICBJdGVyYXRv
ciogaW50ZXJuYWxfaXRlciwKLSAgICBjb25zdCBTZXF1ZW5jZU51bWJlciYgc2VxdWVuY2UpIHsK
LSAgcmV0dXJuIG5ldyBEQkl0ZXIoZGJuYW1lLCBlbnYsIHVzZXJfa2V5X2NvbXBhcmF0b3IsIGlu
dGVybmFsX2l0ZXIsIHNlcXVlbmNlKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZGJfaXRlci5oIGIvU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9kYl9pdGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGQ5ZTFiMTcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9k
Yi9kYl9pdGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9S
UyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCi0KLSNpZm5kZWYgU1RPUkFHRV9MRVZF
TERCX0RCX0RCX0lURVJfSF8KLSNkZWZpbmUgU1RPUkFHRV9MRVZFTERCX0RCX0RCX0lURVJfSF8K
LQotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgImxldmVsZGIvZGIuaCIKLSNpbmNsdWRl
ICJkYi9kYmZvcm1hdC5oIgotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7Ci0KLS8vIFJldHVybiBhIG5l
dyBpdGVyYXRvciB0aGF0IGNvbnZlcnRzIGludGVybmFsIGtleXMgKHlpZWxkZWQgYnkKLS8vICIq
aW50ZXJuYWxfaXRlciIpIHRoYXQgd2VyZSBsaXZlIGF0IHRoZSBzcGVjaWZpZWQgInNlcXVlbmNl
IiBudW1iZXIKLS8vIGludG8gYXBwcm9wcmlhdGUgdXNlciBrZXlzLgotZXh0ZXJuIEl0ZXJhdG9y
KiBOZXdEQkl0ZXJhdG9yKAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nKiBkYm5hbWUsCi0gICAgRW52
KiBlbnYsCi0gICAgY29uc3QgQ29tcGFyYXRvciogdXNlcl9rZXlfY29tcGFyYXRvciwKLSAgICBJ
dGVyYXRvciogaW50ZXJuYWxfaXRlciwKLSAgICBjb25zdCBTZXF1ZW5jZU51bWJlciYgc2VxdWVu
Y2UpOwotCi19ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgotCi0jZW5kaWYgIC8vIFNUT1JBR0VfTEVW
RUxEQl9EQl9EQl9JVEVSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRi
L2RiL2RiX3Rlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2RiX3Rlc3QuY2MK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4NGVhM2IuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9kYl90ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEs
MjAyNyArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRv
cnMuCi0KLSNpbmNsdWRlICJsZXZlbGRiL2RiLmgiCi0jaW5jbHVkZSAibGV2ZWxkYi9maWx0ZXJf
cG9saWN5LmgiCi0jaW5jbHVkZSAiZGIvZGJfaW1wbC5oIgotI2luY2x1ZGUgImRiL2ZpbGVuYW1l
LmgiCi0jaW5jbHVkZSAiZGIvdmVyc2lvbl9zZXQuaCIKLSNpbmNsdWRlICJkYi93cml0ZV9iYXRj
aF9pbnRlcm5hbC5oIgotI2luY2x1ZGUgImxldmVsZGIvY2FjaGUuaCIKLSNpbmNsdWRlICJsZXZl
bGRiL2Vudi5oIgotI2luY2x1ZGUgImxldmVsZGIvdGFibGUuaCIKLSNpbmNsdWRlICJ1dGlsL2hh
c2guaCIKLSNpbmNsdWRlICJ1dGlsL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJ1dGlsL211dGV4bG9j
ay5oIgotI2luY2x1ZGUgInV0aWwvdGVzdGhhcm5lc3MuaCIKLSNpbmNsdWRlICJ1dGlsL3Rlc3R1
dGlsLmgiCi0KLW5hbWVzcGFjZSBsZXZlbGRiIHsKLQotc3RhdGljIHN0ZDo6c3RyaW5nIFJhbmRv
bVN0cmluZyhSYW5kb20qIHJuZCwgaW50IGxlbikgewotICBzdGQ6OnN0cmluZyByOwotICB0ZXN0
OjpSYW5kb21TdHJpbmcocm5kLCBsZW4sICZyKTsKLSAgcmV0dXJuIHI7Ci19Ci0KLW5hbWVzcGFj
ZSB7Ci1jbGFzcyBBdG9taWNDb3VudGVyIHsKLSBwcml2YXRlOgotICBwb3J0OjpNdXRleCBtdV87
Ci0gIGludCBjb3VudF87Ci0gcHVibGljOgotICBBdG9taWNDb3VudGVyKCkgOiBjb3VudF8oMCkg
eyB9Ci0gIHZvaWQgSW5jcmVtZW50KCkgewotICAgIE11dGV4TG9jayBsKCZtdV8pOwotICAgIGNv
dW50XysrOwotICB9Ci0gIGludCBSZWFkKCkgewotICAgIE11dGV4TG9jayBsKCZtdV8pOwotICAg
IHJldHVybiBjb3VudF87Ci0gIH0KLSAgdm9pZCBSZXNldCgpIHsKLSAgICBNdXRleExvY2sgbCgm
bXVfKTsKLSAgICBjb3VudF8gPSAwOwotICB9Ci19OwotfQotCi0vLyBTcGVjaWFsIEVudiB1c2Vk
IHRvIGRlbGF5IGJhY2tncm91bmQgb3BlcmF0aW9ucwotY2xhc3MgU3BlY2lhbEVudiA6IHB1Ymxp
YyBFbnZXcmFwcGVyIHsKLSBwdWJsaWM6Ci0gIC8vIHNzdGFibGUgU3luYygpIGNhbGxzIGFyZSBi
bG9ja2VkIHdoaWxlIHRoaXMgcG9pbnRlciBpcyBub24tTlVMTC4KLSAgcG9ydDo6QXRvbWljUG9p
bnRlciBkZWxheV9zc3RhYmxlX3N5bmNfOwotCi0gIC8vIFNpbXVsYXRlIG5vLXNwYWNlIGVycm9y
cyB3aGlsZSB0aGlzIHBvaW50ZXIgaXMgbm9uLU5VTEwuCi0gIHBvcnQ6OkF0b21pY1BvaW50ZXIg
bm9fc3BhY2VfOwotCi0gIC8vIFNpbXVsYXRlIG5vbi13cml0YWJsZSBmaWxlIHN5c3RlbSB3aGls
ZSB0aGlzIHBvaW50ZXIgaXMgbm9uLU5VTEwKLSAgcG9ydDo6QXRvbWljUG9pbnRlciBub25fd3Jp
dGFibGVfOwotCi0gIC8vIEZvcmNlIHN5bmMgb2YgbWFuaWZlc3QgZmlsZXMgdG8gZmFpbCB3aGls
ZSB0aGlzIHBvaW50ZXIgaXMgbm9uLU5VTEwKLSAgcG9ydDo6QXRvbWljUG9pbnRlciBtYW5pZmVz
dF9zeW5jX2Vycm9yXzsKLQotICAvLyBGb3JjZSB3cml0ZSB0byBtYW5pZmVzdCBmaWxlcyB0byBm
YWlsIHdoaWxlIHRoaXMgcG9pbnRlciBpcyBub24tTlVMTAotICBwb3J0OjpBdG9taWNQb2ludGVy
IG1hbmlmZXN0X3dyaXRlX2Vycm9yXzsKLQotICBib29sIGNvdW50X3JhbmRvbV9yZWFkc187Ci0g
IEF0b21pY0NvdW50ZXIgcmFuZG9tX3JlYWRfY291bnRlcl87Ci0KLSAgQXRvbWljQ291bnRlciBz
bGVlcF9jb3VudGVyXzsKLQotICBleHBsaWNpdCBTcGVjaWFsRW52KEVudiogYmFzZSkgOiBFbnZX
cmFwcGVyKGJhc2UpIHsKLSAgICBkZWxheV9zc3RhYmxlX3N5bmNfLlJlbGVhc2VfU3RvcmUoTlVM
TCk7Ci0gICAgbm9fc3BhY2VfLlJlbGVhc2VfU3RvcmUoTlVMTCk7Ci0gICAgbm9uX3dyaXRhYmxl
Xy5SZWxlYXNlX1N0b3JlKE5VTEwpOwotICAgIGNvdW50X3JhbmRvbV9yZWFkc18gPSBmYWxzZTsK
LSAgICBtYW5pZmVzdF9zeW5jX2Vycm9yXy5SZWxlYXNlX1N0b3JlKE5VTEwpOwotICAgIG1hbmlm
ZXN0X3dyaXRlX2Vycm9yXy5SZWxlYXNlX1N0b3JlKE5VTEwpOwotICB9Ci0KLSAgU3RhdHVzIE5l
d1dyaXRhYmxlRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZiwgV3JpdGFibGVGaWxlKiogcikgewot
ICAgIGNsYXNzIFNTVGFibGVGaWxlIDogcHVibGljIFdyaXRhYmxlRmlsZSB7Ci0gICAgIHByaXZh
dGU6Ci0gICAgICBTcGVjaWFsRW52KiBlbnZfOwotICAgICAgV3JpdGFibGVGaWxlKiBiYXNlXzsK
LQotICAgICBwdWJsaWM6Ci0gICAgICBTU1RhYmxlRmlsZShTcGVjaWFsRW52KiBlbnYsIFdyaXRh
YmxlRmlsZSogYmFzZSkKLSAgICAgICAgICA6IGVudl8oZW52KSwKLSAgICAgICAgICAgIGJhc2Vf
KGJhc2UpIHsKLSAgICAgIH0KLSAgICAgIH5TU1RhYmxlRmlsZSgpIHsgZGVsZXRlIGJhc2VfOyB9
Ci0gICAgICBTdGF0dXMgQXBwZW5kKGNvbnN0IFNsaWNlJiBkYXRhKSB7Ci0gICAgICAgIGlmIChl
bnZfLT5ub19zcGFjZV8uQWNxdWlyZV9Mb2FkKCkgIT0gTlVMTCkgewotICAgICAgICAgIC8vIERy
b3Agd3JpdGVzIG9uIHRoZSBmbG9vcgotICAgICAgICAgIHJldHVybiBTdGF0dXM6Ok9LKCk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcmV0dXJuIGJhc2VfLT5BcHBlbmQoZGF0YSk7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICAgIFN0YXR1cyBDbG9zZSgpIHsgcmV0dXJuIGJhc2VfLT5D
bG9zZSgpOyB9Ci0gICAgICBTdGF0dXMgRmx1c2goKSB7IHJldHVybiBiYXNlXy0+Rmx1c2goKTsg
fQotICAgICAgU3RhdHVzIFN5bmMoKSB7Ci0gICAgICAgIHdoaWxlIChlbnZfLT5kZWxheV9zc3Rh
YmxlX3N5bmNfLkFjcXVpcmVfTG9hZCgpICE9IE5VTEwpIHsKLSAgICAgICAgICBlbnZfLT5TbGVl
cEZvck1pY3Jvc2Vjb25kcygxMDAwMDApOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBiYXNl
Xy0+U3luYygpOwotICAgICAgfQotICAgIH07Ci0gICAgY2xhc3MgTWFuaWZlc3RGaWxlIDogcHVi
bGljIFdyaXRhYmxlRmlsZSB7Ci0gICAgIHByaXZhdGU6Ci0gICAgICBTcGVjaWFsRW52KiBlbnZf
OwotICAgICAgV3JpdGFibGVGaWxlKiBiYXNlXzsKLSAgICAgcHVibGljOgotICAgICAgTWFuaWZl
c3RGaWxlKFNwZWNpYWxFbnYqIGVudiwgV3JpdGFibGVGaWxlKiBiKSA6IGVudl8oZW52KSwgYmFz
ZV8oYikgeyB9Ci0gICAgICB+TWFuaWZlc3RGaWxlKCkgeyBkZWxldGUgYmFzZV87IH0KLSAgICAg
IFN0YXR1cyBBcHBlbmQoY29uc3QgU2xpY2UmIGRhdGEpIHsKLSAgICAgICAgaWYgKGVudl8tPm1h
bmlmZXN0X3dyaXRlX2Vycm9yXy5BY3F1aXJlX0xvYWQoKSAhPSBOVUxMKSB7Ci0gICAgICAgICAg
cmV0dXJuIFN0YXR1czo6SU9FcnJvcigic2ltdWxhdGVkIHdyaXRlciBlcnJvciIpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgIHJldHVybiBiYXNlXy0+QXBwZW5kKGRhdGEpOwotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgICBTdGF0dXMgQ2xvc2UoKSB7IHJldHVybiBiYXNlXy0+Q2xvc2Uo
KTsgfQotICAgICAgU3RhdHVzIEZsdXNoKCkgeyByZXR1cm4gYmFzZV8tPkZsdXNoKCk7IH0KLSAg
ICAgIFN0YXR1cyBTeW5jKCkgewotICAgICAgICBpZiAoZW52Xy0+bWFuaWZlc3Rfc3luY19lcnJv
cl8uQWNxdWlyZV9Mb2FkKCkgIT0gTlVMTCkgewotICAgICAgICAgIHJldHVybiBTdGF0dXM6OklP
RXJyb3IoInNpbXVsYXRlZCBzeW5jIGVycm9yIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgcmV0dXJuIGJhc2VfLT5TeW5jKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9OwotCi0g
ICAgaWYgKG5vbl93cml0YWJsZV8uQWNxdWlyZV9Mb2FkKCkgIT0gTlVMTCkgewotICAgICAgcmV0
dXJuIFN0YXR1czo6SU9FcnJvcigic2ltdWxhdGVkIHdyaXRlIGVycm9yIik7Ci0gICAgfQotCi0g
ICAgU3RhdHVzIHMgPSB0YXJnZXQoKS0+TmV3V3JpdGFibGVGaWxlKGYsIHIpOwotICAgIGlmIChz
Lm9rKCkpIHsKLSAgICAgIGlmIChzdHJzdHIoZi5jX3N0cigpLCAiLnNzdCIpICE9IE5VTEwpIHsK
LSAgICAgICAgKnIgPSBuZXcgU1NUYWJsZUZpbGUodGhpcywgKnIpOwotICAgICAgfSBlbHNlIGlm
IChzdHJzdHIoZi5jX3N0cigpLCAiTUFOSUZFU1QiKSAhPSBOVUxMKSB7Ci0gICAgICAgICpyID0g
bmV3IE1hbmlmZXN0RmlsZSh0aGlzLCAqcik7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBz
OwotICB9Ci0KLSAgU3RhdHVzIE5ld1JhbmRvbUFjY2Vzc0ZpbGUoY29uc3Qgc3RkOjpzdHJpbmcm
IGYsIFJhbmRvbUFjY2Vzc0ZpbGUqKiByKSB7Ci0gICAgY2xhc3MgQ291bnRpbmdGaWxlIDogcHVi
bGljIFJhbmRvbUFjY2Vzc0ZpbGUgewotICAgICBwcml2YXRlOgotICAgICAgUmFuZG9tQWNjZXNz
RmlsZSogdGFyZ2V0XzsKLSAgICAgIEF0b21pY0NvdW50ZXIqIGNvdW50ZXJfOwotICAgICBwdWJs
aWM6Ci0gICAgICBDb3VudGluZ0ZpbGUoUmFuZG9tQWNjZXNzRmlsZSogdGFyZ2V0LCBBdG9taWND
b3VudGVyKiBjb3VudGVyKQotICAgICAgICAgIDogdGFyZ2V0Xyh0YXJnZXQpLCBjb3VudGVyXyhj
b3VudGVyKSB7Ci0gICAgICB9Ci0gICAgICB2aXJ0dWFsIH5Db3VudGluZ0ZpbGUoKSB7IGRlbGV0
ZSB0YXJnZXRfOyB9Ci0gICAgICB2aXJ0dWFsIFN0YXR1cyBSZWFkKHVpbnQ2NF90IG9mZnNldCwg
c2l6ZV90IG4sIFNsaWNlKiByZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIq
IHNjcmF0Y2gpIGNvbnN0IHsKLSAgICAgICAgY291bnRlcl8tPkluY3JlbWVudCgpOwotICAgICAg
ICByZXR1cm4gdGFyZ2V0Xy0+UmVhZChvZmZzZXQsIG4sIHJlc3VsdCwgc2NyYXRjaCk7Ci0gICAg
ICB9Ci0gICAgfTsKLQotICAgIFN0YXR1cyBzID0gdGFyZ2V0KCktPk5ld1JhbmRvbUFjY2Vzc0Zp
bGUoZiwgcik7Ci0gICAgaWYgKHMub2soKSAmJiBjb3VudF9yYW5kb21fcmVhZHNfKSB7Ci0gICAg
ICAqciA9IG5ldyBDb3VudGluZ0ZpbGUoKnIsICZyYW5kb21fcmVhZF9jb3VudGVyXyk7Ci0gICAg
fQotICAgIHJldHVybiBzOwotICB9Ci0KLSAgdmlydHVhbCB2b2lkIFNsZWVwRm9yTWljcm9zZWNv
bmRzKGludCBtaWNyb3MpIHsKLSAgICBzbGVlcF9jb3VudGVyXy5JbmNyZW1lbnQoKTsKLSAgICB0
YXJnZXQoKS0+U2xlZXBGb3JNaWNyb3NlY29uZHMobWljcm9zKTsKLSAgfQotfTsKLQotY2xhc3Mg
REJUZXN0IHsKLSBwcml2YXRlOgotICBjb25zdCBGaWx0ZXJQb2xpY3kqIGZpbHRlcl9wb2xpY3lf
OwotCi0gIC8vIFNlcXVlbmNlIG9mIG9wdGlvbiBjb25maWd1cmF0aW9ucyB0byB0cnkKLSAgZW51
bSBPcHRpb25Db25maWcgewotICAgIGtEZWZhdWx0LAotICAgIGtGaWx0ZXIsCi0gICAga1VuY29t
cHJlc3NlZCwKLSAgICBrRW5kCi0gIH07Ci0gIGludCBvcHRpb25fY29uZmlnXzsKLQotIHB1Ymxp
YzoKLSAgc3RkOjpzdHJpbmcgZGJuYW1lXzsKLSAgU3BlY2lhbEVudiogZW52XzsKLSAgREIqIGRi
XzsKLQotICBPcHRpb25zIGxhc3Rfb3B0aW9uc187Ci0KLSAgREJUZXN0KCkgOiBvcHRpb25fY29u
ZmlnXyhrRGVmYXVsdCksCi0gICAgICAgICAgICAgZW52XyhuZXcgU3BlY2lhbEVudihFbnY6OkRl
ZmF1bHQoKSkpIHsKLSAgICBmaWx0ZXJfcG9saWN5XyA9IE5ld0Jsb29tRmlsdGVyUG9saWN5KDEw
KTsKLSAgICBkYm5hbWVfID0gdGVzdDo6VG1wRGlyKCkgKyAiL2RiX3Rlc3QiOwotICAgIERlc3Ry
b3lEQihkYm5hbWVfLCBPcHRpb25zKCkpOwotICAgIGRiXyA9IE5VTEw7Ci0gICAgUmVvcGVuKCk7
Ci0gIH0KLQotICB+REJUZXN0KCkgewotICAgIGRlbGV0ZSBkYl87Ci0gICAgRGVzdHJveURCKGRi
bmFtZV8sIE9wdGlvbnMoKSk7Ci0gICAgZGVsZXRlIGVudl87Ci0gICAgZGVsZXRlIGZpbHRlcl9w
b2xpY3lfOwotICB9Ci0KLSAgLy8gU3dpdGNoIHRvIGEgZnJlc2ggZGF0YWJhc2Ugd2l0aCB0aGUg
bmV4dCBvcHRpb24gY29uZmlndXJhdGlvbiB0bwotICAvLyB0ZXN0LiAgUmV0dXJuIGZhbHNlIGlm
IHRoZXJlIGFyZSBubyBtb3JlIGNvbmZpZ3VyYXRpb25zIHRvIHRlc3QuCi0gIGJvb2wgQ2hhbmdl
T3B0aW9ucygpIHsKLSAgICBvcHRpb25fY29uZmlnXysrOwotICAgIGlmIChvcHRpb25fY29uZmln
XyA+PSBrRW5kKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgIERl
c3Ryb3lBbmRSZW9wZW4oKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgfQotCi0gIC8v
IFJldHVybiB0aGUgY3VycmVudCBvcHRpb24gY29uZmlndXJhdGlvbi4KLSAgT3B0aW9ucyBDdXJy
ZW50T3B0aW9ucygpIHsKLSAgICBPcHRpb25zIG9wdGlvbnM7Ci0gICAgc3dpdGNoIChvcHRpb25f
Y29uZmlnXykgewotICAgICAgY2FzZSBrRmlsdGVyOgotICAgICAgICBvcHRpb25zLmZpbHRlcl9w
b2xpY3kgPSBmaWx0ZXJfcG9saWN5XzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtVbmNv
bXByZXNzZWQ6Ci0gICAgICAgIG9wdGlvbnMuY29tcHJlc3Npb24gPSBrTm9Db21wcmVzc2lvbjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgcmV0dXJuIG9wdGlvbnM7Ci0gIH0KLQotICBEQkltcGwqIGRiZnVsbCgpIHsKLSAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxEQkltcGwqPihkYl8pOwotICB9Ci0KLSAgdm9pZCBSZW9wZW4o
T3B0aW9ucyogb3B0aW9ucyA9IE5VTEwpIHsKLSAgICBBU1NFUlRfT0soVHJ5UmVvcGVuKG9wdGlv
bnMpKTsKLSAgfQotCi0gIHZvaWQgQ2xvc2UoKSB7Ci0gICAgZGVsZXRlIGRiXzsKLSAgICBkYl8g
PSBOVUxMOwotICB9Ci0KLSAgdm9pZCBEZXN0cm95QW5kUmVvcGVuKE9wdGlvbnMqIG9wdGlvbnMg
PSBOVUxMKSB7Ci0gICAgZGVsZXRlIGRiXzsKLSAgICBkYl8gPSBOVUxMOwotICAgIERlc3Ryb3lE
QihkYm5hbWVfLCBPcHRpb25zKCkpOwotICAgIEFTU0VSVF9PSyhUcnlSZW9wZW4ob3B0aW9ucykp
OwotICB9Ci0KLSAgU3RhdHVzIFRyeVJlb3BlbihPcHRpb25zKiBvcHRpb25zKSB7Ci0gICAgZGVs
ZXRlIGRiXzsKLSAgICBkYl8gPSBOVUxMOwotICAgIE9wdGlvbnMgb3B0czsKLSAgICBpZiAob3B0
aW9ucyAhPSBOVUxMKSB7Ci0gICAgICBvcHRzID0gKm9wdGlvbnM7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgIG9wdHMgPSBDdXJyZW50T3B0aW9ucygpOwotICAgICAgb3B0cy5jcmVhdGVfaWZfbWlzc2lu
ZyA9IHRydWU7Ci0gICAgfQotICAgIGxhc3Rfb3B0aW9uc18gPSBvcHRzOwotCi0gICAgcmV0dXJu
IERCOjpPcGVuKG9wdHMsIGRibmFtZV8sICZkYl8pOwotICB9Ci0KLSAgU3RhdHVzIFB1dChjb25z
dCBzdGQ6OnN0cmluZyYgaywgY29uc3Qgc3RkOjpzdHJpbmcmIHYpIHsKLSAgICByZXR1cm4gZGJf
LT5QdXQoV3JpdGVPcHRpb25zKCksIGssIHYpOwotICB9Ci0KLSAgU3RhdHVzIERlbGV0ZShjb25z
dCBzdGQ6OnN0cmluZyYgaykgewotICAgIHJldHVybiBkYl8tPkRlbGV0ZShXcml0ZU9wdGlvbnMo
KSwgayk7Ci0gIH0KLQotICBzdGQ6OnN0cmluZyBHZXQoY29uc3Qgc3RkOjpzdHJpbmcmIGssIGNv
bnN0IFNuYXBzaG90KiBzbmFwc2hvdCA9IE5VTEwpIHsKLSAgICBSZWFkT3B0aW9ucyBvcHRpb25z
OwotICAgIG9wdGlvbnMuc25hcHNob3QgPSBzbmFwc2hvdDsKLSAgICBzdGQ6OnN0cmluZyByZXN1
bHQ7Ci0gICAgU3RhdHVzIHMgPSBkYl8tPkdldChvcHRpb25zLCBrLCAmcmVzdWx0KTsKLSAgICBp
ZiAocy5Jc05vdEZvdW5kKCkpIHsKLSAgICAgIHJlc3VsdCA9ICJOT1RfRk9VTkQiOwotICAgIH0g
ZWxzZSBpZiAoIXMub2soKSkgewotICAgICAgcmVzdWx0ID0gcy5Ub1N0cmluZygpOwotICAgIH0K
LSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLy8gUmV0dXJuIGEgc3RyaW5nIHRoYXQgY29u
dGFpbnMgYWxsIGtleSx2YWx1ZSBwYWlycyBpbiBvcmRlciwKLSAgLy8gZm9ybWF0dGVkIGxpa2Ug
IihrMS0+djEpKGsyLT52MikiLgotICBzdGQ6OnN0cmluZyBDb250ZW50cygpIHsKLSAgICBzdGQ6
OnZlY3RvcjxzdGQ6OnN0cmluZz4gZm9yd2FyZDsKLSAgICBzdGQ6OnN0cmluZyByZXN1bHQ7Ci0g
ICAgSXRlcmF0b3IqIGl0ZXIgPSBkYl8tPk5ld0l0ZXJhdG9yKFJlYWRPcHRpb25zKCkpOwotICAg
IGZvciAoaXRlci0+U2Vla1RvRmlyc3QoKTsgaXRlci0+VmFsaWQoKTsgaXRlci0+TmV4dCgpKSB7
Ci0gICAgICBzdGQ6OnN0cmluZyBzID0gSXRlclN0YXR1cyhpdGVyKTsKLSAgICAgIHJlc3VsdC5w
dXNoX2JhY2soJygnKTsKLSAgICAgIHJlc3VsdC5hcHBlbmQocyk7Ci0gICAgICByZXN1bHQucHVz
aF9iYWNrKCcpJyk7Ci0gICAgICBmb3J3YXJkLnB1c2hfYmFjayhzKTsKLSAgICB9Ci0KLSAgICAv
LyBDaGVjayByZXZlcnNlIGl0ZXJhdGlvbiByZXN1bHRzIGFyZSB0aGUgcmV2ZXJzZSBvZiBmb3J3
YXJkIHJlc3VsdHMKLSAgICBpbnQgbWF0Y2hlZCA9IDA7Ci0gICAgZm9yIChpdGVyLT5TZWVrVG9M
YXN0KCk7IGl0ZXItPlZhbGlkKCk7IGl0ZXItPlByZXYoKSkgewotICAgICAgQVNTRVJUX0xUKG1h
dGNoZWQsIGZvcndhcmQuc2l6ZSgpKTsKLSAgICAgIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIp
LCBmb3J3YXJkW2ZvcndhcmQuc2l6ZSgpIC0gbWF0Y2hlZCAtIDFdKTsKLSAgICAgIG1hdGNoZWQr
KzsKLSAgICB9Ci0gICAgQVNTRVJUX0VRKG1hdGNoZWQsIGZvcndhcmQuc2l6ZSgpKTsKLQotICAg
IGRlbGV0ZSBpdGVyOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBzdGQ6OnN0cmluZyBB
bGxFbnRyaWVzRm9yKGNvbnN0IFNsaWNlJiB1c2VyX2tleSkgewotICAgIEl0ZXJhdG9yKiBpdGVy
ID0gZGJmdWxsKCktPlRFU1RfTmV3SW50ZXJuYWxJdGVyYXRvcigpOwotICAgIEludGVybmFsS2V5
IHRhcmdldCh1c2VyX2tleSwga01heFNlcXVlbmNlTnVtYmVyLCBrVHlwZVZhbHVlKTsKLSAgICBp
dGVyLT5TZWVrKHRhcmdldC5FbmNvZGUoKSk7Ci0gICAgc3RkOjpzdHJpbmcgcmVzdWx0OwotICAg
IGlmICghaXRlci0+c3RhdHVzKCkub2soKSkgewotICAgICAgcmVzdWx0ID0gaXRlci0+c3RhdHVz
KCkuVG9TdHJpbmcoKTsKLSAgICB9IGVsc2UgewotICAgICAgcmVzdWx0ID0gIlsgIjsKLSAgICAg
IGJvb2wgZmlyc3QgPSB0cnVlOwotICAgICAgd2hpbGUgKGl0ZXItPlZhbGlkKCkpIHsKLSAgICAg
ICAgUGFyc2VkSW50ZXJuYWxLZXkgaWtleTsKLSAgICAgICAgaWYgKCFQYXJzZUludGVybmFsS2V5
KGl0ZXItPmtleSgpLCAmaWtleSkpIHsKLSAgICAgICAgICByZXN1bHQgKz0gIkNPUlJVUFRFRCI7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKGxhc3Rfb3B0aW9uc18uY29tcGFyYXRv
ci0+Q29tcGFyZShpa2V5LnVzZXJfa2V5LCB1c2VyX2tleSkgIT0gMCkgewotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmICghZmlyc3QpIHsKLSAgICAgICAgICAg
IHJlc3VsdCArPSAiLCAiOwotICAgICAgICAgIH0KLSAgICAgICAgICBmaXJzdCA9IGZhbHNlOwot
ICAgICAgICAgIHN3aXRjaCAoaWtleS50eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIGtUeXBlVmFs
dWU6Ci0gICAgICAgICAgICAgIHJlc3VsdCArPSBpdGVyLT52YWx1ZSgpLlRvU3RyaW5nKCk7Ci0g
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBrVHlwZURlbGV0aW9uOgotICAg
ICAgICAgICAgICByZXN1bHQgKz0gIkRFTCI7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBpdGVyLT5OZXh0KCk7Ci0gICAgICB9Ci0gICAgICBp
ZiAoIWZpcnN0KSB7Ci0gICAgICAgIHJlc3VsdCArPSAiICI7Ci0gICAgICB9Ci0gICAgICByZXN1
bHQgKz0gIl0iOwotICAgIH0KLSAgICBkZWxldGUgaXRlcjsKLSAgICByZXR1cm4gcmVzdWx0Owot
ICB9Ci0KLSAgaW50IE51bVRhYmxlRmlsZXNBdExldmVsKGludCBsZXZlbCkgewotICAgIHN0ZDo6
c3RyaW5nIHByb3BlcnR5OwotICAgIEFTU0VSVF9UUlVFKAotICAgICAgICBkYl8tPkdldFByb3Bl
cnR5KCJsZXZlbGRiLm51bS1maWxlcy1hdC1sZXZlbCIgKyBOdW1iZXJUb1N0cmluZyhsZXZlbCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgJnByb3BlcnR5KSk7Ci0gICAgcmV0dXJuIGF0b2ko
cHJvcGVydHkuY19zdHIoKSk7Ci0gIH0KLQotICBpbnQgVG90YWxUYWJsZUZpbGVzKCkgewotICAg
IGludCByZXN1bHQgPSAwOwotICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBjb25maWc6
OmtOdW1MZXZlbHM7IGxldmVsKyspIHsKLSAgICAgIHJlc3VsdCArPSBOdW1UYWJsZUZpbGVzQXRM
ZXZlbChsZXZlbCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvLyBSZXR1
cm4gc3ByZWFkIG9mIGZpbGVzIHBlciBsZXZlbAotICBzdGQ6OnN0cmluZyBGaWxlc1BlckxldmVs
KCkgewotICAgIHN0ZDo6c3RyaW5nIHJlc3VsdDsKLSAgICBpbnQgbGFzdF9ub25femVyb19vZmZz
ZXQgPSAwOwotICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBjb25maWc6OmtOdW1MZXZl
bHM7IGxldmVsKyspIHsKLSAgICAgIGludCBmID0gTnVtVGFibGVGaWxlc0F0TGV2ZWwobGV2ZWwp
OwotICAgICAgY2hhciBidWZbMTAwXTsKLSAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1Ziks
ICIlcyVkIiwgKGxldmVsID8gIiwiIDogIiIpLCBmKTsKLSAgICAgIHJlc3VsdCArPSBidWY7Ci0g
ICAgICBpZiAoZiA+IDApIHsKLSAgICAgICAgbGFzdF9ub25femVyb19vZmZzZXQgPSByZXN1bHQu
c2l6ZSgpOwotICAgICAgfQotICAgIH0KLSAgICByZXN1bHQucmVzaXplKGxhc3Rfbm9uX3plcm9f
b2Zmc2V0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgaW50IENvdW50RmlsZXMoKSB7
Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGZpbGVzOwotICAgIGVudl8tPkdldENoaWxk
cmVuKGRibmFtZV8sICZmaWxlcyk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oZmlsZXMu
c2l6ZSgpKTsKLSAgfQotCi0gIHVpbnQ2NF90IFNpemUoY29uc3QgU2xpY2UmIHN0YXJ0LCBjb25z
dCBTbGljZSYgbGltaXQpIHsKLSAgICBSYW5nZSByKHN0YXJ0LCBsaW1pdCk7Ci0gICAgdWludDY0
X3Qgc2l6ZTsKLSAgICBkYl8tPkdldEFwcHJveGltYXRlU2l6ZXMoJnIsIDEsICZzaXplKTsKLSAg
ICByZXR1cm4gc2l6ZTsKLSAgfQotCi0gIHZvaWQgQ29tcGFjdChjb25zdCBTbGljZSYgc3RhcnQs
IGNvbnN0IFNsaWNlJiBsaW1pdCkgewotICAgIGRiXy0+Q29tcGFjdFJhbmdlKCZzdGFydCwgJmxp
bWl0KTsKLSAgfQotCi0gIC8vIERvIG4gbWVtdGFibGUgY29tcGFjdGlvbnMsIGVhY2ggb2Ygd2hp
Y2ggcHJvZHVjZXMgYW4gc3N0YWJsZQotICAvLyBjb3ZlcmluZyB0aGUgcmFuZ2UgW3NtYWxsLGxh
cmdlXS4KLSAgdm9pZCBNYWtlVGFibGVzKGludCBuLCBjb25zdCBzdGQ6OnN0cmluZyYgc21hbGws
IGNvbnN0IHN0ZDo6c3RyaW5nJiBsYXJnZSkgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsg
aSsrKSB7Ci0gICAgICBQdXQoc21hbGwsICJiZWdpbiIpOwotICAgICAgUHV0KGxhcmdlLCAiZW5k
Iik7Ci0gICAgICBkYmZ1bGwoKS0+VEVTVF9Db21wYWN0TWVtVGFibGUoKTsKLSAgICB9Ci0gIH0K
LQotICAvLyBQcmV2ZW50IHB1c2hpbmcgb2YgbmV3IHNzdGFibGVzIGludG8gZGVlcGVyIGxldmVs
cyBieSBhZGRpbmcKLSAgLy8gdGFibGVzIHRoYXQgY292ZXIgYSBzcGVjaWZpZWQgcmFuZ2UgdG8g
YWxsIGxldmVscy4KLSAgdm9pZCBGaWxsTGV2ZWxzKGNvbnN0IHN0ZDo6c3RyaW5nJiBzbWFsbGVz
dCwgY29uc3Qgc3RkOjpzdHJpbmcmIGxhcmdlc3QpIHsKLSAgICBNYWtlVGFibGVzKGNvbmZpZzo6
a051bUxldmVscywgc21hbGxlc3QsIGxhcmdlc3QpOwotICB9Ci0KLSAgdm9pZCBEdW1wRmlsZUNv
dW50cyhjb25zdCBjaGFyKiBsYWJlbCkgewotICAgIGZwcmludGYoc3RkZXJyLCAiLS0tXG4lczpc
biIsIGxhYmVsKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIm1heG92ZXJsYXA6ICVsbGRcbiIsCi0g
ICAgICAgICAgICBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KAotICAgICAgICAgICAgICAgIGRiZnVs
bCgpLT5URVNUX01heE5leHRMZXZlbE92ZXJsYXBwaW5nQnl0ZXMoKSkpOwotICAgIGZvciAoaW50
IGxldmVsID0gMDsgbGV2ZWwgPCBjb25maWc6OmtOdW1MZXZlbHM7IGxldmVsKyspIHsKLSAgICAg
IGludCBudW0gPSBOdW1UYWJsZUZpbGVzQXRMZXZlbChsZXZlbCk7Ci0gICAgICBpZiAobnVtID4g
MCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgbGV2ZWwgJTNkIDogJWQgZmlsZXNcbiIs
IGxldmVsLCBudW0pOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHN0ZDo6c3RyaW5nIER1bXBT
U1RhYmxlTGlzdCgpIHsKLSAgICBzdGQ6OnN0cmluZyBwcm9wZXJ0eTsKLSAgICBkYl8tPkdldFBy
b3BlcnR5KCJsZXZlbGRiLnNzdGFibGVzIiwgJnByb3BlcnR5KTsKLSAgICByZXR1cm4gcHJvcGVy
dHk7Ci0gIH0KLQotICBzdGQ6OnN0cmluZyBJdGVyU3RhdHVzKEl0ZXJhdG9yKiBpdGVyKSB7Ci0g
ICAgc3RkOjpzdHJpbmcgcmVzdWx0OwotICAgIGlmIChpdGVyLT5WYWxpZCgpKSB7Ci0gICAgICBy
ZXN1bHQgPSBpdGVyLT5rZXkoKS5Ub1N0cmluZygpICsgIi0+IiArIGl0ZXItPnZhbHVlKCkuVG9T
dHJpbmcoKTsKLSAgICB9IGVsc2UgewotICAgICAgcmVzdWx0ID0gIihpbnZhbGlkKSI7Ci0gICAg
fQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLX07Ci0KLVRFU1QoREJUZXN0LCBFbXB0eSkgewot
ICBkbyB7Ci0gICAgQVNTRVJUX1RSVUUoZGJfICE9IE5VTEwpOwotICAgIEFTU0VSVF9FUSgiTk9U
X0ZPVU5EIiwgR2V0KCJmb28iKSk7Ci0gIH0gd2hpbGUgKENoYW5nZU9wdGlvbnMoKSk7Ci19Ci0K
LVRFU1QoREJUZXN0LCBSZWFkV3JpdGUpIHsKLSAgZG8gewotICAgIEFTU0VSVF9PSyhQdXQoImZv
byIsICJ2MSIpKTsKLSAgICBBU1NFUlRfRVEoInYxIiwgR2V0KCJmb28iKSk7Ci0gICAgQVNTRVJU
X09LKFB1dCgiYmFyIiwgInYyIikpOwotICAgIEFTU0VSVF9PSyhQdXQoImZvbyIsICJ2MyIpKTsK
LSAgICBBU1NFUlRfRVEoInYzIiwgR2V0KCJmb28iKSk7Ci0gICAgQVNTRVJUX0VRKCJ2MiIsIEdl
dCgiYmFyIikpOwotICB9IHdoaWxlIChDaGFuZ2VPcHRpb25zKCkpOwotfQotCi1URVNUKERCVGVz
dCwgUHV0RGVsZXRlR2V0KSB7Ci0gIGRvIHsKLSAgICBBU1NFUlRfT0soZGJfLT5QdXQoV3JpdGVP
cHRpb25zKCksICJmb28iLCAidjEiKSk7Ci0gICAgQVNTRVJUX0VRKCJ2MSIsIEdldCgiZm9vIikp
OwotICAgIEFTU0VSVF9PSyhkYl8tPlB1dChXcml0ZU9wdGlvbnMoKSwgImZvbyIsICJ2MiIpKTsK
LSAgICBBU1NFUlRfRVEoInYyIiwgR2V0KCJmb28iKSk7Ci0gICAgQVNTRVJUX09LKGRiXy0+RGVs
ZXRlKFdyaXRlT3B0aW9ucygpLCAiZm9vIikpOwotICAgIEFTU0VSVF9FUSgiTk9UX0ZPVU5EIiwg
R2V0KCJmb28iKSk7Ci0gIH0gd2hpbGUgKENoYW5nZU9wdGlvbnMoKSk7Ci19Ci0KLVRFU1QoREJU
ZXN0LCBHZXRGcm9tSW1tdXRhYmxlTGF5ZXIpIHsKLSAgZG8gewotICAgIE9wdGlvbnMgb3B0aW9u
cyA9IEN1cnJlbnRPcHRpb25zKCk7Ci0gICAgb3B0aW9ucy5lbnYgPSBlbnZfOwotICAgIG9wdGlv
bnMud3JpdGVfYnVmZmVyX3NpemUgPSAxMDAwMDA7ICAvLyBTbWFsbCB3cml0ZSBidWZmZXIKLSAg
ICBSZW9wZW4oJm9wdGlvbnMpOwotCi0gICAgQVNTRVJUX09LKFB1dCgiZm9vIiwgInYxIikpOwot
ICAgIEFTU0VSVF9FUSgidjEiLCBHZXQoImZvbyIpKTsKLQotICAgIGVudl8tPmRlbGF5X3NzdGFi
bGVfc3luY18uUmVsZWFzZV9TdG9yZShlbnZfKTsgICAvLyBCbG9jayBzeW5jIGNhbGxzCi0gICAg
UHV0KCJrMSIsIHN0ZDo6c3RyaW5nKDEwMDAwMCwgJ3gnKSk7ICAgICAgICAgICAgIC8vIEZpbGwg
bWVtdGFibGUKLSAgICBQdXQoImsyIiwgc3RkOjpzdHJpbmcoMTAwMDAwLCAneScpKTsgICAgICAg
ICAgICAgLy8gVHJpZ2dlciBjb21wYWN0aW9uCi0gICAgQVNTRVJUX0VRKCJ2MSIsIEdldCgiZm9v
IikpOwotICAgIGVudl8tPmRlbGF5X3NzdGFibGVfc3luY18uUmVsZWFzZV9TdG9yZShOVUxMKTsg
ICAvLyBSZWxlYXNlIHN5bmMgY2FsbHMKLSAgfSB3aGlsZSAoQ2hhbmdlT3B0aW9ucygpKTsKLX0K
LQotVEVTVChEQlRlc3QsIEdldEZyb21WZXJzaW9ucykgewotICBkbyB7Ci0gICAgQVNTRVJUX09L
KFB1dCgiZm9vIiwgInYxIikpOwotICAgIGRiZnVsbCgpLT5URVNUX0NvbXBhY3RNZW1UYWJsZSgp
OwotICAgIEFTU0VSVF9FUSgidjEiLCBHZXQoImZvbyIpKTsKLSAgfSB3aGlsZSAoQ2hhbmdlT3B0
aW9ucygpKTsKLX0KLQotVEVTVChEQlRlc3QsIEdldFNuYXBzaG90KSB7Ci0gIGRvIHsKLSAgICAv
LyBUcnkgd2l0aCBib3RoIGEgc2hvcnQga2V5IGFuZCBhIGxvbmcga2V5Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCAyOyBpKyspIHsKLSAgICAgIHN0ZDo6c3RyaW5nIGtleSA9IChpID09IDApID8g
c3RkOjpzdHJpbmcoImZvbyIpIDogc3RkOjpzdHJpbmcoMjAwLCAneCcpOwotICAgICAgQVNTRVJU
X09LKFB1dChrZXksICJ2MSIpKTsKLSAgICAgIGNvbnN0IFNuYXBzaG90KiBzMSA9IGRiXy0+R2V0
U25hcHNob3QoKTsKLSAgICAgIEFTU0VSVF9PSyhQdXQoa2V5LCAidjIiKSk7Ci0gICAgICBBU1NF
UlRfRVEoInYyIiwgR2V0KGtleSkpOwotICAgICAgQVNTRVJUX0VRKCJ2MSIsIEdldChrZXksIHMx
KSk7Ci0gICAgICBkYmZ1bGwoKS0+VEVTVF9Db21wYWN0TWVtVGFibGUoKTsKLSAgICAgIEFTU0VS
VF9FUSgidjIiLCBHZXQoa2V5KSk7Ci0gICAgICBBU1NFUlRfRVEoInYxIiwgR2V0KGtleSwgczEp
KTsKLSAgICAgIGRiXy0+UmVsZWFzZVNuYXBzaG90KHMxKTsKLSAgICB9Ci0gIH0gd2hpbGUgKENo
YW5nZU9wdGlvbnMoKSk7Ci19Ci0KLVRFU1QoREJUZXN0LCBHZXRMZXZlbDBPcmRlcmluZykgewot
ICBkbyB7Ci0gICAgLy8gQ2hlY2sgdGhhdCB3ZSBwcm9jZXNzIGxldmVsLTAgZmlsZXMgaW4gY29y
cmVjdCBvcmRlci4gIFRoZSBjb2RlCi0gICAgLy8gYmVsb3cgZ2VuZXJhdGVzIHR3byBsZXZlbC0w
IGZpbGVzIHdoZXJlIHRoZSBlYXJsaWVyIG9uZSBjb21lcwotICAgIC8vIGJlZm9yZSB0aGUgbGF0
ZXIgb25lIGluIHRoZSBsZXZlbC0wIGZpbGUgbGlzdCBzaW5jZSB0aGUgZWFybGllcgotICAgIC8v
IG9uZSBoYXMgYSBzbWFsbGVyICJzbWFsbGVzdCIga2V5LgotICAgIEFTU0VSVF9PSyhQdXQoImJh
ciIsICJiIikpOwotICAgIEFTU0VSVF9PSyhQdXQoImZvbyIsICJ2MSIpKTsKLSAgICBkYmZ1bGwo
KS0+VEVTVF9Db21wYWN0TWVtVGFibGUoKTsKLSAgICBBU1NFUlRfT0soUHV0KCJmb28iLCAidjIi
KSk7Ci0gICAgZGJmdWxsKCktPlRFU1RfQ29tcGFjdE1lbVRhYmxlKCk7Ci0gICAgQVNTRVJUX0VR
KCJ2MiIsIEdldCgiZm9vIikpOwotICB9IHdoaWxlIChDaGFuZ2VPcHRpb25zKCkpOwotfQotCi1U
RVNUKERCVGVzdCwgR2V0T3JkZXJlZEJ5TGV2ZWxzKSB7Ci0gIGRvIHsKLSAgICBBU1NFUlRfT0so
UHV0KCJmb28iLCAidjEiKSk7Ci0gICAgQ29tcGFjdCgiYSIsICJ6Iik7Ci0gICAgQVNTRVJUX0VR
KCJ2MSIsIEdldCgiZm9vIikpOwotICAgIEFTU0VSVF9PSyhQdXQoImZvbyIsICJ2MiIpKTsKLSAg
ICBBU1NFUlRfRVEoInYyIiwgR2V0KCJmb28iKSk7Ci0gICAgZGJmdWxsKCktPlRFU1RfQ29tcGFj
dE1lbVRhYmxlKCk7Ci0gICAgQVNTRVJUX0VRKCJ2MiIsIEdldCgiZm9vIikpOwotICB9IHdoaWxl
IChDaGFuZ2VPcHRpb25zKCkpOwotfQotCi1URVNUKERCVGVzdCwgR2V0UGlja3NDb3JyZWN0Rmls
ZSkgewotICBkbyB7Ci0gICAgLy8gQXJyYW5nZSB0byBoYXZlIG11bHRpcGxlIGZpbGVzIGluIGEg
bm9uLWxldmVsLTAgbGV2ZWwuCi0gICAgQVNTRVJUX09LKFB1dCgiYSIsICJ2YSIpKTsKLSAgICBD
b21wYWN0KCJhIiwgImIiKTsKLSAgICBBU1NFUlRfT0soUHV0KCJ4IiwgInZ4IikpOwotICAgIENv
bXBhY3QoIngiLCAieSIpOwotICAgIEFTU0VSVF9PSyhQdXQoImYiLCAidmYiKSk7Ci0gICAgQ29t
cGFjdCgiZiIsICJnIik7Ci0gICAgQVNTRVJUX0VRKCJ2YSIsIEdldCgiYSIpKTsKLSAgICBBU1NF
UlRfRVEoInZmIiwgR2V0KCJmIikpOwotICAgIEFTU0VSVF9FUSgidngiLCBHZXQoIngiKSk7Ci0g
IH0gd2hpbGUgKENoYW5nZU9wdGlvbnMoKSk7Ci19Ci0KLVRFU1QoREJUZXN0LCBHZXRFbmNvdW50
ZXJzRW1wdHlMZXZlbCkgewotICBkbyB7Ci0gICAgLy8gQXJyYW5nZSBmb3IgdGhlIGZvbGxvd2lu
ZyB0byBoYXBwZW46Ci0gICAgLy8gICAqIHNzdGFibGUgQSBpbiBsZXZlbCAwCi0gICAgLy8gICAq
IG5vdGhpbmcgaW4gbGV2ZWwgMQotICAgIC8vICAgKiBzc3RhYmxlIEIgaW4gbGV2ZWwgMgotICAg
IC8vIFRoZW4gZG8gZW5vdWdoIEdldCgpIGNhbGxzIHRvIGFycmFuZ2UgZm9yIGFuIGF1dG9tYXRp
YyBjb21wYWN0aW9uCi0gICAgLy8gb2Ygc3N0YWJsZSBBLiAgQSBidWcgd291bGQgY2F1c2UgdGhl
IGNvbXBhY3Rpb24gdG8gYmUgbWFya2VkIGFzCi0gICAgLy8gb2NjdXJpbmcgYXQgbGV2ZWwgMSAo
aW5zdGVhZCBvZiB0aGUgY29ycmVjdCBsZXZlbCAwKS4KLQotICAgIC8vIFN0ZXAgMTogRmlyc3Qg
cGxhY2Ugc3N0YWJsZXMgaW4gbGV2ZWxzIDAgYW5kIDIKLSAgICBpbnQgY29tcGFjdGlvbl9jb3Vu
dCA9IDA7Ci0gICAgd2hpbGUgKE51bVRhYmxlRmlsZXNBdExldmVsKDApID09IDAgfHwKLSAgICAg
ICAgICAgTnVtVGFibGVGaWxlc0F0TGV2ZWwoMikgPT0gMCkgewotICAgICAgQVNTRVJUX0xFKGNv
bXBhY3Rpb25fY291bnQsIDEwMCkgPDwgImNvdWxkIG5vdCBmaWxsIGxldmVscyAwIGFuZCAyIjsK
LSAgICAgIGNvbXBhY3Rpb25fY291bnQrKzsKLSAgICAgIFB1dCgiYSIsICJiZWdpbiIpOwotICAg
ICAgUHV0KCJ6IiwgImVuZCIpOwotICAgICAgZGJmdWxsKCktPlRFU1RfQ29tcGFjdE1lbVRhYmxl
KCk7Ci0gICAgfQotCi0gICAgLy8gU3RlcCAyOiBjbGVhciBsZXZlbCAxIGlmIG5lY2Vzc2FyeS4K
LSAgICBkYmZ1bGwoKS0+VEVTVF9Db21wYWN0UmFuZ2UoMSwgTlVMTCwgTlVMTCk7Ci0gICAgQVNT
RVJUX0VRKE51bVRhYmxlRmlsZXNBdExldmVsKDApLCAxKTsKLSAgICBBU1NFUlRfRVEoTnVtVGFi
bGVGaWxlc0F0TGV2ZWwoMSksIDApOwotICAgIEFTU0VSVF9FUShOdW1UYWJsZUZpbGVzQXRMZXZl
bCgyKSwgMSk7Ci0KLSAgICAvLyBTdGVwIDM6IHJlYWQgYSBidW5jaCBvZiB0aW1lcwotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0gICAgICBBU1NFUlRfRVEoIk5PVF9GT1VO
RCIsIEdldCgibWlzc2luZyIpKTsKLSAgICB9Ci0KLSAgICAvLyBTdGVwIDQ6IFdhaXQgZm9yIGNv
bXBhY3Rpb24gdG8gZmluaXNoCi0gICAgZW52Xy0+U2xlZXBGb3JNaWNyb3NlY29uZHMoMTAwMDAw
MCk7Ci0KLSAgICBBU1NFUlRfRVEoTnVtVGFibGVGaWxlc0F0TGV2ZWwoMCksIDApOwotICB9IHdo
aWxlIChDaGFuZ2VPcHRpb25zKCkpOwotfQotCi1URVNUKERCVGVzdCwgSXRlckVtcHR5KSB7Ci0g
IEl0ZXJhdG9yKiBpdGVyID0gZGJfLT5OZXdJdGVyYXRvcihSZWFkT3B0aW9ucygpKTsKLQotICBp
dGVyLT5TZWVrVG9GaXJzdCgpOwotICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgIihpbnZh
bGlkKSIpOwotCi0gIGl0ZXItPlNlZWtUb0xhc3QoKTsKLSAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMo
aXRlciksICIoaW52YWxpZCkiKTsKLQotICBpdGVyLT5TZWVrKCJmb28iKTsKLSAgQVNTRVJUX0VR
KEl0ZXJTdGF0dXMoaXRlciksICIoaW52YWxpZCkiKTsKLQotICBkZWxldGUgaXRlcjsKLX0KLQot
VEVTVChEQlRlc3QsIEl0ZXJTaW5nbGUpIHsKLSAgQVNTRVJUX09LKFB1dCgiYSIsICJ2YSIpKTsK
LSAgSXRlcmF0b3IqIGl0ZXIgPSBkYl8tPk5ld0l0ZXJhdG9yKFJlYWRPcHRpb25zKCkpOwotCi0g
IGl0ZXItPlNlZWtUb0ZpcnN0KCk7Ci0gIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiYS0+
dmEiKTsKLSAgaXRlci0+TmV4dCgpOwotICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgIihp
bnZhbGlkKSIpOwotICBpdGVyLT5TZWVrVG9GaXJzdCgpOwotICBBU1NFUlRfRVEoSXRlclN0YXR1
cyhpdGVyKSwgImEtPnZhIik7Ci0gIGl0ZXItPlByZXYoKTsKLSAgQVNTRVJUX0VRKEl0ZXJTdGF0
dXMoaXRlciksICIoaW52YWxpZCkiKTsKLQotICBpdGVyLT5TZWVrVG9MYXN0KCk7Ci0gIEFTU0VS
VF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiYS0+dmEiKTsKLSAgaXRlci0+TmV4dCgpOwotICBBU1NF
UlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgIihpbnZhbGlkKSIpOwotICBpdGVyLT5TZWVrVG9MYXN0
KCk7Ci0gIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiYS0+dmEiKTsKLSAgaXRlci0+UHJl
digpOwotICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgIihpbnZhbGlkKSIpOwotCi0gIGl0
ZXItPlNlZWsoIiIpOwotICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgImEtPnZhIik7Ci0g
IGl0ZXItPk5leHQoKTsKLSAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRlciksICIoaW52YWxpZCki
KTsKLQotICBpdGVyLT5TZWVrKCJhIik7Ci0gIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAi
YS0+dmEiKTsKLSAgaXRlci0+TmV4dCgpOwotICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwg
IihpbnZhbGlkKSIpOwotCi0gIGl0ZXItPlNlZWsoImIiKTsKLSAgQVNTRVJUX0VRKEl0ZXJTdGF0
dXMoaXRlciksICIoaW52YWxpZCkiKTsKLQotICBkZWxldGUgaXRlcjsKLX0KLQotVEVTVChEQlRl
c3QsIEl0ZXJNdWx0aSkgewotICBBU1NFUlRfT0soUHV0KCJhIiwgInZhIikpOwotICBBU1NFUlRf
T0soUHV0KCJiIiwgInZiIikpOwotICBBU1NFUlRfT0soUHV0KCJjIiwgInZjIikpOwotICBJdGVy
YXRvciogaXRlciA9IGRiXy0+TmV3SXRlcmF0b3IoUmVhZE9wdGlvbnMoKSk7Ci0KLSAgaXRlci0+
U2Vla1RvRmlyc3QoKTsKLSAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRlciksICJhLT52YSIpOwot
ICBpdGVyLT5OZXh0KCk7Ci0gIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiYi0+dmIiKTsK
LSAgaXRlci0+TmV4dCgpOwotICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgImMtPnZjIik7
Ci0gIGl0ZXItPk5leHQoKTsKLSAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRlciksICIoaW52YWxp
ZCkiKTsKLSAgaXRlci0+U2Vla1RvRmlyc3QoKTsKLSAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRl
ciksICJhLT52YSIpOwotICBpdGVyLT5QcmV2KCk7Ci0gIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0
ZXIpLCAiKGludmFsaWQpIik7Ci0KLSAgaXRlci0+U2Vla1RvTGFzdCgpOwotICBBU1NFUlRfRVEo
SXRlclN0YXR1cyhpdGVyKSwgImMtPnZjIik7Ci0gIGl0ZXItPlByZXYoKTsKLSAgQVNTRVJUX0VR
KEl0ZXJTdGF0dXMoaXRlciksICJiLT52YiIpOwotICBpdGVyLT5QcmV2KCk7Ci0gIEFTU0VSVF9F
UShJdGVyU3RhdHVzKGl0ZXIpLCAiYS0+dmEiKTsKLSAgaXRlci0+UHJldigpOwotICBBU1NFUlRf
RVEoSXRlclN0YXR1cyhpdGVyKSwgIihpbnZhbGlkKSIpOwotICBpdGVyLT5TZWVrVG9MYXN0KCk7
Ci0gIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiYy0+dmMiKTsKLSAgaXRlci0+TmV4dCgp
OwotICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgIihpbnZhbGlkKSIpOwotCi0gIGl0ZXIt
PlNlZWsoIiIpOwotICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgImEtPnZhIik7Ci0gIGl0
ZXItPlNlZWsoImEiKTsKLSAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRlciksICJhLT52YSIpOwot
ICBpdGVyLT5TZWVrKCJheCIpOwotICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgImItPnZi
Iik7Ci0gIGl0ZXItPlNlZWsoImIiKTsKLSAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRlciksICJi
LT52YiIpOwotICBpdGVyLT5TZWVrKCJ6Iik7Ci0gIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIp
LCAiKGludmFsaWQpIik7Ci0KLSAgLy8gU3dpdGNoIGZyb20gcmV2ZXJzZSB0byBmb3J3YXJkCi0g
IGl0ZXItPlNlZWtUb0xhc3QoKTsKLSAgaXRlci0+UHJldigpOwotICBpdGVyLT5QcmV2KCk7Ci0g
IGl0ZXItPk5leHQoKTsKLSAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRlciksICJiLT52YiIpOwot
Ci0gIC8vIFN3aXRjaCBmcm9tIGZvcndhcmQgdG8gcmV2ZXJzZQotICBpdGVyLT5TZWVrVG9GaXJz
dCgpOwotICBpdGVyLT5OZXh0KCk7Ci0gIGl0ZXItPk5leHQoKTsKLSAgaXRlci0+UHJldigpOwot
ICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgImItPnZiIik7Ci0KLSAgLy8gTWFrZSBzdXJl
IGl0ZXIgc3RheXMgYXQgc25hcHNob3QKLSAgQVNTRVJUX09LKFB1dCgiYSIsICAidmEyIikpOwot
ICBBU1NFUlRfT0soUHV0KCJhMiIsICJ2YTMiKSk7Ci0gIEFTU0VSVF9PSyhQdXQoImIiLCAgInZi
MiIpKTsKLSAgQVNTRVJUX09LKFB1dCgiYyIsICAidmMyIikpOwotICBBU1NFUlRfT0soRGVsZXRl
KCJiIikpOwotICBpdGVyLT5TZWVrVG9GaXJzdCgpOwotICBBU1NFUlRfRVEoSXRlclN0YXR1cyhp
dGVyKSwgImEtPnZhIik7Ci0gIGl0ZXItPk5leHQoKTsKLSAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMo
aXRlciksICJiLT52YiIpOwotICBpdGVyLT5OZXh0KCk7Ci0gIEFTU0VSVF9FUShJdGVyU3RhdHVz
KGl0ZXIpLCAiYy0+dmMiKTsKLSAgaXRlci0+TmV4dCgpOwotICBBU1NFUlRfRVEoSXRlclN0YXR1
cyhpdGVyKSwgIihpbnZhbGlkKSIpOwotICBpdGVyLT5TZWVrVG9MYXN0KCk7Ci0gIEFTU0VSVF9F
UShJdGVyU3RhdHVzKGl0ZXIpLCAiYy0+dmMiKTsKLSAgaXRlci0+UHJldigpOwotICBBU1NFUlRf
RVEoSXRlclN0YXR1cyhpdGVyKSwgImItPnZiIik7Ci0gIGl0ZXItPlByZXYoKTsKLSAgQVNTRVJU
X0VRKEl0ZXJTdGF0dXMoaXRlciksICJhLT52YSIpOwotICBpdGVyLT5QcmV2KCk7Ci0gIEFTU0VS
VF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiKGludmFsaWQpIik7Ci0KLSAgZGVsZXRlIGl0ZXI7Ci19
Ci0KLVRFU1QoREJUZXN0LCBJdGVyU21hbGxBbmRMYXJnZU1peCkgewotICBBU1NFUlRfT0soUHV0
KCJhIiwgInZhIikpOwotICBBU1NFUlRfT0soUHV0KCJiIiwgc3RkOjpzdHJpbmcoMTAwMDAwLCAn
YicpKSk7Ci0gIEFTU0VSVF9PSyhQdXQoImMiLCAidmMiKSk7Ci0gIEFTU0VSVF9PSyhQdXQoImQi
LCBzdGQ6OnN0cmluZygxMDAwMDAsICdkJykpKTsKLSAgQVNTRVJUX09LKFB1dCgiZSIsIHN0ZDo6
c3RyaW5nKDEwMDAwMCwgJ2UnKSkpOwotCi0gIEl0ZXJhdG9yKiBpdGVyID0gZGJfLT5OZXdJdGVy
YXRvcihSZWFkT3B0aW9ucygpKTsKLQotICBpdGVyLT5TZWVrVG9GaXJzdCgpOwotICBBU1NFUlRf
RVEoSXRlclN0YXR1cyhpdGVyKSwgImEtPnZhIik7Ci0gIGl0ZXItPk5leHQoKTsKLSAgQVNTRVJU
X0VRKEl0ZXJTdGF0dXMoaXRlciksICJiLT4iICsgc3RkOjpzdHJpbmcoMTAwMDAwLCAnYicpKTsK
LSAgaXRlci0+TmV4dCgpOwotICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgImMtPnZjIik7
Ci0gIGl0ZXItPk5leHQoKTsKLSAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRlciksICJkLT4iICsg
c3RkOjpzdHJpbmcoMTAwMDAwLCAnZCcpKTsKLSAgaXRlci0+TmV4dCgpOwotICBBU1NFUlRfRVEo
SXRlclN0YXR1cyhpdGVyKSwgImUtPiIgKyBzdGQ6OnN0cmluZygxMDAwMDAsICdlJykpOwotICBp
dGVyLT5OZXh0KCk7Ci0gIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiKGludmFsaWQpIik7
Ci0KLSAgaXRlci0+U2Vla1RvTGFzdCgpOwotICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwg
ImUtPiIgKyBzdGQ6OnN0cmluZygxMDAwMDAsICdlJykpOwotICBpdGVyLT5QcmV2KCk7Ci0gIEFT
U0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiZC0+IiArIHN0ZDo6c3RyaW5nKDEwMDAwMCwgJ2Qn
KSk7Ci0gIGl0ZXItPlByZXYoKTsKLSAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRlciksICJjLT52
YyIpOwotICBpdGVyLT5QcmV2KCk7Ci0gIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiYi0+
IiArIHN0ZDo6c3RyaW5nKDEwMDAwMCwgJ2InKSk7Ci0gIGl0ZXItPlByZXYoKTsKLSAgQVNTRVJU
X0VRKEl0ZXJTdGF0dXMoaXRlciksICJhLT52YSIpOwotICBpdGVyLT5QcmV2KCk7Ci0gIEFTU0VS
VF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiKGludmFsaWQpIik7Ci0KLSAgZGVsZXRlIGl0ZXI7Ci19
Ci0KLVRFU1QoREJUZXN0LCBJdGVyTXVsdGlXaXRoRGVsZXRlKSB7Ci0gIGRvIHsKLSAgICBBU1NF
UlRfT0soUHV0KCJhIiwgInZhIikpOwotICAgIEFTU0VSVF9PSyhQdXQoImIiLCAidmIiKSk7Ci0g
ICAgQVNTRVJUX09LKFB1dCgiYyIsICJ2YyIpKTsKLSAgICBBU1NFUlRfT0soRGVsZXRlKCJiIikp
OwotICAgIEFTU0VSVF9FUSgiTk9UX0ZPVU5EIiwgR2V0KCJiIikpOwotCi0gICAgSXRlcmF0b3Iq
IGl0ZXIgPSBkYl8tPk5ld0l0ZXJhdG9yKFJlYWRPcHRpb25zKCkpOwotICAgIGl0ZXItPlNlZWso
ImMiKTsKLSAgICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgImMtPnZjIik7Ci0gICAgaXRl
ci0+UHJldigpOwotICAgIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiYS0+dmEiKTsKLSAg
ICBkZWxldGUgaXRlcjsKLSAgfSB3aGlsZSAoQ2hhbmdlT3B0aW9ucygpKTsKLX0KLQotVEVTVChE
QlRlc3QsIFJlY292ZXIpIHsKLSAgZG8gewotICAgIEFTU0VSVF9PSyhQdXQoImZvbyIsICJ2MSIp
KTsKLSAgICBBU1NFUlRfT0soUHV0KCJiYXoiLCAidjUiKSk7Ci0KLSAgICBSZW9wZW4oKTsKLSAg
ICBBU1NFUlRfRVEoInYxIiwgR2V0KCJmb28iKSk7Ci0KLSAgICBBU1NFUlRfRVEoInYxIiwgR2V0
KCJmb28iKSk7Ci0gICAgQVNTRVJUX0VRKCJ2NSIsIEdldCgiYmF6IikpOwotICAgIEFTU0VSVF9P
SyhQdXQoImJhciIsICJ2MiIpKTsKLSAgICBBU1NFUlRfT0soUHV0KCJmb28iLCAidjMiKSk7Ci0K
LSAgICBSZW9wZW4oKTsKLSAgICBBU1NFUlRfRVEoInYzIiwgR2V0KCJmb28iKSk7Ci0gICAgQVNT
RVJUX09LKFB1dCgiZm9vIiwgInY0IikpOwotICAgIEFTU0VSVF9FUSgidjQiLCBHZXQoImZvbyIp
KTsKLSAgICBBU1NFUlRfRVEoInYyIiwgR2V0KCJiYXIiKSk7Ci0gICAgQVNTRVJUX0VRKCJ2NSIs
IEdldCgiYmF6IikpOwotICB9IHdoaWxlIChDaGFuZ2VPcHRpb25zKCkpOwotfQotCi1URVNUKERC
VGVzdCwgUmVjb3ZlcnlXaXRoRW1wdHlMb2cpIHsKLSAgZG8gewotICAgIEFTU0VSVF9PSyhQdXQo
ImZvbyIsICJ2MSIpKTsKLSAgICBBU1NFUlRfT0soUHV0KCJmb28iLCAidjIiKSk7Ci0gICAgUmVv
cGVuKCk7Ci0gICAgUmVvcGVuKCk7Ci0gICAgQVNTRVJUX09LKFB1dCgiZm9vIiwgInYzIikpOwot
ICAgIFJlb3BlbigpOwotICAgIEFTU0VSVF9FUSgidjMiLCBHZXQoImZvbyIpKTsKLSAgfSB3aGls
ZSAoQ2hhbmdlT3B0aW9ucygpKTsKLX0KLQotLy8gQ2hlY2sgdGhhdCB3cml0ZXMgZG9uZSBkdXJp
bmcgYSBtZW10YWJsZSBjb21wYWN0aW9uIGFyZSByZWNvdmVyZWQKLS8vIGlmIHRoZSBkYXRhYmFz
ZSBpcyBzaHV0ZG93biBkdXJpbmcgdGhlIG1lbXRhYmxlIGNvbXBhY3Rpb24uCi1URVNUKERCVGVz
dCwgUmVjb3ZlckR1cmluZ01lbXRhYmxlQ29tcGFjdGlvbikgewotICBkbyB7Ci0gICAgT3B0aW9u
cyBvcHRpb25zID0gQ3VycmVudE9wdGlvbnMoKTsKLSAgICBvcHRpb25zLmVudiA9IGVudl87Ci0g
ICAgb3B0aW9ucy53cml0ZV9idWZmZXJfc2l6ZSA9IDEwMDAwMDA7Ci0gICAgUmVvcGVuKCZvcHRp
b25zKTsKLQotICAgIC8vIFRyaWdnZXIgYSBsb25nIG1lbXRhYmxlIGNvbXBhY3Rpb24gYW5kIHJl
b3BlbiB0aGUgZGF0YWJhc2UgZHVyaW5nIGl0Ci0gICAgQVNTRVJUX09LKFB1dCgiZm9vIiwgInYx
IikpOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHb2VzIHRvIDFzdCBsb2cgZmlsZQotICAg
IEFTU0VSVF9PSyhQdXQoImJpZzEiLCBzdGQ6OnN0cmluZygxMDAwMDAwMCwgJ3gnKSkpOyAgLy8g
RmlsbHMgbWVtdGFibGUKLSAgICBBU1NFUlRfT0soUHV0KCJiaWcyIiwgc3RkOjpzdHJpbmcoMTAw
MCwgJ3knKSkpOyAgICAgIC8vIFRyaWdnZXJzIGNvbXBhY3Rpb24KLSAgICBBU1NFUlRfT0soUHV0
KCJiYXIiLCAidjIiKSk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdvZXMgdG8gbmV3IGxv
ZyBmaWxlCi0KLSAgICBSZW9wZW4oJm9wdGlvbnMpOwotICAgIEFTU0VSVF9FUSgidjEiLCBHZXQo
ImZvbyIpKTsKLSAgICBBU1NFUlRfRVEoInYyIiwgR2V0KCJiYXIiKSk7Ci0gICAgQVNTRVJUX0VR
KHN0ZDo6c3RyaW5nKDEwMDAwMDAwLCAneCcpLCBHZXQoImJpZzEiKSk7Ci0gICAgQVNTRVJUX0VR
KHN0ZDo6c3RyaW5nKDEwMDAsICd5JyksIEdldCgiYmlnMiIpKTsKLSAgfSB3aGlsZSAoQ2hhbmdl
T3B0aW9ucygpKTsKLX0KLQotc3RhdGljIHN0ZDo6c3RyaW5nIEtleShpbnQgaSkgewotICBjaGFy
IGJ1ZlsxMDBdOwotICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAia2V5JTA2ZCIsIGkpOwot
ICByZXR1cm4gc3RkOjpzdHJpbmcoYnVmKTsKLX0KLQotVEVTVChEQlRlc3QsIE1pbm9yQ29tcGFj
dGlvbnNIYXBwZW4pIHsKLSAgT3B0aW9ucyBvcHRpb25zID0gQ3VycmVudE9wdGlvbnMoKTsKLSAg
b3B0aW9ucy53cml0ZV9idWZmZXJfc2l6ZSA9IDEwMDAwOwotICBSZW9wZW4oJm9wdGlvbnMpOwot
Ci0gIGNvbnN0IGludCBOID0gNTAwOwotCi0gIGludCBzdGFydGluZ19udW1fdGFibGVzID0gVG90
YWxUYWJsZUZpbGVzKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7Ci0gICAgQVNT
RVJUX09LKFB1dChLZXkoaSksIEtleShpKSArIHN0ZDo6c3RyaW5nKDEwMDAsICd2JykpKTsKLSAg
fQotICBpbnQgZW5kaW5nX251bV90YWJsZXMgPSBUb3RhbFRhYmxlRmlsZXMoKTsKLSAgQVNTRVJU
X0dUKGVuZGluZ19udW1fdGFibGVzLCBzdGFydGluZ19udW1fdGFibGVzKTsKLQotICBmb3IgKGlu
dCBpID0gMDsgaSA8IE47IGkrKykgewotICAgIEFTU0VSVF9FUShLZXkoaSkgKyBzdGQ6OnN0cmlu
ZygxMDAwLCAndicpLCBHZXQoS2V5KGkpKSk7Ci0gIH0KLQotICBSZW9wZW4oKTsKLQotICBmb3Ig
KGludCBpID0gMDsgaSA8IE47IGkrKykgewotICAgIEFTU0VSVF9FUShLZXkoaSkgKyBzdGQ6OnN0
cmluZygxMDAwLCAndicpLCBHZXQoS2V5KGkpKSk7Ci0gIH0KLX0KLQotVEVTVChEQlRlc3QsIFJl
Y292ZXJXaXRoTGFyZ2VMb2cpIHsKLSAgewotICAgIE9wdGlvbnMgb3B0aW9ucyA9IEN1cnJlbnRP
cHRpb25zKCk7Ci0gICAgUmVvcGVuKCZvcHRpb25zKTsKLSAgICBBU1NFUlRfT0soUHV0KCJiaWcx
Iiwgc3RkOjpzdHJpbmcoMjAwMDAwLCAnMScpKSk7Ci0gICAgQVNTRVJUX09LKFB1dCgiYmlnMiIs
IHN0ZDo6c3RyaW5nKDIwMDAwMCwgJzInKSkpOwotICAgIEFTU0VSVF9PSyhQdXQoInNtYWxsMyIs
IHN0ZDo6c3RyaW5nKDEwLCAnMycpKSk7Ci0gICAgQVNTRVJUX09LKFB1dCgic21hbGw0Iiwgc3Rk
OjpzdHJpbmcoMTAsICc0JykpKTsKLSAgICBBU1NFUlRfRVEoTnVtVGFibGVGaWxlc0F0TGV2ZWwo
MCksIDApOwotICB9Ci0KLSAgLy8gTWFrZSBzdXJlIHRoYXQgaWYgd2UgcmUtb3BlbiB3aXRoIGEg
c21hbGwgd3JpdGUgYnVmZmVyIHNpemUgdGhhdAotICAvLyB3ZSBmbHVzaCB0YWJsZSBmaWxlcyBp
biB0aGUgbWlkZGxlIG9mIGEgbGFyZ2UgbG9nIGZpbGUuCi0gIE9wdGlvbnMgb3B0aW9ucyA9IEN1
cnJlbnRPcHRpb25zKCk7Ci0gIG9wdGlvbnMud3JpdGVfYnVmZmVyX3NpemUgPSAxMDAwMDA7Ci0g
IFJlb3Blbigmb3B0aW9ucyk7Ci0gIEFTU0VSVF9FUShOdW1UYWJsZUZpbGVzQXRMZXZlbCgwKSwg
Myk7Ci0gIEFTU0VSVF9FUShzdGQ6OnN0cmluZygyMDAwMDAsICcxJyksIEdldCgiYmlnMSIpKTsK
LSAgQVNTRVJUX0VRKHN0ZDo6c3RyaW5nKDIwMDAwMCwgJzInKSwgR2V0KCJiaWcyIikpOwotICBB
U1NFUlRfRVEoc3RkOjpzdHJpbmcoMTAsICczJyksIEdldCgic21hbGwzIikpOwotICBBU1NFUlRf
RVEoc3RkOjpzdHJpbmcoMTAsICc0JyksIEdldCgic21hbGw0IikpOwotICBBU1NFUlRfR1QoTnVt
VGFibGVGaWxlc0F0TGV2ZWwoMCksIDEpOwotfQotCi1URVNUKERCVGVzdCwgQ29tcGFjdGlvbnNH
ZW5lcmF0ZU11bHRpcGxlRmlsZXMpIHsKLSAgT3B0aW9ucyBvcHRpb25zID0gQ3VycmVudE9wdGlv
bnMoKTsKLSAgb3B0aW9ucy53cml0ZV9idWZmZXJfc2l6ZSA9IDEwMDAwMDAwMDsgICAgICAgIC8v
IExhcmdlIHdyaXRlIGJ1ZmZlcgotICBSZW9wZW4oJm9wdGlvbnMpOwotCi0gIFJhbmRvbSBybmQo
MzAxKTsKLQotICAvLyBXcml0ZSA4TUIgKDgwIHZhbHVlcywgZWFjaCAxMDBLKQotICBBU1NFUlRf
RVEoTnVtVGFibGVGaWxlc0F0TGV2ZWwoMCksIDApOwotICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmlu
Zz4gdmFsdWVzOwotICBmb3IgKGludCBpID0gMDsgaSA8IDgwOyBpKyspIHsKLSAgICB2YWx1ZXMu
cHVzaF9iYWNrKFJhbmRvbVN0cmluZygmcm5kLCAxMDAwMDApKTsKLSAgICBBU1NFUlRfT0soUHV0
KEtleShpKSwgdmFsdWVzW2ldKSk7Ci0gIH0KLQotICAvLyBSZW9wZW5pbmcgbW92ZXMgdXBkYXRl
cyB0byBsZXZlbC0wCi0gIFJlb3Blbigmb3B0aW9ucyk7Ci0gIGRiZnVsbCgpLT5URVNUX0NvbXBh
Y3RSYW5nZSgwLCBOVUxMLCBOVUxMKTsKLQotICBBU1NFUlRfRVEoTnVtVGFibGVGaWxlc0F0TGV2
ZWwoMCksIDApOwotICBBU1NFUlRfR1QoTnVtVGFibGVGaWxlc0F0TGV2ZWwoMSksIDEpOwotICBm
b3IgKGludCBpID0gMDsgaSA8IDgwOyBpKyspIHsKLSAgICBBU1NFUlRfRVEoR2V0KEtleShpKSks
IHZhbHVlc1tpXSk7Ci0gIH0KLX0KLQotVEVTVChEQlRlc3QsIFJlcGVhdGVkV3JpdGVzVG9TYW1l
S2V5KSB7Ci0gIE9wdGlvbnMgb3B0aW9ucyA9IEN1cnJlbnRPcHRpb25zKCk7Ci0gIG9wdGlvbnMu
ZW52ID0gZW52XzsKLSAgb3B0aW9ucy53cml0ZV9idWZmZXJfc2l6ZSA9IDEwMDAwMDsgIC8vIFNt
YWxsIHdyaXRlIGJ1ZmZlcgotICBSZW9wZW4oJm9wdGlvbnMpOwotCi0gIC8vIFdlIG11c3QgaGF2
ZSBhdCBtb3N0IG9uZSBmaWxlIHBlciBsZXZlbCBleGNlcHQgZm9yIGxldmVsLTAsCi0gIC8vIHdo
aWNoIG1heSBoYXZlIHVwIHRvIGtMMF9TdG9wV3JpdGVzVHJpZ2dlciBmaWxlcy4KLSAgY29uc3Qg
aW50IGtNYXhGaWxlcyA9IGNvbmZpZzo6a051bUxldmVscyArIGNvbmZpZzo6a0wwX1N0b3BXcml0
ZXNUcmlnZ2VyOwotCi0gIFJhbmRvbSBybmQoMzAxKTsKLSAgc3RkOjpzdHJpbmcgdmFsdWUgPSBS
YW5kb21TdHJpbmcoJnJuZCwgMiAqIG9wdGlvbnMud3JpdGVfYnVmZmVyX3NpemUpOwotICBmb3Ig
KGludCBpID0gMDsgaSA8IDUgKiBrTWF4RmlsZXM7IGkrKykgewotICAgIFB1dCgia2V5IiwgdmFs
dWUpOwotICAgIEFTU0VSVF9MRShUb3RhbFRhYmxlRmlsZXMoKSwga01heEZpbGVzKTsKLSAgICBm
cHJpbnRmKHN0ZGVyciwgImFmdGVyICVkOiAlZCBmaWxlc1xuIiwgaW50KGkrMSksIFRvdGFsVGFi
bGVGaWxlcygpKTsKLSAgfQotfQotCi1URVNUKERCVGVzdCwgU3BhcnNlTWVyZ2UpIHsKLSAgT3B0
aW9ucyBvcHRpb25zID0gQ3VycmVudE9wdGlvbnMoKTsKLSAgb3B0aW9ucy5jb21wcmVzc2lvbiA9
IGtOb0NvbXByZXNzaW9uOwotICBSZW9wZW4oJm9wdGlvbnMpOwotCi0gIEZpbGxMZXZlbHMoIkEi
LCAiWiIpOwotCi0gIC8vIFN1cHBvc2UgdGhlcmUgaXM6Ci0gIC8vICAgIHNtYWxsIGFtb3VudCBv
ZiBkYXRhIHdpdGggcHJlZml4IEEKLSAgLy8gICAgbGFyZ2UgYW1vdW50IG9mIGRhdGEgd2l0aCBw
cmVmaXggQgotICAvLyAgICBzbWFsbCBhbW91bnQgb2YgZGF0YSB3aXRoIHByZWZpeCBDCi0gIC8v
IGFuZCB0aGF0IHJlY2VudCB1cGRhdGVzIGhhdmUgbWFkZSBzbWFsbCBjaGFuZ2VzIHRvIGFsbCB0
aHJlZSBwcmVmaXhlcy4KLSAgLy8gQ2hlY2sgdGhhdCB3ZSBkbyBub3QgZG8gYSBjb21wYWN0aW9u
IHRoYXQgbWVyZ2VzIGFsbCBvZiBCIGluIG9uZSBzaG90LgotICBjb25zdCBzdGQ6OnN0cmluZyB2
YWx1ZSgxMDAwLCAneCcpOwotICBQdXQoIkEiLCAidmEiKTsKLSAgLy8gV3JpdGUgYXBwcm94aW1h
dGVseSAxMDBNQiBvZiAiQiIgdmFsdWVzCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwMDAwOyBp
KyspIHsKLSAgICBjaGFyIGtleVsxMDBdOwotICAgIHNucHJpbnRmKGtleSwgc2l6ZW9mKGtleSks
ICJCJTAxMGQiLCBpKTsKLSAgICBQdXQoa2V5LCB2YWx1ZSk7Ci0gIH0KLSAgUHV0KCJDIiwgInZj
Iik7Ci0gIGRiZnVsbCgpLT5URVNUX0NvbXBhY3RNZW1UYWJsZSgpOwotICBkYmZ1bGwoKS0+VEVT
VF9Db21wYWN0UmFuZ2UoMCwgTlVMTCwgTlVMTCk7Ci0KLSAgLy8gTWFrZSBzcGFyc2UgdXBkYXRl
Ci0gIFB1dCgiQSIsICAgICJ2YTIiKTsKLSAgUHV0KCJCMTAwIiwgImJ2YWx1ZTIiKTsKLSAgUHV0
KCJDIiwgICAgInZjMiIpOwotICBkYmZ1bGwoKS0+VEVTVF9Db21wYWN0TWVtVGFibGUoKTsKLQot
ICAvLyBDb21wYWN0aW9ucyBzaG91bGQgbm90IGNhdXNlIHVzIHRvIGNyZWF0ZSBhIHNpdHVhdGlv
biB3aGVyZQotICAvLyBhIGZpbGUgb3ZlcmxhcHMgdG9vIG11Y2ggZGF0YSBhdCB0aGUgbmV4dCBs
ZXZlbC4KLSAgQVNTRVJUX0xFKGRiZnVsbCgpLT5URVNUX01heE5leHRMZXZlbE92ZXJsYXBwaW5n
Qnl0ZXMoKSwgMjAqMTA0ODU3Nik7Ci0gIGRiZnVsbCgpLT5URVNUX0NvbXBhY3RSYW5nZSgwLCBO
VUxMLCBOVUxMKTsKLSAgQVNTRVJUX0xFKGRiZnVsbCgpLT5URVNUX01heE5leHRMZXZlbE92ZXJs
YXBwaW5nQnl0ZXMoKSwgMjAqMTA0ODU3Nik7Ci0gIGRiZnVsbCgpLT5URVNUX0NvbXBhY3RSYW5n
ZSgxLCBOVUxMLCBOVUxMKTsKLSAgQVNTRVJUX0xFKGRiZnVsbCgpLT5URVNUX01heE5leHRMZXZl
bE92ZXJsYXBwaW5nQnl0ZXMoKSwgMjAqMTA0ODU3Nik7Ci19Ci0KLXN0YXRpYyBib29sIEJldHdl
ZW4odWludDY0X3QgdmFsLCB1aW50NjRfdCBsb3csIHVpbnQ2NF90IGhpZ2gpIHsKLSAgYm9vbCBy
ZXN1bHQgPSAodmFsID49IGxvdykgJiYgKHZhbCA8PSBoaWdoKTsKLSAgaWYgKCFyZXN1bHQpIHsK
LSAgICBmcHJpbnRmKHN0ZGVyciwgIlZhbHVlICVsbHUgaXMgbm90IGluIHJhbmdlIFslbGx1LCAl
bGx1XVxuIiwKLSAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKHZhbCksCi0gICAgICAg
ICAgICAodW5zaWduZWQgbG9uZyBsb25nKShsb3cpLAotICAgICAgICAgICAgKHVuc2lnbmVkIGxv
bmcgbG9uZykoaGlnaCkpOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLVRFU1QoREJUZXN0
LCBBcHByb3hpbWF0ZVNpemVzKSB7Ci0gIGRvIHsKLSAgICBPcHRpb25zIG9wdGlvbnMgPSBDdXJy
ZW50T3B0aW9ucygpOwotICAgIG9wdGlvbnMud3JpdGVfYnVmZmVyX3NpemUgPSAxMDAwMDAwMDA7
ICAgICAgICAvLyBMYXJnZSB3cml0ZSBidWZmZXIKLSAgICBvcHRpb25zLmNvbXByZXNzaW9uID0g
a05vQ29tcHJlc3Npb247Ci0gICAgRGVzdHJveUFuZFJlb3BlbigpOwotCi0gICAgQVNTRVJUX1RS
VUUoQmV0d2VlbihTaXplKCIiLCAieHl6IiksIDAsIDApKTsKLSAgICBSZW9wZW4oJm9wdGlvbnMp
OwotICAgIEFTU0VSVF9UUlVFKEJldHdlZW4oU2l6ZSgiIiwgInh5eiIpLCAwLCAwKSk7Ci0KLSAg
ICAvLyBXcml0ZSA4TUIgKDgwIHZhbHVlcywgZWFjaCAxMDBLKQotICAgIEFTU0VSVF9FUShOdW1U
YWJsZUZpbGVzQXRMZXZlbCgwKSwgMCk7Ci0gICAgY29uc3QgaW50IE4gPSA4MDsKLSAgICBzdGF0
aWMgY29uc3QgaW50IFMxID0gMTAwMDAwOwotICAgIHN0YXRpYyBjb25zdCBpbnQgUzIgPSAxMDUw
MDA7ICAvLyBBbGxvdyBzb21lIGV4cGFuc2lvbiBmcm9tIG1ldGFkYXRhCi0gICAgUmFuZG9tIHJu
ZCgzMDEpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7Ci0gICAgICBBU1NFUlRf
T0soUHV0KEtleShpKSwgUmFuZG9tU3RyaW5nKCZybmQsIFMxKSkpOwotICAgIH0KLQotICAgIC8v
IDAgYmVjYXVzZSBHZXRBcHByb3hpbWF0ZVNpemVzKCkgZG9lcyBub3QgYWNjb3VudCBmb3IgbWVt
dGFibGUgc3BhY2UKLSAgICBBU1NFUlRfVFJVRShCZXR3ZWVuKFNpemUoIiIsIEtleSg1MCkpLCAw
LCAwKSk7Ci0KLSAgICAvLyBDaGVjayBzaXplcyBhY3Jvc3MgcmVjb3ZlcnkgYnkgcmVvcGVuaW5n
IGEgZmV3IHRpbWVzCi0gICAgZm9yIChpbnQgcnVuID0gMDsgcnVuIDwgMzsgcnVuKyspIHsKLSAg
ICAgIFJlb3Blbigmb3B0aW9ucyk7Ci0KLSAgICAgIGZvciAoaW50IGNvbXBhY3Rfc3RhcnQgPSAw
OyBjb21wYWN0X3N0YXJ0IDwgTjsgY29tcGFjdF9zdGFydCArPSAxMCkgewotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IE47IGkgKz0gMTApIHsKLSAgICAgICAgICBBU1NFUlRfVFJVRShCZXR3
ZWVuKFNpemUoIiIsIEtleShpKSksIFMxKmksIFMyKmkpKTsKLSAgICAgICAgICBBU1NFUlRfVFJV
RShCZXR3ZWVuKFNpemUoIiIsIEtleShpKSsiLnN1ZmZpeCIpLCBTMSooaSsxKSwgUzIqKGkrMSkp
KTsKLSAgICAgICAgICBBU1NFUlRfVFJVRShCZXR3ZWVuKFNpemUoS2V5KGkpLCBLZXkoaSsxMCkp
LCBTMSoxMCwgUzIqMTApKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlRfVFJVRShCZXR3ZWVu
KFNpemUoIiIsIEtleSg1MCkpLCBTMSo1MCwgUzIqNTApKTsKLSAgICAgICAgQVNTRVJUX1RSVUUo
QmV0d2VlbihTaXplKCIiLCBLZXkoNTApKyIuc3VmZml4IiksIFMxKjUwLCBTMio1MCkpOwotCi0g
ICAgICAgIHN0ZDo6c3RyaW5nIGNzdGFydF9zdHIgPSBLZXkoY29tcGFjdF9zdGFydCk7Ci0gICAg
ICAgIHN0ZDo6c3RyaW5nIGNlbmRfc3RyID0gS2V5KGNvbXBhY3Rfc3RhcnQgKyA5KTsKLSAgICAg
ICAgU2xpY2UgY3N0YXJ0ID0gY3N0YXJ0X3N0cjsKLSAgICAgICAgU2xpY2UgY2VuZCA9IGNlbmRf
c3RyOwotICAgICAgICBkYmZ1bGwoKS0+VEVTVF9Db21wYWN0UmFuZ2UoMCwgJmNzdGFydCwgJmNl
bmQpOwotICAgICAgfQotCi0gICAgICBBU1NFUlRfRVEoTnVtVGFibGVGaWxlc0F0TGV2ZWwoMCks
IDApOwotICAgICAgQVNTRVJUX0dUKE51bVRhYmxlRmlsZXNBdExldmVsKDEpLCAwKTsKLSAgICB9
Ci0gIH0gd2hpbGUgKENoYW5nZU9wdGlvbnMoKSk7Ci19Ci0KLVRFU1QoREJUZXN0LCBBcHByb3hp
bWF0ZVNpemVzX01peE9mU21hbGxBbmRMYXJnZSkgewotICBkbyB7Ci0gICAgT3B0aW9ucyBvcHRp
b25zID0gQ3VycmVudE9wdGlvbnMoKTsKLSAgICBvcHRpb25zLmNvbXByZXNzaW9uID0ga05vQ29t
cHJlc3Npb247Ci0gICAgUmVvcGVuKCk7Ci0KLSAgICBSYW5kb20gcm5kKDMwMSk7Ci0gICAgc3Rk
OjpzdHJpbmcgYmlnMSA9IFJhbmRvbVN0cmluZygmcm5kLCAxMDAwMDApOwotICAgIEFTU0VSVF9P
SyhQdXQoS2V5KDApLCBSYW5kb21TdHJpbmcoJnJuZCwgMTAwMDApKSk7Ci0gICAgQVNTRVJUX09L
KFB1dChLZXkoMSksIFJhbmRvbVN0cmluZygmcm5kLCAxMDAwMCkpKTsKLSAgICBBU1NFUlRfT0so
UHV0KEtleSgyKSwgYmlnMSkpOwotICAgIEFTU0VSVF9PSyhQdXQoS2V5KDMpLCBSYW5kb21TdHJp
bmcoJnJuZCwgMTAwMDApKSk7Ci0gICAgQVNTRVJUX09LKFB1dChLZXkoNCksIGJpZzEpKTsKLSAg
ICBBU1NFUlRfT0soUHV0KEtleSg1KSwgUmFuZG9tU3RyaW5nKCZybmQsIDEwMDAwKSkpOwotICAg
IEFTU0VSVF9PSyhQdXQoS2V5KDYpLCBSYW5kb21TdHJpbmcoJnJuZCwgMzAwMDAwKSkpOwotICAg
IEFTU0VSVF9PSyhQdXQoS2V5KDcpLCBSYW5kb21TdHJpbmcoJnJuZCwgMTAwMDApKSk7Ci0KLSAg
ICAvLyBDaGVjayBzaXplcyBhY3Jvc3MgcmVjb3ZlcnkgYnkgcmVvcGVuaW5nIGEgZmV3IHRpbWVz
Ci0gICAgZm9yIChpbnQgcnVuID0gMDsgcnVuIDwgMzsgcnVuKyspIHsKLSAgICAgIFJlb3Blbigm
b3B0aW9ucyk7Ci0KLSAgICAgIEFTU0VSVF9UUlVFKEJldHdlZW4oU2l6ZSgiIiwgS2V5KDApKSwg
MCwgMCkpOwotICAgICAgQVNTRVJUX1RSVUUoQmV0d2VlbihTaXplKCIiLCBLZXkoMSkpLCAxMDAw
MCwgMTEwMDApKTsKLSAgICAgIEFTU0VSVF9UUlVFKEJldHdlZW4oU2l6ZSgiIiwgS2V5KDIpKSwg
MjAwMDAsIDIxMDAwKSk7Ci0gICAgICBBU1NFUlRfVFJVRShCZXR3ZWVuKFNpemUoIiIsIEtleSgz
KSksIDEyMDAwMCwgMTIxMDAwKSk7Ci0gICAgICBBU1NFUlRfVFJVRShCZXR3ZWVuKFNpemUoIiIs
IEtleSg0KSksIDEzMDAwMCwgMTMxMDAwKSk7Ci0gICAgICBBU1NFUlRfVFJVRShCZXR3ZWVuKFNp
emUoIiIsIEtleSg1KSksIDIzMDAwMCwgMjMxMDAwKSk7Ci0gICAgICBBU1NFUlRfVFJVRShCZXR3
ZWVuKFNpemUoIiIsIEtleSg2KSksIDI0MDAwMCwgMjQxMDAwKSk7Ci0gICAgICBBU1NFUlRfVFJV
RShCZXR3ZWVuKFNpemUoIiIsIEtleSg3KSksIDU0MDAwMCwgNTQxMDAwKSk7Ci0gICAgICBBU1NF
UlRfVFJVRShCZXR3ZWVuKFNpemUoIiIsIEtleSg4KSksIDU1MDAwMCwgNTYwMDAwKSk7Ci0KLSAg
ICAgIEFTU0VSVF9UUlVFKEJldHdlZW4oU2l6ZShLZXkoMyksIEtleSg1KSksIDExMDAwMCwgMTEx
MDAwKSk7Ci0KLSAgICAgIGRiZnVsbCgpLT5URVNUX0NvbXBhY3RSYW5nZSgwLCBOVUxMLCBOVUxM
KTsKLSAgICB9Ci0gIH0gd2hpbGUgKENoYW5nZU9wdGlvbnMoKSk7Ci19Ci0KLVRFU1QoREJUZXN0
LCBJdGVyYXRvclBpbnNSZWYpIHsKLSAgUHV0KCJmb28iLCAiaGVsbG8iKTsKLQotICAvLyBHZXQg
aXRlcmF0b3IgdGhhdCB3aWxsIHlpZWxkIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSBEQi4K
LSAgSXRlcmF0b3IqIGl0ZXIgPSBkYl8tPk5ld0l0ZXJhdG9yKFJlYWRPcHRpb25zKCkpOwotCi0g
IC8vIFdyaXRlIHRvIGZvcmNlIGNvbXBhY3Rpb25zCi0gIFB1dCgiZm9vIiwgIm5ld3ZhbHVlMSIp
OwotICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7Ci0gICAgQVNTRVJUX09LKFB1dChL
ZXkoaSksIEtleShpKSArIHN0ZDo6c3RyaW5nKDEwMDAwMCwgJ3YnKSkpOyAvLyAxMDBLIHZhbHVl
cwotICB9Ci0gIFB1dCgiZm9vIiwgIm5ld3ZhbHVlMiIpOwotCi0gIGl0ZXItPlNlZWtUb0ZpcnN0
KCk7Ci0gIEFTU0VSVF9UUlVFKGl0ZXItPlZhbGlkKCkpOwotICBBU1NFUlRfRVEoImZvbyIsIGl0
ZXItPmtleSgpLlRvU3RyaW5nKCkpOwotICBBU1NFUlRfRVEoImhlbGxvIiwgaXRlci0+dmFsdWUo
KS5Ub1N0cmluZygpKTsKLSAgaXRlci0+TmV4dCgpOwotICBBU1NFUlRfVFJVRSghaXRlci0+VmFs
aWQoKSk7Ci0gIGRlbGV0ZSBpdGVyOwotfQotCi1URVNUKERCVGVzdCwgU25hcHNob3QpIHsKLSAg
ZG8gewotICAgIFB1dCgiZm9vIiwgInYxIik7Ci0gICAgY29uc3QgU25hcHNob3QqIHMxID0gZGJf
LT5HZXRTbmFwc2hvdCgpOwotICAgIFB1dCgiZm9vIiwgInYyIik7Ci0gICAgY29uc3QgU25hcHNo
b3QqIHMyID0gZGJfLT5HZXRTbmFwc2hvdCgpOwotICAgIFB1dCgiZm9vIiwgInYzIik7Ci0gICAg
Y29uc3QgU25hcHNob3QqIHMzID0gZGJfLT5HZXRTbmFwc2hvdCgpOwotCi0gICAgUHV0KCJmb28i
LCAidjQiKTsKLSAgICBBU1NFUlRfRVEoInYxIiwgR2V0KCJmb28iLCBzMSkpOwotICAgIEFTU0VS
VF9FUSgidjIiLCBHZXQoImZvbyIsIHMyKSk7Ci0gICAgQVNTRVJUX0VRKCJ2MyIsIEdldCgiZm9v
IiwgczMpKTsKLSAgICBBU1NFUlRfRVEoInY0IiwgR2V0KCJmb28iKSk7Ci0KLSAgICBkYl8tPlJl
bGVhc2VTbmFwc2hvdChzMyk7Ci0gICAgQVNTRVJUX0VRKCJ2MSIsIEdldCgiZm9vIiwgczEpKTsK
LSAgICBBU1NFUlRfRVEoInYyIiwgR2V0KCJmb28iLCBzMikpOwotICAgIEFTU0VSVF9FUSgidjQi
LCBHZXQoImZvbyIpKTsKLQotICAgIGRiXy0+UmVsZWFzZVNuYXBzaG90KHMxKTsKLSAgICBBU1NF
UlRfRVEoInYyIiwgR2V0KCJmb28iLCBzMikpOwotICAgIEFTU0VSVF9FUSgidjQiLCBHZXQoImZv
byIpKTsKLQotICAgIGRiXy0+UmVsZWFzZVNuYXBzaG90KHMyKTsKLSAgICBBU1NFUlRfRVEoInY0
IiwgR2V0KCJmb28iKSk7Ci0gIH0gd2hpbGUgKENoYW5nZU9wdGlvbnMoKSk7Ci19Ci0KLVRFU1Qo
REJUZXN0LCBIaWRkZW5WYWx1ZXNBcmVSZW1vdmVkKSB7Ci0gIGRvIHsKLSAgICBSYW5kb20gcm5k
KDMwMSk7Ci0gICAgRmlsbExldmVscygiYSIsICJ6Iik7Ci0KLSAgICBzdGQ6OnN0cmluZyBiaWcg
PSBSYW5kb21TdHJpbmcoJnJuZCwgNTAwMDApOwotICAgIFB1dCgiZm9vIiwgYmlnKTsKLSAgICBQ
dXQoInBhc3Rmb28iLCAidiIpOwotICAgIGNvbnN0IFNuYXBzaG90KiBzbmFwc2hvdCA9IGRiXy0+
R2V0U25hcHNob3QoKTsKLSAgICBQdXQoImZvbyIsICJ0aW55Iik7Ci0gICAgUHV0KCJwYXN0Zm9v
MiIsICJ2MiIpOyAgICAgICAgLy8gQWR2YW5jZSBzZXF1ZW5jZSBudW1iZXIgb25lIG1vcmUKLQot
ICAgIEFTU0VSVF9PSyhkYmZ1bGwoKS0+VEVTVF9Db21wYWN0TWVtVGFibGUoKSk7Ci0gICAgQVNT
RVJUX0dUKE51bVRhYmxlRmlsZXNBdExldmVsKDApLCAwKTsKLQotICAgIEFTU0VSVF9FUShiaWcs
IEdldCgiZm9vIiwgc25hcHNob3QpKTsKLSAgICBBU1NFUlRfVFJVRShCZXR3ZWVuKFNpemUoIiIs
ICJwYXN0Zm9vIiksIDUwMDAwLCA2MDAwMCkpOwotICAgIGRiXy0+UmVsZWFzZVNuYXBzaG90KHNu
YXBzaG90KTsKLSAgICBBU1NFUlRfRVEoQWxsRW50cmllc0ZvcigiZm9vIiksICJbIHRpbnksICIg
KyBiaWcgKyAiIF0iKTsKLSAgICBTbGljZSB4KCJ4Iik7Ci0gICAgZGJmdWxsKCktPlRFU1RfQ29t
cGFjdFJhbmdlKDAsIE5VTEwsICZ4KTsKLSAgICBBU1NFUlRfRVEoQWxsRW50cmllc0ZvcigiZm9v
IiksICJbIHRpbnkgXSIpOwotICAgIEFTU0VSVF9FUShOdW1UYWJsZUZpbGVzQXRMZXZlbCgwKSwg
MCk7Ci0gICAgQVNTRVJUX0dFKE51bVRhYmxlRmlsZXNBdExldmVsKDEpLCAxKTsKLSAgICBkYmZ1
bGwoKS0+VEVTVF9Db21wYWN0UmFuZ2UoMSwgTlVMTCwgJngpOwotICAgIEFTU0VSVF9FUShBbGxF
bnRyaWVzRm9yKCJmb28iKSwgIlsgdGlueSBdIik7Ci0KLSAgICBBU1NFUlRfVFJVRShCZXR3ZWVu
KFNpemUoIiIsICJwYXN0Zm9vIiksIDAsIDEwMDApKTsKLSAgfSB3aGlsZSAoQ2hhbmdlT3B0aW9u
cygpKTsKLX0KLQotVEVTVChEQlRlc3QsIERlbGV0aW9uTWFya2VyczEpIHsKLSAgUHV0KCJmb28i
LCAidjEiKTsKLSAgQVNTRVJUX09LKGRiZnVsbCgpLT5URVNUX0NvbXBhY3RNZW1UYWJsZSgpKTsK
LSAgY29uc3QgaW50IGxhc3QgPSBjb25maWc6OmtNYXhNZW1Db21wYWN0TGV2ZWw7Ci0gIEFTU0VS
VF9FUShOdW1UYWJsZUZpbGVzQXRMZXZlbChsYXN0KSwgMSk7ICAgLy8gZm9vID0+IHYxIGlzIG5v
dyBpbiBsYXN0IGxldmVsCi0KLSAgLy8gUGxhY2UgYSB0YWJsZSBhdCBsZXZlbCBsYXN0LTEgdG8g
cHJldmVudCBtZXJnaW5nIHdpdGggcHJlY2VkaW5nIG11dGF0aW9uCi0gIFB1dCgiYSIsICJiZWdp
biIpOwotICBQdXQoInoiLCAiZW5kIik7Ci0gIGRiZnVsbCgpLT5URVNUX0NvbXBhY3RNZW1UYWJs
ZSgpOwotICBBU1NFUlRfRVEoTnVtVGFibGVGaWxlc0F0TGV2ZWwobGFzdCksIDEpOwotICBBU1NF
UlRfRVEoTnVtVGFibGVGaWxlc0F0TGV2ZWwobGFzdC0xKSwgMSk7Ci0KLSAgRGVsZXRlKCJmb28i
KTsKLSAgUHV0KCJmb28iLCAidjIiKTsKLSAgQVNTRVJUX0VRKEFsbEVudHJpZXNGb3IoImZvbyIp
LCAiWyB2MiwgREVMLCB2MSBdIik7Ci0gIEFTU0VSVF9PSyhkYmZ1bGwoKS0+VEVTVF9Db21wYWN0
TWVtVGFibGUoKSk7ICAvLyBNb3ZlcyB0byBsZXZlbCBsYXN0LTIKLSAgQVNTRVJUX0VRKEFsbEVu
dHJpZXNGb3IoImZvbyIpLCAiWyB2MiwgREVMLCB2MSBdIik7Ci0gIFNsaWNlIHooInoiKTsKLSAg
ZGJmdWxsKCktPlRFU1RfQ29tcGFjdFJhbmdlKGxhc3QtMiwgTlVMTCwgJnopOwotICAvLyBERUwg
ZWxpbWluYXRlZCwgYnV0IHYxIHJlbWFpbnMgYmVjYXVzZSB3ZSBhcmVuJ3QgY29tcGFjdGluZyB0
aGF0IGxldmVsCi0gIC8vIChERUwgY2FuIGJlIGVsaW1pbmF0ZWQgYmVjYXVzZSB2MiBoaWRlcyB2
MSkuCi0gIEFTU0VSVF9FUShBbGxFbnRyaWVzRm9yKCJmb28iKSwgIlsgdjIsIHYxIF0iKTsKLSAg
ZGJmdWxsKCktPlRFU1RfQ29tcGFjdFJhbmdlKGxhc3QtMSwgTlVMTCwgTlVMTCk7Ci0gIC8vIE1l
cmdpbmcgbGFzdC0xIHcvIGxhc3QsIHNvIHdlIGFyZSB0aGUgYmFzZSBsZXZlbCBmb3IgImZvbyIs
IHNvCi0gIC8vIERFTCBpcyByZW1vdmVkLiAgKGFzIGlzIHYxKS4KLSAgQVNTRVJUX0VRKEFsbEVu
dHJpZXNGb3IoImZvbyIpLCAiWyB2MiBdIik7Ci19Ci0KLVRFU1QoREJUZXN0LCBEZWxldGlvbk1h
cmtlcnMyKSB7Ci0gIFB1dCgiZm9vIiwgInYxIik7Ci0gIEFTU0VSVF9PSyhkYmZ1bGwoKS0+VEVT
VF9Db21wYWN0TWVtVGFibGUoKSk7Ci0gIGNvbnN0IGludCBsYXN0ID0gY29uZmlnOjprTWF4TWVt
Q29tcGFjdExldmVsOwotICBBU1NFUlRfRVEoTnVtVGFibGVGaWxlc0F0TGV2ZWwobGFzdCksIDEp
OyAgIC8vIGZvbyA9PiB2MSBpcyBub3cgaW4gbGFzdCBsZXZlbAotCi0gIC8vIFBsYWNlIGEgdGFi
bGUgYXQgbGV2ZWwgbGFzdC0xIHRvIHByZXZlbnQgbWVyZ2luZyB3aXRoIHByZWNlZGluZyBtdXRh
dGlvbgotICBQdXQoImEiLCAiYmVnaW4iKTsKLSAgUHV0KCJ6IiwgImVuZCIpOwotICBkYmZ1bGwo
KS0+VEVTVF9Db21wYWN0TWVtVGFibGUoKTsKLSAgQVNTRVJUX0VRKE51bVRhYmxlRmlsZXNBdExl
dmVsKGxhc3QpLCAxKTsKLSAgQVNTRVJUX0VRKE51bVRhYmxlRmlsZXNBdExldmVsKGxhc3QtMSks
IDEpOwotCi0gIERlbGV0ZSgiZm9vIik7Ci0gIEFTU0VSVF9FUShBbGxFbnRyaWVzRm9yKCJmb28i
KSwgIlsgREVMLCB2MSBdIik7Ci0gIEFTU0VSVF9PSyhkYmZ1bGwoKS0+VEVTVF9Db21wYWN0TWVt
VGFibGUoKSk7ICAvLyBNb3ZlcyB0byBsZXZlbCBsYXN0LTIKLSAgQVNTRVJUX0VRKEFsbEVudHJp
ZXNGb3IoImZvbyIpLCAiWyBERUwsIHYxIF0iKTsKLSAgZGJmdWxsKCktPlRFU1RfQ29tcGFjdFJh
bmdlKGxhc3QtMiwgTlVMTCwgTlVMTCk7Ci0gIC8vIERFTCBrZXB0OiAibGFzdCIgZmlsZSBvdmVy
bGFwcwotICBBU1NFUlRfRVEoQWxsRW50cmllc0ZvcigiZm9vIiksICJbIERFTCwgdjEgXSIpOwot
ICBkYmZ1bGwoKS0+VEVTVF9Db21wYWN0UmFuZ2UobGFzdC0xLCBOVUxMLCBOVUxMKTsKLSAgLy8g
TWVyZ2luZyBsYXN0LTEgdy8gbGFzdCwgc28gd2UgYXJlIHRoZSBiYXNlIGxldmVsIGZvciAiZm9v
Iiwgc28KLSAgLy8gREVMIGlzIHJlbW92ZWQuICAoYXMgaXMgdjEpLgotICBBU1NFUlRfRVEoQWxs
RW50cmllc0ZvcigiZm9vIiksICJbIF0iKTsKLX0KLQotVEVTVChEQlRlc3QsIE92ZXJsYXBJbkxl
dmVsMCkgewotICBkbyB7Ci0gICAgQVNTRVJUX0VRKGNvbmZpZzo6a01heE1lbUNvbXBhY3RMZXZl
bCwgMikgPDwgIkZpeCB0ZXN0IHRvIG1hdGNoIGNvbmZpZyI7Ci0KLSAgICAvLyBGaWxsIGxldmVs
cyAxIGFuZCAyIHRvIGRpc2FibGUgdGhlIHB1c2hpbmcgb2YgbmV3IG1lbXRhYmxlcyB0byBsZXZl
bHMgPiAwLgotICAgIEFTU0VSVF9PSyhQdXQoIjEwMCIsICJ2MTAwIikpOwotICAgIEFTU0VSVF9P
SyhQdXQoIjk5OSIsICJ2OTk5IikpOwotICAgIGRiZnVsbCgpLT5URVNUX0NvbXBhY3RNZW1UYWJs
ZSgpOwotICAgIEFTU0VSVF9PSyhEZWxldGUoIjEwMCIpKTsKLSAgICBBU1NFUlRfT0soRGVsZXRl
KCI5OTkiKSk7Ci0gICAgZGJmdWxsKCktPlRFU1RfQ29tcGFjdE1lbVRhYmxlKCk7Ci0gICAgQVNT
RVJUX0VRKCIwLDEsMSIsIEZpbGVzUGVyTGV2ZWwoKSk7Ci0KLSAgICAvLyBNYWtlIGZpbGVzIHNw
YW5uaW5nIHRoZSBmb2xsb3dpbmcgcmFuZ2VzIGluIGxldmVsLTA6Ci0gICAgLy8gIGZpbGVzWzBd
ICAyMDAgLi4gOTAwCi0gICAgLy8gIGZpbGVzWzFdICAzMDAgLi4gNTAwCi0gICAgLy8gTm90ZSB0
aGF0IGZpbGVzIGFyZSBzb3J0ZWQgYnkgc21hbGxlc3Qga2V5LgotICAgIEFTU0VSVF9PSyhQdXQo
IjMwMCIsICJ2MzAwIikpOwotICAgIEFTU0VSVF9PSyhQdXQoIjUwMCIsICJ2NTAwIikpOwotICAg
IGRiZnVsbCgpLT5URVNUX0NvbXBhY3RNZW1UYWJsZSgpOwotICAgIEFTU0VSVF9PSyhQdXQoIjIw
MCIsICJ2MjAwIikpOwotICAgIEFTU0VSVF9PSyhQdXQoIjYwMCIsICJ2NjAwIikpOwotICAgIEFT
U0VSVF9PSyhQdXQoIjkwMCIsICJ2OTAwIikpOwotICAgIGRiZnVsbCgpLT5URVNUX0NvbXBhY3RN
ZW1UYWJsZSgpOwotICAgIEFTU0VSVF9FUSgiMiwxLDEiLCBGaWxlc1BlckxldmVsKCkpOwotCi0g
ICAgLy8gQ29tcGFjdCBhd2F5IHRoZSBwbGFjZWhvbGRlciBmaWxlcyB3ZSBjcmVhdGVkIGluaXRp
YWxseQotICAgIGRiZnVsbCgpLT5URVNUX0NvbXBhY3RSYW5nZSgxLCBOVUxMLCBOVUxMKTsKLSAg
ICBkYmZ1bGwoKS0+VEVTVF9Db21wYWN0UmFuZ2UoMiwgTlVMTCwgTlVMTCk7Ci0gICAgQVNTRVJU
X0VRKCIyIiwgRmlsZXNQZXJMZXZlbCgpKTsKLQotICAgIC8vIERvIGEgbWVtdGFibGUgY29tcGFj
dGlvbi4gIEJlZm9yZSBidWctZml4LCB0aGUgY29tcGFjdGlvbiB3b3VsZAotICAgIC8vIG5vdCBk
ZXRlY3QgdGhlIG92ZXJsYXAgd2l0aCBsZXZlbC0wIGZpbGVzIGFuZCB3b3VsZCBpbmNvcnJlY3Rs
eSBwbGFjZQotICAgIC8vIHRoZSBkZWxldGlvbiBpbiBhIGRlZXBlciBsZXZlbC4KLSAgICBBU1NF
UlRfT0soRGVsZXRlKCI2MDAiKSk7Ci0gICAgZGJmdWxsKCktPlRFU1RfQ29tcGFjdE1lbVRhYmxl
KCk7Ci0gICAgQVNTRVJUX0VRKCIzIiwgRmlsZXNQZXJMZXZlbCgpKTsKLSAgICBBU1NFUlRfRVEo
Ik5PVF9GT1VORCIsIEdldCgiNjAwIikpOwotICB9IHdoaWxlIChDaGFuZ2VPcHRpb25zKCkpOwot
fQotCi1URVNUKERCVGVzdCwgTDBfQ29tcGFjdGlvbkJ1Z19Jc3N1ZTQ0X2EpIHsKLSAgUmVvcGVu
KCk7Ci0gIEFTU0VSVF9PSyhQdXQoImIiLCAidiIpKTsKLSAgUmVvcGVuKCk7Ci0gIEFTU0VSVF9P
SyhEZWxldGUoImIiKSk7Ci0gIEFTU0VSVF9PSyhEZWxldGUoImEiKSk7Ci0gIFJlb3BlbigpOwot
ICBBU1NFUlRfT0soRGVsZXRlKCJhIikpOwotICBSZW9wZW4oKTsKLSAgQVNTRVJUX09LKFB1dCgi
YSIsICJ2IikpOwotICBSZW9wZW4oKTsKLSAgUmVvcGVuKCk7Ci0gIEFTU0VSVF9FUSgiKGEtPnYp
IiwgQ29udGVudHMoKSk7Ci0gIGVudl8tPlNsZWVwRm9yTWljcm9zZWNvbmRzKDEwMDAwMDApOyAg
Ly8gV2FpdCBmb3IgY29tcGFjdGlvbiB0byBmaW5pc2gKLSAgQVNTRVJUX0VRKCIoYS0+dikiLCBD
b250ZW50cygpKTsKLX0KLQotVEVTVChEQlRlc3QsIEwwX0NvbXBhY3Rpb25CdWdfSXNzdWU0NF9i
KSB7Ci0gIFJlb3BlbigpOwotICBQdXQoIiIsIiIpOwotICBSZW9wZW4oKTsKLSAgRGVsZXRlKCJl
Iik7Ci0gIFB1dCgiIiwiIik7Ci0gIFJlb3BlbigpOwotICBQdXQoImMiLCAiY3YiKTsKLSAgUmVv
cGVuKCk7Ci0gIFB1dCgiIiwiIik7Ci0gIFJlb3BlbigpOwotICBQdXQoIiIsIiIpOwotICBlbnZf
LT5TbGVlcEZvck1pY3Jvc2Vjb25kcygxMDAwMDAwKTsgIC8vIFdhaXQgZm9yIGNvbXBhY3Rpb24g
dG8gZmluaXNoCi0gIFJlb3BlbigpOwotICBQdXQoImQiLCJkdiIpOwotICBSZW9wZW4oKTsKLSAg
UHV0KCIiLCIiKTsKLSAgUmVvcGVuKCk7Ci0gIERlbGV0ZSgiZCIpOwotICBEZWxldGUoImIiKTsK
LSAgUmVvcGVuKCk7Ci0gIEFTU0VSVF9FUSgiKC0+KShjLT5jdikiLCBDb250ZW50cygpKTsKLSAg
ZW52Xy0+U2xlZXBGb3JNaWNyb3NlY29uZHMoMTAwMDAwMCk7ICAvLyBXYWl0IGZvciBjb21wYWN0
aW9uIHRvIGZpbmlzaAotICBBU1NFUlRfRVEoIigtPikoYy0+Y3YpIiwgQ29udGVudHMoKSk7Ci19
Ci0KLVRFU1QoREJUZXN0LCBDb21wYXJhdG9yQ2hlY2spIHsKLSAgY2xhc3MgTmV3Q29tcGFyYXRv
ciA6IHB1YmxpYyBDb21wYXJhdG9yIHsKLSAgIHB1YmxpYzoKLSAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIE5hbWUoKSBjb25zdCB7IHJldHVybiAibGV2ZWxkYi5OZXdDb21wYXJhdG9yIjsgfQotICAg
IHZpcnR1YWwgaW50IENvbXBhcmUoY29uc3QgU2xpY2UmIGEsIGNvbnN0IFNsaWNlJiBiKSBjb25z
dCB7Ci0gICAgICByZXR1cm4gQnl0ZXdpc2VDb21wYXJhdG9yKCktPkNvbXBhcmUoYSwgYik7Ci0g
ICAgfQotICAgIHZpcnR1YWwgdm9pZCBGaW5kU2hvcnRlc3RTZXBhcmF0b3Ioc3RkOjpzdHJpbmcq
IHMsIGNvbnN0IFNsaWNlJiBsKSBjb25zdCB7Ci0gICAgICBCeXRld2lzZUNvbXBhcmF0b3IoKS0+
RmluZFNob3J0ZXN0U2VwYXJhdG9yKHMsIGwpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgRmlu
ZFNob3J0U3VjY2Vzc29yKHN0ZDo6c3RyaW5nKiBrZXkpIGNvbnN0IHsKLSAgICAgIEJ5dGV3aXNl
Q29tcGFyYXRvcigpLT5GaW5kU2hvcnRTdWNjZXNzb3Ioa2V5KTsKLSAgICB9Ci0gIH07Ci0gIE5l
d0NvbXBhcmF0b3IgY21wOwotICBPcHRpb25zIG5ld19vcHRpb25zID0gQ3VycmVudE9wdGlvbnMo
KTsKLSAgbmV3X29wdGlvbnMuY29tcGFyYXRvciA9ICZjbXA7Ci0gIFN0YXR1cyBzID0gVHJ5UmVv
cGVuKCZuZXdfb3B0aW9ucyk7Ci0gIEFTU0VSVF9UUlVFKCFzLm9rKCkpOwotICBBU1NFUlRfVFJV
RShzLlRvU3RyaW5nKCkuZmluZCgiY29tcGFyYXRvciIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQot
ICAgICAgPDwgcy5Ub1N0cmluZygpOwotfQotCi1URVNUKERCVGVzdCwgQ3VzdG9tQ29tcGFyYXRv
cikgewotICBjbGFzcyBOdW1iZXJDb21wYXJhdG9yIDogcHVibGljIENvbXBhcmF0b3IgewotICAg
cHVibGljOgotICAgIHZpcnR1YWwgY29uc3QgY2hhciogTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJ0
ZXN0Lk51bWJlckNvbXBhcmF0b3IiOyB9Ci0gICAgdmlydHVhbCBpbnQgQ29tcGFyZShjb25zdCBT
bGljZSYgYSwgY29uc3QgU2xpY2UmIGIpIGNvbnN0IHsKLSAgICAgIHJldHVybiBUb051bWJlcihh
KSAtIFRvTnVtYmVyKGIpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgRmluZFNob3J0ZXN0U2Vw
YXJhdG9yKHN0ZDo6c3RyaW5nKiBzLCBjb25zdCBTbGljZSYgbCkgY29uc3QgewotICAgICAgVG9O
dW1iZXIoKnMpOyAgICAgLy8gQ2hlY2sgZm9ybWF0Ci0gICAgICBUb051bWJlcihsKTsgICAgICAv
LyBDaGVjayBmb3JtYXQKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIEZpbmRTaG9ydFN1Y2Nlc3Nv
cihzdGQ6OnN0cmluZyoga2V5KSBjb25zdCB7Ci0gICAgICBUb051bWJlcigqa2V5KTsgICAvLyBD
aGVjayBmb3JtYXQKLSAgICB9Ci0gICBwcml2YXRlOgotICAgIHN0YXRpYyBpbnQgVG9OdW1iZXIo
Y29uc3QgU2xpY2UmIHgpIHsKLSAgICAgIC8vIENoZWNrIHRoYXQgdGhlcmUgYXJlIG5vIGV4dHJh
IGNoYXJhY3RlcnMuCi0gICAgICBBU1NFUlRfVFJVRSh4LnNpemUoKSA+PSAyICYmIHhbMF0gPT0g
J1snICYmIHhbeC5zaXplKCktMV0gPT0gJ10nKQotICAgICAgICAgIDw8IEVzY2FwZVN0cmluZyh4
KTsKLSAgICAgIGludCB2YWw7Ci0gICAgICBjaGFyIGlnbm9yZWQ7Ci0gICAgICBBU1NFUlRfVFJV
RShzc2NhbmYoeC5Ub1N0cmluZygpLmNfc3RyKCksICJbJWldJWMiLCAmdmFsLCAmaWdub3JlZCkg
PT0gMSkKLSAgICAgICAgICA8PCBFc2NhcGVTdHJpbmcoeCk7Ci0gICAgICByZXR1cm4gdmFsOwot
ICAgIH0KLSAgfTsKLSAgTnVtYmVyQ29tcGFyYXRvciBjbXA7Ci0gIE9wdGlvbnMgbmV3X29wdGlv
bnMgPSBDdXJyZW50T3B0aW9ucygpOwotICBuZXdfb3B0aW9ucy5jcmVhdGVfaWZfbWlzc2luZyA9
IHRydWU7Ci0gIG5ld19vcHRpb25zLmNvbXBhcmF0b3IgPSAmY21wOwotICBuZXdfb3B0aW9ucy5m
aWx0ZXJfcG9saWN5ID0gTlVMTDsgICAgIC8vIENhbm5vdCB1c2UgYmxvb20gZmlsdGVycwotICBu
ZXdfb3B0aW9ucy53cml0ZV9idWZmZXJfc2l6ZSA9IDEwMDA7ICAvLyBDb21wYWN0IG1vcmUgb2Z0
ZW4KLSAgRGVzdHJveUFuZFJlb3BlbigmbmV3X29wdGlvbnMpOwotICBBU1NFUlRfT0soUHV0KCJb
MTBdIiwgInRlbiIpKTsKLSAgQVNTRVJUX09LKFB1dCgiWzB4MTRdIiwgInR3ZW50eSIpKTsKLSAg
Zm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKLSAgICBBU1NFUlRfRVEoInRlbiIsIEdldCgi
WzEwXSIpKTsKLSAgICBBU1NFUlRfRVEoInRlbiIsIEdldCgiWzB4YV0iKSk7Ci0gICAgQVNTRVJU
X0VRKCJ0d2VudHkiLCBHZXQoIlsyMF0iKSk7Ci0gICAgQVNTRVJUX0VRKCJ0d2VudHkiLCBHZXQo
IlsweDE0XSIpKTsKLSAgICBBU1NFUlRfRVEoIk5PVF9GT1VORCIsIEdldCgiWzE1XSIpKTsKLSAg
ICBBU1NFUlRfRVEoIk5PVF9GT1VORCIsIEdldCgiWzB4Zl0iKSk7Ci0gICAgQ29tcGFjdCgiWzBd
IiwgIls5OTk5XSIpOwotICB9Ci0KLSAgZm9yIChpbnQgcnVuID0gMDsgcnVuIDwgMjsgcnVuKysp
IHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDA7IGkrKykgewotICAgICAgY2hhciBidWZb
MTAwXTsKLSAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJbJWRdIiwgaSoxMCk7Ci0g
ICAgICBBU1NFUlRfT0soUHV0KGJ1ZiwgYnVmKSk7Ci0gICAgfQotICAgIENvbXBhY3QoIlswXSIs
ICJbMTAwMDAwMF0iKTsKLSAgfQotfQotCi1URVNUKERCVGVzdCwgTWFudWFsQ29tcGFjdGlvbikg
ewotICBBU1NFUlRfRVEoY29uZmlnOjprTWF4TWVtQ29tcGFjdExldmVsLCAyKQotICAgICAgPDwg
Ik5lZWQgdG8gdXBkYXRlIHRoaXMgdGVzdCB0byBtYXRjaCBrTWF4TWVtQ29tcGFjdExldmVsIjsK
LQotICBNYWtlVGFibGVzKDMsICJwIiwgInEiKTsKLSAgQVNTRVJUX0VRKCIxLDEsMSIsIEZpbGVz
UGVyTGV2ZWwoKSk7Ci0KLSAgLy8gQ29tcGFjdGlvbiByYW5nZSBmYWxscyBiZWZvcmUgZmlsZXMK
LSAgQ29tcGFjdCgiIiwgImMiKTsKLSAgQVNTRVJUX0VRKCIxLDEsMSIsIEZpbGVzUGVyTGV2ZWwo
KSk7Ci0KLSAgLy8gQ29tcGFjdGlvbiByYW5nZSBmYWxscyBhZnRlciBmaWxlcwotICBDb21wYWN0
KCJyIiwgInoiKTsKLSAgQVNTRVJUX0VRKCIxLDEsMSIsIEZpbGVzUGVyTGV2ZWwoKSk7Ci0KLSAg
Ly8gQ29tcGFjdGlvbiByYW5nZSBvdmVybGFwcyBmaWxlcwotICBDb21wYWN0KCJwMSIsICJwOSIp
OwotICBBU1NFUlRfRVEoIjAsMCwxIiwgRmlsZXNQZXJMZXZlbCgpKTsKLQotICAvLyBQb3B1bGF0
ZSBhIGRpZmZlcmVudCByYW5nZQotICBNYWtlVGFibGVzKDMsICJjIiwgImUiKTsKLSAgQVNTRVJU
X0VRKCIxLDEsMiIsIEZpbGVzUGVyTGV2ZWwoKSk7Ci0KLSAgLy8gQ29tcGFjdCBqdXN0IHRoZSBu
ZXcgcmFuZ2UKLSAgQ29tcGFjdCgiYiIsICJmIik7Ci0gIEFTU0VSVF9FUSgiMCwwLDIiLCBGaWxl
c1BlckxldmVsKCkpOwotCi0gIC8vIENvbXBhY3QgYWxsCi0gIE1ha2VUYWJsZXMoMSwgImEiLCAi
eiIpOwotICBBU1NFUlRfRVEoIjAsMSwyIiwgRmlsZXNQZXJMZXZlbCgpKTsKLSAgZGJfLT5Db21w
YWN0UmFuZ2UoTlVMTCwgTlVMTCk7Ci0gIEFTU0VSVF9FUSgiMCwwLDEiLCBGaWxlc1BlckxldmVs
KCkpOwotfQotCi1URVNUKERCVGVzdCwgREJPcGVuX09wdGlvbnMpIHsKLSAgc3RkOjpzdHJpbmcg
ZGJuYW1lID0gdGVzdDo6VG1wRGlyKCkgKyAiL2RiX29wdGlvbnNfdGVzdCI7Ci0gIERlc3Ryb3lE
QihkYm5hbWUsIE9wdGlvbnMoKSk7Ci0KLSAgLy8gRG9lcyBub3QgZXhpc3QsIGFuZCBjcmVhdGVf
aWZfbWlzc2luZyA9PSBmYWxzZTogZXJyb3IKLSAgREIqIGRiID0gTlVMTDsKLSAgT3B0aW9ucyBv
cHRzOwotICBvcHRzLmNyZWF0ZV9pZl9taXNzaW5nID0gZmFsc2U7Ci0gIFN0YXR1cyBzID0gREI6
Ok9wZW4ob3B0cywgZGJuYW1lLCAmZGIpOwotICBBU1NFUlRfVFJVRShzdHJzdHIocy5Ub1N0cmlu
ZygpLmNfc3RyKCksICJkb2VzIG5vdCBleGlzdCIpICE9IE5VTEwpOwotICBBU1NFUlRfVFJVRShk
YiA9PSBOVUxMKTsKLQotICAvLyBEb2VzIG5vdCBleGlzdCwgYW5kIGNyZWF0ZV9pZl9taXNzaW5n
ID09IHRydWU6IE9LCi0gIG9wdHMuY3JlYXRlX2lmX21pc3NpbmcgPSB0cnVlOwotICBzID0gREI6
Ok9wZW4ob3B0cywgZGJuYW1lLCAmZGIpOwotICBBU1NFUlRfT0socyk7Ci0gIEFTU0VSVF9UUlVF
KGRiICE9IE5VTEwpOwotCi0gIGRlbGV0ZSBkYjsKLSAgZGIgPSBOVUxMOwotCi0gIC8vIERvZXMg
ZXhpc3QsIGFuZCBlcnJvcl9pZl9leGlzdHMgPT0gdHJ1ZTogZXJyb3IKLSAgb3B0cy5jcmVhdGVf
aWZfbWlzc2luZyA9IGZhbHNlOwotICBvcHRzLmVycm9yX2lmX2V4aXN0cyA9IHRydWU7Ci0gIHMg
PSBEQjo6T3BlbihvcHRzLCBkYm5hbWUsICZkYik7Ci0gIEFTU0VSVF9UUlVFKHN0cnN0cihzLlRv
U3RyaW5nKCkuY19zdHIoKSwgImV4aXN0cyIpICE9IE5VTEwpOwotICBBU1NFUlRfVFJVRShkYiA9
PSBOVUxMKTsKLQotICAvLyBEb2VzIGV4aXN0LCBhbmQgZXJyb3JfaWZfZXhpc3RzID09IGZhbHNl
OiBPSwotICBvcHRzLmNyZWF0ZV9pZl9taXNzaW5nID0gdHJ1ZTsKLSAgb3B0cy5lcnJvcl9pZl9l
eGlzdHMgPSBmYWxzZTsKLSAgcyA9IERCOjpPcGVuKG9wdHMsIGRibmFtZSwgJmRiKTsKLSAgQVNT
RVJUX09LKHMpOwotICBBU1NFUlRfVFJVRShkYiAhPSBOVUxMKTsKLQotICBkZWxldGUgZGI7Ci0g
IGRiID0gTlVMTDsKLX0KLQotVEVTVChEQlRlc3QsIExvY2tpbmcpIHsKLSAgREIqIGRiMiA9IE5V
TEw7Ci0gIFN0YXR1cyBzID0gREI6Ok9wZW4oQ3VycmVudE9wdGlvbnMoKSwgZGJuYW1lXywgJmRi
Mik7Ci0gIEFTU0VSVF9UUlVFKCFzLm9rKCkpIDw8ICJMb2NraW5nIGRpZCBub3QgcHJldmVudCBy
ZS1vcGVuaW5nIGRiIjsKLX0KLQotLy8gQ2hlY2sgdGhhdCBudW1iZXIgb2YgZmlsZXMgZG9lcyBu
b3QgZ3JvdyB3aGVuIHdlIGFyZSBvdXQgb2Ygc3BhY2UKLVRFU1QoREJUZXN0LCBOb1NwYWNlKSB7
Ci0gIE9wdGlvbnMgb3B0aW9ucyA9IEN1cnJlbnRPcHRpb25zKCk7Ci0gIG9wdGlvbnMuZW52ID0g
ZW52XzsKLSAgUmVvcGVuKCZvcHRpb25zKTsKLQotICBBU1NFUlRfT0soUHV0KCJmb28iLCAidjEi
KSk7Ci0gIEFTU0VSVF9FUSgidjEiLCBHZXQoImZvbyIpKTsKLSAgQ29tcGFjdCgiYSIsICJ6Iik7
Ci0gIGNvbnN0IGludCBudW1fZmlsZXMgPSBDb3VudEZpbGVzKCk7Ci0gIGVudl8tPm5vX3NwYWNl
Xy5SZWxlYXNlX1N0b3JlKGVudl8pOyAgIC8vIEZvcmNlIG91dC1vZi1zcGFjZSBlcnJvcnMKLSAg
ZW52Xy0+c2xlZXBfY291bnRlcl8uUmVzZXQoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBp
KyspIHsKLSAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgY29uZmlnOjprTnVtTGV2ZWxz
LTE7IGxldmVsKyspIHsKLSAgICAgIGRiZnVsbCgpLT5URVNUX0NvbXBhY3RSYW5nZShsZXZlbCwg
TlVMTCwgTlVMTCk7Ci0gICAgfQotICB9Ci0gIGVudl8tPm5vX3NwYWNlXy5SZWxlYXNlX1N0b3Jl
KE5VTEwpOwotICBBU1NFUlRfTFQoQ291bnRGaWxlcygpLCBudW1fZmlsZXMgKyAzKTsKLQotICAv
LyBDaGVjayB0aGF0IGNvbXBhY3Rpb24gYXR0ZW1wdHMgc2xlcHQgYWZ0ZXIgZXJyb3JzCi0gIEFT
U0VSVF9HRShlbnZfLT5zbGVlcF9jb3VudGVyXy5SZWFkKCksIDUpOwotfQotCi1URVNUKERCVGVz
dCwgTm9uV3JpdGFibGVGaWxlU3lzdGVtKSB7Ci0gIE9wdGlvbnMgb3B0aW9ucyA9IEN1cnJlbnRP
cHRpb25zKCk7Ci0gIG9wdGlvbnMud3JpdGVfYnVmZmVyX3NpemUgPSAxMDAwOwotICBvcHRpb25z
LmVudiA9IGVudl87Ci0gIFJlb3Blbigmb3B0aW9ucyk7Ci0gIEFTU0VSVF9PSyhQdXQoImZvbyIs
ICJ2MSIpKTsKLSAgZW52Xy0+bm9uX3dyaXRhYmxlXy5SZWxlYXNlX1N0b3JlKGVudl8pOyAgLy8g
Rm9yY2UgZXJyb3JzIGZvciBuZXcgZmlsZXMKLSAgc3RkOjpzdHJpbmcgYmlnKDEwMDAwMCwgJ3gn
KTsKLSAgaW50IGVycm9ycyA9IDA7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgMjA7IGkrKykgewot
ICAgIGZwcmludGYoc3RkZXJyLCAiaXRlciAlZDsgZXJyb3JzICVkXG4iLCBpLCBlcnJvcnMpOwot
ICAgIGlmICghUHV0KCJmb28iLCBiaWcpLm9rKCkpIHsKLSAgICAgIGVycm9ycysrOwotICAgICAg
ZW52Xy0+U2xlZXBGb3JNaWNyb3NlY29uZHMoMTAwMDAwKTsKLSAgICB9Ci0gIH0KLSAgQVNTRVJU
X0dUKGVycm9ycywgMCk7Ci0gIGVudl8tPm5vbl93cml0YWJsZV8uUmVsZWFzZV9TdG9yZShOVUxM
KTsKLX0KLQotVEVTVChEQlRlc3QsIE1hbmlmZXN0V3JpdGVFcnJvcikgewotICAvLyBUZXN0IGZv
ciB0aGUgZm9sbG93aW5nIHByb2JsZW06Ci0gIC8vIChhKSBDb21wYWN0aW9uIHByb2R1Y2VzIGZp
bGUgRgotICAvLyAoYikgTG9nIHJlY29yZCBjb250YWluaW5nIEYgaXMgd3JpdHRlbiB0byBNQU5J
RkVTVCBmaWxlLCBidXQgU3luYygpIGZhaWxzCi0gIC8vIChjKSBHQyBkZWxldGVzIEYKLSAgLy8g
KGQpIEFmdGVyIHJlb3BlbmluZyBEQiwgcmVhZHMgZmFpbCBzaW5jZSBkZWxldGVkIEYgaXMgbmFt
ZWQgaW4gbG9nIHJlY29yZAotCi0gIC8vIFdlIGl0ZXJhdGUgdHdpY2UuICBJbiB0aGUgc2Vjb25k
IGl0ZXJhdGlvbiwgZXZlcnl0aGluZyBpcyB0aGUKLSAgLy8gc2FtZSBleGNlcHQgdGhlIGxvZyBy
ZWNvcmQgbmV2ZXIgbWFrZXMgaXQgdG8gdGhlIE1BTklGRVNUIGZpbGUuCi0gIGZvciAoaW50IGl0
ZXIgPSAwOyBpdGVyIDwgMjsgaXRlcisrKSB7Ci0gICAgcG9ydDo6QXRvbWljUG9pbnRlciogZXJy
b3JfdHlwZSA9IChpdGVyID09IDApCi0gICAgICAgID8gJmVudl8tPm1hbmlmZXN0X3N5bmNfZXJy
b3JfCi0gICAgICAgIDogJmVudl8tPm1hbmlmZXN0X3dyaXRlX2Vycm9yXzsKLQotICAgIC8vIElu
c2VydCBmb289PmJhciBtYXBwaW5nCi0gICAgT3B0aW9ucyBvcHRpb25zID0gQ3VycmVudE9wdGlv
bnMoKTsKLSAgICBvcHRpb25zLmVudiA9IGVudl87Ci0gICAgb3B0aW9ucy5jcmVhdGVfaWZfbWlz
c2luZyA9IHRydWU7Ci0gICAgb3B0aW9ucy5lcnJvcl9pZl9leGlzdHMgPSBmYWxzZTsKLSAgICBE
ZXN0cm95QW5kUmVvcGVuKCZvcHRpb25zKTsKLSAgICBBU1NFUlRfT0soUHV0KCJmb28iLCAiYmFy
IikpOwotICAgIEFTU0VSVF9FUSgiYmFyIiwgR2V0KCJmb28iKSk7Ci0KLSAgICAvLyBNZW10YWJs
ZSBjb21wYWN0aW9uICh3aWxsIHN1Y2NlZWQpCi0gICAgZGJmdWxsKCktPlRFU1RfQ29tcGFjdE1l
bVRhYmxlKCk7Ci0gICAgQVNTRVJUX0VRKCJiYXIiLCBHZXQoImZvbyIpKTsKLSAgICBjb25zdCBp
bnQgbGFzdCA9IGNvbmZpZzo6a01heE1lbUNvbXBhY3RMZXZlbDsKLSAgICBBU1NFUlRfRVEoTnVt
VGFibGVGaWxlc0F0TGV2ZWwobGFzdCksIDEpOyAgIC8vIGZvbz0+YmFyIGlzIG5vdyBpbiBsYXN0
IGxldmVsCi0KLSAgICAvLyBNZXJnaW5nIGNvbXBhY3Rpb24gKHdpbGwgZmFpbCkKLSAgICBlcnJv
cl90eXBlLT5SZWxlYXNlX1N0b3JlKGVudl8pOwotICAgIGRiZnVsbCgpLT5URVNUX0NvbXBhY3RS
YW5nZShsYXN0LCBOVUxMLCBOVUxMKTsgIC8vIFNob3VsZCBmYWlsCi0gICAgQVNTRVJUX0VRKCJi
YXIiLCBHZXQoImZvbyIpKTsKLQotICAgIC8vIFJlY292ZXJ5OiBzaG91bGQgbm90IGxvc2UgZGF0
YQotICAgIGVycm9yX3R5cGUtPlJlbGVhc2VfU3RvcmUoTlVMTCk7Ci0gICAgUmVvcGVuKCZvcHRp
b25zKTsKLSAgICBBU1NFUlRfRVEoImJhciIsIEdldCgiZm9vIikpOwotICB9Ci19Ci0KLVRFU1Qo
REJUZXN0LCBGaWxlc0RlbGV0ZWRBZnRlckNvbXBhY3Rpb24pIHsKLSAgQVNTRVJUX09LKFB1dCgi
Zm9vIiwgInYyIikpOwotICBDb21wYWN0KCJhIiwgInoiKTsKLSAgY29uc3QgaW50IG51bV9maWxl
cyA9IENvdW50RmlsZXMoKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0gICAg
QVNTRVJUX09LKFB1dCgiZm9vIiwgInYyIikpOwotICAgIENvbXBhY3QoImEiLCAieiIpOwotICB9
Ci0gIEFTU0VSVF9FUShDb3VudEZpbGVzKCksIG51bV9maWxlcyk7Ci19Ci0KLVRFU1QoREJUZXN0
LCBCbG9vbUZpbHRlcikgewotICBlbnZfLT5jb3VudF9yYW5kb21fcmVhZHNfID0gdHJ1ZTsKLSAg
T3B0aW9ucyBvcHRpb25zID0gQ3VycmVudE9wdGlvbnMoKTsKLSAgb3B0aW9ucy5lbnYgPSBlbnZf
OwotICBvcHRpb25zLmJsb2NrX2NhY2hlID0gTmV3TFJVQ2FjaGUoMCk7ICAvLyBQcmV2ZW50IGNh
Y2hlIGhpdHMKLSAgb3B0aW9ucy5maWx0ZXJfcG9saWN5ID0gTmV3Qmxvb21GaWx0ZXJQb2xpY3ko
MTApOwotICBSZW9wZW4oJm9wdGlvbnMpOwotCi0gIC8vIFBvcHVsYXRlIG11bHRpcGxlIGxheWVy
cwotICBjb25zdCBpbnQgTiA9IDEwMDAwOwotICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykg
ewotICAgIEFTU0VSVF9PSyhQdXQoS2V5KGkpLCBLZXkoaSkpKTsKLSAgfQotICBDb21wYWN0KCJh
IiwgInoiKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpICs9IDEwMCkgewotICAgIEFTU0VS
VF9PSyhQdXQoS2V5KGkpLCBLZXkoaSkpKTsKLSAgfQotICBkYmZ1bGwoKS0+VEVTVF9Db21wYWN0
TWVtVGFibGUoKTsKLQotICAvLyBQcmV2ZW50IGF1dG8gY29tcGFjdGlvbnMgdHJpZ2dlcmVkIGJ5
IHNlZWtzCi0gIGVudl8tPmRlbGF5X3NzdGFibGVfc3luY18uUmVsZWFzZV9TdG9yZShlbnZfKTsK
LQotICAvLyBMb29rdXAgcHJlc2VudCBrZXlzLiAgU2hvdWxkIHJhcmVseSByZWFkIGZyb20gc21h
bGwgc3N0YWJsZS4KLSAgZW52Xy0+cmFuZG9tX3JlYWRfY291bnRlcl8uUmVzZXQoKTsKLSAgZm9y
IChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKLSAgICBBU1NFUlRfRVEoS2V5KGkpLCBHZXQoS2V5
KGkpKSk7Ci0gIH0KLSAgaW50IHJlYWRzID0gZW52Xy0+cmFuZG9tX3JlYWRfY291bnRlcl8uUmVh
ZCgpOwotICBmcHJpbnRmKHN0ZGVyciwgIiVkIHByZXNlbnQgPT4gJWQgcmVhZHNcbiIsIE4sIHJl
YWRzKTsKLSAgQVNTRVJUX0dFKHJlYWRzLCBOKTsKLSAgQVNTRVJUX0xFKHJlYWRzLCBOICsgMipO
LzEwMCk7Ci0KLSAgLy8gTG9va3VwIHByZXNlbnQga2V5cy4gIFNob3VsZCByYXJlbHkgcmVhZCBm
cm9tIGVpdGhlciBzc3RhYmxlLgotICBlbnZfLT5yYW5kb21fcmVhZF9jb3VudGVyXy5SZXNldCgp
OwotICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewotICAgIEFTU0VSVF9FUSgiTk9UX0ZP
VU5EIiwgR2V0KEtleShpKSArICIubWlzc2luZyIpKTsKLSAgfQotICByZWFkcyA9IGVudl8tPnJh
bmRvbV9yZWFkX2NvdW50ZXJfLlJlYWQoKTsKLSAgZnByaW50ZihzdGRlcnIsICIlZCBtaXNzaW5n
ID0+ICVkIHJlYWRzXG4iLCBOLCByZWFkcyk7Ci0gIEFTU0VSVF9MRShyZWFkcywgMypOLzEwMCk7
Ci0KLSAgZW52Xy0+ZGVsYXlfc3N0YWJsZV9zeW5jXy5SZWxlYXNlX1N0b3JlKE5VTEwpOwotICBD
bG9zZSgpOwotICBkZWxldGUgb3B0aW9ucy5ibG9ja19jYWNoZTsKLSAgZGVsZXRlIG9wdGlvbnMu
ZmlsdGVyX3BvbGljeTsKLX0KLQotLy8gTXVsdGktdGhyZWFkZWQgdGVzdDoKLW5hbWVzcGFjZSB7
Ci0KLXN0YXRpYyBjb25zdCBpbnQga051bVRocmVhZHMgPSA0Owotc3RhdGljIGNvbnN0IGludCBr
VGVzdFNlY29uZHMgPSAxMDsKLXN0YXRpYyBjb25zdCBpbnQga051bUtleXMgPSAxMDAwOwotCi1z
dHJ1Y3QgTVRTdGF0ZSB7Ci0gIERCVGVzdCogdGVzdDsKLSAgcG9ydDo6QXRvbWljUG9pbnRlciBz
dG9wOwotICBwb3J0OjpBdG9taWNQb2ludGVyIGNvdW50ZXJba051bVRocmVhZHNdOwotICBwb3J0
OjpBdG9taWNQb2ludGVyIHRocmVhZF9kb25lW2tOdW1UaHJlYWRzXTsKLX07Ci0KLXN0cnVjdCBN
VFRocmVhZCB7Ci0gIE1UU3RhdGUqIHN0YXRlOwotICBpbnQgaWQ7Ci19OwotCi1zdGF0aWMgdm9p
ZCBNVFRocmVhZEJvZHkodm9pZCogYXJnKSB7Ci0gIE1UVGhyZWFkKiB0ID0gcmVpbnRlcnByZXRf
Y2FzdDxNVFRocmVhZCo+KGFyZyk7Ci0gIGludCBpZCA9IHQtPmlkOwotICBEQiogZGIgPSB0LT5z
dGF0ZS0+dGVzdC0+ZGJfOwotICB1aW50cHRyX3QgY291bnRlciA9IDA7Ci0gIGZwcmludGYoc3Rk
ZXJyLCAiLi4uIHN0YXJ0aW5nIHRocmVhZCAlZFxuIiwgaWQpOwotICBSYW5kb20gcm5kKDEwMDAg
KyBpZCk7Ci0gIHN0ZDo6c3RyaW5nIHZhbHVlOwotICBjaGFyIHZhbGJ1ZlsxNTAwXTsKLSAgd2hp
bGUgKHQtPnN0YXRlLT5zdG9wLkFjcXVpcmVfTG9hZCgpID09IE5VTEwpIHsKLSAgICB0LT5zdGF0
ZS0+Y291bnRlcltpZF0uUmVsZWFzZV9TdG9yZShyZWludGVycHJldF9jYXN0PHZvaWQqPihjb3Vu
dGVyKSk7Ci0KLSAgICBpbnQga2V5ID0gcm5kLlVuaWZvcm0oa051bUtleXMpOwotICAgIGNoYXIg
a2V5YnVmWzIwXTsKLSAgICBzbnByaW50ZihrZXlidWYsIHNpemVvZihrZXlidWYpLCAiJTAxNmQi
LCBrZXkpOwotCi0gICAgaWYgKHJuZC5PbmVJbigyKSkgewotICAgICAgLy8gV3JpdGUgdmFsdWVz
IG9mIHRoZSBmb3JtIDxrZXksIG15IGlkLCBjb3VudGVyPi4KLSAgICAgIC8vIFdlIGFkZCBzb21l
IHBhZGRpbmcgZm9yIGZvcmNlIGNvbXBhY3Rpb25zLgotICAgICAgc25wcmludGYodmFsYnVmLCBz
aXplb2YodmFsYnVmKSwgIiVkLiVkLiUtMTAwMGQiLAotICAgICAgICAgICAgICAga2V5LCBpZCwg
c3RhdGljX2Nhc3Q8aW50Pihjb3VudGVyKSk7Ci0gICAgICBBU1NFUlRfT0soZGItPlB1dChXcml0
ZU9wdGlvbnMoKSwgU2xpY2Uoa2V5YnVmKSwgU2xpY2UodmFsYnVmKSkpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAvLyBSZWFkIGEgdmFsdWUgYW5kIHZlcmlmeSB0aGF0IGl0IG1hdGNoZXMgdGhlIHBh
dHRlcm4gd3JpdHRlbiBhYm92ZS4KLSAgICAgIFN0YXR1cyBzID0gZGItPkdldChSZWFkT3B0aW9u
cygpLCBTbGljZShrZXlidWYpLCAmdmFsdWUpOwotICAgICAgaWYgKHMuSXNOb3RGb3VuZCgpKSB7
Ci0gICAgICAgIC8vIEtleSBoYXMgbm90IHlldCBiZWVuIHdyaXR0ZW4KLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIHdyaXRlciB0aHJlYWQgY291bnRlciBpcyA+PSB0
aGUgY291bnRlciBpbiB0aGUgdmFsdWUKLSAgICAgICAgQVNTRVJUX09LKHMpOwotICAgICAgICBp
bnQgaywgdywgYzsKLSAgICAgICAgQVNTRVJUX0VRKDMsIHNzY2FuZih2YWx1ZS5jX3N0cigpLCAi
JWQuJWQuJWQiLCAmaywgJncsICZjKSkgPDwgdmFsdWU7Ci0gICAgICAgIEFTU0VSVF9FUShrLCBr
ZXkpOwotICAgICAgICBBU1NFUlRfR0UodywgMCk7Ci0gICAgICAgIEFTU0VSVF9MVCh3LCBrTnVt
VGhyZWFkcyk7Ci0gICAgICAgIEFTU0VSVF9MRShjLCByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4oCi0gICAgICAgICAgICB0LT5zdGF0ZS0+Y291bnRlclt3XS5BY3F1aXJlX0xvYWQoKSkpOwot
ICAgICAgfQotICAgIH0KLSAgICBjb3VudGVyKys7Ci0gIH0KLSAgdC0+c3RhdGUtPnRocmVhZF9k
b25lW2lkXS5SZWxlYXNlX1N0b3JlKHQpOwotICBmcHJpbnRmKHN0ZGVyciwgIi4uLiBzdG9wcGlu
ZyB0aHJlYWQgJWQgYWZ0ZXIgJWQgb3BzXG4iLCBpZCwgaW50KGNvdW50ZXIpKTsKLX0KLQotfSAg
Ly8gbmFtZXNwYWNlCi0KLVRFU1QoREJUZXN0LCBNdWx0aVRocmVhZGVkKSB7Ci0gIGRvIHsKLSAg
ICAvLyBJbml0aWFsaXplIHN0YXRlCi0gICAgTVRTdGF0ZSBtdDsKLSAgICBtdC50ZXN0ID0gdGhp
czsKLSAgICBtdC5zdG9wLlJlbGVhc2VfU3RvcmUoMCk7Ci0gICAgZm9yIChpbnQgaWQgPSAwOyBp
ZCA8IGtOdW1UaHJlYWRzOyBpZCsrKSB7Ci0gICAgICBtdC5jb3VudGVyW2lkXS5SZWxlYXNlX1N0
b3JlKDApOwotICAgICAgbXQudGhyZWFkX2RvbmVbaWRdLlJlbGVhc2VfU3RvcmUoMCk7Ci0gICAg
fQotCi0gICAgLy8gU3RhcnQgdGhyZWFkcwotICAgIE1UVGhyZWFkIHRocmVhZFtrTnVtVGhyZWFk
c107Ci0gICAgZm9yIChpbnQgaWQgPSAwOyBpZCA8IGtOdW1UaHJlYWRzOyBpZCsrKSB7Ci0gICAg
ICB0aHJlYWRbaWRdLnN0YXRlID0gJm10OwotICAgICAgdGhyZWFkW2lkXS5pZCA9IGlkOwotICAg
ICAgZW52Xy0+U3RhcnRUaHJlYWQoTVRUaHJlYWRCb2R5LCAmdGhyZWFkW2lkXSk7Ci0gICAgfQot
Ci0gICAgLy8gTGV0IHRoZW0gcnVuIGZvciBhIHdoaWxlCi0gICAgZW52Xy0+U2xlZXBGb3JNaWNy
b3NlY29uZHMoa1Rlc3RTZWNvbmRzICogMTAwMDAwMCk7Ci0KLSAgICAvLyBTdG9wIHRoZSB0aHJl
YWRzIGFuZCB3YWl0IGZvciB0aGVtIHRvIGZpbmlzaAotICAgIG10LnN0b3AuUmVsZWFzZV9TdG9y
ZSgmbXQpOwotICAgIGZvciAoaW50IGlkID0gMDsgaWQgPCBrTnVtVGhyZWFkczsgaWQrKykgewot
ICAgICAgd2hpbGUgKG10LnRocmVhZF9kb25lW2lkXS5BY3F1aXJlX0xvYWQoKSA9PSBOVUxMKSB7
Ci0gICAgICAgIGVudl8tPlNsZWVwRm9yTWljcm9zZWNvbmRzKDEwMDAwMCk7Ci0gICAgICB9Ci0g
ICAgfQotICB9IHdoaWxlIChDaGFuZ2VPcHRpb25zKCkpOwotfQotCi1uYW1lc3BhY2UgewotdHlw
ZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IEtWTWFwOwotfQotCi1jbGFz
cyBNb2RlbERCOiBwdWJsaWMgREIgewotIHB1YmxpYzoKLSAgY2xhc3MgTW9kZWxTbmFwc2hvdCA6
IHB1YmxpYyBTbmFwc2hvdCB7Ci0gICBwdWJsaWM6Ci0gICAgS1ZNYXAgbWFwXzsKLSAgfTsKLQot
ICBleHBsaWNpdCBNb2RlbERCKGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpOiBvcHRpb25zXyhvcHRp
b25zKSB7IH0KLSAgfk1vZGVsREIoKSB7IH0KLSAgdmlydHVhbCBTdGF0dXMgUHV0KGNvbnN0IFdy
aXRlT3B0aW9ucyYgbywgY29uc3QgU2xpY2UmIGssIGNvbnN0IFNsaWNlJiB2KSB7Ci0gICAgcmV0
dXJuIERCOjpQdXQobywgaywgdik7Ci0gIH0KLSAgdmlydHVhbCBTdGF0dXMgRGVsZXRlKGNvbnN0
IFdyaXRlT3B0aW9ucyYgbywgY29uc3QgU2xpY2UmIGtleSkgewotICAgIHJldHVybiBEQjo6RGVs
ZXRlKG8sIGtleSk7Ci0gIH0KLSAgdmlydHVhbCBTdGF0dXMgR2V0KGNvbnN0IFJlYWRPcHRpb25z
JiBvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2xpY2UmIGtleSwgc3RkOjpz
dHJpbmcqIHZhbHVlKSB7Ci0gICAgYXNzZXJ0KGZhbHNlKTsgICAgICAvLyBOb3QgaW1wbGVtZW50
ZWQKLSAgICByZXR1cm4gU3RhdHVzOjpOb3RGb3VuZChrZXkpOwotICB9Ci0gIHZpcnR1YWwgSXRl
cmF0b3IqIE5ld0l0ZXJhdG9yKGNvbnN0IFJlYWRPcHRpb25zJiBvcHRpb25zKSB7Ci0gICAgaWYg
KG9wdGlvbnMuc25hcHNob3QgPT0gTlVMTCkgewotICAgICAgS1ZNYXAqIHNhdmVkID0gbmV3IEtW
TWFwOwotICAgICAgKnNhdmVkID0gbWFwXzsKLSAgICAgIHJldHVybiBuZXcgTW9kZWxJdGVyKHNh
dmVkLCB0cnVlKTsKLSAgICB9IGVsc2UgewotICAgICAgY29uc3QgS1ZNYXAqIHNuYXBzaG90X3N0
YXRlID0KLSAgICAgICAgICAmKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTW9kZWxTbmFwc2hvdCo+
KG9wdGlvbnMuc25hcHNob3QpLT5tYXBfKTsKLSAgICAgIHJldHVybiBuZXcgTW9kZWxJdGVyKHNu
YXBzaG90X3N0YXRlLCBmYWxzZSk7Ci0gICAgfQotICB9Ci0gIHZpcnR1YWwgY29uc3QgU25hcHNo
b3QqIEdldFNuYXBzaG90KCkgewotICAgIE1vZGVsU25hcHNob3QqIHNuYXBzaG90ID0gbmV3IE1v
ZGVsU25hcHNob3Q7Ci0gICAgc25hcHNob3QtPm1hcF8gPSBtYXBfOwotICAgIHJldHVybiBzbmFw
c2hvdDsKLSAgfQotCi0gIHZpcnR1YWwgdm9pZCBSZWxlYXNlU25hcHNob3QoY29uc3QgU25hcHNo
b3QqIHNuYXBzaG90KSB7Ci0gICAgZGVsZXRlIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTW9kZWxT
bmFwc2hvdCo+KHNuYXBzaG90KTsKLSAgfQotICB2aXJ0dWFsIFN0YXR1cyBXcml0ZShjb25zdCBX
cml0ZU9wdGlvbnMmIG9wdGlvbnMsIFdyaXRlQmF0Y2gqIGJhdGNoKSB7Ci0gICAgY2xhc3MgSGFu
ZGxlciA6IHB1YmxpYyBXcml0ZUJhdGNoOjpIYW5kbGVyIHsKLSAgICAgcHVibGljOgotICAgICAg
S1ZNYXAqIG1hcF87Ci0gICAgICB2aXJ0dWFsIHZvaWQgUHV0KGNvbnN0IFNsaWNlJiBrZXksIGNv
bnN0IFNsaWNlJiB2YWx1ZSkgewotICAgICAgICAoKm1hcF8pW2tleS5Ub1N0cmluZygpXSA9IHZh
bHVlLlRvU3RyaW5nKCk7Ci0gICAgICB9Ci0gICAgICB2aXJ0dWFsIHZvaWQgRGVsZXRlKGNvbnN0
IFNsaWNlJiBrZXkpIHsKLSAgICAgICAgbWFwXy0+ZXJhc2Uoa2V5LlRvU3RyaW5nKCkpOwotICAg
ICAgfQotICAgIH07Ci0gICAgSGFuZGxlciBoYW5kbGVyOwotICAgIGhhbmRsZXIubWFwXyA9ICZt
YXBfOwotICAgIHJldHVybiBiYXRjaC0+SXRlcmF0ZSgmaGFuZGxlcik7Ci0gIH0KLQotICB2aXJ0
dWFsIGJvb2wgR2V0UHJvcGVydHkoY29uc3QgU2xpY2UmIHByb3BlcnR5LCBzdGQ6OnN0cmluZyog
dmFsdWUpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgdmlydHVhbCB2b2lkIEdldEFwcHJv
eGltYXRlU2l6ZXMoY29uc3QgUmFuZ2UqIHIsIGludCBuLCB1aW50NjRfdCogc2l6ZXMpIHsKLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgc2l6ZXNbaV0gPSAwOwotICAg
IH0KLSAgfQotICB2aXJ0dWFsIHZvaWQgQ29tcGFjdFJhbmdlKGNvbnN0IFNsaWNlKiBzdGFydCwg
Y29uc3QgU2xpY2UqIGVuZCkgewotICB9Ci0KLSBwcml2YXRlOgotICBjbGFzcyBNb2RlbEl0ZXI6
IHB1YmxpYyBJdGVyYXRvciB7Ci0gICBwdWJsaWM6Ci0gICAgTW9kZWxJdGVyKGNvbnN0IEtWTWFw
KiBtYXAsIGJvb2wgb3duZWQpCi0gICAgICAgIDogbWFwXyhtYXApLCBvd25lZF8ob3duZWQpLCBp
dGVyXyhtYXBfLT5lbmQoKSkgewotICAgIH0KLSAgICB+TW9kZWxJdGVyKCkgewotICAgICAgaWYg
KG93bmVkXykgZGVsZXRlIG1hcF87Ci0gICAgfQotICAgIHZpcnR1YWwgYm9vbCBWYWxpZCgpIGNv
bnN0IHsgcmV0dXJuIGl0ZXJfICE9IG1hcF8tPmVuZCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIFNl
ZWtUb0ZpcnN0KCkgeyBpdGVyXyA9IG1hcF8tPmJlZ2luKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
U2Vla1RvTGFzdCgpIHsKLSAgICAgIGlmIChtYXBfLT5lbXB0eSgpKSB7Ci0gICAgICAgIGl0ZXJf
ID0gbWFwXy0+ZW5kKCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpdGVyXyA9IG1hcF8tPmZp
bmQobWFwXy0+cmJlZ2luKCktPmZpcnN0KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgdmlydHVhbCB2
b2lkIFNlZWsoY29uc3QgU2xpY2UmIGspIHsKLSAgICAgIGl0ZXJfID0gbWFwXy0+bG93ZXJfYm91
bmQoay5Ub1N0cmluZygpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIE5leHQoKSB7ICsraXRl
cl87IH0KLSAgICB2aXJ0dWFsIHZvaWQgUHJldigpIHsgLS1pdGVyXzsgfQotICAgIHZpcnR1YWwg
U2xpY2Uga2V5KCkgY29uc3QgeyByZXR1cm4gaXRlcl8tPmZpcnN0OyB9Ci0gICAgdmlydHVhbCBT
bGljZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJfLT5zZWNvbmQ7IH0KLSAgICB2aXJ0dWFs
IFN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBTdGF0dXM6Ok9LKCk7IH0KLSAgIHByaXZh
dGU6Ci0gICAgY29uc3QgS1ZNYXAqIGNvbnN0IG1hcF87Ci0gICAgY29uc3QgYm9vbCBvd25lZF87
ICAvLyBEbyB3ZSBvd24gbWFwXwotICAgIEtWTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyXzsKLSAg
fTsKLSAgY29uc3QgT3B0aW9ucyBvcHRpb25zXzsKLSAgS1ZNYXAgbWFwXzsKLX07Ci0KLXN0YXRp
YyBzdGQ6OnN0cmluZyBSYW5kb21LZXkoUmFuZG9tKiBybmQpIHsKLSAgaW50IGxlbiA9IChybmQt
Pk9uZUluKDMpCi0gICAgICAgICAgICAgPyAxICAgICAgICAgICAgICAgIC8vIFNob3J0IHNvbWV0
aW1lcyB0byBlbmNvdXJhZ2UgY29sbGlzaW9ucwotICAgICAgICAgICAgIDogKHJuZC0+T25lSW4o
MTAwKSA/IHJuZC0+U2tld2VkKDEwKSA6IHJuZC0+VW5pZm9ybSgxMCkpKTsKLSAgcmV0dXJuIHRl
c3Q6OlJhbmRvbUtleShybmQsIGxlbik7Ci19Ci0KLXN0YXRpYyBib29sIENvbXBhcmVJdGVyYXRv
cnMoaW50IHN0ZXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCKiBtb2RlbCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgREIqIGRiLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTbmFwc2hvdCogbW9kZWxfc25hcCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU25hcHNob3QqIGRiX3NuYXApIHsKLSAgUmVhZE9wdGlvbnMgb3B0aW9u
czsKLSAgb3B0aW9ucy5zbmFwc2hvdCA9IG1vZGVsX3NuYXA7Ci0gIEl0ZXJhdG9yKiBtaXRlciA9
IG1vZGVsLT5OZXdJdGVyYXRvcihvcHRpb25zKTsKLSAgb3B0aW9ucy5zbmFwc2hvdCA9IGRiX3Nu
YXA7Ci0gIEl0ZXJhdG9yKiBkYml0ZXIgPSBkYi0+TmV3SXRlcmF0b3Iob3B0aW9ucyk7Ci0gIGJv
b2wgb2sgPSB0cnVlOwotICBpbnQgY291bnQgPSAwOwotICBmb3IgKG1pdGVyLT5TZWVrVG9GaXJz
dCgpLCBkYml0ZXItPlNlZWtUb0ZpcnN0KCk7Ci0gICAgICAgb2sgJiYgbWl0ZXItPlZhbGlkKCkg
JiYgZGJpdGVyLT5WYWxpZCgpOwotICAgICAgIG1pdGVyLT5OZXh0KCksIGRiaXRlci0+TmV4dCgp
KSB7Ci0gICAgY291bnQrKzsKLSAgICBpZiAobWl0ZXItPmtleSgpLmNvbXBhcmUoZGJpdGVyLT5r
ZXkoKSkgIT0gMCkgewotICAgICAgZnByaW50ZihzdGRlcnIsICJzdGVwICVkOiBLZXkgbWlzbWF0
Y2g6ICclcycgdnMuICclcydcbiIsCi0gICAgICAgICAgICAgIHN0ZXAsCi0gICAgICAgICAgICAg
IEVzY2FwZVN0cmluZyhtaXRlci0+a2V5KCkpLmNfc3RyKCksCi0gICAgICAgICAgICAgIEVzY2Fw
ZVN0cmluZyhkYml0ZXItPmtleSgpKS5jX3N0cigpKTsKLSAgICAgIG9rID0gZmFsc2U7Ci0gICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAobWl0ZXItPnZhbHVlKCkuY29tcGFyZShkYml0ZXIt
PnZhbHVlKCkpICE9IDApIHsKLSAgICAgIGZwcmludGYoc3RkZXJyLCAic3RlcCAlZDogVmFsdWUg
bWlzbWF0Y2ggZm9yIGtleSAnJXMnOiAnJXMnIHZzLiAnJXMnXG4iLAotICAgICAgICAgICAgICBz
dGVwLAotICAgICAgICAgICAgICBFc2NhcGVTdHJpbmcobWl0ZXItPmtleSgpKS5jX3N0cigpLAot
ICAgICAgICAgICAgICBFc2NhcGVTdHJpbmcobWl0ZXItPnZhbHVlKCkpLmNfc3RyKCksCi0gICAg
ICAgICAgICAgIEVzY2FwZVN0cmluZyhtaXRlci0+dmFsdWUoKSkuY19zdHIoKSk7Ci0gICAgICBv
ayA9IGZhbHNlOwotICAgIH0KLSAgfQotCi0gIGlmIChvaykgewotICAgIGlmIChtaXRlci0+VmFs
aWQoKSAhPSBkYml0ZXItPlZhbGlkKCkpIHsKLSAgICAgIGZwcmludGYoc3RkZXJyLCAic3RlcCAl
ZDogTWlzbWF0Y2ggYXQgZW5kIG9mIGl0ZXJhdG9yczogJWQgdnMuICVkXG4iLAotICAgICAgICAg
ICAgICBzdGVwLCBtaXRlci0+VmFsaWQoKSwgZGJpdGVyLT5WYWxpZCgpKTsKLSAgICAgIG9rID0g
ZmFsc2U7Ci0gICAgfQotICB9Ci0gIGZwcmludGYoc3RkZXJyLCAiJWQgZW50cmllcyBjb21wYXJl
ZDogb2s9JWRcbiIsIGNvdW50LCBvayk7Ci0gIGRlbGV0ZSBtaXRlcjsKLSAgZGVsZXRlIGRiaXRl
cjsKLSAgcmV0dXJuIG9rOwotfQotCi1URVNUKERCVGVzdCwgUmFuZG9taXplZCkgewotICBSYW5k
b20gcm5kKHRlc3Q6OlJhbmRvbVNlZWQoKSk7Ci0gIGRvIHsKLSAgICBNb2RlbERCIG1vZGVsKEN1
cnJlbnRPcHRpb25zKCkpOwotICAgIGNvbnN0IGludCBOID0gMTAwMDA7Ci0gICAgY29uc3QgU25h
cHNob3QqIG1vZGVsX3NuYXAgPSBOVUxMOwotICAgIGNvbnN0IFNuYXBzaG90KiBkYl9zbmFwID0g
TlVMTDsKLSAgICBzdGQ6OnN0cmluZyBrLCB2OwotICAgIGZvciAoaW50IHN0ZXAgPSAwOyBzdGVw
IDwgTjsgc3RlcCsrKSB7Ci0gICAgICBpZiAoc3RlcCAlIDEwMCA9PSAwKSB7Ci0gICAgICAgIGZw
cmludGYoc3RkZXJyLCAiU3RlcCAlZCBvZiAlZFxuIiwgc3RlcCwgTik7Ci0gICAgICB9Ci0gICAg
ICAvLyBUT0RPKHNhbmpheSk6IFRlc3QgR2V0KCkgd29ya3MKLSAgICAgIGludCBwID0gcm5kLlVu
aWZvcm0oMTAwKTsKLSAgICAgIGlmIChwIDwgNDUpIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gUHV0Ci0gICAgICAgIGsgPSBSYW5kb21LZXkoJnJuZCk7Ci0gICAgICAgIHYgPSBS
YW5kb21TdHJpbmcoJnJuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBybmQuT25lSW4oMjAp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgPyAxMDAgKyBybmQuVW5pZm9ybSgxMDApCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgOiBybmQuVW5pZm9ybSg4KSk7Ci0gICAgICAgIEFTU0VSVF9P
Syhtb2RlbC5QdXQoV3JpdGVPcHRpb25zKCksIGssIHYpKTsKLSAgICAgICAgQVNTRVJUX09LKGRi
Xy0+UHV0KFdyaXRlT3B0aW9ucygpLCBrLCB2KSk7Ci0KLSAgICAgIH0gZWxzZSBpZiAocCA8IDkw
KSB7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlCi0gICAgICAgIGsgPSBSYW5kb21L
ZXkoJnJuZCk7Ci0gICAgICAgIEFTU0VSVF9PSyhtb2RlbC5EZWxldGUoV3JpdGVPcHRpb25zKCks
IGspKTsKLSAgICAgICAgQVNTRVJUX09LKGRiXy0+RGVsZXRlKFdyaXRlT3B0aW9ucygpLCBrKSk7
Ci0KLQotICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBNdWx0aS1lbGVtZW50IGJhdGNoCi0gICAgICAgIFdyaXRlQmF0Y2ggYjsKLSAgICAgICAgY29u
c3QgaW50IG51bSA9IHJuZC5Vbmlmb3JtKDgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG51bTsgaSsrKSB7Ci0gICAgICAgICAgaWYgKGkgPT0gMCB8fCAhcm5kLk9uZUluKDEwKSkgewot
ICAgICAgICAgICAgayA9IFJhbmRvbUtleSgmcm5kKTsKLSAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgLy8gUGVyaW9kaWNhbGx5IHJlLXVzZSB0aGUgc2FtZSBrZXkgZnJvbSB0aGUgcHJl
dmlvdXMgaXRlciwgc28KLSAgICAgICAgICAgIC8vIHdlIGhhdmUgbXVsdGlwbGUgZW50cmllcyBp
biB0aGUgd3JpdGUgYmF0Y2ggZm9yIHRoZSBzYW1lIGtleQotICAgICAgICAgIH0KLSAgICAgICAg
ICBpZiAocm5kLk9uZUluKDIpKSB7Ci0gICAgICAgICAgICB2ID0gUmFuZG9tU3RyaW5nKCZybmQs
IHJuZC5Vbmlmb3JtKDEwKSk7Ci0gICAgICAgICAgICBiLlB1dChrLCB2KTsKLSAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgYi5EZWxldGUoayk7Ci0gICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIEFTU0VSVF9PSyhtb2RlbC5Xcml0ZShXcml0ZU9wdGlvbnMoKSwgJmIpKTsKLSAg
ICAgICAgQVNTRVJUX09LKGRiXy0+V3JpdGUoV3JpdGVPcHRpb25zKCksICZiKSk7Ci0gICAgICB9
Ci0KLSAgICAgIGlmICgoc3RlcCAlIDEwMCkgPT0gMCkgewotICAgICAgICBBU1NFUlRfVFJVRShD
b21wYXJlSXRlcmF0b3JzKHN0ZXAsICZtb2RlbCwgZGJfLCBOVUxMLCBOVUxMKSk7Ci0gICAgICAg
IEFTU0VSVF9UUlVFKENvbXBhcmVJdGVyYXRvcnMoc3RlcCwgJm1vZGVsLCBkYl8sIG1vZGVsX3Nu
YXAsIGRiX3NuYXApKTsKLSAgICAgICAgLy8gU2F2ZSBhIHNuYXBzaG90IGZyb20gZWFjaCBEQiB0
aGlzIHRpbWUgdGhhdCB3ZSdsbCB1c2UgbmV4dAotICAgICAgICAvLyB0aW1lIHdlIGNvbXBhcmUg
dGhpbmdzLCB0byBtYWtlIHN1cmUgdGhlIGN1cnJlbnQgc3RhdGUgaXMKLSAgICAgICAgLy8gcHJl
c2VydmVkIHdpdGggdGhlIHNuYXBzaG90Ci0gICAgICAgIGlmIChtb2RlbF9zbmFwICE9IE5VTEwp
IG1vZGVsLlJlbGVhc2VTbmFwc2hvdChtb2RlbF9zbmFwKTsKLSAgICAgICAgaWYgKGRiX3NuYXAg
IT0gTlVMTCkgZGJfLT5SZWxlYXNlU25hcHNob3QoZGJfc25hcCk7Ci0KLSAgICAgICAgUmVvcGVu
KCk7Ci0gICAgICAgIEFTU0VSVF9UUlVFKENvbXBhcmVJdGVyYXRvcnMoc3RlcCwgJm1vZGVsLCBk
Yl8sIE5VTEwsIE5VTEwpKTsKLQotICAgICAgICBtb2RlbF9zbmFwID0gbW9kZWwuR2V0U25hcHNo
b3QoKTsKLSAgICAgICAgZGJfc25hcCA9IGRiXy0+R2V0U25hcHNob3QoKTsKLSAgICAgIH0KLSAg
ICB9Ci0gICAgaWYgKG1vZGVsX3NuYXAgIT0gTlVMTCkgbW9kZWwuUmVsZWFzZVNuYXBzaG90KG1v
ZGVsX3NuYXApOwotICAgIGlmIChkYl9zbmFwICE9IE5VTEwpIGRiXy0+UmVsZWFzZVNuYXBzaG90
KGRiX3NuYXApOwotICB9IHdoaWxlIChDaGFuZ2VPcHRpb25zKCkpOwotfQotCi1zdGQ6OnN0cmlu
ZyBNYWtlS2V5KHVuc2lnbmVkIGludCBudW0pIHsKLSAgY2hhciBidWZbMzBdOwotICBzbnByaW50
ZihidWYsIHNpemVvZihidWYpLCAiJTAxNnUiLCBudW0pOwotICByZXR1cm4gc3RkOjpzdHJpbmco
YnVmKTsKLX0KLQotdm9pZCBCTV9Mb2dBbmRBcHBseShpbnQgaXRlcnMsIGludCBudW1fYmFzZV9m
aWxlcykgewotICBzdGQ6OnN0cmluZyBkYm5hbWUgPSB0ZXN0OjpUbXBEaXIoKSArICIvbGV2ZWxk
Yl90ZXN0X2JlbmNobWFyayI7Ci0gIERlc3Ryb3lEQihkYm5hbWUsIE9wdGlvbnMoKSk7Ci0KLSAg
REIqIGRiID0gTlVMTDsKLSAgT3B0aW9ucyBvcHRzOwotICBvcHRzLmNyZWF0ZV9pZl9taXNzaW5n
ID0gdHJ1ZTsKLSAgU3RhdHVzIHMgPSBEQjo6T3BlbihvcHRzLCBkYm5hbWUsICZkYik7Ci0gIEFT
U0VSVF9PSyhzKTsKLSAgQVNTRVJUX1RSVUUoZGIgIT0gTlVMTCk7Ci0KLSAgZGVsZXRlIGRiOwot
ICBkYiA9IE5VTEw7Ci0KLSAgRW52KiBlbnYgPSBFbnY6OkRlZmF1bHQoKTsKLQotICBwb3J0OjpN
dXRleCBtdTsKLSAgTXV0ZXhMb2NrIGwoJm11KTsKLQotICBJbnRlcm5hbEtleUNvbXBhcmF0b3Ig
Y21wKEJ5dGV3aXNlQ29tcGFyYXRvcigpKTsKLSAgT3B0aW9ucyBvcHRpb25zOwotICBWZXJzaW9u
U2V0IHZzZXQoZGJuYW1lLCAmb3B0aW9ucywgTlVMTCwgJmNtcCk7Ci0gIEFTU0VSVF9PSyh2c2V0
LlJlY292ZXIoKSk7Ci0gIFZlcnNpb25FZGl0IHZiYXNlOwotICB1aW50NjRfdCBmbnVtID0gMTsK
LSAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fYmFzZV9maWxlczsgaSsrKSB7Ci0gICAgSW50ZXJu
YWxLZXkgc3RhcnQoTWFrZUtleSgyKmZudW0pLCAxLCBrVHlwZVZhbHVlKTsKLSAgICBJbnRlcm5h
bEtleSBsaW1pdChNYWtlS2V5KDIqZm51bSsxKSwgMSwga1R5cGVEZWxldGlvbik7Ci0gICAgdmJh
c2UuQWRkRmlsZSgyLCBmbnVtKyssIDEgLyogZmlsZSBzaXplICovLCBzdGFydCwgbGltaXQpOwot
ICB9Ci0gIEFTU0VSVF9PSyh2c2V0LkxvZ0FuZEFwcGx5KCZ2YmFzZSwgJm11KSk7Ci0KLSAgdWlu
dDY0X3Qgc3RhcnRfbWljcm9zID0gZW52LT5Ob3dNaWNyb3MoKTsKLQotICBmb3IgKGludCBpID0g
MDsgaSA8IGl0ZXJzOyBpKyspIHsKLSAgICBWZXJzaW9uRWRpdCB2ZWRpdDsKLSAgICB2ZWRpdC5E
ZWxldGVGaWxlKDIsIGZudW0pOwotICAgIEludGVybmFsS2V5IHN0YXJ0KE1ha2VLZXkoMipmbnVt
KSwgMSwga1R5cGVWYWx1ZSk7Ci0gICAgSW50ZXJuYWxLZXkgbGltaXQoTWFrZUtleSgyKmZudW0r
MSksIDEsIGtUeXBlRGVsZXRpb24pOwotICAgIHZlZGl0LkFkZEZpbGUoMiwgZm51bSsrLCAxIC8q
IGZpbGUgc2l6ZSAqLywgc3RhcnQsIGxpbWl0KTsKLSAgICB2c2V0LkxvZ0FuZEFwcGx5KCZ2ZWRp
dCwgJm11KTsKLSAgfQotICB1aW50NjRfdCBzdG9wX21pY3JvcyA9IGVudi0+Tm93TWljcm9zKCk7
Ci0gIHVuc2lnbmVkIGludCB1cyA9IHN0b3BfbWljcm9zIC0gc3RhcnRfbWljcm9zOwotICBjaGFy
IGJ1ZlsxNl07Ci0gIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIG51bV9iYXNlX2Zp
bGVzKTsKLSAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgIkJNX0xvZ0FuZEFwcGx5LyUtNnMg
ICAlOGQgaXRlcnMgOiAlOXUgdXMgKCU3LjBmIHVzIC8gaXRlcilcbiIsCi0gICAgICAgICAgYnVm
LCBpdGVycywgdXMsICgoZmxvYXQpdXMpIC8gaXRlcnMpOwotfQotCi19ICAvLyBuYW1lc3BhY2Ug
bGV2ZWxkYgotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKLSAgaWYgKGFyZ2Mg
PiAxICYmIHN0ZDo6c3RyaW5nKGFyZ3ZbMV0pID09ICItLWJlbmNobWFyayIpIHsKLSAgICBsZXZl
bGRiOjpCTV9Mb2dBbmRBcHBseSgxMDAwLCAxKTsKLSAgICBsZXZlbGRiOjpCTV9Mb2dBbmRBcHBs
eSgxMDAwLCAxMDApOwotICAgIGxldmVsZGI6OkJNX0xvZ0FuZEFwcGx5KDEwMDAsIDEwMDAwKTsK
LSAgICBsZXZlbGRiOjpCTV9Mb2dBbmRBcHBseSgxMDAsIDEwMDAwMCk7Ci0gICAgcmV0dXJuIDA7
Ci0gIH0KLQotICByZXR1cm4gbGV2ZWxkYjo6dGVzdDo6UnVuQWxsVGVzdHMoKTsKLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZGJmb3JtYXQuY2MgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2RiZm9ybWF0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAyOGUxMWIzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
ZGIvZGJmb3JtYXQuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotLy8gQ29weXJp
Z2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFV
VEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgotCi0jaW5jbHVkZSA8c3RkaW8u
aD4KLSNpbmNsdWRlICJkYi9kYmZvcm1hdC5oIgotI2luY2x1ZGUgInBvcnQvcG9ydC5oIgotI2lu
Y2x1ZGUgInV0aWwvY29kaW5nLmgiCi0KLW5hbWVzcGFjZSBsZXZlbGRiIHsKLQotc3RhdGljIHVp
bnQ2NF90IFBhY2tTZXF1ZW5jZUFuZFR5cGUodWludDY0X3Qgc2VxLCBWYWx1ZVR5cGUgdCkgewot
ICBhc3NlcnQoc2VxIDw9IGtNYXhTZXF1ZW5jZU51bWJlcik7Ci0gIGFzc2VydCh0IDw9IGtWYWx1
ZVR5cGVGb3JTZWVrKTsKLSAgcmV0dXJuIChzZXEgPDwgOCkgfCB0OwotfQotCi12b2lkIEFwcGVu
ZEludGVybmFsS2V5KHN0ZDo6c3RyaW5nKiByZXN1bHQsIGNvbnN0IFBhcnNlZEludGVybmFsS2V5
JiBrZXkpIHsKLSAgcmVzdWx0LT5hcHBlbmQoa2V5LnVzZXJfa2V5LmRhdGEoKSwga2V5LnVzZXJf
a2V5LnNpemUoKSk7Ci0gIFB1dEZpeGVkNjQocmVzdWx0LCBQYWNrU2VxdWVuY2VBbmRUeXBlKGtl
eS5zZXF1ZW5jZSwga2V5LnR5cGUpKTsKLX0KLQotc3RkOjpzdHJpbmcgUGFyc2VkSW50ZXJuYWxL
ZXk6OkRlYnVnU3RyaW5nKCkgY29uc3QgewotICBjaGFyIGJ1Zls1MF07Ci0gIHNucHJpbnRmKGJ1
Ziwgc2l6ZW9mKGJ1ZiksICInIEAgJWxsdSA6ICVkIiwKLSAgICAgICAgICAgKHVuc2lnbmVkIGxv
bmcgbG9uZykgc2VxdWVuY2UsCi0gICAgICAgICAgIGludCh0eXBlKSk7Ci0gIHN0ZDo6c3RyaW5n
IHJlc3VsdCA9ICInIjsKLSAgcmVzdWx0ICs9IHVzZXJfa2V5LlRvU3RyaW5nKCk7Ci0gIHJlc3Vs
dCArPSBidWY7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0ZDo6c3RyaW5nIEludGVybmFsS2V5
OjpEZWJ1Z1N0cmluZygpIGNvbnN0IHsKLSAgc3RkOjpzdHJpbmcgcmVzdWx0OwotICBQYXJzZWRJ
bnRlcm5hbEtleSBwYXJzZWQ7Ci0gIGlmIChQYXJzZUludGVybmFsS2V5KHJlcF8sICZwYXJzZWQp
KSB7Ci0gICAgcmVzdWx0ID0gcGFyc2VkLkRlYnVnU3RyaW5nKCk7Ci0gIH0gZWxzZSB7Ci0gICAg
cmVzdWx0ID0gIihiYWQpIjsKLSAgICByZXN1bHQuYXBwZW5kKEVzY2FwZVN0cmluZyhyZXBfKSk7
Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotY29uc3QgY2hhciogSW50ZXJuYWxLZXlDb21w
YXJhdG9yOjpOYW1lKCkgY29uc3QgewotICByZXR1cm4gImxldmVsZGIuSW50ZXJuYWxLZXlDb21w
YXJhdG9yIjsKLX0KLQotaW50IEludGVybmFsS2V5Q29tcGFyYXRvcjo6Q29tcGFyZShjb25zdCBT
bGljZSYgYWtleSwgY29uc3QgU2xpY2UmIGJrZXkpIGNvbnN0IHsKLSAgLy8gT3JkZXIgYnk6Ci0g
IC8vICAgIGluY3JlYXNpbmcgdXNlciBrZXkgKGFjY29yZGluZyB0byB1c2VyLXN1cHBsaWVkIGNv
bXBhcmF0b3IpCi0gIC8vICAgIGRlY3JlYXNpbmcgc2VxdWVuY2UgbnVtYmVyCi0gIC8vICAgIGRl
Y3JlYXNpbmcgdHlwZSAodGhvdWdoIHNlcXVlbmNlIyBzaG91bGQgYmUgZW5vdWdoIHRvIGRpc2Ft
YmlndWF0ZSkKLSAgaW50IHIgPSB1c2VyX2NvbXBhcmF0b3JfLT5Db21wYXJlKEV4dHJhY3RVc2Vy
S2V5KGFrZXkpLCBFeHRyYWN0VXNlcktleShia2V5KSk7Ci0gIGlmIChyID09IDApIHsKLSAgICBj
b25zdCB1aW50NjRfdCBhbnVtID0gRGVjb2RlRml4ZWQ2NChha2V5LmRhdGEoKSArIGFrZXkuc2l6
ZSgpIC0gOCk7Ci0gICAgY29uc3QgdWludDY0X3QgYm51bSA9IERlY29kZUZpeGVkNjQoYmtleS5k
YXRhKCkgKyBia2V5LnNpemUoKSAtIDgpOwotICAgIGlmIChhbnVtID4gYm51bSkgewotICAgICAg
ciA9IC0xOwotICAgIH0gZWxzZSBpZiAoYW51bSA8IGJudW0pIHsKLSAgICAgIHIgPSArMTsKLSAg
ICB9Ci0gIH0KLSAgcmV0dXJuIHI7Ci19Ci0KLXZvaWQgSW50ZXJuYWxLZXlDb21wYXJhdG9yOjpG
aW5kU2hvcnRlc3RTZXBhcmF0b3IoCi0gICAgICBzdGQ6OnN0cmluZyogc3RhcnQsCi0gICAgICBj
b25zdCBTbGljZSYgbGltaXQpIGNvbnN0IHsKLSAgLy8gQXR0ZW1wdCB0byBzaG9ydGVuIHRoZSB1
c2VyIHBvcnRpb24gb2YgdGhlIGtleQotICBTbGljZSB1c2VyX3N0YXJ0ID0gRXh0cmFjdFVzZXJL
ZXkoKnN0YXJ0KTsKLSAgU2xpY2UgdXNlcl9saW1pdCA9IEV4dHJhY3RVc2VyS2V5KGxpbWl0KTsK
LSAgc3RkOjpzdHJpbmcgdG1wKHVzZXJfc3RhcnQuZGF0YSgpLCB1c2VyX3N0YXJ0LnNpemUoKSk7
Ci0gIHVzZXJfY29tcGFyYXRvcl8tPkZpbmRTaG9ydGVzdFNlcGFyYXRvcigmdG1wLCB1c2VyX2xp
bWl0KTsKLSAgaWYgKHRtcC5zaXplKCkgPCB1c2VyX3N0YXJ0LnNpemUoKSAmJgotICAgICAgdXNl
cl9jb21wYXJhdG9yXy0+Q29tcGFyZSh1c2VyX3N0YXJ0LCB0bXApIDwgMCkgewotICAgIC8vIFVz
ZXIga2V5IGhhcyBiZWNvbWUgc2hvcnRlciBwaHlzaWNhbGx5LCBidXQgbGFyZ2VyIGxvZ2ljYWxs
eS4KLSAgICAvLyBUYWNrIG9uIHRoZSBlYXJsaWVzdCBwb3NzaWJsZSBudW1iZXIgdG8gdGhlIHNo
b3J0ZW5lZCB1c2VyIGtleS4KLSAgICBQdXRGaXhlZDY0KCZ0bXAsIFBhY2tTZXF1ZW5jZUFuZFR5
cGUoa01heFNlcXVlbmNlTnVtYmVyLGtWYWx1ZVR5cGVGb3JTZWVrKSk7Ci0gICAgYXNzZXJ0KHRo
aXMtPkNvbXBhcmUoKnN0YXJ0LCB0bXApIDwgMCk7Ci0gICAgYXNzZXJ0KHRoaXMtPkNvbXBhcmUo
dG1wLCBsaW1pdCkgPCAwKTsKLSAgICBzdGFydC0+c3dhcCh0bXApOwotICB9Ci19Ci0KLXZvaWQg
SW50ZXJuYWxLZXlDb21wYXJhdG9yOjpGaW5kU2hvcnRTdWNjZXNzb3Ioc3RkOjpzdHJpbmcqIGtl
eSkgY29uc3QgewotICBTbGljZSB1c2VyX2tleSA9IEV4dHJhY3RVc2VyS2V5KCprZXkpOwotICBz
dGQ6OnN0cmluZyB0bXAodXNlcl9rZXkuZGF0YSgpLCB1c2VyX2tleS5zaXplKCkpOwotICB1c2Vy
X2NvbXBhcmF0b3JfLT5GaW5kU2hvcnRTdWNjZXNzb3IoJnRtcCk7Ci0gIGlmICh0bXAuc2l6ZSgp
IDwgdXNlcl9rZXkuc2l6ZSgpICYmCi0gICAgICB1c2VyX2NvbXBhcmF0b3JfLT5Db21wYXJlKHVz
ZXJfa2V5LCB0bXApIDwgMCkgewotICAgIC8vIFVzZXIga2V5IGhhcyBiZWNvbWUgc2hvcnRlciBw
aHlzaWNhbGx5LCBidXQgbGFyZ2VyIGxvZ2ljYWxseS4KLSAgICAvLyBUYWNrIG9uIHRoZSBlYXJs
aWVzdCBwb3NzaWJsZSBudW1iZXIgdG8gdGhlIHNob3J0ZW5lZCB1c2VyIGtleS4KLSAgICBQdXRG
aXhlZDY0KCZ0bXAsIFBhY2tTZXF1ZW5jZUFuZFR5cGUoa01heFNlcXVlbmNlTnVtYmVyLGtWYWx1
ZVR5cGVGb3JTZWVrKSk7Ci0gICAgYXNzZXJ0KHRoaXMtPkNvbXBhcmUoKmtleSwgdG1wKSA8IDAp
OwotICAgIGtleS0+c3dhcCh0bXApOwotICB9Ci19Ci0KLWNvbnN0IGNoYXIqIEludGVybmFsRmls
dGVyUG9saWN5OjpOYW1lKCkgY29uc3QgewotICByZXR1cm4gdXNlcl9wb2xpY3lfLT5OYW1lKCk7
Ci19Ci0KLXZvaWQgSW50ZXJuYWxGaWx0ZXJQb2xpY3k6OkNyZWF0ZUZpbHRlcihjb25zdCBTbGlj
ZSoga2V5cywgaW50IG4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RkOjpzdHJpbmcqIGRzdCkgY29uc3QgewotICAvLyBXZSByZWx5IG9uIHRoZSBmYWN0IHRoYXQg
dGhlIGNvZGUgaW4gdGFibGUuY2MgZG9lcyBub3QgbWluZCB1cwotICAvLyBhZGp1c3Rpbmcga2V5
c1tdLgotICBTbGljZSogbWtleSA9IGNvbnN0X2Nhc3Q8U2xpY2UqPihrZXlzKTsKLSAgZm9yIChp
bnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICBta2V5W2ldID0gRXh0cmFjdFVzZXJLZXkoa2V5
c1tpXSk7Ci0gICAgLy8gVE9ETyhzYW5qYXkpOiBTdXBwcmVzcyBkdXBzPwotICB9Ci0gIHVzZXJf
cG9saWN5Xy0+Q3JlYXRlRmlsdGVyKGtleXMsIG4sIGRzdCk7Ci19Ci0KLWJvb2wgSW50ZXJuYWxG
aWx0ZXJQb2xpY3k6OktleU1heU1hdGNoKGNvbnN0IFNsaWNlJiBrZXksIGNvbnN0IFNsaWNlJiBm
KSBjb25zdCB7Ci0gIHJldHVybiB1c2VyX3BvbGljeV8tPktleU1heU1hdGNoKEV4dHJhY3RVc2Vy
S2V5KGtleSksIGYpOwotfQotCi1Mb29rdXBLZXk6Okxvb2t1cEtleShjb25zdCBTbGljZSYgdXNl
cl9rZXksIFNlcXVlbmNlTnVtYmVyIHMpIHsKLSAgc2l6ZV90IHVzaXplID0gdXNlcl9rZXkuc2l6
ZSgpOwotICBzaXplX3QgbmVlZGVkID0gdXNpemUgKyAxMzsgIC8vIEEgY29uc2VydmF0aXZlIGVz
dGltYXRlCi0gIGNoYXIqIGRzdDsKLSAgaWYgKG5lZWRlZCA8PSBzaXplb2Yoc3BhY2VfKSkgewot
ICAgIGRzdCA9IHNwYWNlXzsKLSAgfSBlbHNlIHsKLSAgICBkc3QgPSBuZXcgY2hhcltuZWVkZWRd
OwotICB9Ci0gIHN0YXJ0XyA9IGRzdDsKLSAgZHN0ID0gRW5jb2RlVmFyaW50MzIoZHN0LCB1c2l6
ZSArIDgpOwotICBrc3RhcnRfID0gZHN0OwotICBtZW1jcHkoZHN0LCB1c2VyX2tleS5kYXRhKCks
IHVzaXplKTsKLSAgZHN0ICs9IHVzaXplOwotICBFbmNvZGVGaXhlZDY0KGRzdCwgUGFja1NlcXVl
bmNlQW5kVHlwZShzLCBrVmFsdWVUeXBlRm9yU2VlaykpOwotICBkc3QgKz0gODsKLSAgZW5kXyA9
IGRzdDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvZGIvZGJmb3JtYXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVs
ZGIvZGIvZGJmb3JtYXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdmNjRkYS4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2RiZm9ybWF0LmgKKysr
IC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBM
ZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFt
ZXMgb2YgY29udHJpYnV0b3JzLgotCi0jaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9EQl9GT1JNQVRf
SF8KLSNkZWZpbmUgU1RPUkFHRV9MRVZFTERCX0RCX0ZPUk1BVF9IXwotCi0jaW5jbHVkZSA8c3Rk
aW8uaD4KLSNpbmNsdWRlICJsZXZlbGRiL2NvbXBhcmF0b3IuaCIKLSNpbmNsdWRlICJsZXZlbGRi
L2RiLmgiCi0jaW5jbHVkZSAibGV2ZWxkYi9maWx0ZXJfcG9saWN5LmgiCi0jaW5jbHVkZSAibGV2
ZWxkYi9zbGljZS5oIgotI2luY2x1ZGUgImxldmVsZGIvdGFibGVfYnVpbGRlci5oIgotI2luY2x1
ZGUgInV0aWwvY29kaW5nLmgiCi0jaW5jbHVkZSAidXRpbC9sb2dnaW5nLmgiCi0KLW5hbWVzcGFj
ZSBsZXZlbGRiIHsKLQotLy8gR3JvdXBpbmcgb2YgY29uc3RhbnRzLiAgV2UgbWF5IHdhbnQgdG8g
bWFrZSBzb21lIG9mIHRoZXNlCi0vLyBwYXJhbWV0ZXJzIHNldCB2aWEgb3B0aW9ucy4KLW5hbWVz
cGFjZSBjb25maWcgewotc3RhdGljIGNvbnN0IGludCBrTnVtTGV2ZWxzID0gNzsKLQotLy8gTGV2
ZWwtMCBjb21wYWN0aW9uIGlzIHN0YXJ0ZWQgd2hlbiB3ZSBoaXQgdGhpcyBtYW55IGZpbGVzLgot
c3RhdGljIGNvbnN0IGludCBrTDBfQ29tcGFjdGlvblRyaWdnZXIgPSA0OwotCi0vLyBTb2Z0IGxp
bWl0IG9uIG51bWJlciBvZiBsZXZlbC0wIGZpbGVzLiAgV2Ugc2xvdyBkb3duIHdyaXRlcyBhdCB0
aGlzIHBvaW50Lgotc3RhdGljIGNvbnN0IGludCBrTDBfU2xvd2Rvd25Xcml0ZXNUcmlnZ2VyID0g
ODsKLQotLy8gTWF4aW11bSBudW1iZXIgb2YgbGV2ZWwtMCBmaWxlcy4gIFdlIHN0b3Agd3JpdGVz
IGF0IHRoaXMgcG9pbnQuCi1zdGF0aWMgY29uc3QgaW50IGtMMF9TdG9wV3JpdGVzVHJpZ2dlciA9
IDEyOwotCi0vLyBNYXhpbXVtIGxldmVsIHRvIHdoaWNoIGEgbmV3IGNvbXBhY3RlZCBtZW10YWJs
ZSBpcyBwdXNoZWQgaWYgaXQKLS8vIGRvZXMgbm90IGNyZWF0ZSBvdmVybGFwLiAgV2UgdHJ5IHRv
IHB1c2ggdG8gbGV2ZWwgMiB0byBhdm9pZCB0aGUKLS8vIHJlbGF0aXZlbHkgZXhwZW5zaXZlIGxl
dmVsIDA9PjEgY29tcGFjdGlvbnMgYW5kIHRvIGF2b2lkIHNvbWUKLS8vIGV4cGVuc2l2ZSBtYW5p
ZmVzdCBmaWxlIG9wZXJhdGlvbnMuICBXZSBkbyBub3QgcHVzaCBhbGwgdGhlIHdheSB0bwotLy8g
dGhlIGxhcmdlc3QgbGV2ZWwgc2luY2UgdGhhdCBjYW4gZ2VuZXJhdGUgYSBsb3Qgb2Ygd2FzdGVk
IGRpc2sKLS8vIHNwYWNlIGlmIHRoZSBzYW1lIGtleSBzcGFjZSBpcyBiZWluZyByZXBlYXRlZGx5
IG92ZXJ3cml0dGVuLgotc3RhdGljIGNvbnN0IGludCBrTWF4TWVtQ29tcGFjdExldmVsID0gMjsK
LQotfSAgLy8gbmFtZXNwYWNlIGNvbmZpZwotCi1jbGFzcyBJbnRlcm5hbEtleTsKLQotLy8gVmFs
dWUgdHlwZXMgZW5jb2RlZCBhcyB0aGUgbGFzdCBjb21wb25lbnQgb2YgaW50ZXJuYWwga2V5cy4K
LS8vIERPIE5PVCBDSEFOR0UgVEhFU0UgRU5VTSBWQUxVRVM6IHRoZXkgYXJlIGVtYmVkZGVkIGlu
IHRoZSBvbi1kaXNrCi0vLyBkYXRhIHN0cnVjdHVyZXMuCi1lbnVtIFZhbHVlVHlwZSB7Ci0gIGtU
eXBlRGVsZXRpb24gPSAweDAsCi0gIGtUeXBlVmFsdWUgPSAweDEKLX07Ci0vLyBrVmFsdWVUeXBl
Rm9yU2VlayBkZWZpbmVzIHRoZSBWYWx1ZVR5cGUgdGhhdCBzaG91bGQgYmUgcGFzc2VkIHdoZW4K
LS8vIGNvbnN0cnVjdGluZyBhIFBhcnNlZEludGVybmFsS2V5IG9iamVjdCBmb3Igc2Vla2luZyB0
byBhIHBhcnRpY3VsYXIKLS8vIHNlcXVlbmNlIG51bWJlciAoc2luY2Ugd2Ugc29ydCBzZXF1ZW5j
ZSBudW1iZXJzIGluIGRlY3JlYXNpbmcgb3JkZXIKLS8vIGFuZCB0aGUgdmFsdWUgdHlwZSBpcyBl
bWJlZGRlZCBhcyB0aGUgbG93IDggYml0cyBpbiB0aGUgc2VxdWVuY2UKLS8vIG51bWJlciBpbiBp
bnRlcm5hbCBrZXlzLCB3ZSBuZWVkIHRvIHVzZSB0aGUgaGlnaGVzdC1udW1iZXJlZAotLy8gVmFs
dWVUeXBlLCBub3QgdGhlIGxvd2VzdCkuCi1zdGF0aWMgY29uc3QgVmFsdWVUeXBlIGtWYWx1ZVR5
cGVGb3JTZWVrID0ga1R5cGVWYWx1ZTsKLQotdHlwZWRlZiB1aW50NjRfdCBTZXF1ZW5jZU51bWJl
cjsKLQotLy8gV2UgbGVhdmUgZWlnaHQgYml0cyBlbXB0eSBhdCB0aGUgYm90dG9tIHNvIGEgdHlw
ZSBhbmQgc2VxdWVuY2UjCi0vLyBjYW4gYmUgcGFja2VkIHRvZ2V0aGVyIGludG8gNjQtYml0cy4K
LXN0YXRpYyBjb25zdCBTZXF1ZW5jZU51bWJlciBrTWF4U2VxdWVuY2VOdW1iZXIgPQotICAgICgo
MHgxdWxsIDw8IDU2KSAtIDEpOwotCi1zdHJ1Y3QgUGFyc2VkSW50ZXJuYWxLZXkgewotICBTbGlj
ZSB1c2VyX2tleTsKLSAgU2VxdWVuY2VOdW1iZXIgc2VxdWVuY2U7Ci0gIFZhbHVlVHlwZSB0eXBl
OwotCi0gIFBhcnNlZEludGVybmFsS2V5KCkgeyB9ICAvLyBJbnRlbnRpb25hbGx5IGxlZnQgdW5p
bml0aWFsaXplZCAoZm9yIHNwZWVkKQotICBQYXJzZWRJbnRlcm5hbEtleShjb25zdCBTbGljZSYg
dSwgY29uc3QgU2VxdWVuY2VOdW1iZXImIHNlcSwgVmFsdWVUeXBlIHQpCi0gICAgICA6IHVzZXJf
a2V5KHUpLCBzZXF1ZW5jZShzZXEpLCB0eXBlKHQpIHsgfQotICBzdGQ6OnN0cmluZyBEZWJ1Z1N0
cmluZygpIGNvbnN0OwotfTsKLQotLy8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGVuY29kaW5n
IG9mICJrZXkiLgotaW5saW5lIHNpemVfdCBJbnRlcm5hbEtleUVuY29kaW5nTGVuZ3RoKGNvbnN0
IFBhcnNlZEludGVybmFsS2V5JiBrZXkpIHsKLSAgcmV0dXJuIGtleS51c2VyX2tleS5zaXplKCkg
KyA4OwotfQotCi0vLyBBcHBlbmQgdGhlIHNlcmlhbGl6YXRpb24gb2YgImtleSIgdG8gKnJlc3Vs
dC4KLWV4dGVybiB2b2lkIEFwcGVuZEludGVybmFsS2V5KHN0ZDo6c3RyaW5nKiByZXN1bHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQYXJzZWRJbnRlcm5hbEtleSYga2V5
KTsKLQotLy8gQXR0ZW1wdCB0byBwYXJzZSBhbiBpbnRlcm5hbCBrZXkgZnJvbSAiaW50ZXJuYWxf
a2V5Ii4gIE9uIHN1Y2Nlc3MsCi0vLyBzdG9yZXMgdGhlIHBhcnNlZCBkYXRhIGluICIqcmVzdWx0
IiwgYW5kIHJldHVybnMgdHJ1ZS4KLS8vCi0vLyBPbiBlcnJvciwgcmV0dXJucyBmYWxzZSwgbGVh
dmVzICIqcmVzdWx0IiBpbiBhbiB1bmRlZmluZWQgc3RhdGUuCi1leHRlcm4gYm9vbCBQYXJzZUlu
dGVybmFsS2V5KGNvbnN0IFNsaWNlJiBpbnRlcm5hbF9rZXksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBhcnNlZEludGVybmFsS2V5KiByZXN1bHQpOwotCi0vLyBSZXR1cm5zIHRoZSB1
c2VyIGtleSBwb3J0aW9uIG9mIGFuIGludGVybmFsIGtleS4KLWlubGluZSBTbGljZSBFeHRyYWN0
VXNlcktleShjb25zdCBTbGljZSYgaW50ZXJuYWxfa2V5KSB7Ci0gIGFzc2VydChpbnRlcm5hbF9r
ZXkuc2l6ZSgpID49IDgpOwotICByZXR1cm4gU2xpY2UoaW50ZXJuYWxfa2V5LmRhdGEoKSwgaW50
ZXJuYWxfa2V5LnNpemUoKSAtIDgpOwotfQotCi1pbmxpbmUgVmFsdWVUeXBlIEV4dHJhY3RWYWx1
ZVR5cGUoY29uc3QgU2xpY2UmIGludGVybmFsX2tleSkgewotICBhc3NlcnQoaW50ZXJuYWxfa2V5
LnNpemUoKSA+PSA4KTsKLSAgY29uc3Qgc2l6ZV90IG4gPSBpbnRlcm5hbF9rZXkuc2l6ZSgpOwot
ICB1aW50NjRfdCBudW0gPSBEZWNvZGVGaXhlZDY0KGludGVybmFsX2tleS5kYXRhKCkgKyBuIC0g
OCk7Ci0gIHVuc2lnbmVkIGNoYXIgYyA9IG51bSAmIDB4ZmY7Ci0gIHJldHVybiBzdGF0aWNfY2Fz
dDxWYWx1ZVR5cGU+KGMpOwotfQotCi0vLyBBIGNvbXBhcmF0b3IgZm9yIGludGVybmFsIGtleXMg
dGhhdCB1c2VzIGEgc3BlY2lmaWVkIGNvbXBhcmF0b3IgZm9yCi0vLyB0aGUgdXNlciBrZXkgcG9y
dGlvbiBhbmQgYnJlYWtzIHRpZXMgYnkgZGVjcmVhc2luZyBzZXF1ZW5jZSBudW1iZXIuCi1jbGFz
cyBJbnRlcm5hbEtleUNvbXBhcmF0b3IgOiBwdWJsaWMgQ29tcGFyYXRvciB7Ci0gcHJpdmF0ZToK
LSAgY29uc3QgQ29tcGFyYXRvciogdXNlcl9jb21wYXJhdG9yXzsKLSBwdWJsaWM6Ci0gIGV4cGxp
Y2l0IEludGVybmFsS2V5Q29tcGFyYXRvcihjb25zdCBDb21wYXJhdG9yKiBjKSA6IHVzZXJfY29t
cGFyYXRvcl8oYykgeyB9Ci0gIHZpcnR1YWwgY29uc3QgY2hhciogTmFtZSgpIGNvbnN0OwotICB2
aXJ0dWFsIGludCBDb21wYXJlKGNvbnN0IFNsaWNlJiBhLCBjb25zdCBTbGljZSYgYikgY29uc3Q7
Ci0gIHZpcnR1YWwgdm9pZCBGaW5kU2hvcnRlc3RTZXBhcmF0b3IoCi0gICAgICBzdGQ6OnN0cmlu
Zyogc3RhcnQsCi0gICAgICBjb25zdCBTbGljZSYgbGltaXQpIGNvbnN0OwotICB2aXJ0dWFsIHZv
aWQgRmluZFNob3J0U3VjY2Vzc29yKHN0ZDo6c3RyaW5nKiBrZXkpIGNvbnN0OwotCi0gIGNvbnN0
IENvbXBhcmF0b3IqIHVzZXJfY29tcGFyYXRvcigpIGNvbnN0IHsgcmV0dXJuIHVzZXJfY29tcGFy
YXRvcl87IH0KLQotICBpbnQgQ29tcGFyZShjb25zdCBJbnRlcm5hbEtleSYgYSwgY29uc3QgSW50
ZXJuYWxLZXkmIGIpIGNvbnN0OwotfTsKLQotLy8gRmlsdGVyIHBvbGljeSB3cmFwcGVyIHRoYXQg
Y29udmVydHMgZnJvbSBpbnRlcm5hbCBrZXlzIHRvIHVzZXIga2V5cwotY2xhc3MgSW50ZXJuYWxG
aWx0ZXJQb2xpY3kgOiBwdWJsaWMgRmlsdGVyUG9saWN5IHsKLSBwcml2YXRlOgotICBjb25zdCBG
aWx0ZXJQb2xpY3kqIGNvbnN0IHVzZXJfcG9saWN5XzsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IElu
dGVybmFsRmlsdGVyUG9saWN5KGNvbnN0IEZpbHRlclBvbGljeSogcCkgOiB1c2VyX3BvbGljeV8o
cCkgeyB9Ci0gIHZpcnR1YWwgY29uc3QgY2hhciogTmFtZSgpIGNvbnN0OwotICB2aXJ0dWFsIHZv
aWQgQ3JlYXRlRmlsdGVyKGNvbnN0IFNsaWNlKiBrZXlzLCBpbnQgbiwgc3RkOjpzdHJpbmcqIGRz
dCkgY29uc3Q7Ci0gIHZpcnR1YWwgYm9vbCBLZXlNYXlNYXRjaChjb25zdCBTbGljZSYga2V5LCBj
b25zdCBTbGljZSYgZmlsdGVyKSBjb25zdDsKLX07Ci0KLS8vIE1vZHVsZXMgaW4gdGhpcyBkaXJl
Y3Rvcnkgc2hvdWxkIGtlZXAgaW50ZXJuYWwga2V5cyB3cmFwcGVkIGluc2lkZQotLy8gdGhlIGZv
bGxvd2luZyBjbGFzcyBpbnN0ZWFkIG9mIHBsYWluIHN0cmluZ3Mgc28gdGhhdCB3ZSBkbyBub3QK
LS8vIGluY29ycmVjdGx5IHVzZSBzdHJpbmcgY29tcGFyaXNvbnMgaW5zdGVhZCBvZiBhbiBJbnRl
cm5hbEtleUNvbXBhcmF0b3IuCi1jbGFzcyBJbnRlcm5hbEtleSB7Ci0gcHJpdmF0ZToKLSAgc3Rk
OjpzdHJpbmcgcmVwXzsKLSBwdWJsaWM6Ci0gIEludGVybmFsS2V5KCkgeyB9ICAgLy8gTGVhdmUg
cmVwXyBhcyBlbXB0eSB0byBpbmRpY2F0ZSBpdCBpcyBpbnZhbGlkCi0gIEludGVybmFsS2V5KGNv
bnN0IFNsaWNlJiB1c2VyX2tleSwgU2VxdWVuY2VOdW1iZXIgcywgVmFsdWVUeXBlIHQpIHsKLSAg
ICBBcHBlbmRJbnRlcm5hbEtleSgmcmVwXywgUGFyc2VkSW50ZXJuYWxLZXkodXNlcl9rZXksIHMs
IHQpKTsKLSAgfQotCi0gIHZvaWQgRGVjb2RlRnJvbShjb25zdCBTbGljZSYgcykgeyByZXBfLmFz
c2lnbihzLmRhdGEoKSwgcy5zaXplKCkpOyB9Ci0gIFNsaWNlIEVuY29kZSgpIGNvbnN0IHsKLSAg
ICBhc3NlcnQoIXJlcF8uZW1wdHkoKSk7Ci0gICAgcmV0dXJuIHJlcF87Ci0gIH0KLQotICBTbGlj
ZSB1c2VyX2tleSgpIGNvbnN0IHsgcmV0dXJuIEV4dHJhY3RVc2VyS2V5KHJlcF8pOyB9Ci0KLSAg
dm9pZCBTZXRGcm9tKGNvbnN0IFBhcnNlZEludGVybmFsS2V5JiBwKSB7Ci0gICAgcmVwXy5jbGVh
cigpOwotICAgIEFwcGVuZEludGVybmFsS2V5KCZyZXBfLCBwKTsKLSAgfQotCi0gIHZvaWQgQ2xl
YXIoKSB7IHJlcF8uY2xlYXIoKTsgfQotCi0gIHN0ZDo6c3RyaW5nIERlYnVnU3RyaW5nKCkgY29u
c3Q7Ci19OwotCi1pbmxpbmUgaW50IEludGVybmFsS2V5Q29tcGFyYXRvcjo6Q29tcGFyZSgKLSAg
ICBjb25zdCBJbnRlcm5hbEtleSYgYSwgY29uc3QgSW50ZXJuYWxLZXkmIGIpIGNvbnN0IHsKLSAg
cmV0dXJuIENvbXBhcmUoYS5FbmNvZGUoKSwgYi5FbmNvZGUoKSk7Ci19Ci0KLWlubGluZSBib29s
IFBhcnNlSW50ZXJuYWxLZXkoY29uc3QgU2xpY2UmIGludGVybmFsX2tleSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUGFyc2VkSW50ZXJuYWxLZXkqIHJlc3VsdCkgewotICBjb25zdCBz
aXplX3QgbiA9IGludGVybmFsX2tleS5zaXplKCk7Ci0gIGlmIChuIDwgOCkgcmV0dXJuIGZhbHNl
OwotICB1aW50NjRfdCBudW0gPSBEZWNvZGVGaXhlZDY0KGludGVybmFsX2tleS5kYXRhKCkgKyBu
IC0gOCk7Ci0gIHVuc2lnbmVkIGNoYXIgYyA9IG51bSAmIDB4ZmY7Ci0gIHJlc3VsdC0+c2VxdWVu
Y2UgPSBudW0gPj4gODsKLSAgcmVzdWx0LT50eXBlID0gc3RhdGljX2Nhc3Q8VmFsdWVUeXBlPihj
KTsKLSAgcmVzdWx0LT51c2VyX2tleSA9IFNsaWNlKGludGVybmFsX2tleS5kYXRhKCksIG4gLSA4
KTsKLSAgcmV0dXJuIChjIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGtUeXBlVmFsdWUp
KTsKLX0KLQotLy8gQSBoZWxwZXIgY2xhc3MgdXNlZnVsIGZvciBEQkltcGw6OkdldCgpCi1jbGFz
cyBMb29rdXBLZXkgewotIHB1YmxpYzoKLSAgLy8gSW5pdGlhbGl6ZSAqdGhpcyBmb3IgbG9va2lu
ZyB1cCB1c2VyX2tleSBhdCBhIHNuYXBzaG90IHdpdGgKLSAgLy8gdGhlIHNwZWNpZmllZCBzZXF1
ZW5jZSBudW1iZXIuCi0gIExvb2t1cEtleShjb25zdCBTbGljZSYgdXNlcl9rZXksIFNlcXVlbmNl
TnVtYmVyIHNlcXVlbmNlKTsKLQotICB+TG9va3VwS2V5KCk7Ci0KLSAgLy8gUmV0dXJuIGEga2V5
IHN1aXRhYmxlIGZvciBsb29rdXAgaW4gYSBNZW1UYWJsZS4KLSAgU2xpY2UgbWVtdGFibGVfa2V5
KCkgY29uc3QgeyByZXR1cm4gU2xpY2Uoc3RhcnRfLCBlbmRfIC0gc3RhcnRfKTsgfQotCi0gIC8v
IFJldHVybiBhbiBpbnRlcm5hbCBrZXkgKHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIGFuIGludGVy
bmFsIGl0ZXJhdG9yKQotICBTbGljZSBpbnRlcm5hbF9rZXkoKSBjb25zdCB7IHJldHVybiBTbGlj
ZShrc3RhcnRfLCBlbmRfIC0ga3N0YXJ0Xyk7IH0KLQotICAvLyBSZXR1cm4gdGhlIHVzZXIga2V5
Ci0gIFNsaWNlIHVzZXJfa2V5KCkgY29uc3QgeyByZXR1cm4gU2xpY2Uoa3N0YXJ0XywgZW5kXyAt
IGtzdGFydF8gLSA4KTsgfQotCi0gcHJpdmF0ZToKLSAgLy8gV2UgY29uc3RydWN0IGEgY2hhciBh
cnJheSBvZiB0aGUgZm9ybToKLSAgLy8gICAga2xlbmd0aCAgdmFyaW50MzIgICAgICAgICAgICAg
ICA8LS0gc3RhcnRfCi0gIC8vICAgIHVzZXJrZXkgIGNoYXJba2xlbmd0aF0gICAgICAgICAgPC0t
IGtzdGFydF8KLSAgLy8gICAgdGFnICAgICAgdWludDY0Ci0gIC8vICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPC0tIGVuZF8KLSAgLy8gVGhlIGFycmF5IGlzIGEgc3VpdGFibGUg
TWVtVGFibGUga2V5LgotICAvLyBUaGUgc3VmZml4IHN0YXJ0aW5nIHdpdGggInVzZXJrZXkiIGNh
biBiZSB1c2VkIGFzIGFuIEludGVybmFsS2V5LgotICBjb25zdCBjaGFyKiBzdGFydF87Ci0gIGNv
bnN0IGNoYXIqIGtzdGFydF87Ci0gIGNvbnN0IGNoYXIqIGVuZF87Ci0gIGNoYXIgc3BhY2VfWzIw
MF07ICAgICAgLy8gQXZvaWQgYWxsb2NhdGlvbiBmb3Igc2hvcnQga2V5cwotCi0gIC8vIE5vIGNv
cHlpbmcgYWxsb3dlZAotICBMb29rdXBLZXkoY29uc3QgTG9va3VwS2V5Jik7Ci0gIHZvaWQgb3Bl
cmF0b3I9KGNvbnN0IExvb2t1cEtleSYpOwotfTsKLQotaW5saW5lIExvb2t1cEtleTo6fkxvb2t1
cEtleSgpIHsKLSAgaWYgKHN0YXJ0XyAhPSBzcGFjZV8pIGRlbGV0ZVtdIHN0YXJ0XzsKLX0KLQot
fSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKLQotI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfREJf
Rk9STUFUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2RiZm9y
bWF0X3Rlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2RiZm9ybWF0X3Rlc3Qu
Y2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkODJmNWQuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9kYmZvcm1hdF90ZXN0LmNjCisrKyAvZGV2L251
bGwKQEAgLTEsMTEyICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNv
bnRyaWJ1dG9ycy4KLQotI2luY2x1ZGUgImRiL2RiZm9ybWF0LmgiCi0jaW5jbHVkZSAidXRpbC9s
b2dnaW5nLmgiCi0jaW5jbHVkZSAidXRpbC90ZXN0aGFybmVzcy5oIgotCi1uYW1lc3BhY2UgbGV2
ZWxkYiB7Ci0KLXN0YXRpYyBzdGQ6OnN0cmluZyBJS2V5KGNvbnN0IHN0ZDo6c3RyaW5nJiB1c2Vy
X2tleSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHNlcSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFZhbHVlVHlwZSB2dCkgewotICBzdGQ6OnN0cmluZyBlbmNvZGVkOwotICBB
cHBlbmRJbnRlcm5hbEtleSgmZW5jb2RlZCwgUGFyc2VkSW50ZXJuYWxLZXkodXNlcl9rZXksIHNl
cSwgdnQpKTsKLSAgcmV0dXJuIGVuY29kZWQ7Ci19Ci0KLXN0YXRpYyBzdGQ6OnN0cmluZyBTaG9y
dGVuKGNvbnN0IHN0ZDo6c3RyaW5nJiBzLCBjb25zdCBzdGQ6OnN0cmluZyYgbCkgewotICBzdGQ6
OnN0cmluZyByZXN1bHQgPSBzOwotICBJbnRlcm5hbEtleUNvbXBhcmF0b3IoQnl0ZXdpc2VDb21w
YXJhdG9yKCkpLkZpbmRTaG9ydGVzdFNlcGFyYXRvcigmcmVzdWx0LCBsKTsKLSAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotc3RhdGljIHN0ZDo6c3RyaW5nIFNob3J0U3VjY2Vzc29yKGNvbnN0IHN0ZDo6
c3RyaW5nJiBzKSB7Ci0gIHN0ZDo6c3RyaW5nIHJlc3VsdCA9IHM7Ci0gIEludGVybmFsS2V5Q29t
cGFyYXRvcihCeXRld2lzZUNvbXBhcmF0b3IoKSkuRmluZFNob3J0U3VjY2Vzc29yKCZyZXN1bHQp
OwotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZCBUZXN0S2V5KGNvbnN0IHN0ZDo6
c3RyaW5nJiBrZXksCi0gICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHNlcSwKLSAgICAgICAg
ICAgICAgICAgICAgVmFsdWVUeXBlIHZ0KSB7Ci0gIHN0ZDo6c3RyaW5nIGVuY29kZWQgPSBJS2V5
KGtleSwgc2VxLCB2dCk7Ci0KLSAgU2xpY2UgaW4oZW5jb2RlZCk7Ci0gIFBhcnNlZEludGVybmFs
S2V5IGRlY29kZWQoIiIsIDAsIGtUeXBlVmFsdWUpOwotCi0gIEFTU0VSVF9UUlVFKFBhcnNlSW50
ZXJuYWxLZXkoaW4sICZkZWNvZGVkKSk7Ci0gIEFTU0VSVF9FUShrZXksIGRlY29kZWQudXNlcl9r
ZXkuVG9TdHJpbmcoKSk7Ci0gIEFTU0VSVF9FUShzZXEsIGRlY29kZWQuc2VxdWVuY2UpOwotICBB
U1NFUlRfRVEodnQsIGRlY29kZWQudHlwZSk7Ci0KLSAgQVNTRVJUX1RSVUUoIVBhcnNlSW50ZXJu
YWxLZXkoU2xpY2UoImJhciIpLCAmZGVjb2RlZCkpOwotfQotCi1jbGFzcyBGb3JtYXRUZXN0IHsg
fTsKLQotVEVTVChGb3JtYXRUZXN0LCBJbnRlcm5hbEtleV9FbmNvZGVEZWNvZGUpIHsKLSAgY29u
c3QgY2hhcioga2V5c1tdID0geyAiIiwgImsiLCAiaGVsbG8iLCAibG9uZ2dnZ2dnZ2dnZ2dnZ2dn
Z2dnZ2dnZyIgfTsKLSAgY29uc3QgdWludDY0X3Qgc2VxW10gPSB7Ci0gICAgMSwgMiwgMywKLSAg
ICAoMXVsbCA8PCA4KSAtIDEsIDF1bGwgPDwgOCwgKDF1bGwgPDwgOCkgKyAxLAotICAgICgxdWxs
IDw8IDE2KSAtIDEsIDF1bGwgPDwgMTYsICgxdWxsIDw8IDE2KSArIDEsCi0gICAgKDF1bGwgPDwg
MzIpIC0gMSwgMXVsbCA8PCAzMiwgKDF1bGwgPDwgMzIpICsgMQotICB9OwotICBmb3IgKGludCBr
ID0gMDsgayA8IHNpemVvZihrZXlzKSAvIHNpemVvZihrZXlzWzBdKTsgaysrKSB7Ci0gICAgZm9y
IChpbnQgcyA9IDA7IHMgPCBzaXplb2Yoc2VxKSAvIHNpemVvZihzZXFbMF0pOyBzKyspIHsKLSAg
ICAgIFRlc3RLZXkoa2V5c1trXSwgc2VxW3NdLCBrVHlwZVZhbHVlKTsKLSAgICAgIFRlc3RLZXko
ImhlbGxvIiwgMSwga1R5cGVEZWxldGlvbik7Ci0gICAgfQotICB9Ci19Ci0KLVRFU1QoRm9ybWF0
VGVzdCwgSW50ZXJuYWxLZXlTaG9ydFNlcGFyYXRvcikgewotICAvLyBXaGVuIHVzZXIga2V5cyBh
cmUgc2FtZQotICBBU1NFUlRfRVEoSUtleSgiZm9vIiwgMTAwLCBrVHlwZVZhbHVlKSwKLSAgICAg
ICAgICAgIFNob3J0ZW4oSUtleSgiZm9vIiwgMTAwLCBrVHlwZVZhbHVlKSwKLSAgICAgICAgICAg
ICAgICAgICAgSUtleSgiZm9vIiwgOTksIGtUeXBlVmFsdWUpKSk7Ci0gIEFTU0VSVF9FUShJS2V5
KCJmb28iLCAxMDAsIGtUeXBlVmFsdWUpLAotICAgICAgICAgICAgU2hvcnRlbihJS2V5KCJmb28i
LCAxMDAsIGtUeXBlVmFsdWUpLAotICAgICAgICAgICAgICAgICAgICBJS2V5KCJmb28iLCAxMDEs
IGtUeXBlVmFsdWUpKSk7Ci0gIEFTU0VSVF9FUShJS2V5KCJmb28iLCAxMDAsIGtUeXBlVmFsdWUp
LAotICAgICAgICAgICAgU2hvcnRlbihJS2V5KCJmb28iLCAxMDAsIGtUeXBlVmFsdWUpLAotICAg
ICAgICAgICAgICAgICAgICBJS2V5KCJmb28iLCAxMDAsIGtUeXBlVmFsdWUpKSk7Ci0gIEFTU0VS
VF9FUShJS2V5KCJmb28iLCAxMDAsIGtUeXBlVmFsdWUpLAotICAgICAgICAgICAgU2hvcnRlbihJ
S2V5KCJmb28iLCAxMDAsIGtUeXBlVmFsdWUpLAotICAgICAgICAgICAgICAgICAgICBJS2V5KCJm
b28iLCAxMDAsIGtUeXBlRGVsZXRpb24pKSk7Ci0KLSAgLy8gV2hlbiB1c2VyIGtleXMgYXJlIG1p
c29yZGVyZWQKLSAgQVNTRVJUX0VRKElLZXkoImZvbyIsIDEwMCwga1R5cGVWYWx1ZSksCi0gICAg
ICAgICAgICBTaG9ydGVuKElLZXkoImZvbyIsIDEwMCwga1R5cGVWYWx1ZSksCi0gICAgICAgICAg
ICAgICAgICAgIElLZXkoImJhciIsIDk5LCBrVHlwZVZhbHVlKSkpOwotCi0gIC8vIFdoZW4gdXNl
ciBrZXlzIGFyZSBkaWZmZXJlbnQsIGJ1dCBjb3JyZWN0bHkgb3JkZXJlZAotICBBU1NFUlRfRVEo
SUtleSgiZyIsIGtNYXhTZXF1ZW5jZU51bWJlciwga1ZhbHVlVHlwZUZvclNlZWspLAotICAgICAg
ICAgICAgU2hvcnRlbihJS2V5KCJmb28iLCAxMDAsIGtUeXBlVmFsdWUpLAotICAgICAgICAgICAg
ICAgICAgICBJS2V5KCJoZWxsbyIsIDIwMCwga1R5cGVWYWx1ZSkpKTsKLQotICAvLyBXaGVuIHN0
YXJ0IHVzZXIga2V5IGlzIHByZWZpeCBvZiBsaW1pdCB1c2VyIGtleQotICBBU1NFUlRfRVEoSUtl
eSgiZm9vIiwgMTAwLCBrVHlwZVZhbHVlKSwKLSAgICAgICAgICAgIFNob3J0ZW4oSUtleSgiZm9v
IiwgMTAwLCBrVHlwZVZhbHVlKSwKLSAgICAgICAgICAgICAgICAgICAgSUtleSgiZm9vYmFyIiwg
MjAwLCBrVHlwZVZhbHVlKSkpOwotCi0gIC8vIFdoZW4gbGltaXQgdXNlciBrZXkgaXMgcHJlZml4
IG9mIHN0YXJ0IHVzZXIga2V5Ci0gIEFTU0VSVF9FUShJS2V5KCJmb29iYXIiLCAxMDAsIGtUeXBl
VmFsdWUpLAotICAgICAgICAgICAgU2hvcnRlbihJS2V5KCJmb29iYXIiLCAxMDAsIGtUeXBlVmFs
dWUpLAotICAgICAgICAgICAgICAgICAgICBJS2V5KCJmb28iLCAyMDAsIGtUeXBlVmFsdWUpKSk7
Ci19Ci0KLVRFU1QoRm9ybWF0VGVzdCwgSW50ZXJuYWxLZXlTaG9ydGVzdFN1Y2Nlc3Nvcikgewot
ICBBU1NFUlRfRVEoSUtleSgiZyIsIGtNYXhTZXF1ZW5jZU51bWJlciwga1ZhbHVlVHlwZUZvclNl
ZWspLAotICAgICAgICAgICAgU2hvcnRTdWNjZXNzb3IoSUtleSgiZm9vIiwgMTAwLCBrVHlwZVZh
bHVlKSkpOwotICBBU1NFUlRfRVEoSUtleSgiXHhmZlx4ZmYiLCAxMDAsIGtUeXBlVmFsdWUpLAot
ICAgICAgICAgICAgU2hvcnRTdWNjZXNzb3IoSUtleSgiXHhmZlx4ZmYiLCAxMDAsIGtUeXBlVmFs
dWUpKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCi0KLWludCBtYWluKGludCBhcmdj
LCBjaGFyKiogYXJndikgewotICByZXR1cm4gbGV2ZWxkYjo6dGVzdDo6UnVuQWxsVGVzdHMoKTsK
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZmlsZW5hbWUuY2Mg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2ZpbGVuYW1lLmNjCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAzYzRkNDlmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvZGIvZmlsZW5hbWUuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAot
Ly8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBT
ZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgotCi0jaW5jbHVk
ZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgImRiL2ZpbGVuYW1lLmgi
Ci0jaW5jbHVkZSAiZGIvZGJmb3JtYXQuaCIKLSNpbmNsdWRlICJsZXZlbGRiL2Vudi5oIgotI2lu
Y2x1ZGUgInV0aWwvbG9nZ2luZy5oIgotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7Ci0KLS8vIEEgdXRp
bGl0eSByb3V0aW5lOiB3cml0ZSAiZGF0YSIgdG8gdGhlIG5hbWVkIGZpbGUgYW5kIFN5bmMoKSBp
dC4KLWV4dGVybiBTdGF0dXMgV3JpdGVTdHJpbmdUb0ZpbGVTeW5jKEVudiogZW52LCBjb25zdCBT
bGljZSYgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
ZDo6c3RyaW5nJiBmbmFtZSk7Ci0KLXN0YXRpYyBzdGQ6OnN0cmluZyBNYWtlRmlsZU5hbWUoY29u
c3Qgc3RkOjpzdHJpbmcmIG5hbWUsIHVpbnQ2NF90IG51bWJlciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogc3VmZml4KSB7Ci0gIGNoYXIgYnVmWzEwMF07Ci0g
IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIvJTA2bGx1LiVzIiwKLSAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihudW1iZXIpLAotICAgICAgICAgICBzdWZmaXgp
OwotICByZXR1cm4gbmFtZSArIGJ1ZjsKLX0KLQotc3RkOjpzdHJpbmcgTG9nRmlsZU5hbWUoY29u
c3Qgc3RkOjpzdHJpbmcmIG5hbWUsIHVpbnQ2NF90IG51bWJlcikgewotICBhc3NlcnQobnVtYmVy
ID4gMCk7Ci0gIHJldHVybiBNYWtlRmlsZU5hbWUobmFtZSwgbnVtYmVyLCAibG9nIik7Ci19Ci0K
LXN0ZDo6c3RyaW5nIFRhYmxlRmlsZU5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIHVpbnQ2
NF90IG51bWJlcikgewotICBhc3NlcnQobnVtYmVyID4gMCk7Ci0gIHJldHVybiBNYWtlRmlsZU5h
bWUobmFtZSwgbnVtYmVyLCAic3N0Iik7Ci19Ci0KLXN0ZDo6c3RyaW5nIERlc2NyaXB0b3JGaWxl
TmFtZShjb25zdCBzdGQ6OnN0cmluZyYgZGJuYW1lLCB1aW50NjRfdCBudW1iZXIpIHsKLSAgYXNz
ZXJ0KG51bWJlciA+IDApOwotICBjaGFyIGJ1ZlsxMDBdOwotICBzbnByaW50ZihidWYsIHNpemVv
ZihidWYpLCAiL01BTklGRVNULSUwNmxsdSIsCi0gICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmcgbG9uZz4obnVtYmVyKSk7Ci0gIHJldHVybiBkYm5hbWUgKyBidWY7Ci19Ci0KLXN0
ZDo6c3RyaW5nIEN1cnJlbnRGaWxlTmFtZShjb25zdCBzdGQ6OnN0cmluZyYgZGJuYW1lKSB7Ci0g
IHJldHVybiBkYm5hbWUgKyAiL0NVUlJFTlQiOwotfQotCi1zdGQ6OnN0cmluZyBMb2NrRmlsZU5h
bWUoY29uc3Qgc3RkOjpzdHJpbmcmIGRibmFtZSkgewotICByZXR1cm4gZGJuYW1lICsgIi9MT0NL
IjsKLX0KLQotc3RkOjpzdHJpbmcgVGVtcEZpbGVOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBkYm5h
bWUsIHVpbnQ2NF90IG51bWJlcikgewotICBhc3NlcnQobnVtYmVyID4gMCk7Ci0gIHJldHVybiBN
YWtlRmlsZU5hbWUoZGJuYW1lLCBudW1iZXIsICJkYnRtcCIpOwotfQotCi1zdGQ6OnN0cmluZyBJ
bmZvTG9nRmlsZU5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGRibmFtZSkgewotICByZXR1cm4gZGJu
YW1lICsgIi9MT0ciOwotfQotCi0vLyBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIG9sZCBpbmZvIGxv
ZyBmaWxlIGZvciAiZGJuYW1lIi4KLXN0ZDo6c3RyaW5nIE9sZEluZm9Mb2dGaWxlTmFtZShjb25z
dCBzdGQ6OnN0cmluZyYgZGJuYW1lKSB7Ci0gIHJldHVybiBkYm5hbWUgKyAiL0xPRy5vbGQiOwot
fQotCi0KLS8vIE93bmVkIGZpbGVuYW1lcyBoYXZlIHRoZSBmb3JtOgotLy8gICAgZGJuYW1lL0NV
UlJFTlQKLS8vICAgIGRibmFtZS9MT0NLCi0vLyAgICBkYm5hbWUvTE9HCi0vLyAgICBkYm5hbWUv
TE9HLm9sZAotLy8gICAgZGJuYW1lL01BTklGRVNULVswLTldKwotLy8gICAgZGJuYW1lL1swLTld
Ky4obG9nfHNzdCkKLWJvb2wgUGFyc2VGaWxlTmFtZShjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUs
Ci0gICAgICAgICAgICAgICAgICAgdWludDY0X3QqIG51bWJlciwKLSAgICAgICAgICAgICAgICAg
ICBGaWxlVHlwZSogdHlwZSkgewotICBTbGljZSByZXN0KGZuYW1lKTsKLSAgaWYgKHJlc3QgPT0g
IkNVUlJFTlQiKSB7Ci0gICAgKm51bWJlciA9IDA7Ci0gICAgKnR5cGUgPSBrQ3VycmVudEZpbGU7
Ci0gIH0gZWxzZSBpZiAocmVzdCA9PSAiTE9DSyIpIHsKLSAgICAqbnVtYmVyID0gMDsKLSAgICAq
dHlwZSA9IGtEQkxvY2tGaWxlOwotICB9IGVsc2UgaWYgKHJlc3QgPT0gIkxPRyIgfHwgcmVzdCA9
PSAiTE9HLm9sZCIpIHsKLSAgICAqbnVtYmVyID0gMDsKLSAgICAqdHlwZSA9IGtJbmZvTG9nRmls
ZTsKLSAgfSBlbHNlIGlmIChyZXN0LnN0YXJ0c193aXRoKCJNQU5JRkVTVC0iKSkgewotICAgIHJl
c3QucmVtb3ZlX3ByZWZpeChzdHJsZW4oIk1BTklGRVNULSIpKTsKLSAgICB1aW50NjRfdCBudW07
Ci0gICAgaWYgKCFDb25zdW1lRGVjaW1hbE51bWJlcigmcmVzdCwgJm51bSkpIHsKLSAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCFyZXN0LmVtcHR5KCkpIHsKLSAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgKnR5cGUgPSBrRGVzY3JpcHRvckZpbGU7Ci0gICAgKm51bWJl
ciA9IG51bTsKLSAgfSBlbHNlIHsKLSAgICAvLyBBdm9pZCBzdHJ0b3VsbCgpIHRvIGtlZXAgZmls
ZW5hbWUgZm9ybWF0IGluZGVwZW5kZW50IG9mIHRoZQotICAgIC8vIGN1cnJlbnQgbG9jYWxlCi0g
ICAgdWludDY0X3QgbnVtOwotICAgIGlmICghQ29uc3VtZURlY2ltYWxOdW1iZXIoJnJlc3QsICZu
dW0pKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIFNsaWNlIHN1ZmZpeCA9IHJl
c3Q7Ci0gICAgaWYgKHN1ZmZpeCA9PSBTbGljZSgiLmxvZyIpKSB7Ci0gICAgICAqdHlwZSA9IGtM
b2dGaWxlOwotICAgIH0gZWxzZSBpZiAoc3VmZml4ID09IFNsaWNlKCIuc3N0IikpIHsKLSAgICAg
ICp0eXBlID0ga1RhYmxlRmlsZTsKLSAgICB9IGVsc2UgaWYgKHN1ZmZpeCA9PSBTbGljZSgiLmRi
dG1wIikpIHsKLSAgICAgICp0eXBlID0ga1RlbXBGaWxlOwotICAgIH0gZWxzZSB7Ci0gICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgICpudW1iZXIgPSBudW07Ci0gIH0KLSAgcmV0dXJuIHRy
dWU7Ci19Ci0KLVN0YXR1cyBTZXRDdXJyZW50RmlsZShFbnYqIGVudiwgY29uc3Qgc3RkOjpzdHJp
bmcmIGRibmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBkZXNjcmlwdG9yX251
bWJlcikgewotICAvLyBSZW1vdmUgbGVhZGluZyAiZGJuYW1lLyIgYW5kIGFkZCBuZXdsaW5lIHRv
IG1hbmlmZXN0IGZpbGUgbmFtZQotICBzdGQ6OnN0cmluZyBtYW5pZmVzdCA9IERlc2NyaXB0b3JG
aWxlTmFtZShkYm5hbWUsIGRlc2NyaXB0b3JfbnVtYmVyKTsKLSAgU2xpY2UgY29udGVudHMgPSBt
YW5pZmVzdDsKLSAgYXNzZXJ0KGNvbnRlbnRzLnN0YXJ0c193aXRoKGRibmFtZSArICIvIikpOwot
ICBjb250ZW50cy5yZW1vdmVfcHJlZml4KGRibmFtZS5zaXplKCkgKyAxKTsKLSAgc3RkOjpzdHJp
bmcgdG1wID0gVGVtcEZpbGVOYW1lKGRibmFtZSwgZGVzY3JpcHRvcl9udW1iZXIpOwotICBTdGF0
dXMgcyA9IFdyaXRlU3RyaW5nVG9GaWxlU3luYyhlbnYsIGNvbnRlbnRzLlRvU3RyaW5nKCkgKyAi
XG4iLCB0bXApOwotICBpZiAocy5vaygpKSB7Ci0gICAgcyA9IGVudi0+UmVuYW1lRmlsZSh0bXAs
IEN1cnJlbnRGaWxlTmFtZShkYm5hbWUpKTsKLSAgfQotICBpZiAoIXMub2soKSkgewotICAgIGVu
di0+RGVsZXRlRmlsZSh0bXApOwotICB9Ci0gIHJldHVybiBzOwotfQotCi19ICAvLyBuYW1lc3Bh
Y2UgbGV2ZWxkYgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9maWxl
bmFtZS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9maWxlbmFtZS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWQwOWIxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvZGIvZmlsZW5hbWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAg
QEAKLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KLS8vCi0v
LyBGaWxlIG5hbWVzIHVzZWQgYnkgREIgY29kZQotCi0jaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9E
Ql9GSUxFTkFNRV9IXwotI2RlZmluZSBTVE9SQUdFX0xFVkVMREJfREJfRklMRU5BTUVfSF8KLQot
I2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlICJsZXZlbGRi
L3NsaWNlLmgiCi0jaW5jbHVkZSAibGV2ZWxkYi9zdGF0dXMuaCIKLSNpbmNsdWRlICJwb3J0L3Bv
cnQuaCIKLQotbmFtZXNwYWNlIGxldmVsZGIgewotCi1jbGFzcyBFbnY7Ci0KLWVudW0gRmlsZVR5
cGUgewotICBrTG9nRmlsZSwKLSAga0RCTG9ja0ZpbGUsCi0gIGtUYWJsZUZpbGUsCi0gIGtEZXNj
cmlwdG9yRmlsZSwKLSAga0N1cnJlbnRGaWxlLAotICBrVGVtcEZpbGUsCi0gIGtJbmZvTG9nRmls
ZSAgLy8gRWl0aGVyIHRoZSBjdXJyZW50IG9uZSwgb3IgYW4gb2xkIG9uZQotfTsKLQotLy8gUmV0
dXJuIHRoZSBuYW1lIG9mIHRoZSBsb2cgZmlsZSB3aXRoIHRoZSBzcGVjaWZpZWQgbnVtYmVyCi0v
LyBpbiB0aGUgZGIgbmFtZWQgYnkgImRibmFtZSIuICBUaGUgcmVzdWx0IHdpbGwgYmUgcHJlZml4
ZWQgd2l0aAotLy8gImRibmFtZSIuCi1leHRlcm4gc3RkOjpzdHJpbmcgTG9nRmlsZU5hbWUoY29u
c3Qgc3RkOjpzdHJpbmcmIGRibmFtZSwgdWludDY0X3QgbnVtYmVyKTsKLQotLy8gUmV0dXJuIHRo
ZSBuYW1lIG9mIHRoZSBzc3RhYmxlIHdpdGggdGhlIHNwZWNpZmllZCBudW1iZXIKLS8vIGluIHRo
ZSBkYiBuYW1lZCBieSAiZGJuYW1lIi4gIFRoZSByZXN1bHQgd2lsbCBiZSBwcmVmaXhlZCB3aXRo
Ci0vLyAiZGJuYW1lIi4KLWV4dGVybiBzdGQ6OnN0cmluZyBUYWJsZUZpbGVOYW1lKGNvbnN0IHN0
ZDo6c3RyaW5nJiBkYm5hbWUsIHVpbnQ2NF90IG51bWJlcik7Ci0KLS8vIFJldHVybiB0aGUgbmFt
ZSBvZiB0aGUgZGVzY3JpcHRvciBmaWxlIGZvciB0aGUgZGIgbmFtZWQgYnkKLS8vICJkYm5hbWUi
IGFuZCB0aGUgc3BlY2lmaWVkIGluY2FybmF0aW9uIG51bWJlci4gIFRoZSByZXN1bHQgd2lsbCBi
ZQotLy8gcHJlZml4ZWQgd2l0aCAiZGJuYW1lIi4KLWV4dGVybiBzdGQ6OnN0cmluZyBEZXNjcmlw
dG9yRmlsZU5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGRibmFtZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgbnVtYmVyKTsKLQotLy8gUmV0dXJuIHRoZSBu
YW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIG5hbWUKLS8v
IG9mIHRoZSBjdXJyZW50IG1hbmlmZXN0IGZpbGUuICBUaGUgcmVzdWx0IHdpbGwgYmUgcHJlZml4
ZWQgd2l0aAotLy8gImRibmFtZSIuCi1leHRlcm4gc3RkOjpzdHJpbmcgQ3VycmVudEZpbGVOYW1l
KGNvbnN0IHN0ZDo6c3RyaW5nJiBkYm5hbWUpOwotCi0vLyBSZXR1cm4gdGhlIG5hbWUgb2YgdGhl
IGxvY2sgZmlsZSBmb3IgdGhlIGRiIG5hbWVkIGJ5Ci0vLyAiZGJuYW1lIi4gIFRoZSByZXN1bHQg
d2lsbCBiZSBwcmVmaXhlZCB3aXRoICJkYm5hbWUiLgotZXh0ZXJuIHN0ZDo6c3RyaW5nIExvY2tG
aWxlTmFtZShjb25zdCBzdGQ6OnN0cmluZyYgZGJuYW1lKTsKLQotLy8gUmV0dXJuIHRoZSBuYW1l
IG9mIGEgdGVtcG9yYXJ5IGZpbGUgb3duZWQgYnkgdGhlIGRiIG5hbWVkICJkYm5hbWUiLgotLy8g
VGhlIHJlc3VsdCB3aWxsIGJlIHByZWZpeGVkIHdpdGggImRibmFtZSIuCi1leHRlcm4gc3RkOjpz
dHJpbmcgVGVtcEZpbGVOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBkYm5hbWUsIHVpbnQ2NF90IG51
bWJlcik7Ci0KLS8vIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgaW5mbyBsb2cgZmlsZSBmb3IgImRi
bmFtZSIuCi1leHRlcm4gc3RkOjpzdHJpbmcgSW5mb0xvZ0ZpbGVOYW1lKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBkYm5hbWUpOwotCi0vLyBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIG9sZCBpbmZvIGxvZyBm
aWxlIGZvciAiZGJuYW1lIi4KLWV4dGVybiBzdGQ6OnN0cmluZyBPbGRJbmZvTG9nRmlsZU5hbWUo
Y29uc3Qgc3RkOjpzdHJpbmcmIGRibmFtZSk7Ci0KLS8vIElmIGZpbGVuYW1lIGlzIGEgbGV2ZWxk
YiBmaWxlLCBzdG9yZSB0aGUgdHlwZSBvZiB0aGUgZmlsZSBpbiAqdHlwZS4KLS8vIFRoZSBudW1i
ZXIgZW5jb2RlZCBpbiB0aGUgZmlsZW5hbWUgaXMgc3RvcmVkIGluICpudW1iZXIuICBJZiB0aGUK
LS8vIGZpbGVuYW1lIHdhcyBzdWNjZXNzZnVsbHkgcGFyc2VkLCByZXR1cm5zIHRydWUuICBFbHNl
IHJldHVybiBmYWxzZS4KLWV4dGVybiBib29sIFBhcnNlRmlsZU5hbWUoY29uc3Qgc3RkOjpzdHJp
bmcmIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCogbnVtYmVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlVHlwZSogdHlwZSk7Ci0KLS8vIE1ha2Ug
dGhlIENVUlJFTlQgZmlsZSBwb2ludCB0byB0aGUgZGVzY3JpcHRvciBmaWxlIHdpdGggdGhlCi0v
LyBzcGVjaWZpZWQgbnVtYmVyLgotZXh0ZXJuIFN0YXR1cyBTZXRDdXJyZW50RmlsZShFbnYqIGVu
diwgY29uc3Qgc3RkOjpzdHJpbmcmIGRibmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDY0X3QgZGVzY3JpcHRvcl9udW1iZXIpOwotCi0KLX0gIC8vIG5hbWVzcGFjZSBsZXZl
bGRiCi0KLSNlbmRpZiAgLy8gU1RPUkFHRV9MRVZFTERCX0RCX0ZJTEVOQU1FX0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2ZpbGVuYW1lX3Rlc3QuY2MgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2ZpbGVuYW1lX3Rlc3QuY2MKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDQ3MzUzZDYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGV2ZWxkYi9kYi9maWxlbmFtZV90ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAg
QEAKLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KLQotI2lu
Y2x1ZGUgImRiL2ZpbGVuYW1lLmgiCi0KLSNpbmNsdWRlICJkYi9kYmZvcm1hdC5oIgotI2luY2x1
ZGUgInBvcnQvcG9ydC5oIgotI2luY2x1ZGUgInV0aWwvbG9nZ2luZy5oIgotI2luY2x1ZGUgInV0
aWwvdGVzdGhhcm5lc3MuaCIKLQotbmFtZXNwYWNlIGxldmVsZGIgewotCi1jbGFzcyBGaWxlTmFt
ZVRlc3QgeyB9OwotCi1URVNUKEZpbGVOYW1lVGVzdCwgUGFyc2UpIHsKLSAgU2xpY2UgZGI7Ci0g
IEZpbGVUeXBlIHR5cGU7Ci0gIHVpbnQ2NF90IG51bWJlcjsKLQotICAvLyBTdWNjZXNzZnVsIHBh
cnNlcwotICBzdGF0aWMgc3RydWN0IHsKLSAgICBjb25zdCBjaGFyKiBmbmFtZTsKLSAgICB1aW50
NjRfdCBudW1iZXI7Ci0gICAgRmlsZVR5cGUgdHlwZTsKLSAgfSBjYXNlc1tdID0gewotICAgIHsg
IjEwMC5sb2ciLCAgICAgICAgICAgIDEwMCwgICBrTG9nRmlsZSB9LAotICAgIHsgIjAubG9nIiwg
ICAgICAgICAgICAgIDAsICAgICBrTG9nRmlsZSB9LAotICAgIHsgIjAuc3N0IiwgICAgICAgICAg
ICAgIDAsICAgICBrVGFibGVGaWxlIH0sCi0gICAgeyAiQ1VSUkVOVCIsICAgICAgICAgICAgMCwg
ICAgIGtDdXJyZW50RmlsZSB9LAotICAgIHsgIkxPQ0siLCAgICAgICAgICAgICAgIDAsICAgICBr
REJMb2NrRmlsZSB9LAotICAgIHsgIk1BTklGRVNULTIiLCAgICAgICAgIDIsICAgICBrRGVzY3Jp
cHRvckZpbGUgfSwKLSAgICB7ICJNQU5JRkVTVC03IiwgICAgICAgICA3LCAgICAga0Rlc2NyaXB0
b3JGaWxlIH0sCi0gICAgeyAiTE9HIiwgICAgICAgICAgICAgICAgMCwgICAgIGtJbmZvTG9nRmls
ZSB9LAotICAgIHsgIkxPRy5vbGQiLCAgICAgICAgICAgIDAsICAgICBrSW5mb0xvZ0ZpbGUgfSwK
LSAgICB7ICIxODQ0Njc0NDA3MzcwOTU1MTYxNS5sb2ciLCAxODQ0Njc0NDA3MzcwOTU1MTYxNXVs
bCwga0xvZ0ZpbGUgfSwKLSAgfTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplb2YoY2FzZXMp
IC8gc2l6ZW9mKGNhc2VzWzBdKTsgaSsrKSB7Ci0gICAgc3RkOjpzdHJpbmcgZiA9IGNhc2VzW2ld
LmZuYW1lOwotICAgIEFTU0VSVF9UUlVFKFBhcnNlRmlsZU5hbWUoZiwgJm51bWJlciwgJnR5cGUp
KSA8PCBmOwotICAgIEFTU0VSVF9FUShjYXNlc1tpXS50eXBlLCB0eXBlKSA8PCBmOwotICAgIEFT
U0VSVF9FUShjYXNlc1tpXS5udW1iZXIsIG51bWJlcikgPDwgZjsKLSAgfQotCi0gIC8vIEVycm9y
cwotICBzdGF0aWMgY29uc3QgY2hhciogZXJyb3JzW10gPSB7Ci0gICAgIiIsCi0gICAgImZvbyIs
Ci0gICAgImZvby1keC0xMDAubG9nIiwKLSAgICAiLmxvZyIsCi0gICAgIiIsCi0gICAgIm1hbmlm
ZXN0IiwKLSAgICAiQ1VSUkVOIiwKLSAgICAiQ1VSUkVOVFgiLAotICAgICJNQU5JRkVTIiwKLSAg
ICAiTUFOSUZFU1QiLAotICAgICJNQU5JRkVTVC0iLAotICAgICJYTUFOSUZFU1QtMyIsCi0gICAg
Ik1BTklGRVNULTN4IiwKLSAgICAiTE9DIiwKLSAgICAiTE9DS3giLAotICAgICJMTyIsCi0gICAg
IkxPR3giLAotICAgICIxODQ0Njc0NDA3MzcwOTU1MTYxNi5sb2ciLAotICAgICIxODQ0Njc0NDA3
MzcwOTU1MTYxNTAubG9nIiwKLSAgICAiMTAwIiwKLSAgICAiMTAwLiIsCi0gICAgIjEwMC5sb3Ai
Ci0gIH07Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mKGVycm9ycykgLyBzaXplb2YoZXJy
b3JzWzBdKTsgaSsrKSB7Ci0gICAgc3RkOjpzdHJpbmcgZiA9IGVycm9yc1tpXTsKLSAgICBBU1NF
UlRfVFJVRSghUGFyc2VGaWxlTmFtZShmLCAmbnVtYmVyLCAmdHlwZSkpIDw8IGY7Ci0gIH07Ci19
Ci0KLVRFU1QoRmlsZU5hbWVUZXN0LCBDb25zdHJ1Y3Rpb24pIHsKLSAgdWludDY0X3QgbnVtYmVy
OwotICBGaWxlVHlwZSB0eXBlOwotICBzdGQ6OnN0cmluZyBmbmFtZTsKLQotICBmbmFtZSA9IEN1
cnJlbnRGaWxlTmFtZSgiZm9vIik7Ci0gIEFTU0VSVF9FUSgiZm9vLyIsIHN0ZDo6c3RyaW5nKGZu
YW1lLmRhdGEoKSwgNCkpOwotICBBU1NFUlRfVFJVRShQYXJzZUZpbGVOYW1lKGZuYW1lLmNfc3Ry
KCkgKyA0LCAmbnVtYmVyLCAmdHlwZSkpOwotICBBU1NFUlRfRVEoMCwgbnVtYmVyKTsKLSAgQVNT
RVJUX0VRKGtDdXJyZW50RmlsZSwgdHlwZSk7Ci0KLSAgZm5hbWUgPSBMb2NrRmlsZU5hbWUoImZv
byIpOwotICBBU1NFUlRfRVEoImZvby8iLCBzdGQ6OnN0cmluZyhmbmFtZS5kYXRhKCksIDQpKTsK
LSAgQVNTRVJUX1RSVUUoUGFyc2VGaWxlTmFtZShmbmFtZS5jX3N0cigpICsgNCwgJm51bWJlciwg
JnR5cGUpKTsKLSAgQVNTRVJUX0VRKDAsIG51bWJlcik7Ci0gIEFTU0VSVF9FUShrREJMb2NrRmls
ZSwgdHlwZSk7Ci0KLSAgZm5hbWUgPSBMb2dGaWxlTmFtZSgiZm9vIiwgMTkyKTsKLSAgQVNTRVJU
X0VRKCJmb28vIiwgc3RkOjpzdHJpbmcoZm5hbWUuZGF0YSgpLCA0KSk7Ci0gIEFTU0VSVF9UUlVF
KFBhcnNlRmlsZU5hbWUoZm5hbWUuY19zdHIoKSArIDQsICZudW1iZXIsICZ0eXBlKSk7Ci0gIEFT
U0VSVF9FUSgxOTIsIG51bWJlcik7Ci0gIEFTU0VSVF9FUShrTG9nRmlsZSwgdHlwZSk7Ci0KLSAg
Zm5hbWUgPSBUYWJsZUZpbGVOYW1lKCJiYXIiLCAyMDApOwotICBBU1NFUlRfRVEoImJhci8iLCBz
dGQ6OnN0cmluZyhmbmFtZS5kYXRhKCksIDQpKTsKLSAgQVNTRVJUX1RSVUUoUGFyc2VGaWxlTmFt
ZShmbmFtZS5jX3N0cigpICsgNCwgJm51bWJlciwgJnR5cGUpKTsKLSAgQVNTRVJUX0VRKDIwMCwg
bnVtYmVyKTsKLSAgQVNTRVJUX0VRKGtUYWJsZUZpbGUsIHR5cGUpOwotCi0gIGZuYW1lID0gRGVz
Y3JpcHRvckZpbGVOYW1lKCJiYXIiLCAxMDApOwotICBBU1NFUlRfRVEoImJhci8iLCBzdGQ6OnN0
cmluZyhmbmFtZS5kYXRhKCksIDQpKTsKLSAgQVNTRVJUX1RSVUUoUGFyc2VGaWxlTmFtZShmbmFt
ZS5jX3N0cigpICsgNCwgJm51bWJlciwgJnR5cGUpKTsKLSAgQVNTRVJUX0VRKDEwMCwgbnVtYmVy
KTsKLSAgQVNTRVJUX0VRKGtEZXNjcmlwdG9yRmlsZSwgdHlwZSk7Ci0KLSAgZm5hbWUgPSBUZW1w
RmlsZU5hbWUoInRtcCIsIDk5OSk7Ci0gIEFTU0VSVF9FUSgidG1wLyIsIHN0ZDo6c3RyaW5nKGZu
YW1lLmRhdGEoKSwgNCkpOwotICBBU1NFUlRfVFJVRShQYXJzZUZpbGVOYW1lKGZuYW1lLmNfc3Ry
KCkgKyA0LCAmbnVtYmVyLCAmdHlwZSkpOwotICBBU1NFUlRfRVEoOTk5LCBudW1iZXIpOwotICBB
U1NFUlRfRVEoa1RlbXBGaWxlLCB0eXBlKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIK
LQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7Ci0gIHJldHVybiBsZXZlbGRiOjp0
ZXN0OjpSdW5BbGxUZXN0cygpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi9kYi9sZXZlbGRiX21haW4uY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2xl
dmVsZGJfbWFpbi5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTk1ZDc2MS4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2xldmVsZGJfbWFpbi5jYwor
KysgL2Rldi9udWxsCkBAIC0xLDIzOCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhl
IExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBu
YW1lcyBvZiBjb250cmlidXRvcnMuCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgImRi
L2RiZm9ybWF0LmgiCi0jaW5jbHVkZSAiZGIvZmlsZW5hbWUuaCIKLSNpbmNsdWRlICJkYi9sb2df
cmVhZGVyLmgiCi0jaW5jbHVkZSAiZGIvdmVyc2lvbl9lZGl0LmgiCi0jaW5jbHVkZSAiZGIvd3Jp
dGVfYmF0Y2hfaW50ZXJuYWwuaCIKLSNpbmNsdWRlICJsZXZlbGRiL2Vudi5oIgotI2luY2x1ZGUg
ImxldmVsZGIvaXRlcmF0b3IuaCIKLSNpbmNsdWRlICJsZXZlbGRiL29wdGlvbnMuaCIKLSNpbmNs
dWRlICJsZXZlbGRiL3N0YXR1cy5oIgotI2luY2x1ZGUgImxldmVsZGIvdGFibGUuaCIKLSNpbmNs
dWRlICJsZXZlbGRiL3dyaXRlX2JhdGNoLmgiCi0jaW5jbHVkZSAidXRpbC9sb2dnaW5nLmgiCi0K
LW5hbWVzcGFjZSBsZXZlbGRiIHsKLQotbmFtZXNwYWNlIHsKLQotYm9vbCBHdWVzc1R5cGUoY29u
c3Qgc3RkOjpzdHJpbmcmIGZuYW1lLCBGaWxlVHlwZSogdHlwZSkgewotICBzaXplX3QgcG9zID0g
Zm5hbWUucmZpbmQoJy8nKTsKLSAgc3RkOjpzdHJpbmcgYmFzZW5hbWU7Ci0gIGlmIChwb3MgPT0g
c3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICBiYXNlbmFtZSA9IGZuYW1lOwotICB9IGVsc2Ugewot
ICAgIGJhc2VuYW1lID0gc3RkOjpzdHJpbmcoZm5hbWUuZGF0YSgpICsgcG9zICsgMSwgZm5hbWUu
c2l6ZSgpIC0gcG9zIC0gMSk7Ci0gIH0KLSAgdWludDY0X3QgaWdub3JlZDsKLSAgcmV0dXJuIFBh
cnNlRmlsZU5hbWUoYmFzZW5hbWUsICZpZ25vcmVkLCB0eXBlKTsKLX0KLQotLy8gTm90aWZpZWQg
d2hlbiBsb2cgcmVhZGVyIGVuY291bnRlcnMgY29ycnVwdGlvbi4KLWNsYXNzIENvcnJ1cHRpb25S
ZXBvcnRlciA6IHB1YmxpYyBsb2c6OlJlYWRlcjo6UmVwb3J0ZXIgewotIHB1YmxpYzoKLSAgdmly
dHVhbCB2b2lkIENvcnJ1cHRpb24oc2l6ZV90IGJ5dGVzLCBjb25zdCBTdGF0dXMmIHN0YXR1cykg
ewotICAgIHByaW50ZigiY29ycnVwdGlvbjogJWQgYnl0ZXM7ICVzXG4iLAotICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihieXRlcyksCi0gICAgICAgICAgICBzdGF0dXMuVG9TdHJpbmcoKS5j
X3N0cigpKTsKLSAgfQotfTsKLQotLy8gUHJpbnQgY29udGVudHMgb2YgYSBsb2cgZmlsZS4gKCpm
dW5jKSgpIGlzIGNhbGxlZCBvbiBldmVyeSByZWNvcmQuCi1ib29sIFByaW50TG9nQ29udGVudHMo
RW52KiBlbnYsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSwKLSAgICAgICAgICAgICAgICAgICAg
ICB2b2lkICgqZnVuYykoU2xpY2UpKSB7Ci0gIFNlcXVlbnRpYWxGaWxlKiBmaWxlOwotICBTdGF0
dXMgcyA9IGVudi0+TmV3U2VxdWVudGlhbEZpbGUoZm5hbWUsICZmaWxlKTsKLSAgaWYgKCFzLm9r
KCkpIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBzLlRvU3RyaW5nKCkuY19zdHIoKSk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIENvcnJ1cHRpb25SZXBvcnRlciByZXBvcnRlcjsK
LSAgbG9nOjpSZWFkZXIgcmVhZGVyKGZpbGUsICZyZXBvcnRlciwgdHJ1ZSwgMCk7Ci0gIFNsaWNl
IHJlY29yZDsKLSAgc3RkOjpzdHJpbmcgc2NyYXRjaDsKLSAgd2hpbGUgKHJlYWRlci5SZWFkUmVj
b3JkKCZyZWNvcmQsICZzY3JhdGNoKSkgewotICAgIHByaW50ZigiLS0tIG9mZnNldCAlbGx1OyAi
LAotICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHJlYWRlci5MYXN0
UmVjb3JkT2Zmc2V0KCkpKTsKLSAgICAoKmZ1bmMpKHJlY29yZCk7Ci0gIH0KLSAgZGVsZXRlIGZp
bGU7Ci0gIHJldHVybiB0cnVlOwotfQotCi0vLyBDYWxsZWQgb24gZXZlcnkgaXRlbSBmb3VuZCBp
biBhIFdyaXRlQmF0Y2guCi1jbGFzcyBXcml0ZUJhdGNoSXRlbVByaW50ZXIgOiBwdWJsaWMgV3Jp
dGVCYXRjaDo6SGFuZGxlciB7Ci0gcHVibGljOgotICB1aW50NjRfdCBvZmZzZXRfOwotICB1aW50
NjRfdCBzZXF1ZW5jZV87Ci0KLSAgdmlydHVhbCB2b2lkIFB1dChjb25zdCBTbGljZSYga2V5LCBj
b25zdCBTbGljZSYgdmFsdWUpIHsKLSAgICBwcmludGYoIiAgcHV0ICclcycgJyVzJ1xuIiwKLSAg
ICAgICAgICAgRXNjYXBlU3RyaW5nKGtleSkuY19zdHIoKSwKLSAgICAgICAgICAgRXNjYXBlU3Ry
aW5nKHZhbHVlKS5jX3N0cigpKTsKLSAgfQotICB2aXJ0dWFsIHZvaWQgRGVsZXRlKGNvbnN0IFNs
aWNlJiBrZXkpIHsKLSAgICBwcmludGYoIiAgZGVsICclcydcbiIsCi0gICAgICAgICAgIEVzY2Fw
ZVN0cmluZyhrZXkpLmNfc3RyKCkpOwotICB9Ci19OwotCi0KLS8vIENhbGxlZCBvbiBldmVyeSBs
b2cgcmVjb3JkIChlYWNoIG9uZSBvZiB3aGljaCBpcyBhIFdyaXRlQmF0Y2gpCi0vLyBmb3VuZCBp
biBhIGtMb2dGaWxlLgotc3RhdGljIHZvaWQgV3JpdGVCYXRjaFByaW50ZXIoU2xpY2UgcmVjb3Jk
KSB7Ci0gIGlmIChyZWNvcmQuc2l6ZSgpIDwgMTIpIHsKLSAgICBwcmludGYoImxvZyByZWNvcmQg
bGVuZ3RoICVkIGlzIHRvbyBzbWFsbFxuIiwKLSAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihy
ZWNvcmQuc2l6ZSgpKSk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIFdyaXRlQmF0Y2ggYmF0Y2g7Ci0g
IFdyaXRlQmF0Y2hJbnRlcm5hbDo6U2V0Q29udGVudHMoJmJhdGNoLCByZWNvcmQpOwotICBwcmlu
dGYoInNlcXVlbmNlICVsbHVcbiIsCi0gICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25n
IGxvbmc+KFdyaXRlQmF0Y2hJbnRlcm5hbDo6U2VxdWVuY2UoJmJhdGNoKSkpOwotICBXcml0ZUJh
dGNoSXRlbVByaW50ZXIgYmF0Y2hfaXRlbV9wcmludGVyOwotICBTdGF0dXMgcyA9IGJhdGNoLkl0
ZXJhdGUoJmJhdGNoX2l0ZW1fcHJpbnRlcik7Ci0gIGlmICghcy5vaygpKSB7Ci0gICAgcHJpbnRm
KCIgIGVycm9yOiAlc1xuIiwgcy5Ub1N0cmluZygpLmNfc3RyKCkpOwotICB9Ci19Ci0KLWJvb2wg
RHVtcExvZyhFbnYqIGVudiwgY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lKSB7Ci0gIHJldHVybiBQ
cmludExvZ0NvbnRlbnRzKGVudiwgZm5hbWUsIFdyaXRlQmF0Y2hQcmludGVyKTsKLX0KLQotLy8g
Q2FsbGVkIG9uIGV2ZXJ5IGxvZyByZWNvcmQgKGVhY2ggb25lIG9mIHdoaWNoIGlzIGEgV3JpdGVC
YXRjaCkKLS8vIGZvdW5kIGluIGEga0Rlc2NyaXB0b3JGaWxlLgotc3RhdGljIHZvaWQgVmVyc2lv
bkVkaXRQcmludGVyKFNsaWNlIHJlY29yZCkgewotICBWZXJzaW9uRWRpdCBlZGl0OwotICBTdGF0
dXMgcyA9IGVkaXQuRGVjb2RlRnJvbShyZWNvcmQpOwotICBpZiAoIXMub2soKSkgewotICAgIHBy
aW50ZigiJXNcbiIsIHMuVG9TdHJpbmcoKS5jX3N0cigpKTsKLSAgICByZXR1cm47Ci0gIH0KLSAg
cHJpbnRmKCIlcyIsIGVkaXQuRGVidWdTdHJpbmcoKS5jX3N0cigpKTsKLX0KLQotYm9vbCBEdW1w
RGVzY3JpcHRvcihFbnYqIGVudiwgY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lKSB7Ci0gIHJldHVy
biBQcmludExvZ0NvbnRlbnRzKGVudiwgZm5hbWUsIFZlcnNpb25FZGl0UHJpbnRlcik7Ci19Ci0K
LWJvb2wgRHVtcFRhYmxlKEVudiogZW52LCBjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUpIHsKLSAg
dWludDY0X3QgZmlsZV9zaXplOwotICBSYW5kb21BY2Nlc3NGaWxlKiBmaWxlID0gTlVMTDsKLSAg
VGFibGUqIHRhYmxlID0gTlVMTDsKLSAgU3RhdHVzIHMgPSBlbnYtPkdldEZpbGVTaXplKGZuYW1l
LCAmZmlsZV9zaXplKTsKLSAgaWYgKHMub2soKSkgewotICAgIHMgPSBlbnYtPk5ld1JhbmRvbUFj
Y2Vzc0ZpbGUoZm5hbWUsICZmaWxlKTsKLSAgfQotICBpZiAocy5vaygpKSB7Ci0gICAgLy8gV2Ug
dXNlIHRoZSBkZWZhdWx0IGNvbXBhcmF0b3IsIHdoaWNoIG1heSBvciBtYXkgbm90IG1hdGNoIHRo
ZQotICAgIC8vIGNvbXBhcmF0b3IgdXNlZCBpbiB0aGlzIGRhdGFiYXNlLiBIb3dldmVyIHRoaXMg
c2hvdWxkIG5vdCBjYXVzZQotICAgIC8vIHByb2JsZW1zIHNpbmNlIHdlIG9ubHkgdXNlIFRhYmxl
IG9wZXJhdGlvbnMgdGhhdCBkbyBub3QgcmVxdWlyZQotICAgIC8vIGFueSBjb21wYXJpc29ucy4g
IEluIHBhcnRpY3VsYXIsIHdlIGRvIG5vdCBjYWxsIFNlZWsgb3IgUHJldi4KLSAgICBzID0gVGFi
bGU6Ok9wZW4oT3B0aW9ucygpLCBmaWxlLCBmaWxlX3NpemUsICZ0YWJsZSk7Ci0gIH0KLSAgaWYg
KCFzLm9rKCkpIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBzLlRvU3RyaW5nKCkuY19z
dHIoKSk7Ci0gICAgZGVsZXRlIHRhYmxlOwotICAgIGRlbGV0ZSBmaWxlOwotICAgIHJldHVybiBm
YWxzZTsKLSAgfQotCi0gIFJlYWRPcHRpb25zIHJvOwotICByby5maWxsX2NhY2hlID0gZmFsc2U7
Ci0gIEl0ZXJhdG9yKiBpdGVyID0gdGFibGUtPk5ld0l0ZXJhdG9yKHJvKTsKLSAgZm9yIChpdGVy
LT5TZWVrVG9GaXJzdCgpOyBpdGVyLT5WYWxpZCgpOyBpdGVyLT5OZXh0KCkpIHsKLSAgICBQYXJz
ZWRJbnRlcm5hbEtleSBrZXk7Ci0gICAgaWYgKCFQYXJzZUludGVybmFsS2V5KGl0ZXItPmtleSgp
LCAma2V5KSkgewotICAgICAgcHJpbnRmKCJiYWRrZXkgJyVzJyA9PiAnJXMnXG4iLAotICAgICAg
ICAgICAgIEVzY2FwZVN0cmluZyhpdGVyLT5rZXkoKSkuY19zdHIoKSwKLSAgICAgICAgICAgICBF
c2NhcGVTdHJpbmcoaXRlci0+dmFsdWUoKSkuY19zdHIoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IGNoYXIga2J1ZlsyMF07Ci0gICAgICBjb25zdCBjaGFyKiB0eXBlOwotICAgICAgaWYgKGtleS50
eXBlID09IGtUeXBlRGVsZXRpb24pIHsKLSAgICAgICAgdHlwZSA9ICJkZWwiOwotICAgICAgfSBl
bHNlIGlmIChrZXkudHlwZSA9PSBrVHlwZVZhbHVlKSB7Ci0gICAgICAgIHR5cGUgPSAidmFsIjsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHNucHJpbnRmKGtidWYsIHNpemVvZihrYnVmKSwgIiVk
Iiwgc3RhdGljX2Nhc3Q8aW50PihrZXkudHlwZSkpOwotICAgICAgICB0eXBlID0ga2J1ZjsKLSAg
ICAgIH0KLSAgICAgIHByaW50ZigiJyVzJyBAICU4bGx1IDogJXMgPT4gJyVzJ1xuIiwKLSAgICAg
ICAgICAgICBFc2NhcGVTdHJpbmcoa2V5LnVzZXJfa2V5KS5jX3N0cigpLAotICAgICAgICAgICAg
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oa2V5LnNlcXVlbmNlKSwKLSAgICAgICAg
ICAgICB0eXBlLAotICAgICAgICAgICAgIEVzY2FwZVN0cmluZyhpdGVyLT52YWx1ZSgpKS5jX3N0
cigpKTsKLSAgICB9Ci0gIH0KLSAgcyA9IGl0ZXItPnN0YXR1cygpOwotICBpZiAoIXMub2soKSkg
ewotICAgIHByaW50ZigiaXRlcmF0b3IgZXJyb3I6ICVzXG4iLCBzLlRvU3RyaW5nKCkuY19zdHIo
KSk7Ci0gIH0KLQotICBkZWxldGUgaXRlcjsKLSAgZGVsZXRlIHRhYmxlOwotICBkZWxldGUgZmls
ZTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRHVtcEZpbGUoRW52KiBlbnYsIGNvbnN0IHN0
ZDo6c3RyaW5nJiBmbmFtZSkgewotICBGaWxlVHlwZSBmdHlwZTsKLSAgaWYgKCFHdWVzc1R5cGUo
Zm5hbWUsICZmdHlwZSkpIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiB1bmtub3duIGZpbGUg
dHlwZVxuIiwgZm5hbWUuY19zdHIoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHN3aXRj
aCAoZnR5cGUpIHsKLSAgICBjYXNlIGtMb2dGaWxlOiAgICAgICAgIHJldHVybiBEdW1wTG9nKGVu
diwgZm5hbWUpOwotICAgIGNhc2Uga0Rlc2NyaXB0b3JGaWxlOiAgcmV0dXJuIER1bXBEZXNjcmlw
dG9yKGVudiwgZm5hbWUpOwotICAgIGNhc2Uga1RhYmxlRmlsZTogICAgICAgcmV0dXJuIER1bXBU
YWJsZShlbnYsIGZuYW1lKTsKLQotICAgIGRlZmF1bHQ6IHsKLSAgICAgIGZwcmludGYoc3RkZXJy
LCAiJXM6IG5vdCBhIGR1bXAtYWJsZSBmaWxlIHR5cGVcbiIsIGZuYW1lLmNfc3RyKCkpOwotICAg
ICAgYnJlYWs7Ci0gICAgfQotICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBIYW5kbGVE
dW1wQ29tbWFuZChFbnYqIGVudiwgY2hhcioqIGZpbGVzLCBpbnQgbnVtKSB7Ci0gIGJvb2wgb2sg
PSB0cnVlOwotICBmb3IgKGludCBpID0gMDsgaSA8IG51bTsgaSsrKSB7Ci0gICAgb2sgJj0gRHVt
cEZpbGUoZW52LCBmaWxlc1tpXSk7Ci0gIH0KLSAgcmV0dXJuIG9rOwotfQotCi19Ci19ICAvLyBu
YW1lc3BhY2UgbGV2ZWxkYgotCi1zdGF0aWMgdm9pZCBVc2FnZSgpIHsKLSAgZnByaW50ZigKLSAg
ICAgIHN0ZGVyciwKLSAgICAgICJVc2FnZTogbGV2ZWxkYnV0aWwgY29tbWFuZC4uLlxuIgotICAg
ICAgIiAgIGR1bXAgZmlsZXMuLi4gICAgICAgICAtLSBkdW1wIGNvbnRlbnRzIG9mIHNwZWNpZmll
ZCBmaWxlc1xuIgotICAgICAgKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2
KSB7Ci0gIGxldmVsZGI6OkVudiogZW52ID0gbGV2ZWxkYjo6RW52OjpEZWZhdWx0KCk7Ci0gIGJv
b2wgb2sgPSB0cnVlOwotICBpZiAoYXJnYyA8IDIpIHsKLSAgICBVc2FnZSgpOwotICAgIG9rID0g
ZmFsc2U7Ci0gIH0gZWxzZSB7Ci0gICAgc3RkOjpzdHJpbmcgY29tbWFuZCA9IGFyZ3ZbMV07Ci0g
ICAgaWYgKGNvbW1hbmQgPT0gImR1bXAiKSB7Ci0gICAgICBvayA9IGxldmVsZGI6OkhhbmRsZUR1
bXBDb21tYW5kKGVudiwgYXJndisyLCBhcmdjLTIpOwotICAgIH0gZWxzZSB7Ci0gICAgICBVc2Fn
ZSgpOwotICAgICAgb2sgPSBmYWxzZTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIChvayA/IDAgOiAx
KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvbG9nX2Zvcm1h
dC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9sb2dfZm9ybWF0LmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2OTBjYjkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi9kYi9sb2dfZm9ybWF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCww
IEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCi0vLwot
Ly8gTG9nIGZvcm1hdCBpbmZvcm1hdGlvbiBzaGFyZWQgYnkgcmVhZGVyIGFuZCB3cml0ZXIuCi0v
LyBTZWUgLi4vZG9jL2xvZ19mb3JtYXQudHh0IGZvciBtb3JlIGRldGFpbC4KLQotI2lmbmRlZiBT
VE9SQUdFX0xFVkVMREJfREJfTE9HX0ZPUk1BVF9IXwotI2RlZmluZSBTVE9SQUdFX0xFVkVMREJf
REJfTE9HX0ZPUk1BVF9IXwotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7Ci1uYW1lc3BhY2UgbG9nIHsK
LQotZW51bSBSZWNvcmRUeXBlIHsKLSAgLy8gWmVybyBpcyByZXNlcnZlZCBmb3IgcHJlYWxsb2Nh
dGVkIGZpbGVzCi0gIGtaZXJvVHlwZSA9IDAsCi0KLSAga0Z1bGxUeXBlID0gMSwKLQotICAvLyBG
b3IgZnJhZ21lbnRzCi0gIGtGaXJzdFR5cGUgPSAyLAotICBrTWlkZGxlVHlwZSA9IDMsCi0gIGtM
YXN0VHlwZSA9IDQKLX07Ci1zdGF0aWMgY29uc3QgaW50IGtNYXhSZWNvcmRUeXBlID0ga0xhc3RU
eXBlOwotCi1zdGF0aWMgY29uc3QgaW50IGtCbG9ja1NpemUgPSAzMjc2ODsKLQotLy8gSGVhZGVy
IGlzIGNoZWNrc3VtICg0IGJ5dGVzKSwgdHlwZSAoMSBieXRlKSwgbGVuZ3RoICgyIGJ5dGVzKS4K
LXN0YXRpYyBjb25zdCBpbnQga0hlYWRlclNpemUgPSA0ICsgMSArIDI7Ci0KLX0gIC8vIG5hbWVz
cGFjZSBsb2cKLX0gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCi0KLSNlbmRpZiAgLy8gU1RPUkFHRV9M
RVZFTERCX0RCX0xPR19GT1JNQVRfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvZGIvbG9nX3JlYWRlci5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvbG9n
X3JlYWRlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM1ZjExNS4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2xvZ19yZWFkZXIuY2MKKysrIC9k
ZXYvbnVsbApAQCAtMSwyNTkgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZl
bERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMg
b2YgY29udHJpYnV0b3JzLgotCi0jaW5jbHVkZSAiZGIvbG9nX3JlYWRlci5oIgotCi0jaW5jbHVk
ZSA8c3RkaW8uaD4KLSNpbmNsdWRlICJsZXZlbGRiL2Vudi5oIgotI2luY2x1ZGUgInV0aWwvY29k
aW5nLmgiCi0jaW5jbHVkZSAidXRpbC9jcmMzMmMuaCIKLQotbmFtZXNwYWNlIGxldmVsZGIgewot
bmFtZXNwYWNlIGxvZyB7Ci0KLVJlYWRlcjo6UmVwb3J0ZXI6On5SZXBvcnRlcigpIHsKLX0KLQot
UmVhZGVyOjpSZWFkZXIoU2VxdWVudGlhbEZpbGUqIGZpbGUsIFJlcG9ydGVyKiByZXBvcnRlciwg
Ym9vbCBjaGVja3N1bSwKLSAgICAgICAgICAgICAgIHVpbnQ2NF90IGluaXRpYWxfb2Zmc2V0KQot
ICAgIDogZmlsZV8oZmlsZSksCi0gICAgICByZXBvcnRlcl8ocmVwb3J0ZXIpLAotICAgICAgY2hl
Y2tzdW1fKGNoZWNrc3VtKSwKLSAgICAgIGJhY2tpbmdfc3RvcmVfKG5ldyBjaGFyW2tCbG9ja1Np
emVdKSwKLSAgICAgIGJ1ZmZlcl8oKSwKLSAgICAgIGVvZl8oZmFsc2UpLAotICAgICAgbGFzdF9y
ZWNvcmRfb2Zmc2V0XygwKSwKLSAgICAgIGVuZF9vZl9idWZmZXJfb2Zmc2V0XygwKSwKLSAgICAg
IGluaXRpYWxfb2Zmc2V0Xyhpbml0aWFsX29mZnNldCkgewotfQotCi1SZWFkZXI6On5SZWFkZXIo
KSB7Ci0gIGRlbGV0ZVtdIGJhY2tpbmdfc3RvcmVfOwotfQotCi1ib29sIFJlYWRlcjo6U2tpcFRv
SW5pdGlhbEJsb2NrKCkgewotICBzaXplX3Qgb2Zmc2V0X2luX2Jsb2NrID0gaW5pdGlhbF9vZmZz
ZXRfICUga0Jsb2NrU2l6ZTsKLSAgdWludDY0X3QgYmxvY2tfc3RhcnRfbG9jYXRpb24gPSBpbml0
aWFsX29mZnNldF8gLSBvZmZzZXRfaW5fYmxvY2s7Ci0KLSAgLy8gRG9uJ3Qgc2VhcmNoIGEgYmxv
Y2sgaWYgd2UnZCBiZSBpbiB0aGUgdHJhaWxlcgotICBpZiAob2Zmc2V0X2luX2Jsb2NrID4ga0Js
b2NrU2l6ZSAtIDYpIHsKLSAgICBvZmZzZXRfaW5fYmxvY2sgPSAwOwotICAgIGJsb2NrX3N0YXJ0
X2xvY2F0aW9uICs9IGtCbG9ja1NpemU7Ci0gIH0KLQotICBlbmRfb2ZfYnVmZmVyX29mZnNldF8g
PSBibG9ja19zdGFydF9sb2NhdGlvbjsKLQotICAvLyBTa2lwIHRvIHN0YXJ0IG9mIGZpcnN0IGJs
b2NrIHRoYXQgY2FuIGNvbnRhaW4gdGhlIGluaXRpYWwgcmVjb3JkCi0gIGlmIChibG9ja19zdGFy
dF9sb2NhdGlvbiA+IDApIHsKLSAgICBTdGF0dXMgc2tpcF9zdGF0dXMgPSBmaWxlXy0+U2tpcChi
bG9ja19zdGFydF9sb2NhdGlvbik7Ci0gICAgaWYgKCFza2lwX3N0YXR1cy5vaygpKSB7Ci0gICAg
ICBSZXBvcnREcm9wKGJsb2NrX3N0YXJ0X2xvY2F0aW9uLCBza2lwX3N0YXR1cyk7Ci0gICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVh
ZGVyOjpSZWFkUmVjb3JkKFNsaWNlKiByZWNvcmQsIHN0ZDo6c3RyaW5nKiBzY3JhdGNoKSB7Ci0g
IGlmIChsYXN0X3JlY29yZF9vZmZzZXRfIDwgaW5pdGlhbF9vZmZzZXRfKSB7Ci0gICAgaWYgKCFT
a2lwVG9Jbml0aWFsQmxvY2soKSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQot
Ci0gIHNjcmF0Y2gtPmNsZWFyKCk7Ci0gIHJlY29yZC0+Y2xlYXIoKTsKLSAgYm9vbCBpbl9mcmFn
bWVudGVkX3JlY29yZCA9IGZhbHNlOwotICAvLyBSZWNvcmQgb2Zmc2V0IG9mIHRoZSBsb2dpY2Fs
IHJlY29yZCB0aGF0IHdlJ3JlIHJlYWRpbmcKLSAgLy8gMCBpcyBhIGR1bW15IHZhbHVlIHRvIG1h
a2UgY29tcGlsZXJzIGhhcHB5Ci0gIHVpbnQ2NF90IHByb3NwZWN0aXZlX3JlY29yZF9vZmZzZXQg
PSAwOwotCi0gIFNsaWNlIGZyYWdtZW50OwotICB3aGlsZSAodHJ1ZSkgewotICAgIHVpbnQ2NF90
IHBoeXNpY2FsX3JlY29yZF9vZmZzZXQgPSBlbmRfb2ZfYnVmZmVyX29mZnNldF8gLSBidWZmZXJf
LnNpemUoKTsKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgcmVjb3JkX3R5cGUgPSBSZWFkUGh5c2lj
YWxSZWNvcmQoJmZyYWdtZW50KTsKLSAgICBzd2l0Y2ggKHJlY29yZF90eXBlKSB7Ci0gICAgICBj
YXNlIGtGdWxsVHlwZToKLSAgICAgICAgaWYgKGluX2ZyYWdtZW50ZWRfcmVjb3JkKSB7Ci0gICAg
ICAgICAgLy8gSGFuZGxlIGJ1ZyBpbiBlYXJsaWVyIHZlcnNpb25zIG9mIGxvZzo6V3JpdGVyIHdo
ZXJlCi0gICAgICAgICAgLy8gaXQgY291bGQgZW1pdCBhbiBlbXB0eSBrRmlyc3RUeXBlIHJlY29y
ZCBhdCB0aGUgdGFpbCBlbmQKLSAgICAgICAgICAvLyBvZiBhIGJsb2NrIGZvbGxvd2VkIGJ5IGEg
a0Z1bGxUeXBlIG9yIGtGaXJzdFR5cGUgcmVjb3JkCi0gICAgICAgICAgLy8gYXQgdGhlIGJlZ2lu
bmluZyBvZiB0aGUgbmV4dCBibG9jay4KLSAgICAgICAgICBpZiAoc2NyYXRjaC0+ZW1wdHkoKSkg
ewotICAgICAgICAgICAgaW5fZnJhZ21lbnRlZF9yZWNvcmQgPSBmYWxzZTsKLSAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgUmVwb3J0Q29ycnVwdGlvbihzY3JhdGNoLT5zaXplKCksICJw
YXJ0aWFsIHJlY29yZCB3aXRob3V0IGVuZCgxKSIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBwcm9zcGVjdGl2ZV9yZWNvcmRfb2Zmc2V0ID0gcGh5c2ljYWxfcmVjb3JkX29mZnNl
dDsKLSAgICAgICAgc2NyYXRjaC0+Y2xlYXIoKTsKLSAgICAgICAgKnJlY29yZCA9IGZyYWdtZW50
OwotICAgICAgICBsYXN0X3JlY29yZF9vZmZzZXRfID0gcHJvc3BlY3RpdmVfcmVjb3JkX29mZnNl
dDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgIGNhc2Uga0ZpcnN0VHlwZToKLSAgICAg
ICAgaWYgKGluX2ZyYWdtZW50ZWRfcmVjb3JkKSB7Ci0gICAgICAgICAgLy8gSGFuZGxlIGJ1ZyBp
biBlYXJsaWVyIHZlcnNpb25zIG9mIGxvZzo6V3JpdGVyIHdoZXJlCi0gICAgICAgICAgLy8gaXQg
Y291bGQgZW1pdCBhbiBlbXB0eSBrRmlyc3RUeXBlIHJlY29yZCBhdCB0aGUgdGFpbCBlbmQKLSAg
ICAgICAgICAvLyBvZiBhIGJsb2NrIGZvbGxvd2VkIGJ5IGEga0Z1bGxUeXBlIG9yIGtGaXJzdFR5
cGUgcmVjb3JkCi0gICAgICAgICAgLy8gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBibG9j
ay4KLSAgICAgICAgICBpZiAoc2NyYXRjaC0+ZW1wdHkoKSkgewotICAgICAgICAgICAgaW5fZnJh
Z21lbnRlZF9yZWNvcmQgPSBmYWxzZTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
UmVwb3J0Q29ycnVwdGlvbihzY3JhdGNoLT5zaXplKCksICJwYXJ0aWFsIHJlY29yZCB3aXRob3V0
IGVuZCgyKSIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBwcm9zcGVjdGl2ZV9y
ZWNvcmRfb2Zmc2V0ID0gcGh5c2ljYWxfcmVjb3JkX29mZnNldDsKLSAgICAgICAgc2NyYXRjaC0+
YXNzaWduKGZyYWdtZW50LmRhdGEoKSwgZnJhZ21lbnQuc2l6ZSgpKTsKLSAgICAgICAgaW5fZnJh
Z21lbnRlZF9yZWNvcmQgPSB0cnVlOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBrTWlk
ZGxlVHlwZToKLSAgICAgICAgaWYgKCFpbl9mcmFnbWVudGVkX3JlY29yZCkgewotICAgICAgICAg
IFJlcG9ydENvcnJ1cHRpb24oZnJhZ21lbnQuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIm1pc3Npbmcgc3RhcnQgb2YgZnJhZ21lbnRlZCByZWNvcmQoMSkiKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICBzY3JhdGNoLT5hcHBlbmQoZnJhZ21lbnQuZGF0YSgpLCBmcmFn
bWVudC5zaXplKCkpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIGtM
YXN0VHlwZToKLSAgICAgICAgaWYgKCFpbl9mcmFnbWVudGVkX3JlY29yZCkgewotICAgICAgICAg
IFJlcG9ydENvcnJ1cHRpb24oZnJhZ21lbnQuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIm1pc3Npbmcgc3RhcnQgb2YgZnJhZ21lbnRlZCByZWNvcmQoMikiKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICBzY3JhdGNoLT5hcHBlbmQoZnJhZ21lbnQuZGF0YSgpLCBmcmFn
bWVudC5zaXplKCkpOwotICAgICAgICAgICpyZWNvcmQgPSBTbGljZSgqc2NyYXRjaCk7Ci0gICAg
ICAgICAgbGFzdF9yZWNvcmRfb2Zmc2V0XyA9IHByb3NwZWN0aXZlX3JlY29yZF9vZmZzZXQ7Ci0g
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAg
IGNhc2Uga0VvZjoKLSAgICAgICAgaWYgKGluX2ZyYWdtZW50ZWRfcmVjb3JkKSB7Ci0gICAgICAg
ICAgUmVwb3J0Q29ycnVwdGlvbihzY3JhdGNoLT5zaXplKCksICJwYXJ0aWFsIHJlY29yZCB3aXRo
b3V0IGVuZCgzKSIpOwotICAgICAgICAgIHNjcmF0Y2gtPmNsZWFyKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICBjYXNlIGtCYWRSZWNvcmQ6Ci0gICAgICAgIGlm
IChpbl9mcmFnbWVudGVkX3JlY29yZCkgewotICAgICAgICAgIFJlcG9ydENvcnJ1cHRpb24oc2Ny
YXRjaC0+c2l6ZSgpLCAiZXJyb3IgaW4gbWlkZGxlIG9mIHJlY29yZCIpOwotICAgICAgICAgIGlu
X2ZyYWdtZW50ZWRfcmVjb3JkID0gZmFsc2U7Ci0gICAgICAgICAgc2NyYXRjaC0+Y2xlYXIoKTsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgZGVmYXVsdDogewotICAgICAgICBj
aGFyIGJ1Zls0MF07Ci0gICAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJ1bmtub3du
IHJlY29yZCB0eXBlICV1IiwgcmVjb3JkX3R5cGUpOwotICAgICAgICBSZXBvcnRDb3JydXB0aW9u
KAotICAgICAgICAgICAgKGZyYWdtZW50LnNpemUoKSArIChpbl9mcmFnbWVudGVkX3JlY29yZCA/
IHNjcmF0Y2gtPnNpemUoKSA6IDApKSwKLSAgICAgICAgICAgIGJ1Zik7Ci0gICAgICAgIGluX2Zy
YWdtZW50ZWRfcmVjb3JkID0gZmFsc2U7Ci0gICAgICAgIHNjcmF0Y2gtPmNsZWFyKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLXVp
bnQ2NF90IFJlYWRlcjo6TGFzdFJlY29yZE9mZnNldCgpIHsKLSAgcmV0dXJuIGxhc3RfcmVjb3Jk
X29mZnNldF87Ci19Ci0KLXZvaWQgUmVhZGVyOjpSZXBvcnRDb3JydXB0aW9uKHNpemVfdCBieXRl
cywgY29uc3QgY2hhciogcmVhc29uKSB7Ci0gIFJlcG9ydERyb3AoYnl0ZXMsIFN0YXR1czo6Q29y
cnVwdGlvbihyZWFzb24pKTsKLX0KLQotdm9pZCBSZWFkZXI6OlJlcG9ydERyb3Aoc2l6ZV90IGJ5
dGVzLCBjb25zdCBTdGF0dXMmIHJlYXNvbikgewotICBpZiAocmVwb3J0ZXJfICE9IE5VTEwgJiYK
LSAgICAgIGVuZF9vZl9idWZmZXJfb2Zmc2V0XyAtIGJ1ZmZlcl8uc2l6ZSgpIC0gYnl0ZXMgPj0g
aW5pdGlhbF9vZmZzZXRfKSB7Ci0gICAgcmVwb3J0ZXJfLT5Db3JydXB0aW9uKGJ5dGVzLCByZWFz
b24pOwotICB9Ci19Ci0KLXVuc2lnbmVkIGludCBSZWFkZXI6OlJlYWRQaHlzaWNhbFJlY29yZChT
bGljZSogcmVzdWx0KSB7Ci0gIHdoaWxlICh0cnVlKSB7Ci0gICAgaWYgKGJ1ZmZlcl8uc2l6ZSgp
IDwga0hlYWRlclNpemUpIHsKLSAgICAgIGlmICghZW9mXykgewotICAgICAgICAvLyBMYXN0IHJl
YWQgd2FzIGEgZnVsbCByZWFkLCBzbyB0aGlzIGlzIGEgdHJhaWxlciB0byBza2lwCi0gICAgICAg
IGJ1ZmZlcl8uY2xlYXIoKTsKLSAgICAgICAgU3RhdHVzIHN0YXR1cyA9IGZpbGVfLT5SZWFkKGtC
bG9ja1NpemUsICZidWZmZXJfLCBiYWNraW5nX3N0b3JlXyk7Ci0gICAgICAgIGVuZF9vZl9idWZm
ZXJfb2Zmc2V0XyArPSBidWZmZXJfLnNpemUoKTsKLSAgICAgICAgaWYgKCFzdGF0dXMub2soKSkg
ewotICAgICAgICAgIGJ1ZmZlcl8uY2xlYXIoKTsKLSAgICAgICAgICBSZXBvcnREcm9wKGtCbG9j
a1NpemUsIHN0YXR1cyk7Ci0gICAgICAgICAgZW9mXyA9IHRydWU7Ci0gICAgICAgICAgcmV0dXJu
IGtFb2Y7Ci0gICAgICAgIH0gZWxzZSBpZiAoYnVmZmVyXy5zaXplKCkgPCBrQmxvY2tTaXplKSB7
Ci0gICAgICAgICAgZW9mXyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgY29udGludWU7Ci0g
ICAgICB9IGVsc2UgaWYgKGJ1ZmZlcl8uc2l6ZSgpID09IDApIHsKLSAgICAgICAgLy8gRW5kIG9m
IGZpbGUKLSAgICAgICAgcmV0dXJuIGtFb2Y7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzaXpl
X3QgZHJvcF9zaXplID0gYnVmZmVyXy5zaXplKCk7Ci0gICAgICAgIGJ1ZmZlcl8uY2xlYXIoKTsK
LSAgICAgICAgUmVwb3J0Q29ycnVwdGlvbihkcm9wX3NpemUsICJ0cnVuY2F0ZWQgcmVjb3JkIGF0
IGVuZCBvZiBmaWxlIik7Ci0gICAgICAgIHJldHVybiBrRW9mOwotICAgICAgfQotICAgIH0KLQot
ICAgIC8vIFBhcnNlIHRoZSBoZWFkZXIKLSAgICBjb25zdCBjaGFyKiBoZWFkZXIgPSBidWZmZXJf
LmRhdGEoKTsKLSAgICBjb25zdCB1aW50MzJfdCBhID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGhl
YWRlcls0XSkgJiAweGZmOwotICAgIGNvbnN0IHVpbnQzMl90IGIgPSBzdGF0aWNfY2FzdDx1aW50
MzJfdD4oaGVhZGVyWzVdKSAmIDB4ZmY7Ci0gICAgY29uc3QgdW5zaWduZWQgaW50IHR5cGUgPSBo
ZWFkZXJbNl07Ci0gICAgY29uc3QgdWludDMyX3QgbGVuZ3RoID0gYSB8IChiIDw8IDgpOwotICAg
IGlmIChrSGVhZGVyU2l6ZSArIGxlbmd0aCA+IGJ1ZmZlcl8uc2l6ZSgpKSB7Ci0gICAgICBzaXpl
X3QgZHJvcF9zaXplID0gYnVmZmVyXy5zaXplKCk7Ci0gICAgICBidWZmZXJfLmNsZWFyKCk7Ci0g
ICAgICBSZXBvcnRDb3JydXB0aW9uKGRyb3Bfc2l6ZSwgImJhZCByZWNvcmQgbGVuZ3RoIik7Ci0g
ICAgICByZXR1cm4ga0JhZFJlY29yZDsKLSAgICB9Ci0KLSAgICBpZiAodHlwZSA9PSBrWmVyb1R5
cGUgJiYgbGVuZ3RoID09IDApIHsKLSAgICAgIC8vIFNraXAgemVybyBsZW5ndGggcmVjb3JkIHdp
dGhvdXQgcmVwb3J0aW5nIGFueSBkcm9wcyBzaW5jZQotICAgICAgLy8gc3VjaCByZWNvcmRzIGFy
ZSBwcm9kdWNlZCBieSB0aGUgbW1hcCBiYXNlZCB3cml0aW5nIGNvZGUgaW4KLSAgICAgIC8vIGVu
dl9wb3NpeC5jYyB0aGF0IHByZWFsbG9jYXRlcyBmaWxlIHJlZ2lvbnMuCi0gICAgICBidWZmZXJf
LmNsZWFyKCk7Ci0gICAgICByZXR1cm4ga0JhZFJlY29yZDsKLSAgICB9Ci0KLSAgICAvLyBDaGVj
ayBjcmMKLSAgICBpZiAoY2hlY2tzdW1fKSB7Ci0gICAgICB1aW50MzJfdCBleHBlY3RlZF9jcmMg
PSBjcmMzMmM6OlVubWFzayhEZWNvZGVGaXhlZDMyKGhlYWRlcikpOwotICAgICAgdWludDMyX3Qg
YWN0dWFsX2NyYyA9IGNyYzMyYzo6VmFsdWUoaGVhZGVyICsgNiwgMSArIGxlbmd0aCk7Ci0gICAg
ICBpZiAoYWN0dWFsX2NyYyAhPSBleHBlY3RlZF9jcmMpIHsKLSAgICAgICAgLy8gRHJvcCB0aGUg
cmVzdCBvZiB0aGUgYnVmZmVyIHNpbmNlICJsZW5ndGgiIGl0c2VsZiBtYXkgaGF2ZQotICAgICAg
ICAvLyBiZWVuIGNvcnJ1cHRlZCBhbmQgaWYgd2UgdHJ1c3QgaXQsIHdlIGNvdWxkIGZpbmQgc29t
ZQotICAgICAgICAvLyBmcmFnbWVudCBvZiBhIHJlYWwgbG9nIHJlY29yZCB0aGF0IGp1c3QgaGFw
cGVucyB0byBsb29rCi0gICAgICAgIC8vIGxpa2UgYSB2YWxpZCBsb2cgcmVjb3JkLgotICAgICAg
ICBzaXplX3QgZHJvcF9zaXplID0gYnVmZmVyXy5zaXplKCk7Ci0gICAgICAgIGJ1ZmZlcl8uY2xl
YXIoKTsKLSAgICAgICAgUmVwb3J0Q29ycnVwdGlvbihkcm9wX3NpemUsICJjaGVja3N1bSBtaXNt
YXRjaCIpOwotICAgICAgICByZXR1cm4ga0JhZFJlY29yZDsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICBidWZmZXJfLnJlbW92ZV9wcmVmaXgoa0hlYWRlclNpemUgKyBsZW5ndGgpOwotCi0gICAgLy8g
U2tpcCBwaHlzaWNhbCByZWNvcmQgdGhhdCBzdGFydGVkIGJlZm9yZSBpbml0aWFsX29mZnNldF8K
LSAgICBpZiAoZW5kX29mX2J1ZmZlcl9vZmZzZXRfIC0gYnVmZmVyXy5zaXplKCkgLSBrSGVhZGVy
U2l6ZSAtIGxlbmd0aCA8Ci0gICAgICAgIGluaXRpYWxfb2Zmc2V0XykgewotICAgICAgcmVzdWx0
LT5jbGVhcigpOwotICAgICAgcmV0dXJuIGtCYWRSZWNvcmQ7Ci0gICAgfQotCi0gICAgKnJlc3Vs
dCA9IFNsaWNlKGhlYWRlciArIGtIZWFkZXJTaXplLCBsZW5ndGgpOwotICAgIHJldHVybiB0eXBl
OwotICB9Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBsb2cKLX0gIC8vIG5hbWVzcGFjZSBsZXZlbGRi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2xvZ19yZWFkZXIuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvbG9nX3JlYWRlci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4MmQ0YmVlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvZGIvbG9nX3JlYWRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAK
LS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4g
U2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KLQotI2lmbmRl
ZiBTVE9SQUdFX0xFVkVMREJfREJfTE9HX1JFQURFUl9IXwotI2RlZmluZSBTVE9SQUdFX0xFVkVM
REJfREJfTE9HX1JFQURFUl9IXwotCi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0KLSNpbmNsdWRlICJk
Yi9sb2dfZm9ybWF0LmgiCi0jaW5jbHVkZSAibGV2ZWxkYi9zbGljZS5oIgotI2luY2x1ZGUgImxl
dmVsZGIvc3RhdHVzLmgiCi0KLW5hbWVzcGFjZSBsZXZlbGRiIHsKLQotY2xhc3MgU2VxdWVudGlh
bEZpbGU7Ci0KLW5hbWVzcGFjZSBsb2cgewotCi1jbGFzcyBSZWFkZXIgewotIHB1YmxpYzoKLSAg
Ly8gSW50ZXJmYWNlIGZvciByZXBvcnRpbmcgZXJyb3JzLgotICBjbGFzcyBSZXBvcnRlciB7Ci0g
ICBwdWJsaWM6Ci0gICAgdmlydHVhbCB+UmVwb3J0ZXIoKTsKLQotICAgIC8vIFNvbWUgY29ycnVw
dGlvbiB3YXMgZGV0ZWN0ZWQuICAic2l6ZSIgaXMgdGhlIGFwcHJveGltYXRlIG51bWJlcgotICAg
IC8vIG9mIGJ5dGVzIGRyb3BwZWQgZHVlIHRvIHRoZSBjb3JydXB0aW9uLgotICAgIHZpcnR1YWwg
dm9pZCBDb3JydXB0aW9uKHNpemVfdCBieXRlcywgY29uc3QgU3RhdHVzJiBzdGF0dXMpID0gMDsK
LSAgfTsKLQotICAvLyBDcmVhdGUgYSByZWFkZXIgdGhhdCB3aWxsIHJldHVybiBsb2cgcmVjb3Jk
cyBmcm9tICIqZmlsZSIuCi0gIC8vICIqZmlsZSIgbXVzdCByZW1haW4gbGl2ZSB3aGlsZSB0aGlz
IFJlYWRlciBpcyBpbiB1c2UuCi0gIC8vCi0gIC8vIElmICJyZXBvcnRlciIgaXMgbm9uLU5VTEws
IGl0IGlzIG5vdGlmaWVkIHdoZW5ldmVyIHNvbWUgZGF0YSBpcwotICAvLyBkcm9wcGVkIGR1ZSB0
byBhIGRldGVjdGVkIGNvcnJ1cHRpb24uICAiKnJlcG9ydGVyIiBtdXN0IHJlbWFpbgotICAvLyBs
aXZlIHdoaWxlIHRoaXMgUmVhZGVyIGlzIGluIHVzZS4KLSAgLy8KLSAgLy8gSWYgImNoZWNrc3Vt
IiBpcyB0cnVlLCB2ZXJpZnkgY2hlY2tzdW1zIGlmIGF2YWlsYWJsZS4KLSAgLy8KLSAgLy8gVGhl
IFJlYWRlciB3aWxsIHN0YXJ0IHJlYWRpbmcgYXQgdGhlIGZpcnN0IHJlY29yZCBsb2NhdGVkIGF0
IHBoeXNpY2FsCi0gIC8vIHBvc2l0aW9uID49IGluaXRpYWxfb2Zmc2V0IHdpdGhpbiB0aGUgZmls
ZS4KLSAgUmVhZGVyKFNlcXVlbnRpYWxGaWxlKiBmaWxlLCBSZXBvcnRlciogcmVwb3J0ZXIsIGJv
b2wgY2hlY2tzdW0sCi0gICAgICAgICB1aW50NjRfdCBpbml0aWFsX29mZnNldCk7Ci0KLSAgflJl
YWRlcigpOwotCi0gIC8vIFJlYWQgdGhlIG5leHQgcmVjb3JkIGludG8gKnJlY29yZC4gIFJldHVy
bnMgdHJ1ZSBpZiByZWFkCi0gIC8vIHN1Y2Nlc3NmdWxseSwgZmFsc2UgaWYgd2UgaGl0IGVuZCBv
ZiB0aGUgaW5wdXQuICBNYXkgdXNlCi0gIC8vICIqc2NyYXRjaCIgYXMgdGVtcG9yYXJ5IHN0b3Jh
Z2UuICBUaGUgY29udGVudHMgZmlsbGVkIGluICpyZWNvcmQKLSAgLy8gd2lsbCBvbmx5IGJlIHZh
bGlkIHVudGlsIHRoZSBuZXh0IG11dGF0aW5nIG9wZXJhdGlvbiBvbiB0aGlzCi0gIC8vIHJlYWRl
ciBvciB0aGUgbmV4dCBtdXRhdGlvbiB0byAqc2NyYXRjaC4KLSAgYm9vbCBSZWFkUmVjb3JkKFNs
aWNlKiByZWNvcmQsIHN0ZDo6c3RyaW5nKiBzY3JhdGNoKTsKLQotICAvLyBSZXR1cm5zIHRoZSBw
aHlzaWNhbCBvZmZzZXQgb2YgdGhlIGxhc3QgcmVjb3JkIHJldHVybmVkIGJ5IFJlYWRSZWNvcmQu
Ci0gIC8vCi0gIC8vIFVuZGVmaW5lZCBiZWZvcmUgdGhlIGZpcnN0IGNhbGwgdG8gUmVhZFJlY29y
ZC4KLSAgdWludDY0X3QgTGFzdFJlY29yZE9mZnNldCgpOwotCi0gcHJpdmF0ZToKLSAgU2VxdWVu
dGlhbEZpbGUqIGNvbnN0IGZpbGVfOwotICBSZXBvcnRlciogY29uc3QgcmVwb3J0ZXJfOwotICBi
b29sIGNvbnN0IGNoZWNrc3VtXzsKLSAgY2hhciogY29uc3QgYmFja2luZ19zdG9yZV87Ci0gIFNs
aWNlIGJ1ZmZlcl87Ci0gIGJvb2wgZW9mXzsgICAvLyBMYXN0IFJlYWQoKSBpbmRpY2F0ZWQgRU9G
IGJ5IHJldHVybmluZyA8IGtCbG9ja1NpemUKLQotICAvLyBPZmZzZXQgb2YgdGhlIGxhc3QgcmVj
b3JkIHJldHVybmVkIGJ5IFJlYWRSZWNvcmQuCi0gIHVpbnQ2NF90IGxhc3RfcmVjb3JkX29mZnNl
dF87Ci0gIC8vIE9mZnNldCBvZiB0aGUgZmlyc3QgbG9jYXRpb24gcGFzdCB0aGUgZW5kIG9mIGJ1
ZmZlcl8uCi0gIHVpbnQ2NF90IGVuZF9vZl9idWZmZXJfb2Zmc2V0XzsKLQotICAvLyBPZmZzZXQg
YXQgd2hpY2ggdG8gc3RhcnQgbG9va2luZyBmb3IgdGhlIGZpcnN0IHJlY29yZCB0byByZXR1cm4K
LSAgdWludDY0X3QgY29uc3QgaW5pdGlhbF9vZmZzZXRfOwotCi0gIC8vIEV4dGVuZCByZWNvcmQg
dHlwZXMgd2l0aCB0aGUgZm9sbG93aW5nIHNwZWNpYWwgdmFsdWVzCi0gIGVudW0gewotICAgIGtF
b2YgPSBrTWF4UmVjb3JkVHlwZSArIDEsCi0gICAgLy8gUmV0dXJuZWQgd2hlbmV2ZXIgd2UgZmlu
ZCBhbiBpbnZhbGlkIHBoeXNpY2FsIHJlY29yZC4KLSAgICAvLyBDdXJyZW50bHkgdGhlcmUgYXJl
IHRocmVlIHNpdHVhdGlvbnMgaW4gd2hpY2ggdGhpcyBoYXBwZW5zOgotICAgIC8vICogVGhlIHJl
Y29yZCBoYXMgYW4gaW52YWxpZCBDUkMgKFJlYWRQaHlzaWNhbFJlY29yZCByZXBvcnRzIGEgZHJv
cCkKLSAgICAvLyAqIFRoZSByZWNvcmQgaXMgYSAwLWxlbmd0aCByZWNvcmQgKE5vIGRyb3AgaXMg
cmVwb3J0ZWQpCi0gICAgLy8gKiBUaGUgcmVjb3JkIGlzIGJlbG93IGNvbnN0cnVjdG9yJ3MgaW5p
dGlhbF9vZmZzZXQgKE5vIGRyb3AgaXMgcmVwb3J0ZWQpCi0gICAga0JhZFJlY29yZCA9IGtNYXhS
ZWNvcmRUeXBlICsgMgotICB9OwotCi0gIC8vIFNraXBzIGFsbCBibG9ja3MgdGhhdCBhcmUgY29t
cGxldGVseSBiZWZvcmUgImluaXRpYWxfb2Zmc2V0XyIuCi0gIC8vCi0gIC8vIFJldHVybnMgdHJ1
ZSBvbiBzdWNjZXNzLiBIYW5kbGVzIHJlcG9ydGluZy4KLSAgYm9vbCBTa2lwVG9Jbml0aWFsQmxv
Y2soKTsKLQotICAvLyBSZXR1cm4gdHlwZSwgb3Igb25lIG9mIHRoZSBwcmVjZWRpbmcgc3BlY2lh
bCB2YWx1ZXMKLSAgdW5zaWduZWQgaW50IFJlYWRQaHlzaWNhbFJlY29yZChTbGljZSogcmVzdWx0
KTsKLQotICAvLyBSZXBvcnRzIGRyb3BwZWQgYnl0ZXMgdG8gdGhlIHJlcG9ydGVyLgotICAvLyBi
dWZmZXJfIG11c3QgYmUgdXBkYXRlZCB0byByZW1vdmUgdGhlIGRyb3BwZWQgYnl0ZXMgcHJpb3Ig
dG8gaW52b2NhdGlvbi4KLSAgdm9pZCBSZXBvcnRDb3JydXB0aW9uKHNpemVfdCBieXRlcywgY29u
c3QgY2hhciogcmVhc29uKTsKLSAgdm9pZCBSZXBvcnREcm9wKHNpemVfdCBieXRlcywgY29uc3Qg
U3RhdHVzJiByZWFzb24pOwotCi0gIC8vIE5vIGNvcHlpbmcgYWxsb3dlZAotICBSZWFkZXIoY29u
c3QgUmVhZGVyJik7Ci0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFJlYWRlciYpOwotfTsKLQotfSAg
Ly8gbmFtZXNwYWNlIGxvZwotfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKLQotI2VuZGlmICAvLyBT
VE9SQUdFX0xFVkVMREJfREJfTE9HX1JFQURFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi9kYi9sb2dfdGVzdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
ZGIvbG9nX3Rlc3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjNWNmODcuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9sb2dfdGVzdC5jYworKysg
L2Rldi9udWxsCkBAIC0xLDUwMCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExl
dmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1l
cyBvZiBjb250cmlidXRvcnMuCi0KLSNpbmNsdWRlICJkYi9sb2dfcmVhZGVyLmgiCi0jaW5jbHVk
ZSAiZGIvbG9nX3dyaXRlci5oIgotI2luY2x1ZGUgImxldmVsZGIvZW52LmgiCi0jaW5jbHVkZSAi
dXRpbC9jb2RpbmcuaCIKLSNpbmNsdWRlICJ1dGlsL2NyYzMyYy5oIgotI2luY2x1ZGUgInV0aWwv
cmFuZG9tLmgiCi0jaW5jbHVkZSAidXRpbC90ZXN0aGFybmVzcy5oIgotCi1uYW1lc3BhY2UgbGV2
ZWxkYiB7Ci1uYW1lc3BhY2UgbG9nIHsKLQotLy8gQ29uc3RydWN0IGEgc3RyaW5nIG9mIHRoZSBz
cGVjaWZpZWQgbGVuZ3RoIG1hZGUgb3V0IG9mIHRoZSBzdXBwbGllZAotLy8gcGFydGlhbCBzdHJp
bmcuCi1zdGF0aWMgc3RkOjpzdHJpbmcgQmlnU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXJ0
aWFsX3N0cmluZywgc2l6ZV90IG4pIHsKLSAgc3RkOjpzdHJpbmcgcmVzdWx0OwotICB3aGlsZSAo
cmVzdWx0LnNpemUoKSA8IG4pIHsKLSAgICByZXN1bHQuYXBwZW5kKHBhcnRpYWxfc3RyaW5nKTsK
LSAgfQotICByZXN1bHQucmVzaXplKG4pOwotICByZXR1cm4gcmVzdWx0OwotfQotCi0vLyBDb25z
dHJ1Y3QgYSBzdHJpbmcgZnJvbSBhIG51bWJlcgotc3RhdGljIHN0ZDo6c3RyaW5nIE51bWJlclN0
cmluZyhpbnQgbikgewotICBjaGFyIGJ1Zls1MF07Ci0gIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1
ZiksICIlZC4iLCBuKTsKLSAgcmV0dXJuIHN0ZDo6c3RyaW5nKGJ1Zik7Ci19Ci0KLS8vIFJldHVy
biBhIHNrZXdlZCBwb3RlbnRpYWxseSBsb25nIHN0cmluZwotc3RhdGljIHN0ZDo6c3RyaW5nIFJh
bmRvbVNrZXdlZFN0cmluZyhpbnQgaSwgUmFuZG9tKiBybmQpIHsKLSAgcmV0dXJuIEJpZ1N0cmlu
ZyhOdW1iZXJTdHJpbmcoaSksIHJuZC0+U2tld2VkKDE3KSk7Ci19Ci0KLWNsYXNzIExvZ1Rlc3Qg
ewotIHByaXZhdGU6Ci0gIGNsYXNzIFN0cmluZ0Rlc3QgOiBwdWJsaWMgV3JpdGFibGVGaWxlIHsK
LSAgIHB1YmxpYzoKLSAgICBzdGQ6OnN0cmluZyBjb250ZW50c187Ci0KLSAgICB2aXJ0dWFsIFN0
YXR1cyBDbG9zZSgpIHsgcmV0dXJuIFN0YXR1czo6T0soKTsgfQotICAgIHZpcnR1YWwgU3RhdHVz
IEZsdXNoKCkgeyByZXR1cm4gU3RhdHVzOjpPSygpOyB9Ci0gICAgdmlydHVhbCBTdGF0dXMgU3lu
YygpIHsgcmV0dXJuIFN0YXR1czo6T0soKTsgfQotICAgIHZpcnR1YWwgU3RhdHVzIEFwcGVuZChj
b25zdCBTbGljZSYgc2xpY2UpIHsKLSAgICAgIGNvbnRlbnRzXy5hcHBlbmQoc2xpY2UuZGF0YSgp
LCBzbGljZS5zaXplKCkpOwotICAgICAgcmV0dXJuIFN0YXR1czo6T0soKTsKLSAgICB9Ci0gIH07
Ci0KLSAgY2xhc3MgU3RyaW5nU291cmNlIDogcHVibGljIFNlcXVlbnRpYWxGaWxlIHsKLSAgIHB1
YmxpYzoKLSAgICBTbGljZSBjb250ZW50c187Ci0gICAgYm9vbCBmb3JjZV9lcnJvcl87Ci0gICAg
Ym9vbCByZXR1cm5lZF9wYXJ0aWFsXzsKLSAgICBTdHJpbmdTb3VyY2UoKSA6IGZvcmNlX2Vycm9y
XyhmYWxzZSksIHJldHVybmVkX3BhcnRpYWxfKGZhbHNlKSB7IH0KLQotICAgIHZpcnR1YWwgU3Rh
dHVzIFJlYWQoc2l6ZV90IG4sIFNsaWNlKiByZXN1bHQsIGNoYXIqIHNjcmF0Y2gpIHsKLSAgICAg
IEFTU0VSVF9UUlVFKCFyZXR1cm5lZF9wYXJ0aWFsXykgPDwgIm11c3Qgbm90IFJlYWQoKSBhZnRl
ciBlb2YvZXJyb3IiOwotCi0gICAgICBpZiAoZm9yY2VfZXJyb3JfKSB7Ci0gICAgICAgIGZvcmNl
X2Vycm9yXyA9IGZhbHNlOwotICAgICAgICByZXR1cm5lZF9wYXJ0aWFsXyA9IHRydWU7Ci0gICAg
ICAgIHJldHVybiBTdGF0dXM6OkNvcnJ1cHRpb24oInJlYWQgZXJyb3IiKTsKLSAgICAgIH0KLQot
ICAgICAgaWYgKGNvbnRlbnRzXy5zaXplKCkgPCBuKSB7Ci0gICAgICAgIG4gPSBjb250ZW50c18u
c2l6ZSgpOwotICAgICAgICByZXR1cm5lZF9wYXJ0aWFsXyA9IHRydWU7Ci0gICAgICB9Ci0gICAg
ICAqcmVzdWx0ID0gU2xpY2UoY29udGVudHNfLmRhdGEoKSwgbik7Ci0gICAgICBjb250ZW50c18u
cmVtb3ZlX3ByZWZpeChuKTsKLSAgICAgIHJldHVybiBTdGF0dXM6Ok9LKCk7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCBTdGF0dXMgU2tpcCh1aW50NjRfdCBuKSB7Ci0gICAgICBpZiAobiA+IGNvbnRl
bnRzXy5zaXplKCkpIHsKLSAgICAgICAgY29udGVudHNfLmNsZWFyKCk7Ci0gICAgICAgIHJldHVy
biBTdGF0dXM6Ok5vdEZvdW5kKCJpbi1tZW1vcnkgZmlsZSBza2lwZXBkIHBhc3QgZW5kIik7Ci0g
ICAgICB9Ci0KLSAgICAgIGNvbnRlbnRzXy5yZW1vdmVfcHJlZml4KG4pOwotCi0gICAgICByZXR1
cm4gU3RhdHVzOjpPSygpOwotICAgIH0KLSAgfTsKLQotICBjbGFzcyBSZXBvcnRDb2xsZWN0b3Ig
OiBwdWJsaWMgUmVhZGVyOjpSZXBvcnRlciB7Ci0gICBwdWJsaWM6Ci0gICAgc2l6ZV90IGRyb3Bw
ZWRfYnl0ZXNfOwotICAgIHN0ZDo6c3RyaW5nIG1lc3NhZ2VfOwotCi0gICAgUmVwb3J0Q29sbGVj
dG9yKCkgOiBkcm9wcGVkX2J5dGVzXygwKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgQ29ycnVwdGlv
bihzaXplX3QgYnl0ZXMsIGNvbnN0IFN0YXR1cyYgc3RhdHVzKSB7Ci0gICAgICBkcm9wcGVkX2J5
dGVzXyArPSBieXRlczsKLSAgICAgIG1lc3NhZ2VfLmFwcGVuZChzdGF0dXMuVG9TdHJpbmcoKSk7
Ci0gICAgfQotICB9OwotCi0gIFN0cmluZ0Rlc3QgZGVzdF87Ci0gIFN0cmluZ1NvdXJjZSBzb3Vy
Y2VfOwotICBSZXBvcnRDb2xsZWN0b3IgcmVwb3J0XzsKLSAgYm9vbCByZWFkaW5nXzsKLSAgV3Jp
dGVyIHdyaXRlcl87Ci0gIFJlYWRlciByZWFkZXJfOwotCi0gIC8vIFJlY29yZCBtZXRhZGF0YSBm
b3IgdGVzdGluZyBpbml0aWFsIG9mZnNldCBmdW5jdGlvbmFsaXR5Ci0gIHN0YXRpYyBzaXplX3Qg
aW5pdGlhbF9vZmZzZXRfcmVjb3JkX3NpemVzX1tdOwotICBzdGF0aWMgdWludDY0X3QgaW5pdGlh
bF9vZmZzZXRfbGFzdF9yZWNvcmRfb2Zmc2V0c19bXTsKLQotIHB1YmxpYzoKLSAgTG9nVGVzdCgp
IDogcmVhZGluZ18oZmFsc2UpLAotICAgICAgICAgICAgICB3cml0ZXJfKCZkZXN0XyksCi0gICAg
ICAgICAgICAgIHJlYWRlcl8oJnNvdXJjZV8sICZyZXBvcnRfLCB0cnVlLypjaGVja3N1bSovLAot
ICAgICAgICAgICAgICAgICAgICAgIDAvKmluaXRpYWxfb2Zmc2V0Ki8pIHsKLSAgfQotCi0gIHZv
aWQgV3JpdGUoY29uc3Qgc3RkOjpzdHJpbmcmIG1zZykgewotICAgIEFTU0VSVF9UUlVFKCFyZWFk
aW5nXykgPDwgIldyaXRlKCkgYWZ0ZXIgc3RhcnRpbmcgdG8gcmVhZCI7Ci0gICAgd3JpdGVyXy5B
ZGRSZWNvcmQoU2xpY2UobXNnKSk7Ci0gIH0KLQotICBzaXplX3QgV3JpdHRlbkJ5dGVzKCkgY29u
c3QgewotICAgIHJldHVybiBkZXN0Xy5jb250ZW50c18uc2l6ZSgpOwotICB9Ci0KLSAgc3RkOjpz
dHJpbmcgUmVhZCgpIHsKLSAgICBpZiAoIXJlYWRpbmdfKSB7Ci0gICAgICByZWFkaW5nXyA9IHRy
dWU7Ci0gICAgICBzb3VyY2VfLmNvbnRlbnRzXyA9IFNsaWNlKGRlc3RfLmNvbnRlbnRzXyk7Ci0g
ICAgfQotICAgIHN0ZDo6c3RyaW5nIHNjcmF0Y2g7Ci0gICAgU2xpY2UgcmVjb3JkOwotICAgIGlm
IChyZWFkZXJfLlJlYWRSZWNvcmQoJnJlY29yZCwgJnNjcmF0Y2gpKSB7Ci0gICAgICByZXR1cm4g
cmVjb3JkLlRvU3RyaW5nKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiAiRU9GIjsKLSAg
ICB9Ci0gIH0KLQotICB2b2lkIEluY3JlbWVudEJ5dGUoaW50IG9mZnNldCwgaW50IGRlbHRhKSB7
Ci0gICAgZGVzdF8uY29udGVudHNfW29mZnNldF0gKz0gZGVsdGE7Ci0gIH0KLQotICB2b2lkIFNl
dEJ5dGUoaW50IG9mZnNldCwgY2hhciBuZXdfYnl0ZSkgewotICAgIGRlc3RfLmNvbnRlbnRzX1tv
ZmZzZXRdID0gbmV3X2J5dGU7Ci0gIH0KLQotICB2b2lkIFNocmlua1NpemUoaW50IGJ5dGVzKSB7
Ci0gICAgZGVzdF8uY29udGVudHNfLnJlc2l6ZShkZXN0Xy5jb250ZW50c18uc2l6ZSgpIC0gYnl0
ZXMpOwotICB9Ci0KLSAgdm9pZCBGaXhDaGVja3N1bShpbnQgaGVhZGVyX29mZnNldCwgaW50IGxl
bikgewotICAgIC8vIENvbXB1dGUgY3JjIG9mIHR5cGUvbGVuL2RhdGEKLSAgICB1aW50MzJfdCBj
cmMgPSBjcmMzMmM6OlZhbHVlKCZkZXN0Xy5jb250ZW50c19baGVhZGVyX29mZnNldCs2XSwgMSAr
IGxlbik7Ci0gICAgY3JjID0gY3JjMzJjOjpNYXNrKGNyYyk7Ci0gICAgRW5jb2RlRml4ZWQzMigm
ZGVzdF8uY29udGVudHNfW2hlYWRlcl9vZmZzZXRdLCBjcmMpOwotICB9Ci0KLSAgdm9pZCBGb3Jj
ZUVycm9yKCkgewotICAgIHNvdXJjZV8uZm9yY2VfZXJyb3JfID0gdHJ1ZTsKLSAgfQotCi0gIHNp
emVfdCBEcm9wcGVkQnl0ZXMoKSBjb25zdCB7Ci0gICAgcmV0dXJuIHJlcG9ydF8uZHJvcHBlZF9i
eXRlc187Ci0gIH0KLQotICBzdGQ6OnN0cmluZyBSZXBvcnRNZXNzYWdlKCkgY29uc3QgewotICAg
IHJldHVybiByZXBvcnRfLm1lc3NhZ2VfOwotICB9Ci0KLSAgLy8gUmV0dXJucyBPSyBpZmYgcmVj
b3JkZWQgZXJyb3IgbWVzc2FnZSBjb250YWlucyAibXNnIgotICBzdGQ6OnN0cmluZyBNYXRjaEVy
cm9yKGNvbnN0IHN0ZDo6c3RyaW5nJiBtc2cpIGNvbnN0IHsKLSAgICBpZiAocmVwb3J0Xy5tZXNz
YWdlXy5maW5kKG1zZykgPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICAgIHJldHVybiByZXBv
cnRfLm1lc3NhZ2VfOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gIk9LIjsKLSAgICB9Ci0g
IH0KLQotICB2b2lkIFdyaXRlSW5pdGlhbE9mZnNldExvZygpIHsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IDQ7IGkrKykgewotICAgICAgc3RkOjpzdHJpbmcgcmVjb3JkKGluaXRpYWxfb2Zmc2V0
X3JlY29yZF9zaXplc19baV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
Y2hhcj4oJ2EnICsgaSkpOwotICAgICAgV3JpdGUocmVjb3JkKTsKLSAgICB9Ci0gIH0KLQotICB2
b2lkIENoZWNrT2Zmc2V0UGFzdEVuZFJldHVybnNOb1JlY29yZHModWludDY0X3Qgb2Zmc2V0X3Bh
c3RfZW5kKSB7Ci0gICAgV3JpdGVJbml0aWFsT2Zmc2V0TG9nKCk7Ci0gICAgcmVhZGluZ18gPSB0
cnVlOwotICAgIHNvdXJjZV8uY29udGVudHNfID0gU2xpY2UoZGVzdF8uY29udGVudHNfKTsKLSAg
ICBSZWFkZXIqIG9mZnNldF9yZWFkZXIgPSBuZXcgUmVhZGVyKCZzb3VyY2VfLCAmcmVwb3J0Xywg
dHJ1ZS8qY2hlY2tzdW0qLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdyaXR0ZW5CeXRlcygpICsgb2Zmc2V0X3Bhc3RfZW5kKTsKLSAgICBTbGljZSByZWNvcmQ7Ci0g
ICAgc3RkOjpzdHJpbmcgc2NyYXRjaDsKLSAgICBBU1NFUlRfVFJVRSghb2Zmc2V0X3JlYWRlci0+
UmVhZFJlY29yZCgmcmVjb3JkLCAmc2NyYXRjaCkpOwotICAgIGRlbGV0ZSBvZmZzZXRfcmVhZGVy
OwotICB9Ci0KLSAgdm9pZCBDaGVja0luaXRpYWxPZmZzZXRSZWNvcmQodWludDY0X3QgaW5pdGlh
bF9vZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9y
ZWNvcmRfb2Zmc2V0KSB7Ci0gICAgV3JpdGVJbml0aWFsT2Zmc2V0TG9nKCk7Ci0gICAgcmVhZGlu
Z18gPSB0cnVlOwotICAgIHNvdXJjZV8uY29udGVudHNfID0gU2xpY2UoZGVzdF8uY29udGVudHNf
KTsKLSAgICBSZWFkZXIqIG9mZnNldF9yZWFkZXIgPSBuZXcgUmVhZGVyKCZzb3VyY2VfLCAmcmVw
b3J0XywgdHJ1ZS8qY2hlY2tzdW0qLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluaXRpYWxfb2Zmc2V0KTsKLSAgICBTbGljZSByZWNvcmQ7Ci0gICAgc3RkOjpzdHJp
bmcgc2NyYXRjaDsKLSAgICBBU1NFUlRfVFJVRShvZmZzZXRfcmVhZGVyLT5SZWFkUmVjb3JkKCZy
ZWNvcmQsICZzY3JhdGNoKSk7Ci0gICAgQVNTRVJUX0VRKGluaXRpYWxfb2Zmc2V0X3JlY29yZF9z
aXplc19bZXhwZWN0ZWRfcmVjb3JkX29mZnNldF0sCi0gICAgICAgICAgICAgIHJlY29yZC5zaXpl
KCkpOwotICAgIEFTU0VSVF9FUShpbml0aWFsX29mZnNldF9sYXN0X3JlY29yZF9vZmZzZXRzX1tl
eHBlY3RlZF9yZWNvcmRfb2Zmc2V0XSwKLSAgICAgICAgICAgICAgb2Zmc2V0X3JlYWRlci0+TGFz
dFJlY29yZE9mZnNldCgpKTsKLSAgICBBU1NFUlRfRVEoKGNoYXIpKCdhJyArIGV4cGVjdGVkX3Jl
Y29yZF9vZmZzZXQpLCByZWNvcmQuZGF0YSgpWzBdKTsKLSAgICBkZWxldGUgb2Zmc2V0X3JlYWRl
cjsKLSAgfQotCi19OwotCi1zaXplX3QgTG9nVGVzdDo6aW5pdGlhbF9vZmZzZXRfcmVjb3JkX3Np
emVzX1tdID0KLSAgICB7MTAwMDAsICAvLyBUd28gc2l6YWJsZSByZWNvcmRzIGluIGZpcnN0IGJs
b2NrCi0gICAgIDEwMDAwLAotICAgICAyICogbG9nOjprQmxvY2tTaXplIC0gMTAwMCwgIC8vIFNw
YW4gdGhyZWUgYmxvY2tzCi0gICAgIDF9OwotCi11aW50NjRfdCBMb2dUZXN0Ojppbml0aWFsX29m
ZnNldF9sYXN0X3JlY29yZF9vZmZzZXRzX1tdID0KLSAgICB7MCwKLSAgICAga0hlYWRlclNpemUg
KyAxMDAwMCwKLSAgICAgMiAqIChrSGVhZGVyU2l6ZSArIDEwMDAwKSwKLSAgICAgMiAqIChrSGVh
ZGVyU2l6ZSArIDEwMDAwKSArCi0gICAgICAgICAoMiAqIGxvZzo6a0Jsb2NrU2l6ZSAtIDEwMDAp
ICsgMyAqIGtIZWFkZXJTaXplfTsKLQotCi1URVNUKExvZ1Rlc3QsIEVtcHR5KSB7Ci0gIEFTU0VS
VF9FUSgiRU9GIiwgUmVhZCgpKTsKLX0KLQotVEVTVChMb2dUZXN0LCBSZWFkV3JpdGUpIHsKLSAg
V3JpdGUoImZvbyIpOwotICBXcml0ZSgiYmFyIik7Ci0gIFdyaXRlKCIiKTsKLSAgV3JpdGUoInh4
eHgiKTsKLSAgQVNTRVJUX0VRKCJmb28iLCBSZWFkKCkpOwotICBBU1NFUlRfRVEoImJhciIsIFJl
YWQoKSk7Ci0gIEFTU0VSVF9FUSgiIiwgUmVhZCgpKTsKLSAgQVNTRVJUX0VRKCJ4eHh4IiwgUmVh
ZCgpKTsKLSAgQVNTRVJUX0VRKCJFT0YiLCBSZWFkKCkpOwotICBBU1NFUlRfRVEoIkVPRiIsIFJl
YWQoKSk7ICAvLyBNYWtlIHN1cmUgcmVhZHMgYXQgZW9mIHdvcmsKLX0KLQotVEVTVChMb2dUZXN0
LCBNYW55QmxvY2tzKSB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKLSAg
ICBXcml0ZShOdW1iZXJTdHJpbmcoaSkpOwotICB9Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgMTAw
MDAwOyBpKyspIHsKLSAgICBBU1NFUlRfRVEoTnVtYmVyU3RyaW5nKGkpLCBSZWFkKCkpOwotICB9
Ci0gIEFTU0VSVF9FUSgiRU9GIiwgUmVhZCgpKTsKLX0KLQotVEVTVChMb2dUZXN0LCBGcmFnbWVu
dGF0aW9uKSB7Ci0gIFdyaXRlKCJzbWFsbCIpOwotICBXcml0ZShCaWdTdHJpbmcoIm1lZGl1bSIs
IDUwMDAwKSk7Ci0gIFdyaXRlKEJpZ1N0cmluZygibGFyZ2UiLCAxMDAwMDApKTsKLSAgQVNTRVJU
X0VRKCJzbWFsbCIsIFJlYWQoKSk7Ci0gIEFTU0VSVF9FUShCaWdTdHJpbmcoIm1lZGl1bSIsIDUw
MDAwKSwgUmVhZCgpKTsKLSAgQVNTRVJUX0VRKEJpZ1N0cmluZygibGFyZ2UiLCAxMDAwMDApLCBS
ZWFkKCkpOwotICBBU1NFUlRfRVEoIkVPRiIsIFJlYWQoKSk7Ci19Ci0KLVRFU1QoTG9nVGVzdCwg
TWFyZ2luYWxUcmFpbGVyKSB7Ci0gIC8vIE1ha2UgYSB0cmFpbGVyIHRoYXQgaXMgZXhhY3RseSB0
aGUgc2FtZSBsZW5ndGggYXMgYW4gZW1wdHkgcmVjb3JkLgotICBjb25zdCBpbnQgbiA9IGtCbG9j
a1NpemUgLSAyKmtIZWFkZXJTaXplOwotICBXcml0ZShCaWdTdHJpbmcoImZvbyIsIG4pKTsKLSAg
QVNTRVJUX0VRKGtCbG9ja1NpemUgLSBrSGVhZGVyU2l6ZSwgV3JpdHRlbkJ5dGVzKCkpOwotICBX
cml0ZSgiIik7Ci0gIFdyaXRlKCJiYXIiKTsKLSAgQVNTRVJUX0VRKEJpZ1N0cmluZygiZm9vIiwg
biksIFJlYWQoKSk7Ci0gIEFTU0VSVF9FUSgiIiwgUmVhZCgpKTsKLSAgQVNTRVJUX0VRKCJiYXIi
LCBSZWFkKCkpOwotICBBU1NFUlRfRVEoIkVPRiIsIFJlYWQoKSk7Ci19Ci0KLVRFU1QoTG9nVGVz
dCwgTWFyZ2luYWxUcmFpbGVyMikgewotICAvLyBNYWtlIGEgdHJhaWxlciB0aGF0IGlzIGV4YWN0
bHkgdGhlIHNhbWUgbGVuZ3RoIGFzIGFuIGVtcHR5IHJlY29yZC4KLSAgY29uc3QgaW50IG4gPSBr
QmxvY2tTaXplIC0gMiprSGVhZGVyU2l6ZTsKLSAgV3JpdGUoQmlnU3RyaW5nKCJmb28iLCBuKSk7
Ci0gIEFTU0VSVF9FUShrQmxvY2tTaXplIC0ga0hlYWRlclNpemUsIFdyaXR0ZW5CeXRlcygpKTsK
LSAgV3JpdGUoImJhciIpOwotICBBU1NFUlRfRVEoQmlnU3RyaW5nKCJmb28iLCBuKSwgUmVhZCgp
KTsKLSAgQVNTRVJUX0VRKCJiYXIiLCBSZWFkKCkpOwotICBBU1NFUlRfRVEoIkVPRiIsIFJlYWQo
KSk7Ci0gIEFTU0VSVF9FUSgwLCBEcm9wcGVkQnl0ZXMoKSk7Ci0gIEFTU0VSVF9FUSgiIiwgUmVw
b3J0TWVzc2FnZSgpKTsKLX0KLQotVEVTVChMb2dUZXN0LCBTaG9ydFRyYWlsZXIpIHsKLSAgY29u
c3QgaW50IG4gPSBrQmxvY2tTaXplIC0gMiprSGVhZGVyU2l6ZSArIDQ7Ci0gIFdyaXRlKEJpZ1N0
cmluZygiZm9vIiwgbikpOwotICBBU1NFUlRfRVEoa0Jsb2NrU2l6ZSAtIGtIZWFkZXJTaXplICsg
NCwgV3JpdHRlbkJ5dGVzKCkpOwotICBXcml0ZSgiIik7Ci0gIFdyaXRlKCJiYXIiKTsKLSAgQVNT
RVJUX0VRKEJpZ1N0cmluZygiZm9vIiwgbiksIFJlYWQoKSk7Ci0gIEFTU0VSVF9FUSgiIiwgUmVh
ZCgpKTsKLSAgQVNTRVJUX0VRKCJiYXIiLCBSZWFkKCkpOwotICBBU1NFUlRfRVEoIkVPRiIsIFJl
YWQoKSk7Ci19Ci0KLVRFU1QoTG9nVGVzdCwgQWxpZ25lZEVvZikgewotICBjb25zdCBpbnQgbiA9
IGtCbG9ja1NpemUgLSAyKmtIZWFkZXJTaXplICsgNDsKLSAgV3JpdGUoQmlnU3RyaW5nKCJmb28i
LCBuKSk7Ci0gIEFTU0VSVF9FUShrQmxvY2tTaXplIC0ga0hlYWRlclNpemUgKyA0LCBXcml0dGVu
Qnl0ZXMoKSk7Ci0gIEFTU0VSVF9FUShCaWdTdHJpbmcoImZvbyIsIG4pLCBSZWFkKCkpOwotICBB
U1NFUlRfRVEoIkVPRiIsIFJlYWQoKSk7Ci19Ci0KLVRFU1QoTG9nVGVzdCwgUmFuZG9tUmVhZCkg
ewotICBjb25zdCBpbnQgTiA9IDUwMDsKLSAgUmFuZG9tIHdyaXRlX3JuZCgzMDEpOwotICBmb3Ig
KGludCBpID0gMDsgaSA8IE47IGkrKykgewotICAgIFdyaXRlKFJhbmRvbVNrZXdlZFN0cmluZyhp
LCAmd3JpdGVfcm5kKSk7Ci0gIH0KLSAgUmFuZG9tIHJlYWRfcm5kKDMwMSk7Ci0gIGZvciAoaW50
IGkgPSAwOyBpIDwgTjsgaSsrKSB7Ci0gICAgQVNTRVJUX0VRKFJhbmRvbVNrZXdlZFN0cmluZyhp
LCAmcmVhZF9ybmQpLCBSZWFkKCkpOwotICB9Ci0gIEFTU0VSVF9FUSgiRU9GIiwgUmVhZCgpKTsK
LX0KLQotLy8gVGVzdHMgb2YgYWxsIHRoZSBlcnJvciBwYXRocyBpbiBsb2dfcmVhZGVyLmNjIGZv
bGxvdzoKLQotVEVTVChMb2dUZXN0LCBSZWFkRXJyb3IpIHsKLSAgV3JpdGUoImZvbyIpOwotICBG
b3JjZUVycm9yKCk7Ci0gIEFTU0VSVF9FUSgiRU9GIiwgUmVhZCgpKTsKLSAgQVNTRVJUX0VRKGtC
bG9ja1NpemUsIERyb3BwZWRCeXRlcygpKTsKLSAgQVNTRVJUX0VRKCJPSyIsIE1hdGNoRXJyb3Io
InJlYWQgZXJyb3IiKSk7Ci19Ci0KLVRFU1QoTG9nVGVzdCwgQmFkUmVjb3JkVHlwZSkgewotICBX
cml0ZSgiZm9vIik7Ci0gIC8vIFR5cGUgaXMgc3RvcmVkIGluIGhlYWRlcls2XQotICBJbmNyZW1l
bnRCeXRlKDYsIDEwMCk7Ci0gIEZpeENoZWNrc3VtKDAsIDMpOwotICBBU1NFUlRfRVEoIkVPRiIs
IFJlYWQoKSk7Ci0gIEFTU0VSVF9FUSgzLCBEcm9wcGVkQnl0ZXMoKSk7Ci0gIEFTU0VSVF9FUSgi
T0siLCBNYXRjaEVycm9yKCJ1bmtub3duIHJlY29yZCB0eXBlIikpOwotfQotCi1URVNUKExvZ1Rl
c3QsIFRydW5jYXRlZFRyYWlsaW5nUmVjb3JkKSB7Ci0gIFdyaXRlKCJmb28iKTsKLSAgU2hyaW5r
U2l6ZSg0KTsgICAvLyBEcm9wIGFsbCBwYXlsb2FkIGFzIHdlbGwgYXMgYSBoZWFkZXIgYnl0ZQot
ICBBU1NFUlRfRVEoIkVPRiIsIFJlYWQoKSk7Ci0gIEFTU0VSVF9FUShrSGVhZGVyU2l6ZSAtIDEs
IERyb3BwZWRCeXRlcygpKTsKLSAgQVNTRVJUX0VRKCJPSyIsIE1hdGNoRXJyb3IoInRydW5jYXRl
ZCByZWNvcmQgYXQgZW5kIG9mIGZpbGUiKSk7Ci19Ci0KLVRFU1QoTG9nVGVzdCwgQmFkTGVuZ3Ro
KSB7Ci0gIFdyaXRlKCJmb28iKTsKLSAgU2hyaW5rU2l6ZSgxKTsKLSAgQVNTRVJUX0VRKCJFT0Yi
LCBSZWFkKCkpOwotICBBU1NFUlRfRVEoa0hlYWRlclNpemUgKyAyLCBEcm9wcGVkQnl0ZXMoKSk7
Ci0gIEFTU0VSVF9FUSgiT0siLCBNYXRjaEVycm9yKCJiYWQgcmVjb3JkIGxlbmd0aCIpKTsKLX0K
LQotVEVTVChMb2dUZXN0LCBDaGVja3N1bU1pc21hdGNoKSB7Ci0gIFdyaXRlKCJmb28iKTsKLSAg
SW5jcmVtZW50Qnl0ZSgwLCAxMCk7Ci0gIEFTU0VSVF9FUSgiRU9GIiwgUmVhZCgpKTsKLSAgQVNT
RVJUX0VRKDEwLCBEcm9wcGVkQnl0ZXMoKSk7Ci0gIEFTU0VSVF9FUSgiT0siLCBNYXRjaEVycm9y
KCJjaGVja3N1bSBtaXNtYXRjaCIpKTsKLX0KLQotVEVTVChMb2dUZXN0LCBVbmV4cGVjdGVkTWlk
ZGxlVHlwZSkgewotICBXcml0ZSgiZm9vIik7Ci0gIFNldEJ5dGUoNiwga01pZGRsZVR5cGUpOwot
ICBGaXhDaGVja3N1bSgwLCAzKTsKLSAgQVNTRVJUX0VRKCJFT0YiLCBSZWFkKCkpOwotICBBU1NF
UlRfRVEoMywgRHJvcHBlZEJ5dGVzKCkpOwotICBBU1NFUlRfRVEoIk9LIiwgTWF0Y2hFcnJvcigi
bWlzc2luZyBzdGFydCIpKTsKLX0KLQotVEVTVChMb2dUZXN0LCBVbmV4cGVjdGVkTGFzdFR5cGUp
IHsKLSAgV3JpdGUoImZvbyIpOwotICBTZXRCeXRlKDYsIGtMYXN0VHlwZSk7Ci0gIEZpeENoZWNr
c3VtKDAsIDMpOwotICBBU1NFUlRfRVEoIkVPRiIsIFJlYWQoKSk7Ci0gIEFTU0VSVF9FUSgzLCBE
cm9wcGVkQnl0ZXMoKSk7Ci0gIEFTU0VSVF9FUSgiT0siLCBNYXRjaEVycm9yKCJtaXNzaW5nIHN0
YXJ0IikpOwotfQotCi1URVNUKExvZ1Rlc3QsIFVuZXhwZWN0ZWRGdWxsVHlwZSkgewotICBXcml0
ZSgiZm9vIik7Ci0gIFdyaXRlKCJiYXIiKTsKLSAgU2V0Qnl0ZSg2LCBrRmlyc3RUeXBlKTsKLSAg
Rml4Q2hlY2tzdW0oMCwgMyk7Ci0gIEFTU0VSVF9FUSgiYmFyIiwgUmVhZCgpKTsKLSAgQVNTRVJU
X0VRKCJFT0YiLCBSZWFkKCkpOwotICBBU1NFUlRfRVEoMywgRHJvcHBlZEJ5dGVzKCkpOwotICBB
U1NFUlRfRVEoIk9LIiwgTWF0Y2hFcnJvcigicGFydGlhbCByZWNvcmQgd2l0aG91dCBlbmQiKSk7
Ci19Ci0KLVRFU1QoTG9nVGVzdCwgVW5leHBlY3RlZEZpcnN0VHlwZSkgewotICBXcml0ZSgiZm9v
Iik7Ci0gIFdyaXRlKEJpZ1N0cmluZygiYmFyIiwgMTAwMDAwKSk7Ci0gIFNldEJ5dGUoNiwga0Zp
cnN0VHlwZSk7Ci0gIEZpeENoZWNrc3VtKDAsIDMpOwotICBBU1NFUlRfRVEoQmlnU3RyaW5nKCJi
YXIiLCAxMDAwMDApLCBSZWFkKCkpOwotICBBU1NFUlRfRVEoIkVPRiIsIFJlYWQoKSk7Ci0gIEFT
U0VSVF9FUSgzLCBEcm9wcGVkQnl0ZXMoKSk7Ci0gIEFTU0VSVF9FUSgiT0siLCBNYXRjaEVycm9y
KCJwYXJ0aWFsIHJlY29yZCB3aXRob3V0IGVuZCIpKTsKLX0KLQotVEVTVChMb2dUZXN0LCBFcnJv
ckpvaW5zUmVjb3JkcykgewotICAvLyBDb25zaWRlciB0d28gZnJhZ21lbnRlZCByZWNvcmRzOgot
ICAvLyAgICBmaXJzdChSMSkgbGFzdChSMSkgZmlyc3QoUjIpIGxhc3QoUjIpCi0gIC8vIHdoZXJl
IHRoZSBtaWRkbGUgdHdvIGZyYWdtZW50cyBkaXNhcHBlYXIuICBXZSBkbyBub3Qgd2FudAotICAv
LyBmaXJzdChSMSksbGFzdChSMikgdG8gZ2V0IGpvaW5lZCBhbmQgcmV0dXJuZWQgYXMgYSB2YWxp
ZCByZWNvcmQuCi0KLSAgLy8gV3JpdGUgcmVjb3JkcyB0aGF0IHNwYW4gdHdvIGJsb2NrcwotICBX
cml0ZShCaWdTdHJpbmcoImZvbyIsIGtCbG9ja1NpemUpKTsKLSAgV3JpdGUoQmlnU3RyaW5nKCJi
YXIiLCBrQmxvY2tTaXplKSk7Ci0gIFdyaXRlKCJjb3JyZWN0Iik7Ci0KLSAgLy8gV2lwZSB0aGUg
bWlkZGxlIGJsb2NrCi0gIGZvciAoaW50IG9mZnNldCA9IGtCbG9ja1NpemU7IG9mZnNldCA8IDIq
a0Jsb2NrU2l6ZTsgb2Zmc2V0KyspIHsKLSAgICBTZXRCeXRlKG9mZnNldCwgJ3gnKTsKLSAgfQot
Ci0gIEFTU0VSVF9FUSgiY29ycmVjdCIsIFJlYWQoKSk7Ci0gIEFTU0VSVF9FUSgiRU9GIiwgUmVh
ZCgpKTsKLSAgY29uc3QgaW50IGRyb3BwZWQgPSBEcm9wcGVkQnl0ZXMoKTsKLSAgQVNTRVJUX0xF
KGRyb3BwZWQsIDIqa0Jsb2NrU2l6ZSArIDEwMCk7Ci0gIEFTU0VSVF9HRShkcm9wcGVkLCAyKmtC
bG9ja1NpemUpOwotfQotCi1URVNUKExvZ1Rlc3QsIFJlYWRTdGFydCkgewotICBDaGVja0luaXRp
YWxPZmZzZXRSZWNvcmQoMCwgMCk7Ci19Ci0KLVRFU1QoTG9nVGVzdCwgUmVhZFNlY29uZE9uZU9m
ZikgewotICBDaGVja0luaXRpYWxPZmZzZXRSZWNvcmQoMSwgMSk7Ci19Ci0KLVRFU1QoTG9nVGVz
dCwgUmVhZFNlY29uZFRlblRob3VzYW5kKSB7Ci0gIENoZWNrSW5pdGlhbE9mZnNldFJlY29yZCgx
MDAwMCwgMSk7Ci19Ci0KLVRFU1QoTG9nVGVzdCwgUmVhZFNlY29uZFN0YXJ0KSB7Ci0gIENoZWNr
SW5pdGlhbE9mZnNldFJlY29yZCgxMDAwNywgMSk7Ci19Ci0KLVRFU1QoTG9nVGVzdCwgUmVhZFRo
aXJkT25lT2ZmKSB7Ci0gIENoZWNrSW5pdGlhbE9mZnNldFJlY29yZCgxMDAwOCwgMik7Ci19Ci0K
LVRFU1QoTG9nVGVzdCwgUmVhZFRoaXJkU3RhcnQpIHsKLSAgQ2hlY2tJbml0aWFsT2Zmc2V0UmVj
b3JkKDIwMDE0LCAyKTsKLX0KLQotVEVTVChMb2dUZXN0LCBSZWFkRm91cnRoT25lT2ZmKSB7Ci0g
IENoZWNrSW5pdGlhbE9mZnNldFJlY29yZCgyMDAxNSwgMyk7Ci19Ci0KLVRFU1QoTG9nVGVzdCwg
UmVhZEZvdXJ0aEZpcnN0QmxvY2tUcmFpbGVyKSB7Ci0gIENoZWNrSW5pdGlhbE9mZnNldFJlY29y
ZChsb2c6OmtCbG9ja1NpemUgLSA0LCAzKTsKLX0KLQotVEVTVChMb2dUZXN0LCBSZWFkRm91cnRo
TWlkZGxlQmxvY2spIHsKLSAgQ2hlY2tJbml0aWFsT2Zmc2V0UmVjb3JkKGxvZzo6a0Jsb2NrU2l6
ZSArIDEsIDMpOwotfQotCi1URVNUKExvZ1Rlc3QsIFJlYWRGb3VydGhMYXN0QmxvY2spIHsKLSAg
Q2hlY2tJbml0aWFsT2Zmc2V0UmVjb3JkKDIgKiBsb2c6OmtCbG9ja1NpemUgKyAxLCAzKTsKLX0K
LQotVEVTVChMb2dUZXN0LCBSZWFkRm91cnRoU3RhcnQpIHsKLSAgQ2hlY2tJbml0aWFsT2Zmc2V0
UmVjb3JkKAotICAgICAgMiAqIChrSGVhZGVyU2l6ZSArIDEwMDApICsgKDIgKiBsb2c6OmtCbG9j
a1NpemUgLSAxMDAwKSArIDMgKiBrSGVhZGVyU2l6ZSwKLSAgICAgIDMpOwotfQotCi1URVNUKExv
Z1Rlc3QsIFJlYWRFbmQpIHsKLSAgQ2hlY2tPZmZzZXRQYXN0RW5kUmV0dXJuc05vUmVjb3Jkcygw
KTsKLX0KLQotVEVTVChMb2dUZXN0LCBSZWFkUGFzdEVuZCkgewotICBDaGVja09mZnNldFBhc3RF
bmRSZXR1cm5zTm9SZWNvcmRzKDUpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbG9nCi19ICAvLyBu
YW1lc3BhY2UgbGV2ZWxkYgotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKLSAg
cmV0dXJuIGxldmVsZGI6OnRlc3Q6OlJ1bkFsbFRlc3RzKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2xvZ193cml0ZXIuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL2RiL2xvZ193cml0ZXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDJkYTk5YWMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9sb2df
d3JpdGVyLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8vIENvcHlyaWdodCAo
YykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JT
IGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KLQotI2luY2x1ZGUgImRiL2xvZ193cml0
ZXIuaCIKLQotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgImxldmVsZGIvZW52LmgiCi0j
aW5jbHVkZSAidXRpbC9jb2RpbmcuaCIKLSNpbmNsdWRlICJ1dGlsL2NyYzMyYy5oIgotCi1uYW1l
c3BhY2UgbGV2ZWxkYiB7Ci1uYW1lc3BhY2UgbG9nIHsKLQotV3JpdGVyOjpXcml0ZXIoV3JpdGFi
bGVGaWxlKiBkZXN0KQotICAgIDogZGVzdF8oZGVzdCksCi0gICAgICBibG9ja19vZmZzZXRfKDAp
IHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPD0ga01heFJlY29yZFR5cGU7IGkrKykgewotICAgIGNo
YXIgdCA9IHN0YXRpY19jYXN0PGNoYXI+KGkpOwotICAgIHR5cGVfY3JjX1tpXSA9IGNyYzMyYzo6
VmFsdWUoJnQsIDEpOwotICB9Ci19Ci0KLVdyaXRlcjo6fldyaXRlcigpIHsKLX0KLQotU3RhdHVz
IFdyaXRlcjo6QWRkUmVjb3JkKGNvbnN0IFNsaWNlJiBzbGljZSkgewotICBjb25zdCBjaGFyKiBw
dHIgPSBzbGljZS5kYXRhKCk7Ci0gIHNpemVfdCBsZWZ0ID0gc2xpY2Uuc2l6ZSgpOwotCi0gIC8v
IEZyYWdtZW50IHRoZSByZWNvcmQgaWYgbmVjZXNzYXJ5IGFuZCBlbWl0IGl0LiAgTm90ZSB0aGF0
IGlmIHNsaWNlCi0gIC8vIGlzIGVtcHR5LCB3ZSBzdGlsbCB3YW50IHRvIGl0ZXJhdGUgb25jZSB0
byBlbWl0IGEgc2luZ2xlCi0gIC8vIHplcm8tbGVuZ3RoIHJlY29yZAotICBTdGF0dXMgczsKLSAg
Ym9vbCBiZWdpbiA9IHRydWU7Ci0gIGRvIHsKLSAgICBjb25zdCBpbnQgbGVmdG92ZXIgPSBrQmxv
Y2tTaXplIC0gYmxvY2tfb2Zmc2V0XzsKLSAgICBhc3NlcnQobGVmdG92ZXIgPj0gMCk7Ci0gICAg
aWYgKGxlZnRvdmVyIDwga0hlYWRlclNpemUpIHsKLSAgICAgIC8vIFN3aXRjaCB0byBhIG5ldyBi
bG9jawotICAgICAgaWYgKGxlZnRvdmVyID4gMCkgewotICAgICAgICAvLyBGaWxsIHRoZSB0cmFp
bGVyIChsaXRlcmFsIGJlbG93IHJlbGllcyBvbiBrSGVhZGVyU2l6ZSBiZWluZyA3KQotICAgICAg
ICBhc3NlcnQoa0hlYWRlclNpemUgPT0gNyk7Ci0gICAgICAgIGRlc3RfLT5BcHBlbmQoU2xpY2Uo
Ilx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIsIGxlZnRvdmVyKSk7Ci0gICAgICB9Ci0gICAgICBi
bG9ja19vZmZzZXRfID0gMDsKLSAgICB9Ci0KLSAgICAvLyBJbnZhcmlhbnQ6IHdlIG5ldmVyIGxl
YXZlIDwga0hlYWRlclNpemUgYnl0ZXMgaW4gYSBibG9jay4KLSAgICBhc3NlcnQoa0Jsb2NrU2l6
ZSAtIGJsb2NrX29mZnNldF8gLSBrSGVhZGVyU2l6ZSA+PSAwKTsKLQotICAgIGNvbnN0IHNpemVf
dCBhdmFpbCA9IGtCbG9ja1NpemUgLSBibG9ja19vZmZzZXRfIC0ga0hlYWRlclNpemU7Ci0gICAg
Y29uc3Qgc2l6ZV90IGZyYWdtZW50X2xlbmd0aCA9IChsZWZ0IDwgYXZhaWwpID8gbGVmdCA6IGF2
YWlsOwotCi0gICAgUmVjb3JkVHlwZSB0eXBlOwotICAgIGNvbnN0IGJvb2wgZW5kID0gKGxlZnQg
PT0gZnJhZ21lbnRfbGVuZ3RoKTsKLSAgICBpZiAoYmVnaW4gJiYgZW5kKSB7Ci0gICAgICB0eXBl
ID0ga0Z1bGxUeXBlOwotICAgIH0gZWxzZSBpZiAoYmVnaW4pIHsKLSAgICAgIHR5cGUgPSBrRmly
c3RUeXBlOwotICAgIH0gZWxzZSBpZiAoZW5kKSB7Ci0gICAgICB0eXBlID0ga0xhc3RUeXBlOwot
ICAgIH0gZWxzZSB7Ci0gICAgICB0eXBlID0ga01pZGRsZVR5cGU7Ci0gICAgfQotCi0gICAgcyA9
IEVtaXRQaHlzaWNhbFJlY29yZCh0eXBlLCBwdHIsIGZyYWdtZW50X2xlbmd0aCk7Ci0gICAgcHRy
ICs9IGZyYWdtZW50X2xlbmd0aDsKLSAgICBsZWZ0IC09IGZyYWdtZW50X2xlbmd0aDsKLSAgICBi
ZWdpbiA9IGZhbHNlOwotICB9IHdoaWxlIChzLm9rKCkgJiYgbGVmdCA+IDApOwotICByZXR1cm4g
czsKLX0KLQotU3RhdHVzIFdyaXRlcjo6RW1pdFBoeXNpY2FsUmVjb3JkKFJlY29yZFR5cGUgdCwg
Y29uc3QgY2hhciogcHRyLCBzaXplX3QgbikgewotICBhc3NlcnQobiA8PSAweGZmZmYpOyAgLy8g
TXVzdCBmaXQgaW4gdHdvIGJ5dGVzCi0gIGFzc2VydChibG9ja19vZmZzZXRfICsga0hlYWRlclNp
emUgKyBuIDw9IGtCbG9ja1NpemUpOwotCi0gIC8vIEZvcm1hdCB0aGUgaGVhZGVyCi0gIGNoYXIg
YnVmW2tIZWFkZXJTaXplXTsKLSAgYnVmWzRdID0gc3RhdGljX2Nhc3Q8Y2hhcj4obiAmIDB4ZmYp
OwotICBidWZbNV0gPSBzdGF0aWNfY2FzdDxjaGFyPihuID4+IDgpOwotICBidWZbNl0gPSBzdGF0
aWNfY2FzdDxjaGFyPih0KTsKLQotICAvLyBDb21wdXRlIHRoZSBjcmMgb2YgdGhlIHJlY29yZCB0
eXBlIGFuZCB0aGUgcGF5bG9hZC4KLSAgdWludDMyX3QgY3JjID0gY3JjMzJjOjpFeHRlbmQodHlw
ZV9jcmNfW3RdLCBwdHIsIG4pOwotICBjcmMgPSBjcmMzMmM6Ok1hc2soY3JjKTsgICAgICAgICAg
ICAgICAgIC8vIEFkanVzdCBmb3Igc3RvcmFnZQotICBFbmNvZGVGaXhlZDMyKGJ1ZiwgY3JjKTsK
LQotICAvLyBXcml0ZSB0aGUgaGVhZGVyIGFuZCB0aGUgcGF5bG9hZAotICBTdGF0dXMgcyA9IGRl
c3RfLT5BcHBlbmQoU2xpY2UoYnVmLCBrSGVhZGVyU2l6ZSkpOwotICBpZiAocy5vaygpKSB7Ci0g
ICAgcyA9IGRlc3RfLT5BcHBlbmQoU2xpY2UocHRyLCBuKSk7Ci0gICAgaWYgKHMub2soKSkgewot
ICAgICAgcyA9IGRlc3RfLT5GbHVzaCgpOwotICAgIH0KLSAgfQotICBibG9ja19vZmZzZXRfICs9
IGtIZWFkZXJTaXplICsgbjsKLSAgcmV0dXJuIHM7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBsb2cK
LX0gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
ZXZlbGRiL2RiL2xvZ193cml0ZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvbG9n
X3dyaXRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2E5NTRkLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvbG9nX3dyaXRlci5oCisrKyAvZGV2
L251bGwKQEAgLTEsNDggKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERC
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2Yg
Y29udHJpYnV0b3JzLgotCi0jaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9EQl9MT0dfV1JJVEVSX0hf
Ci0jZGVmaW5lIFNUT1JBR0VfTEVWRUxEQl9EQl9MT0dfV1JJVEVSX0hfCi0KLSNpbmNsdWRlIDxz
dGRpbnQuaD4KLSNpbmNsdWRlICJkYi9sb2dfZm9ybWF0LmgiCi0jaW5jbHVkZSAibGV2ZWxkYi9z
bGljZS5oIgotI2luY2x1ZGUgImxldmVsZGIvc3RhdHVzLmgiCi0KLW5hbWVzcGFjZSBsZXZlbGRi
IHsKLQotY2xhc3MgV3JpdGFibGVGaWxlOwotCi1uYW1lc3BhY2UgbG9nIHsKLQotY2xhc3MgV3Jp
dGVyIHsKLSBwdWJsaWM6Ci0gIC8vIENyZWF0ZSBhIHdyaXRlciB0aGF0IHdpbGwgYXBwZW5kIGRh
dGEgdG8gIipkZXN0Ii4KLSAgLy8gIipkZXN0IiBtdXN0IGJlIGluaXRpYWxseSBlbXB0eS4KLSAg
Ly8gIipkZXN0IiBtdXN0IHJlbWFpbiBsaXZlIHdoaWxlIHRoaXMgV3JpdGVyIGlzIGluIHVzZS4K
LSAgZXhwbGljaXQgV3JpdGVyKFdyaXRhYmxlRmlsZSogZGVzdCk7Ci0gIH5Xcml0ZXIoKTsKLQot
ICBTdGF0dXMgQWRkUmVjb3JkKGNvbnN0IFNsaWNlJiBzbGljZSk7Ci0KLSBwcml2YXRlOgotICBX
cml0YWJsZUZpbGUqIGRlc3RfOwotICBpbnQgYmxvY2tfb2Zmc2V0XzsgICAgICAgLy8gQ3VycmVu
dCBvZmZzZXQgaW4gYmxvY2sKLQotICAvLyBjcmMzMmMgdmFsdWVzIGZvciBhbGwgc3VwcG9ydGVk
IHJlY29yZCB0eXBlcy4gIFRoZXNlIGFyZQotICAvLyBwcmUtY29tcHV0ZWQgdG8gcmVkdWNlIHRo
ZSBvdmVyaGVhZCBvZiBjb21wdXRpbmcgdGhlIGNyYyBvZiB0aGUKLSAgLy8gcmVjb3JkIHR5cGUg
c3RvcmVkIGluIHRoZSBoZWFkZXIuCi0gIHVpbnQzMl90IHR5cGVfY3JjX1trTWF4UmVjb3JkVHlw
ZSArIDFdOwotCi0gIFN0YXR1cyBFbWl0UGh5c2ljYWxSZWNvcmQoUmVjb3JkVHlwZSB0eXBlLCBj
b25zdCBjaGFyKiBwdHIsIHNpemVfdCBsZW5ndGgpOwotCi0gIC8vIE5vIGNvcHlpbmcgYWxsb3dl
ZAotICBXcml0ZXIoY29uc3QgV3JpdGVyJik7Ci0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFdyaXRl
ciYpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGxvZwotfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIK
LQotI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfREJfTE9HX1dSSVRFUl9IXwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9tZW10YWJsZS5jYyBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvZGIvbWVtdGFibGUuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGJmZWMwYTcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9t
ZW10YWJsZS5jYworKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9S
UyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCi0KLSNpbmNsdWRlICJkYi9tZW10YWJs
ZS5oIgotI2luY2x1ZGUgImRiL2RiZm9ybWF0LmgiCi0jaW5jbHVkZSAibGV2ZWxkYi9jb21wYXJh
dG9yLmgiCi0jaW5jbHVkZSAibGV2ZWxkYi9lbnYuaCIKLSNpbmNsdWRlICJsZXZlbGRiL2l0ZXJh
dG9yLmgiCi0jaW5jbHVkZSAidXRpbC9jb2RpbmcuaCIKLQotbmFtZXNwYWNlIGxldmVsZGIgewot
Ci1zdGF0aWMgU2xpY2UgR2V0TGVuZ3RoUHJlZml4ZWRTbGljZShjb25zdCBjaGFyKiBkYXRhKSB7
Ci0gIHVpbnQzMl90IGxlbjsKLSAgY29uc3QgY2hhciogcCA9IGRhdGE7Ci0gIHAgPSBHZXRWYXJp
bnQzMlB0cihwLCBwICsgNSwgJmxlbik7ICAvLyArNTogd2UgYXNzdW1lICJwIiBpcyBub3QgY29y
cnVwdGVkCi0gIHJldHVybiBTbGljZShwLCBsZW4pOwotfQotCi1NZW1UYWJsZTo6TWVtVGFibGUo
Y29uc3QgSW50ZXJuYWxLZXlDb21wYXJhdG9yJiBjbXApCi0gICAgOiBjb21wYXJhdG9yXyhjbXAp
LAotICAgICAgcmVmc18oMCksCi0gICAgICB0YWJsZV8oY29tcGFyYXRvcl8sICZhcmVuYV8pIHsK
LX0KLQotTWVtVGFibGU6On5NZW1UYWJsZSgpIHsKLSAgYXNzZXJ0KHJlZnNfID09IDApOwotfQot
Ci1zaXplX3QgTWVtVGFibGU6OkFwcHJveGltYXRlTWVtb3J5VXNhZ2UoKSB7IHJldHVybiBhcmVu
YV8uTWVtb3J5VXNhZ2UoKTsgfQotCi1pbnQgTWVtVGFibGU6OktleUNvbXBhcmF0b3I6Om9wZXJh
dG9yKCkoY29uc3QgY2hhciogYXB0ciwgY29uc3QgY2hhciogYnB0cikKLSAgICBjb25zdCB7Ci0g
IC8vIEludGVybmFsIGtleXMgYXJlIGVuY29kZWQgYXMgbGVuZ3RoLXByZWZpeGVkIHN0cmluZ3Mu
Ci0gIFNsaWNlIGEgPSBHZXRMZW5ndGhQcmVmaXhlZFNsaWNlKGFwdHIpOwotICBTbGljZSBiID0g
R2V0TGVuZ3RoUHJlZml4ZWRTbGljZShicHRyKTsKLSAgcmV0dXJuIGNvbXBhcmF0b3IuQ29tcGFy
ZShhLCBiKTsKLX0KLQotLy8gRW5jb2RlIGEgc3VpdGFibGUgaW50ZXJuYWwga2V5IHRhcmdldCBm
b3IgInRhcmdldCIgYW5kIHJldHVybiBpdC4KLS8vIFVzZXMgKnNjcmF0Y2ggYXMgc2NyYXRjaCBz
cGFjZSwgYW5kIHRoZSByZXR1cm5lZCBwb2ludGVyIHdpbGwgcG9pbnQKLS8vIGludG8gdGhpcyBz
Y3JhdGNoIHNwYWNlLgotc3RhdGljIGNvbnN0IGNoYXIqIEVuY29kZUtleShzdGQ6OnN0cmluZyog
c2NyYXRjaCwgY29uc3QgU2xpY2UmIHRhcmdldCkgewotICBzY3JhdGNoLT5jbGVhcigpOwotICBQ
dXRWYXJpbnQzMihzY3JhdGNoLCB0YXJnZXQuc2l6ZSgpKTsKLSAgc2NyYXRjaC0+YXBwZW5kKHRh
cmdldC5kYXRhKCksIHRhcmdldC5zaXplKCkpOwotICByZXR1cm4gc2NyYXRjaC0+ZGF0YSgpOwot
fQotCi1jbGFzcyBNZW1UYWJsZUl0ZXJhdG9yOiBwdWJsaWMgSXRlcmF0b3IgewotIHB1YmxpYzoK
LSAgZXhwbGljaXQgTWVtVGFibGVJdGVyYXRvcihNZW1UYWJsZTo6VGFibGUqIHRhYmxlKSA6IGl0
ZXJfKHRhYmxlKSB7IH0KLQotICB2aXJ0dWFsIGJvb2wgVmFsaWQoKSBjb25zdCB7IHJldHVybiBp
dGVyXy5WYWxpZCgpOyB9Ci0gIHZpcnR1YWwgdm9pZCBTZWVrKGNvbnN0IFNsaWNlJiBrKSB7IGl0
ZXJfLlNlZWsoRW5jb2RlS2V5KCZ0bXBfLCBrKSk7IH0KLSAgdmlydHVhbCB2b2lkIFNlZWtUb0Zp
cnN0KCkgeyBpdGVyXy5TZWVrVG9GaXJzdCgpOyB9Ci0gIHZpcnR1YWwgdm9pZCBTZWVrVG9MYXN0
KCkgeyBpdGVyXy5TZWVrVG9MYXN0KCk7IH0KLSAgdmlydHVhbCB2b2lkIE5leHQoKSB7IGl0ZXJf
Lk5leHQoKTsgfQotICB2aXJ0dWFsIHZvaWQgUHJldigpIHsgaXRlcl8uUHJldigpOyB9Ci0gIHZp
cnR1YWwgU2xpY2Uga2V5KCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoUHJlZml4ZWRTbGljZShp
dGVyXy5rZXkoKSk7IH0KLSAgdmlydHVhbCBTbGljZSB2YWx1ZSgpIGNvbnN0IHsKLSAgICBTbGlj
ZSBrZXlfc2xpY2UgPSBHZXRMZW5ndGhQcmVmaXhlZFNsaWNlKGl0ZXJfLmtleSgpKTsKLSAgICBy
ZXR1cm4gR2V0TGVuZ3RoUHJlZml4ZWRTbGljZShrZXlfc2xpY2UuZGF0YSgpICsga2V5X3NsaWNl
LnNpemUoKSk7Ci0gIH0KLQotICB2aXJ0dWFsIFN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVy
biBTdGF0dXM6Ok9LKCk7IH0KLQotIHByaXZhdGU6Ci0gIE1lbVRhYmxlOjpUYWJsZTo6SXRlcmF0
b3IgaXRlcl87Ci0gIHN0ZDo6c3RyaW5nIHRtcF87ICAgICAgIC8vIEZvciBwYXNzaW5nIHRvIEVu
Y29kZUtleQotCi0gIC8vIE5vIGNvcHlpbmcgYWxsb3dlZAotICBNZW1UYWJsZUl0ZXJhdG9yKGNv
bnN0IE1lbVRhYmxlSXRlcmF0b3ImKTsKLSAgdm9pZCBvcGVyYXRvcj0oY29uc3QgTWVtVGFibGVJ
dGVyYXRvciYpOwotfTsKLQotSXRlcmF0b3IqIE1lbVRhYmxlOjpOZXdJdGVyYXRvcigpIHsKLSAg
cmV0dXJuIG5ldyBNZW1UYWJsZUl0ZXJhdG9yKCZ0YWJsZV8pOwotfQotCi12b2lkIE1lbVRhYmxl
OjpBZGQoU2VxdWVuY2VOdW1iZXIgcywgVmFsdWVUeXBlIHR5cGUsCi0gICAgICAgICAgICAgICAg
ICAgY29uc3QgU2xpY2UmIGtleSwKLSAgICAgICAgICAgICAgICAgICBjb25zdCBTbGljZSYgdmFs
dWUpIHsKLSAgLy8gRm9ybWF0IG9mIGFuIGVudHJ5IGlzIGNvbmNhdGVuYXRpb24gb2Y6Ci0gIC8v
ICBrZXlfc2l6ZSAgICAgOiB2YXJpbnQzMiBvZiBpbnRlcm5hbF9rZXkuc2l6ZSgpCi0gIC8vICBr
ZXkgYnl0ZXMgICAgOiBjaGFyW2ludGVybmFsX2tleS5zaXplKCldCi0gIC8vICB2YWx1ZV9zaXpl
ICAgOiB2YXJpbnQzMiBvZiB2YWx1ZS5zaXplKCkKLSAgLy8gIHZhbHVlIGJ5dGVzICA6IGNoYXJb
dmFsdWUuc2l6ZSgpXQotICBzaXplX3Qga2V5X3NpemUgPSBrZXkuc2l6ZSgpOwotICBzaXplX3Qg
dmFsX3NpemUgPSB2YWx1ZS5zaXplKCk7Ci0gIHNpemVfdCBpbnRlcm5hbF9rZXlfc2l6ZSA9IGtl
eV9zaXplICsgODsKLSAgY29uc3Qgc2l6ZV90IGVuY29kZWRfbGVuID0KLSAgICAgIFZhcmludExl
bmd0aChpbnRlcm5hbF9rZXlfc2l6ZSkgKyBpbnRlcm5hbF9rZXlfc2l6ZSArCi0gICAgICBWYXJp
bnRMZW5ndGgodmFsX3NpemUpICsgdmFsX3NpemU7Ci0gIGNoYXIqIGJ1ZiA9IGFyZW5hXy5BbGxv
Y2F0ZShlbmNvZGVkX2xlbik7Ci0gIGNoYXIqIHAgPSBFbmNvZGVWYXJpbnQzMihidWYsIGludGVy
bmFsX2tleV9zaXplKTsKLSAgbWVtY3B5KHAsIGtleS5kYXRhKCksIGtleV9zaXplKTsKLSAgcCAr
PSBrZXlfc2l6ZTsKLSAgRW5jb2RlRml4ZWQ2NChwLCAocyA8PCA4KSB8IHR5cGUpOwotICBwICs9
IDg7Ci0gIHAgPSBFbmNvZGVWYXJpbnQzMihwLCB2YWxfc2l6ZSk7Ci0gIG1lbWNweShwLCB2YWx1
ZS5kYXRhKCksIHZhbF9zaXplKTsKLSAgYXNzZXJ0KChwICsgdmFsX3NpemUpIC0gYnVmID09IGVu
Y29kZWRfbGVuKTsKLSAgdGFibGVfLkluc2VydChidWYpOwotfQotCi1ib29sIE1lbVRhYmxlOjpH
ZXQoY29uc3QgTG9va3VwS2V5JiBrZXksIHN0ZDo6c3RyaW5nKiB2YWx1ZSwgU3RhdHVzKiBzKSB7
Ci0gIFNsaWNlIG1lbWtleSA9IGtleS5tZW10YWJsZV9rZXkoKTsKLSAgVGFibGU6Okl0ZXJhdG9y
IGl0ZXIoJnRhYmxlXyk7Ci0gIGl0ZXIuU2VlayhtZW1rZXkuZGF0YSgpKTsKLSAgaWYgKGl0ZXIu
VmFsaWQoKSkgewotICAgIC8vIGVudHJ5IGZvcm1hdCBpczoKLSAgICAvLyAgICBrbGVuZ3RoICB2
YXJpbnQzMgotICAgIC8vICAgIHVzZXJrZXkgIGNoYXJba2xlbmd0aF0KLSAgICAvLyAgICB0YWcg
ICAgICB1aW50NjQKLSAgICAvLyAgICB2bGVuZ3RoICB2YXJpbnQzMgotICAgIC8vICAgIHZhbHVl
ICAgIGNoYXJbdmxlbmd0aF0KLSAgICAvLyBDaGVjayB0aGF0IGl0IGJlbG9uZ3MgdG8gc2FtZSB1
c2VyIGtleS4gIFdlIGRvIG5vdCBjaGVjayB0aGUKLSAgICAvLyBzZXF1ZW5jZSBudW1iZXIgc2lu
Y2UgdGhlIFNlZWsoKSBjYWxsIGFib3ZlIHNob3VsZCBoYXZlIHNraXBwZWQKLSAgICAvLyBhbGwg
ZW50cmllcyB3aXRoIG92ZXJseSBsYXJnZSBzZXF1ZW5jZSBudW1iZXJzLgotICAgIGNvbnN0IGNo
YXIqIGVudHJ5ID0gaXRlci5rZXkoKTsKLSAgICB1aW50MzJfdCBrZXlfbGVuZ3RoOwotICAgIGNv
bnN0IGNoYXIqIGtleV9wdHIgPSBHZXRWYXJpbnQzMlB0cihlbnRyeSwgZW50cnkrNSwgJmtleV9s
ZW5ndGgpOwotICAgIGlmIChjb21wYXJhdG9yXy5jb21wYXJhdG9yLnVzZXJfY29tcGFyYXRvcigp
LT5Db21wYXJlKAotICAgICAgICAgICAgU2xpY2Uoa2V5X3B0ciwga2V5X2xlbmd0aCAtIDgpLAot
ICAgICAgICAgICAga2V5LnVzZXJfa2V5KCkpID09IDApIHsKLSAgICAgIC8vIENvcnJlY3QgdXNl
ciBrZXkKLSAgICAgIGNvbnN0IHVpbnQ2NF90IHRhZyA9IERlY29kZUZpeGVkNjQoa2V5X3B0ciAr
IGtleV9sZW5ndGggLSA4KTsKLSAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8VmFsdWVUeXBlPih0
YWcgJiAweGZmKSkgewotICAgICAgICBjYXNlIGtUeXBlVmFsdWU6IHsKLSAgICAgICAgICBTbGlj
ZSB2ID0gR2V0TGVuZ3RoUHJlZml4ZWRTbGljZShrZXlfcHRyICsga2V5X2xlbmd0aCk7Ci0gICAg
ICAgICAgdmFsdWUtPmFzc2lnbih2LmRhdGEoKSwgdi5zaXplKCkpOwotICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Uga1R5cGVEZWxldGlvbjoKLSAgICAgICAg
ICAqcyA9IFN0YXR1czo6Tm90Rm91bmQoU2xpY2UoKSk7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotfSAgLy8gbmFtZXNw
YWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvbWVt
dGFibGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvbWVtdGFibGUuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJlOTBiYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL2RiL21lbXRhYmxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCww
IEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCi0KLSNp
Zm5kZWYgU1RPUkFHRV9MRVZFTERCX0RCX01FTVRBQkxFX0hfCi0jZGVmaW5lIFNUT1JBR0VfTEVW
RUxEQl9EQl9NRU1UQUJMRV9IXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgImxldmVs
ZGIvZGIuaCIKLSNpbmNsdWRlICJkYi9kYmZvcm1hdC5oIgotI2luY2x1ZGUgImRiL3NraXBsaXN0
LmgiCi0jaW5jbHVkZSAidXRpbC9hcmVuYS5oIgotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7Ci0KLWNs
YXNzIEludGVybmFsS2V5Q29tcGFyYXRvcjsKLWNsYXNzIE11dGV4OwotY2xhc3MgTWVtVGFibGVJ
dGVyYXRvcjsKLQotY2xhc3MgTWVtVGFibGUgewotIHB1YmxpYzoKLSAgLy8gTWVtVGFibGVzIGFy
ZSByZWZlcmVuY2UgY291bnRlZC4gIFRoZSBpbml0aWFsIHJlZmVyZW5jZSBjb3VudAotICAvLyBp
cyB6ZXJvIGFuZCB0aGUgY2FsbGVyIG11c3QgY2FsbCBSZWYoKSBhdCBsZWFzdCBvbmNlLgotICBl
eHBsaWNpdCBNZW1UYWJsZShjb25zdCBJbnRlcm5hbEtleUNvbXBhcmF0b3ImIGNvbXBhcmF0b3Ip
OwotCi0gIC8vIEluY3JlYXNlIHJlZmVyZW5jZSBjb3VudC4KLSAgdm9pZCBSZWYoKSB7ICsrcmVm
c187IH0KLQotICAvLyBEcm9wIHJlZmVyZW5jZSBjb3VudC4gIERlbGV0ZSBpZiBubyBtb3JlIHJl
ZmVyZW5jZXMgZXhpc3QuCi0gIHZvaWQgVW5yZWYoKSB7Ci0gICAgLS1yZWZzXzsKLSAgICBhc3Nl
cnQocmVmc18gPj0gMCk7Ci0gICAgaWYgKHJlZnNfIDw9IDApIHsKLSAgICAgIGRlbGV0ZSB0aGlz
OwotICAgIH0KLSAgfQotCi0gIC8vIFJldHVybnMgYW4gZXN0aW1hdGUgb2YgdGhlIG51bWJlciBv
ZiBieXRlcyBvZiBkYXRhIGluIHVzZSBieSB0aGlzCi0gIC8vIGRhdGEgc3RydWN0dXJlLgotICAv
LwotICAvLyBSRVFVSVJFUzogZXh0ZXJuYWwgc3luY2hyb25pemF0aW9uIHRvIHByZXZlbnQgc2lt
dWx0YW5lb3VzCi0gIC8vIG9wZXJhdGlvbnMgb24gdGhlIHNhbWUgTWVtVGFibGUuCi0gIHNpemVf
dCBBcHByb3hpbWF0ZU1lbW9yeVVzYWdlKCk7Ci0KLSAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHRo
YXQgeWllbGRzIHRoZSBjb250ZW50cyBvZiB0aGUgbWVtdGFibGUuCi0gIC8vCi0gIC8vIFRoZSBj
YWxsZXIgbXVzdCBlbnN1cmUgdGhhdCB0aGUgdW5kZXJseWluZyBNZW1UYWJsZSByZW1haW5zIGxp
dmUKLSAgLy8gd2hpbGUgdGhlIHJldHVybmVkIGl0ZXJhdG9yIGlzIGxpdmUuICBUaGUga2V5cyBy
ZXR1cm5lZCBieSB0aGlzCi0gIC8vIGl0ZXJhdG9yIGFyZSBpbnRlcm5hbCBrZXlzIGVuY29kZWQg
YnkgQXBwZW5kSW50ZXJuYWxLZXkgaW4gdGhlCi0gIC8vIGRiL2Zvcm1hdC57aCxjY30gbW9kdWxl
LgotICBJdGVyYXRvciogTmV3SXRlcmF0b3IoKTsKLQotICAvLyBBZGQgYW4gZW50cnkgaW50byBt
ZW10YWJsZSB0aGF0IG1hcHMga2V5IHRvIHZhbHVlIGF0IHRoZQotICAvLyBzcGVjaWZpZWQgc2Vx
dWVuY2UgbnVtYmVyIGFuZCB3aXRoIHRoZSBzcGVjaWZpZWQgdHlwZS4KLSAgLy8gVHlwaWNhbGx5
IHZhbHVlIHdpbGwgYmUgZW1wdHkgaWYgdHlwZT09a1R5cGVEZWxldGlvbi4KLSAgdm9pZCBBZGQo
U2VxdWVuY2VOdW1iZXIgc2VxLCBWYWx1ZVR5cGUgdHlwZSwKLSAgICAgICAgICAgY29uc3QgU2xp
Y2UmIGtleSwKLSAgICAgICAgICAgY29uc3QgU2xpY2UmIHZhbHVlKTsKLQotICAvLyBJZiBtZW10
YWJsZSBjb250YWlucyBhIHZhbHVlIGZvciBrZXksIHN0b3JlIGl0IGluICp2YWx1ZSBhbmQgcmV0
dXJuIHRydWUuCi0gIC8vIElmIG1lbXRhYmxlIGNvbnRhaW5zIGEgZGVsZXRpb24gZm9yIGtleSwg
c3RvcmUgYSBOb3RGb3VuZCgpIGVycm9yCi0gIC8vIGluICpzdGF0dXMgYW5kIHJldHVybiB0cnVl
LgotICAvLyBFbHNlLCByZXR1cm4gZmFsc2UuCi0gIGJvb2wgR2V0KGNvbnN0IExvb2t1cEtleSYg
a2V5LCBzdGQ6OnN0cmluZyogdmFsdWUsIFN0YXR1cyogcyk7Ci0KLSBwcml2YXRlOgotICB+TWVt
VGFibGUoKTsgIC8vIFByaXZhdGUgc2luY2Ugb25seSBVbnJlZigpIHNob3VsZCBiZSB1c2VkIHRv
IGRlbGV0ZSBpdAotCi0gIHN0cnVjdCBLZXlDb21wYXJhdG9yIHsKLSAgICBjb25zdCBJbnRlcm5h
bEtleUNvbXBhcmF0b3IgY29tcGFyYXRvcjsKLSAgICBleHBsaWNpdCBLZXlDb21wYXJhdG9yKGNv
bnN0IEludGVybmFsS2V5Q29tcGFyYXRvciYgYykgOiBjb21wYXJhdG9yKGMpIHsgfQotICAgIGlu
dCBvcGVyYXRvcigpKGNvbnN0IGNoYXIqIGEsIGNvbnN0IGNoYXIqIGIpIGNvbnN0OwotICB9Owot
ICBmcmllbmQgY2xhc3MgTWVtVGFibGVJdGVyYXRvcjsKLSAgZnJpZW5kIGNsYXNzIE1lbVRhYmxl
QmFja3dhcmRJdGVyYXRvcjsKLQotICB0eXBlZGVmIFNraXBMaXN0PGNvbnN0IGNoYXIqLCBLZXlD
b21wYXJhdG9yPiBUYWJsZTsKLQotICBLZXlDb21wYXJhdG9yIGNvbXBhcmF0b3JfOwotICBpbnQg
cmVmc187Ci0gIEFyZW5hIGFyZW5hXzsKLSAgVGFibGUgdGFibGVfOwotCi0gIC8vIE5vIGNvcHlp
bmcgYWxsb3dlZAotICBNZW1UYWJsZShjb25zdCBNZW1UYWJsZSYpOwotICB2b2lkIG9wZXJhdG9y
PShjb25zdCBNZW1UYWJsZSYpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKLQotI2Vu
ZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfREJfTUVNVEFCTEVfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvcmVwYWlyLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi9kYi9yZXBhaXIuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMmQ1MmYu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9yZXBhaXIuY2MKKysr
IC9kZXYvbnVsbApAQCAtMSwzODkgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBM
ZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFt
ZXMgb2YgY29udHJpYnV0b3JzLgotLy8KLS8vIFdlIHJlY292ZXIgdGhlIGNvbnRlbnRzIG9mIHRo
ZSBkZXNjcmlwdG9yIGZyb20gdGhlIG90aGVyIGZpbGVzIHdlIGZpbmQuCi0vLyAoMSkgQW55IGxv
ZyBmaWxlcyBhcmUgZmlyc3QgY29udmVydGVkIHRvIHRhYmxlcwotLy8gKDIpIFdlIHNjYW4gZXZl
cnkgdGFibGUgdG8gY29tcHV0ZQotLy8gICAgIChhKSBzbWFsbGVzdC9sYXJnZXN0IGZvciB0aGUg
dGFibGUKLS8vICAgICAoYikgbGFyZ2VzdCBzZXF1ZW5jZSBudW1iZXIgaW4gdGhlIHRhYmxlCi0v
LyAoMykgV2UgZ2VuZXJhdGUgZGVzY3JpcHRvciBjb250ZW50czoKLS8vICAgICAgLSBsb2cgbnVt
YmVyIGlzIHNldCB0byB6ZXJvCi0vLyAgICAgIC0gbmV4dC1maWxlLW51bWJlciBpcyBzZXQgdG8g
MSArIGxhcmdlc3QgZmlsZSBudW1iZXIgd2UgZm91bmQKLS8vICAgICAgLSBsYXN0LXNlcXVlbmNl
LW51bWJlciBpcyBzZXQgdG8gbGFyZ2VzdCBzZXF1ZW5jZSMgZm91bmQgYWNyb3NzCi0vLyAgICAg
ICAgYWxsIHRhYmxlcyAoc2VlIDJjKQotLy8gICAgICAtIGNvbXBhY3Rpb24gcG9pbnRlcnMgYXJl
IGNsZWFyZWQKLS8vICAgICAgLSBldmVyeSB0YWJsZSBmaWxlIGlzIGFkZGVkIGF0IGxldmVsIDAK
LS8vCi0vLyBQb3NzaWJsZSBvcHRpbWl6YXRpb24gMToKLS8vICAgKGEpIENvbXB1dGUgdG90YWwg
c2l6ZSBhbmQgdXNlIHRvIHBpY2sgYXBwcm9wcmlhdGUgbWF4LWxldmVsIE0KLS8vICAgKGIpIFNv
cnQgdGFibGVzIGJ5IGxhcmdlc3Qgc2VxdWVuY2UjIGluIHRoZSB0YWJsZQotLy8gICAoYykgRm9y
IGVhY2ggdGFibGU6IGlmIGl0IG92ZXJsYXBzIGVhcmxpZXIgdGFibGUsIHBsYWNlIGluIGxldmVs
LTAsCi0vLyAgICAgICBlbHNlIHBsYWNlIGluIGxldmVsLU0uCi0vLyBQb3NzaWJsZSBvcHRpbWl6
YXRpb24gMjoKLS8vICAgU3RvcmUgcGVyLXRhYmxlIG1ldGFkYXRhIChzbWFsbGVzdCwgbGFyZ2Vz
dCwgbGFyZ2VzdC1zZXEjLCAuLi4pCi0vLyAgIGluIHRoZSB0YWJsZSdzIG1ldGEgc2VjdGlvbiB0
byBzcGVlZCB1cCBTY2FuVGFibGUuCi0KLSNpbmNsdWRlICJkYi9idWlsZGVyLmgiCi0jaW5jbHVk
ZSAiZGIvZGJfaW1wbC5oIgotI2luY2x1ZGUgImRiL2RiZm9ybWF0LmgiCi0jaW5jbHVkZSAiZGIv
ZmlsZW5hbWUuaCIKLSNpbmNsdWRlICJkYi9sb2dfcmVhZGVyLmgiCi0jaW5jbHVkZSAiZGIvbG9n
X3dyaXRlci5oIgotI2luY2x1ZGUgImRiL21lbXRhYmxlLmgiCi0jaW5jbHVkZSAiZGIvdGFibGVf
Y2FjaGUuaCIKLSNpbmNsdWRlICJkYi92ZXJzaW9uX2VkaXQuaCIKLSNpbmNsdWRlICJkYi93cml0
ZV9iYXRjaF9pbnRlcm5hbC5oIgotI2luY2x1ZGUgImxldmVsZGIvY29tcGFyYXRvci5oIgotI2lu
Y2x1ZGUgImxldmVsZGIvZGIuaCIKLSNpbmNsdWRlICJsZXZlbGRiL2Vudi5oIgotCi1uYW1lc3Bh
Y2UgbGV2ZWxkYiB7Ci0KLW5hbWVzcGFjZSB7Ci0KLWNsYXNzIFJlcGFpcmVyIHsKLSBwdWJsaWM6
Ci0gIFJlcGFpcmVyKGNvbnN0IHN0ZDo6c3RyaW5nJiBkYm5hbWUsIGNvbnN0IE9wdGlvbnMmIG9w
dGlvbnMpCi0gICAgICA6IGRibmFtZV8oZGJuYW1lKSwKLSAgICAgICAgZW52XyhvcHRpb25zLmVu
diksCi0gICAgICAgIGljbXBfKG9wdGlvbnMuY29tcGFyYXRvciksCi0gICAgICAgIGlwb2xpY3lf
KG9wdGlvbnMuZmlsdGVyX3BvbGljeSksCi0gICAgICAgIG9wdGlvbnNfKFNhbml0aXplT3B0aW9u
cyhkYm5hbWUsICZpY21wXywgJmlwb2xpY3lfLCBvcHRpb25zKSksCi0gICAgICAgIG93bnNfaW5m
b19sb2dfKG9wdGlvbnNfLmluZm9fbG9nICE9IG9wdGlvbnMuaW5mb19sb2cpLAotICAgICAgICBv
d25zX2NhY2hlXyhvcHRpb25zXy5ibG9ja19jYWNoZSAhPSBvcHRpb25zLmJsb2NrX2NhY2hlKSwK
LSAgICAgICAgbmV4dF9maWxlX251bWJlcl8oMSkgewotICAgIC8vIFRhYmxlQ2FjaGUgY2FuIGJl
IHNtYWxsIHNpbmNlIHdlIGV4cGVjdCBlYWNoIHRhYmxlIHRvIGJlIG9wZW5lZCBvbmNlLgotICAg
IHRhYmxlX2NhY2hlXyA9IG5ldyBUYWJsZUNhY2hlKGRibmFtZV8sICZvcHRpb25zXywgMTApOwot
ICB9Ci0KLSAgflJlcGFpcmVyKCkgewotICAgIGRlbGV0ZSB0YWJsZV9jYWNoZV87Ci0gICAgaWYg
KG93bnNfaW5mb19sb2dfKSB7Ci0gICAgICBkZWxldGUgb3B0aW9uc18uaW5mb19sb2c7Ci0gICAg
fQotICAgIGlmIChvd25zX2NhY2hlXykgewotICAgICAgZGVsZXRlIG9wdGlvbnNfLmJsb2NrX2Nh
Y2hlOwotICAgIH0KLSAgfQotCi0gIFN0YXR1cyBSdW4oKSB7Ci0gICAgU3RhdHVzIHN0YXR1cyA9
IEZpbmRGaWxlcygpOwotICAgIGlmIChzdGF0dXMub2soKSkgewotICAgICAgQ29udmVydExvZ0Zp
bGVzVG9UYWJsZXMoKTsKLSAgICAgIEV4dHJhY3RNZXRhRGF0YSgpOwotICAgICAgc3RhdHVzID0g
V3JpdGVEZXNjcmlwdG9yKCk7Ci0gICAgfQotICAgIGlmIChzdGF0dXMub2soKSkgewotICAgICAg
dW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzID0gMDsKLSAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdGFibGVzXy5zaXplKCk7IGkrKykgewotICAgICAgICBieXRlcyArPSB0YWJsZXNfW2ldLm1l
dGEuZmlsZV9zaXplOwotICAgICAgfQotICAgICAgTG9nKG9wdGlvbnNfLmluZm9fbG9nLAotICAg
ICAgICAgICIqKioqIFJlcGFpcmVkIGxldmVsZGIgJXM7ICIKLSAgICAgICAgICAicmVjb3ZlcmVk
ICVkIGZpbGVzOyAlbGx1IGJ5dGVzLiAiCi0gICAgICAgICAgIlNvbWUgZGF0YSBtYXkgaGF2ZSBi
ZWVuIGxvc3QuICIKLSAgICAgICAgICAiKioqKiIsCi0gICAgICAgICAgZGJuYW1lXy5jX3N0cigp
LAotICAgICAgICAgIHN0YXRpY19jYXN0PGludD4odGFibGVzXy5zaXplKCkpLAotICAgICAgICAg
IGJ5dGVzKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN0YXR1czsKLSAgfQotCi0gcHJpdmF0ZToKLSAg
c3RydWN0IFRhYmxlSW5mbyB7Ci0gICAgRmlsZU1ldGFEYXRhIG1ldGE7Ci0gICAgU2VxdWVuY2VO
dW1iZXIgbWF4X3NlcXVlbmNlOwotICB9OwotCi0gIHN0ZDo6c3RyaW5nIGNvbnN0IGRibmFtZV87
Ci0gIEVudiogY29uc3QgZW52XzsKLSAgSW50ZXJuYWxLZXlDb21wYXJhdG9yIGNvbnN0IGljbXBf
OwotICBJbnRlcm5hbEZpbHRlclBvbGljeSBjb25zdCBpcG9saWN5XzsKLSAgT3B0aW9ucyBjb25z
dCBvcHRpb25zXzsKLSAgYm9vbCBvd25zX2luZm9fbG9nXzsKLSAgYm9vbCBvd25zX2NhY2hlXzsK
LSAgVGFibGVDYWNoZSogdGFibGVfY2FjaGVfOwotICBWZXJzaW9uRWRpdCBlZGl0XzsKLQotICBz
dGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbWFuaWZlc3RzXzsKLSAgc3RkOjp2ZWN0b3I8dWludDY0
X3Q+IHRhYmxlX251bWJlcnNfOwotICBzdGQ6OnZlY3Rvcjx1aW50NjRfdD4gbG9nc187Ci0gIHN0
ZDo6dmVjdG9yPFRhYmxlSW5mbz4gdGFibGVzXzsKLSAgdWludDY0X3QgbmV4dF9maWxlX251bWJl
cl87Ci0KLSAgU3RhdHVzIEZpbmRGaWxlcygpIHsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmlu
Zz4gZmlsZW5hbWVzOwotICAgIFN0YXR1cyBzdGF0dXMgPSBlbnZfLT5HZXRDaGlsZHJlbihkYm5h
bWVfLCAmZmlsZW5hbWVzKTsKLSAgICBpZiAoIXN0YXR1cy5vaygpKSB7Ci0gICAgICByZXR1cm4g
c3RhdHVzOwotICAgIH0KLSAgICBpZiAoZmlsZW5hbWVzLmVtcHR5KCkpIHsKLSAgICAgIHJldHVy
biBTdGF0dXM6OklPRXJyb3IoZGJuYW1lXywgInJlcGFpciBmb3VuZCBubyBmaWxlcyIpOwotICAg
IH0KLQotICAgIHVpbnQ2NF90IG51bWJlcjsKLSAgICBGaWxlVHlwZSB0eXBlOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZmlsZW5hbWVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICBpZiAoUGFy
c2VGaWxlTmFtZShmaWxlbmFtZXNbaV0sICZudW1iZXIsICZ0eXBlKSkgewotICAgICAgICBpZiAo
dHlwZSA9PSBrRGVzY3JpcHRvckZpbGUpIHsKLSAgICAgICAgICBtYW5pZmVzdHNfLnB1c2hfYmFj
ayhmaWxlbmFtZXNbaV0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGlmIChudW1iZXIg
KyAxID4gbmV4dF9maWxlX251bWJlcl8pIHsKLSAgICAgICAgICAgIG5leHRfZmlsZV9udW1iZXJf
ID0gbnVtYmVyICsgMTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHR5cGUgPT0ga0xvZ0Zp
bGUpIHsKLSAgICAgICAgICAgIGxvZ3NfLnB1c2hfYmFjayhudW1iZXIpOwotICAgICAgICAgIH0g
ZWxzZSBpZiAodHlwZSA9PSBrVGFibGVGaWxlKSB7Ci0gICAgICAgICAgICB0YWJsZV9udW1iZXJz
Xy5wdXNoX2JhY2sobnVtYmVyKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8g
SWdub3JlIG90aGVyIGZpbGVzCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
fQotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLQotICB2b2lkIENvbnZlcnRMb2dGaWxlc1RvVGFi
bGVzKCkgewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbG9nc18uc2l6ZSgpOyBpKyspIHsK
LSAgICAgIHN0ZDo6c3RyaW5nIGxvZ25hbWUgPSBMb2dGaWxlTmFtZShkYm5hbWVfLCBsb2dzX1tp
XSk7Ci0gICAgICBTdGF0dXMgc3RhdHVzID0gQ29udmVydExvZ1RvVGFibGUobG9nc19baV0pOwot
ICAgICAgaWYgKCFzdGF0dXMub2soKSkgewotICAgICAgICBMb2cob3B0aW9uc18uaW5mb19sb2cs
ICJMb2cgIyVsbHU6IGlnbm9yaW5nIGNvbnZlcnNpb24gZXJyb3I6ICVzIiwKLSAgICAgICAgICAg
ICh1bnNpZ25lZCBsb25nIGxvbmcpIGxvZ3NfW2ldLAotICAgICAgICAgICAgc3RhdHVzLlRvU3Ry
aW5nKCkuY19zdHIoKSk7Ci0gICAgICB9Ci0gICAgICBBcmNoaXZlRmlsZShsb2duYW1lKTsKLSAg
ICB9Ci0gIH0KLQotICBTdGF0dXMgQ29udmVydExvZ1RvVGFibGUodWludDY0X3QgbG9nKSB7Ci0g
ICAgc3RydWN0IExvZ1JlcG9ydGVyIDogcHVibGljIGxvZzo6UmVhZGVyOjpSZXBvcnRlciB7Ci0g
ICAgICBFbnYqIGVudjsKLSAgICAgIExvZ2dlciogaW5mb19sb2c7Ci0gICAgICB1aW50NjRfdCBs
b2dudW07Ci0gICAgICB2aXJ0dWFsIHZvaWQgQ29ycnVwdGlvbihzaXplX3QgYnl0ZXMsIGNvbnN0
IFN0YXR1cyYgcykgewotICAgICAgICAvLyBXZSBwcmludCBlcnJvciBtZXNzYWdlcyBmb3IgY29y
cnVwdGlvbiwgYnV0IGNvbnRpbnVlIHJlcGFpcmluZy4KLSAgICAgICAgTG9nKGluZm9fbG9nLCAi
TG9nICMlbGx1OiBkcm9wcGluZyAlZCBieXRlczsgJXMiLAotICAgICAgICAgICAgKHVuc2lnbmVk
IGxvbmcgbG9uZykgbG9nbnVtLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihieXRlcyks
Ci0gICAgICAgICAgICBzLlRvU3RyaW5nKCkuY19zdHIoKSk7Ci0gICAgICB9Ci0gICAgfTsKLQot
ICAgIC8vIE9wZW4gdGhlIGxvZyBmaWxlCi0gICAgc3RkOjpzdHJpbmcgbG9nbmFtZSA9IExvZ0Zp
bGVOYW1lKGRibmFtZV8sIGxvZyk7Ci0gICAgU2VxdWVudGlhbEZpbGUqIGxmaWxlOwotICAgIFN0
YXR1cyBzdGF0dXMgPSBlbnZfLT5OZXdTZXF1ZW50aWFsRmlsZShsb2duYW1lLCAmbGZpbGUpOwot
ICAgIGlmICghc3RhdHVzLm9rKCkpIHsKLSAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotCi0g
ICAgLy8gQ3JlYXRlIHRoZSBsb2cgcmVhZGVyLgotICAgIExvZ1JlcG9ydGVyIHJlcG9ydGVyOwot
ICAgIHJlcG9ydGVyLmVudiA9IGVudl87Ci0gICAgcmVwb3J0ZXIuaW5mb19sb2cgPSBvcHRpb25z
Xy5pbmZvX2xvZzsKLSAgICByZXBvcnRlci5sb2dudW0gPSBsb2c7Ci0gICAgLy8gV2UgaW50ZW50
aWFsbHkgbWFrZSBsb2c6OlJlYWRlciBkbyBjaGVja3N1bW1pbmcgc28gdGhhdAotICAgIC8vIGNv
cnJ1cHRpb25zIGNhdXNlIGVudGlyZSBjb21taXRzIHRvIGJlIHNraXBwZWQgaW5zdGVhZCBvZgot
ICAgIC8vIHByb3BhZ2F0aW5nIGJhZCBpbmZvcm1hdGlvbiAobGlrZSBvdmVybHkgbGFyZ2Ugc2Vx
dWVuY2UKLSAgICAvLyBudW1iZXJzKS4KLSAgICBsb2c6OlJlYWRlciByZWFkZXIobGZpbGUsICZy
ZXBvcnRlciwgZmFsc2UvKmRvIG5vdCBjaGVja3N1bSovLAotICAgICAgICAgICAgICAgICAgICAg
ICAwLyppbml0aWFsX29mZnNldCovKTsKLQotICAgIC8vIFJlYWQgYWxsIHRoZSByZWNvcmRzIGFu
ZCBhZGQgdG8gYSBtZW10YWJsZQotICAgIHN0ZDo6c3RyaW5nIHNjcmF0Y2g7Ci0gICAgU2xpY2Ug
cmVjb3JkOwotICAgIFdyaXRlQmF0Y2ggYmF0Y2g7Ci0gICAgTWVtVGFibGUqIG1lbSA9IG5ldyBN
ZW1UYWJsZShpY21wXyk7Ci0gICAgbWVtLT5SZWYoKTsKLSAgICBpbnQgY291bnRlciA9IDA7Ci0g
ICAgd2hpbGUgKHJlYWRlci5SZWFkUmVjb3JkKCZyZWNvcmQsICZzY3JhdGNoKSkgewotICAgICAg
aWYgKHJlY29yZC5zaXplKCkgPCAxMikgewotICAgICAgICByZXBvcnRlci5Db3JydXB0aW9uKAot
ICAgICAgICAgICAgcmVjb3JkLnNpemUoKSwgU3RhdHVzOjpDb3JydXB0aW9uKCJsb2cgcmVjb3Jk
IHRvbyBzbWFsbCIpKTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICBXcml0ZUJh
dGNoSW50ZXJuYWw6OlNldENvbnRlbnRzKCZiYXRjaCwgcmVjb3JkKTsKLSAgICAgIHN0YXR1cyA9
IFdyaXRlQmF0Y2hJbnRlcm5hbDo6SW5zZXJ0SW50bygmYmF0Y2gsIG1lbSk7Ci0gICAgICBpZiAo
c3RhdHVzLm9rKCkpIHsKLSAgICAgICAgY291bnRlciArPSBXcml0ZUJhdGNoSW50ZXJuYWw6OkNv
dW50KCZiYXRjaCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBMb2cob3B0aW9uc18uaW5mb19s
b2csICJMb2cgIyVsbHU6IGlnbm9yaW5nICVzIiwKLSAgICAgICAgICAgICh1bnNpZ25lZCBsb25n
IGxvbmcpIGxvZywKLSAgICAgICAgICAgIHN0YXR1cy5Ub1N0cmluZygpLmNfc3RyKCkpOwotICAg
ICAgICBzdGF0dXMgPSBTdGF0dXM6Ok9LKCk7ICAvLyBLZWVwIGdvaW5nIHdpdGggcmVzdCBvZiBm
aWxlCi0gICAgICB9Ci0gICAgfQotICAgIGRlbGV0ZSBsZmlsZTsKLQotICAgIC8vIERvIG5vdCBy
ZWNvcmQgYSB2ZXJzaW9uIGVkaXQgZm9yIHRoaXMgY29udmVyc2lvbiB0byBhIFRhYmxlCi0gICAg
Ly8gc2luY2UgRXh0cmFjdE1ldGFEYXRhKCkgd2lsbCBhbHNvIGdlbmVyYXRlIGVkaXRzLgotICAg
IEZpbGVNZXRhRGF0YSBtZXRhOwotICAgIG1ldGEubnVtYmVyID0gbmV4dF9maWxlX251bWJlcl8r
KzsKLSAgICBJdGVyYXRvciogaXRlciA9IG1lbS0+TmV3SXRlcmF0b3IoKTsKLSAgICBzdGF0dXMg
PSBCdWlsZFRhYmxlKGRibmFtZV8sIGVudl8sIG9wdGlvbnNfLCB0YWJsZV9jYWNoZV8sIGl0ZXIs
ICZtZXRhKTsKLSAgICBkZWxldGUgaXRlcjsKLSAgICBtZW0tPlVucmVmKCk7Ci0gICAgbWVtID0g
TlVMTDsKLSAgICBpZiAoc3RhdHVzLm9rKCkpIHsKLSAgICAgIGlmIChtZXRhLmZpbGVfc2l6ZSA+
IDApIHsKLSAgICAgICAgdGFibGVfbnVtYmVyc18ucHVzaF9iYWNrKG1ldGEubnVtYmVyKTsKLSAg
ICAgIH0KLSAgICB9Ci0gICAgTG9nKG9wdGlvbnNfLmluZm9fbG9nLCAiTG9nICMlbGx1OiAlZCBv
cHMgc2F2ZWQgdG8gVGFibGUgIyVsbHUgJXMiLAotICAgICAgICAodW5zaWduZWQgbG9uZyBsb25n
KSBsb2csCi0gICAgICAgIGNvdW50ZXIsCi0gICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIG1l
dGEubnVtYmVyLAotICAgICAgICBzdGF0dXMuVG9TdHJpbmcoKS5jX3N0cigpKTsKLSAgICByZXR1
cm4gc3RhdHVzOwotICB9Ci0KLSAgdm9pZCBFeHRyYWN0TWV0YURhdGEoKSB7Ci0gICAgc3RkOjp2
ZWN0b3I8VGFibGVJbmZvPiBrZXB0OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFibGVf
bnVtYmVyc18uc2l6ZSgpOyBpKyspIHsKLSAgICAgIFRhYmxlSW5mbyB0OwotICAgICAgdC5tZXRh
Lm51bWJlciA9IHRhYmxlX251bWJlcnNfW2ldOwotICAgICAgU3RhdHVzIHN0YXR1cyA9IFNjYW5U
YWJsZSgmdCk7Ci0gICAgICBpZiAoIXN0YXR1cy5vaygpKSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5n
IGZuYW1lID0gVGFibGVGaWxlTmFtZShkYm5hbWVfLCB0YWJsZV9udW1iZXJzX1tpXSk7Ci0gICAg
ICAgIExvZyhvcHRpb25zXy5pbmZvX2xvZywgIlRhYmxlICMlbGx1OiBpZ25vcmluZyAlcyIsCi0g
ICAgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSB0YWJsZV9udW1iZXJzX1tpXSwKLSAgICAg
ICAgICAgIHN0YXR1cy5Ub1N0cmluZygpLmNfc3RyKCkpOwotICAgICAgICBBcmNoaXZlRmlsZShm
bmFtZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0YWJsZXNfLnB1c2hfYmFjayh0KTsKLSAg
ICAgIH0KLSAgICB9Ci0gIH0KLQotICBTdGF0dXMgU2NhblRhYmxlKFRhYmxlSW5mbyogdCkgewot
ICAgIHN0ZDo6c3RyaW5nIGZuYW1lID0gVGFibGVGaWxlTmFtZShkYm5hbWVfLCB0LT5tZXRhLm51
bWJlcik7Ci0gICAgaW50IGNvdW50ZXIgPSAwOwotICAgIFN0YXR1cyBzdGF0dXMgPSBlbnZfLT5H
ZXRGaWxlU2l6ZShmbmFtZSwgJnQtPm1ldGEuZmlsZV9zaXplKTsKLSAgICBpZiAoc3RhdHVzLm9r
KCkpIHsKLSAgICAgIEl0ZXJhdG9yKiBpdGVyID0gdGFibGVfY2FjaGVfLT5OZXdJdGVyYXRvcigK
LSAgICAgICAgICBSZWFkT3B0aW9ucygpLCB0LT5tZXRhLm51bWJlciwgdC0+bWV0YS5maWxlX3Np
emUpOwotICAgICAgYm9vbCBlbXB0eSA9IHRydWU7Ci0gICAgICBQYXJzZWRJbnRlcm5hbEtleSBw
YXJzZWQ7Ci0gICAgICB0LT5tYXhfc2VxdWVuY2UgPSAwOwotICAgICAgZm9yIChpdGVyLT5TZWVr
VG9GaXJzdCgpOyBpdGVyLT5WYWxpZCgpOyBpdGVyLT5OZXh0KCkpIHsKLSAgICAgICAgU2xpY2Ug
a2V5ID0gaXRlci0+a2V5KCk7Ci0gICAgICAgIGlmICghUGFyc2VJbnRlcm5hbEtleShrZXksICZw
YXJzZWQpKSB7Ci0gICAgICAgICAgTG9nKG9wdGlvbnNfLmluZm9fbG9nLCAiVGFibGUgIyVsbHU6
IHVucGFyc2FibGUga2V5ICVzIiwKLSAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykg
dC0+bWV0YS5udW1iZXIsCi0gICAgICAgICAgICAgIEVzY2FwZVN0cmluZyhrZXkpLmNfc3RyKCkp
OwotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgY291bnRlcisrOwot
ICAgICAgICBpZiAoZW1wdHkpIHsKLSAgICAgICAgICBlbXB0eSA9IGZhbHNlOwotICAgICAgICAg
IHQtPm1ldGEuc21hbGxlc3QuRGVjb2RlRnJvbShrZXkpOwotICAgICAgICB9Ci0gICAgICAgIHQt
Pm1ldGEubGFyZ2VzdC5EZWNvZGVGcm9tKGtleSk7Ci0gICAgICAgIGlmIChwYXJzZWQuc2VxdWVu
Y2UgPiB0LT5tYXhfc2VxdWVuY2UpIHsKLSAgICAgICAgICB0LT5tYXhfc2VxdWVuY2UgPSBwYXJz
ZWQuc2VxdWVuY2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmICghaXRlci0+c3RhdHVz
KCkub2soKSkgewotICAgICAgICBzdGF0dXMgPSBpdGVyLT5zdGF0dXMoKTsKLSAgICAgIH0KLSAg
ICAgIGRlbGV0ZSBpdGVyOwotICAgIH0KLSAgICBMb2cob3B0aW9uc18uaW5mb19sb2csICJUYWJs
ZSAjJWxsdTogJWQgZW50cmllcyAlcyIsCi0gICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHQt
Pm1ldGEubnVtYmVyLAotICAgICAgICBjb3VudGVyLAotICAgICAgICBzdGF0dXMuVG9TdHJpbmco
KS5jX3N0cigpKTsKLSAgICByZXR1cm4gc3RhdHVzOwotICB9Ci0KLSAgU3RhdHVzIFdyaXRlRGVz
Y3JpcHRvcigpIHsKLSAgICBzdGQ6OnN0cmluZyB0bXAgPSBUZW1wRmlsZU5hbWUoZGJuYW1lXywg
MSk7Ci0gICAgV3JpdGFibGVGaWxlKiBmaWxlOwotICAgIFN0YXR1cyBzdGF0dXMgPSBlbnZfLT5O
ZXdXcml0YWJsZUZpbGUodG1wLCAmZmlsZSk7Ci0gICAgaWYgKCFzdGF0dXMub2soKSkgewotICAg
ICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0KLSAgICBTZXF1ZW5jZU51bWJlciBtYXhfc2VxdWVu
Y2UgPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFibGVzXy5zaXplKCk7IGkrKykg
ewotICAgICAgaWYgKG1heF9zZXF1ZW5jZSA8IHRhYmxlc19baV0ubWF4X3NlcXVlbmNlKSB7Ci0g
ICAgICAgIG1heF9zZXF1ZW5jZSA9IHRhYmxlc19baV0ubWF4X3NlcXVlbmNlOwotICAgICAgfQot
ICAgIH0KLQotICAgIGVkaXRfLlNldENvbXBhcmF0b3JOYW1lKGljbXBfLnVzZXJfY29tcGFyYXRv
cigpLT5OYW1lKCkpOwotICAgIGVkaXRfLlNldExvZ051bWJlcigwKTsKLSAgICBlZGl0Xy5TZXRO
ZXh0RmlsZShuZXh0X2ZpbGVfbnVtYmVyXyk7Ci0gICAgZWRpdF8uU2V0TGFzdFNlcXVlbmNlKG1h
eF9zZXF1ZW5jZSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhYmxlc18uc2l6ZSgp
OyBpKyspIHsKLSAgICAgIC8vIFRPRE8ob3B0KTogc2VwYXJhdGUgb3V0IGludG8gbXVsdGlwbGUg
bGV2ZWxzCi0gICAgICBjb25zdCBUYWJsZUluZm8mIHQgPSB0YWJsZXNfW2ldOwotICAgICAgZWRp
dF8uQWRkRmlsZSgwLCB0Lm1ldGEubnVtYmVyLCB0Lm1ldGEuZmlsZV9zaXplLAotICAgICAgICAg
ICAgICAgICAgICB0Lm1ldGEuc21hbGxlc3QsIHQubWV0YS5sYXJnZXN0KTsKLSAgICB9Ci0KLSAg
ICAvL2ZwcmludGYoc3RkZXJyLCAiTmV3RGVzY3JpcHRvcjpcbiVzXG4iLCBlZGl0Xy5EZWJ1Z1N0
cmluZygpLmNfc3RyKCkpOwotICAgIHsKLSAgICAgIGxvZzo6V3JpdGVyIGxvZyhmaWxlKTsKLSAg
ICAgIHN0ZDo6c3RyaW5nIHJlY29yZDsKLSAgICAgIGVkaXRfLkVuY29kZVRvKCZyZWNvcmQpOwot
ICAgICAgc3RhdHVzID0gbG9nLkFkZFJlY29yZChyZWNvcmQpOwotICAgIH0KLSAgICBpZiAoc3Rh
dHVzLm9rKCkpIHsKLSAgICAgIHN0YXR1cyA9IGZpbGUtPkNsb3NlKCk7Ci0gICAgfQotICAgIGRl
bGV0ZSBmaWxlOwotICAgIGZpbGUgPSBOVUxMOwotCi0gICAgaWYgKCFzdGF0dXMub2soKSkgewot
ICAgICAgZW52Xy0+RGVsZXRlRmlsZSh0bXApOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBEaXNj
YXJkIG9sZGVyIG1hbmlmZXN0cwotICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYW5pZmVz
dHNfLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIEFyY2hpdmVGaWxlKGRibmFtZV8gKyAiLyIgKyBt
YW5pZmVzdHNfW2ldKTsKLSAgICAgIH0KLQotICAgICAgLy8gSW5zdGFsbCBuZXcgbWFuaWZlc3QK
LSAgICAgIHN0YXR1cyA9IGVudl8tPlJlbmFtZUZpbGUodG1wLCBEZXNjcmlwdG9yRmlsZU5hbWUo
ZGJuYW1lXywgMSkpOwotICAgICAgaWYgKHN0YXR1cy5vaygpKSB7Ci0gICAgICAgIHN0YXR1cyA9
IFNldEN1cnJlbnRGaWxlKGVudl8sIGRibmFtZV8sIDEpOwotICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgZW52Xy0+RGVsZXRlRmlsZSh0bXApOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gc3Rh
dHVzOwotICB9Ci0KLSAgdm9pZCBBcmNoaXZlRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUp
IHsKLSAgICAvLyBNb3ZlIGludG8gYW5vdGhlciBkaXJlY3RvcnkuICBFLmcuLCBmb3IKLSAgICAv
LyAgICBkaXIvZm9vCi0gICAgLy8gcmVuYW1lIHRvCi0gICAgLy8gICAgZGlyL2xvc3QvZm9vCi0g
ICAgY29uc3QgY2hhciogc2xhc2ggPSBzdHJyY2hyKGZuYW1lLmNfc3RyKCksICcvJyk7Ci0gICAg
c3RkOjpzdHJpbmcgbmV3X2RpcjsKLSAgICBpZiAoc2xhc2ggIT0gTlVMTCkgewotICAgICAgbmV3
X2Rpci5hc3NpZ24oZm5hbWUuZGF0YSgpLCBzbGFzaCAtIGZuYW1lLmRhdGEoKSk7Ci0gICAgfQot
ICAgIG5ld19kaXIuYXBwZW5kKCIvbG9zdCIpOwotICAgIGVudl8tPkNyZWF0ZURpcihuZXdfZGly
KTsgIC8vIElnbm9yZSBlcnJvcgotICAgIHN0ZDo6c3RyaW5nIG5ld19maWxlID0gbmV3X2RpcjsK
LSAgICBuZXdfZmlsZS5hcHBlbmQoIi8iKTsKLSAgICBuZXdfZmlsZS5hcHBlbmQoKHNsYXNoID09
IE5VTEwpID8gZm5hbWUuY19zdHIoKSA6IHNsYXNoICsgMSk7Ci0gICAgU3RhdHVzIHMgPSBlbnZf
LT5SZW5hbWVGaWxlKGZuYW1lLCBuZXdfZmlsZSk7Ci0gICAgTG9nKG9wdGlvbnNfLmluZm9fbG9n
LCAiQXJjaGl2aW5nICVzOiAlc1xuIiwKLSAgICAgICAgZm5hbWUuY19zdHIoKSwgcy5Ub1N0cmlu
ZygpLmNfc3RyKCkpOwotICB9Ci19OwotfSAgLy8gbmFtZXNwYWNlCi0KLVN0YXR1cyBSZXBhaXJE
Qihjb25zdCBzdGQ6OnN0cmluZyYgZGJuYW1lLCBjb25zdCBPcHRpb25zJiBvcHRpb25zKSB7Ci0g
IFJlcGFpcmVyIHJlcGFpcmVyKGRibmFtZSwgb3B0aW9ucyk7Ci0gIHJldHVybiByZXBhaXJlci5S
dW4oKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvZGIvc2tpcGxpc3QuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVs
ZGIvZGIvc2tpcGxpc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY4NWJlNi4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3NraXBsaXN0LmgKKysr
IC9kZXYvbnVsbApAQCAtMSwzNzkgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBM
ZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0v
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFt
ZXMgb2YgY29udHJpYnV0b3JzLgotLy8KLS8vIFRocmVhZCBzYWZldHkKLS8vIC0tLS0tLS0tLS0t
LS0KLS8vCi0vLyBXcml0ZXMgcmVxdWlyZSBleHRlcm5hbCBzeW5jaHJvbml6YXRpb24sIG1vc3Qg
bGlrZWx5IGEgbXV0ZXguCi0vLyBSZWFkcyByZXF1aXJlIGEgZ3VhcmFudGVlIHRoYXQgdGhlIFNr
aXBMaXN0IHdpbGwgbm90IGJlIGRlc3Ryb3llZAotLy8gd2hpbGUgdGhlIHJlYWQgaXMgaW4gcHJv
Z3Jlc3MuICBBcGFydCBmcm9tIHRoYXQsIHJlYWRzIHByb2dyZXNzCi0vLyB3aXRob3V0IGFueSBp
bnRlcm5hbCBsb2NraW5nIG9yIHN5bmNocm9uaXphdGlvbi4KLS8vCi0vLyBJbnZhcmlhbnRzOgot
Ly8KLS8vICgxKSBBbGxvY2F0ZWQgbm9kZXMgYXJlIG5ldmVyIGRlbGV0ZWQgdW50aWwgdGhlIFNr
aXBMaXN0IGlzCi0vLyBkZXN0cm95ZWQuICBUaGlzIGlzIHRyaXZpYWxseSBndWFyYW50ZWVkIGJ5
IHRoZSBjb2RlIHNpbmNlIHdlCi0vLyBuZXZlciBkZWxldGUgYW55IHNraXAgbGlzdCBub2Rlcy4K
LS8vCi0vLyAoMikgVGhlIGNvbnRlbnRzIG9mIGEgTm9kZSBleGNlcHQgZm9yIHRoZSBuZXh0L3By
ZXYgcG9pbnRlcnMgYXJlCi0vLyBpbW11dGFibGUgYWZ0ZXIgdGhlIE5vZGUgaGFzIGJlZW4gbGlu
a2VkIGludG8gdGhlIFNraXBMaXN0LgotLy8gT25seSBJbnNlcnQoKSBtb2RpZmllcyB0aGUgbGlz
dCwgYW5kIGl0IGlzIGNhcmVmdWwgdG8gaW5pdGlhbGl6ZQotLy8gYSBub2RlIGFuZCB1c2UgcmVs
ZWFzZS1zdG9yZXMgdG8gcHVibGlzaCB0aGUgbm9kZXMgaW4gb25lIG9yCi0vLyBtb3JlIGxpc3Rz
LgotLy8KLS8vIC4uLiBwcmV2IHZzLiBuZXh0IHBvaW50ZXIgb3JkZXJpbmcgLi4uCi0KLSNpbmNs
dWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlICJwb3J0L3BvcnQu
aCIKLSNpbmNsdWRlICJ1dGlsL2FyZW5hLmgiCi0jaW5jbHVkZSAidXRpbC9yYW5kb20uaCIKLQot
bmFtZXNwYWNlIGxldmVsZGIgewotCi1jbGFzcyBBcmVuYTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
S2V5LCBjbGFzcyBDb21wYXJhdG9yPgotY2xhc3MgU2tpcExpc3QgewotIHByaXZhdGU6Ci0gIHN0
cnVjdCBOb2RlOwotCi0gcHVibGljOgotICAvLyBDcmVhdGUgYSBuZXcgU2tpcExpc3Qgb2JqZWN0
IHRoYXQgd2lsbCB1c2UgImNtcCIgZm9yIGNvbXBhcmluZyBrZXlzLAotICAvLyBhbmQgd2lsbCBh
bGxvY2F0ZSBtZW1vcnkgdXNpbmcgIiphcmVuYSIuICBPYmplY3RzIGFsbG9jYXRlZCBpbiB0aGUg
YXJlbmEKLSAgLy8gbXVzdCByZW1haW4gYWxsb2NhdGVkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhl
IHNraXBsaXN0IG9iamVjdC4KLSAgZXhwbGljaXQgU2tpcExpc3QoQ29tcGFyYXRvciBjbXAsIEFy
ZW5hKiBhcmVuYSk7Ci0KLSAgLy8gSW5zZXJ0IGtleSBpbnRvIHRoZSBsaXN0LgotICAvLyBSRVFV
SVJFUzogbm90aGluZyB0aGF0IGNvbXBhcmVzIGVxdWFsIHRvIGtleSBpcyBjdXJyZW50bHkgaW4g
dGhlIGxpc3QuCi0gIHZvaWQgSW5zZXJ0KGNvbnN0IEtleSYga2V5KTsKLQotICAvLyBSZXR1cm5z
IHRydWUgaWZmIGFuIGVudHJ5IHRoYXQgY29tcGFyZXMgZXF1YWwgdG8ga2V5IGlzIGluIHRoZSBs
aXN0LgotICBib29sIENvbnRhaW5zKGNvbnN0IEtleSYga2V5KSBjb25zdDsKLQotICAvLyBJdGVy
YXRpb24gb3ZlciB0aGUgY29udGVudHMgb2YgYSBza2lwIGxpc3QKLSAgY2xhc3MgSXRlcmF0b3Ig
ewotICAgcHVibGljOgotICAgIC8vIEluaXRpYWxpemUgYW4gaXRlcmF0b3Igb3ZlciB0aGUgc3Bl
Y2lmaWVkIGxpc3QuCi0gICAgLy8gVGhlIHJldHVybmVkIGl0ZXJhdG9yIGlzIG5vdCB2YWxpZC4K
LSAgICBleHBsaWNpdCBJdGVyYXRvcihjb25zdCBTa2lwTGlzdCogbGlzdCk7Ci0KLSAgICAvLyBS
ZXR1cm5zIHRydWUgaWZmIHRoZSBpdGVyYXRvciBpcyBwb3NpdGlvbmVkIGF0IGEgdmFsaWQgbm9k
ZS4KLSAgICBib29sIFZhbGlkKCkgY29uc3Q7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBrZXkgYXQg
dGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gICAgLy8gUkVRVUlSRVM6IFZhbGlkKCkKLSAgICBjb25z
dCBLZXkmIGtleSgpIGNvbnN0OwotCi0gICAgLy8gQWR2YW5jZXMgdG8gdGhlIG5leHQgcG9zaXRp
b24uCi0gICAgLy8gUkVRVUlSRVM6IFZhbGlkKCkKLSAgICB2b2lkIE5leHQoKTsKLQotICAgIC8v
IEFkdmFuY2VzIHRvIHRoZSBwcmV2aW91cyBwb3NpdGlvbi4KLSAgICAvLyBSRVFVSVJFUzogVmFs
aWQoKQotICAgIHZvaWQgUHJldigpOwotCi0gICAgLy8gQWR2YW5jZSB0byB0aGUgZmlyc3QgZW50
cnkgd2l0aCBhIGtleSA+PSB0YXJnZXQKLSAgICB2b2lkIFNlZWsoY29uc3QgS2V5JiB0YXJnZXQp
OwotCi0gICAgLy8gUG9zaXRpb24gYXQgdGhlIGZpcnN0IGVudHJ5IGluIGxpc3QuCi0gICAgLy8g
RmluYWwgc3RhdGUgb2YgaXRlcmF0b3IgaXMgVmFsaWQoKSBpZmYgbGlzdCBpcyBub3QgZW1wdHku
Ci0gICAgdm9pZCBTZWVrVG9GaXJzdCgpOwotCi0gICAgLy8gUG9zaXRpb24gYXQgdGhlIGxhc3Qg
ZW50cnkgaW4gbGlzdC4KLSAgICAvLyBGaW5hbCBzdGF0ZSBvZiBpdGVyYXRvciBpcyBWYWxpZCgp
IGlmZiBsaXN0IGlzIG5vdCBlbXB0eS4KLSAgICB2b2lkIFNlZWtUb0xhc3QoKTsKLQotICAgcHJp
dmF0ZToKLSAgICBjb25zdCBTa2lwTGlzdCogbGlzdF87Ci0gICAgTm9kZSogbm9kZV87Ci0gICAg
Ly8gSW50ZW50aW9uYWxseSBjb3B5YWJsZQotICB9OwotCi0gcHJpdmF0ZToKLSAgZW51bSB7IGtN
YXhIZWlnaHQgPSAxMiB9OwotCi0gIC8vIEltbXV0YWJsZSBhZnRlciBjb25zdHJ1Y3Rpb24KLSAg
Q29tcGFyYXRvciBjb25zdCBjb21wYXJlXzsKLSAgQXJlbmEqIGNvbnN0IGFyZW5hXzsgICAgLy8g
QXJlbmEgdXNlZCBmb3IgYWxsb2NhdGlvbnMgb2Ygbm9kZXMKLQotICBOb2RlKiBjb25zdCBoZWFk
XzsKLQotICAvLyBNb2RpZmllZCBvbmx5IGJ5IEluc2VydCgpLiAgUmVhZCByYWNpbHkgYnkgcmVh
ZGVycywgYnV0IHN0YWxlCi0gIC8vIHZhbHVlcyBhcmUgb2suCi0gIHBvcnQ6OkF0b21pY1BvaW50
ZXIgbWF4X2hlaWdodF87ICAgLy8gSGVpZ2h0IG9mIHRoZSBlbnRpcmUgbGlzdAotCi0gIGlubGlu
ZSBpbnQgR2V0TWF4SGVpZ2h0KCkgY29uc3QgewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+
KAotICAgICAgICByZWludGVycHJldF9jYXN0PGludHB0cl90PihtYXhfaGVpZ2h0Xy5Ob0JhcnJp
ZXJfTG9hZCgpKSk7Ci0gIH0KLQotICAvLyBSZWFkL3dyaXR0ZW4gb25seSBieSBJbnNlcnQoKS4K
LSAgUmFuZG9tIHJuZF87Ci0KLSAgTm9kZSogTmV3Tm9kZShjb25zdCBLZXkmIGtleSwgaW50IGhl
aWdodCk7Ci0gIGludCBSYW5kb21IZWlnaHQoKTsKLSAgYm9vbCBFcXVhbChjb25zdCBLZXkmIGEs
IGNvbnN0IEtleSYgYikgY29uc3QgeyByZXR1cm4gKGNvbXBhcmVfKGEsIGIpID09IDApOyB9Ci0K
LSAgLy8gUmV0dXJuIHRydWUgaWYga2V5IGlzIGdyZWF0ZXIgdGhhbiB0aGUgZGF0YSBzdG9yZWQg
aW4gIm4iCi0gIGJvb2wgS2V5SXNBZnRlck5vZGUoY29uc3QgS2V5JiBrZXksIE5vZGUqIG4pIGNv
bnN0OwotCi0gIC8vIFJldHVybiB0aGUgZWFybGllc3Qgbm9kZSB0aGF0IGNvbWVzIGF0IG9yIGFm
dGVyIGtleS4KLSAgLy8gUmV0dXJuIE5VTEwgaWYgdGhlcmUgaXMgbm8gc3VjaCBub2RlLgotICAv
LwotICAvLyBJZiBwcmV2IGlzIG5vbi1OVUxMLCBmaWxscyBwcmV2W2xldmVsXSB3aXRoIHBvaW50
ZXIgdG8gcHJldmlvdXMKLSAgLy8gbm9kZSBhdCAibGV2ZWwiIGZvciBldmVyeSBsZXZlbCBpbiBb
MC4ubWF4X2hlaWdodF8tMV0uCi0gIE5vZGUqIEZpbmRHcmVhdGVyT3JFcXVhbChjb25zdCBLZXkm
IGtleSwgTm9kZSoqIHByZXYpIGNvbnN0OwotCi0gIC8vIFJldHVybiB0aGUgbGF0ZXN0IG5vZGUg
d2l0aCBhIGtleSA8IGtleS4KLSAgLy8gUmV0dXJuIGhlYWRfIGlmIHRoZXJlIGlzIG5vIHN1Y2gg
bm9kZS4KLSAgTm9kZSogRmluZExlc3NUaGFuKGNvbnN0IEtleSYga2V5KSBjb25zdDsKLQotICAv
LyBSZXR1cm4gdGhlIGxhc3Qgbm9kZSBpbiB0aGUgbGlzdC4KLSAgLy8gUmV0dXJuIGhlYWRfIGlm
IGxpc3QgaXMgZW1wdHkuCi0gIE5vZGUqIEZpbmRMYXN0KCkgY29uc3Q7Ci0KLSAgLy8gTm8gY29w
eWluZyBhbGxvd2VkCi0gIFNraXBMaXN0KGNvbnN0IFNraXBMaXN0Jik7Ci0gIHZvaWQgb3BlcmF0
b3I9KGNvbnN0IFNraXBMaXN0Jik7Ci19OwotCi0vLyBJbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZv
bGxvdwotdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCBjbGFzcyBDb21wYXJhdG9yPgotc3RydWN0IFNr
aXBMaXN0PEtleSxDb21wYXJhdG9yPjo6Tm9kZSB7Ci0gIGV4cGxpY2l0IE5vZGUoY29uc3QgS2V5
JiBrKSA6IGtleShrKSB7IH0KLQotICBLZXkgY29uc3Qga2V5OwotCi0gIC8vIEFjY2Vzc29ycy9t
dXRhdG9ycyBmb3IgbGlua3MuICBXcmFwcGVkIGluIG1ldGhvZHMgc28gd2UgY2FuCi0gIC8vIGFk
ZCB0aGUgYXBwcm9wcmlhdGUgYmFycmllcnMgYXMgbmVjZXNzYXJ5LgotICBOb2RlKiBOZXh0KGlu
dCBuKSB7Ci0gICAgYXNzZXJ0KG4gPj0gMCk7Ci0gICAgLy8gVXNlIGFuICdhY3F1aXJlIGxvYWQn
IHNvIHRoYXQgd2Ugb2JzZXJ2ZSBhIGZ1bGx5IGluaXRpYWxpemVkCi0gICAgLy8gdmVyc2lvbiBv
ZiB0aGUgcmV0dXJuZWQgTm9kZS4KLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxOb2RlKj4o
bmV4dF9bbl0uQWNxdWlyZV9Mb2FkKCkpOwotICB9Ci0gIHZvaWQgU2V0TmV4dChpbnQgbiwgTm9k
ZSogeCkgewotICAgIGFzc2VydChuID49IDApOwotICAgIC8vIFVzZSBhICdyZWxlYXNlIHN0b3Jl
JyBzbyB0aGF0IGFueWJvZHkgd2hvIHJlYWRzIHRocm91Z2ggdGhpcwotICAgIC8vIHBvaW50ZXIg
b2JzZXJ2ZXMgYSBmdWxseSBpbml0aWFsaXplZCB2ZXJzaW9uIG9mIHRoZSBpbnNlcnRlZCBub2Rl
LgotICAgIG5leHRfW25dLlJlbGVhc2VfU3RvcmUoeCk7Ci0gIH0KLQotICAvLyBOby1iYXJyaWVy
IHZhcmlhbnRzIHRoYXQgY2FuIGJlIHNhZmVseSB1c2VkIGluIGEgZmV3IGxvY2F0aW9ucy4KLSAg
Tm9kZSogTm9CYXJyaWVyX05leHQoaW50IG4pIHsKLSAgICBhc3NlcnQobiA+PSAwKTsKLSAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxOb2RlKj4obmV4dF9bbl0uTm9CYXJyaWVyX0xvYWQoKSk7
Ci0gIH0KLSAgdm9pZCBOb0JhcnJpZXJfU2V0TmV4dChpbnQgbiwgTm9kZSogeCkgewotICAgIGFz
c2VydChuID49IDApOwotICAgIG5leHRfW25dLk5vQmFycmllcl9TdG9yZSh4KTsKLSAgfQotCi0g
cHJpdmF0ZToKLSAgLy8gQXJyYXkgb2YgbGVuZ3RoIGVxdWFsIHRvIHRoZSBub2RlIGhlaWdodC4g
IG5leHRfWzBdIGlzIGxvd2VzdCBsZXZlbCBsaW5rLgotICBwb3J0OjpBdG9taWNQb2ludGVyIG5l
eHRfWzFdOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCBjbGFzcyBDb21wYXJhdG9yPgot
dHlwZW5hbWUgU2tpcExpc3Q8S2V5LENvbXBhcmF0b3I+OjpOb2RlKgotU2tpcExpc3Q8S2V5LENv
bXBhcmF0b3I+OjpOZXdOb2RlKGNvbnN0IEtleSYga2V5LCBpbnQgaGVpZ2h0KSB7Ci0gIGNoYXIq
IG1lbSA9IGFyZW5hXy0+QWxsb2NhdGVBbGlnbmVkKAotICAgICAgc2l6ZW9mKE5vZGUpICsgc2l6
ZW9mKHBvcnQ6OkF0b21pY1BvaW50ZXIpICogKGhlaWdodCAtIDEpKTsKLSAgcmV0dXJuIG5ldyAo
bWVtKSBOb2RlKGtleSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEtleSwgY2xhc3MgQ29tcGFy
YXRvcj4KLWlubGluZSBTa2lwTGlzdDxLZXksQ29tcGFyYXRvcj46Okl0ZXJhdG9yOjpJdGVyYXRv
cihjb25zdCBTa2lwTGlzdCogbGlzdCkgewotICBsaXN0XyA9IGxpc3Q7Ci0gIG5vZGVfID0gTlVM
TDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCBjbGFzcyBDb21wYXJhdG9yPgotaW5saW5l
IGJvb2wgU2tpcExpc3Q8S2V5LENvbXBhcmF0b3I+OjpJdGVyYXRvcjo6VmFsaWQoKSBjb25zdCB7
Ci0gIHJldHVybiBub2RlXyAhPSBOVUxMOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIGNs
YXNzIENvbXBhcmF0b3I+Ci1pbmxpbmUgY29uc3QgS2V5JiBTa2lwTGlzdDxLZXksQ29tcGFyYXRv
cj46Okl0ZXJhdG9yOjprZXkoKSBjb25zdCB7Ci0gIGFzc2VydChWYWxpZCgpKTsKLSAgcmV0dXJu
IG5vZGVfLT5rZXk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEtleSwgY2xhc3MgQ29tcGFyYXRv
cj4KLWlubGluZSB2b2lkIFNraXBMaXN0PEtleSxDb21wYXJhdG9yPjo6SXRlcmF0b3I6Ok5leHQo
KSB7Ci0gIGFzc2VydChWYWxpZCgpKTsKLSAgbm9kZV8gPSBub2RlXy0+TmV4dCgwKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCBjbGFzcyBDb21wYXJhdG9yPgotaW5saW5lIHZvaWQgU2tp
cExpc3Q8S2V5LENvbXBhcmF0b3I+OjpJdGVyYXRvcjo6UHJldigpIHsKLSAgLy8gSW5zdGVhZCBv
ZiB1c2luZyBleHBsaWNpdCAicHJldiIgbGlua3MsIHdlIGp1c3Qgc2VhcmNoIGZvciB0aGUKLSAg
Ly8gbGFzdCBub2RlIHRoYXQgZmFsbHMgYmVmb3JlIGtleS4KLSAgYXNzZXJ0KFZhbGlkKCkpOwot
ICBub2RlXyA9IGxpc3RfLT5GaW5kTGVzc1RoYW4obm9kZV8tPmtleSk7Ci0gIGlmIChub2RlXyA9
PSBsaXN0Xy0+aGVhZF8pIHsKLSAgICBub2RlXyA9IE5VTEw7Ci0gIH0KLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgS2V5LCBjbGFzcyBDb21wYXJhdG9yPgotaW5saW5lIHZvaWQgU2tpcExpc3Q8S2V5
LENvbXBhcmF0b3I+OjpJdGVyYXRvcjo6U2Vlayhjb25zdCBLZXkmIHRhcmdldCkgewotICBub2Rl
XyA9IGxpc3RfLT5GaW5kR3JlYXRlck9yRXF1YWwodGFyZ2V0LCBOVUxMKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCBjbGFzcyBDb21wYXJhdG9yPgotaW5saW5lIHZvaWQgU2tpcExpc3Q8
S2V5LENvbXBhcmF0b3I+OjpJdGVyYXRvcjo6U2Vla1RvRmlyc3QoKSB7Ci0gIG5vZGVfID0gbGlz
dF8tPmhlYWRfLT5OZXh0KDApOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIGNsYXNzIENv
bXBhcmF0b3I+Ci1pbmxpbmUgdm9pZCBTa2lwTGlzdDxLZXksQ29tcGFyYXRvcj46Okl0ZXJhdG9y
OjpTZWVrVG9MYXN0KCkgewotICBub2RlXyA9IGxpc3RfLT5GaW5kTGFzdCgpOwotICBpZiAobm9k
ZV8gPT0gbGlzdF8tPmhlYWRfKSB7Ci0gICAgbm9kZV8gPSBOVUxMOwotICB9Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIEtleSwgY2xhc3MgQ29tcGFyYXRvcj4KLWludCBTa2lwTGlzdDxLZXksQ29t
cGFyYXRvcj46OlJhbmRvbUhlaWdodCgpIHsKLSAgLy8gSW5jcmVhc2UgaGVpZ2h0IHdpdGggcHJv
YmFiaWxpdHkgMSBpbiBrQnJhbmNoaW5nCi0gIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQga0Jy
YW5jaGluZyA9IDQ7Ci0gIGludCBoZWlnaHQgPSAxOwotICB3aGlsZSAoaGVpZ2h0IDwga01heEhl
aWdodCAmJiAoKHJuZF8uTmV4dCgpICUga0JyYW5jaGluZykgPT0gMCkpIHsKLSAgICBoZWlnaHQr
KzsKLSAgfQotICBhc3NlcnQoaGVpZ2h0ID4gMCk7Ci0gIGFzc2VydChoZWlnaHQgPD0ga01heEhl
aWdodCk7Ci0gIHJldHVybiBoZWlnaHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEtleSwgY2xh
c3MgQ29tcGFyYXRvcj4KLWJvb2wgU2tpcExpc3Q8S2V5LENvbXBhcmF0b3I+OjpLZXlJc0FmdGVy
Tm9kZShjb25zdCBLZXkmIGtleSwgTm9kZSogbikgY29uc3QgewotICAvLyBOVUxMIG4gaXMgY29u
c2lkZXJlZCBpbmZpbml0ZQotICByZXR1cm4gKG4gIT0gTlVMTCkgJiYgKGNvbXBhcmVfKG4tPmtl
eSwga2V5KSA8IDApOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIGNsYXNzIENvbXBhcmF0
b3I+Ci10eXBlbmFtZSBTa2lwTGlzdDxLZXksQ29tcGFyYXRvcj46Ok5vZGUqIFNraXBMaXN0PEtl
eSxDb21wYXJhdG9yPjo6RmluZEdyZWF0ZXJPckVxdWFsKGNvbnN0IEtleSYga2V5LCBOb2RlKiog
cHJldikKLSAgICBjb25zdCB7Ci0gIE5vZGUqIHggPSBoZWFkXzsKLSAgaW50IGxldmVsID0gR2V0
TWF4SGVpZ2h0KCkgLSAxOwotICB3aGlsZSAodHJ1ZSkgewotICAgIE5vZGUqIG5leHQgPSB4LT5O
ZXh0KGxldmVsKTsKLSAgICBpZiAoS2V5SXNBZnRlck5vZGUoa2V5LCBuZXh0KSkgewotICAgICAg
Ly8gS2VlcCBzZWFyY2hpbmcgaW4gdGhpcyBsaXN0Ci0gICAgICB4ID0gbmV4dDsKLSAgICB9IGVs
c2UgewotICAgICAgaWYgKHByZXYgIT0gTlVMTCkgcHJldltsZXZlbF0gPSB4OwotICAgICAgaWYg
KGxldmVsID09IDApIHsKLSAgICAgICAgcmV0dXJuIG5leHQ7Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICAvLyBTd2l0Y2ggdG8gbmV4dCBsaXN0Ci0gICAgICAgIGxldmVsLS07Ci0gICAgICB9Ci0g
ICAgfQotICB9Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEtleSwgY2xhc3MgQ29tcGFyYXRvcj4K
LXR5cGVuYW1lIFNraXBMaXN0PEtleSxDb21wYXJhdG9yPjo6Tm9kZSoKLVNraXBMaXN0PEtleSxD
b21wYXJhdG9yPjo6RmluZExlc3NUaGFuKGNvbnN0IEtleSYga2V5KSBjb25zdCB7Ci0gIE5vZGUq
IHggPSBoZWFkXzsKLSAgaW50IGxldmVsID0gR2V0TWF4SGVpZ2h0KCkgLSAxOwotICB3aGlsZSAo
dHJ1ZSkgewotICAgIGFzc2VydCh4ID09IGhlYWRfIHx8IGNvbXBhcmVfKHgtPmtleSwga2V5KSA8
IDApOwotICAgIE5vZGUqIG5leHQgPSB4LT5OZXh0KGxldmVsKTsKLSAgICBpZiAobmV4dCA9PSBO
VUxMIHx8IGNvbXBhcmVfKG5leHQtPmtleSwga2V5KSA+PSAwKSB7Ci0gICAgICBpZiAobGV2ZWwg
PT0gMCkgewotICAgICAgICByZXR1cm4geDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFN3
aXRjaCB0byBuZXh0IGxpc3QKLSAgICAgICAgbGV2ZWwtLTsKLSAgICAgIH0KLSAgICB9IGVsc2Ug
ewotICAgICAgeCA9IG5leHQ7Ci0gICAgfQotICB9Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgY2xhc3MgQ29tcGFyYXRvcj4KLXR5cGVuYW1lIFNraXBMaXN0PEtleSxDb21wYXJhdG9yPjo6
Tm9kZSogU2tpcExpc3Q8S2V5LENvbXBhcmF0b3I+OjpGaW5kTGFzdCgpCi0gICAgY29uc3Qgewot
ICBOb2RlKiB4ID0gaGVhZF87Ci0gIGludCBsZXZlbCA9IEdldE1heEhlaWdodCgpIC0gMTsKLSAg
d2hpbGUgKHRydWUpIHsKLSAgICBOb2RlKiBuZXh0ID0geC0+TmV4dChsZXZlbCk7Ci0gICAgaWYg
KG5leHQgPT0gTlVMTCkgewotICAgICAgaWYgKGxldmVsID09IDApIHsKLSAgICAgICAgcmV0dXJu
IHg7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBTd2l0Y2ggdG8gbmV4dCBsaXN0Ci0gICAg
ICAgIGxldmVsLS07Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIHggPSBuZXh0OwotICAg
IH0KLSAgfQotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIGNsYXNzIENvbXBhcmF0b3I+Ci1T
a2lwTGlzdDxLZXksQ29tcGFyYXRvcj46OlNraXBMaXN0KENvbXBhcmF0b3IgY21wLCBBcmVuYSog
YXJlbmEpCi0gICAgOiBjb21wYXJlXyhjbXApLAotICAgICAgYXJlbmFfKGFyZW5hKSwKLSAgICAg
IGhlYWRfKE5ld05vZGUoMCAvKiBhbnkga2V5IHdpbGwgZG8gKi8sIGtNYXhIZWlnaHQpKSwKLSAg
ICAgIG1heF9oZWlnaHRfKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDEpKSwKLSAgICAgIHJuZF8o
MHhkZWFkYmVlZikgewotICBmb3IgKGludCBpID0gMDsgaSA8IGtNYXhIZWlnaHQ7IGkrKykgewot
ICAgIGhlYWRfLT5TZXROZXh0KGksIE5VTEwpOwotICB9Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IEtleSwgY2xhc3MgQ29tcGFyYXRvcj4KLXZvaWQgU2tpcExpc3Q8S2V5LENvbXBhcmF0b3I+OjpJ
bnNlcnQoY29uc3QgS2V5JiBrZXkpIHsKLSAgLy8gVE9ETyhvcHQpOiBXZSBjYW4gdXNlIGEgYmFy
cmllci1mcmVlIHZhcmlhbnQgb2YgRmluZEdyZWF0ZXJPckVxdWFsKCkKLSAgLy8gaGVyZSBzaW5j
ZSBJbnNlcnQoKSBpcyBleHRlcm5hbGx5IHN5bmNocm9uaXplZC4KLSAgTm9kZSogcHJldltrTWF4
SGVpZ2h0XTsKLSAgTm9kZSogeCA9IEZpbmRHcmVhdGVyT3JFcXVhbChrZXksIHByZXYpOwotCi0g
IC8vIE91ciBkYXRhIHN0cnVjdHVyZSBkb2VzIG5vdCBhbGxvdyBkdXBsaWNhdGUgaW5zZXJ0aW9u
Ci0gIGFzc2VydCh4ID09IE5VTEwgfHwgIUVxdWFsKGtleSwgeC0+a2V5KSk7Ci0KLSAgaW50IGhl
aWdodCA9IFJhbmRvbUhlaWdodCgpOwotICBpZiAoaGVpZ2h0ID4gR2V0TWF4SGVpZ2h0KCkpIHsK
LSAgICBmb3IgKGludCBpID0gR2V0TWF4SGVpZ2h0KCk7IGkgPCBoZWlnaHQ7IGkrKykgewotICAg
ICAgcHJldltpXSA9IGhlYWRfOwotICAgIH0KLSAgICAvL2ZwcmludGYoc3RkZXJyLCAiQ2hhbmdl
IGhlaWdodCBmcm9tICVkIHRvICVkXG4iLCBtYXhfaGVpZ2h0XywgaGVpZ2h0KTsKLQotICAgIC8v
IEl0IGlzIG9rIHRvIG11dGF0ZSBtYXhfaGVpZ2h0XyB3aXRob3V0IGFueSBzeW5jaHJvbml6YXRp
b24KLSAgICAvLyB3aXRoIGNvbmN1cnJlbnQgcmVhZGVycy4gIEEgY29uY3VycmVudCByZWFkZXIg
dGhhdCBvYnNlcnZlcwotICAgIC8vIHRoZSBuZXcgdmFsdWUgb2YgbWF4X2hlaWdodF8gd2lsbCBz
ZWUgZWl0aGVyIHRoZSBvbGQgdmFsdWUgb2YKLSAgICAvLyBuZXcgbGV2ZWwgcG9pbnRlcnMgZnJv
bSBoZWFkXyAoTlVMTCksIG9yIGEgbmV3IHZhbHVlIHNldCBpbgotICAgIC8vIHRoZSBsb29wIGJl
bG93LiAgSW4gdGhlIGZvcm1lciBjYXNlIHRoZSByZWFkZXIgd2lsbAotICAgIC8vIGltbWVkaWF0
ZWx5IGRyb3AgdG8gdGhlIG5leHQgbGV2ZWwgc2luY2UgTlVMTCBzb3J0cyBhZnRlciBhbGwKLSAg
ICAvLyBrZXlzLiAgSW4gdGhlIGxhdHRlciBjYXNlIHRoZSByZWFkZXIgd2lsbCB1c2UgdGhlIG5l
dyBub2RlLgotICAgIG1heF9oZWlnaHRfLk5vQmFycmllcl9TdG9yZShyZWludGVycHJldF9jYXN0
PHZvaWQqPihoZWlnaHQpKTsKLSAgfQotCi0gIHggPSBOZXdOb2RlKGtleSwgaGVpZ2h0KTsKLSAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewotICAgIC8vIE5vQmFycmllcl9TZXRO
ZXh0KCkgc3VmZmljZXMgc2luY2Ugd2Ugd2lsbCBhZGQgYSBiYXJyaWVyIHdoZW4KLSAgICAvLyB3
ZSBwdWJsaXNoIGEgcG9pbnRlciB0byAieCIgaW4gcHJldltpXS4KLSAgICB4LT5Ob0JhcnJpZXJf
U2V0TmV4dChpLCBwcmV2W2ldLT5Ob0JhcnJpZXJfTmV4dChpKSk7Ci0gICAgcHJldltpXS0+U2V0
TmV4dChpLCB4KTsKLSAgfQotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIGNsYXNzIENvbXBh
cmF0b3I+Ci1ib29sIFNraXBMaXN0PEtleSxDb21wYXJhdG9yPjo6Q29udGFpbnMoY29uc3QgS2V5
JiBrZXkpIGNvbnN0IHsKLSAgTm9kZSogeCA9IEZpbmRHcmVhdGVyT3JFcXVhbChrZXksIE5VTEwp
OwotICBpZiAoeCAhPSBOVUxMICYmIEVxdWFsKGtleSwgeC0+a2V5KSkgewotICAgIHJldHVybiB0
cnVlOwotICB9IGVsc2UgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQotCi19ICAvLyBuYW1l
c3BhY2UgbGV2ZWxkYgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9z
a2lwbGlzdF90ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9za2lwbGlzdF90
ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzhmNGI0Li4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvc2tpcGxpc3RfdGVzdC5jYworKysgL2Rl
di9udWxsCkBAIC0xLDM3OCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVs
REIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBv
ZiBjb250cmlidXRvcnMuCi0KLSNpbmNsdWRlICJkYi9za2lwbGlzdC5oIgotI2luY2x1ZGUgPHNl
dD4KLSNpbmNsdWRlICJsZXZlbGRiL2Vudi5oIgotI2luY2x1ZGUgInV0aWwvYXJlbmEuaCIKLSNp
bmNsdWRlICJ1dGlsL2hhc2guaCIKLSNpbmNsdWRlICJ1dGlsL3JhbmRvbS5oIgotI2luY2x1ZGUg
InV0aWwvdGVzdGhhcm5lc3MuaCIKLQotbmFtZXNwYWNlIGxldmVsZGIgewotCi10eXBlZGVmIHVp
bnQ2NF90IEtleTsKLQotc3RydWN0IENvbXBhcmF0b3IgewotICBpbnQgb3BlcmF0b3IoKShjb25z
dCBLZXkmIGEsIGNvbnN0IEtleSYgYikgY29uc3QgewotICAgIGlmIChhIDwgYikgewotICAgICAg
cmV0dXJuIC0xOwotICAgIH0gZWxzZSBpZiAoYSA+IGIpIHsKLSAgICAgIHJldHVybiArMTsKLSAg
ICB9IGVsc2UgewotICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICB9Ci19OwotCi1jbGFzcyBTa2lw
VGVzdCB7IH07Ci0KLVRFU1QoU2tpcFRlc3QsIEVtcHR5KSB7Ci0gIEFyZW5hIGFyZW5hOwotICBD
b21wYXJhdG9yIGNtcDsKLSAgU2tpcExpc3Q8S2V5LCBDb21wYXJhdG9yPiBsaXN0KGNtcCwgJmFy
ZW5hKTsKLSAgQVNTRVJUX1RSVUUoIWxpc3QuQ29udGFpbnMoMTApKTsKLQotICBTa2lwTGlzdDxL
ZXksIENvbXBhcmF0b3I+OjpJdGVyYXRvciBpdGVyKCZsaXN0KTsKLSAgQVNTRVJUX1RSVUUoIWl0
ZXIuVmFsaWQoKSk7Ci0gIGl0ZXIuU2Vla1RvRmlyc3QoKTsKLSAgQVNTRVJUX1RSVUUoIWl0ZXIu
VmFsaWQoKSk7Ci0gIGl0ZXIuU2VlaygxMDApOwotICBBU1NFUlRfVFJVRSghaXRlci5WYWxpZCgp
KTsKLSAgaXRlci5TZWVrVG9MYXN0KCk7Ci0gIEFTU0VSVF9UUlVFKCFpdGVyLlZhbGlkKCkpOwot
fQotCi1URVNUKFNraXBUZXN0LCBJbnNlcnRBbmRMb29rdXApIHsKLSAgY29uc3QgaW50IE4gPSAy
MDAwOwotICBjb25zdCBpbnQgUiA9IDUwMDA7Ci0gIFJhbmRvbSBybmQoMTAwMCk7Ci0gIHN0ZDo6
c2V0PEtleT4ga2V5czsKLSAgQXJlbmEgYXJlbmE7Ci0gIENvbXBhcmF0b3IgY21wOwotICBTa2lw
TGlzdDxLZXksIENvbXBhcmF0b3I+IGxpc3QoY21wLCAmYXJlbmEpOwotICBmb3IgKGludCBpID0g
MDsgaSA8IE47IGkrKykgewotICAgIEtleSBrZXkgPSBybmQuTmV4dCgpICUgUjsKLSAgICBpZiAo
a2V5cy5pbnNlcnQoa2V5KS5zZWNvbmQpIHsKLSAgICAgIGxpc3QuSW5zZXJ0KGtleSk7Ci0gICAg
fQotICB9Ci0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBSOyBpKyspIHsKLSAgICBpZiAobGlzdC5D
b250YWlucyhpKSkgewotICAgICAgQVNTRVJUX0VRKGtleXMuY291bnQoaSksIDEpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICBBU1NFUlRfRVEoa2V5cy5jb3VudChpKSwgMCk7Ci0gICAgfQotICB9Ci0K
LSAgLy8gU2ltcGxlIGl0ZXJhdG9yIHRlc3RzCi0gIHsKLSAgICBTa2lwTGlzdDxLZXksIENvbXBh
cmF0b3I+OjpJdGVyYXRvciBpdGVyKCZsaXN0KTsKLSAgICBBU1NFUlRfVFJVRSghaXRlci5WYWxp
ZCgpKTsKLQotICAgIGl0ZXIuU2VlaygwKTsKLSAgICBBU1NFUlRfVFJVRShpdGVyLlZhbGlkKCkp
OwotICAgIEFTU0VSVF9FUSgqKGtleXMuYmVnaW4oKSksIGl0ZXIua2V5KCkpOwotCi0gICAgaXRl
ci5TZWVrVG9GaXJzdCgpOwotICAgIEFTU0VSVF9UUlVFKGl0ZXIuVmFsaWQoKSk7Ci0gICAgQVNT
RVJUX0VRKCooa2V5cy5iZWdpbigpKSwgaXRlci5rZXkoKSk7Ci0KLSAgICBpdGVyLlNlZWtUb0xh
c3QoKTsKLSAgICBBU1NFUlRfVFJVRShpdGVyLlZhbGlkKCkpOwotICAgIEFTU0VSVF9FUSgqKGtl
eXMucmJlZ2luKCkpLCBpdGVyLmtleSgpKTsKLSAgfQotCi0gIC8vIEZvcndhcmQgaXRlcmF0aW9u
IHRlc3QKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBSOyBpKyspIHsKLSAgICBTa2lwTGlzdDxLZXks
IENvbXBhcmF0b3I+OjpJdGVyYXRvciBpdGVyKCZsaXN0KTsKLSAgICBpdGVyLlNlZWsoaSk7Ci0K
LSAgICAvLyBDb21wYXJlIGFnYWluc3QgbW9kZWwgaXRlcmF0b3IKLSAgICBzdGQ6OnNldDxLZXk+
OjppdGVyYXRvciBtb2RlbF9pdGVyID0ga2V5cy5sb3dlcl9ib3VuZChpKTsKLSAgICBmb3IgKGlu
dCBqID0gMDsgaiA8IDM7IGorKykgewotICAgICAgaWYgKG1vZGVsX2l0ZXIgPT0ga2V5cy5lbmQo
KSkgewotICAgICAgICBBU1NFUlRfVFJVRSghaXRlci5WYWxpZCgpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlRfVFJVRShpdGVyLlZhbGlkKCkpOwotICAg
ICAgICBBU1NFUlRfRVEoKm1vZGVsX2l0ZXIsIGl0ZXIua2V5KCkpOwotICAgICAgICArK21vZGVs
X2l0ZXI7Ci0gICAgICAgIGl0ZXIuTmV4dCgpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8v
IEJhY2t3YXJkIGl0ZXJhdGlvbiB0ZXN0Ci0gIHsKLSAgICBTa2lwTGlzdDxLZXksIENvbXBhcmF0
b3I+OjpJdGVyYXRvciBpdGVyKCZsaXN0KTsKLSAgICBpdGVyLlNlZWtUb0xhc3QoKTsKLQotICAg
IC8vIENvbXBhcmUgYWdhaW5zdCBtb2RlbCBpdGVyYXRvcgotICAgIGZvciAoc3RkOjpzZXQ8S2V5
Pjo6cmV2ZXJzZV9pdGVyYXRvciBtb2RlbF9pdGVyID0ga2V5cy5yYmVnaW4oKTsKLSAgICAgICAg
IG1vZGVsX2l0ZXIgIT0ga2V5cy5yZW5kKCk7Ci0gICAgICAgICArK21vZGVsX2l0ZXIpIHsKLSAg
ICAgIEFTU0VSVF9UUlVFKGl0ZXIuVmFsaWQoKSk7Ci0gICAgICBBU1NFUlRfRVEoKm1vZGVsX2l0
ZXIsIGl0ZXIua2V5KCkpOwotICAgICAgaXRlci5QcmV2KCk7Ci0gICAgfQotICAgIEFTU0VSVF9U
UlVFKCFpdGVyLlZhbGlkKCkpOwotICB9Ci19Ci0KLS8vIFdlIHdhbnQgdG8gbWFrZSBzdXJlIHRo
YXQgd2l0aCBhIHNpbmdsZSB3cml0ZXIgYW5kIG11bHRpcGxlCi0vLyBjb25jdXJyZW50IHJlYWRl
cnMgKHdpdGggbm8gc3luY2hyb25pemF0aW9uIG90aGVyIHRoYW4gd2hlbiBhCi0vLyByZWFkZXIn
cyBpdGVyYXRvciBpcyBjcmVhdGVkKSwgdGhlIHJlYWRlciBhbHdheXMgb2JzZXJ2ZXMgYWxsIHRo
ZQotLy8gZGF0YSB0aGF0IHdhcyBwcmVzZW50IGluIHRoZSBza2lwIGxpc3Qgd2hlbiB0aGUgaXRl
cmF0b3Igd2FzCi0vLyBjb25zdHJ1Y3Rvci4gIEJlY2F1c2UgaW5zZXJ0aW9ucyBhcmUgaGFwcGVu
aW5nIGNvbmN1cnJlbnRseSwgd2UgbWF5Ci0vLyBhbHNvIG9ic2VydmUgbmV3IHZhbHVlcyB0aGF0
IHdlcmUgaW5zZXJ0ZWQgc2luY2UgdGhlIGl0ZXJhdG9yIHdhcwotLy8gY29uc3RydWN0ZWQsIGJ1
dCB3ZSBzaG91bGQgbmV2ZXIgbWlzcyBhbnkgdmFsdWVzIHRoYXQgd2VyZSBwcmVzZW50Ci0vLyBh
dCBpdGVyYXRvciBjb25zdHJ1Y3Rpb24gdGltZS4KLS8vCi0vLyBXZSBnZW5lcmF0ZSBtdWx0aS1w
YXJ0IGtleXM6Ci0vLyAgICAgPGtleSxnZW4saGFzaD4KLS8vIHdoZXJlOgotLy8gICAgIGtleSBp
cyBpbiByYW5nZSBbMC4uSy0xXQotLy8gICAgIGdlbiBpcyBhIGdlbmVyYXRpb24gbnVtYmVyIGZv
ciBrZXkKLS8vICAgICBoYXNoIGlzIGhhc2goa2V5LGdlbikKLS8vCi0vLyBUaGUgaW5zZXJ0aW9u
IGNvZGUgcGlja3MgYSByYW5kb20ga2V5LCBzZXRzIGdlbiB0byBiZSAxICsgdGhlIGxhc3QKLS8v
IGdlbmVyYXRpb24gbnVtYmVyIGluc2VydGVkIGZvciB0aGF0IGtleSwgYW5kIHNldHMgaGFzaCB0
byBIYXNoKGtleSxnZW4pLgotLy8KLS8vIEF0IHRoZSBiZWdpbm5pbmcgb2YgYSByZWFkLCB3ZSBz
bmFwc2hvdCB0aGUgbGFzdCBpbnNlcnRlZAotLy8gZ2VuZXJhdGlvbiBudW1iZXIgZm9yIGVhY2gg
a2V5LiAgV2UgdGhlbiBpdGVyYXRlLCBpbmNsdWRpbmcgcmFuZG9tCi0vLyBjYWxscyB0byBOZXh0
KCkgYW5kIFNlZWsoKS4gIEZvciBldmVyeSBrZXkgd2UgZW5jb3VudGVyLCB3ZQotLy8gY2hlY2sg
dGhhdCBpdCBpcyBlaXRoZXIgZXhwZWN0ZWQgZ2l2ZW4gdGhlIGluaXRpYWwgc25hcHNob3Qgb3Ig
aGFzCi0vLyBiZWVuIGNvbmN1cnJlbnRseSBhZGRlZCBzaW5jZSB0aGUgaXRlcmF0b3Igc3RhcnRl
ZC4KLWNsYXNzIENvbmN1cnJlbnRUZXN0IHsKLSBwcml2YXRlOgotICBzdGF0aWMgY29uc3QgdWlu
dDMyX3QgSyA9IDQ7Ci0KLSAgc3RhdGljIHVpbnQ2NF90IGtleShLZXkga2V5KSB7IHJldHVybiAo
a2V5ID4+IDQwKTsgfQotICBzdGF0aWMgdWludDY0X3QgZ2VuKEtleSBrZXkpIHsgcmV0dXJuIChr
ZXkgPj4gOCkgJiAweGZmZmZmZmZmdTsgfQotICBzdGF0aWMgdWludDY0X3QgaGFzaChLZXkga2V5
KSB7IHJldHVybiBrZXkgJiAweGZmOyB9Ci0KLSAgc3RhdGljIHVpbnQ2NF90IEhhc2hOdW1iZXJz
KHVpbnQ2NF90IGssIHVpbnQ2NF90IGcpIHsKLSAgICB1aW50NjRfdCBkYXRhWzJdID0geyBrLCBn
IH07Ci0gICAgcmV0dXJuIEhhc2gocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGF0YSksIHNpemVv
ZihkYXRhKSwgMCk7Ci0gIH0KLQotICBzdGF0aWMgS2V5IE1ha2VLZXkodWludDY0X3QgaywgdWlu
dDY0X3QgZykgewotICAgIGFzc2VydChzaXplb2YoS2V5KSA9PSBzaXplb2YodWludDY0X3QpKTsK
LSAgICBhc3NlcnQoayA8PSBLKTsgIC8vIFdlIHNvbWV0aW1lcyBwYXNzIEsgdG8gc2VlayB0byB0
aGUgZW5kIG9mIHRoZSBza2lwbGlzdAotICAgIGFzc2VydChnIDw9IDB4ZmZmZmZmZmZ1KTsKLSAg
ICByZXR1cm4gKChrIDw8IDQwKSB8IChnIDw8IDgpIHwgKEhhc2hOdW1iZXJzKGssIGcpICYgMHhm
ZikpOwotICB9Ci0KLSAgc3RhdGljIGJvb2wgSXNWYWxpZEtleShLZXkgaykgewotICAgIHJldHVy
biBoYXNoKGspID09IChIYXNoTnVtYmVycyhrZXkoayksIGdlbihrKSkgJiAweGZmKTsKLSAgfQot
Ci0gIHN0YXRpYyBLZXkgUmFuZG9tVGFyZ2V0KFJhbmRvbSogcm5kKSB7Ci0gICAgc3dpdGNoIChy
bmQtPk5leHQoKSAlIDEwKSB7Ci0gICAgICBjYXNlIDA6Ci0gICAgICAgIC8vIFNlZWsgdG8gYmVn
aW5uaW5nCi0gICAgICAgIHJldHVybiBNYWtlS2V5KDAsIDApOwotICAgICAgY2FzZSAxOgotICAg
ICAgICAvLyBTZWVrIHRvIGVuZAotICAgICAgICByZXR1cm4gTWFrZUtleShLLCAwKTsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIC8vIFNlZWsgdG8gbWlkZGxlCi0gICAgICAgIHJldHVybiBNYWtl
S2V5KHJuZC0+TmV4dCgpICUgSywgMCk7Ci0gICAgfQotICB9Ci0KLSAgLy8gUGVyLWtleSBnZW5l
cmF0aW9uCi0gIHN0cnVjdCBTdGF0ZSB7Ci0gICAgcG9ydDo6QXRvbWljUG9pbnRlciBnZW5lcmF0
aW9uW0tdOwotICAgIHZvaWQgU2V0KGludCBrLCBpbnRwdHJfdCB2KSB7Ci0gICAgICBnZW5lcmF0
aW9uW2tdLlJlbGVhc2VfU3RvcmUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odikpOwotICAgIH0K
LSAgICBpbnRwdHJfdCBHZXQoaW50IGspIHsKLSAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PGludHB0cl90PihnZW5lcmF0aW9uW2tdLkFjcXVpcmVfTG9hZCgpKTsKLSAgICB9Ci0KLSAgICBT
dGF0ZSgpIHsKLSAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgSzsgaysrKSB7Ci0gICAgICAgIFNl
dChrLCAwKTsKLSAgICAgIH0KLSAgICB9Ci0gIH07Ci0KLSAgLy8gQ3VycmVudCBzdGF0ZSBvZiB0
aGUgdGVzdAotICBTdGF0ZSBjdXJyZW50XzsKLQotICBBcmVuYSBhcmVuYV87Ci0KLSAgLy8gU2tp
cExpc3QgaXMgbm90IHByb3RlY3RlZCBieSBtdV8uICBXZSBqdXN0IHVzZSBhIHNpbmdsZSB3cml0
ZXIKLSAgLy8gdGhyZWFkIHRvIG1vZGlmeSBpdC4KLSAgU2tpcExpc3Q8S2V5LCBDb21wYXJhdG9y
PiBsaXN0XzsKLQotIHB1YmxpYzoKLSAgQ29uY3VycmVudFRlc3QoKSA6IGxpc3RfKENvbXBhcmF0
b3IoKSwgJmFyZW5hXykgeyB9Ci0KLSAgLy8gUkVRVUlSRVM6IEV4dGVybmFsIHN5bmNocm9uaXph
dGlvbgotICB2b2lkIFdyaXRlU3RlcChSYW5kb20qIHJuZCkgewotICAgIGNvbnN0IHVpbnQzMl90
IGsgPSBybmQtPk5leHQoKSAlIEs7Ci0gICAgY29uc3QgaW50cHRyX3QgZyA9IGN1cnJlbnRfLkdl
dChrKSArIDE7Ci0gICAgY29uc3QgS2V5IGtleSA9IE1ha2VLZXkoaywgZyk7Ci0gICAgbGlzdF8u
SW5zZXJ0KGtleSk7Ci0gICAgY3VycmVudF8uU2V0KGssIGcpOwotICB9Ci0KLSAgdm9pZCBSZWFk
U3RlcChSYW5kb20qIHJuZCkgewotICAgIC8vIFJlbWVtYmVyIHRoZSBpbml0aWFsIGNvbW1pdHRl
ZCBzdGF0ZSBvZiB0aGUgc2tpcGxpc3QuCi0gICAgU3RhdGUgaW5pdGlhbF9zdGF0ZTsKLSAgICBm
b3IgKGludCBrID0gMDsgayA8IEs7IGsrKykgewotICAgICAgaW5pdGlhbF9zdGF0ZS5TZXQoaywg
Y3VycmVudF8uR2V0KGspKTsKLSAgICB9Ci0KLSAgICBLZXkgcG9zID0gUmFuZG9tVGFyZ2V0KHJu
ZCk7Ci0gICAgU2tpcExpc3Q8S2V5LCBDb21wYXJhdG9yPjo6SXRlcmF0b3IgaXRlcigmbGlzdF8p
OwotICAgIGl0ZXIuU2Vlayhwb3MpOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICBLZXkgY3Vy
cmVudDsKLSAgICAgIGlmICghaXRlci5WYWxpZCgpKSB7Ci0gICAgICAgIGN1cnJlbnQgPSBNYWtl
S2V5KEssIDApOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgY3VycmVudCA9IGl0ZXIua2V5KCk7
Ci0gICAgICAgIEFTU0VSVF9UUlVFKElzVmFsaWRLZXkoY3VycmVudCkpIDw8IGN1cnJlbnQ7Ci0g
ICAgICB9Ci0gICAgICBBU1NFUlRfTEUocG9zLCBjdXJyZW50KSA8PCAic2hvdWxkIG5vdCBnbyBi
YWNrd2FyZHMiOwotCi0gICAgICAvLyBWZXJpZnkgdGhhdCBldmVyeXRoaW5nIGluIFtwb3MsY3Vy
cmVudCkgd2FzIG5vdCBwcmVzZW50IGluCi0gICAgICAvLyBpbml0aWFsX3N0YXRlLgotICAgICAg
d2hpbGUgKHBvcyA8IGN1cnJlbnQpIHsKLSAgICAgICAgQVNTRVJUX0xUKGtleShwb3MpLCBLKSA8
PCBwb3M7Ci0KLSAgICAgICAgLy8gTm90ZSB0aGF0IGdlbmVyYXRpb24gMCBpcyBuZXZlciBpbnNl
cnRlZCwgc28gaXQgaXMgb2sgaWYKLSAgICAgICAgLy8gPCosMCwqPiBpcyBtaXNzaW5nLgotICAg
ICAgICBBU1NFUlRfVFJVRSgoZ2VuKHBvcykgPT0gMCkgfHwKLSAgICAgICAgICAgICAgICAgICAg
KGdlbihwb3MpID4gaW5pdGlhbF9zdGF0ZS5HZXQoa2V5KHBvcykpKQotICAgICAgICAgICAgICAg
ICAgICApIDw8ICJrZXk6ICIgPDwga2V5KHBvcykKLSAgICAgICAgICAgICAgICAgICAgICA8PCAi
OyBnZW46ICIgPDwgZ2VuKHBvcykKLSAgICAgICAgICAgICAgICAgICAgICA8PCAiOyBpbml0Z2Vu
OiAiCi0gICAgICAgICAgICAgICAgICAgICAgPDwgaW5pdGlhbF9zdGF0ZS5HZXQoa2V5KHBvcykp
OwotCi0gICAgICAgIC8vIEFkdmFuY2UgdG8gbmV4dCBrZXkgaW4gdGhlIHZhbGlkIGtleSBzcGFj
ZQotICAgICAgICBpZiAoa2V5KHBvcykgPCBrZXkoY3VycmVudCkpIHsKLSAgICAgICAgICBwb3Mg
PSBNYWtlS2V5KGtleShwb3MpICsgMSwgMCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
cG9zID0gTWFrZUtleShrZXkocG9zKSwgZ2VuKHBvcykgKyAxKTsKLSAgICAgICAgfQotICAgICAg
fQotCi0gICAgICBpZiAoIWl0ZXIuVmFsaWQoKSkgewotICAgICAgICBicmVhazsKLSAgICAgIH0K
LQotICAgICAgaWYgKHJuZC0+TmV4dCgpICUgMikgewotICAgICAgICBpdGVyLk5leHQoKTsKLSAg
ICAgICAgcG9zID0gTWFrZUtleShrZXkocG9zKSwgZ2VuKHBvcykgKyAxKTsKLSAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIEtleSBuZXdfdGFyZ2V0ID0gUmFuZG9tVGFyZ2V0KHJuZCk7Ci0gICAgICAg
IGlmIChuZXdfdGFyZ2V0ID4gcG9zKSB7Ci0gICAgICAgICAgcG9zID0gbmV3X3RhcmdldDsKLSAg
ICAgICAgICBpdGVyLlNlZWsobmV3X3RhcmdldCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9
Ci0gIH0KLX07Ci1jb25zdCB1aW50MzJfdCBDb25jdXJyZW50VGVzdDo6SzsKLQotLy8gU2ltcGxl
IHRlc3QgdGhhdCBkb2VzIHNpbmdsZS10aHJlYWRlZCB0ZXN0aW5nIG9mIHRoZSBDb25jdXJyZW50
VGVzdAotLy8gc2NhZmZvbGRpbmcuCi1URVNUKFNraXBUZXN0LCBDb25jdXJyZW50V2l0aG91dFRo
cmVhZHMpIHsKLSAgQ29uY3VycmVudFRlc3QgdGVzdDsKLSAgUmFuZG9tIHJuZCh0ZXN0OjpSYW5k
b21TZWVkKCkpOwotICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKLSAgICB0ZXN0
LlJlYWRTdGVwKCZybmQpOwotICAgIHRlc3QuV3JpdGVTdGVwKCZybmQpOwotICB9Ci19Ci0KLWNs
YXNzIFRlc3RTdGF0ZSB7Ci0gcHVibGljOgotICBDb25jdXJyZW50VGVzdCB0XzsKLSAgaW50IHNl
ZWRfOwotICBwb3J0OjpBdG9taWNQb2ludGVyIHF1aXRfZmxhZ187Ci0KLSAgZW51bSBSZWFkZXJT
dGF0ZSB7Ci0gICAgU1RBUlRJTkcsCi0gICAgUlVOTklORywKLSAgICBET05FCi0gIH07Ci0KLSAg
ZXhwbGljaXQgVGVzdFN0YXRlKGludCBzKQotICAgICAgOiBzZWVkXyhzKSwKLSAgICAgICAgcXVp
dF9mbGFnXyhOVUxMKSwKLSAgICAgICAgc3RhdGVfKFNUQVJUSU5HKSwKLSAgICAgICAgc3RhdGVf
Y3ZfKCZtdV8pIHt9Ci0KLSAgdm9pZCBXYWl0KFJlYWRlclN0YXRlIHMpIHsKLSAgICBtdV8uTG9j
aygpOwotICAgIHdoaWxlIChzdGF0ZV8gIT0gcykgewotICAgICAgc3RhdGVfY3ZfLldhaXQoKTsK
LSAgICB9Ci0gICAgbXVfLlVubG9jaygpOwotICB9Ci0KLSAgdm9pZCBDaGFuZ2UoUmVhZGVyU3Rh
dGUgcykgewotICAgIG11Xy5Mb2NrKCk7Ci0gICAgc3RhdGVfID0gczsKLSAgICBzdGF0ZV9jdl8u
U2lnbmFsKCk7Ci0gICAgbXVfLlVubG9jaygpOwotICB9Ci0KLSBwcml2YXRlOgotICBwb3J0OjpN
dXRleCBtdV87Ci0gIFJlYWRlclN0YXRlIHN0YXRlXzsKLSAgcG9ydDo6Q29uZFZhciBzdGF0ZV9j
dl87Ci19OwotCi1zdGF0aWMgdm9pZCBDb25jdXJyZW50UmVhZGVyKHZvaWQqIGFyZykgewotICBU
ZXN0U3RhdGUqIHN0YXRlID0gcmVpbnRlcnByZXRfY2FzdDxUZXN0U3RhdGUqPihhcmcpOwotICBS
YW5kb20gcm5kKHN0YXRlLT5zZWVkXyk7Ci0gIGludDY0X3QgcmVhZHMgPSAwOwotICBzdGF0ZS0+
Q2hhbmdlKFRlc3RTdGF0ZTo6UlVOTklORyk7Ci0gIHdoaWxlICghc3RhdGUtPnF1aXRfZmxhZ18u
QWNxdWlyZV9Mb2FkKCkpIHsKLSAgICBzdGF0ZS0+dF8uUmVhZFN0ZXAoJnJuZCk7Ci0gICAgKyty
ZWFkczsKLSAgfQotICBzdGF0ZS0+Q2hhbmdlKFRlc3RTdGF0ZTo6RE9ORSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIFJ1bkNvbmN1cnJlbnQoaW50IHJ1bikgewotICBjb25zdCBpbnQgc2VlZCA9IHRlc3Q6
OlJhbmRvbVNlZWQoKSArIChydW4gKiAxMDApOwotICBSYW5kb20gcm5kKHNlZWQpOwotICBjb25z
dCBpbnQgTiA9IDEwMDA7Ci0gIGNvbnN0IGludCBrU2l6ZSA9IDEwMDA7Ci0gIGZvciAoaW50IGkg
PSAwOyBpIDwgTjsgaSsrKSB7Ci0gICAgaWYgKChpICUgMTAwKSA9PSAwKSB7Ci0gICAgICBmcHJp
bnRmKHN0ZGVyciwgIlJ1biAlZCBvZiAlZFxuIiwgaSwgTik7Ci0gICAgfQotICAgIFRlc3RTdGF0
ZSBzdGF0ZShzZWVkICsgMSk7Ci0gICAgRW52OjpEZWZhdWx0KCktPlNjaGVkdWxlKENvbmN1cnJl
bnRSZWFkZXIsICZzdGF0ZSk7Ci0gICAgc3RhdGUuV2FpdChUZXN0U3RhdGU6OlJVTk5JTkcpOwot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwga1NpemU7IGkrKykgewotICAgICAgc3RhdGUudF8uV3Jp
dGVTdGVwKCZybmQpOwotICAgIH0KLSAgICBzdGF0ZS5xdWl0X2ZsYWdfLlJlbGVhc2VfU3RvcmUo
JnN0YXRlKTsgIC8vIEFueSBub24tTlVMTCBhcmcgd2lsbCBkbwotICAgIHN0YXRlLldhaXQoVGVz
dFN0YXRlOjpET05FKTsKLSAgfQotfQotCi1URVNUKFNraXBUZXN0LCBDb25jdXJyZW50MSkgeyBS
dW5Db25jdXJyZW50KDEpOyB9Ci1URVNUKFNraXBUZXN0LCBDb25jdXJyZW50MikgeyBSdW5Db25j
dXJyZW50KDIpOyB9Ci1URVNUKFNraXBUZXN0LCBDb25jdXJyZW50MykgeyBSdW5Db25jdXJyZW50
KDMpOyB9Ci1URVNUKFNraXBUZXN0LCBDb25jdXJyZW50NCkgeyBSdW5Db25jdXJyZW50KDQpOyB9
Ci1URVNUKFNraXBUZXN0LCBDb25jdXJyZW50NSkgeyBSdW5Db25jdXJyZW50KDUpOyB9Ci0KLX0g
IC8vIG5hbWVzcGFjZSBsZXZlbGRiCi0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikg
ewotICByZXR1cm4gbGV2ZWxkYjo6dGVzdDo6UnVuQWxsVGVzdHMoKTsKLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvc25hcHNob3QuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xldmVsZGIvZGIvc25hcHNob3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZTdmOGZkMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3NuYXBz
aG90LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIw
MTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxl
IGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCi0KLSNpZm5kZWYgU1RPUkFHRV9MRVZFTERCX0RC
X1NOQVBTSE9UX0hfCi0jZGVmaW5lIFNUT1JBR0VfTEVWRUxEQl9EQl9TTkFQU0hPVF9IXwotCi0j
aW5jbHVkZSAibGV2ZWxkYi9kYi5oIgotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7Ci0KLWNsYXNzIFNu
YXBzaG90TGlzdDsKLQotLy8gU25hcHNob3RzIGFyZSBrZXB0IGluIGEgZG91Ymx5LWxpbmtlZCBs
aXN0IGluIHRoZSBEQi4KLS8vIEVhY2ggU25hcHNob3RJbXBsIGNvcnJlc3BvbmRzIHRvIGEgcGFy
dGljdWxhciBzZXF1ZW5jZSBudW1iZXIuCi1jbGFzcyBTbmFwc2hvdEltcGwgOiBwdWJsaWMgU25h
cHNob3QgewotIHB1YmxpYzoKLSAgU2VxdWVuY2VOdW1iZXIgbnVtYmVyXzsgIC8vIGNvbnN0IGFm
dGVyIGNyZWF0aW9uCi0KLSBwcml2YXRlOgotICBmcmllbmQgY2xhc3MgU25hcHNob3RMaXN0Owot
Ci0gIC8vIFNuYXBzaG90SW1wbCBpcyBrZXB0IGluIGEgZG91Ymx5LWxpbmtlZCBjaXJjdWxhciBs
aXN0Ci0gIFNuYXBzaG90SW1wbCogcHJldl87Ci0gIFNuYXBzaG90SW1wbCogbmV4dF87Ci0KLSAg
U25hcHNob3RMaXN0KiBsaXN0XzsgICAgICAgICAgICAgICAgIC8vIGp1c3QgZm9yIHNhbml0eSBj
aGVja3MKLX07Ci0KLWNsYXNzIFNuYXBzaG90TGlzdCB7Ci0gcHVibGljOgotICBTbmFwc2hvdExp
c3QoKSB7Ci0gICAgbGlzdF8ucHJldl8gPSAmbGlzdF87Ci0gICAgbGlzdF8ubmV4dF8gPSAmbGlz
dF87Ci0gIH0KLQotICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gbGlzdF8ubmV4dF8gPT0g
Jmxpc3RfOyB9Ci0gIFNuYXBzaG90SW1wbCogb2xkZXN0KCkgY29uc3QgeyBhc3NlcnQoIWVtcHR5
KCkpOyByZXR1cm4gbGlzdF8ubmV4dF87IH0KLSAgU25hcHNob3RJbXBsKiBuZXdlc3QoKSBjb25z
dCB7IGFzc2VydCghZW1wdHkoKSk7IHJldHVybiBsaXN0Xy5wcmV2XzsgfQotCi0gIGNvbnN0IFNu
YXBzaG90SW1wbCogTmV3KFNlcXVlbmNlTnVtYmVyIHNlcSkgewotICAgIFNuYXBzaG90SW1wbCog
cyA9IG5ldyBTbmFwc2hvdEltcGw7Ci0gICAgcy0+bnVtYmVyXyA9IHNlcTsKLSAgICBzLT5saXN0
XyA9IHRoaXM7Ci0gICAgcy0+bmV4dF8gPSAmbGlzdF87Ci0gICAgcy0+cHJldl8gPSBsaXN0Xy5w
cmV2XzsKLSAgICBzLT5wcmV2Xy0+bmV4dF8gPSBzOwotICAgIHMtPm5leHRfLT5wcmV2XyA9IHM7
Ci0gICAgcmV0dXJuIHM7Ci0gIH0KLQotICB2b2lkIERlbGV0ZShjb25zdCBTbmFwc2hvdEltcGwq
IHMpIHsKLSAgICBhc3NlcnQocy0+bGlzdF8gPT0gdGhpcyk7Ci0gICAgcy0+cHJldl8tPm5leHRf
ID0gcy0+bmV4dF87Ci0gICAgcy0+bmV4dF8tPnByZXZfID0gcy0+cHJldl87Ci0gICAgZGVsZXRl
IHM7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIC8vIER1bW15IGhlYWQgb2YgZG91Ymx5LWxpbmtlZCBs
aXN0IG9mIHNuYXBzaG90cwotICBTbmFwc2hvdEltcGwgbGlzdF87Ci19OwotCi19ICAvLyBuYW1l
c3BhY2UgbGV2ZWxkYgotCi0jZW5kaWYgIC8vIFNUT1JBR0VfTEVWRUxEQl9EQl9TTkFQU0hPVF9I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi90YWJsZV9jYWNoZS5j
YyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvdGFibGVfY2FjaGUuY2MKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5N2RiMjcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi9kYi90YWJsZV9jYWNoZS5jYworKysgL2Rldi9udWxsCkBAIC0xLDEyMSAr
MCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCi0K
LSNpbmNsdWRlICJkYi90YWJsZV9jYWNoZS5oIgotCi0jaW5jbHVkZSAiZGIvZmlsZW5hbWUuaCIK
LSNpbmNsdWRlICJsZXZlbGRiL2Vudi5oIgotI2luY2x1ZGUgImxldmVsZGIvdGFibGUuaCIKLSNp
bmNsdWRlICJ1dGlsL2NvZGluZy5oIgotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7Ci0KLXN0cnVjdCBU
YWJsZUFuZEZpbGUgewotICBSYW5kb21BY2Nlc3NGaWxlKiBmaWxlOwotICBUYWJsZSogdGFibGU7
Ci19OwotCi1zdGF0aWMgdm9pZCBEZWxldGVFbnRyeShjb25zdCBTbGljZSYga2V5LCB2b2lkKiB2
YWx1ZSkgewotICBUYWJsZUFuZEZpbGUqIHRmID0gcmVpbnRlcnByZXRfY2FzdDxUYWJsZUFuZEZp
bGUqPih2YWx1ZSk7Ci0gIGRlbGV0ZSB0Zi0+dGFibGU7Ci0gIGRlbGV0ZSB0Zi0+ZmlsZTsKLSAg
ZGVsZXRlIHRmOwotfQotCi1zdGF0aWMgdm9pZCBVbnJlZkVudHJ5KHZvaWQqIGFyZzEsIHZvaWQq
IGFyZzIpIHsKLSAgQ2FjaGUqIGNhY2hlID0gcmVpbnRlcnByZXRfY2FzdDxDYWNoZSo+KGFyZzEp
OwotICBDYWNoZTo6SGFuZGxlKiBoID0gcmVpbnRlcnByZXRfY2FzdDxDYWNoZTo6SGFuZGxlKj4o
YXJnMik7Ci0gIGNhY2hlLT5SZWxlYXNlKGgpOwotfQotCi1UYWJsZUNhY2hlOjpUYWJsZUNhY2hl
KGNvbnN0IHN0ZDo6c3RyaW5nJiBkYm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IE9wdGlvbnMqIG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRyaWVzKQot
ICAgIDogZW52XyhvcHRpb25zLT5lbnYpLAotICAgICAgZGJuYW1lXyhkYm5hbWUpLAotICAgICAg
b3B0aW9uc18ob3B0aW9ucyksCi0gICAgICBjYWNoZV8oTmV3TFJVQ2FjaGUoZW50cmllcykpIHsK
LX0KLQotVGFibGVDYWNoZTo6flRhYmxlQ2FjaGUoKSB7Ci0gIGRlbGV0ZSBjYWNoZV87Ci19Ci0K
LVN0YXR1cyBUYWJsZUNhY2hlOjpGaW5kVGFibGUodWludDY0X3QgZmlsZV9udW1iZXIsIHVpbnQ2
NF90IGZpbGVfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FjaGU6OkhhbmRs
ZSoqIGhhbmRsZSkgewotICBTdGF0dXMgczsKLSAgY2hhciBidWZbc2l6ZW9mKGZpbGVfbnVtYmVy
KV07Ci0gIEVuY29kZUZpeGVkNjQoYnVmLCBmaWxlX251bWJlcik7Ci0gIFNsaWNlIGtleShidWYs
IHNpemVvZihidWYpKTsKLSAgKmhhbmRsZSA9IGNhY2hlXy0+TG9va3VwKGtleSk7Ci0gIGlmICgq
aGFuZGxlID09IE5VTEwpIHsKLSAgICBzdGQ6OnN0cmluZyBmbmFtZSA9IFRhYmxlRmlsZU5hbWUo
ZGJuYW1lXywgZmlsZV9udW1iZXIpOwotICAgIFJhbmRvbUFjY2Vzc0ZpbGUqIGZpbGUgPSBOVUxM
OwotICAgIFRhYmxlKiB0YWJsZSA9IE5VTEw7Ci0gICAgcyA9IGVudl8tPk5ld1JhbmRvbUFjY2Vz
c0ZpbGUoZm5hbWUsICZmaWxlKTsKLSAgICBpZiAocy5vaygpKSB7Ci0gICAgICBzID0gVGFibGU6
Ok9wZW4oKm9wdGlvbnNfLCBmaWxlLCBmaWxlX3NpemUsICZ0YWJsZSk7Ci0gICAgfQotCi0gICAg
aWYgKCFzLm9rKCkpIHsKLSAgICAgIGFzc2VydCh0YWJsZSA9PSBOVUxMKTsKLSAgICAgIGRlbGV0
ZSBmaWxlOwotICAgICAgLy8gV2UgZG8gbm90IGNhY2hlIGVycm9yIHJlc3VsdHMgc28gdGhhdCBp
ZiB0aGUgZXJyb3IgaXMgdHJhbnNpZW50LAotICAgICAgLy8gb3Igc29tZWJvZHkgcmVwYWlycyB0
aGUgZmlsZSwgd2UgcmVjb3ZlciBhdXRvbWF0aWNhbGx5LgotICAgIH0gZWxzZSB7Ci0gICAgICBU
YWJsZUFuZEZpbGUqIHRmID0gbmV3IFRhYmxlQW5kRmlsZTsKLSAgICAgIHRmLT5maWxlID0gZmls
ZTsKLSAgICAgIHRmLT50YWJsZSA9IHRhYmxlOwotICAgICAgKmhhbmRsZSA9IGNhY2hlXy0+SW5z
ZXJ0KGtleSwgdGYsIDEsICZEZWxldGVFbnRyeSk7Ci0gICAgfQotICB9Ci0gIHJldHVybiBzOwot
fQotCi1JdGVyYXRvciogVGFibGVDYWNoZTo6TmV3SXRlcmF0b3IoY29uc3QgUmVhZE9wdGlvbnMm
IG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgZmls
ZV9udW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgZmls
ZV9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlKiogdGFibGVw
dHIpIHsKLSAgaWYgKHRhYmxlcHRyICE9IE5VTEwpIHsKLSAgICAqdGFibGVwdHIgPSBOVUxMOwot
ICB9Ci0KLSAgQ2FjaGU6OkhhbmRsZSogaGFuZGxlID0gTlVMTDsKLSAgU3RhdHVzIHMgPSBGaW5k
VGFibGUoZmlsZV9udW1iZXIsIGZpbGVfc2l6ZSwgJmhhbmRsZSk7Ci0gIGlmICghcy5vaygpKSB7
Ci0gICAgcmV0dXJuIE5ld0Vycm9ySXRlcmF0b3Iocyk7Ci0gIH0KLQotICBUYWJsZSogdGFibGUg
PSByZWludGVycHJldF9jYXN0PFRhYmxlQW5kRmlsZSo+KGNhY2hlXy0+VmFsdWUoaGFuZGxlKSkt
PnRhYmxlOwotICBJdGVyYXRvciogcmVzdWx0ID0gdGFibGUtPk5ld0l0ZXJhdG9yKG9wdGlvbnMp
OwotICByZXN1bHQtPlJlZ2lzdGVyQ2xlYW51cCgmVW5yZWZFbnRyeSwgY2FjaGVfLCBoYW5kbGUp
OwotICBpZiAodGFibGVwdHIgIT0gTlVMTCkgewotICAgICp0YWJsZXB0ciA9IHRhYmxlOwotICB9
Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLVN0YXR1cyBUYWJsZUNhY2hlOjpHZXQoY29uc3QgUmVh
ZE9wdGlvbnMmIG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGZpbGVf
bnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBmaWxlX3NpemUsCi0gICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFNsaWNlJiBrLAotICAgICAgICAgICAgICAgICAgICAg
ICB2b2lkKiBhcmcsCi0gICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpzYXZlcikodm9pZCos
IGNvbnN0IFNsaWNlJiwgY29uc3QgU2xpY2UmKSkgewotICBDYWNoZTo6SGFuZGxlKiBoYW5kbGUg
PSBOVUxMOwotICBTdGF0dXMgcyA9IEZpbmRUYWJsZShmaWxlX251bWJlciwgZmlsZV9zaXplLCAm
aGFuZGxlKTsKLSAgaWYgKHMub2soKSkgewotICAgIFRhYmxlKiB0ID0gcmVpbnRlcnByZXRfY2Fz
dDxUYWJsZUFuZEZpbGUqPihjYWNoZV8tPlZhbHVlKGhhbmRsZSkpLT50YWJsZTsKLSAgICBzID0g
dC0+SW50ZXJuYWxHZXQob3B0aW9ucywgaywgYXJnLCBzYXZlcik7Ci0gICAgY2FjaGVfLT5SZWxl
YXNlKGhhbmRsZSk7Ci0gIH0KLSAgcmV0dXJuIHM7Ci19Ci0KLXZvaWQgVGFibGVDYWNoZTo6RXZp
Y3QodWludDY0X3QgZmlsZV9udW1iZXIpIHsKLSAgY2hhciBidWZbc2l6ZW9mKGZpbGVfbnVtYmVy
KV07Ci0gIEVuY29kZUZpeGVkNjQoYnVmLCBmaWxlX251bWJlcik7Ci0gIGNhY2hlXy0+RXJhc2Uo
U2xpY2UoYnVmLCBzaXplb2YoYnVmKSkpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi90YWJsZV9jYWNoZS5oIGIv
U291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi90YWJsZV9jYWNoZS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4Y2Y0YWFmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvZGIvdGFibGVfY2FjaGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAK
LS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4g
U2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KLS8vCi0vLyBU
aHJlYWQtc2FmZSAocHJvdmlkZXMgaW50ZXJuYWwgc3luY2hyb25pemF0aW9uKQotCi0jaWZuZGVm
IFNUT1JBR0VfTEVWRUxEQl9EQl9UQUJMRV9DQUNIRV9IXwotI2RlZmluZSBTVE9SQUdFX0xFVkVM
REJfREJfVEFCTEVfQ0FDSEVfSF8KLQotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxzdGRp
bnQuaD4KLSNpbmNsdWRlICJkYi9kYmZvcm1hdC5oIgotI2luY2x1ZGUgImxldmVsZGIvY2FjaGUu
aCIKLSNpbmNsdWRlICJsZXZlbGRiL3RhYmxlLmgiCi0jaW5jbHVkZSAicG9ydC9wb3J0LmgiCi0K
LW5hbWVzcGFjZSBsZXZlbGRiIHsKLQotY2xhc3MgRW52OwotCi1jbGFzcyBUYWJsZUNhY2hlIHsK
LSBwdWJsaWM6Ci0gIFRhYmxlQ2FjaGUoY29uc3Qgc3RkOjpzdHJpbmcmIGRibmFtZSwgY29uc3Qg
T3B0aW9ucyogb3B0aW9ucywgaW50IGVudHJpZXMpOwotICB+VGFibGVDYWNoZSgpOwotCi0gIC8v
IFJldHVybiBhbiBpdGVyYXRvciBmb3IgdGhlIHNwZWNpZmllZCBmaWxlIG51bWJlciAodGhlIGNv
cnJlc3BvbmRpbmcKLSAgLy8gZmlsZSBsZW5ndGggbXVzdCBiZSBleGFjdGx5ICJmaWxlX3NpemUi
IGJ5dGVzKS4gIElmICJ0YWJsZXB0ciIgaXMKLSAgLy8gbm9uLU5VTEwsIGFsc28gc2V0cyAiKnRh
YmxlcHRyIiB0byBwb2ludCB0byB0aGUgVGFibGUgb2JqZWN0Ci0gIC8vIHVuZGVybHlpbmcgdGhl
IHJldHVybmVkIGl0ZXJhdG9yLCBvciBOVUxMIGlmIG5vIFRhYmxlIG9iamVjdCB1bmRlcmxpZXMK
LSAgLy8gdGhlIHJldHVybmVkIGl0ZXJhdG9yLiAgVGhlIHJldHVybmVkICIqdGFibGVwdHIiIG9i
amVjdCBpcyBvd25lZCBieQotICAvLyB0aGUgY2FjaGUgYW5kIHNob3VsZCBub3QgYmUgZGVsZXRl
ZCwgYW5kIGlzIHZhbGlkIGZvciBhcyBsb25nIGFzIHRoZQotICAvLyByZXR1cm5lZCBpdGVyYXRv
ciBpcyBsaXZlLgotICBJdGVyYXRvciogTmV3SXRlcmF0b3IoY29uc3QgUmVhZE9wdGlvbnMmIG9w
dGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBmaWxlX251bWJlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGZpbGVfc2l6ZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFRhYmxlKiogdGFibGVwdHIgPSBOVUxMKTsKLQotICAvLyBJZiBhIHNlZWsgdG8g
aW50ZXJuYWwga2V5ICJrIiBpbiBzcGVjaWZpZWQgZmlsZSBmaW5kcyBhbiBlbnRyeSwKLSAgLy8g
Y2FsbCAoKmhhbmRsZV9yZXN1bHQpKGFyZywgZm91bmRfa2V5LCBmb3VuZF92YWx1ZSkuCi0gIFN0
YXR1cyBHZXQoY29uc3QgUmVhZE9wdGlvbnMmIG9wdGlvbnMsCi0gICAgICAgICAgICAgdWludDY0
X3QgZmlsZV9udW1iZXIsCi0gICAgICAgICAgICAgdWludDY0X3QgZmlsZV9zaXplLAotICAgICAg
ICAgICAgIGNvbnN0IFNsaWNlJiBrLAotICAgICAgICAgICAgIHZvaWQqIGFyZywKLSAgICAgICAg
ICAgICB2b2lkICgqaGFuZGxlX3Jlc3VsdCkodm9pZCosIGNvbnN0IFNsaWNlJiwgY29uc3QgU2xp
Y2UmKSk7Ci0KLSAgLy8gRXZpY3QgYW55IGVudHJ5IGZvciB0aGUgc3BlY2lmaWVkIGZpbGUgbnVt
YmVyCi0gIHZvaWQgRXZpY3QodWludDY0X3QgZmlsZV9udW1iZXIpOwotCi0gcHJpdmF0ZToKLSAg
RW52KiBjb25zdCBlbnZfOwotICBjb25zdCBzdGQ6OnN0cmluZyBkYm5hbWVfOwotICBjb25zdCBP
cHRpb25zKiBvcHRpb25zXzsKLSAgQ2FjaGUqIGNhY2hlXzsKLQotICBTdGF0dXMgRmluZFRhYmxl
KHVpbnQ2NF90IGZpbGVfbnVtYmVyLCB1aW50NjRfdCBmaWxlX3NpemUsIENhY2hlOjpIYW5kbGUq
Kik7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgotCi0jZW5kaWYgIC8vIFNUT1JBR0Vf
TEVWRUxEQl9EQl9UQUJMRV9DQUNIRV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGV2ZWxkYi9kYi92ZXJzaW9uX2VkaXQuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2Ri
L3ZlcnNpb25fZWRpdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEwYTJkNS4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3ZlcnNpb25fZWRpdC5j
YworKysgL2Rldi9udWxsCkBAIC0xLDI2NiArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEg
VGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZv
ciBuYW1lcyBvZiBjb250cmlidXRvcnMuCi0KLSNpbmNsdWRlICJkYi92ZXJzaW9uX2VkaXQuaCIK
LQotI2luY2x1ZGUgImRiL3ZlcnNpb25fc2V0LmgiCi0jaW5jbHVkZSAidXRpbC9jb2RpbmcuaCIK
LQotbmFtZXNwYWNlIGxldmVsZGIgewotCi0vLyBUYWcgbnVtYmVycyBmb3Igc2VyaWFsaXplZCBW
ZXJzaW9uRWRpdC4gIFRoZXNlIG51bWJlcnMgYXJlIHdyaXR0ZW4gdG8KLS8vIGRpc2sgYW5kIHNo
b3VsZCBub3QgYmUgY2hhbmdlZC4KLWVudW0gVGFnIHsKLSAga0NvbXBhcmF0b3IgICAgICAgICAg
ID0gMSwKLSAga0xvZ051bWJlciAgICAgICAgICAgID0gMiwKLSAga05leHRGaWxlTnVtYmVyICAg
ICAgID0gMywKLSAga0xhc3RTZXF1ZW5jZSAgICAgICAgID0gNCwKLSAga0NvbXBhY3RQb2ludGVy
ICAgICAgID0gNSwKLSAga0RlbGV0ZWRGaWxlICAgICAgICAgID0gNiwKLSAga05ld0ZpbGUgICAg
ICAgICAgICAgID0gNywKLSAgLy8gOCB3YXMgdXNlZCBmb3IgbGFyZ2UgdmFsdWUgcmVmcwotICBr
UHJldkxvZ051bWJlciAgICAgICAgPSA5Ci19OwotCi12b2lkIFZlcnNpb25FZGl0OjpDbGVhcigp
IHsKLSAgY29tcGFyYXRvcl8uY2xlYXIoKTsKLSAgbG9nX251bWJlcl8gPSAwOwotICBwcmV2X2xv
Z19udW1iZXJfID0gMDsKLSAgbGFzdF9zZXF1ZW5jZV8gPSAwOwotICBuZXh0X2ZpbGVfbnVtYmVy
XyA9IDA7Ci0gIGhhc19jb21wYXJhdG9yXyA9IGZhbHNlOwotICBoYXNfbG9nX251bWJlcl8gPSBm
YWxzZTsKLSAgaGFzX3ByZXZfbG9nX251bWJlcl8gPSBmYWxzZTsKLSAgaGFzX25leHRfZmlsZV9u
dW1iZXJfID0gZmFsc2U7Ci0gIGhhc19sYXN0X3NlcXVlbmNlXyA9IGZhbHNlOwotICBkZWxldGVk
X2ZpbGVzXy5jbGVhcigpOwotICBuZXdfZmlsZXNfLmNsZWFyKCk7Ci19Ci0KLXZvaWQgVmVyc2lv
bkVkaXQ6OkVuY29kZVRvKHN0ZDo6c3RyaW5nKiBkc3QpIGNvbnN0IHsKLSAgaWYgKGhhc19jb21w
YXJhdG9yXykgewotICAgIFB1dFZhcmludDMyKGRzdCwga0NvbXBhcmF0b3IpOwotICAgIFB1dExl
bmd0aFByZWZpeGVkU2xpY2UoZHN0LCBjb21wYXJhdG9yXyk7Ci0gIH0KLSAgaWYgKGhhc19sb2df
bnVtYmVyXykgewotICAgIFB1dFZhcmludDMyKGRzdCwga0xvZ051bWJlcik7Ci0gICAgUHV0VmFy
aW50NjQoZHN0LCBsb2dfbnVtYmVyXyk7Ci0gIH0KLSAgaWYgKGhhc19wcmV2X2xvZ19udW1iZXJf
KSB7Ci0gICAgUHV0VmFyaW50MzIoZHN0LCBrUHJldkxvZ051bWJlcik7Ci0gICAgUHV0VmFyaW50
NjQoZHN0LCBwcmV2X2xvZ19udW1iZXJfKTsKLSAgfQotICBpZiAoaGFzX25leHRfZmlsZV9udW1i
ZXJfKSB7Ci0gICAgUHV0VmFyaW50MzIoZHN0LCBrTmV4dEZpbGVOdW1iZXIpOwotICAgIFB1dFZh
cmludDY0KGRzdCwgbmV4dF9maWxlX251bWJlcl8pOwotICB9Ci0gIGlmIChoYXNfbGFzdF9zZXF1
ZW5jZV8pIHsKLSAgICBQdXRWYXJpbnQzMihkc3QsIGtMYXN0U2VxdWVuY2UpOwotICAgIFB1dFZh
cmludDY0KGRzdCwgbGFzdF9zZXF1ZW5jZV8pOwotICB9Ci0KLSAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjb21wYWN0X3BvaW50ZXJzXy5zaXplKCk7IGkrKykgewotICAgIFB1dFZhcmludDMyKGRz
dCwga0NvbXBhY3RQb2ludGVyKTsKLSAgICBQdXRWYXJpbnQzMihkc3QsIGNvbXBhY3RfcG9pbnRl
cnNfW2ldLmZpcnN0KTsgIC8vIGxldmVsCi0gICAgUHV0TGVuZ3RoUHJlZml4ZWRTbGljZShkc3Qs
IGNvbXBhY3RfcG9pbnRlcnNfW2ldLnNlY29uZC5FbmNvZGUoKSk7Ci0gIH0KLQotICBmb3IgKERl
bGV0ZWRGaWxlU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZGVsZXRlZF9maWxlc18uYmVnaW4o
KTsKLSAgICAgICBpdGVyICE9IGRlbGV0ZWRfZmlsZXNfLmVuZCgpOwotICAgICAgICsraXRlcikg
ewotICAgIFB1dFZhcmludDMyKGRzdCwga0RlbGV0ZWRGaWxlKTsKLSAgICBQdXRWYXJpbnQzMihk
c3QsIGl0ZXItPmZpcnN0KTsgICAvLyBsZXZlbAotICAgIFB1dFZhcmludDY0KGRzdCwgaXRlci0+
c2Vjb25kKTsgIC8vIGZpbGUgbnVtYmVyCi0gIH0KLQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG5ld19maWxlc18uc2l6ZSgpOyBpKyspIHsKLSAgICBjb25zdCBGaWxlTWV0YURhdGEmIGYgPSBu
ZXdfZmlsZXNfW2ldLnNlY29uZDsKLSAgICBQdXRWYXJpbnQzMihkc3QsIGtOZXdGaWxlKTsKLSAg
ICBQdXRWYXJpbnQzMihkc3QsIG5ld19maWxlc19baV0uZmlyc3QpOyAgLy8gbGV2ZWwKLSAgICBQ
dXRWYXJpbnQ2NChkc3QsIGYubnVtYmVyKTsKLSAgICBQdXRWYXJpbnQ2NChkc3QsIGYuZmlsZV9z
aXplKTsKLSAgICBQdXRMZW5ndGhQcmVmaXhlZFNsaWNlKGRzdCwgZi5zbWFsbGVzdC5FbmNvZGUo
KSk7Ci0gICAgUHV0TGVuZ3RoUHJlZml4ZWRTbGljZShkc3QsIGYubGFyZ2VzdC5FbmNvZGUoKSk7
Ci0gIH0KLX0KLQotc3RhdGljIGJvb2wgR2V0SW50ZXJuYWxLZXkoU2xpY2UqIGlucHV0LCBJbnRl
cm5hbEtleSogZHN0KSB7Ci0gIFNsaWNlIHN0cjsKLSAgaWYgKEdldExlbmd0aFByZWZpeGVkU2xp
Y2UoaW5wdXQsICZzdHIpKSB7Ci0gICAgZHN0LT5EZWNvZGVGcm9tKHN0cik7Ci0gICAgcmV0dXJu
IHRydWU7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19Ci0KLXN0YXRpYyBi
b29sIEdldExldmVsKFNsaWNlKiBpbnB1dCwgaW50KiBsZXZlbCkgewotICB1aW50MzJfdCB2Owot
ICBpZiAoR2V0VmFyaW50MzIoaW5wdXQsICZ2KSAmJgotICAgICAgdiA8IGNvbmZpZzo6a051bUxl
dmVscykgewotICAgICpsZXZlbCA9IHY7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0gZWxzZSB7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotICB9Ci19Ci0KLVN0YXR1cyBWZXJzaW9uRWRpdDo6RGVjb2RlRnJv
bShjb25zdCBTbGljZSYgc3JjKSB7Ci0gIENsZWFyKCk7Ci0gIFNsaWNlIGlucHV0ID0gc3JjOwot
ICBjb25zdCBjaGFyKiBtc2cgPSBOVUxMOwotICB1aW50MzJfdCB0YWc7Ci0KLSAgLy8gVGVtcG9y
YXJ5IHN0b3JhZ2UgZm9yIHBhcnNpbmcKLSAgaW50IGxldmVsOwotICB1aW50NjRfdCBudW1iZXI7
Ci0gIEZpbGVNZXRhRGF0YSBmOwotICBTbGljZSBzdHI7Ci0gIEludGVybmFsS2V5IGtleTsKLQot
ICB3aGlsZSAobXNnID09IE5VTEwgJiYgR2V0VmFyaW50MzIoJmlucHV0LCAmdGFnKSkgewotICAg
IHN3aXRjaCAodGFnKSB7Ci0gICAgICBjYXNlIGtDb21wYXJhdG9yOgotICAgICAgICBpZiAoR2V0
TGVuZ3RoUHJlZml4ZWRTbGljZSgmaW5wdXQsICZzdHIpKSB7Ci0gICAgICAgICAgY29tcGFyYXRv
cl8gPSBzdHIuVG9TdHJpbmcoKTsKLSAgICAgICAgICBoYXNfY29tcGFyYXRvcl8gPSB0cnVlOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgIG1zZyA9ICJjb21wYXJhdG9yIG5hbWUiOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIGtMb2dOdW1iZXI6Ci0gICAgICAg
IGlmIChHZXRWYXJpbnQ2NCgmaW5wdXQsICZsb2dfbnVtYmVyXykpIHsKLSAgICAgICAgICBoYXNf
bG9nX251bWJlcl8gPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIG1zZyA9ICJs
b2cgbnVtYmVyIjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBrUHJl
dkxvZ051bWJlcjoKLSAgICAgICAgaWYgKEdldFZhcmludDY0KCZpbnB1dCwgJnByZXZfbG9nX251
bWJlcl8pKSB7Ci0gICAgICAgICAgaGFzX3ByZXZfbG9nX251bWJlcl8gPSB0cnVlOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgIG1zZyA9ICJwcmV2aW91cyBsb2cgbnVtYmVyIjsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBrTmV4dEZpbGVOdW1iZXI6Ci0gICAg
ICAgIGlmIChHZXRWYXJpbnQ2NCgmaW5wdXQsICZuZXh0X2ZpbGVfbnVtYmVyXykpIHsKLSAgICAg
ICAgICBoYXNfbmV4dF9maWxlX251bWJlcl8gPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgIG1zZyA9ICJuZXh0IGZpbGUgbnVtYmVyIjsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLQotICAgICAgY2FzZSBrTGFzdFNlcXVlbmNlOgotICAgICAgICBpZiAoR2V0VmFyaW50NjQo
JmlucHV0LCAmbGFzdF9zZXF1ZW5jZV8pKSB7Ci0gICAgICAgICAgaGFzX2xhc3Rfc2VxdWVuY2Vf
ID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBtc2cgPSAibGFzdCBzZXF1ZW5j
ZSBudW1iZXIiOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIGtDb21w
YWN0UG9pbnRlcjoKLSAgICAgICAgaWYgKEdldExldmVsKCZpbnB1dCwgJmxldmVsKSAmJgotICAg
ICAgICAgICAgR2V0SW50ZXJuYWxLZXkoJmlucHV0LCAma2V5KSkgewotICAgICAgICAgIGNvbXBh
Y3RfcG9pbnRlcnNfLnB1c2hfYmFjayhzdGQ6Om1ha2VfcGFpcihsZXZlbCwga2V5KSk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgbXNnID0gImNvbXBhY3Rpb24gcG9pbnRlciI7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2Uga0RlbGV0ZWRGaWxlOgotICAgICAg
ICBpZiAoR2V0TGV2ZWwoJmlucHV0LCAmbGV2ZWwpICYmCi0gICAgICAgICAgICBHZXRWYXJpbnQ2
NCgmaW5wdXQsICZudW1iZXIpKSB7Ci0gICAgICAgICAgZGVsZXRlZF9maWxlc18uaW5zZXJ0KHN0
ZDo6bWFrZV9wYWlyKGxldmVsLCBudW1iZXIpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICBtc2cgPSAiZGVsZXRlZCBmaWxlIjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAg
ICAgY2FzZSBrTmV3RmlsZToKLSAgICAgICAgaWYgKEdldExldmVsKCZpbnB1dCwgJmxldmVsKSAm
JgotICAgICAgICAgICAgR2V0VmFyaW50NjQoJmlucHV0LCAmZi5udW1iZXIpICYmCi0gICAgICAg
ICAgICBHZXRWYXJpbnQ2NCgmaW5wdXQsICZmLmZpbGVfc2l6ZSkgJiYKLSAgICAgICAgICAgIEdl
dEludGVybmFsS2V5KCZpbnB1dCwgJmYuc21hbGxlc3QpICYmCi0gICAgICAgICAgICBHZXRJbnRl
cm5hbEtleSgmaW5wdXQsICZmLmxhcmdlc3QpKSB7Ci0gICAgICAgICAgbmV3X2ZpbGVzXy5wdXNo
X2JhY2soc3RkOjptYWtlX3BhaXIobGV2ZWwsIGYpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICBtc2cgPSAibmV3LWZpbGUgZW50cnkiOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBtc2cgPSAidW5rbm93biB0YWciOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gIH0KLQotICBpZiAobXNnID09IE5VTEwgJiYgIWlucHV0LmVtcHR5KCkp
IHsKLSAgICBtc2cgPSAiaW52YWxpZCB0YWciOwotICB9Ci0KLSAgU3RhdHVzIHJlc3VsdDsKLSAg
aWYgKG1zZyAhPSBOVUxMKSB7Ci0gICAgcmVzdWx0ID0gU3RhdHVzOjpDb3JydXB0aW9uKCJWZXJz
aW9uRWRpdCIsIG1zZyk7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RkOjpzdHJpbmcg
VmVyc2lvbkVkaXQ6OkRlYnVnU3RyaW5nKCkgY29uc3QgewotICBzdGQ6OnN0cmluZyByOwotICBy
LmFwcGVuZCgiVmVyc2lvbkVkaXQgeyIpOwotICBpZiAoaGFzX2NvbXBhcmF0b3JfKSB7Ci0gICAg
ci5hcHBlbmQoIlxuICBDb21wYXJhdG9yOiAiKTsKLSAgICByLmFwcGVuZChjb21wYXJhdG9yXyk7
Ci0gIH0KLSAgaWYgKGhhc19sb2dfbnVtYmVyXykgewotICAgIHIuYXBwZW5kKCJcbiAgTG9nTnVt
YmVyOiAiKTsKLSAgICBBcHBlbmROdW1iZXJUbygmciwgbG9nX251bWJlcl8pOwotICB9Ci0gIGlm
IChoYXNfcHJldl9sb2dfbnVtYmVyXykgewotICAgIHIuYXBwZW5kKCJcbiAgUHJldkxvZ051bWJl
cjogIik7Ci0gICAgQXBwZW5kTnVtYmVyVG8oJnIsIHByZXZfbG9nX251bWJlcl8pOwotICB9Ci0g
IGlmIChoYXNfbmV4dF9maWxlX251bWJlcl8pIHsKLSAgICByLmFwcGVuZCgiXG4gIE5leHRGaWxl
OiAiKTsKLSAgICBBcHBlbmROdW1iZXJUbygmciwgbmV4dF9maWxlX251bWJlcl8pOwotICB9Ci0g
IGlmIChoYXNfbGFzdF9zZXF1ZW5jZV8pIHsKLSAgICByLmFwcGVuZCgiXG4gIExhc3RTZXE6ICIp
OwotICAgIEFwcGVuZE51bWJlclRvKCZyLCBsYXN0X3NlcXVlbmNlXyk7Ci0gIH0KLSAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb21wYWN0X3BvaW50ZXJzXy5zaXplKCk7IGkrKykgewotICAgIHIu
YXBwZW5kKCJcbiAgQ29tcGFjdFBvaW50ZXI6ICIpOwotICAgIEFwcGVuZE51bWJlclRvKCZyLCBj
b21wYWN0X3BvaW50ZXJzX1tpXS5maXJzdCk7Ci0gICAgci5hcHBlbmQoIiAiKTsKLSAgICByLmFw
cGVuZChjb21wYWN0X3BvaW50ZXJzX1tpXS5zZWNvbmQuRGVidWdTdHJpbmcoKSk7Ci0gIH0KLSAg
Zm9yIChEZWxldGVkRmlsZVNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGRlbGV0ZWRfZmlsZXNf
LmJlZ2luKCk7Ci0gICAgICAgaXRlciAhPSBkZWxldGVkX2ZpbGVzXy5lbmQoKTsKLSAgICAgICAr
K2l0ZXIpIHsKLSAgICByLmFwcGVuZCgiXG4gIERlbGV0ZUZpbGU6ICIpOwotICAgIEFwcGVuZE51
bWJlclRvKCZyLCBpdGVyLT5maXJzdCk7Ci0gICAgci5hcHBlbmQoIiAiKTsKLSAgICBBcHBlbmRO
dW1iZXJUbygmciwgaXRlci0+c2Vjb25kKTsKLSAgfQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG5ld19maWxlc18uc2l6ZSgpOyBpKyspIHsKLSAgICBjb25zdCBGaWxlTWV0YURhdGEmIGYgPSBu
ZXdfZmlsZXNfW2ldLnNlY29uZDsKLSAgICByLmFwcGVuZCgiXG4gIEFkZEZpbGU6ICIpOwotICAg
IEFwcGVuZE51bWJlclRvKCZyLCBuZXdfZmlsZXNfW2ldLmZpcnN0KTsKLSAgICByLmFwcGVuZCgi
ICIpOwotICAgIEFwcGVuZE51bWJlclRvKCZyLCBmLm51bWJlcik7Ci0gICAgci5hcHBlbmQoIiAi
KTsKLSAgICBBcHBlbmROdW1iZXJUbygmciwgZi5maWxlX3NpemUpOwotICAgIHIuYXBwZW5kKCIg
Iik7Ci0gICAgci5hcHBlbmQoZi5zbWFsbGVzdC5EZWJ1Z1N0cmluZygpKTsKLSAgICByLmFwcGVu
ZCgiIC4uICIpOwotICAgIHIuYXBwZW5kKGYubGFyZ2VzdC5EZWJ1Z1N0cmluZygpKTsKLSAgfQot
ICByLmFwcGVuZCgiXG59XG4iKTsKLSAgcmV0dXJuIHI7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBs
ZXZlbGRiCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3ZlcnNpb25f
ZWRpdC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi92ZXJzaW9uX2VkaXQuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFlZjc3Yi4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3ZlcnNpb25fZWRpdC5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTA3ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9y
cy4KLQotI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfREJfVkVSU0lPTl9FRElUX0hfCi0jZGVmaW5l
IFNUT1JBR0VfTEVWRUxEQl9EQl9WRVJTSU9OX0VESVRfSF8KLQotI2luY2x1ZGUgPHNldD4KLSNp
bmNsdWRlIDx1dGlsaXR5PgotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlICJkYi9kYmZvcm1h
dC5oIgotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7Ci0KLWNsYXNzIFZlcnNpb25TZXQ7Ci0KLXN0cnVj
dCBGaWxlTWV0YURhdGEgewotICBpbnQgcmVmczsKLSAgaW50IGFsbG93ZWRfc2Vla3M7ICAgICAg
ICAgIC8vIFNlZWtzIGFsbG93ZWQgdW50aWwgY29tcGFjdGlvbgotICB1aW50NjRfdCBudW1iZXI7
Ci0gIHVpbnQ2NF90IGZpbGVfc2l6ZTsgICAgICAgICAvLyBGaWxlIHNpemUgaW4gYnl0ZXMKLSAg
SW50ZXJuYWxLZXkgc21hbGxlc3Q7ICAgICAgIC8vIFNtYWxsZXN0IGludGVybmFsIGtleSBzZXJ2
ZWQgYnkgdGFibGUKLSAgSW50ZXJuYWxLZXkgbGFyZ2VzdDsgICAgICAgIC8vIExhcmdlc3QgaW50
ZXJuYWwga2V5IHNlcnZlZCBieSB0YWJsZQotCi0gIEZpbGVNZXRhRGF0YSgpIDogcmVmcygwKSwg
YWxsb3dlZF9zZWVrcygxIDw8IDMwKSwgZmlsZV9zaXplKDApIHsgfQotfTsKLQotY2xhc3MgVmVy
c2lvbkVkaXQgewotIHB1YmxpYzoKLSAgVmVyc2lvbkVkaXQoKSB7IENsZWFyKCk7IH0KLSAgflZl
cnNpb25FZGl0KCkgeyB9Ci0KLSAgdm9pZCBDbGVhcigpOwotCi0gIHZvaWQgU2V0Q29tcGFyYXRv
ck5hbWUoY29uc3QgU2xpY2UmIG5hbWUpIHsKLSAgICBoYXNfY29tcGFyYXRvcl8gPSB0cnVlOwot
ICAgIGNvbXBhcmF0b3JfID0gbmFtZS5Ub1N0cmluZygpOwotICB9Ci0gIHZvaWQgU2V0TG9nTnVt
YmVyKHVpbnQ2NF90IG51bSkgewotICAgIGhhc19sb2dfbnVtYmVyXyA9IHRydWU7Ci0gICAgbG9n
X251bWJlcl8gPSBudW07Ci0gIH0KLSAgdm9pZCBTZXRQcmV2TG9nTnVtYmVyKHVpbnQ2NF90IG51
bSkgewotICAgIGhhc19wcmV2X2xvZ19udW1iZXJfID0gdHJ1ZTsKLSAgICBwcmV2X2xvZ19udW1i
ZXJfID0gbnVtOwotICB9Ci0gIHZvaWQgU2V0TmV4dEZpbGUodWludDY0X3QgbnVtKSB7Ci0gICAg
aGFzX25leHRfZmlsZV9udW1iZXJfID0gdHJ1ZTsKLSAgICBuZXh0X2ZpbGVfbnVtYmVyXyA9IG51
bTsKLSAgfQotICB2b2lkIFNldExhc3RTZXF1ZW5jZShTZXF1ZW5jZU51bWJlciBzZXEpIHsKLSAg
ICBoYXNfbGFzdF9zZXF1ZW5jZV8gPSB0cnVlOwotICAgIGxhc3Rfc2VxdWVuY2VfID0gc2VxOwot
ICB9Ci0gIHZvaWQgU2V0Q29tcGFjdFBvaW50ZXIoaW50IGxldmVsLCBjb25zdCBJbnRlcm5hbEtl
eSYga2V5KSB7Ci0gICAgY29tcGFjdF9wb2ludGVyc18ucHVzaF9iYWNrKHN0ZDo6bWFrZV9wYWly
KGxldmVsLCBrZXkpKTsKLSAgfQotCi0gIC8vIEFkZCB0aGUgc3BlY2lmaWVkIGZpbGUgYXQgdGhl
IHNwZWNpZmllZCBudW1iZXIuCi0gIC8vIFJFUVVJUkVTOiBUaGlzIHZlcnNpb24gaGFzIG5vdCBi
ZWVuIHNhdmVkIChzZWUgVmVyc2lvblNldDo6U2F2ZVRvKQotICAvLyBSRVFVSVJFUzogInNtYWxs
ZXN0IiBhbmQgImxhcmdlc3QiIGFyZSBzbWFsbGVzdCBhbmQgbGFyZ2VzdCBrZXlzIGluIGZpbGUK
LSAgdm9pZCBBZGRGaWxlKGludCBsZXZlbCwgdWludDY0X3QgZmlsZSwKLSAgICAgICAgICAgICAg
IHVpbnQ2NF90IGZpbGVfc2l6ZSwKLSAgICAgICAgICAgICAgIGNvbnN0IEludGVybmFsS2V5JiBz
bWFsbGVzdCwKLSAgICAgICAgICAgICAgIGNvbnN0IEludGVybmFsS2V5JiBsYXJnZXN0KSB7Ci0g
ICAgRmlsZU1ldGFEYXRhIGY7Ci0gICAgZi5udW1iZXIgPSBmaWxlOwotICAgIGYuZmlsZV9zaXpl
ID0gZmlsZV9zaXplOwotICAgIGYuc21hbGxlc3QgPSBzbWFsbGVzdDsKLSAgICBmLmxhcmdlc3Qg
PSBsYXJnZXN0OwotICAgIG5ld19maWxlc18ucHVzaF9iYWNrKHN0ZDo6bWFrZV9wYWlyKGxldmVs
LCBmKSk7Ci0gIH0KLQotICAvLyBEZWxldGUgdGhlIHNwZWNpZmllZCAiZmlsZSIgZnJvbSB0aGUg
c3BlY2lmaWVkICJsZXZlbCIuCi0gIHZvaWQgRGVsZXRlRmlsZShpbnQgbGV2ZWwsIHVpbnQ2NF90
IGZpbGUpIHsKLSAgICBkZWxldGVkX2ZpbGVzXy5pbnNlcnQoc3RkOjptYWtlX3BhaXIobGV2ZWws
IGZpbGUpKTsKLSAgfQotCi0gIHZvaWQgRW5jb2RlVG8oc3RkOjpzdHJpbmcqIGRzdCkgY29uc3Q7
Ci0gIFN0YXR1cyBEZWNvZGVGcm9tKGNvbnN0IFNsaWNlJiBzcmMpOwotCi0gIHN0ZDo6c3RyaW5n
IERlYnVnU3RyaW5nKCkgY29uc3Q7Ci0KLSBwcml2YXRlOgotICBmcmllbmQgY2xhc3MgVmVyc2lv
blNldDsKLQotICB0eXBlZGVmIHN0ZDo6c2V0PCBzdGQ6OnBhaXI8aW50LCB1aW50NjRfdD4gPiBE
ZWxldGVkRmlsZVNldDsKLQotICBzdGQ6OnN0cmluZyBjb21wYXJhdG9yXzsKLSAgdWludDY0X3Qg
bG9nX251bWJlcl87Ci0gIHVpbnQ2NF90IHByZXZfbG9nX251bWJlcl87Ci0gIHVpbnQ2NF90IG5l
eHRfZmlsZV9udW1iZXJfOwotICBTZXF1ZW5jZU51bWJlciBsYXN0X3NlcXVlbmNlXzsKLSAgYm9v
bCBoYXNfY29tcGFyYXRvcl87Ci0gIGJvb2wgaGFzX2xvZ19udW1iZXJfOwotICBib29sIGhhc19w
cmV2X2xvZ19udW1iZXJfOwotICBib29sIGhhc19uZXh0X2ZpbGVfbnVtYmVyXzsKLSAgYm9vbCBo
YXNfbGFzdF9zZXF1ZW5jZV87Ci0KLSAgc3RkOjp2ZWN0b3I8IHN0ZDo6cGFpcjxpbnQsIEludGVy
bmFsS2V5PiA+IGNvbXBhY3RfcG9pbnRlcnNfOwotICBEZWxldGVkRmlsZVNldCBkZWxldGVkX2Zp
bGVzXzsKLSAgc3RkOjp2ZWN0b3I8IHN0ZDo6cGFpcjxpbnQsIEZpbGVNZXRhRGF0YT4gPiBuZXdf
ZmlsZXNfOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKLQotI2VuZGlmICAvLyBTVE9S
QUdFX0xFVkVMREJfREJfVkVSU0lPTl9FRElUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9sZXZlbGRiL2RiL3ZlcnNpb25fZWRpdF90ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkv
bGV2ZWxkYi9kYi92ZXJzaW9uX2VkaXRfdGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMjgwMzEwYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2Ri
L3ZlcnNpb25fZWRpdF90ZXN0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLy8g
Q29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUg
dGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgotCi0jaW5jbHVkZSAi
ZGIvdmVyc2lvbl9lZGl0LmgiCi0jaW5jbHVkZSAidXRpbC90ZXN0aGFybmVzcy5oIgotCi1uYW1l
c3BhY2UgbGV2ZWxkYiB7Ci0KLXN0YXRpYyB2b2lkIFRlc3RFbmNvZGVEZWNvZGUoY29uc3QgVmVy
c2lvbkVkaXQmIGVkaXQpIHsKLSAgc3RkOjpzdHJpbmcgZW5jb2RlZCwgZW5jb2RlZDI7Ci0gIGVk
aXQuRW5jb2RlVG8oJmVuY29kZWQpOwotICBWZXJzaW9uRWRpdCBwYXJzZWQ7Ci0gIFN0YXR1cyBz
ID0gcGFyc2VkLkRlY29kZUZyb20oZW5jb2RlZCk7Ci0gIEFTU0VSVF9UUlVFKHMub2soKSkgPDwg
cy5Ub1N0cmluZygpOwotICBwYXJzZWQuRW5jb2RlVG8oJmVuY29kZWQyKTsKLSAgQVNTRVJUX0VR
KGVuY29kZWQsIGVuY29kZWQyKTsKLX0KLQotY2xhc3MgVmVyc2lvbkVkaXRUZXN0IHsgfTsKLQot
VEVTVChWZXJzaW9uRWRpdFRlc3QsIEVuY29kZURlY29kZSkgewotICBzdGF0aWMgY29uc3QgdWlu
dDY0X3Qga0JpZyA9IDF1bGwgPDwgNTA7Ci0KLSAgVmVyc2lvbkVkaXQgZWRpdDsKLSAgZm9yIChp
bnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKLSAgICBUZXN0RW5jb2RlRGVjb2RlKGVkaXQpOwotICAg
IGVkaXQuQWRkRmlsZSgzLCBrQmlnICsgMzAwICsgaSwga0JpZyArIDQwMCArIGksCi0gICAgICAg
ICAgICAgICAgIEludGVybmFsS2V5KCJmb28iLCBrQmlnICsgNTAwICsgaSwga1R5cGVWYWx1ZSks
Ci0gICAgICAgICAgICAgICAgIEludGVybmFsS2V5KCJ6b28iLCBrQmlnICsgNjAwICsgaSwga1R5
cGVEZWxldGlvbikpOwotICAgIGVkaXQuRGVsZXRlRmlsZSg0LCBrQmlnICsgNzAwICsgaSk7Ci0g
ICAgZWRpdC5TZXRDb21wYWN0UG9pbnRlcihpLCBJbnRlcm5hbEtleSgieCIsIGtCaWcgKyA5MDAg
KyBpLCBrVHlwZVZhbHVlKSk7Ci0gIH0KLQotICBlZGl0LlNldENvbXBhcmF0b3JOYW1lKCJmb28i
KTsKLSAgZWRpdC5TZXRMb2dOdW1iZXIoa0JpZyArIDEwMCk7Ci0gIGVkaXQuU2V0TmV4dEZpbGUo
a0JpZyArIDIwMCk7Ci0gIGVkaXQuU2V0TGFzdFNlcXVlbmNlKGtCaWcgKyAxMDAwKTsKLSAgVGVz
dEVuY29kZURlY29kZShlZGl0KTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKLQotaW50
IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7Ci0gIHJldHVybiBsZXZlbGRiOjp0ZXN0OjpS
dW5BbGxUZXN0cygpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9k
Yi92ZXJzaW9uX3NldC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvdmVyc2lvbl9z
ZXQuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkMGE1ZGUuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi92ZXJzaW9uX3NldC5jYworKysgL2Rldi9u
dWxsCkBAIC0xLDE0MzggKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERC
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2Yg
Y29udHJpYnV0b3JzLgotCi0jaW5jbHVkZSAiZGIvdmVyc2lvbl9zZXQuaCIKLQotI2luY2x1ZGUg
PGFsZ29yaXRobT4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgImRiL2ZpbGVuYW1lLmgi
Ci0jaW5jbHVkZSAiZGIvbG9nX3JlYWRlci5oIgotI2luY2x1ZGUgImRiL2xvZ193cml0ZXIuaCIK
LSNpbmNsdWRlICJkYi9tZW10YWJsZS5oIgotI2luY2x1ZGUgImRiL3RhYmxlX2NhY2hlLmgiCi0j
aW5jbHVkZSAibGV2ZWxkYi9lbnYuaCIKLSNpbmNsdWRlICJsZXZlbGRiL3RhYmxlX2J1aWxkZXIu
aCIKLSNpbmNsdWRlICJ0YWJsZS9tZXJnZXIuaCIKLSNpbmNsdWRlICJ0YWJsZS90d29fbGV2ZWxf
aXRlcmF0b3IuaCIKLSNpbmNsdWRlICJ1dGlsL2NvZGluZy5oIgotI2luY2x1ZGUgInV0aWwvbG9n
Z2luZy5oIgotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7Ci0KLXN0YXRpYyBjb25zdCBpbnQga1Rhcmdl
dEZpbGVTaXplID0gMiAqIDEwNDg1NzY7Ci0KLS8vIE1heGltdW0gYnl0ZXMgb2Ygb3ZlcmxhcHMg
aW4gZ3JhbmRwYXJlbnQgKGkuZS4sIGxldmVsKzIpIGJlZm9yZSB3ZQotLy8gc3RvcCBidWlsZGlu
ZyBhIHNpbmdsZSBmaWxlIGluIGEgbGV2ZWwtPmxldmVsKzEgY29tcGFjdGlvbi4KLXN0YXRpYyBj
b25zdCBpbnQ2NF90IGtNYXhHcmFuZFBhcmVudE92ZXJsYXBCeXRlcyA9IDEwICoga1RhcmdldEZp
bGVTaXplOwotCi0vLyBNYXhpbXVtIG51bWJlciBvZiBieXRlcyBpbiBhbGwgY29tcGFjdGVkIGZp
bGVzLiAgV2UgYXZvaWQgZXhwYW5kaW5nCi0vLyB0aGUgbG93ZXIgbGV2ZWwgZmlsZSBzZXQgb2Yg
YSBjb21wYWN0aW9uIGlmIGl0IHdvdWxkIG1ha2UgdGhlCi0vLyB0b3RhbCBjb21wYWN0aW9uIGNv
dmVyIG1vcmUgdGhhbiB0aGlzIG1hbnkgYnl0ZXMuCi1zdGF0aWMgY29uc3QgaW50NjRfdCBrRXhw
YW5kZWRDb21wYWN0aW9uQnl0ZVNpemVMaW1pdCA9IDI1ICoga1RhcmdldEZpbGVTaXplOwotCi1z
dGF0aWMgZG91YmxlIE1heEJ5dGVzRm9yTGV2ZWwoaW50IGxldmVsKSB7Ci0gIC8vIE5vdGU6IHRo
ZSByZXN1bHQgZm9yIGxldmVsIHplcm8gaXMgbm90IHJlYWxseSB1c2VkIHNpbmNlIHdlIHNldAot
ICAvLyB0aGUgbGV2ZWwtMCBjb21wYWN0aW9uIHRocmVzaG9sZCBiYXNlZCBvbiBudW1iZXIgb2Yg
ZmlsZXMuCi0gIGRvdWJsZSByZXN1bHQgPSAxMCAqIDEwNDg1NzYuMDsgIC8vIFJlc3VsdCBmb3Ig
Ym90aCBsZXZlbC0wIGFuZCBsZXZlbC0xCi0gIHdoaWxlIChsZXZlbCA+IDEpIHsKLSAgICByZXN1
bHQgKj0gMTA7Ci0gICAgbGV2ZWwtLTsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0
aWMgdWludDY0X3QgTWF4RmlsZVNpemVGb3JMZXZlbChpbnQgbGV2ZWwpIHsKLSAgcmV0dXJuIGtU
YXJnZXRGaWxlU2l6ZTsgIC8vIFdlIGNvdWxkIHZhcnkgcGVyIGxldmVsIHRvIHJlZHVjZSBudW1i
ZXIgb2YgZmlsZXM/Ci19Ci0KLXN0YXRpYyBpbnQ2NF90IFRvdGFsRmlsZVNpemUoY29uc3Qgc3Rk
Ojp2ZWN0b3I8RmlsZU1ldGFEYXRhKj4mIGZpbGVzKSB7Ci0gIGludDY0X3Qgc3VtID0gMDsKLSAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlcy5zaXplKCk7IGkrKykgewotICAgIHN1bSArPSBm
aWxlc1tpXS0+ZmlsZV9zaXplOwotICB9Ci0gIHJldHVybiBzdW07Ci19Ci0KLW5hbWVzcGFjZSB7
Ci1zdGQ6OnN0cmluZyBJbnRTZXRUb1N0cmluZyhjb25zdCBzdGQ6OnNldDx1aW50NjRfdD4mIHMp
IHsKLSAgc3RkOjpzdHJpbmcgcmVzdWx0ID0gInsiOwotICBmb3IgKHN0ZDo6c2V0PHVpbnQ2NF90
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzLmJlZ2luKCk7Ci0gICAgICAgaXQgIT0gcy5lbmQoKTsK
LSAgICAgICArK2l0KSB7Ci0gICAgcmVzdWx0ICs9IChyZXN1bHQuc2l6ZSgpID4gMSkgPyAiLCIg
OiAiIjsKLSAgICByZXN1bHQgKz0gTnVtYmVyVG9TdHJpbmcoKml0KTsKLSAgfQotICByZXN1bHQg
Kz0gIn0iOwotICByZXR1cm4gcmVzdWx0OwotfQotfSAgLy8gbmFtZXNwYWNlCi0KLVZlcnNpb246
On5WZXJzaW9uKCkgewotICBhc3NlcnQocmVmc18gPT0gMCk7Ci0KLSAgLy8gUmVtb3ZlIGZyb20g
bGlua2VkIGxpc3QKLSAgcHJldl8tPm5leHRfID0gbmV4dF87Ci0gIG5leHRfLT5wcmV2XyA9IHBy
ZXZfOwotCi0gIC8vIERyb3AgcmVmZXJlbmNlcyB0byBmaWxlcwotICBmb3IgKGludCBsZXZlbCA9
IDA7IGxldmVsIDwgY29uZmlnOjprTnVtTGV2ZWxzOyBsZXZlbCsrKSB7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBmaWxlc19bbGV2ZWxdLnNpemUoKTsgaSsrKSB7Ci0gICAgICBGaWxlTWV0
YURhdGEqIGYgPSBmaWxlc19bbGV2ZWxdW2ldOwotICAgICAgYXNzZXJ0KGYtPnJlZnMgPiAwKTsK
LSAgICAgIGYtPnJlZnMtLTsKLSAgICAgIGlmIChmLT5yZWZzIDw9IDApIHsKLSAgICAgICAgZGVs
ZXRlIGY7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0KLWludCBGaW5kRmlsZShjb25zdCBJbnRl
cm5hbEtleUNvbXBhcmF0b3ImIGljbXAsCi0gICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8
RmlsZU1ldGFEYXRhKj4mIGZpbGVzLAotICAgICAgICAgICAgIGNvbnN0IFNsaWNlJiBrZXkpIHsK
LSAgdWludDMyX3QgbGVmdCA9IDA7Ci0gIHVpbnQzMl90IHJpZ2h0ID0gZmlsZXMuc2l6ZSgpOwot
ICB3aGlsZSAobGVmdCA8IHJpZ2h0KSB7Ci0gICAgdWludDMyX3QgbWlkID0gKGxlZnQgKyByaWdo
dCkgLyAyOwotICAgIGNvbnN0IEZpbGVNZXRhRGF0YSogZiA9IGZpbGVzW21pZF07Ci0gICAgaWYg
KGljbXAuSW50ZXJuYWxLZXlDb21wYXJhdG9yOjpDb21wYXJlKGYtPmxhcmdlc3QuRW5jb2RlKCks
IGtleSkgPCAwKSB7Ci0gICAgICAvLyBLZXkgYXQgIm1pZC5sYXJnZXN0IiBpcyA8ICJ0YXJnZXQi
LiAgVGhlcmVmb3JlIGFsbAotICAgICAgLy8gZmlsZXMgYXQgb3IgYmVmb3JlICJtaWQiIGFyZSB1
bmludGVyZXN0aW5nLgotICAgICAgbGVmdCA9IG1pZCArIDE7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IC8vIEtleSBhdCAibWlkLmxhcmdlc3QiIGlzID49ICJ0YXJnZXQiLiAgVGhlcmVmb3JlIGFsbCBm
aWxlcwotICAgICAgLy8gYWZ0ZXIgIm1pZCIgYXJlIHVuaW50ZXJlc3RpbmcuCi0gICAgICByaWdo
dCA9IG1pZDsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHJpZ2h0OwotfQotCi1zdGF0aWMgYm9vbCBB
ZnRlckZpbGUoY29uc3QgQ29tcGFyYXRvciogdWNtcCwKLSAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTbGljZSogdXNlcl9rZXksIGNvbnN0IEZpbGVNZXRhRGF0YSogZikgewotICAvLyBOVUxM
IHVzZXJfa2V5IG9jY3VycyBiZWZvcmUgYWxsIGtleXMgYW5kIGlzIHRoZXJlZm9yZSBuZXZlciBh
ZnRlciAqZgotICByZXR1cm4gKHVzZXJfa2V5ICE9IE5VTEwgJiYKLSAgICAgICAgICB1Y21wLT5D
b21wYXJlKCp1c2VyX2tleSwgZi0+bGFyZ2VzdC51c2VyX2tleSgpKSA+IDApOwotfQotCi1zdGF0
aWMgYm9vbCBCZWZvcmVGaWxlKGNvbnN0IENvbXBhcmF0b3IqIHVjbXAsCi0gICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFNsaWNlKiB1c2VyX2tleSwgY29uc3QgRmlsZU1ldGFEYXRhKiBmKSB7
Ci0gIC8vIE5VTEwgdXNlcl9rZXkgb2NjdXJzIGFmdGVyIGFsbCBrZXlzIGFuZCBpcyB0aGVyZWZv
cmUgbmV2ZXIgYmVmb3JlICpmCi0gIHJldHVybiAodXNlcl9rZXkgIT0gTlVMTCAmJgotICAgICAg
ICAgIHVjbXAtPkNvbXBhcmUoKnVzZXJfa2V5LCBmLT5zbWFsbGVzdC51c2VyX2tleSgpKSA8IDAp
OwotfQotCi1ib29sIFNvbWVGaWxlT3ZlcmxhcHNSYW5nZSgKLSAgICBjb25zdCBJbnRlcm5hbEtl
eUNvbXBhcmF0b3ImIGljbXAsCi0gICAgYm9vbCBkaXNqb2ludF9zb3J0ZWRfZmlsZXMsCi0gICAg
Y29uc3Qgc3RkOjp2ZWN0b3I8RmlsZU1ldGFEYXRhKj4mIGZpbGVzLAotICAgIGNvbnN0IFNsaWNl
KiBzbWFsbGVzdF91c2VyX2tleSwKLSAgICBjb25zdCBTbGljZSogbGFyZ2VzdF91c2VyX2tleSkg
ewotICBjb25zdCBDb21wYXJhdG9yKiB1Y21wID0gaWNtcC51c2VyX2NvbXBhcmF0b3IoKTsKLSAg
aWYgKCFkaXNqb2ludF9zb3J0ZWRfZmlsZXMpIHsKLSAgICAvLyBOZWVkIHRvIGNoZWNrIGFnYWlu
c3QgYWxsIGZpbGVzCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlcy5zaXplKCk7IGkr
KykgewotICAgICAgY29uc3QgRmlsZU1ldGFEYXRhKiBmID0gZmlsZXNbaV07Ci0gICAgICBpZiAo
QWZ0ZXJGaWxlKHVjbXAsIHNtYWxsZXN0X3VzZXJfa2V5LCBmKSB8fAotICAgICAgICAgIEJlZm9y
ZUZpbGUodWNtcCwgbGFyZ2VzdF91c2VyX2tleSwgZikpIHsKLSAgICAgICAgLy8gTm8gb3Zlcmxh
cAotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIHRydWU7ICAvLyBPdmVybGFwCi0gICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIEJpbmFyeSBzZWFyY2gg
b3ZlciBmaWxlIGxpc3QKLSAgdWludDMyX3QgaW5kZXggPSAwOwotICBpZiAoc21hbGxlc3RfdXNl
cl9rZXkgIT0gTlVMTCkgewotICAgIC8vIEZpbmQgdGhlIGVhcmxpZXN0IHBvc3NpYmxlIGludGVy
bmFsIGtleSBmb3Igc21hbGxlc3RfdXNlcl9rZXkKLSAgICBJbnRlcm5hbEtleSBzbWFsbCgqc21h
bGxlc3RfdXNlcl9rZXksIGtNYXhTZXF1ZW5jZU51bWJlcixrVmFsdWVUeXBlRm9yU2Vlayk7Ci0g
ICAgaW5kZXggPSBGaW5kRmlsZShpY21wLCBmaWxlcywgc21hbGwuRW5jb2RlKCkpOwotICB9Ci0K
LSAgaWYgKGluZGV4ID49IGZpbGVzLnNpemUoKSkgewotICAgIC8vIGJlZ2lubmluZyBvZiByYW5n
ZSBpcyBhZnRlciBhbGwgZmlsZXMsIHNvIG5vIG92ZXJsYXAuCi0gICAgcmV0dXJuIGZhbHNlOwot
ICB9Ci0KLSAgcmV0dXJuICFCZWZvcmVGaWxlKHVjbXAsIGxhcmdlc3RfdXNlcl9rZXksIGZpbGVz
W2luZGV4XSk7Ci19Ci0KLS8vIEFuIGludGVybmFsIGl0ZXJhdG9yLiAgRm9yIGEgZ2l2ZW4gdmVy
c2lvbi9sZXZlbCBwYWlyLCB5aWVsZHMKLS8vIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmaWxlcyBp
biB0aGUgbGV2ZWwuICBGb3IgYSBnaXZlbiBlbnRyeSwga2V5KCkKLS8vIGlzIHRoZSBsYXJnZXN0
IGtleSB0aGF0IG9jY3VycyBpbiB0aGUgZmlsZSwgYW5kIHZhbHVlKCkgaXMgYW4KLS8vIDE2LWJ5
dGUgdmFsdWUgY29udGFpbmluZyB0aGUgZmlsZSBudW1iZXIgYW5kIGZpbGUgc2l6ZSwgYm90aAot
Ly8gZW5jb2RlZCB1c2luZyBFbmNvZGVGaXhlZDY0LgotY2xhc3MgVmVyc2lvbjo6TGV2ZWxGaWxl
TnVtSXRlcmF0b3IgOiBwdWJsaWMgSXRlcmF0b3IgewotIHB1YmxpYzoKLSAgTGV2ZWxGaWxlTnVt
SXRlcmF0b3IoY29uc3QgSW50ZXJuYWxLZXlDb21wYXJhdG9yJiBpY21wLAotICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEqPiogZmxpc3QpCi0gICAg
ICA6IGljbXBfKGljbXApLAotICAgICAgICBmbGlzdF8oZmxpc3QpLAotICAgICAgICBpbmRleF8o
Zmxpc3QtPnNpemUoKSkgeyAgICAgICAgLy8gTWFya3MgYXMgaW52YWxpZAotICB9Ci0gIHZpcnR1
YWwgYm9vbCBWYWxpZCgpIGNvbnN0IHsKLSAgICByZXR1cm4gaW5kZXhfIDwgZmxpc3RfLT5zaXpl
KCk7Ci0gIH0KLSAgdmlydHVhbCB2b2lkIFNlZWsoY29uc3QgU2xpY2UmIHRhcmdldCkgewotICAg
IGluZGV4XyA9IEZpbmRGaWxlKGljbXBfLCAqZmxpc3RfLCB0YXJnZXQpOwotICB9Ci0gIHZpcnR1
YWwgdm9pZCBTZWVrVG9GaXJzdCgpIHsgaW5kZXhfID0gMDsgfQotICB2aXJ0dWFsIHZvaWQgU2Vl
a1RvTGFzdCgpIHsKLSAgICBpbmRleF8gPSBmbGlzdF8tPmVtcHR5KCkgPyAwIDogZmxpc3RfLT5z
aXplKCkgLSAxOwotICB9Ci0gIHZpcnR1YWwgdm9pZCBOZXh0KCkgewotICAgIGFzc2VydChWYWxp
ZCgpKTsKLSAgICBpbmRleF8rKzsKLSAgfQotICB2aXJ0dWFsIHZvaWQgUHJldigpIHsKLSAgICBh
c3NlcnQoVmFsaWQoKSk7Ci0gICAgaWYgKGluZGV4XyA9PSAwKSB7Ci0gICAgICBpbmRleF8gPSBm
bGlzdF8tPnNpemUoKTsgIC8vIE1hcmtzIGFzIGludmFsaWQKLSAgICB9IGVsc2UgewotICAgICAg
aW5kZXhfLS07Ci0gICAgfQotICB9Ci0gIFNsaWNlIGtleSgpIGNvbnN0IHsKLSAgICBhc3NlcnQo
VmFsaWQoKSk7Ci0gICAgcmV0dXJuICgqZmxpc3RfKVtpbmRleF9dLT5sYXJnZXN0LkVuY29kZSgp
OwotICB9Ci0gIFNsaWNlIHZhbHVlKCkgY29uc3QgewotICAgIGFzc2VydChWYWxpZCgpKTsKLSAg
ICBFbmNvZGVGaXhlZDY0KHZhbHVlX2J1Zl8sICgqZmxpc3RfKVtpbmRleF9dLT5udW1iZXIpOwot
ICAgIEVuY29kZUZpeGVkNjQodmFsdWVfYnVmXys4LCAoKmZsaXN0XylbaW5kZXhfXS0+ZmlsZV9z
aXplKTsKLSAgICByZXR1cm4gU2xpY2UodmFsdWVfYnVmXywgc2l6ZW9mKHZhbHVlX2J1Zl8pKTsK
LSAgfQotICB2aXJ0dWFsIFN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBTdGF0dXM6Ok9L
KCk7IH0KLSBwcml2YXRlOgotICBjb25zdCBJbnRlcm5hbEtleUNvbXBhcmF0b3IgaWNtcF87Ci0g
IGNvbnN0IHN0ZDo6dmVjdG9yPEZpbGVNZXRhRGF0YSo+KiBjb25zdCBmbGlzdF87Ci0gIHVpbnQz
Ml90IGluZGV4XzsKLQotICAvLyBCYWNraW5nIHN0b3JlIGZvciB2YWx1ZSgpLiAgSG9sZHMgdGhl
IGZpbGUgbnVtYmVyIGFuZCBzaXplLgotICBtdXRhYmxlIGNoYXIgdmFsdWVfYnVmX1sxNl07Ci19
OwotCi1zdGF0aWMgSXRlcmF0b3IqIEdldEZpbGVJdGVyYXRvcih2b2lkKiBhcmcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZWFkT3B0aW9ucyYgb3B0aW9ucywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNsaWNlJiBmaWxlX3ZhbHVlKSB7
Ci0gIFRhYmxlQ2FjaGUqIGNhY2hlID0gcmVpbnRlcnByZXRfY2FzdDxUYWJsZUNhY2hlKj4oYXJn
KTsKLSAgaWYgKGZpbGVfdmFsdWUuc2l6ZSgpICE9IDE2KSB7Ci0gICAgcmV0dXJuIE5ld0Vycm9y
SXRlcmF0b3IoCi0gICAgICAgIFN0YXR1czo6Q29ycnVwdGlvbigiRmlsZVJlYWRlciBpbnZva2Vk
IHdpdGggdW5leHBlY3RlZCB2YWx1ZSIpKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gY2FjaGUt
Pk5ld0l0ZXJhdG9yKG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNv
ZGVGaXhlZDY0KGZpbGVfdmFsdWUuZGF0YSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIERlY29kZUZpeGVkNjQoZmlsZV92YWx1ZS5kYXRhKCkgKyA4KSk7Ci0gIH0KLX0KLQotSXRl
cmF0b3IqIFZlcnNpb246Ok5ld0NvbmNhdGVuYXRpbmdJdGVyYXRvcihjb25zdCBSZWFkT3B0aW9u
cyYgb3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGxldmVsKSBjb25zdCB7Ci0gIHJldHVybiBOZXdUd29MZXZlbEl0ZXJhdG9yKAotICAgICAg
bmV3IExldmVsRmlsZU51bUl0ZXJhdG9yKHZzZXRfLT5pY21wXywgJmZpbGVzX1tsZXZlbF0pLAot
ICAgICAgJkdldEZpbGVJdGVyYXRvciwgdnNldF8tPnRhYmxlX2NhY2hlXywgb3B0aW9ucyk7Ci19
Ci0KLXZvaWQgVmVyc2lvbjo6QWRkSXRlcmF0b3JzKGNvbnN0IFJlYWRPcHRpb25zJiBvcHRpb25z
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8SXRlcmF0b3IqPiogaXRl
cnMpIHsKLSAgLy8gTWVyZ2UgYWxsIGxldmVsIHplcm8gZmlsZXMgdG9nZXRoZXIgc2luY2UgdGhl
eSBtYXkgb3ZlcmxhcAotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVzX1swXS5zaXplKCk7
IGkrKykgewotICAgIGl0ZXJzLT5wdXNoX2JhY2soCi0gICAgICAgIHZzZXRfLT50YWJsZV9jYWNo
ZV8tPk5ld0l0ZXJhdG9yKAotICAgICAgICAgICAgb3B0aW9ucywgZmlsZXNfWzBdW2ldLT5udW1i
ZXIsIGZpbGVzX1swXVtpXS0+ZmlsZV9zaXplKSk7Ci0gIH0KLQotICAvLyBGb3IgbGV2ZWxzID4g
MCwgd2UgY2FuIHVzZSBhIGNvbmNhdGVuYXRpbmcgaXRlcmF0b3IgdGhhdCBzZXF1ZW50aWFsbHkK
LSAgLy8gd2Fsa3MgdGhyb3VnaCB0aGUgbm9uLW92ZXJsYXBwaW5nIGZpbGVzIGluIHRoZSBsZXZl
bCwgb3BlbmluZyB0aGVtCi0gIC8vIGxhemlseS4KLSAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZl
bCA8IGNvbmZpZzo6a051bUxldmVsczsgbGV2ZWwrKykgewotICAgIGlmICghZmlsZXNfW2xldmVs
XS5lbXB0eSgpKSB7Ci0gICAgICBpdGVycy0+cHVzaF9iYWNrKE5ld0NvbmNhdGVuYXRpbmdJdGVy
YXRvcihvcHRpb25zLCBsZXZlbCkpOwotICAgIH0KLSAgfQotfQotCi0vLyBDYWxsYmFjayBmcm9t
IFRhYmxlQ2FjaGU6OkdldCgpCi1uYW1lc3BhY2UgewotZW51bSBTYXZlclN0YXRlIHsKLSAga05v
dEZvdW5kLAotICBrRm91bmQsCi0gIGtEZWxldGVkLAotICBrQ29ycnVwdCwKLX07Ci1zdHJ1Y3Qg
U2F2ZXIgewotICBTYXZlclN0YXRlIHN0YXRlOwotICBjb25zdCBDb21wYXJhdG9yKiB1Y21wOwot
ICBTbGljZSB1c2VyX2tleTsKLSAgc3RkOjpzdHJpbmcqIHZhbHVlOwotfTsKLX0KLXN0YXRpYyB2
b2lkIFNhdmVWYWx1ZSh2b2lkKiBhcmcsIGNvbnN0IFNsaWNlJiBpa2V5LCBjb25zdCBTbGljZSYg
dikgewotICBTYXZlciogcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2F2ZXIqPihhcmcpOwotICBQYXJz
ZWRJbnRlcm5hbEtleSBwYXJzZWRfa2V5OwotICBpZiAoIVBhcnNlSW50ZXJuYWxLZXkoaWtleSwg
JnBhcnNlZF9rZXkpKSB7Ci0gICAgcy0+c3RhdGUgPSBrQ29ycnVwdDsKLSAgfSBlbHNlIHsKLSAg
ICBpZiAocy0+dWNtcC0+Q29tcGFyZShwYXJzZWRfa2V5LnVzZXJfa2V5LCBzLT51c2VyX2tleSkg
PT0gMCkgewotICAgICAgcy0+c3RhdGUgPSAocGFyc2VkX2tleS50eXBlID09IGtUeXBlVmFsdWUp
ID8ga0ZvdW5kIDoga0RlbGV0ZWQ7Ci0gICAgICBpZiAocy0+c3RhdGUgPT0ga0ZvdW5kKSB7Ci0g
ICAgICAgIHMtPnZhbHVlLT5hc3NpZ24odi5kYXRhKCksIHYuc2l6ZSgpKTsKLSAgICAgIH0KLSAg
ICB9Ci0gIH0KLX0KLQotc3RhdGljIGJvb2wgTmV3ZXN0Rmlyc3QoRmlsZU1ldGFEYXRhKiBhLCBG
aWxlTWV0YURhdGEqIGIpIHsKLSAgcmV0dXJuIGEtPm51bWJlciA+IGItPm51bWJlcjsKLX0KLQot
U3RhdHVzIFZlcnNpb246OkdldChjb25zdCBSZWFkT3B0aW9ucyYgb3B0aW9ucywKLSAgICAgICAg
ICAgICAgICAgICAgY29uc3QgTG9va3VwS2V5JiBrLAotICAgICAgICAgICAgICAgICAgICBzdGQ6
OnN0cmluZyogdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgIEdldFN0YXRzKiBzdGF0cykgewot
ICBTbGljZSBpa2V5ID0gay5pbnRlcm5hbF9rZXkoKTsKLSAgU2xpY2UgdXNlcl9rZXkgPSBrLnVz
ZXJfa2V5KCk7Ci0gIGNvbnN0IENvbXBhcmF0b3IqIHVjbXAgPSB2c2V0Xy0+aWNtcF8udXNlcl9j
b21wYXJhdG9yKCk7Ci0gIFN0YXR1cyBzOwotCi0gIHN0YXRzLT5zZWVrX2ZpbGUgPSBOVUxMOwot
ICBzdGF0cy0+c2Vla19maWxlX2xldmVsID0gLTE7Ci0gIEZpbGVNZXRhRGF0YSogbGFzdF9maWxl
X3JlYWQgPSBOVUxMOwotICBpbnQgbGFzdF9maWxlX3JlYWRfbGV2ZWwgPSAtMTsKLQotICAvLyBX
ZSBjYW4gc2VhcmNoIGxldmVsLWJ5LWxldmVsIHNpbmNlIGVudHJpZXMgbmV2ZXIgaG9wIGFjcm9z
cwotICAvLyBsZXZlbHMuICBUaGVyZWZvcmUgd2UgYXJlIGd1YXJhbnRlZWQgdGhhdCBpZiB3ZSBm
aW5kIGRhdGEKLSAgLy8gaW4gYW4gc21hbGxlciBsZXZlbCwgbGF0ZXIgbGV2ZWxzIGFyZSBpcnJl
bGV2YW50LgotICBzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEqPiB0bXA7Ci0gIEZpbGVNZXRhRGF0
YSogdG1wMjsKLSAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGNvbmZpZzo6a051bUxldmVs
czsgbGV2ZWwrKykgewotICAgIHNpemVfdCBudW1fZmlsZXMgPSBmaWxlc19bbGV2ZWxdLnNpemUo
KTsKLSAgICBpZiAobnVtX2ZpbGVzID09IDApIGNvbnRpbnVlOwotCi0gICAgLy8gR2V0IHRoZSBs
aXN0IG9mIGZpbGVzIHRvIHNlYXJjaCBpbiB0aGlzIGxldmVsCi0gICAgRmlsZU1ldGFEYXRhKiBj
b25zdCogZmlsZXMgPSAmZmlsZXNfW2xldmVsXVswXTsKLSAgICBpZiAobGV2ZWwgPT0gMCkgewot
ICAgICAgLy8gTGV2ZWwtMCBmaWxlcyBtYXkgb3ZlcmxhcCBlYWNoIG90aGVyLiAgRmluZCBhbGwg
ZmlsZXMgdGhhdAotICAgICAgLy8gb3ZlcmxhcCB1c2VyX2tleSBhbmQgcHJvY2VzcyB0aGVtIGlu
IG9yZGVyIGZyb20gbmV3ZXN0IHRvIG9sZGVzdC4KLSAgICAgIHRtcC5yZXNlcnZlKG51bV9maWxl
cyk7Ci0gICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtX2ZpbGVzOyBpKyspIHsKLSAg
ICAgICAgRmlsZU1ldGFEYXRhKiBmID0gZmlsZXNbaV07Ci0gICAgICAgIGlmICh1Y21wLT5Db21w
YXJlKHVzZXJfa2V5LCBmLT5zbWFsbGVzdC51c2VyX2tleSgpKSA+PSAwICYmCi0gICAgICAgICAg
ICB1Y21wLT5Db21wYXJlKHVzZXJfa2V5LCBmLT5sYXJnZXN0LnVzZXJfa2V5KCkpIDw9IDApIHsK
LSAgICAgICAgICB0bXAucHVzaF9iYWNrKGYpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBp
ZiAodG1wLmVtcHR5KCkpIGNvbnRpbnVlOwotCi0gICAgICBzdGQ6OnNvcnQodG1wLmJlZ2luKCks
IHRtcC5lbmQoKSwgTmV3ZXN0Rmlyc3QpOwotICAgICAgZmlsZXMgPSAmdG1wWzBdOwotICAgICAg
bnVtX2ZpbGVzID0gdG1wLnNpemUoKTsKLSAgICB9IGVsc2UgewotICAgICAgLy8gQmluYXJ5IHNl
YXJjaCB0byBmaW5kIGVhcmxpZXN0IGluZGV4IHdob3NlIGxhcmdlc3Qga2V5ID49IGlrZXkuCi0g
ICAgICB1aW50MzJfdCBpbmRleCA9IEZpbmRGaWxlKHZzZXRfLT5pY21wXywgZmlsZXNfW2xldmVs
XSwgaWtleSk7Ci0gICAgICBpZiAoaW5kZXggPj0gbnVtX2ZpbGVzKSB7Ci0gICAgICAgIGZpbGVz
ID0gTlVMTDsKLSAgICAgICAgbnVtX2ZpbGVzID0gMDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IHRtcDIgPSBmaWxlc1tpbmRleF07Ci0gICAgICAgIGlmICh1Y21wLT5Db21wYXJlKHVzZXJfa2V5
LCB0bXAyLT5zbWFsbGVzdC51c2VyX2tleSgpKSA8IDApIHsKLSAgICAgICAgICAvLyBBbGwgb2Yg
InRtcDIiIGlzIHBhc3QgYW55IGRhdGEgZm9yIHVzZXJfa2V5Ci0gICAgICAgICAgZmlsZXMgPSBO
VUxMOwotICAgICAgICAgIG51bV9maWxlcyA9IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgZmlsZXMgPSAmdG1wMjsKLSAgICAgICAgICBudW1fZmlsZXMgPSAxOwotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bV9maWxlczsg
KytpKSB7Ci0gICAgICBpZiAobGFzdF9maWxlX3JlYWQgIT0gTlVMTCAmJiBzdGF0cy0+c2Vla19m
aWxlID09IE5VTEwpIHsKLSAgICAgICAgLy8gV2UgaGF2ZSBoYWQgbW9yZSB0aGFuIG9uZSBzZWVr
IGZvciB0aGlzIHJlYWQuICBDaGFyZ2UgdGhlIDFzdCBmaWxlLgotICAgICAgICBzdGF0cy0+c2Vl
a19maWxlID0gbGFzdF9maWxlX3JlYWQ7Ci0gICAgICAgIHN0YXRzLT5zZWVrX2ZpbGVfbGV2ZWwg
PSBsYXN0X2ZpbGVfcmVhZF9sZXZlbDsKLSAgICAgIH0KLQotICAgICAgRmlsZU1ldGFEYXRhKiBm
ID0gZmlsZXNbaV07Ci0gICAgICBsYXN0X2ZpbGVfcmVhZCA9IGY7Ci0gICAgICBsYXN0X2ZpbGVf
cmVhZF9sZXZlbCA9IGxldmVsOwotCi0gICAgICBTYXZlciBzYXZlcjsKLSAgICAgIHNhdmVyLnN0
YXRlID0ga05vdEZvdW5kOwotICAgICAgc2F2ZXIudWNtcCA9IHVjbXA7Ci0gICAgICBzYXZlci51
c2VyX2tleSA9IHVzZXJfa2V5OwotICAgICAgc2F2ZXIudmFsdWUgPSB2YWx1ZTsKLSAgICAgIHMg
PSB2c2V0Xy0+dGFibGVfY2FjaGVfLT5HZXQob3B0aW9ucywgZi0+bnVtYmVyLCBmLT5maWxlX3Np
emUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlrZXksICZzYXZlciwgU2F2
ZVZhbHVlKTsKLSAgICAgIGlmICghcy5vaygpKSB7Ci0gICAgICAgIHJldHVybiBzOwotICAgICAg
fQotICAgICAgc3dpdGNoIChzYXZlci5zdGF0ZSkgewotICAgICAgICBjYXNlIGtOb3RGb3VuZDoK
LSAgICAgICAgICBicmVhazsgICAgICAvLyBLZWVwIHNlYXJjaGluZyBpbiBvdGhlciBmaWxlcwot
ICAgICAgICBjYXNlIGtGb3VuZDoKLSAgICAgICAgICByZXR1cm4gczsKLSAgICAgICAgY2FzZSBr
RGVsZXRlZDoKLSAgICAgICAgICBzID0gU3RhdHVzOjpOb3RGb3VuZChTbGljZSgpKTsgIC8vIFVz
ZSBlbXB0eSBlcnJvciBtZXNzYWdlIGZvciBzcGVlZAotICAgICAgICAgIHJldHVybiBzOwotICAg
ICAgICBjYXNlIGtDb3JydXB0OgotICAgICAgICAgIHMgPSBTdGF0dXM6OkNvcnJ1cHRpb24oImNv
cnJ1cHRlZCBrZXkgZm9yICIsIHVzZXJfa2V5KTsKLSAgICAgICAgICByZXR1cm4gczsKLSAgICAg
IH0KLSAgICB9Ci0gIH0KLQotICByZXR1cm4gU3RhdHVzOjpOb3RGb3VuZChTbGljZSgpKTsgIC8v
IFVzZSBhbiBlbXB0eSBlcnJvciBtZXNzYWdlIGZvciBzcGVlZAotfQotCi1ib29sIFZlcnNpb246
OlVwZGF0ZVN0YXRzKGNvbnN0IEdldFN0YXRzJiBzdGF0cykgewotICBGaWxlTWV0YURhdGEqIGYg
PSBzdGF0cy5zZWVrX2ZpbGU7Ci0gIGlmIChmICE9IE5VTEwpIHsKLSAgICBmLT5hbGxvd2VkX3Nl
ZWtzLS07Ci0gICAgaWYgKGYtPmFsbG93ZWRfc2Vla3MgPD0gMCAmJiBmaWxlX3RvX2NvbXBhY3Rf
ID09IE5VTEwpIHsKLSAgICAgIGZpbGVfdG9fY29tcGFjdF8gPSBmOwotICAgICAgZmlsZV90b19j
b21wYWN0X2xldmVsXyA9IHN0YXRzLnNlZWtfZmlsZV9sZXZlbDsKLSAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgfQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgVmVyc2lvbjo6UmVmKCkg
ewotICArK3JlZnNfOwotfQotCi12b2lkIFZlcnNpb246OlVucmVmKCkgewotICBhc3NlcnQodGhp
cyAhPSAmdnNldF8tPmR1bW15X3ZlcnNpb25zXyk7Ci0gIGFzc2VydChyZWZzXyA+PSAxKTsKLSAg
LS1yZWZzXzsKLSAgaWYgKHJlZnNfID09IDApIHsKLSAgICBkZWxldGUgdGhpczsKLSAgfQotfQot
Ci1ib29sIFZlcnNpb246Ok92ZXJsYXBJbkxldmVsKGludCBsZXZlbCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU2xpY2UqIHNtYWxsZXN0X3VzZXJfa2V5LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTbGljZSogbGFyZ2VzdF91c2VyX2tleSkgewotICBy
ZXR1cm4gU29tZUZpbGVPdmVybGFwc1JhbmdlKHZzZXRfLT5pY21wXywgKGxldmVsID4gMCksIGZp
bGVzX1tsZXZlbF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21hbGxlc3RfdXNl
cl9rZXksIGxhcmdlc3RfdXNlcl9rZXkpOwotfQotCi1pbnQgVmVyc2lvbjo6UGlja0xldmVsRm9y
TWVtVGFibGVPdXRwdXQoCi0gICAgY29uc3QgU2xpY2UmIHNtYWxsZXN0X3VzZXJfa2V5LAotICAg
IGNvbnN0IFNsaWNlJiBsYXJnZXN0X3VzZXJfa2V5KSB7Ci0gIGludCBsZXZlbCA9IDA7Ci0gIGlm
ICghT3ZlcmxhcEluTGV2ZWwoMCwgJnNtYWxsZXN0X3VzZXJfa2V5LCAmbGFyZ2VzdF91c2VyX2tl
eSkpIHsKLSAgICAvLyBQdXNoIHRvIG5leHQgbGV2ZWwgaWYgdGhlcmUgaXMgbm8gb3ZlcmxhcCBp
biBuZXh0IGxldmVsLAotICAgIC8vIGFuZCB0aGUgI2J5dGVzIG92ZXJsYXBwaW5nIGluIHRoZSBs
ZXZlbCBhZnRlciB0aGF0IGFyZSBsaW1pdGVkLgotICAgIEludGVybmFsS2V5IHN0YXJ0KHNtYWxs
ZXN0X3VzZXJfa2V5LCBrTWF4U2VxdWVuY2VOdW1iZXIsIGtWYWx1ZVR5cGVGb3JTZWVrKTsKLSAg
ICBJbnRlcm5hbEtleSBsaW1pdChsYXJnZXN0X3VzZXJfa2V5LCAwLCBzdGF0aWNfY2FzdDxWYWx1
ZVR5cGU+KDApKTsKLSAgICBzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEqPiBvdmVybGFwczsKLSAg
ICB3aGlsZSAobGV2ZWwgPCBjb25maWc6OmtNYXhNZW1Db21wYWN0TGV2ZWwpIHsKLSAgICAgIGlm
IChPdmVybGFwSW5MZXZlbChsZXZlbCArIDEsICZzbWFsbGVzdF91c2VyX2tleSwgJmxhcmdlc3Rf
dXNlcl9rZXkpKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgR2V0T3ZlcmxhcHBp
bmdJbnB1dHMobGV2ZWwgKyAyLCAmc3RhcnQsICZsaW1pdCwgJm92ZXJsYXBzKTsKLSAgICAgIGNv
bnN0IGludDY0X3Qgc3VtID0gVG90YWxGaWxlU2l6ZShvdmVybGFwcyk7Ci0gICAgICBpZiAoc3Vt
ID4ga01heEdyYW5kUGFyZW50T3ZlcmxhcEJ5dGVzKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
fQotICAgICAgbGV2ZWwrKzsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIGxldmVsOwotfQotCi0vLyBT
dG9yZSBpbiAiKmlucHV0cyIgYWxsIGZpbGVzIGluICJsZXZlbCIgdGhhdCBvdmVybGFwIFtiZWdp
bixlbmRdCi12b2lkIFZlcnNpb246OkdldE92ZXJsYXBwaW5nSW5wdXRzKAotICAgIGludCBsZXZl
bCwKLSAgICBjb25zdCBJbnRlcm5hbEtleSogYmVnaW4sCi0gICAgY29uc3QgSW50ZXJuYWxLZXkq
IGVuZCwKLSAgICBzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEqPiogaW5wdXRzKSB7Ci0gIGlucHV0
cy0+Y2xlYXIoKTsKLSAgU2xpY2UgdXNlcl9iZWdpbiwgdXNlcl9lbmQ7Ci0gIGlmIChiZWdpbiAh
PSBOVUxMKSB7Ci0gICAgdXNlcl9iZWdpbiA9IGJlZ2luLT51c2VyX2tleSgpOwotICB9Ci0gIGlm
IChlbmQgIT0gTlVMTCkgewotICAgIHVzZXJfZW5kID0gZW5kLT51c2VyX2tleSgpOwotICB9Ci0g
IGNvbnN0IENvbXBhcmF0b3IqIHVzZXJfY21wID0gdnNldF8tPmljbXBfLnVzZXJfY29tcGFyYXRv
cigpOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVzX1tsZXZlbF0uc2l6ZSgpOyApIHsK
LSAgICBGaWxlTWV0YURhdGEqIGYgPSBmaWxlc19bbGV2ZWxdW2krK107Ci0gICAgY29uc3QgU2xp
Y2UgZmlsZV9zdGFydCA9IGYtPnNtYWxsZXN0LnVzZXJfa2V5KCk7Ci0gICAgY29uc3QgU2xpY2Ug
ZmlsZV9saW1pdCA9IGYtPmxhcmdlc3QudXNlcl9rZXkoKTsKLSAgICBpZiAoYmVnaW4gIT0gTlVM
TCAmJiB1c2VyX2NtcC0+Q29tcGFyZShmaWxlX2xpbWl0LCB1c2VyX2JlZ2luKSA8IDApIHsKLSAg
ICAgIC8vICJmIiBpcyBjb21wbGV0ZWx5IGJlZm9yZSBzcGVjaWZpZWQgcmFuZ2U7IHNraXAgaXQK
LSAgICB9IGVsc2UgaWYgKGVuZCAhPSBOVUxMICYmIHVzZXJfY21wLT5Db21wYXJlKGZpbGVfc3Rh
cnQsIHVzZXJfZW5kKSA+IDApIHsKLSAgICAgIC8vICJmIiBpcyBjb21wbGV0ZWx5IGFmdGVyIHNw
ZWNpZmllZCByYW5nZTsgc2tpcCBpdAotICAgIH0gZWxzZSB7Ci0gICAgICBpbnB1dHMtPnB1c2hf
YmFjayhmKTsKLSAgICAgIGlmIChsZXZlbCA9PSAwKSB7Ci0gICAgICAgIC8vIExldmVsLTAgZmls
ZXMgbWF5IG92ZXJsYXAgZWFjaCBvdGhlci4gIFNvIGNoZWNrIGlmIHRoZSBuZXdseQotICAgICAg
ICAvLyBhZGRlZCBmaWxlIGhhcyBleHBhbmRlZCB0aGUgcmFuZ2UuICBJZiBzbywgcmVzdGFydCBz
ZWFyY2guCi0gICAgICAgIGlmIChiZWdpbiAhPSBOVUxMICYmIHVzZXJfY21wLT5Db21wYXJlKGZp
bGVfc3RhcnQsIHVzZXJfYmVnaW4pIDwgMCkgewotICAgICAgICAgIHVzZXJfYmVnaW4gPSBmaWxl
X3N0YXJ0OwotICAgICAgICAgIGlucHV0cy0+Y2xlYXIoKTsKLSAgICAgICAgICBpID0gMDsKLSAg
ICAgICAgfSBlbHNlIGlmIChlbmQgIT0gTlVMTCAmJiB1c2VyX2NtcC0+Q29tcGFyZShmaWxlX2xp
bWl0LCB1c2VyX2VuZCkgPiAwKSB7Ci0gICAgICAgICAgdXNlcl9lbmQgPSBmaWxlX2xpbWl0Owot
ICAgICAgICAgIGlucHV0cy0+Y2xlYXIoKTsKLSAgICAgICAgICBpID0gMDsKLSAgICAgICAgfQot
ICAgICAgfQotICAgIH0KLSAgfQotfQotCi1zdGQ6OnN0cmluZyBWZXJzaW9uOjpEZWJ1Z1N0cmlu
ZygpIGNvbnN0IHsKLSAgc3RkOjpzdHJpbmcgcjsKLSAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZl
bCA8IGNvbmZpZzo6a051bUxldmVsczsgbGV2ZWwrKykgewotICAgIC8vIEUuZy4sCi0gICAgLy8g
ICAtLS0gbGV2ZWwgMSAtLS0KLSAgICAvLyAgIDE3OjEyM1snYScgLi4gJ2QnXQotICAgIC8vICAg
MjA6NDNbJ2UnIC4uICdnJ10KLSAgICByLmFwcGVuZCgiLS0tIGxldmVsICIpOwotICAgIEFwcGVu
ZE51bWJlclRvKCZyLCBsZXZlbCk7Ci0gICAgci5hcHBlbmQoIiAtLS1cbiIpOwotICAgIGNvbnN0
IHN0ZDo6dmVjdG9yPEZpbGVNZXRhRGF0YSo+JiBmaWxlcyA9IGZpbGVzX1tsZXZlbF07Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlcy5zaXplKCk7IGkrKykgewotICAgICAgci5wdXNo
X2JhY2soJyAnKTsKLSAgICAgIEFwcGVuZE51bWJlclRvKCZyLCBmaWxlc1tpXS0+bnVtYmVyKTsK
LSAgICAgIHIucHVzaF9iYWNrKCc6Jyk7Ci0gICAgICBBcHBlbmROdW1iZXJUbygmciwgZmlsZXNb
aV0tPmZpbGVfc2l6ZSk7Ci0gICAgICByLmFwcGVuZCgiWyIpOwotICAgICAgci5hcHBlbmQoZmls
ZXNbaV0tPnNtYWxsZXN0LkRlYnVnU3RyaW5nKCkpOwotICAgICAgci5hcHBlbmQoIiAuLiAiKTsK
LSAgICAgIHIuYXBwZW5kKGZpbGVzW2ldLT5sYXJnZXN0LkRlYnVnU3RyaW5nKCkpOwotICAgICAg
ci5hcHBlbmQoIl1cbiIpOwotICAgIH0KLSAgfQotICByZXR1cm4gcjsKLX0KLQotLy8gQSBoZWxw
ZXIgY2xhc3Mgc28gd2UgY2FuIGVmZmljaWVudGx5IGFwcGx5IGEgd2hvbGUgc2VxdWVuY2UKLS8v
IG9mIGVkaXRzIHRvIGEgcGFydGljdWxhciBzdGF0ZSB3aXRob3V0IGNyZWF0aW5nIGludGVybWVk
aWF0ZQotLy8gVmVyc2lvbnMgdGhhdCBjb250YWluIGZ1bGwgY29waWVzIG9mIHRoZSBpbnRlcm1l
ZGlhdGUgc3RhdGUuCi1jbGFzcyBWZXJzaW9uU2V0OjpCdWlsZGVyIHsKLSBwcml2YXRlOgotICAv
LyBIZWxwZXIgdG8gc29ydCBieSB2LT5maWxlc19bZmlsZV9udW1iZXJdLnNtYWxsZXN0Ci0gIHN0
cnVjdCBCeVNtYWxsZXN0S2V5IHsKLSAgICBjb25zdCBJbnRlcm5hbEtleUNvbXBhcmF0b3IqIGlu
dGVybmFsX2NvbXBhcmF0b3I7Ci0KLSAgICBib29sIG9wZXJhdG9yKCkoRmlsZU1ldGFEYXRhKiBm
MSwgRmlsZU1ldGFEYXRhKiBmMikgY29uc3QgewotICAgICAgaW50IHIgPSBpbnRlcm5hbF9jb21w
YXJhdG9yLT5Db21wYXJlKGYxLT5zbWFsbGVzdCwgZjItPnNtYWxsZXN0KTsKLSAgICAgIGlmIChy
ICE9IDApIHsKLSAgICAgICAgcmV0dXJuIChyIDwgMCk7Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICAvLyBCcmVhayB0aWVzIGJ5IGZpbGUgbnVtYmVyCi0gICAgICAgIHJldHVybiAoZjEtPm51bWJl
ciA8IGYyLT5udW1iZXIpOwotICAgICAgfQotICAgIH0KLSAgfTsKLQotICB0eXBlZGVmIHN0ZDo6
c2V0PEZpbGVNZXRhRGF0YSosIEJ5U21hbGxlc3RLZXk+IEZpbGVTZXQ7Ci0gIHN0cnVjdCBMZXZl
bFN0YXRlIHsKLSAgICBzdGQ6OnNldDx1aW50NjRfdD4gZGVsZXRlZF9maWxlczsKLSAgICBGaWxl
U2V0KiBhZGRlZF9maWxlczsKLSAgfTsKLQotICBWZXJzaW9uU2V0KiB2c2V0XzsKLSAgVmVyc2lv
biogYmFzZV87Ci0gIExldmVsU3RhdGUgbGV2ZWxzX1tjb25maWc6OmtOdW1MZXZlbHNdOwotCi0g
cHVibGljOgotICAvLyBJbml0aWFsaXplIGEgYnVpbGRlciB3aXRoIHRoZSBmaWxlcyBmcm9tICpi
YXNlIGFuZCBvdGhlciBpbmZvIGZyb20gKnZzZXQKLSAgQnVpbGRlcihWZXJzaW9uU2V0KiB2c2V0
LCBWZXJzaW9uKiBiYXNlKQotICAgICAgOiB2c2V0Xyh2c2V0KSwKLSAgICAgICAgYmFzZV8oYmFz
ZSkgewotICAgIGJhc2VfLT5SZWYoKTsKLSAgICBCeVNtYWxsZXN0S2V5IGNtcDsKLSAgICBjbXAu
aW50ZXJuYWxfY29tcGFyYXRvciA9ICZ2c2V0Xy0+aWNtcF87Ci0gICAgZm9yIChpbnQgbGV2ZWwg
PSAwOyBsZXZlbCA8IGNvbmZpZzo6a051bUxldmVsczsgbGV2ZWwrKykgewotICAgICAgbGV2ZWxz
X1tsZXZlbF0uYWRkZWRfZmlsZXMgPSBuZXcgRmlsZVNldChjbXApOwotICAgIH0KLSAgfQotCi0g
IH5CdWlsZGVyKCkgewotICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBjb25maWc6OmtO
dW1MZXZlbHM7IGxldmVsKyspIHsKLSAgICAgIGNvbnN0IEZpbGVTZXQqIGFkZGVkID0gbGV2ZWxz
X1tsZXZlbF0uYWRkZWRfZmlsZXM7Ci0gICAgICBzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEqPiB0
b191bnJlZjsKLSAgICAgIHRvX3VucmVmLnJlc2VydmUoYWRkZWQtPnNpemUoKSk7Ci0gICAgICBm
b3IgKEZpbGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWRkZWQtPmJlZ2luKCk7Ci0gICAgICAg
ICAgaXQgIT0gYWRkZWQtPmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIHRvX3VucmVmLnB1c2hfYmFj
aygqaXQpOwotICAgICAgfQotICAgICAgZGVsZXRlIGFkZGVkOwotICAgICAgZm9yICh1aW50MzJf
dCBpID0gMDsgaSA8IHRvX3VucmVmLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIEZpbGVNZXRhRGF0
YSogZiA9IHRvX3VucmVmW2ldOwotICAgICAgICBmLT5yZWZzLS07Ci0gICAgICAgIGlmIChmLT5y
ZWZzIDw9IDApIHsKLSAgICAgICAgICBkZWxldGUgZjsKLSAgICAgICAgfQotICAgICAgfQotICAg
IH0KLSAgICBiYXNlXy0+VW5yZWYoKTsKLSAgfQotCi0gIC8vIEFwcGx5IGFsbCBvZiB0aGUgZWRp
dHMgaW4gKmVkaXQgdG8gdGhlIGN1cnJlbnQgc3RhdGUuCi0gIHZvaWQgQXBwbHkoVmVyc2lvbkVk
aXQqIGVkaXQpIHsKLSAgICAvLyBVcGRhdGUgY29tcGFjdGlvbiBwb2ludGVycwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZWRpdC0+Y29tcGFjdF9wb2ludGVyc18uc2l6ZSgpOyBpKyspIHsK
LSAgICAgIGNvbnN0IGludCBsZXZlbCA9IGVkaXQtPmNvbXBhY3RfcG9pbnRlcnNfW2ldLmZpcnN0
OwotICAgICAgdnNldF8tPmNvbXBhY3RfcG9pbnRlcl9bbGV2ZWxdID0KLSAgICAgICAgICBlZGl0
LT5jb21wYWN0X3BvaW50ZXJzX1tpXS5zZWNvbmQuRW5jb2RlKCkuVG9TdHJpbmcoKTsKLSAgICB9
Ci0KLSAgICAvLyBEZWxldGUgZmlsZXMKLSAgICBjb25zdCBWZXJzaW9uRWRpdDo6RGVsZXRlZEZp
bGVTZXQmIGRlbCA9IGVkaXQtPmRlbGV0ZWRfZmlsZXNfOwotICAgIGZvciAoVmVyc2lvbkVkaXQ6
OkRlbGV0ZWRGaWxlU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZGVsLmJlZ2luKCk7Ci0gICAg
ICAgICBpdGVyICE9IGRlbC5lbmQoKTsKLSAgICAgICAgICsraXRlcikgewotICAgICAgY29uc3Qg
aW50IGxldmVsID0gaXRlci0+Zmlyc3Q7Ci0gICAgICBjb25zdCB1aW50NjRfdCBudW1iZXIgPSBp
dGVyLT5zZWNvbmQ7Ci0gICAgICBsZXZlbHNfW2xldmVsXS5kZWxldGVkX2ZpbGVzLmluc2VydChu
dW1iZXIpOwotICAgIH0KLQotICAgIC8vIEFkZCBuZXcgZmlsZXMKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGVkaXQtPm5ld19maWxlc18uc2l6ZSgpOyBpKyspIHsKLSAgICAgIGNvbnN0IGlu
dCBsZXZlbCA9IGVkaXQtPm5ld19maWxlc19baV0uZmlyc3Q7Ci0gICAgICBGaWxlTWV0YURhdGEq
IGYgPSBuZXcgRmlsZU1ldGFEYXRhKGVkaXQtPm5ld19maWxlc19baV0uc2Vjb25kKTsKLSAgICAg
IGYtPnJlZnMgPSAxOwotCi0gICAgICAvLyBXZSBhcnJhbmdlIHRvIGF1dG9tYXRpY2FsbHkgY29t
cGFjdCB0aGlzIGZpbGUgYWZ0ZXIKLSAgICAgIC8vIGEgY2VydGFpbiBudW1iZXIgb2Ygc2Vla3Mu
ICBMZXQncyBhc3N1bWU6Ci0gICAgICAvLyAgICgxKSBPbmUgc2VlayBjb3N0cyAxMG1zCi0gICAg
ICAvLyAgICgyKSBXcml0aW5nIG9yIHJlYWRpbmcgMU1CIGNvc3RzIDEwbXMgKDEwME1CL3MpCi0g
ICAgICAvLyAgICgzKSBBIGNvbXBhY3Rpb24gb2YgMU1CIGRvZXMgMjVNQiBvZiBJTzoKLSAgICAg
IC8vICAgICAgICAgMU1CIHJlYWQgZnJvbSB0aGlzIGxldmVsCi0gICAgICAvLyAgICAgICAgIDEw
LTEyTUIgcmVhZCBmcm9tIG5leHQgbGV2ZWwgKGJvdW5kYXJpZXMgbWF5IGJlIG1pc2FsaWduZWQp
Ci0gICAgICAvLyAgICAgICAgIDEwLTEyTUIgd3JpdHRlbiB0byBuZXh0IGxldmVsCi0gICAgICAv
LyBUaGlzIGltcGxpZXMgdGhhdCAyNSBzZWVrcyBjb3N0IHRoZSBzYW1lIGFzIHRoZSBjb21wYWN0
aW9uCi0gICAgICAvLyBvZiAxTUIgb2YgZGF0YS4gIEkuZS4sIG9uZSBzZWVrIGNvc3RzIGFwcHJv
eGltYXRlbHkgdGhlCi0gICAgICAvLyBzYW1lIGFzIHRoZSBjb21wYWN0aW9uIG9mIDQwS0Igb2Yg
ZGF0YS4gIFdlIGFyZSBhIGxpdHRsZQotICAgICAgLy8gY29uc2VydmF0aXZlIGFuZCBhbGxvdyBh
cHByb3hpbWF0ZWx5IG9uZSBzZWVrIGZvciBldmVyeSAxNktCCi0gICAgICAvLyBvZiBkYXRhIGJl
Zm9yZSB0cmlnZ2VyaW5nIGEgY29tcGFjdGlvbi4KLSAgICAgIGYtPmFsbG93ZWRfc2Vla3MgPSAo
Zi0+ZmlsZV9zaXplIC8gMTYzODQpOwotICAgICAgaWYgKGYtPmFsbG93ZWRfc2Vla3MgPCAxMDAp
IGYtPmFsbG93ZWRfc2Vla3MgPSAxMDA7Ci0KLSAgICAgIGxldmVsc19bbGV2ZWxdLmRlbGV0ZWRf
ZmlsZXMuZXJhc2UoZi0+bnVtYmVyKTsKLSAgICAgIGxldmVsc19bbGV2ZWxdLmFkZGVkX2ZpbGVz
LT5pbnNlcnQoZik7Ci0gICAgfQotICB9Ci0KLSAgLy8gU2F2ZSB0aGUgY3VycmVudCBzdGF0ZSBp
biAqdi4KLSAgdm9pZCBTYXZlVG8oVmVyc2lvbiogdikgewotICAgIEJ5U21hbGxlc3RLZXkgY21w
OwotICAgIGNtcC5pbnRlcm5hbF9jb21wYXJhdG9yID0gJnZzZXRfLT5pY21wXzsKLSAgICBmb3Ig
KGludCBsZXZlbCA9IDA7IGxldmVsIDwgY29uZmlnOjprTnVtTGV2ZWxzOyBsZXZlbCsrKSB7Ci0g
ICAgICAvLyBNZXJnZSB0aGUgc2V0IG9mIGFkZGVkIGZpbGVzIHdpdGggdGhlIHNldCBvZiBwcmUt
ZXhpc3RpbmcgZmlsZXMuCi0gICAgICAvLyBEcm9wIGFueSBkZWxldGVkIGZpbGVzLiAgU3RvcmUg
dGhlIHJlc3VsdCBpbiAqdi4KLSAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEZpbGVNZXRhRGF0YSo+
JiBiYXNlX2ZpbGVzID0gYmFzZV8tPmZpbGVzX1tsZXZlbF07Ci0gICAgICBzdGQ6OnZlY3RvcjxG
aWxlTWV0YURhdGEqPjo6Y29uc3RfaXRlcmF0b3IgYmFzZV9pdGVyID0gYmFzZV9maWxlcy5iZWdp
bigpOwotICAgICAgc3RkOjp2ZWN0b3I8RmlsZU1ldGFEYXRhKj46OmNvbnN0X2l0ZXJhdG9yIGJh
c2VfZW5kID0gYmFzZV9maWxlcy5lbmQoKTsKLSAgICAgIGNvbnN0IEZpbGVTZXQqIGFkZGVkID0g
bGV2ZWxzX1tsZXZlbF0uYWRkZWRfZmlsZXM7Ci0gICAgICB2LT5maWxlc19bbGV2ZWxdLnJlc2Vy
dmUoYmFzZV9maWxlcy5zaXplKCkgKyBhZGRlZC0+c2l6ZSgpKTsKLSAgICAgIGZvciAoRmlsZVNl
dDo6Y29uc3RfaXRlcmF0b3IgYWRkZWRfaXRlciA9IGFkZGVkLT5iZWdpbigpOwotICAgICAgICAg
ICBhZGRlZF9pdGVyICE9IGFkZGVkLT5lbmQoKTsKLSAgICAgICAgICAgKythZGRlZF9pdGVyKSB7
Ci0gICAgICAgIC8vIEFkZCBhbGwgc21hbGxlciBmaWxlcyBsaXN0ZWQgaW4gYmFzZV8KLSAgICAg
ICAgZm9yIChzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEqPjo6Y29uc3RfaXRlcmF0b3IgYnBvcwot
ICAgICAgICAgICAgICAgICA9IHN0ZDo6dXBwZXJfYm91bmQoYmFzZV9pdGVyLCBiYXNlX2VuZCwg
KmFkZGVkX2l0ZXIsIGNtcCk7Ci0gICAgICAgICAgICAgYmFzZV9pdGVyICE9IGJwb3M7Ci0gICAg
ICAgICAgICAgKytiYXNlX2l0ZXIpIHsKLSAgICAgICAgICBNYXliZUFkZEZpbGUodiwgbGV2ZWws
ICpiYXNlX2l0ZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgTWF5YmVBZGRGaWxlKHYsIGxldmVs
LCAqYWRkZWRfaXRlcik7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEFkZCByZW1haW5pbmcgYmFzZSBm
aWxlcwotICAgICAgZm9yICg7IGJhc2VfaXRlciAhPSBiYXNlX2VuZDsgKytiYXNlX2l0ZXIpIHsK
LSAgICAgICAgTWF5YmVBZGRGaWxlKHYsIGxldmVsLCAqYmFzZV9pdGVyKTsKLSAgICAgIH0KLQot
I2lmbmRlZiBOREVCVUcKLSAgICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBubyBvdmVybGFwIGlu
IGxldmVscyA+IDAKLSAgICAgIGlmIChsZXZlbCA+IDApIHsKLSAgICAgICAgZm9yICh1aW50MzJf
dCBpID0gMTsgaSA8IHYtPmZpbGVzX1tsZXZlbF0uc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICBj
b25zdCBJbnRlcm5hbEtleSYgcHJldl9lbmQgPSB2LT5maWxlc19bbGV2ZWxdW2ktMV0tPmxhcmdl
c3Q7Ci0gICAgICAgICAgY29uc3QgSW50ZXJuYWxLZXkmIHRoaXNfYmVnaW4gPSB2LT5maWxlc19b
bGV2ZWxdW2ldLT5zbWFsbGVzdDsKLSAgICAgICAgICBpZiAodnNldF8tPmljbXBfLkNvbXBhcmUo
cHJldl9lbmQsIHRoaXNfYmVnaW4pID49IDApIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJy
LCAib3ZlcmxhcHBpbmcgcmFuZ2VzIGluIHNhbWUgbGV2ZWwgJXMgdnMuICVzXG4iLAotICAgICAg
ICAgICAgICAgICAgICBwcmV2X2VuZC5EZWJ1Z1N0cmluZygpLmNfc3RyKCksCi0gICAgICAgICAg
ICAgICAgICAgIHRoaXNfYmVnaW4uRGVidWdTdHJpbmcoKS5jX3N0cigpKTsKLSAgICAgICAgICAg
IGFib3J0KCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0jZW5kaWYKLSAgICB9
Ci0gIH0KLQotICB2b2lkIE1heWJlQWRkRmlsZShWZXJzaW9uKiB2LCBpbnQgbGV2ZWwsIEZpbGVN
ZXRhRGF0YSogZikgewotICAgIGlmIChsZXZlbHNfW2xldmVsXS5kZWxldGVkX2ZpbGVzLmNvdW50
KGYtPm51bWJlcikgPiAwKSB7Ci0gICAgICAvLyBGaWxlIGlzIGRlbGV0ZWQ6IGRvIG5vdGhpbmcK
LSAgICB9IGVsc2UgewotICAgICAgc3RkOjp2ZWN0b3I8RmlsZU1ldGFEYXRhKj4qIGZpbGVzID0g
JnYtPmZpbGVzX1tsZXZlbF07Ci0gICAgICBpZiAobGV2ZWwgPiAwICYmICFmaWxlcy0+ZW1wdHko
KSkgewotICAgICAgICAvLyBNdXN0IG5vdCBvdmVybGFwCi0gICAgICAgIGFzc2VydCh2c2V0Xy0+
aWNtcF8uQ29tcGFyZSgoKmZpbGVzKVtmaWxlcy0+c2l6ZSgpLTFdLT5sYXJnZXN0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi0+c21hbGxlc3QpIDwgMCk7Ci0gICAgICB9
Ci0gICAgICBmLT5yZWZzKys7Ci0gICAgICBmaWxlcy0+cHVzaF9iYWNrKGYpOwotICAgIH0KLSAg
fQotfTsKLQotVmVyc2lvblNldDo6VmVyc2lvblNldChjb25zdCBzdGQ6OnN0cmluZyYgZGJuYW1l
LAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPcHRpb25zKiBvcHRpb25zLAotICAgICAg
ICAgICAgICAgICAgICAgICBUYWJsZUNhY2hlKiB0YWJsZV9jYWNoZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgSW50ZXJuYWxLZXlDb21wYXJhdG9yKiBjbXApCi0gICAgOiBlbnZfKG9w
dGlvbnMtPmVudiksCi0gICAgICBkYm5hbWVfKGRibmFtZSksCi0gICAgICBvcHRpb25zXyhvcHRp
b25zKSwKLSAgICAgIHRhYmxlX2NhY2hlXyh0YWJsZV9jYWNoZSksCi0gICAgICBpY21wXygqY21w
KSwKLSAgICAgIG5leHRfZmlsZV9udW1iZXJfKDIpLAotICAgICAgbWFuaWZlc3RfZmlsZV9udW1i
ZXJfKDApLCAgLy8gRmlsbGVkIGJ5IFJlY292ZXIoKQotICAgICAgbGFzdF9zZXF1ZW5jZV8oMCks
Ci0gICAgICBsb2dfbnVtYmVyXygwKSwKLSAgICAgIHByZXZfbG9nX251bWJlcl8oMCksCi0gICAg
ICBkZXNjcmlwdG9yX2ZpbGVfKE5VTEwpLAotICAgICAgZGVzY3JpcHRvcl9sb2dfKE5VTEwpLAot
ICAgICAgZHVtbXlfdmVyc2lvbnNfKHRoaXMpLAotICAgICAgY3VycmVudF8oTlVMTCkgewotICBB
cHBlbmRWZXJzaW9uKG5ldyBWZXJzaW9uKHRoaXMpKTsKLX0KLQotVmVyc2lvblNldDo6flZlcnNp
b25TZXQoKSB7Ci0gIGN1cnJlbnRfLT5VbnJlZigpOwotICBhc3NlcnQoZHVtbXlfdmVyc2lvbnNf
Lm5leHRfID09ICZkdW1teV92ZXJzaW9uc18pOyAgLy8gTGlzdCBtdXN0IGJlIGVtcHR5Ci0gIGRl
bGV0ZSBkZXNjcmlwdG9yX2xvZ187Ci0gIGRlbGV0ZSBkZXNjcmlwdG9yX2ZpbGVfOwotfQotCi12
b2lkIFZlcnNpb25TZXQ6OkFwcGVuZFZlcnNpb24oVmVyc2lvbiogdikgewotICAvLyBNYWtlICJ2
IiBjdXJyZW50Ci0gIGFzc2VydCh2LT5yZWZzXyA9PSAwKTsKLSAgYXNzZXJ0KHYgIT0gY3VycmVu
dF8pOwotICBpZiAoY3VycmVudF8gIT0gTlVMTCkgewotICAgIGN1cnJlbnRfLT5VbnJlZigpOwot
ICB9Ci0gIGN1cnJlbnRfID0gdjsKLSAgdi0+UmVmKCk7Ci0KLSAgLy8gQXBwZW5kIHRvIGxpbmtl
ZCBsaXN0Ci0gIHYtPnByZXZfID0gZHVtbXlfdmVyc2lvbnNfLnByZXZfOwotICB2LT5uZXh0XyA9
ICZkdW1teV92ZXJzaW9uc187Ci0gIHYtPnByZXZfLT5uZXh0XyA9IHY7Ci0gIHYtPm5leHRfLT5w
cmV2XyA9IHY7Ci19Ci0KLVN0YXR1cyBWZXJzaW9uU2V0OjpMb2dBbmRBcHBseShWZXJzaW9uRWRp
dCogZWRpdCwgcG9ydDo6TXV0ZXgqIG11KSB7Ci0gIGlmIChlZGl0LT5oYXNfbG9nX251bWJlcl8p
IHsKLSAgICBhc3NlcnQoZWRpdC0+bG9nX251bWJlcl8gPj0gbG9nX251bWJlcl8pOwotICAgIGFz
c2VydChlZGl0LT5sb2dfbnVtYmVyXyA8IG5leHRfZmlsZV9udW1iZXJfKTsKLSAgfSBlbHNlIHsK
LSAgICBlZGl0LT5TZXRMb2dOdW1iZXIobG9nX251bWJlcl8pOwotICB9Ci0KLSAgaWYgKCFlZGl0
LT5oYXNfcHJldl9sb2dfbnVtYmVyXykgewotICAgIGVkaXQtPlNldFByZXZMb2dOdW1iZXIocHJl
dl9sb2dfbnVtYmVyXyk7Ci0gIH0KLQotICBlZGl0LT5TZXROZXh0RmlsZShuZXh0X2ZpbGVfbnVt
YmVyXyk7Ci0gIGVkaXQtPlNldExhc3RTZXF1ZW5jZShsYXN0X3NlcXVlbmNlXyk7Ci0KLSAgVmVy
c2lvbiogdiA9IG5ldyBWZXJzaW9uKHRoaXMpOwotICB7Ci0gICAgQnVpbGRlciBidWlsZGVyKHRo
aXMsIGN1cnJlbnRfKTsKLSAgICBidWlsZGVyLkFwcGx5KGVkaXQpOwotICAgIGJ1aWxkZXIuU2F2
ZVRvKHYpOwotICB9Ci0gIEZpbmFsaXplKHYpOwotCi0gIC8vIEluaXRpYWxpemUgbmV3IGRlc2Ny
aXB0b3IgbG9nIGZpbGUgaWYgbmVjZXNzYXJ5IGJ5IGNyZWF0aW5nCi0gIC8vIGEgdGVtcG9yYXJ5
IGZpbGUgdGhhdCBjb250YWlucyBhIHNuYXBzaG90IG9mIHRoZSBjdXJyZW50IHZlcnNpb24uCi0g
IHN0ZDo6c3RyaW5nIG5ld19tYW5pZmVzdF9maWxlOwotICBTdGF0dXMgczsKLSAgaWYgKGRlc2Ny
aXB0b3JfbG9nXyA9PSBOVUxMKSB7Ci0gICAgLy8gTm8gcmVhc29uIHRvIHVubG9jayAqbXUgaGVy
ZSBzaW5jZSB3ZSBvbmx5IGhpdCB0aGlzIHBhdGggaW4gdGhlCi0gICAgLy8gZmlyc3QgY2FsbCB0
byBMb2dBbmRBcHBseSAod2hlbiBvcGVuaW5nIHRoZSBkYXRhYmFzZSkuCi0gICAgYXNzZXJ0KGRl
c2NyaXB0b3JfZmlsZV8gPT0gTlVMTCk7Ci0gICAgbmV3X21hbmlmZXN0X2ZpbGUgPSBEZXNjcmlw
dG9yRmlsZU5hbWUoZGJuYW1lXywgbWFuaWZlc3RfZmlsZV9udW1iZXJfKTsKLSAgICBlZGl0LT5T
ZXROZXh0RmlsZShuZXh0X2ZpbGVfbnVtYmVyXyk7Ci0gICAgcyA9IGVudl8tPk5ld1dyaXRhYmxl
RmlsZShuZXdfbWFuaWZlc3RfZmlsZSwgJmRlc2NyaXB0b3JfZmlsZV8pOwotICAgIGlmIChzLm9r
KCkpIHsKLSAgICAgIGRlc2NyaXB0b3JfbG9nXyA9IG5ldyBsb2c6OldyaXRlcihkZXNjcmlwdG9y
X2ZpbGVfKTsKLSAgICAgIHMgPSBXcml0ZVNuYXBzaG90KGRlc2NyaXB0b3JfbG9nXyk7Ci0gICAg
fQotICB9Ci0KLSAgLy8gVW5sb2NrIGR1cmluZyBleHBlbnNpdmUgTUFOSUZFU1QgbG9nIHdyaXRl
Ci0gIHsKLSAgICBtdS0+VW5sb2NrKCk7Ci0KLSAgICAvLyBXcml0ZSBuZXcgcmVjb3JkIHRvIE1B
TklGRVNUIGxvZwotICAgIGlmIChzLm9rKCkpIHsKLSAgICAgIHN0ZDo6c3RyaW5nIHJlY29yZDsK
LSAgICAgIGVkaXQtPkVuY29kZVRvKCZyZWNvcmQpOwotICAgICAgcyA9IGRlc2NyaXB0b3JfbG9n
Xy0+QWRkUmVjb3JkKHJlY29yZCk7Ci0gICAgICBpZiAocy5vaygpKSB7Ci0gICAgICAgIHMgPSBk
ZXNjcmlwdG9yX2ZpbGVfLT5TeW5jKCk7Ci0gICAgICB9Ci0gICAgICBpZiAoIXMub2soKSkgewot
ICAgICAgICBMb2cob3B0aW9uc18tPmluZm9fbG9nLCAiTUFOSUZFU1Qgd3JpdGU6ICVzXG4iLCBz
LlRvU3RyaW5nKCkuY19zdHIoKSk7Ci0gICAgICAgIGlmIChNYW5pZmVzdENvbnRhaW5zKHJlY29y
ZCkpIHsKLSAgICAgICAgICBMb2cob3B0aW9uc18tPmluZm9fbG9nLAotICAgICAgICAgICAgICAi
TUFOSUZFU1QgY29udGFpbnMgbG9nIHJlY29yZCBkZXNwaXRlIGVycm9yOyBhZHZhbmNpbmcgdG8g
bmV3ICIKLSAgICAgICAgICAgICAgInZlcnNpb24gdG8gcHJldmVudCBtaXNtYXRjaCBiZXR3ZWVu
IGluLW1lbW9yeSBhbmQgbG9nZ2VkIHN0YXRlIik7Ci0gICAgICAgICAgcyA9IFN0YXR1czo6T0so
KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIHdlIGp1c3QgY3JlYXRl
ZCBhIG5ldyBkZXNjcmlwdG9yIGZpbGUsIGluc3RhbGwgaXQgYnkgd3JpdGluZyBhCi0gICAgLy8g
bmV3IENVUlJFTlQgZmlsZSB0aGF0IHBvaW50cyB0byBpdC4KLSAgICBpZiAocy5vaygpICYmICFu
ZXdfbWFuaWZlc3RfZmlsZS5lbXB0eSgpKSB7Ci0gICAgICBzID0gU2V0Q3VycmVudEZpbGUoZW52
XywgZGJuYW1lXywgbWFuaWZlc3RfZmlsZV9udW1iZXJfKTsKLSAgICAgIC8vIE5vIG5lZWQgdG8g
ZG91YmxlLWNoZWNrIE1BTklGRVNUIGluIGNhc2Ugb2YgZXJyb3Igc2luY2UgaXQKLSAgICAgIC8v
IHdpbGwgYmUgZGlzY2FyZGVkIGJlbG93LgotICAgIH0KLQotICAgIG11LT5Mb2NrKCk7Ci0gIH0K
LQotICAvLyBJbnN0YWxsIHRoZSBuZXcgdmVyc2lvbgotICBpZiAocy5vaygpKSB7Ci0gICAgQXBw
ZW5kVmVyc2lvbih2KTsKLSAgICBsb2dfbnVtYmVyXyA9IGVkaXQtPmxvZ19udW1iZXJfOwotICAg
IHByZXZfbG9nX251bWJlcl8gPSBlZGl0LT5wcmV2X2xvZ19udW1iZXJfOwotICB9IGVsc2Ugewot
ICAgIGRlbGV0ZSB2OwotICAgIGlmICghbmV3X21hbmlmZXN0X2ZpbGUuZW1wdHkoKSkgewotICAg
ICAgZGVsZXRlIGRlc2NyaXB0b3JfbG9nXzsKLSAgICAgIGRlbGV0ZSBkZXNjcmlwdG9yX2ZpbGVf
OwotICAgICAgZGVzY3JpcHRvcl9sb2dfID0gTlVMTDsKLSAgICAgIGRlc2NyaXB0b3JfZmlsZV8g
PSBOVUxMOwotICAgICAgZW52Xy0+RGVsZXRlRmlsZShuZXdfbWFuaWZlc3RfZmlsZSk7Ci0gICAg
fQotICB9Ci0KLSAgcmV0dXJuIHM7Ci19Ci0KLVN0YXR1cyBWZXJzaW9uU2V0OjpSZWNvdmVyKCkg
ewotICBzdHJ1Y3QgTG9nUmVwb3J0ZXIgOiBwdWJsaWMgbG9nOjpSZWFkZXI6OlJlcG9ydGVyIHsK
LSAgICBTdGF0dXMqIHN0YXR1czsKLSAgICB2aXJ0dWFsIHZvaWQgQ29ycnVwdGlvbihzaXplX3Qg
Ynl0ZXMsIGNvbnN0IFN0YXR1cyYgcykgewotICAgICAgaWYgKHRoaXMtPnN0YXR1cy0+b2soKSkg
KnRoaXMtPnN0YXR1cyA9IHM7Ci0gICAgfQotICB9OwotCi0gIC8vIFJlYWQgIkNVUlJFTlQiIGZp
bGUsIHdoaWNoIGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGUgY3VycmVudCBtYW5pZmVzdCBmaWxl
Ci0gIHN0ZDo6c3RyaW5nIGN1cnJlbnQ7Ci0gIFN0YXR1cyBzID0gUmVhZEZpbGVUb1N0cmluZyhl
bnZfLCBDdXJyZW50RmlsZU5hbWUoZGJuYW1lXyksICZjdXJyZW50KTsKLSAgaWYgKCFzLm9rKCkp
IHsKLSAgICByZXR1cm4gczsKLSAgfQotICBpZiAoY3VycmVudC5lbXB0eSgpIHx8IGN1cnJlbnRb
Y3VycmVudC5zaXplKCktMV0gIT0gJ1xuJykgewotICAgIHJldHVybiBTdGF0dXM6OkNvcnJ1cHRp
b24oIkNVUlJFTlQgZmlsZSBkb2VzIG5vdCBlbmQgd2l0aCBuZXdsaW5lIik7Ci0gIH0KLSAgY3Vy
cmVudC5yZXNpemUoY3VycmVudC5zaXplKCkgLSAxKTsKLQotICBzdGQ6OnN0cmluZyBkc2NuYW1l
ID0gZGJuYW1lXyArICIvIiArIGN1cnJlbnQ7Ci0gIFNlcXVlbnRpYWxGaWxlKiBmaWxlOwotICBz
ID0gZW52Xy0+TmV3U2VxdWVudGlhbEZpbGUoZHNjbmFtZSwgJmZpbGUpOwotICBpZiAoIXMub2so
KSkgewotICAgIHJldHVybiBzOwotICB9Ci0KLSAgYm9vbCBoYXZlX2xvZ19udW1iZXIgPSBmYWxz
ZTsKLSAgYm9vbCBoYXZlX3ByZXZfbG9nX251bWJlciA9IGZhbHNlOwotICBib29sIGhhdmVfbmV4
dF9maWxlID0gZmFsc2U7Ci0gIGJvb2wgaGF2ZV9sYXN0X3NlcXVlbmNlID0gZmFsc2U7Ci0gIHVp
bnQ2NF90IG5leHRfZmlsZSA9IDA7Ci0gIHVpbnQ2NF90IGxhc3Rfc2VxdWVuY2UgPSAwOwotICB1
aW50NjRfdCBsb2dfbnVtYmVyID0gMDsKLSAgdWludDY0X3QgcHJldl9sb2dfbnVtYmVyID0gMDsK
LSAgQnVpbGRlciBidWlsZGVyKHRoaXMsIGN1cnJlbnRfKTsKLQotICB7Ci0gICAgTG9nUmVwb3J0
ZXIgcmVwb3J0ZXI7Ci0gICAgcmVwb3J0ZXIuc3RhdHVzID0gJnM7Ci0gICAgbG9nOjpSZWFkZXIg
cmVhZGVyKGZpbGUsICZyZXBvcnRlciwgdHJ1ZS8qY2hlY2tzdW0qLywgMC8qaW5pdGlhbF9vZmZz
ZXQqLyk7Ci0gICAgU2xpY2UgcmVjb3JkOwotICAgIHN0ZDo6c3RyaW5nIHNjcmF0Y2g7Ci0gICAg
d2hpbGUgKHJlYWRlci5SZWFkUmVjb3JkKCZyZWNvcmQsICZzY3JhdGNoKSAmJiBzLm9rKCkpIHsK
LSAgICAgIFZlcnNpb25FZGl0IGVkaXQ7Ci0gICAgICBzID0gZWRpdC5EZWNvZGVGcm9tKHJlY29y
ZCk7Ci0gICAgICBpZiAocy5vaygpKSB7Ci0gICAgICAgIGlmIChlZGl0Lmhhc19jb21wYXJhdG9y
XyAmJgotICAgICAgICAgICAgZWRpdC5jb21wYXJhdG9yXyAhPSBpY21wXy51c2VyX2NvbXBhcmF0
b3IoKS0+TmFtZSgpKSB7Ci0gICAgICAgICAgcyA9IFN0YXR1czo6SW52YWxpZEFyZ3VtZW50KAot
ICAgICAgICAgICAgICBlZGl0LmNvbXBhcmF0b3JfICsgIiBkb2VzIG5vdCBtYXRjaCBleGlzdGlu
ZyBjb21wYXJhdG9yICIsCi0gICAgICAgICAgICAgIGljbXBfLnVzZXJfY29tcGFyYXRvcigpLT5O
YW1lKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChzLm9rKCkpIHsKLSAgICAg
ICAgYnVpbGRlci5BcHBseSgmZWRpdCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChlZGl0Lmhhc19s
b2dfbnVtYmVyXykgewotICAgICAgICBsb2dfbnVtYmVyID0gZWRpdC5sb2dfbnVtYmVyXzsKLSAg
ICAgICAgaGF2ZV9sb2dfbnVtYmVyID0gdHJ1ZTsKLSAgICAgIH0KLQotICAgICAgaWYgKGVkaXQu
aGFzX3ByZXZfbG9nX251bWJlcl8pIHsKLSAgICAgICAgcHJldl9sb2dfbnVtYmVyID0gZWRpdC5w
cmV2X2xvZ19udW1iZXJfOwotICAgICAgICBoYXZlX3ByZXZfbG9nX251bWJlciA9IHRydWU7Ci0g
ICAgICB9Ci0KLSAgICAgIGlmIChlZGl0Lmhhc19uZXh0X2ZpbGVfbnVtYmVyXykgewotICAgICAg
ICBuZXh0X2ZpbGUgPSBlZGl0Lm5leHRfZmlsZV9udW1iZXJfOwotICAgICAgICBoYXZlX25leHRf
ZmlsZSA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChlZGl0Lmhhc19sYXN0X3NlcXVlbmNl
XykgewotICAgICAgICBsYXN0X3NlcXVlbmNlID0gZWRpdC5sYXN0X3NlcXVlbmNlXzsKLSAgICAg
ICAgaGF2ZV9sYXN0X3NlcXVlbmNlID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgZGVs
ZXRlIGZpbGU7Ci0gIGZpbGUgPSBOVUxMOwotCi0gIGlmIChzLm9rKCkpIHsKLSAgICBpZiAoIWhh
dmVfbmV4dF9maWxlKSB7Ci0gICAgICBzID0gU3RhdHVzOjpDb3JydXB0aW9uKCJubyBtZXRhLW5l
eHRmaWxlIGVudHJ5IGluIGRlc2NyaXB0b3IiKTsKLSAgICB9IGVsc2UgaWYgKCFoYXZlX2xvZ19u
dW1iZXIpIHsKLSAgICAgIHMgPSBTdGF0dXM6OkNvcnJ1cHRpb24oIm5vIG1ldGEtbG9nbnVtYmVy
IGVudHJ5IGluIGRlc2NyaXB0b3IiKTsKLSAgICB9IGVsc2UgaWYgKCFoYXZlX2xhc3Rfc2VxdWVu
Y2UpIHsKLSAgICAgIHMgPSBTdGF0dXM6OkNvcnJ1cHRpb24oIm5vIGxhc3Qtc2VxdWVuY2UtbnVt
YmVyIGVudHJ5IGluIGRlc2NyaXB0b3IiKTsKLSAgICB9Ci0KLSAgICBpZiAoIWhhdmVfcHJldl9s
b2dfbnVtYmVyKSB7Ci0gICAgICBwcmV2X2xvZ19udW1iZXIgPSAwOwotICAgIH0KLQotICAgIE1h
cmtGaWxlTnVtYmVyVXNlZChwcmV2X2xvZ19udW1iZXIpOwotICAgIE1hcmtGaWxlTnVtYmVyVXNl
ZChsb2dfbnVtYmVyKTsKLSAgfQotCi0gIGlmIChzLm9rKCkpIHsKLSAgICBWZXJzaW9uKiB2ID0g
bmV3IFZlcnNpb24odGhpcyk7Ci0gICAgYnVpbGRlci5TYXZlVG8odik7Ci0gICAgLy8gSW5zdGFs
bCByZWNvdmVyZWQgdmVyc2lvbgotICAgIEZpbmFsaXplKHYpOwotICAgIEFwcGVuZFZlcnNpb24o
dik7Ci0gICAgbWFuaWZlc3RfZmlsZV9udW1iZXJfID0gbmV4dF9maWxlOwotICAgIG5leHRfZmls
ZV9udW1iZXJfID0gbmV4dF9maWxlICsgMTsKLSAgICBsYXN0X3NlcXVlbmNlXyA9IGxhc3Rfc2Vx
dWVuY2U7Ci0gICAgbG9nX251bWJlcl8gPSBsb2dfbnVtYmVyOwotICAgIHByZXZfbG9nX251bWJl
cl8gPSBwcmV2X2xvZ19udW1iZXI7Ci0gIH0KLQotICByZXR1cm4gczsKLX0KLQotdm9pZCBWZXJz
aW9uU2V0OjpNYXJrRmlsZU51bWJlclVzZWQodWludDY0X3QgbnVtYmVyKSB7Ci0gIGlmIChuZXh0
X2ZpbGVfbnVtYmVyXyA8PSBudW1iZXIpIHsKLSAgICBuZXh0X2ZpbGVfbnVtYmVyXyA9IG51bWJl
ciArIDE7Ci0gIH0KLX0KLQotdm9pZCBWZXJzaW9uU2V0OjpGaW5hbGl6ZShWZXJzaW9uKiB2KSB7
Ci0gIC8vIFByZWNvbXB1dGVkIGJlc3QgbGV2ZWwgZm9yIG5leHQgY29tcGFjdGlvbgotICBpbnQg
YmVzdF9sZXZlbCA9IC0xOwotICBkb3VibGUgYmVzdF9zY29yZSA9IC0xOwotCi0gIGZvciAoaW50
IGxldmVsID0gMDsgbGV2ZWwgPCBjb25maWc6OmtOdW1MZXZlbHMtMTsgbGV2ZWwrKykgewotICAg
IGRvdWJsZSBzY29yZTsKLSAgICBpZiAobGV2ZWwgPT0gMCkgewotICAgICAgLy8gV2UgdHJlYXQg
bGV2ZWwtMCBzcGVjaWFsbHkgYnkgYm91bmRpbmcgdGhlIG51bWJlciBvZiBmaWxlcwotICAgICAg
Ly8gaW5zdGVhZCBvZiBudW1iZXIgb2YgYnl0ZXMgZm9yIHR3byByZWFzb25zOgotICAgICAgLy8K
LSAgICAgIC8vICgxKSBXaXRoIGxhcmdlciB3cml0ZS1idWZmZXIgc2l6ZXMsIGl0IGlzIG5pY2Ug
bm90IHRvIGRvIHRvbwotICAgICAgLy8gbWFueSBsZXZlbC0wIGNvbXBhY3Rpb25zLgotICAgICAg
Ly8KLSAgICAgIC8vICgyKSBUaGUgZmlsZXMgaW4gbGV2ZWwtMCBhcmUgbWVyZ2VkIG9uIGV2ZXJ5
IHJlYWQgYW5kCi0gICAgICAvLyB0aGVyZWZvcmUgd2Ugd2lzaCB0byBhdm9pZCB0b28gbWFueSBm
aWxlcyB3aGVuIHRoZSBpbmRpdmlkdWFsCi0gICAgICAvLyBmaWxlIHNpemUgaXMgc21hbGwgKHBl
cmhhcHMgYmVjYXVzZSBvZiBhIHNtYWxsIHdyaXRlLWJ1ZmZlcgotICAgICAgLy8gc2V0dGluZywg
b3IgdmVyeSBoaWdoIGNvbXByZXNzaW9uIHJhdGlvcywgb3IgbG90cyBvZgotICAgICAgLy8gb3Zl
cndyaXRlcy9kZWxldGlvbnMpLgotICAgICAgc2NvcmUgPSB2LT5maWxlc19bbGV2ZWxdLnNpemUo
KSAvCi0gICAgICAgICAgc3RhdGljX2Nhc3Q8ZG91YmxlPihjb25maWc6OmtMMF9Db21wYWN0aW9u
VHJpZ2dlcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIENvbXB1dGUgdGhlIHJhdGlvIG9mIGN1
cnJlbnQgc2l6ZSB0byBzaXplIGxpbWl0LgotICAgICAgY29uc3QgdWludDY0X3QgbGV2ZWxfYnl0
ZXMgPSBUb3RhbEZpbGVTaXplKHYtPmZpbGVzX1tsZXZlbF0pOwotICAgICAgc2NvcmUgPSBzdGF0
aWNfY2FzdDxkb3VibGU+KGxldmVsX2J5dGVzKSAvIE1heEJ5dGVzRm9yTGV2ZWwobGV2ZWwpOwot
ICAgIH0KLQotICAgIGlmIChzY29yZSA+IGJlc3Rfc2NvcmUpIHsKLSAgICAgIGJlc3RfbGV2ZWwg
PSBsZXZlbDsKLSAgICAgIGJlc3Rfc2NvcmUgPSBzY29yZTsKLSAgICB9Ci0gIH0KLQotICB2LT5j
b21wYWN0aW9uX2xldmVsXyA9IGJlc3RfbGV2ZWw7Ci0gIHYtPmNvbXBhY3Rpb25fc2NvcmVfID0g
YmVzdF9zY29yZTsKLX0KLQotU3RhdHVzIFZlcnNpb25TZXQ6OldyaXRlU25hcHNob3QobG9nOjpX
cml0ZXIqIGxvZykgewotICAvLyBUT0RPOiBCcmVhayB1cCBpbnRvIG11bHRpcGxlIHJlY29yZHMg
dG8gcmVkdWNlIG1lbW9yeSB1c2FnZSBvbiByZWNvdmVyeT8KLQotICAvLyBTYXZlIG1ldGFkYXRh
Ci0gIFZlcnNpb25FZGl0IGVkaXQ7Ci0gIGVkaXQuU2V0Q29tcGFyYXRvck5hbWUoaWNtcF8udXNl
cl9jb21wYXJhdG9yKCktPk5hbWUoKSk7Ci0KLSAgLy8gU2F2ZSBjb21wYWN0aW9uIHBvaW50ZXJz
Ci0gIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBjb25maWc6OmtOdW1MZXZlbHM7IGxldmVs
KyspIHsKLSAgICBpZiAoIWNvbXBhY3RfcG9pbnRlcl9bbGV2ZWxdLmVtcHR5KCkpIHsKLSAgICAg
IEludGVybmFsS2V5IGtleTsKLSAgICAgIGtleS5EZWNvZGVGcm9tKGNvbXBhY3RfcG9pbnRlcl9b
bGV2ZWxdKTsKLSAgICAgIGVkaXQuU2V0Q29tcGFjdFBvaW50ZXIobGV2ZWwsIGtleSk7Ci0gICAg
fQotICB9Ci0KLSAgLy8gU2F2ZSBmaWxlcwotICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwg
Y29uZmlnOjprTnVtTGV2ZWxzOyBsZXZlbCsrKSB7Ci0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8Rmls
ZU1ldGFEYXRhKj4mIGZpbGVzID0gY3VycmVudF8tPmZpbGVzX1tsZXZlbF07Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBmaWxlcy5zaXplKCk7IGkrKykgewotICAgICAgY29uc3QgRmlsZU1l
dGFEYXRhKiBmID0gZmlsZXNbaV07Ci0gICAgICBlZGl0LkFkZEZpbGUobGV2ZWwsIGYtPm51bWJl
ciwgZi0+ZmlsZV9zaXplLCBmLT5zbWFsbGVzdCwgZi0+bGFyZ2VzdCk7Ci0gICAgfQotICB9Ci0K
LSAgc3RkOjpzdHJpbmcgcmVjb3JkOwotICBlZGl0LkVuY29kZVRvKCZyZWNvcmQpOwotICByZXR1
cm4gbG9nLT5BZGRSZWNvcmQocmVjb3JkKTsKLX0KLQotaW50IFZlcnNpb25TZXQ6Ok51bUxldmVs
RmlsZXMoaW50IGxldmVsKSBjb25zdCB7Ci0gIGFzc2VydChsZXZlbCA+PSAwKTsKLSAgYXNzZXJ0
KGxldmVsIDwgY29uZmlnOjprTnVtTGV2ZWxzKTsKLSAgcmV0dXJuIGN1cnJlbnRfLT5maWxlc19b
bGV2ZWxdLnNpemUoKTsKLX0KLQotY29uc3QgY2hhciogVmVyc2lvblNldDo6TGV2ZWxTdW1tYXJ5
KExldmVsU3VtbWFyeVN0b3JhZ2UqIHNjcmF0Y2gpIGNvbnN0IHsKLSAgLy8gVXBkYXRlIGNvZGUg
aWYga051bUxldmVscyBjaGFuZ2VzCi0gIGFzc2VydChjb25maWc6OmtOdW1MZXZlbHMgPT0gNyk7
Ci0gIHNucHJpbnRmKHNjcmF0Y2gtPmJ1ZmZlciwgc2l6ZW9mKHNjcmF0Y2gtPmJ1ZmZlciksCi0g
ICAgICAgICAgICJmaWxlc1sgJWQgJWQgJWQgJWQgJWQgJWQgJWQgXSIsCi0gICAgICAgICAgIGlu
dChjdXJyZW50Xy0+ZmlsZXNfWzBdLnNpemUoKSksCi0gICAgICAgICAgIGludChjdXJyZW50Xy0+
ZmlsZXNfWzFdLnNpemUoKSksCi0gICAgICAgICAgIGludChjdXJyZW50Xy0+ZmlsZXNfWzJdLnNp
emUoKSksCi0gICAgICAgICAgIGludChjdXJyZW50Xy0+ZmlsZXNfWzNdLnNpemUoKSksCi0gICAg
ICAgICAgIGludChjdXJyZW50Xy0+ZmlsZXNfWzRdLnNpemUoKSksCi0gICAgICAgICAgIGludChj
dXJyZW50Xy0+ZmlsZXNfWzVdLnNpemUoKSksCi0gICAgICAgICAgIGludChjdXJyZW50Xy0+Zmls
ZXNfWzZdLnNpemUoKSkpOwotICByZXR1cm4gc2NyYXRjaC0+YnVmZmVyOwotfQotCi0vLyBSZXR1
cm4gdHJ1ZSBpZmYgdGhlIG1hbmlmZXN0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgcmVjb3JkLgot
Ym9vbCBWZXJzaW9uU2V0OjpNYW5pZmVzdENvbnRhaW5zKGNvbnN0IHN0ZDo6c3RyaW5nJiByZWNv
cmQpIGNvbnN0IHsKLSAgc3RkOjpzdHJpbmcgZm5hbWUgPSBEZXNjcmlwdG9yRmlsZU5hbWUoZGJu
YW1lXywgbWFuaWZlc3RfZmlsZV9udW1iZXJfKTsKLSAgTG9nKG9wdGlvbnNfLT5pbmZvX2xvZywg
Ik1hbmlmZXN0Q29udGFpbnM6IGNoZWNraW5nICVzXG4iLCBmbmFtZS5jX3N0cigpKTsKLSAgU2Vx
dWVudGlhbEZpbGUqIGZpbGUgPSBOVUxMOwotICBTdGF0dXMgcyA9IGVudl8tPk5ld1NlcXVlbnRp
YWxGaWxlKGZuYW1lLCAmZmlsZSk7Ci0gIGlmICghcy5vaygpKSB7Ci0gICAgTG9nKG9wdGlvbnNf
LT5pbmZvX2xvZywgIk1hbmlmZXN0Q29udGFpbnM6ICVzXG4iLCBzLlRvU3RyaW5nKCkuY19zdHIo
KSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIGxvZzo6UmVhZGVyIHJlYWRlcihmaWxlLCBO
VUxMLCB0cnVlLypjaGVja3N1bSovLCAwKTsKLSAgU2xpY2UgcjsKLSAgc3RkOjpzdHJpbmcgc2Ny
YXRjaDsKLSAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgd2hpbGUgKHJlYWRlci5SZWFkUmVjb3Jk
KCZyLCAmc2NyYXRjaCkpIHsKLSAgICBpZiAociA9PSBTbGljZShyZWNvcmQpKSB7Ci0gICAgICBy
ZXN1bHQgPSB0cnVlOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0gIGRlbGV0ZSBmaWxlOwot
ICBMb2cob3B0aW9uc18tPmluZm9fbG9nLCAiTWFuaWZlc3RDb250YWluczogcmVzdWx0ID0gJWRc
biIsIHJlc3VsdCA/IDEgOiAwKTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdWludDY0X3QgVmVy
c2lvblNldDo6QXBwcm94aW1hdGVPZmZzZXRPZihWZXJzaW9uKiB2LCBjb25zdCBJbnRlcm5hbEtl
eSYgaWtleSkgewotICB1aW50NjRfdCByZXN1bHQgPSAwOwotICBmb3IgKGludCBsZXZlbCA9IDA7
IGxldmVsIDwgY29uZmlnOjprTnVtTGV2ZWxzOyBsZXZlbCsrKSB7Ci0gICAgY29uc3Qgc3RkOjp2
ZWN0b3I8RmlsZU1ldGFEYXRhKj4mIGZpbGVzID0gdi0+ZmlsZXNfW2xldmVsXTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGZpbGVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICBpZiAoaWNtcF8u
Q29tcGFyZShmaWxlc1tpXS0+bGFyZ2VzdCwgaWtleSkgPD0gMCkgewotICAgICAgICAvLyBFbnRp
cmUgZmlsZSBpcyBiZWZvcmUgImlrZXkiLCBzbyBqdXN0IGFkZCB0aGUgZmlsZSBzaXplCi0gICAg
ICAgIHJlc3VsdCArPSBmaWxlc1tpXS0+ZmlsZV9zaXplOwotICAgICAgfSBlbHNlIGlmIChpY21w
Xy5Db21wYXJlKGZpbGVzW2ldLT5zbWFsbGVzdCwgaWtleSkgPiAwKSB7Ci0gICAgICAgIC8vIEVu
dGlyZSBmaWxlIGlzIGFmdGVyICJpa2V5Iiwgc28gaWdub3JlCi0gICAgICAgIGlmIChsZXZlbCA+
IDApIHsKLSAgICAgICAgICAvLyBGaWxlcyBvdGhlciB0aGFuIGxldmVsIDAgYXJlIHNvcnRlZCBi
eSBtZXRhLT5zbWFsbGVzdCwgc28KLSAgICAgICAgICAvLyBubyBmdXJ0aGVyIGZpbGVzIGluIHRo
aXMgbGV2ZWwgd2lsbCBjb250YWluIGRhdGEgZm9yCi0gICAgICAgICAgLy8gImlrZXkiLgotICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyAiaWtl
eSIgZmFsbHMgaW4gdGhlIHJhbmdlIGZvciB0aGlzIHRhYmxlLiAgQWRkIHRoZQotICAgICAgICAv
LyBhcHByb3hpbWF0ZSBvZmZzZXQgb2YgImlrZXkiIHdpdGhpbiB0aGUgdGFibGUuCi0gICAgICAg
IFRhYmxlKiB0YWJsZXB0cjsKLSAgICAgICAgSXRlcmF0b3IqIGl0ZXIgPSB0YWJsZV9jYWNoZV8t
Pk5ld0l0ZXJhdG9yKAotICAgICAgICAgICAgUmVhZE9wdGlvbnMoKSwgZmlsZXNbaV0tPm51bWJl
ciwgZmlsZXNbaV0tPmZpbGVfc2l6ZSwgJnRhYmxlcHRyKTsKLSAgICAgICAgaWYgKHRhYmxlcHRy
ICE9IE5VTEwpIHsKLSAgICAgICAgICByZXN1bHQgKz0gdGFibGVwdHItPkFwcHJveGltYXRlT2Zm
c2V0T2YoaWtleS5FbmNvZGUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZGVsZXRlIGl0ZXI7Ci0g
ICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgVmVyc2lvblNl
dDo6QWRkTGl2ZUZpbGVzKHN0ZDo6c2V0PHVpbnQ2NF90PiogbGl2ZSkgewotICBmb3IgKFZlcnNp
b24qIHYgPSBkdW1teV92ZXJzaW9uc18ubmV4dF87Ci0gICAgICAgdiAhPSAmZHVtbXlfdmVyc2lv
bnNfOwotICAgICAgIHYgPSB2LT5uZXh0XykgewotICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2
ZWwgPCBjb25maWc6OmtOdW1MZXZlbHM7IGxldmVsKyspIHsKLSAgICAgIGNvbnN0IHN0ZDo6dmVj
dG9yPEZpbGVNZXRhRGF0YSo+JiBmaWxlcyA9IHYtPmZpbGVzX1tsZXZlbF07Ci0gICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGZpbGVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGxpdmUtPmlu
c2VydChmaWxlc1tpXS0+bnVtYmVyKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLQotaW50NjRf
dCBWZXJzaW9uU2V0OjpOdW1MZXZlbEJ5dGVzKGludCBsZXZlbCkgY29uc3QgewotICBhc3NlcnQo
bGV2ZWwgPj0gMCk7Ci0gIGFzc2VydChsZXZlbCA8IGNvbmZpZzo6a051bUxldmVscyk7Ci0gIHJl
dHVybiBUb3RhbEZpbGVTaXplKGN1cnJlbnRfLT5maWxlc19bbGV2ZWxdKTsKLX0KLQotaW50NjRf
dCBWZXJzaW9uU2V0OjpNYXhOZXh0TGV2ZWxPdmVybGFwcGluZ0J5dGVzKCkgewotICBpbnQ2NF90
IHJlc3VsdCA9IDA7Ci0gIHN0ZDo6dmVjdG9yPEZpbGVNZXRhRGF0YSo+IG92ZXJsYXBzOwotICBm
b3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgY29uZmlnOjprTnVtTGV2ZWxzIC0gMTsgbGV2ZWwr
KykgewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY3VycmVudF8tPmZpbGVzX1tsZXZlbF0u
c2l6ZSgpOyBpKyspIHsKLSAgICAgIGNvbnN0IEZpbGVNZXRhRGF0YSogZiA9IGN1cnJlbnRfLT5m
aWxlc19bbGV2ZWxdW2ldOwotICAgICAgY3VycmVudF8tPkdldE92ZXJsYXBwaW5nSW5wdXRzKGxl
dmVsKzEsICZmLT5zbWFsbGVzdCwgJmYtPmxhcmdlc3QsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJm92ZXJsYXBzKTsKLSAgICAgIGNvbnN0IGludDY0X3Qgc3VtID0gVG90
YWxGaWxlU2l6ZShvdmVybGFwcyk7Ci0gICAgICBpZiAoc3VtID4gcmVzdWx0KSB7Ci0gICAgICAg
IHJlc3VsdCA9IHN1bTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotLy8gU3RvcmVzIHRoZSBtaW5pbWFsIHJhbmdlIHRoYXQgY292ZXJzIGFsbCBlbnRyaWVzIGlu
IGlucHV0cyBpbgotLy8gKnNtYWxsZXN0LCAqbGFyZ2VzdC4KLS8vIFJFUVVJUkVTOiBpbnB1dHMg
aXMgbm90IGVtcHR5Ci12b2lkIFZlcnNpb25TZXQ6OkdldFJhbmdlKGNvbnN0IHN0ZDo6dmVjdG9y
PEZpbGVNZXRhRGF0YSo+JiBpbnB1dHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEludGVy
bmFsS2V5KiBzbWFsbGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxLZXkq
IGxhcmdlc3QpIHsKLSAgYXNzZXJ0KCFpbnB1dHMuZW1wdHkoKSk7Ci0gIHNtYWxsZXN0LT5DbGVh
cigpOwotICBsYXJnZXN0LT5DbGVhcigpOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlucHV0
cy5zaXplKCk7IGkrKykgewotICAgIEZpbGVNZXRhRGF0YSogZiA9IGlucHV0c1tpXTsKLSAgICBp
ZiAoaSA9PSAwKSB7Ci0gICAgICAqc21hbGxlc3QgPSBmLT5zbWFsbGVzdDsKLSAgICAgICpsYXJn
ZXN0ID0gZi0+bGFyZ2VzdDsKLSAgICB9IGVsc2UgewotICAgICAgaWYgKGljbXBfLkNvbXBhcmUo
Zi0+c21hbGxlc3QsICpzbWFsbGVzdCkgPCAwKSB7Ci0gICAgICAgICpzbWFsbGVzdCA9IGYtPnNt
YWxsZXN0OwotICAgICAgfQotICAgICAgaWYgKGljbXBfLkNvbXBhcmUoZi0+bGFyZ2VzdCwgKmxh
cmdlc3QpID4gMCkgewotICAgICAgICAqbGFyZ2VzdCA9IGYtPmxhcmdlc3Q7Ci0gICAgICB9Ci0g
ICAgfQotICB9Ci19Ci0KLS8vIFN0b3JlcyB0aGUgbWluaW1hbCByYW5nZSB0aGF0IGNvdmVycyBh
bGwgZW50cmllcyBpbiBpbnB1dHMxIGFuZCBpbnB1dHMyCi0vLyBpbiAqc21hbGxlc3QsICpsYXJn
ZXN0LgotLy8gUkVRVUlSRVM6IGlucHV0cyBpcyBub3QgZW1wdHkKLXZvaWQgVmVyc2lvblNldDo6
R2V0UmFuZ2UyKGNvbnN0IHN0ZDo6dmVjdG9yPEZpbGVNZXRhRGF0YSo+JiBpbnB1dHMxLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8RmlsZU1ldGFEYXRhKj4m
IGlucHV0czIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbEtleSogc21hbGxl
c3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbEtleSogbGFyZ2VzdCkgewot
ICBzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEqPiBhbGwgPSBpbnB1dHMxOwotICBhbGwuaW5zZXJ0
KGFsbC5lbmQoKSwgaW5wdXRzMi5iZWdpbigpLCBpbnB1dHMyLmVuZCgpKTsKLSAgR2V0UmFuZ2Uo
YWxsLCBzbWFsbGVzdCwgbGFyZ2VzdCk7Ci19Ci0KLUl0ZXJhdG9yKiBWZXJzaW9uU2V0OjpNYWtl
SW5wdXRJdGVyYXRvcihDb21wYWN0aW9uKiBjKSB7Ci0gIFJlYWRPcHRpb25zIG9wdGlvbnM7Ci0g
IG9wdGlvbnMudmVyaWZ5X2NoZWNrc3VtcyA9IG9wdGlvbnNfLT5wYXJhbm9pZF9jaGVja3M7Ci0g
IG9wdGlvbnMuZmlsbF9jYWNoZSA9IGZhbHNlOwotCi0gIC8vIExldmVsLTAgZmlsZXMgaGF2ZSB0
byBiZSBtZXJnZWQgdG9nZXRoZXIuICBGb3Igb3RoZXIgbGV2ZWxzLAotICAvLyB3ZSB3aWxsIG1h
a2UgYSBjb25jYXRlbmF0aW5nIGl0ZXJhdG9yIHBlciBsZXZlbC4KLSAgLy8gVE9ETyhvcHQpOiB1
c2UgY29uY2F0ZW5hdGluZyBpdGVyYXRvciBmb3IgbGV2ZWwtMCBpZiB0aGVyZSBpcyBubyBvdmVy
bGFwCi0gIGNvbnN0IGludCBzcGFjZSA9IChjLT5sZXZlbCgpID09IDAgPyBjLT5pbnB1dHNfWzBd
LnNpemUoKSArIDEgOiAyKTsKLSAgSXRlcmF0b3IqKiBsaXN0ID0gbmV3IEl0ZXJhdG9yKltzcGFj
ZV07Ci0gIGludCBudW0gPSAwOwotICBmb3IgKGludCB3aGljaCA9IDA7IHdoaWNoIDwgMjsgd2hp
Y2grKykgewotICAgIGlmICghYy0+aW5wdXRzX1t3aGljaF0uZW1wdHkoKSkgewotICAgICAgaWYg
KGMtPmxldmVsKCkgKyB3aGljaCA9PSAwKSB7Ci0gICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEZp
bGVNZXRhRGF0YSo+JiBmaWxlcyA9IGMtPmlucHV0c19bd2hpY2hdOwotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGZpbGVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgbGlzdFtudW0r
K10gPSB0YWJsZV9jYWNoZV8tPk5ld0l0ZXJhdG9yKAotICAgICAgICAgICAgICBvcHRpb25zLCBm
aWxlc1tpXS0+bnVtYmVyLCBmaWxlc1tpXS0+ZmlsZV9zaXplKTsKLSAgICAgICAgfQotICAgICAg
fSBlbHNlIHsKLSAgICAgICAgLy8gQ3JlYXRlIGNvbmNhdGVuYXRpbmcgaXRlcmF0b3IgZm9yIHRo
ZSBmaWxlcyBmcm9tIHRoaXMgbGV2ZWwKLSAgICAgICAgbGlzdFtudW0rK10gPSBOZXdUd29MZXZl
bEl0ZXJhdG9yKAotICAgICAgICAgICAgbmV3IFZlcnNpb246OkxldmVsRmlsZU51bUl0ZXJhdG9y
KGljbXBfLCAmYy0+aW5wdXRzX1t3aGljaF0pLAotICAgICAgICAgICAgJkdldEZpbGVJdGVyYXRv
ciwgdGFibGVfY2FjaGVfLCBvcHRpb25zKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgYXNzZXJ0
KG51bSA8PSBzcGFjZSk7Ci0gIEl0ZXJhdG9yKiByZXN1bHQgPSBOZXdNZXJnaW5nSXRlcmF0b3Io
JmljbXBfLCBsaXN0LCBudW0pOwotICBkZWxldGVbXSBsaXN0OwotICByZXR1cm4gcmVzdWx0Owot
fQotCi1Db21wYWN0aW9uKiBWZXJzaW9uU2V0OjpQaWNrQ29tcGFjdGlvbigpIHsKLSAgQ29tcGFj
dGlvbiogYzsKLSAgaW50IGxldmVsOwotCi0gIC8vIFdlIHByZWZlciBjb21wYWN0aW9ucyB0cmln
Z2VyZWQgYnkgdG9vIG11Y2ggZGF0YSBpbiBhIGxldmVsIG92ZXIKLSAgLy8gdGhlIGNvbXBhY3Rp
b25zIHRyaWdnZXJlZCBieSBzZWVrcy4KLSAgY29uc3QgYm9vbCBzaXplX2NvbXBhY3Rpb24gPSAo
Y3VycmVudF8tPmNvbXBhY3Rpb25fc2NvcmVfID49IDEpOwotICBjb25zdCBib29sIHNlZWtfY29t
cGFjdGlvbiA9IChjdXJyZW50Xy0+ZmlsZV90b19jb21wYWN0XyAhPSBOVUxMKTsKLSAgaWYgKHNp
emVfY29tcGFjdGlvbikgewotICAgIGxldmVsID0gY3VycmVudF8tPmNvbXBhY3Rpb25fbGV2ZWxf
OwotICAgIGFzc2VydChsZXZlbCA+PSAwKTsKLSAgICBhc3NlcnQobGV2ZWwrMSA8IGNvbmZpZzo6
a051bUxldmVscyk7Ci0gICAgYyA9IG5ldyBDb21wYWN0aW9uKGxldmVsKTsKLQotICAgIC8vIFBp
Y2sgdGhlIGZpcnN0IGZpbGUgdGhhdCBjb21lcyBhZnRlciBjb21wYWN0X3BvaW50ZXJfW2xldmVs
XQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY3VycmVudF8tPmZpbGVzX1tsZXZlbF0uc2l6
ZSgpOyBpKyspIHsKLSAgICAgIEZpbGVNZXRhRGF0YSogZiA9IGN1cnJlbnRfLT5maWxlc19bbGV2
ZWxdW2ldOwotICAgICAgaWYgKGNvbXBhY3RfcG9pbnRlcl9bbGV2ZWxdLmVtcHR5KCkgfHwKLSAg
ICAgICAgICBpY21wXy5Db21wYXJlKGYtPmxhcmdlc3QuRW5jb2RlKCksIGNvbXBhY3RfcG9pbnRl
cl9bbGV2ZWxdKSA+IDApIHsKLSAgICAgICAgYy0+aW5wdXRzX1swXS5wdXNoX2JhY2soZik7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoYy0+aW5wdXRzX1swXS5lbXB0
eSgpKSB7Ci0gICAgICAvLyBXcmFwLWFyb3VuZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBrZXkg
c3BhY2UKLSAgICAgIGMtPmlucHV0c19bMF0ucHVzaF9iYWNrKGN1cnJlbnRfLT5maWxlc19bbGV2
ZWxdWzBdKTsKLSAgICB9Ci0gIH0gZWxzZSBpZiAoc2Vla19jb21wYWN0aW9uKSB7Ci0gICAgbGV2
ZWwgPSBjdXJyZW50Xy0+ZmlsZV90b19jb21wYWN0X2xldmVsXzsKLSAgICBjID0gbmV3IENvbXBh
Y3Rpb24obGV2ZWwpOwotICAgIGMtPmlucHV0c19bMF0ucHVzaF9iYWNrKGN1cnJlbnRfLT5maWxl
X3RvX2NvbXBhY3RfKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIGMt
PmlucHV0X3ZlcnNpb25fID0gY3VycmVudF87Ci0gIGMtPmlucHV0X3ZlcnNpb25fLT5SZWYoKTsK
LQotICAvLyBGaWxlcyBpbiBsZXZlbCAwIG1heSBvdmVybGFwIGVhY2ggb3RoZXIsIHNvIHBpY2sg
dXAgYWxsIG92ZXJsYXBwaW5nIG9uZXMKLSAgaWYgKGxldmVsID09IDApIHsKLSAgICBJbnRlcm5h
bEtleSBzbWFsbGVzdCwgbGFyZ2VzdDsKLSAgICBHZXRSYW5nZShjLT5pbnB1dHNfWzBdLCAmc21h
bGxlc3QsICZsYXJnZXN0KTsKLSAgICAvLyBOb3RlIHRoYXQgdGhlIG5leHQgY2FsbCB3aWxsIGRp
c2NhcmQgdGhlIGZpbGUgd2UgcGxhY2VkIGluCi0gICAgLy8gYy0+aW5wdXRzX1swXSBlYXJsaWVy
IGFuZCByZXBsYWNlIGl0IHdpdGggYW4gb3ZlcmxhcHBpbmcgc2V0Ci0gICAgLy8gd2hpY2ggd2ls
bCBpbmNsdWRlIHRoZSBwaWNrZWQgZmlsZS4KLSAgICBjdXJyZW50Xy0+R2V0T3ZlcmxhcHBpbmdJ
bnB1dHMoMCwgJnNtYWxsZXN0LCAmbGFyZ2VzdCwgJmMtPmlucHV0c19bMF0pOwotICAgIGFzc2Vy
dCghYy0+aW5wdXRzX1swXS5lbXB0eSgpKTsKLSAgfQotCi0gIFNldHVwT3RoZXJJbnB1dHMoYyk7
Ci0KLSAgcmV0dXJuIGM7Ci19Ci0KLXZvaWQgVmVyc2lvblNldDo6U2V0dXBPdGhlcklucHV0cyhD
b21wYWN0aW9uKiBjKSB7Ci0gIGNvbnN0IGludCBsZXZlbCA9IGMtPmxldmVsKCk7Ci0gIEludGVy
bmFsS2V5IHNtYWxsZXN0LCBsYXJnZXN0OwotICBHZXRSYW5nZShjLT5pbnB1dHNfWzBdLCAmc21h
bGxlc3QsICZsYXJnZXN0KTsKLQotICBjdXJyZW50Xy0+R2V0T3ZlcmxhcHBpbmdJbnB1dHMobGV2
ZWwrMSwgJnNtYWxsZXN0LCAmbGFyZ2VzdCwgJmMtPmlucHV0c19bMV0pOwotCi0gIC8vIEdldCBl
bnRpcmUgcmFuZ2UgY292ZXJlZCBieSBjb21wYWN0aW9uCi0gIEludGVybmFsS2V5IGFsbF9zdGFy
dCwgYWxsX2xpbWl0OwotICBHZXRSYW5nZTIoYy0+aW5wdXRzX1swXSwgYy0+aW5wdXRzX1sxXSwg
JmFsbF9zdGFydCwgJmFsbF9saW1pdCk7Ci0KLSAgLy8gU2VlIGlmIHdlIGNhbiBncm93IHRoZSBu
dW1iZXIgb2YgaW5wdXRzIGluICJsZXZlbCIgd2l0aG91dAotICAvLyBjaGFuZ2luZyB0aGUgbnVt
YmVyIG9mICJsZXZlbCsxIiBmaWxlcyB3ZSBwaWNrIHVwLgotICBpZiAoIWMtPmlucHV0c19bMV0u
ZW1wdHkoKSkgewotICAgIHN0ZDo6dmVjdG9yPEZpbGVNZXRhRGF0YSo+IGV4cGFuZGVkMDsKLSAg
ICBjdXJyZW50Xy0+R2V0T3ZlcmxhcHBpbmdJbnB1dHMobGV2ZWwsICZhbGxfc3RhcnQsICZhbGxf
bGltaXQsICZleHBhbmRlZDApOwotICAgIGNvbnN0IGludDY0X3QgaW5wdXRzMF9zaXplID0gVG90
YWxGaWxlU2l6ZShjLT5pbnB1dHNfWzBdKTsKLSAgICBjb25zdCBpbnQ2NF90IGlucHV0czFfc2l6
ZSA9IFRvdGFsRmlsZVNpemUoYy0+aW5wdXRzX1sxXSk7Ci0gICAgY29uc3QgaW50NjRfdCBleHBh
bmRlZDBfc2l6ZSA9IFRvdGFsRmlsZVNpemUoZXhwYW5kZWQwKTsKLSAgICBpZiAoZXhwYW5kZWQw
LnNpemUoKSA+IGMtPmlucHV0c19bMF0uc2l6ZSgpICYmCi0gICAgICAgIGlucHV0czFfc2l6ZSAr
IGV4cGFuZGVkMF9zaXplIDwga0V4cGFuZGVkQ29tcGFjdGlvbkJ5dGVTaXplTGltaXQpIHsKLSAg
ICAgIEludGVybmFsS2V5IG5ld19zdGFydCwgbmV3X2xpbWl0OwotICAgICAgR2V0UmFuZ2UoZXhw
YW5kZWQwLCAmbmV3X3N0YXJ0LCAmbmV3X2xpbWl0KTsKLSAgICAgIHN0ZDo6dmVjdG9yPEZpbGVN
ZXRhRGF0YSo+IGV4cGFuZGVkMTsKLSAgICAgIGN1cnJlbnRfLT5HZXRPdmVybGFwcGluZ0lucHV0
cyhsZXZlbCsxLCAmbmV3X3N0YXJ0LCAmbmV3X2xpbWl0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZleHBhbmRlZDEpOwotICAgICAgaWYgKGV4cGFuZGVkMS5zaXplKCkg
PT0gYy0+aW5wdXRzX1sxXS5zaXplKCkpIHsKLSAgICAgICAgTG9nKG9wdGlvbnNfLT5pbmZvX2xv
ZywKLSAgICAgICAgICAgICJFeHBhbmRpbmdAJWQgJWQrJWQgKCVsZCslbGQgYnl0ZXMpIHRvICVk
KyVkICglbGQrJWxkIGJ5dGVzKVxuIiwKLSAgICAgICAgICAgIGxldmVsLAotICAgICAgICAgICAg
aW50KGMtPmlucHV0c19bMF0uc2l6ZSgpKSwKLSAgICAgICAgICAgIGludChjLT5pbnB1dHNfWzFd
LnNpemUoKSksCi0gICAgICAgICAgICBsb25nKGlucHV0czBfc2l6ZSksIGxvbmcoaW5wdXRzMV9z
aXplKSwKLSAgICAgICAgICAgIGludChleHBhbmRlZDAuc2l6ZSgpKSwKLSAgICAgICAgICAgIGlu
dChleHBhbmRlZDEuc2l6ZSgpKSwKLSAgICAgICAgICAgIGxvbmcoZXhwYW5kZWQwX3NpemUpLCBs
b25nKGlucHV0czFfc2l6ZSkpOwotICAgICAgICBzbWFsbGVzdCA9IG5ld19zdGFydDsKLSAgICAg
ICAgbGFyZ2VzdCA9IG5ld19saW1pdDsKLSAgICAgICAgYy0+aW5wdXRzX1swXSA9IGV4cGFuZGVk
MDsKLSAgICAgICAgYy0+aW5wdXRzX1sxXSA9IGV4cGFuZGVkMTsKLSAgICAgICAgR2V0UmFuZ2Uy
KGMtPmlucHV0c19bMF0sIGMtPmlucHV0c19bMV0sICZhbGxfc3RhcnQsICZhbGxfbGltaXQpOwot
ICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIENvbXB1dGUgdGhlIHNldCBvZiBncmFuZHBhcmVu
dCBmaWxlcyB0aGF0IG92ZXJsYXAgdGhpcyBjb21wYWN0aW9uCi0gIC8vIChwYXJlbnQgPT0gbGV2
ZWwrMTsgZ3JhbmRwYXJlbnQgPT0gbGV2ZWwrMikKLSAgaWYgKGxldmVsICsgMiA8IGNvbmZpZzo6
a051bUxldmVscykgewotICAgIGN1cnJlbnRfLT5HZXRPdmVybGFwcGluZ0lucHV0cyhsZXZlbCAr
IDIsICZhbGxfc3RhcnQsICZhbGxfbGltaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZjLT5ncmFuZHBhcmVudHNfKTsKLSAgfQotCi0gIGlmIChmYWxzZSkgewotICAgIExv
ZyhvcHRpb25zXy0+aW5mb19sb2csICJDb21wYWN0aW5nICVkICclcycgLi4gJyVzJyIsCi0gICAg
ICAgIGxldmVsLAotICAgICAgICBzbWFsbGVzdC5EZWJ1Z1N0cmluZygpLmNfc3RyKCksCi0gICAg
ICAgIGxhcmdlc3QuRGVidWdTdHJpbmcoKS5jX3N0cigpKTsKLSAgfQotCi0gIC8vIFVwZGF0ZSB0
aGUgcGxhY2Ugd2hlcmUgd2Ugd2lsbCBkbyB0aGUgbmV4dCBjb21wYWN0aW9uIGZvciB0aGlzIGxl
dmVsLgotICAvLyBXZSB1cGRhdGUgdGhpcyBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIHdhaXRpbmcg
Zm9yIHRoZSBWZXJzaW9uRWRpdAotICAvLyB0byBiZSBhcHBsaWVkIHNvIHRoYXQgaWYgdGhlIGNv
bXBhY3Rpb24gZmFpbHMsIHdlIHdpbGwgdHJ5IGEgZGlmZmVyZW50Ci0gIC8vIGtleSByYW5nZSBu
ZXh0IHRpbWUuCi0gIGNvbXBhY3RfcG9pbnRlcl9bbGV2ZWxdID0gbGFyZ2VzdC5FbmNvZGUoKS5U
b1N0cmluZygpOwotICBjLT5lZGl0Xy5TZXRDb21wYWN0UG9pbnRlcihsZXZlbCwgbGFyZ2VzdCk7
Ci19Ci0KLUNvbXBhY3Rpb24qIFZlcnNpb25TZXQ6OkNvbXBhY3RSYW5nZSgKLSAgICBpbnQgbGV2
ZWwsCi0gICAgY29uc3QgSW50ZXJuYWxLZXkqIGJlZ2luLAotICAgIGNvbnN0IEludGVybmFsS2V5
KiBlbmQpIHsKLSAgc3RkOjp2ZWN0b3I8RmlsZU1ldGFEYXRhKj4gaW5wdXRzOwotICBjdXJyZW50
Xy0+R2V0T3ZlcmxhcHBpbmdJbnB1dHMobGV2ZWwsIGJlZ2luLCBlbmQsICZpbnB1dHMpOwotICBp
ZiAoaW5wdXRzLmVtcHR5KCkpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIC8vIEF2b2lk
IGNvbXBhY3RpbmcgdG9vIG11Y2ggaW4gb25lIHNob3QgaW4gY2FzZSB0aGUgcmFuZ2UgaXMgbGFy
Z2UuCi0gIGNvbnN0IHVpbnQ2NF90IGxpbWl0ID0gTWF4RmlsZVNpemVGb3JMZXZlbChsZXZlbCk7
Ci0gIHVpbnQ2NF90IHRvdGFsID0gMDsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnB1dHMu
c2l6ZSgpOyBpKyspIHsKLSAgICB1aW50NjRfdCBzID0gaW5wdXRzW2ldLT5maWxlX3NpemU7Ci0g
ICAgdG90YWwgKz0gczsKLSAgICBpZiAodG90YWwgPj0gbGltaXQpIHsKLSAgICAgIGlucHV0cy5y
ZXNpemUoaSArIDEpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgQ29tcGFjdGlvbiog
YyA9IG5ldyBDb21wYWN0aW9uKGxldmVsKTsKLSAgYy0+aW5wdXRfdmVyc2lvbl8gPSBjdXJyZW50
XzsKLSAgYy0+aW5wdXRfdmVyc2lvbl8tPlJlZigpOwotICBjLT5pbnB1dHNfWzBdID0gaW5wdXRz
OwotICBTZXR1cE90aGVySW5wdXRzKGMpOwotICByZXR1cm4gYzsKLX0KLQotQ29tcGFjdGlvbjo6
Q29tcGFjdGlvbihpbnQgbGV2ZWwpCi0gICAgOiBsZXZlbF8obGV2ZWwpLAotICAgICAgbWF4X291
dHB1dF9maWxlX3NpemVfKE1heEZpbGVTaXplRm9yTGV2ZWwobGV2ZWwpKSwKLSAgICAgIGlucHV0
X3ZlcnNpb25fKE5VTEwpLAotICAgICAgZ3JhbmRwYXJlbnRfaW5kZXhfKDApLAotICAgICAgc2Vl
bl9rZXlfKGZhbHNlKSwKLSAgICAgIG92ZXJsYXBwZWRfYnl0ZXNfKDApIHsKLSAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb25maWc6OmtOdW1MZXZlbHM7IGkrKykgewotICAgIGxldmVsX3B0cnNfW2ld
ID0gMDsKLSAgfQotfQotCi1Db21wYWN0aW9uOjp+Q29tcGFjdGlvbigpIHsKLSAgaWYgKGlucHV0
X3ZlcnNpb25fICE9IE5VTEwpIHsKLSAgICBpbnB1dF92ZXJzaW9uXy0+VW5yZWYoKTsKLSAgfQot
fQotCi1ib29sIENvbXBhY3Rpb246OklzVHJpdmlhbE1vdmUoKSBjb25zdCB7Ci0gIC8vIEF2b2lk
IGEgbW92ZSBpZiB0aGVyZSBpcyBsb3RzIG9mIG92ZXJsYXBwaW5nIGdyYW5kcGFyZW50IGRhdGEu
Ci0gIC8vIE90aGVyd2lzZSwgdGhlIG1vdmUgY291bGQgY3JlYXRlIGEgcGFyZW50IGZpbGUgdGhh
dCB3aWxsIHJlcXVpcmUKLSAgLy8gYSB2ZXJ5IGV4cGVuc2l2ZSBtZXJnZSBsYXRlciBvbi4KLSAg
cmV0dXJuIChudW1faW5wdXRfZmlsZXMoMCkgPT0gMSAmJgotICAgICAgICAgIG51bV9pbnB1dF9m
aWxlcygxKSA9PSAwICYmCi0gICAgICAgICAgVG90YWxGaWxlU2l6ZShncmFuZHBhcmVudHNfKSA8
PSBrTWF4R3JhbmRQYXJlbnRPdmVybGFwQnl0ZXMpOwotfQotCi12b2lkIENvbXBhY3Rpb246OkFk
ZElucHV0RGVsZXRpb25zKFZlcnNpb25FZGl0KiBlZGl0KSB7Ci0gIGZvciAoaW50IHdoaWNoID0g
MDsgd2hpY2ggPCAyOyB3aGljaCsrKSB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnB1
dHNfW3doaWNoXS5zaXplKCk7IGkrKykgewotICAgICAgZWRpdC0+RGVsZXRlRmlsZShsZXZlbF8g
KyB3aGljaCwgaW5wdXRzX1t3aGljaF1baV0tPm51bWJlcik7Ci0gICAgfQotICB9Ci19Ci0KLWJv
b2wgQ29tcGFjdGlvbjo6SXNCYXNlTGV2ZWxGb3JLZXkoY29uc3QgU2xpY2UmIHVzZXJfa2V5KSB7
Ci0gIC8vIE1heWJlIHVzZSBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgcmlnaHQgZW50cnkgaW5zdGVh
ZCBvZiBsaW5lYXIgc2VhcmNoPwotICBjb25zdCBDb21wYXJhdG9yKiB1c2VyX2NtcCA9IGlucHV0
X3ZlcnNpb25fLT52c2V0Xy0+aWNtcF8udXNlcl9jb21wYXJhdG9yKCk7Ci0gIGZvciAoaW50IGx2
bCA9IGxldmVsXyArIDI7IGx2bCA8IGNvbmZpZzo6a051bUxldmVsczsgbHZsKyspIHsKLSAgICBj
b25zdCBzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEqPiYgZmlsZXMgPSBpbnB1dF92ZXJzaW9uXy0+
ZmlsZXNfW2x2bF07Ci0gICAgZm9yICg7IGxldmVsX3B0cnNfW2x2bF0gPCBmaWxlcy5zaXplKCk7
ICkgewotICAgICAgRmlsZU1ldGFEYXRhKiBmID0gZmlsZXNbbGV2ZWxfcHRyc19bbHZsXV07Ci0g
ICAgICBpZiAodXNlcl9jbXAtPkNvbXBhcmUodXNlcl9rZXksIGYtPmxhcmdlc3QudXNlcl9rZXko
KSkgPD0gMCkgewotICAgICAgICAvLyBXZSd2ZSBhZHZhbmNlZCBmYXIgZW5vdWdoCi0gICAgICAg
IGlmICh1c2VyX2NtcC0+Q29tcGFyZSh1c2VyX2tleSwgZi0+c21hbGxlc3QudXNlcl9rZXkoKSkg
Pj0gMCkgewotICAgICAgICAgIC8vIEtleSBmYWxscyBpbiB0aGlzIGZpbGUncyByYW5nZSwgc28g
ZGVmaW5pdGVseSBub3QgYmFzZSBsZXZlbAotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGxldmVsX3B0cnNfW2x2bF0rKzsK
LSAgICB9Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ29tcGFjdGlvbjo6U2hvdWxk
U3RvcEJlZm9yZShjb25zdCBTbGljZSYgaW50ZXJuYWxfa2V5KSB7Ci0gIC8vIFNjYW4gdG8gZmlu
ZCBlYXJsaWVzdCBncmFuZHBhcmVudCBmaWxlIHRoYXQgY29udGFpbnMga2V5LgotICBjb25zdCBJ
bnRlcm5hbEtleUNvbXBhcmF0b3IqIGljbXAgPSAmaW5wdXRfdmVyc2lvbl8tPnZzZXRfLT5pY21w
XzsKLSAgd2hpbGUgKGdyYW5kcGFyZW50X2luZGV4XyA8IGdyYW5kcGFyZW50c18uc2l6ZSgpICYm
Ci0gICAgICBpY21wLT5Db21wYXJlKGludGVybmFsX2tleSwKLSAgICAgICAgICAgICAgICAgICAg
Z3JhbmRwYXJlbnRzX1tncmFuZHBhcmVudF9pbmRleF9dLT5sYXJnZXN0LkVuY29kZSgpKSA+IDAp
IHsKLSAgICBpZiAoc2Vlbl9rZXlfKSB7Ci0gICAgICBvdmVybGFwcGVkX2J5dGVzXyArPSBncmFu
ZHBhcmVudHNfW2dyYW5kcGFyZW50X2luZGV4X10tPmZpbGVfc2l6ZTsKLSAgICB9Ci0gICAgZ3Jh
bmRwYXJlbnRfaW5kZXhfKys7Ci0gIH0KLSAgc2Vlbl9rZXlfID0gdHJ1ZTsKLQotICBpZiAob3Zl
cmxhcHBlZF9ieXRlc18gPiBrTWF4R3JhbmRQYXJlbnRPdmVybGFwQnl0ZXMpIHsKLSAgICAvLyBU
b28gbXVjaCBvdmVybGFwIGZvciBjdXJyZW50IG91dHB1dDsgc3RhcnQgbmV3IG91dHB1dAotICAg
IG92ZXJsYXBwZWRfYnl0ZXNfID0gMDsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfSBlbHNlIHsKLSAg
ICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KLQotdm9pZCBDb21wYWN0aW9uOjpSZWxlYXNlSW5wdXRz
KCkgewotICBpZiAoaW5wdXRfdmVyc2lvbl8gIT0gTlVMTCkgewotICAgIGlucHV0X3ZlcnNpb25f
LT5VbnJlZigpOwotICAgIGlucHV0X3ZlcnNpb25fID0gTlVMTDsKLSAgfQotfQotCi19ICAvLyBu
YW1lc3BhY2UgbGV2ZWxkYgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9k
Yi92ZXJzaW9uX3NldC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi92ZXJzaW9uX3Nl
dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDA4NGZkLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvdmVyc2lvbl9zZXQuaAorKysgL2Rldi9udWxs
CkBAIC0xLDM4MyArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250
cmlidXRvcnMuCi0vLwotLy8gVGhlIHJlcHJlc2VudGF0aW9uIG9mIGEgREJJbXBsIGNvbnNpc3Rz
IG9mIGEgc2V0IG9mIFZlcnNpb25zLiAgVGhlCi0vLyBuZXdlc3QgdmVyc2lvbiBpcyBjYWxsZWQg
ImN1cnJlbnQiLiAgT2xkZXIgdmVyc2lvbnMgbWF5IGJlIGtlcHQKLS8vIGFyb3VuZCB0byBwcm92
aWRlIGEgY29uc2lzdGVudCB2aWV3IHRvIGxpdmUgaXRlcmF0b3JzLgotLy8KLS8vIEVhY2ggVmVy
c2lvbiBrZWVwcyB0cmFjayBvZiBhIHNldCBvZiBUYWJsZSBmaWxlcyBwZXIgbGV2ZWwuICBUaGUK
LS8vIGVudGlyZSBzZXQgb2YgdmVyc2lvbnMgaXMgbWFpbnRhaW5lZCBpbiBhIFZlcnNpb25TZXQu
Ci0vLwotLy8gVmVyc2lvbixWZXJzaW9uU2V0IGFyZSB0aHJlYWQtY29tcGF0aWJsZSwgYnV0IHJl
cXVpcmUgZXh0ZXJuYWwKLS8vIHN5bmNocm9uaXphdGlvbiBvbiBhbGwgYWNjZXNzZXMuCi0KLSNp
Zm5kZWYgU1RPUkFHRV9MRVZFTERCX0RCX1ZFUlNJT05fU0VUX0hfCi0jZGVmaW5lIFNUT1JBR0Vf
TEVWRUxEQl9EQl9WRVJTSU9OX1NFVF9IXwotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPHNl
dD4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0jaW5jbHVkZSAiZGIvZGJmb3JtYXQuaCIKLSNpbmNsdWRl
ICJkYi92ZXJzaW9uX2VkaXQuaCIKLSNpbmNsdWRlICJwb3J0L3BvcnQuaCIKLSNpbmNsdWRlICJw
b3J0L3RocmVhZF9hbm5vdGF0aW9ucy5oIgotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7Ci0KLW5hbWVz
cGFjZSBsb2cgeyBjbGFzcyBXcml0ZXI7IH0KLQotY2xhc3MgQ29tcGFjdGlvbjsKLWNsYXNzIEl0
ZXJhdG9yOwotY2xhc3MgTWVtVGFibGU7Ci1jbGFzcyBUYWJsZUJ1aWxkZXI7Ci1jbGFzcyBUYWJs
ZUNhY2hlOwotY2xhc3MgVmVyc2lvbjsKLWNsYXNzIFZlcnNpb25TZXQ7Ci1jbGFzcyBXcml0YWJs
ZUZpbGU7Ci0KLS8vIFJldHVybiB0aGUgc21hbGxlc3QgaW5kZXggaSBzdWNoIHRoYXQgZmlsZXNb
aV0tPmxhcmdlc3QgPj0ga2V5LgotLy8gUmV0dXJuIGZpbGVzLnNpemUoKSBpZiB0aGVyZSBpcyBu
byBzdWNoIGZpbGUuCi0vLyBSRVFVSVJFUzogImZpbGVzIiBjb250YWlucyBhIHNvcnRlZCBsaXN0
IG9mIG5vbi1vdmVybGFwcGluZyBmaWxlcy4KLWV4dGVybiBpbnQgRmluZEZpbGUoY29uc3QgSW50
ZXJuYWxLZXlDb21wYXJhdG9yJiBpY21wLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6
OnZlY3RvcjxGaWxlTWV0YURhdGEqPiYgZmlsZXMsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0
IFNsaWNlJiBrZXkpOwotCi0vLyBSZXR1cm5zIHRydWUgaWZmIHNvbWUgZmlsZSBpbiAiZmlsZXMi
IG92ZXJsYXBzIHRoZSB1c2VyIGtleSByYW5nZQotLy8gWypzbWFsbGVzdCwqbGFyZ2VzdF0uCi0v
LyBzbWFsbGVzdD09TlVMTCByZXByZXNlbnRzIGEga2V5IHNtYWxsZXIgdGhhbiBhbGwga2V5cyBp
biB0aGUgREIuCi0vLyBsYXJnZXN0PT1OVUxMIHJlcHJlc2VudHMgYSBrZXkgbGFyZ2VzdCB0aGFu
IGFsbCBrZXlzIGluIHRoZSBEQi4KLS8vIFJFUVVJUkVTOiBJZiBkaXNqb2ludF9zb3J0ZWRfZmls
ZXMsIGZpbGVzW10gY29udGFpbnMgZGlzam9pbnQgcmFuZ2VzCi0vLyAgICAgICAgICAgaW4gc29y
dGVkIG9yZGVyLgotZXh0ZXJuIGJvb2wgU29tZUZpbGVPdmVybGFwc1JhbmdlKAotICAgIGNvbnN0
IEludGVybmFsS2V5Q29tcGFyYXRvciYgaWNtcCwKLSAgICBib29sIGRpc2pvaW50X3NvcnRlZF9m
aWxlcywKLSAgICBjb25zdCBzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEqPiYgZmlsZXMsCi0gICAg
Y29uc3QgU2xpY2UqIHNtYWxsZXN0X3VzZXJfa2V5LAotICAgIGNvbnN0IFNsaWNlKiBsYXJnZXN0
X3VzZXJfa2V5KTsKLQotY2xhc3MgVmVyc2lvbiB7Ci0gcHVibGljOgotICAvLyBBcHBlbmQgdG8g
Kml0ZXJzIGEgc2VxdWVuY2Ugb2YgaXRlcmF0b3JzIHRoYXQgd2lsbAotICAvLyB5aWVsZCB0aGUg
Y29udGVudHMgb2YgdGhpcyBWZXJzaW9uIHdoZW4gbWVyZ2VkIHRvZ2V0aGVyLgotICAvLyBSRVFV
SVJFUzogVGhpcyB2ZXJzaW9uIGhhcyBiZWVuIHNhdmVkIChzZWUgVmVyc2lvblNldDo6U2F2ZVRv
KQotICB2b2lkIEFkZEl0ZXJhdG9ycyhjb25zdCBSZWFkT3B0aW9ucyYsIHN0ZDo6dmVjdG9yPEl0
ZXJhdG9yKj4qIGl0ZXJzKTsKLQotICAvLyBMb29rdXAgdGhlIHZhbHVlIGZvciBrZXkuICBJZiBm
b3VuZCwgc3RvcmUgaXQgaW4gKnZhbCBhbmQKLSAgLy8gcmV0dXJuIE9LLiAgRWxzZSByZXR1cm4g
YSBub24tT0sgc3RhdHVzLiAgRmlsbHMgKnN0YXRzLgotICAvLyBSRVFVSVJFUzogbG9jayBpcyBu
b3QgaGVsZAotICBzdHJ1Y3QgR2V0U3RhdHMgewotICAgIEZpbGVNZXRhRGF0YSogc2Vla19maWxl
OwotICAgIGludCBzZWVrX2ZpbGVfbGV2ZWw7Ci0gIH07Ci0gIFN0YXR1cyBHZXQoY29uc3QgUmVh
ZE9wdGlvbnMmLCBjb25zdCBMb29rdXBLZXkmIGtleSwgc3RkOjpzdHJpbmcqIHZhbCwKLSAgICAg
ICAgICAgICBHZXRTdGF0cyogc3RhdHMpOwotCi0gIC8vIEFkZHMgInN0YXRzIiBpbnRvIHRoZSBj
dXJyZW50IHN0YXRlLiAgUmV0dXJucyB0cnVlIGlmIGEgbmV3Ci0gIC8vIGNvbXBhY3Rpb24gbWF5
IG5lZWQgdG8gYmUgdHJpZ2dlcmVkLCBmYWxzZSBvdGhlcndpc2UuCi0gIC8vIFJFUVVJUkVTOiBs
b2NrIGlzIGhlbGQKLSAgYm9vbCBVcGRhdGVTdGF0cyhjb25zdCBHZXRTdGF0cyYgc3RhdHMpOwot
Ci0gIC8vIFJlZmVyZW5jZSBjb3VudCBtYW5hZ2VtZW50IChzbyBWZXJzaW9ucyBkbyBub3QgZGlz
YXBwZWFyIG91dCBmcm9tCi0gIC8vIHVuZGVyIGxpdmUgaXRlcmF0b3JzKQotICB2b2lkIFJlZigp
OwotICB2b2lkIFVucmVmKCk7Ci0KLSAgdm9pZCBHZXRPdmVybGFwcGluZ0lucHV0cygKLSAgICAg
IGludCBsZXZlbCwKLSAgICAgIGNvbnN0IEludGVybmFsS2V5KiBiZWdpbiwgICAgICAgICAvLyBO
VUxMIG1lYW5zIGJlZm9yZSBhbGwga2V5cwotICAgICAgY29uc3QgSW50ZXJuYWxLZXkqIGVuZCwg
ICAgICAgICAgIC8vIE5VTEwgbWVhbnMgYWZ0ZXIgYWxsIGtleXMKLSAgICAgIHN0ZDo6dmVjdG9y
PEZpbGVNZXRhRGF0YSo+KiBpbnB1dHMpOwotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZmYgc29tZSBm
aWxlIGluIHRoZSBzcGVjaWZpZWQgbGV2ZWwgb3ZlcmxhcHMKLSAgLy8gc29tZSBwYXJ0IG9mIFsq
c21hbGxlc3RfdXNlcl9rZXksKmxhcmdlc3RfdXNlcl9rZXldLgotICAvLyBzbWFsbGVzdF91c2Vy
X2tleT09TlVMTCByZXByZXNlbnRzIGEga2V5IHNtYWxsZXIgdGhhbiBhbGwga2V5cyBpbiB0aGUg
REIuCi0gIC8vIGxhcmdlc3RfdXNlcl9rZXk9PU5VTEwgcmVwcmVzZW50cyBhIGtleSBsYXJnZXN0
IHRoYW4gYWxsIGtleXMgaW4gdGhlIERCLgotICBib29sIE92ZXJsYXBJbkxldmVsKGludCBsZXZl
bCwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTbGljZSogc21hbGxlc3RfdXNlcl9rZXks
Ci0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2xpY2UqIGxhcmdlc3RfdXNlcl9rZXkpOwot
Ci0gIC8vIFJldHVybiB0aGUgbGV2ZWwgYXQgd2hpY2ggd2Ugc2hvdWxkIHBsYWNlIGEgbmV3IG1l
bXRhYmxlIGNvbXBhY3Rpb24KLSAgLy8gcmVzdWx0IHRoYXQgY292ZXJzIHRoZSByYW5nZSBbc21h
bGxlc3RfdXNlcl9rZXksbGFyZ2VzdF91c2VyX2tleV0uCi0gIGludCBQaWNrTGV2ZWxGb3JNZW1U
YWJsZU91dHB1dChjb25zdCBTbGljZSYgc21hbGxlc3RfdXNlcl9rZXksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTbGljZSYgbGFyZ2VzdF91c2VyX2tleSk7Ci0KLSAg
aW50IE51bUZpbGVzKGludCBsZXZlbCkgY29uc3QgeyByZXR1cm4gZmlsZXNfW2xldmVsXS5zaXpl
KCk7IH0KLQotICAvLyBSZXR1cm4gYSBodW1hbiByZWFkYWJsZSBzdHJpbmcgdGhhdCBkZXNjcmli
ZXMgdGhpcyB2ZXJzaW9uJ3MgY29udGVudHMuCi0gIHN0ZDo6c3RyaW5nIERlYnVnU3RyaW5nKCkg
Y29uc3Q7Ci0KLSBwcml2YXRlOgotICBmcmllbmQgY2xhc3MgQ29tcGFjdGlvbjsKLSAgZnJpZW5k
IGNsYXNzIFZlcnNpb25TZXQ7Ci0KLSAgY2xhc3MgTGV2ZWxGaWxlTnVtSXRlcmF0b3I7Ci0gIEl0
ZXJhdG9yKiBOZXdDb25jYXRlbmF0aW5nSXRlcmF0b3IoY29uc3QgUmVhZE9wdGlvbnMmLCBpbnQg
bGV2ZWwpIGNvbnN0OwotCi0gIFZlcnNpb25TZXQqIHZzZXRfOyAgICAgICAgICAgIC8vIFZlcnNp
b25TZXQgdG8gd2hpY2ggdGhpcyBWZXJzaW9uIGJlbG9uZ3MKLSAgVmVyc2lvbiogbmV4dF87ICAg
ICAgICAgICAgICAgLy8gTmV4dCB2ZXJzaW9uIGluIGxpbmtlZCBsaXN0Ci0gIFZlcnNpb24qIHBy
ZXZfOyAgICAgICAgICAgICAgIC8vIFByZXZpb3VzIHZlcnNpb24gaW4gbGlua2VkIGxpc3QKLSAg
aW50IHJlZnNfOyAgICAgICAgICAgICAgICAgICAgLy8gTnVtYmVyIG9mIGxpdmUgcmVmcyB0byB0
aGlzIHZlcnNpb24KLQotICAvLyBMaXN0IG9mIGZpbGVzIHBlciBsZXZlbAotICBzdGQ6OnZlY3Rv
cjxGaWxlTWV0YURhdGEqPiBmaWxlc19bY29uZmlnOjprTnVtTGV2ZWxzXTsKLQotICAvLyBOZXh0
IGZpbGUgdG8gY29tcGFjdCBiYXNlZCBvbiBzZWVrIHN0YXRzLgotICBGaWxlTWV0YURhdGEqIGZp
bGVfdG9fY29tcGFjdF87Ci0gIGludCBmaWxlX3RvX2NvbXBhY3RfbGV2ZWxfOwotCi0gIC8vIExl
dmVsIHRoYXQgc2hvdWxkIGJlIGNvbXBhY3RlZCBuZXh0IGFuZCBpdHMgY29tcGFjdGlvbiBzY29y
ZS4KLSAgLy8gU2NvcmUgPCAxIG1lYW5zIGNvbXBhY3Rpb24gaXMgbm90IHN0cmljdGx5IG5lZWRl
ZC4gIFRoZXNlIGZpZWxkcwotICAvLyBhcmUgaW5pdGlhbGl6ZWQgYnkgRmluYWxpemUoKS4KLSAg
ZG91YmxlIGNvbXBhY3Rpb25fc2NvcmVfOwotICBpbnQgY29tcGFjdGlvbl9sZXZlbF87Ci0KLSAg
ZXhwbGljaXQgVmVyc2lvbihWZXJzaW9uU2V0KiB2c2V0KQotICAgICAgOiB2c2V0Xyh2c2V0KSwg
bmV4dF8odGhpcyksIHByZXZfKHRoaXMpLCByZWZzXygwKSwKLSAgICAgICAgZmlsZV90b19jb21w
YWN0XyhOVUxMKSwKLSAgICAgICAgZmlsZV90b19jb21wYWN0X2xldmVsXygtMSksCi0gICAgICAg
IGNvbXBhY3Rpb25fc2NvcmVfKC0xKSwKLSAgICAgICAgY29tcGFjdGlvbl9sZXZlbF8oLTEpIHsK
LSAgfQotCi0gIH5WZXJzaW9uKCk7Ci0KLSAgLy8gTm8gY29weWluZyBhbGxvd2VkCi0gIFZlcnNp
b24oY29uc3QgVmVyc2lvbiYpOwotICB2b2lkIG9wZXJhdG9yPShjb25zdCBWZXJzaW9uJik7Ci19
OwotCi1jbGFzcyBWZXJzaW9uU2V0IHsKLSBwdWJsaWM6Ci0gIFZlcnNpb25TZXQoY29uc3Qgc3Rk
OjpzdHJpbmcmIGRibmFtZSwKLSAgICAgICAgICAgICBjb25zdCBPcHRpb25zKiBvcHRpb25zLAot
ICAgICAgICAgICAgIFRhYmxlQ2FjaGUqIHRhYmxlX2NhY2hlLAotICAgICAgICAgICAgIGNvbnN0
IEludGVybmFsS2V5Q29tcGFyYXRvciopOwotICB+VmVyc2lvblNldCgpOwotCi0gIC8vIEFwcGx5
ICplZGl0IHRvIHRoZSBjdXJyZW50IHZlcnNpb24gdG8gZm9ybSBhIG5ldyBkZXNjcmlwdG9yIHRo
YXQKLSAgLy8gaXMgYm90aCBzYXZlZCB0byBwZXJzaXN0ZW50IHN0YXRlIGFuZCBpbnN0YWxsZWQg
YXMgdGhlIG5ldwotICAvLyBjdXJyZW50IHZlcnNpb24uICBXaWxsIHJlbGVhc2UgKm11IHdoaWxl
IGFjdHVhbGx5IHdyaXRpbmcgdG8gdGhlIGZpbGUuCi0gIC8vIFJFUVVJUkVTOiAqbXUgaXMgaGVs
ZCBvbiBlbnRyeS4KLSAgLy8gUkVRVUlSRVM6IG5vIG90aGVyIHRocmVhZCBjb25jdXJyZW50bHkg
Y2FsbHMgTG9nQW5kQXBwbHkoKQotICBTdGF0dXMgTG9nQW5kQXBwbHkoVmVyc2lvbkVkaXQqIGVk
aXQsIHBvcnQ6Ok11dGV4KiBtdSkKLSAgICAgIEVYQ0xVU0lWRV9MT0NLU19SRVFVSVJFRChtdSk7
Ci0KLSAgLy8gUmVjb3ZlciB0aGUgbGFzdCBzYXZlZCBkZXNjcmlwdG9yIGZyb20gcGVyc2lzdGVu
dCBzdG9yYWdlLgotICBTdGF0dXMgUmVjb3ZlcigpOwotCi0gIC8vIFJldHVybiB0aGUgY3VycmVu
dCB2ZXJzaW9uLgotICBWZXJzaW9uKiBjdXJyZW50KCkgY29uc3QgeyByZXR1cm4gY3VycmVudF87
IH0KLQotICAvLyBSZXR1cm4gdGhlIGN1cnJlbnQgbWFuaWZlc3QgZmlsZSBudW1iZXIKLSAgdWlu
dDY0X3QgTWFuaWZlc3RGaWxlTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbWFuaWZlc3RfZmlsZV9u
dW1iZXJfOyB9Ci0KLSAgLy8gQWxsb2NhdGUgYW5kIHJldHVybiBhIG5ldyBmaWxlIG51bWJlcgot
ICB1aW50NjRfdCBOZXdGaWxlTnVtYmVyKCkgeyByZXR1cm4gbmV4dF9maWxlX251bWJlcl8rKzsg
fQotCi0gIC8vIEFycmFuZ2UgdG8gcmV1c2UgImZpbGVfbnVtYmVyIiB1bmxlc3MgYSBuZXdlciBm
aWxlIG51bWJlciBoYXMKLSAgLy8gYWxyZWFkeSBiZWVuIGFsbG9jYXRlZC4KLSAgLy8gUkVRVUlS
RVM6ICJmaWxlX251bWJlciIgd2FzIHJldHVybmVkIGJ5IGEgY2FsbCB0byBOZXdGaWxlTnVtYmVy
KCkuCi0gIHZvaWQgUmV1c2VGaWxlTnVtYmVyKHVpbnQ2NF90IGZpbGVfbnVtYmVyKSB7Ci0gICAg
aWYgKG5leHRfZmlsZV9udW1iZXJfID09IGZpbGVfbnVtYmVyICsgMSkgewotICAgICAgbmV4dF9m
aWxlX251bWJlcl8gPSBmaWxlX251bWJlcjsKLSAgICB9Ci0gIH0KLQotICAvLyBSZXR1cm4gdGhl
IG51bWJlciBvZiBUYWJsZSBmaWxlcyBhdCB0aGUgc3BlY2lmaWVkIGxldmVsLgotICBpbnQgTnVt
TGV2ZWxGaWxlcyhpbnQgbGV2ZWwpIGNvbnN0OwotCi0gIC8vIFJldHVybiB0aGUgY29tYmluZWQg
ZmlsZSBzaXplIG9mIGFsbCBmaWxlcyBhdCB0aGUgc3BlY2lmaWVkIGxldmVsLgotICBpbnQ2NF90
IE51bUxldmVsQnl0ZXMoaW50IGxldmVsKSBjb25zdDsKLQotICAvLyBSZXR1cm4gdGhlIGxhc3Qg
c2VxdWVuY2UgbnVtYmVyLgotICB1aW50NjRfdCBMYXN0U2VxdWVuY2UoKSBjb25zdCB7IHJldHVy
biBsYXN0X3NlcXVlbmNlXzsgfQotCi0gIC8vIFNldCB0aGUgbGFzdCBzZXF1ZW5jZSBudW1iZXIg
dG8gcy4KLSAgdm9pZCBTZXRMYXN0U2VxdWVuY2UodWludDY0X3QgcykgewotICAgIGFzc2VydChz
ID49IGxhc3Rfc2VxdWVuY2VfKTsKLSAgICBsYXN0X3NlcXVlbmNlXyA9IHM7Ci0gIH0KLQotICAv
LyBNYXJrIHRoZSBzcGVjaWZpZWQgZmlsZSBudW1iZXIgYXMgdXNlZC4KLSAgdm9pZCBNYXJrRmls
ZU51bWJlclVzZWQodWludDY0X3QgbnVtYmVyKTsKLQotICAvLyBSZXR1cm4gdGhlIGN1cnJlbnQg
bG9nIGZpbGUgbnVtYmVyLgotICB1aW50NjRfdCBMb2dOdW1iZXIoKSBjb25zdCB7IHJldHVybiBs
b2dfbnVtYmVyXzsgfQotCi0gIC8vIFJldHVybiB0aGUgbG9nIGZpbGUgbnVtYmVyIGZvciB0aGUg
bG9nIGZpbGUgdGhhdCBpcyBjdXJyZW50bHkKLSAgLy8gYmVpbmcgY29tcGFjdGVkLCBvciB6ZXJv
IGlmIHRoZXJlIGlzIG5vIHN1Y2ggbG9nIGZpbGUuCi0gIHVpbnQ2NF90IFByZXZMb2dOdW1iZXIo
KSBjb25zdCB7IHJldHVybiBwcmV2X2xvZ19udW1iZXJfOyB9Ci0KLSAgLy8gUGljayBsZXZlbCBh
bmQgaW5wdXRzIGZvciBhIG5ldyBjb21wYWN0aW9uLgotICAvLyBSZXR1cm5zIE5VTEwgaWYgdGhl
cmUgaXMgbm8gY29tcGFjdGlvbiB0byBiZSBkb25lLgotICAvLyBPdGhlcndpc2UgcmV0dXJucyBh
IHBvaW50ZXIgdG8gYSBoZWFwLWFsbG9jYXRlZCBvYmplY3QgdGhhdAotICAvLyBkZXNjcmliZXMg
dGhlIGNvbXBhY3Rpb24uICBDYWxsZXIgc2hvdWxkIGRlbGV0ZSB0aGUgcmVzdWx0LgotICBDb21w
YWN0aW9uKiBQaWNrQ29tcGFjdGlvbigpOwotCi0gIC8vIFJldHVybiBhIGNvbXBhY3Rpb24gb2Jq
ZWN0IGZvciBjb21wYWN0aW5nIHRoZSByYW5nZSBbYmVnaW4sZW5kXSBpbgotICAvLyB0aGUgc3Bl
Y2lmaWVkIGxldmVsLiAgUmV0dXJucyBOVUxMIGlmIHRoZXJlIGlzIG5vdGhpbmcgaW4gdGhhdAot
ICAvLyBsZXZlbCB0aGF0IG92ZXJsYXBzIHRoZSBzcGVjaWZpZWQgcmFuZ2UuICBDYWxsZXIgc2hv
dWxkIGRlbGV0ZQotICAvLyB0aGUgcmVzdWx0LgotICBDb21wYWN0aW9uKiBDb21wYWN0UmFuZ2Uo
Ci0gICAgICBpbnQgbGV2ZWwsCi0gICAgICBjb25zdCBJbnRlcm5hbEtleSogYmVnaW4sCi0gICAg
ICBjb25zdCBJbnRlcm5hbEtleSogZW5kKTsKLQotICAvLyBSZXR1cm4gdGhlIG1heGltdW0gb3Zl
cmxhcHBpbmcgZGF0YSAoaW4gYnl0ZXMpIGF0IG5leHQgbGV2ZWwgZm9yIGFueQotICAvLyBmaWxl
IGF0IGEgbGV2ZWwgPj0gMS4KLSAgaW50NjRfdCBNYXhOZXh0TGV2ZWxPdmVybGFwcGluZ0J5dGVz
KCk7Ci0KLSAgLy8gQ3JlYXRlIGFuIGl0ZXJhdG9yIHRoYXQgcmVhZHMgb3ZlciB0aGUgY29tcGFj
dGlvbiBpbnB1dHMgZm9yICIqYyIuCi0gIC8vIFRoZSBjYWxsZXIgc2hvdWxkIGRlbGV0ZSB0aGUg
aXRlcmF0b3Igd2hlbiBubyBsb25nZXIgbmVlZGVkLgotICBJdGVyYXRvciogTWFrZUlucHV0SXRl
cmF0b3IoQ29tcGFjdGlvbiogYyk7Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmZiBzb21lIGxldmVs
IG5lZWRzIGEgY29tcGFjdGlvbi4KLSAgYm9vbCBOZWVkc0NvbXBhY3Rpb24oKSBjb25zdCB7Ci0g
ICAgVmVyc2lvbiogdiA9IGN1cnJlbnRfOwotICAgIHJldHVybiAodi0+Y29tcGFjdGlvbl9zY29y
ZV8gPj0gMSkgfHwgKHYtPmZpbGVfdG9fY29tcGFjdF8gIT0gTlVMTCk7Ci0gIH0KLQotICAvLyBB
ZGQgYWxsIGZpbGVzIGxpc3RlZCBpbiBhbnkgbGl2ZSB2ZXJzaW9uIHRvICpsaXZlLgotICAvLyBN
YXkgYWxzbyBtdXRhdGUgc29tZSBpbnRlcm5hbCBzdGF0ZS4KLSAgdm9pZCBBZGRMaXZlRmlsZXMo
c3RkOjpzZXQ8dWludDY0X3Q+KiBsaXZlKTsKLQotICAvLyBSZXR1cm4gdGhlIGFwcHJveGltYXRl
IG9mZnNldCBpbiB0aGUgZGF0YWJhc2Ugb2YgdGhlIGRhdGEgZm9yCi0gIC8vICJrZXkiIGFzIG9m
IHZlcnNpb24gInYiLgotICB1aW50NjRfdCBBcHByb3hpbWF0ZU9mZnNldE9mKFZlcnNpb24qIHYs
IGNvbnN0IEludGVybmFsS2V5JiBrZXkpOwotCi0gIC8vIFJldHVybiBhIGh1bWFuLXJlYWRhYmxl
IHNob3J0IChzaW5nbGUtbGluZSkgc3VtbWFyeSBvZiB0aGUgbnVtYmVyCi0gIC8vIG9mIGZpbGVz
IHBlciBsZXZlbC4gIFVzZXMgKnNjcmF0Y2ggYXMgYmFja2luZyBzdG9yZS4KLSAgc3RydWN0IExl
dmVsU3VtbWFyeVN0b3JhZ2UgewotICAgIGNoYXIgYnVmZmVyWzEwMF07Ci0gIH07Ci0gIGNvbnN0
IGNoYXIqIExldmVsU3VtbWFyeShMZXZlbFN1bW1hcnlTdG9yYWdlKiBzY3JhdGNoKSBjb25zdDsK
LQotIHByaXZhdGU6Ci0gIGNsYXNzIEJ1aWxkZXI7Ci0KLSAgZnJpZW5kIGNsYXNzIENvbXBhY3Rp
b247Ci0gIGZyaWVuZCBjbGFzcyBWZXJzaW9uOwotCi0gIHZvaWQgRmluYWxpemUoVmVyc2lvbiog
dik7Ci0KLSAgdm9pZCBHZXRSYW5nZShjb25zdCBzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEqPiYg
aW5wdXRzLAotICAgICAgICAgICAgICAgIEludGVybmFsS2V5KiBzbWFsbGVzdCwKLSAgICAgICAg
ICAgICAgICBJbnRlcm5hbEtleSogbGFyZ2VzdCk7Ci0KLSAgdm9pZCBHZXRSYW5nZTIoY29uc3Qg
c3RkOjp2ZWN0b3I8RmlsZU1ldGFEYXRhKj4mIGlucHV0czEsCi0gICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPEZpbGVNZXRhRGF0YSo+JiBpbnB1dHMyLAotICAgICAgICAgICAgICAg
ICBJbnRlcm5hbEtleSogc21hbGxlc3QsCi0gICAgICAgICAgICAgICAgIEludGVybmFsS2V5KiBs
YXJnZXN0KTsKLQotICB2b2lkIFNldHVwT3RoZXJJbnB1dHMoQ29tcGFjdGlvbiogYyk7Ci0KLSAg
Ly8gU2F2ZSBjdXJyZW50IGNvbnRlbnRzIHRvICpsb2cKLSAgU3RhdHVzIFdyaXRlU25hcHNob3Qo
bG9nOjpXcml0ZXIqIGxvZyk7Ci0KLSAgdm9pZCBBcHBlbmRWZXJzaW9uKFZlcnNpb24qIHYpOwot
Ci0gIGJvb2wgTWFuaWZlc3RDb250YWlucyhjb25zdCBzdGQ6OnN0cmluZyYgcmVjb3JkKSBjb25z
dDsKLQotICBFbnYqIGNvbnN0IGVudl87Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nIGRibmFtZV87Ci0g
IGNvbnN0IE9wdGlvbnMqIGNvbnN0IG9wdGlvbnNfOwotICBUYWJsZUNhY2hlKiBjb25zdCB0YWJs
ZV9jYWNoZV87Ci0gIGNvbnN0IEludGVybmFsS2V5Q29tcGFyYXRvciBpY21wXzsKLSAgdWludDY0
X3QgbmV4dF9maWxlX251bWJlcl87Ci0gIHVpbnQ2NF90IG1hbmlmZXN0X2ZpbGVfbnVtYmVyXzsK
LSAgdWludDY0X3QgbGFzdF9zZXF1ZW5jZV87Ci0gIHVpbnQ2NF90IGxvZ19udW1iZXJfOwotICB1
aW50NjRfdCBwcmV2X2xvZ19udW1iZXJfOyAgLy8gMCBvciBiYWNraW5nIHN0b3JlIGZvciBtZW10
YWJsZSBiZWluZyBjb21wYWN0ZWQKLQotICAvLyBPcGVuZWQgbGF6aWx5Ci0gIFdyaXRhYmxlRmls
ZSogZGVzY3JpcHRvcl9maWxlXzsKLSAgbG9nOjpXcml0ZXIqIGRlc2NyaXB0b3JfbG9nXzsKLSAg
VmVyc2lvbiBkdW1teV92ZXJzaW9uc187ICAvLyBIZWFkIG9mIGNpcmN1bGFyIGRvdWJseS1saW5r
ZWQgbGlzdCBvZiB2ZXJzaW9ucy4KLSAgVmVyc2lvbiogY3VycmVudF87ICAgICAgICAvLyA9PSBk
dW1teV92ZXJzaW9uc18ucHJldl8KLQotICAvLyBQZXItbGV2ZWwga2V5IGF0IHdoaWNoIHRoZSBu
ZXh0IGNvbXBhY3Rpb24gYXQgdGhhdCBsZXZlbCBzaG91bGQgc3RhcnQuCi0gIC8vIEVpdGhlciBh
biBlbXB0eSBzdHJpbmcsIG9yIGEgdmFsaWQgSW50ZXJuYWxLZXkuCi0gIHN0ZDo6c3RyaW5nIGNv
bXBhY3RfcG9pbnRlcl9bY29uZmlnOjprTnVtTGV2ZWxzXTsKLQotICAvLyBObyBjb3B5aW5nIGFs
bG93ZWQKLSAgVmVyc2lvblNldChjb25zdCBWZXJzaW9uU2V0Jik7Ci0gIHZvaWQgb3BlcmF0b3I9
KGNvbnN0IFZlcnNpb25TZXQmKTsKLX07Ci0KLS8vIEEgQ29tcGFjdGlvbiBlbmNhcHN1bGF0ZXMg
aW5mb3JtYXRpb24gYWJvdXQgYSBjb21wYWN0aW9uLgotY2xhc3MgQ29tcGFjdGlvbiB7Ci0gcHVi
bGljOgotICB+Q29tcGFjdGlvbigpOwotCi0gIC8vIFJldHVybiB0aGUgbGV2ZWwgdGhhdCBpcyBi
ZWluZyBjb21wYWN0ZWQuICBJbnB1dHMgZnJvbSAibGV2ZWwiCi0gIC8vIGFuZCAibGV2ZWwrMSIg
d2lsbCBiZSBtZXJnZWQgdG8gcHJvZHVjZSBhIHNldCBvZiAibGV2ZWwrMSIgZmlsZXMuCi0gIGlu
dCBsZXZlbCgpIGNvbnN0IHsgcmV0dXJuIGxldmVsXzsgfQotCi0gIC8vIFJldHVybiB0aGUgb2Jq
ZWN0IHRoYXQgaG9sZHMgdGhlIGVkaXRzIHRvIHRoZSBkZXNjcmlwdG9yIGRvbmUKLSAgLy8gYnkg
dGhpcyBjb21wYWN0aW9uLgotICBWZXJzaW9uRWRpdCogZWRpdCgpIHsgcmV0dXJuICZlZGl0Xzsg
fQotCi0gIC8vICJ3aGljaCIgbXVzdCBiZSBlaXRoZXIgMCBvciAxCi0gIGludCBudW1faW5wdXRf
ZmlsZXMoaW50IHdoaWNoKSBjb25zdCB7IHJldHVybiBpbnB1dHNfW3doaWNoXS5zaXplKCk7IH0K
LQotICAvLyBSZXR1cm4gdGhlIGl0aCBpbnB1dCBmaWxlIGF0ICJsZXZlbCgpK3doaWNoIiAoIndo
aWNoIiBtdXN0IGJlIDAgb3IgMSkuCi0gIEZpbGVNZXRhRGF0YSogaW5wdXQoaW50IHdoaWNoLCBp
bnQgaSkgY29uc3QgeyByZXR1cm4gaW5wdXRzX1t3aGljaF1baV07IH0KLQotICAvLyBNYXhpbXVt
IHNpemUgb2YgZmlsZXMgdG8gYnVpbGQgZHVyaW5nIHRoaXMgY29tcGFjdGlvbi4KLSAgdWludDY0
X3QgTWF4T3V0cHV0RmlsZVNpemUoKSBjb25zdCB7IHJldHVybiBtYXhfb3V0cHV0X2ZpbGVfc2l6
ZV87IH0KLQotICAvLyBJcyB0aGlzIGEgdHJpdmlhbCBjb21wYWN0aW9uIHRoYXQgY2FuIGJlIGlt
cGxlbWVudGVkIGJ5IGp1c3QKLSAgLy8gbW92aW5nIGEgc2luZ2xlIGlucHV0IGZpbGUgdG8gdGhl
IG5leHQgbGV2ZWwgKG5vIG1lcmdpbmcgb3Igc3BsaXR0aW5nKQotICBib29sIElzVHJpdmlhbE1v
dmUoKSBjb25zdDsKLQotICAvLyBBZGQgYWxsIGlucHV0cyB0byB0aGlzIGNvbXBhY3Rpb24gYXMg
ZGVsZXRlIG9wZXJhdGlvbnMgdG8gKmVkaXQuCi0gIHZvaWQgQWRkSW5wdXREZWxldGlvbnMoVmVy
c2lvbkVkaXQqIGVkaXQpOwotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgaW5mb3JtYXRpb24g
d2UgaGF2ZSBhdmFpbGFibGUgZ3VhcmFudGVlcyB0aGF0Ci0gIC8vIHRoZSBjb21wYWN0aW9uIGlz
IHByb2R1Y2luZyBkYXRhIGluICJsZXZlbCsxIiBmb3Igd2hpY2ggbm8gZGF0YSBleGlzdHMKLSAg
Ly8gaW4gbGV2ZWxzIGdyZWF0ZXIgdGhhbiAibGV2ZWwrMSIuCi0gIGJvb2wgSXNCYXNlTGV2ZWxG
b3JLZXkoY29uc3QgU2xpY2UmIHVzZXJfa2V5KTsKLQotICAvLyBSZXR1cm5zIHRydWUgaWZmIHdl
IHNob3VsZCBzdG9wIGJ1aWxkaW5nIHRoZSBjdXJyZW50IG91dHB1dAotICAvLyBiZWZvcmUgcHJv
Y2Vzc2luZyAiaW50ZXJuYWxfa2V5Ii4KLSAgYm9vbCBTaG91bGRTdG9wQmVmb3JlKGNvbnN0IFNs
aWNlJiBpbnRlcm5hbF9rZXkpOwotCi0gIC8vIFJlbGVhc2UgdGhlIGlucHV0IHZlcnNpb24gZm9y
IHRoZSBjb21wYWN0aW9uLCBvbmNlIHRoZSBjb21wYWN0aW9uCi0gIC8vIGlzIHN1Y2Nlc3NmdWwu
Ci0gIHZvaWQgUmVsZWFzZUlucHV0cygpOwotCi0gcHJpdmF0ZToKLSAgZnJpZW5kIGNsYXNzIFZl
cnNpb247Ci0gIGZyaWVuZCBjbGFzcyBWZXJzaW9uU2V0OwotCi0gIGV4cGxpY2l0IENvbXBhY3Rp
b24oaW50IGxldmVsKTsKLQotICBpbnQgbGV2ZWxfOwotICB1aW50NjRfdCBtYXhfb3V0cHV0X2Zp
bGVfc2l6ZV87Ci0gIFZlcnNpb24qIGlucHV0X3ZlcnNpb25fOwotICBWZXJzaW9uRWRpdCBlZGl0
XzsKLQotICAvLyBFYWNoIGNvbXBhY3Rpb24gcmVhZHMgaW5wdXRzIGZyb20gImxldmVsXyIgYW5k
ICJsZXZlbF8rMSIKLSAgc3RkOjp2ZWN0b3I8RmlsZU1ldGFEYXRhKj4gaW5wdXRzX1syXTsgICAg
ICAvLyBUaGUgdHdvIHNldHMgb2YgaW5wdXRzCi0KLSAgLy8gU3RhdGUgdXNlZCB0byBjaGVjayBm
b3IgbnVtYmVyIG9mIG9mIG92ZXJsYXBwaW5nIGdyYW5kcGFyZW50IGZpbGVzCi0gIC8vIChwYXJl
bnQgPT0gbGV2ZWxfICsgMSwgZ3JhbmRwYXJlbnQgPT0gbGV2ZWxfICsgMikKLSAgc3RkOjp2ZWN0
b3I8RmlsZU1ldGFEYXRhKj4gZ3JhbmRwYXJlbnRzXzsKLSAgc2l6ZV90IGdyYW5kcGFyZW50X2lu
ZGV4XzsgIC8vIEluZGV4IGluIGdyYW5kcGFyZW50X3N0YXJ0c18KLSAgYm9vbCBzZWVuX2tleV87
ICAgICAgICAgICAgIC8vIFNvbWUgb3V0cHV0IGtleSBoYXMgYmVlbiBzZWVuCi0gIGludDY0X3Qg
b3ZlcmxhcHBlZF9ieXRlc187ICAvLyBCeXRlcyBvZiBvdmVybGFwIGJldHdlZW4gY3VycmVudCBv
dXRwdXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBncmFuZHBhcmVudCBm
aWxlcwotCi0gIC8vIFN0YXRlIGZvciBpbXBsZW1lbnRpbmcgSXNCYXNlTGV2ZWxGb3JLZXkKLQot
ICAvLyBsZXZlbF9wdHJzXyBob2xkcyBpbmRpY2VzIGludG8gaW5wdXRfdmVyc2lvbl8tPmxldmVs
c186IG91ciBzdGF0ZQotICAvLyBpcyB0aGF0IHdlIGFyZSBwb3NpdGlvbmVkIGF0IG9uZSBvZiB0
aGUgZmlsZSByYW5nZXMgZm9yIGVhY2gKLSAgLy8gaGlnaGVyIGxldmVsIHRoYW4gdGhlIG9uZXMg
aW52b2x2ZWQgaW4gdGhpcyBjb21wYWN0aW9uIChpLmUuIGZvcgotICAvLyBhbGwgTCA+PSBsZXZl
bF8gKyAyKS4KLSAgc2l6ZV90IGxldmVsX3B0cnNfW2NvbmZpZzo6a051bUxldmVsc107Ci19Owot
Ci19ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgotCi0jZW5kaWYgIC8vIFNUT1JBR0VfTEVWRUxEQl9E
Ql9WRVJTSU9OX1NFVF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9k
Yi92ZXJzaW9uX3NldF90ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi92ZXJz
aW9uX3NldF90ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDFlMzRkLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvdmVyc2lvbl9zZXRfdGVz
dC5jYworKysgL2Rldi9udWxsCkBAIC0xLDE3OSArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIw
MTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxl
IGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCi0KLSNpbmNsdWRlICJkYi92ZXJzaW9uX3NldC5o
IgotI2luY2x1ZGUgInV0aWwvbG9nZ2luZy5oIgotI2luY2x1ZGUgInV0aWwvdGVzdGhhcm5lc3Mu
aCIKLSNpbmNsdWRlICJ1dGlsL3Rlc3R1dGlsLmgiCi0KLW5hbWVzcGFjZSBsZXZlbGRiIHsKLQot
Y2xhc3MgRmluZEZpbGVUZXN0IHsKLSBwdWJsaWM6Ci0gIHN0ZDo6dmVjdG9yPEZpbGVNZXRhRGF0
YSo+IGZpbGVzXzsKLSAgYm9vbCBkaXNqb2ludF9zb3J0ZWRfZmlsZXNfOwotCi0gIEZpbmRGaWxl
VGVzdCgpIDogZGlzam9pbnRfc29ydGVkX2ZpbGVzXyh0cnVlKSB7IH0KLQotICB+RmluZEZpbGVU
ZXN0KCkgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZXNfLnNpemUoKTsgaSsrKSB7Ci0g
ICAgICBkZWxldGUgZmlsZXNfW2ldOwotICAgIH0KLSAgfQotCi0gIHZvaWQgQWRkKGNvbnN0IGNo
YXIqIHNtYWxsZXN0LCBjb25zdCBjaGFyKiBsYXJnZXN0LAotICAgICAgICAgICBTZXF1ZW5jZU51
bWJlciBzbWFsbGVzdF9zZXEgPSAxMDAsCi0gICAgICAgICAgIFNlcXVlbmNlTnVtYmVyIGxhcmdl
c3Rfc2VxID0gMTAwKSB7Ci0gICAgRmlsZU1ldGFEYXRhKiBmID0gbmV3IEZpbGVNZXRhRGF0YTsK
LSAgICBmLT5udW1iZXIgPSBmaWxlc18uc2l6ZSgpICsgMTsKLSAgICBmLT5zbWFsbGVzdCA9IElu
dGVybmFsS2V5KHNtYWxsZXN0LCBzbWFsbGVzdF9zZXEsIGtUeXBlVmFsdWUpOwotICAgIGYtPmxh
cmdlc3QgPSBJbnRlcm5hbEtleShsYXJnZXN0LCBsYXJnZXN0X3NlcSwga1R5cGVWYWx1ZSk7Ci0g
ICAgZmlsZXNfLnB1c2hfYmFjayhmKTsKLSAgfQotCi0gIGludCBGaW5kKGNvbnN0IGNoYXIqIGtl
eSkgewotICAgIEludGVybmFsS2V5IHRhcmdldChrZXksIDEwMCwga1R5cGVWYWx1ZSk7Ci0gICAg
SW50ZXJuYWxLZXlDb21wYXJhdG9yIGNtcChCeXRld2lzZUNvbXBhcmF0b3IoKSk7Ci0gICAgcmV0
dXJuIEZpbmRGaWxlKGNtcCwgZmlsZXNfLCB0YXJnZXQuRW5jb2RlKCkpOwotICB9Ci0KLSAgYm9v
bCBPdmVybGFwcyhjb25zdCBjaGFyKiBzbWFsbGVzdCwgY29uc3QgY2hhciogbGFyZ2VzdCkgewot
ICAgIEludGVybmFsS2V5Q29tcGFyYXRvciBjbXAoQnl0ZXdpc2VDb21wYXJhdG9yKCkpOwotICAg
IFNsaWNlIHMoc21hbGxlc3QgIT0gTlVMTCA/IHNtYWxsZXN0IDogIiIpOwotICAgIFNsaWNlIGwo
bGFyZ2VzdCAhPSBOVUxMID8gbGFyZ2VzdCA6ICIiKTsKLSAgICByZXR1cm4gU29tZUZpbGVPdmVy
bGFwc1JhbmdlKGNtcCwgZGlzam9pbnRfc29ydGVkX2ZpbGVzXywgZmlsZXNfLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHNtYWxsZXN0ICE9IE5VTEwgPyAmcyA6IE5VTEwpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhcmdlc3QgIT0gTlVMTCA/ICZsIDog
TlVMTCkpOwotICB9Ci19OwotCi1URVNUKEZpbmRGaWxlVGVzdCwgRW1wdHkpIHsKLSAgQVNTRVJU
X0VRKDAsIEZpbmQoImZvbyIpKTsKLSAgQVNTRVJUX1RSVUUoISBPdmVybGFwcygiYSIsICJ6Iikp
OwotICBBU1NFUlRfVFJVRSghIE92ZXJsYXBzKE5VTEwsICJ6IikpOwotICBBU1NFUlRfVFJVRSgh
IE92ZXJsYXBzKCJhIiwgTlVMTCkpOwotICBBU1NFUlRfVFJVRSghIE92ZXJsYXBzKE5VTEwsIE5V
TEwpKTsKLX0KLQotVEVTVChGaW5kRmlsZVRlc3QsIFNpbmdsZSkgewotICBBZGQoInAiLCAicSIp
OwotICBBU1NFUlRfRVEoMCwgRmluZCgiYSIpKTsKLSAgQVNTRVJUX0VRKDAsIEZpbmQoInAiKSk7
Ci0gIEFTU0VSVF9FUSgwLCBGaW5kKCJwMSIpKTsKLSAgQVNTRVJUX0VRKDAsIEZpbmQoInEiKSk7
Ci0gIEFTU0VSVF9FUSgxLCBGaW5kKCJxMSIpKTsKLSAgQVNTRVJUX0VRKDEsIEZpbmQoInoiKSk7
Ci0KLSAgQVNTRVJUX1RSVUUoISBPdmVybGFwcygiYSIsICJiIikpOwotICBBU1NFUlRfVFJVRSgh
IE92ZXJsYXBzKCJ6MSIsICJ6MiIpKTsKLSAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoImEiLCAicCIp
KTsKLSAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoImEiLCAicSIpKTsKLSAgQVNTRVJUX1RSVUUoT3Zl
cmxhcHMoImEiLCAieiIpKTsKLSAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoInAiLCAicDEiKSk7Ci0g
IEFTU0VSVF9UUlVFKE92ZXJsYXBzKCJwIiwgInEiKSk7Ci0gIEFTU0VSVF9UUlVFKE92ZXJsYXBz
KCJwIiwgInoiKSk7Ci0gIEFTU0VSVF9UUlVFKE92ZXJsYXBzKCJwMSIsICJwMiIpKTsKLSAgQVNT
RVJUX1RSVUUoT3ZlcmxhcHMoInAxIiwgInoiKSk7Ci0gIEFTU0VSVF9UUlVFKE92ZXJsYXBzKCJx
IiwgInEiKSk7Ci0gIEFTU0VSVF9UUlVFKE92ZXJsYXBzKCJxIiwgInExIikpOwotCi0gIEFTU0VS
VF9UUlVFKCEgT3ZlcmxhcHMoTlVMTCwgImoiKSk7Ci0gIEFTU0VSVF9UUlVFKCEgT3ZlcmxhcHMo
InIiLCBOVUxMKSk7Ci0gIEFTU0VSVF9UUlVFKE92ZXJsYXBzKE5VTEwsICJwIikpOwotICBBU1NF
UlRfVFJVRShPdmVybGFwcyhOVUxMLCAicDEiKSk7Ci0gIEFTU0VSVF9UUlVFKE92ZXJsYXBzKCJx
IiwgTlVMTCkpOwotICBBU1NFUlRfVFJVRShPdmVybGFwcyhOVUxMLCBOVUxMKSk7Ci19Ci0KLQot
VEVTVChGaW5kRmlsZVRlc3QsIE11bHRpcGxlKSB7Ci0gIEFkZCgiMTUwIiwgIjIwMCIpOwotICBB
ZGQoIjIwMCIsICIyNTAiKTsKLSAgQWRkKCIzMDAiLCAiMzUwIik7Ci0gIEFkZCgiNDAwIiwgIjQ1
MCIpOwotICBBU1NFUlRfRVEoMCwgRmluZCgiMTAwIikpOwotICBBU1NFUlRfRVEoMCwgRmluZCgi
MTUwIikpOwotICBBU1NFUlRfRVEoMCwgRmluZCgiMTUxIikpOwotICBBU1NFUlRfRVEoMCwgRmlu
ZCgiMTk5IikpOwotICBBU1NFUlRfRVEoMCwgRmluZCgiMjAwIikpOwotICBBU1NFUlRfRVEoMSwg
RmluZCgiMjAxIikpOwotICBBU1NFUlRfRVEoMSwgRmluZCgiMjQ5IikpOwotICBBU1NFUlRfRVEo
MSwgRmluZCgiMjUwIikpOwotICBBU1NFUlRfRVEoMiwgRmluZCgiMjUxIikpOwotICBBU1NFUlRf
RVEoMiwgRmluZCgiMjk5IikpOwotICBBU1NFUlRfRVEoMiwgRmluZCgiMzAwIikpOwotICBBU1NF
UlRfRVEoMiwgRmluZCgiMzQ5IikpOwotICBBU1NFUlRfRVEoMiwgRmluZCgiMzUwIikpOwotICBB
U1NFUlRfRVEoMywgRmluZCgiMzUxIikpOwotICBBU1NFUlRfRVEoMywgRmluZCgiNDAwIikpOwot
ICBBU1NFUlRfRVEoMywgRmluZCgiNDUwIikpOwotICBBU1NFUlRfRVEoNCwgRmluZCgiNDUxIikp
OwotCi0gIEFTU0VSVF9UUlVFKCEgT3ZlcmxhcHMoIjEwMCIsICIxNDkiKSk7Ci0gIEFTU0VSVF9U
UlVFKCEgT3ZlcmxhcHMoIjI1MSIsICIyOTkiKSk7Ci0gIEFTU0VSVF9UUlVFKCEgT3ZlcmxhcHMo
IjQ1MSIsICI1MDAiKSk7Ci0gIEFTU0VSVF9UUlVFKCEgT3ZlcmxhcHMoIjM1MSIsICIzOTkiKSk7
Ci0KLSAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoIjEwMCIsICIxNTAiKSk7Ci0gIEFTU0VSVF9UUlVF
KE92ZXJsYXBzKCIxMDAiLCAiMjAwIikpOwotICBBU1NFUlRfVFJVRShPdmVybGFwcygiMTAwIiwg
IjMwMCIpKTsKLSAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoIjEwMCIsICI0MDAiKSk7Ci0gIEFTU0VS
VF9UUlVFKE92ZXJsYXBzKCIxMDAiLCAiNTAwIikpOwotICBBU1NFUlRfVFJVRShPdmVybGFwcygi
Mzc1IiwgIjQwMCIpKTsKLSAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoIjQ1MCIsICI0NTAiKSk7Ci0g
IEFTU0VSVF9UUlVFKE92ZXJsYXBzKCI0NTAiLCAiNTAwIikpOwotfQotCi1URVNUKEZpbmRGaWxl
VGVzdCwgTXVsdGlwbGVOdWxsQm91bmRhcmllcykgewotICBBZGQoIjE1MCIsICIyMDAiKTsKLSAg
QWRkKCIyMDAiLCAiMjUwIik7Ci0gIEFkZCgiMzAwIiwgIjM1MCIpOwotICBBZGQoIjQwMCIsICI0
NTAiKTsKLSAgQVNTRVJUX1RSVUUoISBPdmVybGFwcyhOVUxMLCAiMTQ5IikpOwotICBBU1NFUlRf
VFJVRSghIE92ZXJsYXBzKCI0NTEiLCBOVUxMKSk7Ci0gIEFTU0VSVF9UUlVFKE92ZXJsYXBzKE5V
TEwsIE5VTEwpKTsKLSAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoTlVMTCwgIjE1MCIpKTsKLSAgQVNT
RVJUX1RSVUUoT3ZlcmxhcHMoTlVMTCwgIjE5OSIpKTsKLSAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMo
TlVMTCwgIjIwMCIpKTsKLSAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoTlVMTCwgIjIwMSIpKTsKLSAg
QVNTRVJUX1RSVUUoT3ZlcmxhcHMoTlVMTCwgIjQwMCIpKTsKLSAgQVNTRVJUX1RSVUUoT3Zlcmxh
cHMoTlVMTCwgIjgwMCIpKTsKLSAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoIjEwMCIsIE5VTEwpKTsK
LSAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoIjIwMCIsIE5VTEwpKTsKLSAgQVNTRVJUX1RSVUUoT3Zl
cmxhcHMoIjQ0OSIsIE5VTEwpKTsKLSAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoIjQ1MCIsIE5VTEwp
KTsKLX0KLQotVEVTVChGaW5kRmlsZVRlc3QsIE92ZXJsYXBTZXF1ZW5jZUNoZWNrcykgewotICBB
ZGQoIjIwMCIsICIyMDAiLCA1MDAwLCAzMDAwKTsKLSAgQVNTRVJUX1RSVUUoISBPdmVybGFwcygi
MTk5IiwgIjE5OSIpKTsKLSAgQVNTRVJUX1RSVUUoISBPdmVybGFwcygiMjAxIiwgIjMwMCIpKTsK
LSAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoIjIwMCIsICIyMDAiKSk7Ci0gIEFTU0VSVF9UUlVFKE92
ZXJsYXBzKCIxOTAiLCAiMjAwIikpOwotICBBU1NFUlRfVFJVRShPdmVybGFwcygiMjAwIiwgIjIx
MCIpKTsKLX0KLQotVEVTVChGaW5kRmlsZVRlc3QsIE92ZXJsYXBwaW5nRmlsZXMpIHsKLSAgQWRk
KCIxNTAiLCAiNjAwIik7Ci0gIEFkZCgiNDAwIiwgIjUwMCIpOwotICBkaXNqb2ludF9zb3J0ZWRf
ZmlsZXNfID0gZmFsc2U7Ci0gIEFTU0VSVF9UUlVFKCEgT3ZlcmxhcHMoIjEwMCIsICIxNDkiKSk7
Ci0gIEFTU0VSVF9UUlVFKCEgT3ZlcmxhcHMoIjYwMSIsICI3MDAiKSk7Ci0gIEFTU0VSVF9UUlVF
KE92ZXJsYXBzKCIxMDAiLCAiMTUwIikpOwotICBBU1NFUlRfVFJVRShPdmVybGFwcygiMTAwIiwg
IjIwMCIpKTsKLSAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoIjEwMCIsICIzMDAiKSk7Ci0gIEFTU0VS
VF9UUlVFKE92ZXJsYXBzKCIxMDAiLCAiNDAwIikpOwotICBBU1NFUlRfVFJVRShPdmVybGFwcygi
MTAwIiwgIjUwMCIpKTsKLSAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoIjM3NSIsICI0MDAiKSk7Ci0g
IEFTU0VSVF9UUlVFKE92ZXJsYXBzKCI0NTAiLCAiNDUwIikpOwotICBBU1NFUlRfVFJVRShPdmVy
bGFwcygiNDUwIiwgIjUwMCIpKTsKLSAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoIjQ1MCIsICI3MDAi
KSk7Ci0gIEFTU0VSVF9UUlVFKE92ZXJsYXBzKCI2MDAiLCAiNzAwIikpOwotfQotCi19ICAvLyBu
YW1lc3BhY2UgbGV2ZWxkYgotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKLSAg
cmV0dXJuIGxldmVsZGI6OnRlc3Q6OlJ1bkFsbFRlc3RzKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3dyaXRlX2JhdGNoLmNjIGIvU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi9kYi93cml0ZV9iYXRjaC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMzNmNGE0Mi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3dy
aXRlX2JhdGNoLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8vIENvcHlyaWdo
dCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRI
T1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KLS8vCi0vLyBXcml0ZUJhdGNoOjpy
ZXBfIDo9Ci0vLyAgICBzZXF1ZW5jZTogZml4ZWQ2NAotLy8gICAgY291bnQ6IGZpeGVkMzIKLS8v
ICAgIGRhdGE6IHJlY29yZFtjb3VudF0KLS8vIHJlY29yZCA6PQotLy8gICAga1R5cGVWYWx1ZSB2
YXJzdHJpbmcgdmFyc3RyaW5nICAgICAgICAgfAotLy8gICAga1R5cGVEZWxldGlvbiB2YXJzdHJp
bmcKLS8vIHZhcnN0cmluZyA6PQotLy8gICAgbGVuOiB2YXJpbnQzMgotLy8gICAgZGF0YTogdWlu
dDhbbGVuXQotCi0jaW5jbHVkZSAibGV2ZWxkYi93cml0ZV9iYXRjaC5oIgotCi0jaW5jbHVkZSAi
bGV2ZWxkYi9kYi5oIgotI2luY2x1ZGUgImRiL2RiZm9ybWF0LmgiCi0jaW5jbHVkZSAiZGIvbWVt
dGFibGUuaCIKLSNpbmNsdWRlICJkYi93cml0ZV9iYXRjaF9pbnRlcm5hbC5oIgotI2luY2x1ZGUg
InV0aWwvY29kaW5nLmgiCi0KLW5hbWVzcGFjZSBsZXZlbGRiIHsKLQotLy8gV3JpdGVCYXRjaCBo
ZWFkZXIgaGFzIGFuIDgtYnl0ZSBzZXF1ZW5jZSBudW1iZXIgZm9sbG93ZWQgYnkgYSA0LWJ5dGUg
Y291bnQuCi1zdGF0aWMgY29uc3Qgc2l6ZV90IGtIZWFkZXIgPSAxMjsKLQotV3JpdGVCYXRjaDo6
V3JpdGVCYXRjaCgpIHsKLSAgQ2xlYXIoKTsKLX0KLQotV3JpdGVCYXRjaDo6fldyaXRlQmF0Y2go
KSB7IH0KLQotV3JpdGVCYXRjaDo6SGFuZGxlcjo6fkhhbmRsZXIoKSB7IH0KLQotdm9pZCBXcml0
ZUJhdGNoOjpDbGVhcigpIHsKLSAgcmVwXy5jbGVhcigpOwotICByZXBfLnJlc2l6ZShrSGVhZGVy
KTsKLX0KLQotU3RhdHVzIFdyaXRlQmF0Y2g6Okl0ZXJhdGUoSGFuZGxlciogaGFuZGxlcikgY29u
c3QgewotICBTbGljZSBpbnB1dChyZXBfKTsKLSAgaWYgKGlucHV0LnNpemUoKSA8IGtIZWFkZXIp
IHsKLSAgICByZXR1cm4gU3RhdHVzOjpDb3JydXB0aW9uKCJtYWxmb3JtZWQgV3JpdGVCYXRjaCAo
dG9vIHNtYWxsKSIpOwotICB9Ci0KLSAgaW5wdXQucmVtb3ZlX3ByZWZpeChrSGVhZGVyKTsKLSAg
U2xpY2Uga2V5LCB2YWx1ZTsKLSAgaW50IGZvdW5kID0gMDsKLSAgd2hpbGUgKCFpbnB1dC5lbXB0
eSgpKSB7Ci0gICAgZm91bmQrKzsKLSAgICBjaGFyIHRhZyA9IGlucHV0WzBdOwotICAgIGlucHV0
LnJlbW92ZV9wcmVmaXgoMSk7Ci0gICAgc3dpdGNoICh0YWcpIHsKLSAgICAgIGNhc2Uga1R5cGVW
YWx1ZToKLSAgICAgICAgaWYgKEdldExlbmd0aFByZWZpeGVkU2xpY2UoJmlucHV0LCAma2V5KSAm
JgotICAgICAgICAgICAgR2V0TGVuZ3RoUHJlZml4ZWRTbGljZSgmaW5wdXQsICZ2YWx1ZSkpIHsK
LSAgICAgICAgICBoYW5kbGVyLT5QdXQoa2V5LCB2YWx1ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgcmV0dXJuIFN0YXR1czo6Q29ycnVwdGlvbigiYmFkIFdyaXRlQmF0Y2ggUHV0Iik7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIGtUeXBlRGVsZXRpb246Ci0g
ICAgICAgIGlmIChHZXRMZW5ndGhQcmVmaXhlZFNsaWNlKCZpbnB1dCwgJmtleSkpIHsKLSAgICAg
ICAgICBoYW5kbGVyLT5EZWxldGUoa2V5KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBy
ZXR1cm4gU3RhdHVzOjpDb3JydXB0aW9uKCJiYWQgV3JpdGVCYXRjaCBEZWxldGUiKTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBTdGF0
dXM6OkNvcnJ1cHRpb24oInVua25vd24gV3JpdGVCYXRjaCB0YWciKTsKLSAgICB9Ci0gIH0KLSAg
aWYgKGZvdW5kICE9IFdyaXRlQmF0Y2hJbnRlcm5hbDo6Q291bnQodGhpcykpIHsKLSAgICByZXR1
cm4gU3RhdHVzOjpDb3JydXB0aW9uKCJXcml0ZUJhdGNoIGhhcyB3cm9uZyBjb3VudCIpOwotICB9
IGVsc2UgewotICAgIHJldHVybiBTdGF0dXM6Ok9LKCk7Ci0gIH0KLX0KLQotaW50IFdyaXRlQmF0
Y2hJbnRlcm5hbDo6Q291bnQoY29uc3QgV3JpdGVCYXRjaCogYikgewotICByZXR1cm4gRGVjb2Rl
Rml4ZWQzMihiLT5yZXBfLmRhdGEoKSArIDgpOwotfQotCi12b2lkIFdyaXRlQmF0Y2hJbnRlcm5h
bDo6U2V0Q291bnQoV3JpdGVCYXRjaCogYiwgaW50IG4pIHsKLSAgRW5jb2RlRml4ZWQzMigmYi0+
cmVwX1s4XSwgbik7Ci19Ci0KLVNlcXVlbmNlTnVtYmVyIFdyaXRlQmF0Y2hJbnRlcm5hbDo6U2Vx
dWVuY2UoY29uc3QgV3JpdGVCYXRjaCogYikgewotICByZXR1cm4gU2VxdWVuY2VOdW1iZXIoRGVj
b2RlRml4ZWQ2NChiLT5yZXBfLmRhdGEoKSkpOwotfQotCi12b2lkIFdyaXRlQmF0Y2hJbnRlcm5h
bDo6U2V0U2VxdWVuY2UoV3JpdGVCYXRjaCogYiwgU2VxdWVuY2VOdW1iZXIgc2VxKSB7Ci0gIEVu
Y29kZUZpeGVkNjQoJmItPnJlcF9bMF0sIHNlcSk7Ci19Ci0KLXZvaWQgV3JpdGVCYXRjaDo6UHV0
KGNvbnN0IFNsaWNlJiBrZXksIGNvbnN0IFNsaWNlJiB2YWx1ZSkgewotICBXcml0ZUJhdGNoSW50
ZXJuYWw6OlNldENvdW50KHRoaXMsIFdyaXRlQmF0Y2hJbnRlcm5hbDo6Q291bnQodGhpcykgKyAx
KTsKLSAgcmVwXy5wdXNoX2JhY2soc3RhdGljX2Nhc3Q8Y2hhcj4oa1R5cGVWYWx1ZSkpOwotICBQ
dXRMZW5ndGhQcmVmaXhlZFNsaWNlKCZyZXBfLCBrZXkpOwotICBQdXRMZW5ndGhQcmVmaXhlZFNs
aWNlKCZyZXBfLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgV3JpdGVCYXRjaDo6RGVsZXRlKGNvbnN0IFNs
aWNlJiBrZXkpIHsKLSAgV3JpdGVCYXRjaEludGVybmFsOjpTZXRDb3VudCh0aGlzLCBXcml0ZUJh
dGNoSW50ZXJuYWw6OkNvdW50KHRoaXMpICsgMSk7Ci0gIHJlcF8ucHVzaF9iYWNrKHN0YXRpY19j
YXN0PGNoYXI+KGtUeXBlRGVsZXRpb24pKTsKLSAgUHV0TGVuZ3RoUHJlZml4ZWRTbGljZSgmcmVw
Xywga2V5KTsKLX0KLQotbmFtZXNwYWNlIHsKLWNsYXNzIE1lbVRhYmxlSW5zZXJ0ZXIgOiBwdWJs
aWMgV3JpdGVCYXRjaDo6SGFuZGxlciB7Ci0gcHVibGljOgotICBTZXF1ZW5jZU51bWJlciBzZXF1
ZW5jZV87Ci0gIE1lbVRhYmxlKiBtZW1fOwotCi0gIHZpcnR1YWwgdm9pZCBQdXQoY29uc3QgU2xp
Y2UmIGtleSwgY29uc3QgU2xpY2UmIHZhbHVlKSB7Ci0gICAgbWVtXy0+QWRkKHNlcXVlbmNlXywg
a1R5cGVWYWx1ZSwga2V5LCB2YWx1ZSk7Ci0gICAgc2VxdWVuY2VfKys7Ci0gIH0KLSAgdmlydHVh
bCB2b2lkIERlbGV0ZShjb25zdCBTbGljZSYga2V5KSB7Ci0gICAgbWVtXy0+QWRkKHNlcXVlbmNl
Xywga1R5cGVEZWxldGlvbiwga2V5LCBTbGljZSgpKTsKLSAgICBzZXF1ZW5jZV8rKzsKLSAgfQot
fTsKLX0gIC8vIG5hbWVzcGFjZQotCi1TdGF0dXMgV3JpdGVCYXRjaEludGVybmFsOjpJbnNlcnRJ
bnRvKGNvbnN0IFdyaXRlQmF0Y2gqIGIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1lbVRhYmxlKiBtZW10YWJsZSkgewotICBNZW1UYWJsZUluc2VydGVyIGluc2VydGVy
OwotICBpbnNlcnRlci5zZXF1ZW5jZV8gPSBXcml0ZUJhdGNoSW50ZXJuYWw6OlNlcXVlbmNlKGIp
OwotICBpbnNlcnRlci5tZW1fID0gbWVtdGFibGU7Ci0gIHJldHVybiBiLT5JdGVyYXRlKCZpbnNl
cnRlcik7Ci19Ci0KLXZvaWQgV3JpdGVCYXRjaEludGVybmFsOjpTZXRDb250ZW50cyhXcml0ZUJh
dGNoKiBiLCBjb25zdCBTbGljZSYgY29udGVudHMpIHsKLSAgYXNzZXJ0KGNvbnRlbnRzLnNpemUo
KSA+PSBrSGVhZGVyKTsKLSAgYi0+cmVwXy5hc3NpZ24oY29udGVudHMuZGF0YSgpLCBjb250ZW50
cy5zaXplKCkpOwotfQotCi12b2lkIFdyaXRlQmF0Y2hJbnRlcm5hbDo6QXBwZW5kKFdyaXRlQmF0
Y2gqIGRzdCwgY29uc3QgV3JpdGVCYXRjaCogc3JjKSB7Ci0gIFNldENvdW50KGRzdCwgQ291bnQo
ZHN0KSArIENvdW50KHNyYykpOwotICBhc3NlcnQoc3JjLT5yZXBfLnNpemUoKSA+PSBrSGVhZGVy
KTsKLSAgZHN0LT5yZXBfLmFwcGVuZChzcmMtPnJlcF8uZGF0YSgpICsga0hlYWRlciwgc3JjLT5y
ZXBfLnNpemUoKSAtIGtIZWFkZXIpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi93cml0ZV9iYXRjaF9pbnRlcm5h
bC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi93cml0ZV9iYXRjaF9pbnRlcm5hbC5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDIzYTdmLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvd3JpdGVfYmF0Y2hfaW50ZXJuYWwuaAorKysgL2Rl
di9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxE
QiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9m
IGNvbnRyaWJ1dG9ycy4KLQotI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfREJfV1JJVEVfQkFUQ0hf
SU5URVJOQUxfSF8KLSNkZWZpbmUgU1RPUkFHRV9MRVZFTERCX0RCX1dSSVRFX0JBVENIX0lOVEVS
TkFMX0hfCi0KLSNpbmNsdWRlICJsZXZlbGRiL3dyaXRlX2JhdGNoLmgiCi0KLW5hbWVzcGFjZSBs
ZXZlbGRiIHsKLQotY2xhc3MgTWVtVGFibGU7Ci0KLS8vIFdyaXRlQmF0Y2hJbnRlcm5hbCBwcm92
aWRlcyBzdGF0aWMgbWV0aG9kcyBmb3IgbWFuaXB1bGF0aW5nIGEKLS8vIFdyaXRlQmF0Y2ggdGhh
dCB3ZSBkb24ndCB3YW50IGluIHRoZSBwdWJsaWMgV3JpdGVCYXRjaCBpbnRlcmZhY2UuCi1jbGFz
cyBXcml0ZUJhdGNoSW50ZXJuYWwgewotIHB1YmxpYzoKLSAgLy8gUmV0dXJuIHRoZSBudW1iZXIg
b2YgZW50cmllcyBpbiB0aGUgYmF0Y2guCi0gIHN0YXRpYyBpbnQgQ291bnQoY29uc3QgV3JpdGVC
YXRjaCogYmF0Y2gpOwotCi0gIC8vIFNldCB0aGUgY291bnQgZm9yIHRoZSBudW1iZXIgb2YgZW50
cmllcyBpbiB0aGUgYmF0Y2guCi0gIHN0YXRpYyB2b2lkIFNldENvdW50KFdyaXRlQmF0Y2gqIGJh
dGNoLCBpbnQgbik7Ci0KLSAgLy8gUmV0dXJuIHRoZSBzZXFldW5jZSBudW1iZXIgZm9yIHRoZSBz
dGFydCBvZiB0aGlzIGJhdGNoLgotICBzdGF0aWMgU2VxdWVuY2VOdW1iZXIgU2VxdWVuY2UoY29u
c3QgV3JpdGVCYXRjaCogYmF0Y2gpOwotCi0gIC8vIFN0b3JlIHRoZSBzcGVjaWZpZWQgbnVtYmVy
IGFzIHRoZSBzZXFldW5jZSBudW1iZXIgZm9yIHRoZSBzdGFydCBvZgotICAvLyB0aGlzIGJhdGNo
LgotICBzdGF0aWMgdm9pZCBTZXRTZXF1ZW5jZShXcml0ZUJhdGNoKiBiYXRjaCwgU2VxdWVuY2VO
dW1iZXIgc2VxKTsKLQotICBzdGF0aWMgU2xpY2UgQ29udGVudHMoY29uc3QgV3JpdGVCYXRjaCog
YmF0Y2gpIHsKLSAgICByZXR1cm4gU2xpY2UoYmF0Y2gtPnJlcF8pOwotICB9Ci0KLSAgc3RhdGlj
IHNpemVfdCBCeXRlU2l6ZShjb25zdCBXcml0ZUJhdGNoKiBiYXRjaCkgewotICAgIHJldHVybiBi
YXRjaC0+cmVwXy5zaXplKCk7Ci0gIH0KLQotICBzdGF0aWMgdm9pZCBTZXRDb250ZW50cyhXcml0
ZUJhdGNoKiBiYXRjaCwgY29uc3QgU2xpY2UmIGNvbnRlbnRzKTsKLQotICBzdGF0aWMgU3RhdHVz
IEluc2VydEludG8oY29uc3QgV3JpdGVCYXRjaCogYmF0Y2gsIE1lbVRhYmxlKiBtZW10YWJsZSk7
Ci0KLSAgc3RhdGljIHZvaWQgQXBwZW5kKFdyaXRlQmF0Y2gqIGRzdCwgY29uc3QgV3JpdGVCYXRj
aCogc3JjKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCi0KLQotI2VuZGlmICAvLyBT
VE9SQUdFX0xFVkVMREJfREJfV1JJVEVfQkFUQ0hfSU5URVJOQUxfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvd3JpdGVfYmF0Y2hfdGVzdC5jYyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvZGIvd3JpdGVfYmF0Y2hfdGVzdC5jYwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOTA2NGUzZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
ZXZlbGRiL2RiL3dyaXRlX2JhdGNoX3Rlc3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAs
MCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgotCi0j
aW5jbHVkZSAibGV2ZWxkYi9kYi5oIgotCi0jaW5jbHVkZSAiZGIvbWVtdGFibGUuaCIKLSNpbmNs
dWRlICJkYi93cml0ZV9iYXRjaF9pbnRlcm5hbC5oIgotI2luY2x1ZGUgImxldmVsZGIvZW52Lmgi
Ci0jaW5jbHVkZSAidXRpbC9sb2dnaW5nLmgiCi0jaW5jbHVkZSAidXRpbC90ZXN0aGFybmVzcy5o
IgotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7Ci0KLXN0YXRpYyBzdGQ6OnN0cmluZyBQcmludENvbnRl
bnRzKFdyaXRlQmF0Y2gqIGIpIHsKLSAgSW50ZXJuYWxLZXlDb21wYXJhdG9yIGNtcChCeXRld2lz
ZUNvbXBhcmF0b3IoKSk7Ci0gIE1lbVRhYmxlKiBtZW0gPSBuZXcgTWVtVGFibGUoY21wKTsKLSAg
bWVtLT5SZWYoKTsKLSAgc3RkOjpzdHJpbmcgc3RhdGU7Ci0gIFN0YXR1cyBzID0gV3JpdGVCYXRj
aEludGVybmFsOjpJbnNlcnRJbnRvKGIsIG1lbSk7Ci0gIGludCBjb3VudCA9IDA7Ci0gIEl0ZXJh
dG9yKiBpdGVyID0gbWVtLT5OZXdJdGVyYXRvcigpOwotICBmb3IgKGl0ZXItPlNlZWtUb0ZpcnN0
KCk7IGl0ZXItPlZhbGlkKCk7IGl0ZXItPk5leHQoKSkgewotICAgIFBhcnNlZEludGVybmFsS2V5
IGlrZXk7Ci0gICAgQVNTRVJUX1RSVUUoUGFyc2VJbnRlcm5hbEtleShpdGVyLT5rZXkoKSwgJmlr
ZXkpKTsKLSAgICBzd2l0Y2ggKGlrZXkudHlwZSkgewotICAgICAgY2FzZSBrVHlwZVZhbHVlOgot
ICAgICAgICBzdGF0ZS5hcHBlbmQoIlB1dCgiKTsKLSAgICAgICAgc3RhdGUuYXBwZW5kKGlrZXku
dXNlcl9rZXkuVG9TdHJpbmcoKSk7Ci0gICAgICAgIHN0YXRlLmFwcGVuZCgiLCAiKTsKLSAgICAg
ICAgc3RhdGUuYXBwZW5kKGl0ZXItPnZhbHVlKCkuVG9TdHJpbmcoKSk7Ci0gICAgICAgIHN0YXRl
LmFwcGVuZCgiKSIpOwotICAgICAgICBjb3VudCsrOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2Uga1R5cGVEZWxldGlvbjoKLSAgICAgICAgc3RhdGUuYXBwZW5kKCJEZWxldGUoIik7Ci0gICAg
ICAgIHN0YXRlLmFwcGVuZChpa2V5LnVzZXJfa2V5LlRvU3RyaW5nKCkpOwotICAgICAgICBzdGF0
ZS5hcHBlbmQoIikiKTsKLSAgICAgICAgY291bnQrKzsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIHN0YXRlLmFwcGVuZCgiQCIpOwotICAgIHN0YXRlLmFwcGVuZChOdW1iZXJUb1N0cmluZyhp
a2V5LnNlcXVlbmNlKSk7Ci0gIH0KLSAgZGVsZXRlIGl0ZXI7Ci0gIGlmICghcy5vaygpKSB7Ci0g
ICAgc3RhdGUuYXBwZW5kKCJQYXJzZUVycm9yKCkiKTsKLSAgfSBlbHNlIGlmIChjb3VudCAhPSBX
cml0ZUJhdGNoSW50ZXJuYWw6OkNvdW50KGIpKSB7Ci0gICAgc3RhdGUuYXBwZW5kKCJDb3VudE1p
c21hdGNoKCkiKTsKLSAgfQotICBtZW0tPlVucmVmKCk7Ci0gIHJldHVybiBzdGF0ZTsKLX0KLQot
Y2xhc3MgV3JpdGVCYXRjaFRlc3QgeyB9OwotCi1URVNUKFdyaXRlQmF0Y2hUZXN0LCBFbXB0eSkg
ewotICBXcml0ZUJhdGNoIGJhdGNoOwotICBBU1NFUlRfRVEoIiIsIFByaW50Q29udGVudHMoJmJh
dGNoKSk7Ci0gIEFTU0VSVF9FUSgwLCBXcml0ZUJhdGNoSW50ZXJuYWw6OkNvdW50KCZiYXRjaCkp
OwotfQotCi1URVNUKFdyaXRlQmF0Y2hUZXN0LCBNdWx0aXBsZSkgewotICBXcml0ZUJhdGNoIGJh
dGNoOwotICBiYXRjaC5QdXQoU2xpY2UoImZvbyIpLCBTbGljZSgiYmFyIikpOwotICBiYXRjaC5E
ZWxldGUoU2xpY2UoImJveCIpKTsKLSAgYmF0Y2guUHV0KFNsaWNlKCJiYXoiKSwgU2xpY2UoImJv
byIpKTsKLSAgV3JpdGVCYXRjaEludGVybmFsOjpTZXRTZXF1ZW5jZSgmYmF0Y2gsIDEwMCk7Ci0g
IEFTU0VSVF9FUSgxMDAsIFdyaXRlQmF0Y2hJbnRlcm5hbDo6U2VxdWVuY2UoJmJhdGNoKSk7Ci0g
IEFTU0VSVF9FUSgzLCBXcml0ZUJhdGNoSW50ZXJuYWw6OkNvdW50KCZiYXRjaCkpOwotICBBU1NF
UlRfRVEoIlB1dChiYXosIGJvbylAMTAyIgotICAgICAgICAgICAgIkRlbGV0ZShib3gpQDEwMSIK
LSAgICAgICAgICAgICJQdXQoZm9vLCBiYXIpQDEwMCIsCi0gICAgICAgICAgICBQcmludENvbnRl
bnRzKCZiYXRjaCkpOwotfQotCi1URVNUKFdyaXRlQmF0Y2hUZXN0LCBDb3JydXB0aW9uKSB7Ci0g
IFdyaXRlQmF0Y2ggYmF0Y2g7Ci0gIGJhdGNoLlB1dChTbGljZSgiZm9vIiksIFNsaWNlKCJiYXIi
KSk7Ci0gIGJhdGNoLkRlbGV0ZShTbGljZSgiYm94IikpOwotICBXcml0ZUJhdGNoSW50ZXJuYWw6
OlNldFNlcXVlbmNlKCZiYXRjaCwgMjAwKTsKLSAgU2xpY2UgY29udGVudHMgPSBXcml0ZUJhdGNo
SW50ZXJuYWw6OkNvbnRlbnRzKCZiYXRjaCk7Ci0gIFdyaXRlQmF0Y2hJbnRlcm5hbDo6U2V0Q29u
dGVudHMoJmJhdGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNsaWNlKGNv
bnRlbnRzLmRhdGEoKSxjb250ZW50cy5zaXplKCktMSkpOwotICBBU1NFUlRfRVEoIlB1dChmb28s
IGJhcilAMjAwIgotICAgICAgICAgICAgIlBhcnNlRXJyb3IoKSIsCi0gICAgICAgICAgICBQcmlu
dENvbnRlbnRzKCZiYXRjaCkpOwotfQotCi1URVNUKFdyaXRlQmF0Y2hUZXN0LCBBcHBlbmQpIHsK
LSAgV3JpdGVCYXRjaCBiMSwgYjI7Ci0gIFdyaXRlQmF0Y2hJbnRlcm5hbDo6U2V0U2VxdWVuY2Uo
JmIxLCAyMDApOwotICBXcml0ZUJhdGNoSW50ZXJuYWw6OlNldFNlcXVlbmNlKCZiMiwgMzAwKTsK
LSAgV3JpdGVCYXRjaEludGVybmFsOjpBcHBlbmQoJmIxLCAmYjIpOwotICBBU1NFUlRfRVEoIiIs
Ci0gICAgICAgICAgICBQcmludENvbnRlbnRzKCZiMSkpOwotICBiMi5QdXQoImEiLCAidmEiKTsK
LSAgV3JpdGVCYXRjaEludGVybmFsOjpBcHBlbmQoJmIxLCAmYjIpOwotICBBU1NFUlRfRVEoIlB1
dChhLCB2YSlAMjAwIiwKLSAgICAgICAgICAgIFByaW50Q29udGVudHMoJmIxKSk7Ci0gIGIyLkNs
ZWFyKCk7Ci0gIGIyLlB1dCgiYiIsICJ2YiIpOwotICBXcml0ZUJhdGNoSW50ZXJuYWw6OkFwcGVu
ZCgmYjEsICZiMik7Ci0gIEFTU0VSVF9FUSgiUHV0KGEsIHZhKUAyMDAiCi0gICAgICAgICAgICAi
UHV0KGIsIHZiKUAyMDEiLAotICAgICAgICAgICAgUHJpbnRDb250ZW50cygmYjEpKTsKLSAgYjIu
RGVsZXRlKCJmb28iKTsKLSAgV3JpdGVCYXRjaEludGVybmFsOjpBcHBlbmQoJmIxLCAmYjIpOwot
ICBBU1NFUlRfRVEoIlB1dChhLCB2YSlAMjAwIgotICAgICAgICAgICAgIlB1dChiLCB2YilAMjAy
IgotICAgICAgICAgICAgIlB1dChiLCB2YilAMjAxIgotICAgICAgICAgICAgIkRlbGV0ZShmb28p
QDIwMyIsCi0gICAgICAgICAgICBQcmludENvbnRlbnRzKCZiMSkpOwotfQotCi19ICAvLyBuYW1l
c3BhY2UgbGV2ZWxkYgotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKLSAgcmV0
dXJuIGxldmVsZGI6OnRlc3Q6OlJ1bkFsbFRlc3RzKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL2RvYy9iZW5jaC9kYl9iZW5jaF9zcWxpdGUzLmNjIGIvU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi9kb2MvYmVuY2gvZGJfYmVuY2hfc3FsaXRlMy5jYwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTYzYWFhOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL2RvYy9iZW5jaC9kYl9iZW5jaF9zcWxpdGUzLmNjCisrKyAvZGV2L251
bGwKQEAgLTEsNzE4ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNv
bnRyaWJ1dG9ycy4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0j
aW5jbHVkZSA8c3FsaXRlMy5oPgotI2luY2x1ZGUgInV0aWwvaGlzdG9ncmFtLmgiCi0jaW5jbHVk
ZSAidXRpbC9yYW5kb20uaCIKLSNpbmNsdWRlICJ1dGlsL3Rlc3R1dGlsLmgiCi0KLS8vIENvbW1h
LXNlcGFyYXRlZCBsaXN0IG9mIG9wZXJhdGlvbnMgdG8gcnVuIGluIHRoZSBzcGVjaWZpZWQgb3Jk
ZXIKLS8vICAgQWN0dWFsIGJlbmNobWFya3M6Ci0vLwotLy8gICBmaWxsc2VxICAgICAgIC0tIHdy
aXRlIE4gdmFsdWVzIGluIHNlcXVlbnRpYWwga2V5IG9yZGVyIGluIGFzeW5jIG1vZGUKLS8vICAg
ZmlsbHNlcXN5bmMgICAtLSB3cml0ZSBOLzEwMCB2YWx1ZXMgaW4gc2VxdWVudGlhbCBrZXkgb3Jk
ZXIgaW4gc3luYyBtb2RlCi0vLyAgIGZpbGxzZXFiYXRjaCAgLS0gYmF0Y2ggd3JpdGUgTiB2YWx1
ZXMgaW4gc2VxdWVudGlhbCBrZXkgb3JkZXIgaW4gYXN5bmMgbW9kZQotLy8gICBmaWxscmFuZG9t
ICAgIC0tIHdyaXRlIE4gdmFsdWVzIGluIHJhbmRvbSBrZXkgb3JkZXIgaW4gYXN5bmMgbW9kZQot
Ly8gICBmaWxscmFuZHN5bmMgIC0tIHdyaXRlIE4vMTAwIHZhbHVlcyBpbiByYW5kb20ga2V5IG9y
ZGVyIGluIHN5bmMgbW9kZQotLy8gICBmaWxscmFuZGJhdGNoIC0tIGJhdGNoIHdyaXRlIE4gdmFs
dWVzIGluIHNlcXVlbnRpYWwga2V5IG9yZGVyIGluIGFzeW5jIG1vZGUKLS8vICAgb3ZlcndyaXRl
ICAgICAtLSBvdmVyd3JpdGUgTiB2YWx1ZXMgaW4gcmFuZG9tIGtleSBvcmRlciBpbiBhc3luYyBt
b2RlCi0vLyAgIGZpbGxyYW5kMTAwSyAgLS0gd3JpdGUgTi8xMDAwIDEwMEsgdmFsdWVzIGluIHJh
bmRvbSBvcmRlciBpbiBhc3luYyBtb2RlCi0vLyAgIGZpbGxzZXExMDBLICAgLS0gd3JpdGUgTi8x
MDAwIDEwMEsgdmFsdWVzIGluIHNlcXVlbnRpYWwgb3JkZXIgaW4gYXN5bmMgbW9kZQotLy8gICBy
ZWFkc2VxICAgICAgIC0tIHJlYWQgTiB0aW1lcyBzZXF1ZW50aWFsbHkKLS8vICAgcmVhZHJhbmRv
bSAgICAtLSByZWFkIE4gdGltZXMgaW4gcmFuZG9tIG9yZGVyCi0vLyAgIHJlYWRyYW5kMTAwSyAg
LS0gcmVhZCBOLzEwMDAgMTAwSyB2YWx1ZXMgaW4gc2VxdWVudGlhbCBvcmRlciBpbiBhc3luYyBt
b2RlCi1zdGF0aWMgY29uc3QgY2hhciogRkxBR1NfYmVuY2htYXJrcyA9Ci0gICAgImZpbGxzZXEs
IgotICAgICJmaWxsc2Vxc3luYywiCi0gICAgImZpbGxzZXFiYXRjaCwiCi0gICAgImZpbGxyYW5k
b20sIgotICAgICJmaWxscmFuZHN5bmMsIgotICAgICJmaWxscmFuZGJhdGNoLCIKLSAgICAib3Zl
cndyaXRlLCIKLSAgICAib3ZlcndyaXRlYmF0Y2gsIgotICAgICJyZWFkcmFuZG9tLCIKLSAgICAi
cmVhZHNlcSwiCi0gICAgImZpbGxyYW5kMTAwSywiCi0gICAgImZpbGxzZXExMDBLLCIKLSAgICAi
cmVhZHNlcSwiCi0gICAgInJlYWRyYW5kMTAwSywiCi0gICAgOwotCi0vLyBOdW1iZXIgb2Yga2V5
L3ZhbHVlcyB0byBwbGFjZSBpbiBkYXRhYmFzZQotc3RhdGljIGludCBGTEFHU19udW0gPSAxMDAw
MDAwOwotCi0vLyBOdW1iZXIgb2YgcmVhZCBvcGVyYXRpb25zIHRvIGRvLiAgSWYgbmVnYXRpdmUs
IGRvIEZMQUdTX251bSByZWFkcy4KLXN0YXRpYyBpbnQgRkxBR1NfcmVhZHMgPSAtMTsKLQotLy8g
U2l6ZSBvZiBlYWNoIHZhbHVlCi1zdGF0aWMgaW50IEZMQUdTX3ZhbHVlX3NpemUgPSAxMDA7Ci0K
LS8vIFByaW50IGhpc3RvZ3JhbSBvZiBvcGVyYXRpb24gdGltaW5ncwotc3RhdGljIGJvb2wgRkxB
R1NfaGlzdG9ncmFtID0gZmFsc2U7Ci0KLS8vIEFycmFuZ2UgdG8gZ2VuZXJhdGUgdmFsdWVzIHRo
YXQgc2hyaW5rIHRvIHRoaXMgZnJhY3Rpb24gb2YKLS8vIHRoZWlyIG9yaWdpbmFsIHNpemUgYWZ0
ZXIgY29tcHJlc3Npb24KLXN0YXRpYyBkb3VibGUgRkxBR1NfY29tcHJlc3Npb25fcmF0aW8gPSAw
LjU7Ci0KLS8vIFBhZ2Ugc2l6ZS4gRGVmYXVsdCAxIEtCLgotc3RhdGljIGludCBGTEFHU19wYWdl
X3NpemUgPSAxMDI0OwotCi0vLyBOdW1iZXIgb2YgcGFnZXMuCi0vLyBEZWZhdWx0IGNhY2hlIHNp
emUgPSBGTEFHU19wYWdlX3NpemUgKiBGTEFHU19udW1fcGFnZXMgPSA0IE1CLgotc3RhdGljIGlu
dCBGTEFHU19udW1fcGFnZXMgPSA0MDk2OwotCi0vLyBJZiB0cnVlLCBkbyBub3QgZGVzdHJveSB0
aGUgZXhpc3RpbmcgZGF0YWJhc2UuICBJZiB5b3Ugc2V0IHRoaXMKLS8vIGZsYWcgYW5kIGFsc28g
c3BlY2lmeSBhIGJlbmNobWFyayB0aGF0IHdhbnRzIGEgZnJlc2ggZGF0YWJhc2UsIHRoYXQKLS8v
IGJlbmNobWFyayB3aWxsIGZhaWwuCi1zdGF0aWMgYm9vbCBGTEFHU191c2VfZXhpc3RpbmdfZGIg
PSBmYWxzZTsKLQotLy8gSWYgdHJ1ZSwgd2UgYWxsb3cgYmF0Y2ggd3JpdGVzIHRvIG9jY3VyCi1z
dGF0aWMgYm9vbCBGTEFHU190cmFuc2FjdGlvbiA9IHRydWU7Ci0KLS8vIElmIHRydWUsIHdlIGVu
YWJsZSBXcml0ZS1BaGVhZCBMb2dnaW5nCi1zdGF0aWMgYm9vbCBGTEFHU19XQUxfZW5hYmxlZCA9
IHRydWU7Ci0KLS8vIFVzZSB0aGUgZGIgd2l0aCB0aGUgZm9sbG93aW5nIG5hbWUuCi1zdGF0aWMg
Y29uc3QgY2hhciogRkxBR1NfZGIgPSBOVUxMOwotCi1pbmxpbmUKLXN0YXRpYyB2b2lkIEV4ZWNF
cnJvckNoZWNrKGludCBzdGF0dXMsIGNoYXIgKmVycl9tc2cpIHsKLSAgaWYgKHN0YXR1cyAhPSBT
UUxJVEVfT0spIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIlNRTCBlcnJvcjogJXNcbiIsIGVycl9t
c2cpOwotICAgIHNxbGl0ZTNfZnJlZShlcnJfbXNnKTsKLSAgICBleGl0KDEpOwotICB9Ci19Ci0K
LWlubGluZQotc3RhdGljIHZvaWQgU3RlcEVycm9yQ2hlY2soaW50IHN0YXR1cykgewotICBpZiAo
c3RhdHVzICE9IFNRTElURV9ET05FKSB7Ci0gICAgZnByaW50ZihzdGRlcnIsICJTUUwgc3RlcCBl
cnJvcjogc3RhdHVzID0gJWRcbiIsIHN0YXR1cyk7Ci0gICAgZXhpdCgxKTsKLSAgfQotfQotCi1p
bmxpbmUKLXN0YXRpYyB2b2lkIEVycm9yQ2hlY2soaW50IHN0YXR1cykgewotICBpZiAoc3RhdHVz
ICE9IFNRTElURV9PSykgewotICAgIGZwcmludGYoc3RkZXJyLCAic3FsaXRlMyBlcnJvcjogc3Rh
dHVzID0gJWRcbiIsIHN0YXR1cyk7Ci0gICAgZXhpdCgxKTsKLSAgfQotfQotCi1pbmxpbmUKLXN0
YXRpYyB2b2lkIFdhbENoZWNrcG9pbnQoc3FsaXRlMyogZGJfKSB7Ci0gIC8vIEZsdXNoIGFsbCB3
cml0ZXMgdG8gZGlzawotICBpZiAoRkxBR1NfV0FMX2VuYWJsZWQpIHsKLSAgICBzcWxpdGUzX3dh
bF9jaGVja3BvaW50X3YyKGRiXywgTlVMTCwgU1FMSVRFX0NIRUNLUE9JTlRfRlVMTCwgTlVMTCwg
TlVMTCk7Ci0gIH0KLX0KLQotbmFtZXNwYWNlIGxldmVsZGIgewotCi0vLyBIZWxwZXIgZm9yIHF1
aWNrbHkgZ2VuZXJhdGluZyByYW5kb20gZGF0YS4KLW5hbWVzcGFjZSB7Ci1jbGFzcyBSYW5kb21H
ZW5lcmF0b3IgewotIHByaXZhdGU6Ci0gIHN0ZDo6c3RyaW5nIGRhdGFfOwotICBpbnQgcG9zXzsK
LQotIHB1YmxpYzoKLSAgUmFuZG9tR2VuZXJhdG9yKCkgewotICAgIC8vIFdlIHVzZSBhIGxpbWl0
ZWQgYW1vdW50IG9mIGRhdGEgb3ZlciBhbmQgb3ZlciBhZ2FpbiBhbmQgZW5zdXJlCi0gICAgLy8g
dGhhdCBpdCBpcyBsYXJnZXIgdGhhbiB0aGUgY29tcHJlc3Npb24gd2luZG93ICgzMktCKSwgYW5k
IGFsc28KLSAgICAvLyBsYXJnZSBlbm91Z2ggdG8gc2VydmUgYWxsIHR5cGljYWwgdmFsdWUgc2l6
ZXMgd2Ugd2FudCB0byB3cml0ZS4KLSAgICBSYW5kb20gcm5kKDMwMSk7Ci0gICAgc3RkOjpzdHJp
bmcgcGllY2U7Ci0gICAgd2hpbGUgKGRhdGFfLnNpemUoKSA8IDEwNDg1NzYpIHsKLSAgICAgIC8v
IEFkZCBhIHNob3J0IGZyYWdtZW50IHRoYXQgaXMgYXMgY29tcHJlc3NpYmxlIGFzIHNwZWNpZmll
ZAotICAgICAgLy8gYnkgRkxBR1NfY29tcHJlc3Npb25fcmF0aW8uCi0gICAgICB0ZXN0OjpDb21w
cmVzc2libGVTdHJpbmcoJnJuZCwgRkxBR1NfY29tcHJlc3Npb25fcmF0aW8sIDEwMCwgJnBpZWNl
KTsKLSAgICAgIGRhdGFfLmFwcGVuZChwaWVjZSk7Ci0gICAgfQotICAgIHBvc18gPSAwOwotICB9
Ci0KLSAgU2xpY2UgR2VuZXJhdGUoaW50IGxlbikgewotICAgIGlmIChwb3NfICsgbGVuID4gZGF0
YV8uc2l6ZSgpKSB7Ci0gICAgICBwb3NfID0gMDsKLSAgICAgIGFzc2VydChsZW4gPCBkYXRhXy5z
aXplKCkpOwotICAgIH0KLSAgICBwb3NfICs9IGxlbjsKLSAgICByZXR1cm4gU2xpY2UoZGF0YV8u
ZGF0YSgpICsgcG9zXyAtIGxlbiwgbGVuKTsKLSAgfQotfTsKLQotc3RhdGljIFNsaWNlIFRyaW1T
cGFjZShTbGljZSBzKSB7Ci0gIGludCBzdGFydCA9IDA7Ci0gIHdoaWxlIChzdGFydCA8IHMuc2l6
ZSgpICYmIGlzc3BhY2Uoc1tzdGFydF0pKSB7Ci0gICAgc3RhcnQrKzsKLSAgfQotICBpbnQgbGlt
aXQgPSBzLnNpemUoKTsKLSAgd2hpbGUgKGxpbWl0ID4gc3RhcnQgJiYgaXNzcGFjZShzW2xpbWl0
LTFdKSkgewotICAgIGxpbWl0LS07Ci0gIH0KLSAgcmV0dXJuIFNsaWNlKHMuZGF0YSgpICsgc3Rh
cnQsIGxpbWl0IC0gc3RhcnQpOwotfQotCi19ICAvLyBuYW1lc3BhY2UKLQotY2xhc3MgQmVuY2ht
YXJrIHsKLSBwcml2YXRlOgotICBzcWxpdGUzKiBkYl87Ci0gIGludCBkYl9udW1fOwotICBpbnQg
bnVtXzsKLSAgaW50IHJlYWRzXzsKLSAgZG91YmxlIHN0YXJ0XzsKLSAgZG91YmxlIGxhc3Rfb3Bf
ZmluaXNoXzsKLSAgaW50NjRfdCBieXRlc187Ci0gIHN0ZDo6c3RyaW5nIG1lc3NhZ2VfOwotICBI
aXN0b2dyYW0gaGlzdF87Ci0gIFJhbmRvbUdlbmVyYXRvciBnZW5fOwotICBSYW5kb20gcmFuZF87
Ci0KLSAgLy8gU3RhdGUga2VwdCBmb3IgcHJvZ3Jlc3MgbWVzc2FnZXMKLSAgaW50IGRvbmVfOwot
ICBpbnQgbmV4dF9yZXBvcnRfOyAgICAgLy8gV2hlbiB0byByZXBvcnQgbmV4dAotCi0gIHZvaWQg
UHJpbnRIZWFkZXIoKSB7Ci0gICAgY29uc3QgaW50IGtLZXlTaXplID0gMTY7Ci0gICAgUHJpbnRF
bnZpcm9ubWVudCgpOwotICAgIGZwcmludGYoc3Rkb3V0LCAiS2V5czogICAgICAgJWQgYnl0ZXMg
ZWFjaFxuIiwga0tleVNpemUpOwotICAgIGZwcmludGYoc3Rkb3V0LCAiVmFsdWVzOiAgICAgJWQg
Ynl0ZXMgZWFjaFxuIiwgRkxBR1NfdmFsdWVfc2l6ZSk7Ci0gICAgZnByaW50ZihzdGRvdXQsICJF
bnRyaWVzOiAgICAlZFxuIiwgbnVtXyk7Ci0gICAgZnByaW50ZihzdGRvdXQsICJSYXdTaXplOiAg
ICAlLjFmIE1CIChlc3RpbWF0ZWQpXG4iLAotICAgICAgICAgICAgKChzdGF0aWNfY2FzdDxpbnQ2
NF90PihrS2V5U2l6ZSArIEZMQUdTX3ZhbHVlX3NpemUpICogbnVtXykKLSAgICAgICAgICAgICAv
IDEwNDg1NzYuMCkpOwotICAgIFByaW50V2FybmluZ3MoKTsKLSAgICBmcHJpbnRmKHN0ZG91dCwg
Ii0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0g
IH0KLQotICB2b2lkIFByaW50V2FybmluZ3MoKSB7Ci0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYg
IWRlZmluZWQoX19PUFRJTUlaRV9fKQotICAgIGZwcmludGYoc3Rkb3V0LAotICAgICAgICAgICAg
IldBUk5JTkc6IE9wdGltaXphdGlvbiBpcyBkaXNhYmxlZDogYmVuY2htYXJrcyB1bm5lY2Vzc2Fy
aWx5IHNsb3dcbiIKLSAgICAgICAgICAgICk7Ci0jZW5kaWYKLSNpZm5kZWYgTkRFQlVHCi0gICAg
ZnByaW50ZihzdGRvdXQsCi0gICAgICAgICAgICAiV0FSTklORzogQXNzZXJ0aW9ucyBhcmUgZW5h
YmxlZDsgYmVuY2htYXJrcyB1bm5lY2Vzc2FyaWx5IHNsb3dcbiIpOwotI2VuZGlmCi0gIH0KLQot
ICB2b2lkIFByaW50RW52aXJvbm1lbnQoKSB7Ci0gICAgZnByaW50ZihzdGRlcnIsICJTUUxpdGU6
ICAgICB2ZXJzaW9uICVzXG4iLCBTUUxJVEVfVkVSU0lPTik7Ci0KLSNpZiBkZWZpbmVkKF9fbGlu
dXgpCi0gICAgdGltZV90IG5vdyA9IHRpbWUoTlVMTCk7Ci0gICAgZnByaW50ZihzdGRlcnIsICJE
YXRlOiAgICAgICAlcyIsIGN0aW1lKCZub3cpKTsgIC8vIGN0aW1lKCkgYWRkcyBuZXdsaW5lCi0K
LSAgICBGSUxFKiBjcHVpbmZvID0gZm9wZW4oIi9wcm9jL2NwdWluZm8iLCAiciIpOwotICAgIGlm
IChjcHVpbmZvICE9IE5VTEwpIHsKLSAgICAgIGNoYXIgbGluZVsxMDAwXTsKLSAgICAgIGludCBu
dW1fY3B1cyA9IDA7Ci0gICAgICBzdGQ6OnN0cmluZyBjcHVfdHlwZTsKLSAgICAgIHN0ZDo6c3Ry
aW5nIGNhY2hlX3NpemU7Ci0gICAgICB3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBj
cHVpbmZvKSAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHNlcCA9IHN0cmNocihsaW5l
LCAnOicpOwotICAgICAgICBpZiAoc2VwID09IE5VTEwpIHsKLSAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgfQotICAgICAgICBTbGljZSBrZXkgPSBUcmltU3BhY2UoU2xpY2UobGluZSwgc2Vw
IC0gMSAtIGxpbmUpKTsKLSAgICAgICAgU2xpY2UgdmFsID0gVHJpbVNwYWNlKFNsaWNlKHNlcCAr
IDEpKTsKLSAgICAgICAgaWYgKGtleSA9PSAibW9kZWwgbmFtZSIpIHsKLSAgICAgICAgICArK251
bV9jcHVzOwotICAgICAgICAgIGNwdV90eXBlID0gdmFsLlRvU3RyaW5nKCk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoa2V5ID09ICJjYWNoZSBzaXplIikgewotICAgICAgICAgIGNhY2hlX3NpemUgPSB2
YWwuVG9TdHJpbmcoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgZmNsb3NlKGNwdWluZm8p
OwotICAgICAgZnByaW50ZihzdGRlcnIsICJDUFU6ICAgICAgICAlZCAqICVzXG4iLCBudW1fY3B1
cywgY3B1X3R5cGUuY19zdHIoKSk7Ci0gICAgICBmcHJpbnRmKHN0ZGVyciwgIkNQVUNhY2hlOiAg
ICVzXG4iLCBjYWNoZV9zaXplLmNfc3RyKCkpOwotICAgIH0KLSNlbmRpZgotICB9Ci0KLSAgdm9p
ZCBTdGFydCgpIHsKLSAgICBzdGFydF8gPSBFbnY6OkRlZmF1bHQoKS0+Tm93TWljcm9zKCkgKiAx
ZS02OwotICAgIGJ5dGVzXyA9IDA7Ci0gICAgbWVzc2FnZV8uY2xlYXIoKTsKLSAgICBsYXN0X29w
X2ZpbmlzaF8gPSBzdGFydF87Ci0gICAgaGlzdF8uQ2xlYXIoKTsKLSAgICBkb25lXyA9IDA7Ci0g
ICAgbmV4dF9yZXBvcnRfID0gMTAwOwotICB9Ci0KLSAgdm9pZCBGaW5pc2hlZFNpbmdsZU9wKCkg
ewotICAgIGlmIChGTEFHU19oaXN0b2dyYW0pIHsKLSAgICAgIGRvdWJsZSBub3cgPSBFbnY6OkRl
ZmF1bHQoKS0+Tm93TWljcm9zKCkgKiAxZS02OwotICAgICAgZG91YmxlIG1pY3JvcyA9IChub3cg
LSBsYXN0X29wX2ZpbmlzaF8pICogMWU2OwotICAgICAgaGlzdF8uQWRkKG1pY3Jvcyk7Ci0gICAg
ICBpZiAobWljcm9zID4gMjAwMDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJsb25nIG9w
OiAlLjFmIG1pY3JvcyUzMHNcciIsIG1pY3JvcywgIiIpOwotICAgICAgICBmZmx1c2goc3RkZXJy
KTsKLSAgICAgIH0KLSAgICAgIGxhc3Rfb3BfZmluaXNoXyA9IG5vdzsKLSAgICB9Ci0KLSAgICBk
b25lXysrOwotICAgIGlmIChkb25lXyA+PSBuZXh0X3JlcG9ydF8pIHsKLSAgICAgIGlmICAgICAg
KG5leHRfcmVwb3J0XyA8IDEwMDApICAgbmV4dF9yZXBvcnRfICs9IDEwMDsKLSAgICAgIGVsc2Ug
aWYgKG5leHRfcmVwb3J0XyA8IDUwMDApICAgbmV4dF9yZXBvcnRfICs9IDUwMDsKLSAgICAgIGVs
c2UgaWYgKG5leHRfcmVwb3J0XyA8IDEwMDAwKSAgbmV4dF9yZXBvcnRfICs9IDEwMDA7Ci0gICAg
ICBlbHNlIGlmIChuZXh0X3JlcG9ydF8gPCA1MDAwMCkgIG5leHRfcmVwb3J0XyArPSA1MDAwOwot
ICAgICAgZWxzZSBpZiAobmV4dF9yZXBvcnRfIDwgMTAwMDAwKSBuZXh0X3JlcG9ydF8gKz0gMTAw
MDA7Ci0gICAgICBlbHNlIGlmIChuZXh0X3JlcG9ydF8gPCA1MDAwMDApIG5leHRfcmVwb3J0XyAr
PSA1MDAwMDsKLSAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9yZXBv
cnRfICs9IDEwMDAwMDsKLSAgICAgIGZwcmludGYoc3RkZXJyLCAiLi4uIGZpbmlzaGVkICVkIG9w
cyUzMHNcciIsIGRvbmVfLCAiIik7Ci0gICAgICBmZmx1c2goc3RkZXJyKTsKLSAgICB9Ci0gIH0K
LQotICB2b2lkIFN0b3AoY29uc3QgU2xpY2UmIG5hbWUpIHsKLSAgICBkb3VibGUgZmluaXNoID0g
RW52OjpEZWZhdWx0KCktPk5vd01pY3JvcygpICogMWUtNjsKLQotICAgIC8vIFByZXRlbmQgYXQg
bGVhc3Qgb25lIG9wIHdhcyBkb25lIGluIGNhc2Ugd2UgYXJlIHJ1bm5pbmcgYSBiZW5jaG1hcmsK
LSAgICAvLyB0aGF0IGRvZXMgbm90IGNhbGwgRmluaXNoZWRTaW5nbGVPcCgpLgotICAgIGlmIChk
b25lXyA8IDEpIGRvbmVfID0gMTsKLQotICAgIGlmIChieXRlc18gPiAwKSB7Ci0gICAgICBjaGFy
IHJhdGVbMTAwXTsKLSAgICAgIHNucHJpbnRmKHJhdGUsIHNpemVvZihyYXRlKSwgIiU2LjFmIE1C
L3MiLAotICAgICAgICAgICAgICAgKGJ5dGVzXyAvIDEwNDg1NzYuMCkgLyAoZmluaXNoIC0gc3Rh
cnRfKSk7Ci0gICAgICBpZiAoIW1lc3NhZ2VfLmVtcHR5KCkpIHsKLSAgICAgICAgbWVzc2FnZV8g
ID0gc3RkOjpzdHJpbmcocmF0ZSkgKyAiICIgKyBtZXNzYWdlXzsKLSAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgIG1lc3NhZ2VfID0gcmF0ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBmcHJpbnRmKHN0
ZG91dCwgIiUtMTJzIDogJTExLjNmIG1pY3Jvcy9vcDslcyVzXG4iLAotICAgICAgICAgICAgbmFt
ZS5Ub1N0cmluZygpLmNfc3RyKCksCi0gICAgICAgICAgICAoZmluaXNoIC0gc3RhcnRfKSAqIDFl
NiAvIGRvbmVfLAotICAgICAgICAgICAgKG1lc3NhZ2VfLmVtcHR5KCkgPyAiIiA6ICIgIiksCi0g
ICAgICAgICAgICBtZXNzYWdlXy5jX3N0cigpKTsKLSAgICBpZiAoRkxBR1NfaGlzdG9ncmFtKSB7
Ci0gICAgICBmcHJpbnRmKHN0ZG91dCwgIk1pY3Jvc2Vjb25kcyBwZXIgb3A6XG4lc1xuIiwgaGlz
dF8uVG9TdHJpbmcoKS5jX3N0cigpKTsKLSAgICB9Ci0gICAgZmZsdXNoKHN0ZG91dCk7Ci0gIH0K
LQotIHB1YmxpYzoKLSAgZW51bSBPcmRlciB7Ci0gICAgU0VRVUVOVElBTCwKLSAgICBSQU5ET00K
LSAgfTsKLSAgZW51bSBEQlN0YXRlIHsKLSAgICBGUkVTSCwKLSAgICBFWElTVElORwotICB9Owot
Ci0gIEJlbmNobWFyaygpCi0gIDogZGJfKE5VTEwpLAotICAgIGRiX251bV8oMCksCi0gICAgbnVt
XyhGTEFHU19udW0pLAotICAgIHJlYWRzXyhGTEFHU19yZWFkcyA8IDAgPyBGTEFHU19udW0gOiBG
TEFHU19yZWFkcyksCi0gICAgYnl0ZXNfKDApLAotICAgIHJhbmRfKDMwMSkgewotICAgIHN0ZDo6
dmVjdG9yPHN0ZDo6c3RyaW5nPiBmaWxlczsKLSAgICBzdGQ6OnN0cmluZyB0ZXN0X2RpcjsKLSAg
ICBFbnY6OkRlZmF1bHQoKS0+R2V0VGVzdERpcmVjdG9yeSgmdGVzdF9kaXIpOwotICAgIEVudjo6
RGVmYXVsdCgpLT5HZXRDaGlsZHJlbih0ZXN0X2RpciwgJmZpbGVzKTsKLSAgICBpZiAoIUZMQUdT
X3VzZV9leGlzdGluZ19kYikgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlcy5zaXpl
KCk7IGkrKykgewotICAgICAgICBpZiAoU2xpY2UoZmlsZXNbaV0pLnN0YXJ0c193aXRoKCJkYmJl
bmNoX3NxbGl0ZTMiKSkgewotICAgICAgICAgIHN0ZDo6c3RyaW5nIGZpbGVfbmFtZSh0ZXN0X2Rp
cik7Ci0gICAgICAgICAgZmlsZV9uYW1lICs9ICIvIjsKLSAgICAgICAgICBmaWxlX25hbWUgKz0g
ZmlsZXNbaV07Ci0gICAgICAgICAgRW52OjpEZWZhdWx0KCktPkRlbGV0ZUZpbGUoZmlsZV9uYW1l
LmNfc3RyKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgfkJlbmNobWFy
aygpIHsKLSAgICBpbnQgc3RhdHVzID0gc3FsaXRlM19jbG9zZShkYl8pOwotICAgIEVycm9yQ2hl
Y2soc3RhdHVzKTsKLSAgfQotCi0gIHZvaWQgUnVuKCkgewotICAgIFByaW50SGVhZGVyKCk7Ci0g
ICAgT3BlbigpOwotCi0gICAgY29uc3QgY2hhciogYmVuY2htYXJrcyA9IEZMQUdTX2JlbmNobWFy
a3M7Ci0gICAgd2hpbGUgKGJlbmNobWFya3MgIT0gTlVMTCkgewotICAgICAgY29uc3QgY2hhciog
c2VwID0gc3RyY2hyKGJlbmNobWFya3MsICcsJyk7Ci0gICAgICBTbGljZSBuYW1lOwotICAgICAg
aWYgKHNlcCA9PSBOVUxMKSB7Ci0gICAgICAgIG5hbWUgPSBiZW5jaG1hcmtzOwotICAgICAgICBi
ZW5jaG1hcmtzID0gTlVMTDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG5hbWUgPSBTbGljZShi
ZW5jaG1hcmtzLCBzZXAgLSBiZW5jaG1hcmtzKTsKLSAgICAgICAgYmVuY2htYXJrcyA9IHNlcCAr
IDE7Ci0gICAgICB9Ci0KLSAgICAgIGJ5dGVzXyA9IDA7Ci0gICAgICBTdGFydCgpOwotCi0gICAg
ICBib29sIGtub3duID0gdHJ1ZTsKLSAgICAgIGJvb2wgd3JpdGVfc3luYyA9IGZhbHNlOwotICAg
ICAgaWYgKG5hbWUgPT0gU2xpY2UoImZpbGxzZXEiKSkgewotICAgICAgICBXcml0ZSh3cml0ZV9z
eW5jLCBTRVFVRU5USUFMLCBGUkVTSCwgbnVtXywgRkxBR1NfdmFsdWVfc2l6ZSwgMSk7Ci0gICAg
ICAgIFdhbENoZWNrcG9pbnQoZGJfKTsKLSAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBTbGljZSgi
ZmlsbHNlcWJhdGNoIikpIHsKLSAgICAgICAgV3JpdGUod3JpdGVfc3luYywgU0VRVUVOVElBTCwg
RlJFU0gsIG51bV8sIEZMQUdTX3ZhbHVlX3NpemUsIDEwMDApOwotICAgICAgICBXYWxDaGVja3Bv
aW50KGRiXyk7Ci0gICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2UoImZpbGxyYW5kb20iKSkg
ewotICAgICAgICBXcml0ZSh3cml0ZV9zeW5jLCBSQU5ET00sIEZSRVNILCBudW1fLCBGTEFHU192
YWx1ZV9zaXplLCAxKTsKLSAgICAgICAgV2FsQ2hlY2twb2ludChkYl8pOwotICAgICAgfSBlbHNl
IGlmIChuYW1lID09IFNsaWNlKCJmaWxscmFuZGJhdGNoIikpIHsKLSAgICAgICAgV3JpdGUod3Jp
dGVfc3luYywgUkFORE9NLCBGUkVTSCwgbnVtXywgRkxBR1NfdmFsdWVfc2l6ZSwgMTAwMCk7Ci0g
ICAgICAgIFdhbENoZWNrcG9pbnQoZGJfKTsKLSAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBTbGlj
ZSgib3ZlcndyaXRlIikpIHsKLSAgICAgICAgV3JpdGUod3JpdGVfc3luYywgUkFORE9NLCBFWElT
VElORywgbnVtXywgRkxBR1NfdmFsdWVfc2l6ZSwgMSk7Ci0gICAgICAgIFdhbENoZWNrcG9pbnQo
ZGJfKTsKLSAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBTbGljZSgib3ZlcndyaXRlYmF0Y2giKSkg
ewotICAgICAgICBXcml0ZSh3cml0ZV9zeW5jLCBSQU5ET00sIEVYSVNUSU5HLCBudW1fLCBGTEFH
U192YWx1ZV9zaXplLCAxMDAwKTsKLSAgICAgICAgV2FsQ2hlY2twb2ludChkYl8pOwotICAgICAg
fSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJmaWxscmFuZHN5bmMiKSkgewotICAgICAgICB3cml0
ZV9zeW5jID0gdHJ1ZTsKLSAgICAgICAgV3JpdGUod3JpdGVfc3luYywgUkFORE9NLCBGUkVTSCwg
bnVtXyAvIDEwMCwgRkxBR1NfdmFsdWVfc2l6ZSwgMSk7Ci0gICAgICAgIFdhbENoZWNrcG9pbnQo
ZGJfKTsKLSAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBTbGljZSgiZmlsbHNlcXN5bmMiKSkgewot
ICAgICAgICB3cml0ZV9zeW5jID0gdHJ1ZTsKLSAgICAgICAgV3JpdGUod3JpdGVfc3luYywgU0VR
VUVOVElBTCwgRlJFU0gsIG51bV8gLyAxMDAsIEZMQUdTX3ZhbHVlX3NpemUsIDEpOwotICAgICAg
ICBXYWxDaGVja3BvaW50KGRiXyk7Ci0gICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2UoImZp
bGxyYW5kMTAwSyIpKSB7Ci0gICAgICAgIFdyaXRlKHdyaXRlX3N5bmMsIFJBTkRPTSwgRlJFU0gs
IG51bV8gLyAxMDAwLCAxMDAgKiAxMDAwLCAxKTsKLSAgICAgICAgV2FsQ2hlY2twb2ludChkYl8p
OwotICAgICAgfSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJmaWxsc2VxMTAwSyIpKSB7Ci0gICAg
ICAgIFdyaXRlKHdyaXRlX3N5bmMsIFNFUVVFTlRJQUwsIEZSRVNILCBudW1fIC8gMTAwMCwgMTAw
ICogMTAwMCwgMSk7Ci0gICAgICAgIFdhbENoZWNrcG9pbnQoZGJfKTsKLSAgICAgIH0gZWxzZSBp
ZiAobmFtZSA9PSBTbGljZSgicmVhZHNlcSIpKSB7Ci0gICAgICAgIFJlYWRTZXF1ZW50aWFsKCk7
Ci0gICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2UoInJlYWRyYW5kb20iKSkgewotICAgICAg
ICBSZWFkKFJBTkRPTSwgMSk7Ci0gICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2UoInJlYWRy
YW5kMTAwSyIpKSB7Ci0gICAgICAgIGludCBuID0gcmVhZHNfOwotICAgICAgICByZWFkc18gLz0g
MTAwMDsKLSAgICAgICAgUmVhZChSQU5ET00sIDEpOwotICAgICAgICByZWFkc18gPSBuOwotICAg
ICAgfSBlbHNlIHsKLSAgICAgICAga25vd24gPSBmYWxzZTsKLSAgICAgICAgaWYgKG5hbWUgIT0g
U2xpY2UoKSkgeyAgLy8gTm8gZXJyb3IgbWVzc2FnZSBmb3IgZW1wdHkgbmFtZQotICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAidW5rbm93biBiZW5jaG1hcmsgJyVzJ1xuIiwgbmFtZS5Ub1N0cmlu
ZygpLmNfc3RyKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoa25vd24pIHsKLSAg
ICAgICAgU3RvcChuYW1lKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICB2b2lkIE9wZW4oKSB7
Ci0gICAgYXNzZXJ0KGRiXyA9PSBOVUxMKTsKLQotICAgIGludCBzdGF0dXM7Ci0gICAgY2hhciBm
aWxlX25hbWVbMTAwXTsKLSAgICBjaGFyKiBlcnJfbXNnID0gTlVMTDsKLSAgICBkYl9udW1fKys7
Ci0KLSAgICAvLyBPcGVuIGRhdGFiYXNlCi0gICAgc3RkOjpzdHJpbmcgdG1wX2RpcjsKLSAgICBF
bnY6OkRlZmF1bHQoKS0+R2V0VGVzdERpcmVjdG9yeSgmdG1wX2Rpcik7Ci0gICAgc25wcmludGYo
ZmlsZV9uYW1lLCBzaXplb2YoZmlsZV9uYW1lKSwKLSAgICAgICAgICAgICAiJXMvZGJiZW5jaF9z
cWxpdGUzLSVkLmRiIiwKLSAgICAgICAgICAgICB0bXBfZGlyLmNfc3RyKCksCi0gICAgICAgICAg
ICAgZGJfbnVtXyk7Ci0gICAgc3RhdHVzID0gc3FsaXRlM19vcGVuKGZpbGVfbmFtZSwgJmRiXyk7
Ci0gICAgaWYgKHN0YXR1cykgewotICAgICAgZnByaW50ZihzdGRlcnIsICJvcGVuIGVycm9yOiAl
c1xuIiwgc3FsaXRlM19lcnJtc2coZGJfKSk7Ci0gICAgICBleGl0KDEpOwotICAgIH0KLQotICAg
IC8vIENoYW5nZSBTUUxpdGUgY2FjaGUgc2l6ZQotICAgIGNoYXIgY2FjaGVfc2l6ZVsxMDBdOwot
ICAgIHNucHJpbnRmKGNhY2hlX3NpemUsIHNpemVvZihjYWNoZV9zaXplKSwgIlBSQUdNQSBjYWNo
ZV9zaXplID0gJWQiLAotICAgICAgICAgICAgIEZMQUdTX251bV9wYWdlcyk7Ci0gICAgc3RhdHVz
ID0gc3FsaXRlM19leGVjKGRiXywgY2FjaGVfc2l6ZSwgTlVMTCwgTlVMTCwgJmVycl9tc2cpOwot
ICAgIEV4ZWNFcnJvckNoZWNrKHN0YXR1cywgZXJyX21zZyk7Ci0KLSAgICAvLyBGTEFHU19wYWdl
X3NpemUgaXMgZGVmYXVsdGVkIHRvIDEwMjQKLSAgICBpZiAoRkxBR1NfcGFnZV9zaXplICE9IDEw
MjQpIHsKLSAgICAgIGNoYXIgcGFnZV9zaXplWzEwMF07Ci0gICAgICBzbnByaW50ZihwYWdlX3Np
emUsIHNpemVvZihwYWdlX3NpemUpLCAiUFJBR01BIHBhZ2Vfc2l6ZSA9ICVkIiwKLSAgICAgICAg
ICAgICAgIEZMQUdTX3BhZ2Vfc2l6ZSk7Ci0gICAgICBzdGF0dXMgPSBzcWxpdGUzX2V4ZWMoZGJf
LCBwYWdlX3NpemUsIE5VTEwsIE5VTEwsICZlcnJfbXNnKTsKLSAgICAgIEV4ZWNFcnJvckNoZWNr
KHN0YXR1cywgZXJyX21zZyk7Ci0gICAgfQotCi0gICAgLy8gQ2hhbmdlIGpvdXJuYWwgbW9kZSB0
byBXQUwgaWYgV0FMIGVuYWJsZWQgZmxhZyBpcyBvbgotICAgIGlmIChGTEFHU19XQUxfZW5hYmxl
ZCkgewotICAgICAgc3RkOjpzdHJpbmcgV0FMX3N0bXQgPSAiUFJBR01BIGpvdXJuYWxfbW9kZSA9
IFdBTCI7Ci0KLSAgICAgIC8vIExldmVsREIncyBkZWZhdWx0IGNhY2hlIHNpemUgaXMgYSBjb21i
aW5lZCA0IE1CCi0gICAgICBzdGQ6OnN0cmluZyBXQUxfY2hlY2twb2ludCA9ICJQUkFHTUEgd2Fs
X2F1dG9jaGVja3BvaW50ID0gNDA5NiI7Ci0gICAgICBzdGF0dXMgPSBzcWxpdGUzX2V4ZWMoZGJf
LCBXQUxfc3RtdC5jX3N0cigpLCBOVUxMLCBOVUxMLCAmZXJyX21zZyk7Ci0gICAgICBFeGVjRXJy
b3JDaGVjayhzdGF0dXMsIGVycl9tc2cpOwotICAgICAgc3RhdHVzID0gc3FsaXRlM19leGVjKGRi
XywgV0FMX2NoZWNrcG9pbnQuY19zdHIoKSwgTlVMTCwgTlVMTCwgJmVycl9tc2cpOwotICAgICAg
RXhlY0Vycm9yQ2hlY2soc3RhdHVzLCBlcnJfbXNnKTsKLSAgICB9Ci0KLSAgICAvLyBDaGFuZ2Ug
bG9ja2luZyBtb2RlIHRvIGV4Y2x1c2l2ZSBhbmQgY3JlYXRlIHRhYmxlcy9pbmRleCBmb3IgZGF0
YWJhc2UKLSAgICBzdGQ6OnN0cmluZyBsb2NraW5nX3N0bXQgPSAiUFJBR01BIGxvY2tpbmdfbW9k
ZSA9IEVYQ0xVU0lWRSI7Ci0gICAgc3RkOjpzdHJpbmcgY3JlYXRlX3N0bXQgPQotICAgICAgICAg
ICJDUkVBVEUgVEFCTEUgdGVzdCAoa2V5IGJsb2IsIHZhbHVlIGJsb2IsIFBSSU1BUlkgS0VZKGtl
eSkpIjsKLSAgICBzdGQ6OnN0cmluZyBzdG10X2FycmF5W10gPSB7IGxvY2tpbmdfc3RtdCwgY3Jl
YXRlX3N0bXQgfTsKLSAgICBpbnQgc3RtdF9hcnJheV9sZW5ndGggPSBzaXplb2Yoc3RtdF9hcnJh
eSkgLyBzaXplb2Yoc3RkOjpzdHJpbmcpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RtdF9h
cnJheV9sZW5ndGg7IGkrKykgewotICAgICAgc3RhdHVzID0gc3FsaXRlM19leGVjKGRiXywgc3Rt
dF9hcnJheVtpXS5jX3N0cigpLCBOVUxMLCBOVUxMLCAmZXJyX21zZyk7Ci0gICAgICBFeGVjRXJy
b3JDaGVjayhzdGF0dXMsIGVycl9tc2cpOwotICAgIH0KLSAgfQotCi0gIHZvaWQgV3JpdGUoYm9v
bCB3cml0ZV9zeW5jLCBPcmRlciBvcmRlciwgREJTdGF0ZSBzdGF0ZSwKLSAgICAgICAgICAgICBp
bnQgbnVtX2VudHJpZXMsIGludCB2YWx1ZV9zaXplLCBpbnQgZW50cmllc19wZXJfYmF0Y2gpIHsK
LSAgICAvLyBDcmVhdGUgbmV3IGRhdGFiYXNlIGlmIHN0YXRlID09IEZSRVNICi0gICAgaWYgKHN0
YXRlID09IEZSRVNIKSB7Ci0gICAgICBpZiAoRkxBR1NfdXNlX2V4aXN0aW5nX2RiKSB7Ci0gICAg
ICAgIG1lc3NhZ2VfID0gInNraXBwaW5nICgtLXVzZV9leGlzdGluZ19kYiBpcyB0cnVlKSI7Ci0g
ICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIHNxbGl0ZTNfY2xvc2UoZGJfKTsKLSAgICAg
IGRiXyA9IE5VTEw7Ci0gICAgICBPcGVuKCk7Ci0gICAgICBTdGFydCgpOwotICAgIH0KLQotICAg
IGlmIChudW1fZW50cmllcyAhPSBudW1fKSB7Ci0gICAgICBjaGFyIG1zZ1sxMDBdOwotICAgICAg
c25wcmludGYobXNnLCBzaXplb2YobXNnKSwgIiglZCBvcHMpIiwgbnVtX2VudHJpZXMpOwotICAg
ICAgbWVzc2FnZV8gPSBtc2c7Ci0gICAgfQotCi0gICAgY2hhciogZXJyX21zZyA9IE5VTEw7Ci0g
ICAgaW50IHN0YXR1czsKLQotICAgIHNxbGl0ZTNfc3RtdCAqcmVwbGFjZV9zdG10LCAqYmVnaW5f
dHJhbnNfc3RtdCwgKmVuZF90cmFuc19zdG10OwotICAgIHN0ZDo6c3RyaW5nIHJlcGxhY2Vfc3Ry
ID0gIlJFUExBQ0UgSU5UTyB0ZXN0IChrZXksIHZhbHVlKSBWQUxVRVMgKD8sID8pIjsKLSAgICBz
dGQ6OnN0cmluZyBiZWdpbl90cmFuc19zdHIgPSAiQkVHSU4gVFJBTlNBQ1RJT047IjsKLSAgICBz
dGQ6OnN0cmluZyBlbmRfdHJhbnNfc3RyID0gIkVORCBUUkFOU0FDVElPTjsiOwotCi0gICAgLy8g
Q2hlY2sgZm9yIHN5bmNocm9ub3VzIGZsYWcgaW4gb3B0aW9ucwotICAgIHN0ZDo6c3RyaW5nIHN5
bmNfc3RtdCA9ICh3cml0ZV9zeW5jKSA/ICJQUkFHTUEgc3luY2hyb25vdXMgPSBGVUxMIiA6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBSQUdNQSBzeW5jaHJv
bm91cyA9IE9GRiI7Ci0gICAgc3RhdHVzID0gc3FsaXRlM19leGVjKGRiXywgc3luY19zdG10LmNf
c3RyKCksIE5VTEwsIE5VTEwsICZlcnJfbXNnKTsKLSAgICBFeGVjRXJyb3JDaGVjayhzdGF0dXMs
IGVycl9tc2cpOwotCi0gICAgLy8gUHJlcGFyaW5nIHNxbGl0ZTMgc3RhdGVtZW50cwotICAgIHN0
YXR1cyA9IHNxbGl0ZTNfcHJlcGFyZV92MihkYl8sIHJlcGxhY2Vfc3RyLmNfc3RyKCksIC0xLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVwbGFjZV9zdG10LCBOVUxMKTsKLSAg
ICBFcnJvckNoZWNrKHN0YXR1cyk7Ci0gICAgc3RhdHVzID0gc3FsaXRlM19wcmVwYXJlX3YyKGRi
XywgYmVnaW5fdHJhbnNfc3RyLmNfc3RyKCksIC0xLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmYmVnaW5fdHJhbnNfc3RtdCwgTlVMTCk7Ci0gICAgRXJyb3JDaGVjayhzdGF0dXMp
OwotICAgIHN0YXR1cyA9IHNxbGl0ZTNfcHJlcGFyZV92MihkYl8sIGVuZF90cmFuc19zdHIuY19z
dHIoKSwgLTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbmRfdHJhbnNfc3Rt
dCwgTlVMTCk7Ci0gICAgRXJyb3JDaGVjayhzdGF0dXMpOwotCi0gICAgYm9vbCB0cmFuc2FjdGlv
biA9IChlbnRyaWVzX3Blcl9iYXRjaCA+IDEpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVt
X2VudHJpZXM7IGkgKz0gZW50cmllc19wZXJfYmF0Y2gpIHsKLSAgICAgIC8vIEJlZ2luIHdyaXRl
IHRyYW5zYWN0aW9uCi0gICAgICBpZiAoRkxBR1NfdHJhbnNhY3Rpb24gJiYgdHJhbnNhY3Rpb24p
IHsKLSAgICAgICAgc3RhdHVzID0gc3FsaXRlM19zdGVwKGJlZ2luX3RyYW5zX3N0bXQpOwotICAg
ICAgICBTdGVwRXJyb3JDaGVjayhzdGF0dXMpOwotICAgICAgICBzdGF0dXMgPSBzcWxpdGUzX3Jl
c2V0KGJlZ2luX3RyYW5zX3N0bXQpOwotICAgICAgICBFcnJvckNoZWNrKHN0YXR1cyk7Ci0gICAg
ICB9Ci0KLSAgICAgIC8vIENyZWF0ZSBhbmQgZXhlY3V0ZSBTUUwgc3RhdGVtZW50cwotICAgICAg
Zm9yIChpbnQgaiA9IDA7IGogPCBlbnRyaWVzX3Blcl9iYXRjaDsgaisrKSB7Ci0gICAgICAgIGNv
bnN0IGNoYXIqIHZhbHVlID0gZ2VuXy5HZW5lcmF0ZSh2YWx1ZV9zaXplKS5kYXRhKCk7Ci0KLSAg
ICAgICAgLy8gQ3JlYXRlIHZhbHVlcyBmb3Iga2V5LXZhbHVlIHBhaXIKLSAgICAgICAgY29uc3Qg
aW50IGsgPSAob3JkZXIgPT0gU0VRVUVOVElBTCkgPyBpICsgaiA6Ci0gICAgICAgICAgICAgICAg
ICAgICAgKHJhbmRfLk5leHQoKSAlIG51bV9lbnRyaWVzKTsKLSAgICAgICAgY2hhciBrZXlbMTAw
XTsKLSAgICAgICAgc25wcmludGYoa2V5LCBzaXplb2Yoa2V5KSwgIiUwMTZkIiwgayk7Ci0KLSAg
ICAgICAgLy8gQmluZCBLViB2YWx1ZXMgaW50byByZXBsYWNlX3N0bXQKLSAgICAgICAgc3RhdHVz
ID0gc3FsaXRlM19iaW5kX2Jsb2IocmVwbGFjZV9zdG10LCAxLCBrZXksIDE2LCBTUUxJVEVfU1RB
VElDKTsKLSAgICAgICAgRXJyb3JDaGVjayhzdGF0dXMpOwotICAgICAgICBzdGF0dXMgPSBzcWxp
dGUzX2JpbmRfYmxvYihyZXBsYWNlX3N0bXQsIDIsIHZhbHVlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZV9zaXplLCBTUUxJVEVfU1RBVElDKTsKLSAgICAgICAgRXJy
b3JDaGVjayhzdGF0dXMpOwotCi0gICAgICAgIC8vIEV4ZWN1dGUgcmVwbGFjZV9zdG10Ci0gICAg
ICAgIGJ5dGVzXyArPSB2YWx1ZV9zaXplICsgc3RybGVuKGtleSk7Ci0gICAgICAgIHN0YXR1cyA9
IHNxbGl0ZTNfc3RlcChyZXBsYWNlX3N0bXQpOwotICAgICAgICBTdGVwRXJyb3JDaGVjayhzdGF0
dXMpOwotCi0gICAgICAgIC8vIFJlc2V0IFNRTGl0ZSBzdGF0ZW1lbnQgZm9yIGFub3RoZXIgdXNl
Ci0gICAgICAgIHN0YXR1cyA9IHNxbGl0ZTNfY2xlYXJfYmluZGluZ3MocmVwbGFjZV9zdG10KTsK
LSAgICAgICAgRXJyb3JDaGVjayhzdGF0dXMpOwotICAgICAgICBzdGF0dXMgPSBzcWxpdGUzX3Jl
c2V0KHJlcGxhY2Vfc3RtdCk7Ci0gICAgICAgIEVycm9yQ2hlY2soc3RhdHVzKTsKLQotICAgICAg
ICBGaW5pc2hlZFNpbmdsZU9wKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEVuZCB3cml0ZSB0cmFu
c2FjdGlvbgotICAgICAgaWYgKEZMQUdTX3RyYW5zYWN0aW9uICYmIHRyYW5zYWN0aW9uKSB7Ci0g
ICAgICAgIHN0YXR1cyA9IHNxbGl0ZTNfc3RlcChlbmRfdHJhbnNfc3RtdCk7Ci0gICAgICAgIFN0
ZXBFcnJvckNoZWNrKHN0YXR1cyk7Ci0gICAgICAgIHN0YXR1cyA9IHNxbGl0ZTNfcmVzZXQoZW5k
X3RyYW5zX3N0bXQpOwotICAgICAgICBFcnJvckNoZWNrKHN0YXR1cyk7Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgc3RhdHVzID0gc3FsaXRlM19maW5hbGl6ZShyZXBsYWNlX3N0bXQpOwotICAgIEVy
cm9yQ2hlY2soc3RhdHVzKTsKLSAgICBzdGF0dXMgPSBzcWxpdGUzX2ZpbmFsaXplKGJlZ2luX3Ry
YW5zX3N0bXQpOwotICAgIEVycm9yQ2hlY2soc3RhdHVzKTsKLSAgICBzdGF0dXMgPSBzcWxpdGUz
X2ZpbmFsaXplKGVuZF90cmFuc19zdG10KTsKLSAgICBFcnJvckNoZWNrKHN0YXR1cyk7Ci0gIH0K
LQotICB2b2lkIFJlYWQoT3JkZXIgb3JkZXIsIGludCBlbnRyaWVzX3Blcl9iYXRjaCkgewotICAg
IGludCBzdGF0dXM7Ci0gICAgc3FsaXRlM19zdG10ICpyZWFkX3N0bXQsICpiZWdpbl90cmFuc19z
dG10LCAqZW5kX3RyYW5zX3N0bXQ7Ci0KLSAgICBzdGQ6OnN0cmluZyByZWFkX3N0ciA9ICJTRUxF
Q1QgKiBGUk9NIHRlc3QgV0hFUkUga2V5ID0gPyI7Ci0gICAgc3RkOjpzdHJpbmcgYmVnaW5fdHJh
bnNfc3RyID0gIkJFR0lOIFRSQU5TQUNUSU9OOyI7Ci0gICAgc3RkOjpzdHJpbmcgZW5kX3RyYW5z
X3N0ciA9ICJFTkQgVFJBTlNBQ1RJT047IjsKLQotICAgIC8vIFByZXBhcmluZyBzcWxpdGUzIHN0
YXRlbWVudHMKLSAgICBzdGF0dXMgPSBzcWxpdGUzX3ByZXBhcmVfdjIoZGJfLCBiZWdpbl90cmFu
c19zdHIuY19zdHIoKSwgLTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiZWdp
bl90cmFuc19zdG10LCBOVUxMKTsKLSAgICBFcnJvckNoZWNrKHN0YXR1cyk7Ci0gICAgc3RhdHVz
ID0gc3FsaXRlM19wcmVwYXJlX3YyKGRiXywgZW5kX3RyYW5zX3N0ci5jX3N0cigpLCAtMSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVuZF90cmFuc19zdG10LCBOVUxMKTsKLSAg
ICBFcnJvckNoZWNrKHN0YXR1cyk7Ci0gICAgc3RhdHVzID0gc3FsaXRlM19wcmVwYXJlX3YyKGRi
XywgcmVhZF9zdHIuY19zdHIoKSwgLTEsICZyZWFkX3N0bXQsIE5VTEwpOwotICAgIEVycm9yQ2hl
Y2soc3RhdHVzKTsKLQotICAgIGJvb2wgdHJhbnNhY3Rpb24gPSAoZW50cmllc19wZXJfYmF0Y2gg
PiAxKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlYWRzXzsgaSArPSBlbnRyaWVzX3Blcl9i
YXRjaCkgewotICAgICAgLy8gQmVnaW4gcmVhZCB0cmFuc2FjdGlvbgotICAgICAgaWYgKEZMQUdT
X3RyYW5zYWN0aW9uICYmIHRyYW5zYWN0aW9uKSB7Ci0gICAgICAgIHN0YXR1cyA9IHNxbGl0ZTNf
c3RlcChiZWdpbl90cmFuc19zdG10KTsKLSAgICAgICAgU3RlcEVycm9yQ2hlY2soc3RhdHVzKTsK
LSAgICAgICAgc3RhdHVzID0gc3FsaXRlM19yZXNldChiZWdpbl90cmFuc19zdG10KTsKLSAgICAg
ICAgRXJyb3JDaGVjayhzdGF0dXMpOwotICAgICAgfQotCi0gICAgICAvLyBDcmVhdGUgYW5kIGV4
ZWN1dGUgU1FMIHN0YXRlbWVudHMKLSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZW50cmllc19w
ZXJfYmF0Y2g7IGorKykgewotICAgICAgICAvLyBDcmVhdGUga2V5IHZhbHVlCi0gICAgICAgIGNo
YXIga2V5WzEwMF07Ci0gICAgICAgIGludCBrID0gKG9yZGVyID09IFNFUVVFTlRJQUwpID8gaSAr
IGogOiAocmFuZF8uTmV4dCgpICUgcmVhZHNfKTsKLSAgICAgICAgc25wcmludGYoa2V5LCBzaXpl
b2Yoa2V5KSwgIiUwMTZkIiwgayk7Ci0KLSAgICAgICAgLy8gQmluZCBrZXkgdmFsdWUgaW50byBy
ZWFkX3N0bXQKLSAgICAgICAgc3RhdHVzID0gc3FsaXRlM19iaW5kX2Jsb2IocmVhZF9zdG10LCAx
LCBrZXksIDE2LCBTUUxJVEVfU1RBVElDKTsKLSAgICAgICAgRXJyb3JDaGVjayhzdGF0dXMpOwot
Ci0gICAgICAgIC8vIEV4ZWN1dGUgcmVhZCBzdGF0ZW1lbnQKLSAgICAgICAgd2hpbGUgKChzdGF0
dXMgPSBzcWxpdGUzX3N0ZXAocmVhZF9zdG10KSkgPT0gU1FMSVRFX1JPVykge30KLSAgICAgICAg
U3RlcEVycm9yQ2hlY2soc3RhdHVzKTsKLQotICAgICAgICAvLyBSZXNldCBTUUxpdGUgc3RhdGVt
ZW50IGZvciBhbm90aGVyIHVzZQotICAgICAgICBzdGF0dXMgPSBzcWxpdGUzX2NsZWFyX2JpbmRp
bmdzKHJlYWRfc3RtdCk7Ci0gICAgICAgIEVycm9yQ2hlY2soc3RhdHVzKTsKLSAgICAgICAgc3Rh
dHVzID0gc3FsaXRlM19yZXNldChyZWFkX3N0bXQpOwotICAgICAgICBFcnJvckNoZWNrKHN0YXR1
cyk7Ci0gICAgICAgIEZpbmlzaGVkU2luZ2xlT3AoKTsKLSAgICAgIH0KLQotICAgICAgLy8gRW5k
IHJlYWQgdHJhbnNhY3Rpb24KLSAgICAgIGlmIChGTEFHU190cmFuc2FjdGlvbiAmJiB0cmFuc2Fj
dGlvbikgewotICAgICAgICBzdGF0dXMgPSBzcWxpdGUzX3N0ZXAoZW5kX3RyYW5zX3N0bXQpOwot
ICAgICAgICBTdGVwRXJyb3JDaGVjayhzdGF0dXMpOwotICAgICAgICBzdGF0dXMgPSBzcWxpdGUz
X3Jlc2V0KGVuZF90cmFuc19zdG10KTsKLSAgICAgICAgRXJyb3JDaGVjayhzdGF0dXMpOwotICAg
ICAgfQotICAgIH0KLQotICAgIHN0YXR1cyA9IHNxbGl0ZTNfZmluYWxpemUocmVhZF9zdG10KTsK
LSAgICBFcnJvckNoZWNrKHN0YXR1cyk7Ci0gICAgc3RhdHVzID0gc3FsaXRlM19maW5hbGl6ZShi
ZWdpbl90cmFuc19zdG10KTsKLSAgICBFcnJvckNoZWNrKHN0YXR1cyk7Ci0gICAgc3RhdHVzID0g
c3FsaXRlM19maW5hbGl6ZShlbmRfdHJhbnNfc3RtdCk7Ci0gICAgRXJyb3JDaGVjayhzdGF0dXMp
OwotICB9Ci0KLSAgdm9pZCBSZWFkU2VxdWVudGlhbCgpIHsKLSAgICBpbnQgc3RhdHVzOwotICAg
IHNxbGl0ZTNfc3RtdCAqcFN0bXQ7Ci0gICAgc3RkOjpzdHJpbmcgcmVhZF9zdHIgPSAiU0VMRUNU
ICogRlJPTSB0ZXN0IE9SREVSIEJZIGtleSI7Ci0KLSAgICBzdGF0dXMgPSBzcWxpdGUzX3ByZXBh
cmVfdjIoZGJfLCByZWFkX3N0ci5jX3N0cigpLCAtMSwgJnBTdG10LCBOVUxMKTsKLSAgICBFcnJv
ckNoZWNrKHN0YXR1cyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWFkc18gJiYgU1FMSVRF
X1JPVyA9PSBzcWxpdGUzX3N0ZXAocFN0bXQpOyBpKyspIHsKLSAgICAgIGJ5dGVzXyArPSBzcWxp
dGUzX2NvbHVtbl9ieXRlcyhwU3RtdCwgMSkgKyBzcWxpdGUzX2NvbHVtbl9ieXRlcyhwU3RtdCwg
Mik7Ci0gICAgICBGaW5pc2hlZFNpbmdsZU9wKCk7Ci0gICAgfQotCi0gICAgc3RhdHVzID0gc3Fs
aXRlM19maW5hbGl6ZShwU3RtdCk7Ci0gICAgRXJyb3JDaGVjayhzdGF0dXMpOwotICB9Ci0KLX07
Ci0KLX0gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCi0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiog
YXJndikgewotICBzdGQ6OnN0cmluZyBkZWZhdWx0X2RiX3BhdGg7Ci0gIGZvciAoaW50IGkgPSAx
OyBpIDwgYXJnYzsgaSsrKSB7Ci0gICAgZG91YmxlIGQ7Ci0gICAgaW50IG47Ci0gICAgY2hhciBq
dW5rOwotICAgIGlmIChsZXZlbGRiOjpTbGljZShhcmd2W2ldKS5zdGFydHNfd2l0aCgiLS1iZW5j
aG1hcmtzPSIpKSB7Ci0gICAgICBGTEFHU19iZW5jaG1hcmtzID0gYXJndltpXSArIHN0cmxlbigi
LS1iZW5jaG1hcmtzPSIpOwotICAgIH0gZWxzZSBpZiAoc3NjYW5mKGFyZ3ZbaV0sICItLWhpc3Rv
Z3JhbT0lZCVjIiwgJm4sICZqdW5rKSA9PSAxICYmCi0gICAgICAgICAgICAgICAobiA9PSAwIHx8
IG4gPT0gMSkpIHsKLSAgICAgIEZMQUdTX2hpc3RvZ3JhbSA9IG47Ci0gICAgfSBlbHNlIGlmIChz
c2NhbmYoYXJndltpXSwgIi0tY29tcHJlc3Npb25fcmF0aW89JWxmJWMiLCAmZCwgJmp1bmspID09
IDEpIHsKLSAgICAgIEZMQUdTX2NvbXByZXNzaW9uX3JhdGlvID0gZDsKLSAgICB9IGVsc2UgaWYg
KHNzY2FuZihhcmd2W2ldLCAiLS11c2VfZXhpc3RpbmdfZGI9JWQlYyIsICZuLCAmanVuaykgPT0g
MSAmJgotICAgICAgICAgICAgICAgKG4gPT0gMCB8fCBuID09IDEpKSB7Ci0gICAgICBGTEFHU191
c2VfZXhpc3RpbmdfZGIgPSBuOwotICAgIH0gZWxzZSBpZiAoc3NjYW5mKGFyZ3ZbaV0sICItLW51
bT0lZCVjIiwgJm4sICZqdW5rKSA9PSAxKSB7Ci0gICAgICBGTEFHU19udW0gPSBuOwotICAgIH0g
ZWxzZSBpZiAoc3NjYW5mKGFyZ3ZbaV0sICItLXJlYWRzPSVkJWMiLCAmbiwgJmp1bmspID09IDEp
IHsKLSAgICAgIEZMQUdTX3JlYWRzID0gbjsKLSAgICB9IGVsc2UgaWYgKHNzY2FuZihhcmd2W2ld
LCAiLS12YWx1ZV9zaXplPSVkJWMiLCAmbiwgJmp1bmspID09IDEpIHsKLSAgICAgIEZMQUdTX3Zh
bHVlX3NpemUgPSBuOwotICAgIH0gZWxzZSBpZiAobGV2ZWxkYjo6U2xpY2UoYXJndltpXSkgPT0g
bGV2ZWxkYjo6U2xpY2UoIi0tbm9fdHJhbnNhY3Rpb24iKSkgewotICAgICAgRkxBR1NfdHJhbnNh
Y3Rpb24gPSBmYWxzZTsKLSAgICB9IGVsc2UgaWYgKHNzY2FuZihhcmd2W2ldLCAiLS1wYWdlX3Np
emU9JWQlYyIsICZuLCAmanVuaykgPT0gMSkgewotICAgICAgRkxBR1NfcGFnZV9zaXplID0gbjsK
LSAgICB9IGVsc2UgaWYgKHNzY2FuZihhcmd2W2ldLCAiLS1udW1fcGFnZXM9JWQlYyIsICZuLCAm
anVuaykgPT0gMSkgewotICAgICAgRkxBR1NfbnVtX3BhZ2VzID0gbjsKLSAgICB9IGVsc2UgaWYg
KHNzY2FuZihhcmd2W2ldLCAiLS1XQUxfZW5hYmxlZD0lZCVjIiwgJm4sICZqdW5rKSA9PSAxICYm
Ci0gICAgICAgICAgICAgICAobiA9PSAwIHx8IG4gPT0gMSkpIHsKLSAgICAgIEZMQUdTX1dBTF9l
bmFibGVkID0gbjsKLSAgICB9IGVsc2UgaWYgKHN0cm5jbXAoYXJndltpXSwgIi0tZGI9IiwgNSkg
PT0gMCkgewotICAgICAgRkxBR1NfZGIgPSBhcmd2W2ldICsgNTsKLSAgICB9IGVsc2UgewotICAg
ICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGZsYWcgJyVzJ1xuIiwgYXJndltpXSk7Ci0gICAg
ICBleGl0KDEpOwotICAgIH0KLSAgfQotCi0gIC8vIENob29zZSBhIGxvY2F0aW9uIGZvciB0aGUg
dGVzdCBkYXRhYmFzZSBpZiBub25lIGdpdmVuIHdpdGggLS1kYj08cGF0aD4KLSAgaWYgKEZMQUdT
X2RiID09IE5VTEwpIHsKLSAgICAgIGxldmVsZGI6OkVudjo6RGVmYXVsdCgpLT5HZXRUZXN0RGly
ZWN0b3J5KCZkZWZhdWx0X2RiX3BhdGgpOwotICAgICAgZGVmYXVsdF9kYl9wYXRoICs9ICIvZGJi
ZW5jaCI7Ci0gICAgICBGTEFHU19kYiA9IGRlZmF1bHRfZGJfcGF0aC5jX3N0cigpOwotICB9Ci0K
LSAgbGV2ZWxkYjo6QmVuY2htYXJrIGJlbmNobWFyazsKLSAgYmVuY2htYXJrLlJ1bigpOwotICBy
ZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZG9jL2Jl
bmNoL2RiX2JlbmNoX3RyZWVfZGIuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RvYy9i
ZW5jaC9kYl9iZW5jaF90cmVlX2RiLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBl
ZDg2ZjAzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZG9jL2JlbmNo
L2RiX2JlbmNoX3RyZWVfZGIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw1MjggKzAsMCBAQAotLy8g
Q29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUg
dGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgotCi0jaW5jbHVkZSA8
c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxrY3BvbHlkYi5oPgotI2lu
Y2x1ZGUgInV0aWwvaGlzdG9ncmFtLmgiCi0jaW5jbHVkZSAidXRpbC9yYW5kb20uaCIKLSNpbmNs
dWRlICJ1dGlsL3Rlc3R1dGlsLmgiCi0KLS8vIENvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG9wZXJh
dGlvbnMgdG8gcnVuIGluIHRoZSBzcGVjaWZpZWQgb3JkZXIKLS8vICAgQWN0dWFsIGJlbmNobWFy
a3M6Ci0vLwotLy8gICBmaWxsc2VxICAgICAgIC0tIHdyaXRlIE4gdmFsdWVzIGluIHNlcXVlbnRp
YWwga2V5IG9yZGVyIGluIGFzeW5jIG1vZGUKLS8vICAgZmlsbHJhbmRvbSAgICAtLSB3cml0ZSBO
IHZhbHVlcyBpbiByYW5kb20ga2V5IG9yZGVyIGluIGFzeW5jIG1vZGUKLS8vICAgb3ZlcndyaXRl
ICAgICAtLSBvdmVyd3JpdGUgTiB2YWx1ZXMgaW4gcmFuZG9tIGtleSBvcmRlciBpbiBhc3luYyBt
b2RlCi0vLyAgIGZpbGxzZXFzeW5jICAgLS0gd3JpdGUgTi8xMDAgdmFsdWVzIGluIHNlcXVlbnRp
YWwga2V5IG9yZGVyIGluIHN5bmMgbW9kZQotLy8gICBmaWxscmFuZHN5bmMgIC0tIHdyaXRlIE4v
MTAwIHZhbHVlcyBpbiByYW5kb20ga2V5IG9yZGVyIGluIHN5bmMgbW9kZQotLy8gICBmaWxscmFu
ZDEwMEsgIC0tIHdyaXRlIE4vMTAwMCAxMDBLIHZhbHVlcyBpbiByYW5kb20gb3JkZXIgaW4gYXN5
bmMgbW9kZQotLy8gICBmaWxsc2VxMTAwSyAgIC0tIHdyaXRlIE4vMTAwMCAxMDBLIHZhbHVlcyBp
biBzZXEgb3JkZXIgaW4gYXN5bmMgbW9kZQotLy8gICByZWFkc2VxICAgICAgIC0tIHJlYWQgTiB0
aW1lcyBzZXF1ZW50aWFsbHkKLS8vICAgcmVhZHNlcTEwMEsgICAtLSByZWFkIE4vMTAwMCAxMDBL
IHZhbHVlcyBpbiBzZXF1ZW50aWFsIG9yZGVyIGluIGFzeW5jIG1vZGUKLS8vICAgcmVhZHJhbmQx
MDBLICAtLSByZWFkIE4vMTAwMCAxMDBLIHZhbHVlcyBpbiBzZXF1ZW50aWFsIG9yZGVyIGluIGFz
eW5jIG1vZGUKLS8vICAgcmVhZHJhbmRvbSAgICAtLSByZWFkIE4gdGltZXMgaW4gcmFuZG9tIG9y
ZGVyCi1zdGF0aWMgY29uc3QgY2hhciogRkxBR1NfYmVuY2htYXJrcyA9Ci0gICAgImZpbGxzZXEs
IgotICAgICJmaWxsc2Vxc3luYywiCi0gICAgImZpbGxyYW5kc3luYywiCi0gICAgImZpbGxyYW5k
b20sIgotICAgICJvdmVyd3JpdGUsIgotICAgICJyZWFkcmFuZG9tLCIKLSAgICAicmVhZHNlcSwi
Ci0gICAgImZpbGxyYW5kMTAwSywiCi0gICAgImZpbGxzZXExMDBLLCIKLSAgICAicmVhZHNlcTEw
MEssIgotICAgICJyZWFkcmFuZDEwMEssIgotICAgIDsKLQotLy8gTnVtYmVyIG9mIGtleS92YWx1
ZXMgdG8gcGxhY2UgaW4gZGF0YWJhc2UKLXN0YXRpYyBpbnQgRkxBR1NfbnVtID0gMTAwMDAwMDsK
LQotLy8gTnVtYmVyIG9mIHJlYWQgb3BlcmF0aW9ucyB0byBkby4gIElmIG5lZ2F0aXZlLCBkbyBG
TEFHU19udW0gcmVhZHMuCi1zdGF0aWMgaW50IEZMQUdTX3JlYWRzID0gLTE7Ci0KLS8vIFNpemUg
b2YgZWFjaCB2YWx1ZQotc3RhdGljIGludCBGTEFHU192YWx1ZV9zaXplID0gMTAwOwotCi0vLyBB
cnJhbmdlIHRvIGdlbmVyYXRlIHZhbHVlcyB0aGF0IHNocmluayB0byB0aGlzIGZyYWN0aW9uIG9m
Ci0vLyB0aGVpciBvcmlnaW5hbCBzaXplIGFmdGVyIGNvbXByZXNzaW9uCi1zdGF0aWMgZG91Ymxl
IEZMQUdTX2NvbXByZXNzaW9uX3JhdGlvID0gMC41OwotCi0vLyBQcmludCBoaXN0b2dyYW0gb2Yg
b3BlcmF0aW9uIHRpbWluZ3MKLXN0YXRpYyBib29sIEZMQUdTX2hpc3RvZ3JhbSA9IGZhbHNlOwot
Ci0vLyBDYWNoZSBzaXplLiBEZWZhdWx0IDQgTUIKLXN0YXRpYyBpbnQgRkxBR1NfY2FjaGVfc2l6
ZSA9IDQxOTQzMDQ7Ci0KLS8vIFBhZ2Ugc2l6ZS4gRGVmYXVsdCAxIEtCCi1zdGF0aWMgaW50IEZM
QUdTX3BhZ2Vfc2l6ZSA9IDEwMjQ7Ci0KLS8vIElmIHRydWUsIGRvIG5vdCBkZXN0cm95IHRoZSBl
eGlzdGluZyBkYXRhYmFzZS4gIElmIHlvdSBzZXQgdGhpcwotLy8gZmxhZyBhbmQgYWxzbyBzcGVj
aWZ5IGEgYmVuY2htYXJrIHRoYXQgd2FudHMgYSBmcmVzaCBkYXRhYmFzZSwgdGhhdAotLy8gYmVu
Y2htYXJrIHdpbGwgZmFpbC4KLXN0YXRpYyBib29sIEZMQUdTX3VzZV9leGlzdGluZ19kYiA9IGZh
bHNlOwotCi0vLyBDb21wcmVzc2lvbiBmbGFnLiBJZiB0cnVlLCBjb21wcmVzc2lvbiBpcyBvbi4g
SWYgZmFsc2UsIGNvbXByZXNzaW9uCi0vLyBpcyBvZmYuCi1zdGF0aWMgYm9vbCBGTEFHU19jb21w
cmVzc2lvbiA9IHRydWU7Ci0KLS8vIFVzZSB0aGUgZGIgd2l0aCB0aGUgZm9sbG93aW5nIG5hbWUu
Ci1zdGF0aWMgY29uc3QgY2hhciogRkxBR1NfZGIgPSBOVUxMOwotCi1pbmxpbmUKLXN0YXRpYyB2
b2lkIERCU3luY2hyb25pemUoa3lvdG9jYWJpbmV0OjpUcmVlREIqIGRiXykKLXsKLSAgLy8gU3lu
Y2hyb25pemUgd2lsbCBmbHVzaCB3cml0ZXMgdG8gZGlzawotICBpZiAoIWRiXy0+c3luY2hyb25p
emUoKSkgewotICAgIGZwcmludGYoc3RkZXJyLCAic3luY2hyb25pemUgZXJyb3I6ICVzXG4iLCBk
Yl8tPmVycm9yKCkubmFtZSgpKTsKLSAgfQotfQotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7Ci0KLS8v
IEhlbHBlciBmb3IgcXVpY2tseSBnZW5lcmF0aW5nIHJhbmRvbSBkYXRhLgotbmFtZXNwYWNlIHsK
LWNsYXNzIFJhbmRvbUdlbmVyYXRvciB7Ci0gcHJpdmF0ZToKLSAgc3RkOjpzdHJpbmcgZGF0YV87
Ci0gIGludCBwb3NfOwotCi0gcHVibGljOgotICBSYW5kb21HZW5lcmF0b3IoKSB7Ci0gICAgLy8g
V2UgdXNlIGEgbGltaXRlZCBhbW91bnQgb2YgZGF0YSBvdmVyIGFuZCBvdmVyIGFnYWluIGFuZCBl
bnN1cmUKLSAgICAvLyB0aGF0IGl0IGlzIGxhcmdlciB0aGFuIHRoZSBjb21wcmVzc2lvbiB3aW5k
b3cgKDMyS0IpLCBhbmQgYWxzbwotICAgIC8vIGxhcmdlIGVub3VnaCB0byBzZXJ2ZSBhbGwgdHlw
aWNhbCB2YWx1ZSBzaXplcyB3ZSB3YW50IHRvIHdyaXRlLgotICAgIFJhbmRvbSBybmQoMzAxKTsK
LSAgICBzdGQ6OnN0cmluZyBwaWVjZTsKLSAgICB3aGlsZSAoZGF0YV8uc2l6ZSgpIDwgMTA0ODU3
NikgewotICAgICAgLy8gQWRkIGEgc2hvcnQgZnJhZ21lbnQgdGhhdCBpcyBhcyBjb21wcmVzc2li
bGUgYXMgc3BlY2lmaWVkCi0gICAgICAvLyBieSBGTEFHU19jb21wcmVzc2lvbl9yYXRpby4KLSAg
ICAgIHRlc3Q6OkNvbXByZXNzaWJsZVN0cmluZygmcm5kLCBGTEFHU19jb21wcmVzc2lvbl9yYXRp
bywgMTAwLCAmcGllY2UpOwotICAgICAgZGF0YV8uYXBwZW5kKHBpZWNlKTsKLSAgICB9Ci0gICAg
cG9zXyA9IDA7Ci0gIH0KLQotICBTbGljZSBHZW5lcmF0ZShpbnQgbGVuKSB7Ci0gICAgaWYgKHBv
c18gKyBsZW4gPiBkYXRhXy5zaXplKCkpIHsKLSAgICAgIHBvc18gPSAwOwotICAgICAgYXNzZXJ0
KGxlbiA8IGRhdGFfLnNpemUoKSk7Ci0gICAgfQotICAgIHBvc18gKz0gbGVuOwotICAgIHJldHVy
biBTbGljZShkYXRhXy5kYXRhKCkgKyBwb3NfIC0gbGVuLCBsZW4pOwotICB9Ci19OwotCi1zdGF0
aWMgU2xpY2UgVHJpbVNwYWNlKFNsaWNlIHMpIHsKLSAgaW50IHN0YXJ0ID0gMDsKLSAgd2hpbGUg
KHN0YXJ0IDwgcy5zaXplKCkgJiYgaXNzcGFjZShzW3N0YXJ0XSkpIHsKLSAgICBzdGFydCsrOwot
ICB9Ci0gIGludCBsaW1pdCA9IHMuc2l6ZSgpOwotICB3aGlsZSAobGltaXQgPiBzdGFydCAmJiBp
c3NwYWNlKHNbbGltaXQtMV0pKSB7Ci0gICAgbGltaXQtLTsKLSAgfQotICByZXR1cm4gU2xpY2Uo
cy5kYXRhKCkgKyBzdGFydCwgbGltaXQgLSBzdGFydCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQot
Ci1jbGFzcyBCZW5jaG1hcmsgewotIHByaXZhdGU6Ci0gIGt5b3RvY2FiaW5ldDo6VHJlZURCKiBk
Yl87Ci0gIGludCBkYl9udW1fOwotICBpbnQgbnVtXzsKLSAgaW50IHJlYWRzXzsKLSAgZG91Ymxl
IHN0YXJ0XzsKLSAgZG91YmxlIGxhc3Rfb3BfZmluaXNoXzsKLSAgaW50NjRfdCBieXRlc187Ci0g
IHN0ZDo6c3RyaW5nIG1lc3NhZ2VfOwotICBIaXN0b2dyYW0gaGlzdF87Ci0gIFJhbmRvbUdlbmVy
YXRvciBnZW5fOwotICBSYW5kb20gcmFuZF87Ci0gIGt5b3RvY2FiaW5ldDo6TFpPQ29tcHJlc3Nv
cjxreW90b2NhYmluZXQ6OkxaTzo6UkFXPiBjb21wXzsKLQotICAvLyBTdGF0ZSBrZXB0IGZvciBw
cm9ncmVzcyBtZXNzYWdlcwotICBpbnQgZG9uZV87Ci0gIGludCBuZXh0X3JlcG9ydF87ICAgICAv
LyBXaGVuIHRvIHJlcG9ydCBuZXh0Ci0KLSAgdm9pZCBQcmludEhlYWRlcigpIHsKLSAgICBjb25z
dCBpbnQga0tleVNpemUgPSAxNjsKLSAgICBQcmludEVudmlyb25tZW50KCk7Ci0gICAgZnByaW50
ZihzdGRvdXQsICJLZXlzOiAgICAgICAlZCBieXRlcyBlYWNoXG4iLCBrS2V5U2l6ZSk7Ci0gICAg
ZnByaW50ZihzdGRvdXQsICJWYWx1ZXM6ICAgICAlZCBieXRlcyBlYWNoICglZCBieXRlcyBhZnRl
ciBjb21wcmVzc2lvbilcbiIsCi0gICAgICAgICAgICBGTEFHU192YWx1ZV9zaXplLAotICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50PihGTEFHU192YWx1ZV9zaXplICogRkxBR1NfY29tcHJlc3Np
b25fcmF0aW8gKyAwLjUpKTsKLSAgICBmcHJpbnRmKHN0ZG91dCwgIkVudHJpZXM6ICAgICVkXG4i
LCBudW1fKTsKLSAgICBmcHJpbnRmKHN0ZG91dCwgIlJhd1NpemU6ICAgICUuMWYgTUIgKGVzdGlt
YXRlZClcbiIsCi0gICAgICAgICAgICAoKHN0YXRpY19jYXN0PGludDY0X3Q+KGtLZXlTaXplICsg
RkxBR1NfdmFsdWVfc2l6ZSkgKiBudW1fKQotICAgICAgICAgICAgIC8gMTA0ODU3Ni4wKSk7Ci0g
ICAgZnByaW50ZihzdGRvdXQsICJGaWxlU2l6ZTogICAlLjFmIE1CIChlc3RpbWF0ZWQpXG4iLAot
ICAgICAgICAgICAgKCgoa0tleVNpemUgKyBGTEFHU192YWx1ZV9zaXplICogRkxBR1NfY29tcHJl
c3Npb25fcmF0aW8pICogbnVtXykKLSAgICAgICAgICAgICAvIDEwNDg1NzYuMCkpOwotICAgIFBy
aW50V2FybmluZ3MoKTsKLSAgICBmcHJpbnRmKHN0ZG91dCwgIi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0gIH0KLQotICB2b2lkIFByaW50V2Fy
bmluZ3MoKSB7Ci0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19PUFRJTUlaRV9f
KQotICAgIGZwcmludGYoc3Rkb3V0LAotICAgICAgICAgICAgIldBUk5JTkc6IE9wdGltaXphdGlv
biBpcyBkaXNhYmxlZDogYmVuY2htYXJrcyB1bm5lY2Vzc2FyaWx5IHNsb3dcbiIKLSAgICAgICAg
ICAgICk7Ci0jZW5kaWYKLSNpZm5kZWYgTkRFQlVHCi0gICAgZnByaW50ZihzdGRvdXQsCi0gICAg
ICAgICAgICAiV0FSTklORzogQXNzZXJ0aW9ucyBhcmUgZW5hYmxlZDsgYmVuY2htYXJrcyB1bm5l
Y2Vzc2FyaWx5IHNsb3dcbiIpOwotI2VuZGlmCi0gIH0KLQotICB2b2lkIFByaW50RW52aXJvbm1l
bnQoKSB7Ci0gICAgZnByaW50ZihzdGRlcnIsICJLeW90byBDYWJpbmV0OiAgICB2ZXJzaW9uICVz
LCBsaWIgdmVyICVkLCBsaWIgcmV2ICVkXG4iLAotICAgICAgICAgICAga3lvdG9jYWJpbmV0OjpW
RVJTSU9OLCBreW90b2NhYmluZXQ6OkxJQlZFUiwga3lvdG9jYWJpbmV0OjpMSUJSRVYpOwotCi0j
aWYgZGVmaW5lZChfX2xpbnV4KQotICAgIHRpbWVfdCBub3cgPSB0aW1lKE5VTEwpOwotICAgIGZw
cmludGYoc3RkZXJyLCAiRGF0ZTogICAgICAgICAgICVzIiwgY3RpbWUoJm5vdykpOyAgLy8gY3Rp
bWUoKSBhZGRzIG5ld2xpbmUKLQotICAgIEZJTEUqIGNwdWluZm8gPSBmb3BlbigiL3Byb2MvY3B1
aW5mbyIsICJyIik7Ci0gICAgaWYgKGNwdWluZm8gIT0gTlVMTCkgewotICAgICAgY2hhciBsaW5l
WzEwMDBdOwotICAgICAgaW50IG51bV9jcHVzID0gMDsKLSAgICAgIHN0ZDo6c3RyaW5nIGNwdV90
eXBlOwotICAgICAgc3RkOjpzdHJpbmcgY2FjaGVfc2l6ZTsKLSAgICAgIHdoaWxlIChmZ2V0cyhs
aW5lLCBzaXplb2YobGluZSksIGNwdWluZm8pICE9IE5VTEwpIHsKLSAgICAgICAgY29uc3QgY2hh
ciogc2VwID0gc3RyY2hyKGxpbmUsICc6Jyk7Ci0gICAgICAgIGlmIChzZXAgPT0gTlVMTCkgewot
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIFNsaWNlIGtleSA9IFRyaW1T
cGFjZShTbGljZShsaW5lLCBzZXAgLSAxIC0gbGluZSkpOwotICAgICAgICBTbGljZSB2YWwgPSBU
cmltU3BhY2UoU2xpY2Uoc2VwICsgMSkpOwotICAgICAgICBpZiAoa2V5ID09ICJtb2RlbCBuYW1l
IikgewotICAgICAgICAgICsrbnVtX2NwdXM7Ci0gICAgICAgICAgY3B1X3R5cGUgPSB2YWwuVG9T
dHJpbmcoKTsKLSAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gImNhY2hlIHNpemUiKSB7Ci0gICAg
ICAgICAgY2FjaGVfc2l6ZSA9IHZhbC5Ub1N0cmluZygpOwotICAgICAgICB9Ci0gICAgICB9Ci0g
ICAgICBmY2xvc2UoY3B1aW5mbyk7Ci0gICAgICBmcHJpbnRmKHN0ZGVyciwgIkNQVTogICAgICAg
ICAgICAlZCAqICVzXG4iLCBudW1fY3B1cywgY3B1X3R5cGUuY19zdHIoKSk7Ci0gICAgICBmcHJp
bnRmKHN0ZGVyciwgIkNQVUNhY2hlOiAgICAgICAlc1xuIiwgY2FjaGVfc2l6ZS5jX3N0cigpKTsK
LSAgICB9Ci0jZW5kaWYKLSAgfQotCi0gIHZvaWQgU3RhcnQoKSB7Ci0gICAgc3RhcnRfID0gRW52
OjpEZWZhdWx0KCktPk5vd01pY3JvcygpICogMWUtNjsKLSAgICBieXRlc18gPSAwOwotICAgIG1l
c3NhZ2VfLmNsZWFyKCk7Ci0gICAgbGFzdF9vcF9maW5pc2hfID0gc3RhcnRfOwotICAgIGhpc3Rf
LkNsZWFyKCk7Ci0gICAgZG9uZV8gPSAwOwotICAgIG5leHRfcmVwb3J0XyA9IDEwMDsKLSAgfQot
Ci0gIHZvaWQgRmluaXNoZWRTaW5nbGVPcCgpIHsKLSAgICBpZiAoRkxBR1NfaGlzdG9ncmFtKSB7
Ci0gICAgICBkb3VibGUgbm93ID0gRW52OjpEZWZhdWx0KCktPk5vd01pY3JvcygpICogMWUtNjsK
LSAgICAgIGRvdWJsZSBtaWNyb3MgPSAobm93IC0gbGFzdF9vcF9maW5pc2hfKSAqIDFlNjsKLSAg
ICAgIGhpc3RfLkFkZChtaWNyb3MpOwotICAgICAgaWYgKG1pY3JvcyA+IDIwMDAwKSB7Ci0gICAg
ICAgIGZwcmludGYoc3RkZXJyLCAibG9uZyBvcDogJS4xZiBtaWNyb3MlMzBzXHIiLCBtaWNyb3Ms
ICIiKTsKLSAgICAgICAgZmZsdXNoKHN0ZGVycik7Ci0gICAgICB9Ci0gICAgICBsYXN0X29wX2Zp
bmlzaF8gPSBub3c7Ci0gICAgfQotCi0gICAgZG9uZV8rKzsKLSAgICBpZiAoZG9uZV8gPj0gbmV4
dF9yZXBvcnRfKSB7Ci0gICAgICBpZiAgICAgIChuZXh0X3JlcG9ydF8gPCAxMDAwKSAgIG5leHRf
cmVwb3J0XyArPSAxMDA7Ci0gICAgICBlbHNlIGlmIChuZXh0X3JlcG9ydF8gPCA1MDAwKSAgIG5l
eHRfcmVwb3J0XyArPSA1MDA7Ci0gICAgICBlbHNlIGlmIChuZXh0X3JlcG9ydF8gPCAxMDAwMCkg
IG5leHRfcmVwb3J0XyArPSAxMDAwOwotICAgICAgZWxzZSBpZiAobmV4dF9yZXBvcnRfIDwgNTAw
MDApICBuZXh0X3JlcG9ydF8gKz0gNTAwMDsKLSAgICAgIGVsc2UgaWYgKG5leHRfcmVwb3J0XyA8
IDEwMDAwMCkgbmV4dF9yZXBvcnRfICs9IDEwMDAwOwotICAgICAgZWxzZSBpZiAobmV4dF9yZXBv
cnRfIDwgNTAwMDAwKSBuZXh0X3JlcG9ydF8gKz0gNTAwMDA7Ci0gICAgICBlbHNlICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5leHRfcmVwb3J0XyArPSAxMDAwMDA7Ci0gICAgICBmcHJpbnRm
KHN0ZGVyciwgIi4uLiBmaW5pc2hlZCAlZCBvcHMlMzBzXHIiLCBkb25lXywgIiIpOwotICAgICAg
ZmZsdXNoKHN0ZGVycik7Ci0gICAgfQotICB9Ci0KLSAgdm9pZCBTdG9wKGNvbnN0IFNsaWNlJiBu
YW1lKSB7Ci0gICAgZG91YmxlIGZpbmlzaCA9IEVudjo6RGVmYXVsdCgpLT5Ob3dNaWNyb3MoKSAq
IDFlLTY7Ci0KLSAgICAvLyBQcmV0ZW5kIGF0IGxlYXN0IG9uZSBvcCB3YXMgZG9uZSBpbiBjYXNl
IHdlIGFyZSBydW5uaW5nIGEgYmVuY2htYXJrCi0gICAgLy8gdGhhdCBkb2VzIG5vdCBjYWxsIEZp
bmlzaGVkU2luZ2xlT3AoKS4KLSAgICBpZiAoZG9uZV8gPCAxKSBkb25lXyA9IDE7Ci0KLSAgICBp
ZiAoYnl0ZXNfID4gMCkgewotICAgICAgY2hhciByYXRlWzEwMF07Ci0gICAgICBzbnByaW50Zihy
YXRlLCBzaXplb2YocmF0ZSksICIlNi4xZiBNQi9zIiwKLSAgICAgICAgICAgICAgIChieXRlc18g
LyAxMDQ4NTc2LjApIC8gKGZpbmlzaCAtIHN0YXJ0XykpOwotICAgICAgaWYgKCFtZXNzYWdlXy5l
bXB0eSgpKSB7Ci0gICAgICAgIG1lc3NhZ2VfICA9IHN0ZDo6c3RyaW5nKHJhdGUpICsgIiAiICsg
bWVzc2FnZV87Ci0gICAgICB9IGVsc2UgewotICAgICAgICBtZXNzYWdlXyA9IHJhdGU7Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgZnByaW50ZihzdGRvdXQsICIlLTEycyA6ICUxMS4zZiBtaWNyb3Mv
b3A7JXMlc1xuIiwKLSAgICAgICAgICAgIG5hbWUuVG9TdHJpbmcoKS5jX3N0cigpLAotICAgICAg
ICAgICAgKGZpbmlzaCAtIHN0YXJ0XykgKiAxZTYgLyBkb25lXywKLSAgICAgICAgICAgIChtZXNz
YWdlXy5lbXB0eSgpID8gIiIgOiAiICIpLAotICAgICAgICAgICAgbWVzc2FnZV8uY19zdHIoKSk7
Ci0gICAgaWYgKEZMQUdTX2hpc3RvZ3JhbSkgewotICAgICAgZnByaW50ZihzdGRvdXQsICJNaWNy
b3NlY29uZHMgcGVyIG9wOlxuJXNcbiIsIGhpc3RfLlRvU3RyaW5nKCkuY19zdHIoKSk7Ci0gICAg
fQotICAgIGZmbHVzaChzdGRvdXQpOwotICB9Ci0KLSBwdWJsaWM6Ci0gIGVudW0gT3JkZXIgewot
ICAgIFNFUVVFTlRJQUwsCi0gICAgUkFORE9NCi0gIH07Ci0gIGVudW0gREJTdGF0ZSB7Ci0gICAg
RlJFU0gsCi0gICAgRVhJU1RJTkcKLSAgfTsKLQotICBCZW5jaG1hcmsoKQotICA6IGRiXyhOVUxM
KSwKLSAgICBudW1fKEZMQUdTX251bSksCi0gICAgcmVhZHNfKEZMQUdTX3JlYWRzIDwgMCA/IEZM
QUdTX251bSA6IEZMQUdTX3JlYWRzKSwKLSAgICBieXRlc18oMCksCi0gICAgcmFuZF8oMzAxKSB7
Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGZpbGVzOwotICAgIHN0ZDo6c3RyaW5nIHRl
c3RfZGlyOwotICAgIEVudjo6RGVmYXVsdCgpLT5HZXRUZXN0RGlyZWN0b3J5KCZ0ZXN0X2Rpcik7
Ci0gICAgRW52OjpEZWZhdWx0KCktPkdldENoaWxkcmVuKHRlc3RfZGlyLmNfc3RyKCksICZmaWxl
cyk7Ci0gICAgaWYgKCFGTEFHU191c2VfZXhpc3RpbmdfZGIpIHsKLSAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgZmlsZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKFNsaWNlKGZpbGVzW2ld
KS5zdGFydHNfd2l0aCgiZGJiZW5jaF9wb2x5REIiKSkgewotICAgICAgICAgIHN0ZDo6c3RyaW5n
IGZpbGVfbmFtZSh0ZXN0X2Rpcik7Ci0gICAgICAgICAgZmlsZV9uYW1lICs9ICIvIjsKLSAgICAg
ICAgICBmaWxlX25hbWUgKz0gZmlsZXNbaV07Ci0gICAgICAgICAgRW52OjpEZWZhdWx0KCktPkRl
bGV0ZUZpbGUoZmlsZV9uYW1lLmNfc3RyKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQot
ICB9Ci0KLSAgfkJlbmNobWFyaygpIHsKLSAgICBpZiAoIWRiXy0+Y2xvc2UoKSkgewotICAgICAg
ZnByaW50ZihzdGRlcnIsICJjbG9zZSBlcnJvcjogJXNcbiIsIGRiXy0+ZXJyb3IoKS5uYW1lKCkp
OwotICAgIH0KLSAgfQotCi0gIHZvaWQgUnVuKCkgewotICAgIFByaW50SGVhZGVyKCk7Ci0gICAg
T3BlbihmYWxzZSk7Ci0KLSAgICBjb25zdCBjaGFyKiBiZW5jaG1hcmtzID0gRkxBR1NfYmVuY2ht
YXJrczsKLSAgICB3aGlsZSAoYmVuY2htYXJrcyAhPSBOVUxMKSB7Ci0gICAgICBjb25zdCBjaGFy
KiBzZXAgPSBzdHJjaHIoYmVuY2htYXJrcywgJywnKTsKLSAgICAgIFNsaWNlIG5hbWU7Ci0gICAg
ICBpZiAoc2VwID09IE5VTEwpIHsKLSAgICAgICAgbmFtZSA9IGJlbmNobWFya3M7Ci0gICAgICAg
IGJlbmNobWFya3MgPSBOVUxMOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgbmFtZSA9IFNsaWNl
KGJlbmNobWFya3MsIHNlcCAtIGJlbmNobWFya3MpOwotICAgICAgICBiZW5jaG1hcmtzID0gc2Vw
ICsgMTsKLSAgICAgIH0KLQotICAgICAgU3RhcnQoKTsKLQotICAgICAgYm9vbCBrbm93biA9IHRy
dWU7Ci0gICAgICBib29sIHdyaXRlX3N5bmMgPSBmYWxzZTsKLSAgICAgIGlmIChuYW1lID09IFNs
aWNlKCJmaWxsc2VxIikpIHsKLSAgICAgICAgV3JpdGUod3JpdGVfc3luYywgU0VRVUVOVElBTCwg
RlJFU0gsIG51bV8sIEZMQUdTX3ZhbHVlX3NpemUsIDEpOwotICAgICAgICAKLSAgICAgIH0gZWxz
ZSBpZiAobmFtZSA9PSBTbGljZSgiZmlsbHJhbmRvbSIpKSB7Ci0gICAgICAgIFdyaXRlKHdyaXRl
X3N5bmMsIFJBTkRPTSwgRlJFU0gsIG51bV8sIEZMQUdTX3ZhbHVlX3NpemUsIDEpOwotICAgICAg
ICBEQlN5bmNocm9uaXplKGRiXyk7Ci0gICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2UoIm92
ZXJ3cml0ZSIpKSB7Ci0gICAgICAgIFdyaXRlKHdyaXRlX3N5bmMsIFJBTkRPTSwgRVhJU1RJTkcs
IG51bV8sIEZMQUdTX3ZhbHVlX3NpemUsIDEpOwotICAgICAgICBEQlN5bmNocm9uaXplKGRiXyk7
Ci0gICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2UoImZpbGxyYW5kc3luYyIpKSB7Ci0gICAg
ICAgIHdyaXRlX3N5bmMgPSB0cnVlOwotICAgICAgICBXcml0ZSh3cml0ZV9zeW5jLCBSQU5ET00s
IEZSRVNILCBudW1fIC8gMTAwLCBGTEFHU192YWx1ZV9zaXplLCAxKTsKLSAgICAgICAgREJTeW5j
aHJvbml6ZShkYl8pOwotICAgICAgfSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJmaWxsc2Vxc3lu
YyIpKSB7Ci0gICAgICAgIHdyaXRlX3N5bmMgPSB0cnVlOwotICAgICAgICBXcml0ZSh3cml0ZV9z
eW5jLCBTRVFVRU5USUFMLCBGUkVTSCwgbnVtXyAvIDEwMCwgRkxBR1NfdmFsdWVfc2l6ZSwgMSk7
Ci0gICAgICAgIERCU3luY2hyb25pemUoZGJfKTsKLSAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBT
bGljZSgiZmlsbHJhbmQxMDBLIikpIHsKLSAgICAgICAgV3JpdGUod3JpdGVfc3luYywgUkFORE9N
LCBGUkVTSCwgbnVtXyAvIDEwMDAsIDEwMCAqIDEwMDAsIDEpOwotICAgICAgICBEQlN5bmNocm9u
aXplKGRiXyk7Ci0gICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2UoImZpbGxzZXExMDBLIikp
IHsKLSAgICAgICAgV3JpdGUod3JpdGVfc3luYywgU0VRVUVOVElBTCwgRlJFU0gsIG51bV8gLyAx
MDAwLCAxMDAgKiAxMDAwLCAxKTsKLSAgICAgICAgREJTeW5jaHJvbml6ZShkYl8pOwotICAgICAg
fSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJyZWFkc2VxIikpIHsKLSAgICAgICAgUmVhZFNlcXVl
bnRpYWwoKTsKLSAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBTbGljZSgicmVhZHJhbmRvbSIpKSB7
Ci0gICAgICAgIFJlYWRSYW5kb20oKTsKLSAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBTbGljZSgi
cmVhZHJhbmQxMDBLIikpIHsKLSAgICAgICAgaW50IG4gPSByZWFkc187Ci0gICAgICAgIHJlYWRz
XyAvPSAxMDAwOwotICAgICAgICBSZWFkUmFuZG9tKCk7Ci0gICAgICAgIHJlYWRzXyA9IG47Ci0g
ICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2UoInJlYWRzZXExMDBLIikpIHsKLSAgICAgICAg
aW50IG4gPSByZWFkc187Ci0gICAgICAgIHJlYWRzXyAvPSAxMDAwOwotICAgICAgICBSZWFkU2Vx
dWVudGlhbCgpOwotICAgICAgICByZWFkc18gPSBuOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAg
a25vd24gPSBmYWxzZTsKLSAgICAgICAgaWYgKG5hbWUgIT0gU2xpY2UoKSkgeyAgLy8gTm8gZXJy
b3IgbWVzc2FnZSBmb3IgZW1wdHkgbmFtZQotICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5r
bm93biBiZW5jaG1hcmsgJyVzJ1xuIiwgbmFtZS5Ub1N0cmluZygpLmNfc3RyKCkpOwotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgICBpZiAoa25vd24pIHsKLSAgICAgICAgU3RvcChuYW1lKTsKLSAg
ICAgIH0KLSAgICB9Ci0gIH0KLQotIHByaXZhdGU6Ci0gICAgdm9pZCBPcGVuKGJvb2wgc3luYykg
ewotICAgIGFzc2VydChkYl8gPT0gTlVMTCk7Ci0KLSAgICAvLyBJbml0aWFsaXplIGRiXwotICAg
IGRiXyA9IG5ldyBreW90b2NhYmluZXQ6OlRyZWVEQigpOwotICAgIGNoYXIgZmlsZV9uYW1lWzEw
MF07Ci0gICAgZGJfbnVtXysrOwotICAgIHN0ZDo6c3RyaW5nIHRlc3RfZGlyOwotICAgIEVudjo6
RGVmYXVsdCgpLT5HZXRUZXN0RGlyZWN0b3J5KCZ0ZXN0X2Rpcik7Ci0gICAgc25wcmludGYoZmls
ZV9uYW1lLCBzaXplb2YoZmlsZV9uYW1lKSwKLSAgICAgICAgICAgICAiJXMvZGJiZW5jaF9wb2x5
REItJWQua2N0IiwKLSAgICAgICAgICAgICB0ZXN0X2Rpci5jX3N0cigpLAotICAgICAgICAgICAg
IGRiX251bV8pOwotCi0gICAgLy8gQ3JlYXRlIHR1bmluZyBvcHRpb25zIGFuZCBvcGVuIHRoZSBk
YXRhYmFzZQotICAgIGludCBvcGVuX29wdGlvbnMgPSBreW90b2NhYmluZXQ6OlBvbHlEQjo6T1dS
SVRFUiB8Ci0gICAgICAgICAgICAgICAgICAgICAgIGt5b3RvY2FiaW5ldDo6UG9seURCOjpPQ1JF
QVRFOwotICAgIGludCB0dW5lX29wdGlvbnMgPSBreW90b2NhYmluZXQ6OlRyZWVEQjo6VFNNQUxM
IHwKLSAgICAgICAga3lvdG9jYWJpbmV0OjpUcmVlREI6OlRMSU5FQVI7Ci0gICAgaWYgKEZMQUdT
X2NvbXByZXNzaW9uKSB7Ci0gICAgICB0dW5lX29wdGlvbnMgfD0ga3lvdG9jYWJpbmV0OjpUcmVl
REI6OlRDT01QUkVTUzsKLSAgICAgIGRiXy0+dHVuZV9jb21wcmVzc29yKCZjb21wXyk7Ci0gICAg
fQotICAgIGRiXy0+dHVuZV9vcHRpb25zKHR1bmVfb3B0aW9ucyk7Ci0gICAgZGJfLT50dW5lX3Bh
Z2VfY2FjaGUoRkxBR1NfY2FjaGVfc2l6ZSk7Ci0gICAgZGJfLT50dW5lX3BhZ2UoRkxBR1NfcGFn
ZV9zaXplKTsKLSAgICBkYl8tPnR1bmVfbWFwKDI1NkxMPDwyMCk7Ci0gICAgaWYgKHN5bmMpIHsK
LSAgICAgIG9wZW5fb3B0aW9ucyB8PSBreW90b2NhYmluZXQ6OlBvbHlEQjo6T0FVVE9TWU5DOwot
ICAgIH0KLSAgICBpZiAoIWRiXy0+b3BlbihmaWxlX25hbWUsIG9wZW5fb3B0aW9ucykpIHsKLSAg
ICAgIGZwcmludGYoc3RkZXJyLCAib3BlbiBlcnJvcjogJXNcbiIsIGRiXy0+ZXJyb3IoKS5uYW1l
KCkpOwotICAgIH0KLSAgfQotCi0gIHZvaWQgV3JpdGUoYm9vbCBzeW5jLCBPcmRlciBvcmRlciwg
REJTdGF0ZSBzdGF0ZSwKLSAgICAgICAgICAgICBpbnQgbnVtX2VudHJpZXMsIGludCB2YWx1ZV9z
aXplLCBpbnQgZW50cmllc19wZXJfYmF0Y2gpIHsKLSAgICAvLyBDcmVhdGUgbmV3IGRhdGFiYXNl
IGlmIHN0YXRlID09IEZSRVNICi0gICAgaWYgKHN0YXRlID09IEZSRVNIKSB7Ci0gICAgICBpZiAo
RkxBR1NfdXNlX2V4aXN0aW5nX2RiKSB7Ci0gICAgICAgIG1lc3NhZ2VfID0gInNraXBwaW5nICgt
LXVzZV9leGlzdGluZ19kYiBpcyB0cnVlKSI7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAg
ICAgIGRlbGV0ZSBkYl87Ci0gICAgICBkYl8gPSBOVUxMOwotICAgICAgT3BlbihzeW5jKTsKLSAg
ICAgIFN0YXJ0KCk7ICAvLyBEbyBub3QgY291bnQgdGltZSB0YWtlbiB0byBkZXN0cm95L29wZW4K
LSAgICB9Ci0KLSAgICBpZiAobnVtX2VudHJpZXMgIT0gbnVtXykgewotICAgICAgY2hhciBtc2db
MTAwXTsKLSAgICAgIHNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICIoJWQgb3BzKSIsIG51bV9l
bnRyaWVzKTsKLSAgICAgIG1lc3NhZ2VfID0gbXNnOwotICAgIH0KLQotICAgIC8vIFdyaXRlIHRv
IGRhdGFiYXNlCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fZW50cmllczsgaSsrKQotICAg
IHsKLSAgICAgIGNvbnN0IGludCBrID0gKG9yZGVyID09IFNFUVVFTlRJQUwpID8gaSA6IChyYW5k
Xy5OZXh0KCkgJSBudW1fZW50cmllcyk7Ci0gICAgICBjaGFyIGtleVsxMDBdOwotICAgICAgc25w
cmludGYoa2V5LCBzaXplb2Yoa2V5KSwgIiUwMTZkIiwgayk7Ci0gICAgICBieXRlc18gKz0gdmFs
dWVfc2l6ZSArIHN0cmxlbihrZXkpOwotICAgICAgc3RkOjpzdHJpbmcgY3BwX2tleSA9IGtleTsK
LSAgICAgIGlmICghZGJfLT5zZXQoY3BwX2tleSwgZ2VuXy5HZW5lcmF0ZSh2YWx1ZV9zaXplKS5U
b1N0cmluZygpKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInNldCBlcnJvcjogJXNcbiIs
IGRiXy0+ZXJyb3IoKS5uYW1lKCkpOwotICAgICAgfQotICAgICAgRmluaXNoZWRTaW5nbGVPcCgp
OwotICAgIH0KLSAgfQotCi0gIHZvaWQgUmVhZFNlcXVlbnRpYWwoKSB7Ci0gICAga3lvdG9jYWJp
bmV0OjpEQjo6Q3Vyc29yKiBjdXIgPSBkYl8tPmN1cnNvcigpOwotICAgIGN1ci0+anVtcCgpOwot
ICAgIHN0ZDo6c3RyaW5nIGNrZXksIGN2YWx1ZTsKLSAgICB3aGlsZSAoY3VyLT5nZXQoJmNrZXks
ICZjdmFsdWUsIHRydWUpKSB7Ci0gICAgICBieXRlc18gKz0gY2tleS5zaXplKCkgKyBjdmFsdWUu
c2l6ZSgpOwotICAgICAgRmluaXNoZWRTaW5nbGVPcCgpOwotICAgIH0KLSAgICBkZWxldGUgY3Vy
OwotICB9Ci0KLSAgdm9pZCBSZWFkUmFuZG9tKCkgewotICAgIHN0ZDo6c3RyaW5nIHZhbHVlOwot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVhZHNfOyBpKyspIHsKLSAgICAgIGNoYXIga2V5WzEw
MF07Ci0gICAgICBjb25zdCBpbnQgayA9IHJhbmRfLk5leHQoKSAlIHJlYWRzXzsKLSAgICAgIHNu
cHJpbnRmKGtleSwgc2l6ZW9mKGtleSksICIlMDE2ZCIsIGspOwotICAgICAgZGJfLT5nZXQoa2V5
LCAmdmFsdWUpOwotICAgICAgRmluaXNoZWRTaW5nbGVPcCgpOwotICAgIH0KLSAgfQotfTsKLQot
fSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2
KSB7Ci0gIHN0ZDo6c3RyaW5nIGRlZmF1bHRfZGJfcGF0aDsKLSAgZm9yIChpbnQgaSA9IDE7IGkg
PCBhcmdjOyBpKyspIHsKLSAgICBkb3VibGUgZDsKLSAgICBpbnQgbjsKLSAgICBjaGFyIGp1bms7
Ci0gICAgaWYgKGxldmVsZGI6OlNsaWNlKGFyZ3ZbaV0pLnN0YXJ0c193aXRoKCItLWJlbmNobWFy
a3M9IikpIHsKLSAgICAgIEZMQUdTX2JlbmNobWFya3MgPSBhcmd2W2ldICsgc3RybGVuKCItLWJl
bmNobWFya3M9Iik7Ci0gICAgfSBlbHNlIGlmIChzc2NhbmYoYXJndltpXSwgIi0tY29tcHJlc3Np
b25fcmF0aW89JWxmJWMiLCAmZCwgJmp1bmspID09IDEpIHsKLSAgICAgIEZMQUdTX2NvbXByZXNz
aW9uX3JhdGlvID0gZDsKLSAgICB9IGVsc2UgaWYgKHNzY2FuZihhcmd2W2ldLCAiLS1oaXN0b2dy
YW09JWQlYyIsICZuLCAmanVuaykgPT0gMSAmJgotICAgICAgICAgICAgICAgKG4gPT0gMCB8fCBu
ID09IDEpKSB7Ci0gICAgICBGTEFHU19oaXN0b2dyYW0gPSBuOwotICAgIH0gZWxzZSBpZiAoc3Nj
YW5mKGFyZ3ZbaV0sICItLW51bT0lZCVjIiwgJm4sICZqdW5rKSA9PSAxKSB7Ci0gICAgICBGTEFH
U19udW0gPSBuOwotICAgIH0gZWxzZSBpZiAoc3NjYW5mKGFyZ3ZbaV0sICItLXJlYWRzPSVkJWMi
LCAmbiwgJmp1bmspID09IDEpIHsKLSAgICAgIEZMQUdTX3JlYWRzID0gbjsKLSAgICB9IGVsc2Ug
aWYgKHNzY2FuZihhcmd2W2ldLCAiLS12YWx1ZV9zaXplPSVkJWMiLCAmbiwgJmp1bmspID09IDEp
IHsKLSAgICAgIEZMQUdTX3ZhbHVlX3NpemUgPSBuOwotICAgIH0gZWxzZSBpZiAoc3NjYW5mKGFy
Z3ZbaV0sICItLWNhY2hlX3NpemU9JWQlYyIsICZuLCAmanVuaykgPT0gMSkgewotICAgICAgRkxB
R1NfY2FjaGVfc2l6ZSA9IG47Ci0gICAgfSBlbHNlIGlmIChzc2NhbmYoYXJndltpXSwgIi0tcGFn
ZV9zaXplPSVkJWMiLCAmbiwgJmp1bmspID09IDEpIHsKLSAgICAgIEZMQUdTX3BhZ2Vfc2l6ZSA9
IG47Ci0gICAgfSBlbHNlIGlmIChzc2NhbmYoYXJndltpXSwgIi0tY29tcHJlc3Npb249JWQlYyIs
ICZuLCAmanVuaykgPT0gMSAmJgotICAgICAgICAgICAgICAgKG4gPT0gMCB8fCBuID09IDEpKSB7
Ci0gICAgICBGTEFHU19jb21wcmVzc2lvbiA9IChuID09IDEpID8gdHJ1ZSA6IGZhbHNlOwotICAg
IH0gZWxzZSBpZiAoc3RybmNtcChhcmd2W2ldLCAiLS1kYj0iLCA1KSA9PSAwKSB7Ci0gICAgICBG
TEFHU19kYiA9IGFyZ3ZbaV0gKyA1OwotICAgIH0gZWxzZSB7Ci0gICAgICBmcHJpbnRmKHN0ZGVy
ciwgIkludmFsaWQgZmxhZyAnJXMnXG4iLCBhcmd2W2ldKTsKLSAgICAgIGV4aXQoMSk7Ci0gICAg
fQotICB9Ci0KLSAgLy8gQ2hvb3NlIGEgbG9jYXRpb24gZm9yIHRoZSB0ZXN0IGRhdGFiYXNlIGlm
IG5vbmUgZ2l2ZW4gd2l0aCAtLWRiPTxwYXRoPgotICBpZiAoRkxBR1NfZGIgPT0gTlVMTCkgewot
ICAgICAgbGV2ZWxkYjo6RW52OjpEZWZhdWx0KCktPkdldFRlc3REaXJlY3RvcnkoJmRlZmF1bHRf
ZGJfcGF0aCk7Ci0gICAgICBkZWZhdWx0X2RiX3BhdGggKz0gIi9kYmJlbmNoIjsKLSAgICAgIEZM
QUdTX2RiID0gZGVmYXVsdF9kYl9wYXRoLmNfc3RyKCk7Ci0gIH0KLQotICBsZXZlbGRiOjpCZW5j
aG1hcmsgYmVuY2htYXJrOwotICBiZW5jaG1hcmsuUnVuKCk7Ci0gIHJldHVybiAwOwotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kb2MvYmVuY2htYXJrLmh0bWwgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RvYy9iZW5jaG1hcmsuaHRtbApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYzQ2Mzk3Ny4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL2RvYy9iZW5jaG1hcmsuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ1OSArMCww
IEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08dGl0bGU+TGV2ZWxEQiBCZW5j
aG1hcmtzPC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0i
dGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KLTxzdHlsZT4KLWJvZHkgewotICBmb250LWZhbWls
eTpIZWx2ZXRpY2Esc2Fucy1zZXJpZjsKLSAgcGFkZGluZzoyMHB4OwotfQotCi1oMiB7Ci0gIHBh
ZGRpbmctdG9wOjMwcHg7Ci19Ci0KLXRhYmxlLmJuIHsKLSAgd2lkdGg6ODAwcHg7Ci0gIGJvcmRl
ci1jb2xsYXBzZTpjb2xsYXBzZTsKLSAgYm9yZGVyOjA7Ci0gIHBhZGRpbmc6MDsKLX0KLQotdGFi
bGUuYm5iYXNlIHsKLSAgd2lkdGg6NjUwcHg7Ci19Ci0KLXRhYmxlLmJuIHRkIHsKLSAgcGFkZGlu
ZzoycHggMDsKLX0KLQotdGFibGUuYm4gdGQuYzEgewotICBmb250LXdlaWdodDpib2xkOwotICB3
aWR0aDoxNTBweDsKLX0KLQotdGFibGUuYm4gdGQuYzEgZGl2LmUgewotICBmbG9hdDpyaWdodDsK
LSAgZm9udC13ZWlnaHQ6bm9ybWFsOwotfQotCi10YWJsZS5ibiB0ZC5jMiB7Ci0gIHdpZHRoOjE1
MHB4OwotICB0ZXh0LWFsaWduOnJpZ2h0OwotICBwYWRkaW5nOjJweDsKLX0KLQotdGFibGUuYm4g
dGQuYzMgewotICB3aWR0aDozNTBweDsKLX0KLQotdGFibGUuYm4gdGQuYzQgewotICB3aWR0aDox
NTBweDsKLSAgZm9udC1zaXplOnNtYWxsOwotICBwYWRkaW5nLWxlZnQ6NHB4OwotfQotCi0vKiBj
aGFydCBiYXJzICovCi1kaXYuYmxkYiB7Ci0gIGJhY2tncm91bmQtY29sb3I6IzAyNTVkZjsKLX0K
LQotZGl2LmJrY3QgewotICBiYWNrZ3JvdW5kLWNvbG9yOiNkZjU1NTU7Ci19Ci0KLWRpdi5ic3Fs
IHsKLSAgYmFja2dyb3VuZC1jb2xvcjojYWFkZjU1OwotfQotCi0uY29kZSB7Ci0gIGZvbnQtZmFt
aWx5Om1vbm9zcGFjZTsKLSAgZm9udC1zaXplOmxhcmdlOwotfQotCi0udG9kbyB7Ci0gIGNvbG9y
OiByZWQ7Ci19Ci0KLTwvc3R5bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMT5MZXZlbERCIEJlbmNo
bWFya3M8L2gxPgotPHA+R29vZ2xlLCBKdWx5IDIwMTE8L3A+Ci08aHI+Ci0KLTxwPkluIG9yZGVy
IHRvIHRlc3QgTGV2ZWxEQidzIHBlcmZvcm1hbmNlLCB3ZSBiZW5jaG1hcmsgaXQgYWdhaW5zdCBv
dGhlciB3ZWxsLWVzdGFibGlzaGVkIGRhdGFiYXNlIGltcGxlbWVudGF0aW9ucy4gV2UgY29tcGFy
ZSBMZXZlbERCIChyZXZpc2lvbiAzOSkgYWdhaW5zdCA8YSBocmVmPSJodHRwOi8vd3d3LnNxbGl0
ZS5vcmcvIj5TUUxpdGUzPC9hPiAodmVyc2lvbiAzLjcuNi4zKSBhbmQgPGEgaHJlZj0iaHR0cDov
L2ZhbGxhYnMuY29tL2t5b3RvY2FiaW5ldC9zcGV4Lmh0bWwiPkt5b3RvIENhYmluZXQnczwvYT4g
KHZlcnNpb24gMS4yLjY3KSBUcmVlREIgKGEgQitUcmVlIGJhc2VkIGtleS12YWx1ZSBzdG9yZSku
IFdlIHdvdWxkIGxpa2UgdG8gYWNrbm93bGVkZ2UgU2NvdHQgSGVzcyBhbmQgTWlraW8gSGlyYWJh
eWFzaGkgZm9yIHRoZWlyIHN1Z2dlc3Rpb25zIGFuZCBjb250cmlidXRpb25zIHRvIHRoZSBTUUxp
dGUzIGFuZCBLeW90byBDYWJpbmV0IGJlbmNobWFya3MsIHJlc3BlY3RpdmVseS48L3A+Ci0KLTxw
PkJlbmNobWFya3Mgd2VyZSBhbGwgcGVyZm9ybWVkIG9uIGEgc2l4LWNvcmUgSW50ZWwoUikgWGVv
bihSKSBDUFUgWDU2NTAgQCAyLjY3R0h6LCB3aXRoIDEyMjg4IEtCIG9mIHRvdGFsIEwzIGNhY2hl
IGFuZCAxMiBHQiBvZiBERFIzIFJBTSBhdCAxMzMzIE1Iei4gKE5vdGUgdGhhdCBMZXZlbERCIHVz
ZXMgYXQgbW9zdCB0d28gQ1BVcyBzaW5jZSB0aGUgYmVuY2htYXJrcyBhcmUgc2luZ2xlIHRocmVh
ZGVkOiBvbmUgdG8gcnVuIHRoZSBiZW5jaG1hcmssIGFuZCBvbmUgZm9yIGJhY2tncm91bmQgY29t
cGFjdGlvbnMuKSBXZSByYW4gdGhlIGJlbmNobWFya3Mgb24gdHdvIG1hY2hpbmVzICh3aXRoIGlk
ZW50aWNhbCBwcm9jZXNzb3JzKSwgb25lIHdpdGggYW4gRXh0MyBmaWxlIHN5c3RlbSBhbmQgb25l
IHdpdGggYW4gRXh0NCBmaWxlIHN5c3RlbS4gVGhlIG1hY2hpbmUgd2l0aCB0aGUgRXh0MyBmaWxl
IHN5c3RlbSBoYXMgYSBTQVRBIEhpdGFjaGkgSERTNzIxMDUwQ0xBMzYyIGhhcmQgZHJpdmUuIFRo
ZSBtYWNoaW5lIHdpdGggdGhlIEV4dDQgZmlsZSBzeXN0ZW0gaGFzIGEgU0FUQSBTYW1zdW5nIEhE
NTAySEogaGFyZCBkcml2ZS4gQm90aCBoYXJkIGRyaXZlcyBzcGluIGF0IDcyMDAgUlBNIGFuZCBo
YXZlIGhhcmQgZHJpdmUgd3JpdGUtY2FjaGluZyBlbmFibGVkICh1c2luZyBgaGRwYXJtIC1XIDEg
W2RldmljZV1gKS4gVGhlIG51bWJlcnMgcmVwb3J0ZWQgYmVsb3cgYXJlIHRoZSBtZWRpYW4gb2Yg
dGhyZWUgbWVhc3VyZW1lbnRzLjwvcD4KLQotPGg0PkJlbmNobWFyayBTb3VyY2UgQ29kZTwvaDQ+
Ci08cD5XZSB3cm90ZSBiZW5jaG1hcmsgdG9vbHMgZm9yIFNRTGl0ZSBhbmQgS3lvdG8gVHJlZURC
IGJhc2VkIG9uIExldmVsREIncyA8c3BhbiBjbGFzcz0iY29kZSI+ZGJfYmVuY2g8L3NwYW4+LiBU
aGUgY29kZSBmb3IgZWFjaCBvZiB0aGUgYmVuY2htYXJrcyByZXNpZGVzIGhlcmU6PC9wPgotPHVs
PgotCTxsaT4gPGI+TGV2ZWxEQjo8L2I+IDxhIGhyZWY9Imh0dHA6Ly9jb2RlLmdvb2dsZS5jb20v
cC9sZXZlbGRiL3NvdXJjZS9icm93c2UvdHJ1bmsvZGIvZGJfYmVuY2guY2MiPmRiL2RiX2JlbmNo
LmNjPC9hPi48L2xpPgotCTxsaT4gPGI+U1FMaXRlOjwvYj4gPGEgaHJlZj0iaHR0cDovL2NvZGUu
Z29vZ2xlLmNvbS9wL2xldmVsZGIvc291cmNlL2Jyb3dzZS8jc3ZuJTJGdHJ1bmslMkZkb2MlMkZi
ZW5jaCUyRmRiX2JlbmNoX3NxbGl0ZTMuY2MiPmRvYy9iZW5jaC9kYl9iZW5jaF9zcWxpdGUzLmNj
PC9hPi48L2xpPgotCTxsaT4gPGI+S3lvdG8gVHJlZURCOjwvYj4gPGEgaHJlZj0iaHR0cDovL2Nv
ZGUuZ29vZ2xlLmNvbS9wL2xldmVsZGIvc291cmNlL2Jyb3dzZS8jc3ZuJTJGdHJ1bmslMkZkb2Ml
MkZiZW5jaCUyRmRiX2JlbmNoX3RyZWVfZGIuY2MiPmRvYy9iZW5jaC9kYl9iZW5jaF90cmVlX2Ri
LmNjPC9hPi48L2xpPgotPC91bD4KLQotPGg0PkN1c3RvbSBCdWlsZCBTcGVjaWZpY2F0aW9uczwv
aDQ+Ci08dWw+Ci08bGk+TGV2ZWxEQjogTGV2ZWxEQiB3YXMgY29tcGlsZWQgd2l0aCB0aGUgPGEg
aHJlZj0iaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2dvb2dsZS1wZXJmdG9vbHMiPnRjbWFsbG9j
PC9hPiBsaWJyYXJ5IGFuZCB0aGUgPGEgaHJlZj0iaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3Nu
YXBweS8iPlNuYXBweTwvYT4gY29tcHJlc3Npb24gbGlicmFyeSAocmV2aXNpb24gMzMpLiAgQXNz
ZXJ0aW9ucyB3ZXJlIGRpc2FibGVkLjwvbGk+Ci08bGk+VHJlZURCOiBUcmVlREIgd2FzIGNvbXBp
bGVkIHVzaW5nIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJj
ZS9sem8vIj5MWk88L2E+IGNvbXByZXNzaW9uIGxpYnJhcnkgKHZlcnNpb24gMi4wMykuIEZ1cnRo
ZXJtb3JlLCB3ZSBlbmFibGVkIHRoZSBUU01BTEwgYW5kIFRMSU5FQVIgb3B0aW9ucyB3aGVuIG9w
ZW5pbmcgdGhlIGRhdGFiYXNlIGluIG9yZGVyIHRvIHJlZHVjZSB0aGUgZm9vdHByaW50IG9mIGVh
Y2ggcmVjb3JkLjwvbGk+Ci08bGk+U1FMaXRlOiBXZSB0dW5lZCBTUUxpdGUncyBwZXJmb3JtYW5j
ZSwgYnkgc2V0dGluZyBpdHMgbG9ja2luZyBtb2RlIHRvIGV4Y2x1c2l2ZS4gIFdlIGFsc28gZW5h
YmxlZCBTUUxpdGUncyA8YSBocmVmPSJodHRwOi8vd3d3LnNxbGl0ZS5vcmcvZHJhZnQvd2FsLmh0
bWwiPndyaXRlLWFoZWFkIGxvZ2dpbmc8L2E+LjwvbGk+Ci08L3VsPgotCi08aDI+MS4gQmFzZWxp
bmUgUGVyZm9ybWFuY2U8L2gyPgotPHA+VGhpcyBzZWN0aW9uIGdpdmVzIHRoZSBiYXNlbGluZSBw
ZXJmb3JtYW5jZSBvZiBhbGwgdGhlCi1kYXRhYmFzZXMuICBGb2xsb3dpbmcgc2VjdGlvbnMgc2hv
dyBob3cgcGVyZm9ybWFuY2UgY2hhbmdlcyBhcyB2YXJpb3VzCi1wYXJhbWV0ZXJzIGFyZSB2YXJp
ZWQuICBGb3IgdGhlIGJhc2VsaW5lOjwvcD4KLTx1bD4KLQk8bGk+IEVhY2ggZGF0YWJhc2UgaXMg
YWxsb3dlZCA0IE1CIG9mIGNhY2hlIG1lbW9yeS48L2xpPgotICAgICAgICA8bGk+IERhdGFiYXNl
cyBhcmUgb3BlbmVkIGluIDxlbT5hc3luY2hyb25vdXM8L2VtPiB3cml0ZSBtb2RlLgotICAgICAg
ICAgICAgIChMZXZlbERCJ3Mgc3luYyBvcHRpb24sIFRyZWVEQidzIE9BVVRPU1lOQyBvcHRpb24s
IGFuZAotICAgICAgICAgICAgIFNRTGl0ZTMncyBzeW5jaHJvbm91cyBvcHRpb25zIGFyZSBhbGwg
dHVybmVkIG9mZikuICBJLmUuLAotICAgICAgICAgICAgIGV2ZXJ5IHdyaXRlIGlzIHB1c2hlZCB0
byB0aGUgb3BlcmF0aW5nIHN5c3RlbSwgYnV0IHRoZQotICAgICAgICAgICAgIGJlbmNobWFyayBk
b2VzIG5vdCB3YWl0IGZvciB0aGUgd3JpdGUgdG8gcmVhY2ggdGhlIGRpc2suPC9saT4KLQk8bGk+
IEtleXMgYXJlIDE2IGJ5dGVzIGVhY2guPC9saT4KLSAgICAgICAgPGxpPiBWYWx1ZSBhcmUgMTAw
IGJ5dGVzIGVhY2ggKHdpdGggZW5vdWdoIHJlZHVuZGFuY3kgc28gdGhhdAotICAgICAgICAgICAg
IGEgc2ltcGxlIGNvbXByZXNzb3Igc2hyaW5rcyB0aGVtIHRvIDUwJSBvZiB0aGVpciBvcmlnaW5h
bAotICAgICAgICAgICAgIHNpemUpLjwvbGk+Ci0JPGxpPiBTZXF1ZW50aWFsIHJlYWRzL3dyaXRl
cyB0cmF2ZXJzZSB0aGUga2V5IHNwYWNlIGluIGluY3JlYXNpbmcgb3JkZXIuPC9saT4KLQk8bGk+
IFJhbmRvbSByZWFkcy93cml0ZXMgdHJhdmVyc2UgdGhlIGtleSBzcGFjZSBpbiByYW5kb20gb3Jk
ZXIuPC9saT4KLTwvdWw+Ci0KLTxoMz5BLiBTZXF1ZW50aWFsIFJlYWRzPC9oMz4KLTx0YWJsZSBj
bGFzcz0iYm4gYm5iYXNlIj4KLTx0cj48dGQgY2xhc3M9ImMxIj5MZXZlbERCPC90ZD4KLSAgICA8
dGQgY2xhc3M9ImMyIj40LDAzMCwwMDAgb3BzL3NlYzwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjMyI+
PGRpdiBjbGFzcz0iYmxkYiIgc3R5bGU9IndpZHRoOjM1MHB4Ij4mbmJzcDs8L2Rpdj48L3RkPgot
PHRyPjx0ZCBjbGFzcz0iYzEiPkt5b3RvIFRyZWVEQjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjMiI+
MSwwMTAsMDAwIG9wcy9zZWM8L3RkPgotICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJr
Y3QiIHN0eWxlPSJ3aWR0aDo5NXB4Ij4mbmJzcDs8L2Rpdj48L3RkPgotPHRyPjx0ZCBjbGFzcz0i
YzEiPlNRTGl0ZTM8L3RkPgotICAgIDx0ZCBjbGFzcz0iYzIiPjM4MywwMDAgb3BzL3NlYzwvdGQ+
Ci0gICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYnNxbCIgc3R5bGU9IndpZHRoOjMzcHgi
PiZuYnNwOzwvZGl2PjwvdGQ+Ci08L3RhYmxlPgotPGgzPkIuIFJhbmRvbSBSZWFkczwvaDM+Ci08
dGFibGUgY2xhc3M9ImJuIGJuYmFzZSI+Ci08dHI+PHRkIGNsYXNzPSJjMSI+TGV2ZWxEQjwvdGQ+
Ci0gICAgPHRkIGNsYXNzPSJjMiI+MTI5LDAwMCBvcHMvc2VjPC90ZD4KLSAgICA8dGQgY2xhc3M9
ImMzIj48ZGl2IGNsYXNzPSJibGRiIiBzdHlsZT0id2lkdGg6Mjk4cHgiPiZuYnNwOzwvZGl2Pjwv
dGQ+Ci08dHI+PHRkIGNsYXNzPSJjMSI+S3lvdG8gVHJlZURCPC90ZD4KLSAgICA8dGQgY2xhc3M9
ImMyIj4xNTEsMDAwIG9wcy9zZWM8L3RkPgotICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9
ImJrY3QiIHN0eWxlPSJ3aWR0aDozNTBweCI+Jm5ic3A7PC9kaXY+PC90ZD4KLTx0cj48dGQgY2xh
c3M9ImMxIj5TUUxpdGUzPC90ZD4KLSAgICA8dGQgY2xhc3M9ImMyIj4xMzQsMDAwIG9wcy9zZWM8
L3RkPgotICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJzcWwiIHN0eWxlPSJ3aWR0aDoz
MTBweCI+Jm5ic3A7PC9kaXY+PC90ZD4KLTwvdGFibGU+Ci08aDM+Qy4gU2VxdWVudGlhbCBXcml0
ZXM8L2gzPgotPHRhYmxlIGNsYXNzPSJibiBibmJhc2UiPgotPHRyPjx0ZCBjbGFzcz0iYzEiPkxl
dmVsREI8L3RkPgotICAgIDx0ZCBjbGFzcz0iYzIiPjc3OSwwMDAgb3BzL3NlYzwvdGQ+Ci0gICAg
PHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYmxkYiIgc3R5bGU9IndpZHRoOjM1MHB4Ij4mbmJz
cDs8L2Rpdj48L3RkPgotPHRyPjx0ZCBjbGFzcz0iYzEiPkt5b3RvIFRyZWVEQjwvdGQ+Ci0gICAg
PHRkIGNsYXNzPSJjMiI+MzQyLDAwMCBvcHMvc2VjPC90ZD4KLSAgICA8dGQgY2xhc3M9ImMzIj48
ZGl2IGNsYXNzPSJia2N0IiBzdHlsZT0id2lkdGg6MTU0cHgiPiZuYnNwOzwvZGl2PjwvdGQ+Ci08
dHI+PHRkIGNsYXNzPSJjMSI+U1FMaXRlMzwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjMiI+NDgsNjAw
IG9wcy9zZWM8L3RkPgotICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJzcWwiIHN0eWxl
PSJ3aWR0aDoyMnB4Ij4mbmJzcDs8L2Rpdj48L3RkPgotPC90YWJsZT4KLTxoMz5ELiBSYW5kb20g
V3JpdGVzPC9oMz4KLTx0YWJsZSBjbGFzcz0iYm4gYm5iYXNlIj4KLTx0cj48dGQgY2xhc3M9ImMx
Ij5MZXZlbERCPC90ZD4KLSAgICA8dGQgY2xhc3M9ImMyIj4xNjQsMDAwIG9wcy9zZWM8L3RkPgot
ICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJsZGIiIHN0eWxlPSJ3aWR0aDozNTBweCI+
Jm5ic3A7PC9kaXY+PC90ZD4KLTx0cj48dGQgY2xhc3M9ImMxIj5LeW90byBUcmVlREI8L3RkPgot
ICAgIDx0ZCBjbGFzcz0iYzIiPjg4LDUwMCBvcHMvc2VjPC90ZD4KLSAgICA8dGQgY2xhc3M9ImMz
Ij48ZGl2IGNsYXNzPSJia2N0IiBzdHlsZT0id2lkdGg6MTg4cHgiPiZuYnNwOzwvZGl2PjwvdGQ+
Ci08dHI+PHRkIGNsYXNzPSJjMSI+U1FMaXRlMzwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjMiI+OSw4
NjAgb3BzL3NlYzwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYnNxbCIgc3R5
bGU9IndpZHRoOjIxcHgiPiZuYnNwOzwvZGl2PjwvdGQ+Ci08L3RhYmxlPgotCi08cD5MZXZlbERC
IG91dHBlcmZvcm1zIGJvdGggU1FMaXRlMyBhbmQgVHJlZURCIGluIHNlcXVlbnRpYWwgYW5kIHJh
bmRvbSB3cml0ZSBvcGVyYXRpb25zIGFuZCBzZXF1ZW50aWFsIHJlYWQgb3BlcmF0aW9ucy4gS3lv
dG8gQ2FiaW5ldCBoYXMgdGhlIGZhc3Rlc3QgcmFuZG9tIHJlYWQgb3BlcmF0aW9ucy48L3A+Ci0K
LTxoMj4yLiBXcml0ZSBQZXJmb3JtYW5jZSB1bmRlciBEaWZmZXJlbnQgQ29uZmlndXJhdGlvbnM8
L2gyPgotPGgzPkEuIExhcmdlIFZhbHVlcyA8L2gzPgotPHA+Rm9yIHRoaXMgYmVuY2htYXJrLCB3
ZSBzdGFydCB3aXRoIGFuIGVtcHR5IGRhdGFiYXNlLCBhbmQgd3JpdGUgMTAwLDAwMCBieXRlIHZh
bHVlcyAofjUwJSBjb21wcmVzc2libGUpLiBUbyBrZWVwIHRoZSBiZW5jaG1hcmsgcnVubmluZyB0
aW1lIHJlYXNvbmFibGUsIHdlIHN0b3AgYWZ0ZXIgd3JpdGluZyAxMDAwIHZhbHVlcy48L3A+Ci08
aDQ+U2VxdWVudGlhbCBXcml0ZXM8L2g0PgotPHRhYmxlIGNsYXNzPSJibiBibmJhc2UiPgotPHRy
Pjx0ZCBjbGFzcz0iYzEiPkxldmVsREI8L3RkPgotICAgIDx0ZCBjbGFzcz0iYzIiPjEsMTAwIG9w
cy9zZWM8L3RkPgotICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJsZGIiIHN0eWxlPSJ3
aWR0aDoyMzRweCI+Jm5ic3A7PC9kaXY+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0iYzEiPkt5
b3RvIFRyZWVEQjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjMiI+MSwwMDAgb3BzL3NlYzwvdGQ+Ci0g
ICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYmtjdCIgc3R5bGU9IndpZHRoOjIyNHB4Ij4m
bmJzcDs8L2Rpdj48L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJjMSI+U1FMaXRlMzwvdGQ+Ci0g
ICAgPHRkIGNsYXNzPSJjMiI+MSw2MDAgb3BzL3NlYzwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjMyI+
PGRpdiBjbGFzcz0iYnNxbCIgc3R5bGU9IndpZHRoOjM1MHB4Ij4mbmJzcDs8L2Rpdj48L3RkPjwv
dHI+Ci08L3RhYmxlPgotPGg0PlJhbmRvbSBXcml0ZXM8L2g0PgotPHRhYmxlIGNsYXNzPSJibiBi
bmJhc2UiPgotPHRyPjx0ZCBjbGFzcz0iYzEiPkxldmVsREI8L3RkPgotICAgIDx0ZCBjbGFzcz0i
YzIiPjQ4MCBvcHMvc2VjPC90ZD4KLSAgICA8dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJibGRi
IiBzdHlsZT0id2lkdGg6MTA1cHgiPiZuYnNwOzwvZGl2PjwvdGQ+PC90cj4KLTx0cj48dGQgY2xh
c3M9ImMxIj5LeW90byBUcmVlREI8L3RkPgotICAgIDx0ZCBjbGFzcz0iYzIiPjEsMTAwIG9wcy9z
ZWM8L3RkPgotICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJrY3QiIHN0eWxlPSJ3aWR0
aDoyNDBweCI+Jm5ic3A7PC9kaXY+PC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0iYzEiPlNRTGl0
ZTM8L3RkPgotICAgIDx0ZCBjbGFzcz0iYzIiPjEsNjAwIG9wcy9zZWM8L3RkPgotICAgIDx0ZCBj
bGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJzcWwiIHN0eWxlPSJ3aWR0aDozNTBweCI+Jm5ic3A7PC9k
aXY+PC90ZD48L3RyPgotPC90YWJsZT4KLTxwPkxldmVsREIgZG9lc24ndCBwZXJmb3JtIGFzIHdl
bGwgd2l0aCBsYXJnZSB2YWx1ZXMgb2YgMTAwLDAwMCBieXRlcyBlYWNoLiBUaGlzIGlzIGJlY2F1
c2UgTGV2ZWxEQiB3cml0ZXMga2V5cyBhbmQgdmFsdWVzIGF0IGxlYXN0IHR3aWNlOiBmaXJzdCB0
aW1lIHRvIHRoZSB0cmFuc2FjdGlvbiBsb2csIGFuZCBzZWNvbmQgdGltZSAoZHVyaW5nIGEgY29t
cGFjdGlvbikgdG8gYSBzb3J0ZWQgZmlsZS4KLVdpdGggbGFyZ2VyIHZhbHVlcywgTGV2ZWxEQidz
IHBlci1vcGVyYXRpb24gZWZmaWNpZW5jeSBpcyBzd2FtcGVkIGJ5IHRoZQotY29zdCBvZiBleHRy
YSBjb3BpZXMgb2YgbGFyZ2UgdmFsdWVzLjwvcD4KLTxoMz5CLiBCYXRjaCBXcml0ZXM8L2gzPgot
PHA+QSBiYXRjaCB3cml0ZSBpcyBhIHNldCBvZiB3cml0ZXMgdGhhdCBhcmUgYXBwbGllZCBhdG9t
aWNhbGx5IHRvIHRoZSB1bmRlcmx5aW5nIGRhdGFiYXNlLiBBIHNpbmdsZSBiYXRjaCBvZiBOIHdy
aXRlcyBtYXkgYmUgc2lnbmlmaWNhbnRseSBmYXN0ZXIgdGhhbiBOIGluZGl2aWR1YWwgd3JpdGVz
LiBUaGUgZm9sbG93aW5nIGJlbmNobWFyayB3cml0ZXMgb25lIHRob3VzYW5kIGJhdGNoZXMgd2hl
cmUgZWFjaCBiYXRjaCBjb250YWlucyBvbmUgdGhvdXNhbmQgMTAwLWJ5dGUgdmFsdWVzLiBUcmVl
REIgZG9lcyBub3Qgc3VwcG9ydCBiYXRjaCB3cml0ZXMgYW5kIGlzIG9taXR0ZWQgZnJvbSB0aGlz
IGJlbmNobWFyay48L3A+Ci08aDQ+U2VxdWVudGlhbCBXcml0ZXM8L2g0PgotPHRhYmxlIGNsYXNz
PSJibiI+Ci08dHI+PHRkIGNsYXNzPSJjMSI+TGV2ZWxEQjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJj
MiI+ODQwLDAwMCBlbnRyaWVzL3NlYzwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFz
cz0iYmxkYiIgc3R5bGU9IndpZHRoOjM1MHB4Ij4mbmJzcDs8L2Rpdj48L3RkPgotICAgIDx0ZCBj
bGFzcz0iYzQiPigxLjA4eCBiYXNlbGluZSk8L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJjMSI+
U1FMaXRlMzwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjMiI+MTI0LDAwMCBlbnRyaWVzL3NlYzwvdGQ+
Ci0gICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYnNxbCIgc3R5bGU9IndpZHRoOjUycHgi
PiZuYnNwOzwvZGl2PjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjNCI+KDIuNTV4IGJhc2VsaW5lKTwv
dGQ+PC90cj4KLTwvdGFibGU+Ci08aDQ+UmFuZG9tIFdyaXRlczwvaDQ+Ci08dGFibGUgY2xhc3M9
ImJuIj4KLTx0cj48dGQgY2xhc3M9ImMxIj5MZXZlbERCPC90ZD4KLSAgICA8dGQgY2xhc3M9ImMy
Ij4yMjEsMDAwIGVudHJpZXMvc2VjPC90ZD4KLSAgICA8dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNz
PSJibGRiIiBzdHlsZT0id2lkdGg6MzUwcHgiPiZuYnNwOzwvZGl2PjwvdGQ+Ci0gICAgPHRkIGNs
YXNzPSJjNCI+KDEuMzV4IGJhc2VsaW5lKTwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9ImMxIj5T
UUxpdGUzPC90ZD4KLSAgICA8dGQgY2xhc3M9ImMyIj4yMiwwMDAgZW50cmllcy9zZWM8L3RkPgot
ICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJzcWwiIHN0eWxlPSJ3aWR0aDozNHB4Ij4m
bmJzcDs8L2Rpdj48L3RkPgotICAgIDx0ZCBjbGFzcz0iYzQiPigyLjIzeCBiYXNlbGluZSk8L3Rk
PjwvdHI+Ci08L3RhYmxlPgotCi08cD5CZWNhdXNlIG9mIHRoZSB3YXkgTGV2ZWxEQiBwZXJzaXN0
ZW50IHN0b3JhZ2UgaXMgb3JnYW5pemVkLCBiYXRjaGVzIG9mCi1yYW5kb20gd3JpdGVzIGFyZSBu
b3QgbXVjaCBzbG93ZXIgKG9ubHkgYSBmYWN0b3Igb2YgNHgpIHRoYW4gYmF0Y2hlcwotb2Ygc2Vx
dWVudGlhbCB3cml0ZXMuPC9wPgotCi08aDM+Qy4gU3luY2hyb25vdXMgV3JpdGVzPC9oMz4KLTxw
PkluIHRoZSBmb2xsb3dpbmcgYmVuY2htYXJrLCB3ZSBlbmFibGUgdGhlIHN5bmNocm9ub3VzIHdy
aXRpbmcgbW9kZXMKLW9mIGFsbCBvZiB0aGUgZGF0YWJhc2VzLiAgU2luY2UgdGhpcyBjaGFuZ2Ug
c2lnbmlmaWNhbnRseSBzbG93cyBkb3duIHRoZQotYmVuY2htYXJrLCB3ZSBzdG9wIGFmdGVyIDEw
LDAwMCB3cml0ZXMuIEZvciBzeW5jaHJvbm91cyB3cml0ZSB0ZXN0cywgd2UndmUKLWRpc2FibGVk
IGhhcmQgZHJpdmUgd3JpdGUtY2FjaGluZyAodXNpbmcgYGhkcGFybSAtVyAwIFtkZXZpY2VdYCku
PC9wPgotPHVsPgotICAgIDxsaT5Gb3IgTGV2ZWxEQiwgd2Ugc2V0IFdyaXRlT3B0aW9ucy5zeW5j
ID0gdHJ1ZS48L2xpPgotICAgIDxsaT5JbiBUcmVlREIsIHdlIGVuYWJsZWQgVHJlZURCJ3MgT0FV
VE9TWU5DIG9wdGlvbi48L2xpPgotICAgIDxsaT5Gb3IgU1FMaXRlMywgd2Ugc2V0ICJQUkFHTUEg
c3luY2hyb25vdXMgPSBGVUxMIi48L2xpPgotPC91bD4KLTxoND5TZXF1ZW50aWFsIFdyaXRlczwv
aDQ+Ci08dGFibGUgY2xhc3M9ImJuIj4KLTx0cj48dGQgY2xhc3M9ImMxIj5MZXZlbERCPC90ZD4K
LSAgICA8dGQgY2xhc3M9ImMyIj4xMDAgb3BzL3NlYzwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjMyI+
PGRpdiBjbGFzcz0iYmxkYiIgc3R5bGU9IndpZHRoOjM1MHB4Ij4mbmJzcDs8L2Rpdj48L3RkPgot
ICAgIDx0ZCBjbGFzcz0iYzQiPigwLjAwM3ggYmFzZWxpbmUpPC90ZD48L3RyPgotPHRyPjx0ZCBj
bGFzcz0iYzEiPkt5b3RvIFRyZWVEQjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjMiI+NyBvcHMvc2Vj
PC90ZD4KLSAgICA8dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJia2N0IiBzdHlsZT0id2lkdGg6
MjdweCI+Jm5ic3A7PC9kaXY+PC90ZD4KLSAgICA8dGQgY2xhc3M9ImM0Ij4oMC4wMDA0eCBiYXNl
bGluZSk8L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJjMSI+U1FMaXRlMzwvdGQ+Ci0gICAgPHRk
IGNsYXNzPSJjMiI+ODggb3BzL3NlYzwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFz
cz0iYnNxbCIgc3R5bGU9IndpZHRoOjMxNXB4Ij4mbmJzcDs8L2Rpdj48L3RkPgotICAgIDx0ZCBj
bGFzcz0iYzQiPigwLjAwMnggYmFzZWxpbmUpPC90ZD48L3RyPgotPC90YWJsZT4KLTxoND5SYW5k
b20gV3JpdGVzPC9oND4KLTx0YWJsZSBjbGFzcz0iYm4iPgotPHRyPjx0ZCBjbGFzcz0iYzEiPkxl
dmVsREI8L3RkPgotICAgIDx0ZCBjbGFzcz0iYzIiPjEwMCBvcHMvc2VjPC90ZD4KLSAgICA8dGQg
Y2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJibGRiIiBzdHlsZT0id2lkdGg6MzUwcHgiPiZuYnNwOzwv
ZGl2PjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjNCI+KDAuMDE1eCBiYXNlbGluZSk8L3RkPjwvdHI+
Ci08dHI+PHRkIGNsYXNzPSJjMSI+S3lvdG8gVHJlZURCPC90ZD4KLSAgICA8dGQgY2xhc3M9ImMy
Ij44IG9wcy9zZWM8L3RkPgotICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJrY3QiIHN0
eWxlPSJ3aWR0aDoyOXB4Ij4mbmJzcDs8L2Rpdj48L3RkPgotICAgIDx0ZCBjbGFzcz0iYzQiPigw
LjAwMXggYmFzZWxpbmUpPC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0iYzEiPlNRTGl0ZTM8L3Rk
PgotICAgIDx0ZCBjbGFzcz0iYzIiPjg4IG9wcy9zZWM8L3RkPgotICAgIDx0ZCBjbGFzcz0iYzMi
PjxkaXYgY2xhc3M9ImJzcWwiIHN0eWxlPSJ3aWR0aDozMTRweCI+Jm5ic3A7PC9kaXY+PC90ZD4K
LSAgICA8dGQgY2xhc3M9ImM0Ij4oMC4wMDl4IGJhc2VsaW5lKTwvdGQ+PC90cj4KLTwvdGFibGU+
Ci0KLTxwPkFsc28gc2VlIHRoZSA8Y29kZT5leHQ0PC9jb2RlPiBwZXJmb3JtYW5jZSBudW1iZXJz
IGJlbG93Ci1zaW5jZSBzeW5jaHJvbm91cyB3cml0ZXMgYmVoYXZlIHNpZ25pZmljYW50bHkgZGlm
ZmVyZW50bHkKLW9uIDxjb2RlPmV4dDM8L2NvZGU+IGFuZCA8Y29kZT5leHQ0PC9jb2RlPi48L3A+
Ci0KLTxoMz5ELiBUdXJuaW5nIENvbXByZXNzaW9uIE9mZjwvaDM+Ci0KLTxwPkluIHRoZSBiYXNl
bGluZSBtZWFzdXJlbWVudHMsIExldmVsREIgYW5kIFRyZWVEQiB3ZXJlIHVzaW5nCi1saWdodC13
ZWlnaHQgY29tcHJlc3Npb24KLSg8YSBocmVmPSJodHRwOi8vY29kZS5nb29nbGUuY29tL3Avc25h
cHB5LyI+U25hcHB5PC9hPiBmb3IgTGV2ZWxEQiwKLWFuZCA8YSBocmVmPSJodHRwOi8vd3d3Lm9i
ZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vIj5MWk88L2E+IGZvcgotVHJlZURCKS4gU1FMaXRl
MywgYnkgZGVmYXVsdCBkb2VzIG5vdCB1c2UgY29tcHJlc3Npb24uICBUaGUKLWV4cGVyaW1lbnRz
IGJlbG93IHNob3cgd2hhdCBoYXBwZW5zIHdoZW4gY29tcHJlc3Npb24gaXMgZGlzYWJsZWQgaW4K
LWFsbCBvZiB0aGUgZGF0YWJhc2VzICh0aGUgU1FMaXRlMyBudW1iZXJzIGFyZSBqdXN0IGEgY29w
eSBvZgotaXRzIGJhc2VsaW5lIG1lYXN1cmVtZW50cyk6PC9wPgotCi08aDQ+U2VxdWVudGlhbCBX
cml0ZXM8L2g0PgotPHRhYmxlIGNsYXNzPSJibiI+Ci08dHI+PHRkIGNsYXNzPSJjMSI+TGV2ZWxE
QjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjMiI+NTk0LDAwMCBvcHMvc2VjPC90ZD4KLSAgICA8dGQg
Y2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJibGRiIiBzdHlsZT0id2lkdGg6MzUwcHgiPiZuYnNwOzwv
ZGl2PjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjNCI+KDAuNzZ4IGJhc2VsaW5lKTwvdGQ+PC90cj4K
LTx0cj48dGQgY2xhc3M9ImMxIj5LeW90byBUcmVlREI8L3RkPgotICAgIDx0ZCBjbGFzcz0iYzIi
PjQ4NSwwMDAgb3BzL3NlYzwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYmtj
dCIgc3R5bGU9IndpZHRoOjIzOXB4Ij4mbmJzcDs8L2Rpdj48L3RkPgotICAgIDx0ZCBjbGFzcz0i
YzQiPigxLjQyeCBiYXNlbGluZSk8L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJjMSI+U1FMaXRl
MzwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjMiI+NDgsNjAwIG9wcy9zZWM8L3RkPgotICAgIDx0ZCBj
bGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJzcWwiIHN0eWxlPSJ3aWR0aDoyOXB4Ij4mbmJzcDs8L2Rp
dj48L3RkPgotICAgIDx0ZCBjbGFzcz0iYzQiPigxLjAweCBiYXNlbGluZSk8L3RkPjwvdHI+Ci08
L3RhYmxlPgotPGg0PlJhbmRvbSBXcml0ZXM8L2g0PgotPHRhYmxlIGNsYXNzPSJibiI+Ci08dHI+
PHRkIGNsYXNzPSJjMSI+TGV2ZWxEQjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjMiI+MTM1LDAwMCBv
cHMvc2VjPC90ZD4KLSAgICA8dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJibGRiIiBzdHlsZT0i
d2lkdGg6Mjk2cHgiPiZuYnNwOzwvZGl2PjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjNCI+KDAuODJ4
IGJhc2VsaW5lKTwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9ImMxIj5LeW90byBUcmVlREI8L3Rk
PgotICAgIDx0ZCBjbGFzcz0iYzIiPjE1OSwwMDAgb3BzL3NlYzwvdGQ+Ci0gICAgPHRkIGNsYXNz
PSJjMyI+PGRpdiBjbGFzcz0iYmtjdCIgc3R5bGU9IndpZHRoOjM1MHB4Ij4mbmJzcDs8L2Rpdj48
L3RkPgotICAgIDx0ZCBjbGFzcz0iYzQiPigxLjgweCBiYXNlbGluZSk8L3RkPjwvdHI+Ci08dHI+
PHRkIGNsYXNzPSJjMSI+U1FMaXRlMzwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjMiI+OSw4NjAgb3Bz
L3NlYzwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYnNxbCIgc3R5bGU9Indp
ZHRoOjIycHgiPiZuYnNwOzwvZGl2PjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjNCI+KDEuMDB4IGJh
c2VsaW5lKTwvdGQ+PC90cj4KLTwvdGFibGU+Ci0KLTxwPkxldmVsREIncyB3cml0ZSBwZXJmb3Jt
YW5jZSBpcyBiZXR0ZXIgd2l0aCBjb21wcmVzc2lvbiB0aGFuIHdpdGhvdXQKLXNpbmNlIGNvbXBy
ZXNzaW9uIGRlY3JlYXNlcyB0aGUgYW1vdW50IG9mIGRhdGEgdGhhdCBoYXMgdG8gYmUgd3JpdHRl
bgotdG8gZGlzay4gIFRoZXJlZm9yZSBMZXZlbERCIHVzZXJzIGNhbiBsZWF2ZSBjb21wcmVzc2lv
biBlbmFibGVkIGluCi1tb3N0IHNjZW5hcmlvcyB3aXRob3V0IGhhdmluZyB3b3JyeSBhYm91dCBh
IHRyYWRlb2ZmIGJldHdlZW4gc3BhY2UKLXVzYWdlIGFuZCBwZXJmb3JtYW5jZS4gIFRyZWVEQidz
IHBlcmZvcm1hbmNlIG9uIHRoZSBvdGhlciBoYW5kIGlzCi1iZXR0ZXIgd2l0aG91dCBjb21wcmVz
c2lvbiB0aGFuIHdpdGggY29tcHJlc3Npb24uICBQcmVzdW1hYmx5IHRoaXMgaXMKLWJlY2F1c2Ug
VHJlZURCJ3MgY29tcHJlc3Npb24gbGlicmFyeSAoTFpPKSBpcyBtb3JlIGV4cGVuc2l2ZSB0aGFu
Ci1MZXZlbERCJ3MgY29tcHJlc3Npb24gbGlicmFyeSAoU25hcHB5KS48cD4KLQotPGgzPkUuIFVz
aW5nIE1vcmUgTWVtb3J5PC9oMz4KLTxwPldlIGluY3JlYXNlZCB0aGUgb3ZlcmFsbCBjYWNoZSBz
aXplIGZvciBlYWNoIGRhdGFiYXNlIHRvIDEyOCBNQi4gRm9yIExldmVsREIsIHdlIHBhcnRpdGlv
bmVkIDEyOCBNQiBpbnRvIGEgMTIwIE1CIHdyaXRlIGJ1ZmZlciBhbmQgOCBNQiBvZiBjYWNoZSAo
dXAgZnJvbSAyIE1CIG9mIHdyaXRlIGJ1ZmZlciBhbmQgMiBNQiBvZiBjYWNoZSkuIEZvciBTUUxp
dGUzLCB3ZSBrZXB0IHRoZSBwYWdlIHNpemUgYXQgMTAyNCBieXRlcywgYnV0IGluY3JlYXNlZCB0
aGUgbnVtYmVyIG9mIHBhZ2VzIHRvIDEzMSwwNzIgKHVwIGZyb20gNDA5NikuIEZvciBUcmVlREIs
IHdlIGFsc28ga2VwdCB0aGUgcGFnZSBzaXplIGF0IDEwMjQgYnl0ZXMsIGJ1dCBpbmNyZWFzZWQg
dGhlIGNhY2hlIHNpemUgdG8gMTI4IE1CICh1cCBmcm9tIDQgTUIpLjwvcD4KLTxoND5TZXF1ZW50
aWFsIFdyaXRlczwvaDQ+Ci08dGFibGUgY2xhc3M9ImJuIj4KLTx0cj48dGQgY2xhc3M9ImMxIj5M
ZXZlbERCPC90ZD4KLSAgICA8dGQgY2xhc3M9ImMyIj44MTIsMDAwIG9wcy9zZWM8L3RkPgotICAg
IDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJsZGIiIHN0eWxlPSJ3aWR0aDozNTBweCI+Jm5i
c3A7PC9kaXY+PC90ZD4KLSAgICA8dGQgY2xhc3M9ImM0Ij4oMS4wNHggYmFzZWxpbmUpPC90ZD48
L3RyPgotPHRyPjx0ZCBjbGFzcz0iYzEiPkt5b3RvIFRyZWVEQjwvdGQ+Ci0gICAgPHRkIGNsYXNz
PSJjMiI+MzIxLDAwMCBvcHMvc2VjPC90ZD4KLSAgICA8dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNz
PSJia2N0IiBzdHlsZT0id2lkdGg6MTM4cHgiPiZuYnNwOzwvZGl2PjwvdGQ+Ci0gICAgPHRkIGNs
YXNzPSJjNCI+KDAuOTR4IGJhc2VsaW5lKTwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9ImMxIj5T
UUxpdGUzPC90ZD4KLSAgICA8dGQgY2xhc3M9ImMyIj40OCw1MDAgb3BzL3NlYzwvdGQ+Ci0gICAg
PHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYnNxbCIgc3R5bGU9IndpZHRoOjIxcHgiPiZuYnNw
OzwvZGl2PjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjNCI+KDEuMDB4IGJhc2VsaW5lKTwvdGQ+PC90
cj4KLTwvdGFibGU+Ci08aDQ+UmFuZG9tIFdyaXRlczwvaDQ+Ci08dGFibGUgY2xhc3M9ImJuIj4K
LTx0cj48dGQgY2xhc3M9ImMxIj5MZXZlbERCPC90ZD4KLSAgICA8dGQgY2xhc3M9ImMyIj4zNTUs
MDAwIG9wcy9zZWM8L3RkPgotICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJsZGIiIHN0
eWxlPSJ3aWR0aDozNTBweCI+Jm5ic3A7PC9kaXY+PC90ZD4KLSAgICA8dGQgY2xhc3M9ImM0Ij4o
Mi4xNnggYmFzZWxpbmUpPC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0iYzEiPkt5b3RvIFRyZWVE
QjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjMiI+Mjg0LDAwMCBvcHMvc2VjPC90ZD4KLSAgICA8dGQg
Y2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJia2N0IiBzdHlsZT0id2lkdGg6MjgwcHgiPiZuYnNwOzwv
ZGl2PjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjNCI+KDMuMjF4IGJhc2VsaW5lKTwvdGQ+PC90cj4K
LTx0cj48dGQgY2xhc3M9ImMxIj5TUUxpdGUzPC90ZD4KLSAgICA8dGQgY2xhc3M9ImMyIj45LDY3
MCBvcHMvc2VjPC90ZD4KLSAgICA8dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJic3FsIiBzdHls
ZT0id2lkdGg6MTBweCI+Jm5ic3A7PC9kaXY+PC90ZD4KLSAgICA8dGQgY2xhc3M9ImM0Ij4oMC45
OHggYmFzZWxpbmUpPC90ZD48L3RyPgotPC90YWJsZT4KLQotPHA+U1FMaXRlJ3MgcGVyZm9ybWFu
Y2UgZG9lcyBub3QgY2hhbmdlIHN1YnN0YW50aWFsbHkgd2hlbiBjb21wYXJlZCB0bwotdGhlIGJh
c2VsaW5lLCBidXQgdGhlIHJhbmRvbSB3cml0ZSBwZXJmb3JtYW5jZSBmb3IgYm90aCBMZXZlbERC
IGFuZAotVHJlZURCIGluY3JlYXNlcyBzaWduaWZpY2FudGx5LiAgTGV2ZWxEQidzIHBlcmZvcm1h
bmNlIGltcHJvdmVzCi1iZWNhdXNlIGEgbGFyZ2VyIHdyaXRlIGJ1ZmZlciByZWR1Y2VzIHRoZSBu
ZWVkIHRvIG1lcmdlIHNvcnRlZCBmaWxlcwotKHNpbmNlIGl0IGNyZWF0ZXMgYSBzbWFsbGVyIG51
bWJlciBvZiBsYXJnZXIgc29ydGVkIGZpbGVzKS4gIFRyZWVEQidzCi1wZXJmb3JtYW5jZSBnb2Vz
IHVwIGJlY2F1c2UgdGhlIGVudGlyZSBkYXRhYmFzZSBpcyBhdmFpbGFibGUgaW4gbWVtb3J5Ci1m
b3IgZmFzdCBpbi1wbGFjZSB1cGRhdGVzLjwvcD4KLQotICA8aDI+My4gUmVhZCBQZXJmb3JtYW5j
ZSB1bmRlciBEaWZmZXJlbnQgQ29uZmlndXJhdGlvbnM8L2gyPgotPGgzPkEuIExhcmdlciBDYWNo
ZXM8L2gzPgotPHA+V2UgaW5jcmVhc2VkIHRoZSBvdmVyYWxsIG1lbW9yeSB1c2FnZSB0byAxMjgg
TUIgZm9yIGVhY2ggZGF0YWJhc2UuCi1Gb3IgTGV2ZWxEQiwgd2UgYWxsb2NhdGVkIDggTUIgdG8g
TGV2ZWxEQidzIHdyaXRlIGJ1ZmZlciBhbmQgMTIwIE1CCi10byBMZXZlbERCJ3MgY2FjaGUuIFRo
ZSBvdGhlciBkYXRhYmFzZXMgZG9uJ3QgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGEKLXdyaXRlIGJ1
ZmZlciBhbmQgYSBjYWNoZSwgc28gd2Ugc2ltcGx5IHNldCB0aGVpciBjYWNoZSBzaXplIHRvIDEy
OAotTUIuPC9wPgotPGg0PlNlcXVlbnRpYWwgUmVhZHM8L2g0PgotPHRhYmxlIGNsYXNzPSJibiI+
Ci08dHI+PHRkIGNsYXNzPSJjMSI+TGV2ZWxEQjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjMiI+NSwy
MTAsMDAwIG9wcy9zZWM8L3RkPgotICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJsZGIi
IHN0eWxlPSJ3aWR0aDozNTBweCI+Jm5ic3A7PC9kaXY+PC90ZD4KLSAgICA8dGQgY2xhc3M9ImM0
Ij4oMS4yOXggYmFzZWxpbmUpPC90ZD48L3RyPgotPHRyPjx0ZCBjbGFzcz0iYzEiPkt5b3RvIFRy
ZWVEQjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjMiI+MSwwNzAsMDAwIG9wcy9zZWM8L3RkPgotICAg
IDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJrY3QiIHN0eWxlPSJ3aWR0aDo3MnB4Ij4mbmJz
cDs8L2Rpdj48L3RkPgotICAgIDx0ZCBjbGFzcz0iYzQiPigxLjA2eCBiYXNlbGluZSk8L3RkPjwv
dHI+Ci08dHI+PHRkIGNsYXNzPSJjMSI+U1FMaXRlMzwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjMiI+
NjA5LDAwMCBvcHMvc2VjPC90ZD4KLSAgICA8dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJic3Fs
IiBzdHlsZT0id2lkdGg6NDFweCI+Jm5ic3A7PC9kaXY+PC90ZD4KLSAgICA8dGQgY2xhc3M9ImM0
Ij4oMS41OXggYmFzZWxpbmUpPC90ZD48L3RyPgotPC90YWJsZT4KLQotPGg0PlJhbmRvbSBSZWFk
czwvaDQ+Ci08dGFibGUgY2xhc3M9ImJuIj4KLTx0cj48dGQgY2xhc3M9ImMxIj5MZXZlbERCPC90
ZD4KLSAgICA8dGQgY2xhc3M9ImMyIj4xOTAsMDAwIG9wcy9zZWM8L3RkPgotICAgIDx0ZCBjbGFz
cz0iYzMiPjxkaXYgY2xhc3M9ImJsZGIiIHN0eWxlPSJ3aWR0aDoxNDRweCI+Jm5ic3A7PC9kaXY+
PC90ZD4KLSAgICA8dGQgY2xhc3M9ImM0Ij4oMS40N3ggYmFzZWxpbmUpPC90ZD48L3RyPgotPHRy
Pjx0ZCBjbGFzcz0iYzEiPkt5b3RvIFRyZWVEQjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjMiI+NDYz
LDAwMCBvcHMvc2VjPC90ZD4KLSAgICA8dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJia2N0IiBz
dHlsZT0id2lkdGg6MzUwcHgiPiZuYnNwOzwvZGl2PjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjNCI+
KDMuMDd4IGJhc2VsaW5lKTwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9ImMxIj5TUUxpdGUzPC90
ZD4KLSAgICA8dGQgY2xhc3M9ImMyIj4xODYsMDAwIG9wcy9zZWM8L3RkPgotICAgIDx0ZCBjbGFz
cz0iYzMiPjxkaXYgY2xhc3M9ImJzcWwiIHN0eWxlPSJ3aWR0aDoxNDFweCI+Jm5ic3A7PC9kaXY+
PC90ZD4KLSAgICA8dGQgY2xhc3M9ImM0Ij4oMS4zOXggYmFzZWxpbmUpPC90ZD48L3RyPgotPC90
YWJsZT4KLQotPHA+QXMgZXhwZWN0ZWQsIHRoZSByZWFkIHBlcmZvcm1hbmNlIG9mIGFsbCBvZiB0
aGUgZGF0YWJhc2VzIGluY3JlYXNlcwotd2hlbiB0aGUgY2FjaGVzIGFyZSBlbmxhcmdlZC4gIElu
IHBhcnRpY3VsYXIsIFRyZWVEQiBzZWVtcyB0byBtYWtlCi12ZXJ5IGVmZmVjdGl2ZSB1c2Ugb2Yg
YSBjYWNoZSB0aGF0IGlzIGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSBlbnRpcmUKLWRhdGFiYXNl
LjwvcD4KLQotPGgzPkIuIE5vIENvbXByZXNzaW9uIFJlYWRzIDwvaDM+Ci08cD5Gb3IgdGhpcyBi
ZW5jaG1hcmssIHdlIHBvcHVsYXRlZCBhIGRhdGFiYXNlIHdpdGggMSBtaWxsaW9uIGVudHJpZXMg
Y29uc2lzdGluZyBvZiAxNiBieXRlIGtleXMgYW5kIDEwMCBieXRlIHZhbHVlcy4gV2UgY29tcGls
ZWQgTGV2ZWxEQiBhbmQgS3lvdG8gQ2FiaW5ldCB3aXRob3V0IGNvbXByZXNzaW9uIHN1cHBvcnQs
IHNvIHJlc3VsdHMgdGhhdCBhcmUgcmVhZCBvdXQgZnJvbSB0aGUgZGF0YWJhc2UgYXJlIGFscmVh
ZHkgdW5jb21wcmVzc2VkLiBXZSd2ZSBsaXN0ZWQgdGhlIFNRTGl0ZTMgYmFzZWxpbmUgcmVhZCBw
ZXJmb3JtYW5jZSBhcyBhIHBvaW50IG9mIGNvbXBhcmlzb24uPC9wPgotPGg0PlNlcXVlbnRpYWwg
UmVhZHM8L2g0PgotPHRhYmxlIGNsYXNzPSJibiI+Ci08dHI+PHRkIGNsYXNzPSJjMSI+TGV2ZWxE
QjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjMiI+NCw4ODAsMDAwIG9wcy9zZWM8L3RkPgotICAgIDx0
ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJsZGIiIHN0eWxlPSJ3aWR0aDozNTBweCI+Jm5ic3A7
PC9kaXY+PC90ZD4KLSAgICA8dGQgY2xhc3M9ImM0Ij4oMS4yMXggYmFzZWxpbmUpPC90ZD48L3Ry
PgotPHRyPjx0ZCBjbGFzcz0iYzEiPkt5b3RvIFRyZWVEQjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJj
MiI+MSwyMzAsMDAwIG9wcy9zZWM8L3RkPgotICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9
ImJrY3QiIHN0eWxlPSJ3aWR0aDo4OHB4Ij4mbmJzcDs8L2Rpdj48L3RkPgotICAgIDx0ZCBjbGFz
cz0iYzQiPigzLjYweCBiYXNlbGluZSk8L3RkPjwvdHI+Ci08dHI+PHRkIGNsYXNzPSJjMSI+U1FM
aXRlMzwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjMiI+MzgzLDAwMCBvcHMvc2VjPC90ZD4KLSAgICA8
dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJic3FsIiBzdHlsZT0id2lkdGg6MjdweCI+Jm5ic3A7
PC9kaXY+PC90ZD4KLSAgICA8dGQgY2xhc3M9ImM0Ij4oMS4wMHggYmFzZWxpbmUpPC90ZD48L3Ry
PgotPC90YWJsZT4KLTxoND5SYW5kb20gUmVhZHM8L2g0PgotPHRhYmxlIGNsYXNzPSJibiI+Ci08
dHI+PHRkIGNsYXNzPSJjMSI+TGV2ZWxEQjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjMiI+MTQ5LDAw
MCBvcHMvc2VjPC90ZD4KLSAgICA8dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJibGRiIiBzdHls
ZT0id2lkdGg6MzAwcHgiPiZuYnNwOzwvZGl2PjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjNCI+KDEu
MTZ4IGJhc2VsaW5lKTwvdGQ+PC90cj4KLTx0cj48dGQgY2xhc3M9ImMxIj5LeW90byBUcmVlREI8
L3RkPgotICAgIDx0ZCBjbGFzcz0iYzIiPjE3NSwwMDAgb3BzL3NlYzwvdGQ+Ci0gICAgPHRkIGNs
YXNzPSJjMyI+PGRpdiBjbGFzcz0iYmtjdCIgc3R5bGU9IndpZHRoOjM1MHB4Ij4mbmJzcDs8L2Rp
dj48L3RkPgotICAgIDx0ZCBjbGFzcz0iYzQiPigxLjE2eCBiYXNlbGluZSk8L3RkPjwvdHI+Ci08
dHI+PHRkIGNsYXNzPSJjMSI+U1FMaXRlMzwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjMiI+MTM0LDAw
MCBvcHMvc2VjPC90ZD4KLSAgICA8dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJic3FsIiBzdHls
ZT0id2lkdGg6MjY4cHgiPiZuYnNwOzwvZGl2PjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJjNCI+KDEu
MDB4IGJhc2VsaW5lKTwvdGQ+PC90cj4KLTwvdGFibGU+Ci0KLTxwPlBlcmZvcm1hbmNlIG9mIGJv
dGggTGV2ZWxEQiBhbmQgVHJlZURCIGltcHJvdmVzIGEgc21hbGwgYW1vdW50IHdoZW4KLWNvbXBy
ZXNzaW9uIGlzIGRpc2FibGVkLiAgTm90ZSBob3dldmVyIHRoYXQgdW5kZXIgZGlmZmVyZW50IHdv
cmtsb2FkcywKLXBlcmZvcm1hbmNlIG1heSB2ZXJ5IHdlbGwgYmUgYmV0dGVyIHdpdGggY29tcHJl
c3Npb24gaWYgaXQgYWxsb3dzIG1vcmUKLW9mIHRoZSB3b3JraW5nIHNldCB0byBmaXQgaW4gbWVt
b3J5LjwvcD4KLQotPGgyPk5vdGUgYWJvdXQgRXh0NCBGaWxlc3lzdGVtczwvaDI+Ci08cD5UaGUg
cHJlY2VkaW5nIG51bWJlcnMgYXJlIGZvciBhbiBleHQzIGZpbGUgc3lzdGVtLiBTeW5jaHJvbm91
cyB3cml0ZXMgYXJlIG11Y2ggc2xvd2VyIHVuZGVyIDxhIGhyZWY9Imh0dHA6Ly9lbi53aWtpcGVk
aWEub3JnL3dpa2kvRXh0NCI+ZXh0NDwvYT4gKExldmVsREIgZHJvcHMgdG8gfjMxIHdyaXRlcyAv
IHNlY29uZCBhbmQgVHJlZURCIGRyb3BzIHRvIH41IHdyaXRlcyAvIHNlY29uZDsgU1FMaXRlMydz
IHN5bmNocm9ub3VzIHdyaXRlcyBkbyBub3Qgbm90aWNlYWJseSBkcm9wKSBkdWUgdG8gZXh0NCdz
IGRpZmZlcmVudCBoYW5kbGluZyBvZiA8c3BhbiBjbGFzcz0iY29kZSI+ZnN5bmM8L3NwYW4+IC8g
PHNwYW4gY2xhc3M9ImNvZGUiPm1zeW5jPC9zcGFuPiBjYWxscy4gRXZlbiBMZXZlbERCJ3MgYXN5
bmNocm9ub3VzIHdyaXRlIHBlcmZvcm1hbmNlIGRyb3BzIHNvbWV3aGF0IHNpbmNlIGl0IHNwcmVh
ZHMgaXRzIHN0b3JhZ2UgYWNyb3NzIG11bHRpcGxlIGZpbGVzIGFuZCBpc3N1ZXMgPHNwYW4gY2xh
c3M9ImNvZGUiPmZzeW5jPC9zcGFuPiBjYWxscyB3aGVuIHN3aXRjaGluZyB0byBhIG5ldyBmaWxl
LjwvcD4KLQotPGgyPkFja25vd2xlZGdlbWVudHM8L2gyPgotPHA+SmVmZiBEZWFuIGFuZCBTYW5q
YXkgR2hlbWF3YXQgd3JvdGUgTGV2ZWxEQi4gS2V2aW4gVHNlbmcgd3JvdGUgYW5kIGNvbXBpbGVk
IHRoZXNlIGJlbmNobWFya3MuIE1pa2lvIEhpcmFiYXlhc2hpLCBTY290dCBIZXNzLCBhbmQgR2Fi
b3IgQ3NlbGxlIHByb3ZpZGVkIGhlbHAgYW5kIGFkdmljZS48L3A+Ci08L2JvZHk+Ci08L2h0bWw+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RvYy9kb2MuY3NzIGIvU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kb2MvZG9jLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNzAwYzU2NC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRi
L2RvYy9kb2MuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotYm9keSB7Ci0gIG1h
cmdpbi1sZWZ0OiAwLjVpbjsKLSAgbWFyZ2luLXJpZ2h0OiAwLjVpbjsKLSAgYmFja2dyb3VuZDog
d2hpdGU7Ci0gIGNvbG9yOiBibGFjazsKLX0KLQotaDEgewotICBtYXJnaW4tbGVmdDogLTAuMmlu
OwotICBmb250LXNpemU6IDE0cHQ7Ci19Ci1oMiB7Ci0gIG1hcmdpbi1sZWZ0OiAtMGluOwotICBm
b250LXNpemU6IDEycHQ7Ci19Ci1oMyB7Ci0gIG1hcmdpbi1sZWZ0OiAtMGluOwotfQotaDQgewot
ICBtYXJnaW4tbGVmdDogLTBpbjsKLX0KLWhyIHsKLSAgbWFyZ2luLWxlZnQ6IC0waW47Ci19Ci0K
LS8qIERlZmluaXRpb24gbGlzdHM6IGRlZmluaXRpb24gdGVybSBib2xkICovCi1kdCB7Ci0gIGZv
bnQtd2VpZ2h0OiBib2xkOwotfQotCi1hZGRyZXNzIHsKLSAgdGV4dC1hbGlnbjogY2VudGVyOwot
fQotY29kZSxzYW1wLHZhciB7Ci0gIGNvbG9yOiBibHVlOwotfQota2JkIHsKLSAgY29sb3I6ICM2
MDAwMDA7Ci19Ci1kaXYubm90ZSBwIHsKLSAgZmxvYXQ6IHJpZ2h0OwotICB3aWR0aDogM2luOwot
ICBtYXJnaW4tcmlnaHQ6IDAlOwotICBwYWRkaW5nOiAxcHg7Ci0gIGJvcmRlcjogMnB4IHNvbGlk
ICM2MDYwYTA7Ci0gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZjA7Ci19Ci0KLXVsIHsKLSAgbWFy
Z2luLXRvcDogLTBlbTsKLSAgbWFyZ2luLWJvdHRvbTogLTBlbTsKLX0KLQotb2wgewotICBtYXJn
aW4tdG9wOiAtMGVtOwotICBtYXJnaW4tYm90dG9tOiAtMGVtOwotfQotCi1VTC5ub2J1bGxldHMg
ewotICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7Ci0gIGxpc3Qtc3R5bGUtaW1hZ2U6IG5vbmU7Ci0g
IG1hcmdpbi1sZWZ0OiAtMWVtOwotfQotCi1wIHsKLSAgbWFyZ2luOiAxZW0gMCAxZW0gMDsKLSAg
cGFkZGluZzogMCAwIDAgMDsKLX0KLQotcHJlIHsKLSAgbGluZS1oZWlnaHQ6IDEuM2VtOwotICBw
YWRkaW5nOiAwLjRlbSAwIDAuOGVtIDA7Ci0gIG1hcmdpbjogIDAgMCAwIDA7Ci0gIGJvcmRlcjog
IDAgMCAwIDA7Ci0gIGNvbG9yOiBibHVlOwotfQotCi0uZGF0YXRhYmxlIHsKLSAgbWFyZ2luLWxl
ZnQ6IGF1dG87Ci0gIG1hcmdpbi1yaWdodDogYXV0bzsKLSAgbWFyZ2luLXRvcDogMmVtOwotICBt
YXJnaW4tYm90dG9tOiAyZW07Ci0gIGJvcmRlcjogMXB4IHNvbGlkOwotfQotCi0uZGF0YXRhYmxl
IHRkLHRoIHsKLSAgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOwotICB0ZXh0LWFsaWduOiByaWdo
dDsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZG9jL2ltcGwuaHRt
bCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZG9jL2ltcGwuaHRtbApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZTg3MDc5NS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL2RvYy9pbXBsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMTMgKzAsMCBAQAot
PCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0
eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iZG9jLmNzcyIgLz4KLTx0aXRsZT5MZXZlbGRiIGZpbGUgbGF5
b3V0IGFuZCBjb21wYWN0aW9uczwvdGl0bGU+Ci08L2hlYWQ+Ci0KLTxib2R5PgotCi08aDE+Rmls
ZXM8L2gxPgotCi1UaGUgaW1wbGVtZW50YXRpb24gb2YgbGV2ZWxkYiBpcyBzaW1pbGFyIGluIHNw
aXJpdCB0byB0aGUKLXJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlCi08YSBocmVmPSJodHRwOi8v
bGFicy5nb29nbGUuY29tL3BhcGVycy9iaWd0YWJsZS5odG1sIj4KLUJpZ3RhYmxlIHRhYmxldCAo
c2VjdGlvbiA1LjMpPC9hPi4KLUhvd2V2ZXIgdGhlIG9yZ2FuaXphdGlvbiBvZiB0aGUgZmlsZXMg
dGhhdCBtYWtlIHVwIHRoZSByZXByZXNlbnRhdGlvbgotaXMgc29tZXdoYXQgZGlmZmVyZW50IGFu
ZCBpcyBleHBsYWluZWQgYmVsb3cuCi0KLTxwPgotRWFjaCBkYXRhYmFzZSBpcyByZXByZXNlbnRl
ZCBieSBhIHNldCBvZiBmaWxlcyBzdG9yZWQgaW4gYSBkaXJlY3RvcnkuCi1UaGVyZSBhcmUgc2V2
ZXJhbCBkaWZmZXJlbnQgdHlwZXMgb2YgZmlsZXMgYXMgZG9jdW1lbnRlZCBiZWxvdzoKLTxwPgot
PGgyPkxvZyBmaWxlczwvaDI+Ci08cD4KLUEgbG9nIGZpbGUgKCoubG9nKSBzdG9yZXMgYSBzZXF1
ZW5jZSBvZiByZWNlbnQgdXBkYXRlcy4gIEVhY2ggdXBkYXRlCi1pcyBhcHBlbmRlZCB0byB0aGUg
Y3VycmVudCBsb2cgZmlsZS4gIFdoZW4gdGhlIGxvZyBmaWxlIHJlYWNoZXMgYQotcHJlLWRldGVy
bWluZWQgc2l6ZSAoYXBwcm94aW1hdGVseSA0TUIgYnkgZGVmYXVsdCksIGl0IGlzIGNvbnZlcnRl
ZAotdG8gYSBzb3J0ZWQgdGFibGUgKHNlZSBiZWxvdykgYW5kIGEgbmV3IGxvZyBmaWxlIGlzIGNy
ZWF0ZWQgZm9yIGZ1dHVyZQotdXBkYXRlcy4KLTxwPgotQSBjb3B5IG9mIHRoZSBjdXJyZW50IGxv
ZyBmaWxlIGlzIGtlcHQgaW4gYW4gaW4tbWVtb3J5IHN0cnVjdHVyZSAodGhlCi08Y29kZT5tZW10
YWJsZTwvY29kZT4pLiAgVGhpcyBjb3B5IGlzIGNvbnN1bHRlZCBvbiBldmVyeSByZWFkIHNvIHRo
YXQgcmVhZAotb3BlcmF0aW9ucyByZWZsZWN0IGFsbCBsb2dnZWQgdXBkYXRlcy4KLTxwPgotPGgy
PlNvcnRlZCB0YWJsZXM8L2gyPgotPHA+Ci1BIHNvcnRlZCB0YWJsZSAoKi5zc3QpIHN0b3JlcyBh
IHNlcXVlbmNlIG9mIGVudHJpZXMgc29ydGVkIGJ5IGtleS4KLUVhY2ggZW50cnkgaXMgZWl0aGVy
IGEgdmFsdWUgZm9yIHRoZSBrZXksIG9yIGEgZGVsZXRpb24gbWFya2VyIGZvciB0aGUKLWtleS4g
IChEZWxldGlvbiBtYXJrZXJzIGFyZSBrZXB0IGFyb3VuZCB0byBoaWRlIG9ic29sZXRlIHZhbHVl
cwotcHJlc2VudCBpbiBvbGRlciBzb3J0ZWQgdGFibGVzKS4KLTxwPgotVGhlIHNldCBvZiBzb3J0
ZWQgdGFibGVzIGFyZSBvcmdhbml6ZWQgaW50byBhIHNlcXVlbmNlIG9mIGxldmVscy4gIFRoZQot
c29ydGVkIHRhYmxlIGdlbmVyYXRlZCBmcm9tIGEgbG9nIGZpbGUgaXMgcGxhY2VkIGluIGEgc3Bl
Y2lhbCA8Y29kZT55b3VuZzwvY29kZT4KLWxldmVsIChhbHNvIGNhbGxlZCBsZXZlbC0wKS4gIFdo
ZW4gdGhlIG51bWJlciBvZiB5b3VuZyBmaWxlcyBleGNlZWRzIGEKLWNlcnRhaW4gdGhyZXNob2xk
IChjdXJyZW50bHkgZm91ciksIGFsbCBvZiB0aGUgeW91bmcgZmlsZXMgYXJlIG1lcmdlZAotdG9n
ZXRoZXIgd2l0aCBhbGwgb2YgdGhlIG92ZXJsYXBwaW5nIGxldmVsLTEgZmlsZXMgdG8gcHJvZHVj
ZSBhCi1zZXF1ZW5jZSBvZiBuZXcgbGV2ZWwtMSBmaWxlcyAod2UgY3JlYXRlIGEgbmV3IGxldmVs
LTEgZmlsZSBmb3IgZXZlcnkKLTJNQiBvZiBkYXRhLikKLTxwPgotRmlsZXMgaW4gdGhlIHlvdW5n
IGxldmVsIG1heSBjb250YWluIG92ZXJsYXBwaW5nIGtleXMuICBIb3dldmVyIGZpbGVzCi1pbiBv
dGhlciBsZXZlbHMgaGF2ZSBkaXN0aW5jdCBub24tb3ZlcmxhcHBpbmcga2V5IHJhbmdlcy4gIENv
bnNpZGVyCi1sZXZlbCBudW1iZXIgTCB3aGVyZSBMID49IDEuICBXaGVuIHRoZSBjb21iaW5lZCBz
aXplIG9mIGZpbGVzIGluCi1sZXZlbC1MIGV4Y2VlZHMgKDEwXkwpIE1CIChpLmUuLCAxME1CIGZv
ciBsZXZlbC0xLCAxMDBNQiBmb3IgbGV2ZWwtMiwKLS4uLiksIG9uZSBmaWxlIGluIGxldmVsLUws
IGFuZCBhbGwgb2YgdGhlIG92ZXJsYXBwaW5nIGZpbGVzIGluCi1sZXZlbC0oTCsxKSBhcmUgbWVy
Z2VkIHRvIGZvcm0gYSBzZXQgb2YgbmV3IGZpbGVzIGZvciBsZXZlbC0oTCsxKS4KLVRoZXNlIG1l
cmdlcyBoYXZlIHRoZSBlZmZlY3Qgb2YgZ3JhZHVhbGx5IG1pZ3JhdGluZyBuZXcgdXBkYXRlcyBm
cm9tCi10aGUgeW91bmcgbGV2ZWwgdG8gdGhlIGxhcmdlc3QgbGV2ZWwgdXNpbmcgb25seSBidWxr
IHJlYWRzIGFuZCB3cml0ZXMKLShpLmUuLCBtaW5pbWl6aW5nIGV4cGVuc2l2ZSBzZWVrcykuCi0K
LTxoMj5NYW5pZmVzdDwvaDI+Ci08cD4KLUEgTUFOSUZFU1QgZmlsZSBsaXN0cyB0aGUgc2V0IG9m
IHNvcnRlZCB0YWJsZXMgdGhhdCBtYWtlIHVwIGVhY2gKLWxldmVsLCB0aGUgY29ycmVzcG9uZGlu
ZyBrZXkgcmFuZ2VzLCBhbmQgb3RoZXIgaW1wb3J0YW50IG1ldGFkYXRhLgotQSBuZXcgTUFOSUZF
U1QgZmlsZSAod2l0aCBhIG5ldyBudW1iZXIgZW1iZWRkZWQgaW4gdGhlIGZpbGUgbmFtZSkKLWlz
IGNyZWF0ZWQgd2hlbmV2ZXIgdGhlIGRhdGFiYXNlIGlzIHJlb3BlbmVkLiAgVGhlIE1BTklGRVNU
IGZpbGUgaXMKLWZvcm1hdHRlZCBhcyBhIGxvZywgYW5kIGNoYW5nZXMgbWFkZSB0byB0aGUgc2Vy
dmluZyBzdGF0ZSAoYXMgZmlsZXMKLWFyZSBhZGRlZCBvciByZW1vdmVkKSBhcmUgYXBwZW5kZWQg
dG8gdGhpcyBsb2cuCi08cD4KLTxoMj5DdXJyZW50PC9oMj4KLTxwPgotQ1VSUkVOVCBpcyBhIHNp
bXBsZSB0ZXh0IGZpbGUgdGhhdCBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgbGF0ZXN0Ci1NQU5J
RkVTVCBmaWxlLgotPHA+Ci08aDI+SW5mbyBsb2dzPC9oMj4KLTxwPgotSW5mb3JtYXRpb25hbCBt
ZXNzYWdlcyBhcmUgcHJpbnRlZCB0byBmaWxlcyBuYW1lZCBMT0cgYW5kIExPRy5vbGQuCi08cD4K
LTxoMj5PdGhlcnM8L2gyPgotPHA+Ci1PdGhlciBmaWxlcyB1c2VkIGZvciBtaXNjZWxsYW5lb3Vz
IHB1cnBvc2VzIG1heSBhbHNvIGJlIHByZXNlbnQKLShMT0NLLCAqLmRidG1wKS4KLQotPGgxPkxl
dmVsIDA8L2gxPgotV2hlbiB0aGUgbG9nIGZpbGUgZ3Jvd3MgYWJvdmUgYSBjZXJ0YWluIHNpemUg
KDFNQiBieSBkZWZhdWx0KToKLTx1bD4KLTxsaT5DcmVhdGUgYSBicmFuZCBuZXcgbWVtdGFibGUg
YW5kIGxvZyBmaWxlIGFuZCBkaXJlY3QgZnV0dXJlIHVwZGF0ZXMgaGVyZQotPGxpPkluIHRoZSBi
YWNrZ3JvdW5kOgotPHVsPgotPGxpPldyaXRlIHRoZSBjb250ZW50cyBvZiB0aGUgcHJldmlvdXMg
bWVtdGFibGUgdG8gYW4gc3N0YWJsZQotPGxpPkRpc2NhcmQgdGhlIG1lbXRhYmxlCi08bGk+RGVs
ZXRlIHRoZSBvbGQgbG9nIGZpbGUgYW5kIHRoZSBvbGQgbWVtdGFibGUKLTxsaT5BZGQgdGhlIG5l
dyBzc3RhYmxlIHRvIHRoZSB5b3VuZyAobGV2ZWwtMCkgbGV2ZWwuCi08L3VsPgotPC91bD4KLQot
PGgxPkNvbXBhY3Rpb25zPC9oMT4KLQotPHA+Ci1XaGVuIHRoZSBzaXplIG9mIGxldmVsIEwgZXhj
ZWVkcyBpdHMgbGltaXQsIHdlIGNvbXBhY3QgaXQgaW4gYQotYmFja2dyb3VuZCB0aHJlYWQuICBU
aGUgY29tcGFjdGlvbiBwaWNrcyBhIGZpbGUgZnJvbSBsZXZlbCBMIGFuZCBhbGwKLW92ZXJsYXBw
aW5nIGZpbGVzIGZyb20gdGhlIG5leHQgbGV2ZWwgTCsxLiAgTm90ZSB0aGF0IGlmIGEgbGV2ZWwt
TAotZmlsZSBvdmVybGFwcyBvbmx5IHBhcnQgb2YgYSBsZXZlbC0oTCsxKSBmaWxlLCB0aGUgZW50
aXJlIGZpbGUgYXQKLWxldmVsLShMKzEpIGlzIHVzZWQgYXMgYW4gaW5wdXQgdG8gdGhlIGNvbXBh
Y3Rpb24gYW5kIHdpbGwgYmUKLWRpc2NhcmRlZCBhZnRlciB0aGUgY29tcGFjdGlvbi4gIEFzaWRl
OiBiZWNhdXNlIGxldmVsLTAgaXMgc3BlY2lhbAotKGZpbGVzIGluIGl0IG1heSBvdmVybGFwIGVh
Y2ggb3RoZXIpLCB3ZSB0cmVhdCBjb21wYWN0aW9ucyBmcm9tCi1sZXZlbC0wIHRvIGxldmVsLTEg
c3BlY2lhbGx5OiBhIGxldmVsLTAgY29tcGFjdGlvbiBtYXkgcGljayBtb3JlIHRoYW4KLW9uZSBs
ZXZlbC0wIGZpbGUgaW4gY2FzZSBzb21lIG9mIHRoZXNlIGZpbGVzIG92ZXJsYXAgZWFjaCBvdGhl
ci4KLQotPHA+Ci1BIGNvbXBhY3Rpb24gbWVyZ2VzIHRoZSBjb250ZW50cyBvZiB0aGUgcGlja2Vk
IGZpbGVzIHRvIHByb2R1Y2UgYQotc2VxdWVuY2Ugb2YgbGV2ZWwtKEwrMSkgZmlsZXMuICBXZSBz
d2l0Y2ggdG8gcHJvZHVjaW5nIGEgbmV3Ci1sZXZlbC0oTCsxKSBmaWxlIGFmdGVyIHRoZSBjdXJy
ZW50IG91dHB1dCBmaWxlIGhhcyByZWFjaGVkIHRoZSB0YXJnZXQKLWZpbGUgc2l6ZSAoMk1CKS4g
IFdlIGFsc28gc3dpdGNoIHRvIGEgbmV3IG91dHB1dCBmaWxlIHdoZW4gdGhlIGtleQotcmFuZ2Ug
b2YgdGhlIGN1cnJlbnQgb3V0cHV0IGZpbGUgaGFzIGdyb3duIGVub3VnaCB0byBvdmVybGFwIG1v
cmUgdGhlbgotdGVuIGxldmVsLShMKzIpIGZpbGVzLiAgVGhpcyBsYXN0IHJ1bGUgZW5zdXJlcyB0
aGF0IGEgbGF0ZXIgY29tcGFjdGlvbgotb2YgYSBsZXZlbC0oTCsxKSBmaWxlIHdpbGwgbm90IHBp
Y2sgdXAgdG9vIG11Y2ggZGF0YSBmcm9tIGxldmVsLShMKzIpLgotCi08cD4KLVRoZSBvbGQgZmls
ZXMgYXJlIGRpc2NhcmRlZCBhbmQgdGhlIG5ldyBmaWxlcyBhcmUgYWRkZWQgdG8gdGhlIHNlcnZp
bmcKLXN0YXRlLgotCi08cD4KLUNvbXBhY3Rpb25zIGZvciBhIHBhcnRpY3VsYXIgbGV2ZWwgcm90
YXRlIHRocm91Z2ggdGhlIGtleSBzcGFjZS4gIEluCi1tb3JlIGRldGFpbCwgZm9yIGVhY2ggbGV2
ZWwgTCwgd2UgcmVtZW1iZXIgdGhlIGVuZGluZyBrZXkgb2YgdGhlIGxhc3QKLWNvbXBhY3Rpb24g
YXQgbGV2ZWwgTC4gIFRoZSBuZXh0IGNvbXBhY3Rpb24gZm9yIGxldmVsIEwgd2lsbCBwaWNrIHRo
ZQotZmlyc3QgZmlsZSB0aGF0IHN0YXJ0cyBhZnRlciB0aGlzIGtleSAod3JhcHBpbmcgYXJvdW5k
IHRvIHRoZQotYmVnaW5uaW5nIG9mIHRoZSBrZXkgc3BhY2UgaWYgdGhlcmUgaXMgbm8gc3VjaCBm
aWxlKS4KLQotPHA+Ci1Db21wYWN0aW9ucyBkcm9wIG92ZXJ3cml0dGVuIHZhbHVlcy4gIFRoZXkg
YWxzbyBkcm9wIGRlbGV0aW9uIG1hcmtlcnMKLWlmIHRoZXJlIGFyZSBubyBoaWdoZXIgbnVtYmVy
ZWQgbGV2ZWxzIHRoYXQgY29udGFpbiBhIGZpbGUgd2hvc2UgcmFuZ2UKLW92ZXJsYXBzIHRoZSBj
dXJyZW50IGtleS4KLQotPGgyPlRpbWluZzwvaDI+Ci0KLUxldmVsLTAgY29tcGFjdGlvbnMgd2ls
bCByZWFkIHVwIHRvIGZvdXIgMU1CIGZpbGVzIGZyb20gbGV2ZWwtMCwgYW5kCi1hdCB3b3JzdCBh
bGwgdGhlIGxldmVsLTEgZmlsZXMgKDEwTUIpLiAgSS5lLiwgd2Ugd2lsbCByZWFkIDE0TUIgYW5k
Ci13cml0ZSAxNE1CLgotCi08cD4KLU90aGVyIHRoYW4gdGhlIHNwZWNpYWwgbGV2ZWwtMCBjb21w
YWN0aW9ucywgd2Ugd2lsbCBwaWNrIG9uZSAyTUIgZmlsZQotZnJvbSBsZXZlbCBMLiAgSW4gdGhl
IHdvcnN0IGNhc2UsIHRoaXMgd2lsbCBvdmVybGFwIH4gMTIgZmlsZXMgZnJvbQotbGV2ZWwgTCsx
ICgxMCBiZWNhdXNlIGxldmVsLShMKzEpIGlzIHRlbiB0aW1lcyB0aGUgc2l6ZSBvZiBsZXZlbC1M
LAotYW5kIGFub3RoZXIgdHdvIGF0IHRoZSBib3VuZGFyaWVzIHNpbmNlIHRoZSBmaWxlIHJhbmdl
cyBhdCBsZXZlbC1MCi13aWxsIHVzdWFsbHkgbm90IGJlIGFsaWduZWQgd2l0aCB0aGUgZmlsZSBy
YW5nZXMgYXQgbGV2ZWwtTCsxKS4gIFRoZQotY29tcGFjdGlvbiB3aWxsIHRoZXJlZm9yZSByZWFk
IDI2TUIgYW5kIHdyaXRlIDI2TUIuICBBc3N1bWluZyBhIGRpc2sKLUlPIHJhdGUgb2YgMTAwTUIv
cyAoYmFsbHBhcmsgcmFuZ2UgZm9yIG1vZGVybiBkcml2ZXMpLCB0aGUgd29yc3QKLWNvbXBhY3Rp
b24gY29zdCB3aWxsIGJlIGFwcHJveGltYXRlbHkgMC41IHNlY29uZC4KLQotPHA+Ci1JZiB3ZSB0
aHJvdHRsZSB0aGUgYmFja2dyb3VuZCB3cml0aW5nIHRvIHNvbWV0aGluZyBzbWFsbCwgc2F5IDEw
JSBvZgotdGhlIGZ1bGwgMTAwTUIvcyBzcGVlZCwgYSBjb21wYWN0aW9uIG1heSB0YWtlIHVwIHRv
IDUgc2Vjb25kcy4gIElmIHRoZQotdXNlciBpcyB3cml0aW5nIGF0IDEwTUIvcywgd2UgbWlnaHQg
YnVpbGQgdXAgbG90cyBvZiBsZXZlbC0wIGZpbGVzCi0ofjUwIHRvIGhvbGQgdGhlIDUqMTBNQiku
ICBUaGlzIG1heSBzaWduZmljYW50bHkgaW5jcmVhc2UgdGhlIGNvc3Qgb2YKLXJlYWRzIGR1ZSB0
byB0aGUgb3ZlcmhlYWQgb2YgbWVyZ2luZyBtb3JlIGZpbGVzIHRvZ2V0aGVyIG9uIGV2ZXJ5Ci1y
ZWFkLgotCi08cD4KLVNvbHV0aW9uIDE6IFRvIHJlZHVjZSB0aGlzIHByb2JsZW0sIHdlIG1pZ2h0
IHdhbnQgdG8gaW5jcmVhc2UgdGhlIGxvZwotc3dpdGNoaW5nIHRocmVzaG9sZCB3aGVuIHRoZSBu
dW1iZXIgb2YgbGV2ZWwtMCBmaWxlcyBpcyBsYXJnZS4gIFRob3VnaAotdGhlIGRvd25zaWRlIGlz
IHRoYXQgdGhlIGxhcmdlciB0aGlzIHRocmVzaG9sZCwgdGhlIG1vcmUgbWVtb3J5IHdlIHdpbGwK
LW5lZWQgdG8gaG9sZCB0aGUgY29ycmVzcG9uZGluZyBtZW10YWJsZS4KLQotPHA+Ci1Tb2x1dGlv
biAyOiBXZSBtaWdodCB3YW50IHRvIGRlY3JlYXNlIHdyaXRlIHJhdGUgYXJ0aWZpY2lhbGx5IHdo
ZW4gdGhlCi1udW1iZXIgb2YgbGV2ZWwtMCBmaWxlcyBnb2VzIHVwLgotCi08cD4KLVNvbHV0aW9u
IDM6IFdlIHdvcmsgb24gcmVkdWNpbmcgdGhlIGNvc3Qgb2YgdmVyeSB3aWRlIG1lcmdlcy4KLVBl
cmhhcHMgbW9zdCBvZiB0aGUgbGV2ZWwtMCBmaWxlcyB3aWxsIGhhdmUgdGhlaXIgYmxvY2tzIHNp
dHRpbmcKLXVuY29tcHJlc3NlZCBpbiB0aGUgY2FjaGUgYW5kIHdlIHdpbGwgb25seSBuZWVkIHRv
IHdvcnJ5IGFib3V0IHRoZQotTyhOKSBjb21wbGV4aXR5IGluIHRoZSBtZXJnaW5nIGl0ZXJhdG9y
LgotCi08aDI+TnVtYmVyIG9mIGZpbGVzPC9oMj4KLQotSW5zdGVhZCBvZiBhbHdheXMgbWFraW5n
IDJNQiBmaWxlcywgd2UgY291bGQgbWFrZSBsYXJnZXIgZmlsZXMgZm9yCi1sYXJnZXIgbGV2ZWxz
IHRvIHJlZHVjZSB0aGUgdG90YWwgZmlsZSBjb3VudCwgdGhvdWdoIGF0IHRoZSBleHBlbnNlIG9m
Ci1tb3JlIGJ1cnN0eSBjb21wYWN0aW9ucy4gIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIHNoYXJk
IHRoZSBzZXQgb2YKLWZpbGVzIGludG8gbXVsdGlwbGUgZGlyZWN0b3JpZXMuCi0KLTxwPgotQW4g
ZXhwZXJpbWVudCBvbiBhbiA8Y29kZT5leHQzPC9jb2RlPiBmaWxlc3lzdGVtIG9uIEZlYiAwNCwg
MjAxMSBzaG93cwotdGhlIGZvbGxvd2luZyB0aW1pbmdzIHRvIGRvIDEwMEsgZmlsZSBvcGVucyBp
biBkaXJlY3RvcmllcyB3aXRoCi12YXJ5aW5nIG51bWJlciBvZiBmaWxlczoKLTx0YWJsZSBjbGFz
cz0iZGF0YXRhYmxlIj4KLTx0cj48dGg+RmlsZXMgaW4gZGlyZWN0b3J5PC90aD48dGg+TWljcm9z
ZWNvbmRzIHRvIG9wZW4gYSBmaWxlPC90aD48L3RyPgotPHRyPjx0ZD4xMDAwPC90ZD48dGQ+OTwv
dGQ+Ci08dHI+PHRkPjEwMDAwPC90ZD48dGQ+MTA8L3RkPgotPHRyPjx0ZD4xMDAwMDA8L3RkPjx0
ZD4xNjwvdGQ+Ci08L3RhYmxlPgotU28gbWF5YmUgZXZlbiB0aGUgc2hhcmRpbmcgaXMgbm90IG5l
Y2Vzc2FyeSBvbiBtb2Rlcm4gZmlsZXN5c3RlbXM/Ci0KLTxoMT5SZWNvdmVyeTwvaDE+Ci0KLTx1
bD4KLTxsaT4gUmVhZCBDVVJSRU5UIHRvIGZpbmQgbmFtZSBvZiB0aGUgbGF0ZXN0IGNvbW1pdHRl
ZCBNQU5JRkVTVAotPGxpPiBSZWFkIHRoZSBuYW1lZCBNQU5JRkVTVCBmaWxlCi08bGk+IENsZWFu
IHVwIHN0YWxlIGZpbGVzCi08bGk+IFdlIGNvdWxkIG9wZW4gYWxsIHNzdGFibGVzIGhlcmUsIGJ1
dCBpdCBpcyBwcm9iYWJseSBiZXR0ZXIgdG8gYmUgbGF6eS4uLgotPGxpPiBDb252ZXJ0IGxvZyBj
aHVuayB0byBhIG5ldyBsZXZlbC0wIHNzdGFibGUKLTxsaT4gU3RhcnQgZGlyZWN0aW5nIG5ldyB3
cml0ZXMgdG8gYSBuZXcgbG9nIGZpbGUgd2l0aCByZWNvdmVyZWQgc2VxdWVuY2UjCi08L3VsPgot
Ci08aDE+R2FyYmFnZSBjb2xsZWN0aW9uIG9mIGZpbGVzPC9oMT4KLQotPGNvZGU+RGVsZXRlT2Jz
b2xldGVGaWxlcygpPC9jb2RlPiBpcyBjYWxsZWQgYXQgdGhlIGVuZCBvZiBldmVyeQotY29tcGFj
dGlvbiBhbmQgYXQgdGhlIGVuZCBvZiByZWNvdmVyeS4gIEl0IGZpbmRzIHRoZSBuYW1lcyBvZiBh
bGwKLWZpbGVzIGluIHRoZSBkYXRhYmFzZS4gIEl0IGRlbGV0ZXMgYWxsIGxvZyBmaWxlcyB0aGF0
IGFyZSBub3QgdGhlCi1jdXJyZW50IGxvZyBmaWxlLiAgSXQgZGVsZXRlcyBhbGwgdGFibGUgZmls
ZXMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZWQKLWZyb20gc29tZSBsZXZlbCBhbmQgYXJlIG5vdCB0
aGUgb3V0cHV0IG9mIGFuIGFjdGl2ZSBjb21wYWN0aW9uLgotCi08L2JvZHk+Ci08L2h0bWw+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RvYy9pbmRleC5odG1sIGIvU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kb2MvaW5kZXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggM2VkMGVkOS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZl
bGRiL2RvYy9pbmRleC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTQ5ICswLDAgQEAKLTwhRE9D
VFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0i
dGV4dC9jc3MiIGhyZWY9ImRvYy5jc3MiIC8+Ci08dGl0bGU+TGV2ZWxkYjwvdGl0bGU+Ci08L2hl
YWQ+Ci0KLTxib2R5PgotPGgxPkxldmVsZGI8L2gxPgotPGFkZHJlc3M+SmVmZiBEZWFuLCBTYW5q
YXkgR2hlbWF3YXQ8L2FkZHJlc3M+Ci08cD4KLVRoZSA8Y29kZT5sZXZlbGRiPC9jb2RlPiBsaWJy
YXJ5IHByb3ZpZGVzIGEgcGVyc2lzdGVudCBrZXkgdmFsdWUgc3RvcmUuICBLZXlzIGFuZAotdmFs
dWVzIGFyZSBhcmJpdHJhcnkgYnl0ZSBhcnJheXMuICBUaGUga2V5cyBhcmUgb3JkZXJlZCB3aXRo
aW4gdGhlIGtleQotdmFsdWUgc3RvcmUgYWNjb3JkaW5nIHRvIGEgdXNlci1zcGVjaWZpZWQgY29t
cGFyYXRvciBmdW5jdGlvbi4KLQotPHA+Ci08aDE+T3BlbmluZyBBIERhdGFiYXNlPC9oMT4KLTxw
PgotQSA8Y29kZT5sZXZlbGRiPC9jb2RlPiBkYXRhYmFzZSBoYXMgYSBuYW1lIHdoaWNoIGNvcnJl
c3BvbmRzIHRvIGEgZmlsZSBzeXN0ZW0KLWRpcmVjdG9yeS4gIEFsbCBvZiB0aGUgY29udGVudHMg
b2YgZGF0YWJhc2UgYXJlIHN0b3JlZCBpbiB0aGlzCi1kaXJlY3RvcnkuICBUaGUgZm9sbG93aW5n
IGV4YW1wbGUgc2hvd3MgaG93IHRvIG9wZW4gYSBkYXRhYmFzZSwKLWNyZWF0aW5nIGl0IGlmIG5l
Y2Vzc2FyeToKLTxwPgotPHByZT4KLSAgI2luY2x1ZGUgJmx0O2Fzc2VydCZndDsKLSAgI2luY2x1
ZGUgImxldmVsZGIvZGIuaCIKLQotICBsZXZlbGRiOjpEQiogZGI7Ci0gIGxldmVsZGI6Ok9wdGlv
bnMgb3B0aW9uczsKLSAgb3B0aW9ucy5jcmVhdGVfaWZfbWlzc2luZyA9IHRydWU7Ci0gIGxldmVs
ZGI6OlN0YXR1cyBzdGF0dXMgPSBsZXZlbGRiOjpEQjo6T3BlbihvcHRpb25zLCAiL3RtcC90ZXN0
ZGIiLCAmYW1wO2RiKTsKLSAgYXNzZXJ0KHN0YXR1cy5vaygpKTsKLSAgLi4uCi08L3ByZT4KLUlm
IHlvdSB3YW50IHRvIHJhaXNlIGFuIGVycm9yIGlmIHRoZSBkYXRhYmFzZSBhbHJlYWR5IGV4aXN0
cywgYWRkCi10aGUgZm9sbG93aW5nIGxpbmUgYmVmb3JlIHRoZSA8Y29kZT5sZXZlbGRiOjpEQjo6
T3BlbjwvY29kZT4gY2FsbDoKLTxwcmU+Ci0gIG9wdGlvbnMuZXJyb3JfaWZfZXhpc3RzID0gdHJ1
ZTsKLTwvcHJlPgotPGgxPlN0YXR1czwvaDE+Ci08cD4KLVlvdSBtYXkgaGF2ZSBub3RpY2VkIHRo
ZSA8Y29kZT5sZXZlbGRiOjpTdGF0dXM8L2NvZGU+IHR5cGUgYWJvdmUuICBWYWx1ZXMgb2YgdGhp
cwotdHlwZSBhcmUgcmV0dXJuZWQgYnkgbW9zdCBmdW5jdGlvbnMgaW4gPGNvZGU+bGV2ZWxkYjwv
Y29kZT4gdGhhdCBtYXkgZW5jb3VudGVyIGFuCi1lcnJvci4gIFlvdSBjYW4gY2hlY2sgaWYgc3Vj
aCBhIHJlc3VsdCBpcyBvaywgYW5kIGFsc28gcHJpbnQgYW4KLWFzc29jaWF0ZWQgZXJyb3IgbWVz
c2FnZToKLTxwPgotPHByZT4KLSAgIGxldmVsZGI6OlN0YXR1cyBzID0gLi4uOwotICAgaWYgKCFz
Lm9rKCkpIGNlcnIgJmx0OyZsdDsgcy5Ub1N0cmluZygpICZsdDsmbHQ7IGVuZGw7Ci08L3ByZT4K
LTxoMT5DbG9zaW5nIEEgRGF0YWJhc2U8L2gxPgotPHA+Ci1XaGVuIHlvdSBhcmUgZG9uZSB3aXRo
IGEgZGF0YWJhc2UsIGp1c3QgZGVsZXRlIHRoZSBkYXRhYmFzZSBvYmplY3QuCi1FeGFtcGxlOgot
PHA+Ci08cHJlPgotICAuLi4gb3BlbiB0aGUgZGIgYXMgZGVzY3JpYmVkIGFib3ZlIC4uLgotICAu
Li4gZG8gc29tZXRoaW5nIHdpdGggZGIgLi4uCi0gIGRlbGV0ZSBkYjsKLTwvcHJlPgotPGgxPlJl
YWRzIEFuZCBXcml0ZXM8L2gxPgotPHA+Ci1UaGUgZGF0YWJhc2UgcHJvdmlkZXMgPGNvZGU+UHV0
PC9jb2RlPiwgPGNvZGU+RGVsZXRlPC9jb2RlPiwgYW5kIDxjb2RlPkdldDwvY29kZT4gbWV0aG9k
cyB0bwotbW9kaWZ5L3F1ZXJ5IHRoZSBkYXRhYmFzZS4gIEZvciBleGFtcGxlLCB0aGUgZm9sbG93
aW5nIGNvZGUKLW1vdmVzIHRoZSB2YWx1ZSBzdG9yZWQgdW5kZXIga2V5MSB0byBrZXkyLgotPHBy
ZT4KLSAgc3RkOjpzdHJpbmcgdmFsdWU7Ci0gIGxldmVsZGI6OlN0YXR1cyBzID0gZGItJmd0O0dl
dChsZXZlbGRiOjpSZWFkT3B0aW9ucygpLCBrZXkxLCAmYW1wO3ZhbHVlKTsKLSAgaWYgKHMub2so
KSkgcyA9IGRiLSZndDtQdXQobGV2ZWxkYjo6V3JpdGVPcHRpb25zKCksIGtleTIsIHZhbHVlKTsK
LSAgaWYgKHMub2soKSkgcyA9IGRiLSZndDtEZWxldGUobGV2ZWxkYjo6V3JpdGVPcHRpb25zKCks
IGtleTEpOwotPC9wcmU+Ci0KLTxoMT5BdG9taWMgVXBkYXRlczwvaDE+Ci08cD4KLU5vdGUgdGhh
dCBpZiB0aGUgcHJvY2VzcyBkaWVzIGFmdGVyIHRoZSBQdXQgb2Yga2V5MiBidXQgYmVmb3JlIHRo
ZQotZGVsZXRlIG9mIGtleTEsIHRoZSBzYW1lIHZhbHVlIG1heSBiZSBsZWZ0IHN0b3JlZCB1bmRl
ciBtdWx0aXBsZSBrZXlzLgotU3VjaCBwcm9ibGVtcyBjYW4gYmUgYXZvaWRlZCBieSB1c2luZyB0
aGUgPGNvZGU+V3JpdGVCYXRjaDwvY29kZT4gY2xhc3MgdG8KLWF0b21pY2FsbHkgYXBwbHkgYSBz
ZXQgb2YgdXBkYXRlczoKLTxwPgotPHByZT4KLSAgI2luY2x1ZGUgImxldmVsZGIvd3JpdGVfYmF0
Y2guaCIKLSAgLi4uCi0gIHN0ZDo6c3RyaW5nIHZhbHVlOwotICBsZXZlbGRiOjpTdGF0dXMgcyA9
IGRiLSZndDtHZXQobGV2ZWxkYjo6UmVhZE9wdGlvbnMoKSwga2V5MSwgJmFtcDt2YWx1ZSk7Ci0g
IGlmIChzLm9rKCkpIHsKLSAgICBsZXZlbGRiOjpXcml0ZUJhdGNoIGJhdGNoOwotICAgIGJhdGNo
LkRlbGV0ZShrZXkxKTsKLSAgICBiYXRjaC5QdXQoa2V5MiwgdmFsdWUpOwotICAgIHMgPSBkYi0m
Z3Q7V3JpdGUobGV2ZWxkYjo6V3JpdGVPcHRpb25zKCksICZhbXA7YmF0Y2gpOwotICB9Ci08L3By
ZT4KLVRoZSA8Y29kZT5Xcml0ZUJhdGNoPC9jb2RlPiBob2xkcyBhIHNlcXVlbmNlIG9mIGVkaXRz
IHRvIGJlIG1hZGUgdG8gdGhlIGRhdGFiYXNlLAotYW5kIHRoZXNlIGVkaXRzIHdpdGhpbiB0aGUg
YmF0Y2ggYXJlIGFwcGxpZWQgaW4gb3JkZXIuICBOb3RlIHRoYXQgd2UKLWNhbGxlZCA8Y29kZT5E
ZWxldGU8L2NvZGU+IGJlZm9yZSA8Y29kZT5QdXQ8L2NvZGU+IHNvIHRoYXQgaWYgPGNvZGU+a2V5
MTwvY29kZT4gaXMgaWRlbnRpY2FsIHRvIDxjb2RlPmtleTI8L2NvZGU+LAotd2UgZG8gbm90IGVu
ZCB1cCBlcnJvbmVvdXNseSBkcm9wcGluZyB0aGUgdmFsdWUgZW50aXJlbHkuCi08cD4KLUFwYXJ0
IGZyb20gaXRzIGF0b21pY2l0eSBiZW5lZml0cywgPGNvZGU+V3JpdGVCYXRjaDwvY29kZT4gbWF5
IGFsc28gYmUgdXNlZCB0bwotc3BlZWQgdXAgYnVsayB1cGRhdGVzIGJ5IHBsYWNpbmcgbG90cyBv
ZiBpbmRpdmlkdWFsIG11dGF0aW9ucyBpbnRvIHRoZQotc2FtZSBiYXRjaC4KLQotPGgxPlN5bmNo
cm9ub3VzIFdyaXRlczwvaDE+Ci1CeSBkZWZhdWx0LCBlYWNoIHdyaXRlIHRvIDxjb2RlPmxldmVs
ZGI8L2NvZGU+IGlzIGFzeW5jaHJvbm91czogaXQKLXJldHVybnMgYWZ0ZXIgcHVzaGluZyB0aGUg
d3JpdGUgZnJvbSB0aGUgcHJvY2VzcyBpbnRvIHRoZSBvcGVyYXRpbmcKLXN5c3RlbS4gIFRoZSB0
cmFuc2ZlciBmcm9tIG9wZXJhdGluZyBzeXN0ZW0gbWVtb3J5IHRvIHRoZSB1bmRlcmx5aW5nCi1w
ZXJzaXN0ZW50IHN0b3JhZ2UgaGFwcGVucyBhc3luY2hyb25vdXNseS4gIFRoZSA8Y29kZT5zeW5j
PC9jb2RlPiBmbGFnCi1jYW4gYmUgdHVybmVkIG9uIGZvciBhIHBhcnRpY3VsYXIgd3JpdGUgdG8g
bWFrZSB0aGUgd3JpdGUgb3BlcmF0aW9uCi1ub3QgcmV0dXJuIHVudGlsIHRoZSBkYXRhIGJlaW5n
IHdyaXR0ZW4gaGFzIGJlZW4gcHVzaGVkIGFsbCB0aGUgd2F5IHRvCi1wZXJzaXN0ZW50IHN0b3Jh
Z2UuICAoT24gUG9zaXggc3lzdGVtcywgdGhpcyBpcyBpbXBsZW1lbnRlZCBieSBjYWxsaW5nCi1l
aXRoZXIgPGNvZGU+ZnN5bmMoLi4uKTwvY29kZT4gb3IgPGNvZGU+ZmRhdGFzeW5jKC4uLik8L2Nv
ZGU+IG9yCi08Y29kZT5tc3luYyguLi4sIE1TX1NZTkMpPC9jb2RlPiBiZWZvcmUgdGhlIHdyaXRl
IG9wZXJhdGlvbiByZXR1cm5zLikKLTxwcmU+Ci0gIGxldmVsZGI6OldyaXRlT3B0aW9ucyB3cml0
ZV9vcHRpb25zOwotICB3cml0ZV9vcHRpb25zLnN5bmMgPSB0cnVlOwotICBkYi0mZ3Q7UHV0KHdy
aXRlX29wdGlvbnMsIC4uLik7Ci08L3ByZT4KLUFzeW5jaHJvbm91cyB3cml0ZXMgYXJlIG9mdGVu
IG1vcmUgdGhhbiBhIHRob3VzYW5kIHRpbWVzIGFzIGZhc3QgYXMKLXN5bmNocm9ub3VzIHdyaXRl
cy4gIFRoZSBkb3duc2lkZSBvZiBhc3luY2hyb25vdXMgd3JpdGVzIGlzIHRoYXQgYQotY3Jhc2gg
b2YgdGhlIG1hY2hpbmUgbWF5IGNhdXNlIHRoZSBsYXN0IGZldyB1cGRhdGVzIHRvIGJlIGxvc3Qu
ICBOb3RlCi10aGF0IGEgY3Jhc2ggb2YganVzdCB0aGUgd3JpdGluZyBwcm9jZXNzIChpLmUuLCBu
b3QgYSByZWJvb3QpIHdpbGwgbm90Ci1jYXVzZSBhbnkgbG9zcyBzaW5jZSBldmVuIHdoZW4gPGNv
ZGU+c3luYzwvY29kZT4gaXMgZmFsc2UsIGFuIHVwZGF0ZQotaXMgcHVzaGVkIGZyb20gdGhlIHBy
b2Nlc3MgbWVtb3J5IGludG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0gYmVmb3JlIGl0Ci1pcyBjb25z
aWRlcmVkIGRvbmUuCi0KLTxwPgotQXN5bmNocm9ub3VzIHdyaXRlcyBjYW4gb2Z0ZW4gYmUgdXNl
ZCBzYWZlbHkuICBGb3IgZXhhbXBsZSwgd2hlbgotbG9hZGluZyBhIGxhcmdlIGFtb3VudCBvZiBk
YXRhIGludG8gdGhlIGRhdGFiYXNlIHlvdSBjYW4gaGFuZGxlIGxvc3QKLXVwZGF0ZXMgYnkgcmVz
dGFydGluZyB0aGUgYnVsayBsb2FkIGFmdGVyIGEgY3Jhc2guICBBIGh5YnJpZCBzY2hlbWUgaXMK
LWFsc28gcG9zc2libGUgd2hlcmUgZXZlcnkgTnRoIHdyaXRlIGlzIHN5bmNocm9ub3VzLCBhbmQg
aW4gdGhlIGV2ZW50Ci1vZiBhIGNyYXNoLCB0aGUgYnVsayBsb2FkIGlzIHJlc3RhcnRlZCBqdXN0
IGFmdGVyIHRoZSBsYXN0IHN5bmNocm9ub3VzCi13cml0ZSBmaW5pc2hlZCBieSB0aGUgcHJldmlv
dXMgcnVuLiAgKFRoZSBzeW5jaHJvbm91cyB3cml0ZSBjYW4gdXBkYXRlCi1hIG1hcmtlciB0aGF0
IGRlc2NyaWJlcyB3aGVyZSB0byByZXN0YXJ0IG9uIGEgY3Jhc2guKQotCi08cD4KLTxjb2RlPldy
aXRlQmF0Y2g8L2NvZGU+IHByb3ZpZGVzIGFuIGFsdGVybmF0aXZlIHRvIGFzeW5jaHJvbm91cyB3
cml0ZXMuCi1NdWx0aXBsZSB1cGRhdGVzIG1heSBiZSBwbGFjZWQgaW4gdGhlIHNhbWUgPGNvZGU+
V3JpdGVCYXRjaDwvY29kZT4gYW5kCi1hcHBsaWVkIHRvZ2V0aGVyIHVzaW5nIGEgc3luY2hyb25v
dXMgd3JpdGUgKGkuZS4sCi08Y29kZT53cml0ZV9vcHRpb25zLnN5bmM8L2NvZGU+IGlzIHNldCB0
byB0cnVlKS4gIFRoZSBleHRyYSBjb3N0IG9mCi10aGUgc3luY2hyb25vdXMgd3JpdGUgd2lsbCBi
ZSBhbW9ydGl6ZWQgYWNyb3NzIGFsbCBvZiB0aGUgd3JpdGVzIGluCi10aGUgYmF0Y2guCi0KLTxw
PgotPGgxPkNvbmN1cnJlbmN5PC9oMT4KLTxwPgotQSBkYXRhYmFzZSBtYXkgb25seSBiZSBvcGVu
ZWQgYnkgb25lIHByb2Nlc3MgYXQgYSB0aW1lLgotVGhlIDxjb2RlPmxldmVsZGI8L2NvZGU+IGlt
cGxlbWVudGF0aW9uIGFjcXVpcmVzIGEgbG9jayBmcm9tIHRoZQotb3BlcmF0aW5nIHN5c3RlbSB0
byBwcmV2ZW50IG1pc3VzZS4gIFdpdGhpbiBhIHNpbmdsZSBwcm9jZXNzLCB0aGUKLXNhbWUgPGNv
ZGU+bGV2ZWxkYjo6REI8L2NvZGU+IG9iamVjdCBtYXkgYmUgc2FmZWx5IHNoYXJlZCBieSBtdWx0
aXBsZQotY29uY3VycmVudCB0aHJlYWRzLiAgSS5lLiwgZGlmZmVyZW50IHRocmVhZHMgbWF5IHdy
aXRlIGludG8gb3IgZmV0Y2gKLWl0ZXJhdG9ycyBvciBjYWxsIDxjb2RlPkdldDwvY29kZT4gb24g
dGhlIHNhbWUgZGF0YWJhc2Ugd2l0aG91dCBhbnkKLWV4dGVybmFsIHN5bmNocm9uaXphdGlvbiAo
dGhlIGxldmVsZGIgaW1wbGVtZW50YXRpb24gd2lsbAotYXV0b21hdGljYWxseSBkbyB0aGUgcmVx
dWlyZWQgc3luY2hyb25pemF0aW9uKS4gIEhvd2V2ZXIgb3RoZXIgb2JqZWN0cwotKGxpa2UgSXRl
cmF0b3IgYW5kIFdyaXRlQmF0Y2gpIG1heSByZXF1aXJlIGV4dGVybmFsIHN5bmNocm9uaXphdGlv
bi4KLUlmIHR3byB0aHJlYWRzIHNoYXJlIHN1Y2ggYW4gb2JqZWN0LCB0aGV5IG11c3QgcHJvdGVj
dCBhY2Nlc3MgdG8gaXQKLXVzaW5nIHRoZWlyIG93biBsb2NraW5nIHByb3RvY29sLiAgTW9yZSBk
ZXRhaWxzIGFyZSBhdmFpbGFibGUgaW4KLXRoZSBwdWJsaWMgaGVhZGVyIGZpbGVzLgotPHA+Ci08
aDE+SXRlcmF0aW9uPC9oMT4KLTxwPgotVGhlIGZvbGxvd2luZyBleGFtcGxlIGRlbW9uc3RyYXRl
cyBob3cgdG8gcHJpbnQgYWxsIGtleSx2YWx1ZSBwYWlycwotaW4gYSBkYXRhYmFzZS4KLTxwPgot
PHByZT4KLSAgbGV2ZWxkYjo6SXRlcmF0b3IqIGl0ID0gZGItJmd0O05ld0l0ZXJhdG9yKGxldmVs
ZGI6OlJlYWRPcHRpb25zKCkpOwotICBmb3IgKGl0LSZndDtTZWVrVG9GaXJzdCgpOyBpdC0mZ3Q7
VmFsaWQoKTsgaXQtJmd0O05leHQoKSkgewotICAgIGNvdXQgJmx0OyZsdDsgaXQtJmd0O2tleSgp
LlRvU3RyaW5nKCkgJmx0OyZsdDsgIjogIiAgJmx0OyZsdDsgaXQtJmd0O3ZhbHVlKCkuVG9TdHJp
bmcoKSAmbHQ7Jmx0OyBlbmRsOwotICB9Ci0gIGFzc2VydChpdC0mZ3Q7c3RhdHVzKCkub2soKSk7
ICAvLyBDaGVjayBmb3IgYW55IGVycm9ycyBmb3VuZCBkdXJpbmcgdGhlIHNjYW4KLSAgZGVsZXRl
IGl0OwotPC9wcmU+Ci1UaGUgZm9sbG93aW5nIHZhcmlhdGlvbiBzaG93cyBob3cgdG8gcHJvY2Vz
cyBqdXN0IHRoZSBrZXlzIGluIHRoZQotcmFuZ2UgPGNvZGU+W3N0YXJ0LGxpbWl0KTwvY29kZT46
Ci08cD4KLTxwcmU+Ci0gIGZvciAoaXQtJmd0O1NlZWsoc3RhcnQpOwotICAgICAgIGl0LSZndDtW
YWxpZCgpICZhbXA7JmFtcDsgaXQtJmd0O2tleSgpLlRvU3RyaW5nKCkgJmx0OyBsaW1pdDsKLSAg
ICAgICBpdC0mZ3Q7TmV4dCgpKSB7Ci0gICAgLi4uCi0gIH0KLTwvcHJlPgotWW91IGNhbiBhbHNv
IHByb2Nlc3MgZW50cmllcyBpbiByZXZlcnNlIG9yZGVyLiAgKENhdmVhdDogcmV2ZXJzZQotaXRl
cmF0aW9uIG1heSBiZSBzb21ld2hhdCBzbG93ZXIgdGhhbiBmb3J3YXJkIGl0ZXJhdGlvbi4pCi08
cD4KLTxwcmU+Ci0gIGZvciAoaXQtJmd0O1NlZWtUb0xhc3QoKTsgaXQtJmd0O1ZhbGlkKCk7IGl0
LSZndDtQcmV2KCkpIHsKLSAgICAuLi4KLSAgfQotPC9wcmU+Ci08aDE+U25hcHNob3RzPC9oMT4K
LTxwPgotU25hcHNob3RzIHByb3ZpZGUgY29uc2lzdGVudCByZWFkLW9ubHkgdmlld3Mgb3ZlciB0
aGUgZW50aXJlIHN0YXRlIG9mCi10aGUga2V5LXZhbHVlIHN0b3JlLiAgPGNvZGU+UmVhZE9wdGlv
bnM6OnNuYXBzaG90PC9jb2RlPiBtYXkgYmUgbm9uLU5VTEwgdG8gaW5kaWNhdGUKLXRoYXQgYSBy
ZWFkIHNob3VsZCBvcGVyYXRlIG9uIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBEQiBzdGF0
ZS4KLUlmIDxjb2RlPlJlYWRPcHRpb25zOjpzbmFwc2hvdDwvY29kZT4gaXMgTlVMTCwgdGhlIHJl
YWQgd2lsbCBvcGVyYXRlIG9uIGFuCi1pbXBsaWNpdCBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBz
dGF0ZS4KLTxwPgotU25hcHNob3RzIGFyZSBjcmVhdGVkIGJ5IHRoZSBEQjo6R2V0U25hcHNob3Qo
KSBtZXRob2Q6Ci08cD4KLTxwcmU+Ci0gIGxldmVsZGI6OlJlYWRPcHRpb25zIG9wdGlvbnM7Ci0g
IG9wdGlvbnMuc25hcHNob3QgPSBkYi0mZ3Q7R2V0U25hcHNob3QoKTsKLSAgLi4uIGFwcGx5IHNv
bWUgdXBkYXRlcyB0byBkYiAuLi4KLSAgbGV2ZWxkYjo6SXRlcmF0b3IqIGl0ZXIgPSBkYi0mZ3Q7
TmV3SXRlcmF0b3Iob3B0aW9ucyk7Ci0gIC4uLiByZWFkIHVzaW5nIGl0ZXIgdG8gdmlldyB0aGUg
c3RhdGUgd2hlbiB0aGUgc25hcHNob3Qgd2FzIGNyZWF0ZWQgLi4uCi0gIGRlbGV0ZSBpdGVyOwot
ICBkYi0mZ3Q7UmVsZWFzZVNuYXBzaG90KG9wdGlvbnMuc25hcHNob3QpOwotPC9wcmU+Ci1Ob3Rl
IHRoYXQgd2hlbiBhIHNuYXBzaG90IGlzIG5vIGxvbmdlciBuZWVkZWQsIGl0IHNob3VsZCBiZSBy
ZWxlYXNlZAotdXNpbmcgdGhlIERCOjpSZWxlYXNlU25hcHNob3QgaW50ZXJmYWNlLiAgVGhpcyBh
bGxvd3MgdGhlCi1pbXBsZW1lbnRhdGlvbiB0byBnZXQgcmlkIG9mIHN0YXRlIHRoYXQgd2FzIGJl
aW5nIG1haW50YWluZWQganVzdCB0bwotc3VwcG9ydCByZWFkaW5nIGFzIG9mIHRoYXQgc25hcHNo
b3QuCi08aDE+U2xpY2U8L2gxPgotPHA+Ci1UaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSA8Y29kZT5p
dC0+a2V5KCk8L2NvZGU+IGFuZCA8Y29kZT5pdC0+dmFsdWUoKTwvY29kZT4gY2FsbHMgYWJvdmUK
LWFyZSBpbnN0YW5jZXMgb2YgdGhlIDxjb2RlPmxldmVsZGI6OlNsaWNlPC9jb2RlPiB0eXBlLiAg
PGNvZGU+U2xpY2U8L2NvZGU+IGlzIGEgc2ltcGxlCi1zdHJ1Y3R1cmUgdGhhdCBjb250YWlucyBh
IGxlbmd0aCBhbmQgYSBwb2ludGVyIHRvIGFuIGV4dGVybmFsIGJ5dGUKLWFycmF5LiAgUmV0dXJu
aW5nIGEgPGNvZGU+U2xpY2U8L2NvZGU+IGlzIGEgY2hlYXBlciBhbHRlcm5hdGl2ZSB0byByZXR1
cm5pbmcgYQotPGNvZGU+c3RkOjpzdHJpbmc8L2NvZGU+IHNpbmNlIHdlIGRvIG5vdCBuZWVkIHRv
IGNvcHkgcG90ZW50aWFsbHkgbGFyZ2Uga2V5cyBhbmQKLXZhbHVlcy4gIEluIGFkZGl0aW9uLCA8
Y29kZT5sZXZlbGRiPC9jb2RlPiBtZXRob2RzIGRvIG5vdCByZXR1cm4gbnVsbC10ZXJtaW5hdGVk
Ci1DLXN0eWxlIHN0cmluZ3Mgc2luY2UgPGNvZGU+bGV2ZWxkYjwvY29kZT4ga2V5cyBhbmQgdmFs
dWVzIGFyZSBhbGxvd2VkIHRvCi1jb250YWluICdcMCcgYnl0ZXMuCi08cD4KLUMrKyBzdHJpbmdz
IGFuZCBudWxsLXRlcm1pbmF0ZWQgQy1zdHlsZSBzdHJpbmdzIGNhbiBiZSBlYXNpbHkgY29udmVy
dGVkCi10byBhIFNsaWNlOgotPHA+Ci08cHJlPgotICAgbGV2ZWxkYjo6U2xpY2UgczEgPSAiaGVs
bG8iOwotCi0gICBzdGQ6OnN0cmluZyBzdHIoIndvcmxkIik7Ci0gICBsZXZlbGRiOjpTbGljZSBz
MiA9IHN0cjsKLTwvcHJlPgotQSBTbGljZSBjYW4gYmUgZWFzaWx5IGNvbnZlcnRlZCBiYWNrIHRv
IGEgQysrIHN0cmluZzoKLTxwcmU+Ci0gICBzdGQ6OnN0cmluZyBzdHIgPSBzMS5Ub1N0cmluZygp
OwotICAgYXNzZXJ0KHN0ciA9PSBzdGQ6OnN0cmluZygiaGVsbG8iKSk7Ci08L3ByZT4KLUJlIGNh
cmVmdWwgd2hlbiB1c2luZyBTbGljZXMgc2luY2UgaXQgaXMgdXAgdG8gdGhlIGNhbGxlciB0byBl
bnN1cmUgdGhhdAotdGhlIGV4dGVybmFsIGJ5dGUgYXJyYXkgaW50byB3aGljaCB0aGUgU2xpY2Ug
cG9pbnRzIHJlbWFpbnMgbGl2ZSB3aGlsZQotdGhlIFNsaWNlIGlzIGluIHVzZS4gIEZvciBleGFt
cGxlLCB0aGUgZm9sbG93aW5nIGlzIGJ1Z2d5OgotPHA+Ci08cHJlPgotICAgbGV2ZWxkYjo6U2xp
Y2Ugc2xpY2U7Ci0gICBpZiAoLi4uKSB7Ci0gICAgIHN0ZDo6c3RyaW5nIHN0ciA9IC4uLjsKLSAg
ICAgc2xpY2UgPSBzdHI7Ci0gICB9Ci0gICBVc2Uoc2xpY2UpOwotPC9wcmU+Ci1XaGVuIHRoZSA8
Y29kZT5pZjwvY29kZT4gc3RhdGVtZW50IGdvZXMgb3V0IG9mIHNjb3BlLCA8Y29kZT5zdHI8L2Nv
ZGU+IHdpbGwgYmUgZGVzdHJveWVkIGFuZCB0aGUKLWJhY2tpbmcgc3RvcmFnZSBmb3IgPGNvZGU+
c2xpY2U8L2NvZGU+IHdpbGwgZGlzYXBwZWFyLgotPHA+Ci08aDE+Q29tcGFyYXRvcnM8L2gxPgot
PHA+Ci1UaGUgcHJlY2VkaW5nIGV4YW1wbGVzIHVzZWQgdGhlIGRlZmF1bHQgb3JkZXJpbmcgZnVu
Y3Rpb24gZm9yIGtleSwKLXdoaWNoIG9yZGVycyBieXRlcyBsZXhpY29ncmFwaGljYWxseS4gIFlv
dSBjYW4gaG93ZXZlciBzdXBwbHkgYSBjdXN0b20KLWNvbXBhcmF0b3Igd2hlbiBvcGVuaW5nIGEg
ZGF0YWJhc2UuICBGb3IgZXhhbXBsZSwgc3VwcG9zZSBlYWNoCi1kYXRhYmFzZSBrZXkgY29uc2lz
dHMgb2YgdHdvIG51bWJlcnMgYW5kIHdlIHNob3VsZCBzb3J0IGJ5IHRoZSBmaXJzdAotbnVtYmVy
LCBicmVha2luZyB0aWVzIGJ5IHRoZSBzZWNvbmQgbnVtYmVyLiAgRmlyc3QsIGRlZmluZSBhIHBy
b3Blcgotc3ViY2xhc3Mgb2YgPGNvZGU+bGV2ZWxkYjo6Q29tcGFyYXRvcjwvY29kZT4gdGhhdCBl
eHByZXNzZXMgdGhlc2UgcnVsZXM6Ci08cD4KLTxwcmU+Ci0gIGNsYXNzIFR3b1BhcnRDb21wYXJh
dG9yIDogcHVibGljIGxldmVsZGI6OkNvbXBhcmF0b3IgewotICAgcHVibGljOgotICAgIC8vIFRo
cmVlLXdheSBjb21wYXJpc29uIGZ1bmN0aW9uOgotICAgIC8vICAgaWYgYSAmbHQ7IGI6IG5lZ2F0
aXZlIHJlc3VsdAotICAgIC8vICAgaWYgYSAmZ3Q7IGI6IHBvc2l0aXZlIHJlc3VsdAotICAgIC8v
ICAgZWxzZTogemVybyByZXN1bHQKLSAgICBpbnQgQ29tcGFyZShjb25zdCBsZXZlbGRiOjpTbGlj
ZSZhbXA7IGEsIGNvbnN0IGxldmVsZGI6OlNsaWNlJmFtcDsgYikgY29uc3QgewotICAgICAgaW50
IGExLCBhMiwgYjEsIGIyOwotICAgICAgUGFyc2VLZXkoYSwgJmFtcDthMSwgJmFtcDthMik7Ci0g
ICAgICBQYXJzZUtleShiLCAmYW1wO2IxLCAmYW1wO2IyKTsKLSAgICAgIGlmIChhMSAmbHQ7IGIx
KSByZXR1cm4gLTE7Ci0gICAgICBpZiAoYTEgJmd0OyBiMSkgcmV0dXJuICsxOwotICAgICAgaWYg
KGEyICZsdDsgYjIpIHJldHVybiAtMTsKLSAgICAgIGlmIChhMiAmZ3Q7IGIyKSByZXR1cm4gKzE7
Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBJZ25vcmUgdGhlIGZvbGxvd2luZyBt
ZXRob2RzIGZvciBub3c6Ci0gICAgY29uc3QgY2hhciogTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJU
d29QYXJ0Q29tcGFyYXRvciI7IH0KLSAgICB2b2lkIEZpbmRTaG9ydGVzdFNlcGFyYXRvcihzdGQ6
OnN0cmluZyosIGNvbnN0IGxldmVsZGI6OlNsaWNlJmFtcDspIGNvbnN0IHsgfQotICAgIHZvaWQg
RmluZFNob3J0U3VjY2Vzc29yKHN0ZDo6c3RyaW5nKikgY29uc3QgeyB9Ci0gIH07Ci08L3ByZT4K
LU5vdyBjcmVhdGUgYSBkYXRhYmFzZSB1c2luZyB0aGlzIGN1c3RvbSBjb21wYXJhdG9yOgotPHA+
Ci08cHJlPgotICBUd29QYXJ0Q29tcGFyYXRvciBjbXA7Ci0gIGxldmVsZGI6OkRCKiBkYjsKLSAg
bGV2ZWxkYjo6T3B0aW9ucyBvcHRpb25zOwotICBvcHRpb25zLmNyZWF0ZV9pZl9taXNzaW5nID0g
dHJ1ZTsKLSAgb3B0aW9ucy5jb21wYXJhdG9yID0gJmFtcDtjbXA7Ci0gIGxldmVsZGI6OlN0YXR1
cyBzdGF0dXMgPSBsZXZlbGRiOjpEQjo6T3BlbihvcHRpb25zLCAiL3RtcC90ZXN0ZGIiLCAmYW1w
O2RiKTsKLSAgLi4uCi08L3ByZT4KLTxoMj5CYWNrd2FyZHMgY29tcGF0aWJpbGl0eTwvaDI+Ci08
cD4KLVRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmF0b3IncyA8Y29kZT5OYW1lPC9jb2RlPiBtZXRo
b2QgaXMgYXR0YWNoZWQgdG8gdGhlCi1kYXRhYmFzZSB3aGVuIGl0IGlzIGNyZWF0ZWQsIGFuZCBp
cyBjaGVja2VkIG9uIGV2ZXJ5IHN1YnNlcXVlbnQKLWRhdGFiYXNlIG9wZW4uICBJZiB0aGUgbmFt
ZSBjaGFuZ2VzLCB0aGUgPGNvZGU+bGV2ZWxkYjo6REI6Ok9wZW48L2NvZGU+IGNhbGwgd2lsbAot
ZmFpbC4gIFRoZXJlZm9yZSwgY2hhbmdlIHRoZSBuYW1lIGlmIGFuZCBvbmx5IGlmIHRoZSBuZXcg
a2V5IGZvcm1hdAotYW5kIGNvbXBhcmlzb24gZnVuY3Rpb24gYXJlIGluY29tcGF0aWJsZSB3aXRo
IGV4aXN0aW5nIGRhdGFiYXNlcywgYW5kCi1pdCBpcyBvayB0byBkaXNjYXJkIHRoZSBjb250ZW50
cyBvZiBhbGwgZXhpc3RpbmcgZGF0YWJhc2VzLgotPHA+Ci1Zb3UgY2FuIGhvd2V2ZXIgc3RpbGwg
Z3JhZHVhbGx5IGV2b2x2ZSB5b3VyIGtleSBmb3JtYXQgb3ZlciB0aW1lIHdpdGgKLWEgbGl0dGxl
IGJpdCBvZiBwcmUtcGxhbm5pbmcuICBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIHN0b3JlIGEgdmVy
c2lvbgotbnVtYmVyIGF0IHRoZSBlbmQgb2YgZWFjaCBrZXkgKG9uZSBieXRlIHNob3VsZCBzdWZm
aWNlIGZvciBtb3N0IHVzZXMpLgotV2hlbiB5b3Ugd2lzaCB0byBzd2l0Y2ggdG8gYSBuZXcga2V5
IGZvcm1hdCAoZS5nLiwgYWRkaW5nIGFuIG9wdGlvbmFsCi10aGlyZCBwYXJ0IHRvIHRoZSBrZXlz
IHByb2Nlc3NlZCBieSA8Y29kZT5Ud29QYXJ0Q29tcGFyYXRvcjwvY29kZT4pLAotKGEpIGtlZXAg
dGhlIHNhbWUgY29tcGFyYXRvciBuYW1lIChiKSBpbmNyZW1lbnQgdGhlIHZlcnNpb24gbnVtYmVy
Ci1mb3IgbmV3IGtleXMgKGMpIGNoYW5nZSB0aGUgY29tcGFyYXRvciBmdW5jdGlvbiBzbyBpdCB1
c2VzIHRoZQotdmVyc2lvbiBudW1iZXJzIGZvdW5kIGluIHRoZSBrZXlzIHRvIGRlY2lkZSBob3cg
dG8gaW50ZXJwcmV0IHRoZW0uCi08cD4KLTxoMT5QZXJmb3JtYW5jZTwvaDE+Ci08cD4KLVBlcmZv
cm1hbmNlIGNhbiBiZSB0dW5lZCBieSBjaGFuZ2luZyB0aGUgZGVmYXVsdCB2YWx1ZXMgb2YgdGhl
Ci10eXBlcyBkZWZpbmVkIGluIDxjb2RlPmluY2x1ZGUvbGV2ZWxkYi9vcHRpb25zLmg8L2NvZGU+
LgotCi08cD4KLTxoMj5CbG9jayBzaXplPC9oMj4KLTxwPgotPGNvZGU+bGV2ZWxkYjwvY29kZT4g
Z3JvdXBzIGFkamFjZW50IGtleXMgdG9nZXRoZXIgaW50byB0aGUgc2FtZSBibG9jayBhbmQgc3Vj
aCBhCi1ibG9jayBpcyB0aGUgdW5pdCBvZiB0cmFuc2ZlciB0byBhbmQgZnJvbSBwZXJzaXN0ZW50
IHN0b3JhZ2UuICBUaGUKLWRlZmF1bHQgYmxvY2sgc2l6ZSBpcyBhcHByb3hpbWF0ZWx5IDQwOTYg
dW5jb21wcmVzc2VkIGJ5dGVzLgotQXBwbGljYXRpb25zIHRoYXQgbW9zdGx5IGRvIGJ1bGsgc2Nh
bnMgb3ZlciB0aGUgY29udGVudHMgb2YgdGhlCi1kYXRhYmFzZSBtYXkgd2lzaCB0byBpbmNyZWFz
ZSB0aGlzIHNpemUuICBBcHBsaWNhdGlvbnMgdGhhdCBkbyBhIGxvdAotb2YgcG9pbnQgcmVhZHMg
b2Ygc21hbGwgdmFsdWVzIG1heSB3aXNoIHRvIHN3aXRjaCB0byBhIHNtYWxsZXIgYmxvY2sKLXNp
emUgaWYgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnRzIGluZGljYXRlIGFuIGltcHJvdmVtZW50LiAg
VGhlcmUgaXNuJ3QKLW11Y2ggYmVuZWZpdCBpbiB1c2luZyBibG9ja3Mgc21hbGxlciB0aGFuIG9u
ZSBraWxvYnl0ZSwgb3IgbGFyZ2VyIHRoYW4KLWEgZmV3IG1lZ2FieXRlcy4gIEFsc28gbm90ZSB0
aGF0IGNvbXByZXNzaW9uIHdpbGwgYmUgbW9yZSBlZmZlY3RpdmUKLXdpdGggbGFyZ2VyIGJsb2Nr
IHNpemVzLgotPHA+Ci08aDI+Q29tcHJlc3Npb248L2gyPgotPHA+Ci1FYWNoIGJsb2NrIGlzIGlu
ZGl2aWR1YWxseSBjb21wcmVzc2VkIGJlZm9yZSBiZWluZyB3cml0dGVuIHRvCi1wZXJzaXN0ZW50
IHN0b3JhZ2UuICBDb21wcmVzc2lvbiBpcyBvbiBieSBkZWZhdWx0IHNpbmNlIHRoZSBkZWZhdWx0
Ci1jb21wcmVzc2lvbiBtZXRob2QgaXMgdmVyeSBmYXN0LCBhbmQgaXMgYXV0b21hdGljYWxseSBk
aXNhYmxlZCBmb3IKLXVuY29tcHJlc3NpYmxlIGRhdGEuICBJbiByYXJlIGNhc2VzLCBhcHBsaWNh
dGlvbnMgbWF5IHdhbnQgdG8gZGlzYWJsZQotY29tcHJlc3Npb24gZW50aXJlbHksIGJ1dCBzaG91
bGQgb25seSBkbyBzbyBpZiBiZW5jaG1hcmtzIHNob3cgYQotcGVyZm9ybWFuY2UgaW1wcm92ZW1l
bnQ6Ci08cD4KLTxwcmU+Ci0gIGxldmVsZGI6Ok9wdGlvbnMgb3B0aW9uczsKLSAgb3B0aW9ucy5j
b21wcmVzc2lvbiA9IGxldmVsZGI6OmtOb0NvbXByZXNzaW9uOwotICAuLi4gbGV2ZWxkYjo6REI6
Ok9wZW4ob3B0aW9ucywgbmFtZSwgLi4uKSAuLi4uCi08L3ByZT4KLTxoMj5DYWNoZTwvaDI+Ci08
cD4KLVRoZSBjb250ZW50cyBvZiB0aGUgZGF0YWJhc2UgYXJlIHN0b3JlZCBpbiBhIHNldCBvZiBm
aWxlcyBpbiB0aGUKLWZpbGVzeXN0ZW0gYW5kIGVhY2ggZmlsZSBzdG9yZXMgYSBzZXF1ZW5jZSBv
ZiBjb21wcmVzc2VkIGJsb2Nrcy4gIElmCi08Y29kZT5vcHRpb25zLmNhY2hlPC9jb2RlPiBpcyBu
b24tTlVMTCwgaXQgaXMgdXNlZCB0byBjYWNoZSBmcmVxdWVudGx5IHVzZWQKLXVuY29tcHJlc3Nl
ZCBibG9jayBjb250ZW50cy4KLTxwPgotPHByZT4KLSAgI2luY2x1ZGUgImxldmVsZGIvY2FjaGUu
aCIKLQotICBsZXZlbGRiOjpPcHRpb25zIG9wdGlvbnM7Ci0gIG9wdGlvbnMuY2FjaGUgPSBsZXZl
bGRiOjpOZXdMUlVDYWNoZSgxMDAgKiAxMDQ4NTc2KTsgIC8vIDEwME1CIGNhY2hlCi0gIGxldmVs
ZGI6OkRCKiBkYjsKLSAgbGV2ZWxkYjo6REI6Ok9wZW4ob3B0aW9ucywgbmFtZSwgJmRiKTsKLSAg
Li4uIHVzZSB0aGUgZGIgLi4uCi0gIGRlbGV0ZSBkYgotICBkZWxldGUgb3B0aW9ucy5jYWNoZTsK
LTwvcHJlPgotTm90ZSB0aGF0IHRoZSBjYWNoZSBob2xkcyB1bmNvbXByZXNzZWQgZGF0YSwgYW5k
IHRoZXJlZm9yZSBpdCBzaG91bGQKLWJlIHNpemVkIGFjY29yZGluZyB0byBhcHBsaWNhdGlvbiBs
ZXZlbCBkYXRhIHNpemVzLCB3aXRob3V0IGFueQotcmVkdWN0aW9uIGZyb20gY29tcHJlc3Npb24u
ICAoQ2FjaGluZyBvZiBjb21wcmVzc2VkIGJsb2NrcyBpcyBsZWZ0IHRvCi10aGUgb3BlcmF0aW5n
IHN5c3RlbSBidWZmZXIgY2FjaGUsIG9yIGFueSBjdXN0b20gPGNvZGU+RW52PC9jb2RlPgotaW1w
bGVtZW50YXRpb24gcHJvdmlkZWQgYnkgdGhlIGNsaWVudC4pCi08cD4KLVdoZW4gcGVyZm9ybWlu
ZyBhIGJ1bGsgcmVhZCwgdGhlIGFwcGxpY2F0aW9uIG1heSB3aXNoIHRvIGRpc2FibGUKLWNhY2hp
bmcgc28gdGhhdCB0aGUgZGF0YSBwcm9jZXNzZWQgYnkgdGhlIGJ1bGsgcmVhZCBkb2VzIG5vdCBl
bmQgdXAKLWRpc3BsYWNpbmcgbW9zdCBvZiB0aGUgY2FjaGVkIGNvbnRlbnRzLiAgQSBwZXItaXRl
cmF0b3Igb3B0aW9uIGNhbiBiZQotdXNlZCB0byBhY2hpZXZlIHRoaXM6Ci08cD4KLTxwcmU+Ci0g
IGxldmVsZGI6OlJlYWRPcHRpb25zIG9wdGlvbnM7Ci0gIG9wdGlvbnMuZmlsbF9jYWNoZSA9IGZh
bHNlOwotICBsZXZlbGRiOjpJdGVyYXRvciogaXQgPSBkYi0mZ3Q7TmV3SXRlcmF0b3Iob3B0aW9u
cyk7Ci0gIGZvciAoaXQtJmd0O1NlZWtUb0ZpcnN0KCk7IGl0LSZndDtWYWxpZCgpOyBpdC0mZ3Q7
TmV4dCgpKSB7Ci0gICAgLi4uCi0gIH0KLTwvcHJlPgotPGgyPktleSBMYXlvdXQ8L2gyPgotPHA+
Ci1Ob3RlIHRoYXQgdGhlIHVuaXQgb2YgZGlzayB0cmFuc2ZlciBhbmQgY2FjaGluZyBpcyBhIGJs
b2NrLiAgQWRqYWNlbnQKLWtleXMgKGFjY29yZGluZyB0byB0aGUgZGF0YWJhc2Ugc29ydCBvcmRl
cikgd2lsbCB1c3VhbGx5IGJlIHBsYWNlZCBpbgotdGhlIHNhbWUgYmxvY2suICBUaGVyZWZvcmUg
dGhlIGFwcGxpY2F0aW9uIGNhbiBpbXByb3ZlIGl0cyBwZXJmb3JtYW5jZQotYnkgcGxhY2luZyBr
ZXlzIHRoYXQgYXJlIGFjY2Vzc2VkIHRvZ2V0aGVyIG5lYXIgZWFjaCBvdGhlciBhbmQgcGxhY2lu
ZwotaW5mcmVxdWVudGx5IHVzZWQga2V5cyBpbiBhIHNlcGFyYXRlIHJlZ2lvbiBvZiB0aGUga2V5
IHNwYWNlLgotPHA+Ci1Gb3IgZXhhbXBsZSwgc3VwcG9zZSB3ZSBhcmUgaW1wbGVtZW50aW5nIGEg
c2ltcGxlIGZpbGUgc3lzdGVtIG9uIHRvcAotb2YgPGNvZGU+bGV2ZWxkYjwvY29kZT4uICBUaGUg
dHlwZXMgb2YgZW50cmllcyB3ZSBtaWdodCB3aXNoIHRvIHN0b3JlIGFyZToKLTxwPgotPHByZT4K
LSAgIGZpbGVuYW1lIC0mZ3Q7IHBlcm1pc3Npb24tYml0cywgbGVuZ3RoLCBsaXN0IG9mIGZpbGVf
YmxvY2tfaWRzCi0gICBmaWxlX2Jsb2NrX2lkIC0mZ3Q7IGRhdGEKLTwvcHJlPgotV2UgbWlnaHQg
d2FudCB0byBwcmVmaXggPGNvZGU+ZmlsZW5hbWU8L2NvZGU+IGtleXMgd2l0aCBvbmUgbGV0dGVy
IChzYXkgJy8nKSBhbmQgdGhlCi08Y29kZT5maWxlX2Jsb2NrX2lkPC9jb2RlPiBrZXlzIHdpdGgg
YSBkaWZmZXJlbnQgbGV0dGVyIChzYXkgJzAnKSBzbyB0aGF0IHNjYW5zCi1vdmVyIGp1c3QgdGhl
IG1ldGFkYXRhIGRvIG5vdCBmb3JjZSB1cyB0byBmZXRjaCBhbmQgY2FjaGUgYnVsa3kgZmlsZQot
Y29udGVudHMuCi08cD4KLTxoMj5GaWx0ZXJzPC9oMj4KLTxwPgotQmVjYXVzZSBvZiB0aGUgd2F5
IDxjb2RlPmxldmVsZGI8L2NvZGU+IGRhdGEgaXMgb3JnYW5pemVkIG9uIGRpc2ssCi1hIHNpbmds
ZSA8Y29kZT5HZXQoKTwvY29kZT4gY2FsbCBtYXkgaW52b2x2ZSBtdWx0aXBsZSByZWFkcyBmcm9t
IGRpc2suCi1UaGUgb3B0aW9uYWwgPGNvZGU+RmlsdGVyUG9saWN5PC9jb2RlPiBtZWNoYW5pc20g
Y2FuIGJlIHVzZWQgdG8gcmVkdWNlCi10aGUgbnVtYmVyIG9mIGRpc2sgcmVhZHMgc3Vic3RhbnRp
YWxseS4KLTxwcmU+Ci0gICBsZXZlbGRiOjpPcHRpb25zIG9wdGlvbnM7Ci0gICBvcHRpb25zLmZp
bHRlcl9wb2xpY3kgPSBOZXdCbG9vbUZpbHRlclBvbGljeSgxMCk7Ci0gICBsZXZlbGRiOjpEQiog
ZGI7Ci0gICBsZXZlbGRiOjpEQjo6T3BlbihvcHRpb25zLCAiL3RtcC90ZXN0ZGIiLCAmYW1wO2Ri
KTsKLSAgIC4uLiB1c2UgdGhlIGRhdGFiYXNlIC4uLgotICAgZGVsZXRlIGRiOwotICAgZGVsZXRl
IG9wdGlvbnMuZmlsdGVyX3BvbGljeTsKLTwvcHJlPgotVGhlIHByZWNlZGluZyBjb2RlIGFzc29j
aWF0ZXMgYQotPGEgaHJlZj0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CbG9vbV9maWx0
ZXIiPkJsb29tIGZpbHRlcjwvYT4KLWJhc2VkIGZpbHRlcmluZyBwb2xpY3kgd2l0aCB0aGUgZGF0
YWJhc2UuICBCbG9vbSBmaWx0ZXIgYmFzZWQKLWZpbHRlcmluZyByZWxpZXMgb24ga2VlcGluZyBz
b21lIG51bWJlciBvZiBiaXRzIG9mIGRhdGEgaW4gbWVtb3J5IHBlcgota2V5IChpbiB0aGlzIGNh
c2UgMTAgYml0cyBwZXIga2V5IHNpbmNlIHRoYXQgaXMgdGhlIGFyZ3VtZW50IHdlIHBhc3NlZAot
dG8gTmV3Qmxvb21GaWx0ZXJQb2xpY3kpLiAgVGhpcyBmaWx0ZXIgd2lsbCByZWR1Y2UgdGhlIG51
bWJlciBvZiB1bm5lY2Vzc2FyeQotZGlzayByZWFkcyBuZWVkZWQgZm9yIDxjb2RlPkdldCgpPC9j
b2RlPiBjYWxscyBieSBhIGZhY3RvciBvZgotYXBwcm94aW1hdGVseSBhIDEwMC4gIEluY3JlYXNp
bmcgdGhlIGJpdHMgcGVyIGtleSB3aWxsIGxlYWQgdG8gYQotbGFyZ2VyIHJlZHVjdGlvbiBhdCB0
aGUgY29zdCBvZiBtb3JlIG1lbW9yeSB1c2FnZS4gIFdlIHJlY29tbWVuZCB0aGF0Ci1hcHBsaWNh
dGlvbnMgd2hvc2Ugd29ya2luZyBzZXQgZG9lcyBub3QgZml0IGluIG1lbW9yeSBhbmQgdGhhdCBk
byBhCi1sb3Qgb2YgcmFuZG9tIHJlYWRzIHNldCBhIGZpbHRlciBwb2xpY3kuCi08cD4KLUlmIHlv
dSBhcmUgdXNpbmcgYSBjdXN0b20gY29tcGFyYXRvciwgeW91IHNob3VsZCBlbnN1cmUgdGhhdCB0
aGUgZmlsdGVyCi1wb2xpY3kgeW91IGFyZSB1c2luZyBpcyBjb21wYXRpYmxlIHdpdGggeW91ciBj
b21wYXJhdG9yLiAgRm9yIGV4YW1wbGUsCi1jb25zaWRlciBhIGNvbXBhcmF0b3IgdGhhdCBpZ25v
cmVzIHRyYWlsaW5nIHNwYWNlcyB3aGVuIGNvbXBhcmluZyBrZXlzLgotPGNvZGU+TmV3Qmxvb21G
aWx0ZXJQb2xpY3k8L2NvZGU+IG11c3Qgbm90IGJlIHVzZWQgd2l0aCBzdWNoIGEgY29tcGFyYXRv
ci4KLUluc3RlYWQsIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgcHJvdmlkZSBhIGN1c3RvbSBmaWx0
ZXIgcG9saWN5IHRoYXQKLWFsc28gaWdub3JlcyB0cmFpbGluZyBzcGFjZXMuICBGb3IgZXhhbXBs
ZToKLTxwcmU+Ci0gIGNsYXNzIEN1c3RvbUZpbHRlclBvbGljeSA6IHB1YmxpYyBsZXZlbGRiOjpG
aWx0ZXJQb2xpY3kgewotICAgcHJpdmF0ZToKLSAgICBGaWx0ZXJQb2xpY3kqIGJ1aWx0aW5fcG9s
aWN5XzsKLSAgIHB1YmxpYzoKLSAgICBDdXN0b21GaWx0ZXJQb2xpY3koKSA6IGJ1aWx0aW5fcG9s
aWN5XyhOZXdCbG9vbUZpbHRlclBvbGljeSgxMCkpIHsgfQotICAgIH5DdXN0b21GaWx0ZXJQb2xp
Y3koKSB7IGRlbGV0ZSBidWlsdGluX3BvbGljeV87IH0KLQotICAgIGNvbnN0IGNoYXIqIE5hbWUo
KSBjb25zdCB7IHJldHVybiAiSWdub3JlVHJhaWxpbmdTcGFjZXNGaWx0ZXIiOyB9Ci0KLSAgICB2
b2lkIENyZWF0ZUZpbHRlcihjb25zdCBTbGljZSoga2V5cywgaW50IG4sIHN0ZDo6c3RyaW5nKiBk
c3QpIGNvbnN0IHsKLSAgICAgIC8vIFVzZSBidWlsdGluIGJsb29tIGZpbHRlciBjb2RlIGFmdGVy
IHJlbW92aW5nIHRyYWlsaW5nIHNwYWNlcwotICAgICAgc3RkOjp2ZWN0b3ImbHQ7U2xpY2UmZ3Q7
IHRyaW1tZWQobik7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSAmbHQ7IG47IGkrKykgewotICAg
ICAgICB0cmltbWVkW2ldID0gUmVtb3ZlVHJhaWxpbmdTcGFjZXMoa2V5c1tpXSk7Ci0gICAgICB9
Ci0gICAgICByZXR1cm4gYnVpbHRpbl9wb2xpY3lfLSZndDtDcmVhdGVGaWx0ZXIoJmFtcDt0cmlt
bWVkW2ldLCBuLCBkc3QpOwotICAgIH0KLQotICAgIGJvb2wgS2V5TWF5TWF0Y2goY29uc3QgU2xp
Y2UmIGtleSwgY29uc3QgU2xpY2UmIGZpbHRlcikgY29uc3QgewotICAgICAgLy8gVXNlIGJ1aWx0
aW4gYmxvb20gZmlsdGVyIGNvZGUgYWZ0ZXIgcmVtb3ZpbmcgdHJhaWxpbmcgc3BhY2VzCi0gICAg
ICByZXR1cm4gYnVpbHRpbl9wb2xpY3lfLSZndDtLZXlNYXlNYXRjaChSZW1vdmVUcmFpbGluZ1Nw
YWNlcyhrZXkpLCBmaWx0ZXIpOwotICAgIH0KLSAgfTsKLTwvcHJlPgotPHA+Ci1BZHZhbmNlZCBh
cHBsaWNhdGlvbnMgbWF5IHByb3ZpZGUgYSBmaWx0ZXIgcG9saWN5IHRoYXQgZG9lcyBub3QgdXNl
Ci1hIGJsb29tIGZpbHRlciBidXQgdXNlcyBzb21lIG90aGVyIG1lY2hhbmlzbSBmb3Igc3VtbWFy
aXppbmcgYSBzZXQKLW9mIGtleXMuICBTZWUgPGNvZGU+bGV2ZWxkYi9maWx0ZXJfcG9saWN5Lmg8
L2NvZGU+IGZvciBkZXRhaWwuCi08cD4KLTxoMT5DaGVja3N1bXM8L2gxPgotPHA+Ci08Y29kZT5s
ZXZlbGRiPC9jb2RlPiBhc3NvY2lhdGVzIGNoZWNrc3VtcyB3aXRoIGFsbCBkYXRhIGl0IHN0b3Jl
cyBpbiB0aGUgZmlsZSBzeXN0ZW0uCi1UaGVyZSBhcmUgdHdvIHNlcGFyYXRlIGNvbnRyb2xzIHBy
b3ZpZGVkIG92ZXIgaG93IGFnZ3Jlc3NpdmVseSB0aGVzZQotY2hlY2tzdW1zIGFyZSB2ZXJpZmll
ZDoKLTxwPgotPHVsPgotPGxpPiA8Y29kZT5SZWFkT3B0aW9uczo6dmVyaWZ5X2NoZWNrc3Vtczwv
Y29kZT4gbWF5IGJlIHNldCB0byB0cnVlIHRvIGZvcmNlCi0gIGNoZWNrc3VtIHZlcmlmaWNhdGlv
biBvZiBhbGwgZGF0YSB0aGF0IGlzIHJlYWQgZnJvbSB0aGUgZmlsZSBzeXN0ZW0gb24KLSAgYmVo
YWxmIG9mIGEgcGFydGljdWxhciByZWFkLiAgQnkgZGVmYXVsdCwgbm8gc3VjaCB2ZXJpZmljYXRp
b24gaXMKLSAgZG9uZS4KLTxwPgotPGxpPiA8Y29kZT5PcHRpb25zOjpwYXJhbm9pZF9jaGVja3M8
L2NvZGU+IG1heSBiZSBzZXQgdG8gdHJ1ZSBiZWZvcmUgb3BlbmluZyBhCi0gIGRhdGFiYXNlIHRv
IG1ha2UgdGhlIGRhdGFiYXNlIGltcGxlbWVudGF0aW9uIHJhaXNlIGFuIGVycm9yIGFzIHNvb24g
YXMKLSAgaXQgZGV0ZWN0cyBhbiBpbnRlcm5hbCBjb3JydXB0aW9uLiAgRGVwZW5kaW5nIG9uIHdo
aWNoIHBvcnRpb24gb2YgdGhlCi0gIGRhdGFiYXNlIGhhcyBiZWVuIGNvcnJ1cHRlZCwgdGhlIGVy
cm9yIG1heSBiZSByYWlzZWQgd2hlbiB0aGUgZGF0YWJhc2UKLSAgaXMgb3BlbmVkLCBvciBsYXRl
ciBieSBhbm90aGVyIGRhdGFiYXNlIG9wZXJhdGlvbi4gIEJ5IGRlZmF1bHQsCi0gIHBhcmFub2lk
IGNoZWNraW5nIGlzIG9mZiBzbyB0aGF0IHRoZSBkYXRhYmFzZSBjYW4gYmUgdXNlZCBldmVuIGlm
Ci0gIHBhcnRzIG9mIGl0cyBwZXJzaXN0ZW50IHN0b3JhZ2UgaGF2ZSBiZWVuIGNvcnJ1cHRlZC4K
LTxwPgotICBJZiBhIGRhdGFiYXNlIGlzIGNvcnJ1cHRlZCAocGVyaGFwcyBpdCBjYW5ub3QgYmUg
b3BlbmVkIHdoZW4KLSAgcGFyYW5vaWQgY2hlY2tpbmcgaXMgdHVybmVkIG9uKSwgdGhlIDxjb2Rl
PmxldmVsZGI6OlJlcGFpckRCPC9jb2RlPiBmdW5jdGlvbgotICBtYXkgYmUgdXNlZCB0byByZWNv
dmVyIGFzIG11Y2ggb2YgdGhlIGRhdGEgYXMgcG9zc2libGUKLTxwPgotPC91bD4KLTxoMT5BcHBy
b3hpbWF0ZSBTaXplczwvaDE+Ci08cD4KLVRoZSA8Y29kZT5HZXRBcHByb3hpbWF0ZVNpemVzPC9j
b2RlPiBtZXRob2QgY2FuIHVzZWQgdG8gZ2V0IHRoZSBhcHByb3hpbWF0ZQotbnVtYmVyIG9mIGJ5
dGVzIG9mIGZpbGUgc3lzdGVtIHNwYWNlIHVzZWQgYnkgb25lIG9yIG1vcmUga2V5IHJhbmdlcy4K
LTxwPgotPHByZT4KLSAgIGxldmVsZGI6OlJhbmdlIHJhbmdlc1syXTsKLSAgIHJhbmdlc1swXSA9
IGxldmVsZGI6OlJhbmdlKCJhIiwgImMiKTsKLSAgIHJhbmdlc1sxXSA9IGxldmVsZGI6OlJhbmdl
KCJ4IiwgInoiKTsKLSAgIHVpbnQ2NF90IHNpemVzWzJdOwotICAgbGV2ZWxkYjo6U3RhdHVzIHMg
PSBkYi0mZ3Q7R2V0QXBwcm94aW1hdGVTaXplcyhyYW5nZXMsIDIsIHNpemVzKTsKLTwvcHJlPgot
VGhlIHByZWNlZGluZyBjYWxsIHdpbGwgc2V0IDxjb2RlPnNpemVzWzBdPC9jb2RlPiB0byB0aGUg
YXBwcm94aW1hdGUgbnVtYmVyIG9mCi1ieXRlcyBvZiBmaWxlIHN5c3RlbSBzcGFjZSB1c2VkIGJ5
IHRoZSBrZXkgcmFuZ2UgPGNvZGU+W2EuLmMpPC9jb2RlPiBhbmQKLTxjb2RlPnNpemVzWzFdPC9j
b2RlPiB0byB0aGUgYXBwcm94aW1hdGUgbnVtYmVyIG9mIGJ5dGVzIHVzZWQgYnkgdGhlIGtleSBy
YW5nZQotPGNvZGU+W3guLnopPC9jb2RlPi4KLTxwPgotPGgxPkVudmlyb25tZW50PC9oMT4KLTxw
PgotQWxsIGZpbGUgb3BlcmF0aW9ucyAoYW5kIG90aGVyIG9wZXJhdGluZyBzeXN0ZW0gY2FsbHMp
IGlzc3VlZCBieSB0aGUKLTxjb2RlPmxldmVsZGI8L2NvZGU+IGltcGxlbWVudGF0aW9uIGFyZSBy
b3V0ZWQgdGhyb3VnaCBhIDxjb2RlPmxldmVsZGI6OkVudjwvY29kZT4gb2JqZWN0LgotU29waGlz
dGljYXRlZCBjbGllbnRzIG1heSB3aXNoIHRvIHByb3ZpZGUgdGhlaXIgb3duIDxjb2RlPkVudjwv
Y29kZT4KLWltcGxlbWVudGF0aW9uIHRvIGdldCBiZXR0ZXIgY29udHJvbC4gIEZvciBleGFtcGxl
LCBhbiBhcHBsaWNhdGlvbiBtYXkKLWludHJvZHVjZSBhcnRpZmljaWFsIGRlbGF5cyBpbiB0aGUg
ZmlsZSBJTyBwYXRocyB0byBsaW1pdCB0aGUgaW1wYWN0Ci1vZiA8Y29kZT5sZXZlbGRiPC9jb2Rl
PiBvbiBvdGhlciBhY3Rpdml0aWVzIGluIHRoZSBzeXN0ZW0uCi08cD4KLTxwcmU+Ci0gIGNsYXNz
IFNsb3dFbnYgOiBwdWJsaWMgbGV2ZWxkYjo6RW52IHsKLSAgICAuLiBpbXBsZW1lbnRhdGlvbiBv
ZiB0aGUgRW52IGludGVyZmFjZSAuLi4KLSAgfTsKLQotICBTbG93RW52IGVudjsKLSAgbGV2ZWxk
Yjo6T3B0aW9ucyBvcHRpb25zOwotICBvcHRpb25zLmVudiA9ICZhbXA7ZW52OwotICBTdGF0dXMg
cyA9IGxldmVsZGI6OkRCOjpPcGVuKG9wdGlvbnMsIC4uLik7Ci08L3ByZT4KLTxoMT5Qb3J0aW5n
PC9oMT4KLTxwPgotPGNvZGU+bGV2ZWxkYjwvY29kZT4gbWF5IGJlIHBvcnRlZCB0byBhIG5ldyBw
bGF0Zm9ybSBieSBwcm92aWRpbmcgcGxhdGZvcm0KLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBv
ZiB0aGUgdHlwZXMvbWV0aG9kcy9mdW5jdGlvbnMgZXhwb3J0ZWQgYnkKLTxjb2RlPmxldmVsZGIv
cG9ydC9wb3J0Lmg8L2NvZGU+LiAgU2VlIDxjb2RlPmxldmVsZGIvcG9ydC9wb3J0X2V4YW1wbGUu
aDwvY29kZT4gZm9yIG1vcmUKLWRldGFpbHMuCi08cD4KLUluIGFkZGl0aW9uLCB0aGUgbmV3IHBs
YXRmb3JtIG1heSBuZWVkIGEgbmV3IGRlZmF1bHQgPGNvZGU+bGV2ZWxkYjo6RW52PC9jb2RlPgot
aW1wbGVtZW50YXRpb24uICBTZWUgPGNvZGU+bGV2ZWxkYi91dGlsL2Vudl9wb3NpeC5oPC9jb2Rl
PiBmb3IgYW4gZXhhbXBsZS4KLQotPGgxPk90aGVyIEluZm9ybWF0aW9uPC9oMT4KLQotPHA+Ci1E
ZXRhaWxzIGFib3V0IHRoZSA8Y29kZT5sZXZlbGRiPC9jb2RlPiBpbXBsZW1lbnRhdGlvbiBtYXkg
YmUgZm91bmQgaW4KLXRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzOgotPHVsPgotPGxpPiA8YSBocmVm
PSJpbXBsLmh0bWwiPkltcGxlbWVudGF0aW9uIG5vdGVzPC9hPgotPGxpPiA8YSBocmVmPSJ0YWJs
ZV9mb3JtYXQudHh0Ij5Gb3JtYXQgb2YgYW4gaW1tdXRhYmxlIFRhYmxlIGZpbGU8L2E+Ci08bGk+
IDxhIGhyZWY9ImxvZ19mb3JtYXQudHh0Ij5Gb3JtYXQgb2YgYSBsb2cgZmlsZTwvYT4KLTwvdWw+
Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVs
ZGIvZG9jL2xvZ19mb3JtYXQudHh0IGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kb2MvbG9n
X2Zvcm1hdC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMjhmNjIuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kb2MvbG9nX2Zvcm1hdC50eHQKKysr
IC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi1UaGUgbG9nIGZpbGUgY29udGVudHMgYXJlIGEg
c2VxdWVuY2Ugb2YgMzJLQiBibG9ja3MuICBUaGUgb25seQotZXhjZXB0aW9uIGlzIHRoYXQgdGhl
IHRhaWwgb2YgdGhlIGZpbGUgbWF5IGNvbnRhaW4gYSBwYXJ0aWFsIGJsb2NrLgotCi1FYWNoIGJs
b2NrIGNvbnNpc3RzIG9mIGEgc2VxdWVuY2Ugb2YgcmVjb3JkczoKLSAgIGJsb2NrIDo9IHJlY29y
ZCogdHJhaWxlcj8KLSAgIHJlY29yZCA6PQotCWNoZWNrc3VtOiB1aW50MzIJLy8gY3JjMzJjIG9m
IHR5cGUgYW5kIGRhdGFbXSA7IGxpdHRsZS1lbmRpYW4KLQlsZW5ndGg6IHVpbnQxNgkJLy8gbGl0
dGxlLWVuZGlhbgotCXR5cGU6IHVpbnQ4CQkvLyBPbmUgb2YgRlVMTCwgRklSU1QsIE1JRERMRSwg
TEFTVAotCWRhdGE6IHVpbnQ4W2xlbmd0aF0KLQotQSByZWNvcmQgbmV2ZXIgc3RhcnRzIHdpdGhp
biB0aGUgbGFzdCBzaXggYnl0ZXMgb2YgYSBibG9jayAoc2luY2UgaXQKLXdvbid0IGZpdCkuICBB
bnkgbGVmdG92ZXIgYnl0ZXMgaGVyZSBmb3JtIHRoZSB0cmFpbGVyLCB3aGljaCBtdXN0Ci1jb25z
aXN0IGVudGlyZWx5IG9mIHplcm8gYnl0ZXMgYW5kIG11c3QgYmUgc2tpcHBlZCBieSByZWFkZXJz
LiAgCi0KLUFzaWRlOiBpZiBleGFjdGx5IHNldmVuIGJ5dGVzIGFyZSBsZWZ0IGluIHRoZSBjdXJy
ZW50IGJsb2NrLCBhbmQgYSBuZXcKLW5vbi16ZXJvIGxlbmd0aCByZWNvcmQgaXMgYWRkZWQsIHRo
ZSB3cml0ZXIgbXVzdCBlbWl0IGEgRklSU1QgcmVjb3JkCi0od2hpY2ggY29udGFpbnMgemVybyBi
eXRlcyBvZiB1c2VyIGRhdGEpIHRvIGZpbGwgdXAgdGhlIHRyYWlsaW5nIHNldmVuCi1ieXRlcyBv
ZiB0aGUgYmxvY2sgYW5kIHRoZW4gZW1pdCBhbGwgb2YgdGhlIHVzZXIgZGF0YSBpbiBzdWJzZXF1
ZW50Ci1ibG9ja3MuCi0KLU1vcmUgdHlwZXMgbWF5IGJlIGFkZGVkIGluIHRoZSBmdXR1cmUuICBT
b21lIFJlYWRlcnMgbWF5IHNraXAgcmVjb3JkCi10eXBlcyB0aGV5IGRvIG5vdCB1bmRlcnN0YW5k
LCBvdGhlcnMgbWF5IHJlcG9ydCB0aGF0IHNvbWUgZGF0YSB3YXMKLXNraXBwZWQuCi0KLUZVTEwg
PT0gMQotRklSU1QgPT0gMgotTUlERExFID09IDMKLUxBU1QgPT0gNAotCi1UaGUgRlVMTCByZWNv
cmQgY29udGFpbnMgdGhlIGNvbnRlbnRzIG9mIGFuIGVudGlyZSB1c2VyIHJlY29yZC4KLQotRklS
U1QsIE1JRERMRSwgTEFTVCBhcmUgdHlwZXMgdXNlZCBmb3IgdXNlciByZWNvcmRzIHRoYXQgaGF2
ZSBiZWVuCi1zcGxpdCBpbnRvIG11bHRpcGxlIGZyYWdtZW50cyAodHlwaWNhbGx5IGJlY2F1c2Ug
b2YgYmxvY2sgYm91bmRhcmllcykuCi1GSVJTVCBpcyB0aGUgdHlwZSBvZiB0aGUgZmlyc3QgZnJh
Z21lbnQgb2YgYSB1c2VyIHJlY29yZCwgTEFTVCBpcyB0aGUKLXR5cGUgb2YgdGhlIGxhc3QgZnJh
Z21lbnQgb2YgYSB1c2VyIHJlY29yZCwgYW5kIE1JRCBpcyB0aGUgdHlwZSBvZiBhbGwKLWludGVy
aW9yIGZyYWdtZW50cyBvZiBhIHVzZXIgcmVjb3JkLgotCi1FeGFtcGxlOiBjb25zaWRlciBhIHNl
cXVlbmNlIG9mIHVzZXIgcmVjb3JkczoKLSAgIEE6IGxlbmd0aCAxMDAwCi0gICBCOiBsZW5ndGgg
OTcyNzAKLSAgIEM6IGxlbmd0aCA4MDAwCi1BIHdpbGwgYmUgc3RvcmVkIGFzIGEgRlVMTCByZWNv
cmQgaW4gdGhlIGZpcnN0IGJsb2NrLgotCi1CIHdpbGwgYmUgc3BsaXQgaW50byB0aHJlZSBmcmFn
bWVudHM6IGZpcnN0IGZyYWdtZW50IG9jY3VwaWVzIHRoZSByZXN0Ci1vZiB0aGUgZmlyc3QgYmxv
Y2ssIHNlY29uZCBmcmFnbWVudCBvY2N1cGllcyB0aGUgZW50aXJldHkgb2YgdGhlCi1zZWNvbmQg
YmxvY2ssIGFuZCB0aGUgdGhpcmQgZnJhZ21lbnQgb2NjdXBpZXMgYSBwcmVmaXggb2YgdGhlIHRo
aXJkCi1ibG9jay4gIFRoaXMgd2lsbCBsZWF2ZSBzaXggYnl0ZXMgZnJlZSBpbiB0aGUgdGhpcmQg
YmxvY2ssIHdoaWNoIHdpbGwKLWJlIGxlZnQgZW1wdHkgYXMgdGhlIHRyYWlsZXIuCi0KLUMgd2ls
bCBiZSBzdG9yZWQgYXMgYSBGVUxMIHJlY29yZCBpbiB0aGUgZm91cnRoIGJsb2NrLgotCi09PT09
PT09PT09PT09PT09PT09Ci0KLVNvbWUgYmVuZWZpdHMgb3ZlciB0aGUgcmVjb3JkaW8gZm9ybWF0
OgotCi0oMSkgV2UgZG8gbm90IG5lZWQgYW55IGhldXJpc3RpY3MgZm9yIHJlc3luY2luZyAtIGp1
c3QgZ28gdG8gbmV4dAotYmxvY2sgYm91bmRhcnkgYW5kIHNjYW4uICBJZiB0aGVyZSBpcyBhIGNv
cnJ1cHRpb24sIHNraXAgdG8gdGhlIG5leHQKLWJsb2NrLiAgQXMgYSBzaWRlLWJlbmVmaXQsIHdl
IGRvIG5vdCBnZXQgY29uZnVzZWQgd2hlbiBwYXJ0IG9mIHRoZQotY29udGVudHMgb2Ygb25lIGxv
ZyBmaWxlIGFyZSBlbWJlZGRlZCBhcyBhIHJlY29yZCBpbnNpZGUgYW5vdGhlciBsb2cKLWZpbGUu
Ci0KLSgyKSBTcGxpdHRpbmcgYXQgYXBwcm94aW1hdGUgYm91bmRhcmllcyAoZS5nLiwgZm9yIG1h
cHJlZHVjZSkgaXMKLXNpbXBsZTogZmluZCB0aGUgbmV4dCBibG9jayBib3VuZGFyeSBhbmQgc2tp
cCByZWNvcmRzIHVudGlsIHdlCi1oaXQgYSBGVUxMIG9yIEZJUlNUIHJlY29yZC4KLQotKDMpIFdl
IGRvIG5vdCBuZWVkIGV4dHJhIGJ1ZmZlcmluZyBmb3IgbGFyZ2UgcmVjb3Jkcy4KLQotU29tZSBk
b3duc2lkZXMgY29tcGFyZWQgdG8gcmVjb3JkaW8gZm9ybWF0OgotCi0oMSkgTm8gcGFja2luZyBv
ZiB0aW55IHJlY29yZHMuICBUaGlzIGNvdWxkIGJlIGZpeGVkIGJ5IGFkZGluZyBhIG5ldwotcmVj
b3JkIHR5cGUsIHNvIGl0IGlzIGEgc2hvcnRjb21pbmcgb2YgdGhlIGN1cnJlbnQgaW1wbGVtZW50
YXRpb24sCi1ub3QgbmVjZXNzYXJpbHkgdGhlIGZvcm1hdC4KLQotKDIpIE5vIGNvbXByZXNzaW9u
LiAgQWdhaW4sIHRoaXMgY291bGQgYmUgZml4ZWQgYnkgYWRkaW5nIG5ldyByZWNvcmQgdHlwZXMu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RvYy90YWJsZV9mb3JtYXQu
dHh0IGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kb2MvdGFibGVfZm9ybWF0LnR4dApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E4ZjliNC4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL2RvYy90YWJsZV9mb3JtYXQudHh0CisrKyAvZGV2L251bGwKQEAg
LTEsMTA0ICswLDAgQEAKLUZpbGUgZm9ybWF0Ci09PT09PT09PT09PQotCi0gIDxiZWdpbm5pbmdf
b2ZfZmlsZT4KLSAgW2RhdGEgYmxvY2sgMV0KLSAgW2RhdGEgYmxvY2sgMl0KLSAgLi4uCi0gIFtk
YXRhIGJsb2NrIE5dCi0gIFttZXRhIGJsb2NrIDFdCi0gIC4uLgotICBbbWV0YSBibG9jayBLXQot
ICBbbWV0YWluZGV4IGJsb2NrXQotICBbaW5kZXggYmxvY2tdCi0gIFtGb290ZXJdICAgICAgICAo
Zml4ZWQgc2l6ZTsgc3RhcnRzIGF0IGZpbGVfc2l6ZSAtIHNpemVvZihGb290ZXIpKQotICA8ZW5k
X29mX2ZpbGU+Ci0KLVRoZSBmaWxlIGNvbnRhaW5zIGludGVybmFsIHBvaW50ZXJzLiAgRWFjaCBz
dWNoIHBvaW50ZXIgaXMgY2FsbGVkCi1hIEJsb2NrSGFuZGxlIGFuZCBjb250YWlucyB0aGUgZm9s
bG93aW5nIGluZm9ybWF0aW9uOgotICBvZmZzZXQ6CSAgICB2YXJpbnQ2NAotICBzaXplOgkJICAg
IHZhcmludDY0Ci1TZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVm
ZmVycy9kb2NzL2VuY29kaW5nI3ZhcmludHMKLWZvciBhbiBleHBsYW5hdGlvbiBvZiB2YXJpbnQ2
NCBmb3JtYXQuCi0KLSgxKSBUaGUgc2VxdWVuY2Ugb2Yga2V5L3ZhbHVlIHBhaXJzIGluIHRoZSBm
aWxlIGFyZSBzdG9yZWQgaW4gc29ydGVkCi1vcmRlciBhbmQgcGFydGl0aW9uZWQgaW50byBhIHNl
cXVlbmNlIG9mIGRhdGEgYmxvY2tzLiAgVGhlc2UgYmxvY2tzCi1jb21lIG9uZSBhZnRlciBhbm90
aGVyIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuICBFYWNoIGRhdGEgYmxvY2sKLWlzIGZv
cm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIGNvZGUgaW4gYmxvY2tfYnVpbGRlci5jYywgYW5kIHRo
ZW4KLW9wdGlvbmFsbHkgY29tcHJlc3NlZC4KLQotKDIpIEFmdGVyIHRoZSBkYXRhIGJsb2NrcyB3
ZSBzdG9yZSBhIGJ1bmNoIG9mIG1ldGEgYmxvY2tzLiAgVGhlCi1zdXBwb3J0ZWQgbWV0YSBibG9j
ayB0eXBlcyBhcmUgZGVzY3JpYmVkIGJlbG93LiAgTW9yZSBtZXRhIGJsb2NrIHR5cGVzCi1tYXkg
YmUgYWRkZWQgaW4gdGhlIGZ1dHVyZS4gIEVhY2ggbWV0YSBibG9jayBpcyBhZ2FpbiBmb3JtYXR0
ZWQgdXNpbmcKLWJsb2NrX2J1aWxkZXIuY2MgYW5kIHRoZW4gb3B0aW9uYWxseSBjb21wcmVzc2Vk
LgotCi0oMykgQSAibWV0YWluZGV4IiBibG9jay4gIEl0IGNvbnRhaW5zIG9uZSBlbnRyeSBmb3Ig
ZXZlcnkgb3RoZXIgbWV0YQotYmxvY2sgd2hlcmUgdGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUg
bWV0YSBibG9jayBhbmQgdGhlIHZhbHVlIGlzIGEKLUJsb2NrSGFuZGxlIHBvaW50aW5nIHRvIHRo
YXQgbWV0YSBibG9jay4KLQotKDQpIEFuICJpbmRleCIgYmxvY2suICBUaGlzIGJsb2NrIGNvbnRh
aW5zIG9uZSBlbnRyeSBwZXIgZGF0YSBibG9jaywKLXdoZXJlIHRoZSBrZXkgaXMgYSBzdHJpbmcg
Pj0gbGFzdCBrZXkgaW4gdGhhdCBkYXRhIGJsb2NrIGFuZCBiZWZvcmUKLXRoZSBmaXJzdCBrZXkg
aW4gdGhlIHN1Y2Nlc3NpdmUgZGF0YSBibG9jay4gIFRoZSB2YWx1ZSBpcyB0aGUKLUJsb2NrSGFu
ZGxlIGZvciB0aGUgZGF0YSBibG9jay4KLQotKDYpIEF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgZmls
ZSBpcyBhIGZpeGVkIGxlbmd0aCBmb290ZXIgdGhhdCBjb250YWlucwotdGhlIEJsb2NrSGFuZGxl
IG9mIHRoZSBtZXRhaW5kZXggYW5kIGluZGV4IGJsb2NrcyBhcyB3ZWxsIGFzIGEgbWFnaWMgbnVt
YmVyLgotICAgICAgIG1ldGFpbmRleF9oYW5kbGU6IGNoYXJbcF07ICAgIC8vIEJsb2NrIGhhbmRs
ZSBmb3IgbWV0YWluZGV4Ci0gICAgICAgaW5kZXhfaGFuZGxlOiAgICAgY2hhcltxXTsgICAgLy8g
QmxvY2sgaGFuZGxlIGZvciBpbmRleAotICAgICAgIHBhZGRpbmc6ICAgICAgICAgIGNoYXJbNDAt
cC1xXTsgLy8gemVyb2VkIGJ5dGVzIHRvIG1ha2UgZml4ZWQgbGVuZ3RoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoNDA9PTIqQmxvY2tIYW5kbGU6OmtNYXhFbmNv
ZGVkTGVuZ3RoKQotICAgICAgIG1hZ2ljOiAgICAgICAgICAgIGZpeGVkNjQ7ICAgIC8vID09IDB4
ZGI0Nzc1MjQ4YjgwZmI1NyAobGl0dGxlLWVuZGlhbikKLQotImZpbHRlciIgTWV0YSBCbG9jawot
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JZiBhICJGaWx0ZXJQb2xpY3kiIHdhcyBzcGVjaWZpZWQg
d2hlbiB0aGUgZGF0YWJhc2Ugd2FzIG9wZW5lZCwgYQotZmlsdGVyIGJsb2NrIGlzIHN0b3JlZCBp
biBlYWNoIHRhYmxlLiAgVGhlICJtZXRhaW5kZXgiIGJsb2NrIGNvbnRhaW5zCi1hbiBlbnRyeSB0
aGF0IG1hcHMgZnJvbSAiZmlsdGVyLjxOPiIgdG8gdGhlIEJsb2NrSGFuZGxlIGZvciB0aGUgZmls
dGVyCi1ibG9jayB3aGVyZSAiPE4+IiBpcyB0aGUgc3RyaW5nIHJldHVybmVkIGJ5IHRoZSBmaWx0
ZXIgcG9saWN5J3MKLSJOYW1lKCkiIG1ldGhvZC4KLQotVGhlIGZpbHRlciBibG9jayBzdG9yZXMg
YSBzZXF1ZW5jZSBvZiBmaWx0ZXJzLCB3aGVyZSBmaWx0ZXIgaSBjb250YWlucwotdGhlIG91dHB1
dCBvZiBGaWx0ZXJQb2xpY3k6OkNyZWF0ZUZpbHRlcigpIG9uIGFsbCBrZXlzIHRoYXQgYXJlIHN0
b3JlZAotaW4gYSBibG9jayB3aG9zZSBmaWxlIG9mZnNldCBmYWxscyB3aXRoaW4gdGhlIHJhbmdl
Ci0KLSAgICBbIGkqYmFzZSAuLi4gKGkrMSkqYmFzZS0xIF0KLQotQ3VycmVudGx5LCAiYmFzZSIg
aXMgMktCLiAgU28gZm9yIGV4YW1wbGUsIGlmIGJsb2NrcyBYIGFuZCBZIHN0YXJ0IGluCi10aGUg
cmFuZ2UgWyAwS0IgLi4gMktCLTEgXSwgYWxsIG9mIHRoZSBrZXlzIGluIFggYW5kIFkgd2lsbCBi
ZQotY29udmVydGVkIHRvIGEgZmlsdGVyIGJ5IGNhbGxpbmcgRmlsdGVyUG9saWN5OjpDcmVhdGVG
aWx0ZXIoKSwgYW5kIHRoZQotcmVzdWx0aW5nIGZpbHRlciB3aWxsIGJlIHN0b3JlZCBhcyB0aGUg
Zmlyc3QgZmlsdGVyIGluIHRoZSBmaWx0ZXIKLWJsb2NrLgotCi1UaGUgZmlsdGVyIGJsb2NrIGlz
IGZvcm1hdHRlZCBhcyBmb2xsb3dzOgotCi0gICAgIFtmaWx0ZXIgMF0KLSAgICAgW2ZpbHRlciAx
XQotICAgICBbZmlsdGVyIDJdCi0gICAgIC4uLgotICAgICBbZmlsdGVyIE4tMV0KLQotICAgICBb
b2Zmc2V0IG9mIGZpbHRlciAwXSAgICAgICAgICAgICAgICAgIDogNCBieXRlcwotICAgICBbb2Zm
c2V0IG9mIGZpbHRlciAxXSAgICAgICAgICAgICAgICAgIDogNCBieXRlcwotICAgICBbb2Zmc2V0
IG9mIGZpbHRlciAyXSAgICAgICAgICAgICAgICAgIDogNCBieXRlcwotICAgICAuLi4KLSAgICAg
W29mZnNldCBvZiBmaWx0ZXIgTi0xXSAgICAgICAgICAgICAgICA6IDQgYnl0ZXMKLQotICAgICBb
b2Zmc2V0IG9mIGJlZ2lubmluZyBvZiBvZmZzZXQgYXJyYXldIDogNCBieXRlcwotICAgICBsZyhi
YXNlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMSBieXRlCi0KLVRoZSBvZmZzZXQg
YXJyYXkgYXQgdGhlIGVuZCBvZiB0aGUgZmlsdGVyIGJsb2NrIGFsbG93cyBlZmZpY2llbnQKLW1h
cHBpbmcgZnJvbSBhIGRhdGEgYmxvY2sgb2Zmc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGZpbHRl
ci4KLQotInN0YXRzIiBNZXRhIEJsb2NrCi0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhpcyBtZXRh
IGJsb2NrIGNvbnRhaW5zIGEgYnVuY2ggb2Ygc3RhdHMuICBUaGUga2V5IGlzIHRoZSBuYW1lCi1v
ZiB0aGUgc3RhdGlzdGljLiAgVGhlIHZhbHVlIGNvbnRhaW5zIHRoZSBzdGF0aXN0aWMuCi1UT0RP
KHBvc3RyZWxlYXNlKTogcmVjb3JkIGZvbGxvd2luZyBzdGF0cy4KLSAgZGF0YSBzaXplCi0gIGlu
ZGV4IHNpemUKLSAga2V5IHNpemUgKHVuY29tcHJlc3NlZCkKLSAgdmFsdWUgc2l6ZSAodW5jb21w
cmVzc2VkKQotICBudW1iZXIgb2YgZW50cmllcwotICBudW1iZXIgb2YgZGF0YSBibG9ja3MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaGVscGVycy9tZW1lbnYvbWVtZW52
LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9oZWxwZXJzL21lbWVudi9tZW1lbnYuY2MK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NzlkZTEuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9oZWxwZXJzL21lbWVudi9tZW1lbnYuY2MKKysrIC9kZXYv
bnVsbApAQCAtMSwzODQgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERC
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2Yg
Y29udHJpYnV0b3JzLgotCi0jaW5jbHVkZSAiaGVscGVycy9tZW1lbnYvbWVtZW52LmgiCi0KLSNp
bmNsdWRlICJsZXZlbGRiL2Vudi5oIgotI2luY2x1ZGUgImxldmVsZGIvc3RhdHVzLmgiCi0jaW5j
bHVkZSAicG9ydC9wb3J0LmgiCi0jaW5jbHVkZSAidXRpbC9tdXRleGxvY2suaCIKLSNpbmNsdWRl
IDxtYXA+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUg
PHZlY3Rvcj4KLQotbmFtZXNwYWNlIGxldmVsZGIgewotCi1uYW1lc3BhY2UgewotCi1jbGFzcyBG
aWxlU3RhdGUgewotIHB1YmxpYzoKLSAgLy8gRmlsZVN0YXRlcyBhcmUgcmVmZXJlbmNlIGNvdW50
ZWQuIFRoZSBpbml0aWFsIHJlZmVyZW5jZSBjb3VudCBpcyB6ZXJvCi0gIC8vIGFuZCB0aGUgY2Fs
bGVyIG11c3QgY2FsbCBSZWYoKSBhdCBsZWFzdCBvbmNlLgotICBGaWxlU3RhdGUoKSA6IHJlZnNf
KDApLCBzaXplXygwKSB7fQotCi0gIC8vIEluY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQuCi0g
IHZvaWQgUmVmKCkgewotICAgIE11dGV4TG9jayBsb2NrKCZyZWZzX211dGV4Xyk7Ci0gICAgKyty
ZWZzXzsKLSAgfQotCi0gIC8vIERlY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQuIERlbGV0ZSBp
ZiB0aGlzIGlzIHRoZSBsYXN0IHJlZmVyZW5jZS4KLSAgdm9pZCBVbnJlZigpIHsKLSAgICBib29s
IGRvX2RlbGV0ZSA9IGZhbHNlOwotCi0gICAgewotICAgICAgTXV0ZXhMb2NrIGxvY2soJnJlZnNf
bXV0ZXhfKTsKLSAgICAgIC0tcmVmc187Ci0gICAgICBhc3NlcnQocmVmc18gPj0gMCk7Ci0gICAg
ICBpZiAocmVmc18gPD0gMCkgewotICAgICAgICBkb19kZWxldGUgPSB0cnVlOwotICAgICAgfQot
ICAgIH0KLQotICAgIGlmIChkb19kZWxldGUpIHsKLSAgICAgIGRlbGV0ZSB0aGlzOwotICAgIH0K
LSAgfQotCi0gIHVpbnQ2NF90IFNpemUoKSBjb25zdCB7IHJldHVybiBzaXplXzsgfQotCi0gIFN0
YXR1cyBSZWFkKHVpbnQ2NF90IG9mZnNldCwgc2l6ZV90IG4sIFNsaWNlKiByZXN1bHQsIGNoYXIq
IHNjcmF0Y2gpIGNvbnN0IHsKLSAgICBpZiAob2Zmc2V0ID4gc2l6ZV8pIHsKLSAgICAgIHJldHVy
biBTdGF0dXM6OklPRXJyb3IoIk9mZnNldCBncmVhdGVyIHRoYW4gZmlsZSBzaXplLiIpOwotICAg
IH0KLSAgICBjb25zdCB1aW50NjRfdCBhdmFpbGFibGUgPSBzaXplXyAtIG9mZnNldDsKLSAgICBp
ZiAobiA+IGF2YWlsYWJsZSkgewotICAgICAgbiA9IGF2YWlsYWJsZTsKLSAgICB9Ci0gICAgaWYg
KG4gPT0gMCkgewotICAgICAgKnJlc3VsdCA9IFNsaWNlKCk7Ci0gICAgICByZXR1cm4gU3RhdHVz
OjpPSygpOwotICAgIH0KLQotICAgIHNpemVfdCBibG9jayA9IG9mZnNldCAvIGtCbG9ja1NpemU7
Ci0gICAgc2l6ZV90IGJsb2NrX29mZnNldCA9IG9mZnNldCAlIGtCbG9ja1NpemU7Ci0KLSAgICBp
ZiAobiA8PSBrQmxvY2tTaXplIC0gYmxvY2tfb2Zmc2V0KSB7Ci0gICAgICAvLyBUaGUgcmVxdWVz
dGVkIGJ5dGVzIGFyZSBhbGwgaW4gdGhlIGZpcnN0IGJsb2NrLgotICAgICAgKnJlc3VsdCA9IFNs
aWNlKGJsb2Nrc19bYmxvY2tdICsgYmxvY2tfb2Zmc2V0LCBuKTsKLSAgICAgIHJldHVybiBTdGF0
dXM6Ok9LKCk7Ci0gICAgfQotCi0gICAgc2l6ZV90IGJ5dGVzX3RvX2NvcHkgPSBuOwotICAgIGNo
YXIqIGRzdCA9IHNjcmF0Y2g7Ci0KLSAgICB3aGlsZSAoYnl0ZXNfdG9fY29weSA+IDApIHsKLSAg
ICAgIHNpemVfdCBhdmFpbCA9IGtCbG9ja1NpemUgLSBibG9ja19vZmZzZXQ7Ci0gICAgICBpZiAo
YXZhaWwgPiBieXRlc190b19jb3B5KSB7Ci0gICAgICAgIGF2YWlsID0gYnl0ZXNfdG9fY29weTsK
LSAgICAgIH0KLSAgICAgIG1lbWNweShkc3QsIGJsb2Nrc19bYmxvY2tdICsgYmxvY2tfb2Zmc2V0
LCBhdmFpbCk7Ci0KLSAgICAgIGJ5dGVzX3RvX2NvcHkgLT0gYXZhaWw7Ci0gICAgICBkc3QgKz0g
YXZhaWw7Ci0gICAgICBibG9jaysrOwotICAgICAgYmxvY2tfb2Zmc2V0ID0gMDsKLSAgICB9Ci0K
LSAgICAqcmVzdWx0ID0gU2xpY2Uoc2NyYXRjaCwgbik7Ci0gICAgcmV0dXJuIFN0YXR1czo6T0so
KTsKLSAgfQotCi0gIFN0YXR1cyBBcHBlbmQoY29uc3QgU2xpY2UmIGRhdGEpIHsKLSAgICBjb25z
dCBjaGFyKiBzcmMgPSBkYXRhLmRhdGEoKTsKLSAgICBzaXplX3Qgc3JjX2xlbiA9IGRhdGEuc2l6
ZSgpOwotCi0gICAgd2hpbGUgKHNyY19sZW4gPiAwKSB7Ci0gICAgICBzaXplX3QgYXZhaWw7Ci0g
ICAgICBzaXplX3Qgb2Zmc2V0ID0gc2l6ZV8gJSBrQmxvY2tTaXplOwotCi0gICAgICBpZiAob2Zm
c2V0ICE9IDApIHsKLSAgICAgICAgLy8gVGhlcmUgaXMgc29tZSByb29tIGluIHRoZSBsYXN0IGJs
b2NrLgotICAgICAgICBhdmFpbCA9IGtCbG9ja1NpemUgLSBvZmZzZXQ7Ci0gICAgICB9IGVsc2Ug
ewotICAgICAgICAvLyBObyByb29tIGluIHRoZSBsYXN0IGJsb2NrOyBwdXNoIG5ldyBvbmUuCi0g
ICAgICAgIGJsb2Nrc18ucHVzaF9iYWNrKG5ldyBjaGFyW2tCbG9ja1NpemVdKTsKLSAgICAgICAg
YXZhaWwgPSBrQmxvY2tTaXplOwotICAgICAgfQotCi0gICAgICBpZiAoYXZhaWwgPiBzcmNfbGVu
KSB7Ci0gICAgICAgIGF2YWlsID0gc3JjX2xlbjsKLSAgICAgIH0KLSAgICAgIG1lbWNweShibG9j
a3NfLmJhY2soKSArIG9mZnNldCwgc3JjLCBhdmFpbCk7Ci0gICAgICBzcmNfbGVuIC09IGF2YWls
OwotICAgICAgc3JjICs9IGF2YWlsOwotICAgICAgc2l6ZV8gKz0gYXZhaWw7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIFN0YXR1czo6T0soKTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgLy8gUHJpdmF0ZSBz
aW5jZSBvbmx5IFVucmVmKCkgc2hvdWxkIGJlIHVzZWQgdG8gZGVsZXRlIGl0LgotICB+RmlsZVN0
YXRlKCkgewotICAgIGZvciAoc3RkOjp2ZWN0b3I8Y2hhcio+OjppdGVyYXRvciBpID0gYmxvY2tz
Xy5iZWdpbigpOyBpICE9IGJsb2Nrc18uZW5kKCk7Ci0gICAgICAgICArK2kpIHsKLSAgICAgIGRl
bGV0ZSBbXSAqaTsKLSAgICB9Ci0gIH0KLQotICAvLyBObyBjb3B5aW5nIGFsbG93ZWQuCi0gIEZp
bGVTdGF0ZShjb25zdCBGaWxlU3RhdGUmKTsKLSAgdm9pZCBvcGVyYXRvcj0oY29uc3QgRmlsZVN0
YXRlJik7Ci0KLSAgcG9ydDo6TXV0ZXggcmVmc19tdXRleF87Ci0gIGludCByZWZzXzsgIC8vIFBy
b3RlY3RlZCBieSByZWZzX211dGV4XzsKLQotICAvLyBUaGUgZm9sbG93aW5nIGZpZWxkcyBhcmUg
bm90IHByb3RlY3RlZCBieSBhbnkgbXV0ZXguIFRoZXkgYXJlIG9ubHkgbXV0YWJsZQotICAvLyB3
aGlsZSB0aGUgZmlsZSBpcyBiZWluZyB3cml0dGVuLCBhbmQgY29uY3VycmVudCBhY2Nlc3MgaXMg
bm90IGFsbG93ZWQKLSAgLy8gdG8gd3JpdGFibGUgZmlsZXMuCi0gIHN0ZDo6dmVjdG9yPGNoYXIq
PiBibG9ja3NfOwotICB1aW50NjRfdCBzaXplXzsKLQotICBlbnVtIHsga0Jsb2NrU2l6ZSA9IDgg
KiAxMDI0IH07Ci19OwotCi1jbGFzcyBTZXF1ZW50aWFsRmlsZUltcGwgOiBwdWJsaWMgU2VxdWVu
dGlhbEZpbGUgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgU2VxdWVudGlhbEZpbGVJbXBsKEZpbGVT
dGF0ZSogZmlsZSkgOiBmaWxlXyhmaWxlKSwgcG9zXygwKSB7Ci0gICAgZmlsZV8tPlJlZigpOwot
ICB9Ci0KLSAgflNlcXVlbnRpYWxGaWxlSW1wbCgpIHsKLSAgICBmaWxlXy0+VW5yZWYoKTsKLSAg
fQotCi0gIHZpcnR1YWwgU3RhdHVzIFJlYWQoc2l6ZV90IG4sIFNsaWNlKiByZXN1bHQsIGNoYXIq
IHNjcmF0Y2gpIHsKLSAgICBTdGF0dXMgcyA9IGZpbGVfLT5SZWFkKHBvc18sIG4sIHJlc3VsdCwg
c2NyYXRjaCk7Ci0gICAgaWYgKHMub2soKSkgewotICAgICAgcG9zXyArPSByZXN1bHQtPnNpemUo
KTsKLSAgICB9Ci0gICAgcmV0dXJuIHM7Ci0gIH0KLQotICB2aXJ0dWFsIFN0YXR1cyBTa2lwKHVp
bnQ2NF90IG4pIHsKLSAgICBpZiAocG9zXyA+IGZpbGVfLT5TaXplKCkpIHsKLSAgICAgIHJldHVy
biBTdGF0dXM6OklPRXJyb3IoInBvc18gPiBmaWxlXy0+U2l6ZSgpIik7Ci0gICAgfQotICAgIGNv
bnN0IHNpemVfdCBhdmFpbGFibGUgPSBmaWxlXy0+U2l6ZSgpIC0gcG9zXzsKLSAgICBpZiAobiA+
IGF2YWlsYWJsZSkgewotICAgICAgbiA9IGF2YWlsYWJsZTsKLSAgICB9Ci0gICAgcG9zXyArPSBu
OwotICAgIHJldHVybiBTdGF0dXM6Ok9LKCk7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIEZpbGVTdGF0
ZSogZmlsZV87Ci0gIHNpemVfdCBwb3NfOwotfTsKLQotY2xhc3MgUmFuZG9tQWNjZXNzRmlsZUlt
cGwgOiBwdWJsaWMgUmFuZG9tQWNjZXNzRmlsZSB7Ci0gcHVibGljOgotICBleHBsaWNpdCBSYW5k
b21BY2Nlc3NGaWxlSW1wbChGaWxlU3RhdGUqIGZpbGUpIDogZmlsZV8oZmlsZSkgewotICAgIGZp
bGVfLT5SZWYoKTsKLSAgfQotCi0gIH5SYW5kb21BY2Nlc3NGaWxlSW1wbCgpIHsKLSAgICBmaWxl
Xy0+VW5yZWYoKTsKLSAgfQotCi0gIHZpcnR1YWwgU3RhdHVzIFJlYWQodWludDY0X3Qgb2Zmc2V0
LCBzaXplX3QgbiwgU2xpY2UqIHJlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBz
Y3JhdGNoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGZpbGVfLT5SZWFkKG9mZnNldCwgbiwgcmVzdWx0
LCBzY3JhdGNoKTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgRmlsZVN0YXRlKiBmaWxlXzsKLX07Ci0K
LWNsYXNzIFdyaXRhYmxlRmlsZUltcGwgOiBwdWJsaWMgV3JpdGFibGVGaWxlIHsKLSBwdWJsaWM6
Ci0gIFdyaXRhYmxlRmlsZUltcGwoRmlsZVN0YXRlKiBmaWxlKSA6IGZpbGVfKGZpbGUpIHsKLSAg
ICBmaWxlXy0+UmVmKCk7Ci0gIH0KLQotICB+V3JpdGFibGVGaWxlSW1wbCgpIHsKLSAgICBmaWxl
Xy0+VW5yZWYoKTsKLSAgfQotCi0gIHZpcnR1YWwgU3RhdHVzIEFwcGVuZChjb25zdCBTbGljZSYg
ZGF0YSkgewotICAgIHJldHVybiBmaWxlXy0+QXBwZW5kKGRhdGEpOwotICB9Ci0KLSAgdmlydHVh
bCBTdGF0dXMgQ2xvc2UoKSB7IHJldHVybiBTdGF0dXM6Ok9LKCk7IH0KLSAgdmlydHVhbCBTdGF0
dXMgRmx1c2goKSB7IHJldHVybiBTdGF0dXM6Ok9LKCk7IH0KLSAgdmlydHVhbCBTdGF0dXMgU3lu
YygpIHsgcmV0dXJuIFN0YXR1czo6T0soKTsgfQotCi0gcHJpdmF0ZToKLSAgRmlsZVN0YXRlKiBm
aWxlXzsKLX07Ci0KLWNsYXNzIE5vT3BMb2dnZXIgOiBwdWJsaWMgTG9nZ2VyIHsKLSBwdWJsaWM6
Ci0gIHZpcnR1YWwgdm9pZCBMb2d2KGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBhcCkgeyB9
Ci19OwotCi1jbGFzcyBJbk1lbW9yeUVudiA6IHB1YmxpYyBFbnZXcmFwcGVyIHsKLSBwdWJsaWM6
Ci0gIGV4cGxpY2l0IEluTWVtb3J5RW52KEVudiogYmFzZV9lbnYpIDogRW52V3JhcHBlcihiYXNl
X2VudikgeyB9Ci0KLSAgdmlydHVhbCB+SW5NZW1vcnlFbnYoKSB7Ci0gICAgZm9yIChGaWxlU3lz
dGVtOjppdGVyYXRvciBpID0gZmlsZV9tYXBfLmJlZ2luKCk7IGkgIT0gZmlsZV9tYXBfLmVuZCgp
OyArK2kpewotICAgICAgaS0+c2Vjb25kLT5VbnJlZigpOwotICAgIH0KLSAgfQotCi0gIC8vIFBh
cnRpYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVudiBpbnRlcmZhY2UuCi0gIHZpcnR1YWwgU3Rh
dHVzIE5ld1NlcXVlbnRpYWxGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VxdWVudGlhbEZpbGUqKiByZXN1bHQpIHsKLSAg
ICBNdXRleExvY2sgbG9jaygmbXV0ZXhfKTsKLSAgICBpZiAoZmlsZV9tYXBfLmZpbmQoZm5hbWUp
ID09IGZpbGVfbWFwXy5lbmQoKSkgewotICAgICAgKnJlc3VsdCA9IE5VTEw7Ci0gICAgICByZXR1
cm4gU3RhdHVzOjpJT0Vycm9yKGZuYW1lLCAiRmlsZSBub3QgZm91bmQiKTsKLSAgICB9Ci0KLSAg
ICAqcmVzdWx0ID0gbmV3IFNlcXVlbnRpYWxGaWxlSW1wbChmaWxlX21hcF9bZm5hbWVdKTsKLSAg
ICByZXR1cm4gU3RhdHVzOjpPSygpOwotICB9Ci0KLSAgdmlydHVhbCBTdGF0dXMgTmV3UmFuZG9t
QWNjZXNzRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUmFuZG9tQWNjZXNzRmlsZSoqIHJlc3VsdCkgewotICAgIE11dGV4
TG9jayBsb2NrKCZtdXRleF8pOwotICAgIGlmIChmaWxlX21hcF8uZmluZChmbmFtZSkgPT0gZmls
ZV9tYXBfLmVuZCgpKSB7Ci0gICAgICAqcmVzdWx0ID0gTlVMTDsKLSAgICAgIHJldHVybiBTdGF0
dXM6OklPRXJyb3IoZm5hbWUsICJGaWxlIG5vdCBmb3VuZCIpOwotICAgIH0KLQotICAgICpyZXN1
bHQgPSBuZXcgUmFuZG9tQWNjZXNzRmlsZUltcGwoZmlsZV9tYXBfW2ZuYW1lXSk7Ci0gICAgcmV0
dXJuIFN0YXR1czo6T0soKTsKLSAgfQotCi0gIHZpcnR1YWwgU3RhdHVzIE5ld1dyaXRhYmxlRmls
ZShjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXcml0YWJsZUZpbGUqKiByZXN1bHQpIHsKLSAgICBNdXRleExvY2sgbG9jaygmbXV0ZXhf
KTsKLSAgICBpZiAoZmlsZV9tYXBfLmZpbmQoZm5hbWUpICE9IGZpbGVfbWFwXy5lbmQoKSkgewot
ICAgICAgRGVsZXRlRmlsZUludGVybmFsKGZuYW1lKTsKLSAgICB9Ci0KLSAgICBGaWxlU3RhdGUq
IGZpbGUgPSBuZXcgRmlsZVN0YXRlKCk7Ci0gICAgZmlsZS0+UmVmKCk7Ci0gICAgZmlsZV9tYXBf
W2ZuYW1lXSA9IGZpbGU7Ci0KLSAgICAqcmVzdWx0ID0gbmV3IFdyaXRhYmxlRmlsZUltcGwoZmls
ZSk7Ci0gICAgcmV0dXJuIFN0YXR1czo6T0soKTsKLSAgfQotCi0gIHZpcnR1YWwgYm9vbCBGaWxl
RXhpc3RzKGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSkgewotICAgIE11dGV4TG9jayBsb2NrKCZt
dXRleF8pOwotICAgIHJldHVybiBmaWxlX21hcF8uZmluZChmbmFtZSkgIT0gZmlsZV9tYXBfLmVu
ZCgpOwotICB9Ci0KLSAgdmlydHVhbCBTdGF0dXMgR2V0Q2hpbGRyZW4oY29uc3Qgc3RkOjpzdHJp
bmcmIGRpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpz
dHJpbmc+KiByZXN1bHQpIHsKLSAgICBNdXRleExvY2sgbG9jaygmbXV0ZXhfKTsKLSAgICByZXN1
bHQtPmNsZWFyKCk7Ci0KLSAgICBmb3IgKEZpbGVTeXN0ZW06Oml0ZXJhdG9yIGkgPSBmaWxlX21h
cF8uYmVnaW4oKTsgaSAhPSBmaWxlX21hcF8uZW5kKCk7ICsraSl7Ci0gICAgICBjb25zdCBzdGQ6
OnN0cmluZyYgZmlsZW5hbWUgPSBpLT5maXJzdDsKLQotICAgICAgaWYgKGZpbGVuYW1lLnNpemUo
KSA+PSBkaXIuc2l6ZSgpICsgMSAmJiBmaWxlbmFtZVtkaXIuc2l6ZSgpXSA9PSAnLycgJiYKLSAg
ICAgICAgICBTbGljZShmaWxlbmFtZSkuc3RhcnRzX3dpdGgoU2xpY2UoZGlyKSkpIHsKLSAgICAg
ICAgcmVzdWx0LT5wdXNoX2JhY2soZmlsZW5hbWUuc3Vic3RyKGRpci5zaXplKCkgKyAxKSk7Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIFN0YXR1czo6T0soKTsKLSAgfQotCi0gIHZvaWQg
RGVsZXRlRmlsZUludGVybmFsKGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSkgewotICAgIGlmIChm
aWxlX21hcF8uZmluZChmbmFtZSkgPT0gZmlsZV9tYXBfLmVuZCgpKSB7Ci0gICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgZmlsZV9tYXBfW2ZuYW1lXS0+VW5yZWYoKTsKLSAgICBmaWxlX21hcF8u
ZXJhc2UoZm5hbWUpOwotICB9Ci0KLSAgdmlydHVhbCBTdGF0dXMgRGVsZXRlRmlsZShjb25zdCBz
dGQ6OnN0cmluZyYgZm5hbWUpIHsKLSAgICBNdXRleExvY2sgbG9jaygmbXV0ZXhfKTsKLSAgICBp
ZiAoZmlsZV9tYXBfLmZpbmQoZm5hbWUpID09IGZpbGVfbWFwXy5lbmQoKSkgewotICAgICAgcmV0
dXJuIFN0YXR1czo6SU9FcnJvcihmbmFtZSwgIkZpbGUgbm90IGZvdW5kIik7Ci0gICAgfQotCi0g
ICAgRGVsZXRlRmlsZUludGVybmFsKGZuYW1lKTsKLSAgICByZXR1cm4gU3RhdHVzOjpPSygpOwot
ICB9Ci0KLSAgdmlydHVhbCBTdGF0dXMgQ3JlYXRlRGlyKGNvbnN0IHN0ZDo6c3RyaW5nJiBkaXJu
YW1lKSB7Ci0gICAgcmV0dXJuIFN0YXR1czo6T0soKTsKLSAgfQotCi0gIHZpcnR1YWwgU3RhdHVz
IERlbGV0ZURpcihjb25zdCBzdGQ6OnN0cmluZyYgZGlybmFtZSkgewotICAgIHJldHVybiBTdGF0
dXM6Ok9LKCk7Ci0gIH0KLQotICB2aXJ0dWFsIFN0YXR1cyBHZXRGaWxlU2l6ZShjb25zdCBzdGQ6
OnN0cmluZyYgZm5hbWUsIHVpbnQ2NF90KiBmaWxlX3NpemUpIHsKLSAgICBNdXRleExvY2sgbG9j
aygmbXV0ZXhfKTsKLSAgICBpZiAoZmlsZV9tYXBfLmZpbmQoZm5hbWUpID09IGZpbGVfbWFwXy5l
bmQoKSkgewotICAgICAgcmV0dXJuIFN0YXR1czo6SU9FcnJvcihmbmFtZSwgIkZpbGUgbm90IGZv
dW5kIik7Ci0gICAgfQotCi0gICAgKmZpbGVfc2l6ZSA9IGZpbGVfbWFwX1tmbmFtZV0tPlNpemUo
KTsKLSAgICByZXR1cm4gU3RhdHVzOjpPSygpOwotICB9Ci0KLSAgdmlydHVhbCBTdGF0dXMgUmVu
YW1lRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXQpIHsKLSAgICBNdXRleExvY2sgbG9jaygmbXV0
ZXhfKTsKLSAgICBpZiAoZmlsZV9tYXBfLmZpbmQoc3JjKSA9PSBmaWxlX21hcF8uZW5kKCkpIHsK
LSAgICAgIHJldHVybiBTdGF0dXM6OklPRXJyb3Ioc3JjLCAiRmlsZSBub3QgZm91bmQiKTsKLSAg
ICB9Ci0KLSAgICBEZWxldGVGaWxlSW50ZXJuYWwodGFyZ2V0KTsKLSAgICBmaWxlX21hcF9bdGFy
Z2V0XSA9IGZpbGVfbWFwX1tzcmNdOwotICAgIGZpbGVfbWFwXy5lcmFzZShzcmMpOwotICAgIHJl
dHVybiBTdGF0dXM6Ok9LKCk7Ci0gIH0KLQotICB2aXJ0dWFsIFN0YXR1cyBMb2NrRmlsZShjb25z
dCBzdGQ6OnN0cmluZyYgZm5hbWUsIEZpbGVMb2NrKiogbG9jaykgewotICAgICpsb2NrID0gbmV3
IEZpbGVMb2NrOwotICAgIHJldHVybiBTdGF0dXM6Ok9LKCk7Ci0gIH0KLQotICB2aXJ0dWFsIFN0
YXR1cyBVbmxvY2tGaWxlKEZpbGVMb2NrKiBsb2NrKSB7Ci0gICAgZGVsZXRlIGxvY2s7Ci0gICAg
cmV0dXJuIFN0YXR1czo6T0soKTsKLSAgfQotCi0gIHZpcnR1YWwgU3RhdHVzIEdldFRlc3REaXJl
Y3Rvcnkoc3RkOjpzdHJpbmcqIHBhdGgpIHsKLSAgICAqcGF0aCA9ICIvdGVzdCI7Ci0gICAgcmV0
dXJuIFN0YXR1czo6T0soKTsKLSAgfQotCi0gIHZpcnR1YWwgU3RhdHVzIE5ld0xvZ2dlcihjb25z
dCBzdGQ6OnN0cmluZyYgZm5hbWUsIExvZ2dlcioqIHJlc3VsdCkgewotICAgICpyZXN1bHQgPSBu
ZXcgTm9PcExvZ2dlcjsKLSAgICByZXR1cm4gU3RhdHVzOjpPSygpOwotICB9Ci0KLSBwcml2YXRl
OgotICAvLyBNYXAgZnJvbSBmaWxlbmFtZXMgdG8gRmlsZVN0YXRlIG9iamVjdHMsIHJlcHJlc2Vu
dGluZyBhIHNpbXBsZSBmaWxlIHN5c3RlbS4KLSAgdHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmlu
ZywgRmlsZVN0YXRlKj4gRmlsZVN5c3RlbTsKLSAgcG9ydDo6TXV0ZXggbXV0ZXhfOwotICBGaWxl
U3lzdGVtIGZpbGVfbWFwXzsgIC8vIFByb3RlY3RlZCBieSBtdXRleF8uCi19OwotCi19ICAvLyBu
YW1lc3BhY2UKLQotRW52KiBOZXdNZW1FbnYoRW52KiBiYXNlX2VudikgewotICByZXR1cm4gbmV3
IEluTWVtb3J5RW52KGJhc2VfZW52KTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaGVscGVycy9tZW1lbnYvbWVtZW52
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2hlbHBlcnMvbWVtZW52L21lbWVudi5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2I4OGRlLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvaGVscGVycy9tZW1lbnYvbWVtZW52LmgKKysrIC9kZXYvbnVs
bApAQCAtMSwyMCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250
cmlidXRvcnMuCi0KLSNpZm5kZWYgU1RPUkFHRV9MRVZFTERCX0hFTFBFUlNfTUVNRU5WX01FTUVO
Vl9IXwotI2RlZmluZSBTVE9SQUdFX0xFVkVMREJfSEVMUEVSU19NRU1FTlZfTUVNRU5WX0hfCi0K
LW5hbWVzcGFjZSBsZXZlbGRiIHsKLQotY2xhc3MgRW52OwotCi0vLyBSZXR1cm5zIGEgbmV3IGVu
dmlyb25tZW50IHRoYXQgc3RvcmVzIGl0cyBkYXRhIGluIG1lbW9yeSBhbmQgZGVsZWdhdGVzCi0v
LyBhbGwgbm9uLWZpbGUtc3RvcmFnZSB0YXNrcyB0byBiYXNlX2Vudi4gVGhlIGNhbGxlciBtdXN0
IGRlbGV0ZSB0aGUgcmVzdWx0Ci0vLyB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuCi0vLyAq
YmFzZV9lbnYgbXVzdCByZW1haW4gbGl2ZSB3aGlsZSB0aGUgcmVzdWx0IGlzIGluIHVzZS4KLUVu
diogTmV3TWVtRW52KEVudiogYmFzZV9lbnYpOwotCi19ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgot
Ci0jZW5kaWYgIC8vIFNUT1JBR0VfTEVWRUxEQl9IRUxQRVJTX01FTUVOVl9NRU1FTlZfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaGVscGVycy9tZW1lbnYvbWVtZW52
X3Rlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2hlbHBlcnMvbWVtZW52L21lbWVu
dl90ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDQzMTBmLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaGVscGVycy9tZW1lbnYvbWVtZW52X3Rl
c3QuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyMzIgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAy
MDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmls
ZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgotCi0jaW5jbHVkZSAiaGVscGVycy9tZW1lbnYv
bWVtZW52LmgiCi0KLSNpbmNsdWRlICJkYi9kYl9pbXBsLmgiCi0jaW5jbHVkZSAibGV2ZWxkYi9k
Yi5oIgotI2luY2x1ZGUgImxldmVsZGIvZW52LmgiCi0jaW5jbHVkZSAidXRpbC90ZXN0aGFybmVz
cy5oIgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLW5hbWVzcGFjZSBs
ZXZlbGRiIHsKLQotY2xhc3MgTWVtRW52VGVzdCB7Ci0gcHVibGljOgotICBFbnYqIGVudl87Ci0K
LSAgTWVtRW52VGVzdCgpCi0gICAgICA6IGVudl8oTmV3TWVtRW52KEVudjo6RGVmYXVsdCgpKSkg
ewotICB9Ci0gIH5NZW1FbnZUZXN0KCkgewotICAgIGRlbGV0ZSBlbnZfOwotICB9Ci19OwotCi1U
RVNUKE1lbUVudlRlc3QsIEJhc2ljcykgewotICB1aW50NjRfdCBmaWxlX3NpemU7Ci0gIFdyaXRh
YmxlRmlsZSogd3JpdGFibGVfZmlsZTsKLSAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNoaWxk
cmVuOwotCi0gIEFTU0VSVF9PSyhlbnZfLT5DcmVhdGVEaXIoIi9kaXIiKSk7Ci0KLSAgLy8gQ2hl
Y2sgdGhhdCB0aGUgZGlyZWN0b3J5IGlzIGVtcHR5LgotICBBU1NFUlRfVFJVRSghZW52Xy0+Rmls
ZUV4aXN0cygiL2Rpci9ub25fZXhpc3RlbnQiKSk7Ci0gIEFTU0VSVF9UUlVFKCFlbnZfLT5HZXRG
aWxlU2l6ZSgiL2Rpci9ub25fZXhpc3RlbnQiLCAmZmlsZV9zaXplKS5vaygpKTsKLSAgQVNTRVJU
X09LKGVudl8tPkdldENoaWxkcmVuKCIvZGlyIiwgJmNoaWxkcmVuKSk7Ci0gIEFTU0VSVF9FUSgw
LCBjaGlsZHJlbi5zaXplKCkpOwotCi0gIC8vIENyZWF0ZSBhIGZpbGUuCi0gIEFTU0VSVF9PSyhl
bnZfLT5OZXdXcml0YWJsZUZpbGUoIi9kaXIvZiIsICZ3cml0YWJsZV9maWxlKSk7Ci0gIGRlbGV0
ZSB3cml0YWJsZV9maWxlOwotCi0gIC8vIENoZWNrIHRoYXQgdGhlIGZpbGUgZXhpc3RzLgotICBB
U1NFUlRfVFJVRShlbnZfLT5GaWxlRXhpc3RzKCIvZGlyL2YiKSk7Ci0gIEFTU0VSVF9PSyhlbnZf
LT5HZXRGaWxlU2l6ZSgiL2Rpci9mIiwgJmZpbGVfc2l6ZSkpOwotICBBU1NFUlRfRVEoMCwgZmls
ZV9zaXplKTsKLSAgQVNTRVJUX09LKGVudl8tPkdldENoaWxkcmVuKCIvZGlyIiwgJmNoaWxkcmVu
KSk7Ci0gIEFTU0VSVF9FUSgxLCBjaGlsZHJlbi5zaXplKCkpOwotICBBU1NFUlRfRVEoImYiLCBj
aGlsZHJlblswXSk7Ci0KLSAgLy8gV3JpdGUgdG8gdGhlIGZpbGUuCi0gIEFTU0VSVF9PSyhlbnZf
LT5OZXdXcml0YWJsZUZpbGUoIi9kaXIvZiIsICZ3cml0YWJsZV9maWxlKSk7Ci0gIEFTU0VSVF9P
Syh3cml0YWJsZV9maWxlLT5BcHBlbmQoImFiYyIpKTsKLSAgZGVsZXRlIHdyaXRhYmxlX2ZpbGU7
Ci0KLSAgLy8gQ2hlY2sgZm9yIGV4cGVjdGVkIHNpemUuCi0gIEFTU0VSVF9PSyhlbnZfLT5HZXRG
aWxlU2l6ZSgiL2Rpci9mIiwgJmZpbGVfc2l6ZSkpOwotICBBU1NFUlRfRVEoMywgZmlsZV9zaXpl
KTsKLQotICAvLyBDaGVjayB0aGF0IHJlbmFtaW5nIHdvcmtzLgotICBBU1NFUlRfVFJVRSghZW52
Xy0+UmVuYW1lRmlsZSgiL2Rpci9ub25fZXhpc3RlbnQiLCAiL2Rpci9nIikub2soKSk7Ci0gIEFT
U0VSVF9PSyhlbnZfLT5SZW5hbWVGaWxlKCIvZGlyL2YiLCAiL2Rpci9nIikpOwotICBBU1NFUlRf
VFJVRSghZW52Xy0+RmlsZUV4aXN0cygiL2Rpci9mIikpOwotICBBU1NFUlRfVFJVRShlbnZfLT5G
aWxlRXhpc3RzKCIvZGlyL2ciKSk7Ci0gIEFTU0VSVF9PSyhlbnZfLT5HZXRGaWxlU2l6ZSgiL2Rp
ci9nIiwgJmZpbGVfc2l6ZSkpOwotICBBU1NFUlRfRVEoMywgZmlsZV9zaXplKTsKLQotICAvLyBD
aGVjayB0aGF0IG9wZW5pbmcgbm9uLWV4aXN0ZW50IGZpbGUgZmFpbHMuCi0gIFNlcXVlbnRpYWxG
aWxlKiBzZXFfZmlsZTsKLSAgUmFuZG9tQWNjZXNzRmlsZSogcmFuZF9maWxlOwotICBBU1NFUlRf
VFJVRSghZW52Xy0+TmV3U2VxdWVudGlhbEZpbGUoIi9kaXIvbm9uX2V4aXN0ZW50IiwgJnNlcV9m
aWxlKS5vaygpKTsKLSAgQVNTRVJUX1RSVUUoIXNlcV9maWxlKTsKLSAgQVNTRVJUX1RSVUUoIWVu
dl8tPk5ld1JhbmRvbUFjY2Vzc0ZpbGUoIi9kaXIvbm9uX2V4aXN0ZW50IiwgJnJhbmRfZmlsZSku
b2soKSk7Ci0gIEFTU0VSVF9UUlVFKCFyYW5kX2ZpbGUpOwotCi0gIC8vIENoZWNrIHRoYXQgZGVs
ZXRpbmcgd29ya3MuCi0gIEFTU0VSVF9UUlVFKCFlbnZfLT5EZWxldGVGaWxlKCIvZGlyL25vbl9l
eGlzdGVudCIpLm9rKCkpOwotICBBU1NFUlRfT0soZW52Xy0+RGVsZXRlRmlsZSgiL2Rpci9nIikp
OwotICBBU1NFUlRfVFJVRSghZW52Xy0+RmlsZUV4aXN0cygiL2Rpci9nIikpOwotICBBU1NFUlRf
T0soZW52Xy0+R2V0Q2hpbGRyZW4oIi9kaXIiLCAmY2hpbGRyZW4pKTsKLSAgQVNTRVJUX0VRKDAs
IGNoaWxkcmVuLnNpemUoKSk7Ci0gIEFTU0VSVF9PSyhlbnZfLT5EZWxldGVEaXIoIi9kaXIiKSk7
Ci19Ci0KLVRFU1QoTWVtRW52VGVzdCwgUmVhZFdyaXRlKSB7Ci0gIFdyaXRhYmxlRmlsZSogd3Jp
dGFibGVfZmlsZTsKLSAgU2VxdWVudGlhbEZpbGUqIHNlcV9maWxlOwotICBSYW5kb21BY2Nlc3NG
aWxlKiByYW5kX2ZpbGU7Ci0gIFNsaWNlIHJlc3VsdDsKLSAgY2hhciBzY3JhdGNoWzEwMF07Ci0K
LSAgQVNTRVJUX09LKGVudl8tPkNyZWF0ZURpcigiL2RpciIpKTsKLQotICBBU1NFUlRfT0soZW52
Xy0+TmV3V3JpdGFibGVGaWxlKCIvZGlyL2YiLCAmd3JpdGFibGVfZmlsZSkpOwotICBBU1NFUlRf
T0sod3JpdGFibGVfZmlsZS0+QXBwZW5kKCJoZWxsbyAiKSk7Ci0gIEFTU0VSVF9PSyh3cml0YWJs
ZV9maWxlLT5BcHBlbmQoIndvcmxkIikpOwotICBkZWxldGUgd3JpdGFibGVfZmlsZTsKLQotICAv
LyBSZWFkIHNlcXVlbnRpYWxseS4KLSAgQVNTRVJUX09LKGVudl8tPk5ld1NlcXVlbnRpYWxGaWxl
KCIvZGlyL2YiLCAmc2VxX2ZpbGUpKTsKLSAgQVNTRVJUX09LKHNlcV9maWxlLT5SZWFkKDUsICZy
ZXN1bHQsIHNjcmF0Y2gpKTsgLy8gUmVhZCAiaGVsbG8iLgotICBBU1NFUlRfRVEoMCwgcmVzdWx0
LmNvbXBhcmUoImhlbGxvIikpOwotICBBU1NFUlRfT0soc2VxX2ZpbGUtPlNraXAoMSkpOwotICBB
U1NFUlRfT0soc2VxX2ZpbGUtPlJlYWQoMTAwMCwgJnJlc3VsdCwgc2NyYXRjaCkpOyAvLyBSZWFk
ICJ3b3JsZCIuCi0gIEFTU0VSVF9FUSgwLCByZXN1bHQuY29tcGFyZSgid29ybGQiKSk7Ci0gIEFT
U0VSVF9PSyhzZXFfZmlsZS0+UmVhZCgxMDAwLCAmcmVzdWx0LCBzY3JhdGNoKSk7IC8vIFRyeSBy
ZWFkaW5nIHBhc3QgRU9GLgotICBBU1NFUlRfRVEoMCwgcmVzdWx0LnNpemUoKSk7Ci0gIEFTU0VS
VF9PSyhzZXFfZmlsZS0+U2tpcCgxMDApKTsgLy8gVHJ5IHRvIHNraXAgcGFzdCBlbmQgb2YgZmls
ZS4KLSAgQVNTRVJUX09LKHNlcV9maWxlLT5SZWFkKDEwMDAsICZyZXN1bHQsIHNjcmF0Y2gpKTsK
LSAgQVNTRVJUX0VRKDAsIHJlc3VsdC5zaXplKCkpOwotICBkZWxldGUgc2VxX2ZpbGU7Ci0KLSAg
Ly8gUmFuZG9tIHJlYWRzLgotICBBU1NFUlRfT0soZW52Xy0+TmV3UmFuZG9tQWNjZXNzRmlsZSgi
L2Rpci9mIiwgJnJhbmRfZmlsZSkpOwotICBBU1NFUlRfT0socmFuZF9maWxlLT5SZWFkKDYsIDUs
ICZyZXN1bHQsIHNjcmF0Y2gpKTsgLy8gUmVhZCAid29ybGQiLgotICBBU1NFUlRfRVEoMCwgcmVz
dWx0LmNvbXBhcmUoIndvcmxkIikpOwotICBBU1NFUlRfT0socmFuZF9maWxlLT5SZWFkKDAsIDUs
ICZyZXN1bHQsIHNjcmF0Y2gpKTsgLy8gUmVhZCAiaGVsbG8iLgotICBBU1NFUlRfRVEoMCwgcmVz
dWx0LmNvbXBhcmUoImhlbGxvIikpOwotICBBU1NFUlRfT0socmFuZF9maWxlLT5SZWFkKDEwLCAx
MDAsICZyZXN1bHQsIHNjcmF0Y2gpKTsgLy8gUmVhZCAiZCIuCi0gIEFTU0VSVF9FUSgwLCByZXN1
bHQuY29tcGFyZSgiZCIpKTsKLQotICAvLyBUb28gaGlnaCBvZmZzZXQuCi0gIEFTU0VSVF9UUlVF
KCFyYW5kX2ZpbGUtPlJlYWQoMTAwMCwgNSwgJnJlc3VsdCwgc2NyYXRjaCkub2soKSk7Ci0gIGRl
bGV0ZSByYW5kX2ZpbGU7Ci19Ci0KLVRFU1QoTWVtRW52VGVzdCwgTG9ja3MpIHsKLSAgRmlsZUxv
Y2sqIGxvY2s7Ci0KLSAgLy8gVGhlc2UgYXJlIG5vLW9wcywgYnV0IHdlIHRlc3QgdGhleSByZXR1
cm4gc3VjY2Vzcy4KLSAgQVNTRVJUX09LKGVudl8tPkxvY2tGaWxlKCJzb21lIGZpbGUiLCAmbG9j
aykpOwotICBBU1NFUlRfT0soZW52Xy0+VW5sb2NrRmlsZShsb2NrKSk7Ci19Ci0KLVRFU1QoTWVt
RW52VGVzdCwgTWlzYykgewotICBzdGQ6OnN0cmluZyB0ZXN0X2RpcjsKLSAgQVNTRVJUX09LKGVu
dl8tPkdldFRlc3REaXJlY3RvcnkoJnRlc3RfZGlyKSk7Ci0gIEFTU0VSVF9UUlVFKCF0ZXN0X2Rp
ci5lbXB0eSgpKTsKLQotICBXcml0YWJsZUZpbGUqIHdyaXRhYmxlX2ZpbGU7Ci0gIEFTU0VSVF9P
SyhlbnZfLT5OZXdXcml0YWJsZUZpbGUoIi9hL2IiLCAmd3JpdGFibGVfZmlsZSkpOwotCi0gIC8v
IFRoZXNlIGFyZSBuby1vcHMsIGJ1dCB3ZSB0ZXN0IHRoZXkgcmV0dXJuIHN1Y2Nlc3MuCi0gIEFT
U0VSVF9PSyh3cml0YWJsZV9maWxlLT5TeW5jKCkpOwotICBBU1NFUlRfT0sod3JpdGFibGVfZmls
ZS0+Rmx1c2goKSk7Ci0gIEFTU0VSVF9PSyh3cml0YWJsZV9maWxlLT5DbG9zZSgpKTsKLSAgZGVs
ZXRlIHdyaXRhYmxlX2ZpbGU7Ci19Ci0KLVRFU1QoTWVtRW52VGVzdCwgTGFyZ2VXcml0ZSkgewot
ICBjb25zdCBzaXplX3Qga1dyaXRlU2l6ZSA9IDMwMCAqIDEwMjQ7Ci0gIGNoYXIqIHNjcmF0Y2gg
PSBuZXcgY2hhcltrV3JpdGVTaXplICogMl07Ci0KLSAgc3RkOjpzdHJpbmcgd3JpdGVfZGF0YTsK
LSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrV3JpdGVTaXplOyArK2kpIHsKLSAgICB3cml0ZV9k
YXRhLmFwcGVuZCgxLCBzdGF0aWNfY2FzdDxjaGFyPihpKSk7Ci0gIH0KLQotICBXcml0YWJsZUZp
bGUqIHdyaXRhYmxlX2ZpbGU7Ci0gIEFTU0VSVF9PSyhlbnZfLT5OZXdXcml0YWJsZUZpbGUoIi9k
aXIvZiIsICZ3cml0YWJsZV9maWxlKSk7Ci0gIEFTU0VSVF9PSyh3cml0YWJsZV9maWxlLT5BcHBl
bmQoImZvbyIpKTsKLSAgQVNTRVJUX09LKHdyaXRhYmxlX2ZpbGUtPkFwcGVuZCh3cml0ZV9kYXRh
KSk7Ci0gIGRlbGV0ZSB3cml0YWJsZV9maWxlOwotCi0gIFNlcXVlbnRpYWxGaWxlKiBzZXFfZmls
ZTsKLSAgU2xpY2UgcmVzdWx0OwotICBBU1NFUlRfT0soZW52Xy0+TmV3U2VxdWVudGlhbEZpbGUo
Ii9kaXIvZiIsICZzZXFfZmlsZSkpOwotICBBU1NFUlRfT0soc2VxX2ZpbGUtPlJlYWQoMywgJnJl
c3VsdCwgc2NyYXRjaCkpOyAvLyBSZWFkICJmb28iLgotICBBU1NFUlRfRVEoMCwgcmVzdWx0LmNv
bXBhcmUoImZvbyIpKTsKLQotICBzaXplX3QgcmVhZCA9IDA7Ci0gIHN0ZDo6c3RyaW5nIHJlYWRf
ZGF0YTsKLSAgd2hpbGUgKHJlYWQgPCBrV3JpdGVTaXplKSB7Ci0gICAgQVNTRVJUX09LKHNlcV9m
aWxlLT5SZWFkKGtXcml0ZVNpemUgLSByZWFkLCAmcmVzdWx0LCBzY3JhdGNoKSk7Ci0gICAgcmVh
ZF9kYXRhLmFwcGVuZChyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKLSAgICByZWFkICs9
IHJlc3VsdC5zaXplKCk7Ci0gIH0KLSAgQVNTRVJUX1RSVUUod3JpdGVfZGF0YSA9PSByZWFkX2Rh
dGEpOwotICBkZWxldGUgc2VxX2ZpbGU7Ci0gIGRlbGV0ZSBbXSBzY3JhdGNoOwotfQotCi1URVNU
KE1lbUVudlRlc3QsIERCVGVzdCkgewotICBPcHRpb25zIG9wdGlvbnM7Ci0gIG9wdGlvbnMuY3Jl
YXRlX2lmX21pc3NpbmcgPSB0cnVlOwotICBvcHRpb25zLmVudiA9IGVudl87Ci0gIERCKiBkYjsK
LQotICBjb25zdCBTbGljZSBrZXlzW10gPSB7U2xpY2UoImFhYSIpLCBTbGljZSgiYmJiIiksIFNs
aWNlKCJjY2MiKX07Ci0gIGNvbnN0IFNsaWNlIHZhbHNbXSA9IHtTbGljZSgiZm9vIiksIFNsaWNl
KCJiYXIiKSwgU2xpY2UoImJheiIpfTsKLQotICBBU1NFUlRfT0soREI6Ok9wZW4ob3B0aW9ucywg
Ii9kaXIvZGIiLCAmZGIpKTsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAg
ICBBU1NFUlRfT0soZGItPlB1dChXcml0ZU9wdGlvbnMoKSwga2V5c1tpXSwgdmFsc1tpXSkpOwot
ICB9Ci0KLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICBzdGQ6OnN0cmlu
ZyByZXM7Ci0gICAgQVNTRVJUX09LKGRiLT5HZXQoUmVhZE9wdGlvbnMoKSwga2V5c1tpXSwgJnJl
cykpOwotICAgIEFTU0VSVF9UUlVFKHJlcyA9PSB2YWxzW2ldKTsKLSAgfQotCi0gIEl0ZXJhdG9y
KiBpdGVyYXRvciA9IGRiLT5OZXdJdGVyYXRvcihSZWFkT3B0aW9ucygpKTsKLSAgaXRlcmF0b3It
PlNlZWtUb0ZpcnN0KCk7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAg
QVNTRVJUX1RSVUUoaXRlcmF0b3ItPlZhbGlkKCkpOwotICAgIEFTU0VSVF9UUlVFKGtleXNbaV0g
PT0gaXRlcmF0b3ItPmtleSgpKTsKLSAgICBBU1NFUlRfVFJVRSh2YWxzW2ldID09IGl0ZXJhdG9y
LT52YWx1ZSgpKTsKLSAgICBpdGVyYXRvci0+TmV4dCgpOwotICB9Ci0gIEFTU0VSVF9UUlVFKCFp
dGVyYXRvci0+VmFsaWQoKSk7Ci0gIGRlbGV0ZSBpdGVyYXRvcjsKLQotICBEQkltcGwqIGRiaSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8REJJbXBsKj4oZGIpOwotICBBU1NFUlRfT0soZGJpLT5URVNUX0Nv
bXBhY3RNZW1UYWJsZSgpKTsKLQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkgewot
ICAgIHN0ZDo6c3RyaW5nIHJlczsKLSAgICBBU1NFUlRfT0soZGItPkdldChSZWFkT3B0aW9ucygp
LCBrZXlzW2ldLCAmcmVzKSk7Ci0gICAgQVNTRVJUX1RSVUUocmVzID09IHZhbHNbaV0pOwotICB9
Ci0KLSAgZGVsZXRlIGRiOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgotCi1pbnQgbWFp
bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKLSAgcmV0dXJuIGxldmVsZGI6OnRlc3Q6OlJ1bkFs
bFRlc3RzKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1
ZGUvbGV2ZWxkYi9jLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxk
Yi9jLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmYTU4ODYuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvYy5oCisrKyAvZGV2
L251bGwKQEAgLTEsMjkxICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxE
QiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0gIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBj
b250cmlidXRvcnMuCi0KLSAgQyBiaW5kaW5ncyBmb3IgbGV2ZWxkYi4gIE1heSBiZSB1c2VmdWwg
YXMgYSBzdGFibGUgQUJJIHRoYXQgY2FuIGJlCi0gIHVzZWQgYnkgcHJvZ3JhbXMgdGhhdCBrZWVw
IGxldmVsZGIgaW4gYSBzaGFyZWQgbGlicmFyeSwgb3IgZm9yCi0gIGEgSk5JIGFwaS4KLQotICBE
b2VzIG5vdCBzdXBwb3J0OgotICAuIGdldHRlcnMgZm9yIHRoZSBvcHRpb24gdHlwZXMKLSAgLiBj
dXN0b20gY29tcGFyYXRvcnMgdGhhdCBpbXBsZW1lbnQga2V5IHNob3J0ZW5pbmcKLSAgLiBjYXB0
dXJpbmcgcG9zdC13cml0ZS1zbmFwc2hvdAotICAuIGN1c3RvbSBpdGVyLCBkYiwgZW52LCBjYWNo
ZSBpbXBsZW1lbnRhdGlvbnMgdXNpbmcganVzdCB0aGUgQyBiaW5kaW5ncwotCi0gIFNvbWUgY29u
dmVudGlvbnM6Ci0KLSAgKDEpIFdlIGV4cG9zZSBqdXN0IG9wYXF1ZSBzdHJ1Y3QgcG9pbnRlcnMg
YW5kIGZ1bmN0aW9ucyB0byBjbGllbnRzLgotICBUaGlzIGFsbG93cyB1cyB0byBjaGFuZ2UgaW50
ZXJuYWwgcmVwcmVzZW50YXRpb25zIHdpdGhvdXQgaGF2aW5nIHRvCi0gIHJlY29tcGlsZSBjbGll
bnRzLgotCi0gICgyKSBGb3Igc2ltcGxpY2l0eSwgdGhlcmUgaXMgbm8gZXF1aXZhbGVudCB0byB0
aGUgU2xpY2UgdHlwZS4gIEluc3RlYWQsCi0gIHRoZSBjYWxsZXIgaGFzIHRvIHBhc3MgdGhlIHBv
aW50ZXIgYW5kIGxlbmd0aCBhcyBzZXBhcmF0ZQotICBhcmd1bWVudHMuCi0KLSAgKDMpIEVycm9y
cyBhcmUgcmVwcmVzZW50ZWQgYnkgYSBudWxsLXRlcm1pbmF0ZWQgYyBzdHJpbmcuICBOVUxMCi0g
IG1lYW5zIG5vIGVycm9yLiAgQWxsIG9wZXJhdGlvbnMgdGhhdCBjYW4gcmFpc2UgYW4gZXJyb3Ig
YXJlIHBhc3NlZAotICBhICJjaGFyKiogZXJycHRyIiBhcyB0aGUgbGFzdCBhcmd1bWVudC4gIE9u
ZSBvZiB0aGUgZm9sbG93aW5nIG11c3QKLSAgYmUgdHJ1ZSBvbiBlbnRyeToKLSAgICAgKmVycnB0
ciA9PSBOVUxMCi0gICAgICplcnJwdHIgcG9pbnRzIHRvIGEgbWFsbG9jKCllZCBudWxsLXRlcm1p
bmF0ZWQgZXJyb3IgbWVzc2FnZQotICAgICAgIChPbiBXaW5kb3dzLCAqZXJycHRyIG11c3QgaGF2
ZSBiZWVuIG1hbGxvYygpLWVkIGJ5IHRoaXMgbGlicmFyeS4pCi0gIE9uIHN1Y2Nlc3MsIGEgbGV2
ZWxkYiByb3V0aW5lIGxlYXZlcyAqZXJycHRyIHVuY2hhbmdlZC4KLSAgT24gZmFpbHVyZSwgbGV2
ZWxkYiBmcmVlcyB0aGUgb2xkIHZhbHVlIG9mICplcnJwdHIgYW5kCi0gIHNldCAqZXJycHRyIHRv
IGEgbWFsbG9jKCllZCBlcnJvciBtZXNzYWdlLgotCi0gICg0KSBCb29scyBoYXZlIHRoZSB0eXBl
IHVuc2lnbmVkIGNoYXIgKDAgPT0gZmFsc2U7IHJlc3QgPT0gdHJ1ZSkKLQotICAoNSkgQWxsIG9m
IHRoZSBwb2ludGVyIGFyZ3VtZW50cyBtdXN0IGJlIG5vbi1OVUxMLgotKi8KLQotI2lmbmRlZiBT
VE9SQUdFX0xFVkVMREJfSU5DTFVERV9DX0hfCi0jZGVmaW5lIFNUT1JBR0VfTEVWRUxEQl9JTkNM
VURFX0NfSF8KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi0j
aW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8c3RkaW50
Lmg+Ci0KLS8qIEV4cG9ydGVkIHR5cGVzICovCi0KLXR5cGVkZWYgc3RydWN0IGxldmVsZGJfdCAg
ICAgICAgICAgICAgIGxldmVsZGJfdDsKLXR5cGVkZWYgc3RydWN0IGxldmVsZGJfY2FjaGVfdCAg
ICAgICAgIGxldmVsZGJfY2FjaGVfdDsKLXR5cGVkZWYgc3RydWN0IGxldmVsZGJfY29tcGFyYXRv
cl90ICAgIGxldmVsZGJfY29tcGFyYXRvcl90OwotdHlwZWRlZiBzdHJ1Y3QgbGV2ZWxkYl9lbnZf
dCAgICAgICAgICAgbGV2ZWxkYl9lbnZfdDsKLXR5cGVkZWYgc3RydWN0IGxldmVsZGJfZmlsZWxv
Y2tfdCAgICAgIGxldmVsZGJfZmlsZWxvY2tfdDsKLXR5cGVkZWYgc3RydWN0IGxldmVsZGJfZmls
dGVycG9saWN5X3QgIGxldmVsZGJfZmlsdGVycG9saWN5X3Q7Ci10eXBlZGVmIHN0cnVjdCBsZXZl
bGRiX2l0ZXJhdG9yX3QgICAgICBsZXZlbGRiX2l0ZXJhdG9yX3Q7Ci10eXBlZGVmIHN0cnVjdCBs
ZXZlbGRiX2xvZ2dlcl90ICAgICAgICBsZXZlbGRiX2xvZ2dlcl90OwotdHlwZWRlZiBzdHJ1Y3Qg
bGV2ZWxkYl9vcHRpb25zX3QgICAgICAgbGV2ZWxkYl9vcHRpb25zX3Q7Ci10eXBlZGVmIHN0cnVj
dCBsZXZlbGRiX3JhbmRvbWZpbGVfdCAgICBsZXZlbGRiX3JhbmRvbWZpbGVfdDsKLXR5cGVkZWYg
c3RydWN0IGxldmVsZGJfcmVhZG9wdGlvbnNfdCAgIGxldmVsZGJfcmVhZG9wdGlvbnNfdDsKLXR5
cGVkZWYgc3RydWN0IGxldmVsZGJfc2VxZmlsZV90ICAgICAgIGxldmVsZGJfc2VxZmlsZV90Owot
dHlwZWRlZiBzdHJ1Y3QgbGV2ZWxkYl9zbmFwc2hvdF90ICAgICAgbGV2ZWxkYl9zbmFwc2hvdF90
OwotdHlwZWRlZiBzdHJ1Y3QgbGV2ZWxkYl93cml0YWJsZWZpbGVfdCAgbGV2ZWxkYl93cml0YWJs
ZWZpbGVfdDsKLXR5cGVkZWYgc3RydWN0IGxldmVsZGJfd3JpdGViYXRjaF90ICAgIGxldmVsZGJf
d3JpdGViYXRjaF90OwotdHlwZWRlZiBzdHJ1Y3QgbGV2ZWxkYl93cml0ZW9wdGlvbnNfdCAgbGV2
ZWxkYl93cml0ZW9wdGlvbnNfdDsKLQotLyogREIgb3BlcmF0aW9ucyAqLwotCi1leHRlcm4gbGV2
ZWxkYl90KiBsZXZlbGRiX29wZW4oCi0gICAgY29uc3QgbGV2ZWxkYl9vcHRpb25zX3QqIG9wdGlv
bnMsCi0gICAgY29uc3QgY2hhciogbmFtZSwKLSAgICBjaGFyKiogZXJycHRyKTsKLQotZXh0ZXJu
IHZvaWQgbGV2ZWxkYl9jbG9zZShsZXZlbGRiX3QqIGRiKTsKLQotZXh0ZXJuIHZvaWQgbGV2ZWxk
Yl9wdXQoCi0gICAgbGV2ZWxkYl90KiBkYiwKLSAgICBjb25zdCBsZXZlbGRiX3dyaXRlb3B0aW9u
c190KiBvcHRpb25zLAotICAgIGNvbnN0IGNoYXIqIGtleSwgc2l6ZV90IGtleWxlbiwKLSAgICBj
b25zdCBjaGFyKiB2YWwsIHNpemVfdCB2YWxsZW4sCi0gICAgY2hhcioqIGVycnB0cik7Ci0KLWV4
dGVybiB2b2lkIGxldmVsZGJfZGVsZXRlKAotICAgIGxldmVsZGJfdCogZGIsCi0gICAgY29uc3Qg
bGV2ZWxkYl93cml0ZW9wdGlvbnNfdCogb3B0aW9ucywKLSAgICBjb25zdCBjaGFyKiBrZXksIHNp
emVfdCBrZXlsZW4sCi0gICAgY2hhcioqIGVycnB0cik7Ci0KLWV4dGVybiB2b2lkIGxldmVsZGJf
d3JpdGUoCi0gICAgbGV2ZWxkYl90KiBkYiwKLSAgICBjb25zdCBsZXZlbGRiX3dyaXRlb3B0aW9u
c190KiBvcHRpb25zLAotICAgIGxldmVsZGJfd3JpdGViYXRjaF90KiBiYXRjaCwKLSAgICBjaGFy
KiogZXJycHRyKTsKLQotLyogUmV0dXJucyBOVUxMIGlmIG5vdCBmb3VuZC4gIEEgbWFsbG9jKCll
ZCBhcnJheSBvdGhlcndpc2UuCi0gICBTdG9yZXMgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgaW4g
KnZhbGxlbi4gKi8KLWV4dGVybiBjaGFyKiBsZXZlbGRiX2dldCgKLSAgICBsZXZlbGRiX3QqIGRi
LAotICAgIGNvbnN0IGxldmVsZGJfcmVhZG9wdGlvbnNfdCogb3B0aW9ucywKLSAgICBjb25zdCBj
aGFyKiBrZXksIHNpemVfdCBrZXlsZW4sCi0gICAgc2l6ZV90KiB2YWxsZW4sCi0gICAgY2hhcioq
IGVycnB0cik7Ci0KLWV4dGVybiBsZXZlbGRiX2l0ZXJhdG9yX3QqIGxldmVsZGJfY3JlYXRlX2l0
ZXJhdG9yKAotICAgIGxldmVsZGJfdCogZGIsCi0gICAgY29uc3QgbGV2ZWxkYl9yZWFkb3B0aW9u
c190KiBvcHRpb25zKTsKLQotZXh0ZXJuIGNvbnN0IGxldmVsZGJfc25hcHNob3RfdCogbGV2ZWxk
Yl9jcmVhdGVfc25hcHNob3QoCi0gICAgbGV2ZWxkYl90KiBkYik7Ci0KLWV4dGVybiB2b2lkIGxl
dmVsZGJfcmVsZWFzZV9zbmFwc2hvdCgKLSAgICBsZXZlbGRiX3QqIGRiLAotICAgIGNvbnN0IGxl
dmVsZGJfc25hcHNob3RfdCogc25hcHNob3QpOwotCi0vKiBSZXR1cm5zIE5VTEwgaWYgcHJvcGVy
dHkgbmFtZSBpcyB1bmtub3duLgotICAgRWxzZSByZXR1cm5zIGEgcG9pbnRlciB0byBhIG1hbGxv
YygpLWVkIG51bGwtdGVybWluYXRlZCB2YWx1ZS4gKi8KLWV4dGVybiBjaGFyKiBsZXZlbGRiX3By
b3BlcnR5X3ZhbHVlKAotICAgIGxldmVsZGJfdCogZGIsCi0gICAgY29uc3QgY2hhciogcHJvcG5h
bWUpOwotCi1leHRlcm4gdm9pZCBsZXZlbGRiX2FwcHJveGltYXRlX3NpemVzKAotICAgIGxldmVs
ZGJfdCogZGIsCi0gICAgaW50IG51bV9yYW5nZXMsCi0gICAgY29uc3QgY2hhciogY29uc3QqIHJh
bmdlX3N0YXJ0X2tleSwgY29uc3Qgc2l6ZV90KiByYW5nZV9zdGFydF9rZXlfbGVuLAotICAgIGNv
bnN0IGNoYXIqIGNvbnN0KiByYW5nZV9saW1pdF9rZXksIGNvbnN0IHNpemVfdCogcmFuZ2VfbGlt
aXRfa2V5X2xlbiwKLSAgICB1aW50NjRfdCogc2l6ZXMpOwotCi1leHRlcm4gdm9pZCBsZXZlbGRi
X2NvbXBhY3RfcmFuZ2UoCi0gICAgbGV2ZWxkYl90KiBkYiwKLSAgICBjb25zdCBjaGFyKiBzdGFy
dF9rZXksIHNpemVfdCBzdGFydF9rZXlfbGVuLAotICAgIGNvbnN0IGNoYXIqIGxpbWl0X2tleSwg
c2l6ZV90IGxpbWl0X2tleV9sZW4pOwotCi0vKiBNYW5hZ2VtZW50IG9wZXJhdGlvbnMgKi8KLQot
ZXh0ZXJuIHZvaWQgbGV2ZWxkYl9kZXN0cm95X2RiKAotICAgIGNvbnN0IGxldmVsZGJfb3B0aW9u
c190KiBvcHRpb25zLAotICAgIGNvbnN0IGNoYXIqIG5hbWUsCi0gICAgY2hhcioqIGVycnB0cik7
Ci0KLWV4dGVybiB2b2lkIGxldmVsZGJfcmVwYWlyX2RiKAotICAgIGNvbnN0IGxldmVsZGJfb3B0
aW9uc190KiBvcHRpb25zLAotICAgIGNvbnN0IGNoYXIqIG5hbWUsCi0gICAgY2hhcioqIGVycnB0
cik7Ci0KLS8qIEl0ZXJhdG9yICovCi0KLWV4dGVybiB2b2lkIGxldmVsZGJfaXRlcl9kZXN0cm95
KGxldmVsZGJfaXRlcmF0b3JfdCopOwotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgbGV2ZWxkYl9pdGVy
X3ZhbGlkKGNvbnN0IGxldmVsZGJfaXRlcmF0b3JfdCopOwotZXh0ZXJuIHZvaWQgbGV2ZWxkYl9p
dGVyX3NlZWtfdG9fZmlyc3QobGV2ZWxkYl9pdGVyYXRvcl90Kik7Ci1leHRlcm4gdm9pZCBsZXZl
bGRiX2l0ZXJfc2Vla190b19sYXN0KGxldmVsZGJfaXRlcmF0b3JfdCopOwotZXh0ZXJuIHZvaWQg
bGV2ZWxkYl9pdGVyX3NlZWsobGV2ZWxkYl9pdGVyYXRvcl90KiwgY29uc3QgY2hhciogaywgc2l6
ZV90IGtsZW4pOwotZXh0ZXJuIHZvaWQgbGV2ZWxkYl9pdGVyX25leHQobGV2ZWxkYl9pdGVyYXRv
cl90Kik7Ci1leHRlcm4gdm9pZCBsZXZlbGRiX2l0ZXJfcHJldihsZXZlbGRiX2l0ZXJhdG9yX3Qq
KTsKLWV4dGVybiBjb25zdCBjaGFyKiBsZXZlbGRiX2l0ZXJfa2V5KGNvbnN0IGxldmVsZGJfaXRl
cmF0b3JfdCosIHNpemVfdCoga2xlbik7Ci1leHRlcm4gY29uc3QgY2hhciogbGV2ZWxkYl9pdGVy
X3ZhbHVlKGNvbnN0IGxldmVsZGJfaXRlcmF0b3JfdCosIHNpemVfdCogdmxlbik7Ci1leHRlcm4g
dm9pZCBsZXZlbGRiX2l0ZXJfZ2V0X2Vycm9yKGNvbnN0IGxldmVsZGJfaXRlcmF0b3JfdCosIGNo
YXIqKiBlcnJwdHIpOwotCi0vKiBXcml0ZSBiYXRjaCAqLwotCi1leHRlcm4gbGV2ZWxkYl93cml0
ZWJhdGNoX3QqIGxldmVsZGJfd3JpdGViYXRjaF9jcmVhdGUoKTsKLWV4dGVybiB2b2lkIGxldmVs
ZGJfd3JpdGViYXRjaF9kZXN0cm95KGxldmVsZGJfd3JpdGViYXRjaF90Kik7Ci1leHRlcm4gdm9p
ZCBsZXZlbGRiX3dyaXRlYmF0Y2hfY2xlYXIobGV2ZWxkYl93cml0ZWJhdGNoX3QqKTsKLWV4dGVy
biB2b2lkIGxldmVsZGJfd3JpdGViYXRjaF9wdXQoCi0gICAgbGV2ZWxkYl93cml0ZWJhdGNoX3Qq
LAotICAgIGNvbnN0IGNoYXIqIGtleSwgc2l6ZV90IGtsZW4sCi0gICAgY29uc3QgY2hhciogdmFs
LCBzaXplX3Qgdmxlbik7Ci1leHRlcm4gdm9pZCBsZXZlbGRiX3dyaXRlYmF0Y2hfZGVsZXRlKAot
ICAgIGxldmVsZGJfd3JpdGViYXRjaF90KiwKLSAgICBjb25zdCBjaGFyKiBrZXksIHNpemVfdCBr
bGVuKTsKLWV4dGVybiB2b2lkIGxldmVsZGJfd3JpdGViYXRjaF9pdGVyYXRlKAotICAgIGxldmVs
ZGJfd3JpdGViYXRjaF90KiwKLSAgICB2b2lkKiBzdGF0ZSwKLSAgICB2b2lkICgqcHV0KSh2b2lk
KiwgY29uc3QgY2hhciogaywgc2l6ZV90IGtsZW4sIGNvbnN0IGNoYXIqIHYsIHNpemVfdCB2bGVu
KSwKLSAgICB2b2lkICgqZGVsZXRlZCkodm9pZCosIGNvbnN0IGNoYXIqIGssIHNpemVfdCBrbGVu
KSk7Ci0KLS8qIE9wdGlvbnMgKi8KLQotZXh0ZXJuIGxldmVsZGJfb3B0aW9uc190KiBsZXZlbGRi
X29wdGlvbnNfY3JlYXRlKCk7Ci1leHRlcm4gdm9pZCBsZXZlbGRiX29wdGlvbnNfZGVzdHJveShs
ZXZlbGRiX29wdGlvbnNfdCopOwotZXh0ZXJuIHZvaWQgbGV2ZWxkYl9vcHRpb25zX3NldF9jb21w
YXJhdG9yKAotICAgIGxldmVsZGJfb3B0aW9uc190KiwKLSAgICBsZXZlbGRiX2NvbXBhcmF0b3Jf
dCopOwotZXh0ZXJuIHZvaWQgbGV2ZWxkYl9vcHRpb25zX3NldF9maWx0ZXJfcG9saWN5KAotICAg
IGxldmVsZGJfb3B0aW9uc190KiwKLSAgICBsZXZlbGRiX2ZpbHRlcnBvbGljeV90Kik7Ci1leHRl
cm4gdm9pZCBsZXZlbGRiX29wdGlvbnNfc2V0X2NyZWF0ZV9pZl9taXNzaW5nKAotICAgIGxldmVs
ZGJfb3B0aW9uc190KiwgdW5zaWduZWQgY2hhcik7Ci1leHRlcm4gdm9pZCBsZXZlbGRiX29wdGlv
bnNfc2V0X2Vycm9yX2lmX2V4aXN0cygKLSAgICBsZXZlbGRiX29wdGlvbnNfdCosIHVuc2lnbmVk
IGNoYXIpOwotZXh0ZXJuIHZvaWQgbGV2ZWxkYl9vcHRpb25zX3NldF9wYXJhbm9pZF9jaGVja3Mo
Ci0gICAgbGV2ZWxkYl9vcHRpb25zX3QqLCB1bnNpZ25lZCBjaGFyKTsKLWV4dGVybiB2b2lkIGxl
dmVsZGJfb3B0aW9uc19zZXRfZW52KGxldmVsZGJfb3B0aW9uc190KiwgbGV2ZWxkYl9lbnZfdCop
OwotZXh0ZXJuIHZvaWQgbGV2ZWxkYl9vcHRpb25zX3NldF9pbmZvX2xvZyhsZXZlbGRiX29wdGlv
bnNfdCosIGxldmVsZGJfbG9nZ2VyX3QqKTsKLWV4dGVybiB2b2lkIGxldmVsZGJfb3B0aW9uc19z
ZXRfd3JpdGVfYnVmZmVyX3NpemUobGV2ZWxkYl9vcHRpb25zX3QqLCBzaXplX3QpOwotZXh0ZXJu
IHZvaWQgbGV2ZWxkYl9vcHRpb25zX3NldF9tYXhfb3Blbl9maWxlcyhsZXZlbGRiX29wdGlvbnNf
dCosIGludCk7Ci1leHRlcm4gdm9pZCBsZXZlbGRiX29wdGlvbnNfc2V0X2NhY2hlKGxldmVsZGJf
b3B0aW9uc190KiwgbGV2ZWxkYl9jYWNoZV90Kik7Ci1leHRlcm4gdm9pZCBsZXZlbGRiX29wdGlv
bnNfc2V0X2Jsb2NrX3NpemUobGV2ZWxkYl9vcHRpb25zX3QqLCBzaXplX3QpOwotZXh0ZXJuIHZv
aWQgbGV2ZWxkYl9vcHRpb25zX3NldF9ibG9ja19yZXN0YXJ0X2ludGVydmFsKGxldmVsZGJfb3B0
aW9uc190KiwgaW50KTsKLQotZW51bSB7Ci0gIGxldmVsZGJfbm9fY29tcHJlc3Npb24gPSAwLAot
ICBsZXZlbGRiX3NuYXBweV9jb21wcmVzc2lvbiA9IDEKLX07Ci1leHRlcm4gdm9pZCBsZXZlbGRi
X29wdGlvbnNfc2V0X2NvbXByZXNzaW9uKGxldmVsZGJfb3B0aW9uc190KiwgaW50KTsKLQotLyog
Q29tcGFyYXRvciAqLwotCi1leHRlcm4gbGV2ZWxkYl9jb21wYXJhdG9yX3QqIGxldmVsZGJfY29t
cGFyYXRvcl9jcmVhdGUoCi0gICAgdm9pZCogc3RhdGUsCi0gICAgdm9pZCAoKmRlc3RydWN0b3Ip
KHZvaWQqKSwKLSAgICBpbnQgKCpjb21wYXJlKSgKLSAgICAgICAgdm9pZCosCi0gICAgICAgIGNv
bnN0IGNoYXIqIGEsIHNpemVfdCBhbGVuLAotICAgICAgICBjb25zdCBjaGFyKiBiLCBzaXplX3Qg
YmxlbiksCi0gICAgY29uc3QgY2hhciogKCpuYW1lKSh2b2lkKikpOwotZXh0ZXJuIHZvaWQgbGV2
ZWxkYl9jb21wYXJhdG9yX2Rlc3Ryb3kobGV2ZWxkYl9jb21wYXJhdG9yX3QqKTsKLQotLyogRmls
dGVyIHBvbGljeSAqLwotCi1leHRlcm4gbGV2ZWxkYl9maWx0ZXJwb2xpY3lfdCogbGV2ZWxkYl9m
aWx0ZXJwb2xpY3lfY3JlYXRlKAotICAgIHZvaWQqIHN0YXRlLAotICAgIHZvaWQgKCpkZXN0cnVj
dG9yKSh2b2lkKiksCi0gICAgY2hhciogKCpjcmVhdGVfZmlsdGVyKSgKLSAgICAgICAgdm9pZCos
Ci0gICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0KiBrZXlfYXJyYXksIGNvbnN0IHNpemVfdCoga2V5
X2xlbmd0aF9hcnJheSwKLSAgICAgICAgaW50IG51bV9rZXlzLAotICAgICAgICBzaXplX3QqIGZp
bHRlcl9sZW5ndGgpLAotICAgIHVuc2lnbmVkIGNoYXIgKCprZXlfbWF5X21hdGNoKSgKLSAgICAg
ICAgdm9pZCosCi0gICAgICAgIGNvbnN0IGNoYXIqIGtleSwgc2l6ZV90IGxlbmd0aCwKLSAgICAg
ICAgY29uc3QgY2hhciogZmlsdGVyLCBzaXplX3QgZmlsdGVyX2xlbmd0aCksCi0gICAgY29uc3Qg
Y2hhciogKCpuYW1lKSh2b2lkKikpOwotZXh0ZXJuIHZvaWQgbGV2ZWxkYl9maWx0ZXJwb2xpY3lf
ZGVzdHJveShsZXZlbGRiX2ZpbHRlcnBvbGljeV90Kik7Ci0KLWV4dGVybiBsZXZlbGRiX2ZpbHRl
cnBvbGljeV90KiBsZXZlbGRiX2ZpbHRlcnBvbGljeV9jcmVhdGVfYmxvb20oCi0gICAgaW50IGJp
dHNfcGVyX2tleSk7Ci0KLS8qIFJlYWQgb3B0aW9ucyAqLwotCi1leHRlcm4gbGV2ZWxkYl9yZWFk
b3B0aW9uc190KiBsZXZlbGRiX3JlYWRvcHRpb25zX2NyZWF0ZSgpOwotZXh0ZXJuIHZvaWQgbGV2
ZWxkYl9yZWFkb3B0aW9uc19kZXN0cm95KGxldmVsZGJfcmVhZG9wdGlvbnNfdCopOwotZXh0ZXJu
IHZvaWQgbGV2ZWxkYl9yZWFkb3B0aW9uc19zZXRfdmVyaWZ5X2NoZWNrc3VtcygKLSAgICBsZXZl
bGRiX3JlYWRvcHRpb25zX3QqLAotICAgIHVuc2lnbmVkIGNoYXIpOwotZXh0ZXJuIHZvaWQgbGV2
ZWxkYl9yZWFkb3B0aW9uc19zZXRfZmlsbF9jYWNoZSgKLSAgICBsZXZlbGRiX3JlYWRvcHRpb25z
X3QqLCB1bnNpZ25lZCBjaGFyKTsKLWV4dGVybiB2b2lkIGxldmVsZGJfcmVhZG9wdGlvbnNfc2V0
X3NuYXBzaG90KAotICAgIGxldmVsZGJfcmVhZG9wdGlvbnNfdCosCi0gICAgY29uc3QgbGV2ZWxk
Yl9zbmFwc2hvdF90Kik7Ci0KLS8qIFdyaXRlIG9wdGlvbnMgKi8KLQotZXh0ZXJuIGxldmVsZGJf
d3JpdGVvcHRpb25zX3QqIGxldmVsZGJfd3JpdGVvcHRpb25zX2NyZWF0ZSgpOwotZXh0ZXJuIHZv
aWQgbGV2ZWxkYl93cml0ZW9wdGlvbnNfZGVzdHJveShsZXZlbGRiX3dyaXRlb3B0aW9uc190Kik7
Ci1leHRlcm4gdm9pZCBsZXZlbGRiX3dyaXRlb3B0aW9uc19zZXRfc3luYygKLSAgICBsZXZlbGRi
X3dyaXRlb3B0aW9uc190KiwgdW5zaWduZWQgY2hhcik7Ci0KLS8qIENhY2hlICovCi0KLWV4dGVy
biBsZXZlbGRiX2NhY2hlX3QqIGxldmVsZGJfY2FjaGVfY3JlYXRlX2xydShzaXplX3QgY2FwYWNp
dHkpOwotZXh0ZXJuIHZvaWQgbGV2ZWxkYl9jYWNoZV9kZXN0cm95KGxldmVsZGJfY2FjaGVfdCog
Y2FjaGUpOwotCi0vKiBFbnYgKi8KLQotZXh0ZXJuIGxldmVsZGJfZW52X3QqIGxldmVsZGJfY3Jl
YXRlX2RlZmF1bHRfZW52KCk7Ci1leHRlcm4gdm9pZCBsZXZlbGRiX2Vudl9kZXN0cm95KGxldmVs
ZGJfZW52X3QqKTsKLQotLyogVXRpbGl0eSAqLwotCi0vKiBDYWxscyBmcmVlKHB0cikuCi0gICBS
RVFVSVJFUzogcHRyIHdhcyBtYWxsb2MoKS1lZCBhbmQgcmV0dXJuZWQgYnkgb25lIG9mIHRoZSBy
b3V0aW5lcwotICAgaW4gdGhpcyBmaWxlLiAgTm90ZSB0aGF0IGluIGNlcnRhaW4gY2FzZXMgKHR5
cGljYWxseSBvbiBXaW5kb3dzKSwgeW91Ci0gICBtYXkgbmVlZCB0byBjYWxsIHRoaXMgcm91dGlu
ZSBpbnN0ZWFkIG9mIGZyZWUocHRyKSB0byBkaXNwb3NlIG9mCi0gICBtYWxsb2MoKS1lZCBtZW1v
cnkgcmV0dXJuZWQgYnkgdGhpcyBsaWJyYXJ5LiAqLwotZXh0ZXJuIHZvaWQgbGV2ZWxkYl9mcmVl
KHZvaWQqIHB0cik7Ci0KLS8qIFJldHVybiB0aGUgbWFqb3IgdmVyc2lvbiBudW1iZXIgZm9yIHRo
aXMgcmVsZWFzZS4gKi8KLWV4dGVybiBpbnQgbGV2ZWxkYl9tYWpvcl92ZXJzaW9uKCk7Ci0KLS8q
IFJldHVybiB0aGUgbWlub3IgdmVyc2lvbiBudW1iZXIgZm9yIHRoaXMgcmVsZWFzZS4gKi8KLWV4
dGVybiBpbnQgbGV2ZWxkYl9taW5vcl92ZXJzaW9uKCk7Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwot
fSAgLyogZW5kIGV4dGVybiAiQyIgKi8KLSNlbmRpZgotCi0jZW5kaWYgIC8qIFNUT1JBR0VfTEVW
RUxEQl9JTkNMVURFX0NfSF8gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVs
ZGIvaW5jbHVkZS9sZXZlbGRiL2NhY2hlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2lu
Y2x1ZGUvbGV2ZWxkYi9jYWNoZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTNi
NDc2My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2
ZWxkYi9jYWNoZS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLy8gQ29weXJpZ2h0
IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhP
UlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgotLy8KLS8vIEEgQ2FjaGUgaXMgYW4g
aW50ZXJmYWNlIHRoYXQgbWFwcyBrZXlzIHRvIHZhbHVlcy4gIEl0IGhhcyBpbnRlcm5hbAotLy8g
c3luY2hyb25pemF0aW9uIGFuZCBtYXkgYmUgc2FmZWx5IGFjY2Vzc2VkIGNvbmN1cnJlbnRseSBm
cm9tCi0vLyBtdWx0aXBsZSB0aHJlYWRzLiAgSXQgbWF5IGF1dG9tYXRpY2FsbHkgZXZpY3QgZW50
cmllcyB0byBtYWtlIHJvb20KLS8vIGZvciBuZXcgZW50cmllcy4gIFZhbHVlcyBoYXZlIGEgc3Bl
Y2lmaWVkIGNoYXJnZSBhZ2FpbnN0IHRoZSBjYWNoZQotLy8gY2FwYWNpdHkuICBGb3IgZXhhbXBs
ZSwgYSBjYWNoZSB3aGVyZSB0aGUgdmFsdWVzIGFyZSB2YXJpYWJsZQotLy8gbGVuZ3RoIHN0cmlu
Z3MsIG1heSB1c2UgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGFzIHRoZSBjaGFyZ2UgZm9yCi0v
LyB0aGUgc3RyaW5nLgotLy8KLS8vIEEgYnVpbHRpbiBjYWNoZSBpbXBsZW1lbnRhdGlvbiB3aXRo
IGEgbGVhc3QtcmVjZW50bHktdXNlZCBldmljdGlvbgotLy8gcG9saWN5IGlzIHByb3ZpZGVkLiAg
Q2xpZW50cyBtYXkgdXNlIHRoZWlyIG93biBpbXBsZW1lbnRhdGlvbnMgaWYKLS8vIHRoZXkgd2Fu
dCBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkIChsaWtlIHNjYW4tcmVzaXN0YW5jZSwgYQot
Ly8gY3VzdG9tIGV2aWN0aW9uIHBvbGljeSwgdmFyaWFibGUgY2FjaGUgc2l6aW5nLCBldGMuKQot
Ci0jaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9JTkNMVURFX0NBQ0hFX0hfCi0jZGVmaW5lIFNUT1JB
R0VfTEVWRUxEQl9JTkNMVURFX0NBQ0hFX0hfCi0KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNs
dWRlICJsZXZlbGRiL3NsaWNlLmgiCi0KLW5hbWVzcGFjZSBsZXZlbGRiIHsKLQotY2xhc3MgQ2Fj
aGU7Ci0KLS8vIENyZWF0ZSBhIG5ldyBjYWNoZSB3aXRoIGEgZml4ZWQgc2l6ZSBjYXBhY2l0eS4g
IFRoaXMgaW1wbGVtZW50YXRpb24KLS8vIG9mIENhY2hlIHVzZXMgYSBsZWFzdC1yZWNlbnRseS11
c2VkIGV2aWN0aW9uIHBvbGljeS4KLWV4dGVybiBDYWNoZSogTmV3TFJVQ2FjaGUoc2l6ZV90IGNh
cGFjaXR5KTsKLQotY2xhc3MgQ2FjaGUgewotIHB1YmxpYzoKLSAgQ2FjaGUoKSB7IH0KLQotICAv
LyBEZXN0cm95cyBhbGwgZXhpc3RpbmcgZW50cmllcyBieSBjYWxsaW5nIHRoZSAiZGVsZXRlciIK
LSAgLy8gZnVuY3Rpb24gdGhhdCB3YXMgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KLSAgdmly
dHVhbCB+Q2FjaGUoKTsKLQotICAvLyBPcGFxdWUgaGFuZGxlIHRvIGFuIGVudHJ5IHN0b3JlZCBp
biB0aGUgY2FjaGUuCi0gIHN0cnVjdCBIYW5kbGUgeyB9OwotCi0gIC8vIEluc2VydCBhIG1hcHBp
bmcgZnJvbSBrZXktPnZhbHVlIGludG8gdGhlIGNhY2hlIGFuZCBhc3NpZ24gaXQKLSAgLy8gdGhl
IHNwZWNpZmllZCBjaGFyZ2UgYWdhaW5zdCB0aGUgdG90YWwgY2FjaGUgY2FwYWNpdHkuCi0gIC8v
Ci0gIC8vIFJldHVybnMgYSBoYW5kbGUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgbWFwcGluZy4g
IFRoZSBjYWxsZXIKLSAgLy8gbXVzdCBjYWxsIHRoaXMtPlJlbGVhc2UoaGFuZGxlKSB3aGVuIHRo
ZSByZXR1cm5lZCBtYXBwaW5nIGlzIG5vCi0gIC8vIGxvbmdlciBuZWVkZWQuCi0gIC8vCi0gIC8v
IFdoZW4gdGhlIGluc2VydGVkIGVudHJ5IGlzIG5vIGxvbmdlciBuZWVkZWQsIHRoZSBrZXkgYW5k
Ci0gIC8vIHZhbHVlIHdpbGwgYmUgcGFzc2VkIHRvICJkZWxldGVyIi4KLSAgdmlydHVhbCBIYW5k
bGUqIEluc2VydChjb25zdCBTbGljZSYga2V5LCB2b2lkKiB2YWx1ZSwgc2l6ZV90IGNoYXJnZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqZGVsZXRlcikoY29uc3QgU2xpY2UmIGtl
eSwgdm9pZCogdmFsdWUpKSA9IDA7Ci0KLSAgLy8gSWYgdGhlIGNhY2hlIGhhcyBubyBtYXBwaW5n
IGZvciAia2V5IiwgcmV0dXJucyBOVUxMLgotICAvLwotICAvLyBFbHNlIHJldHVybiBhIGhhbmRs
ZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBtYXBwaW5nLiAgVGhlIGNhbGxlcgotICAvLyBtdXN0
IGNhbGwgdGhpcy0+UmVsZWFzZShoYW5kbGUpIHdoZW4gdGhlIHJldHVybmVkIG1hcHBpbmcgaXMg
bm8KLSAgLy8gbG9uZ2VyIG5lZWRlZC4KLSAgdmlydHVhbCBIYW5kbGUqIExvb2t1cChjb25zdCBT
bGljZSYga2V5KSA9IDA7Ci0KLSAgLy8gUmVsZWFzZSBhIG1hcHBpbmcgcmV0dXJuZWQgYnkgYSBw
cmV2aW91cyBMb29rdXAoKS4KLSAgLy8gUkVRVUlSRVM6IGhhbmRsZSBtdXN0IG5vdCBoYXZlIGJl
ZW4gcmVsZWFzZWQgeWV0LgotICAvLyBSRVFVSVJFUzogaGFuZGxlIG11c3QgaGF2ZSBiZWVuIHJl
dHVybmVkIGJ5IGEgbWV0aG9kIG9uICp0aGlzLgotICB2aXJ0dWFsIHZvaWQgUmVsZWFzZShIYW5k
bGUqIGhhbmRsZSkgPSAwOwotCi0gIC8vIFJldHVybiB0aGUgdmFsdWUgZW5jYXBzdWxhdGVkIGlu
IGEgaGFuZGxlIHJldHVybmVkIGJ5IGEKLSAgLy8gc3VjY2Vzc2Z1bCBMb29rdXAoKS4KLSAgLy8g
UkVRVUlSRVM6IGhhbmRsZSBtdXN0IG5vdCBoYXZlIGJlZW4gcmVsZWFzZWQgeWV0LgotICAvLyBS
RVFVSVJFUzogaGFuZGxlIG11c3QgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IGEgbWV0aG9kIG9uICp0
aGlzLgotICB2aXJ0dWFsIHZvaWQqIFZhbHVlKEhhbmRsZSogaGFuZGxlKSA9IDA7Ci0KLSAgLy8g
SWYgdGhlIGNhY2hlIGNvbnRhaW5zIGVudHJ5IGZvciBrZXksIGVyYXNlIGl0LiAgTm90ZSB0aGF0
IHRoZQotICAvLyB1bmRlcmx5aW5nIGVudHJ5IHdpbGwgYmUga2VwdCBhcm91bmQgdW50aWwgYWxs
IGV4aXN0aW5nIGhhbmRsZXMKLSAgLy8gdG8gaXQgaGF2ZSBiZWVuIHJlbGVhc2VkLgotICB2aXJ0
dWFsIHZvaWQgRXJhc2UoY29uc3QgU2xpY2UmIGtleSkgPSAwOwotCi0gIC8vIFJldHVybiBhIG5l
dyBudW1lcmljIGlkLiAgTWF5IGJlIHVzZWQgYnkgbXVsdGlwbGUgY2xpZW50cyB3aG8gYXJlCi0g
IC8vIHNoYXJpbmcgdGhlIHNhbWUgY2FjaGUgdG8gcGFydGl0aW9uIHRoZSBrZXkgc3BhY2UuICBU
eXBpY2FsbHkgdGhlCi0gIC8vIGNsaWVudCB3aWxsIGFsbG9jYXRlIGEgbmV3IGlkIGF0IHN0YXJ0
dXAgYW5kIHByZXBlbmQgdGhlIGlkIHRvCi0gIC8vIGl0cyBjYWNoZSBrZXlzLgotICB2aXJ0dWFs
IHVpbnQ2NF90IE5ld0lkKCkgPSAwOwotCi0gcHJpdmF0ZToKLSAgdm9pZCBMUlVfUmVtb3ZlKEhh
bmRsZSogZSk7Ci0gIHZvaWQgTFJVX0FwcGVuZChIYW5kbGUqIGUpOwotICB2b2lkIFVucmVmKEhh
bmRsZSogZSk7Ci0KLSAgc3RydWN0IFJlcDsKLSAgUmVwKiByZXBfOwotCi0gIC8vIE5vIGNvcHlp
bmcgYWxsb3dlZAotICBDYWNoZShjb25zdCBDYWNoZSYpOwotICB2b2lkIG9wZXJhdG9yPShjb25z
dCBDYWNoZSYpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKLQotI2VuZGlmICAvLyBT
VE9SQUdFX0xFVkVMREJfVVRJTF9DQUNIRV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvY29tcGFyYXRvci5oIGIvU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvY29tcGFyYXRvci5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA1NTZiOTg0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvaW5jbHVkZS9sZXZlbGRiL2NvbXBhcmF0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDYz
ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4K
LQotI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfSU5DTFVERV9DT01QQVJBVE9SX0hfCi0jZGVmaW5l
IFNUT1JBR0VfTEVWRUxEQl9JTkNMVURFX0NPTVBBUkFUT1JfSF8KLQotI2luY2x1ZGUgPHN0cmlu
Zz4KLQotbmFtZXNwYWNlIGxldmVsZGIgewotCi1jbGFzcyBTbGljZTsKLQotLy8gQSBDb21wYXJh
dG9yIG9iamVjdCBwcm92aWRlcyBhIHRvdGFsIG9yZGVyIGFjcm9zcyBzbGljZXMgdGhhdCBhcmUK
LS8vIHVzZWQgYXMga2V5cyBpbiBhbiBzc3RhYmxlIG9yIGEgZGF0YWJhc2UuICBBIENvbXBhcmF0
b3IgaW1wbGVtZW50YXRpb24KLS8vIG11c3QgYmUgdGhyZWFkLXNhZmUgc2luY2UgbGV2ZWxkYiBt
YXkgaW52b2tlIGl0cyBtZXRob2RzIGNvbmN1cnJlbnRseQotLy8gZnJvbSBtdWx0aXBsZSB0aHJl
YWRzLgotY2xhc3MgQ29tcGFyYXRvciB7Ci0gcHVibGljOgotICB2aXJ0dWFsIH5Db21wYXJhdG9y
KCk7Ci0KLSAgLy8gVGhyZWUtd2F5IGNvbXBhcmlzb24uICBSZXR1cm5zIHZhbHVlOgotICAvLyAg
IDwgMCBpZmYgImEiIDwgImIiLAotICAvLyAgID09IDAgaWZmICJhIiA9PSAiYiIsCi0gIC8vICAg
PiAwIGlmZiAiYSIgPiAiYiIKLSAgdmlydHVhbCBpbnQgQ29tcGFyZShjb25zdCBTbGljZSYgYSwg
Y29uc3QgU2xpY2UmIGIpIGNvbnN0ID0gMDsKLQotICAvLyBUaGUgbmFtZSBvZiB0aGUgY29tcGFy
YXRvci4gIFVzZWQgdG8gY2hlY2sgZm9yIGNvbXBhcmF0b3IKLSAgLy8gbWlzbWF0Y2hlcyAoaS5l
LiwgYSBEQiBjcmVhdGVkIHdpdGggb25lIGNvbXBhcmF0b3IgaXMKLSAgLy8gYWNjZXNzZWQgdXNp
bmcgYSBkaWZmZXJlbnQgY29tcGFyYXRvci4KLSAgLy8KLSAgLy8gVGhlIGNsaWVudCBvZiB0aGlz
IHBhY2thZ2Ugc2hvdWxkIHN3aXRjaCB0byBhIG5ldyBuYW1lIHdoZW5ldmVyCi0gIC8vIHRoZSBj
b21wYXJhdG9yIGltcGxlbWVudGF0aW9uIGNoYW5nZXMgaW4gYSB3YXkgdGhhdCB3aWxsIGNhdXNl
Ci0gIC8vIHRoZSByZWxhdGl2ZSBvcmRlcmluZyBvZiBhbnkgdHdvIGtleXMgdG8gY2hhbmdlLgot
ICAvLwotICAvLyBOYW1lcyBzdGFydGluZyB3aXRoICJsZXZlbGRiLiIgYXJlIHJlc2VydmVkIGFu
ZCBzaG91bGQgbm90IGJlIHVzZWQKLSAgLy8gYnkgYW55IGNsaWVudHMgb2YgdGhpcyBwYWNrYWdl
LgotICB2aXJ0dWFsIGNvbnN0IGNoYXIqIE5hbWUoKSBjb25zdCA9IDA7Ci0KLSAgLy8gQWR2YW5j
ZWQgZnVuY3Rpb25zOiB0aGVzZSBhcmUgdXNlZCB0byByZWR1Y2UgdGhlIHNwYWNlIHJlcXVpcmVt
ZW50cwotICAvLyBmb3IgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGxpa2UgaW5kZXggYmxvY2tz
LgotCi0gIC8vIElmICpzdGFydCA8IGxpbWl0LCBjaGFuZ2VzICpzdGFydCB0byBhIHNob3J0IHN0
cmluZyBpbiBbc3RhcnQsbGltaXQpLgotICAvLyBTaW1wbGUgY29tcGFyYXRvciBpbXBsZW1lbnRh
dGlvbnMgbWF5IHJldHVybiB3aXRoICpzdGFydCB1bmNoYW5nZWQsCi0gIC8vIGkuZS4sIGFuIGlt
cGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIHRoYXQgZG9lcyBub3RoaW5nIGlzIGNvcnJlY3Qu
Ci0gIHZpcnR1YWwgdm9pZCBGaW5kU2hvcnRlc3RTZXBhcmF0b3IoCi0gICAgICBzdGQ6OnN0cmlu
Zyogc3RhcnQsCi0gICAgICBjb25zdCBTbGljZSYgbGltaXQpIGNvbnN0ID0gMDsKLQotICAvLyBD
aGFuZ2VzICprZXkgdG8gYSBzaG9ydCBzdHJpbmcgPj0gKmtleS4KLSAgLy8gU2ltcGxlIGNvbXBh
cmF0b3IgaW1wbGVtZW50YXRpb25zIG1heSByZXR1cm4gd2l0aCAqa2V5IHVuY2hhbmdlZCwKLSAg
Ly8gaS5lLiwgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgdGhhdCBkb2VzIG5vdGhp
bmcgaXMgY29ycmVjdC4KLSAgdmlydHVhbCB2b2lkIEZpbmRTaG9ydFN1Y2Nlc3NvcihzdGQ6OnN0
cmluZyoga2V5KSBjb25zdCA9IDA7Ci19OwotCi0vLyBSZXR1cm4gYSBidWlsdGluIGNvbXBhcmF0
b3IgdGhhdCB1c2VzIGxleGljb2dyYXBoaWMgYnl0ZS13aXNlCi0vLyBvcmRlcmluZy4gIFRoZSBy
ZXN1bHQgcmVtYWlucyB0aGUgcHJvcGVydHkgb2YgdGhpcyBtb2R1bGUgYW5kCi0vLyBtdXN0IG5v
dCBiZSBkZWxldGVkLgotZXh0ZXJuIGNvbnN0IENvbXBhcmF0b3IqIEJ5dGV3aXNlQ29tcGFyYXRv
cigpOwotCi19ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgotCi0jZW5kaWYgIC8vIFNUT1JBR0VfTEVW
RUxEQl9JTkNMVURFX0NPTVBBUkFUT1JfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL2RiLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRi
L2luY2x1ZGUvbGV2ZWxkYi9kYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWQz
Njc0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZl
bGRiL2RiLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChj
KSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMg
ZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgotCi0jaWZuZGVmIFNUT1JBR0VfTEVWRUxE
Ql9JTkNMVURFX0RCX0hfCi0jZGVmaW5lIFNUT1JBR0VfTEVWRUxEQl9JTkNMVURFX0RCX0hfCi0K
LSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgImxldmVs
ZGIvaXRlcmF0b3IuaCIKLSNpbmNsdWRlICJsZXZlbGRiL29wdGlvbnMuaCIKLQotbmFtZXNwYWNl
IGxldmVsZGIgewotCi0vLyBVcGRhdGUgTWFrZWZpbGUgaWYgeW91IGNoYW5nZSB0aGVzZQotc3Rh
dGljIGNvbnN0IGludCBrTWFqb3JWZXJzaW9uID0gMTsKLXN0YXRpYyBjb25zdCBpbnQga01pbm9y
VmVyc2lvbiA9IDk7Ci0KLXN0cnVjdCBPcHRpb25zOwotc3RydWN0IFJlYWRPcHRpb25zOwotc3Ry
dWN0IFdyaXRlT3B0aW9uczsKLWNsYXNzIFdyaXRlQmF0Y2g7Ci0KLS8vIEFic3RyYWN0IGhhbmRs
ZSB0byBwYXJ0aWN1bGFyIHN0YXRlIG9mIGEgREIuCi0vLyBBIFNuYXBzaG90IGlzIGFuIGltbXV0
YWJsZSBvYmplY3QgYW5kIGNhbiB0aGVyZWZvcmUgYmUgc2FmZWx5Ci0vLyBhY2Nlc3NlZCBmcm9t
IG11bHRpcGxlIHRocmVhZHMgd2l0aG91dCBhbnkgZXh0ZXJuYWwgc3luY2hyb25pemF0aW9uLgot
Y2xhc3MgU25hcHNob3QgewotIHByb3RlY3RlZDoKLSAgdmlydHVhbCB+U25hcHNob3QoKTsKLX07
Ci0KLS8vIEEgcmFuZ2Ugb2Yga2V5cwotc3RydWN0IFJhbmdlIHsKLSAgU2xpY2Ugc3RhcnQ7ICAg
ICAgICAgIC8vIEluY2x1ZGVkIGluIHRoZSByYW5nZQotICBTbGljZSBsaW1pdDsgICAgICAgICAg
Ly8gTm90IGluY2x1ZGVkIGluIHRoZSByYW5nZQotCi0gIFJhbmdlKCkgeyB9Ci0gIFJhbmdlKGNv
bnN0IFNsaWNlJiBzLCBjb25zdCBTbGljZSYgbCkgOiBzdGFydChzKSwgbGltaXQobCkgeyB9Ci19
OwotCi0vLyBBIERCIGlzIGEgcGVyc2lzdGVudCBvcmRlcmVkIG1hcCBmcm9tIGtleXMgdG8gdmFs
dWVzLgotLy8gQSBEQiBpcyBzYWZlIGZvciBjb25jdXJyZW50IGFjY2VzcyBmcm9tIG11bHRpcGxl
IHRocmVhZHMgd2l0aG91dAotLy8gYW55IGV4dGVybmFsIHN5bmNocm9uaXphdGlvbi4KLWNsYXNz
IERCIHsKLSBwdWJsaWM6Ci0gIC8vIE9wZW4gdGhlIGRhdGFiYXNlIHdpdGggdGhlIHNwZWNpZmll
ZCAibmFtZSIuCi0gIC8vIFN0b3JlcyBhIHBvaW50ZXIgdG8gYSBoZWFwLWFsbG9jYXRlZCBkYXRh
YmFzZSBpbiAqZGJwdHIgYW5kIHJldHVybnMKLSAgLy8gT0sgb24gc3VjY2Vzcy4KLSAgLy8gU3Rv
cmVzIE5VTEwgaW4gKmRicHRyIGFuZCByZXR1cm5zIGEgbm9uLU9LIHN0YXR1cyBvbiBlcnJvci4K
LSAgLy8gQ2FsbGVyIHNob3VsZCBkZWxldGUgKmRicHRyIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIG5l
ZWRlZC4KLSAgc3RhdGljIFN0YXR1cyBPcGVuKGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMsCi0gICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAg
ICAgICAgIERCKiogZGJwdHIpOwotCi0gIERCKCkgeyB9Ci0gIHZpcnR1YWwgfkRCKCk7Ci0KLSAg
Ly8gU2V0IHRoZSBkYXRhYmFzZSBlbnRyeSBmb3IgImtleSIgdG8gInZhbHVlIi4gIFJldHVybnMg
T0sgb24gc3VjY2VzcywKLSAgLy8gYW5kIGEgbm9uLU9LIHN0YXR1cyBvbiBlcnJvci4KLSAgLy8g
Tm90ZTogY29uc2lkZXIgc2V0dGluZyBvcHRpb25zLnN5bmMgPSB0cnVlLgotICB2aXJ0dWFsIFN0
YXR1cyBQdXQoY29uc3QgV3JpdGVPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU2xpY2UmIGtleSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNsaWNlJiB2
YWx1ZSkgPSAwOwotCi0gIC8vIFJlbW92ZSB0aGUgZGF0YWJhc2UgZW50cnkgKGlmIGFueSkgZm9y
ICJrZXkiLiAgUmV0dXJucyBPSyBvbgotICAvLyBzdWNjZXNzLCBhbmQgYSBub24tT0sgc3RhdHVz
IG9uIGVycm9yLiAgSXQgaXMgbm90IGFuIGVycm9yIGlmICJrZXkiCi0gIC8vIGRpZCBub3QgZXhp
c3QgaW4gdGhlIGRhdGFiYXNlLgotICAvLyBOb3RlOiBjb25zaWRlciBzZXR0aW5nIG9wdGlvbnMu
c3luYyA9IHRydWUuCi0gIHZpcnR1YWwgU3RhdHVzIERlbGV0ZShjb25zdCBXcml0ZU9wdGlvbnMm
IG9wdGlvbnMsIGNvbnN0IFNsaWNlJiBrZXkpID0gMDsKLQotICAvLyBBcHBseSB0aGUgc3BlY2lm
aWVkIHVwZGF0ZXMgdG8gdGhlIGRhdGFiYXNlLgotICAvLyBSZXR1cm5zIE9LIG9uIHN1Y2Nlc3Ms
IG5vbi1PSyBvbiBmYWlsdXJlLgotICAvLyBOb3RlOiBjb25zaWRlciBzZXR0aW5nIG9wdGlvbnMu
c3luYyA9IHRydWUuCi0gIHZpcnR1YWwgU3RhdHVzIFdyaXRlKGNvbnN0IFdyaXRlT3B0aW9ucyYg
b3B0aW9ucywgV3JpdGVCYXRjaCogdXBkYXRlcykgPSAwOwotCi0gIC8vIElmIHRoZSBkYXRhYmFz
ZSBjb250YWlucyBhbiBlbnRyeSBmb3IgImtleSIgc3RvcmUgdGhlCi0gIC8vIGNvcnJlc3BvbmRp
bmcgdmFsdWUgaW4gKnZhbHVlIGFuZCByZXR1cm4gT0suCi0gIC8vCi0gIC8vIElmIHRoZXJlIGlz
IG5vIGVudHJ5IGZvciAia2V5IiBsZWF2ZSAqdmFsdWUgdW5jaGFuZ2VkIGFuZCByZXR1cm4KLSAg
Ly8gYSBzdGF0dXMgZm9yIHdoaWNoIFN0YXR1czo6SXNOb3RGb3VuZCgpIHJldHVybnMgdHJ1ZS4K
LSAgLy8KLSAgLy8gTWF5IHJldHVybiBzb21lIG90aGVyIFN0YXR1cyBvbiBhbiBlcnJvci4KLSAg
dmlydHVhbCBTdGF0dXMgR2V0KGNvbnN0IFJlYWRPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgU2xpY2UmIGtleSwgc3RkOjpzdHJpbmcqIHZhbHVlKSA9IDA7Ci0K
LSAgLy8gUmV0dXJuIGEgaGVhcC1hbGxvY2F0ZWQgaXRlcmF0b3Igb3ZlciB0aGUgY29udGVudHMg
b2YgdGhlIGRhdGFiYXNlLgotICAvLyBUaGUgcmVzdWx0IG9mIE5ld0l0ZXJhdG9yKCkgaXMgaW5p
dGlhbGx5IGludmFsaWQgKGNhbGxlciBtdXN0Ci0gIC8vIGNhbGwgb25lIG9mIHRoZSBTZWVrIG1l
dGhvZHMgb24gdGhlIGl0ZXJhdG9yIGJlZm9yZSB1c2luZyBpdCkuCi0gIC8vCi0gIC8vIENhbGxl
ciBzaG91bGQgZGVsZXRlIHRoZSBpdGVyYXRvciB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQu
Ci0gIC8vIFRoZSByZXR1cm5lZCBpdGVyYXRvciBzaG91bGQgYmUgZGVsZXRlZCBiZWZvcmUgdGhp
cyBkYiBpcyBkZWxldGVkLgotICB2aXJ0dWFsIEl0ZXJhdG9yKiBOZXdJdGVyYXRvcihjb25zdCBS
ZWFkT3B0aW9ucyYgb3B0aW9ucykgPSAwOwotCi0gIC8vIFJldHVybiBhIGhhbmRsZSB0byB0aGUg
Y3VycmVudCBEQiBzdGF0ZS4gIEl0ZXJhdG9ycyBjcmVhdGVkIHdpdGgKLSAgLy8gdGhpcyBoYW5k
bGUgd2lsbCBhbGwgb2JzZXJ2ZSBhIHN0YWJsZSBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBEQgot
ICAvLyBzdGF0ZS4gIFRoZSBjYWxsZXIgbXVzdCBjYWxsIFJlbGVhc2VTbmFwc2hvdChyZXN1bHQp
IHdoZW4gdGhlCi0gIC8vIHNuYXBzaG90IGlzIG5vIGxvbmdlciBuZWVkZWQuCi0gIHZpcnR1YWwg
Y29uc3QgU25hcHNob3QqIEdldFNuYXBzaG90KCkgPSAwOwotCi0gIC8vIFJlbGVhc2UgYSBwcmV2
aW91c2x5IGFjcXVpcmVkIHNuYXBzaG90LiAgVGhlIGNhbGxlciBtdXN0IG5vdAotICAvLyB1c2Ug
InNuYXBzaG90IiBhZnRlciB0aGlzIGNhbGwuCi0gIHZpcnR1YWwgdm9pZCBSZWxlYXNlU25hcHNo
b3QoY29uc3QgU25hcHNob3QqIHNuYXBzaG90KSA9IDA7Ci0KLSAgLy8gREIgaW1wbGVtZW50YXRp
b25zIGNhbiBleHBvcnQgcHJvcGVydGllcyBhYm91dCB0aGVpciBzdGF0ZQotICAvLyB2aWEgdGhp
cyBtZXRob2QuICBJZiAicHJvcGVydHkiIGlzIGEgdmFsaWQgcHJvcGVydHkgdW5kZXJzdG9vZCBi
eSB0aGlzCi0gIC8vIERCIGltcGxlbWVudGF0aW9uLCBmaWxscyAiKnZhbHVlIiB3aXRoIGl0cyBj
dXJyZW50IHZhbHVlIGFuZCByZXR1cm5zCi0gIC8vIHRydWUuICBPdGhlcndpc2UgcmV0dXJucyBm
YWxzZS4KLSAgLy8KLSAgLy8KLSAgLy8gVmFsaWQgcHJvcGVydHkgbmFtZXMgaW5jbHVkZToKLSAg
Ly8KLSAgLy8gICJsZXZlbGRiLm51bS1maWxlcy1hdC1sZXZlbDxOPiIgLSByZXR1cm4gdGhlIG51
bWJlciBvZiBmaWxlcyBhdCBsZXZlbCA8Tj4sCi0gIC8vICAgICB3aGVyZSA8Tj4gaXMgYW4gQVND
SUkgcmVwcmVzZW50YXRpb24gb2YgYSBsZXZlbCBudW1iZXIgKGUuZy4gIjAiKS4KLSAgLy8gICJs
ZXZlbGRiLnN0YXRzIiAtIHJldHVybnMgYSBtdWx0aS1saW5lIHN0cmluZyB0aGF0IGRlc2NyaWJl
cyBzdGF0aXN0aWNzCi0gIC8vICAgICBhYm91dCB0aGUgaW50ZXJuYWwgb3BlcmF0aW9uIG9mIHRo
ZSBEQi4KLSAgLy8gICJsZXZlbGRiLnNzdGFibGVzIiAtIHJldHVybnMgYSBtdWx0aS1saW5lIHN0
cmluZyB0aGF0IGRlc2NyaWJlcyBhbGwKLSAgLy8gICAgIG9mIHRoZSBzc3RhYmxlcyB0aGF0IG1h
a2UgdXAgdGhlIGRiIGNvbnRlbnRzLgotICB2aXJ0dWFsIGJvb2wgR2V0UHJvcGVydHkoY29uc3Qg
U2xpY2UmIHByb3BlcnR5LCBzdGQ6OnN0cmluZyogdmFsdWUpID0gMDsKLQotICAvLyBGb3IgZWFj
aCBpIGluIFswLG4tMV0sIHN0b3JlIGluICJzaXplc1tpXSIsIHRoZSBhcHByb3hpbWF0ZQotICAv
LyBmaWxlIHN5c3RlbSBzcGFjZSB1c2VkIGJ5IGtleXMgaW4gIltyYW5nZVtpXS5zdGFydCAuLiBy
YW5nZVtpXS5saW1pdCkiLgotICAvLwotICAvLyBOb3RlIHRoYXQgdGhlIHJldHVybmVkIHNpemVz
IG1lYXN1cmUgZmlsZSBzeXN0ZW0gc3BhY2UgdXNhZ2UsIHNvCi0gIC8vIGlmIHRoZSB1c2VyIGRh
dGEgY29tcHJlc3NlcyBieSBhIGZhY3RvciBvZiB0ZW4sIHRoZSByZXR1cm5lZAotICAvLyBzaXpl
cyB3aWxsIGJlIG9uZS10ZW50aCB0aGUgc2l6ZSBvZiB0aGUgY29ycmVzcG9uZGluZyB1c2VyIGRh
dGEgc2l6ZS4KLSAgLy8KLSAgLy8gVGhlIHJlc3VsdHMgbWF5IG5vdCBpbmNsdWRlIHRoZSBzaXpl
cyBvZiByZWNlbnRseSB3cml0dGVuIGRhdGEuCi0gIHZpcnR1YWwgdm9pZCBHZXRBcHByb3hpbWF0
ZVNpemVzKGNvbnN0IFJhbmdlKiByYW5nZSwgaW50IG4sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVpbnQ2NF90KiBzaXplcykgPSAwOwotCi0gIC8vIENvbXBhY3QgdGhlIHVu
ZGVybHlpbmcgc3RvcmFnZSBmb3IgdGhlIGtleSByYW5nZSBbKmJlZ2luLCplbmRdLgotICAvLyBJ
biBwYXJ0aWN1bGFyLCBkZWxldGVkIGFuZCBvdmVyd3JpdHRlbiB2ZXJzaW9ucyBhcmUgZGlzY2Fy
ZGVkLAotICAvLyBhbmQgdGhlIGRhdGEgaXMgcmVhcnJhbmdlZCB0byByZWR1Y2UgdGhlIGNvc3Qg
b2Ygb3BlcmF0aW9ucwotICAvLyBuZWVkZWQgdG8gYWNjZXNzIHRoZSBkYXRhLiAgVGhpcyBvcGVy
YXRpb24gc2hvdWxkIHR5cGljYWxseSBvbmx5Ci0gIC8vIGJlIGludm9rZWQgYnkgdXNlcnMgd2hv
IHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24uCi0gIC8vCi0gIC8vIGJl
Z2luPT1OVUxMIGlzIHRyZWF0ZWQgYXMgYSBrZXkgYmVmb3JlIGFsbCBrZXlzIGluIHRoZSBkYXRh
YmFzZS4KLSAgLy8gZW5kPT1OVUxMIGlzIHRyZWF0ZWQgYXMgYSBrZXkgYWZ0ZXIgYWxsIGtleXMg
aW4gdGhlIGRhdGFiYXNlLgotICAvLyBUaGVyZWZvcmUgdGhlIGZvbGxvd2luZyBjYWxsIHdpbGwg
Y29tcGFjdCB0aGUgZW50aXJlIGRhdGFiYXNlOgotICAvLyAgICBkYi0+Q29tcGFjdFJhbmdlKE5V
TEwsIE5VTEwpOwotICB2aXJ0dWFsIHZvaWQgQ29tcGFjdFJhbmdlKGNvbnN0IFNsaWNlKiBiZWdp
biwgY29uc3QgU2xpY2UqIGVuZCkgPSAwOwotCi0gcHJpdmF0ZToKLSAgLy8gTm8gY29weWluZyBh
bGxvd2VkCi0gIERCKGNvbnN0IERCJik7Ci0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IERCJik7Ci19
OwotCi0vLyBEZXN0cm95IHRoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIGRhdGFiYXNlLgot
Ly8gQmUgdmVyeSBjYXJlZnVsIHVzaW5nIHRoaXMgbWV0aG9kLgotU3RhdHVzIERlc3Ryb3lEQihj
b25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY29uc3QgT3B0aW9ucyYgb3B0aW9ucyk7Ci0KLS8vIElm
IGEgREIgY2Fubm90IGJlIG9wZW5lZCwgeW91IG1heSBhdHRlbXB0IHRvIGNhbGwgdGhpcyBtZXRo
b2QgdG8KLS8vIHJlc3VycmVjdCBhcyBtdWNoIG9mIHRoZSBjb250ZW50cyBvZiB0aGUgZGF0YWJh
c2UgYXMgcG9zc2libGUuCi0vLyBTb21lIGRhdGEgbWF5IGJlIGxvc3QsIHNvIGJlIGNhcmVmdWwg
d2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KLS8vIG9uIGEgZGF0YWJhc2UgdGhhdCBjb250YWlu
cyBpbXBvcnRhbnQgaW5mb3JtYXRpb24uCi1TdGF0dXMgUmVwYWlyREIoY29uc3Qgc3RkOjpzdHJp
bmcmIGRibmFtZSwgY29uc3QgT3B0aW9ucyYgb3B0aW9ucyk7Ci0KLX0gIC8vIG5hbWVzcGFjZSBs
ZXZlbGRiCi0KLSNlbmRpZiAgLy8gU1RPUkFHRV9MRVZFTERCX0lOQ0xVREVfREJfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL2Vudi5oIGIv
U291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvZW52LmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhMzIyODkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvZW52LmgKKysrIC9kZXYvbnVsbApAQCAtMSwz
MzMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3Jz
LgotLy8KLS8vIEFuIEVudiBpcyBhbiBpbnRlcmZhY2UgdXNlZCBieSB0aGUgbGV2ZWxkYiBpbXBs
ZW1lbnRhdGlvbiB0byBhY2Nlc3MKLS8vIG9wZXJhdGluZyBzeXN0ZW0gZnVuY3Rpb25hbGl0eSBs
aWtlIHRoZSBmaWxlc3lzdGVtIGV0Yy4gIENhbGxlcnMKLS8vIG1heSB3aXNoIHRvIHByb3ZpZGUg
YSBjdXN0b20gRW52IG9iamVjdCB3aGVuIG9wZW5pbmcgYSBkYXRhYmFzZSB0bwotLy8gZ2V0IGZp
bmUgZ2FpbiBjb250cm9sOyBlLmcuLCB0byByYXRlIGxpbWl0IGZpbGUgc3lzdGVtIG9wZXJhdGlv
bnMuCi0vLwotLy8gQWxsIEVudiBpbXBsZW1lbnRhdGlvbnMgYXJlIHNhZmUgZm9yIGNvbmN1cnJl
bnQgYWNjZXNzIGZyb20KLS8vIG11bHRpcGxlIHRocmVhZHMgd2l0aG91dCBhbnkgZXh0ZXJuYWwg
c3luY2hyb25pemF0aW9uLgotCi0jaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9JTkNMVURFX0VOVl9I
XwotI2RlZmluZSBTVE9SQUdFX0xFVkVMREJfSU5DTFVERV9FTlZfSF8KLQotI2luY2x1ZGUgPGNz
dGRhcmc+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxz
dGRpbnQuaD4KLSNpbmNsdWRlICJsZXZlbGRiL3N0YXR1cy5oIgotCi1uYW1lc3BhY2UgbGV2ZWxk
YiB7Ci0KLWNsYXNzIEZpbGVMb2NrOwotY2xhc3MgTG9nZ2VyOwotY2xhc3MgUmFuZG9tQWNjZXNz
RmlsZTsKLWNsYXNzIFNlcXVlbnRpYWxGaWxlOwotY2xhc3MgU2xpY2U7Ci1jbGFzcyBXcml0YWJs
ZUZpbGU7Ci0KLWNsYXNzIEVudiB7Ci0gcHVibGljOgotICBFbnYoKSB7IH0KLSAgdmlydHVhbCB+
RW52KCk7Ci0KLSAgLy8gUmV0dXJuIGEgZGVmYXVsdCBlbnZpcm9ubWVudCBzdWl0YWJsZSBmb3Ig
dGhlIGN1cnJlbnQgb3BlcmF0aW5nCi0gIC8vIHN5c3RlbS4gIFNvcGhpc3RpY2F0ZWQgdXNlcnMg
bWF5IHdpc2ggdG8gcHJvdmlkZSB0aGVpciBvd24gRW52Ci0gIC8vIGltcGxlbWVudGF0aW9uIGlu
c3RlYWQgb2YgcmVseWluZyBvbiB0aGlzIGRlZmF1bHQgZW52aXJvbm1lbnQuCi0gIC8vCi0gIC8v
IFRoZSByZXN1bHQgb2YgRGVmYXVsdCgpIGJlbG9uZ3MgdG8gbGV2ZWxkYiBhbmQgbXVzdCBuZXZl
ciBiZSBkZWxldGVkLgotICBzdGF0aWMgRW52KiBEZWZhdWx0KCk7Ci0KLSAgLy8gQ3JlYXRlIGEg
YnJhbmQgbmV3IHNlcXVlbnRpYWxseS1yZWFkYWJsZSBmaWxlIHdpdGggdGhlIHNwZWNpZmllZCBu
YW1lLgotICAvLyBPbiBzdWNjZXNzLCBzdG9yZXMgYSBwb2ludGVyIHRvIHRoZSBuZXcgZmlsZSBp
biAqcmVzdWx0IGFuZCByZXR1cm5zIE9LLgotICAvLyBPbiBmYWlsdXJlIHN0b3JlcyBOVUxMIGlu
ICpyZXN1bHQgYW5kIHJldHVybnMgbm9uLU9LLiAgSWYgdGhlIGZpbGUgZG9lcwotICAvLyBub3Qg
ZXhpc3QsIHJldHVybnMgYSBub24tT0sgc3RhdHVzLgotICAvLwotICAvLyBUaGUgcmV0dXJuZWQg
ZmlsZSB3aWxsIG9ubHkgYmUgYWNjZXNzZWQgYnkgb25lIHRocmVhZCBhdCBhIHRpbWUuCi0gIHZp
cnR1YWwgU3RhdHVzIE5ld1NlcXVlbnRpYWxGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VxdWVudGlhbEZpbGUqKiByZXN1
bHQpID0gMDsKLQotICAvLyBDcmVhdGUgYSBicmFuZCBuZXcgcmFuZG9tIGFjY2VzcyByZWFkLW9u
bHkgZmlsZSB3aXRoIHRoZQotICAvLyBzcGVjaWZpZWQgbmFtZS4gIE9uIHN1Y2Nlc3MsIHN0b3Jl
cyBhIHBvaW50ZXIgdG8gdGhlIG5ldyBmaWxlIGluCi0gIC8vICpyZXN1bHQgYW5kIHJldHVybnMg
T0suICBPbiBmYWlsdXJlIHN0b3JlcyBOVUxMIGluICpyZXN1bHQgYW5kCi0gIC8vIHJldHVybnMg
bm9uLU9LLiAgSWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QsIHJldHVybnMgYSBub24tT0sKLSAg
Ly8gc3RhdHVzLgotICAvLwotICAvLyBUaGUgcmV0dXJuZWQgZmlsZSBtYXkgYmUgY29uY3VycmVu
dGx5IGFjY2Vzc2VkIGJ5IG11bHRpcGxlIHRocmVhZHMuCi0gIHZpcnR1YWwgU3RhdHVzIE5ld1Jh
bmRvbUFjY2Vzc0ZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFJhbmRvbUFjY2Vzc0ZpbGUqKiByZXN1bHQpID0gMDsKLQot
ICAvLyBDcmVhdGUgYW4gb2JqZWN0IHRoYXQgd3JpdGVzIHRvIGEgbmV3IGZpbGUgd2l0aCB0aGUg
c3BlY2lmaWVkCi0gIC8vIG5hbWUuICBEZWxldGVzIGFueSBleGlzdGluZyBmaWxlIHdpdGggdGhl
IHNhbWUgbmFtZSBhbmQgY3JlYXRlcyBhCi0gIC8vIG5ldyBmaWxlLiAgT24gc3VjY2Vzcywgc3Rv
cmVzIGEgcG9pbnRlciB0byB0aGUgbmV3IGZpbGUgaW4KLSAgLy8gKnJlc3VsdCBhbmQgcmV0dXJu
cyBPSy4gIE9uIGZhaWx1cmUgc3RvcmVzIE5VTEwgaW4gKnJlc3VsdCBhbmQKLSAgLy8gcmV0dXJu
cyBub24tT0suCi0gIC8vCi0gIC8vIFRoZSByZXR1cm5lZCBmaWxlIHdpbGwgb25seSBiZSBhY2Nl
c3NlZCBieSBvbmUgdGhyZWFkIGF0IGEgdGltZS4KLSAgdmlydHVhbCBTdGF0dXMgTmV3V3JpdGFi
bGVGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdyaXRhYmxlRmlsZSoqIHJlc3VsdCkgPSAwOwotCi0gIC8vIFJldHVybnMgdHJ1
ZSBpZmYgdGhlIG5hbWVkIGZpbGUgZXhpc3RzLgotICB2aXJ0dWFsIGJvb2wgRmlsZUV4aXN0cyhj
b25zdCBzdGQ6OnN0cmluZyYgZm5hbWUpID0gMDsKLQotICAvLyBTdG9yZSBpbiAqcmVzdWx0IHRo
ZSBuYW1lcyBvZiB0aGUgY2hpbGRyZW4gb2YgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkuCi0gIC8v
IFRoZSBuYW1lcyBhcmUgcmVsYXRpdmUgdG8gImRpciIuCi0gIC8vIE9yaWdpbmFsIGNvbnRlbnRz
IG9mICpyZXN1bHRzIGFyZSBkcm9wcGVkLgotICB2aXJ0dWFsIFN0YXR1cyBHZXRDaGlsZHJlbihj
b25zdCBzdGQ6OnN0cmluZyYgZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6
OnZlY3RvcjxzdGQ6OnN0cmluZz4qIHJlc3VsdCkgPSAwOwotCi0gIC8vIERlbGV0ZSB0aGUgbmFt
ZWQgZmlsZS4KLSAgdmlydHVhbCBTdGF0dXMgRGVsZXRlRmlsZShjb25zdCBzdGQ6OnN0cmluZyYg
Zm5hbWUpID0gMDsKLQotICAvLyBDcmVhdGUgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkuCi0gIHZp
cnR1YWwgU3RhdHVzIENyZWF0ZURpcihjb25zdCBzdGQ6OnN0cmluZyYgZGlybmFtZSkgPSAwOwot
Ci0gIC8vIERlbGV0ZSB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeS4KLSAgdmlydHVhbCBTdGF0dXMg
RGVsZXRlRGlyKGNvbnN0IHN0ZDo6c3RyaW5nJiBkaXJuYW1lKSA9IDA7Ci0KLSAgLy8gU3RvcmUg
dGhlIHNpemUgb2YgZm5hbWUgaW4gKmZpbGVfc2l6ZS4KLSAgdmlydHVhbCBTdGF0dXMgR2V0Rmls
ZVNpemUoY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lLCB1aW50NjRfdCogZmlsZV9zaXplKSA9IDA7
Ci0KLSAgLy8gUmVuYW1lIGZpbGUgc3JjIHRvIHRhcmdldC4KLSAgdmlydHVhbCBTdGF0dXMgUmVu
YW1lRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXQpID0gMDsKLQotICAvLyBMb2NrIHRoZSBzcGVj
aWZpZWQgZmlsZS4gIFVzZWQgdG8gcHJldmVudCBjb25jdXJyZW50IGFjY2VzcyB0bwotICAvLyB0
aGUgc2FtZSBkYiBieSBtdWx0aXBsZSBwcm9jZXNzZXMuICBPbiBmYWlsdXJlLCBzdG9yZXMgTlVM
TCBpbgotICAvLyAqbG9jayBhbmQgcmV0dXJucyBub24tT0suCi0gIC8vCi0gIC8vIE9uIHN1Y2Nl
c3MsIHN0b3JlcyBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlCi0g
IC8vIGFjcXVpcmVkIGxvY2sgaW4gKmxvY2sgYW5kIHJldHVybnMgT0suICBUaGUgY2FsbGVyIHNo
b3VsZCBjYWxsCi0gIC8vIFVubG9ja0ZpbGUoKmxvY2spIHRvIHJlbGVhc2UgdGhlIGxvY2suICBJ
ZiB0aGUgcHJvY2VzcyBleGl0cywKLSAgLy8gdGhlIGxvY2sgd2lsbCBiZSBhdXRvbWF0aWNhbGx5
IHJlbGVhc2VkLgotICAvLwotICAvLyBJZiBzb21lYm9keSBlbHNlIGFscmVhZHkgaG9sZHMgdGhl
IGxvY2ssIGZpbmlzaGVzIGltbWVkaWF0ZWx5Ci0gIC8vIHdpdGggYSBmYWlsdXJlLiAgSS5lLiwg
dGhpcyBjYWxsIGRvZXMgbm90IHdhaXQgZm9yIGV4aXN0aW5nIGxvY2tzCi0gIC8vIHRvIGdvIGF3
YXkuCi0gIC8vCi0gIC8vIE1heSBjcmVhdGUgdGhlIG5hbWVkIGZpbGUgaWYgaXQgZG9lcyBub3Qg
YWxyZWFkeSBleGlzdC4KLSAgdmlydHVhbCBTdGF0dXMgTG9ja0ZpbGUoY29uc3Qgc3RkOjpzdHJp
bmcmIGZuYW1lLCBGaWxlTG9jayoqIGxvY2spID0gMDsKLQotICAvLyBSZWxlYXNlIHRoZSBsb2Nr
IGFjcXVpcmVkIGJ5IGEgcHJldmlvdXMgc3VjY2Vzc2Z1bCBjYWxsIHRvIExvY2tGaWxlLgotICAv
LyBSRVFVSVJFUzogbG9jayB3YXMgcmV0dXJuZWQgYnkgYSBzdWNjZXNzZnVsIExvY2tGaWxlKCkg
Y2FsbAotICAvLyBSRVFVSVJFUzogbG9jayBoYXMgbm90IGFscmVhZHkgYmVlbiB1bmxvY2tlZC4K
LSAgdmlydHVhbCBTdGF0dXMgVW5sb2NrRmlsZShGaWxlTG9jayogbG9jaykgPSAwOwotCi0gIC8v
IEFycmFuZ2UgdG8gcnVuICIoKmZ1bmN0aW9uKShhcmcpIiBvbmNlIGluIGEgYmFja2dyb3VuZCB0
aHJlYWQuCi0gIC8vCi0gIC8vICJmdW5jdGlvbiIgbWF5IHJ1biBpbiBhbiB1bnNwZWNpZmllZCB0
aHJlYWQuICBNdWx0aXBsZSBmdW5jdGlvbnMKLSAgLy8gYWRkZWQgdG8gdGhlIHNhbWUgRW52IG1h
eSBydW4gY29uY3VycmVudGx5IGluIGRpZmZlcmVudCB0aHJlYWRzLgotICAvLyBJLmUuLCB0aGUg
Y2FsbGVyIG1heSBub3QgYXNzdW1lIHRoYXQgYmFja2dyb3VuZCB3b3JrIGl0ZW1zIGFyZQotICAv
LyBzZXJpYWxpemVkLgotICB2aXJ0dWFsIHZvaWQgU2NoZWR1bGUoCi0gICAgICB2b2lkICgqZnVu
Y3Rpb24pKHZvaWQqIGFyZyksCi0gICAgICB2b2lkKiBhcmcpID0gMDsKLQotICAvLyBTdGFydCBh
IG5ldyB0aHJlYWQsIGludm9raW5nICJmdW5jdGlvbihhcmcpIiB3aXRoaW4gdGhlIG5ldyB0aHJl
YWQuCi0gIC8vIFdoZW4gImZ1bmN0aW9uKGFyZykiIHJldHVybnMsIHRoZSB0aHJlYWQgd2lsbCBi
ZSBkZXN0cm95ZWQuCi0gIHZpcnR1YWwgdm9pZCBTdGFydFRocmVhZCh2b2lkICgqZnVuY3Rpb24p
KHZvaWQqIGFyZyksIHZvaWQqIGFyZykgPSAwOwotCi0gIC8vICpwYXRoIGlzIHNldCB0byBhIHRl
bXBvcmFyeSBkaXJlY3RvcnkgdGhhdCBjYW4gYmUgdXNlZCBmb3IgdGVzdGluZy4gSXQgbWF5Ci0g
IC8vIG9yIG1hbnkgbm90IGhhdmUganVzdCBiZWVuIGNyZWF0ZWQuIFRoZSBkaXJlY3RvcnkgbWF5
IG9yIG1heSBub3QgZGlmZmVyCi0gIC8vIGJldHdlZW4gcnVucyBvZiB0aGUgc2FtZSBwcm9jZXNz
LCBidXQgc3Vic2VxdWVudCBjYWxscyB3aWxsIHJldHVybiB0aGUKLSAgLy8gc2FtZSBkaXJlY3Rv
cnkuCi0gIHZpcnR1YWwgU3RhdHVzIEdldFRlc3REaXJlY3Rvcnkoc3RkOjpzdHJpbmcqIHBhdGgp
ID0gMDsKLQotICAvLyBDcmVhdGUgYW5kIHJldHVybiBhIGxvZyBmaWxlIGZvciBzdG9yaW5nIGlu
Zm9ybWF0aW9uYWwgbWVzc2FnZXMuCi0gIHZpcnR1YWwgU3RhdHVzIE5ld0xvZ2dlcihjb25zdCBz
dGQ6OnN0cmluZyYgZm5hbWUsIExvZ2dlcioqIHJlc3VsdCkgPSAwOwotCi0gIC8vIFJldHVybnMg
dGhlIG51bWJlciBvZiBtaWNyby1zZWNvbmRzIHNpbmNlIHNvbWUgZml4ZWQgcG9pbnQgaW4gdGlt
ZS4gT25seQotICAvLyB1c2VmdWwgZm9yIGNvbXB1dGluZyBkZWx0YXMgb2YgdGltZS4KLSAgdmly
dHVhbCB1aW50NjRfdCBOb3dNaWNyb3MoKSA9IDA7Ci0KLSAgLy8gU2xlZXAvZGVsYXkgdGhlIHRo
cmVhZCBmb3IgdGhlIHBlcnNjcmliZWQgbnVtYmVyIG9mIG1pY3JvLXNlY29uZHMuCi0gIHZpcnR1
YWwgdm9pZCBTbGVlcEZvck1pY3Jvc2Vjb25kcyhpbnQgbWljcm9zKSA9IDA7Ci0KLSBwcml2YXRl
OgotICAvLyBObyBjb3B5aW5nIGFsbG93ZWQKLSAgRW52KGNvbnN0IEVudiYpOwotICB2b2lkIG9w
ZXJhdG9yPShjb25zdCBFbnYmKTsKLX07Ci0KLS8vIEEgZmlsZSBhYnN0cmFjdGlvbiBmb3IgcmVh
ZGluZyBzZXF1ZW50aWFsbHkgdGhyb3VnaCBhIGZpbGUKLWNsYXNzIFNlcXVlbnRpYWxGaWxlIHsK
LSBwdWJsaWM6Ci0gIFNlcXVlbnRpYWxGaWxlKCkgeyB9Ci0gIHZpcnR1YWwgflNlcXVlbnRpYWxG
aWxlKCk7Ci0KLSAgLy8gUmVhZCB1cCB0byAibiIgYnl0ZXMgZnJvbSB0aGUgZmlsZS4gICJzY3Jh
dGNoWzAuLm4tMV0iIG1heSBiZQotICAvLyB3cml0dGVuIGJ5IHRoaXMgcm91dGluZS4gIFNldHMg
IipyZXN1bHQiIHRvIHRoZSBkYXRhIHRoYXQgd2FzCi0gIC8vIHJlYWQgKGluY2x1ZGluZyBpZiBm
ZXdlciB0aGFuICJuIiBieXRlcyB3ZXJlIHN1Y2Nlc3NmdWxseSByZWFkKS4KLSAgLy8gTWF5IHNl
dCAiKnJlc3VsdCIgdG8gcG9pbnQgYXQgZGF0YSBpbiAic2NyYXRjaFswLi5uLTFdIiwgc28KLSAg
Ly8gInNjcmF0Y2hbMC4ubi0xXSIgbXVzdCBiZSBsaXZlIHdoZW4gIipyZXN1bHQiIGlzIHVzZWQu
Ci0gIC8vIElmIGFuIGVycm9yIHdhcyBlbmNvdW50ZXJlZCwgcmV0dXJucyBhIG5vbi1PSyBzdGF0
dXMuCi0gIC8vCi0gIC8vIFJFUVVJUkVTOiBFeHRlcm5hbCBzeW5jaHJvbml6YXRpb24KLSAgdmly
dHVhbCBTdGF0dXMgUmVhZChzaXplX3QgbiwgU2xpY2UqIHJlc3VsdCwgY2hhciogc2NyYXRjaCkg
PSAwOwotCi0gIC8vIFNraXAgIm4iIGJ5dGVzIGZyb20gdGhlIGZpbGUuIFRoaXMgaXMgZ3VhcmFu
dGVlZCB0byBiZSBubwotICAvLyBzbG93ZXIgdGhhdCByZWFkaW5nIHRoZSBzYW1lIGRhdGEsIGJ1
dCBtYXkgYmUgZmFzdGVyLgotICAvLwotICAvLyBJZiBlbmQgb2YgZmlsZSBpcyByZWFjaGVkLCBz
a2lwcGluZyB3aWxsIHN0b3AgYXQgdGhlIGVuZCBvZiB0aGUKLSAgLy8gZmlsZSwgYW5kIFNraXAg
d2lsbCByZXR1cm4gT0suCi0gIC8vCi0gIC8vIFJFUVVJUkVTOiBFeHRlcm5hbCBzeW5jaHJvbml6
YXRpb24KLSAgdmlydHVhbCBTdGF0dXMgU2tpcCh1aW50NjRfdCBuKSA9IDA7Ci0KLSBwcml2YXRl
OgotICAvLyBObyBjb3B5aW5nIGFsbG93ZWQKLSAgU2VxdWVudGlhbEZpbGUoY29uc3QgU2VxdWVu
dGlhbEZpbGUmKTsKLSAgdm9pZCBvcGVyYXRvcj0oY29uc3QgU2VxdWVudGlhbEZpbGUmKTsKLX07
Ci0KLS8vIEEgZmlsZSBhYnN0cmFjdGlvbiBmb3IgcmFuZG9tbHkgcmVhZGluZyB0aGUgY29udGVu
dHMgb2YgYSBmaWxlLgotY2xhc3MgUmFuZG9tQWNjZXNzRmlsZSB7Ci0gcHVibGljOgotICBSYW5k
b21BY2Nlc3NGaWxlKCkgeyB9Ci0gIHZpcnR1YWwgflJhbmRvbUFjY2Vzc0ZpbGUoKTsKLQotICAv
LyBSZWFkIHVwIHRvICJuIiBieXRlcyBmcm9tIHRoZSBmaWxlIHN0YXJ0aW5nIGF0ICJvZmZzZXQi
LgotICAvLyAic2NyYXRjaFswLi5uLTFdIiBtYXkgYmUgd3JpdHRlbiBieSB0aGlzIHJvdXRpbmUu
ICBTZXRzICIqcmVzdWx0IgotICAvLyB0byB0aGUgZGF0YSB0aGF0IHdhcyByZWFkIChpbmNsdWRp
bmcgaWYgZmV3ZXIgdGhhbiAibiIgYnl0ZXMgd2VyZQotICAvLyBzdWNjZXNzZnVsbHkgcmVhZCku
ICBNYXkgc2V0ICIqcmVzdWx0IiB0byBwb2ludCBhdCBkYXRhIGluCi0gIC8vICJzY3JhdGNoWzAu
Lm4tMV0iLCBzbyAic2NyYXRjaFswLi5uLTFdIiBtdXN0IGJlIGxpdmUgd2hlbgotICAvLyAiKnJl
c3VsdCIgaXMgdXNlZC4gIElmIGFuIGVycm9yIHdhcyBlbmNvdW50ZXJlZCwgcmV0dXJucyBhIG5v
bi1PSwotICAvLyBzdGF0dXMuCi0gIC8vCi0gIC8vIFNhZmUgZm9yIGNvbmN1cnJlbnQgdXNlIGJ5
IG11bHRpcGxlIHRocmVhZHMuCi0gIHZpcnR1YWwgU3RhdHVzIFJlYWQodWludDY0X3Qgb2Zmc2V0
LCBzaXplX3QgbiwgU2xpY2UqIHJlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBz
Y3JhdGNoKSBjb25zdCA9IDA7Ci0KLSBwcml2YXRlOgotICAvLyBObyBjb3B5aW5nIGFsbG93ZWQK
LSAgUmFuZG9tQWNjZXNzRmlsZShjb25zdCBSYW5kb21BY2Nlc3NGaWxlJik7Ci0gIHZvaWQgb3Bl
cmF0b3I9KGNvbnN0IFJhbmRvbUFjY2Vzc0ZpbGUmKTsKLX07Ci0KLS8vIEEgZmlsZSBhYnN0cmFj
dGlvbiBmb3Igc2VxdWVudGlhbCB3cml0aW5nLiAgVGhlIGltcGxlbWVudGF0aW9uCi0vLyBtdXN0
IHByb3ZpZGUgYnVmZmVyaW5nIHNpbmNlIGNhbGxlcnMgbWF5IGFwcGVuZCBzbWFsbCBmcmFnbWVu
dHMKLS8vIGF0IGEgdGltZSB0byB0aGUgZmlsZS4KLWNsYXNzIFdyaXRhYmxlRmlsZSB7Ci0gcHVi
bGljOgotICBXcml0YWJsZUZpbGUoKSB7IH0KLSAgdmlydHVhbCB+V3JpdGFibGVGaWxlKCk7Ci0K
LSAgdmlydHVhbCBTdGF0dXMgQXBwZW5kKGNvbnN0IFNsaWNlJiBkYXRhKSA9IDA7Ci0gIHZpcnR1
YWwgU3RhdHVzIENsb3NlKCkgPSAwOwotICB2aXJ0dWFsIFN0YXR1cyBGbHVzaCgpID0gMDsKLSAg
dmlydHVhbCBTdGF0dXMgU3luYygpID0gMDsKLQotIHByaXZhdGU6Ci0gIC8vIE5vIGNvcHlpbmcg
YWxsb3dlZAotICBXcml0YWJsZUZpbGUoY29uc3QgV3JpdGFibGVGaWxlJik7Ci0gIHZvaWQgb3Bl
cmF0b3I9KGNvbnN0IFdyaXRhYmxlRmlsZSYpOwotfTsKLQotLy8gQW4gaW50ZXJmYWNlIGZvciB3
cml0aW5nIGxvZyBtZXNzYWdlcy4KLWNsYXNzIExvZ2dlciB7Ci0gcHVibGljOgotICBMb2dnZXIo
KSB7IH0KLSAgdmlydHVhbCB+TG9nZ2VyKCk7Ci0KLSAgLy8gV3JpdGUgYW4gZW50cnkgdG8gdGhl
IGxvZyBmaWxlIHdpdGggdGhlIHNwZWNpZmllZCBmb3JtYXQuCi0gIHZpcnR1YWwgdm9pZCBMb2d2
KGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBhcCkgPSAwOwotCi0gcHJpdmF0ZToKLSAgLy8g
Tm8gY29weWluZyBhbGxvd2VkCi0gIExvZ2dlcihjb25zdCBMb2dnZXImKTsKLSAgdm9pZCBvcGVy
YXRvcj0oY29uc3QgTG9nZ2VyJik7Ci19OwotCi0KLS8vIElkZW50aWZpZXMgYSBsb2NrZWQgZmls
ZS4KLWNsYXNzIEZpbGVMb2NrIHsKLSBwdWJsaWM6Ci0gIEZpbGVMb2NrKCkgeyB9Ci0gIHZpcnR1
YWwgfkZpbGVMb2NrKCk7Ci0gcHJpdmF0ZToKLSAgLy8gTm8gY29weWluZyBhbGxvd2VkCi0gIEZp
bGVMb2NrKGNvbnN0IEZpbGVMb2NrJik7Ci0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IEZpbGVMb2Nr
Jik7Ci19OwotCi0vLyBMb2cgdGhlIHNwZWNpZmllZCBkYXRhIHRvICppbmZvX2xvZyBpZiBpbmZv
X2xvZyBpcyBub24tTlVMTC4KLWV4dGVybiB2b2lkIExvZyhMb2dnZXIqIGluZm9fbG9nLCBjb25z
dCBjaGFyKiBmb3JtYXQsIC4uLikKLSMgICBpZiBkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVk
KF9fY2xhbmdfXykKLSAgICBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAy
LCAzKSkpCi0jICAgZW5kaWYKLSAgICA7Ci0KLS8vIEEgdXRpbGl0eSByb3V0aW5lOiB3cml0ZSAi
ZGF0YSIgdG8gdGhlIG5hbWVkIGZpbGUuCi1leHRlcm4gU3RhdHVzIFdyaXRlU3RyaW5nVG9GaWxl
KEVudiogZW52LCBjb25zdCBTbGljZSYgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lKTsKLQotLy8gQSB1dGlsaXR5IHJvdXRpbmU6
IHJlYWQgY29udGVudHMgb2YgbmFtZWQgZmlsZSBpbnRvICpkYXRhCi1leHRlcm4gU3RhdHVzIFJl
YWRGaWxlVG9TdHJpbmcoRW52KiBlbnYsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZGF0YSk7Ci0KLS8vIEFuIGlt
cGxlbWVudGF0aW9uIG9mIEVudiB0aGF0IGZvcndhcmRzIGFsbCBjYWxscyB0byBhbm90aGVyIEVu
di4KLS8vIE1heSBiZSB1c2VmdWwgdG8gY2xpZW50cyB3aG8gd2lzaCB0byBvdmVycmlkZSBqdXN0
IHBhcnQgb2YgdGhlCi0vLyBmdW5jdGlvbmFsaXR5IG9mIGFub3RoZXIgRW52LgotY2xhc3MgRW52
V3JhcHBlciA6IHB1YmxpYyBFbnYgewotIHB1YmxpYzoKLSAgLy8gSW5pdGlhbGl6ZSBhbiBFbnZX
cmFwcGVyIHRoYXQgZGVsZWdhdGVzIGFsbCBjYWxscyB0byAqdAotICBleHBsaWNpdCBFbnZXcmFw
cGVyKEVudiogdCkgOiB0YXJnZXRfKHQpIHsgfQotICB2aXJ0dWFsIH5FbnZXcmFwcGVyKCk7Ci0K
LSAgLy8gUmV0dXJuIHRoZSB0YXJnZXQgdG8gd2hpY2ggdGhpcyBFbnYgZm9yd2FyZHMgYWxsIGNh
bGxzCi0gIEVudiogdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gdGFyZ2V0XzsgfQotCi0gIC8vIFRo
ZSBmb2xsb3dpbmcgdGV4dCBpcyBib2lsZXJwbGF0ZSB0aGF0IGZvcndhcmRzIGFsbCBtZXRob2Rz
IHRvIHRhcmdldCgpCi0gIFN0YXR1cyBOZXdTZXF1ZW50aWFsRmlsZShjb25zdCBzdGQ6OnN0cmlu
ZyYgZiwgU2VxdWVudGlhbEZpbGUqKiByKSB7Ci0gICAgcmV0dXJuIHRhcmdldF8tPk5ld1NlcXVl
bnRpYWxGaWxlKGYsIHIpOwotICB9Ci0gIFN0YXR1cyBOZXdSYW5kb21BY2Nlc3NGaWxlKGNvbnN0
IHN0ZDo6c3RyaW5nJiBmLCBSYW5kb21BY2Nlc3NGaWxlKiogcikgewotICAgIHJldHVybiB0YXJn
ZXRfLT5OZXdSYW5kb21BY2Nlc3NGaWxlKGYsIHIpOwotICB9Ci0gIFN0YXR1cyBOZXdXcml0YWJs
ZUZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGYsIFdyaXRhYmxlRmlsZSoqIHIpIHsKLSAgICByZXR1
cm4gdGFyZ2V0Xy0+TmV3V3JpdGFibGVGaWxlKGYsIHIpOwotICB9Ci0gIGJvb2wgRmlsZUV4aXN0
cyhjb25zdCBzdGQ6OnN0cmluZyYgZikgeyByZXR1cm4gdGFyZ2V0Xy0+RmlsZUV4aXN0cyhmKTsg
fQotICBTdGF0dXMgR2V0Q2hpbGRyZW4oY29uc3Qgc3RkOjpzdHJpbmcmIGRpciwgc3RkOjp2ZWN0
b3I8c3RkOjpzdHJpbmc+KiByKSB7Ci0gICAgcmV0dXJuIHRhcmdldF8tPkdldENoaWxkcmVuKGRp
ciwgcik7Ci0gIH0KLSAgU3RhdHVzIERlbGV0ZUZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGYpIHsg
cmV0dXJuIHRhcmdldF8tPkRlbGV0ZUZpbGUoZik7IH0KLSAgU3RhdHVzIENyZWF0ZURpcihjb25z
dCBzdGQ6OnN0cmluZyYgZCkgeyByZXR1cm4gdGFyZ2V0Xy0+Q3JlYXRlRGlyKGQpOyB9Ci0gIFN0
YXR1cyBEZWxldGVEaXIoY29uc3Qgc3RkOjpzdHJpbmcmIGQpIHsgcmV0dXJuIHRhcmdldF8tPkRl
bGV0ZURpcihkKTsgfQotICBTdGF0dXMgR2V0RmlsZVNpemUoY29uc3Qgc3RkOjpzdHJpbmcmIGYs
IHVpbnQ2NF90KiBzKSB7Ci0gICAgcmV0dXJuIHRhcmdldF8tPkdldEZpbGVTaXplKGYsIHMpOwot
ICB9Ci0gIFN0YXR1cyBSZW5hbWVGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzLCBjb25zdCBzdGQ6
OnN0cmluZyYgdCkgewotICAgIHJldHVybiB0YXJnZXRfLT5SZW5hbWVGaWxlKHMsIHQpOwotICB9
Ci0gIFN0YXR1cyBMb2NrRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZiwgRmlsZUxvY2sqKiBsKSB7
Ci0gICAgcmV0dXJuIHRhcmdldF8tPkxvY2tGaWxlKGYsIGwpOwotICB9Ci0gIFN0YXR1cyBVbmxv
Y2tGaWxlKEZpbGVMb2NrKiBsKSB7IHJldHVybiB0YXJnZXRfLT5VbmxvY2tGaWxlKGwpOyB9Ci0g
IHZvaWQgU2NoZWR1bGUodm9pZCAoKmYpKHZvaWQqKSwgdm9pZCogYSkgewotICAgIHJldHVybiB0
YXJnZXRfLT5TY2hlZHVsZShmLCBhKTsKLSAgfQotICB2b2lkIFN0YXJ0VGhyZWFkKHZvaWQgKCpm
KSh2b2lkKiksIHZvaWQqIGEpIHsKLSAgICByZXR1cm4gdGFyZ2V0Xy0+U3RhcnRUaHJlYWQoZiwg
YSk7Ci0gIH0KLSAgdmlydHVhbCBTdGF0dXMgR2V0VGVzdERpcmVjdG9yeShzdGQ6OnN0cmluZyog
cGF0aCkgewotICAgIHJldHVybiB0YXJnZXRfLT5HZXRUZXN0RGlyZWN0b3J5KHBhdGgpOwotICB9
Ci0gIHZpcnR1YWwgU3RhdHVzIE5ld0xvZ2dlcihjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUsIExv
Z2dlcioqIHJlc3VsdCkgewotICAgIHJldHVybiB0YXJnZXRfLT5OZXdMb2dnZXIoZm5hbWUsIHJl
c3VsdCk7Ci0gIH0KLSAgdWludDY0X3QgTm93TWljcm9zKCkgewotICAgIHJldHVybiB0YXJnZXRf
LT5Ob3dNaWNyb3MoKTsKLSAgfQotICB2b2lkIFNsZWVwRm9yTWljcm9zZWNvbmRzKGludCBtaWNy
b3MpIHsKLSAgICB0YXJnZXRfLT5TbGVlcEZvck1pY3Jvc2Vjb25kcyhtaWNyb3MpOwotICB9Ci0g
cHJpdmF0ZToKLSAgRW52KiB0YXJnZXRfOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIK
LQotI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfSU5DTFVERV9FTlZfSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL2ZpbHRlcl9wb2xpY3ku
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL2ZpbHRlcl9wb2xp
Y3kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZiYTA4MC4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9maWx0ZXJfcG9saWN5
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZv
ciBuYW1lcyBvZiBjb250cmlidXRvcnMuCi0vLwotLy8gQSBkYXRhYmFzZSBjYW4gYmUgY29uZmln
dXJlZCB3aXRoIGEgY3VzdG9tIEZpbHRlclBvbGljeSBvYmplY3QuCi0vLyBUaGlzIG9iamVjdCBp
cyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgYSBzbWFsbCBmaWx0ZXIgZnJvbSBhIHNldAotLy8g
b2Yga2V5cy4gIFRoZXNlIGZpbHRlcnMgYXJlIHN0b3JlZCBpbiBsZXZlbGRiIGFuZCBhcmUgY29u
c3VsdGVkCi0vLyBhdXRvbWF0aWNhbGx5IGJ5IGxldmVsZGIgdG8gZGVjaWRlIHdoZXRoZXIgb3Ig
bm90IHRvIHJlYWQgc29tZQotLy8gaW5mb3JtYXRpb24gZnJvbSBkaXNrLiBJbiBtYW55IGNhc2Vz
LCBhIGZpbHRlciBjYW4gY3V0IGRvd24gdGhlCi0vLyBudW1iZXIgb2YgZGlzayBzZWVrcyBmb3Jt
IGEgaGFuZGZ1bCB0byBhIHNpbmdsZSBkaXNrIHNlZWsgcGVyCi0vLyBEQjo6R2V0KCkgY2FsbC4K
LS8vCi0vLyBNb3N0IHBlb3BsZSB3aWxsIHdhbnQgdG8gdXNlIHRoZSBidWlsdGluIGJsb29tIGZp
bHRlciBzdXBwb3J0IChzZWUKLS8vIE5ld0Jsb29tRmlsdGVyUG9saWN5KCkgYmVsb3cpLgotCi0j
aWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9JTkNMVURFX0ZJTFRFUl9QT0xJQ1lfSF8KLSNkZWZpbmUg
U1RPUkFHRV9MRVZFTERCX0lOQ0xVREVfRklMVEVSX1BPTElDWV9IXwotCi0jaW5jbHVkZSA8c3Ry
aW5nPgotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7Ci0KLWNsYXNzIFNsaWNlOwotCi1jbGFzcyBGaWx0
ZXJQb2xpY3kgewotIHB1YmxpYzoKLSAgdmlydHVhbCB+RmlsdGVyUG9saWN5KCk7Ci0KLSAgLy8g
UmV0dXJuIHRoZSBuYW1lIG9mIHRoaXMgcG9saWN5LiAgTm90ZSB0aGF0IGlmIHRoZSBmaWx0ZXIg
ZW5jb2RpbmcKLSAgLy8gY2hhbmdlcyBpbiBhbiBpbmNvbXBhdGlibGUgd2F5LCB0aGUgbmFtZSBy
ZXR1cm5lZCBieSB0aGlzIG1ldGhvZAotICAvLyBtdXN0IGJlIGNoYW5nZWQuICBPdGhlcndpc2Us
IG9sZCBpbmNvbXBhdGlibGUgZmlsdGVycyBtYXkgYmUKLSAgLy8gcGFzc2VkIHRvIG1ldGhvZHMg
b2YgdGhpcyB0eXBlLgotICB2aXJ0dWFsIGNvbnN0IGNoYXIqIE5hbWUoKSBjb25zdCA9IDA7Ci0K
LSAgLy8ga2V5c1swLG4tMV0gY29udGFpbnMgYSBsaXN0IG9mIGtleXMgKHBvdGVudGlhbGx5IHdp
dGggZHVwbGljYXRlcykKLSAgLy8gdGhhdCBhcmUgb3JkZXJlZCBhY2NvcmRpbmcgdG8gdGhlIHVz
ZXIgc3VwcGxpZWQgY29tcGFyYXRvci4KLSAgLy8gQXBwZW5kIGEgZmlsdGVyIHRoYXQgc3VtbWFy
aXplcyBrZXlzWzAsbi0xXSB0byAqZHN0LgotICAvLwotICAvLyBXYXJuaW5nOiBkbyBub3QgY2hh
bmdlIHRoZSBpbml0aWFsIGNvbnRlbnRzIG9mICpkc3QuICBJbnN0ZWFkLAotICAvLyBhcHBlbmQg
dGhlIG5ld2x5IGNvbnN0cnVjdGVkIGZpbHRlciB0byAqZHN0LgotICB2aXJ0dWFsIHZvaWQgQ3Jl
YXRlRmlsdGVyKGNvbnN0IFNsaWNlKiBrZXlzLCBpbnQgbiwgc3RkOjpzdHJpbmcqIGRzdCkKLSAg
ICAgIGNvbnN0ID0gMDsKLQotICAvLyAiZmlsdGVyIiBjb250YWlucyB0aGUgZGF0YSBhcHBlbmRl
ZCBieSBhIHByZWNlZGluZyBjYWxsIHRvCi0gIC8vIENyZWF0ZUZpbHRlcigpIG9uIHRoaXMgY2xh
c3MuICBUaGlzIG1ldGhvZCBtdXN0IHJldHVybiB0cnVlIGlmCi0gIC8vIHRoZSBrZXkgd2FzIGlu
IHRoZSBsaXN0IG9mIGtleXMgcGFzc2VkIHRvIENyZWF0ZUZpbHRlcigpLgotICAvLyBUaGlzIG1l
dGhvZCBtYXkgcmV0dXJuIHRydWUgb3IgZmFsc2UgaWYgdGhlIGtleSB3YXMgbm90IG9uIHRoZQot
ICAvLyBsaXN0LCBidXQgaXQgc2hvdWxkIGFpbSB0byByZXR1cm4gZmFsc2Ugd2l0aCBhIGhpZ2gg
cHJvYmFiaWxpdHkuCi0gIHZpcnR1YWwgYm9vbCBLZXlNYXlNYXRjaChjb25zdCBTbGljZSYga2V5
LCBjb25zdCBTbGljZSYgZmlsdGVyKSBjb25zdCA9IDA7Ci19OwotCi0vLyBSZXR1cm4gYSBuZXcg
ZmlsdGVyIHBvbGljeSB0aGF0IHVzZXMgYSBibG9vbSBmaWx0ZXIgd2l0aCBhcHByb3hpbWF0ZWx5
Ci0vLyB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBiaXRzIHBlciBrZXkuICBBIGdvb2QgdmFsdWUg
Zm9yIGJpdHNfcGVyX2tleQotLy8gaXMgMTAsIHdoaWNoIHlpZWxkcyBhIGZpbHRlciB3aXRoIH4g
MSUgZmFsc2UgcG9zaXRpdmUgcmF0ZS4KLS8vCi0vLyBDYWxsZXJzIG11c3QgZGVsZXRlIHRoZSBy
ZXN1bHQgYWZ0ZXIgYW55IGRhdGFiYXNlIHRoYXQgaXMgdXNpbmcgdGhlCi0vLyByZXN1bHQgaGFz
IGJlZW4gY2xvc2VkLgotLy8KLS8vIE5vdGU6IGlmIHlvdSBhcmUgdXNpbmcgYSBjdXN0b20gY29t
cGFyYXRvciB0aGF0IGlnbm9yZXMgc29tZSBwYXJ0cwotLy8gb2YgdGhlIGtleXMgYmVpbmcgY29t
cGFyZWQsIHlvdSBtdXN0IG5vdCB1c2UgTmV3Qmxvb21GaWx0ZXJQb2xpY3koKQotLy8gYW5kIG11
c3QgcHJvdmlkZSB5b3VyIG93biBGaWx0ZXJQb2xpY3kgdGhhdCBhbHNvIGlnbm9yZXMgdGhlCi0v
LyBjb3JyZXNwb25kaW5nIHBhcnRzIG9mIHRoZSBrZXlzLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBj
b21wYXJhdG9yCi0vLyBpZ25vcmVzIHRyYWlsaW5nIHNwYWNlcywgaXQgd291bGQgYmUgaW5jb3Jy
ZWN0IHRvIHVzZSBhCi0vLyBGaWx0ZXJQb2xpY3kgKGxpa2UgTmV3Qmxvb21GaWx0ZXJQb2xpY3kp
IHRoYXQgZG9lcyBub3QgaWdub3JlCi0vLyB0cmFpbGluZyBzcGFjZXMgaW4ga2V5cy4KLWV4dGVy
biBjb25zdCBGaWx0ZXJQb2xpY3kqIE5ld0Jsb29tRmlsdGVyUG9saWN5KGludCBiaXRzX3Blcl9r
ZXkpOwotCi19Ci0KLSNlbmRpZiAgLy8gU1RPUkFHRV9MRVZFTERCX0lOQ0xVREVfRklMVEVSX1BP
TElDWV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xl
dmVsZGIvaXRlcmF0b3IuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZl
bGRiL2l0ZXJhdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkNTQzZWIuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvaXRl
cmF0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMp
IDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBm
aWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCi0vLwotLy8gQW4gaXRlcmF0b3IgeWllbGRz
IGEgc2VxdWVuY2Ugb2Yga2V5L3ZhbHVlIHBhaXJzIGZyb20gYSBzb3VyY2UuCi0vLyBUaGUgZm9s
bG93aW5nIGNsYXNzIGRlZmluZXMgdGhlIGludGVyZmFjZS4gIE11bHRpcGxlIGltcGxlbWVudGF0
aW9ucwotLy8gYXJlIHByb3ZpZGVkIGJ5IHRoaXMgbGlicmFyeS4gIEluIHBhcnRpY3VsYXIsIGl0
ZXJhdG9ycyBhcmUgcHJvdmlkZWQKLS8vIHRvIGFjY2VzcyB0aGUgY29udGVudHMgb2YgYSBUYWJs
ZSBvciBhIERCLgotLy8KLS8vIE11bHRpcGxlIHRocmVhZHMgY2FuIGludm9rZSBjb25zdCBtZXRo
b2RzIG9uIGFuIEl0ZXJhdG9yIHdpdGhvdXQKLS8vIGV4dGVybmFsIHN5bmNocm9uaXphdGlvbiwg
YnV0IGlmIGFueSBvZiB0aGUgdGhyZWFkcyBtYXkgY2FsbCBhCi0vLyBub24tY29uc3QgbWV0aG9k
LCBhbGwgdGhyZWFkcyBhY2Nlc3NpbmcgdGhlIHNhbWUgSXRlcmF0b3IgbXVzdCB1c2UKLS8vIGV4
dGVybmFsIHN5bmNocm9uaXphdGlvbi4KLQotI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfSU5DTFVE
RV9JVEVSQVRPUl9IXwotI2RlZmluZSBTVE9SQUdFX0xFVkVMREJfSU5DTFVERV9JVEVSQVRPUl9I
XwotCi0jaW5jbHVkZSAibGV2ZWxkYi9zbGljZS5oIgotI2luY2x1ZGUgImxldmVsZGIvc3RhdHVz
LmgiCi0KLW5hbWVzcGFjZSBsZXZlbGRiIHsKLQotY2xhc3MgSXRlcmF0b3IgewotIHB1YmxpYzoK
LSAgSXRlcmF0b3IoKTsKLSAgdmlydHVhbCB+SXRlcmF0b3IoKTsKLQotICAvLyBBbiBpdGVyYXRv
ciBpcyBlaXRoZXIgcG9zaXRpb25lZCBhdCBhIGtleS92YWx1ZSBwYWlyLCBvcgotICAvLyBub3Qg
dmFsaWQuICBUaGlzIG1ldGhvZCByZXR1cm5zIHRydWUgaWZmIHRoZSBpdGVyYXRvciBpcyB2YWxp
ZC4KLSAgdmlydHVhbCBib29sIFZhbGlkKCkgY29uc3QgPSAwOwotCi0gIC8vIFBvc2l0aW9uIGF0
IHRoZSBmaXJzdCBrZXkgaW4gdGhlIHNvdXJjZS4gIFRoZSBpdGVyYXRvciBpcyBWYWxpZCgpCi0g
IC8vIGFmdGVyIHRoaXMgY2FsbCBpZmYgdGhlIHNvdXJjZSBpcyBub3QgZW1wdHkuCi0gIHZpcnR1
YWwgdm9pZCBTZWVrVG9GaXJzdCgpID0gMDsKLQotICAvLyBQb3NpdGlvbiBhdCB0aGUgbGFzdCBr
ZXkgaW4gdGhlIHNvdXJjZS4gIFRoZSBpdGVyYXRvciBpcwotICAvLyBWYWxpZCgpIGFmdGVyIHRo
aXMgY2FsbCBpZmYgdGhlIHNvdXJjZSBpcyBub3QgZW1wdHkuCi0gIHZpcnR1YWwgdm9pZCBTZWVr
VG9MYXN0KCkgPSAwOwotCi0gIC8vIFBvc2l0aW9uIGF0IHRoZSBmaXJzdCBrZXkgaW4gdGhlIHNv
dXJjZSB0aGF0IGF0IG9yIHBhc3QgdGFyZ2V0Ci0gIC8vIFRoZSBpdGVyYXRvciBpcyBWYWxpZCgp
IGFmdGVyIHRoaXMgY2FsbCBpZmYgdGhlIHNvdXJjZSBjb250YWlucwotICAvLyBhbiBlbnRyeSB0
aGF0IGNvbWVzIGF0IG9yIHBhc3QgdGFyZ2V0LgotICB2aXJ0dWFsIHZvaWQgU2Vlayhjb25zdCBT
bGljZSYgdGFyZ2V0KSA9IDA7Ci0KLSAgLy8gTW92ZXMgdG8gdGhlIG5leHQgZW50cnkgaW4gdGhl
IHNvdXJjZS4gIEFmdGVyIHRoaXMgY2FsbCwgVmFsaWQoKSBpcwotICAvLyB0cnVlIGlmZiB0aGUg
aXRlcmF0b3Igd2FzIG5vdCBwb3NpdGlvbmVkIGF0IHRoZSBsYXN0IGVudHJ5IGluIHRoZSBzb3Vy
Y2UuCi0gIC8vIFJFUVVJUkVTOiBWYWxpZCgpCi0gIHZpcnR1YWwgdm9pZCBOZXh0KCkgPSAwOwot
Ci0gIC8vIE1vdmVzIHRvIHRoZSBwcmV2aW91cyBlbnRyeSBpbiB0aGUgc291cmNlLiAgQWZ0ZXIg
dGhpcyBjYWxsLCBWYWxpZCgpIGlzCi0gIC8vIHRydWUgaWZmIHRoZSBpdGVyYXRvciB3YXMgbm90
IHBvc2l0aW9uZWQgYXQgdGhlIGZpcnN0IGVudHJ5IGluIHNvdXJjZS4KLSAgLy8gUkVRVUlSRVM6
IFZhbGlkKCkKLSAgdmlydHVhbCB2b2lkIFByZXYoKSA9IDA7Ci0KLSAgLy8gUmV0dXJuIHRoZSBr
ZXkgZm9yIHRoZSBjdXJyZW50IGVudHJ5LiAgVGhlIHVuZGVybHlpbmcgc3RvcmFnZSBmb3IKLSAg
Ly8gdGhlIHJldHVybmVkIHNsaWNlIGlzIHZhbGlkIG9ubHkgdW50aWwgdGhlIG5leHQgbW9kaWZp
Y2F0aW9uIG9mCi0gIC8vIHRoZSBpdGVyYXRvci4KLSAgLy8gUkVRVUlSRVM6IFZhbGlkKCkKLSAg
dmlydHVhbCBTbGljZSBrZXkoKSBjb25zdCA9IDA7Ci0KLSAgLy8gUmV0dXJuIHRoZSB2YWx1ZSBm
b3IgdGhlIGN1cnJlbnQgZW50cnkuICBUaGUgdW5kZXJseWluZyBzdG9yYWdlIGZvcgotICAvLyB0
aGUgcmV0dXJuZWQgc2xpY2UgaXMgdmFsaWQgb25seSB1bnRpbCB0aGUgbmV4dCBtb2RpZmljYXRp
b24gb2YKLSAgLy8gdGhlIGl0ZXJhdG9yLgotICAvLyBSRVFVSVJFUzogIUF0RW5kKCkgJiYgIUF0
U3RhcnQoKQotICB2aXJ0dWFsIFNsaWNlIHZhbHVlKCkgY29uc3QgPSAwOwotCi0gIC8vIElmIGFu
IGVycm9yIGhhcyBvY2N1cnJlZCwgcmV0dXJuIGl0LiAgRWxzZSByZXR1cm4gYW4gb2sgc3RhdHVz
LgotICB2aXJ0dWFsIFN0YXR1cyBzdGF0dXMoKSBjb25zdCA9IDA7Ci0KLSAgLy8gQ2xpZW50cyBh
cmUgYWxsb3dlZCB0byByZWdpc3RlciBmdW5jdGlvbi9hcmcxL2FyZzIgdHJpcGxlcyB0aGF0Ci0g
IC8vIHdpbGwgYmUgaW52b2tlZCB3aGVuIHRoaXMgaXRlcmF0b3IgaXMgZGVzdHJveWVkLgotICAv
LwotICAvLyBOb3RlIHRoYXQgdW5saWtlIGFsbCBvZiB0aGUgcHJlY2VkaW5nIG1ldGhvZHMsIHRo
aXMgbWV0aG9kIGlzCi0gIC8vIG5vdCBhYnN0cmFjdCBhbmQgdGhlcmVmb3JlIGNsaWVudHMgc2hv
dWxkIG5vdCBvdmVycmlkZSBpdC4KLSAgdHlwZWRlZiB2b2lkICgqQ2xlYW51cEZ1bmN0aW9uKSh2
b2lkKiBhcmcxLCB2b2lkKiBhcmcyKTsKLSAgdm9pZCBSZWdpc3RlckNsZWFudXAoQ2xlYW51cEZ1
bmN0aW9uIGZ1bmN0aW9uLCB2b2lkKiBhcmcxLCB2b2lkKiBhcmcyKTsKLQotIHByaXZhdGU6Ci0g
IHN0cnVjdCBDbGVhbnVwIHsKLSAgICBDbGVhbnVwRnVuY3Rpb24gZnVuY3Rpb247Ci0gICAgdm9p
ZCogYXJnMTsKLSAgICB2b2lkKiBhcmcyOwotICAgIENsZWFudXAqIG5leHQ7Ci0gIH07Ci0gIENs
ZWFudXAgY2xlYW51cF87Ci0KLSAgLy8gTm8gY29weWluZyBhbGxvd2VkCi0gIEl0ZXJhdG9yKGNv
bnN0IEl0ZXJhdG9yJik7Ci0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IEl0ZXJhdG9yJik7Ci19Owot
Ci0vLyBSZXR1cm4gYW4gZW1wdHkgaXRlcmF0b3IgKHlpZWxkcyBub3RoaW5nKS4KLWV4dGVybiBJ
dGVyYXRvciogTmV3RW1wdHlJdGVyYXRvcigpOwotCi0vLyBSZXR1cm4gYW4gZW1wdHkgaXRlcmF0
b3Igd2l0aCB0aGUgc3BlY2lmaWVkIHN0YXR1cy4KLWV4dGVybiBJdGVyYXRvciogTmV3RXJyb3JJ
dGVyYXRvcihjb25zdCBTdGF0dXMmIHN0YXR1cyk7Ci0KLX0gIC8vIG5hbWVzcGFjZSBsZXZlbGRi
Ci0KLSNlbmRpZiAgLy8gU1RPUkFHRV9MRVZFTERCX0lOQ0xVREVfSVRFUkFUT1JfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL29wdGlvbnMu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL29wdGlvbnMuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRkYTcxOC4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9vcHRpb25zLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxOTUgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERC
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2Yg
Y29udHJpYnV0b3JzLgotCi0jaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9JTkNMVURFX09QVElPTlNf
SF8KLSNkZWZpbmUgU1RPUkFHRV9MRVZFTERCX0lOQ0xVREVfT1BUSU9OU19IXwotCi0jaW5jbHVk
ZSA8c3RkZGVmLmg+Ci0KLW5hbWVzcGFjZSBsZXZlbGRiIHsKLQotY2xhc3MgQ2FjaGU7Ci1jbGFz
cyBDb21wYXJhdG9yOwotY2xhc3MgRW52OwotY2xhc3MgRmlsdGVyUG9saWN5OwotY2xhc3MgTG9n
Z2VyOwotY2xhc3MgU25hcHNob3Q7Ci0KLS8vIERCIGNvbnRlbnRzIGFyZSBzdG9yZWQgaW4gYSBz
ZXQgb2YgYmxvY2tzLCBlYWNoIG9mIHdoaWNoIGhvbGRzIGEKLS8vIHNlcXVlbmNlIG9mIGtleSx2
YWx1ZSBwYWlycy4gIEVhY2ggYmxvY2sgbWF5IGJlIGNvbXByZXNzZWQgYmVmb3JlCi0vLyBiZWlu
ZyBzdG9yZWQgaW4gYSBmaWxlLiAgVGhlIGZvbGxvd2luZyBlbnVtIGRlc2NyaWJlcyB3aGljaAot
Ly8gY29tcHJlc3Npb24gbWV0aG9kIChpZiBhbnkpIGlzIHVzZWQgdG8gY29tcHJlc3MgYSBibG9j
ay4KLWVudW0gQ29tcHJlc3Npb25UeXBlIHsKLSAgLy8gTk9URTogZG8gbm90IGNoYW5nZSB0aGUg
dmFsdWVzIG9mIGV4aXN0aW5nIGVudHJpZXMsIGFzIHRoZXNlIGFyZQotICAvLyBwYXJ0IG9mIHRo
ZSBwZXJzaXN0ZW50IGZvcm1hdCBvbiBkaXNrLgotICBrTm9Db21wcmVzc2lvbiAgICAgPSAweDAs
Ci0gIGtTbmFwcHlDb21wcmVzc2lvbiA9IDB4MQotfTsKLQotLy8gT3B0aW9ucyB0byBjb250cm9s
IHRoZSBiZWhhdmlvciBvZiBhIGRhdGFiYXNlIChwYXNzZWQgdG8gREI6Ok9wZW4pCi1zdHJ1Y3Qg
T3B0aW9ucyB7Ci0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gUGFyYW1ldGVycyB0aGF0
IGFmZmVjdCBiZWhhdmlvcgotCi0gIC8vIENvbXBhcmF0b3IgdXNlZCB0byBkZWZpbmUgdGhlIG9y
ZGVyIG9mIGtleXMgaW4gdGhlIHRhYmxlLgotICAvLyBEZWZhdWx0OiBhIGNvbXBhcmF0b3IgdGhh
dCB1c2VzIGxleGljb2dyYXBoaWMgYnl0ZS13aXNlIG9yZGVyaW5nCi0gIC8vCi0gIC8vIFJFUVVJ
UkVTOiBUaGUgY2xpZW50IG11c3QgZW5zdXJlIHRoYXQgdGhlIGNvbXBhcmF0b3Igc3VwcGxpZWQK
LSAgLy8gaGVyZSBoYXMgdGhlIHNhbWUgbmFtZSBhbmQgb3JkZXJzIGtleXMgKmV4YWN0bHkqIHRo
ZSBzYW1lIGFzIHRoZQotICAvLyBjb21wYXJhdG9yIHByb3ZpZGVkIHRvIHByZXZpb3VzIG9wZW4g
Y2FsbHMgb24gdGhlIHNhbWUgREIuCi0gIGNvbnN0IENvbXBhcmF0b3IqIGNvbXBhcmF0b3I7Ci0K
LSAgLy8gSWYgdHJ1ZSwgdGhlIGRhdGFiYXNlIHdpbGwgYmUgY3JlYXRlZCBpZiBpdCBpcyBtaXNz
aW5nLgotICAvLyBEZWZhdWx0OiBmYWxzZQotICBib29sIGNyZWF0ZV9pZl9taXNzaW5nOwotCi0g
IC8vIElmIHRydWUsIGFuIGVycm9yIGlzIHJhaXNlZCBpZiB0aGUgZGF0YWJhc2UgYWxyZWFkeSBl
eGlzdHMuCi0gIC8vIERlZmF1bHQ6IGZhbHNlCi0gIGJvb2wgZXJyb3JfaWZfZXhpc3RzOwotCi0g
IC8vIElmIHRydWUsIHRoZSBpbXBsZW1lbnRhdGlvbiB3aWxsIGRvIGFnZ3Jlc3NpdmUgY2hlY2tp
bmcgb2YgdGhlCi0gIC8vIGRhdGEgaXQgaXMgcHJvY2Vzc2luZyBhbmQgd2lsbCBzdG9wIGVhcmx5
IGlmIGl0IGRldGVjdHMgYW55Ci0gIC8vIGVycm9ycy4gIFRoaXMgbWF5IGhhdmUgdW5mb3Jlc2Vl
biByYW1pZmljYXRpb25zOiBmb3IgZXhhbXBsZSwgYQotICAvLyBjb3JydXB0aW9uIG9mIG9uZSBE
QiBlbnRyeSBtYXkgY2F1c2UgYSBsYXJnZSBudW1iZXIgb2YgZW50cmllcyB0bwotICAvLyBiZWNv
bWUgdW5yZWFkYWJsZSBvciBmb3IgdGhlIGVudGlyZSBEQiB0byBiZWNvbWUgdW5vcGVuYWJsZS4K
LSAgLy8gRGVmYXVsdDogZmFsc2UKLSAgYm9vbCBwYXJhbm9pZF9jaGVja3M7Ci0KLSAgLy8gVXNl
IHRoZSBzcGVjaWZpZWQgb2JqZWN0IHRvIGludGVyYWN0IHdpdGggdGhlIGVudmlyb25tZW50LAot
ICAvLyBlLmcuIHRvIHJlYWQvd3JpdGUgZmlsZXMsIHNjaGVkdWxlIGJhY2tncm91bmQgd29yaywg
ZXRjLgotICAvLyBEZWZhdWx0OiBFbnY6OkRlZmF1bHQoKQotICBFbnYqIGVudjsKLQotICAvLyBB
bnkgaW50ZXJuYWwgcHJvZ3Jlc3MvZXJyb3IgaW5mb3JtYXRpb24gZ2VuZXJhdGVkIGJ5IHRoZSBk
YiB3aWxsCi0gIC8vIGJlIHdyaXR0ZW4gdG8gaW5mb19sb2cgaWYgaXQgaXMgbm9uLU5VTEwsIG9y
IHRvIGEgZmlsZSBzdG9yZWQKLSAgLy8gaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBEQiBj
b250ZW50cyBpZiBpbmZvX2xvZyBpcyBOVUxMLgotICAvLyBEZWZhdWx0OiBOVUxMCi0gIExvZ2dl
ciogaW5mb19sb2c7Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLQotICAvLyBQYXJhbWV0ZXJz
IHRoYXQgYWZmZWN0IHBlcmZvcm1hbmNlCi0KLSAgLy8gQW1vdW50IG9mIGRhdGEgdG8gYnVpbGQg
dXAgaW4gbWVtb3J5IChiYWNrZWQgYnkgYW4gdW5zb3J0ZWQgbG9nCi0gIC8vIG9uIGRpc2spIGJl
Zm9yZSBjb252ZXJ0aW5nIHRvIGEgc29ydGVkIG9uLWRpc2sgZmlsZS4KLSAgLy8KLSAgLy8gTGFy
Z2VyIHZhbHVlcyBpbmNyZWFzZSBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBkdXJpbmcgYnVsayBs
b2Fkcy4KLSAgLy8gVXAgdG8gdHdvIHdyaXRlIGJ1ZmZlcnMgbWF5IGJlIGhlbGQgaW4gbWVtb3J5
IGF0IHRoZSBzYW1lIHRpbWUsCi0gIC8vIHNvIHlvdSBtYXkgd2lzaCB0byBhZGp1c3QgdGhpcyBw
YXJhbWV0ZXIgdG8gY29udHJvbCBtZW1vcnkgdXNhZ2UuCi0gIC8vIEFsc28sIGEgbGFyZ2VyIHdy
aXRlIGJ1ZmZlciB3aWxsIHJlc3VsdCBpbiBhIGxvbmdlciByZWNvdmVyeSB0aW1lCi0gIC8vIHRo
ZSBuZXh0IHRpbWUgdGhlIGRhdGFiYXNlIGlzIG9wZW5lZC4KLSAgLy8KLSAgLy8gRGVmYXVsdDog
NE1CCi0gIHNpemVfdCB3cml0ZV9idWZmZXJfc2l6ZTsKLQotICAvLyBOdW1iZXIgb2Ygb3BlbiBm
aWxlcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZSBEQi4gIFlvdSBtYXkgbmVlZCB0bwotICAvLyBp
bmNyZWFzZSB0aGlzIGlmIHlvdXIgZGF0YWJhc2UgaGFzIGEgbGFyZ2Ugd29ya2luZyBzZXQgKGJ1
ZGdldAotICAvLyBvbmUgb3BlbiBmaWxlIHBlciAyTUIgb2Ygd29ya2luZyBzZXQpLgotICAvLwot
ICAvLyBEZWZhdWx0OiAxMDAwCi0gIGludCBtYXhfb3Blbl9maWxlczsKLQotICAvLyBDb250cm9s
IG92ZXIgYmxvY2tzICh1c2VyIGRhdGEgaXMgc3RvcmVkIGluIGEgc2V0IG9mIGJsb2NrcywgYW5k
Ci0gIC8vIGEgYmxvY2sgaXMgdGhlIHVuaXQgb2YgcmVhZGluZyBmcm9tIGRpc2spLgotCi0gIC8v
IElmIG5vbi1OVUxMLCB1c2UgdGhlIHNwZWNpZmllZCBjYWNoZSBmb3IgYmxvY2tzLgotICAvLyBJ
ZiBOVUxMLCBsZXZlbGRiIHdpbGwgYXV0b21hdGljYWxseSBjcmVhdGUgYW5kIHVzZSBhbiA4TUIg
aW50ZXJuYWwgY2FjaGUuCi0gIC8vIERlZmF1bHQ6IE5VTEwKLSAgQ2FjaGUqIGJsb2NrX2NhY2hl
OwotCi0gIC8vIEFwcHJveGltYXRlIHNpemUgb2YgdXNlciBkYXRhIHBhY2tlZCBwZXIgYmxvY2su
ICBOb3RlIHRoYXQgdGhlCi0gIC8vIGJsb2NrIHNpemUgc3BlY2lmaWVkIGhlcmUgY29ycmVzcG9u
ZHMgdG8gdW5jb21wcmVzc2VkIGRhdGEuICBUaGUKLSAgLy8gYWN0dWFsIHNpemUgb2YgdGhlIHVu
aXQgcmVhZCBmcm9tIGRpc2sgbWF5IGJlIHNtYWxsZXIgaWYKLSAgLy8gY29tcHJlc3Npb24gaXMg
ZW5hYmxlZC4gIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBjaGFuZ2VkIGR5bmFtaWNhbGx5LgotICAv
LwotICAvLyBEZWZhdWx0OiA0SwotICBzaXplX3QgYmxvY2tfc2l6ZTsKLQotICAvLyBOdW1iZXIg
b2Yga2V5cyBiZXR3ZWVuIHJlc3RhcnQgcG9pbnRzIGZvciBkZWx0YSBlbmNvZGluZyBvZiBrZXlz
LgotICAvLyBUaGlzIHBhcmFtZXRlciBjYW4gYmUgY2hhbmdlZCBkeW5hbWljYWxseS4gIE1vc3Qg
Y2xpZW50cyBzaG91bGQKLSAgLy8gbGVhdmUgdGhpcyBwYXJhbWV0ZXIgYWxvbmUuCi0gIC8vCi0g
IC8vIERlZmF1bHQ6IDE2Ci0gIGludCBibG9ja19yZXN0YXJ0X2ludGVydmFsOwotCi0gIC8vIENv
bXByZXNzIGJsb2NrcyB1c2luZyB0aGUgc3BlY2lmaWVkIGNvbXByZXNzaW9uIGFsZ29yaXRobS4g
IFRoaXMKLSAgLy8gcGFyYW1ldGVyIGNhbiBiZSBjaGFuZ2VkIGR5bmFtaWNhbGx5LgotICAvLwot
ICAvLyBEZWZhdWx0OiBrU25hcHB5Q29tcHJlc3Npb24sIHdoaWNoIGdpdmVzIGxpZ2h0d2VpZ2h0
IGJ1dCBmYXN0Ci0gIC8vIGNvbXByZXNzaW9uLgotICAvLwotICAvLyBUeXBpY2FsIHNwZWVkcyBv
ZiBrU25hcHB5Q29tcHJlc3Npb24gb24gYW4gSW50ZWwoUikgQ29yZShUTSkyIDIuNEdIejoKLSAg
Ly8gICAgfjIwMC01MDBNQi9zIGNvbXByZXNzaW9uCi0gIC8vICAgIH40MDAtODAwTUIvcyBkZWNv
bXByZXNzaW9uCi0gIC8vIE5vdGUgdGhhdCB0aGVzZSBzcGVlZHMgYXJlIHNpZ25pZmljYW50bHkg
ZmFzdGVyIHRoYW4gbW9zdAotICAvLyBwZXJzaXN0ZW50IHN0b3JhZ2Ugc3BlZWRzLCBhbmQgdGhl
cmVmb3JlIGl0IGlzIHR5cGljYWxseSBuZXZlcgotICAvLyB3b3J0aCBzd2l0Y2hpbmcgdG8ga05v
Q29tcHJlc3Npb24uICBFdmVuIGlmIHRoZSBpbnB1dCBkYXRhIGlzCi0gIC8vIGluY29tcHJlc3Np
YmxlLCB0aGUga1NuYXBweUNvbXByZXNzaW9uIGltcGxlbWVudGF0aW9uIHdpbGwKLSAgLy8gZWZm
aWNpZW50bHkgZGV0ZWN0IHRoYXQgYW5kIHdpbGwgc3dpdGNoIHRvIHVuY29tcHJlc3NlZCBtb2Rl
LgotICBDb21wcmVzc2lvblR5cGUgY29tcHJlc3Npb247Ci0KLSAgLy8gSWYgbm9uLU5VTEwsIHVz
ZSB0aGUgc3BlY2lmaWVkIGZpbHRlciBwb2xpY3kgdG8gcmVkdWNlIGRpc2sgcmVhZHMuCi0gIC8v
IE1hbnkgYXBwbGljYXRpb25zIHdpbGwgYmVuZWZpdCBmcm9tIHBhc3NpbmcgdGhlIHJlc3VsdCBv
ZgotICAvLyBOZXdCbG9vbUZpbHRlclBvbGljeSgpIGhlcmUuCi0gIC8vCi0gIC8vIERlZmF1bHQ6
IE5VTEwKLSAgY29uc3QgRmlsdGVyUG9saWN5KiBmaWx0ZXJfcG9saWN5OwotCi0gIC8vIENyZWF0
ZSBhbiBPcHRpb25zIG9iamVjdCB3aXRoIGRlZmF1bHQgdmFsdWVzIGZvciBhbGwgZmllbGRzLgot
ICBPcHRpb25zKCk7Ci19OwotCi0vLyBPcHRpb25zIHRoYXQgY29udHJvbCByZWFkIG9wZXJhdGlv
bnMKLXN0cnVjdCBSZWFkT3B0aW9ucyB7Ci0gIC8vIElmIHRydWUsIGFsbCBkYXRhIHJlYWQgZnJv
bSB1bmRlcmx5aW5nIHN0b3JhZ2Ugd2lsbCBiZQotICAvLyB2ZXJpZmllZCBhZ2FpbnN0IGNvcnJl
c3BvbmRpbmcgY2hlY2tzdW1zLgotICAvLyBEZWZhdWx0OiBmYWxzZQotICBib29sIHZlcmlmeV9j
aGVja3N1bXM7Ci0KLSAgLy8gU2hvdWxkIHRoZSBkYXRhIHJlYWQgZm9yIHRoaXMgaXRlcmF0aW9u
IGJlIGNhY2hlZCBpbiBtZW1vcnk/Ci0gIC8vIENhbGxlcnMgbWF5IHdpc2ggdG8gc2V0IHRoaXMg
ZmllbGQgdG8gZmFsc2UgZm9yIGJ1bGsgc2NhbnMuCi0gIC8vIERlZmF1bHQ6IHRydWUKLSAgYm9v
bCBmaWxsX2NhY2hlOwotCi0gIC8vIElmICJzbmFwc2hvdCIgaXMgbm9uLU5VTEwsIHJlYWQgYXMg
b2YgdGhlIHN1cHBsaWVkIHNuYXBzaG90Ci0gIC8vICh3aGljaCBtdXN0IGJlbG9uZyB0byB0aGUg
REIgdGhhdCBpcyBiZWluZyByZWFkIGFuZCB3aGljaCBtdXN0Ci0gIC8vIG5vdCBoYXZlIGJlZW4g
cmVsZWFzZWQpLiAgSWYgInNuYXBzaG90IiBpcyBOVUxMLCB1c2UgYW4gaW1wbGlpY2l0Ci0gIC8v
IHNuYXBzaG90IG9mIHRoZSBzdGF0ZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgcmVhZCBvcGVy
YXRpb24uCi0gIC8vIERlZmF1bHQ6IE5VTEwKLSAgY29uc3QgU25hcHNob3QqIHNuYXBzaG90Owot
Ci0gIFJlYWRPcHRpb25zKCkKLSAgICAgIDogdmVyaWZ5X2NoZWNrc3VtcyhmYWxzZSksCi0gICAg
ICAgIGZpbGxfY2FjaGUodHJ1ZSksCi0gICAgICAgIHNuYXBzaG90KE5VTEwpIHsKLSAgfQotfTsK
LQotLy8gT3B0aW9ucyB0aGF0IGNvbnRyb2wgd3JpdGUgb3BlcmF0aW9ucwotc3RydWN0IFdyaXRl
T3B0aW9ucyB7Ci0gIC8vIElmIHRydWUsIHRoZSB3cml0ZSB3aWxsIGJlIGZsdXNoZWQgZnJvbSB0
aGUgb3BlcmF0aW5nIHN5c3RlbQotICAvLyBidWZmZXIgY2FjaGUgKGJ5IGNhbGxpbmcgV3JpdGFi
bGVGaWxlOjpTeW5jKCkpIGJlZm9yZSB0aGUgd3JpdGUKLSAgLy8gaXMgY29uc2lkZXJlZCBjb21w
bGV0ZS4gIElmIHRoaXMgZmxhZyBpcyB0cnVlLCB3cml0ZXMgd2lsbCBiZQotICAvLyBzbG93ZXIu
Ci0gIC8vCi0gIC8vIElmIHRoaXMgZmxhZyBpcyBmYWxzZSwgYW5kIHRoZSBtYWNoaW5lIGNyYXNo
ZXMsIHNvbWUgcmVjZW50Ci0gIC8vIHdyaXRlcyBtYXkgYmUgbG9zdC4gIE5vdGUgdGhhdCBpZiBp
dCBpcyBqdXN0IHRoZSBwcm9jZXNzIHRoYXQKLSAgLy8gY3Jhc2hlcyAoaS5lLiwgdGhlIG1hY2hp
bmUgZG9lcyBub3QgcmVib290KSwgbm8gd3JpdGVzIHdpbGwgYmUKLSAgLy8gbG9zdCBldmVuIGlm
IHN5bmM9PWZhbHNlLgotICAvLwotICAvLyBJbiBvdGhlciB3b3JkcywgYSBEQiB3cml0ZSB3aXRo
IHN5bmM9PWZhbHNlIGhhcyBzaW1pbGFyCi0gIC8vIGNyYXNoIHNlbWFudGljcyBhcyB0aGUgIndy
aXRlKCkiIHN5c3RlbSBjYWxsLiAgQSBEQiB3cml0ZQotICAvLyB3aXRoIHN5bmM9PXRydWUgaGFz
IHNpbWlsYXIgY3Jhc2ggc2VtYW50aWNzIHRvIGEgIndyaXRlKCkiCi0gIC8vIHN5c3RlbSBjYWxs
IGZvbGxvd2VkIGJ5ICJmc3luYygpIi4KLSAgLy8KLSAgLy8gRGVmYXVsdDogZmFsc2UKLSAgYm9v
bCBzeW5jOwotCi0gIFdyaXRlT3B0aW9ucygpCi0gICAgICA6IHN5bmMoZmFsc2UpIHsKLSAgfQot
fTsKLQotfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKLQotI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVM
REJfSU5DTFVERV9PUFRJT05TX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZl
bGRiL2luY2x1ZGUvbGV2ZWxkYi9zbGljZS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9p
bmNsdWRlL2xldmVsZGIvc2xpY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRl
YThmYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2
ZWxkYi9zbGljZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8vIENvcHlyaWdo
dCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRI
T1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KLS8vCi0vLyBTbGljZSBpcyBhIHNp
bXBsZSBzdHJ1Y3R1cmUgY29udGFpbmluZyBhIHBvaW50ZXIgaW50byBzb21lIGV4dGVybmFsCi0v
LyBzdG9yYWdlIGFuZCBhIHNpemUuICBUaGUgdXNlciBvZiBhIFNsaWNlIG11c3QgZW5zdXJlIHRo
YXQgdGhlIHNsaWNlCi0vLyBpcyBub3QgdXNlZCBhZnRlciB0aGUgY29ycmVzcG9uZGluZyBleHRl
cm5hbCBzdG9yYWdlIGhhcyBiZWVuCi0vLyBkZWFsbG9jYXRlZC4KLS8vCi0vLyBNdWx0aXBsZSB0
aHJlYWRzIGNhbiBpbnZva2UgY29uc3QgbWV0aG9kcyBvbiBhIFNsaWNlIHdpdGhvdXQKLS8vIGV4
dGVybmFsIHN5bmNocm9uaXphdGlvbiwgYnV0IGlmIGFueSBvZiB0aGUgdGhyZWFkcyBtYXkgY2Fs
bCBhCi0vLyBub24tY29uc3QgbWV0aG9kLCBhbGwgdGhyZWFkcyBhY2Nlc3NpbmcgdGhlIHNhbWUg
U2xpY2UgbXVzdCB1c2UKLS8vIGV4dGVybmFsIHN5bmNocm9uaXphdGlvbi4KLQotI2lmbmRlZiBT
VE9SQUdFX0xFVkVMREJfSU5DTFVERV9TTElDRV9IXwotI2RlZmluZSBTVE9SQUdFX0xFVkVMREJf
SU5DTFVERV9TTElDRV9IXwotCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8c3RkZGVm
Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi1uYW1lc3BhY2Ug
bGV2ZWxkYiB7Ci0KLWNsYXNzIFNsaWNlIHsKLSBwdWJsaWM6Ci0gIC8vIENyZWF0ZSBhbiBlbXB0
eSBzbGljZS4KLSAgU2xpY2UoKSA6IGRhdGFfKCIiKSwgc2l6ZV8oMCkgeyB9Ci0KLSAgLy8gQ3Jl
YXRlIGEgc2xpY2UgdGhhdCByZWZlcnMgdG8gZFswLG4tMV0uCi0gIFNsaWNlKGNvbnN0IGNoYXIq
IGQsIHNpemVfdCBuKSA6IGRhdGFfKGQpLCBzaXplXyhuKSB7IH0KLQotICAvLyBDcmVhdGUgYSBz
bGljZSB0aGF0IHJlZmVycyB0byB0aGUgY29udGVudHMgb2YgInMiCi0gIFNsaWNlKGNvbnN0IHN0
ZDo6c3RyaW5nJiBzKSA6IGRhdGFfKHMuZGF0YSgpKSwgc2l6ZV8ocy5zaXplKCkpIHsgfQotCi0g
IC8vIENyZWF0ZSBhIHNsaWNlIHRoYXQgcmVmZXJzIHRvIHNbMCxzdHJsZW4ocyktMV0KLSAgU2xp
Y2UoY29uc3QgY2hhciogcykgOiBkYXRhXyhzKSwgc2l6ZV8oc3RybGVuKHMpKSB7IH0KLQotICAv
LyBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlZmVyZW5jZWQgZGF0
YQotICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gZGF0YV87IH0KLQotICAvLyBS
ZXR1cm4gdGhlIGxlbmd0aCAoaW4gYnl0ZXMpIG9mIHRoZSByZWZlcmVuY2VkIGRhdGEKLSAgc2l6
ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBzaXplXzsgfQotCi0gIC8vIFJldHVybiB0cnVlIGlm
ZiB0aGUgbGVuZ3RoIG9mIHRoZSByZWZlcmVuY2VkIGRhdGEgaXMgemVybwotICBib29sIGVtcHR5
KCkgY29uc3QgeyByZXR1cm4gc2l6ZV8gPT0gMDsgfQotCi0gIC8vIFJldHVybiB0aGUgaXRoIGJ5
dGUgaW4gdGhlIHJlZmVyZW5jZWQgZGF0YS4KLSAgLy8gUkVRVUlSRVM6IG4gPCBzaXplKCkKLSAg
Y2hhciBvcGVyYXRvcltdKHNpemVfdCBuKSBjb25zdCB7Ci0gICAgYXNzZXJ0KG4gPCBzaXplKCkp
OwotICAgIHJldHVybiBkYXRhX1tuXTsKLSAgfQotCi0gIC8vIENoYW5nZSB0aGlzIHNsaWNlIHRv
IHJlZmVyIHRvIGFuIGVtcHR5IGFycmF5Ci0gIHZvaWQgY2xlYXIoKSB7IGRhdGFfID0gIiI7IHNp
emVfID0gMDsgfQotCi0gIC8vIERyb3AgdGhlIGZpcnN0ICJuIiBieXRlcyBmcm9tIHRoaXMgc2xp
Y2UuCi0gIHZvaWQgcmVtb3ZlX3ByZWZpeChzaXplX3QgbikgewotICAgIGFzc2VydChuIDw9IHNp
emUoKSk7Ci0gICAgZGF0YV8gKz0gbjsKLSAgICBzaXplXyAtPSBuOwotICB9Ci0KLSAgLy8gUmV0
dXJuIGEgc3RyaW5nIHRoYXQgY29udGFpbnMgdGhlIGNvcHkgb2YgdGhlIHJlZmVyZW5jZWQgZGF0
YS4KLSAgc3RkOjpzdHJpbmcgVG9TdHJpbmcoKSBjb25zdCB7IHJldHVybiBzdGQ6OnN0cmluZyhk
YXRhXywgc2l6ZV8pOyB9Ci0KLSAgLy8gVGhyZWUtd2F5IGNvbXBhcmlzb24uICBSZXR1cm5zIHZh
bHVlOgotICAvLyAgIDwgIDAgaWZmICIqdGhpcyIgPCAgImIiLAotICAvLyAgID09IDAgaWZmICIq
dGhpcyIgPT0gImIiLAotICAvLyAgID4gIDAgaWZmICIqdGhpcyIgPiAgImIiCi0gIGludCBjb21w
YXJlKGNvbnN0IFNsaWNlJiBiKSBjb25zdDsKLQotICAvLyBSZXR1cm4gdHJ1ZSBpZmYgIngiIGlz
IGEgcHJlZml4IG9mICIqdGhpcyIKLSAgYm9vbCBzdGFydHNfd2l0aChjb25zdCBTbGljZSYgeCkg
Y29uc3QgewotICAgIHJldHVybiAoKHNpemVfID49IHguc2l6ZV8pICYmCi0gICAgICAgICAgICAo
bWVtY21wKGRhdGFfLCB4LmRhdGFfLCB4LnNpemVfKSA9PSAwKSk7Ci0gIH0KLQotIHByaXZhdGU6
Ci0gIGNvbnN0IGNoYXIqIGRhdGFfOwotICBzaXplX3Qgc2l6ZV87Ci0KLSAgLy8gSW50ZW50aW9u
YWxseSBjb3B5YWJsZQotfTsKLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTbGljZSYg
eCwgY29uc3QgU2xpY2UmIHkpIHsKLSAgcmV0dXJuICgoeC5zaXplKCkgPT0geS5zaXplKCkpICYm
Ci0gICAgICAgICAgKG1lbWNtcCh4LmRhdGEoKSwgeS5kYXRhKCksIHguc2l6ZSgpKSA9PSAwKSk7
Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgU2xpY2UmIHgsIGNvbnN0IFNsaWNl
JiB5KSB7Ci0gIHJldHVybiAhKHggPT0geSk7Ci19Ci0KLWlubGluZSBpbnQgU2xpY2U6OmNvbXBh
cmUoY29uc3QgU2xpY2UmIGIpIGNvbnN0IHsKLSAgY29uc3QgaW50IG1pbl9sZW4gPSAoc2l6ZV8g
PCBiLnNpemVfKSA/IHNpemVfIDogYi5zaXplXzsKLSAgaW50IHIgPSBtZW1jbXAoZGF0YV8sIGIu
ZGF0YV8sIG1pbl9sZW4pOwotICBpZiAociA9PSAwKSB7Ci0gICAgaWYgKHNpemVfIDwgYi5zaXpl
XykgciA9IC0xOwotICAgIGVsc2UgaWYgKHNpemVfID4gYi5zaXplXykgciA9ICsxOwotICB9Ci0g
IHJldHVybiByOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgotCi0KLSNlbmRpZiAgLy8g
U1RPUkFHRV9MRVZFTERCX0lOQ0xVREVfU0xJQ0VfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL3N0YXR1cy5oIGIvU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvc3RhdHVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDExZGJkNGIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxk
Yi9pbmNsdWRlL2xldmVsZGIvc3RhdHVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBA
QAotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgotLy8KLS8v
IEEgU3RhdHVzIGVuY2Fwc3VsYXRlcyB0aGUgcmVzdWx0IG9mIGFuIG9wZXJhdGlvbi4gIEl0IG1h
eSBpbmRpY2F0ZSBzdWNjZXNzLAotLy8gb3IgaXQgbWF5IGluZGljYXRlIGFuIGVycm9yIHdpdGgg
YW4gYXNzb2NpYXRlZCBlcnJvciBtZXNzYWdlLgotLy8KLS8vIE11bHRpcGxlIHRocmVhZHMgY2Fu
IGludm9rZSBjb25zdCBtZXRob2RzIG9uIGEgU3RhdHVzIHdpdGhvdXQKLS8vIGV4dGVybmFsIHN5
bmNocm9uaXphdGlvbiwgYnV0IGlmIGFueSBvZiB0aGUgdGhyZWFkcyBtYXkgY2FsbCBhCi0vLyBu
b24tY29uc3QgbWV0aG9kLCBhbGwgdGhyZWFkcyBhY2Nlc3NpbmcgdGhlIHNhbWUgU3RhdHVzIG11
c3QgdXNlCi0vLyBleHRlcm5hbCBzeW5jaHJvbml6YXRpb24uCi0KLSNpZm5kZWYgU1RPUkFHRV9M
RVZFTERCX0lOQ0xVREVfU1RBVFVTX0hfCi0jZGVmaW5lIFNUT1JBR0VfTEVWRUxEQl9JTkNMVURF
X1NUQVRVU19IXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgImxldmVsZGIvc2xpY2Uu
aCIKLQotbmFtZXNwYWNlIGxldmVsZGIgewotCi1jbGFzcyBTdGF0dXMgewotIHB1YmxpYzoKLSAg
Ly8gQ3JlYXRlIGEgc3VjY2VzcyBzdGF0dXMuCi0gIFN0YXR1cygpIDogc3RhdGVfKE5VTEwpIHsg
fQotICB+U3RhdHVzKCkgeyBkZWxldGVbXSBzdGF0ZV87IH0KLQotICAvLyBDb3B5IHRoZSBzcGVj
aWZpZWQgc3RhdHVzLgotICBTdGF0dXMoY29uc3QgU3RhdHVzJiBzKTsKLSAgdm9pZCBvcGVyYXRv
cj0oY29uc3QgU3RhdHVzJiBzKTsKLQotICAvLyBSZXR1cm4gYSBzdWNjZXNzIHN0YXR1cy4KLSAg
c3RhdGljIFN0YXR1cyBPSygpIHsgcmV0dXJuIFN0YXR1cygpOyB9Ci0KLSAgLy8gUmV0dXJuIGVy
cm9yIHN0YXR1cyBvZiBhbiBhcHByb3ByaWF0ZSB0eXBlLgotICBzdGF0aWMgU3RhdHVzIE5vdEZv
dW5kKGNvbnN0IFNsaWNlJiBtc2csIGNvbnN0IFNsaWNlJiBtc2cyID0gU2xpY2UoKSkgewotICAg
IHJldHVybiBTdGF0dXMoa05vdEZvdW5kLCBtc2csIG1zZzIpOwotICB9Ci0gIHN0YXRpYyBTdGF0
dXMgQ29ycnVwdGlvbihjb25zdCBTbGljZSYgbXNnLCBjb25zdCBTbGljZSYgbXNnMiA9IFNsaWNl
KCkpIHsKLSAgICByZXR1cm4gU3RhdHVzKGtDb3JydXB0aW9uLCBtc2csIG1zZzIpOwotICB9Ci0g
IHN0YXRpYyBTdGF0dXMgTm90U3VwcG9ydGVkKGNvbnN0IFNsaWNlJiBtc2csIGNvbnN0IFNsaWNl
JiBtc2cyID0gU2xpY2UoKSkgewotICAgIHJldHVybiBTdGF0dXMoa05vdFN1cHBvcnRlZCwgbXNn
LCBtc2cyKTsKLSAgfQotICBzdGF0aWMgU3RhdHVzIEludmFsaWRBcmd1bWVudChjb25zdCBTbGlj
ZSYgbXNnLCBjb25zdCBTbGljZSYgbXNnMiA9IFNsaWNlKCkpIHsKLSAgICByZXR1cm4gU3RhdHVz
KGtJbnZhbGlkQXJndW1lbnQsIG1zZywgbXNnMik7Ci0gIH0KLSAgc3RhdGljIFN0YXR1cyBJT0Vy
cm9yKGNvbnN0IFNsaWNlJiBtc2csIGNvbnN0IFNsaWNlJiBtc2cyID0gU2xpY2UoKSkgewotICAg
IHJldHVybiBTdGF0dXMoa0lPRXJyb3IsIG1zZywgbXNnMik7Ci0gIH0KLQotICAvLyBSZXR1cm5z
IHRydWUgaWZmIHRoZSBzdGF0dXMgaW5kaWNhdGVzIHN1Y2Nlc3MuCi0gIGJvb2wgb2soKSBjb25z
dCB7IHJldHVybiAoc3RhdGVfID09IE5VTEwpOyB9Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmZiB0
aGUgc3RhdHVzIGluZGljYXRlcyBhIE5vdEZvdW5kIGVycm9yLgotICBib29sIElzTm90Rm91bmQo
KSBjb25zdCB7IHJldHVybiBjb2RlKCkgPT0ga05vdEZvdW5kOyB9Ci0KLSAgLy8gUmV0dXJucyB0
cnVlIGlmZiB0aGUgc3RhdHVzIGluZGljYXRlcyBhIENvcnJ1cHRpb24gZXJyb3IuCi0gIGJvb2wg
SXNDb3JydXB0aW9uKCkgY29uc3QgeyByZXR1cm4gY29kZSgpID09IGtDb3JydXB0aW9uOyB9Ci0K
LSAgLy8gUmV0dXJucyB0cnVlIGlmZiB0aGUgc3RhdHVzIGluZGljYXRlcyBhbiBJT0Vycm9yLgot
ICBib29sIElzSU9FcnJvcigpIGNvbnN0IHsgcmV0dXJuIGNvZGUoKSA9PSBrSU9FcnJvcjsgfQot
Ci0gIC8vIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHN0YXR1cyBzdWl0
YWJsZSBmb3IgcHJpbnRpbmcuCi0gIC8vIFJldHVybnMgdGhlIHN0cmluZyAiT0siIGZvciBzdWNj
ZXNzLgotICBzdGQ6OnN0cmluZyBUb1N0cmluZygpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgLy8g
T0sgc3RhdHVzIGhhcyBhIE5VTEwgc3RhdGVfLiAgT3RoZXJ3aXNlLCBzdGF0ZV8gaXMgYSBuZXdb
XSBhcnJheQotICAvLyBvZiB0aGUgZm9sbG93aW5nIGZvcm06Ci0gIC8vICAgIHN0YXRlX1swLi4z
XSA9PSBsZW5ndGggb2YgbWVzc2FnZQotICAvLyAgICBzdGF0ZV9bNF0gICAgPT0gY29kZQotICAv
LyAgICBzdGF0ZV9bNS4uXSAgPT0gbWVzc2FnZQotICBjb25zdCBjaGFyKiBzdGF0ZV87Ci0KLSAg
ZW51bSBDb2RlIHsKLSAgICBrT2sgPSAwLAotICAgIGtOb3RGb3VuZCA9IDEsCi0gICAga0NvcnJ1
cHRpb24gPSAyLAotICAgIGtOb3RTdXBwb3J0ZWQgPSAzLAotICAgIGtJbnZhbGlkQXJndW1lbnQg
PSA0LAotICAgIGtJT0Vycm9yID0gNQotICB9OwotCi0gIENvZGUgY29kZSgpIGNvbnN0IHsKLSAg
ICByZXR1cm4gKHN0YXRlXyA9PSBOVUxMKSA/IGtPayA6IHN0YXRpY19jYXN0PENvZGU+KHN0YXRl
X1s0XSk7Ci0gIH0KLQotICBTdGF0dXMoQ29kZSBjb2RlLCBjb25zdCBTbGljZSYgbXNnLCBjb25z
dCBTbGljZSYgbXNnMik7Ci0gIHN0YXRpYyBjb25zdCBjaGFyKiBDb3B5U3RhdGUoY29uc3QgY2hh
ciogcyk7Ci19OwotCi1pbmxpbmUgU3RhdHVzOjpTdGF0dXMoY29uc3QgU3RhdHVzJiBzKSB7Ci0g
IHN0YXRlXyA9IChzLnN0YXRlXyA9PSBOVUxMKSA/IE5VTEwgOiBDb3B5U3RhdGUocy5zdGF0ZV8p
OwotfQotaW5saW5lIHZvaWQgU3RhdHVzOjpvcGVyYXRvcj0oY29uc3QgU3RhdHVzJiBzKSB7Ci0g
IC8vIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIGNhdGNoZXMgYm90aCBhbGlhc2luZyAod2hlbiB0
aGlzID09ICZzKSwKLSAgLy8gYW5kIHRoZSBjb21tb24gY2FzZSB3aGVyZSBib3RoIHMgYW5kICp0
aGlzIGFyZSBvay4KLSAgaWYgKHN0YXRlXyAhPSBzLnN0YXRlXykgewotICAgIGRlbGV0ZVtdIHN0
YXRlXzsKLSAgICBzdGF0ZV8gPSAocy5zdGF0ZV8gPT0gTlVMTCkgPyBOVUxMIDogQ29weVN0YXRl
KHMuc3RhdGVfKTsKLSAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgotCi0jZW5kaWYg
IC8vIFNUT1JBR0VfTEVWRUxEQl9JTkNMVURFX1NUQVRVU19IXwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvdGFibGUuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL3RhYmxlLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGE5NzQ2YzMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi9pbmNsdWRlL2xldmVsZGIvdGFibGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAg
QEAKLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KLQotI2lm
bmRlZiBTVE9SQUdFX0xFVkVMREJfSU5DTFVERV9UQUJMRV9IXwotI2RlZmluZSBTVE9SQUdFX0xF
VkVMREJfSU5DTFVERV9UQUJMRV9IXwotCi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSAi
bGV2ZWxkYi9pdGVyYXRvci5oIgotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7Ci0KLWNsYXNzIEJsb2Nr
OwotY2xhc3MgQmxvY2tIYW5kbGU7Ci1jbGFzcyBGb290ZXI7Ci1zdHJ1Y3QgT3B0aW9uczsKLWNs
YXNzIFJhbmRvbUFjY2Vzc0ZpbGU7Ci1zdHJ1Y3QgUmVhZE9wdGlvbnM7Ci1jbGFzcyBUYWJsZUNh
Y2hlOwotCi0vLyBBIFRhYmxlIGlzIGEgc29ydGVkIG1hcCBmcm9tIHN0cmluZ3MgdG8gc3RyaW5n
cy4gIFRhYmxlcyBhcmUKLS8vIGltbXV0YWJsZSBhbmQgcGVyc2lzdGVudC4gIEEgVGFibGUgbWF5
IGJlIHNhZmVseSBhY2Nlc3NlZCBmcm9tCi0vLyBtdWx0aXBsZSB0aHJlYWRzIHdpdGhvdXQgZXh0
ZXJuYWwgc3luY2hyb25pemF0aW9uLgotY2xhc3MgVGFibGUgewotIHB1YmxpYzoKLSAgLy8gQXR0
ZW1wdCB0byBvcGVuIHRoZSB0YWJsZSB0aGF0IGlzIHN0b3JlZCBpbiBieXRlcyBbMC4uZmlsZV9z
aXplKQotICAvLyBvZiAiZmlsZSIsIGFuZCByZWFkIHRoZSBtZXRhZGF0YSBlbnRyaWVzIG5lY2Vz
c2FyeSB0byBhbGxvdwotICAvLyByZXRyaWV2aW5nIGRhdGEgZnJvbSB0aGUgdGFibGUuCi0gIC8v
Ci0gIC8vIElmIHN1Y2Nlc3NmdWwsIHJldHVybnMgb2sgYW5kIHNldHMgIip0YWJsZSIgdG8gdGhl
IG5ld2x5IG9wZW5lZAotICAvLyB0YWJsZS4gIFRoZSBjbGllbnQgc2hvdWxkIGRlbGV0ZSAiKnRh
YmxlIiB3aGVuIG5vIGxvbmdlciBuZWVkZWQuCi0gIC8vIElmIHRoZXJlIHdhcyBhbiBlcnJvciB3
aGlsZSBpbml0aWFsaXppbmcgdGhlIHRhYmxlLCBzZXRzICIqdGFibGUiCi0gIC8vIHRvIE5VTEwg
YW5kIHJldHVybnMgYSBub24tb2sgc3RhdHVzLiAgRG9lcyBub3QgdGFrZSBvd25lcnNoaXAgb2YK
LSAgLy8gIipzb3VyY2UiLCBidXQgdGhlIGNsaWVudCBtdXN0IGVuc3VyZSB0aGF0ICJzb3VyY2Ui
IHJlbWFpbnMgbGl2ZQotICAvLyBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSByZXR1cm5lZCB0YWJs
ZSdzIGxpZmV0aW1lLgotICAvLwotICAvLyAqZmlsZSBtdXN0IHJlbWFpbiBsaXZlIHdoaWxlIHRo
aXMgVGFibGUgaXMgaW4gdXNlLgotICBzdGF0aWMgU3RhdHVzIE9wZW4oY29uc3QgT3B0aW9ucyYg
b3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgIFJhbmRvbUFjY2Vzc0ZpbGUqIGZpbGUsCi0g
ICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBmaWxlX3NpemUsCi0gICAgICAgICAgICAgICAg
ICAgICBUYWJsZSoqIHRhYmxlKTsKLQotICB+VGFibGUoKTsKLQotICAvLyBSZXR1cm5zIGEgbmV3
IGl0ZXJhdG9yIG92ZXIgdGhlIHRhYmxlIGNvbnRlbnRzLgotICAvLyBUaGUgcmVzdWx0IG9mIE5l
d0l0ZXJhdG9yKCkgaXMgaW5pdGlhbGx5IGludmFsaWQgKGNhbGxlciBtdXN0Ci0gIC8vIGNhbGwg
b25lIG9mIHRoZSBTZWVrIG1ldGhvZHMgb24gdGhlIGl0ZXJhdG9yIGJlZm9yZSB1c2luZyBpdCku
Ci0gIEl0ZXJhdG9yKiBOZXdJdGVyYXRvcihjb25zdCBSZWFkT3B0aW9ucyYpIGNvbnN0OwotCi0g
IC8vIEdpdmVuIGEga2V5LCByZXR1cm4gYW4gYXBwcm94aW1hdGUgYnl0ZSBvZmZzZXQgaW4gdGhl
IGZpbGUgd2hlcmUKLSAgLy8gdGhlIGRhdGEgZm9yIHRoYXQga2V5IGJlZ2lucyAob3Igd291bGQg
YmVnaW4gaWYgdGhlIGtleSB3ZXJlCi0gIC8vIHByZXNlbnQgaW4gdGhlIGZpbGUpLiAgVGhlIHJl
dHVybmVkIHZhbHVlIGlzIGluIHRlcm1zIG9mIGZpbGUKLSAgLy8gYnl0ZXMsIGFuZCBzbyBpbmNs
dWRlcyBlZmZlY3RzIGxpa2UgY29tcHJlc3Npb24gb2YgdGhlIHVuZGVybHlpbmcgZGF0YS4KLSAg
Ly8gRS5nLiwgdGhlIGFwcHJveGltYXRlIG9mZnNldCBvZiB0aGUgbGFzdCBrZXkgaW4gdGhlIHRh
YmxlIHdpbGwKLSAgLy8gYmUgY2xvc2UgdG8gdGhlIGZpbGUgbGVuZ3RoLgotICB1aW50NjRfdCBB
cHByb3hpbWF0ZU9mZnNldE9mKGNvbnN0IFNsaWNlJiBrZXkpIGNvbnN0OwotCi0gcHJpdmF0ZToK
LSAgc3RydWN0IFJlcDsKLSAgUmVwKiByZXBfOwotCi0gIGV4cGxpY2l0IFRhYmxlKFJlcCogcmVw
KSB7IHJlcF8gPSByZXA7IH0KLSAgc3RhdGljIEl0ZXJhdG9yKiBCbG9ja1JlYWRlcih2b2lkKiwg
Y29uc3QgUmVhZE9wdGlvbnMmLCBjb25zdCBTbGljZSYpOwotCi0gIC8vIENhbGxzICgqaGFuZGxl
X3Jlc3VsdCkoYXJnLCAuLi4pIHdpdGggdGhlIGVudHJ5IGZvdW5kIGFmdGVyIGEgY2FsbAotICAv
LyB0byBTZWVrKGtleSkuICBNYXkgbm90IG1ha2Ugc3VjaCBhIGNhbGwgaWYgZmlsdGVyIHBvbGlj
eSBzYXlzCi0gIC8vIHRoYXQga2V5IGlzIG5vdCBwcmVzZW50LgotICBmcmllbmQgY2xhc3MgVGFi
bGVDYWNoZTsKLSAgU3RhdHVzIEludGVybmFsR2V0KAotICAgICAgY29uc3QgUmVhZE9wdGlvbnMm
LCBjb25zdCBTbGljZSYga2V5LAotICAgICAgdm9pZCogYXJnLAotICAgICAgdm9pZCAoKmhhbmRs
ZV9yZXN1bHQpKHZvaWQqIGFyZywgY29uc3QgU2xpY2UmIGssIGNvbnN0IFNsaWNlJiB2KSk7Ci0K
LQotICB2b2lkIFJlYWRNZXRhKGNvbnN0IEZvb3RlciYgZm9vdGVyKTsKLSAgdm9pZCBSZWFkRmls
dGVyKGNvbnN0IFNsaWNlJiBmaWx0ZXJfaGFuZGxlX3ZhbHVlKTsKLQotICAvLyBObyBjb3B5aW5n
IGFsbG93ZWQKLSAgVGFibGUoY29uc3QgVGFibGUmKTsKLSAgdm9pZCBvcGVyYXRvcj0oY29uc3Qg
VGFibGUmKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCi0KLSNlbmRpZiAgLy8gU1RP
UkFHRV9MRVZFTERCX0lOQ0xVREVfVEFCTEVfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL3RhYmxlX2J1aWxkZXIuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL3RhYmxlX2J1aWxkZXIuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNWZkMWRjNy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi90YWJsZV9idWlsZGVyLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw5MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250
cmlidXRvcnMuCi0vLwotLy8gVGFibGVCdWlsZGVyIHByb3ZpZGVzIHRoZSBpbnRlcmZhY2UgdXNl
ZCB0byBidWlsZCBhIFRhYmxlCi0vLyAoYW4gaW1tdXRhYmxlIGFuZCBzb3J0ZWQgbWFwIGZyb20g
a2V5cyB0byB2YWx1ZXMpLgotLy8KLS8vIE11bHRpcGxlIHRocmVhZHMgY2FuIGludm9rZSBjb25z
dCBtZXRob2RzIG9uIGEgVGFibGVCdWlsZGVyIHdpdGhvdXQKLS8vIGV4dGVybmFsIHN5bmNocm9u
aXphdGlvbiwgYnV0IGlmIGFueSBvZiB0aGUgdGhyZWFkcyBtYXkgY2FsbCBhCi0vLyBub24tY29u
c3QgbWV0aG9kLCBhbGwgdGhyZWFkcyBhY2Nlc3NpbmcgdGhlIHNhbWUgVGFibGVCdWlsZGVyIG11
c3QgdXNlCi0vLyBleHRlcm5hbCBzeW5jaHJvbml6YXRpb24uCi0KLSNpZm5kZWYgU1RPUkFHRV9M
RVZFTERCX0lOQ0xVREVfVEFCTEVfQlVJTERFUl9IXwotI2RlZmluZSBTVE9SQUdFX0xFVkVMREJf
SU5DTFVERV9UQUJMRV9CVUlMREVSX0hfCi0KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRl
ICJsZXZlbGRiL29wdGlvbnMuaCIKLSNpbmNsdWRlICJsZXZlbGRiL3N0YXR1cy5oIgotCi1uYW1l
c3BhY2UgbGV2ZWxkYiB7Ci0KLWNsYXNzIEJsb2NrQnVpbGRlcjsKLWNsYXNzIEJsb2NrSGFuZGxl
OwotY2xhc3MgV3JpdGFibGVGaWxlOwotCi1jbGFzcyBUYWJsZUJ1aWxkZXIgewotIHB1YmxpYzoK
LSAgLy8gQ3JlYXRlIGEgYnVpbGRlciB0aGF0IHdpbGwgc3RvcmUgdGhlIGNvbnRlbnRzIG9mIHRo
ZSB0YWJsZSBpdCBpcwotICAvLyBidWlsZGluZyBpbiAqZmlsZS4gIERvZXMgbm90IGNsb3NlIHRo
ZSBmaWxlLiAgSXQgaXMgdXAgdG8gdGhlCi0gIC8vIGNhbGxlciB0byBjbG9zZSB0aGUgZmlsZSBh
ZnRlciBjYWxsaW5nIEZpbmlzaCgpLgotICBUYWJsZUJ1aWxkZXIoY29uc3QgT3B0aW9ucyYgb3B0
aW9ucywgV3JpdGFibGVGaWxlKiBmaWxlKTsKLQotICAvLyBSRVFVSVJFUzogRWl0aGVyIEZpbmlz
aCgpIG9yIEFiYW5kb24oKSBoYXMgYmVlbiBjYWxsZWQuCi0gIH5UYWJsZUJ1aWxkZXIoKTsKLQot
ICAvLyBDaGFuZ2UgdGhlIG9wdGlvbnMgdXNlZCBieSB0aGlzIGJ1aWxkZXIuICBOb3RlOiBvbmx5
IHNvbWUgb2YgdGhlCi0gIC8vIG9wdGlvbiBmaWVsZHMgY2FuIGJlIGNoYW5nZWQgYWZ0ZXIgY29u
c3RydWN0aW9uLiAgSWYgYSBmaWVsZCBpcwotICAvLyBub3QgYWxsb3dlZCB0byBjaGFuZ2UgZHlu
YW1pY2FsbHkgYW5kIGl0cyB2YWx1ZSBpbiB0aGUgc3RydWN0dXJlCi0gIC8vIHBhc3NlZCB0byB0
aGUgY29uc3RydWN0b3IgaXMgZGlmZmVyZW50IGZyb20gaXRzIHZhbHVlIGluIHRoZQotICAvLyBz
dHJ1Y3R1cmUgcGFzc2VkIHRvIHRoaXMgbWV0aG9kLCB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiBh
biBlcnJvcgotICAvLyB3aXRob3V0IGNoYW5naW5nIGFueSBmaWVsZHMuCi0gIFN0YXR1cyBDaGFu
Z2VPcHRpb25zKGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpOwotCi0gIC8vIEFkZCBrZXksdmFsdWUg
dG8gdGhlIHRhYmxlIGJlaW5nIGNvbnN0cnVjdGVkLgotICAvLyBSRVFVSVJFUzoga2V5IGlzIGFm
dGVyIGFueSBwcmV2aW91c2x5IGFkZGVkIGtleSBhY2NvcmRpbmcgdG8gY29tcGFyYXRvci4KLSAg
Ly8gUkVRVUlSRVM6IEZpbmlzaCgpLCBBYmFuZG9uKCkgaGF2ZSBub3QgYmVlbiBjYWxsZWQKLSAg
dm9pZCBBZGQoY29uc3QgU2xpY2UmIGtleSwgY29uc3QgU2xpY2UmIHZhbHVlKTsKLQotICAvLyBB
ZHZhbmNlZCBvcGVyYXRpb246IGZsdXNoIGFueSBidWZmZXJlZCBrZXkvdmFsdWUgcGFpcnMgdG8g
ZmlsZS4KLSAgLy8gQ2FuIGJlIHVzZWQgdG8gZW5zdXJlIHRoYXQgdHdvIGFkamFjZW50IGVudHJp
ZXMgbmV2ZXIgbGl2ZSBpbgotICAvLyB0aGUgc2FtZSBkYXRhIGJsb2NrLiAgTW9zdCBjbGllbnRz
IHNob3VsZCBub3QgbmVlZCB0byB1c2UgdGhpcyBtZXRob2QuCi0gIC8vIFJFUVVJUkVTOiBGaW5p
c2goKSwgQWJhbmRvbigpIGhhdmUgbm90IGJlZW4gY2FsbGVkCi0gIHZvaWQgRmx1c2goKTsKLQot
ICAvLyBSZXR1cm4gbm9uLW9rIGlmZiBzb21lIGVycm9yIGhhcyBiZWVuIGRldGVjdGVkLgotICBT
dGF0dXMgc3RhdHVzKCkgY29uc3Q7Ci0KLSAgLy8gRmluaXNoIGJ1aWxkaW5nIHRoZSB0YWJsZS4g
IFN0b3BzIHVzaW5nIHRoZSBmaWxlIHBhc3NlZCB0byB0aGUKLSAgLy8gY29uc3RydWN0b3IgYWZ0
ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zLgotICAvLyBSRVFVSVJFUzogRmluaXNoKCksIEFiYW5k
b24oKSBoYXZlIG5vdCBiZWVuIGNhbGxlZAotICBTdGF0dXMgRmluaXNoKCk7Ci0KLSAgLy8gSW5k
aWNhdGUgdGhhdCB0aGUgY29udGVudHMgb2YgdGhpcyBidWlsZGVyIHNob3VsZCBiZSBhYmFuZG9u
ZWQuICBTdG9wcwotICAvLyB1c2luZyB0aGUgZmlsZSBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9y
IGFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucy4KLSAgLy8gSWYgdGhlIGNhbGxlciBpcyBub3Qg
Z29pbmcgdG8gY2FsbCBGaW5pc2goKSwgaXQgbXVzdCBjYWxsIEFiYW5kb24oKQotICAvLyBiZWZv
cmUgZGVzdHJveWluZyB0aGlzIGJ1aWxkZXIuCi0gIC8vIFJFUVVJUkVTOiBGaW5pc2goKSwgQWJh
bmRvbigpIGhhdmUgbm90IGJlZW4gY2FsbGVkCi0gIHZvaWQgQWJhbmRvbigpOwotCi0gIC8vIE51
bWJlciBvZiBjYWxscyB0byBBZGQoKSBzbyBmYXIuCi0gIHVpbnQ2NF90IE51bUVudHJpZXMoKSBj
b25zdDsKLQotICAvLyBTaXplIG9mIHRoZSBmaWxlIGdlbmVyYXRlZCBzbyBmYXIuICBJZiBpbnZv
a2VkIGFmdGVyIGEgc3VjY2Vzc2Z1bAotICAvLyBGaW5pc2goKSBjYWxsLCByZXR1cm5zIHRoZSBz
aXplIG9mIHRoZSBmaW5hbCBnZW5lcmF0ZWQgZmlsZS4KLSAgdWludDY0X3QgRmlsZVNpemUoKSBj
b25zdDsKLQotIHByaXZhdGU6Ci0gIGJvb2wgb2soKSBjb25zdCB7IHJldHVybiBzdGF0dXMoKS5v
aygpOyB9Ci0gIHZvaWQgV3JpdGVCbG9jayhCbG9ja0J1aWxkZXIqIGJsb2NrLCBCbG9ja0hhbmRs
ZSogaGFuZGxlKTsKLSAgdm9pZCBXcml0ZVJhd0Jsb2NrKGNvbnN0IFNsaWNlJiBkYXRhLCBDb21w
cmVzc2lvblR5cGUsIEJsb2NrSGFuZGxlKiBoYW5kbGUpOwotCi0gIHN0cnVjdCBSZXA7Ci0gIFJl
cCogcmVwXzsKLQotICAvLyBObyBjb3B5aW5nIGFsbG93ZWQKLSAgVGFibGVCdWlsZGVyKGNvbnN0
IFRhYmxlQnVpbGRlciYpOwotICB2b2lkIG9wZXJhdG9yPShjb25zdCBUYWJsZUJ1aWxkZXImKTsK
LX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCi0KLSNlbmRpZiAgLy8gU1RPUkFHRV9MRVZF
TERCX0lOQ0xVREVfVEFCTEVfQlVJTERFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvd3JpdGVfYmF0Y2guaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL3dyaXRlX2JhdGNoLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGVlOWFhYjYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvd3JpdGVfYmF0Y2guaAorKysgL2Rldi9udWxsCkBAIC0x
LDY0ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9y
cy4KLS8vCi0vLyBXcml0ZUJhdGNoIGhvbGRzIGEgY29sbGVjdGlvbiBvZiB1cGRhdGVzIHRvIGFw
cGx5IGF0b21pY2FsbHkgdG8gYSBEQi4KLS8vCi0vLyBUaGUgdXBkYXRlcyBhcmUgYXBwbGllZCBp
biB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmUgYWRkZWQKLS8vIHRvIHRoZSBXcml0ZUJhdGNo
LiAgRm9yIGV4YW1wbGUsIHRoZSB2YWx1ZSBvZiAia2V5IiB3aWxsIGJlICJ2MyIKLS8vIGFmdGVy
IHRoZSBmb2xsb3dpbmcgYmF0Y2ggaXMgd3JpdHRlbjoKLS8vCi0vLyAgICBiYXRjaC5QdXQoImtl
eSIsICJ2MSIpOwotLy8gICAgYmF0Y2guRGVsZXRlKCJrZXkiKTsKLS8vICAgIGJhdGNoLlB1dCgi
a2V5IiwgInYyIik7Ci0vLyAgICBiYXRjaC5QdXQoImtleSIsICJ2MyIpOwotLy8KLS8vIE11bHRp
cGxlIHRocmVhZHMgY2FuIGludm9rZSBjb25zdCBtZXRob2RzIG9uIGEgV3JpdGVCYXRjaCB3aXRo
b3V0Ci0vLyBleHRlcm5hbCBzeW5jaHJvbml6YXRpb24sIGJ1dCBpZiBhbnkgb2YgdGhlIHRocmVh
ZHMgbWF5IGNhbGwgYQotLy8gbm9uLWNvbnN0IG1ldGhvZCwgYWxsIHRocmVhZHMgYWNjZXNzaW5n
IHRoZSBzYW1lIFdyaXRlQmF0Y2ggbXVzdCB1c2UKLS8vIGV4dGVybmFsIHN5bmNocm9uaXphdGlv
bi4KLQotI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfSU5DTFVERV9XUklURV9CQVRDSF9IXwotI2Rl
ZmluZSBTVE9SQUdFX0xFVkVMREJfSU5DTFVERV9XUklURV9CQVRDSF9IXwotCi0jaW5jbHVkZSA8
c3RyaW5nPgotI2luY2x1ZGUgImxldmVsZGIvc3RhdHVzLmgiCi0KLW5hbWVzcGFjZSBsZXZlbGRi
IHsKLQotY2xhc3MgU2xpY2U7Ci0KLWNsYXNzIFdyaXRlQmF0Y2ggewotIHB1YmxpYzoKLSAgV3Jp
dGVCYXRjaCgpOwotICB+V3JpdGVCYXRjaCgpOwotCi0gIC8vIFN0b3JlIHRoZSBtYXBwaW5nICJr
ZXktPnZhbHVlIiBpbiB0aGUgZGF0YWJhc2UuCi0gIHZvaWQgUHV0KGNvbnN0IFNsaWNlJiBrZXks
IGNvbnN0IFNsaWNlJiB2YWx1ZSk7Ci0KLSAgLy8gSWYgdGhlIGRhdGFiYXNlIGNvbnRhaW5zIGEg
bWFwcGluZyBmb3IgImtleSIsIGVyYXNlIGl0LiAgRWxzZSBkbyBub3RoaW5nLgotICB2b2lkIERl
bGV0ZShjb25zdCBTbGljZSYga2V5KTsKLQotICAvLyBDbGVhciBhbGwgdXBkYXRlcyBidWZmZXJl
ZCBpbiB0aGlzIGJhdGNoLgotICB2b2lkIENsZWFyKCk7Ci0KLSAgLy8gU3VwcG9ydCBmb3IgaXRl
cmF0aW5nIG92ZXIgdGhlIGNvbnRlbnRzIG9mIGEgYmF0Y2guCi0gIGNsYXNzIEhhbmRsZXIgewot
ICAgcHVibGljOgotICAgIHZpcnR1YWwgfkhhbmRsZXIoKTsKLSAgICB2aXJ0dWFsIHZvaWQgUHV0
KGNvbnN0IFNsaWNlJiBrZXksIGNvbnN0IFNsaWNlJiB2YWx1ZSkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBEZWxldGUoY29uc3QgU2xpY2UmIGtleSkgPSAwOwotICB9OwotICBTdGF0dXMgSXRlcmF0
ZShIYW5kbGVyKiBoYW5kbGVyKSBjb25zdDsKLQotIHByaXZhdGU6Ci0gIGZyaWVuZCBjbGFzcyBX
cml0ZUJhdGNoSW50ZXJuYWw7Ci0KLSAgc3RkOjpzdHJpbmcgcmVwXzsgIC8vIFNlZSBjb21tZW50
IGluIHdyaXRlX2JhdGNoLmNjIGZvciB0aGUgZm9ybWF0IG9mIHJlcF8KLQotICAvLyBJbnRlbnRp
b25hbGx5IGNvcHlhYmxlCi19OwotCi19ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgotCi0jZW5kaWYg
IC8vIFNUT1JBR0VfTEVWRUxEQl9JTkNMVURFX1dSSVRFX0JBVENIX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3BvcnQvUkVBRE1FIGIvU291cmNlL1RoaXJkUGFydHkv
bGV2ZWxkYi9wb3J0L1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIyNTYz
ZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3BvcnQvUkVBRE1FCisr
KyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgaW50
ZXJmYWNlcyBhbmQgaW1wbGVtZW50YXRpb25zIHRoYXQgaXNvbGF0ZSB0aGUKLXJlc3Qgb2YgdGhl
IHBhY2thZ2UgZnJvbSBwbGF0Zm9ybSBkZXRhaWxzLgotCi1Db2RlIGluIHRoZSByZXN0IG9mIHRo
ZSBwYWNrYWdlIGluY2x1ZGVzICJwb3J0LmgiIGZyb20gdGhpcyBkaXJlY3RvcnkuCi0icG9ydC5o
IiBpbiB0dXJuIGluY2x1ZGVzIGEgcGxhdGZvcm0gc3BlY2lmaWMgInBvcnRfPHBsYXRmb3JtPi5o
IiBmaWxlCi10aGF0IHByb3ZpZGVzIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlv
bi4KLQotU2VlIHBvcnRfcG9zaXguaCBmb3IgYW4gZXhhbXBsZSBvZiB3aGF0IG11c3QgYmUgcHJv
dmlkZWQgaW4gYSBwbGF0Zm9ybQotc3BlY2lmaWMgaGVhZGVyIGZpbGUuCi0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9ydC9hdG9taWNfcG9pbnRlci5oIGIvU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi9wb3J0L2F0b21pY19wb2ludGVyLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDdhNDgwYWQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGV2ZWxkYi9wb3J0L2F0b21pY19wb2ludGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjQgKzAs
MCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgotCi0v
LyBBdG9taWNQb2ludGVyIHByb3ZpZGVzIHN0b3JhZ2UgZm9yIGEgbG9jay1mcmVlIHBvaW50ZXIu
Ci0vLyBQbGF0Zm9ybS1kZXBlbmRlbnQgaW1wbGVtZW50YXRpb24gb2YgQXRvbWljUG9pbnRlcjoK
LS8vIC0gSWYgdGhlIHBsYXRmb3JtIHByb3ZpZGVzIGEgY2hlYXAgYmFycmllciwgd2UgdXNlIGl0
IHdpdGggcmF3IHBvaW50ZXJzCi0vLyAtIElmIGNzdGRhdG9taWMgaXMgcHJlc2VudCAob24gbmV3
ZXIgdmVyc2lvbnMgb2YgZ2NjLCBpdCBpcyksIHdlIHVzZQotLy8gICBhIGNzdGRhdG9taWMtYmFz
ZWQgQXRvbWljUG9pbnRlci4gIEhvd2V2ZXIgd2UgcHJlZmVyIHRoZSBtZW1vcnkKLS8vICAgYmFy
cmllciBiYXNlZCB2ZXJzaW9uLCBiZWNhdXNlIGF0IGxlYXN0IG9uIGEgZ2NjIDQuNCAzMi1iaXQg
YnVpbGQKLS8vICAgb24gbGludXgsIHdlIGhhdmUgZW5jb3VudGVyZWQgYSBidWdneSA8Y3N0ZGF0
b21pYz4KLS8vICAgaW1wbGVtZW50YXRpb24uICBBbHNvLCBzb21lIDxjc3RkYXRvbWljPiBpbXBs
ZW1lbnRhdGlvbnMgYXJlIG11Y2gKLS8vICAgc2xvd2VyIHRoYW4gYSBtZW1vcnktYmFycmllciBi
YXNlZCBpbXBsZW1lbnRhdGlvbiAofjE2bnMgZm9yCi0vLyAgIDxjc3RkYXRvbWljPiBiYXNlZCBh
Y3F1aXJlLWxvYWQgdnMuIH4xbnMgZm9yIGEgYmFycmllciBiYXNlZAotLy8gICBhY3F1aXJlLWxv
YWQpLgotLy8gVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGF0b21pY29wcy1pbnRlcm5hbHMtKiBpbiBH
b29nbGUncyBwZXJmdG9vbHM6Ci0vLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZ29vZ2xlLXBl
cmZ0b29scy9zb3VyY2UvYnJvd3NlLyNzdm4lMkZ0cnVuayUyRnNyYyUyRmJhc2UKLQotI2lmbmRl
ZiBQT1JUX0FUT01JQ19QT0lOVEVSX0hfCi0jZGVmaW5lIFBPUlRfQVRPTUlDX1BPSU5URVJfSF8K
LQotI2luY2x1ZGUgPHN0ZGludC5oPgotI2lmZGVmIExFVkVMREJfQ1NUREFUT01JQ19QUkVTRU5U
Ci0jaW5jbHVkZSA8Y3N0ZGF0b21pYz4KLSNlbmRpZgotI2lmZGVmIE9TX1dJTgotI2luY2x1ZGUg
PHdpbmRvd3MuaD4KLSNlbmRpZgotI2lmZGVmIE9TX01BQ09TWAotI2luY2x1ZGUgPGxpYmtlcm4v
T1NBdG9taWMuaD4KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfTV9YNjQpIHx8IGRlZmluZWQoX194
ODZfNjRfXykKLSNkZWZpbmUgQVJDSF9DUFVfWDg2X0ZBTUlMWSAxCi0jZWxpZiBkZWZpbmVkKF9N
X0lYODYpIHx8IGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX19pMzg2KQotI2RlZmluZSBB
UkNIX0NQVV9YODZfRkFNSUxZIDEKLSNlbGlmIGRlZmluZWQoX19BUk1FTF9fKSB8fCBkZWZpbmVk
KF9fYWFyY2g2NF9fKQotI2RlZmluZSBBUkNIX0NQVV9BUk1fRkFNSUxZIDEKLSNlbGlmIGRlZmlu
ZWQoX19wcGNfXykgfHwgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX3Bvd2VycGM2
NF9fKQotI2RlZmluZSBBUkNIX0NQVV9QUENfRkFNSUxZIDEKLSNlbmRpZgotCi1uYW1lc3BhY2Ug
bGV2ZWxkYiB7Ci1uYW1lc3BhY2UgcG9ydCB7Ci0KLS8vIERlZmluZSBNZW1vcnlCYXJyaWVyKCkg
aWYgYXZhaWxhYmxlCi0vLyBXaW5kb3dzIG9uIHg4NgotI2lmIGRlZmluZWQoT1NfV0lOKSAmJiBk
ZWZpbmVkKENPTVBJTEVSX01TVkMpICYmIGRlZmluZWQoQVJDSF9DUFVfWDg2X0ZBTUlMWSkKLS8v
IHdpbmRvd3MuaCBhbHJlYWR5IHByb3ZpZGVzIGEgTWVtb3J5QmFycmllcih2b2lkKSBtYWNybwot
Ly8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNjg0MjA4KHY9dnMu
ODUpLmFzcHgKLSNkZWZpbmUgTEVWRUxEQl9IQVZFX01FTU9SWV9CQVJSSUVSCi0KLS8vIEdjYyBv
biB4ODYKLSNlbGlmIGRlZmluZWQoQVJDSF9DUFVfWDg2X0ZBTUlMWSkgJiYgZGVmaW5lZChfX0dO
VUNfXykKLWlubGluZSB2b2lkIE1lbW9yeUJhcnJpZXIoKSB7Ci0gIC8vIFNlZSBodHRwOi8vZ2Nj
LmdudS5vcmcvbWwvZ2NjLzIwMDMtMDQvbXNnMDExODAuaHRtbCBmb3IgYSBkaXNjdXNzaW9uIG9u
Ci0gIC8vIHRoaXMgaWRpb20uIEFsc28gc2VlIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kv
TWVtb3J5X29yZGVyaW5nLgotICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIiA6IDogOiAibWVtb3J5
Iik7Ci19Ci0jZGVmaW5lIExFVkVMREJfSEFWRV9NRU1PUllfQkFSUklFUgotCi0vLyBTdW4gU3R1
ZGlvCi0jZWxpZiBkZWZpbmVkKEFSQ0hfQ1BVX1g4Nl9GQU1JTFkpICYmIGRlZmluZWQoX19TVU5Q
Uk9fQ0MpCi1pbmxpbmUgdm9pZCBNZW1vcnlCYXJyaWVyKCkgewotICAvLyBTZWUgaHR0cDovL2dj
Yy5nbnUub3JnL21sL2djYy8yMDAzLTA0L21zZzAxMTgwLmh0bWwgZm9yIGEgZGlzY3Vzc2lvbiBv
bgotICAvLyB0aGlzIGlkaW9tLiBBbHNvIHNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtp
L01lbW9yeV9vcmRlcmluZy4KLSAgYXNtIHZvbGF0aWxlKCIiIDogOiA6ICJtZW1vcnkiKTsKLX0K
LSNkZWZpbmUgTEVWRUxEQl9IQVZFX01FTU9SWV9CQVJSSUVSCi0KLS8vIE1hYyBPUwotI2VsaWYg
ZGVmaW5lZChPU19NQUNPU1gpCi1pbmxpbmUgdm9pZCBNZW1vcnlCYXJyaWVyKCkgewotICBPU01l
bW9yeUJhcnJpZXIoKTsKLX0KLSNkZWZpbmUgTEVWRUxEQl9IQVZFX01FTU9SWV9CQVJSSUVSCi0K
LS8vIEFSTSBMaW51eAotI2VsaWYgZGVmaW5lZChBUkNIX0NQVV9BUk1fRkFNSUxZKSAmJiBkZWZp
bmVkKF9fbGludXhfXykKLXR5cGVkZWYgdm9pZCAoKkxpbnV4S2VybmVsTWVtb3J5QmFycmllckZ1
bmMpKHZvaWQpOwotLy8gVGhlIExpbnV4IEFSTSBrZXJuZWwgcHJvdmlkZXMgYSBoaWdobHkgb3B0
aW1pemVkIGRldmljZS1zcGVjaWZpYyBtZW1vcnkKLS8vIGJhcnJpZXIgZnVuY3Rpb24gYXQgYSBm
aXhlZCBtZW1vcnkgYWRkcmVzcyB0aGF0IGlzIG1hcHBlZCBpbiBldmVyeQotLy8gdXNlci1sZXZl
bCBwcm9jZXNzLgotLy8KLS8vIFRoaXMgYmVhdHMgdXNpbmcgQ1BVLXNwZWNpZmljIGluc3RydWN0
aW9ucyB3aGljaCBhcmUsIG9uIHNpbmdsZS1jb3JlCi0vLyBkZXZpY2VzLCB1bi1uZWNlc3Nhcnkg
YW5kIHZlcnkgY29zdGx5IChlLmcuIEFSTXY3LUEgImRtYiIgdGFrZXMgbW9yZQotLy8gdGhhbiAx
ODBucyBvbiBhIENvcnRleC1BOCBsaWtlIHRoZSBvbmUgb24gYSBOZXh1cyBPbmUpLiBCZW5jaG1h
cmtpbmcKLS8vIHNob3dzIHRoYXQgdGhlIGV4dHJhIGZ1bmN0aW9uIGNhbGwgY29zdCBpcyBjb21w
bGV0ZWx5IG5lZ2xpZ2libGUgb24KLS8vIG11bHRpLWNvcmUgZGV2aWNlcy4KLS8vCi1pbmxpbmUg
dm9pZCBNZW1vcnlCYXJyaWVyKCkgewotICAoKihMaW51eEtlcm5lbE1lbW9yeUJhcnJpZXJGdW5j
KTB4ZmZmZjBmYTApKCk7Ci19Ci0jZGVmaW5lIExFVkVMREJfSEFWRV9NRU1PUllfQkFSUklFUgot
Ci0vLyBQUEMKLSNlbGlmIGRlZmluZWQoQVJDSF9DUFVfUFBDX0ZBTUlMWSkgJiYgZGVmaW5lZChf
X0dOVUNfXykKLWlubGluZSB2b2lkIE1lbW9yeUJhcnJpZXIoKSB7Ci0gIC8vIFRPRE8gZm9yIHNv
bWUgcG93ZXJwYyBleHBlcnQ6IGlzIHRoZXJlIGEgY2hlYXBlciBzdWl0YWJsZSB2YXJpYW50Pwot
ICAvLyBQZXJoYXBzIGJ5IGhhdmluZyBzZXBhcmF0ZSBiYXJyaWVycyBmb3IgYWNxdWlyZSBhbmQg
cmVsZWFzZSBvcHMuCi0gIGFzbSB2b2xhdGlsZSgic3luYyIgOiA6IDogIm1lbW9yeSIpOwotfQot
I2RlZmluZSBMRVZFTERCX0hBVkVfTUVNT1JZX0JBUlJJRVIKLQotI2VuZGlmCi0KLS8vIEF0b21p
Y1BvaW50ZXIgYnVpbHQgdXNpbmcgcGxhdGZvcm0tc3BlY2lmaWMgTWVtb3J5QmFycmllcigpCi0j
aWYgZGVmaW5lZChMRVZFTERCX0hBVkVfTUVNT1JZX0JBUlJJRVIpCi1jbGFzcyBBdG9taWNQb2lu
dGVyIHsKLSBwcml2YXRlOgotICB2b2lkKiByZXBfOwotIHB1YmxpYzoKLSAgQXRvbWljUG9pbnRl
cigpIHsgfQotICBleHBsaWNpdCBBdG9taWNQb2ludGVyKHZvaWQqIHApIDogcmVwXyhwKSB7fQot
ICBpbmxpbmUgdm9pZCogTm9CYXJyaWVyX0xvYWQoKSBjb25zdCB7IHJldHVybiByZXBfOyB9Ci0g
IGlubGluZSB2b2lkIE5vQmFycmllcl9TdG9yZSh2b2lkKiB2KSB7IHJlcF8gPSB2OyB9Ci0gIGlu
bGluZSB2b2lkKiBBY3F1aXJlX0xvYWQoKSBjb25zdCB7Ci0gICAgdm9pZCogcmVzdWx0ID0gcmVw
XzsKLSAgICBNZW1vcnlCYXJyaWVyKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICBpbmxp
bmUgdm9pZCBSZWxlYXNlX1N0b3JlKHZvaWQqIHYpIHsKLSAgICBNZW1vcnlCYXJyaWVyKCk7Ci0g
ICAgcmVwXyA9IHY7Ci0gIH0KLX07Ci0KLS8vIEF0b21pY1BvaW50ZXIgYmFzZWQgb24gPGNzdGRh
dG9taWM+Ci0jZWxpZiBkZWZpbmVkKExFVkVMREJfQ1NUREFUT01JQ19QUkVTRU5UKQotY2xhc3Mg
QXRvbWljUG9pbnRlciB7Ci0gcHJpdmF0ZToKLSAgc3RkOjphdG9taWM8dm9pZCo+IHJlcF87Ci0g
cHVibGljOgotICBBdG9taWNQb2ludGVyKCkgeyB9Ci0gIGV4cGxpY2l0IEF0b21pY1BvaW50ZXIo
dm9pZCogdikgOiByZXBfKHYpIHsgfQotICBpbmxpbmUgdm9pZCogQWNxdWlyZV9Mb2FkKCkgY29u
c3QgewotICAgIHJldHVybiByZXBfLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7Ci0g
IH0KLSAgaW5saW5lIHZvaWQgUmVsZWFzZV9TdG9yZSh2b2lkKiB2KSB7Ci0gICAgcmVwXy5zdG9y
ZSh2LCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKLSAgfQotICBpbmxpbmUgdm9pZCogTm9C
YXJyaWVyX0xvYWQoKSBjb25zdCB7Ci0gICAgcmV0dXJuIHJlcF8ubG9hZChzdGQ6Om1lbW9yeV9v
cmRlcl9yZWxheGVkKTsKLSAgfQotICBpbmxpbmUgdm9pZCBOb0JhcnJpZXJfU3RvcmUodm9pZCog
dikgewotICAgIHJlcF8uc3RvcmUodiwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0gIH0K
LX07Ci0KLS8vIEF0b21pYyBwb2ludGVyIGJhc2VkIG9uIHNwYXJjIG1lbW9yeSBiYXJyaWVycwot
I2VsaWYgZGVmaW5lZChfX3NwYXJjdjkpICYmIGRlZmluZWQoX19HTlVDX18pCi1jbGFzcyBBdG9t
aWNQb2ludGVyIHsKLSBwcml2YXRlOgotICB2b2lkKiByZXBfOwotIHB1YmxpYzoKLSAgQXRvbWlj
UG9pbnRlcigpIHsgfQotICBleHBsaWNpdCBBdG9taWNQb2ludGVyKHZvaWQqIHYpIDogcmVwXyh2
KSB7IH0KLSAgaW5saW5lIHZvaWQqIEFjcXVpcmVfTG9hZCgpIGNvbnN0IHsKLSAgICB2b2lkKiB2
YWw7Ci0gICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAibGR4IFslW3JlcF9dXSwg
JVt2YWxdIFxuXHQiCi0gICAgICAgICAibWVtYmFyICNMb2FkTG9hZHwjTG9hZFN0b3JlIFxuXHQi
Ci0gICAgICAgIDogW3ZhbF0gIj1yIiAodmFsKQotICAgICAgICA6IFtyZXBfXSAiciIgKCZyZXBf
KQotICAgICAgICA6ICJtZW1vcnkiKTsKLSAgICByZXR1cm4gdmFsOwotICB9Ci0gIGlubGluZSB2
b2lkIFJlbGVhc2VfU3RvcmUodm9pZCogdikgewotICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgK
LSAgICAgICAgIm1lbWJhciAjTG9hZFN0b3JlfCNTdG9yZVN0b3JlIFxuXHQiCi0gICAgICAgICJz
dHggJVt2XSwgWyVbcmVwX11dIFxuXHQiCi0gICAgICAgIDoKLSAgICAgICAgOiBbcmVwX10gInIi
ICgmcmVwXyksIFt2XSAiciIgKHYpCi0gICAgICAgIDogIm1lbW9yeSIpOwotICB9Ci0gIGlubGlu
ZSB2b2lkKiBOb0JhcnJpZXJfTG9hZCgpIGNvbnN0IHsgcmV0dXJuIHJlcF87IH0KLSAgaW5saW5l
IHZvaWQgTm9CYXJyaWVyX1N0b3JlKHZvaWQqIHYpIHsgcmVwXyA9IHY7IH0KLX07Ci0KLS8vIEF0
b21pYyBwb2ludGVyIGJhc2VkIG9uIGlhNjQgYWNxL3JlbAotI2VsaWYgZGVmaW5lZChfX2lhNjQp
ICYmIGRlZmluZWQoX19HTlVDX18pCi1jbGFzcyBBdG9taWNQb2ludGVyIHsKLSBwcml2YXRlOgot
ICB2b2lkKiByZXBfOwotIHB1YmxpYzoKLSAgQXRvbWljUG9pbnRlcigpIHsgfQotICBleHBsaWNp
dCBBdG9taWNQb2ludGVyKHZvaWQqIHYpIDogcmVwXyh2KSB7IH0KLSAgaW5saW5lIHZvaWQqIEFj
cXVpcmVfTG9hZCgpIGNvbnN0IHsKLSAgICB2b2lkKiB2YWwgICAgOwotICAgIF9fYXNtX18gX192
b2xhdGlsZV9fICgKLSAgICAgICAgImxkOC5hY3EgJVt2YWxdID0gWyVbcmVwX11dIFxuXHQiCi0g
ICAgICAgIDogW3ZhbF0gIj1yIiAodmFsKQotICAgICAgICA6IFtyZXBfXSAiciIgKCZyZXBfKQot
ICAgICAgICA6ICJtZW1vcnkiCi0gICAgICAgICk7Ci0gICAgcmV0dXJuIHZhbDsKLSAgfQotICBp
bmxpbmUgdm9pZCBSZWxlYXNlX1N0b3JlKHZvaWQqIHYpIHsKLSAgICBfX2FzbV9fIF9fdm9sYXRp
bGVfXyAoCi0gICAgICAgICJzdDgucmVsIFslW3JlcF9dXSA9ICVbdl0gIFxuXHQiCi0gICAgICAg
IDoKLSAgICAgICAgOiBbcmVwX10gInIiICgmcmVwXyksIFt2XSAiciIgKHYpCi0gICAgICAgIDog
Im1lbW9yeSIKLSAgICAgICAgKTsKLSAgfQotICBpbmxpbmUgdm9pZCogTm9CYXJyaWVyX0xvYWQo
KSBjb25zdCB7IHJldHVybiByZXBfOyB9Ci0gIGlubGluZSB2b2lkIE5vQmFycmllcl9TdG9yZSh2
b2lkKiB2KSB7IHJlcF8gPSB2OyB9Ci19OwotCi0vLyBXZSBoYXZlIG5laXRoZXIgTWVtb3J5QmFy
cmllcigpLCBub3IgPGNzdGRhdG9taWM+Ci0jZWxzZQotI2Vycm9yIFBsZWFzZSBpbXBsZW1lbnQg
QXRvbWljUG9pbnRlciBmb3IgdGhpcyBwbGF0Zm9ybS4KLQotI2VuZGlmCi0KLSN1bmRlZiBMRVZF
TERCX0hBVkVfTUVNT1JZX0JBUlJJRVIKLSN1bmRlZiBBUkNIX0NQVV9YODZfRkFNSUxZCi0jdW5k
ZWYgQVJDSF9DUFVfQVJNX0ZBTUlMWQotI3VuZGVmIEFSQ0hfQ1BVX1BQQ19GQU1JTFkKLQotfSAg
Ly8gbmFtZXNwYWNlIHBvcnQKLX0gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCi0KLSNlbmRpZiAgLy8g
UE9SVF9BVE9NSUNfUE9JTlRFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi9wb3J0L3BvcnQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9ydC9wb3J0LmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2NjdkYjQuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9wb3J0L3BvcnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5
ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4K
LQotI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfUE9SVF9QT1JUX0hfCi0jZGVmaW5lIFNUT1JBR0Vf
TEVWRUxEQl9QT1JUX1BPUlRfSF8KLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0vLyBJbmNsdWRl
IHRoZSBhcHByb3ByaWF0ZSBwbGF0Zm9ybSBzcGVjaWZpYyBmaWxlIGJlbG93LiAgSWYgeW91IGFy
ZQotLy8gcG9ydGluZyB0byBhIG5ldyBwbGF0Zm9ybSwgc2VlICJwb3J0X2V4YW1wbGUuaCIgZm9y
IGRvY3VtZW50YXRpb24KLS8vIG9mIHdoYXQgdGhlIG5ldyBwb3J0XzxwbGF0Zm9ybT4uaCBmaWxl
IG11c3QgcHJvdmlkZS4KLSNpZiBkZWZpbmVkKExFVkVMREJfUExBVEZPUk1fUE9TSVgpCi0jICBp
bmNsdWRlICJwb3J0L3BvcnRfcG9zaXguaCIKLSNlbGlmIGRlZmluZWQoTEVWRUxEQl9QTEFURk9S
TV9DSFJPTUlVTSkKLSMgIGluY2x1ZGUgInBvcnQvcG9ydF9jaHJvbWl1bS5oIgotI2VuZGlmCi0K
LSNlbmRpZiAgLy8gU1RPUkFHRV9MRVZFTERCX1BPUlRfUE9SVF9IXwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9wb3J0L3BvcnRfZXhhbXBsZS5oIGIvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi9wb3J0L3BvcnRfZXhhbXBsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBhYjllNDg5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
cG9ydC9wb3J0X2V4YW1wbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0vLyBD
b3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0
aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCi0vLwotLy8gVGhpcyBm
aWxlIGNvbnRhaW5zIHRoZSBzcGVjaWZpY2F0aW9uLCBidXQgbm90IHRoZSBpbXBsZW1lbnRhdGlv
bnMsCi0vLyBvZiB0aGUgdHlwZXMvb3BlcmF0aW9ucy9ldGMuIHRoYXQgc2hvdWxkIGJlIGRlZmlu
ZWQgYnkgYSBwbGF0Zm9ybQotLy8gc3BlY2lmaWMgcG9ydF88cGxhdGZvcm0+LmggZmlsZS4gIFVz
ZSB0aGlzIGZpbGUgYXMgYSByZWZlcmVuY2UgZm9yCi0vLyBob3cgdG8gcG9ydCB0aGlzIHBhY2th
Z2UgdG8gYSBuZXcgcGxhdGZvcm0uCi0KLSNpZm5kZWYgU1RPUkFHRV9MRVZFTERCX1BPUlRfUE9S
VF9FWEFNUExFX0hfCi0jZGVmaW5lIFNUT1JBR0VfTEVWRUxEQl9QT1JUX1BPUlRfRVhBTVBMRV9I
XwotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7Ci1uYW1lc3BhY2UgcG9ydCB7Ci0KLS8vIFRPRE8oam9y
bG93KTogTWFueSBvZiB0aGVzZSBiZWxvbmcgbW9yZSBpbiB0aGUgZW52aXJvbm1lbnQgY2xhc3Mg
cmF0aGVyIHRoYW4KLS8vICAgICAgICAgICAgICAgaGVyZS4gV2Ugc2hvdWxkIHRyeSBtb3Zpbmcg
dGhlbSBhbmQgc2VlIGlmIGl0IGFmZmVjdHMgcGVyZi4KLQotLy8gVGhlIGZvbGxvd2luZyBib29s
ZWFuIGNvbnN0YW50IG11c3QgYmUgdHJ1ZSBvbiBhIGxpdHRsZS1lbmRpYW4gbWFjaGluZQotLy8g
YW5kIGZhbHNlIG90aGVyd2lzZS4KLXN0YXRpYyBjb25zdCBib29sIGtMaXR0bGVFbmRpYW4gPSB0
cnVlIC8qIG9yIHNvbWUgb3RoZXIgZXhwcmVzc2lvbiAqLzsKLQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tIFRocmVhZGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIEEgTXV0ZXggcmVwcmVzZW50
cyBhbiBleGNsdXNpdmUgbG9jay4KLWNsYXNzIE11dGV4IHsKLSBwdWJsaWM6Ci0gIE11dGV4KCk7
Ci0gIH5NdXRleCgpOwotCi0gIC8vIExvY2sgdGhlIG11dGV4LiAgV2FpdHMgdW50aWwgb3RoZXIg
bG9ja2VycyBoYXZlIGV4aXRlZC4KLSAgLy8gV2lsbCBkZWFkbG9jayBpZiB0aGUgbXV0ZXggaXMg
YWxyZWFkeSBsb2NrZWQgYnkgdGhpcyB0aHJlYWQuCi0gIHZvaWQgTG9jaygpOwotCi0gIC8vIFVu
bG9jayB0aGUgbXV0ZXguCi0gIC8vIFJFUVVJUkVTOiBUaGlzIG11dGV4IHdhcyBsb2NrZWQgYnkg
dGhpcyB0aHJlYWQuCi0gIHZvaWQgVW5sb2NrKCk7Ci0KLSAgLy8gT3B0aW9uYWxseSBjcmFzaCBp
ZiB0aGlzIHRocmVhZCBkb2VzIG5vdCBob2xkIHRoaXMgbXV0ZXguCi0gIC8vIFRoZSBpbXBsZW1l
bnRhdGlvbiBtdXN0IGJlIGZhc3QsIGVzcGVjaWFsbHkgaWYgTkRFQlVHIGlzCi0gIC8vIGRlZmlu
ZWQuICBUaGUgaW1wbGVtZW50YXRpb24gaXMgYWxsb3dlZCB0byBza2lwIGFsbCBjaGVja3MuCi0g
IHZvaWQgQXNzZXJ0SGVsZCgpOwotfTsKLQotY2xhc3MgQ29uZFZhciB7Ci0gcHVibGljOgotICBl
eHBsaWNpdCBDb25kVmFyKE11dGV4KiBtdSk7Ci0gIH5Db25kVmFyKCk7Ci0KLSAgLy8gQXRvbWlj
YWxseSByZWxlYXNlICptdSBhbmQgYmxvY2sgb24gdGhpcyBjb25kaXRpb24gdmFyaWFibGUgdW50
aWwKLSAgLy8gZWl0aGVyIGEgY2FsbCB0byBTaWduYWxBbGwoKSwgb3IgYSBjYWxsIHRvIFNpZ25h
bCgpIHRoYXQgcGlja3MKLSAgLy8gdGhpcyB0aHJlYWQgdG8gd2FrZXVwLgotICAvLyBSRVFVSVJF
UzogdGhpcyB0aHJlYWQgaG9sZHMgKm11Ci0gIHZvaWQgV2FpdCgpOwotCi0gIC8vIElmIHRoZXJl
IGFyZSBzb21lIHRocmVhZHMgd2FpdGluZywgd2FrZSB1cCBhdCBsZWFzdCBvbmUgb2YgdGhlbS4K
LSAgdm9pZCBTaWduYWwoKTsKLQotICAvLyBXYWtlIHVwIGFsbCB3YWl0aW5nIHRocmVhZHMuCi0g
IHZvaWQgU2lnbmFsbEFsbCgpOwotfTsKLQotLy8gVGhyZWFkLXNhZmUgaW5pdGlhbGl6YXRpb24u
Ci0vLyBVc2VkIGFzIGZvbGxvd3M6Ci0vLyAgICAgIHN0YXRpYyBwb3J0OjpPbmNlVHlwZSBpbml0
X2NvbnRyb2wgPSBMRVZFTERCX09OQ0VfSU5JVDsKLS8vICAgICAgc3RhdGljIHZvaWQgSW5pdGlh
bGl6ZXIoKSB7IC4uLiBkbyBzb21ldGhpbmcgLi4uOyB9Ci0vLyAgICAgIC4uLgotLy8gICAgICBw
b3J0OjpJbml0T25jZSgmaW5pdF9jb250cm9sLCAmSW5pdGlhbGl6ZXIpOwotdHlwZWRlZiBpbnRw
dHJfdCBPbmNlVHlwZTsKLSNkZWZpbmUgTEVWRUxEQl9PTkNFX0lOSVQgMAotZXh0ZXJuIHZvaWQg
SW5pdE9uY2UocG9ydDo6T25jZVR5cGUqLCB2b2lkICgqaW5pdGlhbGl6ZXIpKCkpOwotCi0vLyBB
IHR5cGUgdGhhdCBob2xkcyBhIHBvaW50ZXIgdGhhdCBjYW4gYmUgcmVhZCBvciB3cml0dGVuIGF0
b21pY2FsbHkKLS8vIChpLmUuLCB3aXRob3V0IHdvcmQtdGVhcmluZy4pCi1jbGFzcyBBdG9taWNQ
b2ludGVyIHsKLSBwcml2YXRlOgotICBpbnRwdHJfdCByZXBfOwotIHB1YmxpYzoKLSAgLy8gSW5p
dGlhbGl6ZSB0byBhcmJpdHJhcnkgdmFsdWUKLSAgQXRvbWljUG9pbnRlcigpOwotCi0gIC8vIElu
aXRpYWxpemUgdG8gaG9sZCB2Ci0gIGV4cGxpY2l0IEF0b21pY1BvaW50ZXIodm9pZCogdikgOiBy
ZXBfKHYpIHsgfQotCi0gIC8vIFJlYWQgYW5kIHJldHVybiB0aGUgc3RvcmVkIHBvaW50ZXIgd2l0
aCB0aGUgZ3VhcmFudGVlIHRoYXQgbm8KLSAgLy8gbGF0ZXIgbWVtb3J5IGFjY2VzcyAocmVhZCBv
ciB3cml0ZSkgYnkgdGhpcyB0aHJlYWQgY2FuIGJlCi0gIC8vIHJlb3JkZXJlZCBhaGVhZCBvZiB0
aGlzIHJlYWQuCi0gIHZvaWQqIEFjcXVpcmVfTG9hZCgpIGNvbnN0OwotCi0gIC8vIFNldCB2IGFz
IHRoZSBzdG9yZWQgcG9pbnRlciB3aXRoIHRoZSBndWFyYW50ZWUgdGhhdCBubyBlYXJsaWVyCi0g
IC8vIG1lbW9yeSBhY2Nlc3MgKHJlYWQgb3Igd3JpdGUpIGJ5IHRoaXMgdGhyZWFkIGNhbiBiZSBy
ZW9yZGVyZWQKLSAgLy8gYWZ0ZXIgdGhpcyBzdG9yZS4KLSAgdm9pZCBSZWxlYXNlX1N0b3JlKHZv
aWQqIHYpOwotCi0gIC8vIFJlYWQgdGhlIHN0b3JlZCBwb2ludGVyIHdpdGggbm8gb3JkZXJpbmcg
Z3VhcmFudGVlcy4KLSAgdm9pZCogTm9CYXJyaWVyX0xvYWQoKSBjb25zdDsKLQotICAvLyBTZXQg
dmEgYXMgdGhlIHN0b3JlZCBwb2ludGVyIHdpdGggbm8gb3JkZXJpbmcgZ3VhcmFudGVlcy4KLSAg
dm9pZCBOb0JhcnJpZXJfU3RvcmUodm9pZCogdik7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0gQ29tcHJlc3Npb24gLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBTdG9yZSB0aGUgc25hcHB5
IGNvbXByZXNzaW9uIG9mICJpbnB1dFswLGlucHV0X2xlbmd0aC0xXSIgaW4gKm91dHB1dC4KLS8v
IFJldHVybnMgZmFsc2UgaWYgc25hcHB5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBwb3J0Lgot
ZXh0ZXJuIGJvb2wgU25hcHB5X0NvbXByZXNzKGNvbnN0IGNoYXIqIGlucHV0LCBzaXplX3QgaW5w
dXRfbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBvdXRw
dXQpOwotCi0vLyBJZiBpbnB1dFswLGlucHV0X2xlbmd0aC0xXSBsb29rcyBsaWtlIGEgdmFsaWQg
c25hcHB5IGNvbXByZXNzZWQKLS8vIGJ1ZmZlciwgc3RvcmUgdGhlIHNpemUgb2YgdGhlIHVuY29t
cHJlc3NlZCBkYXRhIGluICpyZXN1bHQgYW5kCi0vLyByZXR1cm4gdHJ1ZS4gIEVsc2UgcmV0dXJu
IGZhbHNlLgotZXh0ZXJuIGJvb2wgU25hcHB5X0dldFVuY29tcHJlc3NlZExlbmd0aChjb25zdCBj
aGFyKiBpbnB1dCwgc2l6ZV90IGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90KiByZXN1bHQpOwotCi0vLyBBdHRlbXB0IHRvIHNuYXBweSB1bmNv
bXByZXNzIGlucHV0WzAsaW5wdXRfbGVuZ3RoLTFdIGludG8gKm91dHB1dC4KLS8vIFJldHVybnMg
dHJ1ZSBpZiBzdWNjZXNzZnVsLCBmYWxzZSBpZiB0aGUgaW5wdXQgaXMgaW52YWxpZCBsaWdodHdl
aWdodAotLy8gY29tcHJlc3NlZCBkYXRhLgotLy8KLS8vIFJFUVVJUkVTOiBhdCBsZWFzdCB0aGUg
Zmlyc3QgIm4iIGJ5dGVzIG9mIG91dHB1dFtdIG11c3QgYmUgd3JpdGFibGUKLS8vIHdoZXJlICJu
IiBpcyB0aGUgcmVzdWx0IG9mIGEgc3VjY2Vzc2Z1bCBjYWxsIHRvCi0vLyBTbmFwcHlfR2V0VW5j
b21wcmVzc2VkTGVuZ3RoLgotZXh0ZXJuIGJvb2wgU25hcHB5X1VuY29tcHJlc3MoY29uc3QgY2hh
ciogaW5wdXRfZGF0YSwgc2l6ZV90IGlucHV0X2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIqIG91dHB1dCk7Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxs
YW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gSWYgaGVhcCBwcm9maWxpbmcgaXMgbm90
IHN1cHBvcnRlZCwgcmV0dXJucyBmYWxzZS4KLS8vIEVsc2UgcmVwZWF0ZWRseSBjYWxscyAoKmZ1
bmMpKGFyZywgZGF0YSwgbikgYW5kIHRoZW4gcmV0dXJucyB0cnVlLgotLy8gVGhlIGNvbmNhdGVu
YXRpb24gb2YgYWxsICJkYXRhWzAsbi0xXSIgZnJhZ21lbnRzIGlzIHRoZSBoZWFwIHByb2ZpbGUu
Ci1leHRlcm4gYm9vbCBHZXRIZWFwUHJvZmlsZSh2b2lkICgqZnVuYykodm9pZCosIGNvbnN0IGNo
YXIqLCBpbnQpLCB2b2lkKiBhcmcpOwotCi19ICAvLyBuYW1lc3BhY2UgcG9ydAotfSAgLy8gbmFt
ZXNwYWNlIGxldmVsZGIKLQotI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfUE9SVF9QT1JUX0VY
QU1QTEVfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9ydC9wb3J0
X3Bvc2l4LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9wb3J0L3BvcnRfcG9zaXguY2MK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViYTEyN2EuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9wb3J0L3BvcnRfcG9zaXguY2MKKysrIC9kZXYvbnVsbApA
QCAtMSw1NCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmli
dXRvcnMuCi0KLSNpbmNsdWRlICJwb3J0L3BvcnRfcG9zaXguaCIKLQotI2luY2x1ZGUgPGNzdGRs
aWI+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJ1
dGlsL2xvZ2dpbmcuaCIKLQotbmFtZXNwYWNlIGxldmVsZGIgewotbmFtZXNwYWNlIHBvcnQgewot
Ci1zdGF0aWMgdm9pZCBQdGhyZWFkQ2FsbChjb25zdCBjaGFyKiBsYWJlbCwgaW50IHJlc3VsdCkg
ewotICBpZiAocmVzdWx0ICE9IDApIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgInB0aHJlYWQgJXM6
ICVzXG4iLCBsYWJlbCwgc3RyZXJyb3IocmVzdWx0KSk7Ci0gICAgYWJvcnQoKTsKLSAgfQotfQot
Ci1NdXRleDo6TXV0ZXgoKSB7IFB0aHJlYWRDYWxsKCJpbml0IG11dGV4IiwgcHRocmVhZF9tdXRl
eF9pbml0KCZtdV8sIE5VTEwpKTsgfQotCi1NdXRleDo6fk11dGV4KCkgeyBQdGhyZWFkQ2FsbCgi
ZGVzdHJveSBtdXRleCIsIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmbXVfKSk7IH0KLQotdm9pZCBN
dXRleDo6TG9jaygpIHsgUHRocmVhZENhbGwoImxvY2siLCBwdGhyZWFkX211dGV4X2xvY2soJm11
XykpOyB9Ci0KLXZvaWQgTXV0ZXg6OlVubG9jaygpIHsgUHRocmVhZENhbGwoInVubG9jayIsIHB0
aHJlYWRfbXV0ZXhfdW5sb2NrKCZtdV8pKTsgfQotCi1Db25kVmFyOjpDb25kVmFyKE11dGV4KiBt
dSkKLSAgICA6IG11XyhtdSkgewotICAgIFB0aHJlYWRDYWxsKCJpbml0IGN2IiwgcHRocmVhZF9j
b25kX2luaXQoJmN2XywgTlVMTCkpOwotfQotCi1Db25kVmFyOjp+Q29uZFZhcigpIHsgUHRocmVh
ZENhbGwoImRlc3Ryb3kgY3YiLCBwdGhyZWFkX2NvbmRfZGVzdHJveSgmY3ZfKSk7IH0KLQotdm9p
ZCBDb25kVmFyOjpXYWl0KCkgewotICBQdGhyZWFkQ2FsbCgid2FpdCIsIHB0aHJlYWRfY29uZF93
YWl0KCZjdl8sICZtdV8tPm11XykpOwotfQotCi12b2lkIENvbmRWYXI6OlNpZ25hbCgpIHsKLSAg
UHRocmVhZENhbGwoInNpZ25hbCIsIHB0aHJlYWRfY29uZF9zaWduYWwoJmN2XykpOwotfQotCi12
b2lkIENvbmRWYXI6OlNpZ25hbEFsbCgpIHsKLSAgUHRocmVhZENhbGwoImJyb2FkY2FzdCIsIHB0
aHJlYWRfY29uZF9icm9hZGNhc3QoJmN2XykpOwotfQotCi12b2lkIEluaXRPbmNlKE9uY2VUeXBl
KiBvbmNlLCB2b2lkICgqaW5pdGlhbGl6ZXIpKCkpIHsKLSAgUHRocmVhZENhbGwoIm9uY2UiLCBw
dGhyZWFkX29uY2Uob25jZSwgaW5pdGlhbGl6ZXIpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHBv
cnQKLX0gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL3BvcnQvcG9ydF9wb3NpeC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9w
b3J0L3BvcnRfcG9zaXguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZiYWI5Yi4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3BvcnQvcG9ydF9wb3NpeC5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMSBU
aGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9y
IG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KLS8vCi0vLyBTZWUgcG9ydF9leGFtcGxlLmggZm9yIGRv
Y3VtZW50YXRpb24gZm9yIHRoZSBmb2xsb3dpbmcgdHlwZXMvZnVuY3Rpb25zLgotCi0jaWZuZGVm
IFNUT1JBR0VfTEVWRUxEQl9QT1JUX1BPUlRfUE9TSVhfSF8KLSNkZWZpbmUgU1RPUkFHRV9MRVZF
TERCX1BPUlRfUE9SVF9QT1NJWF9IXwotCi0jdW5kZWYgUExBVEZPUk1fSVNfTElUVExFX0VORElB
TgotI2lmIGRlZmluZWQoT1NfTUFDT1NYKQotICAjaW5jbHVkZSA8bWFjaGluZS9lbmRpYW4uaD4K
LSAgI2lmIGRlZmluZWQoX19EQVJXSU5fTElUVExFX0VORElBTikgJiYgZGVmaW5lZChfX0RBUldJ
Tl9CWVRFX09SREVSKQotICAgICNkZWZpbmUgUExBVEZPUk1fSVNfTElUVExFX0VORElBTiBcCi0g
ICAgICAgIChfX0RBUldJTl9CWVRFX09SREVSID09IF9fREFSV0lOX0xJVFRMRV9FTkRJQU4pCi0g
ICNlbmRpZgotI2VsaWYgZGVmaW5lZChPU19TT0xBUklTKQotICAjaW5jbHVkZSA8c3lzL2lzYV9k
ZWZzLmg+Ci0gICNpZmRlZiBfTElUVExFX0VORElBTgotICAgICNkZWZpbmUgUExBVEZPUk1fSVNf
TElUVExFX0VORElBTiB0cnVlCi0gICNlbHNlCi0gICAgI2RlZmluZSBQTEFURk9STV9JU19MSVRU
TEVfRU5ESUFOIGZhbHNlCi0gICNlbmRpZgotI2VsaWYgZGVmaW5lZChPU19PUEVOQlNEKSB8fCBk
ZWZpbmVkKE9TX05FVEJTRCkgfHxcCi0gICAgICBkZWZpbmVkKE9TX0ZSRUVCU0QpIHx8IGRlZmlu
ZWQoT1NfRFJBR09ORkxZKQotICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0gICNpbmNsdWRlIDxz
eXMvZW5kaWFuLmg+Ci0gICNkZWZpbmUgUExBVEZPUk1fSVNfTElUVExFX0VORElBTiAoX0JZVEVf
T1JERVIgPT0gX0xJVFRMRV9FTkRJQU4pCi0jZWxpZiBkZWZpbmVkKE9TX0hQVVgpCi0gICNkZWZp
bmUgUExBVEZPUk1fSVNfTElUVExFX0VORElBTiBmYWxzZQotI2VsaWYgZGVmaW5lZChPU19BTkRS
T0lEKQotICAvLyBEdWUgdG8gYSBidWcgaW4gdGhlIE5ESyB4ODYgPHN5cy9lbmRpYW4uaD4gZGVm
aW5pdGlvbiwKLSAgLy8gX0JZVEVfT1JERVIgbXVzdCBiZSB1c2VkIGluc3RlYWQgb2YgX19CWVRF
X09SREVSIG9uIEFuZHJvaWQuCi0gIC8vIFNlZSBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvYW5k
cm9pZC9pc3N1ZXMvZGV0YWlsP2lkPTM5ODI0Ci0gICNpbmNsdWRlIDxlbmRpYW4uaD4KLSAgI2Rl
ZmluZSBQTEFURk9STV9JU19MSVRUTEVfRU5ESUFOICAoX0JZVEVfT1JERVIgPT0gX0xJVFRMRV9F
TkRJQU4pCi0jZWxzZQotICAjaW5jbHVkZSA8ZW5kaWFuLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUg
PHB0aHJlYWQuaD4KLSNpZmRlZiBTTkFQUFkKLSNpbmNsdWRlIDxzbmFwcHkuaD4KLSNlbmRpZgot
I2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlICJwb3J0L2F0
b21pY19wb2ludGVyLmgiCi0KLSNpZm5kZWYgUExBVEZPUk1fSVNfTElUVExFX0VORElBTgotI2Rl
ZmluZSBQTEFURk9STV9JU19MSVRUTEVfRU5ESUFOIChfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVf
RU5ESUFOKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKE9TX01BQ09TWCkgfHwgZGVmaW5lZChPU19T
T0xBUklTKSB8fCBkZWZpbmVkKE9TX0ZSRUVCU0QpIHx8XAotICAgIGRlZmluZWQoT1NfTkVUQlNE
KSB8fCBkZWZpbmVkKE9TX09QRU5CU0QpIHx8IGRlZmluZWQoT1NfRFJBR09ORkxZKSB8fFwKLSAg
ICBkZWZpbmVkKE9TX0FORFJPSUQpIHx8IGRlZmluZWQoT1NfSFBVWCkKLS8vIFVzZSBmcmVhZC9m
d3JpdGUvZmZsdXNoIG9uIHBsYXRmb3JtcyB3aXRob3V0IF91bmxvY2tlZCB2YXJpYW50cwotI2Rl
ZmluZSBmcmVhZF91bmxvY2tlZCBmcmVhZAotI2RlZmluZSBmd3JpdGVfdW5sb2NrZWQgZndyaXRl
Ci0jZGVmaW5lIGZmbHVzaF91bmxvY2tlZCBmZmx1c2gKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChP
U19NQUNPU1gpIHx8IGRlZmluZWQoT1NfRlJFRUJTRCkgfHxcCi0gICAgZGVmaW5lZChPU19PUEVO
QlNEKSB8fCBkZWZpbmVkKE9TX0RSQUdPTkZMWSkKLS8vIFVzZSBmc3luYygpIG9uIHBsYXRmb3Jt
cyB3aXRob3V0IGZkYXRhc3luYygpCi0jZGVmaW5lIGZkYXRhc3luYyBmc3luYwotI2VuZGlmCi0K
LSNpZiBkZWZpbmVkKE9TX0FORFJPSUQpICYmIF9fQU5EUk9JRF9BUElfXyA8IDkKLS8vIGZkYXRh
c3luYygpIHdhcyBvbmx5IGludHJvZHVjZWQgaW4gQVBJIGxldmVsIDkgb24gQW5kcm9pZC4gVXNl
IGZzeW5jKCkKLS8vIHdoZW4gdGFyZ2V0dGluZyBvbGRlciBwbGF0Zm9ybXMuCi0jZGVmaW5lIGZk
YXRhc3luYyBmc3luYwotI2VuZGlmCi0KLW5hbWVzcGFjZSBsZXZlbGRiIHsKLW5hbWVzcGFjZSBw
b3J0IHsKLQotc3RhdGljIGNvbnN0IGJvb2wga0xpdHRsZUVuZGlhbiA9IFBMQVRGT1JNX0lTX0xJ
VFRMRV9FTkRJQU47Ci0jdW5kZWYgUExBVEZPUk1fSVNfTElUVExFX0VORElBTgotCi1jbGFzcyBD
b25kVmFyOwotCi1jbGFzcyBNdXRleCB7Ci0gcHVibGljOgotICBNdXRleCgpOwotICB+TXV0ZXgo
KTsKLQotICB2b2lkIExvY2soKTsKLSAgdm9pZCBVbmxvY2soKTsKLSAgdm9pZCBBc3NlcnRIZWxk
KCkgeyB9Ci0KLSBwcml2YXRlOgotICBmcmllbmQgY2xhc3MgQ29uZFZhcjsKLSAgcHRocmVhZF9t
dXRleF90IG11XzsKLQotICAvLyBObyBjb3B5aW5nCi0gIE11dGV4KGNvbnN0IE11dGV4Jik7Ci0g
IHZvaWQgb3BlcmF0b3I9KGNvbnN0IE11dGV4Jik7Ci19OwotCi1jbGFzcyBDb25kVmFyIHsKLSBw
dWJsaWM6Ci0gIGV4cGxpY2l0IENvbmRWYXIoTXV0ZXgqIG11KTsKLSAgfkNvbmRWYXIoKTsKLSAg
dm9pZCBXYWl0KCk7Ci0gIHZvaWQgU2lnbmFsKCk7Ci0gIHZvaWQgU2lnbmFsQWxsKCk7Ci0gcHJp
dmF0ZToKLSAgcHRocmVhZF9jb25kX3QgY3ZfOwotICBNdXRleCogbXVfOwotfTsKLQotdHlwZWRl
ZiBwdGhyZWFkX29uY2VfdCBPbmNlVHlwZTsKLSNkZWZpbmUgTEVWRUxEQl9PTkNFX0lOSVQgUFRI
UkVBRF9PTkNFX0lOSVQKLWV4dGVybiB2b2lkIEluaXRPbmNlKE9uY2VUeXBlKiBvbmNlLCB2b2lk
ICgqaW5pdGlhbGl6ZXIpKCkpOwotCi1pbmxpbmUgYm9vbCBTbmFwcHlfQ29tcHJlc3MoY29uc3Qg
Y2hhciogaW5wdXQsIHNpemVfdCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
OjpzdGQ6OnN0cmluZyogb3V0cHV0KSB7Ci0jaWZkZWYgU05BUFBZCi0gIG91dHB1dC0+cmVzaXpl
KHNuYXBweTo6TWF4Q29tcHJlc3NlZExlbmd0aChsZW5ndGgpKTsKLSAgc2l6ZV90IG91dGxlbjsK
LSAgc25hcHB5OjpSYXdDb21wcmVzcyhpbnB1dCwgbGVuZ3RoLCAmKCpvdXRwdXQpWzBdLCAmb3V0
bGVuKTsKLSAgb3V0cHV0LT5yZXNpemUob3V0bGVuKTsKLSAgcmV0dXJuIHRydWU7Ci0jZW5kaWYK
LQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLWlubGluZSBib29sIFNuYXBweV9HZXRVbmNvbXByZXNz
ZWRMZW5ndGgoY29uc3QgY2hhciogaW5wdXQsIHNpemVfdCBsZW5ndGgsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogcmVzdWx0KSB7Ci0jaWZkZWYgU05B
UFBZCi0gIHJldHVybiBzbmFwcHk6OkdldFVuY29tcHJlc3NlZExlbmd0aChpbnB1dCwgbGVuZ3Ro
LCByZXN1bHQpOwotI2Vsc2UKLSAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLWlubGluZSBi
b29sIFNuYXBweV9VbmNvbXByZXNzKGNvbnN0IGNoYXIqIGlucHV0LCBzaXplX3QgbGVuZ3RoLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogb3V0cHV0KSB7Ci0jaWZkZWYgU05B
UFBZCi0gIHJldHVybiBzbmFwcHk6OlJhd1VuY29tcHJlc3MoaW5wdXQsIGxlbmd0aCwgb3V0cHV0
KTsKLSNlbHNlCi0gIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi1pbmxpbmUgYm9vbCBHZXRI
ZWFwUHJvZmlsZSh2b2lkICgqZnVuYykodm9pZCosIGNvbnN0IGNoYXIqLCBpbnQpLCB2b2lkKiBh
cmcpIHsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBwb3J0Ci19IC8vIG5h
bWVzcGFjZSBsZXZlbGRiCi0KLSNlbmRpZiAgLy8gU1RPUkFHRV9MRVZFTERCX1BPUlRfUE9SVF9Q
T1NJWF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9wb3J0L3RocmVh
ZF9hbm5vdGF0aW9ucy5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9wb3J0L3RocmVhZF9h
bm5vdGF0aW9ucy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjliNmE3Li4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9ydC90aHJlYWRfYW5ub3RhdGlv
bnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAx
MiBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUg
Zm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KLQotI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfUE9S
VF9USFJFQURfQU5OT1RBVElPTlNfSAotCi0vLyBTb21lIGVudmlyb25tZW50cyBwcm92aWRlIGN1
c3RvbSBtYWNyb3MgdG8gYWlkIGluIHN0YXRpYyB0aHJlYWQtc2FmZXR5Ci0vLyBhbmFseXNpcy4g
IFByb3ZpZGUgZW1wdHkgZGVmaW5pdGlvbnMgb2Ygc3VjaCBtYWNyb3MgdW5sZXNzIHRoZXkgYXJl
IGFscmVhZHkKLS8vIGRlZmluZWQuCi0KLSNpZm5kZWYgRVhDTFVTSVZFX0xPQ0tTX1JFUVVJUkVE
Ci0jZGVmaW5lIEVYQ0xVU0lWRV9MT0NLU19SRVFVSVJFRCguLi4pCi0jZW5kaWYKLQotI2lmbmRl
ZiBTSEFSRURfTE9DS1NfUkVRVUlSRUQKLSNkZWZpbmUgU0hBUkVEX0xPQ0tTX1JFUVVJUkVEKC4u
LikKLSNlbmRpZgotCi0jaWZuZGVmIExPQ0tTX0VYQ0xVREVECi0jZGVmaW5lIExPQ0tTX0VYQ0xV
REVEKC4uLikKLSNlbmRpZgotCi0jaWZuZGVmIExPQ0tfUkVUVVJORUQKLSNkZWZpbmUgTE9DS19S
RVRVUk5FRCh4KQotI2VuZGlmCi0KLSNpZm5kZWYgTE9DS0FCTEUKLSNkZWZpbmUgTE9DS0FCTEUK
LSNlbmRpZgotCi0jaWZuZGVmIFNDT1BFRF9MT0NLQUJMRQotI2RlZmluZSBTQ09QRURfTE9DS0FC
TEUKLSNlbmRpZgotCi0jaWZuZGVmIEVYQ0xVU0lWRV9MT0NLX0ZVTkNUSU9OCi0jZGVmaW5lIEVY
Q0xVU0lWRV9MT0NLX0ZVTkNUSU9OKC4uLikKLSNlbmRpZgotCi0jaWZuZGVmIFNIQVJFRF9MT0NL
X0ZVTkNUSU9OCi0jZGVmaW5lIFNIQVJFRF9MT0NLX0ZVTkNUSU9OKC4uLikKLSNlbmRpZgotCi0j
aWZuZGVmIEVYQ0xVU0lWRV9UUllMT0NLX0ZVTkNUSU9OCi0jZGVmaW5lIEVYQ0xVU0lWRV9UUllM
T0NLX0ZVTkNUSU9OKC4uLikKLSNlbmRpZgotCi0jaWZuZGVmIFNIQVJFRF9UUllMT0NLX0ZVTkNU
SU9OCi0jZGVmaW5lIFNIQVJFRF9UUllMT0NLX0ZVTkNUSU9OKC4uLikKLSNlbmRpZgotCi0jaWZu
ZGVmIFVOTE9DS19GVU5DVElPTgotI2RlZmluZSBVTkxPQ0tfRlVOQ1RJT04oLi4uKQotI2VuZGlm
Ci0KLSNpZm5kZWYgTk9fVEhSRUFEX1NBRkVUWV9BTkFMWVNJUwotI2RlZmluZSBOT19USFJFQURf
U0FGRVRZX0FOQUxZU0lTCi0jZW5kaWYKLQotI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfUE9S
VF9USFJFQURfQU5OT1RBVElPTlNfSApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi9wb3J0L3dpbi9zdGRpbnQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9ydC93
aW4vc3RkaW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5ZWRkMGQuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9wb3J0L3dpbi9zdGRpbnQuaAorKysg
L2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2
ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVz
IG9mIGNvbnRyaWJ1dG9ycy4KLQotLy8gTVNWQyBkaWRuJ3Qgc2hpcCB3aXRoIHRoaXMgZmlsZSB1
bnRpbCB0aGUgMjAxMCB2ZXJzaW9uLgotCi0jaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9QT1JUX1dJ
Tl9TVERJTlRfSF8KLSNkZWZpbmUgU1RPUkFHRV9MRVZFTERCX1BPUlRfV0lOX1NURElOVF9IXwot
Ci0jaWYgIWRlZmluZWQoX01TQ19WRVIpCi0jZXJyb3IgVGhpcyBmaWxlIHNob3VsZCBvbmx5IGJl
IGluY2x1ZGVkIHdoZW4gY29tcGlsaW5nIHdpdGggTVNWQy4KLSNlbmRpZgotCi0vLyBEZWZpbmUg
Qzk5IGVxdWl2YWxlbnQgdHlwZXMuCi10eXBlZGVmIHNpZ25lZCBjaGFyICAgICAgICAgICBpbnQ4
X3Q7Ci10eXBlZGVmIHNpZ25lZCBzaG9ydCAgICAgICAgICBpbnQxNl90OwotdHlwZWRlZiBzaWdu
ZWQgaW50ICAgICAgICAgICAgaW50MzJfdDsKLXR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyAgICAg
IGludDY0X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAgICAgICB1aW50OF90OwotdHlwZWRl
ZiB1bnNpZ25lZCBzaG9ydCAgICAgICAgdWludDE2X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGludCAg
ICAgICAgICB1aW50MzJfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nICAgIHVpbnQ2NF90
OwotCi0jZW5kaWYgIC8vIFNUT1JBR0VfTEVWRUxEQl9QT1JUX1dJTl9TVERJTlRfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvYmxvY2suY2MgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2Jsb2NrLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBhYjgzYzExLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
dGFibGUvYmxvY2suY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyNjcgKzAsMCBAQAotLy8gQ29weXJp
Z2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFV
VEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgotLy8KLS8vIERlY29kZXMgdGhl
IGJsb2NrcyBnZW5lcmF0ZWQgYnkgYmxvY2tfYnVpbGRlci5jYy4KLQotI2luY2x1ZGUgInRhYmxl
L2Jsb2NrLmgiCi0KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2lu
Y2x1ZGUgImxldmVsZGIvY29tcGFyYXRvci5oIgotI2luY2x1ZGUgInRhYmxlL2Zvcm1hdC5oIgot
I2luY2x1ZGUgInV0aWwvY29kaW5nLmgiCi0jaW5jbHVkZSAidXRpbC9sb2dnaW5nLmgiCi0KLW5h
bWVzcGFjZSBsZXZlbGRiIHsKLQotaW5saW5lIHVpbnQzMl90IEJsb2NrOjpOdW1SZXN0YXJ0cygp
IGNvbnN0IHsKLSAgYXNzZXJ0KHNpemVfID49IDIqc2l6ZW9mKHVpbnQzMl90KSk7Ci0gIHJldHVy
biBEZWNvZGVGaXhlZDMyKGRhdGFfICsgc2l6ZV8gLSBzaXplb2YodWludDMyX3QpKTsKLX0KLQot
QmxvY2s6OkJsb2NrKGNvbnN0IEJsb2NrQ29udGVudHMmIGNvbnRlbnRzKQotICAgIDogZGF0YV8o
Y29udGVudHMuZGF0YS5kYXRhKCkpLAotICAgICAgc2l6ZV8oY29udGVudHMuZGF0YS5zaXplKCkp
LAotICAgICAgb3duZWRfKGNvbnRlbnRzLmhlYXBfYWxsb2NhdGVkKSB7Ci0gIGlmIChzaXplXyA8
IHNpemVvZih1aW50MzJfdCkpIHsKLSAgICBzaXplXyA9IDA7ICAvLyBFcnJvciBtYXJrZXIKLSAg
fSBlbHNlIHsKLSAgICByZXN0YXJ0X29mZnNldF8gPSBzaXplXyAtICgxICsgTnVtUmVzdGFydHMo
KSkgKiBzaXplb2YodWludDMyX3QpOwotICAgIGlmIChyZXN0YXJ0X29mZnNldF8gPiBzaXplXyAt
IHNpemVvZih1aW50MzJfdCkpIHsKLSAgICAgIC8vIFRoZSBzaXplIGlzIHRvbyBzbWFsbCBmb3Ig
TnVtUmVzdGFydHMoKSBhbmQgdGhlcmVmb3JlCi0gICAgICAvLyByZXN0YXJ0X29mZnNldF8gd3Jh
cHBlZCBhcm91bmQuCi0gICAgICBzaXplXyA9IDA7Ci0gICAgfQotICB9Ci19Ci0KLUJsb2NrOjp+
QmxvY2soKSB7Ci0gIGlmIChvd25lZF8pIHsKLSAgICBkZWxldGVbXSBkYXRhXzsKLSAgfQotfQot
Ci0vLyBIZWxwZXIgcm91dGluZTogZGVjb2RlIHRoZSBuZXh0IGJsb2NrIGVudHJ5IHN0YXJ0aW5n
IGF0ICJwIiwKLS8vIHN0b3JpbmcgdGhlIG51bWJlciBvZiBzaGFyZWQga2V5IGJ5dGVzLCBub25f
c2hhcmVkIGtleSBieXRlcywKLS8vIGFuZCB0aGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSBpbiAiKnNo
YXJlZCIsICIqbm9uX3NoYXJlZCIsIGFuZAotLy8gIip2YWx1ZV9sZW5ndGgiLCByZXNwZWN0aXZl
bHkuICBXaWxsIG5vdCBkZXJlZmVuY2UgcGFzdCAibGltaXQiLgotLy8KLS8vIElmIGFueSBlcnJv
cnMgYXJlIGRldGVjdGVkLCByZXR1cm5zIE5VTEwuICBPdGhlcndpc2UsIHJldHVybnMgYQotLy8g
cG9pbnRlciB0byB0aGUga2V5IGRlbHRhIChqdXN0IHBhc3QgdGhlIHRocmVlIGRlY29kZWQgdmFs
dWVzKS4KLXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogRGVjb2RlRW50cnkoY29uc3QgY2hhciog
cCwgY29uc3QgY2hhciogbGltaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVpbnQzMl90KiBzaGFyZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVpbnQzMl90KiBub25fc2hhcmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1aW50MzJfdCogdmFsdWVfbGVuZ3RoKSB7Ci0gIGlmIChsaW1pdCAtIHAgPCAzKSBy
ZXR1cm4gTlVMTDsKLSAgKnNoYXJlZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KHApWzBdOwotICAqbm9uX3NoYXJlZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KHApWzFdOwotICAqdmFsdWVfbGVuZ3RoID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4ocClbMl07Ci0gIGlmICgoKnNoYXJlZCB8ICpub25fc2hhcmVk
IHwgKnZhbHVlX2xlbmd0aCkgPCAxMjgpIHsKLSAgICAvLyBGYXN0IHBhdGg6IGFsbCB0aHJlZSB2
YWx1ZXMgYXJlIGVuY29kZWQgaW4gb25lIGJ5dGUgZWFjaAotICAgIHAgKz0gMzsKLSAgfSBlbHNl
IHsKLSAgICBpZiAoKHAgPSBHZXRWYXJpbnQzMlB0cihwLCBsaW1pdCwgc2hhcmVkKSkgPT0gTlVM
TCkgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKChwID0gR2V0VmFyaW50MzJQdHIocCwgbGltaXQsIG5v
bl9zaGFyZWQpKSA9PSBOVUxMKSByZXR1cm4gTlVMTDsKLSAgICBpZiAoKHAgPSBHZXRWYXJpbnQz
MlB0cihwLCBsaW1pdCwgdmFsdWVfbGVuZ3RoKSkgPT0gTlVMTCkgcmV0dXJuIE5VTEw7Ci0gIH0K
LQotICBpZiAoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGxpbWl0IC0gcCkgPCAoKm5vbl9zaGFyZWQg
KyAqdmFsdWVfbGVuZ3RoKSkgewotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIHJldHVybiBwOwot
fQotCi1jbGFzcyBCbG9jazo6SXRlciA6IHB1YmxpYyBJdGVyYXRvciB7Ci0gcHJpdmF0ZToKLSAg
Y29uc3QgQ29tcGFyYXRvciogY29uc3QgY29tcGFyYXRvcl87Ci0gIGNvbnN0IGNoYXIqIGNvbnN0
IGRhdGFfOyAgICAgIC8vIHVuZGVybHlpbmcgYmxvY2sgY29udGVudHMKLSAgdWludDMyX3QgY29u
c3QgcmVzdGFydHNfOyAgICAgLy8gT2Zmc2V0IG9mIHJlc3RhcnQgYXJyYXkgKGxpc3Qgb2YgZml4
ZWQzMikKLSAgdWludDMyX3QgY29uc3QgbnVtX3Jlc3RhcnRzXzsgLy8gTnVtYmVyIG9mIHVpbnQz
Ml90IGVudHJpZXMgaW4gcmVzdGFydCBhcnJheQotCi0gIC8vIGN1cnJlbnRfIGlzIG9mZnNldCBp
biBkYXRhXyBvZiBjdXJyZW50IGVudHJ5LiAgPj0gcmVzdGFydHNfIGlmICFWYWxpZAotICB1aW50
MzJfdCBjdXJyZW50XzsKLSAgdWludDMyX3QgcmVzdGFydF9pbmRleF87ICAvLyBJbmRleCBvZiBy
ZXN0YXJ0IGJsb2NrIGluIHdoaWNoIGN1cnJlbnRfIGZhbGxzCi0gIHN0ZDo6c3RyaW5nIGtleV87
Ci0gIFNsaWNlIHZhbHVlXzsKLSAgU3RhdHVzIHN0YXR1c187Ci0KLSAgaW5saW5lIGludCBDb21w
YXJlKGNvbnN0IFNsaWNlJiBhLCBjb25zdCBTbGljZSYgYikgY29uc3QgewotICAgIHJldHVybiBj
b21wYXJhdG9yXy0+Q29tcGFyZShhLCBiKTsKLSAgfQotCi0gIC8vIFJldHVybiB0aGUgb2Zmc2V0
IGluIGRhdGFfIGp1c3QgcGFzdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGVudHJ5LgotICBpbmxp
bmUgdWludDMyX3QgTmV4dEVudHJ5T2Zmc2V0KCkgY29uc3QgewotICAgIHJldHVybiAodmFsdWVf
LmRhdGEoKSArIHZhbHVlXy5zaXplKCkpIC0gZGF0YV87Ci0gIH0KLQotICB1aW50MzJfdCBHZXRS
ZXN0YXJ0UG9pbnQodWludDMyX3QgaW5kZXgpIHsKLSAgICBhc3NlcnQoaW5kZXggPCBudW1fcmVz
dGFydHNfKTsKLSAgICByZXR1cm4gRGVjb2RlRml4ZWQzMihkYXRhXyArIHJlc3RhcnRzXyArIGlu
ZGV4ICogc2l6ZW9mKHVpbnQzMl90KSk7Ci0gIH0KLQotICB2b2lkIFNlZWtUb1Jlc3RhcnRQb2lu
dCh1aW50MzJfdCBpbmRleCkgewotICAgIGtleV8uY2xlYXIoKTsKLSAgICByZXN0YXJ0X2luZGV4
XyA9IGluZGV4OwotICAgIC8vIGN1cnJlbnRfIHdpbGwgYmUgZml4ZWQgYnkgUGFyc2VOZXh0S2V5
KCk7Ci0KLSAgICAvLyBQYXJzZU5leHRLZXkoKSBzdGFydHMgYXQgdGhlIGVuZCBvZiB2YWx1ZV8s
IHNvIHNldCB2YWx1ZV8gYWNjb3JkaW5nbHkKLSAgICB1aW50MzJfdCBvZmZzZXQgPSBHZXRSZXN0
YXJ0UG9pbnQoaW5kZXgpOwotICAgIHZhbHVlXyA9IFNsaWNlKGRhdGFfICsgb2Zmc2V0LCAwKTsK
LSAgfQotCi0gcHVibGljOgotICBJdGVyKGNvbnN0IENvbXBhcmF0b3IqIGNvbXBhcmF0b3IsCi0g
ICAgICAgY29uc3QgY2hhciogZGF0YSwKLSAgICAgICB1aW50MzJfdCByZXN0YXJ0cywKLSAgICAg
ICB1aW50MzJfdCBudW1fcmVzdGFydHMpCi0gICAgICA6IGNvbXBhcmF0b3JfKGNvbXBhcmF0b3Ip
LAotICAgICAgICBkYXRhXyhkYXRhKSwKLSAgICAgICAgcmVzdGFydHNfKHJlc3RhcnRzKSwKLSAg
ICAgICAgbnVtX3Jlc3RhcnRzXyhudW1fcmVzdGFydHMpLAotICAgICAgICBjdXJyZW50XyhyZXN0
YXJ0c18pLAotICAgICAgICByZXN0YXJ0X2luZGV4XyhudW1fcmVzdGFydHNfKSB7Ci0gICAgYXNz
ZXJ0KG51bV9yZXN0YXJ0c18gPiAwKTsKLSAgfQotCi0gIHZpcnR1YWwgYm9vbCBWYWxpZCgpIGNv
bnN0IHsgcmV0dXJuIGN1cnJlbnRfIDwgcmVzdGFydHNfOyB9Ci0gIHZpcnR1YWwgU3RhdHVzIHN0
YXR1cygpIGNvbnN0IHsgcmV0dXJuIHN0YXR1c187IH0KLSAgdmlydHVhbCBTbGljZSBrZXkoKSBj
b25zdCB7Ci0gICAgYXNzZXJ0KFZhbGlkKCkpOwotICAgIHJldHVybiBrZXlfOwotICB9Ci0gIHZp
cnR1YWwgU2xpY2UgdmFsdWUoKSBjb25zdCB7Ci0gICAgYXNzZXJ0KFZhbGlkKCkpOwotICAgIHJl
dHVybiB2YWx1ZV87Ci0gIH0KLQotICB2aXJ0dWFsIHZvaWQgTmV4dCgpIHsKLSAgICBhc3NlcnQo
VmFsaWQoKSk7Ci0gICAgUGFyc2VOZXh0S2V5KCk7Ci0gIH0KLQotICB2aXJ0dWFsIHZvaWQgUHJl
digpIHsKLSAgICBhc3NlcnQoVmFsaWQoKSk7Ci0KLSAgICAvLyBTY2FuIGJhY2t3YXJkcyB0byBh
IHJlc3RhcnQgcG9pbnQgYmVmb3JlIGN1cnJlbnRfCi0gICAgY29uc3QgdWludDMyX3Qgb3JpZ2lu
YWwgPSBjdXJyZW50XzsKLSAgICB3aGlsZSAoR2V0UmVzdGFydFBvaW50KHJlc3RhcnRfaW5kZXhf
KSA+PSBvcmlnaW5hbCkgewotICAgICAgaWYgKHJlc3RhcnRfaW5kZXhfID09IDApIHsKLSAgICAg
ICAgLy8gTm8gbW9yZSBlbnRyaWVzCi0gICAgICAgIGN1cnJlbnRfID0gcmVzdGFydHNfOwotICAg
ICAgICByZXN0YXJ0X2luZGV4XyA9IG51bV9yZXN0YXJ0c187Ci0gICAgICAgIHJldHVybjsKLSAg
ICAgIH0KLSAgICAgIHJlc3RhcnRfaW5kZXhfLS07Ci0gICAgfQotCi0gICAgU2Vla1RvUmVzdGFy
dFBvaW50KHJlc3RhcnRfaW5kZXhfKTsKLSAgICBkbyB7Ci0gICAgICAvLyBMb29wIHVudGlsIGVu
ZCBvZiBjdXJyZW50IGVudHJ5IGhpdHMgdGhlIHN0YXJ0IG9mIG9yaWdpbmFsIGVudHJ5Ci0gICAg
fSB3aGlsZSAoUGFyc2VOZXh0S2V5KCkgJiYgTmV4dEVudHJ5T2Zmc2V0KCkgPCBvcmlnaW5hbCk7
Ci0gIH0KLQotICB2aXJ0dWFsIHZvaWQgU2Vlayhjb25zdCBTbGljZSYgdGFyZ2V0KSB7Ci0gICAg
Ly8gQmluYXJ5IHNlYXJjaCBpbiByZXN0YXJ0IGFycmF5IHRvIGZpbmQgdGhlIGxhc3QgcmVzdGFy
dCBwb2ludAotICAgIC8vIHdpdGggYSBrZXkgPCB0YXJnZXQKLSAgICB1aW50MzJfdCBsZWZ0ID0g
MDsKLSAgICB1aW50MzJfdCByaWdodCA9IG51bV9yZXN0YXJ0c18gLSAxOwotICAgIHdoaWxlIChs
ZWZ0IDwgcmlnaHQpIHsKLSAgICAgIHVpbnQzMl90IG1pZCA9IChsZWZ0ICsgcmlnaHQgKyAxKSAv
IDI7Ci0gICAgICB1aW50MzJfdCByZWdpb25fb2Zmc2V0ID0gR2V0UmVzdGFydFBvaW50KG1pZCk7
Ci0gICAgICB1aW50MzJfdCBzaGFyZWQsIG5vbl9zaGFyZWQsIHZhbHVlX2xlbmd0aDsKLSAgICAg
IGNvbnN0IGNoYXIqIGtleV9wdHIgPSBEZWNvZGVFbnRyeShkYXRhXyArIHJlZ2lvbl9vZmZzZXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV8gKyByZXN0YXJ0
c18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNoYXJlZCwgJm5v
bl9zaGFyZWQsICZ2YWx1ZV9sZW5ndGgpOwotICAgICAgaWYgKGtleV9wdHIgPT0gTlVMTCB8fCAo
c2hhcmVkICE9IDApKSB7Ci0gICAgICAgIENvcnJ1cHRpb25FcnJvcigpOwotICAgICAgICByZXR1
cm47Ci0gICAgICB9Ci0gICAgICBTbGljZSBtaWRfa2V5KGtleV9wdHIsIG5vbl9zaGFyZWQpOwot
ICAgICAgaWYgKENvbXBhcmUobWlkX2tleSwgdGFyZ2V0KSA8IDApIHsKLSAgICAgICAgLy8gS2V5
IGF0ICJtaWQiIGlzIHNtYWxsZXIgdGhhbiAidGFyZ2V0Ii4gIFRoZXJlZm9yZSBhbGwKLSAgICAg
ICAgLy8gYmxvY2tzIGJlZm9yZSAibWlkIiBhcmUgdW5pbnRlcmVzdGluZy4KLSAgICAgICAgbGVm
dCA9IG1pZDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEtleSBhdCAibWlkIiBpcyA+PSAi
dGFyZ2V0Ii4gIFRoZXJlZm9yZSBhbGwgYmxvY2tzIGF0IG9yCi0gICAgICAgIC8vIGFmdGVyICJt
aWQiIGFyZSB1bmludGVyZXN0aW5nLgotICAgICAgICByaWdodCA9IG1pZCAtIDE7Ci0gICAgICB9
Ci0gICAgfQotCi0gICAgLy8gTGluZWFyIHNlYXJjaCAod2l0aGluIHJlc3RhcnQgYmxvY2spIGZv
ciBmaXJzdCBrZXkgPj0gdGFyZ2V0Ci0gICAgU2Vla1RvUmVzdGFydFBvaW50KGxlZnQpOwotICAg
IHdoaWxlICh0cnVlKSB7Ci0gICAgICBpZiAoIVBhcnNlTmV4dEtleSgpKSB7Ci0gICAgICAgIHJl
dHVybjsKLSAgICAgIH0KLSAgICAgIGlmIChDb21wYXJlKGtleV8sIHRhcmdldCkgPj0gMCkgewot
ICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgdmlydHVhbCB2b2lkIFNl
ZWtUb0ZpcnN0KCkgewotICAgIFNlZWtUb1Jlc3RhcnRQb2ludCgwKTsKLSAgICBQYXJzZU5leHRL
ZXkoKTsKLSAgfQotCi0gIHZpcnR1YWwgdm9pZCBTZWVrVG9MYXN0KCkgewotICAgIFNlZWtUb1Jl
c3RhcnRQb2ludChudW1fcmVzdGFydHNfIC0gMSk7Ci0gICAgd2hpbGUgKFBhcnNlTmV4dEtleSgp
ICYmIE5leHRFbnRyeU9mZnNldCgpIDwgcmVzdGFydHNfKSB7Ci0gICAgICAvLyBLZWVwIHNraXBw
aW5nCi0gICAgfQotICB9Ci0KLSBwcml2YXRlOgotICB2b2lkIENvcnJ1cHRpb25FcnJvcigpIHsK
LSAgICBjdXJyZW50XyA9IHJlc3RhcnRzXzsKLSAgICByZXN0YXJ0X2luZGV4XyA9IG51bV9yZXN0
YXJ0c187Ci0gICAgc3RhdHVzXyA9IFN0YXR1czo6Q29ycnVwdGlvbigiYmFkIGVudHJ5IGluIGJs
b2NrIik7Ci0gICAga2V5Xy5jbGVhcigpOwotICAgIHZhbHVlXy5jbGVhcigpOwotICB9Ci0KLSAg
Ym9vbCBQYXJzZU5leHRLZXkoKSB7Ci0gICAgY3VycmVudF8gPSBOZXh0RW50cnlPZmZzZXQoKTsK
LSAgICBjb25zdCBjaGFyKiBwID0gZGF0YV8gKyBjdXJyZW50XzsKLSAgICBjb25zdCBjaGFyKiBs
aW1pdCA9IGRhdGFfICsgcmVzdGFydHNfOyAgLy8gUmVzdGFydHMgY29tZSByaWdodCBhZnRlciBk
YXRhCi0gICAgaWYgKHAgPj0gbGltaXQpIHsKLSAgICAgIC8vIE5vIG1vcmUgZW50cmllcyB0byBy
ZXR1cm4uICBNYXJrIGFzIGludmFsaWQuCi0gICAgICBjdXJyZW50XyA9IHJlc3RhcnRzXzsKLSAg
ICAgIHJlc3RhcnRfaW5kZXhfID0gbnVtX3Jlc3RhcnRzXzsKLSAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICAvLyBEZWNvZGUgbmV4dCBlbnRyeQotICAgIHVpbnQzMl90IHNoYXJlZCwg
bm9uX3NoYXJlZCwgdmFsdWVfbGVuZ3RoOwotICAgIHAgPSBEZWNvZGVFbnRyeShwLCBsaW1pdCwg
JnNoYXJlZCwgJm5vbl9zaGFyZWQsICZ2YWx1ZV9sZW5ndGgpOwotICAgIGlmIChwID09IE5VTEwg
fHwga2V5Xy5zaXplKCkgPCBzaGFyZWQpIHsKLSAgICAgIENvcnJ1cHRpb25FcnJvcigpOwotICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSB7Ci0gICAgICBrZXlfLnJlc2l6ZShzaGFyZWQp
OwotICAgICAga2V5Xy5hcHBlbmQocCwgbm9uX3NoYXJlZCk7Ci0gICAgICB2YWx1ZV8gPSBTbGlj
ZShwICsgbm9uX3NoYXJlZCwgdmFsdWVfbGVuZ3RoKTsKLSAgICAgIHdoaWxlIChyZXN0YXJ0X2lu
ZGV4XyArIDEgPCBudW1fcmVzdGFydHNfICYmCi0gICAgICAgICAgICAgR2V0UmVzdGFydFBvaW50
KHJlc3RhcnRfaW5kZXhfICsgMSkgPCBjdXJyZW50XykgewotICAgICAgICArK3Jlc3RhcnRfaW5k
ZXhfOwotICAgICAgfQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci19OwotCi1JdGVy
YXRvciogQmxvY2s6Ok5ld0l0ZXJhdG9yKGNvbnN0IENvbXBhcmF0b3IqIGNtcCkgewotICBpZiAo
c2l6ZV8gPCAyKnNpemVvZih1aW50MzJfdCkpIHsKLSAgICByZXR1cm4gTmV3RXJyb3JJdGVyYXRv
cihTdGF0dXM6OkNvcnJ1cHRpb24oImJhZCBibG9jayBjb250ZW50cyIpKTsKLSAgfQotICBjb25z
dCB1aW50MzJfdCBudW1fcmVzdGFydHMgPSBOdW1SZXN0YXJ0cygpOwotICBpZiAobnVtX3Jlc3Rh
cnRzID09IDApIHsKLSAgICByZXR1cm4gTmV3RW1wdHlJdGVyYXRvcigpOwotICB9IGVsc2Ugewot
ICAgIHJldHVybiBuZXcgSXRlcihjbXAsIGRhdGFfLCByZXN0YXJ0X29mZnNldF8sIG51bV9yZXN0
YXJ0cyk7Ci0gIH0KLX0KLQotfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvYmxvY2suaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvdGFibGUvYmxvY2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ5
M2ViOS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2Jsb2Nr
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEg
VGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZv
ciBuYW1lcyBvZiBjb250cmlidXRvcnMuCi0KLSNpZm5kZWYgU1RPUkFHRV9MRVZFTERCX1RBQkxF
X0JMT0NLX0hfCi0jZGVmaW5lIFNUT1JBR0VfTEVWRUxEQl9UQUJMRV9CTE9DS19IXwotCi0jaW5j
bHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSAibGV2ZWxkYi9p
dGVyYXRvci5oIgotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7Ci0KLXN0cnVjdCBCbG9ja0NvbnRlbnRz
OwotY2xhc3MgQ29tcGFyYXRvcjsKLQotY2xhc3MgQmxvY2sgewotIHB1YmxpYzoKLSAgLy8gSW5p
dGlhbGl6ZSB0aGUgYmxvY2sgd2l0aCB0aGUgc3BlY2lmaWVkIGNvbnRlbnRzLgotICBleHBsaWNp
dCBCbG9jayhjb25zdCBCbG9ja0NvbnRlbnRzJiBjb250ZW50cyk7Ci0KLSAgfkJsb2NrKCk7Ci0K
LSAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBzaXplXzsgfQotICBJdGVyYXRvciogTmV3
SXRlcmF0b3IoY29uc3QgQ29tcGFyYXRvciogY29tcGFyYXRvcik7Ci0KLSBwcml2YXRlOgotICB1
aW50MzJfdCBOdW1SZXN0YXJ0cygpIGNvbnN0OwotCi0gIGNvbnN0IGNoYXIqIGRhdGFfOwotICBz
aXplX3Qgc2l6ZV87Ci0gIHVpbnQzMl90IHJlc3RhcnRfb2Zmc2V0XzsgICAgIC8vIE9mZnNldCBp
biBkYXRhXyBvZiByZXN0YXJ0IGFycmF5Ci0gIGJvb2wgb3duZWRfOyAgICAgICAgICAgICAgICAg
IC8vIEJsb2NrIG93bnMgZGF0YV9bXQotCi0gIC8vIE5vIGNvcHlpbmcgYWxsb3dlZAotICBCbG9j
ayhjb25zdCBCbG9jayYpOwotICB2b2lkIG9wZXJhdG9yPShjb25zdCBCbG9jayYpOwotCi0gIGNs
YXNzIEl0ZXI7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgotCi0jZW5kaWYgIC8vIFNU
T1JBR0VfTEVWRUxEQl9UQUJMRV9CTE9DS19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi90YWJsZS9ibG9ja19idWlsZGVyLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi90YWJsZS9ibG9ja19idWlsZGVyLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBkYjY2MGNkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUv
YmxvY2tfYnVpbGRlci5jYworKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vLyBDb3B5
cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUg
QVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCi0vLwotLy8gQmxvY2tCdWls
ZGVyIGdlbmVyYXRlcyBibG9ja3Mgd2hlcmUga2V5cyBhcmUgcHJlZml4LWNvbXByZXNzZWQ6Ci0v
LwotLy8gV2hlbiB3ZSBzdG9yZSBhIGtleSwgd2UgZHJvcCB0aGUgcHJlZml4IHNoYXJlZCB3aXRo
IHRoZSBwcmV2aW91cwotLy8gc3RyaW5nLiAgVGhpcyBoZWxwcyByZWR1Y2UgdGhlIHNwYWNlIHJl
cXVpcmVtZW50IHNpZ25pZmljYW50bHkuCi0vLyBGdXJ0aGVybW9yZSwgb25jZSBldmVyeSBLIGtl
eXMsIHdlIGRvIG5vdCBhcHBseSB0aGUgcHJlZml4Ci0vLyBjb21wcmVzc2lvbiBhbmQgc3RvcmUg
dGhlIGVudGlyZSBrZXkuICBXZSBjYWxsIHRoaXMgYSAicmVzdGFydAotLy8gcG9pbnQiLiAgVGhl
IHRhaWwgZW5kIG9mIHRoZSBibG9jayBzdG9yZXMgdGhlIG9mZnNldHMgb2YgYWxsIG9mIHRoZQot
Ly8gcmVzdGFydCBwb2ludHMsIGFuZCBjYW4gYmUgdXNlZCB0byBkbyBhIGJpbmFyeSBzZWFyY2gg
d2hlbiBsb29raW5nCi0vLyBmb3IgYSBwYXJ0aWN1bGFyIGtleS4gIFZhbHVlcyBhcmUgc3RvcmVk
IGFzLWlzICh3aXRob3V0IGNvbXByZXNzaW9uKQotLy8gaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRo
ZSBjb3JyZXNwb25kaW5nIGtleS4KLS8vCi0vLyBBbiBlbnRyeSBmb3IgYSBwYXJ0aWN1bGFyIGtl
eS12YWx1ZSBwYWlyIGhhcyB0aGUgZm9ybToKLS8vICAgICBzaGFyZWRfYnl0ZXM6IHZhcmludDMy
Ci0vLyAgICAgdW5zaGFyZWRfYnl0ZXM6IHZhcmludDMyCi0vLyAgICAgdmFsdWVfbGVuZ3RoOiB2
YXJpbnQzMgotLy8gICAgIGtleV9kZWx0YTogY2hhclt1bnNoYXJlZF9ieXRlc10KLS8vICAgICB2
YWx1ZTogY2hhclt2YWx1ZV9sZW5ndGhdCi0vLyBzaGFyZWRfYnl0ZXMgPT0gMCBmb3IgcmVzdGFy
dCBwb2ludHMuCi0vLwotLy8gVGhlIHRyYWlsZXIgb2YgdGhlIGJsb2NrIGhhcyB0aGUgZm9ybToK
LS8vICAgICByZXN0YXJ0czogdWludDMyW251bV9yZXN0YXJ0c10KLS8vICAgICBudW1fcmVzdGFy
dHM6IHVpbnQzMgotLy8gcmVzdGFydHNbaV0gY29udGFpbnMgdGhlIG9mZnNldCB3aXRoaW4gdGhl
IGJsb2NrIG9mIHRoZSBpdGggcmVzdGFydCBwb2ludC4KLQotI2luY2x1ZGUgInRhYmxlL2Jsb2Nr
X2J1aWxkZXIuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxhc3NlcnQuaD4K
LSNpbmNsdWRlICJsZXZlbGRiL2NvbXBhcmF0b3IuaCIKLSNpbmNsdWRlICJsZXZlbGRiL3RhYmxl
X2J1aWxkZXIuaCIKLSNpbmNsdWRlICJ1dGlsL2NvZGluZy5oIgotCi1uYW1lc3BhY2UgbGV2ZWxk
YiB7Ci0KLUJsb2NrQnVpbGRlcjo6QmxvY2tCdWlsZGVyKGNvbnN0IE9wdGlvbnMqIG9wdGlvbnMp
Ci0gICAgOiBvcHRpb25zXyhvcHRpb25zKSwKLSAgICAgIHJlc3RhcnRzXygpLAotICAgICAgY291
bnRlcl8oMCksCi0gICAgICBmaW5pc2hlZF8oZmFsc2UpIHsKLSAgYXNzZXJ0KG9wdGlvbnMtPmJs
b2NrX3Jlc3RhcnRfaW50ZXJ2YWwgPj0gMSk7Ci0gIHJlc3RhcnRzXy5wdXNoX2JhY2soMCk7ICAg
ICAgIC8vIEZpcnN0IHJlc3RhcnQgcG9pbnQgaXMgYXQgb2Zmc2V0IDAKLX0KLQotdm9pZCBCbG9j
a0J1aWxkZXI6OlJlc2V0KCkgewotICBidWZmZXJfLmNsZWFyKCk7Ci0gIHJlc3RhcnRzXy5jbGVh
cigpOwotICByZXN0YXJ0c18ucHVzaF9iYWNrKDApOyAgICAgICAvLyBGaXJzdCByZXN0YXJ0IHBv
aW50IGlzIGF0IG9mZnNldCAwCi0gIGNvdW50ZXJfID0gMDsKLSAgZmluaXNoZWRfID0gZmFsc2U7
Ci0gIGxhc3Rfa2V5Xy5jbGVhcigpOwotfQotCi1zaXplX3QgQmxvY2tCdWlsZGVyOjpDdXJyZW50
U2l6ZUVzdGltYXRlKCkgY29uc3QgewotICByZXR1cm4gKGJ1ZmZlcl8uc2l6ZSgpICsgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBSYXcgZGF0YSBidWZmZXIKLSAgICAgICAgICByZXN0YXJ0c18u
c2l6ZSgpICogc2l6ZW9mKHVpbnQzMl90KSArICAgLy8gUmVzdGFydCBhcnJheQotICAgICAgICAg
IHNpemVvZih1aW50MzJfdCkpOyAgICAgICAgICAgICAgICAgICAgICAvLyBSZXN0YXJ0IGFycmF5
IGxlbmd0aAotfQotCi1TbGljZSBCbG9ja0J1aWxkZXI6OkZpbmlzaCgpIHsKLSAgLy8gQXBwZW5k
IHJlc3RhcnQgYXJyYXkKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN0YXJ0c18uc2l6ZSgp
OyBpKyspIHsKLSAgICBQdXRGaXhlZDMyKCZidWZmZXJfLCByZXN0YXJ0c19baV0pOwotICB9Ci0g
IFB1dEZpeGVkMzIoJmJ1ZmZlcl8sIHJlc3RhcnRzXy5zaXplKCkpOwotICBmaW5pc2hlZF8gPSB0
cnVlOwotICByZXR1cm4gU2xpY2UoYnVmZmVyXyk7Ci19Ci0KLXZvaWQgQmxvY2tCdWlsZGVyOjpB
ZGQoY29uc3QgU2xpY2UmIGtleSwgY29uc3QgU2xpY2UmIHZhbHVlKSB7Ci0gIFNsaWNlIGxhc3Rf
a2V5X3BpZWNlKGxhc3Rfa2V5Xyk7Ci0gIGFzc2VydCghZmluaXNoZWRfKTsKLSAgYXNzZXJ0KGNv
dW50ZXJfIDw9IG9wdGlvbnNfLT5ibG9ja19yZXN0YXJ0X2ludGVydmFsKTsKLSAgYXNzZXJ0KGJ1
ZmZlcl8uZW1wdHkoKSAvLyBObyB2YWx1ZXMgeWV0PwotICAgICAgICAgfHwgb3B0aW9uc18tPmNv
bXBhcmF0b3ItPkNvbXBhcmUoa2V5LCBsYXN0X2tleV9waWVjZSkgPiAwKTsKLSAgc2l6ZV90IHNo
YXJlZCA9IDA7Ci0gIGlmIChjb3VudGVyXyA8IG9wdGlvbnNfLT5ibG9ja19yZXN0YXJ0X2ludGVy
dmFsKSB7Ci0gICAgLy8gU2VlIGhvdyBtdWNoIHNoYXJpbmcgdG8gZG8gd2l0aCBwcmV2aW91cyBz
dHJpbmcKLSAgICBjb25zdCBzaXplX3QgbWluX2xlbmd0aCA9IHN0ZDo6bWluKGxhc3Rfa2V5X3Bp
ZWNlLnNpemUoKSwga2V5LnNpemUoKSk7Ci0gICAgd2hpbGUgKChzaGFyZWQgPCBtaW5fbGVuZ3Ro
KSAmJiAobGFzdF9rZXlfcGllY2Vbc2hhcmVkXSA9PSBrZXlbc2hhcmVkXSkpIHsKLSAgICAgIHNo
YXJlZCsrOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICAvLyBSZXN0YXJ0IGNvbXByZXNzaW9uCi0g
ICAgcmVzdGFydHNfLnB1c2hfYmFjayhidWZmZXJfLnNpemUoKSk7Ci0gICAgY291bnRlcl8gPSAw
OwotICB9Ci0gIGNvbnN0IHNpemVfdCBub25fc2hhcmVkID0ga2V5LnNpemUoKSAtIHNoYXJlZDsK
LQotICAvLyBBZGQgIjxzaGFyZWQ+PG5vbl9zaGFyZWQ+PHZhbHVlX3NpemU+IiB0byBidWZmZXJf
Ci0gIFB1dFZhcmludDMyKCZidWZmZXJfLCBzaGFyZWQpOwotICBQdXRWYXJpbnQzMigmYnVmZmVy
Xywgbm9uX3NoYXJlZCk7Ci0gIFB1dFZhcmludDMyKCZidWZmZXJfLCB2YWx1ZS5zaXplKCkpOwot
Ci0gIC8vIEFkZCBzdHJpbmcgZGVsdGEgdG8gYnVmZmVyXyBmb2xsb3dlZCBieSB2YWx1ZQotICBi
dWZmZXJfLmFwcGVuZChrZXkuZGF0YSgpICsgc2hhcmVkLCBub25fc2hhcmVkKTsKLSAgYnVmZmVy
Xy5hcHBlbmQodmFsdWUuZGF0YSgpLCB2YWx1ZS5zaXplKCkpOwotCi0gIC8vIFVwZGF0ZSBzdGF0
ZQotICBsYXN0X2tleV8ucmVzaXplKHNoYXJlZCk7Ci0gIGxhc3Rfa2V5Xy5hcHBlbmQoa2V5LmRh
dGEoKSArIHNoYXJlZCwgbm9uX3NoYXJlZCk7Ci0gIGFzc2VydChTbGljZShsYXN0X2tleV8pID09
IGtleSk7Ci0gIGNvdW50ZXJfKys7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2Jsb2NrX2J1aWxkZXIuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvYmxvY2tfYnVpbGRlci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjU0NWJkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvdGFibGUvYmxvY2tfYnVpbGRlci5oCisrKyAvZGV2L251bGwKQEAgLTEs
NTcgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3Jz
LgotCi0jaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9UQUJMRV9CTE9DS19CVUlMREVSX0hfCi0jZGVm
aW5lIFNUT1JBR0VfTEVWRUxEQl9UQUJMRV9CTE9DS19CVUlMREVSX0hfCi0KLSNpbmNsdWRlIDx2
ZWN0b3I+Ci0KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlICJsZXZlbGRiL3NsaWNlLmgi
Ci0KLW5hbWVzcGFjZSBsZXZlbGRiIHsKLQotc3RydWN0IE9wdGlvbnM7Ci0KLWNsYXNzIEJsb2Nr
QnVpbGRlciB7Ci0gcHVibGljOgotICBleHBsaWNpdCBCbG9ja0J1aWxkZXIoY29uc3QgT3B0aW9u
cyogb3B0aW9ucyk7Ci0KLSAgLy8gUmVzZXQgdGhlIGNvbnRlbnRzIGFzIGlmIHRoZSBCbG9ja0J1
aWxkZXIgd2FzIGp1c3QgY29uc3RydWN0ZWQuCi0gIHZvaWQgUmVzZXQoKTsKLQotICAvLyBSRVFV
SVJFUzogRmluaXNoKCkgaGFzIG5vdCBiZWVuIGNhbGxsZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0
byBSZXNldCgpLgotICAvLyBSRVFVSVJFUzoga2V5IGlzIGxhcmdlciB0aGFuIGFueSBwcmV2aW91
c2x5IGFkZGVkIGtleQotICB2b2lkIEFkZChjb25zdCBTbGljZSYga2V5LCBjb25zdCBTbGljZSYg
dmFsdWUpOwotCi0gIC8vIEZpbmlzaCBidWlsZGluZyB0aGUgYmxvY2sgYW5kIHJldHVybiBhIHNs
aWNlIHRoYXQgcmVmZXJzIHRvIHRoZQotICAvLyBibG9jayBjb250ZW50cy4gIFRoZSByZXR1cm5l
ZCBzbGljZSB3aWxsIHJlbWFpbiB2YWxpZCBmb3IgdGhlCi0gIC8vIGxpZmV0aW1lIG9mIHRoaXMg
YnVpbGRlciBvciB1bnRpbCBSZXNldCgpIGlzIGNhbGxlZC4KLSAgU2xpY2UgRmluaXNoKCk7Ci0K
LSAgLy8gUmV0dXJucyBhbiBlc3RpbWF0ZSBvZiB0aGUgY3VycmVudCAodW5jb21wcmVzc2VkKSBz
aXplIG9mIHRoZSBibG9jawotICAvLyB3ZSBhcmUgYnVpbGRpbmcuCi0gIHNpemVfdCBDdXJyZW50
U2l6ZUVzdGltYXRlKCkgY29uc3Q7Ci0KLSAgLy8gUmV0dXJuIHRydWUgaWZmIG5vIGVudHJpZXMg
aGF2ZSBiZWVuIGFkZGVkIHNpbmNlIHRoZSBsYXN0IFJlc2V0KCkKLSAgYm9vbCBlbXB0eSgpIGNv
bnN0IHsKLSAgICByZXR1cm4gYnVmZmVyXy5lbXB0eSgpOwotICB9Ci0KLSBwcml2YXRlOgotICBj
b25zdCBPcHRpb25zKiAgICAgICAgb3B0aW9uc187Ci0gIHN0ZDo6c3RyaW5nICAgICAgICAgICBi
dWZmZXJfOyAgICAgIC8vIERlc3RpbmF0aW9uIGJ1ZmZlcgotICBzdGQ6OnZlY3Rvcjx1aW50MzJf
dD4gcmVzdGFydHNfOyAgICAvLyBSZXN0YXJ0IHBvaW50cwotICBpbnQgICAgICAgICAgICAgICAg
ICAgY291bnRlcl87ICAgICAvLyBOdW1iZXIgb2YgZW50cmllcyBlbWl0dGVkIHNpbmNlIHJlc3Rh
cnQKLSAgYm9vbCAgICAgICAgICAgICAgICAgIGZpbmlzaGVkXzsgICAgLy8gSGFzIEZpbmlzaCgp
IGJlZW4gY2FsbGVkPwotICBzdGQ6OnN0cmluZyAgICAgICAgICAgbGFzdF9rZXlfOwotCi0gIC8v
IE5vIGNvcHlpbmcgYWxsb3dlZAotICBCbG9ja0J1aWxkZXIoY29uc3QgQmxvY2tCdWlsZGVyJik7
Ci0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IEJsb2NrQnVpbGRlciYpOwotfTsKLQotfSAgLy8gbmFt
ZXNwYWNlIGxldmVsZGIKLQotI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfVEFCTEVfQkxPQ0tf
QlVJTERFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9m
aWx0ZXJfYmxvY2suY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2ZpbHRlcl9i
bG9jay5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAzZTE1Yy4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2ZpbHRlcl9ibG9jay5jYworKysg
L2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIExl
dmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1l
cyBvZiBjb250cmlidXRvcnMuCi0KLSNpbmNsdWRlICJ0YWJsZS9maWx0ZXJfYmxvY2suaCIKLQot
I2luY2x1ZGUgImxldmVsZGIvZmlsdGVyX3BvbGljeS5oIgotI2luY2x1ZGUgInV0aWwvY29kaW5n
LmgiCi0KLW5hbWVzcGFjZSBsZXZlbGRiIHsKLQotLy8gU2VlIGRvYy90YWJsZV9mb3JtYXQudHh0
IGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgZmlsdGVyIGJsb2NrIGZvcm1hdC4KLQotLy8gR2Vu
ZXJhdGUgbmV3IGZpbHRlciBldmVyeSAyS0Igb2YgZGF0YQotc3RhdGljIGNvbnN0IHNpemVfdCBr
RmlsdGVyQmFzZUxnID0gMTE7Ci1zdGF0aWMgY29uc3Qgc2l6ZV90IGtGaWx0ZXJCYXNlID0gMSA8
PCBrRmlsdGVyQmFzZUxnOwotCi1GaWx0ZXJCbG9ja0J1aWxkZXI6OkZpbHRlckJsb2NrQnVpbGRl
cihjb25zdCBGaWx0ZXJQb2xpY3kqIHBvbGljeSkKLSAgICA6IHBvbGljeV8ocG9saWN5KSB7Ci19
Ci0KLXZvaWQgRmlsdGVyQmxvY2tCdWlsZGVyOjpTdGFydEJsb2NrKHVpbnQ2NF90IGJsb2NrX29m
ZnNldCkgewotICB1aW50NjRfdCBmaWx0ZXJfaW5kZXggPSAoYmxvY2tfb2Zmc2V0IC8ga0ZpbHRl
ckJhc2UpOwotICBhc3NlcnQoZmlsdGVyX2luZGV4ID49IGZpbHRlcl9vZmZzZXRzXy5zaXplKCkp
OwotICB3aGlsZSAoZmlsdGVyX2luZGV4ID4gZmlsdGVyX29mZnNldHNfLnNpemUoKSkgewotICAg
IEdlbmVyYXRlRmlsdGVyKCk7Ci0gIH0KLX0KLQotdm9pZCBGaWx0ZXJCbG9ja0J1aWxkZXI6OkFk
ZEtleShjb25zdCBTbGljZSYga2V5KSB7Ci0gIFNsaWNlIGsgPSBrZXk7Ci0gIHN0YXJ0Xy5wdXNo
X2JhY2soa2V5c18uc2l6ZSgpKTsKLSAga2V5c18uYXBwZW5kKGsuZGF0YSgpLCBrLnNpemUoKSk7
Ci19Ci0KLVNsaWNlIEZpbHRlckJsb2NrQnVpbGRlcjo6RmluaXNoKCkgewotICBpZiAoIXN0YXJ0
Xy5lbXB0eSgpKSB7Ci0gICAgR2VuZXJhdGVGaWx0ZXIoKTsKLSAgfQotCi0gIC8vIEFwcGVuZCBh
cnJheSBvZiBwZXItZmlsdGVyIG9mZnNldHMKLSAgY29uc3QgdWludDMyX3QgYXJyYXlfb2Zmc2V0
ID0gcmVzdWx0Xy5zaXplKCk7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsdGVyX29mZnNl
dHNfLnNpemUoKTsgaSsrKSB7Ci0gICAgUHV0Rml4ZWQzMigmcmVzdWx0XywgZmlsdGVyX29mZnNl
dHNfW2ldKTsKLSAgfQotCi0gIFB1dEZpeGVkMzIoJnJlc3VsdF8sIGFycmF5X29mZnNldCk7Ci0g
IHJlc3VsdF8ucHVzaF9iYWNrKGtGaWx0ZXJCYXNlTGcpOyAgLy8gU2F2ZSBlbmNvZGluZyBwYXJh
bWV0ZXIgaW4gcmVzdWx0Ci0gIHJldHVybiBTbGljZShyZXN1bHRfKTsKLX0KLQotdm9pZCBGaWx0
ZXJCbG9ja0J1aWxkZXI6OkdlbmVyYXRlRmlsdGVyKCkgewotICBjb25zdCBzaXplX3QgbnVtX2tl
eXMgPSBzdGFydF8uc2l6ZSgpOwotICBpZiAobnVtX2tleXMgPT0gMCkgewotICAgIC8vIEZhc3Qg
cGF0aCBpZiB0aGVyZSBhcmUgbm8ga2V5cyBmb3IgdGhpcyBmaWx0ZXIKLSAgICBmaWx0ZXJfb2Zm
c2V0c18ucHVzaF9iYWNrKHJlc3VsdF8uc2l6ZSgpKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICAv
LyBNYWtlIGxpc3Qgb2Yga2V5cyBmcm9tIGZsYXR0ZW5lZCBrZXkgc3RydWN0dXJlCi0gIHN0YXJ0
Xy5wdXNoX2JhY2soa2V5c18uc2l6ZSgpKTsgIC8vIFNpbXBsaWZ5IGxlbmd0aCBjb21wdXRhdGlv
bgotICB0bXBfa2V5c18ucmVzaXplKG51bV9rZXlzKTsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBudW1fa2V5czsgaSsrKSB7Ci0gICAgY29uc3QgY2hhciogYmFzZSA9IGtleXNfLmRhdGEoKSAr
IHN0YXJ0X1tpXTsKLSAgICBzaXplX3QgbGVuZ3RoID0gc3RhcnRfW2krMV0gLSBzdGFydF9baV07
Ci0gICAgdG1wX2tleXNfW2ldID0gU2xpY2UoYmFzZSwgbGVuZ3RoKTsKLSAgfQotCi0gIC8vIEdl
bmVyYXRlIGZpbHRlciBmb3IgY3VycmVudCBzZXQgb2Yga2V5cyBhbmQgYXBwZW5kIHRvIHJlc3Vs
dF8uCi0gIGZpbHRlcl9vZmZzZXRzXy5wdXNoX2JhY2socmVzdWx0Xy5zaXplKCkpOwotICBwb2xp
Y3lfLT5DcmVhdGVGaWx0ZXIoJnRtcF9rZXlzX1swXSwgbnVtX2tleXMsICZyZXN1bHRfKTsKLQot
ICB0bXBfa2V5c18uY2xlYXIoKTsKLSAga2V5c18uY2xlYXIoKTsKLSAgc3RhcnRfLmNsZWFyKCk7
Ci19Ci0KLUZpbHRlckJsb2NrUmVhZGVyOjpGaWx0ZXJCbG9ja1JlYWRlcihjb25zdCBGaWx0ZXJQ
b2xpY3kqIHBvbGljeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTbGljZSYgY29udGVudHMpCi0gICAgOiBwb2xpY3lfKHBvbGljeSksCi0gICAgICBkYXRhXyhO
VUxMKSwKLSAgICAgIG9mZnNldF8oTlVMTCksCi0gICAgICBudW1fKDApLAotICAgICAgYmFzZV9s
Z18oMCkgewotICBzaXplX3QgbiA9IGNvbnRlbnRzLnNpemUoKTsKLSAgaWYgKG4gPCA1KSByZXR1
cm47ICAvLyAxIGJ5dGUgZm9yIGJhc2VfbGdfIGFuZCA0IGZvciBzdGFydCBvZiBvZmZzZXQgYXJy
YXkKLSAgYmFzZV9sZ18gPSBjb250ZW50c1tuLTFdOwotICB1aW50MzJfdCBsYXN0X3dvcmQgPSBE
ZWNvZGVGaXhlZDMyKGNvbnRlbnRzLmRhdGEoKSArIG4gLSA1KTsKLSAgaWYgKGxhc3Rfd29yZCA+
IG4gLSA1KSByZXR1cm47Ci0gIGRhdGFfID0gY29udGVudHMuZGF0YSgpOwotICBvZmZzZXRfID0g
ZGF0YV8gKyBsYXN0X3dvcmQ7Ci0gIG51bV8gPSAobiAtIDUgLSBsYXN0X3dvcmQpIC8gNDsKLX0K
LQotYm9vbCBGaWx0ZXJCbG9ja1JlYWRlcjo6S2V5TWF5TWF0Y2godWludDY0X3QgYmxvY2tfb2Zm
c2V0LCBjb25zdCBTbGljZSYga2V5KSB7Ci0gIHVpbnQ2NF90IGluZGV4ID0gYmxvY2tfb2Zmc2V0
ID4+IGJhc2VfbGdfOwotICBpZiAoaW5kZXggPCBudW1fKSB7Ci0gICAgdWludDMyX3Qgc3RhcnQg
PSBEZWNvZGVGaXhlZDMyKG9mZnNldF8gKyBpbmRleCo0KTsKLSAgICB1aW50MzJfdCBsaW1pdCA9
IERlY29kZUZpeGVkMzIob2Zmc2V0XyArIGluZGV4KjQgKyA0KTsKLSAgICBpZiAoc3RhcnQgPD0g
bGltaXQgJiYgbGltaXQgPD0gKG9mZnNldF8gLSBkYXRhXykpIHsKLSAgICAgIFNsaWNlIGZpbHRl
ciA9IFNsaWNlKGRhdGFfICsgc3RhcnQsIGxpbWl0IC0gc3RhcnQpOwotICAgICAgcmV0dXJuIHBv
bGljeV8tPktleU1heU1hdGNoKGtleSwgZmlsdGVyKTsKLSAgICB9IGVsc2UgaWYgKHN0YXJ0ID09
IGxpbWl0KSB7Ci0gICAgICAvLyBFbXB0eSBmaWx0ZXJzIGRvIG5vdCBtYXRjaCBhbnkga2V5cwot
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotICByZXR1cm4gdHJ1ZTsgIC8vIEVycm9y
cyBhcmUgdHJlYXRlZCBhcyBwb3RlbnRpYWwgbWF0Y2hlcwotfQotCi19CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2ZpbHRlcl9ibG9jay5oIGIvU291cmNlL1Ro
aXJkUGFydHkvbGV2ZWxkYi90YWJsZS9maWx0ZXJfYmxvY2suaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYzY3ZDAxMC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZl
bGRiL3RhYmxlL2ZpbHRlcl9ibG9jay5oCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAot
Ly8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBT
ZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgotLy8KLS8vIEEg
ZmlsdGVyIGJsb2NrIGlzIHN0b3JlZCBuZWFyIHRoZSBlbmQgb2YgYSBUYWJsZSBmaWxlLiAgSXQg
Y29udGFpbnMKLS8vIGZpbHRlcnMgKGUuZy4sIGJsb29tIGZpbHRlcnMpIGZvciBhbGwgZGF0YSBi
bG9ja3MgaW4gdGhlIHRhYmxlIGNvbWJpbmVkCi0vLyBpbnRvIGEgc2luZ2xlIGZpbHRlciBibG9j
ay4KLQotI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfVEFCTEVfRklMVEVSX0JMT0NLX0hfCi0jZGVm
aW5lIFNUT1JBR0VfTEVWRUxEQl9UQUJMRV9GSUxURVJfQkxPQ0tfSF8KLQotI2luY2x1ZGUgPHN0
ZGRlZi5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRl
IDx2ZWN0b3I+Ci0jaW5jbHVkZSAibGV2ZWxkYi9zbGljZS5oIgotI2luY2x1ZGUgInV0aWwvaGFz
aC5oIgotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7Ci0KLWNsYXNzIEZpbHRlclBvbGljeTsKLQotLy8g
QSBGaWx0ZXJCbG9ja0J1aWxkZXIgaXMgdXNlZCB0byBjb25zdHJ1Y3QgYWxsIG9mIHRoZSBmaWx0
ZXJzIGZvciBhCi0vLyBwYXJ0aWN1bGFyIFRhYmxlLiAgSXQgZ2VuZXJhdGVzIGEgc2luZ2xlIHN0
cmluZyB3aGljaCBpcyBzdG9yZWQgYXMKLS8vIGEgc3BlY2lhbCBibG9jayBpbiB0aGUgVGFibGUu
Ci0vLwotLy8gVGhlIHNlcXVlbmNlIG9mIGNhbGxzIHRvIEZpbHRlckJsb2NrQnVpbGRlciBtdXN0
IG1hdGNoIHRoZSByZWdleHA6Ci0vLyAgICAgIChTdGFydEJsb2NrIEFkZEtleSopKiBGaW5pc2gK
LWNsYXNzIEZpbHRlckJsb2NrQnVpbGRlciB7Ci0gcHVibGljOgotICBleHBsaWNpdCBGaWx0ZXJC
bG9ja0J1aWxkZXIoY29uc3QgRmlsdGVyUG9saWN5Kik7Ci0KLSAgdm9pZCBTdGFydEJsb2NrKHVp
bnQ2NF90IGJsb2NrX29mZnNldCk7Ci0gIHZvaWQgQWRkS2V5KGNvbnN0IFNsaWNlJiBrZXkpOwot
ICBTbGljZSBGaW5pc2goKTsKLQotIHByaXZhdGU6Ci0gIHZvaWQgR2VuZXJhdGVGaWx0ZXIoKTsK
LQotICBjb25zdCBGaWx0ZXJQb2xpY3kqIHBvbGljeV87Ci0gIHN0ZDo6c3RyaW5nIGtleXNfOyAg
ICAgICAgICAgICAgLy8gRmxhdHRlbmVkIGtleSBjb250ZW50cwotICBzdGQ6OnZlY3RvcjxzaXpl
X3Q+IHN0YXJ0XzsgICAgIC8vIFN0YXJ0aW5nIGluZGV4IGluIGtleXNfIG9mIGVhY2gga2V5Ci0g
IHN0ZDo6c3RyaW5nIHJlc3VsdF87ICAgICAgICAgICAgLy8gRmlsdGVyIGRhdGEgY29tcHV0ZWQg
c28gZmFyCi0gIHN0ZDo6dmVjdG9yPFNsaWNlPiB0bXBfa2V5c187ICAgLy8gcG9saWN5Xy0+Q3Jl
YXRlRmlsdGVyKCkgYXJndW1lbnQKLSAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IGZpbHRlcl9vZmZz
ZXRzXzsKLQotICAvLyBObyBjb3B5aW5nIGFsbG93ZWQKLSAgRmlsdGVyQmxvY2tCdWlsZGVyKGNv
bnN0IEZpbHRlckJsb2NrQnVpbGRlciYpOwotICB2b2lkIG9wZXJhdG9yPShjb25zdCBGaWx0ZXJC
bG9ja0J1aWxkZXImKTsKLX07Ci0KLWNsYXNzIEZpbHRlckJsb2NrUmVhZGVyIHsKLSBwdWJsaWM6
Ci0gLy8gUkVRVUlSRVM6ICJjb250ZW50cyIgYW5kICpwb2xpY3kgbXVzdCBzdGF5IGxpdmUgd2hp
bGUgKnRoaXMgaXMgbGl2ZS4KLSAgRmlsdGVyQmxvY2tSZWFkZXIoY29uc3QgRmlsdGVyUG9saWN5
KiBwb2xpY3ksIGNvbnN0IFNsaWNlJiBjb250ZW50cyk7Ci0gIGJvb2wgS2V5TWF5TWF0Y2godWlu
dDY0X3QgYmxvY2tfb2Zmc2V0LCBjb25zdCBTbGljZSYga2V5KTsKLQotIHByaXZhdGU6Ci0gIGNv
bnN0IEZpbHRlclBvbGljeSogcG9saWN5XzsKLSAgY29uc3QgY2hhciogZGF0YV87ICAgIC8vIFBv
aW50ZXIgdG8gZmlsdGVyIGRhdGEgKGF0IGJsb2NrLXN0YXJ0KQotICBjb25zdCBjaGFyKiBvZmZz
ZXRfOyAgLy8gUG9pbnRlciB0byBiZWdpbm5pbmcgb2Ygb2Zmc2V0IGFycmF5IChhdCBibG9jay1l
bmQpCi0gIHNpemVfdCBudW1fOyAgICAgICAgICAvLyBOdW1iZXIgb2YgZW50cmllcyBpbiBvZmZz
ZXQgYXJyYXkKLSAgc2l6ZV90IGJhc2VfbGdfOyAgICAgIC8vIEVuY29kaW5nIHBhcmFtZXRlciAo
c2VlIGtGaWx0ZXJCYXNlTGcgaW4gLmNjIGZpbGUpCi19OwotCi19Ci0KLSNlbmRpZiAgLy8gU1RP
UkFHRV9MRVZFTERCX1RBQkxFX0ZJTFRFUl9CTE9DS19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGV2ZWxkYi90YWJsZS9maWx0ZXJfYmxvY2tfdGVzdC5jYyBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvdGFibGUvZmlsdGVyX2Jsb2NrX3Rlc3QuY2MKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDNhMmEwN2MuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGV2ZWxkYi90YWJsZS9maWx0ZXJfYmxvY2tfdGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDEy
OCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIExldmVsREIgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMu
Ci0KLSNpbmNsdWRlICJ0YWJsZS9maWx0ZXJfYmxvY2suaCIKLQotI2luY2x1ZGUgImxldmVsZGIv
ZmlsdGVyX3BvbGljeS5oIgotI2luY2x1ZGUgInV0aWwvY29kaW5nLmgiCi0jaW5jbHVkZSAidXRp
bC9oYXNoLmgiCi0jaW5jbHVkZSAidXRpbC9sb2dnaW5nLmgiCi0jaW5jbHVkZSAidXRpbC90ZXN0
aGFybmVzcy5oIgotI2luY2x1ZGUgInV0aWwvdGVzdHV0aWwuaCIKLQotbmFtZXNwYWNlIGxldmVs
ZGIgewotCi0vLyBGb3IgdGVzdGluZzogZW1pdCBhbiBhcnJheSB3aXRoIG9uZSBoYXNoIHZhbHVl
IHBlciBrZXkKLWNsYXNzIFRlc3RIYXNoRmlsdGVyIDogcHVibGljIEZpbHRlclBvbGljeSB7Ci0g
cHVibGljOgotICB2aXJ0dWFsIGNvbnN0IGNoYXIqIE5hbWUoKSBjb25zdCB7Ci0gICAgcmV0dXJu
ICJUZXN0SGFzaEZpbHRlciI7Ci0gIH0KLQotICB2aXJ0dWFsIHZvaWQgQ3JlYXRlRmlsdGVyKGNv
bnN0IFNsaWNlKiBrZXlzLCBpbnQgbiwgc3RkOjpzdHJpbmcqIGRzdCkgY29uc3QgewotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICB1aW50MzJfdCBoID0gSGFzaChrZXlz
W2ldLmRhdGEoKSwga2V5c1tpXS5zaXplKCksIDEpOwotICAgICAgUHV0Rml4ZWQzMihkc3QsIGgp
OwotICAgIH0KLSAgfQotCi0gIHZpcnR1YWwgYm9vbCBLZXlNYXlNYXRjaChjb25zdCBTbGljZSYg
a2V5LCBjb25zdCBTbGljZSYgZmlsdGVyKSBjb25zdCB7Ci0gICAgdWludDMyX3QgaCA9IEhhc2go
a2V5LmRhdGEoKSwga2V5LnNpemUoKSwgMSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgKyA0IDw9
IGZpbHRlci5zaXplKCk7IGkgKz0gNCkgewotICAgICAgaWYgKGggPT0gRGVjb2RlRml4ZWQzMihm
aWx0ZXIuZGF0YSgpICsgaSkpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAg
fQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfTsKLQotY2xhc3MgRmlsdGVyQmxvY2tUZXN0IHsK
LSBwdWJsaWM6Ci0gIFRlc3RIYXNoRmlsdGVyIHBvbGljeV87Ci19OwotCi1URVNUKEZpbHRlckJs
b2NrVGVzdCwgRW1wdHlCdWlsZGVyKSB7Ci0gIEZpbHRlckJsb2NrQnVpbGRlciBidWlsZGVyKCZw
b2xpY3lfKTsKLSAgU2xpY2UgYmxvY2sgPSBidWlsZGVyLkZpbmlzaCgpOwotICBBU1NFUlRfRVEo
IlxceDAwXFx4MDBcXHgwMFxceDAwXFx4MGIiLCBFc2NhcGVTdHJpbmcoYmxvY2spKTsKLSAgRmls
dGVyQmxvY2tSZWFkZXIgcmVhZGVyKCZwb2xpY3lfLCBibG9jayk7Ci0gIEFTU0VSVF9UUlVFKHJl
YWRlci5LZXlNYXlNYXRjaCgwLCAiZm9vIikpOwotICBBU1NFUlRfVFJVRShyZWFkZXIuS2V5TWF5
TWF0Y2goMTAwMDAwLCAiZm9vIikpOwotfQotCi1URVNUKEZpbHRlckJsb2NrVGVzdCwgU2luZ2xl
Q2h1bmspIHsKLSAgRmlsdGVyQmxvY2tCdWlsZGVyIGJ1aWxkZXIoJnBvbGljeV8pOwotICBidWls
ZGVyLlN0YXJ0QmxvY2soMTAwKTsKLSAgYnVpbGRlci5BZGRLZXkoImZvbyIpOwotICBidWlsZGVy
LkFkZEtleSgiYmFyIik7Ci0gIGJ1aWxkZXIuQWRkS2V5KCJib3giKTsKLSAgYnVpbGRlci5TdGFy
dEJsb2NrKDIwMCk7Ci0gIGJ1aWxkZXIuQWRkS2V5KCJib3giKTsKLSAgYnVpbGRlci5TdGFydEJs
b2NrKDMwMCk7Ci0gIGJ1aWxkZXIuQWRkS2V5KCJoZWxsbyIpOwotICBTbGljZSBibG9jayA9IGJ1
aWxkZXIuRmluaXNoKCk7Ci0gIEZpbHRlckJsb2NrUmVhZGVyIHJlYWRlcigmcG9saWN5XywgYmxv
Y2spOwotICBBU1NFUlRfVFJVRShyZWFkZXIuS2V5TWF5TWF0Y2goMTAwLCAiZm9vIikpOwotICBB
U1NFUlRfVFJVRShyZWFkZXIuS2V5TWF5TWF0Y2goMTAwLCAiYmFyIikpOwotICBBU1NFUlRfVFJV
RShyZWFkZXIuS2V5TWF5TWF0Y2goMTAwLCAiYm94IikpOwotICBBU1NFUlRfVFJVRShyZWFkZXIu
S2V5TWF5TWF0Y2goMTAwLCAiaGVsbG8iKSk7Ci0gIEFTU0VSVF9UUlVFKHJlYWRlci5LZXlNYXlN
YXRjaCgxMDAsICJmb28iKSk7Ci0gIEFTU0VSVF9UUlVFKCEgcmVhZGVyLktleU1heU1hdGNoKDEw
MCwgIm1pc3NpbmciKSk7Ci0gIEFTU0VSVF9UUlVFKCEgcmVhZGVyLktleU1heU1hdGNoKDEwMCwg
Im90aGVyIikpOwotfQotCi1URVNUKEZpbHRlckJsb2NrVGVzdCwgTXVsdGlDaHVuaykgewotICBG
aWx0ZXJCbG9ja0J1aWxkZXIgYnVpbGRlcigmcG9saWN5Xyk7Ci0KLSAgLy8gRmlyc3QgZmlsdGVy
Ci0gIGJ1aWxkZXIuU3RhcnRCbG9jaygwKTsKLSAgYnVpbGRlci5BZGRLZXkoImZvbyIpOwotICBi
dWlsZGVyLlN0YXJ0QmxvY2soMjAwMCk7Ci0gIGJ1aWxkZXIuQWRkS2V5KCJiYXIiKTsKLQotICAv
LyBTZWNvbmQgZmlsdGVyCi0gIGJ1aWxkZXIuU3RhcnRCbG9jaygzMTAwKTsKLSAgYnVpbGRlci5B
ZGRLZXkoImJveCIpOwotCi0gIC8vIFRoaXJkIGZpbHRlciBpcyBlbXB0eQotCi0gIC8vIExhc3Qg
ZmlsdGVyCi0gIGJ1aWxkZXIuU3RhcnRCbG9jayg5MDAwKTsKLSAgYnVpbGRlci5BZGRLZXkoImJv
eCIpOwotICBidWlsZGVyLkFkZEtleSgiaGVsbG8iKTsKLQotICBTbGljZSBibG9jayA9IGJ1aWxk
ZXIuRmluaXNoKCk7Ci0gIEZpbHRlckJsb2NrUmVhZGVyIHJlYWRlcigmcG9saWN5XywgYmxvY2sp
OwotCi0gIC8vIENoZWNrIGZpcnN0IGZpbHRlcgotICBBU1NFUlRfVFJVRShyZWFkZXIuS2V5TWF5
TWF0Y2goMCwgImZvbyIpKTsKLSAgQVNTRVJUX1RSVUUocmVhZGVyLktleU1heU1hdGNoKDIwMDAs
ICJiYXIiKSk7Ci0gIEFTU0VSVF9UUlVFKCEgcmVhZGVyLktleU1heU1hdGNoKDAsICJib3giKSk7
Ci0gIEFTU0VSVF9UUlVFKCEgcmVhZGVyLktleU1heU1hdGNoKDAsICJoZWxsbyIpKTsKLQotICAv
LyBDaGVjayBzZWNvbmQgZmlsdGVyCi0gIEFTU0VSVF9UUlVFKHJlYWRlci5LZXlNYXlNYXRjaCgz
MTAwLCAiYm94IikpOwotICBBU1NFUlRfVFJVRSghIHJlYWRlci5LZXlNYXlNYXRjaCgzMTAwLCAi
Zm9vIikpOwotICBBU1NFUlRfVFJVRSghIHJlYWRlci5LZXlNYXlNYXRjaCgzMTAwLCAiYmFyIikp
OwotICBBU1NFUlRfVFJVRSghIHJlYWRlci5LZXlNYXlNYXRjaCgzMTAwLCAiaGVsbG8iKSk7Ci0K
LSAgLy8gQ2hlY2sgdGhpcmQgZmlsdGVyIChlbXB0eSkKLSAgQVNTRVJUX1RSVUUoISByZWFkZXIu
S2V5TWF5TWF0Y2goNDEwMCwgImZvbyIpKTsKLSAgQVNTRVJUX1RSVUUoISByZWFkZXIuS2V5TWF5
TWF0Y2goNDEwMCwgImJhciIpKTsKLSAgQVNTRVJUX1RSVUUoISByZWFkZXIuS2V5TWF5TWF0Y2go
NDEwMCwgImJveCIpKTsKLSAgQVNTRVJUX1RSVUUoISByZWFkZXIuS2V5TWF5TWF0Y2goNDEwMCwg
ImhlbGxvIikpOwotCi0gIC8vIENoZWNrIGxhc3QgZmlsdGVyCi0gIEFTU0VSVF9UUlVFKHJlYWRl
ci5LZXlNYXlNYXRjaCg5MDAwLCAiYm94IikpOwotICBBU1NFUlRfVFJVRShyZWFkZXIuS2V5TWF5
TWF0Y2goOTAwMCwgImhlbGxvIikpOwotICBBU1NFUlRfVFJVRSghIHJlYWRlci5LZXlNYXlNYXRj
aCg5MDAwLCAiZm9vIikpOwotICBBU1NFUlRfVFJVRSghIHJlYWRlci5LZXlNYXlNYXRjaCg5MDAw
LCAiYmFyIikpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgotCi1pbnQgbWFpbihpbnQg
YXJnYywgY2hhcioqIGFyZ3YpIHsKLSAgcmV0dXJuIGxldmVsZGI6OnRlc3Q6OlJ1bkFsbFRlc3Rz
KCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2Zvcm1h
dC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvZm9ybWF0LmNjCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGExZGVjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvdGFibGUvZm9ybWF0LmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICsw
LDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KLQot
I2luY2x1ZGUgInRhYmxlL2Zvcm1hdC5oIgotCi0jaW5jbHVkZSAibGV2ZWxkYi9lbnYuaCIKLSNp
bmNsdWRlICJwb3J0L3BvcnQuaCIKLSNpbmNsdWRlICJ0YWJsZS9ibG9jay5oIgotI2luY2x1ZGUg
InV0aWwvY29kaW5nLmgiCi0jaW5jbHVkZSAidXRpbC9jcmMzMmMuaCIKLQotbmFtZXNwYWNlIGxl
dmVsZGIgewotCi12b2lkIEJsb2NrSGFuZGxlOjpFbmNvZGVUbyhzdGQ6OnN0cmluZyogZHN0KSBj
b25zdCB7Ci0gIC8vIFNhbml0eSBjaGVjayB0aGF0IGFsbCBmaWVsZHMgaGF2ZSBiZWVuIHNldAot
ICBhc3NlcnQob2Zmc2V0XyAhPSB+c3RhdGljX2Nhc3Q8dWludDY0X3Q+KDApKTsKLSAgYXNzZXJ0
KHNpemVfICE9IH5zdGF0aWNfY2FzdDx1aW50NjRfdD4oMCkpOwotICBQdXRWYXJpbnQ2NChkc3Qs
IG9mZnNldF8pOwotICBQdXRWYXJpbnQ2NChkc3QsIHNpemVfKTsKLX0KLQotU3RhdHVzIEJsb2Nr
SGFuZGxlOjpEZWNvZGVGcm9tKFNsaWNlKiBpbnB1dCkgewotICBpZiAoR2V0VmFyaW50NjQoaW5w
dXQsICZvZmZzZXRfKSAmJgotICAgICAgR2V0VmFyaW50NjQoaW5wdXQsICZzaXplXykpIHsKLSAg
ICByZXR1cm4gU3RhdHVzOjpPSygpOwotICB9IGVsc2UgewotICAgIHJldHVybiBTdGF0dXM6OkNv
cnJ1cHRpb24oImJhZCBibG9jayBoYW5kbGUiKTsKLSAgfQotfQotCi12b2lkIEZvb3Rlcjo6RW5j
b2RlVG8oc3RkOjpzdHJpbmcqIGRzdCkgY29uc3QgewotI2lmbmRlZiBOREVCVUcKLSAgY29uc3Qg
c2l6ZV90IG9yaWdpbmFsX3NpemUgPSBkc3QtPnNpemUoKTsKLSNlbmRpZgotICBtZXRhaW5kZXhf
aGFuZGxlXy5FbmNvZGVUbyhkc3QpOwotICBpbmRleF9oYW5kbGVfLkVuY29kZVRvKGRzdCk7Ci0g
IGRzdC0+cmVzaXplKDIgKiBCbG9ja0hhbmRsZTo6a01heEVuY29kZWRMZW5ndGgpOyAgLy8gUGFk
ZGluZwotICBQdXRGaXhlZDMyKGRzdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGtUYWJsZU1hZ2lj
TnVtYmVyICYgMHhmZmZmZmZmZnUpKTsKLSAgUHV0Rml4ZWQzMihkc3QsIHN0YXRpY19jYXN0PHVp
bnQzMl90PihrVGFibGVNYWdpY051bWJlciA+PiAzMikpOwotICBhc3NlcnQoZHN0LT5zaXplKCkg
PT0gb3JpZ2luYWxfc2l6ZSArIGtFbmNvZGVkTGVuZ3RoKTsKLX0KLQotU3RhdHVzIEZvb3Rlcjo6
RGVjb2RlRnJvbShTbGljZSogaW5wdXQpIHsKLSAgY29uc3QgY2hhciogbWFnaWNfcHRyID0gaW5w
dXQtPmRhdGEoKSArIGtFbmNvZGVkTGVuZ3RoIC0gODsKLSAgY29uc3QgdWludDMyX3QgbWFnaWNf
bG8gPSBEZWNvZGVGaXhlZDMyKG1hZ2ljX3B0cik7Ci0gIGNvbnN0IHVpbnQzMl90IG1hZ2ljX2hp
ID0gRGVjb2RlRml4ZWQzMihtYWdpY19wdHIgKyA0KTsKLSAgY29uc3QgdWludDY0X3QgbWFnaWMg
PSAoKHN0YXRpY19jYXN0PHVpbnQ2NF90PihtYWdpY19oaSkgPDwgMzIpIHwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihtYWdpY19sbykpKTsKLSAgaWYg
KG1hZ2ljICE9IGtUYWJsZU1hZ2ljTnVtYmVyKSB7Ci0gICAgcmV0dXJuIFN0YXR1czo6SW52YWxp
ZEFyZ3VtZW50KCJub3QgYW4gc3N0YWJsZSAoYmFkIG1hZ2ljIG51bWJlcikiKTsKLSAgfQotCi0g
IFN0YXR1cyByZXN1bHQgPSBtZXRhaW5kZXhfaGFuZGxlXy5EZWNvZGVGcm9tKGlucHV0KTsKLSAg
aWYgKHJlc3VsdC5vaygpKSB7Ci0gICAgcmVzdWx0ID0gaW5kZXhfaGFuZGxlXy5EZWNvZGVGcm9t
KGlucHV0KTsKLSAgfQotICBpZiAocmVzdWx0Lm9rKCkpIHsKLSAgICAvLyBXZSBza2lwIG92ZXIg
YW55IGxlZnRvdmVyIGRhdGEgKGp1c3QgcGFkZGluZyBmb3Igbm93KSBpbiAiaW5wdXQiCi0gICAg
Y29uc3QgY2hhciogZW5kID0gbWFnaWNfcHRyICsgODsKLSAgICAqaW5wdXQgPSBTbGljZShlbmQs
IGlucHV0LT5kYXRhKCkgKyBpbnB1dC0+c2l6ZSgpIC0gZW5kKTsKLSAgfQotICByZXR1cm4gcmVz
dWx0OwotfQotCi1TdGF0dXMgUmVhZEJsb2NrKFJhbmRvbUFjY2Vzc0ZpbGUqIGZpbGUsCi0gICAg
ICAgICAgICAgICAgIGNvbnN0IFJlYWRPcHRpb25zJiBvcHRpb25zLAotICAgICAgICAgICAgICAg
ICBjb25zdCBCbG9ja0hhbmRsZSYgaGFuZGxlLAotICAgICAgICAgICAgICAgICBCbG9ja0NvbnRl
bnRzKiByZXN1bHQpIHsKLSAgcmVzdWx0LT5kYXRhID0gU2xpY2UoKTsKLSAgcmVzdWx0LT5jYWNo
YWJsZSA9IGZhbHNlOwotICByZXN1bHQtPmhlYXBfYWxsb2NhdGVkID0gZmFsc2U7Ci0KLSAgLy8g
UmVhZCB0aGUgYmxvY2sgY29udGVudHMgYXMgd2VsbCBhcyB0aGUgdHlwZS9jcmMgZm9vdGVyLgot
ICAvLyBTZWUgdGFibGVfYnVpbGRlci5jYyBmb3IgdGhlIGNvZGUgdGhhdCBidWlsdCB0aGlzIHN0
cnVjdHVyZS4KLSAgc2l6ZV90IG4gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGhhbmRsZS5zaXplKCkp
OwotICBjaGFyKiBidWYgPSBuZXcgY2hhcltuICsga0Jsb2NrVHJhaWxlclNpemVdOwotICBTbGlj
ZSBjb250ZW50czsKLSAgU3RhdHVzIHMgPSBmaWxlLT5SZWFkKGhhbmRsZS5vZmZzZXQoKSwgbiAr
IGtCbG9ja1RyYWlsZXJTaXplLCAmY29udGVudHMsIGJ1Zik7Ci0gIGlmICghcy5vaygpKSB7Ci0g
ICAgZGVsZXRlW10gYnVmOwotICAgIHJldHVybiBzOwotICB9Ci0gIGlmIChjb250ZW50cy5zaXpl
KCkgIT0gbiArIGtCbG9ja1RyYWlsZXJTaXplKSB7Ci0gICAgZGVsZXRlW10gYnVmOwotICAgIHJl
dHVybiBTdGF0dXM6OkNvcnJ1cHRpb24oInRydW5jYXRlZCBibG9jayByZWFkIik7Ci0gIH0KLQot
ICAvLyBDaGVjayB0aGUgY3JjIG9mIHRoZSB0eXBlIGFuZCB0aGUgYmxvY2sgY29udGVudHMKLSAg
Y29uc3QgY2hhciogZGF0YSA9IGNvbnRlbnRzLmRhdGEoKTsgICAgLy8gUG9pbnRlciB0byB3aGVy
ZSBSZWFkIHB1dCB0aGUgZGF0YQotICBpZiAob3B0aW9ucy52ZXJpZnlfY2hlY2tzdW1zKSB7Ci0g
ICAgY29uc3QgdWludDMyX3QgY3JjID0gY3JjMzJjOjpVbm1hc2soRGVjb2RlRml4ZWQzMihkYXRh
ICsgbiArIDEpKTsKLSAgICBjb25zdCB1aW50MzJfdCBhY3R1YWwgPSBjcmMzMmM6OlZhbHVlKGRh
dGEsIG4gKyAxKTsKLSAgICBpZiAoYWN0dWFsICE9IGNyYykgewotICAgICAgZGVsZXRlW10gYnVm
OwotICAgICAgcyA9IFN0YXR1czo6Q29ycnVwdGlvbigiYmxvY2sgY2hlY2tzdW0gbWlzbWF0Y2gi
KTsKLSAgICAgIHJldHVybiBzOwotICAgIH0KLSAgfQotCi0gIHN3aXRjaCAoZGF0YVtuXSkgewot
ICAgIGNhc2Uga05vQ29tcHJlc3Npb246Ci0gICAgICBpZiAoZGF0YSAhPSBidWYpIHsKLSAgICAg
ICAgLy8gRmlsZSBpbXBsZW1lbnRhdGlvbiBnYXZlIHVzIHBvaW50ZXIgdG8gc29tZSBvdGhlciBk
YXRhLgotICAgICAgICAvLyBVc2UgaXQgZGlyZWN0bHkgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhh
dCBpdCB3aWxsIGJlIGxpdmUKLSAgICAgICAgLy8gd2hpbGUgdGhlIGZpbGUgaXMgb3Blbi4KLSAg
ICAgICAgZGVsZXRlW10gYnVmOwotICAgICAgICByZXN1bHQtPmRhdGEgPSBTbGljZShkYXRhLCBu
KTsKLSAgICAgICAgcmVzdWx0LT5oZWFwX2FsbG9jYXRlZCA9IGZhbHNlOwotICAgICAgICByZXN1
bHQtPmNhY2hhYmxlID0gZmFsc2U7ICAvLyBEbyBub3QgZG91YmxlLWNhY2hlCi0gICAgICB9IGVs
c2UgewotICAgICAgICByZXN1bHQtPmRhdGEgPSBTbGljZShidWYsIG4pOwotICAgICAgICByZXN1
bHQtPmhlYXBfYWxsb2NhdGVkID0gdHJ1ZTsKLSAgICAgICAgcmVzdWx0LT5jYWNoYWJsZSA9IHRy
dWU7Ci0gICAgICB9Ci0KLSAgICAgIC8vIE9rCi0gICAgICBicmVhazsKLSAgICBjYXNlIGtTbmFw
cHlDb21wcmVzc2lvbjogewotICAgICAgc2l6ZV90IHVsZW5ndGggPSAwOwotICAgICAgaWYgKCFw
b3J0OjpTbmFwcHlfR2V0VW5jb21wcmVzc2VkTGVuZ3RoKGRhdGEsIG4sICZ1bGVuZ3RoKSkgewot
ICAgICAgICBkZWxldGVbXSBidWY7Ci0gICAgICAgIHJldHVybiBTdGF0dXM6OkNvcnJ1cHRpb24o
ImNvcnJ1cHRlZCBjb21wcmVzc2VkIGJsb2NrIGNvbnRlbnRzIik7Ci0gICAgICB9Ci0gICAgICBj
aGFyKiB1YnVmID0gbmV3IGNoYXJbdWxlbmd0aF07Ci0gICAgICBpZiAoIXBvcnQ6OlNuYXBweV9V
bmNvbXByZXNzKGRhdGEsIG4sIHVidWYpKSB7Ci0gICAgICAgIGRlbGV0ZVtdIGJ1ZjsKLSAgICAg
ICAgZGVsZXRlW10gdWJ1ZjsKLSAgICAgICAgcmV0dXJuIFN0YXR1czo6Q29ycnVwdGlvbigiY29y
cnVwdGVkIGNvbXByZXNzZWQgYmxvY2sgY29udGVudHMiKTsKLSAgICAgIH0KLSAgICAgIGRlbGV0
ZVtdIGJ1ZjsKLSAgICAgIHJlc3VsdC0+ZGF0YSA9IFNsaWNlKHVidWYsIHVsZW5ndGgpOwotICAg
ICAgcmVzdWx0LT5oZWFwX2FsbG9jYXRlZCA9IHRydWU7Ci0gICAgICByZXN1bHQtPmNhY2hhYmxl
ID0gdHJ1ZTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgZGVsZXRl
W10gYnVmOwotICAgICAgcmV0dXJuIFN0YXR1czo6Q29ycnVwdGlvbigiYmFkIGJsb2NrIHR5cGUi
KTsKLSAgfQotCi0gIHJldHVybiBTdGF0dXM6Ok9LKCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBs
ZXZlbGRiCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2Zvcm1h
dC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9mb3JtYXQuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNmMwYjgwYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9sZXZlbGRiL3RhYmxlL2Zvcm1hdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAg
QEAKLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KLQotI2lm
bmRlZiBTVE9SQUdFX0xFVkVMREJfVEFCTEVfRk9STUFUX0hfCi0jZGVmaW5lIFNUT1JBR0VfTEVW
RUxEQl9UQUJMRV9GT1JNQVRfSF8KLQotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxzdGRp
bnQuaD4KLSNpbmNsdWRlICJsZXZlbGRiL3NsaWNlLmgiCi0jaW5jbHVkZSAibGV2ZWxkYi9zdGF0
dXMuaCIKLSNpbmNsdWRlICJsZXZlbGRiL3RhYmxlX2J1aWxkZXIuaCIKLQotbmFtZXNwYWNlIGxl
dmVsZGIgewotCi1jbGFzcyBCbG9jazsKLWNsYXNzIFJhbmRvbUFjY2Vzc0ZpbGU7Ci1zdHJ1Y3Qg
UmVhZE9wdGlvbnM7Ci0KLS8vIEJsb2NrSGFuZGxlIGlzIGEgcG9pbnRlciB0byB0aGUgZXh0ZW50
IG9mIGEgZmlsZSB0aGF0IHN0b3JlcyBhIGRhdGEKLS8vIGJsb2NrIG9yIGEgbWV0YSBibG9jay4K
LWNsYXNzIEJsb2NrSGFuZGxlIHsKLSBwdWJsaWM6Ci0gIEJsb2NrSGFuZGxlKCk7Ci0KLSAgLy8g
VGhlIG9mZnNldCBvZiB0aGUgYmxvY2sgaW4gdGhlIGZpbGUuCi0gIHVpbnQ2NF90IG9mZnNldCgp
IGNvbnN0IHsgcmV0dXJuIG9mZnNldF87IH0KLSAgdm9pZCBzZXRfb2Zmc2V0KHVpbnQ2NF90IG9m
ZnNldCkgeyBvZmZzZXRfID0gb2Zmc2V0OyB9Ci0KLSAgLy8gVGhlIHNpemUgb2YgdGhlIHN0b3Jl
ZCBibG9jawotICB1aW50NjRfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV87IH0KLSAgdm9p
ZCBzZXRfc2l6ZSh1aW50NjRfdCBzaXplKSB7IHNpemVfID0gc2l6ZTsgfQotCi0gIHZvaWQgRW5j
b2RlVG8oc3RkOjpzdHJpbmcqIGRzdCkgY29uc3Q7Ci0gIFN0YXR1cyBEZWNvZGVGcm9tKFNsaWNl
KiBpbnB1dCk7Ci0KLSAgLy8gTWF4aW11bSBlbmNvZGluZyBsZW5ndGggb2YgYSBCbG9ja0hhbmRs
ZQotICBlbnVtIHsga01heEVuY29kZWRMZW5ndGggPSAxMCArIDEwIH07Ci0KLSBwcml2YXRlOgot
ICB1aW50NjRfdCBvZmZzZXRfOwotICB1aW50NjRfdCBzaXplXzsKLX07Ci0KLS8vIEZvb3RlciBl
bmNhcHN1bGF0ZXMgdGhlIGZpeGVkIGluZm9ybWF0aW9uIHN0b3JlZCBhdCB0aGUgdGFpbAotLy8g
ZW5kIG9mIGV2ZXJ5IHRhYmxlIGZpbGUuCi1jbGFzcyBGb290ZXIgewotIHB1YmxpYzoKLSAgRm9v
dGVyKCkgeyB9Ci0KLSAgLy8gVGhlIGJsb2NrIGhhbmRsZSBmb3IgdGhlIG1ldGFpbmRleCBibG9j
ayBvZiB0aGUgdGFibGUKLSAgY29uc3QgQmxvY2tIYW5kbGUmIG1ldGFpbmRleF9oYW5kbGUoKSBj
b25zdCB7IHJldHVybiBtZXRhaW5kZXhfaGFuZGxlXzsgfQotICB2b2lkIHNldF9tZXRhaW5kZXhf
aGFuZGxlKGNvbnN0IEJsb2NrSGFuZGxlJiBoKSB7IG1ldGFpbmRleF9oYW5kbGVfID0gaDsgfQot
Ci0gIC8vIFRoZSBibG9jayBoYW5kbGUgZm9yIHRoZSBpbmRleCBibG9jayBvZiB0aGUgdGFibGUK
LSAgY29uc3QgQmxvY2tIYW5kbGUmIGluZGV4X2hhbmRsZSgpIGNvbnN0IHsKLSAgICByZXR1cm4g
aW5kZXhfaGFuZGxlXzsKLSAgfQotICB2b2lkIHNldF9pbmRleF9oYW5kbGUoY29uc3QgQmxvY2tI
YW5kbGUmIGgpIHsKLSAgICBpbmRleF9oYW5kbGVfID0gaDsKLSAgfQotCi0gIHZvaWQgRW5jb2Rl
VG8oc3RkOjpzdHJpbmcqIGRzdCkgY29uc3Q7Ci0gIFN0YXR1cyBEZWNvZGVGcm9tKFNsaWNlKiBp
bnB1dCk7Ci0KLSAgLy8gRW5jb2RlZCBsZW5ndGggb2YgYSBGb290ZXIuICBOb3RlIHRoYXQgdGhl
IHNlcmlhbGl6YXRpb24gb2YgYQotICAvLyBGb290ZXIgd2lsbCBhbHdheXMgb2NjdXB5IGV4YWN0
bHkgdGhpcyBtYW55IGJ5dGVzLiAgSXQgY29uc2lzdHMKLSAgLy8gb2YgdHdvIGJsb2NrIGhhbmRs
ZXMgYW5kIGEgbWFnaWMgbnVtYmVyLgotICBlbnVtIHsKLSAgICBrRW5jb2RlZExlbmd0aCA9IDIq
QmxvY2tIYW5kbGU6OmtNYXhFbmNvZGVkTGVuZ3RoICsgOAotICB9OwotCi0gcHJpdmF0ZToKLSAg
QmxvY2tIYW5kbGUgbWV0YWluZGV4X2hhbmRsZV87Ci0gIEJsb2NrSGFuZGxlIGluZGV4X2hhbmRs
ZV87Ci19OwotCi0vLyBrVGFibGVNYWdpY051bWJlciB3YXMgcGlja2VkIGJ5IHJ1bm5pbmcKLS8v
ICAgIGVjaG8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2xldmVsZGIvIHwgc2hhMXN1bQotLy8g
YW5kIHRha2luZyB0aGUgbGVhZGluZyA2NCBiaXRzLgotc3RhdGljIGNvbnN0IHVpbnQ2NF90IGtU
YWJsZU1hZ2ljTnVtYmVyID0gMHhkYjQ3NzUyNDhiODBmYjU3dWxsOwotCi0vLyAxLWJ5dGUgdHlw
ZSArIDMyLWJpdCBjcmMKLXN0YXRpYyBjb25zdCBzaXplX3Qga0Jsb2NrVHJhaWxlclNpemUgPSA1
OwotCi1zdHJ1Y3QgQmxvY2tDb250ZW50cyB7Ci0gIFNsaWNlIGRhdGE7ICAgICAgICAgICAvLyBB
Y3R1YWwgY29udGVudHMgb2YgZGF0YQotICBib29sIGNhY2hhYmxlOyAgICAgICAgLy8gVHJ1ZSBp
ZmYgZGF0YSBjYW4gYmUgY2FjaGVkCi0gIGJvb2wgaGVhcF9hbGxvY2F0ZWQ7ICAvLyBUcnVlIGlm
ZiBjYWxsZXIgc2hvdWxkIGRlbGV0ZVtdIGRhdGEuZGF0YSgpCi19OwotCi0vLyBSZWFkIHRoZSBi
bG9jayBpZGVudGlmaWVkIGJ5ICJoYW5kbGUiIGZyb20gImZpbGUiLiAgT24gZmFpbHVyZQotLy8g
cmV0dXJuIG5vbi1PSy4gIE9uIHN1Y2Nlc3MgZmlsbCAqcmVzdWx0IGFuZCByZXR1cm4gT0suCi1l
eHRlcm4gU3RhdHVzIFJlYWRCbG9jayhSYW5kb21BY2Nlc3NGaWxlKiBmaWxlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUmVhZE9wdGlvbnMmIG9wdGlvbnMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBCbG9ja0hhbmRsZSYgaGFuZGxlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgQmxvY2tDb250ZW50cyogcmVzdWx0KTsKLQotLy8gSW1wbGVtZW50YXRpb24gZGV0YWls
cyBmb2xsb3cuICBDbGllbnRzIHNob3VsZCBpZ25vcmUsCi0KLWlubGluZSBCbG9ja0hhbmRsZTo6
QmxvY2tIYW5kbGUoKQotICAgIDogb2Zmc2V0Xyh+c3RhdGljX2Nhc3Q8dWludDY0X3Q+KDApKSwK
LSAgICAgIHNpemVfKH5zdGF0aWNfY2FzdDx1aW50NjRfdD4oMCkpIHsKLX0KLQotfSAgLy8gbmFt
ZXNwYWNlIGxldmVsZGIKLQotI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfVEFCTEVfRk9STUFU
X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2l0ZXJhdG9y
LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9pdGVyYXRvci5jYwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2QxYzg3Zi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2l0ZXJhdG9yLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNjcg
KzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgot
Ci0jaW5jbHVkZSAibGV2ZWxkYi9pdGVyYXRvci5oIgotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7Ci0K
LUl0ZXJhdG9yOjpJdGVyYXRvcigpIHsKLSAgY2xlYW51cF8uZnVuY3Rpb24gPSBOVUxMOwotICBj
bGVhbnVwXy5uZXh0ID0gTlVMTDsKLX0KLQotSXRlcmF0b3I6On5JdGVyYXRvcigpIHsKLSAgaWYg
KGNsZWFudXBfLmZ1bmN0aW9uICE9IE5VTEwpIHsKLSAgICAoKmNsZWFudXBfLmZ1bmN0aW9uKShj
bGVhbnVwXy5hcmcxLCBjbGVhbnVwXy5hcmcyKTsKLSAgICBmb3IgKENsZWFudXAqIGMgPSBjbGVh
bnVwXy5uZXh0OyBjICE9IE5VTEw7ICkgewotICAgICAgKCpjLT5mdW5jdGlvbikoYy0+YXJnMSwg
Yy0+YXJnMik7Ci0gICAgICBDbGVhbnVwKiBuZXh0ID0gYy0+bmV4dDsKLSAgICAgIGRlbGV0ZSBj
OwotICAgICAgYyA9IG5leHQ7Ci0gICAgfQotICB9Ci19Ci0KLXZvaWQgSXRlcmF0b3I6OlJlZ2lz
dGVyQ2xlYW51cChDbGVhbnVwRnVuY3Rpb24gZnVuYywgdm9pZCogYXJnMSwgdm9pZCogYXJnMikg
ewotICBhc3NlcnQoZnVuYyAhPSBOVUxMKTsKLSAgQ2xlYW51cCogYzsKLSAgaWYgKGNsZWFudXBf
LmZ1bmN0aW9uID09IE5VTEwpIHsKLSAgICBjID0gJmNsZWFudXBfOwotICB9IGVsc2UgewotICAg
IGMgPSBuZXcgQ2xlYW51cDsKLSAgICBjLT5uZXh0ID0gY2xlYW51cF8ubmV4dDsKLSAgICBjbGVh
bnVwXy5uZXh0ID0gYzsKLSAgfQotICBjLT5mdW5jdGlvbiA9IGZ1bmM7Ci0gIGMtPmFyZzEgPSBh
cmcxOwotICBjLT5hcmcyID0gYXJnMjsKLX0KLQotbmFtZXNwYWNlIHsKLWNsYXNzIEVtcHR5SXRl
cmF0b3IgOiBwdWJsaWMgSXRlcmF0b3IgewotIHB1YmxpYzoKLSAgRW1wdHlJdGVyYXRvcihjb25z
dCBTdGF0dXMmIHMpIDogc3RhdHVzXyhzKSB7IH0KLSAgdmlydHVhbCBib29sIFZhbGlkKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgdmlydHVhbCB2b2lkIFNlZWsoY29uc3QgU2xpY2UmIHRh
cmdldCkgeyB9Ci0gIHZpcnR1YWwgdm9pZCBTZWVrVG9GaXJzdCgpIHsgfQotICB2aXJ0dWFsIHZv
aWQgU2Vla1RvTGFzdCgpIHsgfQotICB2aXJ0dWFsIHZvaWQgTmV4dCgpIHsgYXNzZXJ0KGZhbHNl
KTsgfQotICB2aXJ0dWFsIHZvaWQgUHJldigpIHsgYXNzZXJ0KGZhbHNlKTsgfQotICBTbGljZSBr
ZXkoKSBjb25zdCB7IGFzc2VydChmYWxzZSk7IHJldHVybiBTbGljZSgpOyB9Ci0gIFNsaWNlIHZh
bHVlKCkgY29uc3QgeyBhc3NlcnQoZmFsc2UpOyByZXR1cm4gU2xpY2UoKTsgfQotICB2aXJ0dWFs
IFN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBzdGF0dXNfOyB9Ci0gcHJpdmF0ZToKLSAg
U3RhdHVzIHN0YXR1c187Ci19OwotfSAgLy8gbmFtZXNwYWNlCi0KLUl0ZXJhdG9yKiBOZXdFbXB0
eUl0ZXJhdG9yKCkgewotICByZXR1cm4gbmV3IEVtcHR5SXRlcmF0b3IoU3RhdHVzOjpPSygpKTsK
LX0KLQotSXRlcmF0b3IqIE5ld0Vycm9ySXRlcmF0b3IoY29uc3QgU3RhdHVzJiBzdGF0dXMpIHsK
LSAgcmV0dXJuIG5ldyBFbXB0eUl0ZXJhdG9yKHN0YXR1cyk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFj
ZSBsZXZlbGRiCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2l0
ZXJhdG9yX3dyYXBwZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvaXRlcmF0
b3Jfd3JhcHBlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTE2YjNkLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvaXRlcmF0b3Jfd3JhcHBl
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEx
IFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBm
b3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgotCi0jaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9UQUJM
RV9JVEVSQVRPUl9XUkFQUEVSX0hfCi0jZGVmaW5lIFNUT1JBR0VfTEVWRUxEQl9UQUJMRV9JVEVS
QVRPUl9XUkFQUEVSX0hfCi0KLW5hbWVzcGFjZSBsZXZlbGRiIHsKLQotLy8gQSBpbnRlcm5hbCB3
cmFwcGVyIGNsYXNzIHdpdGggYW4gaW50ZXJmYWNlIHNpbWlsYXIgdG8gSXRlcmF0b3IgdGhhdAot
Ly8gY2FjaGVzIHRoZSB2YWxpZCgpIGFuZCBrZXkoKSByZXN1bHRzIGZvciBhbiB1bmRlcmx5aW5n
IGl0ZXJhdG9yLgotLy8gVGhpcyBjYW4gaGVscCBhdm9pZCB2aXJ0dWFsIGZ1bmN0aW9uIGNhbGxz
IGFuZCBhbHNvIGdpdmVzIGJldHRlcgotLy8gY2FjaGUgbG9jYWxpdHkuCi1jbGFzcyBJdGVyYXRv
cldyYXBwZXIgewotIHB1YmxpYzoKLSAgSXRlcmF0b3JXcmFwcGVyKCk6IGl0ZXJfKE5VTEwpLCB2
YWxpZF8oZmFsc2UpIHsgfQotICBleHBsaWNpdCBJdGVyYXRvcldyYXBwZXIoSXRlcmF0b3IqIGl0
ZXIpOiBpdGVyXyhOVUxMKSB7Ci0gICAgU2V0KGl0ZXIpOwotICB9Ci0gIH5JdGVyYXRvcldyYXBw
ZXIoKSB7IGRlbGV0ZSBpdGVyXzsgfQotICBJdGVyYXRvciogaXRlcigpIGNvbnN0IHsgcmV0dXJu
IGl0ZXJfOyB9Ci0KLSAgLy8gVGFrZXMgb3duZXJzaGlwIG9mICJpdGVyIiBhbmQgd2lsbCBkZWxl
dGUgaXQgd2hlbiBkZXN0cm95ZWQsIG9yCi0gIC8vIHdoZW4gU2V0KCkgaXMgaW52b2tlZCBhZ2Fp
bi4KLSAgdm9pZCBTZXQoSXRlcmF0b3IqIGl0ZXIpIHsKLSAgICBkZWxldGUgaXRlcl87Ci0gICAg
aXRlcl8gPSBpdGVyOwotICAgIGlmIChpdGVyXyA9PSBOVUxMKSB7Ci0gICAgICB2YWxpZF8gPSBm
YWxzZTsKLSAgICB9IGVsc2UgewotICAgICAgVXBkYXRlKCk7Ci0gICAgfQotICB9Ci0KLQotICAv
LyBJdGVyYXRvciBpbnRlcmZhY2UgbWV0aG9kcwotICBib29sIFZhbGlkKCkgY29uc3QgICAgICAg
IHsgcmV0dXJuIHZhbGlkXzsgfQotICBTbGljZSBrZXkoKSBjb25zdCAgICAgICAgIHsgYXNzZXJ0
KFZhbGlkKCkpOyByZXR1cm4ga2V5XzsgfQotICBTbGljZSB2YWx1ZSgpIGNvbnN0ICAgICAgIHsg
YXNzZXJ0KFZhbGlkKCkpOyByZXR1cm4gaXRlcl8tPnZhbHVlKCk7IH0KLSAgLy8gTWV0aG9kcyBi
ZWxvdyByZXF1aXJlIGl0ZXIoKSAhPSBOVUxMCi0gIFN0YXR1cyBzdGF0dXMoKSBjb25zdCAgICAg
eyBhc3NlcnQoaXRlcl8pOyByZXR1cm4gaXRlcl8tPnN0YXR1cygpOyB9Ci0gIHZvaWQgTmV4dCgp
ICAgICAgICAgICAgICAgeyBhc3NlcnQoaXRlcl8pOyBpdGVyXy0+TmV4dCgpOyAgICAgICAgVXBk
YXRlKCk7IH0KLSAgdm9pZCBQcmV2KCkgICAgICAgICAgICAgICB7IGFzc2VydChpdGVyXyk7IGl0
ZXJfLT5QcmV2KCk7ICAgICAgICBVcGRhdGUoKTsgfQotICB2b2lkIFNlZWsoY29uc3QgU2xpY2Um
IGspIHsgYXNzZXJ0KGl0ZXJfKTsgaXRlcl8tPlNlZWsoayk7ICAgICAgIFVwZGF0ZSgpOyB9Ci0g
IHZvaWQgU2Vla1RvRmlyc3QoKSAgICAgICAgeyBhc3NlcnQoaXRlcl8pOyBpdGVyXy0+U2Vla1Rv
Rmlyc3QoKTsgVXBkYXRlKCk7IH0KLSAgdm9pZCBTZWVrVG9MYXN0KCkgICAgICAgICB7IGFzc2Vy
dChpdGVyXyk7IGl0ZXJfLT5TZWVrVG9MYXN0KCk7ICBVcGRhdGUoKTsgfQotCi0gcHJpdmF0ZToK
LSAgdm9pZCBVcGRhdGUoKSB7Ci0gICAgdmFsaWRfID0gaXRlcl8tPlZhbGlkKCk7Ci0gICAgaWYg
KHZhbGlkXykgewotICAgICAga2V5XyA9IGl0ZXJfLT5rZXkoKTsKLSAgICB9Ci0gIH0KLQotICBJ
dGVyYXRvciogaXRlcl87Ci0gIGJvb2wgdmFsaWRfOwotICBTbGljZSBrZXlfOwotfTsKLQotfSAg
Ly8gbmFtZXNwYWNlIGxldmVsZGIKLQotI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfVEFCTEVf
SVRFUkFUT1JfV1JBUFBFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxk
Yi90YWJsZS9tZXJnZXIuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL21lcmdl
ci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkZTRkYy4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL21lcmdlci5jYworKysgL2Rldi9udWxs
CkBAIC0xLDE5NyArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250
cmlidXRvcnMuCi0KLSNpbmNsdWRlICJ0YWJsZS9tZXJnZXIuaCIKLQotI2luY2x1ZGUgImxldmVs
ZGIvY29tcGFyYXRvci5oIgotI2luY2x1ZGUgImxldmVsZGIvaXRlcmF0b3IuaCIKLSNpbmNsdWRl
ICJ0YWJsZS9pdGVyYXRvcl93cmFwcGVyLmgiCi0KLW5hbWVzcGFjZSBsZXZlbGRiIHsKLQotbmFt
ZXNwYWNlIHsKLWNsYXNzIE1lcmdpbmdJdGVyYXRvciA6IHB1YmxpYyBJdGVyYXRvciB7Ci0gcHVi
bGljOgotICBNZXJnaW5nSXRlcmF0b3IoY29uc3QgQ29tcGFyYXRvciogY29tcGFyYXRvciwgSXRl
cmF0b3IqKiBjaGlsZHJlbiwgaW50IG4pCi0gICAgICA6IGNvbXBhcmF0b3JfKGNvbXBhcmF0b3Ip
LAotICAgICAgICBjaGlsZHJlbl8obmV3IEl0ZXJhdG9yV3JhcHBlcltuXSksCi0gICAgICAgIG5f
KG4pLAotICAgICAgICBjdXJyZW50XyhOVUxMKSwKLSAgICAgICAgZGlyZWN0aW9uXyhrRm9yd2Fy
ZCkgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICBjaGlsZHJlbl9b
aV0uU2V0KGNoaWxkcmVuW2ldKTsKLSAgICB9Ci0gIH0KLQotICB2aXJ0dWFsIH5NZXJnaW5nSXRl
cmF0b3IoKSB7Ci0gICAgZGVsZXRlW10gY2hpbGRyZW5fOwotICB9Ci0KLSAgdmlydHVhbCBib29s
IFZhbGlkKCkgY29uc3QgewotICAgIHJldHVybiAoY3VycmVudF8gIT0gTlVMTCk7Ci0gIH0KLQot
ICB2aXJ0dWFsIHZvaWQgU2Vla1RvRmlyc3QoKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu
XzsgaSsrKSB7Ci0gICAgICBjaGlsZHJlbl9baV0uU2Vla1RvRmlyc3QoKTsKLSAgICB9Ci0gICAg
RmluZFNtYWxsZXN0KCk7Ci0gICAgZGlyZWN0aW9uXyA9IGtGb3J3YXJkOwotICB9Ci0KLSAgdmly
dHVhbCB2b2lkIFNlZWtUb0xhc3QoKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuXzsgaSsr
KSB7Ci0gICAgICBjaGlsZHJlbl9baV0uU2Vla1RvTGFzdCgpOwotICAgIH0KLSAgICBGaW5kTGFy
Z2VzdCgpOwotICAgIGRpcmVjdGlvbl8gPSBrUmV2ZXJzZTsKLSAgfQotCi0gIHZpcnR1YWwgdm9p
ZCBTZWVrKGNvbnN0IFNsaWNlJiB0YXJnZXQpIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5f
OyBpKyspIHsKLSAgICAgIGNoaWxkcmVuX1tpXS5TZWVrKHRhcmdldCk7Ci0gICAgfQotICAgIEZp
bmRTbWFsbGVzdCgpOwotICAgIGRpcmVjdGlvbl8gPSBrRm9yd2FyZDsKLSAgfQotCi0gIHZpcnR1
YWwgdm9pZCBOZXh0KCkgewotICAgIGFzc2VydChWYWxpZCgpKTsKLQotICAgIC8vIEVuc3VyZSB0
aGF0IGFsbCBjaGlsZHJlbiBhcmUgcG9zaXRpb25lZCBhZnRlciBrZXkoKS4KLSAgICAvLyBJZiB3
ZSBhcmUgbW92aW5nIGluIHRoZSBmb3J3YXJkIGRpcmVjdGlvbiwgaXQgaXMgYWxyZWFkeQotICAg
IC8vIHRydWUgZm9yIGFsbCBvZiB0aGUgbm9uLWN1cnJlbnRfIGNoaWxkcmVuIHNpbmNlIGN1cnJl
bnRfIGlzCi0gICAgLy8gdGhlIHNtYWxsZXN0IGNoaWxkIGFuZCBrZXkoKSA9PSBjdXJyZW50Xy0+
a2V5KCkuICBPdGhlcndpc2UsCi0gICAgLy8gd2UgZXhwbGljaXRseSBwb3NpdGlvbiB0aGUgbm9u
LWN1cnJlbnRfIGNoaWxkcmVuLgotICAgIGlmIChkaXJlY3Rpb25fICE9IGtGb3J3YXJkKSB7Ci0g
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5fOyBpKyspIHsKLSAgICAgICAgSXRlcmF0b3JXcmFw
cGVyKiBjaGlsZCA9ICZjaGlsZHJlbl9baV07Ci0gICAgICAgIGlmIChjaGlsZCAhPSBjdXJyZW50
XykgewotICAgICAgICAgIGNoaWxkLT5TZWVrKGtleSgpKTsKLSAgICAgICAgICBpZiAoY2hpbGQt
PlZhbGlkKCkgJiYKLSAgICAgICAgICAgICAgY29tcGFyYXRvcl8tPkNvbXBhcmUoa2V5KCksIGNo
aWxkLT5rZXkoKSkgPT0gMCkgewotICAgICAgICAgICAgY2hpbGQtPk5leHQoKTsKLSAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGRpcmVjdGlvbl8gPSBrRm9yd2FyZDsKLSAg
ICB9Ci0KLSAgICBjdXJyZW50Xy0+TmV4dCgpOwotICAgIEZpbmRTbWFsbGVzdCgpOwotICB9Ci0K
LSAgdmlydHVhbCB2b2lkIFByZXYoKSB7Ci0gICAgYXNzZXJ0KFZhbGlkKCkpOwotCi0gICAgLy8g
RW5zdXJlIHRoYXQgYWxsIGNoaWxkcmVuIGFyZSBwb3NpdGlvbmVkIGJlZm9yZSBrZXkoKS4KLSAg
ICAvLyBJZiB3ZSBhcmUgbW92aW5nIGluIHRoZSByZXZlcnNlIGRpcmVjdGlvbiwgaXQgaXMgYWxy
ZWFkeQotICAgIC8vIHRydWUgZm9yIGFsbCBvZiB0aGUgbm9uLWN1cnJlbnRfIGNoaWxkcmVuIHNp
bmNlIGN1cnJlbnRfIGlzCi0gICAgLy8gdGhlIGxhcmdlc3QgY2hpbGQgYW5kIGtleSgpID09IGN1
cnJlbnRfLT5rZXkoKS4gIE90aGVyd2lzZSwKLSAgICAvLyB3ZSBleHBsaWNpdGx5IHBvc2l0aW9u
IHRoZSBub24tY3VycmVudF8gY2hpbGRyZW4uCi0gICAgaWYgKGRpcmVjdGlvbl8gIT0ga1JldmVy
c2UpIHsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbl87IGkrKykgewotICAgICAgICBJdGVy
YXRvcldyYXBwZXIqIGNoaWxkID0gJmNoaWxkcmVuX1tpXTsKLSAgICAgICAgaWYgKGNoaWxkICE9
IGN1cnJlbnRfKSB7Ci0gICAgICAgICAgY2hpbGQtPlNlZWsoa2V5KCkpOwotICAgICAgICAgIGlm
IChjaGlsZC0+VmFsaWQoKSkgewotICAgICAgICAgICAgLy8gQ2hpbGQgaXMgYXQgZmlyc3QgZW50
cnkgPj0ga2V5KCkuICBTdGVwIGJhY2sgb25lIHRvIGJlIDwga2V5KCkKLSAgICAgICAgICAgIGNo
aWxkLT5QcmV2KCk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIENoaWxkIGhh
cyBubyBlbnRyaWVzID49IGtleSgpLiAgUG9zaXRpb24gYXQgbGFzdCBlbnRyeS4KLSAgICAgICAg
ICAgIGNoaWxkLT5TZWVrVG9MYXN0KCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgICBkaXJlY3Rpb25fID0ga1JldmVyc2U7Ci0gICAgfQotCi0gICAgY3VycmVudF8tPlBy
ZXYoKTsKLSAgICBGaW5kTGFyZ2VzdCgpOwotICB9Ci0KLSAgdmlydHVhbCBTbGljZSBrZXkoKSBj
b25zdCB7Ci0gICAgYXNzZXJ0KFZhbGlkKCkpOwotICAgIHJldHVybiBjdXJyZW50Xy0+a2V5KCk7
Ci0gIH0KLQotICB2aXJ0dWFsIFNsaWNlIHZhbHVlKCkgY29uc3QgewotICAgIGFzc2VydChWYWxp
ZCgpKTsKLSAgICByZXR1cm4gY3VycmVudF8tPnZhbHVlKCk7Ci0gIH0KLQotICB2aXJ0dWFsIFN0
YXR1cyBzdGF0dXMoKSBjb25zdCB7Ci0gICAgU3RhdHVzIHN0YXR1czsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG5fOyBpKyspIHsKLSAgICAgIHN0YXR1cyA9IGNoaWxkcmVuX1tpXS5zdGF0dXMo
KTsKLSAgICAgIGlmICghc3RhdHVzLm9rKCkpIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0g
ICAgfQotICAgIHJldHVybiBzdGF0dXM7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIHZvaWQgRmluZFNt
YWxsZXN0KCk7Ci0gIHZvaWQgRmluZExhcmdlc3QoKTsKLQotICAvLyBXZSBtaWdodCB3YW50IHRv
IHVzZSBhIGhlYXAgaW4gY2FzZSB0aGVyZSBhcmUgbG90cyBvZiBjaGlsZHJlbi4KLSAgLy8gRm9y
IG5vdyB3ZSB1c2UgYSBzaW1wbGUgYXJyYXkgc2luY2Ugd2UgZXhwZWN0IGEgdmVyeSBzbWFsbCBu
dW1iZXIKLSAgLy8gb2YgY2hpbGRyZW4gaW4gbGV2ZWxkYi4KLSAgY29uc3QgQ29tcGFyYXRvciog
Y29tcGFyYXRvcl87Ci0gIEl0ZXJhdG9yV3JhcHBlciogY2hpbGRyZW5fOwotICBpbnQgbl87Ci0g
IEl0ZXJhdG9yV3JhcHBlciogY3VycmVudF87Ci0KLSAgLy8gV2hpY2ggZGlyZWN0aW9uIGlzIHRo
ZSBpdGVyYXRvciBtb3Zpbmc/Ci0gIGVudW0gRGlyZWN0aW9uIHsKLSAgICBrRm9yd2FyZCwKLSAg
ICBrUmV2ZXJzZQotICB9OwotICBEaXJlY3Rpb24gZGlyZWN0aW9uXzsKLX07Ci0KLXZvaWQgTWVy
Z2luZ0l0ZXJhdG9yOjpGaW5kU21hbGxlc3QoKSB7Ci0gIEl0ZXJhdG9yV3JhcHBlciogc21hbGxl
c3QgPSBOVUxMOwotICBmb3IgKGludCBpID0gMDsgaSA8IG5fOyBpKyspIHsKLSAgICBJdGVyYXRv
cldyYXBwZXIqIGNoaWxkID0gJmNoaWxkcmVuX1tpXTsKLSAgICBpZiAoY2hpbGQtPlZhbGlkKCkp
IHsKLSAgICAgIGlmIChzbWFsbGVzdCA9PSBOVUxMKSB7Ci0gICAgICAgIHNtYWxsZXN0ID0gY2hp
bGQ7Ci0gICAgICB9IGVsc2UgaWYgKGNvbXBhcmF0b3JfLT5Db21wYXJlKGNoaWxkLT5rZXkoKSwg
c21hbGxlc3QtPmtleSgpKSA8IDApIHsKLSAgICAgICAgc21hbGxlc3QgPSBjaGlsZDsKLSAgICAg
IH0KLSAgICB9Ci0gIH0KLSAgY3VycmVudF8gPSBzbWFsbGVzdDsKLX0KLQotdm9pZCBNZXJnaW5n
SXRlcmF0b3I6OkZpbmRMYXJnZXN0KCkgewotICBJdGVyYXRvcldyYXBwZXIqIGxhcmdlc3QgPSBO
VUxMOwotICBmb3IgKGludCBpID0gbl8tMTsgaSA+PSAwOyBpLS0pIHsKLSAgICBJdGVyYXRvcldy
YXBwZXIqIGNoaWxkID0gJmNoaWxkcmVuX1tpXTsKLSAgICBpZiAoY2hpbGQtPlZhbGlkKCkpIHsK
LSAgICAgIGlmIChsYXJnZXN0ID09IE5VTEwpIHsKLSAgICAgICAgbGFyZ2VzdCA9IGNoaWxkOwot
ICAgICAgfSBlbHNlIGlmIChjb21wYXJhdG9yXy0+Q29tcGFyZShjaGlsZC0+a2V5KCksIGxhcmdl
c3QtPmtleSgpKSA+IDApIHsKLSAgICAgICAgbGFyZ2VzdCA9IGNoaWxkOwotICAgICAgfQotICAg
IH0KLSAgfQotICBjdXJyZW50XyA9IGxhcmdlc3Q7Ci19Ci19ICAvLyBuYW1lc3BhY2UKLQotSXRl
cmF0b3IqIE5ld01lcmdpbmdJdGVyYXRvcihjb25zdCBDb21wYXJhdG9yKiBjbXAsIEl0ZXJhdG9y
KiogbGlzdCwgaW50IG4pIHsKLSAgYXNzZXJ0KG4gPj0gMCk7Ci0gIGlmIChuID09IDApIHsKLSAg
ICByZXR1cm4gTmV3RW1wdHlJdGVyYXRvcigpOwotICB9IGVsc2UgaWYgKG4gPT0gMSkgewotICAg
IHJldHVybiBsaXN0WzBdOwotICB9IGVsc2UgewotICAgIHJldHVybiBuZXcgTWVyZ2luZ0l0ZXJh
dG9yKGNtcCwgbGlzdCwgbik7Ci0gIH0KLX0KLQotfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvbWVyZ2VyLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL21lcmdlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA5MWRkZDgwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVs
ZGIvdGFibGUvbWVyZ2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vLyBDb3B5
cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUg
QVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCi0KLSNpZm5kZWYgU1RPUkFH
RV9MRVZFTERCX1RBQkxFX01FUkdFUl9IXwotI2RlZmluZSBTVE9SQUdFX0xFVkVMREJfVEFCTEVf
TUVSR0VSX0hfCi0KLW5hbWVzcGFjZSBsZXZlbGRiIHsKLQotY2xhc3MgQ29tcGFyYXRvcjsKLWNs
YXNzIEl0ZXJhdG9yOwotCi0vLyBSZXR1cm4gYW4gaXRlcmF0b3IgdGhhdCBwcm92aWRlZCB0aGUg
dW5pb24gb2YgdGhlIGRhdGEgaW4KLS8vIGNoaWxkcmVuWzAsbi0xXS4gIFRha2VzIG93bmVyc2hp
cCBvZiB0aGUgY2hpbGQgaXRlcmF0b3JzIGFuZAotLy8gd2lsbCBkZWxldGUgdGhlbSB3aGVuIHRo
ZSByZXN1bHQgaXRlcmF0b3IgaXMgZGVsZXRlZC4KLS8vCi0vLyBUaGUgcmVzdWx0IGRvZXMgbm8g
ZHVwbGljYXRlIHN1cHByZXNzaW9uLiAgSS5lLiwgaWYgYSBwYXJ0aWN1bGFyCi0vLyBrZXkgaXMg
cHJlc2VudCBpbiBLIGNoaWxkIGl0ZXJhdG9ycywgaXQgd2lsbCBiZSB5aWVsZGVkIEsgdGltZXMu
Ci0vLwotLy8gUkVRVUlSRVM6IG4gPj0gMAotZXh0ZXJuIEl0ZXJhdG9yKiBOZXdNZXJnaW5nSXRl
cmF0b3IoCi0gICAgY29uc3QgQ29tcGFyYXRvciogY29tcGFyYXRvciwgSXRlcmF0b3IqKiBjaGls
ZHJlbiwgaW50IG4pOwotCi19ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgotCi0jZW5kaWYgIC8vIFNU
T1JBR0VfTEVWRUxEQl9UQUJMRV9NRVJHRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xldmVsZGIvdGFibGUvdGFibGUuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3Rh
YmxlL3RhYmxlLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmQ2ZDNhLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvdGFibGUuY2MKKysrIC9k
ZXYvbnVsbApAQCAtMSwyNzYgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZl
bERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMg
b2YgY29udHJpYnV0b3JzLgotCi0jaW5jbHVkZSAibGV2ZWxkYi90YWJsZS5oIgotCi0jaW5jbHVk
ZSAibGV2ZWxkYi9jYWNoZS5oIgotI2luY2x1ZGUgImxldmVsZGIvY29tcGFyYXRvci5oIgotI2lu
Y2x1ZGUgImxldmVsZGIvZW52LmgiCi0jaW5jbHVkZSAibGV2ZWxkYi9maWx0ZXJfcG9saWN5Lmgi
Ci0jaW5jbHVkZSAibGV2ZWxkYi9vcHRpb25zLmgiCi0jaW5jbHVkZSAidGFibGUvYmxvY2suaCIK
LSNpbmNsdWRlICJ0YWJsZS9maWx0ZXJfYmxvY2suaCIKLSNpbmNsdWRlICJ0YWJsZS9mb3JtYXQu
aCIKLSNpbmNsdWRlICJ0YWJsZS90d29fbGV2ZWxfaXRlcmF0b3IuaCIKLSNpbmNsdWRlICJ1dGls
L2NvZGluZy5oIgotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7Ci0KLXN0cnVjdCBUYWJsZTo6UmVwIHsK
LSAgflJlcCgpIHsKLSAgICBkZWxldGUgZmlsdGVyOwotICAgIGRlbGV0ZSBbXSBmaWx0ZXJfZGF0
YTsKLSAgICBkZWxldGUgaW5kZXhfYmxvY2s7Ci0gIH0KLQotICBPcHRpb25zIG9wdGlvbnM7Ci0g
IFN0YXR1cyBzdGF0dXM7Ci0gIFJhbmRvbUFjY2Vzc0ZpbGUqIGZpbGU7Ci0gIHVpbnQ2NF90IGNh
Y2hlX2lkOwotICBGaWx0ZXJCbG9ja1JlYWRlciogZmlsdGVyOwotICBjb25zdCBjaGFyKiBmaWx0
ZXJfZGF0YTsKLQotICBCbG9ja0hhbmRsZSBtZXRhaW5kZXhfaGFuZGxlOyAgLy8gSGFuZGxlIHRv
IG1ldGFpbmRleF9ibG9jazogc2F2ZWQgZnJvbSBmb290ZXIKLSAgQmxvY2sqIGluZGV4X2Jsb2Nr
OwotfTsKLQotU3RhdHVzIFRhYmxlOjpPcGVuKGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMsCi0gICAg
ICAgICAgICAgICAgICAgUmFuZG9tQWNjZXNzRmlsZSogZmlsZSwKLSAgICAgICAgICAgICAgICAg
ICB1aW50NjRfdCBzaXplLAotICAgICAgICAgICAgICAgICAgIFRhYmxlKiogdGFibGUpIHsKLSAg
KnRhYmxlID0gTlVMTDsKLSAgaWYgKHNpemUgPCBGb290ZXI6OmtFbmNvZGVkTGVuZ3RoKSB7Ci0g
ICAgcmV0dXJuIFN0YXR1czo6SW52YWxpZEFyZ3VtZW50KCJmaWxlIGlzIHRvbyBzaG9ydCB0byBi
ZSBhbiBzc3RhYmxlIik7Ci0gIH0KLQotICBjaGFyIGZvb3Rlcl9zcGFjZVtGb290ZXI6OmtFbmNv
ZGVkTGVuZ3RoXTsKLSAgU2xpY2UgZm9vdGVyX2lucHV0OwotICBTdGF0dXMgcyA9IGZpbGUtPlJl
YWQoc2l6ZSAtIEZvb3Rlcjo6a0VuY29kZWRMZW5ndGgsIEZvb3Rlcjo6a0VuY29kZWRMZW5ndGgs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAmZm9vdGVyX2lucHV0LCBmb290ZXJfc3BhY2UpOwot
ICBpZiAoIXMub2soKSkgcmV0dXJuIHM7Ci0KLSAgRm9vdGVyIGZvb3RlcjsKLSAgcyA9IGZvb3Rl
ci5EZWNvZGVGcm9tKCZmb290ZXJfaW5wdXQpOwotICBpZiAoIXMub2soKSkgcmV0dXJuIHM7Ci0K
LSAgLy8gUmVhZCB0aGUgaW5kZXggYmxvY2sKLSAgQmxvY2tDb250ZW50cyBjb250ZW50czsKLSAg
QmxvY2sqIGluZGV4X2Jsb2NrID0gTlVMTDsKLSAgaWYgKHMub2soKSkgewotICAgIHMgPSBSZWFk
QmxvY2soZmlsZSwgUmVhZE9wdGlvbnMoKSwgZm9vdGVyLmluZGV4X2hhbmRsZSgpLCAmY29udGVu
dHMpOwotICAgIGlmIChzLm9rKCkpIHsKLSAgICAgIGluZGV4X2Jsb2NrID0gbmV3IEJsb2NrKGNv
bnRlbnRzKTsKLSAgICB9Ci0gIH0KLQotICBpZiAocy5vaygpKSB7Ci0gICAgLy8gV2UndmUgc3Vj
Y2Vzc2Z1bGx5IHJlYWQgdGhlIGZvb3RlciBhbmQgdGhlIGluZGV4IGJsb2NrOiB3ZSdyZQotICAg
IC8vIHJlYWR5IHRvIHNlcnZlIHJlcXVlc3RzLgotICAgIFJlcCogcmVwID0gbmV3IFRhYmxlOjpS
ZXA7Ci0gICAgcmVwLT5vcHRpb25zID0gb3B0aW9uczsKLSAgICByZXAtPmZpbGUgPSBmaWxlOwot
ICAgIHJlcC0+bWV0YWluZGV4X2hhbmRsZSA9IGZvb3Rlci5tZXRhaW5kZXhfaGFuZGxlKCk7Ci0g
ICAgcmVwLT5pbmRleF9ibG9jayA9IGluZGV4X2Jsb2NrOwotICAgIHJlcC0+Y2FjaGVfaWQgPSAo
b3B0aW9ucy5ibG9ja19jYWNoZSA/IG9wdGlvbnMuYmxvY2tfY2FjaGUtPk5ld0lkKCkgOiAwKTsK
LSAgICByZXAtPmZpbHRlcl9kYXRhID0gTlVMTDsKLSAgICByZXAtPmZpbHRlciA9IE5VTEw7Ci0g
ICAgKnRhYmxlID0gbmV3IFRhYmxlKHJlcCk7Ci0gICAgKCp0YWJsZSktPlJlYWRNZXRhKGZvb3Rl
cik7Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKGluZGV4X2Jsb2NrKSBkZWxldGUgaW5kZXhfYmxvY2s7
Ci0gIH0KLQotICByZXR1cm4gczsKLX0KLQotdm9pZCBUYWJsZTo6UmVhZE1ldGEoY29uc3QgRm9v
dGVyJiBmb290ZXIpIHsKLSAgaWYgKHJlcF8tPm9wdGlvbnMuZmlsdGVyX3BvbGljeSA9PSBOVUxM
KSB7Ci0gICAgcmV0dXJuOyAgLy8gRG8gbm90IG5lZWQgYW55IG1ldGFkYXRhCi0gIH0KLQotICAv
LyBUT0RPKHNhbmpheSk6IFNraXAgdGhpcyBpZiBmb290ZXIubWV0YWluZGV4X2hhbmRsZSgpIHNp
emUgaW5kaWNhdGVzCi0gIC8vIGl0IGlzIGFuIGVtcHR5IGJsb2NrLgotICBSZWFkT3B0aW9ucyBv
cHQ7Ci0gIEJsb2NrQ29udGVudHMgY29udGVudHM7Ci0gIGlmICghUmVhZEJsb2NrKHJlcF8tPmZp
bGUsIG9wdCwgZm9vdGVyLm1ldGFpbmRleF9oYW5kbGUoKSwgJmNvbnRlbnRzKS5vaygpKSB7Ci0g
ICAgLy8gRG8gbm90IHByb3BhZ2F0ZSBlcnJvcnMgc2luY2UgbWV0YSBpbmZvIGlzIG5vdCBuZWVk
ZWQgZm9yIG9wZXJhdGlvbgotICAgIHJldHVybjsKLSAgfQotICBCbG9jayogbWV0YSA9IG5ldyBC
bG9jayhjb250ZW50cyk7Ci0KLSAgSXRlcmF0b3IqIGl0ZXIgPSBtZXRhLT5OZXdJdGVyYXRvcihC
eXRld2lzZUNvbXBhcmF0b3IoKSk7Ci0gIHN0ZDo6c3RyaW5nIGtleSA9ICJmaWx0ZXIuIjsKLSAg
a2V5LmFwcGVuZChyZXBfLT5vcHRpb25zLmZpbHRlcl9wb2xpY3ktPk5hbWUoKSk7Ci0gIGl0ZXIt
PlNlZWsoa2V5KTsKLSAgaWYgKGl0ZXItPlZhbGlkKCkgJiYgaXRlci0+a2V5KCkgPT0gU2xpY2Uo
a2V5KSkgewotICAgIFJlYWRGaWx0ZXIoaXRlci0+dmFsdWUoKSk7Ci0gIH0KLSAgZGVsZXRlIGl0
ZXI7Ci0gIGRlbGV0ZSBtZXRhOwotfQotCi12b2lkIFRhYmxlOjpSZWFkRmlsdGVyKGNvbnN0IFNs
aWNlJiBmaWx0ZXJfaGFuZGxlX3ZhbHVlKSB7Ci0gIFNsaWNlIHYgPSBmaWx0ZXJfaGFuZGxlX3Zh
bHVlOwotICBCbG9ja0hhbmRsZSBmaWx0ZXJfaGFuZGxlOwotICBpZiAoIWZpbHRlcl9oYW5kbGUu
RGVjb2RlRnJvbSgmdikub2soKSkgewotICAgIHJldHVybjsKLSAgfQotCi0gIC8vIFdlIG1pZ2h0
IHdhbnQgdG8gdW5pZnkgd2l0aCBSZWFkQmxvY2soKSBpZiB3ZSBzdGFydAotICAvLyByZXF1aXJp
bmcgY2hlY2tzdW0gdmVyaWZpY2F0aW9uIGluIFRhYmxlOjpPcGVuLgotICBSZWFkT3B0aW9ucyBv
cHQ7Ci0gIEJsb2NrQ29udGVudHMgYmxvY2s7Ci0gIGlmICghUmVhZEJsb2NrKHJlcF8tPmZpbGUs
IG9wdCwgZmlsdGVyX2hhbmRsZSwgJmJsb2NrKS5vaygpKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0g
IGlmIChibG9jay5oZWFwX2FsbG9jYXRlZCkgewotICAgIHJlcF8tPmZpbHRlcl9kYXRhID0gYmxv
Y2suZGF0YS5kYXRhKCk7ICAgICAvLyBXaWxsIG5lZWQgdG8gZGVsZXRlIGxhdGVyCi0gIH0KLSAg
cmVwXy0+ZmlsdGVyID0gbmV3IEZpbHRlckJsb2NrUmVhZGVyKHJlcF8tPm9wdGlvbnMuZmlsdGVy
X3BvbGljeSwgYmxvY2suZGF0YSk7Ci19Ci0KLVRhYmxlOjp+VGFibGUoKSB7Ci0gIGRlbGV0ZSBy
ZXBfOwotfQotCi1zdGF0aWMgdm9pZCBEZWxldGVCbG9jayh2b2lkKiBhcmcsIHZvaWQqIGlnbm9y
ZWQpIHsKLSAgZGVsZXRlIHJlaW50ZXJwcmV0X2Nhc3Q8QmxvY2sqPihhcmcpOwotfQotCi1zdGF0
aWMgdm9pZCBEZWxldGVDYWNoZWRCbG9jayhjb25zdCBTbGljZSYga2V5LCB2b2lkKiB2YWx1ZSkg
ewotICBCbG9jayogYmxvY2sgPSByZWludGVycHJldF9jYXN0PEJsb2NrKj4odmFsdWUpOwotICBk
ZWxldGUgYmxvY2s7Ci19Ci0KLXN0YXRpYyB2b2lkIFJlbGVhc2VCbG9jayh2b2lkKiBhcmcsIHZv
aWQqIGgpIHsKLSAgQ2FjaGUqIGNhY2hlID0gcmVpbnRlcnByZXRfY2FzdDxDYWNoZSo+KGFyZyk7
Ci0gIENhY2hlOjpIYW5kbGUqIGhhbmRsZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2FjaGU6OkhhbmRs
ZSo+KGgpOwotICBjYWNoZS0+UmVsZWFzZShoYW5kbGUpOwotfQotCi0vLyBDb252ZXJ0IGFuIGlu
ZGV4IGl0ZXJhdG9yIHZhbHVlIChpLmUuLCBhbiBlbmNvZGVkIEJsb2NrSGFuZGxlKQotLy8gaW50
byBhbiBpdGVyYXRvciBvdmVyIHRoZSBjb250ZW50cyBvZiB0aGUgY29ycmVzcG9uZGluZyBibG9j
ay4KLUl0ZXJhdG9yKiBUYWJsZTo6QmxvY2tSZWFkZXIodm9pZCogYXJnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBSZWFkT3B0aW9ucyYgb3B0aW9ucywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU2xpY2UmIGluZGV4X3ZhbHVlKSB7Ci0gIFRhYmxlKiB0
YWJsZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VGFibGUqPihhcmcpOwotICBDYWNoZSogYmxvY2tfY2Fj
aGUgPSB0YWJsZS0+cmVwXy0+b3B0aW9ucy5ibG9ja19jYWNoZTsKLSAgQmxvY2sqIGJsb2NrID0g
TlVMTDsKLSAgQ2FjaGU6OkhhbmRsZSogY2FjaGVfaGFuZGxlID0gTlVMTDsKLQotICBCbG9ja0hh
bmRsZSBoYW5kbGU7Ci0gIFNsaWNlIGlucHV0ID0gaW5kZXhfdmFsdWU7Ci0gIFN0YXR1cyBzID0g
aGFuZGxlLkRlY29kZUZyb20oJmlucHV0KTsKLSAgLy8gV2UgaW50ZW50aW9uYWxseSBhbGxvdyBl
eHRyYSBzdHVmZiBpbiBpbmRleF92YWx1ZSBzbyB0aGF0IHdlCi0gIC8vIGNhbiBhZGQgbW9yZSBm
ZWF0dXJlcyBpbiB0aGUgZnV0dXJlLgotCi0gIGlmIChzLm9rKCkpIHsKLSAgICBCbG9ja0NvbnRl
bnRzIGNvbnRlbnRzOwotICAgIGlmIChibG9ja19jYWNoZSAhPSBOVUxMKSB7Ci0gICAgICBjaGFy
IGNhY2hlX2tleV9idWZmZXJbMTZdOwotICAgICAgRW5jb2RlRml4ZWQ2NChjYWNoZV9rZXlfYnVm
ZmVyLCB0YWJsZS0+cmVwXy0+Y2FjaGVfaWQpOwotICAgICAgRW5jb2RlRml4ZWQ2NChjYWNoZV9r
ZXlfYnVmZmVyKzgsIGhhbmRsZS5vZmZzZXQoKSk7Ci0gICAgICBTbGljZSBrZXkoY2FjaGVfa2V5
X2J1ZmZlciwgc2l6ZW9mKGNhY2hlX2tleV9idWZmZXIpKTsKLSAgICAgIGNhY2hlX2hhbmRsZSA9
IGJsb2NrX2NhY2hlLT5Mb29rdXAoa2V5KTsKLSAgICAgIGlmIChjYWNoZV9oYW5kbGUgIT0gTlVM
TCkgewotICAgICAgICBibG9jayA9IHJlaW50ZXJwcmV0X2Nhc3Q8QmxvY2sqPihibG9ja19jYWNo
ZS0+VmFsdWUoY2FjaGVfaGFuZGxlKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzID0gUmVh
ZEJsb2NrKHRhYmxlLT5yZXBfLT5maWxlLCBvcHRpb25zLCBoYW5kbGUsICZjb250ZW50cyk7Ci0g
ICAgICAgIGlmIChzLm9rKCkpIHsKLSAgICAgICAgICBibG9jayA9IG5ldyBCbG9jayhjb250ZW50
cyk7Ci0gICAgICAgICAgaWYgKGNvbnRlbnRzLmNhY2hhYmxlICYmIG9wdGlvbnMuZmlsbF9jYWNo
ZSkgewotICAgICAgICAgICAgY2FjaGVfaGFuZGxlID0gYmxvY2tfY2FjaGUtPkluc2VydCgKLSAg
ICAgICAgICAgICAgICBrZXksIGJsb2NrLCBibG9jay0+c2l6ZSgpLCAmRGVsZXRlQ2FjaGVkQmxv
Y2spOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAg
ICBzID0gUmVhZEJsb2NrKHRhYmxlLT5yZXBfLT5maWxlLCBvcHRpb25zLCBoYW5kbGUsICZjb250
ZW50cyk7Ci0gICAgICBpZiAocy5vaygpKSB7Ci0gICAgICAgIGJsb2NrID0gbmV3IEJsb2NrKGNv
bnRlbnRzKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBJdGVyYXRvciogaXRlcjsKLSAgaWYg
KGJsb2NrICE9IE5VTEwpIHsKLSAgICBpdGVyID0gYmxvY2stPk5ld0l0ZXJhdG9yKHRhYmxlLT5y
ZXBfLT5vcHRpb25zLmNvbXBhcmF0b3IpOwotICAgIGlmIChjYWNoZV9oYW5kbGUgPT0gTlVMTCkg
ewotICAgICAgaXRlci0+UmVnaXN0ZXJDbGVhbnVwKCZEZWxldGVCbG9jaywgYmxvY2ssIE5VTEwp
OwotICAgIH0gZWxzZSB7Ci0gICAgICBpdGVyLT5SZWdpc3RlckNsZWFudXAoJlJlbGVhc2VCbG9j
aywgYmxvY2tfY2FjaGUsIGNhY2hlX2hhbmRsZSk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGl0
ZXIgPSBOZXdFcnJvckl0ZXJhdG9yKHMpOwotICB9Ci0gIHJldHVybiBpdGVyOwotfQotCi1JdGVy
YXRvciogVGFibGU6Ok5ld0l0ZXJhdG9yKGNvbnN0IFJlYWRPcHRpb25zJiBvcHRpb25zKSBjb25z
dCB7Ci0gIHJldHVybiBOZXdUd29MZXZlbEl0ZXJhdG9yKAotICAgICAgcmVwXy0+aW5kZXhfYmxv
Y2stPk5ld0l0ZXJhdG9yKHJlcF8tPm9wdGlvbnMuY29tcGFyYXRvciksCi0gICAgICAmVGFibGU6
OkJsb2NrUmVhZGVyLCBjb25zdF9jYXN0PFRhYmxlKj4odGhpcyksIG9wdGlvbnMpOwotfQotCi1T
dGF0dXMgVGFibGU6OkludGVybmFsR2V0KGNvbnN0IFJlYWRPcHRpb25zJiBvcHRpb25zLCBjb25z
dCBTbGljZSYgaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICB2b2lkICgqc2F2ZXIpKHZvaWQqLCBjb25zdCBTbGljZSYsIGNv
bnN0IFNsaWNlJikpIHsKLSAgU3RhdHVzIHM7Ci0gIEl0ZXJhdG9yKiBpaXRlciA9IHJlcF8tPmlu
ZGV4X2Jsb2NrLT5OZXdJdGVyYXRvcihyZXBfLT5vcHRpb25zLmNvbXBhcmF0b3IpOwotICBpaXRl
ci0+U2VlayhrKTsKLSAgaWYgKGlpdGVyLT5WYWxpZCgpKSB7Ci0gICAgU2xpY2UgaGFuZGxlX3Zh
bHVlID0gaWl0ZXItPnZhbHVlKCk7Ci0gICAgRmlsdGVyQmxvY2tSZWFkZXIqIGZpbHRlciA9IHJl
cF8tPmZpbHRlcjsKLSAgICBCbG9ja0hhbmRsZSBoYW5kbGU7Ci0gICAgaWYgKGZpbHRlciAhPSBO
VUxMICYmCi0gICAgICAgIGhhbmRsZS5EZWNvZGVGcm9tKCZoYW5kbGVfdmFsdWUpLm9rKCkgJiYK
LSAgICAgICAgIWZpbHRlci0+S2V5TWF5TWF0Y2goaGFuZGxlLm9mZnNldCgpLCBrKSkgewotICAg
ICAgLy8gTm90IGZvdW5kCi0gICAgfSBlbHNlIHsKLSAgICAgIFNsaWNlIGhhbmRsZSA9IGlpdGVy
LT52YWx1ZSgpOwotICAgICAgSXRlcmF0b3IqIGJsb2NrX2l0ZXIgPSBCbG9ja1JlYWRlcih0aGlz
LCBvcHRpb25zLCBpaXRlci0+dmFsdWUoKSk7Ci0gICAgICBibG9ja19pdGVyLT5TZWVrKGspOwot
ICAgICAgaWYgKGJsb2NrX2l0ZXItPlZhbGlkKCkpIHsKLSAgICAgICAgKCpzYXZlcikoYXJnLCBi
bG9ja19pdGVyLT5rZXkoKSwgYmxvY2tfaXRlci0+dmFsdWUoKSk7Ci0gICAgICB9Ci0gICAgICBz
ID0gYmxvY2tfaXRlci0+c3RhdHVzKCk7Ci0gICAgICBkZWxldGUgYmxvY2tfaXRlcjsKLSAgICB9
Ci0gIH0KLSAgaWYgKHMub2soKSkgewotICAgIHMgPSBpaXRlci0+c3RhdHVzKCk7Ci0gIH0KLSAg
ZGVsZXRlIGlpdGVyOwotICByZXR1cm4gczsKLX0KLQotCi11aW50NjRfdCBUYWJsZTo6QXBwcm94
aW1hdGVPZmZzZXRPZihjb25zdCBTbGljZSYga2V5KSBjb25zdCB7Ci0gIEl0ZXJhdG9yKiBpbmRl
eF9pdGVyID0KLSAgICAgIHJlcF8tPmluZGV4X2Jsb2NrLT5OZXdJdGVyYXRvcihyZXBfLT5vcHRp
b25zLmNvbXBhcmF0b3IpOwotICBpbmRleF9pdGVyLT5TZWVrKGtleSk7Ci0gIHVpbnQ2NF90IHJl
c3VsdDsKLSAgaWYgKGluZGV4X2l0ZXItPlZhbGlkKCkpIHsKLSAgICBCbG9ja0hhbmRsZSBoYW5k
bGU7Ci0gICAgU2xpY2UgaW5wdXQgPSBpbmRleF9pdGVyLT52YWx1ZSgpOwotICAgIFN0YXR1cyBz
ID0gaGFuZGxlLkRlY29kZUZyb20oJmlucHV0KTsKLSAgICBpZiAocy5vaygpKSB7Ci0gICAgICBy
ZXN1bHQgPSBoYW5kbGUub2Zmc2V0KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIFN0cmFuZ2U6
IHdlIGNhbid0IGRlY29kZSB0aGUgYmxvY2sgaGFuZGxlIGluIHRoZSBpbmRleCBibG9jay4KLSAg
ICAgIC8vIFdlJ2xsIGp1c3QgcmV0dXJuIHRoZSBvZmZzZXQgb2YgdGhlIG1ldGFpbmRleCBibG9j
aywgd2hpY2ggaXMKLSAgICAgIC8vIGNsb3NlIHRvIHRoZSB3aG9sZSBmaWxlIHNpemUgZm9yIHRo
aXMgY2FzZS4KLSAgICAgIHJlc3VsdCA9IHJlcF8tPm1ldGFpbmRleF9oYW5kbGUub2Zmc2V0KCk7
Ci0gICAgfQotICB9IGVsc2UgewotICAgIC8vIGtleSBpcyBwYXN0IHRoZSBsYXN0IGtleSBpbiB0
aGUgZmlsZS4gIEFwcHJveGltYXRlIHRoZSBvZmZzZXQKLSAgICAvLyBieSByZXR1cm5pbmcgdGhl
IG9mZnNldCBvZiB0aGUgbWV0YWluZGV4IGJsb2NrICh3aGljaCBpcwotICAgIC8vIHJpZ2h0IG5l
YXIgdGhlIGVuZCBvZiB0aGUgZmlsZSkuCi0gICAgcmVzdWx0ID0gcmVwXy0+bWV0YWluZGV4X2hh
bmRsZS5vZmZzZXQoKTsKLSAgfQotICBkZWxldGUgaW5kZXhfaXRlcjsKLSAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvdGFibGUvdGFibGVfYnVpbGRlci5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvdGFibGUvdGFibGVfYnVpbGRlci5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNjIwMDJjOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3Rh
YmxlL3RhYmxlX2J1aWxkZXIuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyNzAgKzAsMCBAQAotLy8g
Q29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUg
dGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgotCi0jaW5jbHVkZSAi
bGV2ZWxkYi90YWJsZV9idWlsZGVyLmgiCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRl
ICJsZXZlbGRiL2NvbXBhcmF0b3IuaCIKLSNpbmNsdWRlICJsZXZlbGRiL2Vudi5oIgotI2luY2x1
ZGUgImxldmVsZGIvZmlsdGVyX3BvbGljeS5oIgotI2luY2x1ZGUgImxldmVsZGIvb3B0aW9ucy5o
IgotI2luY2x1ZGUgInRhYmxlL2Jsb2NrX2J1aWxkZXIuaCIKLSNpbmNsdWRlICJ0YWJsZS9maWx0
ZXJfYmxvY2suaCIKLSNpbmNsdWRlICJ0YWJsZS9mb3JtYXQuaCIKLSNpbmNsdWRlICJ1dGlsL2Nv
ZGluZy5oIgotI2luY2x1ZGUgInV0aWwvY3JjMzJjLmgiCi0KLW5hbWVzcGFjZSBsZXZlbGRiIHsK
LQotc3RydWN0IFRhYmxlQnVpbGRlcjo6UmVwIHsKLSAgT3B0aW9ucyBvcHRpb25zOwotICBPcHRp
b25zIGluZGV4X2Jsb2NrX29wdGlvbnM7Ci0gIFdyaXRhYmxlRmlsZSogZmlsZTsKLSAgdWludDY0
X3Qgb2Zmc2V0OwotICBTdGF0dXMgc3RhdHVzOwotICBCbG9ja0J1aWxkZXIgZGF0YV9ibG9jazsK
LSAgQmxvY2tCdWlsZGVyIGluZGV4X2Jsb2NrOwotICBzdGQ6OnN0cmluZyBsYXN0X2tleTsKLSAg
aW50NjRfdCBudW1fZW50cmllczsKLSAgYm9vbCBjbG9zZWQ7ICAgICAgICAgIC8vIEVpdGhlciBG
aW5pc2goKSBvciBBYmFuZG9uKCkgaGFzIGJlZW4gY2FsbGVkLgotICBGaWx0ZXJCbG9ja0J1aWxk
ZXIqIGZpbHRlcl9ibG9jazsKLQotICAvLyBXZSBkbyBub3QgZW1pdCB0aGUgaW5kZXggZW50cnkg
Zm9yIGEgYmxvY2sgdW50aWwgd2UgaGF2ZSBzZWVuIHRoZQotICAvLyBmaXJzdCBrZXkgZm9yIHRo
ZSBuZXh0IGRhdGEgYmxvY2suICBUaGlzIGFsbG93cyB1cyB0byB1c2Ugc2hvcnRlcgotICAvLyBr
ZXlzIGluIHRoZSBpbmRleCBibG9jay4gIEZvciBleGFtcGxlLCBjb25zaWRlciBhIGJsb2NrIGJv
dW5kYXJ5Ci0gIC8vIGJldHdlZW4gdGhlIGtleXMgInRoZSBxdWljayBicm93biBmb3giIGFuZCAi
dGhlIHdobyIuICBXZSBjYW4gdXNlCi0gIC8vICJ0aGUgciIgYXMgdGhlIGtleSBmb3IgdGhlIGlu
ZGV4IGJsb2NrIGVudHJ5IHNpbmNlIGl0IGlzID49IGFsbAotICAvLyBlbnRyaWVzIGluIHRoZSBm
aXJzdCBibG9jayBhbmQgPCBhbGwgZW50cmllcyBpbiBzdWJzZXF1ZW50Ci0gIC8vIGJsb2Nrcy4K
LSAgLy8KLSAgLy8gSW52YXJpYW50OiByLT5wZW5kaW5nX2luZGV4X2VudHJ5IGlzIHRydWUgb25s
eSBpZiBkYXRhX2Jsb2NrIGlzIGVtcHR5LgotICBib29sIHBlbmRpbmdfaW5kZXhfZW50cnk7Ci0g
IEJsb2NrSGFuZGxlIHBlbmRpbmdfaGFuZGxlOyAgLy8gSGFuZGxlIHRvIGFkZCB0byBpbmRleCBi
bG9jawotCi0gIHN0ZDo6c3RyaW5nIGNvbXByZXNzZWRfb3V0cHV0OwotCi0gIFJlcChjb25zdCBP
cHRpb25zJiBvcHQsIFdyaXRhYmxlRmlsZSogZikKLSAgICAgIDogb3B0aW9ucyhvcHQpLAotICAg
ICAgICBpbmRleF9ibG9ja19vcHRpb25zKG9wdCksCi0gICAgICAgIGZpbGUoZiksCi0gICAgICAg
IG9mZnNldCgwKSwKLSAgICAgICAgZGF0YV9ibG9jaygmb3B0aW9ucyksCi0gICAgICAgIGluZGV4
X2Jsb2NrKCZpbmRleF9ibG9ja19vcHRpb25zKSwKLSAgICAgICAgbnVtX2VudHJpZXMoMCksCi0g
ICAgICAgIGNsb3NlZChmYWxzZSksCi0gICAgICAgIGZpbHRlcl9ibG9jayhvcHQuZmlsdGVyX3Bv
bGljeSA9PSBOVUxMID8gTlVMTAotICAgICAgICAgICAgICAgICAgICAgOiBuZXcgRmlsdGVyQmxv
Y2tCdWlsZGVyKG9wdC5maWx0ZXJfcG9saWN5KSksCi0gICAgICAgIHBlbmRpbmdfaW5kZXhfZW50
cnkoZmFsc2UpIHsKLSAgICBpbmRleF9ibG9ja19vcHRpb25zLmJsb2NrX3Jlc3RhcnRfaW50ZXJ2
YWwgPSAxOwotICB9Ci19OwotCi1UYWJsZUJ1aWxkZXI6OlRhYmxlQnVpbGRlcihjb25zdCBPcHRp
b25zJiBvcHRpb25zLCBXcml0YWJsZUZpbGUqIGZpbGUpCi0gICAgOiByZXBfKG5ldyBSZXAob3B0
aW9ucywgZmlsZSkpIHsKLSAgaWYgKHJlcF8tPmZpbHRlcl9ibG9jayAhPSBOVUxMKSB7Ci0gICAg
cmVwXy0+ZmlsdGVyX2Jsb2NrLT5TdGFydEJsb2NrKDApOwotICB9Ci19Ci0KLVRhYmxlQnVpbGRl
cjo6flRhYmxlQnVpbGRlcigpIHsKLSAgYXNzZXJ0KHJlcF8tPmNsb3NlZCk7ICAvLyBDYXRjaCBl
cnJvcnMgd2hlcmUgY2FsbGVyIGZvcmdvdCB0byBjYWxsIEZpbmlzaCgpCi0gIGRlbGV0ZSByZXBf
LT5maWx0ZXJfYmxvY2s7Ci0gIGRlbGV0ZSByZXBfOwotfQotCi1TdGF0dXMgVGFibGVCdWlsZGVy
OjpDaGFuZ2VPcHRpb25zKGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpIHsKLSAgLy8gTm90ZTogaWYg
bW9yZSBmaWVsZHMgYXJlIGFkZGVkIHRvIE9wdGlvbnMsIHVwZGF0ZQotICAvLyB0aGlzIGZ1bmN0
aW9uIHRvIGNhdGNoIGNoYW5nZXMgdGhhdCBzaG91bGQgbm90IGJlIGFsbG93ZWQgdG8KLSAgLy8g
Y2hhbmdlIGluIHRoZSBtaWRkbGUgb2YgYnVpbGRpbmcgYSBUYWJsZS4KLSAgaWYgKG9wdGlvbnMu
Y29tcGFyYXRvciAhPSByZXBfLT5vcHRpb25zLmNvbXBhcmF0b3IpIHsKLSAgICByZXR1cm4gU3Rh
dHVzOjpJbnZhbGlkQXJndW1lbnQoImNoYW5naW5nIGNvbXBhcmF0b3Igd2hpbGUgYnVpbGRpbmcg
dGFibGUiKTsKLSAgfQotCi0gIC8vIE5vdGUgdGhhdCBhbnkgbGl2ZSBCbG9ja0J1aWxkZXJzIHBv
aW50IHRvIHJlcF8tPm9wdGlvbnMgYW5kIHRoZXJlZm9yZQotICAvLyB3aWxsIGF1dG9tYXRpY2Fs
bHkgcGljayB1cCB0aGUgdXBkYXRlZCBvcHRpb25zLgotICByZXBfLT5vcHRpb25zID0gb3B0aW9u
czsKLSAgcmVwXy0+aW5kZXhfYmxvY2tfb3B0aW9ucyA9IG9wdGlvbnM7Ci0gIHJlcF8tPmluZGV4
X2Jsb2NrX29wdGlvbnMuYmxvY2tfcmVzdGFydF9pbnRlcnZhbCA9IDE7Ci0gIHJldHVybiBTdGF0
dXM6Ok9LKCk7Ci19Ci0KLXZvaWQgVGFibGVCdWlsZGVyOjpBZGQoY29uc3QgU2xpY2UmIGtleSwg
Y29uc3QgU2xpY2UmIHZhbHVlKSB7Ci0gIFJlcCogciA9IHJlcF87Ci0gIGFzc2VydCghci0+Y2xv
c2VkKTsKLSAgaWYgKCFvaygpKSByZXR1cm47Ci0gIGlmIChyLT5udW1fZW50cmllcyA+IDApIHsK
LSAgICBhc3NlcnQoci0+b3B0aW9ucy5jb21wYXJhdG9yLT5Db21wYXJlKGtleSwgU2xpY2Uoci0+
bGFzdF9rZXkpKSA+IDApOwotICB9Ci0KLSAgaWYgKHItPnBlbmRpbmdfaW5kZXhfZW50cnkpIHsK
LSAgICBhc3NlcnQoci0+ZGF0YV9ibG9jay5lbXB0eSgpKTsKLSAgICByLT5vcHRpb25zLmNvbXBh
cmF0b3ItPkZpbmRTaG9ydGVzdFNlcGFyYXRvcigmci0+bGFzdF9rZXksIGtleSk7Ci0gICAgc3Rk
OjpzdHJpbmcgaGFuZGxlX2VuY29kaW5nOwotICAgIHItPnBlbmRpbmdfaGFuZGxlLkVuY29kZVRv
KCZoYW5kbGVfZW5jb2RpbmcpOwotICAgIHItPmluZGV4X2Jsb2NrLkFkZChyLT5sYXN0X2tleSwg
U2xpY2UoaGFuZGxlX2VuY29kaW5nKSk7Ci0gICAgci0+cGVuZGluZ19pbmRleF9lbnRyeSA9IGZh
bHNlOwotICB9Ci0KLSAgaWYgKHItPmZpbHRlcl9ibG9jayAhPSBOVUxMKSB7Ci0gICAgci0+Zmls
dGVyX2Jsb2NrLT5BZGRLZXkoa2V5KTsKLSAgfQotCi0gIHItPmxhc3Rfa2V5LmFzc2lnbihrZXku
ZGF0YSgpLCBrZXkuc2l6ZSgpKTsKLSAgci0+bnVtX2VudHJpZXMrKzsKLSAgci0+ZGF0YV9ibG9j
ay5BZGQoa2V5LCB2YWx1ZSk7Ci0KLSAgY29uc3Qgc2l6ZV90IGVzdGltYXRlZF9ibG9ja19zaXpl
ID0gci0+ZGF0YV9ibG9jay5DdXJyZW50U2l6ZUVzdGltYXRlKCk7Ci0gIGlmIChlc3RpbWF0ZWRf
YmxvY2tfc2l6ZSA+PSByLT5vcHRpb25zLmJsb2NrX3NpemUpIHsKLSAgICBGbHVzaCgpOwotICB9
Ci19Ci0KLXZvaWQgVGFibGVCdWlsZGVyOjpGbHVzaCgpIHsKLSAgUmVwKiByID0gcmVwXzsKLSAg
YXNzZXJ0KCFyLT5jbG9zZWQpOwotICBpZiAoIW9rKCkpIHJldHVybjsKLSAgaWYgKHItPmRhdGFf
YmxvY2suZW1wdHkoKSkgcmV0dXJuOwotICBhc3NlcnQoIXItPnBlbmRpbmdfaW5kZXhfZW50cnkp
OwotICBXcml0ZUJsb2NrKCZyLT5kYXRhX2Jsb2NrLCAmci0+cGVuZGluZ19oYW5kbGUpOwotICBp
ZiAob2soKSkgewotICAgIHItPnBlbmRpbmdfaW5kZXhfZW50cnkgPSB0cnVlOwotICAgIHItPnN0
YXR1cyA9IHItPmZpbGUtPkZsdXNoKCk7Ci0gIH0KLSAgaWYgKHItPmZpbHRlcl9ibG9jayAhPSBO
VUxMKSB7Ci0gICAgci0+ZmlsdGVyX2Jsb2NrLT5TdGFydEJsb2NrKHItPm9mZnNldCk7Ci0gIH0K
LX0KLQotdm9pZCBUYWJsZUJ1aWxkZXI6OldyaXRlQmxvY2soQmxvY2tCdWlsZGVyKiBibG9jaywg
QmxvY2tIYW5kbGUqIGhhbmRsZSkgewotICAvLyBGaWxlIGZvcm1hdCBjb250YWlucyBhIHNlcXVl
bmNlIG9mIGJsb2NrcyB3aGVyZSBlYWNoIGJsb2NrIGhhczoKLSAgLy8gICAgYmxvY2tfZGF0YTog
dWludDhbbl0KLSAgLy8gICAgdHlwZTogdWludDgKLSAgLy8gICAgY3JjOiB1aW50MzIKLSAgYXNz
ZXJ0KG9rKCkpOwotICBSZXAqIHIgPSByZXBfOwotICBTbGljZSByYXcgPSBibG9jay0+RmluaXNo
KCk7Ci0KLSAgU2xpY2UgYmxvY2tfY29udGVudHM7Ci0gIENvbXByZXNzaW9uVHlwZSB0eXBlID0g
ci0+b3B0aW9ucy5jb21wcmVzc2lvbjsKLSAgLy8gVE9ETyhwb3N0cmVsZWFzZSk6IFN1cHBvcnQg
bW9yZSBjb21wcmVzc2lvbiBvcHRpb25zOiB6bGliPwotICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBj
YXNlIGtOb0NvbXByZXNzaW9uOgotICAgICAgYmxvY2tfY29udGVudHMgPSByYXc7Ci0gICAgICBi
cmVhazsKLQotICAgIGNhc2Uga1NuYXBweUNvbXByZXNzaW9uOiB7Ci0gICAgICBzdGQ6OnN0cmlu
ZyogY29tcHJlc3NlZCA9ICZyLT5jb21wcmVzc2VkX291dHB1dDsKLSAgICAgIGlmIChwb3J0OjpT
bmFwcHlfQ29tcHJlc3MocmF3LmRhdGEoKSwgcmF3LnNpemUoKSwgY29tcHJlc3NlZCkgJiYKLSAg
ICAgICAgICBjb21wcmVzc2VkLT5zaXplKCkgPCByYXcuc2l6ZSgpIC0gKHJhdy5zaXplKCkgLyA4
dSkpIHsKLSAgICAgICAgYmxvY2tfY29udGVudHMgPSAqY29tcHJlc3NlZDsKLSAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIC8vIFNuYXBweSBub3Qgc3VwcG9ydGVkLCBvciBjb21wcmVzc2VkIGxlc3Mg
dGhhbiAxMi41JSwgc28ganVzdAotICAgICAgICAvLyBzdG9yZSB1bmNvbXByZXNzZWQgZm9ybQot
ICAgICAgICBibG9ja19jb250ZW50cyA9IHJhdzsKLSAgICAgICAgdHlwZSA9IGtOb0NvbXByZXNz
aW9uOwotICAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0gIFdyaXRlUmF3QmxvY2so
YmxvY2tfY29udGVudHMsIHR5cGUsIGhhbmRsZSk7Ci0gIHItPmNvbXByZXNzZWRfb3V0cHV0LmNs
ZWFyKCk7Ci0gIGJsb2NrLT5SZXNldCgpOwotfQotCi12b2lkIFRhYmxlQnVpbGRlcjo6V3JpdGVS
YXdCbG9jayhjb25zdCBTbGljZSYgYmxvY2tfY29udGVudHMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDb21wcmVzc2lvblR5cGUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEJsb2NrSGFuZGxlKiBoYW5kbGUpIHsKLSAgUmVwKiByID0gcmVwXzsKLSAg
aGFuZGxlLT5zZXRfb2Zmc2V0KHItPm9mZnNldCk7Ci0gIGhhbmRsZS0+c2V0X3NpemUoYmxvY2tf
Y29udGVudHMuc2l6ZSgpKTsKLSAgci0+c3RhdHVzID0gci0+ZmlsZS0+QXBwZW5kKGJsb2NrX2Nv
bnRlbnRzKTsKLSAgaWYgKHItPnN0YXR1cy5vaygpKSB7Ci0gICAgY2hhciB0cmFpbGVyW2tCbG9j
a1RyYWlsZXJTaXplXTsKLSAgICB0cmFpbGVyWzBdID0gdHlwZTsKLSAgICB1aW50MzJfdCBjcmMg
PSBjcmMzMmM6OlZhbHVlKGJsb2NrX2NvbnRlbnRzLmRhdGEoKSwgYmxvY2tfY29udGVudHMuc2l6
ZSgpKTsKLSAgICBjcmMgPSBjcmMzMmM6OkV4dGVuZChjcmMsIHRyYWlsZXIsIDEpOyAgLy8gRXh0
ZW5kIGNyYyB0byBjb3ZlciBibG9jayB0eXBlCi0gICAgRW5jb2RlRml4ZWQzMih0cmFpbGVyKzEs
IGNyYzMyYzo6TWFzayhjcmMpKTsKLSAgICByLT5zdGF0dXMgPSByLT5maWxlLT5BcHBlbmQoU2xp
Y2UodHJhaWxlciwga0Jsb2NrVHJhaWxlclNpemUpKTsKLSAgICBpZiAoci0+c3RhdHVzLm9rKCkp
IHsKLSAgICAgIHItPm9mZnNldCArPSBibG9ja19jb250ZW50cy5zaXplKCkgKyBrQmxvY2tUcmFp
bGVyU2l6ZTsKLSAgICB9Ci0gIH0KLX0KLQotU3RhdHVzIFRhYmxlQnVpbGRlcjo6c3RhdHVzKCkg
Y29uc3QgewotICByZXR1cm4gcmVwXy0+c3RhdHVzOwotfQotCi1TdGF0dXMgVGFibGVCdWlsZGVy
OjpGaW5pc2goKSB7Ci0gIFJlcCogciA9IHJlcF87Ci0gIEZsdXNoKCk7Ci0gIGFzc2VydCghci0+
Y2xvc2VkKTsKLSAgci0+Y2xvc2VkID0gdHJ1ZTsKLQotICBCbG9ja0hhbmRsZSBmaWx0ZXJfYmxv
Y2tfaGFuZGxlLCBtZXRhaW5kZXhfYmxvY2tfaGFuZGxlLCBpbmRleF9ibG9ja19oYW5kbGU7Ci0K
LSAgLy8gV3JpdGUgZmlsdGVyIGJsb2NrCi0gIGlmIChvaygpICYmIHItPmZpbHRlcl9ibG9jayAh
PSBOVUxMKSB7Ci0gICAgV3JpdGVSYXdCbG9jayhyLT5maWx0ZXJfYmxvY2stPkZpbmlzaCgpLCBr
Tm9Db21wcmVzc2lvbiwKLSAgICAgICAgICAgICAgICAgICZmaWx0ZXJfYmxvY2tfaGFuZGxlKTsK
LSAgfQotCi0gIC8vIFdyaXRlIG1ldGFpbmRleCBibG9jawotICBpZiAob2soKSkgewotICAgIEJs
b2NrQnVpbGRlciBtZXRhX2luZGV4X2Jsb2NrKCZyLT5vcHRpb25zKTsKLSAgICBpZiAoci0+Zmls
dGVyX2Jsb2NrICE9IE5VTEwpIHsKLSAgICAgIC8vIEFkZCBtYXBwaW5nIGZyb20gImZpbHRlci5O
YW1lIiB0byBsb2NhdGlvbiBvZiBmaWx0ZXIgZGF0YQotICAgICAgc3RkOjpzdHJpbmcga2V5ID0g
ImZpbHRlci4iOwotICAgICAga2V5LmFwcGVuZChyLT5vcHRpb25zLmZpbHRlcl9wb2xpY3ktPk5h
bWUoKSk7Ci0gICAgICBzdGQ6OnN0cmluZyBoYW5kbGVfZW5jb2Rpbmc7Ci0gICAgICBmaWx0ZXJf
YmxvY2tfaGFuZGxlLkVuY29kZVRvKCZoYW5kbGVfZW5jb2RpbmcpOwotICAgICAgbWV0YV9pbmRl
eF9ibG9jay5BZGQoa2V5LCBoYW5kbGVfZW5jb2RpbmcpOwotICAgIH0KLQotICAgIC8vIFRPRE8o
cG9zdHJlbGVhc2UpOiBBZGQgc3RhdHMgYW5kIG90aGVyIG1ldGEgYmxvY2tzCi0gICAgV3JpdGVC
bG9jaygmbWV0YV9pbmRleF9ibG9jaywgJm1ldGFpbmRleF9ibG9ja19oYW5kbGUpOwotICB9Ci0K
LSAgLy8gV3JpdGUgaW5kZXggYmxvY2sKLSAgaWYgKG9rKCkpIHsKLSAgICBpZiAoci0+cGVuZGlu
Z19pbmRleF9lbnRyeSkgewotICAgICAgci0+b3B0aW9ucy5jb21wYXJhdG9yLT5GaW5kU2hvcnRT
dWNjZXNzb3IoJnItPmxhc3Rfa2V5KTsKLSAgICAgIHN0ZDo6c3RyaW5nIGhhbmRsZV9lbmNvZGlu
ZzsKLSAgICAgIHItPnBlbmRpbmdfaGFuZGxlLkVuY29kZVRvKCZoYW5kbGVfZW5jb2RpbmcpOwot
ICAgICAgci0+aW5kZXhfYmxvY2suQWRkKHItPmxhc3Rfa2V5LCBTbGljZShoYW5kbGVfZW5jb2Rp
bmcpKTsKLSAgICAgIHItPnBlbmRpbmdfaW5kZXhfZW50cnkgPSBmYWxzZTsKLSAgICB9Ci0gICAg
V3JpdGVCbG9jaygmci0+aW5kZXhfYmxvY2ssICZpbmRleF9ibG9ja19oYW5kbGUpOwotICB9Ci0K
LSAgLy8gV3JpdGUgZm9vdGVyCi0gIGlmIChvaygpKSB7Ci0gICAgRm9vdGVyIGZvb3RlcjsKLSAg
ICBmb290ZXIuc2V0X21ldGFpbmRleF9oYW5kbGUobWV0YWluZGV4X2Jsb2NrX2hhbmRsZSk7Ci0g
ICAgZm9vdGVyLnNldF9pbmRleF9oYW5kbGUoaW5kZXhfYmxvY2tfaGFuZGxlKTsKLSAgICBzdGQ6
OnN0cmluZyBmb290ZXJfZW5jb2Rpbmc7Ci0gICAgZm9vdGVyLkVuY29kZVRvKCZmb290ZXJfZW5j
b2RpbmcpOwotICAgIHItPnN0YXR1cyA9IHItPmZpbGUtPkFwcGVuZChmb290ZXJfZW5jb2Rpbmcp
OwotICAgIGlmIChyLT5zdGF0dXMub2soKSkgewotICAgICAgci0+b2Zmc2V0ICs9IGZvb3Rlcl9l
bmNvZGluZy5zaXplKCk7Ci0gICAgfQotICB9Ci0gIHJldHVybiByLT5zdGF0dXM7Ci19Ci0KLXZv
aWQgVGFibGVCdWlsZGVyOjpBYmFuZG9uKCkgewotICBSZXAqIHIgPSByZXBfOwotICBhc3NlcnQo
IXItPmNsb3NlZCk7Ci0gIHItPmNsb3NlZCA9IHRydWU7Ci19Ci0KLXVpbnQ2NF90IFRhYmxlQnVp
bGRlcjo6TnVtRW50cmllcygpIGNvbnN0IHsKLSAgcmV0dXJuIHJlcF8tPm51bV9lbnRyaWVzOwot
fQotCi11aW50NjRfdCBUYWJsZUJ1aWxkZXI6OkZpbGVTaXplKCkgY29uc3QgewotICByZXR1cm4g
cmVwXy0+b2Zmc2V0OwotfQotCi19ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS90YWJsZV90ZXN0LmNjIGIvU291cmNlL1Ro
aXJkUGFydHkvbGV2ZWxkYi90YWJsZS90YWJsZV90ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA1N2NlYTI1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVs
ZGIvdGFibGUvdGFibGVfdGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDgzOCArMCwwIEBACi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNl
ZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCi0KLSNpbmNsdWRl
ICJsZXZlbGRiL3RhYmxlLmgiCi0KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8c3RyaW5nPgot
I2luY2x1ZGUgImRiL2RiZm9ybWF0LmgiCi0jaW5jbHVkZSAiZGIvbWVtdGFibGUuaCIKLSNpbmNs
dWRlICJkYi93cml0ZV9iYXRjaF9pbnRlcm5hbC5oIgotI2luY2x1ZGUgImxldmVsZGIvZGIuaCIK
LSNpbmNsdWRlICJsZXZlbGRiL2Vudi5oIgotI2luY2x1ZGUgImxldmVsZGIvaXRlcmF0b3IuaCIK
LSNpbmNsdWRlICJsZXZlbGRiL3RhYmxlX2J1aWxkZXIuaCIKLSNpbmNsdWRlICJ0YWJsZS9ibG9j
ay5oIgotI2luY2x1ZGUgInRhYmxlL2Jsb2NrX2J1aWxkZXIuaCIKLSNpbmNsdWRlICJ0YWJsZS9m
b3JtYXQuaCIKLSNpbmNsdWRlICJ1dGlsL3JhbmRvbS5oIgotI2luY2x1ZGUgInV0aWwvdGVzdGhh
cm5lc3MuaCIKLSNpbmNsdWRlICJ1dGlsL3Rlc3R1dGlsLmgiCi0KLW5hbWVzcGFjZSBsZXZlbGRi
IHsKLQotLy8gUmV0dXJuIHJldmVyc2Ugb2YgImtleSIuCi0vLyBVc2VkIHRvIHRlc3Qgbm9uLWxl
eGljb2dyYXBoaWMgY29tcGFyYXRvcnMuCi1zdGF0aWMgc3RkOjpzdHJpbmcgUmV2ZXJzZShjb25z
dCBTbGljZSYga2V5KSB7Ci0gIHN0ZDo6c3RyaW5nIHN0cihrZXkuVG9TdHJpbmcoKSk7Ci0gIHN0
ZDo6c3RyaW5nIHJldigiIik7Ci0gIGZvciAoc3RkOjpzdHJpbmc6OnJldmVyc2VfaXRlcmF0b3Ig
cml0ID0gc3RyLnJiZWdpbigpOwotICAgICAgIHJpdCAhPSBzdHIucmVuZCgpOyArK3JpdCkgewot
ICAgIHJldi5wdXNoX2JhY2soKnJpdCk7Ci0gIH0KLSAgcmV0dXJuIHJldjsKLX0KLQotbmFtZXNw
YWNlIHsKLWNsYXNzIFJldmVyc2VLZXlDb21wYXJhdG9yIDogcHVibGljIENvbXBhcmF0b3Igewot
IHB1YmxpYzoKLSAgdmlydHVhbCBjb25zdCBjaGFyKiBOYW1lKCkgY29uc3QgewotICAgIHJldHVy
biAibGV2ZWxkYi5SZXZlcnNlQnl0ZXdpc2VDb21wYXJhdG9yIjsKLSAgfQotCi0gIHZpcnR1YWwg
aW50IENvbXBhcmUoY29uc3QgU2xpY2UmIGEsIGNvbnN0IFNsaWNlJiBiKSBjb25zdCB7Ci0gICAg
cmV0dXJuIEJ5dGV3aXNlQ29tcGFyYXRvcigpLT5Db21wYXJlKFJldmVyc2UoYSksIFJldmVyc2Uo
YikpOwotICB9Ci0KLSAgdmlydHVhbCB2b2lkIEZpbmRTaG9ydGVzdFNlcGFyYXRvcigKLSAgICAg
IHN0ZDo6c3RyaW5nKiBzdGFydCwKLSAgICAgIGNvbnN0IFNsaWNlJiBsaW1pdCkgY29uc3Qgewot
ICAgIHN0ZDo6c3RyaW5nIHMgPSBSZXZlcnNlKCpzdGFydCk7Ci0gICAgc3RkOjpzdHJpbmcgbCA9
IFJldmVyc2UobGltaXQpOwotICAgIEJ5dGV3aXNlQ29tcGFyYXRvcigpLT5GaW5kU2hvcnRlc3RT
ZXBhcmF0b3IoJnMsIGwpOwotICAgICpzdGFydCA9IFJldmVyc2Uocyk7Ci0gIH0KLQotICB2aXJ0
dWFsIHZvaWQgRmluZFNob3J0U3VjY2Vzc29yKHN0ZDo6c3RyaW5nKiBrZXkpIGNvbnN0IHsKLSAg
ICBzdGQ6OnN0cmluZyBzID0gUmV2ZXJzZSgqa2V5KTsKLSAgICBCeXRld2lzZUNvbXBhcmF0b3Io
KS0+RmluZFNob3J0U3VjY2Vzc29yKCZzKTsKLSAgICAqa2V5ID0gUmV2ZXJzZShzKTsKLSAgfQot
fTsKLX0gIC8vIG5hbWVzcGFjZQotc3RhdGljIFJldmVyc2VLZXlDb21wYXJhdG9yIHJldmVyc2Vf
a2V5X2NvbXBhcmF0b3I7Ci0KLXN0YXRpYyB2b2lkIEluY3JlbWVudChjb25zdCBDb21wYXJhdG9y
KiBjbXAsIHN0ZDo6c3RyaW5nKiBrZXkpIHsKLSAgaWYgKGNtcCA9PSBCeXRld2lzZUNvbXBhcmF0
b3IoKSkgewotICAgIGtleS0+cHVzaF9iYWNrKCdcMCcpOwotICB9IGVsc2UgewotICAgIGFzc2Vy
dChjbXAgPT0gJnJldmVyc2Vfa2V5X2NvbXBhcmF0b3IpOwotICAgIHN0ZDo6c3RyaW5nIHJldiA9
IFJldmVyc2UoKmtleSk7Ci0gICAgcmV2LnB1c2hfYmFjaygnXDAnKTsKLSAgICAqa2V5ID0gUmV2
ZXJzZShyZXYpOwotICB9Ci19Ci0KLS8vIEFuIFNUTCBjb21wYXJhdG9yIHRoYXQgdXNlcyBhIENv
bXBhcmF0b3IKLW5hbWVzcGFjZSB7Ci1zdHJ1Y3QgU1RMTGVzc1RoYW4gewotICBjb25zdCBDb21w
YXJhdG9yKiBjbXA7Ci0KLSAgU1RMTGVzc1RoYW4oKSA6IGNtcChCeXRld2lzZUNvbXBhcmF0b3Io
KSkgeyB9Ci0gIFNUTExlc3NUaGFuKGNvbnN0IENvbXBhcmF0b3IqIGMpIDogY21wKGMpIHsgfQot
ICBib29sIG9wZXJhdG9yKCkoY29uc3Qgc3RkOjpzdHJpbmcmIGEsIGNvbnN0IHN0ZDo6c3RyaW5n
JiBiKSBjb25zdCB7Ci0gICAgcmV0dXJuIGNtcC0+Q29tcGFyZShTbGljZShhKSwgU2xpY2UoYikp
IDwgMDsKLSAgfQotfTsKLX0gIC8vIG5hbWVzcGFjZQotCi1jbGFzcyBTdHJpbmdTaW5rOiBwdWJs
aWMgV3JpdGFibGVGaWxlIHsKLSBwdWJsaWM6Ci0gIH5TdHJpbmdTaW5rKCkgeyB9Ci0KLSAgY29u
c3Qgc3RkOjpzdHJpbmcmIGNvbnRlbnRzKCkgY29uc3QgeyByZXR1cm4gY29udGVudHNfOyB9Ci0K
LSAgdmlydHVhbCBTdGF0dXMgQ2xvc2UoKSB7IHJldHVybiBTdGF0dXM6Ok9LKCk7IH0KLSAgdmly
dHVhbCBTdGF0dXMgRmx1c2goKSB7IHJldHVybiBTdGF0dXM6Ok9LKCk7IH0KLSAgdmlydHVhbCBT
dGF0dXMgU3luYygpIHsgcmV0dXJuIFN0YXR1czo6T0soKTsgfQotCi0gIHZpcnR1YWwgU3RhdHVz
IEFwcGVuZChjb25zdCBTbGljZSYgZGF0YSkgewotICAgIGNvbnRlbnRzXy5hcHBlbmQoZGF0YS5k
YXRhKCksIGRhdGEuc2l6ZSgpKTsKLSAgICByZXR1cm4gU3RhdHVzOjpPSygpOwotICB9Ci0KLSBw
cml2YXRlOgotICBzdGQ6OnN0cmluZyBjb250ZW50c187Ci19OwotCi0KLWNsYXNzIFN0cmluZ1Nv
dXJjZTogcHVibGljIFJhbmRvbUFjY2Vzc0ZpbGUgewotIHB1YmxpYzoKLSAgU3RyaW5nU291cmNl
KGNvbnN0IFNsaWNlJiBjb250ZW50cykKLSAgICAgIDogY29udGVudHNfKGNvbnRlbnRzLmRhdGEo
KSwgY29udGVudHMuc2l6ZSgpKSB7Ci0gIH0KLQotICB2aXJ0dWFsIH5TdHJpbmdTb3VyY2UoKSB7
IH0KLQotICB1aW50NjRfdCBTaXplKCkgY29uc3QgeyByZXR1cm4gY29udGVudHNfLnNpemUoKTsg
fQotCi0gIHZpcnR1YWwgU3RhdHVzIFJlYWQodWludDY0X3Qgb2Zmc2V0LCBzaXplX3QgbiwgU2xp
Y2UqIHJlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAgICAgY2hhciogc2NyYXRjaCkgY29uc3Qg
ewotICAgIGlmIChvZmZzZXQgPiBjb250ZW50c18uc2l6ZSgpKSB7Ci0gICAgICByZXR1cm4gU3Rh
dHVzOjpJbnZhbGlkQXJndW1lbnQoImludmFsaWQgUmVhZCBvZmZzZXQiKTsKLSAgICB9Ci0gICAg
aWYgKG9mZnNldCArIG4gPiBjb250ZW50c18uc2l6ZSgpKSB7Ci0gICAgICBuID0gY29udGVudHNf
LnNpemUoKSAtIG9mZnNldDsKLSAgICB9Ci0gICAgbWVtY3B5KHNjcmF0Y2gsICZjb250ZW50c19b
b2Zmc2V0XSwgbik7Ci0gICAgKnJlc3VsdCA9IFNsaWNlKHNjcmF0Y2gsIG4pOwotICAgIHJldHVy
biBTdGF0dXM6Ok9LKCk7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIHN0ZDo6c3RyaW5nIGNvbnRlbnRz
XzsKLX07Ci0KLXR5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nLCBTVExM
ZXNzVGhhbj4gS1ZNYXA7Ci0KLS8vIEhlbHBlciBjbGFzcyBmb3IgdGVzdHMgdG8gdW5pZnkgdGhl
IGludGVyZmFjZSBiZXR3ZWVuCi0vLyBCbG9ja0J1aWxkZXIvVGFibGVCdWlsZGVyIGFuZCBCbG9j
ay9UYWJsZS4KLWNsYXNzIENvbnN0cnVjdG9yIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IENvbnN0
cnVjdG9yKGNvbnN0IENvbXBhcmF0b3IqIGNtcCkgOiBkYXRhXyhTVExMZXNzVGhhbihjbXApKSB7
IH0KLSAgdmlydHVhbCB+Q29uc3RydWN0b3IoKSB7IH0KLQotICB2b2lkIEFkZChjb25zdCBzdGQ6
OnN0cmluZyYga2V5LCBjb25zdCBTbGljZSYgdmFsdWUpIHsKLSAgICBkYXRhX1trZXldID0gdmFs
dWUuVG9TdHJpbmcoKTsKLSAgfQotCi0gIC8vIEZpbmlzaCBjb25zdHJ1Y3RpbmcgdGhlIGRhdGEg
c3RydWN0dXJlIHdpdGggYWxsIHRoZSBrZXlzIHRoYXQgaGF2ZQotICAvLyBiZWVuIGFkZGVkIHNv
IGZhci4gIFJldHVybnMgdGhlIGtleXMgaW4gc29ydGVkIG9yZGVyIGluICIqa2V5cyIKLSAgLy8g
YW5kIHN0b3JlcyB0aGUga2V5L3ZhbHVlIHBhaXJzIGluICIqa3ZtYXAiCi0gIHZvaWQgRmluaXNo
KGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMsCi0gICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6
c3RyaW5nPioga2V5cywKLSAgICAgICAgICAgICAgS1ZNYXAqIGt2bWFwKSB7Ci0gICAgKmt2bWFw
ID0gZGF0YV87Ci0gICAga2V5cy0+Y2xlYXIoKTsKLSAgICBmb3IgKEtWTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IGRhdGFfLmJlZ2luKCk7Ci0gICAgICAgICBpdCAhPSBkYXRhXy5lbmQoKTsKLSAg
ICAgICAgICsraXQpIHsKLSAgICAgIGtleXMtPnB1c2hfYmFjayhpdC0+Zmlyc3QpOwotICAgIH0K
LSAgICBkYXRhXy5jbGVhcigpOwotICAgIFN0YXR1cyBzID0gRmluaXNoSW1wbChvcHRpb25zLCAq
a3ZtYXApOwotICAgIEFTU0VSVF9UUlVFKHMub2soKSkgPDwgcy5Ub1N0cmluZygpOwotICB9Ci0K
LSAgLy8gQ29uc3RydWN0IHRoZSBkYXRhIHN0cnVjdHVyZSBmcm9tIHRoZSBkYXRhIGluICJkYXRh
IgotICB2aXJ0dWFsIFN0YXR1cyBGaW5pc2hJbXBsKGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMsIGNv
bnN0IEtWTWFwJiBkYXRhKSA9IDA7Ci0KLSAgdmlydHVhbCBJdGVyYXRvciogTmV3SXRlcmF0b3Io
KSBjb25zdCA9IDA7Ci0KLSAgdmlydHVhbCBjb25zdCBLVk1hcCYgZGF0YSgpIHsgcmV0dXJuIGRh
dGFfOyB9Ci0KLSAgdmlydHVhbCBEQiogZGIoKSBjb25zdCB7IHJldHVybiBOVUxMOyB9ICAvLyBP
dmVycmlkZGVuIGluIERCQ29uc3RydWN0b3IKLQotIHByaXZhdGU6Ci0gIEtWTWFwIGRhdGFfOwot
fTsKLQotY2xhc3MgQmxvY2tDb25zdHJ1Y3RvcjogcHVibGljIENvbnN0cnVjdG9yIHsKLSBwdWJs
aWM6Ci0gIGV4cGxpY2l0IEJsb2NrQ29uc3RydWN0b3IoY29uc3QgQ29tcGFyYXRvciogY21wKQot
ICAgICAgOiBDb25zdHJ1Y3RvcihjbXApLAotICAgICAgICBjb21wYXJhdG9yXyhjbXApLAotICAg
ICAgICBibG9ja18oTlVMTCkgeyB9Ci0gIH5CbG9ja0NvbnN0cnVjdG9yKCkgewotICAgIGRlbGV0
ZSBibG9ja187Ci0gIH0KLSAgdmlydHVhbCBTdGF0dXMgRmluaXNoSW1wbChjb25zdCBPcHRpb25z
JiBvcHRpb25zLCBjb25zdCBLVk1hcCYgZGF0YSkgewotICAgIGRlbGV0ZSBibG9ja187Ci0gICAg
YmxvY2tfID0gTlVMTDsKLSAgICBCbG9ja0J1aWxkZXIgYnVpbGRlcigmb3B0aW9ucyk7Ci0KLSAg
ICBmb3IgKEtWTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGRhdGEuYmVnaW4oKTsKLSAgICAgICAg
IGl0ICE9IGRhdGEuZW5kKCk7Ci0gICAgICAgICArK2l0KSB7Ci0gICAgICBidWlsZGVyLkFkZChp
dC0+Zmlyc3QsIGl0LT5zZWNvbmQpOwotICAgIH0KLSAgICAvLyBPcGVuIHRoZSBibG9jawotICAg
IGRhdGFfID0gYnVpbGRlci5GaW5pc2goKS5Ub1N0cmluZygpOwotICAgIEJsb2NrQ29udGVudHMg
Y29udGVudHM7Ci0gICAgY29udGVudHMuZGF0YSA9IGRhdGFfOwotICAgIGNvbnRlbnRzLmNhY2hh
YmxlID0gZmFsc2U7Ci0gICAgY29udGVudHMuaGVhcF9hbGxvY2F0ZWQgPSBmYWxzZTsKLSAgICBi
bG9ja18gPSBuZXcgQmxvY2soY29udGVudHMpOwotICAgIHJldHVybiBTdGF0dXM6Ok9LKCk7Ci0g
IH0KLSAgdmlydHVhbCBJdGVyYXRvciogTmV3SXRlcmF0b3IoKSBjb25zdCB7Ci0gICAgcmV0dXJu
IGJsb2NrXy0+TmV3SXRlcmF0b3IoY29tcGFyYXRvcl8pOwotICB9Ci0KLSBwcml2YXRlOgotICBj
b25zdCBDb21wYXJhdG9yKiBjb21wYXJhdG9yXzsKLSAgc3RkOjpzdHJpbmcgZGF0YV87Ci0gIEJs
b2NrKiBibG9ja187Ci0KLSAgQmxvY2tDb25zdHJ1Y3RvcigpOwotfTsKLQotY2xhc3MgVGFibGVD
b25zdHJ1Y3RvcjogcHVibGljIENvbnN0cnVjdG9yIHsKLSBwdWJsaWM6Ci0gIFRhYmxlQ29uc3Ry
dWN0b3IoY29uc3QgQ29tcGFyYXRvciogY21wKQotICAgICAgOiBDb25zdHJ1Y3RvcihjbXApLAot
ICAgICAgICBzb3VyY2VfKE5VTEwpLCB0YWJsZV8oTlVMTCkgewotICB9Ci0gIH5UYWJsZUNvbnN0
cnVjdG9yKCkgewotICAgIFJlc2V0KCk7Ci0gIH0KLSAgdmlydHVhbCBTdGF0dXMgRmluaXNoSW1w
bChjb25zdCBPcHRpb25zJiBvcHRpb25zLCBjb25zdCBLVk1hcCYgZGF0YSkgewotICAgIFJlc2V0
KCk7Ci0gICAgU3RyaW5nU2luayBzaW5rOwotICAgIFRhYmxlQnVpbGRlciBidWlsZGVyKG9wdGlv
bnMsICZzaW5rKTsKLQotICAgIGZvciAoS1ZNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGF0YS5i
ZWdpbigpOwotICAgICAgICAgaXQgIT0gZGF0YS5lbmQoKTsKLSAgICAgICAgICsraXQpIHsKLSAg
ICAgIGJ1aWxkZXIuQWRkKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7Ci0gICAgICBBU1NFUlRfVFJV
RShidWlsZGVyLnN0YXR1cygpLm9rKCkpOwotICAgIH0KLSAgICBTdGF0dXMgcyA9IGJ1aWxkZXIu
RmluaXNoKCk7Ci0gICAgQVNTRVJUX1RSVUUocy5vaygpKSA8PCBzLlRvU3RyaW5nKCk7Ci0KLSAg
ICBBU1NFUlRfRVEoc2luay5jb250ZW50cygpLnNpemUoKSwgYnVpbGRlci5GaWxlU2l6ZSgpKTsK
LQotICAgIC8vIE9wZW4gdGhlIHRhYmxlCi0gICAgc291cmNlXyA9IG5ldyBTdHJpbmdTb3VyY2Uo
c2luay5jb250ZW50cygpKTsKLSAgICBPcHRpb25zIHRhYmxlX29wdGlvbnM7Ci0gICAgdGFibGVf
b3B0aW9ucy5jb21wYXJhdG9yID0gb3B0aW9ucy5jb21wYXJhdG9yOwotICAgIHJldHVybiBUYWJs
ZTo6T3Blbih0YWJsZV9vcHRpb25zLCBzb3VyY2VfLCBzaW5rLmNvbnRlbnRzKCkuc2l6ZSgpLCAm
dGFibGVfKTsKLSAgfQotCi0gIHZpcnR1YWwgSXRlcmF0b3IqIE5ld0l0ZXJhdG9yKCkgY29uc3Qg
ewotICAgIHJldHVybiB0YWJsZV8tPk5ld0l0ZXJhdG9yKFJlYWRPcHRpb25zKCkpOwotICB9Ci0K
LSAgdWludDY0X3QgQXBwcm94aW1hdGVPZmZzZXRPZihjb25zdCBTbGljZSYga2V5KSBjb25zdCB7
Ci0gICAgcmV0dXJuIHRhYmxlXy0+QXBwcm94aW1hdGVPZmZzZXRPZihrZXkpOwotICB9Ci0KLSBw
cml2YXRlOgotICB2b2lkIFJlc2V0KCkgewotICAgIGRlbGV0ZSB0YWJsZV87Ci0gICAgZGVsZXRl
IHNvdXJjZV87Ci0gICAgdGFibGVfID0gTlVMTDsKLSAgICBzb3VyY2VfID0gTlVMTDsKLSAgfQot
Ci0gIFN0cmluZ1NvdXJjZSogc291cmNlXzsKLSAgVGFibGUqIHRhYmxlXzsKLQotICBUYWJsZUNv
bnN0cnVjdG9yKCk7Ci19OwotCi0vLyBBIGhlbHBlciBjbGFzcyB0aGF0IGNvbnZlcnRzIGludGVy
bmFsIGZvcm1hdCBrZXlzIGludG8gdXNlciBrZXlzCi1jbGFzcyBLZXlDb252ZXJ0aW5nSXRlcmF0
b3I6IHB1YmxpYyBJdGVyYXRvciB7Ci0gcHVibGljOgotICBleHBsaWNpdCBLZXlDb252ZXJ0aW5n
SXRlcmF0b3IoSXRlcmF0b3IqIGl0ZXIpIDogaXRlcl8oaXRlcikgeyB9Ci0gIHZpcnR1YWwgfktl
eUNvbnZlcnRpbmdJdGVyYXRvcigpIHsgZGVsZXRlIGl0ZXJfOyB9Ci0gIHZpcnR1YWwgYm9vbCBW
YWxpZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJfLT5WYWxpZCgpOyB9Ci0gIHZpcnR1YWwgdm9pZCBT
ZWVrKGNvbnN0IFNsaWNlJiB0YXJnZXQpIHsKLSAgICBQYXJzZWRJbnRlcm5hbEtleSBpa2V5KHRh
cmdldCwga01heFNlcXVlbmNlTnVtYmVyLCBrVHlwZVZhbHVlKTsKLSAgICBzdGQ6OnN0cmluZyBl
bmNvZGVkOwotICAgIEFwcGVuZEludGVybmFsS2V5KCZlbmNvZGVkLCBpa2V5KTsKLSAgICBpdGVy
Xy0+U2VlayhlbmNvZGVkKTsKLSAgfQotICB2aXJ0dWFsIHZvaWQgU2Vla1RvRmlyc3QoKSB7IGl0
ZXJfLT5TZWVrVG9GaXJzdCgpOyB9Ci0gIHZpcnR1YWwgdm9pZCBTZWVrVG9MYXN0KCkgeyBpdGVy
Xy0+U2Vla1RvTGFzdCgpOyB9Ci0gIHZpcnR1YWwgdm9pZCBOZXh0KCkgeyBpdGVyXy0+TmV4dCgp
OyB9Ci0gIHZpcnR1YWwgdm9pZCBQcmV2KCkgeyBpdGVyXy0+UHJldigpOyB9Ci0KLSAgdmlydHVh
bCBTbGljZSBrZXkoKSBjb25zdCB7Ci0gICAgYXNzZXJ0KFZhbGlkKCkpOwotICAgIFBhcnNlZElu
dGVybmFsS2V5IGtleTsKLSAgICBpZiAoIVBhcnNlSW50ZXJuYWxLZXkoaXRlcl8tPmtleSgpLCAm
a2V5KSkgewotICAgICAgc3RhdHVzXyA9IFN0YXR1czo6Q29ycnVwdGlvbigibWFsZm9ybWVkIGlu
dGVybmFsIGtleSIpOwotICAgICAgcmV0dXJuIFNsaWNlKCJjb3JydXB0ZWQga2V5Iik7Ci0gICAg
fQotICAgIHJldHVybiBrZXkudXNlcl9rZXk7Ci0gIH0KLQotICB2aXJ0dWFsIFNsaWNlIHZhbHVl
KCkgY29uc3QgeyByZXR1cm4gaXRlcl8tPnZhbHVlKCk7IH0KLSAgdmlydHVhbCBTdGF0dXMgc3Rh
dHVzKCkgY29uc3QgewotICAgIHJldHVybiBzdGF0dXNfLm9rKCkgPyBpdGVyXy0+c3RhdHVzKCkg
OiBzdGF0dXNfOwotICB9Ci0KLSBwcml2YXRlOgotICBtdXRhYmxlIFN0YXR1cyBzdGF0dXNfOwot
ICBJdGVyYXRvciogaXRlcl87Ci0KLSAgLy8gTm8gY29weWluZyBhbGxvd2VkCi0gIEtleUNvbnZl
cnRpbmdJdGVyYXRvcihjb25zdCBLZXlDb252ZXJ0aW5nSXRlcmF0b3ImKTsKLSAgdm9pZCBvcGVy
YXRvcj0oY29uc3QgS2V5Q29udmVydGluZ0l0ZXJhdG9yJik7Ci19OwotCi1jbGFzcyBNZW1UYWJs
ZUNvbnN0cnVjdG9yOiBwdWJsaWMgQ29uc3RydWN0b3IgewotIHB1YmxpYzoKLSAgZXhwbGljaXQg
TWVtVGFibGVDb25zdHJ1Y3Rvcihjb25zdCBDb21wYXJhdG9yKiBjbXApCi0gICAgICA6IENvbnN0
cnVjdG9yKGNtcCksCi0gICAgICAgIGludGVybmFsX2NvbXBhcmF0b3JfKGNtcCkgewotICAgIG1l
bXRhYmxlXyA9IG5ldyBNZW1UYWJsZShpbnRlcm5hbF9jb21wYXJhdG9yXyk7Ci0gICAgbWVtdGFi
bGVfLT5SZWYoKTsKLSAgfQotICB+TWVtVGFibGVDb25zdHJ1Y3RvcigpIHsKLSAgICBtZW10YWJs
ZV8tPlVucmVmKCk7Ci0gIH0KLSAgdmlydHVhbCBTdGF0dXMgRmluaXNoSW1wbChjb25zdCBPcHRp
b25zJiBvcHRpb25zLCBjb25zdCBLVk1hcCYgZGF0YSkgewotICAgIG1lbXRhYmxlXy0+VW5yZWYo
KTsKLSAgICBtZW10YWJsZV8gPSBuZXcgTWVtVGFibGUoaW50ZXJuYWxfY29tcGFyYXRvcl8pOwot
ICAgIG1lbXRhYmxlXy0+UmVmKCk7Ci0gICAgaW50IHNlcSA9IDE7Ci0gICAgZm9yIChLVk1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXRhLmJlZ2luKCk7Ci0gICAgICAgICBpdCAhPSBkYXRhLmVu
ZCgpOwotICAgICAgICAgKytpdCkgewotICAgICAgbWVtdGFibGVfLT5BZGQoc2VxLCBrVHlwZVZh
bHVlLCBpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOwotICAgICAgc2VxKys7Ci0gICAgfQotICAgIHJl
dHVybiBTdGF0dXM6Ok9LKCk7Ci0gIH0KLSAgdmlydHVhbCBJdGVyYXRvciogTmV3SXRlcmF0b3Io
KSBjb25zdCB7Ci0gICAgcmV0dXJuIG5ldyBLZXlDb252ZXJ0aW5nSXRlcmF0b3IobWVtdGFibGVf
LT5OZXdJdGVyYXRvcigpKTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgSW50ZXJuYWxLZXlDb21wYXJh
dG9yIGludGVybmFsX2NvbXBhcmF0b3JfOwotICBNZW1UYWJsZSogbWVtdGFibGVfOwotfTsKLQot
Y2xhc3MgREJDb25zdHJ1Y3RvcjogcHVibGljIENvbnN0cnVjdG9yIHsKLSBwdWJsaWM6Ci0gIGV4
cGxpY2l0IERCQ29uc3RydWN0b3IoY29uc3QgQ29tcGFyYXRvciogY21wKQotICAgICAgOiBDb25z
dHJ1Y3RvcihjbXApLAotICAgICAgICBjb21wYXJhdG9yXyhjbXApIHsKLSAgICBkYl8gPSBOVUxM
OwotICAgIE5ld0RCKCk7Ci0gIH0KLSAgfkRCQ29uc3RydWN0b3IoKSB7Ci0gICAgZGVsZXRlIGRi
XzsKLSAgfQotICB2aXJ0dWFsIFN0YXR1cyBGaW5pc2hJbXBsKGNvbnN0IE9wdGlvbnMmIG9wdGlv
bnMsIGNvbnN0IEtWTWFwJiBkYXRhKSB7Ci0gICAgZGVsZXRlIGRiXzsKLSAgICBkYl8gPSBOVUxM
OwotICAgIE5ld0RCKCk7Ci0gICAgZm9yIChLVk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXRh
LmJlZ2luKCk7Ci0gICAgICAgICBpdCAhPSBkYXRhLmVuZCgpOwotICAgICAgICAgKytpdCkgewot
ICAgICAgV3JpdGVCYXRjaCBiYXRjaDsKLSAgICAgIGJhdGNoLlB1dChpdC0+Zmlyc3QsIGl0LT5z
ZWNvbmQpOwotICAgICAgQVNTRVJUX1RSVUUoZGJfLT5Xcml0ZShXcml0ZU9wdGlvbnMoKSwgJmJh
dGNoKS5vaygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIFN0YXR1czo6T0soKTsKLSAgfQotICB2aXJ0
dWFsIEl0ZXJhdG9yKiBOZXdJdGVyYXRvcigpIGNvbnN0IHsKLSAgICByZXR1cm4gZGJfLT5OZXdJ
dGVyYXRvcihSZWFkT3B0aW9ucygpKTsKLSAgfQotCi0gIHZpcnR1YWwgREIqIGRiKCkgY29uc3Qg
eyByZXR1cm4gZGJfOyB9Ci0KLSBwcml2YXRlOgotICB2b2lkIE5ld0RCKCkgewotICAgIHN0ZDo6
c3RyaW5nIG5hbWUgPSB0ZXN0OjpUbXBEaXIoKSArICIvdGFibGVfdGVzdGRiIjsKLQotICAgIE9w
dGlvbnMgb3B0aW9uczsKLSAgICBvcHRpb25zLmNvbXBhcmF0b3IgPSBjb21wYXJhdG9yXzsKLSAg
ICBTdGF0dXMgc3RhdHVzID0gRGVzdHJveURCKG5hbWUsIG9wdGlvbnMpOwotICAgIEFTU0VSVF9U
UlVFKHN0YXR1cy5vaygpKSA8PCBzdGF0dXMuVG9TdHJpbmcoKTsKLQotICAgIG9wdGlvbnMuY3Jl
YXRlX2lmX21pc3NpbmcgPSB0cnVlOwotICAgIG9wdGlvbnMuZXJyb3JfaWZfZXhpc3RzID0gdHJ1
ZTsKLSAgICBvcHRpb25zLndyaXRlX2J1ZmZlcl9zaXplID0gMTAwMDA7ICAvLyBTb21ldGhpbmcg
c21hbGwgdG8gZm9yY2UgbWVyZ2luZwotICAgIHN0YXR1cyA9IERCOjpPcGVuKG9wdGlvbnMsIG5h
bWUsICZkYl8pOwotICAgIEFTU0VSVF9UUlVFKHN0YXR1cy5vaygpKSA8PCBzdGF0dXMuVG9TdHJp
bmcoKTsKLSAgfQotCi0gIGNvbnN0IENvbXBhcmF0b3IqIGNvbXBhcmF0b3JfOwotICBEQiogZGJf
OwotfTsKLQotZW51bSBUZXN0VHlwZSB7Ci0gIFRBQkxFX1RFU1QsCi0gIEJMT0NLX1RFU1QsCi0g
IE1FTVRBQkxFX1RFU1QsCi0gIERCX1RFU1QKLX07Ci0KLXN0cnVjdCBUZXN0QXJncyB7Ci0gIFRl
c3RUeXBlIHR5cGU7Ci0gIGJvb2wgcmV2ZXJzZV9jb21wYXJlOwotICBpbnQgcmVzdGFydF9pbnRl
cnZhbDsKLX07Ci0KLXN0YXRpYyBjb25zdCBUZXN0QXJncyBrVGVzdEFyZ0xpc3RbXSA9IHsKLSAg
eyBUQUJMRV9URVNULCBmYWxzZSwgMTYgfSwKLSAgeyBUQUJMRV9URVNULCBmYWxzZSwgMSB9LAot
ICB7IFRBQkxFX1RFU1QsIGZhbHNlLCAxMDI0IH0sCi0gIHsgVEFCTEVfVEVTVCwgdHJ1ZSwgMTYg
fSwKLSAgeyBUQUJMRV9URVNULCB0cnVlLCAxIH0sCi0gIHsgVEFCTEVfVEVTVCwgdHJ1ZSwgMTAy
NCB9LAotCi0gIHsgQkxPQ0tfVEVTVCwgZmFsc2UsIDE2IH0sCi0gIHsgQkxPQ0tfVEVTVCwgZmFs
c2UsIDEgfSwKLSAgeyBCTE9DS19URVNULCBmYWxzZSwgMTAyNCB9LAotICB7IEJMT0NLX1RFU1Qs
IHRydWUsIDE2IH0sCi0gIHsgQkxPQ0tfVEVTVCwgdHJ1ZSwgMSB9LAotICB7IEJMT0NLX1RFU1Qs
IHRydWUsIDEwMjQgfSwKLQotICAvLyBSZXN0YXJ0IGludGVydmFsIGRvZXMgbm90IG1hdHRlciBm
b3IgbWVtdGFibGVzCi0gIHsgTUVNVEFCTEVfVEVTVCwgZmFsc2UsIDE2IH0sCi0gIHsgTUVNVEFC
TEVfVEVTVCwgdHJ1ZSwgMTYgfSwKLQotICAvLyBEbyBub3QgYm90aGVyIHdpdGggcmVzdGFydCBp
bnRlcnZhbCB2YXJpYXRpb25zIGZvciBEQgotICB7IERCX1RFU1QsIGZhbHNlLCAxNiB9LAotICB7
IERCX1RFU1QsIHRydWUsIDE2IH0sCi19Owotc3RhdGljIGNvbnN0IGludCBrTnVtVGVzdEFyZ3Mg
PSBzaXplb2Yoa1Rlc3RBcmdMaXN0KSAvIHNpemVvZihrVGVzdEFyZ0xpc3RbMF0pOwotCi1jbGFz
cyBIYXJuZXNzIHsKLSBwdWJsaWM6Ci0gIEhhcm5lc3MoKSA6IGNvbnN0cnVjdG9yXyhOVUxMKSB7
IH0KLQotICB2b2lkIEluaXQoY29uc3QgVGVzdEFyZ3MmIGFyZ3MpIHsKLSAgICBkZWxldGUgY29u
c3RydWN0b3JfOwotICAgIGNvbnN0cnVjdG9yXyA9IE5VTEw7Ci0gICAgb3B0aW9uc18gPSBPcHRp
b25zKCk7Ci0KLSAgICBvcHRpb25zXy5ibG9ja19yZXN0YXJ0X2ludGVydmFsID0gYXJncy5yZXN0
YXJ0X2ludGVydmFsOwotICAgIC8vIFVzZSBzaG9ydGVyIGJsb2NrIHNpemUgZm9yIHRlc3RzIHRv
IGV4ZXJjaXNlIGJsb2NrIGJvdW5kYXJ5Ci0gICAgLy8gY29uZGl0aW9ucyBtb3JlLgotICAgIG9w
dGlvbnNfLmJsb2NrX3NpemUgPSAyNTY7Ci0gICAgaWYgKGFyZ3MucmV2ZXJzZV9jb21wYXJlKSB7
Ci0gICAgICBvcHRpb25zXy5jb21wYXJhdG9yID0gJnJldmVyc2Vfa2V5X2NvbXBhcmF0b3I7Ci0g
ICAgfQotICAgIHN3aXRjaCAoYXJncy50eXBlKSB7Ci0gICAgICBjYXNlIFRBQkxFX1RFU1Q6Ci0g
ICAgICAgIGNvbnN0cnVjdG9yXyA9IG5ldyBUYWJsZUNvbnN0cnVjdG9yKG9wdGlvbnNfLmNvbXBh
cmF0b3IpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgQkxPQ0tfVEVTVDoKLSAgICAgICAg
Y29uc3RydWN0b3JfID0gbmV3IEJsb2NrQ29uc3RydWN0b3Iob3B0aW9uc18uY29tcGFyYXRvcik7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBNRU1UQUJMRV9URVNUOgotICAgICAgICBjb25z
dHJ1Y3Rvcl8gPSBuZXcgTWVtVGFibGVDb25zdHJ1Y3RvcihvcHRpb25zXy5jb21wYXJhdG9yKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIERCX1RFU1Q6Ci0gICAgICAgIGNvbnN0cnVjdG9y
XyA9IG5ldyBEQkNvbnN0cnVjdG9yKG9wdGlvbnNfLmNvbXBhcmF0b3IpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gIH0KLQotICB+SGFybmVzcygpIHsKLSAgICBkZWxldGUgY29uc3RydWN0b3Jf
OwotICB9Ci0KLSAgdm9pZCBBZGQoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwgY29uc3Qgc3RkOjpz
dHJpbmcmIHZhbHVlKSB7Ci0gICAgY29uc3RydWN0b3JfLT5BZGQoa2V5LCB2YWx1ZSk7Ci0gIH0K
LQotICB2b2lkIFRlc3QoUmFuZG9tKiBybmQpIHsKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmlu
Zz4ga2V5czsKLSAgICBLVk1hcCBkYXRhOwotICAgIGNvbnN0cnVjdG9yXy0+RmluaXNoKG9wdGlv
bnNfLCAma2V5cywgJmRhdGEpOwotCi0gICAgVGVzdEZvcndhcmRTY2FuKGtleXMsIGRhdGEpOwot
ICAgIFRlc3RCYWNrd2FyZFNjYW4oa2V5cywgZGF0YSk7Ci0gICAgVGVzdFJhbmRvbUFjY2Vzcyhy
bmQsIGtleXMsIGRhdGEpOwotICB9Ci0KLSAgdm9pZCBUZXN0Rm9yd2FyZFNjYW4oY29uc3Qgc3Rk
Ojp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBrZXlzLAotICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBLVk1hcCYgZGF0YSkgewotICAgIEl0ZXJhdG9yKiBpdGVyID0gY29uc3RydWN0b3JfLT5OZXdJ
dGVyYXRvcigpOwotICAgIEFTU0VSVF9UUlVFKCFpdGVyLT5WYWxpZCgpKTsKLSAgICBpdGVyLT5T
ZWVrVG9GaXJzdCgpOwotICAgIGZvciAoS1ZNYXA6OmNvbnN0X2l0ZXJhdG9yIG1vZGVsX2l0ZXIg
PSBkYXRhLmJlZ2luKCk7Ci0gICAgICAgICBtb2RlbF9pdGVyICE9IGRhdGEuZW5kKCk7Ci0gICAg
ICAgICArK21vZGVsX2l0ZXIpIHsKLSAgICAgIEFTU0VSVF9FUShUb1N0cmluZyhkYXRhLCBtb2Rl
bF9pdGVyKSwgVG9TdHJpbmcoaXRlcikpOwotICAgICAgaXRlci0+TmV4dCgpOwotICAgIH0KLSAg
ICBBU1NFUlRfVFJVRSghaXRlci0+VmFsaWQoKSk7Ci0gICAgZGVsZXRlIGl0ZXI7Ci0gIH0KLQot
ICB2b2lkIFRlc3RCYWNrd2FyZFNjYW4oY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBr
ZXlzLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1ZNYXAmIGRhdGEpIHsKLSAgICBJ
dGVyYXRvciogaXRlciA9IGNvbnN0cnVjdG9yXy0+TmV3SXRlcmF0b3IoKTsKLSAgICBBU1NFUlRf
VFJVRSghaXRlci0+VmFsaWQoKSk7Ci0gICAgaXRlci0+U2Vla1RvTGFzdCgpOwotICAgIGZvciAo
S1ZNYXA6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgbW9kZWxfaXRlciA9IGRhdGEucmJlZ2luKCk7
Ci0gICAgICAgICBtb2RlbF9pdGVyICE9IGRhdGEucmVuZCgpOwotICAgICAgICAgKyttb2RlbF9p
dGVyKSB7Ci0gICAgICBBU1NFUlRfRVEoVG9TdHJpbmcoZGF0YSwgbW9kZWxfaXRlciksIFRvU3Ry
aW5nKGl0ZXIpKTsKLSAgICAgIGl0ZXItPlByZXYoKTsKLSAgICB9Ci0gICAgQVNTRVJUX1RSVUUo
IWl0ZXItPlZhbGlkKCkpOwotICAgIGRlbGV0ZSBpdGVyOwotICB9Ci0KLSAgdm9pZCBUZXN0UmFu
ZG9tQWNjZXNzKFJhbmRvbSogcm5kLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk
Ojp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBrZXlzLAotICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgS1ZNYXAmIGRhdGEpIHsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBrVmVyYm9zZSA9IGZhbHNl
OwotICAgIEl0ZXJhdG9yKiBpdGVyID0gY29uc3RydWN0b3JfLT5OZXdJdGVyYXRvcigpOwotICAg
IEFTU0VSVF9UUlVFKCFpdGVyLT5WYWxpZCgpKTsKLSAgICBLVk1hcDo6Y29uc3RfaXRlcmF0b3Ig
bW9kZWxfaXRlciA9IGRhdGEuYmVnaW4oKTsKLSAgICBpZiAoa1ZlcmJvc2UpIGZwcmludGYoc3Rk
ZXJyLCAiLS0tXG4iKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDIwMDsgaSsrKSB7Ci0gICAg
ICBjb25zdCBpbnQgdG9zcyA9IHJuZC0+VW5pZm9ybSg1KTsKLSAgICAgIHN3aXRjaCAodG9zcykg
ewotICAgICAgICBjYXNlIDA6IHsKLSAgICAgICAgICBpZiAoaXRlci0+VmFsaWQoKSkgewotICAg
ICAgICAgICAgaWYgKGtWZXJib3NlKSBmcHJpbnRmKHN0ZGVyciwgIk5leHRcbiIpOwotICAgICAg
ICAgICAgaXRlci0+TmV4dCgpOwotICAgICAgICAgICAgKyttb2RlbF9pdGVyOwotICAgICAgICAg
ICAgQVNTRVJUX0VRKFRvU3RyaW5nKGRhdGEsIG1vZGVsX2l0ZXIpLCBUb1N0cmluZyhpdGVyKSk7
Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2Fz
ZSAxOiB7Ci0gICAgICAgICAgaWYgKGtWZXJib3NlKSBmcHJpbnRmKHN0ZGVyciwgIlNlZWtUb0Zp
cnN0XG4iKTsKLSAgICAgICAgICBpdGVyLT5TZWVrVG9GaXJzdCgpOwotICAgICAgICAgIG1vZGVs
X2l0ZXIgPSBkYXRhLmJlZ2luKCk7Ci0gICAgICAgICAgQVNTRVJUX0VRKFRvU3RyaW5nKGRhdGEs
IG1vZGVsX2l0ZXIpLCBUb1N0cmluZyhpdGVyKSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLQotICAgICAgICBjYXNlIDI6IHsKLSAgICAgICAgICBzdGQ6OnN0cmluZyBrZXkgPSBQaWNr
UmFuZG9tS2V5KHJuZCwga2V5cyk7Ci0gICAgICAgICAgbW9kZWxfaXRlciA9IGRhdGEubG93ZXJf
Ym91bmQoa2V5KTsKLSAgICAgICAgICBpZiAoa1ZlcmJvc2UpIGZwcmludGYoc3RkZXJyLCAiU2Vl
ayAnJXMnXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFc2NhcGVTdHJpbmco
a2V5KS5jX3N0cigpKTsKLSAgICAgICAgICBpdGVyLT5TZWVrKFNsaWNlKGtleSkpOwotICAgICAg
ICAgIEFTU0VSVF9FUShUb1N0cmluZyhkYXRhLCBtb2RlbF9pdGVyKSwgVG9TdHJpbmcoaXRlcikp
OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSAzOiB7Ci0gICAg
ICAgICAgaWYgKGl0ZXItPlZhbGlkKCkpIHsKLSAgICAgICAgICAgIGlmIChrVmVyYm9zZSkgZnBy
aW50ZihzdGRlcnIsICJQcmV2XG4iKTsKLSAgICAgICAgICAgIGl0ZXItPlByZXYoKTsKLSAgICAg
ICAgICAgIGlmIChtb2RlbF9pdGVyID09IGRhdGEuYmVnaW4oKSkgewotICAgICAgICAgICAgICBt
b2RlbF9pdGVyID0gZGF0YS5lbmQoKTsgICAvLyBXcmFwIGFyb3VuZCB0byBpbnZhbGlkIHZhbHVl
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAtLW1vZGVsX2l0ZXI7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBBU1NFUlRfRVEoVG9TdHJpbmcoZGF0YSwgbW9kZWxfaXRl
ciksIFRvU3RyaW5nKGl0ZXIpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLQotICAgICAgICBjYXNlIDQ6IHsKLSAgICAgICAgICBpZiAoa1ZlcmJvc2UpIGZwcmlu
dGYoc3RkZXJyLCAiU2Vla1RvTGFzdFxuIik7Ci0gICAgICAgICAgaXRlci0+U2Vla1RvTGFzdCgp
OwotICAgICAgICAgIGlmIChrZXlzLmVtcHR5KCkpIHsKLSAgICAgICAgICAgIG1vZGVsX2l0ZXIg
PSBkYXRhLmVuZCgpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGQ6OnN0cmlu
ZyBsYXN0ID0gZGF0YS5yYmVnaW4oKS0+Zmlyc3Q7Ci0gICAgICAgICAgICBtb2RlbF9pdGVyID0g
ZGF0YS5sb3dlcl9ib3VuZChsYXN0KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgQVNTRVJUX0VR
KFRvU3RyaW5nKGRhdGEsIG1vZGVsX2l0ZXIpLCBUb1N0cmluZyhpdGVyKSk7Ci0gICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZGVsZXRlIGl0ZXI7Ci0gIH0K
LQotICBzdGQ6OnN0cmluZyBUb1N0cmluZyhjb25zdCBLVk1hcCYgZGF0YSwgY29uc3QgS1ZNYXA6
OmNvbnN0X2l0ZXJhdG9yJiBpdCkgewotICAgIGlmIChpdCA9PSBkYXRhLmVuZCgpKSB7Ci0gICAg
ICByZXR1cm4gIkVORCI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiAiJyIgKyBpdC0+Zmly
c3QgKyAiLT4iICsgaXQtPnNlY29uZCArICInIjsKLSAgICB9Ci0gIH0KLQotICBzdGQ6OnN0cmlu
ZyBUb1N0cmluZyhjb25zdCBLVk1hcCYgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgS1ZNYXA6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3ImIGl0KSB7Ci0gICAgaWYgKGl0ID09IGRh
dGEucmVuZCgpKSB7Ci0gICAgICByZXR1cm4gIkVORCI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJl
dHVybiAiJyIgKyBpdC0+Zmlyc3QgKyAiLT4iICsgaXQtPnNlY29uZCArICInIjsKLSAgICB9Ci0g
IH0KLQotICBzdGQ6OnN0cmluZyBUb1N0cmluZyhjb25zdCBJdGVyYXRvciogaXQpIHsKLSAgICBp
ZiAoIWl0LT5WYWxpZCgpKSB7Ci0gICAgICByZXR1cm4gIkVORCI7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgIHJldHVybiAiJyIgKyBpdC0+a2V5KCkuVG9TdHJpbmcoKSArICItPiIgKyBpdC0+dmFsdWUo
KS5Ub1N0cmluZygpICsgIiciOwotICAgIH0KLSAgfQotCi0gIHN0ZDo6c3RyaW5nIFBpY2tSYW5k
b21LZXkoUmFuZG9tKiBybmQsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYga2V5cykg
ewotICAgIGlmIChrZXlzLmVtcHR5KCkpIHsKLSAgICAgIHJldHVybiAiZm9vIjsKLSAgICB9IGVs
c2UgewotICAgICAgY29uc3QgaW50IGluZGV4ID0gcm5kLT5Vbmlmb3JtKGtleXMuc2l6ZSgpKTsK
LSAgICAgIHN0ZDo6c3RyaW5nIHJlc3VsdCA9IGtleXNbaW5kZXhdOwotICAgICAgc3dpdGNoIChy
bmQtPlVuaWZvcm0oMykpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgIC8vIFJldHVybiBh
biBleGlzdGluZyBrZXkKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOiB7Ci0gICAg
ICAgICAgLy8gQXR0ZW1wdCB0byByZXR1cm4gc29tZXRoaW5nIHNtYWxsZXIgdGhhbiBhbiBleGlz
dGluZyBrZXkKLSAgICAgICAgICBpZiAocmVzdWx0LnNpemUoKSA+IDAgJiYgcmVzdWx0W3Jlc3Vs
dC5zaXplKCktMV0gPiAnXDAnKSB7Ci0gICAgICAgICAgICByZXN1bHRbcmVzdWx0LnNpemUoKS0x
XS0tOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIDI6IHsKLSAgICAgICAgICAvLyBSZXR1cm4gc29tZXRoaW5nIGxhcmdlciB0aGFuIGFuIGV4
aXN0aW5nIGtleQotICAgICAgICAgIEluY3JlbWVudChvcHRpb25zXy5jb21wYXJhdG9yLCAmcmVz
dWx0KTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9Ci0gIH0KLQotICAvLyBSZXR1cm5zIE5VTEwgaWYgbm90IHJ1bm5pbmcg
YWdhaW5zdCBhIERCCi0gIERCKiBkYigpIGNvbnN0IHsgcmV0dXJuIGNvbnN0cnVjdG9yXy0+ZGIo
KTsgfQotCi0gcHJpdmF0ZToKLSAgT3B0aW9ucyBvcHRpb25zXzsKLSAgQ29uc3RydWN0b3IqIGNv
bnN0cnVjdG9yXzsKLX07Ci0KLS8vIFRlc3QgdGhlIGVtcHR5IGtleQotVEVTVChIYXJuZXNzLCBT
aW1wbGVFbXB0eUtleSkgewotICBmb3IgKGludCBpID0gMDsgaSA8IGtOdW1UZXN0QXJnczsgaSsr
KSB7Ci0gICAgSW5pdChrVGVzdEFyZ0xpc3RbaV0pOwotICAgIFJhbmRvbSBybmQodGVzdDo6UmFu
ZG9tU2VlZCgpICsgMSk7Ci0gICAgQWRkKCIiLCAidiIpOwotICAgIFRlc3QoJnJuZCk7Ci0gIH0K
LX0KLQotVEVTVChIYXJuZXNzLCBTaW1wbGVTaW5nbGUpIHsKLSAgZm9yIChpbnQgaSA9IDA7IGkg
PCBrTnVtVGVzdEFyZ3M7IGkrKykgewotICAgIEluaXQoa1Rlc3RBcmdMaXN0W2ldKTsKLSAgICBS
YW5kb20gcm5kKHRlc3Q6OlJhbmRvbVNlZWQoKSArIDIpOwotICAgIEFkZCgiYWJjIiwgInYiKTsK
LSAgICBUZXN0KCZybmQpOwotICB9Ci19Ci0KLVRFU1QoSGFybmVzcywgU2ltcGxlTXVsdGkpIHsK
LSAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTnVtVGVzdEFyZ3M7IGkrKykgewotICAgIEluaXQoa1Rl
c3RBcmdMaXN0W2ldKTsKLSAgICBSYW5kb20gcm5kKHRlc3Q6OlJhbmRvbVNlZWQoKSArIDMpOwot
ICAgIEFkZCgiYWJjIiwgInYiKTsKLSAgICBBZGQoImFiY2QiLCAidiIpOwotICAgIEFkZCgiYWMi
LCAidjIiKTsKLSAgICBUZXN0KCZybmQpOwotICB9Ci19Ci0KLVRFU1QoSGFybmVzcywgU2ltcGxl
U3BlY2lhbEtleSkgewotICBmb3IgKGludCBpID0gMDsgaSA8IGtOdW1UZXN0QXJnczsgaSsrKSB7
Ci0gICAgSW5pdChrVGVzdEFyZ0xpc3RbaV0pOwotICAgIFJhbmRvbSBybmQodGVzdDo6UmFuZG9t
U2VlZCgpICsgNCk7Ci0gICAgQWRkKCJceGZmXHhmZiIsICJ2MyIpOwotICAgIFRlc3QoJnJuZCk7
Ci0gIH0KLX0KLQotVEVTVChIYXJuZXNzLCBSYW5kb21pemVkKSB7Ci0gIGZvciAoaW50IGkgPSAw
OyBpIDwga051bVRlc3RBcmdzOyBpKyspIHsKLSAgICBJbml0KGtUZXN0QXJnTGlzdFtpXSk7Ci0g
ICAgUmFuZG9tIHJuZCh0ZXN0OjpSYW5kb21TZWVkKCkgKyA1KTsKLSAgICBmb3IgKGludCBudW1f
ZW50cmllcyA9IDA7IG51bV9lbnRyaWVzIDwgMjAwMDsKLSAgICAgICAgIG51bV9lbnRyaWVzICs9
IChudW1fZW50cmllcyA8IDUwID8gMSA6IDIwMCkpIHsKLSAgICAgIGlmICgobnVtX2VudHJpZXMg
JSAxMCkgPT0gMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNhc2UgJWQgb2YgJWQ6IG51
bV9lbnRyaWVzID0gJWRcbiIsCi0gICAgICAgICAgICAgICAgKGkgKyAxKSwgaW50KGtOdW1UZXN0
QXJncyksIG51bV9lbnRyaWVzKTsKLSAgICAgIH0KLSAgICAgIGZvciAoaW50IGUgPSAwOyBlIDwg
bnVtX2VudHJpZXM7IGUrKykgewotICAgICAgICBzdGQ6OnN0cmluZyB2OwotICAgICAgICBBZGQo
dGVzdDo6UmFuZG9tS2V5KCZybmQsIHJuZC5Ta2V3ZWQoNCkpLAotICAgICAgICAgICAgdGVzdDo6
UmFuZG9tU3RyaW5nKCZybmQsIHJuZC5Ta2V3ZWQoNSksICZ2KS5Ub1N0cmluZygpKTsKLSAgICAg
IH0KLSAgICAgIFRlc3QoJnJuZCk7Ci0gICAgfQotICB9Ci19Ci0KLVRFU1QoSGFybmVzcywgUmFu
ZG9taXplZExvbmdEQikgewotICBSYW5kb20gcm5kKHRlc3Q6OlJhbmRvbVNlZWQoKSk7Ci0gIFRl
c3RBcmdzIGFyZ3MgPSB7IERCX1RFU1QsIGZhbHNlLCAxNiB9OwotICBJbml0KGFyZ3MpOwotICBp
bnQgbnVtX2VudHJpZXMgPSAxMDAwMDA7Ci0gIGZvciAoaW50IGUgPSAwOyBlIDwgbnVtX2VudHJp
ZXM7IGUrKykgewotICAgIHN0ZDo6c3RyaW5nIHY7Ci0gICAgQWRkKHRlc3Q6OlJhbmRvbUtleSgm
cm5kLCBybmQuU2tld2VkKDQpKSwKLSAgICAgICAgdGVzdDo6UmFuZG9tU3RyaW5nKCZybmQsIHJu
ZC5Ta2V3ZWQoNSksICZ2KS5Ub1N0cmluZygpKTsKLSAgfQotICBUZXN0KCZybmQpOwotCi0gIC8v
IFdlIG11c3QgaGF2ZSBjcmVhdGVkIGVub3VnaCBkYXRhIHRvIGZvcmNlIG1lcmdpbmcKLSAgaW50
IGZpbGVzID0gMDsKLSAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGNvbmZpZzo6a051bUxl
dmVsczsgbGV2ZWwrKykgewotICAgIHN0ZDo6c3RyaW5nIHZhbHVlOwotICAgIGNoYXIgbmFtZVsx
MDBdOwotICAgIHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgImxldmVsZGIubnVtLWZpbGVz
LWF0LWxldmVsJWQiLCBsZXZlbCk7Ci0gICAgQVNTRVJUX1RSVUUoZGIoKS0+R2V0UHJvcGVydHko
bmFtZSwgJnZhbHVlKSk7Ci0gICAgZmlsZXMgKz0gYXRvaSh2YWx1ZS5jX3N0cigpKTsKLSAgfQot
ICBBU1NFUlRfR1QoZmlsZXMsIDApOwotfQotCi1jbGFzcyBNZW1UYWJsZVRlc3QgeyB9OwotCi1U
RVNUKE1lbVRhYmxlVGVzdCwgU2ltcGxlKSB7Ci0gIEludGVybmFsS2V5Q29tcGFyYXRvciBjbXAo
Qnl0ZXdpc2VDb21wYXJhdG9yKCkpOwotICBNZW1UYWJsZSogbWVtdGFibGUgPSBuZXcgTWVtVGFi
bGUoY21wKTsKLSAgbWVtdGFibGUtPlJlZigpOwotICBXcml0ZUJhdGNoIGJhdGNoOwotICBXcml0
ZUJhdGNoSW50ZXJuYWw6OlNldFNlcXVlbmNlKCZiYXRjaCwgMTAwKTsKLSAgYmF0Y2guUHV0KHN0
ZDo6c3RyaW5nKCJrMSIpLCBzdGQ6OnN0cmluZygidjEiKSk7Ci0gIGJhdGNoLlB1dChzdGQ6OnN0
cmluZygiazIiKSwgc3RkOjpzdHJpbmcoInYyIikpOwotICBiYXRjaC5QdXQoc3RkOjpzdHJpbmco
ImszIiksIHN0ZDo6c3RyaW5nKCJ2MyIpKTsKLSAgYmF0Y2guUHV0KHN0ZDo6c3RyaW5nKCJsYXJn
ZWtleSIpLCBzdGQ6OnN0cmluZygidmxhcmdlIikpOwotICBBU1NFUlRfVFJVRShXcml0ZUJhdGNo
SW50ZXJuYWw6Okluc2VydEludG8oJmJhdGNoLCBtZW10YWJsZSkub2soKSk7Ci0KLSAgSXRlcmF0
b3IqIGl0ZXIgPSBtZW10YWJsZS0+TmV3SXRlcmF0b3IoKTsKLSAgaXRlci0+U2Vla1RvRmlyc3Qo
KTsKLSAgd2hpbGUgKGl0ZXItPlZhbGlkKCkpIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgImtleTog
JyVzJyAtPiAnJXMnXG4iLAotICAgICAgICAgICAgaXRlci0+a2V5KCkuVG9TdHJpbmcoKS5jX3N0
cigpLAotICAgICAgICAgICAgaXRlci0+dmFsdWUoKS5Ub1N0cmluZygpLmNfc3RyKCkpOwotICAg
IGl0ZXItPk5leHQoKTsKLSAgfQotCi0gIGRlbGV0ZSBpdGVyOwotICBtZW10YWJsZS0+VW5yZWYo
KTsKLX0KLQotc3RhdGljIGJvb2wgQmV0d2Vlbih1aW50NjRfdCB2YWwsIHVpbnQ2NF90IGxvdywg
dWludDY0X3QgaGlnaCkgewotICBib29sIHJlc3VsdCA9ICh2YWwgPj0gbG93KSAmJiAodmFsIDw9
IGhpZ2gpOwotICBpZiAoIXJlc3VsdCkgewotICAgIGZwcmludGYoc3RkZXJyLCAiVmFsdWUgJWxs
dSBpcyBub3QgaW4gcmFuZ2UgWyVsbHUsICVsbHVdXG4iLAotICAgICAgICAgICAgKHVuc2lnbmVk
IGxvbmcgbG9uZykodmFsKSwKLSAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKGxvdyks
Ci0gICAgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKShoaWdoKSk7Ci0gIH0KLSAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotY2xhc3MgVGFibGVUZXN0IHsgfTsKLQotVEVTVChUYWJsZVRlc3QsIEFw
cHJveGltYXRlT2Zmc2V0T2ZQbGFpbikgewotICBUYWJsZUNvbnN0cnVjdG9yIGMoQnl0ZXdpc2VD
b21wYXJhdG9yKCkpOwotICBjLkFkZCgiazAxIiwgImhlbGxvIik7Ci0gIGMuQWRkKCJrMDIiLCAi
aGVsbG8yIik7Ci0gIGMuQWRkKCJrMDMiLCBzdGQ6OnN0cmluZygxMDAwMCwgJ3gnKSk7Ci0gIGMu
QWRkKCJrMDQiLCBzdGQ6OnN0cmluZygyMDAwMDAsICd4JykpOwotICBjLkFkZCgiazA1Iiwgc3Rk
OjpzdHJpbmcoMzAwMDAwLCAneCcpKTsKLSAgYy5BZGQoImswNiIsICJoZWxsbzMiKTsKLSAgYy5B
ZGQoImswNyIsIHN0ZDo6c3RyaW5nKDEwMDAwMCwgJ3gnKSk7Ci0gIHN0ZDo6dmVjdG9yPHN0ZDo6
c3RyaW5nPiBrZXlzOwotICBLVk1hcCBrdm1hcDsKLSAgT3B0aW9ucyBvcHRpb25zOwotICBvcHRp
b25zLmJsb2NrX3NpemUgPSAxMDI0OwotICBvcHRpb25zLmNvbXByZXNzaW9uID0ga05vQ29tcHJl
c3Npb247Ci0gIGMuRmluaXNoKG9wdGlvbnMsICZrZXlzLCAma3ZtYXApOwotCi0gIEFTU0VSVF9U
UlVFKEJldHdlZW4oYy5BcHByb3hpbWF0ZU9mZnNldE9mKCJhYmMiKSwgICAgICAgMCwgICAgICAw
KSk7Ci0gIEFTU0VSVF9UUlVFKEJldHdlZW4oYy5BcHByb3hpbWF0ZU9mZnNldE9mKCJrMDEiKSwg
ICAgICAgMCwgICAgICAwKSk7Ci0gIEFTU0VSVF9UUlVFKEJldHdlZW4oYy5BcHByb3hpbWF0ZU9m
ZnNldE9mKCJrMDFhIiksICAgICAgMCwgICAgICAwKSk7Ci0gIEFTU0VSVF9UUlVFKEJldHdlZW4o
Yy5BcHByb3hpbWF0ZU9mZnNldE9mKCJrMDIiKSwgICAgICAgMCwgICAgICAwKSk7Ci0gIEFTU0VS
VF9UUlVFKEJldHdlZW4oYy5BcHByb3hpbWF0ZU9mZnNldE9mKCJrMDMiKSwgICAgICAgMCwgICAg
ICAwKSk7Ci0gIEFTU0VSVF9UUlVFKEJldHdlZW4oYy5BcHByb3hpbWF0ZU9mZnNldE9mKCJrMDQi
KSwgICAxMDAwMCwgIDExMDAwKSk7Ci0gIEFTU0VSVF9UUlVFKEJldHdlZW4oYy5BcHByb3hpbWF0
ZU9mZnNldE9mKCJrMDRhIiksIDIxMDAwMCwgMjExMDAwKSk7Ci0gIEFTU0VSVF9UUlVFKEJldHdl
ZW4oYy5BcHByb3hpbWF0ZU9mZnNldE9mKCJrMDUiKSwgIDIxMDAwMCwgMjExMDAwKSk7Ci0gIEFT
U0VSVF9UUlVFKEJldHdlZW4oYy5BcHByb3hpbWF0ZU9mZnNldE9mKCJrMDYiKSwgIDUxMDAwMCwg
NTExMDAwKSk7Ci0gIEFTU0VSVF9UUlVFKEJldHdlZW4oYy5BcHByb3hpbWF0ZU9mZnNldE9mKCJr
MDciKSwgIDUxMDAwMCwgNTExMDAwKSk7Ci0gIEFTU0VSVF9UUlVFKEJldHdlZW4oYy5BcHByb3hp
bWF0ZU9mZnNldE9mKCJ4eXoiKSwgIDYxMDAwMCwgNjEyMDAwKSk7Ci0KLX0KLQotc3RhdGljIGJv
b2wgU25hcHB5Q29tcHJlc3Npb25TdXBwb3J0ZWQoKSB7Ci0gIHN0ZDo6c3RyaW5nIG91dDsKLSAg
U2xpY2UgaW4gPSAiYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSI7Ci0gIHJldHVybiBw
b3J0OjpTbmFwcHlfQ29tcHJlc3MoaW4uZGF0YSgpLCBpbi5zaXplKCksICZvdXQpOwotfQotCi1U
RVNUKFRhYmxlVGVzdCwgQXBwcm94aW1hdGVPZmZzZXRPZkNvbXByZXNzZWQpIHsKLSAgaWYgKCFT
bmFwcHlDb21wcmVzc2lvblN1cHBvcnRlZCgpKSB7Ci0gICAgZnByaW50ZihzdGRlcnIsICJza2lw
cGluZyBjb21wcmVzc2lvbiB0ZXN0c1xuIik7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgUmFuZG9t
IHJuZCgzMDEpOwotICBUYWJsZUNvbnN0cnVjdG9yIGMoQnl0ZXdpc2VDb21wYXJhdG9yKCkpOwot
ICBzdGQ6OnN0cmluZyB0bXA7Ci0gIGMuQWRkKCJrMDEiLCAiaGVsbG8iKTsKLSAgYy5BZGQoImsw
MiIsIHRlc3Q6OkNvbXByZXNzaWJsZVN0cmluZygmcm5kLCAwLjI1LCAxMDAwMCwgJnRtcCkpOwot
ICBjLkFkZCgiazAzIiwgImhlbGxvMyIpOwotICBjLkFkZCgiazA0IiwgdGVzdDo6Q29tcHJlc3Np
YmxlU3RyaW5nKCZybmQsIDAuMjUsIDEwMDAwLCAmdG1wKSk7Ci0gIHN0ZDo6dmVjdG9yPHN0ZDo6
c3RyaW5nPiBrZXlzOwotICBLVk1hcCBrdm1hcDsKLSAgT3B0aW9ucyBvcHRpb25zOwotICBvcHRp
b25zLmJsb2NrX3NpemUgPSAxMDI0OwotICBvcHRpb25zLmNvbXByZXNzaW9uID0ga1NuYXBweUNv
bXByZXNzaW9uOwotICBjLkZpbmlzaChvcHRpb25zLCAma2V5cywgJmt2bWFwKTsKLQotICBBU1NF
UlRfVFJVRShCZXR3ZWVuKGMuQXBwcm94aW1hdGVPZmZzZXRPZigiYWJjIiksICAgICAgIDAsICAg
ICAgMCkpOwotICBBU1NFUlRfVFJVRShCZXR3ZWVuKGMuQXBwcm94aW1hdGVPZmZzZXRPZigiazAx
IiksICAgICAgIDAsICAgICAgMCkpOwotICBBU1NFUlRfVFJVRShCZXR3ZWVuKGMuQXBwcm94aW1h
dGVPZmZzZXRPZigiazAyIiksICAgICAgIDAsICAgICAgMCkpOwotICBBU1NFUlRfVFJVRShCZXR3
ZWVuKGMuQXBwcm94aW1hdGVPZmZzZXRPZigiazAzIiksICAgIDIwMDAsICAgMzAwMCkpOwotICBB
U1NFUlRfVFJVRShCZXR3ZWVuKGMuQXBwcm94aW1hdGVPZmZzZXRPZigiazA0IiksICAgIDIwMDAs
ICAgMzAwMCkpOwotICBBU1NFUlRfVFJVRShCZXR3ZWVuKGMuQXBwcm94aW1hdGVPZmZzZXRPZigi
eHl6IiksICAgIDQwMDAsICAgNjAwMCkpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgot
Ci1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKLSAgcmV0dXJuIGxldmVsZGI6OnRl
c3Q6OlJ1bkFsbFRlc3RzKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZl
bGRiL3RhYmxlL3R3b19sZXZlbF9pdGVyYXRvci5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVs
ZGIvdGFibGUvdHdvX2xldmVsX2l0ZXJhdG9yLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3ODIyZWJhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFi
bGUvdHdvX2xldmVsX2l0ZXJhdG9yLmNjCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAK
LS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4g
U2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KLQotI2luY2x1
ZGUgInRhYmxlL3R3b19sZXZlbF9pdGVyYXRvci5oIgotCi0jaW5jbHVkZSAibGV2ZWxkYi90YWJs
ZS5oIgotI2luY2x1ZGUgInRhYmxlL2Jsb2NrLmgiCi0jaW5jbHVkZSAidGFibGUvZm9ybWF0Lmgi
Ci0jaW5jbHVkZSAidGFibGUvaXRlcmF0b3Jfd3JhcHBlci5oIgotCi1uYW1lc3BhY2UgbGV2ZWxk
YiB7Ci0KLW5hbWVzcGFjZSB7Ci0KLXR5cGVkZWYgSXRlcmF0b3IqICgqQmxvY2tGdW5jdGlvbiko
dm9pZCosIGNvbnN0IFJlYWRPcHRpb25zJiwgY29uc3QgU2xpY2UmKTsKLQotY2xhc3MgVHdvTGV2
ZWxJdGVyYXRvcjogcHVibGljIEl0ZXJhdG9yIHsKLSBwdWJsaWM6Ci0gIFR3b0xldmVsSXRlcmF0
b3IoCi0gICAgSXRlcmF0b3IqIGluZGV4X2l0ZXIsCi0gICAgQmxvY2tGdW5jdGlvbiBibG9ja19m
dW5jdGlvbiwKLSAgICB2b2lkKiBhcmcsCi0gICAgY29uc3QgUmVhZE9wdGlvbnMmIG9wdGlvbnMp
OwotCi0gIHZpcnR1YWwgflR3b0xldmVsSXRlcmF0b3IoKTsKLQotICB2aXJ0dWFsIHZvaWQgU2Vl
ayhjb25zdCBTbGljZSYgdGFyZ2V0KTsKLSAgdmlydHVhbCB2b2lkIFNlZWtUb0ZpcnN0KCk7Ci0g
IHZpcnR1YWwgdm9pZCBTZWVrVG9MYXN0KCk7Ci0gIHZpcnR1YWwgdm9pZCBOZXh0KCk7Ci0gIHZp
cnR1YWwgdm9pZCBQcmV2KCk7Ci0KLSAgdmlydHVhbCBib29sIFZhbGlkKCkgY29uc3QgewotICAg
IHJldHVybiBkYXRhX2l0ZXJfLlZhbGlkKCk7Ci0gIH0KLSAgdmlydHVhbCBTbGljZSBrZXkoKSBj
b25zdCB7Ci0gICAgYXNzZXJ0KFZhbGlkKCkpOwotICAgIHJldHVybiBkYXRhX2l0ZXJfLmtleSgp
OwotICB9Ci0gIHZpcnR1YWwgU2xpY2UgdmFsdWUoKSBjb25zdCB7Ci0gICAgYXNzZXJ0KFZhbGlk
KCkpOwotICAgIHJldHVybiBkYXRhX2l0ZXJfLnZhbHVlKCk7Ci0gIH0KLSAgdmlydHVhbCBTdGF0
dXMgc3RhdHVzKCkgY29uc3QgewotICAgIC8vIEl0J2QgYmUgbmljZSBpZiBzdGF0dXMoKSByZXR1
cm5lZCBhIGNvbnN0IFN0YXR1cyYgaW5zdGVhZCBvZiBhIFN0YXR1cwotICAgIGlmICghaW5kZXhf
aXRlcl8uc3RhdHVzKCkub2soKSkgewotICAgICAgcmV0dXJuIGluZGV4X2l0ZXJfLnN0YXR1cygp
OwotICAgIH0gZWxzZSBpZiAoZGF0YV9pdGVyXy5pdGVyKCkgIT0gTlVMTCAmJiAhZGF0YV9pdGVy
Xy5zdGF0dXMoKS5vaygpKSB7Ci0gICAgICByZXR1cm4gZGF0YV9pdGVyXy5zdGF0dXMoKTsKLSAg
ICB9IGVsc2UgewotICAgICAgcmV0dXJuIHN0YXR1c187Ci0gICAgfQotICB9Ci0KLSBwcml2YXRl
OgotICB2b2lkIFNhdmVFcnJvcihjb25zdCBTdGF0dXMmIHMpIHsKLSAgICBpZiAoc3RhdHVzXy5v
aygpICYmICFzLm9rKCkpIHN0YXR1c18gPSBzOwotICB9Ci0gIHZvaWQgU2tpcEVtcHR5RGF0YUJs
b2Nrc0ZvcndhcmQoKTsKLSAgdm9pZCBTa2lwRW1wdHlEYXRhQmxvY2tzQmFja3dhcmQoKTsKLSAg
dm9pZCBTZXREYXRhSXRlcmF0b3IoSXRlcmF0b3IqIGRhdGFfaXRlcik7Ci0gIHZvaWQgSW5pdERh
dGFCbG9jaygpOwotCi0gIEJsb2NrRnVuY3Rpb24gYmxvY2tfZnVuY3Rpb25fOwotICB2b2lkKiBh
cmdfOwotICBjb25zdCBSZWFkT3B0aW9ucyBvcHRpb25zXzsKLSAgU3RhdHVzIHN0YXR1c187Ci0g
IEl0ZXJhdG9yV3JhcHBlciBpbmRleF9pdGVyXzsKLSAgSXRlcmF0b3JXcmFwcGVyIGRhdGFfaXRl
cl87IC8vIE1heSBiZSBOVUxMCi0gIC8vIElmIGRhdGFfaXRlcl8gaXMgbm9uLU5VTEwsIHRoZW4g
ImRhdGFfYmxvY2tfaGFuZGxlXyIgaG9sZHMgdGhlCi0gIC8vICJpbmRleF92YWx1ZSIgcGFzc2Vk
IHRvIGJsb2NrX2Z1bmN0aW9uXyB0byBjcmVhdGUgdGhlIGRhdGFfaXRlcl8uCi0gIHN0ZDo6c3Ry
aW5nIGRhdGFfYmxvY2tfaGFuZGxlXzsKLX07Ci0KLVR3b0xldmVsSXRlcmF0b3I6OlR3b0xldmVs
SXRlcmF0b3IoCi0gICAgSXRlcmF0b3IqIGluZGV4X2l0ZXIsCi0gICAgQmxvY2tGdW5jdGlvbiBi
bG9ja19mdW5jdGlvbiwKLSAgICB2b2lkKiBhcmcsCi0gICAgY29uc3QgUmVhZE9wdGlvbnMmIG9w
dGlvbnMpCi0gICAgOiBibG9ja19mdW5jdGlvbl8oYmxvY2tfZnVuY3Rpb24pLAotICAgICAgYXJn
XyhhcmcpLAotICAgICAgb3B0aW9uc18ob3B0aW9ucyksCi0gICAgICBpbmRleF9pdGVyXyhpbmRl
eF9pdGVyKSwKLSAgICAgIGRhdGFfaXRlcl8oTlVMTCkgewotfQotCi1Ud29MZXZlbEl0ZXJhdG9y
Ojp+VHdvTGV2ZWxJdGVyYXRvcigpIHsKLX0KLQotdm9pZCBUd29MZXZlbEl0ZXJhdG9yOjpTZWVr
KGNvbnN0IFNsaWNlJiB0YXJnZXQpIHsKLSAgaW5kZXhfaXRlcl8uU2Vlayh0YXJnZXQpOwotICBJ
bml0RGF0YUJsb2NrKCk7Ci0gIGlmIChkYXRhX2l0ZXJfLml0ZXIoKSAhPSBOVUxMKSBkYXRhX2l0
ZXJfLlNlZWsodGFyZ2V0KTsKLSAgU2tpcEVtcHR5RGF0YUJsb2Nrc0ZvcndhcmQoKTsKLX0KLQot
dm9pZCBUd29MZXZlbEl0ZXJhdG9yOjpTZWVrVG9GaXJzdCgpIHsKLSAgaW5kZXhfaXRlcl8uU2Vl
a1RvRmlyc3QoKTsKLSAgSW5pdERhdGFCbG9jaygpOwotICBpZiAoZGF0YV9pdGVyXy5pdGVyKCkg
IT0gTlVMTCkgZGF0YV9pdGVyXy5TZWVrVG9GaXJzdCgpOwotICBTa2lwRW1wdHlEYXRhQmxvY2tz
Rm9yd2FyZCgpOwotfQotCi12b2lkIFR3b0xldmVsSXRlcmF0b3I6OlNlZWtUb0xhc3QoKSB7Ci0g
IGluZGV4X2l0ZXJfLlNlZWtUb0xhc3QoKTsKLSAgSW5pdERhdGFCbG9jaygpOwotICBpZiAoZGF0
YV9pdGVyXy5pdGVyKCkgIT0gTlVMTCkgZGF0YV9pdGVyXy5TZWVrVG9MYXN0KCk7Ci0gIFNraXBF
bXB0eURhdGFCbG9ja3NCYWNrd2FyZCgpOwotfQotCi12b2lkIFR3b0xldmVsSXRlcmF0b3I6Ok5l
eHQoKSB7Ci0gIGFzc2VydChWYWxpZCgpKTsKLSAgZGF0YV9pdGVyXy5OZXh0KCk7Ci0gIFNraXBF
bXB0eURhdGFCbG9ja3NGb3J3YXJkKCk7Ci19Ci0KLXZvaWQgVHdvTGV2ZWxJdGVyYXRvcjo6UHJl
digpIHsKLSAgYXNzZXJ0KFZhbGlkKCkpOwotICBkYXRhX2l0ZXJfLlByZXYoKTsKLSAgU2tpcEVt
cHR5RGF0YUJsb2Nrc0JhY2t3YXJkKCk7Ci19Ci0KLQotdm9pZCBUd29MZXZlbEl0ZXJhdG9yOjpT
a2lwRW1wdHlEYXRhQmxvY2tzRm9yd2FyZCgpIHsKLSAgd2hpbGUgKGRhdGFfaXRlcl8uaXRlcigp
ID09IE5VTEwgfHwgIWRhdGFfaXRlcl8uVmFsaWQoKSkgewotICAgIC8vIE1vdmUgdG8gbmV4dCBi
bG9jawotICAgIGlmICghaW5kZXhfaXRlcl8uVmFsaWQoKSkgewotICAgICAgU2V0RGF0YUl0ZXJh
dG9yKE5VTEwpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpbmRleF9pdGVyXy5OZXh0KCk7
Ci0gICAgSW5pdERhdGFCbG9jaygpOwotICAgIGlmIChkYXRhX2l0ZXJfLml0ZXIoKSAhPSBOVUxM
KSBkYXRhX2l0ZXJfLlNlZWtUb0ZpcnN0KCk7Ci0gIH0KLX0KLQotdm9pZCBUd29MZXZlbEl0ZXJh
dG9yOjpTa2lwRW1wdHlEYXRhQmxvY2tzQmFja3dhcmQoKSB7Ci0gIHdoaWxlIChkYXRhX2l0ZXJf
Lml0ZXIoKSA9PSBOVUxMIHx8ICFkYXRhX2l0ZXJfLlZhbGlkKCkpIHsKLSAgICAvLyBNb3ZlIHRv
IG5leHQgYmxvY2sKLSAgICBpZiAoIWluZGV4X2l0ZXJfLlZhbGlkKCkpIHsKLSAgICAgIFNldERh
dGFJdGVyYXRvcihOVUxMKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaW5kZXhfaXRlcl8u
UHJldigpOwotICAgIEluaXREYXRhQmxvY2soKTsKLSAgICBpZiAoZGF0YV9pdGVyXy5pdGVyKCkg
IT0gTlVMTCkgZGF0YV9pdGVyXy5TZWVrVG9MYXN0KCk7Ci0gIH0KLX0KLQotdm9pZCBUd29MZXZl
bEl0ZXJhdG9yOjpTZXREYXRhSXRlcmF0b3IoSXRlcmF0b3IqIGRhdGFfaXRlcikgewotICBpZiAo
ZGF0YV9pdGVyXy5pdGVyKCkgIT0gTlVMTCkgU2F2ZUVycm9yKGRhdGFfaXRlcl8uc3RhdHVzKCkp
OwotICBkYXRhX2l0ZXJfLlNldChkYXRhX2l0ZXIpOwotfQotCi12b2lkIFR3b0xldmVsSXRlcmF0
b3I6OkluaXREYXRhQmxvY2soKSB7Ci0gIGlmICghaW5kZXhfaXRlcl8uVmFsaWQoKSkgewotICAg
IFNldERhdGFJdGVyYXRvcihOVUxMKTsKLSAgfSBlbHNlIHsKLSAgICBTbGljZSBoYW5kbGUgPSBp
bmRleF9pdGVyXy52YWx1ZSgpOwotICAgIGlmIChkYXRhX2l0ZXJfLml0ZXIoKSAhPSBOVUxMICYm
IGhhbmRsZS5jb21wYXJlKGRhdGFfYmxvY2tfaGFuZGxlXykgPT0gMCkgewotICAgICAgLy8gZGF0
YV9pdGVyXyBpcyBhbHJlYWR5IGNvbnN0cnVjdGVkIHdpdGggdGhpcyBpdGVyYXRvciwgc28KLSAg
ICAgIC8vIG5vIG5lZWQgdG8gY2hhbmdlIGFueXRoaW5nCi0gICAgfSBlbHNlIHsKLSAgICAgIEl0
ZXJhdG9yKiBpdGVyID0gKCpibG9ja19mdW5jdGlvbl8pKGFyZ18sIG9wdGlvbnNfLCBoYW5kbGUp
OwotICAgICAgZGF0YV9ibG9ja19oYW5kbGVfLmFzc2lnbihoYW5kbGUuZGF0YSgpLCBoYW5kbGUu
c2l6ZSgpKTsKLSAgICAgIFNldERhdGFJdGVyYXRvcihpdGVyKTsKLSAgICB9Ci0gIH0KLX0KLQot
fSAgLy8gbmFtZXNwYWNlCi0KLUl0ZXJhdG9yKiBOZXdUd29MZXZlbEl0ZXJhdG9yKAotICAgIEl0
ZXJhdG9yKiBpbmRleF9pdGVyLAotICAgIEJsb2NrRnVuY3Rpb24gYmxvY2tfZnVuY3Rpb24sCi0g
ICAgdm9pZCogYXJnLAotICAgIGNvbnN0IFJlYWRPcHRpb25zJiBvcHRpb25zKSB7Ci0gIHJldHVy
biBuZXcgVHdvTGV2ZWxJdGVyYXRvcihpbmRleF9pdGVyLCBibG9ja19mdW5jdGlvbiwgYXJnLCBv
cHRpb25zKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvdHdvX2xldmVsX2l0ZXJhdG9yLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL3R3b19sZXZlbF9pdGVyYXRvci5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA2MjljYTM0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xldmVsZGIvdGFibGUvdHdvX2xldmVsX2l0ZXJhdG9yLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwzNCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRv
cnMuCi0KLSNpZm5kZWYgU1RPUkFHRV9MRVZFTERCX1RBQkxFX1RXT19MRVZFTF9JVEVSQVRPUl9I
XwotI2RlZmluZSBTVE9SQUdFX0xFVkVMREJfVEFCTEVfVFdPX0xFVkVMX0lURVJBVE9SX0hfCi0K
LSNpbmNsdWRlICJsZXZlbGRiL2l0ZXJhdG9yLmgiCi0KLW5hbWVzcGFjZSBsZXZlbGRiIHsKLQot
c3RydWN0IFJlYWRPcHRpb25zOwotCi0vLyBSZXR1cm4gYSBuZXcgdHdvIGxldmVsIGl0ZXJhdG9y
LiAgQSB0d28tbGV2ZWwgaXRlcmF0b3IgY29udGFpbnMgYW4KLS8vIGluZGV4IGl0ZXJhdG9yIHdo
b3NlIHZhbHVlcyBwb2ludCB0byBhIHNlcXVlbmNlIG9mIGJsb2NrcyB3aGVyZQotLy8gZWFjaCBi
bG9jayBpcyBpdHNlbGYgYSBzZXF1ZW5jZSBvZiBrZXksdmFsdWUgcGFpcnMuICBUaGUgcmV0dXJu
ZWQKLS8vIHR3by1sZXZlbCBpdGVyYXRvciB5aWVsZHMgdGhlIGNvbmNhdGVuYXRpb24gb2YgYWxs
IGtleS92YWx1ZSBwYWlycwotLy8gaW4gdGhlIHNlcXVlbmNlIG9mIGJsb2Nrcy4gIFRha2VzIG93
bmVyc2hpcCBvZiAiaW5kZXhfaXRlciIgYW5kCi0vLyB3aWxsIGRlbGV0ZSBpdCB3aGVuIG5vIGxv
bmdlciBuZWVkZWQuCi0vLwotLy8gVXNlcyBhIHN1cHBsaWVkIGZ1bmN0aW9uIHRvIGNvbnZlcnQg
YW4gaW5kZXhfaXRlciB2YWx1ZSBpbnRvCi0vLyBhbiBpdGVyYXRvciBvdmVyIHRoZSBjb250ZW50
cyBvZiB0aGUgY29ycmVzcG9uZGluZyBibG9jay4KLWV4dGVybiBJdGVyYXRvciogTmV3VHdvTGV2
ZWxJdGVyYXRvcigKLSAgICBJdGVyYXRvciogaW5kZXhfaXRlciwKLSAgICBJdGVyYXRvciogKCpi
bG9ja19mdW5jdGlvbikoCi0gICAgICAgIHZvaWQqIGFyZywKLSAgICAgICAgY29uc3QgUmVhZE9w
dGlvbnMmIG9wdGlvbnMsCi0gICAgICAgIGNvbnN0IFNsaWNlJiBpbmRleF92YWx1ZSksCi0gICAg
dm9pZCogYXJnLAotICAgIGNvbnN0IFJlYWRPcHRpb25zJiBvcHRpb25zKTsKLQotfSAgLy8gbmFt
ZXNwYWNlIGxldmVsZGIKLQotI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfVEFCTEVfVFdPX0xF
VkVMX0lURVJBVE9SX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0
aWwvYXJlbmEuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvYXJlbmEuY2MKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1NTFkNmEuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2FyZW5hLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNjgg
KzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgot
Ci0jaW5jbHVkZSAidXRpbC9hcmVuYS5oIgotI2luY2x1ZGUgPGFzc2VydC5oPgotCi1uYW1lc3Bh
Y2UgbGV2ZWxkYiB7Ci0KLXN0YXRpYyBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDQwOTY7Ci0KLUFy
ZW5hOjpBcmVuYSgpIHsKLSAgYmxvY2tzX21lbW9yeV8gPSAwOwotICBhbGxvY19wdHJfID0gTlVM
TDsgIC8vIEZpcnN0IGFsbG9jYXRpb24gd2lsbCBhbGxvY2F0ZSBhIGJsb2NrCi0gIGFsbG9jX2J5
dGVzX3JlbWFpbmluZ18gPSAwOwotfQotCi1BcmVuYTo6fkFyZW5hKCkgewotICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGJsb2Nrc18uc2l6ZSgpOyBpKyspIHsKLSAgICBkZWxldGVbXSBibG9ja3Nf
W2ldOwotICB9Ci19Ci0KLWNoYXIqIEFyZW5hOjpBbGxvY2F0ZUZhbGxiYWNrKHNpemVfdCBieXRl
cykgewotICBpZiAoYnl0ZXMgPiBrQmxvY2tTaXplIC8gNCkgewotICAgIC8vIE9iamVjdCBpcyBt
b3JlIHRoYW4gYSBxdWFydGVyIG9mIG91ciBibG9jayBzaXplLiAgQWxsb2NhdGUgaXQgc2VwYXJh
dGVseQotICAgIC8vIHRvIGF2b2lkIHdhc3RpbmcgdG9vIG11Y2ggc3BhY2UgaW4gbGVmdG92ZXIg
Ynl0ZXMuCi0gICAgY2hhciogcmVzdWx0ID0gQWxsb2NhdGVOZXdCbG9jayhieXRlcyk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIC8vIFdlIHdhc3RlIHRoZSByZW1haW5pbmcgc3BhY2Ug
aW4gdGhlIGN1cnJlbnQgYmxvY2suCi0gIGFsbG9jX3B0cl8gPSBBbGxvY2F0ZU5ld0Jsb2NrKGtC
bG9ja1NpemUpOwotICBhbGxvY19ieXRlc19yZW1haW5pbmdfID0ga0Jsb2NrU2l6ZTsKLQotICBj
aGFyKiByZXN1bHQgPSBhbGxvY19wdHJfOwotICBhbGxvY19wdHJfICs9IGJ5dGVzOwotICBhbGxv
Y19ieXRlc19yZW1haW5pbmdfIC09IGJ5dGVzOwotICByZXR1cm4gcmVzdWx0OwotfQotCi1jaGFy
KiBBcmVuYTo6QWxsb2NhdGVBbGlnbmVkKHNpemVfdCBieXRlcykgewotICBjb25zdCBpbnQgYWxp
Z24gPSBzaXplb2Yodm9pZCopOyAgICAvLyBXZSdsbCBhbGlnbiB0byBwb2ludGVyIHNpemUKLSAg
YXNzZXJ0KChhbGlnbiAmIChhbGlnbi0xKSkgPT0gMCk7ICAgLy8gUG9pbnRlciBzaXplIHNob3Vs
ZCBiZSBhIHBvd2VyIG9mIDIKLSAgc2l6ZV90IGN1cnJlbnRfbW9kID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KGFsbG9jX3B0cl8pICYgKGFsaWduLTEpOwotICBzaXplX3Qgc2xvcCA9IChj
dXJyZW50X21vZCA9PSAwID8gMCA6IGFsaWduIC0gY3VycmVudF9tb2QpOwotICBzaXplX3QgbmVl
ZGVkID0gYnl0ZXMgKyBzbG9wOwotICBjaGFyKiByZXN1bHQ7Ci0gIGlmIChuZWVkZWQgPD0gYWxs
b2NfYnl0ZXNfcmVtYWluaW5nXykgewotICAgIHJlc3VsdCA9IGFsbG9jX3B0cl8gKyBzbG9wOwot
ICAgIGFsbG9jX3B0cl8gKz0gbmVlZGVkOwotICAgIGFsbG9jX2J5dGVzX3JlbWFpbmluZ18gLT0g
bmVlZGVkOwotICB9IGVsc2UgewotICAgIC8vIEFsbG9jYXRlRmFsbGJhY2sgYWx3YXlzIHJldHVy
bmVkIGFsaWduZWQgbWVtb3J5Ci0gICAgcmVzdWx0ID0gQWxsb2NhdGVGYWxsYmFjayhieXRlcyk7
Ci0gIH0KLSAgYXNzZXJ0KChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmVzdWx0KSAmIChh
bGlnbi0xKSkgPT0gMCk7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLWNoYXIqIEFyZW5hOjpBbGxv
Y2F0ZU5ld0Jsb2NrKHNpemVfdCBibG9ja19ieXRlcykgewotICBjaGFyKiByZXN1bHQgPSBuZXcg
Y2hhcltibG9ja19ieXRlc107Ci0gIGJsb2Nrc19tZW1vcnlfICs9IGJsb2NrX2J5dGVzOwotICBi
bG9ja3NfLnB1c2hfYmFjayhyZXN1bHQpOwotICByZXR1cm4gcmVzdWx0OwotfQotCi19ICAvLyBu
YW1lc3BhY2UgbGV2ZWxkYgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91
dGlsL2FyZW5hLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvYXJlbmEuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY3ZGRlMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvYXJlbmEuaAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICsw
LDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KLQot
I2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfVVRJTF9BUkVOQV9IXwotI2RlZmluZSBTVE9SQUdFX0xF
VkVMREJfVVRJTF9BUkVOQV9IXwotCi0jaW5jbHVkZSA8Y3N0ZGRlZj4KLSNpbmNsdWRlIDx2ZWN0
b3I+Ci0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0KLW5hbWVzcGFj
ZSBsZXZlbGRiIHsKLQotY2xhc3MgQXJlbmEgewotIHB1YmxpYzoKLSAgQXJlbmEoKTsKLSAgfkFy
ZW5hKCk7Ci0KLSAgLy8gUmV0dXJuIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCBtZW1v
cnkgYmxvY2sgb2YgImJ5dGVzIiBieXRlcy4KLSAgY2hhciogQWxsb2NhdGUoc2l6ZV90IGJ5dGVz
KTsKLQotICAvLyBBbGxvY2F0ZSBtZW1vcnkgd2l0aCB0aGUgbm9ybWFsIGFsaWdubWVudCBndWFy
YW50ZWVzIHByb3ZpZGVkIGJ5IG1hbGxvYwotICBjaGFyKiBBbGxvY2F0ZUFsaWduZWQoc2l6ZV90
IGJ5dGVzKTsKLQotICAvLyBSZXR1cm5zIGFuIGVzdGltYXRlIG9mIHRoZSB0b3RhbCBtZW1vcnkg
dXNhZ2Ugb2YgZGF0YSBhbGxvY2F0ZWQKLSAgLy8gYnkgdGhlIGFyZW5hIChpbmNsdWRpbmcgc3Bh
Y2UgYWxsb2NhdGVkIGJ1dCBub3QgeWV0IHVzZWQgZm9yIHVzZXIKLSAgLy8gYWxsb2NhdGlvbnMp
LgotICBzaXplX3QgTWVtb3J5VXNhZ2UoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGJsb2Nrc19tZW1v
cnlfICsgYmxvY2tzXy5jYXBhY2l0eSgpICogc2l6ZW9mKGNoYXIqKTsKLSAgfQotCi0gcHJpdmF0
ZToKLSAgY2hhciogQWxsb2NhdGVGYWxsYmFjayhzaXplX3QgYnl0ZXMpOwotICBjaGFyKiBBbGxv
Y2F0ZU5ld0Jsb2NrKHNpemVfdCBibG9ja19ieXRlcyk7Ci0KLSAgLy8gQWxsb2NhdGlvbiBzdGF0
ZQotICBjaGFyKiBhbGxvY19wdHJfOwotICBzaXplX3QgYWxsb2NfYnl0ZXNfcmVtYWluaW5nXzsK
LQotICAvLyBBcnJheSBvZiBuZXdbXSBhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrcwotICBzdGQ6OnZl
Y3RvcjxjaGFyKj4gYmxvY2tzXzsKLQotICAvLyBCeXRlcyBvZiBtZW1vcnkgaW4gYmxvY2tzIGFs
bG9jYXRlZCBzbyBmYXIKLSAgc2l6ZV90IGJsb2Nrc19tZW1vcnlfOwotCi0gIC8vIE5vIGNvcHlp
bmcgYWxsb3dlZAotICBBcmVuYShjb25zdCBBcmVuYSYpOwotICB2b2lkIG9wZXJhdG9yPShjb25z
dCBBcmVuYSYpOwotfTsKLQotaW5saW5lIGNoYXIqIEFyZW5hOjpBbGxvY2F0ZShzaXplX3QgYnl0
ZXMpIHsKLSAgLy8gVGhlIHNlbWFudGljcyBvZiB3aGF0IHRvIHJldHVybiBhcmUgYSBiaXQgbWVz
c3kgaWYgd2UgYWxsb3cKLSAgLy8gMC1ieXRlIGFsbG9jYXRpb25zLCBzbyB3ZSBkaXNhbGxvdyB0
aGVtIGhlcmUgKHdlIGRvbid0IG5lZWQKLSAgLy8gdGhlbSBmb3Igb3VyIGludGVybmFsIHVzZSku
Ci0gIGFzc2VydChieXRlcyA+IDApOwotICBpZiAoYnl0ZXMgPD0gYWxsb2NfYnl0ZXNfcmVtYWlu
aW5nXykgewotICAgIGNoYXIqIHJlc3VsdCA9IGFsbG9jX3B0cl87Ci0gICAgYWxsb2NfcHRyXyAr
PSBieXRlczsKLSAgICBhbGxvY19ieXRlc19yZW1haW5pbmdfIC09IGJ5dGVzOwotICAgIHJldHVy
biByZXN1bHQ7Ci0gIH0KLSAgcmV0dXJuIEFsbG9jYXRlRmFsbGJhY2soYnl0ZXMpOwotfQotCi19
ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgotCi0jZW5kaWYgIC8vIFNUT1JBR0VfTEVWRUxEQl9VVElM
X0FSRU5BX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvYXJl
bmFfdGVzdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9hcmVuYV90ZXN0LmNj
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2QxNzc4Li4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9hcmVuYV90ZXN0LmNjCisrKyAvZGV2L251bGwK
QEAgLTEsNjggKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJp
YnV0b3JzLgotCi0jaW5jbHVkZSAidXRpbC9hcmVuYS5oIgotCi0jaW5jbHVkZSAidXRpbC9yYW5k
b20uaCIKLSNpbmNsdWRlICJ1dGlsL3Rlc3RoYXJuZXNzLmgiCi0KLW5hbWVzcGFjZSBsZXZlbGRi
IHsKLQotY2xhc3MgQXJlbmFUZXN0IHsgfTsKLQotVEVTVChBcmVuYVRlc3QsIEVtcHR5KSB7Ci0g
IEFyZW5hIGFyZW5hOwotfQotCi1URVNUKEFyZW5hVGVzdCwgU2ltcGxlKSB7Ci0gIHN0ZDo6dmVj
dG9yPHN0ZDo6cGFpcjxzaXplX3QsIGNoYXIqPiA+IGFsbG9jYXRlZDsKLSAgQXJlbmEgYXJlbmE7
Ci0gIGNvbnN0IGludCBOID0gMTAwMDAwOwotICBzaXplX3QgYnl0ZXMgPSAwOwotICBSYW5kb20g
cm5kKDMwMSk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7Ci0gICAgc2l6ZV90IHM7
Ci0gICAgaWYgKGkgJSAoTiAvIDEwKSA9PSAwKSB7Ci0gICAgICBzID0gaTsKLSAgICB9IGVsc2Ug
ewotICAgICAgcyA9IHJuZC5PbmVJbig0MDAwKSA/IHJuZC5Vbmlmb3JtKDYwMDApIDoKLSAgICAg
ICAgICAocm5kLk9uZUluKDEwKSA/IHJuZC5Vbmlmb3JtKDEwMCkgOiBybmQuVW5pZm9ybSgyMCkp
OwotICAgIH0KLSAgICBpZiAocyA9PSAwKSB7Ci0gICAgICAvLyBPdXIgYXJlbmEgZGlzYWxsb3dz
IHNpemUgMCBhbGxvY2F0aW9ucy4KLSAgICAgIHMgPSAxOwotICAgIH0KLSAgICBjaGFyKiByOwot
ICAgIGlmIChybmQuT25lSW4oMTApKSB7Ci0gICAgICByID0gYXJlbmEuQWxsb2NhdGVBbGlnbmVk
KHMpOwotICAgIH0gZWxzZSB7Ci0gICAgICByID0gYXJlbmEuQWxsb2NhdGUocyk7Ci0gICAgfQot
Ci0gICAgZm9yIChpbnQgYiA9IDA7IGIgPCBzOyBiKyspIHsKLSAgICAgIC8vIEZpbGwgdGhlICJp
InRoIGFsbG9jYXRpb24gd2l0aCBhIGtub3duIGJpdCBwYXR0ZXJuCi0gICAgICByW2JdID0gaSAl
IDI1NjsKLSAgICB9Ci0gICAgYnl0ZXMgKz0gczsKLSAgICBhbGxvY2F0ZWQucHVzaF9iYWNrKHN0
ZDo6bWFrZV9wYWlyKHMsIHIpKTsKLSAgICBBU1NFUlRfR0UoYXJlbmEuTWVtb3J5VXNhZ2UoKSwg
Ynl0ZXMpOwotICAgIGlmIChpID4gTi8xMCkgewotICAgICAgQVNTRVJUX0xFKGFyZW5hLk1lbW9y
eVVzYWdlKCksIGJ5dGVzICogMS4xMCk7Ci0gICAgfQotICB9Ci0gIGZvciAoaW50IGkgPSAwOyBp
IDwgYWxsb2NhdGVkLnNpemUoKTsgaSsrKSB7Ci0gICAgc2l6ZV90IG51bV9ieXRlcyA9IGFsbG9j
YXRlZFtpXS5maXJzdDsKLSAgICBjb25zdCBjaGFyKiBwID0gYWxsb2NhdGVkW2ldLnNlY29uZDsK
LSAgICBmb3IgKGludCBiID0gMDsgYiA8IG51bV9ieXRlczsgYisrKSB7Ci0gICAgICAvLyBDaGVj
ayB0aGUgImkidGggYWxsb2NhdGlvbiBmb3IgdGhlIGtub3duIGJpdCBwYXR0ZXJuCi0gICAgICBB
U1NFUlRfRVEoaW50KHBbYl0pICYgMHhmZiwgaSAlIDI1Nik7Ci0gICAgfQotICB9Ci19Ci0KLX0g
IC8vIG5hbWVzcGFjZSBsZXZlbGRiCi0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikg
ewotICByZXR1cm4gbGV2ZWxkYjo6dGVzdDo6UnVuQWxsVGVzdHMoKTsKLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9ibG9vbS5jYyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xldmVsZGIvdXRpbC9ibG9vbS5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZDc5NDFjZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvYmxv
b20uY2MKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIw
MTIgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxl
IGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCi0KLSNpbmNsdWRlICJsZXZlbGRiL2ZpbHRlcl9w
b2xpY3kuaCIKLQotI2luY2x1ZGUgImxldmVsZGIvc2xpY2UuaCIKLSNpbmNsdWRlICJ1dGlsL2hh
c2guaCIKLQotbmFtZXNwYWNlIGxldmVsZGIgewotCi1uYW1lc3BhY2Ugewotc3RhdGljIHVpbnQz
Ml90IEJsb29tSGFzaChjb25zdCBTbGljZSYga2V5KSB7Ci0gIHJldHVybiBIYXNoKGtleS5kYXRh
KCksIGtleS5zaXplKCksIDB4YmM5ZjFkMzQpOwotfQotCi1jbGFzcyBCbG9vbUZpbHRlclBvbGlj
eSA6IHB1YmxpYyBGaWx0ZXJQb2xpY3kgewotIHByaXZhdGU6Ci0gIHNpemVfdCBiaXRzX3Blcl9r
ZXlfOwotICBzaXplX3Qga187Ci0KLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IEJsb29tRmlsdGVyUG9s
aWN5KGludCBiaXRzX3Blcl9rZXkpCi0gICAgICA6IGJpdHNfcGVyX2tleV8oYml0c19wZXJfa2V5
KSB7Ci0gICAgLy8gV2UgaW50ZW50aW9uYWxseSByb3VuZCBkb3duIHRvIHJlZHVjZSBwcm9iaW5n
IGNvc3QgYSBsaXR0bGUgYml0Ci0gICAga18gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJpdHNfcGVy
X2tleSAqIDAuNjkpOyAgLy8gMC42OSA9fiBsbigyKQotICAgIGlmIChrXyA8IDEpIGtfID0gMTsK
LSAgICBpZiAoa18gPiAzMCkga18gPSAzMDsKLSAgfQotCi0gIHZpcnR1YWwgY29uc3QgY2hhciog
TmFtZSgpIGNvbnN0IHsKLSAgICByZXR1cm4gImxldmVsZGIuQnVpbHRpbkJsb29tRmlsdGVyIjsK
LSAgfQotCi0gIHZpcnR1YWwgdm9pZCBDcmVhdGVGaWx0ZXIoY29uc3QgU2xpY2UqIGtleXMsIGlu
dCBuLCBzdGQ6OnN0cmluZyogZHN0KSBjb25zdCB7Ci0gICAgLy8gQ29tcHV0ZSBibG9vbSBmaWx0
ZXIgc2l6ZSAoaW4gYm90aCBiaXRzIGFuZCBieXRlcykKLSAgICBzaXplX3QgYml0cyA9IG4gKiBi
aXRzX3Blcl9rZXlfOwotCi0gICAgLy8gRm9yIHNtYWxsIG4sIHdlIGNhbiBzZWUgYSB2ZXJ5IGhp
Z2ggZmFsc2UgcG9zaXRpdmUgcmF0ZS4gIEZpeCBpdAotICAgIC8vIGJ5IGVuZm9yY2luZyBhIG1p
bmltdW0gYmxvb20gZmlsdGVyIGxlbmd0aC4KLSAgICBpZiAoYml0cyA8IDY0KSBiaXRzID0gNjQ7
Ci0KLSAgICBzaXplX3QgYnl0ZXMgPSAoYml0cyArIDcpIC8gODsKLSAgICBiaXRzID0gYnl0ZXMg
KiA4OwotCi0gICAgY29uc3Qgc2l6ZV90IGluaXRfc2l6ZSA9IGRzdC0+c2l6ZSgpOwotICAgIGRz
dC0+cmVzaXplKGluaXRfc2l6ZSArIGJ5dGVzLCAwKTsKLSAgICBkc3QtPnB1c2hfYmFjayhzdGF0
aWNfY2FzdDxjaGFyPihrXykpOyAgLy8gUmVtZW1iZXIgIyBvZiBwcm9iZXMgaW4gZmlsdGVyCi0g
ICAgY2hhciogYXJyYXkgPSAmKCpkc3QpW2luaXRfc2l6ZV07Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgIC8vIFVzZSBkb3VibGUtaGFzaGluZyB0byBnZW5lcmF0
ZSBhIHNlcXVlbmNlIG9mIGhhc2ggdmFsdWVzLgotICAgICAgLy8gU2VlIGFuYWx5c2lzIGluIFtL
aXJzY2gsTWl0emVubWFjaGVyIDIwMDZdLgotICAgICAgdWludDMyX3QgaCA9IEJsb29tSGFzaChr
ZXlzW2ldKTsKLSAgICAgIGNvbnN0IHVpbnQzMl90IGRlbHRhID0gKGggPj4gMTcpIHwgKGggPDwg
MTUpOyAgLy8gUm90YXRlIHJpZ2h0IDE3IGJpdHMKLSAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBq
IDwga187IGorKykgewotICAgICAgICBjb25zdCB1aW50MzJfdCBiaXRwb3MgPSBoICUgYml0czsK
LSAgICAgICAgYXJyYXlbYml0cG9zLzhdIHw9ICgxIDw8IChiaXRwb3MgJSA4KSk7Ci0gICAgICAg
IGggKz0gZGVsdGE7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgdmlydHVhbCBib29sIEtleU1h
eU1hdGNoKGNvbnN0IFNsaWNlJiBrZXksIGNvbnN0IFNsaWNlJiBibG9vbV9maWx0ZXIpIGNvbnN0
IHsKLSAgICBjb25zdCBzaXplX3QgbGVuID0gYmxvb21fZmlsdGVyLnNpemUoKTsKLSAgICBpZiAo
bGVuIDwgMikgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgY2hhciogYXJyYXkgPSBibG9vbV9m
aWx0ZXIuZGF0YSgpOwotICAgIGNvbnN0IHNpemVfdCBiaXRzID0gKGxlbiAtIDEpICogODsKLQot
ICAgIC8vIFVzZSB0aGUgZW5jb2RlZCBrIHNvIHRoYXQgd2UgY2FuIHJlYWQgZmlsdGVycyBnZW5l
cmF0ZWQgYnkKLSAgICAvLyBibG9vbSBmaWx0ZXJzIGNyZWF0ZWQgdXNpbmcgZGlmZmVyZW50IHBh
cmFtZXRlcnMuCi0gICAgY29uc3Qgc2l6ZV90IGsgPSBhcnJheVtsZW4tMV07Ci0gICAgaWYgKGsg
PiAzMCkgewotICAgICAgLy8gUmVzZXJ2ZWQgZm9yIHBvdGVudGlhbGx5IG5ldyBlbmNvZGluZ3Mg
Zm9yIHNob3J0IGJsb29tIGZpbHRlcnMuCi0gICAgICAvLyBDb25zaWRlciBpdCBhIG1hdGNoLgot
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdWludDMyX3QgaCA9IEJsb29tSGFzaChr
ZXkpOwotICAgIGNvbnN0IHVpbnQzMl90IGRlbHRhID0gKGggPj4gMTcpIHwgKGggPDwgMTUpOyAg
Ly8gUm90YXRlIHJpZ2h0IDE3IGJpdHMKLSAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGs7IGor
KykgewotICAgICAgY29uc3QgdWludDMyX3QgYml0cG9zID0gaCAlIGJpdHM7Ci0gICAgICBpZiAo
KGFycmF5W2JpdHBvcy84XSAmICgxIDw8IChiaXRwb3MgJSA4KSkpID09IDApIHJldHVybiBmYWxz
ZTsKLSAgICAgIGggKz0gZGVsdGE7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci19Owot
fQotCi1jb25zdCBGaWx0ZXJQb2xpY3kqIE5ld0Jsb29tRmlsdGVyUG9saWN5KGludCBiaXRzX3Bl
cl9rZXkpIHsKLSAgcmV0dXJuIG5ldyBCbG9vbUZpbHRlclBvbGljeShiaXRzX3Blcl9rZXkpOwot
fQotCi19ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi91dGlsL2Jsb29tX3Rlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRi
L3V0aWwvYmxvb21fdGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGJmOGU4
ZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvYmxvb21fdGVz
dC5jYworKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIw
MTIgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxl
IGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCi0KLSNpbmNsdWRlICJsZXZlbGRiL2ZpbHRlcl9w
b2xpY3kuaCIKLQotI2luY2x1ZGUgInV0aWwvY29kaW5nLmgiCi0jaW5jbHVkZSAidXRpbC9sb2dn
aW5nLmgiCi0jaW5jbHVkZSAidXRpbC90ZXN0aGFybmVzcy5oIgotI2luY2x1ZGUgInV0aWwvdGVz
dHV0aWwuaCIKLQotbmFtZXNwYWNlIGxldmVsZGIgewotCi1zdGF0aWMgY29uc3QgaW50IGtWZXJi
b3NlID0gMTsKLQotc3RhdGljIFNsaWNlIEtleShpbnQgaSwgY2hhciogYnVmZmVyKSB7Ci0gIEVu
Y29kZUZpeGVkMzIoYnVmZmVyLCBpKTsKLSAgcmV0dXJuIFNsaWNlKGJ1ZmZlciwgc2l6ZW9mKHVp
bnQzMl90KSk7Ci19Ci0KLWNsYXNzIEJsb29tVGVzdCB7Ci0gcHJpdmF0ZToKLSAgY29uc3QgRmls
dGVyUG9saWN5KiBwb2xpY3lfOwotICBzdGQ6OnN0cmluZyBmaWx0ZXJfOwotICBzdGQ6OnZlY3Rv
cjxzdGQ6OnN0cmluZz4ga2V5c187Ci0KLSBwdWJsaWM6Ci0gIEJsb29tVGVzdCgpIDogcG9saWN5
XyhOZXdCbG9vbUZpbHRlclBvbGljeSgxMCkpIHsgfQotCi0gIH5CbG9vbVRlc3QoKSB7Ci0gICAg
ZGVsZXRlIHBvbGljeV87Ci0gIH0KLQotICB2b2lkIFJlc2V0KCkgewotICAgIGtleXNfLmNsZWFy
KCk7Ci0gICAgZmlsdGVyXy5jbGVhcigpOwotICB9Ci0KLSAgdm9pZCBBZGQoY29uc3QgU2xpY2Um
IHMpIHsKLSAgICBrZXlzXy5wdXNoX2JhY2socy5Ub1N0cmluZygpKTsKLSAgfQotCi0gIHZvaWQg
QnVpbGQoKSB7Ci0gICAgc3RkOjp2ZWN0b3I8U2xpY2U+IGtleV9zbGljZXM7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBrZXlzXy5zaXplKCk7IGkrKykgewotICAgICAga2V5X3NsaWNlcy5w
dXNoX2JhY2soU2xpY2Uoa2V5c19baV0pKTsKLSAgICB9Ci0gICAgZmlsdGVyXy5jbGVhcigpOwot
ICAgIHBvbGljeV8tPkNyZWF0ZUZpbHRlcigma2V5X3NsaWNlc1swXSwga2V5X3NsaWNlcy5zaXpl
KCksICZmaWx0ZXJfKTsKLSAgICBrZXlzXy5jbGVhcigpOwotICAgIGlmIChrVmVyYm9zZSA+PSAy
KSBEdW1wRmlsdGVyKCk7Ci0gIH0KLQotICBzaXplX3QgRmlsdGVyU2l6ZSgpIGNvbnN0IHsKLSAg
ICByZXR1cm4gZmlsdGVyXy5zaXplKCk7Ci0gIH0KLQotICB2b2lkIER1bXBGaWx0ZXIoKSB7Ci0g
ICAgZnByaW50ZihzdGRlcnIsICJGKCIpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpKzEgPCBm
aWx0ZXJfLnNpemUoKTsgaSsrKSB7Ci0gICAgICBjb25zdCB1bnNpZ25lZCBpbnQgYyA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGludD4oZmlsdGVyX1tpXSk7Ci0gICAgICBmb3IgKGludCBqID0gMDsg
aiA8IDg7IGorKykgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVjIiwgKGMgJiAoMSA8PGop
KSA/ICcxJyA6ICcuJyk7Ci0gICAgICB9Ci0gICAgfQotICAgIGZwcmludGYoc3RkZXJyLCAiKVxu
Iik7Ci0gIH0KLQotICBib29sIE1hdGNoZXMoY29uc3QgU2xpY2UmIHMpIHsKLSAgICBpZiAoIWtl
eXNfLmVtcHR5KCkpIHsKLSAgICAgIEJ1aWxkKCk7Ci0gICAgfQotICAgIHJldHVybiBwb2xpY3lf
LT5LZXlNYXlNYXRjaChzLCBmaWx0ZXJfKTsKLSAgfQotCi0gIGRvdWJsZSBGYWxzZVBvc2l0aXZl
UmF0ZSgpIHsKLSAgICBjaGFyIGJ1ZmZlcltzaXplb2YoaW50KV07Ci0gICAgaW50IHJlc3VsdCA9
IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7Ci0gICAgICBpZiAoTWF0
Y2hlcyhLZXkoaSArIDEwMDAwMDAwMDAsIGJ1ZmZlcikpKSB7Ci0gICAgICAgIHJlc3VsdCsrOwot
ICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0IC8gMTAwMDAuMDsKLSAgfQotfTsKLQot
VEVTVChCbG9vbVRlc3QsIEVtcHR5RmlsdGVyKSB7Ci0gIEFTU0VSVF9UUlVFKCEgTWF0Y2hlcygi
aGVsbG8iKSk7Ci0gIEFTU0VSVF9UUlVFKCEgTWF0Y2hlcygid29ybGQiKSk7Ci19Ci0KLVRFU1Qo
Qmxvb21UZXN0LCBTbWFsbCkgewotICBBZGQoImhlbGxvIik7Ci0gIEFkZCgid29ybGQiKTsKLSAg
QVNTRVJUX1RSVUUoTWF0Y2hlcygiaGVsbG8iKSk7Ci0gIEFTU0VSVF9UUlVFKE1hdGNoZXMoIndv
cmxkIikpOwotICBBU1NFUlRfVFJVRSghIE1hdGNoZXMoIngiKSk7Ci0gIEFTU0VSVF9UUlVFKCEg
TWF0Y2hlcygiZm9vIikpOwotfQotCi1zdGF0aWMgaW50IE5leHRMZW5ndGgoaW50IGxlbmd0aCkg
ewotICBpZiAobGVuZ3RoIDwgMTApIHsKLSAgICBsZW5ndGggKz0gMTsKLSAgfSBlbHNlIGlmIChs
ZW5ndGggPCAxMDApIHsKLSAgICBsZW5ndGggKz0gMTA7Ci0gIH0gZWxzZSBpZiAobGVuZ3RoIDwg
MTAwMCkgewotICAgIGxlbmd0aCArPSAxMDA7Ci0gIH0gZWxzZSB7Ci0gICAgbGVuZ3RoICs9IDEw
MDA7Ci0gIH0KLSAgcmV0dXJuIGxlbmd0aDsKLX0KLQotVEVTVChCbG9vbVRlc3QsIFZhcnlpbmdM
ZW5ndGhzKSB7Ci0gIGNoYXIgYnVmZmVyW3NpemVvZihpbnQpXTsKLQotICAvLyBDb3VudCBudW1i
ZXIgb2YgZmlsdGVycyB0aGF0IHNpZ25pZmljYW50bHkgZXhjZWVkIHRoZSBmYWxzZSBwb3NpdGl2
ZSByYXRlCi0gIGludCBtZWRpb2NyZV9maWx0ZXJzID0gMDsKLSAgaW50IGdvb2RfZmlsdGVycyA9
IDA7Ci0KLSAgZm9yIChpbnQgbGVuZ3RoID0gMTsgbGVuZ3RoIDw9IDEwMDAwOyBsZW5ndGggPSBO
ZXh0TGVuZ3RoKGxlbmd0aCkpIHsKLSAgICBSZXNldCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgIEFkZChLZXkoaSwgYnVmZmVyKSk7Ci0gICAgfQotICAg
IEJ1aWxkKCk7Ci0KLSAgICBBU1NFUlRfTEUoRmlsdGVyU2l6ZSgpLCAobGVuZ3RoICogMTAgLyA4
KSArIDQwKSA8PCBsZW5ndGg7Ci0KLSAgICAvLyBBbGwgYWRkZWQga2V5cyBtdXN0IG1hdGNoCi0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgQVNTRVJUX1RSVUUo
TWF0Y2hlcyhLZXkoaSwgYnVmZmVyKSkpCi0gICAgICAgICAgPDwgIkxlbmd0aCAiIDw8IGxlbmd0
aCA8PCAiOyBrZXkgIiA8PCBpOwotICAgIH0KLQotICAgIC8vIENoZWNrIGZhbHNlIHBvc2l0aXZl
IHJhdGUKLSAgICBkb3VibGUgcmF0ZSA9IEZhbHNlUG9zaXRpdmVSYXRlKCk7Ci0gICAgaWYgKGtW
ZXJib3NlID49IDEpIHsKLSAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFsc2UgcG9zaXRpdmVzOiAl
NS4yZiUlIEAgbGVuZ3RoID0gJTZkIDsgYnl0ZXMgPSAlNmRcbiIsCi0gICAgICAgICAgICAgIHJh
dGUqMTAwLjAsIGxlbmd0aCwgc3RhdGljX2Nhc3Q8aW50PihGaWx0ZXJTaXplKCkpKTsKLSAgICB9
Ci0gICAgQVNTRVJUX0xFKHJhdGUsIDAuMDIpOyAgIC8vIE11c3Qgbm90IGJlIG92ZXIgMiUKLSAg
ICBpZiAocmF0ZSA+IDAuMDEyNSkgbWVkaW9jcmVfZmlsdGVycysrOyAgLy8gQWxsb3dlZCwgYnV0
IG5vdCB0b28gb2Z0ZW4KLSAgICBlbHNlIGdvb2RfZmlsdGVycysrOwotICB9Ci0gIGlmIChrVmVy
Ym9zZSA+PSAxKSB7Ci0gICAgZnByaW50ZihzdGRlcnIsICJGaWx0ZXJzOiAlZCBnb29kLCAlZCBt
ZWRpb2NyZVxuIiwKLSAgICAgICAgICAgIGdvb2RfZmlsdGVycywgbWVkaW9jcmVfZmlsdGVycyk7
Ci0gIH0KLSAgQVNTRVJUX0xFKG1lZGlvY3JlX2ZpbHRlcnMsIGdvb2RfZmlsdGVycy81KTsKLX0K
LQotLy8gRGlmZmVyZW50IGJpdHMtcGVyLWJ5dGUKLQotfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIK
LQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7Ci0gIHJldHVybiBsZXZlbGRiOjp0
ZXN0OjpSdW5BbGxUZXN0cygpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi91dGlsL2NhY2hlLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2NhY2hl
LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGYxZjYzLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9jYWNoZS5jYworKysgL2Rldi9udWxsCkBA
IC0xLDMyOCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmli
dXRvcnMuCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1
ZGUgPHN0ZGxpYi5oPgotCi0jaW5jbHVkZSAibGV2ZWxkYi9jYWNoZS5oIgotI2luY2x1ZGUgInBv
cnQvcG9ydC5oIgotI2luY2x1ZGUgInV0aWwvaGFzaC5oIgotI2luY2x1ZGUgInV0aWwvbXV0ZXhs
b2NrLmgiCi0KLW5hbWVzcGFjZSBsZXZlbGRiIHsKLQotQ2FjaGU6On5DYWNoZSgpIHsKLX0KLQot
bmFtZXNwYWNlIHsKLQotLy8gTFJVIGNhY2hlIGltcGxlbWVudGF0aW9uCi0KLS8vIEFuIGVudHJ5
IGlzIGEgdmFyaWFibGUgbGVuZ3RoIGhlYXAtYWxsb2NhdGVkIHN0cnVjdHVyZS4gIEVudHJpZXMK
LS8vIGFyZSBrZXB0IGluIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IG9yZGVyZWQgYnkg
YWNjZXNzIHRpbWUuCi1zdHJ1Y3QgTFJVSGFuZGxlIHsKLSAgdm9pZCogdmFsdWU7Ci0gIHZvaWQg
KCpkZWxldGVyKShjb25zdCBTbGljZSYsIHZvaWQqIHZhbHVlKTsKLSAgTFJVSGFuZGxlKiBuZXh0
X2hhc2g7Ci0gIExSVUhhbmRsZSogbmV4dDsKLSAgTFJVSGFuZGxlKiBwcmV2OwotICBzaXplX3Qg
Y2hhcmdlOyAgICAgIC8vIFRPRE8ob3B0KTogT25seSBhbGxvdyB1aW50MzJfdD8KLSAgc2l6ZV90
IGtleV9sZW5ndGg7Ci0gIHVpbnQzMl90IHJlZnM7Ci0gIHVpbnQzMl90IGhhc2g7ICAgICAgLy8g
SGFzaCBvZiBrZXkoKTsgdXNlZCBmb3IgZmFzdCBzaGFyZGluZyBhbmQgY29tcGFyaXNvbnMKLSAg
Y2hhciBrZXlfZGF0YVsxXTsgICAvLyBCZWdpbm5pbmcgb2Yga2V5Ci0KLSAgU2xpY2Uga2V5KCkg
Y29uc3QgewotICAgIC8vIEZvciBjaGVhcGVyIGxvb2t1cHMsIHdlIGFsbG93IGEgdGVtcG9yYXJ5
IEhhbmRsZSBvYmplY3QKLSAgICAvLyB0byBzdG9yZSBhIHBvaW50ZXIgdG8gYSBrZXkgaW4gInZh
bHVlIi4KLSAgICBpZiAobmV4dCA9PSB0aGlzKSB7Ci0gICAgICByZXR1cm4gKihyZWludGVycHJl
dF9jYXN0PFNsaWNlKj4odmFsdWUpKTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIFNsaWNl
KGtleV9kYXRhLCBrZXlfbGVuZ3RoKTsKLSAgICB9Ci0gIH0KLX07Ci0KLS8vIFdlIHByb3ZpZGUg
b3VyIG93biBzaW1wbGUgaGFzaCB0YWJsZSBzaW5jZSBpdCByZW1vdmVzIGEgd2hvbGUgYnVuY2gK
LS8vIG9mIHBvcnRpbmcgaGFja3MgYW5kIGlzIGFsc28gZmFzdGVyIHRoYW4gc29tZSBvZiB0aGUg
YnVpbHQtaW4gaGFzaAotLy8gdGFibGUgaW1wbGVtZW50YXRpb25zIGluIHNvbWUgb2YgdGhlIGNv
bXBpbGVyL3J1bnRpbWUgY29tYmluYXRpb25zCi0vLyB3ZSBoYXZlIHRlc3RlZC4gIEUuZy4sIHJl
YWRyYW5kb20gc3BlZWRzIHVwIGJ5IH41JSBvdmVyIHRoZSBnKysKLS8vIDQuNC4zJ3MgYnVpbHRp
biBoYXNodGFibGUuCi1jbGFzcyBIYW5kbGVUYWJsZSB7Ci0gcHVibGljOgotICBIYW5kbGVUYWJs
ZSgpIDogbGVuZ3RoXygwKSwgZWxlbXNfKDApLCBsaXN0XyhOVUxMKSB7IFJlc2l6ZSgpOyB9Ci0g
IH5IYW5kbGVUYWJsZSgpIHsgZGVsZXRlW10gbGlzdF87IH0KLQotICBMUlVIYW5kbGUqIExvb2t1
cChjb25zdCBTbGljZSYga2V5LCB1aW50MzJfdCBoYXNoKSB7Ci0gICAgcmV0dXJuICpGaW5kUG9p
bnRlcihrZXksIGhhc2gpOwotICB9Ci0KLSAgTFJVSGFuZGxlKiBJbnNlcnQoTFJVSGFuZGxlKiBo
KSB7Ci0gICAgTFJVSGFuZGxlKiogcHRyID0gRmluZFBvaW50ZXIoaC0+a2V5KCksIGgtPmhhc2gp
OwotICAgIExSVUhhbmRsZSogb2xkID0gKnB0cjsKLSAgICBoLT5uZXh0X2hhc2ggPSAob2xkID09
IE5VTEwgPyBOVUxMIDogb2xkLT5uZXh0X2hhc2gpOwotICAgICpwdHIgPSBoOwotICAgIGlmIChv
bGQgPT0gTlVMTCkgewotICAgICAgKytlbGVtc187Ci0gICAgICBpZiAoZWxlbXNfID4gbGVuZ3Ro
XykgewotICAgICAgICAvLyBTaW5jZSBlYWNoIGNhY2hlIGVudHJ5IGlzIGZhaXJseSBsYXJnZSwg
d2UgYWltIGZvciBhIHNtYWxsCi0gICAgICAgIC8vIGF2ZXJhZ2UgbGlua2VkIGxpc3QgbGVuZ3Ro
ICg8PSAxKS4KLSAgICAgICAgUmVzaXplKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBv
bGQ7Ci0gIH0KLQotICBMUlVIYW5kbGUqIFJlbW92ZShjb25zdCBTbGljZSYga2V5LCB1aW50MzJf
dCBoYXNoKSB7Ci0gICAgTFJVSGFuZGxlKiogcHRyID0gRmluZFBvaW50ZXIoa2V5LCBoYXNoKTsK
LSAgICBMUlVIYW5kbGUqIHJlc3VsdCA9ICpwdHI7Ci0gICAgaWYgKHJlc3VsdCAhPSBOVUxMKSB7
Ci0gICAgICAqcHRyID0gcmVzdWx0LT5uZXh0X2hhc2g7Ci0gICAgICAtLWVsZW1zXzsKLSAgICB9
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gcHJpdmF0ZToKLSAgLy8gVGhlIHRhYmxlIGNv
bnNpc3RzIG9mIGFuIGFycmF5IG9mIGJ1Y2tldHMgd2hlcmUgZWFjaCBidWNrZXQgaXMKLSAgLy8g
YSBsaW5rZWQgbGlzdCBvZiBjYWNoZSBlbnRyaWVzIHRoYXQgaGFzaCBpbnRvIHRoZSBidWNrZXQu
Ci0gIHVpbnQzMl90IGxlbmd0aF87Ci0gIHVpbnQzMl90IGVsZW1zXzsKLSAgTFJVSGFuZGxlKiog
bGlzdF87Ci0KLSAgLy8gUmV0dXJuIGEgcG9pbnRlciB0byBzbG90IHRoYXQgcG9pbnRzIHRvIGEg
Y2FjaGUgZW50cnkgdGhhdAotICAvLyBtYXRjaGVzIGtleS9oYXNoLiAgSWYgdGhlcmUgaXMgbm8g
c3VjaCBjYWNoZSBlbnRyeSwgcmV0dXJuIGEKLSAgLy8gcG9pbnRlciB0byB0aGUgdHJhaWxpbmcg
c2xvdCBpbiB0aGUgY29ycmVzcG9uZGluZyBsaW5rZWQgbGlzdC4KLSAgTFJVSGFuZGxlKiogRmlu
ZFBvaW50ZXIoY29uc3QgU2xpY2UmIGtleSwgdWludDMyX3QgaGFzaCkgewotICAgIExSVUhhbmRs
ZSoqIHB0ciA9ICZsaXN0X1toYXNoICYgKGxlbmd0aF8gLSAxKV07Ci0gICAgd2hpbGUgKCpwdHIg
IT0gTlVMTCAmJgotICAgICAgICAgICAoKCpwdHIpLT5oYXNoICE9IGhhc2ggfHwga2V5ICE9ICgq
cHRyKS0+a2V5KCkpKSB7Ci0gICAgICBwdHIgPSAmKCpwdHIpLT5uZXh0X2hhc2g7Ci0gICAgfQot
ICAgIHJldHVybiBwdHI7Ci0gIH0KLQotICB2b2lkIFJlc2l6ZSgpIHsKLSAgICB1aW50MzJfdCBu
ZXdfbGVuZ3RoID0gNDsKLSAgICB3aGlsZSAobmV3X2xlbmd0aCA8IGVsZW1zXykgewotICAgICAg
bmV3X2xlbmd0aCAqPSAyOwotICAgIH0KLSAgICBMUlVIYW5kbGUqKiBuZXdfbGlzdCA9IG5ldyBM
UlVIYW5kbGUqW25ld19sZW5ndGhdOwotICAgIG1lbXNldChuZXdfbGlzdCwgMCwgc2l6ZW9mKG5l
d19saXN0WzBdKSAqIG5ld19sZW5ndGgpOwotICAgIHVpbnQzMl90IGNvdW50ID0gMDsKLSAgICBm
b3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoXzsgaSsrKSB7Ci0gICAgICBMUlVIYW5kbGUq
IGggPSBsaXN0X1tpXTsKLSAgICAgIHdoaWxlIChoICE9IE5VTEwpIHsKLSAgICAgICAgTFJVSGFu
ZGxlKiBuZXh0ID0gaC0+bmV4dF9oYXNoOwotICAgICAgICBTbGljZSBrZXkgPSBoLT5rZXkoKTsK
LSAgICAgICAgdWludDMyX3QgaGFzaCA9IGgtPmhhc2g7Ci0gICAgICAgIExSVUhhbmRsZSoqIHB0
ciA9ICZuZXdfbGlzdFtoYXNoICYgKG5ld19sZW5ndGggLSAxKV07Ci0gICAgICAgIGgtPm5leHRf
aGFzaCA9ICpwdHI7Ci0gICAgICAgICpwdHIgPSBoOwotICAgICAgICBoID0gbmV4dDsKLSAgICAg
ICAgY291bnQrKzsKLSAgICAgIH0KLSAgICB9Ci0gICAgYXNzZXJ0KGVsZW1zXyA9PSBjb3VudCk7
Ci0gICAgZGVsZXRlW10gbGlzdF87Ci0gICAgbGlzdF8gPSBuZXdfbGlzdDsKLSAgICBsZW5ndGhf
ID0gbmV3X2xlbmd0aDsKLSAgfQotfTsKLQotLy8gQSBzaW5nbGUgc2hhcmQgb2Ygc2hhcmRlZCBj
YWNoZS4KLWNsYXNzIExSVUNhY2hlIHsKLSBwdWJsaWM6Ci0gIExSVUNhY2hlKCk7Ci0gIH5MUlVD
YWNoZSgpOwotCi0gIC8vIFNlcGFyYXRlIGZyb20gY29uc3RydWN0b3Igc28gY2FsbGVyIGNhbiBl
YXNpbHkgbWFrZSBhbiBhcnJheSBvZiBMUlVDYWNoZQotICB2b2lkIFNldENhcGFjaXR5KHNpemVf
dCBjYXBhY2l0eSkgeyBjYXBhY2l0eV8gPSBjYXBhY2l0eTsgfQotCi0gIC8vIExpa2UgQ2FjaGUg
bWV0aG9kcywgYnV0IHdpdGggYW4gZXh0cmEgImhhc2giIHBhcmFtZXRlci4KLSAgQ2FjaGU6Okhh
bmRsZSogSW5zZXJ0KGNvbnN0IFNsaWNlJiBrZXksIHVpbnQzMl90IGhhc2gsCi0gICAgICAgICAg
ICAgICAgICAgICAgICB2b2lkKiB2YWx1ZSwgc2l6ZV90IGNoYXJnZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQgKCpkZWxldGVyKShjb25zdCBTbGljZSYga2V5LCB2b2lkKiB2YWx1ZSkp
OwotICBDYWNoZTo6SGFuZGxlKiBMb29rdXAoY29uc3QgU2xpY2UmIGtleSwgdWludDMyX3QgaGFz
aCk7Ci0gIHZvaWQgUmVsZWFzZShDYWNoZTo6SGFuZGxlKiBoYW5kbGUpOwotICB2b2lkIEVyYXNl
KGNvbnN0IFNsaWNlJiBrZXksIHVpbnQzMl90IGhhc2gpOwotCi0gcHJpdmF0ZToKLSAgdm9pZCBM
UlVfUmVtb3ZlKExSVUhhbmRsZSogZSk7Ci0gIHZvaWQgTFJVX0FwcGVuZChMUlVIYW5kbGUqIGUp
OwotICB2b2lkIFVucmVmKExSVUhhbmRsZSogZSk7Ci0KLSAgLy8gSW5pdGlhbGl6ZWQgYmVmb3Jl
IHVzZS4KLSAgc2l6ZV90IGNhcGFjaXR5XzsKLQotICAvLyBtdXRleF8gcHJvdGVjdHMgdGhlIGZv
bGxvd2luZyBzdGF0ZS4KLSAgcG9ydDo6TXV0ZXggbXV0ZXhfOwotICBzaXplX3QgdXNhZ2VfOwot
ICB1aW50NjRfdCBsYXN0X2lkXzsKLQotICAvLyBEdW1teSBoZWFkIG9mIExSVSBsaXN0LgotICAv
LyBscnUucHJldiBpcyBuZXdlc3QgZW50cnksIGxydS5uZXh0IGlzIG9sZGVzdCBlbnRyeS4KLSAg
TFJVSGFuZGxlIGxydV87Ci0KLSAgSGFuZGxlVGFibGUgdGFibGVfOwotfTsKLQotTFJVQ2FjaGU6
OkxSVUNhY2hlKCkKLSAgICA6IHVzYWdlXygwKSwKLSAgICAgIGxhc3RfaWRfKDApIHsKLSAgLy8g
TWFrZSBlbXB0eSBjaXJjdWxhciBsaW5rZWQgbGlzdAotICBscnVfLm5leHQgPSAmbHJ1XzsKLSAg
bHJ1Xy5wcmV2ID0gJmxydV87Ci19Ci0KLUxSVUNhY2hlOjp+TFJVQ2FjaGUoKSB7Ci0gIGZvciAo
TFJVSGFuZGxlKiBlID0gbHJ1Xy5uZXh0OyBlICE9ICZscnVfOyApIHsKLSAgICBMUlVIYW5kbGUq
IG5leHQgPSBlLT5uZXh0OwotICAgIGFzc2VydChlLT5yZWZzID09IDEpOyAgLy8gRXJyb3IgaWYg
Y2FsbGVyIGhhcyBhbiB1bnJlbGVhc2VkIGhhbmRsZQotICAgIFVucmVmKGUpOwotICAgIGUgPSBu
ZXh0OwotICB9Ci19Ci0KLXZvaWQgTFJVQ2FjaGU6OlVucmVmKExSVUhhbmRsZSogZSkgewotICBh
c3NlcnQoZS0+cmVmcyA+IDApOwotICBlLT5yZWZzLS07Ci0gIGlmIChlLT5yZWZzIDw9IDApIHsK
LSAgICB1c2FnZV8gLT0gZS0+Y2hhcmdlOwotICAgICgqZS0+ZGVsZXRlcikoZS0+a2V5KCksIGUt
PnZhbHVlKTsKLSAgICBmcmVlKGUpOwotICB9Ci19Ci0KLXZvaWQgTFJVQ2FjaGU6OkxSVV9SZW1v
dmUoTFJVSGFuZGxlKiBlKSB7Ci0gIGUtPm5leHQtPnByZXYgPSBlLT5wcmV2OwotICBlLT5wcmV2
LT5uZXh0ID0gZS0+bmV4dDsKLX0KLQotdm9pZCBMUlVDYWNoZTo6TFJVX0FwcGVuZChMUlVIYW5k
bGUqIGUpIHsKLSAgLy8gTWFrZSAiZSIgbmV3ZXN0IGVudHJ5IGJ5IGluc2VydGluZyBqdXN0IGJl
Zm9yZSBscnVfCi0gIGUtPm5leHQgPSAmbHJ1XzsKLSAgZS0+cHJldiA9IGxydV8ucHJldjsKLSAg
ZS0+cHJldi0+bmV4dCA9IGU7Ci0gIGUtPm5leHQtPnByZXYgPSBlOwotfQotCi1DYWNoZTo6SGFu
ZGxlKiBMUlVDYWNoZTo6TG9va3VwKGNvbnN0IFNsaWNlJiBrZXksIHVpbnQzMl90IGhhc2gpIHsK
LSAgTXV0ZXhMb2NrIGwoJm11dGV4Xyk7Ci0gIExSVUhhbmRsZSogZSA9IHRhYmxlXy5Mb29rdXAo
a2V5LCBoYXNoKTsKLSAgaWYgKGUgIT0gTlVMTCkgewotICAgIGUtPnJlZnMrKzsKLSAgICBMUlVf
UmVtb3ZlKGUpOwotICAgIExSVV9BcHBlbmQoZSk7Ci0gIH0KLSAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Q2FjaGU6OkhhbmRsZSo+KGUpOwotfQotCi12b2lkIExSVUNhY2hlOjpSZWxlYXNlKENh
Y2hlOjpIYW5kbGUqIGhhbmRsZSkgewotICBNdXRleExvY2sgbCgmbXV0ZXhfKTsKLSAgVW5yZWYo
cmVpbnRlcnByZXRfY2FzdDxMUlVIYW5kbGUqPihoYW5kbGUpKTsKLX0KLQotQ2FjaGU6OkhhbmRs
ZSogTFJVQ2FjaGU6Okluc2VydCgKLSAgICBjb25zdCBTbGljZSYga2V5LCB1aW50MzJfdCBoYXNo
LCB2b2lkKiB2YWx1ZSwgc2l6ZV90IGNoYXJnZSwKLSAgICB2b2lkICgqZGVsZXRlcikoY29uc3Qg
U2xpY2UmIGtleSwgdm9pZCogdmFsdWUpKSB7Ci0gIE11dGV4TG9jayBsKCZtdXRleF8pOwotCi0g
IExSVUhhbmRsZSogZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8TFJVSGFuZGxlKj4oCi0gICAgICBtYWxs
b2Moc2l6ZW9mKExSVUhhbmRsZSktMSArIGtleS5zaXplKCkpKTsKLSAgZS0+dmFsdWUgPSB2YWx1
ZTsKLSAgZS0+ZGVsZXRlciA9IGRlbGV0ZXI7Ci0gIGUtPmNoYXJnZSA9IGNoYXJnZTsKLSAgZS0+
a2V5X2xlbmd0aCA9IGtleS5zaXplKCk7Ci0gIGUtPmhhc2ggPSBoYXNoOwotICBlLT5yZWZzID0g
MjsgIC8vIE9uZSBmcm9tIExSVUNhY2hlLCBvbmUgZm9yIHRoZSByZXR1cm5lZCBoYW5kbGUKLSAg
bWVtY3B5KGUtPmtleV9kYXRhLCBrZXkuZGF0YSgpLCBrZXkuc2l6ZSgpKTsKLSAgTFJVX0FwcGVu
ZChlKTsKLSAgdXNhZ2VfICs9IGNoYXJnZTsKLQotICBMUlVIYW5kbGUqIG9sZCA9IHRhYmxlXy5J
bnNlcnQoZSk7Ci0gIGlmIChvbGQgIT0gTlVMTCkgewotICAgIExSVV9SZW1vdmUob2xkKTsKLSAg
ICBVbnJlZihvbGQpOwotICB9Ci0KLSAgd2hpbGUgKHVzYWdlXyA+IGNhcGFjaXR5XyAmJiBscnVf
Lm5leHQgIT0gJmxydV8pIHsKLSAgICBMUlVIYW5kbGUqIG9sZCA9IGxydV8ubmV4dDsKLSAgICBM
UlVfUmVtb3ZlKG9sZCk7Ci0gICAgdGFibGVfLlJlbW92ZShvbGQtPmtleSgpLCBvbGQtPmhhc2gp
OwotICAgIFVucmVmKG9sZCk7Ci0gIH0KLQotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDYWNo
ZTo6SGFuZGxlKj4oZSk7Ci19Ci0KLXZvaWQgTFJVQ2FjaGU6OkVyYXNlKGNvbnN0IFNsaWNlJiBr
ZXksIHVpbnQzMl90IGhhc2gpIHsKLSAgTXV0ZXhMb2NrIGwoJm11dGV4Xyk7Ci0gIExSVUhhbmRs
ZSogZSA9IHRhYmxlXy5SZW1vdmUoa2V5LCBoYXNoKTsKLSAgaWYgKGUgIT0gTlVMTCkgewotICAg
IExSVV9SZW1vdmUoZSk7Ci0gICAgVW5yZWYoZSk7Ci0gIH0KLX0KLQotc3RhdGljIGNvbnN0IGlu
dCBrTnVtU2hhcmRCaXRzID0gNDsKLXN0YXRpYyBjb25zdCBpbnQga051bVNoYXJkcyA9IDEgPDwg
a051bVNoYXJkQml0czsKLQotY2xhc3MgU2hhcmRlZExSVUNhY2hlIDogcHVibGljIENhY2hlIHsK
LSBwcml2YXRlOgotICBMUlVDYWNoZSBzaGFyZF9ba051bVNoYXJkc107Ci0gIHBvcnQ6Ok11dGV4
IGlkX211dGV4XzsKLSAgdWludDY0X3QgbGFzdF9pZF87Ci0KLSAgc3RhdGljIGlubGluZSB1aW50
MzJfdCBIYXNoU2xpY2UoY29uc3QgU2xpY2UmIHMpIHsKLSAgICByZXR1cm4gSGFzaChzLmRhdGEo
KSwgcy5zaXplKCksIDApOwotICB9Ci0KLSAgc3RhdGljIHVpbnQzMl90IFNoYXJkKHVpbnQzMl90
IGhhc2gpIHsKLSAgICByZXR1cm4gaGFzaCA+PiAoMzIgLSBrTnVtU2hhcmRCaXRzKTsKLSAgfQot
Ci0gcHVibGljOgotICBleHBsaWNpdCBTaGFyZGVkTFJVQ2FjaGUoc2l6ZV90IGNhcGFjaXR5KQot
ICAgICAgOiBsYXN0X2lkXygwKSB7Ci0gICAgY29uc3Qgc2l6ZV90IHBlcl9zaGFyZCA9IChjYXBh
Y2l0eSArIChrTnVtU2hhcmRzIC0gMSkpIC8ga051bVNoYXJkczsKLSAgICBmb3IgKGludCBzID0g
MDsgcyA8IGtOdW1TaGFyZHM7IHMrKykgewotICAgICAgc2hhcmRfW3NdLlNldENhcGFjaXR5KHBl
cl9zaGFyZCk7Ci0gICAgfQotICB9Ci0gIHZpcnR1YWwgflNoYXJkZWRMUlVDYWNoZSgpIHsgfQot
ICB2aXJ0dWFsIEhhbmRsZSogSW5zZXJ0KGNvbnN0IFNsaWNlJiBrZXksIHZvaWQqIHZhbHVlLCBz
aXplX3QgY2hhcmdlLAotICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpkZWxldGVyKShj
b25zdCBTbGljZSYga2V5LCB2b2lkKiB2YWx1ZSkpIHsKLSAgICBjb25zdCB1aW50MzJfdCBoYXNo
ID0gSGFzaFNsaWNlKGtleSk7Ci0gICAgcmV0dXJuIHNoYXJkX1tTaGFyZChoYXNoKV0uSW5zZXJ0
KGtleSwgaGFzaCwgdmFsdWUsIGNoYXJnZSwgZGVsZXRlcik7Ci0gIH0KLSAgdmlydHVhbCBIYW5k
bGUqIExvb2t1cChjb25zdCBTbGljZSYga2V5KSB7Ci0gICAgY29uc3QgdWludDMyX3QgaGFzaCA9
IEhhc2hTbGljZShrZXkpOwotICAgIHJldHVybiBzaGFyZF9bU2hhcmQoaGFzaCldLkxvb2t1cChr
ZXksIGhhc2gpOwotICB9Ci0gIHZpcnR1YWwgdm9pZCBSZWxlYXNlKEhhbmRsZSogaGFuZGxlKSB7
Ci0gICAgTFJVSGFuZGxlKiBoID0gcmVpbnRlcnByZXRfY2FzdDxMUlVIYW5kbGUqPihoYW5kbGUp
OwotICAgIHNoYXJkX1tTaGFyZChoLT5oYXNoKV0uUmVsZWFzZShoYW5kbGUpOwotICB9Ci0gIHZp
cnR1YWwgdm9pZCBFcmFzZShjb25zdCBTbGljZSYga2V5KSB7Ci0gICAgY29uc3QgdWludDMyX3Qg
aGFzaCA9IEhhc2hTbGljZShrZXkpOwotICAgIHNoYXJkX1tTaGFyZChoYXNoKV0uRXJhc2Uoa2V5
LCBoYXNoKTsKLSAgfQotICB2aXJ0dWFsIHZvaWQqIFZhbHVlKEhhbmRsZSogaGFuZGxlKSB7Ci0g
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TFJVSGFuZGxlKj4oaGFuZGxlKS0+dmFsdWU7Ci0g
IH0KLSAgdmlydHVhbCB1aW50NjRfdCBOZXdJZCgpIHsKLSAgICBNdXRleExvY2sgbCgmaWRfbXV0
ZXhfKTsKLSAgICByZXR1cm4gKysobGFzdF9pZF8pOwotICB9Ci19OwotCi19ICAvLyBlbmQgYW5v
bnltb3VzIG5hbWVzcGFjZQotCi1DYWNoZSogTmV3TFJVQ2FjaGUoc2l6ZV90IGNhcGFjaXR5KSB7
Ci0gIHJldHVybiBuZXcgU2hhcmRlZExSVUNhY2hlKGNhcGFjaXR5KTsKLX0KLQotfSAgLy8gbmFt
ZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRp
bC9jYWNoZV90ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2NhY2hlX3Rl
c3QuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzNzE2NzEuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2NhY2hlX3Rlc3QuY2MKKysrIC9kZXYv
bnVsbApAQCAtMSwxODYgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERC
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2Yg
Y29udHJpYnV0b3JzLgotCi0jaW5jbHVkZSAibGV2ZWxkYi9jYWNoZS5oIgotCi0jaW5jbHVkZSA8
dmVjdG9yPgotI2luY2x1ZGUgInV0aWwvY29kaW5nLmgiCi0jaW5jbHVkZSAidXRpbC90ZXN0aGFy
bmVzcy5oIgotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7Ci0KLS8vIENvbnZlcnNpb25zIGJldHdlZW4g
bnVtZXJpYyBrZXlzL3ZhbHVlcyBhbmQgdGhlIHR5cGVzIGV4cGVjdGVkIGJ5IENhY2hlLgotc3Rh
dGljIHN0ZDo6c3RyaW5nIEVuY29kZUtleShpbnQgaykgewotICBzdGQ6OnN0cmluZyByZXN1bHQ7
Ci0gIFB1dEZpeGVkMzIoJnJlc3VsdCwgayk7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci1zdGF0aWMg
aW50IERlY29kZUtleShjb25zdCBTbGljZSYgaykgewotICBhc3NlcnQoay5zaXplKCkgPT0gNCk7
Ci0gIHJldHVybiBEZWNvZGVGaXhlZDMyKGsuZGF0YSgpKTsKLX0KLXN0YXRpYyB2b2lkKiBFbmNv
ZGVWYWx1ZSh1aW50cHRyX3QgdikgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odik7
IH0KLXN0YXRpYyBpbnQgRGVjb2RlVmFsdWUodm9pZCogdikgeyByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KHYpOyB9Ci0KLWNsYXNzIENhY2hlVGVzdCB7Ci0gcHVibGljOgotICBz
dGF0aWMgQ2FjaGVUZXN0KiBjdXJyZW50XzsKLQotICBzdGF0aWMgdm9pZCBEZWxldGVyKGNvbnN0
IFNsaWNlJiBrZXksIHZvaWQqIHYpIHsKLSAgICBjdXJyZW50Xy0+ZGVsZXRlZF9rZXlzXy5wdXNo
X2JhY2soRGVjb2RlS2V5KGtleSkpOwotICAgIGN1cnJlbnRfLT5kZWxldGVkX3ZhbHVlc18ucHVz
aF9iYWNrKERlY29kZVZhbHVlKHYpKTsKLSAgfQotCi0gIHN0YXRpYyBjb25zdCBpbnQga0NhY2hl
U2l6ZSA9IDEwMDA7Ci0gIHN0ZDo6dmVjdG9yPGludD4gZGVsZXRlZF9rZXlzXzsKLSAgc3RkOjp2
ZWN0b3I8aW50PiBkZWxldGVkX3ZhbHVlc187Ci0gIENhY2hlKiBjYWNoZV87Ci0KLSAgQ2FjaGVU
ZXN0KCkgOiBjYWNoZV8oTmV3TFJVQ2FjaGUoa0NhY2hlU2l6ZSkpIHsKLSAgICBjdXJyZW50XyA9
IHRoaXM7Ci0gIH0KLQotICB+Q2FjaGVUZXN0KCkgewotICAgIGRlbGV0ZSBjYWNoZV87Ci0gIH0K
LQotICBpbnQgTG9va3VwKGludCBrZXkpIHsKLSAgICBDYWNoZTo6SGFuZGxlKiBoYW5kbGUgPSBj
YWNoZV8tPkxvb2t1cChFbmNvZGVLZXkoa2V5KSk7Ci0gICAgY29uc3QgaW50IHIgPSAoaGFuZGxl
ID09IE5VTEwpID8gLTEgOiBEZWNvZGVWYWx1ZShjYWNoZV8tPlZhbHVlKGhhbmRsZSkpOwotICAg
IGlmIChoYW5kbGUgIT0gTlVMTCkgewotICAgICAgY2FjaGVfLT5SZWxlYXNlKGhhbmRsZSk7Ci0g
ICAgfQotICAgIHJldHVybiByOwotICB9Ci0KLSAgdm9pZCBJbnNlcnQoaW50IGtleSwgaW50IHZh
bHVlLCBpbnQgY2hhcmdlID0gMSkgewotICAgIGNhY2hlXy0+UmVsZWFzZShjYWNoZV8tPkluc2Vy
dChFbmNvZGVLZXkoa2V5KSwgRW5jb2RlVmFsdWUodmFsdWUpLCBjaGFyZ2UsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZDYWNoZVRlc3Q6OkRlbGV0ZXIpKTsKLSAgfQotCi0g
IHZvaWQgRXJhc2UoaW50IGtleSkgewotICAgIGNhY2hlXy0+RXJhc2UoRW5jb2RlS2V5KGtleSkp
OwotICB9Ci19OwotQ2FjaGVUZXN0KiBDYWNoZVRlc3Q6OmN1cnJlbnRfOwotCi1URVNUKENhY2hl
VGVzdCwgSGl0QW5kTWlzcykgewotICBBU1NFUlRfRVEoLTEsIExvb2t1cCgxMDApKTsKLQotICBJ
bnNlcnQoMTAwLCAxMDEpOwotICBBU1NFUlRfRVEoMTAxLCBMb29rdXAoMTAwKSk7Ci0gIEFTU0VS
VF9FUSgtMSwgIExvb2t1cCgyMDApKTsKLSAgQVNTRVJUX0VRKC0xLCAgTG9va3VwKDMwMCkpOwot
Ci0gIEluc2VydCgyMDAsIDIwMSk7Ci0gIEFTU0VSVF9FUSgxMDEsIExvb2t1cCgxMDApKTsKLSAg
QVNTRVJUX0VRKDIwMSwgTG9va3VwKDIwMCkpOwotICBBU1NFUlRfRVEoLTEsICBMb29rdXAoMzAw
KSk7Ci0KLSAgSW5zZXJ0KDEwMCwgMTAyKTsKLSAgQVNTRVJUX0VRKDEwMiwgTG9va3VwKDEwMCkp
OwotICBBU1NFUlRfRVEoMjAxLCBMb29rdXAoMjAwKSk7Ci0gIEFTU0VSVF9FUSgtMSwgIExvb2t1
cCgzMDApKTsKLQotICBBU1NFUlRfRVEoMSwgZGVsZXRlZF9rZXlzXy5zaXplKCkpOwotICBBU1NF
UlRfRVEoMTAwLCBkZWxldGVkX2tleXNfWzBdKTsKLSAgQVNTRVJUX0VRKDEwMSwgZGVsZXRlZF92
YWx1ZXNfWzBdKTsKLX0KLQotVEVTVChDYWNoZVRlc3QsIEVyYXNlKSB7Ci0gIEVyYXNlKDIwMCk7
Ci0gIEFTU0VSVF9FUSgwLCBkZWxldGVkX2tleXNfLnNpemUoKSk7Ci0KLSAgSW5zZXJ0KDEwMCwg
MTAxKTsKLSAgSW5zZXJ0KDIwMCwgMjAxKTsKLSAgRXJhc2UoMTAwKTsKLSAgQVNTRVJUX0VRKC0x
LCAgTG9va3VwKDEwMCkpOwotICBBU1NFUlRfRVEoMjAxLCBMb29rdXAoMjAwKSk7Ci0gIEFTU0VS
VF9FUSgxLCBkZWxldGVkX2tleXNfLnNpemUoKSk7Ci0gIEFTU0VSVF9FUSgxMDAsIGRlbGV0ZWRf
a2V5c19bMF0pOwotICBBU1NFUlRfRVEoMTAxLCBkZWxldGVkX3ZhbHVlc19bMF0pOwotCi0gIEVy
YXNlKDEwMCk7Ci0gIEFTU0VSVF9FUSgtMSwgIExvb2t1cCgxMDApKTsKLSAgQVNTRVJUX0VRKDIw
MSwgTG9va3VwKDIwMCkpOwotICBBU1NFUlRfRVEoMSwgZGVsZXRlZF9rZXlzXy5zaXplKCkpOwot
fQotCi1URVNUKENhY2hlVGVzdCwgRW50cmllc0FyZVBpbm5lZCkgewotICBJbnNlcnQoMTAwLCAx
MDEpOwotICBDYWNoZTo6SGFuZGxlKiBoMSA9IGNhY2hlXy0+TG9va3VwKEVuY29kZUtleSgxMDAp
KTsKLSAgQVNTRVJUX0VRKDEwMSwgRGVjb2RlVmFsdWUoY2FjaGVfLT5WYWx1ZShoMSkpKTsKLQot
ICBJbnNlcnQoMTAwLCAxMDIpOwotICBDYWNoZTo6SGFuZGxlKiBoMiA9IGNhY2hlXy0+TG9va3Vw
KEVuY29kZUtleSgxMDApKTsKLSAgQVNTRVJUX0VRKDEwMiwgRGVjb2RlVmFsdWUoY2FjaGVfLT5W
YWx1ZShoMikpKTsKLSAgQVNTRVJUX0VRKDAsIGRlbGV0ZWRfa2V5c18uc2l6ZSgpKTsKLQotICBj
YWNoZV8tPlJlbGVhc2UoaDEpOwotICBBU1NFUlRfRVEoMSwgZGVsZXRlZF9rZXlzXy5zaXplKCkp
OwotICBBU1NFUlRfRVEoMTAwLCBkZWxldGVkX2tleXNfWzBdKTsKLSAgQVNTRVJUX0VRKDEwMSwg
ZGVsZXRlZF92YWx1ZXNfWzBdKTsKLQotICBFcmFzZSgxMDApOwotICBBU1NFUlRfRVEoLTEsIExv
b2t1cCgxMDApKTsKLSAgQVNTRVJUX0VRKDEsIGRlbGV0ZWRfa2V5c18uc2l6ZSgpKTsKLQotICBj
YWNoZV8tPlJlbGVhc2UoaDIpOwotICBBU1NFUlRfRVEoMiwgZGVsZXRlZF9rZXlzXy5zaXplKCkp
OwotICBBU1NFUlRfRVEoMTAwLCBkZWxldGVkX2tleXNfWzFdKTsKLSAgQVNTRVJUX0VRKDEwMiwg
ZGVsZXRlZF92YWx1ZXNfWzFdKTsKLX0KLQotVEVTVChDYWNoZVRlc3QsIEV2aWN0aW9uUG9saWN5
KSB7Ci0gIEluc2VydCgxMDAsIDEwMSk7Ci0gIEluc2VydCgyMDAsIDIwMSk7Ci0KLSAgLy8gRnJl
cXVlbnRseSB1c2VkIGVudHJ5IG11c3QgYmUga2VwdCBhcm91bmQKLSAgZm9yIChpbnQgaSA9IDA7
IGkgPCBrQ2FjaGVTaXplICsgMTAwOyBpKyspIHsKLSAgICBJbnNlcnQoMTAwMCtpLCAyMDAwK2kp
OwotICAgIEFTU0VSVF9FUSgyMDAwK2ksIExvb2t1cCgxMDAwK2kpKTsKLSAgICBBU1NFUlRfRVEo
MTAxLCBMb29rdXAoMTAwKSk7Ci0gIH0KLSAgQVNTRVJUX0VRKDEwMSwgTG9va3VwKDEwMCkpOwot
ICBBU1NFUlRfRVEoLTEsIExvb2t1cCgyMDApKTsKLX0KLQotVEVTVChDYWNoZVRlc3QsIEhlYXZ5
RW50cmllcykgewotICAvLyBBZGQgYSBidW5jaCBvZiBsaWdodCBhbmQgaGVhdnkgZW50cmllcyBh
bmQgdGhlbiBjb3VudCB0aGUgY29tYmluZWQKLSAgLy8gc2l6ZSBvZiBpdGVtcyBzdGlsbCBpbiB0
aGUgY2FjaGUsIHdoaWNoIG11c3QgYmUgYXBwcm94aW1hdGVseSB0aGUKLSAgLy8gc2FtZSBhcyB0
aGUgdG90YWwgY2FwYWNpdHkuCi0gIGNvbnN0IGludCBrTGlnaHQgPSAxOwotICBjb25zdCBpbnQg
a0hlYXZ5ID0gMTA7Ci0gIGludCBhZGRlZCA9IDA7Ci0gIGludCBpbmRleCA9IDA7Ci0gIHdoaWxl
IChhZGRlZCA8IDIqa0NhY2hlU2l6ZSkgewotICAgIGNvbnN0IGludCB3ZWlnaHQgPSAoaW5kZXgg
JiAxKSA/IGtMaWdodCA6IGtIZWF2eTsKLSAgICBJbnNlcnQoaW5kZXgsIDEwMDAraW5kZXgsIHdl
aWdodCk7Ci0gICAgYWRkZWQgKz0gd2VpZ2h0OwotICAgIGluZGV4Kys7Ci0gIH0KLQotICBpbnQg
Y2FjaGVkX3dlaWdodCA9IDA7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgaW5kZXg7IGkrKykgewot
ICAgIGNvbnN0IGludCB3ZWlnaHQgPSAoaSAmIDEgPyBrTGlnaHQgOiBrSGVhdnkpOwotICAgIGlu
dCByID0gTG9va3VwKGkpOwotICAgIGlmIChyID49IDApIHsKLSAgICAgIGNhY2hlZF93ZWlnaHQg
Kz0gd2VpZ2h0OwotICAgICAgQVNTRVJUX0VRKDEwMDAraSwgcik7Ci0gICAgfQotICB9Ci0gIEFT
U0VSVF9MRShjYWNoZWRfd2VpZ2h0LCBrQ2FjaGVTaXplICsga0NhY2hlU2l6ZS8xMCk7Ci19Ci0K
LVRFU1QoQ2FjaGVUZXN0LCBOZXdJZCkgewotICB1aW50NjRfdCBhID0gY2FjaGVfLT5OZXdJZCgp
OwotICB1aW50NjRfdCBiID0gY2FjaGVfLT5OZXdJZCgpOwotICBBU1NFUlRfTkUoYSwgYik7Ci19
Ci0KLX0gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCi0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiog
YXJndikgewotICByZXR1cm4gbGV2ZWxkYjo6dGVzdDo6UnVuQWxsVGVzdHMoKTsKLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9jb2RpbmcuY2MgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvY29kaW5nLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAyMWUzMTg2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
dXRpbC9jb2RpbmcuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxOTQgKzAsMCBAQAotLy8gQ29weXJp
Z2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFV
VEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgotCi0jaW5jbHVkZSAidXRpbC9j
b2RpbmcuaCIKLQotbmFtZXNwYWNlIGxldmVsZGIgewotCi12b2lkIEVuY29kZUZpeGVkMzIoY2hh
ciogYnVmLCB1aW50MzJfdCB2YWx1ZSkgewotICBpZiAocG9ydDo6a0xpdHRsZUVuZGlhbikgewot
ICAgIG1lbWNweShidWYsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7Ci0gIH0gZWxzZSB7Ci0gICAg
YnVmWzBdID0gdmFsdWUgJiAweGZmOwotICAgIGJ1ZlsxXSA9ICh2YWx1ZSA+PiA4KSAmIDB4ZmY7
Ci0gICAgYnVmWzJdID0gKHZhbHVlID4+IDE2KSAmIDB4ZmY7Ci0gICAgYnVmWzNdID0gKHZhbHVl
ID4+IDI0KSAmIDB4ZmY7Ci0gIH0KLX0KLQotdm9pZCBFbmNvZGVGaXhlZDY0KGNoYXIqIGJ1Ziwg
dWludDY0X3QgdmFsdWUpIHsKLSAgaWYgKHBvcnQ6OmtMaXR0bGVFbmRpYW4pIHsKLSAgICBtZW1j
cHkoYnVmLCAmdmFsdWUsIHNpemVvZih2YWx1ZSkpOwotICB9IGVsc2UgewotICAgIGJ1ZlswXSA9
IHZhbHVlICYgMHhmZjsKLSAgICBidWZbMV0gPSAodmFsdWUgPj4gOCkgJiAweGZmOwotICAgIGJ1
ZlsyXSA9ICh2YWx1ZSA+PiAxNikgJiAweGZmOwotICAgIGJ1ZlszXSA9ICh2YWx1ZSA+PiAyNCkg
JiAweGZmOwotICAgIGJ1Zls0XSA9ICh2YWx1ZSA+PiAzMikgJiAweGZmOwotICAgIGJ1Zls1XSA9
ICh2YWx1ZSA+PiA0MCkgJiAweGZmOwotICAgIGJ1Zls2XSA9ICh2YWx1ZSA+PiA0OCkgJiAweGZm
OwotICAgIGJ1Zls3XSA9ICh2YWx1ZSA+PiA1NikgJiAweGZmOwotICB9Ci19Ci0KLXZvaWQgUHV0
Rml4ZWQzMihzdGQ6OnN0cmluZyogZHN0LCB1aW50MzJfdCB2YWx1ZSkgewotICBjaGFyIGJ1Zltz
aXplb2YodmFsdWUpXTsKLSAgRW5jb2RlRml4ZWQzMihidWYsIHZhbHVlKTsKLSAgZHN0LT5hcHBl
bmQoYnVmLCBzaXplb2YoYnVmKSk7Ci19Ci0KLXZvaWQgUHV0Rml4ZWQ2NChzdGQ6OnN0cmluZyog
ZHN0LCB1aW50NjRfdCB2YWx1ZSkgewotICBjaGFyIGJ1ZltzaXplb2YodmFsdWUpXTsKLSAgRW5j
b2RlRml4ZWQ2NChidWYsIHZhbHVlKTsKLSAgZHN0LT5hcHBlbmQoYnVmLCBzaXplb2YoYnVmKSk7
Ci19Ci0KLWNoYXIqIEVuY29kZVZhcmludDMyKGNoYXIqIGRzdCwgdWludDMyX3QgdikgewotICAv
LyBPcGVyYXRlIG9uIGNoYXJhY3RlcnMgYXMgdW5zaWduZWRzCi0gIHVuc2lnbmVkIGNoYXIqIHB0
ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRzdCk7Ci0gIHN0YXRpYyBjb25z
dCBpbnQgQiA9IDEyODsKLSAgaWYgKHYgPCAoMTw8NykpIHsKLSAgICAqKHB0cisrKSA9IHY7Ci0g
IH0gZWxzZSBpZiAodiA8ICgxPDwxNCkpIHsKLSAgICAqKHB0cisrKSA9IHYgfCBCOwotICAgICoo
cHRyKyspID0gdj4+NzsKLSAgfSBlbHNlIGlmICh2IDwgKDE8PDIxKSkgewotICAgICoocHRyKysp
ID0gdiB8IEI7Ci0gICAgKihwdHIrKykgPSAodj4+NykgfCBCOwotICAgICoocHRyKyspID0gdj4+
MTQ7Ci0gIH0gZWxzZSBpZiAodiA8ICgxPDwyOCkpIHsKLSAgICAqKHB0cisrKSA9IHYgfCBCOwot
ICAgICoocHRyKyspID0gKHY+PjcpIHwgQjsKLSAgICAqKHB0cisrKSA9ICh2Pj4xNCkgfCBCOwot
ICAgICoocHRyKyspID0gdj4+MjE7Ci0gIH0gZWxzZSB7Ci0gICAgKihwdHIrKykgPSB2IHwgQjsK
LSAgICAqKHB0cisrKSA9ICh2Pj43KSB8IEI7Ci0gICAgKihwdHIrKykgPSAodj4+MTQpIHwgQjsK
LSAgICAqKHB0cisrKSA9ICh2Pj4yMSkgfCBCOwotICAgICoocHRyKyspID0gdj4+Mjg7Ci0gIH0K
LSAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHB0cik7Ci19Ci0KLXZvaWQgUHV0VmFy
aW50MzIoc3RkOjpzdHJpbmcqIGRzdCwgdWludDMyX3QgdikgewotICBjaGFyIGJ1Zls1XTsKLSAg
Y2hhciogcHRyID0gRW5jb2RlVmFyaW50MzIoYnVmLCB2KTsKLSAgZHN0LT5hcHBlbmQoYnVmLCBw
dHIgLSBidWYpOwotfQotCi1jaGFyKiBFbmNvZGVWYXJpbnQ2NChjaGFyKiBkc3QsIHVpbnQ2NF90
IHYpIHsKLSAgc3RhdGljIGNvbnN0IGludCBCID0gMTI4OwotICB1bnNpZ25lZCBjaGFyKiBwdHIg
PSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihkc3QpOwotICB3aGlsZSAodiA+PSBC
KSB7Ci0gICAgKihwdHIrKykgPSAodiAmIChCLTEpKSB8IEI7Ci0gICAgdiA+Pj0gNzsKLSAgfQot
ICAqKHB0cisrKSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHYpOwotICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4ocHRyKTsKLX0KLQotdm9pZCBQdXRWYXJpbnQ2NChzdGQ6OnN0
cmluZyogZHN0LCB1aW50NjRfdCB2KSB7Ci0gIGNoYXIgYnVmWzEwXTsKLSAgY2hhciogcHRyID0g
RW5jb2RlVmFyaW50NjQoYnVmLCB2KTsKLSAgZHN0LT5hcHBlbmQoYnVmLCBwdHIgLSBidWYpOwot
fQotCi12b2lkIFB1dExlbmd0aFByZWZpeGVkU2xpY2Uoc3RkOjpzdHJpbmcqIGRzdCwgY29uc3Qg
U2xpY2UmIHZhbHVlKSB7Ci0gIFB1dFZhcmludDMyKGRzdCwgdmFsdWUuc2l6ZSgpKTsKLSAgZHN0
LT5hcHBlbmQodmFsdWUuZGF0YSgpLCB2YWx1ZS5zaXplKCkpOwotfQotCi1pbnQgVmFyaW50TGVu
Z3RoKHVpbnQ2NF90IHYpIHsKLSAgaW50IGxlbiA9IDE7Ci0gIHdoaWxlICh2ID49IDEyOCkgewot
ICAgIHYgPj49IDc7Ci0gICAgbGVuKys7Ci0gIH0KLSAgcmV0dXJuIGxlbjsKLX0KLQotY29uc3Qg
Y2hhciogR2V0VmFyaW50MzJQdHJGYWxsYmFjayhjb25zdCBjaGFyKiBwLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBsaW1pdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIHZhbHVlKSB7Ci0gIHVpbnQzMl90IHJlc3Vs
dCA9IDA7Ci0gIGZvciAodWludDMyX3Qgc2hpZnQgPSAwOyBzaGlmdCA8PSAyOCAmJiBwIDwgbGlt
aXQ7IHNoaWZ0ICs9IDcpIHsKLSAgICB1aW50MzJfdCBieXRlID0gKihyZWludGVycHJldF9jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihwKSk7Ci0gICAgcCsrOwotICAgIGlmIChieXRlICYgMTI4
KSB7Ci0gICAgICAvLyBNb3JlIGJ5dGVzIGFyZSBwcmVzZW50Ci0gICAgICByZXN1bHQgfD0gKChi
eXRlICYgMTI3KSA8PCBzaGlmdCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJlc3VsdCB8PSAoYnl0
ZSA8PCBzaGlmdCk7Ci0gICAgICAqdmFsdWUgPSByZXN1bHQ7Ci0gICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4ocCk7Ci0gICAgfQotICB9Ci0gIHJldHVybiBOVUxMOwot
fQotCi1ib29sIEdldFZhcmludDMyKFNsaWNlKiBpbnB1dCwgdWludDMyX3QqIHZhbHVlKSB7Ci0g
IGNvbnN0IGNoYXIqIHAgPSBpbnB1dC0+ZGF0YSgpOwotICBjb25zdCBjaGFyKiBsaW1pdCA9IHAg
KyBpbnB1dC0+c2l6ZSgpOwotICBjb25zdCBjaGFyKiBxID0gR2V0VmFyaW50MzJQdHIocCwgbGlt
aXQsIHZhbHVlKTsKLSAgaWYgKHEgPT0gTlVMTCkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfSBl
bHNlIHsKLSAgICAqaW5wdXQgPSBTbGljZShxLCBsaW1pdCAtIHEpOwotICAgIHJldHVybiB0cnVl
OwotICB9Ci19Ci0KLWNvbnN0IGNoYXIqIEdldFZhcmludDY0UHRyKGNvbnN0IGNoYXIqIHAsIGNv
bnN0IGNoYXIqIGxpbWl0LCB1aW50NjRfdCogdmFsdWUpIHsKLSAgdWludDY0X3QgcmVzdWx0ID0g
MDsKLSAgZm9yICh1aW50MzJfdCBzaGlmdCA9IDA7IHNoaWZ0IDw9IDYzICYmIHAgPCBsaW1pdDsg
c2hpZnQgKz0gNykgewotICAgIHVpbnQ2NF90IGJ5dGUgPSAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KHApKTsKLSAgICBwKys7Ci0gICAgaWYgKGJ5dGUgJiAxMjgpIHsK
LSAgICAgIC8vIE1vcmUgYnl0ZXMgYXJlIHByZXNlbnQKLSAgICAgIHJlc3VsdCB8PSAoKGJ5dGUg
JiAxMjcpIDw8IHNoaWZ0KTsKLSAgICB9IGVsc2UgewotICAgICAgcmVzdWx0IHw9IChieXRlIDw8
IHNoaWZ0KTsKLSAgICAgICp2YWx1ZSA9IHJlc3VsdDsKLSAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihwKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0K
LWJvb2wgR2V0VmFyaW50NjQoU2xpY2UqIGlucHV0LCB1aW50NjRfdCogdmFsdWUpIHsKLSAgY29u
c3QgY2hhciogcCA9IGlucHV0LT5kYXRhKCk7Ci0gIGNvbnN0IGNoYXIqIGxpbWl0ID0gcCArIGlu
cHV0LT5zaXplKCk7Ci0gIGNvbnN0IGNoYXIqIHEgPSBHZXRWYXJpbnQ2NFB0cihwLCBsaW1pdCwg
dmFsdWUpOwotICBpZiAocSA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9IGVsc2Ug
ewotICAgICppbnB1dCA9IFNsaWNlKHEsIGxpbWl0IC0gcSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0g
IH0KLX0KLQotY29uc3QgY2hhciogR2V0TGVuZ3RoUHJlZml4ZWRTbGljZShjb25zdCBjaGFyKiBw
LCBjb25zdCBjaGFyKiBsaW1pdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U2xpY2UqIHJlc3VsdCkgewotICB1aW50MzJfdCBsZW47Ci0gIHAgPSBHZXRWYXJpbnQzMlB0cihw
LCBsaW1pdCwgJmxlbik7Ci0gIGlmIChwID09IE5VTEwpIHJldHVybiBOVUxMOwotICBpZiAocCAr
IGxlbiA+IGxpbWl0KSByZXR1cm4gTlVMTDsKLSAgKnJlc3VsdCA9IFNsaWNlKHAsIGxlbik7Ci0g
IHJldHVybiBwICsgbGVuOwotfQotCi1ib29sIEdldExlbmd0aFByZWZpeGVkU2xpY2UoU2xpY2Uq
IGlucHV0LCBTbGljZSogcmVzdWx0KSB7Ci0gIHVpbnQzMl90IGxlbjsKLSAgaWYgKEdldFZhcmlu
dDMyKGlucHV0LCAmbGVuKSAmJgotICAgICAgaW5wdXQtPnNpemUoKSA+PSBsZW4pIHsKLSAgICAq
cmVzdWx0ID0gU2xpY2UoaW5wdXQtPmRhdGEoKSwgbGVuKTsKLSAgICBpbnB1dC0+cmVtb3ZlX3By
ZWZpeChsZW4pOwotICAgIHJldHVybiB0cnVlOwotICB9IGVsc2UgewotICAgIHJldHVybiBmYWxz
ZTsKLSAgfQotfQotCi19ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2NvZGluZy5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi91dGlsL2NvZGluZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTkzYzRh
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9jb2RpbmcuaAor
KysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhl
IExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBu
YW1lcyBvZiBjb250cmlidXRvcnMuCi0vLwotLy8gRW5kaWFuLW5ldXRyYWwgZW5jb2Rpbmc6Ci0v
LyAqIEZpeGVkLWxlbmd0aCBudW1iZXJzIGFyZSBlbmNvZGVkIHdpdGggbGVhc3Qtc2lnbmlmaWNh
bnQgYnl0ZSBmaXJzdAotLy8gKiBJbiBhZGRpdGlvbiB3ZSBzdXBwb3J0IHZhcmlhYmxlIGxlbmd0
aCAidmFyaW50IiBlbmNvZGluZwotLy8gKiBTdHJpbmdzIGFyZSBlbmNvZGVkIHByZWZpeGVkIGJ5
IHRoZWlyIGxlbmd0aCBpbiB2YXJpbnQgZm9ybWF0Ci0KLSNpZm5kZWYgU1RPUkFHRV9MRVZFTERC
X1VUSUxfQ09ESU5HX0hfCi0jZGVmaW5lIFNUT1JBR0VfTEVWRUxEQl9VVElMX0NPRElOR19IXwot
Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3Ry
aW5nPgotI2luY2x1ZGUgImxldmVsZGIvc2xpY2UuaCIKLSNpbmNsdWRlICJwb3J0L3BvcnQuaCIK
LQotbmFtZXNwYWNlIGxldmVsZGIgewotCi0vLyBTdGFuZGFyZCBQdXQuLi4gcm91dGluZXMgYXBw
ZW5kIHRvIGEgc3RyaW5nCi1leHRlcm4gdm9pZCBQdXRGaXhlZDMyKHN0ZDo6c3RyaW5nKiBkc3Qs
IHVpbnQzMl90IHZhbHVlKTsKLWV4dGVybiB2b2lkIFB1dEZpeGVkNjQoc3RkOjpzdHJpbmcqIGRz
dCwgdWludDY0X3QgdmFsdWUpOwotZXh0ZXJuIHZvaWQgUHV0VmFyaW50MzIoc3RkOjpzdHJpbmcq
IGRzdCwgdWludDMyX3QgdmFsdWUpOwotZXh0ZXJuIHZvaWQgUHV0VmFyaW50NjQoc3RkOjpzdHJp
bmcqIGRzdCwgdWludDY0X3QgdmFsdWUpOwotZXh0ZXJuIHZvaWQgUHV0TGVuZ3RoUHJlZml4ZWRT
bGljZShzdGQ6OnN0cmluZyogZHN0LCBjb25zdCBTbGljZSYgdmFsdWUpOwotCi0vLyBTdGFuZGFy
ZCBHZXQuLi4gcm91dGluZXMgcGFyc2UgYSB2YWx1ZSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgYSBT
bGljZQotLy8gYW5kIGFkdmFuY2UgdGhlIHNsaWNlIHBhc3QgdGhlIHBhcnNlZCB2YWx1ZS4KLWV4
dGVybiBib29sIEdldFZhcmludDMyKFNsaWNlKiBpbnB1dCwgdWludDMyX3QqIHZhbHVlKTsKLWV4
dGVybiBib29sIEdldFZhcmludDY0KFNsaWNlKiBpbnB1dCwgdWludDY0X3QqIHZhbHVlKTsKLWV4
dGVybiBib29sIEdldExlbmd0aFByZWZpeGVkU2xpY2UoU2xpY2UqIGlucHV0LCBTbGljZSogcmVz
dWx0KTsKLQotLy8gUG9pbnRlci1iYXNlZCB2YXJpYW50cyBvZiBHZXRWYXJpbnQuLi4gIFRoZXNl
IGVpdGhlciBzdG9yZSBhIHZhbHVlCi0vLyBpbiAqdiBhbmQgcmV0dXJuIGEgcG9pbnRlciBqdXN0
IHBhc3QgdGhlIHBhcnNlZCB2YWx1ZSwgb3IgcmV0dXJuCi0vLyBOVUxMIG9uIGVycm9yLiAgVGhl
c2Ugcm91dGluZXMgb25seSBsb29rIGF0IGJ5dGVzIGluIHRoZSByYW5nZQotLy8gW3AuLmxpbWl0
LTFdCi1leHRlcm4gY29uc3QgY2hhciogR2V0VmFyaW50MzJQdHIoY29uc3QgY2hhciogcCxjb25z
dCBjaGFyKiBsaW1pdCwgdWludDMyX3QqIHYpOwotZXh0ZXJuIGNvbnN0IGNoYXIqIEdldFZhcmlu
dDY0UHRyKGNvbnN0IGNoYXIqIHAsY29uc3QgY2hhciogbGltaXQsIHVpbnQ2NF90KiB2KTsKLQot
Ly8gUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSB2YXJpbnQzMiBvciB2YXJpbnQ2NCBlbmNvZGlu
ZyBvZiAidiIKLWV4dGVybiBpbnQgVmFyaW50TGVuZ3RoKHVpbnQ2NF90IHYpOwotCi0vLyBMb3dl
ci1sZXZlbCB2ZXJzaW9ucyBvZiBQdXQuLi4gdGhhdCB3cml0ZSBkaXJlY3RseSBpbnRvIGEgY2hh
cmFjdGVyIGJ1ZmZlcgotLy8gUkVRVUlSRVM6IGRzdCBoYXMgZW5vdWdoIHNwYWNlIGZvciB0aGUg
dmFsdWUgYmVpbmcgd3JpdHRlbgotZXh0ZXJuIHZvaWQgRW5jb2RlRml4ZWQzMihjaGFyKiBkc3Qs
IHVpbnQzMl90IHZhbHVlKTsKLWV4dGVybiB2b2lkIEVuY29kZUZpeGVkNjQoY2hhciogZHN0LCB1
aW50NjRfdCB2YWx1ZSk7Ci0KLS8vIExvd2VyLWxldmVsIHZlcnNpb25zIG9mIFB1dC4uLiB0aGF0
IHdyaXRlIGRpcmVjdGx5IGludG8gYSBjaGFyYWN0ZXIgYnVmZmVyCi0vLyBhbmQgcmV0dXJuIGEg
cG9pbnRlciBqdXN0IHBhc3QgdGhlIGxhc3QgYnl0ZSB3cml0dGVuLgotLy8gUkVRVUlSRVM6IGRz
dCBoYXMgZW5vdWdoIHNwYWNlIGZvciB0aGUgdmFsdWUgYmVpbmcgd3JpdHRlbgotZXh0ZXJuIGNo
YXIqIEVuY29kZVZhcmludDMyKGNoYXIqIGRzdCwgdWludDMyX3QgdmFsdWUpOwotZXh0ZXJuIGNo
YXIqIEVuY29kZVZhcmludDY0KGNoYXIqIGRzdCwgdWludDY0X3QgdmFsdWUpOwotCi0vLyBMb3dl
ci1sZXZlbCB2ZXJzaW9ucyBvZiBHZXQuLi4gdGhhdCByZWFkIGRpcmVjdGx5IGZyb20gYSBjaGFy
YWN0ZXIgYnVmZmVyCi0vLyB3aXRob3V0IGFueSBib3VuZHMgY2hlY2tpbmcuCi0KLWlubGluZSB1
aW50MzJfdCBEZWNvZGVGaXhlZDMyKGNvbnN0IGNoYXIqIHB0cikgewotICBpZiAocG9ydDo6a0xp
dHRsZUVuZGlhbikgewotICAgIC8vIExvYWQgdGhlIHJhdyBieXRlcwotICAgIHVpbnQzMl90IHJl
c3VsdDsKLSAgICBtZW1jcHkoJnJlc3VsdCwgcHRyLCBzaXplb2YocmVzdWx0KSk7ICAvLyBnY2Mg
b3B0aW1pemVzIHRoaXMgdG8gYSBwbGFpbiBsb2FkCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfSBl
bHNlIHsKLSAgICByZXR1cm4gKChzdGF0aWNfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4ocHRyWzBdKSkpCi0gICAgICAgIHwgKHN0YXRpY19jYXN0PHVpbnQzMl90Pihz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihwdHJbMV0pKSA8PCA4KQotICAgICAgICB8IChzdGF0
aWNfY2FzdDx1aW50MzJfdD4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4ocHRyWzJdKSkgPDwg
MTYpCi0gICAgICAgIHwgKHN0YXRpY19jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyPihwdHJbM10pKSA8PCAyNCkpOwotICB9Ci19Ci0KLWlubGluZSB1aW50NjRfdCBEZWNv
ZGVGaXhlZDY0KGNvbnN0IGNoYXIqIHB0cikgewotICBpZiAocG9ydDo6a0xpdHRsZUVuZGlhbikg
ewotICAgIC8vIExvYWQgdGhlIHJhdyBieXRlcwotICAgIHVpbnQ2NF90IHJlc3VsdDsKLSAgICBt
ZW1jcHkoJnJlc3VsdCwgcHRyLCBzaXplb2YocmVzdWx0KSk7ICAvLyBnY2Mgb3B0aW1pemVzIHRo
aXMgdG8gYSBwbGFpbiBsb2FkCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfSBlbHNlIHsKLSAgICB1
aW50NjRfdCBsbyA9IERlY29kZUZpeGVkMzIocHRyKTsKLSAgICB1aW50NjRfdCBoaSA9IERlY29k
ZUZpeGVkMzIocHRyICsgNCk7Ci0gICAgcmV0dXJuIChoaSA8PCAzMikgfCBsbzsKLSAgfQotfQot
Ci0vLyBJbnRlcm5hbCByb3V0aW5lIGZvciB1c2UgYnkgZmFsbGJhY2sgcGF0aCBvZiBHZXRWYXJp
bnQzMlB0cgotZXh0ZXJuIGNvbnN0IGNoYXIqIEdldFZhcmludDMyUHRyRmFsbGJhY2soY29uc3Qg
Y2hhciogcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIGxpbWl0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dWludDMyX3QqIHZhbHVlKTsKLWlubGluZSBjb25zdCBjaGFyKiBHZXRWYXJpbnQzMlB0cihjb25z
dCBjaGFyKiBwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IGxpbWl0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90KiB2YWx1
ZSkgewotICBpZiAocCA8IGxpbWl0KSB7Ci0gICAgdWludDMyX3QgcmVzdWx0ID0gKihyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihwKSk7Ci0gICAgaWYgKChyZXN1bHQgJiAx
MjgpID09IDApIHsKLSAgICAgICp2YWx1ZSA9IHJlc3VsdDsKLSAgICAgIHJldHVybiBwICsgMTsK
LSAgICB9Ci0gIH0KLSAgcmV0dXJuIEdldFZhcmludDMyUHRyRmFsbGJhY2socCwgbGltaXQsIHZh
bHVlKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKLQotI2VuZGlmICAvLyBTVE9SQUdF
X0xFVkVMREJfVVRJTF9DT0RJTkdfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvdXRpbC9jb2RpbmdfdGVzdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRp
bC9jb2RpbmdfdGVzdC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM1MmIxNy4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvY29kaW5nX3Rlc3Qu
Y2MKKysrIC9kZXYvbnVsbApAQCAtMSwxOTYgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEx
IFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBm
b3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgotCi0jaW5jbHVkZSAidXRpbC9jb2RpbmcuaCIKLQot
I2luY2x1ZGUgInV0aWwvdGVzdGhhcm5lc3MuaCIKLQotbmFtZXNwYWNlIGxldmVsZGIgewotCi1j
bGFzcyBDb2RpbmcgeyB9OwotCi1URVNUKENvZGluZywgRml4ZWQzMikgewotICBzdGQ6OnN0cmlu
ZyBzOwotICBmb3IgKHVpbnQzMl90IHYgPSAwOyB2IDwgMTAwMDAwOyB2KyspIHsKLSAgICBQdXRG
aXhlZDMyKCZzLCB2KTsKLSAgfQotCi0gIGNvbnN0IGNoYXIqIHAgPSBzLmRhdGEoKTsKLSAgZm9y
ICh1aW50MzJfdCB2ID0gMDsgdiA8IDEwMDAwMDsgdisrKSB7Ci0gICAgdWludDMyX3QgYWN0dWFs
ID0gRGVjb2RlRml4ZWQzMihwKTsKLSAgICBBU1NFUlRfRVEodiwgYWN0dWFsKTsKLSAgICBwICs9
IHNpemVvZih1aW50MzJfdCk7Ci0gIH0KLX0KLQotVEVTVChDb2RpbmcsIEZpeGVkNjQpIHsKLSAg
c3RkOjpzdHJpbmcgczsKLSAgZm9yIChpbnQgcG93ZXIgPSAwOyBwb3dlciA8PSA2MzsgcG93ZXIr
KykgewotICAgIHVpbnQ2NF90IHYgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oMSkgPDwgcG93ZXI7
Ci0gICAgUHV0Rml4ZWQ2NCgmcywgdiAtIDEpOwotICAgIFB1dEZpeGVkNjQoJnMsIHYgKyAwKTsK
LSAgICBQdXRGaXhlZDY0KCZzLCB2ICsgMSk7Ci0gIH0KLQotICBjb25zdCBjaGFyKiBwID0gcy5k
YXRhKCk7Ci0gIGZvciAoaW50IHBvd2VyID0gMDsgcG93ZXIgPD0gNjM7IHBvd2VyKyspIHsKLSAg
ICB1aW50NjRfdCB2ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDEpIDw8IHBvd2VyOwotICAgIHVp
bnQ2NF90IGFjdHVhbDsKLSAgICBhY3R1YWwgPSBEZWNvZGVGaXhlZDY0KHApOwotICAgIEFTU0VS
VF9FUSh2LTEsIGFjdHVhbCk7Ci0gICAgcCArPSBzaXplb2YodWludDY0X3QpOwotCi0gICAgYWN0
dWFsID0gRGVjb2RlRml4ZWQ2NChwKTsKLSAgICBBU1NFUlRfRVEodiswLCBhY3R1YWwpOwotICAg
IHAgKz0gc2l6ZW9mKHVpbnQ2NF90KTsKLQotICAgIGFjdHVhbCA9IERlY29kZUZpeGVkNjQocCk7
Ci0gICAgQVNTRVJUX0VRKHYrMSwgYWN0dWFsKTsKLSAgICBwICs9IHNpemVvZih1aW50NjRfdCk7
Ci0gIH0KLX0KLQotLy8gVGVzdCB0aGF0IGVuY29kaW5nIHJvdXRpbmVzIGdlbmVyYXRlIGxpdHRs
ZS1lbmRpYW4gZW5jb2RpbmdzCi1URVNUKENvZGluZywgRW5jb2RpbmdPdXRwdXQpIHsKLSAgc3Rk
OjpzdHJpbmcgZHN0OwotICBQdXRGaXhlZDMyKCZkc3QsIDB4MDQwMzAyMDEpOwotICBBU1NFUlRf
RVEoNCwgZHN0LnNpemUoKSk7Ci0gIEFTU0VSVF9FUSgweDAxLCBzdGF0aWNfY2FzdDxpbnQ+KGRz
dFswXSkpOwotICBBU1NFUlRfRVEoMHgwMiwgc3RhdGljX2Nhc3Q8aW50Pihkc3RbMV0pKTsKLSAg
QVNTRVJUX0VRKDB4MDMsIHN0YXRpY19jYXN0PGludD4oZHN0WzJdKSk7Ci0gIEFTU0VSVF9FUSgw
eDA0LCBzdGF0aWNfY2FzdDxpbnQ+KGRzdFszXSkpOwotCi0gIGRzdC5jbGVhcigpOwotICBQdXRG
aXhlZDY0KCZkc3QsIDB4MDgwNzA2MDUwNDAzMDIwMXVsbCk7Ci0gIEFTU0VSVF9FUSg4LCBkc3Qu
c2l6ZSgpKTsKLSAgQVNTRVJUX0VRKDB4MDEsIHN0YXRpY19jYXN0PGludD4oZHN0WzBdKSk7Ci0g
IEFTU0VSVF9FUSgweDAyLCBzdGF0aWNfY2FzdDxpbnQ+KGRzdFsxXSkpOwotICBBU1NFUlRfRVEo
MHgwMywgc3RhdGljX2Nhc3Q8aW50Pihkc3RbMl0pKTsKLSAgQVNTRVJUX0VRKDB4MDQsIHN0YXRp
Y19jYXN0PGludD4oZHN0WzNdKSk7Ci0gIEFTU0VSVF9FUSgweDA1LCBzdGF0aWNfY2FzdDxpbnQ+
KGRzdFs0XSkpOwotICBBU1NFUlRfRVEoMHgwNiwgc3RhdGljX2Nhc3Q8aW50Pihkc3RbNV0pKTsK
LSAgQVNTRVJUX0VRKDB4MDcsIHN0YXRpY19jYXN0PGludD4oZHN0WzZdKSk7Ci0gIEFTU0VSVF9F
USgweDA4LCBzdGF0aWNfY2FzdDxpbnQ+KGRzdFs3XSkpOwotfQotCi1URVNUKENvZGluZywgVmFy
aW50MzIpIHsKLSAgc3RkOjpzdHJpbmcgczsKLSAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8ICgz
MiAqIDMyKTsgaSsrKSB7Ci0gICAgdWludDMyX3QgdiA9IChpIC8gMzIpIDw8IChpICUgMzIpOwot
ICAgIFB1dFZhcmludDMyKCZzLCB2KTsKLSAgfQotCi0gIGNvbnN0IGNoYXIqIHAgPSBzLmRhdGEo
KTsKLSAgY29uc3QgY2hhciogbGltaXQgPSBwICsgcy5zaXplKCk7Ci0gIGZvciAodWludDMyX3Qg
aSA9IDA7IGkgPCAoMzIgKiAzMik7IGkrKykgewotICAgIHVpbnQzMl90IGV4cGVjdGVkID0gKGkg
LyAzMikgPDwgKGkgJSAzMik7Ci0gICAgdWludDMyX3QgYWN0dWFsOwotICAgIGNvbnN0IGNoYXIq
IHN0YXJ0ID0gcDsKLSAgICBwID0gR2V0VmFyaW50MzJQdHIocCwgbGltaXQsICZhY3R1YWwpOwot
ICAgIEFTU0VSVF9UUlVFKHAgIT0gTlVMTCk7Ci0gICAgQVNTRVJUX0VRKGV4cGVjdGVkLCBhY3R1
YWwpOwotICAgIEFTU0VSVF9FUShWYXJpbnRMZW5ndGgoYWN0dWFsKSwgcCAtIHN0YXJ0KTsKLSAg
fQotICBBU1NFUlRfRVEocCwgcy5kYXRhKCkgKyBzLnNpemUoKSk7Ci19Ci0KLVRFU1QoQ29kaW5n
LCBWYXJpbnQ2NCkgewotICAvLyBDb25zdHJ1Y3QgdGhlIGxpc3Qgb2YgdmFsdWVzIHRvIGNoZWNr
Ci0gIHN0ZDo6dmVjdG9yPHVpbnQ2NF90PiB2YWx1ZXM7Ci0gIC8vIFNvbWUgc3BlY2lhbCB2YWx1
ZXMKLSAgdmFsdWVzLnB1c2hfYmFjaygwKTsKLSAgdmFsdWVzLnB1c2hfYmFjaygxMDApOwotICB2
YWx1ZXMucHVzaF9iYWNrKH5zdGF0aWNfY2FzdDx1aW50NjRfdD4oMCkpOwotICB2YWx1ZXMucHVz
aF9iYWNrKH5zdGF0aWNfY2FzdDx1aW50NjRfdD4oMCkgLSAxKTsKLSAgZm9yICh1aW50MzJfdCBr
ID0gMDsgayA8IDY0OyBrKyspIHsKLSAgICAvLyBUZXN0IHZhbHVlcyBuZWFyIHBvd2VycyBvZiB0
d28KLSAgICBjb25zdCB1aW50NjRfdCBwb3dlciA9IDF1bGwgPDwgazsKLSAgICB2YWx1ZXMucHVz
aF9iYWNrKHBvd2VyKTsKLSAgICB2YWx1ZXMucHVzaF9iYWNrKHBvd2VyLTEpOwotICAgIHZhbHVl
cy5wdXNoX2JhY2socG93ZXIrMSk7Ci0gIH07Ci0KLSAgc3RkOjpzdHJpbmcgczsKLSAgZm9yIChp
bnQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyBpKyspIHsKLSAgICBQdXRWYXJpbnQ2NCgmcywg
dmFsdWVzW2ldKTsKLSAgfQotCi0gIGNvbnN0IGNoYXIqIHAgPSBzLmRhdGEoKTsKLSAgY29uc3Qg
Y2hhciogbGltaXQgPSBwICsgcy5zaXplKCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVz
LnNpemUoKTsgaSsrKSB7Ci0gICAgQVNTRVJUX1RSVUUocCA8IGxpbWl0KTsKLSAgICB1aW50NjRf
dCBhY3R1YWw7Ci0gICAgY29uc3QgY2hhciogc3RhcnQgPSBwOwotICAgIHAgPSBHZXRWYXJpbnQ2
NFB0cihwLCBsaW1pdCwgJmFjdHVhbCk7Ci0gICAgQVNTRVJUX1RSVUUocCAhPSBOVUxMKTsKLSAg
ICBBU1NFUlRfRVEodmFsdWVzW2ldLCBhY3R1YWwpOwotICAgIEFTU0VSVF9FUShWYXJpbnRMZW5n
dGgoYWN0dWFsKSwgcCAtIHN0YXJ0KTsKLSAgfQotICBBU1NFUlRfRVEocCwgbGltaXQpOwotCi19
Ci0KLVRFU1QoQ29kaW5nLCBWYXJpbnQzMk92ZXJmbG93KSB7Ci0gIHVpbnQzMl90IHJlc3VsdDsK
LSAgc3RkOjpzdHJpbmcgaW5wdXQoIlx4ODFceDgyXHg4M1x4ODRceDg1XHgxMSIpOwotICBBU1NF
UlRfVFJVRShHZXRWYXJpbnQzMlB0cihpbnB1dC5kYXRhKCksIGlucHV0LmRhdGEoKSArIGlucHV0
LnNpemUoKSwgJnJlc3VsdCkKLSAgICAgICAgICAgICAgPT0gTlVMTCk7Ci19Ci0KLVRFU1QoQ29k
aW5nLCBWYXJpbnQzMlRydW5jYXRpb24pIHsKLSAgdWludDMyX3QgbGFyZ2VfdmFsdWUgPSAoMXUg
PDwgMzEpICsgMTAwOwotICBzdGQ6OnN0cmluZyBzOwotICBQdXRWYXJpbnQzMigmcywgbGFyZ2Vf
dmFsdWUpOwotICB1aW50MzJfdCByZXN1bHQ7Ci0gIGZvciAoaW50IGxlbiA9IDA7IGxlbiA8IHMu
c2l6ZSgpIC0gMTsgbGVuKyspIHsKLSAgICBBU1NFUlRfVFJVRShHZXRWYXJpbnQzMlB0cihzLmRh
dGEoKSwgcy5kYXRhKCkgKyBsZW4sICZyZXN1bHQpID09IE5VTEwpOwotICB9Ci0gIEFTU0VSVF9U
UlVFKEdldFZhcmludDMyUHRyKHMuZGF0YSgpLCBzLmRhdGEoKSArIHMuc2l6ZSgpLCAmcmVzdWx0
KSAhPSBOVUxMKTsKLSAgQVNTRVJUX0VRKGxhcmdlX3ZhbHVlLCByZXN1bHQpOwotfQotCi1URVNU
KENvZGluZywgVmFyaW50NjRPdmVyZmxvdykgewotICB1aW50NjRfdCByZXN1bHQ7Ci0gIHN0ZDo6
c3RyaW5nIGlucHV0KCJceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODFceDgyXHg4M1x4ODRceDg1XHgx
MSIpOwotICBBU1NFUlRfVFJVRShHZXRWYXJpbnQ2NFB0cihpbnB1dC5kYXRhKCksIGlucHV0LmRh
dGEoKSArIGlucHV0LnNpemUoKSwgJnJlc3VsdCkKLSAgICAgICAgICAgICAgPT0gTlVMTCk7Ci19
Ci0KLVRFU1QoQ29kaW5nLCBWYXJpbnQ2NFRydW5jYXRpb24pIHsKLSAgdWludDY0X3QgbGFyZ2Vf
dmFsdWUgPSAoMXVsbCA8PCA2MykgKyAxMDB1bGw7Ci0gIHN0ZDo6c3RyaW5nIHM7Ci0gIFB1dFZh
cmludDY0KCZzLCBsYXJnZV92YWx1ZSk7Ci0gIHVpbnQ2NF90IHJlc3VsdDsKLSAgZm9yIChpbnQg
bGVuID0gMDsgbGVuIDwgcy5zaXplKCkgLSAxOyBsZW4rKykgewotICAgIEFTU0VSVF9UUlVFKEdl
dFZhcmludDY0UHRyKHMuZGF0YSgpLCBzLmRhdGEoKSArIGxlbiwgJnJlc3VsdCkgPT0gTlVMTCk7
Ci0gIH0KLSAgQVNTRVJUX1RSVUUoR2V0VmFyaW50NjRQdHIocy5kYXRhKCksIHMuZGF0YSgpICsg
cy5zaXplKCksICZyZXN1bHQpICE9IE5VTEwpOwotICBBU1NFUlRfRVEobGFyZ2VfdmFsdWUsIHJl
c3VsdCk7Ci19Ci0KLVRFU1QoQ29kaW5nLCBTdHJpbmdzKSB7Ci0gIHN0ZDo6c3RyaW5nIHM7Ci0g
IFB1dExlbmd0aFByZWZpeGVkU2xpY2UoJnMsIFNsaWNlKCIiKSk7Ci0gIFB1dExlbmd0aFByZWZp
eGVkU2xpY2UoJnMsIFNsaWNlKCJmb28iKSk7Ci0gIFB1dExlbmd0aFByZWZpeGVkU2xpY2UoJnMs
IFNsaWNlKCJiYXIiKSk7Ci0gIFB1dExlbmd0aFByZWZpeGVkU2xpY2UoJnMsIFNsaWNlKHN0ZDo6
c3RyaW5nKDIwMCwgJ3gnKSkpOwotCi0gIFNsaWNlIGlucHV0KHMpOwotICBTbGljZSB2OwotICBB
U1NFUlRfVFJVRShHZXRMZW5ndGhQcmVmaXhlZFNsaWNlKCZpbnB1dCwgJnYpKTsKLSAgQVNTRVJU
X0VRKCIiLCB2LlRvU3RyaW5nKCkpOwotICBBU1NFUlRfVFJVRShHZXRMZW5ndGhQcmVmaXhlZFNs
aWNlKCZpbnB1dCwgJnYpKTsKLSAgQVNTRVJUX0VRKCJmb28iLCB2LlRvU3RyaW5nKCkpOwotICBB
U1NFUlRfVFJVRShHZXRMZW5ndGhQcmVmaXhlZFNsaWNlKCZpbnB1dCwgJnYpKTsKLSAgQVNTRVJU
X0VRKCJiYXIiLCB2LlRvU3RyaW5nKCkpOwotICBBU1NFUlRfVFJVRShHZXRMZW5ndGhQcmVmaXhl
ZFNsaWNlKCZpbnB1dCwgJnYpKTsKLSAgQVNTRVJUX0VRKHN0ZDo6c3RyaW5nKDIwMCwgJ3gnKSwg
di5Ub1N0cmluZygpKTsKLSAgQVNTRVJUX0VRKCIiLCBpbnB1dC5Ub1N0cmluZygpKTsKLX0KLQot
fSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2
KSB7Ci0gIHJldHVybiBsZXZlbGRiOjp0ZXN0OjpSdW5BbGxUZXN0cygpOwotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2NvbXBhcmF0b3IuY2MgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvY29tcGFyYXRvci5jYwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNGI3YjU3Mi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZl
bGRiL3V0aWwvY29tcGFyYXRvci5jYworKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8v
IENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2Vl
IHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KLQotI2luY2x1ZGUg
PGFsZ29yaXRobT4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlICJsZXZlbGRiL2NvbXBh
cmF0b3IuaCIKLSNpbmNsdWRlICJsZXZlbGRiL3NsaWNlLmgiCi0jaW5jbHVkZSAicG9ydC9wb3J0
LmgiCi0jaW5jbHVkZSAidXRpbC9sb2dnaW5nLmgiCi0KLW5hbWVzcGFjZSBsZXZlbGRiIHsKLQot
Q29tcGFyYXRvcjo6fkNvbXBhcmF0b3IoKSB7IH0KLQotbmFtZXNwYWNlIHsKLWNsYXNzIEJ5dGV3
aXNlQ29tcGFyYXRvckltcGwgOiBwdWJsaWMgQ29tcGFyYXRvciB7Ci0gcHVibGljOgotICBCeXRl
d2lzZUNvbXBhcmF0b3JJbXBsKCkgeyB9Ci0KLSAgdmlydHVhbCBjb25zdCBjaGFyKiBOYW1lKCkg
Y29uc3QgewotICAgIHJldHVybiAibGV2ZWxkYi5CeXRld2lzZUNvbXBhcmF0b3IiOwotICB9Ci0K
LSAgdmlydHVhbCBpbnQgQ29tcGFyZShjb25zdCBTbGljZSYgYSwgY29uc3QgU2xpY2UmIGIpIGNv
bnN0IHsKLSAgICByZXR1cm4gYS5jb21wYXJlKGIpOwotICB9Ci0KLSAgdmlydHVhbCB2b2lkIEZp
bmRTaG9ydGVzdFNlcGFyYXRvcigKLSAgICAgIHN0ZDo6c3RyaW5nKiBzdGFydCwKLSAgICAgIGNv
bnN0IFNsaWNlJiBsaW1pdCkgY29uc3QgewotICAgIC8vIEZpbmQgbGVuZ3RoIG9mIGNvbW1vbiBw
cmVmaXgKLSAgICBzaXplX3QgbWluX2xlbmd0aCA9IHN0ZDo6bWluKHN0YXJ0LT5zaXplKCksIGxp
bWl0LnNpemUoKSk7Ci0gICAgc2l6ZV90IGRpZmZfaW5kZXggPSAwOwotICAgIHdoaWxlICgoZGlm
Zl9pbmRleCA8IG1pbl9sZW5ndGgpICYmCi0gICAgICAgICAgICgoKnN0YXJ0KVtkaWZmX2luZGV4
XSA9PSBsaW1pdFtkaWZmX2luZGV4XSkpIHsKLSAgICAgIGRpZmZfaW5kZXgrKzsKLSAgICB9Ci0K
LSAgICBpZiAoZGlmZl9pbmRleCA+PSBtaW5fbGVuZ3RoKSB7Ci0gICAgICAvLyBEbyBub3Qgc2hv
cnRlbiBpZiBvbmUgc3RyaW5nIGlzIGEgcHJlZml4IG9mIHRoZSBvdGhlcgotICAgIH0gZWxzZSB7
Ci0gICAgICB1aW50OF90IGRpZmZfYnl0ZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KCgqc3RhcnQp
W2RpZmZfaW5kZXhdKTsKLSAgICAgIGlmIChkaWZmX2J5dGUgPCBzdGF0aWNfY2FzdDx1aW50OF90
PigweGZmKSAmJgotICAgICAgICAgIGRpZmZfYnl0ZSArIDEgPCBzdGF0aWNfY2FzdDx1aW50OF90
PihsaW1pdFtkaWZmX2luZGV4XSkpIHsKLSAgICAgICAgKCpzdGFydClbZGlmZl9pbmRleF0rKzsK
LSAgICAgICAgc3RhcnQtPnJlc2l6ZShkaWZmX2luZGV4ICsgMSk7Ci0gICAgICAgIGFzc2VydChD
b21wYXJlKCpzdGFydCwgbGltaXQpIDwgMCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgdmly
dHVhbCB2b2lkIEZpbmRTaG9ydFN1Y2Nlc3NvcihzdGQ6OnN0cmluZyoga2V5KSBjb25zdCB7Ci0g
ICAgLy8gRmluZCBmaXJzdCBjaGFyYWN0ZXIgdGhhdCBjYW4gYmUgaW5jcmVtZW50ZWQKLSAgICBz
aXplX3QgbiA9IGtleS0+c2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgaSsr
KSB7Ci0gICAgICBjb25zdCB1aW50OF90IGJ5dGUgPSAoKmtleSlbaV07Ci0gICAgICBpZiAoYnl0
ZSAhPSBzdGF0aWNfY2FzdDx1aW50OF90PigweGZmKSkgewotICAgICAgICAoKmtleSlbaV0gPSBi
eXRlICsgMTsKLSAgICAgICAga2V5LT5yZXNpemUoaSsxKTsKLSAgICAgICAgcmV0dXJuOwotICAg
ICAgfQotICAgIH0KLSAgICAvLyAqa2V5IGlzIGEgcnVuIG9mIDB4ZmZzLiAgTGVhdmUgaXQgYWxv
bmUuCi0gIH0KLX07Ci19ICAvLyBuYW1lc3BhY2UKLQotc3RhdGljIHBvcnQ6Ok9uY2VUeXBlIG9u
Y2UgPSBMRVZFTERCX09OQ0VfSU5JVDsKLXN0YXRpYyBjb25zdCBDb21wYXJhdG9yKiBieXRld2lz
ZTsKLQotc3RhdGljIHZvaWQgSW5pdE1vZHVsZSgpIHsKLSAgYnl0ZXdpc2UgPSBuZXcgQnl0ZXdp
c2VDb21wYXJhdG9ySW1wbDsKLX0KLQotY29uc3QgQ29tcGFyYXRvciogQnl0ZXdpc2VDb21wYXJh
dG9yKCkgewotICBwb3J0OjpJbml0T25jZSgmb25jZSwgSW5pdE1vZHVsZSk7Ci0gIHJldHVybiBi
eXRld2lzZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9jcmMzMmMuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
ZXZlbGRiL3V0aWwvY3JjMzJjLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGI5
ZTc3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9jcmMzMmMu
Y2MKKysrIC9kZXYvbnVsbApAQCAtMSwzMzIgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEx
IFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBm
b3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgotLy8KLS8vIEEgcG9ydGFibGUgaW1wbGVtZW50YXRp
b24gb2YgY3JjMzJjLCBvcHRpbWl6ZWQgdG8gaGFuZGxlCi0vLyBmb3VyIGJ5dGVzIGF0IGEgdGlt
ZS4KLQotI2luY2x1ZGUgInV0aWwvY3JjMzJjLmgiCi0KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNp
bmNsdWRlICJ1dGlsL2NvZGluZy5oIgotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7Ci1uYW1lc3BhY2Ug
Y3JjMzJjIHsKLQotc3RhdGljIGNvbnN0IHVpbnQzMl90IHRhYmxlMF9bMjU2XSA9IHsKLSAgMHgw
MDAwMDAwMCwgMHhmMjZiODMwMywgMHhlMTNiNzBmNywgMHgxMzUwZjNmNCwKLSAgMHhjNzlhOTcx
ZiwgMHgzNWYxMTQxYywgMHgyNmExZTdlOCwgMHhkNGNhNjRlYiwKLSAgMHg4YWQ5NThjZiwgMHg3
OGIyZGJjYywgMHg2YmUyMjgzOCwgMHg5OTg5YWIzYiwKLSAgMHg0ZDQzY2ZkMCwgMHhiZjI4NGNk
MywgMHhhYzc4YmYyNywgMHg1ZTEzM2MyNCwKLSAgMHgxMDVlYzc2ZiwgMHhlMjM1NDQ2YywgMHhm
MTY1Yjc5OCwgMHgwMzBlMzQ5YiwKLSAgMHhkN2M0NTA3MCwgMHgyNWFmZDM3MywgMHgzNmZmMjA4
NywgMHhjNDk0YTM4NCwKLSAgMHg5YTg3OWZhMCwgMHg2OGVjMWNhMywgMHg3YmJjZWY1NywgMHg4
OWQ3NmM1NCwKLSAgMHg1ZDFkMDhiZiwgMHhhZjc2OGJiYywgMHhiYzI2Nzg0OCwgMHg0ZTRkZmI0
YiwKLSAgMHgyMGJkOGVkZSwgMHhkMmQ2MGRkZCwgMHhjMTg2ZmUyOSwgMHgzM2VkN2QyYSwKLSAg
MHhlNzI3MTljMSwgMHgxNTRjOWFjMiwgMHgwNjFjNjkzNiwgMHhmNDc3ZWEzNSwKLSAgMHhhYTY0
ZDYxMSwgMHg1ODBmNTUxMiwgMHg0YjVmYTZlNiwgMHhiOTM0MjVlNSwKLSAgMHg2ZGZlNDEwZSwg
MHg5Zjk1YzIwZCwgMHg4Y2M1MzFmOSwgMHg3ZWFlYjJmYSwKLSAgMHgzMGUzNDliMSwgMHhjMjg4
Y2FiMiwgMHhkMWQ4Mzk0NiwgMHgyM2IzYmE0NSwKLSAgMHhmNzc5ZGVhZSwgMHgwNTEyNWRhZCwg
MHgxNjQyYWU1OSwgMHhlNDI5MmQ1YSwKLSAgMHhiYTNhMTE3ZSwgMHg0ODUxOTI3ZCwgMHg1YjAx
NjE4OSwgMHhhOTZhZTI4YSwKLSAgMHg3ZGEwODY2MSwgMHg4ZmNiMDU2MiwgMHg5YzliZjY5Niwg
MHg2ZWYwNzU5NSwKLSAgMHg0MTdiMWRiYywgMHhiMzEwOWViZiwgMHhhMDQwNmQ0YiwgMHg1MjJi
ZWU0OCwKLSAgMHg4NmUxOGFhMywgMHg3NDhhMDlhMCwgMHg2N2RhZmE1NCwgMHg5NWIxNzk1NywK
LSAgMHhjYmEyNDU3MywgMHgzOWM5YzY3MCwgMHgyYTk5MzU4NCwgMHhkOGYyYjY4NywKLSAgMHgw
YzM4ZDI2YywgMHhmZTUzNTE2ZiwgMHhlZDAzYTI5YiwgMHgxZjY4MjE5OCwKLSAgMHg1MTI1ZGFk
MywgMHhhMzRlNTlkMCwgMHhiMDFlYWEyNCwgMHg0Mjc1MjkyNywKLSAgMHg5NmJmNGRjYywgMHg2
NGQ0Y2VjZiwgMHg3Nzg0M2QzYiwgMHg4NWVmYmUzOCwKLSAgMHhkYmZjODIxYywgMHgyOTk3MDEx
ZiwgMHgzYWM3ZjJlYiwgMHhjOGFjNzFlOCwKLSAgMHgxYzY2MTUwMywgMHhlZTBkOTYwMCwgMHhm
ZDVkNjVmNCwgMHgwZjM2ZTZmNywKLSAgMHg2MWM2OTM2MiwgMHg5M2FkMTA2MSwgMHg4MGZkZTM5
NSwgMHg3Mjk2NjA5NiwKLSAgMHhhNjVjMDQ3ZCwgMHg1NDM3ODc3ZSwgMHg0NzY3NzQ4YSwgMHhi
NTBjZjc4OSwKLSAgMHhlYjFmY2JhZCwgMHgxOTc0NDhhZSwgMHgwYTI0YmI1YSwgMHhmODRmMzg1
OSwKLSAgMHgyYzg1NWNiMiwgMHhkZWVlZGZiMSwgMHhjZGJlMmM0NSwgMHgzZmQ1YWY0NiwKLSAg
MHg3MTk4NTQwZCwgMHg4M2YzZDcwZSwgMHg5MGEzMjRmYSwgMHg2MmM4YTdmOSwKLSAgMHhiNjAy
YzMxMiwgMHg0NDY5NDAxMSwgMHg1NzM5YjNlNSwgMHhhNTUyMzBlNiwKLSAgMHhmYjQxMGNjMiwg
MHgwOTJhOGZjMSwgMHgxYTdhN2MzNSwgMHhlODExZmYzNiwKLSAgMHgzY2RiOWJkZCwgMHhjZWIw
MThkZSwgMHhkZGUwZWIyYSwgMHgyZjhiNjgyOSwKLSAgMHg4MmY2M2I3OCwgMHg3MDlkYjg3Yiwg
MHg2M2NkNGI4ZiwgMHg5MWE2Yzg4YywKLSAgMHg0NTZjYWM2NywgMHhiNzA3MmY2NCwgMHhhNDU3
ZGM5MCwgMHg1NjNjNWY5MywKLSAgMHgwODJmNjNiNywgMHhmYTQ0ZTBiNCwgMHhlOTE0MTM0MCwg
MHgxYjdmOTA0MywKLSAgMHhjZmI1ZjRhOCwgMHgzZGRlNzdhYiwgMHgyZThlODQ1ZiwgMHhkY2U1
MDc1YywKLSAgMHg5MmE4ZmMxNywgMHg2MGMzN2YxNCwgMHg3MzkzOGNlMCwgMHg4MWY4MGZlMywK
LSAgMHg1NTMyNmIwOCwgMHhhNzU5ZTgwYiwgMHhiNDA5MWJmZiwgMHg0NjYyOThmYywKLSAgMHgx
ODcxYTRkOCwgMHhlYTFhMjdkYiwgMHhmOTRhZDQyZiwgMHgwYjIxNTcyYywKLSAgMHhkZmViMzNj
NywgMHgyZDgwYjBjNCwgMHgzZWQwNDMzMCwgMHhjY2JiYzAzMywKLSAgMHhhMjRiYjVhNiwgMHg1
MDIwMzZhNSwgMHg0MzcwYzU1MSwgMHhiMTFiNDY1MiwKLSAgMHg2NWQxMjJiOSwgMHg5N2JhYTFi
YSwgMHg4NGVhNTI0ZSwgMHg3NjgxZDE0ZCwKLSAgMHgyODkyZWQ2OSwgMHhkYWY5NmU2YSwgMHhj
OWE5OWQ5ZSwgMHgzYmMyMWU5ZCwKLSAgMHhlZjA4N2E3NiwgMHgxZDYzZjk3NSwgMHgwZTMzMGE4
MSwgMHhmYzU4ODk4MiwKLSAgMHhiMjE1NzJjOSwgMHg0MDdlZjFjYSwgMHg1MzJlMDIzZSwgMHhh
MTQ1ODEzZCwKLSAgMHg3NThmZTVkNiwgMHg4N2U0NjZkNSwgMHg5NGI0OTUyMSwgMHg2NmRmMTYy
MiwKLSAgMHgzOGNjMmEwNiwgMHhjYWE3YTkwNSwgMHhkOWY3NWFmMSwgMHgyYjljZDlmMiwKLSAg
MHhmZjU2YmQxOSwgMHgwZDNkM2UxYSwgMHgxZTZkY2RlZSwgMHhlYzA2NGVlZCwKLSAgMHhjMzhk
MjZjNCwgMHgzMWU2YTVjNywgMHgyMmI2NTYzMywgMHhkMGRkZDUzMCwKLSAgMHgwNDE3YjFkYiwg
MHhmNjdjMzJkOCwgMHhlNTJjYzEyYywgMHgxNzQ3NDIyZiwKLSAgMHg0OTU0N2UwYiwgMHhiYjNm
ZmQwOCwgMHhhODZmMGVmYywgMHg1YTA0OGRmZiwKLSAgMHg4ZWNlZTkxNCwgMHg3Y2E1NmExNywg
MHg2ZmY1OTllMywgMHg5ZDllMWFlMCwKLSAgMHhkM2QzZTFhYiwgMHgyMWI4NjJhOCwgMHgzMmU4
OTE1YywgMHhjMDgzMTI1ZiwKLSAgMHgxNDQ5NzZiNCwgMHhlNjIyZjViNywgMHhmNTcyMDY0Mywg
MHgwNzE5ODU0MCwKLSAgMHg1OTBhYjk2NCwgMHhhYjYxM2E2NywgMHhiODMxYzk5MywgMHg0YTVh
NGE5MCwKLSAgMHg5ZTkwMmU3YiwgMHg2Y2ZiYWQ3OCwgMHg3ZmFiNWU4YywgMHg4ZGMwZGQ4ZiwK
LSAgMHhlMzMwYTgxYSwgMHgxMTViMmIxOSwgMHgwMjBiZDhlZCwgMHhmMDYwNWJlZSwKLSAgMHgy
NGFhM2YwNSwgMHhkNmMxYmMwNiwgMHhjNTkxNGZmMiwgMHgzN2ZhY2NmMSwKLSAgMHg2OWU5ZjBk
NSwgMHg5YjgyNzNkNiwgMHg4OGQyODAyMiwgMHg3YWI5MDMyMSwKLSAgMHhhZTczNjdjYSwgMHg1
YzE4ZTRjOSwgMHg0ZjQ4MTczZCwgMHhiZDIzOTQzZSwKLSAgMHhmMzZlNmY3NSwgMHgwMTA1ZWM3
NiwgMHgxMjU1MWY4MiwgMHhlMDNlOWM4MSwKLSAgMHgzNGY0Zjg2YSwgMHhjNjlmN2I2OSwgMHhk
NWNmODg5ZCwgMHgyN2E0MGI5ZSwKLSAgMHg3OWI3MzdiYSwgMHg4YmRjYjRiOSwgMHg5ODhjNDc0
ZCwgMHg2YWU3YzQ0ZSwKLSAgMHhiZTJkYTBhNSwgMHg0YzQ2MjNhNiwgMHg1ZjE2ZDA1MiwgMHhh
ZDdkNTM1MQotfTsKLXN0YXRpYyBjb25zdCB1aW50MzJfdCB0YWJsZTFfWzI1Nl0gPSB7Ci0gIDB4
MDAwMDAwMDAsIDB4MTNhMjk4NzcsIDB4Mjc0NTMwZWUsIDB4MzRlN2E4OTksCi0gIDB4NGU4YTYx
ZGMsIDB4NWQyOGY5YWIsIDB4NjljZjUxMzIsIDB4N2E2ZGM5NDUsCi0gIDB4OWQxNGMzYjgsIDB4
OGViNjViY2YsIDB4YmE1MWYzNTYsIDB4YTlmMzZiMjEsCi0gIDB4ZDM5ZWEyNjQsIDB4YzAzYzNh
MTMsIDB4ZjRkYjkyOGEsIDB4ZTc3OTBhZmQsCi0gIDB4M2ZjNWYxODEsIDB4MmM2NzY5ZjYsIDB4
MTg4MGMxNmYsIDB4MGIyMjU5MTgsCi0gIDB4NzE0ZjkwNWQsIDB4NjJlZDA4MmEsIDB4NTYwYWEw
YjMsIDB4NDVhODM4YzQsCi0gIDB4YTJkMTMyMzksIDB4YjE3M2FhNGUsIDB4ODU5NDAyZDcsIDB4
OTYzNjlhYTAsCi0gIDB4ZWM1YjUzZTUsIDB4ZmZmOWNiOTIsIDB4Y2IxZTYzMGIsIDB4ZDhiY2Zi
N2MsCi0gIDB4N2Y4YmUzMDIsIDB4NmMyOTdiNzUsIDB4NThjZWQzZWMsIDB4NGI2YzRiOWIsCi0g
IDB4MzEwMTgyZGUsIDB4MjJhMzFhYTksIDB4MTY0NGIyMzAsIDB4MDVlNjJhNDcsCi0gIDB4ZTI5
ZjIwYmEsIDB4ZjEzZGI4Y2QsIDB4YzVkYTEwNTQsIDB4ZDY3ODg4MjMsCi0gIDB4YWMxNTQxNjYs
IDB4YmZiN2Q5MTEsIDB4OGI1MDcxODgsIDB4OThmMmU5ZmYsCi0gIDB4NDA0ZTEyODMsIDB4NTNl
YzhhZjQsIDB4NjcwYjIyNmQsIDB4NzRhOWJhMWEsCi0gIDB4MGVjNDczNWYsIDB4MWQ2NmViMjgs
IDB4Mjk4MTQzYjEsIDB4M2EyM2RiYzYsCi0gIDB4ZGQ1YWQxM2IsIDB4Y2VmODQ5NGMsIDB4ZmEx
ZmUxZDUsIDB4ZTliZDc5YTIsCi0gIDB4OTNkMGIwZTcsIDB4ODA3MjI4OTAsIDB4YjQ5NTgwMDks
IDB4YTczNzE4N2UsCi0gIDB4ZmYxN2M2MDQsIDB4ZWNiNTVlNzMsIDB4ZDg1MmY2ZWEsIDB4Y2Jm
MDZlOWQsCi0gIDB4YjE5ZGE3ZDgsIDB4YTIzZjNmYWYsIDB4OTZkODk3MzYsIDB4ODU3YTBmNDEs
Ci0gIDB4NjIwMzA1YmMsIDB4NzFhMTlkY2IsIDB4NDU0NjM1NTIsIDB4NTZlNGFkMjUsCi0gIDB4
MmM4OTY0NjAsIDB4M2YyYmZjMTcsIDB4MGJjYzU0OGUsIDB4MTg2ZWNjZjksCi0gIDB4YzBkMjM3
ODUsIDB4ZDM3MGFmZjIsIDB4ZTc5NzA3NmIsIDB4ZjQzNTlmMWMsCi0gIDB4OGU1ODU2NTksIDB4
OWRmYWNlMmUsIDB4YTkxZDY2YjcsIDB4YmFiZmZlYzAsCi0gIDB4NWRjNmY0M2QsIDB4NGU2NDZj
NGEsIDB4N2E4M2M0ZDMsIDB4NjkyMTVjYTQsCi0gIDB4MTM0Yzk1ZTEsIDB4MDBlZTBkOTYsIDB4
MzQwOWE1MGYsIDB4MjdhYjNkNzgsCi0gIDB4ODA5YzI1MDYsIDB4OTMzZWJkNzEsIDB4YTdkOTE1
ZTgsIDB4YjQ3YjhkOWYsCi0gIDB4Y2UxNjQ0ZGEsIDB4ZGRiNGRjYWQsIDB4ZTk1Mzc0MzQsIDB4
ZmFmMWVjNDMsCi0gIDB4MWQ4OGU2YmUsIDB4MGUyYTdlYzksIDB4M2FjZGQ2NTAsIDB4Mjk2ZjRl
MjcsCi0gIDB4NTMwMjg3NjIsIDB4NDBhMDFmMTUsIDB4NzQ0N2I3OGMsIDB4NjdlNTJmZmIsCi0g
IDB4YmY1OWQ0ODcsIDB4YWNmYjRjZjAsIDB4OTgxY2U0NjksIDB4OGJiZTdjMWUsCi0gIDB4ZjFk
M2I1NWIsIDB4ZTI3MTJkMmMsIDB4ZDY5Njg1YjUsIDB4YzUzNDFkYzIsCi0gIDB4MjI0ZDE3M2Ys
IDB4MzFlZjhmNDgsIDB4MDUwODI3ZDEsIDB4MTZhYWJmYTYsCi0gIDB4NmNjNzc2ZTMsIDB4N2Y2
NWVlOTQsIDB4NGI4MjQ2MGQsIDB4NTgyMGRlN2EsCi0gIDB4ZmJjM2ZhZjksIDB4ZTg2MTYyOGUs
IDB4ZGM4NmNhMTcsIDB4Y2YyNDUyNjAsCi0gIDB4YjU0OTliMjUsIDB4YTZlYjAzNTIsIDB4OTIw
Y2FiY2IsIDB4ODFhZTMzYmMsCi0gIDB4NjZkNzM5NDEsIDB4NzU3NWExMzYsIDB4NDE5MjA5YWYs
IDB4NTIzMDkxZDgsCi0gIDB4Mjg1ZDU4OWQsIDB4M2JmZmMwZWEsIDB4MGYxODY4NzMsIDB4MWNi
YWYwMDQsCi0gIDB4YzQwNjBiNzgsIDB4ZDdhNDkzMGYsIDB4ZTM0MzNiOTYsIDB4ZjBlMWEzZTEs
Ci0gIDB4OGE4YzZhYTQsIDB4OTkyZWYyZDMsIDB4YWRjOTVhNGEsIDB4YmU2YmMyM2QsCi0gIDB4
NTkxMmM4YzAsIDB4NGFiMDUwYjcsIDB4N2U1N2Y4MmUsIDB4NmRmNTYwNTksCi0gIDB4MTc5OGE5
MWMsIDB4MDQzYTMxNmIsIDB4MzBkZDk5ZjIsIDB4MjM3ZjAxODUsCi0gIDB4ODQ0ODE5ZmIsIDB4
OTdlYTgxOGMsIDB4YTMwZDI5MTUsIDB4YjBhZmIxNjIsCi0gIDB4Y2FjMjc4MjcsIDB4ZDk2MGUw
NTAsIDB4ZWQ4NzQ4YzksIDB4ZmUyNWQwYmUsCi0gIDB4MTk1Y2RhNDMsIDB4MGFmZTQyMzQsIDB4
M2UxOWVhYWQsIDB4MmRiYjcyZGEsCi0gIDB4NTdkNmJiOWYsIDB4NDQ3NDIzZTgsIDB4NzA5Mzhi
NzEsIDB4NjMzMTEzMDYsCi0gIDB4YmI4ZGU4N2EsIDB4YTgyZjcwMGQsIDB4OWNjOGQ4OTQsIDB4
OGY2YTQwZTMsCi0gIDB4ZjUwNzg5YTYsIDB4ZTZhNTExZDEsIDB4ZDI0MmI5NDgsIDB4YzFlMDIx
M2YsCi0gIDB4MjY5OTJiYzIsIDB4MzUzYmIzYjUsIDB4MDFkYzFiMmMsIDB4MTI3ZTgzNWIsCi0g
IDB4NjgxMzRhMWUsIDB4N2JiMWQyNjksIDB4NGY1NjdhZjAsIDB4NWNmNGUyODcsCi0gIDB4MDRk
NDNjZmQsIDB4MTc3NmE0OGEsIDB4MjM5MTBjMTMsIDB4MzAzMzk0NjQsCi0gIDB4NGE1ZTVkMjEs
IDB4NTlmY2M1NTYsIDB4NmQxYjZkY2YsIDB4N2ViOWY1YjgsCi0gIDB4OTljMGZmNDUsIDB4OGE2
MjY3MzIsIDB4YmU4NWNmYWIsIDB4YWQyNzU3ZGMsCi0gIDB4ZDc0YTllOTksIDB4YzRlODA2ZWUs
IDB4ZjAwZmFlNzcsIDB4ZTNhZDM2MDAsCi0gIDB4M2IxMWNkN2MsIDB4MjhiMzU1MGIsIDB4MWM1
NGZkOTIsIDB4MGZmNjY1ZTUsCi0gIDB4NzU5YmFjYTAsIDB4NjYzOTM0ZDcsIDB4NTJkZTljNGUs
IDB4NDE3YzA0MzksCi0gIDB4YTYwNTBlYzQsIDB4YjVhNzk2YjMsIDB4ODE0MDNlMmEsIDB4OTJl
MmE2NWQsCi0gIDB4ZTg4ZjZmMTgsIDB4ZmIyZGY3NmYsIDB4Y2ZjYTVmZjYsIDB4ZGM2OGM3ODEs
Ci0gIDB4N2I1ZmRmZmYsIDB4NjhmZDQ3ODgsIDB4NWMxYWVmMTEsIDB4NGZiODc3NjYsCi0gIDB4
MzVkNWJlMjMsIDB4MjY3NzI2NTQsIDB4MTI5MDhlY2QsIDB4MDEzMjE2YmEsCi0gIDB4ZTY0YjFj
NDcsIDB4ZjVlOTg0MzAsIDB4YzEwZTJjYTksIDB4ZDJhY2I0ZGUsCi0gIDB4YThjMTdkOWIsIDB4
YmI2M2U1ZWMsIDB4OGY4NDRkNzUsIDB4OWMyNmQ1MDIsCi0gIDB4NDQ5YTJlN2UsIDB4NTczOGI2
MDksIDB4NjNkZjFlOTAsIDB4NzA3ZDg2ZTcsCi0gIDB4MGExMDRmYTIsIDB4MTliMmQ3ZDUsIDB4
MmQ1NTdmNGMsIDB4M2VmN2U3M2IsCi0gIDB4ZDk4ZWVkYzYsIDB4Y2EyYzc1YjEsIDB4ZmVjYmRk
MjgsIDB4ZWQ2OTQ1NWYsCi0gIDB4OTcwNDhjMWEsIDB4ODRhNjE0NmQsIDB4YjA0MWJjZjQsIDB4
YTNlMzI0ODMKLX07Ci1zdGF0aWMgY29uc3QgdWludDMyX3QgdGFibGUyX1syNTZdID0gewotICAw
eDAwMDAwMDAwLCAweGE1NDE5MjdlLCAweDRmNmY1MjBkLCAweGVhMmVjMDczLAotICAweDllZGVh
NDFhLCAweDNiOWYzNjY0LCAweGQxYjFmNjE3LCAweDc0ZjA2NDY5LAotICAweDM4NTEzZWM1LCAw
eDlkMTBhY2JiLCAweDc3M2U2Y2M4LCAweGQyN2ZmZWI2LAotICAweGE2OGY5YWRmLCAweDAzY2Uw
OGExLCAweGU5ZTBjOGQyLCAweDRjYTE1YWFjLAotICAweDcwYTI3ZDhhLCAweGQ1ZTNlZmY0LCAw
eDNmY2QyZjg3LCAweDlhOGNiZGY5LAotICAweGVlN2NkOTkwLCAweDRiM2Q0YmVlLCAweGExMTM4
YjlkLCAweDA0NTIxOWUzLAotICAweDQ4ZjM0MzRmLCAweGVkYjJkMTMxLCAweDA3OWMxMTQyLCAw
eGEyZGQ4MzNjLAotICAweGQ2MmRlNzU1LCAweDczNmM3NTJiLCAweDk5NDJiNTU4LCAweDNjMDMy
NzI2LAotICAweGUxNDRmYjE0LCAweDQ0MDU2OTZhLCAweGFlMmJhOTE5LCAweDBiNmEzYjY3LAot
ICAweDdmOWE1ZjBlLCAweGRhZGJjZDcwLCAweDMwZjUwZDAzLCAweDk1YjQ5ZjdkLAotICAweGQ5
MTVjNWQxLCAweDdjNTQ1N2FmLCAweDk2N2E5N2RjLCAweDMzM2IwNWEyLAotICAweDQ3Y2I2MWNi
LCAweGUyOGFmM2I1LCAweDA4YTQzM2M2LCAweGFkZTVhMWI4LAotICAweDkxZTY4NjllLCAweDM0
YTcxNGUwLCAweGRlODlkNDkzLCAweDdiYzg0NmVkLAotICAweDBmMzgyMjg0LCAweGFhNzliMGZh
LCAweDQwNTc3MDg5LCAweGU1MTZlMmY3LAotICAweGE5YjdiODViLCAweDBjZjYyYTI1LCAweGU2
ZDhlYTU2LCAweDQzOTk3ODI4LAotICAweDM3NjkxYzQxLCAweDkyMjg4ZTNmLCAweDc4MDY0ZTRj
LCAweGRkNDdkYzMyLAotICAweGM3NjU4MGQ5LCAweDYyMjQxMmE3LCAweDg4MGFkMmQ0LCAweDJk
NGI0MGFhLAotICAweDU5YmIyNGMzLCAweGZjZmFiNmJkLCAweDE2ZDQ3NmNlLCAweGIzOTVlNGIw
LAotICAweGZmMzRiZTFjLCAweDVhNzUyYzYyLCAweGIwNWJlYzExLCAweDE1MWE3ZTZmLAotICAw
eDYxZWExYTA2LCAweGM0YWI4ODc4LCAweDJlODU0ODBiLCAweDhiYzRkYTc1LAotICAweGI3Yzdm
ZDUzLCAweDEyODY2ZjJkLCAweGY4YThhZjVlLCAweDVkZTkzZDIwLAotICAweDI5MTk1OTQ5LCAw
eDhjNThjYjM3LCAweDY2NzYwYjQ0LCAweGMzMzc5OTNhLAotICAweDhmOTZjMzk2LCAweDJhZDc1
MWU4LCAweGMwZjk5MTliLCAweDY1YjgwM2U1LAotICAweDExNDg2NzhjLCAweGI0MDlmNWYyLCAw
eDVlMjczNTgxLCAweGZiNjZhN2ZmLAotICAweDI2MjE3YmNkLCAweDgzNjBlOWIzLCAweDY5NGUy
OWMwLCAweGNjMGZiYmJlLAotICAweGI4ZmZkZmQ3LCAweDFkYmU0ZGE5LCAweGY3OTA4ZGRhLCAw
eDUyZDExZmE0LAotICAweDFlNzA0NTA4LCAweGJiMzFkNzc2LCAweDUxMWYxNzA1LCAweGY0NWU4
NTdiLAotICAweDgwYWVlMTEyLCAweDI1ZWY3MzZjLCAweGNmYzFiMzFmLCAweDZhODAyMTYxLAot
ICAweDU2ODMwNjQ3LCAweGYzYzI5NDM5LCAweDE5ZWM1NDRhLCAweGJjYWRjNjM0LAotICAweGM4
NWRhMjVkLCAweDZkMWMzMDIzLCAweDg3MzJmMDUwLCAweDIyNzM2MjJlLAotICAweDZlZDIzODgy
LCAweGNiOTNhYWZjLCAweDIxYmQ2YThmLCAweDg0ZmNmOGYxLAotICAweGYwMGM5Yzk4LCAweDU1
NGQwZWU2LCAweGJmNjNjZTk1LCAweDFhMjI1Y2ViLAotICAweDhiMjc3NzQzLCAweDJlNjZlNTNk
LCAweGM0NDgyNTRlLCAweDYxMDliNzMwLAotICAweDE1ZjlkMzU5LCAweGIwYjg0MTI3LCAweDVh
OTY4MTU0LCAweGZmZDcxMzJhLAotICAweGIzNzY0OTg2LCAweDE2MzdkYmY4LCAweGZjMTkxYjhi
LCAweDU5NTg4OWY1LAotICAweDJkYThlZDljLCAweDg4ZTk3ZmUyLCAweDYyYzdiZjkxLCAweGM3
ODYyZGVmLAotICAweGZiODUwYWM5LCAweDVlYzQ5OGI3LCAweGI0ZWE1OGM0LCAweDExYWJjYWJh
LAotICAweDY1NWJhZWQzLCAweGMwMWEzY2FkLCAweDJhMzRmY2RlLCAweDhmNzU2ZWEwLAotICAw
eGMzZDQzNDBjLCAweDY2OTVhNjcyLCAweDhjYmI2NjAxLCAweDI5ZmFmNDdmLAotICAweDVkMGE5
MDE2LCAweGY4NGIwMjY4LCAweDEyNjVjMjFiLCAweGI3MjQ1MDY1LAotICAweDZhNjM4YzU3LCAw
eGNmMjIxZTI5LCAweDI1MGNkZTVhLCAweDgwNGQ0YzI0LAotICAweGY0YmQyODRkLCAweDUxZmNi
YTMzLCAweGJiZDI3YTQwLCAweDFlOTNlODNlLAotICAweDUyMzJiMjkyLCAweGY3NzMyMGVjLCAw
eDFkNWRlMDlmLCAweGI4MWM3MmUxLAotICAweGNjZWMxNjg4LCAweDY5YWQ4NGY2LCAweDgzODM0
NDg1LCAweDI2YzJkNmZiLAotICAweDFhYzFmMWRkLCAweGJmODA2M2EzLCAweDU1YWVhM2QwLCAw
eGYwZWYzMWFlLAotICAweDg0MWY1NWM3LCAweDIxNWVjN2I5LCAweGNiNzAwN2NhLCAweDZlMzE5
NWI0LAotICAweDIyOTBjZjE4LCAweDg3ZDE1ZDY2LCAweDZkZmY5ZDE1LCAweGM4YmUwZjZiLAot
ICAweGJjNGU2YjAyLCAweDE5MGZmOTdjLCAweGYzMjEzOTBmLCAweDU2NjBhYjcxLAotICAweDRj
NDJmNzlhLCAweGU5MDM2NWU0LCAweDAzMmRhNTk3LCAweGE2NmMzN2U5LAotICAweGQyOWM1Mzgw
LCAweDc3ZGRjMWZlLCAweDlkZjMwMThkLCAweDM4YjI5M2YzLAotICAweDc0MTNjOTVmLCAweGQx
NTI1YjIxLCAweDNiN2M5YjUyLCAweDllM2QwOTJjLAotICAweGVhY2Q2ZDQ1LCAweDRmOGNmZjNi
LCAweGE1YTIzZjQ4LCAweDAwZTNhZDM2LAotICAweDNjZTA4YTEwLCAweDk5YTExODZlLCAweDcz
OGZkODFkLCAweGQ2Y2U0YTYzLAotICAweGEyM2UyZTBhLCAweDA3N2ZiYzc0LCAweGVkNTE3YzA3
LCAweDQ4MTBlZTc5LAotICAweDA0YjFiNGQ1LCAweGExZjAyNmFiLCAweDRiZGVlNmQ4LCAweGVl
OWY3NGE2LAotICAweDlhNmYxMGNmLCAweDNmMmU4MmIxLCAweGQ1MDA0MmMyLCAweDcwNDFkMGJj
LAotICAweGFkMDYwYzhlLCAweDA4NDc5ZWYwLCAweGUyNjk1ZTgzLCAweDQ3MjhjY2ZkLAotICAw
eDMzZDhhODk0LCAweDk2OTkzYWVhLCAweDdjYjdmYTk5LCAweGQ5ZjY2OGU3LAotICAweDk1NTcz
MjRiLCAweDMwMTZhMDM1LCAweGRhMzg2MDQ2LCAweDdmNzlmMjM4LAotICAweDBiODk5NjUxLCAw
eGFlYzgwNDJmLCAweDQ0ZTZjNDVjLCAweGUxYTc1NjIyLAotICAweGRkYTQ3MTA0LCAweDc4ZTVl
MzdhLCAweDkyY2IyMzA5LCAweDM3OGFiMTc3LAotICAweDQzN2FkNTFlLCAweGU2M2I0NzYwLCAw
eDBjMTU4NzEzLCAweGE5NTQxNTZkLAotICAweGU1ZjU0ZmMxLCAweDQwYjRkZGJmLCAweGFhOWEx
ZGNjLCAweDBmZGI4ZmIyLAotICAweDdiMmJlYmRiLCAweGRlNmE3OWE1LCAweDM0NDRiOWQ2LCAw
eDkxMDUyYmE4Ci19Owotc3RhdGljIGNvbnN0IHVpbnQzMl90IHRhYmxlM19bMjU2XSA9IHsKLSAg
MHgwMDAwMDAwMCwgMHhkZDQ1YWFiOCwgMHhiZjY3MjM4MSwgMHg2MjIyODkzOSwKLSAgMHg3YjIy
MzFmMywgMHhhNjY3OWI0YiwgMHhjNDQ1MTI3MiwgMHgxOTAwYjhjYSwKLSAgMHhmNjQ0NjNlNiwg
MHgyYjAxYzk1ZSwgMHg0OTIzNDA2NywgMHg5NDY2ZWFkZiwKLSAgMHg4ZDY2NTIxNSwgMHg1MDIz
ZjhhZCwgMHgzMjAxNzE5NCwgMHhlZjQ0ZGIyYywKLSAgMHhlOTY0YjEzZCwgMHgzNDIxMWI4NSwg
MHg1NjAzOTJiYywgMHg4YjQ2MzgwNCwKLSAgMHg5MjQ2ODBjZSwgMHg0ZjAzMmE3NiwgMHgyZDIx
YTM0ZiwgMHhmMDY0MDlmNywKLSAgMHgxZjIwZDJkYiwgMHhjMjY1Nzg2MywgMHhhMDQ3ZjE1YSwg
MHg3ZDAyNWJlMiwKLSAgMHg2NDAyZTMyOCwgMHhiOTQ3NDk5MCwgMHhkYjY1YzBhOSwgMHgwNjIw
NmExMSwKLSAgMHhkNzI1MTQ4YiwgMHgwYTYwYmUzMywgMHg2ODQyMzcwYSwgMHhiNTA3OWRiMiwK
LSAgMHhhYzA3MjU3OCwgMHg3MTQyOGZjMCwgMHgxMzYwMDZmOSwgMHhjZTI1YWM0MSwKLSAgMHgy
MTYxNzc2ZCwgMHhmYzI0ZGRkNSwgMHg5ZTA2NTRlYywgMHg0MzQzZmU1NCwKLSAgMHg1YTQzNDY5
ZSwgMHg4NzA2ZWMyNiwgMHhlNTI0NjUxZiwgMHgzODYxY2ZhNywKLSAgMHgzZTQxYTViNiwgMHhl
MzA0MGYwZSwgMHg4MTI2ODYzNywgMHg1YzYzMmM4ZiwKLSAgMHg0NTYzOTQ0NSwgMHg5ODI2M2Vm
ZCwgMHhmYTA0YjdjNCwgMHgyNzQxMWQ3YywKLSAgMHhjODA1YzY1MCwgMHgxNTQwNmNlOCwgMHg3
NzYyZTVkMSwgMHhhYTI3NGY2OSwKLSAgMHhiMzI3ZjdhMywgMHg2ZTYyNWQxYiwgMHgwYzQwZDQy
MiwgMHhkMTA1N2U5YSwKLSAgMHhhYmE2NWZlNywgMHg3NmUzZjU1ZiwgMHgxNGMxN2M2NiwgMHhj
OTg0ZDZkZSwKLSAgMHhkMDg0NmUxNCwgMHgwZGMxYzRhYywgMHg2ZmUzNGQ5NSwgMHhiMmE2ZTcy
ZCwKLSAgMHg1ZGUyM2MwMSwgMHg4MGE3OTZiOSwgMHhlMjg1MWY4MCwgMHgzZmMwYjUzOCwKLSAg
MHgyNmMwMGRmMiwgMHhmYjg1YTc0YSwgMHg5OWE3MmU3MywgMHg0NGUyODRjYiwKLSAgMHg0MmMy
ZWVkYSwgMHg5Zjg3NDQ2MiwgMHhmZGE1Y2Q1YiwgMHgyMGUwNjdlMywKLSAgMHgzOWUwZGYyOSwg
MHhlNGE1NzU5MSwgMHg4Njg3ZmNhOCwgMHg1YmMyNTYxMCwKLSAgMHhiNDg2OGQzYywgMHg2OWMz
Mjc4NCwgMHgwYmUxYWViZCwgMHhkNmE0MDQwNSwKLSAgMHhjZmE0YmNjZiwgMHgxMmUxMTY3Nywg
MHg3MGMzOWY0ZSwgMHhhZDg2MzVmNiwKLSAgMHg3YzgzNGI2YywgMHhhMWM2ZTFkNCwgMHhjM2U0
NjhlZCwgMHgxZWExYzI1NSwKLSAgMHgwN2ExN2E5ZiwgMHhkYWU0ZDAyNywgMHhiOGM2NTkxZSwg
MHg2NTgzZjNhNiwKLSAgMHg4YWM3Mjg4YSwgMHg1NzgyODIzMiwgMHgzNWEwMGIwYiwgMHhlOGU1
YTFiMywKLSAgMHhmMWU1MTk3OSwgMHgyY2EwYjNjMSwgMHg0ZTgyM2FmOCwgMHg5M2M3OTA0MCwK
LSAgMHg5NWU3ZmE1MSwgMHg0OGEyNTBlOSwgMHgyYTgwZDlkMCwgMHhmN2M1NzM2OCwKLSAgMHhl
ZWM1Y2JhMiwgMHgzMzgwNjExYSwgMHg1MWEyZTgyMywgMHg4Y2U3NDI5YiwKLSAgMHg2M2EzOTli
NywgMHhiZWU2MzMwZiwgMHhkY2M0YmEzNiwgMHgwMTgxMTA4ZSwKLSAgMHgxODgxYTg0NCwgMHhj
NWM0MDJmYywgMHhhN2U2OGJjNSwgMHg3YWEzMjE3ZCwKLSAgMHg1MmEwYzkzZiwgMHg4ZmU1NjM4
NywgMHhlZGM3ZWFiZSwgMHgzMDgyNDAwNiwKLSAgMHgyOTgyZjhjYywgMHhmNGM3NTI3NCwgMHg5
NmU1ZGI0ZCwgMHg0YmEwNzFmNSwKLSAgMHhhNGU0YWFkOSwgMHg3OWExMDA2MSwgMHgxYjgzODk1
OCwgMHhjNmM2MjNlMCwKLSAgMHhkZmM2OWIyYSwgMHgwMjgzMzE5MiwgMHg2MGExYjhhYiwgMHhi
ZGU0MTIxMywKLSAgMHhiYmM0NzgwMiwgMHg2NjgxZDJiYSwgMHgwNGEzNWI4MywgMHhkOWU2ZjEz
YiwKLSAgMHhjMGU2NDlmMSwgMHgxZGEzZTM0OSwgMHg3ZjgxNmE3MCwgMHhhMmM0YzBjOCwKLSAg
MHg0ZDgwMWJlNCwgMHg5MGM1YjE1YywgMHhmMmU3Mzg2NSwgMHgyZmEyOTJkZCwKLSAgMHgzNmEy
MmExNywgMHhlYmU3ODBhZiwgMHg4OWM1MDk5NiwgMHg1NDgwYTMyZSwKLSAgMHg4NTg1ZGRiNCwg
MHg1OGMwNzcwYywgMHgzYWUyZmUzNSwgMHhlN2E3NTQ4ZCwKLSAgMHhmZWE3ZWM0NywgMHgyM2Uy
NDZmZiwgMHg0MWMwY2ZjNiwgMHg5Yzg1NjU3ZSwKLSAgMHg3M2MxYmU1MiwgMHhhZTg0MTRlYSwg
MHhjY2E2OWRkMywgMHgxMWUzMzc2YiwKLSAgMHgwOGUzOGZhMSwgMHhkNWE2MjUxOSwgMHhiNzg0
YWMyMCwgMHg2YWMxMDY5OCwKLSAgMHg2Y2UxNmM4OSwgMHhiMWE0YzYzMSwgMHhkMzg2NGYwOCwg
MHgwZWMzZTViMCwKLSAgMHgxN2MzNWQ3YSwgMHhjYTg2ZjdjMiwgMHhhOGE0N2VmYiwgMHg3NWUx
ZDQ0MywKLSAgMHg5YWE1MGY2ZiwgMHg0N2UwYTVkNywgMHgyNWMyMmNlZSwgMHhmODg3ODY1NiwK
LSAgMHhlMTg3M2U5YywgMHgzY2MyOTQyNCwgMHg1ZWUwMWQxZCwgMHg4M2E1YjdhNSwKLSAgMHhm
OTA2OTZkOCwgMHgyNDQzM2M2MCwgMHg0NjYxYjU1OSwgMHg5YjI0MWZlMSwKLSAgMHg4MjI0YTcy
YiwgMHg1ZjYxMGQ5MywgMHgzZDQzODRhYSwgMHhlMDA2MmUxMiwKLSAgMHgwZjQyZjUzZSwgMHhk
MjA3NWY4NiwgMHhiMDI1ZDZiZiwgMHg2ZDYwN2MwNywKLSAgMHg3NDYwYzRjZCwgMHhhOTI1NmU3
NSwgMHhjYjA3ZTc0YywgMHgxNjQyNGRmNCwKLSAgMHgxMDYyMjdlNSwgMHhjZDI3OGQ1ZCwgMHhh
ZjA1MDQ2NCwgMHg3MjQwYWVkYywKLSAgMHg2YjQwMTYxNiwgMHhiNjA1YmNhZSwgMHhkNDI3MzU5
NywgMHgwOTYyOWYyZiwKLSAgMHhlNjI2NDQwMywgMHgzYjYzZWViYiwgMHg1OTQxNjc4MiwgMHg4
NDA0Y2QzYSwKLSAgMHg5ZDA0NzVmMCwgMHg0MDQxZGY0OCwgMHgyMjYzNTY3MSwgMHhmZjI2ZmNj
OSwKLSAgMHgyZTIzODI1MywgMHhmMzY2MjhlYiwgMHg5MTQ0YTFkMiwgMHg0YzAxMGI2YSwKLSAg
MHg1NTAxYjNhMCwgMHg4ODQ0MTkxOCwgMHhlYTY2OTAyMSwgMHgzNzIzM2E5OSwKLSAgMHhkODY3
ZTFiNSwgMHgwNTIyNGIwZCwgMHg2NzAwYzIzNCwgMHhiYTQ1Njg4YywKLSAgMHhhMzQ1ZDA0Niwg
MHg3ZTAwN2FmZSwgMHgxYzIyZjNjNywgMHhjMTY3NTk3ZiwKLSAgMHhjNzQ3MzM2ZSwgMHgxYTAy
OTlkNiwgMHg3ODIwMTBlZiwgMHhhNTY1YmE1NywKLSAgMHhiYzY1MDI5ZCwgMHg2MTIwYTgyNSwg
MHgwMzAyMjExYywgMHhkZTQ3OGJhNCwKLSAgMHgzMTAzNTA4OCwgMHhlYzQ2ZmEzMCwgMHg4ZTY0
NzMwOSwgMHg1MzIxZDliMSwKLSAgMHg0YTIxNjE3YiwgMHg5NzY0Y2JjMywgMHhmNTQ2NDJmYSwg
MHgyODAzZTg0MgotfTsKLQotLy8gVXNlZCB0byBmZXRjaCBhIG5hdHVyYWxseS1hbGlnbmVkIDMy
LWJpdCB3b3JkIGluIGxpdHRsZSBlbmRpYW4gYnl0ZS1vcmRlcgotc3RhdGljIGlubGluZSB1aW50
MzJfdCBMRV9MT0FEMzIoY29uc3QgdWludDhfdCAqcCkgewotICByZXR1cm4gRGVjb2RlRml4ZWQz
MihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihwKSk7Ci19Ci0KLXVpbnQzMl90IEV4dGVu
ZCh1aW50MzJfdCBjcmMsIGNvbnN0IGNoYXIqIGJ1Ziwgc2l6ZV90IHNpemUpIHsKLSAgY29uc3Qg
dWludDhfdCAqcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCAqPihidWYpOwotICBj
b25zdCB1aW50OF90ICplID0gcCArIHNpemU7Ci0gIHVpbnQzMl90IGwgPSBjcmMgXiAweGZmZmZm
ZmZmdTsKLQotI2RlZmluZSBTVEVQMSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIGludCBjID0gKGwgJiAweGZmKSBeICpwKys7ICAgICAgICAgICAgICAgICAgXAotICAg
IGwgPSB0YWJsZTBfW2NdIF4gKGwgPj4gOCk7ICAgICAgICAgICAgICAgICAgXAotfSB3aGlsZSAo
MCkKLSNkZWZpbmUgU1RFUDQgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICB1aW50MzJfdCBjID0gbCBeIExFX0xPQUQzMihwKTsgICAgICAgICAgICAgIFwKLSAgICBwICs9
IDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBsID0gdGFibGUz
X1tjICYgMHhmZl0gXiAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgdGFibGUyX1soYyA+
PiA4KSAmIDB4ZmZdIF4gICAgICAgICAgICAgIFwKLSAgICAgICAgdGFibGUxX1soYyA+PiAxNikg
JiAweGZmXSBeICAgICAgICAgICAgIFwKLSAgICAgICAgdGFibGUwX1tjID4+IDI0XTsgICAgICAg
ICAgICAgICAgICAgICAgIFwKLX0gd2hpbGUgKDApCi0KLSAgLy8gUG9pbnQgeCBhdCBmaXJzdCA0
LWJ5dGUgYWxpZ25lZCBieXRlIGluIHN0cmluZy4gIFRoaXMgbWlnaHQgYmUKLSAgLy8ganVzdCBw
YXN0IHRoZSBlbmQgb2YgdGhlIHN0cmluZy4KLSAgY29uc3QgdWludHB0cl90IHB2YWwgPSByZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocCk7Ci0gIGNvbnN0IHVpbnQ4X3QqIHggPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigoKHB2YWwgKyAzKSA+PiAyKSA8PCAyKTsKLSAgaWYg
KHggPD0gZSkgewotICAgIC8vIFByb2Nlc3MgYnl0ZXMgdW50aWwgZmluaXNoZWQgb3IgcCBpcyA0
LWJ5dGUgYWxpZ25lZAotICAgIHdoaWxlIChwICE9IHgpIHsKLSAgICAgIFNURVAxOwotICAgIH0K
LSAgfQotICAvLyBQcm9jZXNzIGJ5dGVzIDE2IGF0IGEgdGltZQotICB3aGlsZSAoKGUtcCkgPj0g
MTYpIHsKLSAgICBTVEVQNDsgU1RFUDQ7IFNURVA0OyBTVEVQNDsKLSAgfQotICAvLyBQcm9jZXNz
IGJ5dGVzIDQgYXQgYSB0aW1lCi0gIHdoaWxlICgoZS1wKSA+PSA0KSB7Ci0gICAgU1RFUDQ7Ci0g
IH0KLSAgLy8gUHJvY2VzcyB0aGUgbGFzdCBmZXcgYnl0ZXMKLSAgd2hpbGUgKHAgIT0gZSkgewot
ICAgIFNURVAxOwotICB9Ci0jdW5kZWYgU1RFUDQKLSN1bmRlZiBTVEVQMQotICByZXR1cm4gbCBe
IDB4ZmZmZmZmZmZ1OwotfQotCi19ICAvLyBuYW1lc3BhY2UgY3JjMzJjCi19ICAvLyBuYW1lc3Bh
Y2UgbGV2ZWxkYgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2Ny
YzMyYy5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2NyYzMyYy5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDdlNWMwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvdXRpbC9jcmMzMmMuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAg
QEAKLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KLQotI2lm
bmRlZiBTVE9SQUdFX0xFVkVMREJfVVRJTF9DUkMzMkNfSF8KLSNkZWZpbmUgU1RPUkFHRV9MRVZF
TERCX1VUSUxfQ1JDMzJDX0hfCi0KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdGRp
bnQuaD4KLQotbmFtZXNwYWNlIGxldmVsZGIgewotbmFtZXNwYWNlIGNyYzMyYyB7Ci0KLS8vIFJl
dHVybiB0aGUgY3JjMzJjIG9mIGNvbmNhdChBLCBkYXRhWzAsbi0xXSkgd2hlcmUgaW5pdF9jcmMg
aXMgdGhlCi0vLyBjcmMzMmMgb2Ygc29tZSBzdHJpbmcgQS4gIEV4dGVuZCgpIGlzIG9mdGVuIHVz
ZWQgdG8gbWFpbnRhaW4gdGhlCi0vLyBjcmMzMmMgb2YgYSBzdHJlYW0gb2YgZGF0YS4KLWV4dGVy
biB1aW50MzJfdCBFeHRlbmQodWludDMyX3QgaW5pdF9jcmMsIGNvbnN0IGNoYXIqIGRhdGEsIHNp
emVfdCBuKTsKLQotLy8gUmV0dXJuIHRoZSBjcmMzMmMgb2YgZGF0YVswLG4tMV0KLWlubGluZSB1
aW50MzJfdCBWYWx1ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbikgewotICByZXR1cm4gRXh0
ZW5kKDAsIGRhdGEsIG4pOwotfQotCi1zdGF0aWMgY29uc3QgdWludDMyX3Qga01hc2tEZWx0YSA9
IDB4YTI4MmVhZDh1bDsKLQotLy8gUmV0dXJuIGEgbWFza2VkIHJlcHJlc2VudGF0aW9uIG9mIGNy
Yy4KLS8vCi0vLyBNb3RpdmF0aW9uOiBpdCBpcyBwcm9ibGVtYXRpYyB0byBjb21wdXRlIHRoZSBD
UkMgb2YgYSBzdHJpbmcgdGhhdAotLy8gY29udGFpbnMgZW1iZWRkZWQgQ1JDcy4gIFRoZXJlZm9y
ZSB3ZSByZWNvbW1lbmQgdGhhdCBDUkNzIHN0b3JlZAotLy8gc29tZXdoZXJlIChlLmcuLCBpbiBm
aWxlcykgc2hvdWxkIGJlIG1hc2tlZCBiZWZvcmUgYmVpbmcgc3RvcmVkLgotaW5saW5lIHVpbnQz
Ml90IE1hc2sodWludDMyX3QgY3JjKSB7Ci0gIC8vIFJvdGF0ZSByaWdodCBieSAxNSBiaXRzIGFu
ZCBhZGQgYSBjb25zdGFudC4KLSAgcmV0dXJuICgoY3JjID4+IDE1KSB8IChjcmMgPDwgMTcpKSAr
IGtNYXNrRGVsdGE7Ci19Ci0KLS8vIFJldHVybiB0aGUgY3JjIHdob3NlIG1hc2tlZCByZXByZXNl
bnRhdGlvbiBpcyBtYXNrZWRfY3JjLgotaW5saW5lIHVpbnQzMl90IFVubWFzayh1aW50MzJfdCBt
YXNrZWRfY3JjKSB7Ci0gIHVpbnQzMl90IHJvdCA9IG1hc2tlZF9jcmMgLSBrTWFza0RlbHRhOwot
ICByZXR1cm4gKChyb3QgPj4gMTcpIHwgKHJvdCA8PCAxNSkpOwotfQotCi19ICAvLyBuYW1lc3Bh
Y2UgY3JjMzJjCi19ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgotCi0jZW5kaWYgIC8vIFNUT1JBR0Vf
TEVWRUxEQl9VVElMX0NSQzMyQ19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi91dGlsL2NyYzMyY190ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGls
L2NyYzMyY190ZXN0LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Yjk1N2VlLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9jcmMzMmNfdGVzdC5j
YworKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMSBU
aGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9y
IG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KLQotI2luY2x1ZGUgInV0aWwvY3JjMzJjLmgiCi0jaW5j
bHVkZSAidXRpbC90ZXN0aGFybmVzcy5oIgotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7Ci1uYW1lc3Bh
Y2UgY3JjMzJjIHsKLQotY2xhc3MgQ1JDIHsgfTsKLQotVEVTVChDUkMsIFN0YW5kYXJkUmVzdWx0
cykgewotICAvLyBGcm9tIHJmYzM3MjAgc2VjdGlvbiBCLjQuCi0gIGNoYXIgYnVmWzMyXTsKLQot
ICBtZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7Ci0gIEFTU0VSVF9FUSgweDhhOTEzNmFhLCBW
YWx1ZShidWYsIHNpemVvZihidWYpKSk7Ci0KLSAgbWVtc2V0KGJ1ZiwgMHhmZiwgc2l6ZW9mKGJ1
ZikpOwotICBBU1NFUlRfRVEoMHg2MmE4YWI0MywgVmFsdWUoYnVmLCBzaXplb2YoYnVmKSkpOwot
Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgMzI7IGkrKykgewotICAgIGJ1ZltpXSA9IGk7Ci0gIH0K
LSAgQVNTRVJUX0VRKDB4NDZkZDc5NGUsIFZhbHVlKGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKLQotICBm
b3IgKGludCBpID0gMDsgaSA8IDMyOyBpKyspIHsKLSAgICBidWZbaV0gPSAzMSAtIGk7Ci0gIH0K
LSAgQVNTRVJUX0VRKDB4MTEzZmRiNWMsIFZhbHVlKGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKLQotICB1
bnNpZ25lZCBjaGFyIGRhdGFbNDhdID0gewotICAgIDB4MDEsIDB4YzAsIDB4MDAsIDB4MDAsCi0g
ICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLAot
ICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gICAgMHgxNCwgMHgwMCwgMHgwMCwgMHgwMCwK
LSAgICAweDAwLCAweDAwLCAweDA0LCAweDAwLAotICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQs
Ci0gICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKLSAgICAweDI4LCAweDAwLCAweDAwLCAweDAw
LAotICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gICAgMHgwMiwgMHgwMCwgMHgwMCwgMHgw
MCwKLSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICB9OwotICBBU1NFUlRfRVEoMHhkOTk2
M2E1NiwgVmFsdWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGF0YSksIHNpemVvZihkYXRhKSkp
OwotfQotCi1URVNUKENSQywgVmFsdWVzKSB7Ci0gIEFTU0VSVF9ORShWYWx1ZSgiYSIsIDEpLCBW
YWx1ZSgiZm9vIiwgMykpOwotfQotCi1URVNUKENSQywgRXh0ZW5kKSB7Ci0gIEFTU0VSVF9FUShW
YWx1ZSgiaGVsbG8gd29ybGQiLCAxMSksCi0gICAgICAgICAgICBFeHRlbmQoVmFsdWUoImhlbGxv
ICIsIDYpLCAid29ybGQiLCA1KSk7Ci19Ci0KLVRFU1QoQ1JDLCBNYXNrKSB7Ci0gIHVpbnQzMl90
IGNyYyA9IFZhbHVlKCJmb28iLCAzKTsKLSAgQVNTRVJUX05FKGNyYywgTWFzayhjcmMpKTsKLSAg
QVNTRVJUX05FKGNyYywgTWFzayhNYXNrKGNyYykpKTsKLSAgQVNTRVJUX0VRKGNyYywgVW5tYXNr
KE1hc2soY3JjKSkpOwotICBBU1NFUlRfRVEoY3JjLCBVbm1hc2soVW5tYXNrKE1hc2soTWFzayhj
cmMpKSkpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGNyYzMyYwotfSAgLy8gbmFtZXNwYWNlIGxl
dmVsZGIKLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7Ci0gIHJldHVybiBsZXZl
bGRiOjp0ZXN0OjpSdW5BbGxUZXN0cygpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi91dGlsL2Vudi5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9l
bnYuY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNjAwZTkuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2Vudi5jYworKysgL2Rldi9udWxsCkBA
IC0xLDk2ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1
dG9ycy4KLQotI2luY2x1ZGUgImxldmVsZGIvZW52LmgiCi0KLW5hbWVzcGFjZSBsZXZlbGRiIHsK
LQotRW52Ojp+RW52KCkgewotfQotCi1TZXF1ZW50aWFsRmlsZTo6flNlcXVlbnRpYWxGaWxlKCkg
ewotfQotCi1SYW5kb21BY2Nlc3NGaWxlOjp+UmFuZG9tQWNjZXNzRmlsZSgpIHsKLX0KLQotV3Jp
dGFibGVGaWxlOjp+V3JpdGFibGVGaWxlKCkgewotfQotCi1Mb2dnZXI6On5Mb2dnZXIoKSB7Ci19
Ci0KLUZpbGVMb2NrOjp+RmlsZUxvY2soKSB7Ci19Ci0KLXZvaWQgTG9nKExvZ2dlciogaW5mb19s
b2csIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKSB7Ci0gIGlmIChpbmZvX2xvZyAhPSBOVUxMKSB7
Ci0gICAgdmFfbGlzdCBhcDsKLSAgICB2YV9zdGFydChhcCwgZm9ybWF0KTsKLSAgICBpbmZvX2xv
Zy0+TG9ndihmb3JtYXQsIGFwKTsKLSAgICB2YV9lbmQoYXApOwotICB9Ci19Ci0KLXN0YXRpYyBT
dGF0dXMgRG9Xcml0ZVN0cmluZ1RvRmlsZShFbnYqIGVudiwgY29uc3QgU2xpY2UmIGRhdGEsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1l
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hvdWxkX3N5bmMpIHsK
LSAgV3JpdGFibGVGaWxlKiBmaWxlOwotICBTdGF0dXMgcyA9IGVudi0+TmV3V3JpdGFibGVGaWxl
KGZuYW1lLCAmZmlsZSk7Ci0gIGlmICghcy5vaygpKSB7Ci0gICAgcmV0dXJuIHM7Ci0gIH0KLSAg
cyA9IGZpbGUtPkFwcGVuZChkYXRhKTsKLSAgaWYgKHMub2soKSAmJiBzaG91bGRfc3luYykgewot
ICAgIHMgPSBmaWxlLT5TeW5jKCk7Ci0gIH0KLSAgaWYgKHMub2soKSkgewotICAgIHMgPSBmaWxl
LT5DbG9zZSgpOwotICB9Ci0gIGRlbGV0ZSBmaWxlOyAgLy8gV2lsbCBhdXRvLWNsb3NlIGlmIHdl
IGRpZCBub3QgY2xvc2UgYWJvdmUKLSAgaWYgKCFzLm9rKCkpIHsKLSAgICBlbnYtPkRlbGV0ZUZp
bGUoZm5hbWUpOwotICB9Ci0gIHJldHVybiBzOwotfQotCi1TdGF0dXMgV3JpdGVTdHJpbmdUb0Zp
bGUoRW52KiBlbnYsIGNvbnN0IFNsaWNlJiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSkgewotICByZXR1cm4gRG9Xcml0ZVN0cmluZ1RvRmls
ZShlbnYsIGRhdGEsIGZuYW1lLCBmYWxzZSk7Ci19Ci0KLVN0YXR1cyBXcml0ZVN0cmluZ1RvRmls
ZVN5bmMoRW52KiBlbnYsIGNvbnN0IFNsaWNlJiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUpIHsKLSAgcmV0dXJuIERvV3JpdGVTdHJp
bmdUb0ZpbGUoZW52LCBkYXRhLCBmbmFtZSwgdHJ1ZSk7Ci19Ci0KLVN0YXR1cyBSZWFkRmlsZVRv
U3RyaW5nKEVudiogZW52LCBjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUsIHN0ZDo6c3RyaW5nKiBk
YXRhKSB7Ci0gIGRhdGEtPmNsZWFyKCk7Ci0gIFNlcXVlbnRpYWxGaWxlKiBmaWxlOwotICBTdGF0
dXMgcyA9IGVudi0+TmV3U2VxdWVudGlhbEZpbGUoZm5hbWUsICZmaWxlKTsKLSAgaWYgKCFzLm9r
KCkpIHsKLSAgICByZXR1cm4gczsKLSAgfQotICBzdGF0aWMgY29uc3QgaW50IGtCdWZmZXJTaXpl
ID0gODE5MjsKLSAgY2hhciogc3BhY2UgPSBuZXcgY2hhcltrQnVmZmVyU2l6ZV07Ci0gIHdoaWxl
ICh0cnVlKSB7Ci0gICAgU2xpY2UgZnJhZ21lbnQ7Ci0gICAgcyA9IGZpbGUtPlJlYWQoa0J1ZmZl
clNpemUsICZmcmFnbWVudCwgc3BhY2UpOwotICAgIGlmICghcy5vaygpKSB7Ci0gICAgICBicmVh
azsKLSAgICB9Ci0gICAgZGF0YS0+YXBwZW5kKGZyYWdtZW50LmRhdGEoKSwgZnJhZ21lbnQuc2l6
ZSgpKTsKLSAgICBpZiAoZnJhZ21lbnQuZW1wdHkoKSkgewotICAgICAgYnJlYWs7Ci0gICAgfQot
ICB9Ci0gIGRlbGV0ZVtdIHNwYWNlOwotICBkZWxldGUgZmlsZTsKLSAgcmV0dXJuIHM7Ci19Ci0K
LUVudldyYXBwZXI6On5FbnZXcmFwcGVyKCkgewotfQotCi19ICAvLyBuYW1lc3BhY2UgbGV2ZWxk
YgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2Vudl9wb3NpeC5j
YyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9lbnZfcG9zaXguY2MKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4ZTA5YzkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi91dGlsL2Vudl9wb3NpeC5jYworKysgL2Rldi9udWxsCkBAIC0xLDY5OCAr
MCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCi0K
LSNpbmNsdWRlIDxkZXF1ZT4KLSNpbmNsdWRlIDxzZXQ+Ci0jaW5jbHVkZSA8ZGlyZW50Lmg+Ci0j
aW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHB0aHJlYWQu
aD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0
cmluZy5oPgotI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNp
bmNsdWRlIDxzeXMvdGltZS5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHRp
bWUuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpZiBkZWZpbmVkKExFVkVMREJfUExBVEZPUk1f
QU5EUk9JRCkKLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2VuZGlmCi0jaW5jbHVkZSAibGV2ZWxk
Yi9lbnYuaCIKLSNpbmNsdWRlICJsZXZlbGRiL3NsaWNlLmgiCi0jaW5jbHVkZSAicG9ydC9wb3J0
LmgiCi0jaW5jbHVkZSAidXRpbC9sb2dnaW5nLmgiCi0jaW5jbHVkZSAidXRpbC9tdXRleGxvY2su
aCIKLSNpbmNsdWRlICJ1dGlsL3Bvc2l4X2xvZ2dlci5oIgotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7
Ci0KLW5hbWVzcGFjZSB7Ci0KLXN0YXRpYyBTdGF0dXMgSU9FcnJvcihjb25zdCBzdGQ6OnN0cmlu
ZyYgY29udGV4dCwgaW50IGVycl9udW1iZXIpIHsKLSAgcmV0dXJuIFN0YXR1czo6SU9FcnJvcihj
b250ZXh0LCBzdHJlcnJvcihlcnJfbnVtYmVyKSk7Ci19Ci0KLWNsYXNzIFBvc2l4U2VxdWVudGlh
bEZpbGU6IHB1YmxpYyBTZXF1ZW50aWFsRmlsZSB7Ci0gcHJpdmF0ZToKLSAgc3RkOjpzdHJpbmcg
ZmlsZW5hbWVfOwotICBGSUxFKiBmaWxlXzsKLQotIHB1YmxpYzoKLSAgUG9zaXhTZXF1ZW50aWFs
RmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUsIEZJTEUqIGYpCi0gICAgICA6IGZpbGVuYW1l
XyhmbmFtZSksIGZpbGVfKGYpIHsgfQotICB2aXJ0dWFsIH5Qb3NpeFNlcXVlbnRpYWxGaWxlKCkg
eyBmY2xvc2UoZmlsZV8pOyB9Ci0KLSAgdmlydHVhbCBTdGF0dXMgUmVhZChzaXplX3QgbiwgU2xp
Y2UqIHJlc3VsdCwgY2hhciogc2NyYXRjaCkgewotICAgIFN0YXR1cyBzOwotICAgIHNpemVfdCBy
ID0gZnJlYWRfdW5sb2NrZWQoc2NyYXRjaCwgMSwgbiwgZmlsZV8pOwotICAgICpyZXN1bHQgPSBT
bGljZShzY3JhdGNoLCByKTsKLSAgICBpZiAociA8IG4pIHsKLSAgICAgIGlmIChmZW9mKGZpbGVf
KSkgewotICAgICAgICAvLyBXZSBsZWF2ZSBzdGF0dXMgYXMgb2sgaWYgd2UgaGl0IHRoZSBlbmQg
b2YgdGhlIGZpbGUKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEEgcGFydGlhbCByZWFkIHdp
dGggYW4gZXJyb3I6IHJldHVybiBhIG5vbi1vayBzdGF0dXMKLSAgICAgICAgcyA9IElPRXJyb3Io
ZmlsZW5hbWVfLCBlcnJubyk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBzOwotICB9Ci0K
LSAgdmlydHVhbCBTdGF0dXMgU2tpcCh1aW50NjRfdCBuKSB7Ci0gICAgaWYgKGZzZWVrKGZpbGVf
LCBuLCBTRUVLX0NVUikpIHsKLSAgICAgIHJldHVybiBJT0Vycm9yKGZpbGVuYW1lXywgZXJybm8p
OwotICAgIH0KLSAgICByZXR1cm4gU3RhdHVzOjpPSygpOwotICB9Ci19OwotCi0vLyBwcmVhZCgp
IGJhc2VkIHJhbmRvbS1hY2Nlc3MKLWNsYXNzIFBvc2l4UmFuZG9tQWNjZXNzRmlsZTogcHVibGlj
IFJhbmRvbUFjY2Vzc0ZpbGUgewotIHByaXZhdGU6Ci0gIHN0ZDo6c3RyaW5nIGZpbGVuYW1lXzsK
LSAgaW50IGZkXzsKLQotIHB1YmxpYzoKLSAgUG9zaXhSYW5kb21BY2Nlc3NGaWxlKGNvbnN0IHN0
ZDo6c3RyaW5nJiBmbmFtZSwgaW50IGZkKQotICAgICAgOiBmaWxlbmFtZV8oZm5hbWUpLCBmZF8o
ZmQpIHsgfQotICB2aXJ0dWFsIH5Qb3NpeFJhbmRvbUFjY2Vzc0ZpbGUoKSB7IGNsb3NlKGZkXyk7
IH0KLQotICB2aXJ0dWFsIFN0YXR1cyBSZWFkKHVpbnQ2NF90IG9mZnNldCwgc2l6ZV90IG4sIFNs
aWNlKiByZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgY2hhciogc2NyYXRjaCkgY29uc3Qg
ewotICAgIFN0YXR1cyBzOwotICAgIHNzaXplX3QgciA9IHByZWFkKGZkXywgc2NyYXRjaCwgbiwg
c3RhdGljX2Nhc3Q8b2ZmX3Q+KG9mZnNldCkpOwotICAgICpyZXN1bHQgPSBTbGljZShzY3JhdGNo
LCAociA8IDApID8gMCA6IHIpOwotICAgIGlmIChyIDwgMCkgewotICAgICAgLy8gQW4gZXJyb3I6
IHJldHVybiBhIG5vbi1vayBzdGF0dXMKLSAgICAgIHMgPSBJT0Vycm9yKGZpbGVuYW1lXywgZXJy
bm8pOwotICAgIH0KLSAgICByZXR1cm4gczsKLSAgfQotfTsKLQotLy8gSGVscGVyIGNsYXNzIHRv
IGxpbWl0IG1tYXAgZmlsZSB1c2FnZSBzbyB0aGF0IHdlIGRvIG5vdCBlbmQgdXAKLS8vIHJ1bm5p
bmcgb3V0IHZpcnR1YWwgbWVtb3J5IG9yIHJ1bm5pbmcgaW50byBrZXJuZWwgcGVyZm9ybWFuY2UK
LS8vIHByb2JsZW1zIGZvciB2ZXJ5IGxhcmdlIGRhdGFiYXNlcy4KLWNsYXNzIE1tYXBMaW1pdGVy
IHsKLSBwdWJsaWM6Ci0gIC8vIFVwIHRvIDEwMDAgbW1hcHMgZm9yIDY0LWJpdCBiaW5hcmllczsg
bm9uZSBmb3Igc21hbGxlciBwb2ludGVyIHNpemVzLgotICBNbWFwTGltaXRlcigpIHsKLSAgICBT
ZXRBbGxvd2VkKHNpemVvZih2b2lkKikgPj0gOCA/IDEwMDAgOiAwKTsKLSAgfQotCi0gIC8vIElm
IGFub3RoZXIgbW1hcCBzbG90IGlzIGF2YWlsYWJsZSwgYWNxdWlyZSBpdCBhbmQgcmV0dXJuIHRy
dWUuCi0gIC8vIEVsc2UgcmV0dXJuIGZhbHNlLgotICBib29sIEFjcXVpcmUoKSB7Ci0gICAgaWYg
KEdldEFsbG93ZWQoKSA8PSAwKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIE11
dGV4TG9jayBsKCZtdV8pOwotICAgIGludHB0cl90IHggPSBHZXRBbGxvd2VkKCk7Ci0gICAgaWYg
KHggPD0gMCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSB7Ci0gICAgICBTZXRB
bGxvd2VkKHggLSAxKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgfQotCi0gIC8vIFJl
bGVhc2UgYSBzbG90IGFjcXVpcmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBBY3F1aXJlKCkgdGhh
dCByZXR1cm5lZCB0cnVlLgotICB2b2lkIFJlbGVhc2UoKSB7Ci0gICAgTXV0ZXhMb2NrIGwoJm11
Xyk7Ci0gICAgU2V0QWxsb3dlZChHZXRBbGxvd2VkKCkgKyAxKTsKLSAgfQotCi0gcHJpdmF0ZToK
LSAgcG9ydDo6TXV0ZXggbXVfOwotICBwb3J0OjpBdG9taWNQb2ludGVyIGFsbG93ZWRfOwotCi0g
IGludHB0cl90IEdldEFsbG93ZWQoKSBjb25zdCB7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KGFsbG93ZWRfLkFjcXVpcmVfTG9hZCgpKTsKLSAgfQotCi0gIC8vIFJFUVVJ
UkVTOiBtdV8gbXVzdCBiZSBoZWxkCi0gIHZvaWQgU2V0QWxsb3dlZChpbnRwdHJfdCB2KSB7Ci0g
ICAgYWxsb3dlZF8uUmVsZWFzZV9TdG9yZShyZWludGVycHJldF9jYXN0PHZvaWQqPih2KSk7Ci0g
IH0KLQotICBNbWFwTGltaXRlcihjb25zdCBNbWFwTGltaXRlciYpOwotICB2b2lkIG9wZXJhdG9y
PShjb25zdCBNbWFwTGltaXRlciYpOwotfTsKLQotLy8gbW1hcCgpIGJhc2VkIHJhbmRvbS1hY2Nl
c3MKLWNsYXNzIFBvc2l4TW1hcFJlYWRhYmxlRmlsZTogcHVibGljIFJhbmRvbUFjY2Vzc0ZpbGUg
ewotIHByaXZhdGU6Ci0gIHN0ZDo6c3RyaW5nIGZpbGVuYW1lXzsKLSAgdm9pZCogbW1hcHBlZF9y
ZWdpb25fOwotICBzaXplX3QgbGVuZ3RoXzsKLSAgTW1hcExpbWl0ZXIqIGxpbWl0ZXJfOwotCi0g
cHVibGljOgotICAvLyBiYXNlWzAsbGVuZ3RoLTFdIGNvbnRhaW5zIHRoZSBtbWFwcGVkIGNvbnRl
bnRzIG9mIHRoZSBmaWxlLgotICBQb3NpeE1tYXBSZWFkYWJsZUZpbGUoY29uc3Qgc3RkOjpzdHJp
bmcmIGZuYW1lLCB2b2lkKiBiYXNlLCBzaXplX3QgbGVuZ3RoLAotICAgICAgICAgICAgICAgICAg
ICAgICAgTW1hcExpbWl0ZXIqIGxpbWl0ZXIpCi0gICAgICA6IGZpbGVuYW1lXyhmbmFtZSksIG1t
YXBwZWRfcmVnaW9uXyhiYXNlKSwgbGVuZ3RoXyhsZW5ndGgpLAotICAgICAgICBsaW1pdGVyXyhs
aW1pdGVyKSB7Ci0gIH0KLQotICB2aXJ0dWFsIH5Qb3NpeE1tYXBSZWFkYWJsZUZpbGUoKSB7Ci0g
ICAgbXVubWFwKG1tYXBwZWRfcmVnaW9uXywgbGVuZ3RoXyk7Ci0gICAgbGltaXRlcl8tPlJlbGVh
c2UoKTsKLSAgfQotCi0gIHZpcnR1YWwgU3RhdHVzIFJlYWQodWludDY0X3Qgb2Zmc2V0LCBzaXpl
X3QgbiwgU2xpY2UqIHJlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBzY3JhdGNo
KSBjb25zdCB7Ci0gICAgU3RhdHVzIHM7Ci0gICAgaWYgKG9mZnNldCArIG4gPiBsZW5ndGhfKSB7
Ci0gICAgICAqcmVzdWx0ID0gU2xpY2UoKTsKLSAgICAgIHMgPSBJT0Vycm9yKGZpbGVuYW1lXywg
RUlOVkFMKTsKLSAgICB9IGVsc2UgewotICAgICAgKnJlc3VsdCA9IFNsaWNlKHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KG1tYXBwZWRfcmVnaW9uXykgKyBvZmZzZXQsIG4pOwotICAgIH0KLSAgICBy
ZXR1cm4gczsKLSAgfQotfTsKLQotLy8gV2UgcHJlYWxsb2NhdGUgdXAgdG8gYW4gZXh0cmEgbWVn
YWJ5dGUgYW5kIHVzZSBtZW1jcHkgdG8gYXBwZW5kIG5ldwotLy8gZGF0YSB0byB0aGUgZmlsZS4g
IFRoaXMgaXMgc2FmZSBzaW5jZSB3ZSBlaXRoZXIgcHJvcGVybHkgY2xvc2UgdGhlCi0vLyBmaWxl
IGJlZm9yZSByZWFkaW5nIGZyb20gaXQsIG9yIGZvciBsb2cgZmlsZXMsIHRoZSByZWFkaW5nIGNv
ZGUKLS8vIGtub3dzIGVub3VnaCB0byBza2lwIHplcm8gc3VmZml4ZXMuCi1jbGFzcyBQb3NpeE1t
YXBGaWxlIDogcHVibGljIFdyaXRhYmxlRmlsZSB7Ci0gcHJpdmF0ZToKLSAgc3RkOjpzdHJpbmcg
ZmlsZW5hbWVfOwotICBpbnQgZmRfOwotICBzaXplX3QgcGFnZV9zaXplXzsKLSAgc2l6ZV90IG1h
cF9zaXplXzsgICAgICAgLy8gSG93IG11Y2ggZXh0cmEgbWVtb3J5IHRvIG1hcCBhdCBhIHRpbWUK
LSAgY2hhciogYmFzZV87ICAgICAgICAgICAgLy8gVGhlIG1hcHBlZCByZWdpb24KLSAgY2hhciog
bGltaXRfOyAgICAgICAgICAgLy8gTGltaXQgb2YgdGhlIG1hcHBlZCByZWdpb24KLSAgY2hhciog
ZHN0XzsgICAgICAgICAgICAgLy8gV2hlcmUgdG8gd3JpdGUgbmV4dCAgKGluIHJhbmdlIFtiYXNl
XyxsaW1pdF9dKQotICBjaGFyKiBsYXN0X3N5bmNfOyAgICAgICAvLyBXaGVyZSBoYXZlIHdlIHN5
bmNlZCB1cCB0bwotICB1aW50NjRfdCBmaWxlX29mZnNldF87ICAvLyBPZmZzZXQgb2YgYmFzZV8g
aW4gZmlsZQotCi0gIC8vIEhhdmUgd2UgZG9uZSBhbiBtdW5tYXAgb2YgdW5zeW5jZWQgZGF0YT8K
LSAgYm9vbCBwZW5kaW5nX3N5bmNfOwotCi0gIC8vIFJvdW5kdXAgeCB0byBhIG11bHRpcGxlIG9m
IHkKLSAgc3RhdGljIHNpemVfdCBSb3VuZHVwKHNpemVfdCB4LCBzaXplX3QgeSkgewotICAgIHJl
dHVybiAoKHggKyB5IC0gMSkgLyB5KSAqIHk7Ci0gIH0KLQotICBzaXplX3QgVHJ1bmNhdGVUb1Bh
Z2VCb3VuZGFyeShzaXplX3QgcykgewotICAgIHMgLT0gKHMgJiAocGFnZV9zaXplXyAtIDEpKTsK
LSAgICBhc3NlcnQoKHMgJSBwYWdlX3NpemVfKSA9PSAwKTsKLSAgICByZXR1cm4gczsKLSAgfQot
Ci0gIGJvb2wgVW5tYXBDdXJyZW50UmVnaW9uKCkgewotICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsK
LSAgICBpZiAoYmFzZV8gIT0gTlVMTCkgewotICAgICAgaWYgKGxhc3Rfc3luY18gPCBsaW1pdF8p
IHsKLSAgICAgICAgLy8gRGVmZXIgc3luY2luZyB0aGlzIGRhdGEgdW50aWwgbmV4dCBTeW5jKCkg
Y2FsbCwgaWYgYW55Ci0gICAgICAgIHBlbmRpbmdfc3luY18gPSB0cnVlOwotICAgICAgfQotICAg
ICAgaWYgKG11bm1hcChiYXNlXywgbGltaXRfIC0gYmFzZV8pICE9IDApIHsKLSAgICAgICAgcmVz
dWx0ID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBmaWxlX29mZnNldF8gKz0gbGltaXRfIC0gYmFz
ZV87Ci0gICAgICBiYXNlXyA9IE5VTEw7Ci0gICAgICBsaW1pdF8gPSBOVUxMOwotICAgICAgbGFz
dF9zeW5jXyA9IE5VTEw7Ci0gICAgICBkc3RfID0gTlVMTDsKLQotICAgICAgLy8gSW5jcmVhc2Ug
dGhlIGFtb3VudCB3ZSBtYXAgdGhlIG5leHQgdGltZSwgYnV0IGNhcHBlZCBhdCAxTUIKLSAgICAg
IGlmIChtYXBfc2l6ZV8gPCAoMTw8MjApKSB7Ci0gICAgICAgIG1hcF9zaXplXyAqPSAyOwotICAg
ICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgYm9vbCBNYXBOZXdSZWdp
b24oKSB7Ci0gICAgYXNzZXJ0KGJhc2VfID09IE5VTEwpOwotICAgIGlmIChmdHJ1bmNhdGUoZmRf
LCBmaWxlX29mZnNldF8gKyBtYXBfc2l6ZV8pIDwgMCkgewotICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICB2b2lkKiBwdHIgPSBtbWFwKE5VTEwsIG1hcF9zaXplXywgUFJPVF9SRUFEIHwg
UFJPVF9XUklURSwgTUFQX1NIQVJFRCwKLSAgICAgICAgICAgICAgICAgICAgIGZkXywgZmlsZV9v
ZmZzZXRfKTsKLSAgICBpZiAocHRyID09IE1BUF9GQUlMRUQpIHsKLSAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgYmFzZV8gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihwdHIpOwotICAg
IGxpbWl0XyA9IGJhc2VfICsgbWFwX3NpemVfOwotICAgIGRzdF8gPSBiYXNlXzsKLSAgICBsYXN0
X3N5bmNfID0gYmFzZV87Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotIHB1YmxpYzoKLSAgUG9z
aXhNbWFwRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUsIGludCBmZCwgc2l6ZV90IHBhZ2Vf
c2l6ZSkKLSAgICAgIDogZmlsZW5hbWVfKGZuYW1lKSwKLSAgICAgICAgZmRfKGZkKSwKLSAgICAg
ICAgcGFnZV9zaXplXyhwYWdlX3NpemUpLAotICAgICAgICBtYXBfc2l6ZV8oUm91bmR1cCg2NTUz
NiwgcGFnZV9zaXplKSksCi0gICAgICAgIGJhc2VfKE5VTEwpLAotICAgICAgICBsaW1pdF8oTlVM
TCksCi0gICAgICAgIGRzdF8oTlVMTCksCi0gICAgICAgIGxhc3Rfc3luY18oTlVMTCksCi0gICAg
ICAgIGZpbGVfb2Zmc2V0XygwKSwKLSAgICAgICAgcGVuZGluZ19zeW5jXyhmYWxzZSkgewotICAg
IGFzc2VydCgocGFnZV9zaXplICYgKHBhZ2Vfc2l6ZSAtIDEpKSA9PSAwKTsKLSAgfQotCi0KLSAg
flBvc2l4TW1hcEZpbGUoKSB7Ci0gICAgaWYgKGZkXyA+PSAwKSB7Ci0gICAgICBQb3NpeE1tYXBG
aWxlOjpDbG9zZSgpOwotICAgIH0KLSAgfQotCi0gIHZpcnR1YWwgU3RhdHVzIEFwcGVuZChjb25z
dCBTbGljZSYgZGF0YSkgewotICAgIGNvbnN0IGNoYXIqIHNyYyA9IGRhdGEuZGF0YSgpOwotICAg
IHNpemVfdCBsZWZ0ID0gZGF0YS5zaXplKCk7Ci0gICAgd2hpbGUgKGxlZnQgPiAwKSB7Ci0gICAg
ICBhc3NlcnQoYmFzZV8gPD0gZHN0Xyk7Ci0gICAgICBhc3NlcnQoZHN0XyA8PSBsaW1pdF8pOwot
ICAgICAgc2l6ZV90IGF2YWlsID0gbGltaXRfIC0gZHN0XzsKLSAgICAgIGlmIChhdmFpbCA9PSAw
KSB7Ci0gICAgICAgIGlmICghVW5tYXBDdXJyZW50UmVnaW9uKCkgfHwKLSAgICAgICAgICAgICFN
YXBOZXdSZWdpb24oKSkgewotICAgICAgICAgIHJldHVybiBJT0Vycm9yKGZpbGVuYW1lXywgZXJy
bm8pOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHNpemVfdCBuID0gKGxlZnQgPD0gYXZh
aWwpID8gbGVmdCA6IGF2YWlsOwotICAgICAgbWVtY3B5KGRzdF8sIHNyYywgbik7Ci0gICAgICBk
c3RfICs9IG47Ci0gICAgICBzcmMgKz0gbjsKLSAgICAgIGxlZnQgLT0gbjsKLSAgICB9Ci0gICAg
cmV0dXJuIFN0YXR1czo6T0soKTsKLSAgfQotCi0gIHZpcnR1YWwgU3RhdHVzIENsb3NlKCkgewot
ICAgIFN0YXR1cyBzOwotICAgIHNpemVfdCB1bnVzZWQgPSBsaW1pdF8gLSBkc3RfOwotICAgIGlm
ICghVW5tYXBDdXJyZW50UmVnaW9uKCkpIHsKLSAgICAgIHMgPSBJT0Vycm9yKGZpbGVuYW1lXywg
ZXJybm8pOwotICAgIH0gZWxzZSBpZiAodW51c2VkID4gMCkgewotICAgICAgLy8gVHJpbSB0aGUg
ZXh0cmEgc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZQotICAgICAgaWYgKGZ0cnVuY2F0ZShm
ZF8sIGZpbGVfb2Zmc2V0XyAtIHVudXNlZCkgPCAwKSB7Ci0gICAgICAgIHMgPSBJT0Vycm9yKGZp
bGVuYW1lXywgZXJybm8pOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChjbG9zZShmZF8pIDwg
MCkgewotICAgICAgaWYgKHMub2soKSkgewotICAgICAgICBzID0gSU9FcnJvcihmaWxlbmFtZV8s
IGVycm5vKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBmZF8gPSAtMTsKLSAgICBiYXNlXyA9IE5V
TEw7Ci0gICAgbGltaXRfID0gTlVMTDsKLSAgICByZXR1cm4gczsKLSAgfQotCi0gIHZpcnR1YWwg
U3RhdHVzIEZsdXNoKCkgewotICAgIHJldHVybiBTdGF0dXM6Ok9LKCk7Ci0gIH0KLQotICB2aXJ0
dWFsIFN0YXR1cyBTeW5jKCkgewotICAgIFN0YXR1cyBzOwotCi0gICAgaWYgKHBlbmRpbmdfc3lu
Y18pIHsKLSAgICAgIC8vIFNvbWUgdW5tYXBwZWQgZGF0YSB3YXMgbm90IHN5bmNlZAotICAgICAg
cGVuZGluZ19zeW5jXyA9IGZhbHNlOwotICAgICAgaWYgKGZkYXRhc3luYyhmZF8pIDwgMCkgewot
ICAgICAgICBzID0gSU9FcnJvcihmaWxlbmFtZV8sIGVycm5vKTsKLSAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoZHN0XyA+IGxhc3Rfc3luY18pIHsKLSAgICAgIC8vIEZpbmQgdGhlIGJlZ2lubmlu
Z3Mgb2YgdGhlIHBhZ2VzIHRoYXQgY29udGFpbiB0aGUgZmlyc3QgYW5kIGxhc3QKLSAgICAgIC8v
IGJ5dGVzIHRvIGJlIHN5bmNlZC4KLSAgICAgIHNpemVfdCBwMSA9IFRydW5jYXRlVG9QYWdlQm91
bmRhcnkobGFzdF9zeW5jXyAtIGJhc2VfKTsKLSAgICAgIHNpemVfdCBwMiA9IFRydW5jYXRlVG9Q
YWdlQm91bmRhcnkoZHN0XyAtIGJhc2VfIC0gMSk7Ci0gICAgICBsYXN0X3N5bmNfID0gZHN0XzsK
LSAgICAgIGlmIChtc3luYyhiYXNlXyArIHAxLCBwMiAtIHAxICsgcGFnZV9zaXplXywgTVNfU1lO
QykgPCAwKSB7Ci0gICAgICAgIHMgPSBJT0Vycm9yKGZpbGVuYW1lXywgZXJybm8pOwotICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiBzOwotICB9Ci19OwotCi1zdGF0aWMgaW50IExvY2tPclVu
bG9jayhpbnQgZmQsIGJvb2wgbG9jaykgewotICBlcnJubyA9IDA7Ci0gIHN0cnVjdCBmbG9jayBm
OwotICBtZW1zZXQoJmYsIDAsIHNpemVvZihmKSk7Ci0gIGYubF90eXBlID0gKGxvY2sgPyBGX1dS
TENLIDogRl9VTkxDSyk7Ci0gIGYubF93aGVuY2UgPSBTRUVLX1NFVDsKLSAgZi5sX3N0YXJ0ID0g
MDsKLSAgZi5sX2xlbiA9IDA7ICAgICAgICAvLyBMb2NrL3VubG9jayBlbnRpcmUgZmlsZQotICBy
ZXR1cm4gZmNudGwoZmQsIEZfU0VUTEssICZmKTsKLX0KLQotY2xhc3MgUG9zaXhGaWxlTG9jayA6
IHB1YmxpYyBGaWxlTG9jayB7Ci0gcHVibGljOgotICBpbnQgZmRfOwotICBzdGQ6OnN0cmluZyBu
YW1lXzsKLX07Ci0KLS8vIFNldCBvZiBsb2NrZWQgZmlsZXMuICBXZSBrZWVwIGEgc2VwYXJhdGUg
c2V0IGluc3RlYWQgb2YganVzdAotLy8gcmVseWluZyBvbiBmY250cmwoRl9TRVRMSykgc2luY2Ug
ZmNudGwoRl9TRVRMSykgZG9lcyBub3QgcHJvdmlkZQotLy8gYW55IHByb3RlY3Rpb24gYWdhaW5z
dCBtdWx0aXBsZSB1c2VzIGZyb20gdGhlIHNhbWUgcHJvY2Vzcy4KLWNsYXNzIFBvc2l4TG9ja1Rh
YmxlIHsKLSBwcml2YXRlOgotICBwb3J0OjpNdXRleCBtdV87Ci0gIHN0ZDo6c2V0PHN0ZDo6c3Ry
aW5nPiBsb2NrZWRfZmlsZXNfOwotIHB1YmxpYzoKLSAgYm9vbCBJbnNlcnQoY29uc3Qgc3RkOjpz
dHJpbmcmIGZuYW1lKSB7Ci0gICAgTXV0ZXhMb2NrIGwoJm11Xyk7Ci0gICAgcmV0dXJuIGxvY2tl
ZF9maWxlc18uaW5zZXJ0KGZuYW1lKS5zZWNvbmQ7Ci0gIH0KLSAgdm9pZCBSZW1vdmUoY29uc3Qg
c3RkOjpzdHJpbmcmIGZuYW1lKSB7Ci0gICAgTXV0ZXhMb2NrIGwoJm11Xyk7Ci0gICAgbG9ja2Vk
X2ZpbGVzXy5lcmFzZShmbmFtZSk7Ci0gIH0KLX07Ci0KLWNsYXNzIFBvc2l4RW52IDogcHVibGlj
IEVudiB7Ci0gcHVibGljOgotICBQb3NpeEVudigpOwotICB2aXJ0dWFsIH5Qb3NpeEVudigpIHsK
LSAgICBmcHJpbnRmKHN0ZGVyciwgIkRlc3Ryb3lpbmcgRW52OjpEZWZhdWx0KClcbiIpOwotICAg
IGV4aXQoMSk7Ci0gIH0KLQotICB2aXJ0dWFsIFN0YXR1cyBOZXdTZXF1ZW50aWFsRmlsZShjb25z
dCBzdGQ6OnN0cmluZyYgZm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNlcXVlbnRpYWxGaWxlKiogcmVzdWx0KSB7Ci0gICAgRklMRSogZiA9IGZvcGVuKGZuYW1lLmNf
c3RyKCksICJyIik7Ci0gICAgaWYgKGYgPT0gTlVMTCkgewotICAgICAgKnJlc3VsdCA9IE5VTEw7
Ci0gICAgICByZXR1cm4gSU9FcnJvcihmbmFtZSwgZXJybm8pOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAqcmVzdWx0ID0gbmV3IFBvc2l4U2VxdWVudGlhbEZpbGUoZm5hbWUsIGYpOwotICAgICAgcmV0
dXJuIFN0YXR1czo6T0soKTsKLSAgICB9Ci0gIH0KLQotICB2aXJ0dWFsIFN0YXR1cyBOZXdSYW5k
b21BY2Nlc3NGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBSYW5kb21BY2Nlc3NGaWxlKiogcmVzdWx0KSB7Ci0gICAgKnJl
c3VsdCA9IE5VTEw7Ci0gICAgU3RhdHVzIHM7Ci0gICAgaW50IGZkID0gb3BlbihmbmFtZS5jX3N0
cigpLCBPX1JET05MWSk7Ci0gICAgaWYgKGZkIDwgMCkgewotICAgICAgcyA9IElPRXJyb3IoZm5h
bWUsIGVycm5vKTsKLSAgICB9IGVsc2UgaWYgKG1tYXBfbGltaXRfLkFjcXVpcmUoKSkgewotICAg
ICAgdWludDY0X3Qgc2l6ZTsKLSAgICAgIHMgPSBHZXRGaWxlU2l6ZShmbmFtZSwgJnNpemUpOwot
ICAgICAgaWYgKHMub2soKSkgewotICAgICAgICB2b2lkKiBiYXNlID0gbW1hcChOVUxMLCBzaXpl
LCBQUk9UX1JFQUQsIE1BUF9TSEFSRUQsIGZkLCAwKTsKLSAgICAgICAgaWYgKGJhc2UgIT0gTUFQ
X0ZBSUxFRCkgewotICAgICAgICAgICpyZXN1bHQgPSBuZXcgUG9zaXhNbWFwUmVhZGFibGVGaWxl
KGZuYW1lLCBiYXNlLCBzaXplLCAmbW1hcF9saW1pdF8pOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgIHMgPSBJT0Vycm9yKGZuYW1lLCBlcnJubyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICAgIGNsb3NlKGZkKTsKLSAgICAgIGlmICghcy5vaygpKSB7Ci0gICAgICAgIG1tYXBfbGltaXRf
LlJlbGVhc2UoKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgKnJlc3VsdCA9IG5ldyBQ
b3NpeFJhbmRvbUFjY2Vzc0ZpbGUoZm5hbWUsIGZkKTsKLSAgICB9Ci0gICAgcmV0dXJuIHM7Ci0g
IH0KLQotICB2aXJ0dWFsIFN0YXR1cyBOZXdXcml0YWJsZUZpbGUoY29uc3Qgc3RkOjpzdHJpbmcm
IGZuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVGaWxlKiog
cmVzdWx0KSB7Ci0gICAgU3RhdHVzIHM7Ci0gICAgY29uc3QgaW50IGZkID0gb3BlbihmbmFtZS5j
X3N0cigpLCBPX0NSRUFUIHwgT19SRFdSIHwgT19UUlVOQywgMDY0NCk7Ci0gICAgaWYgKGZkIDwg
MCkgewotICAgICAgKnJlc3VsdCA9IE5VTEw7Ci0gICAgICBzID0gSU9FcnJvcihmbmFtZSwgZXJy
bm8pOwotICAgIH0gZWxzZSB7Ci0gICAgICAqcmVzdWx0ID0gbmV3IFBvc2l4TW1hcEZpbGUoZm5h
bWUsIGZkLCBwYWdlX3NpemVfKTsKLSAgICB9Ci0gICAgcmV0dXJuIHM7Ci0gIH0KLQotICB2aXJ0
dWFsIGJvb2wgRmlsZUV4aXN0cyhjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUpIHsKLSAgICByZXR1
cm4gYWNjZXNzKGZuYW1lLmNfc3RyKCksIEZfT0spID09IDA7Ci0gIH0KLQotICB2aXJ0dWFsIFN0
YXR1cyBHZXRDaGlsZHJlbihjb25zdCBzdGQ6OnN0cmluZyYgZGlyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4qIHJlc3VsdCkgewotICAgIHJl
c3VsdC0+Y2xlYXIoKTsKLSAgICBESVIqIGQgPSBvcGVuZGlyKGRpci5jX3N0cigpKTsKLSAgICBp
ZiAoZCA9PSBOVUxMKSB7Ci0gICAgICByZXR1cm4gSU9FcnJvcihkaXIsIGVycm5vKTsKLSAgICB9
Ci0gICAgc3RydWN0IGRpcmVudCogZW50cnk7Ci0gICAgd2hpbGUgKChlbnRyeSA9IHJlYWRkaXIo
ZCkpICE9IE5VTEwpIHsKLSAgICAgIHJlc3VsdC0+cHVzaF9iYWNrKGVudHJ5LT5kX25hbWUpOwot
ICAgIH0KLSAgICBjbG9zZWRpcihkKTsKLSAgICByZXR1cm4gU3RhdHVzOjpPSygpOwotICB9Ci0K
LSAgdmlydHVhbCBTdGF0dXMgRGVsZXRlRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUpIHsK
LSAgICBTdGF0dXMgcmVzdWx0OwotICAgIGlmICh1bmxpbmsoZm5hbWUuY19zdHIoKSkgIT0gMCkg
ewotICAgICAgcmVzdWx0ID0gSU9FcnJvcihmbmFtZSwgZXJybm8pOwotICAgIH0KLSAgICByZXR1
cm4gcmVzdWx0OwotICB9OwotCi0gIHZpcnR1YWwgU3RhdHVzIENyZWF0ZURpcihjb25zdCBzdGQ6
OnN0cmluZyYgbmFtZSkgewotICAgIFN0YXR1cyByZXN1bHQ7Ci0gICAgaWYgKG1rZGlyKG5hbWUu
Y19zdHIoKSwgMDc1NSkgIT0gMCkgewotICAgICAgcmVzdWx0ID0gSU9FcnJvcihuYW1lLCBlcnJu
byk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH07Ci0KLSAgdmlydHVhbCBTdGF0dXMg
RGVsZXRlRGlyKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSB7Ci0gICAgU3RhdHVzIHJlc3VsdDsK
LSAgICBpZiAocm1kaXIobmFtZS5jX3N0cigpKSAhPSAwKSB7Ci0gICAgICByZXN1bHQgPSBJT0Vy
cm9yKG5hbWUsIGVycm5vKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfTsKLQotICB2
aXJ0dWFsIFN0YXR1cyBHZXRGaWxlU2l6ZShjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUsIHVpbnQ2
NF90KiBzaXplKSB7Ci0gICAgU3RhdHVzIHM7Ci0gICAgc3RydWN0IHN0YXQgc2J1ZjsKLSAgICBp
ZiAoc3RhdChmbmFtZS5jX3N0cigpLCAmc2J1ZikgIT0gMCkgewotICAgICAgKnNpemUgPSAwOwot
ICAgICAgcyA9IElPRXJyb3IoZm5hbWUsIGVycm5vKTsKLSAgICB9IGVsc2UgewotICAgICAgKnNp
emUgPSBzYnVmLnN0X3NpemU7Ci0gICAgfQotICAgIHJldHVybiBzOwotICB9Ci0KLSAgdmlydHVh
bCBTdGF0dXMgUmVuYW1lRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgc3JjLCBjb25zdCBzdGQ6OnN0
cmluZyYgdGFyZ2V0KSB7Ci0gICAgU3RhdHVzIHJlc3VsdDsKLSAgICBpZiAocmVuYW1lKHNyYy5j
X3N0cigpLCB0YXJnZXQuY19zdHIoKSkgIT0gMCkgewotICAgICAgcmVzdWx0ID0gSU9FcnJvcihz
cmMsIGVycm5vKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHZpcnR1YWwg
U3RhdHVzIExvY2tGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSwgRmlsZUxvY2sqKiBsb2Nr
KSB7Ci0gICAgKmxvY2sgPSBOVUxMOwotICAgIFN0YXR1cyByZXN1bHQ7Ci0gICAgaW50IGZkID0g
b3BlbihmbmFtZS5jX3N0cigpLCBPX1JEV1IgfCBPX0NSRUFULCAwNjQ0KTsKLSAgICBpZiAoZmQg
PCAwKSB7Ci0gICAgICByZXN1bHQgPSBJT0Vycm9yKGZuYW1lLCBlcnJubyk7Ci0gICAgfSBlbHNl
IGlmICghbG9ja3NfLkluc2VydChmbmFtZSkpIHsKLSAgICAgIGNsb3NlKGZkKTsKLSAgICAgIHJl
c3VsdCA9IFN0YXR1czo6SU9FcnJvcigibG9jayAiICsgZm5hbWUsICJhbHJlYWR5IGhlbGQgYnkg
cHJvY2VzcyIpOwotICAgIH0gZWxzZSBpZiAoTG9ja09yVW5sb2NrKGZkLCB0cnVlKSA9PSAtMSkg
ewotICAgICAgcmVzdWx0ID0gSU9FcnJvcigibG9jayAiICsgZm5hbWUsIGVycm5vKTsKLSAgICAg
IGNsb3NlKGZkKTsKLSAgICAgIGxvY2tzXy5SZW1vdmUoZm5hbWUpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICBQb3NpeEZpbGVMb2NrKiBteV9sb2NrID0gbmV3IFBvc2l4RmlsZUxvY2s7Ci0gICAgICBt
eV9sb2NrLT5mZF8gPSBmZDsKLSAgICAgIG15X2xvY2stPm5hbWVfID0gZm5hbWU7Ci0gICAgICAq
bG9jayA9IG15X2xvY2s7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICB2aXJ0
dWFsIFN0YXR1cyBVbmxvY2tGaWxlKEZpbGVMb2NrKiBsb2NrKSB7Ci0gICAgUG9zaXhGaWxlTG9j
ayogbXlfbG9jayA9IHJlaW50ZXJwcmV0X2Nhc3Q8UG9zaXhGaWxlTG9jayo+KGxvY2spOwotICAg
IFN0YXR1cyByZXN1bHQ7Ci0gICAgaWYgKExvY2tPclVubG9jayhteV9sb2NrLT5mZF8sIGZhbHNl
KSA9PSAtMSkgewotICAgICAgcmVzdWx0ID0gSU9FcnJvcigidW5sb2NrIiwgZXJybm8pOwotICAg
IH0KLSAgICBsb2Nrc18uUmVtb3ZlKG15X2xvY2stPm5hbWVfKTsKLSAgICBjbG9zZShteV9sb2Nr
LT5mZF8pOwotICAgIGRlbGV0ZSBteV9sb2NrOwotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQot
ICB2aXJ0dWFsIHZvaWQgU2NoZWR1bGUodm9pZCAoKmZ1bmN0aW9uKSh2b2lkKiksIHZvaWQqIGFy
Zyk7Ci0KLSAgdmlydHVhbCB2b2lkIFN0YXJ0VGhyZWFkKHZvaWQgKCpmdW5jdGlvbikodm9pZCog
YXJnKSwgdm9pZCogYXJnKTsKLQotICB2aXJ0dWFsIFN0YXR1cyBHZXRUZXN0RGlyZWN0b3J5KHN0
ZDo6c3RyaW5nKiByZXN1bHQpIHsKLSAgICBjb25zdCBjaGFyKiBlbnYgPSBnZXRlbnYoIlRFU1Rf
VE1QRElSIik7Ci0gICAgaWYgKGVudiAmJiBlbnZbMF0gIT0gJ1wwJykgewotICAgICAgKnJlc3Vs
dCA9IGVudjsKLSAgICB9IGVsc2UgewotICAgICAgY2hhciBidWZbMTAwXTsKLSAgICAgIHNucHJp
bnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIvdG1wL2xldmVsZGJ0ZXN0LSVkIiwgaW50KGdldGV1aWQo
KSkpOwotICAgICAgKnJlc3VsdCA9IGJ1ZjsKLSAgICB9Ci0gICAgLy8gRGlyZWN0b3J5IG1heSBh
bHJlYWR5IGV4aXN0Ci0gICAgQ3JlYXRlRGlyKCpyZXN1bHQpOwotICAgIHJldHVybiBTdGF0dXM6
Ok9LKCk7Ci0gIH0KLQotICBzdGF0aWMgdWludDY0X3QgZ2V0dGlkKCkgewotICAgIHB0aHJlYWRf
dCB0aWQgPSBwdGhyZWFkX3NlbGYoKTsKLSAgICB1aW50NjRfdCB0aHJlYWRfaWQgPSAwOwotICAg
IG1lbWNweSgmdGhyZWFkX2lkLCAmdGlkLCBzdGQ6Om1pbihzaXplb2YodGhyZWFkX2lkKSwgc2l6
ZW9mKHRpZCkpKTsKLSAgICByZXR1cm4gdGhyZWFkX2lkOwotICB9Ci0KLSAgdmlydHVhbCBTdGF0
dXMgTmV3TG9nZ2VyKGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSwgTG9nZ2VyKiogcmVzdWx0KSB7
Ci0gICAgRklMRSogZiA9IGZvcGVuKGZuYW1lLmNfc3RyKCksICJ3Iik7Ci0gICAgaWYgKGYgPT0g
TlVMTCkgewotICAgICAgKnJlc3VsdCA9IE5VTEw7Ci0gICAgICByZXR1cm4gSU9FcnJvcihmbmFt
ZSwgZXJybm8pOwotICAgIH0gZWxzZSB7Ci0gICAgICAqcmVzdWx0ID0gbmV3IFBvc2l4TG9nZ2Vy
KGYsICZQb3NpeEVudjo6Z2V0dGlkKTsKLSAgICAgIHJldHVybiBTdGF0dXM6Ok9LKCk7Ci0gICAg
fQotICB9Ci0KLSAgdmlydHVhbCB1aW50NjRfdCBOb3dNaWNyb3MoKSB7Ci0gICAgc3RydWN0IHRp
bWV2YWwgdHY7Ci0gICAgZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHVpbnQ2NF90Pih0di50dl9zZWMpICogMTAwMDAwMCArIHR2LnR2X3VzZWM7Ci0gIH0K
LQotICB2aXJ0dWFsIHZvaWQgU2xlZXBGb3JNaWNyb3NlY29uZHMoaW50IG1pY3JvcykgewotICAg
IHVzbGVlcChtaWNyb3MpOwotICB9Ci0KLSBwcml2YXRlOgotICB2b2lkIFB0aHJlYWRDYWxsKGNv
bnN0IGNoYXIqIGxhYmVsLCBpbnQgcmVzdWx0KSB7Ci0gICAgaWYgKHJlc3VsdCAhPSAwKSB7Ci0g
ICAgICBmcHJpbnRmKHN0ZGVyciwgInB0aHJlYWQgJXM6ICVzXG4iLCBsYWJlbCwgc3RyZXJyb3Io
cmVzdWx0KSk7Ci0gICAgICBleGl0KDEpOwotICAgIH0KLSAgfQotCi0gIC8vIEJHVGhyZWFkKCkg
aXMgdGhlIGJvZHkgb2YgdGhlIGJhY2tncm91bmQgdGhyZWFkCi0gIHZvaWQgQkdUaHJlYWQoKTsK
LSAgc3RhdGljIHZvaWQqIEJHVGhyZWFkV3JhcHBlcih2b2lkKiBhcmcpIHsKLSAgICByZWludGVy
cHJldF9jYXN0PFBvc2l4RW52Kj4oYXJnKS0+QkdUaHJlYWQoKTsKLSAgICByZXR1cm4gTlVMTDsK
LSAgfQotCi0gIHNpemVfdCBwYWdlX3NpemVfOwotICBwdGhyZWFkX211dGV4X3QgbXVfOwotICBw
dGhyZWFkX2NvbmRfdCBiZ3NpZ25hbF87Ci0gIHB0aHJlYWRfdCBiZ3RocmVhZF87Ci0gIGJvb2wg
c3RhcnRlZF9iZ3RocmVhZF87Ci0KLSAgLy8gRW50cnkgcGVyIFNjaGVkdWxlKCkgY2FsbAotICBz
dHJ1Y3QgQkdJdGVtIHsgdm9pZCogYXJnOyB2b2lkICgqZnVuY3Rpb24pKHZvaWQqKTsgfTsKLSAg
dHlwZWRlZiBzdGQ6OmRlcXVlPEJHSXRlbT4gQkdRdWV1ZTsKLSAgQkdRdWV1ZSBxdWV1ZV87Ci0K
LSAgUG9zaXhMb2NrVGFibGUgbG9ja3NfOwotICBNbWFwTGltaXRlciBtbWFwX2xpbWl0XzsKLX07
Ci0KLVBvc2l4RW52OjpQb3NpeEVudigpIDogcGFnZV9zaXplXyhnZXRwYWdlc2l6ZSgpKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZF9iZ3RocmVhZF8oZmFsc2UpIHsKLSAgUHRocmVh
ZENhbGwoIm11dGV4X2luaXQiLCBwdGhyZWFkX211dGV4X2luaXQoJm11XywgTlVMTCkpOwotICBQ
dGhyZWFkQ2FsbCgiY3Zhcl9pbml0IiwgcHRocmVhZF9jb25kX2luaXQoJmJnc2lnbmFsXywgTlVM
TCkpOwotfQotCi12b2lkIFBvc2l4RW52OjpTY2hlZHVsZSh2b2lkICgqZnVuY3Rpb24pKHZvaWQq
KSwgdm9pZCogYXJnKSB7Ci0gIFB0aHJlYWRDYWxsKCJsb2NrIiwgcHRocmVhZF9tdXRleF9sb2Nr
KCZtdV8pKTsKLQotICAvLyBTdGFydCBiYWNrZ3JvdW5kIHRocmVhZCBpZiBuZWNlc3NhcnkKLSAg
aWYgKCFzdGFydGVkX2JndGhyZWFkXykgewotICAgIHN0YXJ0ZWRfYmd0aHJlYWRfID0gdHJ1ZTsK
LSAgICBQdGhyZWFkQ2FsbCgKLSAgICAgICAgImNyZWF0ZSB0aHJlYWQiLAotICAgICAgICBwdGhy
ZWFkX2NyZWF0ZSgmYmd0aHJlYWRfLCBOVUxMLCAgJlBvc2l4RW52OjpCR1RocmVhZFdyYXBwZXIs
IHRoaXMpKTsKLSAgfQotCi0gIC8vIElmIHRoZSBxdWV1ZSBpcyBjdXJyZW50bHkgZW1wdHksIHRo
ZSBiYWNrZ3JvdW5kIHRocmVhZCBtYXkgY3VycmVudGx5IGJlCi0gIC8vIHdhaXRpbmcuCi0gIGlm
IChxdWV1ZV8uZW1wdHkoKSkgewotICAgIFB0aHJlYWRDYWxsKCJzaWduYWwiLCBwdGhyZWFkX2Nv
bmRfc2lnbmFsKCZiZ3NpZ25hbF8pKTsKLSAgfQotCi0gIC8vIEFkZCB0byBwcmlvcml0eSBxdWV1
ZQotICBxdWV1ZV8ucHVzaF9iYWNrKEJHSXRlbSgpKTsKLSAgcXVldWVfLmJhY2soKS5mdW5jdGlv
biA9IGZ1bmN0aW9uOwotICBxdWV1ZV8uYmFjaygpLmFyZyA9IGFyZzsKLQotICBQdGhyZWFkQ2Fs
bCgidW5sb2NrIiwgcHRocmVhZF9tdXRleF91bmxvY2soJm11XykpOwotfQotCi12b2lkIFBvc2l4
RW52OjpCR1RocmVhZCgpIHsKLSAgd2hpbGUgKHRydWUpIHsKLSAgICAvLyBXYWl0IHVudGlsIHRo
ZXJlIGlzIGFuIGl0ZW0gdGhhdCBpcyByZWFkeSB0byBydW4KLSAgICBQdGhyZWFkQ2FsbCgibG9j
ayIsIHB0aHJlYWRfbXV0ZXhfbG9jaygmbXVfKSk7Ci0gICAgd2hpbGUgKHF1ZXVlXy5lbXB0eSgp
KSB7Ci0gICAgICBQdGhyZWFkQ2FsbCgid2FpdCIsIHB0aHJlYWRfY29uZF93YWl0KCZiZ3NpZ25h
bF8sICZtdV8pKTsKLSAgICB9Ci0KLSAgICB2b2lkICgqZnVuY3Rpb24pKHZvaWQqKSA9IHF1ZXVl
Xy5mcm9udCgpLmZ1bmN0aW9uOwotICAgIHZvaWQqIGFyZyA9IHF1ZXVlXy5mcm9udCgpLmFyZzsK
LSAgICBxdWV1ZV8ucG9wX2Zyb250KCk7Ci0KLSAgICBQdGhyZWFkQ2FsbCgidW5sb2NrIiwgcHRo
cmVhZF9tdXRleF91bmxvY2soJm11XykpOwotICAgICgqZnVuY3Rpb24pKGFyZyk7Ci0gIH0KLX0K
LQotbmFtZXNwYWNlIHsKLXN0cnVjdCBTdGFydFRocmVhZFN0YXRlIHsKLSAgdm9pZCAoKnVzZXJf
ZnVuY3Rpb24pKHZvaWQqKTsKLSAgdm9pZCogYXJnOwotfTsKLX0KLXN0YXRpYyB2b2lkKiBTdGFy
dFRocmVhZFdyYXBwZXIodm9pZCogYXJnKSB7Ci0gIFN0YXJ0VGhyZWFkU3RhdGUqIHN0YXRlID0g
cmVpbnRlcnByZXRfY2FzdDxTdGFydFRocmVhZFN0YXRlKj4oYXJnKTsKLSAgc3RhdGUtPnVzZXJf
ZnVuY3Rpb24oc3RhdGUtPmFyZyk7Ci0gIGRlbGV0ZSBzdGF0ZTsKLSAgcmV0dXJuIE5VTEw7Ci19
Ci0KLXZvaWQgUG9zaXhFbnY6OlN0YXJ0VGhyZWFkKHZvaWQgKCpmdW5jdGlvbikodm9pZCogYXJn
KSwgdm9pZCogYXJnKSB7Ci0gIHB0aHJlYWRfdCB0OwotICBTdGFydFRocmVhZFN0YXRlKiBzdGF0
ZSA9IG5ldyBTdGFydFRocmVhZFN0YXRlOwotICBzdGF0ZS0+dXNlcl9mdW5jdGlvbiA9IGZ1bmN0
aW9uOwotICBzdGF0ZS0+YXJnID0gYXJnOwotICBQdGhyZWFkQ2FsbCgic3RhcnQgdGhyZWFkIiwK
LSAgICAgICAgICAgICAgcHRocmVhZF9jcmVhdGUoJnQsIE5VTEwsICAmU3RhcnRUaHJlYWRXcmFw
cGVyLCBzdGF0ZSkpOwotfQotCi19ICAvLyBuYW1lc3BhY2UKLQotc3RhdGljIHB0aHJlYWRfb25j
ZV90IG9uY2UgPSBQVEhSRUFEX09OQ0VfSU5JVDsKLXN0YXRpYyBFbnYqIGRlZmF1bHRfZW52Owot
c3RhdGljIHZvaWQgSW5pdERlZmF1bHRFbnYoKSB7IGRlZmF1bHRfZW52ID0gbmV3IFBvc2l4RW52
OyB9Ci0KLUVudiogRW52OjpEZWZhdWx0KCkgewotICBwdGhyZWFkX29uY2UoJm9uY2UsIEluaXRE
ZWZhdWx0RW52KTsKLSAgcmV0dXJuIGRlZmF1bHRfZW52OwotfQotCi19ICAvLyBuYW1lc3BhY2Ug
bGV2ZWxkYgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2Vudl90
ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2Vudl90ZXN0LmNjCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzJjYjQ0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvdXRpbC9lbnZfdGVzdC5jYworKysgL2Rldi9udWxsCkBAIC0xLDEw
NCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMu
Ci0KLSNpbmNsdWRlICJsZXZlbGRiL2Vudi5oIgotCi0jaW5jbHVkZSAicG9ydC9wb3J0LmgiCi0j
aW5jbHVkZSAidXRpbC90ZXN0aGFybmVzcy5oIgotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7Ci0KLXN0
YXRpYyBjb25zdCBpbnQga0RlbGF5TWljcm9zID0gMTAwMDAwOwotCi1jbGFzcyBFbnZQb3NpeFRl
c3QgewotIHByaXZhdGU6Ci0gIHBvcnQ6Ok11dGV4IG11XzsKLSAgc3RkOjpzdHJpbmcgZXZlbnRz
XzsKLQotIHB1YmxpYzoKLSAgRW52KiBlbnZfOwotICBFbnZQb3NpeFRlc3QoKSA6IGVudl8oRW52
OjpEZWZhdWx0KCkpIHsgfQotfTsKLQotc3RhdGljIHZvaWQgU2V0Qm9vbCh2b2lkKiBwdHIpIHsK
LSAgcmVpbnRlcnByZXRfY2FzdDxwb3J0OjpBdG9taWNQb2ludGVyKj4ocHRyKS0+Tm9CYXJyaWVy
X1N0b3JlKHB0cik7Ci19Ci0KLVRFU1QoRW52UG9zaXhUZXN0LCBSdW5JbW1lZGlhdGVseSkgewot
ICBwb3J0OjpBdG9taWNQb2ludGVyIGNhbGxlZCAoTlVMTCk7Ci0gIGVudl8tPlNjaGVkdWxlKCZT
ZXRCb29sLCAmY2FsbGVkKTsKLSAgRW52OjpEZWZhdWx0KCktPlNsZWVwRm9yTWljcm9zZWNvbmRz
KGtEZWxheU1pY3Jvcyk7Ci0gIEFTU0VSVF9UUlVFKGNhbGxlZC5Ob0JhcnJpZXJfTG9hZCgpICE9
IE5VTEwpOwotfQotCi1URVNUKEVudlBvc2l4VGVzdCwgUnVuTWFueSkgewotICBwb3J0OjpBdG9t
aWNQb2ludGVyIGxhc3RfaWQgKE5VTEwpOwotCi0gIHN0cnVjdCBDQiB7Ci0gICAgcG9ydDo6QXRv
bWljUG9pbnRlciogbGFzdF9pZF9wdHI7ICAgLy8gUG9pbnRlciB0byBzaGFyZWQgc2xvdAotICAg
IHVpbnRwdHJfdCBpZDsgICAgICAgICAgICAgLy8gT3JkZXIjIGZvciB0aGUgZXhlY3V0aW9uIG9m
IHRoaXMgY2FsbGJhY2sKLQotICAgIENCKHBvcnQ6OkF0b21pY1BvaW50ZXIqIHAsIGludCBpKSA6
IGxhc3RfaWRfcHRyKHApLCBpZChpKSB7IH0KLQotICAgIHN0YXRpYyB2b2lkIFJ1bih2b2lkKiB2
KSB7Ci0gICAgICBDQiogY2IgPSByZWludGVycHJldF9jYXN0PENCKj4odik7Ci0gICAgICB2b2lk
KiBjdXIgPSBjYi0+bGFzdF9pZF9wdHItPk5vQmFycmllcl9Mb2FkKCk7Ci0gICAgICBBU1NFUlRf
RVEoY2ItPmlkLTEsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjdXIpKTsKLSAgICAgIGNi
LT5sYXN0X2lkX3B0ci0+UmVsZWFzZV9TdG9yZShyZWludGVycHJldF9jYXN0PHZvaWQqPihjYi0+
aWQpKTsKLSAgICB9Ci0gIH07Ci0KLSAgLy8gU2NoZWR1bGUgaW4gZGlmZmVyZW50IG9yZGVyIHRo
YW4gc3RhcnQgdGltZQotICBDQiBjYjEoJmxhc3RfaWQsIDEpOwotICBDQiBjYjIoJmxhc3RfaWQs
IDIpOwotICBDQiBjYjMoJmxhc3RfaWQsIDMpOwotICBDQiBjYjQoJmxhc3RfaWQsIDQpOwotICBl
bnZfLT5TY2hlZHVsZSgmQ0I6OlJ1biwgJmNiMSk7Ci0gIGVudl8tPlNjaGVkdWxlKCZDQjo6UnVu
LCAmY2IyKTsKLSAgZW52Xy0+U2NoZWR1bGUoJkNCOjpSdW4sICZjYjMpOwotICBlbnZfLT5TY2hl
ZHVsZSgmQ0I6OlJ1biwgJmNiNCk7Ci0KLSAgRW52OjpEZWZhdWx0KCktPlNsZWVwRm9yTWljcm9z
ZWNvbmRzKGtEZWxheU1pY3Jvcyk7Ci0gIHZvaWQqIGN1ciA9IGxhc3RfaWQuQWNxdWlyZV9Mb2Fk
KCk7Ci0gIEFTU0VSVF9FUSg0LCByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY3VyKSk7Ci19
Ci0KLXN0cnVjdCBTdGF0ZSB7Ci0gIHBvcnQ6Ok11dGV4IG11OwotICBpbnQgdmFsOwotICBpbnQg
bnVtX3J1bm5pbmc7Ci19OwotCi1zdGF0aWMgdm9pZCBUaHJlYWRCb2R5KHZvaWQqIGFyZykgewot
ICBTdGF0ZSogcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3RhdGUqPihhcmcpOwotICBzLT5tdS5Mb2Nr
KCk7Ci0gIHMtPnZhbCArPSAxOwotICBzLT5udW1fcnVubmluZyAtPSAxOwotICBzLT5tdS5Vbmxv
Y2soKTsKLX0KLQotVEVTVChFbnZQb3NpeFRlc3QsIFN0YXJ0VGhyZWFkKSB7Ci0gIFN0YXRlIHN0
YXRlOwotICBzdGF0ZS52YWwgPSAwOwotICBzdGF0ZS5udW1fcnVubmluZyA9IDM7Ci0gIGZvciAo
aW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0gICAgZW52Xy0+U3RhcnRUaHJlYWQoJlRocmVhZEJv
ZHksICZzdGF0ZSk7Ci0gIH0KLSAgd2hpbGUgKHRydWUpIHsKLSAgICBzdGF0ZS5tdS5Mb2NrKCk7
Ci0gICAgaW50IG51bSA9IHN0YXRlLm51bV9ydW5uaW5nOwotICAgIHN0YXRlLm11LlVubG9jaygp
OwotICAgIGlmIChudW0gPT0gMCkgewotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIEVudjo6RGVm
YXVsdCgpLT5TbGVlcEZvck1pY3Jvc2Vjb25kcyhrRGVsYXlNaWNyb3MpOwotICB9Ci0gIEFTU0VS
VF9FUShzdGF0ZS52YWwsIDMpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgotCi1pbnQg
bWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKLSAgcmV0dXJuIGxldmVsZGI6OnRlc3Q6OlJ1
bkFsbFRlc3RzKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0
aWwvZmlsdGVyX3BvbGljeS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9maWx0
ZXJfcG9saWN5LmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjA0NWM4Li4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9maWx0ZXJfcG9saWN5LmNj
CisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRo
ZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3Ig
bmFtZXMgb2YgY29udHJpYnV0b3JzLgotCi0jaW5jbHVkZSAibGV2ZWxkYi9maWx0ZXJfcG9saWN5
LmgiCi0KLW5hbWVzcGFjZSBsZXZlbGRiIHsKLQotRmlsdGVyUG9saWN5Ojp+RmlsdGVyUG9saWN5
KCkgeyB9Ci0KLX0gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL3V0aWwvaGFzaC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
dXRpbC9oYXNoLmNjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTE4MTgwLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9oYXNoLmNjCisrKyAvZGV2
L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERC
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2Yg
Y29udHJpYnV0b3JzLgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSAidXRpbC9jb2Rp
bmcuaCIKLSNpbmNsdWRlICJ1dGlsL2hhc2guaCIKLQotbmFtZXNwYWNlIGxldmVsZGIgewotCi11
aW50MzJfdCBIYXNoKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBuLCB1aW50MzJfdCBzZWVkKSB7
Ci0gIC8vIFNpbWlsYXIgdG8gbXVybXVyIGhhc2gKLSAgY29uc3QgdWludDMyX3QgbSA9IDB4YzZh
NGE3OTM7Ci0gIGNvbnN0IHVpbnQzMl90IHIgPSAyNDsKLSAgY29uc3QgY2hhciogbGltaXQgPSBk
YXRhICsgbjsKLSAgdWludDMyX3QgaCA9IHNlZWQgXiAobiAqIG0pOwotCi0gIC8vIFBpY2sgdXAg
Zm91ciBieXRlcyBhdCBhIHRpbWUKLSAgd2hpbGUgKGRhdGEgKyA0IDw9IGxpbWl0KSB7Ci0gICAg
dWludDMyX3QgdyA9IERlY29kZUZpeGVkMzIoZGF0YSk7Ci0gICAgZGF0YSArPSA0OwotICAgIGgg
Kz0gdzsKLSAgICBoICo9IG07Ci0gICAgaCBePSAoaCA+PiAxNik7Ci0gIH0KLQotICAvLyBQaWNr
IHVwIHJlbWFpbmluZyBieXRlcwotICBzd2l0Y2ggKGxpbWl0IC0gZGF0YSkgewotICAgIGNhc2Ug
MzoKLSAgICAgIGggKz0gZGF0YVsyXSA8PCAxNjsKLSAgICAgIC8vIGZhbGwgdGhyb3VnaAotICAg
IGNhc2UgMjoKLSAgICAgIGggKz0gZGF0YVsxXSA8PCA4OwotICAgICAgLy8gZmFsbCB0aHJvdWdo
Ci0gICAgY2FzZSAxOgotICAgICAgaCArPSBkYXRhWzBdOwotICAgICAgaCAqPSBtOwotICAgICAg
aCBePSAoaCA+PiByKTsKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiBoOwotfQotCi0KLX0g
IC8vIG5hbWVzcGFjZSBsZXZlbGRiCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZl
bGRiL3V0aWwvaGFzaC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2hhc2guaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg4OWQ1Ni4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvaGFzaC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTkg
KzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgot
Ly8KLS8vIFNpbXBsZSBoYXNoIGZ1bmN0aW9uIHVzZWQgZm9yIGludGVybmFsIGRhdGEgc3RydWN0
dXJlcwotCi0jaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9VVElMX0hBU0hfSF8KLSNkZWZpbmUgU1RP
UkFHRV9MRVZFTERCX1VUSUxfSEFTSF9IXwotCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVk
ZSA8c3RkaW50Lmg+Ci0KLW5hbWVzcGFjZSBsZXZlbGRiIHsKLQotZXh0ZXJuIHVpbnQzMl90IEhh
c2goY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IG4sIHVpbnQzMl90IHNlZWQpOwotCi19Ci0KLSNl
bmRpZiAgLy8gU1RPUkFHRV9MRVZFTERCX1VUSUxfSEFTSF9IXwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2hpc3RvZ3JhbS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvdXRpbC9oaXN0b2dyYW0uY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGJiOTVmNTguLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2hp
c3RvZ3JhbS5jYworKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9S
UyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0j
aW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlICJwb3J0L3BvcnQuaCIKLSNpbmNsdWRlICJ1dGls
L2hpc3RvZ3JhbS5oIgotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7Ci0KLWNvbnN0IGRvdWJsZSBIaXN0
b2dyYW06OmtCdWNrZXRMaW1pdFtrTnVtQnVja2V0c10gPSB7Ci0gIDEsIDIsIDMsIDQsIDUsIDYs
IDcsIDgsIDksIDEwLCAxMiwgMTQsIDE2LCAxOCwgMjAsIDI1LCAzMCwgMzUsIDQwLCA0NSwKLSAg
NTAsIDYwLCA3MCwgODAsIDkwLCAxMDAsIDEyMCwgMTQwLCAxNjAsIDE4MCwgMjAwLCAyNTAsIDMw
MCwgMzUwLCA0MDAsIDQ1MCwKLSAgNTAwLCA2MDAsIDcwMCwgODAwLCA5MDAsIDEwMDAsIDEyMDAs
IDE0MDAsIDE2MDAsIDE4MDAsIDIwMDAsIDI1MDAsIDMwMDAsCi0gIDM1MDAsIDQwMDAsIDQ1MDAs
IDUwMDAsIDYwMDAsIDcwMDAsIDgwMDAsIDkwMDAsIDEwMDAwLCAxMjAwMCwgMTQwMDAsCi0gIDE2
MDAwLCAxODAwMCwgMjAwMDAsIDI1MDAwLCAzMDAwMCwgMzUwMDAsIDQwMDAwLCA0NTAwMCwgNTAw
MDAsIDYwMDAwLAotICA3MDAwMCwgODAwMDAsIDkwMDAwLCAxMDAwMDAsIDEyMDAwMCwgMTQwMDAw
LCAxNjAwMDAsIDE4MDAwMCwgMjAwMDAwLAotICAyNTAwMDAsIDMwMDAwMCwgMzUwMDAwLCA0MDAw
MDAsIDQ1MDAwMCwgNTAwMDAwLCA2MDAwMDAsIDcwMDAwMCwgODAwMDAwLAotICA5MDAwMDAsIDEw
MDAwMDAsIDEyMDAwMDAsIDE0MDAwMDAsIDE2MDAwMDAsIDE4MDAwMDAsIDIwMDAwMDAsIDI1MDAw
MDAsCi0gIDMwMDAwMDAsIDM1MDAwMDAsIDQwMDAwMDAsIDQ1MDAwMDAsIDUwMDAwMDAsIDYwMDAw
MDAsIDcwMDAwMDAsIDgwMDAwMDAsCi0gIDkwMDAwMDAsIDEwMDAwMDAwLCAxMjAwMDAwMCwgMTQw
MDAwMDAsIDE2MDAwMDAwLCAxODAwMDAwMCwgMjAwMDAwMDAsCi0gIDI1MDAwMDAwLCAzMDAwMDAw
MCwgMzUwMDAwMDAsIDQwMDAwMDAwLCA0NTAwMDAwMCwgNTAwMDAwMDAsIDYwMDAwMDAwLAotICA3
MDAwMDAwMCwgODAwMDAwMDAsIDkwMDAwMDAwLCAxMDAwMDAwMDAsIDEyMDAwMDAwMCwgMTQwMDAw
MDAwLCAxNjAwMDAwMDAsCi0gIDE4MDAwMDAwMCwgMjAwMDAwMDAwLCAyNTAwMDAwMDAsIDMwMDAw
MDAwMCwgMzUwMDAwMDAwLCA0MDAwMDAwMDAsCi0gIDQ1MDAwMDAwMCwgNTAwMDAwMDAwLCA2MDAw
MDAwMDAsIDcwMDAwMDAwMCwgODAwMDAwMDAwLCA5MDAwMDAwMDAsCi0gIDEwMDAwMDAwMDAsIDEy
MDAwMDAwMDAsIDE0MDAwMDAwMDAsIDE2MDAwMDAwMDAsIDE4MDAwMDAwMDAsIDIwMDAwMDAwMDAs
Ci0gIDI1MDAwMDAwMDAuMCwgMzAwMDAwMDAwMC4wLCAzNTAwMDAwMDAwLjAsIDQwMDAwMDAwMDAu
MCwgNDUwMDAwMDAwMC4wLAotICA1MDAwMDAwMDAwLjAsIDYwMDAwMDAwMDAuMCwgNzAwMDAwMDAw
MC4wLCA4MDAwMDAwMDAwLjAsIDkwMDAwMDAwMDAuMCwKLSAgMWUyMDAsCi19OwotCi12b2lkIEhp
c3RvZ3JhbTo6Q2xlYXIoKSB7Ci0gIG1pbl8gPSBrQnVja2V0TGltaXRba051bUJ1Y2tldHMtMV07
Ci0gIG1heF8gPSAwOwotICBudW1fID0gMDsKLSAgc3VtXyA9IDA7Ci0gIHN1bV9zcXVhcmVzXyA9
IDA7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwga051bUJ1Y2tldHM7IGkrKykgewotICAgIGJ1Y2tl
dHNfW2ldID0gMDsKLSAgfQotfQotCi12b2lkIEhpc3RvZ3JhbTo6QWRkKGRvdWJsZSB2YWx1ZSkg
ewotICAvLyBMaW5lYXIgc2VhcmNoIGlzIGZhc3QgZW5vdWdoIGZvciBvdXIgdXNhZ2UgaW4gZGJf
YmVuY2gKLSAgaW50IGIgPSAwOwotICB3aGlsZSAoYiA8IGtOdW1CdWNrZXRzIC0gMSAmJiBrQnVj
a2V0TGltaXRbYl0gPD0gdmFsdWUpIHsKLSAgICBiKys7Ci0gIH0KLSAgYnVja2V0c19bYl0gKz0g
MS4wOwotICBpZiAobWluXyA+IHZhbHVlKSBtaW5fID0gdmFsdWU7Ci0gIGlmIChtYXhfIDwgdmFs
dWUpIG1heF8gPSB2YWx1ZTsKLSAgbnVtXysrOwotICBzdW1fICs9IHZhbHVlOwotICBzdW1fc3F1
YXJlc18gKz0gKHZhbHVlICogdmFsdWUpOwotfQotCi12b2lkIEhpc3RvZ3JhbTo6TWVyZ2UoY29u
c3QgSGlzdG9ncmFtJiBvdGhlcikgewotICBpZiAob3RoZXIubWluXyA8IG1pbl8pIG1pbl8gPSBv
dGhlci5taW5fOwotICBpZiAob3RoZXIubWF4XyA+IG1heF8pIG1heF8gPSBvdGhlci5tYXhfOwot
ICBudW1fICs9IG90aGVyLm51bV87Ci0gIHN1bV8gKz0gb3RoZXIuc3VtXzsKLSAgc3VtX3NxdWFy
ZXNfICs9IG90aGVyLnN1bV9zcXVhcmVzXzsKLSAgZm9yIChpbnQgYiA9IDA7IGIgPCBrTnVtQnVj
a2V0czsgYisrKSB7Ci0gICAgYnVja2V0c19bYl0gKz0gb3RoZXIuYnVja2V0c19bYl07Ci0gIH0K
LX0KLQotZG91YmxlIEhpc3RvZ3JhbTo6TWVkaWFuKCkgY29uc3QgewotICByZXR1cm4gUGVyY2Vu
dGlsZSg1MC4wKTsKLX0KLQotZG91YmxlIEhpc3RvZ3JhbTo6UGVyY2VudGlsZShkb3VibGUgcCkg
Y29uc3QgewotICBkb3VibGUgdGhyZXNob2xkID0gbnVtXyAqIChwIC8gMTAwLjApOwotICBkb3Vi
bGUgc3VtID0gMDsKLSAgZm9yIChpbnQgYiA9IDA7IGIgPCBrTnVtQnVja2V0czsgYisrKSB7Ci0g
ICAgc3VtICs9IGJ1Y2tldHNfW2JdOwotICAgIGlmIChzdW0gPj0gdGhyZXNob2xkKSB7Ci0gICAg
ICAvLyBTY2FsZSBsaW5lYXJseSB3aXRoaW4gdGhpcyBidWNrZXQKLSAgICAgIGRvdWJsZSBsZWZ0
X3BvaW50ID0gKGIgPT0gMCkgPyAwIDoga0J1Y2tldExpbWl0W2ItMV07Ci0gICAgICBkb3VibGUg
cmlnaHRfcG9pbnQgPSBrQnVja2V0TGltaXRbYl07Ci0gICAgICBkb3VibGUgbGVmdF9zdW0gPSBz
dW0gLSBidWNrZXRzX1tiXTsKLSAgICAgIGRvdWJsZSByaWdodF9zdW0gPSBzdW07Ci0gICAgICBk
b3VibGUgcG9zID0gKHRocmVzaG9sZCAtIGxlZnRfc3VtKSAvIChyaWdodF9zdW0gLSBsZWZ0X3N1
bSk7Ci0gICAgICBkb3VibGUgciA9IGxlZnRfcG9pbnQgKyAocmlnaHRfcG9pbnQgLSBsZWZ0X3Bv
aW50KSAqIHBvczsKLSAgICAgIGlmIChyIDwgbWluXykgciA9IG1pbl87Ci0gICAgICBpZiAociA+
IG1heF8pIHIgPSBtYXhfOwotICAgICAgcmV0dXJuIHI7Ci0gICAgfQotICB9Ci0gIHJldHVybiBt
YXhfOwotfQotCi1kb3VibGUgSGlzdG9ncmFtOjpBdmVyYWdlKCkgY29uc3QgewotICBpZiAobnVt
XyA9PSAwLjApIHJldHVybiAwOwotICByZXR1cm4gc3VtXyAvIG51bV87Ci19Ci0KLWRvdWJsZSBI
aXN0b2dyYW06OlN0YW5kYXJkRGV2aWF0aW9uKCkgY29uc3QgewotICBpZiAobnVtXyA9PSAwLjAp
IHJldHVybiAwOwotICBkb3VibGUgdmFyaWFuY2UgPSAoc3VtX3NxdWFyZXNfICogbnVtXyAtIHN1
bV8gKiBzdW1fKSAvIChudW1fICogbnVtXyk7Ci0gIHJldHVybiBzcXJ0KHZhcmlhbmNlKTsKLX0K
LQotc3RkOjpzdHJpbmcgSGlzdG9ncmFtOjpUb1N0cmluZygpIGNvbnN0IHsKLSAgc3RkOjpzdHJp
bmcgcjsKLSAgY2hhciBidWZbMjAwXTsKLSAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwKLSAg
ICAgICAgICAgIkNvdW50OiAlLjBmICBBdmVyYWdlOiAlLjRmICBTdGREZXY6ICUuMmZcbiIsCi0g
ICAgICAgICAgIG51bV8sIEF2ZXJhZ2UoKSwgU3RhbmRhcmREZXZpYXRpb24oKSk7Ci0gIHIuYXBw
ZW5kKGJ1Zik7Ci0gIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksCi0gICAgICAgICAgICJNaW46
ICUuNGYgIE1lZGlhbjogJS40ZiAgTWF4OiAlLjRmXG4iLAotICAgICAgICAgICAobnVtXyA9PSAw
LjAgPyAwLjAgOiBtaW5fKSwgTWVkaWFuKCksIG1heF8pOwotICByLmFwcGVuZChidWYpOwotICBy
LmFwcGVuZCgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tXG4iKTsKLSAgY29uc3QgZG91YmxlIG11bHQgPSAxMDAuMCAvIG51bV87Ci0gIGRvdWJs
ZSBzdW0gPSAwOwotICBmb3IgKGludCBiID0gMDsgYiA8IGtOdW1CdWNrZXRzOyBiKyspIHsKLSAg
ICBpZiAoYnVja2V0c19bYl0gPD0gMC4wKSBjb250aW51ZTsKLSAgICBzdW0gKz0gYnVja2V0c19b
Yl07Ci0gICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwKLSAgICAgICAgICAgICAiWyAlNy4w
ZiwgJTcuMGYgKSAlNy4wZiAlNy4zZiUlICU3LjNmJSUgIiwKLSAgICAgICAgICAgICAoKGIgPT0g
MCkgPyAwLjAgOiBrQnVja2V0TGltaXRbYi0xXSksICAgICAgLy8gbGVmdAotICAgICAgICAgICAg
IGtCdWNrZXRMaW1pdFtiXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByaWdodAotICAg
ICAgICAgICAgIGJ1Y2tldHNfW2JdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBj
b3VudAotICAgICAgICAgICAgIG11bHQgKiBidWNrZXRzX1tiXSwgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBwZXJjZW50YWdlCi0gICAgICAgICAgICAgbXVsdCAqIHN1bSk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGN1bXVsYXRpdmUgcGVyY2VudGFnZQotICAgIHIuYXBwZW5k
KGJ1Zik7Ci0KLSAgICAvLyBBZGQgaGFzaCBtYXJrcyBiYXNlZCBvbiBwZXJjZW50YWdlOyAyMCBt
YXJrcyBmb3IgMTAwJS4KLSAgICBpbnQgbWFya3MgPSBzdGF0aWNfY2FzdDxpbnQ+KDIwKihidWNr
ZXRzX1tiXSAvIG51bV8pICsgMC41KTsKLSAgICByLmFwcGVuZChtYXJrcywgJyMnKTsKLSAgICBy
LnB1c2hfYmFjaygnXG4nKTsKLSAgfQotICByZXR1cm4gcjsKLX0KLQotfSAgLy8gbmFtZXNwYWNl
IGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9oaXN0
b2dyYW0uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9oaXN0b2dyYW0uaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVmOWYzYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvaGlzdG9ncmFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0
MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMu
Ci0KLSNpZm5kZWYgU1RPUkFHRV9MRVZFTERCX1VUSUxfSElTVE9HUkFNX0hfCi0jZGVmaW5lIFNU
T1JBR0VfTEVWRUxEQl9VVElMX0hJU1RPR1JBTV9IXwotCi0jaW5jbHVkZSA8c3RyaW5nPgotCi1u
YW1lc3BhY2UgbGV2ZWxkYiB7Ci0KLWNsYXNzIEhpc3RvZ3JhbSB7Ci0gcHVibGljOgotICBIaXN0
b2dyYW0oKSB7IH0KLSAgfkhpc3RvZ3JhbSgpIHsgfQotCi0gIHZvaWQgQ2xlYXIoKTsKLSAgdm9p
ZCBBZGQoZG91YmxlIHZhbHVlKTsKLSAgdm9pZCBNZXJnZShjb25zdCBIaXN0b2dyYW0mIG90aGVy
KTsKLQotICBzdGQ6OnN0cmluZyBUb1N0cmluZygpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgZG91
YmxlIG1pbl87Ci0gIGRvdWJsZSBtYXhfOwotICBkb3VibGUgbnVtXzsKLSAgZG91YmxlIHN1bV87
Ci0gIGRvdWJsZSBzdW1fc3F1YXJlc187Ci0KLSAgZW51bSB7IGtOdW1CdWNrZXRzID0gMTU0IH07
Ci0gIHN0YXRpYyBjb25zdCBkb3VibGUga0J1Y2tldExpbWl0W2tOdW1CdWNrZXRzXTsKLSAgZG91
YmxlIGJ1Y2tldHNfW2tOdW1CdWNrZXRzXTsKLQotICBkb3VibGUgTWVkaWFuKCkgY29uc3Q7Ci0g
IGRvdWJsZSBQZXJjZW50aWxlKGRvdWJsZSBwKSBjb25zdDsKLSAgZG91YmxlIEF2ZXJhZ2UoKSBj
b25zdDsKLSAgZG91YmxlIFN0YW5kYXJkRGV2aWF0aW9uKCkgY29uc3Q7Ci19OwotCi19ICAvLyBu
YW1lc3BhY2UgbGV2ZWxkYgotCi0jZW5kaWYgIC8vIFNUT1JBR0VfTEVWRUxEQl9VVElMX0hJU1RP
R1JBTV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2xvZ2dp
bmcuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvbG9nZ2luZy5jYwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjJjZjI3OC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL3V0aWwvbG9nZ2luZy5jYworKysgL2Rldi9udWxsCkBAIC0xLDgxICsw
LDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KLQot
I2luY2x1ZGUgInV0aWwvbG9nZ2luZy5oIgotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRl
IDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2lu
Y2x1ZGUgImxldmVsZGIvZW52LmgiCi0jaW5jbHVkZSAibGV2ZWxkYi9zbGljZS5oIgotCi1uYW1l
c3BhY2UgbGV2ZWxkYiB7Ci0KLXZvaWQgQXBwZW5kTnVtYmVyVG8oc3RkOjpzdHJpbmcqIHN0ciwg
dWludDY0X3QgbnVtKSB7Ci0gIGNoYXIgYnVmWzMwXTsKLSAgc25wcmludGYoYnVmLCBzaXplb2Yo
YnVmKSwgIiVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nKSBudW0pOwotICBzdHItPmFwcGVuZChi
dWYpOwotfQotCi12b2lkIEFwcGVuZEVzY2FwZWRTdHJpbmdUbyhzdGQ6OnN0cmluZyogc3RyLCBj
b25zdCBTbGljZSYgdmFsdWUpIHsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZS5zaXpl
KCk7IGkrKykgewotICAgIGNoYXIgYyA9IHZhbHVlW2ldOwotICAgIGlmIChjID49ICcgJyAmJiBj
IDw9ICd+JykgewotICAgICAgc3RyLT5wdXNoX2JhY2soYyk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IGNoYXIgYnVmWzEwXTsKLSAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJcXHglMDJ4
IiwKLSAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oYykgJiAweGZmKTsK
LSAgICAgIHN0ci0+YXBwZW5kKGJ1Zik7Ci0gICAgfQotICB9Ci19Ci0KLXN0ZDo6c3RyaW5nIE51
bWJlclRvU3RyaW5nKHVpbnQ2NF90IG51bSkgewotICBzdGQ6OnN0cmluZyByOwotICBBcHBlbmRO
dW1iZXJUbygmciwgbnVtKTsKLSAgcmV0dXJuIHI7Ci19Ci0KLXN0ZDo6c3RyaW5nIEVzY2FwZVN0
cmluZyhjb25zdCBTbGljZSYgdmFsdWUpIHsKLSAgc3RkOjpzdHJpbmcgcjsKLSAgQXBwZW5kRXNj
YXBlZFN0cmluZ1RvKCZyLCB2YWx1ZSk7Ci0gIHJldHVybiByOwotfQotCi1ib29sIENvbnN1bWVD
aGFyKFNsaWNlKiBpbiwgY2hhciBjKSB7Ci0gIGlmICghaW4tPmVtcHR5KCkgJiYgKCppbilbMF0g
PT0gYykgewotICAgIGluLT5yZW1vdmVfcHJlZml4KDEpOwotICAgIHJldHVybiB0cnVlOwotICB9
IGVsc2UgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQotCi1ib29sIENvbnN1bWVEZWNpbWFs
TnVtYmVyKFNsaWNlKiBpbiwgdWludDY0X3QqIHZhbCkgewotICB1aW50NjRfdCB2ID0gMDsKLSAg
aW50IGRpZ2l0cyA9IDA7Ci0gIHdoaWxlICghaW4tPmVtcHR5KCkpIHsKLSAgICBjaGFyIGMgPSAo
KmluKVswXTsKLSAgICBpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHsKLSAgICAgICsrZGlnaXRz
OwotICAgICAgY29uc3QgaW50IGRlbHRhID0gKGMgLSAnMCcpOwotICAgICAgc3RhdGljIGNvbnN0
IHVpbnQ2NF90IGtNYXhVaW50NjQgPSB+c3RhdGljX2Nhc3Q8dWludDY0X3Q+KDApOwotICAgICAg
aWYgKHYgPiBrTWF4VWludDY0LzEwIHx8Ci0gICAgICAgICAgKHYgPT0ga01heFVpbnQ2NC8xMCAm
JiBkZWx0YSA+IGtNYXhVaW50NjQlMTApKSB7Ci0gICAgICAgIC8vIE92ZXJmbG93Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIHYgPSAodiAqIDEwKSArIGRlbHRhOwotICAg
ICAgaW4tPnJlbW92ZV9wcmVmaXgoMSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGJyZWFrOwotICAg
IH0KLSAgfQotICAqdmFsID0gdjsKLSAgcmV0dXJuIChkaWdpdHMgPiAwKTsKLX0KLQotfSAgLy8g
bmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
dXRpbC9sb2dnaW5nLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvbG9nZ2luZy5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGM1ZGE4Li4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9sb2dnaW5nLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw0NyArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRv
cnMuCi0vLwotLy8gTXVzdCBub3QgYmUgaW5jbHVkZWQgZnJvbSBhbnkgLmggZmlsZXMgdG8gYXZv
aWQgcG9sbHV0aW5nIHRoZSBuYW1lc3BhY2UKLS8vIHdpdGggbWFjcm9zLgotCi0jaWZuZGVmIFNU
T1JBR0VfTEVWRUxEQl9VVElMX0xPR0dJTkdfSF8KLSNkZWZpbmUgU1RPUkFHRV9MRVZFTERCX1VU
SUxfTE9HR0lOR19IXwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4K
LSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSAicG9ydC9wb3J0LmgiCi0KLW5hbWVzcGFjZSBs
ZXZlbGRiIHsKLQotY2xhc3MgU2xpY2U7Ci1jbGFzcyBXcml0YWJsZUZpbGU7Ci0KLS8vIEFwcGVu
ZCBhIGh1bWFuLXJlYWRhYmxlIHByaW50b3V0IG9mICJudW0iIHRvICpzdHIKLWV4dGVybiB2b2lk
IEFwcGVuZE51bWJlclRvKHN0ZDo6c3RyaW5nKiBzdHIsIHVpbnQ2NF90IG51bSk7Ci0KLS8vIEFw
cGVuZCBhIGh1bWFuLXJlYWRhYmxlIHByaW50b3V0IG9mICJ2YWx1ZSIgdG8gKnN0ci4KLS8vIEVz
Y2FwZXMgYW55IG5vbi1wcmludGFibGUgY2hhcmFjdGVycyBmb3VuZCBpbiAidmFsdWUiLgotZXh0
ZXJuIHZvaWQgQXBwZW5kRXNjYXBlZFN0cmluZ1RvKHN0ZDo6c3RyaW5nKiBzdHIsIGNvbnN0IFNs
aWNlJiB2YWx1ZSk7Ci0KLS8vIFJldHVybiBhIGh1bWFuLXJlYWRhYmxlIHByaW50b3V0IG9mICJu
dW0iCi1leHRlcm4gc3RkOjpzdHJpbmcgTnVtYmVyVG9TdHJpbmcodWludDY0X3QgbnVtKTsKLQot
Ly8gUmV0dXJuIGEgaHVtYW4tcmVhZGFibGUgdmVyc2lvbiBvZiAidmFsdWUiLgotLy8gRXNjYXBl
cyBhbnkgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIGZvdW5kIGluICJ2YWx1ZSIuCi1leHRlcm4g
c3RkOjpzdHJpbmcgRXNjYXBlU3RyaW5nKGNvbnN0IFNsaWNlJiB2YWx1ZSk7Ci0KLS8vIElmICpp
biBzdGFydHMgd2l0aCAiYyIsIGFkdmFuY2VzICppbiBwYXN0IHRoZSBmaXJzdCBjaGFyYWN0ZXIg
YW5kCi0vLyByZXR1cm5zIHRydWUuICBPdGhlcndpc2UsIHJldHVybnMgZmFsc2UuCi1leHRlcm4g
Ym9vbCBDb25zdW1lQ2hhcihTbGljZSogaW4sIGNoYXIgYyk7Ci0KLS8vIFBhcnNlIGEgaHVtYW4t
cmVhZGFibGUgbnVtYmVyIGZyb20gIippbiIgaW50byAqdmFsdWUuICBPbiBzdWNjZXNzLAotLy8g
YWR2YW5jZXMgIippbiIgcGFzdCB0aGUgY29uc3VtZWQgbnVtYmVyIGFuZCBzZXRzICIqdmFsIiB0
byB0aGUKLS8vIG51bWVyaWMgdmFsdWUuICBPdGhlcndpc2UsIHJldHVybnMgZmFsc2UgYW5kIGxl
YXZlcyAqaW4gaW4gYW4KLS8vIHVuc3BlY2lmaWVkIHN0YXRlLgotZXh0ZXJuIGJvb2wgQ29uc3Vt
ZURlY2ltYWxOdW1iZXIoU2xpY2UqIGluLCB1aW50NjRfdCogdmFsKTsKLQotfSAgLy8gbmFtZXNw
YWNlIGxldmVsZGIKLQotI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfVVRJTF9MT0dHSU5HX0hf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvbXV0ZXhsb2NrLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvbXV0ZXhsb2NrLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDFmZjVhOWUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi91dGlsL211dGV4bG9jay5oCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBA
QAotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgotCi0jaWZu
ZGVmIFNUT1JBR0VfTEVWRUxEQl9VVElMX01VVEVYTE9DS19IXwotI2RlZmluZSBTVE9SQUdFX0xF
VkVMREJfVVRJTF9NVVRFWExPQ0tfSF8KLQotI2luY2x1ZGUgInBvcnQvcG9ydC5oIgotI2luY2x1
ZGUgInBvcnQvdGhyZWFkX2Fubm90YXRpb25zLmgiCi0KLW5hbWVzcGFjZSBsZXZlbGRiIHsKLQot
Ly8gSGVscGVyIGNsYXNzIHRoYXQgbG9ja3MgYSBtdXRleCBvbiBjb25zdHJ1Y3Rpb24gYW5kIHVu
bG9ja3MgdGhlIG11dGV4IHdoZW4KLS8vIHRoZSBkZXN0cnVjdG9yIG9mIHRoZSBNdXRleExvY2sg
b2JqZWN0IGlzIGludm9rZWQuCi0vLwotLy8gVHlwaWNhbCB1c2FnZToKLS8vCi0vLyAgIHZvaWQg
TXlDbGFzczo6TXlNZXRob2QoKSB7Ci0vLyAgICAgTXV0ZXhMb2NrIGwoJm11Xyk7ICAgICAgIC8v
IG11XyBpcyBhbiBpbnN0YW5jZSB2YXJpYWJsZQotLy8gICAgIC4uLiBzb21lIGNvbXBsZXggY29k
ZSwgcG9zc2libHkgd2l0aCBtdWx0aXBsZSByZXR1cm4gcGF0aHMgLi4uCi0vLyAgIH0KLQotY2xh
c3MgU0NPUEVEX0xPQ0tBQkxFIE11dGV4TG9jayB7Ci0gcHVibGljOgotICBleHBsaWNpdCBNdXRl
eExvY2socG9ydDo6TXV0ZXggKm11KSBFWENMVVNJVkVfTE9DS19GVU5DVElPTihtdSkKLSAgICAg
IDogbXVfKG11KSAgewotICAgIHRoaXMtPm11Xy0+TG9jaygpOwotICB9Ci0gIH5NdXRleExvY2so
KSBVTkxPQ0tfRlVOQ1RJT04oKSB7IHRoaXMtPm11Xy0+VW5sb2NrKCk7IH0KLQotIHByaXZhdGU6
Ci0gIHBvcnQ6Ok11dGV4ICpjb25zdCBtdV87Ci0gIC8vIE5vIGNvcHlpbmcgYWxsb3dlZAotICBN
dXRleExvY2soY29uc3QgTXV0ZXhMb2NrJik7Ci0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IE11dGV4
TG9jayYpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKLQotCi0jZW5kaWYgIC8vIFNU
T1JBR0VfTEVWRUxEQl9VVElMX01VVEVYTE9DS19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi91dGlsL29wdGlvbnMuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRi
L3V0aWwvb3B0aW9ucy5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZhZjViOS4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvb3B0aW9ucy5jYwor
KysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUg
TGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5h
bWVzIG9mIGNvbnRyaWJ1dG9ycy4KLQotI2luY2x1ZGUgImxldmVsZGIvb3B0aW9ucy5oIgotCi0j
aW5jbHVkZSAibGV2ZWxkYi9jb21wYXJhdG9yLmgiCi0jaW5jbHVkZSAibGV2ZWxkYi9lbnYuaCIK
LQotbmFtZXNwYWNlIGxldmVsZGIgewotCi1PcHRpb25zOjpPcHRpb25zKCkKLSAgICA6IGNvbXBh
cmF0b3IoQnl0ZXdpc2VDb21wYXJhdG9yKCkpLAotICAgICAgY3JlYXRlX2lmX21pc3NpbmcoZmFs
c2UpLAotICAgICAgZXJyb3JfaWZfZXhpc3RzKGZhbHNlKSwKLSAgICAgIHBhcmFub2lkX2NoZWNr
cyhmYWxzZSksCi0gICAgICBlbnYoRW52OjpEZWZhdWx0KCkpLAotICAgICAgaW5mb19sb2coTlVM
TCksCi0gICAgICB3cml0ZV9idWZmZXJfc2l6ZSg0PDwyMCksCi0gICAgICBtYXhfb3Blbl9maWxl
cygxMDAwKSwKLSAgICAgIGJsb2NrX2NhY2hlKE5VTEwpLAotICAgICAgYmxvY2tfc2l6ZSg0MDk2
KSwKLSAgICAgIGJsb2NrX3Jlc3RhcnRfaW50ZXJ2YWwoMTYpLAotICAgICAgY29tcHJlc3Npb24o
a1NuYXBweUNvbXByZXNzaW9uKSwKLSAgICAgIGZpbHRlcl9wb2xpY3koTlVMTCkgewotfQotCi0K
LX0gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
ZXZlbGRiL3V0aWwvcG9zaXhfbG9nZ2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0
aWwvcG9zaXhfbG9nZ2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3NDFiMWEu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL3Bvc2l4X2xvZ2dl
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEx
IFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBm
b3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgotLy8KLS8vIExvZ2dlciBpbXBsZW1lbnRhdGlvbiB0
aGF0IGNhbiBiZSBzaGFyZWQgYnkgYWxsIGVudmlyb25tZW50cwotLy8gd2hlcmUgZW5vdWdoIHBv
c2l4IGZ1bmN0aW9uYWxpdHkgaXMgYXZhaWxhYmxlLgotCi0jaWZuZGVmIFNUT1JBR0VfTEVWRUxE
Ql9VVElMX1BPU0lYX0xPR0dFUl9IXwotI2RlZmluZSBTVE9SQUdFX0xFVkVMREJfVVRJTF9QT1NJ
WF9MT0dHRVJfSF8KLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxzdGRpby5oPgot
I2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jaW5jbHVkZSA8dGltZS5oPgotI2luY2x1ZGUgImxldmVs
ZGIvZW52LmgiCi0KLW5hbWVzcGFjZSBsZXZlbGRiIHsKLQotY2xhc3MgUG9zaXhMb2dnZXIgOiBw
dWJsaWMgTG9nZ2VyIHsKLSBwcml2YXRlOgotICBGSUxFKiBmaWxlXzsKLSAgdWludDY0X3QgKCpn
ZXR0aWRfKSgpOyAgLy8gUmV0dXJuIHRoZSB0aHJlYWQgaWQgZm9yIHRoZSBjdXJyZW50IHRocmVh
ZAotIHB1YmxpYzoKLSAgUG9zaXhMb2dnZXIoRklMRSogZiwgdWludDY0X3QgKCpnZXR0aWQpKCkp
IDogZmlsZV8oZiksIGdldHRpZF8oZ2V0dGlkKSB7IH0KLSAgdmlydHVhbCB+UG9zaXhMb2dnZXIo
KSB7Ci0gICAgZmNsb3NlKGZpbGVfKTsKLSAgfQotICB2aXJ0dWFsIHZvaWQgTG9ndihjb25zdCBj
aGFyKiBmb3JtYXQsIHZhX2xpc3QgYXApIHsKLSAgICBjb25zdCB1aW50NjRfdCB0aHJlYWRfaWQg
PSAoKmdldHRpZF8pKCk7Ci0KLSAgICAvLyBXZSB0cnkgdHdpY2U6IHRoZSBmaXJzdCB0aW1lIHdp
dGggYSBmaXhlZC1zaXplIHN0YWNrIGFsbG9jYXRlZCBidWZmZXIsCi0gICAgLy8gYW5kIHRoZSBz
ZWNvbmQgdGltZSB3aXRoIGEgbXVjaCBsYXJnZXIgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGJ1ZmZl
ci4KLSAgICBjaGFyIGJ1ZmZlcls1MDBdOwotICAgIGZvciAoaW50IGl0ZXIgPSAwOyBpdGVyIDwg
MjsgaXRlcisrKSB7Ci0gICAgICBjaGFyKiBiYXNlOwotICAgICAgaW50IGJ1ZnNpemU7Ci0gICAg
ICBpZiAoaXRlciA9PSAwKSB7Ci0gICAgICAgIGJ1ZnNpemUgPSBzaXplb2YoYnVmZmVyKTsKLSAg
ICAgICAgYmFzZSA9IGJ1ZmZlcjsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGJ1ZnNpemUgPSAz
MDAwMDsKLSAgICAgICAgYmFzZSA9IG5ldyBjaGFyW2J1ZnNpemVdOwotICAgICAgfQotICAgICAg
Y2hhciogcCA9IGJhc2U7Ci0gICAgICBjaGFyKiBsaW1pdCA9IGJhc2UgKyBidWZzaXplOwotCi0g
ICAgICBzdHJ1Y3QgdGltZXZhbCBub3dfdHY7Ci0gICAgICBnZXR0aW1lb2ZkYXkoJm5vd190diwg
TlVMTCk7Ci0gICAgICBjb25zdCB0aW1lX3Qgc2Vjb25kcyA9IG5vd190di50dl9zZWM7Ci0gICAg
ICBzdHJ1Y3QgdG0gdDsKLSAgICAgIGxvY2FsdGltZV9yKCZzZWNvbmRzLCAmdCk7Ci0gICAgICBw
ICs9IHNucHJpbnRmKHAsIGxpbWl0IC0gcCwKLSAgICAgICAgICAgICAgICAgICAgIiUwNGQvJTAy
ZC8lMDJkLSUwMmQ6JTAyZDolMDJkLiUwNmQgJWxseCAiLAotICAgICAgICAgICAgICAgICAgICB0
LnRtX3llYXIgKyAxOTAwLAotICAgICAgICAgICAgICAgICAgICB0LnRtX21vbiArIDEsCi0gICAg
ICAgICAgICAgICAgICAgIHQudG1fbWRheSwKLSAgICAgICAgICAgICAgICAgICAgdC50bV9ob3Vy
LAotICAgICAgICAgICAgICAgICAgICB0LnRtX21pbiwKLSAgICAgICAgICAgICAgICAgICAgdC50
bV9zZWMsCi0gICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4obm93X3R2LnR2X3Vz
ZWMpLAotICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxsb25nIGxvbmcgdW5zaWduZWQg
aW50Pih0aHJlYWRfaWQpKTsKLQotICAgICAgLy8gUHJpbnQgdGhlIG1lc3NhZ2UKLSAgICAgIGlm
IChwIDwgbGltaXQpIHsKLSAgICAgICAgdmFfbGlzdCBiYWNrdXBfYXA7Ci0gICAgICAgIHZhX2Nv
cHkoYmFja3VwX2FwLCBhcCk7Ci0gICAgICAgIHAgKz0gdnNucHJpbnRmKHAsIGxpbWl0IC0gcCwg
Zm9ybWF0LCBiYWNrdXBfYXApOwotICAgICAgICB2YV9lbmQoYmFja3VwX2FwKTsKLSAgICAgIH0K
LQotICAgICAgLy8gVHJ1bmNhdGUgdG8gYXZhaWxhYmxlIHNwYWNlIGlmIG5lY2Vzc2FyeQotICAg
ICAgaWYgKHAgPj0gbGltaXQpIHsKLSAgICAgICAgaWYgKGl0ZXIgPT0gMCkgewotICAgICAgICAg
IGNvbnRpbnVlOyAgICAgICAvLyBUcnkgYWdhaW4gd2l0aCBsYXJnZXIgYnVmZmVyCi0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgcCA9IGxpbWl0IC0gMTsKLSAgICAgICAgfQotICAgICAgfQot
Ci0gICAgICAvLyBBZGQgbmV3bGluZSBpZiBuZWNlc3NhcnkKLSAgICAgIGlmIChwID09IGJhc2Ug
fHwgcFstMV0gIT0gJ1xuJykgewotICAgICAgICAqcCsrID0gJ1xuJzsKLSAgICAgIH0KLQotICAg
ICAgYXNzZXJ0KHAgPD0gbGltaXQpOwotICAgICAgZndyaXRlKGJhc2UsIDEsIHAgLSBiYXNlLCBm
aWxlXyk7Ci0gICAgICBmZmx1c2goZmlsZV8pOwotICAgICAgaWYgKGJhc2UgIT0gYnVmZmVyKSB7
Ci0gICAgICAgIGRlbGV0ZVtdIGJhc2U7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0g
IH0KLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCi0KLSNlbmRpZiAgLy8gU1RPUkFHRV9M
RVZFTERCX1VUSUxfUE9TSVhfTE9HR0VSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL3V0aWwvcmFuZG9tLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwv
cmFuZG9tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3NTM4MjQuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL3JhbmRvbS5oCisrKyAvZGV2L251
bGwKQEAgLTEsNTkgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29u
dHJpYnV0b3JzLgotCi0jaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9VVElMX1JBTkRPTV9IXwotI2Rl
ZmluZSBTVE9SQUdFX0xFVkVMREJfVVRJTF9SQU5ET01fSF8KLQotI2luY2x1ZGUgPHN0ZGludC5o
PgotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7Ci0KLS8vIEEgdmVyeSBzaW1wbGUgcmFuZG9tIG51bWJl
ciBnZW5lcmF0b3IuICBOb3QgZXNwZWNpYWxseSBnb29kIGF0Ci0vLyBnZW5lcmF0aW5nIHRydWx5
IHJhbmRvbSBiaXRzLCBidXQgZ29vZCBlbm91Z2ggZm9yIG91ciBuZWVkcyBpbiB0aGlzCi0vLyBw
YWNrYWdlLgotY2xhc3MgUmFuZG9tIHsKLSBwcml2YXRlOgotICB1aW50MzJfdCBzZWVkXzsKLSBw
dWJsaWM6Ci0gIGV4cGxpY2l0IFJhbmRvbSh1aW50MzJfdCBzKSA6IHNlZWRfKHMgJiAweDdmZmZm
ZmZmdSkgeyB9Ci0gIHVpbnQzMl90IE5leHQoKSB7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQzMl90
IE0gPSAyMTQ3NDgzNjQ3TDsgICAvLyAyXjMxLTEKLSAgICBzdGF0aWMgY29uc3QgdWludDY0X3Qg
QSA9IDE2ODA3OyAgLy8gYml0cyAxNCwgOCwgNywgNSwgMiwgMSwgMAotICAgIC8vIFdlIGFyZSBj
b21wdXRpbmcKLSAgICAvLyAgICAgICBzZWVkXyA9IChzZWVkXyAqIEEpICUgTSwgICAgd2hlcmUg
TSA9IDJeMzEtMQotICAgIC8vCi0gICAgLy8gc2VlZF8gbXVzdCBub3QgYmUgemVybyBvciBNLCBv
ciBlbHNlIGFsbCBzdWJzZXF1ZW50IGNvbXB1dGVkIHZhbHVlcwotICAgIC8vIHdpbGwgYmUgemVy
byBvciBNIHJlc3BlY3RpdmVseS4gIEZvciBhbGwgb3RoZXIgdmFsdWVzLCBzZWVkXyB3aWxsIGVu
ZAotICAgIC8vIHVwIGN5Y2xpbmcgdGhyb3VnaCBldmVyeSBudW1iZXIgaW4gWzEsTS0xXQotICAg
IHVpbnQ2NF90IHByb2R1Y3QgPSBzZWVkXyAqIEE7Ci0KLSAgICAvLyBDb21wdXRlIChwcm9kdWN0
ICUgTSkgdXNpbmcgdGhlIGZhY3QgdGhhdCAoKHggPDwgMzEpICUgTSkgPT0geC4KLSAgICBzZWVk
XyA9IHN0YXRpY19jYXN0PHVpbnQzMl90PigocHJvZHVjdCA+PiAzMSkgKyAocHJvZHVjdCAmIE0p
KTsKLSAgICAvLyBUaGUgZmlyc3QgcmVkdWN0aW9uIG1heSBvdmVyZmxvdyBieSAxIGJpdCwgc28g
d2UgbWF5IG5lZWQgdG8KLSAgICAvLyByZXBlYXQuICBtb2QgPT0gTSBpcyBub3QgcG9zc2libGU7
IHVzaW5nID4gYWxsb3dzIHRoZSBmYXN0ZXIKLSAgICAvLyBzaWduLWJpdC1iYXNlZCB0ZXN0Lgot
ICAgIGlmIChzZWVkXyA+IE0pIHsKLSAgICAgIHNlZWRfIC09IE07Ci0gICAgfQotICAgIHJldHVy
biBzZWVkXzsKLSAgfQotICAvLyBSZXR1cm5zIGEgdW5pZm9ybWx5IGRpc3RyaWJ1dGVkIHZhbHVl
IGluIHRoZSByYW5nZSBbMC4ubi0xXQotICAvLyBSRVFVSVJFUzogbiA+IDAKLSAgdWludDMyX3Qg
VW5pZm9ybShpbnQgbikgeyByZXR1cm4gTmV4dCgpICUgbjsgfQotCi0gIC8vIFJhbmRvbWx5IHJl
dHVybnMgdHJ1ZSB+IjEvbiIgb2YgdGhlIHRpbWUsIGFuZCBmYWxzZSBvdGhlcndpc2UuCi0gIC8v
IFJFUVVJUkVTOiBuID4gMAotICBib29sIE9uZUluKGludCBuKSB7IHJldHVybiAoTmV4dCgpICUg
bikgPT0gMDsgfQotCi0gIC8vIFNrZXdlZDogcGljayAiYmFzZSIgdW5pZm9ybWx5IGZyb20gcmFu
Z2UgWzAsbWF4X2xvZ10gYW5kIHRoZW4KLSAgLy8gcmV0dXJuICJiYXNlIiByYW5kb20gYml0cy4g
IFRoZSBlZmZlY3QgaXMgdG8gcGljayBhIG51bWJlciBpbiB0aGUKLSAgLy8gcmFuZ2UgWzAsMl5t
YXhfbG9nLTFdIHdpdGggZXhwb25lbnRpYWwgYmlhcyB0b3dhcmRzIHNtYWxsZXIgbnVtYmVycy4K
LSAgdWludDMyX3QgU2tld2VkKGludCBtYXhfbG9nKSB7Ci0gICAgcmV0dXJuIFVuaWZvcm0oMSA8
PCBVbmlmb3JtKG1heF9sb2cgKyAxKSk7Ci0gIH0KLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSBsZXZl
bGRiCi0KLSNlbmRpZiAgLy8gU1RPUkFHRV9MRVZFTERCX1VUSUxfUkFORE9NX0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvc3RhdHVzLmNjIGIvU291cmNlL1Ro
aXJkUGFydHkvbGV2ZWxkYi91dGlsL3N0YXR1cy5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYTQ0ZjM1Yi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0
aWwvc3RhdHVzLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLy8gQ29weXJpZ2h0
IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhP
UlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgotCi0jaW5jbHVkZSA8c3RkaW8uaD4K
LSNpbmNsdWRlICJwb3J0L3BvcnQuaCIKLSNpbmNsdWRlICJsZXZlbGRiL3N0YXR1cy5oIgotCi1u
YW1lc3BhY2UgbGV2ZWxkYiB7Ci0KLWNvbnN0IGNoYXIqIFN0YXR1czo6Q29weVN0YXRlKGNvbnN0
IGNoYXIqIHN0YXRlKSB7Ci0gIHVpbnQzMl90IHNpemU7Ci0gIG1lbWNweSgmc2l6ZSwgc3RhdGUs
IHNpemVvZihzaXplKSk7Ci0gIGNoYXIqIHJlc3VsdCA9IG5ldyBjaGFyW3NpemUgKyA1XTsKLSAg
bWVtY3B5KHJlc3VsdCwgc3RhdGUsIHNpemUgKyA1KTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
U3RhdHVzOjpTdGF0dXMoQ29kZSBjb2RlLCBjb25zdCBTbGljZSYgbXNnLCBjb25zdCBTbGljZSYg
bXNnMikgewotICBhc3NlcnQoY29kZSAhPSBrT2spOwotICBjb25zdCB1aW50MzJfdCBsZW4xID0g
bXNnLnNpemUoKTsKLSAgY29uc3QgdWludDMyX3QgbGVuMiA9IG1zZzIuc2l6ZSgpOwotICBjb25z
dCB1aW50MzJfdCBzaXplID0gbGVuMSArIChsZW4yID8gKDIgKyBsZW4yKSA6IDApOwotICBjaGFy
KiByZXN1bHQgPSBuZXcgY2hhcltzaXplICsgNV07Ci0gIG1lbWNweShyZXN1bHQsICZzaXplLCBz
aXplb2Yoc2l6ZSkpOwotICByZXN1bHRbNF0gPSBzdGF0aWNfY2FzdDxjaGFyPihjb2RlKTsKLSAg
bWVtY3B5KHJlc3VsdCArIDUsIG1zZy5kYXRhKCksIGxlbjEpOwotICBpZiAobGVuMikgewotICAg
IHJlc3VsdFs1ICsgbGVuMV0gPSAnOic7Ci0gICAgcmVzdWx0WzYgKyBsZW4xXSA9ICcgJzsKLSAg
ICBtZW1jcHkocmVzdWx0ICsgNyArIGxlbjEsIG1zZzIuZGF0YSgpLCBsZW4yKTsKLSAgfQotICBz
dGF0ZV8gPSByZXN1bHQ7Ci19Ci0KLXN0ZDo6c3RyaW5nIFN0YXR1czo6VG9TdHJpbmcoKSBjb25z
dCB7Ci0gIGlmIChzdGF0ZV8gPT0gTlVMTCkgewotICAgIHJldHVybiAiT0siOwotICB9IGVsc2Ug
ewotICAgIGNoYXIgdG1wWzMwXTsKLSAgICBjb25zdCBjaGFyKiB0eXBlOwotICAgIHN3aXRjaCAo
Y29kZSgpKSB7Ci0gICAgICBjYXNlIGtPazoKLSAgICAgICAgdHlwZSA9ICJPSyI7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBrTm90Rm91bmQ6Ci0gICAgICAgIHR5cGUgPSAiTm90Rm91bmQ6
ICI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrQ29ycnVwdGlvbjoKLSAgICAgICAgdHlw
ZSA9ICJDb3JydXB0aW9uOiAiOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Uga05vdFN1cHBv
cnRlZDoKLSAgICAgICAgdHlwZSA9ICJOb3QgaW1wbGVtZW50ZWQ6ICI7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBrSW52YWxpZEFyZ3VtZW50OgotICAgICAgICB0eXBlID0gIkludmFsaWQg
YXJndW1lbnQ6ICI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBrSU9FcnJvcjoKLSAgICAg
ICAgdHlwZSA9ICJJTyBlcnJvcjogIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0Ogot
ICAgICAgICBzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAiVW5rbm93biBjb2RlKCVkKTogIiwK
LSAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihjb2RlKCkpKTsKLSAgICAgICAgdHlw
ZSA9IHRtcDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHN0ZDo6c3RyaW5nIHJlc3VsdCh0
eXBlKTsKLSAgICB1aW50MzJfdCBsZW5ndGg7Ci0gICAgbWVtY3B5KCZsZW5ndGgsIHN0YXRlXywg
c2l6ZW9mKGxlbmd0aCkpOwotICAgIHJlc3VsdC5hcHBlbmQoc3RhdGVfICsgNSwgbGVuZ3RoKTsK
LSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvdGVzdGhhcm5lc3MuY2Mg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvdGVzdGhhcm5lc3MuY2MKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViMWJkZDUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi91dGlsL3Rlc3RoYXJuZXNzLmNjCisrKyAvZGV2L251bGwKQEAgLTEsNzcg
KzAsMCBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgot
Ci0jaW5jbHVkZSAidXRpbC90ZXN0aGFybmVzcy5oIgotCi0jaW5jbHVkZSA8c3RyaW5nPgotI2lu
Y2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5
cGVzLmg+Ci0KLW5hbWVzcGFjZSBsZXZlbGRiIHsKLW5hbWVzcGFjZSB0ZXN0IHsKLQotbmFtZXNw
YWNlIHsKLXN0cnVjdCBUZXN0IHsKLSAgY29uc3QgY2hhciogYmFzZTsKLSAgY29uc3QgY2hhciog
bmFtZTsKLSAgdm9pZCAoKmZ1bmMpKCk7Ci19Owotc3RkOjp2ZWN0b3I8VGVzdD4qIHRlc3RzOwot
fQotCi1ib29sIFJlZ2lzdGVyVGVzdChjb25zdCBjaGFyKiBiYXNlLCBjb25zdCBjaGFyKiBuYW1l
LCB2b2lkICgqZnVuYykoKSkgewotICBpZiAodGVzdHMgPT0gTlVMTCkgewotICAgIHRlc3RzID0g
bmV3IHN0ZDo6dmVjdG9yPFRlc3Q+OwotICB9Ci0gIFRlc3QgdDsKLSAgdC5iYXNlID0gYmFzZTsK
LSAgdC5uYW1lID0gbmFtZTsKLSAgdC5mdW5jID0gZnVuYzsKLSAgdGVzdHMtPnB1c2hfYmFjayh0
KTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWludCBSdW5BbGxUZXN0cygpIHsKLSAgY29uc3QgY2hh
ciogbWF0Y2hlciA9IGdldGVudigiTEVWRUxEQl9URVNUUyIpOwotCi0gIGludCBudW0gPSAwOwot
ICBpZiAodGVzdHMgIT0gTlVMTCkgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGVzdHMtPnNp
emUoKTsgaSsrKSB7Ci0gICAgICBjb25zdCBUZXN0JiB0ID0gKCp0ZXN0cylbaV07Ci0gICAgICBp
ZiAobWF0Y2hlciAhPSBOVUxMKSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIG5hbWUgPSB0LmJhc2U7
Ci0gICAgICAgIG5hbWUucHVzaF9iYWNrKCcuJyk7Ci0gICAgICAgIG5hbWUuYXBwZW5kKHQubmFt
ZSk7Ci0gICAgICAgIGlmIChzdHJzdHIobmFtZS5jX3N0cigpLCBtYXRjaGVyKSA9PSBOVUxMKSB7
Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGZwcmludGYo
c3RkZXJyLCAiPT09PSBUZXN0ICVzLiVzXG4iLCB0LmJhc2UsIHQubmFtZSk7Ci0gICAgICAoKnQu
ZnVuYykoKTsKLSAgICAgICsrbnVtOwotICAgIH0KLSAgfQotICBmcHJpbnRmKHN0ZGVyciwgIj09
PT0gUEFTU0VEICVkIHRlc3RzXG4iLCBudW0pOwotICByZXR1cm4gMDsKLX0KLQotc3RkOjpzdHJp
bmcgVG1wRGlyKCkgewotICBzdGQ6OnN0cmluZyBkaXI7Ci0gIFN0YXR1cyBzID0gRW52OjpEZWZh
dWx0KCktPkdldFRlc3REaXJlY3RvcnkoJmRpcik7Ci0gIEFTU0VSVF9UUlVFKHMub2soKSkgPDwg
cy5Ub1N0cmluZygpOwotICByZXR1cm4gZGlyOwotfQotCi1pbnQgUmFuZG9tU2VlZCgpIHsKLSAg
Y29uc3QgY2hhciogZW52ID0gZ2V0ZW52KCJURVNUX1JBTkRPTV9TRUVEIik7Ci0gIGludCByZXN1
bHQgPSAoZW52ICE9IE5VTEwgPyBhdG9pKGVudikgOiAzMDEpOwotICBpZiAocmVzdWx0IDw9IDAp
IHsKLSAgICByZXN1bHQgPSAzMDE7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotfSAgLy8g
bmFtZXNwYWNlIHRlc3QKLX0gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvdGVzdGhhcm5lc3MuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xldmVsZGIvdXRpbC90ZXN0aGFybmVzcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkYTRmZTY4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRp
bC90ZXN0aGFybmVzcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLS8vIENvcHly
aWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBB
VVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KLQotI2lmbmRlZiBTVE9SQUdF
X0xFVkVMREJfVVRJTF9URVNUSEFSTkVTU19IXwotI2RlZmluZSBTVE9SQUdFX0xFVkVMREJfVVRJ
TF9URVNUSEFSTkVTU19IXwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIu
aD4KLSNpbmNsdWRlIDxzc3RyZWFtPgotI2luY2x1ZGUgImxldmVsZGIvZW52LmgiCi0jaW5jbHVk
ZSAibGV2ZWxkYi9zbGljZS5oIgotI2luY2x1ZGUgInV0aWwvcmFuZG9tLmgiCi0KLW5hbWVzcGFj
ZSBsZXZlbGRiIHsKLW5hbWVzcGFjZSB0ZXN0IHsKLQotLy8gUnVuIHNvbWUgb2YgdGhlIHRlc3Rz
IHJlZ2lzdGVyZWQgYnkgdGhlIFRFU1QoKSBtYWNyby4gIElmIHRoZQotLy8gZW52aXJvbm1lbnQg
dmFyaWFibGUgIkxFVkVMREJfVEVTVFMiIGlzIG5vdCBzZXQsIHJ1bnMgYWxsIHRlc3RzLgotLy8g
T3RoZXJ3aXNlLCBydW5zIG9ubHkgdGhlIHRlc3RzIHdob3NlIG5hbWUgY29udGFpbnMgdGhlIHZh
bHVlIG9mCi0vLyAiTEVWRUxEQl9URVNUUyIgYXMgYSBzdWJzdHJpbmcuICBFLmcuLCBzdXBwb3Nl
IHRoZSB0ZXN0cyBhcmU6Ci0vLyAgICBURVNUKEZvbywgSGVsbG8pIHsgLi4uIH0KLS8vICAgIFRF
U1QoRm9vLCBXb3JsZCkgeyAuLi4gfQotLy8gTEVWRUxEQl9URVNUUz1IZWxsbyB3aWxsIHJ1biB0
aGUgZmlyc3QgdGVzdAotLy8gTEVWRUxEQl9URVNUUz1vICAgICB3aWxsIHJ1biBib3RoIHRlc3Rz
Ci0vLyBMRVZFTERCX1RFU1RTPUp1bmsgIHdpbGwgcnVuIG5vIHRlc3RzCi0vLwotLy8gUmV0dXJu
cyAwIGlmIGFsbCB0ZXN0cyBwYXNzLgotLy8gRGllcyBvciByZXR1cm5zIGEgbm9uLXplcm8gdmFs
dWUgaWYgc29tZSB0ZXN0IGZhaWxzLgotZXh0ZXJuIGludCBSdW5BbGxUZXN0cygpOwotCi0vLyBS
ZXR1cm4gdGhlIGRpcmVjdG9yeSB0byB1c2UgZm9yIHRlbXBvcmFyeSBzdG9yYWdlLgotZXh0ZXJu
IHN0ZDo6c3RyaW5nIFRtcERpcigpOwotCi0vLyBSZXR1cm4gYSByYW5kb21pemF0aW9uIHNlZWQg
Zm9yIHRoaXMgcnVuLiAgVHlwaWNhbGx5IHJldHVybnMgdGhlCi0vLyBzYW1lIG51bWJlciBvbiBy
ZXBlYXRlZCBpbnZvY2F0aW9ucyBvZiB0aGlzIGJpbmFyeSwgYnV0IGF1dG9tYXRlZAotLy8gcnVu
cyBtYXkgYmUgYWJsZSB0byB2YXJ5IHRoZSBzZWVkLgotZXh0ZXJuIGludCBSYW5kb21TZWVkKCk7
Ci0KLS8vIEFuIGluc3RhbmNlIG9mIFRlc3RlciBpcyBhbGxvY2F0ZWQgdG8gaG9sZCB0ZW1wb3Jh
cnkgc3RhdGUgZHVyaW5nCi0vLyB0aGUgZXhlY3V0aW9uIG9mIGFuIGFzc2VydGlvbi4KLWNsYXNz
IFRlc3RlciB7Ci0gcHJpdmF0ZToKLSAgYm9vbCBva187Ci0gIGNvbnN0IGNoYXIqIGZuYW1lXzsK
LSAgaW50IGxpbmVfOwotICBzdGQ6OnN0cmluZ3N0cmVhbSBzc187Ci0KLSBwdWJsaWM6Ci0gIFRl
c3Rlcihjb25zdCBjaGFyKiBmLCBpbnQgbCkKLSAgICAgIDogb2tfKHRydWUpLCBmbmFtZV8oZiks
IGxpbmVfKGwpIHsKLSAgfQotCi0gIH5UZXN0ZXIoKSB7Ci0gICAgaWYgKCFva18pIHsKLSAgICAg
IGZwcmludGYoc3RkZXJyLCAiJXM6JWQ6JXNcbiIsIGZuYW1lXywgbGluZV8sIHNzXy5zdHIoKS5j
X3N0cigpKTsKLSAgICAgIGV4aXQoMSk7Ci0gICAgfQotICB9Ci0KLSAgVGVzdGVyJiBJcyhib29s
IGIsIGNvbnN0IGNoYXIqIG1zZykgewotICAgIGlmICghYikgewotICAgICAgc3NfIDw8ICIgQXNz
ZXJ0aW9uIGZhaWx1cmUgIiA8PCBtc2c7Ci0gICAgICBva18gPSBmYWxzZTsKLSAgICB9Ci0gICAg
cmV0dXJuICp0aGlzOwotICB9Ci0KLSAgVGVzdGVyJiBJc09rKGNvbnN0IFN0YXR1cyYgcykgewot
ICAgIGlmICghcy5vaygpKSB7Ci0gICAgICBzc18gPDwgIiAiIDw8IHMuVG9TdHJpbmcoKTsKLSAg
ICAgIG9rXyA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotI2RlZmlu
ZSBCSU5BUllfT1AobmFtZSxvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHRl
bXBsYXRlIDxjbGFzcyBYLCBjbGFzcyBZPiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
VGVzdGVyJiBuYW1lKGNvbnN0IFgmIHgsIGNvbnN0IFkmIHkpIHsgICAgICAgICAgICAgICAgXAot
ICAgIGlmICghICh4IG9wIHkpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICBzc18gPDwgIiBmYWlsZWQ6ICIgPDwgeCA8PCAoIiAiICNvcCAiICIpIDw8IHk7ICAg
IFwKLSAgICAgIG9rXyA9IGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgcmV0dXJuICp0aGlzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgfQotCi0gIEJJTkFSWV9PUChJc0VxLCA9PSkKLSAgQklOQVJZX09QKElzTmUs
ICE9KQotICBCSU5BUllfT1AoSXNHZSwgPj0pCi0gIEJJTkFSWV9PUChJc0d0LCA+KQotICBCSU5B
UllfT1AoSXNMZSwgPD0pCi0gIEJJTkFSWV9PUChJc0x0LCA8KQotI3VuZGVmIEJJTkFSWV9PUAot
Ci0gIC8vIEF0dGFjaCB0aGUgc3BlY2lmaWVkIHZhbHVlIHRvIHRoZSBlcnJvciBtZXNzYWdlIGlm
IGFuIGVycm9yIGhhcyBvY2N1cnJlZAotICB0ZW1wbGF0ZSA8Y2xhc3MgVj4KLSAgVGVzdGVyJiBv
cGVyYXRvcjw8KGNvbnN0IFYmIHZhbHVlKSB7Ci0gICAgaWYgKCFva18pIHsKLSAgICAgIHNzXyA8
PCAiICIgPDwgdmFsdWU7Ci0gICAgfQotICAgIHJldHVybiAqdGhpczsKLSAgfQotfTsKLQotI2Rl
ZmluZSBBU1NFUlRfVFJVRShjKSA6OmxldmVsZGI6OnRlc3Q6OlRlc3RlcihfX0ZJTEVfXywgX19M
SU5FX18pLklzKChjKSwgI2MpCi0jZGVmaW5lIEFTU0VSVF9PSyhzKSA6OmxldmVsZGI6OnRlc3Q6
OlRlc3RlcihfX0ZJTEVfXywgX19MSU5FX18pLklzT2soKHMpKQotI2RlZmluZSBBU1NFUlRfRVEo
YSxiKSA6OmxldmVsZGI6OnRlc3Q6OlRlc3RlcihfX0ZJTEVfXywgX19MSU5FX18pLklzRXEoKGEp
LChiKSkKLSNkZWZpbmUgQVNTRVJUX05FKGEsYikgOjpsZXZlbGRiOjp0ZXN0OjpUZXN0ZXIoX19G
SUxFX18sIF9fTElORV9fKS5Jc05lKChhKSwoYikpCi0jZGVmaW5lIEFTU0VSVF9HRShhLGIpIDo6
bGV2ZWxkYjo6dGVzdDo6VGVzdGVyKF9fRklMRV9fLCBfX0xJTkVfXykuSXNHZSgoYSksKGIpKQot
I2RlZmluZSBBU1NFUlRfR1QoYSxiKSA6OmxldmVsZGI6OnRlc3Q6OlRlc3RlcihfX0ZJTEVfXywg
X19MSU5FX18pLklzR3QoKGEpLChiKSkKLSNkZWZpbmUgQVNTRVJUX0xFKGEsYikgOjpsZXZlbGRi
Ojp0ZXN0OjpUZXN0ZXIoX19GSUxFX18sIF9fTElORV9fKS5Jc0xlKChhKSwoYikpCi0jZGVmaW5l
IEFTU0VSVF9MVChhLGIpIDo6bGV2ZWxkYjo6dGVzdDo6VGVzdGVyKF9fRklMRV9fLCBfX0xJTkVf
XykuSXNMdCgoYSksKGIpKQotCi0jZGVmaW5lIFRDT05DQVQoYSxiKSBUQ09OQ0FUMShhLGIpCi0j
ZGVmaW5lIFRDT05DQVQxKGEsYikgYSMjYgotCi0jZGVmaW5lIFRFU1QoYmFzZSxuYW1lKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1jbGFzcyBUQ09O
Q0FUKF9UZXN0XyxuYW1lKSA6IHB1YmxpYyBiYXNlIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gcHVibGljOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHZvaWQgX1J1bigpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIHN0YXRpYyB2b2lk
IF9SdW5JdCgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgVENPTkNBVChfVGVzdF8sbmFtZSkgdDsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgdC5fUnVuKCk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci19OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi1ib29sIFRDT05DQVQoX1Rlc3RfaWdub3JlZF8sbmFtZSkgPSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIDo6bGV2ZWxkYjo6dGVzdDo6
UmVnaXN0ZXJUZXN0KCNiYXNlLCAjbmFtZSwgJlRDT05DQVQoX1Rlc3RfLG5hbWUpOjpfUnVuSXQp
OyBcCi12b2lkIFRDT05DQVQoX1Rlc3RfLG5hbWUpOjpfUnVuKCkKLQotLy8gUmVnaXN0ZXIgdGhl
IHNwZWNpZmllZCB0ZXN0LiAgVHlwaWNhbGx5IG5vdCB1c2VkIGRpcmVjdGx5LCBidXQKLS8vIGlu
dm9rZWQgdmlhIHRoZSBtYWNybyBleHBhbnNpb24gb2YgVEVTVC4KLWV4dGVybiBib29sIFJlZ2lz
dGVyVGVzdChjb25zdCBjaGFyKiBiYXNlLCBjb25zdCBjaGFyKiBuYW1lLCB2b2lkICgqZnVuYyko
KSk7Ci0KLQotfSAgLy8gbmFtZXNwYWNlIHRlc3QKLX0gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCi0K
LSNlbmRpZiAgLy8gU1RPUkFHRV9MRVZFTERCX1VUSUxfVEVTVEhBUk5FU1NfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC90ZXN0dXRpbC5jYyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvdXRpbC90ZXN0dXRpbC5jYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNTM4ZDA5NS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRi
L3V0aWwvdGVzdHV0aWwuY2MKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vLyBDb3B5
cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUg
QVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCi0KLSNpbmNsdWRlICJ1dGls
L3Rlc3R1dGlsLmgiCi0KLSNpbmNsdWRlICJ1dGlsL3JhbmRvbS5oIgotCi1uYW1lc3BhY2UgbGV2
ZWxkYiB7Ci1uYW1lc3BhY2UgdGVzdCB7Ci0KLVNsaWNlIFJhbmRvbVN0cmluZyhSYW5kb20qIHJu
ZCwgaW50IGxlbiwgc3RkOjpzdHJpbmcqIGRzdCkgewotICBkc3QtPnJlc2l6ZShsZW4pOwotICBm
b3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgKCpkc3QpW2ldID0gc3RhdGljX2Nh
c3Q8Y2hhcj4oJyAnICsgcm5kLT5Vbmlmb3JtKDk1KSk7ICAgLy8gJyAnIC4uICd+JwotICB9Ci0g
IHJldHVybiBTbGljZSgqZHN0KTsKLX0KLQotc3RkOjpzdHJpbmcgUmFuZG9tS2V5KFJhbmRvbSog
cm5kLCBpbnQgbGVuKSB7Ci0gIC8vIE1ha2Ugc3VyZSB0byBnZW5lcmF0ZSBhIHdpZGUgdmFyaWV0
eSBvZiBjaGFyYWN0ZXJzIHNvIHdlCi0gIC8vIHRlc3QgdGhlIGJvdW5kYXJ5IGNvbmRpdGlvbnMg
Zm9yIHNob3J0LWtleSBvcHRpbWl6YXRpb25zLgotICBzdGF0aWMgY29uc3QgY2hhciBrVGVzdENo
YXJzW10gPSB7Ci0gICAgJ1wwJywgJ1wxJywgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdceGZk
JywgJ1x4ZmUnLCAnXHhmZicKLSAgfTsKLSAgc3RkOjpzdHJpbmcgcmVzdWx0OwotICBmb3IgKGlu
dCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgcmVzdWx0ICs9IGtUZXN0Q2hhcnNbcm5kLT5V
bmlmb3JtKHNpemVvZihrVGVzdENoYXJzKSldOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0K
LQotZXh0ZXJuIFNsaWNlIENvbXByZXNzaWJsZVN0cmluZyhSYW5kb20qIHJuZCwgZG91YmxlIGNv
bXByZXNzZWRfZnJhY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBs
ZW4sIHN0ZDo6c3RyaW5nKiBkc3QpIHsKLSAgaW50IHJhdyA9IHN0YXRpY19jYXN0PGludD4obGVu
ICogY29tcHJlc3NlZF9mcmFjdGlvbik7Ci0gIGlmIChyYXcgPCAxKSByYXcgPSAxOwotICBzdGQ6
OnN0cmluZyByYXdfZGF0YTsKLSAgUmFuZG9tU3RyaW5nKHJuZCwgcmF3LCAmcmF3X2RhdGEpOwot
Ci0gIC8vIER1cGxpY2F0ZSB0aGUgcmFuZG9tIGRhdGEgdW50aWwgd2UgaGF2ZSBmaWxsZWQgImxl
biIgYnl0ZXMKLSAgZHN0LT5jbGVhcigpOwotICB3aGlsZSAoZHN0LT5zaXplKCkgPCBsZW4pIHsK
LSAgICBkc3QtPmFwcGVuZChyYXdfZGF0YSk7Ci0gIH0KLSAgZHN0LT5yZXNpemUobGVuKTsKLSAg
cmV0dXJuIFNsaWNlKCpkc3QpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgdGVzdAotfSAgLy8gbmFt
ZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRp
bC90ZXN0dXRpbC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL3Rlc3R1dGlsLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyNGU2NTUuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL3Rlc3R1dGlsLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw1MyArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRv
cnMuCi0KLSNpZm5kZWYgU1RPUkFHRV9MRVZFTERCX1VUSUxfVEVTVFVUSUxfSF8KLSNkZWZpbmUg
U1RPUkFHRV9MRVZFTERCX1VUSUxfVEVTVFVUSUxfSF8KLQotI2luY2x1ZGUgImxldmVsZGIvZW52
LmgiCi0jaW5jbHVkZSAibGV2ZWxkYi9zbGljZS5oIgotI2luY2x1ZGUgInV0aWwvcmFuZG9tLmgi
Ci0KLW5hbWVzcGFjZSBsZXZlbGRiIHsKLW5hbWVzcGFjZSB0ZXN0IHsKLQotLy8gU3RvcmUgaW4g
KmRzdCBhIHJhbmRvbSBzdHJpbmcgb2YgbGVuZ3RoICJsZW4iIGFuZCByZXR1cm4gYSBTbGljZSB0
aGF0Ci0vLyByZWZlcmVuY2VzIHRoZSBnZW5lcmF0ZWQgZGF0YS4KLWV4dGVybiBTbGljZSBSYW5k
b21TdHJpbmcoUmFuZG9tKiBybmQsIGludCBsZW4sIHN0ZDo6c3RyaW5nKiBkc3QpOwotCi0vLyBS
ZXR1cm4gYSByYW5kb20ga2V5IHdpdGggdGhlIHNwZWNpZmllZCBsZW5ndGggdGhhdCBtYXkgY29u
dGFpbiBpbnRlcmVzdGluZwotLy8gY2hhcmFjdGVycyAoZS5nLiBceDAwLCBceGZmLCBldGMuKS4K
LWV4dGVybiBzdGQ6OnN0cmluZyBSYW5kb21LZXkoUmFuZG9tKiBybmQsIGludCBsZW4pOwotCi0v
LyBTdG9yZSBpbiAqZHN0IGEgc3RyaW5nIG9mIGxlbmd0aCAibGVuIiB0aGF0IHdpbGwgY29tcHJl
c3MgdG8KLS8vICJOKmNvbXByZXNzZWRfZnJhY3Rpb24iIGJ5dGVzIGFuZCByZXR1cm4gYSBTbGlj
ZSB0aGF0IHJlZmVyZW5jZXMKLS8vIHRoZSBnZW5lcmF0ZWQgZGF0YS4KLWV4dGVybiBTbGljZSBD
b21wcmVzc2libGVTdHJpbmcoUmFuZG9tKiBybmQsIGRvdWJsZSBjb21wcmVzc2VkX2ZyYWN0aW9u
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuLCBzdGQ6OnN0cmluZyog
ZHN0KTsKLQotLy8gQSB3cmFwcGVyIHRoYXQgYWxsb3dzIGluamVjdGlvbiBvZiBlcnJvcnMuCi1j
bGFzcyBFcnJvckVudiA6IHB1YmxpYyBFbnZXcmFwcGVyIHsKLSBwdWJsaWM6Ci0gIGJvb2wgd3Jp
dGFibGVfZmlsZV9lcnJvcl87Ci0gIGludCBudW1fd3JpdGFibGVfZmlsZV9lcnJvcnNfOwotCi0g
IEVycm9yRW52KCkgOiBFbnZXcmFwcGVyKEVudjo6RGVmYXVsdCgpKSwKLSAgICAgICAgICAgICAg
IHdyaXRhYmxlX2ZpbGVfZXJyb3JfKGZhbHNlKSwKLSAgICAgICAgICAgICAgIG51bV93cml0YWJs
ZV9maWxlX2Vycm9yc18oMCkgeyB9Ci0KLSAgdmlydHVhbCBTdGF0dXMgTmV3V3JpdGFibGVGaWxl
KGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdyaXRhYmxlRmlsZSoqIHJlc3VsdCkgewotICAgIGlmICh3cml0YWJsZV9maWxlX2Vycm9y
XykgewotICAgICAgKytudW1fd3JpdGFibGVfZmlsZV9lcnJvcnNfOwotICAgICAgKnJlc3VsdCA9
IE5VTEw7Ci0gICAgICByZXR1cm4gU3RhdHVzOjpJT0Vycm9yKGZuYW1lLCAiZmFrZSBlcnJvciIp
OwotICAgIH0KLSAgICByZXR1cm4gdGFyZ2V0KCktPk5ld1dyaXRhYmxlRmlsZShmbmFtZSwgcmVz
dWx0KTsKLSAgfQotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHRlc3QKLX0gIC8vIG5hbWVzcGFjZSBs
ZXZlbGRiCi0KLSNlbmRpZiAgLy8gU1RPUkFHRV9MRVZFTERCX1VUSUxfVEVTVFVUSUxfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKaW5kZXggY2UxNTgxZC4uOTBjYTZjZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKQEAgLTcsNyArNyw2IEBAIHNldChXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAi
JHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9nYW1lcGFkL2RlcHJlY2F0ZWQiCiAgICAgIiR7V0VCQ09S
RV9ESVJ9L01vZHVsZXMvZ2VvbG9jYXRpb24iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMv
aW5kZXhlZGRiIgotICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRi
IgogICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL2luZGlldWkiCiAgICAgIiR7V0VCQ09SRV9E
SVJ9L01vZHVsZXMvbWVkaWFjb250cm9scy8iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMv
bWVkaWFzb3VyY2UiCkBAIC03Nyw3ICs3Niw2IEBAIHNldChXZWJDb3JlX0lOQ0xVREVfRElSRUNU
T1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZyIK
ICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nIgogICAgICIk
e1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwIgotICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9sZXZlbGRiIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbSIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbW9jayIKICAgICAiJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vbmV0d29yayIKQEAgLTg2NSwxNCArODYzLDYgQEAgc2V0KFdl
YkNvcmVfU09VUkNFUwogICAgIE1vZHVsZXMvaW5kZXhlZGRiL1BhZ2VHcm91cEluZGV4ZWREYXRh
YmFzZS5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9Xb3JrZXJHbG9iYWxTY29wZUluZGV4ZWRE
YXRhYmFzZS5jcHAKIAotICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0
b3JlQ3Vyc29yTGV2ZWxEQi5jcHAKLSAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJh
Y2tpbmdTdG9yZUxldmVsREIuY3BwCi0gICAgTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJC
YWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIuY3BwCi0gICAgTW9kdWxlcy9pbmRleGVkZGIv
bGV2ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwCi0gICAgTW9kdWxlcy9pbmRleGVk
ZGIvbGV2ZWxkYi9JREJJbmRleFdyaXRlckxldmVsREIuY3BwCi0gICAgTW9kdWxlcy9pbmRleGVk
ZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmNwcAotICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xl
dmVsZGIvSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREIuY3BwCi0KICAgICBNb2R1bGVzL21lZGlh
Y29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCiAKICAgICBNb2R1bGVzL21lZGlhc291cmNl
L0RPTVVSTE1lZGlhU291cmNlLmNwcApAQCAtMjE5NCwxMCArMjE4NCw2IEBAIHNldChXZWJDb3Jl
X1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9u
TWF0cml4LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNsYXRlVHJh
bnNmb3JtT3BlcmF0aW9uLmNwcAogCi0gICAgcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJh
c2UuY3BwCi0gICAgcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24uY3BwCi0gICAg
cGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCV3JpdGVCYXRjaC5jcHAKLQogICAgIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2VudGVyLmNwcAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtUHJpdmF0ZS5jcHAKICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZS5jcHAKQEAgLTI5OTYsNTggKzI5ODIsNiBAQCBsaXN0KEFQUEVORCBX
ZWJDb3JlX0xJQlJBUklFUwogICAgICR7SUNVX0xJQlJBUklFU30KICkKIAotaWYgKFdURl9VU0Vf
TEVWRUxEQikKLSAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAg
ICAgICAgIiR7VEhJUkRQQVJUWV9ESVJ9L2xldmVsZGIvaW5jbHVkZSIKLSAgICAgICAgIiR7VEhJ
UkRQQVJUWV9ESVJ9L2xldmVsZGIiCi0gICAgKQotICAgIGxpc3QoQVBQRU5EIExFVkVMREJfU09V
UkNFUwotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9sZXZlbGRiL2RiL2J1aWxkZXIuY2MKLSAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vbGV2ZWxkYi9kYi9jLmNjCi0gICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L2xldmVsZGIvZGIvZGJfaW1wbC5jYwotICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9sZXZlbGRiL2RiL2RiX2l0ZXIuY2MKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vbGV2ZWxk
Yi9kYi9kYmZvcm1hdC5jYwotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9sZXZlbGRiL2RiL2Zp
bGVuYW1lLmNjCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L2xldmVsZGIvZGIvbG9nX3JlYWRl
ci5jYwotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9sZXZlbGRiL2RiL2xvZ193cml0ZXIuY2MK
LSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vbGV2ZWxkYi9kYi9tZW10YWJsZS5jYwotICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9sZXZlbGRiL2RiL3JlcGFpci5jYwotICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9sZXZlbGRiL2RiL3RhYmxlX2NhY2hlLmNjCi0gICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L2xldmVsZGIvZGIvdmVyc2lvbl9lZGl0LmNjCi0gICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L2xldmVsZGIvZGIvdmVyc2lvbl9zZXQuY2MKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0v
bGV2ZWxkYi9kYi93cml0ZV9iYXRjaC5jYwotCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L2xl
dmVsZGIvaGVscGVycy9tZW1lbnYvbWVtZW52LmNjCi0KLSAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vbGV2ZWxkYi9wb3J0L3BvcnRfcG9zaXguY2MKLQotICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9sZXZlbGRiL3RhYmxlL2Jsb2NrLmNjCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L2xldmVs
ZGIvdGFibGUvYmxvY2tfYnVpbGRlci5jYwotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9sZXZl
bGRiL3RhYmxlL2ZpbHRlcl9ibG9jay5jYwotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9sZXZl
bGRiL3RhYmxlL2Zvcm1hdC5jYwotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9sZXZlbGRiL3Rh
YmxlL2l0ZXJhdG9yLmNjCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L2xldmVsZGIvdGFibGUv
bWVyZ2VyLmNjCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L2xldmVsZGIvdGFibGUvdGFibGUu
Y2MKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vbGV2ZWxkYi90YWJsZS90YWJsZV9idWlsZGVy
LmNjCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L2xldmVsZGIvdGFibGUvdHdvX2xldmVsX2l0
ZXJhdG9yLmNjCi0KLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vbGV2ZWxkYi91dGlsL2FyZW5h
LmNjCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L2xldmVsZGIvdXRpbC9ibG9vbS5jYwotICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9sZXZlbGRiL3V0aWwvY2FjaGUuY2MKLSAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vbGV2ZWxkYi91dGlsL2NvZGluZy5jYwotICAgICAgICAke1RISVJEUEFS
VFlfRElSfS9sZXZlbGRiL3V0aWwvY29tcGFyYXRvci5jYwotICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9sZXZlbGRiL3V0aWwvY3JjMzJjLmNjCi0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L2xl
dmVsZGIvdXRpbC9lbnYuY2MKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vbGV2ZWxkYi91dGls
L2Vudl9wb3NpeC5jYwotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9sZXZlbGRiL3V0aWwvZmls
dGVyX3BvbGljeS5jYwotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9sZXZlbGRiL3V0aWwvaGFz
aC5jYwotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9sZXZlbGRiL3V0aWwvaGlzdG9ncmFtLmNj
Ci0gICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L2xldmVsZGIvdXRpbC9sb2dnaW5nLmNjCi0gICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L2xldmVsZGIvdXRpbC9vcHRpb25zLmNjCi0gICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L2xldmVsZGIvdXRpbC9zdGF0dXMuY2MKLSAgICApCi1lbmRpZiAoKQot
CiBpZiAoV1RGX1VTRV8zRF9HUkFQSElDUykKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0lOQ0xV
REVfRElSRUNUT1JJRVMKICAgICAgICAgIiR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYyIKQEAg
LTM2MDgsMTQgKzM1NDIsNiBAQCBpZiAoV2ViQ29yZVRlc3RTdXBwb3J0X09VVFBVVF9OQU1FKQog
ICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhXZWJDb3JlVGVzdFN1cHBvcnQgUFJPUEVSVElFUyBP
VVRQVVRfTkFNRSAke1dlYkNvcmVUZXN0U3VwcG9ydF9PVVRQVVRfTkFNRX0pCiBlbmRpZiAoKQog
Ci1pZiAoV1RGX1VTRV9MRVZFTERCKQotICAgIGFkZF9saWJyYXJ5KGxldmVsZGIgU1RBVElDICR7
TEVWRUxEQl9TT1VSQ0VTfSkKLSAgICB0YXJnZXRfbGlua19saWJyYXJpZXMobGV2ZWxkYiAke0NN
QUtFX1RIUkVBRF9MSUJTX0lOSVR9KQotICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhsZXZlbGRi
IFBST1BFUlRJRVMgQ09NUElMRV9ERUZJTklUSU9OUyAiTEVWRUxEQl9QTEFURk9STV9QT1NJWD0x
IE9TX0xJTlVYPTEiKQotICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTIGxldmVsZGIp
Ci0gICAgV0VCS0lUX1NFVF9FWFRSQV9DT01QSUxFUl9GTEFHUyhsZXZlbGRiIElHTk9SRUNYWF9X
QVJOSU5HUykKLWVuZGlmICgpCi0KIGlmIChXVEZfVVNFXzNEX0dSQVBISUNTKQogICAgIGFkZF9s
aWJyYXJ5KEFOR0xFU3VwcG9ydCBTVEFUSUMgJHtBTkdMRVN1cHBvcnRfU09VUkNFU30pCiAgICAg
c2V0X3RhcmdldF9wcm9wZXJ0aWVzKEFOR0xFU3VwcG9ydCBQUk9QRVJUSUVTIEZPTERFUiAiV2Vi
Q29yZSIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggMzFlZjBjYi4uMmY3NDgzNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDQ1IEBACisyMDE0LTA4LTIyICBSZW5hdG8gTmFneSAgPG5hZ3kucmVuYXRvQHN0dWQudS1z
emVnZWQuaHU+CisKKyAgICAgICAgUmVtb3ZlIExldmVsREIuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzYxNzAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpjYW5SdW5UcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpkb1Njb3Blc092ZXJsYXApOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQi5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVDdXJzb3JM
ZXZlbERCLmg6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9J
REJCYWNraW5nU3RvcmVMZXZlbERCLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUxldmVsREIuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
TGV2ZWxEQi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxk
Yi9JREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJGYWN0b3J5
QmFja2VuZExldmVsREIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9s
ZXZlbGRiL0lEQkluZGV4V3JpdGVyTGV2ZWxEQi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJJbmRleFdyaXRlckxldmVsREIuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkxldmVsREJDb2RpbmcuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxE
QkNvZGluZy5oOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIv
SURCU2VydmVyQ29ubmVjdGlvbkxldmVsREIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREIuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOgorICAgICAgICAq
IFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vRGF0YWJh
c2VTdHJhdGVneS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVN0cmF0ZWd5OjpjcmVh
dGVJREJGYWN0b3J5QmFja2VuZCk6CisgICAgICAgICogcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERC
Q29tcGFyYXRvci5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxE
QkRhdGFiYXNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9sZXZlbGRiL0xldmVs
REJEYXRhYmFzZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2xldmVsZGIvTGV2ZWxE
Qkl0ZXJhdG9yLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERC
U2xpY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFu
c2FjdGlvbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERC
VHJhbnNhY3Rpb24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9sZXZlbGRiL0xldmVs
REJXcml0ZUJhdGNoLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9sZXZlbGRiL0xl
dmVsREJXcml0ZUJhdGNoLmg6IFJlbW92ZWQuCisKIDIwMTQtMDgtMjIgIFphbiBEb2JlcnNlayAg
PHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEFkZCB0aGUgV2F5bGFuZCBw
cm90b2NvbCBleHRlbnNpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlLmNwcAppbmRleCA5Y2Q2NWI2Li40ZWY0OWFjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCkBA
IC00MDMsMjAgKzQwMyw3IEBAIFBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3JlOjpj
cmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0CiAgICAgaWYgKGVjKQog
ICAgICAgICByZXR1cm4gMDsKIAotI2lmIFVTRShMRVZFTERCKQotICAgIFJlZlB0cjxJREJSZXF1
ZXN0PiBpbmRleFJlcXVlc3QgPSBvcGVuQ3Vyc29yKGNvbnRleHQsIHN0YXRpY19jYXN0PElEQktl
eVJhbmdlKj4oMCksIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBJREJEYXRhYmFzZUJhY2tl
bmQ6OlByZWVtcHRpdmVUYXNrLCBlYyk7Ci0gICAgQVNTRVJUKCFlYyk7Ci0gICAgaWYgKGVjKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICBpbmRleFJlcXVlc3QtPnByZXZlbnRQcm9wYWdhdGlvbigp
OwotCi0gICAgLy8gVGhpcyBpcyBrZXB0IGFsaXZlIGJ5IGJlaW5nIHRoZSBzdWNjZXNzIGhhbmRs
ZXIgb2YgdGhlIHJlcXVlc3QsIHdoaWNoIGlzIGluIHR1cm4ga2VwdCBhbGl2ZSBieSB0aGUgb3du
aW5nIHRyYW5zYWN0aW9uLgotICAgIFJlZlB0cjxJbmRleFBvcHVsYXRvcj4gaW5kZXhQb3B1bGF0
b3IgPSBJbmRleFBvcHVsYXRvcjo6Y3JlYXRlKGJhY2tlbmREQigpLCBtX3RyYW5zYWN0aW9uLT5p
ZCgpLCBpZCgpLCBtZXRhZGF0YSk7Ci0gICAgaW5kZXhSZXF1ZXN0LT5zZXRPbnN1Y2Nlc3MoaW5k
ZXhQb3B1bGF0b3IpOwotI2Vsc2UKICAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQp
OwotI2VuZGlmCi0KICAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IuY3BwCmluZGV4IGNjZmUxMTUuLjlkNjllMGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuY3BwCkBAIC0xMDUsNDkgKzEwNSwxMiBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3I6OnByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25zKCkKICAgICB9CiB9CiAKLSNpZiBV
U0UoTEVWRUxEQikKLXN0YXRpYyBib29sIGRvU2NvcGVzT3ZlcmxhcChjb25zdCBIYXNoU2V0PGlu
dDY0X3Q+JiBzY29wZTEsIGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4mIHNjb3BlMikKLXsKLSAgICBm
b3IgKEhhc2hTZXQ8aW50NjRfdD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc2NvcGUxLmJlZ2luKCk7
IGl0ICE9IHNjb3BlMS5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoc2NvcGUyLmNvbnRhaW5z
KCppdCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotI2VuZGlmCi0KIGJvb2wgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6Y2FuUnVuVHJh
bnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbikKIHsKICAgICBBU1NF
UlQobV9xdWV1ZWRUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsKIAotI2lmIFVT
RShMRVZFTERCKQotICAgIHN3aXRjaCAodHJhbnNhY3Rpb24tPm1vZGUoKSkgewotICAgIGNhc2Ug
SW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2U6Ci0gICAgICAgIEFTU0VS
VChtX3F1ZXVlZFRyYW5zYWN0aW9ucy5zaXplKCkgPT0gMSk7Ci0gICAgICAgIEFTU0VSVChtX3N0
YXJ0ZWRUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBjYXNlIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpSZWFkT25seToKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBjYXNlIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpSZWFkV3Jp
dGU6Ci0gICAgICAgIGZvciAoSGFzaFNldDxJREJUcmFuc2FjdGlvbkJhY2tlbmQqPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuYmVnaW4oKTsgaXQgIT0gbV9zdGFy
dGVkVHJhbnNhY3Rpb25zLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoKCppdCktPm1v
ZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6UmVhZFdyaXRlICYmIGRvU2NvcGVz
T3ZlcmxhcCh0cmFuc2FjdGlvbi0+c2NvcGUoKSwgKCppdCktPnNjb3BlKCkpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKExpc3RIYXNoU2V0
PElEQlRyYW5zYWN0aW9uQmFja2VuZCo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fcXVldWVkVHJh
bnNhY3Rpb25zLmJlZ2luKCk7ICppdCAhPSB0cmFuc2FjdGlvbjsgKytpdCkgewotICAgICAgICAg
ICAgQVNTRVJUKGl0ICE9IG1fcXVldWVkVHJhbnNhY3Rpb25zLmVuZCgpKTsKLSAgICAgICAgICAg
IGlmICgoKml0KS0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpSZWFkV3Jp
dGUgJiYgZG9TY29wZXNPdmVybGFwKHRyYW5zYWN0aW9uLT5zY29wZSgpLCAoKml0KS0+c2NvcGUo
KSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci0jZWxzZQogICAgIFVOVVNFRF9QQVJBTSh0cmFuc2FjdGlvbik7CiAgICAgcmV0dXJu
ICFtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuc2l6ZSgpOwotI2VuZGlmCiB9CiAKIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdT
dG9yZUN1cnNvckxldmVsREIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGV2ZWxkYi9JREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYjNjNWY2MS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREIuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMjAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQi5oIgotCi0jaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQotCi0jaW5jbHVkZSAiSURC
QmFja2luZ1N0b3JlTGV2ZWxEQi5oIgotI2luY2x1ZGUgIkxldmVsREJUcmFuc2FjdGlvbi5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUlEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREI6OklE
QkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREIoY29uc3QgSURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2
ZWxEQiogb3RoZXIpCi0gICAgOiBtX3RyYW5zYWN0aW9uKG90aGVyLT5tX3RyYW5zYWN0aW9uKQot
ICAgICwgbV9jdXJzb3JPcHRpb25zKG90aGVyLT5tX2N1cnNvck9wdGlvbnMpCi0gICAgLCBtX2N1
cnJlbnRLZXkob3RoZXItPm1fY3VycmVudEtleSkKLSAgICAsIG1fcmVjb3JkSWRlbnRpZmllcihJ
REJSZWNvcmRJZGVudGlmaWVyOjpjcmVhdGUoKSkKLXsKLSAgICBpZiAob3RoZXItPm1faXRlcmF0
b3IpIHsKLSAgICAgICAgbV9pdGVyYXRvciA9IG1fdHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9y
KCk7Ci0KLSAgICAgICAgaWYgKG90aGVyLT5tX2l0ZXJhdG9yLT5pc1ZhbGlkKCkpIHsKLSAgICAg
ICAgICAgIG1faXRlcmF0b3ItPnNlZWsob3RoZXItPm1faXRlcmF0b3ItPmtleSgpKTsKLSAgICAg
ICAgICAgIEFTU0VSVChtX2l0ZXJhdG9yLT5pc1ZhbGlkKCkpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgbV9yZWNvcmRJZGVudGlmaWVyLT5yZXNldChvdGhlci0+bV9yZWNvcmRJZGVudGlmaWVy
LT5lbmNvZGVkUHJpbWFyeUtleSgpLCBvdGhlci0+bV9yZWNvcmRJZGVudGlmaWVyLT52ZXJzaW9u
KCkpOwotfQotCi1ib29sIElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREI6OmZpcnN0U2Vlaygp
Ci17Ci0gICAgbV9pdGVyYXRvciA9IG1fdHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7Ci0g
ICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5mb3J3YXJkKQotICAgICAgICBtX2l0ZXJhdG9yLT5zZWVr
KG1fY3Vyc29yT3B0aW9ucy5sb3dLZXkpOwotICAgIGVsc2UKLSAgICAgICAgbV9pdGVyYXRvci0+
c2VlayhtX2N1cnNvck9wdGlvbnMuaGlnaEtleSk7Ci0KLSAgICByZXR1cm4gY29udGludWVGdW5j
dGlvbigwLCBSZWFkeSk7Ci19Ci0KLWJvb2wgSURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQjo6
YWR2YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50KQotewotICAgIHdoaWxlIChjb3VudC0tKSB7Ci0g
ICAgICAgIGlmICghY29udGludWVGdW5jdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJREJCYWNraW5nU3RvcmVDdXJz
b3JMZXZlbERCOjpjb250aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktleSoga2V5LCBJdGVyYXRvclN0
YXRlIG5leHRTdGF0ZSkKLXsKLSAgICBSZWZQdHI8SURCS2V5PiBwcmV2aW91c0tleSA9IG1fY3Vy
cmVudEtleTsKLQotICAgIGJvb2wgZmlyc3RJdGVyYXRpb24gPSB0cnVlOwotCi0gICAgLy8gV2hl
biBpdGVyYXRpbmcgd2l0aCBQcmV2Tm9EdXBsaWNhdGUsIHNwZWMgcmVxdWlyZXMgdGhhdCB0aGUK
LSAgICAvLyB2YWx1ZSB3ZSB5aWVsZCBmb3IgZWFjaCBrZXkgaXMgdGhlIGZpcnN0IGR1cGxpY2F0
ZSBpbiBmb3J3YXJkcwotICAgIC8vIG9yZGVyLgotICAgIFJlZlB0cjxJREJLZXk+IGxhc3REdXBs
aWNhdGVLZXk7Ci0KLSAgICBib29sIGZvcndhcmQgPSBtX2N1cnNvck9wdGlvbnMuZm9yd2FyZDsK
LQotICAgIGZvciAoOzspIHsKLSAgICAgICAgaWYgKG5leHRTdGF0ZSA9PSBTZWVrKSB7Ci0gICAg
ICAgICAgICAvLyBGSVhNRTogT3B0aW1pemUgc2Vla2luZyBmb3IgcmV2ZXJzZSBjdXJzb3JzIGFz
IHdlbGwuCi0gICAgICAgICAgICBpZiAoZmlyc3RJdGVyYXRpb24gJiYga2V5ICYmIGZvcndhcmQp
IHsKLSAgICAgICAgICAgICAgICBtX2l0ZXJhdG9yLT5zZWVrKGVuY29kZUtleSgqa2V5KSk7Ci0g
ICAgICAgICAgICAgICAgZmlyc3RJdGVyYXRpb24gPSBmYWxzZTsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoZm9yd2FyZCkKLSAgICAgICAgICAgICAgICBtX2l0ZXJhdG9yLT5uZXh0KCk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9pdGVyYXRvci0+cHJldigpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIG5leHRTdGF0ZSA9IFNlZWs7IC8vIGZvciBzdWJzZXF1ZW50
IGl0ZXJhdGlvbnMKLQotICAgICAgICBpZiAoIW1faXRlcmF0b3ItPmlzVmFsaWQoKSkgewotICAg
ICAgICAgICAgaWYgKCFmb3J3YXJkICYmIGxhc3REdXBsaWNhdGVLZXkuZ2V0KCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHdhbGsgZm9yd2FyZCBiZWNhdXNlIHdlIGhpdCB0aGUg
ZW5kIG9mCi0gICAgICAgICAgICAgICAgLy8gdGhlIGRhdGEuCi0gICAgICAgICAgICAgICAgZm9y
d2FyZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpc1Bh
c3RCb3VuZHMoKSkgewotICAgICAgICAgICAgaWYgKCFmb3J3YXJkICYmIGxhc3REdXBsaWNhdGVL
ZXkuZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHdhbGsgZm9yd2FyZCBi
ZWNhdXNlIG5vdyB3ZSdyZSBiZXlvbmQgdGhlCi0gICAgICAgICAgICAgICAgLy8gYm91bmRzIGRl
ZmluZWQgYnkgdGhlIGN1cnNvci4KLSAgICAgICAgICAgICAgICBmb3J3YXJkID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFoYXZlRW50ZXJlZFJhbmdlKCkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBUaGUgcm93IG1heSBub3QgbG9h
ZCBiZWNhdXNlIHRoZXJlJ3MgYSBzdGFsZSBlbnRyeSBpbiB0aGUKLSAgICAgICAgLy8gaW5kZXgu
IFRoaXMgaXMgbm90IGZhdGFsLgotICAgICAgICBpZiAoIWxvYWRDdXJyZW50Um93KCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoa2V5KSB7Ci0gICAgICAgICAgICBpZiAo
Zm9yd2FyZCkgewotICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRLZXktPmlzTGVzc1RoYW4o
a2V5KSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIGlmIChrZXktPmlzTGVzc1RoYW4obV9jdXJyZW50S2V5LmdldCgp
KSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAobV9jdXJzb3JPcHRpb25zLnVuaXF1ZSkgewotCi0gICAgICAgICAg
ICBpZiAobV9jdXJyZW50S2V5LT5pc0VxdWFsKHByZXZpb3VzS2V5LmdldCgpKSkgewotICAgICAg
ICAgICAgICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBhYmxlIHRvIHdhbGsgZm9yd2FyZCBhbGwg
dGhlIHdheQotICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBwcmV2aW91cyBrZXkuCi0gICAgICAg
ICAgICAgICAgQVNTRVJUKCFsYXN0RHVwbGljYXRlS2V5LmdldCgpKTsKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFmb3J3YXJkKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKCFsYXN0RHVwbGljYXRlS2V5LmdldCgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGxhc3REdXBsaWNhdGVLZXkgPSBtX2N1cnJlbnRLZXk7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gd2FsayBmb3J3YXJkIGJlY2F1c2Ugd2UgaGl0IHRoZSBib3VuZGFyeQot
ICAgICAgICAgICAgICAgIC8vIGJldHdlZW4ga2V5IHJhbmdlcy4KLSAgICAgICAgICAgICAgICBp
ZiAoIWxhc3REdXBsaWNhdGVLZXktPmlzRXF1YWwobV9jdXJyZW50S2V5LmdldCgpKSkgewotICAg
ICAgICAgICAgICAgICAgICBmb3J3YXJkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgQVNT
RVJUKCFsYXN0RHVwbGljYXRlS2V5LmdldCgpIHx8IChmb3J3YXJkICYmIGxhc3REdXBsaWNhdGVL
ZXktPmlzRXF1YWwobV9jdXJyZW50S2V5LmdldCgpKSkpOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREI6OmhhdmVFbnRlcmVkUmFuZ2UoKSBj
b25zdAotewotICAgIGlmIChtX2N1cnNvck9wdGlvbnMuZm9yd2FyZCkgewotICAgICAgICBpZiAo
bV9jdXJzb3JPcHRpb25zLmxvd09wZW4pCi0gICAgICAgICAgICByZXR1cm4gSURCQmFja2luZ1N0
b3JlTGV2ZWxEQjo6Y29tcGFyZUluZGV4S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JP
cHRpb25zLmxvd0tleSkgPiAwOwotCi0gICAgICAgIHJldHVybiBJREJCYWNraW5nU3RvcmVMZXZl
bERCOjpjb21wYXJlSW5kZXhLZXlzKG1faXRlcmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMu
bG93S2V5KSA+PSAwOwotICAgIH0KLSAgICBpZiAobV9jdXJzb3JPcHRpb25zLmhpZ2hPcGVuKQot
ICAgICAgICByZXR1cm4gSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6Y29tcGFyZUluZGV4S2V5cyht
X2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmhpZ2hLZXkpIDwgMDsKLQotICAgIHJl
dHVybiBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpjb21wYXJlSW5kZXhLZXlzKG1faXRlcmF0b3It
PmtleSgpLCBtX2N1cnNvck9wdGlvbnMuaGlnaEtleSkgPD0gMDsKLX0KLQotYm9vbCBJREJCYWNr
aW5nU3RvcmVDdXJzb3JMZXZlbERCOjppc1Bhc3RCb3VuZHMoKSBjb25zdAotewotICAgIGlmICht
X2N1cnNvck9wdGlvbnMuZm9yd2FyZCkgewotICAgICAgICBpZiAobV9jdXJzb3JPcHRpb25zLmhp
Z2hPcGVuKQotICAgICAgICAgICAgcmV0dXJuIElEQkJhY2tpbmdTdG9yZUxldmVsREI6OmNvbXBh
cmVJbmRleEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSA+
PSAwOwotICAgICAgICByZXR1cm4gSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6Y29tcGFyZUluZGV4
S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmhpZ2hLZXkpID4gMDsKLSAg
ICB9Ci0KLSAgICBpZiAobV9jdXJzb3JPcHRpb25zLmxvd09wZW4pCi0gICAgICAgIHJldHVybiBJ
REJCYWNraW5nU3RvcmVMZXZlbERCOjpjb21wYXJlSW5kZXhLZXlzKG1faXRlcmF0b3ItPmtleSgp
LCBtX2N1cnNvck9wdGlvbnMubG93S2V5KSA8PSAwOwotICAgIHJldHVybiBJREJCYWNraW5nU3Rv
cmVMZXZlbERCOjpjb21wYXJlSW5kZXhLZXlzKG1faXRlcmF0b3ItPmtleSgpLCBtX2N1cnNvck9w
dGlvbnMubG93S2V5KSA8IDA7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKLQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3Rv
cmVDdXJzb3JMZXZlbERCLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZl
bGRiL0lEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYjkwNDQ4YS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREIuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJCYWNraW5nU3Rv
cmVDdXJzb3JMZXZlbERCX2gKLSNkZWZpbmUgSURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQl9o
Ci0KLSNpbmNsdWRlICJJREJLZXkuaCIKLSNpbmNsdWRlICJJREJSZWNvcmRJZGVudGlmaWVyLmgi
Ci0jaW5jbHVkZSAiTGV2ZWxEQkl0ZXJhdG9yLmgiCi0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0jaWYgVVNFKExFVkVMREIpCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgTGV2ZWxEQlRyYW5zYWN0aW9uOwotY2xhc3MgU2hhcmVkQnVmZmVy
OwotCi1jbGFzcyBJREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCIDogcHVibGljIFJlZkNvdW50
ZWQ8SURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQj4gewotcHVibGljOgotICAgIGVudW0gSXRl
cmF0b3JTdGF0ZSB7Ci0gICAgICAgIFJlYWR5ID0gMCwKLSAgICAgICAgU2VlawotICAgIH07Ci0K
LSAgICBzdHJ1Y3QgQ3Vyc29yT3B0aW9ucyB7Ci0gICAgICAgIGludDY0X3QgZGF0YWJhc2VJZDsK
LSAgICAgICAgaW50NjRfdCBvYmplY3RTdG9yZUlkOwotICAgICAgICBpbnQ2NF90IGluZGV4SWQ7
Ci0gICAgICAgIFZlY3RvcjxjaGFyPiBsb3dLZXk7Ci0gICAgICAgIGJvb2wgbG93T3BlbjsKLSAg
ICAgICAgVmVjdG9yPGNoYXI+IGhpZ2hLZXk7Ci0gICAgICAgIGJvb2wgaGlnaE9wZW47Ci0gICAg
ICAgIGJvb2wgZm9yd2FyZDsKLSAgICAgICAgYm9vbCB1bmlxdWU7Ci0gICAgfTsKLQotICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEtl
eTsgfQotICAgIHZpcnR1YWwgYm9vbCBjb250aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktleSogPSAw
LCBJdGVyYXRvclN0YXRlID0gU2Vlayk7Ci0gICAgdmlydHVhbCBib29sIGFkdmFuY2UodW5zaWdu
ZWQgbG9uZyk7Ci0gICAgYm9vbCBmaXJzdFNlZWsoKTsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCPiBjbG9uZSgpID0gMDsKLQotICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdCB7IHJldHVybiBtX2N1cnJl
bnRLZXk7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSgpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIGNvbnN0IElEQlJlY29yZElkZW50aWZpZXImIHJlY29yZElk
ZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiAqbV9yZWNvcmRJZGVudGlmaWVyOyB9Ci0gICAgdmly
dHVhbCB+SURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQigpIHsgfQotICAgIHZpcnR1YWwgYm9v
bCBsb2FkQ3VycmVudFJvdygpID0gMDsKLQotcHJvdGVjdGVkOgotICAgIElEQkJhY2tpbmdTdG9y
ZUN1cnNvckxldmVsREIoaW50NjRfdCBjdXJzb3JJRCwgTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKLSAgICAgICAgOiBt
X2N1cnNvcklEKGN1cnNvcklEKQotICAgICAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24p
Ci0gICAgICAgICwgbV9jdXJzb3JPcHRpb25zKGN1cnNvck9wdGlvbnMpCi0gICAgICAgICwgbV9y
ZWNvcmRJZGVudGlmaWVyKElEQlJlY29yZElkZW50aWZpZXI6OmNyZWF0ZSgpKQotICAgIHsKLSAg
ICB9Ci0gICAgZXhwbGljaXQgSURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQihjb25zdCBJREJC
YWNraW5nU3RvcmVDdXJzb3JMZXZlbERCKiBvdGhlcik7Ci0KLSAgICB2aXJ0dWFsIFZlY3Rvcjxj
aGFyPiBlbmNvZGVLZXkoY29uc3QgSURCS2V5JikgPSAwOwotCi0gICAgYm9vbCBpc1Bhc3RCb3Vu
ZHMoKSBjb25zdDsKLSAgICBib29sIGhhdmVFbnRlcmVkUmFuZ2UoKSBjb25zdDsKLQotICAgIGlu
dDY0X3QgbV9jdXJzb3JJRDsKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIG1fdHJhbnNhY3Rpb247
Ci0gICAgY29uc3QgQ3Vyc29yT3B0aW9ucyBtX2N1cnNvck9wdGlvbnM7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPExldmVsREJJdGVyYXRvcj4gbV9pdGVyYXRvcjsKLSAgICBSZWZQdHI8SURCS2V5PiBt
X2N1cnJlbnRLZXk7Ci0gICAgUmVmUHRyPElEQlJlY29yZElkZW50aWZpZXI+IG1fcmVjb3JkSWRl
bnRpZmllcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShM
RVZFTERCKQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotI2VuZGlmIC8vIElE
QkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2
ZWxEQi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwNDViNzYuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5n
U3RvcmVMZXZlbERCLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4OTUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmVMZXZlbERCLmgi
Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCi0KLSNpbmNs
dWRlICJGaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VNZXRhZGF0YS5oIgotI2lu
Y2x1ZGUgIklEQkluZGV4V3JpdGVyTGV2ZWxEQi5oIgotI2luY2x1ZGUgIklEQktleS5oIgotI2lu
Y2x1ZGUgIklEQktleVBhdGguaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUg
IklEQkxldmVsREJDb2RpbmcuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmQuaCIK
LSNpbmNsdWRlICJMZXZlbERCQ29tcGFyYXRvci5oIgotI2luY2x1ZGUgIkxldmVsREJEYXRhYmFz
ZS5oIgotI2luY2x1ZGUgIkxldmVsREJJdGVyYXRvci5oIgotI2luY2x1ZGUgIkxldmVsREJTbGlj
ZS5oIgotI2luY2x1ZGUgIkxldmVsREJUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
dXNpbmcgbmFtZXNwYWNlIElEQkxldmVsREJDb2Rpbmc7Ci0KLWNvbnN0IGludDY0X3QgS2V5R2Vu
ZXJhdG9ySW5pdGlhbE51bWJlciA9IDE7IC8vIEZyb20gdGhlIEluZGV4ZWREQiBzcGVjaWZpY2F0
aW9uLgotCi1lbnVtIElEQkJhY2tpbmdTdG9yZUxldmVsREJFcnJvclNvdXJjZSB7Ci0gICAgLy8g
MCAtIDIgYXJlIG5vIGxvbmdlciB1c2VkLgotICAgIEZpbmRLZXlJbkluZGV4ID0gMywKLSAgICBH
ZXRJREJEYXRhYmFzZU1ldGFEYXRhLAotICAgIEdldEluZGV4ZXMsCi0gICAgR2V0S2V5R2VuZXJh
dG9yQ3VycmVudE51bWJlciwKLSAgICBHZXRPYmplY3RTdG9yZXMsCi0gICAgR2V0UmVjb3JkLAot
ICAgIEtleUV4aXN0c0luT2JqZWN0U3RvcmUsCi0gICAgTG9hZEN1cnJlbnRSb3csCi0gICAgU2V0
dXBNZXRhZGF0YSwKLSAgICBHZXRQcmltYXJ5S2V5VmlhSW5kZXgsCi0gICAgS2V5RXhpc3RzSW5J
bmRleCwKLSAgICBWZXJzaW9uRXhpc3RzLAotICAgIERlbGV0ZU9iamVjdFN0b3JlLAotICAgIFNl
dE1heE9iamVjdFN0b3JlSWQsCi0gICAgU2V0TWF4SW5kZXhJZCwKLSAgICBHZXROZXdEYXRhYmFz
ZUlkLAotICAgIEdldE5ld1ZlcnNpb25OdW1iZXIsCi0gICAgQ3JlYXRlSURCRGF0YWJhc2VNZXRh
RGF0YSwKLSAgICBEZWxldGVEYXRhYmFzZSwKLSAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlSW50
ZXJuYWxFcnJvck1heCwKLX07Ci0KLS8vIFVzZSB0byBzaWduYWwgY29uZGl0aW9ucyB0aGF0IHVz
dWFsbHkgaW5kaWNhdGUgZGV2ZWxvcGVyIGVycm9yLCBidXQgY291bGQgYmUgY2F1c2VkIGJ5IGRh
dGEgY29ycnVwdGlvbi4KLS8vIEEgbWFjcm8gaXMgdXNlZCBpbnN0ZWFkIG9mIGFuIGlubGluZSBm
dW5jdGlvbiBzbyB0aGF0IHRoZSBhc3NlcnQgYW5kIGxvZyByZXBvcnQgdGhlIGxpbmUgbnVtYmVy
LgotI2RlZmluZSBSRVBPUlRfRVJST1IodHlwZSwgbG9jYXRpb24pIFwKLSAgICBkbyB7IFwKLSAg
ICAgICAgTE9HX0VSUk9SKCJJbmRleGVkREIgJXMgRXJyb3I6ICVzIiwgdHlwZSwgI2xvY2F0aW9u
KTsgXAotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgXAotICAgIH0gd2hpbGUgKDApCi0K
LSNkZWZpbmUgSU5URVJOQUxfUkVBRF9FUlJPUihsb2NhdGlvbikgUkVQT1JUX0VSUk9SKCJSZWFk
IiwgbG9jYXRpb24pCi0jZGVmaW5lIElOVEVSTkFMX0NPTlNJU1RFTkNZX0VSUk9SKGxvY2F0aW9u
KSBSRVBPUlRfRVJST1IoIkNvbnNpc3RlbmN5IiwgbG9jYXRpb24pCi0jZGVmaW5lIElOVEVSTkFM
X1dSSVRFX0VSUk9SKGxvY2F0aW9uKSBSRVBPUlRfRVJST1IoIldyaXRlIiwgbG9jYXRpb24pCi0K
LXN0YXRpYyB2b2lkIHB1dEJvb2woTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29u
c3QgTGV2ZWxEQlNsaWNlJiBrZXksIGJvb2wgdmFsdWUpCi17Ci0gICAgdHJhbnNhY3Rpb24tPnB1
dChrZXksIGVuY29kZUJvb2wodmFsdWUpKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIERCT3JU
cmFuc2FjdGlvbj4KLXN0YXRpYyBib29sIGdldEludChEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25z
dCBMZXZlbERCU2xpY2UmIGtleSwgaW50NjRfdCYgZm91bmRJbnQsIGJvb2wmIGZvdW5kKQotewot
ICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7Ci0gICAgYm9vbCBvayA9IGRiLT5zYWZlR2V0KGtleSwg
cmVzdWx0LCBmb3VuZCk7Ci0gICAgaWYgKCFvaykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmICghZm91bmQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgZm91bmRJbnQgPSBkZWNv
ZGVJbnQocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXN0YXRpYyB2b2lkIHB1dEludChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBj
b25zdCBMZXZlbERCU2xpY2UmIGtleSwgaW50NjRfdCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQodmFs
dWUgPj0gMCk7Ci0gICAgdHJhbnNhY3Rpb24tPnB1dChrZXksIGVuY29kZUludCh2YWx1ZSkpOwot
fQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgREJPclRyYW5zYWN0aW9uPgotV0FSTl9VTlVTRURfUkVU
VVJOIHN0YXRpYyBib29sIGdldFZhckludChEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBMZXZl
bERCU2xpY2UmIGtleSwgaW50NjRfdCYgZm91bmRJbnQsIGJvb2wmIGZvdW5kKQotewotICAgIFZl
Y3RvcjxjaGFyPiByZXN1bHQ7Ci0gICAgYm9vbCBvayA9IGRiLT5zYWZlR2V0KGtleSwgcmVzdWx0
LCBmb3VuZCk7Ci0gICAgaWYgKCFvaykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
Zm91bmQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgZm91bmQgPSBkZWNvZGVWYXJJbnQo
cmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSwgZm91bmRJbnQpID09IHJlc3VsdC5lbmQoKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgcHV0VmFySW50KExldmVsREJUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IExldmVsREJTbGljZSYga2V5LCBpbnQ2NF90IHZh
bHVlKQotewotICAgIHRyYW5zYWN0aW9uLT5wdXQoa2V5LCBlbmNvZGVWYXJJbnQodmFsdWUpKTsK
LX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIERCT3JUcmFuc2FjdGlvbj4KLVdBUk5fVU5VU0VEX1JF
VFVSTiBzdGF0aWMgYm9vbCBnZXRTdHJpbmcoREJPclRyYW5zYWN0aW9uKiBkYiwgY29uc3QgTGV2
ZWxEQlNsaWNlJiBrZXksIFN0cmluZyYgZm91bmRTdHJpbmcsIGJvb2wmIGZvdW5kKQotewotICAg
IFZlY3RvcjxjaGFyPiByZXN1bHQ7Ci0gICAgZm91bmQgPSBmYWxzZTsKLSAgICBib29sIG9rID0g
ZGItPnNhZmVHZXQoa2V5LCByZXN1bHQsIGZvdW5kKTsKLSAgICBpZiAoIW9rKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFmb3VuZCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBmb3VuZFN0cmluZyA9IGRlY29kZVN0cmluZyhyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgp
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgcHV0U3RyaW5nKExldmVsREJU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IExldmVsREJTbGljZSYga2V5LCBjb25zdCBT
dHJpbmcmIHZhbHVlKQotewotICAgIHRyYW5zYWN0aW9uLT5wdXQoa2V5LCBlbmNvZGVTdHJpbmco
dmFsdWUpKTsKLX0KLQotc3RhdGljIHZvaWQgcHV0SURCS2V5UGF0aChMZXZlbERCVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBjb25zdCBMZXZlbERCU2xpY2UmIGtleSwgY29uc3QgSURCS2V5UGF0
aCYgdmFsdWUpCi17Ci0gICAgdHJhbnNhY3Rpb24tPnB1dChrZXksIGVuY29kZUlEQktleVBhdGgo
dmFsdWUpKTsKLX0KLQotc3RhdGljIGludCBjb21wYXJlS2V5cyhjb25zdCBMZXZlbERCU2xpY2Um
IGEsIGNvbnN0IExldmVsREJTbGljZSYgYikKLXsKLSAgICByZXR1cm4gY29tcGFyZShhLCBiKTsK
LX0KLQotaW50IElEQkJhY2tpbmdTdG9yZUxldmVsREI6OmNvbXBhcmVJbmRleEtleXMoY29uc3Qg
TGV2ZWxEQlNsaWNlJiBhLCBjb25zdCBMZXZlbERCU2xpY2UmIGIpCi17Ci0gICAgcmV0dXJuIGNv
bXBhcmUoYSwgYiwgdHJ1ZSk7Ci19Ci0KLWNsYXNzIENvbXBhcmF0b3IgOiBwdWJsaWMgTGV2ZWxE
QkNvbXBhcmF0b3IgewotcHVibGljOgotICAgIHZpcnR1YWwgaW50IGNvbXBhcmUoY29uc3QgTGV2
ZWxEQlNsaWNlJiBhLCBjb25zdCBMZXZlbERCU2xpY2UmIGIpIGNvbnN0IHsgcmV0dXJuIElEQkxl
dmVsREJDb2Rpbmc6OmNvbXBhcmUoYSwgYik7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG5h
bWUoKSBjb25zdCB7IHJldHVybiAiaWRiX2NtcDEiOyB9Ci19OwotCi0vLyAwIC0gSW5pdGlhbCB2
ZXJzaW9uLgotLy8gMSAtIEFkZHMgVXNlckludFZlcnNpb24gdG8gRGF0YWJhc2VNZXRhRGF0YS4K
LS8vIDIgLSBBZGRzIERhdGFWZXJzaW9uIHRvIHRvIGdsb2JhbCBtZXRhZGF0YS4KLWNvbnN0IGlu
dDY0X3QgbGF0ZXN0S25vd25TY2hlbWFWZXJzaW9uID0gMjsKLVdBUk5fVU5VU0VEX1JFVFVSTiBz
dGF0aWMgYm9vbCBpc1NjaGVtYUtub3duKExldmVsREJEYXRhYmFzZSogZGIsIGJvb2wmIGtub3du
KQotewotICAgIGludDY0X3QgZGJTY2hlbWFWZXJzaW9uID0gMDsKLSAgICBib29sIGZvdW5kID0g
ZmFsc2U7Ci0gICAgYm9vbCBvayA9IGdldEludChkYiwgU2NoZW1hVmVyc2lvbktleTo6ZW5jb2Rl
KCksIGRiU2NoZW1hVmVyc2lvbiwgZm91bmQpOwotICAgIGlmICghb2spCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgIGtub3duID0gdHJ1ZTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmIChkYlNjaGVtYVZlcnNpb24gPiBsYXRlc3RL
bm93blNjaGVtYVZlcnNpb24pIHsKLSAgICAgICAga25vd24gPSBmYWxzZTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgY29uc3QgdWludDMyX3QgbGF0ZXN0S25vd25EYXRhVmVy
c2lvbiA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6d2lyZUZvcm1hdFZlcnNpb24oKTsKLSAgICBp
bnQ2NF90IGRiRGF0YVZlcnNpb24gPSAwOwotICAgIG9rID0gZ2V0SW50KGRiLCBEYXRhVmVyc2lv
bktleTo6ZW5jb2RlKCksIGRiRGF0YVZlcnNpb24sIGZvdW5kKTsKLSAgICBpZiAoIW9rKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFmb3VuZCkgewotICAgICAgICBrbm93biA9IHRy
dWU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChkYkRhdGFWZXJzaW9u
ID4gbGF0ZXN0S25vd25EYXRhVmVyc2lvbikgewotICAgICAgICBrbm93biA9IGZhbHNlOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBrbm93biA9IHRydWU7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLVdBUk5fVU5VU0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBzZXRVcE1ldGFkYXRh
KExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFN0cmluZyYgb3JpZ2luKQotewotICAgIGNvbnN0
IHVpbnQzMl90IGxhdGVzdEtub3duRGF0YVZlcnNpb24gPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OndpcmVGb3JtYXRWZXJzaW9uKCk7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IHNjaGVtYVZlcnNp
b25LZXkgPSBTY2hlbWFWZXJzaW9uS2V5OjplbmNvZGUoKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hh
cj4gZGF0YVZlcnNpb25LZXkgPSBEYXRhVmVyc2lvbktleTo6ZW5jb2RlKCk7Ci0KLSAgICBSZWZQ
dHI8TGV2ZWxEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiA9IExldmVsREJUcmFuc2FjdGlvbjo6
Y3JlYXRlKGRiKTsKLQotICAgIGludDY0X3QgZGJTY2hlbWFWZXJzaW9uID0gMDsKLSAgICBpbnQ2
NF90IGRiRGF0YVZlcnNpb24gPSAwOwotICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICBib29s
IG9rID0gZ2V0SW50KHRyYW5zYWN0aW9uLmdldCgpLCBzY2hlbWFWZXJzaW9uS2V5LCBkYlNjaGVt
YVZlcnNpb24sIGZvdW5kKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIElOVEVSTkFMX1JFQURf
RVJST1IoU2V0dXBNZXRhZGF0YSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
aWYgKCFmb3VuZCkgewotICAgICAgICAvLyBJbml0aWFsaXplIG5ldyBiYWNraW5nIHN0b3JlLgot
ICAgICAgICBkYlNjaGVtYVZlcnNpb24gPSBsYXRlc3RLbm93blNjaGVtYVZlcnNpb247Ci0gICAg
ICAgIHB1dEludCh0cmFuc2FjdGlvbi5nZXQoKSwgc2NoZW1hVmVyc2lvbktleSwgZGJTY2hlbWFW
ZXJzaW9uKTsKLSAgICAgICAgZGJEYXRhVmVyc2lvbiA9IGxhdGVzdEtub3duRGF0YVZlcnNpb247
Ci0gICAgICAgIHB1dEludCh0cmFuc2FjdGlvbi5nZXQoKSwgZGF0YVZlcnNpb25LZXksIGRiRGF0
YVZlcnNpb24pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFVwZ3JhZGUgb2xkIGJhY2tpbmcg
c3RvcmUuCi0gICAgICAgIEFTU0VSVChkYlNjaGVtYVZlcnNpb24gPD0gbGF0ZXN0S25vd25TY2hl
bWFWZXJzaW9uKTsKLSAgICAgICAgaWYgKGRiU2NoZW1hVmVyc2lvbiA8IDEpIHsKLSAgICAgICAg
ICAgIGRiU2NoZW1hVmVyc2lvbiA9IDE7Ci0gICAgICAgICAgICBwdXRJbnQodHJhbnNhY3Rpb24u
Z2V0KCksIHNjaGVtYVZlcnNpb25LZXksIGRiU2NoZW1hVmVyc2lvbik7Ci0gICAgICAgICAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZU1pbktl
eUZvck9yaWdpbihvcmlnaW4pOwotICAgICAgICAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BL
ZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZVN0b3BLZXlGb3JPcmlnaW4ob3JpZ2luKTsKLSAg
ICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gZGItPmNyZWF0
ZUl0ZXJhdG9yKCk7Ci0gICAgICAgICAgICBmb3IgKGl0LT5zZWVrKHN0YXJ0S2V5KTsgaXQtPmlz
VmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMDsgaXQtPm5leHQo
KSkgewotICAgICAgICAgICAgICAgIGludDY0X3QgZGF0YWJhc2VJZCA9IDA7Ci0gICAgICAgICAg
ICAgICAgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBib29sIG9rID0gZ2V0SW50KHRy
YW5zYWN0aW9uLmdldCgpLCBpdC0+a2V5KCksIGRhdGFiYXNlSWQsIGZvdW5kKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICAgICAgICAgIElOVEVSTkFMX1JFQURfRVJS
T1IoU2V0dXBNZXRhZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFmb3VuZCkgewotICAgICAgICAg
ICAgICAgICAgICBJTlRFUk5BTF9DT05TSVNURU5DWV9FUlJPUihTZXR1cE1ldGFkYXRhKTsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBWZWN0b3I8Y2hhcj4gaW50VmVyc2lvbktleSA9IERhdGFiYXNlTWV0YURhdGFL
ZXk6OmVuY29kZShkYXRhYmFzZUlkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VySW50VmVyc2lv
bik7Ci0gICAgICAgICAgICAgICAgcHV0VmFySW50KHRyYW5zYWN0aW9uLmdldCgpLCBpbnRWZXJz
aW9uS2V5LCBJREJEYXRhYmFzZU1ldGFkYXRhOjpEZWZhdWx0SW50VmVyc2lvbik7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGRiU2NoZW1hVmVyc2lvbiA8IDIpIHsKLSAg
ICAgICAgICAgIGRiU2NoZW1hVmVyc2lvbiA9IDI7Ci0gICAgICAgICAgICBwdXRJbnQodHJhbnNh
Y3Rpb24uZ2V0KCksIHNjaGVtYVZlcnNpb25LZXksIGRiU2NoZW1hVmVyc2lvbik7Ci0gICAgICAg
ICAgICBkYkRhdGFWZXJzaW9uID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp3aXJlRm9ybWF0VmVy
c2lvbigpOwotICAgICAgICAgICAgcHV0SW50KHRyYW5zYWN0aW9uLmdldCgpLCBkYXRhVmVyc2lv
bktleSwgZGJEYXRhVmVyc2lvbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBBbGwgbmV3
IHZhbHVlcyB3aWxsIGJlIHdyaXR0ZW4gdXNpbmcgdGhpcyBzZXJpYWxpemF0aW9uIHZlcnNpb24u
Ci0gICAgZm91bmQgPSBmYWxzZTsKLSAgICBvayA9IGdldEludCh0cmFuc2FjdGlvbi5nZXQoKSwg
ZGF0YVZlcnNpb25LZXksIGRiRGF0YVZlcnNpb24sIGZvdW5kKTsKLSAgICBpZiAoIW9rKSB7Ci0g
ICAgICAgIElOVEVSTkFMX1JFQURfRVJST1IoU2V0dXBNZXRhZGF0YSk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCFmb3VuZCkgewotICAgICAgICBJTlRFUk5BTF9DT05T
SVNURU5DWV9FUlJPUihTZXR1cE1ldGFkYXRhKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICBpZiAoZGJEYXRhVmVyc2lvbiA8IGxhdGVzdEtub3duRGF0YVZlcnNpb24pIHsKLSAg
ICAgICAgZGJEYXRhVmVyc2lvbiA9IGxhdGVzdEtub3duRGF0YVZlcnNpb247Ci0gICAgICAgIHB1
dEludCh0cmFuc2FjdGlvbi5nZXQoKSwgZGF0YVZlcnNpb25LZXksIGRiRGF0YVZlcnNpb24pOwot
ICAgIH0KLQotICAgIEFTU0VSVChkYlNjaGVtYVZlcnNpb24gPT0gbGF0ZXN0S25vd25TY2hlbWFW
ZXJzaW9uKTsKLSAgICBBU1NFUlQoZGJEYXRhVmVyc2lvbiA9PSBsYXRlc3RLbm93bkRhdGFWZXJz
aW9uKTsKLQotICAgIGlmICghdHJhbnNhY3Rpb24tPmNvbW1pdCgpKSB7Ci0gICAgICAgIElOVEVS
TkFMX1dSSVRFX0VSUk9SKFNldHVwTWV0YWRhdGEpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgREJPclRyYW5z
YWN0aW9uPgotV0FSTl9VTlVTRURfUkVUVVJOIHN0YXRpYyBib29sIGdldE1heE9iamVjdFN0b3Jl
SWQoREJPclRyYW5zYWN0aW9uKiBkYiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90JiBtYXhP
YmplY3RTdG9yZUlkKQotewotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBtYXhPYmplY3RTdG9yZUlk
S2V5ID0gRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIERhdGFiYXNlTWV0
YURhdGFLZXk6Ok1heE9iamVjdFN0b3JlSWQpOwotICAgIGJvb2wgb2sgPSBnZXRNYXhPYmplY3RT
dG9yZUlkKGRiLCBtYXhPYmplY3RTdG9yZUlkS2V5LCBtYXhPYmplY3RTdG9yZUlkKTsKLSAgICBy
ZXR1cm4gb2s7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+Ci1XQVJO
X1VOVVNFRF9SRVRVUk4gc3RhdGljIGJvb2wgZ2V0TWF4T2JqZWN0U3RvcmVJZChEQk9yVHJhbnNh
Y3Rpb24qIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIG1heE9iamVjdFN0b3JlSWRLZXksIGludDY0
X3QmIG1heE9iamVjdFN0b3JlSWQpCi17Ci0gICAgbWF4T2JqZWN0U3RvcmVJZCA9IC0xOwotICAg
IGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICBib29sIG9rID0gZ2V0SW50KGRiLCBtYXhPYmplY3RT
dG9yZUlkS2V5LCBtYXhPYmplY3RTdG9yZUlkLCBmb3VuZCk7Ci0gICAgaWYgKCFvaykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZm91bmQpCi0gICAgICAgIG1heE9iamVjdFN0b3Jl
SWQgPSAwOwotCi0gICAgQVNTRVJUKG1heE9iamVjdFN0b3JlSWQgPj0gMCk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWNsYXNzIERlZmF1bHRMZXZlbERCRmFjdG9yeSA6IHB1YmxpYyBMZXZlbERC
RmFjdG9yeSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8TGV2ZWxEQkRh
dGFiYXNlPiBvcGVuTGV2ZWxEQihjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBMZXZlbERC
Q29tcGFyYXRvciogY29tcGFyYXRvcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBMZXZlbERCRGF0
YWJhc2U6Om9wZW4oZmlsZU5hbWUsIGNvbXBhcmF0b3IpOwotICAgIH0KLSAgICB2aXJ0dWFsIGJv
b2wgZGVzdHJveUxldmVsREIoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBMZXZlbERCRGF0YWJhc2U6OmRlc3Ryb3koZmlsZU5hbWUpOwotICAgIH0KLX07Ci0K
LUlEQkJhY2tpbmdTdG9yZUxldmVsREI6OklEQkJhY2tpbmdTdG9yZUxldmVsREIoY29uc3QgU3Ry
aW5nJiBpZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8TGV2ZWxEQkRhdGFiYXNlPiBkYiwgc3Rk
Ojp1bmlxdWVfcHRyPExldmVsREJDb21wYXJhdG9yPiBjb21wYXJhdG9yKQotICAgIDogbV9pZGVu
dGlmaWVyKGlkZW50aWZpZXIpCi0gICAgLCBtX2RiKFdURjo6bW92ZShkYikpCi0gICAgLCBtX2Nv
bXBhcmF0b3IoV1RGOjptb3ZlKGNvbXBhcmF0b3IpKQotICAgICwgbV93ZWFrRmFjdG9yeSh0aGlz
KQotewotfQotCi1JREJCYWNraW5nU3RvcmVMZXZlbERCOjp+SURCQmFja2luZ1N0b3JlTGV2ZWxE
QigpCi17Ci0gICAgLy8gbV9kYidzIGRlc3RydWN0b3IgdXNlcyBtX2NvbXBhcmF0b3IuIFRoZSBv
cmRlciBvZiBkZXN0cnVjdGlvbiBpcyBpbXBvcnRhbnQuCi0gICAgbV9kYiA9IG51bGxwdHI7Ci0g
ICAgbV9jb21wYXJhdG9yID0gbnVsbHB0cjsKLX0KLQotUGFzc1JlZlB0cjxJREJCYWNraW5nU3Rv
cmVMZXZlbERCPiBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpvcGVuKGNvbnN0IFNlY3VyaXR5T3Jp
Z2luJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZUFyZywgY29uc3QgU3Ry
aW5nJiBmaWxlSWRlbnRpZmllcikKLXsKLSAgICBEZWZhdWx0TGV2ZWxEQkZhY3RvcnkgbGV2ZWxE
QkZhY3Rvcnk7Ci0gICAgcmV0dXJuIElEQkJhY2tpbmdTdG9yZUxldmVsREI6Om9wZW4oc2VjdXJp
dHlPcmlnaW4sIHBhdGhCYXNlQXJnLCBmaWxlSWRlbnRpZmllciwgJmxldmVsREJGYWN0b3J5KTsK
LX0KLQotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVMZXZlbERCPiBJREJCYWNraW5nU3RvcmVM
ZXZlbERCOjpvcGVuKGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBzZWN1cml0eU9yaWdpbiwgY29uc3Qg
U3RyaW5nJiBwYXRoQmFzZUFyZywgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgTGV2ZWxE
QkZhY3RvcnkqIGxldmVsREJGYWN0b3J5KQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCQmFj
a2luZ1N0b3JlTGV2ZWxEQjo6b3BlbiIpOwotICAgIEFTU0VSVCghcGF0aEJhc2VBcmcuaXNFbXB0
eSgpKTsKLSAgICBTdHJpbmcgcGF0aEJhc2UgPSBwYXRoQmFzZUFyZzsKLQotICAgIHN0ZDo6dW5p
cXVlX3B0cjxMZXZlbERCQ29tcGFyYXRvcj4gY29tcGFyYXRvciA9IHN0ZDo6bWFrZV91bmlxdWU8
Q29tcGFyYXRvcj4oKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TGV2ZWxEQkRhdGFiYXNlPiBkYjsK
LQotICAgIGlmICghbWFrZUFsbERpcmVjdG9yaWVzKHBhdGhCYXNlKSkgewotICAgICAgICBMT0df
RVJST1IoIlVuYWJsZSB0byBjcmVhdGUgSW5kZXhlZERCIGRhdGFiYXNlIHBhdGggJXMiLCBwYXRo
QmFzZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlTGV2ZWxEQj4oKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgcGF0aCA9IHBhdGhCeUFwcGVu
ZGluZ0NvbXBvbmVudChwYXRoQmFzZSwgc2VjdXJpdHlPcmlnaW4uZGF0YWJhc2VJZGVudGlmaWVy
KCkgKyAiLmluZGV4ZWRkYi5sZXZlbGRiIik7Ci0KLSAgICBkYiA9IGxldmVsREJGYWN0b3J5LT5v
cGVuTGV2ZWxEQihwYXRoLCBjb21wYXJhdG9yLmdldCgpKTsKLSAgICBpZiAoZGIpIHsKLSAgICAg
ICAgYm9vbCBrbm93biA9IGZhbHNlOwotICAgICAgICBib29sIG9rID0gaXNTY2hlbWFLbm93bihk
Yi5nZXQoKSwga25vd24pOwotICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICBMT0dfRVJS
T1IoIkluZGV4ZWREQiBoYWQgSU8gZXJyb3IgY2hlY2tpbmcgc2NoZW1hLCB0cmVhdGluZyBpdCBh
cyBmYWlsdXJlIHRvIG9wZW4iKTsKLSAgICAgICAgICAgIGRiID0gbnVsbHB0cjsKLSAgICAgICAg
fSBlbHNlIGlmICgha25vd24pIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiSW5kZXhlZERCIGJh
Y2tpbmcgc3RvcmUgaGFkIHVua25vd24gc2NoZW1hLCB0cmVhdGluZyBpdCBhcyBmYWlsdXJlIHRv
IG9wZW4iKTsKLSAgICAgICAgICAgIGRiID0gbnVsbHB0cjsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmICghZGIpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJJbmRleGVkREIgYmFja2luZyBzdG9y
ZSBvcGVuIGZhaWxlZCwgYXR0ZW1wdGluZyBjbGVhbnVwIik7Ci0gICAgICAgIGJvb2wgc3VjY2Vz
cyA9IGxldmVsREJGYWN0b3J5LT5kZXN0cm95TGV2ZWxEQihwYXRoKTsKLSAgICAgICAgaWYgKCFz
dWNjZXNzKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkluZGV4ZWREQiBiYWNraW5nIHN0b3Jl
IGNsZWFudXAgZmFpbGVkIik7Ci0gICAgICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmVMZXZlbERCPigpOwotICAgICAgICB9Ci0KLSAgICAgICAgTE9HX0VSUk9SKCJJbmRl
eGVkREIgYmFja2luZyBzdG9yZSBjbGVhbnVwIHN1Y2NlZWRlZCwgcmVvcGVuaW5nIik7Ci0gICAg
ICAgIGRiID0gbGV2ZWxEQkZhY3RvcnktPm9wZW5MZXZlbERCKHBhdGgsIGNvbXBhcmF0b3IuZ2V0
KCkpOwotICAgICAgICBpZiAoIWRiKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkluZGV4ZWRE
QiBiYWNraW5nIHN0b3JlIHJlb3BlbiBhZnRlciByZWNvdmVyeSBmYWlsZWQiKTsKLSAgICAgICAg
ICAgIHJldHVybiBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZUxldmVsREI+KCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAoIWRiKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVMZXZlbERCPigpOwot
ICAgIH0KLQotICAgIHJldHVybiBjcmVhdGUoZmlsZUlkZW50aWZpZXIsIFdURjo6bW92ZShkYiks
IFdURjo6bW92ZShjb21wYXJhdG9yKSk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
TGV2ZWxEQj4gSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6b3BlbkluTWVtb3J5KGNvbnN0IFN0cmlu
ZyYgaWRlbnRpZmllcikKLXsKLSAgICBEZWZhdWx0TGV2ZWxEQkZhY3RvcnkgbGV2ZWxEQkZhY3Rv
cnk7Ci0gICAgcmV0dXJuIElEQkJhY2tpbmdTdG9yZUxldmVsREI6Om9wZW5Jbk1lbW9yeShpZGVu
dGlmaWVyLCAmbGV2ZWxEQkZhY3RvcnkpOwotfQotCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZUxldmVsREI+IElEQkJhY2tpbmdTdG9yZUxldmVsREI6Om9wZW5Jbk1lbW9yeShjb25zdCBTdHJp
bmcmIGlkZW50aWZpZXIsIExldmVsREJGYWN0b3J5KikKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwg
IklEQkJhY2tpbmdTdG9yZUxldmVsREI6Om9wZW5Jbk1lbW9yeSIpOwotCi0gICAgc3RkOjp1bmlx
dWVfcHRyPExldmVsREJDb21wYXJhdG9yPiBjb21wYXJhdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxD
b21wYXJhdG9yPigpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxMZXZlbERCRGF0YWJhc2U+IGRiID0g
TGV2ZWxEQkRhdGFiYXNlOjpvcGVuSW5NZW1vcnkoY29tcGFyYXRvci5nZXQoKSk7Ci0gICAgaWYg
KCFkYikgewotICAgICAgICBMT0dfRVJST1IoIkxldmVsREJEYXRhYmFzZTo6b3BlbkluTWVtb3J5
IGZhaWxlZC4iKTsKLSAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlTGV2
ZWxEQj4oKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY3JlYXRlKGlkZW50aWZpZXIsIFdURjo6bW92
ZShkYiksIFdURjo6bW92ZShjb21wYXJhdG9yKSk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlTGV2ZWxEQj4gSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6Y3JlYXRlKGNvbnN0IFN0cmlu
ZyYgaWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPExldmVsREJEYXRhYmFzZT4gZGIsIHN0ZDo6
dW5pcXVlX3B0cjxMZXZlbERCQ29tcGFyYXRvcj4gY29tcGFyYXRvcikKLXsKLSAgICAvLyBGSVhN
RTogSGFuZGxlIGNvbXBhcmF0b3IgbmFtZSBjaGFuZ2VzLgotICAgIFJlZlB0cjxJREJCYWNraW5n
U3RvcmVMZXZlbERCPiBiYWNraW5nU3RvcmUoYWRvcHRSZWYobmV3IElEQkJhY2tpbmdTdG9yZUxl
dmVsREIoaWRlbnRpZmllciwgV1RGOjptb3ZlKGRiKSwgV1RGOjptb3ZlKGNvbXBhcmF0b3IpKSkp
OwotCi0gICAgaWYgKCFzZXRVcE1ldGFkYXRhKGJhY2tpbmdTdG9yZS0+bV9kYi5nZXQoKSwgaWRl
bnRpZmllcikpCi0gICAgICAgIHJldHVybiBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZUxldmVs
REI+KCk7Ci0KLSAgICByZXR1cm4gYmFja2luZ1N0b3JlLnJlbGVhc2UoKTsKLX0KLQotVmVjdG9y
PFN0cmluZz4gSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6Z2V0RGF0YWJhc2VOYW1lcygpCi17Ci0g
ICAgVmVjdG9yPFN0cmluZz4gZm91bmROYW1lczsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3Rh
cnRLZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZU1pbktleUZvck9yaWdpbihtX2lkZW50aWZp
ZXIpOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gRGF0YWJhc2VOYW1lS2V5Ojpl
bmNvZGVTdG9wS2V5Rm9yT3JpZ2luKG1faWRlbnRpZmllcik7Ci0KLSAgICBBU1NFUlQoZm91bmRO
YW1lcy5pc0VtcHR5KCkpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPExldmVsREJJdGVyYXRvcj4g
aXQgPSBtX2RiLT5jcmVhdGVJdGVyYXRvcigpOwotICAgIGZvciAoaXQtPnNlZWsoc3RhcnRLZXkp
OyBpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPCAwOyBp
dC0+bmV4dCgpKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHAgPSBpdC0+a2V5KCkuYmVnaW4oKTsK
LSAgICAgICAgY29uc3QgY2hhciogbGltaXQgPSBpdC0+a2V5KCkuZW5kKCk7Ci0KLSAgICAgICAg
RGF0YWJhc2VOYW1lS2V5IGRhdGFiYXNlTmFtZUtleTsKLSAgICAgICAgcCA9IERhdGFiYXNlTmFt
ZUtleTo6ZGVjb2RlKHAsIGxpbWl0LCAmZGF0YWJhc2VOYW1lS2V5KTsKLSAgICAgICAgQVNTRVJU
KHApOwotCi0gICAgICAgIGZvdW5kTmFtZXMuYXBwZW5kKGRhdGFiYXNlTmFtZUtleS5kYXRhYmFz
ZU5hbWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBmb3VuZE5hbWVzOwotfQotCi1ib29sIElEQkJh
Y2tpbmdTdG9yZUxldmVsREI6OmdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBu
YW1lLCBJREJEYXRhYmFzZU1ldGFkYXRhKiBtZXRhZGF0YSwgYm9vbCYgZm91bmQpCi17Ci0gICAg
Y29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlKG1faWRlbnRp
ZmllciwgbmFtZSk7Ci0gICAgZm91bmQgPSBmYWxzZTsKLQotICAgIGJvb2wgb2sgPSBnZXRJbnQo
bV9kYi5nZXQoKSwga2V5LCBtZXRhZGF0YS0+aWQsIGZvdW5kKTsKLSAgICBpZiAoIW9rKSB7Ci0g
ICAgICAgIElOVEVSTkFMX1JFQURfRVJST1IoR2V0SURCRGF0YWJhc2VNZXRhRGF0YSk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCFmb3VuZCkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICAvLyBGSVhNRTogVGhlIHN0cmluZyB2ZXJzaW9uIGlzIG5vIGxvbmdlciBz
dXBwb3J0ZWQsIHNvIHRoZSBsZXZlbERCIHBvcnRzIHNob3VsZCBjb25zaWRlciByZWZhY3Rvcmlu
ZyBvZmYgb2YgaXQuCi0gICAgU3RyaW5nIHN0cmluZ1ZlcnNpb247Ci0gICAgb2sgPSBnZXRTdHJp
bmcobV9kYi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKG1ldGFkYXRhLT5pZCwg
RGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlclZlcnNpb24pLCBzdHJpbmdWZXJzaW9uLCBmb3VuZCk7
Ci0gICAgaWYgKCFvaykgewotICAgICAgICBJTlRFUk5BTF9SRUFEX0VSUk9SKEdldElEQkRhdGFi
YXNlTWV0YURhdGEpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICghZm91
bmQpIHsKLSAgICAgICAgSU5URVJOQUxfQ09OU0lTVEVOQ1lfRVJST1IoR2V0SURCRGF0YWJhc2VN
ZXRhRGF0YSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbnQ2NF90IHZl
cnNpb247Ci0gICAgb2sgPSBnZXRWYXJJbnQobV9kYi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtl
eTo6ZW5jb2RlKG1ldGFkYXRhLT5pZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlckludFZlcnNp
b24pLCB2ZXJzaW9uLCBmb3VuZCk7Ci0gICAgaWYgKCFvaykgewotICAgICAgICBJTlRFUk5BTF9S
RUFEX0VSUk9SKEdldElEQkRhdGFiYXNlTWV0YURhdGEpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgSU5URVJOQUxfQ09OU0lTVEVOQ1lf
RVJST1IoR2V0SURCRGF0YWJhc2VNZXRhRGF0YSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICAvLyBGSVhNRTogVGhlIHZlcnNpb25pbmcgc2VtYW50aWNzIGhhdmUgY2hhbmdl
ZCBzaW5jZSB0aGlzIG9yaWdpbmFsIGNvZGUgd2FzIHdyaXR0ZW4sIGFuZCB3aGF0IHdhcyBvbmNl
IGEgbmVnYXRpdmUgbnVtYmVyCi0gICAgLy8gc3RvcmVkIGluIHRoZSBkYXRhYmFzZSBpcyBubyBs
b25nZXIgYSB2YWxpZCB2ZXJzaW9uLgotICAgIGlmICh2ZXJzaW9uIDwgMCkKLSAgICAgICAgdmVy
c2lvbiA9IDA7Ci0gICAgbWV0YWRhdGEtPnZlcnNpb24gPSB2ZXJzaW9uOwotCi0gICAgb2sgPSBn
ZXRNYXhPYmplY3RTdG9yZUlkKG1fZGIuZ2V0KCksIG1ldGFkYXRhLT5pZCwgbWV0YWRhdGEtPm1h
eE9iamVjdFN0b3JlSWQpOwotICAgIGlmICghb2spIHsKLSAgICAgICAgSU5URVJOQUxfUkVBRF9F
UlJPUihHZXRJREJEYXRhYmFzZU1ldGFEYXRhKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIElEQkJhY2tpbmdTdG9yZUxldmVsREI6
OmdldE9yRXN0YWJsaXNoSURCRGF0YWJhc2VNZXRhZGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIHN0
ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYsIGJvb2wgc3VjY2Vz
cyk+IG1ldGFkYXRhRnVuY3Rpb24pCi17Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IERh
dGFiYXNlTmFtZUtleTo6ZW5jb2RlKG1faWRlbnRpZmllciwgbmFtZSk7Ci0gICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOwotCi0gICAgSURCRGF0YWJhc2VNZXRhZGF0YSByZXN1bHRNZXRhZGF0YTsKLSAg
ICAKLSAgICBib29sIG9rID0gZ2V0SW50KG1fZGIuZ2V0KCksIGtleSwgcmVzdWx0TWV0YWRhdGEu
aWQsIGZvdW5kKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIElOVEVSTkFMX1JFQURfRVJST1Io
R2V0SURCRGF0YWJhc2VNZXRhRGF0YSk7Ci0gICAgICAgIG1ldGFkYXRhRnVuY3Rpb24ocmVzdWx0
TWV0YWRhdGEsIGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghZm91
bmQpIHsKLSAgICAgICAgcmVzdWx0TWV0YWRhdGEubmFtZSA9IG5hbWU7Ci0gICAgICAgIHJlc3Vs
dE1ldGFkYXRhLnZlcnNpb24gPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpEZWZhdWx0SW50VmVyc2lv
bjsKLQotICAgICAgICBtZXRhZGF0YUZ1bmN0aW9uKHJlc3VsdE1ldGFkYXRhLCBjcmVhdGVJREJE
YXRhYmFzZU1ldGFEYXRhKHJlc3VsdE1ldGFkYXRhKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpbnQ2NF90IHZlcnNpb247Ci0gICAgb2sgPSBnZXRWYXJJbnQobV9kYi5nZXQoKSwg
RGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKHJlc3VsdE1ldGFkYXRhLmlkLCBEYXRhYmFzZU1l
dGFEYXRhS2V5OjpVc2VySW50VmVyc2lvbiksIHZlcnNpb24sIGZvdW5kKTsKLSAgICBpZiAoIW9r
KSB7Ci0gICAgICAgIElOVEVSTkFMX1JFQURfRVJST1IoR2V0SURCRGF0YWJhc2VNZXRhRGF0YSk7
Ci0gICAgICAgIG1ldGFkYXRhRnVuY3Rpb24ocmVzdWx0TWV0YWRhdGEsIGZhbHNlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgIElOVEVSTkFMX0NP
TlNJU1RFTkNZX0VSUk9SKEdldElEQkRhdGFiYXNlTWV0YURhdGEpOwotICAgICAgICBtZXRhZGF0
YUZ1bmN0aW9uKHJlc3VsdE1ldGFkYXRhLCBmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICAvLyBGSVhNRTogVGhlIHZlcnNpb25pbmcgc2VtYW50aWNzIGhhdmUgY2hhbmdlZCBz
aW5jZSB0aGlzIG9yaWdpbmFsIGNvZGUgd2FzIHdyaXR0ZW4sIGFuZCB3aGF0IHdhcyBvbmNlIGEg
bmVnYXRpdmUgbnVtYmVyCi0gICAgLy8gc3RvcmVkIGluIHRoZSBkYXRhYmFzZSBpcyBubyBsb25n
ZXIgYSB2YWxpZCB2ZXJzaW9uLgotICAgIGlmICh2ZXJzaW9uIDwgMCkKLSAgICAgICAgdmVyc2lv
biA9IDA7Ci0gICAgcmVzdWx0TWV0YWRhdGEudmVyc2lvbiA9IHZlcnNpb247Ci0KLSAgICBvayA9
IGdldE1heE9iamVjdFN0b3JlSWQobV9kYi5nZXQoKSwgcmVzdWx0TWV0YWRhdGEuaWQsIHJlc3Vs
dE1ldGFkYXRhLm1heE9iamVjdFN0b3JlSWQpOwotICAgIGlmICghb2spIHsKLSAgICAgICAgSU5U
RVJOQUxfUkVBRF9FUlJPUihHZXRJREJEYXRhYmFzZU1ldGFEYXRhKTsKLSAgICAgICAgbWV0YWRh
dGFGdW5jdGlvbihyZXN1bHRNZXRhZGF0YSwgZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgb2sgPSBnZXRPYmplY3RTdG9yZXMocmVzdWx0TWV0YWRhdGEuaWQsICZyZXN1bHRN
ZXRhZGF0YS5vYmplY3RTdG9yZXMpOwotICAgIGlmICghb2spIHsKLSAgICAgICAgSU5URVJOQUxf
UkVBRF9FUlJPUihHZXRJREJEYXRhYmFzZU1ldGFEYXRhKTsKLSAgICAgICAgbWV0YWRhdGFGdW5j
dGlvbihyZXN1bHRNZXRhZGF0YSwgZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgbWV0YWRhdGFGdW5jdGlvbihyZXN1bHRNZXRhZGF0YSwgdHJ1ZSk7Ci19Ci0KLVdBUk5fVU5V
U0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBnZXROZXdEYXRhYmFzZUlkKExldmVsREJEYXRhYmFzZSog
ZGIsIGludDY0X3QmIG5ld0lkKQotewotICAgIFJlZlB0cjxMZXZlbERCVHJhbnNhY3Rpb24+IHRy
YW5zYWN0aW9uID0gTGV2ZWxEQlRyYW5zYWN0aW9uOjpjcmVhdGUoZGIpOwotCi0gICAgbmV3SWQg
PSAtMTsKLSAgICBpbnQ2NF90IG1heERhdGFiYXNlSWQgPSAtMTsKLSAgICBib29sIGZvdW5kID0g
ZmFsc2U7Ci0gICAgYm9vbCBvayA9IGdldEludCh0cmFuc2FjdGlvbi5nZXQoKSwgTWF4RGF0YWJh
c2VJZEtleTo6ZW5jb2RlKCksIG1heERhdGFiYXNlSWQsIGZvdW5kKTsKLSAgICBpZiAoIW9rKSB7
Ci0gICAgICAgIElOVEVSTkFMX1JFQURfRVJST1IoR2V0TmV3RGF0YWJhc2VJZCk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCFmb3VuZCkKLSAgICAgICAgbWF4RGF0YWJh
c2VJZCA9IDA7Ci0KLSAgICBBU1NFUlQobWF4RGF0YWJhc2VJZCA+PSAwKTsKLQotICAgIGludDY0
X3QgZGF0YWJhc2VJZCA9IG1heERhdGFiYXNlSWQgKyAxOwotICAgIHB1dEludCh0cmFuc2FjdGlv
bi5nZXQoKSwgTWF4RGF0YWJhc2VJZEtleTo6ZW5jb2RlKCksIGRhdGFiYXNlSWQpOwotICAgIGlm
ICghdHJhbnNhY3Rpb24tPmNvbW1pdCgpKSB7Ci0gICAgICAgIElOVEVSTkFMX1dSSVRFX0VSUk9S
KEdldE5ld0RhdGFiYXNlSWQpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIG5l
d0lkID0gZGF0YWJhc2VJZDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gRklYTUU6IExldmVs
REIgbmVlZHMgdG8gc3VwcG9ydCB1aW50NjRfdCBhcyB0aGUgdmVyc2lvbiB0eXBlLgotYm9vbCBJ
REJCYWNraW5nU3RvcmVMZXZlbERCOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKElEQkRhdGFi
YXNlTWV0YWRhdGEmIG1ldGFkYXRhKQotewotICAgIGJvb2wgb2sgPSBnZXROZXdEYXRhYmFzZUlk
KG1fZGIuZ2V0KCksIG1ldGFkYXRhLmlkKTsKLSAgICBpZiAoIW9rKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgQVNTRVJUKG1ldGFkYXRhLmlkID49IDApOwotCi0gICAgUmVmUHRyPExldmVs
REJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24gPSBMZXZlbERCVHJhbnNhY3Rpb246OmNyZWF0ZSht
X2RiLmdldCgpKTsKLSAgICBwdXRJbnQodHJhbnNhY3Rpb24uZ2V0KCksIERhdGFiYXNlTmFtZUtl
eTo6ZW5jb2RlKG1faWRlbnRpZmllciwgbWV0YWRhdGEubmFtZSksIG1ldGFkYXRhLmlkKTsKLSAg
ICBwdXRWYXJJbnQodHJhbnNhY3Rpb24uZ2V0KCksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29k
ZShtZXRhZGF0YS5pZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlckludFZlcnNpb24pLCBtZXRh
ZGF0YS52ZXJzaW9uKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5jb21taXQoKSkgewotICAgICAg
ICBJTlRFUk5BTF9XUklURV9FUlJPUihDcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJREJC
YWNraW5nU3RvcmVMZXZlbERCOjp1cGRhdGVJREJEYXRhYmFzZVZlcnNpb24oSURCQmFja2luZ1N0
b3JlVHJhbnNhY3Rpb25MZXZlbERCJiB0cmFuc2FjdGlvbiwgaW50NjRfdCByb3dJZCwgdWludDY0
X3QgdmVyc2lvbikKLXsKLSAgICBpZiAodmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpO
b0ludFZlcnNpb24pCi0gICAgICAgIHZlcnNpb24gPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpEZWZh
dWx0SW50VmVyc2lvbjsKLSAgICBwdXRWYXJJbnQoSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25M
ZXZlbERCOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKSwgRGF0YWJhc2VNZXRh
RGF0YUtleTo6ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VySW50VmVyc2lv
biksIHZlcnNpb24pOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCBkZWxldGVS
YW5nZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4m
IGJlZ2luLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVuZCkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IHRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwotICAg
IGZvciAoaXQtPnNlZWsoYmVnaW4pOyBpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5r
ZXkoKSwgZW5kKSA8IDA7IGl0LT5uZXh0KCkpCi0gICAgICAgIHRyYW5zYWN0aW9uLT5yZW1vdmUo
aXQtPmtleSgpKTsKLX0KLQotdm9pZCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpkZWxldGVEYXRh
YmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCBzdWNjZXNz
KT4gYm9vbENhbGxiYWNrRnVuY3Rpb24pCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJCYWNr
aW5nU3RvcmVMZXZlbERCOjpkZWxldGVEYXRhYmFzZSIpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxM
ZXZlbERCV3JpdGVPbmx5VHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uID0gc3RkOjptYWtlX3VuaXF1
ZTxMZXZlbERCV3JpdGVPbmx5VHJhbnNhY3Rpb24+KG1fZGIuZ2V0KCkpOwotCi0gICAgSURCRGF0
YWJhc2VNZXRhZGF0YSBtZXRhZGF0YTsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBi
b29sIG9rID0gZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShuYW1lLCAmbWV0YWRhdGEsIHN1Y2Nlc3Mp
OwotICAgIGlmICghb2spIHsKLSAgICAgICAgYm9vbENhbGxiYWNrRnVuY3Rpb24oZmFsc2UpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICAgIGJv
b2xDYWxsYmFja0Z1bmN0aW9uKHRydWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Y29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2Rl
KG1ldGFkYXRhLmlkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpPcmlnaW5OYW1lKTsKLSAgICBjb25z
dCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShtZXRh
ZGF0YS5pZCArIDEsIERhdGFiYXNlTWV0YURhdGFLZXk6Ok9yaWdpbk5hbWUpOwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbV9kYi0+Y3JlYXRlSXRlcmF0b3IoKTsK
LSAgICBmb3IgKGl0LT5zZWVrKHN0YXJ0S2V5KTsgaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5
cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMDsgaXQtPm5leHQoKSkKLSAgICAgICAgdHJhbnNhY3Rp
b24tPnJlbW92ZShpdC0+a2V5KCkpOwotCi0gICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IERh
dGFiYXNlTmFtZUtleTo6ZW5jb2RlKG1faWRlbnRpZmllciwgbmFtZSk7Ci0gICAgdHJhbnNhY3Rp
b24tPnJlbW92ZShrZXkpOwotCi0gICAgaWYgKCF0cmFuc2FjdGlvbi0+Y29tbWl0KCkpIHsKLSAg
ICAgICAgSU5URVJOQUxfV1JJVEVfRVJST1IoRGVsZXRlRGF0YWJhc2UpOwotICAgICAgICBib29s
Q2FsbGJhY2tGdW5jdGlvbihmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYm9v
bENhbGxiYWNrRnVuY3Rpb24odHJ1ZSk7Ci19Ci0KLXN0YXRpYyBib29sIGNoZWNrT2JqZWN0U3Rv
cmVBbmRNZXRhRGF0YVR5cGUoY29uc3QgTGV2ZWxEQkl0ZXJhdG9yKiBpdCwgY29uc3QgVmVjdG9y
PGNoYXI+JiBzdG9wS2V5LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbWV0YURhdGFU
eXBlKQotewotICAgIGlmICghaXQtPmlzVmFsaWQoKSB8fCBjb21wYXJlS2V5cyhpdC0+a2V5KCks
IHN0b3BLZXkpID49IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIE9iamVjdFN0b3Jl
TWV0YURhdGFLZXkgbWV0YURhdGFLZXk7Ci0gICAgY29uc3QgY2hhciogcCA9IE9iamVjdFN0b3Jl
TWV0YURhdGFLZXk6OmRlY29kZShpdC0+a2V5KCkuYmVnaW4oKSwgaXQtPmtleSgpLmVuZCgpLCAm
bWV0YURhdGFLZXkpOwotICAgIEFTU0VSVF9VTlVTRUQocCwgcCk7Ci0gICAgaWYgKG1ldGFEYXRh
S2V5Lm9iamVjdFN0b3JlSWQoKSAhPSBvYmplY3RTdG9yZUlkKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKG1ldGFEYXRhS2V5Lm1ldGFEYXRhVHlwZSgpICE9IG1ldGFEYXRhVHlwZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBGSVhNRTog
VGhpcyBzaG91bGQgZG8gc29tZSBlcnJvciBoYW5kbGluZyByYXRoZXIgdGhhbiBwbG93aW5nIGFo
ZWFkIHdoZW4gYmFkIGRhdGEgaXMgZW5jb3VudGVyZWQuCi1ib29sIElEQkJhY2tpbmdTdG9yZUxl
dmVsREI6OmdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIElEQkRhdGFiYXNlTWV0
YWRhdGE6Ok9iamVjdFN0b3JlTWFwKiBvYmplY3RTdG9yZXMpCi17Ci0gICAgTE9HKFN0b3JhZ2VB
UEksICJJREJCYWNraW5nU3RvcmVMZXZlbERCOjpnZXRPYmplY3RTdG9yZXMiKTsKLSAgICBpZiAo
IUtleVByZWZpeDo6aXNWYWxpZERhdGFiYXNlSWQoZGF0YWJhc2VJZCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBPYmplY3RTdG9yZU1l
dGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgMSwgMCk7Ci0gICAgY29uc3QgVmVjdG9yPGNo
YXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJh
c2VJZCk7Ci0KLSAgICBBU1NFUlQob2JqZWN0U3RvcmVzLT5pc0VtcHR5KCkpOwotCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2RiLT5jcmVhdGVJdGVyYXRvcigp
OwotICAgIGl0LT5zZWVrKHN0YXJ0S2V5KTsKLSAgICB3aGlsZSAoaXQtPmlzVmFsaWQoKSAmJiBj
b21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMCkgewotICAgICAgICBjb25zdCBjaGFy
KiBwID0gaXQtPmtleSgpLmJlZ2luKCk7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGxpbWl0ID0gaXQt
PmtleSgpLmVuZCgpOwotCi0gICAgICAgIE9iamVjdFN0b3JlTWV0YURhdGFLZXkgbWV0YURhdGFL
ZXk7Ci0gICAgICAgIHAgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpkZWNvZGUocCwgbGltaXQs
ICZtZXRhRGF0YUtleSk7Ci0gICAgICAgIEFTU0VSVChwKTsKLSAgICAgICAgaWYgKG1ldGFEYXRh
S2V5Lm1ldGFEYXRhVHlwZSgpICE9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6Ok5hbWUpIHsKLSAg
ICAgICAgICAgIElOVEVSTkFMX0NPTlNJU1RFTkNZX0VSUk9SKEdldE9iamVjdFN0b3Jlcyk7Ci0g
ICAgICAgICAgICAvLyBQb3NzaWJsZSBzdGFsZSBtZXRhZGF0YSwgYnV0IGRvbid0IGZhaWwgdGhl
IGxvYWQuCi0gICAgICAgICAgICBpdC0+bmV4dCgpOwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBtZXRhRGF0YUtleS5v
YmplY3RTdG9yZUlkKCk7Ci0KLSAgICAgICAgLy8gRklYTUU6IERvIHRoaXMgYnkgZGlyZWN0IGtl
eSBsb29rdXAgcmF0aGVyIHRoYW4gaXRlcmF0aW9uLCB0byBzaW1wbGlmeS4KLSAgICAgICAgU3Ry
aW5nIG9iamVjdFN0b3JlTmFtZSA9IGRlY29kZVN0cmluZyhpdC0+dmFsdWUoKS5iZWdpbigpLCBp
dC0+dmFsdWUoKS5lbmQoKSk7Ci0KLSAgICAgICAgaXQtPm5leHQoKTsKLSAgICAgICAgaWYgKCFj
aGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0LmdldCgpLCBzdG9wS2V5LCBvYmplY3RT
dG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpLZXlQYXRoKSkgewotICAgICAgICAgICAg
SU5URVJOQUxfQ09OU0lTVEVOQ1lfRVJST1IoR2V0T2JqZWN0U3RvcmVzKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIElEQktleVBhdGgga2V5UGF0aCA9IGRlY29kZUlE
QktleVBhdGgoaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkpOwotCi0gICAg
ICAgIGl0LT5uZXh0KCk7Ci0gICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRh
VHlwZShpdC5nZXQoKSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0
YUtleTo6QXV0b0luY3JlbWVudCkpIHsKLSAgICAgICAgICAgIElOVEVSTkFMX0NPTlNJU1RFTkNZ
X0VSUk9SKEdldE9iamVjdFN0b3Jlcyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBib29sIGF1dG9JbmNyZW1lbnQgPSBkZWNvZGVCb29sKGl0LT52YWx1ZSgpLmJlZ2lu
KCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKLQotICAgICAgICBpdC0+bmV4dCgpOyAvLyBJcyBldmlj
YXRibGUuCi0gICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5n
ZXQoKSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6RXZp
Y3RhYmxlKSkgewotICAgICAgICAgICAgSU5URVJOQUxfQ09OU0lTVEVOQ1lfRVJST1IoR2V0T2Jq
ZWN0U3RvcmVzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaXQt
Pm5leHQoKTsgLy8gTGFzdCB2ZXJzaW9uLgotICAgICAgICBpZiAoIWNoZWNrT2JqZWN0U3RvcmVB
bmRNZXRhRGF0YVR5cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0
b3JlTWV0YURhdGFLZXk6Okxhc3RWZXJzaW9uKSkgewotICAgICAgICAgICAgSU5URVJOQUxfQ09O
U0lTVEVOQ1lfRVJST1IoR2V0T2JqZWN0U3RvcmVzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaXQtPm5leHQoKTsgLy8gTWF4aW11bSBpbmRleCBpZCBhbGxvY2F0
ZWQuCi0gICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5nZXQo
KSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6TWF4SW5k
ZXhJZCkpIHsKLSAgICAgICAgICAgIElOVEVSTkFMX0NPTlNJU1RFTkNZX0VSUk9SKEdldE9iamVj
dFN0b3Jlcyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpbnQ2NF90
IG1heEluZGV4SWQgPSBkZWNvZGVJbnQoaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCku
ZW5kKCkpOwotCi0gICAgICAgIGl0LT5uZXh0KCk7IC8vIFtvcHRpb25hbF0gaGFzIGtleSBwYXRo
IChpcyBub3QgbnVsbCkKLSAgICAgICAgaWYgKGNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5
cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFL
ZXk6Okhhc0tleVBhdGgpKSB7Ci0gICAgICAgICAgICBib29sIGhhc0tleVBhdGggPSBkZWNvZGVC
b29sKGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKLSAgICAgICAgICAg
IC8vIFRoaXMgY2hlY2sgYWNjb3VudHMgZm9yIHR3byBsYXllcnMgb2YgbGVnYWN5IGNvZGluZzoK
LSAgICAgICAgICAgIC8vICgxKSBJbml0aWFsbHksIGhhc0tleVBhdGggd2FzIGFkZGVkIHRvIGRp
c3Rpbmd1aXNoIG51bGwgdnMuIHN0cmluZy4KLSAgICAgICAgICAgIC8vICgyKSBMYXRlciwgbnVs
bCB2cy4gc3RyaW5nIHZzLiBhcnJheSB3YXMgc3RvcmVkIGluIHRoZSBrZXlQYXRoIGl0c2VsZi4K
LSAgICAgICAgICAgIC8vIFNvIHRoaXMgY2hlY2sgaXMgb25seSByZWxldmFudCBmb3Igc3RyaW5n
LXR5cGUga2V5UGF0aHMuCi0gICAgICAgICAgICBpZiAoIWhhc0tleVBhdGggJiYgKGtleVBhdGgu
dHlwZSgpID09IElEQktleVBhdGg6OlN0cmluZ1R5cGUgJiYgIWtleVBhdGguc3RyaW5nKCkuaXNF
bXB0eSgpKSkgewotICAgICAgICAgICAgICAgIElOVEVSTkFMX0NPTlNJU1RFTkNZX0VSUk9SKEdl
dE9iamVjdFN0b3Jlcyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoIWhhc0tleVBhdGgpCi0gICAgICAgICAgICAgICAga2V5UGF0aCA9IElE
QktleVBhdGgoKTsKLSAgICAgICAgICAgIGl0LT5uZXh0KCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpbnQ2NF90IGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIgPSAtMTsKLSAgICAgICAgaWYgKGNo
ZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9iamVjdFN0
b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OktleUdlbmVyYXRvckN1cnJlbnROdW1iZXIp
KSB7Ci0gICAgICAgICAgICBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyID0gZGVjb2RlSW50KGl0
LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiBSZXR1cm4ga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlciwgY2FjaGUgaW4gb2JqZWN0IHN0
b3JlLCBhbmQgd3JpdGUgbGF6aWx5IHRvIGJhY2tpbmcgc3RvcmUuCi0gICAgICAgICAgICAvLyBG
b3Igbm93LCBqdXN0IGFzc2VydCB0aGF0IGlmIGl0IHdhcyB3cml0dGVuIGl0IHdhcyB2YWxpZC4K
LSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoa2V5R2VuZXJhdG9yQ3VycmVudE51bWJlciwga2V5
R2VuZXJhdG9yQ3VycmVudE51bWJlciA+PSBLZXlHZW5lcmF0b3JJbml0aWFsTnVtYmVyKTsKLSAg
ICAgICAgICAgIGl0LT5uZXh0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBJREJPYmplY3RTdG9y
ZU1ldGFkYXRhIG1ldGFkYXRhKG9iamVjdFN0b3JlTmFtZSwgb2JqZWN0U3RvcmVJZCwga2V5UGF0
aCwgYXV0b0luY3JlbWVudCwgbWF4SW5kZXhJZCk7Ci0gICAgICAgIGlmICghZ2V0SW5kZXhlcyhk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAmbWV0YWRhdGEuaW5kZXhlcykpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG9iamVjdFN0b3Jlcy0+c2V0KG9iamVjdFN0b3JlSWQs
IG1ldGFkYXRhKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVdBUk5fVU5VU0VEX1JF
VFVSTiBzdGF0aWMgYm9vbCBzZXRNYXhPYmplY3RTdG9yZUlkKExldmVsREJUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQot
ewotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBtYXhPYmplY3RTdG9yZUlkS2V5ID0gRGF0YWJhc2VN
ZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIERhdGFiYXNlTWV0YURhdGFLZXk6Ok1heE9i
amVjdFN0b3JlSWQpOwotICAgIGludDY0X3QgbWF4T2JqZWN0U3RvcmVJZCA9IC0xOwotICAgIGJv
b2wgb2sgPSBnZXRNYXhPYmplY3RTdG9yZUlkKHRyYW5zYWN0aW9uLCBtYXhPYmplY3RTdG9yZUlk
S2V5LCBtYXhPYmplY3RTdG9yZUlkKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIElOVEVSTkFM
X1JFQURfRVJST1IoU2V0TWF4T2JqZWN0U3RvcmVJZCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBpZiAob2JqZWN0U3RvcmVJZCA8PSBtYXhPYmplY3RTdG9yZUlkKSB7Ci0g
ICAgICAgIElOVEVSTkFMX0NPTlNJU1RFTkNZX0VSUk9SKFNldE1heE9iamVjdFN0b3JlSWQpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHB1dEludCh0cmFuc2FjdGlvbiwgbWF4
T2JqZWN0U3RvcmVJZEtleSwgb2JqZWN0U3RvcmVJZCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6Y3JlYXRlT2JqZWN0U3RvcmUoSURCQmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5
UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KQotewotICAgIExPRyhTdG9yYWdlQVBJ
LCAiSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6Y3JlYXRlT2JqZWN0U3RvcmUiKTsKLSAgICBpZiAo
IUtleVByZWZpeDo6dmFsaWRJZHMoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlv
biA9IElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQjo6bGV2ZWxEQlRyYW5zYWN0aW9u
RnJvbSh0cmFuc2FjdGlvbik7Ci0gICAgaWYgKCFzZXRNYXhPYmplY3RTdG9yZUlkKGxldmVsREJU
cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBuYW1lS2V5ID0gT2JqZWN0U3RvcmVNZXRh
RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0
YURhdGFLZXk6Ok5hbWUpOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXlQYXRoS2V5ID0gT2Jq
ZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9i
amVjdFN0b3JlTWV0YURhdGFLZXk6OktleVBhdGgpOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBh
dXRvSW5jcmVtZW50S2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OkF1dG9JbmNyZW1lbnQp
OwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBldmljdGFibGVLZXkgPSBPYmplY3RTdG9yZU1ldGFE
YXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRh
RGF0YUtleTo6RXZpY3RhYmxlKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbGFzdFZlcnNpb25L
ZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6TGFzdFZlcnNpb24pOwotICAgIGNvbnN0IFZl
Y3RvcjxjaGFyPiBtYXhJbmRleElkS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2Rl
KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6Ok1heElu
ZGV4SWQpOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBoYXNLZXlQYXRoS2V5ICA9IE9iamVjdFN0
b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RT
dG9yZU1ldGFEYXRhS2V5OjpIYXNLZXlQYXRoKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5
R2VuZXJhdG9yQ3VycmVudE51bWJlcktleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29k
ZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpLZXlH
ZW5lcmF0b3JDdXJyZW50TnVtYmVyKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbmFtZXNLZXkg
PSBPYmplY3RTdG9yZU5hbWVzS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgbmFtZSk7Ci0KLSAgICBw
dXRTdHJpbmcobGV2ZWxEQlRyYW5zYWN0aW9uLCBuYW1lS2V5LCBuYW1lKTsKLSAgICBwdXRJREJL
ZXlQYXRoKGxldmVsREJUcmFuc2FjdGlvbiwga2V5UGF0aEtleSwga2V5UGF0aCk7Ci0gICAgcHV0
SW50KGxldmVsREJUcmFuc2FjdGlvbiwgYXV0b0luY3JlbWVudEtleSwgYXV0b0luY3JlbWVudCk7
Ci0gICAgcHV0SW50KGxldmVsREJUcmFuc2FjdGlvbiwgZXZpY3RhYmxlS2V5LCBmYWxzZSk7Ci0g
ICAgcHV0SW50KGxldmVsREJUcmFuc2FjdGlvbiwgbGFzdFZlcnNpb25LZXksIDEpOwotICAgIHB1
dEludChsZXZlbERCVHJhbnNhY3Rpb24sIG1heEluZGV4SWRLZXksIE1pbmltdW1JbmRleElkKTsK
LSAgICBwdXRCb29sKGxldmVsREJUcmFuc2FjdGlvbiwgaGFzS2V5UGF0aEtleSwgIWtleVBhdGgu
aXNOdWxsKCkpOwotICAgIHB1dEludChsZXZlbERCVHJhbnNhY3Rpb24sIGtleUdlbmVyYXRvckN1
cnJlbnROdW1iZXJLZXksIEtleUdlbmVyYXRvckluaXRpYWxOdW1iZXIpOwotICAgIHB1dEludChs
ZXZlbERCVHJhbnNhY3Rpb24sIG5hbWVzS2V5LCBvYmplY3RTdG9yZUlkKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpkZWxldGVPYmplY3RTdG9y
ZShJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREImIHRyYW5zYWN0aW9uLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLXsKLSAgICBMT0coU3RvcmFnZUFQ
SSwgIklEQkJhY2tpbmdTdG9yZUxldmVsREI6OmRlbGV0ZU9iamVjdFN0b3JlIik7Ci0gICAgaWYg
KCFLZXlQcmVmaXg6OnZhbGlkSWRzKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rp
b24gPSBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI6OmxldmVsREJUcmFuc2FjdGlv
bkZyb20odHJhbnNhY3Rpb24pOwotCi0gICAgU3RyaW5nIG9iamVjdFN0b3JlTmFtZTsKLSAgICBi
b29sIGZvdW5kID0gZmFsc2U7Ci0gICAgYm9vbCBvayA9IGdldFN0cmluZyhsZXZlbERCVHJhbnNh
Y3Rpb24sIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpOYW1lKSwgb2JqZWN0U3RvcmVOYW1lLCBm
b3VuZCk7Ci0gICAgaWYgKCFvaykgewotICAgICAgICBJTlRFUk5BTF9SRUFEX0VSUk9SKERlbGV0
ZU9iamVjdFN0b3JlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoIWZv
dW5kKSB7Ci0gICAgICAgIElOVEVSTkFMX0NPTlNJU1RFTkNZX0VSUk9SKERlbGV0ZU9iamVjdFN0
b3JlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGRlbGV0ZVJhbmdlKGxl
dmVsREJUcmFuc2FjdGlvbiwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIDApLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGVNYXhL
ZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCkpOwotCi0gICAgbGV2ZWxEQlRyYW5zYWN0aW9u
LT5yZW1vdmUoT2JqZWN0U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlTmFtZSkpOwotCi0gICAgZGVsZXRlUmFuZ2UobGV2ZWxEQlRyYW5zYWN0aW9uLCBJbmRleEZy
ZWVMaXN0S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCksIEluZGV4RnJl
ZUxpc3RLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKSk7Ci0gICAg
ZGVsZXRlUmFuZ2UobGV2ZWxEQlRyYW5zYWN0aW9uLCBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUo
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCwgMCksIEluZGV4TWV0YURhdGFLZXk6OmVuY29k
ZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKSk7Ci0KLSAgICByZXR1cm4gY2xlYXJP
YmplY3RTdG9yZSh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7Ci19Ci0K
LWJvb2wgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6Z2V0UmVjb3JkKElEQkJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uTGV2ZWxEQiYgdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgVmVjdG9yPGNoYXI+JiByZWNvcmQp
Ci17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJCYWNraW5nU3RvcmVMZXZlbERCOjpnZXRSZWNv
cmQiKTsKLSAgICBpZiAoIUtleVByZWZpeDo6dmFsaWRJZHMoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxl
dmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQjo6bGV2
ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7Ci0KLSAgICBjb25zdCBWZWN0b3I8Y2hh
cj4gbGV2ZWxkYktleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIGtleSk7Ci0gICAgVmVjdG9yPGNoYXI+IGRhdGE7Ci0KLSAgICByZWNvcmQu
Y2xlYXIoKTsKLQotICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICBib29sIG9rID0gbGV2ZWxE
QlRyYW5zYWN0aW9uLT5zYWZlR2V0KGxldmVsZGJLZXksIGRhdGEsIGZvdW5kKTsKLSAgICBpZiAo
IW9rKSB7Ci0gICAgICAgIElOVEVSTkFMX1JFQURfRVJST1IoR2V0UmVjb3JkKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoIWZvdW5kKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIGludDY0X3QgdmVyc2lvbjsKLSAgICBjb25zdCBjaGFyKiBwID0gZGVjb2RlVmFy
SW50KGRhdGEuYmVnaW4oKSwgZGF0YS5lbmQoKSwgdmVyc2lvbik7Ci0gICAgaWYgKCFwKSB7Ci0g
ICAgICAgIElOVEVSTkFMX1JFQURfRVJST1IoR2V0UmVjb3JkKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIHJlY29yZC5hcHBlbmRSYW5nZShwLCBzdGF0aWNfY2FzdDxjb25z
dCBjaGFyKj4oZGF0YS5lbmQoKSkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1XQVJOX1VOVVNF
RF9SRVRVUk4gc3RhdGljIGJvb2wgZ2V0TmV3VmVyc2lvbk51bWJlcihMZXZlbERCVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCYgbmV3VmVyc2lvbk51bWJlcikKLXsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4g
bGFzdFZlcnNpb25LZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6TGFzdFZlcnNpb24pOwot
Ci0gICAgbmV3VmVyc2lvbk51bWJlciA9IC0xOwotICAgIGludDY0X3QgbGFzdFZlcnNpb24gPSAt
MTsKLSAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgYm9vbCBvayA9IGdldEludCh0cmFuc2Fj
dGlvbiwgbGFzdFZlcnNpb25LZXksIGxhc3RWZXJzaW9uLCBmb3VuZCk7Ci0gICAgaWYgKCFvaykg
ewotICAgICAgICBJTlRFUk5BTF9SRUFEX0VSUk9SKEdldE5ld1ZlcnNpb25OdW1iZXIpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICghZm91bmQpCi0gICAgICAgIGxhc3RW
ZXJzaW9uID0gMDsKLQotICAgIEFTU0VSVChsYXN0VmVyc2lvbiA+PSAwKTsKLQotICAgIGludDY0
X3QgdmVyc2lvbiA9IGxhc3RWZXJzaW9uICsgMTsKLSAgICBwdXRJbnQodHJhbnNhY3Rpb24sIGxh
c3RWZXJzaW9uS2V5LCB2ZXJzaW9uKTsKLQotICAgIEFTU0VSVCh2ZXJzaW9uID4gbGFzdFZlcnNp
b24pOyAvLyBGSVhNRTogVGhpbmsgYWJvdXQgaG93IHdlIHdhbnQgdG8gaGFuZGxlIHRoZSBvdmVy
ZmxvdyBzY2VuYXJpby4KLQotICAgIG5ld1ZlcnNpb25OdW1iZXIgPSB2ZXJzaW9uOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIElEQkJhY2tpbmdTdG9yZUxldmVsREI6OnB1dFJlY29yZChJ
REJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREImIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBwcnBWYWx1ZSwgSURCUmVjb3JkSWRlbnRpZmllciogcmVjb3Jk
SWRlbnRpZmllcikKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkJhY2tpbmdTdG9yZUxldmVs
REI6OnB1dFJlY29yZCIpOwotICAgIGlmICghS2V5UHJlZml4Ojp2YWxpZElkcyhkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEFTU0VSVChrZXku
aXNWYWxpZCgpKTsKLQotICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9u
ID0gSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCOjpsZXZlbERCVHJhbnNhY3Rpb25G
cm9tKHRyYW5zYWN0aW9uKTsKLSAgICBpbnQ2NF90IHZlcnNpb24gPSAtMTsKLSAgICBib29sIG9r
ID0gZ2V0TmV3VmVyc2lvbk51bWJlcihsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIHZlcnNpb24pOwotICAgIGlmICghb2spCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBBU1NFUlQodmVyc2lvbiA+PSAwKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gb2Jq
ZWN0U3RvcmVkYXRhS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwga2V5KTsKLQotICAgIFZlY3RvcjxjaGFyPiB2OwotICAgIHYuYXBwZW5k
VmVjdG9yKGVuY29kZVZhckludCh2ZXJzaW9uKSk7Ci0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
dmFsdWUgPSBwcnBWYWx1ZTsKLSAgICBBU1NFUlQodmFsdWUpOwotICAgIHYuYXBwZW5kKHZhbHVl
LT5kYXRhKCksIHZhbHVlLT5zaXplKCkpOwotCi0gICAgbGV2ZWxEQlRyYW5zYWN0aW9uLT5wdXQo
b2JqZWN0U3RvcmVkYXRhS2V5LCB2KTsKLQotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBleGlzdHNF
bnRyeUtleSA9IEV4aXN0c0VudHJ5S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwga2V5KTsKLSAgICBsZXZlbERCVHJhbnNhY3Rpb24tPnB1dChleGlzdHNFbnRyeUtleSwgZW5j
b2RlSW50KHZlcnNpb24pKTsKLQotICAgIHJlY29yZElkZW50aWZpZXItPnJlc2V0KGVuY29kZUlE
QktleShrZXkpLCB2ZXJzaW9uKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJREJCYWNr
aW5nU3RvcmVMZXZlbERCOjpjbGVhck9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uTGV2ZWxEQiYgdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCQmFja2luZ1N0b3JlTGV2ZWxE
Qjo6Y2xlYXJPYmplY3RTdG9yZSIpOwotICAgIGlmICghS2V5UHJlZml4Ojp2YWxpZElkcyhkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIExldmVs
REJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb25MZXZlbERCOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKLSAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBLZXlQcmVmaXgoZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCkuZW5jb2RlKCk7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBLZXlQ
cmVmaXgoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCArIDEpLmVuY29kZSgpOwotCi0gICAgZGVs
ZXRlUmFuZ2UobGV2ZWxEQlRyYW5zYWN0aW9uLCBzdGFydEtleSwgc3RvcEtleSk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6ZGVsZXRlUmVjb3Jk
KElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQiYgdHJhbnNhY3Rpb24sIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJSZWNvcmRJZGVudGlm
aWVyJiByZWNvcmRJZGVudGlmaWVyKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCQmFja2lu
Z1N0b3JlTGV2ZWxEQjo6ZGVsZXRlUmVjb3JkIik7Ci0KLSAgICBpZiAoIUtleVByZWZpeDo6dmFs
aWRJZHMoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uTGV2ZWxEQjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlv
bik7Ci0KLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gb2JqZWN0U3RvcmVEYXRhS2V5ID0gT2JqZWN0
U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgcmVjb3JkSWRl
bnRpZmllci5lbmNvZGVkUHJpbWFyeUtleSgpKTsKLSAgICBsZXZlbERCVHJhbnNhY3Rpb24tPnJl
bW92ZShvYmplY3RTdG9yZURhdGFLZXkpOwotCi0gICAgY29uc3QgVmVjdG9yPGNoYXI+IGV4aXN0
c0VudHJ5S2V5ID0gRXhpc3RzRW50cnlLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCByZWNvcmRJZGVudGlmaWVyLmVuY29kZWRQcmltYXJ5S2V5KCkpOwotICAgIGxldmVsREJU
cmFuc2FjdGlvbi0+cmVtb3ZlKGV4aXN0c0VudHJ5S2V5KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotCi1ib29sIElEQkJhY2tpbmdTdG9yZUxldmVsREI6OmdldEtleUdlbmVyYXRvckN1cnJlbnRO
dW1iZXIoSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCJiB0cmFuc2FjdGlvbiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QmIGtleUdlbmVy
YXRvckN1cnJlbnROdW1iZXIpCi17Ci0gICAgaWYgKCFLZXlQcmVmaXg6OnZhbGlkSWRzKGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgTGV2ZWxE
QlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbkxldmVsREI6OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwotCi0gICAg
Y29uc3QgVmVjdG9yPGNoYXI+IGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXJLZXkgPSBPYmplY3RT
dG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0
U3RvcmVNZXRhRGF0YUtleTo6S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcik7Ci0KLSAgICBrZXlH
ZW5lcmF0b3JDdXJyZW50TnVtYmVyID0gLTE7Ci0gICAgVmVjdG9yPGNoYXI+IGRhdGE7Ci0KLSAg
ICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgYm9vbCBvayA9IGxldmVsREJUcmFuc2FjdGlvbi0+
c2FmZUdldChrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyS2V5LCBkYXRhLCBmb3VuZCk7Ci0gICAg
aWYgKCFvaykgewotICAgICAgICBJTlRFUk5BTF9SRUFEX0VSUk9SKEdldEtleUdlbmVyYXRvckN1
cnJlbnROdW1iZXIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChmb3Vu
ZCkKLSAgICAgICAga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlciA9IGRlY29kZUludChkYXRhLmJl
Z2luKCksIGRhdGEuZW5kKCkpOwotICAgIGVsc2UgewotICAgICAgICAvLyBQcmV2aW91c2x5LCB0
aGUga2V5IGdlbmVyYXRvciBzdGF0ZSB3YXMgbm90IHN0b3JlZCBleHBsaWNpdGx5IGJ1dCBkZXJp
dmVkIGZyb20gdGhlCi0gICAgICAgIC8vIG1heGltdW0gbnVtZXJpYyBrZXkgcHJlc2VudCBpbiBl
eGlzdGluZyBkYXRhLiBUaGlzIHZpb2xhdGVzIHRoZSBzcGVjIGFzIHRoZSBkYXRhIG1heQotICAg
ICAgICAvLyBiZSBjbGVhcmVkIGJ1dCB0aGUga2V5IGdlbmVyYXRvciBzdGF0ZSBtdXN0IGJlIHBy
ZXNlcnZlZC4KLSAgICAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gT2JqZWN0U3Rv
cmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWluSURCS2V5KCkp
OwotICAgICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IE9iamVjdFN0b3JlRGF0YUtl
eTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIG1heElEQktleSgpKTsKLQotICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IGxldmVsREJUcmFuc2Fj
dGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKLSAgICAgICAgaW50NjRfdCBtYXhOdW1lcmljS2V5ID0g
MDsKLQotICAgICAgICBmb3IgKGl0LT5zZWVrKHN0YXJ0S2V5KTsgaXQtPmlzVmFsaWQoKSAmJiBj
b21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMDsgaXQtPm5leHQoKSkgewotICAgICAg
ICAgICAgY29uc3QgY2hhciogcCA9IGl0LT5rZXkoKS5iZWdpbigpOwotICAgICAgICAgICAgY29u
c3QgY2hhciogbGltaXQgPSBpdC0+a2V5KCkuZW5kKCk7Ci0KLSAgICAgICAgICAgIE9iamVjdFN0
b3JlRGF0YUtleSBkYXRhS2V5OwotICAgICAgICAgICAgcCA9IE9iamVjdFN0b3JlRGF0YUtleTo6
ZGVjb2RlKHAsIGxpbWl0LCAmZGF0YUtleSk7Ci0gICAgICAgICAgICBBU1NFUlQocCk7Ci0KLSAg
ICAgICAgICAgIGlmIChkYXRhS2V5LnVzZXJLZXkoKS0+dHlwZSgpID09IElEQktleTo6TnVtYmVy
VHlwZSkgewotICAgICAgICAgICAgICAgIGludDY0X3QgbiA9IHN0YXRpY19jYXN0PGludDY0X3Q+
KGRhdGFLZXkudXNlcktleSgpLT5udW1iZXIoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG4gPiBt
YXhOdW1lcmljS2V5KQotICAgICAgICAgICAgICAgICAgICBtYXhOdW1lcmljS2V5ID0gbjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGtleUdlbmVyYXRvckN1cnJlbnROdW1i
ZXIgPSBtYXhOdW1lcmljS2V5ICsgMTsKLSAgICB9Ci0KLSAgICByZXR1cm4ga2V5R2VuZXJhdG9y
Q3VycmVudE51bWJlcjsKLX0KLQotYm9vbCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjptYXliZVVw
ZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25M
ZXZlbERCJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgbmV3TnVtYmVyLCBib29sIGNoZWNrQ3VycmVudCkKLXsKLSAgICBpZiAo
IUtleVByZWZpeDo6dmFsaWRJZHMoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlv
biA9IElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQjo6bGV2ZWxEQlRyYW5zYWN0aW9u
RnJvbSh0cmFuc2FjdGlvbik7Ci0KLSAgICBpZiAoY2hlY2tDdXJyZW50KSB7Ci0gICAgICAgIGlu
dDY0X3QgY3VycmVudE51bWJlcjsKLSAgICAgICAgYm9vbCBvayA9IGdldEtleUdlbmVyYXRvckN1
cnJlbnROdW1iZXIodHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGN1cnJl
bnROdW1iZXIpOwotICAgICAgICBpZiAoIW9rKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBpZiAobmV3TnVtYmVyIDw9IGN1cnJlbnROdW1iZXIpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5R2VuZXJhdG9yQ3Vy
cmVudE51bWJlcktleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpLZXlHZW5lcmF0b3JDdXJy
ZW50TnVtYmVyKTsKLSAgICBwdXRJbnQobGV2ZWxEQlRyYW5zYWN0aW9uLCBrZXlHZW5lcmF0b3JD
dXJyZW50TnVtYmVyS2V5LCBuZXdOdW1iZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IElEQkJhY2tpbmdTdG9yZUxldmVsREI6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUoSURCQmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBSZWZQdHI8SURCUmVj
b3JkSWRlbnRpZmllcj4mIGZvdW5kSURCUmVjb3JkSWRlbnRpZmllcikKLXsKLSAgICBMT0coU3Rv
cmFnZUFQSSwgIklEQkJhY2tpbmdTdG9yZUxldmVsREI6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUi
KTsKLSAgICBpZiAoIUtleVByZWZpeDo6dmFsaWRJZHMoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAg
TGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmVU
cmFuc2FjdGlvbkxldmVsREI6OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwot
ICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsZXZlbGRiS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5Ojpl
bmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5KTsKLSAgICBWZWN0b3I8Y2hhcj4g
ZGF0YTsKLQotICAgIGJvb2wgb2sgPSBsZXZlbERCVHJhbnNhY3Rpb24tPnNhZmVHZXQobGV2ZWxk
YktleSwgZGF0YSwgZm91bmQpOwotICAgIGlmICghb2spIHsKLSAgICAgICAgSU5URVJOQUxfUkVB
RF9FUlJPUihLZXlFeGlzdHNJbk9iamVjdFN0b3JlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICBpZiAoIWZvdW5kKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGludDY0
X3QgdmVyc2lvbjsKLSAgICBpZiAoIWRlY29kZVZhckludChkYXRhLmJlZ2luKCksIGRhdGEuZW5k
KCksIHZlcnNpb24pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3VuZElEQlJlY29y
ZElkZW50aWZpZXIgPSBJREJSZWNvcmRJZGVudGlmaWVyOjpjcmVhdGUoZW5jb2RlSURCS2V5KGtl
eSksIHZlcnNpb24pOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBjaGVja0lu
ZGV4QW5kTWV0YURhdGFLZXkoY29uc3QgTGV2ZWxEQkl0ZXJhdG9yKiBpdCwgY29uc3QgVmVjdG9y
PGNoYXI+JiBzdG9wS2V5LCBpbnQ2NF90IGluZGV4SWQsIHVuc2lnbmVkIGNoYXIgbWV0YURhdGFU
eXBlKQotewotICAgIGlmICghaXQtPmlzVmFsaWQoKSB8fCBjb21wYXJlS2V5cyhpdC0+a2V5KCks
IHN0b3BLZXkpID49IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEluZGV4TWV0YURh
dGFLZXkgbWV0YURhdGFLZXk7Ci0gICAgY29uc3QgY2hhciogcCA9IEluZGV4TWV0YURhdGFLZXk6
OmRlY29kZShpdC0+a2V5KCkuYmVnaW4oKSwgaXQtPmtleSgpLmVuZCgpLCAmbWV0YURhdGFLZXkp
OwotICAgIEFTU0VSVF9VTlVTRUQocCwgcCk7Ci0gICAgaWYgKG1ldGFEYXRhS2V5LmluZGV4SWQo
KSAhPSBpbmRleElkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1ldGFEYXRhS2V5
Lm1ldGFEYXRhVHlwZSgpICE9IG1ldGFEYXRhVHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi0KLS8vIEZJWE1FOiBUaGlzIHNob3VsZCBkbyBzb21lIGVy
cm9yIGhhbmRsaW5nIHJhdGhlciB0aGFuIHBsb3dpbmcgYWhlYWQgd2hlbiBiYWQgZGF0YSBpcyBl
bmNvdW50ZXJlZC4KLWJvb2wgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6Z2V0SW5kZXhlcyhpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgSURCT2JqZWN0U3RvcmVNZXRh
ZGF0YTo6SW5kZXhNYXAqIGluZGV4ZXMpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJCYWNr
aW5nU3RvcmVMZXZlbERCOjpnZXRJbmRleGVzIik7Ci0gICAgaWYgKCFLZXlQcmVmaXg6OnZhbGlk
SWRzKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2Rl
KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDAsIDApOwotICAgIGNvbnN0IFZlY3RvcjxjaGFy
PiBzdG9wS2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQgKyAxLCAwLCAwKTsKLQotICAgIEFTU0VSVChpbmRleGVzLT5pc0VtcHR5KCkpOwotCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2RiLT5jcmVhdGVJdGVy
YXRvcigpOwotICAgIGl0LT5zZWVrKHN0YXJ0S2V5KTsKLSAgICB3aGlsZSAoaXQtPmlzVmFsaWQo
KSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMCkgewotICAgICAgICBjb25z
dCBjaGFyKiBwID0gaXQtPmtleSgpLmJlZ2luKCk7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGxpbWl0
ID0gaXQtPmtleSgpLmVuZCgpOwotCi0gICAgICAgIEluZGV4TWV0YURhdGFLZXkgbWV0YURhdGFL
ZXk7Ci0gICAgICAgIHAgPSBJbmRleE1ldGFEYXRhS2V5OjpkZWNvZGUocCwgbGltaXQsICZtZXRh
RGF0YUtleSk7Ci0gICAgICAgIEFTU0VSVChwKTsKLSAgICAgICAgaWYgKG1ldGFEYXRhS2V5Lm1l
dGFEYXRhVHlwZSgpICE9IEluZGV4TWV0YURhdGFLZXk6Ok5hbWUpIHsKLSAgICAgICAgICAgIElO
VEVSTkFMX0NPTlNJU1RFTkNZX0VSUk9SKEdldEluZGV4ZXMpOwotICAgICAgICAgICAgLy8gUG9z
c2libGUgc3RhbGUgbWV0YWRhdGEgZHVlIHRvIGh0dHA6Ly93ZWJraXQub3JnL2IvODU1NTcgYnV0
IGRvbid0IGZhaWwgdGhlIGxvYWQuCi0gICAgICAgICAgICBpdC0+bmV4dCgpOwotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGSVhNRTogRG8gdGhpcyBieSBk
aXJlY3Qga2V5IGxvb2t1cCByYXRoZXIgdGhhbiBpdGVyYXRpb24sIHRvIHNpbXBsaWZ5LgotICAg
ICAgICBpbnQ2NF90IGluZGV4SWQgPSBtZXRhRGF0YUtleS5pbmRleElkKCk7Ci0gICAgICAgIFN0
cmluZyBpbmRleE5hbWUgPSBkZWNvZGVTdHJpbmcoaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZh
bHVlKCkuZW5kKCkpOwotCi0gICAgICAgIGl0LT5uZXh0KCk7IC8vIHVuaXF1ZSBmbGFnCi0gICAg
ICAgIGlmICghY2hlY2tJbmRleEFuZE1ldGFEYXRhS2V5KGl0LmdldCgpLCBzdG9wS2V5LCBpbmRl
eElkLCBJbmRleE1ldGFEYXRhS2V5OjpVbmlxdWUpKSB7Ci0gICAgICAgICAgICBJTlRFUk5BTF9D
T05TSVNURU5DWV9FUlJPUihHZXRJbmRleGVzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGJvb2wgaW5kZXhVbmlxdWUgPSBkZWNvZGVCb29sKGl0LT52YWx1ZSgpLmJl
Z2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKLQotICAgICAgICBpdC0+bmV4dCgpOyAvLyBrZXlQ
YXRoCi0gICAgICAgIGlmICghY2hlY2tJbmRleEFuZE1ldGFEYXRhS2V5KGl0LmdldCgpLCBzdG9w
S2V5LCBpbmRleElkLCBJbmRleE1ldGFEYXRhS2V5OjpLZXlQYXRoKSkgewotICAgICAgICAgICAg
SU5URVJOQUxfQ09OU0lTVEVOQ1lfRVJST1IoR2V0SW5kZXhlcyk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBJREJLZXlQYXRoIGtleVBhdGggPSBkZWNvZGVJREJLZXlQ
YXRoKGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKLQotICAgICAgICBp
dC0+bmV4dCgpOyAvLyBbb3B0aW9uYWxdIG11bHRpRW50cnkgZmxhZwotICAgICAgICBib29sIGlu
ZGV4TXVsdGlFbnRyeSA9IGZhbHNlOwotICAgICAgICBpZiAoY2hlY2tJbmRleEFuZE1ldGFEYXRh
S2V5KGl0LmdldCgpLCBzdG9wS2V5LCBpbmRleElkLCBJbmRleE1ldGFEYXRhS2V5OjpNdWx0aUVu
dHJ5KSkgewotICAgICAgICAgICAgaW5kZXhNdWx0aUVudHJ5ID0gZGVjb2RlQm9vbChpdC0+dmFs
dWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSk7Ci0gICAgICAgICAgICBpdC0+bmV4dCgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaW5kZXhlcy0+c2V0KGluZGV4SWQsIElEQkluZGV4TWV0
YWRhdGEoaW5kZXhOYW1lLCBpbmRleElkLCBrZXlQYXRoLCBpbmRleFVuaXF1ZSwgaW5kZXhNdWx0
aUVudHJ5KSk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1XQVJOX1VOVVNFRF9SRVRV
Uk4gc3RhdGljIGJvb2wgc2V0TWF4SW5kZXhJZChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkKQotewotICAgIGludDY0X3QgbWF4SW5kZXhJZCA9IC0xOwotICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiBtYXhJbmRleElkS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6Ok1heEluZGV4
SWQpOwotICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICBib29sIG9rID0gZ2V0SW50KHRyYW5z
YWN0aW9uLCBtYXhJbmRleElkS2V5LCBtYXhJbmRleElkLCBmb3VuZCk7Ci0gICAgaWYgKCFvaykg
ewotICAgICAgICBJTlRFUk5BTF9SRUFEX0VSUk9SKFNldE1heEluZGV4SWQpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICghZm91bmQpCi0gICAgICAgIG1heEluZGV4SWQg
PSBNaW5pbXVtSW5kZXhJZDsKLQotICAgIGlmIChpbmRleElkIDw9IG1heEluZGV4SWQpIHsKLSAg
ICAgICAgSU5URVJOQUxfQ09OU0lTVEVOQ1lfRVJST1IoU2V0TWF4SW5kZXhJZCk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdXRJbnQodHJhbnNhY3Rpb24sIG1heEluZGV4
SWRLZXksIGluZGV4SWQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIElEQkJhY2tpbmdT
dG9yZUxldmVsREI6OmNyZWF0ZUluZGV4KElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxE
QiYgdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYg
a2V5UGF0aCwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnkpCi17Ci0gICAgTE9HKFN0
b3JhZ2VBUEksICJJREJCYWNraW5nU3RvcmVMZXZlbERCOjpjcmVhdGVJbmRleCIpOwotICAgIGlm
ICghS2V5UHJlZml4Ojp2YWxpZElkcyhkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElk
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxE
QlRyYW5zYWN0aW9uID0gSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCOjpsZXZlbERC
VHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKLSAgICBpZiAoIXNldE1heEluZGV4SWQobGV2
ZWxEQlRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgVmVjdG9yPGNoYXI+IG5hbWVLZXkgPSBJ
bmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJ
ZCwgSW5kZXhNZXRhRGF0YUtleTo6TmFtZSk7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IHVuaXF1
ZUtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBpbmRleElkLCBJbmRleE1ldGFEYXRhS2V5OjpVbmlxdWUpOwotICAgIGNvbnN0IFZlY3Rvcjxj
aGFyPiBrZXlQYXRoS2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIGluZGV4SWQsIEluZGV4TWV0YURhdGFLZXk6OktleVBhdGgpOwotICAgIGNv
bnN0IFZlY3RvcjxjaGFyPiBtdWx0aUVudHJ5S2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2Rl
KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIEluZGV4TWV0YURhdGFLZXk6Ok11
bHRpRW50cnkpOwotCi0gICAgcHV0U3RyaW5nKGxldmVsREJUcmFuc2FjdGlvbiwgbmFtZUtleSwg
bmFtZSk7Ci0gICAgcHV0Qm9vbChsZXZlbERCVHJhbnNhY3Rpb24sIHVuaXF1ZUtleSwgaXNVbmlx
dWUpOwotICAgIHB1dElEQktleVBhdGgobGV2ZWxEQlRyYW5zYWN0aW9uLCBrZXlQYXRoS2V5LCBr
ZXlQYXRoKTsKLSAgICBwdXRCb29sKGxldmVsREJUcmFuc2FjdGlvbiwgbXVsdGlFbnRyeUtleSwg
aXNNdWx0aUVudHJ5KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJREJCYWNraW5nU3Rv
cmVMZXZlbERCOjpkZWxldGVJbmRleChJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIm
IHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCQmFja2luZ1N0b3Jl
TGV2ZWxEQjo6ZGVsZXRlSW5kZXgiKTsKLSAgICBpZiAoIUtleVByZWZpeDo6dmFsaWRJZHMoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uTGV2ZWxEQjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlv
bik7Ci0KLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gaW5kZXhNZXRhRGF0YVN0YXJ0ID0gSW5kZXhN
ZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIDAp
OwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBpbmRleE1ldGFEYXRhRW5kID0gSW5kZXhNZXRhRGF0
YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpOwot
ICAgIGRlbGV0ZVJhbmdlKGxldmVsREJUcmFuc2FjdGlvbiwgaW5kZXhNZXRhRGF0YVN0YXJ0LCBp
bmRleE1ldGFEYXRhRW5kKTsKLQotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBpbmRleERhdGFTdGFy
dCA9IEluZGV4RGF0YUtleTo6ZW5jb2RlTWluS2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGluZGV4SWQpOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBpbmRleERhdGFFbmQgPSBJbmRleERh
dGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKTsK
LSAgICBkZWxldGVSYW5nZShsZXZlbERCVHJhbnNhY3Rpb24sIGluZGV4RGF0YVN0YXJ0LCBpbmRl
eERhdGFFbmQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIElEQkJhY2tpbmdTdG9yZUxl
dmVsREI6OnB1dEluZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxl
dmVsREImIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSwgY29uc3QgSURCUmVjb3Jk
SWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklE
QkJhY2tpbmdTdG9yZUxldmVsREI6OnB1dEluZGV4RGF0YUZvclJlY29yZCIpOwotICAgIEFTU0VS
VChrZXkuaXNWYWxpZCgpKTsKLSAgICBBU1NFUlQocmVjb3JkSWRlbnRpZmllcik7Ci0gICAgaWYg
KCFLZXlQcmVmaXg6OnZhbGlkSWRzKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVs
REJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQjo6bGV2ZWxE
QlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IGlu
ZGV4RGF0YUtleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIGluZGV4SWQsIGVuY29kZUlEQktleShrZXkpLCByZWNvcmRJZGVudGlmaWVyLT5lbmNvZGVk
UHJpbWFyeUtleSgpKTsKLQotICAgIFZlY3RvcjxjaGFyPiBkYXRhOwotICAgIGRhdGEuYXBwZW5k
VmVjdG9yKGVuY29kZVZhckludChyZWNvcmRJZGVudGlmaWVyLT52ZXJzaW9uKCkpKTsKLSAgICBk
YXRhLmFwcGVuZFZlY3RvcihyZWNvcmRJZGVudGlmaWVyLT5lbmNvZGVkUHJpbWFyeUtleSgpKTsK
LQotICAgIGxldmVsREJUcmFuc2FjdGlvbi0+cHV0KGluZGV4RGF0YUtleSwgZGF0YSk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGZpbmRHcmVhdGVzdEtleUxlc3NUaGFuT3JF
cXVhbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4m
IHRhcmdldCwgVmVjdG9yPGNoYXI+JiBmb3VuZEtleSkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IHRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwotICAg
IGl0LT5zZWVrKHRhcmdldCk7Ci0KLSAgICBpZiAoIWl0LT5pc1ZhbGlkKCkpIHsKLSAgICAgICAg
aXQtPnNlZWtUb0xhc3QoKTsKLSAgICAgICAgaWYgKCFpdC0+aXNWYWxpZCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHdoaWxlIChJREJCYWNraW5nU3RvcmVMZXZl
bERCOjpjb21wYXJlSW5kZXhLZXlzKGl0LT5rZXkoKSwgdGFyZ2V0KSA+IDApIHsKLSAgICAgICAg
aXQtPnByZXYoKTsKLSAgICAgICAgaWYgKCFpdC0+aXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGRvIHsKLSAgICAgICAgZm91bmRLZXkuY2xlYXIoKTsK
LSAgICAgICAgZm91bmRLZXkuYXBwZW5kKGl0LT5rZXkoKS5iZWdpbigpLCBpdC0+a2V5KCkuZW5k
KCkgLSBpdC0+a2V5KCkuYmVnaW4oKSk7Ci0KLSAgICAgICAgLy8gVGhlcmUgY2FuIGJlIHNldmVy
YWwgaW5kZXgga2V5cyB0aGF0IGNvbXBhcmUgZXF1YWwuIFdlIHdhbnQgdGhlIGxhc3Qgb25lLgot
ICAgICAgICBpdC0+bmV4dCgpOwotICAgIH0gd2hpbGUgKGl0LT5pc1ZhbGlkKCkgJiYgIUlEQkJh
Y2tpbmdTdG9yZUxldmVsREI6OmNvbXBhcmVJbmRleEtleXMoaXQtPmtleSgpLCB0YXJnZXQpKTsK
LQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCB2ZXJzaW9uRXhpc3RzKExldmVs
REJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IHZlcnNpb24sIGNvbnN0IFZlY3RvcjxjaGFyPiYgZW5jb2Rl
ZFByaW1hcnlLZXksIGJvb2wmIGV4aXN0cykKLXsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5
ID0gRXhpc3RzRW50cnlLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBlbmNv
ZGVkUHJpbWFyeUtleSk7Ci0gICAgVmVjdG9yPGNoYXI+IGRhdGE7Ci0KLSAgICBib29sIG9rID0g
dHJhbnNhY3Rpb24tPnNhZmVHZXQoa2V5LCBkYXRhLCBleGlzdHMpOwotICAgIGlmICghb2spIHsK
LSAgICAgICAgSU5URVJOQUxfUkVBRF9FUlJPUihWZXJzaW9uRXhpc3RzKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoIWV4aXN0cykKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBleGlzdHMgPSAoZGVjb2RlSW50KGRhdGEuYmVnaW4oKSwgZGF0YS5lbmQoKSkgPT0g
dmVyc2lvbik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSURCQmFja2luZ1N0b3JlTGV2
ZWxEQjo6ZmluZEtleUluSW5kZXgoSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCJiB0
cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXksIFZlY3RvcjxjaGFyPiYgZm91bmRFbmNv
ZGVkUHJpbWFyeUtleSwgYm9vbCYgZm91bmQpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJC
YWNraW5nU3RvcmVMZXZlbERCOjpmaW5kS2V5SW5JbmRleCIpOwotICAgIEFTU0VSVChLZXlQcmVm
aXg6OnZhbGlkSWRzKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpKTsKLQotICAg
IEFTU0VSVChmb3VuZEVuY29kZWRQcmltYXJ5S2V5LmlzRW1wdHkoKSk7Ci0gICAgZm91bmQgPSBm
YWxzZTsKLQotICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gSURC
QmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRy
YW5zYWN0aW9uKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbGV2ZWxkYktleSA9IEluZGV4RGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleSk7Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBsZXZlbERCVHJhbnNhY3Rp
b24tPmNyZWF0ZUl0ZXJhdG9yKCk7Ci0gICAgaXQtPnNlZWsobGV2ZWxkYktleSk7Ci0KLSAgICBm
b3IgKDs7KSB7Ci0gICAgICAgIGlmICghaXQtPmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICBpZiAoY29tcGFyZUluZGV4S2V5cyhpdC0+a2V5KCksIGxldmVsZGJL
ZXkpID4gMCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGludDY0X3QgdmVy
c2lvbjsKLSAgICAgICAgY29uc3QgY2hhciogcCA9IGRlY29kZVZhckludChpdC0+dmFsdWUoKS5i
ZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSwgdmVyc2lvbik7Ci0gICAgICAgIGlmICghcCkgewot
ICAgICAgICAgICAgSU5URVJOQUxfUkVBRF9FUlJPUihGaW5kS2V5SW5JbmRleCk7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZm91bmRFbmNvZGVkUHJpbWFy
eUtleS5hcHBlbmQocCwgaXQtPnZhbHVlKCkuZW5kKCkgLSBwKTsKLQotICAgICAgICBib29sIGV4
aXN0cyA9IGZhbHNlOwotICAgICAgICBib29sIG9rID0gdmVyc2lvbkV4aXN0cyhsZXZlbERCVHJh
bnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIHZlcnNpb24sIGZvdW5kRW5jb2Rl
ZFByaW1hcnlLZXksIGV4aXN0cyk7Ci0gICAgICAgIGlmICghb2spCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZXhpc3RzKSB7Ci0gICAgICAgICAgICAvLyBEZWxldGUg
c3RhbGUgaW5kZXggZGF0YSBlbnRyeSBhbmQgY29udGludWUuCi0gICAgICAgICAgICBsZXZlbERC
VHJhbnNhY3Rpb24tPnJlbW92ZShpdC0+a2V5KCkpOwotICAgICAgICAgICAgaXQtPm5leHQoKTsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGZvdW5kID0gdHJ1ZTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfQotCi1ib29sIElEQkJhY2tpbmdTdG9yZUxl
dmVsREI6OmdldFByaW1hcnlLZXlWaWFJbmRleChJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxl
dmVsREImIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSwgUmVmUHRyPElEQktleT4m
IHByaW1hcnlLZXkpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJCYWNraW5nU3RvcmVMZXZl
bERCOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgiKTsKLSAgICBpZiAoIUtleVByZWZpeDo6dmFsaWRJ
ZHMoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICBWZWN0b3I8Y2hhcj4gZm91bmRF
bmNvZGVkUHJpbWFyeUtleTsKLSAgICBib29sIG9rID0gZmluZEtleUluSW5kZXgodHJhbnNhY3Rp
b24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleSwgZm91bmRFbmNvZGVk
UHJpbWFyeUtleSwgZm91bmQpOwotICAgIGlmICghb2spIHsKLSAgICAgICAgSU5URVJOQUxfUkVB
RF9FUlJPUihHZXRQcmltYXJ5S2V5VmlhSW5kZXgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIGlmIChmb3VuZCkgewotICAgICAgICBkZWNvZGVJREJLZXkoZm91bmRFbmNvZGVk
UHJpbWFyeUtleS5iZWdpbigpLCBmb3VuZEVuY29kZWRQcmltYXJ5S2V5LmVuZCgpLCBwcmltYXJ5
S2V5KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6a2V5RXhpc3RzSW5JbmRleChJREJCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREImIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkm
IGluZGV4S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5LCBib29sJiBleGlzdHMp
Ci17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJCYWNraW5nU3RvcmVMZXZlbERCOjprZXlFeGlz
dHNJbkluZGV4Iik7Ci0gICAgaWYgKCFLZXlQcmVmaXg6OnZhbGlkSWRzKGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIGluZGV4SWQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBleGlz
dHMgPSBmYWxzZTsKLSAgICBWZWN0b3I8Y2hhcj4gZm91bmRFbmNvZGVkUHJpbWFyeUtleTsKLSAg
ICBib29sIG9rID0gZmluZEtleUluSW5kZXgodHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIGluZGV4SWQsIGluZGV4S2V5LCBmb3VuZEVuY29kZWRQcmltYXJ5S2V5LCBleGlz
dHMpOwotICAgIGlmICghb2spIHsKLSAgICAgICAgSU5URVJOQUxfUkVBRF9FUlJPUihLZXlFeGlz
dHNJbkluZGV4KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoIWV4aXN0
cykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBkZWNvZGVJREJLZXkoZm91bmRFbmNvZGVk
UHJpbWFyeUtleS5iZWdpbigpLCBmb3VuZEVuY29kZWRQcmltYXJ5S2V5LmVuZCgpLCBmb3VuZFBy
aW1hcnlLZXkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi0KLWJvb2wgSURCQmFja2luZ1N0b3Jl
TGV2ZWxEQjo6bWFrZUluZGV4V3JpdGVycyhpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGludDY0X3Qg
ZGF0YWJhc2VJRCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmUsIElE
QktleSYgcHJpbWFyeUtleSwgYm9vbCBrZXlXYXNHZW5lcmF0ZWQsIGNvbnN0IFZlY3RvcjxpbnQ2
NF90PiYgaW5kZXhJRHMsIGNvbnN0IFZlY3RvcjxWZWN0b3I8UmVmUHRyPElEQktleT4+PiYgaW5k
ZXhLZXlzLCBWZWN0b3I8UmVmUHRyPElEQkluZGV4V3JpdGVyTGV2ZWxEQj4+JiBpbmRleFdyaXRl
cnMsIFN0cmluZyogZXJyb3JNZXNzYWdlLCBib29sJiBjb21wbGV0ZWQpCi17Ci0gICAgQVNTRVJU
KGluZGV4SURzLnNpemUoKSA9PSBpbmRleEtleXMuc2l6ZSgpKTsKLSAgICBjb21wbGV0ZWQgPSBm
YWxzZTsKLQotICAgIEhhc2hNYXA8aW50NjRfdCwgSW5kZXhLZXlzPiBpbmRleEtleU1hcDsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4SURzLnNpemUoKTsgKytpKQotICAgICAgICBp
bmRleEtleU1hcC5hZGQoaW5kZXhJRHNbaV0sIGluZGV4S2V5c1tpXSk7Ci0KLSAgICBmb3IgKElE
Qk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG9iamVj
dFN0b3JlLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gb2JqZWN0U3RvcmUuaW5kZXhlcy5lbmQoKTsg
KytpdCkgewotICAgICAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleCA9IGl0LT52YWx1
ZTsKLQotICAgICAgICBJbmRleEtleXMga2V5cyA9IGluZGV4S2V5TWFwLmdldChpdC0+a2V5KTsK
LSAgICAgICAgLy8gSWYgdGhlIG9iamVjdFN0b3JlIGlzIHVzaW5nIGF1dG9JbmNyZW1lbnQsIHRo
ZW4gYW55IGluZGV4ZXMgd2l0aCBhbiBpZGVudGljYWwga2V5UGF0aCBuZWVkIHRvIGFsc28gdXNl
IHRoZSBwcmltYXJ5IChnZW5lcmF0ZWQpIGtleSBhcyBhIGtleS4KLSAgICAgICAgaWYgKGtleVdh
c0dlbmVyYXRlZCAmJiAoaW5kZXgua2V5UGF0aCA9PSBvYmplY3RTdG9yZS5rZXlQYXRoKSkKLSAg
ICAgICAgICAgIGtleXMuYXBwZW5kKCZwcmltYXJ5S2V5KTsKLQotICAgICAgICBSZWZQdHI8SURC
SW5kZXhXcml0ZXJMZXZlbERCPiBpbmRleFdyaXRlciA9IElEQkluZGV4V3JpdGVyTGV2ZWxEQjo6
Y3JlYXRlKGluZGV4LCBrZXlzKTsKLSAgICAgICAgYm9vbCBjYW5BZGRLZXlzID0gZmFsc2U7Ci0g
ICAgICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2Fj
dGlvbklEKSk7Ci0gICAgICAgIGJvb2wgYmFja2luZ1N0b3JlU3VjY2VzcyA9IGluZGV4V3JpdGVy
LT52ZXJpZnlJbmRleEtleXMoKnRoaXMsICptX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9ucy5nZXQo
dHJhbnNhY3Rpb25JRCksIGRhdGFiYXNlSUQsIG9iamVjdFN0b3JlLmlkLCBpbmRleC5pZCwgY2Fu
QWRkS2V5cywgJnByaW1hcnlLZXksIGVycm9yTWVzc2FnZSk7Ci0gICAgICAgIGlmICghYmFja2lu
Z1N0b3JlU3VjY2VzcykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFj
YW5BZGRLZXlzKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgaW5kZXhXcml0
ZXJzLmFwcGVuZChpbmRleFdyaXRlci5yZWxlYXNlKCkpOwotICAgIH0KLQotICAgIGNvbXBsZXRl
ZCA9IHRydWU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBhc3NSZWZQdHI8SURCS2V5PiBJREJC
YWNraW5nU3RvcmVMZXZlbERCOjpnZW5lcmF0ZUtleShJREJUcmFuc2FjdGlvbkJhY2tlbmQmIHRy
YW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLXsK
LSAgICBjb25zdCBpbnQ2NF90IG1heEdlbmVyYXRvclZhbHVlID0gOTAwNzE5OTI1NDc0MDk5MkxM
OyAvLyBNYXhpbXVtIGludGVnZXIgc3RvcmFibGUgYXMgRUNNQVNjcmlwdCBudW1iZXIuCi0gICAg
aW50NjRfdCBjdXJyZW50TnVtYmVyOwotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZVRyYW5zYWN0
aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbi5pZCgpKSk7Ci0gICAgYm9vbCBvayA9IGdldEtleUdl
bmVyYXRvckN1cnJlbnROdW1iZXIoKm1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb25zLmdldCh0cmFu
c2FjdGlvbi5pZCgpKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgY3VycmVudE51bWJlcik7
Ci0gICAgaWYgKCFvaykgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBnZXRLZXlHZW5l
cmF0b3JDdXJyZW50TnVtYmVyIik7Ci0gICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUludmFs
aWQoKTsKLSAgICB9Ci0gICAgaWYgKGN1cnJlbnROdW1iZXIgPCAwIHx8IGN1cnJlbnROdW1iZXIg
PiBtYXhHZW5lcmF0b3JWYWx1ZSkKLSAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlSW52YWxp
ZCgpOwotCi0gICAgcmV0dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKGN1cnJlbnROdW1iZXIpOwot
fQotCi0KLWJvb2wgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6dXBkYXRlS2V5R2VuZXJhdG9yKElE
QlRyYW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgYm9vbCBjaGVja0N1cnJlbnQp
Ci17Ci0gICAgQVNTRVJUKGtleS50eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJUeXBlKTsKLSAgICBB
U1NFUlQobV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24uaWQo
KSkpOwotCi0gICAgcmV0dXJuIG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcigq
bV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uLmlkKCkpLCBkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkLCBzdGF0aWNfY2FzdDxpbnQ2NF90PihmbG9vcihrZXkubnVtYmVy
KCkpKSArIDEsIGNoZWNrQ3VycmVudCk7Ci19Ci0KLWNsYXNzIE9iamVjdFN0b3JlS2V5Q3Vyc29y
SW1wbCA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxPYmplY3RTdG9yZUtleUN1cnNvckltcGw+IGNyZWF0ZShpbnQ2
NF90IGN1cnNvcklELCBMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBJREJC
YWNraW5nU3RvcmVDdXJzb3JMZXZlbERCOjpDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPYmplY3RTdG9yZUtleUN1cnNvcklt
cGwoY3Vyc29ySUQsIHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKSk7Ci0gICAgfQotCi0gICAg
dmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREI+IGNsb25lKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgT2JqZWN0U3RvcmVLZXlDdXJzb3JJ
bXBsKHRoaXMpKTsKLSAgICB9Ci0KLSAgICAvLyBJREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERC
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUoKSBjb25zdCBvdmVy
cmlkZSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgYm9v
bCBsb2FkQ3VycmVudFJvdygpIG92ZXJyaWRlOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBW
ZWN0b3I8Y2hhcj4gZW5jb2RlS2V5KGNvbnN0IElEQktleSAma2V5KQotICAgIHsKLSAgICAgICAg
cmV0dXJuIE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKG1fY3Vyc29yT3B0aW9ucy5kYXRhYmFz
ZUlkLCBtX2N1cnNvck9wdGlvbnMub2JqZWN0U3RvcmVJZCwga2V5KTsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsKGludDY0X3QgY3Vyc29ySUQsIExldmVs
REJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IElEQkJhY2tpbmdTdG9yZUN1cnNvckxl
dmVsREI6OkN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCi0gICAgICAgIDogSURCQmFja2lu
Z1N0b3JlQ3Vyc29yTGV2ZWxEQihjdXJzb3JJRCwgdHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMp
Ci0gICAgewotICAgIH0KLQotICAgIE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbChjb25zdCBPYmpl
Y3RTdG9yZUtleUN1cnNvckltcGwqIG90aGVyKQotICAgICAgICA6IElEQkJhY2tpbmdTdG9yZUN1
cnNvckxldmVsREIob3RoZXIpCi0gICAgewotICAgIH0KLX07Ci0KLWJvb2wgT2JqZWN0U3RvcmVL
ZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCi17Ci0gICAgY29uc3QgY2hhcioga2V5UG9z
aXRpb24gPSBtX2l0ZXJhdG9yLT5rZXkoKS5iZWdpbigpOwotICAgIGNvbnN0IGNoYXIqIGtleUxp
bWl0ID0gbV9pdGVyYXRvci0+a2V5KCkuZW5kKCk7Ci0KLSAgICBPYmplY3RTdG9yZURhdGFLZXkg
b2JqZWN0U3RvcmVEYXRhS2V5OwotICAgIGtleVBvc2l0aW9uID0gT2JqZWN0U3RvcmVEYXRhS2V5
OjpkZWNvZGUoa2V5UG9zaXRpb24sIGtleUxpbWl0LCAmb2JqZWN0U3RvcmVEYXRhS2V5KTsKLSAg
ICBpZiAoIWtleVBvc2l0aW9uKSB7Ci0gICAgICAgIElOVEVSTkFMX1JFQURfRVJST1IoTG9hZEN1
cnJlbnRSb3cpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbV9jdXJyZW50
S2V5ID0gb2JqZWN0U3RvcmVEYXRhS2V5LnVzZXJLZXkoKTsKLQotICAgIGludDY0X3QgdmVyc2lv
bjsKLSAgICBjb25zdCBjaGFyKiB2YWx1ZVBvc2l0aW9uID0gZGVjb2RlVmFySW50KG1faXRlcmF0
b3ItPnZhbHVlKCkuYmVnaW4oKSwgbV9pdGVyYXRvci0+dmFsdWUoKS5lbmQoKSwgdmVyc2lvbik7
Ci0gICAgaWYgKCF2YWx1ZVBvc2l0aW9uKSB7Ci0gICAgICAgIElOVEVSTkFMX1JFQURfRVJST1Io
TG9hZEN1cnJlbnRSb3cpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8g
RklYTUU6IFRoaXMgcmUtZW5jb2RlcyB3aGF0IHdhcyBqdXN0IGRlY29kZWQ7IHRyeSBhbmQgb3B0
aW1pemUuCi0gICAgbV9yZWNvcmRJZGVudGlmaWVyLT5yZXNldChlbmNvZGVJREJLZXkoKm1fY3Vy
cmVudEtleSksIHZlcnNpb24pOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWNsYXNzIE9iamVj
dFN0b3JlQ3Vyc29ySW1wbCA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxPYmplY3RTdG9yZUN1cnNvckltcGw+IGNy
ZWF0ZShpbnQ2NF90IGN1cnNvcklELCBMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBj
b25zdCBJREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCOjpDdXJzb3JPcHRpb25zJiBjdXJzb3JP
cHRpb25zKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPYmplY3RTdG9yZUN1
cnNvckltcGwoY3Vyc29ySUQsIHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKSk7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREI+IGNs
b25lKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgT2JqZWN0U3RvcmVDdXJz
b3JJbXBsKHRoaXMpKTsKLSAgICB9Ci0KLSAgICAvLyBJREJCYWNraW5nU3RvcmVDdXJzb3JMZXZl
bERCCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX2N1cnJlbnRWYWx1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBsb2Fk
Q3VycmVudFJvdygpIG92ZXJyaWRlOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBWZWN0b3I8
Y2hhcj4gZW5jb2RlS2V5KGNvbnN0IElEQktleSAma2V5KQotICAgIHsKLSAgICAgICAgcmV0dXJu
IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKG1fY3Vyc29yT3B0aW9ucy5kYXRhYmFzZUlkLCBt
X2N1cnNvck9wdGlvbnMub2JqZWN0U3RvcmVJZCwga2V5KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgT2JqZWN0U3RvcmVDdXJzb3JJbXBsKGludDY0X3QgY3Vyc29ySUQsIExldmVsREJUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREI6OkN1
cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCi0gICAgICAgIDogSURCQmFja2luZ1N0b3JlQ3Vy
c29yTGV2ZWxEQihjdXJzb3JJRCwgdHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpCi0gICAgewot
ICAgIH0KLQotICAgIE9iamVjdFN0b3JlQ3Vyc29ySW1wbChjb25zdCBPYmplY3RTdG9yZUN1cnNv
ckltcGwqIG90aGVyKQotICAgICAgICA6IElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREIob3Ro
ZXIpCi0gICAgICAgICwgbV9jdXJyZW50VmFsdWUob3RoZXItPm1fY3VycmVudFZhbHVlKQotICAg
IHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2N1cnJlbnRWYWx1ZTsKLX07
Ci0KLWJvb2wgT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCi17Ci0gICAg
Y29uc3QgY2hhcioga2V5UG9zaXRpb24gPSBtX2l0ZXJhdG9yLT5rZXkoKS5iZWdpbigpOwotICAg
IGNvbnN0IGNoYXIqIGtleUxpbWl0ID0gbV9pdGVyYXRvci0+a2V5KCkuZW5kKCk7Ci0KLSAgICBP
YmplY3RTdG9yZURhdGFLZXkgb2JqZWN0U3RvcmVEYXRhS2V5OwotICAgIGtleVBvc2l0aW9uID0g
T2JqZWN0U3RvcmVEYXRhS2V5OjpkZWNvZGUoa2V5UG9zaXRpb24sIGtleUxpbWl0LCAmb2JqZWN0
U3RvcmVEYXRhS2V5KTsKLSAgICBpZiAoIWtleVBvc2l0aW9uKSB7Ci0gICAgICAgIElOVEVSTkFM
X1JFQURfRVJST1IoTG9hZEN1cnJlbnRSb3cpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgbV9jdXJyZW50S2V5ID0gb2JqZWN0U3RvcmVEYXRhS2V5LnVzZXJLZXkoKTsKLQot
ICAgIGludDY0X3QgdmVyc2lvbjsKLSAgICBjb25zdCBjaGFyKiB2YWx1ZVBvc2l0aW9uID0gZGVj
b2RlVmFySW50KG1faXRlcmF0b3ItPnZhbHVlKCkuYmVnaW4oKSwgbV9pdGVyYXRvci0+dmFsdWUo
KS5lbmQoKSwgdmVyc2lvbik7Ci0gICAgaWYgKCF2YWx1ZVBvc2l0aW9uKSB7Ci0gICAgICAgIElO
VEVSTkFMX1JFQURfRVJST1IoTG9hZEN1cnJlbnRSb3cpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFRoaXMgcmUtZW5jb2RlcyB3aGF0IHdhcyBqdXN0IGRl
Y29kZWQ7IHRyeSBhbmQgb3B0aW1pemUuCi0gICAgbV9yZWNvcmRJZGVudGlmaWVyLT5yZXNldChl
bmNvZGVJREJLZXkoKm1fY3VycmVudEtleSksIHZlcnNpb24pOwotCi0gICAgVmVjdG9yPGNoYXI+
IHZhbHVlOwotICAgIHZhbHVlLmFwcGVuZCh2YWx1ZVBvc2l0aW9uLCBtX2l0ZXJhdG9yLT52YWx1
ZSgpLmVuZCgpIC0gdmFsdWVQb3NpdGlvbik7Ci0gICAgbV9jdXJyZW50VmFsdWUgPSBTaGFyZWRC
dWZmZXI6OmFkb3B0VmVjdG9yKHZhbHVlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotY2xhc3Mg
SW5kZXhLZXlDdXJzb3JJbXBsIGZpbmFsIDogcHVibGljIElEQkJhY2tpbmdTdG9yZUN1cnNvckxl
dmVsREIgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluZGV4S2V5Q3Vyc29ySW1w
bD4gY3JlYXRlKGludDY0X3QgY3Vyc29ySUQsIExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24sIGNvbnN0IElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREI6OkN1cnNvck9wdGlvbnMmIGN1
cnNvck9wdGlvbnMpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluZGV4S2V5
Q3Vyc29ySW1wbChjdXJzb3JJRCwgdHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpKTsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQj4g
Y2xvbmUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbmRleEtleUN1cnNv
ckltcGwodGhpcykpOwotICAgIH0KLQotICAgIC8vIElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVs
REIKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSgpIGNvbnN0IG92
ZXJyaWRlIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
cHJpbWFyeUtleTsgfQotICAgIHZpcnR1YWwgY29uc3QgSURCUmVjb3JkSWRlbnRpZmllciYgcmVj
b3JkSWRlbnRpZmllcigpIGNvbnN0IG92ZXJyaWRlIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJl
dHVybiAqbV9yZWNvcmRJZGVudGlmaWVyOyB9Ci0gICAgdmlydHVhbCBib29sIGxvYWRDdXJyZW50
Um93KCkgb3ZlcnJpZGU7Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIFZlY3RvcjxjaGFyPiBl
bmNvZGVLZXkoY29uc3QgSURCS2V5ICZrZXkpCi0gICAgewotICAgICAgICByZXR1cm4gSW5kZXhE
YXRhS2V5OjplbmNvZGUobV9jdXJzb3JPcHRpb25zLmRhdGFiYXNlSWQsIG1fY3Vyc29yT3B0aW9u
cy5vYmplY3RTdG9yZUlkLCBtX2N1cnNvck9wdGlvbnMuaW5kZXhJZCwga2V5KTsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgSW5kZXhLZXlDdXJzb3JJbXBsKGludDY0X3QgY3Vyc29ySUQsIExldmVs
REJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IElEQkJhY2tpbmdTdG9yZUN1cnNvckxl
dmVsREI6OkN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCi0gICAgICAgIDogSURCQmFja2lu
Z1N0b3JlQ3Vyc29yTGV2ZWxEQihjdXJzb3JJRCwgdHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMp
Ci0gICAgewotICAgIH0KLQotICAgIEluZGV4S2V5Q3Vyc29ySW1wbChjb25zdCBJbmRleEtleUN1
cnNvckltcGwqIG90aGVyKQotICAgICAgICA6IElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREIo
b3RoZXIpCi0gICAgICAgICwgbV9wcmltYXJ5S2V5KG90aGVyLT5tX3ByaW1hcnlLZXkpCi0gICAg
ewotICAgIH0KLQotICAgIFJlZlB0cjxJREJLZXk+IG1fcHJpbWFyeUtleTsKLX07Ci0KLWJvb2wg
SW5kZXhLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCi17Ci0gICAgY29uc3QgY2hhciog
a2V5UG9zaXRpb24gPSBtX2l0ZXJhdG9yLT5rZXkoKS5iZWdpbigpOwotICAgIGNvbnN0IGNoYXIq
IGtleUxpbWl0ID0gbV9pdGVyYXRvci0+a2V5KCkuZW5kKCk7Ci0KLSAgICBJbmRleERhdGFLZXkg
aW5kZXhEYXRhS2V5OwotICAgIGtleVBvc2l0aW9uID0gSW5kZXhEYXRhS2V5OjpkZWNvZGUoa2V5
UG9zaXRpb24sIGtleUxpbWl0LCAmaW5kZXhEYXRhS2V5KTsKLQotICAgIG1fY3VycmVudEtleSA9
IGluZGV4RGF0YUtleS51c2VyS2V5KCk7Ci0KLSAgICBpbnQ2NF90IGluZGV4RGF0YVZlcnNpb247
Ci0gICAgY29uc3QgY2hhciogdmFsdWVQb3NpdGlvbiA9IGRlY29kZVZhckludChtX2l0ZXJhdG9y
LT52YWx1ZSgpLmJlZ2luKCksIG1faXRlcmF0b3ItPnZhbHVlKCkuZW5kKCksIGluZGV4RGF0YVZl
cnNpb24pOwotICAgIGlmICghdmFsdWVQb3NpdGlvbikgewotICAgICAgICBJTlRFUk5BTF9SRUFE
X0VSUk9SKExvYWRDdXJyZW50Um93KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIHZhbHVlUG9zaXRpb24gPSBkZWNvZGVJREJLZXkodmFsdWVQb3NpdGlvbiwgbV9pdGVyYXRv
ci0+dmFsdWUoKS5lbmQoKSwgbV9wcmltYXJ5S2V5KTsKLSAgICBpZiAoIXZhbHVlUG9zaXRpb24p
IHsKLSAgICAgICAgSU5URVJOQUxfUkVBRF9FUlJPUihMb2FkQ3VycmVudFJvdyk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8Y2hhcj4gcHJpbWFyeUxldmVsREJL
ZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShpbmRleERhdGFLZXkuZGF0YWJhc2VJZCgp
LCBpbmRleERhdGFLZXkub2JqZWN0U3RvcmVJZCgpLCAqbV9wcmltYXJ5S2V5KTsKLQotICAgIFZl
Y3RvcjxjaGFyPiByZXN1bHQ7Ci0gICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgIGJvb2wgb2sg
PSBtX3RyYW5zYWN0aW9uLT5zYWZlR2V0KHByaW1hcnlMZXZlbERCS2V5LCByZXN1bHQsIGZvdW5k
KTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIElOVEVSTkFMX1JFQURfRVJST1IoTG9hZEN1cnJl
bnRSb3cpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICghZm91bmQpIHsK
LSAgICAgICAgbV90cmFuc2FjdGlvbi0+cmVtb3ZlKG1faXRlcmF0b3ItPmtleSgpKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhVmVy
c2lvbjsKLSAgICBjb25zdCBjaGFyKiB0ID0gZGVjb2RlVmFySW50KHJlc3VsdC5iZWdpbigpLCBy
ZXN1bHQuZW5kKCksIG9iamVjdFN0b3JlRGF0YVZlcnNpb24pOwotICAgIGlmICghdCkgewotICAg
ICAgICBJTlRFUk5BTF9SRUFEX0VSUk9SKExvYWRDdXJyZW50Um93KTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChvYmplY3RTdG9yZURhdGFWZXJzaW9uICE9IGluZGV4
RGF0YVZlcnNpb24pIHsKLSAgICAgICAgbV90cmFuc2FjdGlvbi0+cmVtb3ZlKG1faXRlcmF0b3It
PmtleSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1jbGFzcyBJbmRleEN1cnNvckltcGwgZmluYWwgOiBwdWJsaWMgSURCQmFja2luZ1N0
b3JlQ3Vyc29yTGV2ZWxEQiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5kZXhD
dXJzb3JJbXBsPiBjcmVhdGUoaW50NjRfdCBjdXJzb3JJRCwgTGV2ZWxEQlRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbiwgY29uc3QgSURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQjo6Q3Vyc29yT3B0
aW9ucyYgY3Vyc29yT3B0aW9ucykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SW5kZXhDdXJzb3JJbXBsKGN1cnNvcklELCB0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucykpOwot
ICAgIH0KLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVDdXJzb3JMZXZl
bERCPiBjbG9uZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluZGV4Q3Vy
c29ySW1wbCh0aGlzKSk7Ci0gICAgfQotCi0gICAgLy8gSURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2
ZWxEQgotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9jdXJyZW50VmFsdWU7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wcmltYXJ5
S2V5OyB9Ci0gICAgdmlydHVhbCBjb25zdCBJREJSZWNvcmRJZGVudGlmaWVyJiByZWNvcmRJZGVu
dGlmaWVyKCkgY29uc3Qgb3ZlcnJpZGUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuICpt
X3JlY29yZElkZW50aWZpZXI7IH0KLSAgICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKSBv
dmVycmlkZTsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgVmVjdG9yPGNoYXI+IGVuY29kZUtl
eShjb25zdCBJREJLZXkgJmtleSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBJbmRleERhdGFLZXk6
OmVuY29kZShtX2N1cnNvck9wdGlvbnMuZGF0YWJhc2VJZCwgbV9jdXJzb3JPcHRpb25zLm9iamVj
dFN0b3JlSWQsIG1fY3Vyc29yT3B0aW9ucy5pbmRleElkLCBrZXkpOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBJbmRleEN1cnNvckltcGwoaW50NjRfdCBjdXJzb3JJRCwgTGV2ZWxEQlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQjo6Q3Vy
c29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKLSAgICAgICAgOiBJREJCYWNraW5nU3RvcmVDdXJz
b3JMZXZlbERCKGN1cnNvcklELCB0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucykKLSAgICB7Ci0g
ICAgfQotCi0gICAgSW5kZXhDdXJzb3JJbXBsKGNvbnN0IEluZGV4Q3Vyc29ySW1wbCogb3RoZXIp
Ci0gICAgICAgIDogSURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQihvdGhlcikKLSAgICAgICAg
LCBtX3ByaW1hcnlLZXkob3RoZXItPm1fcHJpbWFyeUtleSkKLSAgICAgICAgLCBtX2N1cnJlbnRW
YWx1ZShvdGhlci0+bV9jdXJyZW50VmFsdWUpCi0gICAgICAgICwgbV9wcmltYXJ5TGV2ZWxEQktl
eShvdGhlci0+bV9wcmltYXJ5TGV2ZWxEQktleSkKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRy
PElEQktleT4gbV9wcmltYXJ5S2V5OwotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fY3VycmVu
dFZhbHVlOwotICAgIFZlY3RvcjxjaGFyPiBtX3ByaW1hcnlMZXZlbERCS2V5OwotfTsKLQotYm9v
bCBJbmRleEN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKLXsKLSAgICBjb25zdCBjaGFyKiBr
ZXlQb3NpdGlvbiA9IG1faXRlcmF0b3ItPmtleSgpLmJlZ2luKCk7Ci0gICAgY29uc3QgY2hhciog
a2V5TGltaXQgPSBtX2l0ZXJhdG9yLT5rZXkoKS5lbmQoKTsKLQotICAgIEluZGV4RGF0YUtleSBp
bmRleERhdGFLZXk7Ci0gICAga2V5UG9zaXRpb24gPSBJbmRleERhdGFLZXk6OmRlY29kZShrZXlQ
b3NpdGlvbiwga2V5TGltaXQsICZpbmRleERhdGFLZXkpOwotCi0gICAgbV9jdXJyZW50S2V5ID0g
aW5kZXhEYXRhS2V5LnVzZXJLZXkoKTsKLQotICAgIGNvbnN0IGNoYXIqIHZhbHVlUG9zaXRpb24g
PSBtX2l0ZXJhdG9yLT52YWx1ZSgpLmJlZ2luKCk7Ci0gICAgY29uc3QgY2hhciogdmFsdWVMaW1p
dCA9IG1faXRlcmF0b3ItPnZhbHVlKCkuZW5kKCk7Ci0KLSAgICBpbnQ2NF90IGluZGV4RGF0YVZl
cnNpb247Ci0gICAgdmFsdWVQb3NpdGlvbiA9IGRlY29kZVZhckludCh2YWx1ZVBvc2l0aW9uLCB2
YWx1ZUxpbWl0LCBpbmRleERhdGFWZXJzaW9uKTsKLSAgICBpZiAoIXZhbHVlUG9zaXRpb24pIHsK
LSAgICAgICAgSU5URVJOQUxfUkVBRF9FUlJPUihMb2FkQ3VycmVudFJvdyk7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgdmFsdWVQb3NpdGlvbiA9IGRlY29kZUlEQktleSh2YWx1
ZVBvc2l0aW9uLCB2YWx1ZUxpbWl0LCBtX3ByaW1hcnlLZXkpOwotICAgIGlmICghdmFsdWVQb3Np
dGlvbikgewotICAgICAgICBJTlRFUk5BTF9SRUFEX0VSUk9SKExvYWRDdXJyZW50Um93KTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1fcHJpbWFyeUxldmVsREJLZXkgPSBP
YmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShpbmRleERhdGFLZXkuZGF0YWJhc2VJZCgpLCBpbmRl
eERhdGFLZXkub2JqZWN0U3RvcmVJZCgpLCAqbV9wcmltYXJ5S2V5KTsKLQotICAgIFZlY3Rvcjxj
aGFyPiByZXN1bHQ7Ci0gICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgIGJvb2wgb2sgPSBtX3Ry
YW5zYWN0aW9uLT5zYWZlR2V0KG1fcHJpbWFyeUxldmVsREJLZXksIHJlc3VsdCwgZm91bmQpOwot
ICAgIGlmICghb2spIHsKLSAgICAgICAgSU5URVJOQUxfUkVBRF9FUlJPUihMb2FkQ3VycmVudFJv
dyk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCFmb3VuZCkgewotICAg
ICAgICBtX3RyYW5zYWN0aW9uLT5yZW1vdmUobV9pdGVyYXRvci0+a2V5KCkpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaW50NjRfdCBvYmplY3RTdG9yZURhdGFWZXJzaW9u
OwotICAgIHZhbHVlUG9zaXRpb24gPSBkZWNvZGVWYXJJbnQocmVzdWx0LmJlZ2luKCksIHJlc3Vs
dC5lbmQoKSwgb2JqZWN0U3RvcmVEYXRhVmVyc2lvbik7Ci0gICAgaWYgKCF2YWx1ZVBvc2l0aW9u
KSB7Ci0gICAgICAgIElOVEVSTkFMX1JFQURfRVJST1IoTG9hZEN1cnJlbnRSb3cpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG9iamVjdFN0b3JlRGF0YVZlcnNpb24g
IT0gaW5kZXhEYXRhVmVyc2lvbikgewotICAgICAgICBtX3RyYW5zYWN0aW9uLT5yZW1vdmUobV9p
dGVyYXRvci0+a2V5KCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVmVj
dG9yPGNoYXI+IHZhbHVlOwotICAgIHZhbHVlLmFwcGVuZCh2YWx1ZVBvc2l0aW9uLCByZXN1bHQu
ZW5kKCkgLSB2YWx1ZVBvc2l0aW9uKTsKLSAgICBtX2N1cnJlbnRWYWx1ZSA9IFNoYXJlZEJ1ZmZl
cjo6YWRvcHRWZWN0b3IodmFsdWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9v
bCBvYmplY3RTdG9yZUN1cnNvck9wdGlvbnMoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktl
eVJhbmdlKiByYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBJREJC
YWNraW5nU3RvcmVDdXJzb3JMZXZlbERCOjpDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQot
ewotICAgIGN1cnNvck9wdGlvbnMuZGF0YWJhc2VJZCA9IGRhdGFiYXNlSWQ7Ci0gICAgY3Vyc29y
T3B0aW9ucy5vYmplY3RTdG9yZUlkID0gb2JqZWN0U3RvcmVJZDsKLQotICAgIGJvb2wgbG93ZXJC
b3VuZCA9IHJhbmdlICYmIHJhbmdlLT5sb3dlcigpOwotICAgIGJvb2wgdXBwZXJCb3VuZCA9IHJh
bmdlICYmIHJhbmdlLT51cHBlcigpOwotICAgIGN1cnNvck9wdGlvbnMuZm9yd2FyZCA9IChkaXJl
Y3Rpb24gPT0gSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb246Ok5leHROb0R1cGxpY2F0ZSB8fCBk
aXJlY3Rpb24gPT0gSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb246Ok5leHQpOwotICAgIGN1cnNv
ck9wdGlvbnMudW5pcXVlID0gKGRpcmVjdGlvbiA9PSBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlv
bjo6TmV4dE5vRHVwbGljYXRlIHx8IGRpcmVjdGlvbiA9PSBJbmRleGVkREI6OkN1cnNvckRpcmVj
dGlvbjo6UHJldk5vRHVwbGljYXRlKTsKLQotICAgIGlmICghbG93ZXJCb3VuZCkgewotICAgICAg
ICBjdXJzb3JPcHRpb25zLmxvd0tleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIG1pbklEQktleSgpKTsKLSAgICAgICAgY3Vyc29yT3B0aW9u
cy5sb3dPcGVuID0gdHJ1ZTsgLy8gTm90IGluY2x1ZGVkLgotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGN1cnNvck9wdGlvbnMubG93S2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgKnJhbmdlLT5sb3dlcigpKTsKLSAgICAgICAgY3Vyc29yT3B0
aW9ucy5sb3dPcGVuID0gcmFuZ2UtPmxvd2VyT3BlbigpOwotICAgIH0KLQotICAgIGlmICghdXBw
ZXJCb3VuZCkgewotICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hLZXkgPSBPYmplY3RTdG9yZURh
dGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtYXhJREJLZXkoKSk7Ci0K
LSAgICAgICAgaWYgKGN1cnNvck9wdGlvbnMuZm9yd2FyZCkKLSAgICAgICAgICAgIGN1cnNvck9w
dGlvbnMuaGlnaE9wZW4gPSB0cnVlOyAvLyBOb3QgaW5jbHVkZWQuCi0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgLy8gV2UgbmVlZCBhIGtleSB0aGF0IGV4aXN0cy4KLSAgICAgICAgICAgIGlm
ICghZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW5PckVxdWFsKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRp
b25zLmhpZ2hLZXksIGN1cnNvck9wdGlvbnMuaGlnaEtleSkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoS2V5ID0g
T2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgKnJh
bmdlLT51cHBlcigpKTsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IHJhbmdlLT51
cHBlck9wZW4oKTsKLQotICAgICAgICBpZiAoIWN1cnNvck9wdGlvbnMuZm9yd2FyZCkgewotICAg
ICAgICAgICAgLy8gRm9yIHJldmVyc2UgY3Vyc29ycywgd2UgbmVlZCBhIGtleSB0aGF0IGV4aXN0
cy4KLSAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBmb3VuZEhpZ2hLZXk7Ci0gICAgICAgICAgICBp
ZiAoIWZpbmRHcmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbCh0cmFuc2FjdGlvbiwgY3Vyc29yT3B0
aW9ucy5oaWdoS2V5LCBmb3VuZEhpZ2hLZXkpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgICAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBrZXkgc2hvdWxkIG5vdCBiZSBpbmNs
dWRlZCwgYnV0IHdlIGVuZCB1cCB3aXRoIGEgc21hbGxlciBrZXksIHdlIHNob3VsZCBpbmNsdWRl
IHRoYXQuCi0gICAgICAgICAgICBpZiAoY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiAmJiBJREJCYWNr
aW5nU3RvcmVMZXZlbERCOjpjb21wYXJlSW5kZXhLZXlzKGZvdW5kSGlnaEtleSwgY3Vyc29yT3B0
aW9ucy5oaWdoS2V5KSA8IDApCi0gICAgICAgICAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3Bl
biA9IGZhbHNlOwotCi0gICAgICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hLZXkgPSBmb3VuZEhp
Z2hLZXk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGlj
IGJvb2wgaW5kZXhDdXJzb3JPcHRpb25zKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24s
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBJREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCOjpDdXJzb3JPcHRpb25zJiBj
dXJzb3JPcHRpb25zKQotewotICAgIEFTU0VSVCh0cmFuc2FjdGlvbik7Ci0gICAgaWYgKCFLZXlQ
cmVmaXg6OnZhbGlkSWRzKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjdXJzb3JPcHRpb25zLmRhdGFiYXNlSWQgPSBkYXRh
YmFzZUlkOwotICAgIGN1cnNvck9wdGlvbnMub2JqZWN0U3RvcmVJZCA9IG9iamVjdFN0b3JlSWQ7
Ci0gICAgY3Vyc29yT3B0aW9ucy5pbmRleElkID0gaW5kZXhJZDsKLQotICAgIGJvb2wgbG93ZXJC
b3VuZCA9IHJhbmdlICYmIHJhbmdlLT5sb3dlcigpOwotICAgIGJvb2wgdXBwZXJCb3VuZCA9IHJh
bmdlICYmIHJhbmdlLT51cHBlcigpOwotICAgIGN1cnNvck9wdGlvbnMuZm9yd2FyZCA9IChkaXJl
Y3Rpb24gPT0gSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb246Ok5leHROb0R1cGxpY2F0ZSB8fCBk
aXJlY3Rpb24gPT0gSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb246Ok5leHQpOwotICAgIGN1cnNv
ck9wdGlvbnMudW5pcXVlID0gKGRpcmVjdGlvbiA9PSBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlv
bjo6TmV4dE5vRHVwbGljYXRlIHx8IGRpcmVjdGlvbiA9PSBJbmRleGVkREI6OkN1cnNvckRpcmVj
dGlvbjo6UHJldk5vRHVwbGljYXRlKTsKLQotICAgIGlmICghbG93ZXJCb3VuZCkgewotICAgICAg
ICBjdXJzb3JPcHRpb25zLmxvd0tleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlTWluS2V5KGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpOwotICAgICAgICBjdXJzb3JPcHRpb25zLmxv
d09wZW4gPSBmYWxzZTsgLy8gSW5jbHVkZWQuCi0gICAgfSBlbHNlIHsKLSAgICAgICAgY3Vyc29y
T3B0aW9ucy5sb3dLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCBpbmRleElkLCAqcmFuZ2UtPmxvd2VyKCkpOwotICAgICAgICBjdXJzb3JPcHRpb25z
Lmxvd09wZW4gPSByYW5nZS0+bG93ZXJPcGVuKCk7Ci0gICAgfQotCi0gICAgaWYgKCF1cHBlckJv
dW5kKSB7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaEtleSA9IEluZGV4RGF0YUtleTo6ZW5j
b2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpOwotICAgICAgICBj
dXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gZmFsc2U7IC8vIEluY2x1ZGVkLgotCi0gICAgICAgIGlm
ICghY3Vyc29yT3B0aW9ucy5mb3J3YXJkKSB7IC8vIFdlIG5lZWQgYSBrZXkgdGhhdCBleGlzdHMu
Ci0gICAgICAgICAgICBpZiAoIWZpbmRHcmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbCh0cmFuc2Fj
dGlvbiwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5LCBjdXJzb3JPcHRpb25zLmhpZ2hLZXkpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGN1cnNvck9wdGlvbnMuaGln
aE9wZW4gPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGN1cnNvck9w
dGlvbnMuaGlnaEtleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIGluZGV4SWQsICpyYW5nZS0+dXBwZXIoKSk7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMu
aGlnaE9wZW4gPSByYW5nZS0+dXBwZXJPcGVuKCk7Ci0KLSAgICAgICAgVmVjdG9yPGNoYXI+IGZv
dW5kSGlnaEtleTsKLSAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwo
dHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMuaGlnaEtleSwgZm91bmRIaWdoS2V5KSkgLy8gU2Vl
ayB0byB0aGUgKmxhc3QqIGtleSBpbiB0aGUgc2V0IG9mIG5vbi11bmlxdWUga2V5cy4KLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGtleSBzaG91
bGQgbm90IGJlIGluY2x1ZGVkLCBidXQgd2UgZW5kIHVwIHdpdGggYSBzbWFsbGVyIGtleSwgd2Ug
c2hvdWxkIGluY2x1ZGUgdGhhdC4KLSAgICAgICAgaWYgKGN1cnNvck9wdGlvbnMuaGlnaE9wZW4g
JiYgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6Y29tcGFyZUluZGV4S2V5cyhmb3VuZEhpZ2hLZXks
IGN1cnNvck9wdGlvbnMuaGlnaEtleSkgPCAwKQotICAgICAgICAgICAgY3Vyc29yT3B0aW9ucy5o
aWdoT3BlbiA9IGZhbHNlOwotCi0gICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaEtleSA9IGZvdW5k
SGlnaEtleTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLVBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQj4gSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6b3Blbk9iamVj
dFN0b3JlQ3Vyc29yKGludDY0X3QgY3Vyc29ySUQsIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
TGV2ZWxEQiYgdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJRCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0
aW9uIGRpcmVjdGlvbikKLQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCQmFja2luZ1N0b3Jl
TGV2ZWxEQjo6b3Blbk9iamVjdFN0b3JlQ3Vyc29yIik7Ci0gICAgTGV2ZWxEQlRyYW5zYWN0aW9u
KiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI6
OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwotICAgIElEQkJhY2tpbmdTdG9y
ZUN1cnNvckxldmVsREI6OkN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKLSAgICBpZiAoIW9i
amVjdFN0b3JlQ3Vyc29yT3B0aW9ucyhsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSUQsIG9i
amVjdFN0b3JlSWQsIHJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvck9wdGlvbnMpKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICBSZWZQdHI8T2JqZWN0U3RvcmVDdXJzb3JJbXBsPiBjdXJzb3IgPSBPYmpl
Y3RTdG9yZUN1cnNvckltcGw6OmNyZWF0ZShjdXJzb3JJRCwgbGV2ZWxEQlRyYW5zYWN0aW9uLCBj
dXJzb3JPcHRpb25zKTsKLSAgICBpZiAoIWN1cnNvci0+Zmlyc3RTZWVrKCkpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgcmV0dXJuIGN1cnNvci5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQj4gSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6b3Bl
bk9iamVjdFN0b3JlS2V5Q3Vyc29yKGludDY0X3QgY3Vyc29ySUQsIElEQkJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uTGV2ZWxEQiYgdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJRCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIEluZGV4ZWREQjo6Q3Vy
c29yRGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkJhY2tp
bmdTdG9yZUxldmVsREI6Om9wZW5PYmplY3RTdG9yZUtleUN1cnNvciIpOwotICAgIExldmVsREJU
cmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b25MZXZlbERCOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKLSAgICBJREJC
YWNraW5nU3RvcmVDdXJzb3JMZXZlbERCOjpDdXJzb3JPcHRpb25zIGN1cnNvck9wdGlvbnM7Ci0g
ICAgaWYgKCFvYmplY3RTdG9yZUN1cnNvck9wdGlvbnMobGV2ZWxEQlRyYW5zYWN0aW9uLCBkYXRh
YmFzZUlELCBvYmplY3RTdG9yZUlkLCByYW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JPcHRpb25zKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVmUHRyPE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbD4g
Y3Vyc29yID0gT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpjcmVhdGUoY3Vyc29ySUQsIGxldmVs
REJUcmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucyk7Ci0gICAgaWYgKCFjdXJzb3ItPmZpcnN0U2Vl
aygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBjdXJzb3IucmVsZWFzZSgpOwot
fQotCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREI+IElEQkJhY2tpbmdT
dG9yZUxldmVsREI6Om9wZW5JbmRleEtleUN1cnNvcihpbnQ2NF90IGN1cnNvcklELCBJREJCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREImIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNl
SUQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlS
YW5nZSogcmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAg
ICBMT0coU3RvcmFnZUFQSSwgIklEQkJhY2tpbmdTdG9yZUxldmVsREI6Om9wZW5JbmRleEtleUN1
cnNvciIpOwotICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gSURC
QmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRy
YW5zYWN0aW9uKTsKLSAgICBJREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCOjpDdXJzb3JPcHRp
b25zIGN1cnNvck9wdGlvbnM7Ci0gICAgaWYgKCFpbmRleEN1cnNvck9wdGlvbnMobGV2ZWxEQlRy
YW5zYWN0aW9uLCBkYXRhYmFzZUlELCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCByYW5nZSwgZGly
ZWN0aW9uLCBjdXJzb3JPcHRpb25zKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVmUHRyPElu
ZGV4S2V5Q3Vyc29ySW1wbD4gY3Vyc29yID0gSW5kZXhLZXlDdXJzb3JJbXBsOjpjcmVhdGUoY3Vy
c29ySUQsIGxldmVsREJUcmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucyk7Ci0gICAgaWYgKCFjdXJz
b3ItPmZpcnN0U2VlaygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBjdXJzb3Iu
cmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREI+
IElEQkJhY2tpbmdTdG9yZUxldmVsREI6Om9wZW5JbmRleEN1cnNvcihpbnQ2NF90IGN1cnNvcklE
LCBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREImIHRyYW5zYWN0aW9uLCBpbnQ2NF90
IGRhdGFiYXNlSUQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25z
dCBJREJLZXlSYW5nZSogcmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlv
bikKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkJhY2tpbmdTdG9yZUxldmVsREI6Om9wZW5J
bmRleEN1cnNvciIpOwotICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9u
ID0gSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCOjpsZXZlbERCVHJhbnNhY3Rpb25G
cm9tKHRyYW5zYWN0aW9uKTsKLSAgICBJREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCOjpDdXJz
b3JPcHRpb25zIGN1cnNvck9wdGlvbnM7Ci0gICAgaWYgKCFpbmRleEN1cnNvck9wdGlvbnMobGV2
ZWxEQlRyYW5zYWN0aW9uLCBkYXRhYmFzZUlELCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCByYW5n
ZSwgZGlyZWN0aW9uLCBjdXJzb3JPcHRpb25zKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVm
UHRyPEluZGV4Q3Vyc29ySW1wbD4gY3Vyc29yID0gSW5kZXhDdXJzb3JJbXBsOjpjcmVhdGUoY3Vy
c29ySUQsIGxldmVsREJUcmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucyk7Ci0gICAgaWYgKCFjdXJz
b3ItPmZpcnN0U2VlaygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBjdXJzb3Iu
cmVsZWFzZSgpOwotfQotCi12b2lkIElEQkJhY2tpbmdTdG9yZUxldmVsREI6OmVzdGFibGlzaEJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCkKLXsKLSAgICBBU1NF
UlQoIW1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSUQpKTsK
LSAgICBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9ucy5zZXQodHJhbnNhY3Rpb25JRCwgSURCQmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCOjpjcmVhdGUodHJhbnNhY3Rpb25JRCwgdGhpcykp
OwotfQotCi12b2lkIElEQkJhY2tpbmdTdG9yZUxldmVsREI6OnJlbW92ZUJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uKElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQiogdHJhbnNhY3Rpb24p
Ci17Ci0gICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5z
YWN0aW9uLT50cmFuc2FjdGlvbklEKCkpKTsKLSAgICBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
cy5yZW1vdmUodHJhbnNhY3Rpb24tPnRyYW5zYWN0aW9uSUQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0Uo
TEVWRUxEQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
dmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGUyMGVkYzkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCQmFja2luZ1N0b3JlTGV2
ZWxEQl9oCi0jZGVmaW5lIElEQkJhY2tpbmdTdG9yZUxldmVsREJfaAotCi0jaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQotCi0jaW5jbHVkZSAiSURCQmFja2luZ1N0
b3JlQ3Vyc29yTGV2ZWxEQi5oIgotI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
TGV2ZWxEQi5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlTWV0YWRhdGEuaCIKLSNpbmNsdWRlICJJ
REJLZXkuaCIKLSNpbmNsdWRlICJJREJSZWNvcmRJZGVudGlmaWVyLmgiCi0jaW5jbHVkZSAiSW5k
ZXhlZERCLmgiCi0jaW5jbHVkZSAiTGV2ZWxEQkl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiTGV2ZWxE
QlRyYW5zYWN0aW9uLmgiCi0jaW5jbHVkZSA8ZnVuY3Rpb25hbD4KLSNpbmNsdWRlIDxtZW1vcnk+
Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIExldmVsREJDb21wYXJhdG9yOwotY2xhc3Mg
TGV2ZWxEQkRhdGFiYXNlOwotY2xhc3MgTGV2ZWxEQlRyYW5zYWN0aW9uOwotY2xhc3MgSURCSW5k
ZXhXcml0ZXJMZXZlbERCOwotY2xhc3MgSURCS2V5OwotY2xhc3MgSURCS2V5UmFuZ2U7Ci1jbGFz
cyBJREJUcmFuc2FjdGlvbkJhY2tlbmQ7Ci1jbGFzcyBTZWN1cml0eU9yaWdpbjsKLWNsYXNzIFNo
YXJlZEJ1ZmZlcjsKLQotY2xhc3MgTGV2ZWxEQkZhY3RvcnkgewotcHVibGljOgotICAgIHZpcnR1
YWwgfkxldmVsREJGYWN0b3J5KCkgeyB9Ci0gICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8TGV2
ZWxEQkRhdGFiYXNlPiBvcGVuTGV2ZWxEQihjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBM
ZXZlbERCQ29tcGFyYXRvciopID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZGVzdHJveUxldmVsREIo
Y29uc3QgU3RyaW5nJiBmaWxlTmFtZSkgPSAwOwotfTsKLQotY2xhc3MgSURCQmFja2luZ1N0b3Jl
TGV2ZWxEQiA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkJhY2tpbmdTdG9yZUxldmVsREI+IHsKLXB1
YmxpYzoKLSAgICBjbGFzcyBUcmFuc2FjdGlvbjsKLQotICAgIHZpcnR1YWwgfklEQkJhY2tpbmdT
dG9yZUxldmVsREIoKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVMZXZl
bERCPiBvcGVuKGNvbnN0IFNlY3VyaXR5T3JpZ2luJiwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZSwg
Y29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllcik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlTGV2ZWxEQj4gb3Blbihjb25zdCBTZWN1cml0eU9yaWdpbiYsIGNvbnN0IFN0
cmluZyYgcGF0aEJhc2UsIGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIsIExldmVsREJGYWN0
b3J5Kik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlTGV2ZWxEQj4gb3Bl
bkluTWVtb3J5KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcik7Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlTGV2ZWxEQj4gb3BlbkluTWVtb3J5KGNvbnN0IFN0cmluZyYgaWRl
bnRpZmllciwgTGV2ZWxEQkZhY3RvcnkqKTsKLSAgICBXZWFrUHRyPElEQkJhY2tpbmdTdG9yZUxl
dmVsREI+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtGYWN0b3J5LmNyZWF0ZVdlYWtQ
dHIoKTsgfQotCi0gICAgdm9pZCBlc3RhYmxpc2hCYWNraW5nU3RvcmVUcmFuc2FjdGlvbihpbnQ2
NF90IHRyYW5zYWN0aW9uSUQpOwotCi0gICAgVmVjdG9yPFN0cmluZz4gZ2V0RGF0YWJhc2VOYW1l
cygpOwotCi0gICAgLy8gTmV3LXN0eWxlIGFzeW5jaHJvbm91cyBjYWxsYmFja3MKLSAgICB2b2lk
IGdldE9yRXN0YWJsaXNoSURCRGF0YWJhc2VNZXRhZGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIHN0
ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYsIGJvb2wgc3VjY2Vz
cyk+IGNhbGxiYWNrRnVuY3Rpb24pOwotICAgIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3Ry
aW5nJiBuYW1lLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wgc3VjY2Vzcyk+IHN1Y2Nlc3NDYWxs
YmFjayk7Ci0KLSAgICAvLyBPbGQtc3R5bGUgc3luY2hyb25vdXMgY2FsbGJhY2tzCi0gICAgYm9v
bCB1cGRhdGVJREJEYXRhYmFzZVZlcnNpb24oSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZl
bERCJiwgaW50NjRfdCByb3dJZCwgdWludDY0X3QgdmVyc2lvbik7Ci0KLSAgICBib29sIGNyZWF0
ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQiYsIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQpOwotICAgIGJvb2wgZGVsZXRlT2Jq
ZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCJiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLQotICAg
IGJvb2wgZ2V0UmVjb3JkKElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQiYsIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBWZWN0
b3I8Y2hhcj4mIHJlY29yZCkgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIGJvb2wgcHV0UmVjb3Jk
KElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQiYsIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBQYXNzUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gdmFsdWUsIElEQlJlY29yZElkZW50aWZpZXIqKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0g
ICAgYm9vbCBjbGVhck9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxE
QiYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBXQVJOX1VOVVNF
RF9SRVRVUk47Ci0gICAgYm9vbCBkZWxldGVSZWNvcmQoSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b25MZXZlbERCJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQlJlY29yZElkZW50aWZpZXImKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgYm9vbCBn
ZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2
ZWxEQiYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
JiBjdXJyZW50TnVtYmVyKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgYm9vbCBtYXliZVVwZGF0
ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZl
bERCJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
bmV3U3RhdGUsIGJvb2wgY2hlY2tDdXJyZW50KSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgYm9v
bCBrZXlFeGlzdHNJbk9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxE
QiYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJL
ZXkmLCBSZWZQdHI8SURCUmVjb3JkSWRlbnRpZmllcj4mIGZvdW5kSURCUmVjb3JkSWRlbnRpZmll
cikgV0FSTl9VTlVTRURfUkVUVVJOOwotCi0gICAgYm9vbCBjcmVhdGVJbmRleChJREJCYWNraW5n
U3RvcmVUcmFuc2FjdGlvbkxldmVsREImLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElE
QktleVBhdGgmLCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSkgV0FSTl9VTlVTRURf
UkVUVVJOOwotICAgIGJvb2wgZGVsZXRlSW5kZXgoSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25M
ZXZlbERCJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCkgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIGJvb2wgcHV0SW5kZXhEYXRhRm9y
UmVjb3JkKElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQiYsIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktl
eSYsIGNvbnN0IElEQlJlY29yZElkZW50aWZpZXIqKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAg
Ym9vbCBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZl
bERCJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5JiwgUmVmUHRyPElEQktleT4mIHByaW1hcnlLZXkpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKLSAgICBib29sIGtleUV4aXN0c0luSW5kZXgoSURCQmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb25MZXZlbERCJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRyPElE
QktleT4mIGZvdW5kUHJpbWFyeUtleSwgYm9vbCYgZXhpc3RzKSBXQVJOX1VOVVNFRF9SRVRVUk47
Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQj4g
b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKGludDY0X3QgY3Vyc29ySUQsIElEQkJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uTGV2ZWxEQiYsIGludDY0X3QgZGF0YWJhc2VJRCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uKTsK
LSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQj4gb3Bl
bk9iamVjdFN0b3JlQ3Vyc29yKGludDY0X3QgY3Vyc29ySUQsIElEQkJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uTGV2ZWxEQiYsIGludDY0X3QgZGF0YWJhc2VJRCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJLZXlSYW5nZSosIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uKTsKLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQj4gb3BlbkluZGV4
S2V5Q3Vyc29yKGludDY0X3QgY3Vyc29ySUQsIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2
ZWxEQiYsIGludDY0X3QgZGF0YWJhc2VJRCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24p
OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCPiBv
cGVuSW5kZXhDdXJzb3IoaW50NjRfdCBjdXJzb3JJRCwgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b25MZXZlbERCJiwgaW50NjRfdCBkYXRhYmFzZUlELCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJbmRleGVkREI6OkN1cnNvckRpcmVj
dGlvbik7Ci0KLSAgICBib29sIG1ha2VJbmRleFdyaXRlcnMoaW50NjRfdCB0cmFuc2FjdGlvbklE
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBJREJL
ZXkmIHByaW1hcnlLZXksIGJvb2wga2V5V2FzR2VuZXJhdGVkLCBjb25zdCBWZWN0b3I8aW50NjRf
dD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8VmVjdG9yPFJlZlB0cjxJREJLZXk+Pj4mLCBWZWN0
b3I8UmVmUHRyPElEQkluZGV4V3JpdGVyTGV2ZWxEQj4+JiBpbmRleFdyaXRlcnMsIFN0cmluZyog
ZXJyb3JNZXNzYWdlLCBib29sJiBjb21wbGV0ZWQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLQotICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdlbmVyYXRlS2V5KElEQlRyYW5zYWN0aW9uQmFj
a2VuZCYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAgICBi
b29sIHVwZGF0ZUtleUdlbmVyYXRvcihJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgYm9vbCBjaGVj
a0N1cnJlbnQpOwotCi0gICAgTGV2ZWxEQkRhdGFiYXNlKiBsZXZlbERCRGF0YWJhc2UoKSB7IHJl
dHVybiBtX2RiLmdldCgpOyB9Ci0KLSAgICBzdGF0aWMgaW50IGNvbXBhcmVJbmRleEtleXMoY29u
c3QgTGV2ZWxEQlNsaWNlJiwgY29uc3QgTGV2ZWxEQlNsaWNlJik7Ci0KLSAgICB2b2lkIHJlbW92
ZUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxE
QiopOwotCi1wcml2YXRlOgotICAgIElEQkJhY2tpbmdTdG9yZUxldmVsREIoY29uc3QgU3RyaW5n
JiBpZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8TGV2ZWxEQkRhdGFiYXNlPiwgc3RkOjp1bmlx
dWVfcHRyPExldmVsREJDb21wYXJhdG9yPik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlTGV2ZWxEQj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgc3RkOjp1
bmlxdWVfcHRyPExldmVsREJEYXRhYmFzZT4sIHN0ZDo6dW5pcXVlX3B0cjxMZXZlbERCQ29tcGFy
YXRvcj4pOwotCi0gICAgLy8gRklYTUU6IExldmVsREIgbmVlZHMgdG8gc3VwcG9ydCB1aW50NjRf
dCBhcyB0aGUgdmVyc2lvbiB0eXBlLgotICAgIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0
YShJREJEYXRhYmFzZU1ldGFkYXRhJik7Ci0gICAgYm9vbCBnZXRJREJEYXRhYmFzZU1ldGFEYXRh
KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCRGF0YWJhc2VNZXRhZGF0YSosIGJvb2wmIHN1Y2Nlc3Mp
IFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICBib29sIGdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRh
dGFiYXNlSWQsIElEQkRhdGFiYXNlTWV0YWRhdGE6Ok9iamVjdFN0b3JlTWFwKiBvYmplY3RTdG9y
ZXMpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLQotICAgIGJvb2wgZmluZEtleUluSW5kZXgoSURCQmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgVmVjdG9yPGNo
YXI+JiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5LCBib29sJiBmb3VuZCk7Ci0gICAgYm9vbCBnZXRJ
bmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBJREJPYmpl
Y3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcCopIFdBUk5fVU5VU0VEX1JFVFVSTjsKLQotICAgIFN0
cmluZyBtX2lkZW50aWZpZXI7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TGV2ZWxEQkRhdGFiYXNl
PiBtX2RiOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxMZXZlbERCQ29tcGFyYXRvcj4gbV9jb21wYXJh
dG9yOwotICAgIFdlYWtQdHJGYWN0b3J5PElEQkJhY2tpbmdTdG9yZUxldmVsREI+IG1fd2Vha0Zh
Y3Rvcnk7Ci0KLSAgICBIYXNoTWFwPGludDY0X3QsIFJlZlB0cjxJREJCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbkxldmVsREI+PiBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9uczsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAm
JiBVU0UoTEVWRUxEQikKLQotI2VuZGlmIC8vIElEQkJhY2tpbmdTdG9yZUxldmVsREJfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWRiYjRjLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb25MZXZlbERCLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb25MZXZlbERCLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExF
VkVMREIpCi0KLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmVMZXZlbERCLmgiCi0jaW5jbHVkZSAi
TG9nZ2luZy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1JREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI6OklEQkJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uTGV2ZWxEQihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIElEQkJhY2tpbmdT
dG9yZUxldmVsREIqIGJhY2tpbmdTdG9yZSkKLSAgICA6IG1fdHJhbnNhY3Rpb25JRCh0cmFuc2Fj
dGlvbklEKQotICAgICwgbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQotewotfQotCi1JREJC
YWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI6On5JREJCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bkxldmVsREIoKQotewotICAgIGlmIChtX2JhY2tpbmdTdG9yZSkKLSAgICAgICAgbV9iYWNraW5n
U3RvcmUtPnJlbW92ZUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKHRoaXMpOwotfQotCi12b2lkIElE
QkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQjo6YmVnaW4oKQotewotICAgIExPRyhTdG9y
YWdlQVBJLCAiSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCOjpiZWdpbiIpOwotICAg
IEFTU0VSVCghbV90cmFuc2FjdGlvbik7Ci0gICAgbV90cmFuc2FjdGlvbiA9IExldmVsREJUcmFu
c2FjdGlvbjo6Y3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8SURCQmFja2luZ1N0b3JlTGV2ZWxEQio+
KG1fYmFja2luZ1N0b3JlKS0+bGV2ZWxEQkRhdGFiYXNlKCkpOwotfQotCi1ib29sIElEQkJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQjo6Y29tbWl0KCkKLXsKLSAgICBMT0coU3RvcmFnZUFQ
SSwgIklEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQjo6Y29tbWl0Iik7Ci0gICAgQVNT
RVJUKG1fdHJhbnNhY3Rpb24pOwotICAgIGJvb2wgcmVzdWx0ID0gbV90cmFuc2FjdGlvbi0+Y29t
bWl0KCk7Ci0gICAgbV90cmFuc2FjdGlvbi5jbGVhcigpOwotICAgIGlmICghcmVzdWx0KQotICAg
ICAgICBMT0dfRVJST1IoIkluZGV4ZWREQiBUcmFuc2FjdGlvbkNvbW1pdCBFcnJvciIpOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZl
bERCOjpyb2xsYmFjaygpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJCYWNraW5nU3RvcmVU
cmFuc2FjdGlvbkxldmVsREI6OnJvbGxiYWNrIik7Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24p
OwotICAgIG1fdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7Ci0gICAgbV90cmFuc2FjdGlvbi5jbGVh
cigpOwotfQotCi12b2lkIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQjo6cmVzZXRU
cmFuc2FjdGlvbigpCi17Ci0gICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLSAgICBtX2JhY2tp
bmdTdG9yZS0+cmVtb3ZlQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24odGhpcyk7Ci0gICAgbV9iYWNr
aW5nU3RvcmUgPSAwOwotICAgIG1fdHJhbnNhY3Rpb24gPSAwOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExF
VkVMREIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZl
bGRiL0lEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQi5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVs
REIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdmN2JjNC4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uTGV2ZWxEQi5oCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCX2gKLSNk
ZWZpbmUgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCX2gKLQotI2luY2x1ZGUgIkxl
dmVsREJUcmFuc2FjdGlvbi5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0jaWYg
VVNFKExFVkVMREIpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCQmFja2luZ1N0
b3JlTGV2ZWxEQjsKLQotY2xhc3MgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCIDog
cHVibGljIFJlZkNvdW50ZWQ8SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCPiB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25M
ZXZlbERCPiBjcmVhdGUoaW50NjRfdCB0cmFuc2FjdGlvbklELCBJREJCYWNraW5nU3RvcmVMZXZl
bERCKiBiYWNraW5nU3RvcmUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElE
QkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQih0cmFuc2FjdGlvbklELCBiYWNraW5nU3Rv
cmUpKTsKLSAgICB9Ci0KLSAgICB+SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCKCk7
Ci0KLSAgICB2b2lkIGJlZ2luKCk7Ci0gICAgYm9vbCBjb21taXQoKTsKLSAgICB2b2lkIHJvbGxi
YWNrKCk7Ci0gICAgdm9pZCByZXNldFRyYW5zYWN0aW9uKCk7Ci0KLSAgICBzdGF0aWMgTGV2ZWxE
QlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKElEQkJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uTGV2ZWxEQiYgdHJhbnNhY3Rpb24pCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCJj4odHJhbnNhY3Rpb24pLm1f
dHJhbnNhY3Rpb24uZ2V0KCk7Ci0gICAgfQotCi0gICAgaW50NjRfdCB0cmFuc2FjdGlvbklEKCkg
eyByZXR1cm4gbV90cmFuc2FjdGlvbklEOyB9Ci0KLXByaXZhdGU6Ci0gICAgSURCQmFja2luZ1N0
b3JlVHJhbnNhY3Rpb25MZXZlbERCKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgSURCQmFja2luZ1N0
b3JlTGV2ZWxEQiopOwotCi0gICAgaW50NjRfdCBtX3RyYW5zYWN0aW9uSUQ7Ci0gICAgSURCQmFj
a2luZ1N0b3JlTGV2ZWxEQiogbV9iYWNraW5nU3RvcmU7Ci0gICAgUmVmUHRyPExldmVsREJUcmFu
c2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIFVTRShMRVZFTERCKQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQotI2VuZGlmIC8vIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQl9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlC
YWNrZW5kTGV2ZWxEQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZl
bGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDY3OGVjNzIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvbGV2ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJGYWN0b3J5QmFja2Vu
ZExldmVsREIuaCIKLQotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKLSNpbmNsdWRlICJJREJC
YWNraW5nU3RvcmVMZXZlbERCLmgiCi0jaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZC5oIgotI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0
aW9uLmgiCi0jaW5jbHVkZSAiSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREIuaCIKLSNpbmNsdWRl
ICJJREJUcmFuc2FjdGlvbkJhY2tlbmQuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2lu
LmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgTT4KLXN0
YXRpYyB2b2lkIGNsZWFuV2Vha01hcChIYXNoTWFwPEssIFdlYWtQdHI8TT4gPiYgbWFwKQotewot
ICAgIEhhc2hNYXA8SywgV2Vha1B0cjxNPiA+IG90aGVyOwotICAgIG90aGVyLnN3YXAobWFwKTsK
LQotICAgIHR5cGVuYW1lIEhhc2hNYXA8SywgV2Vha1B0cjxNPiA+Ojpjb25zdF9pdGVyYXRvciBp
dGVyID0gb3RoZXIuYmVnaW4oKTsKLSAgICB3aGlsZSAoaXRlciAhPSBvdGhlci5lbmQoKSkgewot
ICAgICAgICBpZiAoaXRlci0+dmFsdWUuZ2V0KCkpCi0gICAgICAgICAgICBtYXAuc2V0KGl0ZXIt
PmtleSwgaXRlci0+dmFsdWUpOwotICAgICAgICArK2l0ZXI7Ci0gICAgfQotfQotCi1zdGF0aWMg
U3RyaW5nIGNvbXB1dGVGaWxlSWRlbnRpZmllcihjb25zdCBTZWN1cml0eU9yaWdpbiYgc2VjdXJp
dHlPcmlnaW4pCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgbGV2ZWxEQkZpbGVTdWZmaXhbXSA9
ICJAMSI7Ci0gICAgcmV0dXJuIHNlY3VyaXR5T3JpZ2luLmRhdGFiYXNlSWRlbnRpZmllcigpICsg
bGV2ZWxEQkZpbGVTdWZmaXg7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgY29tcHV0ZVVuaXF1ZUlkZW50
aWZpZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTZWN1cml0eU9yaWdpbiYgc2VjdXJpdHlP
cmlnaW4pCi17Ci0gICAgcmV0dXJuIGNvbXB1dGVGaWxlSWRlbnRpZmllcihzZWN1cml0eU9yaWdp
bikgKyBuYW1lOwotfQotCi1JREJGYWN0b3J5QmFja2VuZExldmVsREI6OklEQkZhY3RvcnlCYWNr
ZW5kTGV2ZWxEQihjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5KQotICAgIDogbV9kYXRh
YmFzZURpcmVjdG9yeShkYXRhYmFzZURpcmVjdG9yeSkKLXsKLX0KLQotSURCRmFjdG9yeUJhY2tl
bmRMZXZlbERCOjp+SURCRmFjdG9yeUJhY2tlbmRMZXZlbERCKCkKLXsKLX0KLQotdm9pZCBJREJG
YWN0b3J5QmFja2VuZExldmVsREI6OnJlbW92ZUlEQkRhdGFiYXNlQmFja2VuZChjb25zdCBTdHJp
bmcmIHVuaXF1ZUlkZW50aWZpZXIpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VCYWNrZW5kTWFw
LmNvbnRhaW5zKHVuaXF1ZUlkZW50aWZpZXIpKTsKLSAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5y
ZW1vdmUodW5pcXVlSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRMZXZl
bERCOjpnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBvcGVuaW5nT3JpZ2luLCBjb25zdCBTZWN1cml0eU9yaWdp
biYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3Rvcnkp
Ci17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJGYWN0b3J5QmFja2VuZExldmVsREI6OmdldERh
dGFiYXNlTmFtZXMiKTsKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlTGV2ZWxEQj4gYmFja2lu
Z1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShvcGVuaW5nT3JpZ2luLCBkYXRhRGlyZWN0b3J5KTsK
LSAgICBpZiAoIWJhY2tpbmdTdG9yZSkgewotICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURC
RGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3Is
ICJJbnRlcm5hbCBlcnJvciBvcGVuaW5nIGJhY2tpbmcgc3RvcmUgZm9yIGluZGV4ZWREQi53ZWJr
aXRHZXREYXRhYmFzZU5hbWVzLiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJl
ZlB0cjxET01TdHJpbmdMaXN0PiBkYXRhYmFzZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRl
KCk7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiBmb3VuZE5hbWVzID0gYmFja2luZ1N0b3JlLT5nZXRE
YXRhYmFzZU5hbWVzKCk7Ci0gICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBmb3VuZE5hbWVzLmJlZ2luKCk7IGl0ICE9IGZvdW5kTmFtZXMuZW5kKCk7ICsraXQpCi0g
ICAgICAgIGRhdGFiYXNlTmFtZXMtPmFwcGVuZCgqaXQpOwotCi0gICAgY2FsbGJhY2tzLT5vblN1
Y2Nlc3MoZGF0YWJhc2VOYW1lcy5yZWxlYXNlKCkpOwotfQotCi12b2lkIElEQkZhY3RvcnlCYWNr
ZW5kTGV2ZWxEQjo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTZWN1
cml0eU9yaWdpbiYgb3BlbmluZ09yaWdpbiwgY29uc3QgU2VjdXJpdHlPcmlnaW4mLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29u
c3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRmFj
dG9yeUJhY2tlbmRMZXZlbERCOjpkZWxldGVEYXRhYmFzZSIpOwotICAgIGNvbnN0IFN0cmluZyB1
bmlxdWVJZGVudGlmaWVyID0gY29tcHV0ZVVuaXF1ZUlkZW50aWZpZXIobmFtZSwgb3BlbmluZ09y
aWdpbik7Ci0KLSAgICBJREJEYXRhYmFzZUJhY2tlbmRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kYXRh
YmFzZUJhY2tlbmRNYXAuZmluZCh1bmlxdWVJZGVudGlmaWVyKTsKLSAgICBpZiAoaXQgIT0gbV9k
YXRhYmFzZUJhY2tlbmRNYXAuZW5kKCkpIHsKLSAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBj
b25uZWN0aW9ucyB0byB0aGUgZGF0YWJhc2UsIGRpcmVjdGx5IGRlbGV0ZSB0aGUKLSAgICAgICAg
Ly8gZGF0YWJhc2UuCi0gICAgICAgIGl0LT52YWx1ZS0+ZGVsZXRlRGF0YWJhc2UoY2FsbGJhY2tz
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBFdmVyeXRoaW5nIGZy
b20gbm93IG9uIHNob3VsZCBiZSBkb25lIG9uIGFub3RoZXIgdGhyZWFkLgotICAgIFJlZlB0cjxJ
REJCYWNraW5nU3RvcmVMZXZlbERCPiBiYWNraW5nU3RvcmUgPSBvcGVuQmFja2luZ1N0b3JlKG9w
ZW5pbmdPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOwotICAgIGlmICghYmFja2luZ1N0b3JlKSB7Ci0g
ICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIG9wZW5pbmcgYmFj
a2luZyBzdG9yZSBmb3IgaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlLiIpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJTZXJ2ZXJDb25uZWN0aW9uPiBzZXJ2ZXJDb25u
ZWN0aW9uID0gSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmNyZWF0ZShuYW1lLCBiYWNraW5n
U3RvcmUuZ2V0KCkpOwotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IGRhdGFiYXNlQmFj
a2VuZCA9IElEQkRhdGFiYXNlQmFja2VuZDo6Y3JlYXRlKG5hbWUsIHVuaXF1ZUlkZW50aWZpZXIs
IHRoaXMsICpzZXJ2ZXJDb25uZWN0aW9uKTsKLSAgICBpZiAoZGF0YWJhc2VCYWNrZW5kKSB7Ci0g
ICAgICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFwLnNldCh1bmlxdWVJZGVudGlmaWVyLCBkYXRhYmFz
ZUJhY2tlbmQuZ2V0KCkpOwotICAgICAgICBkYXRhYmFzZUJhY2tlbmQtPmRlbGV0ZURhdGFiYXNl
KGNhbGxiYWNrcyk7Ci0gICAgICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFwLnJlbW92ZSh1bmlxdWVJ
ZGVudGlmaWVyKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRh
dGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAi
SW50ZXJuYWwgZXJyb3IgY3JlYXRpbmcgZGF0YWJhc2UgYmFja2VuZCBmb3IgaW5kZXhlZERCLmRl
bGV0ZURhdGFiYXNlLiIpKTsKLX0KLQotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVMZXZlbERC
PiBJREJGYWN0b3J5QmFja2VuZExldmVsREI6Om9wZW5CYWNraW5nU3RvcmUoY29uc3QgU2VjdXJp
dHlPcmlnaW4mIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3RvcnkpCi17
Ci0gICAgY29uc3QgU3RyaW5nIGZpbGVJZGVudGlmaWVyID0gY29tcHV0ZUZpbGVJZGVudGlmaWVy
KHNlY3VyaXR5T3JpZ2luKTsKLSAgICBjb25zdCBib29sIG9wZW5Jbk1lbW9yeSA9IGRhdGFEaXJl
Y3RvcnkuaXNFbXB0eSgpOwotCi0gICAgSURCQmFja2luZ1N0b3JlTGV2ZWxEQk1hcDo6aXRlcmF0
b3IgaXQyID0gbV9iYWNraW5nU3RvcmVNYXAuZmluZChmaWxlSWRlbnRpZmllcik7Ci0gICAgaWYg
KGl0MiAhPSBtX2JhY2tpbmdTdG9yZU1hcC5lbmQoKSAmJiBpdDItPnZhbHVlLmdldCgpKQotICAg
ICAgICByZXR1cm4gaXQyLT52YWx1ZS5nZXQoKTsKLQotICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmVMZXZlbERCPiBiYWNraW5nU3RvcmU7Ci0gICAgaWYgKG9wZW5Jbk1lbW9yeSkKLSAgICAgICAg
YmFja2luZ1N0b3JlID0gSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6b3BlbkluTWVtb3J5KGZpbGVJ
ZGVudGlmaWVyKTsKLSAgICBlbHNlCi0gICAgICAgIGJhY2tpbmdTdG9yZSA9IElEQkJhY2tpbmdT
dG9yZUxldmVsREI6Om9wZW4oc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnksIGZpbGVJZGVu
dGlmaWVyKTsKLQotICAgIGlmIChiYWNraW5nU3RvcmUpIHsKLSAgICAgICAgY2xlYW5XZWFrTWFw
KG1fYmFja2luZ1N0b3JlTWFwKTsKLSAgICAgICAgbV9iYWNraW5nU3RvcmVNYXAuc2V0KGZpbGVJ
ZGVudGlmaWVyLCBiYWNraW5nU3RvcmUtPmNyZWF0ZVdlYWtQdHIoKSk7Ci0gICAgICAgIC8vIElm
IGFuIGluLW1lbW9yeSBkYXRhYmFzZSwgYmluZCBsaWZldGltZSB0byB0aGlzIGZhY3RvcnkgaW5z
dGFuY2UuCi0gICAgICAgIGlmIChvcGVuSW5NZW1vcnkpCi0gICAgICAgICAgICBtX3Nlc3Npb25P
bmx5QmFja2luZ1N0b3Jlcy5hZGQoYmFja2luZ1N0b3JlKTsKLQotICAgICAgICAvLyBBbGwgYmFj
a2luZyBzdG9yZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZmFjdG9yeSBzaG91bGQgYmUgb2YgdGhl
IHNhbWUgdHlwZS4KLSAgICAgICAgQVNTRVJUKG1fc2Vzc2lvbk9ubHlCYWNraW5nU3RvcmVzLmlz
RW1wdHkoKSB8fCBvcGVuSW5NZW1vcnkpOwotCi0gICAgICAgIHJldHVybiBiYWNraW5nU3RvcmUu
cmVsZWFzZSgpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi12b2lkIElEQkZhY3RvcnlC
YWNrZW5kTGV2ZWxEQjo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIHVpbnQ2NF90IHZlcnNpb24s
IGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MsIGNv
bnN0IFNlY3VyaXR5T3JpZ2luJiBvcGVuaW5nT3JpZ2luLCBjb25zdCBTZWN1cml0eU9yaWdpbiYp
Ci17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJGYWN0b3J5QmFja2VuZExldmVsREI6Om9wZW4i
KTsKLSAgICBjb25zdCBTdHJpbmcgdW5pcXVlSWRlbnRpZmllciA9IGNvbXB1dGVVbmlxdWVJZGVu
dGlmaWVyKG5hbWUsIG9wZW5pbmdPcmlnaW4pOwotCi0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZD4gZGF0YWJhc2VCYWNrZW5kOwotICAgIElEQkRhdGFiYXNlQmFja2VuZE1hcDo6aXRlcmF0
b3IgaXQgPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5maW5kKHVuaXF1ZUlkZW50aWZpZXIpOwotICAg
IGlmIChpdCA9PSBtX2RhdGFiYXNlQmFja2VuZE1hcC5lbmQoKSkgewotICAgICAgICBSZWZQdHI8
SURCQmFja2luZ1N0b3JlTGV2ZWxEQj4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShv
cGVuaW5nT3JpZ2luLCBtX2RhdGFiYXNlRGlyZWN0b3J5KTsKLSAgICAgICAgaWYgKCFiYWNraW5n
U3RvcmUpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVy
cm9yIG9wZW5pbmcgYmFja2luZyBzdG9yZSBmb3IgaW5kZXhlZERCLm9wZW4uIikpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmUHRyPElEQlNlcnZlckNvbm5l
Y3Rpb24+IHNlcnZlckNvbm5lY3Rpb24gPSBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6Y3Jl
YXRlKG5hbWUsIGJhY2tpbmdTdG9yZS5nZXQoKSk7Ci0gICAgICAgIGRhdGFiYXNlQmFja2VuZCA9
IElEQkRhdGFiYXNlQmFja2VuZDo6Y3JlYXRlKG5hbWUsIHVuaXF1ZUlkZW50aWZpZXIsIHRoaXMs
ICpzZXJ2ZXJDb25uZWN0aW9uKTsKLSAgICAgICAgaWYgKGRhdGFiYXNlQmFja2VuZCkKLSAgICAg
ICAgICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFwLnNldCh1bmlxdWVJZGVudGlmaWVyLCBkYXRhYmFz
ZUJhY2tlbmQuZ2V0KCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNhbGxiYWNrcy0+
b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVu
a25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGNyZWF0aW5nIGRhdGFiYXNlIGJhY2tlbmQgZm9y
IGluZGV4ZWRkYi5vcGVuLiIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0gZWxzZQotICAgICAgICBkYXRhYmFzZUJhY2tlbmQgPSBpdC0+dmFsdWU7Ci0KLSAgICBkYXRh
YmFzZUJhY2tlbmQtPm9wZW5Db25uZWN0aW9uKGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3Ms
IHRyYW5zYWN0aW9uSWQsIHZlcnNpb24pOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3Rv
cnlCYWNrZW5kTGV2ZWxEQi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2
ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggOGRlNTMyMC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5oCisrKyAvZGV2L251bGwKQEAg
LTEsODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLSNpZm5kZWYgSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCX2gKLSNkZWZpbmUgSURCRmFjdG9y
eUJhY2tlbmRMZXZlbERCX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0Uo
TEVWRUxEQikKLQotI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIklEQkRhdGFi
YXNlQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIK
LSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0j
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9XZWFrUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERPTVN0cmluZ0xpc3Q7Ci0KLWNsYXNzIElE
QkJhY2tpbmdTdG9yZUxldmVsREI7Ci1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmQ7Ci0KLWNsYXNz
IElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQiA6IHB1YmxpYyBJREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRM
ZXZlbERCPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCKGRhdGFi
YXNlRGlyZWN0b3J5KSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfklEQkZhY3RvcnlCYWNrZW5kTGV2
ZWxEQigpOwotCi0gICAgLy8gTm90aWZpY2F0aW9ucyBmcm9tIHdlYWsgcG9pbnRlcnMuCi0gICAg
dmlydHVhbCB2b2lkIHJlbW92ZUlEQkRhdGFiYXNlQmFja2VuZChjb25zdCBTdHJpbmcmIHVuaXF1
ZUlkZW50aWZpZXIpIG92ZXJyaWRlIGZpbmFsOwotCi0gICAgdmlydHVhbCB2b2lkIGdldERhdGFi
YXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBjb25zdCBTZWN1cml0eU9yaWdpbiYg
b3BlbmluZ09yaWdpbiwgY29uc3QgU2VjdXJpdHlPcmlnaW4mIG1haW5GcmFtZU9yaWdpbiwgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcikgb3ZlcnJpZGUgZmlu
YWw7Ci0gICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCB1aW50NjRfdCB2
ZXJzaW9uLCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBv
cGVuaW5nT3JpZ2luLCBjb25zdCBTZWN1cml0eU9yaWdpbiYgbWFpbkZyYW1lT3JpZ2luKSBvdmVy
cmlkZSBmaW5hbDsKLQotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBvcGVuaW5nT3JpZ2luLCBjb25zdCBTZWN1
cml0eU9yaWdpbiYgbWFpbkZyYW1lT3JpZ2luLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpIG92ZXJyaWRlIGZp
bmFsOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZUxldmVsREI+IG9wZW5CYWNraW5nU3RvcmUoY29uc3QgU2VjdXJpdHlPcmlnaW4mLCBjb25zdCBT
dHJpbmcmIGRhdGFEaXIpOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IElEQkZhY3RvcnlCYWNr
ZW5kTGV2ZWxEQihjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5KTsKLQotICAgIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+ID4gSURCRGF0YWJh
c2VCYWNrZW5kTWFwOwotICAgIElEQkRhdGFiYXNlQmFja2VuZE1hcCBtX2RhdGFiYXNlQmFja2Vu
ZE1hcDsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFdlYWtQdHI8SURCQmFja2luZ1N0
b3JlTGV2ZWxEQj4gPiBJREJCYWNraW5nU3RvcmVMZXZlbERCTWFwOwotICAgIElEQkJhY2tpbmdT
dG9yZUxldmVsREJNYXAgbV9iYWNraW5nU3RvcmVNYXA7Ci0KLSAgICBIYXNoU2V0PFJlZlB0cjxJ
REJCYWNraW5nU3RvcmVMZXZlbERCPiA+IG1fc2Vzc2lvbk9ubHlCYWNraW5nU3RvcmVzOwotCi0g
ICAgU3RyaW5nIG1fZGF0YWJhc2VEaXJlY3Rvcnk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIp
Ci0KLSNlbmRpZiAvLyBJREJGYWN0b3J5QmFja2VuZExldmVsREJfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJJbmRleFdyaXRlckxldmVs
REIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJJbmRl
eFdyaXRlckxldmVsREIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWI4MjQ1
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIv
SURCSW5kZXhXcml0ZXJMZXZlbERCLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqICAgICAgICAgICAgICAgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJJbmRleFdyaXRl
ckxldmVsREIuaCIKLQotI2luY2x1ZGUgIklEQktleS5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotI2lmIFVTRShMRVZFTERC
KQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUlEQkluZGV4V3JpdGVyTGV2ZWxEQjo6SURCSW5k
ZXhXcml0ZXJMZXZlbERCKGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBJ
bmRleEtleXMmIGtleXMpCi0gICAgOiBtX2luZGV4TWV0YWRhdGEobWV0YWRhdGEpCi0gICAgLCBt
X2luZGV4S2V5cyhrZXlzKQotewotfQotCi12b2lkIElEQkluZGV4V3JpdGVyTGV2ZWxEQjo6d3Jp
dGVJbmRleEtleXMoY29uc3QgSURCUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllciwg
SURCQmFja2luZ1N0b3JlTGV2ZWxEQiYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbkxldmVsREImIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVjb3JkSWRlbnRpZmllcik7Ci0g
ICAgaW50NjRfdCBpbmRleElkID0gbV9pbmRleE1ldGFkYXRhLmlkOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9pbmRleEtleXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYm9vbCBvayA9
IGJhY2tpbmdTdG9yZS5wdXRJbmRleERhdGFGb3JSZWNvcmQodHJhbnNhY3Rpb24sIGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsICoobV9pbmRleEtleXMpW2ldLmdldCgpLCByZWNv
cmRJZGVudGlmaWVyKTsKLSAgICAgICAgLy8gVGhpcyBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4g
dmVyaWZpZWQgYXMgYSB2YWxpZCB3cml0ZSBkdXJpbmcgdmVyaWZ5SW5kZXhLZXlzLgotICAgICAg
ICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7Ci0gICAgfQotfQotCi1ib29sIElEQkluZGV4V3JpdGVy
TGV2ZWxEQjo6dmVyaWZ5SW5kZXhLZXlzKElEQkJhY2tpbmdTdG9yZUxldmVsREImIGJhY2tpbmdT
dG9yZSwgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCJiB0cmFuc2FjdGlvbiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
Ym9vbCYgY2FuQWRkS2V5cywgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5LCBTdHJpbmcqIGVycm9y
TWVzc2FnZSkgY29uc3QKLXsKLSAgICBjYW5BZGRLZXlzID0gZmFsc2U7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2luZGV4S2V5cy5zaXplKCk7ICsraSkgewotICAgICAgICBib29sIG9r
ID0gYWRkaW5nS2V5QWxsb3dlZChiYWNraW5nU3RvcmUsIHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAobV9pbmRleEtleXMpW2ldLmdldCgpLCBwcmltYXJ5
S2V5LCBjYW5BZGRLZXlzKTsKLSAgICAgICAgaWYgKCFvaykKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgaWYgKCFjYW5BZGRLZXlzKSB7Ci0gICAgICAgICAgICBpZiAoZXJyb3JN
ZXNzYWdlKQotICAgICAgICAgICAgICAgICplcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgi
VW5hYmxlIHRvIGFkZCBrZXkgdG8gaW5kZXggJyVzJzogYXQgbGVhc3Qgb25lIGtleSBkb2VzIG5v
dCBzYXRpc2Z5IHRoZSB1bmlxdWVuZXNzIHJlcXVpcmVtZW50cy4iLCBtX2luZGV4TWV0YWRhdGEu
bmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgfQotICAgIGNhbkFkZEtleXMgPSB0cnVlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIElEQkluZGV4V3JpdGVyTGV2ZWxEQjo6YWRkaW5nS2V5QWxsb3dlZChJREJCYWNraW5nU3Rv
cmVMZXZlbERCJiBiYWNraW5nU3RvcmUsIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxE
QiYgdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSogaW5kZXhLZXksIGNvbnN0IElEQktleSog
cHJpbWFyeUtleSwgYm9vbCYgYWxsb3dlZCkgY29uc3QKLXsKLSAgICBhbGxvd2VkID0gZmFsc2U7
Ci0gICAgaWYgKCFtX2luZGV4TWV0YWRhdGEudW5pcXVlKSB7Ci0gICAgICAgIGFsbG93ZWQgPSB0
cnVlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCS2V5PiBm
b3VuZFByaW1hcnlLZXk7Ci0gICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgIGJvb2wgb2sgPSBi
YWNraW5nU3RvcmUua2V5RXhpc3RzSW5JbmRleCh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgaW5kZXhJZCwgKmluZGV4S2V5LCBmb3VuZFByaW1hcnlLZXksIGZvdW5kKTsK
LSAgICBpZiAoIW9rKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFmb3VuZCB8fCAo
cHJpbWFyeUtleSAmJiBmb3VuZFByaW1hcnlLZXktPmlzRXF1YWwocHJpbWFyeUtleSkpKQotICAg
ICAgICBhbGxvd2VkID0gdHJ1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoTEVWRUxEQikKLSNlbmRpZiAvLyBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xldmVsZGIvSURCSW5kZXhXcml0ZXJMZXZlbERCLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkluZGV4V3JpdGVyTGV2ZWxEQi5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2U1NTUzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCSW5kZXhXcml0ZXJMZXZlbERCLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgICAgICAgICAgICAgIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQkluZGV4
V3JpdGVyTGV2ZWxEQl9oCi0jZGVmaW5lIElEQkluZGV4V3JpdGVyTGV2ZWxEQl9oCi0KLSNpbmNs
dWRlICJJREJCYWNraW5nU3RvcmVMZXZlbERCLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNr
ZW5kLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VNZXRhZGF0YS5oIgotI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNpZiBVU0UoTEVW
RUxEQikKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10eXBlZGVmIFZlY3RvcjxSZWZQdHI8SURC
S2V5Pj4gSW5kZXhLZXlzOwotCi1jbGFzcyBJREJJbmRleFdyaXRlckxldmVsREIgOiBwdWJsaWMg
UmVmQ291bnRlZDxJREJJbmRleFdyaXRlckxldmVsREI+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJREJJbmRleFdyaXRlckxldmVsREI+IGNyZWF0ZShjb25zdCBJREJJbmRleE1l
dGFkYXRhJiBpbmRleE1ldGFkYXRhLCBjb25zdCBJbmRleEtleXMmIGluZGV4S2V5cykKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCSW5kZXhXcml0ZXJMZXZlbERCKGluZGV4
TWV0YWRhdGEsIGluZGV4S2V5cykpOwotICAgIH0KLQotICAgIGJvb2wgdmVyaWZ5SW5kZXhLZXlz
KElEQkJhY2tpbmdTdG9yZUxldmVsREImLCBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVs
REImLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBib29sJiBjYW5BZGRLZXlzLCBjb25zdCBJREJLZXkqIHByaW1hcnlLZXkgPSAwLCBT
dHJpbmcqIGVycm9yTWVzc2FnZSA9IDApIGNvbnN0IFdBUk5fVU5VU0VEX1JFVFVSTjsKLQotICAg
IHZvaWQgd3JpdGVJbmRleEtleXMoY29uc3QgSURCUmVjb3JkSWRlbnRpZmllciosIElEQkJhY2tp
bmdTdG9yZUxldmVsREImLCBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREImLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgY29uc3Q7Ci0KLXByaXZhdGU6
Ci0gICAgSURCSW5kZXhXcml0ZXJMZXZlbERCKGNvbnN0IElEQkluZGV4TWV0YWRhdGEmLCBjb25z
dCBJbmRleEtleXMmKTsKLQotICAgIGJvb2wgYWRkaW5nS2V5QWxsb3dlZChJREJCYWNraW5nU3Rv
cmVMZXZlbERCJiwgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCJiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
SURCS2V5KiBpbmRleEtleSwgY29uc3QgSURCS2V5KiBwcmltYXJ5S2V5LCBib29sJiBhbGxvd2Vk
KSBjb25zdCBXQVJOX1VOVVNFRF9SRVRVUk47Ci0KLSAgICBjb25zdCBJREJJbmRleE1ldGFkYXRh
IG1faW5kZXhNZXRhZGF0YTsKLSAgICBJbmRleEtleXMgbV9pbmRleEtleXM7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyAjaWYgVVNFKExFVkVMREIpCi0jZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0jZW5kaWYgLy8gSURCSW5kZXhXcml0ZXJMZXZl
bERCX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVs
ZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQkxldmVsREJDb2RpbmcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAzMzYwNmQwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxODA3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCTGV2ZWxE
QkNvZGluZy5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERC
KQotCi0jaW5jbHVkZSAiSURCS2V5LmgiCi0jaW5jbHVkZSAiSURCS2V5UGF0aC5oIgotI2luY2x1
ZGUgIkxldmVsREJTbGljZS5oIgotI2luY2x1ZGUgPHd0Zi9CeXRlT3JkZXIuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLS8vIExldmVsREIgc3RvcmVzIGtleS92YWx1
ZSBwYWlycy4gS2V5cyBhbmQgdmFsdWVzIGFyZSBzdHJpbmdzIG9mIGJ5dGVzLCBub3JtYWxseSBv
ZiB0eXBlIFZlY3RvcjxjaGFyPi4KLS8vCi0vLyBUaGUga2V5cyBpbiB0aGUgYmFja2luZyBzdG9y
ZSBhcmUgdmFyaWFibGUtbGVuZ3RoIHR1cGxlcyB3aXRoIGRpZmZlcmVudCB0eXBlcwotLy8gb2Yg
ZmllbGRzLiBFYWNoIGtleSBpbiB0aGUgYmFja2luZyBzdG9yZSBzdGFydHMgd2l0aCBhIHRlcm5h
cnkgcHJlZml4OiAoZGF0YWJhc2UgaWQsIG9iamVjdCBzdG9yZSBpZCwgaW5kZXggaWQpLiBGb3Ig
ZWFjaCwgMCBpcyByZXNlcnZlZCBmb3IgbWV0YS1kYXRhLgotLy8gVGhlIHByZWZpeCBtYWtlcyBz
dXJlIHRoYXQgZGF0YSBmb3IgYSBzcGVjaWZpYyBkYXRhYmFzZSwgb2JqZWN0IHN0b3JlLCBhbmQg
aW5kZXggYXJlIGdyb3VwZWQgdG9nZXRoZXIuIFRoZSBsb2NhbGl0eSBpcyBpbXBvcnRhbnQgZm9y
IHBlcmZvcm1hbmNlOiBjb21tb24KLS8vIG9wZXJhdGlvbnMgc2hvdWxkIG9ubHkgbmVlZCBhIG1p
bmltYWwgbnVtYmVyIG9mIHNlZWsgb3BlcmF0aW9ucy4gRm9yIGV4YW1wbGUsIGFsbCB0aGUgbWV0
YS1kYXRhIGZvciBhIGRhdGFiYXNlIGlzIGdyb3VwZWQgdG9nZXRoZXIgc28gdGhhdCByZWFkaW5n
IHRoYXQKLS8vIG1ldGEtZGF0YSBvbmx5IHJlcXVpcmVzIG9uZSBzZWVrLgotLy8KLS8vIEVhY2gg
a2V5IHR5cGUgaGFzIGEgY2xhc3MgKGluIHNxdWFyZSBicmFja2V0cyBiZWxvdykgd2hpY2gga25v
d3MgaG93IHRvIGVuY29kZSwgZGVjb2RlLCBhbmQgY29tcGFyZSB0aGF0IGtleSB0eXBlLgotLy8K
LS8vIEdsb2JhbCBtZXRhLWRhdGEgaGF2ZSBrZXlzIHdpdGggcHJlZml4ICgwLDAsMCksIGZvbGxv
d2VkIGJ5IGEgdHlwZSBieXRlOgotLy8KLS8vICAgICA8MCwgMCwgMCwgMD4gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gSW5kZXhlZERCL0xldmVsREIgc2NoZW1h
IHZlcnNpb24gW1NjaGVtYVZlcnNpb25LZXldCi0vLyAgICAgPDAsIDAsIDAsIDE+ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+IFRoZSBtYXhpbXVtIGRhdGFiYXNl
IGlkIGV2ZXIgYWxsb2NhdGVkIFtNYXhEYXRhYmFzZUlkS2V5XQotLy8gICAgIDwwLCAwLCAwLCAy
PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiBTZXJpYWxpemVk
U2NyaXB0VmFsdWUgdmVyc2lvbiBbRGF0YVZlcnNpb25LZXldCi0vLyAgICAgPDAsIDAsIDAsIDEw
MCwgZGF0YWJhc2UgaWQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+IEV4aXN0ZW5jZSBp
bXBsaWVzIHRoZSBkYXRhYmFzZSBpZCBpcyBpbiB0aGUgZnJlZSBsaXN0IFtEYXRhYmFzZUZyZWVM
aXN0S2V5XQotLy8gICAgIDwwLCAwLCAwLCAyMDEsIHV0ZjE2IG9yaWdpbiBuYW1lLCB1dGYxNiBk
YXRhYmFzZSBuYW1lPiA9PiBEYXRhYmFzZSBpZCBbRGF0YWJhc2VOYW1lS2V5XQotLy8KLS8vCi0v
LyBEYXRhYmFzZSBtZXRhLWRhdGE6Ci0vLwotLy8gICAgIEFnYWluLCB0aGUgcHJlZml4IGlzIGZv
bGxvd2VkIGJ5IGEgdHlwZSBieXRlLgotLy8KLS8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDA+
ID0+IHV0ZjE2IG9yaWdpbiBuYW1lIFtEYXRhYmFzZU1ldGFEYXRhS2V5XQotLy8gICAgIDxkYXRh
YmFzZSBpZCwgMCwgMCwgMT4gPT4gdXRmMTYgZGF0YWJhc2UgbmFtZSBbRGF0YWJhc2VNZXRhRGF0
YUtleV0KLS8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDI+ID0+IHV0ZjE2IHVzZXIgdmVyc2lv
biBkYXRhIFtEYXRhYmFzZU1ldGFEYXRhS2V5XQotLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwg
Mz4gPT4gbWF4aW11bSBvYmplY3Qgc3RvcmUgaWQgZXZlciBhbGxvY2F0ZWQgW0RhdGFiYXNlTWV0
YURhdGFLZXldCi0vLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCA0PiA9PiB1c2VyIGludGVnZXIg
dmVyc2lvbiAodmFyIGludCkgW0RhdGFiYXNlTWV0YURhdGFLZXldCi0vLwotLy8KLS8vIE9iamVj
dCBzdG9yZSBtZXRhLWRhdGE6Ci0vLwotLy8gICAgIFRoZSBwcmVmaXggaXMgZm9sbG93ZWQgYnkg
YSB0eXBlIGJ5dGUsIHRoZW4gYSB2YXJpYWJsZS1sZW5ndGggaW50ZWdlciwgYW5kIHRoZW4gYW5v
dGhlciB0eXBlIGJ5dGUuCi0vLwotLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgNTAsIG9iamVj
dCBzdG9yZSBpZCwgMD4gPT4gdXRmMTYgb2JqZWN0IHN0b3JlIG5hbWUgW09iamVjdFN0b3JlTWV0
YURhdGFLZXldCi0vLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCA1MCwgb2JqZWN0IHN0b3JlIGlk
LCAxPiA9PiB1dGYxNiBrZXkgcGF0aCBbT2JqZWN0U3RvcmVNZXRhRGF0YUtleV0KLS8vICAgICA8
ZGF0YWJhc2UgaWQsIDAsIDAsIDUwLCBvYmplY3Qgc3RvcmUgaWQsIDI+ID0+IGhhcyBhdXRvIGlu
Y3JlbWVudCBbT2JqZWN0U3RvcmVNZXRhRGF0YUtleV0KLS8vICAgICA8ZGF0YWJhc2UgaWQsIDAs
IDAsIDUwLCBvYmplY3Qgc3RvcmUgaWQsIDM+ID0+IGlzIGV2aWN0YWJsZSBbT2JqZWN0U3RvcmVN
ZXRhRGF0YUtleV0KLS8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDUwLCBvYmplY3Qgc3RvcmUg
aWQsIDQ+ID0+IGxhc3QgInZlcnNpb24iIG51bWJlciBbT2JqZWN0U3RvcmVNZXRhRGF0YUtleV0K
LS8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDUwLCBvYmplY3Qgc3RvcmUgaWQsIDU+ID0+IG1h
eGltdW0gaW5kZXggaWQgZXZlciBhbGxvY2F0ZWQgW09iamVjdFN0b3JlTWV0YURhdGFLZXldCi0v
LyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCA1MCwgb2JqZWN0IHN0b3JlIGlkLCA2PiA9PiBoYXMg
a2V5IHBhdGggKHZzLiBudWxsKSBbT2JqZWN0U3RvcmVNZXRhRGF0YUtleV0KLS8vICAgICA8ZGF0
YWJhc2UgaWQsIDAsIDAsIDUwLCBvYmplY3Qgc3RvcmUgaWQsIDc+ID0+IGtleSBnZW5lcmF0b3Ig
Y3VycmVudCBudW1iZXIgW09iamVjdFN0b3JlTWV0YURhdGFLZXldCi0vLwotLy8KLS8vIEluZGV4
IG1ldGEtZGF0YToKLS8vCi0vLyAgICAgVGhlIHByZWZpeCBpcyBmb2xsb3dlZCBieSBhIHR5cGUg
Ynl0ZSwgdGhlbiB0d28gdmFyaWFibGUtbGVuZ3RoIGludGVnZXJzLCBhbmQgdGhlbiBhbm90aGVy
IHR5cGUgYnl0ZS4KLS8vCi0vLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCAxMDAsIG9iamVjdCBz
dG9yZSBpZCwgaW5kZXggaWQsIDA+ID0+IHV0ZjE2IGluZGV4IG5hbWUgW0luZGV4TWV0YURhdGFL
ZXldCi0vLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCAxMDAsIG9iamVjdCBzdG9yZSBpZCwgaW5k
ZXggaWQsIDE+ID0+IGFyZSBpbmRleCBrZXlzIHVuaXF1ZSBbSW5kZXhNZXRhRGF0YUtleV0KLS8v
ICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDEwMCwgb2JqZWN0IHN0b3JlIGlkLCBpbmRleCBpZCwg
Mj4gPT4gdXRmMTYga2V5IHBhdGggW0luZGV4TWV0YURhdGFLZXldCi0vLyAgICAgPGRhdGFiYXNl
IGlkLCAwLCAwLCAxMDAsIG9iamVjdCBzdG9yZSBpZCwgaW5kZXggaWQsIDM+ID0+IGlzIGluZGV4
IG11bHRpLWVudHJ5IFtJbmRleE1ldGFEYXRhS2V5XQotLy8KLS8vCi0vLyBPdGhlciBvYmplY3Qg
c3RvcmUgYW5kIGluZGV4IG1ldGEtZGF0YToKLS8vCi0vLyAgICAgVGhlIHByZWZpeCBpcyBmb2xs
b3dlZCBieSBhIHR5cGUgYnl0ZS4gVGhlIG9iamVjdCBzdG9yZSBhbmQgaW5kZXggaWQgYXJlIHZh
cmlhYmxlIGxlbmd0aCBpbnRlZ2VycywgdGhlIHV0ZjE2IHN0cmluZ3MgYXJlIHZhcmlhYmxlIGxl
bmd0aCBzdHJpbmdzLgotLy8KLS8vICAgICA8ZGF0YWJhc2UgaWQsIDAsIDAsIDE1MCwgb2JqZWN0
IHN0b3JlIGlkPiAgICAgICAgICAgICAgICAgICA9PiBleGlzdGVuY2UgaW1wbGllcyB0aGUgb2Jq
ZWN0IHN0b3JlIGlkIGlzIGluIHRoZSBmcmVlIGxpc3QgW09iamVjdFN0b3JlRnJlZUxpc3RLZXld
Ci0vLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCAxNTEsIG9iamVjdCBzdG9yZSBpZCwgaW5kZXgg
aWQ+ICAgICAgICAgPT4gZXhpc3RlbmNlIGltcGxpZXMgdGhlIGluZGV4IGlkIGlzIGluIHRoZSBm
cmVlIGxpc3QgW0luZGV4RnJlZUxpc3RLZXldCi0vLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCAy
MDAsIHV0ZjE2IG9iamVjdCBzdG9yZSBuYW1lPiAgICAgICAgICAgPT4gb2JqZWN0IHN0b3JlIGlk
IFtPYmplY3RTdG9yZU5hbWVzS2V5XQotLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgMjAxLCBv
YmplY3Qgc3RvcmUgaWQsIHV0ZjE2IGluZGV4IG5hbWU+ID0+IGluZGV4IGlkIFtJbmRleE5hbWVz
S2V5XQotLy8KLS8vCi0vLyBPYmplY3Qgc3RvcmUgZGF0YToKLS8vCi0vLyAgICAgVGhlIHByZWZp
eCBpcyBmb2xsb3dlZCBieSBhIHR5cGUgYnl0ZS4gVGhlIHVzZXIga2V5IGlzIGFuIGVuY29kZWQg
SURCS2V5LgotLy8KLS8vICAgICA8ZGF0YWJhc2UgaWQsIG9iamVjdCBzdG9yZSBpZCwgMSwgdXNl
ciBrZXk+ID0+ICJ2ZXJzaW9uIiwgc2VyaWFsaXplZCBzY3JpcHQgdmFsdWUgW09iamVjdFN0b3Jl
RGF0YUtleV0KLS8vCi0vLwotLy8gIkV4aXN0cyIgZW50cnk6Ci0vLwotLy8gICAgIFRoZSBwcmVm
aXggaXMgZm9sbG93ZWQgYnkgYSB0eXBlIGJ5dGUuIFRoZSB1c2VyIGtleSBpcyBhbiBlbmNvZGVk
IElEQktleS4KLS8vCi0vLyAgICAgPGRhdGFiYXNlIGlkLCBvYmplY3Qgc3RvcmUgaWQsIDIsIHVz
ZXIga2V5PiA9PiAidmVyc2lvbiIgW0V4aXN0c0VudHJ5S2V5XQotLy8KLS8vCi0vLyBJbmRleCBk
YXRhOgotLy8KLS8vICAgICBUaGUgcHJlZml4IGlzIGZvbGxvd2VkIGJ5IGEgdHlwZSBieXRlLiBU
aGUgaW5kZXgga2V5IGlzIGFuIGVuY29kZWQgSURCS2V5LiBUaGUgc2VxdWVuY2UgbnVtYmVyIGlz
IGEgdmFyaWFibGUgbGVuZ3RoIGludGVnZXIuCi0vLyAgICAgVGhlIHByaW1hcnkga2V5IGlzIGFu
IGVuY29kZWQgSURCS2V5LgotLy8KLS8vICAgICA8ZGF0YWJhc2UgaWQsIG9iamVjdCBzdG9yZSBp
ZCwgaW5kZXggaWQsIGluZGV4IGtleSwgc2VxdWVuY2UgbnVtYmVyLCBwcmltYXJ5IGtleT4gPT4g
InZlcnNpb24iLCBwcmltYXJ5IGtleSBbSW5kZXhEYXRhS2V5XQotLy8KLS8vICAgICAoVGhlIHNl
cXVlbmNlIG51bWJlciBpcyBvYnNvbGV0ZTsgaXQgd2FzIHVzZWQgdG8gYWxsb3cgdHdvIGVudHJp
ZXMgd2l0aAotLy8gICAgIHRoZSBzYW1lIHVzZXIgKGluZGV4KSBrZXkgaW4gbm9uLXVuaXF1ZSBp
bmRleGVzIHByaW9yIHRvIHRoZSBpbmNsdXNpb24gb2YKLS8vICAgICB0aGUgcHJpbWFyeSBrZXkg
aW4gdGhlIGRhdGEuIFRoZSAidmVyc2lvbiIgZmllbGQgaXMgdXNlZCB0byB3ZWVkIG91dCBzdGFs
ZQotLy8gICAgIGluZGV4IGRhdGEuIFdoZW5ldmVyIG5ldyBvYmplY3Qgc3RvcmUgZGF0YSBpcyBp
bnNlcnRlZCwgaXQgZ2V0cyBhIG5ldwotLy8gICAgICJ2ZXJzaW9uIiBudW1iZXIsIGFuZCBuZXcg
aW5kZXggZGF0YSBpcyB3cml0dGVuIHdpdGggdGhpcyBudW1iZXIuIFdoZW4KLS8vICAgICB0aGUg
aW5kZXggaXMgdXNlZCBmb3IgbG9vay11cHMsIGVudHJpZXMgYXJlIHZhbGlkYXRlZCBhZ2FpbnN0
IHRoZQotLy8gICAgICJleGlzdHMiIGVudHJpZXMsIGFuZCByZWNvcmRzIHdpdGggb2xkICJ2ZXJz
aW9uIiBudW1iZXJzIGFyZSBkZWxldGVkCi0vLyAgICAgd2hlbiB0aGV5IGFyZSBlbmNvdW50ZXJl
ZCBpbiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgsCi0vLyAgICAgSW5kZXhDdXJzb3JJbXBsOjpsb2Fk
Q3VycmVudFJvdywgYW5kIEluZGV4S2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3cpLgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgSURCTGV2ZWxEQkNvZGluZyB7Ci0KLSNpZm5k
ZWYgSU5UNjRfTUFYCi0jZGVmaW5lIElOVDY0X01BWCAweDdmZmZmZmZmZmZmZmZmZmZMTAotI2Vu
ZGlmCi0jaWZuZGVmIElOVDMyX01BWAotI2RlZmluZSBJTlQzMl9NQVggMHg3ZmZmZmZmZkwKLSNl
bmRpZgotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBJREJLZXlOdWxsVHlwZUJ5dGUgPSAw
Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgSURCS2V5U3RyaW5nVHlwZUJ5dGUgPSAxOwot
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgSURCS2V5RGF0ZVR5cGVCeXRlID0gMjsKLXN0YXRp
YyBjb25zdCB1bnNpZ25lZCBjaGFyIElEQktleU51bWJlclR5cGVCeXRlID0gMzsKLXN0YXRpYyBj
b25zdCB1bnNpZ25lZCBjaGFyIElEQktleUFycmF5VHlwZUJ5dGUgPSA0Owotc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGNoYXIgSURCS2V5TWluS2V5VHlwZUJ5dGUgPSA1OwotCi1zdGF0aWMgY29uc3Qg
dW5zaWduZWQgY2hhciBJREJLZXlQYXRoVHlwZUNvZGVkQnl0ZTEgPSAwOwotc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGNoYXIgSURCS2V5UGF0aFR5cGVDb2RlZEJ5dGUyID0gMDsKLQotc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGNoYXIgT2JqZWN0U3RvcmVEYXRhSW5kZXhJZCA9IDE7Ci1zdGF0aWMgY29u
c3QgdW5zaWduZWQgY2hhciBFeGlzdHNFbnRyeUluZGV4SWQgPSAyOwotCi1zdGF0aWMgY29uc3Qg
dW5zaWduZWQgY2hhciBTY2hlbWFWZXJzaW9uVHlwZUJ5dGUgPSAwOwotc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGNoYXIgTWF4RGF0YWJhc2VJZFR5cGVCeXRlID0gMTsKLXN0YXRpYyBjb25zdCB1bnNp
Z25lZCBjaGFyIERhdGFWZXJzaW9uVHlwZUJ5dGUgPSAyOwotc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGNoYXIgTWF4U2ltcGxlR2xvYmFsTWV0YURhdGFUeXBlQnl0ZSA9IDM7IC8vIEluc2VydCBiZWZv
cmUgdGhpcyBhbmQgaW5jcmVtZW50Lgotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgRGF0YWJh
c2VGcmVlTGlzdFR5cGVCeXRlID0gMTAwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgRGF0
YWJhc2VOYW1lVHlwZUJ5dGUgPSAyMDE7Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIE9i
amVjdFN0b3JlTWV0YURhdGFUeXBlQnl0ZSA9IDUwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo
YXIgSW5kZXhNZXRhRGF0YVR5cGVCeXRlID0gMTAwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo
YXIgT2JqZWN0U3RvcmVGcmVlTGlzdFR5cGVCeXRlID0gMTUwOwotc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGNoYXIgSW5kZXhGcmVlTGlzdFR5cGVCeXRlID0gMTUxOwotc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGNoYXIgT2JqZWN0U3RvcmVOYW1lc1R5cGVCeXRlID0gMjAwOwotc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGNoYXIgSW5kZXhOYW1lc0tleVR5cGVCeXRlID0gMjAxOwotCi1zdGF0aWMgY29uc3Qg
dW5zaWduZWQgY2hhciBPYmplY3RNZXRhRGF0YVR5cGVNYXhpbXVtID0gMjU1Owotc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGNoYXIgSW5kZXhNZXRhRGF0YVR5cGVNYXhpbXVtID0gMjU1OwotCi1WZWN0
b3I8Y2hhcj4gZW5jb2RlQnl0ZSh1bnNpZ25lZCBjaGFyIGMpCi17Ci0gICAgVmVjdG9yPGNoYXIs
IERlZmF1bHRJbmxpbmVCdWZmZXJTaXplPiB2OwotICAgIHYuYXBwZW5kKGMpOwotCi0gICAgQVNT
RVJUKHYuc2l6ZSgpIDw9IERlZmF1bHRJbmxpbmVCdWZmZXJTaXplKTsKLSAgICByZXR1cm4gdjsK
LX0KLQotY29uc3QgY2hhciogZGVjb2RlQnl0ZShjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBs
aW1pdCwgdW5zaWduZWQgY2hhciYgZm91bmRDaGFyKQotewotICAgIGlmIChwID49IGxpbWl0KQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIGZvdW5kQ2hhciA9ICpwKys7Ci0gICAgcmV0dXJuIHA7
Ci19Ci0KLVZlY3RvcjxjaGFyPiBtYXhJREJLZXkoKQotewotICAgIHJldHVybiBlbmNvZGVCeXRl
KElEQktleU51bGxUeXBlQnl0ZSk7Ci19Ci0KLVZlY3RvcjxjaGFyPiBtaW5JREJLZXkoKQotewot
ICAgIHJldHVybiBlbmNvZGVCeXRlKElEQktleU1pbktleVR5cGVCeXRlKTsKLX0KLQotVmVjdG9y
PGNoYXI+IGVuY29kZUJvb2woYm9vbCBiKQotewotICAgIFZlY3RvcjxjaGFyLCBEZWZhdWx0SW5s
aW5lQnVmZmVyU2l6ZT4gcmV0OwotICAgIHJldC5hcHBlbmQoYiA/IDEgOiAwKTsKLQotICAgIEFT
U0VSVChyZXQuc2l6ZSgpIDw9IERlZmF1bHRJbmxpbmVCdWZmZXJTaXplKTsKLSAgICByZXR1cm4g
cmV0OwotfQotCi1ib29sIGRlY29kZUJvb2woY29uc3QgY2hhciogYmVnaW4sIGNvbnN0IGNoYXIq
IGVuZCkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGVuZCwgYmVnaW4gPCBlbmQpOwotICAgIHJldHVy
biAqYmVnaW47Ci19Ci0KLVZlY3RvcjxjaGFyPiBlbmNvZGVJbnQoaW50NjRfdCBuUGFyYW0pCi17
Ci0gICAgQVNTRVJUKG5QYXJhbSA+PSAwKTsKLSAgICB1aW50NjRfdCBuID0gc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KG5QYXJhbSk7Ci0gICAgVmVjdG9yPGNoYXIsIERlZmF1bHRJbmxpbmVCdWZmZXJT
aXplPiByZXQ7Ci0KLSAgICBkbyB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IG47Ci0gICAg
ICAgIHJldC5hcHBlbmQoYyk7Ci0gICAgICAgIG4gPj49IDg7Ci0gICAgfSB3aGlsZSAobik7Ci0K
LSAgICBBU1NFUlQocmV0LnNpemUoKSA8PSBEZWZhdWx0SW5saW5lQnVmZmVyU2l6ZSk7Ci0gICAg
cmV0dXJuIHJldDsKLX0KLQotaW50NjRfdCBkZWNvZGVJbnQoY29uc3QgY2hhciogYmVnaW4sIGNv
bnN0IGNoYXIqIGVuZCkKLXsKLSAgICBBU1NFUlQoYmVnaW4gPD0gZW5kKTsKLSAgICBpbnQ2NF90
IHJldCA9IDA7Ci0KLSAgICBpbnQgc2hpZnQgPSAwOwotICAgIHdoaWxlIChiZWdpbiA8IGVuZCkg
ewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAqYmVnaW4rKzsKLSAgICAgICAgcmV0IHw9IHN0
YXRpY19jYXN0PGludDY0X3Q+KGMpIDw8IHNoaWZ0OwotICAgICAgICBzaGlmdCArPSA4OwotICAg
IH0KLQotICAgIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgY29tcGFyZUludHMoaW50NjRf
dCBhLCBpbnQ2NF90IGIpCi17Ci0gICAgQVNTRVJUKGEgPj0gMCk7Ci0gICAgQVNTRVJUKGIgPj0g
MCk7Ci0KLSAgICBpbnQ2NF90IGRpZmYgPSBhIC0gYjsKLSAgICBpZiAoZGlmZiA8IDApCi0gICAg
ICAgIHJldHVybiAtMTsKLSAgICBpZiAoZGlmZiA+IDApCi0gICAgICAgIHJldHVybiAxOwotICAg
IHJldHVybiAwOwotfQotCi1WZWN0b3I8Y2hhcj4gZW5jb2RlVmFySW50KGludDY0X3QgblBhcmFt
KQotewotICAgIEFTU0VSVChuUGFyYW0gPj0gMCk7Ci0gICAgdWludDY0X3QgbiA9IHN0YXRpY19j
YXN0PHVpbnQ2NF90PihuUGFyYW0pOwotICAgIFZlY3RvcjxjaGFyLCBEZWZhdWx0SW5saW5lQnVm
ZmVyU2l6ZT4gcmV0OwotCi0gICAgZG8gewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBuICYg
MHg3ZjsKLSAgICAgICAgbiA+Pj0gNzsKLSAgICAgICAgaWYgKG4pCi0gICAgICAgICAgICBjIHw9
IDB4ODA7Ci0gICAgICAgIHJldC5hcHBlbmQoYyk7Ci0gICAgfSB3aGlsZSAobik7Ci0KLSAgICBB
U1NFUlQocmV0LnNpemUoKSA8PSBEZWZhdWx0SW5saW5lQnVmZmVyU2l6ZSk7Ci0gICAgcmV0dXJu
IHJldDsKLX0KLQotY29uc3QgY2hhciogZGVjb2RlVmFySW50KGNvbnN0IGNoYXIqIHAsIGNvbnN0
IGNoYXIqIGxpbWl0LCBpbnQ2NF90JiBmb3VuZEludCkKLXsKLSAgICBBU1NFUlQobGltaXQgPj0g
cCk7Ci0gICAgZm91bmRJbnQgPSAwOwotICAgIGludCBzaGlmdCA9IDA7Ci0KLSAgICBkbyB7Ci0g
ICAgICAgIGlmIChwID49IGxpbWl0KQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAg
dW5zaWduZWQgY2hhciBjID0gKnA7Ci0gICAgICAgIGZvdW5kSW50IHw9IHN0YXRpY19jYXN0PGlu
dDY0X3Q+KGMgJiAweDdmKSA8PCBzaGlmdDsKLSAgICAgICAgc2hpZnQgKz0gNzsKLSAgICB9IHdo
aWxlICgqcCsrICYgMHg4MCk7Ci0gICAgcmV0dXJuIHA7Ci19Ci0KLVZlY3RvcjxjaGFyPiBlbmNv
ZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzKQotewotICAgIC8vIEJhY2tpbmcgc3RvcmUgaXMgVVRG
LTE2QkUsIGNvbnZlcnQgZnJvbSBob3N0IGVuZGlhbm5lc3MuCi0gICAgc2l6ZV90IGxlbmd0aCA9
IHMubGVuZ3RoKCk7Ci0gICAgVmVjdG9yPGNoYXI+IHJldChsZW5ndGggKiBzaXplb2YoVUNoYXIp
KTsKLQotICAgIFVDaGFyKiBkc3QgPSByZWludGVycHJldF9jYXN0PFVDaGFyKj4ocmV0LmRhdGEo
KSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAq
ZHN0KysgPSBodG9ucyhzW2ldKTsKLQotICAgIHJldHVybiByZXQ7Ci19Ci0KLVN0cmluZyBkZWNv
ZGVTdHJpbmcoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGVuZCkKLXsKLSAgICAvLyBC
YWNraW5nIHN0b3JlIGlzIFVURi0xNkJFLCBjb252ZXJ0IHRvIGhvc3QgZW5kaWFubmVzcy4KLSAg
ICBBU1NFUlQoZW5kID49IHN0YXJ0KTsKLSAgICBBU1NFUlQoISgoZW5kIC0gc3RhcnQpICUgc2l6
ZW9mKFVDaGFyKSkpOwotCi0gICAgc2l6ZV90IGxlbmd0aCA9IChlbmQgLSBzdGFydCkgLyBzaXpl
b2YoVUNoYXIpOwotICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVyKGxlbmd0aCk7Ci0KLSAgICBjb25z
dCBVQ2hhciogc3JjID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHN0YXJ0KTsKLSAg
ICBVQ2hhciogZHN0ID0gYnVmZmVyLmRhdGEoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICpkc3QrKyA9IG50b2hzKCpzcmMrKyk7Ci0KLSAgICBy
ZXR1cm4gU3RyaW5nOjphZG9wdChidWZmZXIpOwotfQotCi1WZWN0b3I8Y2hhcj4gZW5jb2RlU3Ry
aW5nV2l0aExlbmd0aChjb25zdCBTdHJpbmcmIHMpCi17Ci0gICAgVmVjdG9yPGNoYXI+IHJldCA9
IGVuY29kZVZhckludChzLmxlbmd0aCgpKTsKLSAgICByZXQuYXBwZW5kVmVjdG9yKGVuY29kZVN0
cmluZyhzKSk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotY29uc3QgY2hhciogZGVjb2RlU3RyaW5n
V2l0aExlbmd0aChjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBsaW1pdCwgU3RyaW5nJiBmb3Vu
ZFN0cmluZykKLXsKLSAgICBBU1NFUlQobGltaXQgPj0gcCk7Ci0gICAgaW50NjRfdCBsZW47Ci0g
ICAgcCA9IGRlY29kZVZhckludChwLCBsaW1pdCwgbGVuKTsKLSAgICBpZiAoIXAgfHwgbGVuIDwg
MCB8fCBwICsgbGVuICogMiA+IGxpbWl0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZvdW5k
U3RyaW5nID0gZGVjb2RlU3RyaW5nKHAsIHAgKyBsZW4gKiAyKTsKLSAgICBwICs9IGxlbiAqIDI7
Ci0gICAgcmV0dXJuIHA7Ci19Ci0KLWludCBjb21wYXJlRW5jb2RlZFN0cmluZ3NXaXRoTGVuZ3Ro
KGNvbnN0IGNoYXIqJiBwLCBjb25zdCBjaGFyKiBsaW1pdFAsIGNvbnN0IGNoYXIqJiBxLCBjb25z
dCBjaGFyKiBsaW1pdFEsIGJvb2wmIG9rKQotewotICAgIEFTU0VSVCgmcCAhPSAmcSk7Ci0gICAg
QVNTRVJUKGxpbWl0UCA+PSBwKTsKLSAgICBBU1NFUlQobGltaXRRID49IHEpOwotICAgIGludDY0
X3QgbGVuUCwgbGVuUTsKLSAgICBwID0gZGVjb2RlVmFySW50KHAsIGxpbWl0UCwgbGVuUCk7Ci0g
ICAgcSA9IGRlY29kZVZhckludChxLCBsaW1pdFEsIGxlblEpOwotICAgIGlmICghcCB8fCAhcSB8
fCBsZW5QIDwgMCB8fCBsZW5RIDwgMCkgewotICAgICAgICBvayA9IGZhbHNlOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0gICAgQVNTRVJUKHAgJiYgcSk7Ci0gICAgQVNTRVJUKGxlblAgPj0g
MCk7Ci0gICAgQVNTRVJUKGxlblEgPj0gMCk7Ci0gICAgQVNTRVJUKHAgKyBsZW5QICogMiA8PSBs
aW1pdFApOwotICAgIEFTU0VSVChxICsgbGVuUSAqIDIgPD0gbGltaXRRKTsKLQotICAgIGNvbnN0
IGNoYXIqIHN0YXJ0UCA9IHA7Ci0gICAgY29uc3QgY2hhciogc3RhcnRRID0gcTsKLSAgICBwICs9
IGxlblAgKiAyOwotICAgIHEgKz0gbGVuUSAqIDI7Ci0KLSAgICBpZiAocCA+IGxpbWl0UCB8fCBx
ID4gbGltaXRRKSB7Ci0gICAgICAgIG9rID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLQotICAgIG9rID0gdHJ1ZTsKLSAgICBjb25zdCBzaXplX3QgbG1pbiA9IHN0YXRpY19jYXN0
PHNpemVfdD4obGVuUCA8IGxlblEgPyBsZW5QIDogbGVuUSk7Ci0gICAgaWYgKGludCB4ID0gbWVt
Y21wKHN0YXJ0UCwgc3RhcnRRLCBsbWluICogMikpCi0gICAgICAgIHJldHVybiB4OwotCi0gICAg
aWYgKGxlblAgPT0gbGVuUSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gKGxlblAg
PiBsZW5RKSA/IDEgOiAtMTsKLX0KLQotVmVjdG9yPGNoYXI+IGVuY29kZURvdWJsZShkb3VibGUg
eCkKLXsKLSAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBjb3VsZCBiZSBieXRl
IG9yZGVyIGluZGVwZW5kZW50LgotICAgIGNvbnN0IGNoYXIqIHAgPSByZWludGVycHJldF9jYXN0
PGNoYXIqPigmeCk7Ci0gICAgVmVjdG9yPGNoYXIsIERlZmF1bHRJbmxpbmVCdWZmZXJTaXplPiB2
OwotICAgIHYuYXBwZW5kKHAsIHNpemVvZih4KSk7Ci0KLSAgICBBU1NFUlQodi5zaXplKCkgPD0g
RGVmYXVsdElubGluZUJ1ZmZlclNpemUpOwotICAgIHJldHVybiB2OwotfQotCi1jb25zdCBjaGFy
KiBkZWNvZGVEb3VibGUoY29uc3QgY2hhciogcCwgY29uc3QgY2hhciogbGltaXQsIGRvdWJsZSog
ZCkKLXsKLSAgICBpZiAocCArIHNpemVvZigqZCkgPiBsaW1pdCkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBjaGFyKiB4ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZCk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplb2YoKmQpOyArK2kpCi0gICAgICAgICp4KysgPSAqcCsrOwot
ICAgIHJldHVybiBwOwotfQotCi1WZWN0b3I8Y2hhcj4gZW5jb2RlSURCS2V5KGNvbnN0IElEQktl
eSYga2V5KQotewotICAgIFZlY3RvcjxjaGFyLCBEZWZhdWx0SW5saW5lQnVmZmVyU2l6ZT4gcmV0
OwotICAgIGVuY29kZUlEQktleShrZXksIHJldCk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotdm9p
ZCBlbmNvZGVJREJLZXkoY29uc3QgSURCS2V5JiBrZXksIFZlY3RvcjxjaGFyLCBEZWZhdWx0SW5s
aW5lQnVmZmVyU2l6ZT4mIGludG8pCi17Ci0gICAgc2l6ZV90IHByZXZpb3VzU2l6ZSA9IGludG8u
c2l6ZSgpOwotICAgIEFTU0VSVChrZXkuaXNWYWxpZCgpKTsKLSAgICBzd2l0Y2ggKGtleS50eXBl
KCkpIHsKLSAgICBjYXNlIElEQktleTo6SW52YWxpZFR5cGU6Ci0gICAgY2FzZSBJREJLZXk6Ok1p
blR5cGU6Ci0gICAgY2FzZSBJREJLZXk6Ok1heFR5cGU6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICBpbnRvLmFwcGVuZFZlY3RvcihlbmNvZGVCeXRlKElEQktleU51bGxU
eXBlQnl0ZSkpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJREJLZXk6OkFycmF5VHlwZTog
ewotICAgICAgICBpbnRvLmFwcGVuZFZlY3RvcihlbmNvZGVCeXRlKElEQktleUFycmF5VHlwZUJ5
dGUpKTsKLSAgICAgICAgc2l6ZV90IGxlbmd0aCA9IGtleS5hcnJheSgpLnNpemUoKTsKLSAgICAg
ICAgaW50by5hcHBlbmRWZWN0b3IoZW5jb2RlVmFySW50KGxlbmd0aCkpOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgZW5jb2RlSURCS2V5
KCprZXkuYXJyYXkoKVtpXSwgaW50byk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocHJldmlvdXNT
aXplLCBpbnRvLnNpemUoKSA+IHByZXZpb3VzU2l6ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgY2FzZSBJREJLZXk6OlN0cmluZ1R5cGU6Ci0gICAgICAgIGludG8uYXBwZW5kVmVjdG9y
KGVuY29kZUJ5dGUoSURCS2V5U3RyaW5nVHlwZUJ5dGUpKTsKLSAgICAgICAgaW50by5hcHBlbmRW
ZWN0b3IoZW5jb2RlU3RyaW5nV2l0aExlbmd0aChrZXkuc3RyaW5nKCkpKTsKLSAgICAgICAgQVNT
RVJUX1VOVVNFRChwcmV2aW91c1NpemUsIGludG8uc2l6ZSgpID4gcHJldmlvdXNTaXplKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgSURCS2V5OjpEYXRlVHlwZToKLSAgICAgICAgaW50by5h
cHBlbmRWZWN0b3IoZW5jb2RlQnl0ZShJREJLZXlEYXRlVHlwZUJ5dGUpKTsKLSAgICAgICAgaW50
by5hcHBlbmRWZWN0b3IoZW5jb2RlRG91YmxlKGtleS5kYXRlKCkpKTsKLSAgICAgICAgQVNTRVJU
X1VOVVNFRChwcmV2aW91c1NpemUsIGludG8uc2l6ZSgpIC0gcHJldmlvdXNTaXplID09IDkpOwot
ICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJREJLZXk6Ok51bWJlclR5cGU6Ci0gICAgICAgIGlu
dG8uYXBwZW5kVmVjdG9yKGVuY29kZUJ5dGUoSURCS2V5TnVtYmVyVHlwZUJ5dGUpKTsKLSAgICAg
ICAgaW50by5hcHBlbmRWZWN0b3IoZW5jb2RlRG91YmxlKGtleS5udW1iZXIoKSkpOwotICAgICAg
ICBBU1NFUlRfVU5VU0VEKHByZXZpb3VzU2l6ZSwgaW50by5zaXplKCkgLSBwcmV2aW91c1NpemUg
PT0gOSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLX0KLQotCi1jb25zdCBjaGFyKiBkZWNvZGVJREJLZXkoY29uc3QgY2hhciogcCwgY29uc3Qg
Y2hhciogbGltaXQsIFJlZlB0cjxJREJLZXk+JiBmb3VuZEtleSkKLXsKLSAgICBBU1NFUlQobGlt
aXQgPj0gcCk7Ci0gICAgaWYgKHAgPj0gbGltaXQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
dW5zaWduZWQgY2hhciB0eXBlID0gKnArKzsKLQotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNh
c2UgSURCS2V5TnVsbFR5cGVCeXRlOgotICAgICAgICBmb3VuZEtleSA9IElEQktleTo6Y3JlYXRl
SW52YWxpZCgpOwotICAgICAgICByZXR1cm4gcDsKLQotICAgIGNhc2UgSURCS2V5QXJyYXlUeXBl
Qnl0ZTogewotICAgICAgICBpbnQ2NF90IGxlbmd0aDsKLSAgICAgICAgcCA9IGRlY29kZVZhcklu
dChwLCBsaW1pdCwgbGVuZ3RoKTsKLSAgICAgICAgaWYgKCFwIHx8IGxlbmd0aCA8IDApCi0gICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgSURCS2V5OjpLZXlBcnJheSBhcnJheTsKLSAgICAg
ICAgd2hpbGUgKGxlbmd0aC0tKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXk7Ci0g
ICAgICAgICAgICBwID0gZGVjb2RlSURCS2V5KHAsIGxpbWl0LCBrZXkpOwotICAgICAgICAgICAg
aWYgKCFwKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgYXJyYXkuYXBw
ZW5kKGtleSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm91bmRLZXkgPSBJREJLZXk6OmNyZWF0ZUFy
cmF5KGFycmF5KTsKLSAgICAgICAgcmV0dXJuIHA7Ci0gICAgfQotICAgIGNhc2UgSURCS2V5U3Ry
aW5nVHlwZUJ5dGU6IHsKLSAgICAgICAgU3RyaW5nIHM7Ci0gICAgICAgIHAgPSBkZWNvZGVTdHJp
bmdXaXRoTGVuZ3RoKHAsIGxpbWl0LCBzKTsKLSAgICAgICAgaWYgKCFwKQotICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIGZvdW5kS2V5ID0gSURCS2V5OjpjcmVhdGVTdHJpbmcocyk7Ci0g
ICAgICAgIHJldHVybiBwOwotICAgIH0KLSAgICBjYXNlIElEQktleURhdGVUeXBlQnl0ZTogewot
ICAgICAgICBkb3VibGUgZDsKLSAgICAgICAgcCA9IGRlY29kZURvdWJsZShwLCBsaW1pdCwgJmQp
OwotICAgICAgICBpZiAoIXApCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgZm91bmRL
ZXkgPSBJREJLZXk6OmNyZWF0ZURhdGUoZCk7Ci0gICAgICAgIHJldHVybiBwOwotICAgIH0KLSAg
ICBjYXNlIElEQktleU51bWJlclR5cGVCeXRlOiB7Ci0gICAgICAgIGRvdWJsZSBkOwotICAgICAg
ICBwID0gZGVjb2RlRG91YmxlKHAsIGxpbWl0LCAmZCk7Ci0gICAgICAgIGlmICghcCkKLSAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICBmb3VuZEtleSA9IElEQktleTo6Y3JlYXRlTnVtYmVy
KGQpOwotICAgICAgICByZXR1cm4gcDsKLSAgICB9Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWNvbnN0IGNoYXIqIGV4dHJhY3RFbmNvZGVk
SURCS2V5KGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgVmVjdG9yPGNoYXI+
KiByZXN1bHQgPSAwKQotewotICAgIGNvbnN0IGNoYXIqIHAgPSBzdGFydDsKLSAgICBpZiAocCA+
PSBsaW1pdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB1bnNpZ25lZCBjaGFyIHR5cGUgPSAq
cCsrOwotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBJREJLZXlOdWxsVHlwZUJ5dGU6
Ci0gICAgY2FzZSBJREJLZXlNaW5LZXlUeXBlQnl0ZToKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJREJLZXlBcnJheVR5cGVCeXRlOiB7Ci0gICAgICAgIGludDY0X3QgbGVuZ3RoOwotICAgICAg
ICBwID0gZGVjb2RlVmFySW50KHAsIGxpbWl0LCBsZW5ndGgpOwotICAgICAgICBpZiAoIXAgfHwg
bGVuZ3RoIDwgMCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB3aGlsZSAobGVuZ3Ro
LS0pIHsKLSAgICAgICAgICAgIHAgPSBleHRyYWN0RW5jb2RlZElEQktleShwLCBsaW1pdCk7Ci0g
ICAgICAgICAgICBpZiAoIXApCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgSURCS2V5U3RyaW5nVHlwZUJ5dGU6IHsK
LSAgICAgICAgaW50NjRfdCBsZW5ndGg7Ci0gICAgICAgIHAgPSBkZWNvZGVWYXJJbnQocCwgbGlt
aXQsIGxlbmd0aCk7Ci0gICAgICAgIGlmICghcCB8fCBsZW5ndGggPCAwIHx8IHAgKyBsZW5ndGgg
KiAyID4gbGltaXQpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcCArPSBsZW5ndGgg
KiAyOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBJREJLZXlEYXRlVHlwZUJ5dGU6
Ci0gICAgY2FzZSBJREJLZXlOdW1iZXJUeXBlQnl0ZToKLSAgICAgICAgaWYgKHAgKyBzaXplb2Yo
ZG91YmxlKSA+IGxpbWl0KQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHAgKz0gc2l6
ZW9mKGRvdWJsZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmIChyZXN1bHQpIHsK
LSAgICAgICAgQVNTRVJUKHApOwotICAgICAgICBBU1NFUlQocCA8PSBsaW1pdCk7Ci0gICAgICAg
IHJlc3VsdC0+Y2xlYXIoKTsKLSAgICAgICAgcmVzdWx0LT5hcHBlbmQoc3RhcnQsIHAgLSBzdGFy
dCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHA7Ci19Ci0KLXN0YXRpYyBJREJLZXk6OlR5cGUga2V5
VHlwZUJ5dGVUb0tleVR5cGUodW5zaWduZWQgY2hhciB0eXBlKQotewotICAgIHN3aXRjaCAodHlw
ZSkgewotICAgIGNhc2UgSURCS2V5TnVsbFR5cGVCeXRlOgotICAgICAgICByZXR1cm4gSURCS2V5
OjpJbnZhbGlkVHlwZTsKLSAgICBjYXNlIElEQktleUFycmF5VHlwZUJ5dGU6Ci0gICAgICAgIHJl
dHVybiBJREJLZXk6OkFycmF5VHlwZTsKLSAgICBjYXNlIElEQktleVN0cmluZ1R5cGVCeXRlOgot
ICAgICAgICByZXR1cm4gSURCS2V5OjpTdHJpbmdUeXBlOwotICAgIGNhc2UgSURCS2V5RGF0ZVR5
cGVCeXRlOgotICAgICAgICByZXR1cm4gSURCS2V5OjpEYXRlVHlwZTsKLSAgICBjYXNlIElEQktl
eU51bWJlclR5cGVCeXRlOgotICAgICAgICByZXR1cm4gSURCS2V5OjpOdW1iZXJUeXBlOwotICAg
IGNhc2UgSURCS2V5TWluS2V5VHlwZUJ5dGU6Ci0gICAgICAgIHJldHVybiBJREJLZXk6Ok1pblR5
cGU7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIElEQktl
eTo6SW52YWxpZFR5cGU7Ci19Ci0KLXN0YXRpYyBpbnQgY29tcGFyZUVuY29kZWRJREJLZXlzKGNv
bnN0IGNoYXIqJiBwdHJBLCBjb25zdCBjaGFyKiBsaW1pdEEsIGNvbnN0IGNoYXIqJiBwdHJCLCBj
b25zdCBjaGFyKiBsaW1pdEIsIGJvb2wmIG9rKQotewotICAgIG9rID0gdHJ1ZTsKLSAgICBBU1NF
UlQoJnB0ckEgIT0gJnB0ckIpOwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KHB0ckEgPCBsaW1pdEEpOwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHB0
ckIgPCBsaW1pdEIpOwotICAgIHVuc2lnbmVkIGNoYXIgdHlwZUEgPSAqcHRyQSsrOwotICAgIHVu
c2lnbmVkIGNoYXIgdHlwZUIgPSAqcHRyQisrOwotCi0gICAgaWYgKGludCB4ID0gSURCS2V5Ojpj
b21wYXJlVHlwZXMoa2V5VHlwZUJ5dGVUb0tleVR5cGUodHlwZUEpLCBrZXlUeXBlQnl0ZVRvS2V5
VHlwZSh0eXBlQikpKQotICAgICAgICByZXR1cm4geDsKLQotICAgIHN3aXRjaCAodHlwZUEpIHsK
LSAgICBjYXNlIElEQktleU51bGxUeXBlQnl0ZToKLSAgICBjYXNlIElEQktleU1pbktleVR5cGVC
eXRlOgotICAgICAgICAvLyBOdWxsIHR5cGUgb3IgbWF4IHR5cGU7IG5vIHBheWxvYWQgdG8gY29t
cGFyZS4KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBJREJLZXlBcnJheVR5cGVCeXRlOiB7
Ci0gICAgICAgIGludDY0X3QgbGVuZ3RoQSwgbGVuZ3RoQjsKLSAgICAgICAgcHRyQSA9IGRlY29k
ZVZhckludChwdHJBLCBsaW1pdEEsIGxlbmd0aEEpOwotICAgICAgICBwdHJCID0gZGVjb2RlVmFy
SW50KHB0ckIsIGxpbWl0QiwgbGVuZ3RoQik7Ci0gICAgICAgIGlmICghcHRyQSB8fCAhcHRyQiB8
fCBsZW5ndGhBIDwgMCB8fCBsZW5ndGhCIDwgMCkgewotICAgICAgICAgICAgb2sgPSBmYWxzZTsK
LSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaW50NjRfdCBp
ID0gMDsgaSA8IGxlbmd0aEEgJiYgaSA8IGxlbmd0aEI7ICsraSkgewotICAgICAgICAgICAgaW50
IHJlc3VsdCA9IGNvbXBhcmVFbmNvZGVkSURCS2V5cyhwdHJBLCBsaW1pdEEsIHB0ckIsIGxpbWl0
Qiwgb2spOwotICAgICAgICAgICAgaWYgKCFvayB8fCByZXN1bHQpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgICBpZiAobGVuZ3RoQSA8IGxlbmd0aEIp
Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGlmIChsZW5ndGhBID4gbGVuZ3RoQikK
LSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgY2Fz
ZSBJREJLZXlTdHJpbmdUeXBlQnl0ZToKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVFbmNvZGVkU3Ry
aW5nc1dpdGhMZW5ndGgocHRyQSwgbGltaXRBLCBwdHJCLCBsaW1pdEIsIG9rKTsKLSAgICBjYXNl
IElEQktleURhdGVUeXBlQnl0ZToKLSAgICBjYXNlIElEQktleU51bWJlclR5cGVCeXRlOiB7Ci0g
ICAgICAgIGRvdWJsZSBkLCBlOwotICAgICAgICBwdHJBID0gZGVjb2RlRG91YmxlKHB0ckEsIGxp
bWl0QSwgJmQpOwotICAgICAgICBwdHJCID0gZGVjb2RlRG91YmxlKHB0ckIsIGxpbWl0QiwgJmUp
OwotICAgICAgICBBU1NFUlQocHRyQSk7Ci0gICAgICAgIEFTU0VSVChwdHJCKTsKLSAgICAgICAg
aWYgKCFwdHJBIHx8ICFwdHJCKSB7Ci0gICAgICAgICAgICBvayA9IGZhbHNlOwotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGQgPCBlKQotICAgICAgICAgICAg
cmV0dXJuIC0xOwotICAgICAgICBpZiAoZCA+IGUpCi0gICAgICAgICAgICByZXR1cm4gMTsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiAwOwotfQotCi1pbnQgY29tcGFyZUVuY29kZWRJREJLZXlzKGNvbnN0IFZl
Y3RvcjxjaGFyPiYga2V5QSwgY29uc3QgVmVjdG9yPGNoYXI+JiBrZXlCLCBib29sJiBvaykKLXsK
LSAgICBBU1NFUlQoa2V5QS5zaXplKCkgPj0gMSk7Ci0gICAgQVNTRVJUKGtleUIuc2l6ZSgpID49
IDEpOwotCi0gICAgY29uc3QgY2hhciogcHRyQSA9IGtleUEuZGF0YSgpOwotICAgIGNvbnN0IGNo
YXIqIGxpbWl0QSA9IHB0ckEgKyBrZXlBLnNpemUoKTsKLSAgICBjb25zdCBjaGFyKiBwdHJCID0g
a2V5Qi5kYXRhKCk7Ci0gICAgY29uc3QgY2hhciogbGltaXRCID0gcHRyQiArIGtleUIuc2l6ZSgp
OwotCi0gICAgcmV0dXJuIGNvbXBhcmVFbmNvZGVkSURCS2V5cyhwdHJBLCBsaW1pdEEsIHB0ckIs
IGxpbWl0Qiwgb2spOwotfQotCi1WZWN0b3I8Y2hhcj4gZW5jb2RlSURCS2V5UGF0aChjb25zdCBJ
REJLZXlQYXRoJiBrZXlQYXRoKQotewotICAgIC8vIE1heSBiZSB0eXBlZCwgb3IgbWF5IGJlIGEg
cmF3IHN0cmluZy4gQW4gaW52YWxpZCBsZWFkaW5nCi0gICAgLy8gYnl0ZSBpcyB1c2VkIHRvIGlk
ZW50aWZ5IHR5cGVkIGNvZGluZy4gTmV3IHJlY29yZHMgYXJlCi0gICAgLy8gYWx3YXlzIHdyaXR0
ZW4gYXMgdHlwZWQuCi0gICAgVmVjdG9yPGNoYXIsIERlZmF1bHRJbmxpbmVCdWZmZXJTaXplPiBy
ZXQ7Ci0gICAgcmV0LmFwcGVuZChJREJLZXlQYXRoVHlwZUNvZGVkQnl0ZTEpOwotICAgIHJldC5h
cHBlbmQoSURCS2V5UGF0aFR5cGVDb2RlZEJ5dGUyKTsKLSAgICByZXQuYXBwZW5kKHN0YXRpY19j
YXN0PGNoYXI+KGtleVBhdGgudHlwZSgpKSk7Ci0gICAgc3dpdGNoIChrZXlQYXRoLnR5cGUoKSkg
ewotICAgIGNhc2UgSURCS2V5UGF0aDo6TnVsbFR5cGU6Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSURCS2V5UGF0aDo6U3RyaW5nVHlwZToKLSAgICAgICAgcmV0LmFwcGVuZFZlY3RvcihlbmNv
ZGVTdHJpbmdXaXRoTGVuZ3RoKGtleVBhdGguc3RyaW5nKCkpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJREJLZXlQYXRoOjpBcnJheVR5cGU6IHsKLSAgICAgICAgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGFycmF5ID0ga2V5UGF0aC5hcnJheSgpOwotICAgICAgICBzaXplX3QgY291bnQgPSBh
cnJheS5zaXplKCk7Ci0gICAgICAgIHJldC5hcHBlbmRWZWN0b3IoZW5jb2RlVmFySW50KGNvdW50
KSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAg
ICAgIHJldC5hcHBlbmRWZWN0b3IoZW5jb2RlU3RyaW5nV2l0aExlbmd0aChhcnJheVtpXSkpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXQ7Ci19Ci0KLUlEQktl
eVBhdGggZGVjb2RlSURCS2V5UGF0aChjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBsaW1pdCkK
LXsKLSAgICAvLyBNYXkgYmUgdHlwZWQsIG9yIG1heSBiZSBhIHJhdyBzdHJpbmcuIEFuIGludmFs
aWQgbGVhZGluZwotICAgIC8vIGJ5dGUgc2VxdWVuY2UgaXMgdXNlZCB0byBpZGVudGlmeSB0eXBl
ZCBjb2RpbmcuIE5ldyByZWNvcmRzIGFyZQotICAgIC8vIGFsd2F5cyB3cml0dGVuIGFzIHR5cGVk
LgotICAgIGlmIChwID09IGxpbWl0IHx8IChsaW1pdCAtIHAgPj0gMiAmJiAoKnAgIT0gSURCS2V5
UGF0aFR5cGVDb2RlZEJ5dGUxIHx8ICoocCArIDEpICE9IElEQktleVBhdGhUeXBlQ29kZWRCeXRl
MikpKQotICAgICAgICByZXR1cm4gSURCS2V5UGF0aChkZWNvZGVTdHJpbmcocCwgbGltaXQpKTsK
LSAgICBwICs9IDI7Ci0KLSAgICBBU1NFUlQocCAhPSBsaW1pdCk7Ci0gICAgSURCS2V5UGF0aDo6
VHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8SURCS2V5UGF0aDo6VHlwZT4oKnArKyk7Ci0gICAgc3dp
dGNoICh0eXBlKSB7Ci0gICAgY2FzZSBJREJLZXlQYXRoOjpOdWxsVHlwZToKLSAgICAgICAgQVNT
RVJUKHAgPT0gbGltaXQpOwotICAgICAgICByZXR1cm4gSURCS2V5UGF0aCgpOwotICAgIGNhc2Ug
SURCS2V5UGF0aDo6U3RyaW5nVHlwZTogewotICAgICAgICBTdHJpbmcgc3RyaW5nOwotICAgICAg
ICBwID0gZGVjb2RlU3RyaW5nV2l0aExlbmd0aChwLCBsaW1pdCwgc3RyaW5nKTsKLSAgICAgICAg
QVNTRVJUKHAgPT0gbGltaXQpOwotICAgICAgICByZXR1cm4gSURCS2V5UGF0aChzdHJpbmcpOwot
ICAgIH0KLSAgICBjYXNlIElEQktleVBhdGg6OkFycmF5VHlwZTogewotICAgICAgICBWZWN0b3I8
U3RyaW5nPiBhcnJheTsKLSAgICAgICAgaW50NjRfdCBjb3VudDsKLSAgICAgICAgcCA9IGRlY29k
ZVZhckludChwLCBsaW1pdCwgY291bnQpOwotICAgICAgICBBU1NFUlQocCk7Ci0gICAgICAgIEFT
U0VSVChjb3VudCA+PSAwKTsKLSAgICAgICAgd2hpbGUgKGNvdW50LS0pIHsKLSAgICAgICAgICAg
IFN0cmluZyBzdHJpbmc7Ci0gICAgICAgICAgICBwID0gZGVjb2RlU3RyaW5nV2l0aExlbmd0aChw
LCBsaW1pdCwgc3RyaW5nKTsKLSAgICAgICAgICAgIEFTU0VSVChwKTsKLSAgICAgICAgICAgIGFy
cmF5LmFwcGVuZChzdHJpbmcpOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChwID09IGxpbWl0
KTsKLSAgICAgICAgcmV0dXJuIElEQktleVBhdGgoYXJyYXkpOwotICAgIH0KLSAgICB9Ci0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIElEQktleVBhdGgoKTsKLX0KLQotbmFt
ZXNwYWNlIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZT4KLWludCBjb21wYXJlKGNvbnN0
IExldmVsREJTbGljZSYgYSwgY29uc3QgTGV2ZWxEQlNsaWNlJiBiLCBib29sLCBib29sJiBvaykK
LXsKLSAgICBLZXlUeXBlIGtleUE7Ci0gICAgS2V5VHlwZSBrZXlCOwotCi0gICAgY29uc3QgY2hh
ciogcHRyQSA9IEtleVR5cGU6OmRlY29kZShhLmJlZ2luKCksIGEuZW5kKCksICZrZXlBKTsKLSAg
ICBBU1NFUlQocHRyQSk7Ci0gICAgaWYgKCFwdHJBKSB7Ci0gICAgICAgIG9rID0gZmFsc2U7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBjb25zdCBjaGFyKiBwdHJCID0gS2V5VHlwZTo6
ZGVjb2RlKGIuYmVnaW4oKSwgYi5lbmQoKSwgJmtleUIpOwotICAgIEFTU0VSVChwdHJCKTsKLSAg
ICBpZiAoIXB0ckIpIHsKLSAgICAgICAgb2sgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotCi0gICAgb2sgPSB0cnVlOwotICAgIHJldHVybiBrZXlBLmNvbXBhcmUoa2V5Qik7Ci19
Ci0KLXRlbXBsYXRlPD4KLWludCBjb21wYXJlPEV4aXN0c0VudHJ5S2V5Pihjb25zdCBMZXZlbERC
U2xpY2UmIGEsIGNvbnN0IExldmVsREJTbGljZSYgYiwgYm9vbCwgYm9vbCYgb2spCi17Ci0gICAg
S2V5UHJlZml4IHByZWZpeEE7Ci0gICAgS2V5UHJlZml4IHByZWZpeEI7Ci0gICAgY29uc3QgY2hh
ciogcHRyQSA9IEtleVByZWZpeDo6ZGVjb2RlKGEuYmVnaW4oKSwgYS5lbmQoKSwgJnByZWZpeEEp
OwotICAgIGNvbnN0IGNoYXIqIHB0ckIgPSBLZXlQcmVmaXg6OmRlY29kZShiLmJlZ2luKCksIGIu
ZW5kKCksICZwcmVmaXhCKTsKLSAgICBBU1NFUlQocHRyQSk7Ci0gICAgQVNTRVJUKHB0ckIpOwot
ICAgIEFTU0VSVChwcmVmaXhBLm1fZGF0YWJhc2VJZCk7Ci0gICAgQVNTRVJUKHByZWZpeEEubV9v
YmplY3RTdG9yZUlkKTsKLSAgICBBU1NFUlQocHJlZml4QS5tX2luZGV4SWQgPT0gRXhpc3RzRW50
cnlLZXk6OlNwZWNpYWxJbmRleE51bWJlcik7Ci0gICAgQVNTRVJUKHByZWZpeEIubV9kYXRhYmFz
ZUlkKTsKLSAgICBBU1NFUlQocHJlZml4Qi5tX29iamVjdFN0b3JlSWQpOwotICAgIEFTU0VSVChw
cmVmaXhCLm1faW5kZXhJZCA9PSBFeGlzdHNFbnRyeUtleTo6U3BlY2lhbEluZGV4TnVtYmVyKTsK
LSAgICBBU1NFUlQocHRyQSAhPSBhLmVuZCgpKTsKLSAgICBBU1NFUlQocHRyQiAhPSBiLmVuZCgp
KTsKLSAgICAvLyBQcmVmaXhlcyBhcmUgbm90IGNvbXBhcmVkIC0gaXQgaXMgYXNzdW1lZCB0aGlz
IHdhcyBhbHJlYWR5IGRvbmUuCi0gICAgQVNTRVJUKCFwcmVmaXhBLmNvbXBhcmUocHJlZml4Qikp
OwotCi0gICAgcmV0dXJuIGNvbXBhcmVFbmNvZGVkSURCS2V5cyhwdHJBLCBhLmVuZCgpLCBwdHJC
LCBiLmVuZCgpLCBvayk7Ci19Ci0KLXRlbXBsYXRlPD4KLWludCBjb21wYXJlPE9iamVjdFN0b3Jl
RGF0YUtleT4oY29uc3QgTGV2ZWxEQlNsaWNlJiBhLCBjb25zdCBMZXZlbERCU2xpY2UmIGIsIGJv
b2wsIGJvb2wmIG9rKQotewotICAgIEtleVByZWZpeCBwcmVmaXhBOwotICAgIEtleVByZWZpeCBw
cmVmaXhCOwotICAgIGNvbnN0IGNoYXIqIHB0ckEgPSBLZXlQcmVmaXg6OmRlY29kZShhLmJlZ2lu
KCksIGEuZW5kKCksICZwcmVmaXhBKTsKLSAgICBjb25zdCBjaGFyKiBwdHJCID0gS2V5UHJlZml4
OjpkZWNvZGUoYi5iZWdpbigpLCBiLmVuZCgpLCAmcHJlZml4Qik7Ci0gICAgQVNTRVJUKHB0ckEp
OwotICAgIEFTU0VSVChwdHJCKTsKLSAgICBBU1NFUlQocHJlZml4QS5tX2RhdGFiYXNlSWQpOwot
ICAgIEFTU0VSVChwcmVmaXhBLm1fb2JqZWN0U3RvcmVJZCk7Ci0gICAgQVNTRVJUKHByZWZpeEEu
bV9pbmRleElkID09IE9iamVjdFN0b3JlRGF0YUtleTo6U3BlY2lhbEluZGV4TnVtYmVyKTsKLSAg
ICBBU1NFUlQocHJlZml4Qi5tX2RhdGFiYXNlSWQpOwotICAgIEFTU0VSVChwcmVmaXhCLm1fb2Jq
ZWN0U3RvcmVJZCk7Ci0gICAgQVNTRVJUKHByZWZpeEIubV9pbmRleElkID09IE9iamVjdFN0b3Jl
RGF0YUtleTo6U3BlY2lhbEluZGV4TnVtYmVyKTsKLSAgICBBU1NFUlQocHRyQSAhPSBhLmVuZCgp
KTsKLSAgICBBU1NFUlQocHRyQiAhPSBiLmVuZCgpKTsKLSAgICAvLyBQcmVmaXhlcyBhcmUgbm90
IGNvbXBhcmVkIC0gaXQgaXMgYXNzdW1lZCB0aGlzIHdhcyBhbHJlYWR5IGRvbmUuCi0gICAgQVNT
RVJUKCFwcmVmaXhBLmNvbXBhcmUocHJlZml4QikpOwotCi0gICAgcmV0dXJuIGNvbXBhcmVFbmNv
ZGVkSURCS2V5cyhwdHJBLCBhLmVuZCgpLCBwdHJCLCBiLmVuZCgpLCBvayk7Ci19Ci0KLXRlbXBs
YXRlPD4KLWludCBjb21wYXJlPEluZGV4RGF0YUtleT4oY29uc3QgTGV2ZWxEQlNsaWNlJiBhLCBj
b25zdCBMZXZlbERCU2xpY2UmIGIsIGJvb2wgaWdub3JlRHVwbGljYXRlcywgYm9vbCYgb2spCi17
Ci0gICAgS2V5UHJlZml4IHByZWZpeEE7Ci0gICAgS2V5UHJlZml4IHByZWZpeEI7Ci0gICAgY29u
c3QgY2hhciogcHRyQSA9IEtleVByZWZpeDo6ZGVjb2RlKGEuYmVnaW4oKSwgYS5lbmQoKSwgJnBy
ZWZpeEEpOwotICAgIGNvbnN0IGNoYXIqIHB0ckIgPSBLZXlQcmVmaXg6OmRlY29kZShiLmJlZ2lu
KCksIGIuZW5kKCksICZwcmVmaXhCKTsKLSAgICBBU1NFUlQocHRyQSk7Ci0gICAgQVNTRVJUKHB0
ckIpOwotICAgIEFTU0VSVChwcmVmaXhBLm1fZGF0YWJhc2VJZCk7Ci0gICAgQVNTRVJUKHByZWZp
eEEubV9vYmplY3RTdG9yZUlkKTsKLSAgICBBU1NFUlQocHJlZml4QS5tX2luZGV4SWQgPj0gTWlu
aW11bUluZGV4SWQpOwotICAgIEFTU0VSVChwcmVmaXhCLm1fZGF0YWJhc2VJZCk7Ci0gICAgQVNT
RVJUKHByZWZpeEIubV9vYmplY3RTdG9yZUlkKTsKLSAgICBBU1NFUlQocHJlZml4Qi5tX2luZGV4
SWQgPj0gTWluaW11bUluZGV4SWQpOwotICAgIEFTU0VSVChwdHJBICE9IGEuZW5kKCkpOwotICAg
IEFTU0VSVChwdHJCICE9IGIuZW5kKCkpOwotICAgIC8vIFByZWZpeGVzIGFyZSBub3QgY29tcGFy
ZWQgLSBpdCBpcyBhc3N1bWVkIHRoaXMgd2FzIGFscmVhZHkgZG9uZS4KLSAgICBBU1NFUlQoIXBy
ZWZpeEEuY29tcGFyZShwcmVmaXhCKSk7Ci0KLSAgICAvLyBpbmRleCBrZXkKLSAgICBpbnQgcmVz
dWx0ID0gY29tcGFyZUVuY29kZWRJREJLZXlzKHB0ckEsIGEuZW5kKCksIHB0ckIsIGIuZW5kKCks
IG9rKTsKLSAgICBpZiAoIW9rIHx8IHJlc3VsdCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICBpZiAoaWdub3JlRHVwbGljYXRlcykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBzZXF1
ZW5jZSBudW1iZXIgW29wdGlvbmFsXQotICAgIGludDY0X3Qgc2VxdWVuY2VOdW1iZXJBID0gLTE7
Ci0gICAgaW50NjRfdCBzZXF1ZW5jZU51bWJlckIgPSAtMTsKLSAgICBpZiAocHRyQSAhPSBhLmVu
ZCgpKQotICAgICAgICBwdHJBID0gZGVjb2RlVmFySW50KHB0ckEsIGEuZW5kKCksIHNlcXVlbmNl
TnVtYmVyQSk7Ci0gICAgaWYgKHB0ckIgIT0gYi5lbmQoKSkKLSAgICAgICAgcHRyQiA9IGRlY29k
ZVZhckludChwdHJCLCBiLmVuZCgpLCBzZXF1ZW5jZU51bWJlckIpOwotCi0gICAgLy8gcHJpbWFy
eSBrZXkgW29wdGlvbmFsXQotICAgIGlmICghcHRyQSB8fCAhcHRyQikKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgaWYgKHB0ckEgPT0gYS5lbmQoKSAmJiBwdHJCID09IGIuZW5kKCkpCi0gICAgICAg
IHJldHVybiAwOwotICAgIGlmIChwdHJBID09IGEuZW5kKCkpCi0gICAgICAgIHJldHVybiAtMTsK
LSAgICBpZiAocHRyQiA9PSBiLmVuZCgpKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIHJlc3Vs
dCA9IGNvbXBhcmVFbmNvZGVkSURCS2V5cyhwdHJBLCBhLmVuZCgpLCBwdHJCLCBiLmVuZCgpLCBv
ayk7Ci0gICAgaWYgKCFvayB8fCByZXN1bHQpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAg
ICByZXR1cm4gY29tcGFyZUludHMoc2VxdWVuY2VOdW1iZXJBLCBzZXF1ZW5jZU51bWJlckIpOwot
fQotCi1pbnQgY29tcGFyZShjb25zdCBMZXZlbERCU2xpY2UmIGEsIGNvbnN0IExldmVsREJTbGlj
ZSYgYiwgYm9vbCBpbmRleEtleXMsIGJvb2wmIG9rKQotewotICAgIGNvbnN0IGNoYXIqIHB0ckEg
PSBhLmJlZ2luKCk7Ci0gICAgY29uc3QgY2hhciogcHRyQiA9IGIuYmVnaW4oKTsKLSAgICBjb25z
dCBjaGFyKiBlbmRBID0gYS5lbmQoKTsKLSAgICBjb25zdCBjaGFyKiBlbmRCID0gYi5lbmQoKTsK
LQotICAgIEtleVByZWZpeCBwcmVmaXhBOwotICAgIEtleVByZWZpeCBwcmVmaXhCOwotCi0gICAg
cHRyQSA9IEtleVByZWZpeDo6ZGVjb2RlKHB0ckEsIGVuZEEsICZwcmVmaXhBKTsKLSAgICBwdHJC
ID0gS2V5UHJlZml4OjpkZWNvZGUocHRyQiwgZW5kQiwgJnByZWZpeEIpOwotICAgIEFTU0VSVChw
dHJBKTsKLSAgICBBU1NFUlQocHRyQik7Ci0gICAgaWYgKCFwdHJBIHx8ICFwdHJCKSB7Ci0gICAg
ICAgIG9rID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIG9rID0gdHJ1
ZTsKLSAgICBpZiAoaW50IHggPSBwcmVmaXhBLmNvbXBhcmUocHJlZml4QikpCi0gICAgICAgIHJl
dHVybiB4OwotCi0gICAgaWYgKHByZWZpeEEudHlwZSgpID09IEtleVByZWZpeDo6R2xvYmFsTWV0
YURhdGEpIHsKLSAgICAgICAgQVNTRVJUKHB0ckEgIT0gZW5kQSk7Ci0gICAgICAgIEFTU0VSVChw
dHJCICE9IGVuZEIpOwotCi0gICAgICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGVBID0gKnB0ckEr
KzsKLSAgICAgICAgdW5zaWduZWQgY2hhciB0eXBlQnl0ZUIgPSAqcHRyQisrOwotCi0gICAgICAg
IGlmIChpbnQgeCA9IHR5cGVCeXRlQSAtIHR5cGVCeXRlQikKLSAgICAgICAgICAgIHJldHVybiB4
OwotICAgICAgICBpZiAodHlwZUJ5dGVBIDwgTWF4U2ltcGxlR2xvYmFsTWV0YURhdGFUeXBlQnl0
ZSkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIGNvbnN0IGJvb2wgaWdub3JlRHVw
bGljYXRlcyA9IGZhbHNlOwotICAgICAgICBpZiAodHlwZUJ5dGVBID09IERhdGFiYXNlRnJlZUxp
c3RUeXBlQnl0ZSkKLSAgICAgICAgICAgIHJldHVybiBjb21wYXJlPERhdGFiYXNlRnJlZUxpc3RL
ZXk+KGEsIGIsIGlnbm9yZUR1cGxpY2F0ZXMsIG9rKTsKLSAgICAgICAgaWYgKHR5cGVCeXRlQSA9
PSBEYXRhYmFzZU5hbWVUeXBlQnl0ZSkKLSAgICAgICAgICAgIHJldHVybiBjb21wYXJlPERhdGFi
YXNlTmFtZUtleT4oYSwgYiwgaWdub3JlRHVwbGljYXRlcywgb2spOwotICAgIH0KLQotICAgIGlm
IChwcmVmaXhBLnR5cGUoKSA9PSBLZXlQcmVmaXg6OkRhdGFiYXNlTWV0YURhdGEpIHsKLSAgICAg
ICAgQVNTRVJUKHB0ckEgIT0gZW5kQSk7Ci0gICAgICAgIEFTU0VSVChwdHJCICE9IGVuZEIpOwot
Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGVBID0gKnB0ckErKzsKLSAgICAgICAgdW5z
aWduZWQgY2hhciB0eXBlQnl0ZUIgPSAqcHRyQisrOwotCi0gICAgICAgIGlmIChpbnQgeCA9IHR5
cGVCeXRlQSAtIHR5cGVCeXRlQikKLSAgICAgICAgICAgIHJldHVybiB4OwotICAgICAgICBpZiAo
dHlwZUJ5dGVBIDwgRGF0YWJhc2VNZXRhRGF0YUtleTo6TWF4U2ltcGxlTWV0YURhdGFUeXBlKQot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgY29uc3QgYm9vbCBpZ25vcmVEdXBsaWNh
dGVzID0gZmFsc2U7Ci0gICAgICAgIGlmICh0eXBlQnl0ZUEgPT0gT2JqZWN0U3RvcmVNZXRhRGF0
YVR5cGVCeXRlKQotICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmU8T2JqZWN0U3RvcmVNZXRhRGF0
YUtleT4oYSwgYiwgaWdub3JlRHVwbGljYXRlcywgb2spOwotICAgICAgICBpZiAodHlwZUJ5dGVB
ID09IEluZGV4TWV0YURhdGFUeXBlQnl0ZSkKLSAgICAgICAgICAgIHJldHVybiBjb21wYXJlPElu
ZGV4TWV0YURhdGFLZXk+KGEsIGIsIGlnbm9yZUR1cGxpY2F0ZXMsIG9rKTsKLSAgICAgICAgaWYg
KHR5cGVCeXRlQSA9PSBPYmplY3RTdG9yZUZyZWVMaXN0VHlwZUJ5dGUpCi0gICAgICAgICAgICBy
ZXR1cm4gY29tcGFyZTxPYmplY3RTdG9yZUZyZWVMaXN0S2V5PihhLCBiLCBpZ25vcmVEdXBsaWNh
dGVzLCBvayk7Ci0gICAgICAgIGlmICh0eXBlQnl0ZUEgPT0gSW5kZXhGcmVlTGlzdFR5cGVCeXRl
KQotICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmU8SW5kZXhGcmVlTGlzdEtleT4oYSwgYiwgaWdu
b3JlRHVwbGljYXRlcywgb2spOwotICAgICAgICBpZiAodHlwZUJ5dGVBID09IE9iamVjdFN0b3Jl
TmFtZXNUeXBlQnl0ZSkKLSAgICAgICAgICAgIHJldHVybiBjb21wYXJlPE9iamVjdFN0b3JlTmFt
ZXNLZXk+KGEsIGIsIGlnbm9yZUR1cGxpY2F0ZXMsIG9rKTsKLSAgICAgICAgaWYgKHR5cGVCeXRl
QSA9PSBJbmRleE5hbWVzS2V5VHlwZUJ5dGUpCi0gICAgICAgICAgICByZXR1cm4gY29tcGFyZTxJ
bmRleE5hbWVzS2V5PihhLCBiLCBpZ25vcmVEdXBsaWNhdGVzLCBvayk7Ci0gICAgfQotCi0gICAg
aWYgKHByZWZpeEEudHlwZSgpID09IEtleVByZWZpeDo6T2JqZWN0U3RvcmVEYXRhKSB7Ci0gICAg
ICAgIGlmIChwdHJBID09IGVuZEEgJiYgcHRyQiA9PSBlbmRCKQotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIGlmIChwdHJBID09IGVuZEEpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0g
ICAgICAgIGlmIChwdHJCID09IGVuZEIpCi0gICAgICAgICAgICByZXR1cm4gMTsgLy8gRklYTUU6
IFRoaXMgY2FzZSBvZiBub24tZXhpc3RpbmcgdXNlciBrZXlzIHNob3VsZCBub3QgaGF2ZSB0byBi
ZSBoYW5kbGVkIHRoaXMgd2F5LgotCi0gICAgICAgIGNvbnN0IGJvb2wgaWdub3JlRHVwbGljYXRl
cyA9IGZhbHNlOwotICAgICAgICByZXR1cm4gY29tcGFyZTxPYmplY3RTdG9yZURhdGFLZXk+KGEs
IGIsIGlnbm9yZUR1cGxpY2F0ZXMsIG9rKTsKLSAgICB9Ci0gICAgaWYgKHByZWZpeEEudHlwZSgp
ID09IEtleVByZWZpeDo6RXhpc3RzRW50cnkpIHsKLSAgICAgICAgaWYgKHB0ckEgPT0gZW5kQSAm
JiBwdHJCID09IGVuZEIpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgaWYgKHB0ckEg
PT0gZW5kQSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgaWYgKHB0ckIgPT0gZW5k
QikKLSAgICAgICAgICAgIHJldHVybiAxOyAvLyBGSVhNRTogVGhpcyBjYXNlIG9mIG5vbi1leGlz
dGluZyB1c2VyIGtleXMgc2hvdWxkIG5vdCBoYXZlIHRvIGJlIGhhbmRsZWQgdGhpcyB3YXkuCi0K
LSAgICAgICAgY29uc3QgYm9vbCBpZ25vcmVEdXBsaWNhdGVzID0gZmFsc2U7Ci0gICAgICAgIHJl
dHVybiBjb21wYXJlPEV4aXN0c0VudHJ5S2V5PihhLCBiLCBpZ25vcmVEdXBsaWNhdGVzLCBvayk7
Ci0gICAgfQotICAgIGlmIChwcmVmaXhBLnR5cGUoKSA9PSBLZXlQcmVmaXg6OkluZGV4RGF0YSkg
ewotICAgICAgICBpZiAocHRyQSA9PSBlbmRBICYmIHB0ckIgPT0gZW5kQikKLSAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICBpZiAocHRyQSA9PSBlbmRBKQotICAgICAgICAgICAgcmV0dXJu
IC0xOwotICAgICAgICBpZiAocHRyQiA9PSBlbmRCKQotICAgICAgICAgICAgcmV0dXJuIDE7IC8v
IEZJWE1FOiBUaGlzIGNhc2Ugb2Ygbm9uLWV4aXN0aW5nIHVzZXIga2V5cyBzaG91bGQgbm90IGhh
dmUgdG8gYmUgaGFuZGxlZCB0aGlzIHdheS4KLQotICAgICAgICBib29sIGlnbm9yZUR1cGxpY2F0
ZXMgPSBpbmRleEtleXM7Ci0gICAgICAgIHJldHVybiBjb21wYXJlPEluZGV4RGF0YUtleT4oYSwg
YiwgaWdub3JlRHVwbGljYXRlcywgb2spOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIG9rID0gZmFsc2U7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLX0KLQotaW50IGNvbXBh
cmUoY29uc3QgTGV2ZWxEQlNsaWNlJiBhLCBjb25zdCBMZXZlbERCU2xpY2UmIGIsIGJvb2wgaW5k
ZXhLZXlzKQotewotICAgIGJvb2wgb2s7Ci0gICAgaW50IHJlc3VsdCA9IGNvbXBhcmUoYSwgYiwg
aW5kZXhLZXlzLCBvayk7Ci0gICAgQVNTRVJUKG9rKTsKLSAgICBpZiAoIW9rKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1LZXlQcmVmaXg6OktleVByZWZpeCgp
Ci0gICAgOiBtX2RhdGFiYXNlSWQoSW52YWxpZFR5cGUpCi0gICAgLCBtX29iamVjdFN0b3JlSWQo
SW52YWxpZFR5cGUpCi0gICAgLCBtX2luZGV4SWQoSW52YWxpZFR5cGUpCi17Ci19Ci0KLUtleVBy
ZWZpeDo6S2V5UHJlZml4KGludDY0X3QgZGF0YWJhc2VJZCkKLSAgICA6IG1fZGF0YWJhc2VJZChk
YXRhYmFzZUlkKQotICAgICwgbV9vYmplY3RTdG9yZUlkKDApCi0gICAgLCBtX2luZGV4SWQoMCkK
LXsKLSAgICBBU1NFUlQoS2V5UHJlZml4Ojppc1ZhbGlkRGF0YWJhc2VJZChkYXRhYmFzZUlkKSk7
Ci19Ci0KLUtleVByZWZpeDo6S2V5UHJlZml4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkKQotICAgIDogbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCi0gICAgLCBtX29i
amVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKLSAgICAsIG1faW5kZXhJZCgwKQotewotICAgIEFT
U0VSVChLZXlQcmVmaXg6OmlzVmFsaWREYXRhYmFzZUlkKGRhdGFiYXNlSWQpKTsKLSAgICBBU1NF
UlQoS2V5UHJlZml4Ojppc1ZhbGlkT2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKSk7Ci19Ci0K
LUtleVByZWZpeDo6S2V5UHJlZml4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCi0gICAgOiBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkK
LSAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQotICAgICwgbV9pbmRleElkKGlu
ZGV4SWQpCi17Ci0gICAgQVNTRVJUKEtleVByZWZpeDo6aXNWYWxpZERhdGFiYXNlSWQoZGF0YWJh
c2VJZCkpOwotICAgIEFTU0VSVChLZXlQcmVmaXg6OmlzVmFsaWRPYmplY3RTdG9yZUlkKG9iamVj
dFN0b3JlSWQpKTsKLSAgICBBU1NFUlQoS2V5UHJlZml4Ojppc1ZhbGlkSW5kZXhJZChpbmRleElk
KSk7Ci19Ci0KLUtleVByZWZpeDo6S2V5UHJlZml4KFR5cGUgdHlwZSwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKLSAgICA6IG1fZGF0
YWJhc2VJZChkYXRhYmFzZUlkKQotICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQp
Ci0gICAgLCBtX2luZGV4SWQoaW5kZXhJZCkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKHR5cGUsIHR5
cGUgPT0gSW52YWxpZFR5cGUpOwotICAgIEFTU0VSVChLZXlQcmVmaXg6OmlzVmFsaWREYXRhYmFz
ZUlkKGRhdGFiYXNlSWQpKTsKLSAgICBBU1NFUlQoS2V5UHJlZml4Ojppc1ZhbGlkT2JqZWN0U3Rv
cmVJZChvYmplY3RTdG9yZUlkKSk7Ci19Ci0KLQotS2V5UHJlZml4IEtleVByZWZpeDo6Y3JlYXRl
V2l0aFNwZWNpYWxJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkKQotewotICAgIEFTU0VSVChLZXlQcmVmaXg6OmlzVmFsaWREYXRh
YmFzZUlkKGRhdGFiYXNlSWQpKTsKLSAgICBBU1NFUlQoS2V5UHJlZml4Ojppc1ZhbGlkT2JqZWN0
U3RvcmVJZChvYmplY3RTdG9yZUlkKSk7Ci0gICAgQVNTRVJUKGluZGV4SWQpOwotICAgIHJldHVy
biBLZXlQcmVmaXgoSW52YWxpZFR5cGUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4
SWQpOwotfQotCi0KLWJvb2wgS2V5UHJlZml4Ojppc1ZhbGlkRGF0YWJhc2VJZChpbnQ2NF90IGRh
dGFiYXNlSWQpCi17Ci0gICAgcmV0dXJuIChkYXRhYmFzZUlkID4gMCkgJiYgKGRhdGFiYXNlSWQg
PCBLZXlQcmVmaXg6OmtNYXhEYXRhYmFzZUlkKTsKLX0KLQotYm9vbCBLZXlQcmVmaXg6OmlzVmFs
aWRPYmplY3RTdG9yZUlkKGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLXsKLSAgICByZXR1cm4gKG9i
amVjdFN0b3JlSWQgPiAwKSAmJiAob2JqZWN0U3RvcmVJZCA8IEtleVByZWZpeDo6a01heE9iamVj
dFN0b3JlSWQpOwotfQotCi1ib29sIEtleVByZWZpeDo6aXNWYWxpZEluZGV4SWQoaW50NjRfdCBp
bmRleElkKQotewotICAgIHJldHVybiAoaW5kZXhJZCA+PSBNaW5pbXVtSW5kZXhJZCkgJiYgKGlu
ZGV4SWQgPCBLZXlQcmVmaXg6OmtNYXhJbmRleElkKTsKLX0KLQotY29uc3QgY2hhciogS2V5UHJl
Zml4OjpkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBLZXlQcmVm
aXgqIHJlc3VsdCkKLXsKLSAgICBpZiAoc3RhcnQgPT0gbGltaXQpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgdW5zaWduZWQgY2hhciBmaXJzdEJ5dGUgPSAqc3RhcnQrKzsKLQotICAgIGludCBk
YXRhYmFzZUlkQnl0ZXMgPSAoKGZpcnN0Qnl0ZSA+PiA1KSAmIDB4NykgKyAxOwotICAgIGludCBv
YmplY3RTdG9yZUlkQnl0ZXMgPSAoKGZpcnN0Qnl0ZSA+PiAyKSAmIDB4NykgKyAxOwotICAgIGlu
dCBpbmRleElkQnl0ZXMgPSAoZmlyc3RCeXRlICYgMHgzKSArIDE7Ci0KLSAgICBpZiAoc3RhcnQg
KyBkYXRhYmFzZUlkQnl0ZXMgKyBvYmplY3RTdG9yZUlkQnl0ZXMgKyBpbmRleElkQnl0ZXMgPiBs
aW1pdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXN1bHQtPm1fZGF0YWJhc2VJZCA9IGRl
Y29kZUludChzdGFydCwgc3RhcnQgKyBkYXRhYmFzZUlkQnl0ZXMpOwotICAgIHN0YXJ0ICs9IGRh
dGFiYXNlSWRCeXRlczsKLSAgICByZXN1bHQtPm1fb2JqZWN0U3RvcmVJZCA9IGRlY29kZUludChz
dGFydCwgc3RhcnQgKyBvYmplY3RTdG9yZUlkQnl0ZXMpOwotICAgIHN0YXJ0ICs9IG9iamVjdFN0
b3JlSWRCeXRlczsKLSAgICByZXN1bHQtPm1faW5kZXhJZCA9IGRlY29kZUludChzdGFydCwgc3Rh
cnQgKyBpbmRleElkQnl0ZXMpOwotICAgIHN0YXJ0ICs9IGluZGV4SWRCeXRlczsKLQotICAgIHJl
dHVybiBzdGFydDsKLX0KLQotVmVjdG9yPGNoYXI+IEtleVByZWZpeDo6ZW5jb2RlRW1wdHkoKQot
ewotICAgIGNvbnN0IFZlY3RvcjxjaGFyLCA0PiByZXN1bHQoNCwgMCk7Ci0gICAgQVNTRVJUKGVu
Y29kZUludGVybmFsKDAsIDAsIDApID09IFZlY3RvcjxjaGFyPig0LCAwKSk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotVmVjdG9yPGNoYXI+IEtleVByZWZpeDo6ZW5jb2RlKCkgY29uc3QKLXsK
LSAgICBBU1NFUlQobV9kYXRhYmFzZUlkICE9IEludmFsaWRJZCk7Ci0gICAgQVNTRVJUKG1fb2Jq
ZWN0U3RvcmVJZCAhPSBJbnZhbGlkSWQpOwotICAgIEFTU0VSVChtX2luZGV4SWQgIT0gSW52YWxp
ZElkKTsKLSAgICByZXR1cm4gZW5jb2RlSW50ZXJuYWwobV9kYXRhYmFzZUlkLCBtX29iamVjdFN0
b3JlSWQsIG1faW5kZXhJZCk7Ci19Ci0KLVZlY3RvcjxjaGFyPiBLZXlQcmVmaXg6OmVuY29kZUlu
dGVybmFsKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQpCi17Ci0gICAgVmVjdG9yPGNoYXI+IGRhdGFiYXNlSWRTdHJpbmcgPSBlbmNvZGVJ
bnRTYWZlbHkoZGF0YWJhc2VJZCwga01heERhdGFiYXNlSWQpOwotICAgIFZlY3RvcjxjaGFyPiBv
YmplY3RTdG9yZUlkU3RyaW5nID0gZW5jb2RlSW50U2FmZWx5KG9iamVjdFN0b3JlSWQsIGtNYXhP
YmplY3RTdG9yZUlkKTsKLSAgICBWZWN0b3I8Y2hhcj4gaW5kZXhJZFN0cmluZyA9IGVuY29kZUlu
dFNhZmVseShpbmRleElkLCBrTWF4SW5kZXhJZCk7Ci0KLSAgICBBU1NFUlQoZGF0YWJhc2VJZFN0
cmluZy5zaXplKCkgPD0ga01heERhdGFiYXNlSWRTaXplQnl0ZXMpOwotICAgIEFTU0VSVChvYmpl
Y3RTdG9yZUlkU3RyaW5nLnNpemUoKSA8PSBrTWF4T2JqZWN0U3RvcmVJZFNpemVCeXRlcyk7Ci0g
ICAgQVNTRVJUKGluZGV4SWRTdHJpbmcuc2l6ZSgpIDw9IGtNYXhJbmRleElkU2l6ZUJ5dGVzKTsK
LQotICAgIHVuc2lnbmVkIGNoYXIgZmlyc3RCeXRlID0gKGRhdGFiYXNlSWRTdHJpbmcuc2l6ZSgp
IC0gMSkgPDwgKGtNYXhPYmplY3RTdG9yZUlkU2l6ZUJpdHMgKyBrTWF4SW5kZXhJZFNpemVCaXRz
KSB8IChvYmplY3RTdG9yZUlkU3RyaW5nLnNpemUoKSAtIDEpIDw8IGtNYXhJbmRleElkU2l6ZUJp
dHMgfCAoaW5kZXhJZFN0cmluZy5zaXplKCkgLSAxKTsKLSAgICBDT01QSUxFX0FTU0VSVChrTWF4
RGF0YWJhc2VJZFNpemVCaXRzICsga01heE9iamVjdFN0b3JlSWRTaXplQml0cyArIGtNYXhJbmRl
eElkU2l6ZUJpdHMgPT0gc2l6ZW9mKGZpcnN0Qnl0ZSkgKiA4LCBDQU5UX0VOQ09ERV9JRFMpOwot
ICAgIFZlY3RvcjxjaGFyLCBEZWZhdWx0SW5saW5lQnVmZmVyU2l6ZT4gcmV0OwotICAgIHJldC5h
cHBlbmQoZmlyc3RCeXRlKTsKLSAgICByZXQuYXBwZW5kVmVjdG9yKGRhdGFiYXNlSWRTdHJpbmcp
OwotICAgIHJldC5hcHBlbmRWZWN0b3Iob2JqZWN0U3RvcmVJZFN0cmluZyk7Ci0gICAgcmV0LmFw
cGVuZFZlY3RvcihpbmRleElkU3RyaW5nKTsKLQotICAgIEFTU0VSVChyZXQuc2l6ZSgpIDw9IERl
ZmF1bHRJbmxpbmVCdWZmZXJTaXplKTsKLSAgICByZXR1cm4gcmV0OwotfQotCi1pbnQgS2V5UHJl
Zml4Ojpjb21wYXJlKGNvbnN0IEtleVByZWZpeCYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KG1fZGF0YWJhc2VJZCAhPSBJbnZhbGlkSWQpOwotICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWQg
IT0gSW52YWxpZElkKTsKLSAgICBBU1NFUlQobV9pbmRleElkICE9IEludmFsaWRJZCk7Ci0KLSAg
ICBpZiAobV9kYXRhYmFzZUlkICE9IG90aGVyLm1fZGF0YWJhc2VJZCkKLSAgICAgICAgcmV0dXJu
IGNvbXBhcmVJbnRzKG1fZGF0YWJhc2VJZCwgb3RoZXIubV9kYXRhYmFzZUlkKTsKLSAgICBpZiAo
bV9vYmplY3RTdG9yZUlkICE9IG90aGVyLm1fb2JqZWN0U3RvcmVJZCkKLSAgICAgICAgcmV0dXJu
IGNvbXBhcmVJbnRzKG1fb2JqZWN0U3RvcmVJZCwgb3RoZXIubV9vYmplY3RTdG9yZUlkKTsKLSAg
ICBpZiAobV9pbmRleElkICE9IG90aGVyLm1faW5kZXhJZCkKLSAgICAgICAgcmV0dXJuIGNvbXBh
cmVJbnRzKG1faW5kZXhJZCwgb3RoZXIubV9pbmRleElkKTsKLSAgICByZXR1cm4gMDsKLX0KLQot
S2V5UHJlZml4OjpUeXBlIEtleVByZWZpeDo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1f
ZGF0YWJhc2VJZCAhPSBJbnZhbGlkSWQpOwotICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWQgIT0g
SW52YWxpZElkKTsKLSAgICBBU1NFUlQobV9pbmRleElkICE9IEludmFsaWRJZCk7Ci0KLSAgICBp
ZiAoIW1fZGF0YWJhc2VJZCkKLSAgICAgICAgcmV0dXJuIEdsb2JhbE1ldGFEYXRhOwotICAgIGlm
ICghbV9vYmplY3RTdG9yZUlkKQotICAgICAgICByZXR1cm4gRGF0YWJhc2VNZXRhRGF0YTsKLSAg
ICBpZiAobV9pbmRleElkID09IE9iamVjdFN0b3JlRGF0YUluZGV4SWQpCi0gICAgICAgIHJldHVy
biBPYmplY3RTdG9yZURhdGE7Ci0gICAgaWYgKG1faW5kZXhJZCA9PSBFeGlzdHNFbnRyeUluZGV4
SWQpCi0gICAgICAgIHJldHVybiBFeGlzdHNFbnRyeTsKLSAgICBpZiAobV9pbmRleElkID49IE1p
bmltdW1JbmRleElkKQotICAgICAgICByZXR1cm4gSW5kZXhEYXRhOwotCi0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEludmFsaWRUeXBlOwotfQotCi1WZWN0b3I8Y2hhcj4g
U2NoZW1hVmVyc2lvbktleTo6ZW5jb2RlKCkKLXsKLSAgICBWZWN0b3I8Y2hhcj4gcmV0ID0gS2V5
UHJlZml4OjplbmNvZGVFbXB0eSgpOwotICAgIHJldC5hcHBlbmRWZWN0b3IoZW5jb2RlQnl0ZShT
Y2hlbWFWZXJzaW9uVHlwZUJ5dGUpKTsKLSAgICByZXR1cm4gcmV0OwotfQotCi1WZWN0b3I8Y2hh
cj4gTWF4RGF0YWJhc2VJZEtleTo6ZW5jb2RlKCkKLXsKLSAgICBWZWN0b3I8Y2hhcj4gcmV0ID0g
S2V5UHJlZml4OjplbmNvZGVFbXB0eSgpOwotICAgIHJldC5hcHBlbmRWZWN0b3IoZW5jb2RlQnl0
ZShNYXhEYXRhYmFzZUlkVHlwZUJ5dGUpKTsKLSAgICByZXR1cm4gcmV0OwotfQotCi1WZWN0b3I8
Y2hhcj4gRGF0YVZlcnNpb25LZXk6OmVuY29kZSgpCi17Ci0gICAgVmVjdG9yPGNoYXI+IHJldCA9
IEtleVByZWZpeDo6ZW5jb2RlRW1wdHkoKTsKLSAgICByZXQuYXBwZW5kVmVjdG9yKGVuY29kZUJ5
dGUoRGF0YVZlcnNpb25UeXBlQnl0ZSkpOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLURhdGFiYXNl
RnJlZUxpc3RLZXk6OkRhdGFiYXNlRnJlZUxpc3RLZXkoKQotICAgIDogbV9kYXRhYmFzZUlkKC0x
KQotewotfQotCi1jb25zdCBjaGFyKiBEYXRhYmFzZUZyZWVMaXN0S2V5OjpkZWNvZGUoY29uc3Qg
Y2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBEYXRhYmFzZUZyZWVMaXN0S2V5KiByZXN1
bHQpCi17Ci0gICAgS2V5UHJlZml4IHByZWZpeDsKLSAgICBjb25zdCBjaGFyKiBwID0gS2V5UHJl
Zml4OjpkZWNvZGUoc3RhcnQsIGxpbWl0LCAmcHJlZml4KTsKLSAgICBpZiAoIXApCi0gICAgICAg
IHJldHVybiAwOwotICAgIEFTU0VSVCghcHJlZml4Lm1fZGF0YWJhc2VJZCk7Ci0gICAgQVNTRVJU
KCFwcmVmaXgubV9vYmplY3RTdG9yZUlkKTsKLSAgICBBU1NFUlQoIXByZWZpeC5tX2luZGV4SWQp
OwotICAgIGlmIChwID09IGxpbWl0KQotICAgICAgICByZXR1cm4gMDsKLSAgICB1bnNpZ25lZCBj
aGFyIHR5cGVCeXRlID0gMDsKLSAgICBwID0gZGVjb2RlQnl0ZShwLCBsaW1pdCwgdHlwZUJ5dGUp
OwotICAgIEFTU0VSVF9VTlVTRUQodHlwZUJ5dGUsIHR5cGVCeXRlID09IERhdGFiYXNlRnJlZUxp
c3RUeXBlQnl0ZSk7Ci0gICAgaWYgKHAgPT0gbGltaXQpCi0gICAgICAgIHJldHVybiAwOwotICAg
IHJldHVybiBkZWNvZGVWYXJJbnQocCwgbGltaXQsIHJlc3VsdC0+bV9kYXRhYmFzZUlkKTsKLX0K
LQotVmVjdG9yPGNoYXI+IERhdGFiYXNlRnJlZUxpc3RLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFi
YXNlSWQpCi17Ci0gICAgVmVjdG9yPGNoYXI+IHJldCA9IEtleVByZWZpeDo6ZW5jb2RlRW1wdHko
KTsKLSAgICByZXQuYXBwZW5kVmVjdG9yKGVuY29kZUJ5dGUoRGF0YWJhc2VGcmVlTGlzdFR5cGVC
eXRlKSk7Ci0gICAgcmV0LmFwcGVuZFZlY3RvcihlbmNvZGVWYXJJbnQoZGF0YWJhc2VJZCkpOwot
ICAgIHJldHVybiByZXQ7Ci19Ci0KLVZlY3RvcjxjaGFyPiBEYXRhYmFzZUZyZWVMaXN0S2V5Ojpl
bmNvZGVNYXhLZXkoKQotewotICAgIHJldHVybiBlbmNvZGUoSU5UNjRfTUFYKTsKLX0KLQotaW50
NjRfdCBEYXRhYmFzZUZyZWVMaXN0S2V5OjpkYXRhYmFzZUlkKCkgY29uc3QKLXsKLSAgICBBU1NF
UlQobV9kYXRhYmFzZUlkID49IDApOwotICAgIHJldHVybiBtX2RhdGFiYXNlSWQ7Ci19Ci0KLWlu
dCBEYXRhYmFzZUZyZWVMaXN0S2V5Ojpjb21wYXJlKGNvbnN0IERhdGFiYXNlRnJlZUxpc3RLZXkm
IG90aGVyKSBjb25zdAotewotICAgIEFTU0VSVChtX2RhdGFiYXNlSWQgPj0gMCk7Ci0gICAgcmV0
dXJuIGNvbXBhcmVJbnRzKG1fZGF0YWJhc2VJZCwgb3RoZXIubV9kYXRhYmFzZUlkKTsKLX0KLQot
Y29uc3QgY2hhciogRGF0YWJhc2VOYW1lS2V5OjpkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNv
bnN0IGNoYXIqIGxpbWl0LCBEYXRhYmFzZU5hbWVLZXkqIHJlc3VsdCkKLXsKLSAgICBLZXlQcmVm
aXggcHJlZml4OwotICAgIGNvbnN0IGNoYXIqIHAgPSBLZXlQcmVmaXg6OmRlY29kZShzdGFydCwg
bGltaXQsICZwcmVmaXgpOwotICAgIGlmICghcCkKLSAgICAgICAgcmV0dXJuIHA7Ci0gICAgQVNT
RVJUKCFwcmVmaXgubV9kYXRhYmFzZUlkKTsKLSAgICBBU1NFUlQoIXByZWZpeC5tX29iamVjdFN0
b3JlSWQpOwotICAgIEFTU0VSVCghcHJlZml4Lm1faW5kZXhJZCk7Ci0gICAgaWYgKHAgPT0gbGlt
aXQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGUgPSAwOwot
ICAgIHAgPSBkZWNvZGVCeXRlKHAsIGxpbWl0LCB0eXBlQnl0ZSk7Ci0gICAgQVNTRVJUX1VOVVNF
RCh0eXBlQnl0ZSwgdHlwZUJ5dGUgPT0gRGF0YWJhc2VOYW1lVHlwZUJ5dGUpOwotICAgIGlmIChw
ID09IGxpbWl0KQotICAgICAgICByZXR1cm4gMDsKLSAgICBwID0gZGVjb2RlU3RyaW5nV2l0aExl
bmd0aChwLCBsaW1pdCwgcmVzdWx0LT5tX29yaWdpbik7Ci0gICAgaWYgKCFwKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gZGVjb2RlU3RyaW5nV2l0aExlbmd0aChwLCBsaW1pdCwgcmVz
dWx0LT5tX2RhdGFiYXNlTmFtZSk7Ci19Ci0KLVZlY3RvcjxjaGFyPiBEYXRhYmFzZU5hbWVLZXk6
OmVuY29kZShjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUp
Ci17Ci0gICAgVmVjdG9yPGNoYXI+IHJldCA9IEtleVByZWZpeDo6ZW5jb2RlRW1wdHkoKTsKLSAg
ICByZXQuYXBwZW5kVmVjdG9yKGVuY29kZUJ5dGUoRGF0YWJhc2VOYW1lVHlwZUJ5dGUpKTsKLSAg
ICByZXQuYXBwZW5kVmVjdG9yKGVuY29kZVN0cmluZ1dpdGhMZW5ndGgob3JpZ2luKSk7Ci0gICAg
cmV0LmFwcGVuZFZlY3RvcihlbmNvZGVTdHJpbmdXaXRoTGVuZ3RoKGRhdGFiYXNlTmFtZSkpOwot
ICAgIHJldHVybiByZXQ7Ci19Ci0KLVZlY3RvcjxjaGFyPiBEYXRhYmFzZU5hbWVLZXk6OmVuY29k
ZU1pbktleUZvck9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbikKLXsKLSAgICByZXR1cm4gZW5j
b2RlKG9yaWdpbiwgIiIpOwotfQotCi1WZWN0b3I8Y2hhcj4gRGF0YWJhc2VOYW1lS2V5OjplbmNv
ZGVTdG9wS2V5Rm9yT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luKQotewotICAgIC8vIGp1c3Qg
YWZ0ZXIgb3JpZ2luIGluIGNvbGxhdGlvbiBvcmRlcgotICAgIHJldHVybiBlbmNvZGVNaW5LZXlG
b3JPcmlnaW4ob3JpZ2luICsgIlx4MDEiKTsKLX0KLQotaW50IERhdGFiYXNlTmFtZUtleTo6Y29t
cGFyZShjb25zdCBEYXRhYmFzZU5hbWVLZXkmIG90aGVyKQotewotICAgIGlmIChpbnQgeCA9IGNv
ZGVQb2ludENvbXBhcmUobV9vcmlnaW4sIG90aGVyLm1fb3JpZ2luKSkKLSAgICAgICAgcmV0dXJu
IHg7Ci0gICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmUobV9kYXRhYmFzZU5hbWUsIG90aGVyLm1f
ZGF0YWJhc2VOYW1lKTsKLX0KLQotVmVjdG9yPGNoYXI+IERhdGFiYXNlTWV0YURhdGFLZXk6OmVu
Y29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIE1ldGFEYXRhVHlwZSBtZXRhRGF0YVR5cGUpCi17Ci0g
ICAgS2V5UHJlZml4IHByZWZpeChkYXRhYmFzZUlkKTsKLSAgICBWZWN0b3I8Y2hhcj4gcmV0ID0g
cHJlZml4LmVuY29kZSgpOwotICAgIHJldC5hcHBlbmRWZWN0b3IoZW5jb2RlQnl0ZShtZXRhRGF0
YVR5cGUpKTsKLSAgICByZXR1cm4gcmV0OwotfQotCi1PYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpP
YmplY3RTdG9yZU1ldGFEYXRhS2V5KCkKLSAgICA6IG1fb2JqZWN0U3RvcmVJZCgtMSkKLSAgICAs
IG1fbWV0YURhdGFUeXBlKC0xKQotewotfQotCi1jb25zdCBjaGFyKiBPYmplY3RTdG9yZU1ldGFE
YXRhS2V5OjpkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBPYmpl
Y3RTdG9yZU1ldGFEYXRhS2V5KiByZXN1bHQpCi17Ci0gICAgS2V5UHJlZml4IHByZWZpeDsKLSAg
ICBjb25zdCBjaGFyKiBwID0gS2V5UHJlZml4OjpkZWNvZGUoc3RhcnQsIGxpbWl0LCAmcHJlZml4
KTsKLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiAwOwotICAgIEFTU0VSVChwcmVmaXgubV9k
YXRhYmFzZUlkKTsKLSAgICBBU1NFUlQoIXByZWZpeC5tX29iamVjdFN0b3JlSWQpOwotICAgIEFT
U0VSVCghcHJlZml4Lm1faW5kZXhJZCk7Ci0gICAgaWYgKHAgPT0gbGltaXQpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGUgPSAwOwotICAgIHAgPSBkZWNvZGVC
eXRlKHAsIGxpbWl0LCB0eXBlQnl0ZSk7Ci0gICAgQVNTRVJUX1VOVVNFRCh0eXBlQnl0ZSwgdHlw
ZUJ5dGUgPT0gT2JqZWN0U3RvcmVNZXRhRGF0YVR5cGVCeXRlKTsKLSAgICBpZiAocCA9PSBsaW1p
dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcCA9IGRlY29kZVZhckludChwLCBsaW1pdCwgcmVz
dWx0LT5tX29iamVjdFN0b3JlSWQpOwotICAgIGlmICghcCkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgQVNTRVJUKHJlc3VsdC0+bV9vYmplY3RTdG9yZUlkKTsKLSAgICBpZiAocCA9PSBsaW1pdCkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGRlY29kZUJ5dGUocCwgbGltaXQsIHJlc3Vs
dC0+bV9tZXRhRGF0YVR5cGUpOwotfQotCi1WZWN0b3I8Y2hhcj4gT2JqZWN0U3RvcmVNZXRhRGF0
YUtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCB1
bnNpZ25lZCBjaGFyIG1ldGFEYXRhVHlwZSkKLXsKLSAgICBLZXlQcmVmaXggcHJlZml4KGRhdGFi
YXNlSWQpOwotICAgIFZlY3RvcjxjaGFyPiByZXQgPSBwcmVmaXguZW5jb2RlKCk7Ci0gICAgcmV0
LmFwcGVuZFZlY3RvcihlbmNvZGVCeXRlKE9iamVjdFN0b3JlTWV0YURhdGFUeXBlQnl0ZSkpOwot
ICAgIHJldC5hcHBlbmRWZWN0b3IoZW5jb2RlVmFySW50KG9iamVjdFN0b3JlSWQpKTsKLSAgICBy
ZXQuYXBwZW5kVmVjdG9yKGVuY29kZUJ5dGUobWV0YURhdGFUeXBlKSk7Ci0gICAgcmV0dXJuIHJl
dDsKLX0KLQotVmVjdG9yPGNoYXI+IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZU1heEtl
eShpbnQ2NF90IGRhdGFiYXNlSWQpCi17Ci0gICAgcmV0dXJuIGVuY29kZShkYXRhYmFzZUlkLCBJ
TlQ2NF9NQVgsIE9iamVjdE1ldGFEYXRhVHlwZU1heGltdW0pOwotfQotCi1WZWN0b3I8Y2hhcj4g
T2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlTWF4S2V5KGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkKQotewotICAgIHJldHVybiBlbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgT2JqZWN0TWV0YURhdGFUeXBlTWF4aW11bSk7Ci19Ci0KLWludDY0X3Qg
T2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6b2JqZWN0U3RvcmVJZCgpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKG1fb2JqZWN0U3RvcmVJZCA+PSAwKTsKLSAgICByZXR1cm4gbV9vYmplY3RTdG9yZUlkOwot
fQotdW5zaWduZWQgY2hhciBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjptZXRhRGF0YVR5cGUoKSBj
b25zdAotewotICAgIHJldHVybiBtX21ldGFEYXRhVHlwZTsKLX0KLQotaW50IE9iamVjdFN0b3Jl
TWV0YURhdGFLZXk6OmNvbXBhcmUoY29uc3QgT2JqZWN0U3RvcmVNZXRhRGF0YUtleSYgb3RoZXIp
Ci17Ci0gICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVJZCA+PSAwKTsKLSAgICBpZiAoaW50IHggPSBj
b21wYXJlSW50cyhtX29iamVjdFN0b3JlSWQsIG90aGVyLm1fb2JqZWN0U3RvcmVJZCkpCi0gICAg
ICAgIHJldHVybiB4OwotICAgIGludDY0X3QgcmVzdWx0ID0gbV9tZXRhRGF0YVR5cGUgLSBvdGhl
ci5tX21ldGFEYXRhVHlwZTsKLSAgICBpZiAocmVzdWx0IDwgMCkKLSAgICAgICAgcmV0dXJuIC0x
OwotICAgIHJldHVybiAocmVzdWx0ID4gMCkgPyAxIDogcmVzdWx0OwotfQotCi1JbmRleE1ldGFE
YXRhS2V5OjpJbmRleE1ldGFEYXRhS2V5KCkKLSAgICA6IG1fb2JqZWN0U3RvcmVJZCgtMSkKLSAg
ICAsIG1faW5kZXhJZCgtMSkKLSAgICAsIG1fbWV0YURhdGFUeXBlKDApCi17Ci19Ci0KLWNvbnN0
IGNoYXIqIEluZGV4TWV0YURhdGFLZXk6OmRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3Qg
Y2hhciogbGltaXQsIEluZGV4TWV0YURhdGFLZXkqIHJlc3VsdCkKLXsKLSAgICBLZXlQcmVmaXgg
cHJlZml4OwotICAgIGNvbnN0IGNoYXIqIHAgPSBLZXlQcmVmaXg6OmRlY29kZShzdGFydCwgbGlt
aXQsICZwcmVmaXgpOwotICAgIGlmICghcCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQVNTRVJU
KHByZWZpeC5tX2RhdGFiYXNlSWQpOwotICAgIEFTU0VSVCghcHJlZml4Lm1fb2JqZWN0U3RvcmVJ
ZCk7Ci0gICAgQVNTRVJUKCFwcmVmaXgubV9pbmRleElkKTsKLSAgICBpZiAocCA9PSBsaW1pdCkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgdW5zaWduZWQgY2hhciB0eXBlQnl0ZSA9IDA7Ci0gICAg
cCA9IGRlY29kZUJ5dGUocCwgbGltaXQsIHR5cGVCeXRlKTsKLSAgICBBU1NFUlRfVU5VU0VEKHR5
cGVCeXRlLCB0eXBlQnl0ZSA9PSBJbmRleE1ldGFEYXRhVHlwZUJ5dGUpOwotICAgIGlmIChwID09
IGxpbWl0KQotICAgICAgICByZXR1cm4gMDsKLSAgICBwID0gZGVjb2RlVmFySW50KHAsIGxpbWl0
LCByZXN1bHQtPm1fb2JqZWN0U3RvcmVJZCk7Ci0gICAgaWYgKCFwKQotICAgICAgICByZXR1cm4g
MDsKLSAgICBwID0gZGVjb2RlVmFySW50KHAsIGxpbWl0LCByZXN1bHQtPm1faW5kZXhJZCk7Ci0g
ICAgaWYgKCFwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAocCA9PSBsaW1pdCkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGRlY29kZUJ5dGUocCwgbGltaXQsIHJlc3VsdC0+bV9t
ZXRhRGF0YVR5cGUpOwotfQotCi1WZWN0b3I8Y2hhcj4gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2Rl
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIHVuc2lnbmVkIGNoYXIgbWV0YURhdGFUeXBlKQotewotICAgIEtleVByZWZpeCBwcmVmaXgo
ZGF0YWJhc2VJZCk7Ci0gICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNvZGUoKTsKLSAg
ICByZXQuYXBwZW5kVmVjdG9yKGVuY29kZUJ5dGUoSW5kZXhNZXRhRGF0YVR5cGVCeXRlKSk7Ci0g
ICAgcmV0LmFwcGVuZFZlY3RvcihlbmNvZGVWYXJJbnQob2JqZWN0U3RvcmVJZCkpOwotICAgIHJl
dC5hcHBlbmRWZWN0b3IoZW5jb2RlVmFySW50KGluZGV4SWQpKTsKLSAgICByZXQuYXBwZW5kVmVj
dG9yKGVuY29kZUJ5dGUobWV0YURhdGFUeXBlKSk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotVmVj
dG9yPGNoYXI+IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZU1heEtleShpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKLXsKLSAgICByZXR1cm4gZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIElOVDY0X01BWCwgSW5kZXhNZXRhRGF0YVR5cGVNYXhpbXVtKTsK
LX0KLQotVmVjdG9yPGNoYXI+IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZU1heEtleShpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQotewot
ICAgIHJldHVybiBlbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgSW5k
ZXhNZXRhRGF0YVR5cGVNYXhpbXVtKTsKLX0KLQotaW50IEluZGV4TWV0YURhdGFLZXk6OmNvbXBh
cmUoY29uc3QgSW5kZXhNZXRhRGF0YUtleSYgb3RoZXIpCi17Ci0gICAgQVNTRVJUKG1fb2JqZWN0
U3RvcmVJZCA+PSAwKTsKLSAgICBBU1NFUlQobV9pbmRleElkID49IDApOwotCi0gICAgaWYgKGlu
dCB4ID0gY29tcGFyZUludHMobV9vYmplY3RTdG9yZUlkLCBvdGhlci5tX29iamVjdFN0b3JlSWQp
KQotICAgICAgICByZXR1cm4geDsKLSAgICBpZiAoaW50IHggPSBjb21wYXJlSW50cyhtX2luZGV4
SWQsIG90aGVyLm1faW5kZXhJZCkpCi0gICAgICAgIHJldHVybiB4OwotICAgIHJldHVybiBtX21l
dGFEYXRhVHlwZSAtIG90aGVyLm1fbWV0YURhdGFUeXBlOwotfQotCi1pbnQ2NF90IEluZGV4TWV0
YURhdGFLZXk6OmluZGV4SWQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2luZGV4SWQgPj0gMCk7
Ci0gICAgcmV0dXJuIG1faW5kZXhJZDsKLX0KLQotT2JqZWN0U3RvcmVGcmVlTGlzdEtleTo6T2Jq
ZWN0U3RvcmVGcmVlTGlzdEtleSgpCi0gICAgOiBtX29iamVjdFN0b3JlSWQoLTEpCi17Ci19Ci0K
LWNvbnN0IGNoYXIqIE9iamVjdFN0b3JlRnJlZUxpc3RLZXk6OmRlY29kZShjb25zdCBjaGFyKiBz
dGFydCwgY29uc3QgY2hhciogbGltaXQsIE9iamVjdFN0b3JlRnJlZUxpc3RLZXkqIHJlc3VsdCkK
LXsKLSAgICBLZXlQcmVmaXggcHJlZml4OwotICAgIGNvbnN0IGNoYXIqIHAgPSBLZXlQcmVmaXg6
OmRlY29kZShzdGFydCwgbGltaXQsICZwcmVmaXgpOwotICAgIGlmICghcCkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgQVNTRVJUKHByZWZpeC5tX2RhdGFiYXNlSWQpOwotICAgIEFTU0VSVCghcHJl
Zml4Lm1fb2JqZWN0U3RvcmVJZCk7Ci0gICAgQVNTRVJUKCFwcmVmaXgubV9pbmRleElkKTsKLSAg
ICBpZiAocCA9PSBsaW1pdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgdW5zaWduZWQgY2hhciB0
eXBlQnl0ZSA9IDA7Ci0gICAgcCA9IGRlY29kZUJ5dGUocCwgbGltaXQsIHR5cGVCeXRlKTsKLSAg
ICBBU1NFUlRfVU5VU0VEKHR5cGVCeXRlLCB0eXBlQnl0ZSA9PSBPYmplY3RTdG9yZUZyZWVMaXN0
VHlwZUJ5dGUpOwotICAgIGlmIChwID09IGxpbWl0KQotICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gZGVjb2RlVmFySW50KHAsIGxpbWl0LCByZXN1bHQtPm1fb2JqZWN0U3RvcmVJZCk7Ci19
Ci0KLVZlY3RvcjxjaGFyPiBPYmplY3RTdG9yZUZyZWVMaXN0S2V5OjplbmNvZGUoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCi17Ci0gICAgS2V5UHJlZml4IHByZWZp
eChkYXRhYmFzZUlkKTsKLSAgICBWZWN0b3I8Y2hhcj4gcmV0ID0gcHJlZml4LmVuY29kZSgpOwot
ICAgIHJldC5hcHBlbmRWZWN0b3IoZW5jb2RlQnl0ZShPYmplY3RTdG9yZUZyZWVMaXN0VHlwZUJ5
dGUpKTsKLSAgICByZXQuYXBwZW5kVmVjdG9yKGVuY29kZVZhckludChvYmplY3RTdG9yZUlkKSk7
Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotVmVjdG9yPGNoYXI+IE9iamVjdFN0b3JlRnJlZUxpc3RL
ZXk6OmVuY29kZU1heEtleShpbnQ2NF90IGRhdGFiYXNlSWQpCi17Ci0gICAgcmV0dXJuIGVuY29k
ZShkYXRhYmFzZUlkLCBJTlQ2NF9NQVgpOwotfQotCi1pbnQ2NF90IE9iamVjdFN0b3JlRnJlZUxp
c3RLZXk6Om9iamVjdFN0b3JlSWQoKSBjb25zdAotewotICAgIEFTU0VSVChtX29iamVjdFN0b3Jl
SWQgPj0gMCk7Ci0gICAgcmV0dXJuIG1fb2JqZWN0U3RvcmVJZDsKLX0KLQotaW50IE9iamVjdFN0
b3JlRnJlZUxpc3RLZXk6OmNvbXBhcmUoY29uc3QgT2JqZWN0U3RvcmVGcmVlTGlzdEtleSYgb3Ro
ZXIpCi17Ci0gICAgLy8gRklYTUU6IEl0IG1heSBzZWVtIHN0cmFuZ2UgdGhhdCB3ZSdyZSBub3Qg
Y29tcGFyaW5nIGRhdGFiYXNlIGlkJ3MsCi0gICAgLy8gYnV0IHRoYXQgY29tcGFyaXNvbiB3aWxs
IGhhdmUgYmVlbiBtYWRlIGVhcmxpZXIuCi0gICAgLy8gV2Ugc2hvdWxkIHByb2JhYmx5IG1ha2Ug
dGhpcyBtb3JlIGNsZWFyLCB0aG91Z2guLi4KLSAgICBBU1NFUlQobV9vYmplY3RTdG9yZUlkID49
IDApOwotICAgIHJldHVybiBjb21wYXJlSW50cyhtX29iamVjdFN0b3JlSWQsIG90aGVyLm1fb2Jq
ZWN0U3RvcmVJZCk7Ci19Ci0KLUluZGV4RnJlZUxpc3RLZXk6OkluZGV4RnJlZUxpc3RLZXkoKQot
ICAgIDogbV9vYmplY3RTdG9yZUlkKC0xKQotICAgICwgbV9pbmRleElkKC0xKQotewotfQotCi1j
b25zdCBjaGFyKiBJbmRleEZyZWVMaXN0S2V5OjpkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNv
bnN0IGNoYXIqIGxpbWl0LCBJbmRleEZyZWVMaXN0S2V5KiByZXN1bHQpCi17Ci0gICAgS2V5UHJl
Zml4IHByZWZpeDsKLSAgICBjb25zdCBjaGFyKiBwID0gS2V5UHJlZml4OjpkZWNvZGUoc3RhcnQs
IGxpbWl0LCAmcHJlZml4KTsKLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiAwOwotICAgIEFT
U0VSVChwcmVmaXgubV9kYXRhYmFzZUlkKTsKLSAgICBBU1NFUlQoIXByZWZpeC5tX29iamVjdFN0
b3JlSWQpOwotICAgIEFTU0VSVCghcHJlZml4Lm1faW5kZXhJZCk7Ci0gICAgaWYgKHAgPT0gbGlt
aXQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGUgPSAwOwot
ICAgIHAgPSBkZWNvZGVCeXRlKHAsIGxpbWl0LCB0eXBlQnl0ZSk7Ci0gICAgQVNTRVJUX1VOVVNF
RCh0eXBlQnl0ZSwgdHlwZUJ5dGUgPT0gSW5kZXhGcmVlTGlzdFR5cGVCeXRlKTsKLSAgICBpZiAo
cCA9PSBsaW1pdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcCA9IGRlY29kZVZhckludChwLCBs
aW1pdCwgcmVzdWx0LT5tX29iamVjdFN0b3JlSWQpOwotICAgIGlmICghcCkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgcmV0dXJuIGRlY29kZVZhckludChwLCBsaW1pdCwgcmVzdWx0LT5tX2luZGV4
SWQpOwotfQotCi1WZWN0b3I8Y2hhcj4gSW5kZXhGcmVlTGlzdEtleTo6ZW5jb2RlKGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCi17Ci0g
ICAgS2V5UHJlZml4IHByZWZpeChkYXRhYmFzZUlkKTsKLSAgICBWZWN0b3I8Y2hhcj4gcmV0ID0g
cHJlZml4LmVuY29kZSgpOwotICAgIHJldC5hcHBlbmRWZWN0b3IoZW5jb2RlQnl0ZShJbmRleEZy
ZWVMaXN0VHlwZUJ5dGUpKTsKLSAgICByZXQuYXBwZW5kVmVjdG9yKGVuY29kZVZhckludChvYmpl
Y3RTdG9yZUlkKSk7Ci0gICAgcmV0LmFwcGVuZFZlY3RvcihlbmNvZGVWYXJJbnQoaW5kZXhJZCkp
OwotICAgIHJldHVybiByZXQ7Ci19Ci0KLVZlY3RvcjxjaGFyPiBJbmRleEZyZWVMaXN0S2V5Ojpl
bmNvZGVNYXhLZXkoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCi17
Ci0gICAgcmV0dXJuIGVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBJTlQ2NF9NQVgp
OwotfQotCi1pbnQgSW5kZXhGcmVlTGlzdEtleTo6Y29tcGFyZShjb25zdCBJbmRleEZyZWVMaXN0
S2V5JiBvdGhlcikKLXsKLSAgICBBU1NFUlQobV9vYmplY3RTdG9yZUlkID49IDApOwotICAgIEFT
U0VSVChtX2luZGV4SWQgPj0gMCk7Ci0gICAgaWYgKGludCB4ID0gY29tcGFyZUludHMobV9vYmpl
Y3RTdG9yZUlkLCBvdGhlci5tX29iamVjdFN0b3JlSWQpKQotICAgICAgICByZXR1cm4geDsKLSAg
ICByZXR1cm4gY29tcGFyZUludHMobV9pbmRleElkLCBvdGhlci5tX2luZGV4SWQpOwotfQotCi1p
bnQ2NF90IEluZGV4RnJlZUxpc3RLZXk6Om9iamVjdFN0b3JlSWQoKSBjb25zdAotewotICAgIEFT
U0VSVChtX29iamVjdFN0b3JlSWQgPj0gMCk7Ci0gICAgcmV0dXJuIG1fb2JqZWN0U3RvcmVJZDsK
LX0KLQotaW50NjRfdCBJbmRleEZyZWVMaXN0S2V5OjppbmRleElkKCkgY29uc3QKLXsKLSAgICBB
U1NFUlQobV9pbmRleElkID49IDApOwotICAgIHJldHVybiBtX2luZGV4SWQ7Ci19Ci0KLS8vIEZJ
WE1FOiBXZSBuZXZlciB1c2UgdGhpcyB0byBsb29rIHVwIG9iamVjdCBzdG9yZSBpZHMsIGJlY2F1
c2UgYSBtYXBwaW5nCi0vLyBpcyBrZXB0IGluIHRoZSBJREJEYXRhYmFzZUJhY2tlbmQuIENhbiB0
aGUgbWFwcGluZyBiZWNvbWUgdW5yZWxpYWJsZT8KLS8vIENhbiB3ZSByZW1vdmUgdGhpcz8KLWNv
bnN0IGNoYXIqIE9iamVjdFN0b3JlTmFtZXNLZXk6OmRlY29kZShjb25zdCBjaGFyKiBzdGFydCwg
Y29uc3QgY2hhciogbGltaXQsIE9iamVjdFN0b3JlTmFtZXNLZXkqIHJlc3VsdCkKLXsKLSAgICBL
ZXlQcmVmaXggcHJlZml4OwotICAgIGNvbnN0IGNoYXIqIHAgPSBLZXlQcmVmaXg6OmRlY29kZShz
dGFydCwgbGltaXQsICZwcmVmaXgpOwotICAgIGlmICghcCkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgQVNTRVJUKHByZWZpeC5tX2RhdGFiYXNlSWQpOwotICAgIEFTU0VSVCghcHJlZml4Lm1fb2Jq
ZWN0U3RvcmVJZCk7Ci0gICAgQVNTRVJUKCFwcmVmaXgubV9pbmRleElkKTsKLSAgICBpZiAocCA9
PSBsaW1pdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgdW5zaWduZWQgY2hhciB0eXBlQnl0ZSA9
IDA7Ci0gICAgcCA9IGRlY29kZUJ5dGUocCwgbGltaXQsIHR5cGVCeXRlKTsKLSAgICBBU1NFUlRf
VU5VU0VEKHR5cGVCeXRlLCB0eXBlQnl0ZSA9PSBPYmplY3RTdG9yZU5hbWVzVHlwZUJ5dGUpOwot
ICAgIHJldHVybiBkZWNvZGVTdHJpbmdXaXRoTGVuZ3RoKHAsIGxpbWl0LCByZXN1bHQtPm1fb2Jq
ZWN0U3RvcmVOYW1lKTsKLX0KLQotVmVjdG9yPGNoYXI+IE9iamVjdFN0b3JlTmFtZXNLZXk6OmVu
Y29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lKQot
ewotICAgIEtleVByZWZpeCBwcmVmaXgoZGF0YWJhc2VJZCk7Ci0gICAgVmVjdG9yPGNoYXI+IHJl
dCA9IHByZWZpeC5lbmNvZGUoKTsKLSAgICByZXQuYXBwZW5kVmVjdG9yKGVuY29kZUJ5dGUoT2Jq
ZWN0U3RvcmVOYW1lc1R5cGVCeXRlKSk7Ci0gICAgcmV0LmFwcGVuZFZlY3RvcihlbmNvZGVTdHJp
bmdXaXRoTGVuZ3RoKG9iamVjdFN0b3JlTmFtZSkpOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLWlu
dCBPYmplY3RTdG9yZU5hbWVzS2V5Ojpjb21wYXJlKGNvbnN0IE9iamVjdFN0b3JlTmFtZXNLZXkm
IG90aGVyKQotewotICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlKG1fb2JqZWN0U3RvcmVOYW1l
LCBvdGhlci5tX29iamVjdFN0b3JlTmFtZSk7Ci19Ci0KLUluZGV4TmFtZXNLZXk6OkluZGV4TmFt
ZXNLZXkoKQotICAgIDogbV9vYmplY3RTdG9yZUlkKC0xKQotewotfQotCi0vLyBGSVhNRTogV2Ug
bmV2ZXIgdXNlIHRoaXMgdG8gbG9vayB1cCBpbmRleCBpZHMsIGJlY2F1c2UgYSBtYXBwaW5nCi0v
LyBpcyBrZXB0IGF0IGEgaGlnaGVyIGxldmVsLgotY29uc3QgY2hhciogSW5kZXhOYW1lc0tleTo6
ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgSW5kZXhOYW1lc0tl
eSogcmVzdWx0KQotewotICAgIEtleVByZWZpeCBwcmVmaXg7Ci0gICAgY29uc3QgY2hhciogcCA9
IEtleVByZWZpeDo6ZGVjb2RlKHN0YXJ0LCBsaW1pdCwgJnByZWZpeCk7Ci0gICAgaWYgKCFwKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICBBU1NFUlQocHJlZml4Lm1fZGF0YWJhc2VJZCk7Ci0gICAg
QVNTRVJUKCFwcmVmaXgubV9vYmplY3RTdG9yZUlkKTsKLSAgICBBU1NFUlQoIXByZWZpeC5tX2lu
ZGV4SWQpOwotICAgIGlmIChwID09IGxpbWl0KQotICAgICAgICByZXR1cm4gMDsKLSAgICB1bnNp
Z25lZCBjaGFyIHR5cGVCeXRlID0gMDsKLSAgICBwID0gZGVjb2RlQnl0ZShwLCBsaW1pdCwgdHlw
ZUJ5dGUpOwotICAgIEFTU0VSVF9VTlVTRUQodHlwZUJ5dGUsIHR5cGVCeXRlID09IEluZGV4TmFt
ZXNLZXlUeXBlQnl0ZSk7Ci0gICAgaWYgKHAgPT0gbGltaXQpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIHAgPSBkZWNvZGVWYXJJbnQocCwgbGltaXQsIHJlc3VsdC0+bV9vYmplY3RTdG9yZUlkKTsK
LSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBkZWNvZGVTdHJpbmdX
aXRoTGVuZ3RoKHAsIGxpbWl0LCByZXN1bHQtPm1faW5kZXhOYW1lKTsKLX0KLQotVmVjdG9yPGNo
YXI+IEluZGV4TmFtZXNLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUpCi17Ci0gICAgS2V5UHJlZml4IHBy
ZWZpeChkYXRhYmFzZUlkKTsKLSAgICBWZWN0b3I8Y2hhcj4gcmV0ID0gcHJlZml4LmVuY29kZSgp
OwotICAgIHJldC5hcHBlbmRWZWN0b3IoZW5jb2RlQnl0ZShJbmRleE5hbWVzS2V5VHlwZUJ5dGUp
KTsKLSAgICByZXQuYXBwZW5kVmVjdG9yKGVuY29kZVZhckludChvYmplY3RTdG9yZUlkKSk7Ci0g
ICAgcmV0LmFwcGVuZFZlY3RvcihlbmNvZGVTdHJpbmdXaXRoTGVuZ3RoKGluZGV4TmFtZSkpOwot
ICAgIHJldHVybiByZXQ7Ci19Ci0KLWludCBJbmRleE5hbWVzS2V5Ojpjb21wYXJlKGNvbnN0IElu
ZGV4TmFtZXNLZXkmIG90aGVyKQotewotICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWQgPj0gMCk7
Ci0gICAgaWYgKGludCB4ID0gY29tcGFyZUludHMobV9vYmplY3RTdG9yZUlkLCBvdGhlci5tX29i
amVjdFN0b3JlSWQpKQotICAgICAgICByZXR1cm4geDsKLSAgICByZXR1cm4gY29kZVBvaW50Q29t
cGFyZShtX2luZGV4TmFtZSwgb3RoZXIubV9pbmRleE5hbWUpOwotfQotCi1jb25zdCBjaGFyKiBP
YmplY3RTdG9yZURhdGFLZXk6OmRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciog
ZW5kLCBPYmplY3RTdG9yZURhdGFLZXkqIHJlc3VsdCkKLXsKLSAgICBLZXlQcmVmaXggcHJlZml4
OwotICAgIGNvbnN0IGNoYXIqIHAgPSBLZXlQcmVmaXg6OmRlY29kZShzdGFydCwgZW5kLCAmcHJl
Zml4KTsKLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiAwOwotICAgIEFTU0VSVChwcmVmaXgu
bV9kYXRhYmFzZUlkKTsKLSAgICBBU1NFUlQocHJlZml4Lm1fb2JqZWN0U3RvcmVJZCk7Ci0gICAg
QVNTRVJUKHByZWZpeC5tX2luZGV4SWQgPT0gU3BlY2lhbEluZGV4TnVtYmVyKTsKLSAgICBpZiAo
cCA9PSBlbmQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBleHRyYWN0RW5jb2RlZElE
QktleShwLCBlbmQsICZyZXN1bHQtPm1fZW5jb2RlZFVzZXJLZXkpOwotfQotCi1WZWN0b3I8Y2hh
cj4gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IFZlY3RvcjxjaGFyPiBlbmNvZGVkVXNlcktleSkKLXsKLSAg
ICBLZXlQcmVmaXggcHJlZml4KEtleVByZWZpeDo6Y3JlYXRlV2l0aFNwZWNpYWxJbmRleChkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBTcGVjaWFsSW5kZXhOdW1iZXIpKTsKLSAgICBWZWN0b3I8
Y2hhcj4gcmV0ID0gcHJlZml4LmVuY29kZSgpOwotICAgIHJldC5hcHBlbmRWZWN0b3IoZW5jb2Rl
ZFVzZXJLZXkpOwotCi0gICAgcmV0dXJuIHJldDsKLX0KLQotVmVjdG9yPGNoYXI+IE9iamVjdFN0
b3JlRGF0YUtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBJREJLZXkmIHVzZXJLZXkpCi17Ci0gICAgcmV0dXJuIGVuY29kZShkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkLCBlbmNvZGVJREJLZXkodXNlcktleSkpOwotfQotCi1pbnQgT2Jq
ZWN0U3RvcmVEYXRhS2V5Ojpjb21wYXJlKGNvbnN0IE9iamVjdFN0b3JlRGF0YUtleSYgb3RoZXIs
IGJvb2wmIG9rKQotewotICAgIHJldHVybiBjb21wYXJlRW5jb2RlZElEQktleXMobV9lbmNvZGVk
VXNlcktleSwgb3RoZXIubV9lbmNvZGVkVXNlcktleSwgb2spOwotfQotCi1QYXNzUmVmUHRyPElE
QktleT4gT2JqZWN0U3RvcmVEYXRhS2V5Ojp1c2VyS2V5KCkgY29uc3QKLXsKLSAgICBSZWZQdHI8
SURCS2V5PiBrZXk7Ci0gICAgZGVjb2RlSURCS2V5KG1fZW5jb2RlZFVzZXJLZXkuYmVnaW4oKSwg
bV9lbmNvZGVkVXNlcktleS5lbmQoKSwga2V5KTsKLSAgICByZXR1cm4ga2V5OwotfQotCi1jb25z
dCBpbnQ2NF90IE9iamVjdFN0b3JlRGF0YUtleTo6U3BlY2lhbEluZGV4TnVtYmVyID0gT2JqZWN0
U3RvcmVEYXRhSW5kZXhJZDsKLQotY29uc3QgY2hhciogRXhpc3RzRW50cnlLZXk6OmRlY29kZShj
b25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogZW5kLCBFeGlzdHNFbnRyeUtleSogcmVzdWx0
KQotewotICAgIEtleVByZWZpeCBwcmVmaXg7Ci0gICAgY29uc3QgY2hhciogcCA9IEtleVByZWZp
eDo6ZGVjb2RlKHN0YXJ0LCBlbmQsICZwcmVmaXgpOwotICAgIGlmICghcCkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgQVNTRVJUKHByZWZpeC5tX2RhdGFiYXNlSWQpOwotICAgIEFTU0VSVChwcmVm
aXgubV9vYmplY3RTdG9yZUlkKTsKLSAgICBBU1NFUlQocHJlZml4Lm1faW5kZXhJZCA9PSBTcGVj
aWFsSW5kZXhOdW1iZXIpOwotICAgIGlmIChwID09IGVuZCkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIGV4dHJhY3RFbmNvZGVkSURCS2V5KHAsIGVuZCwgJnJlc3VsdC0+bV9lbmNvZGVk
VXNlcktleSk7Ci19Ci0KLVZlY3RvcjxjaGFyPiBFeGlzdHNFbnRyeUtleTo6ZW5jb2RlKGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBWZWN0b3I8Y2hhcj4m
IGVuY29kZWRLZXkpCi17Ci0gICAgS2V5UHJlZml4IHByZWZpeChLZXlQcmVmaXg6OmNyZWF0ZVdp
dGhTcGVjaWFsSW5kZXgoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgU3BlY2lhbEluZGV4TnVt
YmVyKSk7Ci0gICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNvZGUoKTsKLSAgICByZXQu
YXBwZW5kVmVjdG9yKGVuY29kZWRLZXkpOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLVZlY3Rvcjxj
aGFyPiBFeGlzdHNFbnRyeUtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIHVzZXJLZXkpCi17Ci0gICAgcmV0dXJuIGVuY29k
ZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBlbmNvZGVJREJLZXkodXNlcktleSkpOwotfQot
Ci1pbnQgRXhpc3RzRW50cnlLZXk6OmNvbXBhcmUoY29uc3QgRXhpc3RzRW50cnlLZXkmIG90aGVy
LCBib29sJiBvaykKLXsKLSAgICByZXR1cm4gY29tcGFyZUVuY29kZWRJREJLZXlzKG1fZW5jb2Rl
ZFVzZXJLZXksIG90aGVyLm1fZW5jb2RlZFVzZXJLZXksIG9rKTsKLX0KLQotUGFzc1JlZlB0cjxJ
REJLZXk+IEV4aXN0c0VudHJ5S2V5Ojp1c2VyS2V5KCkgY29uc3QKLXsKLSAgICBSZWZQdHI8SURC
S2V5PiBrZXk7Ci0gICAgZGVjb2RlSURCS2V5KG1fZW5jb2RlZFVzZXJLZXkuYmVnaW4oKSwgbV9l
bmNvZGVkVXNlcktleS5lbmQoKSwga2V5KTsKLSAgICByZXR1cm4ga2V5OwotfQotCi1jb25zdCBp
bnQ2NF90IEV4aXN0c0VudHJ5S2V5OjpTcGVjaWFsSW5kZXhOdW1iZXIgPSBFeGlzdHNFbnRyeUlu
ZGV4SWQ7Ci0KLUluZGV4RGF0YUtleTo6SW5kZXhEYXRhS2V5KCkKLSAgICA6IG1fZGF0YWJhc2VJ
ZCgtMSkKLSAgICAsIG1fb2JqZWN0U3RvcmVJZCgtMSkKLSAgICAsIG1faW5kZXhJZCgtMSkKLSAg
ICAsIG1fc2VxdWVuY2VOdW1iZXIoLTEpCi17Ci19Ci0KLWNvbnN0IGNoYXIqIEluZGV4RGF0YUtl
eTo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgSW5kZXhEYXRh
S2V5KiByZXN1bHQpCi17Ci0gICAgS2V5UHJlZml4IHByZWZpeDsKLSAgICBjb25zdCBjaGFyKiBw
ID0gS2V5UHJlZml4OjpkZWNvZGUoc3RhcnQsIGxpbWl0LCAmcHJlZml4KTsKLSAgICBpZiAoIXAp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIEFTU0VSVChwcmVmaXgubV9kYXRhYmFzZUlkKTsKLSAg
ICBBU1NFUlQocHJlZml4Lm1fb2JqZWN0U3RvcmVJZCk7Ci0gICAgQVNTRVJUKHByZWZpeC5tX2lu
ZGV4SWQgPj0gTWluaW11bUluZGV4SWQpOwotICAgIHJlc3VsdC0+bV9kYXRhYmFzZUlkID0gcHJl
Zml4Lm1fZGF0YWJhc2VJZDsKLSAgICByZXN1bHQtPm1fb2JqZWN0U3RvcmVJZCA9IHByZWZpeC5t
X29iamVjdFN0b3JlSWQ7Ci0gICAgcmVzdWx0LT5tX2luZGV4SWQgPSBwcmVmaXgubV9pbmRleElk
OwotICAgIHJlc3VsdC0+bV9zZXF1ZW5jZU51bWJlciA9IC0xOwotICAgIHJlc3VsdC0+bV9lbmNv
ZGVkUHJpbWFyeUtleSA9IG1pbklEQktleSgpOwotCi0gICAgcCA9IGV4dHJhY3RFbmNvZGVkSURC
S2V5KHAsIGxpbWl0LCAmcmVzdWx0LT5tX2VuY29kZWRVc2VyS2V5KTsKLSAgICBpZiAoIXApCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gW29wdGlvbmFsXSBzZXF1ZW5jZSBudW1iZXIKLSAg
ICBpZiAocCA9PSBsaW1pdCkKLSAgICAgICAgcmV0dXJuIHA7Ci0gICAgcCA9ICBkZWNvZGVWYXJJ
bnQocCwgbGltaXQsIHJlc3VsdC0+bV9zZXF1ZW5jZU51bWJlcik7Ci0gICAgaWYgKCFwKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIC8vIFtvcHRpb25hbF0gcHJpbWFyeSBrZXkKLSAgICBpZiAo
cCA9PSBsaW1pdCkKLSAgICAgICAgcmV0dXJuIHA7Ci0gICAgcCA9IGV4dHJhY3RFbmNvZGVkSURC
S2V5KHAsIGxpbWl0LCAmcmVzdWx0LT5tX2VuY29kZWRQcmltYXJ5S2V5KTsKLSAgICBpZiAoIXAp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIHA7Ci19Ci0KLVZlY3RvcjxjaGFyPiBJ
bmRleERhdGFLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVuY29kZWRVc2VyS2V5
LCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVuY29kZWRQcmltYXJ5S2V5LCBpbnQ2NF90IHNlcXVlbmNl
TnVtYmVyKQotewotICAgIEtleVByZWZpeCBwcmVmaXgoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgaW5kZXhJZCk7Ci0gICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNvZGUoKTsKLSAg
ICByZXQuYXBwZW5kVmVjdG9yKGVuY29kZWRVc2VyS2V5KTsKLSAgICByZXQuYXBwZW5kVmVjdG9y
KGVuY29kZVZhckludChzZXF1ZW5jZU51bWJlcikpOwotICAgIHJldC5hcHBlbmRWZWN0b3IoZW5j
b2RlZFByaW1hcnlLZXkpOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLVZlY3RvcjxjaGFyPiBJbmRl
eERhdGFLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIHVzZXJLZXkpCi17Ci0gICAgcmV0dXJu
IGVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBlbmNvZGVJREJLZXko
dXNlcktleSksIG1pbklEQktleSgpKTsKLX0KLQotVmVjdG9yPGNoYXI+IEluZGV4RGF0YUtleTo6
ZW5jb2RlTWluS2V5KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQpCi17Ci0gICAgcmV0dXJuIGVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCBpbmRleElkLCBtaW5JREJLZXkoKSwgbWluSURCS2V5KCkpOwotfQotCi1WZWN0b3I8
Y2hhcj4gSW5kZXhEYXRhS2V5OjplbmNvZGVNYXhLZXkoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKLXsKLSAgICByZXR1cm4gZW5jb2Rl
KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIG1heElEQktleSgpLCBtYXhJREJL
ZXkoKSwgSU5UNjRfTUFYKTsKLX0KLQotaW50IEluZGV4RGF0YUtleTo6Y29tcGFyZShjb25zdCBJ
bmRleERhdGFLZXkmIG90aGVyLCBib29sIGlnbm9yZUR1cGxpY2F0ZXMsIGJvb2wmIG9rKQotewot
ICAgIEFTU0VSVChtX2RhdGFiYXNlSWQgPj0gMCk7Ci0gICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVJ
ZCA+PSAwKTsKLSAgICBBU1NFUlQobV9pbmRleElkID49IDApOwotICAgIGludCByZXN1bHQgPSBj
b21wYXJlRW5jb2RlZElEQktleXMobV9lbmNvZGVkVXNlcktleSwgb3RoZXIubV9lbmNvZGVkVXNl
cktleSwgb2spOwotICAgIGlmICghb2sgfHwgcmVzdWx0KQotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIGlmIChpZ25vcmVEdXBsaWNhdGVzKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXN1
bHQgPSBjb21wYXJlRW5jb2RlZElEQktleXMobV9lbmNvZGVkUHJpbWFyeUtleSwgb3RoZXIubV9l
bmNvZGVkUHJpbWFyeUtleSwgb2spOwotICAgIGlmICghb2sgfHwgcmVzdWx0KQotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgIHJldHVybiBjb21wYXJlSW50cyhtX3NlcXVlbmNlTnVtYmVyLCBv
dGhlci5tX3NlcXVlbmNlTnVtYmVyKTsKLX0KLQotaW50NjRfdCBJbmRleERhdGFLZXk6OmRhdGFi
YXNlSWQoKSBjb25zdAotewotICAgIEFTU0VSVChtX2RhdGFiYXNlSWQgPj0gMCk7Ci0gICAgcmV0
dXJuIG1fZGF0YWJhc2VJZDsKLX0KLQotaW50NjRfdCBJbmRleERhdGFLZXk6Om9iamVjdFN0b3Jl
SWQoKSBjb25zdAotewotICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWQgPj0gMCk7Ci0gICAgcmV0
dXJuIG1fb2JqZWN0U3RvcmVJZDsKLX0KLQotaW50NjRfdCBJbmRleERhdGFLZXk6OmluZGV4SWQo
KSBjb25zdAotewotICAgIEFTU0VSVChtX2luZGV4SWQgPj0gMCk7Ci0gICAgcmV0dXJuIG1faW5k
ZXhJZDsKLX0KLQotUGFzc1JlZlB0cjxJREJLZXk+IEluZGV4RGF0YUtleTo6dXNlcktleSgpIGNv
bnN0Ci17Ci0gICAgUmVmUHRyPElEQktleT4ga2V5OwotICAgIGRlY29kZUlEQktleShtX2VuY29k
ZWRVc2VyS2V5LmJlZ2luKCksIG1fZW5jb2RlZFVzZXJLZXkuZW5kKCksIGtleSk7Ci0gICAgcmV0
dXJuIGtleTsKLX0KLQotUGFzc1JlZlB0cjxJREJLZXk+IEluZGV4RGF0YUtleTo6cHJpbWFyeUtl
eSgpIGNvbnN0Ci17Ci0gICAgUmVmUHRyPElEQktleT4ga2V5OwotICAgIGRlY29kZUlEQktleSht
X2VuY29kZWRQcmltYXJ5S2V5LmJlZ2luKCksIG1fZW5jb2RlZFByaW1hcnlLZXkuZW5kKCksIGtl
eSk7Ci0gICAgcmV0dXJuIGtleTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSURCTGV2ZWxEQkNvZGlu
ZwotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpICYmIFVTRShMRVZFTERCKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkxldmVsREJDb2RpbmcuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOWFjMzliZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkxldmVsREJDb2RpbmcuaAorKysgL2Rldi9udWxs
CkBAIC0xLDM2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJMZXZlbERCQ29kaW5nX2gKLSNk
ZWZpbmUgSURCTGV2ZWxEQkNvZGluZ19oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkg
JiYgVVNFKExFVkVMREIpCi0KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIElEQktleTsKLWNsYXNzIElEQktleVBhdGg7Ci1jbGFzcyBMZXZl
bERCU2xpY2U7Ci0KLW5hbWVzcGFjZSBJREJMZXZlbERCQ29kaW5nIHsKLQotY29uc3QgdW5zaWdu
ZWQgY2hhciBNaW5pbXVtSW5kZXhJZCA9IDMwOwotCi0vLyBBcyBtb3N0IG9mIHRoZSBJREJLZXlz
IGFuZCBlbmNvZGVkIHZhbHVlcyBhcmUgc2hvcnQsIHdlIGluaXRpYWxpemUgc29tZSBWZWN0b3Jz
IHdpdGggYSBkZWZhdWx0IGlubGluZSBidWZmZXIgc2l6ZQotLy8gdG8gcmVkdWNlIHRoZSBtZW1v
cnkgcmUtYWxsb2NhdGlvbnMgd2hlbiB0aGUgVmVjdG9ycyBhcmUgYXBwZW5kZWQuCi1zdGF0aWMg
Y29uc3Qgc2l6ZV90IERlZmF1bHRJbmxpbmVCdWZmZXJTaXplID0gMzI7Ci0KLVZlY3RvcjxjaGFy
PiBlbmNvZGVCeXRlKHVuc2lnbmVkIGNoYXIpOwotY29uc3QgY2hhciogZGVjb2RlQnl0ZShjb25z
dCBjaGFyKiBwLCBjb25zdCBjaGFyKiBsaW1pdCwgdW5zaWduZWQgY2hhciYgZm91bmRDaGFyKTsK
LVZlY3RvcjxjaGFyPiBtYXhJREJLZXkoKTsKLVZlY3RvcjxjaGFyPiBtaW5JREJLZXkoKTsKLVZl
Y3RvcjxjaGFyPiBlbmNvZGVCb29sKGJvb2wpOwotYm9vbCBkZWNvZGVCb29sKGNvbnN0IGNoYXIq
IGJlZ2luLCBjb25zdCBjaGFyKiBlbmQpOwotVmVjdG9yPGNoYXI+IGVuY29kZUludChpbnQ2NF90
KTsKLWlubGluZSBWZWN0b3I8Y2hhcj4gZW5jb2RlSW50U2FmZWx5KGludDY0X3QgblBhcmFtLCBp
bnQ2NF90IG1heCkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKG1heCwgblBhcmFtIDw9IG1heCk7Ci0g
ICAgcmV0dXJuIGVuY29kZUludChuUGFyYW0pOwotfQotaW50NjRfdCBkZWNvZGVJbnQoY29uc3Qg
Y2hhciogYmVnaW4sIGNvbnN0IGNoYXIqIGVuZCk7Ci1WZWN0b3I8Y2hhcj4gZW5jb2RlVmFySW50
KGludDY0X3QpOwotY29uc3QgY2hhciogZGVjb2RlVmFySW50KGNvbnN0IGNoYXIqIHAsIGNvbnN0
IGNoYXIqIGxpbWl0LCBpbnQ2NF90JiBmb3VuZEludCk7Ci1WZWN0b3I8Y2hhcj4gZW5jb2RlU3Ry
aW5nKGNvbnN0IFN0cmluZyYpOwotU3RyaW5nIGRlY29kZVN0cmluZyhjb25zdCBjaGFyKiBwLCBj
b25zdCBjaGFyKiBlbmQpOwotVmVjdG9yPGNoYXI+IGVuY29kZVN0cmluZ1dpdGhMZW5ndGgoY29u
c3QgU3RyaW5nJik7Ci1jb25zdCBjaGFyKiBkZWNvZGVTdHJpbmdXaXRoTGVuZ3RoKGNvbnN0IGNo
YXIqIHAsIGNvbnN0IGNoYXIqIGxpbWl0LCBTdHJpbmcmIGZvdW5kU3RyaW5nKTsKLWludCBjb21w
YXJlRW5jb2RlZFN0cmluZ3NXaXRoTGVuZ3RoKGNvbnN0IGNoYXIqJiBwLCBjb25zdCBjaGFyKiBs
aW1pdFAsIGNvbnN0IGNoYXIqJiBxLCBjb25zdCBjaGFyKiBsaW1pdFEsIGJvb2wmIG9rKTsKLVZl
Y3RvcjxjaGFyPiBlbmNvZGVEb3VibGUoZG91YmxlKTsKLWNvbnN0IGNoYXIqIGRlY29kZURvdWJs
ZShjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBsaW1pdCwgZG91YmxlKik7Ci12b2lkIGVuY29k
ZUlEQktleShjb25zdCBJREJLZXkmLCBWZWN0b3I8Y2hhciwgRGVmYXVsdElubGluZUJ1ZmZlclNp
emU+JiBpbnRvKTsKLVZlY3RvcjxjaGFyPiBlbmNvZGVJREJLZXkoY29uc3QgSURCS2V5Jik7Ci1j
b25zdCBjaGFyKiBkZWNvZGVJREJLZXkoY29uc3QgY2hhciogcCwgY29uc3QgY2hhciogbGltaXQs
IFJlZlB0cjxJREJLZXk+JiBmb3VuZEtleSk7Ci1jb25zdCBjaGFyKiBleHRyYWN0RW5jb2RlZElE
QktleShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIFZlY3RvcjxjaGFyPiog
cmVzdWx0KTsKLWludCBjb21wYXJlRW5jb2RlZElEQktleXMoY29uc3QgVmVjdG9yPGNoYXI+Jiwg
Y29uc3QgVmVjdG9yPGNoYXI+JiwgYm9vbCYgb2spOwotVmVjdG9yPGNoYXI+IGVuY29kZUlEQktl
eVBhdGgoY29uc3QgSURCS2V5UGF0aCYpOwotSURCS2V5UGF0aCBkZWNvZGVJREJLZXlQYXRoKGNv
bnN0IGNoYXIqLCBjb25zdCBjaGFyKik7Ci0KLWludCBjb21wYXJlKGNvbnN0IExldmVsREJTbGlj
ZSYsIGNvbnN0IExldmVsREJTbGljZSYsIGJvb2wgaW5kZXhLZXlzID0gZmFsc2UpOwotCi1jbGFz
cyBLZXlQcmVmaXggewotcHVibGljOgotICAgIEtleVByZWZpeCgpOwotICAgIGV4cGxpY2l0IEtl
eVByZWZpeChpbnQ2NF90IGRhdGFiYXNlSWQpOwotICAgIEtleVByZWZpeChpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAgS2V5UHJlZml4KGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOwotICAgIHN0
YXRpYyBLZXlQcmVmaXggY3JlYXRlV2l0aFNwZWNpYWxJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKLQotICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBL
ZXlQcmVmaXgqIHJlc3VsdCk7Ci0gICAgVmVjdG9yPGNoYXI+IGVuY29kZSgpIGNvbnN0OwotICAg
IHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlRW1wdHkoKTsKLSAgICBpbnQgY29tcGFyZShjb25z
dCBLZXlQcmVmaXgmIG90aGVyKSBjb25zdDsKLQotICAgIGVudW0gVHlwZSB7Ci0gICAgICAgIEds
b2JhbE1ldGFEYXRhLAotICAgICAgICBEYXRhYmFzZU1ldGFEYXRhLAotICAgICAgICBPYmplY3RT
dG9yZURhdGEsCi0gICAgICAgIEV4aXN0c0VudHJ5LAotICAgICAgICBJbmRleERhdGEsCi0gICAg
ICAgIEludmFsaWRUeXBlCi0gICAgfTsKLQotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qga01heERh
dGFiYXNlSWRTaXplQml0cyA9IDM7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBrTWF4T2JqZWN0
U3RvcmVJZFNpemVCaXRzID0gMzsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtNYXhJbmRleElk
U2l6ZUJpdHMgPSAyOwotCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBrTWF4RGF0YWJhc2VJZFNp
emVCeXRlcyA9IDFVTEwgPDwga01heERhdGFiYXNlSWRTaXplQml0czsgLy8gOAotICAgIHN0YXRp
YyBjb25zdCBzaXplX3Qga01heE9iamVjdFN0b3JlSWRTaXplQnl0ZXMgPSAxVUxMIDw8IGtNYXhP
YmplY3RTdG9yZUlkU2l6ZUJpdHM7IC8vIDgKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtNYXhJ
bmRleElkU2l6ZUJ5dGVzID0gMVVMTCA8PCBrTWF4SW5kZXhJZFNpemVCaXRzOyAvLyA0Ci0KLSAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtNYXhEYXRhYmFzZUlkQml0cyA9IGtNYXhEYXRhYmFzZUlk
U2l6ZUJ5dGVzICogOCAtIDE7IC8vIDYzCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBrTWF4T2Jq
ZWN0U3RvcmVJZEJpdHMgPSBrTWF4T2JqZWN0U3RvcmVJZFNpemVCeXRlcyAqIDggLSAxOyAvLyA2
MwotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qga01heEluZGV4SWRCaXRzID0ga01heEluZGV4SWRT
aXplQnl0ZXMgKiA4IC0gMTsgLy8gMzEKLQotICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IGtNYXhE
YXRhYmFzZUlkID0gKDFVTEwgPDwga01heERhdGFiYXNlSWRCaXRzKSAtIDE7IC8vIG1heCBzaWdu
ZWQgaW50NjRfdAotICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IGtNYXhPYmplY3RTdG9yZUlkID0g
KDFVTEwgPDwga01heE9iamVjdFN0b3JlSWRCaXRzKSAtIDE7IC8vIG1heCBzaWduZWQgaW50NjRf
dAotICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IGtNYXhJbmRleElkID0gKDFVTEwgPDwga01heElu
ZGV4SWRCaXRzKSAtIDE7IC8vIG1heCBzaWduZWQgaW50MzJfdAotCi0gICAgc3RhdGljIGJvb2wg
aXNWYWxpZERhdGFiYXNlSWQoaW50NjRfdCBkYXRhYmFzZUlkKTsKLSAgICBzdGF0aWMgYm9vbCBp
c1ZhbGlkT2JqZWN0U3RvcmVJZChpbnQ2NF90IGluZGV4SWQpOwotICAgIHN0YXRpYyBib29sIGlz
VmFsaWRJbmRleElkKGludDY0X3QgaW5kZXhJZCk7Ci0gICAgc3RhdGljIGJvb2wgdmFsaWRJZHMo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpc1ZhbGlkRGF0YWJhc2VJZChkYXRhYmFzZUlkKSAm
JiBpc1ZhbGlkT2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKSAmJiBpc1ZhbGlkSW5kZXhJZChp
bmRleElkKTsKLSAgICB9Ci0gICAgc3RhdGljIGJvb2wgdmFsaWRJZHMoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCi0gICAgewotICAgICAgICByZXR1cm4gaXNWYWxp
ZERhdGFiYXNlSWQoZGF0YWJhc2VJZCkgJiYgaXNWYWxpZE9iamVjdFN0b3JlSWQob2JqZWN0U3Rv
cmVJZCk7Ci0gICAgfQotCi0gICAgVHlwZSB0eXBlKCkgY29uc3Q7Ci0KLSAgICBpbnQ2NF90IG1f
ZGF0YWJhc2VJZDsKLSAgICBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAgICBpbnQ2NF90IG1f
aW5kZXhJZDsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9IC0xOwotCi1w
cml2YXRlOgotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlSW50ZXJuYWwoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCk7Ci0gICAg
Ly8gU3BlY2lhbCBjb25zdHJ1Y3RvciBmb3IgY3JlYXRlV2l0aFNwZWNpYWxJbmRleCgpCi0gICAg
S2V5UHJlZml4KFR5cGUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQpOwotfTsKLQotY2xhc3MgU2NoZW1hVmVyc2lvbktleSB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoKTsKLX07Ci0KLWNsYXNzIE1heERh
dGFiYXNlSWRLZXkgewotcHVibGljOgotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlKCk7
Ci19OwotCi1jbGFzcyBEYXRhVmVyc2lvbktleSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFZlY3Rv
cjxjaGFyPiBlbmNvZGUoKTsKLX07Ci0KLWNsYXNzIERhdGFiYXNlRnJlZUxpc3RLZXkgewotcHVi
bGljOgotICAgIERhdGFiYXNlRnJlZUxpc3RLZXkoKTsKLSAgICBzdGF0aWMgY29uc3QgY2hhciog
ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgRGF0YWJhc2VGcmVl
TGlzdEtleSogcmVzdWx0KTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90
IGRhdGFiYXNlSWQpOwotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlTWF4S2V5KCk7Ci0g
ICAgaW50NjRfdCBkYXRhYmFzZUlkKCkgY29uc3Q7Ci0gICAgaW50IGNvbXBhcmUoY29uc3QgRGF0
YWJhc2VGcmVlTGlzdEtleSYgb3RoZXIpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGludDY0X3Qg
bV9kYXRhYmFzZUlkOwotfTsKLQotY2xhc3MgRGF0YWJhc2VOYW1lS2V5IHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFy
KiBsaW1pdCwgRGF0YWJhc2VOYW1lS2V5KiByZXN1bHQpOwotICAgIHN0YXRpYyBWZWN0b3I8Y2hh
cj4gZW5jb2RlKGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFt
ZSk7Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGVNaW5LZXlGb3JPcmlnaW4oY29uc3Qg
U3RyaW5nJiBvcmlnaW4pOwotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlU3RvcEtleUZv
ck9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbik7Ci0gICAgU3RyaW5nIG9yaWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fb3JpZ2luOyB9Ci0gICAgU3RyaW5nIGRhdGFiYXNlTmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGF0YWJhc2VOYW1lOyB9Ci0gICAgaW50IGNvbXBhcmUoY29uc3QgRGF0YWJhc2VO
YW1lS2V5JiBvdGhlcik7Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5nIG1fb3JpZ2luOyAvLyBGSVhN
RTogU3RvcmUgZW5jb2RlZCBzdHJpbmdzLCBvciBqdXN0IHBvaW50ZXJzLgotICAgIFN0cmluZyBt
X2RhdGFiYXNlTmFtZTsKLX07Ci0KLWNsYXNzIERhdGFiYXNlTWV0YURhdGFLZXkgewotcHVibGlj
OgotICAgIGVudW0gTWV0YURhdGFUeXBlIHsKLSAgICAgICAgT3JpZ2luTmFtZSA9IDAsCi0gICAg
ICAgIERhdGFiYXNlTmFtZSA9IDEsCi0gICAgICAgIFVzZXJWZXJzaW9uID0gMiwKLSAgICAgICAg
TWF4T2JqZWN0U3RvcmVJZCA9IDMsCi0gICAgICAgIFVzZXJJbnRWZXJzaW9uID0gNCwKLSAgICAg
ICAgTWF4U2ltcGxlTWV0YURhdGFUeXBlID0gNQotICAgIH07Ci0KLSAgICBzdGF0aWMgVmVjdG9y
PGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIE1ldGFEYXRhVHlwZSk7Ci19OwotCi1j
bGFzcyBPYmplY3RTdG9yZU1ldGFEYXRhS2V5IHsKLXB1YmxpYzoKLSAgICBlbnVtIE1ldGFEYXRh
VHlwZSB7Ci0gICAgICAgIE5hbWUgPSAwLAotICAgICAgICBLZXlQYXRoID0gMSwKLSAgICAgICAg
QXV0b0luY3JlbWVudCA9IDIsCi0gICAgICAgIEV2aWN0YWJsZSA9IDMsCi0gICAgICAgIExhc3RW
ZXJzaW9uID0gNCwKLSAgICAgICAgTWF4SW5kZXhJZCA9IDUsCi0gICAgICAgIEhhc0tleVBhdGgg
PSA2LAotICAgICAgICBLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyID0gNwotICAgIH07Ci0KLSAg
ICBPYmplY3RTdG9yZU1ldGFEYXRhS2V5KCk7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29k
ZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIE9iamVjdFN0b3JlTWV0YURh
dGFLZXkqIHJlc3VsdCk7Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIHVuc2lnbmVkIGNoYXIgbWV0YURhdGFU
eXBlKTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZU1heEtleShpbnQ2NF90IGRhdGFi
YXNlSWQpOwotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlTWF4S2V5KGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAgICBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBjaGFyIG1ldGFEYXRhVHlwZSgpIGNvbnN0OwotICAg
IGludCBjb21wYXJlKGNvbnN0IE9iamVjdFN0b3JlTWV0YURhdGFLZXkmIG90aGVyKTsKLQotcHJp
dmF0ZToKLSAgICBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAgICB1bnNpZ25lZCBjaGFyIG1f
bWV0YURhdGFUeXBlOwotfTsKLQotY2xhc3MgSW5kZXhNZXRhRGF0YUtleSB7Ci1wdWJsaWM6Ci0g
ICAgZW51bSBNZXRhRGF0YVR5cGUgewotICAgICAgICBOYW1lID0gMCwKLSAgICAgICAgVW5pcXVl
ID0gMSwKLSAgICAgICAgS2V5UGF0aCA9IDIsCi0gICAgICAgIE11bHRpRW50cnkgPSAzCi0gICAg
fTsKLQotICAgIEluZGV4TWV0YURhdGFLZXkoKTsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogZGVj
b2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgSW5kZXhNZXRhRGF0YUtl
eSogcmVzdWx0KTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCB1bnNpZ25lZCBj
aGFyIG1ldGFEYXRhVHlwZSk7Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGVNYXhLZXko
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwotICAgIHN0YXRpYyBW
ZWN0b3I8Y2hhcj4gZW5jb2RlTWF4S2V5KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOwotICAgIGludCBjb21wYXJlKGNvbnN0IEluZGV4
TWV0YURhdGFLZXkmIG90aGVyKTsKLSAgICBpbnQ2NF90IGluZGV4SWQoKSBjb25zdDsKLSAgICB1
bnNpZ25lZCBjaGFyIG1ldGFEYXRhVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YURhdGFUeXBl
OyB9Ci0KLXByaXZhdGU6Ci0gICAgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci0gICAgaW50NjRf
dCBtX2luZGV4SWQ7Ci0gICAgdW5zaWduZWQgY2hhciBtX21ldGFEYXRhVHlwZTsKLX07Ci0KLWNs
YXNzIE9iamVjdFN0b3JlRnJlZUxpc3RLZXkgewotcHVibGljOgotICAgIE9iamVjdFN0b3JlRnJl
ZUxpc3RLZXkoKTsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2RlKGNvbnN0IGNoYXIqIHN0
YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgT2JqZWN0U3RvcmVGcmVlTGlzdEtleSogcmVzdWx0KTsK
LSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGVNYXhLZXko
aW50NjRfdCBkYXRhYmFzZUlkKTsKLSAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQoKSBjb25zdDsK
LSAgICBpbnQgY29tcGFyZShjb25zdCBPYmplY3RTdG9yZUZyZWVMaXN0S2V5JiBvdGhlcik7Ci0K
LXByaXZhdGU6Ci0gICAgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci19OwotCi1jbGFzcyBJbmRl
eEZyZWVMaXN0S2V5IHsKLXB1YmxpYzoKLSAgICBJbmRleEZyZWVMaXN0S2V5KCk7Ci0gICAgc3Rh
dGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGlt
aXQsIEluZGV4RnJlZUxpc3RLZXkqIHJlc3VsdCk7Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBl
bmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCk7Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGVNYXhLZXkoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwotICAgIGludCBjb21wYXJlKGNvbnN0
IEluZGV4RnJlZUxpc3RLZXkmIG90aGVyKTsKLSAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQoKSBj
b25zdDsKLSAgICBpbnQ2NF90IGluZGV4SWQoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBpbnQ2
NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAgICBpbnQ2NF90IG1faW5kZXhJZDsKLX07Ci0KLWNsYXNz
IE9iamVjdFN0b3JlTmFtZXNLZXkgewotcHVibGljOgotICAgIC8vIEZJWE1FOiBXZSBuZXZlciB1
c2UgdGhpcyB0byBsb29rIHVwIG9iamVjdCBzdG9yZSBpZHMsIGJlY2F1c2UgYSBtYXBwaW5nCi0g
ICAgLy8gaXMga2VwdCBpbiB0aGUgSURCRGF0YWJhc2VCYWNrZW5kLiBDYW4gdGhlIG1hcHBpbmcg
YmVjb21lIHVucmVsaWFibGU/Ci0gICAgLy8gQ2FuIHdlIHJlbW92ZSB0aGlzPwotICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0
LCBPYmplY3RTdG9yZU5hbWVzS2V5KiByZXN1bHQpOwotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4g
ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUp
OwotICAgIGludCBjb21wYXJlKGNvbnN0IE9iamVjdFN0b3JlTmFtZXNLZXkmIG90aGVyKTsKLSAg
ICBTdHJpbmcgb2JqZWN0U3RvcmVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZU5h
bWU7IH0KLQotcHJpdmF0ZToKLSAgICBTdHJpbmcgbV9vYmplY3RTdG9yZU5hbWU7IC8vIEZJWE1F
OiBTdG9yZSB0aGUgZW5jb2RlZCBzdHJpbmcsIG9yIGp1c3QgcG9pbnRlcnMgdG8gaXQuCi19Owot
Ci1jbGFzcyBJbmRleE5hbWVzS2V5IHsKLXB1YmxpYzoKLSAgICBJbmRleE5hbWVzS2V5KCk7Ci0g
ICAgLy8gRklYTUU6IFdlIG5ldmVyIHVzZSB0aGlzIHRvIGxvb2sgdXAgaW5kZXggaWRzLCBiZWNh
dXNlIGEgbWFwcGluZwotICAgIC8vIGlzIGtlcHQgYXQgYSBoaWdoZXIgbGV2ZWwuCi0gICAgc3Rh
dGljIGNvbnN0IGNoYXIqIGRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGlt
aXQsIEluZGV4TmFtZXNLZXkqIHJlc3VsdCk7Ci0gICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNv
ZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmlu
ZyYgaW5kZXhOYW1lKTsKLSAgICBpbnQgY29tcGFyZShjb25zdCBJbmRleE5hbWVzS2V5JiBvdGhl
cik7Ci0gICAgU3RyaW5nIGluZGV4TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhOYW1lOyB9
Ci0KLXByaXZhdGU6Ci0gICAgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci0gICAgU3RyaW5nIG1f
aW5kZXhOYW1lOwotfTsKLQotY2xhc3MgT2JqZWN0U3RvcmVEYXRhS2V5IHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFy
KiBlbmQsIE9iamVjdFN0b3JlRGF0YUtleSogcmVzdWx0KTsKLSAgICBzdGF0aWMgVmVjdG9yPGNo
YXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29u
c3QgVmVjdG9yPGNoYXI+IGVuY29kZWRVc2VyS2V5KTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+
IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
SURCS2V5JiB1c2VyS2V5KTsKLSAgICBpbnQgY29tcGFyZShjb25zdCBPYmplY3RTdG9yZURhdGFL
ZXkmIG90aGVyLCBib29sJiBvayk7Ci0gICAgUGFzc1JlZlB0cjxJREJLZXk+IHVzZXJLZXkoKSBj
b25zdDsKLSAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBTcGVjaWFsSW5kZXhOdW1iZXI7Ci0KLXBy
aXZhdGU6Ci0gICAgVmVjdG9yPGNoYXI+IG1fZW5jb2RlZFVzZXJLZXk7Ci19OwotCi1jbGFzcyBF
eGlzdHNFbnRyeUtleSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlY29kZShj
b25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogZW5kLCBFeGlzdHNFbnRyeUtleSogcmVzdWx0
KTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgVmVjdG9yPGNoYXI+JiBlbmNvZGVkS2V5KTsKLSAg
ICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiB1c2VyS2V5KTsKLSAgICBpbnQgY29tcGFyZShj
b25zdCBFeGlzdHNFbnRyeUtleSYgb3RoZXIsIGJvb2wmIG9rKTsKLSAgICBQYXNzUmVmUHRyPElE
QktleT4gdXNlcktleSgpIGNvbnN0OwotCi0gICAgc3RhdGljIGNvbnN0IGludDY0X3QgU3BlY2lh
bEluZGV4TnVtYmVyOwotCi1wcml2YXRlOgotICAgIFZlY3RvcjxjaGFyPiBtX2VuY29kZWRVc2Vy
S2V5OwotfTsKLQotY2xhc3MgSW5kZXhEYXRhS2V5IHsKLXB1YmxpYzoKLSAgICBJbmRleERhdGFL
ZXkoKTsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBj
b25zdCBjaGFyKiBsaW1pdCwgSW5kZXhEYXRhS2V5KiByZXN1bHQpOwotICAgIHN0YXRpYyBWZWN0
b3I8Y2hhcj4gZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFZlY3RvcjxjaGFyPiYgZW5jb2RlZFVzZXJLZXksIGNv
bnN0IFZlY3RvcjxjaGFyPiYgZW5jb2RlZFByaW1hcnlLZXksIGludDY0X3Qgc2VxdWVuY2VOdW1i
ZXIgPSAwKTsKLSAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZShpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkm
IHVzZXJLZXkpOwotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlTWluS2V5KGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOwotICAg
IHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlTWF4S2V5KGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOwotICAgIGludCBjb21wYXJlKGNv
bnN0IEluZGV4RGF0YUtleSYgb3RoZXIsIGJvb2wgaWdub3JlRHVwbGljYXRlcywgYm9vbCYgb2sp
OwotICAgIGludDY0X3QgZGF0YWJhc2VJZCgpIGNvbnN0OwotICAgIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCgpIGNvbnN0OwotICAgIGludDY0X3QgaW5kZXhJZCgpIGNvbnN0OwotICAgIFBhc3NSZWZQ
dHI8SURCS2V5PiB1c2VyS2V5KCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1h
cnlLZXkoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKLSAg
ICBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKLSAgICBpbnQ2NF90IG1faW5kZXhJZDsKLSAgICBW
ZWN0b3I8Y2hhcj4gbV9lbmNvZGVkVXNlcktleTsKLSAgICBWZWN0b3I8Y2hhcj4gbV9lbmNvZGVk
UHJpbWFyeUtleTsKLSAgICBpbnQ2NF90IG1fc2VxdWVuY2VOdW1iZXI7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBJREJMZXZlbERCQ29kaW5nCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKLQotI2VuZGlm
IC8vIElEQkxldmVsREJDb2RpbmdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGV2ZWxkYi9JREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rpb25M
ZXZlbERCLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRiMDA0OC4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlNlcnZl
ckNvbm5lY3Rpb25MZXZlbERCLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYyNyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQlNlcnZlckNvbm5l
Y3Rpb25MZXZlbERCLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNpZiBVU0Uo
TEVWRUxEQikKLQotI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREIuaCIKLSNp
bmNsdWRlICJJREJCYWNraW5nU3RvcmVMZXZlbERCLmgiCi0jaW5jbHVkZSAiSURCQmFja2luZ1N0
b3JlVHJhbnNhY3Rpb25MZXZlbERCLmgiCi0jaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZC5oIgot
I2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5oIgotI2luY2x1ZGUgIklEQkluZGV4
V3JpdGVyTGV2ZWxEQi5oIgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0KLSNkZWZpbmUg
QVNZTkNfQ09NUExFVElPTl9DQUxMQkFDS19XSVRIX0FSRyhjYWxsYmFjaywgYXJnKSBcCi0gICAg
Y2FsbE9uTWFpblRocmVhZChbY2FsbGJhY2ssIGFyZ10oKSB7IFwKLSAgICAgICAgY2FsbGJhY2so
YXJnKTsgXAotICAgIH0pOwotCi0jZGVmaW5lIEFTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0tfV0lU
SF9UV09fQVJHUyhjYWxsYmFjaywgYXJnMSwgYXJnMikgXAotICAgIGNhbGxPbk1haW5UaHJlYWQo
W2NhbGxiYWNrXSgpIHsgXAotICAgICAgICBjYWxsYmFjayhhcmcxLCBhcmcyKTsgXAotICAgIH0p
OwotCi0jZGVmaW5lIEFTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0tfV0lUSF9OVUxMX0FSRyhjYWxs
YmFjaykgXAotICAgIGNhbGxPbk1haW5UaHJlYWQoW2NhbGxiYWNrXSgpIHsgXAotICAgICAgICBj
YWxsYmFjaygwKTsgXAotICAgIH0pOwotCi0jZGVmaW5lIEVNUFRZX0FTWU5DX0NPTVBMRVRJT05f
Q0FMTEJBQ0soY2FsbGJhY2spIFwKLSAgICBjYWxsT25NYWluVGhyZWFkKFtjYWxsYmFja10oKSB7
IFwKLSAgICAgICAgY2FsbGJhY2soKTsgXAotICAgIH0pOwotCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OklEQlNlcnZlckNvbm5lY3Rpb25MZXZl
bERCKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBJREJCYWNraW5nU3RvcmVMZXZlbERCKiBi
YWNraW5nU3RvcmUpCi0gICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCi0gICAgLCBt
X25leHRDdXJzb3JJRCgxKQotICAgICwgbV9jbG9zZWQoZmFsc2UpCi0gICAgLCBtX2RhdGFiYXNl
TmFtZShkYXRhYmFzZU5hbWUpCi17Ci19Ci0KLUlEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjp+
SURCU2VydmVyQ29ubmVjdGlvbkxldmVsREIoKQotewotfQotCi1ib29sIElEQlNlcnZlckNvbm5l
Y3Rpb25MZXZlbERCOjppc0Nsb3NlZCgpCi17Ci0gICAgcmV0dXJuIG1fY2xvc2VkOwotfQotCi12
b2lkIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpnZXRPckVzdGFibGlzaElEQkRhdGFiYXNl
TWV0YWRhdGEoR2V0SURCRGF0YWJhc2VNZXRhZGF0YUZ1bmN0aW9uIGNhbGxiYWNrKQotewotICAg
IFJlZlB0cjxJREJTZXJ2ZXJDb25uZWN0aW9uPiBzZWxmKHRoaXMpOwotICAgIG1fYmFja2luZ1N0
b3JlLT5nZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEobV9kYXRhYmFzZU5hbWUsIFtz
ZWxmLCB0aGlzLCBjYWxsYmFja10oY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEs
IGJvb2wgc3VjY2VzcykgewotICAgICAgICBjYWxsYmFjayhtZXRhZGF0YSwgc3VjY2Vzcyk7Ci0g
ICAgfSk7Ci19Ci0KLXZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmRlbGV0ZURhdGFi
YXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgQm9vbENhbGxiYWNrRnVuY3Rpb24gc3VjY2Vzc0NhbGxi
YWNrKQotewotICAgIFJlZlB0cjxJREJTZXJ2ZXJDb25uZWN0aW9uPiBzZWxmKHRoaXMpOwotICAg
IG1fYmFja2luZ1N0b3JlLT5kZWxldGVEYXRhYmFzZShuYW1lLCBbc2VsZiwgdGhpcywgc3VjY2Vz
c0NhbGxiYWNrXShib29sIHN1Y2Nlc3MpIHsKLSAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHN1Y2Nl
c3MpOwotICAgIH0pOwotfQotCi12b2lkIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpjbG9z
ZSgpCi17Ci0gICAgbV9iYWNraW5nU3RvcmUuY2xlYXIoKTsKLSAgICBtX2Nsb3NlZCA9IHRydWU7
Ci19Ci0KLXZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6Om9wZW5UcmFuc2FjdGlvbihp
bnQ2NF90IHRyYW5zYWN0aW9uSUQsIGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4mLCBJbmRleGVkREI6
OlRyYW5zYWN0aW9uTW9kZSwgQm9vbENhbGxiYWNrRnVuY3Rpb24gc3VjY2Vzc0NhbGxiYWNrKQot
ewotICAgIGlmICghbV9iYWNraW5nU3RvcmUpIHsKLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChb
c3VjY2Vzc0NhbGxiYWNrXSgpIHsKLSAgICAgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhmYWxzZSk7
Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9iYWNraW5nU3Rv
cmUtPmVzdGFibGlzaEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSUQpOwotICAg
IGNhbGxPbk1haW5UaHJlYWQoW3N1Y2Nlc3NDYWxsYmFja10oKSB7Ci0gICAgICAgIHN1Y2Nlc3ND
YWxsYmFjayh0cnVlKTsKLSAgICB9KTsKLX0KLQotdm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2
ZWxEQjo6YmVnaW5UcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCi17Ci0gICAgUmVmUHRyPElEQkJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uTGV2ZWxEQj4gdHJhbnNhY3Rpb24gPSBtX2JhY2tpbmdTdG9yZVRyYW5z
YWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JRCk7Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uKTsKLQot
ICAgIHRyYW5zYWN0aW9uLT5iZWdpbigpOwotICAgIGNhbGxPbk1haW5UaHJlYWQoY29tcGxldGlv
bkNhbGxiYWNrKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6Y29tbWl0
VHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBCb29sQ2FsbGJhY2tGdW5jdGlvbiBz
dWNjZXNzQ2FsbGJhY2spCi17Ci0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
TGV2ZWxEQj4gdHJhbnNhY3Rpb24gPSBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9ucy5nZXQodHJh
bnNhY3Rpb25JRCk7Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uKTsKLQotICAgIGJvb2wgcmVzdWx0
ID0gdHJhbnNhY3Rpb24tPmNvbW1pdCgpOwotICAgIGNhbGxPbk1haW5UaHJlYWQoW3N1Y2Nlc3ND
YWxsYmFjaywgcmVzdWx0XSgpIHsKLSAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHJlc3VsdCk7Ci0g
ICAgfSk7Ci19Ci0KLXZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OnJlc2V0VHJhbnNh
Y3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxl
dGlvbkNhbGxiYWNrKQotewotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxl
dmVsREI+IHRyYW5zYWN0aW9uID0gbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbnMuZ2V0KHRyYW5z
YWN0aW9uSUQpOwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbik7Ci0KLSAgICB0cmFuc2FjdGlvbi0+
cmVzZXRUcmFuc2FjdGlvbigpOwotICAgIGNhbGxPbk1haW5UaHJlYWQoY29tcGxldGlvbkNhbGxi
YWNrKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6cm9sbGJhY2tUcmFu
c2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21w
bGV0aW9uQ2FsbGJhY2spCi17Ci0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
TGV2ZWxEQj4gdHJhbnNhY3Rpb24gPSBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9ucy5nZXQodHJh
bnNhY3Rpb25JRCk7Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uKTsKLQotICAgIHRyYW5zYWN0aW9u
LT5yb2xsYmFjaygpOwotICAgIGNhbGxPbk1haW5UaHJlYWQoY29tcGxldGlvbkNhbGxiYWNrKTsK
LX0KLQotdm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6c2V0SW5kZXhLZXlzKGludDY0
X3QgdHJhbnNhY3Rpb25JRCwgaW50NjRfdCBkYXRhYmFzZUlELCBpbnQ2NF90IG9iamVjdFN0b3Jl
SUQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEsIElE
QktleSYgcHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElEcywgY29uc3Qg
VmVjdG9yPFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4+JiBpbmRleEtleXMsIHN0ZDo6ZnVuY3Rpb248
dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKQot
ewotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI+IGJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uID0gbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0
aW9uSUQpOwotICAgIEFTU0VSVChiYWNraW5nU3RvcmVUcmFuc2FjdGlvbik7Ci0KLSAgICBSZWZQ
dHI8SURCUmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmllcjsKLSAgICBib29sIG9rID0g
bV9iYWNraW5nU3RvcmUtPmtleUV4aXN0c0luT2JqZWN0U3RvcmUoKmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uLCBkYXRhYmFzZUlELCBvYmplY3RTdG9yZUlELCBwcmltYXJ5S2V5LCByZWNvcmRJZGVu
dGlmaWVyKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW2NvbXBs
ZXRpb25DYWxsYmFja10oKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJ
bnRlcm5hbCBlcnJvcjogc2V0dGluZyBpbmRleCBrZXlzLiIpKTsKLSAgICAgICAgfSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFyZWNvcmRJZGVudGlmaWVyKSB7Ci0gICAgICAg
IGNhbGxPbk1haW5UaHJlYWQoW2NvbXBsZXRpb25DYWxsYmFja10oKSB7Ci0gICAgICAgICAgICBj
b21wbGV0aW9uQ2FsbGJhY2soSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvcjogc2V0dGluZyBpbmRleCBrZXlz
IGZvciBvYmplY3Qgc3RvcmUuIikpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIFZlY3RvcjxSZWZQdHI8SURCSW5kZXhXcml0ZXJMZXZlbERCPj4gaW5kZXhXcml0
ZXJzOwotICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgYm9vbCBvYmV5c0NvbnN0cmFpbnRz
ID0gZmFsc2U7Ci0KLSAgICBib29sIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9y
ZS0+bWFrZUluZGV4V3JpdGVycyh0cmFuc2FjdGlvbklELCBkYXRhYmFzZUlELCBvYmplY3RTdG9y
ZU1ldGFkYXRhLCBwcmltYXJ5S2V5LCBmYWxzZSwgaW5kZXhJRHMsIGluZGV4S2V5cywgaW5kZXhX
cml0ZXJzLCAmZXJyb3JNZXNzYWdlLCBvYmV5c0NvbnN0cmFpbnRzKTsKLSAgICBpZiAoIWJhY2tp
bmdTdG9yZVN1Y2Nlc3MpIHsKLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChbY29tcGxldGlvbkNh
bGxiYWNrXSgpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFs
IGVycm9yOiBiYWNraW5nIHN0b3JlIGVycm9yIHVwZGF0aW5nIGluZGV4IGtleXMuIikpOwotICAg
ICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW9iZXlzQ29uc3RyYWlu
dHMpIHsKLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChbY29tcGxldGlvbkNhbGxiYWNrLCBlcnJv
ck1lc3NhZ2VdKCkgewotICAgICAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCBlcnJv
ck1lc3NhZ2UpKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVycy5zaXplKCk7ICsraSkgewotICAgICAg
ICBJREJJbmRleFdyaXRlckxldmVsREIqIGluZGV4V3JpdGVyID0gaW5kZXhXcml0ZXJzW2ldLmdl
dCgpOwotICAgICAgICBpbmRleFdyaXRlci0+d3JpdGVJbmRleEtleXMocmVjb3JkSWRlbnRpZmll
ci5nZXQoKSwgKm1fYmFja2luZ1N0b3JlLCAqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIGRhdGFi
YXNlSUQsIG9iamVjdFN0b3JlSUQpOwotICAgIH0KLQotICAgIEFTWU5DX0NPTVBMRVRJT05fQ0FM
TEJBQ0tfV0lUSF9OVUxMX0FSRyhjb21wbGV0aW9uQ2FsbGJhY2spOwotfQotCi12b2lkIElEQlNl
cnZlckNvbm5lY3Rpb25MZXZlbERCOjpjcmVhdGVPYmplY3RTdG9yZShJREJUcmFuc2FjdGlvbkJh
Y2tlbmQmIHRyYW5zYWN0aW9uLCBjb25zdCBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbiYgb3Bl
cmF0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+
IGNvbXBsZXRpb25DYWxsYmFjaykKLXsKLSAgICBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxl
dmVsREIqIGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uID0gbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlv
bnMuZ2V0KHRyYW5zYWN0aW9uLmlkKCkpOwotICAgIEFTU0VSVChiYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbik7Ci0KLSAgICBTdHJpbmcgb2JqZWN0U3RvcmVOYW1lID0gb3BlcmF0aW9uLm9iamVjdFN0
b3JlTWV0YWRhdGEoKS5uYW1lOwotCi0gICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2Jq
ZWN0U3RvcmUoKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgp
LmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9yZU1ldGFkYXRhKCkuaWQsIG9iamVjdFN0b3JlTmFt
ZSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlTWV0YWRhdGEoKS5rZXlQYXRoLCBvcGVyYXRpb24ub2Jq
ZWN0U3RvcmVNZXRhZGF0YSgpLmF1dG9JbmNyZW1lbnQpKSB7Ci0gICAgICAgIGNhbGxPbk1haW5U
aHJlYWQoW2NvbXBsZXRpb25DYWxsYmFjaywgb2JqZWN0U3RvcmVOYW1lXSgpIHsKLSAgICAgICAg
ICAgIGNvbXBsZXRpb25DYWxsYmFjayhJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9y
IGNyZWF0aW5nIG9iamVjdCBzdG9yZSAnJXMnLiIsIG9iamVjdFN0b3JlTmFtZS51dGY4KCkuZGF0
YSgpKSkpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBBU1lOQ19D
T01QTEVUSU9OX0NBTExCQUNLX1dJVEhfTlVMTF9BUkcoY29tcGxldGlvbkNhbGxiYWNrKTsKLX0K
LQotdm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6Y3JlYXRlSW5kZXgoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlvbiwgY29uc3QgQ3JlYXRlSW5kZXhPcGVyYXRpb24mIG9w
ZXJhdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4p
PiBjb21wbGV0aW9uQ2FsbGJhY2spCi17Ci0gICAgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25M
ZXZlbERCKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiA9IG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rp
b25zLmdldCh0cmFuc2FjdGlvbi5pZCgpKTsKLSAgICBBU1NFUlQoYmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24pOwotCi0gICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSA9IG9w
ZXJhdGlvbi5pZGJJbmRleE1ldGFkYXRhKCk7Ci0gICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+Y3Jl
YXRlSW5kZXgoKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgp
LmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9yZUlEKCksIGluZGV4TWV0YWRhdGEuaWQsIGluZGV4
TWV0YWRhdGEubmFtZSwgaW5kZXhNZXRhZGF0YS5rZXlQYXRoLCBpbmRleE1ldGFkYXRhLnVuaXF1
ZSwgaW5kZXhNZXRhZGF0YS5tdWx0aUVudHJ5KSkgewotICAgICAgICBjYWxsT25NYWluVGhyZWFk
KFtjb21wbGV0aW9uQ2FsbGJhY2ssIGluZGV4TWV0YWRhdGFdKCkgewotICAgICAgICAgICAgY29t
cGxldGlvbkNhbGxiYWNrKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3Igd2hlbiB0
cnlpbmcgdG8gY3JlYXRlIGluZGV4ICclcycuIiwgaW5kZXhNZXRhZGF0YS5uYW1lLnV0ZjgoKS5k
YXRhKCkpKSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEFTWU5D
X0NPTVBMRVRJT05fQ0FMTEJBQ0tfV0lUSF9OVUxMX0FSRyhjb21wbGV0aW9uQ2FsbGJhY2spOwot
fQotCi12b2lkIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpkZWxldGVJbmRleChJREJUcmFu
c2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBjb25zdCBEZWxldGVJbmRleE9wZXJhdGlvbiYg
b3BlcmF0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9y
Pik+IGNvbXBsZXRpb25DYWxsYmFjaykKLXsKLSAgICBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bkxldmVsREIqIGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uID0gbV9iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbnMuZ2V0KHRyYW5zYWN0aW9uLmlkKCkpOwotICAgIEFTU0VSVChiYWNraW5nU3RvcmVUcmFu
c2FjdGlvbik7Ci0KLSAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhID0g
b3BlcmF0aW9uLmlkYkluZGV4TWV0YWRhdGEoKTsKLSAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5k
ZWxldGVJbmRleCgqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNl
KCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgaW5kZXhNZXRhZGF0YS5pZCkpIHsK
LSAgICAgICAgY2FsbE9uTWFpblRocmVhZChbY29tcGxldGlvbkNhbGxiYWNrLCBpbmRleE1ldGFk
YXRhXSgpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3Jt
YXQoIkludGVybmFsIGVycm9yIGRlbGV0aW5nIGluZGV4ICclcycuIiwgaW5kZXhNZXRhZGF0YS5u
YW1lLnV0ZjgoKS5kYXRhKCkpKSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIEFTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0tfV0lUSF9OVUxMX0FSRyhjb21wbGV0aW9u
Q2FsbGJhY2spOwotfQotCi12b2lkIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpnZXQoSURC
VHJhbnNhY3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlvbiwgY29uc3QgR2V0T3BlcmF0aW9uJiBvcGVy
YXRpb24sIHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBJREJHZXRSZXN1bHQmLCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKQotewotICAgIElEQkJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQiogYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24gPSBtX2Jh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb24uaWQoKSk7Ci0gICAgQVNTRVJU
KGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKTsKLQotICAgIFJlZlB0cjxJREJLZXk+IGtleTsKLQot
ICAgIGlmIChvcGVyYXRpb24ua2V5UmFuZ2UoKS0+aXNPbmx5S2V5KCkpCi0gICAgICAgIGtleSA9
IG9wZXJhdGlvbi5rZXlSYW5nZSgpLT5sb3dlcigpOwotICAgIGVsc2UgewotICAgICAgICBSZWZQ
dHI8SURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQj4gYmFja2luZ1N0b3JlQ3Vyc29yOwotICAg
ICAgICBpbnQ2NF90IGN1cnNvcklEID0gbV9uZXh0Q3Vyc29ySUQrKzsKLQotICAgICAgICBpZiAo
b3BlcmF0aW9uLmluZGV4SUQoKSA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKLSAg
ICAgICAgICAgIEFTU0VSVChvcGVyYXRpb24uY3Vyc29yVHlwZSgpICE9IEluZGV4ZWREQjo6Q3Vy
c29yVHlwZTo6S2V5T25seSk7Ci0gICAgICAgICAgICAvLyBPYmplY3RTdG9yZSBSZXRyaWV2YWwg
T3BlcmF0aW9uCi0gICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9y
ZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKGN1cnNvcklELCAqYmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQo
KSwgb3BlcmF0aW9uLmtleVJhbmdlKCksIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uOjpOZXh0
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChvcGVyYXRpb24uY3Vyc29yVHlw
ZSgpID09IEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5T25seSkgewotICAgICAgICAgICAgICAg
IC8vIEluZGV4IFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KLSAgICAgICAgICAgICAgICBiYWNr
aW5nU3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4S2V5Q3Vyc29yKGN1cnNv
cklELCAqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQo
KSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgb3BlcmF0aW9uLmluZGV4SUQoKSwgb3BlcmF0
aW9uLmtleVJhbmdlKCksIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uOjpOZXh0KTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gSW5kZXggUmVmZXJlbmNlZCBWYWx1
ZSBSZXRyaWV2YWwgT3BlcmF0aW9uCi0gICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29y
ID0gbV9iYWNraW5nU3RvcmUtPm9wZW5JbmRleEN1cnNvcihjdXJzb3JJRCwgKmJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlkKCksIG9wZXJhdGlvbi5vYmpl
Y3RTdG9yZUlEKCksIG9wZXJhdGlvbi5pbmRleElEKCksIG9wZXJhdGlvbi5rZXlSYW5nZSgpLCBJ
bmRleGVkREI6OkN1cnNvckRpcmVjdGlvbjo6TmV4dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewotICAgICAgICAgICAgQVNZ
TkNfQ09NUExFVElPTl9DQUxMQkFDS19XSVRIX1RXT19BUkdTKGNvbXBsZXRpb25DYWxsYmFjaywg
SURCR2V0UmVzdWx0KCksIG51bGxwdHIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KLSAgICAgICAga2V5ID0gYmFja2luZ1N0b3JlQ3Vyc29yLT5rZXkoKTsKLSAgICB9Ci0KLSAg
ICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5OwotICAgIGJvb2wgb2s7Ci0gICAgaWYgKG9wZXJh
dGlvbi5pbmRleElEKCkgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7Ci0gICAgICAg
IC8vIE9iamVjdCBTdG9yZSBSZXRyaWV2YWwgT3BlcmF0aW9uCi0gICAgICAgIFZlY3RvcjxjaGFy
PiB2YWx1ZTsKLSAgICAgICAgb2sgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0UmVjb3JkKCpiYWNraW5n
U3RvcmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5pZCgpLCBvcGVyYXRpb24u
b2JqZWN0U3RvcmVJRCgpLCAqa2V5LCB2YWx1ZSk7Ci0gICAgICAgIGlmICghb2spIHsKLSAgICAg
ICAgICAgIEFTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0tfV0lUSF9UV09fQVJHUyhjb21wbGV0aW9u
Q2FsbGJhY2ssIElEQkdldFJlc3VsdCgpLCBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGluIGdldFJlY29y
ZC4iKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodmFs
dWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBBU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLX1dJ
VEhfVFdPX0FSR1MoY29tcGxldGlvbkNhbGxiYWNrLCBJREJHZXRSZXN1bHQoKSwgbnVsbHB0cik7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBJREJHZXRSZXN1bHQg
cmVzdWx0OwotCi0gICAgICAgIGlmIChvcGVyYXRpb24uYXV0b0luY3JlbWVudCgpICYmICFvcGVy
YXRpb24ua2V5UGF0aCgpLmlzTnVsbCgpKQotICAgICAgICAgICAgcmVzdWx0ID0gSURCR2V0UmVz
dWx0KFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IodmFsdWUpLCBrZXksIG9wZXJhdGlvbi5rZXlQ
YXRoKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBJREJHZXRSZXN1bHQo
U2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSkpOwotCi0gICAgICAgIGNhbGxPbk1haW5U
aHJlYWQoW2NvbXBsZXRpb25DYWxsYmFjaywgcmVzdWx0XSgpIHsKLSAgICAgICAgICAgIGNvbXBs
ZXRpb25DYWxsYmFjayhyZXN1bHQsIG51bGxwdHIpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIEZyb20gaGVyZSB3ZSBhcmUgZGVhbGluZyBvbmx5IHdpdGgg
aW5kZXhlcy4KLSAgICBvayA9IG1fYmFja2luZ1N0b3JlLT5nZXRQcmltYXJ5S2V5VmlhSW5kZXgo
KmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlkKCksIG9w
ZXJhdGlvbi5vYmplY3RTdG9yZUlEKCksIG9wZXJhdGlvbi5pbmRleElEKCksICprZXksIHByaW1h
cnlLZXkpOwotICAgIGlmICghb2spIHsKLSAgICAgICAgQVNZTkNfQ09NUExFVElPTl9DQUxMQkFD
S19XSVRIX1RXT19BUkdTKGNvbXBsZXRpb25DYWxsYmFjaywgSURCR2V0UmVzdWx0KCksIElEQkRh
dGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAi
SW50ZXJuYWwgZXJyb3IgaW4gZ2V0UHJpbWFyeUtleVZpYUluZGV4LiIpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAoIXByaW1hcnlLZXkpIHsKLSAgICAgICAgQVNZTkNfQ09NUExF
VElPTl9DQUxMQkFDS19XSVRIX1RXT19BUkdTKGNvbXBsZXRpb25DYWxsYmFjaywgSURCR2V0UmVz
dWx0KCksIG51bGxwdHIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChvcGVyYXRp
b24uY3Vyc29yVHlwZSgpID09IEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5T25seSkgewotICAg
ICAgICAvLyBJbmRleCBWYWx1ZSBSZXRyaWV2YWwgT3BlcmF0aW9uCi0gICAgICAgIElEQkdldFJl
c3VsdCByZXN1bHQocHJpbWFyeUtleS5yZWxlYXNlKCkpOwotICAgICAgICBjYWxsT25NYWluVGhy
ZWFkKFtjb21wbGV0aW9uQ2FsbGJhY2ssIHJlc3VsdF0oKSB7Ci0gICAgICAgICAgICBjb21wbGV0
aW9uQ2FsbGJhY2socmVzdWx0LCBudWxscHRyKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBJbmRleCBSZWZlcmVuY2VkIFZhbHVlIFJldHJpZXZhbCBPcGVy
YXRpb24KLSAgICBWZWN0b3I8Y2hhcj4gdmFsdWU7Ci0gICAgb2sgPSBtX2JhY2tpbmdTdG9yZS0+
Z2V0UmVjb3JkKCpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24uZGF0YWJhc2Uo
KS5pZCgpLCBvcGVyYXRpb24ub2JqZWN0U3RvcmVJRCgpLCAqcHJpbWFyeUtleSwgdmFsdWUpOwot
ICAgIGlmICghb2spIHsKLSAgICAgICAgQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDS19XSVRIX1RX
T19BUkdTKGNvbXBsZXRpb25DYWxsYmFjaywgSURCR2V0UmVzdWx0KCksIElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwg
ZXJyb3IgaW4gZ2V0UmVjb3JkLiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
ICh2YWx1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDS19X
SVRIX1RXT19BUkdTKGNvbXBsZXRpb25DYWxsYmFjaywgSURCR2V0UmVzdWx0KCksIG51bGxwdHIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChvcGVyYXRpb24uYXV0b0luY3JlbWVu
dCgpICYmICFvcGVyYXRpb24ua2V5UGF0aCgpLmlzTnVsbCgpKSB7Ci0gICAgICAgIElEQkdldFJl
c3VsdCByZXN1bHQoU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rvcih2YWx1ZSksIGtleSwgb3BlcmF0
aW9uLmtleVBhdGgoKSk7Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW2NvbXBsZXRpb25DYWxs
YmFjaywgcmVzdWx0XSgpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhyZXN1bHQs
IG51bGxwdHIpOwotICAgICAgICB9KTsKLQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
SURCR2V0UmVzdWx0IHJlc3VsdChTaGFyZWRCdWZmZXI6OmFkb3B0VmVjdG9yKHZhbHVlKSk7Ci0g
ICAgY2FsbE9uTWFpblRocmVhZChbY29tcGxldGlvbkNhbGxiYWNrLCByZXN1bHRdKCkgewotICAg
ICAgICBjb21wbGV0aW9uQ2FsbGJhY2socmVzdWx0LCBudWxscHRyKTsKLSAgICB9KTsKLX0KLQot
dm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6cHV0KElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCYgdHJhbnNhY3Rpb24sIGNvbnN0IFB1dE9wZXJhdGlvbiYgb3BlcmF0aW9uLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+
KT4gY29tcGxldGlvbkNhbGxiYWNrKQotewotICAgIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
TGV2ZWxEQiogYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24gPSBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0
aW9ucy5nZXQodHJhbnNhY3Rpb24uaWQoKSk7Ci0gICAgQVNTRVJUKGJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKTsKLQotICAgIGJvb2wga2V5V2FzR2VuZXJhdGVkID0gZmFsc2U7Ci0KLSAgICBSZWZQ
dHI8SURCS2V5PiBrZXk7Ci0gICAgaWYgKG9wZXJhdGlvbi5wdXRNb2RlKCkgIT0gSURCRGF0YWJh
c2VCYWNrZW5kOjpDdXJzb3JVcGRhdGUgJiYgb3BlcmF0aW9uLm9iamVjdFN0b3JlKCkuYXV0b0lu
Y3JlbWVudCAmJiAhb3BlcmF0aW9uLmtleSgpKSB7Ci0gICAgICAgIFJlZlB0cjxJREJLZXk+IGF1
dG9JbmNLZXkgPSBtX2JhY2tpbmdTdG9yZS0+Z2VuZXJhdGVLZXkodHJhbnNhY3Rpb24sIHRyYW5z
YWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlKCkuaWQpOwotICAg
ICAgICBrZXlXYXNHZW5lcmF0ZWQgPSB0cnVlOwotICAgICAgICBpZiAoIWF1dG9JbmNLZXktPmlz
VmFsaWQoKSkgewotICAgICAgICAgICAgQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDS19XSVRIX1RX
T19BUkdTKGNvbXBsZXRpb25DYWxsYmFjaywgbnVsbHB0ciwgSURCRGF0YWJhc2VFcnJvcjo6Y3Jl
YXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsICJNYXhpbXVtIGtleSBn
ZW5lcmF0b3IgdmFsdWUgcmVhY2hlZC4iKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAga2V5ID0gYXV0b0luY0tleTsKLSAgICB9IGVsc2UKLSAgICAgICAga2V5ID0g
b3BlcmF0aW9uLmtleSgpOwotCi0gICAgQVNTRVJUKGtleSk7Ci0gICAgQVNTRVJUKGtleS0+aXNW
YWxpZCgpKTsKLQotICAgIFJlZlB0cjxJREJSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlm
aWVyOwotICAgIGlmIChvcGVyYXRpb24ucHV0TW9kZSgpID09IElEQkRhdGFiYXNlQmFja2VuZDo6
QWRkT25seSkgewotICAgICAgICBib29sIG9rID0gbV9iYWNraW5nU3RvcmUtPmtleUV4aXN0c0lu
T2JqZWN0U3RvcmUoKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbi5kYXRhYmFz
ZSgpLmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9yZSgpLmlkLCAqa2V5LCByZWNvcmRJZGVudGlm
aWVyKTsKLSAgICAgICAgaWYgKCFvaykgewotICAgICAgICAgICAgQVNZTkNfQ09NUExFVElPTl9D
QUxMQkFDS19XSVRIX1RXT19BUkdTKGNvbXBsZXRpb25DYWxsYmFjaywgbnVsbHB0ciwgSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJ
bnRlcm5hbCBlcnJvciBjaGVja2luZyBrZXkgZXhpc3RlbmNlLiIpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAocmVjb3JkSWRlbnRpZmllcikgewotICAgICAg
ICAgICAgQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDS19XSVRIX1RXT19BUkdTKGNvbXBsZXRpb25D
YWxsYmFjaywgbnVsbHB0ciwgSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsICJLZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIG9iamVj
dCBzdG9yZS4iKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBWZWN0b3I8UmVmUHRyPElEQkluZGV4V3JpdGVyTGV2ZWxEQj4+IGluZGV4V3JpdGVyczsKLSAg
ICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIGJvb2wgb2JleXNDb25zdHJhaW50cyA9IGZhbHNl
OwotICAgIGJvb2wgYmFja2luZ1N0b3JlU3VjY2VzcyA9IG1fYmFja2luZ1N0b3JlLT5tYWtlSW5k
ZXhXcml0ZXJzKHRyYW5zYWN0aW9uLmlkKCksIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwg
b3BlcmF0aW9uLm9iamVjdFN0b3JlKCksICprZXksIGtleVdhc0dlbmVyYXRlZCwgb3BlcmF0aW9u
LmluZGV4SURzKCksIG9wZXJhdGlvbi5pbmRleEtleXMoKSwgaW5kZXhXcml0ZXJzLCAmZXJyb3JN
ZXNzYWdlLCBvYmV5c0NvbnN0cmFpbnRzKTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3Mp
IHsKLSAgICAgICAgQVNZTkNfQ09NUExFVElPTl9DQUxMQkFDS19XSVRIX1RXT19BUkdTKGNvbXBs
ZXRpb25DYWxsYmFjaywgbnVsbHB0ciwgSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvcjogYmFja2luZyBzdG9y
ZSBlcnJvciB1cGRhdGluZyBpbmRleCBrZXlzLiIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBpZiAoIW9iZXlzQ29uc3RyYWludHMpIHsKLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChb
Y29tcGxldGlvbkNhbGxiYWNrLCBlcnJvck1lc3NhZ2VdKCkgeyBcCi0gICAgICAgICAgICBjb21w
bGV0aW9uQ2FsbGJhY2sobnVsbHB0ciwgSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsIGVycm9yTWVzc2FnZSkpOyBcCi0gICAgICAg
IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQmVmb3JlIHRoaXMgcG9pbnQs
IGRvbid0IGRvIGFueSBtdXRhdGlvbi4gQWZ0ZXIgdGhpcyBwb2ludCwgcm9sbGJhY2sgdGhlIHRy
YW5zYWN0aW9uIGluIGNhc2Ugb2YgZXJyb3IuCi0gICAgYmFja2luZ1N0b3JlU3VjY2VzcyA9IG1f
YmFja2luZ1N0b3JlLT5wdXRSZWNvcmQoKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFuc2Fj
dGlvbi5kYXRhYmFzZSgpLmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9yZSgpLmlkLCAqa2V5LCBv
cGVyYXRpb24udmFsdWUoKSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSk7Ci0gICAgaWYgKCFiYWNr
aW5nU3RvcmVTdWNjZXNzKSB7Ci0gICAgICAgIEFTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0tfV0lU
SF9UV09fQVJHUyhjb21wbGV0aW9uQ2FsbGJhY2ssIG51bGxwdHIsIElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJy
b3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgcGVyZm9ybWluZyBwdXQvYWRkLiIpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhXcml0ZXJz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIElEQkluZGV4V3JpdGVyTGV2ZWxEQiogaW5kZXhXcml0
ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7Ci0gICAgICAgIGluZGV4V3JpdGVyLT53cml0ZUlu
ZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLmdldCgpLCAqbV9iYWNraW5nU3RvcmUsICpiYWNraW5n
U3RvcmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5pZCgpLCBvcGVyYXRpb24u
b2JqZWN0U3RvcmUoKS5pZCk7Ci0gICAgfQotCi0gICAgaWYgKG9wZXJhdGlvbi5vYmplY3RTdG9y
ZSgpLmF1dG9JbmNyZW1lbnQgJiYgb3BlcmF0aW9uLnB1dE1vZGUoKSAhPSBJREJEYXRhYmFzZUJh
Y2tlbmQ6OkN1cnNvclVwZGF0ZSAmJiBrZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5cGUp
IHsKLSAgICAgICAgYm9vbCBvayA9IG1fYmFja2luZ1N0b3JlLT51cGRhdGVLZXlHZW5lcmF0b3Io
dHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVj
dFN0b3JlKCkuaWQsICprZXksICFrZXlXYXNHZW5lcmF0ZWQpOwotICAgICAgICBpZiAoIW9rKSB7
Ci0gICAgICAgICAgICBBU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLX1dJVEhfVFdPX0FSR1MoY29t
cGxldGlvbkNhbGxiYWNrLCBudWxscHRyLCBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIHVwZGF0aW5nIGtl
eSBnZW5lcmF0b3IuIikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgY2FsbE9uTWFpblRocmVhZChbY29tcGxldGlvbkNhbGxiYWNrLCBrZXldKCkgeyBcCi0g
ICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhrZXkuZ2V0KCksIG51bGxwdHIpOyBcCi0gICAgfSk7
Ci19Ci0KLXZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6Om9wZW5DdXJzb3IoSURCVHJh
bnNhY3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlvbiwgY29uc3QgT3BlbkN1cnNvck9wZXJhdGlvbiYg
b3BlcmF0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoaW50NjRfdCwgUGFzc1JlZlB0cjxJREJLZXk+
LCBQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykKLXsKLSAgICBJREJCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIqIGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uID0gbV9i
YWNraW5nU3RvcmVUcmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uLmlkKCkpOwotICAgIEFTU0VS
VChiYWNraW5nU3RvcmVUcmFuc2FjdGlvbik7Ci0KLSAgICAvLyBUaGUgZnJvbnRlbmQgaGFzIGJl
Z3VuIGluZGV4aW5nLCBzbyB0aGlzIHBhdXNlcyB0aGUgdHJhbnNhY3Rpb24KLSAgICAvLyB1bnRp
bCB0aGUgaW5kZXhpbmcgaXMgY29tcGxldGUuIFRoaXMgY2FuJ3QgaGFwcGVuIGFueSBlYXJsaWVy
Ci0gICAgLy8gYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHN3aXRjaCB0byBlYXJseSBtb2RlIGlu
IGNhc2UgbXVsdGlwbGUKLSAgICAvLyBpbmRleGVzIGFyZSBiZWluZyBjcmVhdGVkIGluIGEgcm93
LCB3aXRoIHB1dCgpJ3MgaW4gYmV0d2Vlbi4KLSAgICBpZiAob3BlcmF0aW9uLnRhc2tUeXBlKCkg
PT0gSURCRGF0YWJhc2VCYWNrZW5kOjpQcmVlbXB0aXZlVGFzaykKLSAgICAgICAgdHJhbnNhY3Rp
b24uYWRkUHJlZW1wdGl2ZUV2ZW50KCk7Ci0KLSAgICBpbnQ2NF90IGN1cnNvcklEID0gbV9uZXh0
Q3Vyc29ySUQrKzsKLQotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCPiBi
YWNraW5nU3RvcmVDdXJzb3I7Ci0gICAgaWYgKG9wZXJhdGlvbi5pbmRleElEKCkgPT0gSURCSW5k
ZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7Ci0gICAgICAgIEFTU0VSVChvcGVyYXRpb24uY3Vyc29y
VHlwZSgpICE9IEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5T25seSk7Ci0gICAgICAgIGJhY2tp
bmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3IoY3Vy
c29ySUQsICpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5p
ZCgpLCBvcGVyYXRpb24ub2JqZWN0U3RvcmVJRCgpLCBvcGVyYXRpb24ua2V5UmFuZ2UoKSwgb3Bl
cmF0aW9uLmRpcmVjdGlvbigpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQob3BlcmF0
aW9uLnRhc2tUeXBlKCkgPT0gSURCRGF0YWJhc2VCYWNrZW5kOjpOb3JtYWxUYXNrKTsKLSAgICAg
ICAgaWYgKG9wZXJhdGlvbi5jdXJzb3JUeXBlKCkgPT0gSW5kZXhlZERCOjpDdXJzb3JUeXBlOjpL
ZXlPbmx5KQotICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9iYWNraW5nU3RvcmUt
Pm9wZW5JbmRleEtleUN1cnNvcihjdXJzb3JJRCwgKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0
cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlkKCksIG9wZXJhdGlvbi5vYmplY3RTdG9yZUlEKCksIG9w
ZXJhdGlvbi5pbmRleElEKCksIG9wZXJhdGlvbi5rZXlSYW5nZSgpLCBvcGVyYXRpb24uZGlyZWN0
aW9uKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBt
X2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4Q3Vyc29yKGN1cnNvcklELCAqYmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0
b3JlSUQoKSwgb3BlcmF0aW9uLmluZGV4SUQoKSwgb3BlcmF0aW9uLmtleVJhbmdlKCksIG9wZXJh
dGlvbi5kaXJlY3Rpb24oKSk7Ci0gICAgfQotCi0gICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3Ip
IHsKLSAgICAgICAgLy8gRklYTUU6IFNob3VsZCBpdCBiZSBhbiBlcnJvciB0byBub3QgaGF2ZSBh
IGJhY2tpbmcgc3RvcmUgY3Vyc29yPwotICAgICAgICBjdXJzb3JJRCA9IDA7Ci0gICAgfQotCi0g
ICAgY2FsbE9uTWFpblRocmVhZChbY29tcGxldGlvbkNhbGxiYWNrLCBjdXJzb3JJRF0oKSB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIGFjdHVhbGx5IHBhc3MgdGhlIGluaXRpYWwga2V5LCBw
cmltYXJ5S2V5LCBhbmQgdmFsdWUgdG8gdGhlIGNhbGxiYWNrLgotICAgICAgICBjb21wbGV0aW9u
Q2FsbGJhY2soY3Vyc29ySUQsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOwot
ICAgIH0pOwotfQotCi12b2lkIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpjb3VudChJREJU
cmFuc2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBjb25zdCBDb3VudE9wZXJhdGlvbiYgb3Bl
cmF0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoaW50NjRfdCwgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykKLXsKLSAgICBJREJCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbkxldmVsREIqIGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uID0gbV9iYWNraW5nU3RvcmVU
cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uLmlkKCkpOwotICAgIEFTU0VSVChiYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbik7Ci0KLSAgICB1aW50MzJfdCBjb3VudCA9IDA7Ci0gICAgUmVmUHRyPElE
QkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREI+IGJhY2tpbmdTdG9yZUN1cnNvcjsKLQotICAgIGlu
dDY0X3QgY3Vyc29ySUQgPSBtX25leHRDdXJzb3JJRCsrOwotCi0gICAgaWYgKG9wZXJhdGlvbi5p
bmRleElEKCkgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKQotICAgICAgICBiYWNraW5n
U3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKGN1
cnNvcklELCAqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCku
aWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgb3BlcmF0aW9uLmtleVJhbmdlKCksIElu
ZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uOjpOZXh0KTsKLSAgICBlbHNlCi0gICAgICAgIGJhY2tp
bmdTdG9yZUN1cnNvciA9IG1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhLZXlDdXJzb3IoY3Vyc29y
SUQsICpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5pZCgp
LCBvcGVyYXRpb24ub2JqZWN0U3RvcmVJRCgpLCBvcGVyYXRpb24uaW5kZXhJRCgpLCBvcGVyYXRp
b24ua2V5UmFuZ2UoKSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb246Ok5leHQpOwotICAgIGlm
ICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJcyB0aGlzIGFuIGVy
cm9yIGNhc2U/Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW2NvbXBsZXRpb25DYWxsYmFjaywg
Y291bnRdKCkgewotICAgICAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKGNvdW50LCBudWxscHRy
KTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkbyB7Ci0gICAg
ICAgICsrY291bnQ7Ci0gICAgfSB3aGlsZSAoYmFja2luZ1N0b3JlQ3Vyc29yLT5jb250aW51ZUZ1
bmN0aW9uKDApKTsKLQotICAgIGNhbGxPbk1haW5UaHJlYWQoW2NvbXBsZXRpb25DYWxsYmFjaywg
Y291bnRdKCkgewotICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soY291bnQsIG51bGxwdHIpOwot
ICAgIH0pOwotfQotCi12b2lkIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpkZWxldGVSYW5n
ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBjb25zdCBEZWxldGVSYW5nZU9w
ZXJhdGlvbiYgb3BlcmF0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykKLXsKLSAgICBJREJCYWNraW5nU3RvcmVU
cmFuc2FjdGlvbkxldmVsREIqIGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uID0gbV9iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uLmlkKCkpOwotICAgIEFTU0VSVChiYWNraW5n
U3RvcmVUcmFuc2FjdGlvbik7Ci0KLSAgICBpbnQ2NF90IGN1cnNvcklEID0gbV9uZXh0Q3Vyc29y
SUQrKzsKLQotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCPiBiYWNraW5n
U3RvcmVDdXJzb3IgPSBtX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKGN1cnNv
cklELCAqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQo
KSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgb3BlcmF0aW9uLmtleVJhbmdlKCksIEluZGV4
ZWREQjo6Q3Vyc29yRGlyZWN0aW9uOjpOZXh0KTsKLSAgICBpZiAoYmFja2luZ1N0b3JlQ3Vyc29y
KSB7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmRlbGV0
ZVJlY29yZCgqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCku
aWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgYmFja2luZ1N0b3JlQ3Vyc29yLT5yZWNv
cmRJZGVudGlmaWVyKCkpKSB7Ci0gICAgICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbY29t
cGxldGlvbkNhbGxiYWNrXSgpIHsKLSAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbkNhbGxi
YWNrKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCAiRXJyb3IgZGVsZXRpbmcgZGF0YSBpbiByYW5nZSIpKTsKLSAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
d2hpbGUgKGJhY2tpbmdTdG9yZUN1cnNvci0+Y29udGludWVGdW5jdGlvbigwKSk7Ci0gICAgfQot
Ci0gICAgY2FsbE9uTWFpblRocmVhZChbY29tcGxldGlvbkNhbGxiYWNrXSgpIHsKLSAgICAgICAg
Y29tcGxldGlvbkNhbGxiYWNrKG51bGxwdHIpOwotICAgIH0pOwotfQotCi12b2lkIElEQlNlcnZl
ckNvbm5lY3Rpb25MZXZlbERCOjpjbGVhck9iamVjdFN0b3JlKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCYgdHJhbnNhY3Rpb24sIGNvbnN0IENsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb24mIG9wZXJhdGlv
biwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21w
bGV0aW9uQ2FsbGJhY2spCi17Ci0gICAgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERC
KiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiA9IG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb25zLmdl
dCh0cmFuc2FjdGlvbi5pZCgpKTsKLSAgICBBU1NFUlQoYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24p
OwotCi0gICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+Y2xlYXJPYmplY3RTdG9yZSgqYmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQoKSwgb3BlcmF0aW9uLm9i
amVjdFN0b3JlSUQoKSkpIHsKLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChbY29tcGxldGlvbkNh
bGxiYWNrXSgpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkVycm9yIGNs
ZWFyaW5nIG9iamVjdCBzdG9yZSIpKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBBU1lOQ19DT01QTEVUSU9OX0NBTExCQUNLX1dJVEhfTlVMTF9BUkcoY29tcGxl
dGlvbkNhbGxiYWNrKTsKLX0KLQotdm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6ZGVs
ZXRlT2JqZWN0U3RvcmUoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlvbiwgY29uc3Qg
RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24mIG9wZXJhdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lk
KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spCi17Ci0g
ICAgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCKiBiYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbiA9IG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbi5pZCgpKTsK
LSAgICBBU1NFUlQoYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24pOwotCi0gICAgY29uc3QgSURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG9wZXJhdGlvbi5vYmplY3RT
dG9yZU1ldGFkYXRhKCk7Ci0KLSAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5kZWxldGVPYmplY3RT
dG9yZSgqYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uLmRhdGFiYXNlKCkuaWQo
KSwgb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCkpIHsKLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChb
Y29tcGxldGlvbkNhbGxiYWNrLCBvYmplY3RTdG9yZU1ldGFkYXRhXSgpIHsKLSAgICAgICAgICAg
IGNvbXBsZXRpb25DYWxsYmFjayhJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIGRl
bGV0aW5nIG9iamVjdCBzdG9yZSAnJXMnLiIsIG9iamVjdFN0b3JlTWV0YWRhdGEubmFtZS51dGY4
KCkuZGF0YSgpKSkpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBB
U1lOQ19DT01QTEVUSU9OX0NBTExCQUNLX1dJVEhfTlVMTF9BUkcoY29tcGxldGlvbkNhbGxiYWNr
KTsKLX0KLQotdm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6Y2hhbmdlRGF0YWJhc2VW
ZXJzaW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24sIGNvbnN0IElEQkRhdGFi
YXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9pZChQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKQotewotICAg
IElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQiogYmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24gPSBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb24uaWQoKSk7Ci0g
ICAgQVNTRVJUKGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKTsKLQotICAgIElEQkRhdGFiYXNlQmFj
a2VuZCYgZGF0YWJhc2UgPSB0cmFuc2FjdGlvbi5kYXRhYmFzZSgpOwotICAgIGludDY0X3QgZGF0
YWJhc2VJZCA9IGRhdGFiYXNlLmlkKCk7Ci0KLSAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT51cGRh
dGVJREJEYXRhYmFzZVZlcnNpb24oKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCBkYXRhYmFzZUlk
LCBkYXRhYmFzZS5tZXRhZGF0YSgpLnZlcnNpb24pKSB7Ci0gICAgICAgIFJlZlB0cjxJREJEYXRh
YmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiRXJyb3Igd3JpdGluZyBkYXRhIHRvIHN0YWJsZSBzdG9y
YWdlIHdoZW4gdXBkYXRpbmcgdmVyc2lvbi4iKTsKLSAgICAgICAgQVNZTkNfQ09NUExFVElPTl9D
QUxMQkFDS19XSVRIX0FSRyhjb21wbGV0aW9uQ2FsbGJhY2ssIGVycm9yKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEFTWU5DX0NPTVBMRVRJT05fQ0FMTEJBQ0tfV0lUSF9OVUxMX0FS
Ryhjb21wbGV0aW9uQ2FsbGJhY2spOwotfQotCi12b2lkIElEQlNlcnZlckNvbm5lY3Rpb25MZXZl
bERCOjpjdXJzb3JBZHZhbmNlKElEQkN1cnNvckJhY2tlbmQmIGN1cnNvciwgY29uc3QgQ3Vyc29y
QWR2YW5jZU9wZXJhdGlvbiYgb3BlcmF0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0
cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykKLXsKLSAg
ICBJREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCKiBiYWNraW5nU3RvcmVDdXJzb3IgPSBjdXJz
b3IuaWQoKSA/IG1fYmFja2luZ1N0b3JlQ3Vyc29ycy5nZXQoY3Vyc29yLmlkKCkpIDogMDsKLSNp
Zm5kZWYgTkRFQlVHCi0gICAgaWYgKGN1cnNvci5pZCgpKQotICAgICAgICBBU1NFUlQoYmFja2lu
Z1N0b3JlQ3Vyc29yKTsKLSNlbmRpZgotCi0gICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IgfHwg
IWJhY2tpbmdTdG9yZUN1cnNvci0+YWR2YW5jZShvcGVyYXRpb24uY291bnQoKSkpIHsKLSAgICAg
ICAgbV9iYWNraW5nU3RvcmVDdXJzb3JzLnJlbW92ZShjdXJzb3IuaWQoKSk7Ci0KLSAgICAgICAg
Y2FsbE9uTWFpblRocmVhZChbY29tcGxldGlvbkNhbGxiYWNrXSgpIHsKLSAgICAgICAgICAgIGNv
bXBsZXRpb25DYWxsYmFjayhudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIlVua25vd24g
ZXJyb3IgYWR2YW5jaW5nIGN1cnNvciIpKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IGJhY2tpbmdTdG9yZUN1cnNvci0+
a2V5KCksIHByaW1hcnlLZXkgPSBiYWNraW5nU3RvcmVDdXJzb3ItPnByaW1hcnlLZXkoKTsKLSAg
ICBSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSA9IGJhY2tpbmdTdG9yZUN1cnNvci0+dmFsdWUo
KTsKLQotICAgIGNhbGxPbk1haW5UaHJlYWQoW2NvbXBsZXRpb25DYWxsYmFjaywga2V5LCBwcmlt
YXJ5S2V5LCB2YWx1ZV0oKSB7Ci0gICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhrZXksIHByaW1h
cnlLZXksIHZhbHVlLCBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRp
b246OlVua25vd25FcnJvciwgIlVua25vd24gZXJyb3IgYWR2YW5jaW5nIGN1cnNvciIpKTsKLSAg
ICB9KTsKLX0KLQotdm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6Y3Vyc29ySXRlcmF0
ZShJREJDdXJzb3JCYWNrZW5kJiBjdXJzb3IsIGNvbnN0IEN1cnNvckl0ZXJhdGlvbk9wZXJhdGlv
biYgb3BlcmF0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNz
UmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykKLXsKLSAgICBJREJCYWNraW5nU3Rv
cmVDdXJzb3JMZXZlbERCKiBiYWNraW5nU3RvcmVDdXJzb3IgPSBjdXJzb3IuaWQoKSA/IG1fYmFj
a2luZ1N0b3JlQ3Vyc29ycy5nZXQoY3Vyc29yLmlkKCkpIDogMDsKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgaWYgKGN1cnNvci5pZCgpKQotICAgICAgICBBU1NFUlQoYmFja2luZ1N0b3JlQ3Vyc29yKTsK
LSNlbmRpZgotCi0gICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IgfHwgIWJhY2tpbmdTdG9yZUN1
cnNvci0+Y29udGludWVGdW5jdGlvbihvcGVyYXRpb24ua2V5KCkpKSB7Ci0gICAgICAgIG1fYmFj
a2luZ1N0b3JlQ3Vyc29ycy5yZW1vdmUoY3Vyc29yLmlkKCkpOwotCi0gICAgICAgIGNhbGxPbk1h
aW5UaHJlYWQoW2NvbXBsZXRpb25DYWxsYmFja10oKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9u
Q2FsbGJhY2sobnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgSURCRGF0YWJhc2VFcnJvcjo6Y3Jl
YXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJVbmtub3duIGVycm9yIGFk
dmFuY2luZyBjdXJzb3IiKSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBiYWNraW5nU3RvcmVDdXJzb3ItPmtleSgpLCBw
cmltYXJ5S2V5ID0gYmFja2luZ1N0b3JlQ3Vyc29yLT5wcmltYXJ5S2V5KCk7Ci0gICAgUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gdmFsdWUgPSBiYWNraW5nU3RvcmVDdXJzb3ItPnZhbHVlKCk7Ci0KLSAg
ICBjYWxsT25NYWluVGhyZWFkKFtjb21wbGV0aW9uQ2FsbGJhY2ssIGtleSwgcHJpbWFyeUtleSwg
dmFsdWVdKCkgewotICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soa2V5LCBwcmltYXJ5S2V5LCB2
YWx1ZSwgSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtu
b3duRXJyb3IsICJVbmtub3duIGVycm9yIGFkdmFuY2luZyBjdXJzb3IiKSk7Ci0gICAgfSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShMRVZFTERCKQotI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJTZXJ2ZXJDb25u
ZWN0aW9uTGV2ZWxEQi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGQ3OTdkLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURC
U2VydmVyQ29ubmVjdGlvbkxldmVsREIuaAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCX2gKLSNkZWZp
bmUgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREJfaAotCi0jaW5jbHVkZSAiSURCU2VydmVyQ29u
bmVjdGlvbi5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0jaWYgVVNFKExFVkVM
REIpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCQmFja2luZ1N0b3JlQ3Vyc29y
TGV2ZWxEQjsKLWNsYXNzIElEQkJhY2tpbmdTdG9yZUxldmVsREI7Ci1jbGFzcyBJREJCYWNraW5n
U3RvcmVUcmFuc2FjdGlvbkxldmVsREI7Ci0KLWNsYXNzIElEQlNlcnZlckNvbm5lY3Rpb25MZXZl
bERCIGZpbmFsIDogcHVibGljIElEQlNlcnZlckNvbm5lY3Rpb24gewotcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPElEQlNlcnZlckNvbm5lY3Rpb24+IGNyZWF0ZShjb25zdCBTdHJpbmcm
IGRhdGFiYXNlTmFtZSwgSURCQmFja2luZ1N0b3JlTGV2ZWxEQiogYmFja2luZ1N0b3JlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxE
QihkYXRhYmFzZU5hbWUsIGJhY2tpbmdTdG9yZSkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgfklE
QlNlcnZlckNvbm5lY3Rpb25MZXZlbERCKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNDbG9zZWQo
KSBvdmVycmlkZTsKLQotICAgIC8vIERhdGFiYXNlLWxldmVsIG9wZXJhdGlvbnMKLSAgICB2aXJ0
dWFsIHZvaWQgZ2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFkYXRhKEdldElEQkRhdGFiYXNl
TWV0YWRhdGFGdW5jdGlvbikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgQm9vbENhbGxiYWNrRnVuY3Rpb24gc3VjY2Vzc0NhbGxiYWNrKSBvdmVycmlkZTsKLQotICAg
IC8vIFRyYW5zYWN0aW9uLWxldmVsIG9wZXJhdGlvbnMKLSAgICB2aXJ0dWFsIHZvaWQgb3BlblRy
YW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgY29uc3QgSGFzaFNldDxpbnQ2NF90PiYg
b2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlLCBCb29sQ2FsbGJhY2tG
dW5jdGlvbiBzdWNjZXNzQ2FsbGJhY2spIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBiZWdp
blRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+
IGNvbXBsZXRpb25DYWxsYmFjaykgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNvbW1pdFRy
YW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgQm9vbENhbGxiYWNrRnVuY3Rpb24gc3Vj
Y2Vzc0NhbGxiYWNrKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXRUcmFuc2FjdGlv
bihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9u
Q2FsbGJhY2spIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCByb2xsYmFja1RyYW5zYWN0aW9u
KGludDY0X3QgdHJhbnNhY3Rpb25JRCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25D
YWxsYmFjaykgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhpbnQ2NF90
IHRyYW5zYWN0aW9uSUQsIGludDY0X3QgZGF0YWJhc2VJRCwgaW50NjRfdCBvYmplY3RTdG9yZUlE
LCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwgSURCS2V5JiBwcmltYXJ5S2V5LCBjb25z
dCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SURzLCBjb25zdCBWZWN0b3I8VmVjdG9yPFJlZlB0cjxJ
REJLZXk+Pj4mIGluZGV4S2V5cywgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spOwotCi0gICAgdmlydHVhbCB2b2lkIGNy
ZWF0ZU9iamVjdFN0b3JlKElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGNvbnN0IENyZWF0ZU9iamVj
dFN0b3JlT3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVJbmRleChJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBDcmVhdGVJbmRleE9w
ZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+
KT4gY29tcGxldGlvbkNhbGxiYWNrKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
SW5kZXgoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiwgY29uc3QgRGVsZXRlSW5kZXhPcGVyYXRpb24m
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBs
ZXRpb25DYWxsYmFjaykgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGdldChJREJUcmFuc2Fj
dGlvbkJhY2tlbmQmLCBjb25zdCBHZXRPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29u
c3QgSURCR2V0UmVzdWx0JiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRp
b25DYWxsYmFjaykgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChJREJUcmFuc2FjdGlv
bkJhY2tlbmQmLCBjb25zdCBQdXRPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1Jl
ZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNh
bGxiYWNrKSAgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kJiwgY29uc3QgT3BlbkN1cnNvck9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248
dm9pZChpbnQ2NF90LCBQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29t
cGxldGlvbkNhbGxiYWNrKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY291bnQoSURCVHJh
bnNhY3Rpb25CYWNrZW5kJiwgY29uc3QgQ291bnRPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQoaW50NjRfdCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxs
YmFjaykgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJhbmdlKElEQlRyYW5zYWN0
aW9uQmFja2VuZCYsIGNvbnN0IERlbGV0ZVJhbmdlT3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlvbjx2
b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3JlKElEQlRyYW5zYWN0aW9u
QmFja2VuZCYsIGNvbnN0IENsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9u
PHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKElEQlRyYW5zYWN0
aW9uQmFja2VuZCYsIGNvbnN0IERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uJiwgc3RkOjpmdW5j
dGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJh
Y2spIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VEYXRhYmFzZVZlcnNpb24oSURC
VHJhbnNhY3Rpb25CYWNrZW5kJiwgY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hh
bmdlT3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VF
cnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spIG92ZXJyaWRlOwotCi0gICAgLy8gQ3Vyc29yLWxl
dmVsIG9wZXJhdGlvbnMKLSAgICB2aXJ0dWFsIHZvaWQgY3Vyc29yQWR2YW5jZShJREJDdXJzb3JC
YWNrZW5kJiwgY29uc3QgQ3Vyc29yQWR2YW5jZU9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9p
ZChQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxi
YWNrKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY3Vyc29ySXRlcmF0ZShJREJDdXJzb3JC
YWNrZW5kJiwgY29uc3QgQ3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlvbjx2
b2lkKFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2Fs
bGJhY2spIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIElEQlNlcnZlckNvbm5lY3Rpb25MZXZl
bERCKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBJREJCYWNraW5nU3RvcmVMZXZlbERCKik7
Ci0KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlTGV2ZWxEQj4gbV9iYWNraW5nU3RvcmU7Ci0g
ICAgSGFzaE1hcDxpbnQ2NF90LCBSZWZQdHI8SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZl
bERCPj4gbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbnM7Ci0gICAgSGFzaE1hcDxpbnQ2NF90LCBS
ZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQj4+IG1fYmFja2luZ1N0b3JlQ3Vyc29y
czsKLQotICAgIGludDY0X3QgbV9uZXh0Q3Vyc29ySUQ7Ci0KLSAgICBib29sIG1fY2xvc2VkOwot
Ci0gICAgU3RyaW5nIG1fZGF0YWJhc2VOYW1lOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gVVNFKExFVkVMREIpCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCi0jZW5kaWYgLy8gSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREJfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKaW5kZXggZjBiOWQwYy4u
ZTZjZTgzYzM1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dl
YkNvcmUudmN4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qCkBAIC02NzI1LDcgKzY3MjUsNiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cTW9kdWxlc1xpbmRleGVkZGJcSURCQ3Vyc29yQmFja2VuZC5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJEYXRhYmFzZS5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGluZGV4ZWRkYlxJREJGYWN0b3J5LmNw
cCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXGxldmVs
ZGJcSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElEQkluZGV4
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXElE
QktleS5jcHAiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ov
V2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ov
V2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXggMzYwYjc5YS4uYzBmMWI3NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJz
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmls
dGVycwpAQCAtMzEzLDkgKzMxMyw2IEBACiAgICAgPEZpbHRlciBJbmNsdWRlPSJyZW5kZXJpbmdc
c2hhcGVzIj4KICAgICAgIDxVbmlxdWVJZGVudGlmaWVyPntjMWM4ODQ0OS05NjZmLTQ2MjgtYTg4
Yi0xNmMzMGYwOGRkN2V9PC9VbmlxdWVJZGVudGlmaWVyPgogICAgIDwvRmlsdGVyPgotICAgIDxG
aWx0ZXIgSW5jbHVkZT0iTW9kdWxlc1xpbmRleGVkZGJcbGV2ZWxkYiI+Ci0gICAgICA8VW5pcXVl
SWRlbnRpZmllcj57NTRjODg5ZjctYjVlNy00OTFlLTkwMjktNjVkYzcxODViOWQwfTwvVW5pcXVl
SWRlbnRpZmllcj4KLSAgICA8L0ZpbHRlcj4KICAgICA8RmlsdGVyIEluY2x1ZGU9InBsYXRmb3Jt
XGdyYXBoaWNzXHRleG1hcCI+CiAgICAgICA8VW5pcXVlSWRlbnRpZmllcj57OTg0ZGY5OTAtODEx
Zi00MjJhLThkMmItZjA5MDM5NWYzZTRifTwvVW5pcXVlSWRlbnRpZmllcj4KICAgICA8L0ZpbHRl
cj4KQEAgLTY4MjMsOSArNjgyMCw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5k
ZXJpbmdcc2hhcGVzXFJlY3RhbmdsZVNoYXBlLmNwcCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmlu
Z1xzaGFwZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXE1vZHVsZXNcaW5kZXhlZGRiXGxldmVsZGJcSURCRmFjdG9yeUJhY2tlbmRMZXZlbERC
LmNwcCI+Ci0gICAgICA8RmlsdGVyPk1vZHVsZXNcaW5kZXhlZGRiXGxldmVsZGI8L0ZpbHRlcj4K
LSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlv
bkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJp
dmVkU291cmNlc1xKU0JlZm9yZVVubG9hZEV2ZW50LmNwcCI+CiAgICAgICA8RmlsdGVyPkRlcml2
ZWRTb3VyY2VzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzU5ZjRhYy4uYjQ1ZmZk
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMTc5MCw4ICsxNzkwLDYgQEAKIAkJNTEwMTkyRDIxOEI2QjlBQjAwN0ZDN0ExIC8q
IEltYWdlQ29udHJvbHNSb290RWxlbWVudE1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwMTkyRDAxOEI2QjlBQjAwN0ZDN0ExIC8qIEltYWdlQ29u
dHJvbHNSb290RWxlbWVudE1hYy5oICovOyB9OwogCQk1MTAxOTJENTE4QjZCOUI3MDA3RkM3QTEg
LyogSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDE5MkQzMThCNkI5QjcwMDdGQzdBMSAvKiBJbWFnZUNv
bnRyb2xzUm9vdEVsZW1lbnQuY3BwICovOyB9OwogCQk1MTAxOTJENjE4QjZCOUI3MDA3RkM3QTEg
LyogSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTAxOTJENDE4QjZCOUI3MDA3RkM3QTEgLyogSW1hZ2VDb250
cm9sc1Jvb3RFbGVtZW50LmggKi87IH07Ci0JCTUxMDE5NDQwMTgzNkQyMDgwMDkyNTUyMyAvKiBJ
REJJbmRleFdyaXRlckxldmVsREIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTEwMTk0M0UxODM2RDIwODAwOTI1NTIzIC8qIElEQkluZGV4V3JpdGVy
TGV2ZWxEQi5jcHAgKi87IH07Ci0JCTUxMDE5NDQxMTgzNkQyMDgwMDkyNTUyMyAvKiBJREJJbmRl
eFdyaXRlckxldmVsREIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxMDE5NDNGMTgzNkQyMDgwMDkyNTUyMyAvKiBJREJJbmRleFdyaXRlckxldmVsREIu
aCAqLzsgfTsKIAkJNTEwMTk0NDQxODM2RjdFNDAwOTI1NTIzIC8qIElEQkN1cnNvckJhY2tlbmRP
cGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxMDE5NDQyMTgzNkY3RTQwMDkyNTUyMyAvKiBJREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9u
cy5jcHAgKi87IH07CiAJCTUxMDE5NDQ1MTgzNkY3RTUwMDkyNTUyMyAvKiBJREJDdXJzb3JCYWNr
ZW5kT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTEwMTk0NDMxODM2RjdFNDAwOTI1NTIzIC8qIElEQkN1cnNvckJhY2tlbmRPcGVyYXRp
b25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NTEwNTlEREQxODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlv
bnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEw
NTlERDkxODIwQjE3NjAwREZGOUIxIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMu
Y3BwICovOyB9OwpAQCAtMTg4NiwxOCArMTg4NCw2IEBACiAJCTUxNjJDN0Y0MTFGNzdFRkIwMDYx
MkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTYyQzdGMjExRjc3RUZBMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0
cnkuY3BwICovOyB9OwogCQk1MTYyQzdGNTExRjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0
cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjJD
N0YzMTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxNjMxMTdEMTg1MTI0MkIwMDUzNDY0
NyAvKiBJREJEYXRhYmFzZU1ldGFkYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjMxMTdDMTg1MTI0MkIwMDUzNDY0NyAvKiBJREJEYXRhYmFz
ZU1ldGFkYXRhLmNwcCAqLzsgfTsKLQkJNTE2NEVENDMxODMyMDhDNzAwRUE4RkYxIC8qIElEQlNl
cnZlckNvbm5lY3Rpb25MZXZlbERCLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxNjRFRDQxMTgzMjA4QzcwMEVBOEZGMSAvKiBJREJTZXJ2ZXJDb25u
ZWN0aW9uTGV2ZWxEQi5jcHAgKi87IH07Ci0JCTUxNjRFRDQ0MTgzMjA4QzcwMEVBOEZGMSAvKiBJ
REJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTE2NEVENDIxODMyMDhDNzAwRUE4RkYxIC8qIElEQlNlcnZlckNv
bm5lY3Rpb25MZXZlbERCLmggKi87IH07Ci0JCTUxNjYwQUI2MTgyOEJCODIwMDA3NENBRCAvKiBJ
REJCYWNraW5nU3RvcmVMZXZlbERCLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxNjYwQUIwMTgyOEJCODIwMDA3NENBRCAvKiBJREJCYWNraW5nU3Rv
cmVMZXZlbERCLmNwcCAqLzsgfTsKLQkJNTE2NjBBQjcxODI4QkI4MjAwMDc0Q0FEIC8qIElEQkJh
Y2tpbmdTdG9yZUxldmVsREIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxNjYwQUIxMTgyOEJCODIwMDA3NENBRCAvKiBJREJCYWNraW5nU3RvcmVMZXZl
bERCLmggKi87IH07Ci0JCTUxNjYwQUI4MTgyOEJCODIwMDA3NENBRCAvKiBJREJGYWN0b3J5QmFj
a2VuZExldmVsREIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE2NjBBQjIxODI4QkI4MjAwMDc0Q0FEIC8qIElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxE
Qi5jcHAgKi87IH07Ci0JCTUxNjYwQUI5MTgyOEJCODIwMDA3NENBRCAvKiBJREJGYWN0b3J5QmFj
a2VuZExldmVsREIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxNjYwQUIzMTgyOEJCODIwMDA3NENBRCAvKiBJREJGYWN0b3J5QmFja2VuZExldmVsREIu
aCAqLzsgfTsKLQkJNTE2NjBBQkExODI4QkI4MjAwMDc0Q0FEIC8qIElEQkxldmVsREJDb2Rpbmcu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NjBB
QjQxODI4QkI4MjAwMDc0Q0FEIC8qIElEQkxldmVsREJDb2RpbmcuY3BwICovOyB9OwotCQk1MTY2
MEFCQjE4MjhCQjgyMDAwNzRDQUQgLyogSURCTGV2ZWxEQkNvZGluZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NjBBQjUxODI4QkI4MjAwMDc0Q0FE
IC8qIElEQkxldmVsREJDb2RpbmcuaCAqLzsgfTsKLQkJNTE2NjBBQzAxODI4Qzg0NjAwMDc0Q0FE
IC8qIElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NjBBQkMxODI4Qzg0NjAwMDc0Q0FEIC8qIElE
QkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREIuY3BwICovOyB9OwotCQk1MTY2MEFDMTE4MjhDODQ2
MDAwNzRDQUQgLyogSURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NjBBQkQxODI4Qzg0NjAwMDc0Q0FE
IC8qIElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREIuaCAqLzsgfTsKLQkJNTE2NjBBQzIxODI4
Qzg0NjAwMDc0Q0FEIC8qIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY2MEFCRTE4MjhD
ODQ2MDAwNzRDQUQgLyogSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCLmNwcCAqLzsg
fTsKLQkJNTE2NjBBQzMxODI4Qzg0NjAwMDc0Q0FEIC8qIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uTGV2ZWxEQi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTE2NjBBQkYxODI4Qzg0NjAwMDc0Q0FEIC8qIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
TGV2ZWxEQi5oICovOyB9OwogCQk1MTY3MzBBMzE4MkQ4RkJCMDAzRkFGNUMgLyogSURCQ3Vyc29y
QmFja2VuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTY3MzBBMTE4MkQ4RkJCMDAzRkFGNUMgLyogSURCQ3Vyc29yQmFja2VuZC5jcHAgKi87IH07
CiAJCTUxNjczMEE0MTgyRDhGQkIwMDNGQUY1QyAvKiBJREJDdXJzb3JCYWNrZW5kLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY3MzBBMjE4MkQ4RkJC
MDAzRkFGNUMgLyogSURCQ3Vyc29yQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxNjk1Mzk3MTMyOUEzQzgwMEI5MkQwNCAvKiBJY29u
RGF0YWJhc2VCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxNjk1Mzk1MTMyOUEzQzgwMEI5MkQwNCAvKiBJY29uRGF0YWJhc2VCYXNlLmNwcCAq
LzsgfTsKQEAgLTMxMTIsMTQgKzMwOTgsOCBAQAogCQk4QUY0RTU1NTExREM1QTM2MDAwRUQzREUg
LyogUGVyZm9ybWFuY2VOYXZpZ2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDhBRjRFNTUyMTFEQzVBMzYwMDBFRDNERSAvKiBQZXJmb3JtYW5j
ZU5hdmlnYXRpb24uY3BwICovOyB9OwogCQk4QUY0RTU1NjExREM1QTM2MDAwRUQzREUgLyogUGVy
Zm9ybWFuY2VOYXZpZ2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4QUY0RTU1MzExREM1QTM2MDAwRUQzREUgLyogUGVyZm9ybWFuY2VOYXZpZ2F0
aW9uLmggKi87IH07CiAJCThBRjRFNTVDMTFEQzVBNjMwMDBFRDNERSAvKiBQZXJmb3JtYW5jZVRp
bWluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEFG
NEU1NTkxMURDNUE2MzAwMEVEM0RFIC8qIFBlcmZvcm1hbmNlVGltaW5nLmggKi87IH07Ci0JCThD
MEUzMzREMTM4QTkyQzcwMDhEQTk0RiAvKiBMZXZlbERCVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhDMEUzMzQ5MTM4QTkyQzcwMDhE
QTk0RiAvKiBMZXZlbERCVHJhbnNhY3Rpb24uaCAqLzsgfTsKLQkJOEMwRTMzNEYxMzhBOTJDNzAw
OERBOTRGIC8qIExldmVsREJXcml0ZUJhdGNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4QzBFMzM0QjEzOEE5MkM3MDA4REE5NEYgLyogTGV2ZWxEQldy
aXRlQmF0Y2guaCAqLzsgfTsKIAkJOEM2RUE2MTkxMUVGN0UwNDAwRkQ4RUUzIC8qIFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOEM2RUE2MTcxMUVGN0UwNDAwRkQ4RUUzIC8qIFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXMuY3BwICovOyB9OwogCQk4QzZFQTYxQTExRUY3RTA0MDBGRDhFRTMgLyogUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOEM2RUE2MTgxMUVGN0UwNDAwRkQ4RUUzIC8qIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk4Q0FERjJB
OTEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQkNvbXBhcmF0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhDQURGMkEzMTM1QzdCMzYwMDlFRjQzRiAv
KiBMZXZlbERCQ29tcGFyYXRvci5oICovOyB9OwotCQk4Q0FERjJBQjEzNUM3QjM2MDA5RUY0M0Yg
LyogTGV2ZWxEQkRhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4Q0FERjJBNTEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQkRhdGFiYXNlLmgg
Ki87IH07Ci0JCThDQURGMkFEMTM1QzdCMzYwMDlFRjQzRiAvKiBMZXZlbERCSXRlcmF0b3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhDQURGMkE3MTM1
QzdCMzYwMDlFRjQzRiAvKiBMZXZlbERCSXRlcmF0b3IuaCAqLzsgfTsKLQkJOENBREYyQUUxMzVD
N0IzNjAwOUVGNDNGIC8qIExldmVsREJTbGljZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOENBREYyQTgxMzVDN0IzNjAwOUVGNDNGIC8qIExldmVsREJT
bGljZS5oICovOyB9OwogCQk4RjY3NTYxQjEyODhCMTdCMDA0N0FDQTMgLyogRXZlbnRRdWV1ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEY2NzU2MTkx
Mjg4QjE3QjAwNDdBQ0EzIC8qIEV2ZW50UXVldWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4RkFDNzc0RDExOTg3MkNCMDAxNUFFOTQgLyogSlNN
YWluVGhyZWFkRXhlY1N0YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDhGOTM0RDg0MTE4OUYxRUUwMDUwOEQ1RCAvKiBKU01haW5UaHJlYWRFeGVj
U3RhdGUuY3BwICovOyB9OwogCQk5MDAxNzc0MDEyRTAzNDc4MDA2NDg0NjIgLyogT0VTU3RhbmRh
cmREZXJpdmF0aXZlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5MDAxNzczRDEyRTAzNDc4MDA2NDg0NjIgLyogT0VTU3RhbmRhcmREZXJpdmF0aXZl
cy5jcHAgKi87IH07CkBAIC04ODc2LDggKzg4NTYsNiBAQAogCQk1MTAxOTJEMzE4QjZCOUI3MDA3
RkM3QTEgLyogSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQ29udHJvbHNSb290RWxlbWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMDE5MkQ0MThCNkI5QjcwMDdGQzdBMSAvKiBJbWFnZUNv
bnRyb2xzUm9vdEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1h
Z2VDb250cm9sc1Jvb3RFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
MDE5MkQ4MThCN0Q3QUIwMDdGQzdBMSAvKiBpbWFnZUNvbnRyb2xzTWFjLmNzcyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQuY3NzOyBwYXRoID0gaW1hZ2VDb250cm9sc01hYy5jc3M7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTUxMDE5NDNFMTgzNkQyMDgwMDkyNTUyMyAvKiBJREJJbmRleFdyaXRlckxl
dmVsREIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCSW5kZXhX
cml0ZXJMZXZlbERCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTEwMTk0M0Yx
ODM2RDIwODAwOTI1NTIzIC8qIElEQkluZGV4V3JpdGVyTGV2ZWxEQi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJREJJbmRleFdyaXRlckxldmVsREIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTEwMTk0NDIxODM2RjdFNDAwOTI1NTIzIC8qIElEQkN1cnNvckJh
Y2tlbmRPcGVyYXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IElEQkN1cnNvckJhY2tlbmRPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTEwMTk0NDMxODM2RjdFNDAwOTI1NTIzIC8qIElEQkN1cnNvckJhY2tlbmRPcGVyYXRp
b25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkN1cnNvckJhY2tlbmRP
cGVyYXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMDU5REQ5MTgyMEIx
NzYwMERGRjlCMSAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJh
dGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODk3NCwxOCArODk1Miw2
IEBACiAJCTUxNjJDN0YyMTFGNzdFRkEwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY2hlbWVSZWdpc3RyeS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNjJDN0YzMTFGNzdFRkIwMDYxMkVGRSAvKiBT
Y2hlbWVSZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY2hlbWVS
ZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTYzMTE3QzE4NTEyNDJC
MDA1MzQ2NDcgLyogSURCRGF0YWJhc2VNZXRhZGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJREJEYXRhYmFzZU1ldGFkYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNTE2NEVENDExODMyMDhDNzAwRUE4RkYxIC8qIElEQlNlcnZlckNvbm5l
Y3Rpb25MZXZlbERCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElE
QlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNTE2NEVENDIxODMyMDhDNzAwRUE4RkYxIC8qIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERC
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlNlcnZlckNvbm5lY3Rpb25M
ZXZlbERCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNjYwQUIwMTgyOEJCODIw
MDA3NENBRCAvKiBJREJCYWNraW5nU3RvcmVMZXZlbERCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IElEQkJhY2tpbmdTdG9yZUxldmVsREIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk1MTY2MEFCMTE4MjhCQjgyMDAwNzRDQUQgLyogSURCQmFja2lu
Z1N0b3JlTGV2ZWxEQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJCYWNr
aW5nU3RvcmVMZXZlbERCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNjYwQUIy
MTgyOEJCODIwMDA3NENBRCAvKiBJREJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE2NjBBQjMxODI4QkI4MjAwMDc0Q0FE
IC8qIElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJREJGYWN0b3J5QmFja2VuZExldmVsREIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNTE2NjBBQjQxODI4QkI4MjAwMDc0Q0FEIC8qIElEQkxldmVsREJDb2RpbmcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCTGV2ZWxEQkNvZGluZy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNjYwQUI1MTgyOEJCODIwMDA3NENB
RCAvKiBJREJMZXZlbERCQ29kaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElEQkxldmVsREJDb2RpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE2NjBB
QkMxODI4Qzg0NjAwMDc0Q0FEIC8qIElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCQmFja2luZ1N0b3JlQ3Vyc29y
TGV2ZWxEQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNjYwQUJEMTgyOEM4
NDYwMDA3NENBRCAvKiBJREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE2NjBBQkUxODI4Qzg0NjAwMDc0Q0FEIC8qIElE
QkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTY2MEFCRjE4MjhDODQ2MDAwNzRDQUQgLyog
SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTY3MzBBMTE4MkQ4RkJCMDAzRkFGNUMgLyogSURCQ3Vy
c29yQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJD
dXJzb3JCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2NzMwQTIx
ODJEOEZCQjAwM0ZBRjVDIC8qIElEQkN1cnNvckJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSURCQ3Vyc29yQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MTY5NTM5NTEzMjlBM0M4MDBCOTJEMDQgLyogSWNvbkRhdGFiYXNlQmFzZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJY29uRGF0YWJhc2VCYXNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMjQxLDE0ICsxMDIwNyw4IEBACiAJ
CThBRjRFNTU0MTFEQzVBMzYwMDBFRDNERSAvKiBQZXJmb3JtYW5jZU5hdmlnYXRpb24uaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IFBlcmZvcm1hbmNlTmF2aWdhdGlvbi5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCThBRjRFNTU5MTFEQzVBNjMwMDBFRDNERSAvKiBQZXJmb3Jt
YW5jZVRpbWluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQZXJmb3JtYW5j
ZVRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4QUY0RTU1QTExREM1QTYz
MDAwRUQzREUgLyogUGVyZm9ybWFuY2VUaW1pbmcuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFBlcmZvcm1hbmNlVGltaW5nLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOEMw
RTMzNDkxMzhBOTJDNzAwOERBOTRGIC8qIExldmVsREJUcmFuc2FjdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBMZXZlbERCVHJhbnNhY3Rpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJOEMwRTMzNEIxMzhBOTJDNzAwOERBOTRGIC8qIExldmVsREJXcml0
ZUJhdGNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExldmVsREJXcml0ZUJh
dGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThDNkVBNjE3MTFFRjdFMDQwMEZE
OEVFMyAvKiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwOyBwYXRoID0gZ2VuZXJp
Yy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOEM2RUE2MTgxMUVGN0UwNDAwRkQ4RUUzIC8qIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
OyBwYXRoID0gZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCThDQURGMkEzMTM1QzdCMzYwMDlFRjQzRiAvKiBMZXZlbERCQ29tcGFy
YXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZXZlbERCQ29tcGFyYXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4Q0FERjJBNTEzNUM3QjM2MDA5RUY0
M0YgLyogTGV2ZWxEQkRhdGFiYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IExldmVsREJEYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4Q0FERjJB
NzEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQkl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExldmVsREJJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk4Q0FERjJBODEzNUM3QjM2MDA5RUY0M0YgLyogTGV2ZWxEQlNsaWNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExldmVsREJTbGljZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4RjY3NTYxOTEyODhCMTdCMDA0N0FDQTMgLyogRXZlbnRRdWV1ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFdmVudFF1ZXVlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCThGOTM0RDgzMTE4OUYxRUUwMDUwOEQ1RCAvKiBKU01haW5U
aHJlYWRFeGVjU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNYWlu
VGhyZWFkRXhlY1N0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThGOTM0RDg0
MTE4OUYxRUUwMDUwOEQ1RCAvKiBKU01haW5UaHJlYWRFeGVjU3RhdGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2MDM1LDI3ICsxNTk5NSw2IEBACiAJCQluYW1l
ID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJNTE2NjBBQUYxODI4
QkI4MjAwMDc0Q0FEIC8qIGxldmVsZGIgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNo
aWxkcmVuID0gKAotCQkJCTUxNjYwQUJDMTgyOEM4NDYwMDA3NENBRCAvKiBJREJCYWNraW5nU3Rv
cmVDdXJzb3JMZXZlbERCLmNwcCAqLywKLQkJCQk1MTY2MEFCRDE4MjhDODQ2MDAwNzRDQUQgLyog
SURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQi5oICovLAotCQkJCTUxNjYwQUIwMTgyOEJCODIw
MDA3NENBRCAvKiBJREJCYWNraW5nU3RvcmVMZXZlbERCLmNwcCAqLywKLQkJCQk1MTY2MEFCMTE4
MjhCQjgyMDAwNzRDQUQgLyogSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oICovLAotCQkJCTUxNjYw
QUJFMTgyOEM4NDYwMDA3NENBRCAvKiBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIu
Y3BwICovLAotCQkJCTUxNjYwQUJGMTgyOEM4NDYwMDA3NENBRCAvKiBJREJCYWNraW5nU3RvcmVU
cmFuc2FjdGlvbkxldmVsREIuaCAqLywKLQkJCQk1MTY2MEFCMjE4MjhCQjgyMDAwNzRDQUQgLyog
SURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcCAqLywKLQkJCQk1MTY2MEFCMzE4MjhCQjgyMDAw
NzRDQUQgLyogSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmggKi8sCi0JCQkJNTEwMTk0M0UxODM2
RDIwODAwOTI1NTIzIC8qIElEQkluZGV4V3JpdGVyTGV2ZWxEQi5jcHAgKi8sCi0JCQkJNTEwMTk0
M0YxODM2RDIwODAwOTI1NTIzIC8qIElEQkluZGV4V3JpdGVyTGV2ZWxEQi5oICovLAotCQkJCTUx
NjYwQUI0MTgyOEJCODIwMDA3NENBRCAvKiBJREJMZXZlbERCQ29kaW5nLmNwcCAqLywKLQkJCQk1
MTY2MEFCNTE4MjhCQjgyMDAwNzRDQUQgLyogSURCTGV2ZWxEQkNvZGluZy5oICovLAotCQkJCTUx
NjRFRDQxMTgzMjA4QzcwMEVBOEZGMSAvKiBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5jcHAg
Ki8sCi0JCQkJNTE2NEVENDIxODMyMDhDNzAwRUE4RkYxIC8qIElEQlNlcnZlckNvbm5lY3Rpb25M
ZXZlbERCLmggKi8sCi0JCQkpOwotCQkJcGF0aCA9IGxldmVsZGI7Ci0JCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwotCQl9OwogCQk1MTc0MUQwODBCMDcyNTcwMDBFRDQ0MkMgLyogaGlzdG9yeSAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0xNzM5NywxOSAr
MTczMzYsNiBAQAogCQkJbmFtZSA9IFF1b3RhOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
IAkJfTsKLQkJOENBREYyQTIxMzVDN0IzNjAwOUVGNDNGIC8qIGxldmVsZGIgKi8gPSB7Ci0JCQlp
c2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCThDQURGMkEzMTM1QzdCMzYwMDlF
RjQzRiAvKiBMZXZlbERCQ29tcGFyYXRvci5oICovLAotCQkJCThDQURGMkE1MTM1QzdCMzYwMDlF
RjQzRiAvKiBMZXZlbERCRGF0YWJhc2UuaCAqLywKLQkJCQk4Q0FERjJBNzEzNUM3QjM2MDA5RUY0
M0YgLyogTGV2ZWxEQkl0ZXJhdG9yLmggKi8sCi0JCQkJOENBREYyQTgxMzVDN0IzNjAwOUVGNDNG
IC8qIExldmVsREJTbGljZS5oICovLAotCQkJCThDMEUzMzQ5MTM4QTkyQzcwMDhEQTk0RiAvKiBM
ZXZlbERCVHJhbnNhY3Rpb24uaCAqLywKLQkJCQk4QzBFMzM0QjEzOEE5MkM3MDA4REE5NEYgLyog
TGV2ZWxEQldyaXRlQmF0Y2guaCAqLywKLQkJCSk7Ci0JCQlwYXRoID0gbGV2ZWxkYjsKLQkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07CiAJCTkzMzA5RDg2MDk5RTY0OTEwMDU2RTU4MSAv
KiBlZGl0aW5nICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAg
LTE4MDc3LDcgKzE4MDAzLDYgQEAKIAkJOTcxMkE1NTMxNTAwNEUzQzAwNDhBRjEwIC8qIGluZGV4
ZWRkYiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJNTE2
NjBBQUYxODI4QkI4MjAwMDc0Q0FEIC8qIGxldmVsZGIgKi8sCiAJCQkJNTFENzE5NkMxODExMDZE
RjAwMTZEQzUxIC8qIERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5jcHAgKi8sCiAJCQkJNTFENzE5
NkQxODExMDZERjAwMTZEQzUxIC8qIERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5oICovLAogCQkJ
CTUxRDcxOTZFMTgxMTA2REYwMDE2REM1MSAvKiBET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuaWRs
ICovLApAQCAtMjEzMTUsNyArMjEyNDAsNiBAQAogCQkJCUE1Qzk3NENFMTE0ODVGREEwMDY2RjJB
QiAvKiBjb2NvYSAqLywKIAkJCQlCMkEwMTU5MTBBRjZDRDUzMDA2QkNFMEUgLyogZ3JhcGhpY3Mg
Ki8sCiAJCQkJQTU5RTNDMUIxMTU4MEYzNDAwNzI5MjhFIC8qIGlvcyAqLywKLQkJCQk4Q0FERjJB
MjEzNUM3QjM2MDA5RUY0M0YgLyogbGV2ZWxkYiAqLywKIAkJCQk2NTgyQTE0ODA5OTk5RDZDMDBC
RUVCNkQgLyogbWFjICovLAogCQkJCTA3MjIxQjkyMTdDRjBBRDQwMDg0OEU1MSAvKiBtZWRpYXN0
cmVhbSAqLywKIAkJCQk1OUM3N0YxMDEwNTQ1OTFDMDA1MDYxMDQgLyogbW9jayAqLywKQEAgLTI0
NTMxLDkgKzI0NDU1LDYgQEAKIAkJCQk1MUUxRUNDMTBDOTFDOTA0MDBEQzI1NUIgLyogSWNvblJl
Y29yZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDVCQUMyQjAxMzYwQkJBQjAwNURBMjU4IC8qIElj
b25VUkwuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRDcxOUJBMTgxMTA2RTAwMDE2REM1MSAvKiBJ
REJBbnkuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxNjYwQUMxMTgyOEM4NDYwMDA3NENBRCAvKiBJ
REJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTY2MEFC
NzE4MjhCQjgyMDAwNzRDQUQgLyogSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNTE2NjBBQzMxODI4Qzg0NjAwMDc0Q0FEIC8qIElEQkJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uTGV2ZWxEQi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU4NUE2NjMxMUQ0RkFDNTAwNEMz
RTRCIC8qIElEQkJpbmRpbmdVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRDcxOUJF
MTgxMTA2RTAwMDE2REM1MSAvKiBJREJDYWxsYmFja3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
RDcxOUMwMTgxMTA2RTAwMDE2REM1MSAvKiBJREJDdXJzb3IuaCBpbiBIZWFkZXJzICovLApAQCAt
MjQ1NTEsMTcgKzI0NDcyLDE0IEBACiAJCQkJNTFENzE5RDExODExMDZFMDAwMTZEQzUxIC8qIElE
QkV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFENzE5RDMxODExMDZFMDAw
MTZEQzUxIC8qIElEQkZhY3RvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRDcxOUQ2MTgxMTA2
RTAwMDE2REM1MSAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJNTE2NjBBQjkxODI4QkI4MjAwMDc0Q0FEIC8qIElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxE
Qi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEyM0FGMUQxODkxOEFFNDAwMzFDREM5IC8qIElEQkdl
dFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFENzE5RDkxODExMDZFMDAwMTZEQzUxIC8q
IElEQkluZGV4LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUFCQjVCODE4NkQwRUQxMDA4MzkxQTEg
LyogSURCSW5kZXhNZXRhZGF0YS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTEwMTk0NDExODM2RDIw
ODAwOTI1NTIzIC8qIElEQkluZGV4V3JpdGVyTGV2ZWxEQi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTFENzE5REMxODExMDZFMDAwMTZEQzUxIC8qIElEQktleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTExRUMxQTYxODhEQUNBNDAwQkEzRUI2IC8qIElEQktleURhdGEuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUxRDcxOURFMTgxMTA2RTAwMDE2REM1MSAvKiBJREJLZXlQYXRoLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MUQ3MTlFMDE4MTEwNkUwMDAxNkRDNTEgLyogSURCS2V5UmFuZ2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxMjNBRjE5MTg5MEE0Q0EwMDMxQ0RDOSAvKiBJREJLZXlSYW5nZURhdGEu
aCBpbiBIZWFkZXJzICovLAotCQkJCTUxNjYwQUJCMTgyOEJCODIwMDA3NENBRCAvKiBJREJMZXZl
bERCQ29kaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUQ3MTlFNDE4MTEwNkUwMDAxNkRDNTEg
LyogSURCT2JqZWN0U3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQUJCNUI5MTg2RDBFRDEw
MDgzOTFBMSAvKiBJREJPYmplY3RTdG9yZU1ldGFkYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MUQ3MTlFNzE4MTEwNkUwMDAxNkRDNTEgLyogSURCT3BlbkRCUmVxdWVzdC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yNDU3Miw3ICsyNDQ5MCw2IEBACiAJCQkJNTFFQUM1QjIxODE2M0Y0RTAwNEYxQkE0
IC8qIElEQlJlY29yZElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRDcxOUVDMTgx
MTA2RTAwMDE2REM1MSAvKiBJREJSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTBBMzI2
RjE4MzE4NDMxMDAzQzUzMjYgLyogSURCU2VydmVyQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJNTE2NEVENDQxODMyMDhDNzAwRUE4RkYxIC8qIElEQlNlcnZlckNvbm5lY3Rpb25MZXZl
bERCLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUQ3MTlFRjE4MTEwNkUwMDAxNkRDNTEgLyogSURC
VHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMEI3REI4MTgyRDlGNUQwMDlCRjk1
NyAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMDU5RERF
MTgyMEIxNzYwMERGRjlCMSAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmggaW4g
SGVhZGVycyAqLywKQEAgLTI1Mjc3LDEyICsyNTE5NCw2IEBACiAJCQkJQkNGRjY0OTEwRUFEMTVD
MjAwQzFENkY3IC8qIExlbmd0aEJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTVCQTdENjMxNTE0
MzdDQTAwRkUxRTNGIC8qIExlbmd0aEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNG
RjY0OTIwRUFEMTVDMjAwQzFENkY3IC8qIExlbmd0aFNpemUuaCBpbiBIZWFkZXJzICovLAotCQkJ
CThDQURGMkE5MTM1QzdCMzYwMDlFRjQzRiAvKiBMZXZlbERCQ29tcGFyYXRvci5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJOENBREYyQUIxMzVDN0IzNjAwOUVGNDNGIC8qIExldmVsREJEYXRhYmFzZS5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJOENBREYyQUQxMzVDN0IzNjAwOUVGNDNGIC8qIExldmVsREJJ
dGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOENBREYyQUUxMzVDN0IzNjAwOUVGNDNGIC8q
IExldmVsREJTbGljZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOEMwRTMzNEQxMzhBOTJDNzAwOERB
OTRGIC8qIExldmVsREJUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOEMwRTMzNEYx
MzhBOTJDNzAwOERBOTRGIC8qIExldmVsREJXcml0ZUJhdGNoLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NDczMEQ5MTEyNDhGMEIzMDBEM0E5QzkgLyogTGlnaHRTb3VyY2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUIyMjI3OTY1MEQwMEJGMjIwMDcxQjc4MiAvKiBMaW5lYXJHcmFkaWVudEF0dHJpYnV0
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QUJCNzg3MTNCOTA0QkMwMEYxOTdFMyAvKiBMaW5l
QnJlYWtJdGVyYXRvclBvb2xJQ1UuaCBpbiBIZWFkZXJzICovLApAQCAtMjc5OTQsOSArMjc5MDUs
NiBAQAogCQkJCTUxRTFFQ0MwMEM5MUM5MDQwMERDMjU1QiAvKiBJY29uUmVjb3JkLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQ1MDk5QzQxMTM3MEE3ODAwMDU4RDUxMyAvKiBJY29uVVJMLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTUxRDcxOUI5MTgxMTA2RTAwMDE2REM1MSAvKiBJREJBbnkuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJNTE2NjBBQzAxODI4Qzg0NjAwMDc0Q0FEIC8qIElEQkJhY2tp
bmdTdG9yZUN1cnNvckxldmVsREIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE2NjBBQjYxODI4
QkI4MjAwMDc0Q0FEIC8qIElEQkJhY2tpbmdTdG9yZUxldmVsREIuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJNTE2NjBBQzIxODI4Qzg0NjAwMDc0Q0FEIC8qIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uTGV2ZWxEQi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNTg1QTY2MjExRDRGQUM1MDA0QzNF
NEIgLyogSURCQmluZGluZ1V0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUQ3MTlC
RjE4MTEwNkUwMDAxNkRDNTEgLyogSURCQ3Vyc29yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUx
NjczMEEzMTgyRDhGQkIwMDNGQUY1QyAvKiBJREJDdXJzb3JCYWNrZW5kLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMjgwMTEsMjAgKzI3OTE5LDE2IEBACiAJCQkJNTFENzE5RDAxODExMDZFMDAwMTZE
QzUxIC8qIElEQkV2ZW50RGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUQ3MTlE
MjE4MTEwNkUwMDAxNkRDNTEgLyogSURCRmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
MUQ3MTlENTE4MTEwNkUwMDAxNkRDNTEgLyogSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJNTE2NjBBQjgxODI4QkI4MjAwMDc0Q0FEIC8qIElEQkZhY3Rv
cnlCYWNrZW5kTGV2ZWxEQi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUQ3MTlEODE4MTEwNkUw
MDAxNkRDNTEgLyogSURCSW5kZXguY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTEwMTk0NDAxODM2
RDIwODAwOTI1NTIzIC8qIElEQkluZGV4V3JpdGVyTGV2ZWxEQi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1MUQ3MTlEQjE4MTEwNkUwMDAxNkRDNTEgLyogSURCS2V5LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTUxMUVDMUE4MTg4REFFN0IwMEJBM0VCNiAvKiBJREJLZXlEYXRhLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTUxRDcxOUREMTgxMTA2RTAwMDE2REM1MSAvKiBJREJLZXlQYXRoLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTUxRDcxOURGMTgxMTA2RTAwMDE2REM1MSAvKiBJREJLZXlSYW5n
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTIzQUYxODE4OTBBNENBMDAzMUNEQzkgLyogSURC
S2V5UmFuZ2VEYXRhLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxNjYwQUJBMTgyOEJCODIwMDA3
NENBRCAvKiBJREJMZXZlbERCQ29kaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRDcxOUUz
MTgxMTA2RTAwMDE2REM1MSAvKiBJREJPYmplY3RTdG9yZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1MUQ3MTlFNjE4MTEwNkUwMDAxNkRDNTEgLyogSURCT3BlbkRCUmVxdWVzdC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1MUQ3MTlFOTE4MTEwNkUwMDAxNkRDNTEgLyogSURCUGVuZGluZ1RyYW5z
YWN0aW9uTW9uaXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUQ3MTlFQjE4MTEwNkUwMDAx
NkRDNTEgLyogSURCUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MTY0RUQ0MzE4MzIw
OEM3MDBFQThGRjEgLyogSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTFENzE5RUUxODExMDZFMDAwMTZEQzUxIC8qIElEQlRyYW5zYWN0aW9uLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTUxMEI3REI3MTgyRDlGNUQwMDlCRjk1NyAvKiBJREJUcmFuc2Fj
dGlvbkJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEwNTlEREQxODIwQjE3NjAwREZG
OUIxIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EYXRhYmFzZVN0cmF0ZWd5LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RhdGFiYXNlU3RyYXRlZ3kuY3BwCmluZGV4IGZi
ODBlNTguLjAzZDBlODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RhdGFi
YXNlU3RyYXRlZ3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RhdGFiYXNlU3Ry
YXRlZ3kuY3BwCkBAIC0yOSwxMCArMjksNiBAQAogI2luY2x1ZGUgIkRhdGFiYXNlU2VydmVyLmgi
CiAjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKIAotI2lmIFVTRShMRVZF
TERCKQotI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQi5oIgotI2VuZGlmCi0KIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCkBAIC00NiwxMiAr
NDIsOCBAQCBBYnN0cmFjdERhdGFiYXNlU2VydmVyKiBEYXRhYmFzZVN0cmF0ZWd5OjpnZXREYXRh
YmFzZVNlcnZlcigpCiBQYXNzUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBEYXRh
YmFzZVN0cmF0ZWd5OjpjcmVhdGVJREJGYWN0b3J5QmFja2VuZChjb25zdCBTdHJpbmcmIGRhdGFi
YXNlRGlyZWN0b3J5SWRlbnRpZmllcikKIHsKICAgICAvLyBGSVhNRTogTmVlZCBhIGJldHRlciBw
bGF0Zm9ybSBhYnN0cmFjdGlvbiBoZXJlLCBidXQgdGhpcyBzdG9wIGdhcCB3aWxsIHdvcmsgZm9y
IG5vdy4KLSNpZiBVU0UoTEVWRUxEQikKLSAgICByZXR1cm4gSURCRmFjdG9yeUJhY2tlbmRMZXZl
bERCOjpjcmVhdGUoZGF0YWJhc2VEaXJlY3RvcnlJZGVudGlmaWVyKTsKLSNlbHNlCiAgICAgVU5V
U0VEX1BBUkFNKGRhdGFiYXNlRGlyZWN0b3J5SWRlbnRpZmllcik7CiAgICAgcmV0dXJuIDA7Ci0j
ZW5kaWYKIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCQ29tcGFyYXRvci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCQ29tcGFyYXRvci5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWZkM2QzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkNvbXBhcmF0b3IuaAorKysgL2Rldi9udWxs
CkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIExldmVsREJDb21wYXJhdG9yX2gKLSNk
ZWZpbmUgTGV2ZWxEQkNvbXBhcmF0b3JfaAotCi0jaWYgVVNFKExFVkVMREIpCi0KLSNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBM
ZXZlbERCU2xpY2U7Ci0KLWNsYXNzIExldmVsREJDb21wYXJhdG9yIHsKLXB1YmxpYzoKLSAgICB2
aXJ0dWFsIH5MZXZlbERCQ29tcGFyYXRvcigpIHt9Ci0KLSAgICB2aXJ0dWFsIGludCBjb21wYXJl
KGNvbnN0IExldmVsREJTbGljZSYsIGNvbnN0IExldmVsREJTbGljZSYpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCA9IDA7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoTEVWRUxEQikKLQotI2VuZGlmIC8vIExldmVs
REJDb21wYXJhdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVs
ZGIvTGV2ZWxEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIv
TGV2ZWxEQkRhdGFiYXNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI5Njg2
MC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJE
YXRhYmFzZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMzMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMZXZlbERCRGF0YWJhc2UuaCIKLQotI2lmIFVTRShM
RVZFTERCKQotCi0jaW5jbHVkZSAiTGV2ZWxEQkNvbXBhcmF0b3IuaCIKLSNpbmNsdWRlICJMZXZl
bERCSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJMZXZlbERCU2xpY2UuaCIKLSNpbmNsdWRlICJMZXZl
bERCV3JpdGVCYXRjaC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgotI2luY2x1ZGUgPGhlbHBlcnMvbWVtZW52L21lbWVudi5oPgotI2luY2x1ZGUg
PGxldmVsZGIvY29tcGFyYXRvci5oPgotI2luY2x1ZGUgPGxldmVsZGIvZGIuaD4KLSNpbmNsdWRl
IDxsZXZlbGRiL2Vudi5oPgotI2luY2x1ZGUgPGxldmVsZGIvc2xpY2UuaD4KLSNpbmNsdWRlIDxz
dHJpbmc+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgbGV2ZWxkYiB7Ci0KLXN0YXRpYyBFbnYqIElEQkVu
digpCi17Ci0gICAgcmV0dXJuIGxldmVsZGI6OkVudjo6RGVmYXVsdCgpOwotfQotCi19Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGxldmVsZGI6OlNsaWNlIG1ha2VTbGljZShjb25z
dCBWZWN0b3I8Y2hhcj4mIHZhbHVlKQotewotICAgIHJldHVybiBsZXZlbGRiOjpTbGljZSh2YWx1
ZS5kYXRhKCksIHZhbHVlLnNpemUoKSk7Ci19Ci0KLXN0YXRpYyBsZXZlbGRiOjpTbGljZSBtYWtl
U2xpY2UoY29uc3QgTGV2ZWxEQlNsaWNlJiBzKQotewotICAgIHJldHVybiBsZXZlbGRiOjpTbGlj
ZShzLmJlZ2luKCksIHMuZW5kKCkgLSBzLmJlZ2luKCkpOwotfQotCi1zdGF0aWMgTGV2ZWxEQlNs
aWNlIG1ha2VMZXZlbERCU2xpY2UoY29uc3QgbGV2ZWxkYjo6U2xpY2UmIHMpCi17Ci0gICAgcmV0
dXJuIExldmVsREJTbGljZShzLmRhdGEoKSwgcy5kYXRhKCkgKyBzLnNpemUoKSk7Ci19Ci0KLWNs
YXNzIENvbXBhcmF0b3JBZGFwdGVyIDogcHVibGljIGxldmVsZGI6OkNvbXBhcmF0b3IgewotcHVi
bGljOgotICAgIENvbXBhcmF0b3JBZGFwdGVyKGNvbnN0IExldmVsREJDb21wYXJhdG9yKiBjb21w
YXJhdG9yKQotICAgICAgICA6IG1fY29tcGFyYXRvcihjb21wYXJhdG9yKQotICAgIHsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIGludCBDb21wYXJlKGNvbnN0IGxldmVsZGI6OlNsaWNlJiBhLCBjb25z
dCBsZXZlbGRiOjpTbGljZSYgYikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2NvbXBh
cmF0b3ItPmNvbXBhcmUobWFrZUxldmVsREJTbGljZShhKSwgbWFrZUxldmVsREJTbGljZShiKSk7
Ci0gICAgfQotCi0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBOYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9jb21wYXJhdG9yLT5uYW1lKCk7IH0KLQotICAgIC8vIEZJWE1FOiBTdXBwb3J0IHRoZSBtZXRo
b2RzIGJlbG93IGluIHRoZSBmdXR1cmUuCi0gICAgdmlydHVhbCB2b2lkIEZpbmRTaG9ydGVzdFNl
cGFyYXRvcihzdGQ6OnN0cmluZyogLyogc3RhcnQgKi8sIGNvbnN0IGxldmVsZGI6OlNsaWNlJiAv
KiBsaW1pdCAqLykgY29uc3QgeyB9Ci0gICAgdmlydHVhbCB2b2lkIEZpbmRTaG9ydFN1Y2Nlc3Nv
cihzdGQ6OnN0cmluZyogLyoga2V5ICovKSBjb25zdCB7IH0KLQotcHJpdmF0ZToKLSAgICBjb25z
dCBMZXZlbERCQ29tcGFyYXRvciogbV9jb21wYXJhdG9yOwotfTsKLQotTGV2ZWxEQlNuYXBzaG90
OjpMZXZlbERCU25hcHNob3QoTGV2ZWxEQkRhdGFiYXNlKiBkYikKLSAgICA6IG1fZGIoZGItPm1f
ZGIuZ2V0KCkpCi0gICAgLCBtX3NuYXBzaG90KG1fZGItPkdldFNuYXBzaG90KCkpCi17Ci19Ci0K
LUxldmVsREJTbmFwc2hvdDo6fkxldmVsREJTbmFwc2hvdCgpCi17Ci0gICAgbV9kYi0+UmVsZWFz
ZVNuYXBzaG90KG1fc25hcHNob3QpOwotfQotCi1MZXZlbERCRGF0YWJhc2U6OkxldmVsREJEYXRh
YmFzZSgpCi17Ci19Ci0KLUxldmVsREJEYXRhYmFzZTo6fkxldmVsREJEYXRhYmFzZSgpCi17Ci0g
ICAgLy8gbV9kYidzIGRlc3RydWN0b3IgdXNlcyBtX2NvbXBhcmF0b3JBZGFwdGVyOyBvcmRlciBv
ZiBkZWxldGlvbiBpcyBpbXBvcnRhbnQuCi0gICAgbV9kYiA9IG51bGxwdHI7Ci0gICAgbV9jb21w
YXJhdG9yQWRhcHRlciA9IG51bGxwdHI7Ci0gICAgbV9lbnYgPSBudWxscHRyOwotfQotCi1zdGF0
aWMgbGV2ZWxkYjo6U3RhdHVzIG9wZW5EQihsZXZlbGRiOjpDb21wYXJhdG9yKiBjb21wYXJhdG9y
LCBsZXZlbGRiOjpFbnYqIGVudiwgY29uc3QgU3RyaW5nJiBwYXRoLCBsZXZlbGRiOjpEQioqIGRi
KQotewotICAgIGxldmVsZGI6Ok9wdGlvbnMgb3B0aW9uczsKLSAgICBvcHRpb25zLmNvbXBhcmF0
b3IgPSBjb21wYXJhdG9yOwotICAgIG9wdGlvbnMuY3JlYXRlX2lmX21pc3NpbmcgPSB0cnVlOwot
ICAgIG9wdGlvbnMucGFyYW5vaWRfY2hlY2tzID0gdHJ1ZTsKLSAgICAvLyAyMCBtYXhfb3Blbl9m
aWxlcyBpcyB0aGUgbWluaW11bSBMZXZlbERCIGFsbG93cy4KLSAgICBvcHRpb25zLm1heF9vcGVu
X2ZpbGVzID0gMjA7Ci0gICAgb3B0aW9ucy5lbnYgPSBlbnY7Ci0KLSAgICByZXR1cm4gbGV2ZWxk
Yjo6REI6Ok9wZW4ob3B0aW9ucywgcGF0aC51dGY4KCkuZGF0YSgpLCBkYik7Ci19Ci0KLWJvb2wg
TGV2ZWxEQkRhdGFiYXNlOjpkZXN0cm95KGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCi17Ci0gICAg
bGV2ZWxkYjo6T3B0aW9ucyBvcHRpb25zOwotICAgIG9wdGlvbnMuZW52ID0gbGV2ZWxkYjo6SURC
RW52KCk7Ci0gICAgY29uc3QgbGV2ZWxkYjo6U3RhdHVzIHMgPSBsZXZlbGRiOjpEZXN0cm95REIo
ZmlsZU5hbWUudXRmOCgpLmRhdGEoKSwgb3B0aW9ucyk7Ci0gICAgcmV0dXJuIHMub2soKTsKLX0K
LQotc3RkOjp1bmlxdWVfcHRyPExldmVsREJEYXRhYmFzZT4gTGV2ZWxEQkRhdGFiYXNlOjpvcGVu
KGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IExldmVsREJDb21wYXJhdG9yKiBjb21wYXJh
dG9yKQotewotICAgIGF1dG8gY29tcGFyYXRvckFkYXB0ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPENv
bXBhcmF0b3JBZGFwdGVyPihjb21wYXJhdG9yKTsKLQotICAgIGxldmVsZGI6OkRCKiBkYjsKLSAg
ICBjb25zdCBsZXZlbGRiOjpTdGF0dXMgcyA9IG9wZW5EQihjb21wYXJhdG9yQWRhcHRlci5nZXQo
KSwgbGV2ZWxkYjo6SURCRW52KCksIGZpbGVOYW1lLCAmZGIpOwotCi0gICAgaWYgKCFzLm9rKCkp
IHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gb3BlbiBMZXZlbERCIGRhdGFiYXNlIGZy
b20gJXM6ICVzIiwgZmlsZU5hbWUuYXNjaWkoKS5kYXRhKCksIHMuVG9TdHJpbmcoKS5jX3N0cigp
KTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgYXV0byByZXN1bHQgPSBz
dGQ6Om1ha2VfdW5pcXVlPExldmVsREJEYXRhYmFzZT4oKTsKLSAgICByZXN1bHQtPm1fZGIgPSBz
dGQ6OnVuaXF1ZV9wdHI8bGV2ZWxkYjo6REI+KGRiKTsKLSAgICByZXN1bHQtPm1fY29tcGFyYXRv
ckFkYXB0ZXIgPSBXVEY6Om1vdmUoY29tcGFyYXRvckFkYXB0ZXIpOwotICAgIHJlc3VsdC0+bV9j
b21wYXJhdG9yID0gY29tcGFyYXRvcjsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0ZDo6
dW5pcXVlX3B0cjxMZXZlbERCRGF0YWJhc2U+IExldmVsREJEYXRhYmFzZTo6b3BlbkluTWVtb3J5
KGNvbnN0IExldmVsREJDb21wYXJhdG9yKiBjb21wYXJhdG9yKQotewotICAgIGF1dG8gY29tcGFy
YXRvckFkYXB0ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbXBhcmF0b3JBZGFwdGVyPihjb21wYXJh
dG9yKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8bGV2ZWxkYjo6RW52PiBpbk1lbW9yeUVudihsZXZl
bGRiOjpOZXdNZW1FbnYobGV2ZWxkYjo6SURCRW52KCkpKTsKLQotICAgIGxldmVsZGI6OkRCKiBk
YjsKLSAgICBjb25zdCBsZXZlbGRiOjpTdGF0dXMgcyA9IG9wZW5EQihjb21wYXJhdG9yQWRhcHRl
ci5nZXQoKSwgaW5NZW1vcnlFbnYuZ2V0KCksIFN0cmluZygpLCAmZGIpOwotCi0gICAgaWYgKCFz
Lm9rKCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gb3BlbiBpbi1tZW1vcnkgTGV2
ZWxEQiBkYXRhYmFzZTogJXMiLCBzLlRvU3RyaW5nKCkuY19zdHIoKSk7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KLQotICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxM
ZXZlbERCRGF0YWJhc2U+KCk7Ci0gICAgcmVzdWx0LT5tX2VudiA9IFdURjo6bW92ZShpbk1lbW9y
eUVudik7Ci0gICAgcmVzdWx0LT5tX2RiID0gc3RkOjp1bmlxdWVfcHRyPGxldmVsZGI6OkRCPihk
Yik7Ci0gICAgcmVzdWx0LT5tX2NvbXBhcmF0b3JBZGFwdGVyID0gV1RGOjptb3ZlKGNvbXBhcmF0
b3JBZGFwdGVyKTsKLSAgICByZXN1bHQtPm1fY29tcGFyYXRvciA9IGNvbXBhcmF0b3I7Ci0KLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIExldmVsREJEYXRhYmFzZTo6cHV0KGNvbnN0IExl
dmVsREJTbGljZSYga2V5LCBjb25zdCBWZWN0b3I8Y2hhcj4mIHZhbHVlKQotewotICAgIGxldmVs
ZGI6OldyaXRlT3B0aW9ucyB3cml0ZU9wdGlvbnM7Ci0gICAgd3JpdGVPcHRpb25zLnN5bmMgPSB0
cnVlOwotCi0gICAgY29uc3QgbGV2ZWxkYjo6U3RhdHVzIHMgPSBtX2RiLT5QdXQod3JpdGVPcHRp
b25zLCBtYWtlU2xpY2Uoa2V5KSwgbWFrZVNsaWNlKHZhbHVlKSk7Ci0gICAgaWYgKHMub2soKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgTE9HX0VSUk9SKCJMZXZlbERCIHB1dCBmYWlsZWQ6
ICVzIiwgcy5Ub1N0cmluZygpLmNfc3RyKCkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBMZXZlbERCRGF0YWJhc2U6OnJlbW92ZShjb25zdCBMZXZlbERCU2xpY2UmIGtleSkKLXsKLSAg
ICBsZXZlbGRiOjpXcml0ZU9wdGlvbnMgd3JpdGVPcHRpb25zOwotICAgIHdyaXRlT3B0aW9ucy5z
eW5jID0gdHJ1ZTsKLQotICAgIGNvbnN0IGxldmVsZGI6OlN0YXR1cyBzID0gbV9kYi0+RGVsZXRl
KHdyaXRlT3B0aW9ucywgbWFrZVNsaWNlKGtleSkpOwotICAgIGlmIChzLm9rKCkpCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIGlmIChzLklzTm90Rm91bmQoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIExPR19FUlJPUigiTGV2ZWxEQiByZW1vdmUgZmFpbGVkOiAlcyIsIHMuVG9TdHJp
bmcoKS5jX3N0cigpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgTGV2ZWxEQkRhdGFi
YXNlOjpzYWZlR2V0KGNvbnN0IExldmVsREJTbGljZSYga2V5LCBWZWN0b3I8Y2hhcj4mIHZhbHVl
LCBib29sJiBmb3VuZCwgY29uc3QgTGV2ZWxEQlNuYXBzaG90KiBzbmFwc2hvdCkKLXsKLSAgICBm
b3VuZCA9IGZhbHNlOwotICAgIHN0ZDo6c3RyaW5nIHJlc3VsdDsKLSAgICBsZXZlbGRiOjpSZWFk
T3B0aW9ucyByZWFkT3B0aW9uczsKLSAgICByZWFkT3B0aW9ucy52ZXJpZnlfY2hlY2tzdW1zID0g
dHJ1ZTsgLy8gRklYTUU6IERpc2FibGUgdGhpcyBpZiB0aGUgcGVyZm9ybWFuY2UgaW1wYWN0IGlz
IHRvbyBncmVhdC4KLSAgICByZWFkT3B0aW9ucy5zbmFwc2hvdCA9IHNuYXBzaG90ID8gc25hcHNo
b3QtPm1fc25hcHNob3QgOiAwOwotCi0gICAgY29uc3QgbGV2ZWxkYjo6U3RhdHVzIHMgPSBtX2Ri
LT5HZXQocmVhZE9wdGlvbnMsIG1ha2VTbGljZShrZXkpLCAmcmVzdWx0KTsKLSAgICBpZiAocy5v
aygpKSB7Ci0gICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgdmFsdWUuY2xlYXIoKTsKLSAg
ICAgICAgdmFsdWUuYXBwZW5kKHJlc3VsdC5jX3N0cigpLCByZXN1bHQubGVuZ3RoKCkpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHMuSXNOb3RGb3VuZCgpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBMT0dfRVJST1IoIkxldmVsREIgZ2V0IGZhaWxlZDogJXMiLCBz
LlRvU3RyaW5nKCkuY19zdHIoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIExldmVs
REJEYXRhYmFzZTo6d3JpdGUoTGV2ZWxEQldyaXRlQmF0Y2gmIHdyaXRlQmF0Y2gpCi17Ci0gICAg
bGV2ZWxkYjo6V3JpdGVPcHRpb25zIHdyaXRlT3B0aW9uczsKLSAgICB3cml0ZU9wdGlvbnMuc3lu
YyA9IHRydWU7Ci0KLSAgICBjb25zdCBsZXZlbGRiOjpTdGF0dXMgcyA9IG1fZGItPldyaXRlKHdy
aXRlT3B0aW9ucywgd3JpdGVCYXRjaC5tX3dyaXRlQmF0Y2guZ2V0KCkpOwotICAgIGlmIChzLm9r
KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIExPR19FUlJPUigiTGV2ZWxEQiB3cml0ZSBm
YWlsZWQ6ICVzIiwgcy5Ub1N0cmluZygpLmNfc3RyKCkpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotbmFtZXNwYWNlIHsKLWNsYXNzIEl0ZXJhdG9ySW1wbCA6IHB1YmxpYyBMZXZlbERCSXRlcmF0
b3IgewotcHVibGljOgotICAgIGV4cGxpY2l0IEl0ZXJhdG9ySW1wbChzdGQ6OnVuaXF1ZV9wdHI8
bGV2ZWxkYjo6SXRlcmF0b3I+KTsKLSAgICB+SXRlcmF0b3JJbXBsKCkgeyB9OwotCi0gICAgdmly
dHVhbCBib29sIGlzVmFsaWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2Vla1RvTGFzdCgp
OwotICAgIHZpcnR1YWwgdm9pZCBzZWVrKGNvbnN0IExldmVsREJTbGljZSYgdGFyZ2V0KTsKLSAg
ICB2aXJ0dWFsIHZvaWQgbmV4dCgpOwotICAgIHZpcnR1YWwgdm9pZCBwcmV2KCk7Ci0gICAgdmly
dHVhbCBMZXZlbERCU2xpY2Uga2V5KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBMZXZlbERCU2xpY2Ug
dmFsdWUoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGNoZWNrU3RhdHVzKCk7Ci0KLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8bGV2ZWxkYjo6SXRlcmF0b3I+IG1faXRlcmF0b3I7Ci19OwotfQot
Ci1JdGVyYXRvckltcGw6Okl0ZXJhdG9ySW1wbChzdGQ6OnVuaXF1ZV9wdHI8bGV2ZWxkYjo6SXRl
cmF0b3I+IGl0KQotICAgIDogbV9pdGVyYXRvcihXVEY6Om1vdmUoaXQpKQotewotfQotCi12b2lk
IEl0ZXJhdG9ySW1wbDo6Y2hlY2tTdGF0dXMoKQotewotICAgIGNvbnN0IGxldmVsZGI6OlN0YXR1
cyBzID0gbV9pdGVyYXRvci0+c3RhdHVzKCk7Ci0gICAgaWYgKCFzLm9rKCkpCi0gICAgICAgIExP
R19FUlJPUigiTGV2ZWxEQiBpdGVyYXRvciBlcnJvcjogJXMiLCBzLlRvU3RyaW5nKCkuY19zdHIo
KSk7Ci19Ci0KLWJvb2wgSXRlcmF0b3JJbXBsOjppc1ZhbGlkKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9pdGVyYXRvci0+VmFsaWQoKTsKLX0KLQotdm9pZCBJdGVyYXRvckltcGw6OnNlZWtUb0xh
c3QoKQotewotICAgIG1faXRlcmF0b3ItPlNlZWtUb0xhc3QoKTsKLSAgICBjaGVja1N0YXR1cygp
OwotfQotCi12b2lkIEl0ZXJhdG9ySW1wbDo6c2Vlayhjb25zdCBMZXZlbERCU2xpY2UmIHRhcmdl
dCkKLXsKLSAgICBtX2l0ZXJhdG9yLT5TZWVrKG1ha2VTbGljZSh0YXJnZXQpKTsKLSAgICBjaGVj
a1N0YXR1cygpOwotfQotCi12b2lkIEl0ZXJhdG9ySW1wbDo6bmV4dCgpCi17Ci0gICAgQVNTRVJU
KGlzVmFsaWQoKSk7Ci0gICAgbV9pdGVyYXRvci0+TmV4dCgpOwotICAgIGNoZWNrU3RhdHVzKCk7
Ci19Ci0KLXZvaWQgSXRlcmF0b3JJbXBsOjpwcmV2KCkKLXsKLSAgICBBU1NFUlQoaXNWYWxpZCgp
KTsKLSAgICBtX2l0ZXJhdG9yLT5QcmV2KCk7Ci0gICAgY2hlY2tTdGF0dXMoKTsKLX0KLQotTGV2
ZWxEQlNsaWNlIEl0ZXJhdG9ySW1wbDo6a2V5KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaXNWYWxp
ZCgpKTsKLSAgICByZXR1cm4gbWFrZUxldmVsREJTbGljZShtX2l0ZXJhdG9yLT5rZXkoKSk7Ci19
Ci0KLUxldmVsREJTbGljZSBJdGVyYXRvckltcGw6OnZhbHVlKCkgY29uc3QKLXsKLSAgICBBU1NF
UlQoaXNWYWxpZCgpKTsKLSAgICByZXR1cm4gbWFrZUxldmVsREJTbGljZShtX2l0ZXJhdG9yLT52
YWx1ZSgpKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPExldmVsREJJdGVyYXRvcj4gTGV2ZWxEQkRh
dGFiYXNlOjpjcmVhdGVJdGVyYXRvcihjb25zdCBMZXZlbERCU25hcHNob3QqIHNuYXBzaG90KQot
ewotICAgIGxldmVsZGI6OlJlYWRPcHRpb25zIHJlYWRPcHRpb25zOwotICAgIHJlYWRPcHRpb25z
LnZlcmlmeV9jaGVja3N1bXMgPSB0cnVlOyAvLyBGSVhNRTogRGlzYWJsZSB0aGlzIGlmIHRoZSBw
ZXJmb3JtYW5jZSBpbXBhY3QgaXMgdG9vIGdyZWF0LgotICAgIHJlYWRPcHRpb25zLnNuYXBzaG90
ID0gc25hcHNob3QgPyBzbmFwc2hvdC0+bV9zbmFwc2hvdCA6IDA7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPGxldmVsZGI6Okl0ZXJhdG9yPiBpKG1fZGItPk5ld0l0ZXJhdG9yKHJlYWRPcHRpb25zKSk7
Ci0gICAgaWYgKCFpKSAvLyBGSVhNRTogRG91YmxlIGNoZWNrIGlmIHdlIGFjdHVhbGx5IG5lZWQg
dG8gY2hlY2sgdGhpcy4KLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHN0ZDo6
bWFrZV91bmlxdWU8SXRlcmF0b3JJbXBsPihXVEY6Om1vdmUoaSkpOwotfQotCi1jb25zdCBMZXZl
bERCQ29tcGFyYXRvciogTGV2ZWxEQkRhdGFiYXNlOjpjb21wYXJhdG9yKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9jb21wYXJhdG9yOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDI3MTk2NWIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIExldmVsREJEYXRhYmFzZV9oCi0jZGVmaW5lIExldmVsREJE
YXRhYmFzZV9oCi0KLSNpZiBVU0UoTEVWRUxEQikKLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBsZXZlbGRiIHsKLWNsYXNzIENvbXBhcmF0b3I7Ci1jbGFzcyBEQjsKLWNsYXNzIEVu
djsKLWNsYXNzIFNuYXBzaG90OwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIExl
dmVsREJDb21wYXJhdG9yOwotY2xhc3MgTGV2ZWxEQkRhdGFiYXNlOwotY2xhc3MgTGV2ZWxEQkl0
ZXJhdG9yOwotY2xhc3MgTGV2ZWxEQlNsaWNlOwotY2xhc3MgTGV2ZWxEQldyaXRlQmF0Y2g7Ci0K
LWNsYXNzIExldmVsREJTbmFwc2hvdCB7Ci1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBMZXZl
bERCRGF0YWJhc2U7Ci0gICAgZnJpZW5kIGNsYXNzIExldmVsREJUcmFuc2FjdGlvbjsKLQotICAg
IGV4cGxpY2l0IExldmVsREJTbmFwc2hvdChMZXZlbERCRGF0YWJhc2UqKTsKLSAgICB+TGV2ZWxE
QlNuYXBzaG90KCk7Ci0KLSAgICBsZXZlbGRiOjpEQiogbV9kYjsKLSAgICBjb25zdCBsZXZlbGRi
OjpTbmFwc2hvdCogbV9zbmFwc2hvdDsKLX07Ci0KLWNsYXNzIExldmVsREJEYXRhYmFzZSB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxMZXZlbERCRGF0YWJhc2U+IG9wZW4o
Y29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgTGV2ZWxEQkNvbXBhcmF0b3IqKTsKLSAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPExldmVsREJEYXRhYmFzZT4gb3BlbkluTWVtb3J5KGNvbnN0
IExldmVsREJDb21wYXJhdG9yKik7Ci0gICAgTGV2ZWxEQkRhdGFiYXNlKCk7Ci0gICAgc3RhdGlj
IGJvb2wgZGVzdHJveShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKTsKLSAgICB2aXJ0dWFsIH5MZXZl
bERCRGF0YWJhc2UoKTsKLQotICAgIGJvb2wgcHV0KGNvbnN0IExldmVsREJTbGljZSYga2V5LCBj
b25zdCBWZWN0b3I8Y2hhcj4mIHZhbHVlKTsKLSAgICBib29sIHJlbW92ZShjb25zdCBMZXZlbERC
U2xpY2UmIGtleSk7Ci0gICAgdmlydHVhbCBib29sIHNhZmVHZXQoY29uc3QgTGV2ZWxEQlNsaWNl
JiBrZXksIFZlY3RvcjxjaGFyPiYgdmFsdWUsIGJvb2wmIGZvdW5kLCBjb25zdCBMZXZlbERCU25h
cHNob3QqID0gMCk7Ci0gICAgYm9vbCB3cml0ZShMZXZlbERCV3JpdGVCYXRjaCYpOwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxMZXZlbERCSXRlcmF0b3I+IGNyZWF0ZUl0ZXJhdG9yKGNvbnN0IExldmVs
REJTbmFwc2hvdCogPSAwKTsKLSAgICBjb25zdCBMZXZlbERCQ29tcGFyYXRvciogY29tcGFyYXRv
cigpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBMZXZlbERCU25hcHNob3Q7
Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8bGV2ZWxkYjo6RW52PiBtX2VudjsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8bGV2ZWxkYjo6Q29tcGFyYXRvcj4gbV9jb21wYXJhdG9yQWRhcHRlcjsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8bGV2ZWxkYjo6REI+IG1fZGI7Ci0gICAgY29uc3QgTGV2ZWxEQkNvbXBh
cmF0b3IqIG1fY29tcGFyYXRvcjsKLX07Ci0KLX0KLQotI2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkl0ZXJhdG9yLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJJdGVyYXRvci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTU1ZTFmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkl0ZXJhdG9yLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBMZXZlbERCSXRlcmF0b3JfaAotI2RlZmluZSBM
ZXZlbERCSXRlcmF0b3JfaAotCi0jaWYgVVNFKExFVkVMREIpCi0KLSNpbmNsdWRlICJMZXZlbERC
U2xpY2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBMZXZlbERCSXRlcmF0b3Ig
ewotcHVibGljOgotICAgIHZpcnR1YWwgfkxldmVsREJJdGVyYXRvcigpIHsgfTsKLSAgICB2aXJ0
dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2Vla1RvTGFz
dCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2Vlayhjb25zdCBMZXZlbERCU2xpY2UmIHRhcmdl
dCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBuZXh0KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBw
cmV2KCkgPSAwOwotICAgIHZpcnR1YWwgTGV2ZWxEQlNsaWNlIGtleSgpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIExldmVsREJTbGljZSB2YWx1ZSgpIGNvbnN0ID0gMDsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShMRVZFTERCKQotCi0jZW5kaWYgLy8gTGV2
ZWxEQkl0ZXJhdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVs
ZGIvTGV2ZWxEQlNsaWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVs
REJTbGljZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODM2OWE0Li4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlNsaWNlLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBMZXZlbERCU2xpY2Vf
aAotI2RlZmluZSBMZXZlbERCU2xpY2VfaAotCi0jaWYgVVNFKExFVkVMREIpCi0KLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTGV2ZWxEQlNsaWNlIHsKLXB1YmxpYzoKLSAgICBMZXZl
bERCU2xpY2UoY29uc3QgY2hhciogYmVnaW4sIGNvbnN0IGNoYXIqIGVuZCkKLSAgICAgICAgOiBt
X2JlZ2luKGJlZ2luKQotICAgICAgICAsIG1fZW5kKGVuZCkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChtX2VuZCA+PSBtX2JlZ2luKTsKLSAgICB9Ci0KLSAgICBMZXZlbERCU2xpY2UoY29uc3QgVmVj
dG9yPGNoYXI+JiB2KQotICAgICAgICA6IG1fYmVnaW4odi5kYXRhKCkpCi0gICAgICAgICwgbV9l
bmQobV9iZWdpbiArIHYuc2l6ZSgpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZW5kID49IG1f
YmVnaW4pOwotICAgIH0KLQotICAgIH5MZXZlbERCU2xpY2UoKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBjb25zdCBjaGFyKiBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW47IH0KLSAgICBjb25z
dCBjaGFyKiBlbmQoKSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQotCi1wcml2YXRlOgotICAgIGNv
bnN0IGNoYXIqIG1fYmVnaW47Ci0gICAgY29uc3QgY2hhciogbV9lbmQ7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoTEVWRUxEQikKLQotI2VuZGlmIC8vIExl
dmVsREJTbGljZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRi
L0xldmVsREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRi
L0xldmVsREJUcmFuc2FjdGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2
YjQwYTYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZl
bERCVHJhbnNhY3Rpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTI1ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGV2ZWxEQlRyYW5zYWN0aW9uLmgiCi0K
LSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNpZiBVU0UoTEVWRUxEQikKLQotI2luY2x1
ZGUgIkxldmVsREJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIkxldmVsREJTbGljZS5oIgotI2luY2x1
ZGUgIkxldmVsREJXcml0ZUJhdGNoLmgiCi0jaW5jbHVkZSA8bGV2ZWxkYi9kYi5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8TGV2ZWxEQlRyYW5zYWN0aW9uPiBMZXZlbERC
VHJhbnNhY3Rpb246OmNyZWF0ZShMZXZlbERCRGF0YWJhc2UqIGRiKQotewotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgTGV2ZWxEQlRyYW5zYWN0aW9uKGRiKSk7Ci19Ci0KLUxldmVsREJUcmFuc2Fj
dGlvbjo6TGV2ZWxEQlRyYW5zYWN0aW9uKExldmVsREJEYXRhYmFzZSogZGIpCi0gICAgOiBtX2Ri
KGRiKQotICAgICwgbV9zbmFwc2hvdChkYikKLSAgICAsIG1fY29tcGFyYXRvcihkYi0+Y29tcGFy
YXRvcigpKQotICAgICwgbV9maW5pc2hlZChmYWxzZSkKLXsKLSAgICBtX3RyZWUuYWJzdHJhY3Rv
cigpLm1fY29tcGFyYXRvciA9IG1fY29tcGFyYXRvcjsKLX0KLQotdm9pZCBMZXZlbERCVHJhbnNh
Y3Rpb246OmNsZWFyVHJlZSgpCi17Ci0gICAgVHJlZVR5cGU6Okl0ZXJhdG9yIGl0ZXJhdG9yOwot
ICAgIGl0ZXJhdG9yLnN0YXJ0X2l0ZXJfbGVhc3QobV90cmVlKTsKLQotICAgIFZlY3RvcjxBVkxU
cmVlTm9kZSo+IG5vZGVzOwotCi0gICAgd2hpbGUgKCppdGVyYXRvcikgewotICAgICAgICBub2Rl
cy5hcHBlbmQoKml0ZXJhdG9yKTsKLSAgICAgICAgKytpdGVyYXRvcjsKLSAgICB9Ci0gICAgbV90
cmVlLnB1cmdlKCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5vZGVzLnNpemUoKTsg
KytpKQotICAgICAgICBkZWxldGUobm9kZXNbaV0pOwotfQotCi1MZXZlbERCVHJhbnNhY3Rpb246
On5MZXZlbERCVHJhbnNhY3Rpb24oKQotewotICAgIGNsZWFyVHJlZSgpOwotfQotCi1zdGF0aWMg
dm9pZCBpbml0VmVjdG9yKGNvbnN0IExldmVsREJTbGljZSYgc2xpY2UsIFZlY3RvcjxjaGFyPiog
dmVjdG9yKQotewotICAgIHZlY3Rvci0+Y2xlYXIoKTsKLSAgICB2ZWN0b3ItPmFwcGVuZChzbGlj
ZS5iZWdpbigpLCBzbGljZS5lbmQoKSAtIHNsaWNlLmJlZ2luKCkpOwotfQotCi12b2lkIExldmVs
REJUcmFuc2FjdGlvbjo6c2V0KGNvbnN0IExldmVsREJTbGljZSYga2V5LCBjb25zdCBWZWN0b3I8
Y2hhcj4mIHZhbHVlLCBib29sIGRlbGV0ZWQpCi17Ci0gICAgQVNTRVJUKCFtX2ZpbmlzaGVkKTsK
LSAgICBib29sIG5ld05vZGUgPSBmYWxzZTsKLSAgICBBVkxUcmVlTm9kZSogbm9kZSA9IG1fdHJl
ZS5zZWFyY2goa2V5KTsKLQotICAgIGlmICghbm9kZSkgewotICAgICAgICBub2RlID0gbmV3IEFW
TFRyZWVOb2RlOwotICAgICAgICBpbml0VmVjdG9yKGtleSwgJm5vZGUtPmtleSk7Ci0gICAgICAg
IG1fdHJlZS5pbnNlcnQobm9kZSk7Ci0gICAgICAgIG5ld05vZGUgPSB0cnVlOwotICAgIH0KLSAg
ICBub2RlLT52YWx1ZSA9IHZhbHVlOwotICAgIG5vZGUtPmRlbGV0ZWQgPSBkZWxldGVkOwotCi0g
ICAgaWYgKG5ld05vZGUpCi0gICAgICAgIG5vdGlmeUl0ZXJhdG9yc09mVHJlZUNoYW5nZSgpOwot
fQotCi12b2lkIExldmVsREJUcmFuc2FjdGlvbjo6cHV0KGNvbnN0IExldmVsREJTbGljZSYga2V5
LCBjb25zdCBWZWN0b3I8Y2hhcj4mIHZhbHVlKQotewotICAgIHNldChrZXksIHZhbHVlLCBmYWxz
ZSk7Ci19Ci0KLXZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjpyZW1vdmUoY29uc3QgTGV2ZWxEQlNs
aWNlJiBrZXkpCi17Ci0gICAgc2V0KGtleSwgVmVjdG9yPGNoYXI+KCksIHRydWUpOwotfQotCi1i
b29sIExldmVsREJUcmFuc2FjdGlvbjo6c2FmZUdldChjb25zdCBMZXZlbERCU2xpY2UmIGtleSwg
VmVjdG9yPGNoYXI+JiB2YWx1ZSwgYm9vbCYgZm91bmQpCi17Ci0gICAgZm91bmQgPSBmYWxzZTsK
LSAgICBBU1NFUlQoIW1fZmluaXNoZWQpOwotICAgIEFWTFRyZWVOb2RlKiBub2RlID0gbV90cmVl
LnNlYXJjaChrZXkpOwotCi0gICAgaWYgKG5vZGUpIHsKLSAgICAgICAgaWYgKG5vZGUtPmRlbGV0
ZWQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICB2YWx1ZSA9IG5vZGUtPnZh
bHVlOwotICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIGJvb2wgb2sgPSBtX2RiLT5zYWZlR2V0KGtleSwgdmFsdWUsIGZvdW5kLCAmbV9zbmFw
c2hvdCk7Ci0gICAgaWYgKCFvaykgewotICAgICAgICBBU1NFUlQoIWZvdW5kKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBMZXZlbERC
VHJhbnNhY3Rpb246OmNvbW1pdCgpCi17Ci0gICAgQVNTRVJUKCFtX2ZpbmlzaGVkKTsKLQotICAg
IGlmIChtX3RyZWUuaXNfZW1wdHkoKSkgewotICAgICAgICBtX2ZpbmlzaGVkID0gdHJ1ZTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgc3RkOjp1bmlxdWVfcHRyPExldmVsREJX
cml0ZUJhdGNoPiB3cml0ZUJhdGNoID0gc3RkOjptYWtlX3VuaXF1ZTxMZXZlbERCV3JpdGVCYXRj
aD4oKTsKLQotICAgIFRyZWVUeXBlOjpJdGVyYXRvciBpdGVyYXRvcjsKLSAgICBpdGVyYXRvci5z
dGFydF9pdGVyX2xlYXN0KG1fdHJlZSk7Ci0KLSAgICB3aGlsZSAoKml0ZXJhdG9yKSB7Ci0gICAg
ICAgIEFWTFRyZWVOb2RlKiBub2RlID0gKml0ZXJhdG9yOwotICAgICAgICBpZiAoIW5vZGUtPmRl
bGV0ZWQpCi0gICAgICAgICAgICB3cml0ZUJhdGNoLT5wdXQobm9kZS0+a2V5LCBub2RlLT52YWx1
ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHdyaXRlQmF0Y2gtPnJlbW92ZShub2RlLT5r
ZXkpOwotICAgICAgICArK2l0ZXJhdG9yOwotICAgIH0KLQotICAgIGlmICghbV9kYi0+d3JpdGUo
KndyaXRlQmF0Y2gpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjbGVhclRyZWUoKTsK
LSAgICBtX2ZpbmlzaGVkID0gdHJ1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBMZXZl
bERCVHJhbnNhY3Rpb246OnJvbGxiYWNrKCkKLXsKLSAgICBBU1NFUlQoIW1fZmluaXNoZWQpOwot
ICAgIG1fZmluaXNoZWQgPSB0cnVlOwotICAgIGNsZWFyVHJlZSgpOwotfQotCi1zdGQ6OnVuaXF1
ZV9wdHI8TGV2ZWxEQkl0ZXJhdG9yPiBMZXZlbERCVHJhbnNhY3Rpb246OmNyZWF0ZUl0ZXJhdG9y
KCkKLXsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxUcmFuc2FjdGlvbkl0ZXJhdG9yPih0
aGlzKTsKLX0KLQotYm9vbCBMZXZlbERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6aXNWYWxp
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICptX2l0ZXJhdG9yOwotfQotCi12b2lkIExldmVsREJU
cmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpzZWVrVG9MYXN0KCkKLXsKLSAgICBtX2l0ZXJhdG9y
LnN0YXJ0X2l0ZXJfZ3JlYXRlc3QoKm1fdHJlZSk7Ci0gICAgaWYgKGlzVmFsaWQoKSkKLSAgICAg
ICAgbV9rZXkgPSAoKm1faXRlcmF0b3IpLT5rZXk7Ci19Ci0KLXZvaWQgTGV2ZWxEQlRyYW5zYWN0
aW9uOjpUcmVlSXRlcmF0b3I6OnNlZWsoY29uc3QgTGV2ZWxEQlNsaWNlJiB0YXJnZXQpCi17Ci0g
ICAgbV9pdGVyYXRvci5zdGFydF9pdGVyKCptX3RyZWUsIHRhcmdldCwgVHJlZVR5cGU6OkVRVUFM
KTsKLSAgICBpZiAoIWlzVmFsaWQoKSkKLSAgICAgICAgbV9pdGVyYXRvci5zdGFydF9pdGVyKCpt
X3RyZWUsIHRhcmdldCwgVHJlZVR5cGU6OkdSRUFURVIpOwotCi0gICAgaWYgKGlzVmFsaWQoKSkK
LSAgICAgICAgbV9rZXkgPSAoKm1faXRlcmF0b3IpLT5rZXk7Ci19Ci0KLXZvaWQgTGV2ZWxEQlRy
YW5zYWN0aW9uOjpUcmVlSXRlcmF0b3I6Om5leHQoKQotewotICAgIEFTU0VSVChpc1ZhbGlkKCkp
OwotICAgICsrbV9pdGVyYXRvcjsKLSAgICBpZiAoaXNWYWxpZCgpKSB7Ci0gICAgICAgIEFTU0VS
VChtX3RyYW5zYWN0aW9uLT5tX2NvbXBhcmF0b3ItPmNvbXBhcmUoKCptX2l0ZXJhdG9yKS0+a2V5
LCBtX2tleSkgPiAwKTsKLSAgICAgICAgKHZvaWQpbV90cmFuc2FjdGlvbjsKLSAgICAgICAgbV9r
ZXkgPSAoKm1faXRlcmF0b3IpLT5rZXk7Ci0gICAgfQotfQotCi12b2lkIExldmVsREJUcmFuc2Fj
dGlvbjo6VHJlZUl0ZXJhdG9yOjpwcmV2KCkKLXsKLSAgICBBU1NFUlQoaXNWYWxpZCgpKTsKLSAg
ICAtLW1faXRlcmF0b3I7Ci0gICAgaWYgKGlzVmFsaWQoKSkgewotICAgICAgICBBU1NFUlQobV90
cmVlLT5hYnN0cmFjdG9yKCkubV9jb21wYXJhdG9yLT5jb21wYXJlKCgqbV9pdGVyYXRvciktPmtl
eSwgbV9rZXkpIDwgMCk7Ci0gICAgICAgIG1fa2V5ID0gKCptX2l0ZXJhdG9yKS0+a2V5OwotICAg
IH0KLX0KLQotTGV2ZWxEQlNsaWNlIExldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpr
ZXkoKSBjb25zdAotewotICAgIEFTU0VSVChpc1ZhbGlkKCkpOwotICAgIHJldHVybiBtX2tleTsK
LX0KLQotTGV2ZWxEQlNsaWNlIExldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjp2YWx1
ZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlzVmFsaWQoKSk7Ci0gICAgQVNTRVJUKCFpc0RlbGV0
ZWQoKSk7Ci0gICAgcmV0dXJuICgqbV9pdGVyYXRvciktPnZhbHVlOwotfQotCi1ib29sIExldmVs
REJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjppc0RlbGV0ZWQoKSBjb25zdAotewotICAgIEFT
U0VSVChpc1ZhbGlkKCkpOwotICAgIHJldHVybiAoKm1faXRlcmF0b3IpLT5kZWxldGVkOwotfQot
Ci12b2lkIExldmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpyZXNldCgpCi17Ci0gICAg
QVNTRVJUKGlzVmFsaWQoKSk7Ci0gICAgbV9pdGVyYXRvci5zdGFydF9pdGVyKCptX3RyZWUsIG1f
a2V5LCBUcmVlVHlwZTo6RVFVQUwpOwotICAgIEFTU0VSVChpc1ZhbGlkKCkpOwotfQotCi1MZXZl
bERCVHJhbnNhY3Rpb246OlRyZWVJdGVyYXRvcjo6flRyZWVJdGVyYXRvcigpCi17Ci19Ci0KLUxl
dmVsREJUcmFuc2FjdGlvbjo6VHJlZUl0ZXJhdG9yOjpUcmVlSXRlcmF0b3IoTGV2ZWxEQlRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbikKLSAgICA6IG1fdHJlZSgmdHJhbnNhY3Rpb24tPm1fdHJlZSkK
LSAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi17Ci19Ci0KLUxldmVsREJUcmFuc2Fj
dGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6VHJhbnNhY3Rpb25JdGVyYXRvcihQYXNzUmVmUHRy
PExldmVsREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24pCi0gICAgOiBtX3RyYW5zYWN0aW9uKHRy
YW5zYWN0aW9uKQotICAgICwgbV9jb21wYXJhdG9yKG1fdHJhbnNhY3Rpb24tPm1fY29tcGFyYXRv
cikKLSAgICAsIG1fdHJlZUl0ZXJhdG9yKHN0ZDo6bWFrZV91bmlxdWU8VHJlZUl0ZXJhdG9yPigo
bV90cmFuc2FjdGlvbi5nZXQoKSkpKQotICAgICwgbV9kYkl0ZXJhdG9yKG1fdHJhbnNhY3Rpb24t
Pm1fZGItPmNyZWF0ZUl0ZXJhdG9yKCZtX3RyYW5zYWN0aW9uLT5tX3NuYXBzaG90KSkKLSAgICAs
IG1fY3VycmVudCgwKQotICAgICwgbV9kaXJlY3Rpb24oa0ZvcndhcmQpCi0gICAgLCBtX3RyZWVD
aGFuZ2VkKGZhbHNlKQotewotICAgIG1fdHJhbnNhY3Rpb24tPnJlZ2lzdGVySXRlcmF0b3IodGhp
cyk7Ci19Ci0KLUxldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6flRyYW5z
YWN0aW9uSXRlcmF0b3IoKQotewotICAgIG1fdHJhbnNhY3Rpb24tPnVucmVnaXN0ZXJJdGVyYXRv
cih0aGlzKTsKLX0KLQotYm9vbCBMZXZlbERCVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0
b3I6OmlzVmFsaWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2N1cnJlbnQ7Ci19Ci0KLXZvaWQg
TGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjpzZWVrVG9MYXN0KCkKLXsK
LSAgICBtX3RyZWVJdGVyYXRvci0+c2Vla1RvTGFzdCgpOwotICAgIG1fZGJJdGVyYXRvci0+c2Vl
a1RvTGFzdCgpOwotICAgIG1fZGlyZWN0aW9uID0ga1JldmVyc2U7Ci0KLSAgICBoYW5kbGVDb25m
bGljdHNBbmREZWxldGVzKCk7Ci0gICAgc2V0Q3VycmVudEl0ZXJhdG9yVG9MYXJnZXN0S2V5KCk7
Ci19Ci0KLXZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjpzZWVr
KGNvbnN0IExldmVsREJTbGljZSYgdGFyZ2V0KQotewotICAgIG1fdHJlZUl0ZXJhdG9yLT5zZWVr
KHRhcmdldCk7Ci0gICAgbV9kYkl0ZXJhdG9yLT5zZWVrKHRhcmdldCk7Ci0gICAgbV9kaXJlY3Rp
b24gPSBrRm9yd2FyZDsKLQotICAgIGhhbmRsZUNvbmZsaWN0c0FuZERlbGV0ZXMoKTsKLSAgICBz
ZXRDdXJyZW50SXRlcmF0b3JUb1NtYWxsZXN0S2V5KCk7Ci19Ci0KLXZvaWQgTGV2ZWxEQlRyYW5z
YWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjpuZXh0KCkKLXsKLSAgICBBU1NFUlQoaXNWYWxp
ZCgpKTsKLSAgICBpZiAobV90cmVlQ2hhbmdlZCkKLSAgICAgICAgcmVmcmVzaFRyZWVJdGVyYXRv
cigpOwotCi0gICAgaWYgKG1fZGlyZWN0aW9uICE9IGtGb3J3YXJkKSB7Ci0gICAgICAgIC8vIEVu
c3VyZSB0aGUgbm9uLWN1cnJlbnQgaXRlcmF0b3IgaXMgcG9zaXRpb25lZCBhZnRlciBrZXkoKS4K
LQotICAgICAgICBMZXZlbERCSXRlcmF0b3IqIG5vbkN1cnJlbnQgPSAobV9jdXJyZW50ID09IG1f
ZGJJdGVyYXRvci5nZXQoKSkgPyBtX3RyZWVJdGVyYXRvci5nZXQoKSA6IG1fZGJJdGVyYXRvci5n
ZXQoKTsKLQotICAgICAgICBub25DdXJyZW50LT5zZWVrKGtleSgpKTsKLSAgICAgICAgaWYgKG5v
bkN1cnJlbnQtPmlzVmFsaWQoKSAmJiAhbV9jb21wYXJhdG9yLT5jb21wYXJlKG5vbkN1cnJlbnQt
PmtleSgpLCBrZXkoKSkpCi0gICAgICAgICAgICBub25DdXJyZW50LT5uZXh0KCk7IC8vIFRha2Ug
YW4gZXh0cmEgc3RlcCBzbyB0aGUgbm9uLWN1cnJlbnQga2V5IGlzIHN0cmljdGx5IGdyZWF0ZXIg
dGhhbiBrZXkoKS4KLQotICAgICAgICBBU1NFUlQoIW5vbkN1cnJlbnQtPmlzVmFsaWQoKSB8fCBt
X2NvbXBhcmF0b3ItPmNvbXBhcmUobm9uQ3VycmVudC0+a2V5KCksIGtleSgpKSA+IDApOwotCi0g
ICAgICAgIG1fZGlyZWN0aW9uID0ga0ZvcndhcmQ7Ci0gICAgfQotCi0gICAgbV9jdXJyZW50LT5u
ZXh0KCk7Ci0gICAgaGFuZGxlQ29uZmxpY3RzQW5kRGVsZXRlcygpOwotICAgIHNldEN1cnJlbnRJ
dGVyYXRvclRvU21hbGxlc3RLZXkoKTsKLX0KLQotdm9pZCBMZXZlbERCVHJhbnNhY3Rpb246OlRy
YW5zYWN0aW9uSXRlcmF0b3I6OnByZXYoKQotewotICAgIEFTU0VSVChpc1ZhbGlkKCkpOwotICAg
IGlmIChtX3RyZWVDaGFuZ2VkKQotICAgICAgICByZWZyZXNoVHJlZUl0ZXJhdG9yKCk7Ci0KLSAg
ICBpZiAobV9kaXJlY3Rpb24gIT0ga1JldmVyc2UpIHsKLSAgICAgICAgLy8gRW5zdXJlIHRoZSBu
b24tY3VycmVudCBpdGVyYXRvciBpcyBwb3NpdGlvbmVkIGJlZm9yZSBrZXkoKS4KLQotICAgICAg
ICBMZXZlbERCSXRlcmF0b3IqIG5vbkN1cnJlbnQgPSAobV9jdXJyZW50ID09IG1fZGJJdGVyYXRv
ci5nZXQoKSkgPyBtX3RyZWVJdGVyYXRvci5nZXQoKSA6IG1fZGJJdGVyYXRvci5nZXQoKTsKLQot
ICAgICAgICBub25DdXJyZW50LT5zZWVrKGtleSgpKTsKLSAgICAgICAgaWYgKG5vbkN1cnJlbnQt
PmlzVmFsaWQoKSkgewotICAgICAgICAgICAgLy8gSXRlcmF0b3IgaXMgYXQgZmlyc3QgZW50cnkg
Pj0ga2V5KCkuCi0gICAgICAgICAgICAvLyBTdGVwIGJhY2sgb25jZSB0byBlbnRyeSA8IGtleS4K
LSAgICAgICAgICAgIC8vIFRoaXMgaXMgd2h5IHdlIGRvbid0IGNoZWNrIGZvciB0aGUga2V5cyBi
ZWluZyB0aGUgc2FtZSBiZWZvcmUKLSAgICAgICAgICAgIC8vIHN0ZXBwaW5nLCBsaWtlIHdlIGRv
IGluIG5leHQoKSBhYm92ZS4KLSAgICAgICAgICAgIG5vbkN1cnJlbnQtPnByZXYoKTsKLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBub25DdXJyZW50LT5zZWVrVG9MYXN0KCk7IC8vIEl0ZXJh
dG9yIGhhcyBubyBlbnRyaWVzID49IGtleSgpLiBQb3NpdGlvbiBhdCBsYXN0IGVudHJ5LgotCi0g
ICAgICAgIEFTU0VSVCghbm9uQ3VycmVudC0+aXNWYWxpZCgpIHx8IG1fY29tcGFyYXRvci0+Y29t
cGFyZShub25DdXJyZW50LT5rZXkoKSwga2V5KCkpIDwgMCk7Ci0KLSAgICAgICAgbV9kaXJlY3Rp
b24gPSBrUmV2ZXJzZTsKLSAgICB9Ci0KLSAgICBtX2N1cnJlbnQtPnByZXYoKTsKLSAgICBoYW5k
bGVDb25mbGljdHNBbmREZWxldGVzKCk7Ci0gICAgc2V0Q3VycmVudEl0ZXJhdG9yVG9MYXJnZXN0
S2V5KCk7Ci19Ci0KLUxldmVsREJTbGljZSBMZXZlbERCVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9u
SXRlcmF0b3I6OmtleSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlzVmFsaWQoKSk7Ci0gICAgaWYg
KG1fdHJlZUNoYW5nZWQpCi0gICAgICAgIHJlZnJlc2hUcmVlSXRlcmF0b3IoKTsKLSAgICByZXR1
cm4gbV9jdXJyZW50LT5rZXkoKTsKLX0KLQotTGV2ZWxEQlNsaWNlIExldmVsREJUcmFuc2FjdGlv
bjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6dmFsdWUoKSBjb25zdAotewotICAgIEFTU0VSVChpc1Zh
bGlkKCkpOwotICAgIGlmIChtX3RyZWVDaGFuZ2VkKQotICAgICAgICByZWZyZXNoVHJlZUl0ZXJh
dG9yKCk7Ci0gICAgcmV0dXJuIG1fY3VycmVudC0+dmFsdWUoKTsKLX0KLQotdm9pZCBMZXZlbERC
VHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OnRyZWVDaGFuZ2VkKCkKLXsKLSAgICBt
X3RyZWVDaGFuZ2VkID0gdHJ1ZTsKLX0KLQotdm9pZCBMZXZlbERCVHJhbnNhY3Rpb246OlRyYW5z
YWN0aW9uSXRlcmF0b3I6OnJlZnJlc2hUcmVlSXRlcmF0b3IoKSBjb25zdAotewotICAgIEFTU0VS
VChtX3RyZWVDaGFuZ2VkKTsKLQotICAgIG1fdHJlZUNoYW5nZWQgPSBmYWxzZTsKLQotICAgIGlm
IChtX3RyZWVJdGVyYXRvci0+aXNWYWxpZCgpICYmIG1fdHJlZUl0ZXJhdG9yLmdldCgpID09IG1f
Y3VycmVudCkgewotICAgICAgICBtX3RyZWVJdGVyYXRvci0+cmVzZXQoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmIChtX2RiSXRlcmF0b3ItPmlzVmFsaWQoKSkgewotCi0gICAg
ICAgIC8vIFRoZXJlIGNvdWxkIGJlIG5ldyBub2RlcyBpbiB0aGUgdHJlZSB0aGF0IHdlIHNob3Vs
ZCBpdGVyYXRlIG92ZXIuCi0KLSAgICAgICAgaWYgKG1fZGlyZWN0aW9uID09IGtGb3J3YXJkKSB7
Ci0gICAgICAgICAgICAvLyBUcnkgdG8gc2VlayB0cmVlIGl0ZXJhdG9yIHRvIHNvbWV0aGluZyBn
cmVhdGVyIHRoYW4gdGhlIGRiIGl0ZXJhdG9yLgotICAgICAgICAgICAgbV90cmVlSXRlcmF0b3It
PnNlZWsobV9kYkl0ZXJhdG9yLT5rZXkoKSk7Ci0gICAgICAgICAgICBpZiAobV90cmVlSXRlcmF0
b3ItPmlzVmFsaWQoKSAmJiAhbV9jb21wYXJhdG9yLT5jb21wYXJlKG1fdHJlZUl0ZXJhdG9yLT5r
ZXkoKSwgbV9kYkl0ZXJhdG9yLT5rZXkoKSkpCi0gICAgICAgICAgICAgICAgbV90cmVlSXRlcmF0
b3ItPm5leHQoKTsgLy8gSWYgZXF1YWwsIHRha2UgYW5vdGhlciBzdGVwIHNvIHRoZSB0cmVlIGl0
ZXJhdG9yIGlzIHN0cmljdGx5IGdyZWF0ZXIuCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAvLyBJZiBnb2luZyBiYWNrd2FyZCwgc2VlayB0byBhIGtleSBsZXNzIHRoYW4gdGhlIGRiIGl0
ZXJhdG9yLgotICAgICAgICAgICAgQVNTRVJUKG1fZGlyZWN0aW9uID09IGtSZXZlcnNlKTsKLSAg
ICAgICAgICAgIG1fdHJlZUl0ZXJhdG9yLT5zZWVrKG1fZGJJdGVyYXRvci0+a2V5KCkpOwotICAg
ICAgICAgICAgaWYgKG1fdHJlZUl0ZXJhdG9yLT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAg
bV90cmVlSXRlcmF0b3ItPnByZXYoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBMZXZl
bERCVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OnRyZWVJdGVyYXRvcklzTG93ZXIo
KSBjb25zdAotewotICAgIHJldHVybiBtX2NvbXBhcmF0b3ItPmNvbXBhcmUobV90cmVlSXRlcmF0
b3ItPmtleSgpLCBtX2RiSXRlcmF0b3ItPmtleSgpKSA8IDA7Ci19Ci0KLWJvb2wgTGV2ZWxEQlRy
YW5zYWN0aW9uOjpUcmFuc2FjdGlvbkl0ZXJhdG9yOjp0cmVlSXRlcmF0b3JJc0hpZ2hlcigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fY29tcGFyYXRvci0+Y29tcGFyZShtX3RyZWVJdGVyYXRvci0+
a2V5KCksIG1fZGJJdGVyYXRvci0+a2V5KCkpID4gMDsKLX0KLQotdm9pZCBMZXZlbERCVHJhbnNh
Y3Rpb246OlRyYW5zYWN0aW9uSXRlcmF0b3I6OmhhbmRsZUNvbmZsaWN0c0FuZERlbGV0ZXMoKQot
ewotICAgIGJvb2wgbG9vcCA9IHRydWU7Ci0KLSAgICB3aGlsZSAobG9vcCkgewotICAgICAgICBs
b29wID0gZmFsc2U7Ci0KLSAgICAgICAgaWYgKG1fdHJlZUl0ZXJhdG9yLT5pc1ZhbGlkKCkgJiYg
bV9kYkl0ZXJhdG9yLT5pc1ZhbGlkKCkgJiYgIW1fY29tcGFyYXRvci0+Y29tcGFyZShtX3RyZWVJ
dGVyYXRvci0+a2V5KCksIG1fZGJJdGVyYXRvci0+a2V5KCkpKSB7Ci0gICAgICAgICAgICAvLyBG
b3IgZXF1YWwga2V5cywgdGhlIHRyZWUgaXRlcmF0b3IgdGFrZXMgcHJlY2VkZW5jZSwgc28gbW92
ZSB0aGUgZGF0YWJhc2UgaXRlcmF0b3IgYW5vdGhlciBzdGVwLgotICAgICAgICAgICAgaWYgKG1f
ZGlyZWN0aW9uID09IGtGb3J3YXJkKQotICAgICAgICAgICAgICAgIG1fZGJJdGVyYXRvci0+bmV4
dCgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fZGJJdGVyYXRvci0+cHJl
digpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU2tpcCBvdmVyIGRlbGV0ZSBtYXJrZXJzIGlu
IHRoZSB0cmVlIGl0ZXJhdG9yIHVudGlsIGl0IGNhdGNoZXMgdXAgd2l0aCB0aGUgZGIgaXRlcmF0
b3IuCi0gICAgICAgIGlmIChtX3RyZWVJdGVyYXRvci0+aXNWYWxpZCgpICYmIG1fdHJlZUl0ZXJh
dG9yLT5pc0RlbGV0ZWQoKSkgewotICAgICAgICAgICAgaWYgKG1fZGlyZWN0aW9uID09IGtGb3J3
YXJkICYmICghbV9kYkl0ZXJhdG9yLT5pc1ZhbGlkKCkgfHwgdHJlZUl0ZXJhdG9ySXNMb3dlcigp
KSkgewotICAgICAgICAgICAgICAgIG1fdHJlZUl0ZXJhdG9yLT5uZXh0KCk7Ci0gICAgICAgICAg
ICAgICAgbG9vcCA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fZGlyZWN0aW9uID09
IGtSZXZlcnNlICYmICghbV9kYkl0ZXJhdG9yLT5pc1ZhbGlkKCkgfHwgdHJlZUl0ZXJhdG9ySXNI
aWdoZXIoKSkpIHsKLSAgICAgICAgICAgICAgICBtX3RyZWVJdGVyYXRvci0+cHJldigpOwotICAg
ICAgICAgICAgICAgIGxvb3AgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIExldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25JdGVyYXRvcjo6c2V0
Q3VycmVudEl0ZXJhdG9yVG9TbWFsbGVzdEtleSgpCi17Ci0gICAgTGV2ZWxEQkl0ZXJhdG9yKiBz
bWFsbGVzdCA9IDA7Ci0KLSAgICBpZiAobV90cmVlSXRlcmF0b3ItPmlzVmFsaWQoKSkKLSAgICAg
ICAgc21hbGxlc3QgPSBtX3RyZWVJdGVyYXRvci5nZXQoKTsKLQotICAgIGlmIChtX2RiSXRlcmF0
b3ItPmlzVmFsaWQoKSkgewotICAgICAgICBpZiAoIXNtYWxsZXN0IHx8IG1fY29tcGFyYXRvci0+
Y29tcGFyZShtX2RiSXRlcmF0b3ItPmtleSgpLCBzbWFsbGVzdC0+a2V5KCkpIDwgMCkKLSAgICAg
ICAgICAgIHNtYWxsZXN0ID0gbV9kYkl0ZXJhdG9yLmdldCgpOwotICAgIH0KLQotICAgIG1fY3Vy
cmVudCA9IHNtYWxsZXN0OwotfQotCi12b2lkIExldmVsREJUcmFuc2FjdGlvbjo6VHJhbnNhY3Rp
b25JdGVyYXRvcjo6c2V0Q3VycmVudEl0ZXJhdG9yVG9MYXJnZXN0S2V5KCkKLXsKLSAgICBMZXZl
bERCSXRlcmF0b3IqIGxhcmdlc3QgPSAwOwotCi0gICAgaWYgKG1fdHJlZUl0ZXJhdG9yLT5pc1Zh
bGlkKCkpCi0gICAgICAgIGxhcmdlc3QgPSBtX3RyZWVJdGVyYXRvci5nZXQoKTsKLQotICAgIGlm
IChtX2RiSXRlcmF0b3ItPmlzVmFsaWQoKSkgewotICAgICAgICBpZiAoIWxhcmdlc3QgfHwgbV9j
b21wYXJhdG9yLT5jb21wYXJlKG1fZGJJdGVyYXRvci0+a2V5KCksIGxhcmdlc3QtPmtleSgpKSA+
IDApCi0gICAgICAgICAgICBsYXJnZXN0ID0gbV9kYkl0ZXJhdG9yLmdldCgpOwotICAgIH0KLQot
ICAgIG1fY3VycmVudCA9IGxhcmdlc3Q7Ci19Ci0KLXZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjpy
ZWdpc3Rlckl0ZXJhdG9yKFRyYW5zYWN0aW9uSXRlcmF0b3IqIGl0ZXJhdG9yKQotewotICAgIEFT
U0VSVCghbV9pdGVyYXRvcnMuY29udGFpbnMoaXRlcmF0b3IpKTsKLSAgICBtX2l0ZXJhdG9ycy5h
ZGQoaXRlcmF0b3IpOwotfQotCi12b2lkIExldmVsREJUcmFuc2FjdGlvbjo6dW5yZWdpc3Rlckl0
ZXJhdG9yKFRyYW5zYWN0aW9uSXRlcmF0b3IqIGl0ZXJhdG9yKQotewotICAgIEFTU0VSVChtX2l0
ZXJhdG9ycy5jb250YWlucyhpdGVyYXRvcikpOwotICAgIG1faXRlcmF0b3JzLnJlbW92ZShpdGVy
YXRvcik7Ci19Ci0KLXZvaWQgTGV2ZWxEQlRyYW5zYWN0aW9uOjpub3RpZnlJdGVyYXRvcnNPZlRy
ZWVDaGFuZ2UoKQotewotICAgIGZvciAoSGFzaFNldDxUcmFuc2FjdGlvbkl0ZXJhdG9yKj46Oml0
ZXJhdG9yIGkgPSBtX2l0ZXJhdG9ycy5iZWdpbigpOyBpICE9IG1faXRlcmF0b3JzLmVuZCgpOyAr
K2kpIHsKLSAgICAgICAgVHJhbnNhY3Rpb25JdGVyYXRvciogdHJhbnNhY3Rpb25JdGVyYXRvciA9
ICppOwotICAgICAgICB0cmFuc2FjdGlvbkl0ZXJhdG9yLT50cmVlQ2hhbmdlZCgpOwotICAgIH0K
LX0KLQotTGV2ZWxEQldyaXRlT25seVRyYW5zYWN0aW9uOjpMZXZlbERCV3JpdGVPbmx5VHJhbnNh
Y3Rpb24oTGV2ZWxEQkRhdGFiYXNlKiBkYikKLSAgICA6IG1fZGIoZGIpCi0gICAgLCBtX3dyaXRl
QmF0Y2goc3RkOjptYWtlX3VuaXF1ZTxMZXZlbERCV3JpdGVCYXRjaD4oKSkKLSAgICAsIG1fZmlu
aXNoZWQoZmFsc2UpCi17Ci19Ci0KLUxldmVsREJXcml0ZU9ubHlUcmFuc2FjdGlvbjo6fkxldmVs
REJXcml0ZU9ubHlUcmFuc2FjdGlvbigpCi17Ci0gICAgbV93cml0ZUJhdGNoLT5jbGVhcigpOwot
fQotCi12b2lkIExldmVsREJXcml0ZU9ubHlUcmFuc2FjdGlvbjo6cmVtb3ZlKGNvbnN0IExldmVs
REJTbGljZSYga2V5KQotewotICAgIEFTU0VSVCghbV9maW5pc2hlZCk7Ci0gICAgbV93cml0ZUJh
dGNoLT5yZW1vdmUoa2V5KTsKLX0KLQotYm9vbCBMZXZlbERCV3JpdGVPbmx5VHJhbnNhY3Rpb246
OmNvbW1pdCgpCi17Ci0gICAgQVNTRVJUKCFtX2ZpbmlzaGVkKTsKLQotICAgIGlmICghbV9kYi0+
d3JpdGUoKm1fd3JpdGVCYXRjaCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fZmlu
aXNoZWQgPSB0cnVlOwotICAgIG1fd3JpdGVCYXRjaC0+Y2xlYXIoKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKExFVkVMREIp
Ci0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24uaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNTU1OTdjZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9sZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIExldmVsREJUcmFuc2FjdGlvbl9oCi0jZGVmaW5l
IExldmVsREJUcmFuc2FjdGlvbl9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNp
ZiBVU0UoTEVWRUxEQikKLQotI2luY2x1ZGUgIkxldmVsREJDb21wYXJhdG9yLmgiCi0jaW5jbHVk
ZSAiTGV2ZWxEQkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiTGV2ZWxEQkl0ZXJhdG9yLmgiCi0jaW5j
bHVkZSAiTGV2ZWxEQlNsaWNlLmgiCi0jaW5jbHVkZSA8d3RmL0FWTFRyZWUuaD4KLSNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIExldmVsREJXcml0ZUJh
dGNoOwotCi11c2luZyBXVEY6OkFWTFRyZWU7Ci0KLWNsYXNzIExldmVsREJUcmFuc2FjdGlvbiA6
IHB1YmxpYyBSZWZDb3VudGVkPExldmVsREJUcmFuc2FjdGlvbj4gewotcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPExldmVsREJUcmFuc2FjdGlvbj4gY3JlYXRlKExldmVsREJEYXRhYmFz
ZSopOwotCi0gICAgfkxldmVsREJUcmFuc2FjdGlvbigpOwotICAgIHZvaWQgcHV0KGNvbnN0IExl
dmVsREJTbGljZSYga2V5LCBjb25zdCBWZWN0b3I8Y2hhcj4mIHZhbHVlKTsKLSAgICB2b2lkIHJl
bW92ZShjb25zdCBMZXZlbERCU2xpY2UmIGtleSk7Ci0gICAgLy8gRklYTUU6IFJlbmFtZSBzYWZl
R2V0IHRvIGdldC4KLSAgICBib29sIHNhZmVHZXQoY29uc3QgTGV2ZWxEQlNsaWNlJiBrZXksIFZl
Y3RvcjxjaGFyPiYgdmFsdWUsIGJvb2wmIGZvdW5kKTsKLSAgICBib29sIGNvbW1pdCgpOwotICAg
IHZvaWQgcm9sbGJhY2soKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxMZXZlbERCSXRlcmF0b3I+
IGNyZWF0ZUl0ZXJhdG9yKCk7Ci0KLXByaXZhdGU6Ci0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKExl
dmVsREJEYXRhYmFzZSopOwotCi0gICAgc3RydWN0IEFWTFRyZWVOb2RlIHsKLSAgICAgICAgVmVj
dG9yPGNoYXI+IGtleTsKLSAgICAgICAgVmVjdG9yPGNoYXI+IHZhbHVlOwotICAgICAgICBib29s
IGRlbGV0ZWQ7Ci0KLSAgICAgICAgQVZMVHJlZU5vZGUqIGxlc3M7Ci0gICAgICAgIEFWTFRyZWVO
b2RlKiBncmVhdGVyOwotICAgICAgICBpbnQgYmFsYW5jZUZhY3RvcjsKLSAgICB9OwotCi0gICAg
c3RydWN0IEFWTFRyZWVBYnN0cmFjdG9yIHsKLSAgICAgICAgdHlwZWRlZiBBVkxUcmVlTm9kZSog
aGFuZGxlOwotICAgICAgICB0eXBlZGVmIHNpemVfdCBzaXplOwotICAgICAgICB0eXBlZGVmIExl
dmVsREJTbGljZSBrZXk7Ci0KLSAgICAgICAgaGFuZGxlIGdldF9sZXNzKGhhbmRsZSBoKSB7IHJl
dHVybiBoLT5sZXNzOyB9Ci0gICAgICAgIHZvaWQgc2V0X2xlc3MoaGFuZGxlIGgsIGhhbmRsZSBs
ZXNzKSB7IGgtPmxlc3MgPSBsZXNzOyB9Ci0gICAgICAgIGhhbmRsZSBnZXRfZ3JlYXRlcihoYW5k
bGUgaCkgeyByZXR1cm4gaC0+Z3JlYXRlcjsgfQotICAgICAgICB2b2lkIHNldF9ncmVhdGVyKGhh
bmRsZSBoLCBoYW5kbGUgZ3JlYXRlcikgeyBoLT5ncmVhdGVyID0gZ3JlYXRlcjsgfQotCi0gICAg
ICAgIGludCBnZXRfYmFsYW5jZV9mYWN0b3IoaGFuZGxlIGgpIHsgcmV0dXJuIGgtPmJhbGFuY2VG
YWN0b3I7IH0KLSAgICAgICAgdm9pZCBzZXRfYmFsYW5jZV9mYWN0b3IoaGFuZGxlIGgsIGludCBi
ZikgeyBoLT5iYWxhbmNlRmFjdG9yID0gYmY7IH0KLQotICAgICAgICBpbnQgY29tcGFyZV9rZXlf
a2V5KGNvbnN0IGtleSYga2EsIGNvbnN0IGtleSYga2IpIHsgcmV0dXJuIG1fY29tcGFyYXRvci0+
Y29tcGFyZShrYSwga2IpOyB9Ci0gICAgICAgIGludCBjb21wYXJlX2tleV9ub2RlKGNvbnN0IGtl
eSYgaywgaGFuZGxlIGgpIHsgcmV0dXJuIGNvbXBhcmVfa2V5X2tleShrLCBoLT5rZXkpOyB9Ci0g
ICAgICAgIGludCBjb21wYXJlX25vZGVfbm9kZShoYW5kbGUgaGEsIGhhbmRsZSBoYikgeyByZXR1
cm4gY29tcGFyZV9rZXlfa2V5KGhhLT5rZXksIGhiLT5rZXkpOyB9Ci0KLSAgICAgICAgc3RhdGlj
IGhhbmRsZSBudWxsKCkgeyByZXR1cm4gMDsgfQotCi0gICAgICAgIGNvbnN0IExldmVsREJDb21w
YXJhdG9yKiBtX2NvbXBhcmF0b3I7Ci0gICAgfTsKLQotICAgIHR5cGVkZWYgQVZMVHJlZTxBVkxU
cmVlQWJzdHJhY3Rvcj4gVHJlZVR5cGU7Ci0KLSAgICBjbGFzcyBUcmVlSXRlcmF0b3IgOiBwdWJs
aWMgTGV2ZWxEQkl0ZXJhdG9yIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IFRyZWVJ
dGVyYXRvcihMZXZlbERCVHJhbnNhY3Rpb24qKTsKLSAgICAgICAgflRyZWVJdGVyYXRvcigpOwot
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBzZWVrVG9MYXN0KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzZWVrKGNvbnN0IExldmVs
REJTbGljZSYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgbmV4dCgpOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgcHJldigpOwotICAgICAgICB2aXJ0dWFsIExldmVsREJTbGljZSBrZXkoKSBjb25zdDsK
LSAgICAgICAgdmlydHVhbCBMZXZlbERCU2xpY2UgdmFsdWUoKSBjb25zdDsKLSAgICAgICAgYm9v
bCBpc0RlbGV0ZWQoKSBjb25zdDsKLSAgICAgICAgdm9pZCByZXNldCgpOwotCi0gICAgcHJpdmF0
ZToKLSAgICAgICAgbXV0YWJsZSBUcmVlVHlwZTo6SXRlcmF0b3IgbV9pdGVyYXRvcjsgLy8gRGVy
ZWZlcmVuY2luZyB0aGlzIGlzIG5vbi1jb25zdC4KLSAgICAgICAgVHJlZVR5cGUqIG1fdHJlZTsK
LSAgICAgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBtX3RyYW5zYWN0aW9uOwotICAgICAgICBWZWN0
b3I8Y2hhcj4gbV9rZXk7Ci0gICAgfTsKLQotICAgIGNsYXNzIFRyYW5zYWN0aW9uSXRlcmF0b3Ig
OiBwdWJsaWMgTGV2ZWxEQkl0ZXJhdG9yIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0
IFRyYW5zYWN0aW9uSXRlcmF0b3IoUGFzc1JlZlB0cjxMZXZlbERCVHJhbnNhY3Rpb24+KTsKLSAg
ICAgICAgflRyYW5zYWN0aW9uSXRlcmF0b3IoKTsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNW
YWxpZCgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2Vla1RvTGFzdCgpOwotICAgICAg
ICB2aXJ0dWFsIHZvaWQgc2Vlayhjb25zdCBMZXZlbERCU2xpY2UmIHRhcmdldCk7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBuZXh0KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwcmV2KCk7Ci0gICAg
ICAgIHZpcnR1YWwgTGV2ZWxEQlNsaWNlIGtleSgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIExl
dmVsREJTbGljZSB2YWx1ZSgpIGNvbnN0OwotICAgICAgICB2b2lkIHRyZWVDaGFuZ2VkKCk7Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGhhbmRsZUNvbmZsaWN0c0FuZERlbGV0ZXMoKTsK
LSAgICAgICAgdm9pZCBzZXRDdXJyZW50SXRlcmF0b3JUb1NtYWxsZXN0S2V5KCk7Ci0gICAgICAg
IHZvaWQgc2V0Q3VycmVudEl0ZXJhdG9yVG9MYXJnZXN0S2V5KCk7Ci0gICAgICAgIHZvaWQgcmVm
cmVzaFRyZWVJdGVyYXRvcigpIGNvbnN0OwotICAgICAgICBib29sIHRyZWVJdGVyYXRvcklzTG93
ZXIoKSBjb25zdDsKLSAgICAgICAgYm9vbCB0cmVlSXRlcmF0b3JJc0hpZ2hlcigpIGNvbnN0Owot
Ci0gICAgICAgIFJlZlB0cjxMZXZlbERCVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247Ci0gICAg
ICAgIGNvbnN0IExldmVsREJDb21wYXJhdG9yKiBtX2NvbXBhcmF0b3I7Ci0gICAgICAgIG11dGFi
bGUgc3RkOjp1bmlxdWVfcHRyPFRyZWVJdGVyYXRvcj4gbV90cmVlSXRlcmF0b3I7Ci0gICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxMZXZlbERCSXRlcmF0b3I+IG1fZGJJdGVyYXRvcjsKLSAgICAgICAg
TGV2ZWxEQkl0ZXJhdG9yKiBtX2N1cnJlbnQ7Ci0KLSAgICAgICAgZW51bSBEaXJlY3Rpb24gewot
ICAgICAgICAgICAga0ZvcndhcmQsCi0gICAgICAgICAgICBrUmV2ZXJzZQotICAgICAgICB9Owot
ICAgICAgICBEaXJlY3Rpb24gbV9kaXJlY3Rpb247Ci0gICAgICAgIG11dGFibGUgYm9vbCBtX3Ry
ZWVDaGFuZ2VkOwotICAgIH07Ci0KLSAgICB2b2lkIHNldChjb25zdCBMZXZlbERCU2xpY2UmIGtl
eSwgY29uc3QgVmVjdG9yPGNoYXI+JiB2YWx1ZSwgYm9vbCBkZWxldGVkKTsKLSAgICB2b2lkIGNs
ZWFyVHJlZSgpOwotICAgIHZvaWQgcmVnaXN0ZXJJdGVyYXRvcihUcmFuc2FjdGlvbkl0ZXJhdG9y
Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVySXRlcmF0b3IoVHJhbnNhY3Rpb25JdGVyYXRvciopOwot
ICAgIHZvaWQgbm90aWZ5SXRlcmF0b3JzT2ZUcmVlQ2hhbmdlKCk7Ci0KLSAgICBMZXZlbERCRGF0
YWJhc2UqIG1fZGI7Ci0gICAgY29uc3QgTGV2ZWxEQlNuYXBzaG90IG1fc25hcHNob3Q7Ci0gICAg
Y29uc3QgTGV2ZWxEQkNvbXBhcmF0b3IqIG1fY29tcGFyYXRvcjsKLSAgICBUcmVlVHlwZSBtX3Ry
ZWU7Ci0gICAgYm9vbCBtX2ZpbmlzaGVkOwotICAgIEhhc2hTZXQ8VHJhbnNhY3Rpb25JdGVyYXRv
cio+IG1faXRlcmF0b3JzOwotfTsKLQotY2xhc3MgTGV2ZWxEQldyaXRlT25seVRyYW5zYWN0aW9u
IHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBMZXZlbERCV3JpdGVPbmx5VHJhbnNhY3Rpb24oTGV2
ZWxEQkRhdGFiYXNlKik7Ci0gICAgfkxldmVsREJXcml0ZU9ubHlUcmFuc2FjdGlvbigpOwotICAg
IHZvaWQgcmVtb3ZlKGNvbnN0IExldmVsREJTbGljZSYga2V5KTsKLSAgICBib29sIGNvbW1pdCgp
OwotCi1wcml2YXRlOgotICAgIExldmVsREJEYXRhYmFzZSogbV9kYjsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8TGV2ZWxEQldyaXRlQmF0Y2g+IG1fd3JpdGVCYXRjaDsKLSAgICBib29sIG1fZmluaXNo
ZWQ7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBVU0UoTEVWRUxEQikKLSNlbmRpZiAvLyBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIExldmVsREJUcmFuc2FjdGlvbl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNo
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQldyaXRlQmF0Y2gu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Yjk5MjU1Li4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQldyaXRlQmF0Y2guY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJMZXZlbERCV3JpdGVCYXRjaC5oIgotCi0jaWYgVVNFKExFVkVMREIpCi0KLSNp
bmNsdWRlICJMZXZlbERCU2xpY2UuaCIKLSNpbmNsdWRlIDxsZXZlbGRiL3NsaWNlLmg+Ci0jaW5j
bHVkZSA8bGV2ZWxkYi93cml0ZV9iYXRjaC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUxl
dmVsREJXcml0ZUJhdGNoOjpMZXZlbERCV3JpdGVCYXRjaCgpCi0gICAgOiBtX3dyaXRlQmF0Y2go
c3RkOjptYWtlX3VuaXF1ZTxsZXZlbGRiOjpXcml0ZUJhdGNoPigpKQotewotfQotCi1MZXZlbERC
V3JpdGVCYXRjaDo6fkxldmVsREJXcml0ZUJhdGNoKCkKLXsKLX0KLQotc3RhdGljIGxldmVsZGI6
OlNsaWNlIG1ha2VTbGljZShjb25zdCBMZXZlbERCU2xpY2UmIHMpCi17Ci0gICAgcmV0dXJuIGxl
dmVsZGI6OlNsaWNlKHMuYmVnaW4oKSwgcy5lbmQoKSAtIHMuYmVnaW4oKSk7Ci19Ci0KLXZvaWQg
TGV2ZWxEQldyaXRlQmF0Y2g6OnB1dChjb25zdCBMZXZlbERCU2xpY2UmIGtleSwgY29uc3QgTGV2
ZWxEQlNsaWNlJiB2YWx1ZSkKLXsKLSAgICBtX3dyaXRlQmF0Y2gtPlB1dChtYWtlU2xpY2Uoa2V5
KSwgbWFrZVNsaWNlKHZhbHVlKSk7Ci19Ci0KLXZvaWQgTGV2ZWxEQldyaXRlQmF0Y2g6OnJlbW92
ZShjb25zdCBMZXZlbERCU2xpY2UmIGtleSkKLXsKLSAgICBtX3dyaXRlQmF0Y2gtPkRlbGV0ZSht
YWtlU2xpY2Uoa2V5KSk7Ci19Ci0KLXZvaWQgTGV2ZWxEQldyaXRlQmF0Y2g6OmNsZWFyKCkKLXsK
LSAgICBtX3dyaXRlQmF0Y2gtPkNsZWFyKCk7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNoLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNoLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlN2JlZTguLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCV3JpdGVCYXRjaC5oCisrKyAvZGV2L251bGwK
QEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTGV2ZWxEQldyaXRlQmF0Y2hfaAotI2Rl
ZmluZSBMZXZlbERCV3JpdGVCYXRjaF9oCi0KLSNpZiBVU0UoTEVWRUxEQikKLQotI2luY2x1ZGUg
PG1lbW9yeT4KLQotbmFtZXNwYWNlIGxldmVsZGIgewotY2xhc3MgV3JpdGVCYXRjaDsKLX0KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBMZXZlbERCU2xpY2U7Ci0KLS8vIFdyYXBwZXIg
YXJvdW5kIGxldmVsZGI6OldyaXRlQmF0Y2guCi0vLyBUaGlzIGNsYXNzIGhvbGRzIGEgY29sbGVj
dGlvbiBvZiB1cGRhdGVzIHRvIGFwcGx5IGF0b21pY2FsbHkgdG8gYSBkYXRhYmFzZS4KLWNsYXNz
IExldmVsREJXcml0ZUJhdGNoIHsKLXB1YmxpYzoKLSAgICBMZXZlbERCV3JpdGVCYXRjaCgpOwot
ICAgIH5MZXZlbERCV3JpdGVCYXRjaCgpOwotCi0gICAgdm9pZCBwdXQoY29uc3QgTGV2ZWxEQlNs
aWNlJiBrZXksIGNvbnN0IExldmVsREJTbGljZSYgdmFsdWUpOwotICAgIHZvaWQgcmVtb3ZlKGNv
bnN0IExldmVsREJTbGljZSYga2V5KTsgLy8gQWRkIHJlbW92ZSBvcGVyYXRpb24gdG8gdGhlIGJh
dGNoLgotICAgIHZvaWQgY2xlYXIoKTsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgTGV2
ZWxEQkRhdGFiYXNlOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPGxldmVsZGI6OldyaXRlQmF0Y2g+
IG1fd3JpdGVCYXRjaDsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShMRVZFTERCKQotCi0jZW5k
aWYgLy8gTGV2ZWxEQldyaXRlQmF0Y2hfaApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDliOTFiNzkuLmY4Mzg4MDUgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxNC0w
OC0yMiAgUmVuYXRvIE5hZ3kgIDxuYWd5LnJlbmF0b0BzdHVkLnUtc3plZ2VkLmh1PgorCisgICAg
ICAgIFJlbW92ZSBMZXZlbERCLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTM2MTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jb25maWcvd2F0Y2hsaXN0Ogor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weToKKwogMjAxNC0wOC0y
MiAgQ2FybG9zIEFsYmVydG8gTG9wZXogUGVyZXogIDxjbG9wZXpAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBbR1RLXSBpbnN0YWxsLWRlcGVuZGVuY2llcyBkb24ndCBpbnN0YWxscyBYdmZiIHRoYXQg
aXMgbmVlZGVkIGZvciB0aGUgdGVzdHMuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9jb25maWcvd2F0Y2hsaXN0IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vY29uZmlnL3dhdGNobGlzdAppbmRleCA1NDkzYzU5Li5hNjVlNTdhIDEwMDY0NAotLS0gYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jb25maWcvd2F0Y2hsaXN0CisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy93YXRjaGxpc3QKQEAgLTI2Miw3ICsyNjIs
NiBAQAogICAgICAgICAgICAgImZpbGVuYW1lIjogciJTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYiIKICAgICAgICAgICAgICAgICAgICAgICAgIHIifFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzLy4qSURCLipcLihofGNwcCkiCiAgICAgICAgICAgICAgICAgICAgICAgICByInxTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy8uKlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS4qXC4oaHxjcHApIgotICAg
ICAgICAgICAgICAgICAgICAgICAgciJ8U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYiIK
ICAgICAgICAgICAgICAgICAgICAgICAgIHIifExheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
IgogICAgICAgICAgICAgICAgICAgICAgICAgciJ8TGF5b3V0VGVzdHMvcGxhdGZvcm0vLiovc3Rv
cmFnZS9pbmRleGVkZGIiLAogICAgICAgICB9LApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9j
aGVja2VyLnB5CmluZGV4IGZlY2ZlMDQuLjI1M2ViMjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL2NoZWNrZXIucHkKQEAgLTMzNiw3ICszMzYsNiBAQCBfU0tJUFBFRF9GSUxFU19XSVRI
X1dBUk5JTkcgPSBbCiAjIHdpdGggRmlsZVR5cGUuTk9ORSBhcmUgYXV0b21hdGljYWxseSBza2lw
cGVkIHdpdGhvdXQgd2FybmluZy4KIF9TS0lQUEVEX0ZJTEVTX1dJVEhPVVRfV0FSTklORyA9IFsK
ICAgICAiTGF5b3V0VGVzdHMiICsgb3MucGF0aC5zZXAsCi0gICAgIlNvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIiICsgb3MucGF0aC5zZXAsCiAgICAgXQogCiAjIEV4dGVuc2lvbnMgb2YgZmlsZXMg
d2hpY2ggYXJlIGFsbG93ZWQgdG8gY29udGFpbiBjYXJyaWFnZSByZXR1cm5zLgotLSAKMS45LjEK
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>