<?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>218620</bug_id>
          
          <creation_ts>2020-11-05 09:06:13 -0800</creation_ts>
          <short_desc>[LFC][Integration] localCaretOffset should use iterator</short_desc>
          <delta_ts>2020-11-06 06:34:25 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cfleizach</cc>
    
    <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mifenton</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>samuel_white</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1704887</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-11-05 09:06:13 -0800</bug_when>
    <thetext>More inline iterator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1704903</commentid>
    <comment_count>1</comment_count>
      <attachid>413314</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-11-05 09:34:54 -0800</bug_when>
    <thetext>Created attachment 413314
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1704917</commentid>
    <comment_count>2</comment_count>
      <attachid>413320</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-11-05 10:25:03 -0800</bug_when>
    <thetext>Created attachment 413320
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1704924</commentid>
    <comment_count>3</comment_count>
      <attachid>413321</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-11-05 10:47:03 -0800</bug_when>
    <thetext>Created attachment 413321
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705192</commentid>
    <comment_count>4</comment_count>
      <attachid>413421</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-11-06 04:33:24 -0800</bug_when>
    <thetext>Created attachment 413421
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705206</commentid>
    <comment_count>5</comment_count>
      <attachid>413427</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-11-06 05:56:32 -0800</bug_when>
    <thetext>Created attachment 413427
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705213</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-11-06 06:33:16 -0800</bug_when>
    <thetext>Committed r269510: &lt;https://trac.webkit.org/changeset/269510&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 413427.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705214</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-11-06 06:34:25 -0800</bug_when>
    <thetext>&lt;rdar://problem/71117646&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413314</attachid>
            <date>2020-11-05 09:34:54 -0800</date>
            <delta_ts>2020-11-05 10:25:03 -0800</delta_ts>
            <desc>patch</desc>
            <filename>lfc-localCaretOffset.patch</filename>
            <type>text/plain</type>
            <size>37861</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyMThlM2I4ZDBmMzguLjljOGYzOTc4MGRiMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDc2IEBACisyMDIwLTExLTA1ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gbG9jYWxDYXJldE9mZnNldCBzaG91bGQg
dXNlIGl0ZXJhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTg2MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBDb252ZXJ0IGFsbCBsb2NhbENhcmV0UmVjdCBpbXBsZW1lbnRhdGlvbnMgdG8gdXNlIGl0
ZXJhdG9yLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmxvY2FsQ2FyZXRSZWN0Rm9yQ2hhcmFjdGVy
T2Zmc2V0KToKKyAgICAgICAgKiBlZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyZWRQb3NpdGlvbjo6YWJzb2x1dGVSZWN0IGNvbnN0KToKKyAgICAg
ICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaXNp
YmxlUG9zaXRpb246OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvaW50
ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlBhdGhMaW5lOjpjb21wdXRlQ2FyZXRSZWN0IGNvbnN0
KToKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRl
cmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpQYXRoTGluZTo6
bG9naWNhbExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246
OlBhdGhMaW5lOjpsb2dpY2FsUmlnaHQgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3Jh
dGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvckxlZ2FjeVBhdGguaDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lSXRlcmF0b3JMZWdhY3lQYXRoOjpsb2dp
Y2FsTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGlu
ZUl0ZXJhdG9yTGVnYWN5UGF0aDo6bG9naWNhbFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKiBsYXlv
dXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmg6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUl0ZXJhdG9yTW9kZXJu
UGF0aDo6bG9naWNhbExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdy
YXRpb246OkxpbmVJdGVyYXRvck1vZGVyblBhdGg6OmxvZ2ljYWxSaWdodCBjb25zdCk6CisgICAg
ICAgICogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpQYXRoVGV4dFJ1bjo6cG9zaXRp
b25Gb3JPZmZzZXQgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJ
bnRlZ3JhdGlvblJ1bkl0ZXJhdG9yTGVnYWN5UGF0aC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yTGVnYWN5UGF0aDo6b2Zmc2V0Rm9yUG9zaXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9y
TGVnYWN5UGF0aDo6cG9zaXRpb25Gb3JPZmZzZXQgY29uc3QpOgorICAgICAgICAqIGxheW91dC9p
bnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yTW9kZXJuUGF0aC5oOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yTW9kZXJuUGF0aDo6
cG9zaXRpb25Gb3JPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdy
YXRpb246OlJ1bkl0ZXJhdG9yTW9kZXJuUGF0aDo6c2VsZWN0aW9uUmVjdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRlcmF0b3JNb2Rlcm5QYXRoOjpj
bGFtcGVkT2Zmc2V0IGNvbnN0KToKKworICAgICAgICBNYWtlIGNsYW1wZWRPZmZzZXQgcmV0dXJu
IDAgYmFzZWQgb2Zmc2V0IGxpa2UgaXQgZG9lcyBpbiBJbmxpbmVUZXh0Qm94IHRvIG1ha2UgcG9y
dGluZyBlYXNpZXIuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2NhbENhcmV0UmVjdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
TW9kZWxPYmplY3Q6OmxvY2FsQ2FyZXRSZWN0Rm9yRW1wdHlFbGVtZW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpsb2NhbENhcmV0UmVjdEZvckVtcHR5
RWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlcklubGluZTo6bG9jYWxDYXJldFJlY3QpOiBEZWxldGVkLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlu
ZUJyZWFrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVCcmVhazo6bG9jYWxDYXJl
dFJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGluZUJyZWFrOjpsaW5lc0Jv
dW5kaW5nQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVCcmVhazo6bG9j
YWxDYXJldFJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQnJl
YWsuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck9iamVjdDo6bG9jYWxDYXJldFJlY3QgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyT2JqZWN0Ojpsb2NhbENhcmV0UmVjdCk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmxvY2FsQ2FyZXRSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdJbmxpbmVUZXh0OjpjcmVhdGVUZXh0Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R0lubGluZVRleHQ6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR0lubGluZVRleHQ6OmxvY2FsQ2FyZXRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaDoKKwogMjAyMC0xMS0wNCAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KIAogICAgICAgICBbR1BVIFByb2Nlc3NdIE1v
dmUgdGhlIGludGVybmFsIEdQVSByZW5kZXJpbmcgZmxhZ3MgZnJvbSBXZWJQYWdlIHRvIFdlYlBy
b2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RD
YWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3Bw
CmluZGV4IGZmMWUxZjkxNDI4YS4uOTE5YzFkZjViYjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTg0LDYgKzg0LDcgQEAKICNpbmNs
dWRlICJIVE1MU2VsZWN0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSW5saW5lRWxlbWVudEJveC5oIgorI2luY2x1ZGUgIklubGlu
ZVJ1bkFuZE9mZnNldC5oIgogI2luY2x1ZGUgIk1hdGhNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKQEAgLTI4OTMsMTQgKzI4OTQsMTQgQEAgTGF5b3V0
UmVjdCBBWE9iamVjdENhY2hlOjpsb2NhbENhcmV0UmVjdEZvckNoYXJhY3Rlck9mZnNldChSZW5k
ZXJPYmplY3QqJiByZW5kZXIKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gSW50UmVj
dCgpOwogCi0gICAgYXV0byBbaW5saW5lQm94LCBjYXJldE9mZnNldF0gPSBtYWtlQ29udGFpbmVy
T2Zmc2V0UG9zaXRpb24ocmFuZ2UtPnN0YXJ0KS5pbmxpbmVCb3hBbmRPZmZzZXQoQWZmaW5pdHk6
OkRvd25zdHJlYW0pOwotICAgIGlmIChpbmxpbmVCb3gpCi0gICAgICAgIHJlbmRlcmVyID0gJmlu
bGluZUJveC0+cmVuZGVyZXIoKTsKKyAgICBhdXRvIHJ1bkFuZE9mZnNldCA9IG1ha2VDb250YWlu
ZXJPZmZzZXRQb3NpdGlvbihyYW5nZS0+c3RhcnQpLmlubGluZVJ1bkFuZE9mZnNldChBZmZpbml0
eTo6RG93bnN0cmVhbSk7CisgICAgaWYgKHJ1bkFuZE9mZnNldC5ydW4pCisgICAgICAgIHJlbmRl
cmVyID0gY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPigmcnVuQW5kT2Zmc2V0LnJ1bi0+cmVuZGVy
ZXIoKSk7CiAKLSAgICBpZiAoaXM8UmVuZGVyTGluZUJyZWFrPihyZW5kZXJlcikgJiYgZG93bmNh
c3Q8UmVuZGVyTGluZUJyZWFrPihyZW5kZXJlciktPmlubGluZUJveFdyYXBwZXIoKSAhPSBpbmxp
bmVCb3gpCisgICAgaWYgKGlzPFJlbmRlckxpbmVCcmVhaz4ocmVuZGVyZXIpICYmIExheW91dElu
dGVncmF0aW9uOjpydW5Gb3IoZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFrPigqcmVuZGVyZXIpKSAh
PSBydW5BbmRPZmZzZXQucnVuKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAgcmV0
dXJuIHJlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0KTsKKyAg
ICByZXR1cm4gcmVuZGVyZXItPmxvY2FsQ2FyZXRSZWN0KHJ1bkFuZE9mZnNldCk7CiB9CiAKIElu
dFJlY3QgQVhPYmplY3RDYWNoZTo6YWJzb2x1dGVDYXJldEJvdW5kc0ZvckNoYXJhY3Rlck9mZnNl
dChjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uY3BwCmluZGV4IGQzMzcwZDNlYjlkMi4uYWYzMjdk
NTY0ZjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQb3NpdGlvbi5jcHAK
QEAgLTIyOSw3ICsyMjksNyBAQCBJbnRSZWN0IFJlbmRlcmVkUG9zaXRpb246OmFic29sdXRlUmVj
dChMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpIGNvbnN0CiAgICAgaWYgKGlzTnVs
bCgpKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAgSW50UmVjdCBsb2NhbFJlY3Qg
PSBzbmFwcGVkSW50UmVjdChjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KG1fcmVuZGVyZXIpLT5s
b2NhbENhcmV0UmVjdChtX3J1bi0+bGVnYWN5SW5saW5lQm94KCksIG1fb2Zmc2V0LCBleHRyYVdp
ZHRoVG9FbmRPZkxpbmUpKTsKKyAgICBJbnRSZWN0IGxvY2FsUmVjdCA9IHNuYXBwZWRJbnRSZWN0
KGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4obV9yZW5kZXJlciktPmxvY2FsQ2FyZXRSZWN0KHsg
bV9ydW4sIG1fb2Zmc2V0IH0sIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkpOwogICAgIHJldHVybiBs
b2NhbFJlY3QgPT0gSW50UmVjdCgpID8gSW50UmVjdCgpIDogbV9yZW5kZXJlci0+bG9jYWxUb0Fi
c29sdXRlUXVhZChGbG9hdFJlY3QobG9jYWxSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCmluZGV4IDAx
ZWRkNTNjMDc0ZC4uMmM2MWNmNjExY2Q3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNp
YmxlUG9zaXRpb24uY3BwCkBAIC02MzgsMTIgKzYzOCwxMiBAQCBhdXRvIFZpc2libGVQb3NpdGlv
bjo6bG9jYWxDYXJldFJlY3QoKSBjb25zdCAtPiBMb2NhbENhcmV0UmVjdAogICAgIGlmICghbm9k
ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gW2lubGluZUJveCwgY2FyZXRPZmZz
ZXRdID0gaW5saW5lQm94QW5kT2Zmc2V0KCk7Ci0gICAgYXV0byByZW5kZXJlciA9IGlubGluZUJv
eCA/ICZpbmxpbmVCb3gtPnJlbmRlcmVyKCkgOiBub2RlLT5yZW5kZXJlcigpOworICAgIGF1dG8g
cnVuQW5kT2Zmc2V0ID0gaW5saW5lUnVuQW5kT2Zmc2V0KCk7CisgICAgYXV0byByZW5kZXJlciA9
IHJ1bkFuZE9mZnNldC5ydW4gPyAmcnVuQW5kT2Zmc2V0LnJ1bi0+cmVuZGVyZXIoKSA6IG5vZGUt
PnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIHsgfTsKIAot
ICAgIHJldHVybiB7IHJlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChpbmxpbmVCb3gsIGNhcmV0T2Zm
c2V0KSwgcmVuZGVyZXIgfTsKKyAgICByZXR1cm4geyByZW5kZXJlci0+bG9jYWxDYXJldFJlY3Qo
cnVuQW5kT2Zmc2V0KSwgY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihyZW5kZXJlcikgfTsKIH0K
IAogSW50UmVjdCBWaXNpYmxlUG9zaXRpb246OmFic29sdXRlQ2FyZXRCb3VuZHMoYm9vbCogaW5z
aWRlRml4ZWQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmNwcAppbmRl
eCBlNzE3ZWVmNGRmNWUuLjcxOTg3YjQwOWU0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5l
SXRlcmF0b3IuY3BwCkBAIC0xNzksNiArMTc5LDU5IEBAIGludCBQYXRoTGluZTo6YmxvY2tEaXJl
Y3Rpb25Qb2ludEluTGluZSgpIGNvbnN0CiAgICAgcmV0dXJuICFjb250YWluaW5nQmxvY2soKS5z
dHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkgPyBzdGQ6Om1heCh0b3AoKSwgc2Vs
ZWN0aW9uVG9wKCkpIDogc3RkOjptaW4oYm90dG9tKCksIHNlbGVjdGlvbkJvdHRvbSgpKTsKIH0K
IAorSW50UmVjdCBQYXRoTGluZTo6Y29tcHV0ZUNhcmV0UmVjdChmbG9hdCBsb2dpY2FsTGVmdFBv
c2l0aW9uLCB1bnNpZ25lZCBjYXJldFdpZHRoLCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRP
ZkxpbmUpIGNvbnN0Cit7CisgICAgaW50IGhlaWdodCA9IHNlbGVjdGlvbkJvdHRvbSgpIC0gc2Vs
ZWN0aW9uVG9wKCk7CisgICAgaW50IHRvcCA9IHNlbGVjdGlvblRvcCgpOworCisgICAgLy8gRGlz
dHJpYnV0ZSB0aGUgY2FyZXQncyB3aWR0aCB0byBlaXRoZXIgc2lkZSBvZiB0aGUgb2Zmc2V0Lgor
ICAgIGZsb2F0IGxlZnQgPSBsb2dpY2FsTGVmdFBvc2l0aW9uOworICAgIGludCBjYXJldFdpZHRo
TGVmdE9mT2Zmc2V0ID0gY2FyZXRXaWR0aCAvIDI7CisgICAgbGVmdCAtPSBjYXJldFdpZHRoTGVm
dE9mT2Zmc2V0OworICAgIGludCBjYXJldFdpZHRoUmlnaHRPZk9mZnNldCA9IGNhcmV0V2lkdGgg
LSBjYXJldFdpZHRoTGVmdE9mT2Zmc2V0OworICAgIGxlZnQgPSByb3VuZGYobGVmdCk7CisKKyAg
ICBmbG9hdCBsaW5lTGVmdCA9IGxvZ2ljYWxMZWZ0KCk7CisgICAgZmxvYXQgbGluZVJpZ2h0ID0g
bG9naWNhbFJpZ2h0KCk7CisKKyAgICBpZiAoZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQorICAgICAg
ICAqZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gbGluZVJpZ2h0IC0gKGxlZnQgKyBjYXJldFdpZHRo
KTsKKworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBibG9ja1N0eWxlID0gY29udGFpbmluZ0Jsb2Nr
KCkuc3R5bGUoKTsKKworICAgIGJvb2wgcmlnaHRBbGlnbmVkID0gZmFsc2U7CisgICAgc3dpdGNo
IChibG9ja1N0eWxlLnRleHRBbGlnbigpKSB7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdo
dDoKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0OgorICAgICAgICByaWdodEFs
aWduZWQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okxl
ZnQ6CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0OgorICAgIGNhc2UgVGV4dEFs
aWduTW9kZTo6Q2VudGVyOgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0Q2VudGVyOgor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6CisgICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKKyAgICAgICAgcmlnaHRBbGlnbmVkID0gIWJsb2NrU3R5
bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRl
eHRBbGlnbk1vZGU6OkVuZDoKKyAgICAgICAgcmlnaHRBbGlnbmVkID0gYmxvY2tTdHlsZS5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGZsb2F0
IGxlZnRFZGdlID0gc3RkOjptaW48ZmxvYXQ+KDAsIGxpbmVMZWZ0KTsKKyAgICBmbG9hdCByaWdo
dEVkZ2UgPSBzdGQ6Om1heDxmbG9hdD4oY29udGFpbmluZ0Jsb2NrKCkubG9naWNhbFdpZHRoKCks
IGxpbmVSaWdodCk7CisKKyAgICBpZiAocmlnaHRBbGlnbmVkKSB7CisgICAgICAgIGxlZnQgPSBz
dGQ6Om1heChsZWZ0LCBsZWZ0RWRnZSk7CisgICAgICAgIGxlZnQgPSBzdGQ6Om1pbihsZWZ0LCBs
aW5lUmlnaHQgLSBjYXJldFdpZHRoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0ID0gc3Rk
OjptaW4obGVmdCwgcmlnaHRFZGdlIC0gY2FyZXRXaWR0aFJpZ2h0T2ZPZmZzZXQpOworICAgICAg
ICBsZWZ0ID0gc3RkOjptYXgobGVmdCwgbGluZUxlZnQpOworICAgIH0KKyAgICByZXR1cm4gYmxv
Y2tTdHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gSW50UmVjdChsZWZ0LCB0b3AsIGNh
cmV0V2lkdGgsIGhlaWdodCkgOiBJbnRSZWN0KHRvcCwgbGVmdCwgaGVpZ2h0LCBjYXJldFdpZHRo
KTsKK30KKwogfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5oCmluZGV4IGU0
ODc0NDE2MWFiMy4uOTk4YTg1ZTdiM2JmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0
b3IuaApAQCAtNTksOSArNTksMTIgQEAgcHVibGljOgogICAgIExheW91dFVuaXQgbGluZUJveEJv
dHRvbSgpIGNvbnN0OwogCiAgICAgZmxvYXQgeSgpIGNvbnN0OworICAgIGZsb2F0IGxvZ2ljYWxM
ZWZ0KCkgY29uc3Q7CisgICAgZmxvYXQgbG9naWNhbFJpZ2h0KCkgY29uc3Q7CiAgICAgZmxvYXQg
bG9naWNhbEhlaWdodCgpIGNvbnN0OwogCiAgICAgaW50IGJsb2NrRGlyZWN0aW9uUG9pbnRJbkxp
bmUoKSBjb25zdDsKKyAgICBJbnRSZWN0IGNvbXB1dGVDYXJldFJlY3QoZmxvYXQgbG9naWNhbExl
ZnRQb3NpdGlvbiwgdW5zaWduZWQgY2FyZXRXaWR0aCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRv
RW5kT2ZMaW5lKSBjb25zdDsKIAogICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29uc3Q7CiAKQEAg
LTE3Nyw2ICsxODAsMjAgQEAgaW5saW5lIGZsb2F0IFBhdGhMaW5lOjp5KCkgY29uc3QKICAgICB9
KTsKIH0KIAoraW5saW5lIGZsb2F0IFBhdGhMaW5lOjpsb2dpY2FsTGVmdCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0
aCkgeworICAgICAgICByZXR1cm4gcGF0aC5sb2dpY2FsTGVmdCgpOworICAgIH0pOworfQorCitp
bmxpbmUgZmxvYXQgUGF0aExpbmU6OmxvZ2ljYWxSaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0aCkgeworICAg
ICAgICByZXR1cm4gcGF0aC5sb2dpY2FsUmlnaHQoKTsKKyAgICB9KTsKK30KKwogaW5saW5lIGZs
b2F0IFBhdGhMaW5lOjpsb2dpY2FsSGVpZ2h0KCkgY29uc3QKIHsKICAgICByZXR1cm4gV1RGOjpz
d2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShjb25zdCBhdXRvJiBwYXRoKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5l
SXRlcmF0b3JMZWdhY3lQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24v
TGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JMZWdhY3lQYXRoLmgKaW5kZXggNmMyOWNjM2Yw
ZGZkLi42YzYyODllZGE2NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRl
Z3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvckxlZ2FjeVBhdGguaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRl
cmF0b3JMZWdhY3lQYXRoLmgKQEAgLTUzLDYgKzUzLDggQEAgcHVibGljOgogICAgIExheW91dFVu
aXQgbGluZUJveEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+bGluZUJv
eEJvdHRvbSgpOyB9CiAKICAgICBmbG9hdCB5KCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5l
Qm94LT55KCk7IH0KKyAgICBmbG9hdCBsb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9v
dElubGluZUJveC0+bG9naWNhbExlZnQoKTsgfQorICAgIGZsb2F0IGxvZ2ljYWxSaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+bG9naWNhbFJpZ2h0KCk7IH0KICAgICBmbG9h
dCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94LT5sb2dpY2Fs
SGVpZ2h0KCk7IH0KICAgICBib29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9v
dElubGluZUJveC0+aXNIb3Jpem9udGFsKCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yTW9kZXJu
UGF0aC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0
aW9uTGluZUl0ZXJhdG9yTW9kZXJuUGF0aC5oCmluZGV4IGFhMThkYzk3MmE3ZC4uODU3Yjc2Njkx
ZmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0
SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yTW9kZXJuUGF0
aC5oCkBAIC01OSw2ICs1OSw4IEBAIHB1YmxpYzoKICAgICBMYXlvdXRVbml0IGxpbmVCb3hCb3R0
b20oKSBjb25zdCB7IHJldHVybiBMYXlvdXRVbml0Ojpmcm9tRmxvYXRSb3VuZChsaW5lKCkucmVj
dCgpLm1heFkoKSk7IH0KIAogICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBsaW5lQm94VG9w
KCk7IH0KKyAgICBmbG9hdCBsb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIGxpbmUoKS5yZWN0
KCkueCgpOyB9CisgICAgZmxvYXQgbG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbGluZSgp
LnJlY3QoKS5tYXhYKCk7IH0KICAgICBmbG9hdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1
cm4gbGluZSgpLnJlY3QoKS5oZWlnaHQoKTsgfQogICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaAppbmRl
eCBkMzZhMTExN2QwZDUuLmU3Njc3YzY1ZTZlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVy
YXRvci5oCkBAIC0xMDgsNiArMTA4LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGxlbmd0aCgp
IGNvbnN0OwogCiAgICAgdW5zaWduZWQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgeCkgY29uc3Q7
CisgICAgZmxvYXQgcG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQpIGNvbnN0OwogCiAgICAgYm9v
bCBpc1NlbGVjdGFibGUodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkgY29uc3Q7CiAgICAg
TGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0KHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpIGNv
bnN0OwpAQCAtMzI4LDYgKzMyOSwxMyBAQCBpbmxpbmUgdW5zaWduZWQgUGF0aFRleHRSdW46Om9m
ZnNldEZvclBvc2l0aW9uKGZsb2F0IHgpIGNvbnN0CiAgICAgfSk7CiB9CiAKK2lubGluZSBmbG9h
dCBQYXRoVGV4dFJ1bjo6cG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KSBjb25zdAor
eworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFsmXShhdXRvJiBwYXRo
KSB7CisgICAgICAgIHJldHVybiBwYXRoLnBvc2l0aW9uRm9yT2Zmc2V0KG9mZnNldCk7CisgICAg
fSk7Cit9CisKIGlubGluZSBib29sIFBhdGhUZXh0UnVuOjppc1NlbGVjdGFibGUodW5zaWduZWQg
c3RhcnQsIHVuc2lnbmVkIGVuZCkgY29uc3QKIHsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbiht
X3BhdGhWYXJpYW50LCBbJl0oYXV0byYgcGF0aCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JMZWdhY3lQ
YXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRp
b25SdW5JdGVyYXRvckxlZ2FjeVBhdGguaAppbmRleCA1ZTE4M2EwMjIzZjIuLmEyYTdkZTg2MDUw
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dElu
dGVncmF0aW9uUnVuSXRlcmF0b3JMZWdhY3lQYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JMZWdhY3lQYXRoLmgK
QEAgLTU5LDcgKzU5LDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIGlubGluZVRleHRCb3goKS0+ZW5kKCk7IH0KICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBpbmxpbmVUZXh0Qm94KCktPmxlbigpOyB9CiAKLSAgICBpbmxpbmUgdW5zaWdu
ZWQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgeCkgY29uc3QgeyByZXR1cm4gaW5saW5lVGV4dEJv
eCgpLT5vZmZzZXRGb3JQb3NpdGlvbih4KTsgfQorICAgIHVuc2lnbmVkIG9mZnNldEZvclBvc2l0
aW9uKGZsb2F0IHgpIGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRCb3goKS0+b2Zmc2V0Rm9yUG9z
aXRpb24oeCk7IH0KKyAgICBmbG9hdCBwb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQp
IGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRCb3goKS0+cG9zaXRpb25Gb3JPZmZzZXQob2Zmc2V0
KTsgfQogCiAgICAgYm9vbCBpc1NlbGVjdGFibGUodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVu
ZCkgY29uc3QgeyByZXR1cm4gaW5saW5lVGV4dEJveCgpLT5pc1NlbGVjdGVkKHN0YXJ0LCBlbmQp
OyB9CiAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0KHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25l
ZCBlbmQpIGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRCb3goKS0+bG9jYWxTZWxlY3Rpb25SZWN0
KHN0YXJ0LCBlbmQpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1vZGVyblBhdGguaCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yTW9k
ZXJuUGF0aC5oCmluZGV4IDNmMDY2MTA4NzJmMS4uZDE5N2U1NmRlMDQ0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVy
YXRvck1vZGVyblBhdGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24v
TGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1vZGVyblBhdGguaApAQCAtNjYsNiArNjYsNyBA
QCBwdWJsaWM6CiAgICAgdW5zaWduZWQgZW5kKCkgY29uc3QgeyByZXR1cm4gcnVuKCkudGV4dENv
bnRlbnQoKS0+ZW5kKCk7IH0KICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBy
dW4oKS50ZXh0Q29udGVudCgpLT5sZW5ndGgoKTsgfQogCisgICAgLy8gRklYTUU6IE1ha2UgYSBz
aGFyZWQgZ2VuZXJpYyB2ZXJzaW9uIG9mIHRoaXMuCiAgICAgaW5saW5lIHVuc2lnbmVkIG9mZnNl
dEZvclBvc2l0aW9uKGZsb2F0IHgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoaXNMaW5lQnJl
YWsoKSkKQEAgLTgxLDYgKzgyLDIzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJ1bigpLnN0
eWxlKCkuZm9udENhc2NhZGUoKS5vZmZzZXRGb3JQb3NpdGlvbihjcmVhdGVUZXh0UnVuKEh5cGhl
bk1vZGU6Oklnbm9yZSksIGxvY2FsWCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogICAgIH0KIAor
ICAgIC8vIEZJWE1FOiBNYWtlIGEgc2hhcmVkIGdlbmVyaWMgdmVyc2lvbiBvZiB0aGlzLgorICAg
IGZsb2F0IHBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChvZmZzZXQgPj0gc3RhcnQoKSk7CisgICAgICAgIEFTU0VSVChvZmZzZXQg
PD0gZW5kKCkpOworCisgICAgICAgIGlmIChpc0xpbmVCcmVhaygpKQorICAgICAgICAgICAgcmV0
dXJuIHJlY3QoKS54KCk7CisKKyAgICAgICAgYXV0byBlbmRPZmZzZXQgPSBjbGFtcGVkT2Zmc2V0
KG9mZnNldCk7CisKKyAgICAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVj
dChyZWN0KCkueCgpLCAwLCAwLCAwKTsKKyAgICAgICAgVGV4dFJ1biB0ZXh0UnVuID0gY3JlYXRl
VGV4dFJ1bihIeXBoZW5Nb2RlOjpJZ25vcmUpOworICAgICAgICBydW4oKS5zdHlsZSgpLmZvbnRD
YXNjYWRlKCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1biwgc2VsZWN0aW9uUmVj
dCwgMCwgZW5kT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIHNuYXBSZWN0VG9EZXZpY2VQaXhlbHNX
aXRoV3JpdGluZ0RpcmVjdGlvbihzZWxlY3Rpb25SZWN0LCByZW5kZXJlcigpLmRvY3VtZW50KCku
ZGV2aWNlU2NhbGVGYWN0b3IoKSwgdGV4dFJ1bi5sdHIoKSkubWF4WCgpOworICAgIH0KKwogICAg
IGJvb2wgaXNTZWxlY3RhYmxlKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpIGNvbnN0CiAg
ICAgewogICAgICAgICByZXR1cm4gY2xhbXBlZE9mZnNldChzdGFydCkgPCBjbGFtcGVkT2Zmc2V0
KGVuZCk7CkBAIC0xMDUsOCArMTIzLDggQEAgcHVibGljOgogICAgICAgICBMYXlvdXRSZWN0IHNl
bGVjdGlvblJlY3QgeyBsb2dpY2FsTGVmdCwgc2VsZWN0aW9uVG9wLCBsb2dpY2FsV2lkdGgsIHNl
bGVjdGlvbkhlaWdodCB9OwogCiAgICAgICAgIFRleHRSdW4gdGV4dFJ1biA9IGNyZWF0ZVRleHRS
dW4oSHlwaGVuTW9kZTo6SW5jbHVkZSk7Ci0gICAgICAgIGlmIChjbGFtcGVkU3RhcnQgIT0gc3Rh
cnQoKSB8fCBjbGFtcGVkRW5kICE9IHRleHRSdW4ubGVuZ3RoKCkpCi0gICAgICAgICAgICBydW4o
KS5zdHlsZSgpLmZvbnRDYXNjYWRlKCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1
biwgc2VsZWN0aW9uUmVjdCwgY2xhbXBlZFN0YXJ0IC0gc3RhcnQoKSwgY2xhbXBlZEVuZCAtIHN0
YXJ0KCkpOworICAgICAgICBpZiAoY2xhbXBlZFN0YXJ0IHx8IGNsYW1wZWRFbmQgIT0gdGV4dFJ1
bi5sZW5ndGgoKSkKKyAgICAgICAgICAgIHJ1bigpLnN0eWxlKCkuZm9udENhc2NhZGUoKS5hZGp1
c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBzZWxlY3Rpb25SZWN0LCBjbGFtcGVkU3Rh
cnQsIGNsYW1wZWRFbmQpOwogCiAgICAgICAgIHJldHVybiBzbmFwcGVkU2VsZWN0aW9uUmVjdChz
ZWxlY3Rpb25SZWN0LCBsb2dpY2FsUmlnaHQsIHNlbGVjdGlvblRvcCwgc2VsZWN0aW9uSGVpZ2h0
LCBpc0hvcml6b250YWwoKSk7CiAgICAgfQpAQCAtMTk4LDkgKzIxNiw5IEBAIHByaXZhdGU6CiAK
ICAgICB1bnNpZ25lZCBjbGFtcGVkT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkgY29uc3QKICAgICB7
Ci0gICAgICAgIGF1dG8gY2xhbXBlZE9mZnNldCA9IHN0ZDo6bWF4KHN0YXJ0KCksIHN0ZDo6bWlu
KG9mZnNldCwgZW5kKCkpKTsKKyAgICAgICAgYXV0byBjbGFtcGVkT2Zmc2V0ID0gc3RkOjptYXgo
c3RhcnQoKSwgc3RkOjptaW4ob2Zmc2V0LCBlbmQoKSkpIC0gc3RhcnQoKTsKICAgICAgICAgLy8g
V2UgdHJlYXQgdGhlIGxhc3QgY29kZXBvaW50IGluIHRoaXMgcnVuIGFuZCB0aGUgaHlwaGVuIGFz
IGEgc2luZ2xlIHVuaXQuCi0gICAgICAgIGlmIChoYXNIeXBoZW4oKSAmJiBjbGFtcGVkT2Zmc2V0
ID09IGVuZCgpKQorICAgICAgICBpZiAoaGFzSHlwaGVuKCkgJiYgY2xhbXBlZE9mZnNldCA9PSBs
ZW5ndGgoKSkKICAgICAgICAgICAgIGNsYW1wZWRPZmZzZXQgKz0gcnVuKCkuc3R5bGUoKS5oeXBo
ZW5TdHJpbmcoKS5sZW5ndGgoKTsKIAogICAgICAgICByZXR1cm4gY2xhbXBlZE9mZnNldDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDEwNDgyZDQwMTE4MC4u
MzNhMGNhNjFlMGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAK
QEAgLTI4NDIsMTEgKzI4NDIsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlSGl0VGVzdFJl
c3VsdChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JgogICAgIH0KIH0K
IAotTGF5b3V0UmVjdCBSZW5kZXJCbG9jazo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxp
bmVCb3gsIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRP
ZkxpbmUpCitMYXlvdXRSZWN0IFJlbmRlckJsb2NrOjpsb2NhbENhcmV0UmVjdChjb25zdCBJbmxp
bmVSdW5BbmRPZmZzZXQmIHJ1bkFuZE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5k
T2ZMaW5lKSBjb25zdAogewogICAgIC8vIERvIHRoZSBub3JtYWwgY2FsY3VsYXRpb24gaW4gbW9z
dCBjYXNlcy4KICAgICBpZiAoZmlyc3RDaGlsZCgpKQotICAgICAgICByZXR1cm4gUmVuZGVyQm94
Ojpsb2NhbENhcmV0UmVjdChpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0LCBleHRyYVdpZHRoVG9FbmRP
ZkxpbmUpOworICAgICAgICByZXR1cm4gUmVuZGVyQm94Ojpsb2NhbENhcmV0UmVjdChydW5BbmRP
ZmZzZXQsIGV4dHJhV2lkdGhUb0VuZE9mTGluZSk7CiAKICAgICBMYXlvdXRSZWN0IGNhcmV0UmVj
dCA9IGxvY2FsQ2FyZXRSZWN0Rm9yRW1wdHlFbGVtZW50KHdpZHRoKCksIHRleHRJbmRlbnRPZmZz
ZXQoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKaW5kZXggNTY4MjBj
ZDg4YWFhLi41ZTgxMGEzYjJjMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5oCkBAIC00ODQsNyArNDg0LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcGFpbnRDb250aW51
YXRpb25PdXRsaW5lcyhQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogCi0gICAgTGF5
b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJldE9mZnNldCwg
TGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCkgZmluYWw7CisgICAgTGF5b3V0
UmVjdCBsb2NhbENhcmV0UmVjdChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmLCBMYXlvdXRVbml0
KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSBudWxscHRyKSBjb25zdCBmaW5hbDsKICAgICAKICAg
ICAvLyBGSVhNRS1CTE9DS0ZMT1c6IFJlbW92ZSB2aXJ0dWFsaXphaW9uIHdoZW4gYWxsIGNhbGxl
cnMgaGF2ZSBtb3ZlZCB0byBSZW5kZXJCbG9ja0Zsb3cKICAgICB2aXJ0dWFsIFZpc2libGVQb3Np
dGlvbiBwb3NpdGlvbkZvclBvaW50V2l0aElubGluZUNoaWxkcmVuKGNvbnN0IExheW91dFBvaW50
JiwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAKaW5kZXggNjM5NTJkMGVhMTg4Li45MDE1YmYyOTRjYTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVk
ZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNp
bmNsdWRlICJJbmxpbmVFbGVtZW50Qm94LmgiCisjaW5jbHVkZSAiSW5saW5lUnVuQW5kT2Zmc2V0
LmgiCiAjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgpAQCAtNDQyOSw3ICs0NDMwLDcgQEAgdm9p
ZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodFJlcGxhY2VkKExvZ2lj
YWxFeHRlbnRDb21wdXRlZFZhbHUKICAgICBjb21wdXRlZFZhbHVlcy5tX3Bvc2l0aW9uID0gbG9n
aWNhbFRvcFBvczsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0KElu
bGluZUJveCogYm94LCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0
aFRvRW5kT2ZMaW5lKQorTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0KGNvbnN0
IElubGluZVJ1bkFuZE9mZnNldCYgcnVuQW5kT2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRo
VG9FbmRPZkxpbmUpIGNvbnN0CiB7CiAgICAgLy8gVmlzaWJsZVBvc2l0aW9ucyBhdCBvZmZzZXRz
IGluc2lkZSBjb250YWluZXJzIGVpdGhlciBhKSByZWZlciB0byB0aGUgcG9zaXRpb25zIGJlZm9y
ZS9hZnRlcgogICAgIC8vIHRob3NlIGNvbnRhaW5lcnMgKHRhYmxlcyBhbmQgc2VsZWN0IGVsZW1l
bnRzKSBvciBiKSByZWZlciB0byB0aGUgcG9zaXRpb24gaW5zaWRlIGFuIGVtcHR5IGJsb2NrLgpA
QCAtNDQzNywxNiArNDQzOCwxNiBAQCBMYXlvdXRSZWN0IFJlbmRlckJveDo6bG9jYWxDYXJldFJl
Y3QoSW5saW5lQm94KiBib3gsIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdQogICAgIC8vIEZJ
WE1FOiBQYWludCB0aGUgY2FyZXRzIGluc2lkZSBlbXB0eSBibG9ja3MgZGlmZmVyZW50bHkgdGhh
biB0aGUgY2FyZXRzIGJlZm9yZS9hZnRlciBlbGVtZW50cy4KIAogICAgIExheW91dFJlY3QgcmVj
dChsb2NhdGlvbigpLCBMYXlvdXRTaXplKGNhcmV0V2lkdGgsIGhlaWdodCgpKSk7Ci0gICAgYm9v
bCBsdHIgPSBib3ggPyBib3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA6IHN0eWxlKCkuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpOworICAgIGJvb2wgbHRyID0gcnVuQW5kT2Zmc2V0LnJ1biA/
IHJ1bkFuZE9mZnNldC5ydW4tPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA6IHN0eWxlKCkuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpOwogCi0gICAgaWYgKCghY2FyZXRPZmZzZXQpIF4gbHRyKQor
ICAgIGlmICgoIXJ1bkFuZE9mZnNldC5vZmZzZXQpIF4gbHRyKQogICAgICAgICByZWN0Lm1vdmUo
TGF5b3V0U2l6ZSh3aWR0aCgpIC0gY2FyZXRXaWR0aCwgMF9sdSkpOwogCi0gICAgaWYgKGJveCkg
ewotICAgICAgICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94ID0gYm94LT5yb290KCk7Ci0g
ICAgICAgIExheW91dFVuaXQgdG9wID0gcm9vdEJveC5saW5lVG9wKCk7CisgICAgaWYgKHJ1bkFu
ZE9mZnNldC5ydW4pIHsKKyAgICAgICAgYXV0byBsaW5lID0gcnVuQW5kT2Zmc2V0LnJ1bi5saW5l
KCk7CisgICAgICAgIExheW91dFVuaXQgdG9wID0gbGluZS0+dG9wKCk7CiAgICAgICAgIHJlY3Qu
c2V0WSh0b3ApOwotICAgICAgICByZWN0LnNldEhlaWdodChyb290Qm94LmxpbmVCb3R0b20oKSAt
IHRvcCk7CisgICAgICAgIHJlY3Quc2V0SGVpZ2h0KGxpbmUtPmJvdHRvbSgpIC0gdG9wKTsKICAg
ICB9CiAKICAgICAvLyBJZiBoZWlnaHQgb2YgYm94IGlzIHNtYWxsZXIgdGhhbiBmb250IGhlaWdo
dCwgdXNlIHRoZSBsYXR0ZXIgb25lLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCmlu
ZGV4IGUwODE0NWQ4ZTBlOS4uZGRiMTYwOGZhZmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5oCkBAIC00OTgsNyArNDk4LDcgQEAgb3ZlcnJpZGU7CiAKICAgICBib29sIHNob3Vs
ZFRyZWF0Q2hpbGRBc1JlcGxhY2VkSW5UYWJsZUNlbGxzKCkgY29uc3Q7CiAgICAgCi0gICAgTGF5
b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJldE9mZnNldCwg
TGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gbnVsbHB0cikgb3ZlcnJpZGU7Cisg
ICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmLCBM
YXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSBudWxscHRyKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdmVyZmxvd0NsaXBSZWN0KGNvbnN0IExheW91
dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqID0gbnVsbHB0ciwgT3Zl
cmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwg
UGFpbnRQaGFzZSA9IFBhaW50UGhhc2U6OkJsb2NrQmFja2dyb3VuZCkgY29uc3Q7CiAgICAgdmly
dHVhbCBMYXlvdXRSZWN0IG92ZXJmbG93Q2xpcFJlY3RGb3JDaGlsZExheWVycyhjb25zdCBMYXlv
dXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCwgT3Zl
cmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdCB7IHJldHVybiBvdmVy
Zmxvd0NsaXBSZWN0KGxvY2F0aW9uLCBmcmFnbWVudCwgcmVsZXZhbmN5KTsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggYzU4
MGU1M2RmZDM4Li5kOWE3NWM5ZWExOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtMjYyNiw3ICsyNjI2LDcgQEAgdm9pZCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2xlYXJGaXJzdExldHRlclJlbWFpbmluZ1RleHQoKQogICAg
IGZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dE1hcCgpLnJlbW92ZSh0aGlzKTsKIH0KIAotTGF5b3V0
UmVjdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6bG9jYWxDYXJldFJlY3RGb3JFbXB0eUVsZW1lbnQo
TGF5b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCB0ZXh0SW5kZW50T2Zmc2V0KQorTGF5b3V0UmVj
dCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6bG9jYWxDYXJldFJlY3RGb3JFbXB0eUVsZW1lbnQoTGF5
b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCB0ZXh0SW5kZW50T2Zmc2V0KSBjb25zdAogewogICAg
IEFTU0VSVCghZmlyc3RDaGlsZCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuaAppbmRleCA4NDdlZjMxZjI2YmYuLmVjYTZkNTg2ODVmNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgK
QEAgLTI2MCw3ICsyNjAsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0
eSBjaG9vc2VJbnRlcnBvbGF0aW9uUXVhbGl0eShHcmFwaGljc0NvbnRleHQmLCBJbWFnZSYsIGNv
bnN0IHZvaWQqLCBjb25zdCBMYXlvdXRTaXplJik7CiAKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ2Fy
ZXRSZWN0Rm9yRW1wdHlFbGVtZW50KExheW91dFVuaXQgd2lkdGgsIExheW91dFVuaXQgdGV4dElu
ZGVudE9mZnNldCk7CisgICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdEZvckVtcHR5RWxlbWVu
dChMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IHRleHRJbmRlbnRPZmZzZXQpIGNvbnN0Owog
CiAgICAgc3RhdGljIGJvb2wgc2hvdWxkQW50aWFsaWFzTGluZXMoR3JhcGhpY3NDb250ZXh0Jik7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKaW5kZXggYWRhNGY3
MzM4NWNlLi5mNzhlYzdkY2Y4MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuY3BwCkBAIC0yMjgsNyArMjI4LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnVwZGF0ZUFs
d2F5c0NyZWF0ZUxpbmVCb3hlcyhib29sIGZ1bGxMYXlvdXQpCiAgICAgfQogfQogCi1MYXlvdXRS
ZWN0IFJlbmRlcklubGluZTo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxpbmVCb3gsIHVu
c2lnbmVkLCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCitMYXlvdXRSZWN0IFJl
bmRlcklubGluZTo6bG9jYWxDYXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiwgTGF5
b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBjb25zdAogewogICAgIGlmIChmaXJzdENo
aWxkKCkpIHsKICAgICAgICAgLy8gVGhpcyBjb25kaXRpb24gaXMgcG9zc2libGUgaWYgdGhlIFJl
bmRlcklubGluZSBpcyBhdCBhbiBlZGl0aW5nIGJvdW5kYXJ5LApAQCAtMjM5LDggKzIzOSw2IEBA
IExheW91dFJlY3QgUmVuZGVySW5saW5lOjpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGlu
ZUJveCwgdW5zaWduZWQsIExheW91dFVuCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAg
ICAgfQogCi0gICAgQVNTRVJUX1VOVVNFRChpbmxpbmVCb3gsICFpbmxpbmVCb3gpOwotCiAgICAg
aWYgKGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKICAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGlu
ZSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAppbmRleCA0NDhi
M2EwNWQ1NTIuLmVhNTUwYzI5NWI5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcklubGluZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuaApAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHdheXNDcmVh
dGVMaW5lQm94ZXMoKSB7IHNldFJlbmRlcklubGluZUFsd2F5c0NyZWF0ZXNMaW5lQm94ZXModHJ1
ZSk7IH0KICAgICB2b2lkIHVwZGF0ZUFsd2F5c0NyZWF0ZUxpbmVCb3hlcyhib29sIGZ1bGxMYXlv
dXQpOwogCi0gICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25l
ZCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBmaW5hbDsKKyAgICBMYXlvdXRS
ZWN0IGxvY2FsQ2FyZXRSZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYsIExheW91dFVuaXQq
IGV4dHJhV2lkdGhUb0VuZE9mTGluZSkgY29uc3QgZmluYWw7CiAKICAgICBib29sIGhpdFRlc3RD
dWxsZWRJbmxpbmUoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGluZUJyZWFrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aW5lQnJlYWsuY3BwCmluZGV4IDMwZWNjNTM0OWJhNC4uNzZhNmViYWQzMTUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcApAQCAtMjcsNiArMjcsOCBA
QAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFdCUkVsZW1lbnQuaCIK
ICNpbmNsdWRlICJJbmxpbmVFbGVtZW50Qm94LmgiCisjaW5jbHVkZSAiSW5saW5lUnVuQW5kT2Zm
c2V0LmgiCisjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaCIKICNpbmNs
dWRlICJMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTG9naWNhbFNl
bGVjdGlvbk9mZnNldENhY2hlcy5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCkBAIC0xNTYs
MjQgKzE1OCwyNSBAQCB2b2lkIFJlbmRlckxpbmVCcmVhazo6c2V0U2VsZWN0aW9uU3RhdGUoSGln
aGxpZ2h0U3RhdGUgc3RhdGUpCiAgICAgbV9pbmxpbmVCb3hXcmFwcGVyLT5yb290KCkuc2V0SGFz
U2VsZWN0ZWRDaGlsZHJlbihzdGF0ZSAhPSBIaWdobGlnaHRTdGF0ZTo6Tm9uZSk7CiB9CiAKLUxh
eW91dFJlY3QgUmVuZGVyTGluZUJyZWFrOjpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGlu
ZUJveCwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9m
TGluZSkKK0xheW91dFJlY3QgUmVuZGVyTGluZUJyZWFrOjpsb2NhbENhcmV0UmVjdChjb25zdCBJ
bmxpbmVSdW5BbmRPZmZzZXQmIHJ1bkFuZE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRv
RW5kT2ZMaW5lKSBjb25zdAogewotICAgIEFTU0VSVF9VTlVTRUQoY2FyZXRPZmZzZXQsICFjYXJl
dE9mZnNldCk7Ci0gICAgQVNTRVJUX1VOVVNFRChpbmxpbmVCb3gsIGlubGluZUJveCA9PSBtX2lu
bGluZUJveFdyYXBwZXIpOwotICAgIGlmICghaW5saW5lQm94KQorICAgIEFTU0VSVCghcnVuQW5k
T2Zmc2V0Lm9mZnNldCk7CisgICAgQVNTRVJUKHJ1bkFuZE9mZnNldC5ydW4gPT0gTGF5b3V0SW50
ZWdyYXRpb246OnJ1bkZvcigqdGhpcykpOworCisgICAgaWYgKCFydW5BbmRPZmZzZXQucnVuKQog
ICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCi0gICAgY29uc3QgUm9vdElubGluZUJveCYg
cm9vdEJveCA9IGlubGluZUJveC0+cm9vdCgpOwotICAgIHJldHVybiByb290Qm94LmNvbXB1dGVD
YXJldFJlY3QoaW5saW5lQm94LT5sb2dpY2FsTGVmdCgpLCBjYXJldFdpZHRoLCBleHRyYVdpZHRo
VG9FbmRPZkxpbmUpOworICAgIGF1dG8gbGluZSA9IHJ1bkFuZE9mZnNldC5ydW4ubGluZSgpOwor
ICAgIHJldHVybiBsaW5lLT5jb21wdXRlQ2FyZXRSZWN0KGxpbmUtPmxvZ2ljYWxMZWZ0KCksIGNh
cmV0V2lkdGgsIGV4dHJhV2lkdGhUb0VuZE9mTGluZSk7CiB9CiAKIEludFJlY3QgUmVuZGVyTGlu
ZUJyZWFrOjpsaW5lc0JvdW5kaW5nQm94KCkgY29uc3QKIHsKLSAgICBhdXRvIGJveCA9IExheW91
dEludGVncmF0aW9uOjpydW5Gb3IoKnRoaXMpOwotICAgIGlmICghYm94KQorICAgIGF1dG8gcnVu
ID0gTGF5b3V0SW50ZWdyYXRpb246OnJ1bkZvcigqdGhpcyk7CisgICAgaWYgKCFydW4pCiAgICAg
ICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChib3gtPnJlY3Qo
KSk7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QocnVuLT5yZWN0KCkpOwogfQogCiB2b2lk
IFJlbmRlckxpbmVCcmVhazo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBj
b25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmgKaW5kZXggZmVkMTQ4MzJkYzQ4Li40MDQzMmFj
ZTdjOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJl
YWsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmgKQEAg
LTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKICAgICBpbnQgY2FyZXRNaW5PZmZzZXQoKSBjb25zdCBm
aW5hbDsKICAgICBpbnQgY2FyZXRNYXhPZmZzZXQoKSBjb25zdCBmaW5hbDsKICAgICBib29sIGNh
bkJlU2VsZWN0aW9uTGVhZigpIGNvbnN0IGZpbmFsOwotICAgIExheW91dFJlY3QgbG9jYWxDYXJl
dFJlY3QoSW5saW5lQm94KiwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJh
V2lkdGhUb0VuZE9mTGluZSkgZmluYWw7CisgICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChj
b25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmLCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxp
bmUpIGNvbnN0IGZpbmFsOwogICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3Rh
dGUpIGZpbmFsOwogCiAgICAgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBM
aW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSkgY29uc3QgZmluYWw7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IDg4YTE3YzUwMGUyMC4uYTVk
OGMzZDJjMjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApA
QCAtMTQwMCw3ICsxNDAwLDcgQEAgTGF5b3V0U2l6ZSBSZW5kZXJPYmplY3Q6Om9mZnNldEZyb21B
bmNlc3RvckNvbnRhaW5lcihSZW5kZXJFbGVtZW50JiBjb250YWluZXIpIGMKICAgICByZXR1cm4g
b2Zmc2V0OwogfQogCi1MYXlvdXRSZWN0IFJlbmRlck9iamVjdDo6bG9jYWxDYXJldFJlY3QoSW5s
aW5lQm94KiwgdW5zaWduZWQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKK0xh
eW91dFJlY3QgUmVuZGVyT2JqZWN0Ojpsb2NhbENhcmV0UmVjdChjb25zdCBJbmxpbmVSdW5BbmRP
ZmZzZXQmLCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpIGNvbnN0CiB7CiAgICAg
aWYgKGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKICAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGlu
ZSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggZjdkMjBj
OTI4NmFiLi41YzBiMTM2OWU0NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmgKQEAgLTc1LDYgKzc1LDcgQEAgY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogY2xhc3MgU2Vs
ZWN0aW9uUmVjdDsKICNlbmRpZgogCitzdHJ1Y3QgSW5saW5lUnVuQW5kT2Zmc2V0Owogc3RydWN0
IFBhaW50SW5mbzsKIHN0cnVjdCBTaW1wbGVSYW5nZTsKIApAQCAtNjcyLDEzICs2NzMsOCBAQCBw
dWJsaWM6CiAgICAgLy8gV2hldGhlciBvciBub3QgYSBnaXZlbiBibG9jayBuZWVkcyB0byBwYWlu
dCBzZWxlY3Rpb24gZ2Fwcy4KICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUGFpbnRTZWxlY3Rpb25H
YXBzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIC8qKgotICAgICAqIFJldHVybnMg
dGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBjYXJldCB3aXRoaW4gdGhpcyByZW5kZXIgb2Jq
ZWN0LgotICAgICAqIEBwYXJhbSBjYXJldE9mZnNldCB6ZXJvLWJhc2VkIG9mZnNldCBkZXRlcm1p
bmluZyBwb3NpdGlvbiB3aXRoaW4gdGhlIHJlbmRlciBvYmplY3QuCi0gICAgICogQHBhcmFtIGV4
dHJhV2lkdGhUb0VuZE9mTGluZSBvcHRpb25hbCBvdXQgYXJnIHRvIGdpdmUgZXh0cmEgd2lkdGgg
dG8gZW5kIG9mIGxpbmUgLQotICAgICAqIHVzZWZ1bCBmb3IgY2hhcmFjdGVyIHJhbmdlIHJlY3Qg
Y29tcHV0YXRpb25zCi0gICAgICovCi0gICAgdmlydHVhbCBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRS
ZWN0KElubGluZUJveCosIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdp
ZHRoVG9FbmRPZkxpbmUgPSBudWxscHRyKTsKKyAgICAvLyBSZXR1cm5zIHRoZSBsb2NhbCBjb29y
ZGluYXRlcyBvZiB0aGUgY2FyZXQgd2l0aGluIHRoaXMgcmVuZGVyIG9iamVjdC4KKyAgICB2aXJ0
dWFsIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0Jiwg
TGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gbnVsbHB0cikgY29uc3Q7CiAKICAg
ICAvLyBXaGVuIHBlcmZvcm1pbmcgYSBnbG9iYWwgZG9jdW1lbnQgdGVhci1kb3duLCBvciB3aGVu
IGdvaW5nIGludG8gdGhlIGJhY2svZm9yd2FyZCBjYWNoZSwgdGhlIHJlbmRlcmVyIG9mIHRoZSBk
b2N1bWVudCBpcyBjbGVhcmVkLgogICAgIGJvb2wgcmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkg
Y29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKaW5kZXggNTM5MDY1
ZWUwOGI5Li4zMGRmNmE0Y2Y0Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dC5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRl
ICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiSHlwaGVuYXRpb24uaCIKKyNpbmNsdWRl
ICJJbmxpbmVSdW5BbmRPZmZzZXQuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5j
bHVkZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJMYXlvdXRJ
bnRlZ3JhdGlvbkxpbmVMYXlvdXQuaCIKQEAgLTcxMCwxNCArNzExLDE1IEBAIFZpc2libGVQb3Np
dGlvbiBSZW5kZXJUZXh0Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2lu
dCwgY29uc3QgUmVuCiAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbigwLCBBZmZpbml0
eTo6RG93bnN0cmVhbSk7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyVGV4dDo6bG9jYWxDYXJldFJl
Y3QoSW5saW5lQm94KiBpbmxpbmVCb3gsIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0
KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCitMYXlvdXRSZWN0IFJlbmRlclRleHQ6OmxvY2FsQ2Fy
ZXRSZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYgcnVuQW5kT2Zmc2V0LCBMYXlvdXRVbml0
KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpIGNvbnN0CiB7Ci0gICAgaWYgKCFpbmxpbmVCb3gpCisg
ICAgaWYgKCFydW5BbmRPZmZzZXQucnVuKQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwog
Ci0gICAgYXV0byYgYm94ID0gZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oKmlubGluZUJveCk7Ci0g
ICAgZmxvYXQgbGVmdCA9IGJveC5wb3NpdGlvbkZvck9mZnNldChjYXJldE9mZnNldCk7Ci0gICAg
cmV0dXJuIGJveC5yb290KCkuY29tcHV0ZUNhcmV0UmVjdChsZWZ0LCBjYXJldFdpZHRoLCBleHRy
YVdpZHRoVG9FbmRPZkxpbmUpOworICAgIGF1dG8mIHRleHRSdW4gPSBkb3duY2FzdDxMYXlvdXRJ
bnRlZ3JhdGlvbjo6VGV4dFJ1bkl0ZXJhdG9yPihydW5BbmRPZmZzZXQucnVuKTsKKworICAgIGZs
b2F0IGxlZnQgPSB0ZXh0UnVuLT5wb3NpdGlvbkZvck9mZnNldChydW5BbmRPZmZzZXQub2Zmc2V0
KTsKKyAgICByZXR1cm4gdGV4dFJ1bi5saW5lKCktPmNvbXB1dGVDYXJldFJlY3QobGVmdCwgY2Fy
ZXRXaWR0aCwgZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKTsKIH0KIAogQUxXQVlTX0lOTElORSBmbG9h
dCBSZW5kZXJUZXh0Ojp3aWR0aEZyb21DYWNoZShjb25zdCBGb250Q2FzY2FkZSYgZiwgdW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIGxlbiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBGb250Kj4q
IGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3csIGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCmlu
ZGV4IDUyODgwOTM0Y2NiNC4uYWU4NWFkMjQyYTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0LmgKQEAgLTIwNSw3ICsyMDUsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZXRT
ZWxlY3Rpb25TdGF0ZShIaWdobGlnaHRTdGF0ZSkgZmluYWw7CiAgICAgTGF5b3V0UmVjdCBzZWxl
Y3Rpb25SZWN0Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyLCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgZmluYWw7Ci0gICAg
TGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJldE9mZnNl
dCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gbnVsbHB0cikgb3ZlcnJpZGU7
CisgICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQm
LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSBudWxscHRyKSBjb25zdCBvdmVy
cmlkZTsKICAgICBMYXlvdXRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KGNvbnN0
IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpIGNvbnN0IGZpbmFsOwog
CiAgICAgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgs
IEhhc2hTZXQ8Y29uc3QgRm9udCo+JiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93Jik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKaW5kZXggMWI1MDdlY2Rj
YTYyLi4xZDVkMzg2ZmIzNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
b290SW5saW5lQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGlu
ZUJveC5jcHAKQEAgLTQ3NCw1OSArNDc0LDYgQEAgR2FwUmVjdHMgUm9vdElubGluZUJveDo6bGlu
ZVNlbGVjdGlvbkdhcChSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2kKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1JbnRSZWN0IFJvb3RJbmxpbmVCb3g6OmNvbXB1dGVDYXJl
dFJlY3QoZmxvYXQgbG9naWNhbExlZnRQb3NpdGlvbiwgdW5zaWduZWQgY2FyZXRXaWR0aCwgTGF5
b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBjb25zdAotewotICAgIGludCBoZWlnaHQg
PSBzZWxlY3Rpb25IZWlnaHQoKTsKLSAgICBpbnQgdG9wID0gc2VsZWN0aW9uVG9wKCk7Ci0KLSAg
ICAvLyBEaXN0cmlidXRlIHRoZSBjYXJldCdzIHdpZHRoIHRvIGVpdGhlciBzaWRlIG9mIHRoZSBv
ZmZzZXQuCi0gICAgZmxvYXQgbGVmdCA9IGxvZ2ljYWxMZWZ0UG9zaXRpb247Ci0gICAgaW50IGNh
cmV0V2lkdGhMZWZ0T2ZPZmZzZXQgPSBjYXJldFdpZHRoIC8gMjsKLSAgICBsZWZ0IC09IGNhcmV0
V2lkdGhMZWZ0T2ZPZmZzZXQ7Ci0gICAgaW50IGNhcmV0V2lkdGhSaWdodE9mT2Zmc2V0ID0gY2Fy
ZXRXaWR0aCAtIGNhcmV0V2lkdGhMZWZ0T2ZPZmZzZXQ7Ci0gICAgbGVmdCA9IHJvdW5kZihsZWZ0
KTsKLQotICAgIGZsb2F0IHJvb3RMZWZ0ID0gbG9naWNhbExlZnQoKTsKLSAgICBmbG9hdCByb290
UmlnaHQgPSBsb2dpY2FsUmlnaHQoKTsKLQotICAgIGlmIChleHRyYVdpZHRoVG9FbmRPZkxpbmUp
Ci0gICAgICAgICpleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAobG9naWNhbFdpZHRoKCkgKyByb290
TGVmdCkgLSAobGVmdCArIGNhcmV0V2lkdGgpOwotCi0gICAgY29uc3QgUmVuZGVyU3R5bGUmIGJs
b2NrU3R5bGUgPSBibG9ja0Zsb3coKS5zdHlsZSgpOwotCi0gICAgYm9vbCByaWdodEFsaWduZWQg
PSBmYWxzZTsKLSAgICBzd2l0Y2ggKGJsb2NrU3R5bGUudGV4dEFsaWduKCkpIHsKLSAgICBjYXNl
IFRleHRBbGlnbk1vZGU6OlJpZ2h0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0Umln
aHQ6Ci0gICAgICAgIHJpZ2h0QWxpZ25lZCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgVGV4dEFsaWduTW9kZTo6TGVmdDoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdExl
ZnQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpDZW50ZXI6Ci0gICAgY2FzZSBUZXh0QWxpZ25N
b2RlOjpXZWJLaXRDZW50ZXI6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGV4dEFsaWduTW9k
ZTo6SnVzdGlmeToKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlN0YXJ0OgotICAgICAgICByaWdo
dEFsaWduZWQgPSAhYmxvY2tTdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6RW5kOgotICAgICAgICByaWdodEFsaWdu
ZWQgPSBibG9ja1N0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotCi0gICAgZmxvYXQgbGVmdEVkZ2UgPSBzdGQ6Om1pbjxmbG9hdD4oMCwgcm9vdExl
ZnQpOwotICAgIGZsb2F0IHJpZ2h0RWRnZSA9IHN0ZDo6bWF4PGZsb2F0PihibG9ja0Zsb3coKS5s
b2dpY2FsV2lkdGgoKSwgcm9vdFJpZ2h0KTsKLQotICAgIGlmIChyaWdodEFsaWduZWQpIHsKLSAg
ICAgICAgbGVmdCA9IHN0ZDo6bWF4KGxlZnQsIGxlZnRFZGdlKTsKLSAgICAgICAgbGVmdCA9IHN0
ZDo6bWluKGxlZnQsIHJvb3RSaWdodCAtIGNhcmV0V2lkdGgpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGxlZnQgPSBzdGQ6Om1pbihsZWZ0LCByaWdodEVkZ2UgLSBjYXJldFdpZHRoUmlnaHRPZk9m
ZnNldCk7Ci0gICAgICAgIGxlZnQgPSBzdGQ6Om1heChsZWZ0LCByb290TGVmdCk7Ci0gICAgfQot
ICAgIHJldHVybiBibG9ja1N0eWxlLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBJbnRSZWN0
KGxlZnQsIHRvcCwgY2FyZXRXaWR0aCwgaGVpZ2h0KSA6IEludFJlY3QodG9wLCBsZWZ0LCBoZWln
aHQsIGNhcmV0V2lkdGgpOwotfQotCiBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIFJvb3RJ
bmxpbmVCb3g6OnNlbGVjdGlvblN0YXRlKCkKIHsKICAgICAvLyBXYWxrIG92ZXIgYWxsIG9mIHRo
ZSBzZWxlY3RlZCBib3hlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
b290SW5saW5lQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5o
CmluZGV4IGU0ODI5MmY3YWMzYi4uNzAwOTMwYWM0NzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9Sb290SW5saW5lQm94LmgKQEAgLTEzMiw4ICsxMzIsNiBAQCBwdWJsaWM6CiAgICAgR2Fw
UmVjdHMgbGluZVNlbGVjdGlvbkdhcChSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBMYXlv
dXRQb2ludCYgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zm
c2V0RnJvbVJvb3RCbG9jaywKICAgICAgICAgTGF5b3V0VW5pdCBzZWxUb3AsIExheW91dFVuaXQg
c2VsSGVpZ2h0LCBjb25zdCBMb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzJiwgY29uc3QgUGFp
bnRJbmZvKik7CiAKLSAgICBJbnRSZWN0IGNvbXB1dGVDYXJldFJlY3QoZmxvYXQgbG9naWNhbExl
ZnRQb3NpdGlvbiwgdW5zaWduZWQgY2FyZXRXaWR0aCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRv
RW5kT2ZMaW5lKSBjb25zdDsKLQogICAgIHVzaW5nIENsZWFuTGluZUZsb2F0TGlzdCA9IFZlY3Rv
cjxXZWFrUHRyPFJlbmRlckJveD4+OwogICAgIHZvaWQgYXBwZW5kRmxvYXQoUmVuZGVyQm94JiBm
bG9hdGluZ0JveCkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAppbmRleCA0NTU1Nzc2MTgwZTEuLmJmM2Y3MTViMGY3
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxp
bmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lu
bGluZVRleHQuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9y
LmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgi
CisjaW5jbHVkZSAiSW5saW5lUnVuQW5kT2Zmc2V0LmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2su
aCIKICNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5o
IgpAQCAtMTE1LDExICsxMTYsMTQgQEAgc3RkOjp1bmlxdWVfcHRyPElubGluZVRleHRCb3g+IFJl
bmRlclNWR0lubGluZVRleHQ6OmNyZWF0ZVRleHRCb3goKQogewogICAgIGF1dG8gYm94ID0gbWFr
ZVVuaXF1ZTxTVkdJbmxpbmVUZXh0Qm94PigqdGhpcyk7CiAgICAgYm94LT5zZXRIYXNWaXJ0dWFs
TG9naWNhbEhlaWdodCgpOwotICAgIHJldHVybiBib3g7CisgICAgcmV0dXJuIGJveDsgCiB9CiAK
LUxheW91dFJlY3QgUmVuZGVyU1ZHSW5saW5lVGV4dDo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94
KiBib3gsIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KikKK0xheW91dFJlY3QgUmVu
ZGVyU1ZHSW5saW5lVGV4dDo6bG9jYWxDYXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0
JiBydW5BbmRPZmZzZXQsIExheW91dFVuaXQqKSBjb25zdAogeworICAgIGF1dG8qIGJveCA9IHJ1
bkFuZE9mZnNldC5ydW4gPyBydW5BbmRPZmZzZXQucnVuLT5sZWdhY3lJbmxpbmVCb3goKSA6IG51
bGxwdHI7CisgICAgYXV0byBjYXJldE9mZnNldCA9IHJ1bkFuZE9mZnNldC5vZmZzZXQ7CisKICAg
ICBpZiAoIWlzPElubGluZVRleHRCb3g+KGJveCkpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0
KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
SW5saW5lVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxp
bmVUZXh0LmgKaW5kZXggZmY0NjNiOGIwOTY5Li5kYzI3MjA5OWQwMzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCkBAIC02Miw3
ICs2Miw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc1NWR0lubGluZVRleHQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CiAKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQ
b2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKikg
b3ZlcnJpZGU7Ci0gICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNp
Z25lZCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCkg
b3ZlcnJpZGU7CisgICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChjb25zdCBJbmxpbmVSdW5B
bmRPZmZzZXQmLCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSBudWxscHRyKSBj
b25zdCBvdmVycmlkZTsKICAgICBJbnRSZWN0IGxpbmVzQm91bmRpbmdCb3goKSBjb25zdCBvdmVy
cmlkZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5saW5lVGV4dEJveD4gY3JlYXRlVGV4dEJveCgp
IG92ZXJyaWRlOwogCg==
</data>
<flag name="commit-queue"
          id="429879"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413320</attachid>
            <date>2020-11-05 10:25:03 -0800</date>
            <delta_ts>2020-11-05 10:56:11 -0800</delta_ts>
            <desc>patch</desc>
            <filename>lfc-localCaretOffset-2.patch</filename>
            <type>text/plain</type>
            <size>38375</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyMThlM2I4ZDBmMzguLjljOGYzOTc4MGRiMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDc2IEBACisyMDIwLTExLTA1ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gbG9jYWxDYXJldE9mZnNldCBzaG91bGQg
dXNlIGl0ZXJhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTg2MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBDb252ZXJ0IGFsbCBsb2NhbENhcmV0UmVjdCBpbXBsZW1lbnRhdGlvbnMgdG8gdXNlIGl0
ZXJhdG9yLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmxvY2FsQ2FyZXRSZWN0Rm9yQ2hhcmFjdGVy
T2Zmc2V0KToKKyAgICAgICAgKiBlZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyZWRQb3NpdGlvbjo6YWJzb2x1dGVSZWN0IGNvbnN0KToKKyAgICAg
ICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaXNp
YmxlUG9zaXRpb246OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvaW50
ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlBhdGhMaW5lOjpjb21wdXRlQ2FyZXRSZWN0IGNvbnN0
KToKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRl
cmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpQYXRoTGluZTo6
bG9naWNhbExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246
OlBhdGhMaW5lOjpsb2dpY2FsUmlnaHQgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3Jh
dGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvckxlZ2FjeVBhdGguaDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lSXRlcmF0b3JMZWdhY3lQYXRoOjpsb2dp
Y2FsTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGlu
ZUl0ZXJhdG9yTGVnYWN5UGF0aDo6bG9naWNhbFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKiBsYXlv
dXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmg6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUl0ZXJhdG9yTW9kZXJu
UGF0aDo6bG9naWNhbExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdy
YXRpb246OkxpbmVJdGVyYXRvck1vZGVyblBhdGg6OmxvZ2ljYWxSaWdodCBjb25zdCk6CisgICAg
ICAgICogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpQYXRoVGV4dFJ1bjo6cG9zaXRp
b25Gb3JPZmZzZXQgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJ
bnRlZ3JhdGlvblJ1bkl0ZXJhdG9yTGVnYWN5UGF0aC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yTGVnYWN5UGF0aDo6b2Zmc2V0Rm9yUG9zaXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9y
TGVnYWN5UGF0aDo6cG9zaXRpb25Gb3JPZmZzZXQgY29uc3QpOgorICAgICAgICAqIGxheW91dC9p
bnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yTW9kZXJuUGF0aC5oOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yTW9kZXJuUGF0aDo6
cG9zaXRpb25Gb3JPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdy
YXRpb246OlJ1bkl0ZXJhdG9yTW9kZXJuUGF0aDo6c2VsZWN0aW9uUmVjdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRlcmF0b3JNb2Rlcm5QYXRoOjpj
bGFtcGVkT2Zmc2V0IGNvbnN0KToKKworICAgICAgICBNYWtlIGNsYW1wZWRPZmZzZXQgcmV0dXJu
IDAgYmFzZWQgb2Zmc2V0IGxpa2UgaXQgZG9lcyBpbiBJbmxpbmVUZXh0Qm94IHRvIG1ha2UgcG9y
dGluZyBlYXNpZXIuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2NhbENhcmV0UmVjdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
TW9kZWxPYmplY3Q6OmxvY2FsQ2FyZXRSZWN0Rm9yRW1wdHlFbGVtZW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpsb2NhbENhcmV0UmVjdEZvckVtcHR5
RWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlcklubGluZTo6bG9jYWxDYXJldFJlY3QpOiBEZWxldGVkLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlu
ZUJyZWFrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVCcmVhazo6bG9jYWxDYXJl
dFJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGluZUJyZWFrOjpsaW5lc0Jv
dW5kaW5nQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVCcmVhazo6bG9j
YWxDYXJldFJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQnJl
YWsuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck9iamVjdDo6bG9jYWxDYXJldFJlY3QgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyT2JqZWN0Ojpsb2NhbENhcmV0UmVjdCk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmxvY2FsQ2FyZXRSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdJbmxpbmVUZXh0OjpjcmVhdGVUZXh0Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R0lubGluZVRleHQ6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR0lubGluZVRleHQ6OmxvY2FsQ2FyZXRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaDoKKwogMjAyMC0xMS0wNCAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KIAogICAgICAgICBbR1BVIFByb2Nlc3NdIE1v
dmUgdGhlIGludGVybmFsIEdQVSByZW5kZXJpbmcgZmxhZ3MgZnJvbSBXZWJQYWdlIHRvIFdlYlBy
b2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RD
YWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3Bw
CmluZGV4IGZmMWUxZjkxNDI4YS4uOTE5YzFkZjViYjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTg0LDYgKzg0LDcgQEAKICNpbmNs
dWRlICJIVE1MU2VsZWN0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSW5saW5lRWxlbWVudEJveC5oIgorI2luY2x1ZGUgIklubGlu
ZVJ1bkFuZE9mZnNldC5oIgogI2luY2x1ZGUgIk1hdGhNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKQEAgLTI4OTMsMTQgKzI4OTQsMTQgQEAgTGF5b3V0
UmVjdCBBWE9iamVjdENhY2hlOjpsb2NhbENhcmV0UmVjdEZvckNoYXJhY3Rlck9mZnNldChSZW5k
ZXJPYmplY3QqJiByZW5kZXIKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gSW50UmVj
dCgpOwogCi0gICAgYXV0byBbaW5saW5lQm94LCBjYXJldE9mZnNldF0gPSBtYWtlQ29udGFpbmVy
T2Zmc2V0UG9zaXRpb24ocmFuZ2UtPnN0YXJ0KS5pbmxpbmVCb3hBbmRPZmZzZXQoQWZmaW5pdHk6
OkRvd25zdHJlYW0pOwotICAgIGlmIChpbmxpbmVCb3gpCi0gICAgICAgIHJlbmRlcmVyID0gJmlu
bGluZUJveC0+cmVuZGVyZXIoKTsKKyAgICBhdXRvIHJ1bkFuZE9mZnNldCA9IG1ha2VDb250YWlu
ZXJPZmZzZXRQb3NpdGlvbihyYW5nZS0+c3RhcnQpLmlubGluZVJ1bkFuZE9mZnNldChBZmZpbml0
eTo6RG93bnN0cmVhbSk7CisgICAgaWYgKHJ1bkFuZE9mZnNldC5ydW4pCisgICAgICAgIHJlbmRl
cmVyID0gY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPigmcnVuQW5kT2Zmc2V0LnJ1bi0+cmVuZGVy
ZXIoKSk7CiAKLSAgICBpZiAoaXM8UmVuZGVyTGluZUJyZWFrPihyZW5kZXJlcikgJiYgZG93bmNh
c3Q8UmVuZGVyTGluZUJyZWFrPihyZW5kZXJlciktPmlubGluZUJveFdyYXBwZXIoKSAhPSBpbmxp
bmVCb3gpCisgICAgaWYgKGlzPFJlbmRlckxpbmVCcmVhaz4ocmVuZGVyZXIpICYmIExheW91dElu
dGVncmF0aW9uOjpydW5Gb3IoZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFrPigqcmVuZGVyZXIpKSAh
PSBydW5BbmRPZmZzZXQucnVuKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAgcmV0
dXJuIHJlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0KTsKKyAg
ICByZXR1cm4gcmVuZGVyZXItPmxvY2FsQ2FyZXRSZWN0KHJ1bkFuZE9mZnNldCk7CiB9CiAKIElu
dFJlY3QgQVhPYmplY3RDYWNoZTo6YWJzb2x1dGVDYXJldEJvdW5kc0ZvckNoYXJhY3Rlck9mZnNl
dChjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uY3BwCmluZGV4IGQzMzcwZDNlYjlkMi4uYWYzMjdk
NTY0ZjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQb3NpdGlvbi5jcHAK
QEAgLTIyOSw3ICsyMjksNyBAQCBJbnRSZWN0IFJlbmRlcmVkUG9zaXRpb246OmFic29sdXRlUmVj
dChMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpIGNvbnN0CiAgICAgaWYgKGlzTnVs
bCgpKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAgSW50UmVjdCBsb2NhbFJlY3Qg
PSBzbmFwcGVkSW50UmVjdChjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KG1fcmVuZGVyZXIpLT5s
b2NhbENhcmV0UmVjdChtX3J1bi0+bGVnYWN5SW5saW5lQm94KCksIG1fb2Zmc2V0LCBleHRyYVdp
ZHRoVG9FbmRPZkxpbmUpKTsKKyAgICBJbnRSZWN0IGxvY2FsUmVjdCA9IHNuYXBwZWRJbnRSZWN0
KGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4obV9yZW5kZXJlciktPmxvY2FsQ2FyZXRSZWN0KHsg
bV9ydW4sIG1fb2Zmc2V0IH0sIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkpOwogICAgIHJldHVybiBs
b2NhbFJlY3QgPT0gSW50UmVjdCgpID8gSW50UmVjdCgpIDogbV9yZW5kZXJlci0+bG9jYWxUb0Fi
c29sdXRlUXVhZChGbG9hdFJlY3QobG9jYWxSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCmluZGV4IDAx
ZWRkNTNjMDc0ZC4uMmM2MWNmNjExY2Q3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNp
YmxlUG9zaXRpb24uY3BwCkBAIC02MzgsMTIgKzYzOCwxMiBAQCBhdXRvIFZpc2libGVQb3NpdGlv
bjo6bG9jYWxDYXJldFJlY3QoKSBjb25zdCAtPiBMb2NhbENhcmV0UmVjdAogICAgIGlmICghbm9k
ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gW2lubGluZUJveCwgY2FyZXRPZmZz
ZXRdID0gaW5saW5lQm94QW5kT2Zmc2V0KCk7Ci0gICAgYXV0byByZW5kZXJlciA9IGlubGluZUJv
eCA/ICZpbmxpbmVCb3gtPnJlbmRlcmVyKCkgOiBub2RlLT5yZW5kZXJlcigpOworICAgIGF1dG8g
cnVuQW5kT2Zmc2V0ID0gaW5saW5lUnVuQW5kT2Zmc2V0KCk7CisgICAgYXV0byByZW5kZXJlciA9
IHJ1bkFuZE9mZnNldC5ydW4gPyAmcnVuQW5kT2Zmc2V0LnJ1bi0+cmVuZGVyZXIoKSA6IG5vZGUt
PnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIHsgfTsKIAot
ICAgIHJldHVybiB7IHJlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChpbmxpbmVCb3gsIGNhcmV0T2Zm
c2V0KSwgcmVuZGVyZXIgfTsKKyAgICByZXR1cm4geyByZW5kZXJlci0+bG9jYWxDYXJldFJlY3Qo
cnVuQW5kT2Zmc2V0KSwgY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihyZW5kZXJlcikgfTsKIH0K
IAogSW50UmVjdCBWaXNpYmxlUG9zaXRpb246OmFic29sdXRlQ2FyZXRCb3VuZHMoYm9vbCogaW5z
aWRlRml4ZWQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmNwcAppbmRl
eCBlNzE3ZWVmNGRmNWUuLjcxOTg3YjQwOWU0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5l
SXRlcmF0b3IuY3BwCkBAIC0xNzksNiArMTc5LDU5IEBAIGludCBQYXRoTGluZTo6YmxvY2tEaXJl
Y3Rpb25Qb2ludEluTGluZSgpIGNvbnN0CiAgICAgcmV0dXJuICFjb250YWluaW5nQmxvY2soKS5z
dHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkgPyBzdGQ6Om1heCh0b3AoKSwgc2Vs
ZWN0aW9uVG9wKCkpIDogc3RkOjptaW4oYm90dG9tKCksIHNlbGVjdGlvbkJvdHRvbSgpKTsKIH0K
IAorSW50UmVjdCBQYXRoTGluZTo6Y29tcHV0ZUNhcmV0UmVjdChmbG9hdCBsb2dpY2FsTGVmdFBv
c2l0aW9uLCB1bnNpZ25lZCBjYXJldFdpZHRoLCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRP
ZkxpbmUpIGNvbnN0Cit7CisgICAgaW50IGhlaWdodCA9IHNlbGVjdGlvbkJvdHRvbSgpIC0gc2Vs
ZWN0aW9uVG9wKCk7CisgICAgaW50IHRvcCA9IHNlbGVjdGlvblRvcCgpOworCisgICAgLy8gRGlz
dHJpYnV0ZSB0aGUgY2FyZXQncyB3aWR0aCB0byBlaXRoZXIgc2lkZSBvZiB0aGUgb2Zmc2V0Lgor
ICAgIGZsb2F0IGxlZnQgPSBsb2dpY2FsTGVmdFBvc2l0aW9uOworICAgIGludCBjYXJldFdpZHRo
TGVmdE9mT2Zmc2V0ID0gY2FyZXRXaWR0aCAvIDI7CisgICAgbGVmdCAtPSBjYXJldFdpZHRoTGVm
dE9mT2Zmc2V0OworICAgIGludCBjYXJldFdpZHRoUmlnaHRPZk9mZnNldCA9IGNhcmV0V2lkdGgg
LSBjYXJldFdpZHRoTGVmdE9mT2Zmc2V0OworICAgIGxlZnQgPSByb3VuZGYobGVmdCk7CisKKyAg
ICBmbG9hdCBsaW5lTGVmdCA9IGxvZ2ljYWxMZWZ0KCk7CisgICAgZmxvYXQgbGluZVJpZ2h0ID0g
bG9naWNhbFJpZ2h0KCk7CisKKyAgICBpZiAoZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQorICAgICAg
ICAqZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gbGluZVJpZ2h0IC0gKGxlZnQgKyBjYXJldFdpZHRo
KTsKKworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBibG9ja1N0eWxlID0gY29udGFpbmluZ0Jsb2Nr
KCkuc3R5bGUoKTsKKworICAgIGJvb2wgcmlnaHRBbGlnbmVkID0gZmFsc2U7CisgICAgc3dpdGNo
IChibG9ja1N0eWxlLnRleHRBbGlnbigpKSB7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdo
dDoKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0OgorICAgICAgICByaWdodEFs
aWduZWQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okxl
ZnQ6CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0OgorICAgIGNhc2UgVGV4dEFs
aWduTW9kZTo6Q2VudGVyOgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0Q2VudGVyOgor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6CisgICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKKyAgICAgICAgcmlnaHRBbGlnbmVkID0gIWJsb2NrU3R5
bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRl
eHRBbGlnbk1vZGU6OkVuZDoKKyAgICAgICAgcmlnaHRBbGlnbmVkID0gYmxvY2tTdHlsZS5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGZsb2F0
IGxlZnRFZGdlID0gc3RkOjptaW48ZmxvYXQ+KDAsIGxpbmVMZWZ0KTsKKyAgICBmbG9hdCByaWdo
dEVkZ2UgPSBzdGQ6Om1heDxmbG9hdD4oY29udGFpbmluZ0Jsb2NrKCkubG9naWNhbFdpZHRoKCks
IGxpbmVSaWdodCk7CisKKyAgICBpZiAocmlnaHRBbGlnbmVkKSB7CisgICAgICAgIGxlZnQgPSBz
dGQ6Om1heChsZWZ0LCBsZWZ0RWRnZSk7CisgICAgICAgIGxlZnQgPSBzdGQ6Om1pbihsZWZ0LCBs
aW5lUmlnaHQgLSBjYXJldFdpZHRoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0ID0gc3Rk
OjptaW4obGVmdCwgcmlnaHRFZGdlIC0gY2FyZXRXaWR0aFJpZ2h0T2ZPZmZzZXQpOworICAgICAg
ICBsZWZ0ID0gc3RkOjptYXgobGVmdCwgbGluZUxlZnQpOworICAgIH0KKyAgICByZXR1cm4gYmxv
Y2tTdHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gSW50UmVjdChsZWZ0LCB0b3AsIGNh
cmV0V2lkdGgsIGhlaWdodCkgOiBJbnRSZWN0KHRvcCwgbGVmdCwgaGVpZ2h0LCBjYXJldFdpZHRo
KTsKK30KKwogfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5oCmluZGV4IGU0
ODc0NDE2MWFiMy4uOTk4YTg1ZTdiM2JmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0
b3IuaApAQCAtNTksOSArNTksMTIgQEAgcHVibGljOgogICAgIExheW91dFVuaXQgbGluZUJveEJv
dHRvbSgpIGNvbnN0OwogCiAgICAgZmxvYXQgeSgpIGNvbnN0OworICAgIGZsb2F0IGxvZ2ljYWxM
ZWZ0KCkgY29uc3Q7CisgICAgZmxvYXQgbG9naWNhbFJpZ2h0KCkgY29uc3Q7CiAgICAgZmxvYXQg
bG9naWNhbEhlaWdodCgpIGNvbnN0OwogCiAgICAgaW50IGJsb2NrRGlyZWN0aW9uUG9pbnRJbkxp
bmUoKSBjb25zdDsKKyAgICBJbnRSZWN0IGNvbXB1dGVDYXJldFJlY3QoZmxvYXQgbG9naWNhbExl
ZnRQb3NpdGlvbiwgdW5zaWduZWQgY2FyZXRXaWR0aCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRv
RW5kT2ZMaW5lKSBjb25zdDsKIAogICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29uc3Q7CiAKQEAg
LTE3Nyw2ICsxODAsMjAgQEAgaW5saW5lIGZsb2F0IFBhdGhMaW5lOjp5KCkgY29uc3QKICAgICB9
KTsKIH0KIAoraW5saW5lIGZsb2F0IFBhdGhMaW5lOjpsb2dpY2FsTGVmdCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0
aCkgeworICAgICAgICByZXR1cm4gcGF0aC5sb2dpY2FsTGVmdCgpOworICAgIH0pOworfQorCitp
bmxpbmUgZmxvYXQgUGF0aExpbmU6OmxvZ2ljYWxSaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0aCkgeworICAg
ICAgICByZXR1cm4gcGF0aC5sb2dpY2FsUmlnaHQoKTsKKyAgICB9KTsKK30KKwogaW5saW5lIGZs
b2F0IFBhdGhMaW5lOjpsb2dpY2FsSGVpZ2h0KCkgY29uc3QKIHsKICAgICByZXR1cm4gV1RGOjpz
d2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShjb25zdCBhdXRvJiBwYXRoKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5l
SXRlcmF0b3JMZWdhY3lQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24v
TGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JMZWdhY3lQYXRoLmgKaW5kZXggNmMyOWNjM2Yw
ZGZkLi42YzYyODllZGE2NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRl
Z3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvckxlZ2FjeVBhdGguaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRl
cmF0b3JMZWdhY3lQYXRoLmgKQEAgLTUzLDYgKzUzLDggQEAgcHVibGljOgogICAgIExheW91dFVu
aXQgbGluZUJveEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+bGluZUJv
eEJvdHRvbSgpOyB9CiAKICAgICBmbG9hdCB5KCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5l
Qm94LT55KCk7IH0KKyAgICBmbG9hdCBsb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9v
dElubGluZUJveC0+bG9naWNhbExlZnQoKTsgfQorICAgIGZsb2F0IGxvZ2ljYWxSaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+bG9naWNhbFJpZ2h0KCk7IH0KICAgICBmbG9h
dCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94LT5sb2dpY2Fs
SGVpZ2h0KCk7IH0KICAgICBib29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9v
dElubGluZUJveC0+aXNIb3Jpem9udGFsKCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yTW9kZXJu
UGF0aC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0
aW9uTGluZUl0ZXJhdG9yTW9kZXJuUGF0aC5oCmluZGV4IGFhMThkYzk3MmE3ZC4uODU3Yjc2Njkx
ZmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0
SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yTW9kZXJuUGF0
aC5oCkBAIC01OSw2ICs1OSw4IEBAIHB1YmxpYzoKICAgICBMYXlvdXRVbml0IGxpbmVCb3hCb3R0
b20oKSBjb25zdCB7IHJldHVybiBMYXlvdXRVbml0Ojpmcm9tRmxvYXRSb3VuZChsaW5lKCkucmVj
dCgpLm1heFkoKSk7IH0KIAogICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBsaW5lQm94VG9w
KCk7IH0KKyAgICBmbG9hdCBsb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIGxpbmUoKS5yZWN0
KCkueCgpOyB9CisgICAgZmxvYXQgbG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbGluZSgp
LnJlY3QoKS5tYXhYKCk7IH0KICAgICBmbG9hdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1
cm4gbGluZSgpLnJlY3QoKS5oZWlnaHQoKTsgfQogICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaAppbmRl
eCBkMzZhMTExN2QwZDUuLmU3Njc3YzY1ZTZlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVy
YXRvci5oCkBAIC0xMDgsNiArMTA4LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGxlbmd0aCgp
IGNvbnN0OwogCiAgICAgdW5zaWduZWQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgeCkgY29uc3Q7
CisgICAgZmxvYXQgcG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQpIGNvbnN0OwogCiAgICAgYm9v
bCBpc1NlbGVjdGFibGUodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkgY29uc3Q7CiAgICAg
TGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0KHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpIGNv
bnN0OwpAQCAtMzI4LDYgKzMyOSwxMyBAQCBpbmxpbmUgdW5zaWduZWQgUGF0aFRleHRSdW46Om9m
ZnNldEZvclBvc2l0aW9uKGZsb2F0IHgpIGNvbnN0CiAgICAgfSk7CiB9CiAKK2lubGluZSBmbG9h
dCBQYXRoVGV4dFJ1bjo6cG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KSBjb25zdAor
eworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFsmXShhdXRvJiBwYXRo
KSB7CisgICAgICAgIHJldHVybiBwYXRoLnBvc2l0aW9uRm9yT2Zmc2V0KG9mZnNldCk7CisgICAg
fSk7Cit9CisKIGlubGluZSBib29sIFBhdGhUZXh0UnVuOjppc1NlbGVjdGFibGUodW5zaWduZWQg
c3RhcnQsIHVuc2lnbmVkIGVuZCkgY29uc3QKIHsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbiht
X3BhdGhWYXJpYW50LCBbJl0oYXV0byYgcGF0aCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JMZWdhY3lQ
YXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRp
b25SdW5JdGVyYXRvckxlZ2FjeVBhdGguaAppbmRleCA1ZTE4M2EwMjIzZjIuLmEyYTdkZTg2MDUw
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dElu
dGVncmF0aW9uUnVuSXRlcmF0b3JMZWdhY3lQYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JMZWdhY3lQYXRoLmgK
QEAgLTU5LDcgKzU5LDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIGlubGluZVRleHRCb3goKS0+ZW5kKCk7IH0KICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBpbmxpbmVUZXh0Qm94KCktPmxlbigpOyB9CiAKLSAgICBpbmxpbmUgdW5zaWdu
ZWQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgeCkgY29uc3QgeyByZXR1cm4gaW5saW5lVGV4dEJv
eCgpLT5vZmZzZXRGb3JQb3NpdGlvbih4KTsgfQorICAgIHVuc2lnbmVkIG9mZnNldEZvclBvc2l0
aW9uKGZsb2F0IHgpIGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRCb3goKS0+b2Zmc2V0Rm9yUG9z
aXRpb24oeCk7IH0KKyAgICBmbG9hdCBwb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQp
IGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRCb3goKS0+cG9zaXRpb25Gb3JPZmZzZXQob2Zmc2V0
KTsgfQogCiAgICAgYm9vbCBpc1NlbGVjdGFibGUodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVu
ZCkgY29uc3QgeyByZXR1cm4gaW5saW5lVGV4dEJveCgpLT5pc1NlbGVjdGVkKHN0YXJ0LCBlbmQp
OyB9CiAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0KHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25l
ZCBlbmQpIGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRCb3goKS0+bG9jYWxTZWxlY3Rpb25SZWN0
KHN0YXJ0LCBlbmQpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1vZGVyblBhdGguaCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yTW9k
ZXJuUGF0aC5oCmluZGV4IDNmMDY2MTA4NzJmMS4uZDE5N2U1NmRlMDQ0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVy
YXRvck1vZGVyblBhdGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24v
TGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1vZGVyblBhdGguaApAQCAtNjYsNiArNjYsNyBA
QCBwdWJsaWM6CiAgICAgdW5zaWduZWQgZW5kKCkgY29uc3QgeyByZXR1cm4gcnVuKCkudGV4dENv
bnRlbnQoKS0+ZW5kKCk7IH0KICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBy
dW4oKS50ZXh0Q29udGVudCgpLT5sZW5ndGgoKTsgfQogCisgICAgLy8gRklYTUU6IE1ha2UgYSBz
aGFyZWQgZ2VuZXJpYyB2ZXJzaW9uIG9mIHRoaXMuCiAgICAgaW5saW5lIHVuc2lnbmVkIG9mZnNl
dEZvclBvc2l0aW9uKGZsb2F0IHgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoaXNMaW5lQnJl
YWsoKSkKQEAgLTgxLDYgKzgyLDIzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJ1bigpLnN0
eWxlKCkuZm9udENhc2NhZGUoKS5vZmZzZXRGb3JQb3NpdGlvbihjcmVhdGVUZXh0UnVuKEh5cGhl
bk1vZGU6Oklnbm9yZSksIGxvY2FsWCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogICAgIH0KIAor
ICAgIC8vIEZJWE1FOiBNYWtlIGEgc2hhcmVkIGdlbmVyaWMgdmVyc2lvbiBvZiB0aGlzLgorICAg
IGZsb2F0IHBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChvZmZzZXQgPj0gc3RhcnQoKSk7CisgICAgICAgIEFTU0VSVChvZmZzZXQg
PD0gZW5kKCkpOworCisgICAgICAgIGlmIChpc0xpbmVCcmVhaygpKQorICAgICAgICAgICAgcmV0
dXJuIHJlY3QoKS54KCk7CisKKyAgICAgICAgYXV0byBlbmRPZmZzZXQgPSBjbGFtcGVkT2Zmc2V0
KG9mZnNldCk7CisKKyAgICAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVj
dChyZWN0KCkueCgpLCAwLCAwLCAwKTsKKyAgICAgICAgVGV4dFJ1biB0ZXh0UnVuID0gY3JlYXRl
VGV4dFJ1bihIeXBoZW5Nb2RlOjpJZ25vcmUpOworICAgICAgICBydW4oKS5zdHlsZSgpLmZvbnRD
YXNjYWRlKCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1biwgc2VsZWN0aW9uUmVj
dCwgMCwgZW5kT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIHNuYXBSZWN0VG9EZXZpY2VQaXhlbHNX
aXRoV3JpdGluZ0RpcmVjdGlvbihzZWxlY3Rpb25SZWN0LCByZW5kZXJlcigpLmRvY3VtZW50KCku
ZGV2aWNlU2NhbGVGYWN0b3IoKSwgdGV4dFJ1bi5sdHIoKSkubWF4WCgpOworICAgIH0KKwogICAg
IGJvb2wgaXNTZWxlY3RhYmxlKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpIGNvbnN0CiAg
ICAgewogICAgICAgICByZXR1cm4gY2xhbXBlZE9mZnNldChzdGFydCkgPCBjbGFtcGVkT2Zmc2V0
KGVuZCk7CkBAIC0xMDUsOCArMTIzLDggQEAgcHVibGljOgogICAgICAgICBMYXlvdXRSZWN0IHNl
bGVjdGlvblJlY3QgeyBsb2dpY2FsTGVmdCwgc2VsZWN0aW9uVG9wLCBsb2dpY2FsV2lkdGgsIHNl
bGVjdGlvbkhlaWdodCB9OwogCiAgICAgICAgIFRleHRSdW4gdGV4dFJ1biA9IGNyZWF0ZVRleHRS
dW4oSHlwaGVuTW9kZTo6SW5jbHVkZSk7Ci0gICAgICAgIGlmIChjbGFtcGVkU3RhcnQgIT0gc3Rh
cnQoKSB8fCBjbGFtcGVkRW5kICE9IHRleHRSdW4ubGVuZ3RoKCkpCi0gICAgICAgICAgICBydW4o
KS5zdHlsZSgpLmZvbnRDYXNjYWRlKCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1
biwgc2VsZWN0aW9uUmVjdCwgY2xhbXBlZFN0YXJ0IC0gc3RhcnQoKSwgY2xhbXBlZEVuZCAtIHN0
YXJ0KCkpOworICAgICAgICBpZiAoY2xhbXBlZFN0YXJ0IHx8IGNsYW1wZWRFbmQgIT0gdGV4dFJ1
bi5sZW5ndGgoKSkKKyAgICAgICAgICAgIHJ1bigpLnN0eWxlKCkuZm9udENhc2NhZGUoKS5hZGp1
c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBzZWxlY3Rpb25SZWN0LCBjbGFtcGVkU3Rh
cnQsIGNsYW1wZWRFbmQpOwogCiAgICAgICAgIHJldHVybiBzbmFwcGVkU2VsZWN0aW9uUmVjdChz
ZWxlY3Rpb25SZWN0LCBsb2dpY2FsUmlnaHQsIHNlbGVjdGlvblRvcCwgc2VsZWN0aW9uSGVpZ2h0
LCBpc0hvcml6b250YWwoKSk7CiAgICAgfQpAQCAtMTk4LDkgKzIxNiw5IEBAIHByaXZhdGU6CiAK
ICAgICB1bnNpZ25lZCBjbGFtcGVkT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkgY29uc3QKICAgICB7
Ci0gICAgICAgIGF1dG8gY2xhbXBlZE9mZnNldCA9IHN0ZDo6bWF4KHN0YXJ0KCksIHN0ZDo6bWlu
KG9mZnNldCwgZW5kKCkpKTsKKyAgICAgICAgYXV0byBjbGFtcGVkT2Zmc2V0ID0gc3RkOjptYXgo
c3RhcnQoKSwgc3RkOjptaW4ob2Zmc2V0LCBlbmQoKSkpIC0gc3RhcnQoKTsKICAgICAgICAgLy8g
V2UgdHJlYXQgdGhlIGxhc3QgY29kZXBvaW50IGluIHRoaXMgcnVuIGFuZCB0aGUgaHlwaGVuIGFz
IGEgc2luZ2xlIHVuaXQuCi0gICAgICAgIGlmIChoYXNIeXBoZW4oKSAmJiBjbGFtcGVkT2Zmc2V0
ID09IGVuZCgpKQorICAgICAgICBpZiAoaGFzSHlwaGVuKCkgJiYgY2xhbXBlZE9mZnNldCA9PSBs
ZW5ndGgoKSkKICAgICAgICAgICAgIGNsYW1wZWRPZmZzZXQgKz0gcnVuKCkuc3R5bGUoKS5oeXBo
ZW5TdHJpbmcoKS5sZW5ndGgoKTsKIAogICAgICAgICByZXR1cm4gY2xhbXBlZE9mZnNldDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDEwNDgyZDQwMTE4MC4u
MzNhMGNhNjFlMGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAK
QEAgLTI4NDIsMTEgKzI4NDIsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlSGl0VGVzdFJl
c3VsdChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JgogICAgIH0KIH0K
IAotTGF5b3V0UmVjdCBSZW5kZXJCbG9jazo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxp
bmVCb3gsIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRP
ZkxpbmUpCitMYXlvdXRSZWN0IFJlbmRlckJsb2NrOjpsb2NhbENhcmV0UmVjdChjb25zdCBJbmxp
bmVSdW5BbmRPZmZzZXQmIHJ1bkFuZE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5k
T2ZMaW5lKSBjb25zdAogewogICAgIC8vIERvIHRoZSBub3JtYWwgY2FsY3VsYXRpb24gaW4gbW9z
dCBjYXNlcy4KICAgICBpZiAoZmlyc3RDaGlsZCgpKQotICAgICAgICByZXR1cm4gUmVuZGVyQm94
Ojpsb2NhbENhcmV0UmVjdChpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0LCBleHRyYVdpZHRoVG9FbmRP
ZkxpbmUpOworICAgICAgICByZXR1cm4gUmVuZGVyQm94Ojpsb2NhbENhcmV0UmVjdChydW5BbmRP
ZmZzZXQsIGV4dHJhV2lkdGhUb0VuZE9mTGluZSk7CiAKICAgICBMYXlvdXRSZWN0IGNhcmV0UmVj
dCA9IGxvY2FsQ2FyZXRSZWN0Rm9yRW1wdHlFbGVtZW50KHdpZHRoKCksIHRleHRJbmRlbnRPZmZz
ZXQoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKaW5kZXggNTY4MjBj
ZDg4YWFhLi41ZTgxMGEzYjJjMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5oCkBAIC00ODQsNyArNDg0LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcGFpbnRDb250aW51
YXRpb25PdXRsaW5lcyhQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogCi0gICAgTGF5
b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJldE9mZnNldCwg
TGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCkgZmluYWw7CisgICAgTGF5b3V0
UmVjdCBsb2NhbENhcmV0UmVjdChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmLCBMYXlvdXRVbml0
KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSBudWxscHRyKSBjb25zdCBmaW5hbDsKICAgICAKICAg
ICAvLyBGSVhNRS1CTE9DS0ZMT1c6IFJlbW92ZSB2aXJ0dWFsaXphaW9uIHdoZW4gYWxsIGNhbGxl
cnMgaGF2ZSBtb3ZlZCB0byBSZW5kZXJCbG9ja0Zsb3cKICAgICB2aXJ0dWFsIFZpc2libGVQb3Np
dGlvbiBwb3NpdGlvbkZvclBvaW50V2l0aElubGluZUNoaWxkcmVuKGNvbnN0IExheW91dFBvaW50
JiwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAKaW5kZXggNjM5NTJkMGVhMTg4Li45MDE1YmYyOTRjYTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVk
ZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNp
bmNsdWRlICJJbmxpbmVFbGVtZW50Qm94LmgiCisjaW5jbHVkZSAiSW5saW5lUnVuQW5kT2Zmc2V0
LmgiCiAjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgpAQCAtNDQyOSw3ICs0NDMwLDcgQEAgdm9p
ZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodFJlcGxhY2VkKExvZ2lj
YWxFeHRlbnRDb21wdXRlZFZhbHUKICAgICBjb21wdXRlZFZhbHVlcy5tX3Bvc2l0aW9uID0gbG9n
aWNhbFRvcFBvczsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0KElu
bGluZUJveCogYm94LCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0
aFRvRW5kT2ZMaW5lKQorTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0KGNvbnN0
IElubGluZVJ1bkFuZE9mZnNldCYgcnVuQW5kT2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRo
VG9FbmRPZkxpbmUpIGNvbnN0CiB7CiAgICAgLy8gVmlzaWJsZVBvc2l0aW9ucyBhdCBvZmZzZXRz
IGluc2lkZSBjb250YWluZXJzIGVpdGhlciBhKSByZWZlciB0byB0aGUgcG9zaXRpb25zIGJlZm9y
ZS9hZnRlcgogICAgIC8vIHRob3NlIGNvbnRhaW5lcnMgKHRhYmxlcyBhbmQgc2VsZWN0IGVsZW1l
bnRzKSBvciBiKSByZWZlciB0byB0aGUgcG9zaXRpb24gaW5zaWRlIGFuIGVtcHR5IGJsb2NrLgpA
QCAtNDQzNywxNiArNDQzOCwxNiBAQCBMYXlvdXRSZWN0IFJlbmRlckJveDo6bG9jYWxDYXJldFJl
Y3QoSW5saW5lQm94KiBib3gsIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdQogICAgIC8vIEZJ
WE1FOiBQYWludCB0aGUgY2FyZXRzIGluc2lkZSBlbXB0eSBibG9ja3MgZGlmZmVyZW50bHkgdGhh
biB0aGUgY2FyZXRzIGJlZm9yZS9hZnRlciBlbGVtZW50cy4KIAogICAgIExheW91dFJlY3QgcmVj
dChsb2NhdGlvbigpLCBMYXlvdXRTaXplKGNhcmV0V2lkdGgsIGhlaWdodCgpKSk7Ci0gICAgYm9v
bCBsdHIgPSBib3ggPyBib3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA6IHN0eWxlKCkuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpOworICAgIGJvb2wgbHRyID0gcnVuQW5kT2Zmc2V0LnJ1biA/
IHJ1bkFuZE9mZnNldC5ydW4tPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA6IHN0eWxlKCkuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpOwogCi0gICAgaWYgKCghY2FyZXRPZmZzZXQpIF4gbHRyKQor
ICAgIGlmICgoIXJ1bkFuZE9mZnNldC5vZmZzZXQpIF4gbHRyKQogICAgICAgICByZWN0Lm1vdmUo
TGF5b3V0U2l6ZSh3aWR0aCgpIC0gY2FyZXRXaWR0aCwgMF9sdSkpOwogCi0gICAgaWYgKGJveCkg
ewotICAgICAgICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94ID0gYm94LT5yb290KCk7Ci0g
ICAgICAgIExheW91dFVuaXQgdG9wID0gcm9vdEJveC5saW5lVG9wKCk7CisgICAgaWYgKHJ1bkFu
ZE9mZnNldC5ydW4pIHsKKyAgICAgICAgYXV0byBsaW5lID0gcnVuQW5kT2Zmc2V0LnJ1bi5saW5l
KCk7CisgICAgICAgIExheW91dFVuaXQgdG9wID0gbGluZS0+dG9wKCk7CiAgICAgICAgIHJlY3Qu
c2V0WSh0b3ApOwotICAgICAgICByZWN0LnNldEhlaWdodChyb290Qm94LmxpbmVCb3R0b20oKSAt
IHRvcCk7CisgICAgICAgIHJlY3Quc2V0SGVpZ2h0KGxpbmUtPmJvdHRvbSgpIC0gdG9wKTsKICAg
ICB9CiAKICAgICAvLyBJZiBoZWlnaHQgb2YgYm94IGlzIHNtYWxsZXIgdGhhbiBmb250IGhlaWdo
dCwgdXNlIHRoZSBsYXR0ZXIgb25lLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCmlu
ZGV4IGUwODE0NWQ4ZTBlOS4uZGRiMTYwOGZhZmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5oCkBAIC00OTgsNyArNDk4LDcgQEAgb3ZlcnJpZGU7CiAKICAgICBib29sIHNob3Vs
ZFRyZWF0Q2hpbGRBc1JlcGxhY2VkSW5UYWJsZUNlbGxzKCkgY29uc3Q7CiAgICAgCi0gICAgTGF5
b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJldE9mZnNldCwg
TGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gbnVsbHB0cikgb3ZlcnJpZGU7Cisg
ICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmLCBM
YXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSBudWxscHRyKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdmVyZmxvd0NsaXBSZWN0KGNvbnN0IExheW91
dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqID0gbnVsbHB0ciwgT3Zl
cmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwg
UGFpbnRQaGFzZSA9IFBhaW50UGhhc2U6OkJsb2NrQmFja2dyb3VuZCkgY29uc3Q7CiAgICAgdmly
dHVhbCBMYXlvdXRSZWN0IG92ZXJmbG93Q2xpcFJlY3RGb3JDaGlsZExheWVycyhjb25zdCBMYXlv
dXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCwgT3Zl
cmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdCB7IHJldHVybiBvdmVy
Zmxvd0NsaXBSZWN0KGxvY2F0aW9uLCBmcmFnbWVudCwgcmVsZXZhbmN5KTsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggYzU4
MGU1M2RmZDM4Li5kOWE3NWM5ZWExOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtMjYyNiw3ICsyNjI2LDcgQEAgdm9pZCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2xlYXJGaXJzdExldHRlclJlbWFpbmluZ1RleHQoKQogICAg
IGZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dE1hcCgpLnJlbW92ZSh0aGlzKTsKIH0KIAotTGF5b3V0
UmVjdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6bG9jYWxDYXJldFJlY3RGb3JFbXB0eUVsZW1lbnQo
TGF5b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCB0ZXh0SW5kZW50T2Zmc2V0KQorTGF5b3V0UmVj
dCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6bG9jYWxDYXJldFJlY3RGb3JFbXB0eUVsZW1lbnQoTGF5
b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCB0ZXh0SW5kZW50T2Zmc2V0KSBjb25zdAogewogICAg
IEFTU0VSVCghZmlyc3RDaGlsZCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuaAppbmRleCA4NDdlZjMxZjI2YmYuLmVjYTZkNTg2ODVmNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgK
QEAgLTI2MCw3ICsyNjAsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0
eSBjaG9vc2VJbnRlcnBvbGF0aW9uUXVhbGl0eShHcmFwaGljc0NvbnRleHQmLCBJbWFnZSYsIGNv
bnN0IHZvaWQqLCBjb25zdCBMYXlvdXRTaXplJik7CiAKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ2Fy
ZXRSZWN0Rm9yRW1wdHlFbGVtZW50KExheW91dFVuaXQgd2lkdGgsIExheW91dFVuaXQgdGV4dElu
ZGVudE9mZnNldCk7CisgICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdEZvckVtcHR5RWxlbWVu
dChMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IHRleHRJbmRlbnRPZmZzZXQpIGNvbnN0Owog
CiAgICAgc3RhdGljIGJvb2wgc2hvdWxkQW50aWFsaWFzTGluZXMoR3JhcGhpY3NDb250ZXh0Jik7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKaW5kZXggYWRhNGY3
MzM4NWNlLi5mNzhlYzdkY2Y4MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuY3BwCkBAIC0yMjgsNyArMjI4LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnVwZGF0ZUFs
d2F5c0NyZWF0ZUxpbmVCb3hlcyhib29sIGZ1bGxMYXlvdXQpCiAgICAgfQogfQogCi1MYXlvdXRS
ZWN0IFJlbmRlcklubGluZTo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxpbmVCb3gsIHVu
c2lnbmVkLCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCitMYXlvdXRSZWN0IFJl
bmRlcklubGluZTo6bG9jYWxDYXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiwgTGF5
b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBjb25zdAogewogICAgIGlmIChmaXJzdENo
aWxkKCkpIHsKICAgICAgICAgLy8gVGhpcyBjb25kaXRpb24gaXMgcG9zc2libGUgaWYgdGhlIFJl
bmRlcklubGluZSBpcyBhdCBhbiBlZGl0aW5nIGJvdW5kYXJ5LApAQCAtMjM5LDggKzIzOSw2IEBA
IExheW91dFJlY3QgUmVuZGVySW5saW5lOjpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGlu
ZUJveCwgdW5zaWduZWQsIExheW91dFVuCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAg
ICAgfQogCi0gICAgQVNTRVJUX1VOVVNFRChpbmxpbmVCb3gsICFpbmxpbmVCb3gpOwotCiAgICAg
aWYgKGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKICAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGlu
ZSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAppbmRleCA0NDhi
M2EwNWQ1NTIuLmVhNTUwYzI5NWI5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcklubGluZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuaApAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHdheXNDcmVh
dGVMaW5lQm94ZXMoKSB7IHNldFJlbmRlcklubGluZUFsd2F5c0NyZWF0ZXNMaW5lQm94ZXModHJ1
ZSk7IH0KICAgICB2b2lkIHVwZGF0ZUFsd2F5c0NyZWF0ZUxpbmVCb3hlcyhib29sIGZ1bGxMYXlv
dXQpOwogCi0gICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25l
ZCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBmaW5hbDsKKyAgICBMYXlvdXRS
ZWN0IGxvY2FsQ2FyZXRSZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYsIExheW91dFVuaXQq
IGV4dHJhV2lkdGhUb0VuZE9mTGluZSkgY29uc3QgZmluYWw7CiAKICAgICBib29sIGhpdFRlc3RD
dWxsZWRJbmxpbmUoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGluZUJyZWFrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aW5lQnJlYWsuY3BwCmluZGV4IDMwZWNjNTM0OWJhNC4uOTNkZjljYjE0MWFiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcApAQCAtMjcsNiArMjcsOCBA
QAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFdCUkVsZW1lbnQuaCIK
ICNpbmNsdWRlICJJbmxpbmVFbGVtZW50Qm94LmgiCisjaW5jbHVkZSAiSW5saW5lUnVuQW5kT2Zm
c2V0LmgiCisjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaCIKICNpbmNs
dWRlICJMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTG9naWNhbFNl
bGVjdGlvbk9mZnNldENhY2hlcy5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCkBAIC0xNTYs
MjQgKzE1OCwyNSBAQCB2b2lkIFJlbmRlckxpbmVCcmVhazo6c2V0U2VsZWN0aW9uU3RhdGUoSGln
aGxpZ2h0U3RhdGUgc3RhdGUpCiAgICAgbV9pbmxpbmVCb3hXcmFwcGVyLT5yb290KCkuc2V0SGFz
U2VsZWN0ZWRDaGlsZHJlbihzdGF0ZSAhPSBIaWdobGlnaHRTdGF0ZTo6Tm9uZSk7CiB9CiAKLUxh
eW91dFJlY3QgUmVuZGVyTGluZUJyZWFrOjpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGlu
ZUJveCwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9m
TGluZSkKK0xheW91dFJlY3QgUmVuZGVyTGluZUJyZWFrOjpsb2NhbENhcmV0UmVjdChjb25zdCBJ
bmxpbmVSdW5BbmRPZmZzZXQmIHJ1bkFuZE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRv
RW5kT2ZMaW5lKSBjb25zdAogewotICAgIEFTU0VSVF9VTlVTRUQoY2FyZXRPZmZzZXQsICFjYXJl
dE9mZnNldCk7Ci0gICAgQVNTRVJUX1VOVVNFRChpbmxpbmVCb3gsIGlubGluZUJveCA9PSBtX2lu
bGluZUJveFdyYXBwZXIpOwotICAgIGlmICghaW5saW5lQm94KQorICAgIEFTU0VSVCghcnVuQW5k
T2Zmc2V0Lm9mZnNldCk7CisgICAgQVNTRVJUKHJ1bkFuZE9mZnNldC5ydW4gPT0gTGF5b3V0SW50
ZWdyYXRpb246OnJ1bkZvcigqdGhpcykpOworCisgICAgaWYgKCFydW5BbmRPZmZzZXQucnVuKQog
ICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCi0gICAgY29uc3QgUm9vdElubGluZUJveCYg
cm9vdEJveCA9IGlubGluZUJveC0+cm9vdCgpOwotICAgIHJldHVybiByb290Qm94LmNvbXB1dGVD
YXJldFJlY3QoaW5saW5lQm94LT5sb2dpY2FsTGVmdCgpLCBjYXJldFdpZHRoLCBleHRyYVdpZHRo
VG9FbmRPZkxpbmUpOworICAgIGF1dG8gbGluZSA9IHJ1bkFuZE9mZnNldC5ydW4ubGluZSgpOwor
ICAgIHJldHVybiBsaW5lLT5jb21wdXRlQ2FyZXRSZWN0KGxpbmUtPmxvZ2ljYWxMZWZ0KCksIGNh
cmV0V2lkdGgsIGV4dHJhV2lkdGhUb0VuZE9mTGluZSk7CiB9CiAKIEludFJlY3QgUmVuZGVyTGlu
ZUJyZWFrOjpsaW5lc0JvdW5kaW5nQm94KCkgY29uc3QKIHsKLSAgICBhdXRvIGJveCA9IExheW91
dEludGVncmF0aW9uOjpydW5Gb3IoKnRoaXMpOwotICAgIGlmICghYm94KQorICAgIGF1dG8gcnVu
ID0gTGF5b3V0SW50ZWdyYXRpb246OnJ1bkZvcigqdGhpcyk7CisgICAgaWYgKCFydW4pCiAgICAg
ICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChib3gtPnJlY3Qo
KSk7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QocnVuLT5yZWN0KCkpOwogfQogCiB2b2lk
IFJlbmRlckxpbmVCcmVhazo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBj
b25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0CkBAIC0yMDksNyArMjEy
LDkgQEAgdm9pZCBSZW5kZXJMaW5lQnJlYWs6OmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhWZWN0b3I8
U2VsZWN0aW9uUmVjdD4mIHJlY3RzLCB1bnNpZ24KICAgICBpZiAoIWJveCkKICAgICAgICAgcmV0
dXJuOwogICAgIGNvbnN0IFJvb3RJbmxpbmVCb3gmIHJvb3RCb3ggPSBib3gtPnJvb3QoKTsKLSAg
ICBMYXlvdXRSZWN0IHJlY3QgPSByb290Qm94LmNvbXB1dGVDYXJldFJlY3QoYm94LT5sb2dpY2Fs
TGVmdCgpLCAwLCBudWxscHRyKTsKKworICAgIExheW91dFJlY3QgcmVjdCA9IExheW91dEludGVn
cmF0aW9uOjpMaW5lSXRlcmF0b3IoJnJvb3RCb3gpLT5jb21wdXRlQ2FyZXRSZWN0KGJveC0+bG9n
aWNhbExlZnQoKSwgMCwgbnVsbHB0cikKKwogICAgIGlmIChyb290Qm94LmlzRmlyc3RBZnRlclBh
Z2VCcmVhaygpKSB7CiAgICAgICAgIGlmIChib3gtPmlzSG9yaXpvbnRhbCgpKQogICAgICAgICAg
ICAgcmVjdC5zaGlmdFlFZGdlVG8ocm9vdEJveC5saW5lQm94VG9wKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oCmluZGV4IGZlZDE0ODMyZGM0OC4uNDA0MzJh
Y2U3Yzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJy
ZWFrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oCkBA
IC02Niw3ICs2Niw3IEBAIHByaXZhdGU6CiAgICAgaW50IGNhcmV0TWluT2Zmc2V0KCkgY29uc3Qg
ZmluYWw7CiAgICAgaW50IGNhcmV0TWF4T2Zmc2V0KCkgY29uc3QgZmluYWw7CiAgICAgYm9vbCBj
YW5CZVNlbGVjdGlvbkxlYWYoKSBjb25zdCBmaW5hbDsKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ2Fy
ZXRSZWN0KElubGluZUJveCosIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRy
YVdpZHRoVG9FbmRPZkxpbmUpIGZpbmFsOworICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3Qo
Y29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZM
aW5lKSBjb25zdCBmaW5hbDsKICAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRlKEhpZ2hsaWdodFN0
YXRlKSBmaW5hbDsKIAogICAgIExheW91dFVuaXQgbGluZUhlaWdodChib29sIGZpcnN0TGluZSwg
TGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUpIGNvbnN0IGZpbmFsOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCA4OGExN2M1MDBlMjAuLmE1
ZDhjM2QyYzIxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAK
QEAgLTE0MDAsNyArMTQwMCw3IEBAIExheW91dFNpemUgUmVuZGVyT2JqZWN0OjpvZmZzZXRGcm9t
QW5jZXN0b3JDb250YWluZXIoUmVuZGVyRWxlbWVudCYgY29udGFpbmVyKSBjCiAgICAgcmV0dXJu
IG9mZnNldDsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJPYmplY3Q6OmxvY2FsQ2FyZXRSZWN0KElu
bGluZUJveCosIHVuc2lnbmVkLCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCitM
YXlvdXRSZWN0IFJlbmRlck9iamVjdDo6bG9jYWxDYXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5k
T2Zmc2V0JiwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBjb25zdAogewogICAg
IGlmIChleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiAgICAgICAgICpleHRyYVdpZHRoVG9FbmRPZkxp
bmUgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IGY3ZDIw
YzkyODZhYi4uNWMwYjEzNjllNDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oCkBAIC03NSw2ICs3NSw3IEBAIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKIGNsYXNzIFNl
bGVjdGlvblJlY3Q7CiAjZW5kaWYKIAorc3RydWN0IElubGluZVJ1bkFuZE9mZnNldDsKIHN0cnVj
dCBQYWludEluZm87CiBzdHJ1Y3QgU2ltcGxlUmFuZ2U7CiAKQEAgLTY3MiwxMyArNjczLDggQEAg
cHVibGljOgogICAgIC8vIFdoZXRoZXIgb3Igbm90IGEgZ2l2ZW4gYmxvY2sgbmVlZHMgdG8gcGFp
bnQgc2VsZWN0aW9uIGdhcHMuCiAgICAgdmlydHVhbCBib29sIHNob3VsZFBhaW50U2VsZWN0aW9u
R2FwcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5z
IHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgY2FyZXQgd2l0aGluIHRoaXMgcmVuZGVyIG9i
amVjdC4KLSAgICAgKiBAcGFyYW0gY2FyZXRPZmZzZXQgemVyby1iYXNlZCBvZmZzZXQgZGV0ZXJt
aW5pbmcgcG9zaXRpb24gd2l0aGluIHRoZSByZW5kZXIgb2JqZWN0LgotICAgICAqIEBwYXJhbSBl
eHRyYVdpZHRoVG9FbmRPZkxpbmUgb3B0aW9uYWwgb3V0IGFyZyB0byBnaXZlIGV4dHJhIHdpZHRo
IHRvIGVuZCBvZiBsaW5lIC0KLSAgICAgKiB1c2VmdWwgZm9yIGNoYXJhY3RlciByYW5nZSByZWN0
IGNvbXB1dGF0aW9ucwotICAgICAqLwotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBsb2NhbENhcmV0
UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFX
aWR0aFRvRW5kT2ZMaW5lID0gbnVsbHB0cik7CisgICAgLy8gUmV0dXJucyB0aGUgbG9jYWwgY29v
cmRpbmF0ZXMgb2YgdGhlIGNhcmV0IHdpdGhpbiB0aGlzIHJlbmRlciBvYmplY3QuCisgICAgdmly
dHVhbCBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYs
IExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IG51bGxwdHIpIGNvbnN0OwogCiAg
ICAgLy8gV2hlbiBwZXJmb3JtaW5nIGEgZ2xvYmFsIGRvY3VtZW50IHRlYXItZG93biwgb3Igd2hl
biBnb2luZyBpbnRvIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUsIHRoZSByZW5kZXJlciBvZiB0aGUg
ZG9jdW1lbnQgaXMgY2xlYXJlZC4KICAgICBib29sIHJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgp
IGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCmluZGV4IDUzOTA2
NWVlMDhiOS4uMzBkZjZhNGNmNGNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHQuY3BwCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVk
ZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIkh5cGhlbmF0aW9uLmgiCisjaW5jbHVk
ZSAiSW5saW5lUnVuQW5kT2Zmc2V0LmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgogI2lu
Y2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGF5b3V0
SW50ZWdyYXRpb25MaW5lTGF5b3V0LmgiCkBAIC03MTAsMTQgKzcxMSwxNSBAQCBWaXNpYmxlUG9z
aXRpb24gUmVuZGVyVGV4dDo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9p
bnQsIGNvbnN0IFJlbgogICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24oMCwgQWZmaW5p
dHk6OkRvd25zdHJlYW0pOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlclRleHQ6OmxvY2FsQ2FyZXRS
ZWN0KElubGluZUJveCogaW5saW5lQm94LCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3V0VW5p
dCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQorTGF5b3V0UmVjdCBSZW5kZXJUZXh0Ojpsb2NhbENh
cmV0UmVjdChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmIHJ1bkFuZE9mZnNldCwgTGF5b3V0VW5p
dCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBjb25zdAogewotICAgIGlmICghaW5saW5lQm94KQor
ICAgIGlmICghcnVuQW5kT2Zmc2V0LnJ1bikKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsK
IAotICAgIGF1dG8mIGJveCA9IGRvd25jYXN0PElubGluZVRleHRCb3g+KCppbmxpbmVCb3gpOwot
ICAgIGZsb2F0IGxlZnQgPSBib3gucG9zaXRpb25Gb3JPZmZzZXQoY2FyZXRPZmZzZXQpOwotICAg
IHJldHVybiBib3gucm9vdCgpLmNvbXB1dGVDYXJldFJlY3QobGVmdCwgY2FyZXRXaWR0aCwgZXh0
cmFXaWR0aFRvRW5kT2ZMaW5lKTsKKyAgICBhdXRvJiB0ZXh0UnVuID0gZG93bmNhc3Q8TGF5b3V0
SW50ZWdyYXRpb246OlRleHRSdW5JdGVyYXRvcj4ocnVuQW5kT2Zmc2V0LnJ1bik7CisKKyAgICBm
bG9hdCBsZWZ0ID0gdGV4dFJ1bi0+cG9zaXRpb25Gb3JPZmZzZXQocnVuQW5kT2Zmc2V0Lm9mZnNl
dCk7CisgICAgcmV0dXJuIHRleHRSdW4ubGluZSgpLT5jb21wdXRlQ2FyZXRSZWN0KGxlZnQsIGNh
cmV0V2lkdGgsIGV4dHJhV2lkdGhUb0VuZE9mTGluZSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgZmxv
YXQgUmVuZGVyVGV4dDo6d2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udENhc2NhZGUmIGYsIHVuc2ln
bmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW4sIGZsb2F0IHhQb3MsIEhhc2hTZXQ8Y29uc3QgRm9udCo+
KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93LCBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaApp
bmRleCA1Mjg4MDkzNGNjYjQuLmFlODVhZDI0MmE4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dC5oCkBAIC0yMDUsNyArMjA1LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2V0
U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUpIGZpbmFsOwogICAgIExheW91dFJlY3Qgc2Vs
ZWN0aW9uUmVjdEZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWlu
dENvbnRhaW5lciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCA9IHRydWUpIGZpbmFsOwotICAg
IExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiwgdW5zaWduZWQgY2FyZXRPZmZz
ZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IG51bGxwdHIpIG92ZXJyaWRl
OworICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0
JiwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gbnVsbHB0cikgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgTGF5b3V0UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChjb25z
dCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKSBjb25zdCBmaW5hbDsK
IAogICAgIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoZmxvYXQgbGVhZFdpZHRo
LCBIYXNoU2V0PGNvbnN0IEZvbnQqPiYgZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyYpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCmluZGV4IDFiNTA3ZWNk
Y2E2Mi4uMWQ1ZDM4NmZiMzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Um9vdElubGluZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxp
bmVCb3guY3BwCkBAIC00NzQsNTkgKzQ3NCw2IEBAIEdhcFJlY3RzIFJvb3RJbmxpbmVCb3g6Omxp
bmVTZWxlY3Rpb25HYXAoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0UG9pCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSW50UmVjdCBSb290SW5saW5lQm94Ojpjb21wdXRlQ2Fy
ZXRSZWN0KGZsb2F0IGxvZ2ljYWxMZWZ0UG9zaXRpb24sIHVuc2lnbmVkIGNhcmV0V2lkdGgsIExh
eW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkgY29uc3QKLXsKLSAgICBpbnQgaGVpZ2h0
ID0gc2VsZWN0aW9uSGVpZ2h0KCk7Ci0gICAgaW50IHRvcCA9IHNlbGVjdGlvblRvcCgpOwotCi0g
ICAgLy8gRGlzdHJpYnV0ZSB0aGUgY2FyZXQncyB3aWR0aCB0byBlaXRoZXIgc2lkZSBvZiB0aGUg
b2Zmc2V0LgotICAgIGZsb2F0IGxlZnQgPSBsb2dpY2FsTGVmdFBvc2l0aW9uOwotICAgIGludCBj
YXJldFdpZHRoTGVmdE9mT2Zmc2V0ID0gY2FyZXRXaWR0aCAvIDI7Ci0gICAgbGVmdCAtPSBjYXJl
dFdpZHRoTGVmdE9mT2Zmc2V0OwotICAgIGludCBjYXJldFdpZHRoUmlnaHRPZk9mZnNldCA9IGNh
cmV0V2lkdGggLSBjYXJldFdpZHRoTGVmdE9mT2Zmc2V0OwotICAgIGxlZnQgPSByb3VuZGYobGVm
dCk7Ci0KLSAgICBmbG9hdCByb290TGVmdCA9IGxvZ2ljYWxMZWZ0KCk7Ci0gICAgZmxvYXQgcm9v
dFJpZ2h0ID0gbG9naWNhbFJpZ2h0KCk7Ci0KLSAgICBpZiAoZXh0cmFXaWR0aFRvRW5kT2ZMaW5l
KQotICAgICAgICAqZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gKGxvZ2ljYWxXaWR0aCgpICsgcm9v
dExlZnQpIC0gKGxlZnQgKyBjYXJldFdpZHRoKTsKLQotICAgIGNvbnN0IFJlbmRlclN0eWxlJiBi
bG9ja1N0eWxlID0gYmxvY2tGbG93KCkuc3R5bGUoKTsKLQotICAgIGJvb2wgcmlnaHRBbGlnbmVk
ID0gZmFsc2U7Ci0gICAgc3dpdGNoIChibG9ja1N0eWxlLnRleHRBbGlnbigpKSB7Ci0gICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdFJp
Z2h0OgotICAgICAgICByaWdodEFsaWduZWQgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFRleHRBbGlnbk1vZGU6OkxlZnQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRM
ZWZ0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6Q2VudGVyOgotICAgIGNhc2UgVGV4dEFsaWdu
TW9kZTo6V2ViS2l0Q2VudGVyOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRleHRBbGlnbk1v
ZGU6Okp1c3RpZnk6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKLSAgICAgICAgcmln
aHRBbGlnbmVkID0gIWJsb2NrU3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkVuZDoKLSAgICAgICAgcmlnaHRBbGln
bmVkID0gYmxvY2tTdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIGZsb2F0IGxlZnRFZGdlID0gc3RkOjptaW48ZmxvYXQ+KDAsIHJvb3RM
ZWZ0KTsKLSAgICBmbG9hdCByaWdodEVkZ2UgPSBzdGQ6Om1heDxmbG9hdD4oYmxvY2tGbG93KCku
bG9naWNhbFdpZHRoKCksIHJvb3RSaWdodCk7Ci0KLSAgICBpZiAocmlnaHRBbGlnbmVkKSB7Ci0g
ICAgICAgIGxlZnQgPSBzdGQ6Om1heChsZWZ0LCBsZWZ0RWRnZSk7Ci0gICAgICAgIGxlZnQgPSBz
dGQ6Om1pbihsZWZ0LCByb290UmlnaHQgLSBjYXJldFdpZHRoKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBsZWZ0ID0gc3RkOjptaW4obGVmdCwgcmlnaHRFZGdlIC0gY2FyZXRXaWR0aFJpZ2h0T2ZP
ZmZzZXQpOwotICAgICAgICBsZWZ0ID0gc3RkOjptYXgobGVmdCwgcm9vdExlZnQpOwotICAgIH0K
LSAgICByZXR1cm4gYmxvY2tTdHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gSW50UmVj
dChsZWZ0LCB0b3AsIGNhcmV0V2lkdGgsIGhlaWdodCkgOiBJbnRSZWN0KHRvcCwgbGVmdCwgaGVp
Z2h0LCBjYXJldFdpZHRoKTsKLX0KLQogUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBSb290
SW5saW5lQm94OjpzZWxlY3Rpb25TdGF0ZSgpCiB7CiAgICAgLy8gV2FsayBvdmVyIGFsbCBvZiB0
aGUgc2VsZWN0ZWQgYm94ZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Um9vdElubGluZUJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3gu
aAppbmRleCBlNDgyOTJmN2FjM2IuLjcwMDkzMGFjNDcxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUm9vdElubGluZUJveC5oCkBAIC0xMzIsOCArMTMyLDYgQEAgcHVibGljOgogICAgIEdh
cFJlY3RzIGxpbmVTZWxlY3Rpb25HYXAoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywgY29uc3QgTGF5
b3V0UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IExheW91dFNpemUmIG9m
ZnNldEZyb21Sb290QmxvY2ssCiAgICAgICAgIExheW91dFVuaXQgc2VsVG9wLCBMYXlvdXRVbml0
IHNlbEhlaWdodCwgY29uc3QgTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcyYsIGNvbnN0IFBh
aW50SW5mbyopOwogCi0gICAgSW50UmVjdCBjb21wdXRlQ2FyZXRSZWN0KGZsb2F0IGxvZ2ljYWxM
ZWZ0UG9zaXRpb24sIHVuc2lnbmVkIGNhcmV0V2lkdGgsIExheW91dFVuaXQqIGV4dHJhV2lkdGhU
b0VuZE9mTGluZSkgY29uc3Q7Ci0KICAgICB1c2luZyBDbGVhbkxpbmVGbG9hdExpc3QgPSBWZWN0
b3I8V2Vha1B0cjxSZW5kZXJCb3g+PjsKICAgICB2b2lkIGFwcGVuZEZsb2F0KFJlbmRlckJveCYg
ZmxvYXRpbmdCb3gpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKaW5kZXggNDU1NTc3NjE4MGUxLi5iZjNmNzE1YjBm
NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5s
aW5lVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJ
bmxpbmVUZXh0LmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rv
ci5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5o
IgorI2luY2x1ZGUgIklubGluZVJ1bkFuZE9mZnNldC5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2Nr
LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1RleHQu
aCIKQEAgLTExNSwxMSArMTE2LDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVUZXh0Qm94PiBS
ZW5kZXJTVkdJbmxpbmVUZXh0OjpjcmVhdGVUZXh0Qm94KCkKIHsKICAgICBhdXRvIGJveCA9IG1h
a2VVbmlxdWU8U1ZHSW5saW5lVGV4dEJveD4oKnRoaXMpOwogICAgIGJveC0+c2V0SGFzVmlydHVh
bExvZ2ljYWxIZWlnaHQoKTsKLSAgICByZXR1cm4gYm94OworICAgIHJldHVybiBib3g7IAogfQog
Ci1MYXlvdXRSZWN0IFJlbmRlclNWR0lubGluZVRleHQ6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJv
eCogYm94LCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCopCitMYXlvdXRSZWN0IFJl
bmRlclNWR0lubGluZVRleHQ6OmxvY2FsQ2FyZXRSZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNl
dCYgcnVuQW5kT2Zmc2V0LCBMYXlvdXRVbml0KikgY29uc3QKIHsKKyAgICBhdXRvKiBib3ggPSBy
dW5BbmRPZmZzZXQucnVuID8gcnVuQW5kT2Zmc2V0LnJ1bi0+bGVnYWN5SW5saW5lQm94KCkgOiBu
dWxscHRyOworICAgIGF1dG8gY2FyZXRPZmZzZXQgPSBydW5BbmRPZmZzZXQub2Zmc2V0OworCiAg
ICAgaWYgKCFpczxJbmxpbmVUZXh0Qm94Pihib3gpKQogICAgICAgICByZXR1cm4gTGF5b3V0UmVj
dCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R0lubGluZVRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5s
aW5lVGV4dC5oCmluZGV4IGZmNDYzYjhiMDk2OS4uZGMyNzIwOTlkMDM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaApAQCAtNjIs
NyArNjIsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNTVkdJbmxpbmVUZXh0KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9y
UG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciop
IG92ZXJyaWRlOwotICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiwgdW5z
aWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IDAp
IG92ZXJyaWRlOworICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoY29uc3QgSW5saW5lUnVu
QW5kT2Zmc2V0JiwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gbnVsbHB0cikg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgSW50UmVjdCBsaW5lc0JvdW5kaW5nQm94KCkgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElubGluZVRleHRCb3g+IGNyZWF0ZVRleHRCb3go
KSBvdmVycmlkZTsKIAo=
</data>
<flag name="commit-queue"
          id="429887"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413321</attachid>
            <date>2020-11-05 10:47:03 -0800</date>
            <delta_ts>2020-11-06 04:33:24 -0800</delta_ts>
            <desc>patch</desc>
            <filename>lfc-localCaretOffset-3.patch</filename>
            <type>text/plain</type>
            <size>38376</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyMThlM2I4ZDBmMzguLjljOGYzOTc4MGRiMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDc2IEBACisyMDIwLTExLTA1ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gbG9jYWxDYXJldE9mZnNldCBzaG91bGQg
dXNlIGl0ZXJhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTg2MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBDb252ZXJ0IGFsbCBsb2NhbENhcmV0UmVjdCBpbXBsZW1lbnRhdGlvbnMgdG8gdXNlIGl0
ZXJhdG9yLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmxvY2FsQ2FyZXRSZWN0Rm9yQ2hhcmFjdGVy
T2Zmc2V0KToKKyAgICAgICAgKiBlZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyZWRQb3NpdGlvbjo6YWJzb2x1dGVSZWN0IGNvbnN0KToKKyAgICAg
ICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaXNp
YmxlUG9zaXRpb246OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvaW50
ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlBhdGhMaW5lOjpjb21wdXRlQ2FyZXRSZWN0IGNvbnN0
KToKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRl
cmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpQYXRoTGluZTo6
bG9naWNhbExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246
OlBhdGhMaW5lOjpsb2dpY2FsUmlnaHQgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3Jh
dGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvckxlZ2FjeVBhdGguaDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lSXRlcmF0b3JMZWdhY3lQYXRoOjpsb2dp
Y2FsTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGlu
ZUl0ZXJhdG9yTGVnYWN5UGF0aDo6bG9naWNhbFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKiBsYXlv
dXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmg6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUl0ZXJhdG9yTW9kZXJu
UGF0aDo6bG9naWNhbExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdy
YXRpb246OkxpbmVJdGVyYXRvck1vZGVyblBhdGg6OmxvZ2ljYWxSaWdodCBjb25zdCk6CisgICAg
ICAgICogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpQYXRoVGV4dFJ1bjo6cG9zaXRp
b25Gb3JPZmZzZXQgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJ
bnRlZ3JhdGlvblJ1bkl0ZXJhdG9yTGVnYWN5UGF0aC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yTGVnYWN5UGF0aDo6b2Zmc2V0Rm9yUG9zaXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9y
TGVnYWN5UGF0aDo6cG9zaXRpb25Gb3JPZmZzZXQgY29uc3QpOgorICAgICAgICAqIGxheW91dC9p
bnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yTW9kZXJuUGF0aC5oOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yTW9kZXJuUGF0aDo6
cG9zaXRpb25Gb3JPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdy
YXRpb246OlJ1bkl0ZXJhdG9yTW9kZXJuUGF0aDo6c2VsZWN0aW9uUmVjdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRlcmF0b3JNb2Rlcm5QYXRoOjpj
bGFtcGVkT2Zmc2V0IGNvbnN0KToKKworICAgICAgICBNYWtlIGNsYW1wZWRPZmZzZXQgcmV0dXJu
IDAgYmFzZWQgb2Zmc2V0IGxpa2UgaXQgZG9lcyBpbiBJbmxpbmVUZXh0Qm94IHRvIG1ha2UgcG9y
dGluZyBlYXNpZXIuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2NhbENhcmV0UmVjdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
TW9kZWxPYmplY3Q6OmxvY2FsQ2FyZXRSZWN0Rm9yRW1wdHlFbGVtZW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpsb2NhbENhcmV0UmVjdEZvckVtcHR5
RWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlcklubGluZTo6bG9jYWxDYXJldFJlY3QpOiBEZWxldGVkLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlu
ZUJyZWFrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVCcmVhazo6bG9jYWxDYXJl
dFJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGluZUJyZWFrOjpsaW5lc0Jv
dW5kaW5nQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVCcmVhazo6bG9j
YWxDYXJldFJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQnJl
YWsuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck9iamVjdDo6bG9jYWxDYXJldFJlY3QgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyT2JqZWN0Ojpsb2NhbENhcmV0UmVjdCk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmxvY2FsQ2FyZXRSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdJbmxpbmVUZXh0OjpjcmVhdGVUZXh0Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R0lubGluZVRleHQ6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR0lubGluZVRleHQ6OmxvY2FsQ2FyZXRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaDoKKwogMjAyMC0xMS0wNCAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KIAogICAgICAgICBbR1BVIFByb2Nlc3NdIE1v
dmUgdGhlIGludGVybmFsIEdQVSByZW5kZXJpbmcgZmxhZ3MgZnJvbSBXZWJQYWdlIHRvIFdlYlBy
b2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RD
YWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3Bw
CmluZGV4IGZmMWUxZjkxNDI4YS4uOTE5YzFkZjViYjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTg0LDYgKzg0LDcgQEAKICNpbmNs
dWRlICJIVE1MU2VsZWN0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSW5saW5lRWxlbWVudEJveC5oIgorI2luY2x1ZGUgIklubGlu
ZVJ1bkFuZE9mZnNldC5oIgogI2luY2x1ZGUgIk1hdGhNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKQEAgLTI4OTMsMTQgKzI4OTQsMTQgQEAgTGF5b3V0
UmVjdCBBWE9iamVjdENhY2hlOjpsb2NhbENhcmV0UmVjdEZvckNoYXJhY3Rlck9mZnNldChSZW5k
ZXJPYmplY3QqJiByZW5kZXIKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gSW50UmVj
dCgpOwogCi0gICAgYXV0byBbaW5saW5lQm94LCBjYXJldE9mZnNldF0gPSBtYWtlQ29udGFpbmVy
T2Zmc2V0UG9zaXRpb24ocmFuZ2UtPnN0YXJ0KS5pbmxpbmVCb3hBbmRPZmZzZXQoQWZmaW5pdHk6
OkRvd25zdHJlYW0pOwotICAgIGlmIChpbmxpbmVCb3gpCi0gICAgICAgIHJlbmRlcmVyID0gJmlu
bGluZUJveC0+cmVuZGVyZXIoKTsKKyAgICBhdXRvIHJ1bkFuZE9mZnNldCA9IG1ha2VDb250YWlu
ZXJPZmZzZXRQb3NpdGlvbihyYW5nZS0+c3RhcnQpLmlubGluZVJ1bkFuZE9mZnNldChBZmZpbml0
eTo6RG93bnN0cmVhbSk7CisgICAgaWYgKHJ1bkFuZE9mZnNldC5ydW4pCisgICAgICAgIHJlbmRl
cmVyID0gY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPigmcnVuQW5kT2Zmc2V0LnJ1bi0+cmVuZGVy
ZXIoKSk7CiAKLSAgICBpZiAoaXM8UmVuZGVyTGluZUJyZWFrPihyZW5kZXJlcikgJiYgZG93bmNh
c3Q8UmVuZGVyTGluZUJyZWFrPihyZW5kZXJlciktPmlubGluZUJveFdyYXBwZXIoKSAhPSBpbmxp
bmVCb3gpCisgICAgaWYgKGlzPFJlbmRlckxpbmVCcmVhaz4ocmVuZGVyZXIpICYmIExheW91dElu
dGVncmF0aW9uOjpydW5Gb3IoZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFrPigqcmVuZGVyZXIpKSAh
PSBydW5BbmRPZmZzZXQucnVuKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAgcmV0
dXJuIHJlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0KTsKKyAg
ICByZXR1cm4gcmVuZGVyZXItPmxvY2FsQ2FyZXRSZWN0KHJ1bkFuZE9mZnNldCk7CiB9CiAKIElu
dFJlY3QgQVhPYmplY3RDYWNoZTo6YWJzb2x1dGVDYXJldEJvdW5kc0ZvckNoYXJhY3Rlck9mZnNl
dChjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uY3BwCmluZGV4IGQzMzcwZDNlYjlkMi4uYWYzMjdk
NTY0ZjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQb3NpdGlvbi5jcHAK
QEAgLTIyOSw3ICsyMjksNyBAQCBJbnRSZWN0IFJlbmRlcmVkUG9zaXRpb246OmFic29sdXRlUmVj
dChMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpIGNvbnN0CiAgICAgaWYgKGlzTnVs
bCgpKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAgSW50UmVjdCBsb2NhbFJlY3Qg
PSBzbmFwcGVkSW50UmVjdChjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KG1fcmVuZGVyZXIpLT5s
b2NhbENhcmV0UmVjdChtX3J1bi0+bGVnYWN5SW5saW5lQm94KCksIG1fb2Zmc2V0LCBleHRyYVdp
ZHRoVG9FbmRPZkxpbmUpKTsKKyAgICBJbnRSZWN0IGxvY2FsUmVjdCA9IHNuYXBwZWRJbnRSZWN0
KGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4obV9yZW5kZXJlciktPmxvY2FsQ2FyZXRSZWN0KHsg
bV9ydW4sIG1fb2Zmc2V0IH0sIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkpOwogICAgIHJldHVybiBs
b2NhbFJlY3QgPT0gSW50UmVjdCgpID8gSW50UmVjdCgpIDogbV9yZW5kZXJlci0+bG9jYWxUb0Fi
c29sdXRlUXVhZChGbG9hdFJlY3QobG9jYWxSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCmluZGV4IDAx
ZWRkNTNjMDc0ZC4uMmM2MWNmNjExY2Q3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNp
YmxlUG9zaXRpb24uY3BwCkBAIC02MzgsMTIgKzYzOCwxMiBAQCBhdXRvIFZpc2libGVQb3NpdGlv
bjo6bG9jYWxDYXJldFJlY3QoKSBjb25zdCAtPiBMb2NhbENhcmV0UmVjdAogICAgIGlmICghbm9k
ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gW2lubGluZUJveCwgY2FyZXRPZmZz
ZXRdID0gaW5saW5lQm94QW5kT2Zmc2V0KCk7Ci0gICAgYXV0byByZW5kZXJlciA9IGlubGluZUJv
eCA/ICZpbmxpbmVCb3gtPnJlbmRlcmVyKCkgOiBub2RlLT5yZW5kZXJlcigpOworICAgIGF1dG8g
cnVuQW5kT2Zmc2V0ID0gaW5saW5lUnVuQW5kT2Zmc2V0KCk7CisgICAgYXV0byByZW5kZXJlciA9
IHJ1bkFuZE9mZnNldC5ydW4gPyAmcnVuQW5kT2Zmc2V0LnJ1bi0+cmVuZGVyZXIoKSA6IG5vZGUt
PnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIHsgfTsKIAot
ICAgIHJldHVybiB7IHJlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChpbmxpbmVCb3gsIGNhcmV0T2Zm
c2V0KSwgcmVuZGVyZXIgfTsKKyAgICByZXR1cm4geyByZW5kZXJlci0+bG9jYWxDYXJldFJlY3Qo
cnVuQW5kT2Zmc2V0KSwgY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihyZW5kZXJlcikgfTsKIH0K
IAogSW50UmVjdCBWaXNpYmxlUG9zaXRpb246OmFic29sdXRlQ2FyZXRCb3VuZHMoYm9vbCogaW5z
aWRlRml4ZWQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmNwcAppbmRl
eCBlNzE3ZWVmNGRmNWUuLjcxOTg3YjQwOWU0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5l
SXRlcmF0b3IuY3BwCkBAIC0xNzksNiArMTc5LDU5IEBAIGludCBQYXRoTGluZTo6YmxvY2tEaXJl
Y3Rpb25Qb2ludEluTGluZSgpIGNvbnN0CiAgICAgcmV0dXJuICFjb250YWluaW5nQmxvY2soKS5z
dHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkgPyBzdGQ6Om1heCh0b3AoKSwgc2Vs
ZWN0aW9uVG9wKCkpIDogc3RkOjptaW4oYm90dG9tKCksIHNlbGVjdGlvbkJvdHRvbSgpKTsKIH0K
IAorSW50UmVjdCBQYXRoTGluZTo6Y29tcHV0ZUNhcmV0UmVjdChmbG9hdCBsb2dpY2FsTGVmdFBv
c2l0aW9uLCB1bnNpZ25lZCBjYXJldFdpZHRoLCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRP
ZkxpbmUpIGNvbnN0Cit7CisgICAgaW50IGhlaWdodCA9IHNlbGVjdGlvbkJvdHRvbSgpIC0gc2Vs
ZWN0aW9uVG9wKCk7CisgICAgaW50IHRvcCA9IHNlbGVjdGlvblRvcCgpOworCisgICAgLy8gRGlz
dHJpYnV0ZSB0aGUgY2FyZXQncyB3aWR0aCB0byBlaXRoZXIgc2lkZSBvZiB0aGUgb2Zmc2V0Lgor
ICAgIGZsb2F0IGxlZnQgPSBsb2dpY2FsTGVmdFBvc2l0aW9uOworICAgIGludCBjYXJldFdpZHRo
TGVmdE9mT2Zmc2V0ID0gY2FyZXRXaWR0aCAvIDI7CisgICAgbGVmdCAtPSBjYXJldFdpZHRoTGVm
dE9mT2Zmc2V0OworICAgIGludCBjYXJldFdpZHRoUmlnaHRPZk9mZnNldCA9IGNhcmV0V2lkdGgg
LSBjYXJldFdpZHRoTGVmdE9mT2Zmc2V0OworICAgIGxlZnQgPSByb3VuZGYobGVmdCk7CisKKyAg
ICBmbG9hdCBsaW5lTGVmdCA9IGxvZ2ljYWxMZWZ0KCk7CisgICAgZmxvYXQgbGluZVJpZ2h0ID0g
bG9naWNhbFJpZ2h0KCk7CisKKyAgICBpZiAoZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQorICAgICAg
ICAqZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gbGluZVJpZ2h0IC0gKGxlZnQgKyBjYXJldFdpZHRo
KTsKKworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBibG9ja1N0eWxlID0gY29udGFpbmluZ0Jsb2Nr
KCkuc3R5bGUoKTsKKworICAgIGJvb2wgcmlnaHRBbGlnbmVkID0gZmFsc2U7CisgICAgc3dpdGNo
IChibG9ja1N0eWxlLnRleHRBbGlnbigpKSB7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdo
dDoKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0OgorICAgICAgICByaWdodEFs
aWduZWQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okxl
ZnQ6CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0OgorICAgIGNhc2UgVGV4dEFs
aWduTW9kZTo6Q2VudGVyOgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0Q2VudGVyOgor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6CisgICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKKyAgICAgICAgcmlnaHRBbGlnbmVkID0gIWJsb2NrU3R5
bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRl
eHRBbGlnbk1vZGU6OkVuZDoKKyAgICAgICAgcmlnaHRBbGlnbmVkID0gYmxvY2tTdHlsZS5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGZsb2F0
IGxlZnRFZGdlID0gc3RkOjptaW48ZmxvYXQ+KDAsIGxpbmVMZWZ0KTsKKyAgICBmbG9hdCByaWdo
dEVkZ2UgPSBzdGQ6Om1heDxmbG9hdD4oY29udGFpbmluZ0Jsb2NrKCkubG9naWNhbFdpZHRoKCks
IGxpbmVSaWdodCk7CisKKyAgICBpZiAocmlnaHRBbGlnbmVkKSB7CisgICAgICAgIGxlZnQgPSBz
dGQ6Om1heChsZWZ0LCBsZWZ0RWRnZSk7CisgICAgICAgIGxlZnQgPSBzdGQ6Om1pbihsZWZ0LCBs
aW5lUmlnaHQgLSBjYXJldFdpZHRoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0ID0gc3Rk
OjptaW4obGVmdCwgcmlnaHRFZGdlIC0gY2FyZXRXaWR0aFJpZ2h0T2ZPZmZzZXQpOworICAgICAg
ICBsZWZ0ID0gc3RkOjptYXgobGVmdCwgbGluZUxlZnQpOworICAgIH0KKyAgICByZXR1cm4gYmxv
Y2tTdHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gSW50UmVjdChsZWZ0LCB0b3AsIGNh
cmV0V2lkdGgsIGhlaWdodCkgOiBJbnRSZWN0KHRvcCwgbGVmdCwgaGVpZ2h0LCBjYXJldFdpZHRo
KTsKK30KKwogfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5oCmluZGV4IGU0
ODc0NDE2MWFiMy4uOTk4YTg1ZTdiM2JmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0
b3IuaApAQCAtNTksOSArNTksMTIgQEAgcHVibGljOgogICAgIExheW91dFVuaXQgbGluZUJveEJv
dHRvbSgpIGNvbnN0OwogCiAgICAgZmxvYXQgeSgpIGNvbnN0OworICAgIGZsb2F0IGxvZ2ljYWxM
ZWZ0KCkgY29uc3Q7CisgICAgZmxvYXQgbG9naWNhbFJpZ2h0KCkgY29uc3Q7CiAgICAgZmxvYXQg
bG9naWNhbEhlaWdodCgpIGNvbnN0OwogCiAgICAgaW50IGJsb2NrRGlyZWN0aW9uUG9pbnRJbkxp
bmUoKSBjb25zdDsKKyAgICBJbnRSZWN0IGNvbXB1dGVDYXJldFJlY3QoZmxvYXQgbG9naWNhbExl
ZnRQb3NpdGlvbiwgdW5zaWduZWQgY2FyZXRXaWR0aCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRv
RW5kT2ZMaW5lKSBjb25zdDsKIAogICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29uc3Q7CiAKQEAg
LTE3Nyw2ICsxODAsMjAgQEAgaW5saW5lIGZsb2F0IFBhdGhMaW5lOjp5KCkgY29uc3QKICAgICB9
KTsKIH0KIAoraW5saW5lIGZsb2F0IFBhdGhMaW5lOjpsb2dpY2FsTGVmdCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0
aCkgeworICAgICAgICByZXR1cm4gcGF0aC5sb2dpY2FsTGVmdCgpOworICAgIH0pOworfQorCitp
bmxpbmUgZmxvYXQgUGF0aExpbmU6OmxvZ2ljYWxSaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0aCkgeworICAg
ICAgICByZXR1cm4gcGF0aC5sb2dpY2FsUmlnaHQoKTsKKyAgICB9KTsKK30KKwogaW5saW5lIGZs
b2F0IFBhdGhMaW5lOjpsb2dpY2FsSGVpZ2h0KCkgY29uc3QKIHsKICAgICByZXR1cm4gV1RGOjpz
d2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShjb25zdCBhdXRvJiBwYXRoKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5l
SXRlcmF0b3JMZWdhY3lQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24v
TGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JMZWdhY3lQYXRoLmgKaW5kZXggNmMyOWNjM2Yw
ZGZkLi42YzYyODllZGE2NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRl
Z3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvckxlZ2FjeVBhdGguaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRl
cmF0b3JMZWdhY3lQYXRoLmgKQEAgLTUzLDYgKzUzLDggQEAgcHVibGljOgogICAgIExheW91dFVu
aXQgbGluZUJveEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+bGluZUJv
eEJvdHRvbSgpOyB9CiAKICAgICBmbG9hdCB5KCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5l
Qm94LT55KCk7IH0KKyAgICBmbG9hdCBsb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9v
dElubGluZUJveC0+bG9naWNhbExlZnQoKTsgfQorICAgIGZsb2F0IGxvZ2ljYWxSaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+bG9naWNhbFJpZ2h0KCk7IH0KICAgICBmbG9h
dCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94LT5sb2dpY2Fs
SGVpZ2h0KCk7IH0KICAgICBib29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9v
dElubGluZUJveC0+aXNIb3Jpem9udGFsKCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yTW9kZXJu
UGF0aC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0
aW9uTGluZUl0ZXJhdG9yTW9kZXJuUGF0aC5oCmluZGV4IGFhMThkYzk3MmE3ZC4uODU3Yjc2Njkx
ZmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0
SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yTW9kZXJuUGF0
aC5oCkBAIC01OSw2ICs1OSw4IEBAIHB1YmxpYzoKICAgICBMYXlvdXRVbml0IGxpbmVCb3hCb3R0
b20oKSBjb25zdCB7IHJldHVybiBMYXlvdXRVbml0Ojpmcm9tRmxvYXRSb3VuZChsaW5lKCkucmVj
dCgpLm1heFkoKSk7IH0KIAogICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBsaW5lQm94VG9w
KCk7IH0KKyAgICBmbG9hdCBsb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIGxpbmUoKS5yZWN0
KCkueCgpOyB9CisgICAgZmxvYXQgbG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbGluZSgp
LnJlY3QoKS5tYXhYKCk7IH0KICAgICBmbG9hdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1
cm4gbGluZSgpLnJlY3QoKS5oZWlnaHQoKTsgfQogICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5oIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaAppbmRl
eCBkMzZhMTExN2QwZDUuLmU3Njc3YzY1ZTZlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVy
YXRvci5oCkBAIC0xMDgsNiArMTA4LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGxlbmd0aCgp
IGNvbnN0OwogCiAgICAgdW5zaWduZWQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgeCkgY29uc3Q7
CisgICAgZmxvYXQgcG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQpIGNvbnN0OwogCiAgICAgYm9v
bCBpc1NlbGVjdGFibGUodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkgY29uc3Q7CiAgICAg
TGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0KHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpIGNv
bnN0OwpAQCAtMzI4LDYgKzMyOSwxMyBAQCBpbmxpbmUgdW5zaWduZWQgUGF0aFRleHRSdW46Om9m
ZnNldEZvclBvc2l0aW9uKGZsb2F0IHgpIGNvbnN0CiAgICAgfSk7CiB9CiAKK2lubGluZSBmbG9h
dCBQYXRoVGV4dFJ1bjo6cG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KSBjb25zdAor
eworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQsIFsmXShhdXRvJiBwYXRo
KSB7CisgICAgICAgIHJldHVybiBwYXRoLnBvc2l0aW9uRm9yT2Zmc2V0KG9mZnNldCk7CisgICAg
fSk7Cit9CisKIGlubGluZSBib29sIFBhdGhUZXh0UnVuOjppc1NlbGVjdGFibGUodW5zaWduZWQg
c3RhcnQsIHVuc2lnbmVkIGVuZCkgY29uc3QKIHsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbiht
X3BhdGhWYXJpYW50LCBbJl0oYXV0byYgcGF0aCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JMZWdhY3lQ
YXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRp
b25SdW5JdGVyYXRvckxlZ2FjeVBhdGguaAppbmRleCA1ZTE4M2EwMjIzZjIuLmEyYTdkZTg2MDUw
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dElu
dGVncmF0aW9uUnVuSXRlcmF0b3JMZWdhY3lQYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JMZWdhY3lQYXRoLmgK
QEAgLTU5LDcgKzU5LDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIGlubGluZVRleHRCb3goKS0+ZW5kKCk7IH0KICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBpbmxpbmVUZXh0Qm94KCktPmxlbigpOyB9CiAKLSAgICBpbmxpbmUgdW5zaWdu
ZWQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgeCkgY29uc3QgeyByZXR1cm4gaW5saW5lVGV4dEJv
eCgpLT5vZmZzZXRGb3JQb3NpdGlvbih4KTsgfQorICAgIHVuc2lnbmVkIG9mZnNldEZvclBvc2l0
aW9uKGZsb2F0IHgpIGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRCb3goKS0+b2Zmc2V0Rm9yUG9z
aXRpb24oeCk7IH0KKyAgICBmbG9hdCBwb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQp
IGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRCb3goKS0+cG9zaXRpb25Gb3JPZmZzZXQob2Zmc2V0
KTsgfQogCiAgICAgYm9vbCBpc1NlbGVjdGFibGUodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVu
ZCkgY29uc3QgeyByZXR1cm4gaW5saW5lVGV4dEJveCgpLT5pc1NlbGVjdGVkKHN0YXJ0LCBlbmQp
OyB9CiAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0KHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25l
ZCBlbmQpIGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRCb3goKS0+bG9jYWxTZWxlY3Rpb25SZWN0
KHN0YXJ0LCBlbmQpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1vZGVyblBhdGguaCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yTW9k
ZXJuUGF0aC5oCmluZGV4IDNmMDY2MTA4NzJmMS4uZDE5N2U1NmRlMDQ0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVy
YXRvck1vZGVyblBhdGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24v
TGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1vZGVyblBhdGguaApAQCAtNjYsNiArNjYsNyBA
QCBwdWJsaWM6CiAgICAgdW5zaWduZWQgZW5kKCkgY29uc3QgeyByZXR1cm4gcnVuKCkudGV4dENv
bnRlbnQoKS0+ZW5kKCk7IH0KICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBy
dW4oKS50ZXh0Q29udGVudCgpLT5sZW5ndGgoKTsgfQogCisgICAgLy8gRklYTUU6IE1ha2UgYSBz
aGFyZWQgZ2VuZXJpYyB2ZXJzaW9uIG9mIHRoaXMuCiAgICAgaW5saW5lIHVuc2lnbmVkIG9mZnNl
dEZvclBvc2l0aW9uKGZsb2F0IHgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoaXNMaW5lQnJl
YWsoKSkKQEAgLTgxLDYgKzgyLDIzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJ1bigpLnN0
eWxlKCkuZm9udENhc2NhZGUoKS5vZmZzZXRGb3JQb3NpdGlvbihjcmVhdGVUZXh0UnVuKEh5cGhl
bk1vZGU6Oklnbm9yZSksIGxvY2FsWCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogICAgIH0KIAor
ICAgIC8vIEZJWE1FOiBNYWtlIGEgc2hhcmVkIGdlbmVyaWMgdmVyc2lvbiBvZiB0aGlzLgorICAg
IGZsb2F0IHBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChvZmZzZXQgPj0gc3RhcnQoKSk7CisgICAgICAgIEFTU0VSVChvZmZzZXQg
PD0gZW5kKCkpOworCisgICAgICAgIGlmIChpc0xpbmVCcmVhaygpKQorICAgICAgICAgICAgcmV0
dXJuIHJlY3QoKS54KCk7CisKKyAgICAgICAgYXV0byBlbmRPZmZzZXQgPSBjbGFtcGVkT2Zmc2V0
KG9mZnNldCk7CisKKyAgICAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVj
dChyZWN0KCkueCgpLCAwLCAwLCAwKTsKKyAgICAgICAgVGV4dFJ1biB0ZXh0UnVuID0gY3JlYXRl
VGV4dFJ1bihIeXBoZW5Nb2RlOjpJZ25vcmUpOworICAgICAgICBydW4oKS5zdHlsZSgpLmZvbnRD
YXNjYWRlKCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1biwgc2VsZWN0aW9uUmVj
dCwgMCwgZW5kT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIHNuYXBSZWN0VG9EZXZpY2VQaXhlbHNX
aXRoV3JpdGluZ0RpcmVjdGlvbihzZWxlY3Rpb25SZWN0LCByZW5kZXJlcigpLmRvY3VtZW50KCku
ZGV2aWNlU2NhbGVGYWN0b3IoKSwgdGV4dFJ1bi5sdHIoKSkubWF4WCgpOworICAgIH0KKwogICAg
IGJvb2wgaXNTZWxlY3RhYmxlKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpIGNvbnN0CiAg
ICAgewogICAgICAgICByZXR1cm4gY2xhbXBlZE9mZnNldChzdGFydCkgPCBjbGFtcGVkT2Zmc2V0
KGVuZCk7CkBAIC0xMDUsOCArMTIzLDggQEAgcHVibGljOgogICAgICAgICBMYXlvdXRSZWN0IHNl
bGVjdGlvblJlY3QgeyBsb2dpY2FsTGVmdCwgc2VsZWN0aW9uVG9wLCBsb2dpY2FsV2lkdGgsIHNl
bGVjdGlvbkhlaWdodCB9OwogCiAgICAgICAgIFRleHRSdW4gdGV4dFJ1biA9IGNyZWF0ZVRleHRS
dW4oSHlwaGVuTW9kZTo6SW5jbHVkZSk7Ci0gICAgICAgIGlmIChjbGFtcGVkU3RhcnQgIT0gc3Rh
cnQoKSB8fCBjbGFtcGVkRW5kICE9IHRleHRSdW4ubGVuZ3RoKCkpCi0gICAgICAgICAgICBydW4o
KS5zdHlsZSgpLmZvbnRDYXNjYWRlKCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1
biwgc2VsZWN0aW9uUmVjdCwgY2xhbXBlZFN0YXJ0IC0gc3RhcnQoKSwgY2xhbXBlZEVuZCAtIHN0
YXJ0KCkpOworICAgICAgICBpZiAoY2xhbXBlZFN0YXJ0IHx8IGNsYW1wZWRFbmQgIT0gdGV4dFJ1
bi5sZW5ndGgoKSkKKyAgICAgICAgICAgIHJ1bigpLnN0eWxlKCkuZm9udENhc2NhZGUoKS5hZGp1
c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBzZWxlY3Rpb25SZWN0LCBjbGFtcGVkU3Rh
cnQsIGNsYW1wZWRFbmQpOwogCiAgICAgICAgIHJldHVybiBzbmFwcGVkU2VsZWN0aW9uUmVjdChz
ZWxlY3Rpb25SZWN0LCBsb2dpY2FsUmlnaHQsIHNlbGVjdGlvblRvcCwgc2VsZWN0aW9uSGVpZ2h0
LCBpc0hvcml6b250YWwoKSk7CiAgICAgfQpAQCAtMTk4LDkgKzIxNiw5IEBAIHByaXZhdGU6CiAK
ICAgICB1bnNpZ25lZCBjbGFtcGVkT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkgY29uc3QKICAgICB7
Ci0gICAgICAgIGF1dG8gY2xhbXBlZE9mZnNldCA9IHN0ZDo6bWF4KHN0YXJ0KCksIHN0ZDo6bWlu
KG9mZnNldCwgZW5kKCkpKTsKKyAgICAgICAgYXV0byBjbGFtcGVkT2Zmc2V0ID0gc3RkOjptYXgo
c3RhcnQoKSwgc3RkOjptaW4ob2Zmc2V0LCBlbmQoKSkpIC0gc3RhcnQoKTsKICAgICAgICAgLy8g
V2UgdHJlYXQgdGhlIGxhc3QgY29kZXBvaW50IGluIHRoaXMgcnVuIGFuZCB0aGUgaHlwaGVuIGFz
IGEgc2luZ2xlIHVuaXQuCi0gICAgICAgIGlmIChoYXNIeXBoZW4oKSAmJiBjbGFtcGVkT2Zmc2V0
ID09IGVuZCgpKQorICAgICAgICBpZiAoaGFzSHlwaGVuKCkgJiYgY2xhbXBlZE9mZnNldCA9PSBs
ZW5ndGgoKSkKICAgICAgICAgICAgIGNsYW1wZWRPZmZzZXQgKz0gcnVuKCkuc3R5bGUoKS5oeXBo
ZW5TdHJpbmcoKS5sZW5ndGgoKTsKIAogICAgICAgICByZXR1cm4gY2xhbXBlZE9mZnNldDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDEwNDgyZDQwMTE4MC4u
MzNhMGNhNjFlMGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAK
QEAgLTI4NDIsMTEgKzI4NDIsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlSGl0VGVzdFJl
c3VsdChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JgogICAgIH0KIH0K
IAotTGF5b3V0UmVjdCBSZW5kZXJCbG9jazo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxp
bmVCb3gsIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRP
ZkxpbmUpCitMYXlvdXRSZWN0IFJlbmRlckJsb2NrOjpsb2NhbENhcmV0UmVjdChjb25zdCBJbmxp
bmVSdW5BbmRPZmZzZXQmIHJ1bkFuZE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5k
T2ZMaW5lKSBjb25zdAogewogICAgIC8vIERvIHRoZSBub3JtYWwgY2FsY3VsYXRpb24gaW4gbW9z
dCBjYXNlcy4KICAgICBpZiAoZmlyc3RDaGlsZCgpKQotICAgICAgICByZXR1cm4gUmVuZGVyQm94
Ojpsb2NhbENhcmV0UmVjdChpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0LCBleHRyYVdpZHRoVG9FbmRP
ZkxpbmUpOworICAgICAgICByZXR1cm4gUmVuZGVyQm94Ojpsb2NhbENhcmV0UmVjdChydW5BbmRP
ZmZzZXQsIGV4dHJhV2lkdGhUb0VuZE9mTGluZSk7CiAKICAgICBMYXlvdXRSZWN0IGNhcmV0UmVj
dCA9IGxvY2FsQ2FyZXRSZWN0Rm9yRW1wdHlFbGVtZW50KHdpZHRoKCksIHRleHRJbmRlbnRPZmZz
ZXQoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKaW5kZXggNTY4MjBj
ZDg4YWFhLi41ZTgxMGEzYjJjMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5oCkBAIC00ODQsNyArNDg0LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcGFpbnRDb250aW51
YXRpb25PdXRsaW5lcyhQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogCi0gICAgTGF5
b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJldE9mZnNldCwg
TGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCkgZmluYWw7CisgICAgTGF5b3V0
UmVjdCBsb2NhbENhcmV0UmVjdChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmLCBMYXlvdXRVbml0
KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSBudWxscHRyKSBjb25zdCBmaW5hbDsKICAgICAKICAg
ICAvLyBGSVhNRS1CTE9DS0ZMT1c6IFJlbW92ZSB2aXJ0dWFsaXphaW9uIHdoZW4gYWxsIGNhbGxl
cnMgaGF2ZSBtb3ZlZCB0byBSZW5kZXJCbG9ja0Zsb3cKICAgICB2aXJ0dWFsIFZpc2libGVQb3Np
dGlvbiBwb3NpdGlvbkZvclBvaW50V2l0aElubGluZUNoaWxkcmVuKGNvbnN0IExheW91dFBvaW50
JiwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAKaW5kZXggNjM5NTJkMGVhMTg4Li45MDE1YmYyOTRjYTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVk
ZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNp
bmNsdWRlICJJbmxpbmVFbGVtZW50Qm94LmgiCisjaW5jbHVkZSAiSW5saW5lUnVuQW5kT2Zmc2V0
LmgiCiAjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgpAQCAtNDQyOSw3ICs0NDMwLDcgQEAgdm9p
ZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodFJlcGxhY2VkKExvZ2lj
YWxFeHRlbnRDb21wdXRlZFZhbHUKICAgICBjb21wdXRlZFZhbHVlcy5tX3Bvc2l0aW9uID0gbG9n
aWNhbFRvcFBvczsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0KElu
bGluZUJveCogYm94LCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0
aFRvRW5kT2ZMaW5lKQorTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0KGNvbnN0
IElubGluZVJ1bkFuZE9mZnNldCYgcnVuQW5kT2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRo
VG9FbmRPZkxpbmUpIGNvbnN0CiB7CiAgICAgLy8gVmlzaWJsZVBvc2l0aW9ucyBhdCBvZmZzZXRz
IGluc2lkZSBjb250YWluZXJzIGVpdGhlciBhKSByZWZlciB0byB0aGUgcG9zaXRpb25zIGJlZm9y
ZS9hZnRlcgogICAgIC8vIHRob3NlIGNvbnRhaW5lcnMgKHRhYmxlcyBhbmQgc2VsZWN0IGVsZW1l
bnRzKSBvciBiKSByZWZlciB0byB0aGUgcG9zaXRpb24gaW5zaWRlIGFuIGVtcHR5IGJsb2NrLgpA
QCAtNDQzNywxNiArNDQzOCwxNiBAQCBMYXlvdXRSZWN0IFJlbmRlckJveDo6bG9jYWxDYXJldFJl
Y3QoSW5saW5lQm94KiBib3gsIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdQogICAgIC8vIEZJ
WE1FOiBQYWludCB0aGUgY2FyZXRzIGluc2lkZSBlbXB0eSBibG9ja3MgZGlmZmVyZW50bHkgdGhh
biB0aGUgY2FyZXRzIGJlZm9yZS9hZnRlciBlbGVtZW50cy4KIAogICAgIExheW91dFJlY3QgcmVj
dChsb2NhdGlvbigpLCBMYXlvdXRTaXplKGNhcmV0V2lkdGgsIGhlaWdodCgpKSk7Ci0gICAgYm9v
bCBsdHIgPSBib3ggPyBib3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA6IHN0eWxlKCkuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpOworICAgIGJvb2wgbHRyID0gcnVuQW5kT2Zmc2V0LnJ1biA/
IHJ1bkFuZE9mZnNldC5ydW4tPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA6IHN0eWxlKCkuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpOwogCi0gICAgaWYgKCghY2FyZXRPZmZzZXQpIF4gbHRyKQor
ICAgIGlmICgoIXJ1bkFuZE9mZnNldC5vZmZzZXQpIF4gbHRyKQogICAgICAgICByZWN0Lm1vdmUo
TGF5b3V0U2l6ZSh3aWR0aCgpIC0gY2FyZXRXaWR0aCwgMF9sdSkpOwogCi0gICAgaWYgKGJveCkg
ewotICAgICAgICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94ID0gYm94LT5yb290KCk7Ci0g
ICAgICAgIExheW91dFVuaXQgdG9wID0gcm9vdEJveC5saW5lVG9wKCk7CisgICAgaWYgKHJ1bkFu
ZE9mZnNldC5ydW4pIHsKKyAgICAgICAgYXV0byBsaW5lID0gcnVuQW5kT2Zmc2V0LnJ1bi5saW5l
KCk7CisgICAgICAgIExheW91dFVuaXQgdG9wID0gbGluZS0+dG9wKCk7CiAgICAgICAgIHJlY3Qu
c2V0WSh0b3ApOwotICAgICAgICByZWN0LnNldEhlaWdodChyb290Qm94LmxpbmVCb3R0b20oKSAt
IHRvcCk7CisgICAgICAgIHJlY3Quc2V0SGVpZ2h0KGxpbmUtPmJvdHRvbSgpIC0gdG9wKTsKICAg
ICB9CiAKICAgICAvLyBJZiBoZWlnaHQgb2YgYm94IGlzIHNtYWxsZXIgdGhhbiBmb250IGhlaWdo
dCwgdXNlIHRoZSBsYXR0ZXIgb25lLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCmlu
ZGV4IGUwODE0NWQ4ZTBlOS4uZGRiMTYwOGZhZmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5oCkBAIC00OTgsNyArNDk4LDcgQEAgb3ZlcnJpZGU7CiAKICAgICBib29sIHNob3Vs
ZFRyZWF0Q2hpbGRBc1JlcGxhY2VkSW5UYWJsZUNlbGxzKCkgY29uc3Q7CiAgICAgCi0gICAgTGF5
b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJldE9mZnNldCwg
TGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gbnVsbHB0cikgb3ZlcnJpZGU7Cisg
ICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmLCBM
YXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSBudWxscHRyKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdmVyZmxvd0NsaXBSZWN0KGNvbnN0IExheW91
dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqID0gbnVsbHB0ciwgT3Zl
cmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwg
UGFpbnRQaGFzZSA9IFBhaW50UGhhc2U6OkJsb2NrQmFja2dyb3VuZCkgY29uc3Q7CiAgICAgdmly
dHVhbCBMYXlvdXRSZWN0IG92ZXJmbG93Q2xpcFJlY3RGb3JDaGlsZExheWVycyhjb25zdCBMYXlv
dXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZyYWdtZW50Q29udGFpbmVyKiBmcmFnbWVudCwgT3Zl
cmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdCB7IHJldHVybiBvdmVy
Zmxvd0NsaXBSZWN0KGxvY2F0aW9uLCBmcmFnbWVudCwgcmVsZXZhbmN5KTsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggYzU4
MGU1M2RmZDM4Li5kOWE3NWM5ZWExOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtMjYyNiw3ICsyNjI2LDcgQEAgdm9pZCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2xlYXJGaXJzdExldHRlclJlbWFpbmluZ1RleHQoKQogICAg
IGZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dE1hcCgpLnJlbW92ZSh0aGlzKTsKIH0KIAotTGF5b3V0
UmVjdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6bG9jYWxDYXJldFJlY3RGb3JFbXB0eUVsZW1lbnQo
TGF5b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCB0ZXh0SW5kZW50T2Zmc2V0KQorTGF5b3V0UmVj
dCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6bG9jYWxDYXJldFJlY3RGb3JFbXB0eUVsZW1lbnQoTGF5
b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCB0ZXh0SW5kZW50T2Zmc2V0KSBjb25zdAogewogICAg
IEFTU0VSVCghZmlyc3RDaGlsZCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuaAppbmRleCA4NDdlZjMxZjI2YmYuLmVjYTZkNTg2ODVmNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgK
QEAgLTI2MCw3ICsyNjAsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0
eSBjaG9vc2VJbnRlcnBvbGF0aW9uUXVhbGl0eShHcmFwaGljc0NvbnRleHQmLCBJbWFnZSYsIGNv
bnN0IHZvaWQqLCBjb25zdCBMYXlvdXRTaXplJik7CiAKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ2Fy
ZXRSZWN0Rm9yRW1wdHlFbGVtZW50KExheW91dFVuaXQgd2lkdGgsIExheW91dFVuaXQgdGV4dElu
ZGVudE9mZnNldCk7CisgICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdEZvckVtcHR5RWxlbWVu
dChMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IHRleHRJbmRlbnRPZmZzZXQpIGNvbnN0Owog
CiAgICAgc3RhdGljIGJvb2wgc2hvdWxkQW50aWFsaWFzTGluZXMoR3JhcGhpY3NDb250ZXh0Jik7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKaW5kZXggYWRhNGY3
MzM4NWNlLi5mNzhlYzdkY2Y4MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuY3BwCkBAIC0yMjgsNyArMjI4LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnVwZGF0ZUFs
d2F5c0NyZWF0ZUxpbmVCb3hlcyhib29sIGZ1bGxMYXlvdXQpCiAgICAgfQogfQogCi1MYXlvdXRS
ZWN0IFJlbmRlcklubGluZTo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxpbmVCb3gsIHVu
c2lnbmVkLCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCitMYXlvdXRSZWN0IFJl
bmRlcklubGluZTo6bG9jYWxDYXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiwgTGF5
b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBjb25zdAogewogICAgIGlmIChmaXJzdENo
aWxkKCkpIHsKICAgICAgICAgLy8gVGhpcyBjb25kaXRpb24gaXMgcG9zc2libGUgaWYgdGhlIFJl
bmRlcklubGluZSBpcyBhdCBhbiBlZGl0aW5nIGJvdW5kYXJ5LApAQCAtMjM5LDggKzIzOSw2IEBA
IExheW91dFJlY3QgUmVuZGVySW5saW5lOjpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGlu
ZUJveCwgdW5zaWduZWQsIExheW91dFVuCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAg
ICAgfQogCi0gICAgQVNTRVJUX1VOVVNFRChpbmxpbmVCb3gsICFpbmxpbmVCb3gpOwotCiAgICAg
aWYgKGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKICAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGlu
ZSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAppbmRleCA0NDhi
M2EwNWQ1NTIuLmVhNTUwYzI5NWI5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcklubGluZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuaApAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHdheXNDcmVh
dGVMaW5lQm94ZXMoKSB7IHNldFJlbmRlcklubGluZUFsd2F5c0NyZWF0ZXNMaW5lQm94ZXModHJ1
ZSk7IH0KICAgICB2b2lkIHVwZGF0ZUFsd2F5c0NyZWF0ZUxpbmVCb3hlcyhib29sIGZ1bGxMYXlv
dXQpOwogCi0gICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25l
ZCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBmaW5hbDsKKyAgICBMYXlvdXRS
ZWN0IGxvY2FsQ2FyZXRSZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYsIExheW91dFVuaXQq
IGV4dHJhV2lkdGhUb0VuZE9mTGluZSkgY29uc3QgZmluYWw7CiAKICAgICBib29sIGhpdFRlc3RD
dWxsZWRJbmxpbmUoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGluZUJyZWFrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aW5lQnJlYWsuY3BwCmluZGV4IDMwZWNjNTM0OWJhNC4uNDFhNDkzMTgyNTM5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcApAQCAtMjcsNiArMjcsOCBA
QAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFdCUkVsZW1lbnQuaCIK
ICNpbmNsdWRlICJJbmxpbmVFbGVtZW50Qm94LmgiCisjaW5jbHVkZSAiSW5saW5lUnVuQW5kT2Zm
c2V0LmgiCisjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaCIKICNpbmNs
dWRlICJMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTG9naWNhbFNl
bGVjdGlvbk9mZnNldENhY2hlcy5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCkBAIC0xNTYs
MjQgKzE1OCwyNSBAQCB2b2lkIFJlbmRlckxpbmVCcmVhazo6c2V0U2VsZWN0aW9uU3RhdGUoSGln
aGxpZ2h0U3RhdGUgc3RhdGUpCiAgICAgbV9pbmxpbmVCb3hXcmFwcGVyLT5yb290KCkuc2V0SGFz
U2VsZWN0ZWRDaGlsZHJlbihzdGF0ZSAhPSBIaWdobGlnaHRTdGF0ZTo6Tm9uZSk7CiB9CiAKLUxh
eW91dFJlY3QgUmVuZGVyTGluZUJyZWFrOjpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGlu
ZUJveCwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9m
TGluZSkKK0xheW91dFJlY3QgUmVuZGVyTGluZUJyZWFrOjpsb2NhbENhcmV0UmVjdChjb25zdCBJ
bmxpbmVSdW5BbmRPZmZzZXQmIHJ1bkFuZE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRv
RW5kT2ZMaW5lKSBjb25zdAogewotICAgIEFTU0VSVF9VTlVTRUQoY2FyZXRPZmZzZXQsICFjYXJl
dE9mZnNldCk7Ci0gICAgQVNTRVJUX1VOVVNFRChpbmxpbmVCb3gsIGlubGluZUJveCA9PSBtX2lu
bGluZUJveFdyYXBwZXIpOwotICAgIGlmICghaW5saW5lQm94KQorICAgIEFTU0VSVCghcnVuQW5k
T2Zmc2V0Lm9mZnNldCk7CisgICAgQVNTRVJUKHJ1bkFuZE9mZnNldC5ydW4gPT0gTGF5b3V0SW50
ZWdyYXRpb246OnJ1bkZvcigqdGhpcykpOworCisgICAgaWYgKCFydW5BbmRPZmZzZXQucnVuKQog
ICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCi0gICAgY29uc3QgUm9vdElubGluZUJveCYg
cm9vdEJveCA9IGlubGluZUJveC0+cm9vdCgpOwotICAgIHJldHVybiByb290Qm94LmNvbXB1dGVD
YXJldFJlY3QoaW5saW5lQm94LT5sb2dpY2FsTGVmdCgpLCBjYXJldFdpZHRoLCBleHRyYVdpZHRo
VG9FbmRPZkxpbmUpOworICAgIGF1dG8gbGluZSA9IHJ1bkFuZE9mZnNldC5ydW4ubGluZSgpOwor
ICAgIHJldHVybiBsaW5lLT5jb21wdXRlQ2FyZXRSZWN0KGxpbmUtPmxvZ2ljYWxMZWZ0KCksIGNh
cmV0V2lkdGgsIGV4dHJhV2lkdGhUb0VuZE9mTGluZSk7CiB9CiAKIEludFJlY3QgUmVuZGVyTGlu
ZUJyZWFrOjpsaW5lc0JvdW5kaW5nQm94KCkgY29uc3QKIHsKLSAgICBhdXRvIGJveCA9IExheW91
dEludGVncmF0aW9uOjpydW5Gb3IoKnRoaXMpOwotICAgIGlmICghYm94KQorICAgIGF1dG8gcnVu
ID0gTGF5b3V0SW50ZWdyYXRpb246OnJ1bkZvcigqdGhpcyk7CisgICAgaWYgKCFydW4pCiAgICAg
ICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChib3gtPnJlY3Qo
KSk7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QocnVuLT5yZWN0KCkpOwogfQogCiB2b2lk
IFJlbmRlckxpbmVCcmVhazo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBj
b25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0CkBAIC0yMDksNyArMjEy
LDkgQEAgdm9pZCBSZW5kZXJMaW5lQnJlYWs6OmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhWZWN0b3I8
U2VsZWN0aW9uUmVjdD4mIHJlY3RzLCB1bnNpZ24KICAgICBpZiAoIWJveCkKICAgICAgICAgcmV0
dXJuOwogICAgIGNvbnN0IFJvb3RJbmxpbmVCb3gmIHJvb3RCb3ggPSBib3gtPnJvb3QoKTsKLSAg
ICBMYXlvdXRSZWN0IHJlY3QgPSByb290Qm94LmNvbXB1dGVDYXJldFJlY3QoYm94LT5sb2dpY2Fs
TGVmdCgpLCAwLCBudWxscHRyKTsKKworICAgIExheW91dFJlY3QgcmVjdCA9IExheW91dEludGVn
cmF0aW9uOjpMaW5lSXRlcmF0b3IoJnJvb3RCb3gpLT5jb21wdXRlQ2FyZXRSZWN0KGJveC0+bG9n
aWNhbExlZnQoKSwgMCwgbnVsbHB0cik7CisKICAgICBpZiAocm9vdEJveC5pc0ZpcnN0QWZ0ZXJQ
YWdlQnJlYWsoKSkgewogICAgICAgICBpZiAoYm94LT5pc0hvcml6b250YWwoKSkKICAgICAgICAg
ICAgIHJlY3Quc2hpZnRZRWRnZVRvKHJvb3RCb3gubGluZUJveFRvcCgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaAppbmRleCBmZWQxNDgzMmRjNDguLjQwNDMy
YWNlN2M5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVC
cmVhay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaApA
QCAtNjYsNyArNjYsNyBAQCBwcml2YXRlOgogICAgIGludCBjYXJldE1pbk9mZnNldCgpIGNvbnN0
IGZpbmFsOwogICAgIGludCBjYXJldE1heE9mZnNldCgpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wg
Y2FuQmVTZWxlY3Rpb25MZWFmKCkgY29uc3QgZmluYWw7Ci0gICAgTGF5b3V0UmVjdCBsb2NhbENh
cmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0
cmFXaWR0aFRvRW5kT2ZMaW5lKSBmaW5hbDsKKyAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0
KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9m
TGluZSkgY29uc3QgZmluYWw7CiAgICAgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShIaWdobGlnaHRT
dGF0ZSkgZmluYWw7CiAKICAgICBMYXlvdXRVbml0IGxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUs
IExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlKSBjb25zdCBmaW5hbDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggODhhMTdjNTAwZTIwLi5h
NWQ4YzNkMmMyMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CkBAIC0xNDAwLDcgKzE0MDAsNyBAQCBMYXlvdXRTaXplIFJlbmRlck9iamVjdDo6b2Zmc2V0RnJv
bUFuY2VzdG9yQ29udGFpbmVyKFJlbmRlckVsZW1lbnQmIGNvbnRhaW5lcikgYwogICAgIHJldHVy
biBvZmZzZXQ7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyT2JqZWN0Ojpsb2NhbENhcmV0UmVjdChJ
bmxpbmVCb3gqLCB1bnNpZ25lZCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQor
TGF5b3V0UmVjdCBSZW5kZXJPYmplY3Q6OmxvY2FsQ2FyZXRSZWN0KGNvbnN0IElubGluZVJ1bkFu
ZE9mZnNldCYsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkgY29uc3QKIHsKICAg
ICBpZiAoZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQogICAgICAgICAqZXh0cmFXaWR0aFRvRW5kT2ZM
aW5lID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCBmN2Qy
MGM5Mjg2YWIuLjVjMGIxMzY5ZTQ1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuaApAQCAtNzUsNiArNzUsNyBAQCBjbGFzcyBWaXNpYmxlUG9zaXRpb247CiBjbGFzcyBT
ZWxlY3Rpb25SZWN0OwogI2VuZGlmCiAKK3N0cnVjdCBJbmxpbmVSdW5BbmRPZmZzZXQ7CiBzdHJ1
Y3QgUGFpbnRJbmZvOwogc3RydWN0IFNpbXBsZVJhbmdlOwogCkBAIC02NzIsMTMgKzY3Myw4IEBA
IHB1YmxpYzoKICAgICAvLyBXaGV0aGVyIG9yIG5vdCBhIGdpdmVuIGJsb2NrIG5lZWRzIHRvIHBh
aW50IHNlbGVjdGlvbiBnYXBzLgogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRQYWludFNlbGVjdGlv
bkdhcHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgLyoqCi0gICAgICogUmV0dXJu
cyB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIGNhcmV0IHdpdGhpbiB0aGlzIHJlbmRlciBv
YmplY3QuCi0gICAgICogQHBhcmFtIGNhcmV0T2Zmc2V0IHplcm8tYmFzZWQgb2Zmc2V0IGRldGVy
bWluaW5nIHBvc2l0aW9uIHdpdGhpbiB0aGUgcmVuZGVyIG9iamVjdC4KLSAgICAgKiBAcGFyYW0g
ZXh0cmFXaWR0aFRvRW5kT2ZMaW5lIG9wdGlvbmFsIG91dCBhcmcgdG8gZ2l2ZSBleHRyYSB3aWR0
aCB0byBlbmQgb2YgbGluZSAtCi0gICAgICogdXNlZnVsIGZvciBjaGFyYWN0ZXIgcmFuZ2UgcmVj
dCBjb21wdXRhdGlvbnMKLSAgICAgKi8KLSAgICB2aXJ0dWFsIExheW91dFJlY3QgbG9jYWxDYXJl
dFJlY3QoSW5saW5lQm94KiwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJh
V2lkdGhUb0VuZE9mTGluZSA9IG51bGxwdHIpOworICAgIC8vIFJldHVybnMgdGhlIGxvY2FsIGNv
b3JkaW5hdGVzIG9mIHRoZSBjYXJldCB3aXRoaW4gdGhpcyByZW5kZXIgb2JqZWN0LgorICAgIHZp
cnR1YWwgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQm
LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSBudWxscHRyKSBjb25zdDsKIAog
ICAgIC8vIFdoZW4gcGVyZm9ybWluZyBhIGdsb2JhbCBkb2N1bWVudCB0ZWFyLWRvd24sIG9yIHdo
ZW4gZ29pbmcgaW50byB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLCB0aGUgcmVuZGVyZXIgb2YgdGhl
IGRvY3VtZW50IGlzIGNsZWFyZWQuCiAgICAgYm9vbCByZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQo
KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAppbmRleCA1Mzkw
NjVlZTA4YjkuLjMwZGY2YTRjZjRjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1
ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJIeXBoZW5hdGlvbi5oIgorI2luY2x1
ZGUgIklubGluZVJ1bkFuZE9mZnNldC5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKICNp
bmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxheW91
dEludGVncmF0aW9uTGluZUxheW91dC5oIgpAQCAtNzEwLDE0ICs3MTEsMTUgQEAgVmlzaWJsZVBv
c2l0aW9uIFJlbmRlclRleHQ6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBv
aW50LCBjb25zdCBSZW4KICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKDAsIEFmZmlu
aXR5OjpEb3duc3RyZWFtKTsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJUZXh0Ojpsb2NhbENhcmV0
UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVu
aXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKK0xheW91dFJlY3QgUmVuZGVyVGV4dDo6bG9jYWxD
YXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiBydW5BbmRPZmZzZXQsIExheW91dFVu
aXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkgY29uc3QKIHsKLSAgICBpZiAoIWlubGluZUJveCkK
KyAgICBpZiAoIXJ1bkFuZE9mZnNldC5ydW4pCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7
CiAKLSAgICBhdXRvJiBib3ggPSBkb3duY2FzdDxJbmxpbmVUZXh0Qm94PigqaW5saW5lQm94KTsK
LSAgICBmbG9hdCBsZWZ0ID0gYm94LnBvc2l0aW9uRm9yT2Zmc2V0KGNhcmV0T2Zmc2V0KTsKLSAg
ICByZXR1cm4gYm94LnJvb3QoKS5jb21wdXRlQ2FyZXRSZWN0KGxlZnQsIGNhcmV0V2lkdGgsIGV4
dHJhV2lkdGhUb0VuZE9mTGluZSk7CisgICAgYXV0byYgdGV4dFJ1biA9IGRvd25jYXN0PExheW91
dEludGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0b3I+KHJ1bkFuZE9mZnNldC5ydW4pOworCisgICAg
ZmxvYXQgbGVmdCA9IHRleHRSdW4tPnBvc2l0aW9uRm9yT2Zmc2V0KHJ1bkFuZE9mZnNldC5vZmZz
ZXQpOworICAgIHJldHVybiB0ZXh0UnVuLmxpbmUoKS0+Y29tcHV0ZUNhcmV0UmVjdChsZWZ0LCBj
YXJldFdpZHRoLCBleHRyYVdpZHRoVG9FbmRPZkxpbmUpOwogfQogCiBBTFdBWVNfSU5MSU5FIGZs
b2F0IFJlbmRlclRleHQ6OndpZHRoRnJvbUNhY2hlKGNvbnN0IEZvbnRDYXNjYWRlJiBmLCB1bnNp
Z25lZCBzdGFydCwgdW5zaWduZWQgbGVuLCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNvbnN0IEZvbnQq
PiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdywgY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgK
aW5kZXggNTI4ODA5MzRjY2I0Li5hZTg1YWQyNDJhODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHQuaApAQCAtMjA1LDcgKzIwNSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNl
dFNlbGVjdGlvblN0YXRlKEhpZ2hsaWdodFN0YXRlKSBmaW5hbDsKICAgICBMYXlvdXRSZWN0IHNl
bGVjdGlvblJlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFp
bnRDb250YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVlKSBmaW5hbDsKLSAg
ICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIHVuc2lnbmVkIGNhcmV0T2Zm
c2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSBudWxscHRyKSBvdmVycmlk
ZTsKKyAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNl
dCYsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IG51bGxwdHIpIGNvbnN0IG92
ZXJyaWRlOwogICAgIExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoY29u
c3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikgY29uc3QgZmluYWw7
CiAKICAgICB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKGZsb2F0IGxlYWRXaWR0
aCwgSGFzaFNldDxjb25zdCBGb250Kj4mIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cmKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAppbmRleCAxYjUwN2Vj
ZGNhNjIuLjFkNWQzODZmYjM2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1Jvb3RJbmxpbmVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5s
aW5lQm94LmNwcApAQCAtNDc0LDU5ICs0NzQsNiBAQCBHYXBSZWN0cyBSb290SW5saW5lQm94Ojps
aW5lU2VsZWN0aW9uR2FwKFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExheW91dFBvaQog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUludFJlY3QgUm9vdElubGluZUJveDo6Y29tcHV0ZUNh
cmV0UmVjdChmbG9hdCBsb2dpY2FsTGVmdFBvc2l0aW9uLCB1bnNpZ25lZCBjYXJldFdpZHRoLCBM
YXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpIGNvbnN0Ci17Ci0gICAgaW50IGhlaWdo
dCA9IHNlbGVjdGlvbkhlaWdodCgpOwotICAgIGludCB0b3AgPSBzZWxlY3Rpb25Ub3AoKTsKLQot
ICAgIC8vIERpc3RyaWJ1dGUgdGhlIGNhcmV0J3Mgd2lkdGggdG8gZWl0aGVyIHNpZGUgb2YgdGhl
IG9mZnNldC4KLSAgICBmbG9hdCBsZWZ0ID0gbG9naWNhbExlZnRQb3NpdGlvbjsKLSAgICBpbnQg
Y2FyZXRXaWR0aExlZnRPZk9mZnNldCA9IGNhcmV0V2lkdGggLyAyOwotICAgIGxlZnQgLT0gY2Fy
ZXRXaWR0aExlZnRPZk9mZnNldDsKLSAgICBpbnQgY2FyZXRXaWR0aFJpZ2h0T2ZPZmZzZXQgPSBj
YXJldFdpZHRoIC0gY2FyZXRXaWR0aExlZnRPZk9mZnNldDsKLSAgICBsZWZ0ID0gcm91bmRmKGxl
ZnQpOwotCi0gICAgZmxvYXQgcm9vdExlZnQgPSBsb2dpY2FsTGVmdCgpOwotICAgIGZsb2F0IHJv
b3RSaWdodCA9IGxvZ2ljYWxSaWdodCgpOwotCi0gICAgaWYgKGV4dHJhV2lkdGhUb0VuZE9mTGlu
ZSkKLSAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IChsb2dpY2FsV2lkdGgoKSArIHJv
b3RMZWZ0KSAtIChsZWZ0ICsgY2FyZXRXaWR0aCk7Ci0KLSAgICBjb25zdCBSZW5kZXJTdHlsZSYg
YmxvY2tTdHlsZSA9IGJsb2NrRmxvdygpLnN0eWxlKCk7Ci0KLSAgICBib29sIHJpZ2h0QWxpZ25l
ZCA9IGZhbHNlOwotICAgIHN3aXRjaCAoYmxvY2tTdHlsZS50ZXh0QWxpZ24oKSkgewotICAgIGNh
c2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRS
aWdodDoKLSAgICAgICAgcmlnaHRBbGlnbmVkID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBUZXh0QWxpZ25Nb2RlOjpMZWZ0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0
TGVmdDoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNlbnRlcjoKLSAgICBjYXNlIFRleHRBbGln
bk1vZGU6OldlYktpdENlbnRlcjoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUZXh0QWxpZ25N
b2RlOjpKdXN0aWZ5OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6U3RhcnQ6Ci0gICAgICAgIHJp
Z2h0QWxpZ25lZCA9ICFibG9ja1N0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6Ci0gICAgICAgIHJpZ2h0QWxp
Z25lZCA9IGJsb2NrU3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBmbG9hdCBsZWZ0RWRnZSA9IHN0ZDo6bWluPGZsb2F0PigwLCByb290
TGVmdCk7Ci0gICAgZmxvYXQgcmlnaHRFZGdlID0gc3RkOjptYXg8ZmxvYXQ+KGJsb2NrRmxvdygp
LmxvZ2ljYWxXaWR0aCgpLCByb290UmlnaHQpOwotCi0gICAgaWYgKHJpZ2h0QWxpZ25lZCkgewot
ICAgICAgICBsZWZ0ID0gc3RkOjptYXgobGVmdCwgbGVmdEVkZ2UpOwotICAgICAgICBsZWZ0ID0g
c3RkOjptaW4obGVmdCwgcm9vdFJpZ2h0IC0gY2FyZXRXaWR0aCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgbGVmdCA9IHN0ZDo6bWluKGxlZnQsIHJpZ2h0RWRnZSAtIGNhcmV0V2lkdGhSaWdodE9m
T2Zmc2V0KTsKLSAgICAgICAgbGVmdCA9IHN0ZDo6bWF4KGxlZnQsIHJvb3RMZWZ0KTsKLSAgICB9
Ci0gICAgcmV0dXJuIGJsb2NrU3R5bGUuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IEludFJl
Y3QobGVmdCwgdG9wLCBjYXJldFdpZHRoLCBoZWlnaHQpIDogSW50UmVjdCh0b3AsIGxlZnQsIGhl
aWdodCwgY2FyZXRXaWR0aCk7Ci19Ci0KIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgUm9v
dElubGluZUJveDo6c2VsZWN0aW9uU3RhdGUoKQogewogICAgIC8vIFdhbGsgb3ZlciBhbGwgb2Yg
dGhlIHNlbGVjdGVkIGJveGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1Jvb3RJbmxpbmVCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94
LmgKaW5kZXggZTQ4MjkyZjdhYzNiLi43MDA5MzBhYzQ3MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1Jvb3RJbmxpbmVCb3guaApAQCAtMTMyLDggKzEzMiw2IEBAIHB1YmxpYzoKICAgICBH
YXBSZWN0cyBsaW5lU2VsZWN0aW9uR2FwKFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExh
eW91dFBvaW50JiByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBMYXlvdXRTaXplJiBv
ZmZzZXRGcm9tUm9vdEJsb2NrLAogICAgICAgICBMYXlvdXRVbml0IHNlbFRvcCwgTGF5b3V0VW5p
dCBzZWxIZWlnaHQsIGNvbnN0IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMmLCBjb25zdCBQ
YWludEluZm8qKTsKIAotICAgIEludFJlY3QgY29tcHV0ZUNhcmV0UmVjdChmbG9hdCBsb2dpY2Fs
TGVmdFBvc2l0aW9uLCB1bnNpZ25lZCBjYXJldFdpZHRoLCBMYXlvdXRVbml0KiBleHRyYVdpZHRo
VG9FbmRPZkxpbmUpIGNvbnN0OwotCiAgICAgdXNpbmcgQ2xlYW5MaW5lRmxvYXRMaXN0ID0gVmVj
dG9yPFdlYWtQdHI8UmVuZGVyQm94Pj47CiAgICAgdm9pZCBhcHBlbmRGbG9hdChSZW5kZXJCb3gm
IGZsb2F0aW5nQm94KQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCmluZGV4IDQ1NTU3NzYxODBlMS4uYmYzZjcxNWIw
Zjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lu
bGluZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
SW5saW5lVGV4dC5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJDU1NGb250U2VsZWN0
b3IuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJGbG9hdFF1YWQu
aCIKKyNpbmNsdWRlICJJbmxpbmVSdW5BbmRPZmZzZXQuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9j
ay5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0
LmgiCkBAIC0xMTUsMTEgKzExNiwxNCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW5saW5lVGV4dEJveD4g
UmVuZGVyU1ZHSW5saW5lVGV4dDo6Y3JlYXRlVGV4dEJveCgpCiB7CiAgICAgYXV0byBib3ggPSBt
YWtlVW5pcXVlPFNWR0lubGluZVRleHRCb3g+KCp0aGlzKTsKICAgICBib3gtPnNldEhhc1ZpcnR1
YWxMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgcmV0dXJuIGJveDsKKyAgICByZXR1cm4gYm94OyAKIH0K
IAotTGF5b3V0UmVjdCBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpsb2NhbENhcmV0UmVjdChJbmxpbmVC
b3gqIGJveCwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqKQorTGF5b3V0UmVjdCBS
ZW5kZXJTVkdJbmxpbmVUZXh0Ojpsb2NhbENhcmV0UmVjdChjb25zdCBJbmxpbmVSdW5BbmRPZmZz
ZXQmIHJ1bkFuZE9mZnNldCwgTGF5b3V0VW5pdCopIGNvbnN0CiB7CisgICAgYXV0byogYm94ID0g
cnVuQW5kT2Zmc2V0LnJ1biA/IHJ1bkFuZE9mZnNldC5ydW4tPmxlZ2FjeUlubGluZUJveCgpIDog
bnVsbHB0cjsKKyAgICBhdXRvIGNhcmV0T2Zmc2V0ID0gcnVuQW5kT2Zmc2V0Lm9mZnNldDsKKwog
ICAgIGlmICghaXM8SW5saW5lVGV4dEJveD4oYm94KSkKICAgICAgICAgcmV0dXJuIExheW91dFJl
Y3QoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdJbmxpbmVUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lu
bGluZVRleHQuaAppbmRleCBmZjQ2M2I4YjA5NjkuLmRjMjcyMDk5ZDAzNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgKQEAgLTYy
LDcgKzYyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlzU1ZHSW5saW5lVGV4dCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZv
clBvaW50KGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIq
KSBvdmVycmlkZTsKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIHVu
c2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAw
KSBvdmVycmlkZTsKKyAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KGNvbnN0IElubGluZVJ1
bkFuZE9mZnNldCYsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IG51bGxwdHIp
IGNvbnN0IG92ZXJyaWRlOwogICAgIEludFJlY3QgbGluZXNCb3VuZGluZ0JveCgpIGNvbnN0IG92
ZXJyaWRlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVUZXh0Qm94PiBjcmVhdGVUZXh0Qm94
KCkgb3ZlcnJpZGU7CiAK
</data>
<flag name="review"
          id="429902"
          type_id="1"
          status="+"
          setter="zalan"
    />
    <flag name="commit-queue"
          id="429926"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413421</attachid>
            <date>2020-11-06 04:33:24 -0800</date>
            <delta_ts>2020-11-06 05:56:32 -0800</delta_ts>
            <desc>patch</desc>
            <filename>lfc-localCaretOffset-4.patch</filename>
            <type>text/plain</type>
            <size>39154</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyMThlM2I4ZDBmMzguLjljOGYzOTc4MGRiMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDc2IEBACisyMDIwLTExLTA1ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gbG9jYWxDYXJldE9mZnNldCBzaG91bGQg
dXNlIGl0ZXJhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTg2MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBDb252ZXJ0IGFsbCBsb2NhbENhcmV0UmVjdCBpbXBsZW1lbnRhdGlvbnMgdG8gdXNlIGl0
ZXJhdG9yLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmxvY2FsQ2FyZXRSZWN0Rm9yQ2hhcmFjdGVy
T2Zmc2V0KToKKyAgICAgICAgKiBlZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyZWRQb3NpdGlvbjo6YWJzb2x1dGVSZWN0IGNvbnN0KToKKyAgICAg
ICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaXNp
YmxlUG9zaXRpb246OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvaW50
ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlBhdGhMaW5lOjpjb21wdXRlQ2FyZXRSZWN0IGNvbnN0
KToKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRl
cmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpQYXRoTGluZTo6
bG9naWNhbExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246
OlBhdGhMaW5lOjpsb2dpY2FsUmlnaHQgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3Jh
dGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvckxlZ2FjeVBhdGguaDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lSXRlcmF0b3JMZWdhY3lQYXRoOjpsb2dp
Y2FsTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGlu
ZUl0ZXJhdG9yTGVnYWN5UGF0aDo6bG9naWNhbFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKiBsYXlv
dXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmg6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUl0ZXJhdG9yTW9kZXJu
UGF0aDo6bG9naWNhbExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdy
YXRpb246OkxpbmVJdGVyYXRvck1vZGVyblBhdGg6OmxvZ2ljYWxSaWdodCBjb25zdCk6CisgICAg
ICAgICogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpQYXRoVGV4dFJ1bjo6cG9zaXRp
b25Gb3JPZmZzZXQgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJ
bnRlZ3JhdGlvblJ1bkl0ZXJhdG9yTGVnYWN5UGF0aC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yTGVnYWN5UGF0aDo6b2Zmc2V0Rm9yUG9zaXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9y
TGVnYWN5UGF0aDo6cG9zaXRpb25Gb3JPZmZzZXQgY29uc3QpOgorICAgICAgICAqIGxheW91dC9p
bnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yTW9kZXJuUGF0aC5oOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yTW9kZXJuUGF0aDo6
cG9zaXRpb25Gb3JPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdy
YXRpb246OlJ1bkl0ZXJhdG9yTW9kZXJuUGF0aDo6c2VsZWN0aW9uUmVjdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRlcmF0b3JNb2Rlcm5QYXRoOjpj
bGFtcGVkT2Zmc2V0IGNvbnN0KToKKworICAgICAgICBNYWtlIGNsYW1wZWRPZmZzZXQgcmV0dXJu
IDAgYmFzZWQgb2Zmc2V0IGxpa2UgaXQgZG9lcyBpbiBJbmxpbmVUZXh0Qm94IHRvIG1ha2UgcG9y
dGluZyBlYXNpZXIuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2NhbENhcmV0UmVjdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
TW9kZWxPYmplY3Q6OmxvY2FsQ2FyZXRSZWN0Rm9yRW1wdHlFbGVtZW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpsb2NhbENhcmV0UmVjdEZvckVtcHR5
RWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlcklubGluZTo6bG9jYWxDYXJldFJlY3QpOiBEZWxldGVkLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlu
ZUJyZWFrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVCcmVhazo6bG9jYWxDYXJl
dFJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGluZUJyZWFrOjpsaW5lc0Jv
dW5kaW5nQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVCcmVhazo6bG9j
YWxDYXJldFJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQnJl
YWsuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck9iamVjdDo6bG9jYWxDYXJldFJlY3QgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyT2JqZWN0Ojpsb2NhbENhcmV0UmVjdCk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmxvY2FsQ2FyZXRSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdJbmxpbmVUZXh0OjpjcmVhdGVUZXh0Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R0lubGluZVRleHQ6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR0lubGluZVRleHQ6OmxvY2FsQ2FyZXRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaDoKKwogMjAyMC0xMS0wNCAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KIAogICAgICAgICBbR1BVIFByb2Nlc3NdIE1v
dmUgdGhlIGludGVybmFsIEdQVSByZW5kZXJpbmcgZmxhZ3MgZnJvbSBXZWJQYWdlIHRvIFdlYlBy
b2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RD
YWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3Bw
CmluZGV4IGZmMWUxZjkxNDI4YS4uOTE5YzFkZjViYjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTg0LDYgKzg0LDcgQEAKICNpbmNs
dWRlICJIVE1MU2VsZWN0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSW5saW5lRWxlbWVudEJveC5oIgorI2luY2x1ZGUgIklubGlu
ZVJ1bkFuZE9mZnNldC5oIgogI2luY2x1ZGUgIk1hdGhNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKQEAgLTI4OTMsMTQgKzI4OTQsMTQgQEAgTGF5b3V0
UmVjdCBBWE9iamVjdENhY2hlOjpsb2NhbENhcmV0UmVjdEZvckNoYXJhY3Rlck9mZnNldChSZW5k
ZXJPYmplY3QqJiByZW5kZXIKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gSW50UmVj
dCgpOwogCi0gICAgYXV0byBbaW5saW5lQm94LCBjYXJldE9mZnNldF0gPSBtYWtlQ29udGFpbmVy
T2Zmc2V0UG9zaXRpb24ocmFuZ2UtPnN0YXJ0KS5pbmxpbmVCb3hBbmRPZmZzZXQoQWZmaW5pdHk6
OkRvd25zdHJlYW0pOwotICAgIGlmIChpbmxpbmVCb3gpCi0gICAgICAgIHJlbmRlcmVyID0gJmlu
bGluZUJveC0+cmVuZGVyZXIoKTsKKyAgICBhdXRvIHJ1bkFuZE9mZnNldCA9IG1ha2VDb250YWlu
ZXJPZmZzZXRQb3NpdGlvbihyYW5nZS0+c3RhcnQpLmlubGluZVJ1bkFuZE9mZnNldChBZmZpbml0
eTo6RG93bnN0cmVhbSk7CisgICAgaWYgKHJ1bkFuZE9mZnNldC5ydW4pCisgICAgICAgIHJlbmRl
cmVyID0gY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPigmcnVuQW5kT2Zmc2V0LnJ1bi0+cmVuZGVy
ZXIoKSk7CiAKLSAgICBpZiAoaXM8UmVuZGVyTGluZUJyZWFrPihyZW5kZXJlcikgJiYgZG93bmNh
c3Q8UmVuZGVyTGluZUJyZWFrPihyZW5kZXJlciktPmlubGluZUJveFdyYXBwZXIoKSAhPSBpbmxp
bmVCb3gpCisgICAgaWYgKGlzPFJlbmRlckxpbmVCcmVhaz4ocmVuZGVyZXIpICYmIExheW91dElu
dGVncmF0aW9uOjpydW5Gb3IoZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFrPigqcmVuZGVyZXIpKSAh
PSBydW5BbmRPZmZzZXQucnVuKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAgcmV0
dXJuIHJlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0KTsKKyAg
ICByZXR1cm4gcmVuZGVyZXItPmxvY2FsQ2FyZXRSZWN0KHJ1bkFuZE9mZnNldCk7CiB9CiAKIElu
dFJlY3QgQVhPYmplY3RDYWNoZTo6YWJzb2x1dGVDYXJldEJvdW5kc0ZvckNoYXJhY3Rlck9mZnNl
dChjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uY3BwCmluZGV4IGQzMzcwZDNlYjlkMi4uYWYzMjdk
NTY0ZjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQb3NpdGlvbi5jcHAK
QEAgLTIyOSw3ICsyMjksNyBAQCBJbnRSZWN0IFJlbmRlcmVkUG9zaXRpb246OmFic29sdXRlUmVj
dChMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpIGNvbnN0CiAgICAgaWYgKGlzTnVs
bCgpKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAgSW50UmVjdCBsb2NhbFJlY3Qg
PSBzbmFwcGVkSW50UmVjdChjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KG1fcmVuZGVyZXIpLT5s
b2NhbENhcmV0UmVjdChtX3J1bi0+bGVnYWN5SW5saW5lQm94KCksIG1fb2Zmc2V0LCBleHRyYVdp
ZHRoVG9FbmRPZkxpbmUpKTsKKyAgICBJbnRSZWN0IGxvY2FsUmVjdCA9IHNuYXBwZWRJbnRSZWN0
KGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4obV9yZW5kZXJlciktPmxvY2FsQ2FyZXRSZWN0KHsg
bV9ydW4sIG1fb2Zmc2V0IH0sIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkpOwogICAgIHJldHVybiBs
b2NhbFJlY3QgPT0gSW50UmVjdCgpID8gSW50UmVjdCgpIDogbV9yZW5kZXJlci0+bG9jYWxUb0Fi
c29sdXRlUXVhZChGbG9hdFJlY3QobG9jYWxSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCmluZGV4IDAx
ZWRkNTNjMDc0ZC4uMmM2MWNmNjExY2Q3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNp
YmxlUG9zaXRpb24uY3BwCkBAIC02MzgsMTIgKzYzOCwxMiBAQCBhdXRvIFZpc2libGVQb3NpdGlv
bjo6bG9jYWxDYXJldFJlY3QoKSBjb25zdCAtPiBMb2NhbENhcmV0UmVjdAogICAgIGlmICghbm9k
ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGF1dG8gW2lubGluZUJveCwgY2FyZXRPZmZz
ZXRdID0gaW5saW5lQm94QW5kT2Zmc2V0KCk7Ci0gICAgYXV0byByZW5kZXJlciA9IGlubGluZUJv
eCA/ICZpbmxpbmVCb3gtPnJlbmRlcmVyKCkgOiBub2RlLT5yZW5kZXJlcigpOworICAgIGF1dG8g
cnVuQW5kT2Zmc2V0ID0gaW5saW5lUnVuQW5kT2Zmc2V0KCk7CisgICAgYXV0byByZW5kZXJlciA9
IHJ1bkFuZE9mZnNldC5ydW4gPyAmcnVuQW5kT2Zmc2V0LnJ1bi0+cmVuZGVyZXIoKSA6IG5vZGUt
PnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIHsgfTsKIAot
ICAgIHJldHVybiB7IHJlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChpbmxpbmVCb3gsIGNhcmV0T2Zm
c2V0KSwgcmVuZGVyZXIgfTsKKyAgICByZXR1cm4geyByZW5kZXJlci0+bG9jYWxDYXJldFJlY3Qo
cnVuQW5kT2Zmc2V0KSwgY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihyZW5kZXJlcikgfTsKIH0K
IAogSW50UmVjdCBWaXNpYmxlUG9zaXRpb246OmFic29sdXRlQ2FyZXRCb3VuZHMoYm9vbCogaW5z
aWRlRml4ZWQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmNwcAppbmRl
eCBlNzE3ZWVmNGRmNWUuLjcxOTg3YjQwOWU0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5l
SXRlcmF0b3IuY3BwCkBAIC0xNzksNiArMTc5LDU5IEBAIGludCBQYXRoTGluZTo6YmxvY2tEaXJl
Y3Rpb25Qb2ludEluTGluZSgpIGNvbnN0CiAgICAgcmV0dXJuICFjb250YWluaW5nQmxvY2soKS5z
dHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkgPyBzdGQ6Om1heCh0b3AoKSwgc2Vs
ZWN0aW9uVG9wKCkpIDogc3RkOjptaW4oYm90dG9tKCksIHNlbGVjdGlvbkJvdHRvbSgpKTsKIH0K
IAorSW50UmVjdCBQYXRoTGluZTo6Y29tcHV0ZUNhcmV0UmVjdChmbG9hdCBsb2dpY2FsTGVmdFBv
c2l0aW9uLCB1bnNpZ25lZCBjYXJldFdpZHRoLCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRP
ZkxpbmUpIGNvbnN0Cit7CisgICAgaW50IGhlaWdodCA9IHNlbGVjdGlvbkJvdHRvbSgpIC0gc2Vs
ZWN0aW9uVG9wKCk7CisgICAgaW50IHRvcCA9IHNlbGVjdGlvblRvcCgpOworCisgICAgLy8gRGlz
dHJpYnV0ZSB0aGUgY2FyZXQncyB3aWR0aCB0byBlaXRoZXIgc2lkZSBvZiB0aGUgb2Zmc2V0Lgor
ICAgIGZsb2F0IGxlZnQgPSBsb2dpY2FsTGVmdFBvc2l0aW9uOworICAgIGludCBjYXJldFdpZHRo
TGVmdE9mT2Zmc2V0ID0gY2FyZXRXaWR0aCAvIDI7CisgICAgbGVmdCAtPSBjYXJldFdpZHRoTGVm
dE9mT2Zmc2V0OworICAgIGludCBjYXJldFdpZHRoUmlnaHRPZk9mZnNldCA9IGNhcmV0V2lkdGgg
LSBjYXJldFdpZHRoTGVmdE9mT2Zmc2V0OworICAgIGxlZnQgPSByb3VuZGYobGVmdCk7CisKKyAg
ICBmbG9hdCBsaW5lTGVmdCA9IGxvZ2ljYWxMZWZ0KCk7CisgICAgZmxvYXQgbGluZVJpZ2h0ID0g
bG9naWNhbFJpZ2h0KCk7CisKKyAgICBpZiAoZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQorICAgICAg
ICAqZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gbGluZVJpZ2h0IC0gKGxlZnQgKyBjYXJldFdpZHRo
KTsKKworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBibG9ja1N0eWxlID0gY29udGFpbmluZ0Jsb2Nr
KCkuc3R5bGUoKTsKKworICAgIGJvb2wgcmlnaHRBbGlnbmVkID0gZmFsc2U7CisgICAgc3dpdGNo
IChibG9ja1N0eWxlLnRleHRBbGlnbigpKSB7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdo
dDoKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0OgorICAgICAgICByaWdodEFs
aWduZWQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okxl
ZnQ6CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0OgorICAgIGNhc2UgVGV4dEFs
aWduTW9kZTo6Q2VudGVyOgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0Q2VudGVyOgor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6CisgICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKKyAgICAgICAgcmlnaHRBbGlnbmVkID0gIWJsb2NrU3R5
bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRl
eHRBbGlnbk1vZGU6OkVuZDoKKyAgICAgICAgcmlnaHRBbGlnbmVkID0gYmxvY2tTdHlsZS5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGZsb2F0
IGxlZnRFZGdlID0gc3RkOjptaW48ZmxvYXQ+KDAsIGxpbmVMZWZ0KTsKKyAgICBmbG9hdCByaWdo
dEVkZ2UgPSBzdGQ6Om1heDxmbG9hdD4oY29udGFpbmluZ0Jsb2NrKCkubG9naWNhbFdpZHRoKCks
IGxpbmVSaWdodCk7CisKKyAgICBpZiAocmlnaHRBbGlnbmVkKSB7CisgICAgICAgIGxlZnQgPSBz
dGQ6Om1heChsZWZ0LCBsZWZ0RWRnZSk7CisgICAgICAgIGxlZnQgPSBzdGQ6Om1pbihsZWZ0LCBs
aW5lUmlnaHQgLSBjYXJldFdpZHRoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0ID0gc3Rk
OjptaW4obGVmdCwgcmlnaHRFZGdlIC0gY2FyZXRXaWR0aFJpZ2h0T2ZPZmZzZXQpOworICAgICAg
ICBsZWZ0ID0gc3RkOjptYXgobGVmdCwgbGluZUxlZnQpOworICAgIH0KKyAgICByZXR1cm4gYmxv
Y2tTdHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gSW50UmVjdChsZWZ0LCB0b3AsIGNh
cmV0V2lkdGgsIGhlaWdodCkgOiBJbnRSZWN0KHRvcCwgbGVmdCwgaGVpZ2h0LCBjYXJldFdpZHRo
KTsKK30KKwogfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5oCmluZGV4IGU0
ODc0NDE2MWFiMy4uOTk4YTg1ZTdiM2JmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0
b3IuaApAQCAtNTksOSArNTksMTIgQEAgcHVibGljOgogICAgIExheW91dFVuaXQgbGluZUJveEJv
dHRvbSgpIGNvbnN0OwogCiAgICAgZmxvYXQgeSgpIGNvbnN0OworICAgIGZsb2F0IGxvZ2ljYWxM
ZWZ0KCkgY29uc3Q7CisgICAgZmxvYXQgbG9naWNhbFJpZ2h0KCkgY29uc3Q7CiAgICAgZmxvYXQg
bG9naWNhbEhlaWdodCgpIGNvbnN0OwogCiAgICAgaW50IGJsb2NrRGlyZWN0aW9uUG9pbnRJbkxp
bmUoKSBjb25zdDsKKyAgICBJbnRSZWN0IGNvbXB1dGVDYXJldFJlY3QoZmxvYXQgbG9naWNhbExl
ZnRQb3NpdGlvbiwgdW5zaWduZWQgY2FyZXRXaWR0aCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRv
RW5kT2ZMaW5lKSBjb25zdDsKIAogICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29uc3Q7CiAKQEAg
LTE3Nyw2ICsxODAsMjAgQEAgaW5saW5lIGZsb2F0IFBhdGhMaW5lOjp5KCkgY29uc3QKICAgICB9
KTsKIH0KIAoraW5saW5lIGZsb2F0IFBhdGhMaW5lOjpsb2dpY2FsTGVmdCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0
aCkgeworICAgICAgICByZXR1cm4gcGF0aC5sb2dpY2FsTGVmdCgpOworICAgIH0pOworfQorCitp
bmxpbmUgZmxvYXQgUGF0aExpbmU6OmxvZ2ljYWxSaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgW10oY29uc3QgYXV0byYgcGF0aCkgeworICAg
ICAgICByZXR1cm4gcGF0aC5sb2dpY2FsUmlnaHQoKTsKKyAgICB9KTsKK30KKwogaW5saW5lIGZs
b2F0IFBhdGhMaW5lOjpsb2dpY2FsSGVpZ2h0KCkgY29uc3QKIHsKICAgICByZXR1cm4gV1RGOjpz
d2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbXShjb25zdCBhdXRvJiBwYXRoKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5l
SXRlcmF0b3JMZWdhY3lQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24v
TGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JMZWdhY3lQYXRoLmgKaW5kZXggNmMyOWNjM2Yw
ZGZkLi42YzYyODllZGE2NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRl
Z3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvckxlZ2FjeVBhdGguaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRl
cmF0b3JMZWdhY3lQYXRoLmgKQEAgLTUzLDYgKzUzLDggQEAgcHVibGljOgogICAgIExheW91dFVu
aXQgbGluZUJveEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+bGluZUJv
eEJvdHRvbSgpOyB9CiAKICAgICBmbG9hdCB5KCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5l
Qm94LT55KCk7IH0KKyAgICBmbG9hdCBsb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9v
dElubGluZUJveC0+bG9naWNhbExlZnQoKTsgfQorICAgIGZsb2F0IGxvZ2ljYWxSaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC0+bG9naWNhbFJpZ2h0KCk7IH0KICAgICBmbG9h
dCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94LT5sb2dpY2Fs
SGVpZ2h0KCk7IH0KICAgICBib29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0IHsgcmV0dXJuIG1fcm9v
dElubGluZUJveC0+aXNIb3Jpem9udGFsKCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yTW9kZXJu
UGF0aC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0
aW9uTGluZUl0ZXJhdG9yTW9kZXJuUGF0aC5oCmluZGV4IGFhMThkYzk3MmE3ZC4uODdhMTY3OGMy
NmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0
SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yTW9kZXJuUGF0
aC5oCkBAIC01MSwxMyArNTEsMTcgQEAgcHVibGljOgogCiAgICAgTGF5b3V0VW5pdCB0b3AoKSBj
b25zdCB7IHJldHVybiBMYXlvdXRVbml0Ojpmcm9tRmxvYXRSb3VuZChsaW5lKCkuZW5jbG9zaW5n
UmVjdCgpLnkoKSk7IH0KICAgICBMYXlvdXRVbml0IGJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIExh
eW91dFVuaXQ6OmZyb21GbG9hdFJvdW5kKGxpbmUoKS5lbmNsb3NpbmdSZWN0KCkubWF4WSgpKTsg
fQorICAgIExheW91dFVuaXQgbGluZUJveFRvcCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFVuaXQ6
OmZyb21GbG9hdFJvdW5kKGxpbmUoKS5yZWN0KCkueSgpKTsgfQorICAgIExheW91dFVuaXQgbGlu
ZUJveEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIExheW91dFVuaXQ6OmZyb21GbG9hdFJvdW5kKGxp
bmUoKS5yZWN0KCkubWF4WSgpKTsgfQorCiAgICAgLy8gRklYTUU6IFdoYXQgc2hvdWxkIHRoZXNl
IHJlYWxseSBiZT8KICAgICBMYXlvdXRVbml0IHNlbGVjdGlvblRvcCgpIGNvbnN0IHsgcmV0dXJu
IHRvcCgpOyB9CiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Ub3BGb3JIaXRUZXN0aW5nKCkgY29u
c3QgeyByZXR1cm4gdG9wKCk7IH0KICAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkJvdHRvbSgpIGNv
bnN0IHsgcmV0dXJuIGJvdHRvbSgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsaW5lQm94VG9wKCkgY29u
c3QgeyByZXR1cm4gTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Um91bmQobGluZSgpLnJlY3QoKS55KCkp
OyB9Ci0gICAgTGF5b3V0VW5pdCBsaW5lQm94Qm90dG9tKCkgY29uc3QgeyByZXR1cm4gTGF5b3V0
VW5pdDo6ZnJvbUZsb2F0Um91bmQobGluZSgpLnJlY3QoKS5tYXhZKCkpOyB9CiAKKyAgICAvLyBG
SVhNRTogV2hhdCBzaG91bGQgdGhlc2UgYmU/CisgICAgZmxvYXQgbG9naWNhbExlZnQoKSBjb25z
dCB7IHJldHVybiBsaW5lKCkuc2Nyb2xsYWJsZU92ZXJmbG93KCkueCgpOyB9CisgICAgZmxvYXQg
bG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbGluZSgpLnNjcm9sbGFibGVPdmVyZmxvdygp
Lm1heFgoKTsgfQogICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBsaW5lQm94VG9wKCk7IH0K
ICAgICBmbG9hdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbGluZSgpLnJlY3QoKS5o
ZWlnaHQoKTsgfQogICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dElu
dGVncmF0aW9uUnVuSXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlv
bi9MYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmgKaW5kZXggZDM2YTExMTdkMGQ1Li5lNzY3
N2M2NWU2ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9M
YXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3IuaApAQCAtMTA4LDYgKzEw
OCw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKIAogICAgIHVuc2ln
bmVkIG9mZnNldEZvclBvc2l0aW9uKGZsb2F0IHgpIGNvbnN0OworICAgIGZsb2F0IHBvc2l0aW9u
Rm9yT2Zmc2V0KHVuc2lnbmVkKSBjb25zdDsKIAogICAgIGJvb2wgaXNTZWxlY3RhYmxlKHVuc2ln
bmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpIGNvbnN0OwogICAgIExheW91dFJlY3Qgc2VsZWN0aW9u
UmVjdCh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKSBjb25zdDsKQEAgLTMyOCw2ICszMjks
MTMgQEAgaW5saW5lIHVuc2lnbmVkIFBhdGhUZXh0UnVuOjpvZmZzZXRGb3JQb3NpdGlvbihmbG9h
dCB4KSBjb25zdAogICAgIH0pOwogfQogCitpbmxpbmUgZmxvYXQgUGF0aFRleHRSdW46OnBvc2l0
aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpz
d2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbJl0oYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4g
cGF0aC5wb3NpdGlvbkZvck9mZnNldChvZmZzZXQpOworICAgIH0pOworfQorCiBpbmxpbmUgYm9v
bCBQYXRoVGV4dFJ1bjo6aXNTZWxlY3RhYmxlKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9wYXRoVmFyaWFudCwgWyZdKGF1
dG8mIHBhdGgpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlv
bi9MYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yTGVnYWN5UGF0aC5oIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JMZWdhY3lQ
YXRoLmgKaW5kZXggNWUxODNhMDIyM2YyLi5hMmE3ZGU4NjA1MDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9y
TGVnYWN5UGF0aC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlv
dXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yTGVnYWN5UGF0aC5oCkBAIC01OSw3ICs1OSw4IEBAIHB1
YmxpYzoKICAgICB1bnNpZ25lZCBlbmQoKSBjb25zdCB7IHJldHVybiBpbmxpbmVUZXh0Qm94KCkt
PmVuZCgpOyB9CiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gaW5saW5lVGV4
dEJveCgpLT5sZW4oKTsgfQogCi0gICAgaW5saW5lIHVuc2lnbmVkIG9mZnNldEZvclBvc2l0aW9u
KGZsb2F0IHgpIGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRCb3goKS0+b2Zmc2V0Rm9yUG9zaXRp
b24oeCk7IH0KKyAgICB1bnNpZ25lZCBvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB4KSBjb25zdCB7
IHJldHVybiBpbmxpbmVUZXh0Qm94KCktPm9mZnNldEZvclBvc2l0aW9uKHgpOyB9CisgICAgZmxv
YXQgcG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KSBjb25zdCB7IHJldHVybiBpbmxp
bmVUZXh0Qm94KCktPnBvc2l0aW9uRm9yT2Zmc2V0KG9mZnNldCk7IH0KIAogICAgIGJvb2wgaXNT
ZWxlY3RhYmxlKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpIGNvbnN0IHsgcmV0dXJuIGlu
bGluZVRleHRCb3goKS0+aXNTZWxlY3RlZChzdGFydCwgZW5kKTsgfQogICAgIExheW91dFJlY3Qg
c2VsZWN0aW9uUmVjdCh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKSBjb25zdCB7IHJldHVy
biBpbmxpbmVUZXh0Qm94KCktPmxvY2FsU2VsZWN0aW9uUmVjdChzdGFydCwgZW5kKTsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0
aW9uUnVuSXRlcmF0b3JNb2Rlcm5QYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdy
YXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1vZGVyblBhdGguaAppbmRleCAzZjA2
NjEwODcyZjEuLmQxOTdlNTZkZTA0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JNb2Rlcm5QYXRoLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVu
SXRlcmF0b3JNb2Rlcm5QYXRoLmgKQEAgLTY2LDYgKzY2LDcgQEAgcHVibGljOgogICAgIHVuc2ln
bmVkIGVuZCgpIGNvbnN0IHsgcmV0dXJuIHJ1bigpLnRleHRDb250ZW50KCktPmVuZCgpOyB9CiAg
ICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gcnVuKCkudGV4dENvbnRlbnQoKS0+
bGVuZ3RoKCk7IH0KIAorICAgIC8vIEZJWE1FOiBNYWtlIGEgc2hhcmVkIGdlbmVyaWMgdmVyc2lv
biBvZiB0aGlzLgogICAgIGlubGluZSB1bnNpZ25lZCBvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB4
KSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzTGluZUJyZWFrKCkpCkBAIC04MSw2ICs4Miwy
MyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBydW4oKS5zdHlsZSgpLmZvbnRDYXNjYWRlKCku
b2Zmc2V0Rm9yUG9zaXRpb24oY3JlYXRlVGV4dFJ1bihIeXBoZW5Nb2RlOjpJZ25vcmUpLCBsb2Nh
bFgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKICAgICB9CiAKKyAgICAvLyBGSVhNRTogTWFrZSBh
IHNoYXJlZCBnZW5lcmljIHZlcnNpb24gb2YgdGhpcy4KKyAgICBmbG9hdCBwb3NpdGlvbkZvck9m
ZnNldCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQob2Zmc2V0
ID49IHN0YXJ0KCkpOworICAgICAgICBBU1NFUlQob2Zmc2V0IDw9IGVuZCgpKTsKKworICAgICAg
ICBpZiAoaXNMaW5lQnJlYWsoKSkKKyAgICAgICAgICAgIHJldHVybiByZWN0KCkueCgpOworCisg
ICAgICAgIGF1dG8gZW5kT2Zmc2V0ID0gY2xhbXBlZE9mZnNldChvZmZzZXQpOworCisgICAgICAg
IExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdCA9IExheW91dFJlY3QocmVjdCgpLngoKSwgMCwgMCwg
MCk7CisgICAgICAgIFRleHRSdW4gdGV4dFJ1biA9IGNyZWF0ZVRleHRSdW4oSHlwaGVuTW9kZTo6
SWdub3JlKTsKKyAgICAgICAgcnVuKCkuc3R5bGUoKS5mb250Q2FzY2FkZSgpLmFkanVzdFNlbGVj
dGlvblJlY3RGb3JUZXh0KHRleHRSdW4sIHNlbGVjdGlvblJlY3QsIDAsIGVuZE9mZnNldCk7Cisg
ICAgICAgIHJldHVybiBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRpbmdEaXJlY3Rpb24o
c2VsZWN0aW9uUmVjdCwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCks
IHRleHRSdW4ubHRyKCkpLm1heFgoKTsKKyAgICB9CisKICAgICBib29sIGlzU2VsZWN0YWJsZSh1
bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJu
IGNsYW1wZWRPZmZzZXQoc3RhcnQpIDwgY2xhbXBlZE9mZnNldChlbmQpOwpAQCAtMTA1LDggKzEy
Myw4IEBAIHB1YmxpYzoKICAgICAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0IHsgbG9naWNh
bExlZnQsIHNlbGVjdGlvblRvcCwgbG9naWNhbFdpZHRoLCBzZWxlY3Rpb25IZWlnaHQgfTsKIAog
ICAgICAgICBUZXh0UnVuIHRleHRSdW4gPSBjcmVhdGVUZXh0UnVuKEh5cGhlbk1vZGU6OkluY2x1
ZGUpOwotICAgICAgICBpZiAoY2xhbXBlZFN0YXJ0ICE9IHN0YXJ0KCkgfHwgY2xhbXBlZEVuZCAh
PSB0ZXh0UnVuLmxlbmd0aCgpKQotICAgICAgICAgICAgcnVuKCkuc3R5bGUoKS5mb250Q2FzY2Fk
ZSgpLmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4sIHNlbGVjdGlvblJlY3QsIGNs
YW1wZWRTdGFydCAtIHN0YXJ0KCksIGNsYW1wZWRFbmQgLSBzdGFydCgpKTsKKyAgICAgICAgaWYg
KGNsYW1wZWRTdGFydCB8fCBjbGFtcGVkRW5kICE9IHRleHRSdW4ubGVuZ3RoKCkpCisgICAgICAg
ICAgICBydW4oKS5zdHlsZSgpLmZvbnRDYXNjYWRlKCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRl
eHQodGV4dFJ1biwgc2VsZWN0aW9uUmVjdCwgY2xhbXBlZFN0YXJ0LCBjbGFtcGVkRW5kKTsKIAog
ICAgICAgICByZXR1cm4gc25hcHBlZFNlbGVjdGlvblJlY3Qoc2VsZWN0aW9uUmVjdCwgbG9naWNh
bFJpZ2h0LCBzZWxlY3Rpb25Ub3AsIHNlbGVjdGlvbkhlaWdodCwgaXNIb3Jpem9udGFsKCkpOwog
ICAgIH0KQEAgLTE5OCw5ICsyMTYsOSBAQCBwcml2YXRlOgogCiAgICAgdW5zaWduZWQgY2xhbXBl
ZE9mZnNldCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiAgICAgewotICAgICAgICBhdXRvIGNsYW1w
ZWRPZmZzZXQgPSBzdGQ6Om1heChzdGFydCgpLCBzdGQ6Om1pbihvZmZzZXQsIGVuZCgpKSk7Cisg
ICAgICAgIGF1dG8gY2xhbXBlZE9mZnNldCA9IHN0ZDo6bWF4KHN0YXJ0KCksIHN0ZDo6bWluKG9m
ZnNldCwgZW5kKCkpKSAtIHN0YXJ0KCk7CiAgICAgICAgIC8vIFdlIHRyZWF0IHRoZSBsYXN0IGNv
ZGVwb2ludCBpbiB0aGlzIHJ1biBhbmQgdGhlIGh5cGhlbiBhcyBhIHNpbmdsZSB1bml0LgotICAg
ICAgICBpZiAoaGFzSHlwaGVuKCkgJiYgY2xhbXBlZE9mZnNldCA9PSBlbmQoKSkKKyAgICAgICAg
aWYgKGhhc0h5cGhlbigpICYmIGNsYW1wZWRPZmZzZXQgPT0gbGVuZ3RoKCkpCiAgICAgICAgICAg
ICBjbGFtcGVkT2Zmc2V0ICs9IHJ1bigpLnN0eWxlKCkuaHlwaGVuU3RyaW5nKCkubGVuZ3RoKCk7
CiAKICAgICAgICAgcmV0dXJuIGNsYW1wZWRPZmZzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcAppbmRleCAxMDQ4MmQ0MDExODAuLjMzYTBjYTYxZTBiOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0yODQyLDExICsyODQyLDEx
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZUhpdFRlc3RSZXN1bHQoSGl0VGVzdFJlc3VsdCYg
cmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYKICAgICB9CiB9CiAKLUxheW91dFJlY3QgUmVuZGVy
QmxvY2s6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCB1bnNpZ25lZCBjYXJl
dE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQorTGF5b3V0UmVjdCBS
ZW5kZXJCbG9jazo6bG9jYWxDYXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiBydW5B
bmRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkgY29uc3QKIHsKICAg
ICAvLyBEbyB0aGUgbm9ybWFsIGNhbGN1bGF0aW9uIGluIG1vc3QgY2FzZXMuCiAgICAgaWYgKGZp
cnN0Q2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIFJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QoaW5s
aW5lQm94LCBjYXJldE9mZnNldCwgZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKTsKKyAgICAgICAgcmV0
dXJuIFJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QocnVuQW5kT2Zmc2V0LCBleHRyYVdpZHRoVG9F
bmRPZkxpbmUpOwogCiAgICAgTGF5b3V0UmVjdCBjYXJldFJlY3QgPSBsb2NhbENhcmV0UmVjdEZv
ckVtcHR5RWxlbWVudCh3aWR0aCgpLCB0ZXh0SW5kZW50T2Zmc2V0KCkpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCmluZGV4IDU2ODIwY2Q4OGFhYS4uNWU4MTBhM2IyYzMy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtNDg0LDcgKzQ4NCw3
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHBhaW50Q29udGludWF0aW9uT3V0bGluZXMoUGFpbnRJ
bmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIAotICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJl
Y3QoSW5saW5lQm94KiwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lk
dGhUb0VuZE9mTGluZSA9IDApIGZpbmFsOworICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3Qo
Y29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZM
aW5lID0gbnVsbHB0cikgY29uc3QgZmluYWw7CiAgICAgCiAgICAgLy8gRklYTUUtQkxPQ0tGTE9X
OiBSZW1vdmUgdmlydHVhbGl6YWlvbiB3aGVuIGFsbCBjYWxsZXJzIGhhdmUgbW92ZWQgdG8gUmVu
ZGVyQmxvY2tGbG93CiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2lu
dFdpdGhJbmxpbmVDaGlsZHJlbihjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlckZyYWdt
ZW50Q29udGFpbmVyKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4
IDYzOTUyZDBlYTE4OC4uOTAxNWJmMjk0Y2E0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcApAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1l
bnQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5saW5lRWxlbWVu
dEJveC5oIgorI2luY2x1ZGUgIklubGluZVJ1bkFuZE9mZnNldC5oIgogI2luY2x1ZGUgIkxheW91
dEludGVncmF0aW9uTGluZUxheW91dC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQ
YWludEluZm8uaCIKQEAgLTQ0MjksNyArNDQzMCw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRl
UG9zaXRpb25lZExvZ2ljYWxIZWlnaHRSZXBsYWNlZChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1
CiAgICAgY29tcHV0ZWRWYWx1ZXMubV9wb3NpdGlvbiA9IGxvZ2ljYWxUb3BQb3M7CiB9CiAKLUxh
eW91dFJlY3QgUmVuZGVyQm94Ojpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGJveCwgdW5zaWdu
ZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKK0xheW91
dFJlY3QgUmVuZGVyQm94Ojpsb2NhbENhcmV0UmVjdChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQm
IHJ1bkFuZE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBjb25zdAog
ewogICAgIC8vIFZpc2libGVQb3NpdGlvbnMgYXQgb2Zmc2V0cyBpbnNpZGUgY29udGFpbmVycyBl
aXRoZXIgYSkgcmVmZXIgdG8gdGhlIHBvc2l0aW9ucyBiZWZvcmUvYWZ0ZXIKICAgICAvLyB0aG9z
ZSBjb250YWluZXJzICh0YWJsZXMgYW5kIHNlbGVjdCBlbGVtZW50cykgb3IgYikgcmVmZXIgdG8g
dGhlIHBvc2l0aW9uIGluc2lkZSBhbiBlbXB0eSBibG9jay4KQEAgLTQ0MzcsMTYgKzQ0MzgsMTYg
QEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogYm94LCB1
bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3UKICAgICAvLyBGSVhNRTogUGFpbnQgdGhlIGNhcmV0
cyBpbnNpZGUgZW1wdHkgYmxvY2tzIGRpZmZlcmVudGx5IHRoYW4gdGhlIGNhcmV0cyBiZWZvcmUv
YWZ0ZXIgZWxlbWVudHMuCiAKICAgICBMYXlvdXRSZWN0IHJlY3QobG9jYXRpb24oKSwgTGF5b3V0
U2l6ZShjYXJldFdpZHRoLCBoZWlnaHQoKSkpOwotICAgIGJvb2wgbHRyID0gYm94ID8gYm94LT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgOiBzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KTsKKyAgICBib29sIGx0ciA9IHJ1bkFuZE9mZnNldC5ydW4gPyBydW5BbmRPZmZzZXQucnVuLT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgOiBzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KTsKIAotICAgIGlmICgoIWNhcmV0T2Zmc2V0KSBeIGx0cikKKyAgICBpZiAoKCFydW5BbmRPZmZz
ZXQub2Zmc2V0KSBeIGx0cikKICAgICAgICAgcmVjdC5tb3ZlKExheW91dFNpemUod2lkdGgoKSAt
IGNhcmV0V2lkdGgsIDBfbHUpKTsKIAotICAgIGlmIChib3gpIHsKLSAgICAgICAgY29uc3QgUm9v
dElubGluZUJveCYgcm9vdEJveCA9IGJveC0+cm9vdCgpOwotICAgICAgICBMYXlvdXRVbml0IHRv
cCA9IHJvb3RCb3gubGluZVRvcCgpOworICAgIGlmIChydW5BbmRPZmZzZXQucnVuKSB7CisgICAg
ICAgIGF1dG8gbGluZSA9IHJ1bkFuZE9mZnNldC5ydW4ubGluZSgpOworICAgICAgICBMYXlvdXRV
bml0IHRvcCA9IGxpbmUtPnRvcCgpOwogICAgICAgICByZWN0LnNldFkodG9wKTsKLSAgICAgICAg
cmVjdC5zZXRIZWlnaHQocm9vdEJveC5saW5lQm90dG9tKCkgLSB0b3ApOworICAgICAgICByZWN0
LnNldEhlaWdodChsaW5lLT5ib3R0b20oKSAtIHRvcCk7CiAgICAgfQogCiAgICAgLy8gSWYgaGVp
Z2h0IG9mIGJveCBpcyBzbWFsbGVyIHRoYW4gZm9udCBoZWlnaHQsIHVzZSB0aGUgbGF0dGVyIG9u
ZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAppbmRleCBlMDgxNDVkOGUwZTkuLmRk
YjE2MDhmYWZkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAtNDk4LDcg
KzQ5OCw3IEBAIG92ZXJyaWRlOwogCiAgICAgYm9vbCBzaG91bGRUcmVhdENoaWxkQXNSZXBsYWNl
ZEluVGFibGVDZWxscygpIGNvbnN0OwogICAgIAotICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJl
Y3QoSW5saW5lQm94KiwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lk
dGhUb0VuZE9mTGluZSA9IG51bGxwdHIpIG92ZXJyaWRlOworICAgIExheW91dFJlY3QgbG9jYWxD
YXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiwgTGF5b3V0VW5pdCogZXh0cmFXaWR0
aFRvRW5kT2ZMaW5lID0gbnVsbHB0cikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIExh
eW91dFJlY3Qgb3ZlcmZsb3dDbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJl
bmRlckZyYWdtZW50Q29udGFpbmVyKiA9IG51bGxwdHIsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVs
ZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIFBhaW50UGhhc2UgPSBQYWludFBo
YXNlOjpCbG9ja0JhY2tncm91bmQpIGNvbnN0OwogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdmVy
Zmxvd0NsaXBSZWN0Rm9yQ2hpbGRMYXllcnMoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBS
ZW5kZXJGcmFnbWVudENvbnRhaW5lciogZnJhZ21lbnQsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVs
ZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QgeyByZXR1cm4gb3ZlcmZsb3dDbGlwUmVjdChsb2NhdGlv
biwgZnJhZ21lbnQsIHJlbGV2YW5jeSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IGM1ODBlNTNkZmQzOC4uZDlhNzVjOWVh
MTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9i
amVjdC5jcHAKQEAgLTI2MjYsNyArMjYyNiw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6
OmNsZWFyRmlyc3RMZXR0ZXJSZW1haW5pbmdUZXh0KCkKICAgICBmaXJzdExldHRlclJlbWFpbmlu
Z1RleHRNYXAoKS5yZW1vdmUodGhpcyk7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyQm94TW9kZWxP
YmplY3Q6OmxvY2FsQ2FyZXRSZWN0Rm9yRW1wdHlFbGVtZW50KExheW91dFVuaXQgd2lkdGgsIExh
eW91dFVuaXQgdGV4dEluZGVudE9mZnNldCkKK0xheW91dFJlY3QgUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OmxvY2FsQ2FyZXRSZWN0Rm9yRW1wdHlFbGVtZW50KExheW91dFVuaXQgd2lkdGgsIExheW91
dFVuaXQgdGV4dEluZGVudE9mZnNldCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWZpcnN0Q2hpbGQo
KSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2Rl
bE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmgKaW5kZXggODQ3ZWYzMWYyNmJmLi5lY2E2ZDU4Njg1ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCkBAIC0yNjAsNyArMjYwLDcgQEAg
cHJvdGVjdGVkOgogCiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgY2hvb3NlSW50ZXJwb2xhdGlv
blF1YWxpdHkoR3JhcGhpY3NDb250ZXh0JiwgSW1hZ2UmLCBjb25zdCB2b2lkKiwgY29uc3QgTGF5
b3V0U2l6ZSYpOwogCi0gICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdEZvckVtcHR5RWxlbWVu
dChMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IHRleHRJbmRlbnRPZmZzZXQpOworICAgIExh
eW91dFJlY3QgbG9jYWxDYXJldFJlY3RGb3JFbXB0eUVsZW1lbnQoTGF5b3V0VW5pdCB3aWR0aCwg
TGF5b3V0VW5pdCB0ZXh0SW5kZW50T2Zmc2V0KSBjb25zdDsKIAogICAgIHN0YXRpYyBib29sIHNo
b3VsZEFudGlhbGlhc0xpbmVzKEdyYXBoaWNzQ29udGV4dCYpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCmluZGV4IGFkYTRmNzMzODVjZS4uZjc4ZWM3ZGNmODAx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcApAQCAtMjI4LDcg
KzIyOCw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjp1cGRhdGVBbHdheXNDcmVhdGVMaW5lQm94ZXMo
Ym9vbCBmdWxsTGF5b3V0KQogICAgIH0KIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJJbmxpbmU6Omxv
Y2FsQ2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCB1bnNpZ25lZCwgTGF5b3V0VW5pdCog
ZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQorTGF5b3V0UmVjdCBSZW5kZXJJbmxpbmU6OmxvY2FsQ2Fy
ZXRSZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYsIExheW91dFVuaXQqIGV4dHJhV2lkdGhU
b0VuZE9mTGluZSkgY29uc3QKIHsKICAgICBpZiAoZmlyc3RDaGlsZCgpKSB7CiAgICAgICAgIC8v
IFRoaXMgY29uZGl0aW9uIGlzIHBvc3NpYmxlIGlmIHRoZSBSZW5kZXJJbmxpbmUgaXMgYXQgYW4g
ZWRpdGluZyBib3VuZGFyeSwKQEAgLTIzOSw4ICsyMzksNiBAQCBMYXlvdXRSZWN0IFJlbmRlcklu
bGluZTo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxpbmVCb3gsIHVuc2lnbmVkLCBMYXlv
dXRVbgogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogICAgIH0KIAotICAgIEFTU0VSVF9V
TlVTRUQoaW5saW5lQm94LCAhaW5saW5lQm94KTsKLQogICAgIGlmIChleHRyYVdpZHRoVG9FbmRP
ZkxpbmUpCiAgICAgICAgICpleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKaW5kZXggNDQ4YjNhMDVkNTUyLi5lYTU1MGMyOTVi
OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKQEAgLTg2LDcgKzg2
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0QWx3YXlzQ3JlYXRlTGluZUJveGVzKCkgeyBzZXRS
ZW5kZXJJbmxpbmVBbHdheXNDcmVhdGVzTGluZUJveGVzKHRydWUpOyB9CiAgICAgdm9pZCB1cGRh
dGVBbHdheXNDcmVhdGVMaW5lQm94ZXMoYm9vbCBmdWxsTGF5b3V0KTsKIAotICAgIExheW91dFJl
Y3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiwgdW5zaWduZWQsIExheW91dFVuaXQqIGV4dHJh
V2lkdGhUb0VuZE9mTGluZSkgZmluYWw7CisgICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChj
b25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmLCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxp
bmUpIGNvbnN0IGZpbmFsOwogCiAgICAgYm9vbCBoaXRUZXN0Q3VsbGVkSW5saW5lKGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9j
YXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcAppbmRleCAz
MGVjYzUzNDliYTQuLjQxYTQ5MzE4MjUzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpbmVCcmVhay5jcHAKQEAgLTI3LDYgKzI3LDggQEAKICNpbmNsdWRlICJIVE1MRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxXQlJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5saW5lRWxl
bWVudEJveC5oIgorI2luY2x1ZGUgIklubGluZVJ1bkFuZE9mZnNldC5oIgorI2luY2x1ZGUgIkxh
eW91dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRp
b25SdW5JdGVyYXRvci5oIgogI2luY2x1ZGUgIkxvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMu
aCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgpAQCAtMTU2LDI0ICsxNTgsMjUgQEAgdm9pZCBS
ZW5kZXJMaW5lQnJlYWs6OnNldFNlbGVjdGlvblN0YXRlKEhpZ2hsaWdodFN0YXRlIHN0YXRlKQog
ICAgIG1faW5saW5lQm94V3JhcHBlci0+cm9vdCgpLnNldEhhc1NlbGVjdGVkQ2hpbGRyZW4oc3Rh
dGUgIT0gSGlnaGxpZ2h0U3RhdGU6Ok5vbmUpOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckxpbmVC
cmVhazo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxpbmVCb3gsIHVuc2lnbmVkIGNhcmV0
T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCitMYXlvdXRSZWN0IFJl
bmRlckxpbmVCcmVhazo6bG9jYWxDYXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiBy
dW5BbmRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkgY29uc3QKIHsK
LSAgICBBU1NFUlRfVU5VU0VEKGNhcmV0T2Zmc2V0LCAhY2FyZXRPZmZzZXQpOwotICAgIEFTU0VS
VF9VTlVTRUQoaW5saW5lQm94LCBpbmxpbmVCb3ggPT0gbV9pbmxpbmVCb3hXcmFwcGVyKTsKLSAg
ICBpZiAoIWlubGluZUJveCkKKyAgICBBU1NFUlQoIXJ1bkFuZE9mZnNldC5vZmZzZXQpOworICAg
IEFTU0VSVChydW5BbmRPZmZzZXQucnVuID09IExheW91dEludGVncmF0aW9uOjpydW5Gb3IoKnRo
aXMpKTsKKworICAgIGlmICghcnVuQW5kT2Zmc2V0LnJ1bikKICAgICAgICAgcmV0dXJuIExheW91
dFJlY3QoKTsKIAotICAgIGNvbnN0IFJvb3RJbmxpbmVCb3gmIHJvb3RCb3ggPSBpbmxpbmVCb3gt
PnJvb3QoKTsKLSAgICByZXR1cm4gcm9vdEJveC5jb21wdXRlQ2FyZXRSZWN0KGlubGluZUJveC0+
bG9naWNhbExlZnQoKSwgY2FyZXRXaWR0aCwgZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKTsKKyAgICBh
dXRvIGxpbmUgPSBydW5BbmRPZmZzZXQucnVuLmxpbmUoKTsKKyAgICByZXR1cm4gbGluZS0+Y29t
cHV0ZUNhcmV0UmVjdChsaW5lLT5sb2dpY2FsTGVmdCgpLCBjYXJldFdpZHRoLCBleHRyYVdpZHRo
VG9FbmRPZkxpbmUpOwogfQogCiBJbnRSZWN0IFJlbmRlckxpbmVCcmVhazo6bGluZXNCb3VuZGlu
Z0JveCgpIGNvbnN0CiB7Ci0gICAgYXV0byBib3ggPSBMYXlvdXRJbnRlZ3JhdGlvbjo6cnVuRm9y
KCp0aGlzKTsKLSAgICBpZiAoIWJveCkKKyAgICBhdXRvIHJ1biA9IExheW91dEludGVncmF0aW9u
OjpydW5Gb3IoKnRoaXMpOworICAgIGlmICghcnVuKQogICAgICAgICByZXR1cm4geyB9OwogCi0g
ICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoYm94LT5yZWN0KCkpOworICAgIHJldHVybiBlbmNs
b3NpbmdJbnRSZWN0KHJ1bi0+cmVjdCgpKTsKIH0KIAogdm9pZCBSZW5kZXJMaW5lQnJlYWs6OmFi
c29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0KSBjb25zdApAQCAtMjA5LDcgKzIxMiw5IEBAIHZvaWQgUmVuZGVyTGlu
ZUJyZWFrOjpjb2xsZWN0U2VsZWN0aW9uUmVjdHMoVmVjdG9yPFNlbGVjdGlvblJlY3Q+JiByZWN0
cywgdW5zaWduCiAgICAgaWYgKCFib3gpCiAgICAgICAgIHJldHVybjsKICAgICBjb25zdCBSb290
SW5saW5lQm94JiByb290Qm94ID0gYm94LT5yb290KCk7Ci0gICAgTGF5b3V0UmVjdCByZWN0ID0g
cm9vdEJveC5jb21wdXRlQ2FyZXRSZWN0KGJveC0+bG9naWNhbExlZnQoKSwgMCwgbnVsbHB0cik7
CisKKyAgICBMYXlvdXRSZWN0IHJlY3QgPSBMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUl0ZXJhdG9y
KCZyb290Qm94KS0+Y29tcHV0ZUNhcmV0UmVjdChib3gtPmxvZ2ljYWxMZWZ0KCksIDAsIG51bGxw
dHIpOworCiAgICAgaWYgKHJvb3RCb3guaXNGaXJzdEFmdGVyUGFnZUJyZWFrKCkpIHsKICAgICAg
ICAgaWYgKGJveC0+aXNIb3Jpem9udGFsKCkpCiAgICAgICAgICAgICByZWN0LnNoaWZ0WUVkZ2VU
byhyb290Qm94LmxpbmVCb3hUb3AoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGluZUJyZWFrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGluZUJyZWFrLmgKaW5kZXggZmVkMTQ4MzJkYzQ4Li40MDQzMmFjZTdjOTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmgKQEAgLTY2LDcgKzY2LDcgQEAgcHJp
dmF0ZToKICAgICBpbnQgY2FyZXRNaW5PZmZzZXQoKSBjb25zdCBmaW5hbDsKICAgICBpbnQgY2Fy
ZXRNYXhPZmZzZXQoKSBjb25zdCBmaW5hbDsKICAgICBib29sIGNhbkJlU2VsZWN0aW9uTGVhZigp
IGNvbnN0IGZpbmFsOwotICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94Kiwg
dW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkg
ZmluYWw7CisgICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChjb25zdCBJbmxpbmVSdW5BbmRP
ZmZzZXQmLCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpIGNvbnN0IGZpbmFsOwog
ICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUpIGZpbmFsOwogCiAgICAg
TGF5b3V0VW5pdCBsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwg
TGluZVBvc2l0aW9uTW9kZSkgY29uc3QgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCmluZGV4IDg4YTE3YzUwMGUyMC4uYTVkOGMzZDJjMjFlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMTQwMCw3ICsxNDAwLDcg
QEAgTGF5b3V0U2l6ZSBSZW5kZXJPYmplY3Q6Om9mZnNldEZyb21BbmNlc3RvckNvbnRhaW5lcihS
ZW5kZXJFbGVtZW50JiBjb250YWluZXIpIGMKICAgICByZXR1cm4gb2Zmc2V0OwogfQogCi1MYXlv
dXRSZWN0IFJlbmRlck9iamVjdDo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiwgdW5zaWduZWQs
IExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKK0xheW91dFJlY3QgUmVuZGVyT2Jq
ZWN0Ojpsb2NhbENhcmV0UmVjdChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmLCBMYXlvdXRVbml0
KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpIGNvbnN0CiB7CiAgICAgaWYgKGV4dHJhV2lkdGhUb0Vu
ZE9mTGluZSkKICAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IDA7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggZjdkMjBjOTI4NmFiLi41YzBiMTM2OWU0
NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTc1LDYgKzc1
LDcgQEAgY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogY2xhc3MgU2VsZWN0aW9uUmVjdDsKICNlbmRp
ZgogCitzdHJ1Y3QgSW5saW5lUnVuQW5kT2Zmc2V0Owogc3RydWN0IFBhaW50SW5mbzsKIHN0cnVj
dCBTaW1wbGVSYW5nZTsKIApAQCAtNjcyLDEzICs2NzMsOCBAQCBwdWJsaWM6CiAgICAgLy8gV2hl
dGhlciBvciBub3QgYSBnaXZlbiBibG9jayBuZWVkcyB0byBwYWludCBzZWxlY3Rpb24gZ2Fwcy4K
ICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUGFpbnRTZWxlY3Rpb25HYXBzKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KIAotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGxvY2FsIGNvb3JkaW5h
dGVzIG9mIHRoZSBjYXJldCB3aXRoaW4gdGhpcyByZW5kZXIgb2JqZWN0LgotICAgICAqIEBwYXJh
bSBjYXJldE9mZnNldCB6ZXJvLWJhc2VkIG9mZnNldCBkZXRlcm1pbmluZyBwb3NpdGlvbiB3aXRo
aW4gdGhlIHJlbmRlciBvYmplY3QuCi0gICAgICogQHBhcmFtIGV4dHJhV2lkdGhUb0VuZE9mTGlu
ZSBvcHRpb25hbCBvdXQgYXJnIHRvIGdpdmUgZXh0cmEgd2lkdGggdG8gZW5kIG9mIGxpbmUgLQot
ICAgICAqIHVzZWZ1bCBmb3IgY2hhcmFjdGVyIHJhbmdlIHJlY3QgY29tcHV0YXRpb25zCi0gICAg
ICovCi0gICAgdmlydHVhbCBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIHVu
c2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSBu
dWxscHRyKTsKKyAgICAvLyBSZXR1cm5zIHRoZSBsb2NhbCBjb29yZGluYXRlcyBvZiB0aGUgY2Fy
ZXQgd2l0aGluIHRoaXMgcmVuZGVyIG9iamVjdC4KKyAgICB2aXJ0dWFsIExheW91dFJlY3QgbG9j
YWxDYXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiwgTGF5b3V0VW5pdCogZXh0cmFX
aWR0aFRvRW5kT2ZMaW5lID0gbnVsbHB0cikgY29uc3Q7CiAKICAgICAvLyBXaGVuIHBlcmZvcm1p
bmcgYSBnbG9iYWwgZG9jdW1lbnQgdGVhci1kb3duLCBvciB3aGVuIGdvaW5nIGludG8gdGhlIGJh
Y2svZm9yd2FyZCBjYWNoZSwgdGhlIHJlbmRlcmVyIG9mIHRoZSBkb2N1bWVudCBpcyBjbGVhcmVk
LgogICAgIGJvb2wgcmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkgY29uc3Q7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKaW5kZXggNTM5MDY1ZWUwOGI5Li4zMGRmNmE0Y2Y0
Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKQEAgLTM2LDYgKzM2
LDcgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21z
LmgiCiAjaW5jbHVkZSAiSHlwaGVuYXRpb24uaCIKKyNpbmNsdWRlICJJbmxpbmVSdW5BbmRPZmZz
ZXQuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiTGF5b3V0SW50ZWdy
YXRpb25MaW5lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlv
dXQuaCIKQEAgLTcxMCwxNCArNzExLDE1IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJUZXh0Ojpw
b3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgY29uc3QgUmVuCiAgICAg
cmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbigwLCBBZmZpbml0eTo6RG93bnN0cmVhbSk7CiB9
CiAKLUxheW91dFJlY3QgUmVuZGVyVGV4dDo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxp
bmVCb3gsIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRP
ZkxpbmUpCitMYXlvdXRSZWN0IFJlbmRlclRleHQ6OmxvY2FsQ2FyZXRSZWN0KGNvbnN0IElubGlu
ZVJ1bkFuZE9mZnNldCYgcnVuQW5kT2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRP
ZkxpbmUpIGNvbnN0CiB7Ci0gICAgaWYgKCFpbmxpbmVCb3gpCisgICAgaWYgKCFydW5BbmRPZmZz
ZXQucnVuKQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCi0gICAgYXV0byYgYm94ID0g
ZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oKmlubGluZUJveCk7Ci0gICAgZmxvYXQgbGVmdCA9IGJv
eC5wb3NpdGlvbkZvck9mZnNldChjYXJldE9mZnNldCk7Ci0gICAgcmV0dXJuIGJveC5yb290KCku
Y29tcHV0ZUNhcmV0UmVjdChsZWZ0LCBjYXJldFdpZHRoLCBleHRyYVdpZHRoVG9FbmRPZkxpbmUp
OworICAgIGF1dG8mIHRleHRSdW4gPSBkb3duY2FzdDxMYXlvdXRJbnRlZ3JhdGlvbjo6VGV4dFJ1
bkl0ZXJhdG9yPihydW5BbmRPZmZzZXQucnVuKTsKKworICAgIGZsb2F0IGxlZnQgPSB0ZXh0UnVu
LT5wb3NpdGlvbkZvck9mZnNldChydW5BbmRPZmZzZXQub2Zmc2V0KTsKKyAgICByZXR1cm4gdGV4
dFJ1bi5saW5lKCktPmNvbXB1dGVDYXJldFJlY3QobGVmdCwgY2FyZXRXaWR0aCwgZXh0cmFXaWR0
aFRvRW5kT2ZMaW5lKTsKIH0KIAogQUxXQVlTX0lOTElORSBmbG9hdCBSZW5kZXJUZXh0Ojp3aWR0
aEZyb21DYWNoZShjb25zdCBGb250Q2FzY2FkZSYgZiwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVk
IGxlbiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMsIEds
eXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3csIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCmluZGV4IDUyODgwOTM0Y2NiNC4u
YWU4NWFkMjQyYTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKQEAgLTIw
NSw3ICsyMDUsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShIaWdo
bGlnaHRTdGF0ZSkgZmluYWw7CiAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yUmVwYWlu
dChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGNs
aXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgZmluYWw7Ci0gICAgTGF5b3V0UmVjdCBsb2NhbENh
cmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0
cmFXaWR0aFRvRW5kT2ZMaW5lID0gbnVsbHB0cikgb3ZlcnJpZGU7CisgICAgTGF5b3V0UmVjdCBs
b2NhbENhcmV0UmVjdChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmLCBMYXlvdXRVbml0KiBleHRy
YVdpZHRoVG9FbmRPZkxpbmUgPSBudWxscHRyKSBjb25zdCBvdmVycmlkZTsKICAgICBMYXlvdXRS
ZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIpIGNvbnN0IGZpbmFsOwogCiAgICAgdm9pZCBjb21wdXRl
UHJlZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkV2lkdGgsIEhhc2hTZXQ8Y29uc3QgRm9u
dCo+JiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUm9vdElubGluZUJveC5jcHAKaW5kZXggMWI1MDdlY2RjYTYyLi4xZDVkMzg2ZmIzNjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKQEAgLTQ3NCw1
OSArNDc0LDYgQEAgR2FwUmVjdHMgUm9vdElubGluZUJveDo6bGluZVNlbGVjdGlvbkdhcChSZW5k
ZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2kKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1JbnRSZWN0IFJvb3RJbmxpbmVCb3g6OmNvbXB1dGVDYXJldFJlY3QoZmxvYXQgbG9naWNh
bExlZnRQb3NpdGlvbiwgdW5zaWduZWQgY2FyZXRXaWR0aCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0
aFRvRW5kT2ZMaW5lKSBjb25zdAotewotICAgIGludCBoZWlnaHQgPSBzZWxlY3Rpb25IZWlnaHQo
KTsKLSAgICBpbnQgdG9wID0gc2VsZWN0aW9uVG9wKCk7Ci0KLSAgICAvLyBEaXN0cmlidXRlIHRo
ZSBjYXJldCdzIHdpZHRoIHRvIGVpdGhlciBzaWRlIG9mIHRoZSBvZmZzZXQuCi0gICAgZmxvYXQg
bGVmdCA9IGxvZ2ljYWxMZWZ0UG9zaXRpb247Ci0gICAgaW50IGNhcmV0V2lkdGhMZWZ0T2ZPZmZz
ZXQgPSBjYXJldFdpZHRoIC8gMjsKLSAgICBsZWZ0IC09IGNhcmV0V2lkdGhMZWZ0T2ZPZmZzZXQ7
Ci0gICAgaW50IGNhcmV0V2lkdGhSaWdodE9mT2Zmc2V0ID0gY2FyZXRXaWR0aCAtIGNhcmV0V2lk
dGhMZWZ0T2ZPZmZzZXQ7Ci0gICAgbGVmdCA9IHJvdW5kZihsZWZ0KTsKLQotICAgIGZsb2F0IHJv
b3RMZWZ0ID0gbG9naWNhbExlZnQoKTsKLSAgICBmbG9hdCByb290UmlnaHQgPSBsb2dpY2FsUmln
aHQoKTsKLQotICAgIGlmIChleHRyYVdpZHRoVG9FbmRPZkxpbmUpCi0gICAgICAgICpleHRyYVdp
ZHRoVG9FbmRPZkxpbmUgPSAobG9naWNhbFdpZHRoKCkgKyByb290TGVmdCkgLSAobGVmdCArIGNh
cmV0V2lkdGgpOwotCi0gICAgY29uc3QgUmVuZGVyU3R5bGUmIGJsb2NrU3R5bGUgPSBibG9ja0Zs
b3coKS5zdHlsZSgpOwotCi0gICAgYm9vbCByaWdodEFsaWduZWQgPSBmYWxzZTsKLSAgICBzd2l0
Y2ggKGJsb2NrU3R5bGUudGV4dEFsaWduKCkpIHsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlJp
Z2h0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQ6Ci0gICAgICAgIHJpZ2h0
QWxpZ25lZCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6
TGVmdDoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdExlZnQ6Ci0gICAgY2FzZSBUZXh0
QWxpZ25Nb2RlOjpDZW50ZXI6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXI6
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6SnVzdGlmeToKLSAgICBj
YXNlIFRleHRBbGlnbk1vZGU6OlN0YXJ0OgotICAgICAgICByaWdodEFsaWduZWQgPSAhYmxvY2tT
dHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
VGV4dEFsaWduTW9kZTo6RW5kOgotICAgICAgICByaWdodEFsaWduZWQgPSBibG9ja1N0eWxlLmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZmxv
YXQgbGVmdEVkZ2UgPSBzdGQ6Om1pbjxmbG9hdD4oMCwgcm9vdExlZnQpOwotICAgIGZsb2F0IHJp
Z2h0RWRnZSA9IHN0ZDo6bWF4PGZsb2F0PihibG9ja0Zsb3coKS5sb2dpY2FsV2lkdGgoKSwgcm9v
dFJpZ2h0KTsKLQotICAgIGlmIChyaWdodEFsaWduZWQpIHsKLSAgICAgICAgbGVmdCA9IHN0ZDo6
bWF4KGxlZnQsIGxlZnRFZGdlKTsKLSAgICAgICAgbGVmdCA9IHN0ZDo6bWluKGxlZnQsIHJvb3RS
aWdodCAtIGNhcmV0V2lkdGgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGxlZnQgPSBzdGQ6Om1p
bihsZWZ0LCByaWdodEVkZ2UgLSBjYXJldFdpZHRoUmlnaHRPZk9mZnNldCk7Ci0gICAgICAgIGxl
ZnQgPSBzdGQ6Om1heChsZWZ0LCByb290TGVmdCk7Ci0gICAgfQotICAgIHJldHVybiBibG9ja1N0
eWxlLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBJbnRSZWN0KGxlZnQsIHRvcCwgY2FyZXRX
aWR0aCwgaGVpZ2h0KSA6IEludFJlY3QodG9wLCBsZWZ0LCBoZWlnaHQsIGNhcmV0V2lkdGgpOwot
fQotCiBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIFJvb3RJbmxpbmVCb3g6OnNlbGVjdGlv
blN0YXRlKCkKIHsKICAgICAvLyBXYWxrIG92ZXIgYWxsIG9mIHRoZSBzZWxlY3RlZCBib3hlcy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5oCmluZGV4IGU0ODI5MmY3YWMz
Yi4uNzAwOTMwYWM0NzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9v
dElubGluZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94
LmgKQEAgLTEzMiw4ICsxMzIsNiBAQCBwdWJsaWM6CiAgICAgR2FwUmVjdHMgbGluZVNlbGVjdGlv
bkdhcChSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2ludCYgcm9vdEJsb2Nr
UGh5c2ljYWxQb3NpdGlvbiwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jaywK
ICAgICAgICAgTGF5b3V0VW5pdCBzZWxUb3AsIExheW91dFVuaXQgc2VsSGVpZ2h0LCBjb25zdCBM
b2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzJiwgY29uc3QgUGFpbnRJbmZvKik7CiAKLSAgICBJ
bnRSZWN0IGNvbXB1dGVDYXJldFJlY3QoZmxvYXQgbG9naWNhbExlZnRQb3NpdGlvbiwgdW5zaWdu
ZWQgY2FyZXRXaWR0aCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBjb25zdDsK
LQogICAgIHVzaW5nIENsZWFuTGluZUZsb2F0TGlzdCA9IFZlY3RvcjxXZWFrUHRyPFJlbmRlckJv
eD4+OwogICAgIHZvaWQgYXBwZW5kRmxvYXQoUmVuZGVyQm94JiBmbG9hdGluZ0JveCkKICAgICB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGlu
ZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVU
ZXh0LmNwcAppbmRleCA0NTU1Nzc2MTgwZTEuLmJmM2Y3MTViMGY3NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCkBAIC0y
Nyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRmxv
YXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiSW5saW5l
UnVuQW5kT2Zmc2V0LmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgpAQCAtMTE1LDExICsxMTYs
MTQgQEAgc3RkOjp1bmlxdWVfcHRyPElubGluZVRleHRCb3g+IFJlbmRlclNWR0lubGluZVRleHQ6
OmNyZWF0ZVRleHRCb3goKQogewogICAgIGF1dG8gYm94ID0gbWFrZVVuaXF1ZTxTVkdJbmxpbmVU
ZXh0Qm94PigqdGhpcyk7CiAgICAgYm94LT5zZXRIYXNWaXJ0dWFsTG9naWNhbEhlaWdodCgpOwot
ICAgIHJldHVybiBib3g7CisgICAgcmV0dXJuIGJveDsgCiB9CiAKLUxheW91dFJlY3QgUmVuZGVy
U1ZHSW5saW5lVGV4dDo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBib3gsIHVuc2lnbmVkIGNh
cmV0T2Zmc2V0LCBMYXlvdXRVbml0KikKK0xheW91dFJlY3QgUmVuZGVyU1ZHSW5saW5lVGV4dDo6
bG9jYWxDYXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiBydW5BbmRPZmZzZXQsIExh
eW91dFVuaXQqKSBjb25zdAogeworICAgIGF1dG8qIGJveCA9IHJ1bkFuZE9mZnNldC5ydW4gPyBy
dW5BbmRPZmZzZXQucnVuLT5sZWdhY3lJbmxpbmVCb3goKSA6IG51bGxwdHI7CisgICAgYXV0byBj
YXJldE9mZnNldCA9IHJ1bkFuZE9mZnNldC5vZmZzZXQ7CisKICAgICBpZiAoIWlzPElubGluZVRl
eHRCb3g+KGJveCkpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmgKaW5kZXggZmY0
NjNiOGIwOTY5Li5kYzI3MjA5OWQwMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCkBAIC02Miw3ICs2Miw3IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBpc1NWR0lubGluZVRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CiAKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQ
b2ludCYsIGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKikgb3ZlcnJpZGU7Ci0gICAgTGF5
b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJldE9mZnNldCwg
TGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCkgb3ZlcnJpZGU7CisgICAgTGF5
b3V0UmVjdCBsb2NhbENhcmV0UmVjdChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmLCBMYXlvdXRV
bml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSBudWxscHRyKSBjb25zdCBvdmVycmlkZTsKICAg
ICBJbnRSZWN0IGxpbmVzQm91bmRpbmdCb3goKSBjb25zdCBvdmVycmlkZTsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW5saW5lVGV4dEJveD4gY3JlYXRlVGV4dEJveCgpIG92ZXJyaWRlOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413427</attachid>
            <date>2020-11-06 05:56:32 -0800</date>
            <delta_ts>2020-11-06 06:33:17 -0800</delta_ts>
            <desc>patch</desc>
            <filename>lfc-localCaretOffset-5.patch</filename>
            <type>text/plain</type>
            <size>39132</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4YzQ5M2QwM2ZmNGEuLmQyZWNkZmM4YWY0YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDc2IEBACisyMDIwLTExLTA1ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gbG9jYWxDYXJldE9mZnNldCBzaG91bGQg
dXNlIGl0ZXJhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTg2MjAKKworICAgICAgICBSZXZpZXdlZCBieSBaYWxhbiBCdWp0YXMuCisKKyAgICAg
ICAgQ29udmVydCBhbGwgbG9jYWxDYXJldFJlY3QgaW1wbGVtZW50YXRpb25zIHRvIHVzZSB0aGUg
aW5saW5lIGl0ZXJhdG9yLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmxvY2FsQ2FyZXRSZWN0Rm9y
Q2hhcmFjdGVyT2Zmc2V0KToKKyAgICAgICAgKiBlZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyZWRQb3NpdGlvbjo6YWJzb2x1dGVSZWN0IGNvbnN0
KToKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWaXNpYmxlUG9zaXRpb246OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KToKKyAgICAgICAgKiBs
YXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlBhdGhMaW5lOjpjb21wdXRlQ2FyZXRS
ZWN0IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRp
b25MaW5lSXRlcmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpQ
YXRoTGluZTo6bG9naWNhbExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50
ZWdyYXRpb246OlBhdGhMaW5lOjpsb2dpY2FsUmlnaHQgY29uc3QpOgorICAgICAgICAqIGxheW91
dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvckxlZ2FjeVBhdGguaDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpMaW5lSXRlcmF0b3JMZWdhY3lQ
YXRoOjpsb2dpY2FsTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3Jh
dGlvbjo6TGluZUl0ZXJhdG9yTGVnYWN5UGF0aDo6bG9naWNhbFJpZ2h0IGNvbnN0KToKKyAgICAg
ICAgKiBsYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rl
cm5QYXRoLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUl0ZXJh
dG9yTW9kZXJuUGF0aDo6bG9naWNhbExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0SW50ZWdyYXRpb246OkxpbmVJdGVyYXRvck1vZGVyblBhdGg6OmxvZ2ljYWxSaWdodCBjb25z
dCk6CisgICAgICAgICogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRl
cmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0aW9uOjpQYXRoVGV4dFJ1
bjo6cG9zaXRpb25Gb3JPZmZzZXQgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlv
bi9MYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yTGVnYWN5UGF0aC5oOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yTGVnYWN5UGF0aDo6b2Zmc2V0Rm9y
UG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlJ1
bkl0ZXJhdG9yTGVnYWN5UGF0aDo6cG9zaXRpb25Gb3JPZmZzZXQgY29uc3QpOgorICAgICAgICAq
IGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yTW9kZXJuUGF0
aC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yTW9k
ZXJuUGF0aDo6cG9zaXRpb25Gb3JPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0SW50ZWdyYXRpb246OlJ1bkl0ZXJhdG9yTW9kZXJuUGF0aDo6c2VsZWN0aW9uUmVjdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6UnVuSXRlcmF0b3JNb2Rl
cm5QYXRoOjpjbGFtcGVkT2Zmc2V0IGNvbnN0KToKKworICAgICAgICBNYWtlIGNsYW1wZWRPZmZz
ZXQgcmV0dXJuIDAgYmFzZWQgb2Zmc2V0IGxpa2UgaXQgZG9lcyBpbiBJbmxpbmVUZXh0Qm94IHRv
IG1ha2UgcG9ydGluZyBlYXNpZXIuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2NhbENhcmV0UmVjdCk6IERlbGV0
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmxvY2FsQ2Fy
ZXRSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9jYWxDYXJldFJl
Y3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94TW9kZWxPYmplY3Q6OmxvY2FsQ2FyZXRSZWN0Rm9yRW1wdHlFbGVtZW50IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpsb2NhbENhcmV0UmVj
dEZvckVtcHR5RWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6bG9jYWxDYXJldFJlY3QpOiBEZWxldGVkLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGluZUJyZWFrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVCcmVhazo6
bG9jYWxDYXJldFJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGluZUJyZWFr
OjpsaW5lc0JvdW5kaW5nQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVC
cmVhazo6bG9jYWxDYXJldFJlY3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMaW5lQnJlYWsuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6bG9jYWxDYXJldFJlY3QgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpsb2NhbENhcmV0UmVjdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmxvY2FsQ2FyZXRS
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmxvY2FsQ2FyZXRSZWN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdJbmxpbmVUZXh0OjpjcmVhdGVUZXh0Qm94KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR0lubGluZVRleHQ6OmxvY2FsQ2FyZXRSZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR0lubGluZVRleHQ6OmxvY2FsQ2FyZXRSZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaDoKKwogMjAyMC0xMS0w
NiAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgU2Ny
b2xsIHNuYXAgc3BlY2lmaWVkIG9uIDpyb290IGRvZXNuJ3Qgd29yawpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXggZmYxZTFmOTE0MjhhLi45
MTljMWRmNWJiMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcApAQCAtODQsNiArODQsNyBAQAogI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaCIKICNpbmNsdWRlICJJ
bmxpbmVFbGVtZW50Qm94LmgiCisjaW5jbHVkZSAiSW5saW5lUnVuQW5kT2Zmc2V0LmgiCiAjaW5j
bHVkZSAiTWF0aE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSYW5n
ZS5oIgpAQCAtMjg5MywxNCArMjg5NCwxNCBAQCBMYXlvdXRSZWN0IEFYT2JqZWN0Q2FjaGU6Omxv
Y2FsQ2FyZXRSZWN0Rm9yQ2hhcmFjdGVyT2Zmc2V0KFJlbmRlck9iamVjdComIHJlbmRlcgogICAg
IGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKLSAgICBhdXRvIFtpbmxp
bmVCb3gsIGNhcmV0T2Zmc2V0XSA9IG1ha2VDb250YWluZXJPZmZzZXRQb3NpdGlvbihyYW5nZS0+
c3RhcnQpLmlubGluZUJveEFuZE9mZnNldChBZmZpbml0eTo6RG93bnN0cmVhbSk7Ci0gICAgaWYg
KGlubGluZUJveCkKLSAgICAgICAgcmVuZGVyZXIgPSAmaW5saW5lQm94LT5yZW5kZXJlcigpOwor
ICAgIGF1dG8gcnVuQW5kT2Zmc2V0ID0gbWFrZUNvbnRhaW5lck9mZnNldFBvc2l0aW9uKHJhbmdl
LT5zdGFydCkuaW5saW5lUnVuQW5kT2Zmc2V0KEFmZmluaXR5OjpEb3duc3RyZWFtKTsKKyAgICBp
ZiAocnVuQW5kT2Zmc2V0LnJ1bikKKyAgICAgICAgcmVuZGVyZXIgPSBjb25zdF9jYXN0PFJlbmRl
ck9iamVjdCo+KCZydW5BbmRPZmZzZXQucnVuLT5yZW5kZXJlcigpKTsKIAotICAgIGlmIChpczxS
ZW5kZXJMaW5lQnJlYWs+KHJlbmRlcmVyKSAmJiBkb3duY2FzdDxSZW5kZXJMaW5lQnJlYWs+KHJl
bmRlcmVyKS0+aW5saW5lQm94V3JhcHBlcigpICE9IGlubGluZUJveCkKKyAgICBpZiAoaXM8UmVu
ZGVyTGluZUJyZWFrPihyZW5kZXJlcikgJiYgTGF5b3V0SW50ZWdyYXRpb246OnJ1bkZvcihkb3du
Y2FzdDxSZW5kZXJMaW5lQnJlYWs+KCpyZW5kZXJlcikpICE9IHJ1bkFuZE9mZnNldC5ydW4pCiAg
ICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKLSAgICByZXR1cm4gcmVuZGVyZXItPmxvY2FsQ2Fy
ZXRSZWN0KGlubGluZUJveCwgY2FyZXRPZmZzZXQpOworICAgIHJldHVybiByZW5kZXJlci0+bG9j
YWxDYXJldFJlY3QocnVuQW5kT2Zmc2V0KTsKIH0KIAogSW50UmVjdCBBWE9iamVjdENhY2hlOjph
YnNvbHV0ZUNhcmV0Qm91bmRzRm9yQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNl
dCYgY2hhcmFjdGVyT2Zmc2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9S
ZW5kZXJlZFBvc2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQb3Np
dGlvbi5jcHAKaW5kZXggZDMzNzBkM2ViOWQyLi5hZjMyN2Q1NjRmNjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQb3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmNwcApAQCAtMjI5LDcgKzIyOSw3IEBAIElu
dFJlY3QgUmVuZGVyZWRQb3NpdGlvbjo6YWJzb2x1dGVSZWN0KExheW91dFVuaXQqIGV4dHJhV2lk
dGhUb0VuZE9mTGluZSkgY29uc3QKICAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBJ
bnRSZWN0KCk7CiAKLSAgICBJbnRSZWN0IGxvY2FsUmVjdCA9IHNuYXBwZWRJbnRSZWN0KGNvbnN0
X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4obV9yZW5kZXJlciktPmxvY2FsQ2FyZXRSZWN0KG1fcnVuLT5s
ZWdhY3lJbmxpbmVCb3goKSwgbV9vZmZzZXQsIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkpOworICAg
IEludFJlY3QgbG9jYWxSZWN0ID0gc25hcHBlZEludFJlY3QoY29uc3RfY2FzdDxSZW5kZXJPYmpl
Y3QqPihtX3JlbmRlcmVyKS0+bG9jYWxDYXJldFJlY3QoeyBtX3J1biwgbV9vZmZzZXQgfSwgZXh0
cmFXaWR0aFRvRW5kT2ZMaW5lKSk7CiAgICAgcmV0dXJuIGxvY2FsUmVjdCA9PSBJbnRSZWN0KCkg
PyBJbnRSZWN0KCkgOiBtX3JlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChs
b2NhbFJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKaW5kZXggZThjMTZiNDI3YTc5Li4zYTg2NjY4NTk3
OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKQEAgLTYz
OSwxMiArNjM5LDEyIEBAIGF1dG8gVmlzaWJsZVBvc2l0aW9uOjpsb2NhbENhcmV0UmVjdCgpIGNv
bnN0IC0+IExvY2FsQ2FyZXRSZWN0CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4geyB9
OwogCi0gICAgYXV0byBbaW5saW5lQm94LCBjYXJldE9mZnNldF0gPSBpbmxpbmVCb3hBbmRPZmZz
ZXQoKTsKLSAgICBhdXRvIHJlbmRlcmVyID0gaW5saW5lQm94ID8gJmlubGluZUJveC0+cmVuZGVy
ZXIoKSA6IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgYXV0byBydW5BbmRPZmZzZXQgPSBpbmxpbmVS
dW5BbmRPZmZzZXQoKTsKKyAgICBhdXRvIHJlbmRlcmVyID0gcnVuQW5kT2Zmc2V0LnJ1biA/ICZy
dW5BbmRPZmZzZXQucnVuLT5yZW5kZXJlcigpIDogbm9kZS0+cmVuZGVyZXIoKTsKICAgICBpZiAo
IXJlbmRlcmVyKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIHsgcmVuZGVyZXIt
PmxvY2FsQ2FyZXRSZWN0KGlubGluZUJveCwgY2FyZXRPZmZzZXQpLCByZW5kZXJlciB9OworICAg
IHJldHVybiB7IHJlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChydW5BbmRPZmZzZXQpLCBjb25zdF9j
YXN0PFJlbmRlck9iamVjdCo+KHJlbmRlcmVyKSB9OwogfQogCiBJbnRSZWN0IFZpc2libGVQb3Np
dGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyhib29sKiBpbnNpZGVGaXhlZCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlv
bkxpbmVJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5
b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuY3BwCmluZGV4IGU3MTdlZWY0ZGY1ZS4uNzE5ODdi
NDA5ZTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5
b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5jcHAKQEAgLTE3OSw2
ICsxNzksNTkgQEAgaW50IFBhdGhMaW5lOjpibG9ja0RpcmVjdGlvblBvaW50SW5MaW5lKCkgY29u
c3QKICAgICByZXR1cm4gIWNvbnRhaW5pbmdCbG9jaygpLnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tz
V3JpdGluZ01vZGUoKSA/IHN0ZDo6bWF4KHRvcCgpLCBzZWxlY3Rpb25Ub3AoKSkgOiBzdGQ6Om1p
bihib3R0b20oKSwgc2VsZWN0aW9uQm90dG9tKCkpOwogfQogCitJbnRSZWN0IFBhdGhMaW5lOjpj
b21wdXRlQ2FyZXRSZWN0KGZsb2F0IGxvZ2ljYWxMZWZ0UG9zaXRpb24sIHVuc2lnbmVkIGNhcmV0
V2lkdGgsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkgY29uc3QKK3sKKyAgICBp
bnQgaGVpZ2h0ID0gc2VsZWN0aW9uQm90dG9tKCkgLSBzZWxlY3Rpb25Ub3AoKTsKKyAgICBpbnQg
dG9wID0gc2VsZWN0aW9uVG9wKCk7CisKKyAgICAvLyBEaXN0cmlidXRlIHRoZSBjYXJldCdzIHdp
ZHRoIHRvIGVpdGhlciBzaWRlIG9mIHRoZSBvZmZzZXQuCisgICAgZmxvYXQgbGVmdCA9IGxvZ2lj
YWxMZWZ0UG9zaXRpb247CisgICAgaW50IGNhcmV0V2lkdGhMZWZ0T2ZPZmZzZXQgPSBjYXJldFdp
ZHRoIC8gMjsKKyAgICBsZWZ0IC09IGNhcmV0V2lkdGhMZWZ0T2ZPZmZzZXQ7CisgICAgaW50IGNh
cmV0V2lkdGhSaWdodE9mT2Zmc2V0ID0gY2FyZXRXaWR0aCAtIGNhcmV0V2lkdGhMZWZ0T2ZPZmZz
ZXQ7CisgICAgbGVmdCA9IHJvdW5kZihsZWZ0KTsKKworICAgIGZsb2F0IGxpbmVMZWZ0ID0gbG9n
aWNhbExlZnQoKTsKKyAgICBmbG9hdCBsaW5lUmlnaHQgPSBsb2dpY2FsUmlnaHQoKTsKKworICAg
IGlmIChleHRyYVdpZHRoVG9FbmRPZkxpbmUpCisgICAgICAgICpleHRyYVdpZHRoVG9FbmRPZkxp
bmUgPSBsaW5lUmlnaHQgLSAobGVmdCArIGNhcmV0V2lkdGgpOworCisgICAgY29uc3QgUmVuZGVy
U3R5bGUmIGJsb2NrU3R5bGUgPSBjb250YWluaW5nQmxvY2soKS5zdHlsZSgpOworCisgICAgYm9v
bCByaWdodEFsaWduZWQgPSBmYWxzZTsKKyAgICBzd2l0Y2ggKGJsb2NrU3R5bGUudGV4dEFsaWdu
KCkpIHsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlJpZ2h0OgorICAgIGNhc2UgVGV4dEFsaWdu
TW9kZTo6V2ViS2l0UmlnaHQ6CisgICAgICAgIHJpZ2h0QWxpZ25lZCA9IHRydWU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6TGVmdDoKKyAgICBjYXNlIFRleHRBbGln
bk1vZGU6OldlYktpdExlZnQ6CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpDZW50ZXI6CisgICAg
Y2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXI6CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgVGV4dEFsaWduTW9kZTo6SnVzdGlmeToKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlN0YXJ0
OgorICAgICAgICByaWdodEFsaWduZWQgPSAhYmxvY2tTdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6RW5kOgorICAg
ICAgICByaWdodEFsaWduZWQgPSBibG9ja1N0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZmxvYXQgbGVmdEVkZ2UgPSBzdGQ6Om1pbjxm
bG9hdD4oMCwgbGluZUxlZnQpOworICAgIGZsb2F0IHJpZ2h0RWRnZSA9IHN0ZDo6bWF4PGZsb2F0
Pihjb250YWluaW5nQmxvY2soKS5sb2dpY2FsV2lkdGgoKSwgbGluZVJpZ2h0KTsKKworICAgIGlm
IChyaWdodEFsaWduZWQpIHsKKyAgICAgICAgbGVmdCA9IHN0ZDo6bWF4KGxlZnQsIGxlZnRFZGdl
KTsKKyAgICAgICAgbGVmdCA9IHN0ZDo6bWluKGxlZnQsIGxpbmVSaWdodCAtIGNhcmV0V2lkdGgp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnQgPSBzdGQ6Om1pbihsZWZ0LCByaWdodEVkZ2Ug
LSBjYXJldFdpZHRoUmlnaHRPZk9mZnNldCk7CisgICAgICAgIGxlZnQgPSBzdGQ6Om1heChsZWZ0
LCBsaW5lTGVmdCk7CisgICAgfQorICAgIHJldHVybiBibG9ja1N0eWxlLmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgPyBJbnRSZWN0KGxlZnQsIHRvcCwgY2FyZXRXaWR0aCwgaGVpZ2h0KSA6IElu
dFJlY3QodG9wLCBsZWZ0LCBoZWlnaHQsIGNhcmV0V2lkdGgpOworfQorCiB9CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlv
bkxpbmVJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91
dEludGVncmF0aW9uTGluZUl0ZXJhdG9yLmgKaW5kZXggZTQ4NzQ0MTYxYWIzLi45OThhODVlN2Iz
YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJ
bnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRl
Z3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5oCkBAIC01OSw5ICs1OSwxMiBA
QCBwdWJsaWM6CiAgICAgTGF5b3V0VW5pdCBsaW5lQm94Qm90dG9tKCkgY29uc3Q7CiAKICAgICBm
bG9hdCB5KCkgY29uc3Q7CisgICAgZmxvYXQgbG9naWNhbExlZnQoKSBjb25zdDsKKyAgICBmbG9h
dCBsb2dpY2FsUmlnaHQoKSBjb25zdDsKICAgICBmbG9hdCBsb2dpY2FsSGVpZ2h0KCkgY29uc3Q7
CiAKICAgICBpbnQgYmxvY2tEaXJlY3Rpb25Qb2ludEluTGluZSgpIGNvbnN0OworICAgIEludFJl
Y3QgY29tcHV0ZUNhcmV0UmVjdChmbG9hdCBsb2dpY2FsTGVmdFBvc2l0aW9uLCB1bnNpZ25lZCBj
YXJldFdpZHRoLCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpIGNvbnN0OwogCiAg
ICAgYm9vbCBpc0hvcml6b250YWwoKSBjb25zdDsKIApAQCAtMTc3LDYgKzE4MCwyMCBAQCBpbmxp
bmUgZmxvYXQgUGF0aExpbmU6OnkoKSBjb25zdAogICAgIH0pOwogfQogCitpbmxpbmUgZmxvYXQg
UGF0aExpbmU6OmxvZ2ljYWxMZWZ0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hP
bihtX3BhdGhWYXJpYW50LCBbXShjb25zdCBhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBw
YXRoLmxvZ2ljYWxMZWZ0KCk7CisgICAgfSk7Cit9CisKK2lubGluZSBmbG9hdCBQYXRoTGluZTo6
bG9naWNhbFJpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3BhdGhW
YXJpYW50LCBbXShjb25zdCBhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLmxvZ2lj
YWxSaWdodCgpOworICAgIH0pOworfQorCiBpbmxpbmUgZmxvYXQgUGF0aExpbmU6OmxvZ2ljYWxI
ZWlnaHQoKSBjb25zdAogewogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQs
IFtdKGNvbnN0IGF1dG8mIHBhdGgpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvckxlZ2FjeVBhdGguaCBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJ
dGVyYXRvckxlZ2FjeVBhdGguaAppbmRleCA2YzI5Y2MzZjBkZmQuLjZjNjI4OWVkYTY3NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0
aW9uTGluZUl0ZXJhdG9yTGVnYWN5UGF0aC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvckxlZ2FjeVBhdGguaApAQCAt
NTMsNiArNTMsOCBAQCBwdWJsaWM6CiAgICAgTGF5b3V0VW5pdCBsaW5lQm94Qm90dG9tKCkgY29u
c3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94LT5saW5lQm94Qm90dG9tKCk7IH0KIAogICAgIGZs
b2F0IHkoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3gtPnkoKTsgfQorICAgIGZsb2F0
IGxvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94LT5sb2dpY2FsTGVm
dCgpOyB9CisgICAgZmxvYXQgbG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5s
aW5lQm94LT5sb2dpY2FsUmlnaHQoKTsgfQogICAgIGZsb2F0IGxvZ2ljYWxIZWlnaHQoKSBjb25z
dCB7IHJldHVybiBtX3Jvb3RJbmxpbmVCb3gtPmxvZ2ljYWxIZWlnaHQoKTsgfQogICAgIGJvb2wg
aXNIb3Jpem9udGFsKCkgY29uc3QgeyByZXR1cm4gbV9yb290SW5saW5lQm94LT5pc0hvcml6b250
YWwoKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24v
TGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmggYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5Q
YXRoLmgKaW5kZXggYWExOGRjOTcyYTdkLi44N2ExNjc4YzI2ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRv
ck1vZGVyblBhdGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5
b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmgKQEAgLTUxLDEzICs1MSwxNyBA
QCBwdWJsaWM6CiAKICAgICBMYXlvdXRVbml0IHRvcCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFVu
aXQ6OmZyb21GbG9hdFJvdW5kKGxpbmUoKS5lbmNsb3NpbmdSZWN0KCkueSgpKTsgfQogICAgIExh
eW91dFVuaXQgYm90dG9tKCkgY29uc3QgeyByZXR1cm4gTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Um91
bmQobGluZSgpLmVuY2xvc2luZ1JlY3QoKS5tYXhZKCkpOyB9CisgICAgTGF5b3V0VW5pdCBsaW5l
Qm94VG9wKCkgY29uc3QgeyByZXR1cm4gTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Um91bmQobGluZSgp
LnJlY3QoKS55KCkpOyB9CisgICAgTGF5b3V0VW5pdCBsaW5lQm94Qm90dG9tKCkgY29uc3QgeyBy
ZXR1cm4gTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Um91bmQobGluZSgpLnJlY3QoKS5tYXhZKCkpOyB9
CisKICAgICAvLyBGSVhNRTogV2hhdCBzaG91bGQgdGhlc2UgcmVhbGx5IGJlPwogICAgIExheW91
dFVuaXQgc2VsZWN0aW9uVG9wKCkgY29uc3QgeyByZXR1cm4gdG9wKCk7IH0KICAgICBMYXlvdXRV
bml0IHNlbGVjdGlvblRvcEZvckhpdFRlc3RpbmcoKSBjb25zdCB7IHJldHVybiB0b3AoKTsgfQog
ICAgIExheW91dFVuaXQgc2VsZWN0aW9uQm90dG9tKCkgY29uc3QgeyByZXR1cm4gYm90dG9tKCk7
IH0KLSAgICBMYXlvdXRVbml0IGxpbmVCb3hUb3AoKSBjb25zdCB7IHJldHVybiBMYXlvdXRVbml0
Ojpmcm9tRmxvYXRSb3VuZChsaW5lKCkucmVjdCgpLnkoKSk7IH0KLSAgICBMYXlvdXRVbml0IGxp
bmVCb3hCb3R0b20oKSBjb25zdCB7IHJldHVybiBMYXlvdXRVbml0Ojpmcm9tRmxvYXRSb3VuZChs
aW5lKCkucmVjdCgpLm1heFkoKSk7IH0KIAorICAgIC8vIEZJWE1FOiBXaGF0IHNob3VsZCB0aGVz
ZSBiZT8KKyAgICBmbG9hdCBsb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIGxpbmUoKS5zY3Jv
bGxhYmxlT3ZlcmZsb3coKS54KCk7IH0KKyAgICBmbG9hdCBsb2dpY2FsUmlnaHQoKSBjb25zdCB7
IHJldHVybiBsaW5lKCkuc2Nyb2xsYWJsZU92ZXJmbG93KCkubWF4WCgpOyB9CiAgICAgZmxvYXQg
eSgpIGNvbnN0IHsgcmV0dXJuIGxpbmVCb3hUb3AoKTsgfQogICAgIGZsb2F0IGxvZ2ljYWxIZWln
aHQoKSBjb25zdCB7IHJldHVybiBsaW5lKCkucmVjdCgpLmhlaWdodCgpOyB9CiAgICAgYm9vbCBp
c0hvcml6b250YWwoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvci5o
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVu
SXRlcmF0b3IuaAppbmRleCBkMzZhMTExN2QwZDUuLmU3Njc3YzY1ZTZlYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRl
cmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50
ZWdyYXRpb25SdW5JdGVyYXRvci5oCkBAIC0xMDgsNiArMTA4LDcgQEAgcHVibGljOgogICAgIHVu
c2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogCiAgICAgdW5zaWduZWQgb2Zmc2V0Rm9yUG9zaXRpb24o
ZmxvYXQgeCkgY29uc3Q7CisgICAgZmxvYXQgcG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQpIGNv
bnN0OwogCiAgICAgYm9vbCBpc1NlbGVjdGFibGUodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVu
ZCkgY29uc3Q7CiAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0KHVuc2lnbmVkIHN0YXJ0LCB1
bnNpZ25lZCBlbmQpIGNvbnN0OwpAQCAtMzI4LDYgKzMyOSwxMyBAQCBpbmxpbmUgdW5zaWduZWQg
UGF0aFRleHRSdW46Om9mZnNldEZvclBvc2l0aW9uKGZsb2F0IHgpIGNvbnN0CiAgICAgfSk7CiB9
CiAKK2lubGluZSBmbG9hdCBQYXRoVGV4dFJ1bjo6cG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQg
b2Zmc2V0KSBjb25zdAoreworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fcGF0aFZhcmlhbnQs
IFsmXShhdXRvJiBwYXRoKSB7CisgICAgICAgIHJldHVybiBwYXRoLnBvc2l0aW9uRm9yT2Zmc2V0
KG9mZnNldCk7CisgICAgfSk7Cit9CisKIGlubGluZSBib29sIFBhdGhUZXh0UnVuOjppc1NlbGVj
dGFibGUodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkgY29uc3QKIHsKICAgICByZXR1cm4g
V1RGOjpzd2l0Y2hPbihtX3BhdGhWYXJpYW50LCBbJl0oYXV0byYgcGF0aCkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVu
SXRlcmF0b3JMZWdhY3lQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24v
TGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvckxlZ2FjeVBhdGguaAppbmRleCA1ZTE4M2EwMjIz
ZjIuLmEyYTdkZTg2MDUwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVn
cmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0b3JMZWdhY3lQYXRoLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uUnVuSXRlcmF0
b3JMZWdhY3lQYXRoLmgKQEAgLTU5LDcgKzU5LDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRCb3goKS0+ZW5kKCk7IH0KICAgICB1bnNpZ25l
ZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBpbmxpbmVUZXh0Qm94KCktPmxlbigpOyB9CiAKLSAg
ICBpbmxpbmUgdW5zaWduZWQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgeCkgY29uc3QgeyByZXR1
cm4gaW5saW5lVGV4dEJveCgpLT5vZmZzZXRGb3JQb3NpdGlvbih4KTsgfQorICAgIHVuc2lnbmVk
IG9mZnNldEZvclBvc2l0aW9uKGZsb2F0IHgpIGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRCb3go
KS0+b2Zmc2V0Rm9yUG9zaXRpb24oeCk7IH0KKyAgICBmbG9hdCBwb3NpdGlvbkZvck9mZnNldCh1
bnNpZ25lZCBvZmZzZXQpIGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRCb3goKS0+cG9zaXRpb25G
b3JPZmZzZXQob2Zmc2V0KTsgfQogCiAgICAgYm9vbCBpc1NlbGVjdGFibGUodW5zaWduZWQgc3Rh
cnQsIHVuc2lnbmVkIGVuZCkgY29uc3QgeyByZXR1cm4gaW5saW5lVGV4dEJveCgpLT5pc1NlbGVj
dGVkKHN0YXJ0LCBlbmQpOyB9CiAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0KHVuc2lnbmVk
IHN0YXJ0LCB1bnNpZ25lZCBlbmQpIGNvbnN0IHsgcmV0dXJuIGlubGluZVRleHRCb3goKS0+bG9j
YWxTZWxlY3Rpb25SZWN0KHN0YXJ0LCBlbmQpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1vZGVyblBh
dGguaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlv
blJ1bkl0ZXJhdG9yTW9kZXJuUGF0aC5oCmluZGV4IDNmMDY2MTA4NzJmMS4uZDE5N2U1NmRlMDQ0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50
ZWdyYXRpb25SdW5JdGVyYXRvck1vZGVyblBhdGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1vZGVyblBhdGguaApA
QCAtNjYsNiArNjYsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgZW5kKCkgY29uc3QgeyByZXR1
cm4gcnVuKCkudGV4dENvbnRlbnQoKS0+ZW5kKCk7IH0KICAgICB1bnNpZ25lZCBsZW5ndGgoKSBj
b25zdCB7IHJldHVybiBydW4oKS50ZXh0Q29udGVudCgpLT5sZW5ndGgoKTsgfQogCisgICAgLy8g
RklYTUU6IE1ha2UgYSBzaGFyZWQgZ2VuZXJpYyB2ZXJzaW9uIG9mIHRoaXMuCiAgICAgaW5saW5l
IHVuc2lnbmVkIG9mZnNldEZvclBvc2l0aW9uKGZsb2F0IHgpIGNvbnN0CiAgICAgewogICAgICAg
ICBpZiAoaXNMaW5lQnJlYWsoKSkKQEAgLTgxLDYgKzgyLDIzIEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIHJ1bigpLnN0eWxlKCkuZm9udENhc2NhZGUoKS5vZmZzZXRGb3JQb3NpdGlvbihjcmVh
dGVUZXh0UnVuKEh5cGhlbk1vZGU6Oklnbm9yZSksIGxvY2FsWCwgaW5jbHVkZVBhcnRpYWxHbHlw
aHMpOwogICAgIH0KIAorICAgIC8vIEZJWE1FOiBNYWtlIGEgc2hhcmVkIGdlbmVyaWMgdmVyc2lv
biBvZiB0aGlzLgorICAgIGZsb2F0IHBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChvZmZzZXQgPj0gc3RhcnQoKSk7CisgICAgICAg
IEFTU0VSVChvZmZzZXQgPD0gZW5kKCkpOworCisgICAgICAgIGlmIChpc0xpbmVCcmVhaygpKQor
ICAgICAgICAgICAgcmV0dXJuIHJlY3QoKS54KCk7CisKKyAgICAgICAgYXV0byBlbmRPZmZzZXQg
PSBjbGFtcGVkT2Zmc2V0KG9mZnNldCk7CisKKyAgICAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25S
ZWN0ID0gTGF5b3V0UmVjdChyZWN0KCkueCgpLCAwLCAwLCAwKTsKKyAgICAgICAgVGV4dFJ1biB0
ZXh0UnVuID0gY3JlYXRlVGV4dFJ1bihIeXBoZW5Nb2RlOjpJZ25vcmUpOworICAgICAgICBydW4o
KS5zdHlsZSgpLmZvbnRDYXNjYWRlKCkuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1
biwgc2VsZWN0aW9uUmVjdCwgMCwgZW5kT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIHNuYXBSZWN0
VG9EZXZpY2VQaXhlbHNXaXRoV3JpdGluZ0RpcmVjdGlvbihzZWxlY3Rpb25SZWN0LCByZW5kZXJl
cigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgdGV4dFJ1bi5sdHIoKSkubWF4WCgp
OworICAgIH0KKwogICAgIGJvb2wgaXNTZWxlY3RhYmxlKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25l
ZCBlbmQpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gY2xhbXBlZE9mZnNldChzdGFydCkg
PCBjbGFtcGVkT2Zmc2V0KGVuZCk7CkBAIC0xMDUsOCArMTIzLDggQEAgcHVibGljOgogICAgICAg
ICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgeyBsb2dpY2FsTGVmdCwgc2VsZWN0aW9uVG9wLCBs
b2dpY2FsV2lkdGgsIHNlbGVjdGlvbkhlaWdodCB9OwogCiAgICAgICAgIFRleHRSdW4gdGV4dFJ1
biA9IGNyZWF0ZVRleHRSdW4oSHlwaGVuTW9kZTo6SW5jbHVkZSk7Ci0gICAgICAgIGlmIChjbGFt
cGVkU3RhcnQgIT0gc3RhcnQoKSB8fCBjbGFtcGVkRW5kICE9IHRleHRSdW4ubGVuZ3RoKCkpCi0g
ICAgICAgICAgICBydW4oKS5zdHlsZSgpLmZvbnRDYXNjYWRlKCkuYWRqdXN0U2VsZWN0aW9uUmVj
dEZvclRleHQodGV4dFJ1biwgc2VsZWN0aW9uUmVjdCwgY2xhbXBlZFN0YXJ0IC0gc3RhcnQoKSwg
Y2xhbXBlZEVuZCAtIHN0YXJ0KCkpOworICAgICAgICBpZiAoY2xhbXBlZFN0YXJ0IHx8IGNsYW1w
ZWRFbmQgIT0gdGV4dFJ1bi5sZW5ndGgoKSkKKyAgICAgICAgICAgIHJ1bigpLnN0eWxlKCkuZm9u
dENhc2NhZGUoKS5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBzZWxlY3Rpb25S
ZWN0LCBjbGFtcGVkU3RhcnQsIGNsYW1wZWRFbmQpOwogCiAgICAgICAgIHJldHVybiBzbmFwcGVk
U2VsZWN0aW9uUmVjdChzZWxlY3Rpb25SZWN0LCBsb2dpY2FsUmlnaHQsIHNlbGVjdGlvblRvcCwg
c2VsZWN0aW9uSGVpZ2h0LCBpc0hvcml6b250YWwoKSk7CiAgICAgfQpAQCAtMTk4LDkgKzIxNiw5
IEBAIHByaXZhdGU6CiAKICAgICB1bnNpZ25lZCBjbGFtcGVkT2Zmc2V0KHVuc2lnbmVkIG9mZnNl
dCkgY29uc3QKICAgICB7Ci0gICAgICAgIGF1dG8gY2xhbXBlZE9mZnNldCA9IHN0ZDo6bWF4KHN0
YXJ0KCksIHN0ZDo6bWluKG9mZnNldCwgZW5kKCkpKTsKKyAgICAgICAgYXV0byBjbGFtcGVkT2Zm
c2V0ID0gc3RkOjptYXgoc3RhcnQoKSwgc3RkOjptaW4ob2Zmc2V0LCBlbmQoKSkpIC0gc3RhcnQo
KTsKICAgICAgICAgLy8gV2UgdHJlYXQgdGhlIGxhc3QgY29kZXBvaW50IGluIHRoaXMgcnVuIGFu
ZCB0aGUgaHlwaGVuIGFzIGEgc2luZ2xlIHVuaXQuCi0gICAgICAgIGlmIChoYXNIeXBoZW4oKSAm
JiBjbGFtcGVkT2Zmc2V0ID09IGVuZCgpKQorICAgICAgICBpZiAoaGFzSHlwaGVuKCkgJiYgY2xh
bXBlZE9mZnNldCA9PSBsZW5ndGgoKSkKICAgICAgICAgICAgIGNsYW1wZWRPZmZzZXQgKz0gcnVu
KCkuc3R5bGUoKS5oeXBoZW5TdHJpbmcoKS5sZW5ndGgoKTsKIAogICAgICAgICByZXR1cm4gY2xh
bXBlZE9mZnNldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4
IDIzNzU5ZmMxYzEzYy4uZmEyZDExOWE4MDkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAKQEAgLTI4NDEsMTEgKzI4NDEsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6
dXBkYXRlSGl0VGVzdFJlc3VsdChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBv
aW50JgogICAgIH0KIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJCbG9jazo6bG9jYWxDYXJldFJlY3Qo
SW5saW5lQm94KiBpbmxpbmVCb3gsIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBl
eHRyYVdpZHRoVG9FbmRPZkxpbmUpCitMYXlvdXRSZWN0IFJlbmRlckJsb2NrOjpsb2NhbENhcmV0
UmVjdChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmIHJ1bkFuZE9mZnNldCwgTGF5b3V0VW5pdCog
ZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBjb25zdAogewogICAgIC8vIERvIHRoZSBub3JtYWwgY2Fs
Y3VsYXRpb24gaW4gbW9zdCBjYXNlcy4KICAgICBpZiAoZmlyc3RDaGlsZCgpKQotICAgICAgICBy
ZXR1cm4gUmVuZGVyQm94Ojpsb2NhbENhcmV0UmVjdChpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0LCBl
eHRyYVdpZHRoVG9FbmRPZkxpbmUpOworICAgICAgICByZXR1cm4gUmVuZGVyQm94Ojpsb2NhbENh
cmV0UmVjdChydW5BbmRPZmZzZXQsIGV4dHJhV2lkdGhUb0VuZE9mTGluZSk7CiAKICAgICBMYXlv
dXRSZWN0IGNhcmV0UmVjdCA9IGxvY2FsQ2FyZXRSZWN0Rm9yRW1wdHlFbGVtZW50KHdpZHRoKCks
IHRleHRJbmRlbnRPZmZzZXQoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmgKaW5kZXggNTY4MjBjZDg4YWFhLi41ZTgxMGEzYjJjMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5oCkBAIC00ODQsNyArNDg0LDcgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgcGFpbnRDb250aW51YXRpb25PdXRsaW5lcyhQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2lu
dCYpOwogCi0gICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25l
ZCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCkgZmlu
YWw7CisgICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChjb25zdCBJbmxpbmVSdW5BbmRPZmZz
ZXQmLCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSBudWxscHRyKSBjb25zdCBm
aW5hbDsKICAgICAKICAgICAvLyBGSVhNRS1CTE9DS0ZMT1c6IFJlbW92ZSB2aXJ0dWFsaXphaW9u
IHdoZW4gYWxsIGNhbGxlcnMgaGF2ZSBtb3ZlZCB0byBSZW5kZXJCbG9ja0Zsb3cKICAgICB2aXJ0
dWFsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50V2l0aElubGluZUNoaWxkcmVuKGNv
bnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggNDU0YTViZjEzMWRhLi44NWE0YzU2
MmIyMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC00Nyw2ICs0
Nyw3IEBACiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhpdFRl
c3RSZXN1bHQuaCIKICNpbmNsdWRlICJJbmxpbmVFbGVtZW50Qm94LmgiCisjaW5jbHVkZSAiSW5s
aW5lUnVuQW5kT2Zmc2V0LmgiCiAjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0
LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgpAQCAtNDQyOSw3
ICs0NDMwLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdo
dFJlcGxhY2VkKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHUKICAgICBjb21wdXRlZFZhbHVlcy5t
X3Bvc2l0aW9uID0gbG9naWNhbFRvcFBvczsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJCb3g6Omxv
Y2FsQ2FyZXRSZWN0KElubGluZUJveCogYm94LCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3V0
VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQorTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvY2Fs
Q2FyZXRSZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYgcnVuQW5kT2Zmc2V0LCBMYXlvdXRV
bml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpIGNvbnN0CiB7CiAgICAgLy8gVmlzaWJsZVBvc2l0
aW9ucyBhdCBvZmZzZXRzIGluc2lkZSBjb250YWluZXJzIGVpdGhlciBhKSByZWZlciB0byB0aGUg
cG9zaXRpb25zIGJlZm9yZS9hZnRlcgogICAgIC8vIHRob3NlIGNvbnRhaW5lcnMgKHRhYmxlcyBh
bmQgc2VsZWN0IGVsZW1lbnRzKSBvciBiKSByZWZlciB0byB0aGUgcG9zaXRpb24gaW5zaWRlIGFu
IGVtcHR5IGJsb2NrLgpAQCAtNDQzNywxNiArNDQzOCwxNiBAQCBMYXlvdXRSZWN0IFJlbmRlckJv
eDo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBib3gsIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBM
YXlvdQogICAgIC8vIEZJWE1FOiBQYWludCB0aGUgY2FyZXRzIGluc2lkZSBlbXB0eSBibG9ja3Mg
ZGlmZmVyZW50bHkgdGhhbiB0aGUgY2FyZXRzIGJlZm9yZS9hZnRlciBlbGVtZW50cy4KIAogICAg
IExheW91dFJlY3QgcmVjdChsb2NhdGlvbigpLCBMYXlvdXRTaXplKGNhcmV0V2lkdGgsIGhlaWdo
dCgpKSk7Ci0gICAgYm9vbCBsdHIgPSBib3ggPyBib3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSA6IHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOworICAgIGJvb2wgbHRyID0gcnVu
QW5kT2Zmc2V0LnJ1biA/IHJ1bkFuZE9mZnNldC5ydW4tPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSA6IHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwogCi0gICAgaWYgKCghY2FyZXRP
ZmZzZXQpIF4gbHRyKQorICAgIGlmICgoIXJ1bkFuZE9mZnNldC5vZmZzZXQpIF4gbHRyKQogICAg
ICAgICByZWN0Lm1vdmUoTGF5b3V0U2l6ZSh3aWR0aCgpIC0gY2FyZXRXaWR0aCwgMF9sdSkpOwog
Ci0gICAgaWYgKGJveCkgewotICAgICAgICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94ID0g
Ym94LT5yb290KCk7Ci0gICAgICAgIExheW91dFVuaXQgdG9wID0gcm9vdEJveC5saW5lVG9wKCk7
CisgICAgaWYgKHJ1bkFuZE9mZnNldC5ydW4pIHsKKyAgICAgICAgYXV0byBsaW5lID0gcnVuQW5k
T2Zmc2V0LnJ1bi5saW5lKCk7CisgICAgICAgIExheW91dFVuaXQgdG9wID0gbGluZS0+dG9wKCk7
CiAgICAgICAgIHJlY3Quc2V0WSh0b3ApOwotICAgICAgICByZWN0LnNldEhlaWdodChyb290Qm94
LmxpbmVCb3R0b20oKSAtIHRvcCk7CisgICAgICAgIHJlY3Quc2V0SGVpZ2h0KGxpbmUtPmJvdHRv
bSgpIC0gdG9wKTsKICAgICB9CiAKICAgICAvLyBJZiBoZWlnaHQgb2YgYm94IGlzIHNtYWxsZXIg
dGhhbiBmb250IGhlaWdodCwgdXNlIHRoZSBsYXR0ZXIgb25lLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5oCmluZGV4IDg1NmE0MjIzNzUzNC4uNzU1MDc2NTQ0MzJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCkBAIC00OTgsNyArNDk4LDcgQEAgb3ZlcnJpZGU7CiAK
ICAgICBib29sIHNob3VsZFRyZWF0Q2hpbGRBc1JlcGxhY2VkSW5UYWJsZUNlbGxzKCkgY29uc3Q7
CiAgICAgCi0gICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25l
ZCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gbnVsbHB0
cikgb3ZlcnJpZGU7CisgICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChjb25zdCBJbmxpbmVS
dW5BbmRPZmZzZXQmLCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSBudWxscHRy
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdmVyZmxvd0NsaXBS
ZWN0KGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyRnJhZ21lbnRDb250YWluZXIq
ID0gbnVsbHB0ciwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5
U2Nyb2xsYmFyU2l6ZSwgUGFpbnRQaGFzZSA9IFBhaW50UGhhc2U6OkJsb2NrQmFja2dyb3VuZCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IG92ZXJmbG93Q2xpcFJlY3RGb3JDaGlsZExh
eWVycyhjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZyYWdtZW50Q29udGFpbmVy
KiBmcmFnbWVudCwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25z
dCB7IHJldHVybiBvdmVyZmxvd0NsaXBSZWN0KGxvY2F0aW9uLCBmcmFnbWVudCwgcmVsZXZhbmN5
KTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHAKaW5kZXggYzU4MGU1M2RmZDM4Li5kOWE3NWM5ZWExOTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtMjYyNiw3ICsy
NjI2LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2xlYXJGaXJzdExldHRlclJlbWFp
bmluZ1RleHQoKQogICAgIGZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dE1hcCgpLnJlbW92ZSh0aGlz
KTsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6bG9jYWxDYXJldFJlY3RG
b3JFbXB0eUVsZW1lbnQoTGF5b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCB0ZXh0SW5kZW50T2Zm
c2V0KQorTGF5b3V0UmVjdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6bG9jYWxDYXJldFJlY3RGb3JF
bXB0eUVsZW1lbnQoTGF5b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCB0ZXh0SW5kZW50T2Zmc2V0
KSBjb25zdAogewogICAgIEFTU0VSVCghZmlyc3RDaGlsZCgpKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAppbmRleCA4NDdlZjMxZjI2YmYu
LmVjYTZkNTg2ODVmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmgKQEAgLTI2MCw3ICsyNjAsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBJbnRl
cnBvbGF0aW9uUXVhbGl0eSBjaG9vc2VJbnRlcnBvbGF0aW9uUXVhbGl0eShHcmFwaGljc0NvbnRl
eHQmLCBJbWFnZSYsIGNvbnN0IHZvaWQqLCBjb25zdCBMYXlvdXRTaXplJik7CiAKLSAgICBMYXlv
dXRSZWN0IGxvY2FsQ2FyZXRSZWN0Rm9yRW1wdHlFbGVtZW50KExheW91dFVuaXQgd2lkdGgsIExh
eW91dFVuaXQgdGV4dEluZGVudE9mZnNldCk7CisgICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVj
dEZvckVtcHR5RWxlbWVudChMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IHRleHRJbmRlbnRP
ZmZzZXQpIGNvbnN0OwogCiAgICAgc3RhdGljIGJvb2wgc2hvdWxkQW50aWFsaWFzTGluZXMoR3Jh
cGhpY3NDb250ZXh0Jik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJJbmxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5j
cHAKaW5kZXggYWRhNGY3MzM4NWNlLi5mNzhlYzdkY2Y4MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCkBAIC0yMjgsNyArMjI4LDcgQEAgdm9pZCBSZW5kZXJJ
bmxpbmU6OnVwZGF0ZUFsd2F5c0NyZWF0ZUxpbmVCb3hlcyhib29sIGZ1bGxMYXlvdXQpCiAgICAg
fQogfQogCi1MYXlvdXRSZWN0IFJlbmRlcklubGluZTo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94
KiBpbmxpbmVCb3gsIHVuc2lnbmVkLCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUp
CitMYXlvdXRSZWN0IFJlbmRlcklubGluZTo6bG9jYWxDYXJldFJlY3QoY29uc3QgSW5saW5lUnVu
QW5kT2Zmc2V0JiwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBjb25zdAogewog
ICAgIGlmIChmaXJzdENoaWxkKCkpIHsKICAgICAgICAgLy8gVGhpcyBjb25kaXRpb24gaXMgcG9z
c2libGUgaWYgdGhlIFJlbmRlcklubGluZSBpcyBhdCBhbiBlZGl0aW5nIGJvdW5kYXJ5LApAQCAt
MjM5LDggKzIzOSw2IEBAIExheW91dFJlY3QgUmVuZGVySW5saW5lOjpsb2NhbENhcmV0UmVjdChJ
bmxpbmVCb3gqIGlubGluZUJveCwgdW5zaWduZWQsIExheW91dFVuCiAgICAgICAgIHJldHVybiBM
YXlvdXRSZWN0KCk7CiAgICAgfQogCi0gICAgQVNTRVJUX1VOVVNFRChpbmxpbmVCb3gsICFpbmxp
bmVCb3gpOwotCiAgICAgaWYgKGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKICAgICAgICAgKmV4dHJh
V2lkdGhUb0VuZE9mTGluZSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJJbmxpbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuaAppbmRleCA0NDhiM2EwNWQ1NTIuLmVhNTUwYzI5NWI5OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuaApAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRBbHdheXNDcmVhdGVMaW5lQm94ZXMoKSB7IHNldFJlbmRlcklubGluZUFsd2F5c0NyZWF0
ZXNMaW5lQm94ZXModHJ1ZSk7IH0KICAgICB2b2lkIHVwZGF0ZUFsd2F5c0NyZWF0ZUxpbmVCb3hl
cyhib29sIGZ1bGxMYXlvdXQpOwogCi0gICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxp
bmVCb3gqLCB1bnNpZ25lZCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBmaW5h
bDsKKyAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNl
dCYsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkgY29uc3QgZmluYWw7CiAKICAg
ICBib29sIGhpdFRlc3RDdWxsZWRJbmxpbmUoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuY3BwCmluZGV4IDMwZWNjNTM0OWJhNC4uNDFhNDkzMTgy
NTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFr
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcApA
QCAtMjcsNiArMjcsOCBAQAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TFdCUkVsZW1lbnQuaCIKICNpbmNsdWRlICJJbmxpbmVFbGVtZW50Qm94LmgiCisjaW5jbHVkZSAi
SW5saW5lUnVuQW5kT2Zmc2V0LmgiCisjaW5jbHVkZSAiTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRl
cmF0b3IuaCIKICNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcy5oIgogI2luY2x1ZGUgIlJlbmRlckJs
b2NrLmgiCkBAIC0xNTYsMjQgKzE1OCwyNSBAQCB2b2lkIFJlbmRlckxpbmVCcmVhazo6c2V0U2Vs
ZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUgc3RhdGUpCiAgICAgbV9pbmxpbmVCb3hXcmFwcGVy
LT5yb290KCkuc2V0SGFzU2VsZWN0ZWRDaGlsZHJlbihzdGF0ZSAhPSBIaWdobGlnaHRTdGF0ZTo6
Tm9uZSk7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyTGluZUJyZWFrOjpsb2NhbENhcmV0UmVjdChJ
bmxpbmVCb3gqIGlubGluZUJveCwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4
dHJhV2lkdGhUb0VuZE9mTGluZSkKK0xheW91dFJlY3QgUmVuZGVyTGluZUJyZWFrOjpsb2NhbENh
cmV0UmVjdChjb25zdCBJbmxpbmVSdW5BbmRPZmZzZXQmIHJ1bkFuZE9mZnNldCwgTGF5b3V0VW5p
dCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBjb25zdAogewotICAgIEFTU0VSVF9VTlVTRUQoY2Fy
ZXRPZmZzZXQsICFjYXJldE9mZnNldCk7Ci0gICAgQVNTRVJUX1VOVVNFRChpbmxpbmVCb3gsIGlu
bGluZUJveCA9PSBtX2lubGluZUJveFdyYXBwZXIpOwotICAgIGlmICghaW5saW5lQm94KQorICAg
IEFTU0VSVCghcnVuQW5kT2Zmc2V0Lm9mZnNldCk7CisgICAgQVNTRVJUKHJ1bkFuZE9mZnNldC5y
dW4gPT0gTGF5b3V0SW50ZWdyYXRpb246OnJ1bkZvcigqdGhpcykpOworCisgICAgaWYgKCFydW5B
bmRPZmZzZXQucnVuKQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCi0gICAgY29uc3Qg
Um9vdElubGluZUJveCYgcm9vdEJveCA9IGlubGluZUJveC0+cm9vdCgpOwotICAgIHJldHVybiBy
b290Qm94LmNvbXB1dGVDYXJldFJlY3QoaW5saW5lQm94LT5sb2dpY2FsTGVmdCgpLCBjYXJldFdp
ZHRoLCBleHRyYVdpZHRoVG9FbmRPZkxpbmUpOworICAgIGF1dG8gbGluZSA9IHJ1bkFuZE9mZnNl
dC5ydW4ubGluZSgpOworICAgIHJldHVybiBsaW5lLT5jb21wdXRlQ2FyZXRSZWN0KGxpbmUtPmxv
Z2ljYWxMZWZ0KCksIGNhcmV0V2lkdGgsIGV4dHJhV2lkdGhUb0VuZE9mTGluZSk7CiB9CiAKIElu
dFJlY3QgUmVuZGVyTGluZUJyZWFrOjpsaW5lc0JvdW5kaW5nQm94KCkgY29uc3QKIHsKLSAgICBh
dXRvIGJveCA9IExheW91dEludGVncmF0aW9uOjpydW5Gb3IoKnRoaXMpOwotICAgIGlmICghYm94
KQorICAgIGF1dG8gcnVuID0gTGF5b3V0SW50ZWdyYXRpb246OnJ1bkZvcigqdGhpcyk7CisgICAg
aWYgKCFydW4pCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50
UmVjdChib3gtPnJlY3QoKSk7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QocnVuLT5yZWN0
KCkpOwogfQogCiB2b2lkIFJlbmRlckxpbmVCcmVhazo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50
UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0
CkBAIC0yMDksNyArMjEyLDkgQEAgdm9pZCBSZW5kZXJMaW5lQnJlYWs6OmNvbGxlY3RTZWxlY3Rp
b25SZWN0cyhWZWN0b3I8U2VsZWN0aW9uUmVjdD4mIHJlY3RzLCB1bnNpZ24KICAgICBpZiAoIWJv
eCkKICAgICAgICAgcmV0dXJuOwogICAgIGNvbnN0IFJvb3RJbmxpbmVCb3gmIHJvb3RCb3ggPSBi
b3gtPnJvb3QoKTsKLSAgICBMYXlvdXRSZWN0IHJlY3QgPSByb290Qm94LmNvbXB1dGVDYXJldFJl
Y3QoYm94LT5sb2dpY2FsTGVmdCgpLCAwLCBudWxscHRyKTsKKworICAgIExheW91dFJlY3QgcmVj
dCA9IExheW91dEludGVncmF0aW9uOjpMaW5lSXRlcmF0b3IoJnJvb3RCb3gpLT5jb21wdXRlQ2Fy
ZXRSZWN0KGJveC0+bG9naWNhbExlZnQoKSwgMCwgbnVsbHB0cik7CisKICAgICBpZiAocm9vdEJv
eC5pc0ZpcnN0QWZ0ZXJQYWdlQnJlYWsoKSkgewogICAgICAgICBpZiAoYm94LT5pc0hvcml6b250
YWwoKSkKICAgICAgICAgICAgIHJlY3Quc2hpZnRZRWRnZVRvKHJvb3RCb3gubGluZUJveFRvcCgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaAppbmRleCBmZWQx
NDgzMmRjNDguLjQwNDMyYWNlN2M5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpbmVCcmVhay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaW5lQnJlYWsuaApAQCAtNjYsNyArNjYsNyBAQCBwcml2YXRlOgogICAgIGludCBjYXJldE1p
bk9mZnNldCgpIGNvbnN0IGZpbmFsOwogICAgIGludCBjYXJldE1heE9mZnNldCgpIGNvbnN0IGZp
bmFsOwogICAgIGJvb2wgY2FuQmVTZWxlY3Rpb25MZWFmKCkgY29uc3QgZmluYWw7Ci0gICAgTGF5
b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJldE9mZnNldCwg
TGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBmaW5hbDsKKyAgICBMYXlvdXRSZWN0
IGxvY2FsQ2FyZXRSZWN0KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYsIExheW91dFVuaXQqIGV4
dHJhV2lkdGhUb0VuZE9mTGluZSkgY29uc3QgZmluYWw7CiAgICAgdm9pZCBzZXRTZWxlY3Rpb25T
dGF0ZShIaWdobGlnaHRTdGF0ZSkgZmluYWw7CiAKICAgICBMYXlvdXRVbml0IGxpbmVIZWlnaHQo
Ym9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlKSBjb25z
dCBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXgg
NjcyODdmNTE1YmRlLi4zNTc2Nzk3NzU0MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCkBAIC0xNDAwLDcgKzE0MDAsNyBAQCBMYXlvdXRTaXplIFJlbmRlck9i
amVjdDo6b2Zmc2V0RnJvbUFuY2VzdG9yQ29udGFpbmVyKFJlbmRlckVsZW1lbnQmIGNvbnRhaW5l
cikgYwogICAgIHJldHVybiBvZmZzZXQ7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyT2JqZWN0Ojps
b2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0
aFRvRW5kT2ZMaW5lKQorTGF5b3V0UmVjdCBSZW5kZXJPYmplY3Q6OmxvY2FsQ2FyZXRSZWN0KGNv
bnN0IElubGluZVJ1bkFuZE9mZnNldCYsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGlu
ZSkgY29uc3QKIHsKICAgICBpZiAoZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQogICAgICAgICAqZXh0
cmFXaWR0aFRvRW5kT2ZMaW5lID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaAppbmRleCBmN2QyMGM5Mjg2YWIuLjVjMGIxMzY5ZTQ1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtNzUsNiArNzUsNyBAQCBjbGFzcyBWaXNpYmxlUG9z
aXRpb247CiBjbGFzcyBTZWxlY3Rpb25SZWN0OwogI2VuZGlmCiAKK3N0cnVjdCBJbmxpbmVSdW5B
bmRPZmZzZXQ7CiBzdHJ1Y3QgUGFpbnRJbmZvOwogc3RydWN0IFNpbXBsZVJhbmdlOwogCkBAIC02
NzIsMTMgKzY3Myw4IEBAIHB1YmxpYzoKICAgICAvLyBXaGV0aGVyIG9yIG5vdCBhIGdpdmVuIGJs
b2NrIG5lZWRzIHRvIHBhaW50IHNlbGVjdGlvbiBnYXBzLgogICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRQYWludFNlbGVjdGlvbkdhcHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgLyoq
Ci0gICAgICogUmV0dXJucyB0aGUgbG9jYWwgY29vcmRpbmF0ZXMgb2YgdGhlIGNhcmV0IHdpdGhp
biB0aGlzIHJlbmRlciBvYmplY3QuCi0gICAgICogQHBhcmFtIGNhcmV0T2Zmc2V0IHplcm8tYmFz
ZWQgb2Zmc2V0IGRldGVybWluaW5nIHBvc2l0aW9uIHdpdGhpbiB0aGUgcmVuZGVyIG9iamVjdC4K
LSAgICAgKiBAcGFyYW0gZXh0cmFXaWR0aFRvRW5kT2ZMaW5lIG9wdGlvbmFsIG91dCBhcmcgdG8g
Z2l2ZSBleHRyYSB3aWR0aCB0byBlbmQgb2YgbGluZSAtCi0gICAgICogdXNlZnVsIGZvciBjaGFy
YWN0ZXIgcmFuZ2UgcmVjdCBjb21wdXRhdGlvbnMKLSAgICAgKi8KLSAgICB2aXJ0dWFsIExheW91
dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExh
eW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IG51bGxwdHIpOworICAgIC8vIFJldHVy
bnMgdGhlIGxvY2FsIGNvb3JkaW5hdGVzIG9mIHRoZSBjYXJldCB3aXRoaW4gdGhpcyByZW5kZXIg
b2JqZWN0LgorICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChjb25zdCBJbmxp
bmVSdW5BbmRPZmZzZXQmLCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSBudWxs
cHRyKSBjb25zdDsKIAogICAgIC8vIFdoZW4gcGVyZm9ybWluZyBhIGdsb2JhbCBkb2N1bWVudCB0
ZWFyLWRvd24sIG9yIHdoZW4gZ29pbmcgaW50byB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLCB0aGUg
cmVuZGVyZXIgb2YgdGhlIGRvY3VtZW50IGlzIGNsZWFyZWQuCiAgICAgYm9vbCByZW5kZXJUcmVl
QmVpbmdEZXN0cm95ZWQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmNwcAppbmRleCA1MzkwNjVlZTA4YjkuLjMwZGY2YTRjZjRjZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0LmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJIeXBoZW5h
dGlvbi5oIgorI2luY2x1ZGUgIklubGluZVJ1bkFuZE9mZnNldC5oIgogI2luY2x1ZGUgIklubGlu
ZVRleHRCb3guaCIKICNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvci5oIgog
I2luY2x1ZGUgIkxheW91dEludGVncmF0aW9uTGluZUxheW91dC5oIgpAQCAtNzEwLDE0ICs3MTEs
MTUgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlclRleHQ6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3Qg
TGF5b3V0UG9pbnQmIHBvaW50LCBjb25zdCBSZW4KICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBv
c2l0aW9uKDAsIEFmZmluaXR5OjpEb3duc3RyZWFtKTsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJU
ZXh0Ojpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgdW5zaWduZWQgY2FyZXRP
ZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKK0xheW91dFJlY3QgUmVu
ZGVyVGV4dDo6bG9jYWxDYXJldFJlY3QoY29uc3QgSW5saW5lUnVuQW5kT2Zmc2V0JiBydW5BbmRP
ZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkgY29uc3QKIHsKLSAgICBp
ZiAoIWlubGluZUJveCkKKyAgICBpZiAoIXJ1bkFuZE9mZnNldC5ydW4pCiAgICAgICAgIHJldHVy
biBMYXlvdXRSZWN0KCk7CiAKLSAgICBhdXRvJiBib3ggPSBkb3duY2FzdDxJbmxpbmVUZXh0Qm94
PigqaW5saW5lQm94KTsKLSAgICBmbG9hdCBsZWZ0ID0gYm94LnBvc2l0aW9uRm9yT2Zmc2V0KGNh
cmV0T2Zmc2V0KTsKLSAgICByZXR1cm4gYm94LnJvb3QoKS5jb21wdXRlQ2FyZXRSZWN0KGxlZnQs
IGNhcmV0V2lkdGgsIGV4dHJhV2lkdGhUb0VuZE9mTGluZSk7CisgICAgYXV0byYgdGV4dFJ1biA9
IGRvd25jYXN0PExheW91dEludGVncmF0aW9uOjpUZXh0UnVuSXRlcmF0b3I+KHJ1bkFuZE9mZnNl
dC5ydW4pOworCisgICAgZmxvYXQgbGVmdCA9IHRleHRSdW4tPnBvc2l0aW9uRm9yT2Zmc2V0KHJ1
bkFuZE9mZnNldC5vZmZzZXQpOworICAgIHJldHVybiB0ZXh0UnVuLmxpbmUoKS0+Y29tcHV0ZUNh
cmV0UmVjdChsZWZ0LCBjYXJldFdpZHRoLCBleHRyYVdpZHRoVG9FbmRPZkxpbmUpOwogfQogCiBB
TFdBWVNfSU5MSU5FIGZsb2F0IFJlbmRlclRleHQ6OndpZHRoRnJvbUNhY2hlKGNvbnN0IEZvbnRD
YXNjYWRlJiBmLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuLCBmbG9hdCB4UG9zLCBIYXNo
U2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVy
ZmxvdywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0LmgKaW5kZXggNTI4ODA5MzRjY2I0Li5hZTg1YWQyNDJhODUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaApAQCAtMjA1LDcgKzIwNSw3IEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRlKEhpZ2hsaWdodFN0YXRlKSBmaW5hbDsKICAg
ICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9k
ZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPSB0
cnVlKSBmaW5hbDsKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIHVu
c2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSBu
dWxscHRyKSBvdmVycmlkZTsKKyAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KGNvbnN0IElu
bGluZVJ1bkFuZE9mZnNldCYsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IG51
bGxwdHIpIGNvbnN0IG92ZXJyaWRlOwogICAgIExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVj
dEZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5l
cikgY29uc3QgZmluYWw7CiAKICAgICB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
KGZsb2F0IGxlYWRXaWR0aCwgSGFzaFNldDxjb25zdCBGb250Kj4mIGZhbGxiYWNrRm9udHMsIEds
eXBoT3ZlcmZsb3cmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290
SW5saW5lQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNw
cAppbmRleCAxYjUwN2VjZGNhNjIuLjFkNWQzODZmYjM2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9Sb290SW5saW5lQm94LmNwcApAQCAtNDc0LDU5ICs0NzQsNiBAQCBHYXBSZWN0cyBS
b290SW5saW5lQm94OjpsaW5lU2VsZWN0aW9uR2FwKFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNv
bnN0IExheW91dFBvaQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUludFJlY3QgUm9vdElubGlu
ZUJveDo6Y29tcHV0ZUNhcmV0UmVjdChmbG9hdCBsb2dpY2FsTGVmdFBvc2l0aW9uLCB1bnNpZ25l
ZCBjYXJldFdpZHRoLCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpIGNvbnN0Ci17
Ci0gICAgaW50IGhlaWdodCA9IHNlbGVjdGlvbkhlaWdodCgpOwotICAgIGludCB0b3AgPSBzZWxl
Y3Rpb25Ub3AoKTsKLQotICAgIC8vIERpc3RyaWJ1dGUgdGhlIGNhcmV0J3Mgd2lkdGggdG8gZWl0
aGVyIHNpZGUgb2YgdGhlIG9mZnNldC4KLSAgICBmbG9hdCBsZWZ0ID0gbG9naWNhbExlZnRQb3Np
dGlvbjsKLSAgICBpbnQgY2FyZXRXaWR0aExlZnRPZk9mZnNldCA9IGNhcmV0V2lkdGggLyAyOwot
ICAgIGxlZnQgLT0gY2FyZXRXaWR0aExlZnRPZk9mZnNldDsKLSAgICBpbnQgY2FyZXRXaWR0aFJp
Z2h0T2ZPZmZzZXQgPSBjYXJldFdpZHRoIC0gY2FyZXRXaWR0aExlZnRPZk9mZnNldDsKLSAgICBs
ZWZ0ID0gcm91bmRmKGxlZnQpOwotCi0gICAgZmxvYXQgcm9vdExlZnQgPSBsb2dpY2FsTGVmdCgp
OwotICAgIGZsb2F0IHJvb3RSaWdodCA9IGxvZ2ljYWxSaWdodCgpOwotCi0gICAgaWYgKGV4dHJh
V2lkdGhUb0VuZE9mTGluZSkKLSAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IChsb2dp
Y2FsV2lkdGgoKSArIHJvb3RMZWZ0KSAtIChsZWZ0ICsgY2FyZXRXaWR0aCk7Ci0KLSAgICBjb25z
dCBSZW5kZXJTdHlsZSYgYmxvY2tTdHlsZSA9IGJsb2NrRmxvdygpLnN0eWxlKCk7Ci0KLSAgICBi
b29sIHJpZ2h0QWxpZ25lZCA9IGZhbHNlOwotICAgIHN3aXRjaCAoYmxvY2tTdHlsZS50ZXh0QWxp
Z24oKSkgewotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6Ci0gICAgY2FzZSBUZXh0QWxp
Z25Nb2RlOjpXZWJLaXRSaWdodDoKLSAgICAgICAgcmlnaHRBbGlnbmVkID0gdHJ1ZTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpMZWZ0OgotICAgIGNhc2UgVGV4dEFs
aWduTW9kZTo6V2ViS2l0TGVmdDoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNlbnRlcjoKLSAg
ICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdENlbnRlcjoKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6U3Rh
cnQ6Ci0gICAgICAgIHJpZ2h0QWxpZ25lZCA9ICFibG9ja1N0eWxlLmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6Ci0g
ICAgICAgIHJpZ2h0QWxpZ25lZCA9IGJsb2NrU3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBmbG9hdCBsZWZ0RWRnZSA9IHN0ZDo6bWlu
PGZsb2F0PigwLCByb290TGVmdCk7Ci0gICAgZmxvYXQgcmlnaHRFZGdlID0gc3RkOjptYXg8Zmxv
YXQ+KGJsb2NrRmxvdygpLmxvZ2ljYWxXaWR0aCgpLCByb290UmlnaHQpOwotCi0gICAgaWYgKHJp
Z2h0QWxpZ25lZCkgewotICAgICAgICBsZWZ0ID0gc3RkOjptYXgobGVmdCwgbGVmdEVkZ2UpOwot
ICAgICAgICBsZWZ0ID0gc3RkOjptaW4obGVmdCwgcm9vdFJpZ2h0IC0gY2FyZXRXaWR0aCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgbGVmdCA9IHN0ZDo6bWluKGxlZnQsIHJpZ2h0RWRnZSAtIGNh
cmV0V2lkdGhSaWdodE9mT2Zmc2V0KTsKLSAgICAgICAgbGVmdCA9IHN0ZDo6bWF4KGxlZnQsIHJv
b3RMZWZ0KTsKLSAgICB9Ci0gICAgcmV0dXJuIGJsb2NrU3R5bGUuaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSA/IEludFJlY3QobGVmdCwgdG9wLCBjYXJldFdpZHRoLCBoZWlnaHQpIDogSW50UmVj
dCh0b3AsIGxlZnQsIGhlaWdodCwgY2FyZXRXaWR0aCk7Ci19Ci0KIFJlbmRlck9iamVjdDo6SGln
aGxpZ2h0U3RhdGUgUm9vdElubGluZUJveDo6c2VsZWN0aW9uU3RhdGUoKQogewogICAgIC8vIFdh
bGsgb3ZlciBhbGwgb2YgdGhlIHNlbGVjdGVkIGJveGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9Sb290SW5saW5lQm94LmgKaW5kZXggZTQ4MjkyZjdhYzNiLi43MDA5MzBhYzQ3MTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaApAQCAtMTMyLDggKzEzMiw2IEBA
IHB1YmxpYzoKICAgICBHYXBSZWN0cyBsaW5lU2VsZWN0aW9uR2FwKFJlbmRlckJsb2NrJiByb290
QmxvY2ssIGNvbnN0IExheW91dFBvaW50JiByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBjb25z
dCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrLAogICAgICAgICBMYXlvdXRVbml0IHNl
bFRvcCwgTGF5b3V0VW5pdCBzZWxIZWlnaHQsIGNvbnN0IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRD
YWNoZXMmLCBjb25zdCBQYWludEluZm8qKTsKIAotICAgIEludFJlY3QgY29tcHV0ZUNhcmV0UmVj
dChmbG9hdCBsb2dpY2FsTGVmdFBvc2l0aW9uLCB1bnNpZ25lZCBjYXJldFdpZHRoLCBMYXlvdXRV
bml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpIGNvbnN0OwotCiAgICAgdXNpbmcgQ2xlYW5MaW5l
RmxvYXRMaXN0ID0gVmVjdG9yPFdlYWtQdHI8UmVuZGVyQm94Pj47CiAgICAgdm9pZCBhcHBlbmRG
bG9hdChSZW5kZXJCb3gmIGZsb2F0aW5nQm94KQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCmluZGV4IDQ1NTU3NzYx
ODBlMS4uYmYzZjcxNWIwZjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRl
ICJDU1NGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNs
dWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJJbmxpbmVSdW5BbmRPZmZzZXQuaCIKICNpbmNs
dWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKICNpbmNsdWRl
ICJSZW5kZXJTVkdUZXh0LmgiCkBAIC0xMTUsMTEgKzExNiwxNCBAQCBzdGQ6OnVuaXF1ZV9wdHI8
SW5saW5lVGV4dEJveD4gUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y3JlYXRlVGV4dEJveCgpCiB7CiAg
ICAgYXV0byBib3ggPSBtYWtlVW5pcXVlPFNWR0lubGluZVRleHRCb3g+KCp0aGlzKTsKICAgICBi
b3gtPnNldEhhc1ZpcnR1YWxMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgcmV0dXJuIGJveDsKKyAgICBy
ZXR1cm4gYm94OyAKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpsb2NhbENh
cmV0UmVjdChJbmxpbmVCb3gqIGJveCwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQq
KQorTGF5b3V0UmVjdCBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpsb2NhbENhcmV0UmVjdChjb25zdCBJ
bmxpbmVSdW5BbmRPZmZzZXQmIHJ1bkFuZE9mZnNldCwgTGF5b3V0VW5pdCopIGNvbnN0CiB7Cisg
ICAgYXV0byogYm94ID0gcnVuQW5kT2Zmc2V0LnJ1biA/IHJ1bkFuZE9mZnNldC5ydW4tPmxlZ2Fj
eUlubGluZUJveCgpIDogbnVsbHB0cjsKKyAgICBhdXRvIGNhcmV0T2Zmc2V0ID0gcnVuQW5kT2Zm
c2V0Lm9mZnNldDsKKwogICAgIGlmICghaXM8SW5saW5lVGV4dEJveD4oYm94KSkKICAgICAgICAg
cmV0dXJuIExheW91dFJlY3QoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0lubGluZVRleHQuaAppbmRleCBmZjQ2M2I4YjA5NjkuLmRjMjcyMDk5ZDAz
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxp
bmVUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxp
bmVUZXh0LmgKQEAgLTYyLDcgKzYyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlzU1ZHSW5saW5l
VGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIFZpc2libGVQb3Np
dGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyRnJh
Z21lbnRDb250YWluZXIqKSBvdmVycmlkZTsKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0
KElubGluZUJveCosIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRo
VG9FbmRPZkxpbmUgPSAwKSBvdmVycmlkZTsKKyAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0
KGNvbnN0IElubGluZVJ1bkFuZE9mZnNldCYsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9m
TGluZSA9IG51bGxwdHIpIGNvbnN0IG92ZXJyaWRlOwogICAgIEludFJlY3QgbGluZXNCb3VuZGlu
Z0JveCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVUZXh0Qm94
PiBjcmVhdGVUZXh0Qm94KCkgb3ZlcnJpZGU7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>