<?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>133011</bug_id>
          
          <creation_ts>2014-05-16 14:35:35 -0700</creation_ts>
          <short_desc>JSArray::shiftCountWith* could be more efficient</short_desc>
          <delta_ts>2014-05-20 11:08:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1009851</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-05-16 14:35:35 -0700</bug_when>
    <thetext>Our current implementations of shiftCountWithAnyIndexingType and shiftCountWithArrayStorage are scared of the presence of any holes in the array. We can mitigate this somewhat by enabling them to correctly handle holes, thus avoiding the slowest of slow paths in most cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009853</commentid>
    <comment_count>1</comment_count>
      <attachid>231592</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-05-16 14:37:07 -0700</bug_when>
    <thetext>Created attachment 231592
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009864</commentid>
    <comment_count>2</comment_count>
      <attachid>231592</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-05-16 14:58:59 -0700</bug_when>
    <thetext>Comment on attachment 231592
Patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:10
&gt; +        them to correctly handle holes, thus avoiding the slowest of slow paths in most cases.

What is the speedup?

Do we need a js/regress test?

&gt; Source/JavaScriptCore/runtime/JSArray.cpp:680
&gt; +        || inSparseIndexingMode() 
&gt; +        || shouldUseSlowPut(indexingType())) {

I would move these checks into canUseFastShift, or rename canUseFastShift to something like mightInterceptIndexedAccess.

&gt; Source/JavaScriptCore/runtime/JSArray.cpp:1700
&gt; +bool JSArray::canUseFastShift(VM&amp; vm) const

Alternatively, maybe this function should go next to Structure::anyObjectInChainMayInterceptIndexedAccesses in Structure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009865</commentid>
    <comment_count>3</comment_count>
      <attachid>231592</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-16 15:00:48 -0700</bug_when>
    <thetext>Comment on attachment 231592
Patch

r=me too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009902</commentid>
    <comment_count>4</comment_count>
      <attachid>231609</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-05-16 18:29:02 -0700</bug_when>
    <thetext>Created attachment 231609
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009903</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-05-16 18:29:38 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Created an attachment (id=231609) [details]
&gt; Patch

Reuploaded with new test and refactored JSArray::canUseFastShift into Structure::holesRequireSpecialBehavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009904</commentid>
    <comment_count>6</comment_count>
      <attachid>231609</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-05-16 18:32:53 -0700</bug_when>
    <thetext>Comment on attachment 231609
Patch

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

&gt; Source/JavaScriptCore/runtime/JSArray.cpp:678
&gt; +    if ((oldLength != storage-&gt;m_numValuesInVector &amp;&amp; this-&gt;structure(vm)-&gt;holesRequireSpecialBehavior(vm)) 

Use storage-&gt;hasHoles()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009912</commentid>
    <comment_count>7</comment_count>
      <attachid>231611</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-05-16 18:43:51 -0700</bug_when>
    <thetext>Created attachment 231611
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009919</commentid>
    <comment_count>8</comment_count>
      <attachid>231611</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-05-16 19:09:49 -0700</bug_when>
    <thetext>Comment on attachment 231611
Patch

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

&gt; Source/JavaScriptCore/runtime/JSArray.cpp:789
&gt; +        if (this-&gt;structure(vm)-&gt;holesRequireSpecialBehavior(vm)) {

Are you missing a ! here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010320</commentid>
    <comment_count>9</comment_count>
      <attachid>231729</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-05-19 15:51:15 -0700</bug_when>
    <thetext>Created attachment 231729
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010321</commentid>
    <comment_count>10</comment_count>
      <attachid>231729</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-05-19 15:52:41 -0700</bug_when>
    <thetext>Comment on attachment 231729
Patch

Forgot to make all the changes for doubles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010323</commentid>
    <comment_count>11</comment_count>
      <attachid>231730</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-05-19 15:57:57 -0700</bug_when>
    <thetext>Created attachment 231730
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010325</commentid>
    <comment_count>12</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-05-19 15:59:29 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Created an attachment (id=231730) [details]
&gt; Patch

Found some bugs, added a bunch of tests for those particular bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010396</commentid>
    <comment_count>13</comment_count>
      <attachid>231730</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-05-19 19:28:25 -0700</bug_when>
    <thetext>Comment on attachment 231730
Patch

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

r=me

&gt; Source/JavaScriptCore/runtime/Structure.cpp:390
&gt; +bool Structure::holesRequireSpecialBehavior(VM&amp; vm) const

Maybe we can be more specific and call this something like &quot;holesMustForwardToPrototype&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010570</commentid>
    <comment_count>14</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-05-20 11:08:21 -0700</bug_when>
    <thetext>Committed r169121: &lt;http://trac.webkit.org/changeset/169121&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231592</attachid>
            <date>2014-05-16 14:37:07 -0700</date>
            <delta_ts>2014-05-16 18:29:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133011-20140516143514.patch</filename>
            <type>text/plain</type>
            <size>11282</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY4OTc5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBA
CisyMDE0LTA1LTE2ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgSlNBcnJheTo6c2hpZnRDb3VudFdpdGgqIGNvdWxkIGJlIG1vcmUgZWZmaWNpZW50
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMwMTEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPdXIgY3Vy
cmVudCBpbXBsZW1lbnRhdGlvbnMgb2Ygc2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUgYW5k
IHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlIAorICAgICAgICBhcmUgc2NhcmVkIG9mIHRoZSBw
cmVzZW5jZSBvZiBhbnkgaG9sZXMgaW4gdGhlIGFycmF5LiBXZSBjYW4gbWl0aWdhdGUgdGhpcyBz
b21ld2hhdCBieSBlbmFibGluZyAKKyAgICAgICAgdGhlbSB0byBjb3JyZWN0bHkgaGFuZGxlIGhv
bGVzLCB0aHVzIGF2b2lkaW5nIHRoZSBzbG93ZXN0IG9mIHNsb3cgcGF0aHMgaW4gbW9zdCBjYXNl
cy4KKworICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJy
YXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
c2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpj
YW5Vc2VGYXN0U2hpZnQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAo
SlNDOjpKU0FycmF5OjpzaGlmdENvdW50Rm9yU2hpZnQpOgorCiAyMDE0LTA1LTE1ICBNYXJrIEhh
aG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgSlNET01XaW5kb3cg
c2hvdWxkIG5vdCBjbGFpbSBIYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAxNjg5MTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjY4LDE1ICs2NjgsMTggQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYQogICAgIH0KIH0KIAotYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFycmF5U3Rv
cmFnZSh1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCwgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlKQorYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShWTSYgdm0s
IHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50LCBBcnJheVN0b3JhZ2UqIHN0b3Jh
Z2UpCiB7CiAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAgICAg
UkVMRUFTRV9BU1NFUlQoY291bnQgPD0gb2xkTGVuZ3RoKTsKICAgICAKICAgICAvLyBJZiB0aGUg
YXJyYXkgY29udGFpbnMgaG9sZXMgb3IgaXMgb3RoZXJ3aXNlIGluIGFuIGFibm9ybWFsIHN0YXRl
LAogICAgIC8vIHVzZSB0aGUgZ2VuZXJpYyBhbGdvcml0aG0gaW4gQXJyYXlQcm90b3R5cGUuCi0g
ICAgaWYgKG9sZExlbmd0aCAhPSBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yIHx8IGluU3Bh
cnNlSW5kZXhpbmdNb2RlKCkgfHwgc2hvdWxkVXNlU2xvd1B1dChpbmRleGluZ1R5cGUoKSkpCisg
ICAgaWYgKChvbGRMZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciAmJiAhY2Fu
VXNlRmFzdFNoaWZ0KHZtKSkgCisgICAgICAgIHx8IGluU3BhcnNlSW5kZXhpbmdNb2RlKCkgCisg
ICAgICAgIHx8IHNob3VsZFVzZVNsb3dQdXQoaW5kZXhpbmdUeXBlKCkpKSB7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBpZiAoIW9sZExlbmd0aCkKICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC03MTAsMTAgKzcxMywxNSBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRo
QXJyYXlTdG9yYWdlCiAgICAgICAgIC8vIGFmdGVyIHRoZSBzaGlmdCByZWdpb24sIHNvIHdlIG1v
dmUgdGhlIGVsZW1lbnRzIGJlZm9yZSB0byB0aGUgcmlnaHQuCiAgICAgICAgIGlmIChudW1FbGVt
ZW50c0JlZm9yZVNoaWZ0UmVnaW9uKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb3Vu
dCArIHN0YXJ0SW5kZXggPD0gdmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgICAgIG1lbW1vdmUoCi0g
ICAgICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3IgKyBjb3VudCwKLSAgICAgICAgICAgICAg
ICBzdG9yYWdlLT5tX3ZlY3RvciwKLSAgICAgICAgICAgICAgICBzaXplb2YoSlNWYWx1ZSkgKiBz
dGFydEluZGV4KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0SW5kZXg7IGkt
LSA+IDA7KSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBzb3VyY2UgPSBzdG9yYWdlLT5tX3Zl
Y3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGRlc3QgPSBzdG9yYWdlLT5t
X3ZlY3Rvcltjb3VudCArIGldLmdldCgpOworICAgICAgICAgICAgICAgIC8vIEFueSB0aW1lIHdl
IG92ZXJ3cml0ZSBhIGhvbGUgd2Uga25vdyB3ZSBvdmVyY291bnRlZCB0aGUgbnVtYmVyIG9mIHZh
bHVlcyB3ZSByZW1vdmVkIAorICAgICAgICAgICAgICAgIC8vIHdoZW4gd2Ugc3VidHJhY3RlZCBj
b3VudCBmcm9tIG1fbnVtVmFsdWVzSW5WZWN0b3IgYWJvdmUuCisgICAgICAgICAgICAgICAgaWYg
KCFkZXN0KQorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
Kys7CisgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbY291bnQgKyBpXS5zZXRXaXRo
b3V0V3JpdGVCYXJyaWVyKHNvdXJjZSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
ICAgLy8gQWRqdXN0IHRoZSBCdXR0ZXJmbHkgYW5kIHRoZSBpbmRleCBiaWFzLiBXZSBvbmx5IG5l
ZWQgdG8gZG8gdGhpcyBoZXJlIGJlY2F1c2Ugd2UncmUgY2hhbmdpbmcKICAgICAgICAgLy8gdGhl
IHN0YXJ0IG9mIHRoZSBCdXR0ZXJmbHksIHdoaWNoIG5lZWRzIHRvIHBvaW50IGF0IHRoZSBmaXJz
dCBpbmRleGVkIHByb3BlcnR5IGluIHRoZSB1c2VkCkBAIC03MjgsMTAgKzczNiwxNSBAQCBib29s
IEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlCiAgICAgfSBlbHNlIHsKICAgICAg
ICAgLy8gVGhlIG51bWJlciBvZiBlbGVtZW50cyBiZWZvcmUgdGhlIHNoaWZ0IHJlZ2lvbiBpcyBn
cmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG51bWJlciAKICAgICAgICAgLy8gb2YgZWxlbWVu
dHMgYWZ0ZXIgdGhlIHNoaWZ0IHJlZ2lvbiwgc28gd2UgbW92ZSB0aGUgZWxlbWVudHMgYWZ0ZXIg
dGhlIHNoaWZ0IHJlZ2lvbiB0byB0aGUgbGVmdC4KLSAgICAgICAgbWVtbW92ZSgKLSAgICAgICAg
ICAgIHN0b3JhZ2UtPm1fdmVjdG9yICsgc3RhcnRJbmRleCwKLSAgICAgICAgICAgIHN0b3JhZ2Ut
Pm1fdmVjdG9yICsgZmlyc3RJbmRleEFmdGVyU2hpZnRSZWdpb24sCi0gICAgICAgICAgICBzaXpl
b2YoSlNWYWx1ZSkgKiBudW1FbGVtZW50c0FmdGVyU2hpZnRSZWdpb24pOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRWxlbWVudHNBZnRlclNoaWZ0UmVnaW9uOyArK2kpIHsK
KyAgICAgICAgICAgIEpTVmFsdWUgc291cmNlID0gc3RvcmFnZS0+bV92ZWN0b3JbZmlyc3RJbmRl
eEFmdGVyU2hpZnRSZWdpb24gKyBpXS5nZXQoKTsKKyAgICAgICAgICAgIEpTVmFsdWUgZGVzdCA9
IHN0b3JhZ2UtPm1fdmVjdG9yW3N0YXJ0SW5kZXggKyBpXS5nZXQoKTsKKyAgICAgICAgICAgIC8v
IEFueSB0aW1lIHdlIG92ZXJ3cml0ZSBhIGhvbGUgd2Uga25vdyB3ZSBvdmVyY291bnRlZCB0aGUg
bnVtYmVyIG9mIHZhbHVlcyB3ZSByZW1vdmVkIAorICAgICAgICAgICAgLy8gd2hlbiB3ZSBzdWJ0
cmFjdGVkIGNvdW50IGZyb20gbV9udW1WYWx1ZXNJblZlY3RvciBhYm92ZS4KKyAgICAgICAgICAg
IGlmICghZGVzdCkKKyAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9y
Kys7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltzdGFydEluZGV4ICsgaV0uc2V0V2l0
aG91dFdyaXRlQmFycmllcihzb3VyY2UpOworICAgICAgICB9CiAgICAgICAgIC8vIENsZWFyIHRo
ZSBzbG90cyBvZiB0aGUgZWxlbWVudHMgd2UganVzdCBtb3ZlZC4KICAgICAgICAgdW5zaWduZWQg
c3RhcnRPZkVtcHR5VmVjdG9yVGFpbCA9IHVzZWRWZWN0b3JMZW5ndGggLSBjb3VudDsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRPZkVtcHR5VmVjdG9yVGFpbDsgaSA8IHVzZWRWZWN0
b3JMZW5ndGg7ICsraSkKQEAgLTc2NSwyNyArNzc4LDI2IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRD
b3VudFdpdGhBbnlJbmRleGluZ1QKICAgICAgICAgLy8gV2UgbWF5IGhhdmUgdG8gd2FsayB0aGUg
ZW50aXJlIGFycmF5IHRvIGRvIHRoZSBzaGlmdC4gV2UncmUgd2lsbGluZyB0byBkbwogICAgICAg
ICAvLyBzbyBvbmx5IGlmIGl0J3Mgbm90IGhvcnJpYmx5IHNsb3cuCiAgICAgICAgIGlmIChvbGRM
ZW5ndGggLSAoc3RhcnRJbmRleCArIGNvdW50KSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKQot
ICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5kZXgs
IGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkpOworICAgICAgICAgICAgcmV0
dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCksIHN0YXJ0SW5kZXgsIGNv
dW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkpOwogCiAgICAgICAgIC8vIFN0b3Jp
bmcgdG8gYSBob2xlIGlzIGZpbmUgc2luY2Ugd2UncmUgc3RpbGwgaGF2aW5nIGEgZ29vZCB0aW1l
LiBCdXQgcmVhZGluZyBmcm9tIGEgaG9sZSAKICAgICAgICAgLy8gaXMgdG90YWxseSBub3QgZmlu
ZSwgc2luY2Ugd2UgbWlnaHQgaGF2ZSB0byByZWFkIGZyb20gdGhlIHByb3RvIGNoYWluLgogICAg
ICAgICAvLyBXZSBoYXZlIHRvIGNoZWNrIGZvciBob2xlcyBiZWZvcmUgd2Ugc3RhcnQgbW92aW5n
IHRoaW5ncyBhcm91bmQgc28gdGhhdCB3ZSBkb24ndCBnZXQgaGFsZndheSAKICAgICAgICAgLy8g
dGhyb3VnaCBzaGlmdGluZyBhbmQgdGhlbiByZWFsaXplIHdlIHNob3VsZCBoYXZlIGJlZW4gaW4g
QXJyYXlTdG9yYWdlIG1vZGUuCiAgICAgICAgIHVuc2lnbmVkIGVuZCA9IG9sZExlbmd0aCAtIGNv
dW50OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBpIDwgZW5kOyArK2kp
IHsKLSAgICAgICAgICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaSAr
IGNvdW50XS5nZXQoKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghdikpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNvdW50
LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkpOworICAgICAgICBpZiAoY2FuVXNlRmFz
dFNoaWZ0KGV4ZWMtPnZtKCkpKSB7CisgICAgICAgICAgICBtZW1tb3ZlKG1fYnV0dGVyZmx5LT5j
b250aWd1b3VzKCkuZGF0YSgpICsgc3RhcnRJbmRleCwgCisgICAgICAgICAgICAgICAgbV9idXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCkgKyBzdGFydEluZGV4ICsgY291bnQsIAorICAgICAg
ICAgICAgICAgIHNpemVvZihKU1ZhbHVlKSAqIChlbmQgLSBzdGFydEluZGV4KSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBpIDwg
ZW5kOyArK2kpIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+Y29u
dGlndW91cygpW2kgKyBjb3VudF0uZ2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KCF2KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9y
YWdlKGV4ZWMtPnZtKCksIGksIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkp
OworICAgICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0V2l0aG91
dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmQ7ICsraSkgewotICAgICAgICAgICAg
SlNWYWx1ZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpICsgY291bnRdLmdldCgpOwot
ICAgICAgICAgICAgQVNTRVJUKHYpOwotICAgICAgICAgICAgLy8gTm8gbmVlZCBmb3IgYSBiYXJy
aWVyIHNpbmNlIHdlJ3JlIGp1c3QgbW92aW5nIGRhdGEgYXJvdW5kIGluIHRoZSBzYW1lIHZlY3Rv
ci4KLSAgICAgICAgICAgIC8vIFRoaXMgaXMgaW4gbGluZSB3aXRoIG91ciBzdGFuZGluZyBhc3N1
bXB0aW9uIHRoYXQgd2Ugd29uJ3QgaGF2ZSBhIGRlbGV0aW9uCi0gICAgICAgICAgICAvLyBiYXJy
aWVyLgotICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0
V3JpdGVCYXJyaWVyKHYpOwotICAgICAgICB9CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVu
ZDsgaSA8IG9sZExlbmd0aDsgKytpKQogICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKVtpXS5jbGVhcigpOwogICAgICAgICAKQEAgLTgwMCw3ICs4MTIsNyBAQCBib29sIEpTQXJy
YXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUCiAgICAgICAgIC8vIFdlIG1heSBoYXZlIHRv
IHdhbGsgdGhlIGVudGlyZSBhcnJheSB0byBkbyB0aGUgc2hpZnQuIFdlJ3JlIHdpbGxpbmcgdG8g
ZG8KICAgICAgICAgLy8gc28gb25seSBpZiBpdCdzIG5vdCBob3JyaWJseSBzbG93LgogICAgICAg
ICBpZiAob2xkTGVuZ3RoIC0gKHN0YXJ0SW5kZXggKyBjb3VudCkgPj0gTUlOX1NQQVJTRV9BUlJB
WV9JTkRFWCkKLSAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShz
dGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkpKTsKKyAgICAg
ICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLT52bSgpLCBzdGFy
dEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkpKTsKIAogICAgICAg
ICAvLyBTdG9yaW5nIHRvIGEgaG9sZSBpcyBmaW5lIHNpbmNlIHdlJ3JlIHN0aWxsIGhhdmluZyBh
IGdvb2QgdGltZS4gQnV0IHJlYWRpbmcgZnJvbSBhIGhvbGUgCiAgICAgICAgIC8vIGlzIHRvdGFs
bHkgbm90IGZpbmUsIHNpbmNlIHdlIG1pZ2h0IGhhdmUgdG8gcmVhZCBmcm9tIHRoZSBwcm90byBj
aGFpbi4KQEAgLTgxMCwxNSArODIyLDcgQEAgYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFu
eUluZGV4aW5nVAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBpIDwgZW5k
OyArK2kpIHsKICAgICAgICAgICAgIGRvdWJsZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNE
b3VibGUoKVtpICsgY291bnRdOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKHYgIT0gdikpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5k
ZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkpOwotICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRJbmRleDsgaSA8IGVu
ZDsgKytpKSB7Ci0gICAgICAgICAgICBkb3VibGUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3Vz
RG91YmxlKClbaSArIGNvdW50XTsKLSAgICAgICAgICAgIEFTU0VSVCh2ID09IHYpOwotICAgICAg
ICAgICAgLy8gTm8gbmVlZCBmb3IgYSBiYXJyaWVyIHNpbmNlIHdlJ3JlIGp1c3QgbW92aW5nIGRh
dGEgYXJvdW5kIGluIHRoZSBzYW1lIHZlY3Rvci4KLSAgICAgICAgICAgIC8vIFRoaXMgaXMgaW4g
bGluZSB3aXRoIG91ciBzdGFuZGluZyBhc3N1bXB0aW9uIHRoYXQgd2Ugd29uJ3QgaGF2ZSBhIGRl
bGV0aW9uCi0gICAgICAgICAgICAvLyBiYXJyaWVyLgorICAgICAgICAgICAgICAgIHJldHVybiBz
aGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLT52bSgpLCBpLCBjb3VudCwgZW5zdXJlQXJy
YXlTdG9yYWdlKGV4ZWMtPnZtKCkpKTsKICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1
b3VzRG91YmxlKClbaV0gPSB2OwogICAgICAgICB9CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGVuZDsgaSA8IG9sZExlbmd0aDsgKytpKQpAQCAtODMwLDcgKzgzNCw3IEBAIGJvb2wgSlNBcnJh
eTo6c2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1QKICAgICAgICAgCiAgICAgY2FzZSBBcnJheVdp
dGhBcnJheVN0b3JhZ2U6CiAgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgot
ICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uoc3RhcnRJbmRleCwgY291
bnQsIGFycmF5U3RvcmFnZSgpKTsKKyAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlT
dG9yYWdlKGV4ZWMtPnZtKCksIHN0YXJ0SW5kZXgsIGNvdW50LCBhcnJheVN0b3JhZ2UoKSk7CiAg
ICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7CkBAIC0xNjkzLDQgKzE2OTcs
MjggQEAgdm9pZCBKU0FycmF5Ojpjb21wYWN0Rm9yU29ydGluZyh1bnNpZ25lZAogICAgICAgICBh
cnJheVN0b3JhZ2UoKS0+bV9udW1WYWx1ZXNJblZlY3RvciA9IG5ld1JlbGV2YW50TGVuZ3RoOwog
fQogCitib29sIEpTQXJyYXk6OmNhblVzZUZhc3RTaGlmdChWTSYgdm0pIGNvbnN0Cit7CisgICAg
aWYgKHRoaXMtPnN0cnVjdHVyZSh2bSktPm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXMtPnN0
cnVjdHVyZSh2bSktPnN0b3JlZFByb3RvdHlwZSgpOworICAgIGlmICghcHJvdG90eXBlLmlzT2Jq
ZWN0KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09i
amVjdChwcm90b3R5cGUpOworCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgU3RydWN0dXJl
JiBzdHJ1Y3R1cmUgPSAqb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgICAgICBpZiAoaGFzSW5k
ZXhlZFByb3BlcnRpZXMob2JqZWN0LT5pbmRleGluZ1R5cGUoKSkgfHwgc3RydWN0dXJlLm1heUlu
dGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUuc3RvcmVkUHJvdG90eXBlKCk7CisgICAgICAgIGlm
ICghcHJvdG90eXBlLmlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgb2JqZWN0ID0gYXNPYmplY3QocHJvdG90eXBlKTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZp
c2lvbiAxNjg5MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBzaGlm
dENvdW50Rm9yU2hpZnQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNp
Z25lZCBjb3VudCkKICAgICB7Ci0gICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5U3Rv
cmFnZShzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkpKTsK
KyAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCksIHN0
YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkpOwogICAgIH0K
ICAgICBib29sIHNoaWZ0Q291bnRGb3JTcGxpY2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBz
dGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKICAgICB7CkBAIC0xNDcsNiArMTQ3LDggQEAgcHJv
dGVjdGVkOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKTsKIAogcHJpdmF0ZToKKyAgICBib29sIGNhblVzZUZhc3RTaGlmdChW
TSYpIGNvbnN0OworCiAgICAgYm9vbCBpc0xlbmd0aFdyaXRhYmxlKCkKICAgICB7CiAgICAgICAg
IEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGFycmF5U3RvcmFnZU9yTnVsbCgpOwpAQCAtMTU3LDcg
KzE1OSw3IEBAIHByaXZhdGU6CiAgICAgfQogICAgICAgICAKICAgICBib29sIHNoaWZ0Q291bnRX
aXRoQW55SW5kZXhpbmdUeXBlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2ln
bmVkIGNvdW50KTsKLSAgICBib29sIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHVuc2lnbmVk
IHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50LCBBcnJheVN0b3JhZ2UqKTsKKyAgICBib29sIHNo
aWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKFZNJiwgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWdu
ZWQgY291bnQsIEFycmF5U3RvcmFnZSopOwogCiAgICAgYm9vbCB1bnNoaWZ0Q291bnRXaXRoQW55
SW5kZXhpbmdUeXBlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNv
dW50KTsKICAgICBib29sIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwg
dW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQsIEFycmF5U3RvcmFnZSopOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231609</attachid>
            <date>2014-05-16 18:29:02 -0700</date>
            <delta_ts>2014-05-16 18:43:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133011-20140516182702.patch</filename>
            <type>text/plain</type>
            <size>17967</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY4OTg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBA
CisyMDE0LTA1LTE2ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgSlNBcnJheTo6c2hpZnRDb3VudFdpdGgqIGNvdWxkIGJlIG1vcmUgZWZmaWNpZW50
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMwMTEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPdXIgY3Vy
cmVudCBpbXBsZW1lbnRhdGlvbnMgb2Ygc2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUgYW5k
IHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlIAorICAgICAgICBhcmUgc2NhcmVkIG9mIHRoZSBw
cmVzZW5jZSBvZiBhbnkgaG9sZXMgaW4gdGhlIGFycmF5LiBXZSBjYW4gbWl0aWdhdGUgdGhpcyBz
b21ld2hhdCBieSBlbmFibGluZyAKKyAgICAgICAgdGhlbSB0byBjb3JyZWN0bHkgaGFuZGxlIGhv
bGVzLCB0aHVzIGF2b2lkaW5nIHRoZSBzbG93ZXN0IG9mIHNsb3cgcGF0aHMgaW4gbW9zdCBjYXNl
cy4KKworICAgICAgICAqIHJ1bnRpbWUvQXJyYXlTdG9yYWdlLmg6CisgICAgICAgIChKU0M6OkFy
cmF5U3RvcmFnZTo6aW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6
Omxlbmd0aCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6aGFzSG9sZXMpOgorICAgICAg
ICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaDoKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFk
ZXI6OnB1YmxpY0xlbmd0aCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpmcm9tKToK
KyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpz
aGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNoaWZ0
Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hpZnRDb3VudEZvclNoaWZ0KToKKyAgICAgICAgKiBy
dW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aG9sZXNSZXF1
aXJlU3BlY2lhbEJlaGF2aW9yKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorCiAy
MDE0LTA1LTE2ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAg
IENyYXNoIGluIEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjwoSlNDOjpZYXJyOjpZYXJySklUQ29t
cGlsZU1vZGUpMD46OmdlbmVyYXRlUGF0dGVybkNoYXJhY3RlckZpeGVkKCkgZHVlIHRvIFdURjo6
Q3Jhc2hPbk92ZXJmbG93OjpvdmVyZmxvd2VkICsgOQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgJKHJldmlzaW9uIDE2ODkxOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5U3RvcmFnZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Myw5ICs1MywxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHko
KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHRoaXMpOyB9CiAgICAgSW5k
ZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZy
b20odGhpcyk7IH0KKyAgICBjb25zdCBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSBj
b25zdCB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQogICAgIAogICAgIC8v
IFdlIHN0ZWFsIHR3byBmaWVsZHMgZnJvbSB0aGUgaW5kZXhpbmcgaGVhZGVyOiB2ZWN0b3JMZW5n
dGggYW5kIGxlbmd0aC4KLSAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hl
YWRlcigpLT5wdWJsaWNMZW5ndGgoKTsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnB1YmxpY0xlbmd0aCgpOyB9CiAgICAgdm9pZCBzZXRM
ZW5ndGgodW5zaWduZWQgbGVuZ3RoKSB7IGluZGV4aW5nSGVhZGVyKCktPnNldFB1YmxpY0xlbmd0
aChsZW5ndGgpOyB9CiAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhp
bmdIZWFkZXIoKS0+dmVjdG9yTGVuZ3RoKCk7IH0KICAgICB2b2lkIHNldFZlY3Rvckxlbmd0aCh1
bnNpZ25lZCBsZW5ndGgpIHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0VmVjdG9yTGVuZ3RoKGxlbmd0
aCk7IH0KQEAgLTY3LDYgKzY4LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9udW1WYWx1ZXNJblZl
Y3RvciA9IG90aGVyLm1fbnVtVmFsdWVzSW5WZWN0b3I7CiAgICAgfQogICAgIAorICAgIGJvb2wg
aGFzSG9sZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbnVtVmFsdWVzSW5WZWN0
b3IgIT0gbGVuZ3RoKCk7CisgICAgfSAgIAorCiAgICAgYm9vbCBpblNwYXJzZU1vZGUoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIG1fc3BhcnNlTWFwICYmIG1fc3BhcnNlTWFwLT5zcGFyc2VNb2Rl
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVh
ZGVyLmgJKHJldmlzaW9uIDE2ODkxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZGV4aW5nSGVhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGlj
OgogICAgICAgICB1Lmxlbmd0aHMudmVjdG9yTGVuZ3RoID0gbGVuZ3RoOwogICAgIH0KICAgICAK
LSAgICB1aW50MzJfdCBwdWJsaWNMZW5ndGgoKSB7IHJldHVybiB1Lmxlbmd0aHMucHVibGljTGVu
Z3RoOyB9CisgICAgdWludDMyX3QgcHVibGljTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gdS5sZW5n
dGhzLnB1YmxpY0xlbmd0aDsgfQogICAgIHZvaWQgc2V0UHVibGljTGVuZ3RoKHVpbnQzMl90IGF1
eFdvcmQpIHsgdS5sZW5ndGhzLnB1YmxpY0xlbmd0aCA9IGF1eFdvcmQ7IH0KICAgICAKICAgICBB
cnJheUJ1ZmZlciogYXJyYXlCdWZmZXIoKSB7IHJldHVybiB1LnR5cGVkQXJyYXkuYnVmZmVyOyB9
CkBAIC04MCw3ICs4MCwxMiBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIEluZGV4aW5nSGVh
ZGVyKiBmcm9tKEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihhcnJheVN0b3JhZ2UpIC0gMTsK
KyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihmcm9tKGNvbnN0X2Nh
c3Q8Y29uc3QgQXJyYXlTdG9yYWdlKj4oYXJyYXlTdG9yYWdlKSkpOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgY29uc3QgSW5kZXhpbmdIZWFkZXIqIGZyb20oY29uc3QgQXJyYXlTdG9yYWdlKiBh
cnJheVN0b3JhZ2UpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBJbmRleGluZ0hlYWRlcio+KGFycmF5U3RvcmFnZSkgLSAxOwogICAgIH0KICAgICAKICAgICBz
dGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb21FbmRPZihQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlT
dG9yYWdlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJ
KHJldmlzaW9uIDE2ODkxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjgsMTUgKzY2OCwxOCBAQCB2b2lkIEpTQXJyYXk6
OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgfQogfQogCi1ib29sIEpTQXJyYXk6OnNo
aWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNv
dW50LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCitib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRo
QXJyYXlTdG9yYWdlKFZNJiB2bSwgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQs
IEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBzdG9y
YWdlLT5sZW5ndGgoKTsKICAgICBSRUxFQVNFX0FTU0VSVChjb3VudCA8PSBvbGRMZW5ndGgpOwog
ICAgIAogICAgIC8vIElmIHRoZSBhcnJheSBjb250YWlucyBob2xlcyBvciBpcyBvdGhlcndpc2Ug
aW4gYW4gYWJub3JtYWwgc3RhdGUsCiAgICAgLy8gdXNlIHRoZSBnZW5lcmljIGFsZ29yaXRobSBp
biBBcnJheVByb3RvdHlwZS4KLSAgICBpZiAob2xkTGVuZ3RoICE9IHN0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IgfHwgaW5TcGFyc2VJbmRleGluZ01vZGUoKSB8fCBzaG91bGRVc2VTbG93UHV0
KGluZGV4aW5nVHlwZSgpKSkKKyAgICBpZiAoKG9sZExlbmd0aCAhPSBzdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yICYmIHRoaXMtPnN0cnVjdHVyZSh2bSktPmhvbGVzUmVxdWlyZVNwZWNpYWxC
ZWhhdmlvcih2bSkpIAorICAgICAgICB8fCBpblNwYXJzZUluZGV4aW5nTW9kZSgpIAorICAgICAg
ICB8fCBzaG91bGRVc2VTbG93UHV0KGluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQogCiAgICAgaWYgKCFvbGRMZW5ndGgpCiAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtNzEwLDEwICs3MTMsMTUgQEAgYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFycmF5
U3RvcmFnZQogICAgICAgICAvLyBhZnRlciB0aGUgc2hpZnQgcmVnaW9uLCBzbyB3ZSBtb3ZlIHRo
ZSBlbGVtZW50cyBiZWZvcmUgdG8gdGhlIHJpZ2h0LgogICAgICAgICBpZiAobnVtRWxlbWVudHNC
ZWZvcmVTaGlmdFJlZ2lvbikgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY291bnQgKyBz
dGFydEluZGV4IDw9IHZlY3Rvckxlbmd0aCk7Ci0gICAgICAgICAgICBtZW1tb3ZlKAotICAgICAg
ICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yICsgY291bnQsCi0gICAgICAgICAgICAgICAgc3Rv
cmFnZS0+bV92ZWN0b3IsCi0gICAgICAgICAgICAgICAgc2l6ZW9mKEpTVmFsdWUpICogc3RhcnRJ
bmRleCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBpLS0gPiAw
OykgeworICAgICAgICAgICAgICAgIEpTVmFsdWUgc291cmNlID0gc3RvcmFnZS0+bV92ZWN0b3Jb
aV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBkZXN0ID0gc3RvcmFnZS0+bV92ZWN0
b3JbY291bnQgKyBpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAvLyBBbnkgdGltZSB3ZSBvdmVy
d3JpdGUgYSBob2xlIHdlIGtub3cgd2Ugb3ZlcmNvdW50ZWQgdGhlIG51bWJlciBvZiB2YWx1ZXMg
d2UgcmVtb3ZlZCAKKyAgICAgICAgICAgICAgICAvLyB3aGVuIHdlIHN1YnRyYWN0ZWQgY291bnQg
ZnJvbSBtX251bVZhbHVlc0luVmVjdG9yIGFib3ZlLgorICAgICAgICAgICAgICAgIGlmICghZGVz
dCkKKyAgICAgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOwor
ICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2NvdW50ICsgaV0uc2V0V2l0aG91dFdy
aXRlQmFycmllcihzb3VyY2UpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIC8v
IEFkanVzdCB0aGUgQnV0dGVyZmx5IGFuZCB0aGUgaW5kZXggYmlhcy4gV2Ugb25seSBuZWVkIHRv
IGRvIHRoaXMgaGVyZSBiZWNhdXNlIHdlJ3JlIGNoYW5naW5nCiAgICAgICAgIC8vIHRoZSBzdGFy
dCBvZiB0aGUgQnV0dGVyZmx5LCB3aGljaCBuZWVkcyB0byBwb2ludCBhdCB0aGUgZmlyc3QgaW5k
ZXhlZCBwcm9wZXJ0eSBpbiB0aGUgdXNlZApAQCAtNzI4LDEwICs3MzYsMTUgQEAgYm9vbCBKU0Fy
cmF5OjpzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8v
IFRoZSBudW1iZXIgb2YgZWxlbWVudHMgYmVmb3JlIHRoZSBzaGlmdCByZWdpb24gaXMgZ3JlYXRl
ciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBudW1iZXIgCiAgICAgICAgIC8vIG9mIGVsZW1lbnRzIGFm
dGVyIHRoZSBzaGlmdCByZWdpb24sIHNvIHdlIG1vdmUgdGhlIGVsZW1lbnRzIGFmdGVyIHRoZSBz
aGlmdCByZWdpb24gdG8gdGhlIGxlZnQuCi0gICAgICAgIG1lbW1vdmUoCi0gICAgICAgICAgICBz
dG9yYWdlLT5tX3ZlY3RvciArIHN0YXJ0SW5kZXgsCi0gICAgICAgICAgICBzdG9yYWdlLT5tX3Zl
Y3RvciArIGZpcnN0SW5kZXhBZnRlclNoaWZ0UmVnaW9uLAotICAgICAgICAgICAgc2l6ZW9mKEpT
VmFsdWUpICogbnVtRWxlbWVudHNBZnRlclNoaWZ0UmVnaW9uKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG51bUVsZW1lbnRzQWZ0ZXJTaGlmdFJlZ2lvbjsgKytpKSB7CisgICAg
ICAgICAgICBKU1ZhbHVlIHNvdXJjZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ZpcnN0SW5kZXhBZnRl
clNoaWZ0UmVnaW9uICsgaV0uZ2V0KCk7CisgICAgICAgICAgICBKU1ZhbHVlIGRlc3QgPSBzdG9y
YWdlLT5tX3ZlY3RvcltzdGFydEluZGV4ICsgaV0uZ2V0KCk7CisgICAgICAgICAgICAvLyBBbnkg
dGltZSB3ZSBvdmVyd3JpdGUgYSBob2xlIHdlIGtub3cgd2Ugb3ZlcmNvdW50ZWQgdGhlIG51bWJl
ciBvZiB2YWx1ZXMgd2UgcmVtb3ZlZCAKKyAgICAgICAgICAgIC8vIHdoZW4gd2Ugc3VidHJhY3Rl
ZCBjb3VudCBmcm9tIG1fbnVtVmFsdWVzSW5WZWN0b3IgYWJvdmUuCisgICAgICAgICAgICBpZiAo
IWRlc3QpCisgICAgICAgICAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOwor
ICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3Jbc3RhcnRJbmRleCArIGldLnNldFdpdGhvdXRX
cml0ZUJhcnJpZXIoc291cmNlKTsKKyAgICAgICAgfQogICAgICAgICAvLyBDbGVhciB0aGUgc2xv
dHMgb2YgdGhlIGVsZW1lbnRzIHdlIGp1c3QgbW92ZWQuCiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0
T2ZFbXB0eVZlY3RvclRhaWwgPSB1c2VkVmVjdG9yTGVuZ3RoIC0gY291bnQ7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IHN0YXJ0T2ZFbXB0eVZlY3RvclRhaWw7IGkgPCB1c2VkVmVjdG9yTGVu
Z3RoOyArK2kpCkBAIC03NDcsNiArNzYwLDcgQEAgYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0
aEFycmF5U3RvcmFnZQogCiBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdU
eXBlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQp
CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBSRUxFQVNFX0FTU0VSVChjb3VudCA+
IDApOwogICAgIAogICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsKQEAgLTc2NSwyNyArNzc5
LDI2IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1QKICAgICAgICAg
Ly8gV2UgbWF5IGhhdmUgdG8gd2FsayB0aGUgZW50aXJlIGFycmF5IHRvIGRvIHRoZSBzaGlmdC4g
V2UncmUgd2lsbGluZyB0byBkbwogICAgICAgICAvLyBzbyBvbmx5IGlmIGl0J3Mgbm90IGhvcnJp
Ymx5IHNsb3cuCiAgICAgICAgIGlmIChvbGRMZW5ndGggLSAoc3RhcnRJbmRleCArIGNvdW50KSA+
PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKQotICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRX
aXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhl
Yy0+dm0oKSkpOworICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdl
KHZtLCBzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKHZtKSk7CiAKICAgICAg
ICAgLy8gU3RvcmluZyB0byBhIGhvbGUgaXMgZmluZSBzaW5jZSB3ZSdyZSBzdGlsbCBoYXZpbmcg
YSBnb29kIHRpbWUuIEJ1dCByZWFkaW5nIGZyb20gYSBob2xlIAogICAgICAgICAvLyBpcyB0b3Rh
bGx5IG5vdCBmaW5lLCBzaW5jZSB3ZSBtaWdodCBoYXZlIHRvIHJlYWQgZnJvbSB0aGUgcHJvdG8g
Y2hhaW4uCiAgICAgICAgIC8vIFdlIGhhdmUgdG8gY2hlY2sgZm9yIGhvbGVzIGJlZm9yZSB3ZSBz
dGFydCBtb3ZpbmcgdGhpbmdzIGFyb3VuZCBzbyB0aGF0IHdlIGRvbid0IGdldCBoYWxmd2F5IAog
ICAgICAgICAvLyB0aHJvdWdoIHNoaWZ0aW5nIGFuZCB0aGVuIHJlYWxpemUgd2Ugc2hvdWxkIGhh
dmUgYmVlbiBpbiBBcnJheVN0b3JhZ2UgbW9kZS4KICAgICAgICAgdW5zaWduZWQgZW5kID0gb2xk
TGVuZ3RoIC0gY291bnQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0SW5kZXg7IGkg
PCBlbmQ7ICsraSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKVtpICsgY291bnRdLmdldCgpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKCF2KSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uoc3RhcnRJ
bmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT52bSgpKSk7CisgICAgICAgIGlm
ICh0aGlzLT5zdHJ1Y3R1cmUodm0pLT5ob2xlc1JlcXVpcmVTcGVjaWFsQmVoYXZpb3Iodm0pKSB7
CisgICAgICAgICAgICBtZW1tb3ZlKG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpICsg
c3RhcnRJbmRleCwgCisgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5k
YXRhKCkgKyBzdGFydEluZGV4ICsgY291bnQsIAorICAgICAgICAgICAgICAgIHNpemVvZihKU1Zh
bHVlKSAqIChlbmQgLSBzdGFydEluZGV4KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBpIDwgZW5kOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2kgKyBjb3VudF0u
Z2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKCF2KSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHZtLCBpLCBjb3VudCwgZW5z
dXJlQXJyYXlTdG9yYWdlKHZtKSk7CisgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRJbmRleDsgaSA8IGVuZDsg
KytpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygp
W2kgKyBjb3VudF0uZ2V0KCk7Ci0gICAgICAgICAgICBBU1NFUlQodik7Ci0gICAgICAgICAgICAv
LyBObyBuZWVkIGZvciBhIGJhcnJpZXIgc2luY2Ugd2UncmUganVzdCBtb3ZpbmcgZGF0YSBhcm91
bmQgaW4gdGhlIHNhbWUgdmVjdG9yLgotICAgICAgICAgICAgLy8gVGhpcyBpcyBpbiBsaW5lIHdp
dGggb3VyIHN0YW5kaW5nIGFzc3VtcHRpb24gdGhhdCB3ZSB3b24ndCBoYXZlIGEgZGVsZXRpb24K
LSAgICAgICAgICAgIC8vIGJhcnJpZXIuCi0gICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGln
dW91cygpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7Ci0gICAgICAgIH0KICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gZW5kOyBpIDwgb2xkTGVuZ3RoOyArK2kpCiAgICAgICAgICAgICBt
X2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7CiAgICAgICAgIApAQCAtODAwLDcg
KzgxMyw3IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1QKICAgICAg
ICAgLy8gV2UgbWF5IGhhdmUgdG8gd2FsayB0aGUgZW50aXJlIGFycmF5IHRvIGRvIHRoZSBzaGlm
dC4gV2UncmUgd2lsbGluZyB0byBkbwogICAgICAgICAvLyBzbyBvbmx5IGlmIGl0J3Mgbm90IGhv
cnJpYmx5IHNsb3cuCiAgICAgICAgIGlmIChvbGRMZW5ndGggLSAoc3RhcnRJbmRleCArIGNvdW50
KSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVYKQotICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291
bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2Uo
ZXhlYy0+dm0oKSkpOworICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9y
YWdlKHZtLCBzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKHZtKSk7CiAKICAg
ICAgICAgLy8gU3RvcmluZyB0byBhIGhvbGUgaXMgZmluZSBzaW5jZSB3ZSdyZSBzdGlsbCBoYXZp
bmcgYSBnb29kIHRpbWUuIEJ1dCByZWFkaW5nIGZyb20gYSBob2xlIAogICAgICAgICAvLyBpcyB0
b3RhbGx5IG5vdCBmaW5lLCBzaW5jZSB3ZSBtaWdodCBoYXZlIHRvIHJlYWQgZnJvbSB0aGUgcHJv
dG8gY2hhaW4uCkBAIC04MTAsMTUgKzgyMyw3IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdp
dGhBbnlJbmRleGluZ1QKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRJbmRleDsgaSA8
IGVuZDsgKytpKSB7CiAgICAgICAgICAgICBkb3VibGUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1
b3VzRG91YmxlKClbaSArIGNvdW50XTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWSh2ICE9IHYp
KQotICAgICAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShzdGFy
dEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkpKTsKLSAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0SW5kZXg7IGkg
PCBlbmQ7ICsraSkgewotICAgICAgICAgICAgZG91YmxlIHYgPSBtX2J1dHRlcmZseS0+Y29udGln
dW91c0RvdWJsZSgpW2kgKyBjb3VudF07Ci0gICAgICAgICAgICBBU1NFUlQodiA9PSB2KTsKLSAg
ICAgICAgICAgIC8vIE5vIG5lZWQgZm9yIGEgYmFycmllciBzaW5jZSB3ZSdyZSBqdXN0IG1vdmlu
ZyBkYXRhIGFyb3VuZCBpbiB0aGUgc2FtZSB2ZWN0b3IuCi0gICAgICAgICAgICAvLyBUaGlzIGlz
IGluIGxpbmUgd2l0aCBvdXIgc3RhbmRpbmcgYXNzdW1wdGlvbiB0aGF0IHdlIHdvbid0IGhhdmUg
YSBkZWxldGlvbgotICAgICAgICAgICAgLy8gYmFycmllci4KKyAgICAgICAgICAgICAgICByZXR1
cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uodm0sIGksIGNvdW50LCBlbnN1cmVBcnJheVN0
b3JhZ2Uodm0pKTsKICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClb
aV0gPSB2OwogICAgICAgICB9CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVuZDsgaSA8IG9s
ZExlbmd0aDsgKytpKQpAQCAtODMwLDcgKzgzNSw3IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3Vu
dFdpdGhBbnlJbmRleGluZ1QKICAgICAgICAgCiAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6CiAgICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICByZXR1
cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uoc3RhcnRJbmRleCwgY291bnQsIGFycmF5U3Rv
cmFnZSgpKTsKKyAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHZtLCBz
dGFydEluZGV4LCBjb3VudCwgYXJyYXlTdG9yYWdlKCkpOwogICAgICAgICAKICAgICBkZWZhdWx0
OgogICAgICAgICBDUkFTSCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuaAkocmV2aXNpb24gMTY4OTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgc2hpZnRDb3VudEZvclNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3Rh
cnRJbmRleCwgdW5zaWduZWQgY291bnQpCiAgICAgewotICAgICAgICByZXR1cm4gc2hpZnRDb3Vu
dFdpdGhBcnJheVN0b3JhZ2Uoc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShl
eGVjLT52bSgpKSk7CisgICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShl
eGVjLT52bSgpLCBzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPnZt
KCkpKTsKICAgICB9CiAgICAgYm9vbCBzaGlmdENvdW50Rm9yU3BsaWNlKEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpCiAgICAgewpAQCAtMTU3LDcg
KzE1Nyw3IEBAIHByaXZhdGU6CiAgICAgfQogICAgICAgICAKICAgICBib29sIHNoaWZ0Q291bnRX
aXRoQW55SW5kZXhpbmdUeXBlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2ln
bmVkIGNvdW50KTsKLSAgICBib29sIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHVuc2lnbmVk
IHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50LCBBcnJheVN0b3JhZ2UqKTsKKyAgICBib29sIHNo
aWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKFZNJiwgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWdu
ZWQgY291bnQsIEFycmF5U3RvcmFnZSopOwogCiAgICAgYm9vbCB1bnNoaWZ0Q291bnRXaXRoQW55
SW5kZXhpbmdUeXBlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNv
dW50KTsKICAgICBib29sIHVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwg
dW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQsIEFycmF5U3RvcmFnZSopOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lv
biAxNjg5MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zODcsNiArMzg3LDMwIEBAIGJvb2wgU3RydWN0dXJlOjphbnlP
YmplY3RJbkNoYWluTWF5SW50ZXIKICAgICB9CiB9CiAKK2Jvb2wgU3RydWN0dXJlOjpob2xlc1Jl
cXVpcmVTcGVjaWFsQmVoYXZpb3IoVk0mIHZtKSBjb25zdAoreworICAgIGlmICh0aGlzLT5tYXlJ
bnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBK
U1ZhbHVlIHByb3RvdHlwZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSktPnN0b3JlZFByb3RvdHlwZSgp
OworICAgIGlmICghcHJvdG90eXBlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChwcm90b3R5cGUpOworCisgICAgd2hpbGUg
KHRydWUpIHsKKyAgICAgICAgU3RydWN0dXJlJiBzdHJ1Y3R1cmUgPSAqb2JqZWN0LT5zdHJ1Y3R1
cmUodm0pOworICAgICAgICBpZiAoaGFzSW5kZXhlZFByb3BlcnRpZXMob2JqZWN0LT5pbmRleGlu
Z1R5cGUoKSkgfHwgc3RydWN0dXJlLm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHByb3RvdHlwZSA9IHN0cnVjdHVyZS5zdG9y
ZWRQcm90b3R5cGUoKTsKKyAgICAgICAgaWYgKCFwcm90b3R5cGUuaXNPYmplY3QoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgb2JqZWN0ID0gYXNPYmplY3QocHJvdG90eXBl
KTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKwogYm9vbCBTdHJ1Y3R1cmU6Om5lZWRzU2xvd1B1dEluZGV4aW5nKCkgY29u
c3QKIHsKICAgICByZXR1cm4gYW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4ZWRBY2Nl
c3NlcygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAko
cmV2aXNpb24gMTY4OTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw2ICsxNjgsNyBAQCBwdWJsaWM6CiAgICAgfQog
ICAgICAgICAKICAgICBib29sIGFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNj
ZXNzZXMoKSBjb25zdDsKKyAgICBib29sIGhvbGVzUmVxdWlyZVNwZWNpYWxCZWhhdmlvcihWTSYp
IGNvbnN0OwogICAgICAgICAKICAgICBib29sIG5lZWRzU2xvd1B1dEluZGV4aW5nKCkgY29uc3Q7
CiAgICAgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRp
b24oKSBjb25zdDsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2ODk4NykKKysrIExheW91dFRlc3RzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDE0LTA1LTE2ICBNYXJr
IEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgSlNBcnJheTo6
c2hpZnRDb3VudFdpdGgqIGNvdWxkIGJlIG1vcmUgZWZmaWNpZW50CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMwMTEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBhIHBlcmZvcm1hbmNlIHJlZ3Jl
c3Npb24gdGVzdCB3aGljaCB0ZXN0cyB0aGUgY29udGlndW91cyBzaGlmdCBjYXNlLiBXZSdyZSB+
ODUlIGZhc3RlciAKKyAgICAgICAgb24gdGhpcyBtaWNyb2JlbmNobWFyayB3aXRoIHRoaXMgcGF0
Y2guCisKKyAgICAgICAgKiBqcy9yZWdyZXNzL2FycmF5LXNwbGljZS1jb250aWd1b3VzLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9hcnJheS1zcGxpY2UtY29udGln
dW91cy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9hcnJh
eS1zcGxpY2UtY29udGlndW91cy5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorCiAyMDE0LTA1
LTE2ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEZp
eCBhIHN0cmFnZ2xlci4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvYXJyYXktc3BsaWNl
LWNvbnRpZ3VvdXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3MvYXJyYXktc3BsaWNlLWNvbnRpZ3VvdXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9hcnJheS1zcGxpY2UtY29udGlndW91cy1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2FycmF5LXNw
bGljZS1jb250aWd1b3VzCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5v
IGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2FycmF5LXNwbGljZS1j
b250aWd1b3VzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9hcnJh
eS1zcGxpY2UtY29udGlndW91cy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9hcnJheS1zcGxpY2UtY29udGlndW91cy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VO
Ij4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRl
c3RzL2FycmF5LXNwbGljZS1jb250aWd1b3VzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2FycmF5LXNwbGlj
ZS1jb250aWd1b3VzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL2FycmF5LXNwbGljZS1jb250aWd1b3VzLmpzCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvYXJyYXktc3BsaWNlLWNvbnRpZ3VvdXMu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNiBAQAorZnVuY3Rpb24gZm9vKCkgeworICAg
IHZhciBhID0gbmV3IEFycmF5KDEwMDApOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsg
KytpKSB7CisgICAgICAgIGlmIChpICUgNyA9PT0gMCkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBhW2ldID0gaTsKKyAgICB9CisKKyAgICB2YXIgbml0ZXJzID0gMTAwMDA7CisgICAg
dmFyIHJlbW92ZSA9IHRydWU7CisgICAgdmFyIGxhc3RSZW1vdmVkSXRlbSA9IG51bGw7CisgICAg
dmFyIGxhc3RSZW1vdmVkSW5kZXggPSBudWxsOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbml0
ZXJzOyArK2kpIHsKKyAgICAgICAgaWYgKHJlbW92ZSkgeworICAgICAgICAgICAgbGFzdFJlbW92
ZWRJbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGEubGVuZ3RoKTsKKyAgICAgICAg
ICAgIGxhc3RSZW1vdmVkSXRlbSA9IGFbbGFzdFJlbW92ZWRJbmRleF07CisgICAgICAgICAgICBh
LnNwbGljZShsYXN0UmVtb3ZlZEluZGV4LCAxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGEuc3BsaWNlKGxhc3RSZW1vdmVkSW5kZXgsIDAsIGxhc3RSZW1vdmVkSXRlbSk7CisgICAg
ICAgIH0KKyAgICAgICAgcmVtb3ZlID0gIXJlbW92ZTsKKyAgICB9CisgICAgaWYgKGEubGVuZ3Ro
ICE9PSAxMDAwKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCBsZW5ndGgiKTsK
K307Citmb28oKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231611</attachid>
            <date>2014-05-16 18:43:51 -0700</date>
            <delta_ts>2014-05-19 15:51:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133011-20140516184150.patch</filename>
            <type>text/plain</type>
            <size>18427</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY4OTg3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBA
CisyMDE0LTA1LTE2ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgSlNBcnJheTo6c2hpZnRDb3VudFdpdGgqIGNvdWxkIGJlIG1vcmUgZWZmaWNpZW50
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMwMTEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPdXIgY3Vy
cmVudCBpbXBsZW1lbnRhdGlvbnMgb2Ygc2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUgYW5k
IHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlIAorICAgICAgICBhcmUgc2NhcmVkIG9mIHRoZSBw
cmVzZW5jZSBvZiBhbnkgaG9sZXMgaW4gdGhlIGFycmF5LiBXZSBjYW4gbWl0aWdhdGUgdGhpcyBz
b21ld2hhdCBieSBlbmFibGluZyAKKyAgICAgICAgdGhlbSB0byBjb3JyZWN0bHkgaGFuZGxlIGhv
bGVzLCB0aHVzIGF2b2lkaW5nIHRoZSBzbG93ZXN0IG9mIHNsb3cgcGF0aHMgaW4gbW9zdCBjYXNl
cy4KKworICAgICAgICAqIHJ1bnRpbWUvQXJyYXlTdG9yYWdlLmg6CisgICAgICAgIChKU0M6OkFy
cmF5U3RvcmFnZTo6aW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6
Omxlbmd0aCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6aGFzSG9sZXMpOgorICAgICAg
ICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaDoKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFk
ZXI6OnB1YmxpY0xlbmd0aCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpmcm9tKToK
KyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpz
aGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNoaWZ0
Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6c2hpZnRDb3VudEZvclNoaWZ0KToKKyAgICAgICAgKiBy
dW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aG9sZXNSZXF1
aXJlU3BlY2lhbEJlaGF2aW9yKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorCiAy
MDE0LTA1LTE2ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAg
IENyYXNoIGluIEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjwoSlNDOjpZYXJyOjpZYXJySklUQ29t
cGlsZU1vZGUpMD46OmdlbmVyYXRlUGF0dGVybkNoYXJhY3RlckZpeGVkKCkgZHVlIHRvIFdURjo6
Q3Jhc2hPbk92ZXJmbG93OjpvdmVyZmxvd2VkICsgOQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgJKHJldmlzaW9uIDE2ODkxOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5U3RvcmFnZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Myw5ICs1MywxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHko
KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PEJ1dHRlcmZseSo+KHRoaXMpOyB9CiAgICAgSW5k
ZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVyKCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZy
b20odGhpcyk7IH0KKyAgICBjb25zdCBJbmRleGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSBj
b25zdCB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQogICAgIAogICAgIC8v
IFdlIHN0ZWFsIHR3byBmaWVsZHMgZnJvbSB0aGUgaW5kZXhpbmcgaGVhZGVyOiB2ZWN0b3JMZW5n
dGggYW5kIGxlbmd0aC4KLSAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hl
YWRlcigpLT5wdWJsaWNMZW5ndGgoKTsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnB1YmxpY0xlbmd0aCgpOyB9CiAgICAgdm9pZCBzZXRM
ZW5ndGgodW5zaWduZWQgbGVuZ3RoKSB7IGluZGV4aW5nSGVhZGVyKCktPnNldFB1YmxpY0xlbmd0
aChsZW5ndGgpOyB9CiAgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhp
bmdIZWFkZXIoKS0+dmVjdG9yTGVuZ3RoKCk7IH0KICAgICB2b2lkIHNldFZlY3Rvckxlbmd0aCh1
bnNpZ25lZCBsZW5ndGgpIHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0VmVjdG9yTGVuZ3RoKGxlbmd0
aCk7IH0KQEAgLTY3LDYgKzY4LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9udW1WYWx1ZXNJblZl
Y3RvciA9IG90aGVyLm1fbnVtVmFsdWVzSW5WZWN0b3I7CiAgICAgfQogICAgIAorICAgIGJvb2wg
aGFzSG9sZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbnVtVmFsdWVzSW5WZWN0
b3IgIT0gbGVuZ3RoKCk7CisgICAgfSAgIAorCiAgICAgYm9vbCBpblNwYXJzZU1vZGUoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIG1fc3BhcnNlTWFwICYmIG1fc3BhcnNlTWFwLT5zcGFyc2VNb2Rl
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVh
ZGVyLmgJKHJldmlzaW9uIDE2ODkxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZGV4aW5nSGVhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGlj
OgogICAgICAgICB1Lmxlbmd0aHMudmVjdG9yTGVuZ3RoID0gbGVuZ3RoOwogICAgIH0KICAgICAK
LSAgICB1aW50MzJfdCBwdWJsaWNMZW5ndGgoKSB7IHJldHVybiB1Lmxlbmd0aHMucHVibGljTGVu
Z3RoOyB9CisgICAgdWludDMyX3QgcHVibGljTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gdS5sZW5n
dGhzLnB1YmxpY0xlbmd0aDsgfQogICAgIHZvaWQgc2V0UHVibGljTGVuZ3RoKHVpbnQzMl90IGF1
eFdvcmQpIHsgdS5sZW5ndGhzLnB1YmxpY0xlbmd0aCA9IGF1eFdvcmQ7IH0KICAgICAKICAgICBB
cnJheUJ1ZmZlciogYXJyYXlCdWZmZXIoKSB7IHJldHVybiB1LnR5cGVkQXJyYXkuYnVmZmVyOyB9
CkBAIC04MCw3ICs4MCwxMiBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIEluZGV4aW5nSGVh
ZGVyKiBmcm9tKEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihhcnJheVN0b3JhZ2UpIC0gMTsK
KyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihmcm9tKGNvbnN0X2Nh
c3Q8Y29uc3QgQXJyYXlTdG9yYWdlKj4oYXJyYXlTdG9yYWdlKSkpOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgY29uc3QgSW5kZXhpbmdIZWFkZXIqIGZyb20oY29uc3QgQXJyYXlTdG9yYWdlKiBh
cnJheVN0b3JhZ2UpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBJbmRleGluZ0hlYWRlcio+KGFycmF5U3RvcmFnZSkgLSAxOwogICAgIH0KICAgICAKICAgICBz
dGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb21FbmRPZihQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlT
dG9yYWdlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJ
KHJldmlzaW9uIDE2ODkxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjgsMTUgKzY2OCwxOCBAQCB2b2lkIEpTQXJyYXk6
OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgfQogfQogCi1ib29sIEpTQXJyYXk6OnNo
aWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNv
dW50LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCitib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRo
QXJyYXlTdG9yYWdlKFZNJiB2bSwgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQs
IEFycmF5U3RvcmFnZSogc3RvcmFnZSkKIHsKICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBzdG9y
YWdlLT5sZW5ndGgoKTsKICAgICBSRUxFQVNFX0FTU0VSVChjb3VudCA8PSBvbGRMZW5ndGgpOwog
ICAgIAogICAgIC8vIElmIHRoZSBhcnJheSBjb250YWlucyBob2xlcyBvciBpcyBvdGhlcndpc2Ug
aW4gYW4gYWJub3JtYWwgc3RhdGUsCiAgICAgLy8gdXNlIHRoZSBnZW5lcmljIGFsZ29yaXRobSBp
biBBcnJheVByb3RvdHlwZS4KLSAgICBpZiAob2xkTGVuZ3RoICE9IHN0b3JhZ2UtPm1fbnVtVmFs
dWVzSW5WZWN0b3IgfHwgaW5TcGFyc2VJbmRleGluZ01vZGUoKSB8fCBzaG91bGRVc2VTbG93UHV0
KGluZGV4aW5nVHlwZSgpKSkKKyAgICBpZiAoKHN0b3JhZ2UtPmhhc0hvbGVzKCkgJiYgdGhpcy0+
c3RydWN0dXJlKHZtKS0+aG9sZXNSZXF1aXJlU3BlY2lhbEJlaGF2aW9yKHZtKSkgCisgICAgICAg
IHx8IGluU3BhcnNlSW5kZXhpbmdNb2RlKCkgCisgICAgICAgIHx8IHNob3VsZFVzZVNsb3dQdXQo
aW5kZXhpbmdUeXBlKCkpKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBp
ZiAoIW9sZExlbmd0aCkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC03MTAsMTAgKzcxMywxNSBA
QCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlCiAgICAgICAgIC8vIGFm
dGVyIHRoZSBzaGlmdCByZWdpb24sIHNvIHdlIG1vdmUgdGhlIGVsZW1lbnRzIGJlZm9yZSB0byB0
aGUgcmlnaHQuCiAgICAgICAgIGlmIChudW1FbGVtZW50c0JlZm9yZVNoaWZ0UmVnaW9uKSB7CiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb3VudCArIHN0YXJ0SW5kZXggPD0gdmVjdG9yTGVu
Z3RoKTsKLSAgICAgICAgICAgIG1lbW1vdmUoCi0gICAgICAgICAgICAgICAgc3RvcmFnZS0+bV92
ZWN0b3IgKyBjb3VudCwKLSAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvciwKLSAgICAg
ICAgICAgICAgICBzaXplb2YoSlNWYWx1ZSkgKiBzdGFydEluZGV4KTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IHN0YXJ0SW5kZXg7IGktLSA+IDA7KSB7CisgICAgICAgICAgICAgICAg
SlNWYWx1ZSBzb3VyY2UgPSBzdG9yYWdlLT5tX3ZlY3RvcltpXS5nZXQoKTsKKyAgICAgICAgICAg
ICAgICBKU1ZhbHVlIGRlc3QgPSBzdG9yYWdlLT5tX3ZlY3Rvcltjb3VudCArIGldLmdldCgpOwor
ICAgICAgICAgICAgICAgIC8vIEFueSB0aW1lIHdlIG92ZXJ3cml0ZSBhIGhvbGUgd2Uga25vdyB3
ZSBvdmVyY291bnRlZCB0aGUgbnVtYmVyIG9mIHZhbHVlcyB3ZSByZW1vdmVkIAorICAgICAgICAg
ICAgICAgIC8vIHdoZW4gd2Ugc3VidHJhY3RlZCBjb3VudCBmcm9tIG1fbnVtVmFsdWVzSW5WZWN0
b3IgYWJvdmUuCisgICAgICAgICAgICAgICAgaWYgKCFkZXN0KQorICAgICAgICAgICAgICAgICAg
ICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7CisgICAgICAgICAgICAgICAgc3RvcmFn
ZS0+bV92ZWN0b3JbY291bnQgKyBpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHNvdXJjZSk7Cisg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgLy8gQWRqdXN0IHRoZSBCdXR0ZXJmbHkg
YW5kIHRoZSBpbmRleCBiaWFzLiBXZSBvbmx5IG5lZWQgdG8gZG8gdGhpcyBoZXJlIGJlY2F1c2Ug
d2UncmUgY2hhbmdpbmcKICAgICAgICAgLy8gdGhlIHN0YXJ0IG9mIHRoZSBCdXR0ZXJmbHksIHdo
aWNoIG5lZWRzIHRvIHBvaW50IGF0IHRoZSBmaXJzdCBpbmRleGVkIHByb3BlcnR5IGluIHRoZSB1
c2VkCkBAIC03MjgsMTAgKzczNiwxNSBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQXJy
YXlTdG9yYWdlCiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gVGhlIG51bWJlciBvZiBlbGVtZW50
cyBiZWZvcmUgdGhlIHNoaWZ0IHJlZ2lvbiBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhl
IG51bWJlciAKICAgICAgICAgLy8gb2YgZWxlbWVudHMgYWZ0ZXIgdGhlIHNoaWZ0IHJlZ2lvbiwg
c28gd2UgbW92ZSB0aGUgZWxlbWVudHMgYWZ0ZXIgdGhlIHNoaWZ0IHJlZ2lvbiB0byB0aGUgbGVm
dC4KLSAgICAgICAgbWVtbW92ZSgKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yICsgc3Rh
cnRJbmRleCwKLSAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yICsgZmlyc3RJbmRleEFmdGVy
U2hpZnRSZWdpb24sCi0gICAgICAgICAgICBzaXplb2YoSlNWYWx1ZSkgKiBudW1FbGVtZW50c0Fm
dGVyU2hpZnRSZWdpb24pOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRWxl
bWVudHNBZnRlclNoaWZ0UmVnaW9uOyArK2kpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgc291cmNl
ID0gc3RvcmFnZS0+bV92ZWN0b3JbZmlyc3RJbmRleEFmdGVyU2hpZnRSZWdpb24gKyBpXS5nZXQo
KTsKKyAgICAgICAgICAgIEpTVmFsdWUgZGVzdCA9IHN0b3JhZ2UtPm1fdmVjdG9yW3N0YXJ0SW5k
ZXggKyBpXS5nZXQoKTsKKyAgICAgICAgICAgIC8vIEFueSB0aW1lIHdlIG92ZXJ3cml0ZSBhIGhv
bGUgd2Uga25vdyB3ZSBvdmVyY291bnRlZCB0aGUgbnVtYmVyIG9mIHZhbHVlcyB3ZSByZW1vdmVk
IAorICAgICAgICAgICAgLy8gd2hlbiB3ZSBzdWJ0cmFjdGVkIGNvdW50IGZyb20gbV9udW1WYWx1
ZXNJblZlY3RvciBhYm92ZS4KKyAgICAgICAgICAgIGlmICghZGVzdCkKKyAgICAgICAgICAgICAg
ICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7CisgICAgICAgICAgICBzdG9yYWdlLT5t
X3ZlY3RvcltzdGFydEluZGV4ICsgaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihzb3VyY2UpOwor
ICAgICAgICB9CiAgICAgICAgIC8vIENsZWFyIHRoZSBzbG90cyBvZiB0aGUgZWxlbWVudHMgd2Ug
anVzdCBtb3ZlZC4KICAgICAgICAgdW5zaWduZWQgc3RhcnRPZkVtcHR5VmVjdG9yVGFpbCA9IHVz
ZWRWZWN0b3JMZW5ndGggLSBjb3VudDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRP
ZkVtcHR5VmVjdG9yVGFpbDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkKQEAgLTc0Nyw2ICs3
NjAsNyBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlCiAKIGJvb2wg
SlNBcnJheTo6c2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUoRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKIHsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIFJFTEVBU0VfQVNTRVJUKGNvdW50ID4gMCk7CiAgICAgCiAgICAgc3dpdGNo
IChpbmRleGluZ1R5cGUoKSkgewpAQCAtNzY1LDI3ICs3NzksMjYgQEAgYm9vbCBKU0FycmF5Ojpz
aGlmdENvdW50V2l0aEFueUluZGV4aW5nVAogICAgICAgICAvLyBXZSBtYXkgaGF2ZSB0byB3YWxr
IHRoZSBlbnRpcmUgYXJyYXkgdG8gZG8gdGhlIHNoaWZ0LiBXZSdyZSB3aWxsaW5nIHRvIGRvCiAg
ICAgICAgIC8vIHNvIG9ubHkgaWYgaXQncyBub3QgaG9ycmlibHkgc2xvdy4KICAgICAgICAgaWYg
KG9sZExlbmd0aCAtIChzdGFydEluZGV4ICsgY291bnQpID49IE1JTl9TUEFSU0VfQVJSQVlfSU5E
RVgpCi0gICAgICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uoc3RhcnRJ
bmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT52bSgpKSk7CisgICAgICAgICAg
ICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uodm0sIHN0YXJ0SW5kZXgsIGNvdW50
LCBlbnN1cmVBcnJheVN0b3JhZ2Uodm0pKTsKIAogICAgICAgICAvLyBTdG9yaW5nIHRvIGEgaG9s
ZSBpcyBmaW5lIHNpbmNlIHdlJ3JlIHN0aWxsIGhhdmluZyBhIGdvb2QgdGltZS4gQnV0IHJlYWRp
bmcgZnJvbSBhIGhvbGUgCiAgICAgICAgIC8vIGlzIHRvdGFsbHkgbm90IGZpbmUsIHNpbmNlIHdl
IG1pZ2h0IGhhdmUgdG8gcmVhZCBmcm9tIHRoZSBwcm90byBjaGFpbi4KICAgICAgICAgLy8gV2Ug
aGF2ZSB0byBjaGVjayBmb3IgaG9sZXMgYmVmb3JlIHdlIHN0YXJ0IG1vdmluZyB0aGluZ3MgYXJv
dW5kIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0IGhhbGZ3YXkgCiAgICAgICAgIC8vIHRocm91Z2ggc2hp
ZnRpbmcgYW5kIHRoZW4gcmVhbGl6ZSB3ZSBzaG91bGQgaGF2ZSBiZWVuIGluIEFycmF5U3RvcmFn
ZSBtb2RlLgogICAgICAgICB1bnNpZ25lZCBlbmQgPSBvbGRMZW5ndGggLSBjb3VudDsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRJbmRleDsgaSA8IGVuZDsgKytpKSB7Ci0gICAgICAg
ICAgICBKU1ZhbHVlIHYgPSBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2kgKyBjb3VudF0uZ2V0
KCk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXYpKQotICAgICAgICAgICAgICAgIHJldHVy
biBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJy
YXlTdG9yYWdlKGV4ZWMtPnZtKCkpKTsKKyAgICAgICAgaWYgKHRoaXMtPnN0cnVjdHVyZSh2bSkt
PmhvbGVzUmVxdWlyZVNwZWNpYWxCZWhhdmlvcih2bSkpIHsKKyAgICAgICAgICAgIG1lbW1vdmUo
bV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCkgKyBzdGFydEluZGV4LCAKKyAgICAgICAg
ICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKSArIHN0YXJ0SW5kZXggKyBj
b3VudCwgCisgICAgICAgICAgICAgICAgc2l6ZW9mKEpTVmFsdWUpICogKGVuZCAtIHN0YXJ0SW5k
ZXgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0
YXJ0SW5kZXg7IGkgPCBlbmQ7ICsraSkgeworICAgICAgICAgICAgICAgIEpTVmFsdWUgdiA9IG1f
YnV0dGVyZmx5LT5jb250aWd1b3VzKClbaSArIGNvdW50XS5nZXQoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoIXYpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2hpZnRDb3Vu
dFdpdGhBcnJheVN0b3JhZ2Uodm0sIGksIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2Uodm0pKTsK
KyAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldFdpdGhvdXRX
cml0ZUJhcnJpZXIodik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBpIDwgZW5kOyArK2kpIHsKLSAgICAgICAgICAgIEpT
VmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaSArIGNvdW50XS5nZXQoKTsKLSAg
ICAgICAgICAgIEFTU0VSVCh2KTsKLSAgICAgICAgICAgIC8vIE5vIG5lZWQgZm9yIGEgYmFycmll
ciBzaW5jZSB3ZSdyZSBqdXN0IG1vdmluZyBkYXRhIGFyb3VuZCBpbiB0aGUgc2FtZSB2ZWN0b3Iu
Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIGluIGxpbmUgd2l0aCBvdXIgc3RhbmRpbmcgYXNzdW1w
dGlvbiB0aGF0IHdlIHdvbid0IGhhdmUgYSBkZWxldGlvbgotICAgICAgICAgICAgLy8gYmFycmll
ci4KLSAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0V2l0aG91dFdy
aXRlQmFycmllcih2KTsKLSAgICAgICAgfQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmQ7
IGkgPCBvbGRMZW5ndGg7ICsraSkKICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3Vz
KClbaV0uY2xlYXIoKTsKICAgICAgICAgCkBAIC04MDAsNyArODEzLDcgQEAgYm9vbCBKU0FycmF5
OjpzaGlmdENvdW50V2l0aEFueUluZGV4aW5nVAogICAgICAgICAvLyBXZSBtYXkgaGF2ZSB0byB3
YWxrIHRoZSBlbnRpcmUgYXJyYXkgdG8gZG8gdGhlIHNoaWZ0LiBXZSdyZSB3aWxsaW5nIHRvIGRv
CiAgICAgICAgIC8vIHNvIG9ubHkgaWYgaXQncyBub3QgaG9ycmlibHkgc2xvdy4KICAgICAgICAg
aWYgKG9sZExlbmd0aCAtIChzdGFydEluZGV4ICsgY291bnQpID49IE1JTl9TUEFSU0VfQVJSQVlf
SU5ERVgpCi0gICAgICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uoc3Rh
cnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT52bSgpKSk7CisgICAgICAg
ICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uodm0sIHN0YXJ0SW5kZXgsIGNv
dW50LCBlbnN1cmVBcnJheVN0b3JhZ2Uodm0pKTsKIAogICAgICAgICAvLyBTdG9yaW5nIHRvIGEg
aG9sZSBpcyBmaW5lIHNpbmNlIHdlJ3JlIHN0aWxsIGhhdmluZyBhIGdvb2QgdGltZS4gQnV0IHJl
YWRpbmcgZnJvbSBhIGhvbGUgCiAgICAgICAgIC8vIGlzIHRvdGFsbHkgbm90IGZpbmUsIHNpbmNl
IHdlIG1pZ2h0IGhhdmUgdG8gcmVhZCBmcm9tIHRoZSBwcm90byBjaGFpbi4KQEAgLTgxMCwxNSAr
ODIzLDcgQEAgYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFueUluZGV4aW5nVAogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBpIDwgZW5kOyArK2kpIHsKICAgICAgICAg
ICAgIGRvdWJsZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpICsgY291bnRd
OwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKHYgIT0gdikpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVB
cnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkpOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRJbmRleDsgaSA8IGVuZDsgKytpKSB7Ci0gICAgICAg
ICAgICBkb3VibGUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaSArIGNvdW50
XTsKLSAgICAgICAgICAgIEFTU0VSVCh2ID09IHYpOwotICAgICAgICAgICAgLy8gTm8gbmVlZCBm
b3IgYSBiYXJyaWVyIHNpbmNlIHdlJ3JlIGp1c3QgbW92aW5nIGRhdGEgYXJvdW5kIGluIHRoZSBz
YW1lIHZlY3Rvci4KLSAgICAgICAgICAgIC8vIFRoaXMgaXMgaW4gbGluZSB3aXRoIG91ciBzdGFu
ZGluZyBhc3N1bXB0aW9uIHRoYXQgd2Ugd29uJ3QgaGF2ZSBhIGRlbGV0aW9uCi0gICAgICAgICAg
ICAvLyBiYXJyaWVyLgorICAgICAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5
U3RvcmFnZSh2bSwgaSwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZSh2bSkpOwogICAgICAgICAg
ICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IHY7CiAgICAgICAgIH0KICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gZW5kOyBpIDwgb2xkTGVuZ3RoOyArK2kpCkBAIC04MzAs
NyArODM1LDcgQEAgYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFueUluZGV4aW5nVAogICAg
ICAgICAKICAgICBjYXNlIEFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5V2l0
aFNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5
U3RvcmFnZShzdGFydEluZGV4LCBjb3VudCwgYXJyYXlTdG9yYWdlKCkpOworICAgICAgICByZXR1
cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uodm0sIHN0YXJ0SW5kZXgsIGNvdW50LCBhcnJh
eVN0b3JhZ2UoKSk7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7CkBA
IC04NDcsNyArODUyLDcgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9y
YQogCiAgICAgLy8gSWYgdGhlIGFycmF5IGNvbnRhaW5zIGhvbGVzIG9yIGlzIG90aGVyd2lzZSBp
biBhbiBhYm5vcm1hbCBzdGF0ZSwKICAgICAvLyB1c2UgdGhlIGdlbmVyaWMgYWxnb3JpdGhtIGlu
IEFycmF5UHJvdG90eXBlLgotICAgIGlmIChsZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJ
blZlY3RvciB8fCBzdG9yYWdlLT5pblNwYXJzZU1vZGUoKSB8fCBzaG91bGRVc2VTbG93UHV0KGlu
ZGV4aW5nVHlwZSgpKSkKKyAgICBpZiAoc3RvcmFnZS0+aGFzSG9sZXMoKSB8fCBzdG9yYWdlLT5p
blNwYXJzZU1vZGUoKSB8fCBzaG91bGRVc2VTbG93UHV0KGluZGV4aW5nVHlwZSgpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYm9vbCBtb3ZlRnJvbnQgPSAhc3RhcnRJbmRleCB8fCBz
dGFydEluZGV4IDwgbGVuZ3RoIC8gMjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmgJKHJldmlzaW9uIDE2ODkxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtODksNyArODksNyBAQCBwdWJsaWM6
CiAKICAgICBib29sIHNoaWZ0Q291bnRGb3JTaGlmdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHNoaWZ0
Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3Jh
Z2UoZXhlYy0+dm0oKSkpOworICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3Jh
Z2UoZXhlYy0+dm0oKSwgc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVj
LT52bSgpKSk7CiAgICAgfQogICAgIGJvb2wgc2hpZnRDb3VudEZvclNwbGljZShFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQogICAgIHsKQEAgLTE1
Nyw3ICsxNTcsNyBAQCBwcml2YXRlOgogICAgIH0KICAgICAgICAgCiAgICAgYm9vbCBzaGlmdENv
dW50V2l0aEFueUluZGV4aW5nVHlwZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1
bnNpZ25lZCBjb3VudCk7Ci0gICAgYm9vbCBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSh1bnNp
Z25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCwgQXJyYXlTdG9yYWdlKik7CisgICAgYm9v
bCBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShWTSYsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVu
c2lnbmVkIGNvdW50LCBBcnJheVN0b3JhZ2UqKTsKIAogICAgIGJvb2wgdW5zaGlmdENvdW50V2l0
aEFueUluZGV4aW5nVHlwZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25l
ZCBjb3VudCk7CiAgICAgYm9vbCB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0
ZSosIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50LCBBcnJheVN0b3JhZ2UqKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2
aXNpb24gMTY4OTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg3LDYgKzM4NywzMCBAQCBib29sIFN0cnVjdHVyZTo6
YW55T2JqZWN0SW5DaGFpbk1heUludGVyCiAgICAgfQogfQogCitib29sIFN0cnVjdHVyZTo6aG9s
ZXNSZXF1aXJlU3BlY2lhbEJlaGF2aW9yKFZNJiB2bSkgY29uc3QKK3sKKyAgICBpZiAodGhpcy0+
bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0pLT5zdG9yZWRQcm90b3R5
cGUoKTsKKyAgICBpZiAoIXByb3RvdHlwZS5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QocHJvdG90eXBlKTsKKworICAgIHdo
aWxlICh0cnVlKSB7CisgICAgICAgIFN0cnVjdHVyZSYgc3RydWN0dXJlID0gKm9iamVjdC0+c3Ry
dWN0dXJlKHZtKTsKKyAgICAgICAgaWYgKGhhc0luZGV4ZWRQcm9wZXJ0aWVzKG9iamVjdC0+aW5k
ZXhpbmdUeXBlKCkpIHx8IHN0cnVjdHVyZS5tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUu
c3RvcmVkUHJvdG90eXBlKCk7CisgICAgICAgIGlmICghcHJvdG90eXBlLmlzT2JqZWN0KCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG9iamVjdCA9IGFzT2JqZWN0KHByb3Rv
dHlwZSk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgU3RydWN0dXJlOjpuZWVkc1Nsb3dQdXRJbmRleGluZygp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRleGVk
QWNjZXNzZXMoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgJKHJldmlzaW9uIDE2ODkxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNiArMTY4LDcgQEAgcHVibGljOgogICAg
IH0KICAgICAgICAgCiAgICAgYm9vbCBhbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhl
ZEFjY2Vzc2VzKCkgY29uc3Q7CisgICAgYm9vbCBob2xlc1JlcXVpcmVTcGVjaWFsQmVoYXZpb3Io
Vk0mKSBjb25zdDsKICAgICAgICAgCiAgICAgYm9vbCBuZWVkc1Nsb3dQdXRJbmRleGluZygpIGNv
bnN0OwogICAgIE5vblByb3BlcnR5VHJhbnNpdGlvbiBzdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFu
c2l0aW9uKCkgY29uc3Q7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjg5ODcpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxNC0wNS0xNiAg
TWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpTQXJy
YXk6OnNoaWZ0Q291bnRXaXRoKiBjb3VsZCBiZSBtb3JlIGVmZmljaWVudAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDExCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYSBwZXJmb3JtYW5jZSBy
ZWdyZXNzaW9uIHRlc3Qgd2hpY2ggdGVzdHMgdGhlIGNvbnRpZ3VvdXMgc2hpZnQgY2FzZS4gV2Un
cmUgfjg1JSBmYXN0ZXIgCisgICAgICAgIG9uIHRoaXMgbWljcm9iZW5jaG1hcmsgd2l0aCB0aGlz
IHBhdGNoLgorCisgICAgICAgICoganMvcmVncmVzcy9hcnJheS1zcGxpY2UtY29udGlndW91cy1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvYXJyYXktc3BsaWNlLWNv
bnRpZ3VvdXMuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMv
YXJyYXktc3BsaWNlLWNvbnRpZ3VvdXMuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKwogMjAx
NC0wNS0xNiAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAg
ICBGaXggYSBzdHJhZ2dsZXIuCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2FycmF5LXNw
bGljZS1jb250aWd1b3VzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL2FycmF5LXNwbGljZS1jb250aWd1b3VzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvYXJyYXktc3BsaWNlLWNvbnRpZ3VvdXMtZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9hcnJh
eS1zcGxpY2UtY29udGlndW91cworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFT
UyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9hcnJheS1zcGxp
Y2UtY29udGlndW91cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
YXJyYXktc3BsaWNlLWNvbnRpZ3VvdXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvYXJyYXktc3BsaWNlLWNvbnRpZ3VvdXMuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1M
Ly9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlw
dC10ZXN0cy9hcnJheS1zcGxpY2UtY29udGlndW91cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9hcnJheS1z
cGxpY2UtY29udGlndW91cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9hcnJheS1zcGxpY2UtY29udGlndW91cy5qcwkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2FycmF5LXNwbGljZS1jb250aWd1
b3VzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYgQEAKK2Z1bmN0aW9uIGZvbygpIHsK
KyAgICB2YXIgYSA9IG5ldyBBcnJheSgxMDAwKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEw
MDA7ICsraSkgeworICAgICAgICBpZiAoaSAlIDcgPT09IDApCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgYVtpXSA9IGk7CisgICAgfQorCisgICAgdmFyIG5pdGVycyA9IDEwMDAwOwor
ICAgIHZhciByZW1vdmUgPSB0cnVlOworICAgIHZhciBsYXN0UmVtb3ZlZEl0ZW0gPSBudWxsOwor
ICAgIHZhciBsYXN0UmVtb3ZlZEluZGV4ID0gbnVsbDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IG5pdGVyczsgKytpKSB7CisgICAgICAgIGlmIChyZW1vdmUpIHsKKyAgICAgICAgICAgIGxhc3RS
ZW1vdmVkSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBhLmxlbmd0aCk7CisgICAg
ICAgICAgICBsYXN0UmVtb3ZlZEl0ZW0gPSBhW2xhc3RSZW1vdmVkSW5kZXhdOworICAgICAgICAg
ICAgYS5zcGxpY2UobGFzdFJlbW92ZWRJbmRleCwgMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBhLnNwbGljZShsYXN0UmVtb3ZlZEluZGV4LCAwLCBsYXN0UmVtb3ZlZEl0ZW0pOwor
ICAgICAgICB9CisgICAgICAgIHJlbW92ZSA9ICFyZW1vdmU7CisgICAgfQorICAgIGlmIChhLmxl
bmd0aCAhPT0gMTAwMCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgbGVuZ3Ro
Iik7Cit9OworZm9vKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231729</attachid>
            <date>2014-05-19 15:51:15 -0700</date>
            <delta_ts>2014-05-19 15:57:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133011-20140519154705.patch</filename>
            <type>text/plain</type>
            <size>34678</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY5MDc5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBA
CisyMDE0LTA1LTE5ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgSlNBcnJheTo6c2hpZnRDb3VudFdpdGgqIGNvdWxkIGJlIG1vcmUgZWZmaWNpZW50
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMwMTEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPdXIgY3Vy
cmVudCBpbXBsZW1lbnRhdGlvbnMgb2Ygc2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUgYW5k
IHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlIAorICAgICAgICBhcmUgc2NhcmVkIG9mIHRoZSBw
cmVzZW5jZSBvZiBhbnkgaG9sZXMgaW4gdGhlIGFycmF5LiBXZSBjYW4gbWl0aWdhdGUgdGhpcyBz
b21ld2hhdCBieSBlbmFibGluZyAKKyAgICAgICAgdGhlbSB0byBjb3JyZWN0bHkgaGFuZGxlIGhv
bGVzLCB0aHVzIGF2b2lkaW5nIHRoZSBzbG93ZXN0IG9mIHNsb3cgcGF0aHMgaW4gbW9zdCBjYXNl
cy4KKworICAgICAgICAqIHJ1bnRpbWUvQXJyYXlTdG9yYWdlLmg6CisgICAgICAgIChKU0M6OkFy
cmF5U3RvcmFnZTo6aW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6
Omxlbmd0aCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6aGFzSG9sZXMpOgorICAgICAg
ICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaDoKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFk
ZXI6OnB1YmxpY0xlbmd0aCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpmcm9tKToK
KyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpz
aGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNoaWZ0
Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlm
dENvdW50V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OnNoaWZ0Q291bnRGb3JTaGlmdCk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OnNoaWZ0Q291bnRGb3JTcGxpY2UpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpz
aGlmdENvdW50KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6aG9sZXNSZXF1aXJlU3BlY2lhbEJlaGF2aW9yKToKKyAgICAgICAgKiBy
dW50aW1lL1N0cnVjdHVyZS5oOgorCiAyMDE0LTA1LTE5ICBUYW5heSBDICA8dGFuYXkuY0BzYW1z
dW5nLmNvbT4KIAogICAgICAgICBSZW1vdmluZyBzb21lIGNoZWNrLXdlYmtpdC1zdHlsZSB3YXJu
aW5ncyBmcm9tIC4vZGZnCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheVN0b3JhZ2UuaAkocmV2aXNpb24gMTY5MDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDkgKzUzLDEwIEBA
IHB1YmxpYzoKICAgICAKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4odGhpcyk7IH0KICAgICBJbmRleGluZ0hlYWRlciogaW5k
ZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQorICAg
IGNvbnN0IEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIElu
ZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CiAgICAgCiAgICAgLy8gV2Ugc3RlYWwgdHdvIGZp
ZWxkcyBmcm9tIHRoZSBpbmRleGluZyBoZWFkZXI6IHZlY3Rvckxlbmd0aCBhbmQgbGVuZ3RoLgot
ICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnB1YmxpY0xl
bmd0aCgpOyB9CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gaW5kZXhpbmdI
ZWFkZXIoKS0+cHVibGljTGVuZ3RoKCk7IH0KICAgICB2b2lkIHNldExlbmd0aCh1bnNpZ25lZCBs
ZW5ndGgpIHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7IH0KICAg
ICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT52ZWN0
b3JMZW5ndGgoKTsgfQogICAgIHZvaWQgc2V0VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGxlbmd0aCkg
eyBpbmRleGluZ0hlYWRlcigpLT5zZXRWZWN0b3JMZW5ndGgobGVuZ3RoKTsgfQpAQCAtNjcsNiAr
NjgsMTEgQEAgcHVibGljOgogICAgICAgICBtX251bVZhbHVlc0luVmVjdG9yID0gb3RoZXIubV9u
dW1WYWx1ZXNJblZlY3RvcjsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNIb2xlcygpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9udW1WYWx1ZXNJblZlY3RvciAhPSBsZW5ndGgoKTsK
KyAgICB9ICAgCisKICAgICBib29sIGluU3BhcnNlTW9kZSgpCiAgICAgewogICAgICAgICByZXR1
cm4gbV9zcGFyc2VNYXAgJiYgbV9zcGFyc2VNYXAtPnNwYXJzZU1vZGUoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAkocmV2aXNpb24g
MTY5MDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHUubGVu
Z3Rocy52ZWN0b3JMZW5ndGggPSBsZW5ndGg7CiAgICAgfQogICAgIAotICAgIHVpbnQzMl90IHB1
YmxpY0xlbmd0aCgpIHsgcmV0dXJuIHUubGVuZ3Rocy5wdWJsaWNMZW5ndGg7IH0KKyAgICB1aW50
MzJfdCBwdWJsaWNMZW5ndGgoKSBjb25zdCB7IHJldHVybiB1Lmxlbmd0aHMucHVibGljTGVuZ3Ro
OyB9CiAgICAgdm9pZCBzZXRQdWJsaWNMZW5ndGgodWludDMyX3QgYXV4V29yZCkgeyB1Lmxlbmd0
aHMucHVibGljTGVuZ3RoID0gYXV4V29yZDsgfQogICAgIAogICAgIEFycmF5QnVmZmVyKiBhcnJh
eUJ1ZmZlcigpIHsgcmV0dXJuIHUudHlwZWRBcnJheS5idWZmZXI7IH0KQEAgLTgwLDcgKzgwLDEy
IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20oQXJyYXlT
dG9yYWdlKiBhcnJheVN0b3JhZ2UpCiAgICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxJbmRleGluZ0hlYWRlcio+KGFycmF5U3RvcmFnZSkgLSAxOworICAgICAgICByZXR1cm4g
Y29uc3RfY2FzdDxJbmRleGluZ0hlYWRlcio+KGZyb20oY29uc3RfY2FzdDxjb25zdCBBcnJheVN0
b3JhZ2UqPihhcnJheVN0b3JhZ2UpKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBjb25zdCBJ
bmRleGluZ0hlYWRlciogZnJvbShjb25zdCBBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IEluZGV4aW5nSGVhZGVy
Kj4oYXJyYXlTdG9yYWdlKSAtIDE7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBJbmRleGluZ0hl
YWRlciogZnJvbUVuZE9mKFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTY5MDUz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY2OCwxNSArNjY4LDE4IEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmEKICAgICB9CiB9CiAKLWJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhBcnJh
eVN0b3JhZ2UodW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQsIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSkKK2Jvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoVk0m
IHZtLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCwgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlKQogewogICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwog
ICAgIFJFTEVBU0VfQVNTRVJUKGNvdW50IDw9IG9sZExlbmd0aCk7CiAgICAgCiAgICAgLy8gSWYg
dGhlIGFycmF5IGNvbnRhaW5zIGhvbGVzIG9yIGlzIG90aGVyd2lzZSBpbiBhbiBhYm5vcm1hbCBz
dGF0ZSwKICAgICAvLyB1c2UgdGhlIGdlbmVyaWMgYWxnb3JpdGhtIGluIEFycmF5UHJvdG90eXBl
LgotICAgIGlmIChvbGRMZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBp
blNwYXJzZUluZGV4aW5nTW9kZSgpIHx8IHNob3VsZFVzZVNsb3dQdXQoaW5kZXhpbmdUeXBlKCkp
KQorICAgIGlmICgoc3RvcmFnZS0+aGFzSG9sZXMoKSAmJiB0aGlzLT5zdHJ1Y3R1cmUodm0pLT5o
b2xlc1JlcXVpcmVTcGVjaWFsQmVoYXZpb3Iodm0pKSAKKyAgICAgICAgfHwgaW5TcGFyc2VJbmRl
eGluZ01vZGUoKSAKKyAgICAgICAgfHwgc2hvdWxkVXNlU2xvd1B1dChpbmRleGluZ1R5cGUoKSkp
IHsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgIGlmICghb2xkTGVuZ3RoKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTcxMCwxMCArNzEzLDIyIEBAIGJvb2wgSlNBcnJheTo6
c2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UKICAgICAgICAgLy8gYWZ0ZXIgdGhlIHNoaWZ0IHJl
Z2lvbiwgc28gd2UgbW92ZSB0aGUgZWxlbWVudHMgYmVmb3JlIHRvIHRoZSByaWdodC4KICAgICAg
ICAgaWYgKG51bUVsZW1lbnRzQmVmb3JlU2hpZnRSZWdpb24pIHsKICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGNvdW50ICsgc3RhcnRJbmRleCA8PSB2ZWN0b3JMZW5ndGgpOwotICAgICAgICAg
ICAgbWVtbW92ZSgKLSAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvciArIGNvdW50LAot
ICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yLAotICAgICAgICAgICAgICAgIHNpemVv
ZihKU1ZhbHVlKSAqIHN0YXJ0SW5kZXgpOworICAgICAgICAgICAgaWYgKHN0b3JhZ2UtPmhhc0hv
bGVzKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBp
LS0gPiAwOykgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBkZXN0aW5hdGlvbkluZGV4
ID0gY291bnQgKyBpOworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHNvdXJjZSA9IHN0b3Jh
Z2UtPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGRlc3Qg
PSBzdG9yYWdlLT5tX3ZlY3RvcltkZXN0aW5hdGlvbkluZGV4XS5nZXQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gQW55IHRpbWUgd2Ugb3ZlcndyaXRlIGEgaG9sZSB3ZSBrbm93IHdlIG92ZXJj
b3VudGVkIHRoZSBudW1iZXIgb2YgdmFsdWVzIHdlIHJlbW92ZWQgCisgICAgICAgICAgICAgICAg
ICAgIC8vIHdoZW4gd2Ugc3VidHJhY3RlZCBjb3VudCBmcm9tIG1fbnVtVmFsdWVzSW5WZWN0b3Ig
YWJvdmUuCisgICAgICAgICAgICAgICAgICAgIGlmICghZGVzdCAmJiBkZXN0aW5hdGlvbkluZGV4
ID49IGZpcnN0SW5kZXhBZnRlclNoaWZ0UmVnaW9uKQorICAgICAgICAgICAgICAgICAgICAgICAg
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOworICAgICAgICAgICAgICAgICAgICBzdG9y
YWdlLT5tX3ZlY3Rvcltjb3VudCArIGldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoc291cmNlKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IG1lbW1vdmUoc3RvcmFnZS0+bV92ZWN0b3IgKyBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAg
c3RvcmFnZS0+bV92ZWN0b3IsCisgICAgICAgICAgICAgICAgICAgIHNpemVvZihKU1ZhbHVlKSAq
IHN0YXJ0SW5kZXgpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIC8vIEFkanVz
dCB0aGUgQnV0dGVyZmx5IGFuZCB0aGUgaW5kZXggYmlhcy4gV2Ugb25seSBuZWVkIHRvIGRvIHRo
aXMgaGVyZSBiZWNhdXNlIHdlJ3JlIGNoYW5naW5nCiAgICAgICAgIC8vIHRoZSBzdGFydCBvZiB0
aGUgQnV0dGVyZmx5LCB3aGljaCBuZWVkcyB0byBwb2ludCBhdCB0aGUgZmlyc3QgaW5kZXhlZCBw
cm9wZXJ0eSBpbiB0aGUgdXNlZApAQCAtNzI4LDEwICs3NDMsMjIgQEAgYm9vbCBKU0FycmF5Ojpz
aGlmdENvdW50V2l0aEFycmF5U3RvcmFnZQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFRoZSBu
dW1iZXIgb2YgZWxlbWVudHMgYmVmb3JlIHRoZSBzaGlmdCByZWdpb24gaXMgZ3JlYXRlciB0aGFu
IG9yIGVxdWFsIHRvIHRoZSBudW1iZXIgCiAgICAgICAgIC8vIG9mIGVsZW1lbnRzIGFmdGVyIHRo
ZSBzaGlmdCByZWdpb24sIHNvIHdlIG1vdmUgdGhlIGVsZW1lbnRzIGFmdGVyIHRoZSBzaGlmdCBy
ZWdpb24gdG8gdGhlIGxlZnQuCi0gICAgICAgIG1lbW1vdmUoCi0gICAgICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvciArIHN0YXJ0SW5kZXgsCi0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvciAr
IGZpcnN0SW5kZXhBZnRlclNoaWZ0UmVnaW9uLAotICAgICAgICAgICAgc2l6ZW9mKEpTVmFsdWUp
ICogbnVtRWxlbWVudHNBZnRlclNoaWZ0UmVnaW9uKTsKKyAgICAgICAgaWYgKHN0b3JhZ2UtPmhh
c0hvbGVzKCkpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1FbGVt
ZW50c0FmdGVyU2hpZnRSZWdpb247ICsraSkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRl
c3RpbmF0aW9uSW5kZXggPSBzdGFydEluZGV4ICsgaTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVl
IHNvdXJjZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ZpcnN0SW5kZXhBZnRlclNoaWZ0UmVnaW9uICsg
aV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBkZXN0ID0gc3RvcmFnZS0+bV92ZWN0
b3JbZGVzdGluYXRpb25JbmRleF0uZ2V0KCk7CisgICAgICAgICAgICAgICAgLy8gQW55IHRpbWUg
d2Ugb3ZlcndyaXRlIGEgaG9sZSB3ZSBrbm93IHdlIG92ZXJjb3VudGVkIHRoZSBudW1iZXIgb2Yg
dmFsdWVzIHdlIHJlbW92ZWQgCisgICAgICAgICAgICAgICAgLy8gd2hlbiB3ZSBzdWJ0cmFjdGVk
IGNvdW50IGZyb20gbV9udW1WYWx1ZXNJblZlY3RvciBhYm92ZS4KKyAgICAgICAgICAgICAgICBp
ZiAoIWRlc3QgJiYgZGVzdGluYXRpb25JbmRleCA8IGZpcnN0SW5kZXhBZnRlclNoaWZ0UmVnaW9u
KQorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7Cisg
ICAgICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3Jbc3RhcnRJbmRleCArIGldLnNldFdpdGhv
dXRXcml0ZUJhcnJpZXIoc291cmNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIG1lbW1vdmUoc3RvcmFnZS0+bV92ZWN0b3IgKyBzdGFydEluZGV4LAorICAg
ICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yICsgZmlyc3RJbmRleEFmdGVyU2hpZnRSZWdp
b24sCisgICAgICAgICAgICAgICAgc2l6ZW9mKEpTVmFsdWUpICogbnVtRWxlbWVudHNBZnRlclNo
aWZ0UmVnaW9uKTsKKyAgICAgICAgfQogICAgICAgICAvLyBDbGVhciB0aGUgc2xvdHMgb2YgdGhl
IGVsZW1lbnRzIHdlIGp1c3QgbW92ZWQuCiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0T2ZFbXB0eVZl
Y3RvclRhaWwgPSB1c2VkVmVjdG9yTGVuZ3RoIC0gY291bnQ7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IHN0YXJ0T2ZFbXB0eVZlY3RvclRhaWw7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kp
CkBAIC03NDUsOCArNzcyLDkgQEAgYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFycmF5U3Rv
cmFnZQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRo
QW55SW5kZXhpbmdUeXBlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5z
aWduZWQgY291bnQpCitib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBl
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQmIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQog
eworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoY291bnQgPiAw
KTsKICAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CkBAIC03NjUsMjcgKzc5Mywy
OCBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUCiAgICAgICAgIC8v
IFdlIG1heSBoYXZlIHRvIHdhbGsgdGhlIGVudGlyZSBhcnJheSB0byBkbyB0aGUgc2hpZnQuIFdl
J3JlIHdpbGxpbmcgdG8gZG8KICAgICAgICAgLy8gc28gb25seSBpZiBpdCdzIG5vdCBob3JyaWJs
eSBzbG93LgogICAgICAgICBpZiAob2xkTGVuZ3RoIC0gKHN0YXJ0SW5kZXggKyBjb3VudCkgPj0g
TUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkKLSAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0
aEFycmF5U3RvcmFnZShzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMt
PnZtKCkpKTsKKyAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSh2
bSwgc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZSh2bSkpOwogCiAgICAgICAg
IC8vIFN0b3JpbmcgdG8gYSBob2xlIGlzIGZpbmUgc2luY2Ugd2UncmUgc3RpbGwgaGF2aW5nIGEg
Z29vZCB0aW1lLiBCdXQgcmVhZGluZyBmcm9tIGEgaG9sZSAKICAgICAgICAgLy8gaXMgdG90YWxs
eSBub3QgZmluZSwgc2luY2Ugd2UgbWlnaHQgaGF2ZSB0byByZWFkIGZyb20gdGhlIHByb3RvIGNo
YWluLgogICAgICAgICAvLyBXZSBoYXZlIHRvIGNoZWNrIGZvciBob2xlcyBiZWZvcmUgd2Ugc3Rh
cnQgbW92aW5nIHRoaW5ncyBhcm91bmQgc28gdGhhdCB3ZSBkb24ndCBnZXQgaGFsZndheSAKICAg
ICAgICAgLy8gdGhyb3VnaCBzaGlmdGluZyBhbmQgdGhlbiByZWFsaXplIHdlIHNob3VsZCBoYXZl
IGJlZW4gaW4gQXJyYXlTdG9yYWdlIG1vZGUuCiAgICAgICAgIHVuc2lnbmVkIGVuZCA9IG9sZExl
bmd0aCAtIGNvdW50OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBpIDwg
ZW5kOyArK2kpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1
b3VzKClbaSArIGNvdW50XS5nZXQoKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghdikpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5k
ZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkpOworICAgICAgICBpZiAo
dGhpcy0+c3RydWN0dXJlKHZtKS0+aG9sZXNSZXF1aXJlU3BlY2lhbEJlaGF2aW9yKHZtKSkgewor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRJbmRleDsgaSA8IGVuZDsgKytpKSB7
CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtp
ICsgY291bnRdLmdldCgpOworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWSghdikpIHsKKyAg
ICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IGk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSh2bSwgc3RhcnRJbmRleCwgY291bnQsIGVu
c3VyZUFycmF5U3RvcmFnZSh2bSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtZW1tb3ZlKG1f
YnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpICsgc3RhcnRJbmRleCwgCisgICAgICAgICAg
ICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCkgKyBzdGFydEluZGV4ICsgY291
bnQsIAorICAgICAgICAgICAgICAgIHNpemVvZihKU1ZhbHVlKSAqIChlbmQgLSBzdGFydEluZGV4
KSk7CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBp
IDwgZW5kOyArK2kpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbaSArIGNvdW50XS5nZXQoKTsKLSAgICAgICAgICAgIEFTU0VSVCh2KTsKLSAgICAg
ICAgICAgIC8vIE5vIG5lZWQgZm9yIGEgYmFycmllciBzaW5jZSB3ZSdyZSBqdXN0IG1vdmluZyBk
YXRhIGFyb3VuZCBpbiB0aGUgc2FtZSB2ZWN0b3IuCi0gICAgICAgICAgICAvLyBUaGlzIGlzIGlu
IGxpbmUgd2l0aCBvdXIgc3RhbmRpbmcgYXNzdW1wdGlvbiB0aGF0IHdlIHdvbid0IGhhdmUgYSBk
ZWxldGlvbgotICAgICAgICAgICAgLy8gYmFycmllci4KLSAgICAgICAgICAgIG1fYnV0dGVyZmx5
LT5jb250aWd1b3VzKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKLSAgICAgICAgfQog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmQ7IGkgPCBvbGRMZW5ndGg7ICsraSkKICAgICAg
ICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsKICAgICAgICAgCkBA
IC04MDAsNyArODI5LDcgQEAgYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFueUluZGV4aW5n
VAogICAgICAgICAvLyBXZSBtYXkgaGF2ZSB0byB3YWxrIHRoZSBlbnRpcmUgYXJyYXkgdG8gZG8g
dGhlIHNoaWZ0LiBXZSdyZSB3aWxsaW5nIHRvIGRvCiAgICAgICAgIC8vIHNvIG9ubHkgaWYgaXQn
cyBub3QgaG9ycmlibHkgc2xvdy4KICAgICAgICAgaWYgKG9sZExlbmd0aCAtIChzdGFydEluZGV4
ICsgY291bnQpID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpCi0gICAgICAgICAgICByZXR1cm4g
c2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uoc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5
U3RvcmFnZShleGVjLT52bSgpKSk7CisgICAgICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhB
cnJheVN0b3JhZ2Uodm0sIHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2Uodm0p
KTsKIAogICAgICAgICAvLyBTdG9yaW5nIHRvIGEgaG9sZSBpcyBmaW5lIHNpbmNlIHdlJ3JlIHN0
aWxsIGhhdmluZyBhIGdvb2QgdGltZS4gQnV0IHJlYWRpbmcgZnJvbSBhIGhvbGUgCiAgICAgICAg
IC8vIGlzIHRvdGFsbHkgbm90IGZpbmUsIHNpbmNlIHdlIG1pZ2h0IGhhdmUgdG8gcmVhZCBmcm9t
IHRoZSBwcm90byBjaGFpbi4KQEAgLTgxMCwxNSArODM5LDcgQEAgYm9vbCBKU0FycmF5OjpzaGlm
dENvdW50V2l0aEFueUluZGV4aW5nVAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydElu
ZGV4OyBpIDwgZW5kOyArK2kpIHsKICAgICAgICAgICAgIGRvdWJsZSB2ID0gbV9idXR0ZXJmbHkt
PmNvbnRpZ3VvdXNEb3VibGUoKVtpICsgY291bnRdOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KHYgIT0gdikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9y
YWdlKHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkpOwot
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRJ
bmRleDsgaSA8IGVuZDsgKytpKSB7Ci0gICAgICAgICAgICBkb3VibGUgdiA9IG1fYnV0dGVyZmx5
LT5jb250aWd1b3VzRG91YmxlKClbaSArIGNvdW50XTsKLSAgICAgICAgICAgIEFTU0VSVCh2ID09
IHYpOwotICAgICAgICAgICAgLy8gTm8gbmVlZCBmb3IgYSBiYXJyaWVyIHNpbmNlIHdlJ3JlIGp1
c3QgbW92aW5nIGRhdGEgYXJvdW5kIGluIHRoZSBzYW1lIHZlY3Rvci4KLSAgICAgICAgICAgIC8v
IFRoaXMgaXMgaW4gbGluZSB3aXRoIG91ciBzdGFuZGluZyBhc3N1bXB0aW9uIHRoYXQgd2Ugd29u
J3QgaGF2ZSBhIGRlbGV0aW9uCi0gICAgICAgICAgICAvLyBiYXJyaWVyLgorICAgICAgICAgICAg
ICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSh2bSwgaSwgY291bnQsIGVuc3Vy
ZUFycmF5U3RvcmFnZSh2bSkpOwogICAgICAgICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNE
b3VibGUoKVtpXSA9IHY7CiAgICAgICAgIH0KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZW5k
OyBpIDwgb2xkTGVuZ3RoOyArK2kpCkBAIC04MzAsNyArODUxLDcgQEAgYm9vbCBKU0FycmF5Ojpz
aGlmdENvdW50V2l0aEFueUluZGV4aW5nVAogICAgICAgICAKICAgICBjYXNlIEFycmF5V2l0aEFy
cmF5U3RvcmFnZToKICAgICBjYXNlIEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAg
ICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShzdGFydEluZGV4LCBjb3VudCwg
YXJyYXlTdG9yYWdlKCkpOworICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3Jh
Z2Uodm0sIHN0YXJ0SW5kZXgsIGNvdW50LCBhcnJheVN0b3JhZ2UoKSk7CiAgICAgICAgIAogICAg
IGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7CkBAIC04NDcsNyArODY4LDcgQEAgYm9vbCBKU0Fy
cmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYQogCiAgICAgLy8gSWYgdGhlIGFycmF5IGNv
bnRhaW5zIGhvbGVzIG9yIGlzIG90aGVyd2lzZSBpbiBhbiBhYm5vcm1hbCBzdGF0ZSwKICAgICAv
LyB1c2UgdGhlIGdlbmVyaWMgYWxnb3JpdGhtIGluIEFycmF5UHJvdG90eXBlLgotICAgIGlmIChs
ZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBzdG9yYWdlLT5pblNwYXJz
ZU1vZGUoKSB8fCBzaG91bGRVc2VTbG93UHV0KGluZGV4aW5nVHlwZSgpKSkKKyAgICBpZiAoc3Rv
cmFnZS0+aGFzSG9sZXMoKSB8fCBzdG9yYWdlLT5pblNwYXJzZU1vZGUoKSB8fCBzaG91bGRVc2VT
bG93UHV0KGluZGV4aW5nVHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYm9v
bCBtb3ZlRnJvbnQgPSAhc3RhcnRJbmRleCB8fCBzdGFydEluZGV4IDwgbGVuZ3RoIC8gMjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDE2OTA1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBj
b3B5KQpAQCAtODksMTQgKzg5LDE0IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgc2hpZnRDb3VudEZv
clNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291
bnQpCiAgICAgewotICAgICAgICByZXR1cm4gc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uoc3Rh
cnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT52bSgpKSk7CisgICAgICAg
IHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShleGVjLT52bSgpLCBzdGFydEluZGV4
LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMtPnZtKCkpKTsKICAgICB9Ci0gICAgYm9v
bCBzaGlmdENvdW50Rm9yU3BsaWNlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRl
eCwgdW5zaWduZWQgY291bnQpCisgICAgYm9vbCBzaGlmdENvdW50Rm9yU3BsaWNlKEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQmIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQogICAgIHsKICAg
ICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKGV4ZWMsIHN0YXJ0SW5k
ZXgsIGNvdW50KTsKICAgICB9CiAgICAgdGVtcGxhdGU8U2hpZnRDb3VudE1vZGUgc2hpZnRDb3Vu
dE1vZGU+Ci0gICAgYm9vbCBzaGlmdENvdW50KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3Rh
cnRJbmRleCwgdW5zaWduZWQgY291bnQpCisgICAgYm9vbCBzaGlmdENvdW50KEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQmIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQogICAgIHsKICAgICAg
ICAgc3dpdGNoIChzaGlmdENvdW50TW9kZSkgewogICAgICAgICBjYXNlIFNoaWZ0Q291bnRGb3JT
aGlmdDoKQEAgLTE1Niw4ICsxNTYsOCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gIW1hcCB8
fCAhbWFwLT5sZW5ndGhJc1JlYWRPbmx5KCk7CiAgICAgfQogICAgICAgICAKLSAgICBib29sIHNo
aWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHN0YXJ0SW5k
ZXgsIHVuc2lnbmVkIGNvdW50KTsKLSAgICBib29sIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdl
KHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50LCBBcnJheVN0b3JhZ2UqKTsKKyAg
ICBib29sIHNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKEV4ZWNTdGF0ZSosIHVuc2lnbmVk
JiBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCk7CisgICAgYm9vbCBzaGlmdENvdW50V2l0aEFy
cmF5U3RvcmFnZShWTSYsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50LCBBcnJh
eVN0b3JhZ2UqKTsKIAogICAgIGJvb2wgdW5zaGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZShF
eGVjU3RhdGUqLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCk7CiAgICAgYm9v
bCB1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHN0YXJ0
SW5kZXgsIHVuc2lnbmVkIGNvdW50LCBBcnJheVN0b3JhZ2UqKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTY5MDUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzg3LDYgKzM4NywzMCBAQCBib29sIFN0cnVjdHVyZTo6YW55T2JqZWN0SW5DaGFpbk1h
eUludGVyCiAgICAgfQogfQogCitib29sIFN0cnVjdHVyZTo6aG9sZXNSZXF1aXJlU3BlY2lhbEJl
aGF2aW9yKFZNJiB2bSkgY29uc3QKK3sKKyAgICBpZiAodGhpcy0+bWF5SW50ZXJjZXB0SW5kZXhl
ZEFjY2Vzc2VzKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgSlNWYWx1ZSBwcm90b3R5
cGUgPSB0aGlzLT5zdG9yZWRQcm90b3R5cGUoKTsKKyAgICBpZiAoIXByb3RvdHlwZS5pc09iamVj
dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2Jq
ZWN0KHByb3RvdHlwZSk7CisKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBTdHJ1Y3R1cmUm
IHN0cnVjdHVyZSA9ICpvYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgIGlmIChoYXNJbmRl
eGVkUHJvcGVydGllcyhvYmplY3QtPmluZGV4aW5nVHlwZSgpKSB8fCBzdHJ1Y3R1cmUubWF5SW50
ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgcHJvdG90eXBlID0gc3RydWN0dXJlLnN0b3JlZFByb3RvdHlwZSgpOworICAgICAgICBpZiAo
IXByb3RvdHlwZS5pc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBvYmplY3QgPSBhc09iamVjdChwcm90b3R5cGUpOworICAgIH0KKworICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBib29sIFN0cnVjdHVy
ZTo6bmVlZHNTbG93UHV0SW5kZXhpbmcoKSBjb25zdAogewogICAgIHJldHVybiBhbnlPYmplY3RJ
bkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxNjkwNTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTY4
LDYgKzE2OCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgICAgIAogICAgIGJvb2wgYW55T2JqZWN0
SW5DaGFpbk1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpIGNvbnN0OworICAgIGJvb2wgaG9s
ZXNSZXF1aXJlU3BlY2lhbEJlaGF2aW9yKFZNJikgY29uc3Q7CiAgICAgICAgIAogICAgIGJvb2wg
bmVlZHNTbG93UHV0SW5kZXhpbmcoKSBjb25zdDsKICAgICBOb25Qcm9wZXJ0eVRyYW5zaXRpb24g
c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpIGNvbnN0OwpJbmRleDogTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNp
b24gMTY5MDc5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMzkgQEAKKzIwMTQtMDUtMTkgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFw
cGxlLmNvbT4KKworICAgICAgICBKU0FycmF5OjpzaGlmdENvdW50V2l0aCogY291bGQgYmUgbW9y
ZSBlZmZpY2llbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzMzAxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZGVkIGEgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0IHdoaWNoIHRlc3RzIHRoZSBj
b250aWd1b3VzIHNoaWZ0IGNhc2UuIFdlJ3JlIH44NSUgZmFzdGVyIAorICAgICAgICBvbiB0aGlz
IG1pY3JvYmVuY2htYXJrIHdpdGggdGhpcyBwYXRjaC4KKworICAgICAgICBBbHNvIGFkZGVkIGEg
YnVuY2ggb2YgdGVzdHMgZm9yIGVhY2ggcGVybXV0YXRpb24gb2YgY29udGlndW91cy9hcnJheSBz
dG9yYWdlIHdpdGggbm8gaG9sZXMsIGhvbGVzLAorICAgICAgICBhbmQgaG9sZXMgdGhhdCByZXF1
aXJlIHNwZWNpYWwgYmVoYXZpb3IgKGUuZy4gaW5kZXhlZCBwcm9wZXJ0aWVzIGluIHRoZSBwcm90
b3R5cGUgY2hhaW4pLgorCisgICAgICAgICoganMvYXJyYXktc3RvcmFnZS1zcGxpY2UtaG9sZXMt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9hcnJheS1zdG9yYWdlLXNwbGljZS1o
b2xlcy1yZXF1aXJlLXNwZWNpYWwtYmVoYXZpb3ItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBqcy9hcnJheS1zdG9yYWdlLXNwbGljZS1ob2xlcy1yZXF1aXJlLXNwZWNpYWwtYmVoYXZp
b3IuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvYXJyYXktc3RvcmFnZS1zcGxpY2UtaG9sZXMu
aHRtbDogQWRkZWQuCisgICAgICAgICoganMvYXJyYXktc3RvcmFnZS1zcGxpY2Utbm8taG9sZXMt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9hcnJheS1zdG9yYWdlLXNwbGljZS1u
by1ob2xlcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9jb250aWd1b3VzLXNwbGljZS1ob2xl
cy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL2NvbnRpZ3VvdXMtc3BsaWNlLWhv
bGVzLXJlcXVpcmUtc3BlY2lhbC1iZWhhdmlvci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGpzL2NvbnRpZ3VvdXMtc3BsaWNlLWhvbGVzLXJlcXVpcmUtc3BlY2lhbC1iZWhhdmlvci5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9jb250aWd1b3VzLXNwbGljZS1ob2xlcy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBqcy9jb250aWd1b3VzLXNwbGljZS1uby1ob2xlcy1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL2NvbnRpZ3VvdXMtc3BsaWNlLW5vLWhvbGVzLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvYXJyYXktc3BsaWNlLWNvbnRpZ3VvdXMtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2FycmF5LXNwbGljZS1jb250
aWd1b3VzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2Fy
cmF5LXNwbGljZS1jb250aWd1b3VzLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAg
ICoganMvc2NyaXB0LXRlc3RzL2FycmF5LXN0b3JhZ2Utc3BsaWNlLWhvbGVzLXJlcXVpcmUtc3Bl
Y2lhbC1iZWhhdmlvci5qczogQWRkZWQuCisgICAgICAgICoganMvc2NyaXB0LXRlc3RzL2FycmF5
LXN0b3JhZ2Utc3BsaWNlLWhvbGVzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBqcy9zY3JpcHQtdGVz
dHMvYXJyYXktc3RvcmFnZS1zcGxpY2Utbm8taG9sZXMuanM6IEFkZGVkLgorICAgICAgICAqIGpz
L3NjcmlwdC10ZXN0cy9jb250aWd1b3VzLXNwbGljZS1ob2xlcy1yZXF1aXJlLXNwZWNpYWwtYmVo
YXZpb3IuanM6IEFkZGVkLgorICAgICAgICAqIGpzL3NjcmlwdC10ZXN0cy9jb250aWd1b3VzLXNw
bGljZS1ob2xlcy5qczogQWRkZWQuCisgICAgICAgICoganMvc2NyaXB0LXRlc3RzL2NvbnRpZ3Vv
dXMtc3BsaWNlLW5vLWhvbGVzLmpzOiBBZGRlZC4KKwogMjAxNC0wNS0xOSAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBTcGxpdCBzY3JvbGxpbmcgdHJl
ZSBTY3JvbGxpbmdOb2RlcyBpbnRvIEZyYW1lU2Nyb2xsaW5nTm9kZXMgYW5kIE92ZXJmbG93U2Ny
b2xsaW5nTm9kZXMKSW5kZXg6IExheW91dFRlc3RzL2pzL2FycmF5LXN0b3JhZ2Utc3BsaWNlLWhv
bGVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9hcnJheS1zdG9y
YWdlLXNwbGljZS1ob2xlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9qcy9hcnJheS1zdG9yYWdlLXNwbGljZS1ob2xlcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNyBAQAorVGVzdHMgZm9yIGNvcnJlY3QgYmVoYXZpb3Igb2Ygc3BsaWNl
IHdpdGggYXJyYXkgc3RvcmFnZSB3aXRoIGhvbGVzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworUEFTUyBhWzBdIGlzIDEKK1BBU1MgYVsxXSBpcyAyCitQQVNTIGFbMl0gaXMgMwor
UEFTUyBhWzNdIGlzIDQKK1BBU1MgYVs0XSBpcyA2CitQQVNTIGEuaGFzT3duUHJvcGVydHkoJzUn
KSBpcyBmYWxzZQorUEFTUyBhWzZdIGlzIDgKK1BBU1MgYVs3XSBpcyA5CitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMv
anMvYXJyYXktc3RvcmFnZS1zcGxpY2UtaG9sZXMtcmVxdWlyZS1zcGVjaWFsLWJlaGF2aW9yLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9hcnJheS1zdG9yYWdlLXNw
bGljZS1ob2xlcy1yZXF1aXJlLXNwZWNpYWwtYmVoYXZpb3ItZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvanMvYXJyYXktc3RvcmFnZS1zcGxpY2UtaG9sZXMtcmVxdWly
ZS1zcGVjaWFsLWJlaGF2aW9yLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDI1IEBACitUZXN0IHRvIGVuc3VyZSBjb3JyZWN0IGJlaGF2aW91ciBvZiBzcGxpY2UgaW4gYXJy
YXkgc3RvcmFnZSBtb2RlIHdpdGggaW5kZXhlZCBwcm9wZXJ0aWVzIGluIHRoZSBwcm90b3R5cGUg
Y2hhaW4uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGFbMF0gaXMgMQor
UEFTUyBhWzFdIGlzIDIKK1BBU1MgYVsyXSBpcyAzCitQQVNTIGFbM10gaXMgNQorUEFTUyBhWzRd
IGlzIDYKK1BBU1MgYVs1XSBpcyA3CitQQVNTIGFbNl0gaXMgOAorUEFTUyBhWzddIGlzIDkKK1BB
U1MgYlswXSBpcyAxCitQQVNTIGJbMV0gaXMgMgorUEFTUyBiWzJdIGlzIDMKK1BBU1MgYlszXSBp
cyA1CitQQVNTIGJbNF0gaXMgNgorUEFTUyBiWzVdIGlzIDcKK1BBU1MgYls2XSBpcyA4CitQQVNT
IGJbN10gaXMgOQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL2FycmF5LXN0b3JhZ2Utc3BsaWNlLWhvbGVzLXJl
cXVpcmUtc3BlY2lhbC1iZWhhdmlvci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pz
L2FycmF5LXN0b3JhZ2Utc3BsaWNlLWhvbGVzLXJlcXVpcmUtc3BlY2lhbC1iZWhhdmlvci5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvYXJyYXktc3RvcmFnZS1zcGxpY2UtaG9s
ZXMtcmVxdWlyZS1zcGVjaWFsLWJlaGF2aW9yLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2Fy
cmF5LXN0b3JhZ2Utc3BsaWNlLWhvbGVzLXJlcXVpcmUtc3BlY2lhbC1iZWhhdmlvci5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9hcnJheS1zdG9yYWdl
LXNwbGljZS1ob2xlcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL2FycmF5LXN0
b3JhZ2Utc3BsaWNlLWhvbGVzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9h
cnJheS1zdG9yYWdlLXNwbGljZS1ob2xlcy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9hcnJh
eS1zdG9yYWdlLXNwbGljZS1ob2xlcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy9qcy9hcnJheS1zdG9yYWdlLXNwbGljZS1uby1ob2xlcy1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvYXJyYXktc3RvcmFnZS1zcGxpY2Utbm8t
aG9sZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvYXJyYXkt
c3RvcmFnZS1zcGxpY2Utbm8taG9sZXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTcgQEAKK1Rlc3RzIGFycmF5LnNwbGljZSBiZWhhdmlvciBmb3IgYXJyYXkgc3RvcmFn
ZSB3aXRoIG5vIGhvbGVzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBh
WzBdIGlzIDEKK1BBU1MgYVsxXSBpcyAyCitQQVNTIGFbMl0gaXMgMworUEFTUyBhWzNdIGlzIDQK
K1BBU1MgYVs0XSBpcyA2CitQQVNTIGFbNV0gaXMgNworUEFTUyBhWzZdIGlzIDgKK1BBU1MgYVs3
XSBpcyA5CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpJbmRleDogTGF5b3V0VGVzdHMvanMvYXJyYXktc3RvcmFnZS1zcGxpY2Utbm8taG9sZXMuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9hcnJheS1zdG9yYWdlLXNwbGljZS1uby1o
b2xlcy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvYXJyYXktc3RvcmFnZS1z
cGxpY2Utbm8taG9sZXMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACis8IURP
Q1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvYXJyYXktc3RvcmFnZS1z
cGxpY2Utbm8taG9sZXMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvanMvY29udGlndW91cy1zcGxpY2UtaG9sZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL2NvbnRpZ3VvdXMtc3BsaWNlLWhvbGVzLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL2NvbnRpZ3VvdXMtc3BsaWNlLWhvbGVzLWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4IEBACitUZXN0cyBhcnJheS5z
cGxpY2UgYmVoYXZpb3IgZm9yIGNvbnRpZ3VvdXMgc3RvcmFnZSB3aXRoIGhvbGVzLgorCitPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBhWzBdIGlzIDEKK1BBU1MgYVsxXSBpcyAy
CitQQVNTIGFbMl0gaXMgMworUEFTUyBhWzNdIGlzIDQKK1BBU1MgYVs0XSBpcyA1CitQQVNTIGFb
NV0gaXMgNgorUEFTUyBhWzZdIGlzIDcKK1BBU1MgYVs3XSBpcyA4CitQQVNTIGEuaGFzT3duUHJv
cGVydHkoJzgnKSBpcyBmYWxzZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL2NvbnRpZ3VvdXMtc3BsaWNlLWhv
bGVzLXJlcXVpcmUtc3BlY2lhbC1iZWhhdmlvci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvanMvY29udGlndW91cy1zcGxpY2UtaG9sZXMtcmVxdWlyZS1zcGVjaWFsLWJl
aGF2aW9yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL2NvbnRp
Z3VvdXMtc3BsaWNlLWhvbGVzLXJlcXVpcmUtc3BlY2lhbC1iZWhhdmlvci1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOCBAQAorVGVzdHMgYXJyYXkuc3BsaWNlIGJlaGF2
aW9yIHdpdGggaG9sZXkgY29udGlndW91cyBzdG9yYWdlIHdpdGggaW5kZXhlZCBwcm9wZXJ0aWVz
IGluIHRoZSBwcm90b3R5cGUgY2hhaW4uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitQQVNTIGFbMF0gaXMgMQorUEFTUyBhWzFdIGlzIDIKK1BBU1MgYVsyXSBpcyAzCitQQVNTIGFb
M10gaXMgNAorUEFTUyBhWzRdIGlzIDUKK1BBU1MgYVs1XSBpcyA2CitQQVNTIGFbNl0gaXMgNwor
UEFTUyBhWzddIGlzIDgKK1BBU1MgYVs4XSBpcyA5CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvY29udGlndW91
cy1zcGxpY2UtaG9sZXMtcmVxdWlyZS1zcGVjaWFsLWJlaGF2aW9yLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvY29udGlndW91cy1zcGxpY2UtaG9sZXMtcmVxdWlyZS1zcGVjaWFs
LWJlaGF2aW9yLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9jb250aWd1b3Vz
LXNwbGljZS1ob2xlcy1yZXF1aXJlLXNwZWNpYWwtYmVoYXZpb3IuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBI
VE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3Jp
cHQtdGVzdHMvY29udGlndW91cy1zcGxpY2UtaG9sZXMtcmVxdWlyZS1zcGVjaWFsLWJlaGF2aW9y
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL2NvbnRp
Z3VvdXMtc3BsaWNlLWhvbGVzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvY29u
dGlndW91cy1zcGxpY2UtaG9sZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pz
L2NvbnRpZ3VvdXMtc3BsaWNlLWhvbGVzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2NvbnRp
Z3VvdXMtc3BsaWNlLWhvbGVzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2pzL2NvbnRpZ3VvdXMtc3BsaWNlLW5vLWhvbGVzLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9jb250aWd1b3VzLXNwbGljZS1uby1ob2xlcy1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9jb250aWd1b3VzLXNwbGlj
ZS1uby1ob2xlcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOCBAQAor
VGVzdHMgYXJyYXkuc3BsaWNlIGJlaGF2aW9yIGZvciBjb250aWd1b3VzIHN0b3JhZ2Ugd2l0aCBu
byBob2xlcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgYVswXSBpcyAw
CitQQVNTIGFbMV0gaXMgMQorUEFTUyBhWzJdIGlzIDIKK1BBU1MgYVszXSBpcyA0CitQQVNTIGFb
NF0gaXMgNQorUEFTUyBhWzVdIGlzIDYKK1BBU1MgYVs2XSBpcyA3CitQQVNTIGFbN10gaXMgOAor
UEFTUyBhWzhdIGlzIDkKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9jb250aWd1b3VzLXNwbGljZS1uby1ob2xl
cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL2NvbnRpZ3VvdXMtc3BsaWNlLW5v
LWhvbGVzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9jb250aWd1b3VzLXNw
bGljZS1uby1ob2xlcy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKKzwhRE9D
VFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9jb250aWd1b3VzLXNwbGlj
ZS1uby1ob2xlcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2FycmF5LXNwbGljZS1jb250aWd1b3VzLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2FycmF5LXNwbGljZS1jb250aWd1b3VzLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvYXJyYXkt
c3BsaWNlLWNvbnRpZ3VvdXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTAgQEAKK0pTUmVncmVzcy9hcnJheS1zcGxpY2UtY29udGlndW91cworCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9hcnJheS1zcGxpY2UtY29udGlndW91cy5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvYXJyYXktc3BsaWNlLWNvbnRpZ3VvdXMuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvYXJyYXktc3BsaWNlLWNvbnRpZ3VvdXMu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJM
SUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9hcnJheS1zcGxpY2UtY29udGlndW91cy5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9hcnJheS1zcGxpY2UtY29udGlndW91cy5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9hcnJheS1zcGxpY2UtY29udGlndW91
cy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3Rz
L2FycmF5LXNwbGljZS1jb250aWd1b3VzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYg
QEAKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICB2YXIgYSA9IG5ldyBBcnJheSgxMDAwKTsKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IDEwMDA7ICsraSkgeworICAgICAgICBpZiAoaSAlIDcgPT09IDAp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYVtpXSA9IGk7CisgICAgfQorCisgICAg
dmFyIG5pdGVycyA9IDEwMDAwOworICAgIHZhciByZW1vdmUgPSB0cnVlOworICAgIHZhciBsYXN0
UmVtb3ZlZEl0ZW0gPSBudWxsOworICAgIHZhciBsYXN0UmVtb3ZlZEluZGV4ID0gbnVsbDsKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IG5pdGVyczsgKytpKSB7CisgICAgICAgIGlmIChyZW1vdmUp
IHsKKyAgICAgICAgICAgIGxhc3RSZW1vdmVkSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9t
KCkgKiBhLmxlbmd0aCk7CisgICAgICAgICAgICBsYXN0UmVtb3ZlZEl0ZW0gPSBhW2xhc3RSZW1v
dmVkSW5kZXhdOworICAgICAgICAgICAgYS5zcGxpY2UobGFzdFJlbW92ZWRJbmRleCwgMSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhLnNwbGljZShsYXN0UmVtb3ZlZEluZGV4LCAw
LCBsYXN0UmVtb3ZlZEl0ZW0pOworICAgICAgICB9CisgICAgICAgIHJlbW92ZSA9ICFyZW1vdmU7
CisgICAgfQorICAgIGlmIChhLmxlbmd0aCAhPT0gMTAwMCkKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJJbmNvcnJlY3QgbGVuZ3RoIik7Cit9OworZm9vKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9q
cy9zY3JpcHQtdGVzdHMvYXJyYXktc3RvcmFnZS1zcGxpY2UtaG9sZXMtcmVxdWlyZS1zcGVjaWFs
LWJlaGF2aW9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9h
cnJheS1zdG9yYWdlLXNwbGljZS1ob2xlcy1yZXF1aXJlLXNwZWNpYWwtYmVoYXZpb3IuanMJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvYXJyYXktc3RvcmFnZS1z
cGxpY2UtaG9sZXMtcmVxdWlyZS1zcGVjaWFsLWJlaGF2aW9yLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzYgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0IHRvIGVuc3VyZSBjb3JyZWN0IGJlaGF2
aW91ciBvZiBzcGxpY2UgaW4gYXJyYXkgc3RvcmFnZSBtb2RlIHdpdGggaW5kZXhlZCBwcm9wZXJ0
aWVzIGluIHRoZSBwcm90b3R5cGUgY2hhaW4uIik7CisKKy8vIEFycmF5IHN0b3JhZ2Ugc2hpZnQg
aG9sZXMgcmVxdWlyZSBzcGVjaWFsIGJlaGF2aW9yLgordmFyIHRyaWNreUluZGV4ID0gNjsKK09i
amVjdC5wcm90b3R5cGVbdHJpY2t5SW5kZXhdID0gdHJpY2t5SW5kZXg7CisKK3ZhciBhID0gbmV3
IEFycmF5KDEwKTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7ICsraSkgeworICAgIGlm
IChpID09PSB0cmlja3lJbmRleCkKKyAgICAgICAgY29udGludWU7CisgICAgYVtpXSA9IGk7Cit9
CisKK2Euc2hpZnQoKTsgLy8gQ29udmVydHMgdG8gYXJyYXkgc3RvcmFnZSBtb2RlLgordmFyIHN0
YXJ0SW5kZXggPSAzOworYS5zcGxpY2Uoc3RhcnRJbmRleCwgMSk7CisKK2ZvciAodmFyIGkgPSAw
OyBpIDwgc3RhcnRJbmRleDsgKytpKQorICAgIHNob3VsZEJlKCJhWyIgKyBpICsgIl0iLCAiIiAr
IChpICsgMSkpOworCitmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSA8IGEubGVuZ3RoOyArK2kp
CisgICAgc2hvdWxkQmUoImFbIiArIGkgKyAiXSIsICIiICsgKGkgKyAyKSk7CisKKy8vIEFycmF5
IHN0b3JhZ2Ugc2hpZnQgaG9sZXMgcmVxdWlyZSBzcGVjaWFsIGJlaGF2aW9yLCBidXQgdGhlcmUg
YXJlbid0IGFueSBob2xlcy4KK3ZhciBiID0gbmV3IEFycmF5KDEwKTsKK2ZvciAodmFyIGkgPSAw
OyBpIDwgYi5sZW5ndGg7ICsraSkKKyAgICBiW2ldID0gaTsKKworYi5zaGlmdCgpOyAvLyBDb252
ZXJ0cyB0byBhcnJheSBzdG9yYWdlIG1vZGUuCitiLnNwbGljZShzdGFydEluZGV4LCAxKTsKKwor
Zm9yICh2YXIgaSA9IDA7IGkgPCBzdGFydEluZGV4OyArK2kpCisgICAgc2hvdWxkQmUoImJbIiAr
IGkgKyAiXSIsICIiICsgKGkgKyAxKSk7CisKK2ZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpIDwg
Yi5sZW5ndGg7ICsraSkKKyAgICBzaG91bGRCZSgiYlsiICsgaSArICJdIiwgIiIgKyAoaSArIDIp
KTsKSW5kZXg6IExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9hcnJheS1zdG9yYWdlLXNwbGlj
ZS1ob2xlcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvYXJy
YXktc3RvcmFnZS1zcGxpY2UtaG9sZXMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9q
cy9zY3JpcHQtdGVzdHMvYXJyYXktc3RvcmFnZS1zcGxpY2UtaG9sZXMuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyNyBAQAorZGVzY3JpcHRpb24oIlRlc3RzIGZvciBjb3JyZWN0IGJlaGF2
aW9yIG9mIHNwbGljZSB3aXRoIGFycmF5IHN0b3JhZ2Ugd2l0aCBob2xlcy4iKTsKKworLy8gQXJy
YXkgc3RvcmFnZSBzcGxpY2UgaG9sZXMuCit2YXIgaG9sZUluZGV4ID0gNzsKKwordmFyIGEgPSBu
ZXcgQXJyYXkoMTApOworZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgKytpKSB7CisgICAg
aWYgKGkgPT09IGhvbGVJbmRleCkKKyAgICAgICAgY29udGludWU7CisgICAgYVtpXSA9IGk7Cit9
CisKK2Euc2hpZnQoKTsgLy8gQ29udmVydHMgdG8gYXJyYXkgc3RvcmFnZSBtb2RlLgorCit2YXIg
c3RhcnRJbmRleCA9IDQ7CithLnNwbGljZShzdGFydEluZGV4LCAxKTsKKworZm9yICh2YXIgaSA9
IDA7IGkgPCBzdGFydEluZGV4OyArK2kpCisgICAgc2hvdWxkQmUoImFbIiArIGkgKyAiXSIsICIi
ICsgKGkgKyAxKSk7CisKK2ZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpIDwgYS5sZW5ndGg7ICsr
aSkgeworICAgIGlmIChpID09PSBob2xlSW5kZXggLSAyKSB7CisgICAgICAgIHNob3VsZEJlKCJh
Lmhhc093blByb3BlcnR5KCciICsgaSArICInKSIsICJmYWxzZSIpOworICAgICAgICBjb250aW51
ZTsKKyAgICB9CisgICAgc2hvdWxkQmUoImFbIiArIGkgKyAiXSIsICIiICsgKGkgKyAyKSk7Cit9
CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvYXJyYXktc3RvcmFnZS1zcGxpY2Ut
bm8taG9sZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2Fy
cmF5LXN0b3JhZ2Utc3BsaWNlLW5vLWhvbGVzLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvanMvc2NyaXB0LXRlc3RzL2FycmF5LXN0b3JhZ2Utc3BsaWNlLW5vLWhvbGVzLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0cyBhcnJheS5zcGxp
Y2UgYmVoYXZpb3IgZm9yIGFycmF5IHN0b3JhZ2Ugd2l0aCBubyBob2xlcy4iKTsKKworLy8gQXJy
YXkgc3RvcmFnZSBzcGxpY2Ugdy9vIGhvbGVzLgordmFyIGEgPSBuZXcgQXJyYXkoMTApOworZm9y
ICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgKytpKQorICAgIGFbaV0gPSBpOworCithLnNoaWZ0
KCk7IC8vIENvbnZlcnRzIHRvIGFycmF5IHN0b3JhZ2UgbW9kZS4KKwordmFyIHN0YXJ0SW5kZXgg
PSA0OworYS5zcGxpY2Uoc3RhcnRJbmRleCwgMSk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgc3Rh
cnRJbmRleDsgKytpKQorICAgIHNob3VsZEJlKCJhWyIgKyBpICsgIl0iLCAiIiArIChpICsgMSkp
OworCitmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSA8IGEubGVuZ3RoOyArK2kpCisgICAgc2hv
dWxkQmUoImFbIiArIGkgKyAiXSIsICIiICsgKGkgKyAyKSk7CkluZGV4OiBMYXlvdXRUZXN0cy9q
cy9zY3JpcHQtdGVzdHMvY29udGlndW91cy1zcGxpY2UtaG9sZXMtcmVxdWlyZS1zcGVjaWFsLWJl
aGF2aW9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9jb250
aWd1b3VzLXNwbGljZS1ob2xlcy1yZXF1aXJlLXNwZWNpYWwtYmVoYXZpb3IuanMJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvY29udGlndW91cy1zcGxpY2UtaG9s
ZXMtcmVxdWlyZS1zcGVjaWFsLWJlaGF2aW9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTYgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0cyBhcnJheS5zcGxpY2UgYmVoYXZpb3Igd2l0aCBob2xl
eSBjb250aWd1b3VzIHN0b3JhZ2Ugd2l0aCBpbmRleGVkIHByb3BlcnRpZXMgaW4gdGhlIHByb3Rv
dHlwZSBjaGFpbi4iKTsKKworLy8gQ29udGlndW91cyBzcGxpY2UgaG9sZXMgcmVxdWlyZSBzcGVj
aWFsIGJlaGF2aW9yLgordmFyIHRyaWNreUluZGV4ID0gOTsKK09iamVjdC5wcm90b3R5cGVbdHJp
Y2t5SW5kZXhdID0gdHJpY2t5SW5kZXg7CisKK3ZhciBhID0gbmV3IEFycmF5KDEwKTsKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7ICsraSkgeworICAgIGlmIChpID09PSB0cmlja3lJbmRl
eCkKKyAgICAgICAgY29udGludWU7CisgICAgYVtpXSA9IGk7Cit9CithLnNwbGljZSgwLCAxKTsK
K2ZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7ICsraSkgeworICAgIHNob3VsZEJlKCJhWyIg
KyBpICsgIl0iLCAiIiArIChpICsgMSkpOworfQpJbmRleDogTGF5b3V0VGVzdHMvanMvc2NyaXB0
LXRlc3RzL2NvbnRpZ3VvdXMtc3BsaWNlLWhvbGVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2pzL3NjcmlwdC10ZXN0cy9jb250aWd1b3VzLXNwbGljZS1ob2xlcy5qcwkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9jb250aWd1b3VzLXNwbGljZS1ob2xl
cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACitkZXNjcmlwdGlvbigiVGVzdHMg
YXJyYXkuc3BsaWNlIGJlaGF2aW9yIGZvciBjb250aWd1b3VzIHN0b3JhZ2Ugd2l0aCBob2xlcy4i
KTsKKworLy8gQ29udGlndW91cyBzcGxpY2Ugdy8gaG9sZXMuCit2YXIgdHJpY2t5SW5kZXggPSA5
OworCit2YXIgYSA9IG5ldyBBcnJheSgxMCk7Citmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3Ro
OyArK2kpIHsKKyAgICBpZiAoaSA9PT0gdHJpY2t5SW5kZXgpCisgICAgICAgIGNvbnRpbnVlOwor
ICAgIGFbaV0gPSBpOworfQorYS5zcGxpY2UoMCwgMSk7Citmb3IgKHZhciBpID0gMDsgaSA8IGEu
bGVuZ3RoOyArK2kpIHsKKyAgICBpZiAoaSA9PT0gdHJpY2t5SW5kZXggLSAxKSB7CisgICAgICAg
IHNob3VsZEJlKCJhLmhhc093blByb3BlcnR5KCciICsgaSArICInKSIsICJmYWxzZSIpOworICAg
ICAgICBjb250aW51ZTsKKyAgICB9CisgICAgc2hvdWxkQmUoImFbIiArIGkgKyAiXSIsICIiICsg
KGkgKyAxKSk7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvY29udGlndW91
cy1zcGxpY2Utbm8taG9sZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvc2NyaXB0
LXRlc3RzL2NvbnRpZ3VvdXMtc3BsaWNlLW5vLWhvbGVzLmpzCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2NvbnRpZ3VvdXMtc3BsaWNlLW5vLWhvbGVzLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0cyBhcnJheS5z
cGxpY2UgYmVoYXZpb3IgZm9yIGNvbnRpZ3VvdXMgc3RvcmFnZSB3aXRoIG5vIGhvbGVzLiIpOwor
Cit2YXIgYSA9IG5ldyBBcnJheSgxMCk7Citmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyAr
K2kpIHsKKyAgICBhW2ldID0gaTsKK30KK3ZhciBzdGFydEluZGV4ID0gMzsKK2Euc3BsaWNlKHN0
YXJ0SW5kZXgsIDEpOworZm9yICh2YXIgaSA9IDA7IGkgPCBzdGFydEluZGV4OyArK2kpIHsKKyAg
ICBzaG91bGRCZSgiYVsiICsgaSArICJdIiwgIiIgKyBpKTsKK30KKworZm9yICh2YXIgaSA9IHN0
YXJ0SW5kZXg7IGkgPCBhLmxlbmd0aDsgKytpKSB7CisgICAgc2hvdWxkQmUoImFbIiArIGkgKyAi
XSIsICIiICsgKGkgKyAxKSk7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231730</attachid>
            <date>2014-05-19 15:57:57 -0700</date>
            <delta_ts>2014-05-19 19:28:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133011-20140519155347.patch</filename>
            <type>text/plain</type>
            <size>35519</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY5MDc5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBA
CisyMDE0LTA1LTE5ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgSlNBcnJheTo6c2hpZnRDb3VudFdpdGgqIGNvdWxkIGJlIG1vcmUgZWZmaWNpZW50
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMwMTEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPdXIgY3Vy
cmVudCBpbXBsZW1lbnRhdGlvbnMgb2Ygc2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUgYW5k
IHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlIAorICAgICAgICBhcmUgc2NhcmVkIG9mIHRoZSBw
cmVzZW5jZSBvZiBhbnkgaG9sZXMgaW4gdGhlIGFycmF5LiBXZSBjYW4gbWl0aWdhdGUgdGhpcyBz
b21ld2hhdCBieSBlbmFibGluZyAKKyAgICAgICAgdGhlbSB0byBjb3JyZWN0bHkgaGFuZGxlIGhv
bGVzLCB0aHVzIGF2b2lkaW5nIHRoZSBzbG93ZXN0IG9mIHNsb3cgcGF0aHMgaW4gbW9zdCBjYXNl
cy4KKworICAgICAgICAqIHJ1bnRpbWUvQXJyYXlTdG9yYWdlLmg6CisgICAgICAgIChKU0M6OkFy
cmF5U3RvcmFnZTo6aW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAoSlNDOjpBcnJheVN0b3JhZ2U6
Omxlbmd0aCk6CisgICAgICAgIChKU0M6OkFycmF5U3RvcmFnZTo6aGFzSG9sZXMpOgorICAgICAg
ICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaDoKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFk
ZXI6OnB1YmxpY0xlbmd0aCk6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpmcm9tKToK
KyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpz
aGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNoaWZ0
Q291bnRXaXRoQW55SW5kZXhpbmdUeXBlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlm
dENvdW50V2l0aEFycmF5U3RvcmFnZSk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5Lmg6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OnNoaWZ0Q291bnRGb3JTaGlmdCk6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OnNoaWZ0Q291bnRGb3JTcGxpY2UpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpz
aGlmdENvdW50KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6aG9sZXNSZXF1aXJlU3BlY2lhbEJlaGF2aW9yKToKKyAgICAgICAgKiBy
dW50aW1lL1N0cnVjdHVyZS5oOgorCiAyMDE0LTA1LTE5ICBUYW5heSBDICA8dGFuYXkuY0BzYW1z
dW5nLmNvbT4KIAogICAgICAgICBSZW1vdmluZyBzb21lIGNoZWNrLXdlYmtpdC1zdHlsZSB3YXJu
aW5ncyBmcm9tIC4vZGZnCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheVN0b3JhZ2UuaAkocmV2aXNpb24gMTY5MDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlTdG9yYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDkgKzUzLDEwIEBA
IHB1YmxpYzoKICAgICAKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIHsgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8QnV0dGVyZmx5Kj4odGhpcyk7IH0KICAgICBJbmRleGluZ0hlYWRlciogaW5k
ZXhpbmdIZWFkZXIoKSB7IHJldHVybiBJbmRleGluZ0hlYWRlcjo6ZnJvbSh0aGlzKTsgfQorICAg
IGNvbnN0IEluZGV4aW5nSGVhZGVyKiBpbmRleGluZ0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIElu
ZGV4aW5nSGVhZGVyOjpmcm9tKHRoaXMpOyB9CiAgICAgCiAgICAgLy8gV2Ugc3RlYWwgdHdvIGZp
ZWxkcyBmcm9tIHRoZSBpbmRleGluZyBoZWFkZXI6IHZlY3Rvckxlbmd0aCBhbmQgbGVuZ3RoLgot
ICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnB1YmxpY0xl
bmd0aCgpOyB9CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gaW5kZXhpbmdI
ZWFkZXIoKS0+cHVibGljTGVuZ3RoKCk7IH0KICAgICB2b2lkIHNldExlbmd0aCh1bnNpZ25lZCBs
ZW5ndGgpIHsgaW5kZXhpbmdIZWFkZXIoKS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7IH0KICAg
ICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGgoKSB7IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT52ZWN0
b3JMZW5ndGgoKTsgfQogICAgIHZvaWQgc2V0VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGxlbmd0aCkg
eyBpbmRleGluZ0hlYWRlcigpLT5zZXRWZWN0b3JMZW5ndGgobGVuZ3RoKTsgfQpAQCAtNjcsNiAr
NjgsMTEgQEAgcHVibGljOgogICAgICAgICBtX251bVZhbHVlc0luVmVjdG9yID0gb3RoZXIubV9u
dW1WYWx1ZXNJblZlY3RvcjsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNIb2xlcygpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9udW1WYWx1ZXNJblZlY3RvciAhPSBsZW5ndGgoKTsK
KyAgICB9ICAgCisKICAgICBib29sIGluU3BhcnNlTW9kZSgpCiAgICAgewogICAgICAgICByZXR1
cm4gbV9zcGFyc2VNYXAgJiYgbV9zcGFyc2VNYXAtPnNwYXJzZU1vZGUoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAkocmV2aXNpb24g
MTY5MDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHUubGVu
Z3Rocy52ZWN0b3JMZW5ndGggPSBsZW5ndGg7CiAgICAgfQogICAgIAotICAgIHVpbnQzMl90IHB1
YmxpY0xlbmd0aCgpIHsgcmV0dXJuIHUubGVuZ3Rocy5wdWJsaWNMZW5ndGg7IH0KKyAgICB1aW50
MzJfdCBwdWJsaWNMZW5ndGgoKSBjb25zdCB7IHJldHVybiB1Lmxlbmd0aHMucHVibGljTGVuZ3Ro
OyB9CiAgICAgdm9pZCBzZXRQdWJsaWNMZW5ndGgodWludDMyX3QgYXV4V29yZCkgeyB1Lmxlbmd0
aHMucHVibGljTGVuZ3RoID0gYXV4V29yZDsgfQogICAgIAogICAgIEFycmF5QnVmZmVyKiBhcnJh
eUJ1ZmZlcigpIHsgcmV0dXJuIHUudHlwZWRBcnJheS5idWZmZXI7IH0KQEAgLTgwLDcgKzgwLDEy
IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20oQXJyYXlT
dG9yYWdlKiBhcnJheVN0b3JhZ2UpCiAgICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxJbmRleGluZ0hlYWRlcio+KGFycmF5U3RvcmFnZSkgLSAxOworICAgICAgICByZXR1cm4g
Y29uc3RfY2FzdDxJbmRleGluZ0hlYWRlcio+KGZyb20oY29uc3RfY2FzdDxjb25zdCBBcnJheVN0
b3JhZ2UqPihhcnJheVN0b3JhZ2UpKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBjb25zdCBJ
bmRleGluZ0hlYWRlciogZnJvbShjb25zdCBBcnJheVN0b3JhZ2UqIGFycmF5U3RvcmFnZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IEluZGV4aW5nSGVhZGVy
Kj4oYXJyYXlTdG9yYWdlKSAtIDE7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBJbmRleGluZ0hl
YWRlciogZnJvbUVuZE9mKFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTY5MDUz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY2OCwxNSArNjY4LDE4IEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmEKICAgICB9CiB9CiAKLWJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhBcnJh
eVN0b3JhZ2UodW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQsIEFycmF5U3RvcmFn
ZSogc3RvcmFnZSkKK2Jvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoVk0m
IHZtLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCwgQXJyYXlTdG9yYWdlKiBz
dG9yYWdlKQogewogICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwog
ICAgIFJFTEVBU0VfQVNTRVJUKGNvdW50IDw9IG9sZExlbmd0aCk7CiAgICAgCiAgICAgLy8gSWYg
dGhlIGFycmF5IGNvbnRhaW5zIGhvbGVzIG9yIGlzIG90aGVyd2lzZSBpbiBhbiBhYm5vcm1hbCBz
dGF0ZSwKICAgICAvLyB1c2UgdGhlIGdlbmVyaWMgYWxnb3JpdGhtIGluIEFycmF5UHJvdG90eXBl
LgotICAgIGlmIChvbGRMZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBp
blNwYXJzZUluZGV4aW5nTW9kZSgpIHx8IHNob3VsZFVzZVNsb3dQdXQoaW5kZXhpbmdUeXBlKCkp
KQorICAgIGlmICgoc3RvcmFnZS0+aGFzSG9sZXMoKSAmJiB0aGlzLT5zdHJ1Y3R1cmUodm0pLT5o
b2xlc1JlcXVpcmVTcGVjaWFsQmVoYXZpb3Iodm0pKSAKKyAgICAgICAgfHwgaW5TcGFyc2VJbmRl
eGluZ01vZGUoKSAKKyAgICAgICAgfHwgc2hvdWxkVXNlU2xvd1B1dChpbmRleGluZ1R5cGUoKSkp
IHsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgIGlmICghb2xkTGVuZ3RoKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTcxMCwxMCArNzEzLDIyIEBAIGJvb2wgSlNBcnJheTo6
c2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UKICAgICAgICAgLy8gYWZ0ZXIgdGhlIHNoaWZ0IHJl
Z2lvbiwgc28gd2UgbW92ZSB0aGUgZWxlbWVudHMgYmVmb3JlIHRvIHRoZSByaWdodC4KICAgICAg
ICAgaWYgKG51bUVsZW1lbnRzQmVmb3JlU2hpZnRSZWdpb24pIHsKICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGNvdW50ICsgc3RhcnRJbmRleCA8PSB2ZWN0b3JMZW5ndGgpOwotICAgICAgICAg
ICAgbWVtbW92ZSgKLSAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvciArIGNvdW50LAot
ICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yLAotICAgICAgICAgICAgICAgIHNpemVv
ZihKU1ZhbHVlKSAqIHN0YXJ0SW5kZXgpOworICAgICAgICAgICAgaWYgKHN0b3JhZ2UtPmhhc0hv
bGVzKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBp
LS0gPiAwOykgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBkZXN0aW5hdGlvbkluZGV4
ID0gY291bnQgKyBpOworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHNvdXJjZSA9IHN0b3Jh
Z2UtPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGRlc3Qg
PSBzdG9yYWdlLT5tX3ZlY3RvcltkZXN0aW5hdGlvbkluZGV4XS5nZXQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gQW55IHRpbWUgd2Ugb3ZlcndyaXRlIGEgaG9sZSB3ZSBrbm93IHdlIG92ZXJj
b3VudGVkIHRoZSBudW1iZXIgb2YgdmFsdWVzIHdlIHJlbW92ZWQgCisgICAgICAgICAgICAgICAg
ICAgIC8vIHdoZW4gd2Ugc3VidHJhY3RlZCBjb3VudCBmcm9tIG1fbnVtVmFsdWVzSW5WZWN0b3Ig
YWJvdmUuCisgICAgICAgICAgICAgICAgICAgIGlmICghZGVzdCAmJiBkZXN0aW5hdGlvbkluZGV4
ID49IGZpcnN0SW5kZXhBZnRlclNoaWZ0UmVnaW9uKQorICAgICAgICAgICAgICAgICAgICAgICAg
c3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvcisrOworICAgICAgICAgICAgICAgICAgICBzdG9y
YWdlLT5tX3ZlY3Rvcltjb3VudCArIGldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoc291cmNlKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IG1lbW1vdmUoc3RvcmFnZS0+bV92ZWN0b3IgKyBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAg
c3RvcmFnZS0+bV92ZWN0b3IsCisgICAgICAgICAgICAgICAgICAgIHNpemVvZihKU1ZhbHVlKSAq
IHN0YXJ0SW5kZXgpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIC8vIEFkanVz
dCB0aGUgQnV0dGVyZmx5IGFuZCB0aGUgaW5kZXggYmlhcy4gV2Ugb25seSBuZWVkIHRvIGRvIHRo
aXMgaGVyZSBiZWNhdXNlIHdlJ3JlIGNoYW5naW5nCiAgICAgICAgIC8vIHRoZSBzdGFydCBvZiB0
aGUgQnV0dGVyZmx5LCB3aGljaCBuZWVkcyB0byBwb2ludCBhdCB0aGUgZmlyc3QgaW5kZXhlZCBw
cm9wZXJ0eSBpbiB0aGUgdXNlZApAQCAtNzI4LDEwICs3NDMsMjIgQEAgYm9vbCBKU0FycmF5Ojpz
aGlmdENvdW50V2l0aEFycmF5U3RvcmFnZQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFRoZSBu
dW1iZXIgb2YgZWxlbWVudHMgYmVmb3JlIHRoZSBzaGlmdCByZWdpb24gaXMgZ3JlYXRlciB0aGFu
IG9yIGVxdWFsIHRvIHRoZSBudW1iZXIgCiAgICAgICAgIC8vIG9mIGVsZW1lbnRzIGFmdGVyIHRo
ZSBzaGlmdCByZWdpb24sIHNvIHdlIG1vdmUgdGhlIGVsZW1lbnRzIGFmdGVyIHRoZSBzaGlmdCBy
ZWdpb24gdG8gdGhlIGxlZnQuCi0gICAgICAgIG1lbW1vdmUoCi0gICAgICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvciArIHN0YXJ0SW5kZXgsCi0gICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvciAr
IGZpcnN0SW5kZXhBZnRlclNoaWZ0UmVnaW9uLAotICAgICAgICAgICAgc2l6ZW9mKEpTVmFsdWUp
ICogbnVtRWxlbWVudHNBZnRlclNoaWZ0UmVnaW9uKTsKKyAgICAgICAgaWYgKHN0b3JhZ2UtPmhh
c0hvbGVzKCkpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1FbGVt
ZW50c0FmdGVyU2hpZnRSZWdpb247ICsraSkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRl
c3RpbmF0aW9uSW5kZXggPSBzdGFydEluZGV4ICsgaTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVl
IHNvdXJjZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ZpcnN0SW5kZXhBZnRlclNoaWZ0UmVnaW9uICsg
aV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBkZXN0ID0gc3RvcmFnZS0+bV92ZWN0
b3JbZGVzdGluYXRpb25JbmRleF0uZ2V0KCk7CisgICAgICAgICAgICAgICAgLy8gQW55IHRpbWUg
d2Ugb3ZlcndyaXRlIGEgaG9sZSB3ZSBrbm93IHdlIG92ZXJjb3VudGVkIHRoZSBudW1iZXIgb2Yg
dmFsdWVzIHdlIHJlbW92ZWQgCisgICAgICAgICAgICAgICAgLy8gd2hlbiB3ZSBzdWJ0cmFjdGVk
IGNvdW50IGZyb20gbV9udW1WYWx1ZXNJblZlY3RvciBhYm92ZS4KKyAgICAgICAgICAgICAgICBp
ZiAoIWRlc3QgJiYgZGVzdGluYXRpb25JbmRleCA8IGZpcnN0SW5kZXhBZnRlclNoaWZ0UmVnaW9u
KQorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yKys7Cisg
ICAgICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3Jbc3RhcnRJbmRleCArIGldLnNldFdpdGhv
dXRXcml0ZUJhcnJpZXIoc291cmNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIG1lbW1vdmUoc3RvcmFnZS0+bV92ZWN0b3IgKyBzdGFydEluZGV4LAorICAg
ICAgICAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yICsgZmlyc3RJbmRleEFmdGVyU2hpZnRSZWdp
b24sCisgICAgICAgICAgICAgICAgc2l6ZW9mKEpTVmFsdWUpICogbnVtRWxlbWVudHNBZnRlclNo
aWZ0UmVnaW9uKTsKKyAgICAgICAgfQogICAgICAgICAvLyBDbGVhciB0aGUgc2xvdHMgb2YgdGhl
IGVsZW1lbnRzIHdlIGp1c3QgbW92ZWQuCiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0T2ZFbXB0eVZl
Y3RvclRhaWwgPSB1c2VkVmVjdG9yTGVuZ3RoIC0gY291bnQ7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IHN0YXJ0T2ZFbXB0eVZlY3RvclRhaWw7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kp
CkBAIC03NDUsOCArNzcyLDkgQEAgYm9vbCBKU0FycmF5OjpzaGlmdENvdW50V2l0aEFycmF5U3Rv
cmFnZQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRo
QW55SW5kZXhpbmdUeXBlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5z
aWduZWQgY291bnQpCitib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUeXBl
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQmIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQog
eworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoY291bnQgPiAw
KTsKICAgICAKICAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7CkBAIC03NjUsMjcgKzc5Mywy
OCBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhpbmdUCiAgICAgICAgIC8v
IFdlIG1heSBoYXZlIHRvIHdhbGsgdGhlIGVudGlyZSBhcnJheSB0byBkbyB0aGUgc2hpZnQuIFdl
J3JlIHdpbGxpbmcgdG8gZG8KICAgICAgICAgLy8gc28gb25seSBpZiBpdCdzIG5vdCBob3JyaWJs
eSBzbG93LgogICAgICAgICBpZiAob2xkTGVuZ3RoIC0gKHN0YXJ0SW5kZXggKyBjb3VudCkgPj0g
TUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkKLSAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0
aEFycmF5U3RvcmFnZShzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJyYXlTdG9yYWdlKGV4ZWMt
PnZtKCkpKTsKKyAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSh2
bSwgc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZSh2bSkpOwogCiAgICAgICAg
IC8vIFN0b3JpbmcgdG8gYSBob2xlIGlzIGZpbmUgc2luY2Ugd2UncmUgc3RpbGwgaGF2aW5nIGEg
Z29vZCB0aW1lLiBCdXQgcmVhZGluZyBmcm9tIGEgaG9sZSAKICAgICAgICAgLy8gaXMgdG90YWxs
eSBub3QgZmluZSwgc2luY2Ugd2UgbWlnaHQgaGF2ZSB0byByZWFkIGZyb20gdGhlIHByb3RvIGNo
YWluLgogICAgICAgICAvLyBXZSBoYXZlIHRvIGNoZWNrIGZvciBob2xlcyBiZWZvcmUgd2Ugc3Rh
cnQgbW92aW5nIHRoaW5ncyBhcm91bmQgc28gdGhhdCB3ZSBkb24ndCBnZXQgaGFsZndheSAKICAg
ICAgICAgLy8gdGhyb3VnaCBzaGlmdGluZyBhbmQgdGhlbiByZWFsaXplIHdlIHNob3VsZCBoYXZl
IGJlZW4gaW4gQXJyYXlTdG9yYWdlIG1vZGUuCiAgICAgICAgIHVuc2lnbmVkIGVuZCA9IG9sZExl
bmd0aCAtIGNvdW50OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBpIDwg
ZW5kOyArK2kpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1
b3VzKClbaSArIGNvdW50XS5nZXQoKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSghdikpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5k
ZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkpOworICAgICAgICBpZiAo
dGhpcy0+c3RydWN0dXJlKHZtKS0+aG9sZXNSZXF1aXJlU3BlY2lhbEJlaGF2aW9yKHZtKSkgewor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRJbmRleDsgaSA8IGVuZDsgKytpKSB7
CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2ID0gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtp
ICsgY291bnRdLmdldCgpOworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWSghdikpIHsKKyAg
ICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IGk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSh2bSwgc3RhcnRJbmRleCwgY291bnQsIGVu
c3VyZUFycmF5U3RvcmFnZSh2bSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBtX2J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIodik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtZW1tb3ZlKG1f
YnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpICsgc3RhcnRJbmRleCwgCisgICAgICAgICAg
ICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCkgKyBzdGFydEluZGV4ICsgY291
bnQsIAorICAgICAgICAgICAgICAgIHNpemVvZihKU1ZhbHVlKSAqIChlbmQgLSBzdGFydEluZGV4
KSk7CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBp
IDwgZW5kOyArK2kpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdiA9IG1fYnV0dGVyZmx5LT5jb250
aWd1b3VzKClbaSArIGNvdW50XS5nZXQoKTsKLSAgICAgICAgICAgIEFTU0VSVCh2KTsKLSAgICAg
ICAgICAgIC8vIE5vIG5lZWQgZm9yIGEgYmFycmllciBzaW5jZSB3ZSdyZSBqdXN0IG1vdmluZyBk
YXRhIGFyb3VuZCBpbiB0aGUgc2FtZSB2ZWN0b3IuCi0gICAgICAgICAgICAvLyBUaGlzIGlzIGlu
IGxpbmUgd2l0aCBvdXIgc3RhbmRpbmcgYXNzdW1wdGlvbiB0aGF0IHdlIHdvbid0IGhhdmUgYSBk
ZWxldGlvbgotICAgICAgICAgICAgLy8gYmFycmllci4KLSAgICAgICAgICAgIG1fYnV0dGVyZmx5
LT5jb250aWd1b3VzKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKLSAgICAgICAgfQog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmQ7IGkgPCBvbGRMZW5ndGg7ICsraSkKICAgICAg
ICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsKICAgICAgICAgCkBA
IC04MDAsMjYgKzgyOSwyNiBAQCBib29sIEpTQXJyYXk6OnNoaWZ0Q291bnRXaXRoQW55SW5kZXhp
bmdUCiAgICAgICAgIC8vIFdlIG1heSBoYXZlIHRvIHdhbGsgdGhlIGVudGlyZSBhcnJheSB0byBk
byB0aGUgc2hpZnQuIFdlJ3JlIHdpbGxpbmcgdG8gZG8KICAgICAgICAgLy8gc28gb25seSBpZiBp
dCdzIG5vdCBob3JyaWJseSBzbG93LgogICAgICAgICBpZiAob2xkTGVuZ3RoIC0gKHN0YXJ0SW5k
ZXggKyBjb3VudCkgPj0gTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkKLSAgICAgICAgICAgIHJldHVy
biBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZShzdGFydEluZGV4LCBjb3VudCwgZW5zdXJlQXJy
YXlTdG9yYWdlKGV4ZWMtPnZtKCkpKTsKKyAgICAgICAgICAgIHJldHVybiBzaGlmdENvdW50V2l0
aEFycmF5U3RvcmFnZSh2bSwgc3RhcnRJbmRleCwgY291bnQsIGVuc3VyZUFycmF5U3RvcmFnZSh2
bSkpOwogCiAgICAgICAgIC8vIFN0b3JpbmcgdG8gYSBob2xlIGlzIGZpbmUgc2luY2Ugd2UncmUg
c3RpbGwgaGF2aW5nIGEgZ29vZCB0aW1lLiBCdXQgcmVhZGluZyBmcm9tIGEgaG9sZSAKICAgICAg
ICAgLy8gaXMgdG90YWxseSBub3QgZmluZSwgc2luY2Ugd2UgbWlnaHQgaGF2ZSB0byByZWFkIGZy
b20gdGhlIHByb3RvIGNoYWluLgogICAgICAgICAvLyBXZSBoYXZlIHRvIGNoZWNrIGZvciBob2xl
cyBiZWZvcmUgd2Ugc3RhcnQgbW92aW5nIHRoaW5ncyBhcm91bmQgc28gdGhhdCB3ZSBkb24ndCBn
ZXQgaGFsZndheSAKICAgICAgICAgLy8gdGhyb3VnaCBzaGlmdGluZyBhbmQgdGhlbiByZWFsaXpl
IHdlIHNob3VsZCBoYXZlIGJlZW4gaW4gQXJyYXlTdG9yYWdlIG1vZGUuCiAgICAgICAgIHVuc2ln
bmVkIGVuZCA9IG9sZExlbmd0aCAtIGNvdW50OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBz
dGFydEluZGV4OyBpIDwgZW5kOyArK2kpIHsKLSAgICAgICAgICAgIGRvdWJsZSB2ID0gbV9idXR0
ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpICsgY291bnRdOwotICAgICAgICAgICAgaWYgKFVO
TElLRUxZKHYgIT0gdikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJy
YXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNvdW50LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0o
KSkpOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
c3RhcnRJbmRleDsgaSA8IGVuZDsgKytpKSB7Ci0gICAgICAgICAgICBkb3VibGUgdiA9IG1fYnV0
dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaSArIGNvdW50XTsKLSAgICAgICAgICAgIEFTU0VS
VCh2ID09IHYpOwotICAgICAgICAgICAgLy8gTm8gbmVlZCBmb3IgYSBiYXJyaWVyIHNpbmNlIHdl
J3JlIGp1c3QgbW92aW5nIGRhdGEgYXJvdW5kIGluIHRoZSBzYW1lIHZlY3Rvci4KLSAgICAgICAg
ICAgIC8vIFRoaXMgaXMgaW4gbGluZSB3aXRoIG91ciBzdGFuZGluZyBhc3N1bXB0aW9uIHRoYXQg
d2Ugd29uJ3QgaGF2ZSBhIGRlbGV0aW9uCi0gICAgICAgICAgICAvLyBiYXJyaWVyLgotICAgICAg
ICAgICAgbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IHY7CisgICAgICAgIGlm
ICh0aGlzLT5zdHJ1Y3R1cmUodm0pLT5ob2xlc1JlcXVpcmVTcGVjaWFsQmVoYXZpb3Iodm0pKSB7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBpIDwgZW5kOyArK2kp
IHsKKyAgICAgICAgICAgICAgICBkb3VibGUgdiA9IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91
YmxlKClbaSArIGNvdW50XTsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkodiAhPSB2KSkg
eworICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gaTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHZtLCBzdGFydEluZGV4LCBjb3Vu
dCwgZW5zdXJlQXJyYXlTdG9yYWdlKHZtKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSB2OworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWVtbW92ZShtX2J1dHRlcmZseS0+
Y29udGlndW91c0RvdWJsZSgpLmRhdGEoKSArIHN0YXJ0SW5kZXgsCisgICAgICAgICAgICAgICAg
bV9idXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCkgKyBzdGFydEluZGV4ICsgY291
bnQsCisgICAgICAgICAgICAgICAgc2l6ZW9mKEpTVmFsdWUpICogKGVuZCAtIHN0YXJ0SW5kZXgp
KTsKICAgICAgICAgfQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmQ7IGkgPCBvbGRMZW5n
dGg7ICsraSkKICAgICAgICAgICAgIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0g
PSBQTmFOOwpAQCAtODMwLDcgKzg1OSw3IEBAIGJvb2wgSlNBcnJheTo6c2hpZnRDb3VudFdpdGhB
bnlJbmRleGluZ1QKICAgICAgICAgCiAgICAgY2FzZSBBcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAg
ICAgY2FzZSBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICByZXR1cm4gc2hp
ZnRDb3VudFdpdGhBcnJheVN0b3JhZ2Uoc3RhcnRJbmRleCwgY291bnQsIGFycmF5U3RvcmFnZSgp
KTsKKyAgICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHZtLCBzdGFydElu
ZGV4LCBjb3VudCwgYXJyYXlTdG9yYWdlKCkpOwogICAgICAgICAKICAgICBkZWZhdWx0OgogICAg
ICAgICBDUkFTSCgpOwpAQCAtODQ3LDcgKzg3Niw3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENv
dW50V2l0aEFycmF5U3RvcmEKIAogICAgIC8vIElmIHRoZSBhcnJheSBjb250YWlucyBob2xlcyBv
ciBpcyBvdGhlcndpc2UgaW4gYW4gYWJub3JtYWwgc3RhdGUsCiAgICAgLy8gdXNlIHRoZSBnZW5l
cmljIGFsZ29yaXRobSBpbiBBcnJheVByb3RvdHlwZS4KLSAgICBpZiAobGVuZ3RoICE9IHN0b3Jh
Z2UtPm1fbnVtVmFsdWVzSW5WZWN0b3IgfHwgc3RvcmFnZS0+aW5TcGFyc2VNb2RlKCkgfHwgc2hv
dWxkVXNlU2xvd1B1dChpbmRleGluZ1R5cGUoKSkpCisgICAgaWYgKHN0b3JhZ2UtPmhhc0hvbGVz
KCkgfHwgc3RvcmFnZS0+aW5TcGFyc2VNb2RlKCkgfHwgc2hvdWxkVXNlU2xvd1B1dChpbmRleGlu
Z1R5cGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgbW92ZUZyb250ID0g
IXN0YXJ0SW5kZXggfHwgc3RhcnRJbmRleCA8IGxlbmd0aCAvIDI7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAxNjkwNTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDE0
ICs4OSwxNCBAQCBwdWJsaWM6CiAKICAgICBib29sIHNoaWZ0Q291bnRGb3JTaGlmdChFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIHNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKHN0YXJ0SW5kZXgsIGNvdW50
LCBlbnN1cmVBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSkpOworICAgICAgICByZXR1cm4gc2hpZnRD
b3VudFdpdGhBcnJheVN0b3JhZ2UoZXhlYy0+dm0oKSwgc3RhcnRJbmRleCwgY291bnQsIGVuc3Vy
ZUFycmF5U3RvcmFnZShleGVjLT52bSgpKSk7CiAgICAgfQotICAgIGJvb2wgc2hpZnRDb3VudEZv
clNwbGljZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNv
dW50KQorICAgIGJvb2wgc2hpZnRDb3VudEZvclNwbGljZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkJiBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKICAgICB7CiAgICAgICAgIHJldHVybiBz
aGlmdENvdW50V2l0aEFueUluZGV4aW5nVHlwZShleGVjLCBzdGFydEluZGV4LCBjb3VudCk7CiAg
ICAgfQogICAgIHRlbXBsYXRlPFNoaWZ0Q291bnRNb2RlIHNoaWZ0Q291bnRNb2RlPgotICAgIGJv
b2wgc2hpZnRDb3VudChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2ln
bmVkIGNvdW50KQorICAgIGJvb2wgc2hpZnRDb3VudChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
JiBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoc2hp
ZnRDb3VudE1vZGUpIHsKICAgICAgICAgY2FzZSBTaGlmdENvdW50Rm9yU2hpZnQ6CkBAIC0xNTYs
OCArMTU2LDggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuICFtYXAgfHwgIW1hcC0+bGVuZ3Ro
SXNSZWFkT25seSgpOwogICAgIH0KICAgICAgICAgCi0gICAgYm9vbCBzaGlmdENvdW50V2l0aEFu
eUluZGV4aW5nVHlwZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBj
b3VudCk7Ci0gICAgYm9vbCBzaGlmdENvdW50V2l0aEFycmF5U3RvcmFnZSh1bnNpZ25lZCBzdGFy
dEluZGV4LCB1bnNpZ25lZCBjb3VudCwgQXJyYXlTdG9yYWdlKik7CisgICAgYm9vbCBzaGlmdENv
dW50V2l0aEFueUluZGV4aW5nVHlwZShFeGVjU3RhdGUqLCB1bnNpZ25lZCYgc3RhcnRJbmRleCwg
dW5zaWduZWQgY291bnQpOworICAgIGJvb2wgc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UoVk0m
LCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBjb3VudCwgQXJyYXlTdG9yYWdlKik7CiAK
ICAgICBib29sIHVuc2hpZnRDb3VudFdpdGhBbnlJbmRleGluZ1R5cGUoRXhlY1N0YXRlKiwgdW5z
aWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpOwogICAgIGJvb2wgdW5zaGlmdENvdW50
V2l0aEFycmF5U3RvcmFnZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25l
ZCBjb3VudCwgQXJyYXlTdG9yYWdlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDE2OTA1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4Nyw2ICsz
ODcsMzAgQEAgYm9vbCBTdHJ1Y3R1cmU6OmFueU9iamVjdEluQ2hhaW5NYXlJbnRlcgogICAgIH0K
IH0KIAorYm9vbCBTdHJ1Y3R1cmU6OmhvbGVzUmVxdWlyZVNwZWNpYWxCZWhhdmlvcihWTSYgdm0p
IGNvbnN0Cit7CisgICAgaWYgKHRoaXMtPm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpcy0+c3Rv
cmVkUHJvdG90eXBlKCk7CisgICAgaWYgKCFwcm90b3R5cGUuaXNPYmplY3QoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChwcm90b3R5cGUp
OworCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgU3RydWN0dXJlJiBzdHJ1Y3R1cmUgPSAq
b2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgICAgICBpZiAoaGFzSW5kZXhlZFByb3BlcnRpZXMo
b2JqZWN0LT5pbmRleGluZ1R5cGUoKSkgfHwgc3RydWN0dXJlLm1heUludGVyY2VwdEluZGV4ZWRB
Y2Nlc3NlcygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHByb3RvdHlwZSA9
IHN0cnVjdHVyZS5zdG9yZWRQcm90b3R5cGUoKTsKKyAgICAgICAgaWYgKCFwcm90b3R5cGUuaXNP
YmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgb2JqZWN0ID0gYXNP
YmplY3QocHJvdG90eXBlKTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwogYm9vbCBTdHJ1Y3R1cmU6Om5lZWRzU2xvd1B1
dEluZGV4aW5nKCkgY29uc3QKIHsKICAgICByZXR1cm4gYW55T2JqZWN0SW5DaGFpbk1heUludGVy
Y2VwdEluZGV4ZWRBY2Nlc3NlcygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTY5MDUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw2ICsxNjgsNyBAQCBw
dWJsaWM6CiAgICAgfQogICAgICAgICAKICAgICBib29sIGFueU9iamVjdEluQ2hhaW5NYXlJbnRl
cmNlcHRJbmRleGVkQWNjZXNzZXMoKSBjb25zdDsKKyAgICBib29sIGhvbGVzUmVxdWlyZVNwZWNp
YWxCZWhhdmlvcihWTSYpIGNvbnN0OwogICAgICAgICAKICAgICBib29sIG5lZWRzU2xvd1B1dElu
ZGV4aW5nKCkgY29uc3Q7CiAgICAgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHN1Z2dlc3RlZEFycmF5
U3RvcmFnZVRyYW5zaXRpb24oKSBjb25zdDsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2OTA3OSkKKysr
IExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBACisy
MDE0LTA1LTE5ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAg
ICAgICAgSlNBcnJheTo6c2hpZnRDb3VudFdpdGgqIGNvdWxkIGJlIG1vcmUgZWZmaWNpZW50Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMwMTEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBhIHBl
cmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCB3aGljaCB0ZXN0cyB0aGUgY29udGlndW91cyBzaGlm
dCBjYXNlLiBXZSdyZSB+ODUlIGZhc3RlciAKKyAgICAgICAgb24gdGhpcyBtaWNyb2JlbmNobWFy
ayB3aXRoIHRoaXMgcGF0Y2guCisKKyAgICAgICAgQWxzbyBhZGRlZCBhIGJ1bmNoIG9mIHRlc3Rz
IGZvciBlYWNoIHBlcm11dGF0aW9uIG9mIGNvbnRpZ3VvdXMvYXJyYXkgc3RvcmFnZSB3aXRoIG5v
IGhvbGVzLCBob2xlcywKKyAgICAgICAgYW5kIGhvbGVzIHRoYXQgcmVxdWlyZSBzcGVjaWFsIGJl
aGF2aW9yIChlLmcuIGluZGV4ZWQgcHJvcGVydGllcyBpbiB0aGUgcHJvdG90eXBlIGNoYWluKS4K
KworICAgICAgICAqIGpzL2FycmF5LXN0b3JhZ2Utc3BsaWNlLWhvbGVzLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICoganMvYXJyYXktc3RvcmFnZS1zcGxpY2UtaG9sZXMtcmVxdWlyZS1z
cGVjaWFsLWJlaGF2aW9yLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvYXJyYXkt
c3RvcmFnZS1zcGxpY2UtaG9sZXMtcmVxdWlyZS1zcGVjaWFsLWJlaGF2aW9yLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGpzL2FycmF5LXN0b3JhZ2Utc3BsaWNlLWhvbGVzLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGpzL2FycmF5LXN0b3JhZ2Utc3BsaWNlLW5vLWhvbGVzLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICoganMvYXJyYXktc3RvcmFnZS1zcGxpY2Utbm8taG9sZXMuaHRtbDog
QWRkZWQuCisgICAgICAgICoganMvY29udGlndW91cy1zcGxpY2UtaG9sZXMtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBqcy9jb250aWd1b3VzLXNwbGljZS1ob2xlcy1yZXF1aXJlLXNw
ZWNpYWwtYmVoYXZpb3ItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9jb250aWd1
b3VzLXNwbGljZS1ob2xlcy1yZXF1aXJlLXNwZWNpYWwtYmVoYXZpb3IuaHRtbDogQWRkZWQuCisg
ICAgICAgICoganMvY29udGlndW91cy1zcGxpY2UtaG9sZXMuaHRtbDogQWRkZWQuCisgICAgICAg
ICoganMvY29udGlndW91cy1zcGxpY2Utbm8taG9sZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBqcy9jb250aWd1b3VzLXNwbGljZS1uby1ob2xlcy5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBqcy9yZWdyZXNzL2FycmF5LXNwbGljZS1jb250aWd1b3VzLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICoganMvcmVncmVzcy9hcnJheS1zcGxpY2UtY29udGlndW91cy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9hcnJheS1zcGxpY2UtY29u
dGlndW91cy5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAqIGpzL3NjcmlwdC10
ZXN0cy9hcnJheS1zdG9yYWdlLXNwbGljZS1ob2xlcy1yZXF1aXJlLXNwZWNpYWwtYmVoYXZpb3Iu
anM6IEFkZGVkLgorICAgICAgICAqIGpzL3NjcmlwdC10ZXN0cy9hcnJheS1zdG9yYWdlLXNwbGlj
ZS1ob2xlcy5qczogQWRkZWQuCisgICAgICAgICoganMvc2NyaXB0LXRlc3RzL2FycmF5LXN0b3Jh
Z2Utc3BsaWNlLW5vLWhvbGVzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBqcy9zY3JpcHQtdGVzdHMv
Y29udGlndW91cy1zcGxpY2UtaG9sZXMtcmVxdWlyZS1zcGVjaWFsLWJlaGF2aW9yLmpzOiBBZGRl
ZC4KKyAgICAgICAgKiBqcy9zY3JpcHQtdGVzdHMvY29udGlndW91cy1zcGxpY2UtaG9sZXMuanM6
IEFkZGVkLgorICAgICAgICAqIGpzL3NjcmlwdC10ZXN0cy9jb250aWd1b3VzLXNwbGljZS1uby1o
b2xlcy5qczogQWRkZWQuCisKIDIwMTQtMDUtMTkgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNl
ckBhcHBsZS5jb20+CiAKICAgICAgICAgU3BsaXQgc2Nyb2xsaW5nIHRyZWUgU2Nyb2xsaW5nTm9k
ZXMgaW50byBGcmFtZVNjcm9sbGluZ05vZGVzIGFuZCBPdmVyZmxvd1Njcm9sbGluZ05vZGVzCklu
ZGV4OiBMYXlvdXRUZXN0cy9qcy9hcnJheS1zdG9yYWdlLXNwbGljZS1ob2xlcy1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvYXJyYXktc3RvcmFnZS1zcGxpY2UtaG9s
ZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvYXJyYXktc3Rv
cmFnZS1zcGxpY2UtaG9sZXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTcgQEAKK1Rlc3RzIGZvciBjb3JyZWN0IGJlaGF2aW9yIG9mIHNwbGljZSB3aXRoIGFycmF5IHN0
b3JhZ2Ugd2l0aCBob2xlcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mg
YVswXSBpcyAxCitQQVNTIGFbMV0gaXMgMgorUEFTUyBhWzJdIGlzIDMKK1BBU1MgYVszXSBpcyA0
CitQQVNTIGFbNF0gaXMgNgorUEFTUyBhLmhhc093blByb3BlcnR5KCc1JykgaXMgZmFsc2UKK1BB
U1MgYVs2XSBpcyA4CitQQVNTIGFbN10gaXMgOQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL2FycmF5LXN0b3Jh
Z2Utc3BsaWNlLWhvbGVzLXJlcXVpcmUtc3BlY2lhbC1iZWhhdmlvci1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvYXJyYXktc3RvcmFnZS1zcGxpY2UtaG9sZXMtcmVx
dWlyZS1zcGVjaWFsLWJlaGF2aW9yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2pzL2FycmF5LXN0b3JhZ2Utc3BsaWNlLWhvbGVzLXJlcXVpcmUtc3BlY2lhbC1iZWhh
dmlvci1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNSBAQAorVGVzdCB0
byBlbnN1cmUgY29ycmVjdCBiZWhhdmlvdXIgb2Ygc3BsaWNlIGluIGFycmF5IHN0b3JhZ2UgbW9k
ZSB3aXRoIGluZGV4ZWQgcHJvcGVydGllcyBpbiB0aGUgcHJvdG90eXBlIGNoYWluLgorCitPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBhWzBdIGlzIDEKK1BBU1MgYVsxXSBpcyAy
CitQQVNTIGFbMl0gaXMgMworUEFTUyBhWzNdIGlzIDUKK1BBU1MgYVs0XSBpcyA2CitQQVNTIGFb
NV0gaXMgNworUEFTUyBhWzZdIGlzIDgKK1BBU1MgYVs3XSBpcyA5CitQQVNTIGJbMF0gaXMgMQor
UEFTUyBiWzFdIGlzIDIKK1BBU1MgYlsyXSBpcyAzCitQQVNTIGJbM10gaXMgNQorUEFTUyBiWzRd
IGlzIDYKK1BBU1MgYls1XSBpcyA3CitQQVNTIGJbNl0gaXMgOAorUEFTUyBiWzddIGlzIDkKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBM
YXlvdXRUZXN0cy9qcy9hcnJheS1zdG9yYWdlLXNwbGljZS1ob2xlcy1yZXF1aXJlLXNwZWNpYWwt
YmVoYXZpb3IuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9hcnJheS1zdG9yYWdl
LXNwbGljZS1ob2xlcy1yZXF1aXJlLXNwZWNpYWwtYmVoYXZpb3IuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2pzL2FycmF5LXN0b3JhZ2Utc3BsaWNlLWhvbGVzLXJlcXVpcmUtc3Bl
Y2lhbC1iZWhhdmlvci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKKzwhRE9D
VFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9hcnJheS1zdG9yYWdlLXNw
bGljZS1ob2xlcy1yZXF1aXJlLXNwZWNpYWwtYmVoYXZpb3IuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvYXJyYXktc3RvcmFnZS1zcGxpY2UtaG9sZXMu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9hcnJheS1zdG9yYWdlLXNwbGljZS1o
b2xlcy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvYXJyYXktc3RvcmFnZS1z
cGxpY2UtaG9sZXMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACis8IURPQ1RZ
UEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvYXJyYXktc3RvcmFnZS1zcGxp
Y2UtaG9sZXMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMv
anMvYXJyYXktc3RvcmFnZS1zcGxpY2Utbm8taG9sZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL2FycmF5LXN0b3JhZ2Utc3BsaWNlLW5vLWhvbGVzLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL2FycmF5LXN0b3JhZ2Utc3BsaWNl
LW5vLWhvbGVzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3IEBACitU
ZXN0cyBhcnJheS5zcGxpY2UgYmVoYXZpb3IgZm9yIGFycmF5IHN0b3JhZ2Ugd2l0aCBubyBob2xl
cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgYVswXSBpcyAxCitQQVNT
IGFbMV0gaXMgMgorUEFTUyBhWzJdIGlzIDMKK1BBU1MgYVszXSBpcyA0CitQQVNTIGFbNF0gaXMg
NgorUEFTUyBhWzVdIGlzIDcKK1BBU1MgYVs2XSBpcyA4CitQQVNTIGFbN10gaXMgOQorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91
dFRlc3RzL2pzL2FycmF5LXN0b3JhZ2Utc3BsaWNlLW5vLWhvbGVzLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvYXJyYXktc3RvcmFnZS1zcGxpY2Utbm8taG9sZXMuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL2FycmF5LXN0b3JhZ2Utc3BsaWNlLW5vLWhvbGVz
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorPCFET0NUWVBFIEhUTUwgUFVC
TElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2FycmF5LXN0b3JhZ2Utc3BsaWNlLW5vLWhvbGVz
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL2NvbnRp
Z3VvdXMtc3BsaWNlLWhvbGVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9qcy9jb250aWd1b3VzLXNwbGljZS1ob2xlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcy9jb250aWd1b3VzLXNwbGljZS1ob2xlcy1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxOCBAQAorVGVzdHMgYXJyYXkuc3BsaWNlIGJlaGF2aW9y
IGZvciBjb250aWd1b3VzIHN0b3JhZ2Ugd2l0aCBob2xlcy4KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK1BBU1MgYVswXSBpcyAxCitQQVNTIGFbMV0gaXMgMgorUEFTUyBhWzJdIGlz
IDMKK1BBU1MgYVszXSBpcyA0CitQQVNTIGFbNF0gaXMgNQorUEFTUyBhWzVdIGlzIDYKK1BBU1Mg
YVs2XSBpcyA3CitQQVNTIGFbN10gaXMgOAorUEFTUyBhLmhhc093blByb3BlcnR5KCc4JykgaXMg
ZmFsc2UKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9jb250aWd1b3VzLXNwbGljZS1ob2xlcy1yZXF1aXJlLXNw
ZWNpYWwtYmVoYXZpb3ItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pz
L2NvbnRpZ3VvdXMtc3BsaWNlLWhvbGVzLXJlcXVpcmUtc3BlY2lhbC1iZWhhdmlvci1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9jb250aWd1b3VzLXNwbGljZS1o
b2xlcy1yZXF1aXJlLXNwZWNpYWwtYmVoYXZpb3ItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTggQEAKK1Rlc3RzIGFycmF5LnNwbGljZSBiZWhhdmlvciB3aXRoIGhvbGV5
IGNvbnRpZ3VvdXMgc3RvcmFnZSB3aXRoIGluZGV4ZWQgcHJvcGVydGllcyBpbiB0aGUgcHJvdG90
eXBlIGNoYWluLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBhWzBdIGlz
IDEKK1BBU1MgYVsxXSBpcyAyCitQQVNTIGFbMl0gaXMgMworUEFTUyBhWzNdIGlzIDQKK1BBU1Mg
YVs0XSBpcyA1CitQQVNTIGFbNV0gaXMgNgorUEFTUyBhWzZdIGlzIDcKK1BBU1MgYVs3XSBpcyA4
CitQQVNTIGFbOF0gaXMgOQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL2NvbnRpZ3VvdXMtc3BsaWNlLWhvbGVz
LXJlcXVpcmUtc3BlY2lhbC1iZWhhdmlvci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2pzL2NvbnRpZ3VvdXMtc3BsaWNlLWhvbGVzLXJlcXVpcmUtc3BlY2lhbC1iZWhhdmlvci5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvY29udGlndW91cy1zcGxpY2UtaG9sZXMt
cmVxdWlyZS1zcGVjaWFsLWJlaGF2aW9yLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2NvbnRp
Z3VvdXMtc3BsaWNlLWhvbGVzLXJlcXVpcmUtc3BlY2lhbC1iZWhhdmlvci5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9jb250aWd1b3VzLXNwbGljZS1o
b2xlcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL2NvbnRpZ3VvdXMtc3BsaWNl
LWhvbGVzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9jb250aWd1b3VzLXNw
bGljZS1ob2xlcy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKKzwhRE9DVFlQ
RSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9jb250aWd1b3VzLXNwbGljZS1o
b2xlcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9j
b250aWd1b3VzLXNwbGljZS1uby1ob2xlcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvanMvY29udGlndW91cy1zcGxpY2Utbm8taG9sZXMtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvY29udGlndW91cy1zcGxpY2Utbm8taG9sZXMtZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTggQEAKK1Rlc3RzIGFycmF5LnNw
bGljZSBiZWhhdmlvciBmb3IgY29udGlndW91cyBzdG9yYWdlIHdpdGggbm8gaG9sZXMuCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGFbMF0gaXMgMAorUEFTUyBhWzFdIGlz
IDEKK1BBU1MgYVsyXSBpcyAyCitQQVNTIGFbM10gaXMgNAorUEFTUyBhWzRdIGlzIDUKK1BBU1Mg
YVs1XSBpcyA2CitQQVNTIGFbNl0gaXMgNworUEFTUyBhWzddIGlzIDgKK1BBU1MgYVs4XSBpcyA5
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRl
eDogTGF5b3V0VGVzdHMvanMvY29udGlndW91cy1zcGxpY2Utbm8taG9sZXMuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9jb250aWd1b3VzLXNwbGljZS1uby1ob2xlcy5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvY29udGlndW91cy1zcGxpY2Utbm8taG9sZXMu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJM
SUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvY29udGlndW91cy1zcGxpY2Utbm8taG9sZXMuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9h
cnJheS1zcGxpY2UtY29udGlndW91cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9hcnJheS1zcGxpY2UtY29udGlndW91cy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2FycmF5LXNwbGljZS1jb250aWd1
b3VzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jl
c3MvYXJyYXktc3BsaWNlLWNvbnRpZ3VvdXMKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvYXJy
YXktc3BsaWNlLWNvbnRpZ3VvdXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL2FycmF5LXNwbGljZS1jb250aWd1b3VzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL2FycmF5LXNwbGljZS1jb250aWd1b3VzLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9E
VEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJzY3JpcHQtdGVzdHMvYXJyYXktc3BsaWNlLWNvbnRpZ3VvdXMuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMv
YXJyYXktc3BsaWNlLWNvbnRpZ3VvdXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvYXJyYXktc3BsaWNlLWNvbnRpZ3VvdXMuanMJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9hcnJheS1zcGxpY2Ut
Y29udGlndW91cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2IEBACitmdW5jdGlvbiBm
b28oKSB7CisgICAgdmFyIGEgPSBuZXcgQXJyYXkoMTAwMCk7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDAwOyArK2kpIHsKKyAgICAgICAgaWYgKGkgJSA3ID09PSAwKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGFbaV0gPSBpOworICAgIH0KKworICAgIHZhciBuaXRlcnMgPSAx
MDAwMDsKKyAgICB2YXIgcmVtb3ZlID0gdHJ1ZTsKKyAgICB2YXIgbGFzdFJlbW92ZWRJdGVtID0g
bnVsbDsKKyAgICB2YXIgbGFzdFJlbW92ZWRJbmRleCA9IG51bGw7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBuaXRlcnM7ICsraSkgeworICAgICAgICBpZiAocmVtb3ZlKSB7CisgICAgICAgICAg
ICBsYXN0UmVtb3ZlZEluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYS5sZW5ndGgp
OworICAgICAgICAgICAgbGFzdFJlbW92ZWRJdGVtID0gYVtsYXN0UmVtb3ZlZEluZGV4XTsKKyAg
ICAgICAgICAgIGEuc3BsaWNlKGxhc3RSZW1vdmVkSW5kZXgsIDEpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgYS5zcGxpY2UobGFzdFJlbW92ZWRJbmRleCwgMCwgbGFzdFJlbW92ZWRJ
dGVtKTsKKyAgICAgICAgfQorICAgICAgICByZW1vdmUgPSAhcmVtb3ZlOworICAgIH0KKyAgICBp
ZiAoYS5sZW5ndGggIT09IDEwMDApCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0
IGxlbmd0aCIpOworfTsKK2ZvbygpOwpJbmRleDogTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3Rz
L2FycmF5LXN0b3JhZ2Utc3BsaWNlLWhvbGVzLXJlcXVpcmUtc3BlY2lhbC1iZWhhdmlvci5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvYXJyYXktc3RvcmFnZS1z
cGxpY2UtaG9sZXMtcmVxdWlyZS1zcGVjaWFsLWJlaGF2aW9yLmpzCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2FycmF5LXN0b3JhZ2Utc3BsaWNlLWhvbGVzLXJl
cXVpcmUtc3BlY2lhbC1iZWhhdmlvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM2IEBA
CitkZXNjcmlwdGlvbigiVGVzdCB0byBlbnN1cmUgY29ycmVjdCBiZWhhdmlvdXIgb2Ygc3BsaWNl
IGluIGFycmF5IHN0b3JhZ2UgbW9kZSB3aXRoIGluZGV4ZWQgcHJvcGVydGllcyBpbiB0aGUgcHJv
dG90eXBlIGNoYWluLiIpOworCisvLyBBcnJheSBzdG9yYWdlIHNoaWZ0IGhvbGVzIHJlcXVpcmUg
c3BlY2lhbCBiZWhhdmlvci4KK3ZhciB0cmlja3lJbmRleCA9IDY7CitPYmplY3QucHJvdG90eXBl
W3RyaWNreUluZGV4XSA9IHRyaWNreUluZGV4OworCit2YXIgYSA9IG5ldyBBcnJheSgxMCk7Citm
b3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpIHsKKyAgICBpZiAoaSA9PT0gdHJpY2t5
SW5kZXgpCisgICAgICAgIGNvbnRpbnVlOworICAgIGFbaV0gPSBpOworfQorCithLnNoaWZ0KCk7
IC8vIENvbnZlcnRzIHRvIGFycmF5IHN0b3JhZ2UgbW9kZS4KK3ZhciBzdGFydEluZGV4ID0gMzsK
K2Euc3BsaWNlKHN0YXJ0SW5kZXgsIDEpOworCitmb3IgKHZhciBpID0gMDsgaSA8IHN0YXJ0SW5k
ZXg7ICsraSkKKyAgICBzaG91bGRCZSgiYVsiICsgaSArICJdIiwgIiIgKyAoaSArIDEpKTsKKwor
Zm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGkgPCBhLmxlbmd0aDsgKytpKQorICAgIHNob3VsZEJl
KCJhWyIgKyBpICsgIl0iLCAiIiArIChpICsgMikpOworCisvLyBBcnJheSBzdG9yYWdlIHNoaWZ0
IGhvbGVzIHJlcXVpcmUgc3BlY2lhbCBiZWhhdmlvciwgYnV0IHRoZXJlIGFyZW4ndCBhbnkgaG9s
ZXMuCit2YXIgYiA9IG5ldyBBcnJheSgxMCk7Citmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3Ro
OyArK2kpCisgICAgYltpXSA9IGk7CisKK2Iuc2hpZnQoKTsgLy8gQ29udmVydHMgdG8gYXJyYXkg
c3RvcmFnZSBtb2RlLgorYi5zcGxpY2Uoc3RhcnRJbmRleCwgMSk7CisKK2ZvciAodmFyIGkgPSAw
OyBpIDwgc3RhcnRJbmRleDsgKytpKQorICAgIHNob3VsZEJlKCJiWyIgKyBpICsgIl0iLCAiIiAr
IChpICsgMSkpOworCitmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSA8IGIubGVuZ3RoOyArK2kp
CisgICAgc2hvdWxkQmUoImJbIiArIGkgKyAiXSIsICIiICsgKGkgKyAyKSk7CkluZGV4OiBMYXlv
dXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvYXJyYXktc3RvcmFnZS1zcGxpY2UtaG9sZXMuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2FycmF5LXN0b3JhZ2Utc3Bs
aWNlLWhvbGVzLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3Rz
L2FycmF5LXN0b3JhZ2Utc3BsaWNlLWhvbGVzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjcgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0cyBmb3IgY29ycmVjdCBiZWhhdmlvciBvZiBzcGxpY2Ug
d2l0aCBhcnJheSBzdG9yYWdlIHdpdGggaG9sZXMuIik7CisKKy8vIEFycmF5IHN0b3JhZ2Ugc3Bs
aWNlIGhvbGVzLgordmFyIGhvbGVJbmRleCA9IDc7CisKK3ZhciBhID0gbmV3IEFycmF5KDEwKTsK
K2ZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7ICsraSkgeworICAgIGlmIChpID09PSBob2xl
SW5kZXgpCisgICAgICAgIGNvbnRpbnVlOworICAgIGFbaV0gPSBpOworfQorCithLnNoaWZ0KCk7
IC8vIENvbnZlcnRzIHRvIGFycmF5IHN0b3JhZ2UgbW9kZS4KKwordmFyIHN0YXJ0SW5kZXggPSA0
OworYS5zcGxpY2Uoc3RhcnRJbmRleCwgMSk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgc3RhcnRJ
bmRleDsgKytpKQorICAgIHNob3VsZEJlKCJhWyIgKyBpICsgIl0iLCAiIiArIChpICsgMSkpOwor
Citmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSA8IGEubGVuZ3RoOyArK2kpIHsKKyAgICBpZiAo
aSA9PT0gaG9sZUluZGV4IC0gMikgeworICAgICAgICBzaG91bGRCZSgiYS5oYXNPd25Qcm9wZXJ0
eSgnIiArIGkgKyAiJykiLCAiZmFsc2UiKTsKKyAgICAgICAgY29udGludWU7CisgICAgfQorICAg
IHNob3VsZEJlKCJhWyIgKyBpICsgIl0iLCAiIiArIChpICsgMikpOworfQpJbmRleDogTGF5b3V0
VGVzdHMvanMvc2NyaXB0LXRlc3RzL2FycmF5LXN0b3JhZ2Utc3BsaWNlLW5vLWhvbGVzLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9hcnJheS1zdG9yYWdlLXNw
bGljZS1uby1ob2xlcy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3NjcmlwdC10
ZXN0cy9hcnJheS1zdG9yYWdlLXNwbGljZS1uby1ob2xlcy5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE3IEBACitkZXNjcmlwdGlvbigiVGVzdHMgYXJyYXkuc3BsaWNlIGJlaGF2aW9yIGZv
ciBhcnJheSBzdG9yYWdlIHdpdGggbm8gaG9sZXMuIik7CisKKy8vIEFycmF5IHN0b3JhZ2Ugc3Bs
aWNlIHcvbyBob2xlcy4KK3ZhciBhID0gbmV3IEFycmF5KDEwKTsKK2ZvciAodmFyIGkgPSAwOyBp
IDwgYS5sZW5ndGg7ICsraSkKKyAgICBhW2ldID0gaTsKKworYS5zaGlmdCgpOyAvLyBDb252ZXJ0
cyB0byBhcnJheSBzdG9yYWdlIG1vZGUuCisKK3ZhciBzdGFydEluZGV4ID0gNDsKK2Euc3BsaWNl
KHN0YXJ0SW5kZXgsIDEpOworCitmb3IgKHZhciBpID0gMDsgaSA8IHN0YXJ0SW5kZXg7ICsraSkK
KyAgICBzaG91bGRCZSgiYVsiICsgaSArICJdIiwgIiIgKyAoaSArIDEpKTsKKworZm9yICh2YXIg
aSA9IHN0YXJ0SW5kZXg7IGkgPCBhLmxlbmd0aDsgKytpKQorICAgIHNob3VsZEJlKCJhWyIgKyBp
ICsgIl0iLCAiIiArIChpICsgMikpOwpJbmRleDogTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3Rz
L2NvbnRpZ3VvdXMtc3BsaWNlLWhvbGVzLXJlcXVpcmUtc3BlY2lhbC1iZWhhdmlvci5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvY29udGlndW91cy1zcGxpY2Ut
aG9sZXMtcmVxdWlyZS1zcGVjaWFsLWJlaGF2aW9yLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvanMvc2NyaXB0LXRlc3RzL2NvbnRpZ3VvdXMtc3BsaWNlLWhvbGVzLXJlcXVpcmUtc3Bl
Y2lhbC1iZWhhdmlvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2IEBACitkZXNjcmlw
dGlvbigiVGVzdHMgYXJyYXkuc3BsaWNlIGJlaGF2aW9yIHdpdGggaG9sZXkgY29udGlndW91cyBz
dG9yYWdlIHdpdGggaW5kZXhlZCBwcm9wZXJ0aWVzIGluIHRoZSBwcm90b3R5cGUgY2hhaW4uIik7
CisKKy8vIENvbnRpZ3VvdXMgc3BsaWNlIGhvbGVzIHJlcXVpcmUgc3BlY2lhbCBiZWhhdmlvci4K
K3ZhciB0cmlja3lJbmRleCA9IDk7CitPYmplY3QucHJvdG90eXBlW3RyaWNreUluZGV4XSA9IHRy
aWNreUluZGV4OworCit2YXIgYSA9IG5ldyBBcnJheSgxMCk7Citmb3IgKHZhciBpID0gMDsgaSA8
IGEubGVuZ3RoOyArK2kpIHsKKyAgICBpZiAoaSA9PT0gdHJpY2t5SW5kZXgpCisgICAgICAgIGNv
bnRpbnVlOworICAgIGFbaV0gPSBpOworfQorYS5zcGxpY2UoMCwgMSk7Citmb3IgKHZhciBpID0g
MDsgaSA8IGEubGVuZ3RoOyArK2kpIHsKKyAgICBzaG91bGRCZSgiYVsiICsgaSArICJdIiwgIiIg
KyAoaSArIDEpKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9jb250aWd1
b3VzLXNwbGljZS1ob2xlcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9zY3JpcHQt
dGVzdHMvY29udGlndW91cy1zcGxpY2UtaG9sZXMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9qcy9zY3JpcHQtdGVzdHMvY29udGlndW91cy1zcGxpY2UtaG9sZXMuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxOSBAQAorZGVzY3JpcHRpb24oIlRlc3RzIGFycmF5LnNwbGljZSBi
ZWhhdmlvciBmb3IgY29udGlndW91cyBzdG9yYWdlIHdpdGggaG9sZXMuIik7CisKKy8vIENvbnRp
Z3VvdXMgc3BsaWNlIHcvIGhvbGVzLgordmFyIHRyaWNreUluZGV4ID0gOTsKKwordmFyIGEgPSBu
ZXcgQXJyYXkoMTApOworZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgKytpKSB7CisgICAg
aWYgKGkgPT09IHRyaWNreUluZGV4KQorICAgICAgICBjb250aW51ZTsKKyAgICBhW2ldID0gaTsK
K30KK2Euc3BsaWNlKDAsIDEpOworZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgKytpKSB7
CisgICAgaWYgKGkgPT09IHRyaWNreUluZGV4IC0gMSkgeworICAgICAgICBzaG91bGRCZSgiYS5o
YXNPd25Qcm9wZXJ0eSgnIiArIGkgKyAiJykiLCAiZmFsc2UiKTsKKyAgICAgICAgY29udGludWU7
CisgICAgfQorICAgIHNob3VsZEJlKCJhWyIgKyBpICsgIl0iLCAiIiArIChpICsgMSkpOworfQpJ
bmRleDogTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2NvbnRpZ3VvdXMtc3BsaWNlLW5vLWhv
bGVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9jb250aWd1
b3VzLXNwbGljZS1uby1ob2xlcy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3Nj
cmlwdC10ZXN0cy9jb250aWd1b3VzLXNwbGljZS1uby1ob2xlcy5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE1IEBACitkZXNjcmlwdGlvbigiVGVzdHMgYXJyYXkuc3BsaWNlIGJlaGF2aW9y
IGZvciBjb250aWd1b3VzIHN0b3JhZ2Ugd2l0aCBubyBob2xlcy4iKTsKKwordmFyIGEgPSBuZXcg
QXJyYXkoMTApOworZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgKytpKSB7CisgICAgYVtp
XSA9IGk7Cit9Cit2YXIgc3RhcnRJbmRleCA9IDM7CithLnNwbGljZShzdGFydEluZGV4LCAxKTsK
K2ZvciAodmFyIGkgPSAwOyBpIDwgc3RhcnRJbmRleDsgKytpKSB7CisgICAgc2hvdWxkQmUoImFb
IiArIGkgKyAiXSIsICIiICsgaSk7Cit9CisKK2ZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpIDwg
YS5sZW5ndGg7ICsraSkgeworICAgIHNob3VsZEJlKCJhWyIgKyBpICsgIl0iLCAiIiArIChpICsg
MSkpOworfQo=
</data>
<flag name="review"
          id="256187"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>