<?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>164441</bug_id>
          
          <creation_ts>2016-11-04 18:07:57 -0700</creation_ts>
          <short_desc>TypeProfiler and running GC collection on another thread don&apos;t play nicely with each other</short_desc>
          <delta_ts>2016-11-09 14:05:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1248395</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-04 18:07:57 -0700</bug_when>
    <thetext>the type profiler wants to do some JS like work, and call into getOwnPropertySlot, which may allocate stuff, etc.
The GC should communicate to the mutator thread that it should do this stuff before it stops.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248659</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-06 15:19:47 -0800</bug_when>
    <thetext>&lt;rdar://problem/29132174&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248664</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-06 16:49:22 -0800</bug_when>
    <thetext>I think that we could make this very clean.  Basically we want to replace all these darn bits with something that allows the collector to supply a lambda of execution to the mutator and then wait for it to do that.

We could do it with these additional fields in Heap:

    Lock m_requestedActivityLock;
    RefPtr&lt;SharedTask&lt;void()&gt;&gt; m_requestedActivity;

We would replace the needFinalizeBit with a requestedActivityBit, and rename finalize() to performRequestedActivity(), which would do:

    clearRequestedActivity(); // CAS loop to clear activity bit and unparkAll().
    {
        LockHolder locker(m_requestedActivityLock);
        if (m_requestedActivity) {
            m_requestedActivity-&gt;run();
            m_requestedActivity = nullptr;
        }
    }

In order to request an activity, the collector would do:

    template&lt;typename Func&gt;
    void requestActivity(const Func&amp; func)
    {
        {
            LockHolder locker(m_requestedActivityLock);
            RefPtr&lt;SharedTask&lt;void()&gt;&gt; previousActivity = m_requestedActivity;
            m_requestedActivity = createSharedTask&lt;void()&gt;(
                [=] () {
                    if (previousActivity)
                        previousActivity-&gt;run();
                    func();
                });
        }
        setRequestedActivity(); // CAS loop to set activity bit and unparkAll().
    }

I think that this is safe.  There are two atomic steps here on both sides.  In parentheses, I put short names for these atomic steps.

mutator: #1 clear activity bit (M:clear)
mutator: #2 run and clear the activity (M:run)
collector: #1 set the activity (C:setActivity)
collector: #2 set the activity bit (c:setBit)

The two obviously safe executions are:

mutator first: M:clear, M:run, C:setActivity, C:setBit

and

collector first: C:setActivity, C:setBit, M:clear, M:run

We know that each of these steps is atomic and has all of the fences necessary to not be magically reordered.  So, we just need to consider if the following interleavings are valid:

M:clear, C:setActivity, C:setBit, M:run
M:clear, C:setActivity, M:run, C:setBit
C:setActivity, M:clear, M:run, C:setBit
C:setActivity, M:clear, C:setBit, M:run

I don&apos;t think there are other interleavings. So let&apos;s consider these weird ones! They will be obviously correct if they end up behaving like mutator first or collector first.

M:clear, C:setActivity, C:setBit, M:run: The mutator will run the activities that we requested, but will not clear the bit. That means that the mutator will take a slow path next time it looks at the worldState, and and then it will try to run the bogus activity, but thanks to the null check it will just clear the bit.  So, this behaves just like collector first.

M:clear, C:setActivity, M:run, C:setBit: The mutator will run the activities that we requested, but will not clear the bit. So, this behaves just like collector first.

C:setActivity, M:clear, M:run, C:setBit: The mutator will run the activities that we requested, but will not clear the bit. So, this behaves just like collector first.

C:setActivity, M:clear, C:setBit, M:run: The mutator will run the activities that we requested, but will not clear the bit. So, this behaves just like collector first.

As far as I can tell, there is no way that the collector would request an activity and the mutator would fail to run it prior to regaining heap access. This is true because the only way for the mutator to clear the bit is if the collector runs first without any interleavings. In all other modes, the mutator will leave the bit set. So, the existing logic in stopTheWorldSlow() and friends for dealing with the needFinalizeBit can be reused for this more general requestedActivityBit. We can be sure that so long as the bit is set the mutator will not sleep but will instead try to run the activity. When it does so, it is guaranteed to only clear the bit if it ran the activity without any collector interleaving. If the collector sets an activity before the mutator runs it, the mutator will run it. If the collector sets an activity after the mutator runs the last one, the mutator won&apos;t sleep, release heap access, or acquire heap access until it runs that activity.

This would let us combine needFinalizeBit, gcDidJITBit, and whatever new bit you&apos;ll need for this.

Then we can convert waitWhileNeedFinalize() into waitForRequestedActivityCompletion(), so that the GC doesn&apos;t start the next collection until any requested activities from the last one are done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248874</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-07 15:37:11 -0800</bug_when>
    <thetext>To solve the issue with the type profiler, I&apos;m going to treat the type profiler log as a root to the GC. I think this issue is orthogonal to Fil&apos;s proposal for a more unified  and clean mechanism for asking the mutator to run certain code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248937</commentid>
    <comment_count>4</comment_count>
      <attachid>294122</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-07 19:23:40 -0800</bug_when>
    <thetext>Created attachment 294122
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248938</commentid>
    <comment_count>5</comment_count>
      <attachid>294122</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-07 19:24:18 -0800</bug_when>
    <thetext>Comment on attachment 294122
patch

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

&gt; JSTests/typeProfiler/type-profiler-gc.js:3
&gt; +// The goal of this test is to just ensure that we don&apos;t crash the type profiler.

This test actually doesn&apos;t crash on ToT, so I&apos;ll need to keep trying to write a test that exercises the fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248955</commentid>
    <comment_count>6</comment_count>
      <attachid>294122</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-11-07 20:55:21 -0800</bug_when>
    <thetext>Comment on attachment 294122
patch

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

r=me

&gt; Source/JavaScriptCore/runtime/TypeProfilerLog.cpp:107
&gt; +    LogEntry* entry = m_logStartPtr;
&gt; +    while (entry != m_currentLogEntryPtr) {

Since this loop has a beginning, a condition, and a step, I think it would be clearer as a for loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249084</commentid>
    <comment_count>7</comment_count>
      <attachid>294122</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-08 11:15:22 -0800</bug_when>
    <thetext>Comment on attachment 294122
patch

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

&gt;&gt; Source/JavaScriptCore/runtime/TypeProfilerLog.cpp:107
&gt;&gt; +    while (entry != m_currentLogEntryPtr) {
&gt; 
&gt; Since this loop has a beginning, a condition, and a step, I think it would be clearer as a for loop.

Sounds good to me. I&apos;ll make that change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249400</commentid>
    <comment_count>8</comment_count>
      <attachid>294261</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-09 11:59:42 -0800</bug_when>
    <thetext>Created attachment 294261
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249497</commentid>
    <comment_count>9</comment_count>
      <attachid>294261</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-09 14:05:25 -0800</bug_when>
    <thetext>Comment on attachment 294261
patch for landing

Clearing flags on attachment: 294261

Committed r208483: &lt;http://trac.webkit.org/changeset/208483&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249498</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-09 14:05:29 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294122</attachid>
            <date>2016-11-07 19:23:40 -0800</date>
            <delta_ts>2016-11-09 11:59:42 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>6138</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvdHlwZVByb2ZpbGVyL3R5cGUtcHJvZmlsZXItZ2MuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy90eXBlUHJvZmlsZXIvdHlwZS1wcm9maWxlci1nYy5qcwkobm9uZXhpc3Rl
bnQpCisrKyBKU1Rlc3RzL3R5cGVQcm9maWxlci90eXBlLXByb2ZpbGVyLWdjLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjIgQEAKK2xvYWQoIi4vZHJpdmVyL2RyaXZlci5qcyIpOworCisv
LyBUaGUgZ29hbCBvZiB0aGlzIHRlc3QgaXMgdG8ganVzdCBlbnN1cmUgdGhhdCB3ZSBkb24ndCBj
cmFzaCB0aGUgdHlwZSBwcm9maWxlci4KKworZnVuY3Rpb24gYmFyKG8pIHsKKyAgICBvW01hdGgu
cmFuZG9tKCkgKyAiZm9vIl0gPSBuZXcgQXJyYXkoMTAwMCk7CisgICAgcmV0dXJuIG87Cit9Citu
b0lubGluZShiYXIpOworCitmdW5jdGlvbiBmb28obykgeworICAgIGxldCB4ID0gYmFyKG8pOwor
ICAgIHJldHVybiB4OworfQorbm9JbmxpbmUoZm9vKTsKKworbGV0IG8gPSB7fTsKK2ZvciAobGV0
IGkgPSAwOyBpIDwgNTAwMDsgaSsrKSB7CisgICAgaWYgKGkgJSA1MCA9PT0gMCkKKyAgICAgICAg
byA9IHt9OworICAgIGZvbyhvKTsKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2
aXNpb24gMjA4NDIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDE2LTExLTA3ICBTYWFtIEJhcmF0aSAgPHNiYXJh
dGlAYXBwbGUuY29tPgorCisgICAgICAgIFR5cGVQcm9maWxlciBhbmQgcnVubmluZyBHQyBjb2xs
ZWN0aW9uIG9uIGFub3RoZXIgdGhyZWFkIGRvbid0IHBsYXkgbmljZWx5IHdpdGggZWFjaCBvdGhl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NDQx
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yOTEzMjE3ND4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGZpeCBoZXJlIGlzIHNpbXBsZTogd2Ug
bm93IHRyZWF0IHRoZSB0eXBlIHByb2ZpbGVyIGxvZyBhcyBhIEdDIHJvb3QuCisgICAgICAgIEdD
IHdpbGwgbWFrZSBzdXJlIHRoYXQgd2UgbWFyayBhbnkgdmFsdWVzL3N0cnVjdHVyZXMgdGhhdCBh
cmUgaW4gdGhlIGxvZy4KKyAgICAgICAgSXQncyBlYXN5IHRvIHJlYXNvbiBhYm91dCB0aGUgY29y
cmVjdG5lc3Mgb2YgdGhpcywgYW5kIGl0IGFsc28gc29sdmVzCisgICAgICAgIHRoZSBwcm9ibGVt
IHRoYXQgd2Ugd2VyZSBjbGVhcmluZyB0aGUgbG9nIG9uIHRoZSBHQyB0aHJlYWQuIENsZWFyaW5n
IHRoZQorICAgICAgICBsb2cgb24gdGhlIEdDIHRocmVhZCB3YXMgYSBwcm9ibGVtIGJlY2F1c2Ug
d2hlbiB3ZSBjbGVhciB0aGUgbG9nLCB3ZSBtYXkKKyAgICAgICAgYWxsb2NhdGUsIHdoaWNoIHdl
J3JlIG5vdCBhbGxvd2VkIHRvIGRvIGZyb20gdGhlIEdDIHRocmVhZC4KKworICAgICAgICAqIGhl
YXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtSb290cyk6CisgICAgICAgIChK
U0M6OkhlYXA6OnZpc2l0VHlwZVByb2ZpbGVyKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVj
dEluVGhyZWFkKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBydW50aW1lL1R5
cGVQcm9maWxlckxvZy5jcHA6CisgICAgICAgIChKU0M6OlR5cGVQcm9maWxlckxvZzo6cHJvY2Vz
c0xvZ0VudHJpZXMpOgorICAgICAgICAoSlNDOjpUeXBlUHJvZmlsZXJMb2c6OnZpc2l0KToKKyAg
ICAgICAgKiBydW50aW1lL1R5cGVQcm9maWxlckxvZy5oOgorCiAyMDE2LTExLTA1ICBLb25zdGFu
dGluIFRva2FyZXYgIDxhbm51bGVuQHlhbmRleC5ydT4KIAogICAgICAgICBGaXhlZCBjb21waWxh
dGlvbiBvZiBMTEludCB3aXRoIE1pbkdXCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcAkocmV2aXNpb24gMjA4NDIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzOSw2ICs1MzksNyBAQCB2b2lkIEhlYXA6Om1hcmtS
b290cyhkb3VibGUgZ2NTdGFydFRpbWUpCiAgICAgICAgIHZpc2l0U3Ryb25nSGFuZGxlcyhoZWFw
Um9vdFZpc2l0b3IpOwogICAgICAgICB2aXNpdEhhbmRsZVN0YWNrKGhlYXBSb290VmlzaXRvcik7
CiAgICAgICAgIHZpc2l0U2FtcGxpbmdQcm9maWxlcigpOworICAgICAgICB2aXNpdFR5cGVQcm9m
aWxlcigpOwogICAgICAgICB2aXNpdFNoYWRvd0NoaWNrZW4oKTsKICAgICAgICAgdHJhY2VDb2Rl
QmxvY2tzQW5kSklUU3R1YlJvdXRpbmVzKCk7CiAgICAgICAgIG1fc2xvdFZpc2l0b3IuZHJhaW5G
cm9tU2hhcmVkKFNsb3RWaXNpdG9yOjpNYXN0ZXJEcmFpbik7CkBAIC03NzcsNiArNzc4LDE2IEBA
IHZvaWQgSGVhcDo6dmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCkKICNlbmRpZiAvLyBFTkFCTEUoU0FN
UExJTkdfUFJPRklMRVIpCiB9CiAKK3ZvaWQgSGVhcDo6dmlzaXRUeXBlUHJvZmlsZXIoKQorewor
ICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSkgeworICAgICAgICB2bSgpLT50eXBlUHJvZmls
ZXJMb2coKS0+dmlzaXQobV9zbG90VmlzaXRvcik7CisgICAgICAgIGlmIChPcHRpb25zOjpsb2dH
QygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIlR5cGUgUHJv
ZmlsZXIgdmlzaXQgZGF0YTpcbiIsIG1fc2xvdFZpc2l0b3IpOworICAgICAgICBtX3Nsb3RWaXNp
dG9yLmRvbmF0ZUFuZERyYWluKCk7CisgICAgfQorfQorCiB2b2lkIEhlYXA6OnZpc2l0U2hhZG93
Q2hpY2tlbigpCiB7CiAgICAgbV92bS0+c2hhZG93Q2hpY2tlbigpLnZpc2l0Q2hpbGRyZW4obV9z
bG90VmlzaXRvcik7CkBAIC0xMDkxLDExICsxMTAyLDYgQEAgdm9pZCBIZWFwOjpjb2xsZWN0SW5U
aHJlYWQoKQogICAgIAogICAgIGRvdWJsZSBnY1N0YXJ0VGltZTsKICAgICAKLSAgICBpZiAodm0o
KS0+dHlwZVByb2ZpbGVyKCkpIHsKLSAgICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRo
aXMpOwotICAgICAgICB2bSgpLT50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMo
QVNDSUlMaXRlcmFsKCJHQyIpKTsKLSAgICB9Ci0gICAgCiAjaWYgRU5BQkxFKEpJVCkKICAgICB7
CiAgICAgICAgIERlZmVyR0NGb3JBV2hpbGUgYXdoaWxlKCp0aGlzKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIwODQyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDQzLDYgKzQ0Myw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCB2aXNpdFN0cm9uZ0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7CiAgICAg
dm9pZCB2aXNpdEhhbmRsZVN0YWNrKEhlYXBSb290VmlzaXRvciYpOwogICAgIHZvaWQgdmlzaXRT
YW1wbGluZ1Byb2ZpbGVyKCk7CisgICAgdm9pZCB2aXNpdFR5cGVQcm9maWxlcigpOwogICAgIHZv
aWQgdmlzaXRTaGFkb3dDaGlja2VuKCk7CiAgICAgdm9pZCB0cmFjZUNvZGVCbG9ja3NBbmRKSVRT
dHViUm91dGluZXMoKTsKICAgICB2b2lkIHZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9y
Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9m
aWxlckxvZy5jcHAJKHJldmlzaW9uIDIwODQyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVQcm9maWxlckxvZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcg
QEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIlR5cGVMb2NhdGlvbi5oIgog
I2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogCkBAIC04Nyw2ICs4OCwxMSBAQCB2b2lkIFR5
cGVQcm9maWxlckxvZzo6cHJvY2Vzc0xvZ0VudHJpZXMoCiAgICAgICAgIGVudHJ5Kys7CiAgICAg
fQogCisgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IHVwZGF0ZSB0aGlzIGN1cnNvciB1bnRpbCB3
ZSdyZSBkb25lIHByb2Nlc3NpbmcgdGhlIGxvZy4KKyAgICAvLyBUaGlzIGFsbG93cyB1cyB0byBo
YXZlIGEgc2FuZSBzdG9yeSBpbiBjYXNlIHdlIGhhdmUgdG8gbWFyayB0aGUgbG9nCisgICAgLy8g
d2hpbGUgcHJvY2Vzc2luZyB0aHJvdWdoIGl0LiBXZSB3b24ndCBiZSBpdGVyYXRpbmcgb3ZlciB0
aGUgbG9nIHdoaWxlCisgICAgLy8gbWFya2luZyBpdCwgYnV0IHdlIG1heSBiZSBpbiB0aGUgbWlk
ZGxlIG9mIGl0ZXJhdGluZyBvdmVyIHdoZW4gdGhlIG11dGF0b3IKKyAgICAvLyBwYXVzZXMgYW5k
IGNhdXNlcyB0aGUgY29sbGVjdG9yIHRvIG1hcmsgdGhlIGxvZy4KICAgICBtX2N1cnJlbnRMb2dF
bnRyeVB0ciA9IG1fbG9nU3RhcnRQdHI7CiAKICAgICBpZiAodmVyYm9zZSkgewpAQCAtOTUsNCAr
MTAxLDE4IEBAIHZvaWQgVHlwZVByb2ZpbGVyTG9nOjpwcm9jZXNzTG9nRW50cmllcygKICAgICB9
CiB9CiAKK3ZvaWQgVHlwZVByb2ZpbGVyTG9nOjp2aXNpdChTbG90VmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICBMb2dFbnRyeSogZW50cnkgPSBtX2xvZ1N0YXJ0UHRyOworICAgIHdoaWxlIChlbnRy
eSAhPSBtX2N1cnJlbnRMb2dFbnRyeVB0cikgeworICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkUmVhZE9ubHlWYWx1ZShlbnRyeS0+dmFsdWUpOworICAgICAgICBpZiAoU3RydWN0dXJl
SUQgaWQgPSBlbnRyeS0+c3RydWN0dXJlSUQpIHsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gdmlzaXRvci5oZWFwKCktPnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoaWQpOyAKKyAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIoc3RydWN0
dXJlKTsKKyAgICAgICAgfQorCisgICAgICAgICsrZW50cnk7CisgICAgfQorfQorCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9m
aWxlckxvZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5
cGVQcm9maWxlckxvZy5oCShyZXZpc2lvbiAyMDg0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UeXBlUHJvZmlsZXJMb2cuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQs
OCBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcm9jZXNzTG9nRW50cmll
cyhjb25zdCBTdHJpbmcmKTsKICAgICBMb2dFbnRyeSogbG9nRW5kUHRyKCkgY29uc3QgeyByZXR1
cm4gbV9sb2dFbmRQdHI7IH0KIAorICAgIHZvaWQgdmlzaXQoU2xvdFZpc2l0b3ImKTsKKwogICAg
IHN0YXRpYyBwdHJkaWZmX3QgbG9nU3RhcnRPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoVHlwZVByb2ZpbGVyTG9nLCBtX2xvZ1N0YXJ0UHRyKTsgfQogICAgIHN0YXRpYyBwdHJkaWZm
X3QgY3VycmVudExvZ0VudHJ5T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFR5cGVQ
cm9maWxlckxvZywgbV9jdXJyZW50TG9nRW50cnlQdHIpOyB9CiAK
</data>
<flag name="review"
          id="316880"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294261</attachid>
            <date>2016-11-09 11:59:42 -0800</date>
            <delta_ts>2016-11-09 14:05:25 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>6857</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDg0NTgpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDE2LTExLTA5ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFR5cGVQcm9maWxlciBhbmQgcnVubmluZyBHQyBjb2xsZWN0aW9uIG9u
IGFub3RoZXIgdGhyZWFkIGRvbid0IHBsYXkgbmljZWx5IHdpdGggZWFjaCBvdGhlcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NDQxCisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8yOTEzMjE3ND4KKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJl
eSBHYXJlbi4KKworICAgICAgICAqIHR5cGVQcm9maWxlci90eXBlLXByb2ZpbGVyLWdjLmpzOiBB
ZGRlZC4KKyAgICAgICAgKGJhcik6CisgICAgICAgIChmb28pOgorCiAyMDE2LTExLTA0ICBNYXJr
IExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBFcnJvciBkZXNjcmlwdGlvbiBj
b2RlIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSBTeW1ib2wgdmFsdWVzLgpJbmRleDogSlNUZXN0
cy90eXBlUHJvZmlsZXIvdHlwZS1wcm9maWxlci1nYy5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3Rz
L3R5cGVQcm9maWxlci90eXBlLXByb2ZpbGVyLWdjLmpzCShub25leGlzdGVudCkKKysrIEpTVGVz
dHMvdHlwZVByb2ZpbGVyL3R5cGUtcHJvZmlsZXItZ2MuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyNSBAQAorbG9hZCgiLi9kcml2ZXIvZHJpdmVyLmpzIik7CisKKy8vIFRoZSBnb2FsIG9m
IHRoaXMgdGVzdCBpcyB0byBqdXN0IGVuc3VyZSB0aGF0IHdlIGRvbid0IGNyYXNoIHRoZSB0eXBl
IHByb2ZpbGVyLgorCitmdW5jdGlvbiBiYXIobykgeworICAgIG9bTWF0aC5yYW5kb20oKSArICJm
b28iXSA9IG5ldyBBcnJheSgxMDApOworICAgIHJldHVybiBvOworfQorbm9JbmxpbmUoYmFyKTsK
KworZnVuY3Rpb24gZm9vKG8pIHsKKyAgICBsZXQgeCA9IGJhcihvKTsKKyAgICByZXR1cm4geDsK
K30KK25vSW5saW5lKGZvbyk7CisKK2xldCBvID0ge307Citmb3IgKGxldCBpID0gMDsgaSA8IDIw
MDA7IGkrKykgeworICAgIGlmIChpICUgNSA9PT0gMCkKKyAgICAgICAgbyA9IHt9OworICAgIGZv
byhvKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDIwOyBpKyspIHsKKyAgICAgICAgbmV3IEFy
cmF5KDEwMCk7CisgICAgfQorfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lv
biAyMDg0MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTYtMTEtMDkgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBh
cHBsZS5jb20+CisKKyAgICAgICAgVHlwZVByb2ZpbGVyIGFuZCBydW5uaW5nIEdDIGNvbGxlY3Rp
b24gb24gYW5vdGhlciB0aHJlYWQgZG9uJ3QgcGxheSBuaWNlbHkgd2l0aCBlYWNoIG90aGVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ0NDEKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI5MTMyMTc0PgorCisgICAgICAgIFJldmlld2VkIGJ5IEdl
b2ZmcmV5IEdhcmVuLgorCisgICAgICAgIFRoaXMgZml4IGhlcmUgaXMgc2ltcGxlOiB3ZSBub3cg
dHJlYXQgdGhlIHR5cGUgcHJvZmlsZXIgbG9nIGFzIGEgR0Mgcm9vdC4KKyAgICAgICAgR0Mgd2ls
bCBtYWtlIHN1cmUgdGhhdCB3ZSBtYXJrIGFueSB2YWx1ZXMvc3RydWN0dXJlcyB0aGF0IGFyZSBp
biB0aGUgbG9nLgorICAgICAgICBJdCdzIGVhc3kgdG8gcmVhc29uIGFib3V0IHRoZSBjb3JyZWN0
bmVzcyBvZiB0aGlzLCBhbmQgaXQgYWxzbyBzb2x2ZXMKKyAgICAgICAgdGhlIHByb2JsZW0gdGhh
dCB3ZSB3ZXJlIGNsZWFyaW5nIHRoZSBsb2cgb24gdGhlIEdDIHRocmVhZC4gQ2xlYXJpbmcgdGhl
CisgICAgICAgIGxvZyBvbiB0aGUgR0MgdGhyZWFkIHdhcyBhIHByb2JsZW0gYmVjYXVzZSB3aGVu
IHdlIGNsZWFyIHRoZSBsb2csIHdlIG1heQorICAgICAgICBhbGxvY2F0ZSwgd2hpY2ggd2UncmUg
bm90IGFsbG93ZWQgdG8gZG8gZnJvbSB0aGUgR0MgdGhyZWFkLgorCisgICAgICAgICogaGVhcC9I
ZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6dmlzaXRUeXBlUHJvZmlsZXIpOgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0SW5U
aHJlYWQpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVBy
b2ZpbGVyTG9nLmNwcDoKKyAgICAgICAgKEpTQzo6VHlwZVByb2ZpbGVyTG9nOjpwcm9jZXNzTG9n
RW50cmllcyk6CisgICAgICAgIChKU0M6OlR5cGVQcm9maWxlckxvZzo6dmlzaXQpOgorICAgICAg
ICAqIHJ1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmg6CisKIDIwMTYtMTEtMDUgIEtvbnN0YW50aW4g
VG9rYXJldiAgPGFubnVsZW5AeWFuZGV4LnJ1PgogCiAgICAgICAgIEZpeGVkIGNvbXBpbGF0aW9u
IG9mIExMSW50IHdpdGggTWluR1cKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
CShyZXZpc2lvbiAyMDg0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTM5LDYgKzUzOSw3IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3Rz
KGRvdWJsZSBnY1N0YXJ0VGltZSkKICAgICAgICAgdmlzaXRTdHJvbmdIYW5kbGVzKGhlYXBSb290
VmlzaXRvcik7CiAgICAgICAgIHZpc2l0SGFuZGxlU3RhY2soaGVhcFJvb3RWaXNpdG9yKTsKICAg
ICAgICAgdmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCk7CisgICAgICAgIHZpc2l0VHlwZVByb2ZpbGVy
KCk7CiAgICAgICAgIHZpc2l0U2hhZG93Q2hpY2tlbigpOwogICAgICAgICB0cmFjZUNvZGVCbG9j
a3NBbmRKSVRTdHViUm91dGluZXMoKTsKICAgICAgICAgbV9zbG90VmlzaXRvci5kcmFpbkZyb21T
aGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKQEAgLTc3Nyw2ICs3NzgsMTYgQEAgdm9p
ZCBIZWFwOjp2aXNpdFNhbXBsaW5nUHJvZmlsZXIoKQogI2VuZGlmIC8vIEVOQUJMRShTQU1QTElO
R19QUk9GSUxFUikKIH0KIAordm9pZCBIZWFwOjp2aXNpdFR5cGVQcm9maWxlcigpCit7CisgICAg
aWYgKHZtKCktPnR5cGVQcm9maWxlcigpKSB7CisgICAgICAgIHZtKCktPnR5cGVQcm9maWxlckxv
ZygpLT52aXNpdChtX3Nsb3RWaXNpdG9yKTsKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkg
PT0gR0NMb2dnaW5nOjpWZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiVHlwZSBQcm9maWxl
ciB2aXNpdCBkYXRhOlxuIiwgbV9zbG90VmlzaXRvcik7CisgICAgICAgIG1fc2xvdFZpc2l0b3Iu
ZG9uYXRlQW5kRHJhaW4oKTsKKyAgICB9Cit9CisKIHZvaWQgSGVhcDo6dmlzaXRTaGFkb3dDaGlj
a2VuKCkKIHsKICAgICBtX3ZtLT5zaGFkb3dDaGlja2VuKCkudmlzaXRDaGlsZHJlbihtX3Nsb3RW
aXNpdG9yKTsKQEAgLTEwOTEsMTEgKzExMDIsNiBAQCB2b2lkIEhlYXA6OmNvbGxlY3RJblRocmVh
ZCgpCiAgICAgCiAgICAgZG91YmxlIGdjU3RhcnRUaW1lOwogICAgIAotICAgIGlmICh2bSgpLT50
eXBlUHJvZmlsZXIoKSkgewotICAgICAgICBEZWZlckdDRm9yQVdoaWxlIGF3aGlsZSgqdGhpcyk7
Ci0gICAgICAgIHZtKCktPnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmllcyhBU0NJ
SUxpdGVyYWwoIkdDIikpOwotICAgIH0KLSAgICAKICNpZiBFTkFCTEUoSklUKQogICAgIHsKICAg
ICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjA4NDIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NDMsNiArNDQzLDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHZpc2l0U3Ryb25nSGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImKTsKICAgICB2b2lk
IHZpc2l0SGFuZGxlU3RhY2soSGVhcFJvb3RWaXNpdG9yJik7CiAgICAgdm9pZCB2aXNpdFNhbXBs
aW5nUHJvZmlsZXIoKTsKKyAgICB2b2lkIHZpc2l0VHlwZVByb2ZpbGVyKCk7CiAgICAgdm9pZCB2
aXNpdFNoYWRvd0NoaWNrZW4oKTsKICAgICB2b2lkIHRyYWNlQ29kZUJsb2Nrc0FuZEpJVFN0dWJS
b3V0aW5lcygpOwogICAgIHZvaWQgdmlzaXRXZWFrSGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlckxvZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVy
TG9nLmNwcAkocmV2aXNpb24gMjA4NDIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVHlwZVByb2ZpbGVyTG9nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgor
I2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiVHlwZUxvY2F0aW9uLmgiCiAjaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKQEAgLTg3LDYgKzg4LDExIEBAIHZvaWQgVHlwZVBy
b2ZpbGVyTG9nOjpwcm9jZXNzTG9nRW50cmllcygKICAgICAgICAgZW50cnkrKzsKICAgICB9CiAK
KyAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgdXBkYXRlIHRoaXMgY3Vyc29yIHVudGlsIHdlJ3Jl
IGRvbmUgcHJvY2Vzc2luZyB0aGUgbG9nLgorICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIGhhdmUg
YSBzYW5lIHN0b3J5IGluIGNhc2Ugd2UgaGF2ZSB0byBtYXJrIHRoZSBsb2cKKyAgICAvLyB3aGls
ZSBwcm9jZXNzaW5nIHRocm91Z2ggaXQuIFdlIHdvbid0IGJlIGl0ZXJhdGluZyBvdmVyIHRoZSBs
b2cgd2hpbGUKKyAgICAvLyBtYXJraW5nIGl0LCBidXQgd2UgbWF5IGJlIGluIHRoZSBtaWRkbGUg
b2YgaXRlcmF0aW5nIG92ZXIgd2hlbiB0aGUgbXV0YXRvcgorICAgIC8vIHBhdXNlcyBhbmQgY2F1
c2VzIHRoZSBjb2xsZWN0b3IgdG8gbWFyayB0aGUgbG9nLgogICAgIG1fY3VycmVudExvZ0VudHJ5
UHRyID0gbV9sb2dTdGFydFB0cjsKIAogICAgIGlmICh2ZXJib3NlKSB7CkBAIC05NSw0ICsxMDEs
MTUgQEAgdm9pZCBUeXBlUHJvZmlsZXJMb2c6OnByb2Nlc3NMb2dFbnRyaWVzKAogICAgIH0KIH0K
IAordm9pZCBUeXBlUHJvZmlsZXJMb2c6OnZpc2l0KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIGZvciAoTG9nRW50cnkqIGVudHJ5ID0gbV9sb2dTdGFydFB0cjsgZW50cnkgIT0gbV9jdXJy
ZW50TG9nRW50cnlQdHI7ICsrZW50cnkpIHsKKyAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZFJlYWRPbmx5VmFsdWUoZW50cnktPnZhbHVlKTsKKyAgICAgICAgaWYgKFN0cnVjdHVyZUlE
IGlkID0gZW50cnktPnN0cnVjdHVyZUlEKSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHZpc2l0b3IuaGVhcCgpLT5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KGlkKTsgCisgICAg
ICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHN0cnVjdHVy
ZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyTG9nLmgJKHJldmlz
aW9uIDIwODQyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxl
ckxvZy5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw4IEBAIHB1YmxpYzoKICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIHByb2Nlc3NMb2dFbnRyaWVzKGNvbnN0IFN0cmluZyYpOwogICAg
IExvZ0VudHJ5KiBsb2dFbmRQdHIoKSBjb25zdCB7IHJldHVybiBtX2xvZ0VuZFB0cjsgfQogCisg
ICAgdm9pZCB2aXNpdChTbG90VmlzaXRvciYpOworCiAgICAgc3RhdGljIHB0cmRpZmZfdCBsb2dT
dGFydE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUeXBlUHJvZmlsZXJMb2csIG1f
bG9nU3RhcnRQdHIpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBjdXJyZW50TG9nRW50cnlPZmZz
ZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVHlwZVByb2ZpbGVyTG9nLCBtX2N1cnJlbnRM
b2dFbnRyeVB0cik7IH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>