<?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>145295</bug_id>
          
          <creation_ts>2015-05-21 22:26:46 -0700</creation_ts>
          <short_desc>DFG::PutStackSinkingPhase should not treat the stack variables written by LoadVarargs/ForwardVarargs as being live</short_desc>
          <delta_ts>2015-11-09 16:39:40 -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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>149409</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1096782</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-21 22:26:46 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139643</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-05 10:17:59 -0800</bug_when>
    <thetext>It would be great if PutStackSinkingPhase didn&apos;t have to be precise about this.

What&apos;s your argument for why the weird IR that PutStackSinkingPhase generates is wrong?  Could we just formalize the concept that a stray GetStack can load garbage so long as the value is irrelevant?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140031</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-06 12:19:03 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; It would be great if PutStackSinkingPhase didn&apos;t have to be precise about
&gt; this.
&gt; 
&gt; What&apos;s your argument for why the weird IR that PutStackSinkingPhase
&gt; generates is wrong?  Could we just formalize the concept that a stray
&gt; GetStack can load garbage so long as the value is irrelevant?

I don&apos;t have an argument yet. I really need to investigate it more, I currently don&apos;t really know why we&apos;re invalidating the block we crash on as unreachable when it really is reachable. My hypothesis is we&apos;re generating dead code that the DFG thinks isn&apos;t dead b/c of how it will sink PutStacks to LoadVarargs even when the LoadVarargs is about to write to the same stack location as the PutStack. This is probably causing something up the chain to invalidate the block we&apos;re crashing in.

I&apos;ll post more as I find out more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140041</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-06 12:40:39 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (In reply to comment #1)
&gt; &gt; It would be great if PutStackSinkingPhase didn&apos;t have to be precise about
&gt; &gt; this.
&gt; &gt; 
&gt; &gt; What&apos;s your argument for why the weird IR that PutStackSinkingPhase
&gt; &gt; generates is wrong?  Could we just formalize the concept that a stray
&gt; &gt; GetStack can load garbage so long as the value is irrelevant?
&gt; 
&gt; I don&apos;t have an argument yet. I really need to investigate it more, I
&gt; currently don&apos;t really know why we&apos;re invalidating the block we crash on as
&gt; unreachable when it really is reachable. My hypothesis is we&apos;re generating
&gt; dead code 

Let&apos;s not use the term &quot;dead code&quot;.  I propose the following terms:

- Unreachable code.  This is code that cannot be reached by any control flow path.
- Always-exiting code.  This is a special kind of unreachable code, where you are unreachable because anyone who could have a path to you will always exit.
- Code with unused results.  This is code that has no side effects and produces a value that nobody consumes.  This is traditionally called &quot;dead code&quot;.

I&apos;m pretty sure you don&apos;t mean that the code is dead in the sense that its results are unused.  A PutStack is an effectful operation so it is never dead.  Same for LoadVarargs.  Probably, you are talking about unreachable code.

&gt; that the DFG thinks isn&apos;t dead b/c of how it will sink PutStacks
&gt; to LoadVarargs even when the LoadVarargs is about to write to the same stack
&gt; location as the PutStack. 

This does not seem plausible.  The fact that you did a PutStack that gets overwritten has no effect on whether code is reachable or alive.

&gt; This is probably causing something up the chain to
&gt; invalidate the block we&apos;re crashing in.
&gt; 
&gt; I&apos;ll post more as I find out more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140474</commentid>
    <comment_count>4</comment_count>
      <attachid>265084</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-09 12:54:45 -0800</bug_when>
    <thetext>Created attachment 265084
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140476</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-09 12:57:42 -0800</bug_when>
    <thetext>Attachment 265084 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGPreciseLocalClobberize.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:119:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:278:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:491:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 4 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140499</commentid>
    <comment_count>6</comment_count>
      <attachid>265084</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-09 13:24:08 -0800</bug_when>
    <thetext>Comment on attachment 265084
patch

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

You should also probably remove or edit this comment:

        // This code has some interesting quirks because of the fact that neither liveness nor
        // deferrals are very precise. They are only precise enough to be able to correctly tell us
        // when we may [sic] need to execute PutStacks. This means that they may report the need to
        // execute a PutStack in cases where we actually don&apos;t really need it, and that&apos;s totally OK.

&gt; Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:122
&gt; +
&gt; +                    auto writeHandler = [&amp;] (VirtualRegister operand) {
&gt; +                        RELEASE_ASSERT(node-&gt;op() == PutStack || node-&gt;op() == LoadVarargs || node-&gt;op() == ForwardVarargs);
&gt; +                        live.operand(operand) = false;
&gt; +                    };

This seems kind of dangerous.  What if an operation both reads and writes a local?  In that case, it&apos;s live.  But you&apos;ll make it dead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140516</commentid>
    <comment_count>7</comment_count>
      <attachid>265084</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-11-09 13:56:02 -0800</bug_when>
    <thetext>Comment on attachment 265084
patch

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

&gt; Source/JavaScriptCore/ChangeLog:21
&gt; +        block would indeed be reached.The solution here is to be more precise about the 

. The

&gt; Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:110
&gt; -                    
&gt; +

Revert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140543</commentid>
    <comment_count>8</comment_count>
      <attachid>265099</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-09 14:39:02 -0800</bug_when>
    <thetext>Created attachment 265099
patch

Enforced correct liveness by executing writes before reads.
I also edited the comment to describe that being imprecise
about liveness can be dangerous because it can cause us
to insert GetStacks in regions where such a GetStack
makes no sense and would load garbage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140546</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-09 14:41:37 -0800</bug_when>
    <thetext>Attachment 265099 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGPreciseLocalClobberize.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:121:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:288:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:501:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 4 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140580</commentid>
    <comment_count>10</comment_count>
      <attachid>265099</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-09 16:11:35 -0800</bug_when>
    <thetext>Comment on attachment 265099
patch

Nice!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140596</commentid>
    <comment_count>11</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-09 16:39:40 -0800</bug_when>
    <thetext>landed in:
http://trac.webkit.org/changeset/192190</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265084</attachid>
            <date>2015-11-09 12:54:45 -0800</date>
            <delta_ts>2015-11-09 14:39:02 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>11259</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyMTY3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBA
CisyMDE1LTExLTA5ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IERGRzo6UHV0U3RhY2tTaW5raW5nUGhhc2Ugc2hvdWxkIG5vdCB0cmVhdCB0aGUgc3RhY2sgdmFy
aWFibGVzIHdyaXR0ZW4gYnkgTG9hZFZhcmFyZ3MvRm9yd2FyZFZhcmFyZ3MgYXMgYmVpbmcgbGl2
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1Mjk1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBmaXhlcyBQdXRTdGFja1NpbmtpbmdQaGFzZSB0byBubyBsb25nZXIgZXNjYXBlIHRoZSBz
dGFjaworICAgICAgICBsb2NhdGlvbnMgdGhhdCBMb2FkVmFyYXJncyBhbmQgRm9yd2FyZFZhcmFy
Z3Mgd3JpdGUgdG8uIFdlIHVzZWQKKyAgICAgICAgdG8gY29uc2lkZXIgc2lua2luZyBQdXRTdGFj
a3MgcmlnaHQgYmVmb3JlIGEgTG9hZFZhcmFyZ3MvRm9yd2FyZFZhcmFyZ3MKKyAgICAgICAgYmVj
YXVzZSB3ZSBjb25zaWRlcmVkIHRoZW0gdXNlcyBvZiBzdWNoIHN0YWNrIGxvY2F0aW9ucy4gVGhl
eSBhcmVuJ3QKKyAgICAgICAgdXNlcyBvZiB0aG9zZSBzdGFjayBsb2NhdGlvbnMsIHRoZXkgdW5j
b25kaXRpb25hbGx5IHdyaXRlIHRvIHRob3NlCisgICAgICAgIHN0YWNrIGxvY2F0aW9ucy4gU2lu
a2luZyBQdXRTdGFja3MgdG8gdGhlc2Ugbm9kZXMgd2FzIG5vdCBuZWVkZWQgYmVmb3JlLAorICAg
ICAgICBidXQgc2VlbWVkIG1vc3RseSBpbm5vY2VudC4gQnV0IEkgcmFuIGludG8gYSBwcm9ibGVt
IHdpdGggdGhpcyB3aGlsZSBpbXBsZW1lbnRpbmcgCisgICAgICAgIEZUTCB0cnkvY2F0Y2ggd2hl
cmUgd2Ugd291bGQgZW5kIHVwIGhhdmluZyB0byBnZW5lcmF0ZSBhIHZhbHVlIGZvciBhIHN1bmtl
biBQdXRTdGFjayAKKyAgICAgICAgcmlnaHQgYmVmb3JlIGEgTG9hZFZhcmFyZ3MuIFRoaXMgd291
bGQgY2F1c2UgdXMgdG8gaXNzdWUgYSBHZXRTdGFjayB0aGF0IGxvYWRlZCBnYXJiYWdlIHRoYXQg
CisgICAgICAgIHdhcyB0aGVuIGZvcndhcmRlZCBpbnRvIGEgUGhpIHRoYXQgd2FzIHVzZWQgYXMg
dGhlIHNvdXJjZSBhcyB0aGUgUHV0U3RhY2suIFRoaXMgY2F1c2VkIHRoZQorICAgICAgICBhYnN0
cmFjdCBpbnRlcnByZXRlciB0byBjb25mdXNlIGl0c2VsZiBvbiB0eXBlIGluZm9ybWF0aW9uIGZv
ciB0aGUgZ2FyYmFnZSBHZXRTdGFjaworICAgICAgICB0aGF0IHdhcyBmZWQgaW50byB0aGUgUGhp
LCB3aGljaCB3b3VsZCBjYXVzZSB0aGUgYWJzdHJhY3QgaW50ZXJwcmV0ZXIgdG8gdGhlbiBjbGFp
bSAKKyAgICAgICAgdGhhdCB0aGUgYmFzaWMgYmxvY2sgd2l0aCB0aGUgUHV0U3RhY2sgaW4gaXQg
d291bGQgbmV2ZXIgYmUgcmVhY2hlZC4gVGhpcyBpc24ndCB0cnVlLCB0aGUgCisgICAgICAgIGJs
b2NrIHdvdWxkIGluZGVlZCBiZSByZWFjaGVkLlRoZSBzb2x1dGlvbiBoZXJlIGlzIHRvIGJlIG1v
cmUgcHJlY2lzZSBhYm91dCB0aGUgCisgICAgICAgIGxpdmVuZXNzIG9mIGxvY2FscyB3LnIudCBM
b2FkVmFyYXJncyBhbmQgRm9yd2FyZFZhcmFyZ3MuCisKKyAgICAgICAgKiBkZmcvREZHUHJlY2lz
ZUxvY2FsQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VMb2NhbENsb2Ji
ZXJpemVBZGFwdG9yOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcik6CisgICAgICAgIChK
U0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OndyaXRlKToKKyAgICAgICAg
KiBkZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdTU0FD
YWxjdWxhdG9yLmg6CisKIDIwMTUtMTEtMDkgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBbRlRMXSBGaXggdGhlIGJ1aWxkIHdpdGggTExWTSAzLjcKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2Fs
Q2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxOTIxMjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyAr
NDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9ncmFwaChncmFwaCkKICAgICAgICAgLCBtX25v
ZGUobm9kZSkKICAgICAgICAgLCBtX3JlYWQocmVhZCkKLSAgICAgICAgLCBtX3dyaXRlKHdyaXRl
KQorICAgICAgICAsIG1fdW5jb25kaXRpb25hbFdyaXRlKHdyaXRlKQogICAgICAgICAsIG1fZGVm
KGRlZikKICAgICB7CiAgICAgfQpAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8v
IFdlIGV4cGVjdCBzdGFjayB3cml0ZXMgdG8gYWxyZWFkeSBiZSBwcmVjaXNlbHkgY2hhcmFjdGVy
aXplZCBieSBERkc6OmNsb2JiZXJpemUoKS4KICAgICAgICAgaWYgKGhlYXAua2luZCgpID09IFN0
YWNrKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGVhcC5wYXlsb2FkKCkuaXNUb3Ao
KSk7Ci0gICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0ZShtX3dyaXRlLCBWaXJ0dWFsUmVnaXN0
ZXIoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKSk7CisgICAgICAgICAgICBjYWxsSWZBcHByb3By
aWF0ZShtX3VuY29uZGl0aW9uYWxXcml0ZSwgVmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9hZCgp
LnZhbHVlMzIoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApA
QCAtMTU1LDcgKzE1NSw3IEBAIHByaXZhdGU6CiAgICAgR3JhcGgmIG1fZ3JhcGg7CiAgICAgTm9k
ZSogbV9ub2RlOwogICAgIGNvbnN0IFJlYWRGdW5jdG9yJiBtX3JlYWQ7Ci0gICAgY29uc3QgV3Jp
dGVGdW5jdG9yJiBtX3dyaXRlOworICAgIGNvbnN0IFdyaXRlRnVuY3RvciYgbV91bmNvbmRpdGlv
bmFsV3JpdGU7CiAgICAgY29uc3QgRGVmRnVuY3RvciYgbV9kZWY7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNl
LmNwcAkocmV2aXNpb24gMTkyMTIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
dXRTdGFja1NpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9k
ZUluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJMaXZlIGF0ICIsIG5vZGUsICI6ICIsIGxpdmUsICJcbiIpOwot
ICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhh
bmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTExNSwyNCArMTE1LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgb3BlcmFuZCwgIiBpcyBsaXZlIGF0ICIsIG5v
ZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZS5vcGVyYW5kKG9wZXJhbmQp
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICBh
dXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gUHV0U3RhY2sg
fHwgbm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRWYXJh
cmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpdmUub3BlcmFuZChvcGVyYW5kKSA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgbWlnaHQgbWlzaGFuZGxlIExvYWRWYXJhcmdz
IGFuZCBGb3J3YXJkVmFyYXJncy4gSXQgbWlnaHQgbWFrZSB1cwotICAgICAgICAgICAgICAgICAg
ICAvLyB0aGluayB0aGF0IHRoZSBsb2NhbHMgYmVpbmcgd3JpdHRlbiBhcmUgc3RhY2stbGl2ZSBo
ZXJlLiBUaGV5IGFyZW4ndC4gVGhpcwotICAgICAgICAgICAgICAgICAgICAvLyBzaG91bGQgYmUg
aGFybWxlc3Mgc2luY2Ugd2Ugb3ZlcndyaXRlIHRoZW0gYW55d2F5LCBidXQgc3RpbGwsIGl0J3Mg
c2xvcHB5LgotICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ1Mjk1CiAgICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENs
b2JiZXJpemUoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVI
YW5kbGVyLCBlc2NhcGVIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTGF6eU5vZGUgc291cmNlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc291cmNlLmlzTm9kZSgpKTsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuYXNOb2RlKCkgPT0gbm9kZSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgbG9hZC4gSWdub3JlIGl0Lgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gUHV0U3RhY2spOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdmUub3BlcmFuZChvcGVyYW5kKSA9IGZhbHNl
OwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLCBub2RlLCBlc2NhcGVIYW5kbGVyLCB3cml0ZUhhbmRsZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciwgTGF6eU5vZGUpIHsgfSk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChsaXZlID09
IGxpdmVBdEhlYWRbYmxvY2tdKQpAQCAtMjY5LDYgKzI2MCwxMCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBBIEdldFN0YWNrIGRvZXNuJ3QgYWZmZWN0IGFueXRoaW5nLCBz
aW5jZSB3ZSBrbm93IHdoaWNoIGxvY2FsIHdlIGFyZSByZWFkaW5nCiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBmcm9tLgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBQdXRTdGFjaykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBub2RlLT5zdGFj
a0FjY2Vzc0RhdGEoKS0+bG9jYWw7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5v
cGVyYW5kKG9wZXJhbmQpID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmZvcm1hdDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIg
PSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CkBAIC0yNzksMTkgKzI3NCwxNSBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB3aWxsIG1hdGVyaWFsaXplIGp1
c3QgYmVmb3JlIGFueSByZWFkcy4KICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9w
ZXJhbmQob3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CisKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2Rl
LT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IERlYWRG
bHVzaDsKKyAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUoCi0gICAgICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVIYW5kbGVyLCBlc2NhcGVIYW5kbGVyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTGF6eU5v
ZGUgc291cmNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
c291cmNlLmlzTm9kZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3Vy
Y2UuYXNOb2RlKCkgPT0gbm9kZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBUaGlzIGlzIGEgbG9hZC4gSWdub3JlIGl0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9w
ZXJhbmQob3BlcmFuZCkgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+Zm9ybWF0OwotICAgICAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBu
b2RlLCBlc2NhcGVIYW5kbGVyLCB3cml0ZUhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICBbJl0gKFZpcnR1YWxSZWdpc3RlciwgTGF6eU5vZGUpIHsgfSk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChkZWZlcnJlZCA9PSBkZWZl
cnJlZEF0VGFpbFtibG9ja10pCkBAIC0zNTEsMTMgKzM0MiwxMyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBpbmRleFRvT3BlcmFuZC5hcHBlbmQob3BlcmFuZCk7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIEhhc2hTZXQ8Tm9kZSo+IHB1dExvY2Fsc1RvU2luazsKKyAgICAgICAgSGFzaFNl
dDxOb2RlKj4gcHV0U3RhY2tzVG9TaW5rOwogICAgICAgICAKICAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgewogICAgICAgICAg
ICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdGFjazoKLSAgICAgICAgICAg
ICAgICAgICAgcHV0TG9jYWxzVG9TaW5rLmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICAgICAg
cHV0U3RhY2tzVG9TaW5rLmFkZChub2RlKTsKICAgICAgICAgICAgICAgICAgICAgc3NhQ2FsY3Vs
YXRvci5uZXdEZWYoCiAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5v
cGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICBibG9jaywgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKQEAgLTQ5Niw5ICs0ODcsMTkg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
IGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAg
ICAgIH07CisKKyAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2Fk
VmFyYXJncyBhbmQgRm9yd2FyZFZhcmFyZ3MgYXJlIHVuY29uZGl0aW9uYWwgd3JpdGVzIHRvIHRo
ZSBzdGFjaworICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9jYXRpb25zIHRoZXkgY2xhaW0g
dG8gd3JpdGUgdG8uIFRoZXkgZG8gbm90IHJlYWQgZnJvbSB0aGUgc3RhY2sgCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBsb2NhdGlvbnMgdGhleSB3cml0ZSB0by4gVGhpcyBtYWtlcyB0aG9z
ZSBzdGFjayBsb2NhdGlvbnMgZGVhZCByaWdodCAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGJlZm9yZSBhIExvYWRWYXJhcmdzL0ZvcndhcmRWYXJhcmdzLiBUaGlzIG1lYW5zIHdlIHNob3Vs
ZCBuZXZlciBzaW5rCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBQdXRTdGFja3MgcmlnaHQg
dG8gdGhpcyBwb2ludC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5v
ZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyk7
CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVh
ZEZsdXNoOworICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgZXNjYXBlSGFuZGxlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIHdyaXRlSGFu
ZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyLCBMYXp5
Tm9kZSkgeyB9KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fSB9CkBAIC01NTIsMTMgKzU1MywxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4
KSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghcHV0TG9jYWxzVG9TaW5rLmNv
bnRhaW5zKG5vZGUpKQorICAgICAgICAgICAgICAgIGlmICghcHV0U3RhY2tzVG9TaW5rLmNvbnRh
aW5zKG5vZGUpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBub2RlLT5yZW1vdmUoKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBpZiAodmVyYm9zZSkgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgJKHJldmlzaW9uIDE5MjEyMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC05MSwxMCArOTEsMTAgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
Ly8gICAgICAgICBGSVhNRTogTWFrZSBpdCBlYXNpZXIgdG8gZG8gdGhpcywgdGhhdCBkb2Vzbid0
IGludm9sdmUgcmVydW5uaW5nIEdDU0UuCiAvLyAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY2MzkKIC8vCi0vLyAgICA0LjMpIEluc2VydCBVcHNpbG9u
cyBmb3IgZWFjaCBQaGkgaW4gZWFjaCBzdWNjZXNzb3IgYmxvY2suIFVzZSB0aGUgYXZhaWxhYmxl
IHZhbHVlcyB0YWJsZSB0bwotLy8gICAgICAgICBkZWNpZGUgdGhlIHNvdXJjZSB2YWx1ZSBmb3Ig
ZWFjaCBQaGkncyB2YXJpYWJsZS4gTm90ZSB0aGF0IHlvdSBjb3VsZCBhbHNvIHVzZQotLy8gICAg
ICAgICBTU0FDYWxjdWxhdG9yOjpyZWFjaGluZ0RlZkF0VGFpbCgpIGluc3RlYWQgb2YgdGhlIGF2
YWlsYWJsZSB2YWx1ZXMgdGFibGUsIHRob3VnaCB5b3VyCi0vLyAgICAgICAgIGxvY2FsIGF2YWls
YWJsZSB2YWx1ZXMgdGFibGUgaXMgbGlrZWx5IHRvIGJlIG1vcmUgZWZmaWNpZW50LgorLy8gICAg
NC4zKSBJbnNlcnQgVXBzaWxvbnMgYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBibG9jayBmb3Ig
dGhlIGNvcnJlc3BvbmRpbmcgUGhpcyBpbiBlYWNoIHN1Y2Nlc3NvciBibG9jay4gCisvLyAgICAg
ICAgIFVzZSB0aGUgYXZhaWxhYmxlIHZhbHVlcyB0YWJsZSB0byBkZWNpZGUgdGhlIHNvdXJjZSB2
YWx1ZSBmb3IgZWFjaCBQaGkncyB2YXJpYWJsZS4gTm90ZSB0aGF0IAorLy8gICAgICAgICB5b3Ug
Y291bGQgYWxzbyB1c2UgU1NBQ2FsY3VsYXRvcjo6cmVhY2hpbmdEZWZBdFRhaWwoKSBpbnN0ZWFk
IG9mIHRoZSBhdmFpbGFibGUgdmFsdWVzIHRhYmxlLCAKKy8vICAgICAgICAgdGhvdWdoIHlvdXIg
bG9jYWwgYXZhaWxhYmxlIHZhbHVlcyB0YWJsZSBpcyBsaWtlbHkgdG8gYmUgbW9yZSBlZmZpY2ll
bnQuCiAvLwogLy8gVGhlIG1vc3Qgb2J2aW91cyB1c2Ugb2YgU1NBQ2FsY3VsYXRvciBpcyBmb3Ig
dGhlIENQUy0+U1NBIGNvbnZlcnNpb24gaXRzZWxmLCBidXQgaXQncyBtZWFudCB0bwogLy8gYWxz
byBiZSB1c2VkIGZvciBTU0EgdXBkYXRlIGFuZCBmb3IgdGhpbmdzIGxpa2UgdGhlIHByb21vdGlv
biBvZiBoZWFwIGZpZWxkcyB0byBsb2NhbCBTU0EK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265099</attachid>
            <date>2015-11-09 14:39:02 -0800</date>
            <delta_ts>2015-11-09 16:11:35 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>12991</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyMTY3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBA
CisyMDE1LTExLTA5ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IERGRzo6UHV0U3RhY2tTaW5raW5nUGhhc2Ugc2hvdWxkIG5vdCB0cmVhdCB0aGUgc3RhY2sgdmFy
aWFibGVzIHdyaXR0ZW4gYnkgTG9hZFZhcmFyZ3MvRm9yd2FyZFZhcmFyZ3MgYXMgYmVpbmcgbGl2
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1Mjk1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBmaXhlcyBQdXRTdGFja1NpbmtpbmdQaGFzZSB0byBubyBsb25nZXIgZXNjYXBlIHRoZSBz
dGFjaworICAgICAgICBsb2NhdGlvbnMgdGhhdCBMb2FkVmFyYXJncyBhbmQgRm9yd2FyZFZhcmFy
Z3Mgd3JpdGUgdG8uIFdlIHVzZWQKKyAgICAgICAgdG8gY29uc2lkZXIgc2lua2luZyBQdXRTdGFj
a3MgcmlnaHQgYmVmb3JlIGEgTG9hZFZhcmFyZ3MvRm9yd2FyZFZhcmFyZ3MKKyAgICAgICAgYmVj
YXVzZSB3ZSBjb25zaWRlcmVkIHRoZW0gdXNlcyBvZiBzdWNoIHN0YWNrIGxvY2F0aW9ucy4gVGhl
eSBhcmVuJ3QKKyAgICAgICAgdXNlcyBvZiB0aG9zZSBzdGFjayBsb2NhdGlvbnMsIHRoZXkgdW5j
b25kaXRpb25hbGx5IHdyaXRlIHRvIHRob3NlCisgICAgICAgIHN0YWNrIGxvY2F0aW9ucy4gU2lu
a2luZyBQdXRTdGFja3MgdG8gdGhlc2Ugbm9kZXMgd2FzIG5vdCBuZWVkZWQgYmVmb3JlLAorICAg
ICAgICBidXQgc2VlbWVkIG1vc3RseSBpbm5vY2VudC4gQnV0IEkgcmFuIGludG8gYSBwcm9ibGVt
IHdpdGggdGhpcyB3aGlsZSBpbXBsZW1lbnRpbmcgCisgICAgICAgIEZUTCB0cnkvY2F0Y2ggd2hl
cmUgd2Ugd291bGQgZW5kIHVwIGhhdmluZyB0byBnZW5lcmF0ZSBhIHZhbHVlIGZvciBhIHN1bmtl
biBQdXRTdGFjayAKKyAgICAgICAgcmlnaHQgYmVmb3JlIGEgTG9hZFZhcmFyZ3MuIFRoaXMgd291
bGQgY2F1c2UgdXMgdG8gaXNzdWUgYSBHZXRTdGFjayB0aGF0IGxvYWRlZCBnYXJiYWdlIHRoYXQg
CisgICAgICAgIHdhcyB0aGVuIGZvcndhcmRlZCBpbnRvIGEgUGhpIHRoYXQgd2FzIHVzZWQgYXMg
dGhlIHNvdXJjZSBhcyB0aGUgUHV0U3RhY2suIFRoaXMgY2F1c2VkIHRoZQorICAgICAgICBhYnN0
cmFjdCBpbnRlcnByZXRlciB0byBjb25mdXNlIGl0c2VsZiBvbiB0eXBlIGluZm9ybWF0aW9uIGZv
ciB0aGUgZ2FyYmFnZSBHZXRTdGFjaworICAgICAgICB0aGF0IHdhcyBmZWQgaW50byB0aGUgUGhp
LCB3aGljaCB3b3VsZCBjYXVzZSB0aGUgYWJzdHJhY3QgaW50ZXJwcmV0ZXIgdG8gdGhlbiBjbGFp
bSAKKyAgICAgICAgdGhhdCB0aGUgYmFzaWMgYmxvY2sgd2l0aCB0aGUgUHV0U3RhY2sgaW4gaXQg
d291bGQgbmV2ZXIgYmUgcmVhY2hlZC4gVGhpcyBpc24ndCB0cnVlLCB0aGUgCisgICAgICAgIGJs
b2NrIHdvdWxkIGluZGVlZCBiZSByZWFjaGVkLlRoZSBzb2x1dGlvbiBoZXJlIGlzIHRvIGJlIG1v
cmUgcHJlY2lzZSBhYm91dCB0aGUgCisgICAgICAgIGxpdmVuZXNzIG9mIGxvY2FscyB3LnIudCBM
b2FkVmFyYXJncyBhbmQgRm9yd2FyZFZhcmFyZ3MuCisKKyAgICAgICAgKiBkZmcvREZHUHJlY2lz
ZUxvY2FsQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VMb2NhbENsb2Ji
ZXJpemVBZGFwdG9yOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcik6CisgICAgICAgIChK
U0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OndyaXRlKToKKyAgICAgICAg
KiBkZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdTU0FD
YWxjdWxhdG9yLmg6CisKIDIwMTUtMTEtMDkgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBbRlRMXSBGaXggdGhlIGJ1aWxkIHdpdGggTExWTSAzLjcKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2Fs
Q2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxOTIxMjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyAr
NDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9ncmFwaChncmFwaCkKICAgICAgICAgLCBtX25v
ZGUobm9kZSkKICAgICAgICAgLCBtX3JlYWQocmVhZCkKLSAgICAgICAgLCBtX3dyaXRlKHdyaXRl
KQorICAgICAgICAsIG1fdW5jb25kaXRpb25hbFdyaXRlKHdyaXRlKQogICAgICAgICAsIG1fZGVm
KGRlZikKICAgICB7CiAgICAgfQpAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8v
IFdlIGV4cGVjdCBzdGFjayB3cml0ZXMgdG8gYWxyZWFkeSBiZSBwcmVjaXNlbHkgY2hhcmFjdGVy
aXplZCBieSBERkc6OmNsb2JiZXJpemUoKS4KICAgICAgICAgaWYgKGhlYXAua2luZCgpID09IFN0
YWNrKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghaGVhcC5wYXlsb2FkKCkuaXNUb3Ao
KSk7Ci0gICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0ZShtX3dyaXRlLCBWaXJ0dWFsUmVnaXN0
ZXIoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKSk7CisgICAgICAgICAgICBjYWxsSWZBcHByb3By
aWF0ZShtX3VuY29uZGl0aW9uYWxXcml0ZSwgVmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9hZCgp
LnZhbHVlMzIoKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApA
QCAtMTU1LDcgKzE1NSw3IEBAIHByaXZhdGU6CiAgICAgR3JhcGgmIG1fZ3JhcGg7CiAgICAgTm9k
ZSogbV9ub2RlOwogICAgIGNvbnN0IFJlYWRGdW5jdG9yJiBtX3JlYWQ7Ci0gICAgY29uc3QgV3Jp
dGVGdW5jdG9yJiBtX3dyaXRlOworICAgIGNvbnN0IFdyaXRlRnVuY3RvciYgbV91bmNvbmRpdGlv
bmFsV3JpdGU7CiAgICAgY29uc3QgRGVmRnVuY3RvciYgbV9kZWY7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNl
LmNwcAkocmV2aXNpb24gMTkyMTIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
dXRTdGFja1NpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNywzMiArMTA3LDMw
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChu
b2RlSW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIkxpdmUgYXQgIiwgbm9kZSwgIjogIiwgbGl2ZSwgIlxuIik7
Ci0gICAgICAgICAgICAgICAgICAgIAorCisgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxWaXJ0
dWFsUmVnaXN0ZXIsIDQ+IHJlYWRzOworICAgICAgICAgICAgICAgICAgICBWZWN0b3I8VmlydHVh
bFJlZ2lzdGVyLCA0PiB3cml0ZXM7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFu
ZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIG9wZXJhbmQsICIgaXMgbGl2ZSBh
dCAiLCBub2RlLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpdmUub3BlcmFuZChv
cGVyYW5kKSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkcy5hcHBlbmQob3Bl
cmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBtaWdodCBtaXNoYW5kbGUgTG9hZFZhcmFy
Z3MgYW5kIEZvcndhcmRWYXJhcmdzLiBJdCBtaWdodCBtYWtlIHVzCi0gICAgICAgICAgICAgICAg
ICAgIC8vIHRoaW5rIHRoYXQgdGhlIGxvY2FscyBiZWluZyB3cml0dGVuIGFyZSBzdGFjay1saXZl
IGhlcmUuIFRoZXkgYXJlbid0LiBUaGlzCi0gICAgICAgICAgICAgICAgICAgIC8vIHNob3VsZCBi
ZSBoYXJtbGVzcyBzaW5jZSB3ZSBvdmVyd3JpdGUgdGhlbSBhbnl3YXksIGJ1dCBzdGlsbCwgaXQn
cyBzbG9wcHkuCi0gICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDUyOTUKKworICAgICAgICAgICAgICAgICAgICBhdXRvIHdyaXRl
SGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gUHV0U3RhY2sgfHwgbm9kZS0+
b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRWYXJhcmdzKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHdyaXRlcy5hcHBlbmQob3BlcmFuZCk7CisgICAgICAgICAg
ICAgICAgICAgIH07CisKICAgICAgICAgICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIs
IGVzY2FwZUhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBMYXp5Tm9kZSBzb3VyY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzb3VyY2UuaXNOb2RlKCkpOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHNvdXJjZS5hc05vZGUoKSA9PSBub2RlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBsb2FkLiBJZ25vcmUgaXQuCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBQdXRTdGFjayk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGl2ZS5vcGVyYW5kKG9wZXJhbmQpID0gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgs
IG5vZGUsIGVzY2FwZUhhbmRsZXIsIHdyaXRlSGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyLCBMYXp5Tm9kZSkgeyB9KTsKKworICAgICAgICAgICAg
ICAgICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIDogd3JpdGVzKQorICAgICAgICAg
ICAgICAgICAgICAgICAgbGl2ZS5vcGVyYW5kKG9wZXJhbmQpID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgOiByZWFkcykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxpdmUub3BlcmFuZChvcGVyYW5kKSA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChsaXZlID09IGxp
dmVBdEhlYWRbYmxvY2tdKQpAQCAtMjA1LDEwICsyMDMsMTMgQEAgcHVibGljOgogICAgICAgICAv
LyAgICAgUmVwcmVzZW50cyB0aGUgZmFjdCB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIGhh
dmUgZG9uZSBhIFB1dFN0YWNrIGJ1dCB3ZSBoYXZlbid0CiAgICAgICAgIC8vICAgICBpZGVudGlm
aWVkIGFuIG9wZXJhdGlvbiB0aGF0IHdvdWxkIGhhdmUgb2JzZXJ2ZWQgdGhhdCBQdXRTdGFjay4K
ICAgICAgICAgLy8KLSAgICAgICAgLy8gVGhpcyBjb2RlIGhhcyBzb21lIGludGVyZXN0aW5nIHF1
aXJrcyBiZWNhdXNlIG9mIHRoZSBmYWN0IHRoYXQgbmVpdGhlciBsaXZlbmVzcyBub3IKLSAgICAg
ICAgLy8gZGVmZXJyYWxzIGFyZSB2ZXJ5IHByZWNpc2UuIFRoZXkgYXJlIG9ubHkgcHJlY2lzZSBl
bm91Z2ggdG8gYmUgYWJsZSB0byBjb3JyZWN0bHkgdGVsbCB1cwotICAgICAgICAvLyB3aGVuIHdl
IG1heSBbc2ljXSBuZWVkIHRvIGV4ZWN1dGUgUHV0U3RhY2tzLiBUaGlzIG1lYW5zIHRoYXQgdGhl
eSBtYXkgcmVwb3J0IHRoZSBuZWVkIHRvCi0gICAgICAgIC8vIGV4ZWN1dGUgYSBQdXRTdGFjayBp
biBjYXNlcyB3aGVyZSB3ZSBhY3R1YWxseSBkb24ndCByZWFsbHkgbmVlZCBpdCwgYW5kIHRoYXQn
cyB0b3RhbGx5IE9LLgorICAgICAgICAvLyBXZSBuZWVkIHRvIGJlIHByZWNpc2UgYWJvdXQgbGl2
ZW5lc3MgaW4gdGhpcyBwaGFzZSBiZWNhdXNlIG5vdCBkb2luZyBzbworICAgICAgICAvLyBjb3Vs
ZCBjYXVzZSB1cyB0byBpbnNlcnQgYSBQdXRTdGFjayBiZWZvcmUgYSBub2RlIHdlIHRob3VnaHQg
bWF5IGVzY2FwZSBhIAorICAgICAgICAvLyB2YWx1ZSB0aGF0IGl0IGRvZXNuJ3QgcmVhbGx5IGVz
Y2FwZS4gU2lua2luZyB0aGlzIFB1dFN0YWNrIGFib3ZlIHN1Y2ggYSBub2RlIG1heQorICAgICAg
ICAvLyBjYXVzZSB1cyB0byBpbnNlcnQgYSBHZXRTdGFjayB0aGF0IHdlIGZvcndhcmQgdG8gdGhl
IFBoaSB3ZSdyZSBmZWVkaW5nIGludG8gdGhlCisgICAgICAgIC8vIHN1bmtlbiBQdXRTdGFjay4g
SW5zZXJ0aW5nIHN1Y2ggYSBHZXRTdGFjayBjb3VsZCBjYXVzZSB1cyB0byBsb2FkIGdhcmJhZ2Ug
YW5kCisgICAgICAgIC8vIGNhbiBjb25mdXNlIHRoZSBBSSB0byBjbGFpbSB1bnRydWUgdGhpbmdz
IChsaWtlIHRoYXQgdGhlIHByb2dyYW0gd2lsbCBleGl0IHdoZW4KKyAgICAgICAgLy8gaXQgcmVh
bGx5IHdvbid0KS4KICAgICAgICAgQmxvY2tNYXA8T3BlcmFuZHM8Rmx1c2hGb3JtYXQ+PiBkZWZl
cnJlZEF0SGVhZChtX2dyYXBoKTsKICAgICAgICAgQmxvY2tNYXA8T3BlcmFuZHM8Rmx1c2hGb3Jt
YXQ+PiBkZWZlcnJlZEF0VGFpbChtX2dyYXBoKTsKICAgICAgICAgCkBAIC0yNjksNiArMjcwLDEw
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgR2V0U3RhY2sgZG9lc24n
dCBhZmZlY3QgYW55dGhpbmcsIHNpbmNlIHdlIGtub3cgd2hpY2ggbG9jYWwgd2UgYXJlIHJlYWRp
bmcKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZyb20uCiAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLT5vcCgp
ID09IFB1dFN0YWNrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlLT5zdGFja0FjY2Vzc0Rh
dGEoKS0+Zm9ybWF0OworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKQEAg
LTI3OSwxOSArMjg0LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdl
IHdpbGwgbWF0ZXJpYWxpemUganVzdCBiZWZvcmUgYW55IHJlYWRzLgogICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAg
ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9
IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9
PSBGb3J3YXJkVmFyYXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVy
YW5kKG9wZXJhbmQpID0gRGVhZEZsdXNoOworICAgICAgICAgICAgICAgICAgICB9OwogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIs
IGVzY2FwZUhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBMYXp5Tm9kZSBzb3VyY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzb3VyY2UuaXNOb2RlKCkpOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHNvdXJjZS5hc05vZGUoKSA9PSBub2RlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBsb2FkLiBJZ25vcmUgaXQuCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0
YSgpLT5mb3JtYXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIHdyaXRlSGFuZGxlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyLCBMYXp5Tm9kZSkgeyB9
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
aWYgKGRlZmVycmVkID09IGRlZmVycmVkQXRUYWlsW2Jsb2NrXSkKQEAgLTM1MSwxMyArMzUyLDEz
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGluZGV4VG9PcGVyYW5kLmFwcGVuZChvcGVyYW5kKTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgSGFzaFNldDxOb2RlKj4gcHV0TG9jYWxzVG9T
aW5rOworICAgICAgICBIYXNoU2V0PE5vZGUqPiBwdXRTdGFja3NUb1Npbms7CiAgICAgICAgIAog
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxP
cmRlcigpKSB7CiAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIFB1
dFN0YWNrOgotICAgICAgICAgICAgICAgICAgICBwdXRMb2NhbHNUb1NpbmsuYWRkKG5vZGUpOwor
ICAgICAgICAgICAgICAgICAgICBwdXRTdGFja3NUb1NpbmsuYWRkKG5vZGUpOwogICAgICAgICAg
ICAgICAgICAgICBzc2FDYWxjdWxhdG9yLm5ld0RlZigKICAgICAgICAgICAgICAgICAgICAgICAg
IG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2Fs
KSwKICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkp
OwpAQCAtNDk2LDkgKzQ5NywxOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVz
aDsKICAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAKKworICAgICAgICAg
ICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvYWRWYXJhcmdzIGFuZCBGb3J3YXJk
VmFyYXJncyBhcmUgdW5jb25kaXRpb25hbCB3cml0ZXMgdG8gdGhlIHN0YWNrCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBsb2NhdGlvbnMgdGhleSBjbGFpbSB0byB3cml0ZSB0by4gVGhleSBk
byBub3QgcmVhZCBmcm9tIHRoZSBzdGFjayAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxv
Y2F0aW9ucyB0aGV5IHdyaXRlIHRvLiBUaGlzIG1ha2VzIHRob3NlIHN0YWNrIGxvY2F0aW9ucyBk
ZWFkIHJpZ2h0IAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVmb3JlIGEgTG9hZFZhcmFy
Z3MvRm9yd2FyZFZhcmFyZ3MuIFRoaXMgbWVhbnMgd2Ugc2hvdWxkIG5ldmVyIHNpbmsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFB1dFN0YWNrcyByaWdodCB0byB0aGlzIHBvaW50LgorICAg
ICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBMb2FkVmFy
YXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBEZWFkRmx1c2g7CisgICAgICAgICAg
ICAgICAgICAgIH07CisKICAgICAgICAgICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIs
IGVzY2FwZUhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBl
c2NhcGVIYW5kbGVyLCB3cml0ZUhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBbJl0g
KFZpcnR1YWxSZWdpc3RlciwgTGF6eU5vZGUpIHsgfSk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0gfQpAQCAtNTUyLDEzICs1NjMsMTEgQEAgcHVibGljOgog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9j
ay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBi
bG9jay0+YXQobm9kZUluZGV4KTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBp
ZiAoIXB1dExvY2Fsc1RvU2luay5jb250YWlucyhub2RlKSkKKyAgICAgICAgICAgICAgICBpZiAo
IXB1dFN0YWNrc1RvU2luay5jb250YWlucyhub2RlKSkKICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlKCk7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGluc2VydGlvblNldC5l
eGVjdXRlKGJsb2NrKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2Up
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5o
CShyZXZpc2lvbiAxOTIxMjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNh
bGN1bGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTAgKzkxLDEwIEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vICAgICAgICAgRklYTUU6IE1ha2UgaXQgZWFzaWVyIHRv
IGRvIHRoaXMsIHRoYXQgZG9lc24ndCBpbnZvbHZlIHJlcnVubmluZyBHQ1NFLgogLy8gICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2NjM5CiAvLwotLy8g
ICAgNC4zKSBJbnNlcnQgVXBzaWxvbnMgZm9yIGVhY2ggUGhpIGluIGVhY2ggc3VjY2Vzc29yIGJs
b2NrLiBVc2UgdGhlIGF2YWlsYWJsZSB2YWx1ZXMgdGFibGUgdG8KLS8vICAgICAgICAgZGVjaWRl
IHRoZSBzb3VyY2UgdmFsdWUgZm9yIGVhY2ggUGhpJ3MgdmFyaWFibGUuIE5vdGUgdGhhdCB5b3Ug
Y291bGQgYWxzbyB1c2UKLS8vICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6cmVhY2hpbmdEZWZBdFRh
aWwoKSBpbnN0ZWFkIG9mIHRoZSBhdmFpbGFibGUgdmFsdWVzIHRhYmxlLCB0aG91Z2ggeW91cgot
Ly8gICAgICAgICBsb2NhbCBhdmFpbGFibGUgdmFsdWVzIHRhYmxlIGlzIGxpa2VseSB0byBiZSBt
b3JlIGVmZmljaWVudC4KKy8vICAgIDQuMykgSW5zZXJ0IFVwc2lsb25zIGF0IHRoZSBlbmQgb2Yg
dGhlIGN1cnJlbnQgYmxvY2sgZm9yIHRoZSBjb3JyZXNwb25kaW5nIFBoaXMgaW4gZWFjaCBzdWNj
ZXNzb3IgYmxvY2suIAorLy8gICAgICAgICBVc2UgdGhlIGF2YWlsYWJsZSB2YWx1ZXMgdGFibGUg
dG8gZGVjaWRlIHRoZSBzb3VyY2UgdmFsdWUgZm9yIGVhY2ggUGhpJ3MgdmFyaWFibGUuIE5vdGUg
dGhhdCAKKy8vICAgICAgICAgeW91IGNvdWxkIGFsc28gdXNlIFNTQUNhbGN1bGF0b3I6OnJlYWNo
aW5nRGVmQXRUYWlsKCkgaW5zdGVhZCBvZiB0aGUgYXZhaWxhYmxlIHZhbHVlcyB0YWJsZSwgCisv
LyAgICAgICAgIHRob3VnaCB5b3VyIGxvY2FsIGF2YWlsYWJsZSB2YWx1ZXMgdGFibGUgaXMgbGlr
ZWx5IHRvIGJlIG1vcmUgZWZmaWNpZW50LgogLy8KIC8vIFRoZSBtb3N0IG9idmlvdXMgdXNlIG9m
IFNTQUNhbGN1bGF0b3IgaXMgZm9yIHRoZSBDUFMtPlNTQSBjb252ZXJzaW9uIGl0c2VsZiwgYnV0
IGl0J3MgbWVhbnQgdG8KIC8vIGFsc28gYmUgdXNlZCBmb3IgU1NBIHVwZGF0ZSBhbmQgZm9yIHRo
aW5ncyBsaWtlIHRoZSBwcm9tb3Rpb24gb2YgaGVhcCBmaWVsZHMgdG8gbG9jYWwgU1NBCg==
</data>
<flag name="review"
          id="290191"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>