<?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>134090</bug_id>
          
          <creation_ts>2014-06-19 21:35:08 -0700</creation_ts>
          <short_desc>[ftlopt] Fold GetById/PutById to MultiGetByOffset/GetByOffset or MultiPutByOffset/PutByOffset, which implies handling non-singleton sets</short_desc>
          <delta_ts>2014-06-22 18:09: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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>133229</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1016833</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-19 21:35:08 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016834</commentid>
    <comment_count>1</comment_count>
      <attachid>233404</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-19 21:36:39 -0700</bug_when>
    <thetext>Created attachment 233404
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017323</commentid>
    <comment_count>2</comment_count>
      <attachid>233542</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-21 12:56:10 -0700</bug_when>
    <thetext>Created attachment 233542
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017325</commentid>
    <comment_count>3</comment_count>
      <attachid>233542</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-21 12:56:57 -0700</bug_when>
    <thetext>Comment on attachment 233542
the patch

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

&gt; Source/JavaScriptCore/ChangeLog:111
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +        
&gt; +        Work in progress.
&gt; +
&gt; +        * bytecode/GetByIdStatus.cpp:
&gt; +        (JSC::GetByIdStatus::computeForStubInfo):
&gt; +        (JSC::GetByIdStatus::computeFor):
&gt; +        * bytecode/GetByIdStatus.h:
&gt; +        * bytecode/PutByIdStatus.cpp:
&gt; +        (JSC::PutByIdStatus::computeFor):
&gt; +        * bytecode/PutByIdStatus.h:
&gt; +        * bytecode/PutByIdVariant.h:
&gt; +        (JSC::PutByIdVariant::constantChecks):
&gt; +        * dfg/DFGAbstractInterpreterInlines.h:
&gt; +        (JSC::DFG::AbstractInterpreter&lt;AbstractStateType&gt;::executeEffects):
&gt; +        * dfg/DFGByteCodeParser.cpp:
&gt; +        (JSC::DFG::ByteCodeParser::parseBlock):
&gt; +        * dfg/DFGConstantFoldingPhase.cpp:
&gt; +        (JSC::DFG::ConstantFoldingPhase::foldConstants):
&gt; +        (JSC::DFG::ConstantFoldingPhase::emitPutByOffset):
&gt; +        (JSC::DFG::ConstantFoldingPhase::addChecks):
&gt; +        * dfg/DFGNode.h:
&gt; +        (JSC::DFG::Node::convertToMultiGetByOffset):
&gt; +        (JSC::DFG::Node::convertToMultiPutByOffset):
&gt; +        * dfg/DFGStructureAbstractValue.h:
&gt; +        (JSC::DFG::StructureAbstractValue::set):
&gt; +
&gt; +2014-06-19  Filip Pizlo  &lt;fpizlo@apple.com&gt;
&gt; +

I&apos;ve reverted this locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017456</commentid>
    <comment_count>4</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-06-22 17:40:00 -0700</bug_when>
    <thetext>(Sorry that took so long I just wanted to checkout the branch and try to get a more complete understanding of what&apos;s going on.  Kind of lost track over the last week)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017459</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-22 18:09:01 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/170275</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233404</attachid>
            <date>2014-06-19 21:36:39 -0700</date>
            <delta_ts>2014-06-21 12:56:10 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>33105</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwMTcyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBA
CisyMDE0LTA2LTE5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
W2Z0bG9wdF0gRm9sZCBHZXRCeUlkL1B1dEJ5SWQgdG8gTXVsdGlHZXRCeU9mZnNldC9HZXRCeU9m
ZnNldCBvciBNdWx0aVB1dEJ5T2Zmc2V0L1B1dEJ5T2Zmc2V0LCB3aGljaCBpbXBsaWVzIGhhbmRs
aW5nIG5vbi1zaW5nbGV0b24gc2V0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM0MDkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAgICogYnl0
ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaDoKKyAgICAgICAgKiBieXRl
Y29kZS9QdXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29t
cHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oOgorICAgICAgICAq
IGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50Lmg6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50
Ojpjb25zdGFudENoZWNrcyk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAg
KEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6ZW1pdFB1dEJ5T2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6YWRkQ2hlY2tzKToKKyAgICAgICAg
KiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRUb011bHRp
R2V0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRUb011bHRpUHV0
QnlPZmZzZXQpOgorICAgICAgICAqIGRmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6c2V0KToKKwogMjAxNC0w
Ni0xOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFtmdGxvcHRd
IFN0cnVjdHVyZVNldDo6b25seVN0cnVjdHVyZSgpIHNob3VsZCByZXR1cm4gbnVsbHB0ciBpZiBp
dCdzIG5vdCBhIHNpbmdsZXRvbiAoaW5zdGVhZCBvZiBhc3NlcnRpbmcpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lv
biAxNzAxNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw3ICsxNzAsOCBAQCBHZXRCeUlkU3RhdHVzIEdl
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgIAogICAgICAgICB2YXJpYW50Lm1fc3Ry
dWN0dXJlU2V0LmFkZChzdHJ1Y3R1cmUpOwogICAgICAgICB2YXJpYW50Lm1fc3BlY2lmaWNWYWx1
ZSA9IEpTVmFsdWUoc3BlY2lmaWNWYWx1ZSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmRWYXJpYW50
KHZhcmlhbnQpOworICAgICAgICBib29sIHJlc3VsdCA9IHJlc3VsdC5hcHBlbmRWYXJpYW50KHZh
cmlhbnQpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0KTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgICAgIApAQCAtMzEyLDM0ICszMTMsNDMgQEAgR2V0
QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgIHJldHVybiBjb21wdXRl
Rm9yKHByb2ZpbGVkQmxvY2ssIGJhc2VsaW5lTWFwLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgs
IHVpZCk7CiB9CiAKLUdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJpbmdJbXBsKiB1aWQpCitHZXRCeUlkU3RhdHVz
IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoVk0mIHZtLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNl
dCwgU3RyaW5nSW1wbCogdWlkKQogewogICAgIC8vIEZvciBub3cgd2Ugb25seSBoYW5kbGUgdGhl
IHN1cGVyIHNpbXBsZSBzZWxmIGFjY2VzcyBjYXNlLiBXZSBjb3VsZCBoYW5kbGUgdGhlCiAgICAg
Ly8gcHJvdG90eXBlIGNhc2UgaW4gdGhlIGZ1dHVyZS4KICAgICAKLSAgICBpZiAoIXN0cnVjdHVy
ZSkKLSAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgaWYg
KHNldC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKCk7CiAKICAgICBp
ZiAodG9VSW50MzJGcm9tU3RyaW5nSW1wbCh1aWQpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRl
eCkKICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgCi0g
ICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qo
KSAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpICE9IEdsb2JhbE9iamVjdFR5cGUpCi0g
ICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgIEdldEJ5SWRT
dGF0dXMgcmVzdWx0OworICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOworICAgIHJlc3VsdC5t
X3dhc1NlZW5JbkpJVCA9IGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZXQu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzZXRbaV07Cisg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90KCkgJiYgc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSAhPSBHbG9iYWxPYmplY3RUeXBl
KQorICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAg
ICAgIAorICAgICAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJs
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Cisg
ICAgICAgIAorICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAgICBKU0NlbGwqIHNw
ZWNpZmljVmFsdWU7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+
Z2V0Q29uY3VycmVudGx5KHZtLCB1aWQsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAg
ICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgIHJldHVybiBHZXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOyAvLyBJdCdzIHByb2JhYmx5IGEgcHJvdG90eXBlIGxv
b2t1cC4gR2l2ZSB1cCBvbiBsaWZlIGZvciBub3csIGV2ZW4gdGhvdWdoIHdlIGNvdWxkIHRvdGFs
bHkgYmUgd2F5IHNtYXJ0ZXIgYWJvdXQgaXQuCisgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgQWNj
ZXNzb3IpCisgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhNYWtlc0NhbGxzKTsgLy8g
V2UgY291bGQgYmUgc21hcnRlciBoZXJlLCBsaWtlIHN0cmVuZ2h0LXJlZHVjaW5nIHRoaXMgdG8g
YSBDYWxsLgorICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAg
ICAgIHNwZWNpZmljVmFsdWUgPSAwOworICAgICAgICAKKyAgICAgICAgaWYgKCFyZXN1bHQuYXBw
ZW5kVmFyaWFudChHZXRCeUlkVmFyaWFudChzdHJ1Y3R1cmUsIG9mZnNldCwgc3BlY2lmaWNWYWx1
ZSkpKQorICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Cisg
ICAgfQogICAgIAotICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVh
YmxlKCkpCi0gICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotCi0g
ICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7Ci0gICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodm0sIHVp
ZCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7Ci0gICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpCi0gICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOyAvLyBJ
dCdzIHByb2JhYmx5IGEgcHJvdG90eXBlIGxvb2t1cC4gR2l2ZSB1cCBvbiBsaWZlIGZvciBub3cs
IGV2ZW4gdGhvdWdoIHdlIGNvdWxkIHRvdGFsbHkgYmUgd2F5IHNtYXJ0ZXIgYWJvdXQgaXQuCi0g
ICAgaWYgKGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikKLSAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0
dXMoTWFrZXNDYWxscyk7Ci0gICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAg
ICAgIHNwZWNpZmljVmFsdWUgPSAwOwotICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKAotICAgICAg
ICBTaW1wbGUsIGZhbHNlLCBHZXRCeUlkVmFyaWFudChTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwg
b2Zmc2V0LCBzcGVjaWZpY1ZhbHVlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogYm9vbCBH
ZXRCeUlkU3RhdHVzOjptYWtlc0NhbGxzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAkocmV2aXNpb24gMTcwMTU5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAkod29ya2luZyBj
b3B5KQpAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBH
ZXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgU3R1YkluZm9NYXAmLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4LCBTdHJpbmdJbXBsKiB1aWQpOwotICAgIHN0YXRpYyBHZXRCeUlkU3Rh
dHVzIGNvbXB1dGVGb3IoVk0mLCBTdHJ1Y3R1cmUqLCBTdHJpbmdJbXBsKiB1aWQpOworICAgIHN0
YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoVk0mLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBT
dHJpbmdJbXBsKiB1aWQpOwogICAgIAogICAgIHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVG
b3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBDb2RlQmxvY2sqIGRmZ0Jsb2NrLCBTdHViSW5m
b01hcCYgYmFzZWxpbmVNYXAsIFN0dWJJbmZvTWFwJiBkZmdNYXAsIENvZGVPcmlnaW4sIFN0cmlu
Z0ltcGwqIHVpZCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAxNzAxNTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI1OSw4OCArMjU5LDEwMSBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IoCiAgICAgcmV0dXJuIGNvbXB1dGVGb3IoYmFzZWxpbmVCbG9jaywgYmFzZWxpbmVNYXAsIGNv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgdWlkKTsKIH0KIAotUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cmluZ0ltcGwqIHVpZCwgYm9vbCBpc0RpcmVjdCkKK1B1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0LCBTdHJpbmdJbXBsKiB1
aWQsIGJvb2wgaXNEaXJlY3QpCiB7CiAgICAgaWYgKHRvVUludDMyRnJvbVN0cmluZ0ltcGwodWlk
KSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCiAgICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKFRha2VzU2xvd1BhdGgpOwogCi0gICAgaWYgKCFzdHJ1Y3R1cmUpCi0gICAgICAgIHJldHVy
biBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgIAotICAgIGlmIChzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KCkgJiYgc3RydWN0dXJlLT50
eXBlSW5mbygpLnR5cGUoKSAhPSBHbG9iYWxPYmplY3RUeXBlKQotICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLQotICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0
eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRh
a2VzU2xvd1BhdGgpOworICAgIGlmIChzZXQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cygpOwogICAgIAotICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgSlNDZWxs
KiBzcGVjaWZpY1ZhbHVlOwotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+
Z2V0Q29uY3VycmVudGx5KHZtLCB1aWQsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOwotICAg
IGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBD
dXN0b21BY2Nlc3NvcikKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE1ha2VzQ2Fs
bHMpOwotCi0gICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKEFjY2Vzc29yIHwgUmVhZE9ubHkpKQor
ICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0OworICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZXQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzZXRbaV07CisgICAgICAgIAorICAgICAgICBpZiAoc3Ry
dWN0dXJlLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgpICYmIHN0cnVj
dHVyZS0+dHlwZUluZm8oKS50eXBlKCkgIT0gR2xvYmFsT2JqZWN0VHlwZSkKICAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwotICAgICAgICBpZiAoc3BlY2lm
aWNWYWx1ZSkgewotICAgICAgICAgICAgLy8gV2UgbmVlZCB0aGUgUHV0QnlJZCBzbG93IHBhdGgg
dG8gdmVyaWZ5IHRoYXQgd2UncmUgc3RvcmluZyB0aGUgcmlnaHQgdmFsdWUgaW50bwotICAgICAg
ICAgICAgLy8gdGhlIHNwZWNpYWxpemVkIHNsb3QuCisKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUt
PnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKICAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgIAorICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1
dGVzOworICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7CisgICAgICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHZtLCB1aWQsIGF0dHJpYnV0
ZXMsIHNwZWNpZmljVmFsdWUpOworICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7
CisgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIEN1c3RvbUFjY2Vzc29yKQorICAgICAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMpOworCisgICAgICAgICAgICBp
ZiAoYXR0cmlidXRlcyAmIChBY2Nlc3NvciB8IFJlYWRPbmx5KSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgIGlmIChzcGVj
aWZpY1ZhbHVlKSB7CisgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0aGUgUHV0QnlJZCBzbG93
IHBhdGggdG8gdmVyaWZ5IHRoYXQgd2UncmUgc3RvcmluZyB0aGUgcmlnaHQgdmFsdWUgaW50bwor
ICAgICAgICAgICAgICAgIC8vIHRoZSBzcGVjaWFsaXplZCBzbG90LgorICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudChQdXRCeUlkVmFyaWFudDo6cmVwbGFj
ZShzdHJ1Y3R1cmUsIG9mZnNldCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KTsK
LSAgICB9CiAgICAgCi0gICAgLy8gT3VyIGh5cG90aGVzaXMgaXMgdGhhdCB3ZSdyZSBkb2luZyBh
IHRyYW5zaXRpb24uIEJlZm9yZSB3ZSBwcm92ZSB0aGF0IHRoaXMgaXMgcmVhbGx5Ci0gICAgLy8g
dHJ1ZSwgd2Ugd2FudCB0byBkbyBzb21lIHNhbml0eSBjaGVja3MuCisgICAgICAgIC8vIE91ciBo
eXBvdGhlc2lzIGlzIHRoYXQgd2UncmUgZG9pbmcgYSB0cmFuc2l0aW9uLiBCZWZvcmUgd2UgcHJv
dmUgdGhhdCB0aGlzIGlzIHJlYWxseQorICAgICAgICAvLyB0cnVlLCB3ZSB3YW50IHRvIGRvIHNv
bWUgc2FuaXR5IGNoZWNrcy4KICAgICAKLSAgICAvLyBEb24ndCBjYWNoZSBwdXQgdHJhbnNpdGlv
bnMgb24gZGljdGlvbmFyaWVzLgotICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQot
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgLy8g
RG9uJ3QgY2FjaGUgcHV0IHRyYW5zaXRpb25zIG9uIGRpY3Rpb25hcmllcy4KKyAgICAgICAgaWYg
KHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0
YXR1cyhUYWtlc1Nsb3dQYXRoKTsKIAotICAgIC8vIElmIHRoZSBzdHJ1Y3R1cmUgY29ycmVzcG9u
ZHMgdG8gc29tZXRoaW5nIHRoYXQgaXNuJ3QgYW4gb2JqZWN0LCB0aGVuIGdpdmUgdXAsIHNpbmNl
Ci0gICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBiZSBhZGRpbmcgcHJvcGVydGllcyB0byBzdHJpbmdz
LgotICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IFN0cmluZ1R5cGUpCi0g
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICAvLyBJ
ZiB0aGUgc3RydWN0dXJlIGNvcnJlc3BvbmRzIHRvIHNvbWV0aGluZyB0aGF0IGlzbid0IGFuIG9i
amVjdCwgdGhlbiBnaXZlIHVwLCBzaW5jZQorICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIGJl
IGFkZGluZyBwcm9wZXJ0aWVzIHRvIHN0cmluZ3MuCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5
cGVJbmZvKCkudHlwZSgpID09IFN0cmluZ1R5cGUpCisgICAgICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAKLSAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbj4gY2hhaW47Ci0gICAgaWYgKCFpc0RpcmVjdCkgewotICAgICAgICBjaGFpbiA9IGFk
b3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
KSk7CisgICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKKyAgICAg
ICAgaWYgKCFpc0RpcmVjdCkgeworICAgICAgICAgICAgY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkpOwogICAgICAgICAK
LSAgICAgICAgLy8gSWYgdGhlIHByb3RvdHlwZSBjaGFpbiBoYXMgc2V0dGVycyBvciByZWFkLW9u
bHkgcHJvcGVydGllcywgdGhlbiBnaXZlIHVwLgotICAgICAgICBpZiAoY2hhaW4tPm1heUludGVy
Y2VwdFN0b3JlVG8odm0sIHVpZCkpCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhU
YWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgIC8vIElmIHRoZSBwcm90b3R5cGUgY2hhaW4gaGFz
IHNldHRlcnMgb3IgcmVhZC1vbmx5IHByb3BlcnRpZXMsIHRoZW4gZ2l2ZSB1cC4KKyAgICAgICAg
ICAgIGlmIChjaGFpbi0+bWF5SW50ZXJjZXB0U3RvcmVUbyh2bSwgdWlkKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgCi0gICAg
ICAgIC8vIElmIHRoZSBwcm90b3R5cGUgY2hhaW4gaGFzbid0IGJlZW4gbm9ybWFsaXplZCAoaS5l
LiB0aGVyZSBhcmUgcHJveGllcyBvciBkaWN0aW9uYXJpZXMpCi0gICAgICAgIC8vIHRoZW4gZ2l2
ZSB1cC4gVGhlIGRpY3Rpb25hcnkgY2FzZSB3b3VsZCBvbmx5IGhhcHBlbiBpZiB0aGlzIHN0cnVj
dHVyZSBoYXMgbm90IGJlZW4KLSAgICAgICAgLy8gdXNlZCBpbiBhbiBvcHRpbWl6ZWQgcHV0X2J5
X2lkIHRyYW5zaXRpb24uIEFuZCByZWFsbHkgdGhlIG9ubHkgcmVhc29uIHdoeSB3ZSB3b3VsZAot
ICAgICAgICAvLyBiYWlsIGhlcmUgaXMgdGhhdCBJIGRvbid0IHJlYWxseSBmZWVsIGxpa2UgaGF2
aW5nIHRoZSBvcHRpbWl6aW5nIEpJVCBnbyBhbmQgZmxhdHRlbgotICAgICAgICAvLyBkaWN0aW9u
YXJpZXMgaWYgd2UgaGF2ZSBldmlkZW5jZSB0byBzdWdnZXN0IHRoYXQgdGhvc2Ugb2JqZWN0cyB3
ZXJlIG5ldmVyIHVzZWQgYXMKLSAgICAgICAgLy8gcHJvdG90eXBlcyBpbiBhIGNhY2hlYWJsZSBw
cm90b3R5cGUgYWNjZXNzIC0gaS5lLiB0aGVyZSdzIGEgZ29vZCBjaGFuY2UgdGhhdCBzb21lIG9m
Ci0gICAgICAgIC8vIHRoZSBvdGhlciBjaGVja3MgYmVsb3cgd2lsbCBmYWlsLgotICAgICAgICBp
ZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkgfHwgIWNoYWluLT5pc05vcm1hbGl6ZWQoKSkKKyAgICAg
ICAgICAgIC8vIElmIHRoZSBwcm90b3R5cGUgY2hhaW4gaGFzbid0IGJlZW4gbm9ybWFsaXplZCAo
aS5lLiB0aGVyZSBhcmUgcHJveGllcyBvciBkaWN0aW9uYXJpZXMpCisgICAgICAgICAgICAvLyB0
aGVuIGdpdmUgdXAuIFRoZSBkaWN0aW9uYXJ5IGNhc2Ugd291bGQgb25seSBoYXBwZW4gaWYgdGhp
cyBzdHJ1Y3R1cmUgaGFzIG5vdCBiZWVuCisgICAgICAgICAgICAvLyB1c2VkIGluIGFuIG9wdGlt
aXplZCBwdXRfYnlfaWQgdHJhbnNpdGlvbi4gQW5kIHJlYWxseSB0aGUgb25seSByZWFzb24gd2h5
IHdlIHdvdWxkCisgICAgICAgICAgICAvLyBiYWlsIGhlcmUgaXMgdGhhdCBJIGRvbid0IHJlYWxs
eSBmZWVsIGxpa2UgaGF2aW5nIHRoZSBvcHRpbWl6aW5nIEpJVCBnbyBhbmQgZmxhdHRlbgorICAg
ICAgICAgICAgLy8gZGljdGlvbmFyaWVzIGlmIHdlIGhhdmUgZXZpZGVuY2UgdG8gc3VnZ2VzdCB0
aGF0IHRob3NlIG9iamVjdHMgd2VyZSBuZXZlciB1c2VkIGFzCisgICAgICAgICAgICAvLyBwcm90
b3R5cGVzIGluIGEgY2FjaGVhYmxlIHByb3RvdHlwZSBhY2Nlc3MgLSBpLmUuIHRoZXJlJ3MgYSBn
b29kIGNoYW5jZSB0aGF0IHNvbWUgb2YKKyAgICAgICAgICAgIC8vIHRoZSBvdGhlciBjaGVja3Mg
YmVsb3cgd2lsbCBmYWlsLgorICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgpIHx8
ICFjaGFpbi0+aXNOb3JtYWxpemVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLy8gV2Ugb25s
eSBvcHRpbWl6ZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgc3RydWN0dXJlIHRoYXQgdGhlIHRyYW5z
aXRpb24gaXMgY2FjaGVkIHRvLgorICAgICAgICAvLyBBbW9uZyBvdGhlciB0aGluZ3MsIHRoaXMg
YWxsb3dzIHVzIHRvIGd1YXJkIGFnYWluc3QgYSB0cmFuc2l0aW9uIHdpdGggYSBzcGVjaWZpYwor
ICAgICAgICAvLyB2YWx1ZS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBJZiB3ZSdyZSBzdG9y
aW5nIGEgdmFsdWUgdGhhdCBjb3VsZCBiZSBzcGVjaWZpYzogdGhpcyB3b3VsZCBvbmx5IGJlIGEg
cHJvYmxlbSBpZgorICAgICAgICAvLyAgIHRoZSBleGlzdGluZyB0cmFuc2l0aW9uIGRpZCBoYXZl
IGEgc3BlY2lmaWMgdmFsdWUgYWxyZWFkeSwgc2luY2UgaWYgaXQgZGlkbid0LAorICAgICAgICAv
LyAgIHRoZW4gd2Ugd291bGQgYmVoYXZlICJhcyBpZiIgd2Ugd2VyZSBub3Qgc3RvcmluZyBhIHNw
ZWNpZmljIHZhbHVlLiBJZiBpdCBkaWQKKyAgICAgICAgLy8gICBoYXZlIGEgc3BlY2lmaWMgdmFs
dWUsIHRoZW4gd2UnbGwga25vdyAtIHRoZSBmYWN0IHRoYXQgd2UgcGFzcyAwIGZvcgorICAgICAg
ICAvLyAgIHNwZWNpZmljVmFsdWUgd2lsbCB0ZWxsIHVzLgorICAgICAgICAvLworICAgICAgICAv
LyAtIElmIHdlJ3JlIG5vdCBzdG9yaW5nIGEgdmFsdWUgdGhhdCBjb3VsZCBiZSBzcGVjaWZpYzog
YWdhaW4sIHRoaXMgd291bGQgb25seSBiZSBhCisgICAgICAgIC8vICAgcHJvYmxlbSBpZiB0aGUg
ZXhpc3RpbmcgdHJhbnNpdGlvbiBkaWQgaGF2ZSBhIHNwZWNpZmljIHZhbHVlLCB3aGljaCB3ZSBj
aGVjayBmb3IKKyAgICAgICAgLy8gICBieSBwYXNzaW5nIDAgZm9yIHRoZSBzcGVjaWZpY1ZhbHVl
LgorICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5
VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0dXJlLCB1aWQs
IDAsIDAsIG9mZnNldCk7CisgICAgICAgIGlmICghdHJhbnNpdGlvbikKKyAgICAgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOyAvLyBUaGlzIG9jY3VycyBpbiBiaXph
cnJlIGNhc2VzIG9ubHkuIFNlZSBhYm92ZS4KKyAgICAgICAgQVNTRVJUKCF0cmFuc2l0aW9uLT50
cmFuc2l0aW9uRGlkSW52b2x2ZVNwZWNpZmljVmFsdWUoKSk7CisgICAgICAgIEFTU0VSVChpc1Zh
bGlkT2Zmc2V0KG9mZnNldCkpOworICAgIAorICAgICAgICBib29sIHJlc3VsdCA9IHJlc3VsdC5h
cHBlbmRWYXJpYW50KAorICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oc3Ry
dWN0dXJlLCB0cmFuc2l0aW9uLCBjaGFpbi5yZWxlYXNlKCksIG9mZnNldCkpOworICAgICAgICBp
ZiAoIXJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1Bh
dGgpOwogICAgIH0KICAgICAKLSAgICAvLyBXZSBvbmx5IG9wdGltaXplIGlmIHRoZXJlIGlzIGFs
cmVhZHkgYSBzdHJ1Y3R1cmUgdGhhdCB0aGUgdHJhbnNpdGlvbiBpcyBjYWNoZWQgdG8uCi0gICAg
Ly8gQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIGFsbG93cyB1cyB0byBndWFyZCBhZ2FpbnN0IGEg
dHJhbnNpdGlvbiB3aXRoIGEgc3BlY2lmaWMKLSAgICAvLyB2YWx1ZS4KLSAgICAvLwotICAgIC8v
IC0gSWYgd2UncmUgc3RvcmluZyBhIHZhbHVlIHRoYXQgY291bGQgYmUgc3BlY2lmaWM6IHRoaXMg
d291bGQgb25seSBiZSBhIHByb2JsZW0gaWYKLSAgICAvLyAgIHRoZSBleGlzdGluZyB0cmFuc2l0
aW9uIGRpZCBoYXZlIGEgc3BlY2lmaWMgdmFsdWUgYWxyZWFkeSwgc2luY2UgaWYgaXQgZGlkbid0
LAotICAgIC8vICAgdGhlbiB3ZSB3b3VsZCBiZWhhdmUgImFzIGlmIiB3ZSB3ZXJlIG5vdCBzdG9y
aW5nIGEgc3BlY2lmaWMgdmFsdWUuIElmIGl0IGRpZAotICAgIC8vICAgaGF2ZSBhIHNwZWNpZmlj
IHZhbHVlLCB0aGVuIHdlJ2xsIGtub3cgLSB0aGUgZmFjdCB0aGF0IHdlIHBhc3MgMCBmb3IKLSAg
ICAvLyAgIHNwZWNpZmljVmFsdWUgd2lsbCB0ZWxsIHVzLgotICAgIC8vCi0gICAgLy8gLSBJZiB3
ZSdyZSBub3Qgc3RvcmluZyBhIHZhbHVlIHRoYXQgY291bGQgYmUgc3BlY2lmaWM6IGFnYWluLCB0
aGlzIHdvdWxkIG9ubHkgYmUgYQotICAgIC8vICAgcHJvYmxlbSBpZiB0aGUgZXhpc3RpbmcgdHJh
bnNpdGlvbiBkaWQgaGF2ZSBhIHNwZWNpZmljIHZhbHVlLCB3aGljaCB3ZSBjaGVjayBmb3IKLSAg
ICAvLyAgIGJ5IHBhc3NpbmcgMCBmb3IgdGhlIHNwZWNpZmljVmFsdWUuCi0gICAgU3RydWN0dXJl
KiB0cmFuc2l0aW9uID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5n
U3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwgdWlkLCAwLCAwLCBvZmZzZXQpOwotICAg
IGlmICghdHJhbnNpdGlvbikKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93
UGF0aCk7IC8vIFRoaXMgb2NjdXJzIGluIGJpemFycmUgY2FzZXMgb25seS4gU2VlIGFib3ZlLgot
ICAgIEFTU0VSVCghdHJhbnNpdGlvbi0+dHJhbnNpdGlvbkRpZEludm9sdmVTcGVjaWZpY1ZhbHVl
KCkpOwotICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgIAotICAgIHJldHVy
biBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNoYWlu
LnJlbGVhc2UoKSwgb2Zmc2V0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIFB1dEJ5
SWRTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkocmV2aXNpb24gMTcwMTU5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkod29y
a2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHN0
YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgU3R1YkluZm9NYXAmLCB1
bnNpZ25lZCBieXRlY29kZUluZGV4LCBTdHJpbmdJbXBsKiB1aWQpOwotICAgIHN0YXRpYyBQdXRC
eUlkU3RhdHVzIGNvbXB1dGVGb3IoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFN0
cmluZ0ltcGwqIHVpZCwgYm9vbCBpc0RpcmVjdCk7CisgICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMg
Y29tcHV0ZUZvcihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RydWN0dXJlU2V0JiwgU3Ry
aW5nSW1wbCogdWlkLCBib29sIGlzRGlyZWN0KTsKICAgICAKICAgICBzdGF0aWMgUHV0QnlJZFN0
YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgQ29kZUJsb2NrKiBkZmdC
bG9jaywgU3R1YkluZm9NYXAmIGJhc2VsaW5lTWFwLCBTdHViSW5mb01hcCYgZGZnTWFwLCBDb2Rl
T3JpZ2luLCBTdHJpbmdJbXBsKiB1aWQpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDE3MDE1OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDYsNyArMTA2LDYgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IENvbnN0
YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGNvbnN0YW50Q2hlY2tzKCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbik7CiAgICAgICAgIHJldHVybiBtX2Nv
bnN0YW50Q2hlY2tzOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlz
aW9uIDE3MDE1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3MCw0NiArMTM3MCw0NSBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRCeUlkOgotICAgIGNhc2UgR2V0QnlJZEZsdXNoOgor
ICAgIGNhc2UgR2V0QnlJZEZsdXNoOiB7CiAgICAgICAgIGlmICghbm9kZS0+cHJlZGljdGlvbigp
KSB7CiAgICAgICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKG5vZGUtPmNo
aWxkMSgpLT5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIHVzZSBvZiBvbmx5
U3RydWN0dXJlKCkgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGdpdmluZyBHZXRCeUlkU3RhdHVzIHRo
ZSBhYmlsaXR5Ci0gICAgICAgICAgICAvLyB0byBjb21wdXRlIHRoaW5ncyBiYXNlZCBvbiBhIFN0
cnVjdHVyZVNldCwgYW5kIHRoZW4gdG8gZmFjdG9yIEJ5dGVDb2RlUGFyc2VyJ3MKLSAgICAgICAg
ICAgIC8vIGFiaWxpdHkgdG8gZ2VuZXJhdGUgY29kZSBiYXNlZCBvbiBhIEdldEJ5SWRTdGF0dXMg
b3V0IG9mIEJ5dGVDb2RlUGFyc2VyIHNvIHRoYXQKLSAgICAgICAgICAgIC8vIENvbnN0YW50Rm9s
ZGluZ1BoYXNlIGNhbiB1c2UgaXQuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMjI5Ci0gICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0
dXJlKCkpIHsKLSAgICAgICAgICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV92bSwgc3Ry
dWN0dXJlLAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+
aWRlbnRpZmllck51bWJlcigpXSk7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBs
ZSgpICYmIHN0YXR1cy5udW1WYXJpYW50cygpID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gQXNzZXJ0IHRoaW5ncyB0aGF0IHdlIGNhbid0IGhhbmRsZSBhbmQgdGhhdCB0aGUgY29tcHV0
ZUZvcigpIG1ldGhvZAotICAgICAgICAgICAgICAgICAgICAvLyBhYm92ZSB3b24ndCBiZSBhYmxl
IHRvIHJldHVybi4KLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1c1swXS5zdHJ1Y3R1
cmVTZXQoKS5zaXplKCkgPT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXNb
MF0uY29uc3RhbnRDaGVja3MoKS5pc0VtcHR5KCkpOwotICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoIXN0YXR1c1swXS5hbHRlcm5hdGVCYXNlKCkpOwotICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1c1swXS5zcGVjaWZpY1ZhbHVlKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXNbMF0uc3BlY2lmaWNWYWx1ZSgpLmlzQ2VsbCgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBz
dGF0dXNbMF0uc3BlY2lmaWNWYWx1ZSgpLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuY29uc2lkZXIoc3RydWN0
dXJlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZShzdGF0dXNbMF0uc3BlY2lmaWNWYWx1
ZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwotICAgICAgICAgICAgICAgICAgICBmaWx0
ZXIobm9kZS0+Y2hpbGQxKCksIHN0YXR1c1swXS5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgIAor
ICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBpZiAoIXZhbHVlLm1fc3RydWN0dXJlLmlzVG9wKCkgJiYgIXZhbHVlLm1fc3RydWN0
dXJlLmlzQ2xvYmJlcmVkKCkKKyAgICAgICAgICAgICYmIChub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkgPT0gQ2VsbFVzZSB8fCAhKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpKSB7CisgICAgICAg
ICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCisg
ICAgICAgICAgICAgICAgZ3JhcGgubV92bSwgdmFsdWUubV9zdHJ1Y3R1cmUuc2V0KCksCisgICAg
ICAgICAgICAgICAgbV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1iZXIo
KV0pOworICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZSgpKSB7CisgICAgICAgICAgICAg
ICAgLy8gRmlndXJlIG91dCB3aGF0IHRoZSByZXN1bHQgaXMgZ29pbmcgdG8gYmUgLSBpcyBpdCBU
T1AsIGEgY29uc3RhbnQsIG9yIG1heWJlCisgICAgICAgICAgICAgICAgLy8gc29tZXRoaW5nIG1v
cmUgc3VidGxlPy4KKyAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKKyAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0dXMubnVtVmFyaWFudHMoKTsgaS0tOykg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXR1c1tpXS5zcGVjaWZpY1ZhbHVlKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHMo
dHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBB
YnN0cmFjdFZhbHVlIHRoaXNSZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIHRoaXNSZXN1bHQu
c2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgKm1fZ3JhcGguZnJlZXplKHZh
cmlhbnQuc3BlY2lmaWNWYWx1ZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUu
c3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQubWVy
Z2UodGhpc1Jlc3VsdCk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChz
dGF0dXMubnVtVmFyaWFudHMoKSA9PSAxIHx8IGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpKQor
ICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZSkgPSByZXN1bHQ7CisgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwogICAgICAgICBmb3JOb2RlKG5vZGUp
Lm1ha2VIZWFwVG9wKCk7CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICAgICAgICAgIAogICAg
IGNhc2UgR2V0QXJyYXlMZW5ndGg6CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVj
SW50MzIpOwpAQCAtMTY4NSwzNyArMTY4NCw0NiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIAogICAgIGNhc2UgUHV0QnlJZDoKICAgICBjYXNlIFB1
dEJ5SWRGbHVzaDoKLSAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6Ci0gICAgICAgIC8vIFRoaXMgdXNl
IG9mIG9ubHlTdHJ1Y3R1cmUoKSBzaG91bGQgYmUgcmVwbGFjZWQgYnkgZ2l2aW5nIFB1dEJ5SWRT
dGF0dXMgdGhlIGFiaWxpdHkKLSAgICAgICAgLy8gdG8gY29tcHV0ZSB0aGluZ3MgYmFzZWQgb24g
YSBTdHJ1Y3R1cmVTZXQsIGFuZCB0aGVuIHRvIGZhY3RvciBCeXRlQ29kZVBhcnNlcidzCi0gICAg
ICAgIC8vIGFiaWxpdHkgdG8gZ2VuZXJhdGUgY29kZSBiYXNlZCBvbiBhIFB1dEJ5SWRTdGF0dXMg
b3V0IG9mIEJ5dGVDb2RlUGFyc2VyIHNvIHRoYXQKLSAgICAgICAgLy8gQ29uc3RhbnRGb2xkaW5n
UGhhc2UgY2FuIHVzZSBpdC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzMzIyOQotICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkpIHsKKyAg
ICBjYXNlIFB1dEJ5SWREaXJlY3Q6IHsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgaWYgKCF2YWx1ZS5tX3N0cnVjdHVyZS5p
c1RvcCgpICYmICF2YWx1ZS5tX3N0cnVjdHVyZS5pc0Nsb2JiZXJlZCgpKSB7CiAgICAgICAgICAg
ICBQdXRCeUlkU3RhdHVzIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5tX3ZtLAogICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksCi0gICAgICAgICAgICAgICAgc3RydWN0
dXJlLAorICAgICAgICAgICAgICAgIHZhbHVlLm1fc3RydWN0dXJlLnNldCgpLAogICAgICAgICAg
ICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldLAog
ICAgICAgICAgICAgICAgIG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVjdCk7Ci0gICAgICAgICAg
ICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkgJiYgc3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSkgewot
ICAgICAgICAgICAgICAgIGlmIChzdGF0dXNbMF0ua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpS
ZXBsYWNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgc3Ry
dWN0dXJlKTsKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0
cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmIChzdGF0dXMuaXNTaW1wbGUoKSkgeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNl
dCBuZXdTZXQ7CisgICAgICAgICAgICAgICAgVHJhbnNpdGlvblZlY3RvciB0cmFuc2l0aW9uczsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0
dXMubnVtVmFyaWFudHMoKTsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBQdXRC
eUlkVmFyaWFudCYgdmFyaWFudCA9IHN0YXR1c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0cmFuc2l0aW9ucy5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVHJhbnNpdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
aWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NldC5hZGQodmFyaWFudC5uZXdTdHJ1Y3R1
cmUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2V0Lm1lcmdlKHZhcmlhbnQub2xkU3RydWN0dXJl
KCkpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGlmIChzdGF0dXNbMF0ua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9u
Ci0gICAgICAgICAgICAgICAgICAgICYmIHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRT
ZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSkgewotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLndh
dGNocG9pbnRzKCkuY29uc2lkZXIoc3RhdHVzWzBdLm5ld1N0cnVjdHVyZSgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoY2xvYmJlckxpbWl0KTsKLSAgICAgICAgICAg
ICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG1fZ3JhcGgsIHN0YXR1c1swXS5u
ZXdTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHN0
YXR1cy5udW1WYXJpYW50cygpID09IDEgfHwgaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpCiAg
ICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBvYnNlcnZlVHJhbnNpdGlvbnMoY2xvYmJlckxpbWl0LCB0cmFu
c2l0aW9ucyk7CisgICAgICAgICAgICAgICAgaWYgKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmNo
YW5nZVN0cnVjdHVyZShtX2dyYXBoLCBuZXdTZXQpID09IENvbnRyYWRpdGlvbikKKyAgICAgICAg
ICAgICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICAKICAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKICAgICAgICAgYnJl
YWs7CisgICAgfQogICAgICAgICAKICAgICBjYXNlIEluOgogICAgICAgICAvLyBGSVhNRTogV2Ug
Y2FuIGRldGVybWluZSB3aGVuIHRoZSBwcm9wZXJ0eSBkZWZpbml0ZWx5IGV4aXN0cyBiYXNlZCBv
biBhYnN0cmFjdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE3MDE1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODYyLDcgKzI4
NjIsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
ICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAg
ICAgICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBHZXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yKCptX3ZtLCBzdHJ1Y3R1cmUsIHVpZCk7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXR1
cy5zdGF0ZSgpICE9IEdldEJ5SWRTdGF0dXM6OlNpbXBsZSB8fCBzdGF0dXMubnVtVmFyaWFudHMo
KSAhPSAxKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5zdGF0ZSgpICE9IEdldEJ5SWRT
dGF0dXM6OlNpbXBsZQorICAgICAgICAgICAgICAgICAgICB8fCBzdGF0dXMubnVtVmFyaWFudHMo
KSAhPSAxCisgICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1c1swXS5zdHJ1Y3R1cmVTZXQoKS5z
aXplKCkgIT0gMSkgewogICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRz
dCksIGFkZFRvR3JhcGgoR2V0QnlJZEZsdXNoLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIE9w
SW5mbyhwcmVkaWN0aW9uKSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTI5NDcsNyArMjk0OSw5
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
IGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3Rh
dHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigqbV92bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUsIHVpZCwgZmFsc2UpOwotICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFu
dHMoKSAhPSAxIHx8IHN0YXR1c1swXS5raW5kKCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2Up
IHsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZhcmlhbnRzKCkgIT0gMQorICAgICAg
ICAgICAgICAgICAgICB8fCBzdGF0dXNbMF0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpSZXBs
YWNlCisgICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1c1swXS5zdHJ1Y3R1cmUoKS5zaXplKCkg
IT0gMSkgewogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5SWQsIE9wSW5mbyhp
ZGVudGlmaWVyTnVtYmVyKSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpLCBnZXQoVmlydHVh
bFJlZ2lzdGVyKHZhbHVlKSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTcwMTU5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyOCwzNSArMjI4LDQ0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgTm9kZSog
Y2hpbGQgPSBjaGlsZEVkZ2Uubm9kZSgpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIgPSBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCk7CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxkRWRnZS51c2VLaW5kKCkgIT0gQ2VsbFVzZSkKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgQWJzdHJhY3RWYWx1ZSBiYXNlVmFsdWUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpOwogCiAg
ICAgICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7IC8vIFB1
c2ggQ0ZBIG92ZXIgdGhpcyBub2RlIGFmdGVyIHdlIGdldCB0aGUgc3RhdGUgYmVmb3JlLgogICAg
ICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOyAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVs
dCBjb25zdGFudCBmb2xkZXIgdG8gZG8gdGhpbmdzIHRvIHRoaXMuCiAKLSAgICAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VWYWx1ZS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0
dXJlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAg
aWYgKGJhc2VWYWx1ZS5tX3N0cnVjdHVyZS5pc1RvcCgpIHx8IGJhc2VWYWx1ZS5tX3N0cnVjdHVy
ZS5pc0Nsb2JiZXJlZCgpCisgICAgICAgICAgICAgICAgICAgIHx8IChub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkgPT0gVW50eXBlZFVzZSB8fCAoYmFzZVZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkp
KQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLQorICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
cigKLSAgICAgICAgICAgICAgICAgICAgdm0oKSwgc3RydWN0dXJlLCBtX2dyYXBoLmlkZW50aWZp
ZXJzKClbaWRlbnRpZmllck51bWJlcl0pOworICAgICAgICAgICAgICAgICAgICB2bSgpLCBiYXNl
VmFsdWUubV9zdHJ1Y3R1cmUuc2V0KCksIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVy
TnVtYmVyXSk7CisgICAgICAgICAgICAgICAgaWYgKCFzdGF0dXMuaXNTaW1wbGUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gc3RhdHVzLm51bVZhcmlhbnRzKCk7IGktLTspIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFzdGF0dXNbaV0uY29uc3RhbnRDaGVja3MoKS5pc0VtcHR5KCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1c1tpXS5hbHRlcm5hdGVCYXNlKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBoYW5kbGUgcHJvdG90eXBl
IGNhc2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExMDM4NgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgaWYgKCFzdGF0dXMuaXNTaW1wbGUoKSB8fCBzdGF0dXMubnVt
VmFyaWFudHMoKSAhPSAxIHx8Ci0gICAgICAgICAgICAgICAgICAgICFzdGF0dXNbMF0uY29uc3Rh
bnRDaGVja3MoKS5pc0VtcHR5KCkgfHwgc3RhdHVzWzBdLmFsdGVybmF0ZUJhc2UoKSkgewotICAg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgaGFuZGxlIHByb3RvdHlwZSBjYXNl
cy4KLSAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExMDM4NgorICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMo
KSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRHZXRCeU9mZnNldChpbmRleEluQmxv
Y2ssIG5vZGUsIGJhc2VWYWx1ZSwgc3RhdHVzWzBdLCBpZGVudGlmaWVyTnVtYmVyKTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGVtaXRHZXRCeU9mZnNldChpbmRleEluQmxvY2ssIG5vZGUsIGJh
c2VWYWx1ZSwgc3RhdHVzWzBdLCBpZGVudGlmaWVyTnVtYmVyKTsKLSAgICAgICAgICAgICAgICBl
bGltaW5hdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSog
ZGF0YSA9IG1fZ3JhcGgubV9tdWx0aUdldEJ5T2Zmc2V0RGF0YS5hZGQoKTsKKyAgICAgICAgICAg
ICAgICBkYXRhLT52YXJpYW50cyA9IHN0YXR1cy52YXJpYW50cygpOworICAgICAgICAgICAgICAg
IGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOworICAgICAgICAgICAg
ICAgIG5vZGUtPmNvbnZlcnRUb011bHRpR2V0QnlPZmZzZXQoZGF0YSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBj
YXNlIFB1dEJ5SWQ6Ci0gICAgICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6IHsKKyAgICAgICAg
ICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKKyAgICAgICAgICAgIGNhc2UgUHV0QnlJZEZsdXNoOiB7
CiAgICAgICAgICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW47CiAgICAg
ICAgICAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKICAgICAgICAgICAg
ICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkRWRnZS5ub2RlKCk7CkBAIC0yNjksMjQgKzI3OCwzMSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleElu
QmxvY2spOyAvLyBQdXNoIENGQSBvdmVyIHRoaXMgbm9kZSBhZnRlciB3ZSBnZXQgdGhlIHN0YXRl
IGJlZm9yZS4KICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsgLy8gRG9uJ3QgYWxs
b3cgdGhlIGRlZmF1bHQgY29uc3RhbnQgZm9sZGVyIHRvIGRvIHRoaW5ncyB0byB0aGlzLgogCi0g
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlVmFsdWUubV9zdHJ1Y3R1
cmUub25seVN0cnVjdHVyZSgpOwotICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlKQorICAg
ICAgICAgICAgICAgIGlmIChiYXNlVmFsdWUubV9zdHJ1Y3R1cmUuaXNUb3AoKSB8fCBiYXNlVmFs
dWUubV9zdHJ1Y3R1cmUuaXNDbG9iYmVyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMg
PSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgICAgICB2bSgpLAog
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihvcmlnaW4uc2VtYW50
aWMpLAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAgICAg
IGJhc2VWYWx1ZS5tX3N0cnVjdHVyZS5zZXQoKSwKICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdLAogICAgICAgICAgICAgICAgICAgICBu
b2RlLT5vcCgpID09IFB1dEJ5SWREaXJlY3QpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGlmICghc3RhdHVzLmlzU2ltcGxlKCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSAhPSAxKQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXR1cy5udW1W
YXJpYW50cygpOyBpLS07KQorICAgICAgICAgICAgICAgICAgICBhZGRDaGVja3Moc3RhdHVzW2ld
LmNvbnN0YW50Q2hlY2tzKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlm
IChzdGF0dXMubnVtVmFyaWFudHMoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRQ
dXRCeU9mZnNldChpbmRleEluQmxvY2ssIG5vZGUsIGJhc2VWYWx1ZSwgc3RhdHVzWzBdLCBpZGVu
dGlmaWVyTnVtYmVyKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGVtaXRQdXRCeU9mZnNldChp
bmRleEluQmxvY2ssIG5vZGUsIGJhc2VWYWx1ZSwgc3RhdHVzWzBdLCBpZGVudGlmaWVyTnVtYmVy
KTsKLSAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBN
dWx0aVB1dEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0aVB1dEJ5T2Zmc2V0RGF0
YS5hZGQoKTsKKyAgICAgICAgICAgICAgICBkYXRhLT52YXJpYW50cyA9IHN0YXR1cy52YXJpYW50
cygpOworICAgICAgICAgICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVy
TnVtYmVyOworICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb011bHRpUHV0QnlPZmZzZXQo
ZGF0YSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKQEAgLTQyNiwx
MyArNDQyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5
SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICB0cmFuc2l0aW9uID0gbV9ncmFw
aC5tX3RyYW5zaXRpb25zLmFkZCgKICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVy
ZUZvclRyYW5zaXRpb24oKSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7Ci0KLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YXJpYW50LmNvbnN0YW50Q2hlY2tzKCkuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0g
ICAgICAgICAgICAgICAgICAgIG9yaWdpbiwgaW5kZXhJbkJsb2NrLAotICAgICAgICAgICAgICAg
ICAgICB2YXJpYW50LmNvbnN0YW50Q2hlY2tzKClbaV0uY29uc3RhbnQoKSwKLSAgICAgICAgICAg
ICAgICAgICAgdmFyaWFudC5jb25zdGFudENoZWNrcygpW2ldLnN0cnVjdHVyZSgpKTsKLSAgICAg
ICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIEVkZ2UgcHJvcGVydHlTdG9yYWdlOwpAQCAt
NDk5LDYgKzUwOCwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywg
U3BlY05vbmUsIFBoYW50b20sIG5vZGUtPm9yaWdpbiwgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICB9CiAgICAgfQorICAgIAorICAgIHZvaWQgYWRkQ2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0
dXJlQ2hlY2tWZWN0b3ImIGNoZWNrcykKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBjaGVja3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRy
YW5zaXRpb25DaGVjaygKKyAgICAgICAgICAgICAgICBvcmlnaW4sIGluZGV4SW5CbG9jaywgY2hl
Y2tzW2ldLmNvbnN0YW50KCksIGNoZWNrc1tpXS5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIH0KKyAg
ICB9CiAKICAgICB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhOb2RlT3JpZ2luIG9y
aWdpbiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrLCBKU0NlbGwqIGNlbGwsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZp
c2lvbiAxNzAxNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNDU4LDYgKzQ1OCwxNSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1f
ZmxhZ3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxkOwogICAgIH0KICAgICAKKyAgICB2b2lkIGNvbnZl
cnRUb011bHRpR2V0QnlPZmZzZXQoTXVsdGlHZXRCeU9mZnNldERhdGEqIGRhdGEpCisgICAgewor
ICAgICAgICBBU1NFUlQobV9vcCA9PSBHZXRCeUlkIHx8IG1fb3AgPT0gR2V0QnlJZEZsdXNoKTsK
KyAgICAgICAgbV9vcEluZm8gPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGRhdGEpOworICAgICAg
ICBjaGlsZDEoKS5zZXRVc2VLaW5kKENlbGxVc2UpOworICAgICAgICBtX29wID0gTXVsdGlHZXRC
eU9mZnNldDsKKyAgICAgICAgbV9mbGFncyAmPSB+Tm9kZUNsb2JiZXJzV29ybGQ7CisgICAgfQor
ICAgIAogICAgIHZvaWQgY29udmVydFRvUHV0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vz
c0RhdGFJbmRleCwgRWRnZSBzdG9yYWdlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3AgPT0g
UHV0QnlJZCB8fCBtX29wID09IFB1dEJ5SWREaXJlY3QgfHwgbV9vcCA9PSBNdWx0aVB1dEJ5T2Zm
c2V0KTsKQEAgLTQ2OSw2ICs0NzgsMTQgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBtX2ZsYWdz
ICY9IH5Ob2RlQ2xvYmJlcnNXb3JsZDsKICAgICB9CiAgICAgCisgICAgdm9pZCBjb252ZXJ0VG9N
dWx0aVB1dEJ5T2Zmc2V0KE11bHRpR2V0QnlPZmZzZXREYXRhKiBkYXRhKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKG1fb3AgPT0gUHV0QnlJZCB8fCBtX29wID09IFB1dEJ5SWREaXJlY3QgfHwgbV9v
cCA9PSBQdXRCeUlkRmx1c2gpOworICAgICAgICBtX29wSW5mbyA9IGJpdHdpc2VfY2FzdDxpbnRw
dHJfdD4oZGF0YSk7CisgICAgICAgIG1fb3AgPSBNdWx0aVB1dEJ5T2Zmc2V0OworICAgICAgICBt
X2ZsYWdzICY9IH5Ob2RlQ2xvYmJlcnNXb3JsZDsKKyAgICB9CisgICAgCiAgICAgdm9pZCBjb252
ZXJ0VG9QaGFudG9tTG9jYWwoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3AgPT0gUGhhbnRv
bSAmJiAoY2hpbGQxKCktPm9wKCkgPT0gUGhpIHx8IGNoaWxkMSgpLT5vcCgpID09IFNldExvY2Fs
IHx8IGNoaWxkMSgpLT5vcCgpID09IFNldEFyZ3VtZW50KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkocmV2
aXNpb24gMTcwMTU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw2ICsxNjEsMTIgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gZXF1YWxzU2xvdyhvdGhlcik7CiAgICAgfQogICAgIAorICAgIGNv
bnN0IFN0cnVjdHVyZVNldCYgc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghaXNU
b3AoKSk7CisgICAgICAgIHJldHVybiBtX3NldDsKKyAgICB9CisgICAgCiAgICAgc2l6ZV90IHNp
emUoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKCFpc1RvcCgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233542</attachid>
            <date>2014-06-21 12:56:10 -0700</date>
            <delta_ts>2014-06-22 17:39:12 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>60187</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwMjUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBA
CisyMDE0LTA2LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
W2Z0bG9wdF0gRm9sZCBHZXRCeUlkL1B1dEJ5SWQgdG8gTXVsdGlHZXRCeU9mZnNldC9HZXRCeU9m
ZnNldCBvciBNdWx0aVB1dEJ5T2Zmc2V0L1B1dEJ5T2Zmc2V0LCB3aGljaCBpbXBsaWVzIGhhbmRs
aW5nIG5vbi1zaW5nbGV0b24gc2V0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM0MDkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisgICAgICAgIAorICAgICAgICBUaGlzIHByZXR0eSBtdWNoIGZpbmlzaGVzIG9mZiB0aGUg
d29yayB0byBlbGltaW5hdGUgdGhlIHNwZWNpYWwtY2FzaW5nIG9mIHNpbmdsZXRvbgorICAgICAg
ICBzdHJ1Y3R1cmUgc2V0cyBieSBtYWtpbmcgaXQgcG9zc2libGUgdG8gZm9sZCBHZXRCeUlkIGFu
ZCBQdXRCeUlkIHRvIHZhcmlvdXMgcG9seW1vcnBoaWMKKyAgICAgICAgZm9ybXMgb2YgdGhlIEJ5
T2Zmc2V0IG5vZGVzLgorCisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHA6Cisg
ICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAg
IChKU0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAqIGJ5dGVjb2RlL0dl
dEJ5SWRTdGF0dXMuaDoKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcDoKKyAg
ICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNv
ZGUvUHV0QnlJZFN0YXR1cy5oOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50Lmg6
CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50Ojpjb25zdGFudENoZWNrcyk6CisgICAgICAg
ICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3Rz
KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3Rh
bnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1Bo
YXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQ
aGFzZTo6ZW1pdFB1dEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRp
bmdQaGFzZTo6YWRkQ2hlY2tzKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRUb011bHRpR2V0QnlPZmZzZXQpOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6OmNvbnZlcnRUb011bHRpUHV0QnlPZmZzZXQpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDogQWxzbyBjb252ZXJ0IGFsbCByZWxlYXNlIGFzc2VydGlv
bnMgdG8gREZHIGFzc2VydGlvbnMgaW4gdGhpcyBmaWxlLCBiZWNhdXNlIEkgd2FzIGhpdHRpbmcg
c29tZSBvZiB0aGVtIHdoaWxlIGRlYnVnZ2luZy4KKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6ZmlsbEpTVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlSW50MzJJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQzMlN0cmljdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQ1Mik6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpzZXQpOgorCiAy
MDE0LTA2LTIwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CiAKICAg
ICAgICAgTWVyZ2UgcjE2OTkwMyB0byB0aGUgYnJhbmNoLgpAQCAtMzMsNiArODAsMzUgQEAKIAog
MjAxNC0wNi0xOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV29yayBpbiBwcm9n
cmVzcy4KKworICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwOgorICAgICAgICAo
SlNDOjpHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpH
ZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkU3Rh
dHVzLmg6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChK
U0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5
SWRTdGF0dXMuaDoKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oOgorICAgICAg
ICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6Y29uc3RhbnRDaGVja3MpOgorICAgICAgICAqIGRmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAg
ICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9s
ZENvbnN0YW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVt
aXRQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6
OmFkZENoZWNrcyk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjpjb252ZXJ0VG9NdWx0aUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlOjpjb252ZXJ0VG9NdWx0aVB1dEJ5T2Zmc2V0KToKKyAgICAgICAgKiBkZmcvREZHU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZS5oOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6OnNldCk6CisKKzIwMTQtMDYtMTkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNv
bT4KKwogICAgICAgICBbZnRsb3B0XSBTdHJ1Y3R1cmVTZXQ6Om9ubHlTdHJ1Y3R1cmUoKSBzaG91
bGQgcmV0dXJuIG51bGxwdHIgaWYgaXQncyBub3QgYSBzaW5nbGV0b24gKGluc3RlYWQgb2YgYXNz
ZXJ0aW5nKQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM0MDc3CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3Rh
dHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE3MDE1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDcgKzE3
MCw4IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAg
CiAgICAgICAgIHZhcmlhbnQubV9zdHJ1Y3R1cmVTZXQuYWRkKHN0cnVjdHVyZSk7CiAgICAgICAg
IHZhcmlhbnQubV9zcGVjaWZpY1ZhbHVlID0gSlNWYWx1ZShzcGVjaWZpY1ZhbHVlKTsKLSAgICAg
ICAgcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCk7CisgICAgICAgIGJvb2wgZGlkQXBwZW5k
ID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQo
ZGlkQXBwZW5kLCBkaWRBcHBlbmQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAg
ICAgICAgCkBAIC0zMTIsMzQgKzMxMyw0MyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3IoCiAgICAgcmV0dXJuIGNvbXB1dGVGb3IocHJvZmlsZWRCbG9jaywgYmFzZWxp
bmVNYXAsIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgdWlkKTsKIH0KIAotR2V0QnlJZFN0YXR1
cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFN0cmluZ0ltcGwqIHVpZCkKK0dldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
cihWTSYgdm0sIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0LCBTdHJpbmdJbXBsKiB1aWQpCiB7CiAg
ICAgLy8gRm9yIG5vdyB3ZSBvbmx5IGhhbmRsZSB0aGUgc3VwZXIgc2ltcGxlIHNlbGYgYWNjZXNz
IGNhc2UuIFdlIGNvdWxkIGhhbmRsZSB0aGUKICAgICAvLyBwcm90b3R5cGUgY2FzZSBpbiB0aGUg
ZnV0dXJlLgogICAgIAotICAgIGlmICghc3RydWN0dXJlKQotICAgICAgICByZXR1cm4gR2V0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICBpZiAoc2V0LmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIEdldEJ5SWRTdGF0dXMoKTsKIAogICAgIGlmICh0b1VJbnQzMkZyb21TdHJpbmdJbXBs
KHVpZCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQogICAgICAgICByZXR1cm4gR2V0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAKLSAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5m
bygpLm92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgpICYmIHN0cnVjdHVyZS0+dHlwZUluZm8o
KS50eXBlKCkgIT0gR2xvYmFsT2JqZWN0VHlwZSkKLSAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0
dXMoVGFrZXNTbG93UGF0aCk7CisgICAgR2V0QnlJZFN0YXR1cyByZXN1bHQ7CisgICAgcmVzdWx0
Lm1fc3RhdGUgPSBTaW1wbGU7CisgICAgcmVzdWx0Lm1fd2FzU2VlbkluSklUID0gZmFsc2U7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNldC5zaXplKCk7ICsraSkgeworICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHNldFtpXTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlw
ZUluZm8oKS5vdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiBzdHJ1Y3R1cmUtPnR5cGVJ
bmZvKCkudHlwZSgpICE9IEdsb2JhbE9iamVjdFR5cGUpCisgICAgICAgICAgICByZXR1cm4gR2V0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghc3RydWN0
dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4g
R2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVk
IGF0dHJpYnV0ZXM7CisgICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKKyAgICAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodm0sIHVpZCwg
YXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChv
ZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7
IC8vIEl0J3MgcHJvYmFibHkgYSBwcm90b3R5cGUgbG9va3VwLiBHaXZlIHVwIG9uIGxpZmUgZm9y
IG5vdywgZXZlbiB0aG91Z2ggd2UgY291bGQgdG90YWxseSBiZSB3YXkgc21hcnRlciBhYm91dCBp
dC4KKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikKKyAgICAgICAgICAgIHJldHVy
biBHZXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMpOyAvLyBXZSBjb3VsZCBiZSBzbWFydGVyIGhlcmUs
IGxpa2Ugc3RyZW5naHQtcmVkdWNpbmcgdGhpcyB0byBhIENhbGwuCisgICAgICAgIGlmIChzdHJ1
Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7Cisg
ICAgICAgIAorICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KEdldEJ5SWRWYXJpYW50
KHN0cnVjdHVyZSwgb2Zmc2V0LCBzcGVjaWZpY1ZhbHVlKSkpCisgICAgICAgICAgICByZXR1cm4g
R2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICB9CiAgICAgCi0gICAgaWYgKCFzdHJ1
Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKLSAgICAgICAgcmV0dXJuIEdl
dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0KLSAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwot
ICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBz
dHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh2bSwgdWlkLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1Zh
bHVlKTsKLSAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIEdl
dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7IC8vIEl0J3MgcHJvYmFibHkgYSBwcm90b3R5cGUg
bG9va3VwLiBHaXZlIHVwIG9uIGxpZmUgZm9yIG5vdywgZXZlbiB0aG91Z2ggd2UgY291bGQgdG90
YWxseSBiZSB3YXkgc21hcnRlciBhYm91dCBpdC4KLSAgICBpZiAoYXR0cmlidXRlcyAmIEFjY2Vz
c29yKQotICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhNYWtlc0NhbGxzKTsKLSAgICBpZiAo
c3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7Ci0g
ICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoCi0gICAgICAgIFNpbXBsZSwgZmFsc2UsIEdldEJ5SWRW
YXJpYW50KFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBvZmZzZXQsIHNwZWNpZmljVmFsdWUpKTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBib29sIEdldEJ5SWRTdGF0dXM6Om1ha2VzQ2FsbHMo
KSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0
dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFN0YXR1cy5oCShyZXZpc2lvbiAxNzAxNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHB1
YmxpYzoKICAgICB9CiAgICAgCiAgICAgc3RhdGljIEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihD
b2RlQmxvY2sqLCBTdHViSW5mb01hcCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFN0cmluZ0lt
cGwqIHVpZCk7Ci0gICAgc3RhdGljIEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihWTSYsIFN0cnVj
dHVyZSosIFN0cmluZ0ltcGwqIHVpZCk7CisgICAgc3RhdGljIEdldEJ5SWRTdGF0dXMgY29tcHV0
ZUZvcihWTSYsIGNvbnN0IFN0cnVjdHVyZVNldCYsIFN0cmluZ0ltcGwqIHVpZCk7CiAgICAgCiAg
ICAgc3RhdGljIEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5lQmxv
Y2ssIENvZGVCbG9jayogZGZnQmxvY2ssIFN0dWJJbmZvTWFwJiBiYXNlbGluZU1hcCwgU3R1Yklu
Zm9NYXAmIGRmZ01hcCwgQ29kZU9yaWdpbiwgU3RyaW5nSW1wbCogdWlkKTsKICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJ
KHJldmlzaW9uIDE3MDE1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU5LDg4ICsyNTksMTAxIEBAIFB1dEJ5
SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICByZXR1cm4gY29tcHV0ZUZv
cihiYXNlbGluZUJsb2NrLCBiYXNlbGluZU1hcCwgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCB1
aWQpOwogfQogCi1QdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3Ry
aW5nSW1wbCogdWlkLCBib29sIGlzRGlyZWN0KQorUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3Qg
U3RydWN0dXJlU2V0JiBzZXQsIFN0cmluZ0ltcGwqIHVpZCwgYm9vbCBpc0RpcmVjdCkKIHsKICAg
ICBpZiAodG9VSW50MzJGcm9tU3RyaW5nSW1wbCh1aWQpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5J
bmRleCkKICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAKLSAg
ICBpZiAoIXN0cnVjdHVyZSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93
UGF0aCk7Ci0gICAgCi0gICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QoKSAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpICE9IEdsb2Jh
bE9iamVjdFR5cGUpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwotCi0gICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkK
LSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgaWYgKHNl
dC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKCk7CiAgICAgCi0gICAg
dW5zaWduZWQgYXR0cmlidXRlczsKLSAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7Ci0gICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodm0sIHVpZCwg
YXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7Ci0gICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0
KSkgewotICAgICAgICBpZiAoYXR0cmlidXRlcyAmIEN1c3RvbUFjY2Vzc29yKQotICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTWFrZXNDYWxscyk7Ci0KLSAgICAgICAgaWYgKGF0dHJp
YnV0ZXMgJiAoQWNjZXNzb3IgfCBSZWFkT25seSkpCisgICAgUHV0QnlJZFN0YXR1cyByZXN1bHQ7
CisgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNldC5zaXplKCk7ICsraSkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHNl
dFtpXTsKKyAgICAgICAgCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90KCkgJiYgc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSAh
PSBHbG9iYWxPYmplY3RUeXBlKQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFr
ZXNTbG93UGF0aCk7Ci0gICAgICAgIGlmIChzcGVjaWZpY1ZhbHVlKSB7Ci0gICAgICAgICAgICAv
LyBXZSBuZWVkIHRoZSBQdXRCeUlkIHNsb3cgcGF0aCB0byB2ZXJpZnkgdGhhdCB3ZSdyZSBzdG9y
aW5nIHRoZSByaWdodCB2YWx1ZSBpbnRvCi0gICAgICAgICAgICAvLyB0aGUgc3BlY2lhbGl6ZWQg
c2xvdC4KKworICAgICAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hl
YWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7
CisgICAgCisgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgICAgIEpTQ2VsbCogc3Bl
Y2lmaWNWYWx1ZTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5n
ZXRDb25jdXJyZW50bHkodm0sIHVpZCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAg
ICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1
dGVzICYgQ3VzdG9tQWNjZXNzb3IpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoTWFrZXNDYWxscyk7CisKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKEFjY2Vzc29y
IHwgUmVhZE9ubHkpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2Vz
U2xvd1BhdGgpOworICAgICAgICAgICAgaWYgKHNwZWNpZmljVmFsdWUpIHsKKyAgICAgICAgICAg
ICAgICAvLyBXZSBuZWVkIHRoZSBQdXRCeUlkIHNsb3cgcGF0aCB0byB2ZXJpZnkgdGhhdCB3ZSdy
ZSBzdG9yaW5nIHRoZSByaWdodCB2YWx1ZSBpbnRvCisgICAgICAgICAgICAgICAgLy8gdGhlIHNw
ZWNpYWxpemVkIHNsb3QuCisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFr
ZXNTbG93UGF0aCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBl
bmRWYXJpYW50KFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlh
bnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpOwotICAgIH0KICAgICAKLSAgICAvLyBPdXIg
aHlwb3RoZXNpcyBpcyB0aGF0IHdlJ3JlIGRvaW5nIGEgdHJhbnNpdGlvbi4gQmVmb3JlIHdlIHBy
b3ZlIHRoYXQgdGhpcyBpcyByZWFsbHkKLSAgICAvLyB0cnVlLCB3ZSB3YW50IHRvIGRvIHNvbWUg
c2FuaXR5IGNoZWNrcy4KKyAgICAgICAgLy8gT3VyIGh5cG90aGVzaXMgaXMgdGhhdCB3ZSdyZSBk
b2luZyBhIHRyYW5zaXRpb24uIEJlZm9yZSB3ZSBwcm92ZSB0aGF0IHRoaXMgaXMgcmVhbGx5Cisg
ICAgICAgIC8vIHRydWUsIHdlIHdhbnQgdG8gZG8gc29tZSBzYW5pdHkgY2hlY2tzLgogICAgIAot
ICAgIC8vIERvbid0IGNhY2hlIHB1dCB0cmFuc2l0aW9ucyBvbiBkaWN0aW9uYXJpZXMuCi0gICAg
aWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICAvLyBEb24ndCBjYWNoZSBwdXQgdHJhbnNpdGlv
bnMgb24gZGljdGlvbmFyaWVzLgorICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnko
KSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogCi0g
ICAgLy8gSWYgdGhlIHN0cnVjdHVyZSBjb3JyZXNwb25kcyB0byBzb21ldGhpbmcgdGhhdCBpc24n
dCBhbiBvYmplY3QsIHRoZW4gZ2l2ZSB1cCwgc2luY2UKLSAgICAvLyB3ZSBkb24ndCB3YW50IHRv
IGJlIGFkZGluZyBwcm9wZXJ0aWVzIHRvIHN0cmluZ3MuCi0gICAgaWYgKHN0cnVjdHVyZS0+dHlw
ZUluZm8oKS50eXBlKCkgPT0gU3RyaW5nVHlwZSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgIC8vIElmIHRoZSBzdHJ1Y3R1cmUgY29ycmVzcG9u
ZHMgdG8gc29tZXRoaW5nIHRoYXQgaXNuJ3QgYW4gb2JqZWN0LCB0aGVuIGdpdmUgdXAsIHNpbmNl
CisgICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gYmUgYWRkaW5nIHByb3BlcnRpZXMgdG8gc3Ry
aW5ncy4KKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgPT0gU3RyaW5n
VHlwZSkKKyAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwog
ICAgIAotICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKLSAgICBpZiAo
IWlzRGlyZWN0KSB7Ci0gICAgICAgIGNoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0
dXJlQ2hhaW4oZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpKTsKKyAgICAgICAgUmVmUHRyPEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWluOworICAgICAgICBpZiAoIWlzRGlyZWN0KSB7CisgICAg
ICAgICAgICBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlKSk7CiAgICAgICAgIAotICAgICAgICAvLyBJZiB0aGUgcHJvdG90
eXBlIGNoYWluIGhhcyBzZXR0ZXJzIG9yIHJlYWQtb25seSBwcm9wZXJ0aWVzLCB0aGVuIGdpdmUg
dXAuCi0gICAgICAgIGlmIChjaGFpbi0+bWF5SW50ZXJjZXB0U3RvcmVUbyh2bSwgdWlkKSkKLSAg
ICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICAg
ICAgLy8gSWYgdGhlIHByb3RvdHlwZSBjaGFpbiBoYXMgc2V0dGVycyBvciByZWFkLW9ubHkgcHJv
cGVydGllcywgdGhlbiBnaXZlIHVwLgorICAgICAgICAgICAgaWYgKGNoYWluLT5tYXlJbnRlcmNl
cHRTdG9yZVRvKHZtLCB1aWQpKQorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KFRha2VzU2xvd1BhdGgpOwogICAgICAgICAKLSAgICAgICAgLy8gSWYgdGhlIHByb3RvdHlwZSBj
aGFpbiBoYXNuJ3QgYmVlbiBub3JtYWxpemVkIChpLmUuIHRoZXJlIGFyZSBwcm94aWVzIG9yIGRp
Y3Rpb25hcmllcykKLSAgICAgICAgLy8gdGhlbiBnaXZlIHVwLiBUaGUgZGljdGlvbmFyeSBjYXNl
IHdvdWxkIG9ubHkgaGFwcGVuIGlmIHRoaXMgc3RydWN0dXJlIGhhcyBub3QgYmVlbgotICAgICAg
ICAvLyB1c2VkIGluIGFuIG9wdGltaXplZCBwdXRfYnlfaWQgdHJhbnNpdGlvbi4gQW5kIHJlYWxs
eSB0aGUgb25seSByZWFzb24gd2h5IHdlIHdvdWxkCi0gICAgICAgIC8vIGJhaWwgaGVyZSBpcyB0
aGF0IEkgZG9uJ3QgcmVhbGx5IGZlZWwgbGlrZSBoYXZpbmcgdGhlIG9wdGltaXppbmcgSklUIGdv
IGFuZCBmbGF0dGVuCi0gICAgICAgIC8vIGRpY3Rpb25hcmllcyBpZiB3ZSBoYXZlIGV2aWRlbmNl
IHRvIHN1Z2dlc3QgdGhhdCB0aG9zZSBvYmplY3RzIHdlcmUgbmV2ZXIgdXNlZCBhcwotICAgICAg
ICAvLyBwcm90b3R5cGVzIGluIGEgY2FjaGVhYmxlIHByb3RvdHlwZSBhY2Nlc3MgLSBpLmUuIHRo
ZXJlJ3MgYSBnb29kIGNoYW5jZSB0aGF0IHNvbWUgb2YKLSAgICAgICAgLy8gdGhlIG90aGVyIGNo
ZWNrcyBiZWxvdyB3aWxsIGZhaWwuCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJveHkoKSB8
fCAhY2hhaW4tPmlzTm9ybWFsaXplZCgpKQorICAgICAgICAgICAgLy8gSWYgdGhlIHByb3RvdHlw
ZSBjaGFpbiBoYXNuJ3QgYmVlbiBub3JtYWxpemVkIChpLmUuIHRoZXJlIGFyZSBwcm94aWVzIG9y
IGRpY3Rpb25hcmllcykKKyAgICAgICAgICAgIC8vIHRoZW4gZ2l2ZSB1cC4gVGhlIGRpY3Rpb25h
cnkgY2FzZSB3b3VsZCBvbmx5IGhhcHBlbiBpZiB0aGlzIHN0cnVjdHVyZSBoYXMgbm90IGJlZW4K
KyAgICAgICAgICAgIC8vIHVzZWQgaW4gYW4gb3B0aW1pemVkIHB1dF9ieV9pZCB0cmFuc2l0aW9u
LiBBbmQgcmVhbGx5IHRoZSBvbmx5IHJlYXNvbiB3aHkgd2Ugd291bGQKKyAgICAgICAgICAgIC8v
IGJhaWwgaGVyZSBpcyB0aGF0IEkgZG9uJ3QgcmVhbGx5IGZlZWwgbGlrZSBoYXZpbmcgdGhlIG9w
dGltaXppbmcgSklUIGdvIGFuZCBmbGF0dGVuCisgICAgICAgICAgICAvLyBkaWN0aW9uYXJpZXMg
aWYgd2UgaGF2ZSBldmlkZW5jZSB0byBzdWdnZXN0IHRoYXQgdGhvc2Ugb2JqZWN0cyB3ZXJlIG5l
dmVyIHVzZWQgYXMKKyAgICAgICAgICAgIC8vIHByb3RvdHlwZXMgaW4gYSBjYWNoZWFibGUgcHJv
dG90eXBlIGFjY2VzcyAtIGkuZS4gdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQgc29tZSBvZgor
ICAgICAgICAgICAgLy8gdGhlIG90aGVyIGNoZWNrcyBiZWxvdyB3aWxsIGZhaWwuCisgICAgICAg
ICAgICBpZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkgfHwgIWNoYWluLT5pc05vcm1hbGl6ZWQoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAg
ICAgICAgfQorICAgIAorICAgICAgICAvLyBXZSBvbmx5IG9wdGltaXplIGlmIHRoZXJlIGlzIGFs
cmVhZHkgYSBzdHJ1Y3R1cmUgdGhhdCB0aGUgdHJhbnNpdGlvbiBpcyBjYWNoZWQgdG8uCisgICAg
ICAgIC8vIEFtb25nIG90aGVyIHRoaW5ncywgdGhpcyBhbGxvd3MgdXMgdG8gZ3VhcmQgYWdhaW5z
dCBhIHRyYW5zaXRpb24gd2l0aCBhIHNwZWNpZmljCisgICAgICAgIC8vIHZhbHVlLgorICAgICAg
ICAvLworICAgICAgICAvLyAtIElmIHdlJ3JlIHN0b3JpbmcgYSB2YWx1ZSB0aGF0IGNvdWxkIGJl
IHNwZWNpZmljOiB0aGlzIHdvdWxkIG9ubHkgYmUgYSBwcm9ibGVtIGlmCisgICAgICAgIC8vICAg
dGhlIGV4aXN0aW5nIHRyYW5zaXRpb24gZGlkIGhhdmUgYSBzcGVjaWZpYyB2YWx1ZSBhbHJlYWR5
LCBzaW5jZSBpZiBpdCBkaWRuJ3QsCisgICAgICAgIC8vICAgdGhlbiB3ZSB3b3VsZCBiZWhhdmUg
ImFzIGlmIiB3ZSB3ZXJlIG5vdCBzdG9yaW5nIGEgc3BlY2lmaWMgdmFsdWUuIElmIGl0IGRpZAor
ICAgICAgICAvLyAgIGhhdmUgYSBzcGVjaWZpYyB2YWx1ZSwgdGhlbiB3ZSdsbCBrbm93IC0gdGhl
IGZhY3QgdGhhdCB3ZSBwYXNzIDAgZm9yCisgICAgICAgIC8vICAgc3BlY2lmaWNWYWx1ZSB3aWxs
IHRlbGwgdXMuCisgICAgICAgIC8vCisgICAgICAgIC8vIC0gSWYgd2UncmUgbm90IHN0b3Jpbmcg
YSB2YWx1ZSB0aGF0IGNvdWxkIGJlIHNwZWNpZmljOiBhZ2FpbiwgdGhpcyB3b3VsZCBvbmx5IGJl
IGEKKyAgICAgICAgLy8gICBwcm9ibGVtIGlmIHRoZSBleGlzdGluZyB0cmFuc2l0aW9uIGRpZCBo
YXZlIGEgc3BlY2lmaWMgdmFsdWUsIHdoaWNoIHdlIGNoZWNrIGZvcgorICAgICAgICAvLyAgIGJ5
IHBhc3NpbmcgMCBmb3IgdGhlIHNwZWNpZmljVmFsdWUuCisgICAgICAgIFN0cnVjdHVyZSogdHJh
bnNpdGlvbiA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVj
dHVyZUNvbmN1cnJlbnRseShzdHJ1Y3R1cmUsIHVpZCwgMCwgMCwgb2Zmc2V0KTsKKyAgICAgICAg
aWYgKCF0cmFuc2l0aW9uKQorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCk7IC8vIFRoaXMgb2NjdXJzIGluIGJpemFycmUgY2FzZXMgb25seS4gU2VlIGFib3Zl
LgorICAgICAgICBBU1NFUlQoIXRyYW5zaXRpb24tPnRyYW5zaXRpb25EaWRJbnZvbHZlU3BlY2lm
aWNWYWx1ZSgpKTsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CisgICAg
CisgICAgICAgIGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQoCisgICAgICAg
ICAgICBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNo
YWluLnJlbGVhc2UoKSwgb2Zmc2V0KSk7CisgICAgICAgIGlmICghZGlkQXBwZW5kKQogICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQogICAgIAot
ICAgIC8vIFdlIG9ubHkgb3B0aW1pemUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN0cnVjdHVyZSB0
aGF0IHRoZSB0cmFuc2l0aW9uIGlzIGNhY2hlZCB0by4KLSAgICAvLyBBbW9uZyBvdGhlciB0aGlu
Z3MsIHRoaXMgYWxsb3dzIHVzIHRvIGd1YXJkIGFnYWluc3QgYSB0cmFuc2l0aW9uIHdpdGggYSBz
cGVjaWZpYwotICAgIC8vIHZhbHVlLgotICAgIC8vCi0gICAgLy8gLSBJZiB3ZSdyZSBzdG9yaW5n
IGEgdmFsdWUgdGhhdCBjb3VsZCBiZSBzcGVjaWZpYzogdGhpcyB3b3VsZCBvbmx5IGJlIGEgcHJv
YmxlbSBpZgotICAgIC8vICAgdGhlIGV4aXN0aW5nIHRyYW5zaXRpb24gZGlkIGhhdmUgYSBzcGVj
aWZpYyB2YWx1ZSBhbHJlYWR5LCBzaW5jZSBpZiBpdCBkaWRuJ3QsCi0gICAgLy8gICB0aGVuIHdl
IHdvdWxkIGJlaGF2ZSAiYXMgaWYiIHdlIHdlcmUgbm90IHN0b3JpbmcgYSBzcGVjaWZpYyB2YWx1
ZS4gSWYgaXQgZGlkCi0gICAgLy8gICBoYXZlIGEgc3BlY2lmaWMgdmFsdWUsIHRoZW4gd2UnbGwg
a25vdyAtIHRoZSBmYWN0IHRoYXQgd2UgcGFzcyAwIGZvcgotICAgIC8vICAgc3BlY2lmaWNWYWx1
ZSB3aWxsIHRlbGwgdXMuCi0gICAgLy8KLSAgICAvLyAtIElmIHdlJ3JlIG5vdCBzdG9yaW5nIGEg
dmFsdWUgdGhhdCBjb3VsZCBiZSBzcGVjaWZpYzogYWdhaW4sIHRoaXMgd291bGQgb25seSBiZSBh
Ci0gICAgLy8gICBwcm9ibGVtIGlmIHRoZSBleGlzdGluZyB0cmFuc2l0aW9uIGRpZCBoYXZlIGEg
c3BlY2lmaWMgdmFsdWUsIHdoaWNoIHdlIGNoZWNrIGZvcgotICAgIC8vICAgYnkgcGFzc2luZyAw
IGZvciB0aGUgc3BlY2lmaWNWYWx1ZS4KLSAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBTdHJ1
Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50
bHkoc3RydWN0dXJlLCB1aWQsIDAsIDAsIG9mZnNldCk7Ci0gICAgaWYgKCF0cmFuc2l0aW9uKQot
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsgLy8gVGhpcyBvY2N1
cnMgaW4gYml6YXJyZSBjYXNlcyBvbmx5LiBTZWUgYWJvdmUuCi0gICAgQVNTRVJUKCF0cmFuc2l0
aW9uLT50cmFuc2l0aW9uRGlkSW52b2x2ZVNwZWNpZmljVmFsdWUoKSk7Ci0gICAgQVNTRVJUKGlz
VmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0gICAgCi0gICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0
cmFuc2l0aW9uKHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY2hhaW4ucmVsZWFzZSgpLCBvZmZzZXQp
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgUHV0QnlJZFN0YXR1czo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCShyZXZpc2lvbiAxNzAxNTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3
ICs3MCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMg
Y29tcHV0ZUZvcihDb2RlQmxvY2sqLCBTdHViSW5mb01hcCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgsIFN0cmluZ0ltcGwqIHVpZCk7Ci0gICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZv
cihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgU3RyaW5nSW1wbCogdWlkLCBib29s
IGlzRGlyZWN0KTsKKyAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBTdHJpbmdJbXBsKiB1aWQsIGJvb2wg
aXNEaXJlY3QpOwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29k
ZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBDb2RlQmxvY2sqIGRmZ0Jsb2NrLCBTdHViSW5mb01hcCYg
YmFzZWxpbmVNYXAsIFN0dWJJbmZvTWFwJiBkZmdNYXAsIENvZGVPcmlnaW4sIFN0cmluZ0ltcGwq
IHVpZCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTcwMTU5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsx
MDYsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29uc3QgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1Zl
Y3RvciYgY29uc3RhbnRDaGVja3MoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBUcmFuc2l0aW9uKTsKICAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRDaGVja3M7CiAgICAg
fQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTcwMTU5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzcwLDQ2ICsxMzcwLDQ1IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBj
YXNlIEdldEJ5SWQ6Ci0gICAgY2FzZSBHZXRCeUlkRmx1c2g6CisgICAgY2FzZSBHZXRCeUlkRmx1
c2g6IHsKICAgICAgICAgaWYgKCFub2RlLT5wcmVkaWN0aW9uKCkpIHsKICAgICAgICAgICAgIG1f
c3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24o
KSkpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgdXNlIG9mIG9ubHlTdHJ1Y3R1cmUoKSBzaG91bGQg
YmUgcmVwbGFjZWQgYnkgZ2l2aW5nIEdldEJ5SWRTdGF0dXMgdGhlIGFiaWxpdHkKLSAgICAgICAg
ICAgIC8vIHRvIGNvbXB1dGUgdGhpbmdzIGJhc2VkIG9uIGEgU3RydWN0dXJlU2V0LCBhbmQgdGhl
biB0byBmYWN0b3IgQnl0ZUNvZGVQYXJzZXIncwotICAgICAgICAgICAgLy8gYWJpbGl0eSB0byBn
ZW5lcmF0ZSBjb2RlIGJhc2VkIG9uIGEgR2V0QnlJZFN0YXR1cyBvdXQgb2YgQnl0ZUNvZGVQYXJz
ZXIgc28gdGhhdAotICAgICAgICAgICAgLy8gQ29uc3RhbnRGb2xkaW5nUGhhc2UgY2FuIHVzZSBp
dC4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzMyMjkKLSAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSkgewotICAgICAgICAg
ICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigK
LSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3ZtLCBzdHJ1Y3R1cmUsCi0gICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCld
KTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkgJiYgc3RhdHVzLm51bVZh
cmlhbnRzKCkgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICAvLyBBc3NlcnQgdGhpbmdzIHRo
YXQgd2UgY2FuJ3QgaGFuZGxlIGFuZCB0aGF0IHRoZSBjb21wdXRlRm9yKCkgbWV0aG9kCi0gICAg
ICAgICAgICAgICAgICAgIC8vIGFib3ZlIHdvbid0IGJlIGFibGUgdG8gcmV0dXJuLgotICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzWzBdLnN0cnVjdHVyZVNldCgpLnNpemUoKSA9PSAx
KTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1c1swXS5jb25zdGFudENoZWNrcygp
LmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghc3RhdHVzWzBdLmFsdGVy
bmF0ZUJhc2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBp
ZiAoc3RhdHVzWzBdLnNwZWNpZmljVmFsdWUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHN0YXR1c1swXS5zcGVjaWZpY1ZhbHVlKCkuaXNDZWxsKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0YXR1c1swXS5zcGVjaWZpY1Zh
bHVlKCkuYXNDZWxsKCktPnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5jb25zaWRlcihzdHJ1Y3R1cmUpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwg
Km1fZ3JhcGguZnJlZXplKHN0YXR1c1swXS5zcGVjaWZpY1ZhbHVlKCkpKTsKLSAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1h
a2VIZWFwVG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwg
c3RhdHVzWzBdLnN0cnVjdHVyZVNldCgpKTsKKyAgICAgICAgCisgICAgICAgIEFic3RyYWN0VmFs
dWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIGlmICghdmFsdWUu
bV9zdHJ1Y3R1cmUuaXNUb3AoKSAmJiAhdmFsdWUubV9zdHJ1Y3R1cmUuaXNDbG9iYmVyZWQoKQor
ICAgICAgICAgICAgJiYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlIHx8ICEo
dmFsdWUubV90eXBlICYgflNwZWNDZWxsKSkpIHsKKyAgICAgICAgICAgIEdldEJ5SWRTdGF0dXMg
c3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgICAgICBtX2dy
YXBoLm1fdm0sIHZhbHVlLm1fc3RydWN0dXJlLnNldCgpLAorICAgICAgICAgICAgICAgIG1fZ3Jh
cGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldKTsKKyAgICAgICAgICAg
IGlmIChzdGF0dXMuaXNTaW1wbGUoKSkgeworICAgICAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQg
d2hhdCB0aGUgcmVzdWx0IGlzIGdvaW5nIHRvIGJlIC0gaXMgaXQgVE9QLCBhIGNvbnN0YW50LCBv
ciBtYXliZQorICAgICAgICAgICAgICAgIC8vIHNvbWV0aGluZyBtb3JlIHN1YnRsZT8uCisgICAg
ICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHQ7CisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gc3RhdHVzLm51bVZhcmlhbnRzKCk7IGktLTspIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFzdGF0dXNbaV0uc3BlY2lmaWNWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlz
UmVzdWx0OworICAgICAgICAgICAgICAgICAgICB0aGlzUmVzdWx0LnNldCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGgsICptX2dyYXBoLmZyZWV6ZShzdGF0dXNbaV0uc3BlY2lmaWNW
YWx1ZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJl
clN0YXRlKCkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQubWVyZ2UodGhpc1Jlc3VsdCk7
CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFu
dHMoKSA9PSAxIHx8IGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpKQorICAgICAgICAgICAgICAg
ICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkgPSByZXN1bHQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KKwogICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBjbG9iYmVyTGltaXQpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7
CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0QXJyYXlM
ZW5ndGg6CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzIpOwpAQCAtMTY4
NSwzNyArMTY4NCw0NiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgICAgIAogICAgIGNhc2UgUHV0QnlJZDoKICAgICBjYXNlIFB1dEJ5SWRGbHVzaDoKLSAg
ICBjYXNlIFB1dEJ5SWREaXJlY3Q6Ci0gICAgICAgIC8vIFRoaXMgdXNlIG9mIG9ubHlTdHJ1Y3R1
cmUoKSBzaG91bGQgYmUgcmVwbGFjZWQgYnkgZ2l2aW5nIFB1dEJ5SWRTdGF0dXMgdGhlIGFiaWxp
dHkKLSAgICAgICAgLy8gdG8gY29tcHV0ZSB0aGluZ3MgYmFzZWQgb24gYSBTdHJ1Y3R1cmVTZXQs
IGFuZCB0aGVuIHRvIGZhY3RvciBCeXRlQ29kZVBhcnNlcidzCi0gICAgICAgIC8vIGFiaWxpdHkg
dG8gZ2VuZXJhdGUgY29kZSBiYXNlZCBvbiBhIFB1dEJ5SWRTdGF0dXMgb3V0IG9mIEJ5dGVDb2Rl
UGFyc2VyIHNvIHRoYXQKLSAgICAgICAgLy8gQ29uc3RhbnRGb2xkaW5nUGhhc2UgY2FuIHVzZSBp
dC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
MzIyOQotICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkpIHsKKyAgICBjYXNlIFB1dEJ5SWRE
aXJlY3Q6IHsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKTsKKyAgICAgICAgaWYgKCF2YWx1ZS5tX3N0cnVjdHVyZS5pc1RvcCgpICYmICF2YWx1
ZS5tX3N0cnVjdHVyZS5pc0Nsb2JiZXJlZCgpKSB7CiAgICAgICAgICAgICBQdXRCeUlkU3RhdHVz
IHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgbV9n
cmFwaC5tX3ZtLAogICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyksCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlLAorICAgICAgICAg
ICAgICAgIHZhbHVlLm1fc3RydWN0dXJlLnNldCgpLAogICAgICAgICAgICAgICAgIG1fZ3JhcGgu
aWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldLAogICAgICAgICAgICAgICAg
IG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVjdCk7Ci0gICAgICAgICAgICBpZiAoc3RhdHVzLmlz
U2ltcGxlKCkgJiYgc3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSkgewotICAgICAgICAgICAgICAg
IGlmIChzdGF0dXNbMF0ua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgc3RydWN0dXJlKTsKLSAgICAg
ICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzdGF0dXMu
aXNTaW1wbGUoKSkgeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldCBuZXdTZXQ7CisgICAg
ICAgICAgICAgICAgVHJhbnNpdGlvblZlY3RvciB0cmFuc2l0aW9uczsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0dXMubnVtVmFyaWFudHMo
KTsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFy
aWFudCA9IHN0YXR1c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgp
ID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0cmFuc2l0aW9ucy5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNp
dGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1
cmVGb3JUcmFuc2l0aW9uKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5ld1NldC5hZGQodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQodmFy
aWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOworICAgICAgICAgICAgICAg
ICAgICAgICAgbmV3U2V0Lm1lcmdlKHZhcmlhbnQub2xkU3RydWN0dXJlKCkpOworICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChzdGF0
dXNbMF0ua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uCi0gICAgICAgICAgICAg
ICAgICAgICYmIHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxp
ZGF0ZWQoKSkgewotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuY29u
c2lkZXIoc3RhdHVzWzBdLm5ld1N0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgY2xv
YmJlclN0cnVjdHVyZXMoY2xvYmJlckxpbWl0KTsKLSAgICAgICAgICAgICAgICAgICAgZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkuc2V0KG1fZ3JhcGgsIHN0YXR1c1swXS5uZXdTdHJ1Y3R1cmUoKSk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5udW1WYXJpYW50
cygpID09IDEgfHwgaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpCiAgICAgICAgICAgICAgICAg
ICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBvYnNlcnZlVHJhbnNpdGlvbnMoY2xvYmJlckxpbWl0LCB0cmFuc2l0aW9ucyk7CisgICAg
ICAgICAgICAgICAgaWYgKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmNoYW5nZVN0cnVjdHVyZSht
X2dyYXBoLCBuZXdTZXQpID09IENvbnRyYWRpY3Rpb24pCisgICAgICAgICAgICAgICAgICAgIG1f
c3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5v
cmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CiAgICAgICAgIGJyZWFrOworICAgIH0KICAg
ICAgICAgCiAgICAgY2FzZSBJbjoKICAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBkZXRlcm1pbmUg
d2hlbiB0aGUgcHJvcGVydHkgZGVmaW5pdGVseSBleGlzdHMgYmFzZWQgb24gYWJzdHJhY3QKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CShyZXZpc2lvbiAxNzAxNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg2Miw3ICsyODYyLDkgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOwogICAgICAgICAgICAgICAg
IEdldEJ5SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigqbV92bSwg
c3RydWN0dXJlLCB1aWQpOwotICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuc3RhdGUoKSAhPSBH
ZXRCeUlkU3RhdHVzOjpTaW1wbGUgfHwgc3RhdHVzLm51bVZhcmlhbnRzKCkgIT0gMSkgeworICAg
ICAgICAgICAgICAgIGlmIChzdGF0dXMuc3RhdGUoKSAhPSBHZXRCeUlkU3RhdHVzOjpTaW1wbGUK
KyAgICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzLm51bVZhcmlhbnRzKCkgIT0gMQorICAgICAg
ICAgICAgICAgICAgICB8fCBzdGF0dXNbMF0uc3RydWN0dXJlU2V0KCkuc2l6ZSgpICE9IDEpIHsK
ICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBhZGRUb0dyYXBo
KEdldEJ5SWRGbHVzaCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8ocHJlZGljdGlv
biksIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSkpOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0yOTQ3LDcgKzI5NDksOSBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5OgogICAgICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKICAgICAgICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHN0YXR1cyA9IFB1dEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3IoKm1fdm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQsIGZh
bHNlKTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZhcmlhbnRzKCkgIT0gMSB8fCBz
dGF0dXNbMF0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHN0YXR1cy5udW1WYXJpYW50cygpICE9IDEKKyAgICAgICAgICAgICAgICAgICAg
fHwgc3RhdHVzWzBdLmtpbmQoKSAhPSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZQorICAgICAgICAg
ICAgICAgICAgICB8fCBzdGF0dXNbMF0uc3RydWN0dXJlKCkuc2l6ZSgpICE9IDEpIHsKICAgICAg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJl
ciksIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSwgZ2V0KFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAJKHJldmlzaW9uIDE3MDE1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsMzUg
KzIyOCw0NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gY2hpbGRF
ZGdlLm5vZGUoKTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0g
bm9kZS0+aWRlbnRpZmllck51bWJlcigpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGlmIChjaGlsZEVkZ2UudXNlS2luZCgpICE9IENlbGxVc2UpCi0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEFic3RyYWN0VmFs
dWUgYmFzZVZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKTsKIAogICAgICAgICAgICAgICAg
IG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOyAvLyBQdXNoIENGQSBvdmVyIHRo
aXMgbm9kZSBhZnRlciB3ZSBnZXQgdGhlIHN0YXRlIGJlZm9yZS4KICAgICAgICAgICAgICAgICBl
bGltaW5hdGVkID0gdHJ1ZTsgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgY29uc3RhbnQgZm9s
ZGVyIHRvIGRvIHRoaW5ncyB0byB0aGlzLgogCi0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBiYXNlVmFsdWUubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpOwotICAgICAg
ICAgICAgICAgIGlmICghc3RydWN0dXJlKQorICAgICAgICAgICAgICAgIGlmIChiYXNlVmFsdWUu
bV9zdHJ1Y3R1cmUuaXNUb3AoKSB8fCBiYXNlVmFsdWUubV9zdHJ1Y3R1cmUuaXNDbG9iYmVyZWQo
KQorICAgICAgICAgICAgICAgICAgICB8fCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVu
dHlwZWRVc2UgfHwgKGJhc2VWYWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwpKSkKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBHZXRC
eUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAg
ICAgICAgICAgIHZtKCksIHN0cnVjdHVyZSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZp
ZXJOdW1iZXJdKTsKKyAgICAgICAgICAgICAgICAgICAgdm0oKSwgYmFzZVZhbHVlLm1fc3RydWN0
dXJlLnNldCgpLCBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl0pOworICAg
ICAgICAgICAgICAgIGlmICghc3RhdHVzLmlzU2ltcGxlKCkpCisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghc3RhdHVzLmlz
U2ltcGxlKCkgfHwgc3RhdHVzLm51bVZhcmlhbnRzKCkgIT0gMSB8fAotICAgICAgICAgICAgICAg
ICAgICAhc3RhdHVzWzBdLmNvbnN0YW50Q2hlY2tzKCkuaXNFbXB0eSgpIHx8IHN0YXR1c1swXS5h
bHRlcm5hdGVCYXNlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxk
IGhhbmRsZSBwcm90b3R5cGUgY2FzZXMuCi0gICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAzODYKKyAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBzdGF0dXMubnVtVmFyaWFudHMoKTsgaS0tOykgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoIXN0YXR1c1tpXS5jb25zdGFudENoZWNrcygpLmlzRW1wdHkoKQorICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzW2ldLmFsdGVybmF0ZUJhc2UoKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGhhbmRsZSBwcm90b3R5cGUg
Y2FzZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMzg2CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSkgeworICAg
ICAgICAgICAgICAgICAgICBlbWl0R2V0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBub2RlLCBiYXNl
VmFsdWUsIHN0YXR1c1swXSwgaWRlbnRpZmllck51bWJlcik7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBlbWl0R2V0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBub2RlLCBiYXNlVmFsdWUsIHN0YXR1
c1swXSwgaWRlbnRpZmllck51bWJlcik7Ci0gICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgaWYgKCFpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSkKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgTXVsdGlHZXRCeU9mZnNldERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlHZXRCeU9mZnNl
dERhdGEuYWRkKCk7CisgICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBzdGF0dXMudmFy
aWFudHMoKTsKKyAgICAgICAgICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRp
Zmllck51bWJlcjsKKyAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9NdWx0aUdldEJ5T2Zm
c2V0KGRhdGEpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRCeUlkOgotICAgICAgICAgICAgY2FzZSBQ
dXRCeUlkRGlyZWN0OiB7CisgICAgICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CisgICAgICAg
ICAgICBjYXNlIFB1dEJ5SWRGbHVzaDogewogICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4gb3Jp
Z2luID0gbm9kZS0+b3JpZ2luOwogICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9k
ZS0+Y2hpbGQxKCk7CiAgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBjaGlsZEVkZ2Uubm9k
ZSgpOwpAQCAtMjY5LDI0ICsyODEsMzQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX2lu
dGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsgLy8gUHVzaCBDRkEgb3ZlciB0aGlzIG5v
ZGUgYWZ0ZXIgd2UgZ2V0IHRoZSBzdGF0ZSBiZWZvcmUuCiAgICAgICAgICAgICAgICAgZWxpbWlu
YXRlZCA9IHRydWU7IC8vIERvbid0IGFsbG93IHRoZSBkZWZhdWx0IGNvbnN0YW50IGZvbGRlciB0
byBkbyB0aGluZ3MgdG8gdGhpcy4KIAotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gYmFzZVZhbHVlLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAg
ICAgICBpZiAoIXN0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICBpZiAoYmFzZVZhbHVlLm1fc3Ry
dWN0dXJlLmlzVG9wKCkgfHwgYmFzZVZhbHVlLm1fc3RydWN0dXJlLmlzQ2xvYmJlcmVkKCkpCiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAg
ICAgICAgICAgICAgICAgICAgdm0oKSwKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iob3JpZ2luLnNlbWFudGljKSwKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0
dXJlLAorICAgICAgICAgICAgICAgICAgICBiYXNlVmFsdWUubV9zdHJ1Y3R1cmUuc2V0KCksCiAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVy
XSwKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3AoKSA9PSBQdXRCeUlkRGlyZWN0KTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIXN0YXR1cy5pc1NpbXBsZSgpKQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51
bVZhcmlhbnRzKCkgIT0gMSkKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzdGF0dXMubnVtVmFyaWFudHMoKTsgaS0tOykKKyAgICAgICAgICAgICAg
ICAgICAgYWRkQ2hlY2tzKG9yaWdpbiwgaW5kZXhJbkJsb2NrLCBzdGF0dXNbaV0uY29uc3RhbnRD
aGVja3MoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5u
dW1WYXJpYW50cygpID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5T2Zmc2V0
KGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCBzdGF0dXNbMF0sIGlkZW50aWZpZXJOdW1i
ZXIpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZW1pdFB1dEJ5T2Zmc2V0KGluZGV4SW5CbG9j
aywgbm9kZSwgYmFzZVZhbHVlLCBzdGF0dXNbMF0sIGlkZW50aWZpZXJOdW1iZXIpOwotICAgICAg
ICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmICghaXNGVEwo
bV9ncmFwaC5tX3BsYW4ubW9kZSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbXVsdGlQ
dXRCeU9mZnNldERhdGEuYWRkKCk7CisgICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBz
dGF0dXMudmFyaWFudHMoKTsKKyAgICAgICAgICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVy
ID0gaWRlbnRpZmllck51bWJlcjsKKyAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9NdWx0
aVB1dEJ5T2Zmc2V0KGRhdGEpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogCkBAIC00MjYsMTMgKzQ0OCw2IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgdHJhbnNp
dGlvbiA9IG1fZ3JhcGgubV90cmFuc2l0aW9ucy5hZGQoCiAgICAgICAgICAgICAgICAgdmFyaWFu
dC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwot
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFyaWFudC5jb25zdGFudENo
ZWNrcygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNp
dGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICBvcmlnaW4sIGluZGV4SW5CbG9jaywKLSAg
ICAgICAgICAgICAgICAgICAgdmFyaWFudC5jb25zdGFudENoZWNrcygpW2ldLmNvbnN0YW50KCks
Ci0gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQuY29uc3RhbnRDaGVja3MoKVtpXS5zdHJ1Y3R1
cmUoKSk7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBFZGdlIHByb3BlcnR5
U3RvcmFnZTsKQEAgLTQ5OSw2ICs1MTQsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBub2RlLT5vcmlnaW4sIG5vZGUtPmNoaWxk
MSgpKTsKICAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZENoZWNrcygKKyAgICAg
ICAgTm9kZU9yaWdpbiBvcmlnaW4sIHVuc2lnbmVkIGluZGV4SW5CbG9jaywgY29uc3QgQ29uc3Rh
bnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciYgY2hlY2tzKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGNoZWNrcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgYWRkU3Ry
dWN0dXJlVHJhbnNpdGlvbkNoZWNrKAorICAgICAgICAgICAgICAgIG9yaWdpbiwgaW5kZXhJbkJs
b2NrLCBjaGVja3NbaV0uY29uc3RhbnQoKSwgY2hlY2tzW2ldLnN0cnVjdHVyZSgpKTsKKyAgICAg
ICAgfQorICAgIH0KIAogICAgIHZvaWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKE5vZGVP
cmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBpbmRleEluQmxvY2ssIEpTQ2VsbCogY2VsbCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgJKHJldmlzaW9uIDE3MDE1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NTgsNiArNDU4LDE1IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICAgICAgbV9mbGFncyAmPSB+Tm9kZUNsb2JiZXJzV29ybGQ7CiAgICAgfQogICAgIAorICAgIHZv
aWQgY29udmVydFRvTXVsdGlHZXRCeU9mZnNldChNdWx0aUdldEJ5T2Zmc2V0RGF0YSogZGF0YSkK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX29wID09IEdldEJ5SWQgfHwgbV9vcCA9PSBHZXRCeUlk
Rmx1c2gpOworICAgICAgICBtX29wSW5mbyA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oZGF0YSk7
CisgICAgICAgIGNoaWxkMSgpLnNldFVzZUtpbmQoQ2VsbFVzZSk7CisgICAgICAgIG1fb3AgPSBN
dWx0aUdldEJ5T2Zmc2V0OworICAgICAgICBtX2ZsYWdzICY9IH5Ob2RlQ2xvYmJlcnNXb3JsZDsK
KyAgICB9CisgICAgCiAgICAgdm9pZCBjb252ZXJ0VG9QdXRCeU9mZnNldCh1bnNpZ25lZCBzdG9y
YWdlQWNjZXNzRGF0YUluZGV4LCBFZGdlIHN0b3JhZ2UpCiAgICAgewogICAgICAgICBBU1NFUlQo
bV9vcCA9PSBQdXRCeUlkIHx8IG1fb3AgPT0gUHV0QnlJZERpcmVjdCB8fCBtX29wID09IE11bHRp
UHV0QnlPZmZzZXQpOwpAQCAtNDY5LDYgKzQ3OCwxNCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAg
IG1fZmxhZ3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxkOwogICAgIH0KICAgICAKKyAgICB2b2lkIGNv
bnZlcnRUb011bHRpUHV0QnlPZmZzZXQoTXVsdGlQdXRCeU9mZnNldERhdGEqIGRhdGEpCisgICAg
eworICAgICAgICBBU1NFUlQobV9vcCA9PSBQdXRCeUlkIHx8IG1fb3AgPT0gUHV0QnlJZERpcmVj
dCB8fCBtX29wID09IFB1dEJ5SWRGbHVzaCk7CisgICAgICAgIG1fb3BJbmZvID0gYml0d2lzZV9j
YXN0PGludHB0cl90PihkYXRhKTsKKyAgICAgICAgbV9vcCA9IE11bHRpUHV0QnlPZmZzZXQ7Cisg
ICAgICAgIG1fZmxhZ3MgJj0gfk5vZGVDbG9iYmVyc1dvcmxkOworICAgIH0KKyAgICAKICAgICB2
b2lkIGNvbnZlcnRUb1BoYW50b21Mb2NhbCgpCiAgICAgewogICAgICAgICBBU1NFUlQobV9vcCA9
PSBQaGFudG9tICYmIChjaGlsZDEoKS0+b3AoKSA9PSBQaGkgfHwgY2hpbGQxKCktPm9wKCkgPT0g
U2V0TG9jYWwgfHwgY2hpbGQxKCktPm9wKCkgPT0gU2V0QXJndW1lbnQpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2
aXNpb24gMTcwMTU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBHUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKEVkZ2UgCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6YWRk
cmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwotICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgICAgICBERkdf
QVNTRVJUKG1faml0LmdyYXBoKCksIG1fY3VycmVudE5vZGUsIHNwaWxsRm9ybWF0ICYgRGF0YUZv
cm1hdEpTKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIHNwaWxsRm9ybWF0KTsKQEAgLTEz
NywxMCArMTM3LDEwIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoRWRnZSAK
ICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CiAgICAgY2FzZSBEYXRhRm9ybWF0SW50NTI6CiAg
ICAgICAgIC8vIHRoaXMgdHlwZSBjdXJyZW50bHkgbmV2ZXIgb2NjdXJzCi0gICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgp
LCBtX2N1cnJlbnROb2RlLCAiQmFkIGRhdGEgZm9ybWF0Iik7CiAgICAgICAgIAogICAgIGRlZmF1
bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIERGR19D
UkFTSChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCAiQ29ycnVwdCBkYXRhIGZvcm1hdCIp
OwogICAgICAgICByZXR1cm4gSW52YWxpZEdQUlJlZzsKICAgICB9CiB9CkBAIC0zMTEsNyArMzEx
LDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYQogICAgIGlmIChi
cmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsKICAgICAgICAgTm9kZSogYnJhbmNoTm9k
ZSA9IG1fYmxvY2stPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CiAKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQobm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpID09IDEpOworICAgICAgICBERkdfQVNTRVJU
KG1faml0LmdyYXBoKCksIG5vZGUsIG5vZGUtPmFkanVzdGVkUmVmQ291bnQoKSA9PSAxKTsKICAg
ICAgICAgCiAgICAgICAgIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKG9wZXJhbmQs
IGJyYW5jaE5vZGUsIGludmVydCk7CiAgICAgCkBAIC02MjgsOCArNjI4LDggQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogCiAgICAgYm9vbCBpc0NhbGwgPSBub2Rl
LT5vcCgpID09IENhbGw7CiAgICAgaWYgKCFpc0NhbGwpCi0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0KTsKLQorICAgICAgICBERkdfQVNTRVJUKG1faml0Lmdy
YXBoKCksIG5vZGUsIG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0KTsKKyAgICAKICAgICAvLyBGb3Ig
Y29uc3RydWN0b3JzLCB0aGUgdGhpcyBhcmd1bWVudCBpcyBub3QgcGFzc2VkIGJ1dCB3ZSBoYXZl
IHRvIG1ha2Ugc3BhY2UKICAgICAvLyBmb3IgaXQuCiAgICAgaW50IGR1bW15VGhpc0FyZ3VtZW50
ID0gaXNDYWxsID8gMCA6IDE7CkBAIC03NDEsNyArNzQxLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsU3BlY3VsYXRlSW50MwogICAgICAgICAKICAgICAgICAgRGF0YUZvcm1hdCBzcGls
bEZvcm1hdCA9IGluZm8uc3BpbGxGb3JtYXQoKTsKICAgICAgICAgCi0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUykgfHwgc3BpbGxGb3JtYXQgPT0gRGF0
YUZvcm1hdEludDMyKTsKKyAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBtX2N1cnJl
bnROb2RlLCAoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpIHx8IHNwaWxsRm9ybWF0ID09IERh
dGFGb3JtYXRJbnQzMik7CiAgICAgICAgIAogICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmly
dHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CiAgICAgICAgIApAQCAtNzcxLDcgKzc3
MSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludDMKICAgICB9CiAK
ICAgICBjYXNlIERhdGFGb3JtYXRKUzogewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghKHR5cGUg
JiBTcGVjSW50NTIpKTsKKyAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBtX2N1cnJl
bnROb2RlLCAhKHR5cGUgJiBTcGVjSW50NTIpKTsKICAgICAgICAgLy8gQ2hlY2sgdGhlIHZhbHVl
IGlzIGFuIGludGVnZXIuCiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwogICAgICAg
ICBtX2dwcnMubG9jayhncHIpOwpAQCAtODM0LDEwICs4MzQsMTAgQEAgR1BSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50MwogICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6CiAg
ICAgY2FzZSBEYXRhRm9ybWF0SW50NTI6CiAgICAgY2FzZSBEYXRhRm9ybWF0U3RyaWN0SW50NTI6
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIERGR19DUkFT
SChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCAiQmFkIGRhdGEgZm9ybWF0Iik7CiAgICAg
ICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCAiQ29ycnVw
dCBkYXRhIGZvcm1hdCIpOwogICAgICAgICByZXR1cm4gSW52YWxpZEdQUlJlZzsKICAgICB9CiB9
CkBAIC04NTQsNyArODU0LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
SW50MwogewogICAgIERhdGFGb3JtYXQgbXVzdEJlRGF0YUZvcm1hdEludDMyOwogICAgIEdQUlJl
ZyByZXN1bHQgPSBmaWxsU3BlY3VsYXRlSW50MzJJbnRlcm5hbDx0cnVlPihlZGdlLCBtdXN0QmVE
YXRhRm9ybWF0SW50MzIpOwotICAgIFJFTEVBU0VfQVNTRVJUKG11c3RCZURhdGFGb3JtYXRJbnQz
MiA9PSBEYXRhRm9ybWF0SW50MzIpOworICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbV9j
dXJyZW50Tm9kZSwgbXVzdEJlRGF0YUZvcm1hdEludDMyID09IERhdGFGb3JtYXRJbnQzMik7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtODg5LDcgKzg4OSw3IEBAIEdQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludDUKICAgICAgICAgCiAgICAgICAgIERhdGFGb3JtYXQg
c3BpbGxGb3JtYXQgPSBpbmZvLnNwaWxsRm9ybWF0KCk7CiAgICAgICAgIAotICAgICAgICBSRUxF
QVNFX0FTU0VSVChzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SW50NTIgfHwgc3BpbGxGb3JtYXQg
PT0gRGF0YUZvcm1hdFN0cmljdEludDUyKTsKKyAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFw
aCgpLCBtX2N1cnJlbnROb2RlLCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SW50NTIgfHwgc3Bp
bGxGb3JtYXQgPT0gRGF0YUZvcm1hdFN0cmljdEludDUyKTsKICAgICAgICAgCiAgICAgICAgIG1f
Z3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKICAg
ICAgICAgCkBAIC05NDEsNyArOTQxLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3Bl
Y3VsYXRlSW50NQogICAgIH0KIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBtX2N1cnJl
bnROb2RlLCAiQmFkIGRhdGEgZm9ybWF0Iik7CiAgICAgICAgIHJldHVybiBJbnZhbGlkR1BSUmVn
OwogICAgIH0KIH0KQEAgLTk3Miw3ICs5NzIsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVEb3ViCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIERhdGFGb3JtYXQg
c3BpbGxGb3JtYXQgPSBpbmZvLnNwaWxsRm9ybWF0KCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUpOworICAgICAgICBERkdfQVNTRVJUKG1f
aml0LmdyYXBoKCksIG1fY3VycmVudE5vZGUsIHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXREb3Vi
bGUpOwogICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKICAgICAgICAgbV9qaXQu
bG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBmcHIp
OwogICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVy
RG91YmxlKTsKQEAgLTk4MCw3ICs5ODAsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVEb3ViCiAgICAgICAgIHJldHVybiBmcHI7CiAgICAgfQogCi0gICAgUkVMRUFTRV9B
U1NFUlQoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpOworICAgIERG
R19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSwgaW5mby5yZWdpc3RlckZvcm1h
dCgpID09IERhdGFGb3JtYXREb3VibGUpOwogICAgIEZQUlJlZyBmcHIgPSBpbmZvLmZwcigpOwog
ICAgIG1fZnBycy5sb2NrKGZwcik7CiAgICAgcmV0dXJuIGZwcjsKQEAgLTEwMTAsNyArMTAxMCw3
IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgICAg
IHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCAwKTsKICAgICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAgIH0KLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQoaW5mby5zcGlsbEZvcm1hdCgpICYgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgREZH
X0FTU0VSVChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCBpbmZvLnNwaWxsRm9ybWF0KCkg
JiBEYXRhRm9ybWF0SlMpOwogICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lz
dGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CiAgICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxl
cjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwogCkBAIC0xMDU1LDEwICsxMDU1
LDEwIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICBjYXNl
IERhdGFGb3JtYXRTdG9yYWdlOgogICAgIGNhc2UgRGF0YUZvcm1hdEludDUyOgogICAgIGNhc2Ug
RGF0YUZvcm1hdFN0cmljdEludDUyOgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSwgIkJh
ZCBkYXRhIGZvcm1hdCIpOwogICAgICAgICAKICAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwg
bV9jdXJyZW50Tm9kZSwgIkNvcnJ1cHQgZGF0YSBmb3JtYXQiKTsKICAgICAgICAgcmV0dXJuIElu
dmFsaWRHUFJSZWc7CiAgICAgfQogfQpAQCAtMTA5MSw3ICsxMDkxLDcgQEAgR1BSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgICAgICAgICAgdGVybWluYXRlU3BlY3Vs
YXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDApOwogICAgICAgICAg
ICAgcmV0dXJuIGdwcjsKICAgICAgICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmZvLnNw
aWxsRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpOworICAgICAgICBERkdfQVNTRVJUKG1faml0Lmdy
YXBoKCksIG1fY3VycmVudE5vZGUsIGluZm8uc3BpbGxGb3JtYXQoKSAmIERhdGFGb3JtYXRKUyk7
CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJT
cGlsbGVkKTsKICAgICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZp
cnR1YWxSZWdpc3RlciksIGdwcik7CiAKQEAgLTExMzYsMTAgKzExMzYsMTAgQEAgR1BSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgIGNhc2UgRGF0YUZvcm1hdFN0b3Jh
Z2U6CiAgICAgY2FzZSBEYXRhRm9ybWF0SW50NTI6CiAgICAgY2FzZSBEYXRhRm9ybWF0U3RyaWN0
SW50NTI6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIERG
R19DUkFTSChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCAiQmFkIGRhdGEgZm9ybWF0Iik7
CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCAi
Q29ycnVwdCBkYXRhIGZvcm1hdCIpOwogICAgICAgICByZXR1cm4gSW52YWxpZEdQUlJlZzsKICAg
ICB9CiB9CkBAIC0xNjAzLDcgKzE2MDMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
TG9naWNhbE5vdChOCiAgICAgICAgIHJldHVybiBjb21waWxlU3RyaW5nWmVyb0xlbmd0aChub2Rl
KTsKIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiQmFkIHVzZSBraW5kIik7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KQEAgLTE3NTgsNyArMTc1OCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSogbm8KICAgICB9CiAgICAgICAgIAogICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIERG
R19DUkFTSChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCAiQmFkIHVzZSBraW5kIik7CiAg
ICAgfQogfQogCkBAIC0xNzgzLDcgKzE3ODMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIElkZW50aXR5OiB7CiAgICAgICAgIC8vIENTRSBz
aG91bGQgYWx3YXlzIGVsaW1pbmF0ZSB0aGlzLgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIlVuZXhw
ZWN0ZWQgSWRlbnRpdHkgbm9kZSIpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTE4NjQs
NyArMTg2NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICBjYXNlIE1vdkhpbnQ6CiAgICAgY2FzZSBab21iaWVIaW50OgogICAgIGNhc2UgQ2hlY2s6IHsK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgREZHX0NSQVNI
KG1faml0LmdyYXBoKCksIG5vZGUsICJVbmV4cGVjdGVkIG5vZGUiKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkBAIC0xOTI0LDcgKzE5MjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiQmFkIGZsdXNoIGZvcm1hdCIpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMjEwMyw3ICsyMTAzLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCB1
c2Uga2luZCIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CkBAIC0yMTcwLDcgKzIxNzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIERGR19DUkFT
SChtX2ppdC5ncmFwaCgpLCBub2RlLCAiQmFkIHVzZSBraW5kIik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTIyOTIsOCArMjI5Miw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgc3dpdGNoIChub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQ
cmVkaWN0aW9uczoKICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1
bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7Cisg
ICAgICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCBhcnJheSBtb2Rl
IHR5cGUiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmlj
OiB7CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKQEAgLTI0OTQsMTIgKzI0OTMsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKICAgICAgICAg
Y2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKICAgICAgICAgY2FzZSBBcnJheTo6
Rm9yY2VFeGl0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFn
ZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7Ci0gICAgICAgICAgICBhbHJlYWR5SGFuZGxlZCA9IHRydWU7
CisgICAgICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCBhcnJheSBt
b2RlIHR5cGUiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpHZW5l
cmljOiB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFB1dEJ5VmFs
KTsKKyAgICAgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbm9kZS0+b3Ao
KSA9PSBQdXRCeVZhbCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IGFyZzEodGhpcywgY2hpbGQxKTsKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhp
cywgY2hpbGQyKTsKQEAgLTMwMzgsNyArMzAzNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgVG9QcmltaXRpdmU6
IHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVu
dHlwZWRVc2UpOworICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsIG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKICAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBSZXVzZSwgb3AxKTsKICAgICAgICAgCkBAIC0zMTA1LDcgKzMxMDIsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpOwogICAgICAgICBpZiAoIWdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFk
VGltZSgpICYmICFoYXNBbnlBcnJheVN0b3JhZ2Uobm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7CiAg
ICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1
Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgp
KTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkg
PT0gbm9kZS0+aW5kZXhpbmdUeXBlKCkpOworICAgICAgICAgICAgREZHX0FTU0VSVChtX2ppdC5n
cmFwaCgpLCBub2RlLCBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IG5vZGUtPmluZGV4aW5n
VHlwZSgpKTsKICAgICAgICAgICAgIEFTU0VSVCgKICAgICAgICAgICAgICAgICBoYXNVbmRlY2lk
ZWQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKICAgICAgICAgICAgICAgICB8fCBoYXNJbnQz
MihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQpAQCAtMzM1Niw3ICszMzUzLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgICAgICAgICBlbWl0QWxs
b2NhdGVKU0FycmF5KHJlc3VsdEdQUiwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvcklu
ZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oaW5kZXhpbmdUeXBlKSwgc3RvcmFnZUdQUiwgbnVt
RWxlbWVudHMpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRl
eGluZ1R5cGUgJiBJc0FycmF5KTsKKyAgICAgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgo
KSwgbm9kZSwgaW5kZXhpbmdUeXBlICYgSXNBcnJheSk7CiAgICAgICAgICAgICBKU1ZhbHVlKiBk
YXRhID0gbV9qaXQuY29kZUJsb2NrKCktPmNvbnN0YW50QnVmZmVyKG5vZGUtPnN0YXJ0Q29uc3Rh
bnQoKSk7CiAgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEFycmF5V2l0aERvdWJsZSkg
ewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG5vZGUt
Pm51bUNvbnN0YW50cygpOyArK2luZGV4KSB7CkBAIC0zNDEwLDcgKzM0MDcsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAi
QmFkIHVzZSBraW5kIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBi
cmVhazsKQEAgLTM2NDAsNyArMzYzNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgREZH
X0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMzY5MCw3ICszNjg3LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwg
IkJhZCB1c2Uga2luZCIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
YnJlYWs7CkBAIC00MTU0LDcgKzQxNTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9u
OiB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5l
Q2FsbEZyYW1lKTsKKyAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCAhbm9k
ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgIAogICAgICAgICBK
U1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHZhbHVlKTsKQEAgLTQyMjcsNyArNDIyNCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBj
YXNlIFRlYXJPZmZBY3RpdmF0aW9uOiB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFub2RlLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgREZHX0FTU0VSVChtX2pp
dC5ncmFwaCgpLCBub2RlLCAhbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSk7
CiAKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYWN0aXZhdGlvblZhbHVlKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CkBAIC00Mjk5LDcg
KzQyOTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLm1hY2hpbmVBcmd1bWVudHNSZWdpc3Rl
ckZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSkpOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZSk7CisgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIW5vZGUtPm9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29t
cGlsZXI6OnBheWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIHJlc3VsdEdQUik7CiAg
ICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKICAgICAgICAg
aW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKQEAgLTQzNzUsNyArNDM3Miw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXBMaXN0IHNsb3dBcmd1bWVudDsKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNs
b3dBcmd1bWVudE91dE9mQm91bmRzOwogICAgICAgICBpZiAobV9qaXQuc3ltYm9sVGFibGVGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKS0+c2xvd0FyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVCghbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSk7Cisg
ICAgICAgICAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG5vZGUsICFub2RlLT5vcmlnaW4u
c2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIGNvbnN0IFNsb3dBcmd1bWVu
dCogc2xvd0FyZ3VtZW50cyA9IG1faml0LmdyYXBoKCkubV9zbG93QXJndW1lbnRzLmdldCgpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBzbG93QXJndW1lbnRPdXRPZkJvdW5kcy5hcHBlbmQo
CkBAIC00NDQyLDcgKzQ0MzksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93QXJndW1lbnQ7CiAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93QXJndW1lbnRPdXRPZkJvdW5kczsKICAgICAg
ICAgaWYgKG1faml0LnN5bWJvbFRhYmxlRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPnNsb3dB
cmd1bWVudHMoKSkgewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgREZHX0FTU0VSVChtX2ppdC5n
cmFwaCgpLCBub2RlLCAhbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSk7CiAg
ICAgICAgICAgICBjb25zdCBTbG93QXJndW1lbnQqIHNsb3dBcmd1bWVudHMgPSBtX2ppdC5ncmFw
aCgpLm1fc2xvd0FyZ3VtZW50cy5nZXQoKTsKIAogICAgICAgICAgICAgc2xvd0FyZ3VtZW50T3V0
T2ZCb3VuZHMuYXBwZW5kKApAQCAtNDU3Niw3ICs0NTczLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgVW5yZWFj
aGFibGU6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIERG
R19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiVW5leHBlY3RlZCBVbnJlYWNoYWJsZSBub2Rl
Iik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CkBAIC00NjQ0LDcg
KzQ2NDEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
Y2FzZSBDaGVja1RpZXJVcEluTG9vcDoKICAgICBjYXNlIENoZWNrVGllclVwQXRSZXR1cm46CiAg
ICAgY2FzZSBDaGVja1RpZXJVcEFuZE9TUkVudGVyOgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIlVu
ZXhwZWN0ZWQgdGllci11cCBub2RlIik7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmIC8vIEVOQUJM
RShGVExfSklUKQogCkBAIC00NjU5LDcgKzQ2NTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBBcml0aElNdWw6CiAgICAgY2FzZSBNdWx0aUdl
dEJ5T2Zmc2V0OgogICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5v
ZGUsICJVbmV4cGVjdGVkIEZUTC1vbmx5IG5vZGUiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVy
ZUFic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTcwMTU5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2
MSw2ICsxNjEsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZXF1YWxzU2xvdyhvdGhlcik7
CiAgICAgfQogICAgIAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVCghaXNUb3AoKSk7CisgICAgICAgIHJldHVybiBtX3NldDsKKyAgICB9
CisgICAgCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKCFp
c1RvcCgpKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDI1MCkKKysrIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE0LTA2LTIxICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgW2Z0bG9wdF0gRm9sZCBHZXRCeUlk
L1B1dEJ5SWQgdG8gTXVsdGlHZXRCeU9mZnNldC9HZXRCeU9mZnNldCBvciBNdWx0aVB1dEJ5T2Zm
c2V0L1B1dEJ5T2Zmc2V0LCB3aGljaCBpbXBsaWVzIGhhbmRsaW5nIG5vbi1zaW5nbGV0b24gc2V0
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0MDkw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBqcy9y
ZWdyZXNzL2ZvbGQtZ2V0LWJ5LWlkLXRvLW11bHRpLWdldC1ieS1vZmZzZXQtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2ZvbGQtZ2V0LWJ5LWlkLXRvLW11bHRpLWdl
dC1ieS1vZmZzZXQtcmFyZS1pbnQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9y
ZWdyZXNzL2ZvbGQtZ2V0LWJ5LWlkLXRvLW11bHRpLWdldC1ieS1vZmZzZXQtcmFyZS1pbnQuaHRt
bDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9mb2xkLWdldC1ieS1pZC10by1tdWx0aS1n
ZXQtYnktb2Zmc2V0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZm9sZC1wdXQt
YnktaWQtdG8tbXVsdGktcHV0LWJ5LW9mZnNldC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGpzL3JlZ3Jlc3MvZm9sZC1wdXQtYnktaWQtdG8tbXVsdGktcHV0LWJ5LW9mZnNldC5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mb2xkLWdldC1ieS1p
ZC10by1tdWx0aS1nZXQtYnktb2Zmc2V0LXJhcmUtaW50LmpzOiBBZGRlZC4KKyAgICAgICAgKGZv
byk6CisgICAgICAgIChmdSk6CisgICAgICAgIChiYXIpOgorICAgICAgICAoLmJhcik6CisgICAg
ICAgIChOdW1iZXIpOgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQtZ2V0
LWJ5LWlkLXRvLW11bHRpLWdldC1ieS1vZmZzZXQuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToK
KyAgICAgICAgKGZ1KToKKyAgICAgICAgKGJhcik6CisgICAgICAgICguYmFyKToKKyAgICAgICAg
KE51bWJlcik6CisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZm9sZC1wdXQtYnkt
aWQtdG8tbXVsdGktcHV0LWJ5LW9mZnNldC5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAg
ICAgICAoZnUpOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKC5iYXIpOgorCiAyMDE0LTA2LTE5
ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgW2Z0bG9wdF0gTElD
TSBzaG91bGQgYmUgYWJsZSB0byBob2lzdCBDaGVja1N0cnVjdHVyZSBldmVuIGlmIHRoZSBsb29w
IGNsb2JiZXJzIHN0cnVjdHVyZXMgc28gbG9uZyBhcyB0aGUgc3RydWN0dXJlcyBiZWluZyBjaGVj
a2VkIGFyZSB3YXRjaGFibGUKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1nZXQt
YnktaWQtdG8tbXVsdGktZ2V0LWJ5LW9mZnNldC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLWdldC1ieS1pZC10by1tdWx0aS1nZXQtYnktb2Zm
c2V0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
Zm9sZC1nZXQtYnktaWQtdG8tbXVsdGktZ2V0LWJ5LW9mZnNldC1leHBlY3RlZC50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2ZvbGQtZ2V0LWJ5LWlkLXRvLW11
bHRpLWdldC1ieS1vZmZzZXQKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mg
bm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1nZXQtYnkt
aWQtdG8tbXVsdGktZ2V0LWJ5LW9mZnNldC1yYXJlLWludC1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLWdldC1ieS1pZC10by1tdWx0aS1nZXQt
Ynktb2Zmc2V0LXJhcmUtaW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvZm9sZC1nZXQtYnktaWQtdG8tbXVsdGktZ2V0LWJ5LW9mZnNldC1yYXJl
LWludC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdy
ZXNzL2ZvbGQtZ2V0LWJ5LWlkLXRvLW11bHRpLWdldC1ieS1vZmZzZXQtcmFyZS1pbnQKKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1nZXQtYnktaWQtdG8tbXVsdGktZ2V0LWJ5LW9mZnNl
dC1yYXJlLWludC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9s
ZC1nZXQtYnktaWQtdG8tbXVsdGktZ2V0LWJ5LW9mZnNldC1yYXJlLWludC5odG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLWdldC1ieS1pZC10by1tdWx0aS1n
ZXQtYnktb2Zmc2V0LXJhcmUtaW50Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Jl
Z3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZm9sZC1n
ZXQtYnktaWQtdG8tbXVsdGktZ2V0LWJ5LW9mZnNldC1yYXJlLWludC5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtZ2V0LWJ5
LWlkLXRvLW11bHRpLWdldC1ieS1vZmZzZXQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2ZvbGQtZ2V0LWJ5LWlkLXRvLW11bHRpLWdldC1ieS1vZmZzZXQuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1nZXQtYnktaWQtdG8t
bXVsdGktZ2V0LWJ5LW9mZnNldC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAK
KzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdy
ZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2ZvbGQtZ2V0
LWJ5LWlkLXRvLW11bHRpLWdldC1ieS1vZmZzZXQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLXB1dC1ieS1pZC10by1tdWx0
aS1wdXQtYnktb2Zmc2V0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL2ZvbGQtcHV0LWJ5LWlkLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLXB1dC1ieS1p
ZC10by1tdWx0aS1wdXQtYnktb2Zmc2V0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvZm9sZC1wdXQtYnktaWQtdG8tbXVsdGktcHV0LWJ5LW9m
ZnNldAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24g
dGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLXB1dC1ieS1pZC10by1tdWx0aS1w
dXQtYnktb2Zmc2V0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9m
b2xkLXB1dC1ieS1pZC10by1tdWx0aS1wdXQtYnktb2Zmc2V0Lmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtcHV0LWJ5LWlkLXRvLW11bHRpLXB1dC1ieS1v
ZmZzZXQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRN
TCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9mb2xkLXB1dC1ieS1pZC10by1tdWx0
aS1wdXQtYnktb2Zmc2V0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQtZ2V0LWJ5LWlkLXRvLW11bHRp
LWdldC1ieS1vZmZzZXQtcmFyZS1pbnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvZm9sZC1nZXQtYnktaWQtdG8tbXVsdGktZ2V0LWJ5LW9mZnNl
dC1yYXJlLWludC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL2ZvbGQtZ2V0LWJ5LWlkLXRvLW11bHRpLWdldC1ieS1vZmZzZXQtcmFyZS1pbnQu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorZnVuY3Rpb24gZm9vKG8pIHsKKyAg
ICByZXR1cm4gby5mOworfQorCitmdW5jdGlvbiBmdShvKSB7CisgICAgcmV0dXJuIG8uZTsKK30K
KworZnVuY3Rpb24gYmFyKGYsIG8pIHsKKyAgICByZXR1cm4gZihvKTsKK30KKworZm9yICh2YXIg
aSA9IDA7IGkgPCAxMDAwOyArK2kpIHsKKyAgICB2YXIgbyA9IHtmOjF9OworICAgIG9bImkiICsg
aV0gPSA0MjsKKyAgICBmb28obyk7CisgICAgZnUoe2Y6MSwgZToyfSk7CisgICAgZnUoe2U6MSwg
ZjoyfSk7Cit9CisgICAgCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgYmFy
KGZvbywge2Y6MX0pOworICAgIGJhcihmdW5jdGlvbigpIHsgfSwgbnVsbCk7CisgICAgYmFyKGZ1
bmN0aW9uKCkgeyByZXR1cm4gNDIgfSwgbnVsbCk7Cit9CisKK051bWJlci5wcm90b3R5cGUuZiA9
IDEwMDsKKyAgICAKKyhmdW5jdGlvbihmLCBvLCBwKSB7CisgICAgdmFyIHJlc3VsdCA9IDA7Cisg
ICAgdmFyIG4gPSAxMDAwMDAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbiArIDE7ICsraSkg
eworICAgICAgICByZXN1bHQgKz0gZnUobyk7CisgICAgICAgIHZhciBxOworICAgICAgICBpZiAo
aSA9PSBuKQorICAgICAgICAgICAgcSA9IDQyOworICAgICAgICBlbHNlCisgICAgICAgICAgICBx
ID0gbzsKKyAgICAgICAgcmVzdWx0ICs9IGJhcihmLCBxKTsKKyAgICAgICAgdmFyIHRtcCA9IG87
CisgICAgICAgIG8gPSBwOworICAgICAgICBwID0gdG1wOworICAgIH0KKyAgICBpZiAocmVzdWx0
ICE9IChvLmYgKyBvLmUgKyBwLmYgKyBwLmUpICogbiAvIDIgKyAxMDAgKyBwLmUpCisgICAgICAg
IHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30pKGZvbywge2Y6NDIsIGU6
NDN9LCB7ZTo0NCwgZjo0NX0pOworCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9mb2xkLWdldC1ieS1pZC10by1tdWx0aS1nZXQtYnktb2Zmc2V0LmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQtZ2V0LWJ5LWlk
LXRvLW11bHRpLWdldC1ieS1vZmZzZXQuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mb2xkLWdldC1ieS1pZC10by1tdWx0aS1nZXQtYnktb2Zm
c2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKK2Z1bmN0aW9uIGZvbyhvKSB7
CisgICAgcmV0dXJuIG8uZjsKK30KKworZnVuY3Rpb24gZnUobykgeworICAgIHJldHVybiBvLmU7
Cit9CisKK2Z1bmN0aW9uIGJhcihmLCBvKSB7CisgICAgcmV0dXJuIGYobyk7Cit9CisKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7CisgICAgdmFyIG8gPSB7ZjoxfTsKKyAgICBvWyJp
IiArIGldID0gNDI7CisgICAgZm9vKG8pOworICAgIGZ1KHtmOjEsIGU6Mn0pOworICAgIGZ1KHtl
OjEsIGY6Mn0pOworfQorICAgIAorZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAg
IGJhcihmb28sIHtmOjF9KTsKKyAgICBiYXIoZnVuY3Rpb24oKSB7IH0sIG51bGwpOworICAgIGJh
cihmdW5jdGlvbigpIHsgcmV0dXJuIDQyIH0sIG51bGwpOworfQorCitOdW1iZXIucHJvdG90eXBl
LmYgPSAxMDA7CisgICAgCisoZnVuY3Rpb24oZiwgbywgcCkgeworICAgIHZhciByZXN1bHQgPSAw
OworICAgIHZhciBuID0gMTAwMDAwMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkg
eworICAgICAgICByZXN1bHQgKz0gZnUobyk7CisgICAgICAgIHJlc3VsdCArPSBiYXIoZiwgbyk7
CisgICAgICAgIHZhciB0bXAgPSBvOworICAgICAgICBvID0gcDsKKyAgICAgICAgcCA9IHRtcDsK
KyAgICB9CisgICAgaWYgKHJlc3VsdCAhPSAoby5mICsgby5lICsgcC5mICsgcC5lKSAqIG4gLyAy
KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9KShmb28s
IHtmOjQyLCBlOjQzfSwge2U6NDQsIGY6NDV9KTsKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9zY3JpcHQtdGVzdHMvZm9sZC1wdXQtYnktaWQtdG8tbXVsdGktcHV0LWJ5LW9mZnNldC5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mb2xk
LXB1dC1ieS1pZC10by1tdWx0aS1wdXQtYnktb2Zmc2V0LmpzCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZm9sZC1wdXQtYnktaWQtdG8tbXVsdGkt
cHV0LWJ5LW9mZnNldC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACitmdW5jdGlv
biBmb28obykgeworICAgIG8uZiA9IDE7Cit9CisKK2Z1bmN0aW9uIGZ1KG8pIHsKKyAgICBvLmUg
PSAyOworfQorCitmdW5jdGlvbiBiYXIoZiwgbykgeworICAgIGYobyk7Cit9CisKK2ZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7CisgICAgdmFyIG8gPSB7fTsKKyAgICBvWyJpIiArIGld
ID0gNDI7CisgICAgZm9vKG8pOworICAgIGZ1KHtmOjEsIGU6Mn0pOworICAgIGZ1KHtlOjEsIGY6
MiwgZzozfSk7Cit9CisgICAgCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAg
YmFyKGZvbywge2Y6MX0pOworICAgIGJhcihmdW5jdGlvbigpIHsgfSwgbnVsbCk7CisgICAgYmFy
KGZ1bmN0aW9uKCkgeyByZXR1cm4gNDIgfSwgbnVsbCk7Cit9CisgICAgCisoZnVuY3Rpb24oZiwg
bywgcCkgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIHZhciBuID0gMTAwMDAwMDsKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICBmdShvKTsKKyAgICAgICAgYmFy
KGYsIG8pOworICAgICAgICB2YXIgdG1wID0gbzsKKyAgICAgICAgbyA9IHA7CisgICAgICAgIHAg
PSB0bXA7CisgICAgfQorICAgIGlmIChvLmUgIT0gMikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBi
YWQgdmFsdWUgaW4gby5lOiAiICsgby5lOworICAgIGlmIChvLmYgIT0gMSkKKyAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgdmFsdWUgaW4gby5mOiAiICsgby5mOworICAgIGlmIChwLmUgIT0gMikK
KyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgaW4gcC5lOiAiICsgcC5lOworICAgIGlm
IChwLmYgIT0gMSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgaW4gcC5mOiAiICsg
cC5mOworfSkoZm9vLCB7Zjo0MiwgZToyM30sIHtlOjIzLCBmOjQyLCBnOjEwMH0pOworCg==
</data>
<flag name="review"
          id="258036"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>