<?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>142514</bug_id>
          
          <creation_ts>2015-03-09 16:27:36 -0700</creation_ts>
          <short_desc>DFABytecode should have jump table</short_desc>
          <delta_ts>2015-07-20 11:27:14 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>147099</dup_id>
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=142977</see_also>
          <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="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>benjamin</cc>
    
    <cc>mark.lam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1075802</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-09 16:27:36 -0700</bug_when>
    <thetext>Often when interpreting DFA byte code, we check many values sequentially.  To speed up interpreting, let&apos;s implement a jump table if there are lots of values to add.  This might make the byte code grow a lot, so let&apos;s not do this too much.

If the node does not have a fallback transition, I jump to a Terminate instruction which uses an extra byte in the instruction.  This byte could be removed by using -1 as a special jump value meaning terminate, or by having a byte code for a branch table with a fallback transition and a byte code for a branch table without a fallback transition.

Well, this works.  Let&apos;s hear comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075806</commentid>
    <comment_count>1</comment_count>
      <attachid>248287</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-09 16:31:49 -0700</bug_when>
    <thetext>Created attachment 248287
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075807</commentid>
    <comment_count>2</comment_count>
      <attachid>248288</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-09 16:38:18 -0700</bug_when>
    <thetext>Created attachment 248288
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075895</commentid>
    <comment_count>3</comment_count>
      <attachid>248288</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-09 22:22:21 -0700</bug_when>
    <thetext>Comment on attachment 248288
Patch

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

I am 100% behind this but you&apos;ll have to tune it a bit :)

We have a balance between binary size and runtime speed. My guess is only a few hundred nodes should use the new instruction.

&gt; Source/WebCore/contentextensions/DFABytecode.h:46
&gt; +    // The index to jump to if the current character is outside the bounds of the branch table (4 bytes),

Do you actually need this?
You could define BranchTable such that it does nothing if the character is out of bound. You can then add a unconditional Jump after the BranchTable.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:80
&gt; +    append&lt;DFABytecodeInstruction&gt;(m_bytecode, DFABytecodeInstruction::Terminate);

That&apos;s not pretty but it works.

Ideally you would link to the terminate instruction at the end of the node. To do that, each node would need to give some new info to the linker (or link internally).
I am fine with the current approach though, that&apos;s just one byte.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:85
&gt; +        append&lt;unsigned&gt;(m_bytecode, m_bytecode.size() - 1); // Jump to the Terminate instruction if out of bounds.

I would prefer something more explicit than m_bytecode.size() - 1.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:95
&gt; +    append&lt;char&gt;(m_bytecode, minValue);
&gt; +    append&lt;int8_t&gt;(m_bytecode, maxValue - minValue + 1);

First is char, next is int8_t.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:104
&gt; +                append&lt;unsigned&gt;(m_bytecode, m_bytecode.size() - 1); // Jump to the Terminate instruction if out of bounds.

Explicit

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:122
&gt; +    const int maxSequentialCheckValueOps = 6; // Guess for a good optimal value based on no actual data.

Should get some data :)

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:123
&gt; +    if (node.transitions.size() &lt;= maxSequentialCheckValueOps) {

You should capture ranges instead of just the size.

If you are curious, LLVM has a bunch of range optimizations to look at.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076010</commentid>
    <comment_count>4</comment_count>
      <attachid>248288</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-10 11:44:15 -0700</bug_when>
    <thetext>Comment on attachment 248288
Patch

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

I&apos;ll look into measuring performance and size, and tweaking this implementation a little.  Probably next week.

&gt;&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:104
&gt;&gt; +                append&lt;unsigned&gt;(m_bytecode, m_bytecode.size() - 1); // Jump to the Terminate instruction if out of bounds.
&gt; 
&gt; Explicit

This one is also incorrect.  This will jump to some byte in the middle of the branch table.  We need to save the index of the terminate instruction and use it instead of m_bytecode.size() - 1 in both places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078318</commentid>
    <comment_count>5</comment_count>
      <attachid>248968</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-18 14:57:41 -0700</bug_when>
    <thetext>Created attachment 248968
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078626</commentid>
    <comment_count>6</comment_count>
      <attachid>248968</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-19 14:03:20 -0700</bug_when>
    <thetext>Comment on attachment 248968
Patch

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

We reaaally need data on performance.

I strongly believe the initial conditions should be smarter. For example, if there is a dense area for transitions and a few outliers, there should be a branch table for the dense area and a few value checks for the outliers.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:150
&gt; +    // Lots of duplicate ranges are caused by upper case and lower case characters.
&gt; +    // FIXME: Implement case-insensitive range checks.

Oh, that&apos;s a good idea.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:184
&gt; +            append&lt;unsigned&gt;(m_bytecode, UINT_MAX); // Tell interpreter this value is not in the branch table.

Let&apos;s use std::numeric_limits here too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082348</commentid>
    <comment_count>7</comment_count>
      <attachid>250011</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-04-02 14:58:34 -0700</bug_when>
    <thetext>Created attachment 250011
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082349</commentid>
    <comment_count>8</comment_count>
      <attachid>250011</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-04-02 14:59:44 -0700</bug_when>
    <thetext>Comment on attachment 250011
Patch

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

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:216
&gt; +    if (ranges.size() &gt; 3)
&gt; +        emitBranchTable(ranges);

I&apos;m looking into a better condition here.  I just uploaded the patch to not lose my recent work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110680</commentid>
    <comment_count>9</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-07-20 11:27:14 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 147099 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248287</attachid>
            <date>2015-03-09 16:31:49 -0700</date>
            <delta_ts>2015-03-09 16:38:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142514-20150309163126.patch</filename>
            <type>text/plain</type>
            <size>9657</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MTI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE1LTAzLTA5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50
IGp1bXAgdGFibGVzIGluIERGQSBjb21waWxlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjUxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjppbnN0cnVjdGlvblNpemVXaXRo
QXJndW1lbnRzKToKKyAgICAgICAgQWRkIGEgQnJhbmNoVGFibGUgYnl0ZWNvZGUuCisgICAgICAg
ICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdEJyYW5j
aFRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29k
ZUNvbXBpbGVyOjpjb21waWxlTm9kZSk6CisgICAgICAgIENvbXBpbGUgYnJhbmNoIHRhYmxlcy4K
KyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmg6CisgICAg
ICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6
aW50ZXJwcmV0KToKKyAgICAgICAgSW50ZXJwcmV0IGJyYW5jaCB0YWJsZXMuCisKIDIwMTUtMDMt
MDkgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBz
dmcvY3VzdG9tL3N2Zy1mb250cy13aXRob3V0LW1pc3NpbmctZ2x5cGgueGh0bWwgZmFpbHMgYWZ0
ZXIgZm9udHMvZm9udC1mYWxsYmFjay1wcmVmZXJzLXBpY3RvZ3JhcGhzLmh0bWwKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaAkocmV2aXNp
b24gMTgxMTk3KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNv
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsMTQgQEAgZW51bSBjbGFzcyBERkFCeXRl
Y29kZUluc3RydWN0aW9uIDogdWludAogICAgIC8vIFRoZSB2YWx1ZSB0byBjaGVjayAoMSBieXRl
KSwKICAgICAvLyBUaGUgaW5kZXggdG8ganVtcCB0byBpZiB0aGUgdmFsdWVzIGFyZSBlcXVhbCAo
NCBieXRlcykuCiAgICAgQ2hlY2tWYWx1ZSwKKyAgICAKKyAgICAvLyBCcmFuY2hUYWJsZSBoYXMg
bWFueSBhcmd1bWVudHM6CisgICAgLy8gQSBUZXJtaW5hdGUgaW5zdHJ1Y3Rpb24gdG8ganVtcCB0
byBpZiB0aGVyZSBpcyBubyBmYWxsYmFjayB0cmFuc2l0aW9uICgxIGJ5dGUpLAorICAgIC8vIFRo
ZSBpbmRleCB0byBqdW1wIHRvIGlmIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyBvdXRzaWRlIHRo
ZSBib3VuZHMgb2YgdGhlIGJyYW5jaCB0YWJsZSAoNCBieXRlcyksCisgICAgLy8gVGhlIG1pbmlt
dW0gdmFsdWUgaW4gdGhlIGJyYW5jaCB0YWJsZSAoMSBieXRlKSwKKyAgICAvLyBUaGUgbGVuZ3Ro
IG9mIHRoZSBicmFuY2ggdGFibGUgKDEgYnl0ZSksCisgICAgLy8gVGhlIGJyYW5jaCB0YWJsZSAo
NCBieXRlcyBwZXIgYnJhbmNoKQorICAgIEJyYW5jaFRhYmxlLAogCiAgICAgLy8gQXBwZW5kQWN0
aW9uIGhhcyBvbmUgYXJndW1lbnQ6CiAgICAgLy8gVGhlIGFjdGlvbiB0byBhcHBlbmQgKDQgYnl0
ZXMpLgpAQCAtNjEsOSArNjksOSBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBpbnN0cnVjdGlvblNp
emVXaXRoCiAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb246CiAg
ICAgICAgIHJldHVybiBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBzaXplb2YodW5z
aWduZWQpOwogICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVybWluYXRlOgotICAg
ICAgICByZXR1cm4gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pOwogICAgIGNhc2UgREZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbjo6SnVtcDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihERkFCeXRl
Y29kZUluc3RydWN0aW9uKSArIHNpemVvZih1bnNpZ25lZCk7CisgICAgY2FzZSBERkFCeXRlY29k
ZUluc3RydWN0aW9uOjpCcmFuY2hUYWJsZToKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICB9CiB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcAkocmV2aXNpb24g
MTgxMTk3KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVD
b21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJM
RShDT05URU5UX0VYVEVOU0lPTlMpCiAKKyNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSAi
Q29udGVudEV4dGVuc2lvblJ1bGUuaCIKICNpbmNsdWRlICJERkEuaCIKIApAQCAtNzMsNiArNzQs
NDEgQEAgdm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0VGVybWluYXRlKAogICAgIGFwcGVu
ZDxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlLCBERkFCeXRlY29kZUluc3RydWN0
aW9uOjpUZXJtaW5hdGUpOwogfQogCit2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRCcmFu
Y2hUYWJsZShjb25zdCBERkFOb2RlJiBub2RlKQoreworICAgIGFwcGVuZDxERkFCeXRlY29kZUlu
c3RydWN0aW9uPihtX2J5dGVjb2RlLCBERkFCeXRlY29kZUluc3RydWN0aW9uOjpCcmFuY2hUYWJs
ZSk7CisgICAgYXBwZW5kPERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24+KG1fYnl0ZWNvZGUsIERGQUJ5
dGVjb2RlSW5zdHJ1Y3Rpb246OlRlcm1pbmF0ZSk7CisgICAgaWYgKG5vZGUuaGFzRmFsbGJhY2tU
cmFuc2l0aW9uKSB7CisgICAgICAgIG1fbGlua1JlY29yZHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KG1fYnl0ZWNvZGUuc2l6ZSgpLCBub2RlLmZhbGxiYWNrVHJhbnNpdGlvbikpOworICAgICAgICBh
cHBlbmQ8dW5zaWduZWQ+KG1fYnl0ZWNvZGUsIDApOyAvLyBUaGlzIHZhbHVlIHdpbGwgYmUgc2V0
IHdoZW4gbGlua2luZy4KKyAgICB9IGVsc2UKKyAgICAgICAgYXBwZW5kPHVuc2lnbmVkPihtX2J5
dGVjb2RlLCBtX2J5dGVjb2RlLnNpemUoKSAtIDEpOyAvLyBKdW1wIHRvIHRoZSBUZXJtaW5hdGUg
aW5zdHJ1Y3Rpb24gaWYgb3V0IG9mIGJvdW5kcy4KKyAgICAKKyAgICB1aW50MTZfdCBtaW5WYWx1
ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKTsKKyAgICB1aW50MTZfdCBt
YXhWYWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptaW4oKTsKKyAgICBmb3Ig
KGNvbnN0IGF1dG8mIHRyYW5zaXRpb24gOiBub2RlLnRyYW5zaXRpb25zKSB7CisgICAgICAgIG1p
blZhbHVlID0gc3RkOjptaW4odHJhbnNpdGlvbi5rZXksIG1pblZhbHVlKTsKKyAgICAgICAgbWF4
VmFsdWUgPSBzdGQ6Om1heCh0cmFuc2l0aW9uLmtleSwgbWF4VmFsdWUpOworICAgIH0KKyAgICBS
RUxFQVNFX0FTU0VSVChtYXhWYWx1ZSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDhfdD46Om1h
eCgpKTsKKyAgICBhcHBlbmQ8Y2hhcj4obV9ieXRlY29kZSwgbWluVmFsdWUpOworICAgIGFwcGVu
ZDxpbnQ4X3Q+KG1fYnl0ZWNvZGUsIG1heFZhbHVlIC0gbWluVmFsdWUgKyAxKTsKKyAgICAKKyAg
ICBmb3IgKHVpbnQxNl90IGkgPSBtaW5WYWx1ZTsgaSA8PSBtYXhWYWx1ZTsgaSsrKSB7CisgICAg
ICAgIGF1dG8gaXQgPSBub2RlLnRyYW5zaXRpb25zLmZpbmQoaSk7CisgICAgICAgIGlmIChpdCA9
PSBub2RlLnRyYW5zaXRpb25zLmVuZCgpKSB7CisgICAgICAgICAgICBpZiAobm9kZS5oYXNGYWxs
YmFja1RyYW5zaXRpb24pIHsKKyAgICAgICAgICAgICAgICBtX2xpbmtSZWNvcmRzLmFwcGVuZChz
dGQ6Om1ha2VfcGFpcihtX2J5dGVjb2RlLnNpemUoKSwgbm9kZS5mYWxsYmFja1RyYW5zaXRpb24p
KTsKKyAgICAgICAgICAgICAgICBhcHBlbmQ8dW5zaWduZWQ+KG1fYnl0ZWNvZGUsIDApOyAvLyBU
aGlzIHZhbHVlIHdpbGwgYmUgc2V0IHdoZW4gbGlua2luZy4KKyAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgIGFwcGVuZDx1bnNpZ25lZD4obV9ieXRlY29kZSwgbV9ieXRlY29kZS5z
aXplKCkgLSAxKTsgLy8gSnVtcCB0byB0aGUgVGVybWluYXRlIGluc3RydWN0aW9uIGlmIG91dCBv
ZiBib3VuZHMuCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2xpbmtSZWNvcmRzLmFw
cGVuZChzdGQ6Om1ha2VfcGFpcjx1bnNpZ25lZD4obV9ieXRlY29kZS5zaXplKCksIGl0LT52YWx1
ZSkpOworICAgICAgICAgICAgYXBwZW5kPHVuc2lnbmVkPihtX2J5dGVjb2RlLCAwKTsgLy8gVGhp
cyB2YWx1ZSB3aWxsIGJlIHNldCB3aGVuIGxpbmtpbmcuCisgICAgICAgIH0KKyAgICB9Cit9CisK
IHZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZU5vZGUodW5zaWduZWQgaW5kZXgpCiB7
CiAgICAgY29uc3QgREZBTm9kZSYgbm9kZSA9IG1fZGZhLm5vZGVBdChpbmRleCk7CkBAIC04Myw4
ICsxMTksMTIgQEAgdm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlTm9kZSh1bgogICAg
IGZvciAodWludDY0X3QgYWN0aW9uIDogbm9kZS5hY3Rpb25zKQogICAgICAgICBlbWl0QXBwZW5k
QWN0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkPihhY3Rpb24pKTsKICAgICAKLSAgICBmb3IgKGNv
bnN0IGF1dG8mIHRyYW5zaXRpb24gOiBub2RlLnRyYW5zaXRpb25zKQotICAgICAgICBlbWl0Q2hl
Y2tWYWx1ZSh0cmFuc2l0aW9uLmtleSwgdHJhbnNpdGlvbi52YWx1ZSk7CisgICAgY29uc3QgaW50
IG1heFNlcXVlbnRpYWxDaGVja1ZhbHVlT3BzID0gNjsgLy8gR3Vlc3MgZm9yIGEgZ29vZCBvcHRp
bWFsIHZhbHVlIGJhc2VkIG9uIG5vIGFjdHVhbCBkYXRhLgorICAgIGlmIChub2RlLnRyYW5zaXRp
b25zLnNpemUoKSA8PSBtYXhTZXF1ZW50aWFsQ2hlY2tWYWx1ZU9wcykgeworICAgICAgICBmb3Ig
KGNvbnN0IGF1dG8mIHRyYW5zaXRpb24gOiBub2RlLnRyYW5zaXRpb25zKQorICAgICAgICAgICAg
ZW1pdENoZWNrVmFsdWUodHJhbnNpdGlvbi5rZXksIHRyYW5zaXRpb24udmFsdWUpOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0QnJhbmNoVGFibGUobm9kZSk7CiAgICAgCiAgICAgaWYgKG5vZGUu
aGFzRmFsbGJhY2tUcmFuc2l0aW9uKQogICAgICAgICBlbWl0SnVtcChub2RlLmZhbGxiYWNrVHJh
bnNpdGlvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRl
Y29kZUNvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5oCShyZXZpc2lvbiAxODExOTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU1LDYgKzU1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGVtaXRKdW1wKHVuc2ln
bmVkIGRlc3RpbmF0aW9uTm9kZUluZGV4KTsKICAgICB2b2lkIGVtaXRDaGVja1ZhbHVlKHVpbnQ4
X3QgdmFsdWUsIHVuc2lnbmVkIGRlc3RpbmF0aW9uTm9kZUluZGV4KTsKICAgICB2b2lkIGVtaXRU
ZXJtaW5hdGUoKTsKKyAgICB2b2lkIGVtaXRCcmFuY2hUYWJsZShjb25zdCBERkFOb2RlJik7CiAK
ICAgICBWZWN0b3I8REZBQnl0ZWNvZGU+JiBtX2J5dGVjb2RlOwogICAgIGNvbnN0IERGQSYgbV9k
ZmE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUlu
dGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTgxMTk3KQorKysgU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYwLDIyICs2MCw0MyBAQCBERkFCeXRlY29kZUludGVycHJldGVy
OjpBY3Rpb25zIERGQUJ5dGVjCiAgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIG5l
eHQgY2hhcmFjdGVyIGluIHRoZSB1cmwgaXMgdGhlIHZhbHVlIHN0b3JlZCB3aXRoIHRoZSBieXRl
Y29kZS4KICAgICAgICAgICAgIGlmICghdXJsW3VybEluZGV4XSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gYWN0aW9uczsgLy8gUmVhY2hlZCBudWxsIGNoYXJhY3RlciBhdCBlbmQuCi0gICAgICAg
ICAgICBpZiAodXJsW3VybEluZGV4XSA9PSBnZXRCaXRzPHVpbnQ4X3Q+KGJ5dGVjb2RlLCBwcm9n
cmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZSkpKSB7Ci0gICAgICAgICAgICAgICAgcHJv
Z3JhbUNvdW50ZXIgPSBnZXRCaXRzPHVuc2lnbmVkPihieXRlY29kZSwgcHJvZ3JhbUNvdW50ZXIg
KyBzaXplb2YoREZBQnl0ZWNvZGUpICsgc2l6ZW9mKHVpbnQ4X3QpKTsKKyAgICAgICAgICAgIGlm
ICh1cmxbdXJsSW5kZXhdID09IGdldEJpdHM8dWludDhfdD4oYnl0ZWNvZGUsIHByb2dyYW1Db3Vu
dGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pKSkgeworICAgICAgICAgICAgICAg
IHByb2dyYW1Db3VudGVyID0gZ2V0Qml0czx1bnNpZ25lZD4oYnl0ZWNvZGUsIHByb2dyYW1Db3Vu
dGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsgc2l6ZW9mKHVpbnQ4X3QpKTsK
ICAgICAgICAgICAgICAgICB1cmxJbmRleCsrOyAvLyBUaGlzIHJlcHJlc2VudHMgYW4gZWRnZSBp
biB0aGUgREZBLgogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgcHJvZ3JhbUNv
dW50ZXIgKz0gaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0
aW9uOjpDaGVja1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgREZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbjo6SnVtcDoKLSAgICAgICAgICAgIHByb2dyYW1Db3VudGVyID0g
Z2V0Qml0czx1bnNpZ25lZD4oYnl0ZWNvZGUsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5
dGVjb2RlKSk7CisgICAgICAgICAgICBwcm9ncmFtQ291bnRlciA9IGdldEJpdHM8dW5zaWduZWQ+
KGJ5dGVjb2RlLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9u
KSk7CiAgICAgICAgICAgICB1cmxJbmRleCsrOyAvLyBUaGlzIHJlcHJlc2VudHMgYW4gZWRnZSBp
biB0aGUgREZBLgogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBERkFCeXRlY29k
ZUluc3RydWN0aW9uOjpBcHBlbmRBY3Rpb246Ci0gICAgICAgICAgICBhY3Rpb25zLmFkZChzdGF0
aWNfY2FzdDx1aW50NjRfdD4oZ2V0Qml0czx1bnNpZ25lZD4oYnl0ZWNvZGUsIHByb2dyYW1Db3Vu
dGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSkpKTsKKyAgICAgICAgICAgIGFjdGlvbnMuYWRkKHN0
YXRpY19jYXN0PHVpbnQ2NF90PihnZXRCaXRzPHVuc2lnbmVkPihieXRlY29kZSwgcHJvZ3JhbUNv
dW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikpKSk7CiAgICAgICAgICAgICBw
cm9ncmFtQ291bnRlciArPSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2Rl
SW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpCcmFuY2hUYWJs
ZTogeworICAgICAgICAgICAgY2hhciBjdXJyZW50Q2hhciA9IHVybFt1cmxJbmRleF07CisgICAg
ICAgICAgICBpZiAoIWN1cnJlbnRDaGFyKQorICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb25z
OyAvLyBSZWFjaGVkIG51bGwgY2hhcmFjdGVyIGF0IGVuZC4KKyAgICAgICAgICAgIHVybEluZGV4
Kys7IC8vIFRoaXMgcmVwcmVzZW50cyBhbiBlZGdlIGluIHRoZSBERkEuCisgICAgICAgICAgICB1
bnNpZ25lZCBvdXRPZkJvdW5kc0luZGV4ID0gZ2V0Qml0czx1bnNpZ25lZD4oYnl0ZWNvZGUsIHBy
b2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICogMik7CisgICAg
ICAgICAgICBjaGFyIG1pblZhbHVlID0gZ2V0Qml0czxjaGFyPihieXRlY29kZSwgcHJvZ3JhbUNv
dW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKiAyICsgc2l6ZW9mKHVuc2ln
bmVkKSk7CisgICAgICAgICAgICBpbnQ4X3QgYnJhbmNoVGFibGVMZW5ndGggPSBnZXRCaXRzPGlu
dDhfdD4oYnl0ZWNvZGUsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb24pICogMiArIHNpemVvZih1bnNpZ25lZCkgKyBzaXplb2YoY2hhcikpOworICAgICAgICAg
ICAgaWYgKGN1cnJlbnRDaGFyIDwgbWluVmFsdWUpIHsKKyAgICAgICAgICAgICAgICBwcm9ncmFt
Q291bnRlciA9IG91dE9mQm91bmRzSW5kZXg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpbnQ4X3QgYnJhbmNoVGFibGVJbmRleCA9IGN1cnJlbnRD
aGFyIC0gbWluVmFsdWU7CisgICAgICAgICAgICBpZiAoYnJhbmNoVGFibGVJbmRleCA+IGJyYW5j
aFRhYmxlTGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgPSBvdXRPZkJv
dW5kc0luZGV4OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcHJvZ3JhbUNvdW50ZXIgPSBnZXRCaXRzPHVuc2lnbmVkPihieXRlY29kZSwgcHJvZ3Jh
bUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKiAyICsgc2l6ZW9mKHVu
c2lnbmVkKSArIHNpemVvZihjaGFyKSArIHNpemVvZihpbnQ4X3QpICsgYnJhbmNoVGFibGVJbmRl
eCAqIHNpemVvZih1bnNpZ25lZCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KIAog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsgLy8gSW52YWxpZCBieXRlY29kZS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248288</attachid>
            <date>2015-03-09 16:38:18 -0700</date>
            <delta_ts>2015-03-18 14:57:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142514-20150309163755.patch</filename>
            <type>text/plain</type>
            <size>9838</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MTI5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE1LTAzLTA5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50
IGp1bXAgdGFibGVzIGluIERGQSBjb21waWxlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjUxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjppbnN0cnVjdGlvblNpemVXaXRo
QXJndW1lbnRzKToKKyAgICAgICAgQWRkIGEgQnJhbmNoVGFibGUgYnl0ZWNvZGUuCisgICAgICAg
ICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdEJyYW5j
aFRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29k
ZUNvbXBpbGVyOjpjb21waWxlTm9kZSk6CisgICAgICAgIENvbXBpbGUgYnJhbmNoIHRhYmxlcy4K
KyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmg6CisgICAg
ICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6
aW50ZXJwcmV0KToKKyAgICAgICAgSW50ZXJwcmV0IGJyYW5jaCB0YWJsZXMuCisKIDIwMTUtMDMt
MDkgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBTaW1wbGUgbGlu
ZSBsYXlvdXQgc2hvdWxkIG5vdCBiZSBsaW1pdGVkIHRvIFJlbmRlclRleHQuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmgJKHJldmlzaW9u
IDE4MTI5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDE0IEBAIGVudW0gY2xhc3MgREZBQnl0ZWNv
ZGVJbnN0cnVjdGlvbiA6IHVpbnQKICAgICAvLyBUaGUgdmFsdWUgdG8gY2hlY2sgKDEgYnl0ZSks
CiAgICAgLy8gVGhlIGluZGV4IHRvIGp1bXAgdG8gaWYgdGhlIHZhbHVlcyBhcmUgZXF1YWwgKDQg
Ynl0ZXMpLgogICAgIENoZWNrVmFsdWUsCisgICAgCisgICAgLy8gQnJhbmNoVGFibGUgaGFzIG1h
bnkgYXJndW1lbnRzOgorICAgIC8vIEEgVGVybWluYXRlIGluc3RydWN0aW9uIHRvIGp1bXAgdG8g
aWYgdGhlcmUgaXMgbm8gZmFsbGJhY2sgdHJhbnNpdGlvbiAoMSBieXRlKSwKKyAgICAvLyBUaGUg
aW5kZXggdG8ganVtcCB0byBpZiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgaXMgb3V0c2lkZSB0aGUg
Ym91bmRzIG9mIHRoZSBicmFuY2ggdGFibGUgKDQgYnl0ZXMpLAorICAgIC8vIFRoZSBtaW5pbXVt
IHZhbHVlIGluIHRoZSBicmFuY2ggdGFibGUgKDEgYnl0ZSksCisgICAgLy8gVGhlIGxlbmd0aCBv
ZiB0aGUgYnJhbmNoIHRhYmxlICgxIGJ5dGUpLAorICAgIC8vIFRoZSBicmFuY2ggdGFibGUgKDQg
Ynl0ZXMgcGVyIGJyYW5jaCkKKyAgICBCcmFuY2hUYWJsZSwKIAogICAgIC8vIEFwcGVuZEFjdGlv
biBoYXMgb25lIGFyZ3VtZW50OgogICAgIC8vIFRoZSBhY3Rpb24gdG8gYXBwZW5kICg0IGJ5dGVz
KS4KQEAgLTYxLDkgKzY5LDkgQEAgc3RhdGljIGlubGluZSBzaXplX3QgaW5zdHJ1Y3Rpb25TaXpl
V2l0aAogICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uOgogICAg
ICAgICByZXR1cm4gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICsgc2l6ZW9mKHVuc2ln
bmVkKTsKICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlcm1pbmF0ZToKLSAgICAg
ICAgcmV0dXJuIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKTsKICAgICBjYXNlIERGQUJ5
dGVjb2RlSW5zdHJ1Y3Rpb246Okp1bXA6Ci0gICAgICAgIHJldHVybiBzaXplb2YoREZBQnl0ZWNv
ZGVJbnN0cnVjdGlvbikgKyBzaXplb2YodW5zaWduZWQpOworICAgIGNhc2UgREZBQnl0ZWNvZGVJ
bnN0cnVjdGlvbjo6QnJhbmNoVGFibGU6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgfQogfQogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHAJKHJldmlzaW9uIDE4
MTI5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29t
cGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUo
Q09OVEVOVF9FWFRFTlNJT05TKQogCisjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgIkNv
bnRlbnRFeHRlbnNpb25SdWxlLmgiCiAjaW5jbHVkZSAiREZBLmgiCiAKQEAgLTczLDYgKzc0LDQx
IEBAIHZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdFRlcm1pbmF0ZSgKICAgICBhcHBlbmQ8
REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlv
bjo6VGVybWluYXRlKTsKIH0KIAordm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0QnJhbmNo
VGFibGUoY29uc3QgREZBTm9kZSYgbm9kZSkKK3sKKyAgICBhcHBlbmQ8REZBQnl0ZWNvZGVJbnN0
cnVjdGlvbj4obV9ieXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QnJhbmNoVGFibGUp
OworICAgIGFwcGVuZDxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlLCBERkFCeXRl
Y29kZUluc3RydWN0aW9uOjpUZXJtaW5hdGUpOworICAgIGlmIChub2RlLmhhc0ZhbGxiYWNrVHJh
bnNpdGlvbikgeworICAgICAgICBtX2xpbmtSZWNvcmRzLmFwcGVuZChzdGQ6Om1ha2VfcGFpciht
X2J5dGVjb2RlLnNpemUoKSwgbm9kZS5mYWxsYmFja1RyYW5zaXRpb24pKTsKKyAgICAgICAgYXBw
ZW5kPHVuc2lnbmVkPihtX2J5dGVjb2RlLCAwKTsgLy8gVGhpcyB2YWx1ZSB3aWxsIGJlIHNldCB3
aGVuIGxpbmtpbmcuCisgICAgfSBlbHNlCisgICAgICAgIGFwcGVuZDx1bnNpZ25lZD4obV9ieXRl
Y29kZSwgbV9ieXRlY29kZS5zaXplKCkgLSAxKTsgLy8gSnVtcCB0byB0aGUgVGVybWluYXRlIGlu
c3RydWN0aW9uIGlmIG91dCBvZiBib3VuZHMuCisgICAgCisgICAgdWludDE2X3QgbWluVmFsdWUg
PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQxNl90Pjo6bWF4KCk7CisgICAgdWludDE2X3QgbWF4
VmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQxNl90Pjo6bWluKCk7CisgICAgZm9yIChj
b25zdCBhdXRvJiB0cmFuc2l0aW9uIDogbm9kZS50cmFuc2l0aW9ucykgeworICAgICAgICBtaW5W
YWx1ZSA9IHN0ZDo6bWluKHRyYW5zaXRpb24ua2V5LCBtaW5WYWx1ZSk7CisgICAgICAgIG1heFZh
bHVlID0gc3RkOjptYXgodHJhbnNpdGlvbi5rZXksIG1heFZhbHVlKTsKKyAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlQobWF4VmFsdWUgPD0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ4X3Q+OjptYXgo
KSk7CisgICAgYXBwZW5kPGNoYXI+KG1fYnl0ZWNvZGUsIG1pblZhbHVlKTsKKyAgICBhcHBlbmQ8
aW50OF90PihtX2J5dGVjb2RlLCBtYXhWYWx1ZSAtIG1pblZhbHVlICsgMSk7CisgICAgCisgICAg
Zm9yICh1aW50MTZfdCBpID0gbWluVmFsdWU7IGkgPD0gbWF4VmFsdWU7IGkrKykgeworICAgICAg
ICBhdXRvIGl0ID0gbm9kZS50cmFuc2l0aW9ucy5maW5kKGkpOworICAgICAgICBpZiAoaXQgPT0g
bm9kZS50cmFuc2l0aW9ucy5lbmQoKSkgeworICAgICAgICAgICAgaWYgKG5vZGUuaGFzRmFsbGJh
Y2tUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgbV9saW5rUmVjb3Jkcy5hcHBlbmQoc3Rk
OjptYWtlX3BhaXIobV9ieXRlY29kZS5zaXplKCksIG5vZGUuZmFsbGJhY2tUcmFuc2l0aW9uKSk7
CisgICAgICAgICAgICAgICAgYXBwZW5kPHVuc2lnbmVkPihtX2J5dGVjb2RlLCAwKTsgLy8gVGhp
cyB2YWx1ZSB3aWxsIGJlIHNldCB3aGVuIGxpbmtpbmcuCisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICBhcHBlbmQ8dW5zaWduZWQ+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGUuc2l6
ZSgpIC0gMSk7IC8vIEp1bXAgdG8gdGhlIFRlcm1pbmF0ZSBpbnN0cnVjdGlvbiBpZiBvdXQgb2Yg
Ym91bmRzLgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9saW5rUmVjb3Jkcy5hcHBl
bmQoc3RkOjptYWtlX3BhaXI8dW5zaWduZWQ+KG1fYnl0ZWNvZGUuc2l6ZSgpLCBpdC0+dmFsdWUp
KTsKKyAgICAgICAgICAgIGFwcGVuZDx1bnNpZ25lZD4obV9ieXRlY29kZSwgMCk7IC8vIFRoaXMg
dmFsdWUgd2lsbCBiZSBzZXQgd2hlbiBsaW5raW5nLgorICAgICAgICB9CisgICAgfQorfQorCiB2
b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVOb2RlKHVuc2lnbmVkIGluZGV4KQogewog
ICAgIGNvbnN0IERGQU5vZGUmIG5vZGUgPSBtX2RmYS5ub2RlQXQoaW5kZXgpOwpAQCAtODMsOCAr
MTE5LDEyIEBAIHZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZU5vZGUodW4KICAgICBm
b3IgKHVpbnQ2NF90IGFjdGlvbiA6IG5vZGUuYWN0aW9ucykKICAgICAgICAgZW1pdEFwcGVuZEFj
dGlvbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYWN0aW9uKSk7CiAgICAgCi0gICAgZm9yIChjb25z
dCBhdXRvJiB0cmFuc2l0aW9uIDogbm9kZS50cmFuc2l0aW9ucykKLSAgICAgICAgZW1pdENoZWNr
VmFsdWUodHJhbnNpdGlvbi5rZXksIHRyYW5zaXRpb24udmFsdWUpOworICAgIGNvbnN0IGludCBt
YXhTZXF1ZW50aWFsQ2hlY2tWYWx1ZU9wcyA9IDY7IC8vIEd1ZXNzIGZvciBhIGdvb2Qgb3B0aW1h
bCB2YWx1ZSBiYXNlZCBvbiBubyBhY3R1YWwgZGF0YS4KKyAgICBpZiAobm9kZS50cmFuc2l0aW9u
cy5zaXplKCkgPD0gbWF4U2VxdWVudGlhbENoZWNrVmFsdWVPcHMpIHsKKyAgICAgICAgZm9yIChj
b25zdCBhdXRvJiB0cmFuc2l0aW9uIDogbm9kZS50cmFuc2l0aW9ucykKKyAgICAgICAgICAgIGVt
aXRDaGVja1ZhbHVlKHRyYW5zaXRpb24ua2V5LCB0cmFuc2l0aW9uLnZhbHVlKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgZW1pdEJyYW5jaFRhYmxlKG5vZGUpOwogICAgIAogICAgIGlmIChub2RlLmhh
c0ZhbGxiYWNrVHJhbnNpdGlvbikKICAgICAgICAgZW1pdEp1bXAobm9kZS5mYWxsYmFja1RyYW5z
aXRpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNv
ZGVDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuaAkocmV2aXNpb24gMTgxMjkwKQorKysgU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NSw2ICs1NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBlbWl0SnVtcCh1bnNpZ25l
ZCBkZXN0aW5hdGlvbk5vZGVJbmRleCk7CiAgICAgdm9pZCBlbWl0Q2hlY2tWYWx1ZSh1aW50OF90
IHZhbHVlLCB1bnNpZ25lZCBkZXN0aW5hdGlvbk5vZGVJbmRleCk7CiAgICAgdm9pZCBlbWl0VGVy
bWluYXRlKCk7CisgICAgdm9pZCBlbWl0QnJhbmNoVGFibGUoY29uc3QgREZBTm9kZSYpOwogCiAg
ICAgVmVjdG9yPERGQUJ5dGVjb2RlPiYgbV9ieXRlY29kZTsKICAgICBjb25zdCBERkEmIG1fZGZh
OwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRl
cnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE4MTI5MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02MiwyMiArNjIsNDMgQEAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6
QWN0aW9ucyBERkFCeXRlYwogICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBuZXh0
IGNoYXJhY3RlciBpbiB0aGUgdXJsIGlzIHRoZSB2YWx1ZSBzdG9yZWQgd2l0aCB0aGUgYnl0ZWNv
ZGUuCiAgICAgICAgICAgICBpZiAoIXVybFt1cmxJbmRleF0pCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGFjdGlvbnM7IC8vIFJlYWNoZWQgbnVsbCBjaGFyYWN0ZXIgYXQgZW5kLgotICAgICAgICAg
ICAgaWYgKHVybFt1cmxJbmRleF0gPT0gZ2V0Qml0czx1aW50OF90PihtX2J5dGVjb2RlLCBtX2J5
dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZSkpKSB7Ci0g
ICAgICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgPSBnZXRCaXRzPHVuc2lnbmVkPihtX2J5dGVj
b2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29k
ZSkgKyBzaXplb2YodWludDhfdCkpOworICAgICAgICAgICAgaWYgKHVybFt1cmxJbmRleF0gPT0g
Z2V0Qml0czx1aW50OF90PihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291
bnRlciArIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSkpIHsKKyAgICAgICAgICAgICAg
ICBwcm9ncmFtQ291bnRlciA9IGdldEJpdHM8dW5zaWduZWQ+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNv
ZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24p
ICsgc2l6ZW9mKHVpbnQ4X3QpKTsKICAgICAgICAgICAgICAgICB1cmxJbmRleCsrOyAvLyBUaGlz
IHJlcHJlc2VudHMgYW4gZWRnZSBpbiB0aGUgREZBLgogICAgICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgKz0gaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50
cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpDaGVja1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6SnVtcDoKLSAgICAgICAg
ICAgIHByb2dyYW1Db3VudGVyID0gZ2V0Qml0czx1bnNpZ25lZD4obV9ieXRlY29kZSwgbV9ieXRl
Y29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpKTsKKyAgICAg
ICAgICAgIHByb2dyYW1Db3VudGVyID0gZ2V0Qml0czx1bnNpZ25lZD4obV9ieXRlY29kZSwgbV9i
eXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVj
dGlvbikpOwogICAgICAgICAgICAgdXJsSW5kZXgrKzsgLy8gVGhpcyByZXByZXNlbnRzIGFuIGVk
Z2UgaW4gdGhlIERGQS4KICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uOgotICAgICAgICAgICAgYWN0aW9ucy5hZGQo
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KGdldEJpdHM8dW5zaWduZWQ+KG1fYnl0ZWNvZGUsIG1fYnl0
ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSkpKTsKKyAg
ICAgICAgICAgIGFjdGlvbnMuYWRkKHN0YXRpY19jYXN0PHVpbnQ2NF90PihnZXRCaXRzPHVuc2ln
bmVkPihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVv
ZihERkFCeXRlY29kZUluc3RydWN0aW9uKSkpKTsKICAgICAgICAgICAgIHByb2dyYW1Db3VudGVy
ICs9IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6
QXBwZW5kQWN0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkJyYW5jaFRhYmxlOiB7CisgICAgICAg
ICAgICBjaGFyIGN1cnJlbnRDaGFyID0gdXJsW3VybEluZGV4XTsKKyAgICAgICAgICAgIGlmICgh
Y3VycmVudENoYXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbnM7IC8vIFJlYWNoZWQg
bnVsbCBjaGFyYWN0ZXIgYXQgZW5kLgorICAgICAgICAgICAgdXJsSW5kZXgrKzsgLy8gVGhpcyBy
ZXByZXNlbnRzIGFuIGVkZ2UgaW4gdGhlIERGQS4KKyAgICAgICAgICAgIHVuc2lnbmVkIG91dE9m
Qm91bmRzSW5kZXggPSBnZXRCaXRzPHVuc2lnbmVkPihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVu
Z3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSAqIDIp
OworICAgICAgICAgICAgY2hhciBtaW5WYWx1ZSA9IGdldEJpdHM8Y2hhcj4obV9ieXRlY29kZSwg
bV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGVJbnN0
cnVjdGlvbikgKiAyICsgc2l6ZW9mKHVuc2lnbmVkKSk7CisgICAgICAgICAgICBpbnQ4X3QgYnJh
bmNoVGFibGVMZW5ndGggPSBnZXRCaXRzPGludDhfdD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxl
bmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKiAy
ICsgc2l6ZW9mKHVuc2lnbmVkKSArIHNpemVvZihjaGFyKSk7CisgICAgICAgICAgICBpZiAoY3Vy
cmVudENoYXIgPCBtaW5WYWx1ZSkgeworICAgICAgICAgICAgICAgIHByb2dyYW1Db3VudGVyID0g
b3V0T2ZCb3VuZHNJbmRleDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGludDhfdCBicmFuY2hUYWJsZUluZGV4ID0gY3VycmVudENoYXIgLSBtaW5W
YWx1ZTsKKyAgICAgICAgICAgIGlmIChicmFuY2hUYWJsZUluZGV4ID4gYnJhbmNoVGFibGVMZW5n
dGgpIHsKKyAgICAgICAgICAgICAgICBwcm9ncmFtQ291bnRlciA9IG91dE9mQm91bmRzSW5kZXg7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcm9n
cmFtQ291bnRlciA9IGdldEJpdHM8dW5zaWduZWQ+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5n
dGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pICogMiAr
IHNpemVvZih1bnNpZ25lZCkgKyBzaXplb2YoY2hhcikgKyBzaXplb2YoaW50OF90KSArIGJyYW5j
aFRhYmxlSW5kZXggKiBzaXplb2YodW5zaWduZWQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CiAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IC8vIEludmFsaWQgYnl0ZWNvZGUuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248968</attachid>
            <date>2015-03-18 14:57:41 -0700</date>
            <delta_ts>2015-04-02 14:58:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142514-20150318145709.patch</filename>
            <type>text/plain</type>
            <size>13270</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MTcwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE1LTAzLTE4ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50
IGp1bXAgdGFibGVzIGluIERGQSBjb21waWxlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjUxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjppbnN0cnVjdGlvblNpemVXaXRo
QXJndW1lbnRzKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBp
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29k
ZUNvbXBpbGVyOjpjb21waWxlTm9kZVRyYW5zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0QnJhbmNoVGFibGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6
OmNvbXBpbGVDaGVja0ZvclJhbmdlKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFC
eXRlY29kZUNvbXBpbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
REZBQnl0ZWNvZGVDb21waWxlcjo6UmFuZ2U6OlJhbmdlKToKKyAgICAgICAgKiBjb250ZW50ZXh0
ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVyOjppbnRlcnByZXQpOgorCiAy
MDE1LTAzLTE4ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAg
ICAgUGFzcyBjb29raWVzIGJ5IHJlZmVyZW5jZSBpbiBDb29raWVIYXNoIGZ1bmN0aW9ucwpJbmRl
eDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oCShy
ZXZpc2lvbiAxODE2NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFC
eXRlY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0NywxMiBAQCBlbnVtIGNsYXNzIERG
QUJ5dGVjb2RlSW5zdHJ1Y3Rpb24gOiB1aW50CiAgICAgLy8gVGhlIGluZGV4IHRvIGp1bXAgdG8g
aWYgdGhlIHZhbHVlIGlzIGluIHRoZSByYW5nZSAoNCBieXRlcykuCiAgICAgQ2hlY2tWYWx1ZVJh
bmdlLAogCisgICAgLy8gQnJhbmNoVGFibGUgaGFzIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3Vt
ZW50czoKKyAgICAvLyBUaGUgbWluaW11bSB2YWx1ZSBpbiB0aGUgYnJhbmNoIHRhYmxlICgxIGJ5
dGUpLAorICAgIC8vIFRoZSBsZW5ndGggb2YgdGhlIGJyYW5jaCB0YWJsZSAoMSBieXRlKSwKKyAg
ICAvLyBUaGUgYnJhbmNoIHRhYmxlICg0IGJ5dGVzIHBlciBicmFuY2gpCisgICAgQnJhbmNoVGFi
bGUsCisgICAgCiAgICAgLy8gQXBwZW5kQWN0aW9uIGhhcyBvbmUgYXJndW1lbnQ6CiAgICAgLy8g
VGhlIGFjdGlvbiB0byBhcHBlbmQgKDQgYnl0ZXMpLgogICAgIEFwcGVuZEFjdGlvbiwKQEAgLTc5
LDYgKzg1LDggQEAgc3RhdGljIGlubGluZSBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplV2l0aAogICAg
ICAgICByZXR1cm4gc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pOwogICAgIGNhc2UgREZB
Qnl0ZWNvZGVJbnN0cnVjdGlvbjo6SnVtcDoKICAgICAgICAgcmV0dXJuIHNpemVvZihERkFCeXRl
Y29kZUluc3RydWN0aW9uKSArIHNpemVvZih1bnNpZ25lZCk7CisgICAgY2FzZSBERkFCeXRlY29k
ZUluc3RydWN0aW9uOjpCcmFuY2hUYWJsZToKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICB9CiB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcAkocmV2aXNpb24g
MTgxNjY0KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVD
b21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw2ICsxMTYsNyBAQCB2b2lkIERGQUJ5
dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVOb2RlVHJhCiAgICAgYm9vbCBoYXNSYW5nZU1pbiA9IGZh
bHNlOwogICAgIHVpbnQxNl90IHJhbmdlTWluOwogICAgIHVuc2lnbmVkIHJhbmdlRGVzdGluYXRp
b24gPSAwOworICAgIFZlY3RvcjxSYW5nZT4gcmFuZ2VzOwogCiAgICAgZm9yICh1bnNpZ25lZCBj
aGFyIGkgPSAwOyBpIDwgMTI4OyArK2kpIHsKICAgICAgICAgYXV0byB0cmFuc2l0aW9uSXRlcmF0
b3IgPSBub2RlLnRyYW5zaXRpb25zLmZpbmQoaSk7CkBAIC0xMjMsOCArMTI0LDcgQEAgdm9pZCBE
RkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlTm9kZVRyYQogICAgICAgICAgICAgaWYgKGhhc1Jh
bmdlTWluKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghKG5vZGUuaGFz
RmFsbGJhY2tUcmFuc2l0aW9uICYmIG5vZGUuZmFsbGJhY2tUcmFuc2l0aW9uID09IHJhbmdlRGVz
dGluYXRpb24pLCAiSW5kaXZpZHVhbCB0cmFuc2l0aW9ucyB0byB0aGUgZmFsbGJhY2sgdHJhbnNp
dGlvbnMgc2hvdWxkIGhhdmUgYmVlbiBlbGltaW5hdGVkIGJ5IHRoZSBvcHRpbWl6ZXIuIik7CiAK
LSAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGxhc3RIaWdoVmFsdWUgPSBpIC0gMTsKLSAg
ICAgICAgICAgICAgICBjb21waWxlQ2hlY2tGb3JSYW5nZShyYW5nZU1pbiwgbGFzdEhpZ2hWYWx1
ZSwgcmFuZ2VEZXN0aW5hdGlvbik7CisgICAgICAgICAgICAgICAgcmFuZ2VzLmFwcGVuZChSYW5n
ZShyYW5nZU1pbiwgaSAtIDEsIHJhbmdlRGVzdGluYXRpb24pKTsKICAgICAgICAgICAgICAgICBo
YXNSYW5nZU1pbiA9IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY29udGludWU7
CkBAIC0xMzgsMTQgKzEzOCwyMiBAQCB2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVO
b2RlVHJhCiAgICAgICAgICAgICBpZiAodHJhbnNpdGlvbkl0ZXJhdG9yLT52YWx1ZSA9PSByYW5n
ZURlc3RpbmF0aW9uKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICB1
bnNpZ25lZCBjaGFyIGxhc3RIaWdoVmFsdWUgPSBpIC0gMTsKLSAgICAgICAgICAgIGNvbXBpbGVD
aGVja0ZvclJhbmdlKHJhbmdlTWluLCBsYXN0SGlnaFZhbHVlLCByYW5nZURlc3RpbmF0aW9uKTsK
KyAgICAgICAgICAgIHJhbmdlcy5hcHBlbmQoUmFuZ2UocmFuZ2VNaW4sIGkgLSAxLCByYW5nZURl
c3RpbmF0aW9uKSk7CiAgICAgICAgICAgICByYW5nZU1pbiA9IGk7CiAgICAgICAgICAgICByYW5n
ZURlc3RpbmF0aW9uID0gdHJhbnNpdGlvbkl0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgfQogICAg
IH0KICAgICBpZiAoaGFzUmFuZ2VNaW4pCi0gICAgICAgIGNvbXBpbGVDaGVja0ZvclJhbmdlKHJh
bmdlTWluLCAxMjcsIHJhbmdlRGVzdGluYXRpb24pOworICAgICAgICByYW5nZXMuYXBwZW5kKFJh
bmdlKHJhbmdlTWluLCAxMjcsIHJhbmdlRGVzdGluYXRpb24pKTsKKyAgICAKKyAgICAvLyBMb3Rz
IG9mIGR1cGxpY2F0ZSByYW5nZXMgYXJlIGNhdXNlZCBieSB1cHBlciBjYXNlIGFuZCBsb3dlciBj
YXNlIGNoYXJhY3RlcnMuCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBjYXNlLWluc2Vuc2l0aXZl
IHJhbmdlIGNoZWNrcy4KKyAgICBpZiAocmFuZ2VzLnNpemUoKSA+IDYpCisgICAgICAgIGVtaXRC
cmFuY2hUYWJsZShub2RlKTsKKyAgICBlbHNlIHsKKyAgICAgICAgZm9yIChjb25zdCBSYW5nZSYg
cmFuZ2UgOiByYW5nZXMpCisgICAgICAgICAgICBjb21waWxlQ2hlY2tGb3JSYW5nZShyYW5nZSk7
CisgICAgfQogCiAgICAgaWYgKG5vZGUuaGFzRmFsbGJhY2tUcmFuc2l0aW9uKQogICAgICAgICBl
bWl0SnVtcChub2RlLmZhbGxiYWNrVHJhbnNpdGlvbik7CkBAIC0xNTMsMTYgKzE2MSw0MyBAQCB2
b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVOb2RlVHJhCiAgICAgICAgIGVtaXRUZXJt
aW5hdGUoKTsKIH0KIAotdm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlQ2hlY2tGb3JS
YW5nZSh1aW50MTZfdCBsb3dWYWx1ZSwgdWludDE2X3QgaGlnaFZhbHVlLCB1bnNpZ25lZCBkZXN0
aW5hdGlvbk5vZGVJbmRleCkKK3ZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdEJyYW5jaFRh
YmxlKGNvbnN0IERGQU5vZGUmIG5vZGUpCit7CisgICAgaWYgKCFub2RlLnRyYW5zaXRpb25zLnNp
emUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGFwcGVuZDxERkFCeXRlY29kZUluc3Ry
dWN0aW9uPihtX2J5dGVjb2RlLCBERkFCeXRlY29kZUluc3RydWN0aW9uOjpCcmFuY2hUYWJsZSk7
CisgICAgCisgICAgdWludDE2X3QgbWluVmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQx
Nl90Pjo6bWF4KCk7CisgICAgdWludDE2X3QgbWF4VmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQxNl90Pjo6bWluKCk7CisgICAgZm9yIChjb25zdCBhdXRvJiB0cmFuc2l0aW9uIDogbm9k
ZS50cmFuc2l0aW9ucykgeworICAgICAgICBtaW5WYWx1ZSA9IHN0ZDo6bWluKHRyYW5zaXRpb24u
a2V5LCBtaW5WYWx1ZSk7CisgICAgICAgIG1heFZhbHVlID0gc3RkOjptYXgodHJhbnNpdGlvbi5r
ZXksIG1heFZhbHVlKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQobWF4VmFsdWUgPD0gc3Rk
OjpudW1lcmljX2xpbWl0czxjaGFyPjo6bWF4KCkpOworICAgIGFwcGVuZDxjaGFyPihtX2J5dGVj
b2RlLCBzdGF0aWNfY2FzdDxjaGFyPihtaW5WYWx1ZSkpOworICAgIGFwcGVuZDxjaGFyPihtX2J5
dGVjb2RlLCBzdGF0aWNfY2FzdDxjaGFyPihtYXhWYWx1ZSkpOworICAgIAorICAgIGZvciAodWlu
dDE2X3QgaSA9IG1pblZhbHVlOyBpIDw9IG1heFZhbHVlOyBpKyspIHsKKyAgICAgICAgYXV0byBp
dCA9IG5vZGUudHJhbnNpdGlvbnMuZmluZChpKTsKKyAgICAgICAgaWYgKGl0ID09IG5vZGUudHJh
bnNpdGlvbnMuZW5kKCkpCisgICAgICAgICAgICBhcHBlbmQ8dW5zaWduZWQ+KG1fYnl0ZWNvZGUs
IFVJTlRfTUFYKTsgLy8gVGVsbCBpbnRlcnByZXRlciB0aGlzIHZhbHVlIGlzIG5vdCBpbiB0aGUg
YnJhbmNoIHRhYmxlLgorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fbGlua1JlY29yZHMu
YXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG1fYnl0ZWNvZGUuc2l6ZSgpLCBpdC0+dmFsdWUpKTsKKyAg
ICAgICAgICAgIGFwcGVuZDx1bnNpZ25lZD4obV9ieXRlY29kZSwgMCk7IC8vIFRoaXMgdmFsdWUg
d2lsbCBiZSBzZXQgd2hlbiBsaW5raW5nLgorICAgICAgICB9CisgICAgfQorfQorICAgIAordm9p
ZCBERkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlQ2hlY2tGb3JSYW5nZShjb25zdCBSYW5nZSYg
cmFuZ2UpCiB7Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShsb3dWYWx1ZSA8IDEyOCwgIlRoZSBE
RkEgZW5naW5lIG9ubHkgc3VwcG9ydHMgdGhlIEFTQ0lJIGFscGhhYmV0LiIpOwotICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UoaGlnaFZhbHVlIDwgMTI4LCAiVGhlIERGQSBlbmdpbmUgb25seSBzdXBw
b3J0cyB0aGUgQVNDSUkgYWxwaGFiZXQuIik7Ci0gICAgQVNTRVJUKGxvd1ZhbHVlIDw9IGhpZ2hW
YWx1ZSk7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShyYW5nZS5tYXggPCAxMjgsICJUaGUgREZB
IGVuZ2luZSBvbmx5IHN1cHBvcnRzIHRoZSBBU0NJSSBhbHBoYWJldC4iKTsKKyAgICBBU1NFUlQo
cmFuZ2UubWluIDw9IHJhbmdlLm1heCk7CiAKLSAgICBpZiAobG93VmFsdWUgPT0gaGlnaFZhbHVl
KQotICAgICAgICBlbWl0Q2hlY2tWYWx1ZShsb3dWYWx1ZSwgZGVzdGluYXRpb25Ob2RlSW5kZXgp
OworICAgIGlmIChyYW5nZS5taW4gPT0gcmFuZ2UubWF4KQorICAgICAgICBlbWl0Q2hlY2tWYWx1
ZShyYW5nZS5taW4sIHJhbmdlLmRlc3RpbmF0aW9uKTsKICAgICBlbHNlCi0gICAgICAgIGVtaXRD
aGVja1ZhbHVlUmFuZ2UobG93VmFsdWUsIGhpZ2hWYWx1ZSwgZGVzdGluYXRpb25Ob2RlSW5kZXgp
OworICAgICAgICBlbWl0Q2hlY2tWYWx1ZVJhbmdlKHJhbmdlLm1pbiwgcmFuZ2UubWF4LCByYW5n
ZS5kZXN0aW5hdGlvbik7CiB9CiAKIHZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZSgp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBp
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZB
Qnl0ZWNvZGVDb21waWxlci5oCShyZXZpc2lvbiAxODE2NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDExICs0OSwyMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlKCk7CiAKIHByaXZhdGU6
CisgICAgc3RydWN0IFJhbmdlIHsKKyAgICAgICAgUmFuZ2UodWludDE2X3QgbWluLCB1aW50MTZf
dCBtYXgsIHVuc2lnbmVkIGRlc3RpbmF0aW9uKQorICAgICAgICAgICAgOiBtaW4obWluKQorICAg
ICAgICAgICAgLCBtYXgobWF4KQorICAgICAgICAgICAgLCBkZXN0aW5hdGlvbihkZXN0aW5hdGlv
bikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIHVpbnQxNl90IG1pbjsKKyAgICAgICAg
dWludDE2X3QgbWF4OworICAgICAgICB1bnNpZ25lZCBkZXN0aW5hdGlvbjsKKyAgICB9OwogICAg
IHZvaWQgY29tcGlsZU5vZGUodW5zaWduZWQpOwogICAgIHZvaWQgY29tcGlsZU5vZGVUcmFuc2l0
aW9ucyhjb25zdCBERkFOb2RlJik7Ci0gICAgdm9pZCBjb21waWxlQ2hlY2tGb3JSYW5nZSh1aW50
MTZfdCBsb3dWYWx1ZSwgdWludDE2X3QgaGlnaFZhbHVlLCB1bnNpZ25lZCBkZXN0aW5hdGlvbk5v
ZGVJbmRleCk7CisgICAgdm9pZCBjb21waWxlQ2hlY2tGb3JSYW5nZShjb25zdCBSYW5nZSYpOwog
CiAgICAgdm9pZCBlbWl0QXBwZW5kQWN0aW9uKHVuc2lnbmVkKTsKKyAgICB2b2lkIGVtaXRCcmFu
Y2hUYWJsZShjb25zdCBERkFOb2RlJik7CiAgICAgdm9pZCBlbWl0VGVzdEZsYWdzQW5kQXBwZW5k
QWN0aW9uKHVpbnQxNl90IGZsYWdzLCB1bnNpZ25lZCk7CiAgICAgdm9pZCBlbWl0SnVtcCh1bnNp
Z25lZCBkZXN0aW5hdGlvbk5vZGVJbmRleCk7CiAgICAgdm9pZCBlbWl0Q2hlY2tWYWx1ZSh1aW50
OF90IHZhbHVlLCB1bnNpZ25lZCBkZXN0aW5hdGlvbk5vZGVJbmRleCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUlu
dGVycHJldGVyLmNwcAkocmV2aXNpb24gMTgxNjY0KQorKysgU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY0LDggKzY0LDggQEAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBERkFCeXRlYwog
ICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb25zOwogCiAgICAgICAgICAgICAvLyBDaGVjayB0
byBzZWUgaWYgdGhlIG5leHQgY2hhcmFjdGVyIGluIHRoZSB1cmwgaXMgdGhlIHZhbHVlIHN0b3Jl
ZCB3aXRoIHRoZSBieXRlY29kZS4KLSAgICAgICAgICAgIGlmICh1cmxbdXJsSW5kZXhdID09IGdl
dEJpdHM8dWludDhfdD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50
ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpKSkgewotICAgICAgICAgICAgICAgIHByb2dyYW1Db3Vu
dGVyID0gZ2V0Qml0czx1bnNpZ25lZD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJv
Z3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpICsgc2l6ZW9mKHVpbnQ4X3QpKTsKKyAg
ICAgICAgICAgIGlmICh1cmxbdXJsSW5kZXhdID09IGdldEJpdHM8dWludDhfdD4obV9ieXRlY29k
ZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGVJ
bnN0cnVjdGlvbikpKSB7CisgICAgICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgPSBnZXRCaXRz
PHVuc2lnbmVkPihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciAr
IHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVvZih1aW50OF90KSk7CiAgICAg
ICAgICAgICAgICAgaWYgKCF1cmxbdXJsSW5kZXhdKQogICAgICAgICAgICAgICAgICAgICB1cmxJ
bmRleElzQWZ0ZXJFbmRPZlN0cmluZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgdXJsSW5kZXgr
KzsgLy8gVGhpcyByZXByZXNlbnRzIGFuIGVkZ2UgaW4gdGhlIERGQS4KQEAgLTc4LDkgKzc4LDkg
QEAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBERkFCeXRlYwogICAgICAgICAgICAg
ICAgIHJldHVybiBhY3Rpb25zOwogCiAgICAgICAgICAgICBjaGFyIGNoYXJhY3RlciA9IHVybFt1
cmxJbmRleF07Ci0gICAgICAgICAgICBpZiAoY2hhcmFjdGVyID49IGdldEJpdHM8dWludDhfdD4o
bV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZB
Qnl0ZWNvZGUpKQotICAgICAgICAgICAgICAgICYmIGNoYXJhY3RlciA8PSBnZXRCaXRzPHVpbnQ4
X3Q+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9m
KERGQUJ5dGVjb2RlKSArIHNpemVvZih1aW50OF90KSkpIHsKLSAgICAgICAgICAgICAgICBwcm9n
cmFtQ291bnRlciA9IGdldEJpdHM8dW5zaWduZWQ+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5n
dGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSArIHNpemVvZih1aW50OF90
KSArIHNpemVvZih1aW50OF90KSk7CisgICAgICAgICAgICBpZiAoY2hhcmFjdGVyID49IGdldEJp
dHM8dWludDhfdD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIg
KyBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikpCisgICAgICAgICAgICAgICAgJiYgY2hh
cmFjdGVyIDw9IGdldEJpdHM8dWludDhfdD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwg
cHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBzaXplb2Yo
dWludDhfdCkpKSB7CisgICAgICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgPSBnZXRCaXRzPHVu
c2lnbmVkPihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNp
emVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVvZih1aW50OF90KSArIHNpemVvZih1
aW50OF90KSk7CiAgICAgICAgICAgICAgICAgaWYgKCFjaGFyYWN0ZXIpCiAgICAgICAgICAgICAg
ICAgICAgIHVybEluZGV4SXNBZnRlckVuZE9mU3RyaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICB1cmxJbmRleCsrOyAvLyBUaGlzIHJlcHJlc2VudHMgYW4gZWRnZSBpbiB0aGUgREZBLgpAQCAt
ODksMjIgKzg5LDQ3IEBAIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgREZBQnl0ZWMK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBERkFCeXRlY29k
ZUluc3RydWN0aW9uOjpCcmFuY2hUYWJsZTogeworICAgICAgICAgICAgaWYgKHVybEluZGV4SXNB
ZnRlckVuZE9mU3RyaW5nKQorICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb25zOworICAgICAg
ICAgICAgY2hhciBjaGFyYWN0ZXIgPSB1cmxbdXJsSW5kZXhdOworICAgICAgICAgICAgY2hhciBt
aW4gPSBnZXRCaXRzPGNoYXI+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1D
b3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pKTsKKyAgICAgICAgICAgIGNo
YXIgbWF4ID0gZ2V0Qml0czxjaGFyPihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9n
cmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVvZihjaGFy
KSk7CisgICAgICAgICAgICB1bnNpZ25lZCBuZXh0SW5zdHJ1Y3Rpb25JZk5vdEluVGFibGUgPSBw
cm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVvZihj
aGFyKSAqIDIgKyAobWF4IC0gbWluICsgMSkgKiBzaXplb2YodW5zaWduZWQpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAoY2hhcmFjdGVyIDwgbWluIHx8IGNoYXJhY3RlciA+IG1heCkK
KyAgICAgICAgICAgICAgICBwcm9ncmFtQ291bnRlciA9IG5leHRJbnN0cnVjdGlvbklmTm90SW5U
YWJsZTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGNoYXIgaW5kZXggPSBj
aGFyYWN0ZXIgLSBtaW47CisgICAgICAgICAgICAgICAgdW5zaWduZWQganVtcERlc3RpbmF0aW9u
ID0gZ2V0Qml0czx1bnNpZ25lZD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3Jh
bUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBzaXplb2YoY2hhcikg
KiAyICsgaW5kZXggKiBzaXplb2YodW5zaWduZWQpKTsKKyAgICAgICAgICAgICAgICBpZiAoanVt
cERlc3RpbmF0aW9uID09IFVJTlRfTUFYKQorICAgICAgICAgICAgICAgICAgICBwcm9ncmFtQ291
bnRlciA9IG5leHRJbnN0cnVjdGlvbklmTm90SW5UYWJsZTsKKyAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgPSBqdW1wRGVzdGluYXRpb247
CisgICAgICAgICAgICAgICAgICAgIGlmICghY2hhcmFjdGVyKQorICAgICAgICAgICAgICAgICAg
ICAgICAgdXJsSW5kZXhJc0FmdGVyRW5kT2ZTdHJpbmcgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICB1cmxJbmRleCsrOyAvLyBUaGlzIHJlcHJlc2VudHMgYW4gZWRnZSBpbiB0aGUgREZBLgor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKICAgICAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpKdW1wOgogICAg
ICAgICAgICAgaWYgKCF1cmxbdXJsSW5kZXhdIHx8IHVybEluZGV4SXNBZnRlckVuZE9mU3RyaW5n
KQogICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb25zOwogCi0gICAgICAgICAgICBwcm9ncmFt
Q291bnRlciA9IGdldEJpdHM8dW5zaWduZWQ+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgs
IHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSk7CisgICAgICAgICAgICBwcm9n
cmFtQ291bnRlciA9IGdldEJpdHM8dW5zaWduZWQ+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5n
dGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pKTsKICAg
ICAgICAgICAgIHVybEluZGV4Kys7IC8vIFRoaXMgcmVwcmVzZW50cyBhbiBlZGdlIGluIHRoZSBE
RkEuCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb246OkFwcGVuZEFjdGlvbjoKLSAgICAgICAgICAgIGFjdGlvbnMuYWRkKHN0YXRpY19jYXN0
PHVpbnQ2NF90PihnZXRCaXRzPHVuc2lnbmVkPihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3Ro
LCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZSkpKSk7CisgICAgICAgICAgICBh
Y3Rpb25zLmFkZChzdGF0aWNfY2FzdDx1aW50NjRfdD4oZ2V0Qml0czx1bnNpZ25lZD4obV9ieXRl
Y29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNv
ZGVJbnN0cnVjdGlvbikpKSk7CiAgICAgICAgICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0cnVj
dGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlv
bik7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1
Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbjoKLSAgICAgICAgICAgIGlmIChmbGFncyAm
IGdldEJpdHM8dWludDE2X3Q+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1D
b3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSkpCi0gICAgICAgICAgICAgICAgYWN0aW9ucy5h
ZGQoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGdldEJpdHM8dW5zaWduZWQ+KG1fYnl0ZWNvZGUsIG1f
Ynl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSArIHNp
emVvZih1aW50MTZfdCkpKSk7CisgICAgICAgICAgICBpZiAoZmxhZ3MgJiBnZXRCaXRzPHVpbnQx
Nl90PihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVv
ZihERkFCeXRlY29kZUluc3RydWN0aW9uKSkpCisgICAgICAgICAgICAgICAgYWN0aW9ucy5hZGQo
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KGdldEJpdHM8dW5zaWduZWQ+KG1fYnl0ZWNvZGUsIG1fYnl0
ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b24pICsgc2l6ZW9mKHVpbnQxNl90KSkpKTsKICAgICAgICAgICAgIHByb2dyYW1Db3VudGVyICs9
IGluc3RydWN0aW9uU2l6ZVdpdGhBcmd1bWVudHMoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6VGVz
dEZsYWdzQW5kQXBwZW5kQWN0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250011</attachid>
            <date>2015-04-02 14:58:34 -0700</date>
            <delta_ts>2015-04-02 14:59:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142514-20150402145749.patch</filename>
            <type>text/plain</type>
            <size>7594</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDE1LTA0LTAyICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50
IGp1bXAgdGFibGVzIGluIERGQSBjb21waWxlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjUxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGUuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjppbnN0cnVjdGlvblNpemVXaXRo
QXJndW1lbnRzKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBp
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29k
ZUNvbXBpbGVyOjplbWl0QnJhbmNoVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVOb2RlVHJhbnNpdGlvbnMpOgor
ICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuaDoKKyAgICAg
ICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVyOjpp
bnRlcnByZXQpOgorCiAyMDE1LTA0LTAyICBSb2dlciBGb25nICA8cm9nZXJfZm9uZ0BhcHBsZS5j
b20+CiAKICAgICAgICAgU2hvdyBhdWRpbyBtZWRpYSBjb250cm9scyBvbiBPU1guCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlLmgJKHJldmlz
aW9uIDE4MjIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVj
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDEyIEBAIGVudW0gY2xhc3MgREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbiA6IHVpbnQKICAgICAvLyBBcHBlbmRBY3Rpb24gaGFzIG9uZSBhcmd1
bWVudDoKICAgICAvLyBUaGUgYWN0aW9uIHRvIGFwcGVuZCAoNCBieXRlcykuCiAgICAgQXBwZW5k
QWN0aW9uLAorCisgICAgLy8gQnJhbmNoVGFibGUgaGFzIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFy
Z3VtZW50czoKKyAgICAvLyBUaGUgbWluaW11bSB2YWx1ZSBpbiB0aGUgYnJhbmNoIHRhYmxlICgx
IGJ5dGUpLAorICAgIC8vIFRoZSBtYXhpbXVtIHZhbHVlIGluIHRoZSBicmFuY2ggdGFibGUgKDEg
Ynl0ZSksCisgICAgLy8gVGhlIGJyYW5jaCB0YWJsZSAoNCBieXRlcyBwZXIgYnJhbmNoKQorICAg
IEJyYW5jaFRhYmxlLAogICAgIAogICAgIC8vIFRlc3RGbGFnc0FuZEFwcGVuZEFjdGlvbiBoYXMg
dHdvIGFyZ3VtZW50czoKICAgICAvLyBUaGUgZmxhZ3MgdG8gY2hlY2sgYmVmb3JlIGFwcGVuZGlu
ZyAoMiBieXRlcyksCkBAIC04Myw2ICs4OSw4IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGluc3Ry
dWN0aW9uU2l6ZVdpdGgKICAgICAgICAgcmV0dXJuIHNpemVvZihERkFCeXRlY29kZUluc3RydWN0
aW9uKTsKICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246Okp1bXA6CiAgICAgICAgIHJl
dHVybiBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBzaXplb2YodW5zaWduZWQpOwor
ICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QnJhbmNoVGFibGU6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogfQogICAgIApJbmRleDogU291cmNl
L1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21w
aWxlci5jcHAJKHJldmlzaW9uIDE4MjIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw2ICs4
OCw0NSBAQCB2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRDaGVja1ZhbHVlCiAgICAgYXBw
ZW5kPHVuc2lnbmVkPihtX2J5dGVjb2RlLCAwKTsgLy8gVGhpcyB2YWx1ZSB3aWxsIGJlIHNldCB3
aGVuIGxpbmtpbmcuCiB9CiAKK3ZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6ZW1pdEJyYW5jaFRh
YmxlKGNvbnN0IFZlY3RvcjxSYW5nZT4mIHJhbmdlcykKK3sKKyAgICBhcHBlbmQ8REZBQnl0ZWNv
ZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZSwgREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QnJhbmNo
VGFibGUpOworICAgIAorICAgIC8vIEZpbmQgYnJhbmNoIHRhYmxlIHJhbmdlLgorICAgIHVpbnQ4
X3QgbWluVmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ4X3Q+OjptYXgoKTsKKyAgICB1
aW50OF90IG1heFZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50OF90Pjo6bWluKCk7Cisg
ICAgZm9yIChjb25zdCBhdXRvJiByYW5nZSA6IHJhbmdlcykgeworICAgICAgICBtaW5WYWx1ZSA9
IHN0ZDo6bWluKHJhbmdlLm1pbiwgbWluVmFsdWUpOworICAgICAgICBtYXhWYWx1ZSA9IHN0ZDo6
bWF4KHJhbmdlLm1heCwgbWF4VmFsdWUpOworICAgIH0KKyAgICBhcHBlbmQ8dWludDhfdD4obV9i
eXRlY29kZSwgbWluVmFsdWUpOworICAgIGFwcGVuZDx1aW50OF90PihtX2J5dGVjb2RlLCBtYXhW
YWx1ZSk7CisgICAgCisgICAgLy8gV3JpdGUgYnJhbmNoIHRhYmxlLgorICAgIFJFTEVBU0VfQVNT
RVJUKG1heFZhbHVlIDwgMTI4KTsKKyAgICB1bnNpZ25lZCBkZXN0aW5hdGlvbkluZGljZXNbMTI4
XTsKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IG1pblZhbHVlOyBpIDw9IG1heFZhbHVlOyArK2kpCisg
ICAgICAgIGRlc3RpbmF0aW9uSW5kaWNlc1tpXSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHJhbmdlIDogcmFuZ2VzKSB7CisgICAg
ICAgIGZvciAodWludDhfdCBpID0gcmFuZ2UubWluOyBpIDw9IHJhbmdlLm1heDsgKytpKSB7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoZGVzdGluYXRpb25JbmRpY2Vz
W2ldID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSwgIlJhbmdlcyBzaG91
bGQgbm90IG92ZXJsYXAuIik7CisgICAgICAgICAgICBkZXN0aW5hdGlvbkluZGljZXNbaV0gPSBy
YW5nZS5kZXN0aW5hdGlvbjsKKyAgICAgICAgICAgIGlmICghcmFuZ2UuY2FzZVNlbnNpdGl2ZSkK
KyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkluZGljZXNbV1RGOjp0b0FTQ0lJVXBwZXIoaSld
ID0gcmFuZ2UuZGVzdGluYXRpb247CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gUHV0
IGJyYW5jaCB0YWJsZSBpbnRvIGJ5dGVjb2RlLgorICAgIGZvciAodWludDhfdCBpID0gbWluVmFs
dWU7IGkgPD0gbWF4VmFsdWU7IGkrKykgeworICAgICAgICBpZiAoZGVzdGluYXRpb25JbmRpY2Vz
W2ldID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKKyAgICAgICAgICAg
IGFwcGVuZDx1bnNpZ25lZD4obV9ieXRlY29kZSwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpKTsgLy8gVGVsbCBpbnRlcnByZXRlciB0aGlzIHZhbHVlIGlzIG5vdCBpbiB0aGUg
YnJhbmNoIHRhYmxlLgorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fbGlua1JlY29yZHMu
YXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG1fYnl0ZWNvZGUuc2l6ZSgpLCBkZXN0aW5hdGlvbkluZGlj
ZXNbaV0pKTsKKyAgICAgICAgICAgIGFwcGVuZDx1bnNpZ25lZD4obV9ieXRlY29kZSwgMCk7IC8v
IFRoaXMgdmFsdWUgd2lsbCBiZSBzZXQgd2hlbiBsaW5raW5nLgorICAgICAgICB9CisgICAgfQor
fQorCiB2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRUZXJtaW5hdGUoKQogewogICAgIGFw
cGVuZDxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlLCBERkFCeXRlY29kZUluc3Ry
dWN0aW9uOjpUZXJtaW5hdGUpOwpAQCAtMTczLDggKzIxMiwxMyBAQCB2b2lkIERGQUJ5dGVjb2Rl
Q29tcGlsZXI6OmNvbXBpbGVOb2RlVHJhCiAgICAgICAgIHJhbmdlcy5hcHBlbmQoUmFuZ2UocmFu
Z2VNaW4sIDEyNywgZGVzdGluYXRpb25zW3JhbmdlTWluXSwgdHJ1ZSkpOwogICAgIH0KIAotICAg
IGZvciAoY29uc3QgYXV0byYgcmFuZ2UgOiByYW5nZXMpCi0gICAgICAgIGNvbXBpbGVDaGVja0Zv
clJhbmdlKHJhbmdlKTsKKyAgICBpZiAocmFuZ2VzLnNpemUoKSA+IDMpCisgICAgICAgIGVtaXRC
cmFuY2hUYWJsZShyYW5nZXMpOworICAgIGVsc2UgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8m
IHJhbmdlIDogcmFuZ2VzKQorICAgICAgICAgICAgY29tcGlsZUNoZWNrRm9yUmFuZ2UocmFuZ2Up
OworICAgIH0KKwogICAgIGlmIChub2RlLmhhc0ZhbGxiYWNrVHJhbnNpdGlvbikKICAgICAgICAg
ZW1pdEp1bXAobm9kZS5mYWxsYmFja1RyYW5zaXRpb24pOwogICAgIGVsc2UKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBp
bGVyLmgJKHJldmlzaW9uIDE4MjIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgZW1pdENoZWNrVmFsdWUodWludDhfdCB2YWx1ZSwgdW5zaWdu
ZWQgZGVzdGluYXRpb25Ob2RlSW5kZXgsIGJvb2wgY2FzZVNlbnNpdGl2ZSk7CiAgICAgdm9pZCBl
bWl0Q2hlY2tWYWx1ZVJhbmdlKHVpbnQ4X3QgbG93VmFsdWUsIHVpbnQ4X3QgaGlnaFZhbHVlLCB1
bnNpZ25lZCBkZXN0aW5hdGlvbk5vZGVJbmRleCwgYm9vbCBjYXNlU2Vuc2l0aXZlKTsKICAgICB2
b2lkIGVtaXRUZXJtaW5hdGUoKTsKKyAgICB2b2lkIGVtaXRCcmFuY2hUYWJsZShjb25zdCBWZWN0
b3I8UmFuZ2U+Jik7CiAKICAgICBWZWN0b3I8REZBQnl0ZWNvZGU+JiBtX2J5dGVjb2RlOwogICAg
IGNvbnN0IERGQSYgbV9kZmE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcAkocmV2aXNpb24g
MTgyMjM5KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJ
bnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw2ICsxODUsMzEgQEAgREZBQnl0
ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBERkFCeXRlYwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBjYXNlIERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b246OkJyYW5jaFRhYmxlOiB7CisgICAgICAgICAgICAgICAgaWYgKHVybEluZGV4SXNBZnRlckVu
ZE9mU3RyaW5nKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9uczsKKyAgICAgICAg
ICAgICAgICBjaGFyIGNoYXJhY3RlciA9IHVybFt1cmxJbmRleF07CisgICAgICAgICAgICAgICAg
Y2hhciBtaW4gPSBnZXRCaXRzPGNoYXI+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHBy
b2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb24pKTsKKyAgICAgICAg
ICAgICAgICBjaGFyIG1heCA9IGdldEJpdHM8Y2hhcj4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxl
bmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGVJbnN0cnVjdGlvbikgKyBz
aXplb2YoY2hhcikpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG5leHRJbnN0cnVjdGlvbklm
Tm90SW5UYWJsZSA9IHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rp
b24pICsgc2l6ZW9mKGNoYXIpICogMiArIChtYXggLSBtaW4gKyAxKSAqIHNpemVvZih1bnNpZ25l
ZCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGNoYXJhY3RlciA8IG1p
biB8fCBjaGFyYWN0ZXIgPiBtYXgpCisgICAgICAgICAgICAgICAgICAgIHByb2dyYW1Db3VudGVy
ID0gbmV4dEluc3RydWN0aW9uSWZOb3RJblRhYmxlOworICAgICAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBjaGFyIGluZGV4ID0gY2hhcmFjdGVyIC0gbWluOworICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBqdW1wRGVzdGluYXRpb24gPSBnZXRCaXRzPHVuc2lnbmVk
PihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihE
RkFCeXRlY29kZUluc3RydWN0aW9uKSArIHNpemVvZihjaGFyKSAqIDIgKyBpbmRleCAqIHNpemVv
Zih1bnNpZ25lZCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoanVtcERlc3RpbmF0aW9uID09
IFVJTlRfTUFYKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgPSBuZXh0
SW5zdHJ1Y3Rpb25JZk5vdEluVGFibGU7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgPSBqdW1wRGVzdGluYXRpb247Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNoYXJhY3RlcikKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1cmxJbmRleElzQWZ0ZXJFbmRPZlN0cmluZyA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICB1cmxJbmRleCsrOyAvLyBUaGlzIHJlcHJlc2VudHMgYW4gZWRnZSBpbiB0
aGUgREZBLgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjYXNlIERGQUJ5
dGVjb2RlSW5zdHJ1Y3Rpb246Okp1bXA6CiAgICAgICAgICAgICAgICAgaWYgKCF1cmxbdXJsSW5k
ZXhdIHx8IHVybEluZGV4SXNBZnRlckVuZE9mU3RyaW5nKQogICAgICAgICAgICAgICAgICAgICBn
b3RvIG5leHRERkE7Cg==
</data>
<flag name="review"
          id="274848"
          type_id="1"
          status="-"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>