<?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>74136</bug_id>
          
          <creation_ts>2011-12-08 16:04:46 -0800</creation_ts>
          <short_desc>Avoid reloading storage pointer for indexed properties unnecessarily</short_desc>
          <delta_ts>2011-12-09 00:46:09 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>517871</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-12-08 16:04:46 -0800</bug_when>
    <thetext>Avoid reloading storage pointer for indexed properties unnecessarily</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517882</commentid>
    <comment_count>1</comment_count>
      <attachid>118485</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-12-08 16:14:41 -0800</bug_when>
    <thetext>Created attachment 118485
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517889</commentid>
    <comment_count>2</comment_count>
      <attachid>118485</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-12-08 16:21:54 -0800</bug_when>
    <thetext>Comment on attachment 118485
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGPropagator.cpp:1257
&gt; +                if (byValIsPure(node))

I think this is wrong. ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517897</commentid>
    <comment_count>3</comment_count>
      <attachid>118486</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-12-08 16:29:16 -0800</bug_when>
    <thetext>Created attachment 118486
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518162</commentid>
    <comment_count>4</comment_count>
      <attachid>118486</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-09 00:46:05 -0800</bug_when>
    <thetext>Comment on attachment 118486
Patch

Clearing flags on attachment: 118486

Committed r102442: &lt;http://trac.webkit.org/changeset/102442&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518163</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-09 00:46:09 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118485</attachid>
            <date>2011-12-08 16:14:41 -0800</date>
            <delta_ts>2011-12-08 16:29:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74136-20111208161440.patch</filename>
            <type>text/plain</type>
            <size>41241</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMzkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
YjkxNmQ2MTg3YzE1YzY5YjZkZGQxODBlY2I2ZjI1Mzg5NjA5NzAyLi5lMzRiNDFlODhlMWUzZTY1
MDkwYmM4ZDUzZjBlMzZiMWRjMWMzMjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAxMS0xMi0wOCAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIEF2b2lkIHJlbG9hZGluZyBzdG9yYWdlIHBvaW50ZXIgZm9yIGluZGV4ZWQgcHJv
cGVydGllcyB1bm5lY2Vzc2FyaWx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03NDEzNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBhIG5vZGUgdG8gcmVwcmVzZW50IGxvYWRpbmcgcHJvcGVydHkgc3Rv
cmFnZSBmb3IgaW5kZXhlZCBwcm9wZXJ0aWVzLgorICAgICAgICBUaGlzIGFsbG93cyB1cyB0byBy
ZWR1Y2UgY29kZSBnZW5lcmF0ZWQgZm9yIHNlcXVlbnRpYWwgYWNjZXNzIG9mIGFycmF5cywKKyAg
ICAgICAgc3RyaW5ncywgZXRjLiAgVGhpcyByZXN1bHRzIGluIHVwIHRvIDUlIGltcHJvdmVtZW50
IGluIGNvZGUgdGhhdCBpcyAKKyAgICAgICAgdmVyeSBoZWF2eSBvbiBpbmRleGVkIHJlYWRzLCBz
dWNoIGFzIG1hdHJpeCBvcGVyYXRpb25zIGluIHR5cGVkIGFycmF5cworICAgICAgICBhbmQgMjAl
IGZhc3RlciBvbiBtaWNyb2JlbmNobWFya3MuCisKKyAgICAgICAgQ3VycmVudGx5IHRoaXMgaXMg
b25seSBzdXBwb3J0ZWQgYnkgR2V0QnlWYWwgYW5kIG90aGVyIHNpbWlsYXIgaW5kZXhlZCByZWFk
cy4KKworICAgICAgICAqIGJ5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaDoKKyAgICAgICAgKEpTQzo6
aXNGaXhlZEluZGV4ZWRTdG9yYWdlT2JqZWN0UHJlZGljdGlvbik6CisgICAgICAgICogZGZnL0RG
R0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdOb2Rl
Lmg6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGVQcmVkaWN0aW9ucyk6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvcGFnYXRvcjo6Zml4dXBOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9y
OjpnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpQcm9wYWdhdG9yOjpwZXJmb3JtTm9kZUNTRSk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldENoYXJDb2RlQXQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRCeVZhbE9uQnl0ZUFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFBy
b3BlcnR5U3RvcmFnZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
CiAyMDExLTEyLTA4ICBUaG91cmF5YSBBTkRPTFNJICA8dGhvdXJheWEuYW5kb2xzaUBzdC5jb20+
CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MDA1
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlw
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaAppbmRl
eCA1NzIwMzk4ZGI0MTVhOWIwYWJkNGRmNzdkYmM1MDdmMzQxMDNmOWRiLi5mNDFmMzM2NzIyY2Ux
MTQwYTk1OWY1NjQ0YjU5NDkzYTY0OWI3NTg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmgKQEAgLTYwLDYgKzYwLDcgQEAgc3RhdGljIGNvbnN0
IFByZWRpY3RlZFR5cGUgUHJlZGljdE51bWJlciAgICAgICAgPSAweDAwMDE4MDAwOyAvLyBJdCdz
IGVpdGhlciBhbgogc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdEJvb2xlYW4gICAg
ICAgPSAweDAwMDIwMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBCb29sZWFuLgogc3RhdGljIGNv
bnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdE90aGVyICAgICAgICAgPSAweDQwMDAwMDAwOyAvLyBJ
dCdzIGRlZmluaXRlbHkgbm9uZSBvZiB0aGUgYWJvdmUuCiBzdGF0aWMgY29uc3QgUHJlZGljdGVk
VHlwZSBQcmVkaWN0VG9wICAgICAgICAgICA9IDB4N2ZmZmZmZmY7IC8vIEl0IGNhbiBiZSBhbnkg
b2YgdGhlIGFib3ZlLgorc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgRml4ZWRJbmRleGVkU3Rv
cmFnZU1hc2sgPSBQcmVkaWN0Qnl0ZUFycmF5IHwgUHJlZGljdEludDhBcnJheSB8IFByZWRpY3RJ
bnQxNkFycmF5IHwgUHJlZGljdEludDMyQXJyYXkgfCBQcmVkaWN0VWludDhBcnJheSB8IFByZWRp
Y3RVaW50MTZBcnJheSB8IFByZWRpY3RVaW50MzJBcnJheSB8IFByZWRpY3RGbG9hdDMyQXJyYXkg
fCBQcmVkaWN0RmxvYXQ2NEFycmF5OwogCiB0eXBlZGVmIGJvb2wgKCpQcmVkaWN0aW9uQ2hlY2tl
cikoUHJlZGljdGVkVHlwZSk7CiAKQEAgLTgzLDYgKzg0LDExIEBAIGlubGluZSBib29sIGlzRmlu
YWxPYmplY3RPck90aGVyUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZhbHVlKQogICAgIHJldHVy
biAhISh2YWx1ZSAmIChQcmVkaWN0RmluYWxPYmplY3QgfCBQcmVkaWN0T3RoZXIpKSAmJiAhKHZh
bHVlICYgfihQcmVkaWN0RmluYWxPYmplY3QgfCBQcmVkaWN0T3RoZXIpKTsKIH0KIAoraW5saW5l
IGJvb2wgaXNGaXhlZEluZGV4ZWRTdG9yYWdlT2JqZWN0UHJlZGljdGlvbihQcmVkaWN0ZWRUeXBl
IHZhbHVlKQoreworICAgIHJldHVybiAodmFsdWUgJiBGaXhlZEluZGV4ZWRTdG9yYWdlTWFzaykg
PT0gdmFsdWU7Cit9CisKIGlubGluZSBib29sIGlzU3RyaW5nUHJlZGljdGlvbihQcmVkaWN0ZWRU
eXBlIHZhbHVlKQogewogICAgIHJldHVybiB2YWx1ZSA9PSBQcmVkaWN0U3RyaW5nOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKaW5kZXggMzczYTBl
MGNiNDY4NWIwMGE1MjE3NDIxY2NiOThjODU0Y2NjZjc2NS4uYjA2YTI3Yzk1NGQ0ZTFiMDcyZWY0
NWU4ODU3ZTE1NDJhYTBjNzY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0U3RhdGUuY3BwCkBAIC03NTgsMTIgKzc1OCw3MSBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5zZXQobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7
CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIAogICAgIGNhc2UgR2V0UHJvcGVydHlTdG9yYWdlOgogICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Q2VsbCk7CiAgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIAorICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTog
eworICAgICAgICBQcmVkaWN0ZWRUeXBlIGJhc2VQcmVkaWN0aW9uID0gbV9ncmFwaFtub2RlLmNo
aWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgIGlmICghKGJhc2VQcmVkaWN0aW9uICYgUHJl
ZGljdEludDMyKSAmJiBiYXNlUHJlZGljdGlvbikgeworICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLmNsZWFyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBp
ZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkgPT0gUHJlZGljdFN0cmluZykg
eworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdFN0cmlu
Zyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNo
b3VsZFNwZWN1bGF0ZUJ5dGVBcnJheSgpKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihQcmVkaWN0Qnl0ZUFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5jbGVhcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludDhB
cnJheSgpKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVk
aWN0SW50OEFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgpKSB7CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MTZBcnJheSk7CisgICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUlu
dDMyQXJyYXkoKSkgeworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
UHJlZGljdEludDMyQXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFy
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50OEFycmF5KCkpIHsKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RVaW50OEFycmF5KTsKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3Vs
YXRlVWludDE2QXJyYXkoKSkgeworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5m
aWx0ZXIoUHJlZGljdFVpbnQxNkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoUHJlZGljdE90aGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQzMkFycmF5
KCkpIHsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RV
aW50MzJBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hp
bGQxKCldLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpKSB7CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0RmxvYXQzMkFycmF5KTsKKyAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRl
RmxvYXQ2NEFycmF5KCkpIHsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFByZWRpY3RGbG9hdDY0QXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
LmNsZWFyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkpOworICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuY2xlYXIoKTsKKyAgICAgICAgYnJlYWs7IAorICAgIH0KICAgICBjYXNlIEdldEJ5
T2Zmc2V0OgogICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Q2Vs
bCk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDQ3Mjg3ZmIzMzNi
YTkzNjVlMTMxOTE3OGY2MWVkYWIxYzhlODQzYTYuLmU4ZDgwZTBiMWRhZjZhMTk1Yjc4ODc3MzNk
NGRhZWJhNzQxMjBlM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCkBAIC0xMjA3LDggKzEyMDcsMTEgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlSW50cmluc2ljKGJvb2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIElu
dHJpbnMKICAgICBjYXNlIENoYXJDb2RlQXRJbnRyaW5zaWM6IHsKICAgICAgICAgaWYgKGZpcnN0
QXJnICsgMSAhPSBsYXN0QXJnKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
IE5vZGVJbmRleCBjaGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5nQ2hhckNvZGVBdCwgZ2V0KGZp
cnN0QXJnKSwgZ2V0VG9JbnQzMihmaXJzdEFyZyArIDEpKTsKKyAgICAgICAgaWYgKCEobV9ncmFw
aFtnZXQoZmlyc3RBcmcpXS5wcmVkaWN0aW9uKCkgJiBQcmVkaWN0U3RyaW5nKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0g
YWRkVG9HcmFwaChHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBnZXQoZmlyc3RBcmcpLCBnZXRU
b0ludDMyKGZpcnN0QXJnICsgMSkpOworICAgICAgICBOb2RlSW5kZXggY2hhckNvZGUgPSBhZGRU
b0dyYXBoKFN0cmluZ0NoYXJDb2RlQXQsIGdldChmaXJzdEFyZyksIGdldFRvSW50MzIoZmlyc3RB
cmcgKyAxKSwgc3RvcmFnZSk7CiAgICAgICAgIGlmICh1c2VzUmVzdWx0KQogICAgICAgICAgICAg
c2V0KHJlc3VsdE9wZXJhbmQsIGNoYXJDb2RlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0x
MjE3LDggKzEyMjAsMTEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJv
b2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIEludHJpbnMKICAgICBjYXNlIENoYXJB
dEludHJpbnNpYzogewogICAgICAgICBpZiAoZmlyc3RBcmcgKyAxICE9IGxhc3RBcmcpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBOb2RlSW5kZXggY2hhckNv
ZGUgPSBhZGRUb0dyYXBoKFN0cmluZ0NoYXJBdCwgZ2V0KGZpcnN0QXJnKSwgZ2V0VG9JbnQzMihm
aXJzdEFyZyArIDEpKTsKKyAgICAgICAgaWYgKCEobV9ncmFwaFtnZXQoZmlyc3RBcmcpXS5wcmVk
aWN0aW9uKCkgJiBQcmVkaWN0U3RyaW5nKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZSwgZ2V0KGZpcnN0QXJnKSwgZ2V0VG9JbnQzMihmaXJzdEFyZyArIDEpKTsKKyAgICAg
ICAgTm9kZUluZGV4IGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQXQsIGdldChmaXJz
dEFyZyksIGdldFRvSW50MzIoZmlyc3RBcmcgKyAxKSwgc3RvcmFnZSk7CiAgICAgICAgIGlmICh1
c2VzUmVzdWx0KQogICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGNoYXJDb2RlKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNjExLDggKzE2MTcsOCBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsK
ICAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kKTsKLQotICAgICAgICAgICAgTm9kZUluZGV4IGdldEJ5VmFsID0gYWRkVG9H
cmFwaChHZXRCeVZhbCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2UsIHByb3Bl
cnR5KTsKKyAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBo
KEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2UsIHByb3BlcnR5KTsKKyAgICAgICAgICAg
IE5vZGVJbmRleCBnZXRCeVZhbCA9IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbygwKSwgT3BJ
bmZvKHByZWRpY3Rpb24pLCBiYXNlLCBwcm9wZXJ0eSwgcHJvcGVydHlTdG9yYWdlKTsKICAgICAg
ICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBnZXRCeVZhbCk7CiAK
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9ieV92YWwpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAppbmRleCBhODI3OTgzODRkZDNhNDlhMTRkZDdjYjMwZDY2ZTFlZDg1Yzlj
NmVlLi4xMDQ1YmRjODgzZmEyNjZhOTAzYTI1OGFmNjVkMzhlYzdhYzViZGNmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtMjMzLDYgKzIzMyw3IEBAIHN0YXRpYyBpbmxpbmUg
Y29uc3QgY2hhciogYXJpdGhOb2RlRmxhZ3NBc1N0cmluZyhBcml0aE5vZGVGbGFncyBmbGFncykK
ICAgICBtYWNybyhDaGVja1N0cnVjdHVyZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3Jv
KFB1dFN0cnVjdHVyZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAg
ICAgbWFjcm8oR2V0UHJvcGVydHlTdG9yYWdlLCBOb2RlUmVzdWx0U3RvcmFnZSkgXAorICAgIG1h
Y3JvKEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVz
dWx0U3RvcmFnZSkgXAogICAgIG1hY3JvKEdldEJ5T2Zmc2V0LCBOb2RlUmVzdWx0SlMpIFwKICAg
ICBtYWNybyhQdXRCeU9mZnNldCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxk
KSBcCiAgICAgbWFjcm8oR2V0QXJyYXlMZW5ndGgsIE5vZGVSZXN1bHRJbnQzMikgXApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAKaW5kZXggODdiMjcxNTk4Mzlh
N2E4OWEyMThmYzAyMzYzN2M0N2JhNzQ4NDI4NS4uOTg4YTU2OWFhNjU2YzZjNzVmM2JmMDIyMTg5
NDQ5YzM2ZjJjM2I3OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cm9wYWdhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0
b3IuY3BwCkBAIC00NzIsMTEgKzQ3MiwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFn
ZTogeworICAgICAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFnZTogCisgICAgICAgIGNhc2UgR2V0
SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVk
aWN0aW9uKFByZWRpY3RPdGhlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAg
ICAgICAgICAgCisKICAgICAgICAgY2FzZSBHZXRCeU9mZnNldDogewogICAgICAgICAgICAgaWYg
KG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSkKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOwpAQCAtODA5LDcgKzgxMCwy
MyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdl
dEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgYmFz
ZVByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAg
ICAgICAgIGlmICghKGJhc2VQcmVkaWN0aW9uICYgUHJlZGljdEludDMyKSAmJiBiYXNlUHJlZGlj
dGlvbikgeworICAgICAgICAgICAgICAgIG5vZGUub3AgPSBQaGFudG9tOworICAgICAgICAgICAg
ICAgIG5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQxID0gTm9Ob2RlOworICAgICAgICAgICAgICAg
IG5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQyID0gTm9Ob2RlOworICAgICAgICAgICAgICAgIG5v
ZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQzID0gTm9Ob2RlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAg
Y2FzZSBTdHJpbmdDaGFyQXQ6CisgICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDogeworICAg
ICAgICAgICAgaWYgKG5vZGUuY2hpbGQzKCkgIT0gTm9Ob2RlICYmIG1fZ3JhcGhbbm9kZS5jaGls
ZDMoKV0ub3AgPT0gUGhhbnRvbSkKKyAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLmZpeGVk
LmNoaWxkMyA9IE5vTm9kZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTIxNCw2ICsxMjMx
LDQxIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICB9
CisKKyAgICBOb2RlSW5kZXggZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlv
bihOb2RlSW5kZXggY2hpbGQxLCBib29sIGhhc0ludGVnZXJJbmRleFByZWRpY3Rpb24pCisgICAg
eworICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBzdGFydEluZGV4Rm9yQ2hpbGRyZW4oY2hpbGQx
KTsKKyAgICAgICAgZm9yIChOb2RlSW5kZXggaW5kZXggPSBtX2NvbXBpbGVJbmRleDsgaW5kZXgt
LSA+IHN0YXJ0OykgeworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwor
ICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAgICAgICAgICBjYXNlIEdldEluZGV4
ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIGJhc2VQ
cmVkaWN0aW9uID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAg
ICAgICAgICAgYm9vbCBub2RlSGFzSW50ZWdlckluZGV4UHJlZGljdGlvbiA9ICEoIShiYXNlUHJl
ZGljdGlvbiAmIFByZWRpY3RJbnQzMikgJiYgYmFzZVByZWRpY3Rpb24pOworICAgICAgICAgICAg
ICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSAmJiBoYXNJbnRlZ2VySW5kZXhQcmVkaWN0
aW9uID09IG5vZGVIYXNJbnRlZ2VySW5kZXhQcmVkaWN0aW9uKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6CisgICAgICAgICAgICBjYXNlIFB1dFN0cnVj
dHVyZToKKyAgICAgICAgICAgICAgICAvLyBDaGFuZ2luZyB0aGUgc3RydWN0dXJlIG9yIHB1dHRp
bmcgdG8gdGhlIHN0b3JhZ2UgY2Fubm90CisgICAgICAgICAgICAgICAgLy8gY2hhbmdlIHRoZSBw
cm9wZXJ0eSBzdG9yYWdlIHBvaW50ZXIuCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Cisg
ICAgICAgICAgICAgICAgaWYgKGJ5VmFsSXNQdXJlKG5vZGUpKQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworCisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgIH0KICAg
ICAKICAgICBOb2RlSW5kZXggZ2V0U2NvcGVDaGFpbkxvYWRFbGltaW5hdGlvbih1bnNpZ25lZCBk
ZXB0aCkKICAgICB7CkBAIC0xNDAzLDExICsxNDU1LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBpZiAoY2hlY2tGdW5jdGlvbkVsaW1pbmF0aW9uKG5vZGUuZnVuY3Rpb24oKSwgbm9kZS5jaGls
ZDEoKSkpCiAgICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7CiAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdl
OiB7CisgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIGJhc2VQcmVkaWN0aW9uID0gbV9ncmFwaFtu
b2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBib29sIG5vZGVIYXNJbnRl
Z2VySW5kZXhQcmVkaWN0aW9uID0gISghKGJhc2VQcmVkaWN0aW9uICYgUHJlZGljdEludDMyKSAm
JiBiYXNlUHJlZGljdGlvbik7CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRJbmRleGVk
UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCksIG5vZGVIYXNJbnRl
Z2VySW5kZXhQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogCiAg
ICAgICAgIGNhc2UgR2V0UHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgc2V0UmVwbGFjZW1l
bnQoZ2V0UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkpKTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCisKICAgICAgICAgY2FzZSBHZXRCeU9mZnNl
dDoKICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9u
KG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgo
KV0uaWRlbnRpZmllck51bWJlciwgbm9kZS5jaGlsZDEoKSkpOwogICAgICAgICAgICAgYnJlYWs7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmlu
ZGV4IGY4NjQ4YzBkMDhjOGNkYWI3OTM5ZGIyMDc5YzhjZGQzMTgyYWY5OTAuLjUxYTY0Y2FlNjNh
YTE4ZjI4NDJlYjE4ZjY2NTQ4YzBkY2E4ZDZlMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC0xMzQ1LDEyICsxMzQ1LDE4IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRDaGFyQ29kZUF0KE5vZGUmIG5vZGUpCiAgICAg
QVNTRVJUKG5vZGUuY2hpbGQzKCkgPT0gTm9Ob2RlKTsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBzdHJpbmcodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJP
cGVyYW5kIGluZGV4KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgIFN0b3JhZ2VPcGVyYW5kIHN0
b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAKICAgICBHUFJSZWcgc3RyaW5nUmVnID0gc3Ry
aW5nLmdwcigpOwogICAgIEdQUlJlZyBpbmRleFJlZyA9IGluZGV4LmdwcigpOwotCi0gICAgaWYg
KCFpc1N0cmluZ1ByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlw
ZSkpCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwo
c3RyaW5nUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RyaW5nUmVnKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7
CisgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgIAorICAgIGlmICgh
aXNTdHJpbmdQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUp
KSB7CisgICAgICAgIEFTU0VSVCghKGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKSAmIFBy
ZWRpY3RTdHJpbmcpKTsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgLy8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3
ZSBjYW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRv
byBsYXJnZQogICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRleFJlZywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RyaW5nUmVnLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSkp
KTsKQEAgLTEzNjAsMjAgKzEzNjYsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dENoYXJDb2RlQXQoTm9kZSYgbm9kZSkKIAogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RyaW5nUmVnLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgc2NyYXRj
aFJlZyk7CiAKLSAgICAvLyBTcGVjdWxhdGUgdGhhdCB3ZSdyZSBub3QgYWNjZXNzaW5nIGEgcm9w
ZQotICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hSZWcpKTsKLQogICAgIC8vIExv
YWQgdGhlIGNoYXJhY3RlciBpbnRvIHNjcmF0Y2hSZWcKICAgICBKSVRDb21waWxlcjo6SnVtcCBp
czE2Qml0ID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoUmVnLCBTdHJpbmdJbXBsOjpmbGFnc09mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkpOwogCi0gICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoUmVnLCBTdHJpbmdJbXBsOjpkYXRh
T2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKLSAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHNjcmF0Y2hSZWcsIGluZGV4UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUs
IDApLCBzY3JhdGNoUmVnKTsKKyAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VSZWcsIGluZGV4UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUsIDApLCBz
Y3JhdGNoUmVnKTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBjb250OEJpdCA9IG1faml0Lmp1bXAo
KTsKIAogICAgIGlzMTZCaXQubGluaygmbV9qaXQpOwogCi0gICAgbV9qaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoUmVnLCBTdHJpbmdJbXBsOjpkYXRhT2Zmc2V0KCkp
LCBzY3JhdGNoUmVnKTsKLSAgICBtX2ppdC5sb2FkMTYoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzY3JhdGNoUmVnLCBpbmRleFJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzVHdvLCAwKSwgc2Ny
YXRjaFJlZyk7CisgICAgbV9qaXQubG9hZDE2KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgaW5kZXhSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc1R3bywgMCksIHNjcmF0Y2hS
ZWcpOwogCiAgICAgY29udDhCaXQubGluaygmbV9qaXQpOwogCkBAIC0xMzgyLDE1ICsxMzgzLDE5
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRDaGFyQ29kZUF0KE5vZGUmIG5vZGUp
CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUmIG5v
ZGUpCiB7Ci0gICAgQVNTRVJUKG5vZGUuY2hpbGQzKCkgPT0gTm9Ob2RlKTsKICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0
cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKLQorICAgIFN0
b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAgICAgR1BSUmVnIGJh
c2VSZWcgPSBiYXNlLmdwcigpOwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdw
cigpOworICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAotICAgIGlmICgh
aXNTdHJpbmdQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUp
KQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJh
c2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CisgICAg
aWYgKCFpc1N0cmluZ1ByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1f
dHlwZSkpIHsKKyAgICAgICAgQVNTRVJUKCEoYXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigp
ICYgUHJlZGljdFN0cmluZykpOworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlv
bihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICAvLyB1bnNpZ25lZCBjb21wYXJpc29u
IHNvIHdlIGNhbiBmaWx0ZXIgb3V0IG5lZ2F0aXZlIGluZGljZXMgYW5kIGluZGljZXMgdGhhdCBh
cmUgdG9vIGxhcmdlCiAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUs
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5n
dGgoKSkpKTsKQEAgLTE0MDAsMjAgKzE0MDUsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSYgbm9kZSkKIAogICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSks
IHNjcmF0Y2hSZWcpOwogCi0gICAgLy8gU3BlY3VsYXRlIHRoYXQgd2UncmUgbm90IGFjY2Vzc2lu
ZyBhIHJvcGUKLSAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9q
aXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoUmVnKSk7Ci0KICAg
ICAvLyBMb2FkIHRoZSBjaGFyYWN0ZXIgaW50byBzY3JhdGNoUmVnCiAgICAgSklUQ29tcGlsZXI6
Okp1bXAgaXMxNkJpdCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaFJlZywgU3RyaW5nSW1wbDo6ZmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdJbXBsOjpmbGFnSXM4Qml0KCkpKTsKIAotICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaFJlZywgU3RyaW5nSW1w
bDo6ZGF0YU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7Ci0gICAgbV9qaXQubG9hZDgoTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzY3JhdGNoUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzT25lLCAwKSwgc2NyYXRjaFJlZyk7CisgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzT25lLCAwKSwgc2NyYXRjaFJlZyk7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgY29udDhCaXQg
PSBtX2ppdC5qdW1wKCk7CiAKICAgICBpczE2Qml0LmxpbmsoJm1faml0KTsKIAotICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaFJlZywgU3RyaW5nSW1wbDo6
ZGF0YU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7Ci0gICAgbV9qaXQubG9hZDE2KE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc2NyYXRjaFJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc1R3bywgMCksIHNjcmF0Y2hSZWcpOworICAgIG1faml0LmxvYWQxNihNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNUd28sIDApLCBzY3JhdGNoUmVnKTsKIAogICAgIC8vIFdlIG9ubHkgc3VwcG9ydCBhc2NpaSBj
aGFyYWN0ZXJzCiAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNjcmF0Y2hSZWcsIFRy
dXN0ZWRJbW0zMigweDEwMCkpKTsKQEAgLTE1NTUsMTUgKzE1NTUsMTcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yQnl0ZUFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcg
cHJvcGVydHksIE4KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25CeXRl
QXJyYXkoTm9kZSYgbm9kZSkKIHsKLSAgICBBU1NFUlQobm9kZS5jaGlsZDMoKSA9PSBOb05vZGUp
OwogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQy
KCkpOwotICAgIAorCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgIAotICAgIGlmICghaXNCeXRlQXJy
YXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcp
LCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQdHIpKSk7CisKKyAgICBp
ZiAoIWlzQnl0ZUFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV90eXBlKSkgeworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVl
UmVncygpLCBOb05vZGUpOworICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKICAgICAvLyBMb2FkIHRoZSBjaGFyYWN0ZXIgaW50byBzY3Jh
dGNoUmVnCiAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CkBAIC0xNTk1LDQ4ICsxNTk3
LDUxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRUeXBlZEFycmF5TGVuZ3RoKGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvciwgTm9kZSYgbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U3Bl
Y3VsYXRpb25SZXF1aXJlbWVudHMgc3BlY3VsYXRpb25SZXF1aXJlbWVudHMsIFR5cGVkQXJyYXlT
aWduZWRuZXNzIHNpZ25lZG5lc3MpCiB7Ci0gICAgQVNTRVJUKG5vZGUuY2hpbGQzKCkgPT0gTm9O
b2RlKTsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNo
aWxkMigpKTsKKyAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkp
OworCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIEdQUlJlZyBwcm9wZXJ0
eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAKLSAgICBpZiAoc3BlY3VsYXRpb25SZXF1
aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjaykKLSAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEo
KSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2Ny
aXB0b3IubV92cHRyKSkpOwotICAgIAotICAgIC8vIExvYWQgdGhlIGNoYXJhY3RlciBpbnRvIHNj
cmF0Y2hSZWcKLSAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKICAgICBHUFJSZWcgc3Rv
cmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VS
ZWcpOwotICAgIAotICAgIEFTU0VSVChzcGVjdWxhdGlvblJlcXVpcmVtZW50cyAhPSBOb1R5cGVk
QXJyYXlTcGVjQ2hlY2spOworCisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICBH
UFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOworCisgICAgaWYgKHNwZWN1bGF0aW9uUmVx
dWlyZW1lbnRzICE9IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2spIHsKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpT
VmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGluQm91
bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNl
dCkpOwotICAgIG1faml0LnhvclB0cihzdG9yYWdlUmVnLCBzdG9yYWdlUmVnKTsKKyAgICBtX2pp
dC54b3JQdHIocmVzdWx0UmVnLCByZXN1bHRSZWcpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IG91dE9mQm91bmRzID0gbV9qaXQuanVtcCgpOwogICAgIGluQm91bmRzLmxpbmsoJm1faml0KTsK
ICAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CiAgICAgY2FzZSAxOgotICAgICAgICBtX2ppdC5s
b2FkOChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUpLCBzdG9yYWdlUmVnKTsKKyAgICAgICAgbV9qaXQubG9h
ZDgoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzT25lKSwgcmVzdWx0UmVnKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSAyOgotICAgICAgICBtX2ppdC5sb2FkMTYoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzVHdvKSwgc3RvcmFn
ZVJlZyk7CisgICAgICAgIG1faml0LmxvYWQxNihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNUd28pLCByZXN1bHRS
ZWcpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDQ6Ci0gICAgICAgIG1faml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNGb3VyKSwgc3RvcmFnZVJlZyk7CisgICAgICAgIG1faml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNGb3VyKSwgcmVzdWx0UmVnKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVm
YXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIG91dE9mQm91
bmRzLmxpbmsoJm1faml0KTsKICAgICBpZiAoZWxlbWVudFNpemUgPCA0IHx8IHNpZ25lZG5lc3Mg
PT0gU2lnbmVkVHlwZWRBcnJheSkKLSAgICAgICAgaW50ZWdlclJlc3VsdChzdG9yYWdlUmVnLCBt
X2NvbXBpbGVJbmRleCk7CisgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBp
bGVJbmRleCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
Ci0gICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHN0b3JhZ2VSZWcsIHJlc3VsdC5m
cHIoKSk7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHBvc2l0aXZlID0gbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgc3RvcmFnZVJlZywgVHJ1c3Rl
ZEltbTMyKDApKTsKLSAgICAgICAgbV9qaXQuYWRkRG91YmxlKEpJVENvbXBpbGVyOjpBYnNvbHV0
ZUFkZHJlc3MoJnR3b1RvVGhlMzIpLCByZXN1bHQuZnByKCkpOworICAgICAgICBGUFJUZW1wb3Jh
cnkgZnJlc3VsdCh0aGlzKTsKKyAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUocmVz
dWx0UmVnLCBmcmVzdWx0LmZwcigpKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgcG9zaXRp
dmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsLCBy
ZXN1bHRSZWcsIFRydXN0ZWRJbW0zMigwKSk7CisgICAgICAgIG1faml0LmFkZERvdWJsZShKSVRD
b21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKCZ0d29Ub1RoZTMyKSwgZnJlc3VsdC5mcHIoKSk7CiAg
ICAgICAgIHBvc2l0aXZlLmxpbmsoJm1faml0KTsKLSAgICAgICAgZG91YmxlUmVzdWx0KHJlc3Vs
dC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBkb3VibGVSZXN1bHQoZnJlc3VsdC5m
cHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgIH0KIH0KIApAQCAtMTcxOCwyNiArMTcyMywyNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvciwgTm9kZSYgbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U3BlY3Vs
YXRpb25SZXF1aXJlbWVudHMgc3BlY3VsYXRpb25SZXF1aXJlbWVudHMpCiB7Ci0gICAgQVNTRVJU
KG5vZGUuY2hpbGQzKCkgPT0gTm9Ob2RlKTsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBw
cm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdl
KHRoaXMsIG5vZGUuY2hpbGQzKCkpOworCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigp
OwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgIAotICAgIGlm
IChzcGVjdWxhdGlvblJlcXVpcmVtZW50cyAhPSBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrKQot
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VS
ZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7Ci0gICAgCi0gICAgLy8gTG9hZCB0aGUg
Y2hhcmFjdGVyIGludG8gc2NyYXRjaFJlZwotICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMp
OwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9zdG9yYWdl
T2Zmc2V0KSwgc3RvcmFnZVJlZyk7CisgICAgCisgICAgaWYgKHNwZWN1bGF0aW9uUmVxdWlyZW1l
bnRzICE9IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2spIHsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSk7CisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKwogICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAg
RlBSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5mcHIoKTsKICAgICBBU1NFUlQoc3BlY3VsYXRpb25S
ZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5U3BlY0NoZWNrKTsKLSAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaCh0aGlzKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpbkJvdW5kcyA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKTsKLSAgICBt
X2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMigwKSwgc2NyYXRjaC5ncHIoKSk7Ci0gICAg
bV9qaXQuY29udmVydEludDMyVG9Eb3VibGUoc2NyYXRjaC5ncHIoKSwgcmVzdWx0UmVnKTsKKyAg
ICBzdGF0aWMgY29uc3QgZG91YmxlIHplcm8gPSAwOworICAgIG1faml0LmxvYWREb3VibGUoJnpl
cm8sIHJlc3VsdFJlZyk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHMgPSBt
X2ppdC5qdW1wKCk7CiAgICAgaW5Cb3VuZHMubGluaygmbV9qaXQpOwogICAgIHN3aXRjaCAoZWxl
bWVudFNpemUpIHsKQEAgLTIzNjQsNiArMjM3MCw4MyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlU3RyaWN0RXEoTm9kZSYgbm9kZSkKICAgICByZXR1cm4gbm9uU3BlY3VsYXRpdmVTdHJp
Y3RFcShub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQ
cm9wZXJ0eVN0b3JhZ2UoTm9kZSYgbm9kZSkKK3sKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIo
KTsKKyAgICAKKyAgICBQcmVkaWN0ZWRUeXBlIGJhc2VQcmVkaWN0aW9uID0gYXQobm9kZS5jaGls
ZDIoKSkucHJlZGljdGlvbigpOworICAgIGlmICghKGJhc2VQcmVkaWN0aW9uICYgUHJlZGljdElu
dDMyKSAmJiBiYXNlUHJlZGljdGlvbikgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlKTsKKyAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOworICAgIEdQUlJl
ZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSku
cHJlZGljdGlvbigpID09IFByZWRpY3RTdHJpbmcpIHsKKyAgICAgICAgaWYgKCFpc1N0cmluZ1By
ZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCisgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcp
LCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CisKKyAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU1N0cmluZzo6
b2Zmc2V0T2ZWYWx1ZSgpKSwgc3RvcmFnZVJlZyk7CisgICAgICAgIAorICAgICAgICAvLyBTcGVj
dWxhdGUgdGhhdCB3ZSdyZSBub3QgYWNjZXNzaW5nIGEgcm9wZQorICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCBzdG9yYWdlUmVnKSk7CisKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBTdHJpbmdJbXBsOjpkYXRhT2Zmc2V0KCkp
LCBzdG9yYWdlUmVnKTsKKyAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNw
ZWN1bGF0ZUJ5dGVBcnJheSgpKSB7CisgICAgICAgIGlmICghaXNCeXRlQXJyYXlQcmVkaWN0aW9u
KG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5j
aGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+anNCeXRlQXJyYXlWUHRyKSkpOworICAgICAgICBtX2ppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQnl0ZUFycmF5OjpvZmZz
ZXRPZlN0b3JhZ2UoKSksIHN0b3JhZ2VSZWcpOworICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGls
ZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50OEFycmF5KCkpIHsKKyAgICAgICAgY29uc3QgVHlwZWRB
cnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCktPmludDhBcnJh
eURlc2NyaXB0b3IoKTsKKyAgICAgICAgaWYgKCFpc0ludDhBcnJheVByZWRpY3Rpb24obV9zdGF0
ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgp
LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3Jp
cHRvci5tX3ZwdHIpKSk7CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsK
KyAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludDE2QXJy
YXkoKSkgeworICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciA9
IG1faml0Lmdsb2JhbERhdGEoKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKTsKKyAgICAgICAgaWYg
KCFpc0ludDE2QXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJv
eGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOworICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3Iu
bV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CisgICAgfSBlbHNlIGlmIChhdChub2RlLmNo
aWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnQzMkFycmF5KCkpIHsKKyAgICAgICAgY29uc3QgVHlw
ZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCktPmludDMy
QXJyYXlEZXNjcmlwdG9yKCk7CisgICAgICAgIGlmICghaXNJbnQzMkFycmF5UHJlZGljdGlvbiht
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hp
bGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihk
ZXNjcmlwdG9yLm1fdnB0cikpKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VS
ZWcpOworICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlVWlu
dDhBcnJheSgpKSB7CisgICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpOworICAgICAg
ICBpZiAoIWlzVWludDhBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLm1fdHlwZSkpCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CisgICAg
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3Jp
cHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKKyAgICB9IGVsc2UgaWYgKGF0KG5v
ZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZVVpbnQxNkFycmF5KCkpIHsKKyAgICAgICAgY29u
c3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCkt
PnVpbnQxNkFycmF5RGVzY3JpcHRvcigpOworICAgICAgICBpZiAoIWlzVWludDE2QXJyYXlQcmVk
aWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwg
bm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOworICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwg
c3RvcmFnZVJlZyk7CisgICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVj
dWxhdGVVaW50MzJBcnJheSgpKSB7CisgICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3Io
KTsKKyAgICAgICAgaWYgKCFpc1VpbnQzMkFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNW
YWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0
cikpKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOworICAgIH0gZWxz
ZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkpIHsK
KyAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5n
bG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKTsKKyAgICAgICAgaWYgKCFpc0Zs
b2F0MzJBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlw
ZSkpCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRD
ZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CisgICAgICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX3N0
b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKKyAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQx
KCkpLnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgpKSB7CisgICAgICAgIGNvbnN0IFR5cGVk
QXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0
QXJyYXlEZXNjcmlwdG9yKCk7CisgICAgICAgIGlmICghaXNGbG9hdDY0QXJyYXlQcmVkaWN0aW9u
KG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5j
aGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KGRlc2NyaXB0b3IubV92cHRyKSkpOworICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFn
ZVJlZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQx
KCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSks
IHN0b3JhZ2VSZWcpOworICAgIH0KKyAgICBzdG9yYWdlUmVzdWx0KHN0b3JhZ2VSZWcsIG1fY29t
cGlsZUluZGV4KTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAppbmRleCAyZDEw
OWJhN2FkNjk3ZDIyOTQxODMzZmM0YzhlOWRhZDYzY2QxMGIyLi43YjAzZmJlZGE3OTIzZGE2ZjU1
N2U0MmVjMjlhNDVjMjU2YjIwNDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCkBAIC0xOTY3LDYgKzE5NjcsNyBAQCBwcml2YXRlOgogICAgICAg
ICBTaWduZWRUeXBlZEFycmF5LAogICAgICAgICBVbnNpZ25lZFR5cGVkQXJyYXkKICAgICB9Owor
ICAgIHZvaWQgY29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoTm9kZSYpOwogICAgIHZv
aWQgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlw
dG9yJiwgTm9kZSYsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNwZWN1bGF0aW9uUmVx
dWlyZW1lbnRzLCBUeXBlZEFycmF5U2lnbmVkbmVzcyk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlW
YWxGb3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgR1BSUmVnIGJh
c2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSYsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJh
eVNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzLCBUeXBlZEFycmF5U2lnbmVkbmVzcyk7CiAgICAgdm9p
ZCBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3Jp
cHRvciYsIE5vZGUmLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTcGVjdWxhdGlvblJl
cXVpcmVtZW50cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAppbmRleCA3NGI0MTI2M2M3N2FhY2I1YzZlOGZhYWM4ZmNkNGUz
Mzc3ZDg2ZDIzLi42NTRiM2Y2NGZhMjljOWU2YTFhZDI1NGMzMGFmY2VmMzA4MzFiMDFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAKQEAgLTI2ODQsMzcgKzI2ODQsMzUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCiAgICAgICAgIH0K
IAotICAgICAgICBBU1NFUlQobm9kZS5jaGlsZDMoKSA9PSBOb05vZGUpOwotICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0g
ICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOworICAgICAgICBTdG9yYWdlT3BlcmFu
ZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0VGFnKHRoaXMpOwotCi0gICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7CisgICAgICAgIAogICAgICAg
ICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHN0
b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICAKICAgICAgICAgaWYgKCFtX2NvbXBp
bGVPa2F5KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIC8vIEdldCB0aGUgYXJyYXkg
c3RvcmFnZS4gV2UgaGF2ZW4ndCB5ZXQgY2hlY2tlZCB0aGlzIGlzIGEgSlNBcnJheSwgc28gdGhp
cyBpcyBvbmx5IHNhZmUgaWYKLSAgICAgICAgLy8gYW4gYWNjZXNzIHdpdGggb2Zmc2V0IEpTQXJy
YXk6OnN0b3JhZ2VPZmZzZXQoKSBpcyB2YWxpZCBmb3IgYWxsIEpTQ2VsbHMhCi0gICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6c3Rv
cmFnZU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7Ci0KICAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNl
IGlzIGFuIGFycmF5LCBhbmQgdGhhdCBwcm9wZXJ0eSBpcyBjb250YWluZWQgd2l0aGluIG1fdmVj
dG9yICg8IG1fdmVjdG9yTGVuZ3RoKS4KICAgICAgICAgLy8gSWYgd2UgaGF2ZSBwcmVkaWN0ZWQg
dGhlIGJhc2UgdG8gYmUgdHlwZSBhcnJheSwgd2UgY2FuIHNraXAgdGhlIGNoZWNrLgotICAgICAg
ICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJv
eGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIp
KSk7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0
KCkpKSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2Uu
Z3ByKCk7CisgICAgICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBK
U0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICAgICAgfQogCiAgICAgICAgIC8v
IEZJWE1FOiBJbiBjYXNlcyB3aGVyZSB0aGVyZSBhcmUgc3Vic2VxdWVudCBieV92YWwgYWNjZXNz
ZXMgdG8gdGhlIHNhbWUgYmFzZSBpdCBtaWdodCBoZWxwIHRvIGNhY2hlCiAgICAgICAgIC8vIHRo
ZSBzdG9yYWdlIHBvaW50ZXIgLSBlc3BlY2lhbGx5IGlmIHRoZXJlIGhhcHBlbnMgdG8gYmUgYW5v
dGhlciByZWdpc3RlciBmcmVlIHJpZ2h0IG5vdy4gSWYgd2UgZG8gc28sCiAgICAgICAgIC8vIHRo
ZW4gd2UnbGwgbmVlZCB0byBhbGxvY2F0ZSBhIG5ldyB0ZW1wb3JhcnkgZm9yIHJlc3VsdC4KICAg
ICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMudGFnKSksIHJlc3VsdFRhZy5ncHIoKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIHJlc3VsdFRhZy5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcp
KSk7Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3Jh
Z2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgc3RvcmFnZVJlZyk7CisgICAgICAgIG1faml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92
ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwg
cmVzdWx0UGF5bG9hZC5ncHIoKSk7CiAKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcu
Z3ByKCksIHN0b3JhZ2VSZWcsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zNjU4LDcgKzM2NTYsMTIgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBzdG9yYWdlUmVzdWx0KHJl
c3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgICAg
IAorCisgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7CisgICAgICAgIGNvbXBp
bGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9
CisKICAgICBjYXNlIEdldEJ5T2Zmc2V0OiB7CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3Jh
Z2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWco
dGhpcywgc3RvcmFnZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAppbmRleCA1MzI3MDBjNzg1ODU5ZTI4NTlkOWRhY2NkMzBiMDIyMWI2
MDEyMTlkLi4xYjU4MTBiOTc2M2JlNGJhMzkwODEwNmI5ZjA4NjhiZWUwNWVmZWNhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAg
LTI2ODksMTAgKzI2ODksOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAKICAgICAgICAgfQogCi0gICAgICAg
IEFTU0VSVChub2RlLmNoaWxkMygpID09IE5vTm9kZSk7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAgR1BS
VGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2Uo
dGhpcywgbm9kZS5jaGlsZDMoKSk7CiAKICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdw
cigpOwogICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKQEAgLTI3
MDEsMTIgKzI3MDAsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAg
ICAgICAvLyBHZXQgdGhlIGFycmF5IHN0b3JhZ2UuIFdlIGhhdmVuJ3QgeWV0IGNoZWNrZWQgdGhp
cyBpcyBhIEpTQXJyYXksIHNvIHRoaXMgaXMgb25seSBzYWZlIGlmCi0gICAgICAgIC8vIGFuIGFj
Y2VzcyB3aXRoIG9mZnNldCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkgaXMgdmFsaWQgZm9yIGFs
bCBKU0NlbGxzIQotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwotCi0gICAg
ICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgcHJvcGVydHkgaXMg
Y29udGFpbmVkIHdpdGhpbiBtX3ZlY3RvciAoPCBtX3ZlY3Rvckxlbmd0aCkuCi0gICAgICAgIC8v
IElmIHdlIGhhdmUgcHJlZGljdGVkIHRoZSBiYXNlIHRvIGJlIHR5cGUgYXJyYXksIHdlIGNhbiBz
a2lwIHRoZSBjaGVjay4KICAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZv
ck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soSlNWYWx1ZVJlZ3MoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJy
YXlWUHRyKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0
aE9mZnNldCgpKSkpOwpAQCAtMjcxNCw3ICsyNzA3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAvLyBGSVhNRTogSW4gY2FzZXMgd2hlcmUgdGhl
cmUgYXJlIHN1YnNlcXVlbnQgYnlfdmFsIGFjY2Vzc2VzIHRvIHRoZSBzYW1lIGJhc2UgaXQgbWln
aHQgaGVscCB0byBjYWNoZQogICAgICAgICAvLyB0aGUgc3RvcmFnZSBwb2ludGVyIC0gZXNwZWNp
YWxseSBpZiB0aGVyZSBoYXBwZW5zIHRvIGJlIGFub3RoZXIgcmVnaXN0ZXIgZnJlZSByaWdodCBu
b3cuIElmIHdlIGRvIHNvLAogICAgICAgICAvLyB0aGVuIHdlJ2xsIG5lZWQgdG8gYWxsb2NhdGUg
YSBuZXcgdGVtcG9yYXJ5IGZvciByZXN1bHQuCi0gICAgICAgIEdQUlRlbXBvcmFyeSYgcmVzdWx0
ID0gc3RvcmFnZTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkpKTsKIApAQCAtMjg2NCw3ICsyODU3LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIGNhc2UgUHV0QnlWYWxB
bGlhczogewogICAgICAgICBQcmVkaWN0ZWRUeXBlIGJhc2VQcmVkaWN0aW9uID0gYXQobm9kZS5j
aGlsZDIoKSkucHJlZGljdGlvbigpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKGJhc2VQcmVkaWN0
aW9uLCAoYmFzZVByZWRpY3Rpb24gJiBQcmVkaWN0SW50MzIpIHx8ICFiYXNlUHJlZGljdGlvbik7
Ci0gICAgICAgICAgICAKKwogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJv
cGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgp
KS5zaG91bGRTcGVjdWxhdGVCeXRlQXJyYXkoKSkgewpAQCAtMzYxMCw2ICszNjAzLDExIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgc3RvcmFnZVJl
c3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQor
CisgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7CisgICAgICAgIGNvbXBpbGVH
ZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CiAg
ICAgICAgIAogICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKICAgICAgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118486</attachid>
            <date>2011-12-08 16:29:16 -0800</date>
            <delta_ts>2011-12-09 00:46:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74136-20111208162915.patch</filename>
            <type>text/plain</type>
            <size>41319</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMzkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
YjkxNmQ2MTg3YzE1YzY5YjZkZGQxODBlY2I2ZjI1Mzg5NjA5NzAyLi5lMzRiNDFlODhlMWUzZTY1
MDkwYmM4ZDUzZjBlMzZiMWRjMWMzMjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAxMS0xMi0wOCAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIEF2b2lkIHJlbG9hZGluZyBzdG9yYWdlIHBvaW50ZXIgZm9yIGluZGV4ZWQgcHJv
cGVydGllcyB1bm5lY2Vzc2FyaWx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03NDEzNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBhIG5vZGUgdG8gcmVwcmVzZW50IGxvYWRpbmcgcHJvcGVydHkgc3Rv
cmFnZSBmb3IgaW5kZXhlZCBwcm9wZXJ0aWVzLgorICAgICAgICBUaGlzIGFsbG93cyB1cyB0byBy
ZWR1Y2UgY29kZSBnZW5lcmF0ZWQgZm9yIHNlcXVlbnRpYWwgYWNjZXNzIG9mIGFycmF5cywKKyAg
ICAgICAgc3RyaW5ncywgZXRjLiAgVGhpcyByZXN1bHRzIGluIHVwIHRvIDUlIGltcHJvdmVtZW50
IGluIGNvZGUgdGhhdCBpcyAKKyAgICAgICAgdmVyeSBoZWF2eSBvbiBpbmRleGVkIHJlYWRzLCBz
dWNoIGFzIG1hdHJpeCBvcGVyYXRpb25zIGluIHR5cGVkIGFycmF5cworICAgICAgICBhbmQgMjAl
IGZhc3RlciBvbiBtaWNyb2JlbmNobWFya3MuCisKKyAgICAgICAgQ3VycmVudGx5IHRoaXMgaXMg
b25seSBzdXBwb3J0ZWQgYnkgR2V0QnlWYWwgYW5kIG90aGVyIHNpbWlsYXIgaW5kZXhlZCByZWFk
cy4KKworICAgICAgICAqIGJ5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaDoKKyAgICAgICAgKEpTQzo6
aXNGaXhlZEluZGV4ZWRTdG9yYWdlT2JqZWN0UHJlZGljdGlvbik6CisgICAgICAgICogZGZnL0RG
R0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdOb2Rl
Lmg6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGVQcmVkaWN0aW9ucyk6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvcGFnYXRvcjo6Zml4dXBOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9y
OjpnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpQcm9wYWdhdG9yOjpwZXJmb3JtTm9kZUNTRSk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldENoYXJDb2RlQXQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRCeVZhbE9uQnl0ZUFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFBy
b3BlcnR5U3RvcmFnZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
CiAyMDExLTEyLTA4ICBUaG91cmF5YSBBTkRPTFNJICA8dGhvdXJheWEuYW5kb2xzaUBzdC5jb20+
CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MDA1
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlw
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaAppbmRl
eCA1NzIwMzk4ZGI0MTVhOWIwYWJkNGRmNzdkYmM1MDdmMzQxMDNmOWRiLi5mNDFmMzM2NzIyY2Ux
MTQwYTk1OWY1NjQ0YjU5NDkzYTY0OWI3NTg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmgKQEAgLTYwLDYgKzYwLDcgQEAgc3RhdGljIGNvbnN0
IFByZWRpY3RlZFR5cGUgUHJlZGljdE51bWJlciAgICAgICAgPSAweDAwMDE4MDAwOyAvLyBJdCdz
IGVpdGhlciBhbgogc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdEJvb2xlYW4gICAg
ICAgPSAweDAwMDIwMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBCb29sZWFuLgogc3RhdGljIGNv
bnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdE90aGVyICAgICAgICAgPSAweDQwMDAwMDAwOyAvLyBJ
dCdzIGRlZmluaXRlbHkgbm9uZSBvZiB0aGUgYWJvdmUuCiBzdGF0aWMgY29uc3QgUHJlZGljdGVk
VHlwZSBQcmVkaWN0VG9wICAgICAgICAgICA9IDB4N2ZmZmZmZmY7IC8vIEl0IGNhbiBiZSBhbnkg
b2YgdGhlIGFib3ZlLgorc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgRml4ZWRJbmRleGVkU3Rv
cmFnZU1hc2sgPSBQcmVkaWN0Qnl0ZUFycmF5IHwgUHJlZGljdEludDhBcnJheSB8IFByZWRpY3RJ
bnQxNkFycmF5IHwgUHJlZGljdEludDMyQXJyYXkgfCBQcmVkaWN0VWludDhBcnJheSB8IFByZWRp
Y3RVaW50MTZBcnJheSB8IFByZWRpY3RVaW50MzJBcnJheSB8IFByZWRpY3RGbG9hdDMyQXJyYXkg
fCBQcmVkaWN0RmxvYXQ2NEFycmF5OwogCiB0eXBlZGVmIGJvb2wgKCpQcmVkaWN0aW9uQ2hlY2tl
cikoUHJlZGljdGVkVHlwZSk7CiAKQEAgLTgzLDYgKzg0LDExIEBAIGlubGluZSBib29sIGlzRmlu
YWxPYmplY3RPck90aGVyUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZhbHVlKQogICAgIHJldHVy
biAhISh2YWx1ZSAmIChQcmVkaWN0RmluYWxPYmplY3QgfCBQcmVkaWN0T3RoZXIpKSAmJiAhKHZh
bHVlICYgfihQcmVkaWN0RmluYWxPYmplY3QgfCBQcmVkaWN0T3RoZXIpKTsKIH0KIAoraW5saW5l
IGJvb2wgaXNGaXhlZEluZGV4ZWRTdG9yYWdlT2JqZWN0UHJlZGljdGlvbihQcmVkaWN0ZWRUeXBl
IHZhbHVlKQoreworICAgIHJldHVybiAodmFsdWUgJiBGaXhlZEluZGV4ZWRTdG9yYWdlTWFzaykg
PT0gdmFsdWU7Cit9CisKIGlubGluZSBib29sIGlzU3RyaW5nUHJlZGljdGlvbihQcmVkaWN0ZWRU
eXBlIHZhbHVlKQogewogICAgIHJldHVybiB2YWx1ZSA9PSBQcmVkaWN0U3RyaW5nOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKaW5kZXggMzczYTBl
MGNiNDY4NWIwMGE1MjE3NDIxY2NiOThjODU0Y2NjZjc2NS4uYjA2YTI3Yzk1NGQ0ZTFiMDcyZWY0
NWU4ODU3ZTE1NDJhYTBjNzY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0U3RhdGUuY3BwCkBAIC03NTgsMTIgKzc1OCw3MSBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5zZXQobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7
CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIAogICAgIGNhc2UgR2V0UHJvcGVydHlTdG9yYWdlOgogICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Q2VsbCk7CiAgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIAorICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTog
eworICAgICAgICBQcmVkaWN0ZWRUeXBlIGJhc2VQcmVkaWN0aW9uID0gbV9ncmFwaFtub2RlLmNo
aWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgIGlmICghKGJhc2VQcmVkaWN0aW9uICYgUHJl
ZGljdEludDMyKSAmJiBiYXNlUHJlZGljdGlvbikgeworICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLmNsZWFyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBp
ZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkgPT0gUHJlZGljdFN0cmluZykg
eworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdFN0cmlu
Zyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNo
b3VsZFNwZWN1bGF0ZUJ5dGVBcnJheSgpKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihQcmVkaWN0Qnl0ZUFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5jbGVhcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludDhB
cnJheSgpKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVk
aWN0SW50OEFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgpKSB7CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MTZBcnJheSk7CisgICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUlu
dDMyQXJyYXkoKSkgeworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
UHJlZGljdEludDMyQXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFy
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVVaW50OEFycmF5KCkpIHsKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RVaW50OEFycmF5KTsKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3Vs
YXRlVWludDE2QXJyYXkoKSkgeworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5m
aWx0ZXIoUHJlZGljdFVpbnQxNkFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoUHJlZGljdE90aGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZVVpbnQzMkFycmF5
KCkpIHsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RV
aW50MzJBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hp
bGQxKCldLnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpKSB7CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0RmxvYXQzMkFycmF5KTsKKyAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRl
RmxvYXQ2NEFycmF5KCkpIHsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFByZWRpY3RGbG9hdDY0QXJyYXkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
LmNsZWFyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkpOworICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuY2xlYXIoKTsKKyAgICAgICAgYnJlYWs7IAorICAgIH0KICAgICBjYXNlIEdldEJ5
T2Zmc2V0OgogICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Q2Vs
bCk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDQ3Mjg3ZmIzMzNi
YTkzNjVlMTMxOTE3OGY2MWVkYWIxYzhlODQzYTYuLmU4ZDgwZTBiMWRhZjZhMTk1Yjc4ODc3MzNk
NGRhZWJhNzQxMjBlM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCkBAIC0xMjA3LDggKzEyMDcsMTEgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlSW50cmluc2ljKGJvb2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIElu
dHJpbnMKICAgICBjYXNlIENoYXJDb2RlQXRJbnRyaW5zaWM6IHsKICAgICAgICAgaWYgKGZpcnN0
QXJnICsgMSAhPSBsYXN0QXJnKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
IE5vZGVJbmRleCBjaGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5nQ2hhckNvZGVBdCwgZ2V0KGZp
cnN0QXJnKSwgZ2V0VG9JbnQzMihmaXJzdEFyZyArIDEpKTsKKyAgICAgICAgaWYgKCEobV9ncmFw
aFtnZXQoZmlyc3RBcmcpXS5wcmVkaWN0aW9uKCkgJiBQcmVkaWN0U3RyaW5nKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIE5vZGVJbmRleCBzdG9yYWdlID0g
YWRkVG9HcmFwaChHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBnZXQoZmlyc3RBcmcpLCBnZXRU
b0ludDMyKGZpcnN0QXJnICsgMSkpOworICAgICAgICBOb2RlSW5kZXggY2hhckNvZGUgPSBhZGRU
b0dyYXBoKFN0cmluZ0NoYXJDb2RlQXQsIGdldChmaXJzdEFyZyksIGdldFRvSW50MzIoZmlyc3RB
cmcgKyAxKSwgc3RvcmFnZSk7CiAgICAgICAgIGlmICh1c2VzUmVzdWx0KQogICAgICAgICAgICAg
c2V0KHJlc3VsdE9wZXJhbmQsIGNoYXJDb2RlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0x
MjE3LDggKzEyMjAsMTEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJv
b2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIEludHJpbnMKICAgICBjYXNlIENoYXJB
dEludHJpbnNpYzogewogICAgICAgICBpZiAoZmlyc3RBcmcgKyAxICE9IGxhc3RBcmcpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBOb2RlSW5kZXggY2hhckNv
ZGUgPSBhZGRUb0dyYXBoKFN0cmluZ0NoYXJBdCwgZ2V0KGZpcnN0QXJnKSwgZ2V0VG9JbnQzMihm
aXJzdEFyZyArIDEpKTsKKyAgICAgICAgaWYgKCEobV9ncmFwaFtnZXQoZmlyc3RBcmcpXS5wcmVk
aWN0aW9uKCkgJiBQcmVkaWN0U3RyaW5nKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBOb2RlSW5kZXggc3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZSwgZ2V0KGZpcnN0QXJnKSwgZ2V0VG9JbnQzMihmaXJzdEFyZyArIDEpKTsKKyAgICAg
ICAgTm9kZUluZGV4IGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQXQsIGdldChmaXJz
dEFyZyksIGdldFRvSW50MzIoZmlyc3RBcmcgKyAxKSwgc3RvcmFnZSk7CiAgICAgICAgIGlmICh1
c2VzUmVzdWx0KQogICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGNoYXJDb2RlKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNjExLDggKzE2MTcsOCBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsK
ICAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kKTsKLQotICAgICAgICAgICAgTm9kZUluZGV4IGdldEJ5VmFsID0gYWRkVG9H
cmFwaChHZXRCeVZhbCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2UsIHByb3Bl
cnR5KTsKKyAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBo
KEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2UsIHByb3BlcnR5KTsKKyAgICAgICAgICAg
IE5vZGVJbmRleCBnZXRCeVZhbCA9IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbygwKSwgT3BJ
bmZvKHByZWRpY3Rpb24pLCBiYXNlLCBwcm9wZXJ0eSwgcHJvcGVydHlTdG9yYWdlKTsKICAgICAg
ICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBnZXRCeVZhbCk7CiAK
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9ieV92YWwpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAppbmRleCBhODI3OTgzODRkZDNhNDlhMTRkZDdjYjMwZDY2ZTFlZDg1Yzlj
NmVlLi4xMDQ1YmRjODgzZmEyNjZhOTAzYTI1OGFmNjVkMzhlYzdhYzViZGNmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtMjMzLDYgKzIzMyw3IEBAIHN0YXRpYyBpbmxpbmUg
Y29uc3QgY2hhciogYXJpdGhOb2RlRmxhZ3NBc1N0cmluZyhBcml0aE5vZGVGbGFncyBmbGFncykK
ICAgICBtYWNybyhDaGVja1N0cnVjdHVyZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3Jv
KFB1dFN0cnVjdHVyZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAg
ICAgbWFjcm8oR2V0UHJvcGVydHlTdG9yYWdlLCBOb2RlUmVzdWx0U3RvcmFnZSkgXAorICAgIG1h
Y3JvKEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVz
dWx0U3RvcmFnZSkgXAogICAgIG1hY3JvKEdldEJ5T2Zmc2V0LCBOb2RlUmVzdWx0SlMpIFwKICAg
ICBtYWNybyhQdXRCeU9mZnNldCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxk
KSBcCiAgICAgbWFjcm8oR2V0QXJyYXlMZW5ndGgsIE5vZGVSZXN1bHRJbnQzMikgXApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAKaW5kZXggODdiMjcxNTk4Mzlh
N2E4OWEyMThmYzAyMzYzN2M0N2JhNzQ4NDI4NS4uNzY0YWJlMGQ3ZGJiMTBkN2E2MjUxNzZjNGYy
YzUwMjEzM2JlYjExNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cm9wYWdhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0
b3IuY3BwCkBAIC00NzIsMTEgKzQ3MiwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFn
ZTogeworICAgICAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFnZTogCisgICAgICAgIGNhc2UgR2V0
SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVk
aWN0aW9uKFByZWRpY3RPdGhlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAg
ICAgICAgICAgCisKICAgICAgICAgY2FzZSBHZXRCeU9mZnNldDogewogICAgICAgICAgICAgaWYg
KG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSkKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOwpAQCAtODA5LDcgKzgxMCwy
MyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdl
dEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgYmFz
ZVByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAg
ICAgICAgIGlmICghKGJhc2VQcmVkaWN0aW9uICYgUHJlZGljdEludDMyKSAmJiBiYXNlUHJlZGlj
dGlvbikgeworICAgICAgICAgICAgICAgIG5vZGUub3AgPSBQaGFudG9tOworICAgICAgICAgICAg
ICAgIG5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQxID0gTm9Ob2RlOworICAgICAgICAgICAgICAg
IG5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQyID0gTm9Ob2RlOworICAgICAgICAgICAgICAgIG5v
ZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQzID0gTm9Ob2RlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAg
Y2FzZSBTdHJpbmdDaGFyQXQ6CisgICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDogeworICAg
ICAgICAgICAgaWYgKG5vZGUuY2hpbGQzKCkgIT0gTm9Ob2RlICYmIG1fZ3JhcGhbbm9kZS5jaGls
ZDMoKV0ub3AgPT0gUGhhbnRvbSkKKyAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLmZpeGVk
LmNoaWxkMyA9IE5vTm9kZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTIxNCw2ICsxMjMx
LDQxIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICB9
CisKKyAgICBOb2RlSW5kZXggZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlv
bihOb2RlSW5kZXggY2hpbGQxLCBib29sIGhhc0ludGVnZXJJbmRleFByZWRpY3Rpb24pCisgICAg
eworICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBzdGFydEluZGV4Rm9yQ2hpbGRyZW4oY2hpbGQx
KTsKKyAgICAgICAgZm9yIChOb2RlSW5kZXggaW5kZXggPSBtX2NvbXBpbGVJbmRleDsgaW5kZXgt
LSA+IHN0YXJ0OykgeworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwor
ICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAgICAgICAgICBjYXNlIEdldEluZGV4
ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIGJhc2VQ
cmVkaWN0aW9uID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAg
ICAgICAgICAgYm9vbCBub2RlSGFzSW50ZWdlckluZGV4UHJlZGljdGlvbiA9ICEoIShiYXNlUHJl
ZGljdGlvbiAmIFByZWRpY3RJbnQzMikgJiYgYmFzZVByZWRpY3Rpb24pOworICAgICAgICAgICAg
ICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSAmJiBoYXNJbnRlZ2VySW5kZXhQcmVkaWN0
aW9uID09IG5vZGVIYXNJbnRlZ2VySW5kZXhQcmVkaWN0aW9uKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6CisgICAgICAgICAgICBjYXNlIFB1dFN0cnVj
dHVyZToKKyAgICAgICAgICAgICAgICAvLyBDaGFuZ2luZyB0aGUgc3RydWN0dXJlIG9yIHB1dHRp
bmcgdG8gdGhlIHN0b3JhZ2UgY2Fubm90CisgICAgICAgICAgICAgICAgLy8gY2hhbmdlIHRoZSBw
cm9wZXJ0eSBzdG9yYWdlIHBvaW50ZXIuCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Cisg
ICAgICAgICAgICAgICAgaWYgKGlzRml4ZWRJbmRleGVkU3RvcmFnZU9iamVjdFByZWRpY3Rpb24o
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpICYmIGJ5VmFsSXNQdXJlKG5vZGUp
KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9O
b2RlOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChjbG9iYmVy
c1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gTm9Ob2RlOworICAgIH0KICAgICAKICAgICBOb2RlSW5kZXggZ2V0U2NvcGVDaGFpbkxvYWRF
bGltaW5hdGlvbih1bnNpZ25lZCBkZXB0aCkKICAgICB7CkBAIC0xNDAzLDExICsxNDU1LDE4IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoY2hlY2tGdW5jdGlvbkVsaW1pbmF0aW9uKG5vZGUu
ZnVuY3Rpb24oKSwgbm9kZS5jaGlsZDEoKSkpCiAgICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7
CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlOiB7CisgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIGJhc2VQ
cmVkaWN0aW9uID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAg
ICAgICBib29sIG5vZGVIYXNJbnRlZ2VySW5kZXhQcmVkaWN0aW9uID0gISghKGJhc2VQcmVkaWN0
aW9uICYgUHJlZGljdEludDMyKSAmJiBiYXNlUHJlZGljdGlvbik7CisgICAgICAgICAgICBzZXRS
ZXBsYWNlbWVudChnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUu
Y2hpbGQxKCksIG5vZGVIYXNJbnRlZ2VySW5kZXhQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQogCiAgICAgICAgIGNhc2UgR2V0UHJvcGVydHlTdG9yYWdlOgogICAg
ICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9u
KG5vZGUuY2hpbGQxKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCisKICAg
ICAgICAgY2FzZSBHZXRCeU9mZnNldDoKICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5
T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0
b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciwgbm9kZS5jaGlsZDEoKSkp
OwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IGY4NjQ4YzBkMDhjOGNkYWI3OTM5ZGIyMDc5YzhjZGQz
MTgyYWY5OTAuLjUxYTY0Y2FlNjNhYTE4ZjI4NDJlYjE4ZjY2NTQ4YzBkY2E4ZDZlMDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC0x
MzQ1LDEyICsxMzQ1LDE4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRDaGFyQ29k
ZUF0KE5vZGUmIG5vZGUpCiAgICAgQVNTRVJUKG5vZGUuY2hpbGQzKCkgPT0gTm9Ob2RlKTsKICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzdHJpbmcodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwor
ICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAKICAgICBH
UFJSZWcgc3RyaW5nUmVnID0gc3RyaW5nLmdwcigpOwogICAgIEdQUlJlZyBpbmRleFJlZyA9IGlu
ZGV4LmdwcigpOwotCi0gICAgaWYgKCFpc1N0cmluZ1ByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1
ZVNvdXJjZTo6dW5ib3hlZENlbGwoc3RyaW5nUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RyaW5nUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CisgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdw
cigpOworICAgIAorICAgIGlmICghaXNTdHJpbmdQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5tX3R5cGUpKSB7CisgICAgICAgIEFTU0VSVCghKGF0KG5vZGUuY2hpbGQx
KCkpLnByZWRpY3Rpb24oKSAmIFByZWRpY3RTdHJpbmcpKTsKKyAgICAgICAgdGVybWluYXRlU3Bl
Y3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgbm9SZXN1
bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgLy8gdW5z
aWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFu
ZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQogICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBpbmRleFJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RyaW5nUmVnLCBKU1N0cmlu
Zzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKQEAgLTEzNjAsMjAgKzEzNjYsMTUgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldENoYXJDb2RlQXQoTm9kZSYgbm9kZSkKIAogICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RyaW5nUmVnLCBKU1N0cmluZzo6b2Zm
c2V0T2ZWYWx1ZSgpKSwgc2NyYXRjaFJlZyk7CiAKLSAgICAvLyBTcGVjdWxhdGUgdGhhdCB3ZSdy
ZSBub3QgYWNjZXNzaW5nIGEgcm9wZQotICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0
Y2hSZWcpKTsKLQogICAgIC8vIExvYWQgdGhlIGNoYXJhY3RlciBpbnRvIHNjcmF0Y2hSZWcKICAg
ICBKSVRDb21waWxlcjo6SnVtcCBpczE2Qml0ID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoUmVnLCBTdHJpbmdJ
bXBsOjpmbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQo
KSkpOwogCi0gICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNo
UmVnLCBTdHJpbmdJbXBsOjpkYXRhT2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKLSAgICBtX2ppdC5s
b2FkOChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNjcmF0Y2hSZWcsIGluZGV4UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNPbmUsIDApLCBzY3JhdGNoUmVnKTsKKyAgICBtX2ppdC5sb2FkOChN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIGluZGV4UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNPbmUsIDApLCBzY3JhdGNoUmVnKTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBj
b250OEJpdCA9IG1faml0Lmp1bXAoKTsKIAogICAgIGlzMTZCaXQubGluaygmbV9qaXQpOwogCi0g
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoUmVnLCBTdHJp
bmdJbXBsOjpkYXRhT2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKLSAgICBtX2ppdC5sb2FkMTYoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoUmVnLCBpbmRleFJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzVHdvLCAwKSwgc2NyYXRjaFJlZyk7CisgICAgbV9qaXQubG9hZDE2KE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgaW5kZXhSZWcsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc1R3bywgMCksIHNjcmF0Y2hSZWcpOwogCiAgICAgY29udDhCaXQubGluaygmbV9qaXQpOwog
CkBAIC0xMzgyLDE1ICsxMzgzLDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRD
aGFyQ29kZUF0KE5vZGUmIG5vZGUpCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRC
eVZhbE9uU3RyaW5nKE5vZGUmIG5vZGUpCiB7Ci0gICAgQVNTRVJUKG5vZGUuY2hpbGQzKCkgPT0g
Tm9Ob2RlKTsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2Rl
LmNoaWxkMigpKTsKLQorICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGls
ZDMoKSk7CiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIEdQUlJlZyBwcm9w
ZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFn
ZS5ncHIoKTsKIAotICAgIGlmICghaXNTdHJpbmdQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVT
b3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5q
c1N0cmluZ1ZQdHIpKSk7CisgICAgaWYgKCFpc1N0cmluZ1ByZWRpY3Rpb24obV9zdGF0ZS5mb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpIHsKKyAgICAgICAgQVNTRVJUKCEoYXQobm9kZS5j
aGlsZDEoKSkucHJlZGljdGlvbigpICYgUHJlZGljdFN0cmluZykpOworICAgICAgICB0ZXJtaW5h
dGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICBu
b1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICAv
LyB1bnNpZ25lZCBjb21wYXJpc29uIHNvIHdlIGNhbiBmaWx0ZXIgb3V0IG5lZ2F0aXZlIGluZGlj
ZXMgYW5kIGluZGljZXMgdGhhdCBhcmUgdG9vIGxhcmdlCiAgICAgc3BlY3VsYXRpb25DaGVjayhK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBK
U1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKQEAgLTE0MDAsMjAgKzE0MDUsMTUgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSYgbm9kZSkKIAog
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNTdHJp
bmc6Om9mZnNldE9mVmFsdWUoKSksIHNjcmF0Y2hSZWcpOwogCi0gICAgLy8gU3BlY3VsYXRlIHRo
YXQgd2UncmUgbm90IGFjY2Vzc2luZyBhIHJvcGUKLSAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCBzY3JhdGNoUmVnKSk7Ci0KICAgICAvLyBMb2FkIHRoZSBjaGFyYWN0ZXIgaW50byBzY3JhdGNo
UmVnCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXMxNkJpdCA9IG1faml0LmJyYW5jaFRlc3QzMihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaFJlZywg
U3RyaW5nSW1wbDo6ZmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdJbXBsOjpmbGFn
SXM4Qml0KCkpKTsKIAotICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c2NyYXRjaFJlZywgU3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7Ci0gICAg
bV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lLCAwKSwgc2NyYXRjaFJlZyk7CisgICAgbV9q
aXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lLCAwKSwgc2NyYXRjaFJlZyk7CiAgICAgSklUQ29t
cGlsZXI6Okp1bXAgY29udDhCaXQgPSBtX2ppdC5qdW1wKCk7CiAKICAgICBpczE2Qml0Lmxpbmso
Jm1faml0KTsKIAotICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaFJlZywgU3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7Ci0gICAgbV9q
aXQubG9hZDE2KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaFJlZywgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc1R3bywgMCksIHNjcmF0Y2hSZWcpOworICAgIG1faml0
LmxvYWQxNihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNUd28sIDApLCBzY3JhdGNoUmVnKTsKIAogICAgIC8vIFdl
IG9ubHkgc3VwcG9ydCBhc2NpaSBjaGFyYWN0ZXJzCiAgICAgc3BlY3VsYXRpb25DaGVjayhKU1Zh
bHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIHNjcmF0Y2hSZWcsIFRydXN0ZWRJbW0zMigweDEwMCkpKTsKQEAgLTE1NTUsMTUgKzE1
NTUsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yQnl0ZUFycmF5
KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE4KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEJ5VmFsT25CeXRlQXJyYXkoTm9kZSYgbm9kZSkKIHsKLSAgICBBU1NFUlQobm9k
ZS5jaGlsZDMoKSA9PSBOb05vZGUpOwogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS5jaGlsZDEoKSk7CiAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3Bl
cnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgIAorCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBi
YXNlLmdwcigpOwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAg
IAotICAgIGlmICghaXNCeXRlQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5tX3R5cGUpKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVB
cnJheVZQdHIpKSk7CisKKyAgICBpZiAoIWlzQnl0ZUFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZv
ck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkgeworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxh
dGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICBub1Jlc3VsdCht
X2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICAvLyBMb2FkIHRo
ZSBjaGFyYWN0ZXIgaW50byBzY3JhdGNoUmVnCiAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhp
cyk7CkBAIC0xNTk1LDQ4ICsxNTk3LDUxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRUeXBlZEFycmF5TGVuZ3RoKGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjCiAKIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShjb25zdCBU
eXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgTm9kZSYgbm9kZSwgc2l6ZV90IGVsZW1l
bnRTaXplLCBUeXBlZEFycmF5U3BlY3VsYXRpb25SZXF1aXJlbWVudHMgc3BlY3VsYXRpb25SZXF1
aXJlbWVudHMsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MpCiB7Ci0gICAgQVNTRVJU
KG5vZGUuY2hpbGQzKCkgPT0gTm9Ob2RlKTsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBw
cm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdl
KHRoaXMsIG5vZGUuY2hpbGQzKCkpOworCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigp
OwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAKLSAg
ICBpZiAoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVj
aykKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChi
YXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOwotICAgIAotICAgIC8vIExvYWQg
dGhlIGNoYXJhY3RlciBpbnRvIHNjcmF0Y2hSZWcKLSAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0
aGlzKTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fc3Rv
cmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwotICAgIAotICAgIEFTU0VSVChzcGVjdWxhdGlvblJl
cXVpcmVtZW50cyAhPSBOb1R5cGVkQXJyYXlTcGVjQ2hlY2spOworCisgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOworCisg
ICAgaWYgKHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzICE9IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hl
Y2spIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHRlcm1pbmF0ZVNw
ZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIG5vUmVz
dWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGluQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkJlbG93LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVz
Y3JpcHRvci5tX2xlbmd0aE9mZnNldCkpOwotICAgIG1faml0LnhvclB0cihzdG9yYWdlUmVnLCBz
dG9yYWdlUmVnKTsKKyAgICBtX2ppdC54b3JQdHIocmVzdWx0UmVnLCByZXN1bHRSZWcpOwogICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuanVtcCgpOwogICAgIGlu
Qm91bmRzLmxpbmsoJm1faml0KTsKICAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CiAgICAgY2Fz
ZSAxOgotICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3Jh
Z2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUpLCBzdG9yYWdlUmVn
KTsKKyAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lKSwgcmVzdWx0UmVnKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBtX2ppdC5sb2FkMTYoTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzVHdvKSwgc3RvcmFnZVJlZyk7CisgICAgICAgIG1faml0LmxvYWQxNihNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNUd28pLCByZXN1bHRSZWcpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDQ6Ci0g
ICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNGb3VyKSwgc3RvcmFnZVJlZyk7Cisg
ICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNGb3VyKSwgcmVzdWx0UmVnKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgfQogICAgIG91dE9mQm91bmRzLmxpbmsoJm1faml0KTsKICAgICBpZiAoZWxlbWVudFNp
emUgPCA0IHx8IHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKLSAgICAgICAgaW50ZWdl
clJlc3VsdChzdG9yYWdlUmVnLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGludGVnZXJSZXN1
bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIEZQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91Ymxl
KHN0b3JhZ2VSZWcsIHJlc3VsdC5mcHIoKSk7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHBv
c2l0aXZlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVh
bCwgc3RvcmFnZVJlZywgVHJ1c3RlZEltbTMyKDApKTsKLSAgICAgICAgbV9qaXQuYWRkRG91Ymxl
KEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3MoJnR3b1RvVGhlMzIpLCByZXN1bHQuZnByKCkp
OworICAgICAgICBGUFJUZW1wb3JhcnkgZnJlc3VsdCh0aGlzKTsKKyAgICAgICAgbV9qaXQuY29u
dmVydEludDMyVG9Eb3VibGUocmVzdWx0UmVnLCBmcmVzdWx0LmZwcigpKTsKKyAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgcG9zaXRpdmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
R3JlYXRlclRoYW5PckVxdWFsLCByZXN1bHRSZWcsIFRydXN0ZWRJbW0zMigwKSk7CisgICAgICAg
IG1faml0LmFkZERvdWJsZShKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKCZ0d29Ub1RoZTMy
KSwgZnJlc3VsdC5mcHIoKSk7CiAgICAgICAgIHBvc2l0aXZlLmxpbmsoJm1faml0KTsKLSAgICAg
ICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBk
b3VibGVSZXN1bHQoZnJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgIH0KIH0KIApA
QCAtMTcxOCwyNiArMTcyMywyNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlW
YWxGb3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJgogCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShjb25zdCBUeXBl
ZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgTm9kZSYgbm9kZSwgc2l6ZV90IGVsZW1lbnRT
aXplLCBUeXBlZEFycmF5U3BlY3VsYXRpb25SZXF1aXJlbWVudHMgc3BlY3VsYXRpb25SZXF1aXJl
bWVudHMpCiB7Ci0gICAgQVNTRVJUKG5vZGUuY2hpbGQzKCkgPT0gTm9Ob2RlKTsKICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICBT
dG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOworCiAgICAgR1BSUmVn
IGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5
LmdwcigpOwotICAgIAotICAgIGlmIChzcGVjdWxhdGlvblJlcXVpcmVtZW50cyAhPSBOb1R5cGVk
QXJyYXlUeXBlU3BlY0NoZWNrKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3Vy
Y2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7Ci0g
ICAgCi0gICAgLy8gTG9hZCB0aGUgY2hhcmFjdGVyIGludG8gc2NyYXRjaFJlZwotICAgIEdQUlRl
bXBvcmFyeSBzdG9yYWdlKHRoaXMpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5n
cHIoKTsKLSAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcs
IGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CisgICAgCisgICAgaWYg
KHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzICE9IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2spIHsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0
aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIG5vUmVzdWx0KG1f
Y29tcGlsZUluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIEZQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7CiAgICAgRlBSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5mcHIoKTsKICAg
ICBBU1NFUlQoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5U3BlY0NoZWNr
KTsKLSAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBpbkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9s
ZW5ndGhPZmZzZXQpKTsKLSAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMigwKSwg
c2NyYXRjaC5ncHIoKSk7Ci0gICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUoc2NyYXRjaC5n
cHIoKSwgcmVzdWx0UmVnKTsKKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIHplcm8gPSAwOworICAg
IG1faml0LmxvYWREb3VibGUoJnplcm8sIHJlc3VsdFJlZyk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5qdW1wKCk7CiAgICAgaW5Cb3VuZHMubGluaygmbV9q
aXQpOwogICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKQEAgLTIzNjQsNiArMjM3MCw4MyBAQCBi
b29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXEoTm9kZSYgbm9kZSkKICAgICByZXR1
cm4gbm9uU3BlY3VsYXRpdmVTdHJpY3RFcShub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoTm9kZSYgbm9kZSkKK3sKKyAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIEdQUlJl
ZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAKKyAgICBQcmVkaWN0ZWRUeXBlIGJhc2VQcmVk
aWN0aW9uID0gYXQobm9kZS5jaGlsZDIoKSkucHJlZGljdGlvbigpOworICAgIGlmICghKGJhc2VQ
cmVkaWN0aW9uICYgUHJlZGljdEludDMyKSAmJiBiYXNlUHJlZGljdGlvbikgeworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRp
b24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5k
ZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEdQUlRlbXBvcmFyeSBzdG9y
YWdlKHRoaXMpOworICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICBp
ZiAoYXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigpID09IFByZWRpY3RTdHJpbmcpIHsKKyAg
ICAgICAgaWYgKCFpc1N0cmluZ1ByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLm1fdHlwZSkpCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmlu
Z1ZQdHIpKSk7CisKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgc3RvcmFnZVJlZyk7CisgICAg
ICAgIAorICAgICAgICAvLyBTcGVjdWxhdGUgdGhhdCB3ZSdyZSBub3QgYWNjZXNzaW5nIGEgcm9w
ZQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzdG9yYWdlUmVnKSk7CisKKyAgICAg
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBTdHJp
bmdJbXBsOjpkYXRhT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKKyAgICB9IGVsc2UgaWYgKGF0KG5v
ZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUJ5dGVBcnJheSgpKSB7CisgICAgICAgIGlmICgh
aXNCeXRlQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5
cGUpKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVk
Q2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNCeXRlQXJyYXlWUHRy
KSkpOworICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VS
ZWcsIEpTQnl0ZUFycmF5OjpvZmZzZXRPZlN0b3JhZ2UoKSksIHN0b3JhZ2VSZWcpOworICAgIH0g
ZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50OEFycmF5KCkpIHsK
KyAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5n
bG9iYWxEYXRhKCktPmludDhBcnJheURlc2NyaXB0b3IoKTsKKyAgICAgICAgaWYgKCFpc0ludDhB
cnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCisg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJh
c2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CisgICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VP
ZmZzZXQpLCBzdG9yYWdlUmVnKTsKKyAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNo
b3VsZFNwZWN1bGF0ZUludDE2QXJyYXkoKSkgeworICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvciA9IG1faml0Lmdsb2JhbERhdGEoKS0+aW50MTZBcnJheURlc2Ny
aXB0b3IoKTsKKyAgICAgICAgaWYgKCFpc0ludDE2QXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3Iu
bV92cHRyKSkpOworICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CisgICAg
fSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnQzMkFycmF5KCkp
IHsKKyAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2pp
dC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCk7CisgICAgICAgIGlmICghaXNJ
bnQzMkFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBl
KSkKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENl
bGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKKyAgICAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fc3Rv
cmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOworICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEo
KSkuc2hvdWxkU3BlY3VsYXRlVWludDhBcnJheSgpKSB7CisgICAgICAgIGNvbnN0IFR5cGVkQXJy
YXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5
RGVzY3JpcHRvcigpOworICAgICAgICBpZiAoIWlzVWludDhBcnJheVByZWRpY3Rpb24obV9zdGF0
ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgp
LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3Jp
cHRvci5tX3ZwdHIpKSk7CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsK
KyAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZVVpbnQxNkFy
cmF5KCkpIHsKKyAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3Ig
PSBtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpOworICAgICAgICBp
ZiAoIWlzVWludDE2QXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5tX3R5cGUpKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1
bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOworICAgICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0
b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CisgICAgfSBlbHNlIGlmIChhdChub2Rl
LmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVVaW50MzJBcnJheSgpKSB7CisgICAgICAgIGNvbnN0
IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT51
aW50MzJBcnJheURlc2NyaXB0b3IoKTsKKyAgICAgICAgaWYgKCFpc1VpbnQzMkFycmF5UHJlZGlj
dGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5v
ZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0
b3JhZ2VSZWcpOworICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3Vs
YXRlRmxvYXQzMkFycmF5KCkpIHsKKyAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3Io
KTsKKyAgICAgICAgaWYgKCFpc0Zsb2F0MzJBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpT
VmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3Zw
dHIpKSk7CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKKyAgICB9IGVs
c2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgpKSB7
CisgICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yID0gbV9qaXQu
Z2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCk7CisgICAgICAgIGlmICghaXNG
bG9hdDY0QXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5
cGUpKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVk
Q2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOworICAgICAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9z
dG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFp
c0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkK
KyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwo
YmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJy
YXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOworICAgIH0KKyAgICBzdG9yYWdlUmVz
dWx0KHN0b3JhZ2VSZWcsIG1fY29tcGlsZUluZGV4KTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAppbmRleCAyZDEwOWJhN2FkNjk3ZDIyOTQxODMzZmM0YzhlOWRhZDYzY2QxMGIy
Li43YjAzZmJlZGE3OTIzZGE2ZjU1N2U0MmVjMjlhNDVjMjU2YjIwNDU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCkBAIC0xOTY3LDYgKzE5Njcs
NyBAQCBwcml2YXRlOgogICAgICAgICBTaWduZWRUeXBlZEFycmF5LAogICAgICAgICBVbnNpZ25l
ZFR5cGVkQXJyYXkKICAgICB9OworICAgIHZvaWQgY29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0
b3JhZ2UoTm9kZSYpOwogICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSYsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlw
ZWRBcnJheVNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzLCBUeXBlZEFycmF5U2lnbmVkbmVzcyk7CiAg
ICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlE
ZXNjcmlwdG9yJiwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSYsIHNpemVfdCBl
bGVtZW50U2l6ZSwgVHlwZWRBcnJheVNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzLCBUeXBlZEFycmF5
U2lnbmVkbmVzcyk7CiAgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShj
b25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIE5vZGUmLCBzaXplX3QgZWxlbWVudFNpemUsIFR5
cGVkQXJyYXlTcGVjdWxhdGlvblJlcXVpcmVtZW50cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAppbmRleCA3NGI0MTI2M2M3
N2FhY2I1YzZlOGZhYWM4ZmNkNGUzMzc3ZDg2ZDIzLi42NTRiM2Y2NGZhMjljOWU2YTFhZDI1NGMz
MGFmY2VmMzA4MzFiMDFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKQEAgLTI2ODQsMzcgKzI2ODQsMzUgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7ICAg
ICAgICAgICAgCiAgICAgICAgIH0KIAotICAgICAgICBBU1NFUlQobm9kZS5jaGlsZDMoKSA9PSBO
b05vZGUpOwotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOwogICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOwor
ICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOwotCi0gICAgICAgIEdQUlJlZyBiYXNl
UmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhp
cyk7CisgICAgICAgIAogICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICAK
ICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgIC8vIEdldCB0aGUgYXJyYXkgc3RvcmFnZS4gV2UgaGF2ZW4ndCB5ZXQgY2hlY2tlZCB0aGlz
IGlzIGEgSlNBcnJheSwgc28gdGhpcyBpcyBvbmx5IHNhZmUgaWYKLSAgICAgICAgLy8gYW4gYWNj
ZXNzIHdpdGggb2Zmc2V0IEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSBpcyB2YWxpZCBmb3IgYWxs
IEpTQ2VsbHMhCi0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7Ci0KICAgICAg
ICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGFuIGFycmF5LCBhbmQgdGhhdCBwcm9wZXJ0eSBpcyBj
b250YWluZWQgd2l0aGluIG1fdmVjdG9yICg8IG1fdmVjdG9yTGVuZ3RoKS4KICAgICAgICAgLy8g
SWYgd2UgaGF2ZSBwcmVkaWN0ZWQgdGhlIGJhc2UgdG8gYmUgdHlwZSBhcnJheSwgd2UgY2FuIHNr
aXAgdGhlIGNoZWNrLgotICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+anNBcnJheVZQdHIpKSk7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJh
eTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBH
UFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBpZiAoIWlzQXJyYXlQcmVk
aWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJl
ZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAg
ICAgICAgfQogCiAgICAgICAgIC8vIEZJWE1FOiBJbiBjYXNlcyB3aGVyZSB0aGVyZSBhcmUgc3Vi
c2VxdWVudCBieV92YWwgYWNjZXNzZXMgdG8gdGhlIHNhbWUgYmFzZSBpdCBtaWdodCBoZWxwIHRv
IGNhY2hlCiAgICAgICAgIC8vIHRoZSBzdG9yYWdlIHBvaW50ZXIgLSBlc3BlY2lhbGx5IGlmIHRo
ZXJlIGhhcHBlbnMgdG8gYmUgYW5vdGhlciByZWdpc3RlciBmcmVlIHJpZ2h0IG5vdy4gSWYgd2Ug
ZG8gc28sCiAgICAgICAgIC8vIHRoZW4gd2UnbGwgbmVlZCB0byBhbGxvY2F0ZSBhIG5ldyB0ZW1w
b3JhcnkgZm9yIHJlc3VsdC4KICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0Vp
Z2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFRhZy5ncHIoKSk7CiAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHJlc3VsdFRhZy5ncHIoKSwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgc3RvcmFnZVJlZyk7
CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7CiAKLSAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHN0b3JhZ2VSZWcsIG1fY29tcGlsZUluZGV4KTsK
KyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3By
KCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zNjU4LDcg
KzM2NTYsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICBzdG9yYWdlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBi
cmVhazsKICAgICB9Ci0gICAgICAgIAorCisgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9y
YWdlOiB7CisgICAgICAgIGNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKG5vZGUpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBjYXNlIEdldEJ5T2Zmc2V0OiB7CiAgICAgICAg
IFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcywgc3RvcmFnZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCA1MzI3MDBjNzg1ODU5
ZTI4NTlkOWRhY2NkMzBiMDIyMWI2MDEyMTlkLi4xYjU4MTBiOTc2M2JlNGJhMzkwODEwNmI5ZjA4
NjhiZWUwNWVmZWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKQEAgLTI2ODksMTAgKzI2ODksOSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAK
ICAgICAgICAgfQogCi0gICAgICAgIEFTU0VSVChub2RlLmNoaWxkMygpID09IE5vTm9kZSk7CiAg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAg
ICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNo
aWxkMigpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CisgICAgICAgIFN0
b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAKICAgICAgICAgR1BS
UmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBw
cm9wZXJ0eS5ncHIoKTsKQEAgLTI3MDEsMTIgKzI3MDAsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICAvLyBHZXQgdGhlIGFycmF5IHN0b3JhZ2UuIFdlIGhh
dmVuJ3QgeWV0IGNoZWNrZWQgdGhpcyBpcyBhIEpTQXJyYXksIHNvIHRoaXMgaXMgb25seSBzYWZl
IGlmCi0gICAgICAgIC8vIGFuIGFjY2VzcyB3aXRoIG9mZnNldCBKU0FycmF5OjpzdG9yYWdlT2Zm
c2V0KCkgaXMgdmFsaWQgZm9yIGFsbCBKU0NlbGxzIQotICAgICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSks
IHN0b3JhZ2VSZWcpOwotCi0gICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhbiBhcnJheSwg
YW5kIHRoYXQgcHJvcGVydHkgaXMgY29udGFpbmVkIHdpdGhpbiBtX3ZlY3RvciAoPCBtX3ZlY3Rv
ckxlbmd0aCkuCi0gICAgICAgIC8vIElmIHdlIGhhdmUgcHJlZGljdGVkIHRoZSBiYXNlIHRvIGJl
IHR5cGUgYXJyYXksIHdlIGNhbiBza2lwIHRoZSBjaGVjay4KICAgICAgICAgaWYgKCFpc0FycmF5
UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoYmFzZVJlZyksIG5vZGUuY2hpbGQx
KCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcs
IEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwpAQCAtMjcxNCw3ICsyNzA3LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAvLyBGSVhN
RTogSW4gY2FzZXMgd2hlcmUgdGhlcmUgYXJlIHN1YnNlcXVlbnQgYnlfdmFsIGFjY2Vzc2VzIHRv
IHRoZSBzYW1lIGJhc2UgaXQgbWlnaHQgaGVscCB0byBjYWNoZQogICAgICAgICAvLyB0aGUgc3Rv
cmFnZSBwb2ludGVyIC0gZXNwZWNpYWxseSBpZiB0aGVyZSBoYXBwZW5zIHRvIGJlIGFub3RoZXIg
cmVnaXN0ZXIgZnJlZSByaWdodCBub3cuIElmIHdlIGRvIHNvLAogICAgICAgICAvLyB0aGVuIHdl
J2xsIG5lZWQgdG8gYWxsb2NhdGUgYSBuZXcgdGVtcG9yYXJ5IGZvciByZXN1bHQuCi0gICAgICAg
IEdQUlRlbXBvcmFyeSYgcmVzdWx0ID0gc3RvcmFnZTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9C
SkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdC5ncHIoKSk7
CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkpKTsKIApAQCAt
Mjg2NCw3ICsyODU3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgIGNhc2UgUHV0QnlWYWxBbGlhczogewogICAgICAgICBQcmVkaWN0ZWRUeXBlIGJhc2VQ
cmVkaWN0aW9uID0gYXQobm9kZS5jaGlsZDIoKSkucHJlZGljdGlvbigpOwogICAgICAgICBBU1NF
UlRfVU5VU0VEKGJhc2VQcmVkaWN0aW9uLCAoYmFzZVByZWRpY3Rpb24gJiBQcmVkaWN0SW50MzIp
IHx8ICFiYXNlUHJlZGljdGlvbik7Ci0gICAgICAgICAgICAKKwogICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAg
IGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVCeXRlQXJyYXkoKSkgewpAQCAt
MzYxMCw2ICszNjAzLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdl
OiB7CisgICAgICAgIGNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKG5vZGUpOworICAg
ICAgICBicmVhazsKKyAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKICAg
ICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>