<?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>144666</bug_id>
          
          <creation_ts>2015-05-05 22:50:13 -0700</creation_ts>
          <short_desc>WebBackForwardList::backForwardListState(filter) can set the currentIndex to a really large number</short_desc>
          <delta_ts>2015-05-07 10:54:10 -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>WebKit2</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="Ada Chan">adachan</reporter>
          <assigned_to name="Ada Chan">adachan</assigned_to>
          <cc>adachan</cc>
    
    <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>sam</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1092054</commentid>
    <comment_count>0</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2015-05-05 22:50:13 -0700</bug_when>
    <thetext>If the currentIndex is 0 and the first item gets filtered out, we&apos;ll end up decrementing currentIndex (which is bad as it&apos;s unsigned).

See the code here:

    for (size_t i = 0; i &lt; m_entries.size(); ++i) {
        auto&amp; entry = *m_entries[i];

        if (filter &amp;&amp; !filter(entry)) {
            if (backForwardListState.currentIndex &amp;&amp; i &lt;= backForwardListState.currentIndex.value())
                --backForwardListState.currentIndex.value();

            continue;
        }

        backForwardListState.items.append(entry.itemState());
    }

Seems like we should check whether the currentIndex &gt; 0 before decrementing it. And if the list items end up being all filtered out, then the currentIndex should be set to the &quot;uninitialized&quot; value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092304</commentid>
    <comment_count>1</comment_count>
      <attachid>252516</attachid>
    <who name="Ada Chan">adachan</who>
    <bug_when>2015-05-06 13:46:57 -0700</bug_when>
    <thetext>Created attachment 252516
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092405</commentid>
    <comment_count>2</comment_count>
      <attachid>252516</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-05-06 16:50:41 -0700</bug_when>
    <thetext>Comment on attachment 252516
Patch

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

&gt; Source/WebKit2/UIProcess/WebBackForwardList.cpp:401
&gt; +            if (backForwardListState.currentIndex &amp;&amp; i &lt;= backForwardListState.currentIndex.value() &amp;&amp; backForwardListState.currentIndex.value())
&gt;                  --backForwardListState.currentIndex.value();

Common subexpression is getting out of hand here. Here’s one way to deal with that

    auto&amp; index = backForwardListState.currentIndex;
    if (index &amp;&amp; i &lt;= index.value() &amp;&amp; index.value())
        --index.value();

&gt; Source/WebKit2/UIProcess/WebBackForwardList.cpp:410
&gt; +        backForwardListState.currentIndex = Optional&lt;uint32_t&gt;();

There are two other ways to write this that are both more terse:

    backForwardListState.currentIndex = Nullopt;
    backForwardListState.currentIndex = { };

I suggest using one of those.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092490</commentid>
    <comment_count>3</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2015-05-06 21:15:47 -0700</bug_when>
    <thetext>Thanks Darin.  I&apos;ll incorporate your feedback and post an updated patch (this time with a test).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092495</commentid>
    <comment_count>4</comment_count>
      <attachid>252566</attachid>
    <who name="Ada Chan">adachan</who>
    <bug_when>2015-05-06 21:27:31 -0700</bug_when>
    <thetext>Created attachment 252566
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092639</commentid>
    <comment_count>5</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2015-05-07 10:44:21 -0700</bug_when>
    <thetext>I ended up removing the Util::run(&amp;didFinishLoad) after restoring the page with sessionStateWithAllItemsRemoved because nothing really gets loaded in that case.  I&apos;ll add a comment about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092642</commentid>
    <comment_count>6</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2015-05-07 10:54:10 -0700</bug_when>
    <thetext>Committed:
http://trac.webkit.org/changeset/183933</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252516</attachid>
            <date>2015-05-06 13:46:57 -0700</date>
            <delta_ts>2015-05-06 21:27:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Fix-a-couple-of-cases-where-the-backForwardListState.patch</filename>
            <type>text/plain</type>
            <size>2803</size>
            <attacher name="Ada Chan">adachan</attacher>
            
              <data encoding="base64">RnJvbSA0NGZmZjdhMGNiZTJlNTRmY2IxNWE2YzU5M2MwOTM3ZDQ1ZTFjY2NhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBZGEgQ2hhbiA8YWRhY2hhbkBhcHBsZS5jb20+CkRhdGU6IFdl
ZCwgNiBNYXkgMjAxNSAxMzo0NDoxOCAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIEZpeCBhIGNvdXBs
ZSBvZiBjYXNlcyB3aGVyZSB0aGUgYmFja0ZvcndhcmRMaXN0U3RhdGUncwogY3VycmVudEluZGV4
IGlzIG5vdCBzZXQgY29ycmVjdGx5IGluCiBXZWJCYWNrRm9yd2FyZExpc3Q6OmJhY2tGb3J3YXJk
TGlzdFN0YXRlKCkuCiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0
NjY2CgpSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiogVUlQcm9jZXNzL1dlYkJhY2tGb3J3
YXJkTGlzdC5jcHA6CihXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6YmFja0ZvcndhcmRMaXN0
U3RhdGUpOgpJZiB0aGUgZmlyc3QgaXRlbSBpcyBmaWx0ZXJlZCBvdXQgYW5kIHRoZSBjdXJyZW50
SW5kZXggaXMgMCwgZG9uJ3QgZGVjcmVtZW50IGN1cnJlbnRJbmRleC4KSWYgYWxsIHRoZSBpdGVt
cyBhcmUgZmlsdGVyZWQgb3V0LCBzZXQgY3VycmVudEluZGV4IHRvIHRoZSB1bmluaXRpYWxpemVk
IHZhbHVlLgotLS0KIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAg
ICAgIHwgMTIgKysrKysrKysrKysrCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQmFja0Zv
cndhcmRMaXN0LmNwcCB8ICA1ICsrKystCiAyIGZpbGVzIGNoYW5nZWQsIDE2IGluc2VydGlvbnMo
KyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggY2MzMzI0ZC4uZmY1Y2Q4ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE1LTA1LTA2ICBBZGEgQ2hhbiAgPGFkYWNoYW5AYXBw
bGUuY29tPgorCisgICAgICAgIEZpeCBhIGNvdXBsZSBvZiBjYXNlcyB3aGVyZSB0aGUgYmFja0Zv
cndhcmRMaXN0U3RhdGUncyBjdXJyZW50SW5kZXggaXMgbm90IHNldCBjb3JyZWN0bHkgaW4gV2Vi
QmFja0ZvcndhcmRMaXN0OjpiYWNrRm9yd2FyZExpc3RTdGF0ZSgpLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjY2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQmFja0Zvcndh
cmRMaXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0OjpiYWNrRm9y
d2FyZExpc3RTdGF0ZSk6CisgICAgICAgIElmIHRoZSBmaXJzdCBpdGVtIGlzIGZpbHRlcmVkIG91
dCBhbmQgdGhlIGN1cnJlbnRJbmRleCBpcyAwLCBkb24ndCBkZWNyZW1lbnQgY3VycmVudEluZGV4
LgorICAgICAgICBJZiBhbGwgdGhlIGl0ZW1zIGFyZSBmaWx0ZXJlZCBvdXQsIHNldCBjdXJyZW50
SW5kZXggdG8gdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWUuCisKIDIwMTUtMDUtMDQgIEFudHRpIEtv
aXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIE5ldHdvcmsgQ2FjaGU6IFN1cHBv
cnQgdGltZSBiYXNlZCBjYWNoZSBjbGVhcmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViQmFja0ZvcndhcmRMaXN0LmNwcAppbmRleCBkZTI4MjEyLi4zZmUxNDk2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmNwcApAQCAtMzk3
LDcgKzM5Nyw3IEBAIEJhY2tGb3J3YXJkTGlzdFN0YXRlIFdlYkJhY2tGb3J3YXJkTGlzdDo6YmFj
a0ZvcndhcmRMaXN0U3RhdGUoY29uc3Qgc3RkOjpmdW5jdGlvCiAgICAgICAgIGF1dG8mIGVudHJ5
ID0gKm1fZW50cmllc1tpXTsKIAogICAgICAgICBpZiAoZmlsdGVyICYmICFmaWx0ZXIoZW50cnkp
KSB7Ci0gICAgICAgICAgICBpZiAoYmFja0ZvcndhcmRMaXN0U3RhdGUuY3VycmVudEluZGV4ICYm
IGkgPD0gYmFja0ZvcndhcmRMaXN0U3RhdGUuY3VycmVudEluZGV4LnZhbHVlKCkpCisgICAgICAg
ICAgICBpZiAoYmFja0ZvcndhcmRMaXN0U3RhdGUuY3VycmVudEluZGV4ICYmIGkgPD0gYmFja0Zv
cndhcmRMaXN0U3RhdGUuY3VycmVudEluZGV4LnZhbHVlKCkgJiYgYmFja0ZvcndhcmRMaXN0U3Rh
dGUuY3VycmVudEluZGV4LnZhbHVlKCkpCiAgICAgICAgICAgICAgICAgLS1iYWNrRm9yd2FyZExp
c3RTdGF0ZS5jdXJyZW50SW5kZXgudmFsdWUoKTsKIAogICAgICAgICAgICAgY29udGludWU7CkBA
IC00MDYsNiArNDA2LDkgQEAgQmFja0ZvcndhcmRMaXN0U3RhdGUgV2ViQmFja0ZvcndhcmRMaXN0
OjpiYWNrRm9yd2FyZExpc3RTdGF0ZShjb25zdCBzdGQ6OmZ1bmN0aW8KICAgICAgICAgYmFja0Zv
cndhcmRMaXN0U3RhdGUuaXRlbXMuYXBwZW5kKGVudHJ5Lml0ZW1TdGF0ZSgpKTsKICAgICB9CiAK
KyAgICBpZiAoYmFja0ZvcndhcmRMaXN0U3RhdGUuaXRlbXMuaXNFbXB0eSgpKQorICAgICAgICBi
YWNrRm9yd2FyZExpc3RTdGF0ZS5jdXJyZW50SW5kZXggPSBPcHRpb25hbDx1aW50MzJfdD4oKTsK
KwogICAgIHJldHVybiBiYWNrRm9yd2FyZExpc3RTdGF0ZTsKIH0KIAotLSAKMi4zLjIgKEFwcGxl
IEdpdC01NSkKCg==
</data>
<flag name="review"
          id="277356"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252566</attachid>
            <date>2015-05-06 21:27:31 -0700</date>
            <delta_ts>2015-05-07 09:25:50 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>0001-Source-WebKit2.patch</filename>
            <type>text/plain</type>
            <size>14216</size>
            <attacher name="Ada Chan">adachan</attacher>
            
              <data encoding="base64">RnJvbSAxZDM2NDlmMTI1YmZjNThkMzVjZDY1NGQwOTlkZGQzYzkxOThlZDhjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBZGEgQ2hhbiA8YWRhY2hhbkBhcHBsZS5jb20+CkRhdGU6IFdl
ZCwgNiBNYXkgMjAxNSAxNDowMzo1NCAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIFNvdXJjZS9XZWJL
aXQyOiBGaXggYSBjb3VwbGUgb2YgY2FzZXMgd2hlcmUgdGhlCiBiYWNrRm9yd2FyZExpc3RTdGF0
ZSdzIGN1cnJlbnRJbmRleCBpcyBub3Qgc2V0IGNvcnJlY3RseSBpbgogV2ViQmFja0ZvcndhcmRM
aXN0OjpiYWNrRm9yd2FyZExpc3RTdGF0ZSgpLgogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0NDY2NgoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgoqIFVJUHJv
Y2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwOgooV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3Q6
OmJhY2tGb3J3YXJkTGlzdFN0YXRlKToKSWYgdGhlIGZpcnN0IGl0ZW0gaXMgZmlsdGVyZWQgb3V0
IGFuZCB0aGUgY3VycmVudEluZGV4IGlzIDAsIGRvbid0IGRlY3JlbWVudCBjdXJyZW50SW5kZXgu
CklmIGFsbCB0aGUgaXRlbXMgYXJlIGZpbHRlcmVkIG91dCwgc2V0IGN1cnJlbnRJbmRleCB0byB0
aGUgdW5pbml0aWFsaXplZCB2YWx1ZS4KClRvb2xzOgpBZGQgYSB0ZXN0IGZvciBXS1BhZ2VDb3B5
U2Vzc2lvblN0YXRlKCkgd2l0aCBmaWx0ZXJpbmcuCmh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDQ2NjYKClJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKKiBUZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvV0tQYWdlQ29weVNlc3Npb25TdGF0ZVdpdGhGaWx0ZXJp
bmcuY3BwOiBBZGRlZC4KKFRlc3RXZWJLaXRBUEk6OmRpZEZpbmlzaExvYWRGb3JGcmFtZSk6CihU
ZXN0V2ViS2l0QVBJOjpzZXRQYWdlTG9hZGVyQ2xpZW50KToKKFRlc3RXZWJLaXRBUEk6OmZpbHRl
ckZpcnN0SXRlbUNhbGxiYWNrKToKKFRlc3RXZWJLaXRBUEk6OmZpbHRlckFsbEl0ZW1zQ2FsbGJh
Y2spOgooVGVzdFdlYktpdEFQSTo6Y3JlYXRlU2Vzc2lvblN0YXRlcyk6CihUZXN0V2ViS2l0QVBJ
OjpURVNUKToKLS0tCiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAxMiArKwogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJk
TGlzdC5jcHAgICAgfCAgIDggKy0KIFRvb2xzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgIDE2ICsrKwogLi4uL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiAgICAgICAgfCAgIDQgKwogLi4uL1dLUGFnZUNvcHlTZXNzaW9uU3RhdGVX
aXRoRmlsdGVyaW5nLmNwcCAgICAgICAgfCAxMzUgKysrKysrKysrKysrKysrKysrKysrCiA1IGZp
bGVzIGNoYW5nZWQsIDE3MyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9XS1BhZ2VDb3B5U2Vz
c2lvblN0YXRlV2l0aEZpbHRlcmluZy5jcHAKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZjBhOTYxNi4uY2ExNDM4
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE1LTA1LTA2ICBBZGEgQ2hhbiAgPGFk
YWNoYW5AYXBwbGUuY29tPgorCisgICAgICAgIEZpeCBhIGNvdXBsZSBvZiBjYXNlcyB3aGVyZSB0
aGUgYmFja0ZvcndhcmRMaXN0U3RhdGUncyBjdXJyZW50SW5kZXggaXMgbm90IHNldCBjb3JyZWN0
bHkgaW4gV2ViQmFja0ZvcndhcmRMaXN0OjpiYWNrRm9yd2FyZExpc3RTdGF0ZSgpLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjY2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
QmFja0ZvcndhcmRMaXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0
OjpiYWNrRm9yd2FyZExpc3RTdGF0ZSk6CisgICAgICAgIElmIHRoZSBmaXJzdCBpdGVtIGlzIGZp
bHRlcmVkIG91dCBhbmQgdGhlIGN1cnJlbnRJbmRleCBpcyAwLCBkb24ndCBkZWNyZW1lbnQgY3Vy
cmVudEluZGV4LgorICAgICAgICBJZiBhbGwgdGhlIGl0ZW1zIGFyZSBmaWx0ZXJlZCBvdXQsIHNl
dCBjdXJyZW50SW5kZXggdG8gdGhlIHVuaW5pdGlhbGl6ZWQgdmFsdWUuCisKIDIwMTUtMDQtMDIg
IE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBJbnRy
b2R1Y2luZyB0aGUgUGxhdGZvcm0gQWJzdHJhY3Rpb24gTGF5ZXIgKFBBTCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAKaW5kZXggZGUyODIxMi4u
MGVlNjQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3
YXJkTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJk
TGlzdC5jcHAKQEAgLTM5Nyw4ICszOTcsOSBAQCBCYWNrRm9yd2FyZExpc3RTdGF0ZSBXZWJCYWNr
Rm9yd2FyZExpc3Q6OmJhY2tGb3J3YXJkTGlzdFN0YXRlKGNvbnN0IHN0ZDo6ZnVuY3RpbwogICAg
ICAgICBhdXRvJiBlbnRyeSA9ICptX2VudHJpZXNbaV07CiAKICAgICAgICAgaWYgKGZpbHRlciAm
JiAhZmlsdGVyKGVudHJ5KSkgewotICAgICAgICAgICAgaWYgKGJhY2tGb3J3YXJkTGlzdFN0YXRl
LmN1cnJlbnRJbmRleCAmJiBpIDw9IGJhY2tGb3J3YXJkTGlzdFN0YXRlLmN1cnJlbnRJbmRleC52
YWx1ZSgpKQotICAgICAgICAgICAgICAgIC0tYmFja0ZvcndhcmRMaXN0U3RhdGUuY3VycmVudElu
ZGV4LnZhbHVlKCk7CisgICAgICAgICAgICBhdXRvJiBjdXJyZW50SW5kZXggPSBiYWNrRm9yd2Fy
ZExpc3RTdGF0ZS5jdXJyZW50SW5kZXg7CisgICAgICAgICAgICBpZiAoY3VycmVudEluZGV4ICYm
IGkgPD0gY3VycmVudEluZGV4LnZhbHVlKCkgJiYgY3VycmVudEluZGV4LnZhbHVlKCkpCisgICAg
ICAgICAgICAgICAgLS1jdXJyZW50SW5kZXgudmFsdWUoKTsKIAogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIH0KQEAgLTQwNiw2ICs0MDcsOSBAQCBCYWNrRm9yd2FyZExpc3RTdGF0ZSBX
ZWJCYWNrRm9yd2FyZExpc3Q6OmJhY2tGb3J3YXJkTGlzdFN0YXRlKGNvbnN0IHN0ZDo6ZnVuY3Rp
bwogICAgICAgICBiYWNrRm9yd2FyZExpc3RTdGF0ZS5pdGVtcy5hcHBlbmQoZW50cnkuaXRlbVN0
YXRlKCkpOwogICAgIH0KIAorICAgIGlmIChiYWNrRm9yd2FyZExpc3RTdGF0ZS5pdGVtcy5pc0Vt
cHR5KCkpCisgICAgICAgIGJhY2tGb3J3YXJkTGlzdFN0YXRlLmN1cnJlbnRJbmRleCA9IE51bGxv
cHQ7CisKICAgICByZXR1cm4gYmFja0ZvcndhcmRMaXN0U3RhdGU7CiB9CiAKZGlmZiAtLWdpdCBh
L1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhNzdjODJmLi5hY2QyNjhj
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTkgQEAKKzIwMTUtMDUtMDYgIEFkYSBDaGFuICA8YWRhY2hhbkBhcHBsZS5jb20+CisK
KyAgICAgICAgQWRkIGEgdGVzdCBmb3IgV0tQYWdlQ29weVNlc3Npb25TdGF0ZSgpIHdpdGggZmls
dGVyaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQ0NjY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvV0tQYWdlQ29weVNlc3Npb25T
dGF0ZVdpdGhGaWx0ZXJpbmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmRp
ZEZpbmlzaExvYWRGb3JGcmFtZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpzZXRQYWdlTG9h
ZGVyQ2xpZW50KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmZpbHRlckZpcnN0SXRlbUNhbGxi
YWNrKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmZpbHRlckFsbEl0ZW1zQ2FsbGJhY2spOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y3JlYXRlU2Vzc2lvblN0YXRlcyk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxNS0wNS0wNiAgQWxleGV5IFByb3NrdXJ5YWtvdiAg
PGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBEbyBub3QgbGluayB0b29scyB0byBXZWJLaXQyLmZy
YW1ld29yawpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRB
UEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1ODc3NmU0Li5iYzEzZDE2IDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTUsNiArNTUsNyBAQAogCQk1MjRCQkM5RTE5REY3MkMw
MDAyRjFBRjEgLyogZmlsZS13aXRoLXZpZGVvLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI0QkJDOUIxOURGMzcxNDAwMkYxQUYxIC8q
IGZpbGUtd2l0aC12aWRlby5odG1sICovOyB9OwogCQk1MjRCQkNBMTE5RTMwQzc3MDAyRjFBRjEg
LyogdGVzdC5tcDQgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTI0QkJDQTAxOUUzMEM2MzAwMkYxQUYxIC8qIHRlc3QubXA0ICovOyB9OwogCQk1
MkI4Q0Y5ODE1ODY4RDkxMDAyODEwNTMgLyogU2V0RG9jdW1lbnRVUkkuaHRtbCBpbiBDb3B5IFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkI4Q0Y5NDE1ODY4
Q0YwMDAyODEwNTMgLyogU2V0RG9jdW1lbnRVUkkuaHRtbCAqLzsgfTsKKwkJNTJENjczRUUxQUZC
MTI3MzAwRkExOUZFIC8qIFdLUGFnZUNvcHlTZXNzaW9uU3RhdGVXaXRoRmlsdGVyaW5nLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDY3M0VDMUFG
QjEyNjgwMEZBMTlGRSAvKiBXS1BhZ2VDb3B5U2Vzc2lvblN0YXRlV2l0aEZpbHRlcmluZy5jcHAg
Ki87IH07CiAJCTUyRTVDRTQ5MTREMjFFQUIwMDNCMkJEOCAvKiBQYXJlbnRGcmFtZV9CdW5kbGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJFNUNF
NDgxNEQyMUVBQjAwM0IyQkQ4IC8qIFBhcmVudEZyYW1lX0J1bmRsZS5jcHAgKi87IH07CiAJCTc2
NzM0OTlEMTkzMEM1QkIwMEU0NERGOSAvKiBTdG9wTG9hZGluZ0R1cmluZ0RpZEZhaWxQcm92aXNp
b25hbExvYWRfYnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc2NzM0OTlBMTkzMDE4MkUwMEU0NERGOSAvKiBTdG9wTG9hZGluZ0R1cmluZ0Rp
ZEZhaWxQcm92aXNpb25hbExvYWRfYnVuZGxlLmNwcCAqLzsgfTsKIAkJNzZFMTgyREQxNTQ3NTY5
MTAwRjFGQUREIC8qIFdpbGxTZW5kU3VibWl0RXZlbnRfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc2RTE4MkRDMTU0NzU2OTEwMEYxRkFE
RCAvKiBXaWxsU2VuZFN1Ym1pdEV2ZW50X0J1bmRsZS5jcHAgKi87IH07CkBAIC01MjMsNiArNTI0
LDcgQEAKIAkJNTJCOENGOTQxNTg2OENGMDAwMjgxMDUzIC8qIFNldERvY3VtZW50VVJJLmh0bWwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBTZXREb2N1bWVudFVSSS5odG1sOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MkI4Q0Y5NTE1ODY4Q0YwMDAyODEwNTMgLyogU2V0RG9j
dW1lbnRVUkkubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTZXRE
b2N1bWVudFVSSS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDQjQ3NDAxNDQ4
RkI5MzAwODczOTk1IC8qIExvYWRBbHRlcm5hdGVIVE1MU3RyaW5nV2l0aE5vbkRpcmVjdG9yeVVS
TC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2FkQWx0ZXJuYXRl
SFRNTFN0cmluZ1dpdGhOb25EaXJlY3RvcnlVUkwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MkQ2NzNFQzFBRkIxMjY4MDBGQTE5RkUgLyogV0tQYWdlQ29weVNlc3Npb25TdGF0
ZVdpdGhGaWx0ZXJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V0tQYWdlQ29weVNlc3Npb25TdGF0ZVdpdGhGaWx0ZXJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MkU1Q0U0NTE0RDIxRTlEMDAzQjJCRDggLyogUGFyZW50RnJhbWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFyZW50RnJhbWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkU1Q0U0ODE0RDIxRUFCMDAzQjJCRDggLyog
UGFyZW50RnJhbWVfQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFBhcmVudEZyYW1lX0J1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTc1NjA5MTc3MTkyNTlDNTkwMDlFRjA2RSAvKiBNZW1vcnlDYWNoZUFkZEltYWdlVG9DYWNoZUlP
Uy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE1lbW9yeUNhY2hl
QWRkSW1hZ2VUb0NhY2hlSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAy
OCw2ICsxMDMwLDcgQEAKIAkJCQlBMUZERkQyRTE5QzI4OEJCMDA1MTQ4QTQgLyogV0tJbWFnZUNy
ZWF0ZUNHSW1hZ2VDcmFzaC5jcHAgKi8sCiAJCQkJN0E1NjIzMTAxQUQ1QUYzRTAwOTZCOTIwIC8q
IE1lbnVUeXBlc0Zvck1vdXNlRXZlbnRzLmNwcCAqLywKIAkJCQk3Qzg5RDJBQTFBNjlCODBEMDAz
QTVGREUgLyogV0tQYWdlQ29uZmlndXJhdGlvbi5jcHAgKi8sCisJCQkJNTJENjczRUMxQUZCMTI2
ODAwRkExOUZFIC8qIFdLUGFnZUNvcHlTZXNzaW9uU3RhdGVXaXRoRmlsdGVyaW5nLmNwcCAqLywK
IAkJCQk1MUU5MzAxNjE1NkIxM0UxMDA0Qzk5REYgLyogV0tQYWdlR2V0U2NhbGVGYWN0b3JOb3Ra
ZXJvLmNwcCAqLywKIAkJCQk1MjRCQkM5QzE5REYzNzdBMDAyRjFBRjEgLyogV0tQYWdlSXNQbGF5
aW5nQXVkaW8uY3BwICovLAogCQkJCUJDN0I2MTlBMTI5OUZFOUUwMEQxNzRBNCAvKiBXS1ByZWZl
cmVuY2VzLmNwcCAqLywKQEAgLTE0NDEsNiArMTQ0NCw3IEBACiAJCQkJN0NDRTdFRjMxQTQxMUFF
NjAwNDQ3QzRDIC8qIEZpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFRjQxQTQxMUFF
NjAwNDQ3QzRDIC8qIEZpbmRNYXRjaGVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFRjUx
QTQxMUFFNjAwNDQ3QzRDIC8qIEZvcmNlUmVwYWludC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1
MkQ2NzNFRTFBRkIxMjczMDBGQTE5RkUgLyogV0tQYWdlQ29weVNlc3Npb25TdGF0ZVdpdGhGaWx0
ZXJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQzAxQTQxMUE3RTAwNDQ3QzRDIC8q
IEZyYWdtZW50TmF2aWdhdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUY2MUE0MTFB
RTYwMDQ0N0M0QyAvKiBGcmFtZU1JTUVUeXBlSFRNTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
Q0NFN0VGNzFBNDExQUU2MDA0NDdDNEMgLyogRnJhbWVNSU1FVHlwZVBORy5jcHAgaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9XS1Bh
Z2VDb3B5U2Vzc2lvblN0YXRlV2l0aEZpbHRlcmluZy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDIvV0tQYWdlQ29weVNlc3Npb25TdGF0ZVdpdGhGaWx0ZXJpbmcuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOGJlY2IKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvV0tQYWdlQ29weVNlc3Npb25T
dGF0ZVdpdGhGaWx0ZXJpbmcuY3BwCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaWYgV0tfSEFWRV9DX1NQSQorCisjaW5jbHVkZSAiUGxhdGZv
cm1VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKKyNpbmNsdWRlICJU
ZXN0LmgiCisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworc3RhdGljIGJvb2wgZGlkRmlu
aXNoTG9hZDsKK3N0YXRpYyBXS1JldGFpblB0cjxXS1Nlc3Npb25TdGF0ZVJlZj4gc2Vzc2lvblN0
YXRlV2l0aEZpcnN0SXRlbVJlbW92ZWQ7CitzdGF0aWMgV0tSZXRhaW5QdHI8V0tTZXNzaW9uU3Rh
dGVSZWY+IHNlc3Npb25TdGF0ZVdpdGhBbGxJdGVtc1JlbW92ZWQ7CisKK3N0YXRpYyB2b2lkIGRp
ZEZpbmlzaExvYWRGb3JGcmFtZShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLVHlwZVJlZiwgY29u
c3Qgdm9pZCopCit7CisgICAgZGlkRmluaXNoTG9hZCA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lk
IHNldFBhZ2VMb2FkZXJDbGllbnQoV0tQYWdlUmVmIHBhZ2UpCit7CisgICAgV0tQYWdlTG9hZGVy
Q2xpZW50VjAgbG9hZGVyQ2xpZW50OworICAgIG1lbXNldCgmbG9hZGVyQ2xpZW50LCAwLCBzaXpl
b2YobG9hZGVyQ2xpZW50KSk7CisKKyAgICBsb2FkZXJDbGllbnQuYmFzZS52ZXJzaW9uID0gMDsK
KyAgICBsb2FkZXJDbGllbnQuZGlkRmluaXNoTG9hZEZvckZyYW1lID0gZGlkRmluaXNoTG9hZEZv
ckZyYW1lOworCisgICAgV0tQYWdlU2V0UGFnZUxvYWRlckNsaWVudChwYWdlLCAmbG9hZGVyQ2xp
ZW50LmJhc2UpOworfQorCitzdGF0aWMgYm9vbCBmaWx0ZXJGaXJzdEl0ZW1DYWxsYmFjayhXS1Bh
Z2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgdmFsdWVUeXBlLCBXS1R5cGVSZWYgdmFsdWUsIHZvaWQq
IGNvbnRleHQpCit7CisgICAgaWYgKCFXS1N0cmluZ0lzRXF1YWwodmFsdWVUeXBlLCBXS1BhZ2VH
ZXRTZXNzaW9uQmFja0ZvcndhcmRMaXN0SXRlbVZhbHVlVHlwZSgpKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBBU1NFUlQoV0tHZXRUeXBlSUQodmFsdWUpID09IFdLQmFja0ZvcndhcmRM
aXN0SXRlbUdldFR5cGVJRCgpKTsKKyAgICBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgYmFja0Zv
cndhcmRMaXN0SXRlbSA9IHN0YXRpY19jYXN0PFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZj4odmFs
dWUpOworCisgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybCA9IGFkb3B0V0soV0tCYWNrRm9y
d2FyZExpc3RJdGVtQ29weVVSTChiYWNrRm9yd2FyZExpc3RJdGVtKSk7CisgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHBhdGggPSBhZG9wdFdLKFdLVVJMQ29weUxhc3RQYXRoQ29tcG9uZW50
KHVybC5nZXQoKSkpOworCisgICAgcmV0dXJuICFXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KHBhdGguZ2V0KCksICJzaW1wbGUuaHRtbCIpOworfQorCitzdGF0aWMgYm9vbCBmaWx0ZXJBbGxJ
dGVtc0NhbGxiYWNrKFdLUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiB2YWx1ZVR5cGUsIFdLVHlw
ZVJlZiB2YWx1ZSwgdm9pZCogY29udGV4dCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0
YXRpYyB2b2lkIGNyZWF0ZVNlc3Npb25TdGF0ZXMoV0tDb250ZXh0UmVmIGNvbnRleHQpCit7Cisg
ICAgUGxhdGZvcm1XZWJWaWV3IHdlYlZpZXcoY29udGV4dCk7CisgICAgc2V0UGFnZUxvYWRlckNs
aWVudCh3ZWJWaWV3LnBhZ2UoKSk7CisKKyAgICBXS1BhZ2VMb2FkVVJMKHdlYlZpZXcucGFnZSgp
LCBhZG9wdFdLKFV0aWw6OmNyZWF0ZVVSTEZvclJlc291cmNlKCJzaW1wbGUiLCAiaHRtbCIpKS5n
ZXQoKSk7CisgICAgVXRpbDo6cnVuKCZkaWRGaW5pc2hMb2FkKTsKKyAgICBkaWRGaW5pc2hMb2Fk
ID0gZmFsc2U7CisKKyAgICBXS1BhZ2VMb2FkVVJMKHdlYlZpZXcucGFnZSgpLCBhZG9wdFdLKFV0
aWw6OmNyZWF0ZVVSTEZvclJlc291cmNlKCJzaW1wbGUyIiwgImh0bWwiKSkuZ2V0KCkpOworICAg
IFV0aWw6OnJ1bigmZGlkRmluaXNoTG9hZCk7CisgICAgZGlkRmluaXNoTG9hZCA9IGZhbHNlOwor
CisgICAgV0tQYWdlTG9hZFVSTCh3ZWJWaWV3LnBhZ2UoKSwgYWRvcHRXSyhVdGlsOjpjcmVhdGVV
UkxGb3JSZXNvdXJjZSgic2ltcGxlMyIsICJodG1sIikpLmdldCgpKTsKKyAgICBVdGlsOjpydW4o
JmRpZEZpbmlzaExvYWQpOworICAgIGRpZEZpbmlzaExvYWQgPSBmYWxzZTsKKworICAgIFdLUGFn
ZUdvQmFjayh3ZWJWaWV3LnBhZ2UoKSk7CisgICAgVXRpbDo6cnVuKCZkaWRGaW5pc2hMb2FkKTsK
KyAgICBkaWRGaW5pc2hMb2FkID0gZmFsc2U7CisKKyAgICBXS1BhZ2VHb0JhY2sod2ViVmlldy5w
YWdlKCkpOworICAgIFV0aWw6OnJ1bigmZGlkRmluaXNoTG9hZCk7CisgICAgZGlkRmluaXNoTG9h
ZCA9IGZhbHNlOworCisgICAgLy8gU2hvdWxkIGJlIGJhY2sgb24gc2ltcGxlLmh0bWwgYXQgdGhp
cyBwb2ludC4KKworICAgIHNlc3Npb25TdGF0ZVdpdGhGaXJzdEl0ZW1SZW1vdmVkID0gYWRvcHRX
SyhzdGF0aWNfY2FzdDxXS1Nlc3Npb25TdGF0ZVJlZj4oV0tQYWdlQ29weVNlc3Npb25TdGF0ZSh3
ZWJWaWV3LnBhZ2UoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oMSksIGZpbHRlckZpcnN0SXRl
bUNhbGxiYWNrKSkpOworICAgIHNlc3Npb25TdGF0ZVdpdGhBbGxJdGVtc1JlbW92ZWQgPSBhZG9w
dFdLKHN0YXRpY19jYXN0PFdLU2Vzc2lvblN0YXRlUmVmPihXS1BhZ2VDb3B5U2Vzc2lvblN0YXRl
KHdlYlZpZXcucGFnZSgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigxKSwgZmlsdGVyQWxsSXRl
bXNDYWxsYmFjaykpKTsKK30KKworVEVTVChXZWJLaXQyLCBXS1BhZ2VDb3B5U2Vzc2lvblN0YXRl
V2l0aEZpbHRlcmluZykKK3sKKyAgICBXS1JldGFpblB0cjxXS0NvbnRleHRSZWY+IGNvbnRleHQo
QWRvcHRXSywgV0tDb250ZXh0Q3JlYXRlKCkpOworCisgICAgY3JlYXRlU2Vzc2lvblN0YXRlcyhj
b250ZXh0LmdldCgpKTsKKworICAgIEVYUEVDVF9OT1RfTlVMTChzZXNzaW9uU3RhdGVXaXRoRmly
c3RJdGVtUmVtb3ZlZCk7CisgICAgUGxhdGZvcm1XZWJWaWV3IHdlYlZpZXcxKGNvbnRleHQuZ2V0
KCkpOworICAgIHNldFBhZ2VMb2FkZXJDbGllbnQod2ViVmlldzEucGFnZSgpKTsKKyAgICBXS1Bh
Z2VSZXN0b3JlRnJvbVNlc3Npb25TdGF0ZSh3ZWJWaWV3MS5wYWdlKCksIHNlc3Npb25TdGF0ZVdp
dGhGaXJzdEl0ZW1SZW1vdmVkLmdldCgpKTsKKyAgICBVdGlsOjpydW4oJmRpZEZpbmlzaExvYWQp
OworCisgICAgV0tCYWNrRm9yd2FyZExpc3RSZWYgYmFja0ZvcndhcmRMaXN0MSA9IFdLUGFnZUdl
dEJhY2tGb3J3YXJkTGlzdCh3ZWJWaWV3MS5wYWdlKCkpOworICAgIEVYUEVDVF9FUSgwdSwgV0tC
YWNrRm9yd2FyZExpc3RHZXRCYWNrTGlzdENvdW50KGJhY2tGb3J3YXJkTGlzdDEpKTsKKyAgICBF
WFBFQ1RfRVEoMXUsIFdLQmFja0ZvcndhcmRMaXN0R2V0Rm9yd2FyZExpc3RDb3VudChiYWNrRm9y
d2FyZExpc3QxKSk7CisKKyAgICBFWFBFQ1RfTk9UX05VTEwoc2Vzc2lvblN0YXRlV2l0aEFsbEl0
ZW1zUmVtb3ZlZCk7CisgICAgUGxhdGZvcm1XZWJWaWV3IHdlYlZpZXcyKGNvbnRleHQuZ2V0KCkp
OworICAgIHNldFBhZ2VMb2FkZXJDbGllbnQod2ViVmlldzIucGFnZSgpKTsKKyAgICBXS1BhZ2VS
ZXN0b3JlRnJvbVNlc3Npb25TdGF0ZSh3ZWJWaWV3Mi5wYWdlKCksIHNlc3Npb25TdGF0ZVdpdGhB
bGxJdGVtc1JlbW92ZWQuZ2V0KCkpOworICAgIFV0aWw6OnJ1bigmZGlkRmluaXNoTG9hZCk7CisK
KyAgICBXS0JhY2tGb3J3YXJkTGlzdFJlZiBiYWNrRm9yd2FyZExpc3QyID0gV0tQYWdlR2V0QmFj
a0ZvcndhcmRMaXN0KHdlYlZpZXcyLnBhZ2UoKSk7CisgICAgRVhQRUNUX0VRKDB1LCBXS0JhY2tG
b3J3YXJkTGlzdEdldEJhY2tMaXN0Q291bnQoYmFja0ZvcndhcmRMaXN0MikpOworICAgIEVYUEVD
VF9FUSgwdSwgV0tCYWNrRm9yd2FyZExpc3RHZXRGb3J3YXJkTGlzdENvdW50KGJhY2tGb3J3YXJk
TGlzdDIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorCisjZW5kaWYKLS0g
CjIuMy4yIChBcHBsZSBHaXQtNTUpCgo=
</data>
<flag name="review"
          id="277400"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>