<?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>226149</bug_id>
          
          <creation_ts>2021-05-22 18:02:26 -0700</creation_ts>
          <short_desc>Use singleton thunks for virtual calls.</short_desc>
          <delta_ts>2021-05-23 00:12:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</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="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1762868</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-22 18:02:26 -0700</bug_when>
    <thetext>The pre-existing implementation emits a unique thunk for each virtual call site.  This turns out to be very wasteful in terms of memory.  For example, Speedometer2 ends up generating ~16M of virtualFor thunks.  Switching to re-useable singleton thunks, saves that 16M, and also appears to improve Speedometer2 performance by 1.012x.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762869</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-22 18:02:55 -0700</bug_when>
    <thetext>&lt;rdar://problem/78357604&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762870</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-22 18:03:41 -0700</bug_when>
    <thetext>Forgot to say, the 1.012x was measured on a M1 Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762873</commentid>
    <comment_count>3</comment_count>
      <attachid>429445</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-22 18:21:53 -0700</bug_when>
    <thetext>Created attachment 429445
proposed patch.

Let&apos;s try this on the EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762891</commentid>
    <comment_count>4</comment_count>
      <attachid>429457</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-22 21:55:42 -0700</bug_when>
    <thetext>Created attachment 429457
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762893</commentid>
    <comment_count>5</comment_count>
      <attachid>429457</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-05-22 22:32:15 -0700</bug_when>
    <thetext>Comment on attachment 429457
proposed patch.

View in context: https://bugs.webkit.org/attachment.cgi?id=429457&amp;action=review

r=me

&gt; Source/JavaScriptCore/ChangeLog:13
&gt; +        2. Introduce Options::useUniqueVirtualThunks() to allow unique thunks to be
&gt; +           generated for testing and comparisons.  Options::useUniqueVirtualThunks() is
&gt; +           false by default.

Maybe this flag is not necessary.

&gt; Source/JavaScriptCore/jit/ThunkGenerators.cpp:275
&gt; +    bool isTailCall = (mode == CallMode::Tail);

() is not necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762897</commentid>
    <comment_count>6</comment_count>
      <attachid>429457</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-22 23:02:45 -0700</bug_when>
    <thetext>Comment on attachment 429457
proposed patch.

View in context: https://bugs.webkit.org/attachment.cgi?id=429457&amp;action=review

&gt;&gt; Source/JavaScriptCore/ChangeLog:13
&gt;&gt; +           false by default.
&gt; 
&gt; Maybe this flag is not necessary.

I suppose we can always add it later if a need arises.  I&apos;ll remove it.

&gt;&gt; Source/JavaScriptCore/jit/ThunkGenerators.cpp:275
&gt;&gt; +    bool isTailCall = (mode == CallMode::Tail);
&gt; 
&gt; () is not necessary.

Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762899</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-22 23:24:30 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r277929: &lt;http://trac.webkit.org/r277929&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429445</attachid>
            <date>2021-05-22 18:21:53 -0700</date>
            <delta_ts>2021-05-22 21:55:42 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-226149.patch</filename>
            <type>text/plain</type>
            <size>12679</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3OTI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBA
CisyMDIxLTA1LTIyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBV
c2Ugc2luZ2xldG9uIHRodW5rcyBmb3IgdmlydHVhbCBjYWxscy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjE0OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDEuIENoYW5nZSB2aXJ0dWFsVGh1bmtGb3Io
KSB0byByZXR1cm4gMSBvciA2IHBvc3NpYmxlIHNpbmdsZXRvbiB0aHVua3MuCisgICAgICAgICAg
IFRoZXNlIHRodW5rcyBhcmUgY2FjaGVkIHZpYSB2bS5qaXRTdHVicy0+Y3RpU3R1YnMoKS4KKyAg
ICAgICAgMi4gSW50cm9kdWNlIE9wdGlvbnM6OnVzZVVuaXF1ZVZpcnR1YWxUaHVua3MoKSB0byBh
bGxvdyB1bmlxdWUgdGh1bmtzIHRvIGJlCisgICAgICAgICAgIGdlbmVyYXRlZCBmb3IgdGVzdGlu
ZyBhbmQgY29tcGFyaXNvbnMuICBPcHRpb25zOjp1c2VVbmlxdWVWaXJ0dWFsVGh1bmtzKCkgaXMK
KyAgICAgICAgICAgZmFsc2UgYnkgZGVmYXVsdC4KKworICAgICAgICBUaGlzIGNoYW5nZSBzYXZl
cyB1cyB+MTZNIG9mIGV4ZWN1dGFibGUgSklUIG1lbW9yeSAoZm9yIHRoZSB1bmlxdWUgdGh1bmtz
KSBvbiBhCisgICAgICAgIHNpbmdsZSBydW4gb2YgU3BlZWRvbWV0ZXIyLiAgT24gYW4gTTEgTWFj
LCBzd2l0Y2hpbmcgdG8gc2luZ2xldG9uIHRodW5rcyBoZXJlIGFsc28KKyAgICAgICAgYXBwZWFy
cyB0byBiZSBhIDEuMDEyeCBzcGVlZCB1cCBvbiBTcGVlZG9tZXRlcjIuICBQZXJmb3JtYW5jZSBp
cyBuZXV0cmFsIG9uCisgICAgICAgIEpldFN0cmVhbTIuCisKKyAgICAgICAgKiBqaXQvSklUVGh1
bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjdGlJbnRlcm5hbEZ1bmN0aW9uQ2Fs
bCk6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVj
dCk6CisgICAgICAgICogaml0L0pJVFRodW5rcy5oOgorICAgICAgICAqIGppdC9UaHVua0dlbmVy
YXRvcnMuY3BwOgorICAgICAgICAoSlNDOjp2aXJ0dWFsVGh1bmtGb3IpOgorICAgICAgICAoSlND
Ojp2aXJ0dWFsVGh1bmtGb3JSZWd1bGFyQ2FsbCk6CisgICAgICAgIChKU0M6OnZpcnR1YWxUaHVu
a0ZvclJlZ3VsYXJDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjp2aXJ0dWFsVGh1bmtGb3JUYWls
Q2FsbCk6CisgICAgICAgIChKU0M6OnZpcnR1YWxUaHVua0ZvclRhaWxDb25zdHJ1Y3QpOgorICAg
ICAgICAoSlNDOjp2aXJ0dWFsVGh1bmtGb3JDb25zdHJ1Y3RDYWxsKToKKyAgICAgICAgKEpTQzo6
dmlydHVhbFRodW5rRm9yQ29uc3RydWN0Q29uc3RydWN0KToKKyAgICAgICAgKiBydW50aW1lL09w
dGlvbnNMaXN0Lmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZN
OjpnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcik6CisgICAgICAgICogcnVudGlt
ZS9WTS5oOgorCiAyMDIxLTA1LTIyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmVwbGFjZSBMb2NrSG9sZGVyIHdpdGggTG9ja2VyIGluIGxvY2FsIHZhcmlhYmxl
cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAkocmV2aXNpb24g
Mjc3OTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTcsMTUgKzExNywxOSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklU
VGh1bmtQdHJUYWc+IEpJCiAgICAgcmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2ZVRhaWxDYWxsV2l0
aG91dFNhdmVkVGFnc0dlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwoVk0m
IHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0
aUludGVybmFsRnVuY3Rpb25DYWxsKFZNJiB2bSwgT3B0aW9uYWw8Tm9Mb2NraW5nTmVjZXNzYXJ5
VGFnPiBub0xvY2tpbmdOZWNlc3NhcnkpCiB7CiAgICAgQVNTRVJUKE9wdGlvbnM6OnVzZUpJVCgp
KTsKKyAgICBpZiAobm9Mb2NraW5nTmVjZXNzYXJ5KQorICAgICAgICByZXR1cm4gZXhpc3RpbmdD
VElTdHViKGludGVybmFsRnVuY3Rpb25DYWxsR2VuZXJhdG9yLCBOb0xvY2tpbmdOZWNlc3Nhcnkp
LmNvZGUoKTsKICAgICByZXR1cm4gY3RpU3R1Yih2bSwgaW50ZXJuYWxGdW5jdGlvbkNhbGxHZW5l
cmF0b3IpLmNvZGUoKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFn
PiBKSVRUaHVua3M6OmN0aUludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3QoVk0mIHZtKQorTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aUludGVybmFsRnVu
Y3Rpb25Db25zdHJ1Y3QoVk0mIHZtLCBPcHRpb25hbDxOb0xvY2tpbmdOZWNlc3NhcnlUYWc+IG5v
TG9ja2luZ05lY2Vzc2FyeSkKIHsKICAgICBBU1NFUlQoT3B0aW9uczo6dXNlSklUKCkpOworICAg
IGlmIChub0xvY2tpbmdOZWNlc3NhcnkpCisgICAgICAgIHJldHVybiBleGlzdGluZ0NUSVN0dWIo
aW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdEdlbmVyYXRvciwgTm9Mb2NraW5nTmVjZXNzYXJ5KS5j
b2RlKCk7CiAgICAgcmV0dXJuIGN0aVN0dWIodm0sIGludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3RH
ZW5lcmF0b3IpLmNvZGUoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRUaHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRo
dW5rcy5oCShyZXZpc2lvbiAyNzc5MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFRodW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw4ICs1OSw4IEBAIHB1YmxpYzoKICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2ZUNvbnN0cnVjdChW
TSYpOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpTmF0aXZl
VGFpbENhbGwoVk0mKTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+
IGN0aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFncyhWTSYpOwotICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwoVk0mKTsK
LSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aUludGVybmFsRnVu
Y3Rpb25Db25zdHJ1Y3QoVk0mKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQ
dHJUYWc+IGN0aUludGVybmFsRnVuY3Rpb25DYWxsKFZNJiwgT3B0aW9uYWw8Tm9Mb2NraW5nTmVj
ZXNzYXJ5VGFnPiA9IFdURjo6bnVsbG9wdCk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJ
VFRodW5rUHRyVGFnPiBjdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KFZNJiwgT3B0aW9uYWw8
Tm9Mb2NraW5nTmVjZXNzYXJ5VGFnPiA9IFdURjo6bnVsbG9wdCk7CiAKICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGN0aVN0dWIoVk0mLCBUaHVua0dlbmVyYXRvcik7
CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBleGlzdGluZ0NUSVN0
dWIoVGh1bmtHZW5lcmF0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVu
a0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
VGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMjc3OTI1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjMsNyAr
MjYzLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsaQogLy8gcGF0
aCB2aXJ0dWFsIGNhbGwgc28gdGhhdCB3ZSBjYW4gZW5hYmxlIGZhc3QgdGFpbCBjYWxscyBmb3Ig
bWVnYW1vcnBoaWMKIC8vIHZpcnR1YWwgY2FsbHMgYnkgdXNpbmcgdGhlIHNodWZmbGVyLgogLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODgzMQotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3IoVk0mIHZt
LCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxUaHVua0ZvcihWTSYgdm0sIENhbGxNb2RlIG1vZGUs
IENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICAgICAvLyBUaGUgY2FsbGVlIGlzIGlu
IHJlZ1QwIChmb3IgSlNWQUxVRTMyXzY0LCB0aGUgdGFnIGlzIGluIHJlZ1QxKS4KICAgICAvLyBU
aGUgcmV0dXJuIGFkZHJlc3MgaXMgb24gdGhlIHN0YWNrLCBvciBpbiB0aGUgbGluayByZWdpc3Rl
ci4gV2Ugd2lsbCBoZW5jZQpAQCAtMjcxLDcgKzI3MSw5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRTdHViUm91dGluZVB0clQKICAgICAvLyBtYWtlIGEgQysrIGZ1bmN0aW9uIGNhbGwgdG8g
dGhlIGFwcHJvcHJpYXRlIEpJVCBvcGVyYXRpb24uCiAKICAgICBDQ2FsbEhlbHBlcnMgaml0Owot
ICAgIAorCisgICAgYm9vbCBpc1RhaWxDYWxsID0gKG1vZGUgPT0gQ2FsbE1vZGU6OlRhaWwpOwor
CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZTsKICAgICAKICAgICAvLyBUaGlz
IGlzIGEgc2xvdyBwYXRoIGV4ZWN1dGlvbiwgYW5kIHJlZ1QyIGNvbnRhaW5zIHRoZSBDYWxsTGlu
a0luZm8uIENvdW50IHRoZQpAQCAtMjg0LDcgKzI4Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRTdHViUm91dGluZVB0clQKICAgICAvLyB0aGUgREZHIGtub3dzIHRoYXQgdGhlIHZhbHVl
IGlzIGRlZmluaXRlbHkgYSBjZWxsLCBvciBkZWZpbml0ZWx5IGEgZnVuY3Rpb24uCiAgICAgCiAj
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBpZiAoY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkgewor
ICAgIGlmIChpc1RhaWxDYWxsKSB7CiAgICAgICAgIC8vIFRhaWwgY2FsbHMgY291bGQgaGF2ZSBj
bG9iYmVyZWQgdGhlIEdQUkluZm86Om5vdENlbGxNYXNrUmVnaXN0ZXIgYmVjYXVzZSB0aGV5CiAg
ICAgICAgIC8vIHJlc3RvcmUgY2FsbGVlIHNhdmVkIHJlZ2lzdGVycyBiZWZvcmUgZ2V0dGhpbmcg
aGVyZS4gU28sIGxldCdzIG1hdGVyaWFsaXplCiAgICAgICAgIC8vIHRoZSBOb3RDZWxsTWFzayBp
biBhIHRlbXAgcmVnaXN0ZXIgYW5kIHVzZSB0aGUgdGVtcCBpbnN0ZWFkLgpAQCAtMzAzLDkgKzMw
NSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clQKICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDQsIEZ1bmN0aW9uUmFy
ZURhdGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBH
UFJJbmZvOjpyZWdUNCk7CiAgICAgaGFzRXhlY3V0YWJsZS5saW5rKCZqaXQpOwogICAgIGppdC5s
b2FkUHRyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0gICAgICAgICAgICBHUFJJ
bmZvOjpyZWdUNCwgRXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNr
Rm9yKAotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSkp
LAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDQsIEV4ZWN1dGFi
bGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKSksCiAgICAgICAg
IEdQUkluZm86OnJlZ1Q0KTsKICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaFRlc3RQdHIo
Q0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUNCkpOwogICAgIApAQCAtMzE1LDcgKzMx
NSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clQKICAgICAvLyBN
YWtlIGEgdGFpbCBjYWxsLiBUaGlzIHdpbGwgcmV0dXJuIGJhY2sgdG8gSklUIGNvZGUuCiAgICAg
SlNJbnRlcmZhY2VKSVQ6OkxhYmVsIGNhbGxDb2RlKGppdC5sYWJlbCgpKTsKICAgICBlbWl0UG9p
bnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZWdUNCwgSlNFbnRyeVB0clRhZyk7Ci0gICAg
aWYgKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKKyAgICBpZiAoaXNUYWlsQ2FsbCkgewog
ICAgICAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86OnJlZ1Qw
KTsKICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coR1BSSW5mbzo6cmVnVDQpOwog
ICAgIH0KQEAgLTMyNCw3ICszMjQsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJv
dXRpbmVQdHJUCiAgICAgLy8gTnVsbFNldHRlckZ1bmN0aW9uVHlwZSBkb2VzIG5vdCBnZXQgdGhl
IGZhc3QgcGF0aCBzdXBwb3J0LiBCdXQgaXQgaXMgT0sgc2luY2UgdXNpbmcgTnVsbFNldHRlckZ1
bmN0aW9uVHlwZSBpcyBleHRyZW1lbHkgcmFyZS4KICAgICBub3RKU0Z1bmN0aW9uLmxpbmsoJmpp
dCk7CiAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hJZk5vdFR5cGUoR1BSSW5mbzo6cmVn
VDAsIEludGVybmFsRnVuY3Rpb25UeXBlKSk7Ci0gICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3Mg
PSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihjYWxsTGlua0luZm8uc3Bl
Y2lhbGl6YXRpb25LaW5kKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgdm9pZCogZXhlY3V0
YWJsZUFkZHJlc3MgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5k
LCBOb0xvY2tpbmdOZWNlc3NhcnkpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGV4ZWN1dGFibGVBZGRyZXNzKSwgR1BSSW5mbzo6
cmVnVDQpOwogICAgIGppdC5qdW1wKCkubGlua1RvKGNhbGxDb2RlLCAmaml0KTsKIApAQCAtMzM1
LDkgKzMzNSw2NSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUCiAK
ICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVm
ZmVyOjpQcm9maWxlOjpUaHVuayk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCi0gICAgICAg
IHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKKyAgICAgICAgcGF0Y2hCdWZmZXIs
IEpJVFRodW5rUHRyVGFnLAogICAgICAgICAiVmlydHVhbCAlcyBzbG93IHBhdGggdGh1bmsiLAot
ICAgICAgICBjYWxsTGlua0luZm8uY2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6UmVndWxhciA/ICJj
YWxsIiA6IGNhbGxMaW5rSW5mby5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gInRhaWwg
Y2FsbCIgOiAiY29uc3RydWN0Iik7CisgICAgICAgIG1vZGUgPT0gQ2FsbE1vZGU6OlJlZ3VsYXIg
PyAiY2FsbCIgOiBtb2RlID09IENhbGxNb2RlOjpUYWlsID8gInRhaWwgY2FsbCIgOiAiY29uc3Ry
dWN0Iik7Cit9CisKK3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IHZpcnR1YWxUaHVua0ZvclJlZ3VsYXJDYWxsKFZNJiB2bSkKK3sKKyAgICByZXR1cm4gdmlydHVh
bFRodW5rRm9yKHZtLCBDYWxsTW9kZTo6UmVndWxhciwgQ29kZUZvckNhbGwpOworfQorCitzdGF0
aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3JS
ZWd1bGFyQ29uc3RydWN0KFZNJiB2bSkKK3sKKyAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yKHZt
LCBDYWxsTW9kZTo6UmVndWxhciwgQ29kZUZvckNvbnN0cnVjdCk7Cit9CisKK3N0YXRpYyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxUaHVua0ZvclRhaWxDYWxs
KFZNJiB2bSkKK3sKKyAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yKHZtLCBDYWxsTW9kZTo6VGFp
bCwgQ29kZUZvckNhbGwpOworfQorCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3JUYWlsQ29uc3RydWN0KFZNJiB2bSkKK3sKKyAgICBy
ZXR1cm4gdmlydHVhbFRodW5rRm9yKHZtLCBDYWxsTW9kZTo6VGFpbCwgQ29kZUZvckNvbnN0cnVj
dCk7Cit9CisKK3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZp
cnR1YWxUaHVua0ZvckNvbnN0cnVjdENhbGwoVk0mIHZtKQoreworICAgIHJldHVybiB2aXJ0dWFs
VGh1bmtGb3Iodm0sIENhbGxNb2RlOjpDb25zdHJ1Y3QsIENvZGVGb3JDYWxsKTsKK30KKworc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmlydHVhbFRodW5rRm9y
Q29uc3RydWN0Q29uc3RydWN0KFZNJiB2bSkKK3sKKyAgICByZXR1cm4gdmlydHVhbFRodW5rRm9y
KHZtLCBDYWxsTW9kZTo6Q29uc3RydWN0LCBDb2RlRm9yQ29uc3RydWN0KTsKK30KKworTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3IoVk0m
IHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3sKKyAgICBhdXRvIG1vZGUgPSBjYWxs
TGlua0luZm8uY2FsbE1vZGUoKTsKKyAgICBhdXRvIGtpbmQgPSBjYWxsTGlua0luZm8uc3BlY2lh
bGl6YXRpb25LaW5kKCk7CisgICAgYXV0byBnZXRHZW5lcmF0b3IgPSBbJl0gKCkgLT4gVGh1bmtH
ZW5lcmF0b3IgeworICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgY2FzZSBDYWxsTW9k
ZTo6UmVndWxhcjoKKyAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQorICAgICAg
ICAgICAgICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3JSZWd1bGFyQ2FsbDsKKyAgICAgICAgICAg
IHJldHVybiB2aXJ0dWFsVGh1bmtGb3JSZWd1bGFyQ29uc3RydWN0OworICAgICAgICBjYXNlIENh
bGxNb2RlOjpUYWlsOgorICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvclRhaWxDYWxsOworICAgICAgICAgICAg
cmV0dXJuIHZpcnR1YWxUaHVua0ZvclRhaWxDb25zdHJ1Y3Q7CisgICAgICAgIGNhc2UgQ2FsbE1v
ZGU6OkNvbnN0cnVjdDoKKyAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQorICAg
ICAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3JDb25zdHJ1Y3RDYWxsOworICAgICAg
ICAgICAgcmV0dXJuIHZpcnR1YWxUaHVua0ZvckNvbnN0cnVjdENvbnN0cnVjdDsKKyAgICAgICAg
fQorICAgIH07CisgICAgYXV0byBnZW5lcmF0b3IgPSBnZXRHZW5lcmF0b3IoKTsKKyAgICBpZiAo
T3B0aW9uczo6dXNlVW5pcXVlVmlydHVhbFRodW5rcygpKQorICAgICAgICByZXR1cm4gZ2VuZXJh
dG9yKHZtKS5yZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKTsKKyAgICByZXR1cm4gdm0u
Z2V0Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpOwog
fQogCiBlbnVtIFRodW5rRW50cnlUeXBlIHsgRW50ZXJWaWFDYWxsLCBFbnRlclZpYUp1bXBXaXRo
U2F2ZWRUYWdzLCBFbnRlclZpYUp1bXBXaXRob3V0U2F2ZWRUYWdzIH07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI3NzkyNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTgzLDYgKzgzLDcgQEAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjYW5Vc2VKSVRD
YWdlKCk7CiAgICAgdihCb29sLCB1c2VERkdKSVQsIHRydWUsIE5vcm1hbCwgImFsbG93cyB0aGUg
REZHIEpJVCB0byBiZSB1c2VkIGlmIHRydWUiKSBcCiAgICAgdihCb29sLCB1c2VSZWdFeHBKSVQs
IGppdEVuYWJsZWRCeURlZmF1bHQoKSwgTm9ybWFsLCAiYWxsb3dzIHRoZSBSZWdFeHAgSklUIHRv
IGJlIHVzZWQgaWYgdHJ1ZSIpIFwKICAgICB2KEJvb2wsIHVzZURPTUpJVCwgaXM2NEJpdCgpLCBO
b3JtYWwsICJhbGxvd3MgdGhlIERPTUpJVCB0byBiZSB1c2VkIGlmIHRydWUiKSBcCisgICAgdihC
b29sLCB1c2VVbmlxdWVWaXJ0dWFsVGh1bmtzLCBmYWxzZSwgTm9ybWFsLCAiYWxsb3dzIHRoZSB1
bmlxdWUgdmlydHVhbCBjYWxsIHRodW5rcyB0byBiZSBnZW5lcmF0ZWQiKSBcCiAgICAgXAogICAg
IHYoQm9vbCwgcmVwb3J0TXVzdFN1Y2NlZWRFeGVjdXRhYmxlQWxsb2NhdGlvbnMsIGZhbHNlLCBO
b3JtYWwsIG51bGxwdHIpIFwKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCShyZXZpc2lvbiAyNzc5MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4OCwxMyArODg4LDEzIEBAIE5hdGl2ZUV4ZWN1
dGFibGUqIFZNOjpnZXRCb3VuZEZ1bmN0aW9uKGIKICAgICByZXR1cm4gZ2V0T3JDcmVhdGUobV9m
YXN0Qm91bmRFeGVjdXRhYmxlKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+IFZNOjpnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQpCitNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4g
Vk06OmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCwgT3B0aW9uYWw8Tm9Mb2NraW5nTmVjZXNzYXJ5VGFnPiBub0xvY2tpbmdOZWNl
c3NhcnkpCiB7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpIHsK
ICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICByZXR1cm4gaml0
U3R1YnMtPmN0aUludGVybmFsRnVuY3Rpb25DYWxsKCp0aGlzKS5yZXRhZ2dlZDxKU0VudHJ5UHRy
VGFnPigpOwotICAgICAgICByZXR1cm4gaml0U3R1YnMtPmN0aUludGVybmFsRnVuY3Rpb25Db25z
dHJ1Y3QoKnRoaXMpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CisgICAgICAgICAgICByZXR1
cm4gaml0U3R1YnMtPmN0aUludGVybmFsRnVuY3Rpb25DYWxsKCp0aGlzLCBub0xvY2tpbmdOZWNl
c3NhcnkpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+KCk7CisgICAgICAgIHJldHVybiBqaXRTdHVi
cy0+Y3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdCgqdGhpcywgbm9Mb2NraW5nTmVjZXNzYXJ5
KS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwogICAgIH0KICNlbmRpZgogICAgIGlmIChraW5k
ID09IENvZGVGb3JDYWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZp
c2lvbiAyNzc5MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NTEsNyArODUxLDcgQEAgcHVibGljOgogCiAgICAgTmF0aXZlRXhlY3V0
YWJsZSogZ2V0Qm91bmRGdW5jdGlvbihib29sIGlzSlNGdW5jdGlvbiwgYm9vbCBjYW5Db25zdHJ1
Y3QpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGdldENUSUlu
dGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBnZXRDVElJbnRlcm5hbEZ1bmN0
aW9uVHJhbXBvbGluZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBPcHRpb25hbDxOb0xvY2tp
bmdOZWNlc3NhcnlUYWc+ID0gV1RGOjpudWxsb3B0KTsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qg
ZXhjZXB0aW9uT2Zmc2V0KCkKICAgICB7Cg==
</data>
<flag name="commit-queue"
          id="450635"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429457</attachid>
            <date>2021-05-22 21:55:42 -0700</date>
            <delta_ts>2021-05-23 00:12:01 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-226149.patch</filename>
            <type>text/plain</type>
            <size>12763</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3OTI3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDIxLTA1LTIyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBV
c2Ugc2luZ2xldG9uIHRodW5rcyBmb3IgdmlydHVhbCBjYWxscy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjE0OQorICAgICAgICByZGFyOi8vcHJv
YmxlbS83ODM1NzYwNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIDEuIENoYW5nZSB2aXJ0dWFsVGh1bmtGb3IoKSB0byByZXR1cm4gMSBvciA2IHBvc3Np
YmxlIHNpbmdsZXRvbiB0aHVua3MuCisgICAgICAgICAgIFRoZXNlIHRodW5rcyBhcmUgY2FjaGVk
IHZpYSB2bS5qaXRTdHVicy0+Y3RpU3R1YnMoKS4KKyAgICAgICAgMi4gSW50cm9kdWNlIE9wdGlv
bnM6OnVzZVVuaXF1ZVZpcnR1YWxUaHVua3MoKSB0byBhbGxvdyB1bmlxdWUgdGh1bmtzIHRvIGJl
CisgICAgICAgICAgIGdlbmVyYXRlZCBmb3IgdGVzdGluZyBhbmQgY29tcGFyaXNvbnMuICBPcHRp
b25zOjp1c2VVbmlxdWVWaXJ0dWFsVGh1bmtzKCkgaXMKKyAgICAgICAgICAgZmFsc2UgYnkgZGVm
YXVsdC4KKworICAgICAgICBUaGlzIGNoYW5nZSBzYXZlcyB1cyB+MTZNIG9mIGV4ZWN1dGFibGUg
SklUIG1lbW9yeSAoZm9yIHRoZSB1bmlxdWUgdGh1bmtzKSBvbiBhCisgICAgICAgIHNpbmdsZSBy
dW4gb2YgU3BlZWRvbWV0ZXIyLiAgT24gYW4gTTEgTWFjLCBzd2l0Y2hpbmcgdG8gc2luZ2xldG9u
IHRodW5rcyBoZXJlIGFsc28KKyAgICAgICAgYXBwZWFycyB0byBiZSBhIDEuMDEyeCBzcGVlZCB1
cCBvbiBTcGVlZG9tZXRlcjIuICBQZXJmb3JtYW5jZSBpcyBuZXV0cmFsIG9uCisgICAgICAgIEpl
dFN0cmVhbTIuCisKKyAgICAgICAgKiBqaXQvSklUVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6
SklUVGh1bmtzOjpjdGlJbnRlcm5hbEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVFRo
dW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdCk6CisgICAgICAgICogaml0L0pJVFRo
dW5rcy5oOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAoSlND
Ojp2aXJ0dWFsVGh1bmtGb3IpOgorICAgICAgICAoSlNDOjp2aXJ0dWFsVGh1bmtGb3JSZWd1bGFy
Q2FsbCk6CisgICAgICAgIChKU0M6OnZpcnR1YWxUaHVua0ZvclJlZ3VsYXJDb25zdHJ1Y3QpOgor
ICAgICAgICAoSlNDOjp2aXJ0dWFsVGh1bmtGb3JUYWlsQ2FsbCk6CisgICAgICAgIChKU0M6OnZp
cnR1YWxUaHVua0ZvclRhaWxDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjp2aXJ0dWFsVGh1bmtG
b3JDb25zdHJ1Y3RDYWxsKToKKyAgICAgICAgKEpTQzo6dmlydHVhbFRodW5rRm9yQ29uc3RydWN0
Q29uc3RydWN0KToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnNMaXN0Lmg6CisgICAgICAgICog
cnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpnZXRDVElJbnRlcm5hbEZ1bmN0aW9u
VHJhbXBvbGluZUZvcik6CisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDIxLTA1LTIyICBS
b3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KIAogICAgICAgICBTdXBwb3J0
IEVyZ29ub21pYyBCcmFuZCBDaGVja3MgcHJvcG9zYWwgKGAjeCBpbiBvYmpgKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAkocmV2aXNpb24gMjc3OTI3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTcsMTUgKzExNywxOSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+
IEpJCiAgICAgcmV0dXJuIGN0aVN0dWIodm0sIG5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFn
c0dlbmVyYXRvcikuY29kZSgpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQ
dHJUYWc+IEpJVFRodW5rczo6Y3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwoVk0mIHZtKQorTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aUludGVybmFsRnVu
Y3Rpb25DYWxsKFZNJiB2bSwgT3B0aW9uYWw8Tm9Mb2NraW5nTmVjZXNzYXJ5VGFnPiBub0xvY2tp
bmdOZWNlc3NhcnkpCiB7CiAgICAgQVNTRVJUKE9wdGlvbnM6OnVzZUpJVCgpKTsKKyAgICBpZiAo
bm9Mb2NraW5nTmVjZXNzYXJ5KQorICAgICAgICByZXR1cm4gZXhpc3RpbmdDVElTdHViKGludGVy
bmFsRnVuY3Rpb25DYWxsR2VuZXJhdG9yLCBOb0xvY2tpbmdOZWNlc3NhcnkpLmNvZGUoKTsKICAg
ICByZXR1cm4gY3RpU3R1Yih2bSwgaW50ZXJuYWxGdW5jdGlvbkNhbGxHZW5lcmF0b3IpLmNvZGUo
KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6
OmN0aUludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3QoVk0mIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpJVFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aUludGVybmFsRnVuY3Rpb25Db25zdHJ1
Y3QoVk0mIHZtLCBPcHRpb25hbDxOb0xvY2tpbmdOZWNlc3NhcnlUYWc+IG5vTG9ja2luZ05lY2Vz
c2FyeSkKIHsKICAgICBBU1NFUlQoT3B0aW9uczo6dXNlSklUKCkpOworICAgIGlmIChub0xvY2tp
bmdOZWNlc3NhcnkpCisgICAgICAgIHJldHVybiBleGlzdGluZ0NUSVN0dWIoaW50ZXJuYWxGdW5j
dGlvbkNvbnN0cnVjdEdlbmVyYXRvciwgTm9Mb2NraW5nTmVjZXNzYXJ5KS5jb2RlKCk7CiAgICAg
cmV0dXJuIGN0aVN0dWIodm0sIGludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3RHZW5lcmF0b3IpLmNv
ZGUoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oCShyZXZp
c2lvbiAyNzc5MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC01OSw4ICs1OSw4IEBAIHB1YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2ZUNvbnN0cnVjdChWTSYpOwogICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4gY3RpTmF0aXZlVGFpbENhbGwoVk0m
KTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aU5hdGl2ZVRh
aWxDYWxsV2l0aG91dFNhdmVkVGFncyhWTSYpOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
SVRUaHVua1B0clRhZz4gY3RpSW50ZXJuYWxGdW5jdGlvbkNhbGwoVk0mKTsKLSAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aUludGVybmFsRnVuY3Rpb25Db25zdHJ1
Y3QoVk0mKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IGN0aUlu
dGVybmFsRnVuY3Rpb25DYWxsKFZNJiwgT3B0aW9uYWw8Tm9Mb2NraW5nTmVjZXNzYXJ5VGFnPiA9
IFdURjo6bnVsbG9wdCk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFn
PiBjdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KFZNJiwgT3B0aW9uYWw8Tm9Mb2NraW5nTmVj
ZXNzYXJ5VGFnPiA9IFdURjo6bnVsbG9wdCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGN0aVN0dWIoVk0mLCBUaHVua0dlbmVyYXRvcik7CiAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBleGlzdGluZ0NUSVN0dWIoVGh1bmtHZW5l
cmF0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0
b3JzLmNwcAkocmV2aXNpb24gMjc3OTI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjMsNyArMjYzLDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBsaQogLy8gcGF0aCB2aXJ0dWFsIGNh
bGwgc28gdGhhdCB3ZSBjYW4gZW5hYmxlIGZhc3QgdGFpbCBjYWxscyBmb3IgbWVnYW1vcnBoaWMK
IC8vIHZpcnR1YWwgY2FsbHMgYnkgdXNpbmcgdGhlIHNodWZmbGVyLgogLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODgzMQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3IoVk0mIHZtLCBDYWxsTGlua0lu
Zm8mIGNhbGxMaW5rSW5mbykKK3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IHZpcnR1YWxUaHVua0ZvcihWTSYgdm0sIENhbGxNb2RlIG1vZGUsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKIHsKICAgICAvLyBUaGUgY2FsbGVlIGlzIGluIHJlZ1QwIChmb3Ig
SlNWQUxVRTMyXzY0LCB0aGUgdGFnIGlzIGluIHJlZ1QxKS4KICAgICAvLyBUaGUgcmV0dXJuIGFk
ZHJlc3MgaXMgb24gdGhlIHN0YWNrLCBvciBpbiB0aGUgbGluayByZWdpc3Rlci4gV2Ugd2lsbCBo
ZW5jZQpAQCAtMjcxLDcgKzI3MSw5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91
dGluZVB0clQKICAgICAvLyBtYWtlIGEgQysrIGZ1bmN0aW9uIGNhbGwgdG8gdGhlIGFwcHJvcHJp
YXRlIEpJVCBvcGVyYXRpb24uCiAKICAgICBDQ2FsbEhlbHBlcnMgaml0OwotICAgIAorCisgICAg
Ym9vbCBpc1RhaWxDYWxsID0gKG1vZGUgPT0gQ2FsbE1vZGU6OlRhaWwpOworCiAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZTsKICAgICAKICAgICAvLyBUaGlzIGlzIGEgc2xvdyBw
YXRoIGV4ZWN1dGlvbiwgYW5kIHJlZ1QyIGNvbnRhaW5zIHRoZSBDYWxsTGlua0luZm8uIENvdW50
IHRoZQpAQCAtMjg0LDcgKzI4Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91
dGluZVB0clQKICAgICAvLyB0aGUgREZHIGtub3dzIHRoYXQgdGhlIHZhbHVlIGlzIGRlZmluaXRl
bHkgYSBjZWxsLCBvciBkZWZpbml0ZWx5IGEgZnVuY3Rpb24uCiAgICAgCiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBpZiAoY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkgeworICAgIGlmIChpc1Rh
aWxDYWxsKSB7CiAgICAgICAgIC8vIFRhaWwgY2FsbHMgY291bGQgaGF2ZSBjbG9iYmVyZWQgdGhl
IEdQUkluZm86Om5vdENlbGxNYXNrUmVnaXN0ZXIgYmVjYXVzZSB0aGV5CiAgICAgICAgIC8vIHJl
c3RvcmUgY2FsbGVlIHNhdmVkIHJlZ2lzdGVycyBiZWZvcmUgZ2V0dGhpbmcgaGVyZS4gU28sIGxl
dCdzIG1hdGVyaWFsaXplCiAgICAgICAgIC8vIHRoZSBOb3RDZWxsTWFzayBpbiBhIHRlbXAgcmVn
aXN0ZXIgYW5kIHVzZSB0aGUgdGVtcCBpbnN0ZWFkLgpAQCAtMzAzLDkgKzMwNSw3IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clQKICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDQsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNl
dE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBHUFJJbmZvOjpyZWdU
NCk7CiAgICAgaGFzRXhlY3V0YWJsZS5saW5rKCZqaXQpOwogICAgIGppdC5sb2FkUHRyKAotICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0gICAgICAgICAgICBHUFJJbmZvOjpyZWdUNCwg
RXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKAotICAgICAg
ICAgICAgICAgIGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSkpLAorICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDQsIEV4ZWN1dGFibGVCYXNlOjpvZmZz
ZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihraW5kKSksCiAgICAgICAgIEdQUkluZm86OnJl
Z1Q0KTsKICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJz
OjpaZXJvLCBHUFJJbmZvOjpyZWdUNCkpOwogICAgIApAQCAtMzE1LDcgKzMxNSw3IEBAIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clQKICAgICAvLyBNYWtlIGEgdGFpbCBj
YWxsLiBUaGlzIHdpbGwgcmV0dXJuIGJhY2sgdG8gSklUIGNvZGUuCiAgICAgSlNJbnRlcmZhY2VK
SVQ6OkxhYmVsIGNhbGxDb2RlKGppdC5sYWJlbCgpKTsKICAgICBlbWl0UG9pbnRlclZhbGlkYXRp
b24oaml0LCBHUFJJbmZvOjpyZWdUNCwgSlNFbnRyeVB0clRhZyk7Ci0gICAgaWYgKGNhbGxMaW5r
SW5mby5pc1RhaWxDYWxsKCkpIHsKKyAgICBpZiAoaXNUYWlsQ2FsbCkgewogICAgICAgICBqaXQu
cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAg
aml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coR1BSSW5mbzo6cmVnVDQpOwogICAgIH0KQEAgLTMy
NCw3ICszMjQsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUCiAg
ICAgLy8gTnVsbFNldHRlckZ1bmN0aW9uVHlwZSBkb2VzIG5vdCBnZXQgdGhlIGZhc3QgcGF0aCBz
dXBwb3J0LiBCdXQgaXQgaXMgT0sgc2luY2UgdXNpbmcgTnVsbFNldHRlckZ1bmN0aW9uVHlwZSBp
cyBleHRyZW1lbHkgcmFyZS4KICAgICBub3RKU0Z1bmN0aW9uLmxpbmsoJmppdCk7CiAgICAgc2xv
d0Nhc2UuYXBwZW5kKGppdC5icmFuY2hJZk5vdFR5cGUoR1BSSW5mbzo6cmVnVDAsIEludGVybmFs
RnVuY3Rpb25UeXBlKSk7Ci0gICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3MgPSB2bS5nZXRDVElJ
bnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihjYWxsTGlua0luZm8uc3BlY2lhbGl6YXRpb25L
aW5kKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3Mg
PSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihraW5kLCBOb0xvY2tpbmdO
ZWNlc3NhcnkpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGV4ZWN1dGFibGVBZGRyZXNzKSwgR1BSSW5mbzo6cmVnVDQpOwogICAg
IGppdC5qdW1wKCkubGlua1RvKGNhbGxDb2RlLCAmaml0KTsKIApAQCAtMzM1LDkgKzMzNSw2NSBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUCiAKICAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxl
OjpUaHVuayk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCi0gICAgICAgIHBhdGNoQnVmZmVy
LCBKSVRTdHViUm91dGluZVB0clRhZywKKyAgICAgICAgcGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRy
VGFnLAogICAgICAgICAiVmlydHVhbCAlcyBzbG93IHBhdGggdGh1bmsiLAotICAgICAgICBjYWxs
TGlua0luZm8uY2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6UmVndWxhciA/ICJjYWxsIiA6IGNhbGxM
aW5rSW5mby5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gInRhaWwgY2FsbCIgOiAiY29u
c3RydWN0Iik7CisgICAgICAgIG1vZGUgPT0gQ2FsbE1vZGU6OlJlZ3VsYXIgPyAiY2FsbCIgOiBt
b2RlID09IENhbGxNb2RlOjpUYWlsID8gInRhaWwgY2FsbCIgOiAiY29uc3RydWN0Iik7Cit9CisK
K3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxUaHVu
a0ZvclJlZ3VsYXJDYWxsKFZNJiB2bSkKK3sKKyAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yKHZt
LCBDYWxsTW9kZTo6UmVndWxhciwgQ29kZUZvckNhbGwpOworfQorCitzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3JSZWd1bGFyQ29uc3Ry
dWN0KFZNJiB2bSkKK3sKKyAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yKHZtLCBDYWxsTW9kZTo6
UmVndWxhciwgQ29kZUZvckNvbnN0cnVjdCk7Cit9CisKK3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxUaHVua0ZvclRhaWxDYWxsKFZNJiB2bSkKK3sK
KyAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yKHZtLCBDYWxsTW9kZTo6VGFpbCwgQ29kZUZvckNh
bGwpOworfQorCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB2
aXJ0dWFsVGh1bmtGb3JUYWlsQ29uc3RydWN0KFZNJiB2bSkKK3sKKyAgICByZXR1cm4gdmlydHVh
bFRodW5rRm9yKHZtLCBDYWxsTW9kZTo6VGFpbCwgQ29kZUZvckNvbnN0cnVjdCk7Cit9CisKK3N0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHZpcnR1YWxUaHVua0Zv
ckNvbnN0cnVjdENhbGwoVk0mIHZtKQoreworICAgIHJldHVybiB2aXJ0dWFsVGh1bmtGb3Iodm0s
IENhbGxNb2RlOjpDb25zdHJ1Y3QsIENvZGVGb3JDYWxsKTsKK30KKworc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdmlydHVhbFRodW5rRm9yQ29uc3RydWN0Q29u
c3RydWN0KFZNJiB2bSkKK3sKKyAgICByZXR1cm4gdmlydHVhbFRodW5rRm9yKHZtLCBDYWxsTW9k
ZTo6Q29uc3RydWN0LCBDb2RlRm9yQ29uc3RydWN0KTsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmtGb3IoVk0mIHZtLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbykKK3sKKyAgICBhdXRvIG1vZGUgPSBjYWxsTGlua0luZm8uY2Fs
bE1vZGUoKTsKKyAgICBhdXRvIGtpbmQgPSBjYWxsTGlua0luZm8uc3BlY2lhbGl6YXRpb25LaW5k
KCk7CisgICAgYXV0byBnZXRHZW5lcmF0b3IgPSBbJl0gKCkgLT4gVGh1bmtHZW5lcmF0b3Igewor
ICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgY2FzZSBDYWxsTW9kZTo6UmVndWxhcjoK
KyAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQorICAgICAgICAgICAgICAgIHJl
dHVybiB2aXJ0dWFsVGh1bmtGb3JSZWd1bGFyQ2FsbDsKKyAgICAgICAgICAgIHJldHVybiB2aXJ0
dWFsVGh1bmtGb3JSZWd1bGFyQ29uc3RydWN0OworICAgICAgICBjYXNlIENhbGxNb2RlOjpUYWls
OgorICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHZpcnR1YWxUaHVua0ZvclRhaWxDYWxsOworICAgICAgICAgICAgcmV0dXJuIHZpcnR1
YWxUaHVua0ZvclRhaWxDb25zdHJ1Y3Q7CisgICAgICAgIGNhc2UgQ2FsbE1vZGU6OkNvbnN0cnVj
dDoKKyAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQorICAgICAgICAgICAgICAg
IHJldHVybiB2aXJ0dWFsVGh1bmtGb3JDb25zdHJ1Y3RDYWxsOworICAgICAgICAgICAgcmV0dXJu
IHZpcnR1YWxUaHVua0ZvckNvbnN0cnVjdENvbnN0cnVjdDsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgYXV0byBnZW5lcmF0b3IgPSBnZXRHZW5lcmF0b3IoKTsKKyAgICBpZiAoT3B0aW9uczo6dXNl
VW5pcXVlVmlydHVhbFRodW5rcygpKQorICAgICAgICByZXR1cm4gZ2VuZXJhdG9yKHZtKS5yZXRh
Z2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKTsKKyAgICByZXR1cm4gdm0uZ2V0Q1RJU3R1Yihn
ZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpOwogfQogCiBlbnVtIFRo
dW5rRW50cnlUeXBlIHsgRW50ZXJWaWFDYWxsLCBFbnRlclZpYUp1bXBXaXRoU2F2ZWRUYWdzLCBF
bnRlclZpYUp1bXBXaXRob3V0U2F2ZWRUYWdzIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI3NzkyNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTgz
LDYgKzgzLDcgQEAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjYW5Vc2VKSVRDYWdlKCk7CiAgICAg
dihCb29sLCB1c2VERkdKSVQsIHRydWUsIE5vcm1hbCwgImFsbG93cyB0aGUgREZHIEpJVCB0byBi
ZSB1c2VkIGlmIHRydWUiKSBcCiAgICAgdihCb29sLCB1c2VSZWdFeHBKSVQsIGppdEVuYWJsZWRC
eURlZmF1bHQoKSwgTm9ybWFsLCAiYWxsb3dzIHRoZSBSZWdFeHAgSklUIHRvIGJlIHVzZWQgaWYg
dHJ1ZSIpIFwKICAgICB2KEJvb2wsIHVzZURPTUpJVCwgaXM2NEJpdCgpLCBOb3JtYWwsICJhbGxv
d3MgdGhlIERPTUpJVCB0byBiZSB1c2VkIGlmIHRydWUiKSBcCisgICAgdihCb29sLCB1c2VVbmlx
dWVWaXJ0dWFsVGh1bmtzLCBmYWxzZSwgTm9ybWFsLCAiYWxsb3dzIHRoZSB1bmlxdWUgdmlydHVh
bCBjYWxsIHRodW5rcyB0byBiZSBnZW5lcmF0ZWQiKSBcCiAgICAgXAogICAgIHYoQm9vbCwgcmVw
b3J0TXVzdFN1Y2NlZWRFeGVjdXRhYmxlQWxsb2NhdGlvbnMsIGZhbHNlLCBOb3JtYWwsIG51bGxw
dHIpIFwKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZp
c2lvbiAyNzc5MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg4OCwxMyArODg4LDE0IEBAIE5hdGl2ZUV4ZWN1dGFibGUqIFZNOjpn
ZXRCb3VuZEZ1bmN0aW9uKGIKICAgICByZXR1cm4gZ2V0T3JDcmVhdGUobV9mYXN0Qm91bmRFeGVj
dXRhYmxlKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFZNOjpn
ZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQpCitNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gVk06OmdldENUSUlu
dGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwg
T3B0aW9uYWw8Tm9Mb2NraW5nTmVjZXNzYXJ5VGFnPiBub0xvY2tpbmdOZWNlc3NhcnkpCiB7Cisg
ICAgVU5VU0VEX1BBUkFNKG5vTG9ja2luZ05lY2Vzc2FyeSk7CiAjaWYgRU5BQkxFKEpJVCkKICAg
ICBpZiAoT3B0aW9uczo6dXNlSklUKCkpIHsKICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNh
bGwpCi0gICAgICAgICAgICByZXR1cm4gaml0U3R1YnMtPmN0aUludGVybmFsRnVuY3Rpb25DYWxs
KCp0aGlzKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwotICAgICAgICByZXR1cm4gaml0U3R1
YnMtPmN0aUludGVybmFsRnVuY3Rpb25Db25zdHJ1Y3QoKnRoaXMpLnJldGFnZ2VkPEpTRW50cnlQ
dHJUYWc+KCk7CisgICAgICAgICAgICByZXR1cm4gaml0U3R1YnMtPmN0aUludGVybmFsRnVuY3Rp
b25DYWxsKCp0aGlzLCBub0xvY2tpbmdOZWNlc3NhcnkpLnJldGFnZ2VkPEpTRW50cnlQdHJUYWc+
KCk7CisgICAgICAgIHJldHVybiBqaXRTdHVicy0+Y3RpSW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVj
dCgqdGhpcywgbm9Mb2NraW5nTmVjZXNzYXJ5KS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwog
ICAgIH0KICNlbmRpZgogICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyNzc5MjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC04NTEsNyArODUxLDcgQEAg
cHVibGljOgogCiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0Qm91bmRGdW5jdGlvbihib29sIGlz
SlNGdW5jdGlvbiwgYm9vbCBjYW5Db25zdHJ1Y3QpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+IGdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENv
ZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2RlU3BlY2lhbGl6
YXRpb25LaW5kLCBPcHRpb25hbDxOb0xvY2tpbmdOZWNlc3NhcnlUYWc+ID0gV1RGOjpudWxsb3B0
KTsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgZXhjZXB0aW9uT2Zmc2V0KCkKICAgICB7Cg==
</data>
<flag name="review"
          id="450647"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
    <flag name="commit-queue"
          id="450651"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>