<?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>236337</bug_id>
          
          <creation_ts>2022-02-08 15:43:32 -0800</creation_ts>
          <short_desc>Include sub grid items in the track sizing algorithm of the outer grid</short_desc>
          <delta_ts>2022-02-17 14:55:23 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>236336</dependson>
          <blocked>202115</blocked>
    
    <blocked>236338</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Matt Woodrow">mattwoodrow</reporter>
          <assigned_to name="Matt Woodrow">mattwoodrow</assigned_to>
          <cc>changseok</cc>
    
    <cc>clopez</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jfernandez</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>pdr</cc>
    
    <cc>rego</cc>
    
    <cc>svillar</cc>
    
    <cc>tsavell</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1838926</commentid>
    <comment_count>0</comment_count>
    <who name="Matt Woodrow">mattwoodrow</who>
    <bug_when>2022-02-08 15:43:32 -0800</bug_when>
    <thetext>When computing the track sizing of a grid with sub grid items, we should recursively introspect subgrid items and include their children in the sizing computations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1838944</commentid>
    <comment_count>1</comment_count>
      <attachid>451321</attachid>
    <who name="Matt Woodrow">mattwoodrow</who>
    <bug_when>2022-02-08 16:17:43 -0800</bug_when>
    <thetext>Created attachment 451321
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841503</commentid>
    <comment_count>2</comment_count>
      <attachid>451970</attachid>
    <who name="Matt Woodrow">mattwoodrow</who>
    <bug_when>2022-02-14 17:38:12 -0800</bug_when>
    <thetext>Created attachment 451970
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841504</commentid>
    <comment_count>3</comment_count>
      <attachid>451971</attachid>
    <who name="Matt Woodrow">mattwoodrow</who>
    <bug_when>2022-02-14 17:39:05 -0800</bug_when>
    <thetext>Created attachment 451971
Patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841509</commentid>
    <comment_count>4</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2022-02-14 17:55:02 -0800</bug_when>
    <thetext>This patch modifies the imported WPT tests. Please ensure that any changes on the tests (not coming from a WPT import) are exported to WPT. Please see https://trac.webkit.org/wiki/WPTExportProcess</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841810</commentid>
    <comment_count>5</comment_count>
      <attachid>452056</attachid>
    <who name="Matt Woodrow">mattwoodrow</who>
    <bug_when>2022-02-15 10:54:45 -0800</bug_when>
    <thetext>Created attachment 452056
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841884</commentid>
    <comment_count>6</comment_count>
      <attachid>452075</attachid>
    <who name="Matt Woodrow">mattwoodrow</who>
    <bug_when>2022-02-15 12:53:58 -0800</bug_when>
    <thetext>Created attachment 452075
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841986</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-02-15 15:44:20 -0800</bug_when>
    <thetext>&lt;rdar://problem/88991771&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843005</commentid>
    <comment_count>8</comment_count>
      <attachid>452398</attachid>
    <who name="Matt Woodrow">mattwoodrow</who>
    <bug_when>2022-02-17 11:48:13 -0800</bug_when>
    <thetext>Created attachment 452398
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843130</commentid>
    <comment_count>9</comment_count>
      <attachid>452398</attachid>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2022-02-17 14:54:03 -0800</bug_when>
    <thetext>Comment on attachment 452398
Patch

Clearing flags on attachment: 452398

Committed r290077 (247434@trunk): &lt;https://commits.webkit.org/247434@trunk&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451321</attachid>
            <date>2022-02-08 16:17:43 -0800</date>
            <delta_ts>2022-02-14 17:38:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236337-20220209131741.patch</filename>
            <type>text/plain</type>
            <size>25933</size>
            <attacher name="Matt Woodrow">mattwoodrow</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5MDY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGFhNzI5MTI3ZjA5ZTgx
MmE1NzM0OGQwOTcxNTVhZGU1Nzc4NjM5Yy4uMDQ2ZGZjN2RhODNhMTJhZDllZWFlNzllNGQ4MzJi
NjE5Mjc2ZmQ2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDIyLTAyLTA4ICBNYXR0
IFdvb2Ryb3cgIDxtYXR0d29vZHJvd0BhcHBsZS5jb20+CisKKyAgICAgICAgSW5jbHVkZSBzdWJn
cmlkIGl0ZW1zIGluIGludHJpbnNpYyBzaXplIGNhbGN1bGF0aW9uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzYzMzcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICByZXNvbHZlSW50cmluc2ljVHJhY2tTaXpl
cyBhbmQgZmluZFVzZWRGbGV4RnJhY3Rpb24gbm93IHJlY3Vyc2UgaW50byBzdWJncmlkZGVkIGl0
ZW1zCisgICAgICAgIHRvIGl0ZXJhdGUgdGhlIGNoaWxkcmVuIHNhIGlmIHRoZXkgd2VyZSBkaXJl
Y3RseSBwYXJ0IG9mIHRoZSBvdXRlciBncmlkLgorICAgICAgICBOZXcgY29uc3RydWN0b3IgYWRk
ZWQgdG8gR3JpZEl0ZXJhdG9yIGZvciBjb25zdHJ1Y3RpbmcgYSBuZXcgaXRlcmF0b3IgZm9yIHRo
ZSBzdWJncmlkIGl0ZW1zLAorICAgICAgICB3aGljaCBhZGp1c3RzIHRoZSByb3cvY29sdW1uIGlu
ZGljZXMgaW50byB0aGUgbG9jYWwgY29vcmRpbmF0ZSBzcGFjZSBvZiB0aGUgc3ViZ3JpZC4KKyAg
ICAgICAgQWRkcyBhIG5ldyBtZXRob2QgdG8gcmVuZGVyR3JpZCAncGxhY2VJdGVtcycgc28gdGhh
dCB3ZSBjYW4gZW5zdXJlIHN1YmdyaWQgaXRlbXMgaGF2ZSBmaW5pc2hlZCBwbGFjZW1lbnQKKyAg
ICAgICAgd2hlbiBkb2luZyBzaXppbmcgZm9yIHRoZSBvdXRlciBncmlkLgorCisgICAgICAgIEV4
aXN0aW5nIHRlc3QgZXhwZWN0YXRpb25zIHVwZGF0ZWQuCisKKyAgICAgICAgKiByZW5kZXJpbmcv
R3JpZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmlkSXRlcmF0b3I6OkdyaWRJdGVyYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmlkSXRlcmF0b3I6Om5leHRHcmlkSXRlbSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmlkSXRlcmF0b3I6OmNyZWF0ZUZvclN1YmdyaWQpOgorICAgICAgICAqIHJl
bmRlcmluZy9HcmlkLmg6CisgICAgICAgIChXZWJDb3JlOjpHcmlkSXRlcmF0b3I6OmRpcmVjdGlv
biBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmVzdGltYXRl
ZEdyaWRBcmVhQnJlYWR0aEZvckNoaWxkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRU
cmFja1NpemluZ0FsZ29yaXRobTo6Z3JpZEFyZWFCcmVhZHRoRm9yQ2hpbGQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjppc0ludHJpbnNpY1NpemVk
R3JpZEFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3Jp
dGhtU3RyYXRlZ3k6Om1pblNpemVGb3JDaGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmlkVHJhY2tTaXppbmdBbGdvcml0aG06OnVwZGF0ZUJhc2VsaW5lQWxpZ25tZW50Q29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmJhc2VsaW5lT2Zm
c2V0Rm9yQ2hpbGQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZWZpbml0ZVNpemVTdHJh
dGVneTo6YWNjdW11bGF0ZUZsZXhGcmFjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bmRlZmluaXRlU2l6ZVN0cmF0ZWd5OjpmaW5kVXNlZEZsZXhGcmFjdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmFjY3VtdWxhdGVJbnRyaW5z
aWNTaXplc0ZvclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRUcmFja1NpemluZ0FsZ29y
aXRobTo6cmVzb2x2ZUludHJpbnNpY1RyYWNrU2l6ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9H
cmlkVHJhY2tTaXppbmdBbGdvcml0aG0uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3Jp
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFjZUl0ZW1zKToKKyAgICAg
ICAgKFdlYkNvcmU6Omluc2VydEludG9HcmlkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdy
aWQ6OnBsYWNlSXRlbXNPbkdyaWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3Jp
ZDo6cGxhY2VTcGVjaWZpZWRNYWpvckF4aXNJdGVtc09uR3JpZCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFjZUF1dG9NYWpvckF4aXNJdGVtT25HcmlkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmxheW91dEdyaWRJdGVtcyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJHcmlkOjppc1N1YmdyaWRJblBhcmVudERpcmVjdGlvbiBjb25zdCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckdyaWQuaDoKKwogMjAyMi0wMi0wOCAgTWF0dCBX
b29kcm93ICA8bWF0dHdvb2Ryb3dAYXBwbGUuY29tPgogCiAgICAgICAgIENvcHkgdHJhY2sgc2l6
ZXMgZnJvbSBwYXJlbnQgZ3JpZCBpbnRvIHN1YmdyaWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9HcmlkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkLmNw
cAppbmRleCAzN2NhOTNmMDNhNzIxYzIwYzM4MGZiYzdjMTFiODQxNjM5MDdhYjljLi4yNmQxZDhh
YmYzZGY0N2IxY2E4YmZmODNkODc1M2FjMzY2NTc4MzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvR3JpZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dy
aWQuY3BwCkBAIC0xOTcsNiArMTk3LDIyIEBAIEdyaWRJdGVyYXRvcjo6R3JpZEl0ZXJhdG9yKGNv
bnN0IEdyaWQmIGdyaWQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sCiAgICAg
LCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCiAgICAgLCBtX3Jvd0luZGV4KChkaXJlY3Rpb24gPT0g
Rm9yQ29sdW1ucykgPyB2YXJ5aW5nVHJhY2tJbmRleCA6IGZpeGVkVHJhY2tJbmRleCkKICAgICAs
IG1fY29sdW1uSW5kZXgoKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IGZpeGVkVHJhY2tJbmRl
eCA6IHZhcnlpbmdUcmFja0luZGV4KQorICAgICwgbV92YXJ5aW5nTWF4KChkaXJlY3Rpb24gPT0g
Rm9yQ29sdW1ucykgPyAodW5zaWduZWQpZ3JpZC5tX2dyaWQuc2l6ZSgpIDogKHVuc2lnbmVkKWdy
aWQubV9ncmlkWzBdLnNpemUoKSkKKyAgICAsIG1fY2hpbGRJbmRleCgwKQorCit7CisgICAgQVNT
RVJUKCFtX2dyaWQuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoIW1fZ3JpZFswXS5pc0VtcHR5KCkp
OworICAgIEFTU0VSVChtX3Jvd0luZGV4IDwgbV9ncmlkLnNpemUoKSk7CisgICAgQVNTRVJUKG1f
Y29sdW1uSW5kZXggPCBtX2dyaWRbMF0uc2l6ZSgpKTsKK30KKworR3JpZEl0ZXJhdG9yOjpHcmlk
SXRlcmF0b3IoY29uc3QgR3JpZCYgZ3JpZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVj
dGlvbiwgdW5zaWduZWQgcm93SW5kZXgsIHVuc2lnbmVkIGNvbHVtbkluZGV4LCB1bnNpZ25lZCB2
YXJ5aW5nTWF4KQorICAgIDogbV9ncmlkKGdyaWQubV9ncmlkKQorICAgICwgbV9kaXJlY3Rpb24o
ZGlyZWN0aW9uKQorICAgICwgbV9yb3dJbmRleChyb3dJbmRleCkKKyAgICAsIG1fY29sdW1uSW5k
ZXgoY29sdW1uSW5kZXgpCisgICAgLCBtX3ZhcnlpbmdNYXgodmFyeWluZ01heCkKICAgICAsIG1f
Y2hpbGRJbmRleCgwKQogewogICAgIEFTU0VSVCghbV9ncmlkLmlzRW1wdHkoKSk7CkBAIC0yMTEs
MTIgKzIyNywxMSBAQCBSZW5kZXJCb3gqIEdyaWRJdGVyYXRvcjo6bmV4dEdyaWRJdGVtKCkKICAg
ICBBU1NFUlQoIW1fZ3JpZFswXS5pc0VtcHR5KCkpOwogCiAgICAgdW5zaWduZWQmIHZhcnlpbmdU
cmFja0luZGV4ID0gKG1fZGlyZWN0aW9uID09IEZvckNvbHVtbnMpID8gbV9yb3dJbmRleCA6IG1f
Y29sdW1uSW5kZXg7Ci0gICAgY29uc3QgdW5zaWduZWQgZW5kT2ZWYXJ5aW5nVHJhY2tJbmRleCA9
IChtX2RpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IG1fZ3JpZC5zaXplKCkgOiBtX2dyaWRbMF0u
c2l6ZSgpOwotICAgIGZvciAoOyB2YXJ5aW5nVHJhY2tJbmRleCA8IGVuZE9mVmFyeWluZ1RyYWNr
SW5kZXg7ICsrdmFyeWluZ1RyYWNrSW5kZXgpIHsKKworICAgIGZvciAoOyB2YXJ5aW5nVHJhY2tJ
bmRleCA8IG1fdmFyeWluZ01heDsgKyt2YXJ5aW5nVHJhY2tJbmRleCkgewogICAgICAgICBjb25z
dCBhdXRvJiBjaGlsZHJlbiA9IG1fZ3JpZFttX3Jvd0luZGV4XVttX2NvbHVtbkluZGV4XTsKICAg
ICAgICAgaWYgKG1fY2hpbGRJbmRleCA8IGNoaWxkcmVuLnNpemUoKSkKICAgICAgICAgICAgIHJl
dHVybiBjaGlsZHJlblttX2NoaWxkSW5kZXgrK10uZ2V0KCk7Ci0KICAgICAgICAgbV9jaGlsZElu
ZGV4ID0gMDsKICAgICB9CiAgICAgcmV0dXJuIDA7CkBAIC0yNjksNCArMjg0LDU1IEBAIHN0ZDo6
dW5pcXVlX3B0cjxHcmlkQXJlYT4gR3JpZEl0ZXJhdG9yOjpuZXh0RW1wdHlHcmlkQXJlYSh1bnNp
Z25lZCBmaXhlZFRyYWNrU3BhCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK0dyaWRJdGVyYXRv
ciBHcmlkSXRlcmF0b3I6OmNyZWF0ZUZvclN1YmdyaWQoY29uc3QgUmVuZGVyR3JpZCYgc3ViZ3Jp
ZCwgY29uc3QgR3JpZEl0ZXJhdG9yJiBvdXRlcikKK3sKKyAgICBHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24gaW5uZXJEaXJlY3Rpb24gPSBvdXRlci5kaXJlY3Rpb24oKTsKKyAgICBBU1NFUlQoc3Vi
Z3JpZC5pc1N1YmdyaWRJblBhcmVudERpcmVjdGlvbihpbm5lckRpcmVjdGlvbikpOworICAgIEdy
aWRTcGFuIHNwYW5Sb3dzID0gZG93bmNhc3Q8UmVuZGVyR3JpZD4oc3ViZ3JpZC5wYXJlbnQoKSkt
PmdyaWRTcGFuRm9yQ2hpbGQoc3ViZ3JpZCwgRm9yUm93cyk7CisgICAgR3JpZFNwYW4gc3BhbkNv
bHVtbnMgPSBkb3duY2FzdDxSZW5kZXJHcmlkPihzdWJncmlkLnBhcmVudCgpKS0+Z3JpZFNwYW5G
b3JDaGlsZChzdWJncmlkLCBGb3JDb2x1bW5zKTsKKworICAgIC8vIFRyYW5zbGF0ZSB0aGUgY3Vy
cmVudCByb3cvY29sdW1uIGluZGljZXMgaW50byB0aGUgY29vcmRpbmF0ZQorICAgIC8vIHNwYWNl
IG9mIHRoZSBzdWJncmlkLgorICAgIHVuc2lnbmVkIHJvd0luZGV4ID0gb3V0ZXIubV9yb3dJbmRl
eCAtIHNwYW5Sb3dzLnN0YXJ0TGluZSgpOworICAgIHVuc2lnbmVkIGNvbEluZGV4ID0gb3V0ZXIu
bV9jb2x1bW5JbmRleC0gc3BhbkNvbHVtbnMuc3RhcnRMaW5lKCk7CisKKyAgICAvLyBJZiB0aGUg
Y2hpbGQgZ3JpZCBpcyB0cmFuc3Bvc2VkLCB0aGVuIHN3YXAgcm93L2NvbHVtbiBkZWZpbml0aW9u
cy4KKyAgICBpZiAoc3ViZ3JpZC5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICE9IHN1YmdyaWQu
cGFyZW50KCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKKyAgICAgICAgdW5zaWduZWQg
dGVtcCA9IHJvd0luZGV4OworICAgICAgICByb3dJbmRleCA9IGNvbEluZGV4OworICAgICAgICBj
b2xJbmRleCA9IHRlbXA7CisgICAgICAgIGlubmVyRGlyZWN0aW9uID0gKGlubmVyRGlyZWN0aW9u
ID09IEZvckNvbHVtbnMpID8gRm9yUm93cyA6IEZvckNvbHVtbnM7CisgICAgfQorICAgIEFTU0VS
VChzdWJncmlkLmlzU3ViZ3JpZChpbm5lckRpcmVjdGlvbikpOworCisgICAgdW5zaWduZWQgcm93
TWF4ID0gc3ViZ3JpZC5jdXJyZW50R3JpZCgpLm51bVRyYWNrcyhGb3JSb3dzKTsKKyAgICB1bnNp
Z25lZCBjb2xNYXggPSBzdWJncmlkLmN1cnJlbnRHcmlkKCkubnVtVHJhY2tzKEZvckNvbHVtbnMp
OworCisgICAgaWYgKHN1YmdyaWQuc3R5bGUoKS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkg
IT0gc3ViZ3JpZC5wYXJlbnQoKS0+c3R5bGUoKS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkp
CisgICAgICAgIHJvd0luZGV4ID0gcm93TWF4IC0gcm93SW5kZXggLSAxOworICAgIGlmIChzdWJn
cmlkLnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSAhPSBzdWJncmlkLnBhcmVu
dCgpLT5zdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpCisgICAgICAgIGNvbElu
ZGV4ID0gY29sTWF4IC0gY29sSW5kZXggLSAxOworCisgICAgLy8gSWYgd2UncmUgYWxzbyBhIHN1
YmdyaWQgaW4gdGhlIG90aGVyIGF4aXMsIHRoZW4gd2UgY2FuIGp1c3QgaXRlcmF0ZSB0aGUgc2lu
Z2xlCisgICAgLy8gdHJhY2sgaW4gdGhlIHN1YmdyaWQgd2hpY2ggY29ycmVzcG9uZHMgdG8gYSB0
cmFjayBpbiB0aGUgb3V0ZXIgZ3JpZC4gT3RoZXJ3aXNlIHdlIG5lZWQKKyAgICAvLyB0byBpdGVy
YXRlIGFsbCB0cmFja3MgaW4gdGhhdCBheGlzIHdpdGhpbiB0aGUgc3ViZ3JpZC4KKyAgICB1bnNp
Z25lZCB2YXJ5aW5nTWF4OworICAgIGlmIChzdWJncmlkLmlzU3ViZ3JpZCgoaW5uZXJEaXJlY3Rp
b24gPT0gRm9yQ29sdW1ucykgPyBGb3JSb3dzIDogRm9yQ29sdW1ucykpIHsKKyAgICAgICAgaWYg
KGlubmVyRGlyZWN0aW9uID09IEZvckNvbHVtbnMpCisgICAgICAgICAgICB2YXJ5aW5nTWF4ID0g
c3RkOjptaW4ocm93TWF4LCByb3dJbmRleCArIDEpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICB2YXJ5aW5nTWF4ID0gc3RkOjptaW4oY29sTWF4LCBjb2xJbmRleCArIDEpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmIChpbm5lckRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSB7CisgICAgICAg
ICAgICByb3dJbmRleCA9IDA7CisgICAgICAgICAgICB2YXJ5aW5nTWF4ID0gcm93TWF4OworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29sSW5kZXggPSAwOworICAgICAgICAgICAgdmFy
eWluZ01heCA9IGNvbE1heDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBHcmlkSXRl
cmF0b3Ioc3ViZ3JpZC5jdXJyZW50R3JpZCgpLCBpbm5lckRpcmVjdGlvbiwgcm93SW5kZXgsIGNv
bEluZGV4LCB2YXJ5aW5nTWF4KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWQuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9HcmlkLmgKaW5kZXggMTFkOWU2OGZiODE5OWZiY2E0ZDhiYTViMWJjYmY5YzgzMDk5
YzUzMi4uNmQwNTZkYzcxZjdiMDVkYzM0YTBiYTU2MTM5MzZmNDE5NjE1ODRjOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvR3JpZC5oCkBAIC0xMTYsMTUgKzExNiwyNSBAQCBwdWJsaWM6CiAgICAgLy8gR3Jp
ZEl0ZXJhdG9yKG1fZ3JpZCwgRm9yQ29sdW1ucywgMSkgd2lsbCB3YWxrIG92ZXIgdGhlIHJvd3Mg
b2YgdGhlIDJuZCBjb2x1bW4uCiAgICAgR3JpZEl0ZXJhdG9yKGNvbnN0IEdyaWQmLCBHcmlkVHJh
Y2tTaXppbmdEaXJlY3Rpb24sIHVuc2lnbmVkIGZpeGVkVHJhY2tJbmRleCwgdW5zaWduZWQgdmFy
eWluZ1RyYWNrSW5kZXggPSAwKTsKIAorICAgIHN0YXRpYyBHcmlkSXRlcmF0b3IgY3JlYXRlRm9y
U3ViZ3JpZChjb25zdCBSZW5kZXJHcmlkJiBzdWJncmlkLCBjb25zdCBHcmlkSXRlcmF0b3ImIG91
dGVyKTsKKwogICAgIFJlbmRlckJveCogbmV4dEdyaWRJdGVtKCk7CiAgICAgYm9vbCBpc0VtcHR5
QXJlYUVub3VnaCh1bnNpZ25lZCByb3dTcGFuLCB1bnNpZ25lZCBjb2x1bW5TcGFuKSBjb25zdDsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JpZEFyZWE+IG5leHRFbXB0eUdyaWRBcmVhKHVuc2lnbmVk
IGZpeGVkVHJhY2tTcGFuLCB1bnNpZ25lZCB2YXJ5aW5nVHJhY2tTcGFuKTsKIAorICAgIEdyaWRU
cmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fZGlyZWN0aW9uOworICAgIH0KKwogcHJpdmF0ZToKKyAgICBHcmlkSXRlcmF0b3IoY29u
c3QgR3JpZCYsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiwgdW5zaWduZWQgcm93SW5kZXgsIHVu
c2lnbmVkIGNvbHVtbkluZGV4LCB1bnNpZ25lZCB2YXJ5aW5nTWF4KTsKKwogICAgIGNvbnN0IEdy
aWRBc01hdHJpeCYgbV9ncmlkOwogICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBtX2RpcmVj
dGlvbjsKICAgICB1bnNpZ25lZCBtX3Jvd0luZGV4OwogICAgIHVuc2lnbmVkIG1fY29sdW1uSW5k
ZXg7CisgICAgdW5zaWduZWQgbV92YXJ5aW5nTWF4OwogICAgIHVuc2lnbmVkIG1fY2hpbGRJbmRl
eDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tT
aXppbmdBbGdvcml0aG0uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1Np
emluZ0FsZ29yaXRobS5jcHAKaW5kZXggMDllOTllZDRmZDAwYmQyYjllMGI3Y2VlODU3ZTVlMWRm
MjA0NDZlYS4uNzMxMjY2ZTA4NjkzYTM4NTkwY2Y2ZjkwYjUzZGVlOTZhYzNjZTE4NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRo
bS5jcHAKQEAgLTU4Nyw3ICs1ODcsNyBAQCB2b2lkIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6
ZGlzdHJpYnV0ZVNwYWNlVG9UcmFja3MoVmVjdG9yPEdyaWRUcmFjayo+JiB0cmFjawogCiBzdGQ6
Om9wdGlvbmFsPExheW91dFVuaXQ+IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6ZXN0aW1hdGVk
R3JpZEFyZWFCcmVhZHRoRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCwgR3JpZFRyYWNr
U2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikgY29uc3QKIHsKLSAgICBjb25zdCBHcmlkU3BhbiYg
c3BhbiA9IG1fZ3JpZC5ncmlkSXRlbVNwYW4oY2hpbGQsIGRpcmVjdGlvbik7CisgICAgY29uc3Qg
R3JpZFNwYW4mIHNwYW4gPSBtX3JlbmRlckdyaWQtPmdyaWRTcGFuRm9yQ2hpbGQoY2hpbGQsIGRp
cmVjdGlvbik7CiAgICAgTGF5b3V0VW5pdCBncmlkQXJlYVNpemU7CiAgICAgYm9vbCBncmlkQXJl
YUlzSW5kZWZpbml0ZSA9IGZhbHNlOwogICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gYXZh
aWxhYmxlU2l6ZSA9IGF2YWlsYWJsZVNwYWNlKGRpcmVjdGlvbik7CkBAIC02MjgsNyArNjI4LDcg
QEAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06Omdy
aWRBcmVhQnJlYWR0aEZvckNoaWxkKGNvbnMKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8R3Jp
ZFRyYWNrPiYgYWxsVHJhY2tzID0gdHJhY2tzKGRpcmVjdGlvbik7Ci0gICAgY29uc3QgR3JpZFNw
YW4mIHNwYW4gPSBtX2dyaWQuZ3JpZEl0ZW1TcGFuKGNoaWxkLCBkaXJlY3Rpb24pOworICAgIGNv
bnN0IEdyaWRTcGFuJiBzcGFuID0gbV9yZW5kZXJHcmlkLT5ncmlkU3BhbkZvckNoaWxkKGNoaWxk
LCBkaXJlY3Rpb24pOwogICAgIExheW91dFVuaXQgZ3JpZEFyZWFCcmVhZHRoOwogICAgIGZvciAo
YXV0byB0cmFja1Bvc2l0aW9uIDogc3BhbikKICAgICAgICAgZ3JpZEFyZWFCcmVhZHRoICs9IGFs
bFRyYWNrc1t0cmFja1Bvc2l0aW9uXS5iYXNlU2l6ZSgpOwpAQCAtNjUwLDcgKzY1MCw3IEBAIGJv
b2wgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjppc0ludHJpbnNpY1NpemVkR3JpZEFyZWEoY29u
c3QgUmVuZGVyQm94JiBjaGlsZCwKIHsKICAgICBBU1NFUlQod2FzU2V0dXAoKSk7CiAgICAgR3Jp
ZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiA9IGdyaWREaXJlY3Rpb25Gb3JBeGlzKGF4
aXMpOwotICAgIGNvbnN0IEdyaWRTcGFuJiBzcGFuID0gbV9ncmlkLmdyaWRJdGVtU3BhbihjaGls
ZCwgZGlyZWN0aW9uKTsKKyAgICBjb25zdCBHcmlkU3BhbiYgc3BhbiA9IG1fcmVuZGVyR3JpZC0+
Z3JpZFNwYW5Gb3JDaGlsZChjaGlsZCwgZGlyZWN0aW9uKTsKICAgICBmb3IgKGF1dG8gdHJhY2tQ
b3NpdGlvbiA6IHNwYW4pIHsKICAgICAgICAgY29uc3QgYXV0byYgdHJhY2tTaXplID0gcmF3R3Jp
ZFRyYWNrU2l6ZShkaXJlY3Rpb24sIHRyYWNrUG9zaXRpb24pOwogICAgICAgICAvLyBXZSBjb25z
aWRlciBmciB1bml0cyBhcyAnYXV0bycgZm9yIHRoZSBtaW4gc2l6aW5nIGZ1bmN0aW9uLgpAQCAt
ODU5LDcgKzg1OSw3IEBAIExheW91dFVuaXQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtU3RyYXRl
Z3k6Om1pblNpemVGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkKSBjCiAKICAgICBpZiAoY2hpbGRN
aW5TaXplLmlzQXV0bygpICYmIG92ZXJmbG93SXNWaXNpYmxlKSB7CiAgICAgICAgIGF1dG8gbWlu
U2l6ZSA9IG1pbkNvbnRlbnRGb3JDaGlsZChjaGlsZCk7Ci0gICAgICAgIGNvbnN0IEdyaWRTcGFu
JiBzcGFuID0gbV9hbGdvcml0aG0uZ3JpZCgpLmdyaWRJdGVtU3BhbihjaGlsZCwgZGlyZWN0aW9u
KCkpOworICAgICAgICBjb25zdCBHcmlkU3BhbiYgc3BhbiA9IG1fYWxnb3JpdGhtLm1fcmVuZGVy
R3JpZC0+Z3JpZFNwYW5Gb3JDaGlsZChjaGlsZCwgZGlyZWN0aW9uKCkpOwogCiAgICAgICAgIExh
eW91dFVuaXQgbWF4QnJlYWR0aDsKICAgICAgICAgYXV0byBhbGxUcmFja3MgPSBtX2FsZ29yaXRo
bS50cmFja3MoZGlyZWN0aW9uKCkpOwpAQCAtOTE4LDcgKzkxOCw3IEBAIHZvaWQgR3JpZFRyYWNr
U2l6aW5nQWxnb3JpdGhtOjp1cGRhdGVCYXNlbGluZUFsaWdubWVudENvbnRleHQoY29uc3QgUmVu
ZGVyQm94JiBjCiAgICAgQVNTRVJUKCFjaGlsZC5uZWVkc0xheW91dCgpKTsKIAogICAgIEl0ZW1Q
b3NpdGlvbiBhbGlnbiA9IG1fcmVuZGVyR3JpZC0+c2VsZkFsaWdubWVudEZvckNoaWxkKGJhc2Vs
aW5lQXhpcywgY2hpbGQpLnBvc2l0aW9uKCk7Ci0gICAgY29uc3QgYXV0byYgc3BhbiA9IG1fZ3Jp
ZC5ncmlkSXRlbVNwYW4oY2hpbGQsIGdyaWREaXJlY3Rpb25Gb3JBeGlzKGJhc2VsaW5lQXhpcykp
OworICAgIGNvbnN0IGF1dG8mIHNwYW4gPSBtX3JlbmRlckdyaWQtPmdyaWRTcGFuRm9yQ2hpbGQo
Y2hpbGQsIGdyaWREaXJlY3Rpb25Gb3JBeGlzKGJhc2VsaW5lQXhpcykpOwogICAgIG1fYmFzZWxp
bmVBbGlnbm1lbnQudXBkYXRlQmFzZWxpbmVBbGlnbm1lbnRDb250ZXh0KGFsaWduLCBzcGFuLnN0
YXJ0TGluZSgpLCBjaGlsZCwgYmFzZWxpbmVBeGlzKTsKIH0KIApAQCAtOTI4LDcgKzkyOCw3IEBA
IExheW91dFVuaXQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpiYXNlbGluZU9mZnNldEZvckNo
aWxkKGNvbnN0IFJlbmRlckJveCYgY2hpCiAgICAgICAgIHJldHVybiBMYXlvdXRVbml0KCk7CiAK
ICAgICBJdGVtUG9zaXRpb24gYWxpZ24gPSBtX3JlbmRlckdyaWQtPnNlbGZBbGlnbm1lbnRGb3JD
aGlsZChiYXNlbGluZUF4aXMsIGNoaWxkKS5wb3NpdGlvbigpOwotICAgIGNvbnN0IGF1dG8mIHNw
YW4gPSBtX2dyaWQuZ3JpZEl0ZW1TcGFuKGNoaWxkLCBncmlkRGlyZWN0aW9uRm9yQXhpcyhiYXNl
bGluZUF4aXMpKTsKKyAgICBjb25zdCBhdXRvJiBzcGFuID0gbV9yZW5kZXJHcmlkLT5ncmlkU3Bh
bkZvckNoaWxkKGNoaWxkLCBncmlkRGlyZWN0aW9uRm9yQXhpcyhiYXNlbGluZUF4aXMpKTsKICAg
ICByZXR1cm4gbV9iYXNlbGluZUFsaWdubWVudC5iYXNlbGluZU9mZnNldEZvckNoaWxkKGFsaWdu
LCBzcGFuLnN0YXJ0TGluZSgpLCBjaGlsZCwgYmFzZWxpbmVBeGlzKTsKIH0KIApAQCAtOTkwLDYg
Kzk5MCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCByZWNvbXB1dGVVc2VkRmxleEZyYWN0aW9uSWZO
ZWVkZWQoZG91YmxlJiBmbGV4RnJhY3Rpb24sIExheW91dFVuaXQmIHRvdGFsR3Jvd3RoKSBjb25z
dCBvdmVycmlkZTsKICAgICBMYXlvdXRVbml0IGZyZWVTcGFjZUZvclN0cmV0Y2hBdXRvVHJhY2tz
U3RlcCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgaXNDb21wdXRpbmdTaXplQ29udGFpbm1l
bnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzaG91bGRBcHBseVNpemVDb250YWlubWVudCgq
cmVuZGVyR3JpZCgpKTsgfQorICAgIHZvaWQgYWNjdW11bGF0ZUZsZXhGcmFjdGlvbihkb3VibGUm
IGZsZXhGcmFjdGlvbiwgR3JpZEl0ZXJhdG9yJiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIG91
dGVybW9zdERpcmVjdGlvbiwgSGFzaFNldDxSZW5kZXJCb3gqPiYgaXRlbXNTZXQpIGNvbnN0Owog
fTsKIAogdm9pZCBJbmRlZmluaXRlU2l6ZVN0cmF0ZWd5OjpsYXlvdXRHcmlkSXRlbUZvck1pblNp
emVDb21wdXRhdGlvbihSZW5kZXJCb3gmIGNoaWxkLCBib29sIG92ZXJyaWRlU2l6ZUhhc0NoYW5n
ZWQpIGNvbnN0CkBAIC0xMDEzLDYgKzEwMTQsMjggQEAgc3RhdGljIGlubGluZSBkb3VibGUgbm9y
bWFsaXplZEZsZXhGcmFjdGlvbihjb25zdCBHcmlkVHJhY2smIHRyYWNrKQogICAgIHJldHVybiB0
cmFjay5iYXNlU2l6ZSgpIC8gc3RkOjptYXg8ZG91YmxlPigxLCBmbGV4RmFjdG9yKTsKIH0KIAor
dm9pZCBJbmRlZmluaXRlU2l6ZVN0cmF0ZWd5OjphY2N1bXVsYXRlRmxleEZyYWN0aW9uKGRvdWJs
ZSYgZmxleEZyYWN0aW9uLCBHcmlkSXRlcmF0b3ImIGl0ZXJhdG9yLCBHcmlkVHJhY2tTaXppbmdE
aXJlY3Rpb24gb3V0ZXJtb3N0RGlyZWN0aW9uLCBIYXNoU2V0PFJlbmRlckJveCo+JiBpdGVtc1Nl
dCkgY29uc3QKK3sKKyAgICB3aGlsZSAoYXV0byogZ3JpZEl0ZW0gPSBpdGVyYXRvci5uZXh0R3Jp
ZEl0ZW0oKSkgeworICAgICAgICBpZiAoaXM8UmVuZGVyR3JpZD4oZ3JpZEl0ZW0pICYmIGRvd25j
YXN0PFJlbmRlckdyaWQ+KGdyaWRJdGVtKS0+aXNTdWJncmlkSW5QYXJlbnREaXJlY3Rpb24oaXRl
cmF0b3IuZGlyZWN0aW9uKCkpKSB7CisgICAgICAgICAgICBSZW5kZXJHcmlkKiBpbm5lciA9IGRv
d25jYXN0PFJlbmRlckdyaWQ+KGdyaWRJdGVtKTsKKworICAgICAgICAgICAgR3JpZEl0ZXJhdG9y
IGNoaWxkSXRlcmF0b3IgPSBHcmlkSXRlcmF0b3I6OmNyZWF0ZUZvclN1YmdyaWQoKmlubmVyLCBp
dGVyYXRvcik7CisgICAgICAgICAgICBhY2N1bXVsYXRlRmxleEZyYWN0aW9uKGZsZXhGcmFjdGlv
biwgY2hpbGRJdGVyYXRvciwgb3V0ZXJtb3N0RGlyZWN0aW9uLCBpdGVtc1NldCk7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBEbyBub3QgaW5jbHVkZSBhbHJl
YWR5IHByb2Nlc3NlZCBpdGVtcy4KKyAgICAgICAgaWYgKCFpdGVtc1NldC5hZGQoZ3JpZEl0ZW0p
LmlzTmV3RW50cnkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBHcmlkU3BhbiBz
cGFuID0gbV9hbGdvcml0aG0ucmVuZGVyR3JpZCgpLT5ncmlkU3BhbkZvckNoaWxkKCpncmlkSXRl
bSwgb3V0ZXJtb3N0RGlyZWN0aW9uKTsKKworICAgICAgICAvLyBSZW1vdmluZyBndXR0ZXJzIGZy
b20gdGhlIG1heC1jb250ZW50IGNvbnRyaWJ1dGlvbiBvZiB0aGUgaXRlbSwgc28gdGhleSBhcmUg
bm90IHRha2VuIGludG8gYWNjb3VudCBpbiBGaW5kRnJVbml0U2l6ZSgpLgorICAgICAgICBMYXlv
dXRVbml0IGxlZnRPdmVyU3BhY2UgPSBtYXhDb250ZW50Rm9yQ2hpbGQoKmdyaWRJdGVtKSAtIHJl
bmRlckdyaWQoKS0+Z3V0dGVyc1NpemUobV9hbGdvcml0aG0uZ3JpZCgpLCBvdXRlcm1vc3REaXJl
Y3Rpb24sIHNwYW4uc3RhcnRMaW5lKCksIHNwYW4uaW50ZWdlclNwYW4oKSwgYXZhaWxhYmxlU3Bh
Y2UoKSk7CisgICAgICAgIGZsZXhGcmFjdGlvbiA9IHN0ZDo6bWF4KGZsZXhGcmFjdGlvbiwgZmlu
ZEZyVW5pdFNpemUoc3BhbiwgbGVmdE92ZXJTcGFjZSkpOworICAgIH0KK30KKwogZG91YmxlIElu
ZGVmaW5pdGVTaXplU3RyYXRlZ3k6OmZpbmRVc2VkRmxleEZyYWN0aW9uKFZlY3Rvcjx1bnNpZ25l
ZD4mIGZsZXhpYmxlU2l6ZWRUcmFja3NJbmRleCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRp
cmVjdGlvbiwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBmcmVlU3BhY2UpIGNvbnN0CiB7CiAg
ICAgVU5VU0VEX1BBUkFNKGZyZWVTcGFjZSk7CkBAIC0xMDMyLDE3ICsxMDU1LDcgQEAgZG91Ymxl
IEluZGVmaW5pdGVTaXplU3RyYXRlZ3k6OmZpbmRVc2VkRmxleEZyYWN0aW9uKFZlY3Rvcjx1bnNp
Z25lZD4mIGZsZXhpYmxlU2kKICAgICBIYXNoU2V0PFJlbmRlckJveCo+IGl0ZW1zU2V0OwogICAg
IGZvciAoY29uc3QgYXV0byYgdHJhY2tJbmRleCA6IGZsZXhpYmxlU2l6ZWRUcmFja3NJbmRleCkg
ewogICAgICAgICBHcmlkSXRlcmF0b3IgaXRlcmF0b3IoZ3JpZCwgZGlyZWN0aW9uLCB0cmFja0lu
ZGV4KTsKLSAgICAgICAgd2hpbGUgKGF1dG8qIGdyaWRJdGVtID0gaXRlcmF0b3IubmV4dEdyaWRJ
dGVtKCkpIHsKLSAgICAgICAgICAgIC8vIERvIG5vdCBpbmNsdWRlIGFscmVhZHkgcHJvY2Vzc2Vk
IGl0ZW1zLgotICAgICAgICAgICAgaWYgKCFpdGVtc1NldC5hZGQoZ3JpZEl0ZW0pLmlzTmV3RW50
cnkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGNvbnN0IEdyaWRT
cGFuJiBzcGFuID0gZ3JpZC5ncmlkSXRlbVNwYW4oKmdyaWRJdGVtLCBkaXJlY3Rpb24pOwotCi0g
ICAgICAgICAgICAvLyBSZW1vdmluZyBndXR0ZXJzIGZyb20gdGhlIG1heC1jb250ZW50IGNvbnRy
aWJ1dGlvbiBvZiB0aGUgaXRlbSwgc28gdGhleSBhcmUgbm90IHRha2VuIGludG8gYWNjb3VudCBp
biBGaW5kRnJVbml0U2l6ZSgpLgotICAgICAgICAgICAgTGF5b3V0VW5pdCBsZWZ0T3ZlclNwYWNl
ID0gbWF4Q29udGVudEZvckNoaWxkKCpncmlkSXRlbSkgLSByZW5kZXJHcmlkKCktPmd1dHRlcnNT
aXplKG1fYWxnb3JpdGhtLmdyaWQoKSwgZGlyZWN0aW9uLCBzcGFuLnN0YXJ0TGluZSgpLCBzcGFu
LmludGVnZXJTcGFuKCksIGF2YWlsYWJsZVNwYWNlKCkpOwotICAgICAgICAgICAgZmxleEZyYWN0
aW9uID0gc3RkOjptYXgoZmxleEZyYWN0aW9uLCBmaW5kRnJVbml0U2l6ZShzcGFuLCBsZWZ0T3Zl
clNwYWNlKSk7Ci0gICAgICAgIH0KKyAgICAgICAgYWNjdW11bGF0ZUZsZXhGcmFjdGlvbihmbGV4
RnJhY3Rpb24sIGl0ZXJhdG9yLCBkaXJlY3Rpb24sIGl0ZW1zU2V0KTsKICAgICB9CiAKICAgICBy
ZXR1cm4gZmxleEZyYWN0aW9uOwpAQCAtMTIwOSw2ICsxMjIyLDMwIEBAIHZvaWQgR3JpZFRyYWNr
U2l6aW5nQWxnb3JpdGhtOjppbml0aWFsaXplVHJhY2tTaXplcygpCiAgICAgfQogfQogCit2b2lk
IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6YWNjdW11bGF0ZUludHJpbnNpY1NpemVzRm9yVHJh
Y2soR3JpZFRyYWNrJiB0cmFjaywgR3JpZEl0ZXJhdG9yJiBpdGVyYXRvciwgVmVjdG9yPEdyaWRJ
dGVtV2l0aFNwYW4+JiBpdGVtc1NvcnRlZEJ5SW5jcmVhc2luZ1NwYW4sIFZlY3RvcjxHcmlkSXRl
bVdpdGhTcGFuPiYgaXRlbXNDcm9zc2luZ0ZsZXhpYmxlVHJhY2tzLCBIYXNoU2V0PFJlbmRlckJv
eCo+JiBpdGVtc1NldCkKK3sKKyAgICB3aGlsZSAoYXV0byogZ3JpZEl0ZW0gPSBpdGVyYXRvci5u
ZXh0R3JpZEl0ZW0oKSkgeworICAgICAgICBib29sIGlzTmV3RW50cnkgPSBpdGVtc1NldC5hZGQo
Z3JpZEl0ZW0pLmlzTmV3RW50cnk7CisgICAgICAgIGlmIChpczxSZW5kZXJHcmlkPihncmlkSXRl
bSkgJiYgZG93bmNhc3Q8UmVuZGVyR3JpZD4oZ3JpZEl0ZW0pLT5pc1N1YmdyaWRJblBhcmVudERp
cmVjdGlvbihpdGVyYXRvci5kaXJlY3Rpb24oKSkpIHsKKyAgICAgICAgICAgIFJlbmRlckdyaWQq
IGlubmVyID0gZG93bmNhc3Q8UmVuZGVyR3JpZD4oZ3JpZEl0ZW0pOworCisgICAgICAgICAgICBH
cmlkSXRlcmF0b3IgY2hpbGRJdGVyYXRvciA9IEdyaWRJdGVyYXRvcjo6Y3JlYXRlRm9yU3ViZ3Jp
ZCgqaW5uZXIsIGl0ZXJhdG9yKTsKKyAgICAgICAgICAgIGFjY3VtdWxhdGVJbnRyaW5zaWNTaXpl
c0ZvclRyYWNrKHRyYWNrLCBjaGlsZEl0ZXJhdG9yLCBpdGVtc1NvcnRlZEJ5SW5jcmVhc2luZ1Nw
YW4sIGl0ZW1zQ3Jvc3NpbmdGbGV4aWJsZVRyYWNrcywgaXRlbXNTZXQpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc05ld0VudHJ5KQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIEdyaWRTcGFuIHNwYW4gPSBtX3JlbmRlckdyaWQtPmdyaWRT
cGFuRm9yQ2hpbGQoKmdyaWRJdGVtLCBtX2RpcmVjdGlvbik7CisKKyAgICAgICAgaWYgKHNwYW5u
aW5nSXRlbUNyb3NzZXNGbGV4aWJsZVNpemVkVHJhY2tzKHNwYW4pKQorICAgICAgICAgICAgaXRl
bXNDcm9zc2luZ0ZsZXhpYmxlVHJhY2tzLmFwcGVuZChHcmlkSXRlbVdpdGhTcGFuKCpncmlkSXRl
bSwgc3BhbikpOworICAgICAgICBlbHNlIGlmIChzcGFuLmludGVnZXJTcGFuKCkgPT0gMSkKKyAg
ICAgICAgICAgIHNpemVUcmFja1RvRml0Tm9uU3Bhbm5pbmdJdGVtKHNwYW4sICpncmlkSXRlbSwg
dHJhY2spOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpdGVtc1NvcnRlZEJ5SW5jcmVhc2lu
Z1NwYW4uYXBwZW5kKEdyaWRJdGVtV2l0aFNwYW4oKmdyaWRJdGVtLCBzcGFuKSk7CisgICAgfQor
fQorCiB2b2lkIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6cmVzb2x2ZUludHJpbnNpY1RyYWNr
U2l6ZXMoKQogewogICAgIFZlY3RvcjxHcmlkVHJhY2s+JiBhbGxUcmFja3MgPSB0cmFja3MobV9k
aXJlY3Rpb24pOwpAQCAtMTIyOCwyMiArMTI2NSwxMyBAQCB2b2lkIEdyaWRUcmFja1NpemluZ0Fs
Z29yaXRobTo6cmVzb2x2ZUludHJpbnNpY1RyYWNrU2l6ZXMoKQogICAgIFZlY3RvcjxHcmlkSXRl
bVdpdGhTcGFuPiBpdGVtc1NvcnRlZEJ5SW5jcmVhc2luZ1NwYW47CiAgICAgVmVjdG9yPEdyaWRJ
dGVtV2l0aFNwYW4+IGl0ZW1zQ3Jvc3NpbmdGbGV4aWJsZVRyYWNrczsKICAgICBIYXNoU2V0PFJl
bmRlckJveCo+IGl0ZW1zU2V0OworCiAgICAgaWYgKG1fZ3JpZC5oYXNHcmlkSXRlbXMoKSkgewog
ICAgICAgICBmb3IgKGF1dG8gdHJhY2tJbmRleCA6IG1fY29udGVudFNpemVkVHJhY2tzSW5kZXgp
IHsKICAgICAgICAgICAgIEdyaWRJdGVyYXRvciBpdGVyYXRvcihtX2dyaWQsIG1fZGlyZWN0aW9u
LCB0cmFja0luZGV4KTsKICAgICAgICAgICAgIEdyaWRUcmFjayYgdHJhY2sgPSBhbGxUcmFja3Nb
dHJhY2tJbmRleF07CiAKLSAgICAgICAgICAgIHdoaWxlIChhdXRvKiBncmlkSXRlbSA9IGl0ZXJh
dG9yLm5leHRHcmlkSXRlbSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZW1zU2V0LmFkZChn
cmlkSXRlbSkuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmlkU3Bh
biYgc3BhbiA9IG1fZ3JpZC5ncmlkSXRlbVNwYW4oKmdyaWRJdGVtLCBtX2RpcmVjdGlvbik7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChzcGFubmluZ0l0ZW1Dcm9zc2VzRmxleGlibGVTaXplZFRy
YWNrcyhzcGFuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zQ3Jvc3NpbmdGbGV4aWJs
ZVRyYWNrcy5hcHBlbmQoR3JpZEl0ZW1XaXRoU3BhbigqZ3JpZEl0ZW0sIHNwYW4pKTsKLSAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoc3Bhbi5pbnRlZ2VyU3BhbigpID09IDEpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzaXplVHJhY2tUb0ZpdE5vblNwYW5uaW5nSXRlbShzcGFuLCAqZ3Jp
ZEl0ZW0sIHRyYWNrKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICAgICAgaXRlbXNTb3J0ZWRCeUluY3JlYXNpbmdTcGFuLmFwcGVuZChHcmlkSXRlbVdpdGhT
cGFuKCpncmlkSXRlbSwgc3BhbikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGFjY3VtdWxhdGVJbnRyaW5zaWNTaXplc0ZvclRyYWNrKHRyYWNrLCBpdGVy
YXRvciwgaXRlbXNTb3J0ZWRCeUluY3JlYXNpbmdTcGFuLCBpdGVtc0Nyb3NzaW5nRmxleGlibGVU
cmFja3MsIGl0ZW1zU2V0KTsKICAgICAgICAgfQogICAgICAgICBzdGQ6OnNvcnQoaXRlbXNTb3J0
ZWRCeUluY3JlYXNpbmdTcGFuLmJlZ2luKCksIGl0ZW1zU29ydGVkQnlJbmNyZWFzaW5nU3Bhbi5l
bmQoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRU
cmFja1NpemluZ0FsZ29yaXRobS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFj
a1NpemluZ0FsZ29yaXRobS5oCmluZGV4IGFlMWRkNmM3YWNkYmRiODdkZmZjMWY3YWM2MjM4ZDNl
ZThkN2FlNjUuLjY3ZGFjMjkyYjg0MTIxNDg0NjczMmYxODE0NGQxMWE5MzZlNzFhYTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tTaXppbmdBbGdvcml0aG0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGht
LmgKQEAgLTU1LDYgKzU1LDcgQEAgZW51bSBjbGFzcyBTcGFjZURpc3RyaWJ1dGlvbkxpbWl0IDog
dWludDhfdCAgewogfTsKIAogY2xhc3MgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtU3RyYXRlZ3k7
CitjbGFzcyBHcmlkSXRlbVdpdGhTcGFuOwogCiBjbGFzcyBHcmlkVHJhY2sgewogcHVibGljOgpA
QCAtMTIxLDYgKzEyMiw4IEBAIHB1YmxpYzoKICAgICAvLyBhbmQgZW5jYXBzdWxhdGUgYW55IGFj
Y2VzcyBpbiB0aGUgYWxnb3JpdGhtIGNsYXNzLgogICAgIEdyaWQmIG11dGFibGVHcmlkKCkgY29u
c3QgeyByZXR1cm4gbV9ncmlkOyB9CiAKKyAgICBjb25zdCBSZW5kZXJHcmlkKiByZW5kZXJHcmlk
KCkgeyByZXR1cm4gbV9yZW5kZXJHcmlkOyB9OworCiAgICAgTGF5b3V0VW5pdCBtaW5Db250ZW50
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWluQ29udGVudFNpemU7IH07CiAgICAgTGF5b3V0VW5p
dCBtYXhDb250ZW50U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4Q29udGVudFNpemU7IH07CiAK
QEAgLTE5Myw2ICsxOTYsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgc3RyZXRjaEZsZXhpYmxlVHJh
Y2tzKHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gZnJlZVNwYWNlKTsKICAgICB2b2lkIHN0cmV0
Y2hBdXRvVHJhY2tzKCk7CiAKKyAgICB2b2lkIGFjY3VtdWxhdGVJbnRyaW5zaWNTaXplc0ZvclRy
YWNrKEdyaWRUcmFjayYsIEdyaWRJdGVyYXRvciYsIFZlY3RvcjxHcmlkSXRlbVdpdGhTcGFuPiYg
aXRlbXNTb3J0ZWRCeUluY3JlYXNpbmdTcGFuLCBWZWN0b3I8R3JpZEl0ZW1XaXRoU3Bhbj4mIGl0
ZW1zQ3Jvc3NpbmdGbGV4aWJsZVRyYWNrcywgSGFzaFNldDxSZW5kZXJCb3gqPiYgaXRlbXNTZXQp
OworCiAgICAgLy8gU3RhdGUgbWFjaGluZS4KICAgICB2b2lkIGFkdmFuY2VOZXh0U3RhdGUoKTsK
ICAgICBib29sIGlzVmFsaWRUcmFuc2l0aW9uKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyR3JpZC5jcHAKaW5kZXggMmQ1ZTlmMGY2ODczMjI4NmRiYjhmZTA0Njg4ZTU1MTRm
ZTk3OTBjOC4uNjJlNzY2MjE4M2YwZGYxNGJmZmVlZjVhZDczYmI4MWJjNGYxZjRhYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcApAQCAtNjI1LDYgKzYyNSwyNiBAQCB1
bnNpZ25lZCBSZW5kZXJHcmlkOjpjbGFtcEF1dG9SZXBlYXRUcmFja3MoR3JpZFRyYWNrU2l6aW5n
RGlyZWN0aW9uIGRpcmVjdGlvbiwgdQogICAgIHJldHVybiBzdGQ6Om1pbihhdXRvUmVwZWF0VHJh
Y2tzLCBtYXhUcmFja3MgLSBpbnNlcnRpb25Qb2ludCk7CiB9CiAKK3ZvaWQgUmVuZGVyR3JpZDo6
cGxhY2VJdGVtcygpCit7CisgICAgdXBkYXRlTG9naWNhbFdpZHRoKCk7CisKKyAgICBMYXlvdXRV
bml0IGF2YWlsYWJsZVNwYWNlRm9yQ29sdW1ucyA9IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgpOwor
ICAgIHBsYWNlSXRlbXNPbkdyaWQobV90cmFja1NpemluZ0FsZ29yaXRobSwgYXZhaWxhYmxlU3Bh
Y2VGb3JDb2x1bW5zKTsKK30KKworc3RhdGljIEdyaWRBcmVhIGluc2VydEludG9HcmlkKEdyaWQm
IGdyaWQsIFJlbmRlckJveCYgY2hpbGQsIGNvbnN0IEdyaWRBcmVhJiBhcmVhKQoreworICAgIEdy
aWRBcmVhIGNsYW1wZWQgPSBncmlkLmluc2VydChjaGlsZCwgYXJlYSk7CisgICAgaWYgKCFpczxS
ZW5kZXJHcmlkPihjaGlsZCkpCisgICAgICAgIHJldHVybiBjbGFtcGVkOworCisgICAgUmVuZGVy
R3JpZCYgcmVuZGVyR3JpZCA9IGRvd25jYXN0PFJlbmRlckdyaWQ+KGNoaWxkKTsKKyAgICBpZiAo
cmVuZGVyR3JpZC5pc1N1YmdyaWRSb3dzKCkgfHwgcmVuZGVyR3JpZC5pc1N1YmdyaWRDb2x1bW5z
KCkpCisgICAgICAgIHJlbmRlckdyaWQucGxhY2VJdGVtcygpOworICAgIHJldHVybiBjbGFtcGVk
OworfQorCiAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gcGFzcyB0aGUgYXZhaWxhYmxl
IGxvZ2ljYWwgd2lkdGggYXMgYXJndW1lbnQuIFRoZSBwcm9ibGVtIGlzIHRoYXQKIC8vIGF2YWls
YWJsZUxvZ2ljYWxXaWR0aCgpIGRvZXMgYWx3YXlzIHJldHVybiBhIHZhbHVlIGV2ZW4gaWYgd2Ug
Y2Fubm90IHJlc29sdmUgaXQgbGlrZSB3aGVuCiAvLyBjb21wdXRpbmcgdGhlIGludHJpbnNpYyBz
aXplIChwcmVmZXJyZWQgd2lkdGhzKS4gVGhhdCdzIHdoeSB3ZSBwYXNzIHRoZSByZXNwb25zaWJp
bGl0eSB0byB0aGUKQEAgLTY3NCw3ICs2OTQsNyBAQCB2b2lkIFJlbmRlckdyaWQ6OnBsYWNlSXRl
bXNPbkdyaWQoR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtJiBhbGdvcml0aG0sIHN0ZDo6b3B0aQog
ICAgICAgICAgICAgICAgIHNwZWNpZmllZE1ham9yQXhpc0F1dG9HcmlkSXRlbXMuYXBwZW5kKGNo
aWxkKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGdyaWQuaW5z
ZXJ0KCpjaGlsZCwgeyBhcmVhLnJvd3MsIGFyZWEuY29sdW1ucyB9KTsKKyAgICAgICAgaW5zZXJ0
SW50b0dyaWQoZ3JpZCwgKmNoaWxkLCB7IGFyZWEucm93cywgYXJlYS5jb2x1bW5zIH0pOwogICAg
IH0KIAogI2lmIEFTU0VSVF9FTkFCTEVECkBAIC04MDUsNyArODI1LDcgQEAgdm9pZCBSZW5kZXJH
cmlkOjpwbGFjZVNwZWNpZmllZE1ham9yQXhpc0l0ZW1zT25HcmlkKEdyaWQmIGdyaWQsIGNvbnN0
IFZlY3RvcjxSZW4KICAgICAgICAgaWYgKCFlbXB0eUdyaWRBcmVhKQogICAgICAgICAgICAgZW1w
dHlHcmlkQXJlYSA9IGNyZWF0ZUVtcHR5R3JpZEFyZWFBdFNwZWNpZmllZFBvc2l0aW9uc091dHNp
ZGVHcmlkKGdyaWQsICphdXRvR3JpZEl0ZW0sIGF1dG9QbGFjZW1lbnRNYWpvckF4aXNEaXJlY3Rp
b24oKSwgbWFqb3JBeGlzUG9zaXRpb25zKTsKIAotICAgICAgICAqZW1wdHlHcmlkQXJlYSA9IGdy
aWQuaW5zZXJ0KCphdXRvR3JpZEl0ZW0sICplbXB0eUdyaWRBcmVhKTsKKyAgICAgICAgKmVtcHR5
R3JpZEFyZWEgPSBpbnNlcnRJbnRvR3JpZChncmlkLCAqYXV0b0dyaWRJdGVtLCAqZW1wdHlHcmlk
QXJlYSk7CiAKICAgICAgICAgaWYgKCFpc0dyaWRBdXRvRmxvd0RlbnNlKQogICAgICAgICAgICAg
bWlub3JBeGlzQ3Vyc29ycy5zZXQobWFqb3JBeGlzSW5pdGlhbFBvc2l0aW9uLCBpc0ZvckNvbHVt
bnMgPyBlbXB0eUdyaWRBcmVhLT5yb3dzLnN0YXJ0TGluZSgpIDogZW1wdHlHcmlkQXJlYS0+Y29s
dW1ucy5zdGFydExpbmUoKSk7CkBAIC04NzcsNyArODk3LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpw
bGFjZUF1dG9NYWpvckF4aXNJdGVtT25HcmlkKEdyaWQmIGdyaWQsIFJlbmRlckJveCYgZ3JpZEl0
ZW0sIEEKICAgICAgICAgICAgIGVtcHR5R3JpZEFyZWEgPSBjcmVhdGVFbXB0eUdyaWRBcmVhQXRT
cGVjaWZpZWRQb3NpdGlvbnNPdXRzaWRlR3JpZChncmlkLCBncmlkSXRlbSwgYXV0b1BsYWNlbWVu
dE1pbm9yQXhpc0RpcmVjdGlvbigpLCBHcmlkU3Bhbjo6dHJhbnNsYXRlZERlZmluaXRlR3JpZFNw
YW4oMCwgbWlub3JBeGlzU3BhblNpemUpKTsKICAgICB9CiAKLSAgICBncmlkLmluc2VydChncmlk
SXRlbSwgKmVtcHR5R3JpZEFyZWEpOworICAgICplbXB0eUdyaWRBcmVhID0gaW5zZXJ0SW50b0dy
aWQoZ3JpZCwgZ3JpZEl0ZW0sICplbXB0eUdyaWRBcmVhKTsKICAgICBhdXRvUGxhY2VtZW50Q3Vy
c29yLmZpcnN0ID0gZW1wdHlHcmlkQXJlYS0+cm93cy5zdGFydExpbmUoKTsKICAgICBhdXRvUGxh
Y2VtZW50Q3Vyc29yLnNlY29uZCA9IGVtcHR5R3JpZEFyZWEtPmNvbHVtbnMuc3RhcnRMaW5lKCk7
CiB9CkBAIC05OTAsMTMgKzEwMTAsMTUgQEAgdm9pZCBSZW5kZXJHcmlkOjpsYXlvdXRHcmlkSXRl
bXMoKQogICAgIHBvcHVsYXRlR3JpZFBvc2l0aW9uc0ZvckRpcmVjdGlvbihGb3JSb3dzKTsKIAog
ICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCkpIHsKLSAgICAgICAgCiAgICAgICAgIGlmIChtX2dy
aWQub3JkZXJJdGVyYXRvcigpLnNob3VsZFNraXBDaGlsZCgqY2hpbGQpKSB7CiAgICAgICAgICAg
ICBpZiAoY2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgICAgIHBy
ZXBhcmVDaGlsZEZvclBvc2l0aW9uZWRMYXlvdXQoKmNoaWxkKTsKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKGlzPFJlbmRlckdyaWQ+KGNoaWxkKSAmJiAo
ZG93bmNhc3Q8UmVuZGVyR3JpZD4oY2hpbGQpLT5pc1N1YmdyaWRDb2x1bW5zKCkgfHwgZG93bmNh
c3Q8UmVuZGVyR3JpZD4oY2hpbGQpLT5pc1N1YmdyaWRSb3dzKCkpKQorICAgICAgICAgICAgY2hp
bGQtPnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CisKICAgICAgICAgLy8gU2V0dGluZyB0
aGUgZGVmaW5pdGUgZ3JpZCBhcmVhJ3Mgc2l6ZXMuIEl0IG1heSBpbXBseSB0aGF0IHRoZQogICAg
ICAgICAvLyBpdGVtIG11c3QgcGVyZm9ybSBhIGxheW91dCBpZiBpdHMgYXJlYSBkaWZmZXJzIGZy
b20gdGhlIG9uZQogICAgICAgICAvLyB1c2VkIGR1cmluZyB0aGUgdHJhY2sgc2l6aW5nIGFsZ29y
aXRobS4KQEAgLTE2NTUsNiArMTY3NywxMiBAQCBib29sIFJlbmRlckdyaWQ6OmlzU3ViZ3JpZENv
bHVtbnMoKSBjb25zdAogICAgIHJldHVybiBpc1N1YmdyaWQoRm9yQ29sdW1ucyk7CiB9CiAKK2Jv
b2wgUmVuZGVyR3JpZDo6aXNTdWJncmlkSW5QYXJlbnREaXJlY3Rpb24oR3JpZFRyYWNrU2l6aW5n
RGlyZWN0aW9uIHBhcmVudERpcmVjdGlvbikgY29uc3QKK3sKKyAgICBHcmlkVHJhY2tTaXppbmdE
aXJlY3Rpb24gZGlyZWN0aW9uID0gR3JpZExheW91dEZ1bmN0aW9uczo6Zmxvd0F3YXJlRGlyZWN0
aW9uRm9yQ2hpbGQoKnRoaXMsICpwYXJlbnQoKSwgcGFyZW50RGlyZWN0aW9uKTsKKyAgICByZXR1
cm4gaXNTdWJncmlkKGRpcmVjdGlvbik7Cit9CisKIExheW91dFVuaXQgUmVuZGVyR3JpZDo6Z3Jp
ZEFyZWFCcmVhZHRoRm9yT3V0T2ZGbG93Q2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCwgR3Jp
ZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBBU1NFUlQoY2hpbGQuaXNP
dXRPZkZsb3dQb3NpdGlvbmVkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckdyaWQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmgK
aW5kZXggOGI1NDkxNWQ2ZjE2ZGYzNGYzMzBkMTdlMWEyZjZkZjczNmZkMTc3MS4uZGJhYTAzZjY2
OTlkZTZmN2QyN2U4N2E4MmZiNGNmYjk1OGVhMzhkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyR3JpZC5oCkBAIC04OSw2ICs4OSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzU3ViZ3Jp
ZFJvd3MoKSBjb25zdDsKICAgICBib29sIGlzU3ViZ3JpZENvbHVtbnMoKSBjb25zdDsKICAgICBi
b29sIGlzU3ViZ3JpZChHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24pIGNvbnN0OworICAgIGJvb2wg
aXNTdWJncmlkSW5QYXJlbnREaXJlY3Rpb24oR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIHBhcmVu
dERpcmVjdGlvbikgY29uc3Q7CiAKICAgICBjb25zdCBHcmlkJiBjdXJyZW50R3JpZCgpIGNvbnN0
CiAgICAgewpAQCAtMTAwLDYgKzEwMSw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG51bVRy
YWNrcyhkaXJlY3Rpb24sIG1fZ3JpZCk7CiAgICAgfQogCisgICAgdm9pZCBwbGFjZUl0ZW1zKCk7
CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTsK
IApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCmluZGV4IDQ5NjQ5ZjJjNDQ1NGY5NTE0MTk1OTZlZTI4NDM0ZmU4ZTc4NjU2N2EuLjEyZDcy
YjM5ZmExZGQ1YWM2ZmM5MDgxNTZkOTI4YzU1N2Y5NjQyMjggMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBA
QAorMjAyMi0wMi0wOCAgTWF0dCBXb29kcm93ICA8bWF0dHdvb2Ryb3dAYXBwbGUuY29tPgorCisg
ICAgICAgIEluY2x1ZGUgc3ViZ3JpZCBpdGVtcyBpbiBpbnRyaW5zaWMgc2l6ZSBjYWxjdWxhdGlv
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2MzM3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhpc3Rp
bmcgdGVzdCBleHBlY3RhdGlvbnMgdXBkYXRlZC4KKworICAgICAgICAqIFRlc3RFeHBlY3RhdGlv
bnM6CisKIDIwMjItMDItMDggIE1hdHQgV29vZHJvdyAgPG1hdHR3b29kcm93QGFwcGxlLmNvbT4K
IAogICAgICAgICBDb3B5IHRyYWNrIHNpemVzIGZyb20gcGFyZW50IGdyaWQgaW50byBzdWJncmlk
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMv
VGVzdEV4cGVjdGF0aW9ucwppbmRleCBhZDRkNmNlNjMxYjdlMDMyNDg2YjYxZjdhODA4ZTU4NjAz
NTAwMDI3Li43NDYzMzk2ZjA3OWJkNDY4ZjExMjM3ZmZiM2M4MDRkNjEyNjBjM2IzIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL1Rlc3RF
eHBlY3RhdGlvbnMKQEAgLTE0NDksNyArMTQ0OSw2IEBAIGltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQvb3J0aG9nb25hbC13cml0aW5nLW1vZGUtMDA0
CiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZ3JpZC9zdWJncmlkL3Bh
cmVudC1yZXBlYXQtYXV0by1maXQtMDAxLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQvcGFyZW50LXJl
cGVhdC1hdXRvLWZpdC0wMDIuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9yZXBlYXQtYXV0by1maWxs
LTAwMy5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2Nzcy9jc3MtZ3JpZC9zdWJncmlkL3N1YmdyaWQtaXRlbS1ibG9jay1zaXplLTAwMS5o
dG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L2Nzcy9jc3MtZ3JpZC9zdWJncmlkL3N1YmdyaWQtbWJwLW92ZXJmbG93LTAwMS5odG1sIFsgSW1h
Z2VPbmx5RmFpbHVyZSBdCiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mt
Z3JpZC9zdWJncmlkL3N1YmdyaWQtbWJwLW92ZXJmbG93LTAwMi5odG1sIFsgSW1hZ2VPbmx5RmFp
bHVyZSBdCiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZ3JpZC9zdWJn
cmlkL3N1YmdyaWQtbWJwLW92ZXJmbG93LTAwMy5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451970</attachid>
            <date>2022-02-14 17:38:12 -0800</date>
            <delta_ts>2022-02-15 10:55:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236337-20220215143810.patch</filename>
            <type>text/plain</type>
            <size>26069</size>
            <attacher name="Matt Woodrow">mattwoodrow</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5NzcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGRhYzg5MTQxMTZiOWQx
ZGE0OTVlZjIxZmYyZGQ3Y2NjYzMyMDJkYy4uYTFlMDJmNGE1ZDQzMTc4MDg0YjVhMmE3YTFjYzYy
YWMyYmQ2ZjZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDIyLTAyLTE1ICBNYXR0
IFdvb2Ryb3cgIDxtYXR0d29vZHJvd0BhcHBsZS5jb20+CisKKyAgICAgICAgSW5jbHVkZSBzdWJn
cmlkIGl0ZW1zIGluIGludHJpbnNpYyBzaXplIGNhbGN1bGF0aW9uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzYzMzcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICByZXNvbHZlSW50cmluc2ljVHJhY2tTaXpl
cyBhbmQgZmluZFVzZWRGbGV4RnJhY3Rpb24gbm93IHJlY3Vyc2UgaW50byBzdWJncmlkZGVkIGl0
ZW1zCisgICAgICAgIHRvIGl0ZXJhdGUgdGhlIGNoaWxkcmVuIHNhIGlmIHRoZXkgd2VyZSBkaXJl
Y3RseSBwYXJ0IG9mIHRoZSBvdXRlciBncmlkLgorICAgICAgICBOZXcgY29uc3RydWN0b3IgYWRk
ZWQgdG8gR3JpZEl0ZXJhdG9yIGZvciBjb25zdHJ1Y3RpbmcgYSBuZXcgaXRlcmF0b3IgZm9yIHRo
ZSBzdWJncmlkIGl0ZW1zLAorICAgICAgICB3aGljaCBhZGp1c3RzIHRoZSByb3cvY29sdW1uIGlu
ZGljZXMgaW50byB0aGUgbG9jYWwgY29vcmRpbmF0ZSBzcGFjZSBvZiB0aGUgc3ViZ3JpZC4KKyAg
ICAgICAgQWRkcyBhIG5ldyBtZXRob2QgdG8gcmVuZGVyR3JpZCAncGxhY2VJdGVtcycgc28gdGhh
dCB3ZSBjYW4gZW5zdXJlIHN1YmdyaWQgaXRlbXMgaGF2ZSBmaW5pc2hlZCBwbGFjZW1lbnQKKyAg
ICAgICAgd2hlbiBkb2luZyBzaXppbmcgZm9yIHRoZSBvdXRlciBncmlkLgorCisgICAgICAgIEV4
aXN0aW5nIHRlc3QgZXhwZWN0YXRpb25zIHVwZGF0ZWQuCisKKyAgICAgICAgKiByZW5kZXJpbmcv
R3JpZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmlkSXRlcmF0b3I6OkdyaWRJdGVyYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmlkSXRlcmF0b3I6Om5leHRHcmlkSXRlbSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmlkSXRlcmF0b3I6OmNyZWF0ZUZvclN1YmdyaWQpOgorICAgICAgICAqIHJl
bmRlcmluZy9HcmlkLmg6CisgICAgICAgIChXZWJDb3JlOjpHcmlkSXRlcmF0b3I6OmRpcmVjdGlv
biBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmVzdGltYXRl
ZEdyaWRBcmVhQnJlYWR0aEZvckNoaWxkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRU
cmFja1NpemluZ0FsZ29yaXRobTo6Z3JpZEFyZWFCcmVhZHRoRm9yQ2hpbGQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjppc0ludHJpbnNpY1NpemVk
R3JpZEFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3Jp
dGhtU3RyYXRlZ3k6Om1pblNpemVGb3JDaGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmlkVHJhY2tTaXppbmdBbGdvcml0aG06OnVwZGF0ZUJhc2VsaW5lQWxpZ25tZW50Q29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmJhc2VsaW5lT2Zm
c2V0Rm9yQ2hpbGQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZWZpbml0ZVNpemVTdHJh
dGVneTo6YWNjdW11bGF0ZUZsZXhGcmFjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bmRlZmluaXRlU2l6ZVN0cmF0ZWd5OjpmaW5kVXNlZEZsZXhGcmFjdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmFjY3VtdWxhdGVJbnRyaW5z
aWNTaXplc0ZvclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRUcmFja1NpemluZ0FsZ29y
aXRobTo6cmVzb2x2ZUludHJpbnNpY1RyYWNrU2l6ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9H
cmlkVHJhY2tTaXppbmdBbGdvcml0aG0uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3Jp
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFjZUl0ZW1zKToKKyAgICAg
ICAgKFdlYkNvcmU6Omluc2VydEludG9HcmlkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdy
aWQ6OnBsYWNlSXRlbXNPbkdyaWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3Jp
ZDo6cGxhY2VTcGVjaWZpZWRNYWpvckF4aXNJdGVtc09uR3JpZCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFjZUF1dG9NYWpvckF4aXNJdGVtT25HcmlkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmxheW91dEdyaWRJdGVtcyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJHcmlkOjppc1N1YmdyaWRJblBhcmVudERpcmVjdGlvbiBjb25zdCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckdyaWQuaDoKKwogMjAyMi0wMi0xNSAgTWF0dCBX
b29kcm93ICA8bWF0dHdvb2Ryb3dAYXBwbGUuY29tPgogCiAgICAgICAgIENvcHkgdHJhY2sgc2l6
ZXMgZnJvbSBwYXJlbnQgZ3JpZCBpbnRvIHN1YmdyaWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9HcmlkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkLmNw
cAppbmRleCAzN2NhOTNmMDNhNzIxYzIwYzM4MGZiYzdjMTFiODQxNjM5MDdhYjljLi4yNmQxZDhh
YmYzZGY0N2IxY2E4YmZmODNkODc1M2FjMzY2NTc4MzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvR3JpZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dy
aWQuY3BwCkBAIC0xOTcsNiArMTk3LDIyIEBAIEdyaWRJdGVyYXRvcjo6R3JpZEl0ZXJhdG9yKGNv
bnN0IEdyaWQmIGdyaWQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sCiAgICAg
LCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCiAgICAgLCBtX3Jvd0luZGV4KChkaXJlY3Rpb24gPT0g
Rm9yQ29sdW1ucykgPyB2YXJ5aW5nVHJhY2tJbmRleCA6IGZpeGVkVHJhY2tJbmRleCkKICAgICAs
IG1fY29sdW1uSW5kZXgoKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IGZpeGVkVHJhY2tJbmRl
eCA6IHZhcnlpbmdUcmFja0luZGV4KQorICAgICwgbV92YXJ5aW5nTWF4KChkaXJlY3Rpb24gPT0g
Rm9yQ29sdW1ucykgPyAodW5zaWduZWQpZ3JpZC5tX2dyaWQuc2l6ZSgpIDogKHVuc2lnbmVkKWdy
aWQubV9ncmlkWzBdLnNpemUoKSkKKyAgICAsIG1fY2hpbGRJbmRleCgwKQorCit7CisgICAgQVNT
RVJUKCFtX2dyaWQuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoIW1fZ3JpZFswXS5pc0VtcHR5KCkp
OworICAgIEFTU0VSVChtX3Jvd0luZGV4IDwgbV9ncmlkLnNpemUoKSk7CisgICAgQVNTRVJUKG1f
Y29sdW1uSW5kZXggPCBtX2dyaWRbMF0uc2l6ZSgpKTsKK30KKworR3JpZEl0ZXJhdG9yOjpHcmlk
SXRlcmF0b3IoY29uc3QgR3JpZCYgZ3JpZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVj
dGlvbiwgdW5zaWduZWQgcm93SW5kZXgsIHVuc2lnbmVkIGNvbHVtbkluZGV4LCB1bnNpZ25lZCB2
YXJ5aW5nTWF4KQorICAgIDogbV9ncmlkKGdyaWQubV9ncmlkKQorICAgICwgbV9kaXJlY3Rpb24o
ZGlyZWN0aW9uKQorICAgICwgbV9yb3dJbmRleChyb3dJbmRleCkKKyAgICAsIG1fY29sdW1uSW5k
ZXgoY29sdW1uSW5kZXgpCisgICAgLCBtX3ZhcnlpbmdNYXgodmFyeWluZ01heCkKICAgICAsIG1f
Y2hpbGRJbmRleCgwKQogewogICAgIEFTU0VSVCghbV9ncmlkLmlzRW1wdHkoKSk7CkBAIC0yMTEs
MTIgKzIyNywxMSBAQCBSZW5kZXJCb3gqIEdyaWRJdGVyYXRvcjo6bmV4dEdyaWRJdGVtKCkKICAg
ICBBU1NFUlQoIW1fZ3JpZFswXS5pc0VtcHR5KCkpOwogCiAgICAgdW5zaWduZWQmIHZhcnlpbmdU
cmFja0luZGV4ID0gKG1fZGlyZWN0aW9uID09IEZvckNvbHVtbnMpID8gbV9yb3dJbmRleCA6IG1f
Y29sdW1uSW5kZXg7Ci0gICAgY29uc3QgdW5zaWduZWQgZW5kT2ZWYXJ5aW5nVHJhY2tJbmRleCA9
IChtX2RpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IG1fZ3JpZC5zaXplKCkgOiBtX2dyaWRbMF0u
c2l6ZSgpOwotICAgIGZvciAoOyB2YXJ5aW5nVHJhY2tJbmRleCA8IGVuZE9mVmFyeWluZ1RyYWNr
SW5kZXg7ICsrdmFyeWluZ1RyYWNrSW5kZXgpIHsKKworICAgIGZvciAoOyB2YXJ5aW5nVHJhY2tJ
bmRleCA8IG1fdmFyeWluZ01heDsgKyt2YXJ5aW5nVHJhY2tJbmRleCkgewogICAgICAgICBjb25z
dCBhdXRvJiBjaGlsZHJlbiA9IG1fZ3JpZFttX3Jvd0luZGV4XVttX2NvbHVtbkluZGV4XTsKICAg
ICAgICAgaWYgKG1fY2hpbGRJbmRleCA8IGNoaWxkcmVuLnNpemUoKSkKICAgICAgICAgICAgIHJl
dHVybiBjaGlsZHJlblttX2NoaWxkSW5kZXgrK10uZ2V0KCk7Ci0KICAgICAgICAgbV9jaGlsZElu
ZGV4ID0gMDsKICAgICB9CiAgICAgcmV0dXJuIDA7CkBAIC0yNjksNCArMjg0LDU1IEBAIHN0ZDo6
dW5pcXVlX3B0cjxHcmlkQXJlYT4gR3JpZEl0ZXJhdG9yOjpuZXh0RW1wdHlHcmlkQXJlYSh1bnNp
Z25lZCBmaXhlZFRyYWNrU3BhCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK0dyaWRJdGVyYXRv
ciBHcmlkSXRlcmF0b3I6OmNyZWF0ZUZvclN1YmdyaWQoY29uc3QgUmVuZGVyR3JpZCYgc3ViZ3Jp
ZCwgY29uc3QgR3JpZEl0ZXJhdG9yJiBvdXRlcikKK3sKKyAgICBHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24gaW5uZXJEaXJlY3Rpb24gPSBvdXRlci5kaXJlY3Rpb24oKTsKKyAgICBBU1NFUlQoc3Vi
Z3JpZC5pc1N1YmdyaWRJblBhcmVudERpcmVjdGlvbihpbm5lckRpcmVjdGlvbikpOworICAgIEdy
aWRTcGFuIHNwYW5Sb3dzID0gZG93bmNhc3Q8UmVuZGVyR3JpZD4oc3ViZ3JpZC5wYXJlbnQoKSkt
PmdyaWRTcGFuRm9yQ2hpbGQoc3ViZ3JpZCwgRm9yUm93cyk7CisgICAgR3JpZFNwYW4gc3BhbkNv
bHVtbnMgPSBkb3duY2FzdDxSZW5kZXJHcmlkPihzdWJncmlkLnBhcmVudCgpKS0+Z3JpZFNwYW5G
b3JDaGlsZChzdWJncmlkLCBGb3JDb2x1bW5zKTsKKworICAgIC8vIFRyYW5zbGF0ZSB0aGUgY3Vy
cmVudCByb3cvY29sdW1uIGluZGljZXMgaW50byB0aGUgY29vcmRpbmF0ZQorICAgIC8vIHNwYWNl
IG9mIHRoZSBzdWJncmlkLgorICAgIHVuc2lnbmVkIHJvd0luZGV4ID0gb3V0ZXIubV9yb3dJbmRl
eCAtIHNwYW5Sb3dzLnN0YXJ0TGluZSgpOworICAgIHVuc2lnbmVkIGNvbEluZGV4ID0gb3V0ZXIu
bV9jb2x1bW5JbmRleC0gc3BhbkNvbHVtbnMuc3RhcnRMaW5lKCk7CisKKyAgICAvLyBJZiB0aGUg
Y2hpbGQgZ3JpZCBpcyB0cmFuc3Bvc2VkLCB0aGVuIHN3YXAgcm93L2NvbHVtbiBkZWZpbml0aW9u
cy4KKyAgICBpZiAoc3ViZ3JpZC5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICE9IHN1YmdyaWQu
cGFyZW50KCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKKyAgICAgICAgdW5zaWduZWQg
dGVtcCA9IHJvd0luZGV4OworICAgICAgICByb3dJbmRleCA9IGNvbEluZGV4OworICAgICAgICBj
b2xJbmRleCA9IHRlbXA7CisgICAgICAgIGlubmVyRGlyZWN0aW9uID0gKGlubmVyRGlyZWN0aW9u
ID09IEZvckNvbHVtbnMpID8gRm9yUm93cyA6IEZvckNvbHVtbnM7CisgICAgfQorICAgIEFTU0VS
VChzdWJncmlkLmlzU3ViZ3JpZChpbm5lckRpcmVjdGlvbikpOworCisgICAgdW5zaWduZWQgcm93
TWF4ID0gc3ViZ3JpZC5jdXJyZW50R3JpZCgpLm51bVRyYWNrcyhGb3JSb3dzKTsKKyAgICB1bnNp
Z25lZCBjb2xNYXggPSBzdWJncmlkLmN1cnJlbnRHcmlkKCkubnVtVHJhY2tzKEZvckNvbHVtbnMp
OworCisgICAgaWYgKHN1YmdyaWQuc3R5bGUoKS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkg
IT0gc3ViZ3JpZC5wYXJlbnQoKS0+c3R5bGUoKS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkp
CisgICAgICAgIHJvd0luZGV4ID0gcm93TWF4IC0gcm93SW5kZXggLSAxOworICAgIGlmIChzdWJn
cmlkLnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSAhPSBzdWJncmlkLnBhcmVu
dCgpLT5zdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpCisgICAgICAgIGNvbElu
ZGV4ID0gY29sTWF4IC0gY29sSW5kZXggLSAxOworCisgICAgLy8gSWYgd2UncmUgYWxzbyBhIHN1
YmdyaWQgaW4gdGhlIG90aGVyIGF4aXMsIHRoZW4gd2UgY2FuIGp1c3QgaXRlcmF0ZSB0aGUgc2lu
Z2xlCisgICAgLy8gdHJhY2sgaW4gdGhlIHN1YmdyaWQgd2hpY2ggY29ycmVzcG9uZHMgdG8gYSB0
cmFjayBpbiB0aGUgb3V0ZXIgZ3JpZC4gT3RoZXJ3aXNlIHdlIG5lZWQKKyAgICAvLyB0byBpdGVy
YXRlIGFsbCB0cmFja3MgaW4gdGhhdCBheGlzIHdpdGhpbiB0aGUgc3ViZ3JpZC4KKyAgICB1bnNp
Z25lZCB2YXJ5aW5nTWF4OworICAgIGlmIChzdWJncmlkLmlzU3ViZ3JpZCgoaW5uZXJEaXJlY3Rp
b24gPT0gRm9yQ29sdW1ucykgPyBGb3JSb3dzIDogRm9yQ29sdW1ucykpIHsKKyAgICAgICAgaWYg
KGlubmVyRGlyZWN0aW9uID09IEZvckNvbHVtbnMpCisgICAgICAgICAgICB2YXJ5aW5nTWF4ID0g
c3RkOjptaW4ocm93TWF4LCByb3dJbmRleCArIDEpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICB2YXJ5aW5nTWF4ID0gc3RkOjptaW4oY29sTWF4LCBjb2xJbmRleCArIDEpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmIChpbm5lckRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSB7CisgICAgICAg
ICAgICByb3dJbmRleCA9IDA7CisgICAgICAgICAgICB2YXJ5aW5nTWF4ID0gcm93TWF4OworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29sSW5kZXggPSAwOworICAgICAgICAgICAgdmFy
eWluZ01heCA9IGNvbE1heDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBHcmlkSXRl
cmF0b3Ioc3ViZ3JpZC5jdXJyZW50R3JpZCgpLCBpbm5lckRpcmVjdGlvbiwgcm93SW5kZXgsIGNv
bEluZGV4LCB2YXJ5aW5nTWF4KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWQuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9HcmlkLmgKaW5kZXggMTFkOWU2OGZiODE5OWZiY2E0ZDhiYTViMWJjYmY5YzgzMDk5
YzUzMi4uNmQwNTZkYzcxZjdiMDVkYzM0YTBiYTU2MTM5MzZmNDE5NjE1ODRjOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvR3JpZC5oCkBAIC0xMTYsMTUgKzExNiwyNSBAQCBwdWJsaWM6CiAgICAgLy8gR3Jp
ZEl0ZXJhdG9yKG1fZ3JpZCwgRm9yQ29sdW1ucywgMSkgd2lsbCB3YWxrIG92ZXIgdGhlIHJvd3Mg
b2YgdGhlIDJuZCBjb2x1bW4uCiAgICAgR3JpZEl0ZXJhdG9yKGNvbnN0IEdyaWQmLCBHcmlkVHJh
Y2tTaXppbmdEaXJlY3Rpb24sIHVuc2lnbmVkIGZpeGVkVHJhY2tJbmRleCwgdW5zaWduZWQgdmFy
eWluZ1RyYWNrSW5kZXggPSAwKTsKIAorICAgIHN0YXRpYyBHcmlkSXRlcmF0b3IgY3JlYXRlRm9y
U3ViZ3JpZChjb25zdCBSZW5kZXJHcmlkJiBzdWJncmlkLCBjb25zdCBHcmlkSXRlcmF0b3ImIG91
dGVyKTsKKwogICAgIFJlbmRlckJveCogbmV4dEdyaWRJdGVtKCk7CiAgICAgYm9vbCBpc0VtcHR5
QXJlYUVub3VnaCh1bnNpZ25lZCByb3dTcGFuLCB1bnNpZ25lZCBjb2x1bW5TcGFuKSBjb25zdDsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JpZEFyZWE+IG5leHRFbXB0eUdyaWRBcmVhKHVuc2lnbmVk
IGZpeGVkVHJhY2tTcGFuLCB1bnNpZ25lZCB2YXJ5aW5nVHJhY2tTcGFuKTsKIAorICAgIEdyaWRU
cmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fZGlyZWN0aW9uOworICAgIH0KKwogcHJpdmF0ZToKKyAgICBHcmlkSXRlcmF0b3IoY29u
c3QgR3JpZCYsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiwgdW5zaWduZWQgcm93SW5kZXgsIHVu
c2lnbmVkIGNvbHVtbkluZGV4LCB1bnNpZ25lZCB2YXJ5aW5nTWF4KTsKKwogICAgIGNvbnN0IEdy
aWRBc01hdHJpeCYgbV9ncmlkOwogICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBtX2RpcmVj
dGlvbjsKICAgICB1bnNpZ25lZCBtX3Jvd0luZGV4OwogICAgIHVuc2lnbmVkIG1fY29sdW1uSW5k
ZXg7CisgICAgdW5zaWduZWQgbV92YXJ5aW5nTWF4OwogICAgIHVuc2lnbmVkIG1fY2hpbGRJbmRl
eDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tT
aXppbmdBbGdvcml0aG0uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1Np
emluZ0FsZ29yaXRobS5jcHAKaW5kZXggN2RlM2JiODJiNzg3OTYzMzM1MjlmNDBiYzc5ZDQ5ZTkz
MzI3YmE3NC4uZjY1YzBmMDBiZmZkM2M5NTgzYzFjNDhhYzQ0YTA4ZTkzMDc2ZGZmYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRo
bS5jcHAKQEAgLTU4Nyw3ICs1ODcsNyBAQCB2b2lkIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6
ZGlzdHJpYnV0ZVNwYWNlVG9UcmFja3MoVmVjdG9yPEdyaWRUcmFjayo+JiB0cmFjawogCiBzdGQ6
Om9wdGlvbmFsPExheW91dFVuaXQ+IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6ZXN0aW1hdGVk
R3JpZEFyZWFCcmVhZHRoRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCwgR3JpZFRyYWNr
U2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikgY29uc3QKIHsKLSAgICBjb25zdCBHcmlkU3BhbiYg
c3BhbiA9IG1fZ3JpZC5ncmlkSXRlbVNwYW4oY2hpbGQsIGRpcmVjdGlvbik7CisgICAgY29uc3Qg
R3JpZFNwYW4mIHNwYW4gPSBtX3JlbmRlckdyaWQtPmdyaWRTcGFuRm9yQ2hpbGQoY2hpbGQsIGRp
cmVjdGlvbik7CiAgICAgTGF5b3V0VW5pdCBncmlkQXJlYVNpemU7CiAgICAgYm9vbCBncmlkQXJl
YUlzSW5kZWZpbml0ZSA9IGZhbHNlOwogICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gYXZh
aWxhYmxlU2l6ZSA9IGF2YWlsYWJsZVNwYWNlKGRpcmVjdGlvbik7CkBAIC02MjgsNyArNjI4LDcg
QEAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06Omdy
aWRBcmVhQnJlYWR0aEZvckNoaWxkKGNvbnMKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8R3Jp
ZFRyYWNrPiYgYWxsVHJhY2tzID0gdHJhY2tzKGRpcmVjdGlvbik7Ci0gICAgY29uc3QgR3JpZFNw
YW4mIHNwYW4gPSBtX2dyaWQuZ3JpZEl0ZW1TcGFuKGNoaWxkLCBkaXJlY3Rpb24pOworICAgIGNv
bnN0IEdyaWRTcGFuJiBzcGFuID0gbV9yZW5kZXJHcmlkLT5ncmlkU3BhbkZvckNoaWxkKGNoaWxk
LCBkaXJlY3Rpb24pOwogICAgIExheW91dFVuaXQgZ3JpZEFyZWFCcmVhZHRoOwogICAgIGZvciAo
YXV0byB0cmFja1Bvc2l0aW9uIDogc3BhbikKICAgICAgICAgZ3JpZEFyZWFCcmVhZHRoICs9IGFs
bFRyYWNrc1t0cmFja1Bvc2l0aW9uXS5iYXNlU2l6ZSgpOwpAQCAtNjUwLDcgKzY1MCw3IEBAIGJv
b2wgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjppc0ludHJpbnNpY1NpemVkR3JpZEFyZWEoY29u
c3QgUmVuZGVyQm94JiBjaGlsZCwKIHsKICAgICBBU1NFUlQod2FzU2V0dXAoKSk7CiAgICAgR3Jp
ZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiA9IGdyaWREaXJlY3Rpb25Gb3JBeGlzKGF4
aXMpOwotICAgIGNvbnN0IEdyaWRTcGFuJiBzcGFuID0gbV9ncmlkLmdyaWRJdGVtU3BhbihjaGls
ZCwgZGlyZWN0aW9uKTsKKyAgICBjb25zdCBHcmlkU3BhbiYgc3BhbiA9IG1fcmVuZGVyR3JpZC0+
Z3JpZFNwYW5Gb3JDaGlsZChjaGlsZCwgZGlyZWN0aW9uKTsKICAgICBmb3IgKGF1dG8gdHJhY2tQ
b3NpdGlvbiA6IHNwYW4pIHsKICAgICAgICAgY29uc3QgYXV0byYgdHJhY2tTaXplID0gcmF3R3Jp
ZFRyYWNrU2l6ZShkaXJlY3Rpb24sIHRyYWNrUG9zaXRpb24pOwogICAgICAgICAvLyBXZSBjb25z
aWRlciBmciB1bml0cyBhcyAnYXV0bycgZm9yIHRoZSBtaW4gc2l6aW5nIGZ1bmN0aW9uLgpAQCAt
ODU5LDcgKzg1OSw3IEBAIExheW91dFVuaXQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtU3RyYXRl
Z3k6Om1pblNpemVGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkKSBjCiAKICAgICBpZiAoY2hpbGRN
aW5TaXplLmlzQXV0bygpICYmIG92ZXJmbG93SXNWaXNpYmxlKSB7CiAgICAgICAgIGF1dG8gbWlu
U2l6ZSA9IG1pbkNvbnRlbnRGb3JDaGlsZChjaGlsZCk7Ci0gICAgICAgIGNvbnN0IEdyaWRTcGFu
JiBzcGFuID0gbV9hbGdvcml0aG0uZ3JpZCgpLmdyaWRJdGVtU3BhbihjaGlsZCwgZGlyZWN0aW9u
KCkpOworICAgICAgICBjb25zdCBHcmlkU3BhbiYgc3BhbiA9IG1fYWxnb3JpdGhtLm1fcmVuZGVy
R3JpZC0+Z3JpZFNwYW5Gb3JDaGlsZChjaGlsZCwgZGlyZWN0aW9uKCkpOwogCiAgICAgICAgIExh
eW91dFVuaXQgbWF4QnJlYWR0aDsKICAgICAgICAgYXV0byBhbGxUcmFja3MgPSBtX2FsZ29yaXRo
bS50cmFja3MoZGlyZWN0aW9uKCkpOwpAQCAtOTE4LDcgKzkxOCw3IEBAIHZvaWQgR3JpZFRyYWNr
U2l6aW5nQWxnb3JpdGhtOjp1cGRhdGVCYXNlbGluZUFsaWdubWVudENvbnRleHQoY29uc3QgUmVu
ZGVyQm94JiBjCiAgICAgQVNTRVJUKCFjaGlsZC5uZWVkc0xheW91dCgpKTsKIAogICAgIEl0ZW1Q
b3NpdGlvbiBhbGlnbiA9IG1fcmVuZGVyR3JpZC0+c2VsZkFsaWdubWVudEZvckNoaWxkKGJhc2Vs
aW5lQXhpcywgY2hpbGQpLnBvc2l0aW9uKCk7Ci0gICAgY29uc3QgYXV0byYgc3BhbiA9IG1fZ3Jp
ZC5ncmlkSXRlbVNwYW4oY2hpbGQsIGdyaWREaXJlY3Rpb25Gb3JBeGlzKGJhc2VsaW5lQXhpcykp
OworICAgIGNvbnN0IGF1dG8mIHNwYW4gPSBtX3JlbmRlckdyaWQtPmdyaWRTcGFuRm9yQ2hpbGQo
Y2hpbGQsIGdyaWREaXJlY3Rpb25Gb3JBeGlzKGJhc2VsaW5lQXhpcykpOwogICAgIG1fYmFzZWxp
bmVBbGlnbm1lbnQudXBkYXRlQmFzZWxpbmVBbGlnbm1lbnRDb250ZXh0KGFsaWduLCBzcGFuLnN0
YXJ0TGluZSgpLCBjaGlsZCwgYmFzZWxpbmVBeGlzKTsKIH0KIApAQCAtOTI4LDcgKzkyOCw3IEBA
IExheW91dFVuaXQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpiYXNlbGluZU9mZnNldEZvckNo
aWxkKGNvbnN0IFJlbmRlckJveCYgY2hpCiAgICAgICAgIHJldHVybiBMYXlvdXRVbml0KCk7CiAK
ICAgICBJdGVtUG9zaXRpb24gYWxpZ24gPSBtX3JlbmRlckdyaWQtPnNlbGZBbGlnbm1lbnRGb3JD
aGlsZChiYXNlbGluZUF4aXMsIGNoaWxkKS5wb3NpdGlvbigpOwotICAgIGNvbnN0IGF1dG8mIHNw
YW4gPSBtX2dyaWQuZ3JpZEl0ZW1TcGFuKGNoaWxkLCBncmlkRGlyZWN0aW9uRm9yQXhpcyhiYXNl
bGluZUF4aXMpKTsKKyAgICBjb25zdCBhdXRvJiBzcGFuID0gbV9yZW5kZXJHcmlkLT5ncmlkU3Bh
bkZvckNoaWxkKGNoaWxkLCBncmlkRGlyZWN0aW9uRm9yQXhpcyhiYXNlbGluZUF4aXMpKTsKICAg
ICByZXR1cm4gbV9iYXNlbGluZUFsaWdubWVudC5iYXNlbGluZU9mZnNldEZvckNoaWxkKGFsaWdu
LCBzcGFuLnN0YXJ0TGluZSgpLCBjaGlsZCwgYmFzZWxpbmVBeGlzKTsKIH0KIApAQCAtOTkwLDYg
Kzk5MCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCByZWNvbXB1dGVVc2VkRmxleEZyYWN0aW9uSWZO
ZWVkZWQoZG91YmxlJiBmbGV4RnJhY3Rpb24sIExheW91dFVuaXQmIHRvdGFsR3Jvd3RoKSBjb25z
dCBvdmVycmlkZTsKICAgICBMYXlvdXRVbml0IGZyZWVTcGFjZUZvclN0cmV0Y2hBdXRvVHJhY2tz
U3RlcCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgaXNDb21wdXRpbmdTaXplQ29udGFpbm1l
bnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzaG91bGRBcHBseVNpemVDb250YWlubWVudCgq
cmVuZGVyR3JpZCgpKTsgfQorICAgIHZvaWQgYWNjdW11bGF0ZUZsZXhGcmFjdGlvbihkb3VibGUm
IGZsZXhGcmFjdGlvbiwgR3JpZEl0ZXJhdG9yJiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIG91
dGVybW9zdERpcmVjdGlvbiwgSGFzaFNldDxSZW5kZXJCb3gqPiYgaXRlbXNTZXQpIGNvbnN0Owog
fTsKIAogdm9pZCBJbmRlZmluaXRlU2l6ZVN0cmF0ZWd5OjpsYXlvdXRHcmlkSXRlbUZvck1pblNp
emVDb21wdXRhdGlvbihSZW5kZXJCb3gmIGNoaWxkLCBib29sIG92ZXJyaWRlU2l6ZUhhc0NoYW5n
ZWQpIGNvbnN0CkBAIC0xMDEzLDYgKzEwMTQsMjggQEAgc3RhdGljIGlubGluZSBkb3VibGUgbm9y
bWFsaXplZEZsZXhGcmFjdGlvbihjb25zdCBHcmlkVHJhY2smIHRyYWNrKQogICAgIHJldHVybiB0
cmFjay5iYXNlU2l6ZSgpIC8gc3RkOjptYXg8ZG91YmxlPigxLCBmbGV4RmFjdG9yKTsKIH0KIAor
dm9pZCBJbmRlZmluaXRlU2l6ZVN0cmF0ZWd5OjphY2N1bXVsYXRlRmxleEZyYWN0aW9uKGRvdWJs
ZSYgZmxleEZyYWN0aW9uLCBHcmlkSXRlcmF0b3ImIGl0ZXJhdG9yLCBHcmlkVHJhY2tTaXppbmdE
aXJlY3Rpb24gb3V0ZXJtb3N0RGlyZWN0aW9uLCBIYXNoU2V0PFJlbmRlckJveCo+JiBpdGVtc1Nl
dCkgY29uc3QKK3sKKyAgICB3aGlsZSAoYXV0byogZ3JpZEl0ZW0gPSBpdGVyYXRvci5uZXh0R3Jp
ZEl0ZW0oKSkgeworICAgICAgICBpZiAoaXM8UmVuZGVyR3JpZD4oZ3JpZEl0ZW0pICYmIGRvd25j
YXN0PFJlbmRlckdyaWQ+KGdyaWRJdGVtKS0+aXNTdWJncmlkSW5QYXJlbnREaXJlY3Rpb24oaXRl
cmF0b3IuZGlyZWN0aW9uKCkpKSB7CisgICAgICAgICAgICBSZW5kZXJHcmlkKiBpbm5lciA9IGRv
d25jYXN0PFJlbmRlckdyaWQ+KGdyaWRJdGVtKTsKKworICAgICAgICAgICAgR3JpZEl0ZXJhdG9y
IGNoaWxkSXRlcmF0b3IgPSBHcmlkSXRlcmF0b3I6OmNyZWF0ZUZvclN1YmdyaWQoKmlubmVyLCBp
dGVyYXRvcik7CisgICAgICAgICAgICBhY2N1bXVsYXRlRmxleEZyYWN0aW9uKGZsZXhGcmFjdGlv
biwgY2hpbGRJdGVyYXRvciwgb3V0ZXJtb3N0RGlyZWN0aW9uLCBpdGVtc1NldCk7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBEbyBub3QgaW5jbHVkZSBhbHJl
YWR5IHByb2Nlc3NlZCBpdGVtcy4KKyAgICAgICAgaWYgKCFpdGVtc1NldC5hZGQoZ3JpZEl0ZW0p
LmlzTmV3RW50cnkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBHcmlkU3BhbiBz
cGFuID0gbV9hbGdvcml0aG0ucmVuZGVyR3JpZCgpLT5ncmlkU3BhbkZvckNoaWxkKCpncmlkSXRl
bSwgb3V0ZXJtb3N0RGlyZWN0aW9uKTsKKworICAgICAgICAvLyBSZW1vdmluZyBndXR0ZXJzIGZy
b20gdGhlIG1heC1jb250ZW50IGNvbnRyaWJ1dGlvbiBvZiB0aGUgaXRlbSwgc28gdGhleSBhcmUg
bm90IHRha2VuIGludG8gYWNjb3VudCBpbiBGaW5kRnJVbml0U2l6ZSgpLgorICAgICAgICBMYXlv
dXRVbml0IGxlZnRPdmVyU3BhY2UgPSBtYXhDb250ZW50Rm9yQ2hpbGQoKmdyaWRJdGVtKSAtIHJl
bmRlckdyaWQoKS0+Z3V0dGVyc1NpemUobV9hbGdvcml0aG0uZ3JpZCgpLCBvdXRlcm1vc3REaXJl
Y3Rpb24sIHNwYW4uc3RhcnRMaW5lKCksIHNwYW4uaW50ZWdlclNwYW4oKSwgYXZhaWxhYmxlU3Bh
Y2UoKSk7CisgICAgICAgIGZsZXhGcmFjdGlvbiA9IHN0ZDo6bWF4KGZsZXhGcmFjdGlvbiwgZmlu
ZEZyVW5pdFNpemUoc3BhbiwgbGVmdE92ZXJTcGFjZSkpOworICAgIH0KK30KKwogZG91YmxlIElu
ZGVmaW5pdGVTaXplU3RyYXRlZ3k6OmZpbmRVc2VkRmxleEZyYWN0aW9uKFZlY3Rvcjx1bnNpZ25l
ZD4mIGZsZXhpYmxlU2l6ZWRUcmFja3NJbmRleCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRp
cmVjdGlvbiwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBmcmVlU3BhY2UpIGNvbnN0CiB7CiAg
ICAgVU5VU0VEX1BBUkFNKGZyZWVTcGFjZSk7CkBAIC0xMDMyLDE3ICsxMDU1LDcgQEAgZG91Ymxl
IEluZGVmaW5pdGVTaXplU3RyYXRlZ3k6OmZpbmRVc2VkRmxleEZyYWN0aW9uKFZlY3Rvcjx1bnNp
Z25lZD4mIGZsZXhpYmxlU2kKICAgICBIYXNoU2V0PFJlbmRlckJveCo+IGl0ZW1zU2V0OwogICAg
IGZvciAoY29uc3QgYXV0byYgdHJhY2tJbmRleCA6IGZsZXhpYmxlU2l6ZWRUcmFja3NJbmRleCkg
ewogICAgICAgICBHcmlkSXRlcmF0b3IgaXRlcmF0b3IoZ3JpZCwgZGlyZWN0aW9uLCB0cmFja0lu
ZGV4KTsKLSAgICAgICAgd2hpbGUgKGF1dG8qIGdyaWRJdGVtID0gaXRlcmF0b3IubmV4dEdyaWRJ
dGVtKCkpIHsKLSAgICAgICAgICAgIC8vIERvIG5vdCBpbmNsdWRlIGFscmVhZHkgcHJvY2Vzc2Vk
IGl0ZW1zLgotICAgICAgICAgICAgaWYgKCFpdGVtc1NldC5hZGQoZ3JpZEl0ZW0pLmlzTmV3RW50
cnkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGNvbnN0IEdyaWRT
cGFuJiBzcGFuID0gZ3JpZC5ncmlkSXRlbVNwYW4oKmdyaWRJdGVtLCBkaXJlY3Rpb24pOwotCi0g
ICAgICAgICAgICAvLyBSZW1vdmluZyBndXR0ZXJzIGZyb20gdGhlIG1heC1jb250ZW50IGNvbnRy
aWJ1dGlvbiBvZiB0aGUgaXRlbSwgc28gdGhleSBhcmUgbm90IHRha2VuIGludG8gYWNjb3VudCBp
biBGaW5kRnJVbml0U2l6ZSgpLgotICAgICAgICAgICAgTGF5b3V0VW5pdCBsZWZ0T3ZlclNwYWNl
ID0gbWF4Q29udGVudEZvckNoaWxkKCpncmlkSXRlbSkgLSByZW5kZXJHcmlkKCktPmd1dHRlcnNT
aXplKG1fYWxnb3JpdGhtLmdyaWQoKSwgZGlyZWN0aW9uLCBzcGFuLnN0YXJ0TGluZSgpLCBzcGFu
LmludGVnZXJTcGFuKCksIGF2YWlsYWJsZVNwYWNlKCkpOwotICAgICAgICAgICAgZmxleEZyYWN0
aW9uID0gc3RkOjptYXgoZmxleEZyYWN0aW9uLCBmaW5kRnJVbml0U2l6ZShzcGFuLCBsZWZ0T3Zl
clNwYWNlKSk7Ci0gICAgICAgIH0KKyAgICAgICAgYWNjdW11bGF0ZUZsZXhGcmFjdGlvbihmbGV4
RnJhY3Rpb24sIGl0ZXJhdG9yLCBkaXJlY3Rpb24sIGl0ZW1zU2V0KTsKICAgICB9CiAKICAgICBy
ZXR1cm4gZmxleEZyYWN0aW9uOwpAQCAtMTIwOSw2ICsxMjIyLDMwIEBAIHZvaWQgR3JpZFRyYWNr
U2l6aW5nQWxnb3JpdGhtOjppbml0aWFsaXplVHJhY2tTaXplcygpCiAgICAgfQogfQogCit2b2lk
IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6YWNjdW11bGF0ZUludHJpbnNpY1NpemVzRm9yVHJh
Y2soR3JpZFRyYWNrJiB0cmFjaywgR3JpZEl0ZXJhdG9yJiBpdGVyYXRvciwgVmVjdG9yPEdyaWRJ
dGVtV2l0aFNwYW4+JiBpdGVtc1NvcnRlZEJ5SW5jcmVhc2luZ1NwYW4sIFZlY3RvcjxHcmlkSXRl
bVdpdGhTcGFuPiYgaXRlbXNDcm9zc2luZ0ZsZXhpYmxlVHJhY2tzLCBIYXNoU2V0PFJlbmRlckJv
eCo+JiBpdGVtc1NldCkKK3sKKyAgICB3aGlsZSAoYXV0byogZ3JpZEl0ZW0gPSBpdGVyYXRvci5u
ZXh0R3JpZEl0ZW0oKSkgeworICAgICAgICBib29sIGlzTmV3RW50cnkgPSBpdGVtc1NldC5hZGQo
Z3JpZEl0ZW0pLmlzTmV3RW50cnk7CisgICAgICAgIGlmIChpczxSZW5kZXJHcmlkPihncmlkSXRl
bSkgJiYgZG93bmNhc3Q8UmVuZGVyR3JpZD4oZ3JpZEl0ZW0pLT5pc1N1YmdyaWRJblBhcmVudERp
cmVjdGlvbihpdGVyYXRvci5kaXJlY3Rpb24oKSkpIHsKKyAgICAgICAgICAgIFJlbmRlckdyaWQq
IGlubmVyID0gZG93bmNhc3Q8UmVuZGVyR3JpZD4oZ3JpZEl0ZW0pOworCisgICAgICAgICAgICBH
cmlkSXRlcmF0b3IgY2hpbGRJdGVyYXRvciA9IEdyaWRJdGVyYXRvcjo6Y3JlYXRlRm9yU3ViZ3Jp
ZCgqaW5uZXIsIGl0ZXJhdG9yKTsKKyAgICAgICAgICAgIGFjY3VtdWxhdGVJbnRyaW5zaWNTaXpl
c0ZvclRyYWNrKHRyYWNrLCBjaGlsZEl0ZXJhdG9yLCBpdGVtc1NvcnRlZEJ5SW5jcmVhc2luZ1Nw
YW4sIGl0ZW1zQ3Jvc3NpbmdGbGV4aWJsZVRyYWNrcywgaXRlbXNTZXQpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc05ld0VudHJ5KQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIEdyaWRTcGFuIHNwYW4gPSBtX3JlbmRlckdyaWQtPmdyaWRT
cGFuRm9yQ2hpbGQoKmdyaWRJdGVtLCBtX2RpcmVjdGlvbik7CisKKyAgICAgICAgaWYgKHNwYW5u
aW5nSXRlbUNyb3NzZXNGbGV4aWJsZVNpemVkVHJhY2tzKHNwYW4pKQorICAgICAgICAgICAgaXRl
bXNDcm9zc2luZ0ZsZXhpYmxlVHJhY2tzLmFwcGVuZChHcmlkSXRlbVdpdGhTcGFuKCpncmlkSXRl
bSwgc3BhbikpOworICAgICAgICBlbHNlIGlmIChzcGFuLmludGVnZXJTcGFuKCkgPT0gMSkKKyAg
ICAgICAgICAgIHNpemVUcmFja1RvRml0Tm9uU3Bhbm5pbmdJdGVtKHNwYW4sICpncmlkSXRlbSwg
dHJhY2spOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpdGVtc1NvcnRlZEJ5SW5jcmVhc2lu
Z1NwYW4uYXBwZW5kKEdyaWRJdGVtV2l0aFNwYW4oKmdyaWRJdGVtLCBzcGFuKSk7CisgICAgfQor
fQorCiB2b2lkIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6cmVzb2x2ZUludHJpbnNpY1RyYWNr
U2l6ZXMoKQogewogICAgIFZlY3RvcjxHcmlkVHJhY2s+JiBhbGxUcmFja3MgPSB0cmFja3MobV9k
aXJlY3Rpb24pOwpAQCAtMTIyOCwyMiArMTI2NSwxMyBAQCB2b2lkIEdyaWRUcmFja1NpemluZ0Fs
Z29yaXRobTo6cmVzb2x2ZUludHJpbnNpY1RyYWNrU2l6ZXMoKQogICAgIFZlY3RvcjxHcmlkSXRl
bVdpdGhTcGFuPiBpdGVtc1NvcnRlZEJ5SW5jcmVhc2luZ1NwYW47CiAgICAgVmVjdG9yPEdyaWRJ
dGVtV2l0aFNwYW4+IGl0ZW1zQ3Jvc3NpbmdGbGV4aWJsZVRyYWNrczsKICAgICBIYXNoU2V0PFJl
bmRlckJveCo+IGl0ZW1zU2V0OworCiAgICAgaWYgKG1fZ3JpZC5oYXNHcmlkSXRlbXMoKSkgewog
ICAgICAgICBmb3IgKGF1dG8gdHJhY2tJbmRleCA6IG1fY29udGVudFNpemVkVHJhY2tzSW5kZXgp
IHsKICAgICAgICAgICAgIEdyaWRJdGVyYXRvciBpdGVyYXRvcihtX2dyaWQsIG1fZGlyZWN0aW9u
LCB0cmFja0luZGV4KTsKICAgICAgICAgICAgIEdyaWRUcmFjayYgdHJhY2sgPSBhbGxUcmFja3Nb
dHJhY2tJbmRleF07CiAKLSAgICAgICAgICAgIHdoaWxlIChhdXRvKiBncmlkSXRlbSA9IGl0ZXJh
dG9yLm5leHRHcmlkSXRlbSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZW1zU2V0LmFkZChn
cmlkSXRlbSkuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmlkU3Bh
biYgc3BhbiA9IG1fZ3JpZC5ncmlkSXRlbVNwYW4oKmdyaWRJdGVtLCBtX2RpcmVjdGlvbik7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChzcGFubmluZ0l0ZW1Dcm9zc2VzRmxleGlibGVTaXplZFRy
YWNrcyhzcGFuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zQ3Jvc3NpbmdGbGV4aWJs
ZVRyYWNrcy5hcHBlbmQoR3JpZEl0ZW1XaXRoU3BhbigqZ3JpZEl0ZW0sIHNwYW4pKTsKLSAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoc3Bhbi5pbnRlZ2VyU3BhbigpID09IDEpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzaXplVHJhY2tUb0ZpdE5vblNwYW5uaW5nSXRlbShzcGFuLCAqZ3Jp
ZEl0ZW0sIHRyYWNrKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICAgICAgaXRlbXNTb3J0ZWRCeUluY3JlYXNpbmdTcGFuLmFwcGVuZChHcmlkSXRlbVdpdGhT
cGFuKCpncmlkSXRlbSwgc3BhbikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGFjY3VtdWxhdGVJbnRyaW5zaWNTaXplc0ZvclRyYWNrKHRyYWNrLCBpdGVy
YXRvciwgaXRlbXNTb3J0ZWRCeUluY3JlYXNpbmdTcGFuLCBpdGVtc0Nyb3NzaW5nRmxleGlibGVU
cmFja3MsIGl0ZW1zU2V0KTsKICAgICAgICAgfQogICAgICAgICBzdGQ6OnNvcnQoaXRlbXNTb3J0
ZWRCeUluY3JlYXNpbmdTcGFuLmJlZ2luKCksIGl0ZW1zU29ydGVkQnlJbmNyZWFzaW5nU3Bhbi5l
bmQoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRU
cmFja1NpemluZ0FsZ29yaXRobS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFj
a1NpemluZ0FsZ29yaXRobS5oCmluZGV4IDU5NGQ1ZmFlOWFhY2FlZWNhNTBkOTAzOWRlMTY2ZTM0
NDMzNWQxMTguLmMwN2U1Mzg2ODE0MmI0M2RkZDhhYTY4ZjEwMDZiN2Y2ZWI2ZGI1M2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tTaXppbmdBbGdvcml0aG0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGht
LmgKQEAgLTU1LDYgKzU1LDcgQEAgZW51bSBjbGFzcyBTcGFjZURpc3RyaWJ1dGlvbkxpbWl0IDog
dWludDhfdCAgewogfTsKIAogY2xhc3MgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtU3RyYXRlZ3k7
CitjbGFzcyBHcmlkSXRlbVdpdGhTcGFuOwogCiBjbGFzcyBHcmlkVHJhY2sgewogcHVibGljOgpA
QCAtMTIxLDYgKzEyMiw4IEBAIHB1YmxpYzoKICAgICAvLyBhbmQgZW5jYXBzdWxhdGUgYW55IGFj
Y2VzcyBpbiB0aGUgYWxnb3JpdGhtIGNsYXNzLgogICAgIEdyaWQmIG11dGFibGVHcmlkKCkgY29u
c3QgeyByZXR1cm4gbV9ncmlkOyB9CiAKKyAgICBjb25zdCBSZW5kZXJHcmlkKiByZW5kZXJHcmlk
KCkgeyByZXR1cm4gbV9yZW5kZXJHcmlkOyB9OworCiAgICAgTGF5b3V0VW5pdCBtaW5Db250ZW50
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWluQ29udGVudFNpemU7IH07CiAgICAgTGF5b3V0VW5p
dCBtYXhDb250ZW50U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4Q29udGVudFNpemU7IH07CiAK
QEAgLTE5Myw2ICsxOTYsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgc3RyZXRjaEZsZXhpYmxlVHJh
Y2tzKHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gZnJlZVNwYWNlKTsKICAgICB2b2lkIHN0cmV0
Y2hBdXRvVHJhY2tzKCk7CiAKKyAgICB2b2lkIGFjY3VtdWxhdGVJbnRyaW5zaWNTaXplc0ZvclRy
YWNrKEdyaWRUcmFjayYsIEdyaWRJdGVyYXRvciYsIFZlY3RvcjxHcmlkSXRlbVdpdGhTcGFuPiYg
aXRlbXNTb3J0ZWRCeUluY3JlYXNpbmdTcGFuLCBWZWN0b3I8R3JpZEl0ZW1XaXRoU3Bhbj4mIGl0
ZW1zQ3Jvc3NpbmdGbGV4aWJsZVRyYWNrcywgSGFzaFNldDxSZW5kZXJCb3gqPiYgaXRlbXNTZXQp
OworCiAgICAgYm9vbCBjb3B5VXNlZFRyYWNrU2l6ZXNGb3JTdWJncmlkKCk7CiAKICAgICAvLyBT
dGF0ZSBtYWNoaW5lLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckdyaWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCmluZGV4
IGFmZjAwN2E1MGU5YTczYzJjOGVkZTYyYWVkYjdmZmNlMzNhYTg4M2UuLjU3NDYzYWRiOGUxMjg5
MDdmMzZjOGRhOTQxYTZlMzgyODgzNjRhN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJHcmlkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyR3JpZC5jcHAKQEAgLTY0Nyw2ICs2NDcsMjYgQEAgdW5zaWduZWQgUmVuZGVyR3JpZDo6Y2xh
bXBBdXRvUmVwZWF0VHJhY2tzKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sIHUK
ICAgICByZXR1cm4gc3RkOjptaW4oYXV0b1JlcGVhdFRyYWNrcywgbWF4VHJhY2tzIC0gaW5zZXJ0
aW9uUG9pbnQpOwogfQogCit2b2lkIFJlbmRlckdyaWQ6OnBsYWNlSXRlbXMoKQoreworICAgIHVw
ZGF0ZUxvZ2ljYWxXaWR0aCgpOworCisgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVTcGFjZUZvckNv
bHVtbnMgPSBhdmFpbGFibGVMb2dpY2FsV2lkdGgoKTsKKyAgICBwbGFjZUl0ZW1zT25HcmlkKG1f
dHJhY2tTaXppbmdBbGdvcml0aG0sIGF2YWlsYWJsZVNwYWNlRm9yQ29sdW1ucyk7Cit9CisKK3N0
YXRpYyBHcmlkQXJlYSBpbnNlcnRJbnRvR3JpZChHcmlkJiBncmlkLCBSZW5kZXJCb3gmIGNoaWxk
LCBjb25zdCBHcmlkQXJlYSYgYXJlYSkKK3sKKyAgICBHcmlkQXJlYSBjbGFtcGVkID0gZ3JpZC5p
bnNlcnQoY2hpbGQsIGFyZWEpOworICAgIGlmICghaXM8UmVuZGVyR3JpZD4oY2hpbGQpKQorICAg
ICAgICByZXR1cm4gY2xhbXBlZDsKKworICAgIFJlbmRlckdyaWQmIHJlbmRlckdyaWQgPSBkb3du
Y2FzdDxSZW5kZXJHcmlkPihjaGlsZCk7CisgICAgaWYgKHJlbmRlckdyaWQuaXNTdWJncmlkUm93
cygpIHx8IHJlbmRlckdyaWQuaXNTdWJncmlkQ29sdW1ucygpKQorICAgICAgICByZW5kZXJHcmlk
LnBsYWNlSXRlbXMoKTsKKyAgICByZXR1cm4gY2xhbXBlZDsKK30KKwogLy8gRklYTUU6IFdlIHNo
b3VsZG4ndCBoYXZlIHRvIHBhc3MgdGhlIGF2YWlsYWJsZSBsb2dpY2FsIHdpZHRoIGFzIGFyZ3Vt
ZW50LiBUaGUgcHJvYmxlbSBpcyB0aGF0CiAvLyBhdmFpbGFibGVMb2dpY2FsV2lkdGgoKSBkb2Vz
IGFsd2F5cyByZXR1cm4gYSB2YWx1ZSBldmVuIGlmIHdlIGNhbm5vdCByZXNvbHZlIGl0IGxpa2Ug
d2hlbgogLy8gY29tcHV0aW5nIHRoZSBpbnRyaW5zaWMgc2l6ZSAocHJlZmVycmVkIHdpZHRocyku
IFRoYXQncyB3aHkgd2UgcGFzcyB0aGUgcmVzcG9uc2liaWxpdHkgdG8gdGhlCkBAIC02OTYsNyAr
NzE2LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpwbGFjZUl0ZW1zT25HcmlkKEdyaWRUcmFja1Npemlu
Z0FsZ29yaXRobSYgYWxnb3JpdGhtLCBzdGQ6Om9wdGkKICAgICAgICAgICAgICAgICBzcGVjaWZp
ZWRNYWpvckF4aXNBdXRvR3JpZEl0ZW1zLmFwcGVuZChjaGlsZCk7CiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgfQotICAgICAgICBncmlkLmluc2VydCgqY2hpbGQsIHsgYXJlYS5yb3dz
LCBhcmVhLmNvbHVtbnMgfSk7CisgICAgICAgIGluc2VydEludG9HcmlkKGdyaWQsICpjaGlsZCwg
eyBhcmVhLnJvd3MsIGFyZWEuY29sdW1ucyB9KTsKICAgICB9CiAKICNpZiBBU1NFUlRfRU5BQkxF
RApAQCAtODI3LDcgKzg0Nyw3IEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VTcGVjaWZpZWRNYWpv
ckF4aXNJdGVtc09uR3JpZChHcmlkJiBncmlkLCBjb25zdCBWZWN0b3I8UmVuCiAgICAgICAgIGlm
ICghZW1wdHlHcmlkQXJlYSkKICAgICAgICAgICAgIGVtcHR5R3JpZEFyZWEgPSBjcmVhdGVFbXB0
eUdyaWRBcmVhQXRTcGVjaWZpZWRQb3NpdGlvbnNPdXRzaWRlR3JpZChncmlkLCAqYXV0b0dyaWRJ
dGVtLCBhdXRvUGxhY2VtZW50TWFqb3JBeGlzRGlyZWN0aW9uKCksIG1ham9yQXhpc1Bvc2l0aW9u
cyk7CiAKLSAgICAgICAgKmVtcHR5R3JpZEFyZWEgPSBncmlkLmluc2VydCgqYXV0b0dyaWRJdGVt
LCAqZW1wdHlHcmlkQXJlYSk7CisgICAgICAgICplbXB0eUdyaWRBcmVhID0gaW5zZXJ0SW50b0dy
aWQoZ3JpZCwgKmF1dG9HcmlkSXRlbSwgKmVtcHR5R3JpZEFyZWEpOwogCiAgICAgICAgIGlmICgh
aXNHcmlkQXV0b0Zsb3dEZW5zZSkKICAgICAgICAgICAgIG1pbm9yQXhpc0N1cnNvcnMuc2V0KG1h
am9yQXhpc0luaXRpYWxQb3NpdGlvbiwgaXNGb3JDb2x1bW5zID8gZW1wdHlHcmlkQXJlYS0+cm93
cy5zdGFydExpbmUoKSA6IGVtcHR5R3JpZEFyZWEtPmNvbHVtbnMuc3RhcnRMaW5lKCkpOwpAQCAt
ODk5LDcgKzkxOSw3IEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VBdXRvTWFqb3JBeGlzSXRlbU9u
R3JpZChHcmlkJiBncmlkLCBSZW5kZXJCb3gmIGdyaWRJdGVtLCBBCiAgICAgICAgICAgICBlbXB0
eUdyaWRBcmVhID0gY3JlYXRlRW1wdHlHcmlkQXJlYUF0U3BlY2lmaWVkUG9zaXRpb25zT3V0c2lk
ZUdyaWQoZ3JpZCwgZ3JpZEl0ZW0sIGF1dG9QbGFjZW1lbnRNaW5vckF4aXNEaXJlY3Rpb24oKSwg
R3JpZFNwYW46OnRyYW5zbGF0ZWREZWZpbml0ZUdyaWRTcGFuKDAsIG1pbm9yQXhpc1NwYW5TaXpl
KSk7CiAgICAgfQogCi0gICAgZ3JpZC5pbnNlcnQoZ3JpZEl0ZW0sICplbXB0eUdyaWRBcmVhKTsK
KyAgICAqZW1wdHlHcmlkQXJlYSA9IGluc2VydEludG9HcmlkKGdyaWQsIGdyaWRJdGVtLCAqZW1w
dHlHcmlkQXJlYSk7CiAgICAgYXV0b1BsYWNlbWVudEN1cnNvci5maXJzdCA9IGVtcHR5R3JpZEFy
ZWEtPnJvd3Muc3RhcnRMaW5lKCk7CiAgICAgYXV0b1BsYWNlbWVudEN1cnNvci5zZWNvbmQgPSBl
bXB0eUdyaWRBcmVhLT5jb2x1bW5zLnN0YXJ0TGluZSgpOwogfQpAQCAtMTAxMiwxMyArMTAzMiwx
NSBAQCB2b2lkIFJlbmRlckdyaWQ6OmxheW91dEdyaWRJdGVtcygpCiAgICAgcG9wdWxhdGVHcmlk
UG9zaXRpb25zRm9yRGlyZWN0aW9uKEZvclJvd3MpOwogCiAgICAgZm9yIChSZW5kZXJCb3gqIGNo
aWxkID0gZmlyc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdC
b3goKSkgewotICAgICAgICAKICAgICAgICAgaWYgKG1fZ3JpZC5vcmRlckl0ZXJhdG9yKCkuc2hv
dWxkU2tpcENoaWxkKCpjaGlsZCkpIHsKICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNPdXRPZkZs
b3dQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICAgICAgcHJlcGFyZUNoaWxkRm9yUG9zaXRpb25l
ZExheW91dCgqY2hpbGQpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAorICAg
ICAgICBpZiAoaXM8UmVuZGVyR3JpZD4oY2hpbGQpICYmIChkb3duY2FzdDxSZW5kZXJHcmlkPihj
aGlsZCktPmlzU3ViZ3JpZENvbHVtbnMoKSB8fCBkb3duY2FzdDxSZW5kZXJHcmlkPihjaGlsZCkt
PmlzU3ViZ3JpZFJvd3MoKSkpCisgICAgICAgICAgICBjaGlsZC0+c2V0TmVlZHNMYXlvdXQoTWFy
a09ubHlUaGlzKTsKKwogICAgICAgICAvLyBTZXR0aW5nIHRoZSBkZWZpbml0ZSBncmlkIGFyZWEn
cyBzaXplcy4gSXQgbWF5IGltcGx5IHRoYXQgdGhlCiAgICAgICAgIC8vIGl0ZW0gbXVzdCBwZXJm
b3JtIGEgbGF5b3V0IGlmIGl0cyBhcmVhIGRpZmZlcnMgZnJvbSB0aGUgb25lCiAgICAgICAgIC8v
IHVzZWQgZHVyaW5nIHRoZSB0cmFjayBzaXppbmcgYWxnb3JpdGhtLgpAQCAtMTY0NCw2ICsxNjY2
LDEyIEBAIGJvb2wgUmVuZGVyR3JpZDo6aXNTdWJncmlkQ29sdW1ucygpIGNvbnN0CiAgICAgcmV0
dXJuIGlzU3ViZ3JpZChGb3JDb2x1bW5zKTsKIH0KIAorYm9vbCBSZW5kZXJHcmlkOjppc1N1Ymdy
aWRJblBhcmVudERpcmVjdGlvbihHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gcGFyZW50RGlyZWN0
aW9uKSBjb25zdAoreworICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24gPSBH
cmlkTGF5b3V0RnVuY3Rpb25zOjpmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZCgqdGhpcywgKnBh
cmVudCgpLCBwYXJlbnREaXJlY3Rpb24pOworICAgIHJldHVybiBpc1N1YmdyaWQoZGlyZWN0aW9u
KTsKK30KKwogTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjpncmlkQXJlYUJyZWFkdGhGb3JPdXRPZkZs
b3dDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24g
ZGlyZWN0aW9uKQogewogICAgIEFTU0VSVChjaGlsZC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuaAppbmRleCBiZDBhNmRmN2YxNDc2NzQ5
ZWYzOGFiNWU3MTNmOTE5NjdiZDYxNDMwLi43NDc3ZTI3Y2IxM2RlMGI2MzYzNmMxM2E3ZDNhZjc1
MzVlYTcwYzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3Jp
ZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmgKQEAgLTg5LDYg
Kzg5LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNTdWJncmlkUm93cygpIGNvbnN0OwogICAgIGJv
b2wgaXNTdWJncmlkQ29sdW1ucygpIGNvbnN0OwogICAgIGJvb2wgaXNTdWJncmlkKEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbikgY29uc3Q7CisgICAgYm9vbCBpc1N1YmdyaWRJblBhcmVudERpcmVj
dGlvbihHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gcGFyZW50RGlyZWN0aW9uKSBjb25zdDsKIAog
ICAgIGNvbnN0IEdyaWQmIGN1cnJlbnRHcmlkKCkgY29uc3QKICAgICB7CkBAIC0xMDAsNiArMTAx
LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbnVtVHJhY2tzKGRpcmVjdGlvbiwgbV9ncmlk
KTsKICAgICB9CiAKKyAgICB2b2lkIHBsYWNlSXRlbXMoKTsKKwogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOwogCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZWI1ODU0OTMzYzQz
MGJiNmY0M2RkMDk4NWQ3M2U2NDFmYzk2YzczOC4uMGY5MTZlM2M2ZDk2MGM1NGNiYzU2ZDg5ZGI0
ZTE4Nzk0Mzc3MDFjNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMTAxLDYgKzEwMSwxNyBAQAogICAgICAgICBSZXZpZXdl
ZCBieSBTaW1vbiBGcmFzZXIuCiAKICAgICAgICAgKiBjb21wb3NpdGluZy9sYXllci1jcmVhdGlv
bi9tdWx0aXBsZS1rZXlmcmFtZXMtYW5pbWF0aW9uLW92ZXJsYXAtZXhwZWN0ZWQudHh0OgorICAg
ICAgICBJbmNsdWRlIHN1YmdyaWQgaXRlbXMgaW4gaW50cmluc2ljIHNpemUgY2FsY3VsYXRpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjMzNwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4aXN0aW5n
IHRlc3QgZXhwZWN0YXRpb25zIHVwZGF0ZWQuCisKKyAgICAgICAgKiBUZXN0RXhwZWN0YXRpb25z
OgorCisyMDIyLTAyLTA4ICBNYXR0IFdvb2Ryb3cgIDxtYXR0d29vZHJvd0BhcHBsZS5jb20+CisK
ICAgICAgICAgKiBjb21wb3NpdGluZy9sYXllci1jcmVhdGlvbi90cmFuc2xhdGUtc2NhbGUtYW5p
bWF0aW9uLW92ZXJsYXAtZXhwZWN0ZWQudHh0OgogCiAyMDIyLTAyLTEzICBGdWppaSBIaXJvbm9y
aSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvVGVz
dEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggNDYzM2Fh
N2I5NmFhNjhkYTFlZTQ0YWNkOWNjOTAxNWM4MjZiNTAxOC4uMGNmMGEwYjczNTQ3ZjA0YzI3Zjcz
NTc0OTllOWI0MjIyNjRiOWVhNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0
aW9ucworKysgYi9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCkBAIC0xNDI0LDcgKzE0MjQs
NiBAQCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZ3JpZC9zdWJncmlk
L3BhcmVudC1yZXBlYXQtYXV0by1maXQtMDAxLgogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9wYXJlbnQtcmVwZWF0LWF1dG8tZml0LTAwMi5odG1s
IFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nz
cy9jc3MtZ3JpZC9zdWJncmlkL3JlcGVhdC1hdXRvLWZpbGwtMDAzLmh0bWwgWyBJbWFnZU9ubHlG
YWlsdXJlIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1ncmlkL3N1
YmdyaWQvcmVwZWF0LWF1dG8tZmlsbC0wMDQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQotaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9zdWJncmlk
LWl0ZW0tYmxvY2stc2l6ZS0wMDEuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9zdWJncmlkLW1icC1v
dmVyZmxvdy0wMDEuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9zdWJncmlkLW1icC1vdmVyZmxvdy0w
MDIuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9zdWJncmlkLW1icC1vdmVyZmxvdy0wMDMuaHRtbCBb
IEltYWdlT25seUZhaWx1cmUgXQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451971</attachid>
            <date>2022-02-14 17:39:05 -0800</date>
            <delta_ts>2022-02-17 11:48:03 -0800</delta_ts>
            <desc>Patch for EWS</desc>
            <filename>ews-patch</filename>
            <type>text/plain</type>
            <size>118821</size>
            <attacher name="Matt Woodrow">mattwoodrow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3OWQzM2UwZDNkOTEuLjBmOTE2ZTNjNmQ5NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBA
CisyMDIyLTAyLTE1ICBNYXR0IFdvb2Ryb3cgIDxtYXR0d29vZHJvd0BhcHBsZS5jb20+CisKKyAg
ICAgICAgQ29weSB0cmFjayBzaXplcyBmcm9tIHBhcmVudCBncmlkIGludG8gc3ViZ3JpZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2MzM2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhpc3RpbmcgdGVz
dCBleHBlY3RhdGlvbnMgdXBkYXRlZC4KKworICAgICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6CisK
KzIwMjItMDItMTUgIE1hdHQgV29vZHJvdyAgPG1hdHR3b29kcm93QGFwcGxlLmNvbT4KKworICAg
ICAgICBMb29rdXAgbGluZSBuYW1lcyBmb3Igc3ViIGdyaWRzIHVzaW5nIGxpbmUgbmFtZXMgZnJv
bSBhbmNlc3RvciBncmlkcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjM2Mjg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVXBkYXRlIGV4cGVjdGF0aW9ucyBmb3IgbmV3bHkgcGFzc2luZyB0ZXN0cy4gCisK
KyAgICAgICAgKiBUZXN0RXhwZWN0YXRpb25zOgorCiAyMDIyLTAyLTA3ICBKb24gTGVlICA8am9u
bGVlQGFwcGxlLmNvbT4KIAogICAgICAgICBFbmFibGUgYWNjZWxlcmF0ZWQgZHJhd2luZyBpbiB0
aGUgaU9TIHNpbXVsYXRvcgpAQCAtNzksNiArMTAxLDE3IEBACiAgICAgICAgIFJldmlld2VkIGJ5
IFNpbW9uIEZyYXNlci4KIAogICAgICAgICAqIGNvbXBvc2l0aW5nL2xheWVyLWNyZWF0aW9uL211
bHRpcGxlLWtleWZyYW1lcy1hbmltYXRpb24tb3ZlcmxhcC1leHBlY3RlZC50eHQ6CisgICAgICAg
IEluY2x1ZGUgc3ViZ3JpZCBpdGVtcyBpbiBpbnRyaW5zaWMgc2l6ZSBjYWxjdWxhdGlvbgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2MzM3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhpc3RpbmcgdGVz
dCBleHBlY3RhdGlvbnMgdXBkYXRlZC4KKworICAgICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6CisK
KzIwMjItMDItMDggIE1hdHQgV29vZHJvdyAgPG1hdHR3b29kcm93QGFwcGxlLmNvbT4KKwogICAg
ICAgICAqIGNvbXBvc2l0aW5nL2xheWVyLWNyZWF0aW9uL3RyYW5zbGF0ZS1zY2FsZS1hbmltYXRp
b24tb3ZlcmxhcC1leHBlY3RlZC50eHQ6CiAKIDIwMjItMDItMTMgIEZ1amlpIEhpcm9ub3JpICA8
SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9UZXN0RXhw
ZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwppbmRleCA4ZmQzZWIwNzdj
M2YuLjBjZjBhMGI3MzU0NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9u
cworKysgYi9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCkBAIC0xNDAxLDYgKzE0MDEsNyBA
QCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZ3JpZC9tYXNvbnJ5L3Rl
bnRhdGl2ZS9tYXNvbnJ5LW9yZGVyLTAwMQogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9jc3MvY3NzLWdyaWQvbWFzb25yeS90ZW50YXRpdmUvbWFzb25yeS1zdWJncmlkLTAwMS5odG1s
IFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nz
cy9jc3MtZ3JpZC9tYXNvbnJ5L3RlbnRhdGl2ZS9tYXNvbnJ5LXN1YmdyaWQtMDAyLmh0bWwgWyBJ
bWFnZU9ubHlGYWlsdXJlIF0KIAoraW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3Mv
Y3NzLWdyaWQvc3ViZ3JpZC9hdXRvLXRyYWNrLXNpemluZy0wMDEuaHRtbCBbIEltYWdlT25seUZh
aWx1cmUgXQogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQvc3Vi
Z3JpZC9hYnMtcG9zLTAwMi5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBpbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZ3JpZC9zdWJncmlkL2Ficy1wb3MtMDAzLmh0bWwg
WyBJbWFnZU9ubHlGYWlsdXJlIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3Nz
L2Nzcy1ncmlkL3N1YmdyaWQvYWJzLXBvcy0wMDQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQpA
QCAtMTQwOSw0NSArMTQxMCwyNCBAQCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nz
cy9jc3MtZ3JpZC9zdWJncmlkL2dyaWQtZ2FwLTAwMS5odG1sIFsgSW1hZ2VPbgogaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9ncmlkLWdhcC0wMDIu
aHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9ncmlkLWdhcC0wMDMuaHRtbCBbIEltYWdlT25seUZhaWx1
cmUgXQogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQvc3ViZ3Jp
ZC9ncmlkLWdhcC0wMDQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9ncmlkLWdhcC0wMDUuaHRtbCBb
IEltYWdlT25seUZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3Mv
Y3NzLWdyaWQvc3ViZ3JpZC9ncmlkLWdhcC0wMDYuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQog
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9ncmlk
LWdhcC0wMDcuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9ncmlkLWdhcC0wMDguaHRtbCBbIEltYWdl
T25seUZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWdy
aWQvc3ViZ3JpZC9ncmlkLWdhcC0wMDkuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9ncmlkLWdhcC1s
YXJnZXItMDAxLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQvZ3JpZC1nYXAtbGFyZ2VyLTAwMi5odG1s
IFsgSW1hZ2VPbmx5RmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nz
cy9jc3MtZ3JpZC9zdWJncmlkL2dyaWQtZ2FwLW5vcm1hbC0wMDEuaHRtbCBbIEltYWdlT25seUZh
aWx1cmUgXQogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQvc3Vi
Z3JpZC9ncmlkLWdhcC1zbWFsbGVyLTAwMS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBpbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZ3JpZC9zdWJncmlkL2l0ZW0tcGVy
Y2VudGFnZS1oZWlnaHQtMDAxLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KLWltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQvbGluZS1uYW1lcy0wMDEu
aHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9saW5lLW5hbWVzLTAwMi5odG1sIFsgSW1hZ2VPbmx5RmFp
bHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZ3JpZC9zdWJn
cmlkL2xpbmUtbmFtZXMtMDAzLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KLWltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQvbGluZS1uYW1lcy0wMDQu
aHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9saW5lLW5hbWVzLTAwNS5odG1sIFsgSW1hZ2VPbmx5RmFp
bHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZ3JpZC9zdWJn
cmlkL2xpbmUtbmFtZXMtMDA2Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQvbGluZS1uYW1lcy0wMDcu
aHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9saW5lLW5hbWVzLTAwOC5odG1sIFsgSW1hZ2VPbmx5RmFp
bHVyZSBdCiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZ3JpZC9zdWJn
cmlkL29ydGhvZ29uYWwtd3JpdGluZy1tb2RlLTAwMS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBd
CiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZ3JpZC9zdWJncmlkL29y
dGhvZ29uYWwtd3JpdGluZy1tb2RlLTAwMi5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBpbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZ3JpZC9zdWJncmlkL29ydGhvZ29u
YWwtd3JpdGluZy1tb2RlLTAwMy5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBpbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZ3JpZC9zdWJncmlkL29ydGhvZ29uYWwtd3Jp
dGluZy1tb2RlLTAwNC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBpbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZ3JpZC9zdWJncmlkL3BhcmVudC1yZXBlYXQtYXV0by1m
aXQtMDAxLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQvcGFyZW50LXJlcGVhdC1hdXRvLWZpdC0wMDIu
aHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9yZXBlYXQtYXV0by1maWxsLTAwMS5odG1sIFsgSW1hZ2VP
bmx5RmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZ3Jp
ZC9zdWJncmlkL3JlcGVhdC1hdXRvLWZpbGwtMDAyLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0K
IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQvcmVw
ZWF0LWF1dG8tZmlsbC0wMDMuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9yZXBlYXQtYXV0by1maWxs
LTAwNC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCi1pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2Nzcy9jc3MtZ3JpZC9zdWJncmlkL3JlcGVhdC1hdXRvLWZpbGwtMDA1Lmh0bWwgWyBJ
bWFnZU9ubHlGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nz
cy1ncmlkL3N1YmdyaWQvcmVwZWF0LWF1dG8tZmlsbC0wMDYuaHRtbCBbIEltYWdlT25seUZhaWx1
cmUgXQotaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQvc3ViZ3Jp
ZC9yZXBlYXQtYXV0by1maWxsLTAwNy5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCi1pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZ3JpZC9zdWJncmlkL3JlcGVhdC1hdXRv
LWZpbGwtMDA4Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQvc3ViZ3JpZC1pdGVtLWJsb2NrLXNpemUt
MDAxLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQvc3ViZ3JpZC1tYnAtb3ZlcmZsb3ctMDAxLmh0bWwg
WyBJbWFnZU9ubHlGYWlsdXJlIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3Nz
L2Nzcy1ncmlkL3N1YmdyaWQvc3ViZ3JpZC1tYnAtb3ZlcmZsb3ctMDAyLmh0bWwgWyBJbWFnZU9u
bHlGYWlsdXJlIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1ncmlk
L3N1YmdyaWQvc3ViZ3JpZC1tYnAtb3ZlcmZsb3ctMDAzLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJl
IF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQv
c3ViZ3JpZC1tYnAtb3ZlcmZsb3ctMDA0Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KLWltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQvZ3JpZC1zdWJn
cmlkZGVkLWF4aXMtYXV0by1yZXBlYXRlci1jcmFzaC0wMDEuaHRtbCBbIENyYXNoIF0KLWltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQvZ3JpZC1zdWJn
cmlkZGVkLWF4aXMtYXV0by1yZXBlYXRlci1jcmFzaC0wMDIuaHRtbCBbIENyYXNoIF0KIAogd2Vi
a2l0Lm9yZy9iLzE0OTg5MCBmYXN0L2Nzcy1ncmlkLWxheW91dC9ncmlkLXNob3J0aGFuZHMtc3R5
bGUtZm9ybWF0Lmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xOTE1MDggZmFzdC9jc3Mt
Z3JpZC1sYXlvdXQvY3Jhc2gtbGFyZ2UtcG9zaXRpb25zLmh0bWwgWyBTa2lwIF0KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2MvQ2hhbmdlTG9nCmluZGV4IGYxNjkzNjYyNDU4YS4uYjMyMjk5MGE4YTU3IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAyMi0wMi0xNSAg
TWF0dCBXb29kcm93ICA8bWF0dHdvb2Ryb3dAYXBwbGUuY29tPgorCisgICAgICAgIExvb2t1cCBs
aW5lIG5hbWVzIGZvciBzdWIgZ3JpZHMgdXNpbmcgbGluZSBuYW1lcyBmcm9tIGFuY2VzdG9yIGdy
aWRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzYy
ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdl
Yi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9ncmlkLXN1YmdyaWRkZWQtYXhp
cy1hdXRvLXJlcGVhdGVyLWNyYXNoLTAwMS1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2ViLXBs
YXRmb3JtLXRlc3RzL2Nzcy9jc3MtZ3JpZC9zdWJncmlkL2xpbmUtbmFtZXMtMDA1LWV4cGVjdGVk
Lmh0bWw6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZ3JpZC9zdWJncmlk
L2xpbmUtbmFtZXMtMDA1Lmh0bWw6CisKKyAgICAgICAgTWFrZSBsaW5lLW5hbWVzLTAwNS5odG1s
IHNsaWdodGx5IGhhcmRlciBieSBoYXZpbmcgdGhlIG11bHRpcGxlIGRlZmluaXRpb25zIG9mIHRo
ZSAnYScgZ3JpZCBhcmVhIGJlIGRpZmZlcmVudCBhdCBib3RoIGVkZ2VzLgorCisyMDIyLTAyLTE1
ICBNYXR0IFdvb2Ryb3cgIDxtYXR0d29vZHJvd0BhcHBsZS5jb20+CisKKyAgICAgICAgSW5oZXJp
dCB0cmFjayBjb3VudCBmcm9tIHBhcmVudCBncmlkIGZvciBzdWJncmlkZGVkIGF4ZXMgYW5kIGNs
YW1wIGl0ZW0gcGxhY2VtZW50IHRvIHRoYXQgZXhwbGljaXQgZ3JpZC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjEyMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3QgY2hhbmdlcyB0byBtYXRjaCBs
YXRlc3Qgc3BlYywgc3VibWl0dGVkIHVwc3RyZWFtIGFzIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWIt
cGxhdGZvcm0tdGVzdHMvd3B0L3B1bGwvMzI2MjkKKworICAgICAgICAqIHdlYi1wbGF0Zm9ybS10
ZXN0cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9saW5lLW5hbWVzLTAwMi1leHBlY3RlZC5odG1sOgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9saW5lLW5h
bWVzLTAwNS1leHBlY3RlZC5odG1sOgorCiAyMDIyLTAyLTE0ICBBbnR0aSBLb2l2aXN0byAgPGFu
dHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ1NTIENvbnRhaW5lciBRdWVyaWVzXSBJbXBsZW1l
bnQgZnVsbCBxdWVyeSBwYXJzZXIgYW5kIGV2YWx1YXRvcgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9n
cmlkLXN1YmdyaWRkZWQtYXhpcy1hdXRvLXJlcGVhdGVyLWNyYXNoLTAwMS1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZ3Jp
ZC9zdWJncmlkL2dyaWQtc3ViZ3JpZGRlZC1heGlzLWF1dG8tcmVwZWF0ZXItY3Jhc2gtMDAxLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmNlNTY5
YzdlNTZkOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQvZ3JpZC1zdWJncmlkZGVkLWF4aXMt
YXV0by1yZXBlYXRlci1jcmFzaC0wMDEtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNyBAQAorbGF5
ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlclZpZXcgYXQgKDAsMCkgc2l6ZSA4MDB4
NjAwCitsYXllciBhdCAoMCwwKSBzaXplIDgwMHgxNgorICBSZW5kZXJCbG9jayB7SFRNTH0gYXQg
KDAsMCkgc2l6ZSA4MDB4MTYKKyAgICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc4
NHgwCisgICAgICBSZW5kZXJHcmlkIHtESVZ9IGF0ICgwLDApIHNpemUgNzg0eDAKKyAgICAgICAg
UmVuZGVyQmxvY2sge0RJVn0gYXQgKDM5MiwwKSBzaXplIDM5MngwCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZ3JpZC9zdWJn
cmlkL2dyaWQtc3ViZ3JpZGRlZC1heGlzLWF1dG8tcmVwZWF0ZXItY3Jhc2gtMDAyLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nz
cy1ncmlkL3N1YmdyaWQvZ3JpZC1zdWJncmlkZGVkLWF4aXMtYXV0by1yZXBlYXRlci1jcmFzaC0w
MDItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u
ZGI2M2E1ZjZiMzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9ncmlkLXN1YmdyaWRkZWQt
YXhpcy1hdXRvLXJlcGVhdGVyLWNyYXNoLTAwMi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBA
CitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXpl
IDgwMHg2MDAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDgKKyAgUmVuZGVyQmxvY2sge0hUTUx9
IGF0ICgwLDApIHNpemUgODAweDgKKyAgICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXpl
IDc4NHgwCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2Nzcy9jc3MtZ3JpZC9zdWJncmlkL2xpbmUtbmFtZXMtMDAyLWV4cGVjdGVkLmh0bWwg
Yi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZ3Jp
ZC9zdWJncmlkL2xpbmUtbmFtZXMtMDAyLWV4cGVjdGVkLmh0bWwKaW5kZXggMDRjNTgzOTU5NmM5
Li4yMzk5MzI4YmVjYzQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQvbGluZS1uYW1lcy0wMDItZXhwZWN0
ZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L2Nzcy9jc3MtZ3JpZC9zdWJncmlkL2xpbmUtbmFtZXMtMDAyLWV4cGVjdGVkLmh0bWwKQEAgLTE0
LDcgKzE0LDcgQEAgaHRtbCxib2R5IHsKIAogLmdyaWQgewogICBkaXNwbGF5OiBncmlkOwotICBn
cmlkOiBhdXRvIC8gW2FdIDUwcHggNTBweCBbYV0gNTBweCA1MHB4IFthXTsKKyAgZ3JpZDogYXV0
byAvIFthXSA1MHB4IDQwcHggW2FdIDEwcHggNTBweCBbYV07CiAgIHBhZGRpbmc6IDIwcHggMTBw
eDsKIH0KIApAQCAtMzIsNyArMzIsNyBAQCB4IHsgYmFja2dyb3VuZDogZ3JleTsgfQogCiA8ZGl2
IGNsYXNzPSJncmlkIj4KICAgPGRpdiBjbGFzcz0ic3ViZ3JpZCI+Ci0gICAgPHggc3R5bGU9Imdy
aWQtY29sdW1uOiAxIC8gMyI+PC94PgorICAgIDx4IHN0eWxlPSJncmlkLWNvbHVtbjogMyAvIDQi
PjwveD4KICAgPC9kaXY+CiA8L2Rpdj4KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9saW5lLW5hbWVz
LTAwNS1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9saW5lLW5hbWVzLTAwNS1leHBlY3RlZC5odG1s
CmluZGV4IDRjN2Y0YjUwZmQxNi4uNDRiYjBlMGRiYmM2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZ3JpZC9zdWJncmlkL2xp
bmUtbmFtZXMtMDA1LWV4cGVjdGVkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9saW5lLW5hbWVzLTAwNS1l
eHBlY3RlZC5odG1sCkBAIC0xMTUsNyArMTE1LDcgQEAgeCB7CiA8ZGl2IHN0eWxlPSJkaXNwbGF5
OmdyaWQ7IHdpZHRoOjUwMHB4OyBncmlkLWF1dG8tY29sdW1uczogNTBweDsiPgogPGk+PC9pPjxp
PjwvaT48aT48L2k+PGk+PC9pPjxpPjwvaT48aT48L2k+PGk+PC9pPjxpPjwvaT48aT48L2k+PGk+
PC9pPgogICA8ZGl2IGNsYXNzPSJzdWJncmlkMiI+Ci0gICAgPHggc3R5bGU9ImdyaWQtY29sdW1u
OiBzcGFuIDQgLyAxMSI+eDwveD4KKyAgICA8eCBzdHlsZT0iZ3JpZC1jb2x1bW46IHNwYW4gMyAv
IDExIj54PC94PgogICA8L2Rpdj4KIDwvZGl2PgogCkBAIC0xMjksNyArMTI5LDcgQEAgeCB7CiA8
ZGl2IHN0eWxlPSJkaXNwbGF5OmdyaWQ7IGdyaWQ6IGF1dG8gLyByZXBlYXQoMTAsIDUwcHgpIHJl
cGVhdCgxMCwgW2FdIDUwcHgpIFthXSI+CiA8aT48L2k+PGk+PC9pPjxpPjwvaT48aT48L2k+PGk+
PC9pPjxpPjwvaT48aT48L2k+PGk+PC9pPjxpPjwvaT48aT48L2k+CiAgIDxkaXYgc3R5bGU9ImRp
c3BsYXk6Z3JpZDsgZ3JpZDphdXRvL3N1YmdyaWQ7IGdyaWQtY29sdW1uOiBzcGFuIDEwOyBncmlk
LXJvdzoyIj4KLSAgICA8eCBzdHlsZT0iZ3JpZC1jb2x1bW46IDEgLyAxMSI+eDwveD4KKyAgICA8
eCBzdHlsZT0iZ3JpZC1jb2x1bW46IDEwIC8gMTEiPng8L3g+CiAgIDwvZGl2PgogPC9kaXY+CiAK
QEAgLTE0MSwxMCArMTQxLDEwIEBAIHggewogPC9kaXY+CiAKIDxkaXYgc3R5bGU9J2Rpc3BsYXk6
Z3JpZDsgZ3JpZC10ZW1wbGF0ZS1hcmVhczogIi4gLiAuIC4gLiAuIGEgYSBhIGEiJz4KLTxkaXYg
c3R5bGU9J2Rpc3BsYXk6Z3JpZDsgZ3JpZC10ZW1wbGF0ZS1hcmVhczogIi4gLiAuIC4gLiAuIC4g
YSBhIGEiOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6c3ViZ3JpZDsgZ3JpZC1jb2x1bW46c3BhbiAx
MDsnPgorPGRpdiBzdHlsZT0nZGlzcGxheTpncmlkOyBncmlkLXRlbXBsYXRlLWFyZWFzOiAiLiAu
IC4gLiAuIC4gLiBhIGEgLiI7IGdyaWQtdGVtcGxhdGUtY29sdW1uczpzdWJncmlkOyBncmlkLWNv
bHVtbjpzcGFuIDEwOyc+CiA8aT48L2k+PGk+PC9pPjxpPjwvaT48aT48L2k+PGk+PC9pPjxpPjwv
aT48aT48L2k+PGk+PC9pPjxpPjwvaT48aT48L2k+CiAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6Z3Jp
ZDsgZ3JpZDphdXRvL3N1YmdyaWQ7IGdyaWQtY29sdW1uOiA2IC8gc3BhbiA1OyBncmlkLXJvdzoy
Ij4KLSAgICA8eCBzdHlsZT0iZ3JpZC1jb2x1bW46IDIgLyA2Ij54PC94PgorICAgIDx4IHN0eWxl
PSJncmlkLWNvbHVtbjogMiAvIDUiPng8L3g+CiAgIDwvZGl2PgogPC9kaXY+CiA8L2Rpdj4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3Nz
L2Nzcy1ncmlkL3N1YmdyaWQvbGluZS1uYW1lcy0wMDUuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQvbGluZS1uYW1l
cy0wMDUuaHRtbAppbmRleCBkN2JjZjdhN2U3YjAuLjI2YmU4OTllOTNlZCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQv
c3ViZ3JpZC9saW5lLW5hbWVzLTAwNS5odG1sCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQvbGluZS1uYW1lcy0wMDUu
aHRtbApAQCAtMTQzLDcgKzE0Myw3IEBAIHggewogPC9kaXY+CiAKIDxkaXYgc3R5bGU9J2Rpc3Bs
YXk6Z3JpZDsgZ3JpZC10ZW1wbGF0ZS1hcmVhczogIi4gLiAuIC4gLiAuIGEgYSBhIGEiJz4KLTxk
aXYgc3R5bGU9J2Rpc3BsYXk6Z3JpZDsgZ3JpZC10ZW1wbGF0ZS1hcmVhczogIi4gLiAuIC4gLiAu
IC4gYSBhIGEiOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6c3ViZ3JpZDsgZ3JpZC1jb2x1bW46c3Bh
biAxMDsnPgorPGRpdiBzdHlsZT0nZGlzcGxheTpncmlkOyBncmlkLXRlbXBsYXRlLWFyZWFzOiAi
LiAuIC4gLiAuIC4gLiBhIGEgLiI7IGdyaWQtdGVtcGxhdGUtY29sdW1uczpzdWJncmlkOyBncmlk
LWNvbHVtbjpzcGFuIDEwOyc+CiA8aT48L2k+PGk+PC9pPjxpPjwvaT48aT48L2k+PGk+PC9pPjxp
PjwvaT48aT48L2k+PGk+PC9pPjxpPjwvaT48aT48L2k+CiAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6
Z3JpZDsgZ3JpZDphdXRvL3N1YmdyaWQ7IGdyaWQtY29sdW1uOiA2IC8gc3BhbiA1OyBncmlkLXJv
dzoyIj4KICAgICA8eCBzdHlsZT0iZ3JpZC1jb2x1bW46IGEiPng8L3g+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MzBjNDg5N2UxMWI0Li5hMWUwMmY0YTVkNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNTkgQEAK
KzIwMjItMDItMTUgIE1hdHQgV29vZHJvdyAgPG1hdHR3b29kcm93QGFwcGxlLmNvbT4KKworICAg
ICAgICBJbmNsdWRlIHN1YmdyaWQgaXRlbXMgaW4gaW50cmluc2ljIHNpemUgY2FsY3VsYXRpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjMzNwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIHJlc29sdmVJ
bnRyaW5zaWNUcmFja1NpemVzIGFuZCBmaW5kVXNlZEZsZXhGcmFjdGlvbiBub3cgcmVjdXJzZSBp
bnRvIHN1YmdyaWRkZWQgaXRlbXMKKyAgICAgICAgdG8gaXRlcmF0ZSB0aGUgY2hpbGRyZW4gc2Eg
aWYgdGhleSB3ZXJlIGRpcmVjdGx5IHBhcnQgb2YgdGhlIG91dGVyIGdyaWQuCisgICAgICAgIE5l
dyBjb25zdHJ1Y3RvciBhZGRlZCB0byBHcmlkSXRlcmF0b3IgZm9yIGNvbnN0cnVjdGluZyBhIG5l
dyBpdGVyYXRvciBmb3IgdGhlIHN1YmdyaWQgaXRlbXMsCisgICAgICAgIHdoaWNoIGFkanVzdHMg
dGhlIHJvdy9jb2x1bW4gaW5kaWNlcyBpbnRvIHRoZSBsb2NhbCBjb29yZGluYXRlIHNwYWNlIG9m
IHRoZSBzdWJncmlkLgorICAgICAgICBBZGRzIGEgbmV3IG1ldGhvZCB0byByZW5kZXJHcmlkICdw
bGFjZUl0ZW1zJyBzbyB0aGF0IHdlIGNhbiBlbnN1cmUgc3ViZ3JpZCBpdGVtcyBoYXZlIGZpbmlz
aGVkIHBsYWNlbWVudAorICAgICAgICB3aGVuIGRvaW5nIHNpemluZyBmb3IgdGhlIG91dGVyIGdy
aWQuCisKKyAgICAgICAgRXhpc3RpbmcgdGVzdCBleHBlY3RhdGlvbnMgdXBkYXRlZC4KKworICAg
ICAgICAqIHJlbmRlcmluZy9HcmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRJdGVyYXRv
cjo6R3JpZEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRJdGVyYXRvcjo6bmV4dEdy
aWRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRJdGVyYXRvcjo6Y3JlYXRlRm9yU3ViZ3Jp
ZCk6CisgICAgICAgICogcmVuZGVyaW5nL0dyaWQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRJ
dGVyYXRvcjo6ZGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvR3JpZFRyYWNr
U2l6aW5nQWxnb3JpdGhtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRUcmFja1NpemluZ0Fs
Z29yaXRobTo6ZXN0aW1hdGVkR3JpZEFyZWFCcmVhZHRoRm9yQ2hpbGQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpncmlkQXJlYUJyZWFkdGhGb3JD
aGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06
OmlzSW50cmluc2ljU2l6ZWRHcmlkQXJlYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmlk
VHJhY2tTaXppbmdBbGdvcml0aG1TdHJhdGVneTo6bWluU2l6ZUZvckNoaWxkIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6dXBkYXRlQmFzZWxpbmVB
bGlnbm1lbnRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRUcmFja1NpemluZ0FsZ29y
aXRobTo6YmFzZWxpbmVPZmZzZXRGb3JDaGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bmRlZmluaXRlU2l6ZVN0cmF0ZWd5OjphY2N1bXVsYXRlRmxleEZyYWN0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkluZGVmaW5pdGVTaXplU3RyYXRlZ3k6OmZpbmRVc2VkRmxleEZyYWN0
aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6
YWNjdW11bGF0ZUludHJpbnNpY1NpemVzRm9yVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3Jp
ZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpyZXNvbHZlSW50cmluc2ljVHJhY2tTaXplcyk6CisgICAg
ICAgICogcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJHcmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnBs
YWNlSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6aW5zZXJ0SW50b0dyaWQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyR3JpZDo6cGxhY2VJdGVtc09uR3JpZCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFjZVNwZWNpZmllZE1ham9yQXhpc0l0ZW1zT25HcmlkIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnBsYWNlQXV0b01ham9yQXhpc0l0
ZW1PbkdyaWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6bGF5b3V0R3Jp
ZEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmlzU3ViZ3JpZEluUGFyZW50
RGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3JpZC5oOgorCisy
MDIyLTAyLTE1ICBNYXR0IFdvb2Ryb3cgIDxtYXR0d29vZHJvd0BhcHBsZS5jb20+CisKKyAgICAg
ICAgQ29weSB0cmFjayBzaXplcyBmcm9tIHBhcmVudCBncmlkIGludG8gc3ViZ3JpZAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2MzM2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29waWVzIHRyYWNrIHNp
emVzIGZyb20gdGhlIHBhcmVudCBSZW5kZXJHcmlkJ3MgdHJhY2sgc2l6aW5nIGFsZ29yaXRobSBm
b3IgYXhlcworICAgICAgICB0aGF0IGFyZSBzdWJncmlkZGVkLCByYXRoZXIgdGhhbiBkb2luZyBp
dHMgb3duIHNpemluZy4KKyAgICAgICAgQWNjb3VudHMgZm9yIGRpZmZlcmVuY2VzIGJldHdlZW4g
dGhlIHN1YmdyaWQncyBncmlkLWdhcCBhbmQgdGhlIHBhcmVudCdzIGdyaWQgZ2FwLAorICAgICAg
ICBhcyB3ZWxsIGFzIHNwYWNlIG9jY3VwaWVkIGJ5IHRoZSBzdWJncmlkIGVsZW1lbnQncyBtYXJn
aW4vYm9yZGVyL3BhZGRpbmcuCisKKyAgICAgICAgRXhpc3RpbmcgdGVzdCBleHBlY3RhdGlvbnMg
dXBkYXRlZC4KKworICAgICAgICAqIHJlbmRlcmluZy9HcmlkVHJhY2tTaXppbmdBbGdvcml0aG0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpydW4pOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJHcmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckdyaWQ6OmxheW91dEJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6Omdy
aWRHYXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6cG9wdWxhdGVHcmlk
UG9zaXRpb25zRm9yRGlyZWN0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3JpZC5o
OgorCisyMDIyLTAyLTE1ICBNYXR0IFdvb2Ryb3cgIDxtYXR0d29vZHJvd0BhcHBsZS5jb20+CisK
KyAgICAgICAgTG9va3VwIGxpbmUgbmFtZXMgZm9yIHN1YiBncmlkcyB1c2luZyBsaW5lIG5hbWVz
IGZyb20gYW5jZXN0b3IgZ3JpZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzNjI4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyR3JpZDo6cG9wdWxhdGVFeHBsaWNpdEdyaWRBbmRPcmRlckl0ZXJhdG9yIGNvbnN0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvR3JpZEFyZWEuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyaWRTcGFuOjpjbGFtcCk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0dyaWRQb3Np
dGlvbnNSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHBsaWNpdEdyaWRTaXplRm9y
U2lkZSk6CisgICAgICAgIChXZWJDb3JlOjp0cmFuc3Bvc2VkU2lkZSk6CisgICAgICAgIChXZWJD
b3JlOjpjbGFtcGVkSW1wbGljaXRMaW5lRm9yQXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpOYW1l
ZExpbmVDb2xsZWN0aW9uQmFzZTo6TmFtZWRMaW5lQ29sbGVjdGlvbkJhc2UpOgorICAgICAgICAo
V2ViQ29yZTo6TmFtZWRMaW5lQ29sbGVjdGlvbkJhc2U6OmVuc3VyZUxvY2FsU3RvcmFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpOYW1lZExpbmVDb2xsZWN0aW9uQmFzZTo6Y29udGFpbnMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TmFtZWRMaW5lQ29sbGVjdGlvbjo6TmFtZWRMaW5lQ29sbGVj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZExpbmVDb2xsZWN0aW9uOjpoYXNFeHBsaWNp
dE5hbWVkTGluZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TmFtZWRMaW5lQ29sbGVjdGlv
bjo6aGFzTmFtZWRMaW5lcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZExpbmVDb2xs
ZWN0aW9uOjpsYXN0TGluZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZExpbmVDb2xs
ZWN0aW9uOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZExpbmVDb2xs
ZWN0aW9uOjpmaXJzdEV4cGxpY2l0UG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TmFtZWRMaW5lQ29sbGVjdGlvbjo6Zmlyc3RQb3NpdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjphZGp1c3RHcmlkUG9zaXRpb25zRnJvbVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Omxv
b2tBaGVhZEZvck5hbWVkR3JpZExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6bG9va0JhY2tGb3JO
YW1lZEdyaWRMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVOYW1lZEdyaWRMaW5lUG9z
aXRpb25Gcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6ZGVmaW5pdGVHcmlkU3BhbldpdGhO
YW1lZExpbmVTcGFuQWdhaW5zdE9wcG9zaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVO
YW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpyZXNvbHZlR3JpZFBvc2l0aW9uRnJvbVN0eWxlKToKKworICAgICAgICBTcGxpdHMg
TmFtZWRMaW5lQ29sbGVjdGlvbiBpbnRvIHR3byBjbGFzc2VzLCB3aGVyZSB0aGUgYmFzZSBjbGFz
cyBvbmx5IGhhbmRsZXMKKyAgICAgICAgYSBzaW5nbGUgZ3JpZCwgYW5kIHRoZSBzdWJjbGFzcyBo
YW5kbGVzIGluaGVyaXRpbmcgbGluZXMgZnJvbSBhbmNlc3RvciBncmlkcy4KKyAgICAgICAgTG9v
cHMgb3ZlciBhbmNlc3RvciBncmlkcywgbG9va2luZyBmb3IgbmFtZWQgbGluZXMgdGhhdCBhcmUg
c2hhcmVkIHdpdGggdGhlIGluaXRpYWwKKyAgICAgICAgZ3JpZCwgYW5kIGlmIGZvdW5kLCBhZGRz
IHRoZW0gKHVzaW5nIHRoZSBsb2NhbCBsaW5lIG51bWJlcikgdG8gYSBsb2NhbCBjb3B5IG9mIHRo
ZSBsaW5lCisgICAgICAgIG5hbWVzIGFycmF5LgorCisgICAgICAgIEFsc28gaGFuZGxlcyB0aGUg
Y2FzZXMgd2hlcmUgYSBuYW1lZCBncmlkIGFyZWEgc3BhbnMgb3V0c2lkZSBvZiB0aGUgc3ViZ3Jp
ZCBhcmVhLCBieQorICAgICAgICBjbGFtcGluZyB0aGUgYXJlYSB0byB0aGUgZXhwbGljaXQgZ3Jp
ZCAoc2luY2Ugc3ViZ3JpZCBjYW4ndCBnZW5lcmF0ZSBpbXBsaWNpdCBncmlkIGxpbmVzKSwKKyAg
ICAgICAgYW5kIHRoZW4gZ2VuZXJhdGluZyBuZXcgaW1wbGljaXQgZ3JpZCBsaW5lcy4gVGhlc2Ug
bGluZXMgYXJlIGFkZGVkIHRvIHRoZSBzYW1lIGxvY2FsIGxpbmUKKyAgICAgICAgbmFtZSBhcnJh
eSBhcyBpcyB1c2VkIGZvciBpbmhlcml0ZWQgYW5jZXN0b3IgbGluZXMuIFRoaXMgY2xhbXBpbmcg
YW5kIHJlZ2VuZXJhdGlvbiBvZiBpbXBsaWNpdAorICAgICAgICBsaW5lcyB3b3JrcyBmb3IgYm90
aCBhcmVhcyBkZWZpbmVkIG9uIHRoZSBzdWJncmlkLCBhcyB3ZWxsIGFzIG9uIGFuY2VzdG9ycy4K
KworCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0dyaWRQb3NpdGlvbnNSZXNvbHZlci5oOgor
ICAgICAgICAqIHN0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OkJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVHcmlkVGVtcGxhdGVDb2x1bW5zKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlR3JpZFRlbXBs
YXRlUm93cyk6CisKKyAgICAgICAgUmVtb3ZlcyB0aGVzZSBjYWxscyB0byBhZGQgdGhlIGltcGxp
Y2l0IGxpbmVzIHRvIHRoZSBub3JtYWwgbGluZSBsaXN0cywgc2luY2UKKyAgICAgICAgdGhleSdy
ZSBhbHJlYWR5IGluIHRoZSBpbXBsaWNpdCBsaW5lIGxpc3RzIGFuZCBoYXZpbmcgdGhlbSBpbiBi
b3RoIHN0b3BzIHVzIGZyb20KKyAgICAgICAgYmVpbmcgYWJsZSB0byByZWdlbmVyYXRlIHRoZW0g
Zm9yIHN1YmdyaWRzLgorCisyMDIyLTAyLTE1ICBNYXR0IFdvb2Ryb3cgIDxtYXR0d29vZHJvd0Bh
cHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IGdldENvbXB1dGVkU3R5bGUgZm9yIHN1Ymdy
aWRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzYx
NDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRz
IE9yZGVyZWROYW1lZExpbmVzQ29sbGVjdG9ySW5TdWJncmlkTGF5b3V0IHRvIGl0ZXJhdGUgdGhl
IHN1YmdyaWQgbmFtZXMgbGlzdCwgc3RvcHBpbmcKKyAgICAgICAgYXQgdGhlIG51bWJlciBvZiBh
Y3R1YWwgdHJhY2tzIGluIHRoZSBncmlkLgorCisKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9yZGVyZWROYW1lZExpbmVz
Q29sbGVjdG9ySW5TdWJncmlkTGF5b3V0OjpPcmRlcmVkTmFtZWRMaW5lc0NvbGxlY3RvckluU3Vi
Z3JpZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpPcmRlcmVkTmFtZWRMaW5lc0NvbGxlY3Rv
ckluR3JpZExheW91dDo6Y29sbGVjdExpbmVOYW1lc0ZvckluZGV4IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Ok9yZGVyZWROYW1lZExpbmVzQ29sbGVjdG9ySW5TdWJncmlkTGF5b3V0Ojpjb2xs
ZWN0TGluZU5hbWVzRm9ySW5kZXggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6YWRkVmFsdWVz
Rm9yTmFtZWRHcmlkTGluZXNBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OnBvcHVsYXRlU3Vi
Z3JpZFRyYWNrTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjp2YWx1ZUZvckdyaWRUcmFja0xpc3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJHcmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckdyaWQ6OmNvbXB1dGVBdXRvUmVwZWF0VHJhY2tzQ291bnQgY29uc3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJHcmlkLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0dy
aWRQb3NpdGlvbnNSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZExpbmVDb2xs
ZWN0aW9uOjpjb250YWlucyBjb25zdCk6CisgICAgICAgICogc3R5bGUvU3R5bGVCdWlsZGVyQ29u
dmVydGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlckNvbnZlcnRlcjo6Y3Jl
YXRlR3JpZFRyYWNrTGlzdCk6CisKKworICAgICAgICBJbmhlcml0IHRyYWNrIGNvdW50IGZyb20g
cGFyZW50IGdyaWQgZm9yIHN1YmdyaWRkZWQgYXhlcyBhbmQgY2xhbXAgaXRlbSBwbGFjZW1lbnQg
dG8gdGhhdCBleHBsaWNpdCBncmlkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjM2MTIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQ2hhbmdlcyBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OmV4cGxpY2l0R3Jp
ZDw+Q291bnQgdG8gcmV0dXJuIHRoZSBudW1iZXIgb2YgdHJhY2tzCisgICAgICAgIHNwYW5uZWQg
aW4gdGhlIHBhcmVudCBncmlkLCBmb3IgYXhlcyB0aGF0IGFyZSBhIHN1YmdyaWQuCisKKyAgICAg
ICAgVXBkYXRlcyBhZGp1c3RHcmlkUG9zaXRpb25zRm9yU3R5bGUgdG8gdXNlIHRoZSBudW1iZXIg
b2YgbGluZXMgc3BlY2lmaWVkIGluIHRoZQorICAgICAgICBzdWJncmlkIHByb3BlcnR5LCBmb3Ig
Z3JpZCBpdGVtcyB0aGF0IGFyZSBhbHNvIGEgc3ViZ3JpZCBhbmQgaGF2ZSBhbiBvdGhlcndpc2UK
KyAgICAgICAgaW5kZWZpbml0ZSBzcGFuLgorCisgICAgICAgIEFkZHMgY2xhbXBpbmcgc3VwcG9y
dCB0byBHcmlkIHNvIHRoYXQgd2UgY2FuIHByZXZlbnQgc3ViZ3JpZHMgZnJvbSBldmVyIGFkZGlu
ZworICAgICAgICBuZXcgaW1wbGljaXQgdHJhY2tzLgorCisgICAgICAgICogcmVuZGVyaW5nL0dy
aWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JpZDo6aW5zZXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyaWQ6OnNldENsYW1waW5nRm9yU3ViZ3JpZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmlk
OjpjbGFtcEFuZFRyYW5zbGF0ZVRvSW1wbGljaXRHcmlkKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
aWQ6OnNldE5lZWRzSXRlbXNQbGFjZW1lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9HcmlkLmg6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyR3JpZDo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6cGxhY2VJdGVtc09uR3JpZCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJHcmlkOjpwb3B1bGF0ZUV4cGxpY2l0R3JpZEFuZE9yZGVySXRlcmF0
b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6cGxhY2VTcGVjaWZpZWRN
YWpvckF4aXNJdGVtc09uR3JpZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlk
Ojppc1N1YmdyaWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6aXNTdWJn
cmlkUm93cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjppc1N1YmdyaWRD
b2x1bW5zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmdyaWRBcmVhQnJl
YWR0aEZvck91dE9mRmxvd0NoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6Om51
bVRyYWNrcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjp0cmFuc3Bvc2VkRGlyZWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmNvbXB1dGVHcmlkU3BhbkZvck91dE9mRmxv
d0NoaWxkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmdyaWRTcGFuRm9y
T3V0T2ZGbG93Q2hpbGQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6Z3Jp
ZFNwYW5Gb3JDaGlsZCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckdyaWQuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvR3JpZEFyZWEuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyaWRTcGFuOjppbnRlZ2VyU3BhbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmlkU3Bh
bjo6dHJhbnNsYXRlVG8pOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFNwYW46OmNsYW1wKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3R5bGUvR3JpZFBvc2l0aW9uc1Jlc29sdmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmlzSW5kZWZpbml0ZVNwYW4pOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0
R3JpZFBvc2l0aW9uc0Zyb21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmlkUG9zaXRpb25z
UmVzb2x2ZXI6OmV4cGxpY2l0R3JpZENvbHVtbkNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
aWRQb3NpdGlvbnNSZXNvbHZlcjo6ZXhwbGljaXRHcmlkUm93Q291bnQpOgorICAgICAgICAoV2Vi
Q29yZTo6ZXhwbGljaXRHcmlkU2l6ZUZvclNpZGUpOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2
ZU5hbWVkR3JpZExpbmVQb3NpdGlvbkZyb21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpyZXNv
bHZlTmFtZWRHcmlkTGluZVBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6cmVzb2x2ZUdyaWRQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVHcmlkUG9zaXRpb25Gcm9tU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JpZFBvc2l0aW9uc1Jlc29sdmVyOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zy
b21TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0dyaWRQb3NpdGlvbnNSZXNvbHZl
ci5oOgorCisyMDIyLTAyLTE1ICBNYXR0IFdvb2Ryb3cgIDxtYXR0d29vZHJvd0BhcHBsZS5jb20+
CisKKyAgICAgICAgSW5oZXJpdCB0cmFjayBjb3VudCBmcm9tIHBhcmVudCBncmlkIGZvciBzdWJn
cmlkZGVkIGF4ZXMgYW5kIGNsYW1wIGl0ZW0gcGxhY2VtZW50IHRvIHRoYXQgZXhwbGljaXQgZ3Jp
ZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjEy
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5n
ZXMgR3JpZFBvc2l0aW9uc1Jlc29sdmVyOjpleHBsaWNpdEdyaWQ8PkNvdW50IHRvIHJldHVybiB0
aGUgbnVtYmVyIG9mIHRyYWNrcworICAgICAgICBzcGFubmVkIGluIHRoZSBwYXJlbnQgZ3JpZCwg
Zm9yIGF4ZXMgdGhhdCBhcmUgYSBzdWJncmlkLgorCisgICAgICAgIFVwZGF0ZXMgYWRqdXN0R3Jp
ZFBvc2l0aW9uc0ZvclN0eWxlIHRvIHVzZSB0aGUgbnVtYmVyIG9mIGxpbmVzIHNwZWNpZmllZCBp
biB0aGUKKyAgICAgICAgc3ViZ3JpZCBwcm9wZXJ0eSwgZm9yIGdyaWQgaXRlbXMgdGhhdCBhcmUg
YWxzbyBhIHN1YmdyaWQgYW5kIGhhdmUgYW4gb3RoZXJ3aXNlCisgICAgICAgIGluZGVmaW5pdGUg
c3Bhbi4KKworICAgICAgICBBZGRzIGNsYW1waW5nIHN1cHBvcnQgdG8gR3JpZCBzbyB0aGF0IHdl
IGNhbiBwcmV2ZW50IHN1YmdyaWRzIGZyb20gZXZlciBhZGRpbmcKKyAgICAgICAgbmV3IGltcGxp
Y2l0IHRyYWNrcy4KKworICAgICAgICAqIHJlbmRlcmluZy9HcmlkLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyaWQ6Omluc2VydCk6CisgICAgICAgIChXZWJDb3JlOjpHcmlkOjpzZXRDbGFtcGlu
Z0ZvclN1YmdyaWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JpZDo6Y2xhbXBBbmRUcmFuc2xhdGVU
b0ltcGxpY2l0R3JpZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmlkOjpzZXROZWVkc0l0ZW1zUGxh
Y2VtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvR3JpZC5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJHcmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmNvbXB1dGVJ
bnRyaW5zaWNMb2dpY2FsV2lkdGhzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdy
aWQ6OnBsYWNlSXRlbXNPbkdyaWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3Jp
ZDo6cG9wdWxhdGVFeHBsaWNpdEdyaWRBbmRPcmRlckl0ZXJhdG9yIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckdyaWQ6OnBsYWNlU3BlY2lmaWVkTWFqb3JBeGlzSXRlbXNPbkdyaWQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6aXNTdWJncmlkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmlzU3ViZ3JpZFJvd3MgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6aXNTdWJncmlkQ29sdW1ucyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpncmlkQXJlYUJyZWFkdGhGb3JPdXRPZkZsb3dDaGls
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpudW1UcmFja3MgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6dHJhbnNwb3NlZERpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJHcmlkOjpjb21wdXRlR3JpZFNwYW5Gb3JPdXRPZkZsb3dDaGlsZCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpncmlkU3BhbkZvck91dE9mRmxvd0NoaWxkIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmdyaWRTcGFuRm9yQ2hpbGQgY29uc3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJHcmlkLmg6CisgICAgICAgICogcmVuZGVyaW5n
L3N0eWxlL0dyaWRBcmVhLmg6CisgICAgICAgIChXZWJDb3JlOjpHcmlkU3Bhbjo6aW50ZWdlclNw
YW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFNwYW46OnRyYW5zbGF0ZVRvKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyaWRTcGFuOjpjbGFtcCk6CisgICAgICAgICogcmVuZGVyaW5nL3N0
eWxlL0dyaWRQb3NpdGlvbnNSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0luZGVm
aW5pdGVTcGFuKToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdEdyaWRQb3NpdGlvbnNGcm9tU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFBvc2l0aW9uc1Jlc29sdmVyOjpleHBsaWNpdEdy
aWRDb2x1bW5Db3VudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmlkUG9zaXRpb25zUmVzb2x2ZXI6
OmV4cGxpY2l0R3JpZFJvd0NvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OmV4cGxpY2l0R3JpZFNp
emVGb3JTaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVOYW1lZEdyaWRMaW5lUG9zaXRp
b25Gcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZU5hbWVkR3JpZExpbmVQb3Np
dGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVH
cmlkUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpy
ZXNvbHZlR3JpZFBvc2l0aW9uRnJvbVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRQb3Np
dGlvbnNSZXNvbHZlcjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUpOgorICAgICAgICAq
IHJlbmRlcmluZy9zdHlsZS9HcmlkUG9zaXRpb25zUmVzb2x2ZXIuaDoKKwogMjAyMi0wMi0xNCAg
UGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3Rv
cjogRWxlbWVudCB0b29sdGlwcyBpbiBvdmVybGF5cyBzaG91bGQgdXNlIHNhbWUgZW5jb2RhYmxl
L2RlY29kYWJsZSBMYWJlbCB0eXBlIGFzIGdyaWQgb3ZlcmxheXMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggZDNiYWQ5YWQy
M2I0Li43NTkwMjU2ODc1ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCkBAIC04OTgsNiArODk4LDM4IEBAIHByaXZhdGU6CiAg
ICAgdW5zaWduZWQgbV9hdXRvUmVwZWF0VHJhY2tMaXN0TGVuZ3RoOwogfTsKIAorY2xhc3MgT3Jk
ZXJlZE5hbWVkTGluZXNDb2xsZWN0b3JJblN1YmdyaWRMYXlvdXQgOiBwdWJsaWMgT3JkZXJlZE5h
bWVkTGluZXNDb2xsZWN0b3IgeworcHVibGljOgorICAgIE9yZGVyZWROYW1lZExpbmVzQ29sbGVj
dG9ySW5TdWJncmlkTGF5b3V0KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgYm9vbCBpc1Jvd0F4
aXMsIHVuc2lnbmVkIHRvdGFsVHJhY2tzQ291bnQpCisgICAgICAgIDogT3JkZXJlZE5hbWVkTGlu
ZXNDb2xsZWN0b3Ioc3R5bGUsIGlzUm93QXhpcykKKyAgICAgICAgLCBtX2luc2VydGlvblBvaW50
KGlzUm93QXhpcyA/IHN0eWxlLmdyaWRBdXRvUmVwZWF0Q29sdW1uc0luc2VydGlvblBvaW50KCkg
OiBzdHlsZS5ncmlkQXV0b1JlcGVhdFJvd3NJbnNlcnRpb25Qb2ludCgpKQorICAgICAgICAsIG1f
YXV0b1JlcGVhdFRyYWNrTGlzdExlbmd0aCgoaXNSb3dBeGlzID8gc3R5bGUuYXV0b1JlcGVhdE9y
ZGVyZWROYW1lZEdyaWRDb2x1bW5MaW5lcygpIDogc3R5bGUuYXV0b1JlcGVhdE9yZGVyZWROYW1l
ZEdyaWRSb3dMaW5lcygpKS5zaXplKCkpCisgICAgICAgICwgbV90b3RhbFRyYWNrcyh0b3RhbFRy
YWNrc0NvdW50KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2F1dG9SZXBlYXRUcmFja0xpc3RMZW5n
dGgpIHsKKyAgICAgICAgICAgIG1fYXV0b1JlcGVhdFRvdGFsVHJhY2tzID0gMDsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyArMSB0byBjb252ZXJ0IGZyb20gdHJh
Y2tzIHRvIGxpbmVzCisgICAgICAgIHVuc2lnbmVkIG5hbWVkID0gKGlzUm93QXhpcyA/IHN0eWxl
Lm9yZGVyZWROYW1lZEdyaWRDb2x1bW5MaW5lcygpIDogc3R5bGUub3JkZXJlZE5hbWVkR3JpZFJv
d0xpbmVzKCkpLnNpemUoKTsKKyAgICAgICAgaWYgKG5hbWVkID49IG1fdG90YWxUcmFja3MgKyAx
KSB7CisgICAgICAgICAgICBtX2F1dG9SZXBlYXRUb3RhbFRyYWNrcyA9IDA7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9hdXRvUmVwZWF0VG90YWxUcmFja3MgPSAo
bV90b3RhbFRyYWNrcyArIDEgLSBuYW1lZCkgLyBtX2F1dG9SZXBlYXRUcmFja0xpc3RMZW5ndGg7
CisgICAgICAgIG1fYXV0b1JlcGVhdFRvdGFsVHJhY2tzICo9IG1fYXV0b1JlcGVhdFRyYWNrTGlz
dExlbmd0aDsKKyAgICB9CisKKyAgICB2b2lkIGNvbGxlY3RMaW5lTmFtZXNGb3JJbmRleChDU1NH
cmlkTGluZU5hbWVzVmFsdWUmLCB1bnNpZ25lZCBpbmRleCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBpbnQgbmFtZWRHcmlkTGluZUNvdW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV90b3Rh
bFRyYWNrcyArIDE7IH0KK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9pbnNlcnRpb25Qb2ludDsK
KyAgICB1bnNpZ25lZCBtX2F1dG9SZXBlYXRUb3RhbFRyYWNrczsKKyAgICB1bnNpZ25lZCBtX2F1
dG9SZXBlYXRUcmFja0xpc3RMZW5ndGg7CisgICAgdW5zaWduZWQgbV90b3RhbFRyYWNrczsKK307
CisKIHZvaWQgT3JkZXJlZE5hbWVkTGluZXNDb2xsZWN0b3I6OmFwcGVuZExpbmVzKENTU0dyaWRM
aW5lTmFtZXNWYWx1ZSYgbGluZU5hbWVzVmFsdWUsIHVuc2lnbmVkIGluZGV4LCBOYW1lZExpbmVz
VHlwZSB0eXBlKSBjb25zdAogewogICAgIGF1dG8gaXRlciA9IHR5cGUgPT0gTmFtZWRMaW5lcyA/
IG1fb3JkZXJlZE5hbWVkR3JpZExpbmVzLmZpbmQoaW5kZXgpIDogbV9vcmRlcmVkTmFtZWRBdXRv
UmVwZWF0R3JpZExpbmVzLmZpbmQoaW5kZXgpOwpAQCAtOTU1LDkgKzk4NywzMCBAQCB2b2lkIE9y
ZGVyZWROYW1lZExpbmVzQ29sbGVjdG9ySW5HcmlkTGF5b3V0Ojpjb2xsZWN0TGluZU5hbWVzRm9y
SW5kZXgoQ1NTR3JpZExpbgogICAgIGFwcGVuZExpbmVzKGxpbmVOYW1lc1ZhbHVlLCBhdXRvUmVw
ZWF0SW5kZXhJbkZpcnN0UmVwZXRpdGlvbiwgQXV0b1JlcGVhdE5hbWVkTGluZXMpOwogfQogCit2
b2lkIE9yZGVyZWROYW1lZExpbmVzQ29sbGVjdG9ySW5TdWJncmlkTGF5b3V0Ojpjb2xsZWN0TGlu
ZU5hbWVzRm9ySW5kZXgoQ1NTR3JpZExpbmVOYW1lc1ZhbHVlJiBsaW5lTmFtZXNWYWx1ZSwgdW5z
aWduZWQgaSkgY29uc3QKK3sKKyAgICBpZiAoIW1fYXV0b1JlcGVhdFRyYWNrTGlzdExlbmd0aCB8
fCBpIDwgbV9pbnNlcnRpb25Qb2ludCkgeworICAgICAgICBhcHBlbmRMaW5lcyhsaW5lTmFtZXNW
YWx1ZSwgaSwgTmFtZWRMaW5lcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
aSA+PSBtX2luc2VydGlvblBvaW50ICsgbV9hdXRvUmVwZWF0VG90YWxUcmFja3MpIHsKKyAgICAg
ICAgYXBwZW5kTGluZXMobGluZU5hbWVzVmFsdWUsIGkgLSBtX2F1dG9SZXBlYXRUb3RhbFRyYWNr
cywgTmFtZWRMaW5lcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fYXV0
b1JlcGVhdFRvdGFsVHJhY2tzKSB7CisgICAgICAgIGFwcGVuZExpbmVzKGxpbmVOYW1lc1ZhbHVl
LCBpLCBOYW1lZExpbmVzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVuc2lnbmVk
IGF1dG9SZXBlYXRJbmRleEluRmlyc3RSZXBldGl0aW9uID0gKGkgLSBtX2luc2VydGlvblBvaW50
KSAlIG1fYXV0b1JlcGVhdFRyYWNrTGlzdExlbmd0aDsKKyAgICBhcHBlbmRMaW5lcyhsaW5lTmFt
ZXNWYWx1ZSwgYXV0b1JlcGVhdEluZGV4SW5GaXJzdFJlcGV0aXRpb24sIEF1dG9SZXBlYXROYW1l
ZExpbmVzKTsKK30KKwogc3RhdGljIHZvaWQgYWRkVmFsdWVzRm9yTmFtZWRHcmlkTGluZXNBdElu
ZGV4KE9yZGVyZWROYW1lZExpbmVzQ29sbGVjdG9yJiBjb2xsZWN0b3IsIHVuc2lnbmVkIGksIENT
U1ZhbHVlTGlzdCYgbGlzdCwgYm9vbCByZW5kZXJFbXB0eSA9IGZhbHNlKQogewotICAgIGlmIChj
b2xsZWN0b3IuaXNFbXB0eSgpKQorICAgIGlmIChjb2xsZWN0b3IuaXNFbXB0eSgpICYmICFyZW5k
ZXJFbXB0eSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBsaW5lTmFtZXMgPSBDU1NHcmlk
TGluZU5hbWVzVmFsdWU6OmNyZWF0ZSgpOwpAQCAtMTAzNSw5ICsxMDg4LDE1IEBAIHN0YXRpYyBS
ZWY8Q1NTVmFsdWU+IHZhbHVlRm9yR3JpZFRyYWNrTGlzdChHcmlkVHJhY2tTaXppbmdEaXJlY3Rp
b24gZGlyZWN0aW9uLCBSCiAKICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBhIGdyaWQgY29udGFp
bmVyLCB0aGUgcmVzb2x2ZWQgdmFsdWUgaXMgdGhlIHVzZWQgdmFsdWUsCiAgICAgLy8gc3BlY2lm
eWluZyB0cmFjayBzaXplcyBpbiBwaXhlbHMgYW5kIGV4cGFuZGluZyB0aGUgcmVwZWF0KCkgbm90
YXRpb24uCi0gICAgaWYgKGlzUmVuZGVyR3JpZCkgewotICAgICAgICAvLyBGSVhNRTogV2UgbmVl
ZCB0byBoYW5kbGUgY29tcHV0ZWQgc3ViZ3JpZCBoZXJlLgorICAgIC8vIElmIHN1YmdyaWQgd2Fz
IHNwZWNpZmllZCwgYnV0IHRoZSBlbGVtZW50IGlzbid0IGEgc3ViZ3JpZCAoZHVlIHRvIG5vdCBo
YXZpbmcKKyAgICAvLyBhbiBhcHByb3ByaWF0ZSBncmlkIHBhcmVudD8pLCB0aGVuIHdlIGZhbGwg
YmFjayB0byB1c2luZyB0aGUgc3BlY2lmaWVkIHZhbHVlLgorICAgIGlmIChpc1JlbmRlckdyaWQg
JiYgKCFpc1N1YmdyaWQgfHwgZG93bmNhc3Q8UmVuZGVyR3JpZD4ocmVuZGVyZXIpLT5pc1N1Ymdy
aWQoZGlyZWN0aW9uKSkpIHsKICAgICAgICAgYXV0byogZ3JpZCA9IGRvd25jYXN0PFJlbmRlckdy
aWQ+KHJlbmRlcmVyKTsKKyAgICAgICAgaWYgKGlzU3ViZ3JpZCkgeworICAgICAgICAgICAgT3Jk
ZXJlZE5hbWVkTGluZXNDb2xsZWN0b3JJblN1YmdyaWRMYXlvdXQgY29sbGVjdG9yKHN0eWxlLCBp
c1Jvd0F4aXMsIGdyaWQtPm51bVRyYWNrcyhkaXJlY3Rpb24pKTsKKyAgICAgICAgICAgIHBvcHVs
YXRlU3ViZ3JpZExpbmVOYW1lTGlzdChsaXN0LmdldCgpLCBjb2xsZWN0b3IpOworICAgICAgICAg
ICAgcmV0dXJuIGxpc3Q7CisgICAgICAgIH0KICAgICAgICAgT3JkZXJlZE5hbWVkTGluZXNDb2xs
ZWN0b3JJbkdyaWRMYXlvdXQgY29sbGVjdG9yKHN0eWxlLCBpc1Jvd0F4aXMsIGdyaWQtPmF1dG9S
ZXBlYXRDb3VudEZvckRpcmVjdGlvbihkaXJlY3Rpb24pLCBhdXRvUmVwZWF0VHJhY2tTaXplcy5z
aXplKCkpOwogICAgICAgICAvLyBOYW1lZCBncmlkIGxpbmUgaW5kaWNlcyBhcmUgcmVsYXRpdmUg
dG8gdGhlIGV4cGxpY2l0IGdyaWQsIGJ1dCB3ZSBhcmUgaW5jbHVkaW5nIGFsbCB0cmFja3MuCiAg
ICAgICAgIC8vIFNvIHdlIG5lZWQgdG8gc3VidHJhY3QgdGhlIG51bWJlciBvZiBsZWFkaW5nIGlt
cGxpY2l0IHRyYWNrcyBpbiBvcmRlciB0byBnZXQgdGhlIHByb3BlciBsaW5lIGluZGV4LgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0dyaWQuY3BwCmluZGV4IDU2MDJkN2MyZDRkNS4uMjZkMWQ4YWJmM2RmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0dyaWQuY3BwCkBAIC02MSwxNyArNjEsMjQgQEAgdm9pZCBHcmlk
OjplbnN1cmVHcmlkU2l6ZSh1bnNpZ25lZCBtYXhpbXVtUm93U2l6ZSwgdW5zaWduZWQgbWF4aW11
bUNvbHVtblNpemUpCiAgICAgfQogfQogCi12b2lkIEdyaWQ6Omluc2VydChSZW5kZXJCb3gmIGNo
aWxkLCBjb25zdCBHcmlkQXJlYSYgYXJlYSkKK0dyaWRBcmVhIEdyaWQ6Omluc2VydChSZW5kZXJC
b3gmIGNoaWxkLCBjb25zdCBHcmlkQXJlYSYgYXJlYSkKIHsKLSAgICBBU1NFUlQoYXJlYS5yb3dz
LmlzVHJhbnNsYXRlZERlZmluaXRlKCkgJiYgYXJlYS5jb2x1bW5zLmlzVHJhbnNsYXRlZERlZmlu
aXRlKCkpOwotICAgIGVuc3VyZUdyaWRTaXplKGFyZWEucm93cy5lbmRMaW5lKCksIGFyZWEuY29s
dW1ucy5lbmRMaW5lKCkpOworICAgIEdyaWRBcmVhIGNsYW1wZWQgPSBhcmVhOworICAgIGlmICht
X21heFJvd3MpCisgICAgICAgIGNsYW1wZWQucm93cy5jbGFtcChtX21heFJvd3MpOworICAgIGlm
IChtX21heENvbHVtbnMpCisgICAgICAgIGNsYW1wZWQuY29sdW1ucy5jbGFtcChtX21heENvbHVt
bnMpOwogCi0gICAgZm9yIChhdXRvIHJvdyA6IGFyZWEucm93cykgewotICAgICAgICBmb3IgKGF1
dG8gY29sdW1uIDogYXJlYS5jb2x1bW5zKQorICAgIEFTU0VSVChjbGFtcGVkLnJvd3MuaXNUcmFu
c2xhdGVkRGVmaW5pdGUoKSAmJiBjbGFtcGVkLmNvbHVtbnMuaXNUcmFuc2xhdGVkRGVmaW5pdGUo
KSk7CisgICAgZW5zdXJlR3JpZFNpemUoY2xhbXBlZC5yb3dzLmVuZExpbmUoKSwgY2xhbXBlZC5j
b2x1bW5zLmVuZExpbmUoKSk7CisKKyAgICBmb3IgKGF1dG8gcm93IDogY2xhbXBlZC5yb3dzKSB7
CisgICAgICAgIGZvciAoYXV0byBjb2x1bW4gOiBjbGFtcGVkLmNvbHVtbnMpCiAgICAgICAgICAg
ICBtX2dyaWRbcm93XVtjb2x1bW5dLmFwcGVuZChjaGlsZCk7CiAgICAgfQogCi0gICAgc2V0R3Jp
ZEl0ZW1BcmVhKGNoaWxkLCBhcmVhKTsKKyAgICBzZXRHcmlkSXRlbUFyZWEoY2hpbGQsIGNsYW1w
ZWQpOworICAgIHJldHVybiBjbGFtcGVkOwogfQogCiB2b2lkIEdyaWQ6OnNldEV4cGxpY2l0R3Jp
ZFN0YXJ0KHVuc2lnbmVkIHJvd1N0YXJ0LCB1bnNpZ25lZCBjb2x1bW5TdGFydCkKQEAgLTg1LDYg
KzkyLDI2IEBAIHVuc2lnbmVkIEdyaWQ6OmV4cGxpY2l0R3JpZFN0YXJ0KEdyaWRUcmFja1Npemlu
Z0RpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0CiAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBGb3JS
b3dzID8gbV9leHBsaWNpdFJvd1N0YXJ0IDogbV9leHBsaWNpdENvbHVtblN0YXJ0OwogfQogCit2
b2lkIEdyaWQ6OnNldENsYW1waW5nRm9yU3ViZ3JpZCh1bnNpZ25lZCBtYXhSb3dzLCB1bnNpZ25l
ZCBtYXhDb2x1bW5zKQoreworICAgIG1fbWF4Um93cyA9IG1heFJvd3M7CisgICAgbV9tYXhDb2x1
bW5zID0gbWF4Q29sdW1uczsKK30KKwordm9pZCBHcmlkOjpjbGFtcEFuZFRyYW5zbGF0ZVRvSW1w
bGljaXRHcmlkKEdyaWRBcmVhJiBhcmVhKQoreworICAgIGlmICghYXJlYS5yb3dzLmlzSW5kZWZp
bml0ZSgpKSB7CisgICAgICAgIGlmIChtX21heFJvd3MpCisgICAgICAgICAgICBhcmVhLnJvd3Mu
Y2xhbXAobV9tYXhSb3dzKTsKKyAgICAgICAgYXJlYS5yb3dzLnRyYW5zbGF0ZShleHBsaWNpdEdy
aWRTdGFydChGb3JSb3dzKSk7CisgICAgfQorICAgIGlmICghYXJlYS5jb2x1bW5zLmlzSW5kZWZp
bml0ZSgpKSB7CisgICAgICAgIGlmIChtX21heENvbHVtbnMpCisgICAgICAgICAgICBhcmVhLmNv
bHVtbnMuY2xhbXAobV9tYXhDb2x1bW5zKTsKKyAgICAgICAgYXJlYS5jb2x1bW5zLnRyYW5zbGF0
ZShleHBsaWNpdEdyaWRTdGFydChGb3JDb2x1bW5zKSk7CisgICAgfQorfQorCiBHcmlkQXJlYSBH
cmlkOjpncmlkSXRlbUFyZWEoY29uc3QgUmVuZGVyQm94JiBpdGVtKSBjb25zdAogewogICAgIEFT
U0VSVChtX2dyaWRJdGVtQXJlYS5jb250YWlucygmaXRlbSkpOwpAQCAtMTYxLDYgKzE4OCw4IEBA
IHZvaWQgR3JpZDo6c2V0TmVlZHNJdGVtc1BsYWNlbWVudChib29sIG5lZWRzSXRlbXNQbGFjZW1l
bnQpCiAgICAgbV9hdXRvUmVwZWF0RW1wdHlSb3dzID0gbnVsbHB0cjsKICAgICBtX2F1dG9SZXBl
YXRDb2x1bW5zID0gMDsKICAgICBtX2F1dG9SZXBlYXRSb3dzID0gMDsKKyAgICBtX21heENvbHVt
bnMgPSAwOworICAgIG1fbWF4Um93cyA9IDA7CiB9CiAKIEdyaWRJdGVyYXRvcjo6R3JpZEl0ZXJh
dG9yKGNvbnN0IEdyaWQmIGdyaWQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24s
IHVuc2lnbmVkIGZpeGVkVHJhY2tJbmRleCwgdW5zaWduZWQgdmFyeWluZ1RyYWNrSW5kZXgpCkBA
IC0xNjgsNiArMTk3LDIyIEBAIEdyaWRJdGVyYXRvcjo6R3JpZEl0ZXJhdG9yKGNvbnN0IEdyaWQm
IGdyaWQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sCiAgICAgLCBtX2RpcmVj
dGlvbihkaXJlY3Rpb24pCiAgICAgLCBtX3Jvd0luZGV4KChkaXJlY3Rpb24gPT0gRm9yQ29sdW1u
cykgPyB2YXJ5aW5nVHJhY2tJbmRleCA6IGZpeGVkVHJhY2tJbmRleCkKICAgICAsIG1fY29sdW1u
SW5kZXgoKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IGZpeGVkVHJhY2tJbmRleCA6IHZhcnlp
bmdUcmFja0luZGV4KQorICAgICwgbV92YXJ5aW5nTWF4KChkaXJlY3Rpb24gPT0gRm9yQ29sdW1u
cykgPyAodW5zaWduZWQpZ3JpZC5tX2dyaWQuc2l6ZSgpIDogKHVuc2lnbmVkKWdyaWQubV9ncmlk
WzBdLnNpemUoKSkKKyAgICAsIG1fY2hpbGRJbmRleCgwKQorCit7CisgICAgQVNTRVJUKCFtX2dy
aWQuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoIW1fZ3JpZFswXS5pc0VtcHR5KCkpOworICAgIEFT
U0VSVChtX3Jvd0luZGV4IDwgbV9ncmlkLnNpemUoKSk7CisgICAgQVNTRVJUKG1fY29sdW1uSW5k
ZXggPCBtX2dyaWRbMF0uc2l6ZSgpKTsKK30KKworR3JpZEl0ZXJhdG9yOjpHcmlkSXRlcmF0b3Io
Y29uc3QgR3JpZCYgZ3JpZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgdW5z
aWduZWQgcm93SW5kZXgsIHVuc2lnbmVkIGNvbHVtbkluZGV4LCB1bnNpZ25lZCB2YXJ5aW5nTWF4
KQorICAgIDogbV9ncmlkKGdyaWQubV9ncmlkKQorICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9u
KQorICAgICwgbV9yb3dJbmRleChyb3dJbmRleCkKKyAgICAsIG1fY29sdW1uSW5kZXgoY29sdW1u
SW5kZXgpCisgICAgLCBtX3ZhcnlpbmdNYXgodmFyeWluZ01heCkKICAgICAsIG1fY2hpbGRJbmRl
eCgwKQogewogICAgIEFTU0VSVCghbV9ncmlkLmlzRW1wdHkoKSk7CkBAIC0xODIsMTIgKzIyNywx
MSBAQCBSZW5kZXJCb3gqIEdyaWRJdGVyYXRvcjo6bmV4dEdyaWRJdGVtKCkKICAgICBBU1NFUlQo
IW1fZ3JpZFswXS5pc0VtcHR5KCkpOwogCiAgICAgdW5zaWduZWQmIHZhcnlpbmdUcmFja0luZGV4
ID0gKG1fZGlyZWN0aW9uID09IEZvckNvbHVtbnMpID8gbV9yb3dJbmRleCA6IG1fY29sdW1uSW5k
ZXg7Ci0gICAgY29uc3QgdW5zaWduZWQgZW5kT2ZWYXJ5aW5nVHJhY2tJbmRleCA9IChtX2RpcmVj
dGlvbiA9PSBGb3JDb2x1bW5zKSA/IG1fZ3JpZC5zaXplKCkgOiBtX2dyaWRbMF0uc2l6ZSgpOwot
ICAgIGZvciAoOyB2YXJ5aW5nVHJhY2tJbmRleCA8IGVuZE9mVmFyeWluZ1RyYWNrSW5kZXg7ICsr
dmFyeWluZ1RyYWNrSW5kZXgpIHsKKworICAgIGZvciAoOyB2YXJ5aW5nVHJhY2tJbmRleCA8IG1f
dmFyeWluZ01heDsgKyt2YXJ5aW5nVHJhY2tJbmRleCkgewogICAgICAgICBjb25zdCBhdXRvJiBj
aGlsZHJlbiA9IG1fZ3JpZFttX3Jvd0luZGV4XVttX2NvbHVtbkluZGV4XTsKICAgICAgICAgaWYg
KG1fY2hpbGRJbmRleCA8IGNoaWxkcmVuLnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiBjaGls
ZHJlblttX2NoaWxkSW5kZXgrK10uZ2V0KCk7Ci0KICAgICAgICAgbV9jaGlsZEluZGV4ID0gMDsK
ICAgICB9CiAgICAgcmV0dXJuIDA7CkBAIC0yNDAsNCArMjg0LDU1IEBAIHN0ZDo6dW5pcXVlX3B0
cjxHcmlkQXJlYT4gR3JpZEl0ZXJhdG9yOjpuZXh0RW1wdHlHcmlkQXJlYSh1bnNpZ25lZCBmaXhl
ZFRyYWNrU3BhCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK0dyaWRJdGVyYXRvciBHcmlkSXRl
cmF0b3I6OmNyZWF0ZUZvclN1YmdyaWQoY29uc3QgUmVuZGVyR3JpZCYgc3ViZ3JpZCwgY29uc3Qg
R3JpZEl0ZXJhdG9yJiBvdXRlcikKK3sKKyAgICBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gaW5u
ZXJEaXJlY3Rpb24gPSBvdXRlci5kaXJlY3Rpb24oKTsKKyAgICBBU1NFUlQoc3ViZ3JpZC5pc1N1
YmdyaWRJblBhcmVudERpcmVjdGlvbihpbm5lckRpcmVjdGlvbikpOworICAgIEdyaWRTcGFuIHNw
YW5Sb3dzID0gZG93bmNhc3Q8UmVuZGVyR3JpZD4oc3ViZ3JpZC5wYXJlbnQoKSktPmdyaWRTcGFu
Rm9yQ2hpbGQoc3ViZ3JpZCwgRm9yUm93cyk7CisgICAgR3JpZFNwYW4gc3BhbkNvbHVtbnMgPSBk
b3duY2FzdDxSZW5kZXJHcmlkPihzdWJncmlkLnBhcmVudCgpKS0+Z3JpZFNwYW5Gb3JDaGlsZChz
dWJncmlkLCBGb3JDb2x1bW5zKTsKKworICAgIC8vIFRyYW5zbGF0ZSB0aGUgY3VycmVudCByb3cv
Y29sdW1uIGluZGljZXMgaW50byB0aGUgY29vcmRpbmF0ZQorICAgIC8vIHNwYWNlIG9mIHRoZSBz
dWJncmlkLgorICAgIHVuc2lnbmVkIHJvd0luZGV4ID0gb3V0ZXIubV9yb3dJbmRleCAtIHNwYW5S
b3dzLnN0YXJ0TGluZSgpOworICAgIHVuc2lnbmVkIGNvbEluZGV4ID0gb3V0ZXIubV9jb2x1bW5J
bmRleC0gc3BhbkNvbHVtbnMuc3RhcnRMaW5lKCk7CisKKyAgICAvLyBJZiB0aGUgY2hpbGQgZ3Jp
ZCBpcyB0cmFuc3Bvc2VkLCB0aGVuIHN3YXAgcm93L2NvbHVtbiBkZWZpbml0aW9ucy4KKyAgICBp
ZiAoc3ViZ3JpZC5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICE9IHN1YmdyaWQucGFyZW50KCkt
PmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKKyAgICAgICAgdW5zaWduZWQgdGVtcCA9IHJv
d0luZGV4OworICAgICAgICByb3dJbmRleCA9IGNvbEluZGV4OworICAgICAgICBjb2xJbmRleCA9
IHRlbXA7CisgICAgICAgIGlubmVyRGlyZWN0aW9uID0gKGlubmVyRGlyZWN0aW9uID09IEZvckNv
bHVtbnMpID8gRm9yUm93cyA6IEZvckNvbHVtbnM7CisgICAgfQorICAgIEFTU0VSVChzdWJncmlk
LmlzU3ViZ3JpZChpbm5lckRpcmVjdGlvbikpOworCisgICAgdW5zaWduZWQgcm93TWF4ID0gc3Vi
Z3JpZC5jdXJyZW50R3JpZCgpLm51bVRyYWNrcyhGb3JSb3dzKTsKKyAgICB1bnNpZ25lZCBjb2xN
YXggPSBzdWJncmlkLmN1cnJlbnRHcmlkKCkubnVtVHJhY2tzKEZvckNvbHVtbnMpOworCisgICAg
aWYgKHN1YmdyaWQuc3R5bGUoKS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkgIT0gc3ViZ3Jp
ZC5wYXJlbnQoKS0+c3R5bGUoKS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkpCisgICAgICAg
IHJvd0luZGV4ID0gcm93TWF4IC0gcm93SW5kZXggLSAxOworICAgIGlmIChzdWJncmlkLnN0eWxl
KCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSAhPSBzdWJncmlkLnBhcmVudCgpLT5zdHls
ZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpCisgICAgICAgIGNvbEluZGV4ID0gY29s
TWF4IC0gY29sSW5kZXggLSAxOworCisgICAgLy8gSWYgd2UncmUgYWxzbyBhIHN1YmdyaWQgaW4g
dGhlIG90aGVyIGF4aXMsIHRoZW4gd2UgY2FuIGp1c3QgaXRlcmF0ZSB0aGUgc2luZ2xlCisgICAg
Ly8gdHJhY2sgaW4gdGhlIHN1YmdyaWQgd2hpY2ggY29ycmVzcG9uZHMgdG8gYSB0cmFjayBpbiB0
aGUgb3V0ZXIgZ3JpZC4gT3RoZXJ3aXNlIHdlIG5lZWQKKyAgICAvLyB0byBpdGVyYXRlIGFsbCB0
cmFja3MgaW4gdGhhdCBheGlzIHdpdGhpbiB0aGUgc3ViZ3JpZC4KKyAgICB1bnNpZ25lZCB2YXJ5
aW5nTWF4OworICAgIGlmIChzdWJncmlkLmlzU3ViZ3JpZCgoaW5uZXJEaXJlY3Rpb24gPT0gRm9y
Q29sdW1ucykgPyBGb3JSb3dzIDogRm9yQ29sdW1ucykpIHsKKyAgICAgICAgaWYgKGlubmVyRGly
ZWN0aW9uID09IEZvckNvbHVtbnMpCisgICAgICAgICAgICB2YXJ5aW5nTWF4ID0gc3RkOjptaW4o
cm93TWF4LCByb3dJbmRleCArIDEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YXJ5aW5n
TWF4ID0gc3RkOjptaW4oY29sTWF4LCBjb2xJbmRleCArIDEpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGlmIChpbm5lckRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSB7CisgICAgICAgICAgICByb3dJ
bmRleCA9IDA7CisgICAgICAgICAgICB2YXJ5aW5nTWF4ID0gcm93TWF4OworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgY29sSW5kZXggPSAwOworICAgICAgICAgICAgdmFyeWluZ01heCA9
IGNvbE1heDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBHcmlkSXRlcmF0b3Ioc3Vi
Z3JpZC5jdXJyZW50R3JpZCgpLCBpbm5lckRpcmVjdGlvbiwgcm93SW5kZXgsIGNvbEluZGV4LCB2
YXJ5aW5nTWF4KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9H
cmlkLmgKaW5kZXggNzJjYWRmNjhlZjRkLi42ZDA1NmRjNzFmN2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0dyaWQuaApAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbnVtVHJhY2tz
KEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbikgY29uc3Q7CiAKICAgICB2b2lkIGVuc3VyZUdyaWRT
aXplKHVuc2lnbmVkIG1heGltdW1Sb3dTaXplLCB1bnNpZ25lZCBtYXhpbXVtQ29sdW1uU2l6ZSk7
Ci0gICAgdm9pZCBpbnNlcnQoUmVuZGVyQm94JiwgY29uc3QgR3JpZEFyZWEmKTsKKyAgICBHcmlk
QXJlYSBpbnNlcnQoUmVuZGVyQm94JiwgY29uc3QgR3JpZEFyZWEmKTsKIAogICAgIC8vIE5vdGUg
dGhhdCBlYWNoIGluIGZsb3cgY2hpbGQgb2YgYSBncmlkIGNvbnRhaW5lciBiZWNvbWVzIGEgZ3Jp
ZCBpdGVtLiBUaGlzIG1lYW5zIHRoYXQKICAgICAvLyB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiBm
YWxzZSBmb3IgYSBncmlkIGNvbnRhaW5lciB3aXRoIG9ubHkgb3V0IG9mIGZsb3cgY2hpbGRyZW4u
CkBAIC02Nyw2ICs2NywxMCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgYXV0b1JlcGVhdFRyYWNr
cyhHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24pIGNvbnN0OwogICAgIHZvaWQgc2V0QXV0b1JlcGVh
dFRyYWNrcyh1bnNpZ25lZCBhdXRvUmVwZWF0Um93cywgdW5zaWduZWQgYXV0b1JlcGVhdENvbHVt
bnMpOwogCisgICAgdm9pZCBzZXRDbGFtcGluZ0ZvclN1YmdyaWQodW5zaWduZWQgbWF4Um93cywg
dW5zaWduZWQgbWF4Q29sdW1ucyk7CisKKyAgICB2b2lkIGNsYW1wQW5kVHJhbnNsYXRlVG9JbXBs
aWNpdEdyaWQoR3JpZEFyZWEmKTsKKwogICAgIHZvaWQgc2V0QXV0b1JlcGVhdEVtcHR5Q29sdW1u
cyhzdGQ6OnVuaXF1ZV9wdHI8T3JkZXJlZFRyYWNrSW5kZXhTZXQ+KTsKICAgICB2b2lkIHNldEF1
dG9SZXBlYXRFbXB0eVJvd3Moc3RkOjp1bmlxdWVfcHRyPE9yZGVyZWRUcmFja0luZGV4U2V0Pik7
CiAKQEAgLTkyLDYgKzk2LDkgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2F1dG9SZXBlYXRD
b2x1bW5zIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fYXV0b1JlcGVhdFJvd3MgeyAwIH07CiAKKyAg
ICB1bnNpZ25lZCBtX21heENvbHVtbnMgeyAwIH07CisgICAgdW5zaWduZWQgbV9tYXhSb3dzIHsg
MCB9OworCiAgICAgYm9vbCBtX25lZWRzSXRlbXNQbGFjZW1lbnQgeyB0cnVlIH07CiAKICAgICBH
cmlkQXNNYXRyaXggbV9ncmlkOwpAQCAtMTA5LDE1ICsxMTYsMjUgQEAgcHVibGljOgogICAgIC8v
IEdyaWRJdGVyYXRvcihtX2dyaWQsIEZvckNvbHVtbnMsIDEpIHdpbGwgd2FsayBvdmVyIHRoZSBy
b3dzIG9mIHRoZSAybmQgY29sdW1uLgogICAgIEdyaWRJdGVyYXRvcihjb25zdCBHcmlkJiwgR3Jp
ZFRyYWNrU2l6aW5nRGlyZWN0aW9uLCB1bnNpZ25lZCBmaXhlZFRyYWNrSW5kZXgsIHVuc2lnbmVk
IHZhcnlpbmdUcmFja0luZGV4ID0gMCk7CiAKKyAgICBzdGF0aWMgR3JpZEl0ZXJhdG9yIGNyZWF0
ZUZvclN1YmdyaWQoY29uc3QgUmVuZGVyR3JpZCYgc3ViZ3JpZCwgY29uc3QgR3JpZEl0ZXJhdG9y
JiBvdXRlcik7CisKICAgICBSZW5kZXJCb3gqIG5leHRHcmlkSXRlbSgpOwogICAgIGJvb2wgaXNF
bXB0eUFyZWFFbm91Z2godW5zaWduZWQgcm93U3BhbiwgdW5zaWduZWQgY29sdW1uU3BhbikgY29u
c3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEdyaWRBcmVhPiBuZXh0RW1wdHlHcmlkQXJlYSh1bnNp
Z25lZCBmaXhlZFRyYWNrU3BhbiwgdW5zaWduZWQgdmFyeWluZ1RyYWNrU3Bhbik7CiAKKyAgICBH
cmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2RpcmVjdGlvbjsKKyAgICB9CisKIHByaXZhdGU6CisgICAgR3JpZEl0ZXJhdG9y
KGNvbnN0IEdyaWQmLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24sIHVuc2lnbmVkIHJvd0luZGV4
LCB1bnNpZ25lZCBjb2x1bW5JbmRleCwgdW5zaWduZWQgdmFyeWluZ01heCk7CisKICAgICBjb25z
dCBHcmlkQXNNYXRyaXgmIG1fZ3JpZDsKICAgICBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gbV9k
aXJlY3Rpb247CiAgICAgdW5zaWduZWQgbV9yb3dJbmRleDsKICAgICB1bnNpZ25lZCBtX2NvbHVt
bkluZGV4OworICAgIHVuc2lnbmVkIG1fdmFyeWluZ01heDsKICAgICB1bnNpZ25lZCBtX2NoaWxk
SW5kZXg7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZExh
eW91dEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZExheW91dEZ1
bmN0aW9ucy5jcHAKaW5kZXggZDRmNzg4ZGM3MGQyLi5hZjZiMWY4ZDVmZWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkTGF5b3V0RnVuY3Rpb25zLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZExheW91dEZ1bmN0aW9ucy5jcHAKQEAgLTc3LDcg
Kzc3LDcgQEAgTGF5b3V0VW5pdCBtYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKGNvbnN0IFJlbmRl
ckdyaWQmIGdyaWQsIEdyaWRUcmFja1NpemluZ0RpcmUKICAgICByZXR1cm4gbWFyZ2luU3RhcnQg
KyBtYXJnaW5FbmQ7CiB9CiAKLWJvb2wgaXNPcnRob2dvbmFsQ2hpbGQoY29uc3QgUmVuZGVyR3Jp
ZCYgZ3JpZCwgY29uc3QgUmVuZGVyQm94JiBjaGlsZCkKK2Jvb2wgaXNPcnRob2dvbmFsQ2hpbGQo
Y29uc3QgUmVuZGVyR3JpZCYgZ3JpZCwgY29uc3QgUmVuZGVyRWxlbWVudCYgY2hpbGQpCiB7CiAg
ICAgcmV0dXJuIGNoaWxkLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgIT0gZ3JpZC5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpOwogfQpAQCAtODcsNyArODcsNyBAQCBib29sIGlzQXNwZWN0UmF0
aW9CbG9ja1NpemVEZXBlbmRlbnRDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkKQogICAgIHJl
dHVybiAoY2hpbGQuc3R5bGUoKS5oYXNBc3BlY3RSYXRpbygpIHx8IGNoaWxkLmhhc0ludHJpbnNp
Y0FzcGVjdFJhdGlvKCkpICYmIChjaGlsZC5oYXNSZWxhdGl2ZUxvZ2ljYWxIZWlnaHQoKSB8fCBj
aGlsZC5oYXNTdHJldGNoZWRMb2dpY2FsSGVpZ2h0KCkpOwogfQogCi1HcmlkVHJhY2tTaXppbmdE
aXJlY3Rpb24gZmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQoY29uc3QgUmVuZGVyR3JpZCYgZ3Jp
ZCwgY29uc3QgUmVuZGVyQm94JiBjaGlsZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVj
dGlvbikKK0dyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGls
ZChjb25zdCBSZW5kZXJHcmlkJiBncmlkLCBjb25zdCBSZW5kZXJFbGVtZW50JiBjaGlsZCwgR3Jp
ZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICByZXR1cm4gIWlzT3J0aG9n
b25hbENoaWxkKGdyaWQsIGNoaWxkKSA/IGRpcmVjdGlvbiA6IChkaXJlY3Rpb24gPT0gRm9yQ29s
dW1ucyA/IEZvclJvd3MgOiBGb3JDb2x1bW5zKTsKIH0KQEAgLTEwMiw2ICsxMDIsMTkgQEAgc3Rk
OjpvcHRpb25hbDxMYXlvdXRVbml0PiBvdmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29udGVudFNp
emVGb3JDaGlsZChjb25zdCBSZW4KICAgICByZXR1cm4gZGlyZWN0aW9uID09IEZvckNvbHVtbnMg
PyBjaGlsZC5vdmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aCgpIDog
Y2hpbGQub3ZlcnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCk7CiB9
CiAKK2Jvb2wgaXNGbGlwcGVkRGlyZWN0aW9uKGNvbnN0IFJlbmRlckdyaWQmIGdyaWQsIEdyaWRU
cmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBG
b3JDb2x1bW5zKQorICAgICAgICByZXR1cm4gIWdyaWQuc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCk7CisgICAgcmV0dXJuIGdyaWQuc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5n
TW9kZSgpOworfQorCitib29sIGlzU3ViZ3JpZFJldmVyc2VkRGlyZWN0aW9uKGNvbnN0IFJlbmRl
ckdyaWQmIGdyaWQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBvdXRlckRpcmVjdGlvbiwgY29u
c3QgUmVuZGVyR3JpZCYgc3ViZ3JpZCkKK3sKKyAgICBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24g
Y2hpbGREaXJlY3Rpb24gPSBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChncmlkLCBzdWJncmlk
LCBvdXRlckRpcmVjdGlvbik7CisgICAgcmV0dXJuIGlzRmxpcHBlZERpcmVjdGlvbihncmlkLCBv
dXRlckRpcmVjdGlvbikgIT0gaXNGbGlwcGVkRGlyZWN0aW9uKHN1YmdyaWQsIGNoaWxkRGlyZWN0
aW9uKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgR3JpZExheW91dEZ1bmN0aW9ucwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3Jp
ZExheW91dEZ1bmN0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRMYXlvdXRG
dW5jdGlvbnMuaAppbmRleCA1ZGIzZjVmOTgyOTUuLjI2ZWJkY2E5MDAxZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRMYXlvdXRGdW5jdGlvbnMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZExheW91dEZ1bmN0aW9ucy5oCkBAIC0zMCw2ICszMCw3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgUmVuZGVyRWxlbWVudDsKIGNsYXNz
IFJlbmRlckJveDsKIGNsYXNzIFJlbmRlckdyaWQ7CiAKQEAgLTM5LDEyICs0MCwxNSBAQCBuYW1l
c3BhY2UgR3JpZExheW91dEZ1bmN0aW9ucyB7CiAKIExheW91dFVuaXQgY29tcHV0ZU1hcmdpbkxv
Z2ljYWxTaXplRm9yQ2hpbGQoY29uc3QgUmVuZGVyR3JpZCYsIEdyaWRUcmFja1NpemluZ0RpcmVj
dGlvbiwgY29uc3QgUmVuZGVyQm94Jik7CiBMYXlvdXRVbml0IG1hcmdpbkxvZ2ljYWxTaXplRm9y
Q2hpbGQoY29uc3QgUmVuZGVyR3JpZCYsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiwgY29uc3Qg
UmVuZGVyQm94Jik7Ci1ib29sIGlzT3J0aG9nb25hbENoaWxkKGNvbnN0IFJlbmRlckdyaWQmLCBj
b25zdCBSZW5kZXJCb3gmKTsKK2Jvb2wgaXNPcnRob2dvbmFsQ2hpbGQoY29uc3QgUmVuZGVyR3Jp
ZCYsIGNvbnN0IFJlbmRlckVsZW1lbnQmKTsKIGJvb2wgaXNBc3BlY3RSYXRpb0Jsb2NrU2l6ZURl
cGVuZGVudENoaWxkKGNvbnN0IFJlbmRlckJveCYpOwotR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9u
IGZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKGNvbnN0IFJlbmRlckdyaWQmLCBjb25zdCBSZW5k
ZXJCb3gmLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24pOworR3JpZFRyYWNrU2l6aW5nRGlyZWN0
aW9uIGZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKGNvbnN0IFJlbmRlckdyaWQmLCBjb25zdCBS
ZW5kZXJFbGVtZW50JiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKTsKIGJvb2wgaGFzT3ZlcnJp
ZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94Jiwg
R3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKTsKIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gb3Zl
cnJpZGluZ0NvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94
JiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKTsKIAorYm9vbCBpc0ZsaXBwZWREaXJlY3Rpb24o
Y29uc3QgUmVuZGVyR3JpZCYsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbik7Citib29sIGlzU3Vi
Z3JpZFJldmVyc2VkRGlyZWN0aW9uKGNvbnN0IFJlbmRlckdyaWQmLCBHcmlkVHJhY2tTaXppbmdE
aXJlY3Rpb24gb3V0ZXJEaXJlY3Rpb24sIGNvbnN0IFJlbmRlckdyaWQmIHN1YmdyaWQpOworCiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9HcmlkVHJhY2tTaXppbmdBbGdvcml0aG0uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5jcHAKaW5kZXggMjQ0Nzc4NWY3ZTQxLi5m
NjVjMGYwMGJmZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJh
Y2tTaXppbmdBbGdvcml0aG0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Hcmlk
VHJhY2tTaXppbmdBbGdvcml0aG0uY3BwCkBAIC01ODcsNyArNTg3LDcgQEAgdm9pZCBHcmlkVHJh
Y2tTaXppbmdBbGdvcml0aG06OmRpc3RyaWJ1dGVTcGFjZVRvVHJhY2tzKFZlY3RvcjxHcmlkVHJh
Y2sqPiYgdHJhY2sKIAogc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBHcmlkVHJhY2tTaXppbmdB
bGdvcml0aG06OmVzdGltYXRlZEdyaWRBcmVhQnJlYWR0aEZvckNoaWxkKGNvbnN0IFJlbmRlckJv
eCYgY2hpbGQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0CiB7Ci0g
ICAgY29uc3QgR3JpZFNwYW4mIHNwYW4gPSBtX2dyaWQuZ3JpZEl0ZW1TcGFuKGNoaWxkLCBkaXJl
Y3Rpb24pOworICAgIGNvbnN0IEdyaWRTcGFuJiBzcGFuID0gbV9yZW5kZXJHcmlkLT5ncmlkU3Bh
bkZvckNoaWxkKGNoaWxkLCBkaXJlY3Rpb24pOwogICAgIExheW91dFVuaXQgZ3JpZEFyZWFTaXpl
OwogICAgIGJvb2wgZ3JpZEFyZWFJc0luZGVmaW5pdGUgPSBmYWxzZTsKICAgICBzdGQ6Om9wdGlv
bmFsPExheW91dFVuaXQ+IGF2YWlsYWJsZVNpemUgPSBhdmFpbGFibGVTcGFjZShkaXJlY3Rpb24p
OwpAQCAtNjI4LDcgKzYyOCw3IEBAIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gR3JpZFRyYWNr
U2l6aW5nQWxnb3JpdGhtOjpncmlkQXJlYUJyZWFkdGhGb3JDaGlsZChjb25zCiAgICAgfQogCiAg
ICAgY29uc3QgVmVjdG9yPEdyaWRUcmFjaz4mIGFsbFRyYWNrcyA9IHRyYWNrcyhkaXJlY3Rpb24p
OwotICAgIGNvbnN0IEdyaWRTcGFuJiBzcGFuID0gbV9ncmlkLmdyaWRJdGVtU3BhbihjaGlsZCwg
ZGlyZWN0aW9uKTsKKyAgICBjb25zdCBHcmlkU3BhbiYgc3BhbiA9IG1fcmVuZGVyR3JpZC0+Z3Jp
ZFNwYW5Gb3JDaGlsZChjaGlsZCwgZGlyZWN0aW9uKTsKICAgICBMYXlvdXRVbml0IGdyaWRBcmVh
QnJlYWR0aDsKICAgICBmb3IgKGF1dG8gdHJhY2tQb3NpdGlvbiA6IHNwYW4pCiAgICAgICAgIGdy
aWRBcmVhQnJlYWR0aCArPSBhbGxUcmFja3NbdHJhY2tQb3NpdGlvbl0uYmFzZVNpemUoKTsKQEAg
LTY1MCw3ICs2NTAsNyBAQCBib29sIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6aXNJbnRyaW5z
aWNTaXplZEdyaWRBcmVhKGNvbnN0IFJlbmRlckJveCYgY2hpbGQsCiB7CiAgICAgQVNTRVJUKHdh
c1NldHVwKCkpOwogICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24gPSBncmlk
RGlyZWN0aW9uRm9yQXhpcyhheGlzKTsKLSAgICBjb25zdCBHcmlkU3BhbiYgc3BhbiA9IG1fZ3Jp
ZC5ncmlkSXRlbVNwYW4oY2hpbGQsIGRpcmVjdGlvbik7CisgICAgY29uc3QgR3JpZFNwYW4mIHNw
YW4gPSBtX3JlbmRlckdyaWQtPmdyaWRTcGFuRm9yQ2hpbGQoY2hpbGQsIGRpcmVjdGlvbik7CiAg
ICAgZm9yIChhdXRvIHRyYWNrUG9zaXRpb24gOiBzcGFuKSB7CiAgICAgICAgIGNvbnN0IGF1dG8m
IHRyYWNrU2l6ZSA9IHJhd0dyaWRUcmFja1NpemUoZGlyZWN0aW9uLCB0cmFja1Bvc2l0aW9uKTsK
ICAgICAgICAgLy8gV2UgY29uc2lkZXIgZnIgdW5pdHMgYXMgJ2F1dG8nIGZvciB0aGUgbWluIHNp
emluZyBmdW5jdGlvbi4KQEAgLTg1OSw3ICs4NTksNyBAQCBMYXlvdXRVbml0IEdyaWRUcmFja1Np
emluZ0FsZ29yaXRobVN0cmF0ZWd5OjptaW5TaXplRm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCkg
YwogCiAgICAgaWYgKGNoaWxkTWluU2l6ZS5pc0F1dG8oKSAmJiBvdmVyZmxvd0lzVmlzaWJsZSkg
ewogICAgICAgICBhdXRvIG1pblNpemUgPSBtaW5Db250ZW50Rm9yQ2hpbGQoY2hpbGQpOwotICAg
ICAgICBjb25zdCBHcmlkU3BhbiYgc3BhbiA9IG1fYWxnb3JpdGhtLmdyaWQoKS5ncmlkSXRlbVNw
YW4oY2hpbGQsIGRpcmVjdGlvbigpKTsKKyAgICAgICAgY29uc3QgR3JpZFNwYW4mIHNwYW4gPSBt
X2FsZ29yaXRobS5tX3JlbmRlckdyaWQtPmdyaWRTcGFuRm9yQ2hpbGQoY2hpbGQsIGRpcmVjdGlv
bigpKTsKIAogICAgICAgICBMYXlvdXRVbml0IG1heEJyZWFkdGg7CiAgICAgICAgIGF1dG8gYWxs
VHJhY2tzID0gbV9hbGdvcml0aG0udHJhY2tzKGRpcmVjdGlvbigpKTsKQEAgLTkxOCw3ICs5MTgs
NyBAQCB2b2lkIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6dXBkYXRlQmFzZWxpbmVBbGlnbm1l
bnRDb250ZXh0KGNvbnN0IFJlbmRlckJveCYgYwogICAgIEFTU0VSVCghY2hpbGQubmVlZHNMYXlv
dXQoKSk7CiAKICAgICBJdGVtUG9zaXRpb24gYWxpZ24gPSBtX3JlbmRlckdyaWQtPnNlbGZBbGln
bm1lbnRGb3JDaGlsZChiYXNlbGluZUF4aXMsIGNoaWxkKS5wb3NpdGlvbigpOwotICAgIGNvbnN0
IGF1dG8mIHNwYW4gPSBtX2dyaWQuZ3JpZEl0ZW1TcGFuKGNoaWxkLCBncmlkRGlyZWN0aW9uRm9y
QXhpcyhiYXNlbGluZUF4aXMpKTsKKyAgICBjb25zdCBhdXRvJiBzcGFuID0gbV9yZW5kZXJHcmlk
LT5ncmlkU3BhbkZvckNoaWxkKGNoaWxkLCBncmlkRGlyZWN0aW9uRm9yQXhpcyhiYXNlbGluZUF4
aXMpKTsKICAgICBtX2Jhc2VsaW5lQWxpZ25tZW50LnVwZGF0ZUJhc2VsaW5lQWxpZ25tZW50Q29u
dGV4dChhbGlnbiwgc3Bhbi5zdGFydExpbmUoKSwgY2hpbGQsIGJhc2VsaW5lQXhpcyk7CiB9CiAK
QEAgLTkyOCw3ICs5MjgsNyBAQCBMYXlvdXRVbml0IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6
YmFzZWxpbmVPZmZzZXRGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaQogICAgICAgICByZXR1
cm4gTGF5b3V0VW5pdCgpOwogCiAgICAgSXRlbVBvc2l0aW9uIGFsaWduID0gbV9yZW5kZXJHcmlk
LT5zZWxmQWxpZ25tZW50Rm9yQ2hpbGQoYmFzZWxpbmVBeGlzLCBjaGlsZCkucG9zaXRpb24oKTsK
LSAgICBjb25zdCBhdXRvJiBzcGFuID0gbV9ncmlkLmdyaWRJdGVtU3BhbihjaGlsZCwgZ3JpZERp
cmVjdGlvbkZvckF4aXMoYmFzZWxpbmVBeGlzKSk7CisgICAgY29uc3QgYXV0byYgc3BhbiA9IG1f
cmVuZGVyR3JpZC0+Z3JpZFNwYW5Gb3JDaGlsZChjaGlsZCwgZ3JpZERpcmVjdGlvbkZvckF4aXMo
YmFzZWxpbmVBeGlzKSk7CiAgICAgcmV0dXJuIG1fYmFzZWxpbmVBbGlnbm1lbnQuYmFzZWxpbmVP
ZmZzZXRGb3JDaGlsZChhbGlnbiwgc3Bhbi5zdGFydExpbmUoKSwgY2hpbGQsIGJhc2VsaW5lQXhp
cyk7CiB9CiAKQEAgLTk5MCw2ICs5OTAsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgcmVjb21wdXRl
VXNlZEZsZXhGcmFjdGlvbklmTmVlZGVkKGRvdWJsZSYgZmxleEZyYWN0aW9uLCBMYXlvdXRVbml0
JiB0b3RhbEdyb3d0aCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgTGF5b3V0VW5pdCBmcmVlU3BhY2VG
b3JTdHJldGNoQXV0b1RyYWNrc1N0ZXAoKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIGlzQ29t
cHV0aW5nU2l6ZUNvbnRhaW5tZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc2hvdWxkQXBw
bHlTaXplQ29udGFpbm1lbnQoKnJlbmRlckdyaWQoKSk7IH0KKyAgICB2b2lkIGFjY3VtdWxhdGVG
bGV4RnJhY3Rpb24oZG91YmxlJiBmbGV4RnJhY3Rpb24sIEdyaWRJdGVyYXRvciYsIEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbiBvdXRlcm1vc3REaXJlY3Rpb24sIEhhc2hTZXQ8UmVuZGVyQm94Kj4m
IGl0ZW1zU2V0KSBjb25zdDsKIH07CiAKIHZvaWQgSW5kZWZpbml0ZVNpemVTdHJhdGVneTo6bGF5
b3V0R3JpZEl0ZW1Gb3JNaW5TaXplQ29tcHV0YXRpb24oUmVuZGVyQm94JiBjaGlsZCwgYm9vbCBv
dmVycmlkZVNpemVIYXNDaGFuZ2VkKSBjb25zdApAQCAtMTAxMyw2ICsxMDE0LDI4IEBAIHN0YXRp
YyBpbmxpbmUgZG91YmxlIG5vcm1hbGl6ZWRGbGV4RnJhY3Rpb24oY29uc3QgR3JpZFRyYWNrJiB0
cmFjaykKICAgICByZXR1cm4gdHJhY2suYmFzZVNpemUoKSAvIHN0ZDo6bWF4PGRvdWJsZT4oMSwg
ZmxleEZhY3Rvcik7CiB9CiAKK3ZvaWQgSW5kZWZpbml0ZVNpemVTdHJhdGVneTo6YWNjdW11bGF0
ZUZsZXhGcmFjdGlvbihkb3VibGUmIGZsZXhGcmFjdGlvbiwgR3JpZEl0ZXJhdG9yJiBpdGVyYXRv
ciwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIG91dGVybW9zdERpcmVjdGlvbiwgSGFzaFNldDxS
ZW5kZXJCb3gqPiYgaXRlbXNTZXQpIGNvbnN0Cit7CisgICAgd2hpbGUgKGF1dG8qIGdyaWRJdGVt
ID0gaXRlcmF0b3IubmV4dEdyaWRJdGVtKCkpIHsKKyAgICAgICAgaWYgKGlzPFJlbmRlckdyaWQ+
KGdyaWRJdGVtKSAmJiBkb3duY2FzdDxSZW5kZXJHcmlkPihncmlkSXRlbSktPmlzU3ViZ3JpZElu
UGFyZW50RGlyZWN0aW9uKGl0ZXJhdG9yLmRpcmVjdGlvbigpKSkgeworICAgICAgICAgICAgUmVu
ZGVyR3JpZCogaW5uZXIgPSBkb3duY2FzdDxSZW5kZXJHcmlkPihncmlkSXRlbSk7CisKKyAgICAg
ICAgICAgIEdyaWRJdGVyYXRvciBjaGlsZEl0ZXJhdG9yID0gR3JpZEl0ZXJhdG9yOjpjcmVhdGVG
b3JTdWJncmlkKCppbm5lciwgaXRlcmF0b3IpOworICAgICAgICAgICAgYWNjdW11bGF0ZUZsZXhG
cmFjdGlvbihmbGV4RnJhY3Rpb24sIGNoaWxkSXRlcmF0b3IsIG91dGVybW9zdERpcmVjdGlvbiwg
aXRlbXNTZXQpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgLy8g
RG8gbm90IGluY2x1ZGUgYWxyZWFkeSBwcm9jZXNzZWQgaXRlbXMuCisgICAgICAgIGlmICghaXRl
bXNTZXQuYWRkKGdyaWRJdGVtKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgR3JpZFNwYW4gc3BhbiA9IG1fYWxnb3JpdGhtLnJlbmRlckdyaWQoKS0+Z3JpZFNw
YW5Gb3JDaGlsZCgqZ3JpZEl0ZW0sIG91dGVybW9zdERpcmVjdGlvbik7CisKKyAgICAgICAgLy8g
UmVtb3ZpbmcgZ3V0dGVycyBmcm9tIHRoZSBtYXgtY29udGVudCBjb250cmlidXRpb24gb2YgdGhl
IGl0ZW0sIHNvIHRoZXkgYXJlIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gRmluZEZyVW5pdFNp
emUoKS4KKyAgICAgICAgTGF5b3V0VW5pdCBsZWZ0T3ZlclNwYWNlID0gbWF4Q29udGVudEZvckNo
aWxkKCpncmlkSXRlbSkgLSByZW5kZXJHcmlkKCktPmd1dHRlcnNTaXplKG1fYWxnb3JpdGhtLmdy
aWQoKSwgb3V0ZXJtb3N0RGlyZWN0aW9uLCBzcGFuLnN0YXJ0TGluZSgpLCBzcGFuLmludGVnZXJT
cGFuKCksIGF2YWlsYWJsZVNwYWNlKCkpOworICAgICAgICBmbGV4RnJhY3Rpb24gPSBzdGQ6Om1h
eChmbGV4RnJhY3Rpb24sIGZpbmRGclVuaXRTaXplKHNwYW4sIGxlZnRPdmVyU3BhY2UpKTsKKyAg
ICB9Cit9CisKIGRvdWJsZSBJbmRlZmluaXRlU2l6ZVN0cmF0ZWd5OjpmaW5kVXNlZEZsZXhGcmFj
dGlvbihWZWN0b3I8dW5zaWduZWQ+JiBmbGV4aWJsZVNpemVkVHJhY2tzSW5kZXgsIEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gZnJl
ZVNwYWNlKSBjb25zdAogewogICAgIFVOVVNFRF9QQVJBTShmcmVlU3BhY2UpOwpAQCAtMTAzMiwx
NyArMTA1NSw3IEBAIGRvdWJsZSBJbmRlZmluaXRlU2l6ZVN0cmF0ZWd5OjpmaW5kVXNlZEZsZXhG
cmFjdGlvbihWZWN0b3I8dW5zaWduZWQ+JiBmbGV4aWJsZVNpCiAgICAgSGFzaFNldDxSZW5kZXJC
b3gqPiBpdGVtc1NldDsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYWNrSW5kZXggOiBmbGV4aWJs
ZVNpemVkVHJhY2tzSW5kZXgpIHsKICAgICAgICAgR3JpZEl0ZXJhdG9yIGl0ZXJhdG9yKGdyaWQs
IGRpcmVjdGlvbiwgdHJhY2tJbmRleCk7Ci0gICAgICAgIHdoaWxlIChhdXRvKiBncmlkSXRlbSA9
IGl0ZXJhdG9yLm5leHRHcmlkSXRlbSgpKSB7Ci0gICAgICAgICAgICAvLyBEbyBub3QgaW5jbHVk
ZSBhbHJlYWR5IHByb2Nlc3NlZCBpdGVtcy4KLSAgICAgICAgICAgIGlmICghaXRlbXNTZXQuYWRk
KGdyaWRJdGVtKS5pc05ld0VudHJ5KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgICAgICBjb25zdCBHcmlkU3BhbiYgc3BhbiA9IGdyaWQuZ3JpZEl0ZW1TcGFuKCpncmlkSXRl
bSwgZGlyZWN0aW9uKTsKLQotICAgICAgICAgICAgLy8gUmVtb3ZpbmcgZ3V0dGVycyBmcm9tIHRo
ZSBtYXgtY29udGVudCBjb250cmlidXRpb24gb2YgdGhlIGl0ZW0sIHNvIHRoZXkgYXJlIG5vdCB0
YWtlbiBpbnRvIGFjY291bnQgaW4gRmluZEZyVW5pdFNpemUoKS4KLSAgICAgICAgICAgIExheW91
dFVuaXQgbGVmdE92ZXJTcGFjZSA9IG1heENvbnRlbnRGb3JDaGlsZCgqZ3JpZEl0ZW0pIC0gcmVu
ZGVyR3JpZCgpLT5ndXR0ZXJzU2l6ZShtX2FsZ29yaXRobS5ncmlkKCksIGRpcmVjdGlvbiwgc3Bh
bi5zdGFydExpbmUoKSwgc3Bhbi5pbnRlZ2VyU3BhbigpLCBhdmFpbGFibGVTcGFjZSgpKTsKLSAg
ICAgICAgICAgIGZsZXhGcmFjdGlvbiA9IHN0ZDo6bWF4KGZsZXhGcmFjdGlvbiwgZmluZEZyVW5p
dFNpemUoc3BhbiwgbGVmdE92ZXJTcGFjZSkpOwotICAgICAgICB9CisgICAgICAgIGFjY3VtdWxh
dGVGbGV4RnJhY3Rpb24oZmxleEZyYWN0aW9uLCBpdGVyYXRvciwgZGlyZWN0aW9uLCBpdGVtc1Nl
dCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGZsZXhGcmFjdGlvbjsKQEAgLTEyMDksNiArMTIyMiwz
MCBAQCB2b2lkIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6aW5pdGlhbGl6ZVRyYWNrU2l6ZXMo
KQogICAgIH0KIH0KIAordm9pZCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmFjY3VtdWxhdGVJ
bnRyaW5zaWNTaXplc0ZvclRyYWNrKEdyaWRUcmFjayYgdHJhY2ssIEdyaWRJdGVyYXRvciYgaXRl
cmF0b3IsIFZlY3RvcjxHcmlkSXRlbVdpdGhTcGFuPiYgaXRlbXNTb3J0ZWRCeUluY3JlYXNpbmdT
cGFuLCBWZWN0b3I8R3JpZEl0ZW1XaXRoU3Bhbj4mIGl0ZW1zQ3Jvc3NpbmdGbGV4aWJsZVRyYWNr
cywgSGFzaFNldDxSZW5kZXJCb3gqPiYgaXRlbXNTZXQpCit7CisgICAgd2hpbGUgKGF1dG8qIGdy
aWRJdGVtID0gaXRlcmF0b3IubmV4dEdyaWRJdGVtKCkpIHsKKyAgICAgICAgYm9vbCBpc05ld0Vu
dHJ5ID0gaXRlbXNTZXQuYWRkKGdyaWRJdGVtKS5pc05ld0VudHJ5OworICAgICAgICBpZiAoaXM8
UmVuZGVyR3JpZD4oZ3JpZEl0ZW0pICYmIGRvd25jYXN0PFJlbmRlckdyaWQ+KGdyaWRJdGVtKS0+
aXNTdWJncmlkSW5QYXJlbnREaXJlY3Rpb24oaXRlcmF0b3IuZGlyZWN0aW9uKCkpKSB7CisgICAg
ICAgICAgICBSZW5kZXJHcmlkKiBpbm5lciA9IGRvd25jYXN0PFJlbmRlckdyaWQ+KGdyaWRJdGVt
KTsKKworICAgICAgICAgICAgR3JpZEl0ZXJhdG9yIGNoaWxkSXRlcmF0b3IgPSBHcmlkSXRlcmF0
b3I6OmNyZWF0ZUZvclN1YmdyaWQoKmlubmVyLCBpdGVyYXRvcik7CisgICAgICAgICAgICBhY2N1
bXVsYXRlSW50cmluc2ljU2l6ZXNGb3JUcmFjayh0cmFjaywgY2hpbGRJdGVyYXRvciwgaXRlbXNT
b3J0ZWRCeUluY3JlYXNpbmdTcGFuLCBpdGVtc0Nyb3NzaW5nRmxleGlibGVUcmFja3MsIGl0ZW1z
U2V0KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmICghaXNO
ZXdFbnRyeSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBHcmlkU3BhbiBzcGFuID0g
bV9yZW5kZXJHcmlkLT5ncmlkU3BhbkZvckNoaWxkKCpncmlkSXRlbSwgbV9kaXJlY3Rpb24pOwor
CisgICAgICAgIGlmIChzcGFubmluZ0l0ZW1Dcm9zc2VzRmxleGlibGVTaXplZFRyYWNrcyhzcGFu
KSkKKyAgICAgICAgICAgIGl0ZW1zQ3Jvc3NpbmdGbGV4aWJsZVRyYWNrcy5hcHBlbmQoR3JpZEl0
ZW1XaXRoU3BhbigqZ3JpZEl0ZW0sIHNwYW4pKTsKKyAgICAgICAgZWxzZSBpZiAoc3Bhbi5pbnRl
Z2VyU3BhbigpID09IDEpCisgICAgICAgICAgICBzaXplVHJhY2tUb0ZpdE5vblNwYW5uaW5nSXRl
bShzcGFuLCAqZ3JpZEl0ZW0sIHRyYWNrKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaXRl
bXNTb3J0ZWRCeUluY3JlYXNpbmdTcGFuLmFwcGVuZChHcmlkSXRlbVdpdGhTcGFuKCpncmlkSXRl
bSwgc3BhbikpOworICAgIH0KK30KKwogdm9pZCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OnJl
c29sdmVJbnRyaW5zaWNUcmFja1NpemVzKCkKIHsKICAgICBWZWN0b3I8R3JpZFRyYWNrPiYgYWxs
VHJhY2tzID0gdHJhY2tzKG1fZGlyZWN0aW9uKTsKQEAgLTEyMjgsMjIgKzEyNjUsMTMgQEAgdm9p
ZCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OnJlc29sdmVJbnRyaW5zaWNUcmFja1NpemVzKCkK
ICAgICBWZWN0b3I8R3JpZEl0ZW1XaXRoU3Bhbj4gaXRlbXNTb3J0ZWRCeUluY3JlYXNpbmdTcGFu
OwogICAgIFZlY3RvcjxHcmlkSXRlbVdpdGhTcGFuPiBpdGVtc0Nyb3NzaW5nRmxleGlibGVUcmFj
a3M7CiAgICAgSGFzaFNldDxSZW5kZXJCb3gqPiBpdGVtc1NldDsKKwogICAgIGlmIChtX2dyaWQu
aGFzR3JpZEl0ZW1zKCkpIHsKICAgICAgICAgZm9yIChhdXRvIHRyYWNrSW5kZXggOiBtX2NvbnRl
bnRTaXplZFRyYWNrc0luZGV4KSB7CiAgICAgICAgICAgICBHcmlkSXRlcmF0b3IgaXRlcmF0b3Io
bV9ncmlkLCBtX2RpcmVjdGlvbiwgdHJhY2tJbmRleCk7CiAgICAgICAgICAgICBHcmlkVHJhY2sm
IHRyYWNrID0gYWxsVHJhY2tzW3RyYWNrSW5kZXhdOwogCi0gICAgICAgICAgICB3aGlsZSAoYXV0
byogZ3JpZEl0ZW0gPSBpdGVyYXRvci5uZXh0R3JpZEl0ZW0oKSkgewotICAgICAgICAgICAgICAg
IGlmIChpdGVtc1NldC5hZGQoZ3JpZEl0ZW0pLmlzTmV3RW50cnkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgY29uc3QgR3JpZFNwYW4mIHNwYW4gPSBtX2dyaWQuZ3JpZEl0ZW1TcGFuKCpncmlkSXRl
bSwgbV9kaXJlY3Rpb24pOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3Bhbm5pbmdJdGVtQ3Jv
c3Nlc0ZsZXhpYmxlU2l6ZWRUcmFja3Moc3BhbikpCi0gICAgICAgICAgICAgICAgICAgICAgICBp
dGVtc0Nyb3NzaW5nRmxleGlibGVUcmFja3MuYXBwZW5kKEdyaWRJdGVtV2l0aFNwYW4oKmdyaWRJ
dGVtLCBzcGFuKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNwYW4uaW50ZWdlclNw
YW4oKSA9PSAxKQotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZVRyYWNrVG9GaXROb25TcGFu
bmluZ0l0ZW0oc3BhbiwgKmdyaWRJdGVtLCB0cmFjayk7Ci0gICAgICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zU29ydGVkQnlJbmNyZWFzaW5nU3Bhbi5h
cHBlbmQoR3JpZEl0ZW1XaXRoU3BhbigqZ3JpZEl0ZW0sIHNwYW4pKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBhY2N1bXVsYXRlSW50cmluc2ljU2l6ZXNG
b3JUcmFjayh0cmFjaywgaXRlcmF0b3IsIGl0ZW1zU29ydGVkQnlJbmNyZWFzaW5nU3BhbiwgaXRl
bXNDcm9zc2luZ0ZsZXhpYmxlVHJhY2tzLCBpdGVtc1NldCk7CiAgICAgICAgIH0KICAgICAgICAg
c3RkOjpzb3J0KGl0ZW1zU29ydGVkQnlJbmNyZWFzaW5nU3Bhbi5iZWdpbigpLCBpdGVtc1NvcnRl
ZEJ5SW5jcmVhc2luZ1NwYW4uZW5kKCkpOwogICAgIH0KQEAgLTEzOTksMTEgKzE0MjcsNzAgQEAg
dm9pZCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmNvbXB1dGVCYXNlbGluZUFsaWdubWVudENv
bnRleHQoKQogICAgIH0KIH0KIAorc3RhdGljIHZvaWQgcmVtb3ZlU3ViZ3JpZE1hcmdpbkJvcmRl
clBhZGRpbmdGcm9tVHJhY2tzKFZlY3RvcjxHcmlkVHJhY2s+JiB0cmFja3MsIExheW91dFVuaXQg
bWJwLCBib29sIGZvcndhcmRzKQoreworICAgIGludCBudW1UcmFja3MgPSB0cmFja3Muc2l6ZSgp
OworICAgIGludCBpID0gZm9yd2FyZHMgPyAwIDogbnVtVHJhY2tzIC0gMTsKKyAgICB3aGlsZSAo
bWJwID4gMCAmJiAoZm9yd2FyZHMgPyBpIDwgbnVtVHJhY2tzIDogaSA+PSAwKSkgeworICAgICAg
ICBMYXlvdXRVbml0IHNpemUgPSB0cmFja3NbaV0uYmFzZVNpemUoKTsKKyAgICAgICAgaWYgKHNp
emUgPiBtYnApIHsKKyAgICAgICAgICAgIHNpemUgLT0gbWJwOworICAgICAgICAgICAgbWJwID0g
MDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1icCAtPSBzaXplOworICAgICAgICAg
ICAgc2l6ZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgdHJhY2tzW2ldLnNldEJhc2VTaXplKHNp
emUpOworCisgICAgICAgIGZvcndhcmRzID8gaSsrIDogaS0tOworICAgIH0KK30KKworYm9vbCBH
cmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmNvcHlVc2VkVHJhY2tTaXplc0ZvclN1YmdyaWQoKQor
eworICAgIFJlbmRlckdyaWQqIG91dGVyID0gZG93bmNhc3Q8UmVuZGVyR3JpZD4obV9yZW5kZXJH
cmlkLT5wYXJlbnQoKSk7CisgICAgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtJiBwYXJlbnRBbGdv
ID0gb3V0ZXItPm1fdHJhY2tTaXppbmdBbGdvcml0aG07CisgICAgR3JpZFRyYWNrU2l6aW5nRGly
ZWN0aW9uIGRpcmVjdGlvbiA9IEdyaWRMYXlvdXRGdW5jdGlvbnM6OmZsb3dBd2FyZURpcmVjdGlv
bkZvckNoaWxkKCptX3JlbmRlckdyaWQsICpvdXRlciwgbV9kaXJlY3Rpb24pOworICAgIFZlY3Rv
cjxHcmlkVHJhY2s+JiBwYXJlbnRUcmFja3MgPSBwYXJlbnRBbGdvLnRyYWNrcyhkaXJlY3Rpb24p
OworICAgIEdyaWRTcGFuIHNwYW4gPSBvdXRlci0+Z3JpZFNwYW5Gb3JDaGlsZCgqbV9yZW5kZXJH
cmlkLCBkaXJlY3Rpb24pOworCisgICAgaWYgKCFwYXJlbnRUcmFja3Muc2l6ZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgbnVtVHJhY2tzID0gdHJhY2tzKG1fZGlyZWN0aW9u
KS5zaXplKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1UcmFja3M7IGkrKykKKyAgICAg
ICAgdHJhY2tzKG1fZGlyZWN0aW9uKVtpXSA9IHBhcmVudFRyYWNrc1tpICsgc3Bhbi5zdGFydExp
bmUoKV07CisKKyAgICBpZiAoR3JpZExheW91dEZ1bmN0aW9uczo6aXNTdWJncmlkUmV2ZXJzZWRE
aXJlY3Rpb24oKm91dGVyLCBkaXJlY3Rpb24sICptX3JlbmRlckdyaWQpKQorICAgICAgICB0cmFj
a3MobV9kaXJlY3Rpb24pLnJldmVyc2UoKTsKKworICAgIExheW91dFVuaXQgc3RhcnRNQlAgPSAo
bV9kaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykgPyBtX3JlbmRlckdyaWQtPm1hcmdpbkFuZEJvcmRl
ckFuZFBhZGRpbmdTdGFydCgpIDogbV9yZW5kZXJHcmlkLT5tYXJnaW5BbmRCb3JkZXJBbmRQYWRk
aW5nQmVmb3JlKCk7CisgICAgcmVtb3ZlU3ViZ3JpZE1hcmdpbkJvcmRlclBhZGRpbmdGcm9tVHJh
Y2tzKHRyYWNrcyhtX2RpcmVjdGlvbiksIHN0YXJ0TUJQLCB0cnVlKTsKKyAgICBMYXlvdXRVbml0
IGVuZE1CUCA9IChtX2RpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IG1fcmVuZGVyR3JpZC0+bWFy
Z2luQW5kQm9yZGVyQW5kUGFkZGluZ0VuZCgpIDogbV9yZW5kZXJHcmlkLT5tYXJnaW5BbmRCb3Jk
ZXJBbmRQYWRkaW5nQWZ0ZXIoKTsKKyAgICByZW1vdmVTdWJncmlkTWFyZ2luQm9yZGVyUGFkZGlu
Z0Zyb21UcmFja3ModHJhY2tzKG1fZGlyZWN0aW9uKSwgZW5kTUJQLCBmYWxzZSk7CisKKyAgICBM
YXlvdXRVbml0IGdhcERpZmZlcmVuY2UgPSAobV9yZW5kZXJHcmlkLT5ncmlkR2FwKG1fZGlyZWN0
aW9uKSAtIG91dGVyLT5ncmlkR2FwKGRpcmVjdGlvbikpIC8gMjsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IG51bVRyYWNrczsgaSsrKSB7CisgICAgICAgIExheW91dFVuaXQgc2l6ZSA9IHRyYWNr
cyhtX2RpcmVjdGlvbilbaV0uYmFzZVNpemUoKTsKKyAgICAgICAgaWYgKGkpCisgICAgICAgICAg
ICBzaXplIC09IGdhcERpZmZlcmVuY2U7CisgICAgICAgIGlmIChpICE9IG51bVRyYWNrcyAtIDEp
CisgICAgICAgICAgICBzaXplIC09IGdhcERpZmZlcmVuY2U7CisgICAgICAgIHRyYWNrcyhtX2Rp
cmVjdGlvbilbaV0uc2V0QmFzZVNpemUoc3RkOjptYXgoc2l6ZSwgMF9sdSkpOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OnJ1bigp
CiB7CiAgICAgQVNTRVJUKHdhc1NldHVwKCkpOwogICAgIFN0YXRlTWFjaGluZSBzdGF0ZU1hY2hp
bmUoKnRoaXMpOwogCisgICAgaWYgKG1fcmVuZGVyR3JpZC0+aXNTdWJncmlkKG1fZGlyZWN0aW9u
KSkgeworICAgICAgICBpZiAoY29weVVzZWRUcmFja1NpemVzRm9yU3ViZ3JpZCgpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIC8vIFN0ZXAgMS4KICAgICBjb25zdCBzdGQ6Om9w
dGlvbmFsPExheW91dFVuaXQ+IGluaXRpYWxGcmVlU3BhY2UgPSBmcmVlU3BhY2UobV9kaXJlY3Rp
b24pOwogICAgIGluaXRpYWxpemVUcmFja1NpemVzKCk7CkBAIC0xNDUzLDYgKzE1NDAsMTEgQEAg
dm9pZCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OnJlc2V0KCkKICNpZiBBU1NFUlRfRU5BQkxF
RAogYm9vbCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OnRyYWNrc0FyZVdpZGVyVGhhbk1pblRy
YWNrQnJlYWR0aCgpIGNvbnN0CiB7CisgICAgLy8gU3ViZ3JpZHMgaW5oZXJpdCB0aGVpciBzaXpp
bmcgZGlyZWN0bHkgZnJvbSB0aGUgcGFyZW50LCBzbyBtYXkgYmUgdW5yZWxhdGVkCisgICAgLy8g
dG8gdGhlaXIgaW5pdGlhbCBiYXNlIHNpemUuCisgICAgaWYgKG1fcmVuZGVyR3JpZC0+aXNTdWJn
cmlkKG1fZGlyZWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICBjb25zdCBWZWN0
b3I8R3JpZFRyYWNrPiYgYWxsVHJhY2tzID0gdHJhY2tzKG1fZGlyZWN0aW9uKTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGFsbFRyYWNrcy5zaXplKCk7ICsraSkgewogICAgICAgICBjb25z
dCBhdXRvJiB0cmFja1NpemUgPSBhbGxUcmFja3NbaV0uY2FjaGVkVHJhY2tTaXplKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGht
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmgK
aW5kZXggYWUxZGQ2YzdhY2RiLi5jMDdlNTM4NjgxNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9HcmlkVHJhY2tTaXppbmdBbGdvcml0aG0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmgKQEAgLTU1LDYgKzU1LDcg
QEAgZW51bSBjbGFzcyBTcGFjZURpc3RyaWJ1dGlvbkxpbWl0IDogdWludDhfdCAgewogfTsKIAog
Y2xhc3MgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtU3RyYXRlZ3k7CitjbGFzcyBHcmlkSXRlbVdp
dGhTcGFuOwogCiBjbGFzcyBHcmlkVHJhY2sgewogcHVibGljOgpAQCAtMTIxLDYgKzEyMiw4IEBA
IHB1YmxpYzoKICAgICAvLyBhbmQgZW5jYXBzdWxhdGUgYW55IGFjY2VzcyBpbiB0aGUgYWxnb3Jp
dGhtIGNsYXNzLgogICAgIEdyaWQmIG11dGFibGVHcmlkKCkgY29uc3QgeyByZXR1cm4gbV9ncmlk
OyB9CiAKKyAgICBjb25zdCBSZW5kZXJHcmlkKiByZW5kZXJHcmlkKCkgeyByZXR1cm4gbV9yZW5k
ZXJHcmlkOyB9OworCiAgICAgTGF5b3V0VW5pdCBtaW5Db250ZW50U2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWluQ29udGVudFNpemU7IH07CiAgICAgTGF5b3V0VW5pdCBtYXhDb250ZW50U2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbWF4Q29udGVudFNpemU7IH07CiAKQEAgLTE5Myw2ICsxOTYsMTAg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHN0cmV0Y2hGbGV4aWJsZVRyYWNrcyhzdGQ6Om9wdGlvbmFs
PExheW91dFVuaXQ+IGZyZWVTcGFjZSk7CiAgICAgdm9pZCBzdHJldGNoQXV0b1RyYWNrcygpOwog
CisgICAgdm9pZCBhY2N1bXVsYXRlSW50cmluc2ljU2l6ZXNGb3JUcmFjayhHcmlkVHJhY2smLCBH
cmlkSXRlcmF0b3ImLCBWZWN0b3I8R3JpZEl0ZW1XaXRoU3Bhbj4mIGl0ZW1zU29ydGVkQnlJbmNy
ZWFzaW5nU3BhbiwgVmVjdG9yPEdyaWRJdGVtV2l0aFNwYW4+JiBpdGVtc0Nyb3NzaW5nRmxleGli
bGVUcmFja3MsIEhhc2hTZXQ8UmVuZGVyQm94Kj4mIGl0ZW1zU2V0KTsKKworICAgIGJvb2wgY29w
eVVzZWRUcmFja1NpemVzRm9yU3ViZ3JpZCgpOworCiAgICAgLy8gU3RhdGUgbWFjaGluZS4KICAg
ICB2b2lkIGFkdmFuY2VOZXh0U3RhdGUoKTsKICAgICBib29sIGlzVmFsaWRUcmFuc2l0aW9uKCkg
Y29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5oCmluZGV4IDIyZDZiMmRiYWI4Mi4uOTdiOTY1YTMwZmRkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaApAQCAtMTc3LDYgKzE3NywxMSBA
QCBwdWJsaWM6CiAgICAgTGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkgY29uc3Qg
eyByZXR1cm4gYm9yZGVyQmVmb3JlKCkgKyBwYWRkaW5nQmVmb3JlKCk7IH0KICAgICBMYXlvdXRV
bml0IGJvcmRlckFuZFBhZGRpbmdBZnRlcigpIGNvbnN0IHsgcmV0dXJuIGJvcmRlckFmdGVyKCkg
KyBwYWRkaW5nQWZ0ZXIoKTsgfQogCisgICAgTGF5b3V0VW5pdCBtYXJnaW5BbmRCb3JkZXJBbmRQ
YWRkaW5nU3RhcnQoKSBjb25zdCB7IHJldHVybiBtYXJnaW5TdGFydCgpICsgYm9yZGVyU3RhcnQo
KSArIHBhZGRpbmdTdGFydCgpOyB9CisgICAgTGF5b3V0VW5pdCBtYXJnaW5BbmRCb3JkZXJBbmRQ
YWRkaW5nRW5kKCkgY29uc3QgeyByZXR1cm4gbWFyZ2luRW5kKCkgKyBib3JkZXJFbmQoKSArIHBh
ZGRpbmdFbmQoKTsgfQorICAgIExheW91dFVuaXQgbWFyZ2luQW5kQm9yZGVyQW5kUGFkZGluZ0Jl
Zm9yZSgpIGNvbnN0IHsgcmV0dXJuIG1hcmdpbkJlZm9yZSgpICsgYm9yZGVyQmVmb3JlKCkgKyBw
YWRkaW5nQmVmb3JlKCk7IH0KKyAgICBMYXlvdXRVbml0IG1hcmdpbkFuZEJvcmRlckFuZFBhZGRp
bmdBZnRlcigpIGNvbnN0IHsgcmV0dXJuIG1hcmdpbkFmdGVyKCkgKyBib3JkZXJBZnRlcigpICsg
cGFkZGluZ0FmdGVyKCk7IH0KKwogICAgIExheW91dFVuaXQgdmVydGljYWxCb3JkZXJBbmRQYWRk
aW5nRXh0ZW50KCkgY29uc3QgeyByZXR1cm4gYm9yZGVyVG9wKCkgKyBib3JkZXJCb3R0b20oKSAr
IHBhZGRpbmdUb3AoKSArIHBhZGRpbmdCb3R0b20oKTsgfQogICAgIExheW91dFVuaXQgaG9yaXpv
bnRhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSBjb25zdCB7IHJldHVybiBib3JkZXJMZWZ0KCkg
KyBib3JkZXJSaWdodCgpICsgcGFkZGluZ0xlZnQoKSArIHBhZGRpbmdSaWdodCgpOyB9CiAgICAg
TGF5b3V0VW5pdCBib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJu
IGJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKSArIGJvcmRlckFuZFBhZGRpbmdBZnRlcigpOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKaW5kZXggN2ZmYjYyMzc0OGYwLi41
NzQ2M2FkYjhlMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJH
cmlkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKQEAg
LTExMCw3ICsxMTAsNyBAQCB2b2lkIFJlbmRlckdyaWQ6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlm
ZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bAogICAgICAgICB9CiAgICAg
fQogCi0gICAgaWYgKGV4cGxpY2l0R3JpZERpZFJlc2l6ZSgqb2xkU3R5bGUpIHx8IG5hbWVkR3Jp
ZExpbmVzRGVmaW5pdGlvbkRpZENoYW5nZSgqb2xkU3R5bGUpIHx8IG9sZFN0eWxlLT5ncmlkQXV0
b0Zsb3coKSAhPSBzdHlsZSgpLmdyaWRBdXRvRmxvdygpCisgICAgaWYgKGV4cGxpY2l0R3JpZERp
ZFJlc2l6ZSgqb2xkU3R5bGUpIHx8IG5hbWVkR3JpZExpbmVzRGVmaW5pdGlvbkRpZENoYW5nZSgq
b2xkU3R5bGUpIHx8IGltcGxpY2l0R3JpZExpbmVzRGVmaW5pdGlvbkRpZENoYW5nZSgqb2xkU3R5
bGUpIHx8IG9sZFN0eWxlLT5ncmlkQXV0b0Zsb3coKSAhPSBzdHlsZSgpLmdyaWRBdXRvRmxvdygp
CiAgICAgICAgIHx8IChzdHlsZSgpLmdyaWRBdXRvUmVwZWF0Q29sdW1ucygpLnNpemUoKSB8fCBz
dHlsZSgpLmdyaWRBdXRvUmVwZWF0Um93cygpLnNpemUoKSkpCiAgICAgICAgIGRpcnR5R3JpZCgp
OwogfQpAQCAtMTMxLDYgKzEzMSwxMiBAQCBib29sIFJlbmRlckdyaWQ6Om5hbWVkR3JpZExpbmVz
RGVmaW5pdGlvbkRpZENoYW5nZShjb25zdCBSZW5kZXJTdHlsZSYgb2xkU3R5bGUpCiAgICAgICAg
IHx8IG9sZFN0eWxlLm5hbWVkR3JpZENvbHVtbkxpbmVzKCkgIT0gc3R5bGUoKS5uYW1lZEdyaWRD
b2x1bW5MaW5lcygpOwogfQogCitib29sIFJlbmRlckdyaWQ6OmltcGxpY2l0R3JpZExpbmVzRGVm
aW5pdGlvbkRpZENoYW5nZShjb25zdCBSZW5kZXJTdHlsZSYgb2xkU3R5bGUpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG9sZFN0eWxlLmltcGxpY2l0TmFtZWRHcmlkUm93TGluZXMoKSAhPSBzdHlsZSgp
LmltcGxpY2l0TmFtZWRHcmlkUm93TGluZXMoKQorICAgICAgICB8fCBvbGRTdHlsZS5pbXBsaWNp
dE5hbWVkR3JpZENvbHVtbkxpbmVzKCkgIT0gc3R5bGUoKS5pbXBsaWNpdE5hbWVkR3JpZENvbHVt
bkxpbmVzKCk7Cit9CisKIC8vIFRoaXMgbWV0aG9kIG9wdGltaXplcyB0aGUgZ3V0dGVycyBjb21w
dXRhdGlvbiBieSBza2lwaW5nIHRoZSBhdmFpbGFibGUgc2l6ZQogLy8gY2FsbCBpZiBnYXBzIGFy
ZSBmaXhlZCBzaXplIChpdCdzIG9ubHkgbmVlZGVkIGZvciBwZXJjZW50YWdlcykuCiBzdGQ6Om9w
dGlvbmFsPExheW91dFVuaXQ+IFJlbmRlckdyaWQ6OmF2YWlsYWJsZVNwYWNlRm9yR3V0dGVycyhH
cmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdApAQCAtMzIzLDcgKzMyOSw2
IEBAIHZvaWQgUmVuZGVyR3JpZDo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBM
YXlvdXRVbml0KQogICAgICAgICB9CiAKICAgICAgICAgbGF5b3V0R3JpZEl0ZW1zKCk7Ci0gICAg
ICAgIG1fdHJhY2tTaXppbmdBbGdvcml0aG0ucmVzZXQoKTsKIAogICAgICAgICBlbmRBbmRDb21t
aXRVcGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXRUcmFuc2FjdGlvbigpOwogCkBAIC0zMzQsNiAr
MzM5LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRy
ZW4sIExheW91dFVuaXQpCiAgICAgICAgIG1fb3V0T2ZGbG93SXRlbVJvdy5jbGVhcigpOwogCiAg
ICAgICAgIGxheW91dFBvc2l0aW9uZWRPYmplY3RzKHJlbGF5b3V0Q2hpbGRyZW4gfHwgaXNEb2N1
bWVudEVsZW1lbnRSZW5kZXJlcigpKTsKKyAgICAgICAgbV90cmFja1NpemluZ0FsZ29yaXRobS5y
ZXNldCgpOwogCiAgICAgICAgIGNvbXB1dGVPdmVyZmxvdyhjbGllbnRMb2dpY2FsUmlnaHRBbmRC
b3R0b21BZnRlclJlcG9zaXRpb25pbmcoKS5oZWlnaHQoKSk7CiAgICAgfQpAQCAtMzU2LDggKzM2
MiwxNSBAQCBMYXlvdXRVbml0IFJlbmRlckdyaWQ6OmdyaWRHYXAoR3JpZFRyYWNrU2l6aW5nRGly
ZWN0aW9uIGRpcmVjdGlvbiwgc3RkOjpvcHRpb25hbAogewogICAgIEFTU0VSVCghYXZhaWxhYmxl
U2l6ZSB8fCAqYXZhaWxhYmxlU2l6ZSA+PSAwKTsKICAgICBjb25zdCBHYXBMZW5ndGgmIGdhcExl
bmd0aCA9IGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zPyBzdHlsZSgpLmNvbHVtbkdhcCgpIDogc3R5
bGUoKS5yb3dHYXAoKTsKLSAgICBpZiAoZ2FwTGVuZ3RoLmlzTm9ybWFsKCkpCisgICAgaWYgKGdh
cExlbmd0aC5pc05vcm1hbCgpKSB7CisgICAgICAgIGlmIChpc1N1YmdyaWQoZGlyZWN0aW9uKSkg
eworICAgICAgICAgICAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIHBhcmVudERpcmVjdGlvbiA9
IEdyaWRMYXlvdXRGdW5jdGlvbnM6OmZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKCp0aGlzLCAq
cGFyZW50KCksIGRpcmVjdGlvbik7CisgICAgICAgICAgICBpZiAoIWF2YWlsYWJsZVNpemUpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckdyaWQ+KHBhcmVudCgpKS0+Z3Jp
ZEdhcChwYXJlbnREaXJlY3Rpb24sIHN0ZDo6bnVsbG9wdCk7CisgICAgICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8UmVuZGVyR3JpZD4ocGFyZW50KCkpLT5ncmlkR2FwKHBhcmVudERpcmVjdGlvbik7
CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIDBfbHU7CisgICAgfQogCiAgICAgcmV0dXJuIHZh
bHVlRm9yTGVuZ3RoKGdhcExlbmd0aC5sZW5ndGgoKSwgYXZhaWxhYmxlU2l6ZS52YWx1ZV9vcigw
KSk7CiB9CkBAIC00NDYsOCArNDU5LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpjb21wdXRlSW50cmlu
c2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgsIExheW8KICAgICBM
YXlvdXRVbml0IGNoaWxkTWF4V2lkdGg7CiAgICAgYm9vbCBoYWRFeGNsdWRlZENoaWxkcmVuID0g
Y29tcHV0ZVByZWZlcnJlZFdpZHRoc0ZvckV4Y2x1ZGVkQ2hpbGRyZW4oY2hpbGRNaW5XaWR0aCwg
Y2hpbGRNYXhXaWR0aCk7CiAKLSAgICBHcmlkIGdyaWQoY29uc3RfY2FzdDxSZW5kZXJHcmlkJj4o
KnRoaXMpKTsKLSAgICBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG0gYWxnb3JpdGhtKHRoaXMsIGdy
aWQpOworICAgIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobSBhbGdvcml0aG0odGhpcywgY29uc3Rf
Y2FzdDxHcmlkJj4obV9ncmlkKSk7CiAgICAgcGxhY2VJdGVtc09uR3JpZChhbGdvcml0aG0sIHN0
ZDo6bnVsbG9wdCk7CiAKICAgICBwZXJmb3JtR3JpZEl0ZW1zUHJlTGF5b3V0KGFsZ29yaXRobSk7
CkBAIC00OTYsNiArNTA4LDkgQEAgdW5zaWduZWQgUmVuZGVyR3JpZDo6Y29tcHV0ZUF1dG9SZXBl
YXRUcmFja3NDb3VudChHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWMKIHsKICAgICBBU1NF
UlQoIWF2YWlsYWJsZVNpemUgfHwgYXZhaWxhYmxlU2l6ZS52YWx1ZSgpICE9IC0xKTsKICAgICBi
b29sIGlzUm93QXhpcyA9IGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zOworICAgIGlmIChpc1Jvd0F4
aXMgPyBpc1N1YmdyaWRDb2x1bW5zKCkgOiBpc1N1YmdyaWRSb3dzKCkpCisgICAgICAgIHJldHVy
biAwOworCiAgICAgY29uc3QgYXV0byYgYXV0b1JlcGVhdFRyYWNrcyA9IGlzUm93QXhpcyA/IHN0
eWxlKCkuZ3JpZEF1dG9SZXBlYXRDb2x1bW5zKCkgOiBzdHlsZSgpLmdyaWRBdXRvUmVwZWF0Um93
cygpOwogICAgIHVuc2lnbmVkIGF1dG9SZXBlYXRUcmFja0xpc3RMZW5ndGggPSBhdXRvUmVwZWF0
VHJhY2tzLnNpemUoKTsKIApAQCAtNjMyLDYgKzY0NywyNiBAQCB1bnNpZ25lZCBSZW5kZXJHcmlk
OjpjbGFtcEF1dG9SZXBlYXRUcmFja3MoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlv
biwgdQogICAgIHJldHVybiBzdGQ6Om1pbihhdXRvUmVwZWF0VHJhY2tzLCBtYXhUcmFja3MgLSBp
bnNlcnRpb25Qb2ludCk7CiB9CiAKK3ZvaWQgUmVuZGVyR3JpZDo6cGxhY2VJdGVtcygpCit7Cisg
ICAgdXBkYXRlTG9naWNhbFdpZHRoKCk7CisKKyAgICBMYXlvdXRVbml0IGF2YWlsYWJsZVNwYWNl
Rm9yQ29sdW1ucyA9IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgpOworICAgIHBsYWNlSXRlbXNPbkdy
aWQobV90cmFja1NpemluZ0FsZ29yaXRobSwgYXZhaWxhYmxlU3BhY2VGb3JDb2x1bW5zKTsKK30K
Kworc3RhdGljIEdyaWRBcmVhIGluc2VydEludG9HcmlkKEdyaWQmIGdyaWQsIFJlbmRlckJveCYg
Y2hpbGQsIGNvbnN0IEdyaWRBcmVhJiBhcmVhKQoreworICAgIEdyaWRBcmVhIGNsYW1wZWQgPSBn
cmlkLmluc2VydChjaGlsZCwgYXJlYSk7CisgICAgaWYgKCFpczxSZW5kZXJHcmlkPihjaGlsZCkp
CisgICAgICAgIHJldHVybiBjbGFtcGVkOworCisgICAgUmVuZGVyR3JpZCYgcmVuZGVyR3JpZCA9
IGRvd25jYXN0PFJlbmRlckdyaWQ+KGNoaWxkKTsKKyAgICBpZiAocmVuZGVyR3JpZC5pc1N1Ymdy
aWRSb3dzKCkgfHwgcmVuZGVyR3JpZC5pc1N1YmdyaWRDb2x1bW5zKCkpCisgICAgICAgIHJlbmRl
ckdyaWQucGxhY2VJdGVtcygpOworICAgIHJldHVybiBjbGFtcGVkOworfQorCiAvLyBGSVhNRTog
V2Ugc2hvdWxkbid0IGhhdmUgdG8gcGFzcyB0aGUgYXZhaWxhYmxlIGxvZ2ljYWwgd2lkdGggYXMg
YXJndW1lbnQuIFRoZSBwcm9ibGVtIGlzIHRoYXQKIC8vIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgp
IGRvZXMgYWx3YXlzIHJldHVybiBhIHZhbHVlIGV2ZW4gaWYgd2UgY2Fubm90IHJlc29sdmUgaXQg
bGlrZSB3aGVuCiAvLyBjb21wdXRpbmcgdGhlIGludHJpbnNpYyBzaXplIChwcmVmZXJyZWQgd2lk
dGhzKS4gVGhhdCdzIHdoeSB3ZSBwYXNzIHRoZSByZXNwb25zaWJpbGl0eSB0byB0aGUKQEAgLTY0
MSw3ICs2NzYsNiBAQCB2b2lkIFJlbmRlckdyaWQ6OnBsYWNlSXRlbXNPbkdyaWQoR3JpZFRyYWNr
U2l6aW5nQWxnb3JpdGhtJiBhbGdvcml0aG0sIHN0ZDo6b3B0aQogICAgIEdyaWQmIGdyaWQgPSBh
bGdvcml0aG0ubXV0YWJsZUdyaWQoKTsKICAgICB1bnNpZ25lZCBhdXRvUmVwZWF0Q29sdW1ucyA9
IGNvbXB1dGVBdXRvUmVwZWF0VHJhY2tzQ291bnQoRm9yQ29sdW1ucywgYXZhaWxhYmxlTG9naWNh
bFdpZHRoKTsKICAgICB1bnNpZ25lZCBhdXRvUmVwZWF0Um93cyA9IGNvbXB1dGVBdXRvUmVwZWF0
VHJhY2tzQ291bnQoRm9yUm93cywgYXZhaWxhYmxlTG9naWNhbEhlaWdodEZvclBlcmNlbnRhZ2VD
b21wdXRhdGlvbigpKTsKLQogICAgIGF1dG9SZXBlYXRSb3dzID0gY2xhbXBBdXRvUmVwZWF0VHJh
Y2tzKEZvclJvd3MsIGF1dG9SZXBlYXRSb3dzKTsKICAgICBhdXRvUmVwZWF0Q29sdW1ucyA9IGNs
YW1wQXV0b1JlcGVhdFRyYWNrcyhGb3JDb2x1bW5zLCBhdXRvUmVwZWF0Q29sdW1ucyk7CiAKQEAg
LTY3MCwxMCArNzA0LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpwbGFjZUl0ZW1zT25HcmlkKEdyaWRU
cmFja1NpemluZ0FsZ29yaXRobSYgYWxnb3JpdGhtLCBzdGQ6Om9wdGkKICAgICAgICAgICAgIGNo
aWxkLT5zZXRPdmVycmlkaW5nQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoc3Rk
OjpudWxsb3B0KTsKIAogICAgICAgICBHcmlkQXJlYSBhcmVhID0gZ3JpZC5ncmlkSXRlbUFyZWEo
KmNoaWxkKTsKLSAgICAgICAgaWYgKCFhcmVhLnJvd3MuaXNJbmRlZmluaXRlKCkpCi0gICAgICAg
ICAgICBhcmVhLnJvd3MudHJhbnNsYXRlKGdyaWQuZXhwbGljaXRHcmlkU3RhcnQoRm9yUm93cykp
OwotICAgICAgICBpZiAoIWFyZWEuY29sdW1ucy5pc0luZGVmaW5pdGUoKSkKLSAgICAgICAgICAg
IGFyZWEuY29sdW1ucy50cmFuc2xhdGUoZ3JpZC5leHBsaWNpdEdyaWRTdGFydChGb3JDb2x1bW5z
KSk7CisgICAgICAgIGdyaWQuY2xhbXBBbmRUcmFuc2xhdGVUb0ltcGxpY2l0R3JpZChhcmVhKTsK
IAogICAgICAgICBpZiAoYXJlYS5yb3dzLmlzSW5kZWZpbml0ZSgpIHx8IGFyZWEuY29sdW1ucy5p
c0luZGVmaW5pdGUoKSkgewogICAgICAgICAgICAgZ3JpZC5zZXRHcmlkSXRlbUFyZWEoKmNoaWxk
LCBhcmVhKTsKQEAgLTY4NSwxMyArNzE2LDEzIEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VJdGVt
c09uR3JpZChHcmlkVHJhY2tTaXppbmdBbGdvcml0aG0mIGFsZ29yaXRobSwgc3RkOjpvcHRpCiAg
ICAgICAgICAgICAgICAgc3BlY2lmaWVkTWFqb3JBeGlzQXV0b0dyaWRJdGVtcy5hcHBlbmQoY2hp
bGQpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgZ3JpZC5pbnNl
cnQoKmNoaWxkLCB7IGFyZWEucm93cywgYXJlYS5jb2x1bW5zIH0pOworICAgICAgICBpbnNlcnRJ
bnRvR3JpZChncmlkLCAqY2hpbGQsIHsgYXJlYS5yb3dzLCBhcmVhLmNvbHVtbnMgfSk7CiAgICAg
fQogCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICBpZiAoZ3JpZC5oYXNHcmlkSXRlbXMoKSkgewot
ICAgICAgICBBU1NFUlQoZ3JpZC5udW1UcmFja3MoRm9yUm93cykgPj0gR3JpZFBvc2l0aW9uc1Jl
c29sdmVyOjpleHBsaWNpdEdyaWRSb3dDb3VudChzdHlsZSgpLCBncmlkLmF1dG9SZXBlYXRUcmFj
a3MoRm9yUm93cykpKTsKLSAgICAgICAgQVNTRVJUKGdyaWQubnVtVHJhY2tzKEZvckNvbHVtbnMp
ID49IEdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6ZXhwbGljaXRHcmlkQ29sdW1uQ291bnQoc3R5bGUo
KSwgZ3JpZC5hdXRvUmVwZWF0VHJhY2tzKEZvckNvbHVtbnMpKSk7CisgICAgICAgIEFTU0VSVChn
cmlkLm51bVRyYWNrcyhGb3JSb3dzKSA+PSBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OmV4cGxpY2l0
R3JpZFJvd0NvdW50KCp0aGlzKSk7CisgICAgICAgIEFTU0VSVChncmlkLm51bVRyYWNrcyhGb3JD
b2x1bW5zKSA+PSBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OmV4cGxpY2l0R3JpZENvbHVtbkNvdW50
KCp0aGlzKSk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTc0NSwzMyArNzc2LDM2IEBAIHZvaWQgUmVu
ZGVyR3JpZDo6cG9wdWxhdGVFeHBsaWNpdEdyaWRBbmRPcmRlckl0ZXJhdG9yKEdyaWQmIGdyaWQp
IGNvbnN0CiAgICAgT3JkZXJJdGVyYXRvclBvcHVsYXRvciBwb3B1bGF0b3IoZ3JpZC5vcmRlckl0
ZXJhdG9yKCkpOwogICAgIHVuc2lnbmVkIGV4cGxpY2l0Um93U3RhcnQgPSAwOwogICAgIHVuc2ln
bmVkIGV4cGxpY2l0Q29sdW1uU3RhcnQgPSAwOwotICAgIHVuc2lnbmVkIGF1dG9SZXBlYXRSb3dz
ID0gZ3JpZC5hdXRvUmVwZWF0VHJhY2tzKEZvclJvd3MpOwotICAgIHVuc2lnbmVkIGF1dG9SZXBl
YXRDb2x1bW5zID0gZ3JpZC5hdXRvUmVwZWF0VHJhY2tzKEZvckNvbHVtbnMpOwotICAgIHVuc2ln
bmVkIG1heGltdW1Sb3dJbmRleCA9IEdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6ZXhwbGljaXRHcmlk
Um93Q291bnQoc3R5bGUoKSwgYXV0b1JlcGVhdFJvd3MpOwotICAgIHVuc2lnbmVkIG1heGltdW1D
b2x1bW5JbmRleCA9IEdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6ZXhwbGljaXRHcmlkQ29sdW1uQ291
bnQoc3R5bGUoKSwgYXV0b1JlcGVhdENvbHVtbnMpOworICAgIHVuc2lnbmVkIG1heGltdW1Sb3dJ
bmRleCA9IEdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6ZXhwbGljaXRHcmlkUm93Q291bnQoKnRoaXMp
OworICAgIHVuc2lnbmVkIG1heGltdW1Db2x1bW5JbmRleCA9IEdyaWRQb3NpdGlvbnNSZXNvbHZl
cjo6ZXhwbGljaXRHcmlkQ29sdW1uQ291bnQoKnRoaXMpOwogCiAgICAgZm9yIChSZW5kZXJCb3gq
IGNoaWxkID0gZmlyc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmdCb3goKSkgewogICAgICAgICBpZiAoIXBvcHVsYXRvci5jb2xsZWN0Q2hpbGQoKmNoaWxkKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgR3JpZFNwYW4gcm93UG9z
aXRpb25zID0gR3JpZFBvc2l0aW9uc1Jlc29sdmVyOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21T
dHlsZShzdHlsZSgpLCAqY2hpbGQsIEZvclJvd3MsIGF1dG9SZXBlYXRSb3dzKTsKLSAgICAgICAg
aWYgKCFyb3dQb3NpdGlvbnMuaXNJbmRlZmluaXRlKCkpIHsKLSAgICAgICAgICAgIGV4cGxpY2l0
Um93U3RhcnQgPSBzdGQ6Om1heDxpbnQ+KGV4cGxpY2l0Um93U3RhcnQsIC1yb3dQb3NpdGlvbnMu
dW50cmFuc2xhdGVkU3RhcnRMaW5lKCkpOwotICAgICAgICAgICAgbWF4aW11bVJvd0luZGV4ID0g
c3RkOjptYXg8aW50PihtYXhpbXVtUm93SW5kZXgsIHJvd1Bvc2l0aW9ucy51bnRyYW5zbGF0ZWRF
bmRMaW5lKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gR3JvdyB0aGUgZ3Jp
ZCBmb3IgaXRlbXMgd2l0aCBhIGRlZmluaXRlIHJvdyBzcGFuLCBnZXR0aW5nIHRoZSBsYXJnZXN0
IHN1Y2ggc3Bhbi4KLSAgICAgICAgICAgIHVuc2lnbmVkIHNwYW5TaXplID0gR3JpZFBvc2l0aW9u
c1Jlc29sdmVyOjpzcGFuU2l6ZUZvckF1dG9QbGFjZWRJdGVtKCpjaGlsZCwgRm9yUm93cyk7Ci0g
ICAgICAgICAgICBtYXhpbXVtUm93SW5kZXggPSBzdGQ6Om1heChtYXhpbXVtUm93SW5kZXgsIHNw
YW5TaXplKTsKKyAgICAgICAgR3JpZFNwYW4gcm93UG9zaXRpb25zID0gR3JpZFBvc2l0aW9uc1Jl
c29sdmVyOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21TdHlsZSgqY2hpbGQsIEZvclJvd3MpOwor
ICAgICAgICBpZiAoIWlzU3ViZ3JpZFJvd3MoKSkgeworICAgICAgICAgICAgaWYgKCFyb3dQb3Np
dGlvbnMuaXNJbmRlZmluaXRlKCkpIHsKKyAgICAgICAgICAgICAgICBleHBsaWNpdFJvd1N0YXJ0
ID0gc3RkOjptYXg8aW50PihleHBsaWNpdFJvd1N0YXJ0LCAtcm93UG9zaXRpb25zLnVudHJhbnNs
YXRlZFN0YXJ0TGluZSgpKTsKKyAgICAgICAgICAgICAgICBtYXhpbXVtUm93SW5kZXggPSBzdGQ6
Om1heDxpbnQ+KG1heGltdW1Sb3dJbmRleCwgcm93UG9zaXRpb25zLnVudHJhbnNsYXRlZEVuZExp
bmUoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEdyb3cgdGhl
IGdyaWQgZm9yIGl0ZW1zIHdpdGggYSBkZWZpbml0ZSByb3cgc3BhbiwgZ2V0dGluZyB0aGUgbGFy
Z2VzdCBzdWNoIHNwYW4uCisgICAgICAgICAgICAgICAgdW5zaWduZWQgc3BhblNpemUgPSBHcmlk
UG9zaXRpb25zUmVzb2x2ZXI6OnNwYW5TaXplRm9yQXV0b1BsYWNlZEl0ZW0oKmNoaWxkLCBGb3JS
b3dzKTsKKyAgICAgICAgICAgICAgICBtYXhpbXVtUm93SW5kZXggPSBzdGQ6Om1heChtYXhpbXVt
Um93SW5kZXgsIHNwYW5TaXplKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAg
IEdyaWRTcGFuIGNvbHVtblBvc2l0aW9ucyA9IEdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6cmVzb2x2
ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUoc3R5bGUoKSwgKmNoaWxkLCBGb3JDb2x1bW5zLCBhdXRv
UmVwZWF0Q29sdW1ucyk7Ci0gICAgICAgIGlmICghY29sdW1uUG9zaXRpb25zLmlzSW5kZWZpbml0
ZSgpKSB7Ci0gICAgICAgICAgICBleHBsaWNpdENvbHVtblN0YXJ0ID0gc3RkOjptYXg8aW50Pihl
eHBsaWNpdENvbHVtblN0YXJ0LCAtY29sdW1uUG9zaXRpb25zLnVudHJhbnNsYXRlZFN0YXJ0TGlu
ZSgpKTsKLSAgICAgICAgICAgIG1heGltdW1Db2x1bW5JbmRleCA9IHN0ZDo6bWF4PGludD4obWF4
aW11bUNvbHVtbkluZGV4LCBjb2x1bW5Qb3NpdGlvbnMudW50cmFuc2xhdGVkRW5kTGluZSgpKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEdyb3cgdGhlIGdyaWQgZm9yIGl0ZW1z
IHdpdGggYSBkZWZpbml0ZSBjb2x1bW4gc3BhbiwgZ2V0dGluZyB0aGUgbGFyZ2VzdCBzdWNoIHNw
YW4uCi0gICAgICAgICAgICB1bnNpZ25lZCBzcGFuU2l6ZSA9IEdyaWRQb3NpdGlvbnNSZXNvbHZl
cjo6c3BhblNpemVGb3JBdXRvUGxhY2VkSXRlbSgqY2hpbGQsIEZvckNvbHVtbnMpOwotICAgICAg
ICAgICAgbWF4aW11bUNvbHVtbkluZGV4ID0gc3RkOjptYXgobWF4aW11bUNvbHVtbkluZGV4LCBz
cGFuU2l6ZSk7CisgICAgICAgIEdyaWRTcGFuIGNvbHVtblBvc2l0aW9ucyA9IEdyaWRQb3NpdGlv
bnNSZXNvbHZlcjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUoKmNoaWxkLCBGb3JDb2x1
bW5zKTsKKworICAgICAgICBpZiAoIWlzU3ViZ3JpZENvbHVtbnMoKSkgeworICAgICAgICAgICAg
aWYgKCFjb2x1bW5Qb3NpdGlvbnMuaXNJbmRlZmluaXRlKCkpIHsKKyAgICAgICAgICAgICAgICBl
eHBsaWNpdENvbHVtblN0YXJ0ID0gc3RkOjptYXg8aW50PihleHBsaWNpdENvbHVtblN0YXJ0LCAt
Y29sdW1uUG9zaXRpb25zLnVudHJhbnNsYXRlZFN0YXJ0TGluZSgpKTsKKyAgICAgICAgICAgICAg
ICBtYXhpbXVtQ29sdW1uSW5kZXggPSBzdGQ6Om1heDxpbnQ+KG1heGltdW1Db2x1bW5JbmRleCwg
Y29sdW1uUG9zaXRpb25zLnVudHJhbnNsYXRlZEVuZExpbmUoKSk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIC8vIEdyb3cgdGhlIGdyaWQgZm9yIGl0ZW1zIHdpdGggYSBk
ZWZpbml0ZSBjb2x1bW4gc3BhbiwgZ2V0dGluZyB0aGUgbGFyZ2VzdCBzdWNoIHNwYW4uCisgICAg
ICAgICAgICAgICAgdW5zaWduZWQgc3BhblNpemUgPSBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OnNw
YW5TaXplRm9yQXV0b1BsYWNlZEl0ZW0oKmNoaWxkLCBGb3JDb2x1bW5zKTsKKyAgICAgICAgICAg
ICAgICBtYXhpbXVtQ29sdW1uSW5kZXggPSBzdGQ6Om1heChtYXhpbXVtQ29sdW1uSW5kZXgsIHNw
YW5TaXplKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGdyaWQuc2V0R3Jp
ZEl0ZW1BcmVhKCpjaGlsZCwgeyByb3dQb3NpdGlvbnMsIGNvbHVtblBvc2l0aW9ucyB9KTsKQEAg
LTc3OSw2ICs4MTMsNyBAQCB2b2lkIFJlbmRlckdyaWQ6OnBvcHVsYXRlRXhwbGljaXRHcmlkQW5k
T3JkZXJJdGVyYXRvcihHcmlkJiBncmlkKSBjb25zdAogCiAgICAgZ3JpZC5zZXRFeHBsaWNpdEdy
aWRTdGFydChleHBsaWNpdFJvd1N0YXJ0LCBleHBsaWNpdENvbHVtblN0YXJ0KTsKICAgICBncmlk
LmVuc3VyZUdyaWRTaXplKG1heGltdW1Sb3dJbmRleCArIGV4cGxpY2l0Um93U3RhcnQsIG1heGlt
dW1Db2x1bW5JbmRleCArIGV4cGxpY2l0Q29sdW1uU3RhcnQpOworICAgIGdyaWQuc2V0Q2xhbXBp
bmdGb3JTdWJncmlkKGlzU3ViZ3JpZFJvd3MoKSA/IG1heGltdW1Sb3dJbmRleCA6IDAsIGlzU3Vi
Z3JpZENvbHVtbnMoKSA/IG1heGltdW1Db2x1bW5JbmRleCA6IDApOwogfQogCiBzdGQ6OnVuaXF1
ZV9wdHI8R3JpZEFyZWE+IFJlbmRlckdyaWQ6OmNyZWF0ZUVtcHR5R3JpZEFyZWFBdFNwZWNpZmll
ZFBvc2l0aW9uc091dHNpZGVHcmlkKEdyaWQmIGdyaWQsIGNvbnN0IFJlbmRlckJveCYgZ3JpZEl0
ZW0sIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBzcGVjaWZpZWREaXJlY3Rpb24sIGNvbnN0IEdy
aWRTcGFuJiBzcGVjaWZpZWRQb3NpdGlvbnMpIGNvbnN0CkBAIC04MTIsNyArODQ3LDcgQEAgdm9p
ZCBSZW5kZXJHcmlkOjpwbGFjZVNwZWNpZmllZE1ham9yQXhpc0l0ZW1zT25HcmlkKEdyaWQmIGdy
aWQsIGNvbnN0IFZlY3RvcjxSZW4KICAgICAgICAgaWYgKCFlbXB0eUdyaWRBcmVhKQogICAgICAg
ICAgICAgZW1wdHlHcmlkQXJlYSA9IGNyZWF0ZUVtcHR5R3JpZEFyZWFBdFNwZWNpZmllZFBvc2l0
aW9uc091dHNpZGVHcmlkKGdyaWQsICphdXRvR3JpZEl0ZW0sIGF1dG9QbGFjZW1lbnRNYWpvckF4
aXNEaXJlY3Rpb24oKSwgbWFqb3JBeGlzUG9zaXRpb25zKTsKIAotICAgICAgICBncmlkLmluc2Vy
dCgqYXV0b0dyaWRJdGVtLCAqZW1wdHlHcmlkQXJlYSk7CisgICAgICAgICplbXB0eUdyaWRBcmVh
ID0gaW5zZXJ0SW50b0dyaWQoZ3JpZCwgKmF1dG9HcmlkSXRlbSwgKmVtcHR5R3JpZEFyZWEpOwog
CiAgICAgICAgIGlmICghaXNHcmlkQXV0b0Zsb3dEZW5zZSkKICAgICAgICAgICAgIG1pbm9yQXhp
c0N1cnNvcnMuc2V0KG1ham9yQXhpc0luaXRpYWxQb3NpdGlvbiwgaXNGb3JDb2x1bW5zID8gZW1w
dHlHcmlkQXJlYS0+cm93cy5zdGFydExpbmUoKSA6IGVtcHR5R3JpZEFyZWEtPmNvbHVtbnMuc3Rh
cnRMaW5lKCkpOwpAQCAtODg0LDcgKzkxOSw3IEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VBdXRv
TWFqb3JBeGlzSXRlbU9uR3JpZChHcmlkJiBncmlkLCBSZW5kZXJCb3gmIGdyaWRJdGVtLCBBCiAg
ICAgICAgICAgICBlbXB0eUdyaWRBcmVhID0gY3JlYXRlRW1wdHlHcmlkQXJlYUF0U3BlY2lmaWVk
UG9zaXRpb25zT3V0c2lkZUdyaWQoZ3JpZCwgZ3JpZEl0ZW0sIGF1dG9QbGFjZW1lbnRNaW5vckF4
aXNEaXJlY3Rpb24oKSwgR3JpZFNwYW46OnRyYW5zbGF0ZWREZWZpbml0ZUdyaWRTcGFuKDAsIG1p
bm9yQXhpc1NwYW5TaXplKSk7CiAgICAgfQogCi0gICAgZ3JpZC5pbnNlcnQoZ3JpZEl0ZW0sICpl
bXB0eUdyaWRBcmVhKTsKKyAgICAqZW1wdHlHcmlkQXJlYSA9IGluc2VydEludG9HcmlkKGdyaWQs
IGdyaWRJdGVtLCAqZW1wdHlHcmlkQXJlYSk7CiAgICAgYXV0b1BsYWNlbWVudEN1cnNvci5maXJz
dCA9IGVtcHR5R3JpZEFyZWEtPnJvd3Muc3RhcnRMaW5lKCk7CiAgICAgYXV0b1BsYWNlbWVudEN1
cnNvci5zZWNvbmQgPSBlbXB0eUdyaWRBcmVhLT5jb2x1bW5zLnN0YXJ0TGluZSgpOwogfQpAQCAt
OTk3LDEzICsxMDMyLDE1IEBAIHZvaWQgUmVuZGVyR3JpZDo6bGF5b3V0R3JpZEl0ZW1zKCkKICAg
ICBwb3B1bGF0ZUdyaWRQb3NpdGlvbnNGb3JEaXJlY3Rpb24oRm9yUm93cyk7CiAKICAgICBmb3Ig
KFJlbmRlckJveCogY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxk
LT5uZXh0U2libGluZ0JveCgpKSB7Ci0gICAgICAgIAogICAgICAgICBpZiAobV9ncmlkLm9yZGVy
SXRlcmF0b3IoKS5zaG91bGRTa2lwQ2hpbGQoKmNoaWxkKSkgewogICAgICAgICAgICAgaWYgKGNo
aWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgICAgICBwcmVwYXJlQ2hp
bGRGb3JQb3NpdGlvbmVkTGF5b3V0KCpjaGlsZCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQogCisgICAgICAgIGlmIChpczxSZW5kZXJHcmlkPihjaGlsZCkgJiYgKGRvd25jYXN0
PFJlbmRlckdyaWQ+KGNoaWxkKS0+aXNTdWJncmlkQ29sdW1ucygpIHx8IGRvd25jYXN0PFJlbmRl
ckdyaWQ+KGNoaWxkKS0+aXNTdWJncmlkUm93cygpKSkKKyAgICAgICAgICAgIGNoaWxkLT5zZXRO
ZWVkc0xheW91dChNYXJrT25seVRoaXMpOworCiAgICAgICAgIC8vIFNldHRpbmcgdGhlIGRlZmlu
aXRlIGdyaWQgYXJlYSdzIHNpemVzLiBJdCBtYXkgaW1wbHkgdGhhdCB0aGUKICAgICAgICAgLy8g
aXRlbSBtdXN0IHBlcmZvcm0gYSBsYXlvdXQgaWYgaXRzIGFyZWEgZGlmZmVycyBmcm9tIHRoZSBv
bmUKICAgICAgICAgLy8gdXNlZCBkdXJpbmcgdGhlIHRyYWNrIHNpemluZyBhbGdvcml0aG0uCkBA
IC0xMTE3LDYgKzExNTQsNyBAQCB2b2lkIFJlbmRlckdyaWQ6OnBvcHVsYXRlR3JpZFBvc2l0aW9u
c0ZvckRpcmVjdGlvbihHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZQogICAgICAgICAvLyBj
b21wdXRlIHRoZSBnYXAgYmV0d2VlbiB0d28gY29uc2VjdXRpdmUgdHJhY2tzIHdpdGhvdXQgZXhh
bWluaW5nIHRoZSBzdXJyb3VuZGluZyBvbmVzLgogICAgICAgICBMYXlvdXRVbml0IGdhcCA9ICFo
YXNDb2xsYXBzZWRUcmFja3MgPyBncmlkR2FwKGRpcmVjdGlvbikgOiAwX2x1OwogICAgICAgICB1
bnNpZ25lZCBuZXh0VG9MYXN0TGluZSA9IG51bWJlck9mTGluZXMgLSAyOworCiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBuZXh0VG9MYXN0TGluZTsgKytpKQogICAgICAgICAgICAg
cG9zaXRpb25zW2kgKyAxXSA9IHBvc2l0aW9uc1tpXSArIG9mZnNldC5kaXN0cmlidXRpb25PZmZz
ZXQgKyB0cmFja3NbaV0uYmFzZVNpemUoKSArIGdhcDsKICAgICAgICAgcG9zaXRpb25zW2xhc3RM
aW5lXSA9IHBvc2l0aW9uc1tuZXh0VG9MYXN0TGluZV0gKyB0cmFja3NbbmV4dFRvTGFzdExpbmVd
LmJhc2VTaXplKCk7CkBAIC0xNjEwLDExICsxNjQ4LDM1IEBAIExheW91dFVuaXQgUmVuZGVyR3Jp
ZDo6cmVzb2x2ZUF1dG9FbmRHcmlkUG9zaXRpb24oR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRp
cmVjCiAgICAgcmV0dXJuIGNsaWVudExvZ2ljYWxXaWR0aCgpOwogfQogCitib29sIFJlbmRlckdy
aWQ6OmlzU3ViZ3JpZChHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdAor
eworICAgIGlmIChpc091dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCBpc0V4Y2x1ZGVkRnJvbU5vcm1h
bExheW91dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKChkaXJlY3Rpb24gPT0g
Rm9yQ29sdW1ucykgPyAhc3R5bGUoKS5ncmlkU3ViZ3JpZENvbHVtbnMoKSA6ICFzdHlsZSgpLmdy
aWRTdWJncmlkUm93cygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGlzPFJl
bmRlckdyaWQ+KHBhcmVudCgpKTsKK30KKworYm9vbCBSZW5kZXJHcmlkOjppc1N1YmdyaWRSb3dz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNTdWJncmlkKEZvclJvd3MpOworfQorYm9vbCBSZW5k
ZXJHcmlkOjppc1N1YmdyaWRDb2x1bW5zKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNTdWJncmlk
KEZvckNvbHVtbnMpOworfQorCitib29sIFJlbmRlckdyaWQ6OmlzU3ViZ3JpZEluUGFyZW50RGly
ZWN0aW9uKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBwYXJlbnREaXJlY3Rpb24pIGNvbnN0Cit7
CisgICAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEdyaWRMYXlvdXRGdW5j
dGlvbnM6OmZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKCp0aGlzLCAqcGFyZW50KCksIHBhcmVu
dERpcmVjdGlvbik7CisgICAgcmV0dXJuIGlzU3ViZ3JpZChkaXJlY3Rpb24pOworfQorCiBMYXlv
dXRVbml0IFJlbmRlckdyaWQ6OmdyaWRBcmVhQnJlYWR0aEZvck91dE9mRmxvd0NoaWxkKGNvbnN0
IFJlbmRlckJveCYgY2hpbGQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7
CiAgICAgQVNTRVJUKGNoaWxkLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKTsKICAgICBib29sIGlz
Um93QXhpcyA9IGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zOwotICAgIEdyaWRTcGFuIHNwYW4gPSBH
cmlkUG9zaXRpb25zUmVzb2x2ZXI6OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbVN0eWxlKHN0eWxl
KCksIGNoaWxkLCBkaXJlY3Rpb24sIGF1dG9SZXBlYXRDb3VudEZvckRpcmVjdGlvbihkaXJlY3Rp
b24pKTsKKyAgICBHcmlkU3BhbiBzcGFuID0gR3JpZFBvc2l0aW9uc1Jlc29sdmVyOjpyZXNvbHZl
R3JpZFBvc2l0aW9uc0Zyb21TdHlsZShjaGlsZCwgZGlyZWN0aW9uKTsKICAgICBpZiAoc3Bhbi5p
c0luZGVmaW5pdGUoKSkKICAgICAgICAgcmV0dXJuIGlzUm93QXhpcyA/IGNsaWVudExvZ2ljYWxX
aWR0aCgpIDogY2xpZW50TG9naWNhbEhlaWdodCgpOwogCkBAIC0xOTIwLDcgKzE5ODIsNyBAQCB1
bnNpZ25lZCBSZW5kZXJHcmlkOjpudW1UcmFja3MoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRp
cmVjdGlvbiwgY29uc3QgR3JpZCYgZwogICAgICAgICByZXR1cm4gZ3JpZC5udW1UcmFja3MoRm9y
Um93cyk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBzdGlsbCByZXF1aXJlcyBrbm93bGVkZ2UgYWJv
dXQgbV9ncmlkIGludGVybmFscy4KLSAgICByZXR1cm4gZ3JpZC5udW1UcmFja3MoRm9yUm93cykg
PyBncmlkLm51bVRyYWNrcyhGb3JDb2x1bW5zKSA6IEdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6ZXhw
bGljaXRHcmlkQ29sdW1uQ291bnQoc3R5bGUoKSwgZ3JpZC5hdXRvUmVwZWF0VHJhY2tzKEZvckNv
bHVtbnMpKTsKKyAgICByZXR1cm4gZ3JpZC5udW1UcmFja3MoRm9yUm93cykgPyBncmlkLm51bVRy
YWNrcyhGb3JDb2x1bW5zKSA6IEdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6ZXhwbGljaXRHcmlkQ29s
dW1uQ291bnQoKnRoaXMpOwogfQogCiB2b2lkIFJlbmRlckdyaWQ6OnBhaW50Q2hpbGRyZW4oUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgUGFpbnRJ
bmZvJiBmb3JDaGlsZCwgYm9vbCB1c2VQcmludFJlY3QpCkBAIC0xOTc3LDQgKzIwMzksNjIgQEAg
Ym9vbCBSZW5kZXJHcmlkOjpoYXNBdXRvU2l6ZUluUm93QXhpcyhjb25zdCBSZW5kZXJCb3gmIGNo
aWxkKSBjb25zdAogICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY2hpbGQu
c3R5bGUoKS53aWR0aCgpLmlzQXV0bygpIDogY2hpbGQuc3R5bGUoKS5oZWlnaHQoKS5pc0F1dG8o
KTsKIH0KIAorYm9vbCBSZW5kZXJHcmlkOjpjb21wdXRlR3JpZFNwYW5Gb3JPdXRPZkZsb3dDaGls
ZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0
aW9uLCBpbnQmIHN0YXJ0TGluZSwgYm9vbCYgc3RhcnRJc0F1dG8sIGludCYgZW5kTGluZSwgYm9v
bCYgZW5kSXNBdXRvKSBjb25zdAoreworICAgIEFTU0VSVChjaGlsZC5pc091dE9mRmxvd1Bvc2l0
aW9uZWQoKSk7CisgICAgaW50IGxhc3RMaW5lID0gbnVtVHJhY2tzKGRpcmVjdGlvbiwgbV9ncmlk
KTsKKyAgICBHcmlkU3BhbiBzcGFuID0gR3JpZFBvc2l0aW9uc1Jlc29sdmVyOjpyZXNvbHZlR3Jp
ZFBvc2l0aW9uc0Zyb21TdHlsZShjaGlsZCwgZGlyZWN0aW9uKTsKKyAgICBpZiAoc3Bhbi5pc0lu
ZGVmaW5pdGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdW5zaWduZWQgZXhwbGlj
aXRTdGFydCA9IG1fZ3JpZC5leHBsaWNpdEdyaWRTdGFydChkaXJlY3Rpb24pOworICAgIHN0YXJ0
TGluZSA9IHNwYW4udW50cmFuc2xhdGVkU3RhcnRMaW5lKCkgKyBleHBsaWNpdFN0YXJ0OworICAg
IGVuZExpbmUgPSBzcGFuLnVudHJhbnNsYXRlZEVuZExpbmUoKSArIGV4cGxpY2l0U3RhcnQ7CisK
KyAgICBHcmlkUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5z
ID8gY2hpbGQuc3R5bGUoKS5ncmlkSXRlbUNvbHVtblN0YXJ0KCkgOiBjaGlsZC5zdHlsZSgpLmdy
aWRJdGVtUm93U3RhcnQoKTsKKyAgICBHcmlkUG9zaXRpb24gZW5kUG9zaXRpb24gPSBkaXJlY3Rp
b24gPT0gRm9yQ29sdW1ucyA/IGNoaWxkLnN0eWxlKCkuZ3JpZEl0ZW1Db2x1bW5FbmQoKSA6IGNo
aWxkLnN0eWxlKCkuZ3JpZEl0ZW1Sb3dFbmQoKTsKKworICAgIHN0YXJ0SXNBdXRvID0gc3RhcnRQ
b3NpdGlvbi5pc0F1dG8oKSB8fCBzdGFydExpbmUgPCAwIHx8IHN0YXJ0TGluZSA+IGxhc3RMaW5l
OworICAgIGVuZElzQXV0byA9IGVuZFBvc2l0aW9uLmlzQXV0bygpIHx8IGVuZExpbmUgPCAwIHx8
IGVuZExpbmUgPiBsYXN0TGluZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR3JpZFNwYW4gUmVu
ZGVyR3JpZDo6Z3JpZFNwYW5Gb3JPdXRPZkZsb3dDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxk
LCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdAoreworICAgIGludCBs
YXN0TGluZSA9IG51bVRyYWNrcyhkaXJlY3Rpb24sIG1fZ3JpZCk7CisgICAgaW50IHN0YXJ0TGlu
ZSwgZW5kTGluZTsKKyAgICBib29sIHN0YXJ0SXNBdXRvLCBlbmRJc0F1dG87CisgICAgaWYgKCFj
b21wdXRlR3JpZFNwYW5Gb3JPdXRPZkZsb3dDaGlsZChjaGlsZCwgZGlyZWN0aW9uLCBzdGFydExp
bmUsIHN0YXJ0SXNBdXRvLCBlbmRMaW5lLCBlbmRJc0F1dG8pKQorICAgICAgICByZXR1cm4gR3Jp
ZFNwYW46OnRyYW5zbGF0ZWREZWZpbml0ZUdyaWRTcGFuKDAsIGxhc3RMaW5lKTsKKyAgICByZXR1
cm4gR3JpZFNwYW46OnRyYW5zbGF0ZWREZWZpbml0ZUdyaWRTcGFuKHN0YXJ0SXNBdXRvID8gMCA6
IHN0YXJ0TGluZSwgZW5kSXNBdXRvID8gbGFzdExpbmUgOiBlbmRMaW5lKTsKK30KKworR3JpZFNw
YW4gUmVuZGVyR3JpZDo6Z3JpZFNwYW5Gb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBH
cmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdAoreworICAgIEFTU0VSVChp
czxSZW5kZXJHcmlkPihjaGlsZC5wYXJlbnQoKSkpOworCisgICAgUmVuZGVyR3JpZCogcmVuZGVy
R3JpZCA9IGRvd25jYXN0PFJlbmRlckdyaWQ+KGNoaWxkLnBhcmVudCgpKTsKKyAgICAvLyB8ZGly
ZWN0aW9ufCBpcyBzcGVjaWZpZWQgcmVsYXRpdmUgdG8gdGhpcyBncmlkLCBzd2l0Y2ggaXQgaWYg
fGNoaWxkfCdzIGRpcmVjdCBwYXJlbnQgZ3JpZAorICAgIC8vIGlzIHVzaW5nIGEgZGlmZmVyZW50
IHdyaXRpbmcgbW9kZS4KKyAgICBkaXJlY3Rpb24gPSBHcmlkTGF5b3V0RnVuY3Rpb25zOjpmbG93
QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZCgqdGhpcywgKnJlbmRlckdyaWQsIGRpcmVjdGlvbik7Cisg
ICAgR3JpZFNwYW4gc3BhbiA9IGNoaWxkLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpID8gcmVuZGVy
R3JpZC0+Z3JpZFNwYW5Gb3JPdXRPZkZsb3dDaGlsZChjaGlsZCwgZGlyZWN0aW9uKSA6IHJlbmRl
ckdyaWQtPmN1cnJlbnRHcmlkKCkuZ3JpZEl0ZW1TcGFuKGNoaWxkLCBkaXJlY3Rpb24pOworCisg
ICAgd2hpbGUgKHJlbmRlckdyaWQgIT0gdGhpcykgeworICAgICAgICBBU1NFUlQoaXM8UmVuZGVy
R3JpZD4ocmVuZGVyR3JpZC0+cGFyZW50KCkpKTsKKyAgICAgICAgUmVuZGVyR3JpZCogcGFyZW50
ID0gZG93bmNhc3Q8UmVuZGVyR3JpZD4ocmVuZGVyR3JpZC0+cGFyZW50KCkpOworCisgICAgICAg
IGJvb2wgaXNTdWJncmlkID0gZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyByZW5kZXJHcmlkLT5p
c1N1YmdyaWRDb2x1bW5zKCkgOiByZW5kZXJHcmlkLT5pc1N1YmdyaWRSb3dzKCk7CisKKyAgICAg
ICAgZGlyZWN0aW9uID0gR3JpZExheW91dEZ1bmN0aW9uczo6Zmxvd0F3YXJlRGlyZWN0aW9uRm9y
Q2hpbGQoKnBhcmVudCwgKnJlbmRlckdyaWQsIGRpcmVjdGlvbik7CisKKyAgICAgICAgR3JpZFNw
YW4gcGFyZW50U3BhbiA9IHJlbmRlckdyaWQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpID8gcGFy
ZW50LT5ncmlkU3BhbkZvck91dE9mRmxvd0NoaWxkKCpyZW5kZXJHcmlkLCBkaXJlY3Rpb24pIDog
IHBhcmVudC0+Y3VycmVudEdyaWQoKS5ncmlkSXRlbVNwYW4oKnJlbmRlckdyaWQsIGRpcmVjdGlv
bik7CisgICAgICAgIGlmIChpc1N1YmdyaWQpCisgICAgICAgICAgICBzcGFuLnRyYW5zbGF0ZVRv
KHBhcmVudFNwYW4sIEdyaWRMYXlvdXRGdW5jdGlvbnM6OmlzU3ViZ3JpZFJldmVyc2VkRGlyZWN0
aW9uKCpwYXJlbnQsIGRpcmVjdGlvbiwgKnJlbmRlckdyaWQpKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgc3BhbiA9IHBhcmVudFNwYW47CisgICAgICAgIHJlbmRlckdyaWQgPSBwYXJlbnQ7
CisgICAgfQorICAgIHJldHVybiBzcGFuOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuaAppbmRleCBlMjMwYjEzZGE4YTIuLjc0Nzdl
MjdjYjEzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCkBAIC04Miw3ICs4
MiwzMCBAQCBwdWJsaWM6CiAKICAgICBTdHlsZUNvbnRlbnRBbGlnbm1lbnREYXRhIGNvbnRlbnRB
bGlnbm1lbnQoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKSBjb25zdDsKIAorICAgIC8vIENvbXB1
dGVzIHRoZSBzcGFuIHJlbGF0aXZlIHRvIHRoaXMgUmVuZGVyR3JpZCwgZXZlbiBpZiB0aGUgUmVu
ZGVyQm94IGlzIGEgY2hpbGQKKyAgICAvLyBvZiBhIGRlc2NlbmRhbnQgc3ViZ3JpZC4KKyAgICBH
cmlkU3BhbiBncmlkU3BhbkZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYsIEdyaWRUcmFja1Npemlu
Z0RpcmVjdGlvbikgY29uc3Q7CisKKyAgICBib29sIGlzU3ViZ3JpZFJvd3MoKSBjb25zdDsKKyAg
ICBib29sIGlzU3ViZ3JpZENvbHVtbnMoKSBjb25zdDsKKyAgICBib29sIGlzU3ViZ3JpZChHcmlk
VHJhY2tTaXppbmdEaXJlY3Rpb24pIGNvbnN0OworICAgIGJvb2wgaXNTdWJncmlkSW5QYXJlbnRE
aXJlY3Rpb24oR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIHBhcmVudERpcmVjdGlvbikgY29uc3Q7
CisKKyAgICBjb25zdCBHcmlkJiBjdXJyZW50R3JpZCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9ncmlkOworICAgIH0KKworICAgIHVuc2lnbmVkIG51bVRyYWNrcyhHcmlkVHJhY2tT
aXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG51
bVRyYWNrcyhkaXJlY3Rpb24sIG1fZ3JpZCk7CisgICAgfQorCisgICAgdm9pZCBwbGFjZUl0ZW1z
KCk7CisKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEdyaWRUcmFja1NpemluZ0FsZ29yaXRo
bTsKKwogICAgIEl0ZW1Qb3NpdGlvbiBzZWxmQWxpZ25tZW50Tm9ybWFsQmVoYXZpb3IoY29uc3Qg
UmVuZGVyQm94KiBjaGlsZCA9IG51bGxwdHIpIGNvbnN0IG92ZXJyaWRlCiAgICAgewogICAgICAg
ICBBU1NFUlQoY2hpbGQpOwpAQCAtMTAwLDYgKzEyMyw3IEBAIHByaXZhdGU6CiAKICAgICBib29s
IGV4cGxpY2l0R3JpZERpZFJlc2l6ZShjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0OwogICAgIGJv
b2wgbmFtZWRHcmlkTGluZXNEZWZpbml0aW9uRGlkQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlJikg
Y29uc3Q7CisgICAgYm9vbCBpbXBsaWNpdEdyaWRMaW5lc0RlZmluaXRpb25EaWRDaGFuZ2UoY29u
c3QgUmVuZGVyU3R5bGUmKSBjb25zdDsKIAogICAgIHVuc2lnbmVkIGNvbXB1dGVBdXRvUmVwZWF0
VHJhY2tzQ291bnQoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uLCBzdGQ6Om9wdGlvbmFsPExheW91
dFVuaXQ+IGF2YWlsYWJsZVNpemUpIGNvbnN0OwogCkBAIC0xNTAsOCArMTc0LDYgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHNldExvZ2ljYWxQb3NpdGlvbkZvckNoaWxkKFJlbmRlckJveCYpIGNvbnN0
OwogICAgIHZvaWQgc2V0TG9naWNhbE9mZnNldEZvckNoaWxkKFJlbmRlckJveCYsIEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbikgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsT2Zmc2V0Rm9y
Q2hpbGQoY29uc3QgUmVuZGVyQm94JiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKSBjb25zdDsK
LSAgICBHcmlkQXJlYSBjYWNoZWRHcmlkQXJlYShjb25zdCBSZW5kZXJCb3gmKSBjb25zdDsKLSAg
ICBHcmlkU3BhbiBjYWNoZWRHcmlkU3Bhbihjb25zdCBSZW5kZXJCb3gmLCBHcmlkVHJhY2tTaXpp
bmdEaXJlY3Rpb24pIGNvbnN0OwogCiAgICAgTGF5b3V0VW5pdCBncmlkQXJlYUJyZWFkdGhGb3JD
aGlsZEluY2x1ZGluZ0FsaWdubWVudE9mZnNldHMoY29uc3QgUmVuZGVyQm94JiwgR3JpZFRyYWNr
U2l6aW5nRGlyZWN0aW9uKSBjb25zdDsKIApAQCAtMTkzLDYgKzIxNSw5IEBAIHByaXZhdGU6CiAK
ICAgICBWZWN0b3I8UmVuZGVyQm94Kj4gY29tcHV0ZUFzcGVjdFJhdGlvRGVwZW5kZW50QW5kQmFz
ZWxpbmVJdGVtcygpOwogCisgICAgR3JpZFNwYW4gZ3JpZFNwYW5Gb3JPdXRPZkZsb3dDaGlsZChj
b25zdCBSZW5kZXJCb3gmLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24pIGNvbnN0OworICAgIGJv
b2wgY29tcHV0ZUdyaWRTcGFuRm9yT3V0T2ZGbG93Q2hpbGQoY29uc3QgUmVuZGVyQm94JiwgR3Jp
ZFRyYWNrU2l6aW5nRGlyZWN0aW9uLCBpbnQmLCBib29sJiwgaW50JiwgYm9vbCYpIGNvbnN0Owor
CiAgICAgR3JpZCBtX2dyaWQ7CiAKICAgICBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG0gbV90cmFj
a1NpemluZ0FsZ29yaXRobTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9HcmlkQXJlYS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRBcmVh
LmgKaW5kZXggYjdlYmQxZDk2MWRlLi5iYTI2ZDE3NzkyZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9HcmlkQXJlYS5oCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKIAogICAg
IHVuc2lnbmVkIGludGVnZXJTcGFuKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc1Ry
YW5zbGF0ZWREZWZpbml0ZSgpKTsKKyAgICAgICAgQVNTRVJUKGlzVHJhbnNsYXRlZERlZmluaXRl
KCkgfHwgbV90eXBlID09IFVudHJhbnNsYXRlZERlZmluaXRlKTsKICAgICAgICAgcmV0dXJuIG1f
ZW5kTGluZSAtIG1fc3RhcnRMaW5lOwogICAgIH0KIApAQCAtMTQxLDYgKzE0MSw0MCBAQCBwdWJs
aWM6CiAgICAgICAgIEFTU0VSVChtX2VuZExpbmUgPiAwKTsKICAgICB9CiAKKyAgICAvLyBNb3Zl
cyB0aGlzIHNwYW4gdG8gYmUgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZSBzcGFjZSBhcyB8cGFyZW50
fC4KKyAgICAvLyBJZiByZXZlcnNlIGlzIHNwZWNpZmllZCwgdGhlbiBzd2FwcyB0aGUgZGlyZWN0
aW9uIHRvIGhhbmRsZSBSVEwvTFRSIGNoYW5nZXMuCisgICAgdm9pZCB0cmFuc2xhdGVUbyhjb25z
dCBHcmlkU3BhbiYgcGFyZW50LCBib29sIHJldmVyc2UpCisgICAgeworICAgICAgICBBU1NFUlQo
bV90eXBlID09IFRyYW5zbGF0ZWREZWZpbml0ZSk7CisgICAgICAgIEFTU0VSVChwYXJlbnQubV90
eXBlID09IFRyYW5zbGF0ZWREZWZpbml0ZSk7CisgICAgICAgIGlmIChyZXZlcnNlKSB7CisgICAg
ICAgICAgICBpbnQgc3RhcnQgPSBtX3N0YXJ0TGluZTsKKyAgICAgICAgICAgIG1fc3RhcnRMaW5l
ID0gcGFyZW50LmludGVnZXJTcGFuKCkgLSBtX2VuZExpbmUgKyBwYXJlbnQuc3RhcnRMaW5lKCk7
CisgICAgICAgICAgICBtX2VuZExpbmUgPSBwYXJlbnQuaW50ZWdlclNwYW4oKSAtIHN0YXJ0ICsg
cGFyZW50LnN0YXJ0TGluZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9zdGFy
dExpbmUgKz0gcGFyZW50Lm1fc3RhcnRMaW5lOworICAgICAgICAgICAgbV9lbmRMaW5lICs9IHBh
cmVudC5tX3N0YXJ0TGluZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgY2xhbXAoaW50
IG1heCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUgIT0gSW5kZWZpbml0ZSk7CisgICAg
ICAgIG1fc3RhcnRMaW5lID0gc3RkOjptYXgobV9zdGFydExpbmUsIDApOworICAgICAgICBtX2Vu
ZExpbmUgPSBzdGQ6Om1heChzdGQ6Om1pbihtX2VuZExpbmUsIG1heCksIDEpOworICAgICAgICBp
ZiAobV9zdGFydExpbmUgPj0gbV9lbmRMaW5lKQorICAgICAgICAgICAgbV9zdGFydExpbmUgPSBt
X2VuZExpbmUgLSAxOworICAgIH0KKworICAgIHZvaWQgY2xhbXAoaW50IG1pbiwgaW50IG1heCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUgIT0gSW5kZWZpbml0ZSk7CisgICAgICAgIG1f
c3RhcnRMaW5lID0gc3RkOjptYXgobV9zdGFydExpbmUsIG1pbik7CisgICAgICAgIG1fZW5kTGlu
ZSA9IHN0ZDo6bWluKG1fZW5kTGluZSwgbWF4KTsKKyAgICAgICAgaWYgKG1fc3RhcnRMaW5lID49
IG1fZW5kTGluZSkKKyAgICAgICAgICAgIG1fc3RhcnRMaW5lID0gbV9lbmRMaW5lOworICAgIH0K
KwogcHJpdmF0ZToKIAogICAgIGVudW0gR3JpZFNwYW5UeXBlIHtVbnRyYW5zbGF0ZWREZWZpbml0
ZSwgVHJhbnNsYXRlZERlZmluaXRlLCBJbmRlZmluaXRlfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUG9zaXRpb25zUmVzb2x2ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRQb3NpdGlvbnNSZXNvbHZlci5jcHAKaW5kZXgg
MzNjNzAzYzVmMDZmLi5kOTA0MWE2MjNiZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9HcmlkUG9zaXRpb25zUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUG9zaXRpb25zUmVzb2x2ZXIuY3BwCkBAIC0zMyw2ICsz
Myw3IEBACiAKICNpbmNsdWRlICJHcmlkQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckJveC5oIgor
I2luY2x1ZGUgIlJlbmRlckdyaWQuaCIKICNpbmNsdWRlIDxjc3RkbGliPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC01Nyw0MyArNTgsMTMwIEBAIHN0YXRpYyBjb25zdCBTdHJpbmcgaW1wbGlj
aXROYW1lZEdyaWRMaW5lRm9yU2lkZShjb25zdCBTdHJpbmcmIGxpbmVOYW1lLCBHcmlkUG9zCiAg
ICAgcmV0dXJuIGxpbmVOYW1lICsgKGlzU3RhcnRTaWRlKHNpZGUpID8gIi1zdGFydCIgOiAiLWVu
ZCIpOwogfQogCi1OYW1lZExpbmVDb2xsZWN0aW9uOjpOYW1lZExpbmVDb2xsZWN0aW9uKGNvbnN0
IFJlbmRlclN0eWxlJiBncmlkQ29udGFpbmVyU3R5bGUsIGNvbnN0IFN0cmluZyYgbmFtZWRMaW5l
LCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uLCB1bnNpZ25lZCBsYXN0TGluZSwg
dW5zaWduZWQgYXV0b1JlcGVhdFRyYWNrc0NvdW50KQotICAgIDogbV9sYXN0TGluZShsYXN0TGlu
ZSkKLSAgICAsIG1fYXV0b1JlcGVhdFRvdGFsVHJhY2tzKGF1dG9SZXBlYXRUcmFja3NDb3VudCkK
K3N0YXRpYyB1bnNpZ25lZCBleHBsaWNpdEdyaWRTaXplRm9yU2lkZShjb25zdCBSZW5kZXJHcmlk
JiBncmlkQ29udGFpbmVyLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUpCiB7CisgICAgcmV0dXJuIGlz
Q29sdW1uU2lkZShzaWRlKSA/IEdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6ZXhwbGljaXRHcmlkQ29s
dW1uQ291bnQoZ3JpZENvbnRhaW5lcikgOiBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OmV4cGxpY2l0
R3JpZFJvd0NvdW50KGdyaWRDb250YWluZXIpOworfQorCitzdGF0aWMgaW5saW5lIEdyaWRQb3Np
dGlvblNpZGUgdHJhbnNwb3NlZFNpZGUoR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQoreworICAgIGlm
IChzaWRlID09IENvbHVtblN0YXJ0U2lkZSkKKyAgICAgICAgcmV0dXJuIFJvd1N0YXJ0U2lkZTsK
KyAgICBpZiAoc2lkZSA9PSBDb2x1bW5FbmRTaWRlKQorICAgICAgICByZXR1cm4gUm93RW5kU2lk
ZTsKKyAgICBpZiAoc2lkZSA9PSBSb3dTdGFydFNpZGUpCisgICAgICAgIHJldHVybiBDb2x1bW5T
dGFydFNpZGU7CisgICAgcmV0dXJuIENvbHVtbkVuZFNpZGU7Cit9CisKK3N0YXRpYyBpbnQgY2xh
bXBlZEltcGxpY2l0TGluZUZvckFyZWEoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGludCBtaW4sIGludCBtYXgsIGJvb2wgaXNSb3dBeGlzLCBib29sIGlzU3Rh
cnRTaWRlKQoreworICAgIGNvbnN0IE5hbWVkR3JpZEFyZWFNYXAmIGFyZWFzID0gc3R5bGUubmFt
ZWRHcmlkQXJlYSgpOworICAgIE5hbWVkR3JpZEFyZWFNYXA6OmNvbnN0X2l0ZXJhdG9yIGdyaWRB
cmVhSXQgPSBhcmVhcy5maW5kKG5hbWUpOworICAgIGlmIChncmlkQXJlYUl0ICE9IGFyZWFzLmVu
ZCgpKSB7CisgICAgICAgIGNvbnN0IEdyaWRBcmVhJiBncmlkQXJlYSA9IGdyaWRBcmVhSXQtPnZh
bHVlOworICAgICAgICBHcmlkU3BhbiBncmlkU3BhbiA9IGlzUm93QXhpcyA/IGdyaWRBcmVhLmNv
bHVtbnMgOiBncmlkQXJlYS5yb3dzOworICAgICAgICBncmlkU3Bhbi5jbGFtcChtaW4sIG1heCk7
CisgICAgICAgIGlmIChncmlkU3Bhbi5lbmRMaW5lKCkgPiBncmlkU3Bhbi5zdGFydExpbmUoKSkK
KyAgICAgICAgICAgIHJldHVybiBpc1N0YXJ0U2lkZSA/IGdyaWRTcGFuLnN0YXJ0TGluZSgpIDog
Z3JpZFNwYW4uZW5kTGluZSgpOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKK05hbWVkTGlu
ZUNvbGxlY3Rpb25CYXNlOjpOYW1lZExpbmVDb2xsZWN0aW9uQmFzZShjb25zdCBSZW5kZXJHcmlk
JiBpbml0aWFsR3JpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUs
IGJvb2wgbmFtZUlzQXJlYU5hbWUpCisgICAgOiBtX3N1YmdyaWQoZmFsc2UpCit7CisgICAgU3Ry
aW5nIGxpbmVOYW1lID0gbmFtZUlzQXJlYU5hbWUgPyBpbXBsaWNpdE5hbWVkR3JpZExpbmVGb3JT
aWRlKG5hbWUsIHNpZGUpIDogbmFtZTsKKyAgICBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGly
ZWN0aW9uID0gZGlyZWN0aW9uRnJvbVNpZGUoc2lkZSk7CisgICAgY29uc3QgUmVuZGVyR3JpZCog
Z3JpZCA9ICZpbml0aWFsR3JpZDsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSogZ3JpZENvbnRhaW5l
clN0eWxlID0gJmdyaWQtPnN0eWxlKCk7CiAgICAgYm9vbCBpc1Jvd0F4aXMgPSBkaXJlY3Rpb24g
PT0gRm9yQ29sdW1uczsKLSAgICBjb25zdCBOYW1lZEdyaWRMaW5lc01hcCYgZ3JpZExpbmVOYW1l
cyA9IGlzUm93QXhpcyA/IGdyaWRDb250YWluZXJTdHlsZS5uYW1lZEdyaWRDb2x1bW5MaW5lcygp
IDogZ3JpZENvbnRhaW5lclN0eWxlLm5hbWVkR3JpZFJvd0xpbmVzKCk7Ci0gICAgY29uc3QgTmFt
ZWRHcmlkTGluZXNNYXAmIGF1dG9SZXBlYXRHcmlkTGluZU5hbWVzID0gaXNSb3dBeGlzID8gZ3Jp
ZENvbnRhaW5lclN0eWxlLmF1dG9SZXBlYXROYW1lZEdyaWRDb2x1bW5MaW5lcygpIDogZ3JpZENv
bnRhaW5lclN0eWxlLmF1dG9SZXBlYXROYW1lZEdyaWRSb3dMaW5lcygpOwotICAgIGNvbnN0IE5h
bWVkR3JpZExpbmVzTWFwJiBpbXBsaWNpdEdyaWRMaW5lTmFtZXMgPSBpc1Jvd0F4aXMgPyBncmlk
Q29udGFpbmVyU3R5bGUuaW1wbGljaXROYW1lZEdyaWRDb2x1bW5MaW5lcygpIDogZ3JpZENvbnRh
aW5lclN0eWxlLmltcGxpY2l0TmFtZWRHcmlkUm93TGluZXMoKTsKIAotICAgIGF1dG8gbGluZXNJ
dGVyYXRvciA9IGdyaWRMaW5lTmFtZXMuZmluZChuYW1lZExpbmUpOworICAgIG1fbGFzdExpbmUg
PSBleHBsaWNpdEdyaWRTaXplRm9yU2lkZSgqZ3JpZCwgc2lkZSk7CisKKyAgICBjb25zdCBOYW1l
ZEdyaWRMaW5lc01hcCYgZ3JpZExpbmVOYW1lcyA9IGlzUm93QXhpcyA/IGdyaWRDb250YWluZXJT
dHlsZS0+bmFtZWRHcmlkQ29sdW1uTGluZXMoKSA6IGdyaWRDb250YWluZXJTdHlsZS0+bmFtZWRH
cmlkUm93TGluZXMoKTsKKyAgICBjb25zdCBOYW1lZEdyaWRMaW5lc01hcCYgYXV0b1JlcGVhdEdy
aWRMaW5lTmFtZXMgPSBpc1Jvd0F4aXMgPyBncmlkQ29udGFpbmVyU3R5bGUtPmF1dG9SZXBlYXRO
YW1lZEdyaWRDb2x1bW5MaW5lcygpIDogZ3JpZENvbnRhaW5lclN0eWxlLT5hdXRvUmVwZWF0TmFt
ZWRHcmlkUm93TGluZXMoKTsKKyAgICBjb25zdCBOYW1lZEdyaWRMaW5lc01hcCYgaW1wbGljaXRH
cmlkTGluZU5hbWVzID0gaXNSb3dBeGlzID8gZ3JpZENvbnRhaW5lclN0eWxlLT5pbXBsaWNpdE5h
bWVkR3JpZENvbHVtbkxpbmVzKCkgOiBncmlkQ29udGFpbmVyU3R5bGUtPmltcGxpY2l0TmFtZWRH
cmlkUm93TGluZXMoKTsKKworICAgIGF1dG8gbGluZXNJdGVyYXRvciA9IGdyaWRMaW5lTmFtZXMu
ZmluZChsaW5lTmFtZSk7CiAgICAgbV9uYW1lZExpbmVzSW5kZXhlcyA9IGxpbmVzSXRlcmF0b3Ig
PT0gZ3JpZExpbmVOYW1lcy5lbmQoKSA/IG51bGxwdHIgOiAmbGluZXNJdGVyYXRvci0+dmFsdWU7
CiAKLSAgICBhdXRvIGF1dG9SZXBlYXRMaW5lc0l0ZXJhdG9yID0gYXV0b1JlcGVhdEdyaWRMaW5l
TmFtZXMuZmluZChuYW1lZExpbmUpOworICAgIGF1dG8gYXV0b1JlcGVhdExpbmVzSXRlcmF0b3Ig
PSBhdXRvUmVwZWF0R3JpZExpbmVOYW1lcy5maW5kKGxpbmVOYW1lKTsKICAgICBtX2F1dG9SZXBl
YXROYW1lZExpbmVzSW5kZXhlcyA9IGF1dG9SZXBlYXRMaW5lc0l0ZXJhdG9yID09IGF1dG9SZXBl
YXRHcmlkTGluZU5hbWVzLmVuZCgpID8gbnVsbHB0ciA6ICZhdXRvUmVwZWF0TGluZXNJdGVyYXRv
ci0+dmFsdWU7CiAKLSAgICBhdXRvIGltcGxpY2l0R3JpZExpbmVzSXRlcmF0b3IgPSBpbXBsaWNp
dEdyaWRMaW5lTmFtZXMuZmluZChuYW1lZExpbmUpOworICAgIGF1dG8gaW1wbGljaXRHcmlkTGlu
ZXNJdGVyYXRvciA9IGltcGxpY2l0R3JpZExpbmVOYW1lcy5maW5kKGxpbmVOYW1lKTsKICAgICBt
X2ltcGxpY2l0TmFtZWRMaW5lc0luZGV4ZXMgPSBpbXBsaWNpdEdyaWRMaW5lc0l0ZXJhdG9yID09
IGltcGxpY2l0R3JpZExpbmVOYW1lcy5lbmQoKSA/IG51bGxwdHIgOiAmaW1wbGljaXRHcmlkTGlu
ZXNJdGVyYXRvci0+dmFsdWU7CisgICAgbV9zdWJncmlkID0gaXNSb3dBeGlzID8gZ3JpZC0+aXNT
dWJncmlkQ29sdW1ucygpIDogZ3JpZC0+aXNTdWJncmlkUm93cygpOworCisgICAgbV9hdXRvUmVw
ZWF0VG90YWxUcmFja3MgPSBncmlkLT5hdXRvUmVwZWF0Q291bnRGb3JEaXJlY3Rpb24oZGlyZWN0
aW9uKTsKKyAgICBtX2F1dG9SZXBlYXRUcmFja0xpc3RMZW5ndGggPSBpc1Jvd0F4aXMgPyBncmlk
Q29udGFpbmVyU3R5bGUtPmdyaWRBdXRvUmVwZWF0Q29sdW1ucygpLnNpemUoKSA6IGdyaWRDb250
YWluZXJTdHlsZS0+Z3JpZEF1dG9SZXBlYXRSb3dzKCkuc2l6ZSgpOworICAgIG1fYXV0b1JlcGVh
dExpbmVzID0gMDsKKyAgICBtX2luc2VydGlvblBvaW50ID0gaXNSb3dBeGlzID8gZ3JpZENvbnRh
aW5lclN0eWxlLT5ncmlkQXV0b1JlcGVhdENvbHVtbnNJbnNlcnRpb25Qb2ludCgpIDogZ3JpZENv
bnRhaW5lclN0eWxlLT5ncmlkQXV0b1JlcGVhdFJvd3NJbnNlcnRpb25Qb2ludCgpOworCisgICAg
aWYgKCFtX3N1YmdyaWQpIHsKKyAgICAgICAgaWYgKGlzUm93QXhpcyA/IGdyaWRDb250YWluZXJT
dHlsZS0+Z3JpZFN1YmdyaWRDb2x1bW5zKCkgOiBncmlkQ29udGFpbmVyU3R5bGUtPmdyaWRTdWJn
cmlkUm93cygpKSB7CisgICAgICAgICAgICAvLyBJZiBzdWJncmlkIHdhcyBzcGVjaWZpZWQsIGJ1
dCB0aGUgZ3JpZCB3YXNuJ3QgYWJsZSB0byBhY3R1YWxseSBiZWNvbWUgYSBzdWJncmlkLCB0aGUg
dXNlZAorICAgICAgICAgICAgLy8gdmFsdWUgb2YgdGhlIHN0eWxlIHNob3VsZCBiZSB0aGUgaW5p
dGlhbCAnbm9uZScgdmFsdWVzLgorICAgICAgICAgICAgbV9uYW1lZExpbmVzSW5kZXhlcyA9IG51
bGxwdHI7CisgICAgICAgICAgICBtX2F1dG9SZXBlYXROYW1lZExpbmVzSW5kZXhlcyA9IG51bGxw
dHI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIG1faW5zZXJ0aW9u
UG9pbnQgPSBpc1Jvd0F4aXMgPyBncmlkQ29udGFpbmVyU3R5bGUuZ3JpZEF1dG9SZXBlYXRDb2x1
bW5zSW5zZXJ0aW9uUG9pbnQoKSA6IGdyaWRDb250YWluZXJTdHlsZS5ncmlkQXV0b1JlcGVhdFJv
d3NJbnNlcnRpb25Qb2ludCgpOwotCi0gICAgbV9hdXRvUmVwZWF0VHJhY2tMaXN0TGVuZ3RoID0g
aXNSb3dBeGlzID8gZ3JpZENvbnRhaW5lclN0eWxlLmdyaWRBdXRvUmVwZWF0Q29sdW1ucygpLnNp
emUoKSA6IGdyaWRDb250YWluZXJTdHlsZS5ncmlkQXV0b1JlcGVhdFJvd3MoKS5zaXplKCk7Ci19
CisgICAgaWYgKG1faW1wbGljaXROYW1lZExpbmVzSW5kZXhlcykgeworICAgICAgICAvLyBUaGUg
aW1wbGljaXQgbGluZXMgbGlzdCB3YXMgY3JlYXRlZCBiYXNlZCBvbiB0aGUgYXJlYXMgc3BlY2lm
aWVkIGZvciB0aGUgZ3JpZCBhcmVhcyBwcm9wZXJ0eSwgYnV0IHRoZQorICAgICAgICAvLyBzdWJn
cmlkIG1pZ2h0IGhhdmUgaW5oZXJpdGVkIGxlc3MgdHJhY2tzIHRoYW4gbmVlZGVkIHRvIGNvdmVy
IHRoZSBzcGVjaWZpZWQgYXJlYS4gV2Ugd2FudCB0byBjbGFtcAorICAgICAgICAvLyB0aGUgc3Bl
Y2lmaWVkIGFyZWEgZG93biB0byBleHBsaWNpdCBncmlkIHdlIGFjdHVhbGx5IGhhdmUsIGFuZCB0
aGVuIGdlbmVyYXRlIGltcGxpY2l0IC1zdGFydC8tZW5kCisgICAgICAgIC8vIGxpbmVzIGZvciB0
aGUgbmV3IGFyZWEuCisgICAgICAgIEFTU0VSVChtX2ltcGxpY2l0TmFtZWRMaW5lc0luZGV4ZXMt
PnNpemUoKSA9PSAxKTsKKyAgICAgICAgbV9pbXBsaWNpdE5hbWVkTGluZXNJbmRleGVzID0gJm1f
aW5oZXJpdGVkTmFtZWRMaW5lc0luZGV4ZXM7CisKKyAgICAgICAgLy8gRmluZCB0aGUgYXJlYSBu
YW1lIHRoYXQgY3JlYXRlcyB0aGUgaW1wbGljaXQgbGluZSB3ZSdyZSBsb29raW5nIGZvci4gSWYg
dGhlIGlucHV0IHdhcyBhbiBhcmVhIG5hbWUsCisgICAgICAgIC8vIHRoZW4gd2UgY2FuIHVzZSB0
aGF0LCBvdGhlcndpc2Ugd2UgbmVlZCB0byBjaG9vc2UgdGhlIHN1YnN0cmluZyBhbmQgaW5mZXIg
d2hpY2ggc2lkZSB0aGUgaW5wdXQgc3BlY2lmaWVkLgorICAgICAgICAvLyBJdCdzIHBvc3NpYmxl
IGZvciBhdXRob3JzIHRvIG1hbnVhbGx5IG5hbWUgYSAqLXN0YXJ0IGltcGxpY2l0IGxpbmUgbmFt
ZSBmb3IgdGhlIGVuZCBsaW5lIHNlYXJjaCwgYW5kIHZpY2UtdmVyc2EsCisgICAgICAgIC8vIHNv
IHdlIG5lZWQgdG8gcmVtZW1iZXIgd2hpY2ggc2lkZSB3ZSBpbmZlcnJlZCBmcm9tIHRoZSBuYW1l
LCBzZXBhcmF0ZWx5IGZyb20gdGhlIHNpZGUgd2UncmUgc2VhcmNoaW5nIGZvci4KKyAgICAgICAg
U3RyaW5nIGFyZWFOYW1lID0gbmFtZTsKKyAgICAgICAgYm9vbCBzdGFydFNpZGUgPSBpc1N0YXJ0
U2lkZShzaWRlKTsKKyAgICAgICAgaWYgKCFuYW1lSXNBcmVhTmFtZSkgeworICAgICAgICAgICAg
c2l6ZV90IHN1ZmZpeCA9IG5hbWUuZmluZCgiLXN0YXJ0Iik7CisgICAgICAgICAgICBpZiAoc3Vm
Zml4ID09IG5vdEZvdW5kKSB7CisgICAgICAgICAgICAgICAgc3VmZml4ID0gbmFtZS5maW5kKCIt
ZW5kIik7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN1ZmZpeCAhPSBub3RGb3VuZCk7CisgICAg
ICAgICAgICAgICAgc3RhcnRTaWRlID0gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICBzdGFydFNpZGUgPSB0cnVlOworICAgICAgICAgICAgYXJlYU5hbWUgPSBuYW1l
LnN1YnN0cmluZygwLCBzdWZmaXgpOworICAgICAgICB9CisgICAgICAgIGludCBpbXBsaWNpdExp
bmUgPSBjbGFtcGVkSW1wbGljaXRMaW5lRm9yQXJlYSgqZ3JpZENvbnRhaW5lclN0eWxlLCBhcmVh
TmFtZSwgMCwgbV9sYXN0TGluZSwgaXNSb3dBeGlzLCBzdGFydFNpZGUpOworICAgICAgICBpZiAo
aW1wbGljaXRMaW5lICE9IC0xKQorICAgICAgICAgICAgbV9pbmhlcml0ZWROYW1lZExpbmVzSW5k
ZXhlcy5hcHBlbmQoaW1wbGljaXRMaW5lKTsKKyAgICB9CiAKLWJvb2wgTmFtZWRMaW5lQ29sbGVj
dGlvbjo6aGFzRXhwbGljaXROYW1lZExpbmVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9uYW1l
ZExpbmVzSW5kZXhlcyB8fCBtX2F1dG9SZXBlYXROYW1lZExpbmVzSW5kZXhlczsKKyAgICBBU1NF
UlQoIW1fYXV0b1JlcGVhdFRvdGFsVHJhY2tzKTsKKyAgICBtX2F1dG9SZXBlYXRUcmFja0xpc3RM
ZW5ndGggPSAoaXNSb3dBeGlzID8gZ3JpZENvbnRhaW5lclN0eWxlLT5hdXRvUmVwZWF0T3JkZXJl
ZE5hbWVkR3JpZENvbHVtbkxpbmVzKCkgOiBncmlkQ29udGFpbmVyU3R5bGUtPmF1dG9SZXBlYXRP
cmRlcmVkTmFtZWRHcmlkUm93TGluZXMoKSkuc2l6ZSgpOworICAgIGlmIChtX2F1dG9SZXBlYXRU
cmFja0xpc3RMZW5ndGgpIHsKKyAgICAgICAgdW5zaWduZWQgbmFtZWRMaW5lcyA9IChpc1Jvd0F4
aXMgPyBncmlkQ29udGFpbmVyU3R5bGUtPm9yZGVyZWROYW1lZEdyaWRDb2x1bW5MaW5lcygpIDog
Z3JpZENvbnRhaW5lclN0eWxlLT5vcmRlcmVkTmFtZWRHcmlkUm93TGluZXMoKSkuc2l6ZSgpOwor
ICAgICAgICB1bnNpZ25lZCB0b3RhbExpbmVzID0gbV9sYXN0TGluZSArIDE7CisgICAgICAgIGlm
IChuYW1lZExpbmVzIDwgdG90YWxMaW5lcykgeworICAgICAgICAgICAgLy8gYXV0byByZXBlYXQg
aW4gYSBzdWJncmlkIHNwZWNpZmllcyB0aGUgbGluZSBuYW1lcyB0aGF0IHNob3VsZCBiZSByZXBl
YXRlZCwgbm90CisgICAgICAgICAgICAvLyB0aGUgdHJhY2tzLgorICAgICAgICAgICAgbV9hdXRv
UmVwZWF0TGluZXMgPSAodG90YWxMaW5lcyAtIG5hbWVkTGluZXMpIC8gbV9hdXRvUmVwZWF0VHJh
Y2tMaXN0TGVuZ3RoOworICAgICAgICAgICAgbV9hdXRvUmVwZWF0TGluZXMgKj0gbV9hdXRvUmVw
ZWF0VHJhY2tMaXN0TGVuZ3RoOworICAgICAgICB9CisgICAgfQogfQogCi1ib29sIE5hbWVkTGlu
ZUNvbGxlY3Rpb246Omhhc05hbWVkTGluZXMoKSBjb25zdAordm9pZCBOYW1lZExpbmVDb2xsZWN0
aW9uQmFzZTo6ZW5zdXJlTG9jYWxTdG9yYWdlKCkKIHsKLSAgICByZXR1cm4gaGFzRXhwbGljaXRO
YW1lZExpbmVzKCkgfHwgbV9pbXBsaWNpdE5hbWVkTGluZXNJbmRleGVzOwotfQorICAgIGlmICht
X2ltcGxpY2l0TmFtZWRMaW5lc0luZGV4ZXMgIT0gJm1faW5oZXJpdGVkTmFtZWRMaW5lc0luZGV4
ZXMpIHsKKyAgICAgICAgaWYgKG1faW1wbGljaXROYW1lZExpbmVzSW5kZXhlcykKKyAgICAgICAg
ICAgIG1faW5oZXJpdGVkTmFtZWRMaW5lc0luZGV4ZXMuYXBwZW5kVmVjdG9yKCptX2ltcGxpY2l0
TmFtZWRMaW5lc0luZGV4ZXMpOworICAgICAgICBtX2ltcGxpY2l0TmFtZWRMaW5lc0luZGV4ZXMg
PSAmbV9pbmhlcml0ZWROYW1lZExpbmVzSW5kZXhlczsKKyAgICB9Cit9OwogCi1ib29sIE5hbWVk
TGluZUNvbGxlY3Rpb246OmNvbnRhaW5zKHVuc2lnbmVkIGxpbmUpIGNvbnN0Citib29sIE5hbWVk
TGluZUNvbGxlY3Rpb25CYXNlOjpjb250YWlucyh1bnNpZ25lZCBsaW5lKSBjb25zdAogewotICAg
IEFTU0VSVChoYXNOYW1lZExpbmVzKCkpOwotCiAgICAgaWYgKGxpbmUgPiBtX2xhc3RMaW5lKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTEwMSwxMiArMTg5LDIwIEBAIGJvb2wgTmFtZWRM
aW5lQ29sbGVjdGlvbjo6Y29udGFpbnModW5zaWduZWQgbGluZSkgY29uc3QKICAgICAgICAgcmV0
dXJuIGluZGV4ZXMgJiYgaW5kZXhlcy0+ZmluZChsaW5lKSAhPSBub3RGb3VuZDsKICAgICB9Owog
Ci0gICAgaWYgKGNvbnRhaW5zKG1faW1wbGljaXROYW1lZExpbmVzSW5kZXhlcywgbGluZSkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCiAgICAgaWYgKCFtX2F1dG9SZXBlYXRUcmFja0xpc3RMZW5n
dGggfHwgbGluZSA8IG1faW5zZXJ0aW9uUG9pbnQpCiAgICAgICAgIHJldHVybiBjb250YWlucyht
X25hbWVkTGluZXNJbmRleGVzLCBsaW5lKTsKIAorICAgIGlmIChtX3N1YmdyaWQpIHsKKyAgICAg
ICAgaWYgKGxpbmUgPj0gbV9pbnNlcnRpb25Qb2ludCArIG1fYXV0b1JlcGVhdExpbmVzKQorICAg
ICAgICAgICAgcmV0dXJuIGNvbnRhaW5zKG1fbmFtZWRMaW5lc0luZGV4ZXMsIGxpbmUgLSBtX2F1
dG9SZXBlYXRMaW5lcyk7CisKKyAgICAgICAgaWYgKCFtX2F1dG9SZXBlYXRMaW5lcykKKyAgICAg
ICAgICAgIHJldHVybiBjb250YWlucyhtX25hbWVkTGluZXNJbmRleGVzLCBsaW5lKTsKKworICAg
ICAgICB1bnNpZ25lZCBhdXRvUmVwZWF0SW5kZXhJbkZpcnN0UmVwZXRpdGlvbiA9IChsaW5lIC0g
bV9pbnNlcnRpb25Qb2ludCkgJSBtX2F1dG9SZXBlYXRUcmFja0xpc3RMZW5ndGg7CisgICAgICAg
IHJldHVybiBjb250YWlucyhtX2F1dG9SZXBlYXROYW1lZExpbmVzSW5kZXhlcywgYXV0b1JlcGVh
dEluZGV4SW5GaXJzdFJlcGV0aXRpb24pOworICAgIH0KKwogICAgIEFTU0VSVChtX2F1dG9SZXBl
YXRUb3RhbFRyYWNrcyk7CiAKICAgICBpZiAobGluZSA+IG1faW5zZXJ0aW9uUG9pbnQgKyBtX2F1
dG9SZXBlYXRUb3RhbFRyYWNrcykKQEAgLTEyNCwxMyArMjIwLDExNiBAQCBib29sIE5hbWVkTGlu
ZUNvbGxlY3Rpb246OmNvbnRhaW5zKHVuc2lnbmVkIGxpbmUpIGNvbnN0CiAgICAgcmV0dXJuIGNv
bnRhaW5zKG1fYXV0b1JlcGVhdE5hbWVkTGluZXNJbmRleGVzLCBhdXRvUmVwZWF0SW5kZXhJbkZp
cnN0UmVwZXRpdGlvbik7CiB9CiAKLXVuc2lnbmVkIE5hbWVkTGluZUNvbGxlY3Rpb246OmZpcnN0
RXhwbGljaXRQb3NpdGlvbigpIGNvbnN0CitOYW1lZExpbmVDb2xsZWN0aW9uOjpOYW1lZExpbmVD
b2xsZWN0aW9uKGNvbnN0IFJlbmRlckdyaWQmIGluaXRpYWxHcmlkLCBjb25zdCBTdHJpbmcmIG5h
bWUsIEdyaWRQb3NpdGlvblNpZGUgc2lkZSwgYm9vbCBuYW1lSXNBcmVhTmFtZSkKKyAgICA6IE5h
bWVkTGluZUNvbGxlY3Rpb25CYXNlKGluaXRpYWxHcmlkLCBuYW1lLCBzaWRlLCBuYW1lSXNBcmVh
TmFtZSkKK3sKKyAgICBpZiAoIW1fbGFzdExpbmUpCisgICAgICAgIHJldHVybjsKKyAgICBHcmlk
U3BhbiBzZWFyY2ggPSBHcmlkU3Bhbjo6dHJhbnNsYXRlZERlZmluaXRlR3JpZFNwYW4oMCwgbV9s
YXN0TGluZSk7CisgICAgR3JpZFBvc2l0aW9uU2lkZSBjdXJyZW50U2lkZSA9IHNpZGU7CisgICAg
R3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiA9IGRpcmVjdGlvbkZyb21TaWRlKGN1
cnJlbnRTaWRlKTsKKyAgICBib29sIGluaXRpYWxGbGlwcGVkID0gR3JpZExheW91dEZ1bmN0aW9u
czo6aXNGbGlwcGVkRGlyZWN0aW9uKGluaXRpYWxHcmlkLCBkaXJlY3Rpb24pOworICAgIGNvbnN0
IFJlbmRlckdyaWQqIGdyaWQgPSAmaW5pdGlhbEdyaWQ7CisgICAgYm9vbCBpc1Jvd0F4aXMgPSBk
aXJlY3Rpb24gPT0gRm9yQ29sdW1uczsKKworICAgIC8vIElmIHdlJ3JlIGEgc3ViZ3JpZCwgd2Ug
d2FudCB0byBpbmhlcml0IHRoZSBsaW5lIG5hbWVzIGZyb20gYW55IGFuY2VzdG9yIGdyaWRzLgor
ICAgIHdoaWxlIChpc1Jvd0F4aXMgPyBncmlkLT5pc1N1YmdyaWRDb2x1bW5zKCkgOiBncmlkLT5p
c1N1YmdyaWRSb3dzKCkpIHsKKyAgICAgICAgY29uc3QgUmVuZGVyR3JpZCogcGFyZW50ID0gZG93
bmNhc3Q8UmVuZGVyR3JpZD4oZ3JpZC0+cGFyZW50KCkpOworCisgICAgICAgIC8vIFRyYW5zbGF0
ZSBvdXIgZXhwbGljaXQgZ3JpZCBzZXQgb2YgbGluZXMgaW50byB0aGUgY29vcmRpbmF0ZSBzcGFj
ZSBvZiB0aGUKKyAgICAgICAgLy8gcGFyZW50IGdyaWQsIGFkanVzdGluZyBkaXJlY3Rpb24vc2lk
ZSBhcyBuZWVkZWQuCisgICAgICAgIGlmIChncmlkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
ICE9IHBhcmVudC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgeworICAgICAgICAgICAgaXNS
b3dBeGlzID0gIWlzUm93QXhpczsKKyAgICAgICAgICAgIGN1cnJlbnRTaWRlID0gdHJhbnNwb3Nl
ZFNpZGUoY3VycmVudFNpZGUpOworICAgICAgICB9CisgICAgICAgIGRpcmVjdGlvbiA9IGRpcmVj
dGlvbkZyb21TaWRlKGN1cnJlbnRTaWRlKTsKKworICAgICAgICBHcmlkU3BhbiBzcGFuID0gcGFy
ZW50LT5ncmlkU3BhbkZvckNoaWxkKCpncmlkLCBkaXJlY3Rpb24pOworICAgICAgICBzZWFyY2gu
dHJhbnNsYXRlVG8oc3BhbiwgR3JpZExheW91dEZ1bmN0aW9uczo6aXNTdWJncmlkUmV2ZXJzZWRE
aXJlY3Rpb24oKnBhcmVudCwgZGlyZWN0aW9uLCAqZ3JpZCkpOworCisgICAgICAgIGF1dG8gY29u
dmVydFRvSW5pdGlhbFNwYWNlID0gWyZdKHVuc2lnbmVkIGkpIHsKKyAgICAgICAgICAgIGkgLT0g
c2VhcmNoLnN0YXJ0TGluZSgpOworICAgICAgICAgICAgaWYgKEdyaWRMYXlvdXRGdW5jdGlvbnM6
OmlzRmxpcHBlZERpcmVjdGlvbigqcGFyZW50LCBkaXJlY3Rpb24pICE9IGluaXRpYWxGbGlwcGVk
KQorICAgICAgICAgICAgICAgIGkgPSBtX2xhc3RMaW5lIC0gaTsKKyAgICAgICAgICAgIHJldHVy
biBpOworICAgICAgICB9OworCisgICAgICAgIC8vIENyZWF0ZSBhIGxpbmUgY29sbGVjdGlvbiBm
b3IgdGhlIHBhcmVudCBncmlkLCBhbmQgY2hlY2sgdG8gc2VlIGlmIGFueSBvZiBvdXIgbGluZXMK
KyAgICAgICAgLy8gYXJlIHByZXNlbnQuIElmIHdlIGZpbmQgYW55LCBhZGQgdGhlbSB0byBhIGxv
Y2FsbHkgc3RvcmVkIGxpbmUgbmFtZSBsaXN0ICh3aXRoIG51bWJlcmluZworICAgICAgICAvLyBy
ZWxhdGl2ZSB0byBvdXIgZ3JpZCkuCisgICAgICAgIGJvb2wgYXBwZW5kZWQgPSBmYWxzZTsKKyAg
ICAgICAgTmFtZWRMaW5lQ29sbGVjdGlvbkJhc2UgcGFyZW50Q29sbGVjdGlvbigqcGFyZW50LCBu
YW1lLCBjdXJyZW50U2lkZSwgbmFtZUlzQXJlYU5hbWUpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBzZWFyY2guc3RhcnRMaW5lKCk7IGkgPD0gc2VhcmNoLmVuZExpbmUoKTsgaSsrKSB7Cisg
ICAgICAgICAgICBpZiAocGFyZW50Q29sbGVjdGlvbi5jb250YWlucyhpKSkgeworICAgICAgICAg
ICAgICAgIGVuc3VyZUxvY2FsU3RvcmFnZSgpOworICAgICAgICAgICAgICAgIGFwcGVuZGVkID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBtX2luaGVyaXRlZE5hbWVkTGluZXNJbmRleGVzLmFwcGVu
ZChjb252ZXJ0VG9Jbml0aWFsU3BhY2UoaSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgaWYgKG5hbWVJc0FyZWFOYW1lKSB7CisgICAgICAgICAgICAvLyBXZSBub3cgbmVl
ZCB0byBsb29rIGF0IHRoZSBncmlkIGFyZWFzIGZvciB0aGUgcGFyZW50IChub3QgdGhlIGltcGxp
Y2l0CisgICAgICAgICAgICAvLyBsaW5lcyBmb3IgdGhlIHBhcmVudCEpLCBhbmQgaW5zZXJ0IHRo
ZSBvbmVzIHRoYXQgaW50ZXJzZWN0IGFzIGltcGxpY2l0CisgICAgICAgICAgICAvLyBsaW5lcyAo
YnV0IGluIG91ciBzaW5nbGUgY29tYmluZWQgbGlzdCkuCisgICAgICAgICAgICBpbnQgaW1wbGlj
aXRMaW5lID0gY2xhbXBlZEltcGxpY2l0TGluZUZvckFyZWEocGFyZW50LT5zdHlsZSgpLCBuYW1l
LCBzZWFyY2guc3RhcnRMaW5lKCksIHNlYXJjaC5lbmRMaW5lKCksIGlzUm93QXhpcywgaXNTdGFy
dFNpZGUoc2lkZSkpOworICAgICAgICAgICAgaWYgKGltcGxpY2l0TGluZSAhPSAtMSkgeworICAg
ICAgICAgICAgICAgIGVuc3VyZUxvY2FsU3RvcmFnZSgpOworICAgICAgICAgICAgICAgIGFwcGVu
ZGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtX2luaGVyaXRlZE5hbWVkTGluZXNJbmRleGVz
LmFwcGVuZChjb252ZXJ0VG9Jbml0aWFsU3BhY2UoaW1wbGljaXRMaW5lKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoYXBwZW5kZWQpIHsKKyAgICAgICAgICAgIC8v
IFJlLXNvcnQgbV9pbmhlcml0ZWROYW1lZExpbmVzSW5kZXhlcworICAgICAgICAgICAgc3RkOjpz
b3J0KG1faW5oZXJpdGVkTmFtZWRMaW5lc0luZGV4ZXMuYmVnaW4oKSwgbV9pbmhlcml0ZWROYW1l
ZExpbmVzSW5kZXhlcy5lbmQoKSk7CisgICAgICAgIH0KKworICAgICAgICBncmlkID0gcGFyZW50
OworICAgIH0KK30KKworYm9vbCBOYW1lZExpbmVDb2xsZWN0aW9uOjpoYXNFeHBsaWNpdE5hbWVk
TGluZXMoKSBjb25zdAoreworICAgIGlmIChtX25hbWVkTGluZXNJbmRleGVzKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gbV9hdXRvUmVwZWF0TmFtZWRMaW5lc0luZGV4ZXMgJiYg
KCFtX3N1YmdyaWQgfHwgbV9hdXRvUmVwZWF0TGluZXMpOworfQorCitib29sIE5hbWVkTGluZUNv
bGxlY3Rpb246Omhhc05hbWVkTGluZXMoKSBjb25zdAoreworICAgIHJldHVybiBoYXNFeHBsaWNp
dE5hbWVkTGluZXMoKSB8fCBtX2ltcGxpY2l0TmFtZWRMaW5lc0luZGV4ZXM7Cit9CisKK3Vuc2ln
bmVkIE5hbWVkTGluZUNvbGxlY3Rpb246Omxhc3RMaW5lKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9sYXN0TGluZTsKK30KKworYm9vbCBOYW1lZExpbmVDb2xsZWN0aW9uOjpjb250YWlucyh1bnNp
Z25lZCBsaW5lKSBjb25zdAoreworICAgIEFTU0VSVChoYXNOYW1lZExpbmVzKCkpOworCisgICAg
aWYgKGxpbmUgPiBtX2xhc3RMaW5lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRv
IGNvbnRhaW5zID0gW10oY29uc3QgVmVjdG9yPHVuc2lnbmVkPiogaW5kZXhlcywgdW5zaWduZWQg
bGluZSkgeworICAgICAgICByZXR1cm4gaW5kZXhlcyAmJiBpbmRleGVzLT5maW5kKGxpbmUpICE9
IG5vdEZvdW5kOworICAgIH07CisKKyAgICBpZiAoY29udGFpbnMobV9pbXBsaWNpdE5hbWVkTGlu
ZXNJbmRleGVzLCBsaW5lKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gTmFt
ZWRMaW5lQ29sbGVjdGlvbkJhc2U6OmNvbnRhaW5zKGxpbmUpOworfQorCitpbnQgTmFtZWRMaW5l
Q29sbGVjdGlvbjo6Zmlyc3RFeHBsaWNpdFBvc2l0aW9uKCkgY29uc3QKIHsKICAgICBBU1NFUlQo
aGFzRXhwbGljaXROYW1lZExpbmVzKCkpOwogICAgIHVuc2lnbmVkIGZpcnN0TGluZSA9IDA7Cisg
ICAgdW5zaWduZWQgYXV0b1JlcGVhdHMgPSBtX3N1YmdyaWQgPyBtX2F1dG9SZXBlYXRMaW5lcyA6
IG1fYXV0b1JlcGVhdFRvdGFsVHJhY2tzOwogCiAgICAgLy8gSWYgdGhlcmUgaXMgbm8gYXV0byBy
ZXBlYXQoKSwgdGhlcmUgbXVzdCBiZSBzb21lIG5hbWVkIGxpbmUgb3V0c2lkZSwgcmV0dXJuIHRo
ZSAxc3Qgb25lLiBBbHNvIHJldHVybiBpdCBpZiBpdCBwcmVjZWRlcyB0aGUgYXV0by1yZXBlYXQo
KS4KLSAgICBpZiAoIW1fYXV0b1JlcGVhdFRyYWNrTGlzdExlbmd0aCB8fCAobV9uYW1lZExpbmVz
SW5kZXhlcyAmJiBtX25hbWVkTGluZXNJbmRleGVzLT5hdChmaXJzdExpbmUpIDw9IG1faW5zZXJ0
aW9uUG9pbnQpKQorICAgIGlmICghYXV0b1JlcGVhdHMgfHwgKG1fbmFtZWRMaW5lc0luZGV4ZXMg
JiYgbV9uYW1lZExpbmVzSW5kZXhlcy0+YXQoZmlyc3RMaW5lKSA8PSBtX2luc2VydGlvblBvaW50
KSkKICAgICAgICAgcmV0dXJuIG1fbmFtZWRMaW5lc0luZGV4ZXMtPmF0KGZpcnN0TGluZSk7CiAK
ICAgICAvLyBSZXR1cm4gdGhlIDFzdCBuYW1lZCBsaW5lIGluc2lkZSB0aGUgYXV0byByZXBlYXQo
KSwgaWYgYW55LgpAQCAtMTM4LDEwICszMzcsMTIgQEAgdW5zaWduZWQgTmFtZWRMaW5lQ29sbGVj
dGlvbjo6Zmlyc3RFeHBsaWNpdFBvc2l0aW9uKCkgY29uc3QKICAgICAgICAgcmV0dXJuIG1fYXV0
b1JlcGVhdE5hbWVkTGluZXNJbmRleGVzLT5hdChmaXJzdExpbmUpICsgbV9pbnNlcnRpb25Qb2lu
dDsKIAogICAgIC8vIFRoZSAxc3QgbmFtZWQgbGluZSBtdXN0IGJlIGFmdGVyIHRoZSBhdXRvIHJl
cGVhdCgpLgotICAgIHJldHVybiBtX25hbWVkTGluZXNJbmRleGVzLT5hdChmaXJzdExpbmUpICsg
bV9hdXRvUmVwZWF0VG90YWxUcmFja3MgLSAxOworICAgIGlmIChtX3N1YmdyaWQpCisgICAgICAg
IHJldHVybiBtX25hbWVkTGluZXNJbmRleGVzLT5hdChmaXJzdExpbmUpICsgYXV0b1JlcGVhdHM7
CisgICAgcmV0dXJuIG1fbmFtZWRMaW5lc0luZGV4ZXMtPmF0KGZpcnN0TGluZSkgKyBhdXRvUmVw
ZWF0cyAtIDE7CiB9CiAKLXVuc2lnbmVkIE5hbWVkTGluZUNvbGxlY3Rpb246OmZpcnN0UG9zaXRp
b24oKSBjb25zdAoraW50IE5hbWVkTGluZUNvbGxlY3Rpb246OmZpcnN0UG9zaXRpb24oKSBjb25z
dAogewogICAgIEFTU0VSVChoYXNOYW1lZExpbmVzKCkpOwogICAgIHVuc2lnbmVkIGZpcnN0TGlu
ZSA9IDA7CkBAIC0xNDksNyArMzUwLDE5IEBAIHVuc2lnbmVkIE5hbWVkTGluZUNvbGxlY3Rpb246
OmZpcnN0UG9zaXRpb24oKSBjb25zdAogICAgICAgICByZXR1cm4gZmlyc3RFeHBsaWNpdFBvc2l0
aW9uKCk7CiAgICAgaWYgKCFoYXNFeHBsaWNpdE5hbWVkTGluZXMoKSkKICAgICAgICAgcmV0dXJu
IG1faW1wbGljaXROYW1lZExpbmVzSW5kZXhlcy0+YXQoZmlyc3RMaW5lKTsKLSAgICByZXR1cm4g
c3RkOjptaW4oZmlyc3RFeHBsaWNpdFBvc2l0aW9uKCksIG1faW1wbGljaXROYW1lZExpbmVzSW5k
ZXhlcy0+YXQoZmlyc3RMaW5lKSk7CisgICAgcmV0dXJuIHN0ZDo6bWluPGludD4oZmlyc3RFeHBs
aWNpdFBvc2l0aW9uKCksIG1faW1wbGljaXROYW1lZExpbmVzSW5kZXhlcy0+YXQoZmlyc3RMaW5l
KSk7Cit9CisKKy8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtZ3JpZC0yLyNpbmRlZmlu
aXRlLWdyaWQtc3Bhbgorc3RhdGljIGJvb2wgaXNJbmRlZmluaXRlU3BhbihHcmlkUG9zaXRpb24m
IGluaXRpYWxQb3NpdGlvbiwgR3JpZFBvc2l0aW9uJiBmaW5hbFBvc2l0aW9uKQoreworICAgIGlm
ICghaW5pdGlhbFBvc2l0aW9uLmlzQXV0bygpICYmICFmaW5hbFBvc2l0aW9uLmlzQXV0bygpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoaW5pdGlhbFBvc2l0aW9uLmlzU3Bhbigp
IHx8IGZpbmFsUG9zaXRpb24uaXNTcGFuKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgdm9pZCBhZGp1c3RHcmlkUG9zaXRpb25zRnJvbVN0
eWxlKGNvbnN0IFJlbmRlckJveCYgZ3JpZEl0ZW0sIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBk
aXJlY3Rpb24sIEdyaWRQb3NpdGlvbiYgaW5pdGlhbFBvc2l0aW9uLCBHcmlkUG9zaXRpb24mIGZp
bmFsUG9zaXRpb24pCkBAIC0xNjgsMjQgKzM4MSw1MCBAQCBzdGF0aWMgdm9pZCBhZGp1c3RHcmlk
UG9zaXRpb25zRnJvbVN0eWxlKGNvbnN0IFJlbmRlckJveCYgZ3JpZEl0ZW0sIEdyaWRUcmFja1Np
egogICAgICAgICBmaW5hbFBvc2l0aW9uLnNldFNwYW5Qb3NpdGlvbigxLCBTdHJpbmcoKSk7CiAg
ICAgaWYgKGZpbmFsUG9zaXRpb24uaXNBdXRvKCkgJiYgaW5pdGlhbFBvc2l0aW9uLmlzU3Bhbigp
ICYmICFpbml0aWFsUG9zaXRpb24ubmFtZWRHcmlkTGluZSgpLmlzTnVsbCgpKQogICAgICAgICBp
bml0aWFsUG9zaXRpb24uc2V0U3BhblBvc2l0aW9uKDEsIFN0cmluZygpKTsKLX0KIAotdW5zaWdu
ZWQgR3JpZFBvc2l0aW9uc1Jlc29sdmVyOjpleHBsaWNpdEdyaWRDb2x1bW5Db3VudChjb25zdCBS
ZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCB1bnNpZ25lZCBhdXRvUmVwZWF0VHJhY2tz
Q291bnQpCi17Ci0gICAgcmV0dXJuIHN0ZDo6bWluPHVuc2lnbmVkPihzdGQ6Om1heChncmlkQ29u
dGFpbmVyU3R5bGUuZ3JpZENvbHVtbnMoKS5zaXplKCkgKyBhdXRvUmVwZWF0VHJhY2tzQ291bnQs
IGdyaWRDb250YWluZXJTdHlsZS5uYW1lZEdyaWRBcmVhQ29sdW1uQ291bnQoKSksIEdyaWRQb3Np
dGlvbjo6bWF4KCkpOworICAgIGlmIChpc0luZGVmaW5pdGVTcGFuKGluaXRpYWxQb3NpdGlvbiwg
ZmluYWxQb3NpdGlvbikgJiYgaXM8UmVuZGVyR3JpZD4oZ3JpZEl0ZW0pICYmIGRvd25jYXN0PFJl
bmRlckdyaWQ+KGdyaWRJdGVtKS5pc1N1YmdyaWQoZGlyZWN0aW9uKSkgeworICAgICAgICAvLyBJ
bmRlZmluaXRlIHNwYW4gZm9yIGFuIGl0ZW0gdGhhdCBpcyBzdWJncmlkZGVkIGluIHRoaXMgYXhp
cy4KKyAgICAgICAgaW50IGxpbmVDb3VudCA9IGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gZ3Jp
ZEl0ZW0uc3R5bGUoKS5vcmRlcmVkTmFtZWRHcmlkQ29sdW1uTGluZXMoKS5zaXplKCkgOiBncmlk
SXRlbS5zdHlsZSgpLm9yZGVyZWROYW1lZEdyaWRSb3dMaW5lcygpLnNpemUoKTsKKworICAgICAg
ICBpZiAoaW5pdGlhbFBvc2l0aW9uLmlzQXV0bygpKSB7CisgICAgICAgICAgICAvLyBTZXQgaW5p
dGlhbCBwb3NpdGlvbiB0byBzcGFuIDxsaW5lIG5hbWVzIC0gMT4KKyAgICAgICAgICAgIGluaXRp
YWxQb3NpdGlvbi5zZXRTcGFuUG9zaXRpb24oc3RkOjptYXgoMSwgbGluZUNvdW50IC0gMSksICIi
KTsKKyAgICAgICAgICAgIGlmIChmaW5hbFBvc2l0aW9uLmlzU3BhbigpKQorICAgICAgICAgICAg
ICAgIGZpbmFsUG9zaXRpb24uc2V0QXV0b1Bvc2l0aW9uKCk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvLyBTZXQgZmluYWwgcG9zaXRpb24gdG8gc3BhbiA8bGluZSBuYW1lcyAtIDE+
CisgICAgICAgICAgICBmaW5hbFBvc2l0aW9uLnNldFNwYW5Qb3NpdGlvbihzdGQ6Om1heCgxLCBs
aW5lQ291bnQgLSAxKSwgIiIpOworICAgICAgICAgICAgaWYgKGluaXRpYWxQb3NpdGlvbi5pc1Nw
YW4oKSkKKyAgICAgICAgICAgICAgICBpbml0aWFsUG9zaXRpb24uc2V0QXV0b1Bvc2l0aW9uKCk7
CisgICAgICAgIH0KKyAgICB9CiB9CiAKLXVuc2lnbmVkIEdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6
ZXhwbGljaXRHcmlkUm93Q291bnQoY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHls
ZSwgdW5zaWduZWQgYXV0b1JlcGVhdFRyYWNrc0NvdW50KQordW5zaWduZWQgR3JpZFBvc2l0aW9u
c1Jlc29sdmVyOjpleHBsaWNpdEdyaWRDb2x1bW5Db3VudChjb25zdCBSZW5kZXJHcmlkJiBncmlk
Q29udGFpbmVyKQogewotICAgIHJldHVybiBzdGQ6Om1pbjx1bnNpZ25lZD4oc3RkOjptYXgoZ3Jp
ZENvbnRhaW5lclN0eWxlLmdyaWRSb3dzKCkuc2l6ZSgpICsgYXV0b1JlcGVhdFRyYWNrc0NvdW50
LCBncmlkQ29udGFpbmVyU3R5bGUubmFtZWRHcmlkQXJlYVJvd0NvdW50KCkpLCBHcmlkUG9zaXRp
b246Om1heCgpKTsKKyAgICBib29sIHNwZWNpZmllZFN1YmdyaWQgPSBncmlkQ29udGFpbmVyLnN0
eWxlKCkuZ3JpZFN1YmdyaWRDb2x1bW5zKCk7CisgICAgaWYgKHNwZWNpZmllZFN1YmdyaWQgJiYg
Z3JpZENvbnRhaW5lci5pc1N1YmdyaWRDb2x1bW5zKCkpIHsKKyAgICAgICAgY29uc3QgUmVuZGVy
R3JpZCYgcGFyZW50ID0gKmRvd25jYXN0PFJlbmRlckdyaWQ+KGdyaWRDb250YWluZXIucGFyZW50
KCkpOworICAgICAgICBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uID0gR3JpZExh
eW91dEZ1bmN0aW9uczo6Zmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQocGFyZW50LCBncmlkQ29u
dGFpbmVyLCBGb3JDb2x1bW5zKTsKKyAgICAgICAgcmV0dXJuIHBhcmVudC5ncmlkU3BhbkZvckNo
aWxkKGdyaWRDb250YWluZXIsIGRpcmVjdGlvbikuaW50ZWdlclNwYW4oKTsKKyAgICB9CisgICAg
YXV0byBzcGVjaWZpZWRDb2x1bW5zID0gc3BlY2lmaWVkU3ViZ3JpZCA/IDAgOiBncmlkQ29udGFp
bmVyLnN0eWxlKCkuZ3JpZENvbHVtbnMoKS5zaXplKCk7CisgICAgcmV0dXJuIHN0ZDo6bWluPHVu
c2lnbmVkPihzdGQ6Om1heChzcGVjaWZpZWRDb2x1bW5zICsgZ3JpZENvbnRhaW5lci5hdXRvUmVw
ZWF0Q291bnRGb3JEaXJlY3Rpb24oRm9yQ29sdW1ucyksIGdyaWRDb250YWluZXIuc3R5bGUoKS5u
YW1lZEdyaWRBcmVhQ29sdW1uQ291bnQoKSksIEdyaWRQb3NpdGlvbjo6bWF4KCkpOwogfQogCi1z
dGF0aWMgdW5zaWduZWQgZXhwbGljaXRHcmlkU2l6ZUZvclNpZGUoY29uc3QgUmVuZGVyU3R5bGUm
IGdyaWRDb250YWluZXJTdHlsZSwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlLCB1bnNpZ25lZCBhdXRv
UmVwZWF0VHJhY2tzQ291bnQpCit1bnNpZ25lZCBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OmV4cGxp
Y2l0R3JpZFJvd0NvdW50KGNvbnN0IFJlbmRlckdyaWQmIGdyaWRDb250YWluZXIpCiB7Ci0gICAg
cmV0dXJuIGlzQ29sdW1uU2lkZShzaWRlKSA/IEdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6ZXhwbGlj
aXRHcmlkQ29sdW1uQ291bnQoZ3JpZENvbnRhaW5lclN0eWxlLCBhdXRvUmVwZWF0VHJhY2tzQ291
bnQpIDogR3JpZFBvc2l0aW9uc1Jlc29sdmVyOjpleHBsaWNpdEdyaWRSb3dDb3VudChncmlkQ29u
dGFpbmVyU3R5bGUsIGF1dG9SZXBlYXRUcmFja3NDb3VudCk7CisgICAgYm9vbCBzcGVjaWZpZWRT
dWJncmlkID0gZ3JpZENvbnRhaW5lci5zdHlsZSgpLmdyaWRTdWJncmlkUm93cygpOworICAgIGlm
IChzcGVjaWZpZWRTdWJncmlkICYmIGdyaWRDb250YWluZXIuaXNTdWJncmlkUm93cygpKSB7Cisg
ICAgICAgIGNvbnN0IFJlbmRlckdyaWQmIHBhcmVudCA9ICpkb3duY2FzdDxSZW5kZXJHcmlkPihn
cmlkQ29udGFpbmVyLnBhcmVudCgpKTsKKyAgICAgICAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9u
IGRpcmVjdGlvbiA9IEdyaWRMYXlvdXRGdW5jdGlvbnM6OmZsb3dBd2FyZURpcmVjdGlvbkZvckNo
aWxkKHBhcmVudCwgZ3JpZENvbnRhaW5lciwgRm9yUm93cyk7CisgICAgICAgIHJldHVybiBwYXJl
bnQuZ3JpZFNwYW5Gb3JDaGlsZChncmlkQ29udGFpbmVyLCBkaXJlY3Rpb24pLmludGVnZXJTcGFu
KCk7CisgICAgfQorICAgIGF1dG8gc3BlY2lmaWVkUm93cyA9IHNwZWNpZmllZFN1YmdyaWQgPyAw
IDogZ3JpZENvbnRhaW5lci5zdHlsZSgpLmdyaWRSb3dzKCkuc2l6ZSgpOworICAgIHJldHVybiBz
dGQ6Om1pbjx1bnNpZ25lZD4oc3RkOjptYXgoc3BlY2lmaWVkUm93cyArIGdyaWRDb250YWluZXIu
YXV0b1JlcGVhdENvdW50Rm9yRGlyZWN0aW9uKEZvclJvd3MpLCBncmlkQ29udGFpbmVyLnN0eWxl
KCkubmFtZWRHcmlkQXJlYVJvd0NvdW50KCkpLCBHcmlkUG9zaXRpb246Om1heCgpKTsKIH0KIAot
c3RhdGljIHVuc2lnbmVkIGxvb2tBaGVhZEZvck5hbWVkR3JpZExpbmUoaW50IHN0YXJ0LCB1bnNp
Z25lZCBudW1iZXJPZkxpbmVzLCB1bnNpZ25lZCBncmlkTGFzdExpbmUsIE5hbWVkTGluZUNvbGxl
Y3Rpb24mIGxpbmVzQ29sbGVjdGlvbikKK3N0YXRpYyB1bnNpZ25lZCBsb29rQWhlYWRGb3JOYW1l
ZEdyaWRMaW5lKGludCBzdGFydCwgdW5zaWduZWQgbnVtYmVyT2ZMaW5lcywgTmFtZWRMaW5lQ29s
bGVjdGlvbiYgbGluZXNDb2xsZWN0aW9uKQogewogICAgIEFTU0VSVChudW1iZXJPZkxpbmVzKTsK
IApAQCAtMTk0LDEwICs0MzMsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGxvb2tBaGVhZEZvck5hbWVk
R3JpZExpbmUoaW50IHN0YXJ0LCB1bnNpZ25lZCBudW1iZXJPZkxpbmVzLCB1bnMKICAgICB1bnNp
Z25lZCBlbmQgPSBzdGQ6Om1heChzdGFydCwgMCk7CiAKICAgICBpZiAoIWxpbmVzQ29sbGVjdGlv
bi5oYXNOYW1lZExpbmVzKCkpCi0gICAgICAgIHJldHVybiBzdGQ6Om1heChlbmQsIGdyaWRMYXN0
TGluZSArIDEpICsgbnVtYmVyT2ZMaW5lcyAtIDE7CisgICAgICAgIHJldHVybiBzdGQ6Om1heChl
bmQsIGxpbmVzQ29sbGVjdGlvbi5sYXN0TGluZSgpICsgMSkgKyBudW1iZXJPZkxpbmVzIC0gMTsK
IAogICAgIGZvciAoOyBudW1iZXJPZkxpbmVzOyArK2VuZCkgewotICAgICAgICBpZiAoZW5kID4g
Z3JpZExhc3RMaW5lIHx8IGxpbmVzQ29sbGVjdGlvbi5jb250YWlucyhlbmQpKQorICAgICAgICBp
ZiAoZW5kID4gbGluZXNDb2xsZWN0aW9uLmxhc3RMaW5lKCkgfHwgbGluZXNDb2xsZWN0aW9uLmNv
bnRhaW5zKGVuZCkpCiAgICAgICAgICAgICBudW1iZXJPZkxpbmVzLS07CiAgICAgfQogCkBAIC0y
MDUsMTMgKzQ0NCwxNCBAQCBzdGF0aWMgdW5zaWduZWQgbG9va0FoZWFkRm9yTmFtZWRHcmlkTGlu
ZShpbnQgc3RhcnQsIHVuc2lnbmVkIG51bWJlck9mTGluZXMsIHVucwogICAgIHJldHVybiBlbmQg
LSAxOwogfQogCi1zdGF0aWMgaW50IGxvb2tCYWNrRm9yTmFtZWRHcmlkTGluZShpbnQgZW5kLCB1
bnNpZ25lZCBudW1iZXJPZkxpbmVzLCBpbnQgZ3JpZExhc3RMaW5lLCBOYW1lZExpbmVDb2xsZWN0
aW9uJiBsaW5lc0NvbGxlY3Rpb24pCitzdGF0aWMgaW50IGxvb2tCYWNrRm9yTmFtZWRHcmlkTGlu
ZShpbnQgZW5kLCB1bnNpZ25lZCBudW1iZXJPZkxpbmVzLCBOYW1lZExpbmVDb2xsZWN0aW9uJiBs
aW5lc0NvbGxlY3Rpb24pCiB7CiAgICAgQVNTRVJUKG51bWJlck9mTGluZXMpOwogCisKICAgICAv
LyBPbmx5IGltcGxpY2l0IGxpbmVzIG9uIHRoZSBzZWFyY2ggZGlyZWN0aW9uIGFyZSBhc3N1bWVk
IHRvIGhhdmUgdGhlIGdpdmVuIG5hbWUsIHNvIHdlIGNhbiBzdGFydCB0byBsb29rIGZyb20gbGFz
dCBsaW5lLgogICAgIC8vIFNlZTogaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1ncmlkLyNn
cmlkLXBsYWNlbWVudC1zcGFuLWludAotICAgIGludCBzdGFydCA9IHN0ZDo6bWluKGVuZCwgZ3Jp
ZExhc3RMaW5lKTsKKyAgICBpbnQgc3RhcnQgPSBzdGQ6Om1pbjxpbnQ+KGVuZCwgbGluZXNDb2xs
ZWN0aW9uLmxhc3RMaW5lKCkpOwogCiAgICAgaWYgKCFsaW5lc0NvbGxlY3Rpb24uaGFzTmFtZWRM
aW5lcygpKQogICAgICAgICByZXR1cm4gc3RkOjptaW4oc3RhcnQsIC0xKSAtIG51bWJlck9mTGlu
ZXMgKyAxOwpAQCAtMjI0LDQ1ICs0NjQsNDMgQEAgc3RhdGljIGludCBsb29rQmFja0Zvck5hbWVk
R3JpZExpbmUoaW50IGVuZCwgdW5zaWduZWQgbnVtYmVyT2ZMaW5lcywgaW50IGdyaWRMYXMKICAg
ICByZXR1cm4gc3RhcnQgKyAxOwogfQogCi1zdGF0aWMgaW50IHJlc29sdmVOYW1lZEdyaWRMaW5l
UG9zaXRpb25Gcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSwg
Y29uc3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlLCB1bnNp
Z25lZCBhdXRvUmVwZWF0VHJhY2tzQ291bnQpCitzdGF0aWMgaW50IHJlc29sdmVOYW1lZEdyaWRM
aW5lUG9zaXRpb25Gcm9tU3R5bGUoY29uc3QgUmVuZGVyR3JpZCYgZ3JpZENvbnRhaW5lciwgY29u
c3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQogewogICAg
IEFTU0VSVCghcG9zaXRpb24ubmFtZWRHcmlkTGluZSgpLmlzTnVsbCgpKTsKIAotICAgIHVuc2ln
bmVkIGxhc3RMaW5lID0gZXhwbGljaXRHcmlkU2l6ZUZvclNpZGUoZ3JpZENvbnRhaW5lclN0eWxl
LCBzaWRlLCBhdXRvUmVwZWF0VHJhY2tzQ291bnQpOwotICAgIE5hbWVkTGluZUNvbGxlY3Rpb24g
bGluZXNDb2xsZWN0aW9uKGdyaWRDb250YWluZXJTdHlsZSwgcG9zaXRpb24ubmFtZWRHcmlkTGlu
ZSgpLCBkaXJlY3Rpb25Gcm9tU2lkZShzaWRlKSwgbGFzdExpbmUsIGF1dG9SZXBlYXRUcmFja3ND
b3VudCk7CisgICAgTmFtZWRMaW5lQ29sbGVjdGlvbiBsaW5lc0NvbGxlY3Rpb24oZ3JpZENvbnRh
aW5lciwgcG9zaXRpb24ubmFtZWRHcmlkTGluZSgpLCBzaWRlKTsKIAogICAgIGlmIChwb3NpdGlv
bi5pc1Bvc2l0aXZlKCkpCi0gICAgICAgIHJldHVybiBsb29rQWhlYWRGb3JOYW1lZEdyaWRMaW5l
KDAsIHN0ZDo6YWJzKHBvc2l0aW9uLmludGVnZXJQb3NpdGlvbigpKSwgbGFzdExpbmUsIGxpbmVz
Q29sbGVjdGlvbik7Ci0gICAgcmV0dXJuIGxvb2tCYWNrRm9yTmFtZWRHcmlkTGluZShsYXN0TGlu
ZSwgc3RkOjphYnMocG9zaXRpb24uaW50ZWdlclBvc2l0aW9uKCkpLCBsYXN0TGluZSwgbGluZXND
b2xsZWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIGxvb2tBaGVhZEZvck5hbWVkR3JpZExpbmUoMCwg
c3RkOjphYnMocG9zaXRpb24uaW50ZWdlclBvc2l0aW9uKCkpLCBsaW5lc0NvbGxlY3Rpb24pOwor
ICAgIHJldHVybiBsb29rQmFja0Zvck5hbWVkR3JpZExpbmUobGluZXNDb2xsZWN0aW9uLmxhc3RM
aW5lKCksIHN0ZDo6YWJzKHBvc2l0aW9uLmludGVnZXJQb3NpdGlvbigpKSwgbGluZXNDb2xsZWN0
aW9uKTsKIH0KIAotc3RhdGljIEdyaWRTcGFuIGRlZmluaXRlR3JpZFNwYW5XaXRoTmFtZWRMaW5l
U3BhbkFnYWluc3RPcHBvc2l0ZShpbnQgb3Bwb3NpdGVMaW5lLCBjb25zdCBHcmlkUG9zaXRpb24m
IHBvc2l0aW9uLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUsIHVuc2lnbmVkIGxhc3RMaW5lLCBOYW1l
ZExpbmVDb2xsZWN0aW9uJiBsaW5lc0NvbGxlY3Rpb24pCitzdGF0aWMgR3JpZFNwYW4gZGVmaW5p
dGVHcmlkU3BhbldpdGhOYW1lZExpbmVTcGFuQWdhaW5zdE9wcG9zaXRlKGludCBvcHBvc2l0ZUxp
bmUsIGNvbnN0IEdyaWRQb3NpdGlvbiYgcG9zaXRpb24sIEdyaWRQb3NpdGlvblNpZGUgc2lkZSwg
TmFtZWRMaW5lQ29sbGVjdGlvbiYgbGluZXNDb2xsZWN0aW9uKQogewogICAgIGludCBzdGFydCwg
ZW5kOwogICAgIGlmIChzaWRlID09IFJvd1N0YXJ0U2lkZSB8fCBzaWRlID09IENvbHVtblN0YXJ0
U2lkZSkgewotICAgICAgICBzdGFydCA9IGxvb2tCYWNrRm9yTmFtZWRHcmlkTGluZShvcHBvc2l0
ZUxpbmUgLSAxLCBwb3NpdGlvbi5zcGFuUG9zaXRpb24oKSwgbGFzdExpbmUsIGxpbmVzQ29sbGVj
dGlvbik7CisgICAgICAgIHN0YXJ0ID0gbG9va0JhY2tGb3JOYW1lZEdyaWRMaW5lKG9wcG9zaXRl
TGluZSAtIDEsIHBvc2l0aW9uLnNwYW5Qb3NpdGlvbigpLCBsaW5lc0NvbGxlY3Rpb24pOwogICAg
ICAgICBlbmQgPSBvcHBvc2l0ZUxpbmU7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc3RhcnQgPSBv
cHBvc2l0ZUxpbmU7Ci0gICAgICAgIGVuZCA9IGxvb2tBaGVhZEZvck5hbWVkR3JpZExpbmUob3Bw
b3NpdGVMaW5lICsgMSwgcG9zaXRpb24uc3BhblBvc2l0aW9uKCksIGxhc3RMaW5lLCBsaW5lc0Nv
bGxlY3Rpb24pOworICAgICAgICBlbmQgPSBsb29rQWhlYWRGb3JOYW1lZEdyaWRMaW5lKG9wcG9z
aXRlTGluZSArIDEsIHBvc2l0aW9uLnNwYW5Qb3NpdGlvbigpLCBsaW5lc0NvbGxlY3Rpb24pOwog
ICAgIH0KIAogICAgIHJldHVybiBHcmlkU3Bhbjo6dW50cmFuc2xhdGVkRGVmaW5pdGVHcmlkU3Bh
bihzdGFydCwgZW5kKTsKIH0KIAotc3RhdGljIEdyaWRTcGFuIHJlc29sdmVOYW1lZEdyaWRMaW5l
UG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENv
bnRhaW5lclN0eWxlLCBpbnQgb3Bwb3NpdGVMaW5lLCBjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0
aW9uLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUsIHVuc2lnbmVkIGF1dG9SZXBlYXRUcmFja3NDb3Vu
dCkKK3N0YXRpYyBHcmlkU3BhbiByZXNvbHZlTmFtZWRHcmlkTGluZVBvc2l0aW9uQWdhaW5zdE9w
cG9zaXRlUG9zaXRpb24oY29uc3QgUmVuZGVyR3JpZCYgZ3JpZENvbnRhaW5lciwgaW50IG9wcG9z
aXRlTGluZSwgY29uc3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBz
aWRlKQogewogICAgIEFTU0VSVChwb3NpdGlvbi5pc1NwYW4oKSk7CiAgICAgQVNTRVJUKCFwb3Np
dGlvbi5uYW1lZEdyaWRMaW5lKCkuaXNOdWxsKCkpOwogICAgIC8vIE5lZ2F0aXZlIHBvc2l0aW9u
cyBhcmUgbm90IGFsbG93ZWQgcGVyIHRoZSBzcGVjaWZpY2F0aW9uIGFuZCBzaG91bGQgaGF2ZSBi
ZWVuIGhhbmRsZWQgZHVyaW5nIHBhcnNpbmcuCiAgICAgQVNTRVJUKHBvc2l0aW9uLnNwYW5Qb3Np
dGlvbigpID4gMCk7CiAKLSAgICB1bnNpZ25lZCBsYXN0TGluZSA9IGV4cGxpY2l0R3JpZFNpemVG
b3JTaWRlKGdyaWRDb250YWluZXJTdHlsZSwgc2lkZSwgYXV0b1JlcGVhdFRyYWNrc0NvdW50KTsK
LSAgICBOYW1lZExpbmVDb2xsZWN0aW9uIGxpbmVzQ29sbGVjdGlvbihncmlkQ29udGFpbmVyU3R5
bGUsIHBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKSwgZGlyZWN0aW9uRnJvbVNpZGUoc2lkZSksIGxh
c3RMaW5lLCBhdXRvUmVwZWF0VHJhY2tzQ291bnQpOwotICAgIHJldHVybiBkZWZpbml0ZUdyaWRT
cGFuV2l0aE5hbWVkTGluZVNwYW5BZ2FpbnN0T3Bwb3NpdGUob3Bwb3NpdGVMaW5lLCBwb3NpdGlv
biwgc2lkZSwgbGFzdExpbmUsIGxpbmVzQ29sbGVjdGlvbik7CisgICAgTmFtZWRMaW5lQ29sbGVj
dGlvbiBsaW5lc0NvbGxlY3Rpb24oZ3JpZENvbnRhaW5lciwgcG9zaXRpb24ubmFtZWRHcmlkTGlu
ZSgpLCBzaWRlKTsKKyAgICByZXR1cm4gZGVmaW5pdGVHcmlkU3BhbldpdGhOYW1lZExpbmVTcGFu
QWdhaW5zdE9wcG9zaXRlKG9wcG9zaXRlTGluZSwgcG9zaXRpb24sIHNpZGUsIGxpbmVzQ29sbGVj
dGlvbik7CiB9CiAKLXN0YXRpYyBHcmlkU3BhbiByZXNvbHZlR3JpZFBvc2l0aW9uQWdhaW5zdE9w
cG9zaXRlUG9zaXRpb24oY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSwgaW50
IG9wcG9zaXRlTGluZSwgY29uc3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgR3JpZFBvc2l0aW9u
U2lkZSBzaWRlLCB1bnNpZ25lZCBhdXRvUmVwZWF0VHJhY2tzQ291bnQpCitzdGF0aWMgR3JpZFNw
YW4gcmVzb2x2ZUdyaWRQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGNvbnN0IFJlbmRl
ckdyaWQmIGdyaWRDb250YWluZXIsIGludCBvcHBvc2l0ZUxpbmUsIGNvbnN0IEdyaWRQb3NpdGlv
biYgcG9zaXRpb24sIEdyaWRQb3NpdGlvblNpZGUgc2lkZSkKIHsKICAgICBpZiAocG9zaXRpb24u
aXNBdXRvKCkpIHsKICAgICAgICAgaWYgKGlzU3RhcnRTaWRlKHNpZGUpKQpAQCAtMjc1LDcgKzUx
Myw3IEBAIHN0YXRpYyBHcmlkU3BhbiByZXNvbHZlR3JpZFBvc2l0aW9uQWdhaW5zdE9wcG9zaXRl
UG9zaXRpb24oY29uc3QgUmVuZGVyU3R5bGUmIGdyCiAKICAgICBpZiAoIXBvc2l0aW9uLm5hbWVk
R3JpZExpbmUoKS5pc051bGwoKSkgewogICAgICAgICAvLyBzcGFuIDIgJ2MnIC0+IHdlIG5lZWQg
dG8gZmluZCB0aGUgYXBwcm9wcmlhdGUgZ3JpZCBsaW5lIGJlZm9yZSAvIGFmdGVyIG91ciBvcHBv
c2l0ZSBwb3NpdGlvbi4KLSAgICAgICAgcmV0dXJuIHJlc29sdmVOYW1lZEdyaWRMaW5lUG9zaXRp
b25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihncmlkQ29udGFpbmVyU3R5bGUsIG9wcG9zaXRlTGlu
ZSwgcG9zaXRpb24sIHNpZGUsIGF1dG9SZXBlYXRUcmFja3NDb3VudCk7CisgICAgICAgIHJldHVy
biByZXNvbHZlTmFtZWRHcmlkTGluZVBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oZ3Jp
ZENvbnRhaW5lciwgb3Bwb3NpdGVMaW5lLCBwb3NpdGlvbiwgc2lkZSk7CiAgICAgfQogCiAgICAg
Ly8gJ3NwYW4gMScgaXMgY29udGFpbmVkIGluc2lkZSBhIHNpbmdsZSBncmlkIHRyYWNrIHJlZ2Fy
ZGxlc3Mgb2YgdGhlIGRpcmVjdGlvbi4KQEAgLTMxNSwyMSArNTUzLDIxIEBAIHVuc2lnbmVkIEdy
aWRQb3NpdGlvbnNSZXNvbHZlcjo6c3BhblNpemVGb3JBdXRvUGxhY2VkSXRlbShjb25zdCBSZW5k
ZXJCb3gmIGdyaWRJCiAgICAgcmV0dXJuIHBvc2l0aW9uLnNwYW5Qb3NpdGlvbigpOwogfQogCi1z
dGF0aWMgaW50IHJlc29sdmVHcmlkUG9zaXRpb25Gcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUm
IGdyaWRDb250YWluZXJTdHlsZSwgY29uc3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgR3JpZFBv
c2l0aW9uU2lkZSBzaWRlLCB1bnNpZ25lZCBhdXRvUmVwZWF0VHJhY2tzQ291bnQpCitzdGF0aWMg
aW50IHJlc29sdmVHcmlkUG9zaXRpb25Gcm9tU3R5bGUoY29uc3QgUmVuZGVyR3JpZCYgZ3JpZENv
bnRhaW5lciwgY29uc3QgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBz
aWRlKQogewogICAgIHN3aXRjaCAocG9zaXRpb24udHlwZSgpKSB7CiAgICAgY2FzZSBFeHBsaWNp
dFBvc2l0aW9uOiB7CiAgICAgICAgIEFTU0VSVChwb3NpdGlvbi5pbnRlZ2VyUG9zaXRpb24oKSk7
CiAKICAgICAgICAgaWYgKCFwb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCkuaXNOdWxsKCkpCi0gICAg
ICAgICAgICByZXR1cm4gcmVzb2x2ZU5hbWVkR3JpZExpbmVQb3NpdGlvbkZyb21TdHlsZShncmlk
Q29udGFpbmVyU3R5bGUsIHBvc2l0aW9uLCBzaWRlLCBhdXRvUmVwZWF0VHJhY2tzQ291bnQpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVOYW1lZEdyaWRMaW5lUG9zaXRpb25Gcm9tU3R5bGUo
Z3JpZENvbnRhaW5lciwgcG9zaXRpb24sIHNpZGUpOwogCiAgICAgICAgIC8vIEhhbmRsZSA8aW50
ZWdlcj4gZXhwbGljaXQgcG9zaXRpb24uCiAgICAgICAgIGlmIChwb3NpdGlvbi5pc1Bvc2l0aXZl
KCkpCiAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24uaW50ZWdlclBvc2l0aW9uKCkgLSAxOwog
CiAgICAgICAgIHVuc2lnbmVkIHJlc29sdmVkUG9zaXRpb24gPSBzdGQ6OmFicyhwb3NpdGlvbi5p
bnRlZ2VyUG9zaXRpb24oKSkgLSAxOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBlbmRPZlRyYWNr
ID0gZXhwbGljaXRHcmlkU2l6ZUZvclNpZGUoZ3JpZENvbnRhaW5lclN0eWxlLCBzaWRlLCBhdXRv
UmVwZWF0VHJhY2tzQ291bnQpOworICAgICAgICBjb25zdCB1bnNpZ25lZCBlbmRPZlRyYWNrID0g
ZXhwbGljaXRHcmlkU2l6ZUZvclNpZGUoZ3JpZENvbnRhaW5lciwgc2lkZSk7CiAKICAgICAgICAg
cmV0dXJuIGVuZE9mVHJhY2sgLSByZXNvbHZlZFBvc2l0aW9uOwogICAgIH0KQEAgLTM0MSwxOSAr
NTc5LDE4IEBAIHN0YXRpYyBpbnQgcmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShjb25zdCBS
ZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBjCiAgICAgICAgIFN0cmluZyBuYW1lZEdy
aWRMaW5lID0gcG9zaXRpb24ubmFtZWRHcmlkTGluZSgpOwogICAgICAgICBBU1NFUlQoIXBvc2l0
aW9uLm5hbWVkR3JpZExpbmUoKS5pc051bGwoKSk7CiAKLSAgICAgICAgdW5zaWduZWQgbGFzdExp
bmUgPSBleHBsaWNpdEdyaWRTaXplRm9yU2lkZShncmlkQ29udGFpbmVyU3R5bGUsIHNpZGUsIGF1
dG9SZXBlYXRUcmFja3NDb3VudCk7Ci0gICAgICAgIE5hbWVkTGluZUNvbGxlY3Rpb24gaW1wbGlj
aXRMaW5lcyhncmlkQ29udGFpbmVyU3R5bGUsIGltcGxpY2l0TmFtZWRHcmlkTGluZUZvclNpZGUo
bmFtZWRHcmlkTGluZSwgc2lkZSksIGRpcmVjdGlvbkZyb21TaWRlKHNpZGUpLCBsYXN0TGluZSwg
YXV0b1JlcGVhdFRyYWNrc0NvdW50KTsKKyAgICAgICAgTmFtZWRMaW5lQ29sbGVjdGlvbiBpbXBs
aWNpdExpbmVzKGdyaWRDb250YWluZXIsIG5hbWVkR3JpZExpbmUsIHNpZGUsIHRydWUpOwogICAg
ICAgICBpZiAoaW1wbGljaXRMaW5lcy5oYXNOYW1lZExpbmVzKCkpCiAgICAgICAgICAgICByZXR1
cm4gaW1wbGljaXRMaW5lcy5maXJzdFBvc2l0aW9uKCk7CiAKICAgICAgICAgLy8gT3RoZXJ3aXNl
LCBpZiB0aGVyZSBpcyBhIG5hbWVkIGxpbmUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUsIGNvbnRy
aWJ1dGVzIHRoZSBmaXJzdCBzdWNoIGxpbmUgdG8gdGhlIGdyaWQKICAgICAgICAgLy8gaXRlbSdz
IHBsYWNlbWVudC4KLSAgICAgICAgTmFtZWRMaW5lQ29sbGVjdGlvbiBleHBsaWNpdExpbmVzKGdy
aWRDb250YWluZXJTdHlsZSwgbmFtZWRHcmlkTGluZSwgZGlyZWN0aW9uRnJvbVNpZGUoc2lkZSks
IGxhc3RMaW5lLCBhdXRvUmVwZWF0VHJhY2tzQ291bnQpOworICAgICAgICBOYW1lZExpbmVDb2xs
ZWN0aW9uIGV4cGxpY2l0TGluZXMoZ3JpZENvbnRhaW5lciwgbmFtZWRHcmlkTGluZSwgc2lkZSk7
CiAgICAgICAgIGlmIChleHBsaWNpdExpbmVzLmhhc05hbWVkTGluZXMoKSkKICAgICAgICAgICAg
IHJldHVybiBleHBsaWNpdExpbmVzLmZpcnN0UG9zaXRpb24oKTsKIAogICAgICAgICAvLyBJZiBu
b25lIG9mIHRoZSBhYm92ZSB3b3JrcyBzcGVjcyBtYW5kYXRlIHRvIGFzc3VtZSB0aGF0IGFsbCB0
aGUgbGluZXMgaW4gdGhlIGltcGxpY2l0IGdyaWQgaGF2ZSB0aGlzIG5hbWUuCi0gICAgICAgIHJl
dHVybiBsYXN0TGluZSArIDE7CisgICAgICAgIHJldHVybiBleHBsaWNpdEdyaWRTaXplRm9yU2lk
ZShncmlkQ29udGFpbmVyLCBzaWRlKSArIDE7CiAgICAgfQogICAgIGNhc2UgQXV0b1Bvc2l0aW9u
OgogICAgIGNhc2UgU3BhblBvc2l0aW9uOgpAQCAtMzY1LDggKzYwMiwxMSBAQCBzdGF0aWMgaW50
IHJlc29sdmVHcmlkUG9zaXRpb25Gcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250
YWluZXJTdHlsZSwgYwogICAgIHJldHVybiAwOwogfQogCi1HcmlkU3BhbiBHcmlkUG9zaXRpb25z
UmVzb2x2ZXI6OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxl
JiBncmlkQ29udGFpbmVyU3R5bGUsIGNvbnN0IFJlbmRlckJveCYgZ3JpZEl0ZW0sIEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sIHVuc2lnbmVkIGF1dG9SZXBlYXRUcmFja3NDb3Vu
dCkKK0dyaWRTcGFuIEdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNG
cm9tU3R5bGUoY29uc3QgUmVuZGVyQm94JiBncmlkSXRlbSwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0
aW9uIGRpcmVjdGlvbikKIHsKKyAgICBhdXRvKiBncmlkQ29udGFpbmVyID0gZG93bmNhc3Q8UmVu
ZGVyR3JpZD4oZ3JpZEl0ZW0uY29udGFpbmluZ0Jsb2NrKCkpOworICAgIEFTU0VSVChncmlkQ29u
dGFpbmVyKTsKKwogICAgIEdyaWRQb3NpdGlvbiBpbml0aWFsUG9zaXRpb24sIGZpbmFsUG9zaXRp
b247CiAgICAgYWRqdXN0R3JpZFBvc2l0aW9uc0Zyb21TdHlsZShncmlkSXRlbSwgZGlyZWN0aW9u
LCBpbml0aWFsUG9zaXRpb24sIGZpbmFsUG9zaXRpb24pOwogCkBAIC0zNzksMTggKzYxOSwxOCBA
QCBHcmlkU3BhbiBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OnJlc29sdmVHcmlkUG9zaXRpb25zRnJv
bVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJgogCiAgICAgaWYgKGluaXRpYWxQb3NpdGlvbi5zaG91
bGRCZVJlc29sdmVkQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oKSkgewogICAgICAgICAvLyBJbmZl
ciB0aGUgcG9zaXRpb24gZnJvbSB0aGUgZmluYWwgcG9zaXRpb24gKCdhdXRvIC8gMScgb3IgJ3Nw
YW4gMiAvIDMnIGNhc2UpLgotICAgICAgICBhdXRvIGVuZExpbmUgPSByZXNvbHZlR3JpZFBvc2l0
aW9uRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgZmluYWxQb3NpdGlvbiwgZmluYWxTaWRl
LCBhdXRvUmVwZWF0VHJhY2tzQ291bnQpOwotICAgICAgICByZXR1cm4gcmVzb2x2ZUdyaWRQb3Np
dGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGdyaWRDb250YWluZXJTdHlsZSwgZW5kTGluZSwg
aW5pdGlhbFBvc2l0aW9uLCBpbml0aWFsU2lkZSwgYXV0b1JlcGVhdFRyYWNrc0NvdW50KTsKKyAg
ICAgICAgYXV0byBlbmRMaW5lID0gcmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZSgqZ3JpZENv
bnRhaW5lciwgZmluYWxQb3NpdGlvbiwgZmluYWxTaWRlKTsKKyAgICAgICAgcmV0dXJuIHJlc29s
dmVHcmlkUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbigqZ3JpZENvbnRhaW5lciwgZW5k
TGluZSwgaW5pdGlhbFBvc2l0aW9uLCBpbml0aWFsU2lkZSk7CiAgICAgfQogCiAgICAgaWYgKGZp
bmFsUG9zaXRpb24uc2hvdWxkQmVSZXNvbHZlZEFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKCkpIHsK
ICAgICAgICAgLy8gSW5mZXIgb3VyIHBvc2l0aW9uIGZyb20gdGhlIGluaXRpYWwgcG9zaXRpb24g
KCcxIC8gYXV0bycgb3IgJzMgLyBzcGFuIDInIGNhc2UpLgotICAgICAgICBhdXRvIHN0YXJ0TGlu
ZSA9IHJlc29sdmVHcmlkUG9zaXRpb25Gcm9tU3R5bGUoZ3JpZENvbnRhaW5lclN0eWxlLCBpbml0
aWFsUG9zaXRpb24sIGluaXRpYWxTaWRlLCBhdXRvUmVwZWF0VHJhY2tzQ291bnQpOwotICAgICAg
ICByZXR1cm4gcmVzb2x2ZUdyaWRQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGdyaWRD
b250YWluZXJTdHlsZSwgc3RhcnRMaW5lLCBmaW5hbFBvc2l0aW9uLCBmaW5hbFNpZGUsIGF1dG9S
ZXBlYXRUcmFja3NDb3VudCk7CisgICAgICAgIGF1dG8gc3RhcnRMaW5lID0gcmVzb2x2ZUdyaWRQ
b3NpdGlvbkZyb21TdHlsZSgqZ3JpZENvbnRhaW5lciwgaW5pdGlhbFBvc2l0aW9uLCBpbml0aWFs
U2lkZSk7CisgICAgICAgIHJldHVybiByZXNvbHZlR3JpZFBvc2l0aW9uQWdhaW5zdE9wcG9zaXRl
UG9zaXRpb24oKmdyaWRDb250YWluZXIsIHN0YXJ0TGluZSwgZmluYWxQb3NpdGlvbiwgZmluYWxT
aWRlKTsKICAgICB9CiAKLSAgICBpbnQgc3RhcnRMaW5lID0gcmVzb2x2ZUdyaWRQb3NpdGlvbkZy
b21TdHlsZShncmlkQ29udGFpbmVyU3R5bGUsIGluaXRpYWxQb3NpdGlvbiwgaW5pdGlhbFNpZGUs
IGF1dG9SZXBlYXRUcmFja3NDb3VudCk7Ci0gICAgaW50IGVuZExpbmUgPSByZXNvbHZlR3JpZFBv
c2l0aW9uRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgZmluYWxQb3NpdGlvbiwgZmluYWxT
aWRlLCBhdXRvUmVwZWF0VHJhY2tzQ291bnQpOworICAgIGludCBzdGFydExpbmUgPSByZXNvbHZl
R3JpZFBvc2l0aW9uRnJvbVN0eWxlKCpncmlkQ29udGFpbmVyLCBpbml0aWFsUG9zaXRpb24sIGlu
aXRpYWxTaWRlKTsKKyAgICBpbnQgZW5kTGluZSA9IHJlc29sdmVHcmlkUG9zaXRpb25Gcm9tU3R5
bGUoKmdyaWRDb250YWluZXIsIGZpbmFsUG9zaXRpb24sIGZpbmFsU2lkZSk7CiAKICAgICBpZiAo
c3RhcnRMaW5lID4gZW5kTGluZSkKICAgICAgICAgc3RkOjpzd2FwKHN0YXJ0TGluZSwgZW5kTGlu
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFBvc2l0
aW9uc1Jlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFBvc2l0
aW9uc1Jlc29sdmVyLmgKaW5kZXggNjIzYjYyYzZjMjQxLi5iYWYyMDRiMjcwZjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUG9zaXRpb25zUmVzb2x2ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFBvc2l0aW9uc1Jlc29s
dmVyLmgKQEAgLTM2LDYgKzM2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHcmlk
U3BhbjsKIGNsYXNzIFJlbmRlckJveDsKK2NsYXNzIFJlbmRlckdyaWQ7CiBjbGFzcyBSZW5kZXJT
dHlsZTsKIAogZW51bSBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gewpAQCAtNDMsMjggKzQ0LDQ1
IEBAIGVudW0gR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIHsKICAgICBGb3JSb3dzCiB9OwogCi1j
bGFzcyBOYW1lZExpbmVDb2xsZWN0aW9uIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShOYW1l
ZExpbmVDb2xsZWN0aW9uKTsKK2NsYXNzIE5hbWVkTGluZUNvbGxlY3Rpb25CYXNlIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShOYW1lZExpbmVDb2xsZWN0aW9uQmFzZSk7CiBwdWJsaWM6Ci0g
ICAgTmFtZWRMaW5lQ29sbGVjdGlvbihjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFN0cmluZyYg
bmFtZWRMaW5lLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24sIHVuc2lnbmVkIGxhc3RMaW5lLCB1
bnNpZ25lZCBhdXRvUmVwZWF0VHJhY2tzQ291bnQpOwotCi0gICAgYm9vbCBoYXNOYW1lZExpbmVz
KCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgZmlyc3RQb3NpdGlvbigpIGNvbnN0OworICAgIE5hbWVk
TGluZUNvbGxlY3Rpb25CYXNlKGNvbnN0IFJlbmRlckdyaWQmLCBjb25zdCBTdHJpbmcmIG5hbWUs
IEdyaWRQb3NpdGlvblNpZGUsIGJvb2wgbmFtZUlzQXJlYU5hbWUpOwogCiAgICAgYm9vbCBjb250
YWlucyh1bnNpZ25lZCBsaW5lKSBjb25zdDsKK3Byb3RlY3RlZDoKIAotcHJpdmF0ZToKLSAgICBi
b29sIGhhc0V4cGxpY2l0TmFtZWRMaW5lcygpIGNvbnN0OwotICAgIHVuc2lnbmVkIGZpcnN0RXhw
bGljaXRQb3NpdGlvbigpIGNvbnN0OworICAgIHZvaWQgZW5zdXJlTG9jYWxTdG9yYWdlKCk7CiAK
ICAgICBjb25zdCBWZWN0b3I8dW5zaWduZWQ+KiBtX25hbWVkTGluZXNJbmRleGVzIHsgbnVsbHB0
ciB9OwogICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4qIG1fYXV0b1JlcGVhdE5hbWVkTGluZXNJ
bmRleGVzIHsgbnVsbHB0ciB9OwogICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZD4qIG1faW1wbGlj
aXROYW1lZExpbmVzSW5kZXhlcyB7IG51bGxwdHIgfTsKIAorICAgIFZlY3Rvcjx1bnNpZ25lZD4g
bV9pbmhlcml0ZWROYW1lZExpbmVzSW5kZXhlczsKKwogICAgIHVuc2lnbmVkIG1faW5zZXJ0aW9u
UG9pbnQ7CiAgICAgdW5zaWduZWQgbV9sYXN0TGluZTsKICAgICB1bnNpZ25lZCBtX2F1dG9SZXBl
YXRUb3RhbFRyYWNrczsKKyAgICB1bnNpZ25lZCBtX2F1dG9SZXBlYXRMaW5lczsKICAgICB1bnNp
Z25lZCBtX2F1dG9SZXBlYXRUcmFja0xpc3RMZW5ndGg7CisgICAgYm9vbCBtX3N1YmdyaWQ7Cit9
OworCitjbGFzcyBOYW1lZExpbmVDb2xsZWN0aW9uIDogcHVibGljIE5hbWVkTGluZUNvbGxlY3Rp
b25CYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShOYW1lZExpbmVDb2xsZWN0aW9uKTsK
K3B1YmxpYzoKKyAgICBOYW1lZExpbmVDb2xsZWN0aW9uKGNvbnN0IFJlbmRlckdyaWQmLCBjb25z
dCBTdHJpbmcmIG5hbWUsIEdyaWRQb3NpdGlvblNpZGUsIGJvb2wgbmFtZUlzQXJlYU5hbWUgPSBm
YWxzZSk7CisKKyAgICBib29sIGhhc05hbWVkTGluZXMoKSBjb25zdDsKKyAgICBpbnQgZmlyc3RQ
b3NpdGlvbigpIGNvbnN0OworCisgICAgYm9vbCBjb250YWlucyh1bnNpZ25lZCBsaW5lKSBjb25z
dDsKKworICAgIHVuc2lnbmVkIGxhc3RMaW5lKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgYm9v
bCBoYXNFeHBsaWNpdE5hbWVkTGluZXMoKSBjb25zdDsKKyAgICBpbnQgZmlyc3RFeHBsaWNpdFBv
c2l0aW9uKCkgY29uc3Q7CiB9OwogCiAvLyBDbGFzcyB3aXRoIGFsbCB0aGUgY29kZSByZWxhdGVk
IHRvIGdyaWQgaXRlbXMgcG9zaXRpb25zIHJlc29sdXRpb24uCkBAIC03Myw5ICs5MSw5IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgR3JpZFBvc2l0aW9uU2lkZSBpbml0aWFsUG9zaXRpb25TaWRlKEdy
aWRUcmFja1NpemluZ0RpcmVjdGlvbik7CiAgICAgc3RhdGljIEdyaWRQb3NpdGlvblNpZGUgZmlu
YWxQb3NpdGlvblNpZGUoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKTsKICAgICBzdGF0aWMgdW5z
aWduZWQgc3BhblNpemVGb3JBdXRvUGxhY2VkSXRlbShjb25zdCBSZW5kZXJCb3gmLCBHcmlkVHJh
Y2tTaXppbmdEaXJlY3Rpb24pOwotICAgIHN0YXRpYyBHcmlkU3BhbiByZXNvbHZlR3JpZFBvc2l0
aW9uc0Zyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlckJveCYsIEdyaWRU
cmFja1NpemluZ0RpcmVjdGlvbiwgdW5zaWduZWQgYXV0b1JlcGVhdFRyYWNrc0NvdW50KTsKLSAg
ICBzdGF0aWMgdW5zaWduZWQgZXhwbGljaXRHcmlkQ29sdW1uQ291bnQoY29uc3QgUmVuZGVyU3R5
bGUmLCB1bnNpZ25lZCBhdXRvUmVwZWF0Q29sdW1uc0NvdW50KTsKLSAgICBzdGF0aWMgdW5zaWdu
ZWQgZXhwbGljaXRHcmlkUm93Q291bnQoY29uc3QgUmVuZGVyU3R5bGUmLCB1bnNpZ25lZCBhdXRv
UmVwZWF0Um93c0NvdW50KTsKKyAgICBzdGF0aWMgR3JpZFNwYW4gcmVzb2x2ZUdyaWRQb3NpdGlv
bnNGcm9tU3R5bGUoY29uc3QgUmVuZGVyQm94JiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKTsK
KyAgICBzdGF0aWMgdW5zaWduZWQgZXhwbGljaXRHcmlkQ29sdW1uQ291bnQoY29uc3QgUmVuZGVy
R3JpZCYpOworICAgIHN0YXRpYyB1bnNpZ25lZCBleHBsaWNpdEdyaWRSb3dDb3VudChjb25zdCBS
ZW5kZXJHcmlkJik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaCBiL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oCmluZGV4IDJhYTQyNGYyYmJhZC4uZTg4NGU1YmNm
YWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaApAQCAtMTkz
NCwxMCArMTkzNCw2IEBAIGlubGluZSB2b2lkIEJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVHcmlk
VGVtcGxhdGVDb2x1bW5zKEJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0CiAgICAgQnVpbGRlckNvbnZl
cnRlcjo6VHJhY2tzRGF0YSB0cmFja3NEYXRhOwogICAgIGlmICghQnVpbGRlckNvbnZlcnRlcjo6
Y3JlYXRlR3JpZFRyYWNrTGlzdCh2YWx1ZSwgdHJhY2tzRGF0YSwgYnVpbGRlclN0YXRlKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIGNvbnN0IE5hbWVkR3JpZEFyZWFNYXAmIG5hbWVkR3JpZEFyZWFz
ID0gYnVpbGRlclN0YXRlLnN0eWxlKCkubmFtZWRHcmlkQXJlYSgpOwotICAgIGlmICghbmFtZWRH
cmlkQXJlYXMuaXNFbXB0eSgpKQotICAgICAgICBCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVJbXBs
aWNpdE5hbWVkR3JpZExpbmVzRnJvbUdyaWRBcmVhKG5hbWVkR3JpZEFyZWFzLCB0cmFja3NEYXRh
Lm1fbmFtZWRHcmlkTGluZXMsIEZvckNvbHVtbnMpOwotCiAgICAgU0VUX1RSQUNLU19EQVRBKHRy
YWNrc0RhdGEsIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLCBDb2x1bW4pOwogfQogCkBAIC0xOTU3LDkg
KzE5NTMsNiBAQCBpbmxpbmUgdm9pZCBCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlR3JpZFRlbXBs
YXRlUm93cyhCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZQogICAgIEJ1aWxkZXJDb252ZXJ0ZXI6
OlRyYWNrc0RhdGEgdHJhY2tzRGF0YTsKICAgICBpZiAoIUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0
ZUdyaWRUcmFja0xpc3QodmFsdWUsIHRyYWNrc0RhdGEsIGJ1aWxkZXJTdGF0ZSkpCiAgICAgICAg
IHJldHVybjsKLSAgICBjb25zdCBOYW1lZEdyaWRBcmVhTWFwJiBuYW1lZEdyaWRBcmVhcyA9IGJ1
aWxkZXJTdGF0ZS5zdHlsZSgpLm5hbWVkR3JpZEFyZWEoKTsKLSAgICBpZiAoIW5hbWVkR3JpZEFy
ZWFzLmlzRW1wdHkoKSkKLSAgICAgICAgQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlSW1wbGljaXRO
YW1lZEdyaWRMaW5lc0Zyb21HcmlkQXJlYShuYW1lZEdyaWRBcmVhcywgdHJhY2tzRGF0YS5tX25h
bWVkR3JpZExpbmVzLCBGb3JSb3dzKTsKIAogICAgIFNFVF9UUkFDS1NfREFUQSh0cmFja3NEYXRh
LCBidWlsZGVyU3RhdGUuc3R5bGUoKSwgUm93KTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452056</attachid>
            <date>2022-02-15 10:54:45 -0800</date>
            <delta_ts>2022-02-15 12:54:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236337-20220216075444.patch</filename>
            <type>text/plain</type>
            <size>22476</size>
            <attacher name="Matt Woodrow">mattwoodrow</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5NzcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGRhYzg5MTQxMTZiOWQx
ZGE0OTVlZjIxZmYyZGQ3Y2NjYzMyMDJkYy4uYTFlMDJmNGE1ZDQzMTc4MDg0YjVhMmE3YTFjYzYy
YWMyYmQ2ZjZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDIyLTAyLTE1ICBNYXR0
IFdvb2Ryb3cgIDxtYXR0d29vZHJvd0BhcHBsZS5jb20+CisKKyAgICAgICAgSW5jbHVkZSBzdWJn
cmlkIGl0ZW1zIGluIGludHJpbnNpYyBzaXplIGNhbGN1bGF0aW9uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzYzMzcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICByZXNvbHZlSW50cmluc2ljVHJhY2tTaXpl
cyBhbmQgZmluZFVzZWRGbGV4RnJhY3Rpb24gbm93IHJlY3Vyc2UgaW50byBzdWJncmlkZGVkIGl0
ZW1zCisgICAgICAgIHRvIGl0ZXJhdGUgdGhlIGNoaWxkcmVuIHNhIGlmIHRoZXkgd2VyZSBkaXJl
Y3RseSBwYXJ0IG9mIHRoZSBvdXRlciBncmlkLgorICAgICAgICBOZXcgY29uc3RydWN0b3IgYWRk
ZWQgdG8gR3JpZEl0ZXJhdG9yIGZvciBjb25zdHJ1Y3RpbmcgYSBuZXcgaXRlcmF0b3IgZm9yIHRo
ZSBzdWJncmlkIGl0ZW1zLAorICAgICAgICB3aGljaCBhZGp1c3RzIHRoZSByb3cvY29sdW1uIGlu
ZGljZXMgaW50byB0aGUgbG9jYWwgY29vcmRpbmF0ZSBzcGFjZSBvZiB0aGUgc3ViZ3JpZC4KKyAg
ICAgICAgQWRkcyBhIG5ldyBtZXRob2QgdG8gcmVuZGVyR3JpZCAncGxhY2VJdGVtcycgc28gdGhh
dCB3ZSBjYW4gZW5zdXJlIHN1YmdyaWQgaXRlbXMgaGF2ZSBmaW5pc2hlZCBwbGFjZW1lbnQKKyAg
ICAgICAgd2hlbiBkb2luZyBzaXppbmcgZm9yIHRoZSBvdXRlciBncmlkLgorCisgICAgICAgIEV4
aXN0aW5nIHRlc3QgZXhwZWN0YXRpb25zIHVwZGF0ZWQuCisKKyAgICAgICAgKiByZW5kZXJpbmcv
R3JpZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmlkSXRlcmF0b3I6OkdyaWRJdGVyYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmlkSXRlcmF0b3I6Om5leHRHcmlkSXRlbSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmlkSXRlcmF0b3I6OmNyZWF0ZUZvclN1YmdyaWQpOgorICAgICAgICAqIHJl
bmRlcmluZy9HcmlkLmg6CisgICAgICAgIChXZWJDb3JlOjpHcmlkSXRlcmF0b3I6OmRpcmVjdGlv
biBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmVzdGltYXRl
ZEdyaWRBcmVhQnJlYWR0aEZvckNoaWxkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRU
cmFja1NpemluZ0FsZ29yaXRobTo6Z3JpZEFyZWFCcmVhZHRoRm9yQ2hpbGQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjppc0ludHJpbnNpY1NpemVk
R3JpZEFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3Jp
dGhtU3RyYXRlZ3k6Om1pblNpemVGb3JDaGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmlkVHJhY2tTaXppbmdBbGdvcml0aG06OnVwZGF0ZUJhc2VsaW5lQWxpZ25tZW50Q29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmJhc2VsaW5lT2Zm
c2V0Rm9yQ2hpbGQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZWZpbml0ZVNpemVTdHJh
dGVneTo6YWNjdW11bGF0ZUZsZXhGcmFjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bmRlZmluaXRlU2l6ZVN0cmF0ZWd5OjpmaW5kVXNlZEZsZXhGcmFjdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmFjY3VtdWxhdGVJbnRyaW5z
aWNTaXplc0ZvclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRUcmFja1NpemluZ0FsZ29y
aXRobTo6cmVzb2x2ZUludHJpbnNpY1RyYWNrU2l6ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9H
cmlkVHJhY2tTaXppbmdBbGdvcml0aG0uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3Jp
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFjZUl0ZW1zKToKKyAgICAg
ICAgKFdlYkNvcmU6Omluc2VydEludG9HcmlkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdy
aWQ6OnBsYWNlSXRlbXNPbkdyaWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3Jp
ZDo6cGxhY2VTcGVjaWZpZWRNYWpvckF4aXNJdGVtc09uR3JpZCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFjZUF1dG9NYWpvckF4aXNJdGVtT25HcmlkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmxheW91dEdyaWRJdGVtcyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJHcmlkOjppc1N1YmdyaWRJblBhcmVudERpcmVjdGlvbiBjb25zdCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckdyaWQuaDoKKwogMjAyMi0wMi0xNSAgTWF0dCBX
b29kcm93ICA8bWF0dHdvb2Ryb3dAYXBwbGUuY29tPgogCiAgICAgICAgIENvcHkgdHJhY2sgc2l6
ZXMgZnJvbSBwYXJlbnQgZ3JpZCBpbnRvIHN1YmdyaWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9HcmlkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkLmNw
cAppbmRleCAzN2NhOTNmMDNhNzIxYzIwYzM4MGZiYzdjMTFiODQxNjM5MDdhYjljLi4zYTkxMzU1
ZjdjODZmZTE3NWNiZTgyZWVmYTdmOTM3NmFhOTZiMDMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvR3JpZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dy
aWQuY3BwCkBAIC0yNjksNCArMjY5LDIwIEBAIHN0ZDo6dW5pcXVlX3B0cjxHcmlkQXJlYT4gR3Jp
ZEl0ZXJhdG9yOjpuZXh0RW1wdHlHcmlkQXJlYSh1bnNpZ25lZCBmaXhlZFRyYWNrU3BhCiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKK0dyaWRJdGVyYXRvciBHcmlkSXRlcmF0b3I6OmNyZWF0ZUZv
clN1YmdyaWQoY29uc3QgUmVuZGVyR3JpZCYgc3ViZ3JpZCwgY29uc3QgR3JpZEl0ZXJhdG9yJiBv
dXRlcikKK3sKKyAgICBBU1NFUlQoc3ViZ3JpZC5pc1N1YmdyaWRJblBhcmVudERpcmVjdGlvbihv
dXRlci5kaXJlY3Rpb24oKSkpOworICAgIEdyaWRTcGFuIGZpeGVkU3BhbiA9IGRvd25jYXN0PFJl
bmRlckdyaWQ+KHN1YmdyaWQucGFyZW50KCkpLT5ncmlkU3BhbkZvckNoaWxkKHN1YmdyaWQsIG91
dGVyLmRpcmVjdGlvbigpKTsKKworICAgIC8vIFRyYW5zbGF0ZSB0aGUgY3VycmVudCByb3cvY29s
dW1uIGluZGljZXMgaW50byB0aGUgY29vcmRpbmF0ZQorICAgIC8vIHNwYWNlIG9mIHRoZSBzdWJn
cmlkLgorICAgIHVuc2lnbmVkIGZpeGVkSW5kZXggPSAob3V0ZXIuZGlyZWN0aW9uKCkgPT0gRm9y
Q29sdW1ucykgPyBvdXRlci5tX2NvbHVtbkluZGV4IDogb3V0ZXIubV9yb3dJbmRleDsKKyAgICBm
aXhlZEluZGV4IC09IGZpeGVkU3Bhbi5zdGFydExpbmUoKTsKKworICAgIEdyaWRUcmFja1Npemlu
Z0RpcmVjdGlvbiBpbm5lckRpcmVjdGlvbiA9IEdyaWRMYXlvdXRGdW5jdGlvbnM6OmZsb3dBd2Fy
ZURpcmVjdGlvbkZvckNoaWxkKHN1YmdyaWQsICpzdWJncmlkLnBhcmVudCgpLCBvdXRlci5kaXJl
Y3Rpb24oKSk7CisgICAgQVNTRVJUKHN1YmdyaWQuaXNTdWJncmlkKGlubmVyRGlyZWN0aW9uKSk7
CisKKyAgICByZXR1cm4gR3JpZEl0ZXJhdG9yKHN1YmdyaWQuY3VycmVudEdyaWQoKSwgaW5uZXJE
aXJlY3Rpb24sIGZpeGVkSW5kZXgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0dyaWQuaAppbmRleCAxMWQ5ZTY4ZmI4MTk5ZmJjYTRkOGJhNWIxYmNiZjljODMw
OTljNTMyLi41ZDA5YTdlYmQxMWE4YWM0ZWViZTIxNzdjMjAwNmMzZGZiYjVjZDYyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9HcmlkLmgKQEAgLTExNiwxMCArMTE2LDE3IEBAIHB1YmxpYzoKICAgICAvLyBH
cmlkSXRlcmF0b3IobV9ncmlkLCBGb3JDb2x1bW5zLCAxKSB3aWxsIHdhbGsgb3ZlciB0aGUgcm93
cyBvZiB0aGUgMm5kIGNvbHVtbi4KICAgICBHcmlkSXRlcmF0b3IoY29uc3QgR3JpZCYsIEdyaWRU
cmFja1NpemluZ0RpcmVjdGlvbiwgdW5zaWduZWQgZml4ZWRUcmFja0luZGV4LCB1bnNpZ25lZCB2
YXJ5aW5nVHJhY2tJbmRleCA9IDApOwogCisgICAgc3RhdGljIEdyaWRJdGVyYXRvciBjcmVhdGVG
b3JTdWJncmlkKGNvbnN0IFJlbmRlckdyaWQmIHN1YmdyaWQsIGNvbnN0IEdyaWRJdGVyYXRvciYg
b3V0ZXIpOworCiAgICAgUmVuZGVyQm94KiBuZXh0R3JpZEl0ZW0oKTsKICAgICBib29sIGlzRW1w
dHlBcmVhRW5vdWdoKHVuc2lnbmVkIHJvd1NwYW4sIHVuc2lnbmVkIGNvbHVtblNwYW4pIGNvbnN0
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmlkQXJlYT4gbmV4dEVtcHR5R3JpZEFyZWEodW5zaWdu
ZWQgZml4ZWRUcmFja1NwYW4sIHVuc2lnbmVkIHZhcnlpbmdUcmFja1NwYW4pOwogCisgICAgR3Jp
ZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9kaXJlY3Rpb247CisgICAgfQorCiBwcml2YXRlOgogICAgIGNvbnN0IEdyaWRBc01h
dHJpeCYgbV9ncmlkOwogICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBtX2RpcmVjdGlvbjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tTaXppbmdBbGdv
cml0aG0uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29y
aXRobS5jcHAKaW5kZXggN2RlM2JiODJiNzg3OTYzMzM1MjlmNDBiYzc5ZDQ5ZTkzMzI3YmE3NC4u
ZjY1YzBmMDBiZmZkM2M5NTgzYzFjNDhhYzQ0YTA4ZTkzMDc2ZGZmYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5jcHAKQEAg
LTU4Nyw3ICs1ODcsNyBAQCB2b2lkIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6ZGlzdHJpYnV0
ZVNwYWNlVG9UcmFja3MoVmVjdG9yPEdyaWRUcmFjayo+JiB0cmFjawogCiBzdGQ6Om9wdGlvbmFs
PExheW91dFVuaXQ+IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6ZXN0aW1hdGVkR3JpZEFyZWFC
cmVhZHRoRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCwgR3JpZFRyYWNrU2l6aW5nRGly
ZWN0aW9uIGRpcmVjdGlvbikgY29uc3QKIHsKLSAgICBjb25zdCBHcmlkU3BhbiYgc3BhbiA9IG1f
Z3JpZC5ncmlkSXRlbVNwYW4oY2hpbGQsIGRpcmVjdGlvbik7CisgICAgY29uc3QgR3JpZFNwYW4m
IHNwYW4gPSBtX3JlbmRlckdyaWQtPmdyaWRTcGFuRm9yQ2hpbGQoY2hpbGQsIGRpcmVjdGlvbik7
CiAgICAgTGF5b3V0VW5pdCBncmlkQXJlYVNpemU7CiAgICAgYm9vbCBncmlkQXJlYUlzSW5kZWZp
bml0ZSA9IGZhbHNlOwogICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gYXZhaWxhYmxlU2l6
ZSA9IGF2YWlsYWJsZVNwYWNlKGRpcmVjdGlvbik7CkBAIC02MjgsNyArNjI4LDcgQEAgc3RkOjpv
cHRpb25hbDxMYXlvdXRVbml0PiBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmdyaWRBcmVhQnJl
YWR0aEZvckNoaWxkKGNvbnMKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8R3JpZFRyYWNrPiYg
YWxsVHJhY2tzID0gdHJhY2tzKGRpcmVjdGlvbik7Ci0gICAgY29uc3QgR3JpZFNwYW4mIHNwYW4g
PSBtX2dyaWQuZ3JpZEl0ZW1TcGFuKGNoaWxkLCBkaXJlY3Rpb24pOworICAgIGNvbnN0IEdyaWRT
cGFuJiBzcGFuID0gbV9yZW5kZXJHcmlkLT5ncmlkU3BhbkZvckNoaWxkKGNoaWxkLCBkaXJlY3Rp
b24pOwogICAgIExheW91dFVuaXQgZ3JpZEFyZWFCcmVhZHRoOwogICAgIGZvciAoYXV0byB0cmFj
a1Bvc2l0aW9uIDogc3BhbikKICAgICAgICAgZ3JpZEFyZWFCcmVhZHRoICs9IGFsbFRyYWNrc1t0
cmFja1Bvc2l0aW9uXS5iYXNlU2l6ZSgpOwpAQCAtNjUwLDcgKzY1MCw3IEBAIGJvb2wgR3JpZFRy
YWNrU2l6aW5nQWxnb3JpdGhtOjppc0ludHJpbnNpY1NpemVkR3JpZEFyZWEoY29uc3QgUmVuZGVy
Qm94JiBjaGlsZCwKIHsKICAgICBBU1NFUlQod2FzU2V0dXAoKSk7CiAgICAgR3JpZFRyYWNrU2l6
aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiA9IGdyaWREaXJlY3Rpb25Gb3JBeGlzKGF4aXMpOwotICAg
IGNvbnN0IEdyaWRTcGFuJiBzcGFuID0gbV9ncmlkLmdyaWRJdGVtU3BhbihjaGlsZCwgZGlyZWN0
aW9uKTsKKyAgICBjb25zdCBHcmlkU3BhbiYgc3BhbiA9IG1fcmVuZGVyR3JpZC0+Z3JpZFNwYW5G
b3JDaGlsZChjaGlsZCwgZGlyZWN0aW9uKTsKICAgICBmb3IgKGF1dG8gdHJhY2tQb3NpdGlvbiA6
IHNwYW4pIHsKICAgICAgICAgY29uc3QgYXV0byYgdHJhY2tTaXplID0gcmF3R3JpZFRyYWNrU2l6
ZShkaXJlY3Rpb24sIHRyYWNrUG9zaXRpb24pOwogICAgICAgICAvLyBXZSBjb25zaWRlciBmciB1
bml0cyBhcyAnYXV0bycgZm9yIHRoZSBtaW4gc2l6aW5nIGZ1bmN0aW9uLgpAQCAtODU5LDcgKzg1
OSw3IEBAIExheW91dFVuaXQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtU3RyYXRlZ3k6Om1pblNp
emVGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkKSBjCiAKICAgICBpZiAoY2hpbGRNaW5TaXplLmlz
QXV0bygpICYmIG92ZXJmbG93SXNWaXNpYmxlKSB7CiAgICAgICAgIGF1dG8gbWluU2l6ZSA9IG1p
bkNvbnRlbnRGb3JDaGlsZChjaGlsZCk7Ci0gICAgICAgIGNvbnN0IEdyaWRTcGFuJiBzcGFuID0g
bV9hbGdvcml0aG0uZ3JpZCgpLmdyaWRJdGVtU3BhbihjaGlsZCwgZGlyZWN0aW9uKCkpOworICAg
ICAgICBjb25zdCBHcmlkU3BhbiYgc3BhbiA9IG1fYWxnb3JpdGhtLm1fcmVuZGVyR3JpZC0+Z3Jp
ZFNwYW5Gb3JDaGlsZChjaGlsZCwgZGlyZWN0aW9uKCkpOwogCiAgICAgICAgIExheW91dFVuaXQg
bWF4QnJlYWR0aDsKICAgICAgICAgYXV0byBhbGxUcmFja3MgPSBtX2FsZ29yaXRobS50cmFja3Mo
ZGlyZWN0aW9uKCkpOwpAQCAtOTE4LDcgKzkxOCw3IEBAIHZvaWQgR3JpZFRyYWNrU2l6aW5nQWxn
b3JpdGhtOjp1cGRhdGVCYXNlbGluZUFsaWdubWVudENvbnRleHQoY29uc3QgUmVuZGVyQm94JiBj
CiAgICAgQVNTRVJUKCFjaGlsZC5uZWVkc0xheW91dCgpKTsKIAogICAgIEl0ZW1Qb3NpdGlvbiBh
bGlnbiA9IG1fcmVuZGVyR3JpZC0+c2VsZkFsaWdubWVudEZvckNoaWxkKGJhc2VsaW5lQXhpcywg
Y2hpbGQpLnBvc2l0aW9uKCk7Ci0gICAgY29uc3QgYXV0byYgc3BhbiA9IG1fZ3JpZC5ncmlkSXRl
bVNwYW4oY2hpbGQsIGdyaWREaXJlY3Rpb25Gb3JBeGlzKGJhc2VsaW5lQXhpcykpOworICAgIGNv
bnN0IGF1dG8mIHNwYW4gPSBtX3JlbmRlckdyaWQtPmdyaWRTcGFuRm9yQ2hpbGQoY2hpbGQsIGdy
aWREaXJlY3Rpb25Gb3JBeGlzKGJhc2VsaW5lQXhpcykpOwogICAgIG1fYmFzZWxpbmVBbGlnbm1l
bnQudXBkYXRlQmFzZWxpbmVBbGlnbm1lbnRDb250ZXh0KGFsaWduLCBzcGFuLnN0YXJ0TGluZSgp
LCBjaGlsZCwgYmFzZWxpbmVBeGlzKTsKIH0KIApAQCAtOTI4LDcgKzkyOCw3IEBAIExheW91dFVu
aXQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpiYXNlbGluZU9mZnNldEZvckNoaWxkKGNvbnN0
IFJlbmRlckJveCYgY2hpCiAgICAgICAgIHJldHVybiBMYXlvdXRVbml0KCk7CiAKICAgICBJdGVt
UG9zaXRpb24gYWxpZ24gPSBtX3JlbmRlckdyaWQtPnNlbGZBbGlnbm1lbnRGb3JDaGlsZChiYXNl
bGluZUF4aXMsIGNoaWxkKS5wb3NpdGlvbigpOwotICAgIGNvbnN0IGF1dG8mIHNwYW4gPSBtX2dy
aWQuZ3JpZEl0ZW1TcGFuKGNoaWxkLCBncmlkRGlyZWN0aW9uRm9yQXhpcyhiYXNlbGluZUF4aXMp
KTsKKyAgICBjb25zdCBhdXRvJiBzcGFuID0gbV9yZW5kZXJHcmlkLT5ncmlkU3BhbkZvckNoaWxk
KGNoaWxkLCBncmlkRGlyZWN0aW9uRm9yQXhpcyhiYXNlbGluZUF4aXMpKTsKICAgICByZXR1cm4g
bV9iYXNlbGluZUFsaWdubWVudC5iYXNlbGluZU9mZnNldEZvckNoaWxkKGFsaWduLCBzcGFuLnN0
YXJ0TGluZSgpLCBjaGlsZCwgYmFzZWxpbmVBeGlzKTsKIH0KIApAQCAtOTkwLDYgKzk5MCw3IEBA
IHByaXZhdGU6CiAgICAgYm9vbCByZWNvbXB1dGVVc2VkRmxleEZyYWN0aW9uSWZOZWVkZWQoZG91
YmxlJiBmbGV4RnJhY3Rpb24sIExheW91dFVuaXQmIHRvdGFsR3Jvd3RoKSBjb25zdCBvdmVycmlk
ZTsKICAgICBMYXlvdXRVbml0IGZyZWVTcGFjZUZvclN0cmV0Y2hBdXRvVHJhY2tzU3RlcCgpIGNv
bnN0IG92ZXJyaWRlOwogICAgIGJvb2wgaXNDb21wdXRpbmdTaXplQ29udGFpbm1lbnQoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBzaG91bGRBcHBseVNpemVDb250YWlubWVudCgqcmVuZGVyR3Jp
ZCgpKTsgfQorICAgIHZvaWQgYWNjdW11bGF0ZUZsZXhGcmFjdGlvbihkb3VibGUmIGZsZXhGcmFj
dGlvbiwgR3JpZEl0ZXJhdG9yJiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIG91dGVybW9zdERp
cmVjdGlvbiwgSGFzaFNldDxSZW5kZXJCb3gqPiYgaXRlbXNTZXQpIGNvbnN0OwogfTsKIAogdm9p
ZCBJbmRlZmluaXRlU2l6ZVN0cmF0ZWd5OjpsYXlvdXRHcmlkSXRlbUZvck1pblNpemVDb21wdXRh
dGlvbihSZW5kZXJCb3gmIGNoaWxkLCBib29sIG92ZXJyaWRlU2l6ZUhhc0NoYW5nZWQpIGNvbnN0
CkBAIC0xMDEzLDYgKzEwMTQsMjggQEAgc3RhdGljIGlubGluZSBkb3VibGUgbm9ybWFsaXplZEZs
ZXhGcmFjdGlvbihjb25zdCBHcmlkVHJhY2smIHRyYWNrKQogICAgIHJldHVybiB0cmFjay5iYXNl
U2l6ZSgpIC8gc3RkOjptYXg8ZG91YmxlPigxLCBmbGV4RmFjdG9yKTsKIH0KIAordm9pZCBJbmRl
ZmluaXRlU2l6ZVN0cmF0ZWd5OjphY2N1bXVsYXRlRmxleEZyYWN0aW9uKGRvdWJsZSYgZmxleEZy
YWN0aW9uLCBHcmlkSXRlcmF0b3ImIGl0ZXJhdG9yLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24g
b3V0ZXJtb3N0RGlyZWN0aW9uLCBIYXNoU2V0PFJlbmRlckJveCo+JiBpdGVtc1NldCkgY29uc3QK
K3sKKyAgICB3aGlsZSAoYXV0byogZ3JpZEl0ZW0gPSBpdGVyYXRvci5uZXh0R3JpZEl0ZW0oKSkg
eworICAgICAgICBpZiAoaXM8UmVuZGVyR3JpZD4oZ3JpZEl0ZW0pICYmIGRvd25jYXN0PFJlbmRl
ckdyaWQ+KGdyaWRJdGVtKS0+aXNTdWJncmlkSW5QYXJlbnREaXJlY3Rpb24oaXRlcmF0b3IuZGly
ZWN0aW9uKCkpKSB7CisgICAgICAgICAgICBSZW5kZXJHcmlkKiBpbm5lciA9IGRvd25jYXN0PFJl
bmRlckdyaWQ+KGdyaWRJdGVtKTsKKworICAgICAgICAgICAgR3JpZEl0ZXJhdG9yIGNoaWxkSXRl
cmF0b3IgPSBHcmlkSXRlcmF0b3I6OmNyZWF0ZUZvclN1YmdyaWQoKmlubmVyLCBpdGVyYXRvcik7
CisgICAgICAgICAgICBhY2N1bXVsYXRlRmxleEZyYWN0aW9uKGZsZXhGcmFjdGlvbiwgY2hpbGRJ
dGVyYXRvciwgb3V0ZXJtb3N0RGlyZWN0aW9uLCBpdGVtc1NldCk7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBEbyBub3QgaW5jbHVkZSBhbHJlYWR5IHByb2Nl
c3NlZCBpdGVtcy4KKyAgICAgICAgaWYgKCFpdGVtc1NldC5hZGQoZ3JpZEl0ZW0pLmlzTmV3RW50
cnkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBHcmlkU3BhbiBzcGFuID0gbV9h
bGdvcml0aG0ucmVuZGVyR3JpZCgpLT5ncmlkU3BhbkZvckNoaWxkKCpncmlkSXRlbSwgb3V0ZXJt
b3N0RGlyZWN0aW9uKTsKKworICAgICAgICAvLyBSZW1vdmluZyBndXR0ZXJzIGZyb20gdGhlIG1h
eC1jb250ZW50IGNvbnRyaWJ1dGlvbiBvZiB0aGUgaXRlbSwgc28gdGhleSBhcmUgbm90IHRha2Vu
IGludG8gYWNjb3VudCBpbiBGaW5kRnJVbml0U2l6ZSgpLgorICAgICAgICBMYXlvdXRVbml0IGxl
ZnRPdmVyU3BhY2UgPSBtYXhDb250ZW50Rm9yQ2hpbGQoKmdyaWRJdGVtKSAtIHJlbmRlckdyaWQo
KS0+Z3V0dGVyc1NpemUobV9hbGdvcml0aG0uZ3JpZCgpLCBvdXRlcm1vc3REaXJlY3Rpb24sIHNw
YW4uc3RhcnRMaW5lKCksIHNwYW4uaW50ZWdlclNwYW4oKSwgYXZhaWxhYmxlU3BhY2UoKSk7Cisg
ICAgICAgIGZsZXhGcmFjdGlvbiA9IHN0ZDo6bWF4KGZsZXhGcmFjdGlvbiwgZmluZEZyVW5pdFNp
emUoc3BhbiwgbGVmdE92ZXJTcGFjZSkpOworICAgIH0KK30KKwogZG91YmxlIEluZGVmaW5pdGVT
aXplU3RyYXRlZ3k6OmZpbmRVc2VkRmxleEZyYWN0aW9uKFZlY3Rvcjx1bnNpZ25lZD4mIGZsZXhp
YmxlU2l6ZWRUcmFja3NJbmRleCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwg
c3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBmcmVlU3BhY2UpIGNvbnN0CiB7CiAgICAgVU5VU0VE
X1BBUkFNKGZyZWVTcGFjZSk7CkBAIC0xMDMyLDE3ICsxMDU1LDcgQEAgZG91YmxlIEluZGVmaW5p
dGVTaXplU3RyYXRlZ3k6OmZpbmRVc2VkRmxleEZyYWN0aW9uKFZlY3Rvcjx1bnNpZ25lZD4mIGZs
ZXhpYmxlU2kKICAgICBIYXNoU2V0PFJlbmRlckJveCo+IGl0ZW1zU2V0OwogICAgIGZvciAoY29u
c3QgYXV0byYgdHJhY2tJbmRleCA6IGZsZXhpYmxlU2l6ZWRUcmFja3NJbmRleCkgewogICAgICAg
ICBHcmlkSXRlcmF0b3IgaXRlcmF0b3IoZ3JpZCwgZGlyZWN0aW9uLCB0cmFja0luZGV4KTsKLSAg
ICAgICAgd2hpbGUgKGF1dG8qIGdyaWRJdGVtID0gaXRlcmF0b3IubmV4dEdyaWRJdGVtKCkpIHsK
LSAgICAgICAgICAgIC8vIERvIG5vdCBpbmNsdWRlIGFscmVhZHkgcHJvY2Vzc2VkIGl0ZW1zLgot
ICAgICAgICAgICAgaWYgKCFpdGVtc1NldC5hZGQoZ3JpZEl0ZW0pLmlzTmV3RW50cnkpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGNvbnN0IEdyaWRTcGFuJiBzcGFu
ID0gZ3JpZC5ncmlkSXRlbVNwYW4oKmdyaWRJdGVtLCBkaXJlY3Rpb24pOwotCi0gICAgICAgICAg
ICAvLyBSZW1vdmluZyBndXR0ZXJzIGZyb20gdGhlIG1heC1jb250ZW50IGNvbnRyaWJ1dGlvbiBv
ZiB0aGUgaXRlbSwgc28gdGhleSBhcmUgbm90IHRha2VuIGludG8gYWNjb3VudCBpbiBGaW5kRnJV
bml0U2l6ZSgpLgotICAgICAgICAgICAgTGF5b3V0VW5pdCBsZWZ0T3ZlclNwYWNlID0gbWF4Q29u
dGVudEZvckNoaWxkKCpncmlkSXRlbSkgLSByZW5kZXJHcmlkKCktPmd1dHRlcnNTaXplKG1fYWxn
b3JpdGhtLmdyaWQoKSwgZGlyZWN0aW9uLCBzcGFuLnN0YXJ0TGluZSgpLCBzcGFuLmludGVnZXJT
cGFuKCksIGF2YWlsYWJsZVNwYWNlKCkpOwotICAgICAgICAgICAgZmxleEZyYWN0aW9uID0gc3Rk
OjptYXgoZmxleEZyYWN0aW9uLCBmaW5kRnJVbml0U2l6ZShzcGFuLCBsZWZ0T3ZlclNwYWNlKSk7
Ci0gICAgICAgIH0KKyAgICAgICAgYWNjdW11bGF0ZUZsZXhGcmFjdGlvbihmbGV4RnJhY3Rpb24s
IGl0ZXJhdG9yLCBkaXJlY3Rpb24sIGl0ZW1zU2V0KTsKICAgICB9CiAKICAgICByZXR1cm4gZmxl
eEZyYWN0aW9uOwpAQCAtMTIwOSw2ICsxMjIyLDMwIEBAIHZvaWQgR3JpZFRyYWNrU2l6aW5nQWxn
b3JpdGhtOjppbml0aWFsaXplVHJhY2tTaXplcygpCiAgICAgfQogfQogCit2b2lkIEdyaWRUcmFj
a1NpemluZ0FsZ29yaXRobTo6YWNjdW11bGF0ZUludHJpbnNpY1NpemVzRm9yVHJhY2soR3JpZFRy
YWNrJiB0cmFjaywgR3JpZEl0ZXJhdG9yJiBpdGVyYXRvciwgVmVjdG9yPEdyaWRJdGVtV2l0aFNw
YW4+JiBpdGVtc1NvcnRlZEJ5SW5jcmVhc2luZ1NwYW4sIFZlY3RvcjxHcmlkSXRlbVdpdGhTcGFu
PiYgaXRlbXNDcm9zc2luZ0ZsZXhpYmxlVHJhY2tzLCBIYXNoU2V0PFJlbmRlckJveCo+JiBpdGVt
c1NldCkKK3sKKyAgICB3aGlsZSAoYXV0byogZ3JpZEl0ZW0gPSBpdGVyYXRvci5uZXh0R3JpZEl0
ZW0oKSkgeworICAgICAgICBib29sIGlzTmV3RW50cnkgPSBpdGVtc1NldC5hZGQoZ3JpZEl0ZW0p
LmlzTmV3RW50cnk7CisgICAgICAgIGlmIChpczxSZW5kZXJHcmlkPihncmlkSXRlbSkgJiYgZG93
bmNhc3Q8UmVuZGVyR3JpZD4oZ3JpZEl0ZW0pLT5pc1N1YmdyaWRJblBhcmVudERpcmVjdGlvbihp
dGVyYXRvci5kaXJlY3Rpb24oKSkpIHsKKyAgICAgICAgICAgIFJlbmRlckdyaWQqIGlubmVyID0g
ZG93bmNhc3Q8UmVuZGVyR3JpZD4oZ3JpZEl0ZW0pOworCisgICAgICAgICAgICBHcmlkSXRlcmF0
b3IgY2hpbGRJdGVyYXRvciA9IEdyaWRJdGVyYXRvcjo6Y3JlYXRlRm9yU3ViZ3JpZCgqaW5uZXIs
IGl0ZXJhdG9yKTsKKyAgICAgICAgICAgIGFjY3VtdWxhdGVJbnRyaW5zaWNTaXplc0ZvclRyYWNr
KHRyYWNrLCBjaGlsZEl0ZXJhdG9yLCBpdGVtc1NvcnRlZEJ5SW5jcmVhc2luZ1NwYW4sIGl0ZW1z
Q3Jvc3NpbmdGbGV4aWJsZVRyYWNrcywgaXRlbXNTZXQpOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc05ld0VudHJ5KQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIEdyaWRTcGFuIHNwYW4gPSBtX3JlbmRlckdyaWQtPmdyaWRTcGFuRm9yQ2hp
bGQoKmdyaWRJdGVtLCBtX2RpcmVjdGlvbik7CisKKyAgICAgICAgaWYgKHNwYW5uaW5nSXRlbUNy
b3NzZXNGbGV4aWJsZVNpemVkVHJhY2tzKHNwYW4pKQorICAgICAgICAgICAgaXRlbXNDcm9zc2lu
Z0ZsZXhpYmxlVHJhY2tzLmFwcGVuZChHcmlkSXRlbVdpdGhTcGFuKCpncmlkSXRlbSwgc3Bhbikp
OworICAgICAgICBlbHNlIGlmIChzcGFuLmludGVnZXJTcGFuKCkgPT0gMSkKKyAgICAgICAgICAg
IHNpemVUcmFja1RvRml0Tm9uU3Bhbm5pbmdJdGVtKHNwYW4sICpncmlkSXRlbSwgdHJhY2spOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBpdGVtc1NvcnRlZEJ5SW5jcmVhc2luZ1NwYW4uYXBw
ZW5kKEdyaWRJdGVtV2l0aFNwYW4oKmdyaWRJdGVtLCBzcGFuKSk7CisgICAgfQorfQorCiB2b2lk
IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6cmVzb2x2ZUludHJpbnNpY1RyYWNrU2l6ZXMoKQog
ewogICAgIFZlY3RvcjxHcmlkVHJhY2s+JiBhbGxUcmFja3MgPSB0cmFja3MobV9kaXJlY3Rpb24p
OwpAQCAtMTIyOCwyMiArMTI2NSwxMyBAQCB2b2lkIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6
cmVzb2x2ZUludHJpbnNpY1RyYWNrU2l6ZXMoKQogICAgIFZlY3RvcjxHcmlkSXRlbVdpdGhTcGFu
PiBpdGVtc1NvcnRlZEJ5SW5jcmVhc2luZ1NwYW47CiAgICAgVmVjdG9yPEdyaWRJdGVtV2l0aFNw
YW4+IGl0ZW1zQ3Jvc3NpbmdGbGV4aWJsZVRyYWNrczsKICAgICBIYXNoU2V0PFJlbmRlckJveCo+
IGl0ZW1zU2V0OworCiAgICAgaWYgKG1fZ3JpZC5oYXNHcmlkSXRlbXMoKSkgewogICAgICAgICBm
b3IgKGF1dG8gdHJhY2tJbmRleCA6IG1fY29udGVudFNpemVkVHJhY2tzSW5kZXgpIHsKICAgICAg
ICAgICAgIEdyaWRJdGVyYXRvciBpdGVyYXRvcihtX2dyaWQsIG1fZGlyZWN0aW9uLCB0cmFja0lu
ZGV4KTsKICAgICAgICAgICAgIEdyaWRUcmFjayYgdHJhY2sgPSBhbGxUcmFja3NbdHJhY2tJbmRl
eF07CiAKLSAgICAgICAgICAgIHdoaWxlIChhdXRvKiBncmlkSXRlbSA9IGl0ZXJhdG9yLm5leHRH
cmlkSXRlbSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZW1zU2V0LmFkZChncmlkSXRlbSku
aXNOZXdFbnRyeSkgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmlkU3BhbiYgc3BhbiA9
IG1fZ3JpZC5ncmlkSXRlbVNwYW4oKmdyaWRJdGVtLCBtX2RpcmVjdGlvbik7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChzcGFubmluZ0l0ZW1Dcm9zc2VzRmxleGlibGVTaXplZFRyYWNrcyhzcGFu
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zQ3Jvc3NpbmdGbGV4aWJsZVRyYWNrcy5h
cHBlbmQoR3JpZEl0ZW1XaXRoU3BhbigqZ3JpZEl0ZW0sIHNwYW4pKTsKLSAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoc3Bhbi5pbnRlZ2VyU3BhbigpID09IDEpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBzaXplVHJhY2tUb0ZpdE5vblNwYW5uaW5nSXRlbShzcGFuLCAqZ3JpZEl0ZW0sIHRy
YWNrKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAg
aXRlbXNTb3J0ZWRCeUluY3JlYXNpbmdTcGFuLmFwcGVuZChHcmlkSXRlbVdpdGhTcGFuKCpncmlk
SXRlbSwgc3BhbikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGFjY3VtdWxhdGVJbnRyaW5zaWNTaXplc0ZvclRyYWNrKHRyYWNrLCBpdGVyYXRvciwgaXRl
bXNTb3J0ZWRCeUluY3JlYXNpbmdTcGFuLCBpdGVtc0Nyb3NzaW5nRmxleGlibGVUcmFja3MsIGl0
ZW1zU2V0KTsKICAgICAgICAgfQogICAgICAgICBzdGQ6OnNvcnQoaXRlbXNTb3J0ZWRCeUluY3Jl
YXNpbmdTcGFuLmJlZ2luKCksIGl0ZW1zU29ydGVkQnlJbmNyZWFzaW5nU3Bhbi5lbmQoKSk7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1Npemlu
Z0FsZ29yaXRobS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0Fs
Z29yaXRobS5oCmluZGV4IDU5NGQ1ZmFlOWFhY2FlZWNhNTBkOTAzOWRlMTY2ZTM0NDMzNWQxMTgu
LmMwN2U1Mzg2ODE0MmI0M2RkZDhhYTY4ZjEwMDZiN2Y2ZWI2ZGI1M2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tTaXppbmdBbGdvcml0aG0uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmgKQEAgLTU1
LDYgKzU1LDcgQEAgZW51bSBjbGFzcyBTcGFjZURpc3RyaWJ1dGlvbkxpbWl0IDogdWludDhfdCAg
ewogfTsKIAogY2xhc3MgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtU3RyYXRlZ3k7CitjbGFzcyBH
cmlkSXRlbVdpdGhTcGFuOwogCiBjbGFzcyBHcmlkVHJhY2sgewogcHVibGljOgpAQCAtMTIxLDYg
KzEyMiw4IEBAIHB1YmxpYzoKICAgICAvLyBhbmQgZW5jYXBzdWxhdGUgYW55IGFjY2VzcyBpbiB0
aGUgYWxnb3JpdGhtIGNsYXNzLgogICAgIEdyaWQmIG11dGFibGVHcmlkKCkgY29uc3QgeyByZXR1
cm4gbV9ncmlkOyB9CiAKKyAgICBjb25zdCBSZW5kZXJHcmlkKiByZW5kZXJHcmlkKCkgeyByZXR1
cm4gbV9yZW5kZXJHcmlkOyB9OworCiAgICAgTGF5b3V0VW5pdCBtaW5Db250ZW50U2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWluQ29udGVudFNpemU7IH07CiAgICAgTGF5b3V0VW5pdCBtYXhDb250
ZW50U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4Q29udGVudFNpemU7IH07CiAKQEAgLTE5Myw2
ICsxOTYsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgc3RyZXRjaEZsZXhpYmxlVHJhY2tzKHN0ZDo6
b3B0aW9uYWw8TGF5b3V0VW5pdD4gZnJlZVNwYWNlKTsKICAgICB2b2lkIHN0cmV0Y2hBdXRvVHJh
Y2tzKCk7CiAKKyAgICB2b2lkIGFjY3VtdWxhdGVJbnRyaW5zaWNTaXplc0ZvclRyYWNrKEdyaWRU
cmFjayYsIEdyaWRJdGVyYXRvciYsIFZlY3RvcjxHcmlkSXRlbVdpdGhTcGFuPiYgaXRlbXNTb3J0
ZWRCeUluY3JlYXNpbmdTcGFuLCBWZWN0b3I8R3JpZEl0ZW1XaXRoU3Bhbj4mIGl0ZW1zQ3Jvc3Np
bmdGbGV4aWJsZVRyYWNrcywgSGFzaFNldDxSZW5kZXJCb3gqPiYgaXRlbXNTZXQpOworCiAgICAg
Ym9vbCBjb3B5VXNlZFRyYWNrU2l6ZXNGb3JTdWJncmlkKCk7CiAKICAgICAvLyBTdGF0ZSBtYWNo
aW5lLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCmluZGV4IGFmZjAwN2E1
MGU5YTczYzJjOGVkZTYyYWVkYjdmZmNlMzNhYTg4M2UuLjU3NDYzYWRiOGUxMjg5MDdmMzZjOGRh
OTQxYTZlMzgyODgzNjRhN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJHcmlkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5j
cHAKQEAgLTY0Nyw2ICs2NDcsMjYgQEAgdW5zaWduZWQgUmVuZGVyR3JpZDo6Y2xhbXBBdXRvUmVw
ZWF0VHJhY2tzKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sIHUKICAgICByZXR1
cm4gc3RkOjptaW4oYXV0b1JlcGVhdFRyYWNrcywgbWF4VHJhY2tzIC0gaW5zZXJ0aW9uUG9pbnQp
OwogfQogCit2b2lkIFJlbmRlckdyaWQ6OnBsYWNlSXRlbXMoKQoreworICAgIHVwZGF0ZUxvZ2lj
YWxXaWR0aCgpOworCisgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVTcGFjZUZvckNvbHVtbnMgPSBh
dmFpbGFibGVMb2dpY2FsV2lkdGgoKTsKKyAgICBwbGFjZUl0ZW1zT25HcmlkKG1fdHJhY2tTaXpp
bmdBbGdvcml0aG0sIGF2YWlsYWJsZVNwYWNlRm9yQ29sdW1ucyk7Cit9CisKK3N0YXRpYyBHcmlk
QXJlYSBpbnNlcnRJbnRvR3JpZChHcmlkJiBncmlkLCBSZW5kZXJCb3gmIGNoaWxkLCBjb25zdCBH
cmlkQXJlYSYgYXJlYSkKK3sKKyAgICBHcmlkQXJlYSBjbGFtcGVkID0gZ3JpZC5pbnNlcnQoY2hp
bGQsIGFyZWEpOworICAgIGlmICghaXM8UmVuZGVyR3JpZD4oY2hpbGQpKQorICAgICAgICByZXR1
cm4gY2xhbXBlZDsKKworICAgIFJlbmRlckdyaWQmIHJlbmRlckdyaWQgPSBkb3duY2FzdDxSZW5k
ZXJHcmlkPihjaGlsZCk7CisgICAgaWYgKHJlbmRlckdyaWQuaXNTdWJncmlkUm93cygpIHx8IHJl
bmRlckdyaWQuaXNTdWJncmlkQ29sdW1ucygpKQorICAgICAgICByZW5kZXJHcmlkLnBsYWNlSXRl
bXMoKTsKKyAgICByZXR1cm4gY2xhbXBlZDsKK30KKwogLy8gRklYTUU6IFdlIHNob3VsZG4ndCBo
YXZlIHRvIHBhc3MgdGhlIGF2YWlsYWJsZSBsb2dpY2FsIHdpZHRoIGFzIGFyZ3VtZW50LiBUaGUg
cHJvYmxlbSBpcyB0aGF0CiAvLyBhdmFpbGFibGVMb2dpY2FsV2lkdGgoKSBkb2VzIGFsd2F5cyBy
ZXR1cm4gYSB2YWx1ZSBldmVuIGlmIHdlIGNhbm5vdCByZXNvbHZlIGl0IGxpa2Ugd2hlbgogLy8g
Y29tcHV0aW5nIHRoZSBpbnRyaW5zaWMgc2l6ZSAocHJlZmVycmVkIHdpZHRocykuIFRoYXQncyB3
aHkgd2UgcGFzcyB0aGUgcmVzcG9uc2liaWxpdHkgdG8gdGhlCkBAIC02OTYsNyArNzE2LDcgQEAg
dm9pZCBSZW5kZXJHcmlkOjpwbGFjZUl0ZW1zT25HcmlkKEdyaWRUcmFja1NpemluZ0FsZ29yaXRo
bSYgYWxnb3JpdGhtLCBzdGQ6Om9wdGkKICAgICAgICAgICAgICAgICBzcGVjaWZpZWRNYWpvckF4
aXNBdXRvR3JpZEl0ZW1zLmFwcGVuZChjaGlsZCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQotICAgICAgICBncmlkLmluc2VydCgqY2hpbGQsIHsgYXJlYS5yb3dzLCBhcmVhLmNv
bHVtbnMgfSk7CisgICAgICAgIGluc2VydEludG9HcmlkKGdyaWQsICpjaGlsZCwgeyBhcmVhLnJv
d3MsIGFyZWEuY29sdW1ucyB9KTsKICAgICB9CiAKICNpZiBBU1NFUlRfRU5BQkxFRApAQCAtODI3
LDcgKzg0Nyw3IEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VTcGVjaWZpZWRNYWpvckF4aXNJdGVt
c09uR3JpZChHcmlkJiBncmlkLCBjb25zdCBWZWN0b3I8UmVuCiAgICAgICAgIGlmICghZW1wdHlH
cmlkQXJlYSkKICAgICAgICAgICAgIGVtcHR5R3JpZEFyZWEgPSBjcmVhdGVFbXB0eUdyaWRBcmVh
QXRTcGVjaWZpZWRQb3NpdGlvbnNPdXRzaWRlR3JpZChncmlkLCAqYXV0b0dyaWRJdGVtLCBhdXRv
UGxhY2VtZW50TWFqb3JBeGlzRGlyZWN0aW9uKCksIG1ham9yQXhpc1Bvc2l0aW9ucyk7CiAKLSAg
ICAgICAgKmVtcHR5R3JpZEFyZWEgPSBncmlkLmluc2VydCgqYXV0b0dyaWRJdGVtLCAqZW1wdHlH
cmlkQXJlYSk7CisgICAgICAgICplbXB0eUdyaWRBcmVhID0gaW5zZXJ0SW50b0dyaWQoZ3JpZCwg
KmF1dG9HcmlkSXRlbSwgKmVtcHR5R3JpZEFyZWEpOwogCiAgICAgICAgIGlmICghaXNHcmlkQXV0
b0Zsb3dEZW5zZSkKICAgICAgICAgICAgIG1pbm9yQXhpc0N1cnNvcnMuc2V0KG1ham9yQXhpc0lu
aXRpYWxQb3NpdGlvbiwgaXNGb3JDb2x1bW5zID8gZW1wdHlHcmlkQXJlYS0+cm93cy5zdGFydExp
bmUoKSA6IGVtcHR5R3JpZEFyZWEtPmNvbHVtbnMuc3RhcnRMaW5lKCkpOwpAQCAtODk5LDcgKzkx
OSw3IEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VBdXRvTWFqb3JBeGlzSXRlbU9uR3JpZChHcmlk
JiBncmlkLCBSZW5kZXJCb3gmIGdyaWRJdGVtLCBBCiAgICAgICAgICAgICBlbXB0eUdyaWRBcmVh
ID0gY3JlYXRlRW1wdHlHcmlkQXJlYUF0U3BlY2lmaWVkUG9zaXRpb25zT3V0c2lkZUdyaWQoZ3Jp
ZCwgZ3JpZEl0ZW0sIGF1dG9QbGFjZW1lbnRNaW5vckF4aXNEaXJlY3Rpb24oKSwgR3JpZFNwYW46
OnRyYW5zbGF0ZWREZWZpbml0ZUdyaWRTcGFuKDAsIG1pbm9yQXhpc1NwYW5TaXplKSk7CiAgICAg
fQogCi0gICAgZ3JpZC5pbnNlcnQoZ3JpZEl0ZW0sICplbXB0eUdyaWRBcmVhKTsKKyAgICAqZW1w
dHlHcmlkQXJlYSA9IGluc2VydEludG9HcmlkKGdyaWQsIGdyaWRJdGVtLCAqZW1wdHlHcmlkQXJl
YSk7CiAgICAgYXV0b1BsYWNlbWVudEN1cnNvci5maXJzdCA9IGVtcHR5R3JpZEFyZWEtPnJvd3Mu
c3RhcnRMaW5lKCk7CiAgICAgYXV0b1BsYWNlbWVudEN1cnNvci5zZWNvbmQgPSBlbXB0eUdyaWRB
cmVhLT5jb2x1bW5zLnN0YXJ0TGluZSgpOwogfQpAQCAtMTAxMiwxMyArMTAzMiwxNSBAQCB2b2lk
IFJlbmRlckdyaWQ6OmxheW91dEdyaWRJdGVtcygpCiAgICAgcG9wdWxhdGVHcmlkUG9zaXRpb25z
Rm9yRGlyZWN0aW9uKEZvclJvd3MpOwogCiAgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gZmly
c3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkgewot
ICAgICAgICAKICAgICAgICAgaWYgKG1fZ3JpZC5vcmRlckl0ZXJhdG9yKCkuc2hvdWxkU2tpcENo
aWxkKCpjaGlsZCkpIHsKICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlv
bmVkKCkpCiAgICAgICAgICAgICAgICAgcHJlcGFyZUNoaWxkRm9yUG9zaXRpb25lZExheW91dCgq
Y2hpbGQpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAo
aXM8UmVuZGVyR3JpZD4oY2hpbGQpICYmIChkb3duY2FzdDxSZW5kZXJHcmlkPihjaGlsZCktPmlz
U3ViZ3JpZENvbHVtbnMoKSB8fCBkb3duY2FzdDxSZW5kZXJHcmlkPihjaGlsZCktPmlzU3ViZ3Jp
ZFJvd3MoKSkpCisgICAgICAgICAgICBjaGlsZC0+c2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlz
KTsKKwogICAgICAgICAvLyBTZXR0aW5nIHRoZSBkZWZpbml0ZSBncmlkIGFyZWEncyBzaXplcy4g
SXQgbWF5IGltcGx5IHRoYXQgdGhlCiAgICAgICAgIC8vIGl0ZW0gbXVzdCBwZXJmb3JtIGEgbGF5
b3V0IGlmIGl0cyBhcmVhIGRpZmZlcnMgZnJvbSB0aGUgb25lCiAgICAgICAgIC8vIHVzZWQgZHVy
aW5nIHRoZSB0cmFjayBzaXppbmcgYWxnb3JpdGhtLgpAQCAtMTY0NCw2ICsxNjY2LDEyIEBAIGJv
b2wgUmVuZGVyR3JpZDo6aXNTdWJncmlkQ29sdW1ucygpIGNvbnN0CiAgICAgcmV0dXJuIGlzU3Vi
Z3JpZChGb3JDb2x1bW5zKTsKIH0KIAorYm9vbCBSZW5kZXJHcmlkOjppc1N1YmdyaWRJblBhcmVu
dERpcmVjdGlvbihHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gcGFyZW50RGlyZWN0aW9uKSBjb25z
dAoreworICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24gPSBHcmlkTGF5b3V0
RnVuY3Rpb25zOjpmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZCgqdGhpcywgKnBhcmVudCgpLCBw
YXJlbnREaXJlY3Rpb24pOworICAgIHJldHVybiBpc1N1YmdyaWQoZGlyZWN0aW9uKTsKK30KKwog
TGF5b3V0VW5pdCBSZW5kZXJHcmlkOjpncmlkQXJlYUJyZWFkdGhGb3JPdXRPZkZsb3dDaGlsZChj
b25zdCBSZW5kZXJCb3gmIGNoaWxkLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9u
KQogewogICAgIEFTU0VSVChjaGlsZC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuaAppbmRleCBiZDBhNmRmN2YxNDc2NzQ5ZWYzOGFiNWU3
MTNmOTE5NjdiZDYxNDMwLi43NDc3ZTI3Y2IxM2RlMGI2MzYzNmMxM2E3ZDNhZjc1MzVlYTcwYzU2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmgKQEAgLTg5LDYgKzg5LDcgQEAg
cHVibGljOgogICAgIGJvb2wgaXNTdWJncmlkUm93cygpIGNvbnN0OwogICAgIGJvb2wgaXNTdWJn
cmlkQ29sdW1ucygpIGNvbnN0OwogICAgIGJvb2wgaXNTdWJncmlkKEdyaWRUcmFja1NpemluZ0Rp
cmVjdGlvbikgY29uc3Q7CisgICAgYm9vbCBpc1N1YmdyaWRJblBhcmVudERpcmVjdGlvbihHcmlk
VHJhY2tTaXppbmdEaXJlY3Rpb24gcGFyZW50RGlyZWN0aW9uKSBjb25zdDsKIAogICAgIGNvbnN0
IEdyaWQmIGN1cnJlbnRHcmlkKCkgY29uc3QKICAgICB7CkBAIC0xMDAsNiArMTAxLDggQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gbnVtVHJhY2tzKGRpcmVjdGlvbiwgbV9ncmlkKTsKICAgICB9
CiAKKyAgICB2b2lkIHBsYWNlSXRlbXMoKTsKKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZWI1ODU0OTMzYzQzMGJiNmY0M2Rk
MDk4NWQ3M2U2NDFmYzk2YzczOC4uMzlhYmM3YWQ5ZmU1MDdjMmVhZjJlN2U5ODdmNTdiYTdhZDk0
NWUyZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIyLTAyLTE1ICBNYXR0IFdvb2Ryb3cgIDxt
YXR0d29vZHJvd0BhcHBsZS5jb20+CisKKyAgICAgICAgSW5jbHVkZSBzdWJncmlkIGl0ZW1zIGlu
IGludHJpbnNpYyBzaXplIGNhbGN1bGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzYzMzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBFeGlzdGluZyB0ZXN0IGV4cGVjdGF0aW9ucyB1cGRhdGVkLgor
CisgICAgICAgICogVGVzdEV4cGVjdGF0aW9uczoKKwogMjAyMi0wMi0xNSAgTWF0dCBXb29kcm93
ICA8bWF0dHdvb2Ryb3dAYXBwbGUuY29tPgogCiAgICAgICAgIENvcHkgdHJhY2sgc2l6ZXMgZnJv
bSBwYXJlbnQgZ3JpZCBpbnRvIHN1YmdyaWQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL1Rlc3RF
eHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDQ2MzNhYTdi
OTZhYTY4ZGExZWU0NGFjZDljYzkwMTVjODI2YjUwMTguLjBjZjBhMGI3MzU0N2YwNGMyN2Y3MzU3
NDk5ZTliNDIyMjY0YjllYTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlv
bnMKKysrIGIvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwpAQCAtMTQyNCw3ICsxNDI0LDYg
QEAgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9w
YXJlbnQtcmVwZWF0LWF1dG8tZml0LTAwMS4KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQvcGFyZW50LXJlcGVhdC1hdXRvLWZpdC0wMDIuaHRtbCBb
IEltYWdlT25seUZhaWx1cmUgXQogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3Mv
Y3NzLWdyaWQvc3ViZ3JpZC9yZXBlYXQtYXV0by1maWxsLTAwMy5odG1sIFsgSW1hZ2VPbmx5RmFp
bHVyZSBdCiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZ3JpZC9zdWJn
cmlkL3JlcGVhdC1hdXRvLWZpbGwtMDA0Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KLWltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQvc3ViZ3JpZC1p
dGVtLWJsb2NrLXNpemUtMDAxLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQvc3ViZ3JpZC1tYnAtb3Zl
cmZsb3ctMDAxLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQvc3ViZ3JpZC1tYnAtb3ZlcmZsb3ctMDAy
Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQvc3ViZ3JpZC1tYnAtb3ZlcmZsb3ctMDAzLmh0bWwgWyBJ
bWFnZU9ubHlGYWlsdXJlIF0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452075</attachid>
            <date>2022-02-15 12:53:58 -0800</date>
            <delta_ts>2022-02-17 11:48:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236337-20220216095356.patch</filename>
            <type>text/plain</type>
            <size>22521</size>
            <attacher name="Matt Woodrow">mattwoodrow</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5NzcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGRhYzg5MTQxMTZiOWQx
ZGE0OTVlZjIxZmYyZGQ3Y2NjYzMyMDJkYy4uMDNlMGFjMDg4NDBkMzIxOWMyNjgxMmEzNDg2MDRj
ZDQ5Yjk4MjNjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDIyLTAyLTE1ICBNYXR0
IFdvb2Ryb3cgIDxtYXR0d29vZHJvd0BhcHBsZS5jb20+CisKKyAgICAgICAgSW5jbHVkZSBzdWIg
Z3JpZCBpdGVtcyBpbiB0aGUgdHJhY2sgc2l6aW5nIGFsZ29yaXRobSBvZiB0aGUgb3V0ZXIgZ3Jp
ZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2MzM3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgcmVzb2x2
ZUludHJpbnNpY1RyYWNrU2l6ZXMgYW5kIGZpbmRVc2VkRmxleEZyYWN0aW9uIG5vdyByZWN1cnNl
IGludG8gc3ViZ3JpZGRlZCBpdGVtcworICAgICAgICB0byBpdGVyYXRlIHRoZSBjaGlsZHJlbiBz
YSBpZiB0aGV5IHdlcmUgZGlyZWN0bHkgcGFydCBvZiB0aGUgb3V0ZXIgZ3JpZC4KKyAgICAgICAg
TmV3IGNvbnN0cnVjdG9yIGFkZGVkIHRvIEdyaWRJdGVyYXRvciBmb3IgY29uc3RydWN0aW5nIGEg
bmV3IGl0ZXJhdG9yIGZvciB0aGUgc3ViZ3JpZCBpdGVtcywKKyAgICAgICAgd2hpY2ggYWRqdXN0
cyB0aGUgcm93L2NvbHVtbiBpbmRpY2VzIGludG8gdGhlIGxvY2FsIGNvb3JkaW5hdGUgc3BhY2Ug
b2YgdGhlIHN1YmdyaWQuCisgICAgICAgIEFkZHMgYSBuZXcgbWV0aG9kIHRvIHJlbmRlckdyaWQg
J3BsYWNlSXRlbXMnIHNvIHRoYXQgd2UgY2FuIGVuc3VyZSBzdWJncmlkIGl0ZW1zIGhhdmUgZmlu
aXNoZWQgcGxhY2VtZW50CisgICAgICAgIHdoZW4gZG9pbmcgc2l6aW5nIGZvciB0aGUgb3V0ZXIg
Z3JpZC4KKworICAgICAgICBFeGlzdGluZyB0ZXN0IGV4cGVjdGF0aW9ucyB1cGRhdGVkLgorCisg
ICAgICAgICogcmVuZGVyaW5nL0dyaWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JpZEl0ZXJh
dG9yOjpjcmVhdGVGb3JTdWJncmlkKToKKyAgICAgICAgKiByZW5kZXJpbmcvR3JpZC5oOgorICAg
ICAgICAoV2ViQ29yZTo6R3JpZEl0ZXJhdG9yOjpkaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9HcmlkVHJhY2tTaXppbmdBbGdvcml0aG0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjplc3RpbWF0ZWRHcmlkQXJlYUJyZWFkdGhGb3JD
aGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06
OmdyaWRBcmVhQnJlYWR0aEZvckNoaWxkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRU
cmFja1NpemluZ0FsZ29yaXRobTo6aXNJbnRyaW5zaWNTaXplZEdyaWRBcmVhIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyaWRUcmFja1NpemluZ0FsZ29yaXRobVN0cmF0ZWd5OjptaW5TaXpl
Rm9yQ2hpbGQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3Jp
dGhtOjp1cGRhdGVCYXNlbGluZUFsaWdubWVudENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpiYXNlbGluZU9mZnNldEZvckNoaWxkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkluZGVmaW5pdGVTaXplU3RyYXRlZ3k6OmFjY3VtdWxhdGVGbGV4
RnJhY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZWZpbml0ZVNpemVTdHJhdGVn
eTo6ZmluZFVzZWRGbGV4RnJhY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFRy
YWNrU2l6aW5nQWxnb3JpdGhtOjphY2N1bXVsYXRlSW50cmluc2ljU2l6ZXNGb3JUcmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OnJlc29sdmVJbnRyaW5z
aWNUcmFja1NpemVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3Jp
dGhtLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyR3JpZDo6cGxhY2VJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjppbnNlcnRJ
bnRvR3JpZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFjZUl0ZW1zT25Hcmlk
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnBsYWNlU3BlY2lmaWVkTWFq
b3JBeGlzSXRlbXNPbkdyaWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6
cGxhY2VBdXRvTWFqb3JBeGlzSXRlbU9uR3JpZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJHcmlkOjpsYXlvdXRHcmlkSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3Jp
ZDo6aXNTdWJncmlkSW5QYXJlbnREaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJHcmlkLmg6CisKIDIwMjItMDItMTUgIE1hdHQgV29vZHJvdyAgPG1hdHR3b29kcm93
QGFwcGxlLmNvbT4KIAogICAgICAgICBDb3B5IHRyYWNrIHNpemVzIGZyb20gcGFyZW50IGdyaWQg
aW50byBzdWJncmlkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZC5jcHAKaW5kZXggMzdjYTkzZjAzYTcy
MWMyMGMzODBmYmM3YzExYjg0MTYzOTA3YWI5Yy4uODRmYzEzNjY3OTMyNjIzOWVlMWQ5NDE1ZTZh
MGQwZWVkNzBmZTQ4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkLmNwcApAQCAtMjY5LDQgKzI2
OSwyMCBAQCBzdGQ6OnVuaXF1ZV9wdHI8R3JpZEFyZWE+IEdyaWRJdGVyYXRvcjo6bmV4dEVtcHR5
R3JpZEFyZWEodW5zaWduZWQgZml4ZWRUcmFja1NwYQogICAgIHJldHVybiBudWxscHRyOwogfQog
CitHcmlkSXRlcmF0b3IgR3JpZEl0ZXJhdG9yOjpjcmVhdGVGb3JTdWJncmlkKGNvbnN0IFJlbmRl
ckdyaWQmIHN1YmdyaWQsIGNvbnN0IEdyaWRJdGVyYXRvciYgb3V0ZXIpCit7CisgICAgQVNTRVJU
KHN1YmdyaWQuaXNTdWJncmlkSW5QYXJlbnREaXJlY3Rpb24ob3V0ZXIuZGlyZWN0aW9uKCkpKTsK
KyAgICBHcmlkU3BhbiBmaXhlZFNwYW4gPSBkb3duY2FzdDxSZW5kZXJHcmlkPihzdWJncmlkLnBh
cmVudCgpKS0+Z3JpZFNwYW5Gb3JDaGlsZChzdWJncmlkLCBvdXRlci5kaXJlY3Rpb24oKSk7CisK
KyAgICAvLyBUcmFuc2xhdGUgdGhlIGN1cnJlbnQgcm93L2NvbHVtbiBpbmRpY2VzIGludG8gdGhl
IGNvb3JkaW5hdGUKKyAgICAvLyBzcGFjZSBvZiB0aGUgc3ViZ3JpZC4KKyAgICB1bnNpZ25lZCBm
aXhlZEluZGV4ID0gKG91dGVyLmRpcmVjdGlvbigpID09IEZvckNvbHVtbnMpID8gb3V0ZXIubV9j
b2x1bW5JbmRleCA6IG91dGVyLm1fcm93SW5kZXg7CisgICAgZml4ZWRJbmRleCAtPSBmaXhlZFNw
YW4uc3RhcnRMaW5lKCk7CisKKyAgICBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gaW5uZXJEaXJl
Y3Rpb24gPSBHcmlkTGF5b3V0RnVuY3Rpb25zOjpmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZCgq
ZG93bmNhc3Q8UmVuZGVyR3JpZD4oc3ViZ3JpZC5wYXJlbnQoKSksIHN1YmdyaWQsIG91dGVyLmRp
cmVjdGlvbigpKTsKKyAgICBBU1NFUlQoc3ViZ3JpZC5pc1N1YmdyaWQoaW5uZXJEaXJlY3Rpb24p
KTsKKworICAgIHJldHVybiBHcmlkSXRlcmF0b3Ioc3ViZ3JpZC5jdXJyZW50R3JpZCgpLCBpbm5l
ckRpcmVjdGlvbiwgZml4ZWRJbmRleCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvR3JpZC5oCmluZGV4IDExZDllNjhmYjgxOTlmYmNhNGQ4YmE1YjFiY2JmOWM4
MzA5OWM1MzIuLjVkMDlhN2ViZDExYThhYzRlZWJlMjE3N2MyMDA2YzNkZmJiNWNkNjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0dyaWQuaApAQCAtMTE2LDEwICsxMTYsMTcgQEAgcHVibGljOgogICAgIC8v
IEdyaWRJdGVyYXRvcihtX2dyaWQsIEZvckNvbHVtbnMsIDEpIHdpbGwgd2FsayBvdmVyIHRoZSBy
b3dzIG9mIHRoZSAybmQgY29sdW1uLgogICAgIEdyaWRJdGVyYXRvcihjb25zdCBHcmlkJiwgR3Jp
ZFRyYWNrU2l6aW5nRGlyZWN0aW9uLCB1bnNpZ25lZCBmaXhlZFRyYWNrSW5kZXgsIHVuc2lnbmVk
IHZhcnlpbmdUcmFja0luZGV4ID0gMCk7CiAKKyAgICBzdGF0aWMgR3JpZEl0ZXJhdG9yIGNyZWF0
ZUZvclN1YmdyaWQoY29uc3QgUmVuZGVyR3JpZCYgc3ViZ3JpZCwgY29uc3QgR3JpZEl0ZXJhdG9y
JiBvdXRlcik7CisKICAgICBSZW5kZXJCb3gqIG5leHRHcmlkSXRlbSgpOwogICAgIGJvb2wgaXNF
bXB0eUFyZWFFbm91Z2godW5zaWduZWQgcm93U3BhbiwgdW5zaWduZWQgY29sdW1uU3BhbikgY29u
c3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEdyaWRBcmVhPiBuZXh0RW1wdHlHcmlkQXJlYSh1bnNp
Z25lZCBmaXhlZFRyYWNrU3BhbiwgdW5zaWduZWQgdmFyeWluZ1RyYWNrU3Bhbik7CiAKKyAgICBH
cmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2RpcmVjdGlvbjsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgY29uc3QgR3JpZEFz
TWF0cml4JiBtX2dyaWQ7CiAgICAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIG1fZGlyZWN0aW9u
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0Fs
Z29yaXRobS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxn
b3JpdGhtLmNwcAppbmRleCAxMzA1ZmM4ZjY0MzA4MTQ5MTRhZjg2MGY1ZjRlNjZkMjk3YzY0NWZl
Li5kZTA0NzFlMDFmZjBkNzM2MGU5MmUwOTIxMDRkZGEwOGU3ZTU4NWIzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmNwcApA
QCAtNTg3LDcgKzU4Nyw3IEBAIHZvaWQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpkaXN0cmli
dXRlU3BhY2VUb1RyYWNrcyhWZWN0b3I8R3JpZFRyYWNrKj4mIHRyYWNrCiAKIHN0ZDo6b3B0aW9u
YWw8TGF5b3V0VW5pdD4gR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjplc3RpbWF0ZWRHcmlkQXJl
YUJyZWFkdGhGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBHcmlkVHJhY2tTaXppbmdE
aXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdAogewotICAgIGNvbnN0IEdyaWRTcGFuJiBzcGFuID0g
bV9ncmlkLmdyaWRJdGVtU3BhbihjaGlsZCwgZGlyZWN0aW9uKTsKKyAgICBjb25zdCBHcmlkU3Bh
biYgc3BhbiA9IG1fcmVuZGVyR3JpZC0+Z3JpZFNwYW5Gb3JDaGlsZChjaGlsZCwgZGlyZWN0aW9u
KTsKICAgICBMYXlvdXRVbml0IGdyaWRBcmVhU2l6ZTsKICAgICBib29sIGdyaWRBcmVhSXNJbmRl
ZmluaXRlID0gZmFsc2U7CiAgICAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBhdmFpbGFibGVT
aXplID0gYXZhaWxhYmxlU3BhY2UoZGlyZWN0aW9uKTsKQEAgLTYyOCw3ICs2MjgsNyBAQCBzdGQ6
Om9wdGlvbmFsPExheW91dFVuaXQ+IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6Z3JpZEFyZWFC
cmVhZHRoRm9yQ2hpbGQoY29ucwogICAgIH0KIAogICAgIGNvbnN0IFZlY3RvcjxHcmlkVHJhY2s+
JiBhbGxUcmFja3MgPSB0cmFja3MoZGlyZWN0aW9uKTsKLSAgICBjb25zdCBHcmlkU3BhbiYgc3Bh
biA9IG1fZ3JpZC5ncmlkSXRlbVNwYW4oY2hpbGQsIGRpcmVjdGlvbik7CisgICAgY29uc3QgR3Jp
ZFNwYW4mIHNwYW4gPSBtX3JlbmRlckdyaWQtPmdyaWRTcGFuRm9yQ2hpbGQoY2hpbGQsIGRpcmVj
dGlvbik7CiAgICAgTGF5b3V0VW5pdCBncmlkQXJlYUJyZWFkdGg7CiAgICAgZm9yIChhdXRvIHRy
YWNrUG9zaXRpb24gOiBzcGFuKQogICAgICAgICBncmlkQXJlYUJyZWFkdGggKz0gYWxsVHJhY2tz
W3RyYWNrUG9zaXRpb25dLmJhc2VTaXplKCk7CkBAIC02NTAsNyArNjUwLDcgQEAgYm9vbCBHcmlk
VHJhY2tTaXppbmdBbGdvcml0aG06OmlzSW50cmluc2ljU2l6ZWRHcmlkQXJlYShjb25zdCBSZW5k
ZXJCb3gmIGNoaWxkLAogewogICAgIEFTU0VSVCh3YXNTZXR1cCgpKTsKICAgICBHcmlkVHJhY2tT
aXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uID0gZ3JpZERpcmVjdGlvbkZvckF4aXMoYXhpcyk7Ci0g
ICAgY29uc3QgR3JpZFNwYW4mIHNwYW4gPSBtX2dyaWQuZ3JpZEl0ZW1TcGFuKGNoaWxkLCBkaXJl
Y3Rpb24pOworICAgIGNvbnN0IEdyaWRTcGFuJiBzcGFuID0gbV9yZW5kZXJHcmlkLT5ncmlkU3Bh
bkZvckNoaWxkKGNoaWxkLCBkaXJlY3Rpb24pOwogICAgIGZvciAoYXV0byB0cmFja1Bvc2l0aW9u
IDogc3BhbikgewogICAgICAgICBjb25zdCBhdXRvJiB0cmFja1NpemUgPSByYXdHcmlkVHJhY2tT
aXplKGRpcmVjdGlvbiwgdHJhY2tQb3NpdGlvbik7CiAgICAgICAgIC8vIFdlIGNvbnNpZGVyIGZy
IHVuaXRzIGFzICdhdXRvJyBmb3IgdGhlIG1pbiBzaXppbmcgZnVuY3Rpb24uCkBAIC04NTksNyAr
ODU5LDcgQEAgTGF5b3V0VW5pdCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG1TdHJhdGVneTo6bWlu
U2l6ZUZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQpIGMKIAogICAgIGlmIChjaGlsZE1pblNpemUu
aXNBdXRvKCkgJiYgb3ZlcmZsb3dJc1Zpc2libGUpIHsKICAgICAgICAgYXV0byBtaW5TaXplID0g
bWluQ29udGVudEZvckNoaWxkKGNoaWxkKTsKLSAgICAgICAgY29uc3QgR3JpZFNwYW4mIHNwYW4g
PSBtX2FsZ29yaXRobS5ncmlkKCkuZ3JpZEl0ZW1TcGFuKGNoaWxkLCBkaXJlY3Rpb24oKSk7Cisg
ICAgICAgIGNvbnN0IEdyaWRTcGFuJiBzcGFuID0gbV9hbGdvcml0aG0ubV9yZW5kZXJHcmlkLT5n
cmlkU3BhbkZvckNoaWxkKGNoaWxkLCBkaXJlY3Rpb24oKSk7CiAKICAgICAgICAgTGF5b3V0VW5p
dCBtYXhCcmVhZHRoOwogICAgICAgICBhdXRvIGFsbFRyYWNrcyA9IG1fYWxnb3JpdGhtLnRyYWNr
cyhkaXJlY3Rpb24oKSk7CkBAIC05MTgsNyArOTE4LDcgQEAgdm9pZCBHcmlkVHJhY2tTaXppbmdB
bGdvcml0aG06OnVwZGF0ZUJhc2VsaW5lQWxpZ25tZW50Q29udGV4dChjb25zdCBSZW5kZXJCb3gm
IGMKICAgICBBU1NFUlQoIWNoaWxkLm5lZWRzTGF5b3V0KCkpOwogCiAgICAgSXRlbVBvc2l0aW9u
IGFsaWduID0gbV9yZW5kZXJHcmlkLT5zZWxmQWxpZ25tZW50Rm9yQ2hpbGQoYmFzZWxpbmVBeGlz
LCBjaGlsZCkucG9zaXRpb24oKTsKLSAgICBjb25zdCBhdXRvJiBzcGFuID0gbV9ncmlkLmdyaWRJ
dGVtU3BhbihjaGlsZCwgZ3JpZERpcmVjdGlvbkZvckF4aXMoYmFzZWxpbmVBeGlzKSk7CisgICAg
Y29uc3QgYXV0byYgc3BhbiA9IG1fcmVuZGVyR3JpZC0+Z3JpZFNwYW5Gb3JDaGlsZChjaGlsZCwg
Z3JpZERpcmVjdGlvbkZvckF4aXMoYmFzZWxpbmVBeGlzKSk7CiAgICAgbV9iYXNlbGluZUFsaWdu
bWVudC51cGRhdGVCYXNlbGluZUFsaWdubWVudENvbnRleHQoYWxpZ24sIHNwYW4uc3RhcnRMaW5l
KCksIGNoaWxkLCBiYXNlbGluZUF4aXMpOwogfQogCkBAIC05MjgsNyArOTI4LDcgQEAgTGF5b3V0
VW5pdCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmJhc2VsaW5lT2Zmc2V0Rm9yQ2hpbGQoY29u
c3QgUmVuZGVyQm94JiBjaGkKICAgICAgICAgcmV0dXJuIExheW91dFVuaXQoKTsKIAogICAgIEl0
ZW1Qb3NpdGlvbiBhbGlnbiA9IG1fcmVuZGVyR3JpZC0+c2VsZkFsaWdubWVudEZvckNoaWxkKGJh
c2VsaW5lQXhpcywgY2hpbGQpLnBvc2l0aW9uKCk7Ci0gICAgY29uc3QgYXV0byYgc3BhbiA9IG1f
Z3JpZC5ncmlkSXRlbVNwYW4oY2hpbGQsIGdyaWREaXJlY3Rpb25Gb3JBeGlzKGJhc2VsaW5lQXhp
cykpOworICAgIGNvbnN0IGF1dG8mIHNwYW4gPSBtX3JlbmRlckdyaWQtPmdyaWRTcGFuRm9yQ2hp
bGQoY2hpbGQsIGdyaWREaXJlY3Rpb25Gb3JBeGlzKGJhc2VsaW5lQXhpcykpOwogICAgIHJldHVy
biBtX2Jhc2VsaW5lQWxpZ25tZW50LmJhc2VsaW5lT2Zmc2V0Rm9yQ2hpbGQoYWxpZ24sIHNwYW4u
c3RhcnRMaW5lKCksIGNoaWxkLCBiYXNlbGluZUF4aXMpOwogfQogCkBAIC05OTAsNiArOTkwLDcg
QEAgcHJpdmF0ZToKICAgICBib29sIHJlY29tcHV0ZVVzZWRGbGV4RnJhY3Rpb25JZk5lZWRlZChk
b3VibGUmIGZsZXhGcmFjdGlvbiwgTGF5b3V0VW5pdCYgdG90YWxHcm93dGgpIGNvbnN0IG92ZXJy
aWRlOwogICAgIExheW91dFVuaXQgZnJlZVNwYWNlRm9yU3RyZXRjaEF1dG9UcmFja3NTdGVwKCkg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBpc0NvbXB1dGluZ1NpemVDb250YWlubWVudCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHNob3VsZEFwcGx5U2l6ZUNvbnRhaW5tZW50KCpyZW5kZXJH
cmlkKCkpOyB9CisgICAgdm9pZCBhY2N1bXVsYXRlRmxleEZyYWN0aW9uKGRvdWJsZSYgZmxleEZy
YWN0aW9uLCBHcmlkSXRlcmF0b3ImLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gb3V0ZXJtb3N0
RGlyZWN0aW9uLCBIYXNoU2V0PFJlbmRlckJveCo+JiBpdGVtc1NldCkgY29uc3Q7CiB9OwogCiB2
b2lkIEluZGVmaW5pdGVTaXplU3RyYXRlZ3k6OmxheW91dEdyaWRJdGVtRm9yTWluU2l6ZUNvbXB1
dGF0aW9uKFJlbmRlckJveCYgY2hpbGQsIGJvb2wgb3ZlcnJpZGVTaXplSGFzQ2hhbmdlZCkgY29u
c3QKQEAgLTEwMTMsNiArMTAxNCwyOCBAQCBzdGF0aWMgaW5saW5lIGRvdWJsZSBub3JtYWxpemVk
RmxleEZyYWN0aW9uKGNvbnN0IEdyaWRUcmFjayYgdHJhY2spCiAgICAgcmV0dXJuIHRyYWNrLmJh
c2VTaXplKCkgLyBzdGQ6Om1heDxkb3VibGU+KDEsIGZsZXhGYWN0b3IpOwogfQogCit2b2lkIElu
ZGVmaW5pdGVTaXplU3RyYXRlZ3k6OmFjY3VtdWxhdGVGbGV4RnJhY3Rpb24oZG91YmxlJiBmbGV4
RnJhY3Rpb24sIEdyaWRJdGVyYXRvciYgaXRlcmF0b3IsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlv
biBvdXRlcm1vc3REaXJlY3Rpb24sIEhhc2hTZXQ8UmVuZGVyQm94Kj4mIGl0ZW1zU2V0KSBjb25z
dAoreworICAgIHdoaWxlIChhdXRvKiBncmlkSXRlbSA9IGl0ZXJhdG9yLm5leHRHcmlkSXRlbSgp
KSB7CisgICAgICAgIGlmIChpczxSZW5kZXJHcmlkPihncmlkSXRlbSkgJiYgZG93bmNhc3Q8UmVu
ZGVyR3JpZD4oZ3JpZEl0ZW0pLT5pc1N1YmdyaWRJblBhcmVudERpcmVjdGlvbihpdGVyYXRvci5k
aXJlY3Rpb24oKSkpIHsKKyAgICAgICAgICAgIFJlbmRlckdyaWQqIGlubmVyID0gZG93bmNhc3Q8
UmVuZGVyR3JpZD4oZ3JpZEl0ZW0pOworCisgICAgICAgICAgICBHcmlkSXRlcmF0b3IgY2hpbGRJ
dGVyYXRvciA9IEdyaWRJdGVyYXRvcjo6Y3JlYXRlRm9yU3ViZ3JpZCgqaW5uZXIsIGl0ZXJhdG9y
KTsKKyAgICAgICAgICAgIGFjY3VtdWxhdGVGbGV4RnJhY3Rpb24oZmxleEZyYWN0aW9uLCBjaGls
ZEl0ZXJhdG9yLCBvdXRlcm1vc3REaXJlY3Rpb24sIGl0ZW1zU2V0KTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisgICAgICAgIC8vIERvIG5vdCBpbmNsdWRlIGFscmVhZHkgcHJv
Y2Vzc2VkIGl0ZW1zLgorICAgICAgICBpZiAoIWl0ZW1zU2V0LmFkZChncmlkSXRlbSkuaXNOZXdF
bnRyeSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEdyaWRTcGFuIHNwYW4gPSBt
X2FsZ29yaXRobS5yZW5kZXJHcmlkKCktPmdyaWRTcGFuRm9yQ2hpbGQoKmdyaWRJdGVtLCBvdXRl
cm1vc3REaXJlY3Rpb24pOworCisgICAgICAgIC8vIFJlbW92aW5nIGd1dHRlcnMgZnJvbSB0aGUg
bWF4LWNvbnRlbnQgY29udHJpYnV0aW9uIG9mIHRoZSBpdGVtLCBzbyB0aGV5IGFyZSBub3QgdGFr
ZW4gaW50byBhY2NvdW50IGluIEZpbmRGclVuaXRTaXplKCkuCisgICAgICAgIExheW91dFVuaXQg
bGVmdE92ZXJTcGFjZSA9IG1heENvbnRlbnRGb3JDaGlsZCgqZ3JpZEl0ZW0pIC0gcmVuZGVyR3Jp
ZCgpLT5ndXR0ZXJzU2l6ZShtX2FsZ29yaXRobS5ncmlkKCksIG91dGVybW9zdERpcmVjdGlvbiwg
c3Bhbi5zdGFydExpbmUoKSwgc3Bhbi5pbnRlZ2VyU3BhbigpLCBhdmFpbGFibGVTcGFjZSgpKTsK
KyAgICAgICAgZmxleEZyYWN0aW9uID0gc3RkOjptYXgoZmxleEZyYWN0aW9uLCBmaW5kRnJVbml0
U2l6ZShzcGFuLCBsZWZ0T3ZlclNwYWNlKSk7CisgICAgfQorfQorCiBkb3VibGUgSW5kZWZpbml0
ZVNpemVTdHJhdGVneTo6ZmluZFVzZWRGbGV4RnJhY3Rpb24oVmVjdG9yPHVuc2lnbmVkPiYgZmxl
eGlibGVTaXplZFRyYWNrc0luZGV4LCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9u
LCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGZyZWVTcGFjZSkgY29uc3QKIHsKICAgICBVTlVT
RURfUEFSQU0oZnJlZVNwYWNlKTsKQEAgLTEwMzIsMTcgKzEwNTUsNyBAQCBkb3VibGUgSW5kZWZp
bml0ZVNpemVTdHJhdGVneTo6ZmluZFVzZWRGbGV4RnJhY3Rpb24oVmVjdG9yPHVuc2lnbmVkPiYg
ZmxleGlibGVTaQogICAgIEhhc2hTZXQ8UmVuZGVyQm94Kj4gaXRlbXNTZXQ7CiAgICAgZm9yIChj
b25zdCBhdXRvJiB0cmFja0luZGV4IDogZmxleGlibGVTaXplZFRyYWNrc0luZGV4KSB7CiAgICAg
ICAgIEdyaWRJdGVyYXRvciBpdGVyYXRvcihncmlkLCBkaXJlY3Rpb24sIHRyYWNrSW5kZXgpOwot
ICAgICAgICB3aGlsZSAoYXV0byogZ3JpZEl0ZW0gPSBpdGVyYXRvci5uZXh0R3JpZEl0ZW0oKSkg
ewotICAgICAgICAgICAgLy8gRG8gbm90IGluY2x1ZGUgYWxyZWFkeSBwcm9jZXNzZWQgaXRlbXMu
Ci0gICAgICAgICAgICBpZiAoIWl0ZW1zU2V0LmFkZChncmlkSXRlbSkuaXNOZXdFbnRyeSkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgY29uc3QgR3JpZFNwYW4mIHNw
YW4gPSBncmlkLmdyaWRJdGVtU3BhbigqZ3JpZEl0ZW0sIGRpcmVjdGlvbik7Ci0KLSAgICAgICAg
ICAgIC8vIFJlbW92aW5nIGd1dHRlcnMgZnJvbSB0aGUgbWF4LWNvbnRlbnQgY29udHJpYnV0aW9u
IG9mIHRoZSBpdGVtLCBzbyB0aGV5IGFyZSBub3QgdGFrZW4gaW50byBhY2NvdW50IGluIEZpbmRG
clVuaXRTaXplKCkuCi0gICAgICAgICAgICBMYXlvdXRVbml0IGxlZnRPdmVyU3BhY2UgPSBtYXhD
b250ZW50Rm9yQ2hpbGQoKmdyaWRJdGVtKSAtIHJlbmRlckdyaWQoKS0+Z3V0dGVyc1NpemUobV9h
bGdvcml0aG0uZ3JpZCgpLCBkaXJlY3Rpb24sIHNwYW4uc3RhcnRMaW5lKCksIHNwYW4uaW50ZWdl
clNwYW4oKSwgYXZhaWxhYmxlU3BhY2UoKSk7Ci0gICAgICAgICAgICBmbGV4RnJhY3Rpb24gPSBz
dGQ6Om1heChmbGV4RnJhY3Rpb24sIGZpbmRGclVuaXRTaXplKHNwYW4sIGxlZnRPdmVyU3BhY2Up
KTsKLSAgICAgICAgfQorICAgICAgICBhY2N1bXVsYXRlRmxleEZyYWN0aW9uKGZsZXhGcmFjdGlv
biwgaXRlcmF0b3IsIGRpcmVjdGlvbiwgaXRlbXNTZXQpOwogICAgIH0KIAogICAgIHJldHVybiBm
bGV4RnJhY3Rpb247CkBAIC0xMjA5LDYgKzEyMjIsMzAgQEAgdm9pZCBHcmlkVHJhY2tTaXppbmdB
bGdvcml0aG06OmluaXRpYWxpemVUcmFja1NpemVzKCkKICAgICB9CiB9CiAKK3ZvaWQgR3JpZFRy
YWNrU2l6aW5nQWxnb3JpdGhtOjphY2N1bXVsYXRlSW50cmluc2ljU2l6ZXNGb3JUcmFjayhHcmlk
VHJhY2smIHRyYWNrLCBHcmlkSXRlcmF0b3ImIGl0ZXJhdG9yLCBWZWN0b3I8R3JpZEl0ZW1XaXRo
U3Bhbj4mIGl0ZW1zU29ydGVkQnlJbmNyZWFzaW5nU3BhbiwgVmVjdG9yPEdyaWRJdGVtV2l0aFNw
YW4+JiBpdGVtc0Nyb3NzaW5nRmxleGlibGVUcmFja3MsIEhhc2hTZXQ8UmVuZGVyQm94Kj4mIGl0
ZW1zU2V0KQoreworICAgIHdoaWxlIChhdXRvKiBncmlkSXRlbSA9IGl0ZXJhdG9yLm5leHRHcmlk
SXRlbSgpKSB7CisgICAgICAgIGJvb2wgaXNOZXdFbnRyeSA9IGl0ZW1zU2V0LmFkZChncmlkSXRl
bSkuaXNOZXdFbnRyeTsKKyAgICAgICAgaWYgKGlzPFJlbmRlckdyaWQ+KGdyaWRJdGVtKSAmJiBk
b3duY2FzdDxSZW5kZXJHcmlkPihncmlkSXRlbSktPmlzU3ViZ3JpZEluUGFyZW50RGlyZWN0aW9u
KGl0ZXJhdG9yLmRpcmVjdGlvbigpKSkgeworICAgICAgICAgICAgUmVuZGVyR3JpZCogaW5uZXIg
PSBkb3duY2FzdDxSZW5kZXJHcmlkPihncmlkSXRlbSk7CisKKyAgICAgICAgICAgIEdyaWRJdGVy
YXRvciBjaGlsZEl0ZXJhdG9yID0gR3JpZEl0ZXJhdG9yOjpjcmVhdGVGb3JTdWJncmlkKCppbm5l
ciwgaXRlcmF0b3IpOworICAgICAgICAgICAgYWNjdW11bGF0ZUludHJpbnNpY1NpemVzRm9yVHJh
Y2sodHJhY2ssIGNoaWxkSXRlcmF0b3IsIGl0ZW1zU29ydGVkQnlJbmNyZWFzaW5nU3BhbiwgaXRl
bXNDcm9zc2luZ0ZsZXhpYmxlVHJhY2tzLCBpdGVtc1NldCk7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWlzTmV3RW50cnkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgR3JpZFNwYW4gc3BhbiA9IG1fcmVuZGVyR3JpZC0+Z3JpZFNwYW5Gb3JD
aGlsZCgqZ3JpZEl0ZW0sIG1fZGlyZWN0aW9uKTsKKworICAgICAgICBpZiAoc3Bhbm5pbmdJdGVt
Q3Jvc3Nlc0ZsZXhpYmxlU2l6ZWRUcmFja3Moc3BhbikpCisgICAgICAgICAgICBpdGVtc0Nyb3Nz
aW5nRmxleGlibGVUcmFja3MuYXBwZW5kKEdyaWRJdGVtV2l0aFNwYW4oKmdyaWRJdGVtLCBzcGFu
KSk7CisgICAgICAgIGVsc2UgaWYgKHNwYW4uaW50ZWdlclNwYW4oKSA9PSAxKQorICAgICAgICAg
ICAgc2l6ZVRyYWNrVG9GaXROb25TcGFubmluZ0l0ZW0oc3BhbiwgKmdyaWRJdGVtLCB0cmFjayk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGl0ZW1zU29ydGVkQnlJbmNyZWFzaW5nU3Bhbi5h
cHBlbmQoR3JpZEl0ZW1XaXRoU3BhbigqZ3JpZEl0ZW0sIHNwYW4pKTsKKyAgICB9Cit9CisKIHZv
aWQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpyZXNvbHZlSW50cmluc2ljVHJhY2tTaXplcygp
CiB7CiAgICAgVmVjdG9yPEdyaWRUcmFjaz4mIGFsbFRyYWNrcyA9IHRyYWNrcyhtX2RpcmVjdGlv
bik7CkBAIC0xMjI4LDIyICsxMjY1LDEzIEBAIHZvaWQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGht
OjpyZXNvbHZlSW50cmluc2ljVHJhY2tTaXplcygpCiAgICAgVmVjdG9yPEdyaWRJdGVtV2l0aFNw
YW4+IGl0ZW1zU29ydGVkQnlJbmNyZWFzaW5nU3BhbjsKICAgICBWZWN0b3I8R3JpZEl0ZW1XaXRo
U3Bhbj4gaXRlbXNDcm9zc2luZ0ZsZXhpYmxlVHJhY2tzOwogICAgIEhhc2hTZXQ8UmVuZGVyQm94
Kj4gaXRlbXNTZXQ7CisKICAgICBpZiAobV9ncmlkLmhhc0dyaWRJdGVtcygpKSB7CiAgICAgICAg
IGZvciAoYXV0byB0cmFja0luZGV4IDogbV9jb250ZW50U2l6ZWRUcmFja3NJbmRleCkgewogICAg
ICAgICAgICAgR3JpZEl0ZXJhdG9yIGl0ZXJhdG9yKG1fZ3JpZCwgbV9kaXJlY3Rpb24sIHRyYWNr
SW5kZXgpOwogICAgICAgICAgICAgR3JpZFRyYWNrJiB0cmFjayA9IGFsbFRyYWNrc1t0cmFja0lu
ZGV4XTsKIAotICAgICAgICAgICAgd2hpbGUgKGF1dG8qIGdyaWRJdGVtID0gaXRlcmF0b3IubmV4
dEdyaWRJdGVtKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXRlbXNTZXQuYWRkKGdyaWRJdGVt
KS5pc05ld0VudHJ5KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyaWRTcGFuJiBzcGFu
ID0gbV9ncmlkLmdyaWRJdGVtU3BhbigqZ3JpZEl0ZW0sIG1fZGlyZWN0aW9uKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHNwYW5uaW5nSXRlbUNyb3NzZXNGbGV4aWJsZVNpemVkVHJhY2tzKHNw
YW4pKQotICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNDcm9zc2luZ0ZsZXhpYmxlVHJhY2tz
LmFwcGVuZChHcmlkSXRlbVdpdGhTcGFuKCpncmlkSXRlbSwgc3BhbikpOwotICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChzcGFuLmludGVnZXJTcGFuKCkgPT0gMSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVUcmFja1RvRml0Tm9uU3Bhbm5pbmdJdGVtKHNwYW4sICpncmlkSXRlbSwg
dHJhY2spOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpdGVtc1NvcnRlZEJ5SW5jcmVhc2luZ1NwYW4uYXBwZW5kKEdyaWRJdGVtV2l0aFNwYW4oKmdy
aWRJdGVtLCBzcGFuKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYWNjdW11bGF0ZUludHJpbnNpY1NpemVzRm9yVHJhY2sodHJhY2ssIGl0ZXJhdG9yLCBp
dGVtc1NvcnRlZEJ5SW5jcmVhc2luZ1NwYW4sIGl0ZW1zQ3Jvc3NpbmdGbGV4aWJsZVRyYWNrcywg
aXRlbXNTZXQpOwogICAgICAgICB9CiAgICAgICAgIHN0ZDo6c29ydChpdGVtc1NvcnRlZEJ5SW5j
cmVhc2luZ1NwYW4uYmVnaW4oKSwgaXRlbXNTb3J0ZWRCeUluY3JlYXNpbmdTcGFuLmVuZCgpKTsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6
aW5nQWxnb3JpdGhtLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5n
QWxnb3JpdGhtLmgKaW5kZXggNTk0ZDVmYWU5YWFjYWVlY2E1MGQ5MDM5ZGUxNjZlMzQ0MzM1ZDEx
OC4uYzA3ZTUzODY4MTQyYjQzZGRkOGFhNjhmMTAwNmI3ZjZlYjZkYjUzYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tTaXppbmdBbGdvcml0aG0uaApAQCAt
NTUsNiArNTUsNyBAQCBlbnVtIGNsYXNzIFNwYWNlRGlzdHJpYnV0aW9uTGltaXQgOiB1aW50OF90
ICB7CiB9OwogCiBjbGFzcyBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG1TdHJhdGVneTsKK2NsYXNz
IEdyaWRJdGVtV2l0aFNwYW47CiAKIGNsYXNzIEdyaWRUcmFjayB7CiBwdWJsaWM6CkBAIC0xMjEs
NiArMTIyLDggQEAgcHVibGljOgogICAgIC8vIGFuZCBlbmNhcHN1bGF0ZSBhbnkgYWNjZXNzIGlu
IHRoZSBhbGdvcml0aG0gY2xhc3MuCiAgICAgR3JpZCYgbXV0YWJsZUdyaWQoKSBjb25zdCB7IHJl
dHVybiBtX2dyaWQ7IH0KIAorICAgIGNvbnN0IFJlbmRlckdyaWQqIHJlbmRlckdyaWQoKSB7IHJl
dHVybiBtX3JlbmRlckdyaWQ7IH07CisKICAgICBMYXlvdXRVbml0IG1pbkNvbnRlbnRTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9taW5Db250ZW50U2l6ZTsgfTsKICAgICBMYXlvdXRVbml0IG1heENv
bnRlbnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXhDb250ZW50U2l6ZTsgfTsKIApAQCAtMTkz
LDYgKzE5Niw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdHJldGNoRmxleGlibGVUcmFja3Moc3Rk
OjpvcHRpb25hbDxMYXlvdXRVbml0PiBmcmVlU3BhY2UpOwogICAgIHZvaWQgc3RyZXRjaEF1dG9U
cmFja3MoKTsKIAorICAgIHZvaWQgYWNjdW11bGF0ZUludHJpbnNpY1NpemVzRm9yVHJhY2soR3Jp
ZFRyYWNrJiwgR3JpZEl0ZXJhdG9yJiwgVmVjdG9yPEdyaWRJdGVtV2l0aFNwYW4+JiBpdGVtc1Nv
cnRlZEJ5SW5jcmVhc2luZ1NwYW4sIFZlY3RvcjxHcmlkSXRlbVdpdGhTcGFuPiYgaXRlbXNDcm9z
c2luZ0ZsZXhpYmxlVHJhY2tzLCBIYXNoU2V0PFJlbmRlckJveCo+JiBpdGVtc1NldCk7CisKICAg
ICBib29sIGNvcHlVc2VkVHJhY2tTaXplc0ZvclN1YmdyaWQoKTsKIAogICAgIC8vIFN0YXRlIG1h
Y2hpbmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKaW5kZXggYTdjYzM1
YTJmYThkZTQ2ZTIwMzY4OWQxM2M0MTNjMWIzMzZhYzJmZi4uMjE3ZWE3OTZlZWNmYTgzMmVkODYz
MGQzNDYyZTMxYjBlYzdiZGZjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckdyaWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlk
LmNwcApAQCAtNjQ3LDYgKzY0NywyNiBAQCB1bnNpZ25lZCBSZW5kZXJHcmlkOjpjbGFtcEF1dG9S
ZXBlYXRUcmFja3MoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgdQogICAgIHJl
dHVybiBzdGQ6Om1pbihhdXRvUmVwZWF0VHJhY2tzLCBtYXhUcmFja3MgLSBpbnNlcnRpb25Qb2lu
dCk7CiB9CiAKK3ZvaWQgUmVuZGVyR3JpZDo6cGxhY2VJdGVtcygpCit7CisgICAgdXBkYXRlTG9n
aWNhbFdpZHRoKCk7CisKKyAgICBMYXlvdXRVbml0IGF2YWlsYWJsZVNwYWNlRm9yQ29sdW1ucyA9
IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgpOworICAgIHBsYWNlSXRlbXNPbkdyaWQobV90cmFja1Np
emluZ0FsZ29yaXRobSwgYXZhaWxhYmxlU3BhY2VGb3JDb2x1bW5zKTsKK30KKworc3RhdGljIEdy
aWRBcmVhIGluc2VydEludG9HcmlkKEdyaWQmIGdyaWQsIFJlbmRlckJveCYgY2hpbGQsIGNvbnN0
IEdyaWRBcmVhJiBhcmVhKQoreworICAgIEdyaWRBcmVhIGNsYW1wZWQgPSBncmlkLmluc2VydChj
aGlsZCwgYXJlYSk7CisgICAgaWYgKCFpczxSZW5kZXJHcmlkPihjaGlsZCkpCisgICAgICAgIHJl
dHVybiBjbGFtcGVkOworCisgICAgUmVuZGVyR3JpZCYgcmVuZGVyR3JpZCA9IGRvd25jYXN0PFJl
bmRlckdyaWQ+KGNoaWxkKTsKKyAgICBpZiAocmVuZGVyR3JpZC5pc1N1YmdyaWRSb3dzKCkgfHwg
cmVuZGVyR3JpZC5pc1N1YmdyaWRDb2x1bW5zKCkpCisgICAgICAgIHJlbmRlckdyaWQucGxhY2VJ
dGVtcygpOworICAgIHJldHVybiBjbGFtcGVkOworfQorCiAvLyBGSVhNRTogV2Ugc2hvdWxkbid0
IGhhdmUgdG8gcGFzcyB0aGUgYXZhaWxhYmxlIGxvZ2ljYWwgd2lkdGggYXMgYXJndW1lbnQuIFRo
ZSBwcm9ibGVtIGlzIHRoYXQKIC8vIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgpIGRvZXMgYWx3YXlz
IHJldHVybiBhIHZhbHVlIGV2ZW4gaWYgd2UgY2Fubm90IHJlc29sdmUgaXQgbGlrZSB3aGVuCiAv
LyBjb21wdXRpbmcgdGhlIGludHJpbnNpYyBzaXplIChwcmVmZXJyZWQgd2lkdGhzKS4gVGhhdCdz
IHdoeSB3ZSBwYXNzIHRoZSByZXNwb25zaWJpbGl0eSB0byB0aGUKQEAgLTY5Niw3ICs3MTYsNyBA
QCB2b2lkIFJlbmRlckdyaWQ6OnBsYWNlSXRlbXNPbkdyaWQoR3JpZFRyYWNrU2l6aW5nQWxnb3Jp
dGhtJiBhbGdvcml0aG0sIHN0ZDo6b3B0aQogICAgICAgICAgICAgICAgIHNwZWNpZmllZE1ham9y
QXhpc0F1dG9HcmlkSXRlbXMuYXBwZW5kKGNoaWxkKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9Ci0gICAgICAgIGdyaWQuaW5zZXJ0KCpjaGlsZCwgeyBhcmVhLnJvd3MsIGFyZWEu
Y29sdW1ucyB9KTsKKyAgICAgICAgaW5zZXJ0SW50b0dyaWQoZ3JpZCwgKmNoaWxkLCB7IGFyZWEu
cm93cywgYXJlYS5jb2x1bW5zIH0pOwogICAgIH0KIAogI2lmIEFTU0VSVF9FTkFCTEVECkBAIC04
MjcsNyArODQ3LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpwbGFjZVNwZWNpZmllZE1ham9yQXhpc0l0
ZW1zT25HcmlkKEdyaWQmIGdyaWQsIGNvbnN0IFZlY3RvcjxSZW4KICAgICAgICAgaWYgKCFlbXB0
eUdyaWRBcmVhKQogICAgICAgICAgICAgZW1wdHlHcmlkQXJlYSA9IGNyZWF0ZUVtcHR5R3JpZEFy
ZWFBdFNwZWNpZmllZFBvc2l0aW9uc091dHNpZGVHcmlkKGdyaWQsICphdXRvR3JpZEl0ZW0sIGF1
dG9QbGFjZW1lbnRNYWpvckF4aXNEaXJlY3Rpb24oKSwgbWFqb3JBeGlzUG9zaXRpb25zKTsKIAot
ICAgICAgICAqZW1wdHlHcmlkQXJlYSA9IGdyaWQuaW5zZXJ0KCphdXRvR3JpZEl0ZW0sICplbXB0
eUdyaWRBcmVhKTsKKyAgICAgICAgKmVtcHR5R3JpZEFyZWEgPSBpbnNlcnRJbnRvR3JpZChncmlk
LCAqYXV0b0dyaWRJdGVtLCAqZW1wdHlHcmlkQXJlYSk7CiAKICAgICAgICAgaWYgKCFpc0dyaWRB
dXRvRmxvd0RlbnNlKQogICAgICAgICAgICAgbWlub3JBeGlzQ3Vyc29ycy5zZXQobWFqb3JBeGlz
SW5pdGlhbFBvc2l0aW9uLCBpc0ZvckNvbHVtbnMgPyBlbXB0eUdyaWRBcmVhLT5yb3dzLnN0YXJ0
TGluZSgpIDogZW1wdHlHcmlkQXJlYS0+Y29sdW1ucy5zdGFydExpbmUoKSk7CkBAIC04OTksNyAr
OTE5LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpwbGFjZUF1dG9NYWpvckF4aXNJdGVtT25HcmlkKEdy
aWQmIGdyaWQsIFJlbmRlckJveCYgZ3JpZEl0ZW0sIEEKICAgICAgICAgICAgIGVtcHR5R3JpZEFy
ZWEgPSBjcmVhdGVFbXB0eUdyaWRBcmVhQXRTcGVjaWZpZWRQb3NpdGlvbnNPdXRzaWRlR3JpZChn
cmlkLCBncmlkSXRlbSwgYXV0b1BsYWNlbWVudE1pbm9yQXhpc0RpcmVjdGlvbigpLCBHcmlkU3Bh
bjo6dHJhbnNsYXRlZERlZmluaXRlR3JpZFNwYW4oMCwgbWlub3JBeGlzU3BhblNpemUpKTsKICAg
ICB9CiAKLSAgICBncmlkLmluc2VydChncmlkSXRlbSwgKmVtcHR5R3JpZEFyZWEpOworICAgICpl
bXB0eUdyaWRBcmVhID0gaW5zZXJ0SW50b0dyaWQoZ3JpZCwgZ3JpZEl0ZW0sICplbXB0eUdyaWRB
cmVhKTsKICAgICBhdXRvUGxhY2VtZW50Q3Vyc29yLmZpcnN0ID0gZW1wdHlHcmlkQXJlYS0+cm93
cy5zdGFydExpbmUoKTsKICAgICBhdXRvUGxhY2VtZW50Q3Vyc29yLnNlY29uZCA9IGVtcHR5R3Jp
ZEFyZWEtPmNvbHVtbnMuc3RhcnRMaW5lKCk7CiB9CkBAIC0xMDEyLDEzICsxMDMyLDE1IEBAIHZv
aWQgUmVuZGVyR3JpZDo6bGF5b3V0R3JpZEl0ZW1zKCkKICAgICBwb3B1bGF0ZUdyaWRQb3NpdGlv
bnNGb3JEaXJlY3Rpb24oRm9yUm93cyk7CiAKICAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBm
aXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKSB7
Ci0gICAgICAgIAogICAgICAgICBpZiAobV9ncmlkLm9yZGVySXRlcmF0b3IoKS5zaG91bGRTa2lw
Q2hpbGQoKmNoaWxkKSkgewogICAgICAgICAgICAgaWYgKGNoaWxkLT5pc091dE9mRmxvd1Bvc2l0
aW9uZWQoKSkKICAgICAgICAgICAgICAgICBwcmVwYXJlQ2hpbGRGb3JQb3NpdGlvbmVkTGF5b3V0
KCpjaGlsZCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCisgICAgICAgIGlm
IChpczxSZW5kZXJHcmlkPihjaGlsZCkgJiYgKGRvd25jYXN0PFJlbmRlckdyaWQ+KGNoaWxkKS0+
aXNTdWJncmlkQ29sdW1ucygpIHx8IGRvd25jYXN0PFJlbmRlckdyaWQ+KGNoaWxkKS0+aXNTdWJn
cmlkUm93cygpKSkKKyAgICAgICAgICAgIGNoaWxkLT5zZXROZWVkc0xheW91dChNYXJrT25seVRo
aXMpOworCiAgICAgICAgIC8vIFNldHRpbmcgdGhlIGRlZmluaXRlIGdyaWQgYXJlYSdzIHNpemVz
LiBJdCBtYXkgaW1wbHkgdGhhdCB0aGUKICAgICAgICAgLy8gaXRlbSBtdXN0IHBlcmZvcm0gYSBs
YXlvdXQgaWYgaXRzIGFyZWEgZGlmZmVycyBmcm9tIHRoZSBvbmUKICAgICAgICAgLy8gdXNlZCBk
dXJpbmcgdGhlIHRyYWNrIHNpemluZyBhbGdvcml0aG0uCkBAIC0xNjQ0LDYgKzE2NjYsMTQgQEAg
Ym9vbCBSZW5kZXJHcmlkOjppc1N1YmdyaWRDb2x1bW5zKCkgY29uc3QKICAgICByZXR1cm4gaXNT
dWJncmlkKEZvckNvbHVtbnMpOwogfQogCitib29sIFJlbmRlckdyaWQ6OmlzU3ViZ3JpZEluUGFy
ZW50RGlyZWN0aW9uKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBwYXJlbnREaXJlY3Rpb24pIGNv
bnN0Cit7CisgICAgaWYgKCFpczxSZW5kZXJHcmlkPihwYXJlbnQoKSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uID0gR3JpZExh
eW91dEZ1bmN0aW9uczo6Zmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQoKmRvd25jYXN0PFJlbmRl
ckdyaWQ+KHBhcmVudCgpKSwgKnRoaXMsIHBhcmVudERpcmVjdGlvbik7CisgICAgcmV0dXJuIGlz
U3ViZ3JpZChkaXJlY3Rpb24pOworfQorCiBMYXlvdXRVbml0IFJlbmRlckdyaWQ6OmdyaWRBcmVh
QnJlYWR0aEZvck91dE9mRmxvd0NoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQsIEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgQVNTRVJUKGNoaWxkLmlzT3V0T2ZG
bG93UG9zaXRpb25lZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJHcmlkLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCmluZGV4
IGJkMGE2ZGY3ZjE0NzY3NDllZjM4YWI1ZTcxM2Y5MTk2N2JkNjE0MzAuLjc0NzdlMjdjYjEzZGUw
YjYzNjM2YzEzYTdkM2FmNzUzNWVhNzBjNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJHcmlkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckdyaWQuaApAQCAtODksNiArODksNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1N1YmdyaWRSb3dz
KCkgY29uc3Q7CiAgICAgYm9vbCBpc1N1YmdyaWRDb2x1bW5zKCkgY29uc3Q7CiAgICAgYm9vbCBp
c1N1YmdyaWQoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKSBjb25zdDsKKyAgICBib29sIGlzU3Vi
Z3JpZEluUGFyZW50RGlyZWN0aW9uKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBwYXJlbnREaXJl
Y3Rpb24pIGNvbnN0OwogCiAgICAgY29uc3QgR3JpZCYgY3VycmVudEdyaWQoKSBjb25zdAogICAg
IHsKQEAgLTEwMCw2ICsxMDEsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBudW1UcmFja3Mo
ZGlyZWN0aW9uLCBtX2dyaWQpOwogICAgIH0KIAorICAgIHZvaWQgcGxhY2VJdGVtcygpOworCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG07CiAKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCBlYjU4NTQ5MzNjNDMwYmI2ZjQzZGQwOTg1ZDczZTY0MWZjOTZjNzM4Li44NjU5MGJiMmNh
N2E5ODJmNDVhODdhMGM1ZTY5NDA4ZTEwYWNjNThhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIw
MjItMDItMTUgIE1hdHQgV29vZHJvdyAgPG1hdHR3b29kcm93QGFwcGxlLmNvbT4KKworICAgICAg
ICBJbmNsdWRlIHN1YiBncmlkIGl0ZW1zIGluIHRoZSB0cmFjayBzaXppbmcgYWxnb3JpdGhtIG9m
IHRoZSBvdXRlciBncmlkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzYzMzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBFeGlzdGluZyB0ZXN0IGV4cGVjdGF0aW9ucyB1cGRhdGVkLgorCisgICAgICAgICog
VGVzdEV4cGVjdGF0aW9uczoKKwogMjAyMi0wMi0xNSAgTWF0dCBXb29kcm93ICA8bWF0dHdvb2Ry
b3dAYXBwbGUuY29tPgogCiAgICAgICAgIENvcHkgdHJhY2sgc2l6ZXMgZnJvbSBwYXJlbnQgZ3Jp
ZCBpbnRvIHN1YmdyaWQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMg
Yi9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDQ2MzNhYTdiOTZhYTY4ZGExZWU0
NGFjZDljYzkwMTVjODI2YjUwMTguLjBjZjBhMGI3MzU0N2YwNGMyN2Y3MzU3NDk5ZTliNDIyMjY0
YjllYTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5
b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwpAQCAtMTQyNCw3ICsxNDI0LDYgQEAgaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9wYXJlbnQtcmVwZWF0
LWF1dG8tZml0LTAwMS4KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1n
cmlkL3N1YmdyaWQvcGFyZW50LXJlcGVhdC1hdXRvLWZpdC0wMDIuaHRtbCBbIEltYWdlT25seUZh
aWx1cmUgXQogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQvc3Vi
Z3JpZC9yZXBlYXQtYXV0by1maWxsLTAwMy5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBpbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZ3JpZC9zdWJncmlkL3JlcGVhdC1h
dXRvLWZpbGwtMDA0Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQvc3ViZ3JpZC1pdGVtLWJsb2NrLXNp
emUtMDAxLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQvc3ViZ3JpZC1tYnAtb3ZlcmZsb3ctMDAxLmh0
bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
Y3NzL2Nzcy1ncmlkL3N1YmdyaWQvc3ViZ3JpZC1tYnAtb3ZlcmZsb3ctMDAyLmh0bWwgWyBJbWFn
ZU9ubHlGYWlsdXJlIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1n
cmlkL3N1YmdyaWQvc3ViZ3JpZC1tYnAtb3ZlcmZsb3ctMDAzLmh0bWwgWyBJbWFnZU9ubHlGYWls
dXJlIF0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452398</attachid>
            <date>2022-02-17 11:48:13 -0800</date>
            <delta_ts>2022-02-17 14:54:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236337-20220218084811.patch</filename>
            <type>text/plain</type>
            <size>23307</size>
            <attacher name="Matt Woodrow">mattwoodrow</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODI2YjRhMGMzNGJlODRl
MzI4ZTQwZDI1NjBiYjg2MzQzOTkwODQ1Yi4uODVhNmMxNGJiN2Q2YWEwYThkNzY5MzVmYjExMDQ3
ZWY5MjdhNTBiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDIyLTAyLTE1ICBNYXR0
IFdvb2Ryb3cgIDxtYXR0d29vZHJvd0BhcHBsZS5jb20+CisKKyAgICAgICAgSW5jbHVkZSBzdWIg
Z3JpZCBpdGVtcyBpbiB0aGUgdHJhY2sgc2l6aW5nIGFsZ29yaXRobSBvZiB0aGUgb3V0ZXIgZ3Jp
ZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2MzM3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGVhbiBKYWNrc29uLgorCisgICAgICAgIHJlc29sdmVJ
bnRyaW5zaWNUcmFja1NpemVzIGFuZCBmaW5kVXNlZEZsZXhGcmFjdGlvbiBub3cgcmVjdXJzZSBp
bnRvIHN1YmdyaWRkZWQgaXRlbXMKKyAgICAgICAgdG8gaXRlcmF0ZSB0aGUgY2hpbGRyZW4gc2Eg
aWYgdGhleSB3ZXJlIGRpcmVjdGx5IHBhcnQgb2YgdGhlIG91dGVyIGdyaWQuCisgICAgICAgIE5l
dyBjb25zdHJ1Y3RvciBhZGRlZCB0byBHcmlkSXRlcmF0b3IgZm9yIGNvbnN0cnVjdGluZyBhIG5l
dyBpdGVyYXRvciBmb3IgdGhlIHN1YmdyaWQgaXRlbXMsCisgICAgICAgIHdoaWNoIGFkanVzdHMg
dGhlIHJvdy9jb2x1bW4gaW5kaWNlcyBpbnRvIHRoZSBsb2NhbCBjb29yZGluYXRlIHNwYWNlIG9m
IHRoZSBzdWJncmlkLgorICAgICAgICBBZGRzIGEgbmV3IG1ldGhvZCB0byByZW5kZXJHcmlkICdw
bGFjZUl0ZW1zJyBzbyB0aGF0IHdlIGNhbiBlbnN1cmUgc3ViZ3JpZCBpdGVtcyBoYXZlIGZpbmlz
aGVkIHBsYWNlbWVudAorICAgICAgICB3aGVuIGRvaW5nIHNpemluZyBmb3IgdGhlIG91dGVyIGdy
aWQuCisKKyAgICAgICAgRXhpc3RpbmcgdGVzdCBleHBlY3RhdGlvbnMgdXBkYXRlZC4KKworICAg
ICAgICAqIHJlbmRlcmluZy9HcmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRJdGVyYXRv
cjo6Y3JlYXRlRm9yU3ViZ3JpZCk6CisgICAgICAgICogcmVuZGVyaW5nL0dyaWQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyaWRJdGVyYXRvcjo6ZGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6ZXN0aW1hdGVkR3JpZEFyZWFCcmVhZHRoRm9yQ2hp
bGQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpn
cmlkQXJlYUJyZWFkdGhGb3JDaGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmlkVHJh
Y2tTaXppbmdBbGdvcml0aG06OmlzSW50cmluc2ljU2l6ZWRHcmlkQXJlYSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmlkVHJhY2tTaXppbmdBbGdvcml0aG1TdHJhdGVneTo6bWluU2l6ZUZv
ckNoaWxkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRUcmFja1NpemluZ0FsZ29yaXRo
bTo6dXBkYXRlQmFzZWxpbmVBbGlnbm1lbnRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
aWRUcmFja1NpemluZ0FsZ29yaXRobTo6YmFzZWxpbmVPZmZzZXRGb3JDaGlsZCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmRlZmluaXRlU2l6ZVN0cmF0ZWd5OjphY2N1bXVsYXRlRmxleEZy
YWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkluZGVmaW5pdGVTaXplU3RyYXRlZ3k6
OmZpbmRVc2VkRmxleEZyYWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRUcmFj
a1NpemluZ0FsZ29yaXRobTo6YWNjdW11bGF0ZUludHJpbnNpY1NpemVzRm9yVHJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpyZXNvbHZlSW50cmluc2lj
VHJhY2tTaXplcyk6CisgICAgICAgICogcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRo
bS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJHcmlkLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckdyaWQ6OnBsYWNlSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6aW5zZXJ0SW50
b0dyaWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6cGxhY2VJdGVtc09uR3JpZCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFjZVNwZWNpZmllZE1ham9y
QXhpc0l0ZW1zT25HcmlkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnBs
YWNlQXV0b01ham9yQXhpc0l0ZW1PbkdyaWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyR3JpZDo6bGF5b3V0R3JpZEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6
OmlzU3ViZ3JpZEluUGFyZW50RGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyR3JpZC5oOgorCiAyMDIyLTAyLTE3ICBNYXR0IFdvb2Ryb3cgIDxtYXR0d29vZHJvd0Bh
cHBsZS5jb20+CiAKICAgICAgICAgRml4IGFicy1wb3MgYnJlYWR0aCBpc3N1ZSB3aGVuIHVzaW5n
ICdhdXRvJwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWQuY3BwCmluZGV4IDRjMWZmZTUwNGFiMzc2ZmQy
OWQ5MmFjYmM5OGJkMjkyNzJhMTUyZTcuLjZkMjk4Yzg3ZDM3ZGQ3NjBjYmY2NDU4NmI0OTA4ZDIy
NmNmN2VkMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZC5jcHAKQEAgLTI2Nyw0ICsyNjcsMjAg
QEAgc3RkOjp1bmlxdWVfcHRyPEdyaWRBcmVhPiBHcmlkSXRlcmF0b3I6Om5leHRFbXB0eUdyaWRB
cmVhKHVuc2lnbmVkIGZpeGVkVHJhY2tTcGEKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorR3Jp
ZEl0ZXJhdG9yIEdyaWRJdGVyYXRvcjo6Y3JlYXRlRm9yU3ViZ3JpZChjb25zdCBSZW5kZXJHcmlk
JiBzdWJncmlkLCBjb25zdCBHcmlkSXRlcmF0b3ImIG91dGVyKQoreworICAgIEFTU0VSVChzdWJn
cmlkLmlzU3ViZ3JpZEluUGFyZW50RGlyZWN0aW9uKG91dGVyLmRpcmVjdGlvbigpKSk7CisgICAg
R3JpZFNwYW4gZml4ZWRTcGFuID0gZG93bmNhc3Q8UmVuZGVyR3JpZD4oc3ViZ3JpZC5wYXJlbnQo
KSktPmdyaWRTcGFuRm9yQ2hpbGQoc3ViZ3JpZCwgb3V0ZXIuZGlyZWN0aW9uKCkpOworCisgICAg
Ly8gVHJhbnNsYXRlIHRoZSBjdXJyZW50IHJvdy9jb2x1bW4gaW5kaWNlcyBpbnRvIHRoZSBjb29y
ZGluYXRlCisgICAgLy8gc3BhY2Ugb2YgdGhlIHN1YmdyaWQuCisgICAgdW5zaWduZWQgZml4ZWRJ
bmRleCA9IChvdXRlci5kaXJlY3Rpb24oKSA9PSBGb3JDb2x1bW5zKSA/IG91dGVyLm1fY29sdW1u
SW5kZXggOiBvdXRlci5tX3Jvd0luZGV4OworICAgIGZpeGVkSW5kZXggLT0gZml4ZWRTcGFuLnN0
YXJ0TGluZSgpOworCisgICAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGlubmVyRGlyZWN0aW9u
ID0gR3JpZExheW91dEZ1bmN0aW9uczo6Zmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQoKmRvd25j
YXN0PFJlbmRlckdyaWQ+KHN1YmdyaWQucGFyZW50KCkpLCBzdWJncmlkLCBvdXRlci5kaXJlY3Rp
b24oKSk7CisgICAgQVNTRVJUKHN1YmdyaWQuaXNTdWJncmlkKGlubmVyRGlyZWN0aW9uKSk7CisK
KyAgICByZXR1cm4gR3JpZEl0ZXJhdG9yKHN1YmdyaWQuY3VycmVudEdyaWQoKSwgaW5uZXJEaXJl
Y3Rpb24sIGZpeGVkSW5kZXgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0dyaWQuaAppbmRleCA0YzFlZjNhNWYwMTRlYjc2NmRhNjhmOTQ4NDg4MTZkZTExNGFh
M2Q4Li5lYzI4MzA2Y2QwMzM3YTU4YjFiOThmMDYwNGYyYzJhOGUwODMwOGFjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9HcmlkLmgKQEAgLTExNiwxMCArMTE2LDE3IEBAIHB1YmxpYzoKICAgICAvLyBHcmlk
SXRlcmF0b3IobV9ncmlkLCBGb3JDb2x1bW5zLCAxKSB3aWxsIHdhbGsgb3ZlciB0aGUgcm93cyBv
ZiB0aGUgMm5kIGNvbHVtbi4KICAgICBHcmlkSXRlcmF0b3IoY29uc3QgR3JpZCYsIEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbiwgdW5zaWduZWQgZml4ZWRUcmFja0luZGV4LCB1bnNpZ25lZCB2YXJ5
aW5nVHJhY2tJbmRleCA9IDApOwogCisgICAgc3RhdGljIEdyaWRJdGVyYXRvciBjcmVhdGVGb3JT
dWJncmlkKGNvbnN0IFJlbmRlckdyaWQmIHN1YmdyaWQsIGNvbnN0IEdyaWRJdGVyYXRvciYgb3V0
ZXIpOworCiAgICAgUmVuZGVyQm94KiBuZXh0R3JpZEl0ZW0oKTsKICAgICBib29sIGlzRW1wdHlB
cmVhRW5vdWdoKHVuc2lnbmVkIHJvd1NwYW4sIHVuc2lnbmVkIGNvbHVtblNwYW4pIGNvbnN0Owog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmlkQXJlYT4gbmV4dEVtcHR5R3JpZEFyZWEodW5zaWduZWQg
Zml4ZWRUcmFja1NwYW4sIHVuc2lnbmVkIHZhcnlpbmdUcmFja1NwYW4pOwogCisgICAgR3JpZFRy
YWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9kaXJlY3Rpb247CisgICAgfQorCiBwcml2YXRlOgogICAgIGNvbnN0IEdyaWRBc01hdHJp
eCYgbV9ncmlkOwogICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBtX2RpcmVjdGlvbjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tTaXppbmdBbGdvcml0
aG0uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRo
bS5jcHAKaW5kZXggMDBhNTc2NmIzZTA5YzVhNWM3MTgzYzVlNGVlNGJlZWNhZDgzMmZlZi4uNTc3
OWQxOGVmZjVmMzQyMWU2NWQ4Nzg5ZjNkNmFmNmMzNmE0OTA0NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5jcHAKQEAgLTU4
Nyw3ICs1ODcsNyBAQCB2b2lkIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6ZGlzdHJpYnV0ZVNw
YWNlVG9UcmFja3MoVmVjdG9yPEdyaWRUcmFjayo+JiB0cmFjawogCiBzdGQ6Om9wdGlvbmFsPExh
eW91dFVuaXQ+IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6ZXN0aW1hdGVkR3JpZEFyZWFCcmVh
ZHRoRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0
aW9uIGRpcmVjdGlvbikgY29uc3QKIHsKLSAgICBjb25zdCBHcmlkU3BhbiYgc3BhbiA9IG1fZ3Jp
ZC5ncmlkSXRlbVNwYW4oY2hpbGQsIGRpcmVjdGlvbik7CisgICAgY29uc3QgR3JpZFNwYW4mIHNw
YW4gPSBtX3JlbmRlckdyaWQtPmdyaWRTcGFuRm9yQ2hpbGQoY2hpbGQsIGRpcmVjdGlvbik7CiAg
ICAgTGF5b3V0VW5pdCBncmlkQXJlYVNpemU7CiAgICAgYm9vbCBncmlkQXJlYUlzSW5kZWZpbml0
ZSA9IGZhbHNlOwogICAgIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gYXZhaWxhYmxlU2l6ZSA9
IGF2YWlsYWJsZVNwYWNlKGRpcmVjdGlvbik7CkBAIC02MjgsNyArNjI4LDcgQEAgc3RkOjpvcHRp
b25hbDxMYXlvdXRVbml0PiBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmdyaWRBcmVhQnJlYWR0
aEZvckNoaWxkKGNvbnMKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8R3JpZFRyYWNrPiYgYWxs
VHJhY2tzID0gdHJhY2tzKGRpcmVjdGlvbik7Ci0gICAgY29uc3QgR3JpZFNwYW4mIHNwYW4gPSBt
X2dyaWQuZ3JpZEl0ZW1TcGFuKGNoaWxkLCBkaXJlY3Rpb24pOworICAgIGNvbnN0IEdyaWRTcGFu
JiBzcGFuID0gbV9yZW5kZXJHcmlkLT5ncmlkU3BhbkZvckNoaWxkKGNoaWxkLCBkaXJlY3Rpb24p
OwogICAgIExheW91dFVuaXQgZ3JpZEFyZWFCcmVhZHRoOwogICAgIGZvciAoYXV0byB0cmFja1Bv
c2l0aW9uIDogc3BhbikKICAgICAgICAgZ3JpZEFyZWFCcmVhZHRoICs9IGFsbFRyYWNrc1t0cmFj
a1Bvc2l0aW9uXS5iYXNlU2l6ZSgpOwpAQCAtNjUwLDcgKzY1MCw3IEBAIGJvb2wgR3JpZFRyYWNr
U2l6aW5nQWxnb3JpdGhtOjppc0ludHJpbnNpY1NpemVkR3JpZEFyZWEoY29uc3QgUmVuZGVyQm94
JiBjaGlsZCwKIHsKICAgICBBU1NFUlQod2FzU2V0dXAoKSk7CiAgICAgR3JpZFRyYWNrU2l6aW5n
RGlyZWN0aW9uIGRpcmVjdGlvbiA9IGdyaWREaXJlY3Rpb25Gb3JBeGlzKGF4aXMpOwotICAgIGNv
bnN0IEdyaWRTcGFuJiBzcGFuID0gbV9ncmlkLmdyaWRJdGVtU3BhbihjaGlsZCwgZGlyZWN0aW9u
KTsKKyAgICBjb25zdCBHcmlkU3BhbiYgc3BhbiA9IG1fcmVuZGVyR3JpZC0+Z3JpZFNwYW5Gb3JD
aGlsZChjaGlsZCwgZGlyZWN0aW9uKTsKICAgICBmb3IgKGF1dG8gdHJhY2tQb3NpdGlvbiA6IHNw
YW4pIHsKICAgICAgICAgY29uc3QgYXV0byYgdHJhY2tTaXplID0gcmF3R3JpZFRyYWNrU2l6ZShk
aXJlY3Rpb24sIHRyYWNrUG9zaXRpb24pOwogICAgICAgICAvLyBXZSBjb25zaWRlciBmciB1bml0
cyBhcyAnYXV0bycgZm9yIHRoZSBtaW4gc2l6aW5nIGZ1bmN0aW9uLgpAQCAtODU5LDcgKzg1OSw3
IEBAIExheW91dFVuaXQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtU3RyYXRlZ3k6Om1pblNpemVG
b3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkKSBjCiAKICAgICBpZiAoY2hpbGRNaW5TaXplLmlzQXV0
bygpICYmIG92ZXJmbG93SXNWaXNpYmxlKSB7CiAgICAgICAgIGF1dG8gbWluU2l6ZSA9IG1pbkNv
bnRlbnRGb3JDaGlsZChjaGlsZCk7Ci0gICAgICAgIGNvbnN0IEdyaWRTcGFuJiBzcGFuID0gbV9h
bGdvcml0aG0uZ3JpZCgpLmdyaWRJdGVtU3BhbihjaGlsZCwgZGlyZWN0aW9uKCkpOworICAgICAg
ICBjb25zdCBHcmlkU3BhbiYgc3BhbiA9IG1fYWxnb3JpdGhtLm1fcmVuZGVyR3JpZC0+Z3JpZFNw
YW5Gb3JDaGlsZChjaGlsZCwgZGlyZWN0aW9uKCkpOwogCiAgICAgICAgIExheW91dFVuaXQgbWF4
QnJlYWR0aDsKICAgICAgICAgYXV0byBhbGxUcmFja3MgPSBtX2FsZ29yaXRobS50cmFja3MoZGly
ZWN0aW9uKCkpOwpAQCAtOTE4LDcgKzkxOCw3IEBAIHZvaWQgR3JpZFRyYWNrU2l6aW5nQWxnb3Jp
dGhtOjp1cGRhdGVCYXNlbGluZUFsaWdubWVudENvbnRleHQoY29uc3QgUmVuZGVyQm94JiBjCiAg
ICAgQVNTRVJUKCFjaGlsZC5uZWVkc0xheW91dCgpKTsKIAogICAgIEl0ZW1Qb3NpdGlvbiBhbGln
biA9IG1fcmVuZGVyR3JpZC0+c2VsZkFsaWdubWVudEZvckNoaWxkKGJhc2VsaW5lQXhpcywgY2hp
bGQpLnBvc2l0aW9uKCk7Ci0gICAgY29uc3QgYXV0byYgc3BhbiA9IG1fZ3JpZC5ncmlkSXRlbVNw
YW4oY2hpbGQsIGdyaWREaXJlY3Rpb25Gb3JBeGlzKGJhc2VsaW5lQXhpcykpOworICAgIGNvbnN0
IGF1dG8mIHNwYW4gPSBtX3JlbmRlckdyaWQtPmdyaWRTcGFuRm9yQ2hpbGQoY2hpbGQsIGdyaWRE
aXJlY3Rpb25Gb3JBeGlzKGJhc2VsaW5lQXhpcykpOwogICAgIG1fYmFzZWxpbmVBbGlnbm1lbnQu
dXBkYXRlQmFzZWxpbmVBbGlnbm1lbnRDb250ZXh0KGFsaWduLCBzcGFuLnN0YXJ0TGluZSgpLCBj
aGlsZCwgYmFzZWxpbmVBeGlzKTsKIH0KIApAQCAtOTI4LDcgKzkyOCw3IEBAIExheW91dFVuaXQg
R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpiYXNlbGluZU9mZnNldEZvckNoaWxkKGNvbnN0IFJl
bmRlckJveCYgY2hpCiAgICAgICAgIHJldHVybiBMYXlvdXRVbml0KCk7CiAKICAgICBJdGVtUG9z
aXRpb24gYWxpZ24gPSBtX3JlbmRlckdyaWQtPnNlbGZBbGlnbm1lbnRGb3JDaGlsZChiYXNlbGlu
ZUF4aXMsIGNoaWxkKS5wb3NpdGlvbigpOwotICAgIGNvbnN0IGF1dG8mIHNwYW4gPSBtX2dyaWQu
Z3JpZEl0ZW1TcGFuKGNoaWxkLCBncmlkRGlyZWN0aW9uRm9yQXhpcyhiYXNlbGluZUF4aXMpKTsK
KyAgICBjb25zdCBhdXRvJiBzcGFuID0gbV9yZW5kZXJHcmlkLT5ncmlkU3BhbkZvckNoaWxkKGNo
aWxkLCBncmlkRGlyZWN0aW9uRm9yQXhpcyhiYXNlbGluZUF4aXMpKTsKICAgICByZXR1cm4gbV9i
YXNlbGluZUFsaWdubWVudC5iYXNlbGluZU9mZnNldEZvckNoaWxkKGFsaWduLCBzcGFuLnN0YXJ0
TGluZSgpLCBjaGlsZCwgYmFzZWxpbmVBeGlzKTsKIH0KIApAQCAtOTkwLDYgKzk5MCw3IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCByZWNvbXB1dGVVc2VkRmxleEZyYWN0aW9uSWZOZWVkZWQoZG91Ymxl
JiBmbGV4RnJhY3Rpb24sIExheW91dFVuaXQmIHRvdGFsR3Jvd3RoKSBjb25zdCBvdmVycmlkZTsK
ICAgICBMYXlvdXRVbml0IGZyZWVTcGFjZUZvclN0cmV0Y2hBdXRvVHJhY2tzU3RlcCgpIGNvbnN0
IG92ZXJyaWRlOwogICAgIGJvb2wgaXNDb21wdXRpbmdTaXplQ29udGFpbm1lbnQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBzaG91bGRBcHBseVNpemVDb250YWlubWVudCgqcmVuZGVyR3JpZCgp
KTsgfQorICAgIHZvaWQgYWNjdW11bGF0ZUZsZXhGcmFjdGlvbihkb3VibGUmIGZsZXhGcmFjdGlv
biwgR3JpZEl0ZXJhdG9yJiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIG91dGVybW9zdERpcmVj
dGlvbiwgSGFzaFNldDxSZW5kZXJCb3gqPiYgaXRlbXNTZXQpIGNvbnN0OwogfTsKIAogdm9pZCBJ
bmRlZmluaXRlU2l6ZVN0cmF0ZWd5OjpsYXlvdXRHcmlkSXRlbUZvck1pblNpemVDb21wdXRhdGlv
bihSZW5kZXJCb3gmIGNoaWxkLCBib29sIG92ZXJyaWRlU2l6ZUhhc0NoYW5nZWQpIGNvbnN0CkBA
IC0xMDEzLDYgKzEwMTQsMjggQEAgc3RhdGljIGlubGluZSBkb3VibGUgbm9ybWFsaXplZEZsZXhG
cmFjdGlvbihjb25zdCBHcmlkVHJhY2smIHRyYWNrKQogICAgIHJldHVybiB0cmFjay5iYXNlU2l6
ZSgpIC8gc3RkOjptYXg8ZG91YmxlPigxLCBmbGV4RmFjdG9yKTsKIH0KIAordm9pZCBJbmRlZmlu
aXRlU2l6ZVN0cmF0ZWd5OjphY2N1bXVsYXRlRmxleEZyYWN0aW9uKGRvdWJsZSYgZmxleEZyYWN0
aW9uLCBHcmlkSXRlcmF0b3ImIGl0ZXJhdG9yLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gb3V0
ZXJtb3N0RGlyZWN0aW9uLCBIYXNoU2V0PFJlbmRlckJveCo+JiBpdGVtc1NldCkgY29uc3QKK3sK
KyAgICB3aGlsZSAoYXV0byogZ3JpZEl0ZW0gPSBpdGVyYXRvci5uZXh0R3JpZEl0ZW0oKSkgewor
ICAgICAgICBpZiAoaXM8UmVuZGVyR3JpZD4oZ3JpZEl0ZW0pICYmIGRvd25jYXN0PFJlbmRlckdy
aWQ+KGdyaWRJdGVtKS0+aXNTdWJncmlkSW5QYXJlbnREaXJlY3Rpb24oaXRlcmF0b3IuZGlyZWN0
aW9uKCkpKSB7CisgICAgICAgICAgICBSZW5kZXJHcmlkKiBpbm5lciA9IGRvd25jYXN0PFJlbmRl
ckdyaWQ+KGdyaWRJdGVtKTsKKworICAgICAgICAgICAgR3JpZEl0ZXJhdG9yIGNoaWxkSXRlcmF0
b3IgPSBHcmlkSXRlcmF0b3I6OmNyZWF0ZUZvclN1YmdyaWQoKmlubmVyLCBpdGVyYXRvcik7Cisg
ICAgICAgICAgICBhY2N1bXVsYXRlRmxleEZyYWN0aW9uKGZsZXhGcmFjdGlvbiwgY2hpbGRJdGVy
YXRvciwgb3V0ZXJtb3N0RGlyZWN0aW9uLCBpdGVtc1NldCk7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBEbyBub3QgaW5jbHVkZSBhbHJlYWR5IHByb2Nlc3Nl
ZCBpdGVtcy4KKyAgICAgICAgaWYgKCFpdGVtc1NldC5hZGQoZ3JpZEl0ZW0pLmlzTmV3RW50cnkp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBHcmlkU3BhbiBzcGFuID0gbV9hbGdv
cml0aG0ucmVuZGVyR3JpZCgpLT5ncmlkU3BhbkZvckNoaWxkKCpncmlkSXRlbSwgb3V0ZXJtb3N0
RGlyZWN0aW9uKTsKKworICAgICAgICAvLyBSZW1vdmluZyBndXR0ZXJzIGZyb20gdGhlIG1heC1j
b250ZW50IGNvbnRyaWJ1dGlvbiBvZiB0aGUgaXRlbSwgc28gdGhleSBhcmUgbm90IHRha2VuIGlu
dG8gYWNjb3VudCBpbiBGaW5kRnJVbml0U2l6ZSgpLgorICAgICAgICBMYXlvdXRVbml0IGxlZnRP
dmVyU3BhY2UgPSBtYXhDb250ZW50Rm9yQ2hpbGQoKmdyaWRJdGVtKSAtIHJlbmRlckdyaWQoKS0+
Z3V0dGVyc1NpemUobV9hbGdvcml0aG0uZ3JpZCgpLCBvdXRlcm1vc3REaXJlY3Rpb24sIHNwYW4u
c3RhcnRMaW5lKCksIHNwYW4uaW50ZWdlclNwYW4oKSwgYXZhaWxhYmxlU3BhY2UoKSk7CisgICAg
ICAgIGZsZXhGcmFjdGlvbiA9IHN0ZDo6bWF4KGZsZXhGcmFjdGlvbiwgZmluZEZyVW5pdFNpemUo
c3BhbiwgbGVmdE92ZXJTcGFjZSkpOworICAgIH0KK30KKwogZG91YmxlIEluZGVmaW5pdGVTaXpl
U3RyYXRlZ3k6OmZpbmRVc2VkRmxleEZyYWN0aW9uKFZlY3Rvcjx1bnNpZ25lZD4mIGZsZXhpYmxl
U2l6ZWRUcmFja3NJbmRleCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgc3Rk
OjpvcHRpb25hbDxMYXlvdXRVbml0PiBmcmVlU3BhY2UpIGNvbnN0CiB7CiAgICAgVU5VU0VEX1BB
UkFNKGZyZWVTcGFjZSk7CkBAIC0xMDMyLDE3ICsxMDU1LDcgQEAgZG91YmxlIEluZGVmaW5pdGVT
aXplU3RyYXRlZ3k6OmZpbmRVc2VkRmxleEZyYWN0aW9uKFZlY3Rvcjx1bnNpZ25lZD4mIGZsZXhp
YmxlU2kKICAgICBIYXNoU2V0PFJlbmRlckJveCo+IGl0ZW1zU2V0OwogICAgIGZvciAoY29uc3Qg
YXV0byYgdHJhY2tJbmRleCA6IGZsZXhpYmxlU2l6ZWRUcmFja3NJbmRleCkgewogICAgICAgICBH
cmlkSXRlcmF0b3IgaXRlcmF0b3IoZ3JpZCwgZGlyZWN0aW9uLCB0cmFja0luZGV4KTsKLSAgICAg
ICAgd2hpbGUgKGF1dG8qIGdyaWRJdGVtID0gaXRlcmF0b3IubmV4dEdyaWRJdGVtKCkpIHsKLSAg
ICAgICAgICAgIC8vIERvIG5vdCBpbmNsdWRlIGFscmVhZHkgcHJvY2Vzc2VkIGl0ZW1zLgotICAg
ICAgICAgICAgaWYgKCFpdGVtc1NldC5hZGQoZ3JpZEl0ZW0pLmlzTmV3RW50cnkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGNvbnN0IEdyaWRTcGFuJiBzcGFuID0g
Z3JpZC5ncmlkSXRlbVNwYW4oKmdyaWRJdGVtLCBkaXJlY3Rpb24pOwotCi0gICAgICAgICAgICAv
LyBSZW1vdmluZyBndXR0ZXJzIGZyb20gdGhlIG1heC1jb250ZW50IGNvbnRyaWJ1dGlvbiBvZiB0
aGUgaXRlbSwgc28gdGhleSBhcmUgbm90IHRha2VuIGludG8gYWNjb3VudCBpbiBGaW5kRnJVbml0
U2l6ZSgpLgotICAgICAgICAgICAgTGF5b3V0VW5pdCBsZWZ0T3ZlclNwYWNlID0gbWF4Q29udGVu
dEZvckNoaWxkKCpncmlkSXRlbSkgLSByZW5kZXJHcmlkKCktPmd1dHRlcnNTaXplKG1fYWxnb3Jp
dGhtLmdyaWQoKSwgZGlyZWN0aW9uLCBzcGFuLnN0YXJ0TGluZSgpLCBzcGFuLmludGVnZXJTcGFu
KCksIGF2YWlsYWJsZVNwYWNlKCkpOwotICAgICAgICAgICAgZmxleEZyYWN0aW9uID0gc3RkOjpt
YXgoZmxleEZyYWN0aW9uLCBmaW5kRnJVbml0U2l6ZShzcGFuLCBsZWZ0T3ZlclNwYWNlKSk7Ci0g
ICAgICAgIH0KKyAgICAgICAgYWNjdW11bGF0ZUZsZXhGcmFjdGlvbihmbGV4RnJhY3Rpb24sIGl0
ZXJhdG9yLCBkaXJlY3Rpb24sIGl0ZW1zU2V0KTsKICAgICB9CiAKICAgICByZXR1cm4gZmxleEZy
YWN0aW9uOwpAQCAtMTIwOSw2ICsxMjIyLDMwIEBAIHZvaWQgR3JpZFRyYWNrU2l6aW5nQWxnb3Jp
dGhtOjppbml0aWFsaXplVHJhY2tTaXplcygpCiAgICAgfQogfQogCit2b2lkIEdyaWRUcmFja1Np
emluZ0FsZ29yaXRobTo6YWNjdW11bGF0ZUludHJpbnNpY1NpemVzRm9yVHJhY2soR3JpZFRyYWNr
JiB0cmFjaywgR3JpZEl0ZXJhdG9yJiBpdGVyYXRvciwgVmVjdG9yPEdyaWRJdGVtV2l0aFNwYW4+
JiBpdGVtc1NvcnRlZEJ5SW5jcmVhc2luZ1NwYW4sIFZlY3RvcjxHcmlkSXRlbVdpdGhTcGFuPiYg
aXRlbXNDcm9zc2luZ0ZsZXhpYmxlVHJhY2tzLCBIYXNoU2V0PFJlbmRlckJveCo+JiBpdGVtc1Nl
dCkKK3sKKyAgICB3aGlsZSAoYXV0byogZ3JpZEl0ZW0gPSBpdGVyYXRvci5uZXh0R3JpZEl0ZW0o
KSkgeworICAgICAgICBib29sIGlzTmV3RW50cnkgPSBpdGVtc1NldC5hZGQoZ3JpZEl0ZW0pLmlz
TmV3RW50cnk7CisgICAgICAgIGlmIChpczxSZW5kZXJHcmlkPihncmlkSXRlbSkgJiYgZG93bmNh
c3Q8UmVuZGVyR3JpZD4oZ3JpZEl0ZW0pLT5pc1N1YmdyaWRJblBhcmVudERpcmVjdGlvbihpdGVy
YXRvci5kaXJlY3Rpb24oKSkpIHsKKyAgICAgICAgICAgIFJlbmRlckdyaWQqIGlubmVyID0gZG93
bmNhc3Q8UmVuZGVyR3JpZD4oZ3JpZEl0ZW0pOworCisgICAgICAgICAgICBHcmlkSXRlcmF0b3Ig
Y2hpbGRJdGVyYXRvciA9IEdyaWRJdGVyYXRvcjo6Y3JlYXRlRm9yU3ViZ3JpZCgqaW5uZXIsIGl0
ZXJhdG9yKTsKKyAgICAgICAgICAgIGFjY3VtdWxhdGVJbnRyaW5zaWNTaXplc0ZvclRyYWNrKHRy
YWNrLCBjaGlsZEl0ZXJhdG9yLCBpdGVtc1NvcnRlZEJ5SW5jcmVhc2luZ1NwYW4sIGl0ZW1zQ3Jv
c3NpbmdGbGV4aWJsZVRyYWNrcywgaXRlbXNTZXQpOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCFpc05ld0VudHJ5KQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIEdyaWRTcGFuIHNwYW4gPSBtX3JlbmRlckdyaWQtPmdyaWRTcGFuRm9yQ2hpbGQo
KmdyaWRJdGVtLCBtX2RpcmVjdGlvbik7CisKKyAgICAgICAgaWYgKHNwYW5uaW5nSXRlbUNyb3Nz
ZXNGbGV4aWJsZVNpemVkVHJhY2tzKHNwYW4pKQorICAgICAgICAgICAgaXRlbXNDcm9zc2luZ0Zs
ZXhpYmxlVHJhY2tzLmFwcGVuZChHcmlkSXRlbVdpdGhTcGFuKCpncmlkSXRlbSwgc3BhbikpOwor
ICAgICAgICBlbHNlIGlmIChzcGFuLmludGVnZXJTcGFuKCkgPT0gMSkKKyAgICAgICAgICAgIHNp
emVUcmFja1RvRml0Tm9uU3Bhbm5pbmdJdGVtKHNwYW4sICpncmlkSXRlbSwgdHJhY2spOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBpdGVtc1NvcnRlZEJ5SW5jcmVhc2luZ1NwYW4uYXBwZW5k
KEdyaWRJdGVtV2l0aFNwYW4oKmdyaWRJdGVtLCBzcGFuKSk7CisgICAgfQorfQorCiB2b2lkIEdy
aWRUcmFja1NpemluZ0FsZ29yaXRobTo6cmVzb2x2ZUludHJpbnNpY1RyYWNrU2l6ZXMoKQogewog
ICAgIFZlY3RvcjxHcmlkVHJhY2s+JiBhbGxUcmFja3MgPSB0cmFja3MobV9kaXJlY3Rpb24pOwpA
QCAtMTIyOCwyMiArMTI2NSwxMyBAQCB2b2lkIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6cmVz
b2x2ZUludHJpbnNpY1RyYWNrU2l6ZXMoKQogICAgIFZlY3RvcjxHcmlkSXRlbVdpdGhTcGFuPiBp
dGVtc1NvcnRlZEJ5SW5jcmVhc2luZ1NwYW47CiAgICAgVmVjdG9yPEdyaWRJdGVtV2l0aFNwYW4+
IGl0ZW1zQ3Jvc3NpbmdGbGV4aWJsZVRyYWNrczsKICAgICBIYXNoU2V0PFJlbmRlckJveCo+IGl0
ZW1zU2V0OworCiAgICAgaWYgKG1fZ3JpZC5oYXNHcmlkSXRlbXMoKSkgewogICAgICAgICBmb3Ig
KGF1dG8gdHJhY2tJbmRleCA6IG1fY29udGVudFNpemVkVHJhY2tzSW5kZXgpIHsKICAgICAgICAg
ICAgIEdyaWRJdGVyYXRvciBpdGVyYXRvcihtX2dyaWQsIG1fZGlyZWN0aW9uLCB0cmFja0luZGV4
KTsKICAgICAgICAgICAgIEdyaWRUcmFjayYgdHJhY2sgPSBhbGxUcmFja3NbdHJhY2tJbmRleF07
CiAKLSAgICAgICAgICAgIHdoaWxlIChhdXRvKiBncmlkSXRlbSA9IGl0ZXJhdG9yLm5leHRHcmlk
SXRlbSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZW1zU2V0LmFkZChncmlkSXRlbSkuaXNO
ZXdFbnRyeSkgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmlkU3BhbiYgc3BhbiA9IG1f
Z3JpZC5ncmlkSXRlbVNwYW4oKmdyaWRJdGVtLCBtX2RpcmVjdGlvbik7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChzcGFubmluZ0l0ZW1Dcm9zc2VzRmxleGlibGVTaXplZFRyYWNrcyhzcGFuKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zQ3Jvc3NpbmdGbGV4aWJsZVRyYWNrcy5hcHBl
bmQoR3JpZEl0ZW1XaXRoU3BhbigqZ3JpZEl0ZW0sIHNwYW4pKTsKLSAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoc3Bhbi5pbnRlZ2VyU3BhbigpID09IDEpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBzaXplVHJhY2tUb0ZpdE5vblNwYW5uaW5nSXRlbShzcGFuLCAqZ3JpZEl0ZW0sIHRyYWNr
KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgaXRl
bXNTb3J0ZWRCeUluY3JlYXNpbmdTcGFuLmFwcGVuZChHcmlkSXRlbVdpdGhTcGFuKCpncmlkSXRl
bSwgc3BhbikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGFjY3VtdWxhdGVJbnRyaW5zaWNTaXplc0ZvclRyYWNrKHRyYWNrLCBpdGVyYXRvciwgaXRlbXNT
b3J0ZWRCeUluY3JlYXNpbmdTcGFuLCBpdGVtc0Nyb3NzaW5nRmxleGlibGVUcmFja3MsIGl0ZW1z
U2V0KTsKICAgICAgICAgfQogICAgICAgICBzdGQ6OnNvcnQoaXRlbXNTb3J0ZWRCeUluY3JlYXNp
bmdTcGFuLmJlZ2luKCksIGl0ZW1zU29ydGVkQnlJbmNyZWFzaW5nU3Bhbi5lbmQoKSk7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0Fs
Z29yaXRobS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29y
aXRobS5oCmluZGV4IDU5NGQ1ZmFlOWFhY2FlZWNhNTBkOTAzOWRlMTY2ZTM0NDMzNWQxMTguLmMw
N2U1Mzg2ODE0MmI0M2RkZDhhYTY4ZjEwMDZiN2Y2ZWI2ZGI1M2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tTaXppbmdBbGdvcml0aG0uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmgKQEAgLTU1LDYg
KzU1LDcgQEAgZW51bSBjbGFzcyBTcGFjZURpc3RyaWJ1dGlvbkxpbWl0IDogdWludDhfdCAgewog
fTsKIAogY2xhc3MgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtU3RyYXRlZ3k7CitjbGFzcyBHcmlk
SXRlbVdpdGhTcGFuOwogCiBjbGFzcyBHcmlkVHJhY2sgewogcHVibGljOgpAQCAtMTIxLDYgKzEy
Miw4IEBAIHB1YmxpYzoKICAgICAvLyBhbmQgZW5jYXBzdWxhdGUgYW55IGFjY2VzcyBpbiB0aGUg
YWxnb3JpdGhtIGNsYXNzLgogICAgIEdyaWQmIG11dGFibGVHcmlkKCkgY29uc3QgeyByZXR1cm4g
bV9ncmlkOyB9CiAKKyAgICBjb25zdCBSZW5kZXJHcmlkKiByZW5kZXJHcmlkKCkgeyByZXR1cm4g
bV9yZW5kZXJHcmlkOyB9OworCiAgICAgTGF5b3V0VW5pdCBtaW5Db250ZW50U2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWluQ29udGVudFNpemU7IH07CiAgICAgTGF5b3V0VW5pdCBtYXhDb250ZW50
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4Q29udGVudFNpemU7IH07CiAKQEAgLTE5Myw2ICsx
OTYsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgc3RyZXRjaEZsZXhpYmxlVHJhY2tzKHN0ZDo6b3B0
aW9uYWw8TGF5b3V0VW5pdD4gZnJlZVNwYWNlKTsKICAgICB2b2lkIHN0cmV0Y2hBdXRvVHJhY2tz
KCk7CiAKKyAgICB2b2lkIGFjY3VtdWxhdGVJbnRyaW5zaWNTaXplc0ZvclRyYWNrKEdyaWRUcmFj
ayYsIEdyaWRJdGVyYXRvciYsIFZlY3RvcjxHcmlkSXRlbVdpdGhTcGFuPiYgaXRlbXNTb3J0ZWRC
eUluY3JlYXNpbmdTcGFuLCBWZWN0b3I8R3JpZEl0ZW1XaXRoU3Bhbj4mIGl0ZW1zQ3Jvc3NpbmdG
bGV4aWJsZVRyYWNrcywgSGFzaFNldDxSZW5kZXJCb3gqPiYgaXRlbXNTZXQpOworCiAgICAgYm9v
bCBjb3B5VXNlZFRyYWNrU2l6ZXNGb3JTdWJncmlkKCk7CiAKICAgICAvLyBTdGF0ZSBtYWNoaW5l
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCmluZGV4IDNjZmFjZDM1OGFk
MWRhOWM4OWRhNjMwZTkxZjNkMDc1MGUwNjI2MzIuLmM1NjEzYzI0MDIyOGQ4ZTM3ODAyYzNmZjdm
MGMzMjU0ZjdhMWE1YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJHcmlkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAK
QEAgLTY0Nyw2ICs2NDcsMjYgQEAgdW5zaWduZWQgUmVuZGVyR3JpZDo6Y2xhbXBBdXRvUmVwZWF0
VHJhY2tzKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sIHUKICAgICByZXR1cm4g
c3RkOjptaW4oYXV0b1JlcGVhdFRyYWNrcywgbWF4VHJhY2tzIC0gaW5zZXJ0aW9uUG9pbnQpOwog
fQogCit2b2lkIFJlbmRlckdyaWQ6OnBsYWNlSXRlbXMoKQoreworICAgIHVwZGF0ZUxvZ2ljYWxX
aWR0aCgpOworCisgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVTcGFjZUZvckNvbHVtbnMgPSBhdmFp
bGFibGVMb2dpY2FsV2lkdGgoKTsKKyAgICBwbGFjZUl0ZW1zT25HcmlkKG1fdHJhY2tTaXppbmdB
bGdvcml0aG0sIGF2YWlsYWJsZVNwYWNlRm9yQ29sdW1ucyk7Cit9CisKK3N0YXRpYyBHcmlkQXJl
YSBpbnNlcnRJbnRvR3JpZChHcmlkJiBncmlkLCBSZW5kZXJCb3gmIGNoaWxkLCBjb25zdCBHcmlk
QXJlYSYgYXJlYSkKK3sKKyAgICBHcmlkQXJlYSBjbGFtcGVkID0gZ3JpZC5pbnNlcnQoY2hpbGQs
IGFyZWEpOworICAgIGlmICghaXM8UmVuZGVyR3JpZD4oY2hpbGQpKQorICAgICAgICByZXR1cm4g
Y2xhbXBlZDsKKworICAgIFJlbmRlckdyaWQmIHJlbmRlckdyaWQgPSBkb3duY2FzdDxSZW5kZXJH
cmlkPihjaGlsZCk7CisgICAgaWYgKHJlbmRlckdyaWQuaXNTdWJncmlkUm93cygpIHx8IHJlbmRl
ckdyaWQuaXNTdWJncmlkQ29sdW1ucygpKQorICAgICAgICByZW5kZXJHcmlkLnBsYWNlSXRlbXMo
KTsKKyAgICByZXR1cm4gY2xhbXBlZDsKK30KKwogLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZl
IHRvIHBhc3MgdGhlIGF2YWlsYWJsZSBsb2dpY2FsIHdpZHRoIGFzIGFyZ3VtZW50LiBUaGUgcHJv
YmxlbSBpcyB0aGF0CiAvLyBhdmFpbGFibGVMb2dpY2FsV2lkdGgoKSBkb2VzIGFsd2F5cyByZXR1
cm4gYSB2YWx1ZSBldmVuIGlmIHdlIGNhbm5vdCByZXNvbHZlIGl0IGxpa2Ugd2hlbgogLy8gY29t
cHV0aW5nIHRoZSBpbnRyaW5zaWMgc2l6ZSAocHJlZmVycmVkIHdpZHRocykuIFRoYXQncyB3aHkg
d2UgcGFzcyB0aGUgcmVzcG9uc2liaWxpdHkgdG8gdGhlCkBAIC03MDAsNyArNzIwLDcgQEAgdm9p
ZCBSZW5kZXJHcmlkOjpwbGFjZUl0ZW1zT25HcmlkKEdyaWRUcmFja1NpemluZ0FsZ29yaXRobSYg
YWxnb3JpdGhtLCBzdGQ6Om9wdGkKICAgICAgICAgICAgICAgICBzcGVjaWZpZWRNYWpvckF4aXNB
dXRvR3JpZEl0ZW1zLmFwcGVuZChjaGlsZCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQotICAgICAgICBncmlkLmluc2VydCgqY2hpbGQsIHsgYXJlYS5yb3dzLCBhcmVhLmNvbHVt
bnMgfSk7CisgICAgICAgIGluc2VydEludG9HcmlkKGdyaWQsICpjaGlsZCwgeyBhcmVhLnJvd3Ms
IGFyZWEuY29sdW1ucyB9KTsKICAgICB9CiAKICNpZiBBU1NFUlRfRU5BQkxFRApAQCAtODMwLDcg
Kzg1MCw3IEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VTcGVjaWZpZWRNYWpvckF4aXNJdGVtc09u
R3JpZChHcmlkJiBncmlkLCBjb25zdCBWZWN0b3I8UmVuCiAgICAgICAgIGlmICghZW1wdHlHcmlk
QXJlYSkKICAgICAgICAgICAgIGVtcHR5R3JpZEFyZWEgPSBjcmVhdGVFbXB0eUdyaWRBcmVhQXRT
cGVjaWZpZWRQb3NpdGlvbnNPdXRzaWRlR3JpZChncmlkLCAqYXV0b0dyaWRJdGVtLCBhdXRvUGxh
Y2VtZW50TWFqb3JBeGlzRGlyZWN0aW9uKCksIG1ham9yQXhpc1Bvc2l0aW9ucyk7CiAKLSAgICAg
ICAgKmVtcHR5R3JpZEFyZWEgPSBncmlkLmluc2VydCgqYXV0b0dyaWRJdGVtLCAqZW1wdHlHcmlk
QXJlYSk7CisgICAgICAgICplbXB0eUdyaWRBcmVhID0gaW5zZXJ0SW50b0dyaWQoZ3JpZCwgKmF1
dG9HcmlkSXRlbSwgKmVtcHR5R3JpZEFyZWEpOwogCiAgICAgICAgIGlmICghaXNHcmlkQXV0b0Zs
b3dEZW5zZSkKICAgICAgICAgICAgIG1pbm9yQXhpc0N1cnNvcnMuc2V0KG1ham9yQXhpc0luaXRp
YWxQb3NpdGlvbiwgaXNGb3JDb2x1bW5zID8gZW1wdHlHcmlkQXJlYS0+cm93cy5zdGFydExpbmUo
KSA6IGVtcHR5R3JpZEFyZWEtPmNvbHVtbnMuc3RhcnRMaW5lKCkpOwpAQCAtOTAyLDcgKzkyMiw3
IEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VBdXRvTWFqb3JBeGlzSXRlbU9uR3JpZChHcmlkJiBn
cmlkLCBSZW5kZXJCb3gmIGdyaWRJdGVtLCBBCiAgICAgICAgICAgICBlbXB0eUdyaWRBcmVhID0g
Y3JlYXRlRW1wdHlHcmlkQXJlYUF0U3BlY2lmaWVkUG9zaXRpb25zT3V0c2lkZUdyaWQoZ3JpZCwg
Z3JpZEl0ZW0sIGF1dG9QbGFjZW1lbnRNaW5vckF4aXNEaXJlY3Rpb24oKSwgR3JpZFNwYW46OnRy
YW5zbGF0ZWREZWZpbml0ZUdyaWRTcGFuKDAsIG1pbm9yQXhpc1NwYW5TaXplKSk7CiAgICAgfQog
Ci0gICAgZ3JpZC5pbnNlcnQoZ3JpZEl0ZW0sICplbXB0eUdyaWRBcmVhKTsKKyAgICAqZW1wdHlH
cmlkQXJlYSA9IGluc2VydEludG9HcmlkKGdyaWQsIGdyaWRJdGVtLCAqZW1wdHlHcmlkQXJlYSk7
CiAgICAgYXV0b1BsYWNlbWVudEN1cnNvci5maXJzdCA9IGVtcHR5R3JpZEFyZWEtPnJvd3Muc3Rh
cnRMaW5lKCk7CiAgICAgYXV0b1BsYWNlbWVudEN1cnNvci5zZWNvbmQgPSBlbXB0eUdyaWRBcmVh
LT5jb2x1bW5zLnN0YXJ0TGluZSgpOwogfQpAQCAtMTAxNSwxMyArMTAzNSwxNSBAQCB2b2lkIFJl
bmRlckdyaWQ6OmxheW91dEdyaWRJdGVtcygpCiAgICAgcG9wdWxhdGVHcmlkUG9zaXRpb25zRm9y
RGlyZWN0aW9uKEZvclJvd3MpOwogCiAgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gZmlyc3RD
aGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkgewotICAg
ICAgICAKICAgICAgICAgaWYgKG1fZ3JpZC5vcmRlckl0ZXJhdG9yKCkuc2hvdWxkU2tpcENoaWxk
KCpjaGlsZCkpIHsKICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkpCiAgICAgICAgICAgICAgICAgcHJlcGFyZUNoaWxkRm9yUG9zaXRpb25lZExheW91dCgqY2hp
bGQpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoaXM8
UmVuZGVyR3JpZD4oY2hpbGQpICYmIChkb3duY2FzdDxSZW5kZXJHcmlkPihjaGlsZCktPmlzU3Vi
Z3JpZENvbHVtbnMoKSB8fCBkb3duY2FzdDxSZW5kZXJHcmlkPihjaGlsZCktPmlzU3ViZ3JpZFJv
d3MoKSkpCisgICAgICAgICAgICBjaGlsZC0+c2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsK
KwogICAgICAgICAvLyBTZXR0aW5nIHRoZSBkZWZpbml0ZSBncmlkIGFyZWEncyBzaXplcy4gSXQg
bWF5IGltcGx5IHRoYXQgdGhlCiAgICAgICAgIC8vIGl0ZW0gbXVzdCBwZXJmb3JtIGEgbGF5b3V0
IGlmIGl0cyBhcmVhIGRpZmZlcnMgZnJvbSB0aGUgb25lCiAgICAgICAgIC8vIHVzZWQgZHVyaW5n
IHRoZSB0cmFjayBzaXppbmcgYWxnb3JpdGhtLgpAQCAtMTYzOCw2ICsxNjYwLDE0IEBAIGJvb2wg
UmVuZGVyR3JpZDo6aXNTdWJncmlkKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24p
IGNvbnN0CiAgICAgcmV0dXJuIGlzPFJlbmRlckdyaWQ+KHBhcmVudCgpKTsKIH0KIAorYm9vbCBS
ZW5kZXJHcmlkOjppc1N1YmdyaWRJblBhcmVudERpcmVjdGlvbihHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24gcGFyZW50RGlyZWN0aW9uKSBjb25zdAoreworICAgIGlmICghaXM8UmVuZGVyR3JpZD4o
cGFyZW50KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgR3JpZFRyYWNrU2l6aW5nRGly
ZWN0aW9uIGRpcmVjdGlvbiA9IEdyaWRMYXlvdXRGdW5jdGlvbnM6OmZsb3dBd2FyZURpcmVjdGlv
bkZvckNoaWxkKCpkb3duY2FzdDxSZW5kZXJHcmlkPihwYXJlbnQoKSksICp0aGlzLCBwYXJlbnRE
aXJlY3Rpb24pOworICAgIHJldHVybiBpc1N1YmdyaWQoZGlyZWN0aW9uKTsKK30KKwogTGF5b3V0
VW5pdCBSZW5kZXJHcmlkOjpncmlkQXJlYUJyZWFkdGhGb3JPdXRPZkZsb3dDaGlsZChjb25zdCBS
ZW5kZXJCb3gmIGNoaWxkLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKQogewog
ICAgIEFTU0VSVChjaGlsZC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckdyaWQuaAppbmRleCBiMGM5ODI3MDQyMzU4MTkzN2Y2Zjg1ZWU5NGFlMWJi
NzBjOTI2OGM4Li43YTg0ODQyNjQxZjRiN2Q4MDViYmE0Mjg4OWViYjY3OWZiNWY3MGFiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmgKQEAgLTk1LDYgKzk1LDcgQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgcmV0dXJuIGlzU3ViZ3JpZChGb3JDb2x1bW5zKTsKICAgICB9Cisg
ICAgYm9vbCBpc1N1YmdyaWRJblBhcmVudERpcmVjdGlvbihHcmlkVHJhY2tTaXppbmdEaXJlY3Rp
b24gcGFyZW50RGlyZWN0aW9uKSBjb25zdDsKIAogICAgIGNvbnN0IEdyaWQmIGN1cnJlbnRHcmlk
KCkgY29uc3QKICAgICB7CkBAIC0xMDYsNiArMTA3LDggQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gbnVtVHJhY2tzKGRpcmVjdGlvbiwgbV9ncmlkKTsKICAgICB9CiAKKyAgICB2b2lkIHBsYWNl
SXRlbXMoKTsKKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgR3JpZFRyYWNrU2l6aW5nQWxn
b3JpdGhtOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggYWUyNzllYTZkOWU0MGVjY2YzOTQ3Zjg4NjA3N2U1NDRiNjU0OWZm
NC4uOWRkNWFmZjYxM2MxNDdkYWZhYzEyYjZjMDZlYTBjMWRmMTdiODRkNCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE0IEBACisyMDIyLTAyLTE1ICBNYXR0IFdvb2Ryb3cgIDxtYXR0d29vZHJvd0BhcHBsZS5j
b20+CisKKyAgICAgICAgSW5jbHVkZSBzdWIgZ3JpZCBpdGVtcyBpbiB0aGUgdHJhY2sgc2l6aW5n
IGFsZ29yaXRobSBvZiB0aGUgb3V0ZXIgZ3JpZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2MzM3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGVhbiBK
YWNrc29uLgorCisgICAgICAgIEV4aXN0aW5nIHRlc3QgZXhwZWN0YXRpb25zIHVwZGF0ZWQuCisK
KyAgICAgICAgKiBUZXN0RXhwZWN0YXRpb25zOgorCiAyMDIyLTAyLTE3ICBUcnVpdHQgU2F2ZWxs
ICA8dHNhdmVsbEBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHRoZSBDYXRhbGluYSBzcGVj
aWZpYyBleHBlY3RhdGlvbiBhZGRlZCBpbiByMjg5ODM0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwppbmRleCBm
NGYyODFiZjczYmY5MmUzZjMzNWZiNTM3YTEzY2QxZjc0ZTZlZTE2Li42MzA4MGFlZWE3NjU3ZmMx
MWE0Nzc1MDg0YTE3MTQ1MzE0MmU0NDE5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9UZXN0RXhw
ZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTE0MDcsNiAr
MTQwNyw3IEBAIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1ncmlkL3N1
YmdyaWQvZ3JpZC1nYXAtbGFyZ2VyLTAwMi5odG1sIFsKIGltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQvZ3JpZC1nYXAtc21hbGxlci0wMDEuaHRtbCBb
IEltYWdlT25seUZhaWx1cmUgXQogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3Mv
Y3NzLWdyaWQvc3ViZ3JpZC9pdGVtLXBlcmNlbnRhZ2UtaGVpZ2h0LTAwMS5odG1sIFsgSW1hZ2VP
bmx5RmFpbHVyZSBdCiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZ3Jp
ZC9zdWJncmlkL2xpbmUtbmFtZXMtMDA3Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQvbGluZS1uYW1l
cy0wMDguaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9vcnRob2dvbmFsLXdyaXRpbmctbW9kZS0wMDEu
aHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9vcnRob2dvbmFsLXdyaXRpbmctbW9kZS0wMDIuaHRtbCBb
IEltYWdlT25seUZhaWx1cmUgXQogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3Mv
Y3NzLWdyaWQvc3ViZ3JpZC9vcnRob2dvbmFsLXdyaXRpbmctbW9kZS0wMDMuaHRtbCBbIEltYWdl
T25seUZhaWx1cmUgXQpAQCAtMTQxNSw3ICsxNDE2LDYgQEAgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9wYXJlbnQtcmVwZWF0LWF1dG8tZml0LTAw
MS4KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQv
cGFyZW50LXJlcGVhdC1hdXRvLWZpdC0wMDIuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWdyaWQvc3ViZ3JpZC9yZXBlYXQt
YXV0by1maWxsLTAwMy5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiBpbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZ3JpZC9zdWJncmlkL3JlcGVhdC1hdXRvLWZpbGwtMDA0
Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KLWltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQvc3ViZ3JpZC1pdGVtLWJsb2NrLXNpemUtMDAxLmh0bWwg
WyBJbWFnZU9ubHlGYWlsdXJlIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3Nz
L2Nzcy1ncmlkL3N1YmdyaWQvc3ViZ3JpZC1tYnAtb3ZlcmZsb3ctMDAxLmh0bWwgWyBJbWFnZU9u
bHlGYWlsdXJlIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1ncmlk
L3N1YmdyaWQvc3ViZ3JpZC1tYnAtb3ZlcmZsb3ctMDAyLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJl
IF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1ncmlkL3N1YmdyaWQv
c3ViZ3JpZC1tYnAtb3ZlcmZsb3ctMDAzLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0K
</data>

          </attachment>
      

    </bug>

</bugzilla>