<?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>86580</bug_id>
          
          <creation_ts>2012-05-16 00:03:25 -0700</creation_ts>
          <short_desc>DFG should have sparse conditional constant propagation</short_desc>
          <delta_ts>2012-05-23 19:28:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>625035</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-16 00:03:25 -0700</bug_when>
    <thetext>Without it, we won&apos;t be able to make this loop evaporate, because the CFA will execute the &quot;i++&quot; basic block and pollute i.

for (var i = 0; i &lt; 1; ++i) doThings(i);

Patch forthcoming, though I foresee this generating some bugs, so though the patch is simple it&apos;ll probably take a while to fully bake.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625037</commentid>
    <comment_count>1</comment_count>
      <attachid>142166</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-16 00:05:44 -0700</bug_when>
    <thetext>Created attachment 142166
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625765</commentid>
    <comment_count>2</comment_count>
      <attachid>142326</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-16 12:48:38 -0700</bug_when>
    <thetext>Created attachment 142326
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625871</commentid>
    <comment_count>3</comment_count>
      <attachid>142346</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-16 14:28:58 -0700</bug_when>
    <thetext>Created attachment 142346
the patch

Yup it works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626068</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-16 17:41:45 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/117370</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632322</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-23 19:28:23 -0700</bug_when>
    <thetext>Merged in http://trac.webkit.org/changeset/118309</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142166</attachid>
            <date>2012-05-16 00:05:44 -0700</date>
            <delta_ts>2012-05-16 12:48:38 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>sparse_patch_1.diff</filename>
            <type>text/plain</type>
            <size>6410</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE3MjI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBA
CisyMDEyLTA1LTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIHNwYXJzZSBjb25kaXRpb25hbCBjb25zdGFudCBwcm9wYWdhdGlvbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODY1ODAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdv
cmsgaW4gcHJvZ3Jlc3MuIEkgaGF2ZW4ndCBldmVuIGNvbXBpbGVkIHRoaXMgeWV0LgorCisgICAg
ICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0U3RhdGU6OmJlZ2luQmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RT
dGF0ZTo6cmVzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUp
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNzb3JzKToK
KyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5oOgorICAgICAgICAoQWJzdHJhY3RTdGF0
ZSk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5oOgorCiAyMDEyLTA1LTE0ICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIHNob3VsZCBvcHRpbWl6ZSBpbmxp
bmVkIHVzZXMgb2YgYXJndW1lbnRzLmxlbmd0aCBhbmQgYXJndW1lbnRzW2ldCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9u
IDExNzIyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDcgQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjpi
ZWdpbkJhc2ljQmxvY2soQmFzaQogICAgIG1fYmxvY2sgPSBiYXNpY0Jsb2NrOwogICAgIG1faXNW
YWxpZCA9IHRydWU7CiAgICAgbV9mb3VuZENvbnN0YW50cyA9IGZhbHNlOworICAgIG1fYnJhbmNo
RGlyZWN0aW9uID0gSW52YWxpZEJyYW5jaERpcmVjdGlvbjsKIH0KIAogdm9pZCBBYnN0cmFjdFN0
YXRlOjppbml0aWFsaXplKEdyYXBoJiBncmFwaCkKQEAgLTIzOCw2ICsyMzksNyBAQCB2b2lkIEFi
c3RyYWN0U3RhdGU6OnJlc2V0KCkKIHsKICAgICBtX2Jsb2NrID0gMDsKICAgICBtX2lzVmFsaWQg
PSBmYWxzZTsKKyAgICBtX2JyYW5jaERpcmVjdGlvbiA9IEludmFsaWRCcmFuY2hEaXJlY3Rpb247
CiB9CiAKIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmRleEluQmxvY2sp
CkBAIC01NTIsMTYgKzU1NCw4IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKICAgICAgICAgSlNWYWx1ZSBjaGlsZENvbnN0
ID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGRDb25z
dCkgewotICAgICAgICAgICAgaWYgKGNoaWxkQ29uc3QuaXNOdW1iZXIoKSkgewotICAgICAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoanNCb29sZWFuKCFjaGlsZENvbnN0LmFzTnVt
YmVyKCkpKTsKLSAgICAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjaGlsZENv
bnN0LmlzQm9vbGVhbigpKSB7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChqc0Jvb2xlYW4oIWNoaWxkQ29uc3QuYXNCb29sZWFuKCkpKTsKLSAgICAgICAgICAgICAgICBt
X2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoanNCb29sZWFuKCFjaGls
ZENvbnMudG9Cb29sZWFuKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKICAgICAgICAgaWYgKGlz
Qm9vbGVhblByZWRpY3Rpb24oY2hpbGQucHJlZGljdGlvbigpKSkKQEAgLTk1MCw5ICs5NDQsMjIg
QEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVh
azsKICAgICAgICAgICAgIAogICAgIGNhc2UgQnJhbmNoOiB7Ci0gICAgICAgIC8vIFRoZXJlIGlz
IHByb2JhYmx5IHByb2ZpdCB0byBiZSBmb3VuZCBpbiBkb2luZyBzcGFyc2UgY29uZGl0aW9uYWwg
Y29uc3RhbnQKLSAgICAgICAgLy8gcHJvcGFnYXRpb24sIGFuZCB0byB0YWtlIGl0IG9uZSBzdGVw
IGZ1cnRoZXIsIHdoZXJlIGEgdmFyaWFibGUncyB2YWx1ZQotICAgICAgICAvLyBpcyBzcGVjaWFs
aXplZCBvbiBlYWNoIGRpcmVjdGlvbiBvZiBhIGJyYW5jaC4gRm9yIG5vdywgd2UgZG9uJ3QgZG8g
dGhpcy4KKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkudmFs
dWUoKTsKKyAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICBib29sIGJvb2xlYW5WYWx1
ZSA9IHZhbHVlLnRvQm9vbGVhbigpOworICAgICAgICAgICAgaWYgKGJvb2xlYW5WYWx1ZSkKKyAg
ICAgICAgICAgICAgICBtX2JyYW5jaERpcmVjdGlvbiA9IFRha2VUcnVlOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIG1fYnJhbmNoRGlyZWN0aW9uID0gVGFrZUZhbHNlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgLy8gRklYTUU6IFRoZSBhYm92ZSBo
YW5kbGVzIHRoZSB0cml2aWFsIGNhc2VzIG9mIHNwYXJzZSBjb25kaXRpb25hbAorICAgICAgICAv
LyBjb25zdGFudCBwcm9wYWdhdGlvbiwgYnV0IHdlIGNhbiBkbyBiZXR0ZXI6CisgICAgICAgIC8v
IDEpIElmIHRoZSBhYnN0cmFjdCB2YWx1ZSBkb2VzIG5vdCBoYXZlIGEgY29uY3JldGUgdmFsdWUg
YnV0IGRlc2NyaWJlcworICAgICAgICAvLyAgICBzb21ldGhpbmcgdGhhdCBpcyBrbm93biB0byBl
dmFsdWF0ZSB0cnVlIChvciBmYWxzZSkgdGhlbiB3ZSBvdWdodAorICAgICAgICAvLyAgICB0byBz
cGFyc2UgY29uZGl0aW9uYWwgdGhhdC4KKyAgICAgICAgLy8gMikgV2UgY2FuIHNwZWNpYWxpemUg
dGhlIHNvdXJjZSB2YXJpYWJsZSdzIHZhbHVlIG9uIGVhY2ggZGlyZWN0aW9uIG9mCisgICAgICAg
IC8vICAgIHRoZSBicmFuY2guCiAgICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNo
aWxkMSgpXTsKICAgICAgICAgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkKICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RCb29sZWFuKTsK
QEAgLTk2NCw2ICs5NzEsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50
MzIpOwogICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOwor
ICAgICAgICBtX2JyYW5jaERpcmVjdGlvbiA9IFRha2VCb3RoOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgICAgICAKQEAgLTE1MTYsMTUgKzE1MjQsMTggQEAgaW5saW5lIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6bWVyZ2VUb1N1Y2NlcwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBCcmFu
Y2g6IHsKKyAgICAgICAgQVNTRVJUKG1fYnJhbmNoRGlyZWN0aW9uICE9IEludmFsaWRCcmFuY2hE
aXJlY3Rpb24pOwogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICNpZiBERkdfRU5BQkxF
KERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2coIiAgICAgICAgTWVy
Z2luZyB0byBibG9jayAjJXUuXG4iLCB0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKSk7CiAjZW5k
aWYKLSAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1t0
ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpOworICAgICAgICBpZiAobV9icmFuY2hE
aXJlY3Rpb24gIT0gVGFrZUZhbHNlKQorICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNp
Y0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkp
OwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0
YUxvZygiICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICMldS5cbiIsIHRlcm1pbmFsLm5vdFRha2Vu
QmxvY2tJbmRleCgpKTsKICNlbmRpZgotICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxv
Y2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLm5vdFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7
CisgICAgICAgIGlmIChtX2JyYW5jaERpcmVjdGlvbiAhPSBUYWtlVHJ1ZSkKKyAgICAgICAgICAg
IGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwubm90
VGFrZW5CbG9ja0luZGV4KCldLmdldCgpKTsKICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAg
fQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RT
dGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RTdGF0ZS5oCShyZXZpc2lvbiAxMTcyMjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDYgKzE5MCw5IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBtX2ZvdW5kQ29uc3RhbnRzOwogICAgIAogICAgIGJvb2wgbV9pc1Zh
bGlkOworICAgIAorICAgIGVudW0gQnJhbmNoRGlyZWN0aW9uIHsgSW52YWxpZEJyYW5jaERpcmVj
dGlvbiwgVGFrZVRydWUsIFRha2VGYWxzZSwgVGFrZUJvdGggfTsKKyAgICBCcmFuY2hEaXJlY3Rp
b24gbV9icmFuY2hEaXJlY3Rpb247IC8vIFRoaXMgaXMgb25seSBzZXQgZm9yIGJsb2NrcyB0aGF0
IGVuZCBpbiBCcmFuY2ggYW5kIHRoYXQgZXhlY3V0ZSB0byBjb21wbGV0aW9uIChpLmUuIG1faXNW
YWxpZCA9PSB0cnVlKS4KIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTE3MjIxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzcs
OSArMzcsOSBAQAogI2RlZmluZSBERkdfRU5BQkxFKERGR19GRUFUVVJFKSAoZGVmaW5lZCBERkdf
RU5BQkxFXyMjREZHX0ZFQVRVUkUgJiYgREZHX0VOQUJMRV8jI0RGR19GRUFUVVJFKQogCiAvLyBF
bWl0IHZhcmlvdXMgbG9nZ2luZyBpbmZvcm1hdGlvbiBmb3IgZGVidWdnaW5nLCBpbmNsdWRpbmcg
ZHVtcGluZyB0aGUgZGF0YWZsb3cgZ3JhcGhzLgotI2RlZmluZSBERkdfRU5BQkxFX0RFQlVHX1ZF
UkJPU0UgMAorI2RlZmluZSBERkdfRU5BQkxFX0RFQlVHX1ZFUkJPU0UgMQogLy8gRW1pdCBkdW1w
cyBkdXJpbmcgcHJvcGFnYXRpb24sIGluIGFkZGl0aW9uIHRvIGp1c3QgYWZ0ZXIuCi0jZGVmaW5l
IERGR19FTkFCTEVfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSAwCisjZGVmaW5lIERGR19FTkFC
TEVfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSAxCiAvLyBFbWl0IGxvZ2dpbmcgZm9yIE9TUiBl
eGl0IHZhbHVlIHJlY292ZXJpZXMgYXQgZXZlcnkgbm9kZSwgbm90IGp1c3Qgbm9kZXMgdGhhdAog
Ly8gYWN0dWFsbHkgaGFzIHNwZWN1bGF0aW9uIGNoZWNrcy4KICNkZWZpbmUgREZHX0VOQUJMRV9W
RVJCT1NFX1ZBTFVFX1JFQ09WRVJJRVMgMAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142326</attachid>
            <date>2012-05-16 12:48:38 -0700</date>
            <delta_ts>2012-05-16 14:28:58 -0700</delta_ts>
            <desc>more</desc>
            <filename>sparse_patch_2.diff</filename>
            <type>text/plain</type>
            <size>19408</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE3MzI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBA
CisyMDEyLTA1LTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIHNwYXJzZSBjb25kaXRpb25hbCBjb25zdGFudCBwcm9wYWdhdGlvbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODY1ODAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdv
cmsgaW4gcHJvZ3Jlc3MuIFN0aWxsIGZpeGluZyBidWcgZmFsbG91dC4KKworICAgICAgICAqIGRm
Zy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRl
OjpiZWdpbkJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmVu
ZEJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OnJlc2V0KToK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdFN0YXRlOjptZXJnZVRvU3VjY2Vzc29ycyk6CisgICAgICAgICogZGZn
L0RGR0Fic3RyYWN0U3RhdGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpi
cmFuY2hEaXJlY3Rpb25Ub1N0cmluZyk6CisgICAgICAgIChBYnN0cmFjdFN0YXRlKToKKyAgICAg
ICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdT
aW1wbGlmaWNhdGlvblBoYXNlOjpmaXhQb3NzaWJsZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6
REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpyZW1vdmVQb3RlbnRpYWxseURlYWRQaGlSZWZl
cmVuY2UpOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6Ok9wZXJh
bmRTdWJzdGl0dXRpb246Ok9wZXJhbmRTdWJzdGl0dXRpb24pOgorICAgICAgICAoT3BlcmFuZFN1
YnN0aXR1dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6
c2tpcEdldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNl
OjpyZWNvcmRQb3NzaWJsZUluY29taW5nUmVmZXJlbmNlKToKKyAgICAgICAgKENGR1NpbXBsaWZp
Y2F0aW9uUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6
OmZpeFRhaWxPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBo
YXNlOjptZXJnZUJsb2Nrcyk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5oOgorCiAyMDEyLTA1
LTE0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIHNob3Vs
ZCBvcHRpbWl6ZSBpbmxpbmVkIHVzZXMgb2YgYXJndW1lbnRzLmxlbmd0aCBhbmQgYXJndW1lbnRz
W2ldCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0
ZS5jcHAJKHJldmlzaW9uIDExNzIyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDcgQEAgdm9pZCBB
YnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvY2soQmFzaQogICAgIG1fYmxvY2sgPSBiYXNpY0Js
b2NrOwogICAgIG1faXNWYWxpZCA9IHRydWU7CiAgICAgbV9mb3VuZENvbnN0YW50cyA9IGZhbHNl
OworICAgIG1fYnJhbmNoRGlyZWN0aW9uID0gSW52YWxpZEJyYW5jaERpcmVjdGlvbjsKIH0KIAog
dm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKEdyYXBoJiBncmFwaCkKQEAgLTE3Niw3ICsx
NzcsNyBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoR3JhcGgmIGdyCiAgICAgfQog
fQogCi1ib29sIEFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2soTWVyZ2VNb2RlIG1lcmdlTW9k
ZSkKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6ZW5kQmFzaWNCbG9jayhNZXJnZU1vZGUgbWVyZ2VNb2Rl
LCBCcmFuY2hEaXJlY3Rpb24qIGJyYW5jaERpcmVjdGlvblB0cikKIHsKICAgICBQUk9GSUxFKEZM
QUdfRk9SX0JMT0NLX0VORCk7CiAgICAgQVNTRVJUKG1fYmxvY2spOwpAQCAtMjI2LDE4ICsyMjcs
MjcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjplbmRCYXNpY0Jsb2NrKE1lcmdlTQogICAgIAogICAg
IEFTU0VSVChtZXJnZU1vZGUgIT0gRG9udE1lcmdlIHx8ICFjaGFuZ2VkKTsKICAgICAKKyAgICBC
cmFuY2hEaXJlY3Rpb24gYnJhbmNoRGlyZWN0aW9uID0gbV9icmFuY2hEaXJlY3Rpb247CisgICAg
aWYgKGJyYW5jaERpcmVjdGlvblB0cikKKyAgICAgICAgKmJyYW5jaERpcmVjdGlvblB0ciA9IGJy
YW5jaERpcmVjdGlvbjsKKyAgICAKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCisgICAgZGF0YUxvZygiICAgICAgICBCcmFuY2ggZGlyZWN0aW9uID0gJXNcbiIsIGJy
YW5jaERpcmVjdGlvblRvU3RyaW5nKGJyYW5jaERpcmVjdGlvbikpOworI2VuZGlmCisgICAgCiAg
ICAgcmVzZXQoKTsKICAgICAKICAgICBpZiAobWVyZ2VNb2RlICE9IE1lcmdlVG9TdWNjZXNzb3Jz
KQogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICAKLSAgICByZXR1cm4gbWVyZ2VUb1N1Y2Nl
c3NvcnMobV9ncmFwaCwgYmxvY2spOworICAgIHJldHVybiBtZXJnZVRvU3VjY2Vzc29ycyhtX2dy
YXBoLCBibG9jaywgYnJhbmNoRGlyZWN0aW9uKTsKIH0KIAogdm9pZCBBYnN0cmFjdFN0YXRlOjpy
ZXNldCgpCiB7CiAgICAgbV9ibG9jayA9IDA7CiAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAg
bV9icmFuY2hEaXJlY3Rpb24gPSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9uOwogfQogCiBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKQpAQCAtNTUyLDE2ICs1
NjIsOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2Fz
ZSBMb2dpY2FsTm90OiB7CiAgICAgICAgIEpTVmFsdWUgY2hpbGRDb25zdCA9IGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkQ29uc3QpIHsKLSAgICAgICAg
ICAgIGlmIChjaGlsZENvbnN0LmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KGpzQm9vbGVhbighY2hpbGRDb25zdC5hc051bWJlcigpKSk7Ci0gICAg
ICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY2hpbGRDb25zdC5pc0Jvb2xlYW4o
KSkgewotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoanNCb29sZWFuKCFj
aGlsZENvbnN0LmFzQm9vbGVhbigpKSk7Ci0gICAgICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50
cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KGpzQm9vbGVhbighY2hpbGRDb25zdC50b0Jvb2xl
YW4oKSkpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgTm9kZSYgY2hp
bGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwogICAgICAgICBpZiAoaXNCb29sZWFuUHJlZGlj
dGlvbihjaGlsZC5wcmVkaWN0aW9uKCkpKQpAQCAtOTUwLDkgKzk1MiwyMiBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCiAgICAgY2FzZSBCcmFuY2g6IHsKLSAgICAgICAgLy8gVGhlcmUgaXMgcHJvYmFibHkgcHJv
Zml0IHRvIGJlIGZvdW5kIGluIGRvaW5nIHNwYXJzZSBjb25kaXRpb25hbCBjb25zdGFudAotICAg
ICAgICAvLyBwcm9wYWdhdGlvbiwgYW5kIHRvIHRha2UgaXQgb25lIHN0ZXAgZnVydGhlciwgd2hl
cmUgYSB2YXJpYWJsZSdzIHZhbHVlCi0gICAgICAgIC8vIGlzIHNwZWNpYWxpemVkIG9uIGVhY2gg
ZGlyZWN0aW9uIG9mIGEgYnJhbmNoLiBGb3Igbm93LCB3ZSBkb24ndCBkbyB0aGlzLgorICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOworICAgICAg
ICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgIGJvb2wgYm9vbGVhblZhbHVlID0gdmFsdWUudG9C
b29sZWFuKCk7CisgICAgICAgICAgICBpZiAoYm9vbGVhblZhbHVlKQorICAgICAgICAgICAgICAg
IG1fYnJhbmNoRGlyZWN0aW9uID0gVGFrZVRydWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbV9icmFuY2hEaXJlY3Rpb24gPSBUYWtlRmFsc2U7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAvLyBGSVhNRTogVGhlIGFib3ZlIGhhbmRsZXMgdGhlIHRy
aXZpYWwgY2FzZXMgb2Ygc3BhcnNlIGNvbmRpdGlvbmFsCisgICAgICAgIC8vIGNvbnN0YW50IHBy
b3BhZ2F0aW9uLCBidXQgd2UgY2FuIGRvIGJldHRlcjoKKyAgICAgICAgLy8gMSkgSWYgdGhlIGFi
c3RyYWN0IHZhbHVlIGRvZXMgbm90IGhhdmUgYSBjb25jcmV0ZSB2YWx1ZSBidXQgZGVzY3JpYmVz
CisgICAgICAgIC8vICAgIHNvbWV0aGluZyB0aGF0IGlzIGtub3duIHRvIGV2YWx1YXRlIHRydWUg
KG9yIGZhbHNlKSB0aGVuIHdlIG91Z2h0CisgICAgICAgIC8vICAgIHRvIHNwYXJzZSBjb25kaXRp
b25hbCB0aGF0LgorICAgICAgICAvLyAyKSBXZSBjYW4gc3BlY2lhbGl6ZSB0aGUgc291cmNlIHZh
cmlhYmxlJ3MgdmFsdWUgb24gZWFjaCBkaXJlY3Rpb24gb2YKKyAgICAgICAgLy8gICAgdGhlIGJy
YW5jaC4KICAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwogICAg
ICAgICBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKQogICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEJvb2xlYW4pOwpAQCAtOTY0LDYgKzk3
OSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CiAgICAgICAg
IGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQogICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgIG1fYnJh
bmNoRGlyZWN0aW9uID0gVGFrZUJvdGg7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAg
ICAgIApAQCAtMTQ5OSw3ICsxNTE1LDggQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVy
Z2UoQmFzaWNCbAogICAgIHJldHVybiBjaGFuZ2VkOwogfQogCi1pbmxpbmUgYm9vbCBBYnN0cmFj
dFN0YXRlOjptZXJnZVRvU3VjY2Vzc29ycyhHcmFwaCYgZ3JhcGgsIEJhc2ljQmxvY2sqIGJhc2lj
QmxvY2spCitpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVRvU3VjY2Vzc29ycygKKyAg
ICBHcmFwaCYgZ3JhcGgsIEJhc2ljQmxvY2sqIGJhc2ljQmxvY2ssIEJyYW5jaERpcmVjdGlvbiBi
cmFuY2hEaXJlY3Rpb24pCiB7CiAgICAgUFJPRklMRShGTEFHX0ZPUl9NRVJHRV9UT19TVUNDRVNT
T1JTKTsKIApAQCAtMTUwOSw2ICsxNTI2LDcgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
bWVyZ2VUb1N1Y2NlcwogICAgIAogICAgIHN3aXRjaCAodGVybWluYWwub3AoKSkgewogICAgIGNh
c2UgSnVtcDogeworICAgICAgICBBU1NFUlQoYnJhbmNoRGlyZWN0aW9uID09IEludmFsaWRCcmFu
Y2hEaXJlY3Rpb24pOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkK
ICAgICAgICAgZGF0YUxvZygiICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICMldS5cbiIsIHRlcm1p
bmFsLnRha2VuQmxvY2tJbmRleCgpKTsKICNlbmRpZgpAQCAtMTUxNiwyMSArMTUzNCwyNSBAQCBp
bmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVRvU3VjY2VzCiAgICAgfQogICAgICAgICAK
ICAgICBjYXNlIEJyYW5jaDogeworICAgICAgICBBU1NFUlQoYnJhbmNoRGlyZWN0aW9uICE9IElu
dmFsaWRCcmFuY2hEaXJlY3Rpb24pOwogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2co
IiAgICAgICAgTWVyZ2luZyB0byBibG9jayAjJXUuXG4iLCB0ZXJtaW5hbC50YWtlbkJsb2NrSW5k
ZXgoKSk7CiAjZW5kaWYKLSAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCBncmFw
aC5tX2Jsb2Nrc1t0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpOworICAgICAgICBp
ZiAoYnJhbmNoRGlyZWN0aW9uICE9IFRha2VGYWxzZSkKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwudGFrZW5CbG9ja0luZGV4
KCldLmdldCgpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAg
ICAgICAgIGRhdGFMb2coIiAgICAgICAgTWVyZ2luZyB0byBibG9jayAjJXUuXG4iLCB0ZXJtaW5h
bC5ub3RUYWtlbkJsb2NrSW5kZXgoKSk7CiAjZW5kaWYKLSAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZShiYXNpY0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC5ub3RUYWtlbkJsb2NrSW5kZXgo
KV0uZ2V0KCkpOworICAgICAgICBpZiAoYnJhbmNoRGlyZWN0aW9uICE9IFRha2VUcnVlKQorICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJt
aW5hbC5ub3RUYWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpOwogICAgICAgICByZXR1cm4gY2hhbmdl
ZDsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUmV0dXJuOgogICAgIGNhc2UgVGhyb3c6CiAg
ICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgorICAgICAgICBBU1NFUlQoYnJhbmNoRGlyZWN0
aW9uID09IEludmFsaWRCcmFuY2hEaXJlY3Rpb24pOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIAogICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMTE3MjIxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzky
LDM2IEBAIHB1YmxpYzoKICAgICAgICAgTWVyZ2VUb1N1Y2Nlc3NvcnMKICAgICB9OwogICAgIAor
ICAgIGVudW0gQnJhbmNoRGlyZWN0aW9uIHsKKyAgICAgICAgLy8gVGhpcyBpcyBub3QgYSBicmFu
Y2ggYW5kIHNvIHRoZXJlIGlzIG5vIGJyYW5jaCBkaXJlY3Rpb24sIG9yCisgICAgICAgIC8vIHRo
ZSBicmFuY2ggZGlyZWN0aW9uIGhhcyB5ZXQgdG8gYmUgc2V0LgorICAgICAgICBJbnZhbGlkQnJh
bmNoRGlyZWN0aW9uLAorICAgICAgICAKKyAgICAgICAgLy8gVGhlIGJyYW5jaCB0YWtlcyB0aGUg
dHJ1ZSBjYXNlLgorICAgICAgICBUYWtlVHJ1ZSwKKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBi
cmFuY2ggdGFrZXMgdGhlIGZhbHNlIGNhc2UuCisgICAgICAgIFRha2VGYWxzZSwKKyAgICAgICAg
CisgICAgICAgIC8vIEZvciBhbGwgd2Uga25vdywgdGhlIGJyYW5jaCBjb3VsZCBnbyBlaXRoZXIg
ZGlyZWN0aW9uLCBzbyB3ZQorICAgICAgICAvLyBoYXZlIHRvIGFzc3VtZSB0aGUgd29yc3QuCisg
ICAgICAgIFRha2VCb3RoCisgICAgfTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgY2hhciogYnJh
bmNoRGlyZWN0aW9uVG9TdHJpbmcoQnJhbmNoRGlyZWN0aW9uIGJyYW5jaERpcmVjdGlvbikKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoYnJhbmNoRGlyZWN0aW9uKSB7CisgICAgICAgIGNhc2UgSW52
YWxpZEJyYW5jaERpcmVjdGlvbjoKKyAgICAgICAgICAgIHJldHVybiAiSW52YWxpZCI7CisgICAg
ICAgIGNhc2UgVGFrZVRydWU6CisgICAgICAgICAgICByZXR1cm4gIlRha2VUcnVlIjsKKyAgICAg
ICAgY2FzZSBUYWtlRmFsc2U6CisgICAgICAgICAgICByZXR1cm4gIlRha2VGYWxzZSI7CisgICAg
ICAgIGNhc2UgVGFrZUJvdGg6CisgICAgICAgICAgICByZXR1cm4gIlRha2VCb3RoIjsKKyAgICAg
ICAgfQorICAgIH0KKwogICAgIEFic3RyYWN0U3RhdGUoR3JhcGgmKTsKICAgICAKICAgICB+QWJz
dHJhY3RTdGF0ZSgpOwpAQCAtMTM5LDcgKzE2OSwxMSBAQCBwdWJsaWM6CiAgICAgLy8gICAgQSB0
cnVlIHJldHVybiBtZWFucyB0aGF0IHlvdSBtdXN0IHJldmlzaXQgKGF0IGxlYXN0KSB0aGUgc3Vj
Y2Vzc29yCiAgICAgLy8gICAgYmxvY2tzLiBUaGlzIGFsc28gc2V0cyBjZmFTaG91bGRSZXZpc2l0
IHRvIHRydWUgZm9yIGJhc2ljIGJsb2NrcwogICAgIC8vICAgIHRoYXQgbXVzdCBiZSB2aXNpdGVk
IG5leHQuCi0gICAgYm9vbCBlbmRCYXNpY0Jsb2NrKE1lcmdlTW9kZSk7CisgICAgLy8KKyAgICAv
LyBJZiB5b3UnZCBsaWtlIHRvIGtub3cgd2hhdCBkaXJlY3Rpb24gdGhlIGJyYW5jaCBhdCB0aGUg
ZW5kIG9mIHRoZQorICAgIC8vIGJhc2ljIGJsb2NrIGlzIHRob3VnaHQgdG8gaGF2ZSB0YWtlbiwg
eW91IGNhbiBwYXNzIGEgbm9uLTAgcG9pbnRlcgorICAgIC8vIGZvciBCcmFuY2hEaXJlY3Rpb24u
CisgICAgYm9vbCBlbmRCYXNpY0Jsb2NrKE1lcmdlTW9kZSwgQnJhbmNoRGlyZWN0aW9uKiA9IDAp
OwogICAgIAogICAgIC8vIFJlc2V0IHRoZSBBYnN0cmFjdFN0YXRlLiBUaGlzIHRocm93cyBhd2F5
IGFueSByZXN1bHRzLCBhbmQgYXQgdGhpcyBwb2ludAogICAgIC8vIHlvdSBjYW4gc2FmZWx5IGNh
bGwgYmVnaW5CYXNpY0Jsb2NrKCkgb24gYW55IGJhc2ljIGJsb2NrLgpAQCAtMTY5LDcgKzIwMyw3
IEBAIHB1YmxpYzoKICAgICAvLyBzdWNjZXNzb3JzLiBSZXR1cm5zIHRydWUgaWYgYW55IG9mIHRo
ZSBzdWNjZXNzb3JzJyBzdGF0ZXMgY2hhbmdlZC4gTm90ZQogICAgIC8vIHRoYXQgdGhpcyBpcyBh
dXRvbWF0aWNhbGx5IGNhbGxlZCBpbiBlbmRCYXNpY0Jsb2NrKCkgaWYgTWVyZ2VNb2RlIGlzCiAg
ICAgLy8gTWVyZ2VUb1N1Y2Nlc3NvcnMuCi0gICAgYm9vbCBtZXJnZVRvU3VjY2Vzc29ycyhHcmFw
aCYsIEJhc2ljQmxvY2sqKTsKKyAgICBib29sIG1lcmdlVG9TdWNjZXNzb3JzKEdyYXBoJiwgQmFz
aWNCbG9jayosIEJyYW5jaERpcmVjdGlvbik7CiAKICAgICB2b2lkIGR1bXAoRklMRSogb3V0KTsK
ICAgICAKQEAgLTE5MCw2ICsyMjQsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9mb3VuZENvbnN0
YW50czsKICAgICAKICAgICBib29sIG1faXNWYWxpZDsKKyAgICAKKyAgICBCcmFuY2hEaXJlY3Rp
b24gbV9icmFuY2hEaXJlY3Rpb247IC8vIFRoaXMgaXMgb25seSBzZXQgZm9yIGJsb2NrcyB0aGF0
IGVuZCBpbiBCcmFuY2ggYW5kIHRoYXQgZXhlY3V0ZSB0byBjb21wbGV0aW9uIChpLmUuIG1faXNW
YWxpZCA9PSB0cnVlKS4KIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcAkocmV2aXNpb24gMTE3MjIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiAr
NjcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDRkdTaW1w
bGlmeTogSnVtcCBtZXJnZSBvbiBCbG9jayAjJXUgdG8gQmxvY2sgIyV1LlxuIiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3IoYmxv
Y2ssIDApKTsKICNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZUJsb2NrcyhibG9ja0luZGV4LCBtX2dyYXBo
LnN1Y2Nlc3NvcihibG9jaywgMCksIE5vQmxvY2spOwogICAgICAgICAgICAgICAgICAgICAgICAg
aW5uZXJDaGFuZ2VkID0gb3V0ZXJDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMTA3LDYgKzEwOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgsIG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0
aW9uKGJsb2NrLCBjb25kaXRpb24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssICFjb25kaXRpb24pKTsKICNl
bmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1lcmdlQmxvY2tzKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBibG9ja0luZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywgY29uZGl0aW9uKSwKQEAgLTExOCw2
ICsxMjAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
bG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywgY29uZGl0aW9u
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3VjY2Vzc29y
Rm9yQ29uZGl0aW9uKGJsb2NrLCAhY29uZGl0aW9uKSk7CiAjZW5kaWYKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBCbG9ja0luZGV4IHRha2VuQmxvY2tJbmRleCA9IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0
aW9uKGJsb2NrLCBjb25kaXRpb24pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsb2Nr
SW5kZXggbm90VGFrZW5CbG9ja0luZGV4ID0gbV9ncmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24o
YmxvY2ssICFjb25kaXRpb24pOwogICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0yNzEsOCAr
Mjc0LDEyIEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICAgICAgQVNTRVJUKG9yaWdpbmFsTm9kZUlu
ZGV4ICE9IE5vTm9kZSk7CiAgICAgICAgIE5vZGUqIG9yaWdpbmFsTm9kZSA9ICZtX2dyYXBoW29y
aWdpbmFsTm9kZUluZGV4XTsKLSAgICAgICAgaWYgKGNoYW5nZVJlZikKLSAgICAgICAgICAgIEFT
U0VSVChvcmlnaW5hbE5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICBpZiAoY2hhbmdl
UmVmKSB7CisgICAgICAgICAgICBpZiAoIW9yaWdpbmFsTm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkg
eworICAgICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOworICAgICAgICAgICAgICAgIEFTU0VS
VChvcmlnaW5hbE5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CiAgICAgICAgIC8vIFBvc3NpYmlsaXRpZXM6CiAgICAgICAgIC8vIFNldExvY2FsIC0+IHRo
ZSBzZWNvbmRCbG9jayBpcyBnZXR0aW5nIHRoZSB2YWx1ZSBvZiBzb21ldGhpbmcgdGhhdCBpcyBp
bW1lZGlhdGVseQogICAgICAgICAvLyAgICAgYXZhaWxhYmxlIGluIHRoZSBmaXJzdCBibG9jayB3
aXRoIGEga25vd24gTm9kZUluZGV4LgpAQCAtMzg1LDcgKzM5Miw4IEBAIHByaXZhdGU6CiAjaWYg
REZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nKCIg
UmVtb3ZpbmcgcmVmZXJlbmNlIGF0IGNoaWxkICV1LiIsIGVkZ2VJbmRleCk7CiAjZW5kaWYKLSAg
ICAgICAgbV9ncmFwaC5kZXJlZihteU5vZGVJbmRleCk7CisgICAgICAgIGlmIChwaGlOb2RlLnNo
b3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG15Tm9kZUluZGV4KTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZWRnZUluZGV4OyBpIDwgQWRqYWNlbmN5TGlzdDo6
U2l6ZSAtIDE7ICsraSkKICAgICAgICAgICAgIHBoaU5vZGUuY2hpbGRyZW4uc2V0Q2hpbGQoaSwg
cGhpTm9kZS5jaGlsZHJlbi5jaGlsZChpICsgMSkpOwogICAgICAgICBwaGlOb2RlLmNoaWxkcmVu
LnNldENoaWxkKEFkamFjZW5jeUxpc3Q6OlNpemUgLSAxLCBFZGdlKCkpOwpAQCAtMzk4LDYgKzQw
NiwxMiBAQCBwcml2YXRlOgogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAg
IGV4cGxpY2l0IE9wZXJhbmRTdWJzdGl0dXRpb24oTm9kZUluZGV4IG9sZENoaWxkKQorICAgICAg
ICAgICAgOiBvbGRDaGlsZChvbGRDaGlsZCkKKyAgICAgICAgICAgICwgbmV3Q2hpbGQob2xkQ2hp
bGQpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgT3BlcmFuZFN1YnN0
aXR1dGlvbihOb2RlSW5kZXggb2xkQ2hpbGQsIE5vZGVJbmRleCBuZXdDaGlsZCkKICAgICAgICAg
ICAgIDogb2xkQ2hpbGQob2xkQ2hpbGQpCiAgICAgICAgICAgICAsIG5ld0NoaWxkKG5ld0NoaWxk
KQpAQCAtNDE5LDEzICs0MzMsMjQgQEAgcHJpdmF0ZToKICAgICAKICAgICBOb2RlSW5kZXggc2tp
cEdldExvY2FsKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgeworICAgICAgICBpZiAobm9kZUlu
ZGV4ID09IE5vTm9kZSkKKyAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgIE5vZGUm
IG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CiAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gR2V0
TG9jYWwpCiAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKS5pbmRleCgpOwogICAgICAg
ICByZXR1cm4gbm9kZUluZGV4OwogICAgIH0KICAgICAKLSAgICB2b2lkIGZpeFRhaWxPcGVyYW5k
KEJhc2ljQmxvY2sqIGZpcnN0QmxvY2ssIEJhc2ljQmxvY2sqIHNlY29uZEJsb2NrLCBpbnQgb3Bl
cmFuZCwgT3BlcmFuZHM8T3BlcmFuZFN1YnN0aXR1dGlvbj4mIHN1YnN0aXR1dGlvbnMpCisgICAg
dm9pZCByZWNvcmRQb3NzaWJsZUluY29taW5nUmVmZXJlbmNlKAorICAgICAgICBCYXNpY0Jsb2Nr
KiBzZWNvbmRCbG9jaywgT3BlcmFuZHM8T3BlcmFuZFN1YnN0aXR1dGlvbj4mIHN1YnN0aXR1dGlv
bnMsIGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgc3Vic3RpdHV0aW9ucy5vcGVyYW5kKG9w
ZXJhbmQpID0gT3BlcmFuZFN1YnN0aXR1dGlvbigKKyAgICAgICAgICAgIHNraXBHZXRMb2NhbChz
ZWNvbmRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkpKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBmaXhUYWlsT3BlcmFuZCgKKyAgICAgICAgQmFzaWNCbG9jayogZmlyc3RC
bG9jaywgQmFzaWNCbG9jayogc2Vjb25kQmxvY2ssIGludCBvcGVyYW5kLAorICAgICAgICBPcGVy
YW5kczxPcGVyYW5kU3Vic3RpdHV0aW9uPiYgc3Vic3RpdHV0aW9ucykKICAgICB7CiAgICAgICAg
IE5vZGVJbmRleCBhdFNlY29uZFRhaWwgPSBzZWNvbmRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9w
ZXJhbmQob3BlcmFuZCk7CiAgICAgICAgIApAQCAtNDQ5LDkgKzQ3NCw4IEBAIHByaXZhdGU6CiAg
ICAgICAgIGNhc2UgUGhpOiB7CiAgICAgICAgICAgICAvLyBLZWVwIHdoYXQgd2FzIGluIHRoZSBm
aXJzdCBibG9jay4KICAgICAgICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwub3BlcmFuZChvcGVyYW5kKSAhPSBOb05vZGUpOwotICAgICAgICAgICAgc3Vic3RpdHV0aW9u
cy5vcGVyYW5kKG9wZXJhbmQpID0KLSAgICAgICAgICAgICAgICBPcGVyYW5kU3Vic3RpdHV0aW9u
KAotICAgICAgICAgICAgICAgICAgICBhdFNlY29uZFRhaWwsIHNraXBHZXRMb2NhbChmaXJzdEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSkpOworICAgICAgICAgICAgc3Vi
c3RpdHV0aW9ucy5vcGVyYW5kKG9wZXJhbmQpLm5ld0NoaWxkID0KKyAgICAgICAgICAgICAgICBz
a2lwR2V0TG9jYWwoZmlyc3RCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtNDYxLDYgKzQ4NSw4IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAvLyBibG9jayBkb2Vzbid0IGV2ZW4ga25vdyBhYm91dCB0aGlz
IHZhcmlhYmxlLgogICAgICAgICAgICAgaWYgKHNlY29uZE5vZGUudmFyaWFibGVBY2Nlc3NEYXRh
KCktPmlzQ2FwdHVyZWQoKSkgewogICAgICAgICAgICAgICAgIGZpcnN0QmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gYXRTZWNvbmRUYWlsOworICAgICAgICAgICAgICAg
IHN1YnN0aXR1dGlvbnMub3BlcmFuZChvcGVyYW5kKS5uZXdDaGlsZCA9CisgICAgICAgICAgICAg
ICAgICAgIHNlY29uZE5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNDczLDE2ICs0OTksMTYgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAgICAgICAgICBjYXNlIFBo
aToKICAgICAgICAgICAgICAgICBmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChv
cGVyYW5kKSA9IGF0U2Vjb25kVGFpbDsKKyAgICAgICAgICAgICAgICBzdWJzdGl0dXRpb25zLm9w
ZXJhbmQob3BlcmFuZCkubmV3Q2hpbGQgPQorICAgICAgICAgICAgICAgICAgICBzZWNvbmROb2Rl
LmNoaWxkMSgpLmluZGV4KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgLy8gS2VlcCB3aGF0IHdhcyBpbiB0aGUgZmlyc3Qg
YmxvY2ssIGFuZCBhZGp1c3QgdGhlIHN1YnN0aXR1dGlvbiB0byBhY2NvdW50IGZvcgogICAgICAg
ICAgICAgICAgIC8vIHRoZSBmYWN0IHRoYXQgc3VjY2Vzc29ycyB3aWxsIHJlZmVyIHRvIHRoZSBj
aGlsZCBvZiB0aGUgR2V0TG9jYWwuCiAgICAgICAgICAgICAgICAgQVNTRVJUKGZpcnN0QmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpICE9IE5vTm9kZSk7Ci0gICAgICAgICAg
ICAgICAgc3Vic3RpdHV0aW9ucy5vcGVyYW5kKG9wZXJhbmQpID0KLSAgICAgICAgICAgICAgICAg
ICAgT3BlcmFuZFN1YnN0aXR1dGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZE5v
ZGUuY2hpbGQxKCkuaW5kZXgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNraXBHZXRMb2Nh
bChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSkpOworICAgICAg
ICAgICAgICAgIHN1YnN0aXR1dGlvbnMub3BlcmFuZChvcGVyYW5kKS5uZXdDaGlsZCA9CisgICAg
ICAgICAgICAgICAgICAgIHNraXBHZXRMb2NhbChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZChvcGVyYW5kKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBicmVhazsKQEAgLTUyNyw3ICs1NTMsMTcgQEAgcHJpdmF0ZToKICAgICAg
ICAgCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnBoaXMuc2l6
ZSgpOyArK2kpCiAgICAgICAgICAgICBmaXJzdEJsb2NrLT5waGlzLmFwcGVuZChzZWNvbmRCbG9j
ay0+cGhpc1tpXSk7Ci0gICAgICAgIAorCisgICAgICAgIC8vIEJlZm9yZSB3ZSBzdGFydCBjaGFu
Z2luZyB0aGUgc2Vjb25kIGJsb2NrJ3MgZ3JhcGgsIHJlY29yZCB3aGF0IG5vZGVzIHdvdWxkCisg
ICAgICAgIC8vIGJlIHJlZmVyZW5jZWQgYnkgc3VjY2Vzc29ycyBvZiB0aGUgc2Vjb25kIGJsb2Nr
LgorICAgICAgICBPcGVyYW5kczxPcGVyYW5kU3Vic3RpdHV0aW9uPiBzdWJzdGl0dXRpb25zKAor
ICAgICAgICAgICAgc2Vjb25kQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50
cygpLAorICAgICAgICAgICAgc2Vjb25kQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxv
Y2FscygpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9jay0+dmFy
aWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkKKyAgICAgICAgICAgIHJlY29y
ZFBvc3NpYmxlSW5jb21pbmdSZWZlcmVuY2Uoc2Vjb25kQmxvY2ssIHN1YnN0aXR1dGlvbnMsIGFy
Z3VtZW50VG9PcGVyYW5kKGkpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWNv
bmRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7ICsraSkKKyAgICAgICAg
ICAgIHJlY29yZFBvc3NpYmxlSW5jb21pbmdSZWZlcmVuY2Uoc2Vjb25kQmxvY2ssIHN1YnN0aXR1
dGlvbnMsIGkpOworCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2st
PnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gc2Vjb25k
QmxvY2stPmF0KGkpOwogICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4
XTsKQEAgLTU0OSwxMiArNTg1LDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEZsdXNo
OiB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIGZsdXNoIGNvdWxkIHVzZSBhIEdldExvY2FsLCBT
ZXRMb2NhbCwgU2V0QXJndW1lbnQsIG9yIGEgUGhpLgorICAgICAgICAgICAgY2FzZSBGbHVzaDoK
KyAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKKyAgICAgICAgICAgICAgICAvLyBBIEZsdXNo
IGNvdWxkIHVzZSBhIEdldExvY2FsLCBTZXRMb2NhbCwgU2V0QXJndW1lbnQsIG9yIGEgUGhpLgog
ICAgICAgICAgICAgICAgIC8vIElmIGl0IHVzZXMgYSBHZXRMb2NhbCwgaXQnbGwgYmUgdGFrZW4g
Y2FyZSBvZiBiZWxvdy4gSWYgaXQgdXNlcyBhCiAgICAgICAgICAgICAgICAgLy8gU2V0TG9jYWwg
b3IgU2V0QXJndW1lbnQsIHRoZW4gaXQgbXVzdCBiZSB1c2luZyBhIG5vZGUgZnJvbSB0aGUKICAg
ICAgICAgICAgICAgICAvLyBzYW1lIGJsb2NrLiBCdXQgaWYgaXQgdXNlcyBhIFBoaSwgdGhlbiB3
ZSBzaG91bGQgcmVkaXJlY3QgaXQgdG8KICAgICAgICAgICAgICAgICAvLyB1c2Ugd2hhdGV2ZXIg
dGhlIGZpcnN0IGJsb2NrIGFkdmVydGlzZWQgYXMgYSB0YWlsIG9wZXJhbmQuCisgICAgICAgICAg
ICAgICAgLy8gU2ltaWxhcmx5IGZvciBHZXRMb2NhbDsgaXQgY291bGQgdXNlIGFueSBvZiB0aG9z
ZSBleGNlcHQgZm9yCisgICAgICAgICAgICAgICAgLy8gR2V0TG9jYWwuIElmIGl0IHVzZXMgYSBQ
aGkgdGhlbiBpdCBzaG91bGQgYmUgcmVkaXJlY3RlZCB0byB1c2UgYQorICAgICAgICAgICAgICAg
IC8vIFBoaSBmcm9tIHRoZSB0YWlsIG9wZXJhbmQuCiAgICAgICAgICAgICAgICAgaWYgKG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0ub3AoKSAhPSBQaGkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIApAQCAtNjA4LDkgKzY0OCw2IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBmaXhKZXR0aXNvbmVkUHJlZGVjZXNzb3JzKGZpcnN0QmxvY2tJbmRleCwgamV0dGlzb25l
ZEJsb2NrSW5kZXgpOwogICAgICAgICAKICAgICAgICAgLy8gRml4IHVwIHRoZSB2YXJpYWJsZXMg
YXQgdGFpbC4KLSAgICAgICAgT3BlcmFuZHM8T3BlcmFuZFN1YnN0aXR1dGlvbj4gc3Vic3RpdHV0
aW9ucygKLSAgICAgICAgICAgIHNlY29uZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZB
cmd1bWVudHMoKSwKLSAgICAgICAgICAgIHNlY29uZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVt
YmVyT2ZMb2NhbHMoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxv
Y2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpCiAgICAgICAgICAg
ICBmaXhUYWlsT3BlcmFuZChmaXJzdEJsb2NrLCBzZWNvbmRCbG9jaywgYXJndW1lbnRUb09wZXJh
bmQoaSksIHN1YnN0aXR1dGlvbnMpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNl
Y29uZEJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxMTcyMjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw5ICszNyw5IEBACiAjZGVmaW5lIERGR19FTkFCTEUoREZHX0ZFQVRVUkUpIChkZWZpbmVkIERG
R19FTkFCTEVfIyNERkdfRkVBVFVSRSAmJiBERkdfRU5BQkxFXyMjREZHX0ZFQVRVUkUpCiAKIC8v
IEVtaXQgdmFyaW91cyBsb2dnaW5nIGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dpbmcsIGluY2x1ZGlu
ZyBkdW1waW5nIHRoZSBkYXRhZmxvdyBncmFwaHMuCi0jZGVmaW5lIERGR19FTkFCTEVfREVCVUdf
VkVSQk9TRSAwCisjZGVmaW5lIERGR19FTkFCTEVfREVCVUdfVkVSQk9TRSAxCiAvLyBFbWl0IGR1
bXBzIGR1cmluZyBwcm9wYWdhdGlvbiwgaW4gYWRkaXRpb24gdG8ganVzdCBhZnRlci4KLSNkZWZp
bmUgREZHX0VOQUJMRV9ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFIDAKKyNkZWZpbmUgREZHX0VO
QUJMRV9ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFIDEKIC8vIEVtaXQgbG9nZ2luZyBmb3IgT1NS
IGV4aXQgdmFsdWUgcmVjb3ZlcmllcyBhdCBldmVyeSBub2RlLCBub3QganVzdCBub2RlcyB0aGF0
CiAvLyBhY3R1YWxseSBoYXMgc3BlY3VsYXRpb24gY2hlY2tzLgogI2RlZmluZSBERkdfRU5BQkxF
X1ZFUkJPU0VfVkFMVUVfUkVDT1ZFUklFUyAwCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142346</attachid>
            <date>2012-05-16 14:28:58 -0700</date>
            <delta_ts>2012-05-16 14:41:10 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>sparse_patch_3.diff</filename>
            <type>text/plain</type>
            <size>20801</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE3MzQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBA
CisyMDEyLTA1LTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIHNwYXJzZSBjb25kaXRpb25hbCBjb25zdGFudCBwcm9wYWdhdGlvbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODY1ODAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgZW5oYW5jZXMgQ0ZBIHNvIHRoYXQgaWYgaXQgc3VzcGVjdHMgYXQgYW55IHBvaW50IGR1cmlu
ZyB0aGUgZml4cG9pbnQgdGhhdCBhCisgICAgICAgIGJyYW5jaCB3aWxsIG9ubHkgZ28gb25lIHdh
eSwgdGhlbiBpdCBvbmx5IHByb3BhZ2F0ZXMgaW4gdGhhdCBvbmUgd2F5LgorICAgICAgICAKKyAg
ICAgICAgVGhpcyB2YXN0bHkgaW5jcmVhc2VzIHRoZSBvcHBvcnR1bml0aWVzIGZvciBDRkcgc2lt
cGxpZmljYXRpb24uIEZvciBleGFtcGxlLCBpdAorICAgICAgICBlbmFibGVzIHVzIHRvIGV2YXBv
cmF0ZSB0aGlzIGxvb3A6CisgICAgICAgIAorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE7
ICsraSkgZG9UaGluZ3MoaSk7CisgICAgICAgIAorICAgICAgICBBcyBhIHJlc3VsdCwgaXQgdW5j
b3ZlcmVkIGxvYWRzIG9mIGJ1Z3MgaW4gdGhlIENGRyBzaW1wbGlmaWVyLiBJbiBwYXJ0aWN1bGFy
OgorICAgICAgICAKKyAgICAgICAgLSBQaGkgZml4dXAgd2FzIGFzc3VtaW5nIHRoYXQgYWxsIFBo
aXMgd29ydGggZml4aW5nIHVwIGFyZSBzaG91bGRHZW5lcmF0ZSgpLgorICAgICAgICAgIFRoYXQn
cyBub3QgdHJ1ZTsgd2UgYWxzbyBmaXh1cCBQaGlzIHRoYXQgYXJlIGRlYWQuCisgICAgICAgICAg
CisgICAgICAgIC0gR2V0TG9jYWwgZml4dXAgd2FzIGFzc3VtaW5nIHRoYXQgaXQncyBvbmx5IG5l
Y2Vzc2FyeSB0byByZXdpcmUgbGlua3MgdG8gYQorICAgICAgICAgIEdldExvY2FsLCBhbmQgdGhh
dCB0aGUgR2V0TG9jYWwncyBvd24gbGlua3MgZG9uJ3QgbmVlZCB0byBiZSByZXdpcmVkLiBVbnRy
dWUsCisgICAgICAgICAgYmVjYXVzZSB0aGUgR2V0TG9jYWwgbWF5IG5vdCBiZSByZXdpcmFibGUg
KGZpcnN0IGJsb2NrIGhhcyBubyBHZXRMb2NhbCBmb3IgcjQyCisgICAgICAgICAgYnV0IHNlY29u
ZCBibG9jayBkb2VzIGhhdmUgYSBHZXRMb2NhbCksIGluIHdoaWNoIGNhc2UgaXQgd2lsbCByZWZl
ciB0byBhIFBoaQorICAgICAgICAgIGluIHRoZSBzZWNvbmQgYmxvY2suIFdlIG5lZWQgaXQgdG8g
cmVmZXIgdG8gYSBQaGkgZnJvbSB0aGUgZmlyc3QgYmxvY2sgdG8KKyAgICAgICAgICBlbnN1cmUg
dGhhdCBzdWJzZXF1ZW50IHRyYW5zZm9ybWF0aW9ucyB3b3JrLgorICAgICAgICAgIAorICAgICAg
ICAtIFRhaWwgb3BlcmFuZCBmaXh1cCB3YXMgaWdub3JpbmcgdGhlIGZhY3QgdGhhdCBQaGlzIGlu
IHN1Y2Nlc3NvcnMgbWF5IGNvbnRhaW4KKyAgICAgICAgICByZWZlcmVuY2VzIHRvIHRoZSBjaGls
ZHJlbiBvZiBvdXIgdGFpbCB2YXJpYWJsZXMuIEhlbmNlLCBzdWNjZXNzb3IgUGhpIGNoaWxkCisg
ICAgICAgICAgc3Vic3RpdHV0aW9uIG5lZWRzIHRvIHVzZSB0aGUgb3JpZ2luYWwgc2Vjb25kIGJs
b2NrIHZhcmlhYmxlIHRhYmxlIGFzIGl0cworICAgICAgICAgIHByaW9yLCByYXRoZXIgdGhhbiB0
cnlpbmcgdG8gcmVjb25zdHJ1Y3QgdGhlIHByaW9yIGxhdGVyIChzaW5jZSBieSB0aGF0IHBvaW50
CisgICAgICAgICAgdGhlIGNoaWxkcmVuIG9mIHRoZSBzZWNvbmQgYmxvY2sncyB0YWlsIHZhcmlh
YmxlcyB3aWxsIGhhdmUgYmVlbiBmaXhlZCB1cCwgc28KKyAgICAgICAgICB3ZSB3aWxsIG5vdCBr
bm93IHdoYXQgdGhlIHByaW9yIHdvdWxkIGhhdmUgYmVlbikuCisKKyAgICAgICAgKiBkZmcvREZH
QWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6YmVn
aW5CYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjplbmRCYXNp
Y0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpyZXNldCk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1Y2Nlc3NvcnMpOgorICAgICAgICAqIGRmZy9ERkdB
YnN0cmFjdFN0YXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6YnJhbmNo
RGlyZWN0aW9uVG9TdHJpbmcpOgorICAgICAgICAoQWJzdHJhY3RTdGF0ZSk6CisgICAgICAgICog
ZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNG
R1NpbXBsaWZpY2F0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHU2ltcGxp
ZmljYXRpb25QaGFzZTo6cmVtb3ZlUG90ZW50aWFsbHlEZWFkUGhpUmVmZXJlbmNlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpPcGVyYW5kU3Vic3RpdHV0aW9u
OjpPcGVyYW5kU3Vic3RpdHV0aW9uKToKKyAgICAgICAgKE9wZXJhbmRTdWJzdGl0dXRpb24pOgor
ICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6OnNraXBHZXRMb2NhbCk6
CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6cmVjb3JkUG9zc2li
bGVJbmNvbWluZ1JlZmVyZW5jZSk6CisgICAgICAgIChDRkdTaW1wbGlmaWNhdGlvblBoYXNlKToK
KyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpmaXhUYWlsT3BlcmFu
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6bWVyZ2VCbG9j
a3MpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpjaGFuZ2VFZGdlKToKKwogMjAxMi0wNS0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUu
Y29tPgogCiAgICAgICAgIERGRyBzaG91bGQgb3B0aW1pemUgaW5saW5lZCB1c2VzIG9mIGFyZ3Vt
ZW50cy5sZW5ndGggYW5kIGFyZ3VtZW50c1tpXQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMTczMjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05Miw2ICs5Miw3IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKEJh
c2kKICAgICBtX2Jsb2NrID0gYmFzaWNCbG9jazsKICAgICBtX2lzVmFsaWQgPSB0cnVlOwogICAg
IG1fZm91bmRDb25zdGFudHMgPSBmYWxzZTsKKyAgICBtX2JyYW5jaERpcmVjdGlvbiA9IEludmFs
aWRCcmFuY2hEaXJlY3Rpb247CiB9CiAKIHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShH
cmFwaCYgZ3JhcGgpCkBAIC0xNzYsNyArMTc3LDcgQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjppbml0
aWFsaXplKEdyYXBoJiBncgogICAgIH0KIH0KIAotYm9vbCBBYnN0cmFjdFN0YXRlOjplbmRCYXNp
Y0Jsb2NrKE1lcmdlTW9kZSBtZXJnZU1vZGUpCitib29sIEFic3RyYWN0U3RhdGU6OmVuZEJhc2lj
QmxvY2soTWVyZ2VNb2RlIG1lcmdlTW9kZSwgQnJhbmNoRGlyZWN0aW9uKiBicmFuY2hEaXJlY3Rp
b25QdHIpCiB7CiAgICAgUFJPRklMRShGTEFHX0ZPUl9CTE9DS19FTkQpOwogICAgIEFTU0VSVCht
X2Jsb2NrKTsKQEAgLTIyNiwxOCArMjI3LDI3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZW5kQmFz
aWNCbG9jayhNZXJnZU0KICAgICAKICAgICBBU1NFUlQobWVyZ2VNb2RlICE9IERvbnRNZXJnZSB8
fCAhY2hhbmdlZCk7CiAgICAgCisgICAgQnJhbmNoRGlyZWN0aW9uIGJyYW5jaERpcmVjdGlvbiA9
IG1fYnJhbmNoRGlyZWN0aW9uOworICAgIGlmIChicmFuY2hEaXJlY3Rpb25QdHIpCisgICAgICAg
ICpicmFuY2hEaXJlY3Rpb25QdHIgPSBicmFuY2hEaXJlY3Rpb247CisgICAgCisjaWYgREZHX0VO
QUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgIGRhdGFMb2coIiAgICAgICAgQnJh
bmNoIGRpcmVjdGlvbiA9ICVzXG4iLCBicmFuY2hEaXJlY3Rpb25Ub1N0cmluZyhicmFuY2hEaXJl
Y3Rpb24pKTsKKyNlbmRpZgorICAgIAogICAgIHJlc2V0KCk7CiAgICAgCiAgICAgaWYgKG1lcmdl
TW9kZSAhPSBNZXJnZVRvU3VjY2Vzc29ycykKICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAg
Ci0gICAgcmV0dXJuIG1lcmdlVG9TdWNjZXNzb3JzKG1fZ3JhcGgsIGJsb2NrKTsKKyAgICByZXR1
cm4gbWVyZ2VUb1N1Y2Nlc3NvcnMobV9ncmFwaCwgYmxvY2ssIGJyYW5jaERpcmVjdGlvbik7CiB9
CiAKIHZvaWQgQWJzdHJhY3RTdGF0ZTo6cmVzZXQoKQogewogICAgIG1fYmxvY2sgPSAwOwogICAg
IG1faXNWYWxpZCA9IGZhbHNlOworICAgIG1fYnJhbmNoRGlyZWN0aW9uID0gSW52YWxpZEJyYW5j
aERpcmVjdGlvbjsKIH0KIAogYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGlu
ZGV4SW5CbG9jaykKQEAgLTU1MiwxNiArNTYyLDggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVj
dXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgTG9naWNhbE5vdDogewogICAgICAgICBKU1ZhbHVl
IGNoaWxkQ29uc3QgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIGlm
IChjaGlsZENvbnN0KSB7Ci0gICAgICAgICAgICBpZiAoY2hpbGRDb25zdC5pc051bWJlcigpKSB7
Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChqc0Jvb2xlYW4oIWNoaWxk
Q29uc3QuYXNOdW1iZXIoKSkpOwotICAgICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0
cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKGNoaWxkQ29uc3QuaXNCb29sZWFuKCkpIHsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KGpzQm9vbGVhbighY2hpbGRDb25zdC5hc0Jvb2xlYW4oKSkpOwotICAgICAg
ICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChqc0Jv
b2xlYW4oIWNoaWxkQ29uc3QudG9Cb29sZWFuKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKICAg
ICAgICAgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24oY2hpbGQucHJlZGljdGlvbigpKSkKQEAgLTk1
MCw5ICs5NTIsMjIgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQnJhbmNoOiB7Ci0gICAgICAg
IC8vIFRoZXJlIGlzIHByb2JhYmx5IHByb2ZpdCB0byBiZSBmb3VuZCBpbiBkb2luZyBzcGFyc2Ug
Y29uZGl0aW9uYWwgY29uc3RhbnQKLSAgICAgICAgLy8gcHJvcGFnYXRpb24sIGFuZCB0byB0YWtl
IGl0IG9uZSBzdGVwIGZ1cnRoZXIsIHdoZXJlIGEgdmFyaWFibGUncyB2YWx1ZQotICAgICAgICAv
LyBpcyBzcGVjaWFsaXplZCBvbiBlYWNoIGRpcmVjdGlvbiBvZiBhIGJyYW5jaC4gRm9yIG5vdywg
d2UgZG9uJ3QgZG8gdGhpcy4KKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGZvck5vZGUobm9kZS5j
aGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICBib29s
IGJvb2xlYW5WYWx1ZSA9IHZhbHVlLnRvQm9vbGVhbigpOworICAgICAgICAgICAgaWYgKGJvb2xl
YW5WYWx1ZSkKKyAgICAgICAgICAgICAgICBtX2JyYW5jaERpcmVjdGlvbiA9IFRha2VUcnVlOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fYnJhbmNoRGlyZWN0aW9uID0gVGFr
ZUZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgLy8gRklYTUU6
IFRoZSBhYm92ZSBoYW5kbGVzIHRoZSB0cml2aWFsIGNhc2VzIG9mIHNwYXJzZSBjb25kaXRpb25h
bAorICAgICAgICAvLyBjb25zdGFudCBwcm9wYWdhdGlvbiwgYnV0IHdlIGNhbiBkbyBiZXR0ZXI6
CisgICAgICAgIC8vIDEpIElmIHRoZSBhYnN0cmFjdCB2YWx1ZSBkb2VzIG5vdCBoYXZlIGEgY29u
Y3JldGUgdmFsdWUgYnV0IGRlc2NyaWJlcworICAgICAgICAvLyAgICBzb21ldGhpbmcgdGhhdCBp
cyBrbm93biB0byBldmFsdWF0ZSB0cnVlIChvciBmYWxzZSkgdGhlbiB3ZSBvdWdodAorICAgICAg
ICAvLyAgICB0byBzcGFyc2UgY29uZGl0aW9uYWwgdGhhdC4KKyAgICAgICAgLy8gMikgV2UgY2Fu
IHNwZWNpYWxpemUgdGhlIHNvdXJjZSB2YXJpYWJsZSdzIHZhbHVlIG9uIGVhY2ggZGlyZWN0aW9u
IG9mCisgICAgICAgIC8vICAgIHRoZSBicmFuY2guCiAgICAgICAgIE5vZGUmIGNoaWxkID0gbV9n
cmFwaFtub2RlLmNoaWxkMSgpXTsKICAgICAgICAgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUJv
b2xlYW4oKSkKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRp
Y3RCb29sZWFuKTsKQEAgLTk2NCw2ICs5NzksNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihQcmVkaWN0SW50MzIpOwogICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVO
dW1iZXIoKSkKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRp
Y3ROdW1iZXIpOworICAgICAgICBtX2JyYW5jaERpcmVjdGlvbiA9IFRha2VCb3RoOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKQEAgLTE0OTksNyArMTUxNSw4IEBAIGlubGlu
ZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlKEJhc2ljQmwKICAgICByZXR1cm4gY2hhbmdlZDsK
IH0KIAotaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1Y2Nlc3NvcnMoR3JhcGgm
IGdyYXBoLCBCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrKQoraW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0
ZTo6bWVyZ2VUb1N1Y2Nlc3NvcnMoCisgICAgR3JhcGgmIGdyYXBoLCBCYXNpY0Jsb2NrKiBiYXNp
Y0Jsb2NrLCBCcmFuY2hEaXJlY3Rpb24gYnJhbmNoRGlyZWN0aW9uKQogewogICAgIFBST0ZJTEUo
RkxBR19GT1JfTUVSR0VfVE9fU1VDQ0VTU09SUyk7CiAKQEAgLTE1MDksNiArMTUyNiw3IEBAIGlu
bGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXMKICAgICAKICAgICBzd2l0Y2gg
KHRlcm1pbmFsLm9wKCkpIHsKICAgICBjYXNlIEp1bXA6IHsKKyAgICAgICAgQVNTRVJUKGJyYW5j
aERpcmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9uKTsKICNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2coIiAgICAgICAgTWVyZ2lu
ZyB0byBibG9jayAjJXUuXG4iLCB0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKSk7CiAjZW5kaWYK
QEAgLTE1MTYsMjEgKzE1MzQsMjUgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VU
b1N1Y2NlcwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBCcmFuY2g6IHsKKyAgICAgICAgQVNT
RVJUKGJyYW5jaERpcmVjdGlvbiAhPSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9uKTsKICAgICAgICAg
Ym9vbCBjaGFuZ2VkID0gZmFsc2U7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQogICAgICAgICBkYXRhTG9nKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1Llxu
IiwgdGVybWluYWwudGFrZW5CbG9ja0luZGV4KCkpOwogI2VuZGlmCi0gICAgICAgIGNoYW5nZWQg
fD0gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwudGFrZW5CbG9ja0lu
ZGV4KCldLmdldCgpKTsKKyAgICAgICAgaWYgKGJyYW5jaERpcmVjdGlvbiAhPSBUYWtlRmFsc2Up
CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tz
W3Rlcm1pbmFsLnRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CiAjaWYgREZHX0VOQUJMRShERUJV
R19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nKCIgICAgICAgIE1lcmdpbmcg
dG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwubm90VGFrZW5CbG9ja0luZGV4KCkpOwogI2VuZGlm
Ci0gICAgICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVy
bWluYWwubm90VGFrZW5CbG9ja0luZGV4KCldLmdldCgpKTsKKyAgICAgICAgaWYgKGJyYW5jaERp
cmVjdGlvbiAhPSBUYWtlVHJ1ZSkKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNC
bG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwubm90VGFrZW5CbG9ja0luZGV4KCldLmdldCgp
KTsKICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFJl
dHVybjoKICAgICBjYXNlIFRocm93OgogICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKKyAg
ICAgICAgQVNTRVJUKGJyYW5jaERpcmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9uKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICBkZWZhdWx0OgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDEx
NzMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5MiwzNiBAQCBwdWJsaWM6CiAgICAgICAgIE1lcmdlVG9T
dWNjZXNzb3JzCiAgICAgfTsKICAgICAKKyAgICBlbnVtIEJyYW5jaERpcmVjdGlvbiB7CisgICAg
ICAgIC8vIFRoaXMgaXMgbm90IGEgYnJhbmNoIGFuZCBzbyB0aGVyZSBpcyBubyBicmFuY2ggZGly
ZWN0aW9uLCBvcgorICAgICAgICAvLyB0aGUgYnJhbmNoIGRpcmVjdGlvbiBoYXMgeWV0IHRvIGJl
IHNldC4KKyAgICAgICAgSW52YWxpZEJyYW5jaERpcmVjdGlvbiwKKyAgICAgICAgCisgICAgICAg
IC8vIFRoZSBicmFuY2ggdGFrZXMgdGhlIHRydWUgY2FzZS4KKyAgICAgICAgVGFrZVRydWUsCisg
ICAgICAgIAorICAgICAgICAvLyBUaGUgYnJhbmNoIHRha2VzIHRoZSBmYWxzZSBjYXNlLgorICAg
ICAgICBUYWtlRmFsc2UsCisgICAgICAgIAorICAgICAgICAvLyBGb3IgYWxsIHdlIGtub3csIHRo
ZSBicmFuY2ggY291bGQgZ28gZWl0aGVyIGRpcmVjdGlvbiwgc28gd2UKKyAgICAgICAgLy8gaGF2
ZSB0byBhc3N1bWUgdGhlIHdvcnN0LgorICAgICAgICBUYWtlQm90aAorICAgIH07CisgICAgCisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGJyYW5jaERpcmVjdGlvblRvU3RyaW5nKEJyYW5jaERpcmVj
dGlvbiBicmFuY2hEaXJlY3Rpb24pCisgICAgeworICAgICAgICBzd2l0Y2ggKGJyYW5jaERpcmVj
dGlvbikgeworICAgICAgICBjYXNlIEludmFsaWRCcmFuY2hEaXJlY3Rpb246CisgICAgICAgICAg
ICByZXR1cm4gIkludmFsaWQiOworICAgICAgICBjYXNlIFRha2VUcnVlOgorICAgICAgICAgICAg
cmV0dXJuICJUYWtlVHJ1ZSI7CisgICAgICAgIGNhc2UgVGFrZUZhbHNlOgorICAgICAgICAgICAg
cmV0dXJuICJUYWtlRmFsc2UiOworICAgICAgICBjYXNlIFRha2VCb3RoOgorICAgICAgICAgICAg
cmV0dXJuICJUYWtlQm90aCI7CisgICAgICAgIH0KKyAgICB9CisKICAgICBBYnN0cmFjdFN0YXRl
KEdyYXBoJik7CiAgICAgCiAgICAgfkFic3RyYWN0U3RhdGUoKTsKQEAgLTEzOSw3ICsxNjksMTEg
QEAgcHVibGljOgogICAgIC8vICAgIEEgdHJ1ZSByZXR1cm4gbWVhbnMgdGhhdCB5b3UgbXVzdCBy
ZXZpc2l0IChhdCBsZWFzdCkgdGhlIHN1Y2Nlc3NvcgogICAgIC8vICAgIGJsb2Nrcy4gVGhpcyBh
bHNvIHNldHMgY2ZhU2hvdWxkUmV2aXNpdCB0byB0cnVlIGZvciBiYXNpYyBibG9ja3MKICAgICAv
LyAgICB0aGF0IG11c3QgYmUgdmlzaXRlZCBuZXh0LgotICAgIGJvb2wgZW5kQmFzaWNCbG9jayhN
ZXJnZU1vZGUpOworICAgIC8vCisgICAgLy8gSWYgeW91J2QgbGlrZSB0byBrbm93IHdoYXQgZGly
ZWN0aW9uIHRoZSBicmFuY2ggYXQgdGhlIGVuZCBvZiB0aGUKKyAgICAvLyBiYXNpYyBibG9jayBp
cyB0aG91Z2h0IHRvIGhhdmUgdGFrZW4sIHlvdSBjYW4gcGFzcyBhIG5vbi0wIHBvaW50ZXIKKyAg
ICAvLyBmb3IgQnJhbmNoRGlyZWN0aW9uLgorICAgIGJvb2wgZW5kQmFzaWNCbG9jayhNZXJnZU1v
ZGUsIEJyYW5jaERpcmVjdGlvbiogPSAwKTsKICAgICAKICAgICAvLyBSZXNldCB0aGUgQWJzdHJh
Y3RTdGF0ZS4gVGhpcyB0aHJvd3MgYXdheSBhbnkgcmVzdWx0cywgYW5kIGF0IHRoaXMgcG9pbnQK
ICAgICAvLyB5b3UgY2FuIHNhZmVseSBjYWxsIGJlZ2luQmFzaWNCbG9jaygpIG9uIGFueSBiYXNp
YyBibG9jay4KQEAgLTE2OSw3ICsyMDMsNyBAQCBwdWJsaWM6CiAgICAgLy8gc3VjY2Vzc29ycy4g
UmV0dXJucyB0cnVlIGlmIGFueSBvZiB0aGUgc3VjY2Vzc29ycycgc3RhdGVzIGNoYW5nZWQuIE5v
dGUKICAgICAvLyB0aGF0IHRoaXMgaXMgYXV0b21hdGljYWxseSBjYWxsZWQgaW4gZW5kQmFzaWNC
bG9jaygpIGlmIE1lcmdlTW9kZSBpcwogICAgIC8vIE1lcmdlVG9TdWNjZXNzb3JzLgotICAgIGJv
b2wgbWVyZ2VUb1N1Y2Nlc3NvcnMoR3JhcGgmLCBCYXNpY0Jsb2NrKik7CisgICAgYm9vbCBtZXJn
ZVRvU3VjY2Vzc29ycyhHcmFwaCYsIEJhc2ljQmxvY2sqLCBCcmFuY2hEaXJlY3Rpb24pOwogCiAg
ICAgdm9pZCBkdW1wKEZJTEUqIG91dCk7CiAgICAgCkBAIC0xOTAsNiArMjI0LDggQEAgcHJpdmF0
ZToKICAgICBib29sIG1fZm91bmRDb25zdGFudHM7CiAgICAgCiAgICAgYm9vbCBtX2lzVmFsaWQ7
CisgICAgCisgICAgQnJhbmNoRGlyZWN0aW9uIG1fYnJhbmNoRGlyZWN0aW9uOyAvLyBUaGlzIGlz
IG9ubHkgc2V0IGZvciBibG9ja3MgdGhhdCBlbmQgaW4gQnJhbmNoIGFuZCB0aGF0IGV4ZWN1dGUg
dG8gY29tcGxldGlvbiAoaS5lLiBtX2lzVmFsaWQgPT0gdHJ1ZSkuCiB9OwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1Np
bXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDExNzMyNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDggQEAgcHVibGljOgogICAgIAogICAgIGJvb2wg
cnVuKCkKICAgICB7CisgICAgICAgIGNvbnN0IGJvb2wgZXh0cmVtZUxvZ2dpbmcgPSBmYWxzZTsK
KwogICAgICAgICBib29sIG91dGVyQ2hhbmdlZCA9IGZhbHNlOwogICAgICAgICBib29sIGlubmVy
Q2hhbmdlZDsKICAgICAgICAgCkBAIC02Nyw2ICs2OSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIkNGR1NpbXBsaWZ5OiBKdW1wIG1lcmdlIG9uIEJsb2NrICMl
dSB0byBCbG9jayAjJXUuXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9j
a0luZGV4LCBtX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCkpOwogI2VuZGlmCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZXh0cmVtZUxvZ2dpbmcpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZUJsb2Nr
cyhibG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCksIE5vQmxvY2spOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaW5uZXJDaGFuZ2VkID0gb3V0ZXJDaGFuZ2VkID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTA3LDYgKzExMSw4IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgsIG1fZ3Jh
cGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCBjb25kaXRpb24pLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxv
Y2ssICFjb25kaXRpb24pKTsKICNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChleHRyZW1lTG9nZ2luZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5kdW1wKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCbG9ja3MoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCBjb25k
aXRpb24pLApAQCAtMTE4LDYgKzEyNCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgsIG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9u
KGJsb2NrLCBjb25kaXRpb24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssICFjb25kaXRpb24pKTsKICNlbmRp
ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHRyZW1lTG9nZ2luZykKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0YWtlbkJsb2NrSW5kZXggPSBtX2dyYXBoLnN1Y2Nl
c3NvckZvckNvbmRpdGlvbihibG9jaywgY29uZGl0aW9uKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBCbG9ja0luZGV4IG5vdFRha2VuQmxvY2tJbmRleCA9IG1fZ3JhcGguc3VjY2Vzc29y
Rm9yQ29uZGl0aW9uKGJsb2NrLCAhY29uZGl0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IApAQCAtMzg1LDcgKzM5Myw4IEBAIHByaXZhdGU6CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nKCIgUmVtb3ZpbmcgcmVmZXJlbmNlIGF0
IGNoaWxkICV1LiIsIGVkZ2VJbmRleCk7CiAjZW5kaWYKLSAgICAgICAgbV9ncmFwaC5kZXJlZiht
eU5vZGVJbmRleCk7CisgICAgICAgIGlmIChwaGlOb2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAg
ICAgICAgICBtX2dyYXBoLmRlcmVmKG15Tm9kZUluZGV4KTsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gZWRnZUluZGV4OyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZSAtIDE7ICsraSkKICAgICAg
ICAgICAgIHBoaU5vZGUuY2hpbGRyZW4uc2V0Q2hpbGQoaSwgcGhpTm9kZS5jaGlsZHJlbi5jaGls
ZChpICsgMSkpOwogICAgICAgICBwaGlOb2RlLmNoaWxkcmVuLnNldENoaWxkKEFkamFjZW5jeUxp
c3Q6OlNpemUgLSAxLCBFZGdlKCkpOwpAQCAtMzk4LDYgKzQwNywxMiBAQCBwcml2YXRlOgogICAg
ICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIGV4cGxpY2l0IE9wZXJhbmRTdWJz
dGl0dXRpb24oTm9kZUluZGV4IG9sZENoaWxkKQorICAgICAgICAgICAgOiBvbGRDaGlsZChvbGRD
aGlsZCkKKyAgICAgICAgICAgICwgbmV3Q2hpbGQob2xkQ2hpbGQpCisgICAgICAgIHsKKyAgICAg
ICAgfQorICAgICAgICAKICAgICAgICAgT3BlcmFuZFN1YnN0aXR1dGlvbihOb2RlSW5kZXggb2xk
Q2hpbGQsIE5vZGVJbmRleCBuZXdDaGlsZCkKICAgICAgICAgICAgIDogb2xkQ2hpbGQob2xkQ2hp
bGQpCiAgICAgICAgICAgICAsIG5ld0NoaWxkKG5ld0NoaWxkKQpAQCAtNDE5LDEzICs0MzQsMjQg
QEAgcHJpdmF0ZToKICAgICAKICAgICBOb2RlSW5kZXggc2tpcEdldExvY2FsKE5vZGVJbmRleCBu
b2RlSW5kZXgpCiAgICAgeworICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAg
ICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJ
bmRleF07CiAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gR2V0TG9jYWwpCiAgICAgICAgICAgICBy
ZXR1cm4gbm9kZS5jaGlsZDEoKS5pbmRleCgpOwogICAgICAgICByZXR1cm4gbm9kZUluZGV4Owog
ICAgIH0KICAgICAKLSAgICB2b2lkIGZpeFRhaWxPcGVyYW5kKEJhc2ljQmxvY2sqIGZpcnN0Qmxv
Y2ssIEJhc2ljQmxvY2sqIHNlY29uZEJsb2NrLCBpbnQgb3BlcmFuZCwgT3BlcmFuZHM8T3BlcmFu
ZFN1YnN0aXR1dGlvbj4mIHN1YnN0aXR1dGlvbnMpCisgICAgdm9pZCByZWNvcmRQb3NzaWJsZUlu
Y29taW5nUmVmZXJlbmNlKAorICAgICAgICBCYXNpY0Jsb2NrKiBzZWNvbmRCbG9jaywgT3BlcmFu
ZHM8T3BlcmFuZFN1YnN0aXR1dGlvbj4mIHN1YnN0aXR1dGlvbnMsIGludCBvcGVyYW5kKQorICAg
IHsKKyAgICAgICAgc3Vic3RpdHV0aW9ucy5vcGVyYW5kKG9wZXJhbmQpID0gT3BlcmFuZFN1YnN0
aXR1dGlvbigKKyAgICAgICAgICAgIHNraXBHZXRMb2NhbChzZWNvbmRCbG9jay0+dmFyaWFibGVz
QXRUYWlsLm9wZXJhbmQob3BlcmFuZCkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaXhUYWls
T3BlcmFuZCgKKyAgICAgICAgQmFzaWNCbG9jayogZmlyc3RCbG9jaywgQmFzaWNCbG9jayogc2Vj
b25kQmxvY2ssIGludCBvcGVyYW5kLAorICAgICAgICBPcGVyYW5kczxPcGVyYW5kU3Vic3RpdHV0
aW9uPiYgc3Vic3RpdHV0aW9ucykKICAgICB7CiAgICAgICAgIE5vZGVJbmRleCBhdFNlY29uZFRh
aWwgPSBzZWNvbmRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CiAgICAg
ICAgIApAQCAtNDQ5LDkgKzQ3NSw4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUGhpOiB7CiAg
ICAgICAgICAgICAvLyBLZWVwIHdoYXQgd2FzIGluIHRoZSBmaXJzdCBibG9jay4KICAgICAgICAg
ICAgIEFTU0VSVChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSAh
PSBOb05vZGUpOwotICAgICAgICAgICAgc3Vic3RpdHV0aW9ucy5vcGVyYW5kKG9wZXJhbmQpID0K
LSAgICAgICAgICAgICAgICBPcGVyYW5kU3Vic3RpdHV0aW9uKAotICAgICAgICAgICAgICAgICAg
ICBhdFNlY29uZFRhaWwsIHNraXBHZXRMb2NhbChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZChvcGVyYW5kKSkpOworICAgICAgICAgICAgc3Vic3RpdHV0aW9ucy5vcGVyYW5kKG9w
ZXJhbmQpLm5ld0NoaWxkID0KKyAgICAgICAgICAgICAgICBza2lwR2V0TG9jYWwoZmlyc3RCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KIApAQCAtNDYxLDYgKzQ4Niw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAv
LyBibG9jayBkb2Vzbid0IGV2ZW4ga25vdyBhYm91dCB0aGlzIHZhcmlhYmxlLgogICAgICAgICAg
ICAgaWYgKHNlY29uZE5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkgewog
ICAgICAgICAgICAgICAgIGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJh
bmQpID0gYXRTZWNvbmRUYWlsOworICAgICAgICAgICAgICAgIHN1YnN0aXR1dGlvbnMub3BlcmFu
ZChvcGVyYW5kKS5uZXdDaGlsZCA9CisgICAgICAgICAgICAgICAgICAgIHNlY29uZE5vZGUuY2hp
bGQxKCkuaW5kZXgoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIApAQCAtNDczLDE2ICs1MDAsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNh
c2UgU2V0QXJndW1lbnQ6CiAgICAgICAgICAgICBjYXNlIFBoaToKICAgICAgICAgICAgICAgICBm
aXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSA9IGF0U2Vjb25kVGFp
bDsKKyAgICAgICAgICAgICAgICBzdWJzdGl0dXRpb25zLm9wZXJhbmQob3BlcmFuZCkubmV3Q2hp
bGQgPQorICAgICAgICAgICAgICAgICAgICBzZWNvbmROb2RlLmNoaWxkMSgpLmluZGV4KCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAgLy8gS2VlcCB3aGF0IHdhcyBpbiB0aGUgZmlyc3QgYmxvY2ssIGFuZCBhZGp1c3QgdGhl
IHN1YnN0aXR1dGlvbiB0byBhY2NvdW50IGZvcgogICAgICAgICAgICAgICAgIC8vIHRoZSBmYWN0
IHRoYXQgc3VjY2Vzc29ycyB3aWxsIHJlZmVyIHRvIHRoZSBjaGlsZCBvZiB0aGUgR2V0TG9jYWwu
CiAgICAgICAgICAgICAgICAgQVNTRVJUKGZpcnN0QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVy
YW5kKG9wZXJhbmQpICE9IE5vTm9kZSk7Ci0gICAgICAgICAgICAgICAgc3Vic3RpdHV0aW9ucy5v
cGVyYW5kKG9wZXJhbmQpID0KLSAgICAgICAgICAgICAgICAgICAgT3BlcmFuZFN1YnN0aXR1dGlv
bigKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZE5vZGUuY2hpbGQxKCkuaW5kZXgoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIHNraXBHZXRMb2NhbChmaXJzdEJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSkpOworICAgICAgICAgICAgICAgIHN1YnN0aXR1dGlv
bnMub3BlcmFuZChvcGVyYW5kKS5uZXdDaGlsZCA9CisgICAgICAgICAgICAgICAgICAgIHNraXBH
ZXRMb2NhbChmaXJzdEJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsK
QEAgLTUyNyw3ICs1NTQsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnBoaXMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAg
ICBmaXJzdEJsb2NrLT5waGlzLmFwcGVuZChzZWNvbmRCbG9jay0+cGhpc1tpXSk7Ci0gICAgICAg
IAorCisgICAgICAgIC8vIEJlZm9yZSB3ZSBzdGFydCBjaGFuZ2luZyB0aGUgc2Vjb25kIGJsb2Nr
J3MgZ3JhcGgsIHJlY29yZCB3aGF0IG5vZGVzIHdvdWxkCisgICAgICAgIC8vIGJlIHJlZmVyZW5j
ZWQgYnkgc3VjY2Vzc29ycyBvZiB0aGUgc2Vjb25kIGJsb2NrLgorICAgICAgICBPcGVyYW5kczxP
cGVyYW5kU3Vic3RpdHV0aW9uPiBzdWJzdGl0dXRpb25zKAorICAgICAgICAgICAgc2Vjb25kQmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpLAorICAgICAgICAgICAgc2Vj
b25kQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpKTsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9m
QXJndW1lbnRzKCk7ICsraSkKKyAgICAgICAgICAgIHJlY29yZFBvc3NpYmxlSW5jb21pbmdSZWZl
cmVuY2Uoc2Vjb25kQmxvY2ssIHN1YnN0aXR1dGlvbnMsIGFyZ3VtZW50VG9PcGVyYW5kKGkpKTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9jay0+dmFyaWFibGVzQXRU
YWlsLm51bWJlck9mTG9jYWxzKCk7ICsraSkKKyAgICAgICAgICAgIHJlY29yZFBvc3NpYmxlSW5j
b21pbmdSZWZlcmVuY2Uoc2Vjb25kQmxvY2ssIHN1YnN0aXR1dGlvbnMsIGkpOworCiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnNpemUoKTsgKytpKSB7CiAgICAg
ICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gc2Vjb25kQmxvY2stPmF0KGkpOwogICAgICAg
ICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKQEAgLTU0OSwxNyArNTg2LDIx
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEZsdXNoOiB7Ci0gICAgICAgICAgICAgICAg
Ly8gVGhlIGZsdXNoIGNvdWxkIHVzZSBhIEdldExvY2FsLCBTZXRMb2NhbCwgU2V0QXJndW1lbnQs
IG9yIGEgUGhpLgorICAgICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgICAgIGNhc2UgR2V0
TG9jYWw6IHsKKyAgICAgICAgICAgICAgICAvLyBBIEZsdXNoIGNvdWxkIHVzZSBhIEdldExvY2Fs
LCBTZXRMb2NhbCwgU2V0QXJndW1lbnQsIG9yIGEgUGhpLgogICAgICAgICAgICAgICAgIC8vIElm
IGl0IHVzZXMgYSBHZXRMb2NhbCwgaXQnbGwgYmUgdGFrZW4gY2FyZSBvZiBiZWxvdy4gSWYgaXQg
dXNlcyBhCiAgICAgICAgICAgICAgICAgLy8gU2V0TG9jYWwgb3IgU2V0QXJndW1lbnQsIHRoZW4g
aXQgbXVzdCBiZSB1c2luZyBhIG5vZGUgZnJvbSB0aGUKICAgICAgICAgICAgICAgICAvLyBzYW1l
IGJsb2NrLiBCdXQgaWYgaXQgdXNlcyBhIFBoaSwgdGhlbiB3ZSBzaG91bGQgcmVkaXJlY3QgaXQg
dG8KICAgICAgICAgICAgICAgICAvLyB1c2Ugd2hhdGV2ZXIgdGhlIGZpcnN0IGJsb2NrIGFkdmVy
dGlzZWQgYXMgYSB0YWlsIG9wZXJhbmQuCisgICAgICAgICAgICAgICAgLy8gU2ltaWxhcmx5IGZv
ciBHZXRMb2NhbDsgaXQgY291bGQgdXNlIGFueSBvZiB0aG9zZSBleGNlcHQgZm9yCisgICAgICAg
ICAgICAgICAgLy8gR2V0TG9jYWwuIElmIGl0IHVzZXMgYSBQaGkgdGhlbiBpdCBzaG91bGQgYmUg
cmVkaXJlY3RlZCB0byB1c2UgYQorICAgICAgICAgICAgICAgIC8vIFBoaSBmcm9tIHRoZSB0YWls
IG9wZXJhbmQuCiAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ub3Ao
KSAhPSBQaGkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIE5vZGVJbmRleCBhdEZpcnN0SW5kZXggPSBmaXJzdEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZChub2RlLmxvY2FsKCkpOwotICAgICAgICAgICAgICAgIG1fZ3Jh
cGguY2hhbmdlRWRnZShub2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBFZGdlKGF0Rmlyc3RJbmRleCkp
OworICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhbmdlRWRnZShub2RlLmNoaWxkcmVuLmNoaWxk
MSgpLCBFZGdlKGF0Rmlyc3RJbmRleCksIG5vZGUuc2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC02MDgs
OSArNjQ5LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZpeEpldHRpc29uZWRQcmVkZWNlc3Nv
cnMoZmlyc3RCbG9ja0luZGV4LCBqZXR0aXNvbmVkQmxvY2tJbmRleCk7CiAgICAgICAgIAogICAg
ICAgICAvLyBGaXggdXAgdGhlIHZhcmlhYmxlcyBhdCB0YWlsLgotICAgICAgICBPcGVyYW5kczxP
cGVyYW5kU3Vic3RpdHV0aW9uPiBzdWJzdGl0dXRpb25zKAotICAgICAgICAgICAgc2Vjb25kQmxv
Y2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLAotICAgICAgICAgICAgc2Vj
b25kQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzZWNvbmRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9m
QXJndW1lbnRzKCk7ICsraSkKICAgICAgICAgICAgIGZpeFRhaWxPcGVyYW5kKGZpcnN0QmxvY2ss
IHNlY29uZEJsb2NrLCBhcmd1bWVudFRvT3BlcmFuZChpKSwgc3Vic3RpdHV0aW9ucyk7CiAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Vjb25kQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5u
dW1iZXJPZkxvY2FscygpOyArK2kpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCShyZXZpc2lvbiAxMTczMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOCwxMCArMTI4LDEyIEBAIHB1YmxpYzoKICAgICAg
ICAgZWRnZS5zZXRJbmRleChuZXdJbmRleCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY2hhbmdl
RWRnZShFZGdlJiBlZGdlLCBFZGdlIG5ld0VkZ2UpCisgICAgdm9pZCBjaGFuZ2VFZGdlKEVkZ2Um
IGVkZ2UsIEVkZ2UgbmV3RWRnZSwgYm9vbCBjaGFuZ2VSZWYgPSB0cnVlKQogICAgIHsKLSAgICAg
ICAgcmVmKG5ld0VkZ2UpOwotICAgICAgICBkZXJlZihlZGdlKTsKKyAgICAgICAgaWYgKGNoYW5n
ZVJlZikgeworICAgICAgICAgICAgcmVmKG5ld0VkZ2UpOworICAgICAgICAgICAgZGVyZWYoZWRn
ZSk7CisgICAgICAgIH0KICAgICAgICAgZWRnZSA9IG5ld0VkZ2U7CiAgICAgfQogICAgIAo=
</data>
<flag name="review"
          id="148644"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>