<?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>189897</bug_id>
          
          <creation_ts>2018-09-23 13:04:14 -0700</creation_ts>
          <short_desc>Add forEach method for iterating CodeBlock&apos;s ValueProfiles</short_desc>
          <delta_ts>2018-09-24 15:04:19 -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>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="Tadeu Zagallo">tzagallo</reporter>
          <assigned_to name="Tadeu Zagallo">tzagallo</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1462560</commentid>
    <comment_count>0</comment_count>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2018-09-23 13:04:14 -0700</bug_when>
    <thetext>Add method to abstract how we find ValueProfiles in a CodeBlock in preparation for https://bugs.webkit.org/show_bug.cgi?id=189785, when ValueProfiles will be stored in the MetadataTable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462561</commentid>
    <comment_count>1</comment_count>
      <attachid>350587</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2018-09-23 13:05:19 -0700</bug_when>
    <thetext>Created attachment 350587
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462761</commentid>
    <comment_count>2</comment_count>
      <attachid>350587</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-09-24 10:46:07 -0700</bug_when>
    <thetext>Comment on attachment 350587
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462776</commentid>
    <comment_count>3</comment_count>
      <attachid>350587</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-09-24 11:19:39 -0700</bug_when>
    <thetext>Comment on attachment 350587
Patch

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

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:2577
&gt; +        totalNumberOfValueProfiles++;

I don&apos;t think you should compute the total this way.  The totalNumberOfValueProfiles(), numberOfArgumentValueProfiles(), and numberOfValueProfiles() are all static and fixed once the CodeBlock is created, right?  When adding the Metadata later, just increment a m_numberOfMetadataValueProfiles count if the Metadata contains a ValueProfile.  Make totalNumberOfValueProfiles() include m_numberOfMetadataValueProfiles.  You also need a new numberOfNonArgumentValueProfiles() which returns the sum of m_numberOfMetadataValueProfiles and numberOfValueProfiles().  Some of the existing code that is using numberOfValueProfiles() actually need to be using numberOfNonArgumentValueProfiles() instead.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:2653
&gt;      if ((!numberOfValueProfiles() || (double)numberOfLiveNonArgumentValueProfiles / numberOfValueProfiles() &gt;= Options::desiredProfileLivenessRate())
&gt; -        &amp;&amp; (!totalNumberOfValueProfiles() || (double)numberOfSamplesInProfiles / ValueProfile::numberOfBuckets / totalNumberOfValueProfiles() &gt;= Options::desiredProfileFullnessRate())
&gt; +        &amp;&amp; (!totalNumberOfValueProfiles || (double)numberOfSamplesInProfiles / ValueProfile::numberOfBuckets / totalNumberOfValueProfiles &gt;= Options::desiredProfileFullnessRate())
&gt;          &amp;&amp; static_cast&lt;unsigned&gt;(m_optimizationDelayCounter) + 1 &gt;= Options::minimumOptimizationDelay())
&gt;          return true;

This is where we were using the numberOfValueProfiles() but what we really want is numberOfNonArgumentValueProfiles().  Previously, these 2 values are the same.  That will no longer be the case once you introduce Metadata ValueProfiles.  If you don&apos;t reflect this change, then the heuristics will change and performance characteristics may also change.  I think we should keep the heuristics static while changing the bytecodes, and not inadvertently changing them this way.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:-2699
&gt; -    dataLog(&quot;ValueProfile for &quot;, *this, &quot;:\n&quot;);

We still need this line.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.h:433
&gt; +        auto getFromAllValueProfiles = [&amp;](unsigned index) -&gt; ValueProfile&amp; {
&gt; +            if (index &lt; numberOfArgumentValueProfiles())
&gt; +                return valueProfileForArgument(index);
&gt; +            return valueProfile(index - numberOfArgumentValueProfiles());
&gt; +        };
&gt; +
&gt; +        unsigned totalNumberOfValueProfiles = numberOfArgumentValueProfiles() + numberOfValueProfiles();
&gt; +
&gt; +        for (unsigned i = 0; i &lt; totalNumberOfValueProfiles; ++i) {
&gt; +            ValueProfile&amp; profile = getFromAllValueProfiles(i);
&gt; +            func(profile);
&gt; +        }

I think getFromAllValueProfiles here is superfluous.  Since we control the iteration here, can&apos;t you just express this as:

    for (unsigned i = 0; i &lt; numberOfArgumentValueProfiles(); ++i)
        func(valueProfileForArgument(i))
    for (unsigned i = 0; i &lt; numberOfValueProfiles(); ++i)
        func(valueProfile(i))

Expressing it this way also makes it easier to add a 3rd loop later for Metadata ValueProfiles.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.h:881
&gt; +    unsigned numberOfArgumentValueProfiles()
&gt; +    {
&gt; +        ASSERT(m_numParameters &gt;= 0);
&gt; +        ASSERT(m_argumentValueProfiles.size() == static_cast&lt;unsigned&gt;(m_numParameters) || !vm()-&gt;canUseJIT());
&gt; +        return m_argumentValueProfiles.size();
&gt; +    }
&gt; +
&gt; +    ValueProfile&amp; valueProfileForArgument(unsigned argumentIndex)
&gt; +    {
&gt; +        ASSERT(vm()-&gt;canUseJIT()); // This is only called from the various JIT compilers or places that first check numberOfArgumentValueProfiles before calling this.
&gt; +        ValueProfile&amp; result = m_argumentValueProfiles[argumentIndex];
&gt; +        ASSERT(result.m_bytecodeOffset == -1);
&gt; +        return result;
&gt; +    }
&gt; +

Why move this here from the above location?  The above location is grouped with other ValueProfile methods and seem like a better place to keep these methods.  In both cases, the methods are public.  So, this move looks unnecessary to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462809</commentid>
    <comment_count>4</comment_count>
      <attachid>350666</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2018-09-24 12:30:25 -0700</bug_when>
    <thetext>Created attachment 350666
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462819</commentid>
    <comment_count>5</comment_count>
      <attachid>350666</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-09-24 12:37:33 -0700</bug_when>
    <thetext>Comment on attachment 350666
Patch

r=me if EWS bots are happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462913</commentid>
    <comment_count>6</comment_count>
      <attachid>350666</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-09-24 15:03:44 -0700</bug_when>
    <thetext>Comment on attachment 350666
Patch

Clearing flags on attachment: 350666

Committed r236430: &lt;https://trac.webkit.org/changeset/236430&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462914</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-09-24 15:03:46 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462915</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-09-24 15:04:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/44741589&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350587</attachid>
            <date>2018-09-23 13:05:19 -0700</date>
            <delta_ts>2018-09-24 12:30:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-189897-20180923130518.patch</filename>
            <type>text/plain</type>
            <size>11984</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2MzY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
ZTE1ODFhZDkzMjAwODg1NGE0NDE2NGQyZmIwNWVkNGY3ZGIzMmFiLi5iMzYzMjNmOGUzZjU2ZTQ0
ZDU2NmZlZTczOWNlOWMxNjFmYThlNzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMCBAQAorMjAxOC0wOS0yMyAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNv
bT4KKworICAgICAgICBBZGQgZm9yRWFjaCBtZXRob2QgZm9yIGl0ZXJhdGluZyBDb2RlQmxvY2sn
cyBWYWx1ZVByb2ZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xODk4OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgbWV0aG9kIHRvIGFic3RyYWN0IGhvdyB3ZSBmaW5kIFZhbHVlUHJvZmlsZXMg
aW4gYSBDb2RlQmxvY2sgaW4KKyAgICAgICAgcHJlcGFyYXRpb24gZm9yIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODk3ODUsIHdoZW4KKyAgICAgICAgVmFsdWVQcm9m
aWxlcyB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgTWV0YWRhdGFUYWJsZS4KKworICAgICAgICAqIGJ5
dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dXBkYXRlQWxs
UHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1
cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9ucyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6c2hvdWxkT3B0aW1pemVOb3cpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBWYWx1
ZVByb2ZpbGVzKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcyk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6dmFsdWVQcm9maWxlRm9yQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
Om51bWJlck9mVmFsdWVQcm9maWxlcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmFsdWVQ
cm9maWxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp0b3RhbE51bWJlck9mVmFsdWVQcm9m
aWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0RnJvbUFsbFZhbHVl
UHJvZmlsZXMpOiBEZWxldGVkLgorICAgICAgICAqIHRvb2xzL0hlYXBWZXJpZmllci5jcHA6Cisg
ICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6dmFsaWRhdGVKU0NlbGwpOgorCiAyMDE4LTA5LTIx
ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBmdW5j
dGlvbnMgdG8gbWVhc3VyZSBtZW1vcnkgZm9vdHByaW50IHRvIEpTQwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCAyN2FmMGZkZTJjMDhjNWE1NGZi
ODE5ZDFhY2MzYjEzNGU3NjMxNWUzLi5iYTQ5NzJkNzUyMzZlZWQ0NDQ0ZThmNmEwZTlmZjc0NGEz
ODY1YzM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cApAQCAtMjU2NSwyNyArMjU2NSwyOCBAQCBjb25zdCBJZGVudGlmaWVyJiBDb2RlQmxvY2s6Omlk
ZW50aWZpZXIoaW50IGluZGV4KSBjb25zdAogfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQog
Ci12b2lkIENvZGVCbG9jazo6dXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKHVu
c2lnbmVkJiBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIHVuc2lnbmVkJiBu
dW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzKQordm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRp
Y3Rpb25zQW5kQ291bnRMaXZlbmVzcyh1bnNpZ25lZCYgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmls
ZXMsIHVuc2lnbmVkJiBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIHVuc2ln
bmVkJiBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzKQogewogICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIobV9sb2NrKTsKIAorICAgIHRvdGFsTnVtYmVyT2ZWYWx1ZVByb2ZpbGVzID0gMDsK
ICAgICBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgPSAwOwogICAgIG51bWJl
ck9mU2FtcGxlc0luUHJvZmlsZXMgPSAwOyAvLyBJZiB0aGlzIGRpdmlkZWQgYnkgVmFsdWVQcm9m
aWxlOjpudW1iZXJPZkJ1Y2tldHMgZXF1YWxzIG51bWJlck9mVmFsdWVQcm9maWxlcygpIHRoZW4g
dmFsdWUgcHJvZmlsZXMgYXJlIGZ1bGwuCiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKTsgKytpKSB7Ci0gICAgICAgIFZhbHVlUHJvZmls
ZSYgcHJvZmlsZSA9IGdldEZyb21BbGxWYWx1ZVByb2ZpbGVzKGkpOworICAgIGZvckVhY2hWYWx1
ZVByb2ZpbGUoWyZdKFZhbHVlUHJvZmlsZSYgcHJvZmlsZSkgeworICAgICAgICB0b3RhbE51bWJl
ck9mVmFsdWVQcm9maWxlcysrOwogICAgICAgICB1bnNpZ25lZCBudW1TYW1wbGVzID0gcHJvZmls
ZS50b3RhbE51bWJlck9mU2FtcGxlcygpOwogICAgICAgICBpZiAobnVtU2FtcGxlcyA+IFZhbHVl
UHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzKQogICAgICAgICAgICAgbnVtU2FtcGxlcyA9IFZhbHVl
UHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzOyAvLyBXZSBkb24ndCB3YW50IHByb2ZpbGVzIHRoYXQg
YXJlIGV4dHJlbWVseSBob3QgdG8gYmUgZ2l2ZW4gbW9yZSB3ZWlnaHQuCiAgICAgICAgIG51bWJl
ck9mU2FtcGxlc0luUHJvZmlsZXMgKz0gbnVtU2FtcGxlczsKICAgICAgICAgaWYgKHByb2ZpbGUu
bV9ieXRlY29kZU9mZnNldCA8IDApIHsKICAgICAgICAgICAgIHByb2ZpbGUuY29tcHV0ZVVwZGF0
ZWRQcmVkaWN0aW9uKGxvY2tlcik7Ci0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAocHJvZmlsZS5udW1iZXJPZlNhbXBsZXMo
KSB8fCBwcm9maWxlLm1fcHJlZGljdGlvbiAhPSBTcGVjTm9uZSkKICAgICAgICAgICAgIG51bWJl
ck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcysrOwogICAgICAgICBwcm9maWxlLmNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOwotICAgIH0KKyAgICB9KTsKIAogICAgIGZvciAo
YXV0byYgcHJvZmlsZUJ1Y2tldCA6IG1fY2F0Y2hQcm9maWxlcykgewogICAgICAgICBwcm9maWxl
QnVja2V0LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgewpA
QCAtMjYwMCw4ICsyNjAxLDggQEAgdm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25z
QW5kQ291bnRMaXZlbmVzcyh1bnNpZ25lZCYgbnVtYmVyT2ZMaXZlTm9uQXIKIAogdm9pZCBDb2Rl
QmxvY2s6OnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zKCkKIHsKLSAgICB1bnNpZ25l
ZCBpZ25vcmVkVmFsdWUxLCBpZ25vcmVkVmFsdWUyOwotICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25z
QW5kQ291bnRMaXZlbmVzcyhpZ25vcmVkVmFsdWUxLCBpZ25vcmVkVmFsdWUyKTsKKyAgICB1bnNp
Z25lZCBpZ25vcmVkVmFsdWUxLCBpZ25vcmVkVmFsdWUyLCBpZ25vcmVkVmFsdWUzOworICAgIHVw
ZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyhpZ25vcmVkVmFsdWUxLCBpZ25vcmVk
VmFsdWUyLCBpZ25vcmVkVmFsdWUzKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbEFy
cmF5UHJlZGljdGlvbnMoKQpAQCAtMjYzMiw5ICsyNjMzLDEwIEBAIGJvb2wgQ29kZUJsb2NrOjpz
aG91bGRPcHRpbWl6ZU5vdygpCiAgICAgCiAgICAgdXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucygp
OwogICAgIAorICAgIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZWYWx1ZVByb2ZpbGVzOwogICAgIHVu
c2lnbmVkIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlczsKICAgICB1bnNpZ25l
ZCBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzOwotICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25zQW5k
Q291bnRMaXZlbmVzcyhudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIG51bWJl
ck9mU2FtcGxlc0luUHJvZmlsZXMpOworICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291bnRM
aXZlbmVzcyh0b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcywgbnVtYmVyT2ZMaXZlTm9uQXJndW1l
bnRWYWx1ZVByb2ZpbGVzLCBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzKTsKIAogICAgIGlmIChP
cHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgZGF0YUxvZ0YoCkBAIC0yNjQ2LDcgKzI2
NDgsNyBAQCBib29sIENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3coKQogICAgIH0KIAogICAg
IGlmICgoIW51bWJlck9mVmFsdWVQcm9maWxlcygpIHx8IChkb3VibGUpbnVtYmVyT2ZMaXZlTm9u
QXJndW1lbnRWYWx1ZVByb2ZpbGVzIC8gbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgPj0gT3B0aW9u
czo6ZGVzaXJlZFByb2ZpbGVMaXZlbmVzc1JhdGUoKSkKLSAgICAgICAgJiYgKCF0b3RhbE51bWJl
ck9mVmFsdWVQcm9maWxlcygpIHx8IChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyAv
IFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gdG90YWxOdW1iZXJPZlZhbHVlUHJvZmls
ZXMoKSA+PSBPcHRpb25zOjpkZXNpcmVkUHJvZmlsZUZ1bGxuZXNzUmF0ZSgpKQorICAgICAgICAm
JiAoIXRvdGFsTnVtYmVyT2ZWYWx1ZVByb2ZpbGVzIHx8IChkb3VibGUpbnVtYmVyT2ZTYW1wbGVz
SW5Qcm9maWxlcyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gdG90YWxOdW1iZXJP
ZlZhbHVlUHJvZmlsZXMgPj0gT3B0aW9uczo6ZGVzaXJlZFByb2ZpbGVGdWxsbmVzc1JhdGUoKSkK
ICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3B0aW1pemF0aW9uRGVsYXlDb3Vu
dGVyKSArIDEgPj0gT3B0aW9uczo6bWluaW11bU9wdGltaXphdGlvbkRlbGF5KCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIApAQCAtMjY5Niw5ICsyNjk4LDcgQEAgdm9pZCBDb2RlQmxvY2s6
OnRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKQogI2lmIEVOQUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJ
TEUpCiB2b2lkIENvZGVCbG9jazo6ZHVtcFZhbHVlUHJvZmlsZXMoKQogewotICAgIGRhdGFMb2co
IlZhbHVlUHJvZmlsZSBmb3IgIiwgKnRoaXMsICI6XG4iKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKTsgKytpKSB7Ci0gICAgICAgIFZh
bHVlUHJvZmlsZSYgcHJvZmlsZSA9IGdldEZyb21BbGxWYWx1ZVByb2ZpbGVzKGkpOworICAgIGZv
ckVhY2hWYWx1ZVByb2ZpbGUoW10oVmFsdWVQcm9maWxlJiBwcm9maWxlKSB7CiAgICAgICAgIGlm
IChwcm9maWxlLm1fYnl0ZWNvZGVPZmZzZXQgPCAwKSB7CiAgICAgICAgICAgICBBU1NFUlQocHJv
ZmlsZS5tX2J5dGVjb2RlT2Zmc2V0ID09IC0xKTsKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICBh
cmcgPSAldTogIiwgaSk7CkBAIC0yNzEwLDcgKzI3MTAsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVt
cFZhbHVlUHJvZmlsZXMoKQogICAgICAgICB9CiAgICAgICAgIHByb2ZpbGUuZHVtcChXVEY6OmRh
dGFGaWxlKCkpOwogICAgICAgICBkYXRhTG9nRigiXG4iKTsKLSAgICB9CisgICAgfSk7CiAgICAg
ZGF0YUxvZygiUmFyZUNhc2VQcm9maWxlIGZvciAiLCAqdGhpcywgIjpcbiIpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZlJhcmVDYXNlUHJvZmlsZXMoKTsgKytpKSB7CiAg
ICAgICAgIFJhcmVDYXNlUHJvZmlsZSogcHJvZmlsZSA9IHJhcmVDYXNlUHJvZmlsZShpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRleCBhM2EzZDI2Mzkw
MGQzMTIyYzA5ZTIwNGYzMmI1N2IzZTEwMWEzMmIyLi5mZDRjNjYzNzk4ZjE1ZjM0ZmNjYzI5ZDY1
ZGY1MThhMTZkYjg5YzIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCkBAIC00MDksMjQgKzQwOSw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBuYW1lRm9y
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKTsKIAotICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1l
bnRWYWx1ZVByb2ZpbGVzKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX251bVBhcmFtZXRlcnMg
Pj0gMCk7Ci0gICAgICAgIEFTU0VSVChtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCkgPT0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFyYW1ldGVycykgfHwgIXZtKCktPmNhblVzZUpJ
VCgpKTsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNpemUoKTsKLSAg
ICB9Ci0gICAgVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGVGb3JBcmd1bWVudCh1bnNpZ25lZCBh
cmd1bWVudEluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHZtKCktPmNhblVzZUpJVCgpKTsg
Ly8gVGhpcyBpcyBvbmx5IGNhbGxlZCBmcm9tIHRoZSB2YXJpb3VzIEpJVCBjb21waWxlcnMgb3Ig
cGxhY2VzIHRoYXQgZmlyc3QgY2hlY2sgbnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMgYmVm
b3JlIGNhbGxpbmcgdGhpcy4KLSAgICAgICAgVmFsdWVQcm9maWxlJiByZXN1bHQgPSBtX2FyZ3Vt
ZW50VmFsdWVQcm9maWxlc1thcmd1bWVudEluZGV4XTsKLSAgICAgICAgQVNTRVJUKHJlc3VsdC5t
X2J5dGVjb2RlT2Zmc2V0ID09IC0xKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0K
LSAgICB1bnNpZ25lZCBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBtX3ZhbHVlUHJv
ZmlsZXMuc2l6ZSgpOyB9Ci0gICAgVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUoaW50IGluZGV4
KSB7IHJldHVybiBtX3ZhbHVlUHJvZmlsZXNbaW5kZXhdOyB9CiAgICAgVmFsdWVQcm9maWxlJiB2
YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpOwotICAgIFZh
bHVlUHJvZmlsZSogdHJ5R2V0VmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVj
b2RlT2Zmc2V0KTsKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9y
Qnl0ZWNvZGVPZmZzZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIsIGludCBieXRl
Y29kZU9mZnNldCkKICAgICB7CiAgICAgICAgIGlmIChWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmls
ZSA9IHRyeUdldFZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSkK
QEAgLTQzNCwxNSArNDE3LDIwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFNwZWNOb25lOwog
ICAgIH0KIAotICAgIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgbnVtYmVy
T2ZWYWx1ZVByb2ZpbGVzKCk7Ci0gICAgfQotICAgIFZhbHVlUHJvZmlsZSYgZ2V0RnJvbUFsbFZh
bHVlUHJvZmlsZXModW5zaWduZWQgaW5kZXgpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4gdm9pZCBmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCiAgICAgewot
ICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpKQotICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGluZGV4KTsKLSAgICAgICAg
cmV0dXJuIHZhbHVlUHJvZmlsZShpbmRleCAtIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVz
KCkpOworICAgICAgICBhdXRvIGdldEZyb21BbGxWYWx1ZVByb2ZpbGVzID0gWyZdKHVuc2lnbmVk
IGluZGV4KSAtPiBWYWx1ZVByb2ZpbGUmIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA8IG51bWJl
ck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVl
UHJvZmlsZUZvckFyZ3VtZW50KGluZGV4KTsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZVByb2Zp
bGUoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpKTsKKyAgICAgICAgfTsK
KworICAgICAgICB1bnNpZ25lZCB0b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcyA9IG51bWJlck9m
QXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgKyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKTsKKworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXM7
ICsraSkgeworICAgICAgICAgICAgVmFsdWVQcm9maWxlJiBwcm9maWxlID0gZ2V0RnJvbUFsbFZh
bHVlUHJvZmlsZXMoaSk7CisgICAgICAgICAgICBmdW5jKHByb2ZpbGUpOworICAgICAgICB9CiAg
ICAgfQogCiAgICAgUmFyZUNhc2VQcm9maWxlKiBhZGRSYXJlQ2FzZVByb2ZpbGUoaW50IGJ5dGVj
b2RlT2Zmc2V0KTsKQEAgLTg3Niw2ICs4NjQsMjEgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNU
YWlsQ2FsbHMoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+aGFzVGFpbENhbGxzKCk7
IH0KIAorICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX251bVBhcmFtZXRlcnMgPj0gMCk7CisgICAgICAgIEFTU0VSVCht
X2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCkgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1f
bnVtUGFyYW1ldGVycykgfHwgIXZtKCktPmNhblVzZUpJVCgpKTsKKyAgICAgICAgcmV0dXJuIG1f
YXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNpemUoKTsKKyAgICB9CisKKyAgICBWYWx1ZVByb2ZpbGUm
IHZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgpCisgICAgewor
ICAgICAgICBBU1NFUlQodm0oKS0+Y2FuVXNlSklUKCkpOyAvLyBUaGlzIGlzIG9ubHkgY2FsbGVk
IGZyb20gdGhlIHZhcmlvdXMgSklUIGNvbXBpbGVycyBvciBwbGFjZXMgdGhhdCBmaXJzdCBjaGVj
ayBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcyBiZWZvcmUgY2FsbGluZyB0aGlzLgorICAg
ICAgICBWYWx1ZVByb2ZpbGUmIHJlc3VsdCA9IG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzW2FyZ3Vt
ZW50SW5kZXhdOworICAgICAgICBBU1NFUlQocmVzdWx0Lm1fYnl0ZWNvZGVPZmZzZXQgPT0gLTEp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogcHJvdGVjdGVkOgogICAgIHZvaWQg
ZmluYWxpemVMTEludElubGluZUNhY2hlcygpOwogICAgIHZvaWQgZmluYWxpemVCYXNlbGluZUpJ
VElubGluZUNhY2hlcygpOwpAQCAtODk4LDcgKzkwMSw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAg
ZG91YmxlIG9wdGltaXphdGlvblRocmVzaG9sZFNjYWxpbmdGYWN0b3IoKTsKIAotICAgIHZvaWQg
dXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKHVuc2lnbmVkJiBudW1iZXJPZkxp
dmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIHVuc2lnbmVkJiBudW1iZXJPZlNhbXBsZXNJblBy
b2ZpbGVzKTsKKyAgICB2b2lkIHVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyh1
bnNpZ25lZCYgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMsIHVuc2lnbmVkJiBudW1iZXJPZkxp
dmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIHVuc2lnbmVkJiBudW1iZXJPZlNhbXBsZXNJblBy
b2ZpbGVzKTsKIAogICAgIHZvaWQgc2V0Q29uc3RhbnRJZGVudGlmaWVyU2V0UmVnaXN0ZXJzKFZN
JiwgY29uc3QgVmVjdG9yPENvbnN0YW50SW5kZW50aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50cyk7
CiAKQEAgLTkyMSw2ICs5MjQsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN0cm9uZ2x5VmlzaXRX
ZWFrUmVmZXJlbmNlcyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTbG90VmlzaXRvciYpOwog
ICAgIHZvaWQgdmlzaXRPU1JFeGl0VGFyZ2V0cyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBT
bG90VmlzaXRvciYpOwogCisgICAgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgeyBy
ZXR1cm4gbV92YWx1ZVByb2ZpbGVzLnNpemUoKTsgfQorICAgIFZhbHVlUHJvZmlsZSYgdmFsdWVQ
cm9maWxlKGludCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZVByb2ZpbGVzW2luZGV4XTsgfQorICAg
IFZhbHVlUHJvZmlsZSogdHJ5R2V0VmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5
dGVjb2RlT2Zmc2V0KTsKKwogICAgIFNlY29uZHMgdGltZVNpbmNlQ3JlYXRpb24oKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9jcmVhdGlvblRpbWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSGVhcFZlcmlmaWVyLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9IZWFwVmVyaWZpZXIuY3BwCmluZGV4IGI1OTUz
MWZmNmExZTAzYTY0MzBiMjgyMDFmOWQ3ZDAwY2ZkNzcyYjEuLjYzZGRlODM4MjQ5ZTU0Mzc2Zjgx
ZjE0ZGFkODk5NmFiY2U4MGM4MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9IZWFwVmVyaWZpZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9I
ZWFwVmVyaWZpZXIuY3BwCkBAIC0zMzAsOCArMzMwLDcgQEAgYm9vbCBIZWFwVmVyaWZpZXI6OnZh
bGlkYXRlSlNDZWxsKFZNKiBleHBlY3RlZFZNLCBKU0NlbGwqIGNlbGwsIENlbGxQcm9maWxlKiBw
cm8KICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBqc0R5bmFtaWNDYXN0PENvZGVCbG9j
ayo+KHZtLCBjZWxsKTsKICAgICAgICAgaWYgKFVOTElLRUxZKGNvZGVCbG9jaykpIHsKICAgICAg
ICAgICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY29kZUJsb2NrLT50b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcygpOyArK2kpIHsK
LSAgICAgICAgICAgICAgICBWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSA9IGNvZGVCbG9jay0+
Z2V0RnJvbUFsbFZhbHVlUHJvZmlsZXMoaSk7CisgICAgICAgICAgICBjb2RlQmxvY2stPmZvckVh
Y2hWYWx1ZVByb2ZpbGUoWyZdKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlKSB7CiAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFZhbHVlUHJvZmlsZTo6dG90YWxOdW1i
ZXJPZkJ1Y2tldHM7ICsraSkgewogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKHZhbHVlUHJvZmlsZS5tX2J1Y2tldHNbaV0pOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoIXZhbHVlKQpAQCAtMzQ2LDcgKzM0NSw3IEBAIGJvb2wgSGVhcFZlcmlmaWVy
Ojp2YWxpZGF0ZUpTQ2VsbChWTSogZXhwZWN0ZWRWTSwgSlNDZWxsKiBjZWxsLCBDZWxsUHJvZmls
ZSogcHJvCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0p
OwogICAgICAgICAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350666</attachid>
            <date>2018-09-24 12:30:25 -0700</date>
            <delta_ts>2018-09-24 15:03:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-189897-20180924123025.patch</filename>
            <type>text/plain</type>
            <size>9644</size>
            <attacher name="Tadeu Zagallo">tzagallo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2MzY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
ZTE1ODFhZDkzMjAwODg1NGE0NDE2NGQyZmIwNWVkNGY3ZGIzMmFiLi5iMzYzMjNmOGUzZjU2ZTQ0
ZDU2NmZlZTczOWNlOWMxNjFmYThlNzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMCBAQAorMjAxOC0wOS0yMyAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNv
bT4KKworICAgICAgICBBZGQgZm9yRWFjaCBtZXRob2QgZm9yIGl0ZXJhdGluZyBDb2RlQmxvY2sn
cyBWYWx1ZVByb2ZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xODk4OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgbWV0aG9kIHRvIGFic3RyYWN0IGhvdyB3ZSBmaW5kIFZhbHVlUHJvZmlsZXMg
aW4gYSBDb2RlQmxvY2sgaW4KKyAgICAgICAgcHJlcGFyYXRpb24gZm9yIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODk3ODUsIHdoZW4KKyAgICAgICAgVmFsdWVQcm9m
aWxlcyB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgTWV0YWRhdGFUYWJsZS4KKworICAgICAgICAqIGJ5
dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dXBkYXRlQWxs
UHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1
cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9ucyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6c2hvdWxkT3B0aW1pemVOb3cpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBWYWx1
ZVByb2ZpbGVzKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcyk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6dmFsdWVQcm9maWxlRm9yQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
Om51bWJlck9mVmFsdWVQcm9maWxlcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmFsdWVQ
cm9maWxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp0b3RhbE51bWJlck9mVmFsdWVQcm9m
aWxlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0RnJvbUFsbFZhbHVl
UHJvZmlsZXMpOiBEZWxldGVkLgorICAgICAgICAqIHRvb2xzL0hlYXBWZXJpZmllci5jcHA6Cisg
ICAgICAgIChKU0M6OkhlYXBWZXJpZmllcjo6dmFsaWRhdGVKU0NlbGwpOgorCiAyMDE4LTA5LTIx
ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBmdW5j
dGlvbnMgdG8gbWVhc3VyZSBtZW1vcnkgZm9vdHByaW50IHRvIEpTQwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCAyN2FmMGZkZTJjMDhjNWE1NGZi
ODE5ZDFhY2MzYjEzNGU3NjMxNWUzLi5iZjgwY2FiYjNmYTQ1ZTUyMDJmY2NkODcwN2IzZTFmZmYz
Y2ExZDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cApAQCAtMjU3MiwyMCArMjU3MiwxOSBAQCB2b2lkIENvZGVCbG9jazo6dXBkYXRlQWxsUHJlZGlj
dGlvbnNBbmRDb3VudExpdmVuZXNzKHVuc2lnbmVkJiBudW1iZXJPZkxpdmVOb25BcgogICAgIG51
bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyA9IDA7CiAgICAgbnVtYmVyT2ZTYW1w
bGVzSW5Qcm9maWxlcyA9IDA7IC8vIElmIHRoaXMgZGl2aWRlZCBieSBWYWx1ZVByb2ZpbGU6Om51
bWJlck9mQnVja2V0cyBlcXVhbHMgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgdGhlbiB2YWx1ZSBw
cm9maWxlcyBhcmUgZnVsbC4KIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51
bWJlck9mVmFsdWVQcm9maWxlcygpOyArK2kpIHsKLSAgICAgICAgVmFsdWVQcm9maWxlJiBwcm9m
aWxlID0gZ2V0RnJvbUFsbFZhbHVlUHJvZmlsZXMoaSk7CisgICAgZm9yRWFjaFZhbHVlUHJvZmls
ZShbJl0oVmFsdWVQcm9maWxlJiBwcm9maWxlKSB7CiAgICAgICAgIHVuc2lnbmVkIG51bVNhbXBs
ZXMgPSBwcm9maWxlLnRvdGFsTnVtYmVyT2ZTYW1wbGVzKCk7CiAgICAgICAgIGlmIChudW1TYW1w
bGVzID4gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMpCiAgICAgICAgICAgICBudW1TYW1w
bGVzID0gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHM7IC8vIFdlIGRvbid0IHdhbnQgcHJv
ZmlsZXMgdGhhdCBhcmUgZXh0cmVtZWx5IGhvdCB0byBiZSBnaXZlbiBtb3JlIHdlaWdodC4KICAg
ICAgICAgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyArPSBudW1TYW1wbGVzOwogICAgICAgICBp
ZiAocHJvZmlsZS5tX2J5dGVjb2RlT2Zmc2V0IDwgMCkgewogICAgICAgICAgICAgcHJvZmlsZS5j
b21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmIChwcm9maWxlLm51bWJl
ck9mU2FtcGxlcygpIHx8IHByb2ZpbGUubV9wcmVkaWN0aW9uICE9IFNwZWNOb25lKQogICAgICAg
ICAgICAgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzKys7CiAgICAgICAgIHBy
b2ZpbGUuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7Ci0gICAgfQorICAgIH0pOwog
CiAgICAgZm9yIChhdXRvJiBwcm9maWxlQnVja2V0IDogbV9jYXRjaFByb2ZpbGVzKSB7CiAgICAg
ICAgIHByb2ZpbGVCdWNrZXQtPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBw
cm9maWxlKSB7CkBAIC0yNjM5LDEzICsyNjM4LDEzIEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRP
cHRpbWl6ZU5vdygpCiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewogICAgICAgICBk
YXRhTG9nRigKICAgICAgICAgICAgICJQcm9maWxlIGhvdG5lc3M6ICVsZiAoJXUgLyAldSksICVs
ZiAoJXUgLyAldSlcbiIsCi0gICAgICAgICAgICAoZG91YmxlKW51bWJlck9mTGl2ZU5vbkFyZ3Vt
ZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9mVmFsdWVQcm9maWxlcygpLAotICAgICAgICAgICAg
bnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCBudW1iZXJPZlZhbHVlUHJvZmls
ZXMoKSwKLSAgICAgICAgICAgIChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyAvIFZh
bHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCksCi0g
ICAgICAgICAgICBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzLCBWYWx1ZVByb2ZpbGU6Om51bWJl
ck9mQnVja2V0cyAqIG51bWJlck9mVmFsdWVQcm9maWxlcygpKTsKKyAgICAgICAgICAgIChkb3Vi
bGUpbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzIC8gbnVtYmVyT2ZOb25Bcmd1
bWVudFZhbHVlUHJvZmlsZXMoKSwKKyAgICAgICAgICAgIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50
VmFsdWVQcm9maWxlcywgbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKSwKKyAgICAg
ICAgICAgIChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyAvIFZhbHVlUHJvZmlsZTo6
bnVtYmVyT2ZCdWNrZXRzIC8gbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKSwKKyAg
ICAgICAgICAgIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMsIFZhbHVlUHJvZmlsZTo6bnVtYmVy
T2ZCdWNrZXRzICogbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKSk7CiAgICAgfQog
Ci0gICAgaWYgKCghbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgfHwgKGRvdWJsZSludW1iZXJPZkxp
dmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSA+PSBP
cHRpb25zOjpkZXNpcmVkUHJvZmlsZUxpdmVuZXNzUmF0ZSgpKQorICAgIGlmICgoIW51bWJlck9m
Tm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCkgfHwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1
bWVudFZhbHVlUHJvZmlsZXMgLyBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcygpID49
IE9wdGlvbnM6OmRlc2lyZWRQcm9maWxlTGl2ZW5lc3NSYXRlKCkpCiAgICAgICAgICYmICghdG90
YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB8fCAoZG91YmxlKW51bWJlck9mU2FtcGxlc0luUHJv
ZmlsZXMgLyBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyAvIHRvdGFsTnVtYmVyT2ZWYWx1
ZVByb2ZpbGVzKCkgPj0gT3B0aW9uczo6ZGVzaXJlZFByb2ZpbGVGdWxsbmVzc1JhdGUoKSkKICAg
ICAgICAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVy
KSArIDEgPj0gT3B0aW9uczo6bWluaW11bU9wdGltaXphdGlvbkRlbGF5KCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtMjY5Nyw4ICsyNjk2LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnRhbGx5RnJl
cXVlbnRFeGl0U2l0ZXMoKQogdm9pZCBDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGVzKCkKIHsK
ICAgICBkYXRhTG9nKCJWYWx1ZVByb2ZpbGUgZm9yICIsICp0aGlzLCAiOlxuIik7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCk7ICsraSkg
ewotICAgICAgICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBnZXRGcm9tQWxsVmFsdWVQcm9maWxl
cyhpKTsKKyAgICBmb3JFYWNoVmFsdWVQcm9maWxlKFtdKFZhbHVlUHJvZmlsZSYgcHJvZmlsZSkg
ewogICAgICAgICBpZiAocHJvZmlsZS5tX2J5dGVjb2RlT2Zmc2V0IDwgMCkgewogICAgICAgICAg
ICAgQVNTRVJUKHByb2ZpbGUubV9ieXRlY29kZU9mZnNldCA9PSAtMSk7CiAgICAgICAgICAgICBk
YXRhTG9nRigiICAgYXJnID0gJXU6ICIsIGkpOwpAQCAtMjcxMCw3ICsyNzA4LDcgQEAgdm9pZCBD
b2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGVzKCkKICAgICAgICAgfQogICAgICAgICBwcm9maWxl
LmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKICAgICAgICAgZGF0YUxvZ0YoIlxuIik7Ci0gICAgfQor
ICAgIH0pOwogICAgIGRhdGFMb2coIlJhcmVDYXNlUHJvZmlsZSBmb3IgIiwgKnRoaXMsICI6XG4i
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZSYXJlQ2FzZVByb2ZpbGVz
KCk7ICsraSkgewogICAgICAgICBSYXJlQ2FzZVByb2ZpbGUqIHByb2ZpbGUgPSByYXJlQ2FzZVBy
b2ZpbGUoaSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5k
ZXggYTNhM2QyNjM5MDBkMzEyMmMwOWUyMDRmMzJiNTdiM2UxMDFhMzJiMi4uMjEzOGFmNzcyMmNm
NDhhYTJjZWE5ZTIwMTc5YWI1NGM2MzUxYThjYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaApAQCAtNDE1LDYgKzQxNSw3IEBAIHB1YmxpYzoKICAgICAgICAg
QVNTRVJUKG1fYXJndW1lbnRWYWx1ZVByb2ZpbGVzLnNpemUoKSA9PSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obV9udW1QYXJhbWV0ZXJzKSB8fCAhdm0oKS0+Y2FuVXNlSklUKCkpOwogICAgICAgICBy
ZXR1cm4gbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpOwogICAgIH0KKwogICAgIFZhbHVl
UHJvZmlsZSYgdmFsdWVQcm9maWxlRm9yQXJndW1lbnQodW5zaWduZWQgYXJndW1lbnRJbmRleCkK
ICAgICB7CiAgICAgICAgIEFTU0VSVCh2bSgpLT5jYW5Vc2VKSVQoKSk7IC8vIFRoaXMgaXMgb25s
eSBjYWxsZWQgZnJvbSB0aGUgdmFyaW91cyBKSVQgY29tcGlsZXJzIG9yIHBsYWNlcyB0aGF0IGZp
cnN0IGNoZWNrIG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzIGJlZm9yZSBjYWxsaW5nIHRo
aXMuCkBAIC00MjMsMTAgKzQyNCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9CiAKLSAgICB1bnNpZ25lZCBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBt
X3ZhbHVlUHJvZmlsZXMuc2l6ZSgpOyB9Ci0gICAgVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUo
aW50IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlUHJvZmlsZXNbaW5kZXhdOyB9CiAgICAgVmFsdWVQ
cm9maWxlJiB2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQp
OwotICAgIFZhbHVlUHJvZmlsZSogdHJ5R2V0VmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQo
aW50IGJ5dGVjb2RlT2Zmc2V0KTsKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVk
aWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiBsb2NrZXIs
IGludCBieXRlY29kZU9mZnNldCkKICAgICB7CiAgICAgICAgIGlmIChWYWx1ZVByb2ZpbGUqIHZh
bHVlUHJvZmlsZSA9IHRyeUdldFZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2Rl
T2Zmc2V0KSkKQEAgLTQzNCwxNSArNDMyLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFNw
ZWNOb25lOwogICAgIH0KIAotICAgIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZWYWx1ZVByb2ZpbGVz
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygp
ICsgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCk7Ci0gICAgfQotICAgIFZhbHVlUHJvZmlsZSYgZ2V0
RnJvbUFsbFZhbHVlUHJvZmlsZXModW5zaWduZWQgaW5kZXgpCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnN0IEZ1bmN0b3ImIGZ1bmMp
CiAgICAgewotICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxl
cygpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGluZGV4KTsK
LSAgICAgICAgcmV0dXJuIHZhbHVlUHJvZmlsZShpbmRleCAtIG51bWJlck9mQXJndW1lbnRWYWx1
ZVByb2ZpbGVzKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZB
cmd1bWVudFZhbHVlUHJvZmlsZXMoKTsgKytpKQorICAgICAgICAgICAgZnVuYyh2YWx1ZVByb2Zp
bGVGb3JBcmd1bWVudChpKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1i
ZXJPZlZhbHVlUHJvZmlsZXMoKTsgKytpKQorICAgICAgICAgICAgZnVuYyh2YWx1ZVByb2ZpbGUo
aSkpOwogICAgIH0KIAogICAgIFJhcmVDYXNlUHJvZmlsZSogYWRkUmFyZUNhc2VQcm9maWxlKGlu
dCBieXRlY29kZU9mZnNldCk7CkBAIC05MjEsNiArOTE2LDEyIEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXMoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwg
U2xvdFZpc2l0b3ImKTsKICAgICB2b2lkIHZpc2l0T1NSRXhpdFRhcmdldHMoY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgU2xvdFZpc2l0b3ImKTsKIAorICAgIHVuc2lnbmVkIG51bWJlck9mVmFs
dWVQcm9maWxlcygpIHsgcmV0dXJuIG1fdmFsdWVQcm9maWxlcy5zaXplKCk7IH0KKyAgICB1bnNp
Z25lZCBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIG51bWJlck9m
VmFsdWVQcm9maWxlcygpOyB9CisgICAgdW5zaWduZWQgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmls
ZXMoKSB7IHJldHVybiBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpICsgbnVtYmVyT2ZO
b25Bcmd1bWVudFZhbHVlUHJvZmlsZXMoKTsgfQorICAgIFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9m
aWxlKGludCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZVByb2ZpbGVzW2luZGV4XTsgfQorICAgIFZh
bHVlUHJvZmlsZSogdHJ5R2V0VmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVj
b2RlT2Zmc2V0KTsKKwogICAgIFNlY29uZHMgdGltZVNpbmNlQ3JlYXRpb24oKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9jcmVhdGlvblRpbWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSGVhcFZlcmlmaWVyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9IZWFwVmVyaWZpZXIuY3BwCmluZGV4IGI1OTUzMWZm
NmExZTAzYTY0MzBiMjgyMDFmOWQ3ZDAwY2ZkNzcyYjEuLjYzZGRlODM4MjQ5ZTU0Mzc2ZjgxZjE0
ZGFkODk5NmFiY2U4MGM4MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9IZWFwVmVyaWZpZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9IZWFw
VmVyaWZpZXIuY3BwCkBAIC0zMzAsOCArMzMwLDcgQEAgYm9vbCBIZWFwVmVyaWZpZXI6OnZhbGlk
YXRlSlNDZWxsKFZNKiBleHBlY3RlZFZNLCBKU0NlbGwqIGNlbGwsIENlbGxQcm9maWxlKiBwcm8K
ICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBqc0R5bmFtaWNDYXN0PENvZGVCbG9jayo+
KHZtLCBjZWxsKTsKICAgICAgICAgaWYgKFVOTElLRUxZKGNvZGVCbG9jaykpIHsKICAgICAgICAg
ICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgY29kZUJsb2NrLT50b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcygpOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICBWYWx1ZVByb2ZpbGUmIHZhbHVlUHJvZmlsZSA9IGNvZGVCbG9jay0+Z2V0
RnJvbUFsbFZhbHVlUHJvZmlsZXMoaSk7CisgICAgICAgICAgICBjb2RlQmxvY2stPmZvckVhY2hW
YWx1ZVByb2ZpbGUoWyZdKFZhbHVlUHJvZmlsZSYgdmFsdWVQcm9maWxlKSB7CiAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFZhbHVlUHJvZmlsZTo6dG90YWxOdW1iZXJP
ZkJ1Y2tldHM7ICsraSkgewogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKHZhbHVlUHJvZmlsZS5tX2J1Y2tldHNbaV0pOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoIXZhbHVlKQpAQCAtMzQ2LDcgKzM0NSw3IEBAIGJvb2wgSGVhcFZlcmlmaWVyOjp2
YWxpZGF0ZUpTQ2VsbChWTSogZXhwZWN0ZWRWTSwgSlNDZWxsKiBjZWxsLCBDZWxsUHJvZmlsZSog
cHJvCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOwog
ICAgICAgICAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>