<?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>152202</bug_id>
          
          <creation_ts>2015-12-11 16:19:27 -0800</creation_ts>
          <short_desc>Reconsider B3&apos;s constant motion policy</short_desc>
          <delta_ts>2016-01-19 12:55:58 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>150279</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1148601</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-11 16:19:27 -0800</bug_when>
    <thetext>It appears that on asm.js code, our constant motion is wrong:

- It pins tags to registers even though the tags are not used frequently enough to warrant it.
- It doesn&apos;t pin the heap base to a register even though it is used frequently enough to warrant it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148604</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-11 16:20:41 -0800</bug_when>
    <thetext>*** Bug 152107 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156691</commentid>
    <comment_count>2</comment_count>
      <attachid>269282</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-19 12:40:58 -0800</bug_when>
    <thetext>Created attachment 269282
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156693</commentid>
    <comment_count>3</comment_count>
      <attachid>269283</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-19 12:44:35 -0800</bug_when>
    <thetext>Created attachment 269283
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156696</commentid>
    <comment_count>4</comment_count>
      <attachid>269283</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-01-19 12:54:19 -0800</bug_when>
    <thetext>Comment on attachment 269283
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156698</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-19 12:55:58 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/195307</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269282</attachid>
            <date>2016-01-19 12:40:58 -0800</date>
            <delta_ts>2016-01-19 12:44:35 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>23911</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1MzA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBA
CisyMDE2LTAxLTE5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UmVjb25zaWRlciBCMydzIGNvbnN0YW50IG1vdGlvbiBwb2xpY3kKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjIwMgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2hhbmdlcyBtb3ZlQ29uc3RhbnRz
KCkgdG8gaG9pc3QgY29uc3RhbnRzLiBUaGlzIGlzIGEgc3BlZWQtdXAgb24gdGhpbmdzIGxpa2Ug
bWFuZHJlZWwuCisgICAgICAgIEl0IGhhcyBhIGdlbmVyYWxseSBwb3NpdGl2ZSBpbXBhY3Qgb24g
dGhlIE9jdGFuZSBzY29yZSwgYnV0IGl0J3Mgd2l0aGluIG1hcmdpbiBvZiBlcnJvci4KKworICAg
ICAgICBUaGlzIGFsc28gY2hhbmdlcyBJUkMgdG8gbWFrZSBpdCBhIGJpdCBtb3JlIGxpa2VseSB0
byBzcGlsbCBjb25zdGFudHMuIFdlIGRvbid0IHdhbnQgaXQgdG8KKyAgICAgICAgc3BpbGwgdGhl
bSB0b28gbXVjaCwgYmVjYXVzZSB3ZSBjYW4ndCByZWx5IG9uIGZpeE9idmlvdXNTcGlsbHMoKSB0
byBhbHdheXMgcmVwbGFjZSBhIGxvYWQgb2YKKyAgICAgICAgYSBjb25zdGFudCBmcm9tIHRoZSBz
dGFjayB3aXRoIHRoZSBjb25zdGFudCBpdHNlbGYsIGVzcGVjaWFsbHkgaW4gY2FzZSBvZiBpbnN0
cnVjdGlvbnMgdGhhdAorICAgICAgICBuZWVkIGFuIGV4dHJhIHJlZ2lzdGVyIHRvIG1hdGVyaWFs
aXplIHRoZSBpbW1lZGlhdGUuCisKKyAgICAgICAgQWxzbyBmaXhlZCBERkcgZ3JhcGggZHVtcGlu
ZyB0byBwcmludCBhIGJpdCBsZXNzIHRoaW5ncy4gSXQgd2FzIHRyeWluZyB0byBwcmludCB0aGUg
cmVzdWx0cyBvZgorICAgICAgICBjb25zdGFudCBwcm9wZXJ0eSBpbmZlcmVuY2UsIGFuZCB0aGlz
IHNvbWV0aW1lcyBjYXVzZWQgY3Jhc2hlcyB3aGVuIHlvdSBkdW1wZWQgdGhlIGdyYXBoIGF0IGFu
CisgICAgICAgIGlub3Bwb3J0dW5lIHRpbWUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGIzL0IzTW92ZUNvbnN0YW50cy5j
cHA6CisgICAgICAgICogYjMvYWlyL0FpckFyZy5oOgorICAgICAgICAqIGIzL2Fpci9BaXJBcmdJ
bmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmdUaGluZ0hlbHBlcjxU
bXA+Ojppcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZ1RoaW5nSGVscGVyPFRtcD46OmFz
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnVGhpbmdIZWxwZXI8VG1wPjo6Zm9yRWFjaEZh
c3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmdUaGluZ0hlbHBlcjxUbXA+Ojpmb3JFYWNo
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnVGhpbmdIZWxwZXI8QXJnPjo6aXMpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmdUaGluZ0hlbHBlcjxBcmc+Ojphcyk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZ1RoaW5nSGVscGVyPEFyZz46OmZvckVhY2hGYXN0KToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QXJnVGhpbmdIZWxwZXI8QXJnPjo6Zm9yRWFjaCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6aXMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpmb3JFYWNoRmFzdCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkFyZzo6Zm9yRWFjaCk6CisgICAgICAgICogYjMvYWlyL0Fpckl0ZXJhdGVkUmVn
aXN0ZXJDb2FsZXNjaW5nLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyVXNlQ291bnRzLmg6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlVzZUNvdW50czo6VXNlQ291bnRzKToKKyAgICAgICAgKiBk
ZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKwogMjAx
Ni0wMS0xOSAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEFk
ZCBzdXBwb3J0IGZvciBEYXRhRGV0ZWN0b3JzIGluIFdLIChpT1MpLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5NTI5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC00MzMsNiArNDMzLDcgQEAKIAkJMEY2NEIyNzIxQTc4NEJBRjAwNkU0RTY2IC8qIEJp
bmFyeVN3aXRjaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY2NEIyNzAxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjRCMjc5MUE3OTU3QjIw
MDZFNEU2NiAvKiBDYWxsRWRnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjY0QjI3NzFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwICov
OyB9OwogCQkwRjY0QjI3QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc4MUE3OTU3QjIwMDZF
NEU2NiAvKiBDYWxsRWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGNjRFQUYzMUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0RUFGMjFD
NEVDRDA2MDA2MjFFOUIgLyogQWlyQXJnSW5saW5lcy5oICovOyB9OwogCQkwRjY2NkVDMDE4MzU2
NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQkUxODM1NjZGOTAw
RDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2NkVDMTE4MzU2NkY5MDBE
MDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUJGMTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0
ZWNvZGVMaXZlbmVzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGNjY2RUM2MTgzNTY3MkIwMEQwMTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQzIx
ODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgKi87IH07CkBAIC0yNjAxLDYg
KzI2MDIsNyBAQAogCQkwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpbmFyeVN3aXRjaC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0QjI3NzFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVk
Z2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbEVkZ2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0QjI3ODFBNzk1N0IyMDA2RTRFNjYg
LyogQ2FsbEVkZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbEVkZ2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NEVBRjIxQzRFQ0QwNjAwNjIxRTlC
IC8qIEFpckFyZ0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWly
QXJnSW5saW5lcy5oOyBwYXRoID0gYjMvYWlyL0FpckFyZ0lubGluZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjY2NkVCRjE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NjZFQzIxODM1NjcyQjAwRDAxN0Yx
IC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdBdmFpbGFiaWxpdHkuY3BwOyBwYXRoID0gZGZnL0RGR0F2YWlsYWJpbGl0eS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00ODUwLDYgKzQ4NTIsNyBAQAogCQkJCTBG
RUM4NTQ5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmggKi8sCiAJCQkJMEZF
Qzg1NEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAgKi8sCiAJCQkJMEZFQzg1NEIxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckFyZy5oICovLAorCQkJCTBGNjRFQUYyMUM0RUNEMDYwMDYyMUU5
QiAvKiBBaXJBcmdJbmxpbmVzLmggKi8sCiAJCQkJMEZFQzg1NEMxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckJhc2ljQmxvY2suY3BwICovLAogCQkJCTBGRUM4NTREMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJCYXNpY0Jsb2NrLmggKi8sCiAJCQkJMEZCMzg3OEIxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJs
b2NrV29ya2xpc3QuaCAqLywKQEAgLTc1MDYsNiArNzUwOSw3IEBACiAJCQkJQzQ3MDNDQ0UxOTI4
NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkgaW4gSGVhZGVy
cyAqLywKIAkJCQlBNUVBNzEwMzE5RjZERTZGMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19iYWNr
ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcxMDQxOUY2
REU3MjAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NEVBRjMxQzRFQ0QwNjAwNjIxRTlCIC8q
IEFpckFyZ0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MTA1MTlGNkRFNzQwMDk4
RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5IGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTVFQTcxMDYxOUY2REU3NjAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfY29uZmln
dXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MTA3MTlG
NkRFNzgwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2NvbnZlcnNpb25faGVscGVycy5weSBpbiBI
ZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0
YW50cy5jcHAJKHJldmlzaW9uIDE5NTI5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M01vdmVDb25zdGFudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDI3ICs1MywyMiBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIHJ1bigpCiAgICAgewotICAgICAgICAvLyBUaGlzIHBoYXNlIHVzZXMgc3Vw
ZXIgc2ltcGxlIGhldXJpc3RpY3MgdG8gZW5zdXJlIHRoYXQgY29uc3RhbnRzIGFyZSBpbiBwcm9m
aXRhYmxlIHBsYWNlcwotICAgICAgICAvLyBhbmQgYWxzbyBsb3dlcnMgY29uc3RhbnQgbWF0ZXJp
YWxpemF0aW9uIGNvZGUuIENvbnN0YW50cyBtYXJrZWQgImZhc3QiIGJ5IHRoZSBjbGllbnQgYXJl
Ci0gICAgICAgIC8vIGhvaXN0ZWQgdG8gdGhlIGxvd2VzdCBjb21tb24gZG9taW5hdG9yLiBBIHRh
YmxlIGlzIGNyZWF0ZWQgZm9yIGNvbnN0YW50cyB0aGF0IG5lZWQgdG8gYmUKLSAgICAgICAgLy8g
bG9hZGVkIHRvIGJlIG1hdGVyaWFsaXplZCwgYW5kIGFsbCBvZiB0aGVpciBWYWx1ZXMgYXJlIHR1
cm5lZCBpbnRvIGxvYWRzIGZyb20gdGhhdCB0YWJsZS4KLSAgICAgICAgLy8gTm9uLWZhc3QgY29u
c3RhbnRzIGdldCBtYXRlcmlhbGl6ZWQgaW4gdGhlIGJsb2NrIHRoYXQgdXNlcyB0aGVtLiBDb25z
dGFudHMgdGhhdCBhcmUKLSAgICAgICAgLy8gbWF0ZXJpYWxpemVkIGJ5IGxvYWRpbmcgZ2V0IHNw
ZWNpYWwgdHJlYXRtZW50IHdoZW4gdGhleSBnZXQgdXNlZCBpbiBzb21lIGtpbmQgb2YgQW55IGlu
IGEKLSAgICAgICAgLy8gU3RhY2ttYXBWYWx1ZS4gSW4gdGhhdCBjYXNlLCB0aGUgQ29uc3RhbnRz
IGFyZSBzdW5rIHRvIHRoZSBwb2ludCBvZiB1c2UsIHNpbmNlIHRoYXQgYWxsb3dzCi0gICAgICAg
IC8vIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3RvciB0byBzaW5rIHRoZSBjb25zdGFudHMgaW50byBh
biBBcmc6OmltbTY0LgotCi0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYSBiZXR0ZXIgc3Rv
cnkgZm9yIGNvbnN0YW50cy4gRm9yIGV4YW1wbGUsIHRoZSB0YWJsZSB1c2VkIHRvIGhvbGQgZG91
YmxlCi0gICAgICAgIC8vIGNvbnN0YW50cyBzaG91bGQgaGF2ZSBhIHBvaW50ZXIgdG8gaXQgdGhh
dCBpcyBob2lzdGVkLiBJZiB3ZSB3YW50ZWQgdG8gYmUgbW9yZSBhZ2dyZXNzaXZlLAotICAgICAg
ICAvLyB3ZSBjb3VsZCBtYWtlIGNvbnN0YW50IG1hdGVyaWFsaXphdGlvbiBiZSBhIGZlYXR1cmUg
b2YgQWlyOiB3ZSBjb3VsZCBsYWJlbCBzb21lIFRtcHMgYXMKLSAgICAgICAgLy8gYmVpbmcgdW5t
YXRlcmlhbGl6ZWQgY29uc3RhbnRzIGFuZCBoYXZlIGEgbGF0ZSBBaXIgcGhhc2UgLSBwb3N0IHJl
Z2lzdGVyIGFsbG9jYXRpb24gLSB0aGF0Ci0gICAgICAgIC8vIGNyZWF0ZXMgbWF0ZXJpYWxpemF0
aW9ucyBvZiB0aG9zZSBjb25zdGFudCBUbXBzIGJ5IHNjYXZlbmdpbmcgbGVmdG92ZXIgcmVnaXN0
ZXJzLgotCi0gICAgICAgIGhvaXN0RmFzdENvbnN0YW50cygpOwotICAgICAgICBzaW5rU2xvd0Nv
bnN0YW50cygpOworICAgICAgICBob2lzdENvbnN0YW50cygKKyAgICAgICAgICAgIFsmXSAoY29u
c3QgVmFsdWVLZXkmIGtleSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGtleS5v
cGNvZGUoKSA9PSBDb25zdEZsb2F0IHx8IGtleS5vcGNvZGUoKSA9PSBDb25zdERvdWJsZTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgbG93ZXJGUENvbnN0YW50cygpOworICAg
ICAgICAKKyAgICAgICAgaG9pc3RDb25zdGFudHMoCisgICAgICAgICAgICBbJl0gKGNvbnN0IFZh
bHVlS2V5JiBrZXkpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBrZXkub3Bjb2Rl
KCkgPT0gQ29uc3QzMiB8fCBrZXkub3Bjb2RlKCkgPT0gQ29uc3Q2NDsKKyAgICAgICAgICAgIH0p
OwogICAgIH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIGhvaXN0RmFzdENvbnN0YW50cygpCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRmlsdGVyPgorICAgIHZvaWQgaG9pc3RDb25zdGFudHMoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIpCiAgICAgewogICAgICAgICBEb21pbmF0b3JzJiBkb21pbmF0b3JzID0g
bV9wcm9jLmRvbWluYXRvcnMoKTsKICAgICAgICAgSGFzaE1hcDxWYWx1ZUtleSwgVmFsdWUqPiB2
YWx1ZUZvckNvbnN0YW50OwpAQCAtODQsNyArNzksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
Zm9yIChWYWx1ZSogdmFsdWUgOiAqYmxvY2spIHsKICAgICAgICAgICAgICAgICBmb3IgKFZhbHVl
KiYgY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkgewogICAgICAgICAgICAgICAgICAgICBWYWx1
ZUtleSBrZXkgPSBjaGlsZC0+a2V5KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9wcm9j
LmlzRmFzdENvbnN0YW50KGtleSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghZmlsdGVyKGtl
eSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgICAg
ICAgICBhdXRvIHJlc3VsdCA9IHZhbHVlRm9yQ29uc3RhbnQuYWRkKGtleSwgY2hpbGQpOwpAQCAt
MTE2LDcgKzExMSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5mcmVx
dWVuY3koKSA8IHZhbHVlLT5vd25lci0+ZnJlcXVlbmN5KCkpCiAgICAgICAgICAgICAgICAgICAg
IHZhbHVlLT5vd25lciA9IGJsb2NrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbWF0ZXJp
YWxpemF0aW9uc1tlbnRyeS52YWx1ZS0+b3duZXJdLmFwcGVuZChlbnRyeS52YWx1ZSk7CisgICAg
ICAgICAgICBtYXRlcmlhbGl6YXRpb25zW3ZhbHVlLT5vd25lcl0uYXBwZW5kKHZhbHVlKTsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIEdldCByaWQgb2YgVmFsdWUncyB0aGF0IGFyZSBmYXN0IGNv
bnN0YW50cyBidXQgYXJlbid0IGNhbm9uaWNhbC4gQWxzbyByZW1vdmUgdGhlIGNhbm9uaWNhbApA
QCAtMTI0LDcgKzExOSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIGZvciAoVmFsdWUqJiB2YWx1ZSA6ICpibG9jaykg
ewogICAgICAgICAgICAgICAgIFZhbHVlS2V5IGtleSA9IHZhbHVlLT5rZXkoKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIW1fcHJvYy5pc0Zhc3RDb25zdGFudChrZXkpKQorICAgICAgICAgICAgICAg
IGlmICghZmlsdGVyKGtleSkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlRm9yQ29uc3RhbnQuZ2V0KGtleSkgPT0gdmFsdWUpCkBAIC0x
NDEsNyArMTM2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBi
bG9jay0+YXQodmFsdWVJbmRleCk7CiAgICAgICAgICAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQg
OiB2YWx1ZS0+Y2hpbGRyZW4oKSkgewogICAgICAgICAgICAgICAgICAgICBWYWx1ZUtleSBrZXkg
PSBjaGlsZC0+a2V5KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9wcm9jLmlzRmFzdENv
bnN0YW50KGtleSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghZmlsdGVyKGtleSkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgICAgICAgICAvLyBJ
ZiB3ZSBlbmNvdW50ZXIgYSBmYXN0IGNvbnN0YW50LCB0aGVuIGl0IG11c3QgYmUgY2Fub25pY2Fs
LCBzaW5jZSB3ZSBhbHJlYWR5CkBAIC0xNzQsMTYgKzE2OSwxMSBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgCi0gICAgdm9pZCBzaW5rU2xvd0NvbnN0YW50cygpCisKKyAgICB2b2lkIGxvd2VyRlBDb25z
dGFudHMoKQogICAgIHsKLSAgICAgICAgLy8gRmlyc3Qgd2UgbmVlZCB0byBmaWd1cmUgb3V0IHdo
aWNoIGNvbnN0YW50cyBnbyBpbnRvIHRoZSBkYXRhIHNlY3Rpb24uIFRoZXNlIGFyZSBub24temVy
bwotICAgICAgICAvLyBkb3VibGUgY29uc3RhbnRzLgogICAgICAgICBmb3IgKFZhbHVlKiB2YWx1
ZSA6IG1fcHJvYy52YWx1ZXMoKSkgewogICAgICAgICAgICAgVmFsdWVLZXkga2V5ID0gdmFsdWUt
PmtleSgpOwotICAgICAgICAgICAgaWYgKCFuZWVkc01vdGlvbihrZXkpKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbV90b1JlbW92ZS5hcHBlbmQodmFsdWUpOwogICAg
ICAgICAgICAgaWYgKGdvZXNJblRhYmxlKGtleSkpCiAgICAgICAgICAgICAgICAgbV9jb25zdFRh
YmxlLmFkZChrZXksIG1fY29uc3RUYWJsZS5zaXplKCkpOwogICAgICAgICB9CkBAIC0xOTEsNjcg
KzE4MSw1MiBAQCBwcml2YXRlOgogICAgICAgICBtX2RhdGFTZWN0aW9uID0gc3RhdGljX2Nhc3Q8
aW50NjRfdCo+KG1fcHJvYy5hZGREYXRhU2VjdGlvbihtX2NvbnN0VGFibGUuc2l6ZSgpICogc2l6
ZW9mKGludDY0X3QpKSk7CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2NvbnN0VGFibGUp
CiAgICAgICAgICAgICBtX2RhdGFTZWN0aW9uW2VudHJ5LnZhbHVlXSA9IGVudHJ5LmtleS52YWx1
ZSgpOwotICAgICAgICAKKworICAgICAgICBJbmRleFNldDxWYWx1ZT4gb2ZmTGltaXRzOwogICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7Ci0gICAgICAgICAgICBtX2Nv
bnN0YW50cy5jbGVhcigpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKyt2YWx1ZUluZGV4
KSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0gYmxvY2stPmF0KHZhbHVlSW5kZXgp
OwotICAgICAgICAgICAgICAgIFN0YWNrbWFwVmFsdWUqIHN0YWNrbWFwID0gdmFsdWUtPmFzPFN0
YWNrbWFwVmFsdWU+KCk7CisgICAgICAgICAgICAgICAgU3RhY2ttYXBWYWx1ZSogdmFsdWUgPSBi
bG9jay0+YXQodmFsdWVJbmRleCktPmFzPFN0YWNrbWFwVmFsdWU+KCk7CisgICAgICAgICAgICAg
ICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSW5kZXggPSAwOyBjaGlsZEluZGV4IDwgdmFsdWUt
Pm51bUNoaWxkcmVuKCk7ICsrY2hpbGRJbmRleCkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
IXZhbHVlLT5jb25zdHJhaW5lZENoaWxkKGNoaWxkSW5kZXgpLnJlcCgpLmlzQW55KCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgIFZhbHVlKiYgY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoY2hpbGRJbmRleCk7
CiAgICAgICAgICAgICAgICAgICAgIFZhbHVlS2V5IGtleSA9IGNoaWxkLT5rZXkoKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFuZWVkc01vdGlvbihrZXkpKQorICAgICAgICAgICAgICAgICAg
ICBpZiAoIWdvZXNJblRhYmxlKGtleSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2ttYXAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICYmIGdvZXNJblRhYmxlKGtleSkKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIHN0
YWNrbWFwLT5jb25zdHJhaW5lZENoaWxkKGNoaWxkSW5kZXgpLnJlcCgpLmlzQW55KCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB3ZWlyZCBzcGVjaWFsIGNhc2UuIFdo
ZW4gd2UgY29uc3RhbnQtZm9sZCBhbiBhcmd1bWVudCB0byBhCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBzdGFja21hcCwgYW5kIHRoYXQgYXJndW1lbnQgaGFzIHRoZSBBbnkgY29uc3RyYWlu
dCwgd2Ugd2FudCB0byBqdXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0ZWxsIHRoZSBz
dGFja21hcCdzIGdlbmVyYXRvciB0aGF0IHRoZSBhcmd1bWVudCBpcyBhIGNvbnN0YW50IHJhdGhl
cgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhhbiBtYXRlcmlhbGl6aW5nIGl0IGluIGEg
cmVnaXN0ZXIuIEZvciB0aGlzIHRvIHdvcmssIHdlIG5lZWQKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGxvd2VyVG9BaXIgdG8gc2VlIHRoaXMgYXJndW1lbnQgYXMgYSBjb25zdGFudCByYXRo
ZXIgdGhhbiBhcyBhIGxvYWQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZyb20gYSB0YWJs
ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0
VmFsdWUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVJbmRleCwga2V5Lm1hdGVy
aWFsaXplKG1fcHJvYywgdmFsdWUtPm9yaWdpbigpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBtYXRlcmlhbGl6ZSh2YWx1ZUluZGV4LCBrZXks
IHZhbHVlLT5vcmlnaW4oKSk7CisgICAgICAgICAgICAgICAgICAgIGNoaWxkID0gbV9pbnNlcnRp
b25TZXQuaW5zZXJ0VmFsdWUoCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUluZGV4LCBr
ZXkubWF0ZXJpYWxpemUobV9wcm9jLCB2YWx1ZS0+b3JpZ2luKCkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgb2ZmTGltaXRzLmFkZChjaGlsZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUo
YmxvY2spOwogICAgICAgICB9CiAKLSAgICAgICAgZm9yIChWYWx1ZSogdG9SZW1vdmUgOiBtX3Rv
UmVtb3ZlKQotICAgICAgICAgICAgdG9SZW1vdmUtPnJlcGxhY2VXaXRoTm9wKCk7Ci0gICAgfQot
ICAgIAotICAgIFZhbHVlKiBtYXRlcmlhbGl6ZSh1bnNpZ25lZCB2YWx1ZUluZGV4LCBjb25zdCBW
YWx1ZUtleSYga2V5LCBjb25zdCBPcmlnaW4mIG9yaWdpbikKLSAgICB7Ci0gICAgICAgIGlmIChW
YWx1ZSogcmVzdWx0ID0gbV9jb25zdGFudHMuZ2V0KGtleSkpCi0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4IDwgYmxvY2st
PnNpemUoKTsgKyt2YWx1ZUluZGV4KSB7CisgICAgICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0g
YmxvY2stPmF0KHZhbHVlSW5kZXgpOworICAgICAgICAgICAgICAgIFZhbHVlS2V5IGtleSA9IHZh
bHVlLT5rZXkoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWdvZXNJblRhYmxlKGtleSkpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChvZmZMaW1pdHMu
Y29udGFpbnModmFsdWUpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAg
ICAvLyBOb3RlIHRoYXQgd2UgZGVsaWJlcmF0ZWx5IGRvbid0IGRvIHRoaXMgaW4gb25lIGFkZCgp
IGJlY2F1c2UgdGhpcyBpcyBhIHJlY3Vyc2l2ZSBmdW5jdGlvbgotICAgICAgICAvLyB0aGF0IG1h
eSByZWhhc2ggdGhlIG1hcC4KKyAgICAgICAgICAgICAgICBWYWx1ZSogdGFibGVCYXNlID0gbV9p
bnNlcnRpb25TZXQuaW5zZXJ0SW50Q29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAgIHZhbHVl
SW5kZXgsIHZhbHVlLT5vcmlnaW4oKSwgcG9pbnRlclR5cGUoKSwKKyAgICAgICAgICAgICAgICAg
ICAgYml0d2lzZV9jYXN0PGludHB0cl90PihtX2RhdGFTZWN0aW9uKSk7CisgICAgICAgICAgICAg
ICAgVmFsdWUqIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxNZW1vcnlWYWx1ZT4oCisg
ICAgICAgICAgICAgICAgICAgIHZhbHVlSW5kZXgsIExvYWQsIHZhbHVlLT50eXBlKCksIHZhbHVl
LT5vcmlnaW4oKSwgdGFibGVCYXNlLAorICAgICAgICAgICAgICAgICAgICBzaXplb2YoaW50NjRf
dCkgKiBtX2NvbnN0VGFibGUuZ2V0KGtleSkpOworICAgICAgICAgICAgICAgIHZhbHVlLT5yZXBs
YWNlV2l0aElkZW50aXR5KHJlc3VsdCk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgVmFsdWUq
IHJlc3VsdDsKLSAgICAgICAgaWYgKGdvZXNJblRhYmxlKGtleSkpIHsKLSAgICAgICAgICAgIFZh
bHVlKiB0YWJsZUJhc2UgPSBtYXRlcmlhbGl6ZSgKLSAgICAgICAgICAgICAgICB2YWx1ZUluZGV4
LAotICAgICAgICAgICAgICAgIFZhbHVlS2V5KAotICAgICAgICAgICAgICAgICAgICBjb25zdFB0
ck9wY29kZSgpLCBwb2ludGVyVHlwZSgpLAotICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQ2NF90PihiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KG1fZGF0YVNlY3Rpb24pKSksCi0gICAg
ICAgICAgICAgICAgb3JpZ2luKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0
Lmluc2VydDxNZW1vcnlWYWx1ZT4oCi0gICAgICAgICAgICAgICAgdmFsdWVJbmRleCwgTG9hZCwg
a2V5LnR5cGUoKSwgb3JpZ2luLCB0YWJsZUJhc2UsCi0gICAgICAgICAgICAgICAgc2l6ZW9mKGlu
dDY0X3QpICogbV9jb25zdFRhYmxlLmdldChrZXkpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnRWYWx1ZSh2YWx1ZUluZGV4LCBrZXku
bWF0ZXJpYWxpemUobV9wcm9jLCBvcmlnaW4pKTsKLSAgICAgICAgbV9jb25zdGFudHMuYWRkKGtl
eSwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CiAgICAgfQogCiAgICAgYm9vbCBnb2Vz
SW5UYWJsZShjb25zdCBWYWx1ZUtleSYga2V5KQpAQCAtMjYwLDExICsyMzUsNiBAQCBwcml2YXRl
OgogICAgICAgICAgICAgfHwgKGtleS5vcGNvZGUoKSA9PSBDb25zdEZsb2F0ICYmIGtleSAhPSBm
bG9hdFplcm8oKSk7CiAgICAgfQogCi0gICAgYm9vbCBuZWVkc01vdGlvbihjb25zdCBWYWx1ZUtl
eSYga2V5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGtleS5pc0NvbnN0YW50KCkgJiYgIW1fcHJv
Yy5pc0Zhc3RDb25zdGFudChrZXkpOwotICAgIH0KLQogICAgIHN0YXRpYyBWYWx1ZUtleSBkb3Vi
bGVaZXJvKCkKICAgICB7CiAgICAgICAgIHJldHVybiBWYWx1ZUtleShDb25zdERvdWJsZSwgRG91
YmxlLCAwLjApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZp
c2lvbiAxOTUyOTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDc4LDYgKzEwNzgsMTggQEAgcHVibGljOgogCiAgICAgYm9vbCB1
c2VzVG1wKEFpcjo6VG1wIHRtcCkgY29uc3Q7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUaGlu
Zz4KKyAgICBib29sIGlzKCkgY29uc3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZz4K
KyAgICBUaGluZyBhcygpIGNvbnN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGhpbmcsIHR5
cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoRmFzdChjb25zdCBGdW5jdG9yJik7CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZywgdHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lk
IGZvckVhY2goUm9sZSwgVHlwZSwgV2lkdGgsIGNvbnN0IEZ1bmN0b3ImKTsKKwogICAgIC8vIFRo
aXMgaXMgc21hcnQgZW5vdWdoIHRvIGtub3cgdGhhdCBhbiBhZGRyZXNzIGFyZyBpbiBhIERlZiBv
ciBVc2VEZWYgcnVsZSB3aWxsIHVzZSBpdHMKICAgICAvLyB0bXBzIGFuZCBuZXZlciBkZWYgdGhl
bS4gRm9yIGV4YW1wbGUsIHRoaXM6CiAgICAgLy8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQXJnSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQXJnSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBcmdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBBaXJBcmdJbmxpbmVzX2gKKyNkZWZpbmUgQWlyQXJnSW5saW5lc19oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEFyZ1RoaW5nSGVscGVyOworCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmdUaGluZ0hlbHBlcjxU
bXA+IHsKKyAgICBzdGF0aWMgYm9vbCBpcyhjb25zdCBBcmcmIGFyZykKKyAgICB7CisgICAgICAg
IHJldHVybiBhcmcuaXNUbXAoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgVG1wIGFzKGNvbnN0IEFy
ZyYgYXJnKQorICAgIHsKKyAgICAgICAgaWYgKGlzKGFyZykpCisgICAgICAgICAgICByZXR1cm4g
YXJnLnRtcCgpOworICAgICAgICByZXR1cm4gVG1wKCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoRmFzdChBcmcmIGFyZywg
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGFyZy5mb3JFYWNoVG1wRmFz
dChmdW5jdG9yKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAg
IHN0YXRpYyB2b2lkIGZvckVhY2goQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUg
dHlwZSwgQXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7Cisg
ICAgICAgIGFyZy5mb3JFYWNoVG1wKHJvbGUsIHR5cGUsIHdpZHRoLCBmdW5jdG9yKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmdUaGluZ0hlbHBlcjxBcmc+IHsKKyAgICBzdGF0
aWMgYm9vbCBpcyhjb25zdCBBcmcmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgc3RhdGljIEFyZyBhcyhjb25zdCBBcmcmIGFyZykKKyAgICB7CisgICAgICAgIHJl
dHVybiBhcmc7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBz
dGF0aWMgdm9pZCBmb3JFYWNoRmFzdChBcmcmIGFyZywgY29uc3QgRnVuY3RvciYgZnVuY3RvcikK
KyAgICB7CisgICAgICAgIGZ1bmN0b3IoYXJnKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2goQXJnJiBhcmcsIEFyZzo6Um9s
ZSByb2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgRnVuY3RvciYg
ZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZ1bmN0b3IoYXJnLCByb2xlLCB0eXBlLCB3aWR0aCk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVGhpbmc+Citib29sIEFyZzo6aXMoKSBj
b25zdAoreworICAgIHJldHVybiBBcmdUaGluZ0hlbHBlcjxUaGluZz46OmlzKCp0aGlzKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVGhpbmc+CitUaGluZyBBcmc6OmFzKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gQXJnVGhpbmdIZWxwZXI8VGhpbmc+OjphcygqdGhpcyk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBBcmc6OmZvckVhY2hGYXN0
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgQXJnVGhpbmdIZWxwZXI8VGhpbmc+Ojpm
b3JFYWNoRmFzdCgqdGhpcywgZnVuY3Rvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRoaW5n
LCB0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBBcmc6OmZvckVhY2goUm9sZSByb2xlLCBUeXBlIHR5
cGUsIFdpZHRoIHdpZHRoLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIEFyZ1RoaW5n
SGVscGVyPFRoaW5nPjo6Zm9yRWFjaCgqdGhpcywgcm9sZSwgdHlwZSwgd2lkdGgsIGZ1bmN0b3Ip
OworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQXJnSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdp
c3RlckNvYWxlc2NpbmcuY3BwCShyZXZpc2lvbiAxOTUyOTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTQ4LDYgKzk0OCwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgY29uc3QgVXNl
Q291bnRzPFRtcD46OkNvdW50cyYgY291bnRzID0gbV91c2VDb3VudHNbdG1wXTsKICAgICAgICAg
ICAgIGRvdWJsZSB1c2VzID0gY291bnRzLm51bVdhcm1Vc2VzICsgY291bnRzLm51bURlZnM7CiAK
KyAgICAgICAgICAgIC8vIElmIGl0J3MgYSBjb25zdGFudCwgdGhlbiBpdCdzIG5vdCBhcyBiYWQg
dG8gc3BpbGwuIFdlIGNhbiByZW1hdGVyaWFsaXplIGl0IGluIG1hbnkKKyAgICAgICAgICAgIC8v
IGNhc2VzLgorICAgICAgICAgICAgaWYgKGNvdW50cy5udW1Db25zdERlZnMgPT0gY291bnRzLm51
bURlZnMpCisgICAgICAgICAgICAgICAgdXNlcyAvPSAyOworCiAgICAgICAgICAgICByZXR1cm4g
ZGVncmVlIC8gdXNlczsKICAgICAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJVc2VDb3VudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclVzZUNvdW50cy5oCShyZXZpc2lvbiAxOTUyOTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclVzZUNvdW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDcgKzI4
LDcgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKLSNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNs
dWRlICJBaXJBcmdJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWlyQmxvY2tXb3JrbGlzdC5oIgogI2lu
Y2x1ZGUgIkFpckNvZGUuaCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgpAQCAtNTcsNiAr
NTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIGRvdWJsZSBudW1XYXJtVXNlcyB7IDAgfTsKICAgICAg
ICAgZG91YmxlIG51bUNvbGRVc2VzIHsgMCB9OwogICAgICAgICBkb3VibGUgbnVtRGVmcyB7IDAg
fTsKKyAgICAgICAgZG91YmxlIG51bUNvbnN0RGVmcyB7IDAgfTsKICAgICB9OwogICAgIAogICAg
IFVzZUNvdW50cyhDb2RlJiBjb2RlKQpAQCAtODcsNiArODgsMTEgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY291bnRzLm51bURlZnMgKz0gZnJlcXVlbmN5OwogICAgICAgICAgICAg
ICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGlmICgoaW5zdC5vcGNvZGUgPT0gTW92ZSB8
fCBpbnN0Lm9wY29kZSA9PSBNb3ZlMzIpCisgICAgICAgICAgICAgICAgICAgICYmIGluc3QuYXJn
c1swXS5pc1NvbWVJbW0oKQorICAgICAgICAgICAgICAgICAgICAmJiBpbnN0LmFyZ3NbMV0uaXM8
VGhpbmc+KCkpCisgICAgICAgICAgICAgICAgICAgIG1fY291bnRzLmFkZChpbnN0LmFyZ3NbMV0u
YXM8VGhpbmc+KCksIENvdW50cygpKS5pdGVyYXRvci0+dmFsdWUubnVtQ29uc3REZWZzKys7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE5NTI5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogLy8gV2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW4g
ZXhwZXJpbWVudGFsIHRyYW5zaXRpb24gZnJvbSBMTFZNIHRvIEIzIGFzIHRoZSBiYWNrZW5kIGZv
ciB0aGUgRlRMLiBXZSBkb24ndAogLy8geWV0IGtub3cgaG93IGl0IHdpbGwgdHVybiBvdXQuIEZv
ciBub3csIHRoaXMgZmxhZyB3aWxsIGNvbnRyb2wgd2hldGhlciBGVEwgdXNlcyBCMy4gUmVtZW1i
ZXIgdG8gc2V0IHRoaXMKIC8vIHRvIDAgYmVmb3JlIGNvbW1pdHRpbmchCi0jZGVmaW5lIEZUTF9V
U0VTX0IzIDAKKyNkZWZpbmUgRlRMX1VTRVNfQjMgMQogCiBzdHJ1Y3QgTm9kZTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE5NTI5OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzEsMTEgKzI3MSw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QKICAgICBpZiAobm9kZS0+aGFzTXVsdGlHZXRCeU9mZnNldERhdGEoKSkgewogICAgICAgICBN
dWx0aUdldEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCk7
CiAgICAgICAgIG91dC5wcmludChjb21tYSwgImlkIiwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCAi
eyIsIGlkZW50aWZpZXJzKClbZGF0YS5pZGVudGlmaWVyTnVtYmVyXSwgIn0iKTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEuY2FzZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEuY2FzZXMuc2l6ZSgpOyArK2kpCiAgICAg
ICAgICAgICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4dChkYXRhLmNhc2VzW2ldLCBjb250ZXh0
KSk7Ci0gICAgICAgICAgICBpZiAoZGF0YS5jYXNlc1tpXS5tZXRob2QoKS5raW5kKCkgPT0gR2V0
QnlPZmZzZXRNZXRob2Q6OkxvYWQpCi0gICAgICAgICAgICAgICAgb3V0LnByaW50KCIgKGluZmVy
cmVkIHZhbHVlID0gIiwgaW5Db250ZXh0KGluZmVycmVkVmFsdWVGb3JQcm9wZXJ0eShkYXRhLmNh
c2VzW2ldLnNldCgpLCBpZGVudGlmaWVycygpW2RhdGEuaWRlbnRpZmllck51bWJlcl0pLCBjb250
ZXh0KSwgIikiKTsKLSAgICAgICAgfQogICAgIH0KICAgICBpZiAobm9kZS0+aGFzTXVsdGlQdXRC
eU9mZnNldERhdGEoKSkgewogICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5v
ZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269283</attachid>
            <date>2016-01-19 12:44:35 -0800</date>
            <delta_ts>2016-01-19 12:54:19 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>23322</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk1MzA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBA
CisyMDE2LTAxLTE5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UmVjb25zaWRlciBCMydzIGNvbnN0YW50IG1vdGlvbiBwb2xpY3kKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjIwMgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2hhbmdlcyBtb3ZlQ29uc3RhbnRz
KCkgdG8gaG9pc3QgY29uc3RhbnRzLiBUaGlzIGlzIGEgc3BlZWQtdXAgb24gdGhpbmdzIGxpa2Ug
bWFuZHJlZWwuCisgICAgICAgIEl0IGhhcyBhIGdlbmVyYWxseSBwb3NpdGl2ZSBpbXBhY3Qgb24g
dGhlIE9jdGFuZSBzY29yZSwgYnV0IGl0J3Mgd2l0aGluIG1hcmdpbiBvZiBlcnJvci4KKworICAg
ICAgICBUaGlzIGFsc28gY2hhbmdlcyBJUkMgdG8gbWFrZSBpdCBhIGJpdCBtb3JlIGxpa2VseSB0
byBzcGlsbCBjb25zdGFudHMuIFdlIGRvbid0IHdhbnQgaXQgdG8KKyAgICAgICAgc3BpbGwgdGhl
bSB0b28gbXVjaCwgYmVjYXVzZSB3ZSBjYW4ndCByZWx5IG9uIGZpeE9idmlvdXNTcGlsbHMoKSB0
byBhbHdheXMgcmVwbGFjZSBhIGxvYWQgb2YKKyAgICAgICAgYSBjb25zdGFudCBmcm9tIHRoZSBz
dGFjayB3aXRoIHRoZSBjb25zdGFudCBpdHNlbGYsIGVzcGVjaWFsbHkgaW4gY2FzZSBvZiBpbnN0
cnVjdGlvbnMgdGhhdAorICAgICAgICBuZWVkIGFuIGV4dHJhIHJlZ2lzdGVyIHRvIG1hdGVyaWFs
aXplIHRoZSBpbW1lZGlhdGUuCisKKyAgICAgICAgQWxzbyBmaXhlZCBERkcgZ3JhcGggZHVtcGlu
ZyB0byBwcmludCBhIGJpdCBsZXNzIHRoaW5ncy4gSXQgd2FzIHRyeWluZyB0byBwcmludCB0aGUg
cmVzdWx0cyBvZgorICAgICAgICBjb25zdGFudCBwcm9wZXJ0eSBpbmZlcmVuY2UsIGFuZCB0aGlz
IHNvbWV0aW1lcyBjYXVzZWQgY3Jhc2hlcyB3aGVuIHlvdSBkdW1wZWQgdGhlIGdyYXBoIGF0IGFu
CisgICAgICAgIGlub3Bwb3J0dW5lIHRpbWUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGIzL0IzTW92ZUNvbnN0YW50cy5j
cHA6CisgICAgICAgICogYjMvYWlyL0FpckFyZy5oOgorICAgICAgICAqIGIzL2Fpci9BaXJBcmdJ
bmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmdUaGluZ0hlbHBlcjxU
bXA+Ojppcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZ1RoaW5nSGVscGVyPFRtcD46OmFz
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnVGhpbmdIZWxwZXI8VG1wPjo6Zm9yRWFjaEZh
c3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmdUaGluZ0hlbHBlcjxUbXA+Ojpmb3JFYWNo
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnVGhpbmdIZWxwZXI8QXJnPjo6aXMpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmdUaGluZ0hlbHBlcjxBcmc+Ojphcyk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZ1RoaW5nSGVscGVyPEFyZz46OmZvckVhY2hGYXN0KToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QXJnVGhpbmdIZWxwZXI8QXJnPjo6Zm9yRWFjaCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6aXMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpmb3JFYWNoRmFzdCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkFyZzo6Zm9yRWFjaCk6CisgICAgICAgICogYjMvYWlyL0Fpckl0ZXJhdGVkUmVn
aXN0ZXJDb2FsZXNjaW5nLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyVXNlQ291bnRzLmg6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlVzZUNvdW50czo6VXNlQ291bnRzKToKKyAgICAgICAgKiBk
ZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKwogMjAx
Ni0wMS0xOSAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEFk
ZCBzdXBwb3J0IGZvciBEYXRhRGV0ZWN0b3JzIGluIFdLIChpT1MpLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5NTI5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC00MzMsNiArNDMzLDcgQEAKIAkJMEY2NEIyNzIxQTc4NEJBRjAwNkU0RTY2IC8qIEJp
bmFyeVN3aXRjaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY2NEIyNzAxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjRCMjc5MUE3OTU3QjIw
MDZFNEU2NiAvKiBDYWxsRWRnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjY0QjI3NzFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwICov
OyB9OwogCQkwRjY0QjI3QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc4MUE3OTU3QjIwMDZF
NEU2NiAvKiBDYWxsRWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGNjRFQUYzMUM0RUNEMDYwMDYyMUU5QiAvKiBBaXJBcmdJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0RUFGMjFD
NEVDRDA2MDA2MjFFOUIgLyogQWlyQXJnSW5saW5lcy5oICovOyB9OwogCQkwRjY2NkVDMDE4MzU2
NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQkUxODM1NjZGOTAw
RDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2NkVDMTE4MzU2NkY5MDBE
MDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUJGMTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0
ZWNvZGVMaXZlbmVzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGNjY2RUM2MTgzNTY3MkIwMEQwMTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQzIx
ODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgKi87IH07CkBAIC0yNjAxLDYg
KzI2MDIsNyBAQAogCQkwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpbmFyeVN3aXRjaC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0QjI3NzFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVk
Z2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbEVkZ2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY0QjI3ODFBNzk1N0IyMDA2RTRFNjYg
LyogQ2FsbEVkZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbEVkZ2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NEVBRjIxQzRFQ0QwNjAwNjIxRTlC
IC8qIEFpckFyZ0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWly
QXJnSW5saW5lcy5oOyBwYXRoID0gYjMvYWlyL0FpckFyZ0lubGluZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjY2NkVCRjE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NjZFQzIxODM1NjcyQjAwRDAxN0Yx
IC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdBdmFpbGFiaWxpdHkuY3BwOyBwYXRoID0gZGZnL0RGR0F2YWlsYWJpbGl0eS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00ODUwLDYgKzQ4NTIsNyBAQAogCQkJCTBG
RUM4NTQ5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmggKi8sCiAJCQkJMEZF
Qzg1NEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAgKi8sCiAJCQkJMEZFQzg1NEIxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckFyZy5oICovLAorCQkJCTBGNjRFQUYyMUM0RUNEMDYwMDYyMUU5
QiAvKiBBaXJBcmdJbmxpbmVzLmggKi8sCiAJCQkJMEZFQzg1NEMxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckJhc2ljQmxvY2suY3BwICovLAogCQkJCTBGRUM4NTREMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJCYXNpY0Jsb2NrLmggKi8sCiAJCQkJMEZCMzg3OEIxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJs
b2NrV29ya2xpc3QuaCAqLywKQEAgLTc1MDYsNiArNzUwOSw3IEBACiAJCQkJQzQ3MDNDQ0UxOTI4
NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2pzX2JhY2tlbmRfY29tbWFuZHMucHkgaW4gSGVhZGVy
cyAqLywKIAkJCQlBNUVBNzEwMzE5RjZERTZGMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19iYWNr
ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcxMDQxOUY2
REU3MjAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NEVBRjMxQzRFQ0QwNjAwNjIxRTlCIC8q
IEFpckFyZ0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MTA1MTlGNkRFNzQwMDk4
RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5IGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTVFQTcxMDYxOUY2REU3NjAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfY29uZmln
dXJhdGlvbl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MTA3MTlG
NkRFNzgwMDk4RjVFQyAvKiBnZW5lcmF0ZV9vYmpjX2NvbnZlcnNpb25faGVscGVycy5weSBpbiBI
ZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0
YW50cy5jcHAJKHJldmlzaW9uIDE5NTI5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M01vdmVDb25zdGFudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDI3ICs1MywyMiBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIHJ1bigpCiAgICAgewotICAgICAgICAvLyBUaGlzIHBoYXNlIHVzZXMgc3Vw
ZXIgc2ltcGxlIGhldXJpc3RpY3MgdG8gZW5zdXJlIHRoYXQgY29uc3RhbnRzIGFyZSBpbiBwcm9m
aXRhYmxlIHBsYWNlcwotICAgICAgICAvLyBhbmQgYWxzbyBsb3dlcnMgY29uc3RhbnQgbWF0ZXJp
YWxpemF0aW9uIGNvZGUuIENvbnN0YW50cyBtYXJrZWQgImZhc3QiIGJ5IHRoZSBjbGllbnQgYXJl
Ci0gICAgICAgIC8vIGhvaXN0ZWQgdG8gdGhlIGxvd2VzdCBjb21tb24gZG9taW5hdG9yLiBBIHRh
YmxlIGlzIGNyZWF0ZWQgZm9yIGNvbnN0YW50cyB0aGF0IG5lZWQgdG8gYmUKLSAgICAgICAgLy8g
bG9hZGVkIHRvIGJlIG1hdGVyaWFsaXplZCwgYW5kIGFsbCBvZiB0aGVpciBWYWx1ZXMgYXJlIHR1
cm5lZCBpbnRvIGxvYWRzIGZyb20gdGhhdCB0YWJsZS4KLSAgICAgICAgLy8gTm9uLWZhc3QgY29u
c3RhbnRzIGdldCBtYXRlcmlhbGl6ZWQgaW4gdGhlIGJsb2NrIHRoYXQgdXNlcyB0aGVtLiBDb25z
dGFudHMgdGhhdCBhcmUKLSAgICAgICAgLy8gbWF0ZXJpYWxpemVkIGJ5IGxvYWRpbmcgZ2V0IHNw
ZWNpYWwgdHJlYXRtZW50IHdoZW4gdGhleSBnZXQgdXNlZCBpbiBzb21lIGtpbmQgb2YgQW55IGlu
IGEKLSAgICAgICAgLy8gU3RhY2ttYXBWYWx1ZS4gSW4gdGhhdCBjYXNlLCB0aGUgQ29uc3RhbnRz
IGFyZSBzdW5rIHRvIHRoZSBwb2ludCBvZiB1c2UsIHNpbmNlIHRoYXQgYWxsb3dzCi0gICAgICAg
IC8vIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3RvciB0byBzaW5rIHRoZSBjb25zdGFudHMgaW50byBh
biBBcmc6OmltbTY0LgotCi0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYSBiZXR0ZXIgc3Rv
cnkgZm9yIGNvbnN0YW50cy4gRm9yIGV4YW1wbGUsIHRoZSB0YWJsZSB1c2VkIHRvIGhvbGQgZG91
YmxlCi0gICAgICAgIC8vIGNvbnN0YW50cyBzaG91bGQgaGF2ZSBhIHBvaW50ZXIgdG8gaXQgdGhh
dCBpcyBob2lzdGVkLiBJZiB3ZSB3YW50ZWQgdG8gYmUgbW9yZSBhZ2dyZXNzaXZlLAotICAgICAg
ICAvLyB3ZSBjb3VsZCBtYWtlIGNvbnN0YW50IG1hdGVyaWFsaXphdGlvbiBiZSBhIGZlYXR1cmUg
b2YgQWlyOiB3ZSBjb3VsZCBsYWJlbCBzb21lIFRtcHMgYXMKLSAgICAgICAgLy8gYmVpbmcgdW5t
YXRlcmlhbGl6ZWQgY29uc3RhbnRzIGFuZCBoYXZlIGEgbGF0ZSBBaXIgcGhhc2UgLSBwb3N0IHJl
Z2lzdGVyIGFsbG9jYXRpb24gLSB0aGF0Ci0gICAgICAgIC8vIGNyZWF0ZXMgbWF0ZXJpYWxpemF0
aW9ucyBvZiB0aG9zZSBjb25zdGFudCBUbXBzIGJ5IHNjYXZlbmdpbmcgbGVmdG92ZXIgcmVnaXN0
ZXJzLgotCi0gICAgICAgIGhvaXN0RmFzdENvbnN0YW50cygpOwotICAgICAgICBzaW5rU2xvd0Nv
bnN0YW50cygpOworICAgICAgICBob2lzdENvbnN0YW50cygKKyAgICAgICAgICAgIFsmXSAoY29u
c3QgVmFsdWVLZXkmIGtleSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGtleS5v
cGNvZGUoKSA9PSBDb25zdEZsb2F0IHx8IGtleS5vcGNvZGUoKSA9PSBDb25zdERvdWJsZTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgbG93ZXJGUENvbnN0YW50cygpOworICAg
ICAgICAKKyAgICAgICAgaG9pc3RDb25zdGFudHMoCisgICAgICAgICAgICBbJl0gKGNvbnN0IFZh
bHVlS2V5JiBrZXkpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBrZXkub3Bjb2Rl
KCkgPT0gQ29uc3QzMiB8fCBrZXkub3Bjb2RlKCkgPT0gQ29uc3Q2NDsKKyAgICAgICAgICAgIH0p
OwogICAgIH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIGhvaXN0RmFzdENvbnN0YW50cygpCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRmlsdGVyPgorICAgIHZvaWQgaG9pc3RDb25zdGFudHMoY29uc3Qg
RmlsdGVyJiBmaWx0ZXIpCiAgICAgewogICAgICAgICBEb21pbmF0b3JzJiBkb21pbmF0b3JzID0g
bV9wcm9jLmRvbWluYXRvcnMoKTsKICAgICAgICAgSGFzaE1hcDxWYWx1ZUtleSwgVmFsdWUqPiB2
YWx1ZUZvckNvbnN0YW50OwpAQCAtODQsNyArNzksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
Zm9yIChWYWx1ZSogdmFsdWUgOiAqYmxvY2spIHsKICAgICAgICAgICAgICAgICBmb3IgKFZhbHVl
KiYgY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkgewogICAgICAgICAgICAgICAgICAgICBWYWx1
ZUtleSBrZXkgPSBjaGlsZC0+a2V5KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9wcm9j
LmlzRmFzdENvbnN0YW50KGtleSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghZmlsdGVyKGtl
eSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgICAg
ICAgICBhdXRvIHJlc3VsdCA9IHZhbHVlRm9yQ29uc3RhbnQuYWRkKGtleSwgY2hpbGQpOwpAQCAt
MTE2LDcgKzExMSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5mcmVx
dWVuY3koKSA8IHZhbHVlLT5vd25lci0+ZnJlcXVlbmN5KCkpCiAgICAgICAgICAgICAgICAgICAg
IHZhbHVlLT5vd25lciA9IGJsb2NrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbWF0ZXJp
YWxpemF0aW9uc1tlbnRyeS52YWx1ZS0+b3duZXJdLmFwcGVuZChlbnRyeS52YWx1ZSk7CisgICAg
ICAgICAgICBtYXRlcmlhbGl6YXRpb25zW3ZhbHVlLT5vd25lcl0uYXBwZW5kKHZhbHVlKTsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIEdldCByaWQgb2YgVmFsdWUncyB0aGF0IGFyZSBmYXN0IGNv
bnN0YW50cyBidXQgYXJlbid0IGNhbm9uaWNhbC4gQWxzbyByZW1vdmUgdGhlIGNhbm9uaWNhbApA
QCAtMTI0LDcgKzExOSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBtX3Byb2MpIHsKICAgICAgICAgICAgIGZvciAoVmFsdWUqJiB2YWx1ZSA6ICpibG9jaykg
ewogICAgICAgICAgICAgICAgIFZhbHVlS2V5IGtleSA9IHZhbHVlLT5rZXkoKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIW1fcHJvYy5pc0Zhc3RDb25zdGFudChrZXkpKQorICAgICAgICAgICAgICAg
IGlmICghZmlsdGVyKGtleSkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlRm9yQ29uc3RhbnQuZ2V0KGtleSkgPT0gdmFsdWUpCkBAIC0x
NDEsNyArMTM2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBi
bG9jay0+YXQodmFsdWVJbmRleCk7CiAgICAgICAgICAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQg
OiB2YWx1ZS0+Y2hpbGRyZW4oKSkgewogICAgICAgICAgICAgICAgICAgICBWYWx1ZUtleSBrZXkg
PSBjaGlsZC0+a2V5KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9wcm9jLmlzRmFzdENv
bnN0YW50KGtleSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghZmlsdGVyKGtleSkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgICAgICAgICAvLyBJ
ZiB3ZSBlbmNvdW50ZXIgYSBmYXN0IGNvbnN0YW50LCB0aGVuIGl0IG11c3QgYmUgY2Fub25pY2Fs
LCBzaW5jZSB3ZSBhbHJlYWR5CkBAIC0xNzQsMTYgKzE2OSwxMSBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgCi0gICAgdm9pZCBzaW5rU2xvd0NvbnN0YW50cygpCisKKyAgICB2b2lkIGxvd2VyRlBDb25z
dGFudHMoKQogICAgIHsKLSAgICAgICAgLy8gRmlyc3Qgd2UgbmVlZCB0byBmaWd1cmUgb3V0IHdo
aWNoIGNvbnN0YW50cyBnbyBpbnRvIHRoZSBkYXRhIHNlY3Rpb24uIFRoZXNlIGFyZSBub24temVy
bwotICAgICAgICAvLyBkb3VibGUgY29uc3RhbnRzLgogICAgICAgICBmb3IgKFZhbHVlKiB2YWx1
ZSA6IG1fcHJvYy52YWx1ZXMoKSkgewogICAgICAgICAgICAgVmFsdWVLZXkga2V5ID0gdmFsdWUt
PmtleSgpOwotICAgICAgICAgICAgaWYgKCFuZWVkc01vdGlvbihrZXkpKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbV90b1JlbW92ZS5hcHBlbmQodmFsdWUpOwogICAg
ICAgICAgICAgaWYgKGdvZXNJblRhYmxlKGtleSkpCiAgICAgICAgICAgICAgICAgbV9jb25zdFRh
YmxlLmFkZChrZXksIG1fY29uc3RUYWJsZS5zaXplKCkpOwogICAgICAgICB9CkBAIC0xOTEsNjcg
KzE4MSw1MiBAQCBwcml2YXRlOgogICAgICAgICBtX2RhdGFTZWN0aW9uID0gc3RhdGljX2Nhc3Q8
aW50NjRfdCo+KG1fcHJvYy5hZGREYXRhU2VjdGlvbihtX2NvbnN0VGFibGUuc2l6ZSgpICogc2l6
ZW9mKGludDY0X3QpKSk7CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2NvbnN0VGFibGUp
CiAgICAgICAgICAgICBtX2RhdGFTZWN0aW9uW2VudHJ5LnZhbHVlXSA9IGVudHJ5LmtleS52YWx1
ZSgpOwotICAgICAgICAKKworICAgICAgICBJbmRleFNldDxWYWx1ZT4gb2ZmTGltaXRzOwogICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7Ci0gICAgICAgICAgICBtX2Nv
bnN0YW50cy5jbGVhcigpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKyt2YWx1ZUluZGV4
KSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0gYmxvY2stPmF0KHZhbHVlSW5kZXgp
OwotICAgICAgICAgICAgICAgIFN0YWNrbWFwVmFsdWUqIHN0YWNrbWFwID0gdmFsdWUtPmFzPFN0
YWNrbWFwVmFsdWU+KCk7CisgICAgICAgICAgICAgICAgU3RhY2ttYXBWYWx1ZSogdmFsdWUgPSBi
bG9jay0+YXQodmFsdWVJbmRleCktPmFzPFN0YWNrbWFwVmFsdWU+KCk7CisgICAgICAgICAgICAg
ICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSW5kZXggPSAwOyBjaGlsZEluZGV4IDwgdmFsdWUt
Pm51bUNoaWxkcmVuKCk7ICsrY2hpbGRJbmRleCkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
IXZhbHVlLT5jb25zdHJhaW5lZENoaWxkKGNoaWxkSW5kZXgpLnJlcCgpLmlzQW55KCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgIFZhbHVlKiYgY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoY2hpbGRJbmRleCk7
CiAgICAgICAgICAgICAgICAgICAgIFZhbHVlS2V5IGtleSA9IGNoaWxkLT5rZXkoKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFuZWVkc01vdGlvbihrZXkpKQorICAgICAgICAgICAgICAgICAg
ICBpZiAoIWdvZXNJblRhYmxlKGtleSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2ttYXAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICYmIGdvZXNJblRhYmxlKGtleSkKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIHN0
YWNrbWFwLT5jb25zdHJhaW5lZENoaWxkKGNoaWxkSW5kZXgpLnJlcCgpLmlzQW55KCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB3ZWlyZCBzcGVjaWFsIGNhc2UuIFdo
ZW4gd2UgY29uc3RhbnQtZm9sZCBhbiBhcmd1bWVudCB0byBhCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBzdGFja21hcCwgYW5kIHRoYXQgYXJndW1lbnQgaGFzIHRoZSBBbnkgY29uc3RyYWlu
dCwgd2Ugd2FudCB0byBqdXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0ZWxsIHRoZSBz
dGFja21hcCdzIGdlbmVyYXRvciB0aGF0IHRoZSBhcmd1bWVudCBpcyBhIGNvbnN0YW50IHJhdGhl
cgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhhbiBtYXRlcmlhbGl6aW5nIGl0IGluIGEg
cmVnaXN0ZXIuIEZvciB0aGlzIHRvIHdvcmssIHdlIG5lZWQKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGxvd2VyVG9BaXIgdG8gc2VlIHRoaXMgYXJndW1lbnQgYXMgYSBjb25zdGFudCByYXRo
ZXIgdGhhbiBhcyBhIGxvYWQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZyb20gYSB0YWJs
ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0
VmFsdWUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVJbmRleCwga2V5Lm1hdGVy
aWFsaXplKG1fcHJvYywgdmFsdWUtPm9yaWdpbigpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBtYXRlcmlhbGl6ZSh2YWx1ZUluZGV4LCBrZXks
IHZhbHVlLT5vcmlnaW4oKSk7CisgICAgICAgICAgICAgICAgICAgIGNoaWxkID0gbV9pbnNlcnRp
b25TZXQuaW5zZXJ0VmFsdWUoCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUluZGV4LCBr
ZXkubWF0ZXJpYWxpemUobV9wcm9jLCB2YWx1ZS0+b3JpZ2luKCkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgb2ZmTGltaXRzLmFkZChjaGlsZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUo
YmxvY2spOwogICAgICAgICB9CiAKLSAgICAgICAgZm9yIChWYWx1ZSogdG9SZW1vdmUgOiBtX3Rv
UmVtb3ZlKQotICAgICAgICAgICAgdG9SZW1vdmUtPnJlcGxhY2VXaXRoTm9wKCk7Ci0gICAgfQot
ICAgIAotICAgIFZhbHVlKiBtYXRlcmlhbGl6ZSh1bnNpZ25lZCB2YWx1ZUluZGV4LCBjb25zdCBW
YWx1ZUtleSYga2V5LCBjb25zdCBPcmlnaW4mIG9yaWdpbikKLSAgICB7Ci0gICAgICAgIGlmIChW
YWx1ZSogcmVzdWx0ID0gbV9jb25zdGFudHMuZ2V0KGtleSkpCi0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4IDwgYmxvY2st
PnNpemUoKTsgKyt2YWx1ZUluZGV4KSB7CisgICAgICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0g
YmxvY2stPmF0KHZhbHVlSW5kZXgpOworICAgICAgICAgICAgICAgIFZhbHVlS2V5IGtleSA9IHZh
bHVlLT5rZXkoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWdvZXNJblRhYmxlKGtleSkpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChvZmZMaW1pdHMu
Y29udGFpbnModmFsdWUpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAg
ICAvLyBOb3RlIHRoYXQgd2UgZGVsaWJlcmF0ZWx5IGRvbid0IGRvIHRoaXMgaW4gb25lIGFkZCgp
IGJlY2F1c2UgdGhpcyBpcyBhIHJlY3Vyc2l2ZSBmdW5jdGlvbgotICAgICAgICAvLyB0aGF0IG1h
eSByZWhhc2ggdGhlIG1hcC4KKyAgICAgICAgICAgICAgICBWYWx1ZSogdGFibGVCYXNlID0gbV9p
bnNlcnRpb25TZXQuaW5zZXJ0SW50Q29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAgIHZhbHVl
SW5kZXgsIHZhbHVlLT5vcmlnaW4oKSwgcG9pbnRlclR5cGUoKSwKKyAgICAgICAgICAgICAgICAg
ICAgYml0d2lzZV9jYXN0PGludHB0cl90PihtX2RhdGFTZWN0aW9uKSk7CisgICAgICAgICAgICAg
ICAgVmFsdWUqIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxNZW1vcnlWYWx1ZT4oCisg
ICAgICAgICAgICAgICAgICAgIHZhbHVlSW5kZXgsIExvYWQsIHZhbHVlLT50eXBlKCksIHZhbHVl
LT5vcmlnaW4oKSwgdGFibGVCYXNlLAorICAgICAgICAgICAgICAgICAgICBzaXplb2YoaW50NjRf
dCkgKiBtX2NvbnN0VGFibGUuZ2V0KGtleSkpOworICAgICAgICAgICAgICAgIHZhbHVlLT5yZXBs
YWNlV2l0aElkZW50aXR5KHJlc3VsdCk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgVmFsdWUq
IHJlc3VsdDsKLSAgICAgICAgaWYgKGdvZXNJblRhYmxlKGtleSkpIHsKLSAgICAgICAgICAgIFZh
bHVlKiB0YWJsZUJhc2UgPSBtYXRlcmlhbGl6ZSgKLSAgICAgICAgICAgICAgICB2YWx1ZUluZGV4
LAotICAgICAgICAgICAgICAgIFZhbHVlS2V5KAotICAgICAgICAgICAgICAgICAgICBjb25zdFB0
ck9wY29kZSgpLCBwb2ludGVyVHlwZSgpLAotICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQ2NF90PihiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KG1fZGF0YVNlY3Rpb24pKSksCi0gICAg
ICAgICAgICAgICAgb3JpZ2luKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0
Lmluc2VydDxNZW1vcnlWYWx1ZT4oCi0gICAgICAgICAgICAgICAgdmFsdWVJbmRleCwgTG9hZCwg
a2V5LnR5cGUoKSwgb3JpZ2luLCB0YWJsZUJhc2UsCi0gICAgICAgICAgICAgICAgc2l6ZW9mKGlu
dDY0X3QpICogbV9jb25zdFRhYmxlLmdldChrZXkpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnRWYWx1ZSh2YWx1ZUluZGV4LCBrZXku
bWF0ZXJpYWxpemUobV9wcm9jLCBvcmlnaW4pKTsKLSAgICAgICAgbV9jb25zdGFudHMuYWRkKGtl
eSwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CiAgICAgfQogCiAgICAgYm9vbCBnb2Vz
SW5UYWJsZShjb25zdCBWYWx1ZUtleSYga2V5KQpAQCAtMjYwLDExICsyMzUsNiBAQCBwcml2YXRl
OgogICAgICAgICAgICAgfHwgKGtleS5vcGNvZGUoKSA9PSBDb25zdEZsb2F0ICYmIGtleSAhPSBm
bG9hdFplcm8oKSk7CiAgICAgfQogCi0gICAgYm9vbCBuZWVkc01vdGlvbihjb25zdCBWYWx1ZUtl
eSYga2V5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGtleS5pc0NvbnN0YW50KCkgJiYgIW1fcHJv
Yy5pc0Zhc3RDb25zdGFudChrZXkpOwotICAgIH0KLQogICAgIHN0YXRpYyBWYWx1ZUtleSBkb3Vi
bGVaZXJvKCkKICAgICB7CiAgICAgICAgIHJldHVybiBWYWx1ZUtleShDb25zdERvdWJsZSwgRG91
YmxlLCAwLjApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZp
c2lvbiAxOTUyOTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDc4LDYgKzEwNzgsMTggQEAgcHVibGljOgogCiAgICAgYm9vbCB1
c2VzVG1wKEFpcjo6VG1wIHRtcCkgY29uc3Q7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUaGlu
Zz4KKyAgICBib29sIGlzKCkgY29uc3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZz4K
KyAgICBUaGluZyBhcygpIGNvbnN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGhpbmcsIHR5
cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoRmFzdChjb25zdCBGdW5jdG9yJik7CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZywgdHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lk
IGZvckVhY2goUm9sZSwgVHlwZSwgV2lkdGgsIGNvbnN0IEZ1bmN0b3ImKTsKKwogICAgIC8vIFRo
aXMgaXMgc21hcnQgZW5vdWdoIHRvIGtub3cgdGhhdCBhbiBhZGRyZXNzIGFyZyBpbiBhIERlZiBv
ciBVc2VEZWYgcnVsZSB3aWxsIHVzZSBpdHMKICAgICAvLyB0bXBzIGFuZCBuZXZlciBkZWYgdGhl
bS4gRm9yIGV4YW1wbGUsIHRoaXM6CiAgICAgLy8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQXJnSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQXJnSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBcmdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBBaXJBcmdJbmxpbmVzX2gKKyNkZWZpbmUgQWlyQXJnSW5saW5lc19oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEFyZ1RoaW5nSGVscGVyOworCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmdUaGluZ0hlbHBlcjxU
bXA+IHsKKyAgICBzdGF0aWMgYm9vbCBpcyhjb25zdCBBcmcmIGFyZykKKyAgICB7CisgICAgICAg
IHJldHVybiBhcmcuaXNUbXAoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgVG1wIGFzKGNvbnN0IEFy
ZyYgYXJnKQorICAgIHsKKyAgICAgICAgaWYgKGlzKGFyZykpCisgICAgICAgICAgICByZXR1cm4g
YXJnLnRtcCgpOworICAgICAgICByZXR1cm4gVG1wKCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoRmFzdChBcmcmIGFyZywg
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGFyZy5mb3JFYWNoVG1wRmFz
dChmdW5jdG9yKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAg
IHN0YXRpYyB2b2lkIGZvckVhY2goQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUg
dHlwZSwgQXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7Cisg
ICAgICAgIGFyZy5mb3JFYWNoVG1wKHJvbGUsIHR5cGUsIHdpZHRoLCBmdW5jdG9yKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmdUaGluZ0hlbHBlcjxBcmc+IHsKKyAgICBzdGF0
aWMgYm9vbCBpcyhjb25zdCBBcmcmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgc3RhdGljIEFyZyBhcyhjb25zdCBBcmcmIGFyZykKKyAgICB7CisgICAgICAgIHJl
dHVybiBhcmc7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBz
dGF0aWMgdm9pZCBmb3JFYWNoRmFzdChBcmcmIGFyZywgY29uc3QgRnVuY3RvciYgZnVuY3RvcikK
KyAgICB7CisgICAgICAgIGZ1bmN0b3IoYXJnKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2goQXJnJiBhcmcsIEFyZzo6Um9s
ZSByb2xlLCBBcmc6OlR5cGUgdHlwZSwgQXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgRnVuY3RvciYg
ZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZ1bmN0b3IoYXJnLCByb2xlLCB0eXBlLCB3aWR0aCk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVGhpbmc+Citib29sIEFyZzo6aXMoKSBj
b25zdAoreworICAgIHJldHVybiBBcmdUaGluZ0hlbHBlcjxUaGluZz46OmlzKCp0aGlzKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVGhpbmc+CitUaGluZyBBcmc6OmFzKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gQXJnVGhpbmdIZWxwZXI8VGhpbmc+OjphcygqdGhpcyk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBBcmc6OmZvckVhY2hGYXN0
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgQXJnVGhpbmdIZWxwZXI8VGhpbmc+Ojpm
b3JFYWNoRmFzdCgqdGhpcywgZnVuY3Rvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRoaW5n
LCB0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBBcmc6OmZvckVhY2goUm9sZSByb2xlLCBUeXBlIHR5
cGUsIFdpZHRoIHdpZHRoLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIEFyZ1RoaW5n
SGVscGVyPFRoaW5nPjo6Zm9yRWFjaCgqdGhpcywgcm9sZSwgdHlwZSwgd2lkdGgsIGZ1bmN0b3Ip
OworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQXJnSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdp
c3RlckNvYWxlc2NpbmcuY3BwCShyZXZpc2lvbiAxOTUyOTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTQ4LDYgKzk0OCwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgY29uc3QgVXNl
Q291bnRzPFRtcD46OkNvdW50cyYgY291bnRzID0gbV91c2VDb3VudHNbdG1wXTsKICAgICAgICAg
ICAgIGRvdWJsZSB1c2VzID0gY291bnRzLm51bVdhcm1Vc2VzICsgY291bnRzLm51bURlZnM7CiAK
KyAgICAgICAgICAgIC8vIElmIGl0J3MgYSBjb25zdGFudCwgdGhlbiBpdCdzIG5vdCBhcyBiYWQg
dG8gc3BpbGwuIFdlIGNhbiByZW1hdGVyaWFsaXplIGl0IGluIG1hbnkKKyAgICAgICAgICAgIC8v
IGNhc2VzLgorICAgICAgICAgICAgaWYgKGNvdW50cy5udW1Db25zdERlZnMgPT0gY291bnRzLm51
bURlZnMpCisgICAgICAgICAgICAgICAgdXNlcyAvPSAyOworCiAgICAgICAgICAgICByZXR1cm4g
ZGVncmVlIC8gdXNlczsKICAgICAgICAgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJVc2VDb3VudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclVzZUNvdW50cy5oCShyZXZpc2lvbiAxOTUyOTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclVzZUNvdW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDcgKzI4
LDcgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKLSNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNs
dWRlICJBaXJBcmdJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWlyQmxvY2tXb3JrbGlzdC5oIgogI2lu
Y2x1ZGUgIkFpckNvZGUuaCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgpAQCAtNTcsNiAr
NTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIGRvdWJsZSBudW1XYXJtVXNlcyB7IDAgfTsKICAgICAg
ICAgZG91YmxlIG51bUNvbGRVc2VzIHsgMCB9OwogICAgICAgICBkb3VibGUgbnVtRGVmcyB7IDAg
fTsKKyAgICAgICAgZG91YmxlIG51bUNvbnN0RGVmcyB7IDAgfTsKICAgICB9OwogICAgIAogICAg
IFVzZUNvdW50cyhDb2RlJiBjb2RlKQpAQCAtODcsNiArODgsMTEgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY291bnRzLm51bURlZnMgKz0gZnJlcXVlbmN5OwogICAgICAgICAgICAg
ICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGlmICgoaW5zdC5vcGNvZGUgPT0gTW92ZSB8
fCBpbnN0Lm9wY29kZSA9PSBNb3ZlMzIpCisgICAgICAgICAgICAgICAgICAgICYmIGluc3QuYXJn
c1swXS5pc1NvbWVJbW0oKQorICAgICAgICAgICAgICAgICAgICAmJiBpbnN0LmFyZ3NbMV0uaXM8
VGhpbmc+KCkpCisgICAgICAgICAgICAgICAgICAgIG1fY291bnRzLmFkZChpbnN0LmFyZ3NbMV0u
YXM8VGhpbmc+KCksIENvdW50cygpKS5pdGVyYXRvci0+dmFsdWUubnVtQ29uc3REZWZzKys7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTk1Mjk4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MSwxMSArMjcxLDggQEAg
dm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgIGlmIChub2RlLT5o
YXNNdWx0aUdldEJ5T2Zmc2V0RGF0YSgpKSB7CiAgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRh
JiBkYXRhID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKTsKICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAiaWQiLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsICJ7IiwgaWRlbnRpZmllcnMoKVtk
YXRhLmlkZW50aWZpZXJOdW1iZXJdLCAifSIpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZGF0YS5jYXNlcy5zaXplKCk7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZGF0YS5jYXNlcy5zaXplKCk7ICsraSkKICAgICAgICAgICAgIG91dC5wcmludChj
b21tYSwgaW5Db250ZXh0KGRhdGEuY2FzZXNbaV0sIGNvbnRleHQpKTsKLSAgICAgICAgICAgIGlm
IChkYXRhLmNhc2VzW2ldLm1ldGhvZCgpLmtpbmQoKSA9PSBHZXRCeU9mZnNldE1ldGhvZDo6TG9h
ZCkKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAoaW5mZXJyZWQgdmFsdWUgPSAiLCBpbkNv
bnRleHQoaW5mZXJyZWRWYWx1ZUZvclByb3BlcnR5KGRhdGEuY2FzZXNbaV0uc2V0KCksIGlkZW50
aWZpZXJzKClbZGF0YS5pZGVudGlmaWVyTnVtYmVyXSksIGNvbnRleHQpLCAiKSIpOwotICAgICAg
ICB9CiAgICAgfQogICAgIGlmIChub2RlLT5oYXNNdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpKSB7CiAg
ICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhJiBkYXRhID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNl
dERhdGEoKTsK
</data>
<flag name="review"
          id="294227"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>