<?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>151706</bug_id>
          
          <creation_ts>2015-12-01 10:28:16 -0800</creation_ts>
          <short_desc>Refactor FTL sub snippet code to support general binary op snippets.</short_desc>
          <delta_ts>2015-12-01 11:32:54 -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>JavaScriptCore</component>
          <version>WebKit Local 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="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1145262</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-12-01 10:28:16 -0800</bug_when>
    <thetext>Patch coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145263</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-12-01 10:29:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/23707562&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145269</commentid>
    <comment_count>2</comment_count>
      <attachid>266360</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-12-01 10:46:19 -0800</bug_when>
    <thetext>Created attachment 266360
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145296</commentid>
    <comment_count>3</comment_count>
      <attachid>266360</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-12-01 11:21:00 -0800</bug_when>
    <thetext>Comment on attachment 266360
proposed patch.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145301</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-12-01 11:32:54 -0800</bug_when>
    <thetext>Thanks for the review.  Landed in r192896: &lt;http://trac.webkit.org/r192896&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266360</attachid>
            <date>2015-12-01 10:46:19 -0800</date>
            <delta_ts>2015-12-01 11:21:00 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-151706.patch</filename>
            <type>text/plain</type>
            <size>46132</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyODkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBA
CisyMDE1LTEyLTAxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZWZhY3RvciBGVEwgc3ViIHNuaXBwZXQgY29kZSB0byBzdXBwb3J0IGdlbmVyYWwgYmluYXJ5IG9w
IHNuaXBwZXRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTUxNzA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKworICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNw
cDoKKyAgICAgICAgLSBNb3ZlZCB0aGUgQmluYXJ5U25pcHBldFJlZ2lzdGVyQ29udGV4dCB0byBG
VExDb21waWxlQmluYXJ5T3AuY3BwIHZlcmJhdGltLgorICAgICAgICAtIEdlbmVyYWxpemUgZ2Vu
ZXJhdGVBcml0aFN1YklDRmFzdFBhdGgoKSB0byBnZW5lcmF0ZUJpbmFyeU9wSUNGYXN0UGF0aCgp
LgorICAgICAgICAgIEl0IG5vdyB1c2VzIHNuaXBwZXQgc3BlY2lmaWMgaGVscGVycyBpbiBGVExD
b21waWxlQmluYXJ5T3AuY3BwIHRvIGdlbmVyYXRlCisgICAgICAgICAgdGhlIGZhc3QgcGF0aHMu
CisKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZUJpbmFyeU9wLmNwcDogQWRkZWQuCisgICAgICAg
IChKU0M6OkZUTDo6QmluYXJ5U25pcHBldFJlZ2lzdGVyQ29udGV4dDo6QmluYXJ5U25pcHBldFJl
Z2lzdGVyQ29udGV4dCk6CisgICAgICAgIChKU0M6OkZUTDo6QmluYXJ5U25pcHBldFJlZ2lzdGVy
Q29udGV4dDo6aW5pdGlhbGl6ZVJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6OkZUTDo6QmluYXJ5
U25pcHBldFJlZ2lzdGVyQ29udGV4dDo6cmVzdG9yZVJlZ2lzdGVycyk6CisgICAgICAgIC0gTW92
ZWQgaGVyZSB3aXRob3V0IGNoYW5nZWQgZnJvbSBGVExDb21waWxlLmNwcC4KKyAgICAgICAgKEpT
Qzo6RlRMOjpnZW5lcmF0ZUFyaXRoU3ViRmFzdFBhdGgpOgorICAgICAgICAqIGZ0bC9GVExDb21w
aWxlQmluYXJ5T3AuaDogQWRkZWQuCisKKyAgICAgICAgKiBmdGwvRlRMSW5saW5lQ2FjaGVEZXNj
cmlwdG9yLmg6CisgICAgICAgIChKU0M6OkZUTDo6QmluYXJ5T3BEZXNjcmlwdG9yOjpub2RlVHlw
ZSk6CisgICAgICAgIChKU0M6OkZUTDo6QmluYXJ5T3BEZXNjcmlwdG9yOjpzaXplKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpCaW5hcnlPcERlc2NyaXB0b3I6Om5hbWUpOgorICAgICAgICAoSlNDOjpG
VEw6OkJpbmFyeU9wRGVzY3JpcHRvcjo6ZmFzdFBhdGhJQ05hbWUpOgorICAgICAgICAoSlNDOjpG
VEw6OkJpbmFyeU9wRGVzY3JpcHRvcjo6c2xvd1BhdGhGdW5jdGlvbik6CisgICAgICAgIChKU0M6
OkZUTDo6QmluYXJ5T3BEZXNjcmlwdG9yOjpsZWZ0T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkZU
TDo6QmluYXJ5T3BEZXNjcmlwdG9yOjpyaWdodE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpGVEw6
OkJpbmFyeU9wRGVzY3JpcHRvcjo6QmluYXJ5T3BEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6
RlRMOjpBcml0aFN1YkRlc2NyaXB0b3I6OkFyaXRoU3ViRGVzY3JpcHRvcik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkZUTDo6QXJpdGhTdWJEZXNjcmlwdG9yOjpsZWZ0VHlwZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkZUTDo6QXJpdGhTdWJEZXNjcmlwdG9yOjpyaWdodFR5cGUpOiBEZWxl
dGVkLgorICAgICAgICAtIFJlZmFjdG9yIEFyaXRoU3ViRGVzY3JpcHRvciBpbnRvIEJpbmFyeU9w
RGVzY3JpcHRvciwgYW5kIHJlLWFkZCBhIHN1Yi1jbGFzcworICAgICAgICAgIEFyaXRoU3ViRGVz
Y3JpcHRvciBhcyBzcGVjaWFsaXphdGlvbnMgb2YgQmluYXJ5T3BEZXNjcmlwdG9yLgorCisgICAg
ICAgICogZnRsL0ZUTElubGluZUNhY2hlRGVzY3JpcHRvcklubGluZXMuaDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkZUTDo6QXJpdGhTdWJEZXNjcmlwdG9yOjpBcml0aFN1YkRlc2NyaXB0b3IpOgor
ICAgICAgICAoSlNDOjpGVEw6OkFyaXRoU3ViRGVzY3JpcHRvcjo6aWNTaXplKToKKworICAgICAg
ICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoQWRkT3JTdWIpOgorICAgICAgICAqIGZ0bC9GVExP
U1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0Ojp3aWxsQXJyaXZlQXRFeGl0
RnJvbUluZGlyZWN0RXhjZXB0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXQ6
OndpbGxBcnJpdmVBdE9TUkV4aXRGcm9tQ2FsbE9wZXJhdGlvbik6CisgICAgICAgICogZnRsL0ZU
TE9TUkV4aXQuaDoKKyAgICAgICAgKiBmdGwvRlRMU3RhdGUuaDoKKwogMjAxNS0xMi0wMSAgQ2Fy
bG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgcm9sbGluZyBvdXQgcjE5Mjg3Ni4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQJKHJldmlzaW9uIDE5Mjg4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTk3LDYgKzk5Nyw3IEBAIGlmIChFTkFCTEVf
RlRMX0pJVCkKICAgICAgICAgZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKICAgICAgICAgZnRsL0ZU
TENvbW1vblZhbHVlcy5jcHAKICAgICAgICAgZnRsL0ZUTENvbXBpbGUuY3BwCisgICAgICAgIGZ0
bC9GVExDb21waWxlQmluYXJ5T3AuY3BwCiAgICAgICAgIGZ0bC9GVExEV0FSRkRlYnVnTGluZUlu
Zm8uY3BwCiAgICAgICAgIGZ0bC9GVExEV0FSRlJlZ2lzdGVyLmNwcAogICAgICAgICBmdGwvRlRM
RGF0YVNlY3Rpb24uY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2oJKHJldmlzaW9uIDE5Mjg4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUy
Miw2ICs1MjIsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTENhcGFiaWxp
dGllcy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMQ29tbW9uVmFs
dWVzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExDb21waWxlLmNw
cCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExDb21waWxlQmluYXJ5T3Au
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTERhdGFTZWN0aW9uLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExEV0FSRkRlYnVnTGluZUlu
Zm8uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTERXQVJGUmVnaXN0
ZXIuY3BwIiAvPgpAQCAtMTI5MCw2ICsxMjkxLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGZ0bFxGVExDYXBhYmlsaXRpZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGZ0bFxGVExDb21tb25WYWx1ZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0
bFxGVExDb21waWxlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMQ29t
cGlsZUJpbmFyeU9wLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMRGF0
YVNlY3Rpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExEV0FSRkRl
YnVnTGluZUluZm8uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExEV0FS
RlJlZ2lzdGVyLmgiIC8+CkBAIC0xMzA2LDYgKzEzMDgsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZnRsXEZUTEZvck9TUkVudHJ5SklUQ29kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZnRsXEZUTEdlbmVyYXRlZEZ1bmN0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxmdGxcRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgiIC8+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9ySW5saW5lcy5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTElubGluZUNhY2hlU2l6ZS5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEludHJpbnNpY1JlcG9zaXRv
cnkuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExKSVRDb2RlLmgiIC8+
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0
ZXJzCShyZXZpc2lvbiAxOTI4ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHdvcmtpbmcgY29w
eSkKQEAgLTE1NjAsNiArMTU2MCw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxc
RlRMQ29tcGlsZS5jcHAiPgogICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4KICAgICA8L0NsQ29t
cGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExDb21waWxlQmluYXJ5T3Au
Y3BwIj4KKyAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRGF0YVNlY3Rpb24uY3BwIj4KICAgICAgIDxG
aWx0ZXI+ZnRsPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC00MTMyLDYgKzQxMzUsOSBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTENvbXBpbGUuaCI+CiAgICAgICA8
RmlsdGVyPmZ0bDwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZnRsXEZUTENvbXBpbGVCaW5hcnlPcC5oIj4KKyAgICAgIDxGaWx0ZXI+ZnRsPC9G
aWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxc
RlRMRGF0YVNlY3Rpb24uaCI+CiAgICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPgogICAgIDwvQ2xJ
bmNsdWRlPgpAQCAtNDE3NCw2ICs0MTgwLDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGZ0bFxGVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaCI+CiAgICAgICA8RmlsdGVyPmZ0bDwvRmls
dGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZU
TElubGluZUNhY2hlRGVzY3JpcHRvcklubGluZXMuaCI+CisgICAgICA8RmlsdGVyPmZ0bDwvRmls
dGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZU
TElubGluZUNhY2hlU2l6ZS5oIj4KICAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+CiAgICAgPC9D
bEluY2x1ZGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTky
ODg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE5NzYsNiArMTk3Niw5IEBACiAJCUZF
MTg3QTBEMUMwMzBENUMwMDM4QkJDQSAvKiBKSVREaXZHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMTg3QTBCMUMwMjI5MjMwMDM4QkJD
QSAvKiBKSVREaXZHZW5lcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVNTRVRfVEFHUyA9ICgpOyB9
OyB9OwogCQlGRTE4N0EwRTFDMDMwRDY0MDAzOEJCQ0EgLyogSklURGl2R2VuZXJhdG9yLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMTg3QTBBMUMw
MjI5MjMwMDM4QkJDQSAvKiBKSVREaXZHZW5lcmF0b3IuY3BwICovOyBzZXR0aW5ncyA9IHtBU1NF
VF9UQUdTID0gKCk7IH07IH07CiAJCUZFMTg3QTBGMUMwMzBENkMwMDM4QkJDQSAvKiBTbmlwcGV0
T3BlcmFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkUxODdBMEMxQzAyRUJBNzAwMzhCQkNBIC8qIFNuaXBwZXRPcGVyYW5kLmggKi87IHNldHRpbmdz
ID0ge0FTU0VUX1RBR1MgPSAoKTsgfTsgfTsKKwkJRkUxODdBMTgxQzBFMTNERDAwMzhCQkNBIC8q
IEZUTElubGluZUNhY2hlRGVzY3JpcHRvcklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMTg3QTE3MUMwRTEzQzYwMDM4QkJDQSAvKiBGVExJ
bmxpbmVDYWNoZURlc2NyaXB0b3JJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FTU0VUX1RBR1Mg
PSAoKTsgfTsgfTsKKwkJRkUxODdBMTkxQzBFMTNFMzAwMzhCQkNBIC8qIEZUTENvbXBpbGVCaW5h
cnlPcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTE4N0ExNTFDMEUxM0M2MDAzOEJCQ0EgLyogRlRMQ29tcGlsZUJpbmFyeU9wLmNwcCAqLzsgc2V0
dGluZ3MgPSB7QVNTRVRfVEFHUyA9ICgpOyB9OyB9OworCQlGRTE4N0ExQTFDMEUxM0U2MDAzOEJC
Q0EgLyogRlRMQ29tcGlsZUJpbmFyeU9wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRTE4N0ExNjFDMEUxM0M2MDAzOEJCQ0EgLyogRlRMQ29tcGlsZUJp
bmFyeU9wLmggKi87IHNldHRpbmdzID0ge0FTU0VUX1RBR1MgPSAoKTsgfTsgfTsKIAkJRkUxQzBG
RkQxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2Vw
dGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUZFMUMwRkZGMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRpb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxQzBGRkUxQjE5NEZEMTAwQjUzRkNB
IC8qIEV4Y2VwdGlvbi5jcHAgKi87IH07CiAJCUZFMjBDRTlEMTVGMDRBOTUwMERGMzQzMCAvKiBM
TEludENMb29wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFMjBDRTlCMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCAqLzsgfTsKQEAg
LTQxMjAsNiArNDEyMyw5IEBACiAJCUZFMTg3QTBBMUMwMjI5MjMwMDM4QkJDQSAvKiBKSVREaXZH
ZW5lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklURGl2
R2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUxODdBMEIxQzAy
MjkyMzAwMzhCQkNBIC8qIEpJVERpdkdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKSVREaXZHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkUxODdBMEMxQzAyRUJBNzAwMzhCQkNBIC8qIFNuaXBwZXRPcGVyYW5kLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNuaXBwZXRPcGVyYW5kLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZFMTg3QTE1MUMwRTEzQzYwMDM4QkJDQSAvKiBGVExDb21waWxlQmlu
YXJ5T3AuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMQ29tcGls
ZUJpbmFyeU9wLmNwcDsgcGF0aCA9IGZ0bC9GVExDb21waWxlQmluYXJ5T3AuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRTE4N0ExNjFDMEUxM0M2MDAzOEJCQ0EgLyogRlRMQ29t
cGlsZUJpbmFyeU9wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTENvbXBp
bGVCaW5hcnlPcC5oOyBwYXRoID0gZnRsL0ZUTENvbXBpbGVCaW5hcnlPcC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRTE4N0ExNzFDMEUxM0M2MDAzOEJCQ0EgLyogRlRMSW5saW5l
Q2FjaGVEZXNjcmlwdG9ySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3JJbmxpbmVzLmg7IHBhdGggPSBmdGwvRlRMSW5saW5l
Q2FjaGVEZXNjcmlwdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
RTFDMEZGQzFCMTkzRTk4MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEV4Y2VwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGRTFDMEZGRTFCMTk0RkQxMDBCNTNGQ0EgLyogRXhjZXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2VwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZFMjBDRTlCMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMSW50Q0xvb3AuY3BwOyBwYXRo
ID0gbGxpbnQvTExJbnRDTG9vcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00
Mzk0LDYgKzQ0MDAsOCBAQAogCQkJCTBGRUEwQTIxMTcwOTYwNjkwMEJCNzIyQyAvKiBGVExDb21t
b25WYWx1ZXMuaCAqLywKIAkJCQkwRkVBMEEwMDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ29tcGls
ZS5jcHAgKi8sCiAJCQkJMEZFQTBBMDExNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENvbXBpbGUuaCAq
LywKKwkJCQlGRTE4N0ExNTFDMEUxM0M2MDAzOEJCQ0EgLyogRlRMQ29tcGlsZUJpbmFyeU9wLmNw
cCAqLywKKwkJCQlGRTE4N0ExNjFDMEUxM0M2MDAzOEJCQ0EgLyogRlRMQ29tcGlsZUJpbmFyeU9w
LmggKi8sCiAJCQkJMEZFOTVGNzcxOEI1Njk0NzAwQjUzMUZCIC8qIEZUTERhdGFTZWN0aW9uLmNw
cCAqLywKIAkJCQkwRkU5NUY3ODE4QjU2OTQ3MDBCNTMxRkIgLyogRlRMRGF0YVNlY3Rpb24uaCAq
LywKIAkJCQkyQUM5MjJCOTE4QTE2MTgyMDAzQ0UwRkIgLyogRlRMRFdBUkZEZWJ1Z0xpbmVJbmZv
LmNwcCAqLywKQEAgLTQ0MjEsNiArNDQyOSw3IEBACiAJCQkJMEZEOEEzMTYxN0Q1MUYyMjAwQ0Ey
QzQwIC8qIEZUTEZvck9TUkVudHJ5SklUQ29kZS5oICovLAogCQkJCUE3OEE5NzdDMTc5NzM4RDUw
MDlERjc0NCAvKiBGVExHZW5lcmF0ZWRGdW5jdGlvbi5oICovLAogCQkJCTBGMjVGMUE3MTgxNjM1
RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaCAqLywKKwkJCQlGRTE4N0Ex
NzFDMEUxM0M2MDAzOEJCQ0EgLyogRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9ySW5saW5lcy5oICov
LAogCQkJCTBGMjVGMUE4MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZVNpemUuY3Bw
ICovLAogCQkJCTBGMjVGMUE5MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZVNpemUu
aCAqLywKIAkJCQkwRkVBMEEyNjE3MDk2MjNCMDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3Np
dG9yeS5jcHAgKi8sCkBAIC02NjU5LDYgKzY2NjgsNyBAQAogCQkJZmlsZXMgPSAoCiAJCQkJMEZG
QTU0OTgxNkI4ODM1MzAwQjNBOTgyIC8qIEE2NERPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMUZFNTFDMTkyMkEzQkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRkUxODdBMUExQzBFMTNFNjAwMzhCQkNBIC8qIEZUTENvbXBpbGVCaW5hcnlPcC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTMwRjNBODNDMTAwRjg0NzEwIC8qIEFic3RyYWN0TWFj
cm9Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTVGMEY1MTREMTA2M0MwMEFDNzY0
OSAvKiBBYnN0cmFjdFBDLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU2RTFCREFDREM3MDA4
MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODU0LDYgKzY4
NjQsNyBAQAogCQkJCUMyQzhEMDJEMTRBM0M2RTAwMDU3OEU2NSAvKiBDb3BpZWRTcGFjZUlubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0MxMUFEMUJDMzg2MkMwMEM3NENEQiAvKiBDb3B5
QmFycmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1QTUyRDAxN0FERDcxNzAwOEVDQjJEIC8q
IENvcHlUb2tlbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkUxODdBMTgxQzBFMTNERDAwMzhCQkNB
IC8qIEZUTElubGluZUNhY2hlRGVzY3JpcHRvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUMyMjM5RDE4MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQzIyMzlEMTkxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzIxOEQxNDAxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlz
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC04NTMzLDYgKzg1NDQsNyBAQAogCQkJCTBGQjE3NjYyMTk2
QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYz
QTFCRjkxQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMkZDQ0ZCMThBNjAwNzAwMDFBMjdGOCAvKiBERkdTYWZlcG9pbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkUxODdBMTkxQzBFMTNFMzAwMzhCQkNBIC8qIEZUTENv
bXBpbGVCaW5hcnlPcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOUREMjEzMjhERjgyMDAy
QjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4ODBG
MUYxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODY4ODBGNEQxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklU
NjQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q29tcGlsZS5jcHAJKHJldmlzaW9uIDE5Mjg4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEzICszNywxNCBAQAogI2lu
Y2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJEYXRhVmlldy5oIgogI2luY2x1ZGUg
IkRpc2Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIkZUTENvbXBpbGVCaW5hcnlPcC5oIgogI2luY2x1
ZGUgIkZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiRlRMRXhpdFRodW5r
R2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9ySW5saW5lcy5o
IgogI2luY2x1ZGUgIkZUTElubGluZUNhY2hlU2l6ZS5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUu
aCIKICNpbmNsdWRlICJGVExUaHVua3MuaCIKICNpbmNsdWRlICJGVExVbndpbmRJbmZvLmgiCi0j
aW5jbHVkZSAiSklUU3ViR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiTExWTUFQSS5oIgogI2luY2x1
ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIK
QEAgLTMwNywxMjUgKzMwOCwxMiBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0ZUNoZWNrSW5JQ0Zhc3RQ
YXRoKAogICAgIH0KIH0KIAotY2xhc3MgQmluYXJ5U25pcHBldFJlZ2lzdGVyQ29udGV4dCB7Ci0g
ICAgLy8gVGhlIHB1cnBvc2Ugb2YgdGhpcyBjbGFzcyBpcyB0byBzaHVmZmxlIHJlZ2lzdGVycyB0
byBnZXQgdGhlbSBpbnRvIHRoZSBzdGF0ZQotICAgIC8vIHRoYXQgYmFzZWxpbmUgY29kZSBleHBl
Y3RzIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGUgYmFzZWxpbmUgc25pcHBldCBnZW5lcmF0b3JzIGku
ZS4KLSAgICAvLyAgICAxLiBFbnN1cmUgdGhhdCB0aGUgaW5wdXRzIGFuZCBvdXRwdXQgYXJlIG5v
dCBpbiByZXNlcnZlZCByZWdpc3RlcnMgKHdoaWNoCi0gICAgLy8gICAgICAgaW5jbHVkZSB0aGUg
dGFnIHJlZ2lzdGVycykuIFRoZSBzbmlwcGV0IHdpbGwgdXNlIHRoZXNlIHJlc2VydmVkIHJlZ2lz
dGVycy4KLSAgICAvLyAgICAgICBIZW5jZSwgd2UgbmVlZCB0byBwdXQgdGhlIGlucHV0cyBhbmQg
b3V0cHV0IGluIG90aGVyIHNjcmF0Y2ggcmVnaXN0ZXJzLgotICAgIC8vICAgIDIuIFRhZyByZWdp
c3RlcnMgYXJlIGxvYWRlZCB3aXRoIHRoZSBleHBlY3RlZCB2YWx1ZXMuCi0gICAgLy8KLSAgICAv
LyBXaGVuIHRoZSBzbmlwcGV0IGlzIGRvbmU6Ci0gICAgLy8gICAgMS4gSWYgd2UgaGFkIHJlLWFz
c2lnbmVkIHRoZSByZXN1bHQgcmVnaXN0ZXIgdG8gYSBzY3JhdGNoLCB3ZSBuZWVkIHRvIGNvcHkg
dGhlCi0gICAgLy8gICAgICAgcmVzdWx0IGJhY2sgZnJvbSB0aGUgc2NyYXRjaC4KLSAgICAvLyAg
ICAyLiBSZXN0b3JlIHRoZSBpbnB1dCBhbmQgdGFnIHJlZ2lzdGVycyB0byB0aGUgdmFsdWVzIHRo
YXQgTExWTSBwdXQgdGhlcmUgb3JpZ2luYWxseS4KLSAgICAvLyAgICAgICBUaGF0IGlzIHVubGVz
cyB3aGVuIG9uZSBvZiB0aGVtIGlzIGFsc28gdGhlIHJlc3VsdCByZWdpc3Rlci4gSW4gdGhhdCBj
YXNlLCB3ZQotICAgIC8vICAgICAgIGRvbid0IHdhbnQgdG8gdHJhc2ggdGhlIHJlc3VsdCwgYW5k
IGhlbmNlLCBzaG91bGQgbm90IHJlc3RvcmUgaW50byBpdC4KLQotcHVibGljOgotICAgIEJpbmFy
eVNuaXBwZXRSZWdpc3RlckNvbnRleHQoU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yJiBhbGxvY2F0
b3IsIEdQUlJlZyYgcmVzdWx0LCBHUFJSZWcmIGxlZnQsIEdQUlJlZyYgcmlnaHQpCi0gICAgICAg
IDogbV9hbGxvY2F0b3IoYWxsb2NhdG9yKQotICAgICAgICAsIG1fcmVzdWx0KHJlc3VsdCkKLSAg
ICAgICAgLCBtX2xlZnQobGVmdCkKLSAgICAgICAgLCBtX3JpZ2h0KHJpZ2h0KQotICAgICAgICAs
IG1fb3JpZ1Jlc3VsdChyZXN1bHQpCi0gICAgICAgICwgbV9vcmlnTGVmdChsZWZ0KQotICAgICAg
ICAsIG1fb3JpZ1JpZ2h0KHJpZ2h0KQotICAgIHsKLSAgICAgICAgbV9hbGxvY2F0b3IubG9jayht
X3Jlc3VsdCk7Ci0gICAgICAgIG1fYWxsb2NhdG9yLmxvY2sobV9sZWZ0KTsKLSAgICAgICAgbV9h
bGxvY2F0b3IubG9jayhtX3JpZ2h0KTsKLQotICAgICAgICBSZWdpc3RlclNldCBpbnB1dEFuZE91
dHB1dFJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0KG1fbGVmdCwgbV9yaWdodCwgbV9yZXN1bHQpOwot
ICAgICAgICBSZWdpc3RlclNldCByZXNlcnZlZFJlZ2lzdGVyczsKLSAgICAgICAgZm9yIChHUFJS
ZWcgcmVnIDogR1BSSW5mbzo6cmVzZXJ2ZWRSZWdpc3RlcnMoKSkKLSAgICAgICAgICAgIHJlc2Vy
dmVkUmVnaXN0ZXJzLnNldChyZWcpOwotCi0gICAgICAgIGlmIChyZXNlcnZlZFJlZ2lzdGVycy5n
ZXQobV9sZWZ0KSkKLSAgICAgICAgICAgIG1fbGVmdCA9IG1fYWxsb2NhdG9yLmFsbG9jYXRlU2Ny
YXRjaEdQUigpOwotICAgICAgICBpZiAocmVzZXJ2ZWRSZWdpc3RlcnMuZ2V0KG1fcmlnaHQpKSB7
Ci0gICAgICAgICAgICBpZiAobV9vcmlnUmlnaHQgPT0gbV9vcmlnTGVmdCkKLSAgICAgICAgICAg
ICAgICBtX3JpZ2h0ID0gbV9sZWZ0OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IG1fcmlnaHQgPSBtX2FsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAocmVzZXJ2ZWRSZWdpc3RlcnMuZ2V0KG1fcmVzdWx0KSkgewotICAgICAgICAg
ICAgaWYgKG1fb3JpZ1Jlc3VsdCA9PSBtX29yaWdMZWZ0KQotICAgICAgICAgICAgICAgIG1fcmVz
dWx0ID0gbV9sZWZ0OwotICAgICAgICAgICAgZWxzZSBpZiAobV9vcmlnUmVzdWx0ID09IG1fb3Jp
Z1JpZ2h0KQotICAgICAgICAgICAgICAgIG1fcmVzdWx0ID0gbV9yaWdodDsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBtX3Jlc3VsdCA9IG1fYWxsb2NhdG9yLmFsbG9jYXRlU2Ny
YXRjaEdQUigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFpbnB1dEFuZE91dHB1dFJlZ2lz
dGVycy5nZXQoR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSkKLSAgICAgICAgICAgIG1fc2F2ZWRU
YWdNYXNrUmVnaXN0ZXIgPSBtX2FsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAg
ICAgaWYgKCFpbnB1dEFuZE91dHB1dFJlZ2lzdGVycy5nZXQoR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKSkKLSAgICAgICAgICAgIG1fc2F2ZWRUYWdUeXBlTnVtYmVyUmVnaXN0ZXIgPSBt
X2FsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGluaXRp
YWxpemVSZWdpc3RlcnMoQ0NhbGxIZWxwZXJzJiBqaXQpCi0gICAgewotICAgICAgICBpZiAobV9s
ZWZ0ICE9IG1fb3JpZ0xlZnQpCi0gICAgICAgICAgICBqaXQubW92ZShtX29yaWdMZWZ0LCBtX2xl
ZnQpOwotICAgICAgICBpZiAobV9yaWdodCAhPSBtX29yaWdSaWdodCAmJiBtX29yaWdSaWdodCAh
PSBtX29yaWdMZWZ0KQotICAgICAgICAgICAgaml0Lm1vdmUobV9vcmlnUmlnaHQsIG1fcmlnaHQp
OwotCi0gICAgICAgIGlmIChtX3NhdmVkVGFnTWFza1JlZ2lzdGVyICE9IEludmFsaWRHUFJSZWcp
Ci0gICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIsIG1fc2F2ZWRU
YWdNYXNrUmVnaXN0ZXIpOwotICAgICAgICBpZiAobV9zYXZlZFRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciAhPSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyLCBtX3NhdmVkVGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLQotICAgICAg
ICBqaXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKLSAgICB9Ci0KLSAgICB2
b2lkIHJlc3RvcmVSZWdpc3RlcnMoQ0NhbGxIZWxwZXJzJiBqaXQpCi0gICAgewotICAgICAgICBp
ZiAobV9vcmlnUmVzdWx0ICE9IG1fcmVzdWx0KQotICAgICAgICAgICAgaml0Lm1vdmUobV9yZXN1
bHQsIG1fb3JpZ1Jlc3VsdCk7Ci0gICAgICAgIGlmIChtX29yaWdMZWZ0ICE9IG1fbGVmdCAmJiBt
X29yaWdMZWZ0ICE9IG1fb3JpZ1Jlc3VsdCkKLSAgICAgICAgICAgIGppdC5tb3ZlKG1fbGVmdCwg
bV9vcmlnTGVmdCk7Ci0gICAgICAgIGlmIChtX29yaWdSaWdodCAhPSBtX3JpZ2h0ICYmIG1fb3Jp
Z1JpZ2h0ICE9IG1fb3JpZ1Jlc3VsdCAmJiBtX29yaWdSaWdodCAhPSBtX29yaWdMZWZ0KQotICAg
ICAgICAgICAgaml0Lm1vdmUobV9yaWdodCwgbV9vcmlnUmlnaHQpOwotCi0gICAgICAgIC8vIFdl
IGFyZSBndWFyYW50ZWVkIHRoYXQgdGhlIHRhZyByZWdpc3RlcnMgYXJlIG5vdCB0aGUgc2FtZSBh
cyB0aGUgb3JpZ2luYWwgaW5wdXQKLSAgICAgICAgLy8gb3Igb3V0cHV0IHJlZ2lzdGVycy4gT3Ro
ZXJ3aXNlLCB3ZSB3b3VsZCBub3QgaGF2ZSBhbGxvY2F0ZWQgYSBzY3JhdGNoIGZvciB0aGVtLgot
ICAgICAgICAvLyBIZW5jZSwgd2UgZG9uJ3QgbmVlZCB0byBuZWVkIHRvIGNoZWNrIGZvciBvdmVy
bGFwIGxpa2Ugd2UgZG8gZm9yIHRoZSBpbnB1dCByZWdpc3RlcnMuCi0gICAgICAgIGlmIChtX3Nh
dmVkVGFnTWFza1JlZ2lzdGVyICE9IEludmFsaWRHUFJSZWcpIHsKLSAgICAgICAgICAgIEFTU0VS
VChHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIgIT0gbV9vcmlnTGVmdCk7Ci0gICAgICAgICAgICBB
U1NFUlQoR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyICE9IG1fb3JpZ1JpZ2h0KTsKLSAgICAgICAg
ICAgIEFTU0VSVChHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIgIT0gbV9vcmlnUmVzdWx0KTsKLSAg
ICAgICAgICAgIGppdC5tb3ZlKG1fc2F2ZWRUYWdNYXNrUmVnaXN0ZXIsIEdQUkluZm86OnRhZ01h
c2tSZWdpc3Rlcik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fc2F2ZWRUYWdUeXBlTnVtYmVy
UmVnaXN0ZXIgIT0gSW52YWxpZEdQUlJlZykgewotICAgICAgICAgICAgQVNTRVJUKEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciAhPSBtX29yaWdMZWZ0KTsKLSAgICAgICAgICAgIEFTU0VS
VChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIgIT0gbV9vcmlnUmlnaHQpOwotICAgICAg
ICAgICAgQVNTRVJUKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciAhPSBtX29yaWdSZXN1
bHQpOwotICAgICAgICAgICAgaml0Lm1vdmUobV9zYXZlZFRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgfQotICAgIH0KLQotcHJp
dmF0ZToKLSAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3ImIG1fYWxsb2NhdG9yOwotCi0gICAg
R1BSUmVnJiBtX3Jlc3VsdDsKLSAgICBHUFJSZWcmIG1fbGVmdDsKLSAgICBHUFJSZWcmIG1fcmln
aHQ7Ci0KLSAgICBHUFJSZWcgbV9vcmlnUmVzdWx0OwotICAgIEdQUlJlZyBtX29yaWdMZWZ0Owot
ICAgIEdQUlJlZyBtX29yaWdSaWdodDsKLQotICAgIEdQUlJlZyBtX3NhdmVkVGFnTWFza1JlZ2lz
dGVyIHsgSW52YWxpZEdQUlJlZyB9OwotICAgIEdQUlJlZyBtX3NhdmVkVGFnVHlwZU51bWJlclJl
Z2lzdGVyIHsgSW52YWxpZEdQUlJlZyB9OwotfTsKLQotc3RhdGljIHZvaWQgZ2VuZXJhdGVBcml0
aFN1YklDRmFzdFBhdGgoCitzdGF0aWMgdm9pZCBnZW5lcmF0ZUJpbmFyeU9wSUNGYXN0UGF0aCgK
ICAgICBTdGF0ZSYgc3RhdGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBHZW5lcmF0ZWRGdW5jdGlv
biBnZW5lcmF0ZWRGdW5jdGlvbiwKLSAgICBTdGFja01hcHM6OlJlY29yZE1hcCYgcmVjb3JkTWFw
LCBBcml0aFN1YkRlc2NyaXB0b3ImIGljKQorICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwJiByZWNv
cmRNYXAsIEJpbmFyeU9wRGVzY3JpcHRvciYgaWMpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUuZ3Jh
cGgubV92bTsKLSAgICBzaXplX3Qgc2l6ZU9mSUMgPSBzaXplT2ZBcml0aFN1YigpOworICAgIHNp
emVfdCBzaXplT2ZJQyA9IGljLnNpemUoKTsKIAogICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwOjpp
dGVyYXRvciBpdGVyID0gcmVjb3JkTWFwLmZpbmQoaWMuc3RhY2ttYXBJRCgpKTsKICAgICBpZiAo
aXRlciA9PSByZWNvcmRNYXAuZW5kKCkpCkBAIC00NDAsNDYgKzMyOCwyNSBAQCBzdGF0aWMgdm9p
ZCBnZW5lcmF0ZUFyaXRoU3ViSUNGYXN0UGF0aCgKIAogICAgICAgICBDQ2FsbEhlbHBlcnMgZmFz
dFBhdGhKSVQoJnZtLCBjb2RlQmxvY2spOwogCi0gICAgICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRP
cGVyYW5kKGljLmxlZnRUeXBlKCkpOwotICAgICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJh
bmQoaWMucmlnaHRUeXBlKCkpOwotCiAgICAgICAgIEdQUlJlZyByZXN1bHQgPSByZWNvcmQubG9j
YXRpb25zWzBdLmRpcmVjdEdQUigpOwogICAgICAgICBHUFJSZWcgbGVmdCA9IHJlY29yZC5sb2Nh
dGlvbnNbMV0uZGlyZWN0R1BSKCk7CiAgICAgICAgIEdQUlJlZyByaWdodCA9IHJlY29yZC5sb2Nh
dGlvbnNbMl0uZGlyZWN0R1BSKCk7Ci0KICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVy
cyA9IHVzZWRSZWdpc3RlcnNGb3IocmVjb3JkKTsKLSAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yIGFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKLQotICAgICAgICBCaW5hcnlTbmlwcGV0
UmVnaXN0ZXJDb250ZXh0IGNvbnRleHQoYWxsb2NhdG9yLCByZXN1bHQsIGxlZnQsIHJpZ2h0KTsK
LQotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hH
UFIoKTsKLSAgICAgICAgRlBSUmVnIGxlZnRGUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNo
RlBSKCk7Ci0gICAgICAgIEZQUlJlZyByaWdodEZQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0
Y2hGUFIoKTsKLSAgICAgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBJbnZhbGlkRlBSUmVnOwogCi0g
ICAgICAgIEpJVFN1YkdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgSlNW
YWx1ZVJlZ3MocmVzdWx0KSwgSlNWYWx1ZVJlZ3MobGVmdCksIEpTVmFsdWVSZWdzKHJpZ2h0KSwg
bGVmdEZQUiwgcmlnaHRGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIpOworICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgZG9uZTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dQYXRo
U3RhcnQ7CiAKLSAgICAgICAgYXV0byBudW1iZXJPZkJ5dGVzVXNlZFRvUHJlc2VydmVSZXVzZWRS
ZWdpc3RlcnMgPQotICAgICAgICAgICAgYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJz
QnlQdXNoaW5nKGZhc3RQYXRoSklULCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3Rh
Y2tTcGFjZTo6Tm9FeHRyYVNwYWNlKTsKLQotICAgICAgICBjb250ZXh0LmluaXRpYWxpemVSZWdp
c3RlcnMoZmFzdFBhdGhKSVQpOwotICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aChmYXN0UGF0
aEpJVCk7Ci0KLSAgICAgICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7Ci0gICAgICAg
IGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsoJmZhc3RQYXRoSklUKTsKLSAgICAgICAgY29udGV4dC5y
ZXN0b3JlUmVnaXN0ZXJzKGZhc3RQYXRoSklUKTsKLSAgICAgICAgYWxsb2NhdG9yLnJlc3RvcmVS
ZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoZmFzdFBhdGhKSVQsIG51bWJlck9mQnl0ZXNVc2VkVG9Q
cmVzZXJ2ZVJldXNlZFJlZ2lzdGVycywKLSAgICAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvcjo6RXh0cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxsKTsKLSAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIGRvbmUgPSBmYXN0UGF0aEpJVC5qdW1wKCk7Ci0KLSAgICAgICAgZ2VuLnNsb3dQ
YXRoSnVtcExpc3QoKS5saW5rKCZmYXN0UGF0aEpJVCk7Ci0gICAgICAgIGNvbnRleHQucmVzdG9y
ZVJlZ2lzdGVycyhmYXN0UGF0aEpJVCk7Ci0gICAgICAgIGFsbG9jYXRvci5yZXN0b3JlUmV1c2Vk
UmVnaXN0ZXJzQnlQb3BwaW5nKGZhc3RQYXRoSklULCBudW1iZXJPZkJ5dGVzVXNlZFRvUHJlc2Vy
dmVSZXVzZWRSZWdpc3RlcnMsCi0gICAgICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6
OkV4dHJhU3RhY2tTcGFjZTo6U3BhY2VGb3JDQ2FsbCk7Ci0gICAgICAgIENDYWxsSGVscGVyczo6
SnVtcCBzbG93UGF0aFN0YXJ0ID0gZmFzdFBhdGhKSVQuanVtcCgpOworICAgICAgICBzd2l0Y2gg
KGljLm5vZGVUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcml0aFN1YjoKKyAgICAgICAgICAgIGdl
bmVyYXRlQXJpdGhTdWJGYXN0UGF0aChpYywgZmFzdFBhdGhKSVQsIHJlc3VsdCwgbGVmdCwgcmln
aHQsIHVzZWRSZWdpc3RlcnMsIGRvbmUsIHNsb3dQYXRoU3RhcnQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICB9CiAKICAgICAgICAgY2hhciogc3RhcnRPZklDID0gYml0d2lzZV9j
YXN0PGNoYXIqPihnZW5lcmF0ZWRGdW5jdGlvbikgKyByZWNvcmQuaW5zdHJ1Y3Rpb25PZmZzZXQ7
Ci0gICAgICAgIGdlbmVyYXRlSW5saW5lSWZQb3NzaWJsZU91dE9mTGluZUlmTm90KHN0YXRlLCB2
bSwgY29kZUJsb2NrLCBmYXN0UGF0aEpJVCwgc3RhcnRPZklDLCBzaXplT2ZJQywgIkFyaXRoU3Vi
IGlubGluZSBjYWNoZSBmYXN0IHBhdGgiLCBbJl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIEND
YWxsSGVscGVycyYsIGJvb2wpIHsKKyAgICAgICAgY29uc3QgY2hhciogZmFzdFBhdGhJQ05hbWUg
PSBpYy5mYXN0UGF0aElDTmFtZSgpOworICAgICAgICBnZW5lcmF0ZUlubGluZUlmUG9zc2libGVP
dXRPZkxpbmVJZk5vdChzdGF0ZSwgdm0sIGNvZGVCbG9jaywgZmFzdFBhdGhKSVQsIHN0YXJ0T2ZJ
Qywgc2l6ZU9mSUMsIGZhc3RQYXRoSUNOYW1lLCBbJl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIs
IENDYWxsSGVscGVycyYsIGJvb2wpIHsKICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhkb25l
LCBDb2RlTG9jYXRpb25MYWJlbChzdGFydE9mSUMgKyBzaXplT2ZJQykpOwogICAgICAgICAgICAg
c3RhdGUuZmluYWxpemVyLT5zaWRlQ29kZUxpbmtCdWZmZXItPmxpbmsoaWMubV9zbG93UGF0aERv
bmVbaV0sIENvZGVMb2NhdGlvbkxhYmVsKHN0YXJ0T2ZJQyArIHNpemVPZklDKSk7CiAgICAgICAg
ICAgICAKQEAgLTY1MCw3ICs1MTcsNyBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25T
dGFja01hcHMoCiAgICAgICAgICAgICAgICAgZXhpdC5tX2V4Y2VwdGlvbkhhbmRsZXJDYWxsU2l0
ZUluZGV4ID0gY2FsbFNpdGVJbmRleDsKIAogICAgICAgICAgICAgICAgIE9TUkV4aXQqIGNhbGxP
cGVyYXRpb25FeGl0ID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBpZiAoZXhpdERlc2NyaXB0
b3IubV9leGNlcHRpb25UeXBlID09IEV4Y2VwdGlvblR5cGU6OlN1YkdlbmVyYXRvcikgeworICAg
ICAgICAgICAgICAgIGlmIChleGl0RGVzY3JpcHRvci5tX2V4Y2VwdGlvblR5cGUgPT0gRXhjZXB0
aW9uVHlwZTo6QmluYXJ5T3BHZW5lcmF0b3IpIHsKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0
aW9uSGFuZGxlck1hbmFnZXIuYWRkTmV3Q2FsbE9wZXJhdGlvbkV4aXQoaXRlci0+dmFsdWVbal0u
aW5kZXgsIHN0YXRlLmppdENvZGUtPm9zckV4aXQuc2l6ZSgpIC0gMSk7CiAgICAgICAgICAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25FeGl0ID0gJmV4aXQ7CiAgICAgICAgICAgICAgICAgfSBlbHNl
CkBAIC02OTQsNyArNTYxLDcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tN
YXBzKAogICAgICAgICAgICAgICAgICAgICBHUFJSZWcgYmFzZSA9IHJlY29yZC5sb2NhdGlvbnNb
MV0uZGlyZWN0R1BSKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlID09IHJlc3VsdCkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25FeGl0LT5yZWdpc3RlcnNUb1By
ZXNlcnZlRm9yQ2FsbFRoYXRNaWdodFRocm93LnNldChiYXNlKTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKGV4aXREZXNjcmlwdG9yLm1fZXhjZXB0aW9uVHlwZSA9PSBFeGNlcHRpb25UeXBl
OjpTdWJHZW5lcmF0b3IpIHsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV4aXREZXNjcmlw
dG9yLm1fZXhjZXB0aW9uVHlwZSA9PSBFeGNlcHRpb25UeXBlOjpCaW5hcnlPcEdlbmVyYXRvcikg
ewogICAgICAgICAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVjb3JkLmxvY2F0aW9uc1sw
XS5kaXJlY3RHUFIoKTsKICAgICAgICAgICAgICAgICAgICAgR1BSUmVnIGxlZnQgPSByZWNvcmQu
bG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOwogICAgICAgICAgICAgICAgICAgICBHUFJSZWcgcmln
aHQgPSByZWNvcmQubG9jYXRpb25zWzJdLmRpcmVjdEdQUigpOwpAQCAtNzU1LDcgKzYyMiw3IEBA
IHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICBpZiAoIXN0YXRl
LmdldEJ5SWRzLmlzRW1wdHkoKQogICAgICAgICB8fCAhc3RhdGUucHV0QnlJZHMuaXNFbXB0eSgp
CiAgICAgICAgIHx8ICFzdGF0ZS5jaGVja0lucy5pc0VtcHR5KCkKLSAgICAgICAgfHwgIXN0YXRl
LmFyaXRoU3Vicy5pc0VtcHR5KCkKKyAgICAgICAgfHwgIXN0YXRlLmJpbmFyeU9wcy5pc0VtcHR5
KCkKICAgICAgICAgfHwgIXN0YXRlLmxhenlTbG93UGF0aHMuaXNFbXB0eSgpKSB7CiAgICAgICAg
IENDYWxsSGVscGVycyBzbG93UGF0aEpJVCgmdm0sIGNvZGVCbG9jayk7CiAgICAgICAgIApAQCAt
OTAzLDE3ICs3NzAsMTcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBz
KAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IHN0
YXRlLmFyaXRoU3Vicy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIEFyaXRoU3ViRGVzY3Jp
cHRvciYgYXJpdGhTdWIgPSBzdGF0ZS5hcml0aFN1YnNbaV07CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSBzdGF0ZS5iaW5hcnlPcHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBCaW5hcnlP
cERlc2NyaXB0b3ImIGJpbmFyeU9wID0gc3RhdGUuYmluYXJ5T3BzW2ldOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQotICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkhhbmRsaW5nIEFyaXRoU3ViIHN0YWNrbWFwICMiLCBhcml0aFN1Yi5z
dGFja21hcElEKCksICJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIkhhbmRsaW5nICIs
IGJpbmFyeU9wLm5hbWUoKSwgIiBzdGFja21hcCAjIiwgYmluYXJ5T3Auc3RhY2ttYXBJRCgpLCAi
XG4iKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYXV0byBpdGVyID0gcmVjb3JkTWFwLmZp
bmQoYXJpdGhTdWIuc3RhY2ttYXBJRCgpKTsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IHJlY29y
ZE1hcC5maW5kKGJpbmFyeU9wLnN0YWNrbWFwSUQoKSk7CiAgICAgICAgICAgICBpZiAoaXRlciA9
PSByZWNvcmRNYXAuZW5kKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIEl0IHdhcyBv
cHRpbWl6ZWQgb3V0LgogICAgICAgICAgICAgCi0gICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4gPSBhcml0aFN1Yi5jb2RlT3JpZ2luKCk7CisgICAgICAgICAgICBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4gPSBiaW5hcnlPcC5jb2RlT3JpZ2luKCk7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAg
ICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gaXRlci0+dmFsdWVbaV0ucmVjb3JkOwogICAg
ICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJzRm9y
KHJlY29yZCk7CkBAIC05MjIsNyArNzg5LDcgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNl
ZE9uU3RhY2tNYXBzKAogICAgICAgICAgICAgICAgIEdQUlJlZyBsZWZ0ID0gcmVjb3JkLmxvY2F0
aW9uc1sxXS5kaXJlY3RHUFIoKTsKICAgICAgICAgICAgICAgICBHUFJSZWcgcmlnaHQgPSByZWNv
cmQubG9jYXRpb25zWzJdLmRpcmVjdEdQUigpOwogCi0gICAgICAgICAgICAgICAgYXJpdGhTdWIu
bV9zbG93UGF0aFN0YXJ0cy5hcHBlbmQoc2xvd1BhdGhKSVQubGFiZWwoKSk7CisgICAgICAgICAg
ICAgICAgYmluYXJ5T3AubV9zbG93UGF0aFN0YXJ0cy5hcHBlbmQoc2xvd1BhdGhKSVQubGFiZWwo
KSk7CiAgICAgICAgICAgICAgICAgYm9vbCBhZGRlZFVuaXF1ZUV4Y2VwdGlvbkp1bXAgPSBhZGRO
ZXdFeGNlcHRpb25KdW1wSWZOZWNlc3NhcnkoaXRlci0+dmFsdWVbaV0uaW5kZXgpOwogICAgICAg
ICAgICAgICAgIGlmIChyZXN1bHQgPT0gbGVmdCB8fCByZXN1bHQgPT0gcmlnaHQpIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBzaXR1YXRpb24gaGFzIGEgcmVhbGx5IGludGVyZXN0aW5n
IHJlZ2lzdGVyIHByZXNlcnZhdGlvbiBzdG9yeS4KQEAgLTkzMiw5ICs3OTksOSBAQCBzdGF0aWMg
dm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihzdGF0ZSwgdXNlZFJlZ2lzdGVycywgc2xvd1Bh
dGhKSVQsIGNvZGVPcmlnaW4sIGFkZGVkVW5pcXVlRXhjZXB0aW9uSnVtcCA/ICZleGNlcHRpb25K
dW1wc1RvTGluay5sYXN0KCkuZmlyc3QgOiAmZXhjZXB0aW9uVGFyZ2V0LAotICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRpb25WYWx1ZVN1YiwgcmVzdWx0LCBsZWZ0LCByaWdodCkuY2FsbCgpOwor
ICAgICAgICAgICAgICAgICAgICBiaW5hcnlPcC5zbG93UGF0aEZ1bmN0aW9uKCksIHJlc3VsdCwg
bGVmdCwgcmlnaHQpLmNhbGwoKTsKIAotICAgICAgICAgICAgICAgIGFyaXRoU3ViLm1fc2xvd1Bh
dGhEb25lLmFwcGVuZChzbG93UGF0aEpJVC5qdW1wKCkpOworICAgICAgICAgICAgICAgIGJpbmFy
eU9wLm1fc2xvd1BhdGhEb25lLmFwcGVuZChzbG93UGF0aEpJVC5qdW1wKCkpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKQEAgLTEwMjIsOSArODg5LDkgQEAgc3RhdGljIHZvaWQgZml4RnVu
Y3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAgICAgICAgIHN0YXRlLCBjb2RlQmxvY2ss
IGdlbmVyYXRlZEZ1bmN0aW9uLCByZWNvcmRNYXAsIHN0YXRlLmNoZWNrSW5zW2ldLAogICAgICAg
ICAgICAgICAgIHNpemVPZkluKCkpOyAKICAgICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBzdGF0ZS5hcml0aFN1YnMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBBcml0aFN1
YkRlc2NyaXB0b3ImIGFyaXRoU3ViID0gc3RhdGUuYXJpdGhTdWJzW2ldOwotICAgICAgICAgICAg
Z2VuZXJhdGVBcml0aFN1YklDRmFzdFBhdGgoc3RhdGUsIGNvZGVCbG9jaywgZ2VuZXJhdGVkRnVu
Y3Rpb24sIHJlY29yZE1hcCwgYXJpdGhTdWIpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBz
dGF0ZS5iaW5hcnlPcHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBCaW5hcnlPcERlc2Ny
aXB0b3ImIGJpbmFyeU9wID0gc3RhdGUuYmluYXJ5T3BzW2ldOworICAgICAgICAgICAgZ2VuZXJh
dGVCaW5hcnlPcElDRmFzdFBhdGgoc3RhdGUsIGNvZGVCbG9jaywgZ2VuZXJhdGVkRnVuY3Rpb24s
IHJlY29yZE1hcCwgYmluYXJ5T3ApOwogICAgICAgICB9CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IHN0YXRlLmxhenlTbG93UGF0aHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBMYXp5
U2xvd1BhdGhEZXNjcmlwdG9yJiBsYXp5U2xvd1BhdGggPSBzdGF0ZS5sYXp5U2xvd1BhdGhzW2ld
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlQmluYXJ5T3AuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZUJpbmFy
eU9wLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29t
cGlsZUJpbmFyeU9wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGVExDb21waWxlQmluYXJ5T3AuaCIKKworI2lmIEVOQUJMRShGVExfSklU
KQorCisjaW5jbHVkZSAiREZHTm9kZVR5cGUuaCIKKyNpbmNsdWRlICJGVExJbmxpbmVDYWNoZURl
c2NyaXB0b3IuaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCisjaW5jbHVkZSAiSklUU3ViR2VuZXJh
dG9yLmgiCisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordXNpbmcgbmFtZXNwYWNlIERGRzsKKworY2xhc3Mg
QmluYXJ5U25pcHBldFJlZ2lzdGVyQ29udGV4dCB7CisgICAgLy8gVGhlIHB1cnBvc2Ugb2YgdGhp
cyBjbGFzcyBpcyB0byBzaHVmZmxlIHJlZ2lzdGVycyB0byBnZXQgdGhlbSBpbnRvIHRoZSBzdGF0
ZQorICAgIC8vIHRoYXQgYmFzZWxpbmUgY29kZSBleHBlY3RzIHNvIHRoYXQgd2UgY2FuIHVzZSB0
aGUgYmFzZWxpbmUgc25pcHBldCBnZW5lcmF0b3JzIGkuZS4KKyAgICAvLyAgICAxLiBFbnN1cmUg
dGhhdCB0aGUgaW5wdXRzIGFuZCBvdXRwdXQgYXJlIG5vdCBpbiByZXNlcnZlZCByZWdpc3RlcnMg
KHdoaWNoCisgICAgLy8gICAgICAgaW5jbHVkZSB0aGUgdGFnIHJlZ2lzdGVycykuIFRoZSBzbmlw
cGV0IHdpbGwgdXNlIHRoZXNlIHJlc2VydmVkIHJlZ2lzdGVycy4KKyAgICAvLyAgICAgICBIZW5j
ZSwgd2UgbmVlZCB0byBwdXQgdGhlIGlucHV0cyBhbmQgb3V0cHV0IGluIG90aGVyIHNjcmF0Y2gg
cmVnaXN0ZXJzLgorICAgIC8vICAgIDIuIFRhZyByZWdpc3RlcnMgYXJlIGxvYWRlZCB3aXRoIHRo
ZSBleHBlY3RlZCB2YWx1ZXMuCisgICAgLy8KKyAgICAvLyBXaGVuIHRoZSBzbmlwcGV0IGlzIGRv
bmU6CisgICAgLy8gICAgMS4gSWYgd2UgaGFkIHJlLWFzc2lnbmVkIHRoZSByZXN1bHQgcmVnaXN0
ZXIgdG8gYSBzY3JhdGNoLCB3ZSBuZWVkIHRvIGNvcHkgdGhlCisgICAgLy8gICAgICAgcmVzdWx0
IGJhY2sgZnJvbSB0aGUgc2NyYXRjaC4KKyAgICAvLyAgICAyLiBSZXN0b3JlIHRoZSBpbnB1dCBh
bmQgdGFnIHJlZ2lzdGVycyB0byB0aGUgdmFsdWVzIHRoYXQgTExWTSBwdXQgdGhlcmUgb3JpZ2lu
YWxseS4KKyAgICAvLyAgICAgICBUaGF0IGlzIHVubGVzcyB3aGVuIG9uZSBvZiB0aGVtIGlzIGFs
c28gdGhlIHJlc3VsdCByZWdpc3Rlci4gSW4gdGhhdCBjYXNlLCB3ZQorICAgIC8vICAgICAgIGRv
bid0IHdhbnQgdG8gdHJhc2ggdGhlIHJlc3VsdCwgYW5kIGhlbmNlLCBzaG91bGQgbm90IHJlc3Rv
cmUgaW50byBpdC4KKworcHVibGljOgorICAgIEJpbmFyeVNuaXBwZXRSZWdpc3RlckNvbnRleHQo
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEdQUlJlZyYgcmVzdWx0LCBHUFJS
ZWcmIGxlZnQsIEdQUlJlZyYgcmlnaHQpCisgICAgICAgIDogbV9hbGxvY2F0b3IoYWxsb2NhdG9y
KQorICAgICAgICAsIG1fcmVzdWx0KHJlc3VsdCkKKyAgICAgICAgLCBtX2xlZnQobGVmdCkKKyAg
ICAgICAgLCBtX3JpZ2h0KHJpZ2h0KQorICAgICAgICAsIG1fb3JpZ1Jlc3VsdChyZXN1bHQpCisg
ICAgICAgICwgbV9vcmlnTGVmdChsZWZ0KQorICAgICAgICAsIG1fb3JpZ1JpZ2h0KHJpZ2h0KQor
ICAgIHsKKyAgICAgICAgbV9hbGxvY2F0b3IubG9jayhtX3Jlc3VsdCk7CisgICAgICAgIG1fYWxs
b2NhdG9yLmxvY2sobV9sZWZ0KTsKKyAgICAgICAgbV9hbGxvY2F0b3IubG9jayhtX3JpZ2h0KTsK
KworICAgICAgICBSZWdpc3RlclNldCBpbnB1dEFuZE91dHB1dFJlZ2lzdGVycyA9IFJlZ2lzdGVy
U2V0KG1fbGVmdCwgbV9yaWdodCwgbV9yZXN1bHQpOworICAgICAgICBSZWdpc3RlclNldCByZXNl
cnZlZFJlZ2lzdGVyczsKKyAgICAgICAgZm9yIChHUFJSZWcgcmVnIDogR1BSSW5mbzo6cmVzZXJ2
ZWRSZWdpc3RlcnMoKSkKKyAgICAgICAgICAgIHJlc2VydmVkUmVnaXN0ZXJzLnNldChyZWcpOwor
CisgICAgICAgIGlmIChyZXNlcnZlZFJlZ2lzdGVycy5nZXQobV9sZWZ0KSkKKyAgICAgICAgICAg
IG1fbGVmdCA9IG1fYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICBpZiAo
cmVzZXJ2ZWRSZWdpc3RlcnMuZ2V0KG1fcmlnaHQpKSB7CisgICAgICAgICAgICBpZiAobV9vcmln
UmlnaHQgPT0gbV9vcmlnTGVmdCkKKyAgICAgICAgICAgICAgICBtX3JpZ2h0ID0gbV9sZWZ0Owor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fcmlnaHQgPSBtX2FsbG9jYXRvci5h
bGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzZXJ2ZWRSZWdp
c3RlcnMuZ2V0KG1fcmVzdWx0KSkgeworICAgICAgICAgICAgaWYgKG1fb3JpZ1Jlc3VsdCA9PSBt
X29yaWdMZWZ0KQorICAgICAgICAgICAgICAgIG1fcmVzdWx0ID0gbV9sZWZ0OworICAgICAgICAg
ICAgZWxzZSBpZiAobV9vcmlnUmVzdWx0ID09IG1fb3JpZ1JpZ2h0KQorICAgICAgICAgICAgICAg
IG1fcmVzdWx0ID0gbV9yaWdodDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBt
X3Jlc3VsdCA9IG1fYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCFpbnB1dEFuZE91dHB1dFJlZ2lzdGVycy5nZXQoR1BSSW5mbzo6dGFnTWFz
a1JlZ2lzdGVyKSkKKyAgICAgICAgICAgIG1fc2F2ZWRUYWdNYXNrUmVnaXN0ZXIgPSBtX2FsbG9j
YXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgaWYgKCFpbnB1dEFuZE91dHB1dFJl
Z2lzdGVycy5nZXQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSkKKyAgICAgICAgICAg
IG1fc2F2ZWRUYWdUeXBlTnVtYmVyUmVnaXN0ZXIgPSBtX2FsbG9jYXRvci5hbGxvY2F0ZVNjcmF0
Y2hHUFIoKTsKKyAgICB9CisKKyAgICB2b2lkIGluaXRpYWxpemVSZWdpc3RlcnMoQ0NhbGxIZWxw
ZXJzJiBqaXQpCisgICAgeworICAgICAgICBpZiAobV9sZWZ0ICE9IG1fb3JpZ0xlZnQpCisgICAg
ICAgICAgICBqaXQubW92ZShtX29yaWdMZWZ0LCBtX2xlZnQpOworICAgICAgICBpZiAobV9yaWdo
dCAhPSBtX29yaWdSaWdodCAmJiBtX29yaWdSaWdodCAhPSBtX29yaWdMZWZ0KQorICAgICAgICAg
ICAgaml0Lm1vdmUobV9vcmlnUmlnaHQsIG1fcmlnaHQpOworICAgICAgICAKKyAgICAgICAgaWYg
KG1fc2F2ZWRUYWdNYXNrUmVnaXN0ZXIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIGpp
dC5tb3ZlKEdQUkluZm86OnRhZ01hc2tSZWdpc3RlciwgbV9zYXZlZFRhZ01hc2tSZWdpc3Rlcik7
CisgICAgICAgIGlmIChtX3NhdmVkVGFnVHlwZU51bWJlclJlZ2lzdGVyICE9IEludmFsaWRHUFJS
ZWcpCisgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIs
IG1fc2F2ZWRUYWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworCisgICAgICAgIGppdC5lbWl0TWF0ZXJp
YWxpemVUYWdDaGVja1JlZ2lzdGVycygpOworICAgIH0KKworICAgIHZvaWQgcmVzdG9yZVJlZ2lz
dGVycyhDQ2FsbEhlbHBlcnMmIGppdCkKKyAgICB7CisgICAgICAgIGlmIChtX29yaWdSZXN1bHQg
IT0gbV9yZXN1bHQpCisgICAgICAgICAgICBqaXQubW92ZShtX3Jlc3VsdCwgbV9vcmlnUmVzdWx0
KTsKKyAgICAgICAgaWYgKG1fb3JpZ0xlZnQgIT0gbV9sZWZ0ICYmIG1fb3JpZ0xlZnQgIT0gbV9v
cmlnUmVzdWx0KQorICAgICAgICAgICAgaml0Lm1vdmUobV9sZWZ0LCBtX29yaWdMZWZ0KTsKKyAg
ICAgICAgaWYgKG1fb3JpZ1JpZ2h0ICE9IG1fcmlnaHQgJiYgbV9vcmlnUmlnaHQgIT0gbV9vcmln
UmVzdWx0ICYmIG1fb3JpZ1JpZ2h0ICE9IG1fb3JpZ0xlZnQpCisgICAgICAgICAgICBqaXQubW92
ZShtX3JpZ2h0LCBtX29yaWdSaWdodCk7CisKKyAgICAgICAgLy8gV2UgYXJlIGd1YXJhbnRlZWQg
dGhhdCB0aGUgdGFnIHJlZ2lzdGVycyBhcmUgbm90IHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBp
bnB1dAorICAgICAgICAvLyBvciBvdXRwdXQgcmVnaXN0ZXJzLiBPdGhlcndpc2UsIHdlIHdvdWxk
IG5vdCBoYXZlIGFsbG9jYXRlZCBhIHNjcmF0Y2ggZm9yIHRoZW0uCisgICAgICAgIC8vIEhlbmNl
LCB3ZSBkb24ndCBuZWVkIHRvIG5lZWQgdG8gY2hlY2sgZm9yIG92ZXJsYXAgbGlrZSB3ZSBkbyBm
b3IgdGhlIGlucHV0IHJlZ2lzdGVycy4KKyAgICAgICAgaWYgKG1fc2F2ZWRUYWdNYXNrUmVnaXN0
ZXIgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgQVNTRVJUKEdQUkluZm86OnRhZ01h
c2tSZWdpc3RlciAhPSBtX29yaWdMZWZ0KTsKKyAgICAgICAgICAgIEFTU0VSVChHUFJJbmZvOjp0
YWdNYXNrUmVnaXN0ZXIgIT0gbV9vcmlnUmlnaHQpOworICAgICAgICAgICAgQVNTRVJUKEdQUklu
Zm86OnRhZ01hc2tSZWdpc3RlciAhPSBtX29yaWdSZXN1bHQpOworICAgICAgICAgICAgaml0Lm1v
dmUobV9zYXZlZFRhZ01hc2tSZWdpc3RlciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAobV9zYXZlZFRhZ1R5cGVOdW1iZXJSZWdpc3RlciAhPSBJbnZh
bGlkR1BSUmVnKSB7CisgICAgICAgICAgICBBU1NFUlQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyICE9IG1fb3JpZ0xlZnQpOworICAgICAgICAgICAgQVNTRVJUKEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlciAhPSBtX29yaWdSaWdodCk7CisgICAgICAgICAgICBBU1NFUlQoR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyICE9IG1fb3JpZ1Jlc3VsdCk7CisgICAgICAgICAg
ICBqaXQubW92ZShtX3NhdmVkVGFnVHlwZU51bWJlclJlZ2lzdGVyLCBHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIpOworICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAgIFNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvciYgbV9hbGxvY2F0b3I7CisKKyAgICBHUFJSZWcmIG1fcmVzdWx0
OworICAgIEdQUlJlZyYgbV9sZWZ0OworICAgIEdQUlJlZyYgbV9yaWdodDsKKworICAgIEdQUlJl
ZyBtX29yaWdSZXN1bHQ7CisgICAgR1BSUmVnIG1fb3JpZ0xlZnQ7CisgICAgR1BSUmVnIG1fb3Jp
Z1JpZ2h0OworCisgICAgR1BSUmVnIG1fc2F2ZWRUYWdNYXNrUmVnaXN0ZXIgeyBJbnZhbGlkR1BS
UmVnIH07CisgICAgR1BSUmVnIG1fc2F2ZWRUYWdUeXBlTnVtYmVyUmVnaXN0ZXIgeyBJbnZhbGlk
R1BSUmVnIH07Cit9OworCit2b2lkIGdlbmVyYXRlQXJpdGhTdWJGYXN0UGF0aChCaW5hcnlPcERl
c2NyaXB0b3ImIGljLCBDQ2FsbEhlbHBlcnMmIGppdCwKKyAgICBHUFJSZWcgcmVzdWx0LCBHUFJS
ZWcgbGVmdCwgR1BSUmVnIHJpZ2h0LCBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzLAorICAgIEND
YWxsSGVscGVyczo6SnVtcCYgZG9uZSwgQ0NhbGxIZWxwZXJzOjpKdW1wJiBzbG93UGF0aFN0YXJ0
KQoreworICAgIEFTU0VSVChpYy5ub2RlVHlwZSgpID09IEFyaXRoU3ViKTsKKyAgICBTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworCisgICAgQmluYXJ5
U25pcHBldFJlZ2lzdGVyQ29udGV4dCBjb250ZXh0KGFsbG9jYXRvciwgcmVzdWx0LCBsZWZ0LCBy
aWdodCk7CisKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0
Y2hHUFIoKTsKKyAgICBGUFJSZWcgbGVmdEZQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hG
UFIoKTsKKyAgICBGUFJSZWcgcmlnaHRGUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoRlBS
KCk7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBJbnZhbGlkRlBSUmVnOworCisgICAgSklUU3Vi
R2VuZXJhdG9yIGdlbihpYy5sZWZ0T3BlcmFuZCgpLCBpYy5yaWdodE9wZXJhbmQoKSwgSlNWYWx1
ZVJlZ3MocmVzdWx0KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MobGVmdCksIEpTVmFsdWVSZWdzKHJp
Z2h0KSwgbGVmdEZQUiwgcmlnaHRGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIpOworCisgICAg
YXV0byBudW1iZXJPZkJ5dGVzVXNlZFRvUHJlc2VydmVSZXVzZWRSZWdpc3RlcnMgPQorICAgIGFs
bG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpOb0V4dHJhU3BhY2UpOworCisgICAgY29u
dGV4dC5pbml0aWFsaXplUmVnaXN0ZXJzKGppdCk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
aml0KTsKKworICAgIEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpOworICAgIGdlbi5lbmRK
dW1wTGlzdCgpLmxpbmsoJmppdCk7CisgICAgY29udGV4dC5yZXN0b3JlUmVnaXN0ZXJzKGppdCk7
CisgICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBudW1i
ZXJPZkJ5dGVzVXNlZFRvUHJlc2VydmVSZXVzZWRSZWdpc3RlcnMsCisgICAgICAgIFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxsKTsKKyAgICBk
b25lID0gaml0Lmp1bXAoKTsKKworICAgIGdlbi5zbG93UGF0aEp1bXBMaXN0KCkubGluaygmaml0
KTsKKyAgICBjb250ZXh0LnJlc3RvcmVSZWdpc3RlcnMoaml0KTsKKyAgICBhbGxvY2F0b3IucmVz
dG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIG51bWJlck9mQnl0ZXNVc2VkVG9QcmVz
ZXJ2ZVJldXNlZFJlZ2lzdGVycywKKyAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpF
eHRyYVN0YWNrU3BhY2U6OlNwYWNlRm9yQ0NhbGwpOworICAgIHNsb3dQYXRoU3RhcnQgPSBqaXQu
anVtcCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZUJp
bmFyeU9wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21w
aWxlQmluYXJ5T3AuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ29tcGlsZUJpbmFyeU9wLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRlRMQ29t
cGlsZUJpbmFyeU9wX2gKKyNkZWZpbmUgRlRMQ29tcGlsZUJpbmFyeU9wX2gKKworI2lmIEVOQUJM
RShGVExfSklUKQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEJpbmFyeU9wRGVzY3JpcHRvcjsKKwordm9pZCBn
ZW5lcmF0ZUFyaXRoU3ViRmFzdFBhdGgoQmluYXJ5T3BEZXNjcmlwdG9yJiwgQ0NhbGxIZWxwZXJz
JiwKKyAgICBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgbGVmdCwgR1BSUmVnIHJpZ2h0LCBSZWdpc3Rl
clNldCB1c2VkUmVnaXN0ZXJzLAorICAgIENDYWxsSGVscGVyczo6SnVtcCYgZG9uZSwgQ0NhbGxI
ZWxwZXJzOjpKdW1wJiBzbG93UGF0aFN0YXJ0KTsKKworfSAvLyBuYW1lc3BhY2UgRlRMCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8g
RlRMQ29tcGlsZUJpbmFyeU9wX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaAkocmV2aXNpb24gMTkyODg4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMjksOSArMjksMTEgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2lu
Y2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVlLmgiCiAjaW5j
bHVkZSAiRlRMTGF6eVNsb3dQYXRoLmgiCiAjaW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0
b3IuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIlNuaXBwZXRPcGVy
YW5kLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVW5pcXVlZFN0cmluZ0ltcGwuaD4KIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewpAQCAtMTIzLDIzICsxMjUsNTAgQEAgcHVibGljOgog
ICAgIFZlY3RvcjxDaGVja0luR2VuZXJhdG9yPiBtX2dlbmVyYXRvcnM7CiB9OwogCi1jbGFzcyBB
cml0aFN1YkRlc2NyaXB0b3IgOiBwdWJsaWMgSW5saW5lQ2FjaGVEZXNjcmlwdG9yIHsKK2NsYXNz
IEJpbmFyeU9wRGVzY3JpcHRvciA6IHB1YmxpYyBJbmxpbmVDYWNoZURlc2NyaXB0b3IgewogcHVi
bGljOgotICAgIEFyaXRoU3ViRGVzY3JpcHRvcih1bnNpZ25lZCBzdGFja21hcElELCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIFJlc3VsdFR5cGUgbGVmdFR5cGUsIFJlc3VsdFR5cGUgcmlnaHRUeXBl
KQorICAgIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKCpTbG93UGF0aEZ1bmN0aW9uKShFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ay
KTsKKworICAgIHVuc2lnbmVkIG5vZGVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlVHlwZTsg
fQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgY29uc3Qg
Y2hhciogbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIGNvbnN0IGNoYXIqIGZh
c3RQYXRoSUNOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mYXN0UGF0aElDTmFtZTsgfQorICAgIFNs
b3dQYXRoRnVuY3Rpb24gc2xvd1BhdGhGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2xvd1Bh
dGhGdW5jdGlvbjsgfQorCisgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoKSB7IHJldHVy
biBtX2xlZnRPcGVyYW5kOyB9CisgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKCkgeyBy
ZXR1cm4gbV9yaWdodE9wZXJhbmQ7IH0KKworICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWw+IG1fc2xvd1BhdGhTdGFydHM7CisKK3Byb3RlY3RlZDoKKyAgICBCaW5hcnlPcERlc2NyaXB0
b3IodW5zaWduZWQgbm9kZVR5cGUsIHVuc2lnbmVkIHN0YWNrbWFwSUQsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwKKyAgICAgICAgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNo
YXIqIGZhc3RQYXRoSUNOYW1lLAorICAgICAgICBTbG93UGF0aEZ1bmN0aW9uIHNsb3dQYXRoRnVu
Y3Rpb24sIGNvbnN0IFNuaXBwZXRPcGVyYW5kJiBsZWZ0T3BlcmFuZCwgY29uc3QgU25pcHBldE9w
ZXJhbmQmIHJpZ2h0T3BlcmFuZCkKICAgICAgICAgOiBJbmxpbmVDYWNoZURlc2NyaXB0b3Ioc3Rh
Y2ttYXBJRCwgY29kZU9yaWdpbiwgbnVsbHB0cikKLSAgICAgICAgLCBtX2xlZnRUeXBlKGxlZnRU
eXBlKQotICAgICAgICAsIG1fcmlnaHRUeXBlKHJpZ2h0VHlwZSkKKyAgICAgICAgLCBtX25vZGVU
eXBlKG5vZGVUeXBlKQorICAgICAgICAsIG1fc2l6ZShzaXplKQorICAgICAgICAsIG1fbmFtZShu
YW1lKQorICAgICAgICAsIG1fZmFzdFBhdGhJQ05hbWUoZmFzdFBhdGhJQ05hbWUpCisgICAgICAg
ICwgbV9zbG93UGF0aEZ1bmN0aW9uKHNsb3dQYXRoRnVuY3Rpb24pCisgICAgICAgICwgbV9sZWZ0
T3BlcmFuZChsZWZ0T3BlcmFuZCkKKyAgICAgICAgLCBtX3JpZ2h0T3BlcmFuZChyaWdodE9wZXJh
bmQpCiAgICAgewogICAgIH0KIAotICAgIFJlc3VsdFR5cGUgbGVmdFR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX2xlZnRUeXBlOyB9Ci0gICAgUmVzdWx0VHlwZSByaWdodFR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX3JpZ2h0VHlwZTsgfQotICAgIAotICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWw+IG1fc2xvd1BhdGhTdGFydHM7CisgICAgdW5zaWduZWQgbV9ub2RlVHlwZTsKKyAgICBzaXpl
X3QgbV9zaXplOworICAgIGNvbnN0IGNoYXIqIG1fbmFtZTsKKyAgICBjb25zdCBjaGFyKiBtX2Zh
c3RQYXRoSUNOYW1lOworICAgIFNsb3dQYXRoRnVuY3Rpb24gbV9zbG93UGF0aEZ1bmN0aW9uOwog
Ci1wcml2YXRlOgotICAgIFJlc3VsdFR5cGUgbV9sZWZ0VHlwZTsKLSAgICBSZXN1bHRUeXBlIG1f
cmlnaHRUeXBlOworICAgIFNuaXBwZXRPcGVyYW5kIG1fbGVmdE9wZXJhbmQ7CisgICAgU25pcHBl
dE9wZXJhbmQgbV9yaWdodE9wZXJhbmQ7Cit9OworCitjbGFzcyBBcml0aFN1YkRlc2NyaXB0b3Ig
OiBwdWJsaWMgQmluYXJ5T3BEZXNjcmlwdG9yIHsKK3B1YmxpYzoKKyAgICBBcml0aFN1YkRlc2Ny
aXB0b3IodW5zaWduZWQgc3RhY2ttYXBJRCwgQ29kZU9yaWdpbiwgY29uc3QgU25pcHBldE9wZXJh
bmQmIGxlZnRPcGVyYW5kLCBjb25zdCBTbmlwcGV0T3BlcmFuZCYgcmlnaHRPcGVyYW5kKTsKKyAg
ICBzdGF0aWMgc2l6ZV90IGljU2l6ZSgpOwogfTsKIAogLy8gWW91IGNhbiBjcmVhdGUgYSBsYXp5
IHNsb3cgcGF0aCBjYWxsIGluIGxvd2VyREZHVG9MTFZNIGJ5IGRvaW5nOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZURlc2NyaXB0b3JJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZURlc2Ny
aXB0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTElubGluZUNhY2hlRGVzY3JpcHRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3JJbmxpbmVzX2gKKyNkZWZpbmUgRlRMSW5s
aW5lQ2FjaGVEZXNjcmlwdG9ySW5saW5lc19oCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2lu
Y2x1ZGUgIkRGR05vZGVUeXBlLmgiCisjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgorI2luY2x1
ZGUgIkZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIkZUTElubGluZUNhY2hl
U2l6ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK0FyaXRoU3ViRGVz
Y3JpcHRvcjo6QXJpdGhTdWJEZXNjcmlwdG9yKHVuc2lnbmVkIHN0YWNrbWFwSUQsIENvZGVPcmln
aW4gY29kZU9yaWdpbiwKKyAgICBjb25zdCBTbmlwcGV0T3BlcmFuZCYgbGVmdE9wZXJhbmQsIGNv
bnN0IFNuaXBwZXRPcGVyYW5kJiByaWdodE9wZXJhbmQpCisgICAgOiBCaW5hcnlPcERlc2NyaXB0
b3IoREZHOjpBcml0aFN1Yiwgc3RhY2ttYXBJRCwgY29kZU9yaWdpbiwgaWNTaXplKCksCisgICAg
ICAgICJBcml0aFN1YiIsICJBcml0aFN1YiBJQyBmYXN0IHBhdGgiLCBERkc6Om9wZXJhdGlvblZh
bHVlU3ViLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKQoreworfQorCitzaXplX3QgQXJpdGhT
dWJEZXNjcmlwdG9yOjppY1NpemUoKQoreworICAgIHJldHVybiBzaXplT2ZBcml0aFN1YigpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkKKworI2VuZGlmIC8vIEZUTElubGluZUNhY2hlRGVzY3JpcHRvcklubGluZXNfaApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJl
dmlzaW9uIDE5Mjg4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjU1LDIwICsxNjU1LDIxIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAvLyBBcmd1bWVudHM6IGlkLCBieXRlcywgdGFyZ2V0LCBudW1BcmdzLCBh
cmdzLi4uCiAgICAgICAgICAgICBTdGFja21hcEFyZ3VtZW50TGlzdCBhcmd1bWVudHM7CiAgICAg
ICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50NjQoc3RhY2ttYXBJRCkpOwot
ICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDMyKHNpemVPZkFyaXRo
U3ViKCkpKTsKKyAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQzMihB
cml0aFN1YkRlc2NyaXB0b3I6OmljU2l6ZSgpKSk7CiAgICAgICAgICAgICBhcmd1bWVudHMuYXBw
ZW5kKGNvbnN0TnVsbChtX291dC5yZWY4KSk7CiAgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5k
KG1fb3V0LmNvbnN0SW50MzIoMikpOwogICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChsZWZ0
KTsKICAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQocmlnaHQpOwogCi0gICAgICAgICAgICBh
cHBlbmRPU1JFeGl0QXJndW1lbnRzRm9yUGF0Y2hwb2ludElmV2lsbENhdGNoRXhjZXB0aW9uKGFy
Z3VtZW50cywgRXhjZXB0aW9uVHlwZTo6U3ViR2VuZXJhdG9yLCAzKTsgLy8gbGVmdCwgcmlnaHQs
IGFuZCByZXN1bHQgc2hvdyB1cCBpbiB0aGUgc3RhY2ttYXAgbG9jYXRpb25zLgorICAgICAgICAg
ICAgYXBwZW5kT1NSRXhpdEFyZ3VtZW50c0ZvclBhdGNocG9pbnRJZldpbGxDYXRjaEV4Y2VwdGlv
bihhcmd1bWVudHMsCisgICAgICAgICAgICAgICAgRXhjZXB0aW9uVHlwZTo6QmluYXJ5T3BHZW5l
cmF0b3IsIDMpOyAvLyBsZWZ0LCByaWdodCwgYW5kIHJlc3VsdCBzaG93IHVwIGluIHRoZSBzdGFj
a21hcCBsb2NhdGlvbnMuCiAKICAgICAgICAgICAgIExWYWx1ZSBjYWxsID0gbV9vdXQuY2FsbCht
X291dC5pbnQ2NCwgbV9vdXQucGF0Y2hwb2ludEludDY0SW50cmluc2ljKCksIGFyZ3VtZW50cyk7
CiAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExMVk1B
bnlSZWdDYWxsQ29udik7CiAKLSAgICAgICAgICAgIG1fZnRsU3RhdGUuYXJpdGhTdWJzLmFwcGVu
ZChBcml0aFN1YkRlc2NyaXB0b3Ioc3RhY2ttYXBJRCwgbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMs
Ci0gICAgICAgICAgICAgICAgYWJzdHJhY3RWYWx1ZShtX25vZGUtPmNoaWxkMSgpKS5yZXN1bHRU
eXBlKCksCi0gICAgICAgICAgICAgICAgYWJzdHJhY3RWYWx1ZShtX25vZGUtPmNoaWxkMigpKS5y
ZXN1bHRUeXBlKCkpKTsKKyAgICAgICAgICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKGFi
c3RyYWN0VmFsdWUobV9ub2RlLT5jaGlsZDEoKSkucmVzdWx0VHlwZSgpKTsKKyAgICAgICAgICAg
IFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChhYnN0cmFjdFZhbHVlKG1fbm9kZS0+Y2hpbGQy
KCkpLnJlc3VsdFR5cGUoKSk7CisgICAgICAgICAgICBtX2Z0bFN0YXRlLmJpbmFyeU9wcy5hcHBl
bmQoQXJpdGhTdWJEZXNjcmlwdG9yKHN0YWNrbWFwSUQsIG1fbm9kZS0+b3JpZ2luLnNlbWFudGlj
LCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKSk7CiAKICAgICAgICAgICAgIHNldEpTVmFsdWUo
Y2FsbCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
LmNwcAkocmV2aXNpb24gMTkyODg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDcgKzE3Miw3IEBAIGJvb2wgT1NSRXhp
dDo6d2lsbEFycml2ZUF0RXhpdEZyb21JbmRpcmUKICAgICBjYXNlIEV4Y2VwdGlvblR5cGU6Okdl
dEJ5SWQ6CiAgICAgY2FzZSBFeGNlcHRpb25UeXBlOjpQdXRCeUlkOgogICAgIGNhc2UgRXhjZXB0
aW9uVHlwZTo6TGF6eVNsb3dQYXRoOgotICAgIGNhc2UgRXhjZXB0aW9uVHlwZTo6U3ViR2VuZXJh
dG9yOgorICAgIGNhc2UgRXhjZXB0aW9uVHlwZTo6QmluYXJ5T3BHZW5lcmF0b3I6CiAgICAgY2Fz
ZSBFeGNlcHRpb25UeXBlOjpHZXRCeUlkQ2FsbE9wZXJhdGlvbjoKICAgICBjYXNlIEV4Y2VwdGlv
blR5cGU6OlB1dEJ5SWRDYWxsT3BlcmF0aW9uOgogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIw
MCw3ICsyMDAsNyBAQCBib29sIE9TUkV4aXQ6OndpbGxBcnJpdmVBdE9TUkV4aXRGcm9tQ2FsCiAg
ICAgc3dpdGNoIChtX2V4Y2VwdGlvblR5cGUpIHsKICAgICBjYXNlIEV4Y2VwdGlvblR5cGU6Okdl
dEJ5SWRDYWxsT3BlcmF0aW9uOgogICAgIGNhc2UgRXhjZXB0aW9uVHlwZTo6UHV0QnlJZENhbGxP
cGVyYXRpb246Ci0gICAgY2FzZSBFeGNlcHRpb25UeXBlOjpTdWJHZW5lcmF0b3I6CisgICAgY2Fz
ZSBFeGNlcHRpb25UeXBlOjpCaW5hcnlPcEdlbmVyYXRvcjoKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJKHJldmlzaW9uIDE5Mjg4OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNyArMTQ1
LDcgQEAgZW51bSBjbGFzcyBFeGNlcHRpb25UeXBlIDogdWludDhfdCB7CiAgICAgUHV0QnlJZCwK
ICAgICBQdXRCeUlkQ2FsbE9wZXJhdGlvbiwKICAgICBMYXp5U2xvd1BhdGgsCi0gICAgU3ViR2Vu
ZXJhdG9yLAorICAgIEJpbmFyeU9wR2VuZXJhdG9yLAogfTsKIAogc3RydWN0IE9TUkV4aXREZXNj
cmlwdG9yIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHJldmlzaW9u
IDE5Mjg4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBwdWJsaWM6CiAgICAgU2VnbWVudGVkVmVjdG9yPEdl
dEJ5SWREZXNjcmlwdG9yPiBnZXRCeUlkczsKICAgICBTZWdtZW50ZWRWZWN0b3I8UHV0QnlJZERl
c2NyaXB0b3I+IHB1dEJ5SWRzOwogICAgIFNlZ21lbnRlZFZlY3RvcjxDaGVja0luRGVzY3JpcHRv
cj4gY2hlY2tJbnM7Ci0gICAgU2VnbWVudGVkVmVjdG9yPEFyaXRoU3ViRGVzY3JpcHRvcj4gYXJp
dGhTdWJzOworICAgIFNlZ21lbnRlZFZlY3RvcjxCaW5hcnlPcERlc2NyaXB0b3I+IGJpbmFyeU9w
czsKICAgICBTZWdtZW50ZWRWZWN0b3I8TGF6eVNsb3dQYXRoRGVzY3JpcHRvcj4gbGF6eVNsb3dQ
YXRoczsKICNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKICAgICBTZWdtZW50ZWRWZWN0b3I8UHJvYmVE
ZXNjcmlwdG9yPiBwcm9iZXM7Cg==
</data>
<flag name="review"
          id="291375"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>