<?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>110052</bug_id>
          
          <creation_ts>2013-02-17 01:35:53 -0800</creation_ts>
          <short_desc>webdatabase: Need to fix some SQLTransaction leaks</short_desc>
          <delta_ts>2013-02-18 18:01:10 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>ggaren</cc>
    
    <cc>levin+threading</cc>
    
    <cc>michaeln</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>834962</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-17 01:35:53 -0800</bug_when>
    <thetext>With https://bugs.webkit.org/show_bug.cgi?id=104750, there is now a window for leaking SQLTransaction and SQLTransactionBackend instances, and by extension, the Database and its extended network of objects.  This leak is intermittent (due to a race condition) and can manifest as an assertion failure in layout test fast/workers/storage/interrupt-database.html when run on a debug build.

The reason for this is because there now exists a circular reference between the SQLTransaction and its backend.  Under normal circumstances, the transaction will reach its end, and it will clean up after itself by breaking the reference cycle in the CleanAndTerminate state.  However, if the transaction is interrupted, we need to handle all the phases where the transaction can be interrupted, and do the appropriate cleanup there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834969</commentid>
    <comment_count>1</comment_count>
      <attachid>188760</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-17 02:11:52 -0800</bug_when>
    <thetext>Created attachment 188760
the proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834971</commentid>
    <comment_count>2</comment_count>
      <attachid>188761</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-17 02:34:07 -0800</bug_when>
    <thetext>Created attachment 188761
patch + some minor adjustments and comment additions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835740</commentid>
    <comment_count>3</comment_count>
      <attachid>188761</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-02-18 14:06:59 -0800</bug_when>
    <thetext>Comment on attachment 188761
patch + some minor adjustments and comment additions.

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

359407    // Now that we&apos;re done, break the reference cycle that keeps us alive.
360408    // See comment about the life-cycle above.
361409    m_frontend = 0;

Either this comment is incorrect, or this code is incorrect. This function references data members after nulling m_frontend, so if that action might delete this, it is wrong to do it here.

&gt; Source/WebCore/Modules/webdatabase/DatabaseBackendAsync.cpp:100
&gt; +        m_transactionQueue.clear();

This line should is redundant: the loop above clears the queue.

&gt; Source/WebCore/Modules/webdatabase/DatabaseBackendAsync.cpp:105
&gt; +    // Must ref() before calling databaseThread()-&gt;recordDatabaseClosed().

Why? This comment should explain what recordDatabaseClosed might do to cause us problems. Otherwise, it just duplicates the line of code below it.

&gt; Source/WebCore/Modules/webdatabase/DatabaseTask.cpp:174
&gt; +    m_wasExecuted = true;

Since this value is set by &quot;doPerformTask&quot;, let&apos;s call it &quot;m_didPerformTask&quot;. &quot;m_wasExecuted&quot; implies that a function named execute was called.

&gt; Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:385
&gt; +    // Note: if doCleanup() has already been invoked, then m_frontend would have
&gt; +    // been nullified.

I think the line of code below, which nullifies m_fronted, is better documentation than this comment. Now that you&apos;ve moved this code into a better place, I think it&apos;s self-documenting.

You could make this even better by moving the assignment to right under the early return, if that&apos;s sound.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835803</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-18 15:51:08 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 188761 [details])
&gt; &gt; Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp:385
&gt; &gt; +    // Note: if doCleanup() has already been invoked, then m_frontend would have
&gt; &gt; +    // been nullified.
&gt; 
&gt; I think the line of code below, which nullifies m_fronted, is better documentation than this comment. Now that you&apos;ve moved this code into a better place, I think it&apos;s self-documenting.
&gt; 
&gt; You could make this even better by moving the assignment to right under the early return, if that&apos;s sound.

Thanks for the review.  I&apos;ve made adjustments for all the feedback provided except for this last one.  I removed the comment, but did not move the setting of &quot;m_frontend = 0&quot;.  There is still come clean up work to do in doCleanup() that relies on the SQLTransactionBackend being alive.  If I set m_frontend = 0, the script thread can now asynchronously deref the SQLTransactionBackend and delete it before we&apos;re done cleaning up.  Hence, we should leave nullifying m_frontend till the end.

Patch landed in r 143271: &lt;http://trac.webkit.org/changeset/143271&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835869</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-18 18:01:10 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; If I set m_frontend = 0, the script thread can now asynchronously deref the SQLTransactionBackend and delete it before we&apos;re done cleaning up.  Hence, we should leave nullifying m_frontend till the end.

I stand corrected.  The caller of doCleanup() is responsible for holding a ref to the SQLTransactionBackend while doCleanup() is being called.  So, I moved the nullifying of m_frontend up as Geoff suggested.

Follow up patch landed in r143282: &lt;http://trac.webkit.org/changeset/143282&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188760</attachid>
            <date>2013-02-17 02:11:52 -0800</date>
            <delta_ts>2013-02-17 02:34:07 -0800</delta_ts>
            <desc>the proposed patch.</desc>
            <filename>bug-110052.patch</filename>
            <type>text/plain</type>
            <size>19543</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MzEyNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBACisyMDEzLTAyLTE2ICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBGaXggU1FMVHJhbnNhY3Rpb24gbGVh
ay4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDA1
Mi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaXRo
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQ3NTAsIHRoZXJlIGlz
IG5vdyBhIGNpcmN1bGFyCisgICAgICAgIHJlZmVyZW5jZSBiZXR3ZWVuIFNRTFRyYW5zYWN0aW9u
IGFuZCBpdHMgYmFja2VuZC4gVGhlIGNsZWFuIHVwIHByb2Nlc3MgbmVlZHMKKyAgICAgICAgdG8g
YmUgZml4ZWQgdG8gZXhwbGljaXRseSBicmVhayB0aGlzIHJlZmVyZW5jZSBjeWNsZS4KKworICAg
ICAgICBUaGUgNSBwaGFzZXMgb2YgdGhlIFNRTFRyYW5zYWN0aW9uIChhbmQgYmFja2VuZCkgcGhh
c2VzIGFuZCB0aGVpciBjbGVhbiB1cAorICAgICAgICBhY3Rpb25zIGFyZToKKworICAgICAgICBQ
aGFzZSAxLiBBZnRlciBCaXJ0aCwgYmVmb3JlIHNjaGVkdWxpbmcKKyAgICAgICAgLSBEdXJpbmcg
c2h1dGRvd24sIERhdGFiYXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZCgpIGNhbGxzCisgICAgICAg
ICAgRGF0YWJhc2VCYWNrZW5kQXN5bmM6OmNsb3NlKCkuIERhdGFiYXNlQmFja2VuZEFzeW5jOjpj
bG9zZSgpIGl0ZXJhdGVzCisgICAgICAgICAgRGF0YWJhc2VCYWNrZW5kQXN5bmM6Om1fdHJhbnNh
Y3Rpb25RdWV1ZSBhbmQgY2FsbHMKKyAgICAgICAgICBTUUx0cmFuc2FjdGlvbkJhY2tlbmQ6Om5v
dGlmeURhdGFiYXNlVGhyZWFkSXNTaHV0dGluZ0Rvd24oKSBvbiBlYWNoCisgICAgICAgICAgdHJh
bnNhY3Rpb24gdGhlcmUuCisKKyAgICAgICAgUGhhc2UgMi4gQWZ0ZXIgc2NoZWR1bGluZywgYmVm
b3JlIHN0YXRlIEFjcXVpcmVMb2NrCisgICAgICAgIC0gfkRhdGFiYXNlVGFzaygpIGNhbGxzIFNR
THRyYW5zYWN0aW9uQmFja2VuZCdzCisgICAgICAgICAgbm90aWZ5RGF0YWJhc2VUaHJlYWRJc1No
dXR0aW5nRG93bigpLgorCisgICAgICAgIFBoYXNlIDMuIEFmdGVyIHN0YXRlIEFjcXVpcmVMb2Nr
LCBiZWZvcmUgImxvY2tBY3F1aXJlZCIKKyAgICAgICAgLSBEdXJpbmcgc2h1dGRvd24sIERhdGFi
YXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZCgpIGNhbGxzCisgICAgICAgICAgU1FMVHJhbnNhY3Rp
b25Db29yZGluYXRvcjo6c2h1dGRvd24oKSwgd2hpY2ggY2FsbHMKKyAgICAgICAgICBTUUxUcmFu
c2FjdGlvbkJhY2tlbmQ6Om5vdGlmeURhdGFiYXNlVGhyZWFkSXNTaHV0dGluZ0Rvd24oKS4KKwor
ICAgICAgICBQaGFzZSA0OiBBZnRlciAibG9ja0FjcXVpcmVkIiwgYmVmb3JlIHN0YXRlIENsZWFu
dXBBbmRUZXJtaW5hdGUKKyAgICAgICAgLSBTYW1lIGFzIFBoYXNlIDMuCisKKyAgICAgICAgUGhh
c2UgNTogQWZ0ZXIgc3RhdGUgQ2xlYW51cEFuZFRlcm1pbmF0ZQorICAgICAgICAtIHN0YXRlIENs
ZWFudXBBbmRUZXJtaW5hdGUgY2FsbHMgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpkb0NsZWFudXAo
KS4KKworICAgICAgICBTZWUgY29tbWVudCBhdCB0aGUgdG9wIG9mIFNRTFRyYW5zYWN0aW9uQmFj
a2VuZC5jcHAgZm9yIG1vcmUgZGV0YWlscy4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmg6CisgICAgICAgIChEYXRhYmFzZSk6CisgICAgICAg
ICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRBc3luYy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmRBc3luYzo6Y2xvc2UpOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuaDoKKyAgICAgICAgKERhdGFiYXNl
QmFja2VuZEFzeW5jKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGFz
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmRBc3luYzo6RGF0YWJhc2VU
cmFuc2FjdGlvblRhc2s6OkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlQmFja2VuZEFzeW5jOjpEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6fkRhdGFi
YXNlVHJhbnNhY3Rpb25UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZEFz
eW5jOjpEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6ZG9QZXJmb3JtVGFzayk6CisgICAgICAgICog
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRhc2suaDoKKyAgICAgICAgKERhdGFiYXNlQmFj
a2VuZEFzeW5jOjpEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayk6CisgICAgICAgICogTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2Uv
U1FMVHJhbnNhY3Rpb25CYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0
aW9uQmFja2VuZDo6ZG9DbGVhbnVwKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9u
QmFja2VuZDo6bm90aWZ5RGF0YWJhc2VUaHJlYWRJc1NodXR0aW5nRG93bik6CisgICAgICAgICog
TW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OlNRTFRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6
YWNxdWlyZUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25Db29yZGluYXRv
cjo6cmVsZWFzZUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb25Db29yZGlu
YXRvcjo6c2h1dGRvd24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5oOgorICAgICAgICAoU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcik6
CisKIDIwMTMtMDItMTYgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlbW92ZSBtdWx0aS10aHJlYWRpbmcgZ3VuayBmcm9tIFdlYktpdDIncyBQbHVnaW5JbmZv
U3RvcmUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlLmNwcAkocmV2aXNpb24gMTQzMDk1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OSwxOSArMTU5LDYg
QEAgdm9pZCBEYXRhYmFzZTo6bWFya0FzRGVsZXRlZEFuZENsb3NlKCkKICAgICBzeW5jaHJvbml6
ZXIud2FpdEZvclRhc2tDb21wbGV0aW9uKCk7CiB9CiAKLXZvaWQgRGF0YWJhc2U6OmNsb3NlKCkK
LXsKLSAgICBBU1NFUlQoZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCkpOwotICAg
IEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhy
ZWFkKCktPmdldFRocmVhZElEKCkpOwotCi0gICAgY2xvc2VEYXRhYmFzZSgpOwotCi0gICAgLy8g
TXVzdCByZWYoKSBiZWZvcmUgY2FsbGluZyBkYXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRhYmFz
ZUNsb3NlZCgpLgotICAgIFJlZlB0cjxEYXRhYmFzZT4gcHJvdGVjdCA9IHRoaXM7Ci0gICAgZGF0
YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlQ2xvc2VkKHRo
aXMpOwotICAgIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT51bnNjaGVkdWxl
RGF0YWJhc2VUYXNrcyh0aGlzKTsKLX0KLQogdm9pZCBEYXRhYmFzZTo6Y2xvc2VJbW1lZGlhdGVs
eSgpCiB7CiAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhy
ZWFkKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2UuaAkocmV2aXNpb24gMTQzMDk1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw2IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgbWFya0FzRGVsZXRlZEFuZENsb3NlKCk7CiAgICAgYm9vbCBk
ZWxldGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWxldGVkOyB9CiAKLSAgICB2b2lkIGNsb3NlKCk7
CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlSW1tZWRpYXRlbHkoKTsKIAogICAgIHVuc2lnbmVkIGxv
bmcgbG9uZyBkYXRhYmFzZVNpemUoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuY3Bw
CShyZXZpc2lvbiAxNDMwOTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlQmFja2VuZEFzeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsMzYg
QEAgYm9vbCBEYXRhYmFzZUJhY2tlbmRBc3luYzo6cGVyZm9ybU9wZW5BbgogICAgIHJldHVybiBm
YWxzZTsKIH0KIAordm9pZCBEYXRhYmFzZUJhY2tlbmRBc3luYzo6Y2xvc2UoKQoreworICAgIEFT
U0VSVChkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKSk7CisgICAgQVNTRVJUKGN1
cnJlbnRUaHJlYWQoKSA9PSBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0
VGhyZWFkSUQoKSk7CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RyYW5z
YWN0aW9uSW5Qcm9ncmVzc011dGV4KTsKKworICAgICAgICAvLyBDbGVhbiB1cCB0cmFuc2FjdGlv
bnMgdGhhdCBoYXZlIG5vdCBiZWVuIHNjaGVkdWxlZCB5ZXQ6CisgICAgICAgIC8vIFBoYXNlIDEg
Y2xlYW51cC4gU2VlIGNvbW1lbnQgb24gIldoYXQgaGFwcGVucyBpZiBhIHRyYW5zYWN0aW9uIGlz
CisgICAgICAgIC8vIGludGVycnVwdGVkPyIgYXQgdGhlIHRvcCBvZiBTUUxUcmFuc2FjdGlvbkJh
Y2tlbmQuY3BwLgorICAgICAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25CYWNrZW5kPiB0cmFuc2Fj
dGlvbjsKKyAgICAgICAgd2hpbGUgKCFtX3RyYW5zYWN0aW9uUXVldWUuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25RdWV1ZS50YWtlRmlyc3QoKTsK
KyAgICAgICAgICAgIHRyYW5zYWN0aW9uLT5ub3RpZnlEYXRhYmFzZVRocmVhZElzU2h1dHRpbmdE
b3duKCk7CisgICAgICAgIH0KKworICAgICAgICBtX2lzVHJhbnNhY3Rpb25RdWV1ZUVuYWJsZWQg
PSBmYWxzZTsKKyAgICAgICAgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICAg
ICAgbV90cmFuc2FjdGlvblF1ZXVlLmNsZWFyKCk7CisgICAgfQorCisgICAgY2xvc2VEYXRhYmFz
ZSgpOworCisgICAgLy8gTXVzdCByZWYoKSBiZWZvcmUgY2FsbGluZyBkYXRhYmFzZVRocmVhZCgp
LT5yZWNvcmREYXRhYmFzZUNsb3NlZCgpLgorICAgIFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRBc3lu
Yz4gcHJvdGVjdCA9IHRoaXM7CisgICAgZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFk
KCktPnJlY29yZERhdGFiYXNlQ2xvc2VkKHRoaXMpOworICAgIGRhdGFiYXNlQ29udGV4dCgpLT5k
YXRhYmFzZVRocmVhZCgpLT51bnNjaGVkdWxlRGF0YWJhc2VUYXNrcyh0aGlzKTsKK30KKwogUGFz
c1JlZlB0cjxTUUxUcmFuc2FjdGlvbkJhY2tlbmQ+IERhdGFiYXNlQmFja2VuZEFzeW5jOjpydW5U
cmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiwKICAgICBi
b29sIHJlYWRPbmx5LCBjb25zdCBDaGFuZ2VWZXJzaW9uRGF0YSogZGF0YSkKIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
QmFja2VuZEFzeW5jLmgJKHJldmlzaW9uIDE0MzA5NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAt
NTMsNiArNTMsNyBAQCBwdWJsaWM6CiAgICAgRGF0YWJhc2VCYWNrZW5kQXN5bmMoUGFzc1JlZlB0
cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQg
bG9uZyBlc3RpbWF0ZWRTaXplKTsKIAogICAgIHZpcnR1YWwgYm9vbCBvcGVuQW5kVmVyaWZ5VmVy
c2lvbihib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiwgU3RyaW5n
JiBlcnJvck1lc3NhZ2UpOworICAgIHZvaWQgY2xvc2UoKTsKIAogICAgIFBhc3NSZWZQdHI8U1FM
VHJhbnNhY3Rpb25CYWNrZW5kPiBydW5UcmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0
aW9uPiwgYm9vbCByZWFkT25seSwgY29uc3QgQ2hhbmdlVmVyc2lvbkRhdGEqKTsKICAgICB2b2lk
IHNjaGVkdWxlVHJhbnNhY3Rpb25TdGVwKFNRTFRyYW5zYWN0aW9uQmFja2VuZCopOwpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRhc2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUYXNr
LmNwcAkocmV2aXNpb24gMTQzMDk1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZVRhc2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsMTIgKzE1MCwyOCBA
QCBjb25zdCBjaGFyKiBEYXRhYmFzZUJhY2tlbmRBc3luYzo6RGF0YWJhCiBEYXRhYmFzZUJhY2tl
bmRBc3luYzo6RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNr
KFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25CYWNrZW5kPiB0cmFuc2FjdGlvbikKICAgICA6IERh
dGFiYXNlVGFzayhEYXRhYmFzZTo6ZnJvbSh0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKSksIDApCiAg
ICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQorICAgICwgbV93YXNFeGVjdXRlZChmYWxz
ZSkKIHsKIH0KIAorRGF0YWJhc2VCYWNrZW5kQXN5bmM6OkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNr
Ojp+RGF0YWJhc2VUcmFuc2FjdGlvblRhc2soKQoreworICAgIC8vIElmIHRoZSB0YXNrIGlzIGJl
aW5nIGRlc3RydWN0ZWQgd2l0aG91dCB0aGUgdHJhbnNhY3Rpb24gZXZlciBiZWluZyBydW4sCisg
ICAgLy8gdGhlbiB3ZSBtdXN0IGVpdGhlciBoYXZlIGFuIGVycm9yIG9yIGFuIGludGVycnVwdGlv
bi4gR2l2ZSB0aGUKKyAgICAvLyB0cmFuc2FjdGlvbiBhIGNoYW5jZSB0byBjbGVhbiB1cCBzaW5j
ZSBpdCBtYXkgbm90IGhhdmUgYmVlbiBhYmxlIHRvCisgICAgLy8gcnVuIHRvIGl0cyBjbGVhbiB1
cCBzdGF0ZS4KKworICAgIC8vIFBoYXNlIDIgY2xlYW51cC4gU2VlIGNvbW1lbnQgb24gIldoYXQg
aGFwcGVucyBpZiBhIHRyYW5zYWN0aW9uIGlzCisgICAgLy8gaW50ZXJydXB0ZWQ/IiBhdCB0aGUg
dG9wIG9mIFNRTFRyYW5zYWN0aW9uQmFja2VuZC5jcHAuCisKKyAgICBpZiAoIW1fd2FzRXhlY3V0
ZWQpCisgICAgICAgIG1fdHJhbnNhY3Rpb24tPm5vdGlmeURhdGFiYXNlVGhyZWFkSXNTaHV0dGlu
Z0Rvd24oKTsKK30KKwogdm9pZCBEYXRhYmFzZUJhY2tlbmRBc3luYzo6RGF0YWJhc2VUcmFuc2Fj
dGlvblRhc2s6OmRvUGVyZm9ybVRhc2soKQogewogICAgIG1fdHJhbnNhY3Rpb24tPnBlcmZvcm1O
ZXh0U3RlcCgpOworICAgIG1fd2FzRXhlY3V0ZWQgPSB0cnVlOwogfQogCiAjaWYgIUxPR19ESVNB
QkxFRApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRh
c2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlVGFzay5oCShyZXZpc2lvbiAxNDMwOTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNiArMTM3
LDggQEAgcHJpdmF0ZToKIAogY2xhc3MgRGF0YWJhc2VCYWNrZW5kQXN5bmM6OkRhdGFiYXNlVHJh
bnNhY3Rpb25UYXNrIDogcHVibGljIERhdGFiYXNlVGFzayB7CiBwdWJsaWM6CisgICAgdmlydHVh
bCB+RGF0YWJhc2VUcmFuc2FjdGlvblRhc2soKTsKKwogICAgIC8vIFRyYW5zYWN0aW9uIHRhc2sg
aXMgbmV2ZXIgc3luY2hyb25vdXMsIHNvIG5vICdzeW5jaHJvbml6ZXInIHBhcmFtZXRlci4KICAg
ICBzdGF0aWMgUGFzc093blB0cjxEYXRhYmFzZVRyYW5zYWN0aW9uVGFzaz4gY3JlYXRlKFBhc3NS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25CYWNrZW5kPiB0cmFuc2FjdGlvbikKICAgICB7CkBAIC0xNTQs
NiArMTU2LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9u
QmFja2VuZD4gbV90cmFuc2FjdGlvbjsKKyAgICBib29sIG1fd2FzRXhlY3V0ZWQ7CiB9OwogCiBj
bGFzcyBEYXRhYmFzZUJhY2tlbmRBc3luYzo6RGF0YWJhc2VUYWJsZU5hbWVzVGFzayA6IHB1Ymxp
YyBEYXRhYmFzZVRhc2sgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZVRocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAJKHJldmlzaW9uIDE0MzA5NSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcs
IDIwMDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjYsNyArMTI2LDcgQEAgdm9pZCBEYXRhYmFzZVRocmVh
ZDo6ZGF0YWJhc2VUaHJlYWQoKQogICAgICAgICBvcGVuU2V0Q29weS5zd2FwKG1fb3BlbkRhdGFi
YXNlU2V0KTsKICAgICAgICAgRGF0YWJhc2VTZXQ6Oml0ZXJhdG9yIGVuZCA9IG9wZW5TZXRDb3B5
LmVuZCgpOwogICAgICAgICBmb3IgKERhdGFiYXNlU2V0OjppdGVyYXRvciBpdCA9IG9wZW5TZXRD
b3B5LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIERhdGFiYXNlOjpmcm9t
KCgqaXQpLmdldCgpKS0+Y2xvc2UoKTsKKyAgICAgICAgICAgICgqaXQpLmdldCgpLT5jbG9zZSgp
OwogICAgIH0KIAogICAgIC8vIERldGFjaCB0aGUgdGhyZWFkIHNvIGl0cyByZXNvdXJjZXMgYXJl
IG5vIGxvbmdlciBvZiBhbnkgY29uY2VybiB0byBhbnlvbmUgZWxzZQpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rp
b25CYWNrZW5kLmNwcAkocmV2aXNpb24gMTQzMDk1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yODgsMTUgKzI4OCw1OCBAQAogLy8gICAgIFdoYXQgaGFwcGVucyBpZiBhIHRyYW5zYWN0aW9u
IGlzIGludGVycnVwdGVkPwogLy8gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CiAvLyAgICAgSWYgdGhlIHRyYW5zYWN0aW9uIGlzIGludGVycnVwdGVkIGhh
bGYgd2F5LCBpdCB3b24ndCBnZXQgdG8gcnVuIHRvIHN0YXRlCi0vLyAgICAgQ2xlYW51cEFuZFRl
cm1pbmF0ZSwgYW5kIGhlbmNlLCB3b3VsZCBub3QgaGF2ZSBjYWxsZWQgZG9DbGVhbnVwKCkuIGRv
Q2xlYW51cCgpIGlzCi0vLyAgICAgd2hlcmUgd2UgbnVsbGlmeSBTUUxUcmFuc2FjdGlvbkJhY2tl
bmQ6Om1fZnJvbnRlbmQgdG8gYnJlYWsgdGhlIHJlZmVyZW5jZSBjeWNsZQotLy8gICAgIGJldHdl
ZW4gdGhlIGZyb250ZW5kIGFuZCBiYWNrZW5kLiBIZW5jZSwgdGhhdCB0cmFuc2FjdGlvbiB3aWxs
IG5ldmVyIGdldCBjbGVhbmVkCi0vLyAgICAgdXAsIHVubGVzcyAuLi4KLS8vCi0vLyAgICAgLi4u
IHVubGVzcyB3ZSBoYXZlIGEgY2xlYW51cCBtZWNoYW5pc20gZm9yIGludGVycnVwdGlvbnMuIFRo
YXQgaXMsIGR1cmluZyB0aGUKLS8vICAgICBzaHV0ZG93biBvZiB0aGUgRGF0YWJhc2VUaHJlYWQs
IHRoZSBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yIHdpbGwgZGlzY292ZXIgdGhpcwotLy8gICAg
IGludGVycnVwdGVkIHRyYW5zYWN0aW9uIGFuZCBpbnZva2UgaXRzIG5vdGlmeURhdGFiYXNlVGhy
ZWFkSXNTaHV0dGluZ0Rvd24oKSwKLS8vICAgICB3aGljaCBpbiB0dXJuIHdpbGwgY2FsbCBkb0Ns
ZWFudXAoKS4gV2l0aCB0aGF0LCBhbGwgaXMgd2VsbCBhZ2Fpbi4KKy8vICAgICBDbGVhbnVwQW5k
VGVybWluYXRlLCBhbmQgaGVuY2UsIHdvdWxkIG5vdCBoYXZlIGNhbGxlZCBTUUxUcmFuc2FjdGlv
bkJhY2tlbmQncworLy8gICAgIGRvQ2xlYW51cCgpLiBkb0NsZWFudXAoKSBpcyB3aGVyZSB3ZSBu
dWxsaWZ5IFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6bV9mcm9udGVuZAorLy8gICAgIHRvIGJyZWFr
IHRoZSByZWZlcmVuY2UgY3ljbGUgYmV0d2VlbiB0aGUgZnJvbnRlbmQgYW5kIGJhY2tlbmQuIEhl
bmNlLCB3ZSBuZWVkCisvLyAgICAgdG8gY2xlYW51cCB0aGUgdHJhbnNhY3Rpb24gYnkgb3RoZXIg
bWVhbnMuCisvLworLy8gICAgIE5vdGU6IGNhbGxpbmcgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpu
b3RpZnlEYXRhYmFzZVRocmVhZElzU2h1dHRpbmdEb3duKCkKKy8vICAgICBpcyBlZmZlY3RpdmVs
eSB0aGUgc2FtZSBhcyBjYWxsaW5nIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZG9DbGVhbigpLgor
Ly8KKy8vICAgICBJbiB0ZXJtcyBvZiB3aG8gbmVlZHMgdG8gY2FsbCBkb0NsZWFudXAoKSwgdGhl
cmUgYXJlIDUgcGhhc2VzIGluIHRoZQorLy8gICAgIFNRTFRyYW5zYWN0aW9uQmFja2VuZCBsaWZl
LWN5Y2xlLiBUaGVzZSBhcmUgdGhlIHBoYXNlcyBhbmQgaG93IHRoZSBjbGVhbgorLy8gICAgIHVw
IGlzIGRvbmU6CisvLworLy8gICAgIFBoYXNlIDEuIEFmdGVyIEJpcnRoLCBiZWZvcmUgc2NoZWR1
bGluZworLy8KKy8vICAgICAtIFRvIGNsZWFuIHVwLCBEYXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VU
aHJlYWQoKSB3aWxsIGNhbGwKKy8vICAgICAgIERhdGFiYXNlQmFja2VuZEFzeW5jOjpjbG9zZSgp
IGR1cmluZyBpdHMgc2h1dGRvd24uCisvLyAgICAgLSBEYXRhYmFzZUJhY2tlbmRBc3luYzo6Y2xv
c2UoKSB3aWxsIGl0ZXJhdGUKKy8vICAgICAgIERhdGFiYXNlQmFja2VuZEFzeW5jOjptX3RyYW5z
YWN0aW9uUXVldWUgYW5kIGNhbGwKKy8vICAgICAgIG5vdGlmeURhdGFiYXNlVGhyZWFkSXNTaHV0
dGluZ0Rvd24oKSBvbiBlYWNoIHRyYW5zYWN0aW9uIHRoZXJlLgorLy8gICAgICAgIAorLy8gICAg
IFBoYXNlIDIuIEFmdGVyIHNjaGVkdWxpbmcsIGJlZm9yZSBzdGF0ZSBBY3F1aXJlTG9jaworLy8K
Ky8vICAgICAtIElmIHRoZSBpbnRlcnJ1cHRpb24gb2NjdXJlcyBiZWZvcmUgdGhlIERhdGFiYXNl
VHJhbnNhY3Rpb25UYXNrIGlzCisvLyAgICAgICBzY2hlZHVsZWQgaW4gRGF0YWJhc2VUaHJlYWQ6
Om1fcXVldWUgYnV0IGhhc24ndCBnb3R0ZW4gdG8gZXhlY3V0ZQorLy8gICAgICAgKGkuZS4gRGF0
YWJhc2VUcmFuc2FjdGlvblRhc2s6OnBlcmZvcm1UYXNrKCkgaGFzIG5vdCBiZWVuIGNhbGxlZCks
CisvLyAgICAgICB0aGVuIHRoZSBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayBtYXkgZ2V0IGRlc3Ry
dWN0ZWQgYmVmb3JlIGl0IGV2ZXIKKy8vICAgICAgIGdldHMgdG8gZXhlY3V0ZS4KKy8vICAgICAt
IFRvIGNsZWFuIHVwLCB0aGUgZGVzdHJ1Y3RvciB3aWxsIGNoZWNrIGlmIHRoZSB0YXNrJ3MgbV93
YXNFeGVjdXRlZCBpcworLy8gICAgICAgc2V0LiBJZiBub3QsIGl0IHdpbGwgY2FsbCBub3RpZnlE
YXRhYmFzZVRocmVhZElzU2h1dHRpbmdEb3duKCkgb24KKy8vICAgICAgIHRoZSB0YXNrJ3MgdHJh
bnNhY3Rpb24uCisvLworLy8gICAgIFBoYXNlIDMuIEFmdGVyIHN0YXRlIEFjcXVpcmVMb2NrLCBi
ZWZvcmUgImxvY2tBY3F1aXJlZCIKKy8vCisvLyAgICAgLSBJbiB0aGlzIHBoYXNlLCB0aGUgdHJh
bnNhY3Rpb24gd291bGQgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZQorLy8gICAgICAgU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvcidzIENvb3JkaW5hdGlvbkluZm8ncyBwZW5kaW5nVHJhbnNhY3Rpb25z
LgorLy8gICAgIC0gVG8gY2xlYW4gdXAsIGR1cmluZyBzaHV0ZG93biwgRGF0YWJhc2VUaHJlYWQ6
OmRhdGFiYXNlVGhyZWFkKCkgY2FsbHMKKy8vICAgICAgIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0
b3I6OnNodXRkb3duKCksIHdoaWNoIGNhbGxzCisvLyAgICAgICBub3RpZnlEYXRhYmFzZVRocmVh
ZElzU2h1dHRpbmdEb3duKCkuCisvLworLy8gICAgIFBoYXNlIDQ6IEFmdGVyICJsb2NrQWNxdWly
ZWQiLCBiZWZvcmUgc3RhdGUgQ2xlYW51cEFuZFRlcm1pbmF0ZQorLy8KKy8vICAgICAtIEluIHRo
aXMgcGhhc2UsIHRoZSB0cmFuc2FjdGlvbiB3b3VsZCBoYXZlIGJlZW4gYWRkZWQgZWl0aGVyIHRv
IHRoZQorLy8gICAgICAgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcidzIENvb3JkaW5hdGlvbklu
Zm8ncyBhY3RpdmVXcml0ZVRyYW5zYWN0aW9uCisvLyAgICAgICBvciBhY3RpdmVSZWFkVHJhbnNh
Y3Rpb25zLgorLy8gICAgIC0gVG8gY2xlYW4gdXAsIGR1cmluZyBzaHV0ZG93biwgRGF0YWJhc2VU
aHJlYWQ6OmRhdGFiYXNlVGhyZWFkKCkgY2FsbHMKKy8vICAgICAgIFNRTFRyYW5zYWN0aW9uQ29v
cmRpbmF0b3I6OnNodXRkb3duKCksIHdoaWNoIGNhbGxzCisvLyAgICAgICBub3RpZnlEYXRhYmFz
ZVRocmVhZElzU2h1dHRpbmdEb3duKCkuCisvLworLy8gICAgIFBoYXNlIDU6IEFmdGVyIHN0YXRl
IENsZWFudXBBbmRUZXJtaW5hdGUKKy8vCisvLyAgICAgLSBUaGlzIGlzIGhvdyBhIHRyYW5zYWN0
aW9uIGVuZHMgbm9ybWFsbHkuCisvLyAgICAgLSBzdGF0ZSBDbGVhbnVwQW5kVGVybWluYXRlIGNh
bGxzIGRvQ2xlYW51cCgpLgogCiAKIC8vIFRoZXJlJ3Mgbm8gd2F5IG9mIGtub3dpbmcgZXhhY3Rs
eSBob3cgbXVjaCBtb3JlIHNwYWNlIHdpbGwgYmUgcmVxdWlyZWQgd2hlbiBhIHN0YXRlbWVudCBo
aXRzIHRoZSBxdW90YSBsaW1pdC4KQEAgLTMzOCw2ICszODEsMTEgQEAgU1FMVHJhbnNhY3Rpb25C
YWNrZW5kOjp+U1FMVHJhbnNhY3Rpb25CYQogCiB2b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6
ZG9DbGVhbnVwKCkKIHsKKyAgICAvLyBOb3RlOiBpZiBkb0NsZWFudXAoKSBoYXMgYWxyZWFkeSBi
ZWVuIGludm9rZWQsIHRoZW4gbV9mcm9udGVuZCB3b3VsZCBoYXZlCisgICAgLy8gYmVlbiBudWxs
aWZpZWQuCisgICAgaWYgKCFtX2Zyb250ZW5kKQorICAgICAgICByZXR1cm47CisKICAgICBBU1NF
UlQoY3VycmVudFRocmVhZCgpID09IGRhdGFiYXNlKCktPmRhdGFiYXNlQ29udGV4dCgpLT5kYXRh
YmFzZVRocmVhZCgpLT5nZXRUaHJlYWRJRCgpKTsKIAogICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X3N0YXRlbWVudE11dGV4KTsKQEAgLTQ4NCwxMSArNTMyLDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlv
bkJhY2tlbmQ6Om5vdGlmeURhdGFiYQogICAgIC8vIERCIHRocmVhZC4gQW1vbmdzdCBvdGhlciB3
b3JrLCBkb0NsZWFudXAoKSB3aWxsIGNsZWFyIG1fc3FsaXRlVHJhbnNhY3Rpb24KICAgICAvLyB3
aGljaCBpbnZva2VzIFNRTGl0ZVRyYW5zYWN0aW9uJ3MgZGVzdHJ1Y3Rvciwgd2hpY2ggd2lsbCBk
byB0aGUgcm9sbCBiYWNrCiAgICAgLy8gaWYgbmVjZXNzYXJ5LgotCi0gICAgLy8gTm90ZTogaWYg
ZG9DbGVhbnVwKCkgaGFzIGFscmVhZHkgYmVlbiBpbnZva2VkLCB0aGVuIG1fZnJvbnRlbmQgd291
bGQgaGF2ZQotICAgIC8vIGJlZW4gbnVsbGlmaWVkLgotICAgIGlmIChtX2Zyb250ZW5kKQotICAg
ICAgICBkb0NsZWFudXAoKTsKKyAgICBkb0NsZWFudXAoKTsKIH0KIAogU1FMVHJhbnNhY3Rpb25T
dGF0ZSBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmFjcXVpcmVMb2NrKCkKQEAgLTcyMiw2ICs3NjYs
NyBAQCBTUUxUcmFuc2FjdGlvblN0YXRlIFNRTFRyYW5zYWN0aW9uQmFja2VuCiAgICAgTE9HKFN0
b3JhZ2VBUEksICJUcmFuc2FjdGlvbiAlcCBpcyBjb21wbGV0ZVxuIiwgdGhpcyk7CiAgICAgQVNT
RVJUKCFtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygp
KTsKIAorICAgIC8vIFBoYXNlIDUgY2xlYW51cC4gU2VlIGNvbW1lbnQgb24gdGhlIFNRTFRyYW5z
YWN0aW9uIGFib3ZlLgogICAgIGRvQ2xlYW51cCgpOwogICAgIG1fZGF0YWJhc2UtPmluUHJvZ3Jl
c3NUcmFuc2FjdGlvbkNvbXBsZXRlZCgpOwogICAgIHJldHVybiBTUUxUcmFuc2FjdGlvblN0YXRl
OjpFbmQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAJKHJldmlzaW9uIDE0
MzA5NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rp
b25Db29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDExIEBAIHN0YXRp
YyBTdHJpbmcgZ2V0RGF0YWJhc2VJZGVudGlmaWVyKFNRTFQKICAgICByZXR1cm4gZGF0YWJhc2Ut
PnN0cmluZ0lkZW50aWZpZXIoKTsKIH0KIAorU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6U1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvcigpCisgICAgOiBtX2lzU2h1dHRpbmdEb3duKGZhbHNlKQor
eworfQorCiB2b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnByb2Nlc3NQZW5kaW5nVHJh
bnNhY3Rpb25zKENvb3JkaW5hdGlvbkluZm8mIGluZm8pCiB7CiAgICAgaWYgKGluZm8uYWN0aXZl
V3JpdGVUcmFuc2FjdGlvbiB8fCBpbmZvLnBlbmRpbmdUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKQpA
QCAtNzEsNiArNzYsOSBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnByb2Nlc3NQ
CiAKIHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6YWNxdWlyZUxvY2soU1FMVHJhbnNh
Y3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbikKIHsKKyAgICBpZiAobV9pc1NodXR0aW5nRG93bikK
KyAgICAgICAgcmV0dXJuOworCiAgICAgU3RyaW5nIGRiSWRlbnRpZmllciA9IGdldERhdGFiYXNl
SWRlbnRpZmllcih0cmFuc2FjdGlvbik7CiAKICAgICBDb29yZGluYXRpb25JbmZvTWFwOjppdGVy
YXRvciBjb29yZGluYXRpb25JbmZvSXRlcmF0b3IgPSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuZmlu
ZChkYklkZW50aWZpZXIpOwpAQCAtODYsNyArOTQsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uQ29v
cmRpbmF0b3I6OmFjcXVpcmVMCiAKIHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cmVs
ZWFzZUxvY2soU1FMVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbikKIHsKLSAgICBpZiAo
bV9jb29yZGluYXRpb25JbmZvTWFwLmlzRW1wdHkoKSkKKyAgICBpZiAobV9jb29yZGluYXRpb25J
bmZvTWFwLmlzRW1wdHkoKSB8fCBtX2lzU2h1dHRpbmdEb3duKQogICAgICAgICByZXR1cm47CiAK
ICAgICBTdHJpbmcgZGJJZGVudGlmaWVyID0gZ2V0RGF0YWJhc2VJZGVudGlmaWVyKHRyYW5zYWN0
aW9uKTsKQEAgLTEwOCwxMCArMTE2LDE1IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRv
cjo6cmVsZWFzZUwKIAogdm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpzaHV0ZG93bigp
CiB7CisgICAgbV9pc1NodXR0aW5nRG93biA9IHRydWU7CiAgICAgLy8gTm90aWZ5IGFsbCB0cmFu
c2FjdGlvbnMgaW4gcHJvZ3Jlc3MgdGhhdCB0aGUgZGF0YWJhc2UgdGhyZWFkIGlzIHNodXR0aW5n
IGRvd24KICAgICBmb3IgKENvb3JkaW5hdGlvbkluZm9NYXA6Oml0ZXJhdG9yIGNvb3JkaW5hdGlv
bkluZm9JdGVyYXRvciA9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5iZWdpbigpOwogICAgICAgICAg
Y29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yICE9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5lbmQoKTsg
Kytjb29yZGluYXRpb25JbmZvSXRlcmF0b3IpIHsKICAgICAgICAgQ29vcmRpbmF0aW9uSW5mbyYg
aW5mbyA9IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvci0+dmFsdWU7CisKKyAgICAgICAgLy8gQ2xl
YW4gdXAgdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSByZWFjaGVkICJsb2NrQWNxdWlyZWQiOgorICAg
ICAgICAvLyBQaGFzZSA0IGNsZWFudXAuIFNlZSBjb21tZW50IG9uICJXaGF0IGhhcHBlbnMgaWYg
YSB0cmFuc2FjdGlvbiBpcworICAgICAgICAvLyBpbnRlcnJ1cHRlZD8iIGF0IHRoZSB0b3Agb2Yg
U1FMVHJhbnNhY3Rpb25CYWNrZW5kLmNwcC4KICAgICAgICAgaWYgKGluZm8uYWN0aXZlV3JpdGVU
cmFuc2FjdGlvbikKICAgICAgICAgICAgIGluZm8uYWN0aXZlV3JpdGVUcmFuc2FjdGlvbi0+bm90
aWZ5RGF0YWJhc2VUaHJlYWRJc1NodXR0aW5nRG93bigpOwogICAgICAgICBmb3IgKEhhc2hTZXQ8
UmVmUHRyPFNRTFRyYW5zYWN0aW9uQmFja2VuZD4gPjo6aXRlcmF0b3IgYWN0aXZlUmVhZFRyYW5z
YWN0aW9uc0l0ZXJhdG9yID0KQEAgLTEyMCw2ICsxMzMsMTQgQEAgdm9pZCBTUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yOjpzaHV0ZG93bgogICAgICAgICAgICAgICsrYWN0aXZlUmVhZFRyYW5zYWN0
aW9uc0l0ZXJhdG9yKSB7CiAgICAgICAgICAgICAoKmFjdGl2ZVJlYWRUcmFuc2FjdGlvbnNJdGVy
YXRvciktPm5vdGlmeURhdGFiYXNlVGhyZWFkSXNTaHV0dGluZ0Rvd24oKTsKICAgICAgICAgfQor
CisgICAgICAgIC8vIENsZWFuIHVwIHRyYW5zYWN0aW9ucyB0aGF0IGhhdmUgTk9UIHJlYWNoZWQg
ImxvY2tBY3F1aXJlZCI6CisgICAgICAgIC8vIFBoYXNlIDMgY2xlYW51cC4gU2VlIGNvbW1lbnQg
b24gIldoYXQgaGFwcGVucyBpZiBhIHRyYW5zYWN0aW9uIGlzCisgICAgICAgIC8vIGludGVycnVw
dGVkPyIgYXQgdGhlIHRvcCBvZiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQuY3BwLgorICAgICAgICB3
aGlsZSAoIWluZm8ucGVuZGluZ1RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IFJlZlB0cjxTUUxUcmFuc2FjdGlvbkJhY2tlbmQ+IHRyYW5zYWN0aW9uID0gaW5mby5wZW5kaW5n
VHJhbnNhY3Rpb25zLmZpcnN0KCk7CisgICAgICAgICAgICB0cmFuc2FjdGlvbi0+bm90aWZ5RGF0
YWJhc2VUaHJlYWRJc1NodXR0aW5nRG93bigpOworICAgICAgICB9CiAgICAgfQogCiAgICAgLy8g
Q2xlYW4gdXAgYWxsIHBlbmRpbmcgdHJhbnNhY3Rpb25zIGZvciBhbGwgZGF0YWJhc2VzCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAkocmV2aXNpb24gMTQzMDk1KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgY2xhc3MgU1FMVHJhbnNhY3Rpb25CYWNr
ZW5kOwogY2xhc3MgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvciB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgotICAgIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSB7IH0KKyAgICBT
UUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCk7CiAgICAgdm9pZCBhY3F1aXJlTG9jayhTUUxUcmFu
c2FjdGlvbkJhY2tlbmQqKTsKICAgICB2b2lkIHJlbGVhc2VMb2NrKFNRTFRyYW5zYWN0aW9uQmFj
a2VuZCopOwogICAgIHZvaWQgc2h1dGRvd24oKTsKQEAgLTYxLDYgKzYxLDcgQEAgcHJpdmF0ZToK
ICAgICAvLyBNYXBzIGRhdGFiYXNlIG5hbWVzIHRvIGluZm9ybWF0aW9uIGFib3V0IHBlbmRpbmcg
dHJhbnNhY3Rpb25zCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ29vcmRpbmF0aW9uSW5m
bz4gQ29vcmRpbmF0aW9uSW5mb01hcDsKICAgICBDb29yZGluYXRpb25JbmZvTWFwIG1fY29vcmRp
bmF0aW9uSW5mb01hcDsKKyAgICBib29sIG1faXNTaHV0dGluZ0Rvd247CiAKICAgICB2b2lkIHBy
b2Nlc3NQZW5kaW5nVHJhbnNhY3Rpb25zKENvb3JkaW5hdGlvbkluZm8mKTsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188761</attachid>
            <date>2013-02-17 02:34:07 -0800</date>
            <delta_ts>2013-02-18 14:06:59 -0800</delta_ts>
            <desc>patch + some minor adjustments and comment additions.</desc>
            <filename>bug-110052.patch</filename>
            <type>text/plain</type>
            <size>20083</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MzEyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBACisyMDEzLTAyLTE3ICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBGaXggU1FMVHJhbnNhY3Rpb24gbGVh
ay4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDA1
Mi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaXRo
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQ3NTAsIHRoZXJlIGlz
IG5vdyBhIGNpcmN1bGFyCisgICAgICAgIHJlZmVyZW5jZSBiZXR3ZWVuIFNRTFRyYW5zYWN0aW9u
IGFuZCBpdHMgYmFja2VuZC4gVGhlIGNsZWFuIHVwIHByb2Nlc3MgbmVlZHMKKyAgICAgICAgdG8g
YmUgZml4ZWQgdG8gZXhwbGljaXRseSBicmVhayB0aGlzIHJlZmVyZW5jZSBjeWNsZS4KKworICAg
ICAgICBUaGUgNSBwaGFzZXMgb2YgdGhlIFNRTFRyYW5zYWN0aW9uIChhbmQgYmFja2VuZCkgcGhh
c2VzIGFuZCB0aGVpciBjbGVhbiB1cAorICAgICAgICBhY3Rpb25zIGFyZToKKworICAgICAgICBQ
aGFzZSAxLiBBZnRlciBCaXJ0aCwgYmVmb3JlIHNjaGVkdWxpbmcKKyAgICAgICAgLSBEdXJpbmcg
c2h1dGRvd24sIERhdGFiYXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZCgpIGNhbGxzCisgICAgICAg
ICAgRGF0YWJhc2VCYWNrZW5kQXN5bmM6OmNsb3NlKCkuIERhdGFiYXNlQmFja2VuZEFzeW5jOjpj
bG9zZSgpIGl0ZXJhdGVzCisgICAgICAgICAgRGF0YWJhc2VCYWNrZW5kQXN5bmM6Om1fdHJhbnNh
Y3Rpb25RdWV1ZSBhbmQgY2FsbHMKKyAgICAgICAgICBTUUx0cmFuc2FjdGlvbkJhY2tlbmQ6Om5v
dGlmeURhdGFiYXNlVGhyZWFkSXNTaHV0dGluZ0Rvd24oKSBvbiBlYWNoCisgICAgICAgICAgdHJh
bnNhY3Rpb24gdGhlcmUuCisKKyAgICAgICAgUGhhc2UgMi4gQWZ0ZXIgc2NoZWR1bGluZywgYmVm
b3JlIHN0YXRlIEFjcXVpcmVMb2NrCisgICAgICAgIC0gfkRhdGFiYXNlVGFzaygpIGNhbGxzIFNR
THRyYW5zYWN0aW9uQmFja2VuZCdzCisgICAgICAgICAgbm90aWZ5RGF0YWJhc2VUaHJlYWRJc1No
dXR0aW5nRG93bigpLgorCisgICAgICAgIFBoYXNlIDMuIEFmdGVyIHN0YXRlIEFjcXVpcmVMb2Nr
LCBiZWZvcmUgImxvY2tBY3F1aXJlZCIKKyAgICAgICAgLSBEdXJpbmcgc2h1dGRvd24sIERhdGFi
YXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZCgpIGNhbGxzCisgICAgICAgICAgU1FMVHJhbnNhY3Rp
b25Db29yZGluYXRvcjo6c2h1dGRvd24oKSwgd2hpY2ggY2FsbHMKKyAgICAgICAgICBTUUxUcmFu
c2FjdGlvbkJhY2tlbmQ6Om5vdGlmeURhdGFiYXNlVGhyZWFkSXNTaHV0dGluZ0Rvd24oKS4KKwor
ICAgICAgICBQaGFzZSA0OiBBZnRlciAibG9ja0FjcXVpcmVkIiwgYmVmb3JlIHN0YXRlIENsZWFu
dXBBbmRUZXJtaW5hdGUKKyAgICAgICAgLSBTYW1lIGFzIFBoYXNlIDMuCisKKyAgICAgICAgUGhh
c2UgNTogQWZ0ZXIgc3RhdGUgQ2xlYW51cEFuZFRlcm1pbmF0ZQorICAgICAgICAtIHN0YXRlIENs
ZWFudXBBbmRUZXJtaW5hdGUgY2FsbHMgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpkb0NsZWFudXAo
KS4KKworICAgICAgICBTZWUgY29tbWVudCBhdCB0aGUgdG9wIG9mIFNRTFRyYW5zYWN0aW9uQmFj
a2VuZC5jcHAgZm9yIG1vcmUgZGV0YWlscy4KKworICAgICAgICBPdGhlciBzdXBwb3J0aW5nIGNo
YW5nZXM6CisgICAgICAgIC0gTW92ZWQgRGF0YWJhc2U6OmNsb3NlKCkgdG8gdGhlIERhdGFiYXNl
QmFja2VuZEFzeW5jLgorICAgICAgICAtIE1vdmVkIHRoZSAiaWYgYWxyZWFkeSBjbGVhbmVkIHVw
IiBjaGVjayBmcm9tIFNRTFRyYW5zYWN0aW9uQmFja2VuZCdzCisgICAgICAgICAgbm90aWZ5RGF0
YWJhc2VUaHJlYWRJc1NodXR0aW5nRG93bigpIHRvIGRvQ2xlYW51cCgpLgorICAgICAgICAtIEFk
ZGVkIGEgY2hlY2sgdG8gcHJldmVudCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yJ3MgcmVsZWFz
ZUxvY2soKQorICAgICAgICAgIGZyb20gcnVubmluZyB3aGVuIGl0J3Mgc2h1dHRpbmcgZG93bi4K
KworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmg6
CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRBc3luYy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmRBc3luYzo6Y2xvc2UpOiBNb3ZlIGZy
b20gRGF0YWJhc2UuY3BwLgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VC
YWNrZW5kQXN5bmMuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGFz
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUJhY2tlbmRBc3luYzo6RGF0YWJhc2VU
cmFuc2FjdGlvblRhc2s6OkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlQmFja2VuZEFzeW5jOjpEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6fkRhdGFi
YXNlVHJhbnNhY3Rpb25UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQmFja2VuZEFz
eW5jOjpEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6ZG9QZXJmb3JtVGFzayk6CisgICAgICAgICog
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRhc2suaDoKKyAgICAgICAgKERhdGFiYXNlQmFj
a2VuZEFzeW5jOjpEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayk6CisgICAgICAgICogTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2Uv
U1FMVHJhbnNhY3Rpb25CYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0
aW9uQmFja2VuZDo6ZG9DbGVhbnVwKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9u
QmFja2VuZDo6bm90aWZ5RGF0YWJhc2VUaHJlYWRJc1NodXR0aW5nRG93bik6CisgICAgICAgIChX
ZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6OmNsZWFudXBBbmRUZXJtaW5hdGUpOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpTUUxUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3I6OmFjcXVpcmVMb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29v
cmRpbmF0b3I6OnJlbGVhc2VMb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9u
Q29vcmRpbmF0b3I6OnNodXRkb3duKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL1NR
TFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDoKKyAgICAgICAgKFNRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IpOgorCiAyMDEzLTAyLTE3ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5v
cmc+CiAKICAgICAgICAgW1F0XSBVbnJldmlld2VkIGJ1aWxkZml4IGZvciAhVVNFKExJQlhNTCkg
YnVpbGRzIGFmdGVyIHIxNDMxMTIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAkocmV2aXNpb24gMTQzMDk1KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1OSwxOSArMTU5LDYgQEAgdm9pZCBEYXRhYmFzZTo6bWFya0FzRGVsZXRlZEFuZENsb3NlKCkK
ICAgICBzeW5jaHJvbml6ZXIud2FpdEZvclRhc2tDb21wbGV0aW9uKCk7CiB9CiAKLXZvaWQgRGF0
YWJhc2U6OmNsb3NlKCkKLXsKLSAgICBBU1NFUlQoZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNl
VGhyZWFkKCkpOwotICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gZGF0YWJhc2VDb250ZXh0
KCktPmRhdGFiYXNlVGhyZWFkKCktPmdldFRocmVhZElEKCkpOwotCi0gICAgY2xvc2VEYXRhYmFz
ZSgpOwotCi0gICAgLy8gTXVzdCByZWYoKSBiZWZvcmUgY2FsbGluZyBkYXRhYmFzZVRocmVhZCgp
LT5yZWNvcmREYXRhYmFzZUNsb3NlZCgpLgotICAgIFJlZlB0cjxEYXRhYmFzZT4gcHJvdGVjdCA9
IHRoaXM7Ci0gICAgZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERh
dGFiYXNlQ2xvc2VkKHRoaXMpOwotICAgIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVh
ZCgpLT51bnNjaGVkdWxlRGF0YWJhc2VUYXNrcyh0aGlzKTsKLX0KLQogdm9pZCBEYXRhYmFzZTo6
Y2xvc2VJbW1lZGlhdGVseSgpCiB7CiAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+aXNDb250ZXh0VGhyZWFkKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2UuaAkocmV2aXNpb24gMTQzMDk1KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3
ICs3MSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbWFya0FzRGVsZXRlZEFuZENsb3Nl
KCk7CiAgICAgYm9vbCBkZWxldGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWxldGVkOyB9CiAKLSAg
ICB2b2lkIGNsb3NlKCk7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlSW1tZWRpYXRlbHkoKTsKIAog
ICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkYXRhYmFzZVNpemUoKSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VC
YWNrZW5kQXN5bmMuY3BwCShyZXZpc2lvbiAxNDMwOTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZEFzeW5jLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzgsNiArNzgsMzYgQEAgYm9vbCBEYXRhYmFzZUJhY2tlbmRBc3luYzo6cGVyZm9ybU9wZW5B
bgogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBEYXRhYmFzZUJhY2tlbmRBc3luYzo6Y2xv
c2UoKQoreworICAgIEFTU0VSVChkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKSk7
CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJh
c2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSk7CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4KTsKKworICAgICAgICAvLyBDbGVh
biB1cCB0cmFuc2FjdGlvbnMgdGhhdCBoYXZlIG5vdCBiZWVuIHNjaGVkdWxlZCB5ZXQ6CisgICAg
ICAgIC8vIFRyYW5zYWN0aW9uIHBoYXNlIDEgY2xlYW51cC4gU2VlIGNvbW1lbnQgb24gIldoYXQg
aGFwcGVucyBpZiBhCisgICAgICAgIC8vIHRyYW5zYWN0aW9uIGlzIGludGVycnVwdGVkPyIgYXQg
dGhlIHRvcCBvZiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQuY3BwLgorICAgICAgICBSZWZQdHI8U1FM
VHJhbnNhY3Rpb25CYWNrZW5kPiB0cmFuc2FjdGlvbjsKKyAgICAgICAgd2hpbGUgKCFtX3RyYW5z
YWN0aW9uUXVldWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICB0cmFuc2FjdGlvbiA9IG1fdHJh
bnNhY3Rpb25RdWV1ZS50YWtlRmlyc3QoKTsKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLT5ub3Rp
ZnlEYXRhYmFzZVRocmVhZElzU2h1dHRpbmdEb3duKCk7CisgICAgICAgIH0KKworICAgICAgICBt
X2lzVHJhbnNhY3Rpb25RdWV1ZUVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgbV90cmFuc2FjdGlv
bkluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICAgICAgbV90cmFuc2FjdGlvblF1ZXVlLmNsZWFyKCk7
CisgICAgfQorCisgICAgY2xvc2VEYXRhYmFzZSgpOworCisgICAgLy8gTXVzdCByZWYoKSBiZWZv
cmUgY2FsbGluZyBkYXRhYmFzZVRocmVhZCgpLT5yZWNvcmREYXRhYmFzZUNsb3NlZCgpLgorICAg
IFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRBc3luYz4gcHJvdGVjdCA9IHRoaXM7CisgICAgZGF0YWJh
c2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnJlY29yZERhdGFiYXNlQ2xvc2VkKHRoaXMp
OworICAgIGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT51bnNjaGVkdWxlRGF0
YWJhc2VUYXNrcyh0aGlzKTsKK30KKwogUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkJhY2tlbmQ+
IERhdGFiYXNlQmFja2VuZEFzeW5jOjpydW5UcmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5z
YWN0aW9uPiB0cmFuc2FjdGlvbiwKICAgICBib29sIHJlYWRPbmx5LCBjb25zdCBDaGFuZ2VWZXJz
aW9uRGF0YSogZGF0YSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VCYWNrZW5kQXN5bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZEFzeW5jLmgJKHJldmlzaW9uIDE0MzA5
NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5k
QXN5bmMuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQCBwdWJsaWM6CiAgICAgRGF0
YWJhc2VCYWNrZW5kQXN5bmMoUGFzc1JlZlB0cjxEYXRhYmFzZUJhY2tlbmRDb250ZXh0PiwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3Ry
aW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKIAogICAgIHZp
cnR1YWwgYm9vbCBvcGVuQW5kVmVyaWZ5VmVyc2lvbihib29sIHNldFZlcnNpb25Jbk5ld0RhdGFi
YXNlLCBEYXRhYmFzZUVycm9yJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOworICAgIHZvaWQgY2xv
c2UoKTsKIAogICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25CYWNrZW5kPiBydW5UcmFuc2Fj
dGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiwgYm9vbCByZWFkT25seSwgY29uc3QgQ2hh
bmdlVmVyc2lvbkRhdGEqKTsKICAgICB2b2lkIHNjaGVkdWxlVHJhbnNhY3Rpb25TdGVwKFNRTFRy
YW5zYWN0aW9uQmFja2VuZCopOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZVRhc2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUYXNrLmNwcAkocmV2aXNpb24gMTQzMDk1KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRhc2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTAsMTIgKzE1MCwyOCBAQCBjb25zdCBjaGFyKiBEYXRhYmFzZUJhY2tlbmRB
c3luYzo6RGF0YWJhCiBEYXRhYmFzZUJhY2tlbmRBc3luYzo6RGF0YWJhc2VUcmFuc2FjdGlvblRh
c2s6OkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNrKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25CYWNr
ZW5kPiB0cmFuc2FjdGlvbikKICAgICA6IERhdGFiYXNlVGFzayhEYXRhYmFzZTo6ZnJvbSh0cmFu
c2FjdGlvbi0+ZGF0YWJhc2UoKSksIDApCiAgICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9u
KQorICAgICwgbV93YXNFeGVjdXRlZChmYWxzZSkKIHsKIH0KIAorRGF0YWJhc2VCYWNrZW5kQXN5
bmM6OkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNrOjp+RGF0YWJhc2VUcmFuc2FjdGlvblRhc2soKQor
eworICAgIC8vIElmIHRoZSB0YXNrIGlzIGJlaW5nIGRlc3RydWN0ZWQgd2l0aG91dCB0aGUgdHJh
bnNhY3Rpb24gZXZlciBiZWluZyBydW4sCisgICAgLy8gdGhlbiB3ZSBtdXN0IGVpdGhlciBoYXZl
IGFuIGVycm9yIG9yIGFuIGludGVycnVwdGlvbi4gR2l2ZSB0aGUKKyAgICAvLyB0cmFuc2FjdGlv
biBhIGNoYW5jZSB0byBjbGVhbiB1cCBzaW5jZSBpdCBtYXkgbm90IGhhdmUgYmVlbiBhYmxlIHRv
CisgICAgLy8gcnVuIHRvIGl0cyBjbGVhbiB1cCBzdGF0ZS4KKworICAgIC8vIFRyYW5zYWN0aW9u
IHBoYXNlIDIgY2xlYW51cC4gU2VlIGNvbW1lbnQgb24gIldoYXQgaGFwcGVucyBpZiBhCisgICAg
Ly8gdHJhbnNhY3Rpb24gaXMgaW50ZXJydXB0ZWQ/IiBhdCB0aGUgdG9wIG9mIFNRTFRyYW5zYWN0
aW9uQmFja2VuZC5jcHAuCisKKyAgICBpZiAoIW1fd2FzRXhlY3V0ZWQpCisgICAgICAgIG1fdHJh
bnNhY3Rpb24tPm5vdGlmeURhdGFiYXNlVGhyZWFkSXNTaHV0dGluZ0Rvd24oKTsKK30KKwogdm9p
ZCBEYXRhYmFzZUJhY2tlbmRBc3luYzo6RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OmRvUGVyZm9y
bVRhc2soKQogewogICAgIG1fdHJhbnNhY3Rpb24tPnBlcmZvcm1OZXh0U3RlcCgpOworICAgIG1f
d2FzRXhlY3V0ZWQgPSB0cnVlOwogfQogCiAjaWYgIUxPR19ESVNBQkxFRApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRhc2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGFzay5oCShyZXZp
c2lvbiAxNDMwOTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNiArMTM3LDggQEAgcHJpdmF0ZToKIAog
Y2xhc3MgRGF0YWJhc2VCYWNrZW5kQXN5bmM6OkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNrIDogcHVi
bGljIERhdGFiYXNlVGFzayB7CiBwdWJsaWM6CisgICAgdmlydHVhbCB+RGF0YWJhc2VUcmFuc2Fj
dGlvblRhc2soKTsKKwogICAgIC8vIFRyYW5zYWN0aW9uIHRhc2sgaXMgbmV2ZXIgc3luY2hyb25v
dXMsIHNvIG5vICdzeW5jaHJvbml6ZXInIHBhcmFtZXRlci4KICAgICBzdGF0aWMgUGFzc093blB0
cjxEYXRhYmFzZVRyYW5zYWN0aW9uVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b25CYWNrZW5kPiB0cmFuc2FjdGlvbikKICAgICB7CkBAIC0xNTQsNiArMTU2LDcgQEAgcHJpdmF0
ZToKICNlbmRpZgogCiAgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2Fj
dGlvbjsKKyAgICBib29sIG1fd2FzRXhlY3V0ZWQ7CiB9OwogCiBjbGFzcyBEYXRhYmFzZUJhY2tl
bmRBc3luYzo6RGF0YWJhc2VUYWJsZU5hbWVzVGFzayA6IHB1YmxpYyBEYXRhYmFzZVRhc2sgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZVRocmVhZC5jcHAJKHJldmlzaW9uIDE0MzA5NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xMjYsNyArMTI2LDcgQEAgdm9pZCBEYXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQo
KQogICAgICAgICBvcGVuU2V0Q29weS5zd2FwKG1fb3BlbkRhdGFiYXNlU2V0KTsKICAgICAgICAg
RGF0YWJhc2VTZXQ6Oml0ZXJhdG9yIGVuZCA9IG9wZW5TZXRDb3B5LmVuZCgpOwogICAgICAgICBm
b3IgKERhdGFiYXNlU2V0OjppdGVyYXRvciBpdCA9IG9wZW5TZXRDb3B5LmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgICAgIERhdGFiYXNlOjpmcm9tKCgqaXQpLmdldCgpKS0+Y2xv
c2UoKTsKKyAgICAgICAgICAgICgqaXQpLmdldCgpLT5jbG9zZSgpOwogICAgIH0KIAogICAgIC8v
IERldGFjaCB0aGUgdGhyZWFkIHNvIGl0cyByZXNvdXJjZXMgYXJlIG5vIGxvbmdlciBvZiBhbnkg
Y29uY2VybiB0byBhbnlvbmUgZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9TUUxUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmNwcAkocmV2
aXNpb24gMTQzMDk1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxU
cmFuc2FjdGlvbkJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODgsMTUgKzI4OCw1OCBA
QAogLy8gICAgIFdoYXQgaGFwcGVucyBpZiBhIHRyYW5zYWN0aW9uIGlzIGludGVycnVwdGVkPwog
Ly8gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyAg
ICAgSWYgdGhlIHRyYW5zYWN0aW9uIGlzIGludGVycnVwdGVkIGhhbGYgd2F5LCBpdCB3b24ndCBn
ZXQgdG8gcnVuIHRvIHN0YXRlCi0vLyAgICAgQ2xlYW51cEFuZFRlcm1pbmF0ZSwgYW5kIGhlbmNl
LCB3b3VsZCBub3QgaGF2ZSBjYWxsZWQgZG9DbGVhbnVwKCkuIGRvQ2xlYW51cCgpIGlzCi0vLyAg
ICAgd2hlcmUgd2UgbnVsbGlmeSBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6Om1fZnJvbnRlbmQgdG8g
YnJlYWsgdGhlIHJlZmVyZW5jZSBjeWNsZQotLy8gICAgIGJldHdlZW4gdGhlIGZyb250ZW5kIGFu
ZCBiYWNrZW5kLiBIZW5jZSwgdGhhdCB0cmFuc2FjdGlvbiB3aWxsIG5ldmVyIGdldCBjbGVhbmVk
Ci0vLyAgICAgdXAsIHVubGVzcyAuLi4KLS8vCi0vLyAgICAgLi4uIHVubGVzcyB3ZSBoYXZlIGEg
Y2xlYW51cCBtZWNoYW5pc20gZm9yIGludGVycnVwdGlvbnMuIFRoYXQgaXMsIGR1cmluZyB0aGUK
LS8vICAgICBzaHV0ZG93biBvZiB0aGUgRGF0YWJhc2VUaHJlYWQsIHRoZSBTUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yIHdpbGwgZGlzY292ZXIgdGhpcwotLy8gICAgIGludGVycnVwdGVkIHRyYW5z
YWN0aW9uIGFuZCBpbnZva2UgaXRzIG5vdGlmeURhdGFiYXNlVGhyZWFkSXNTaHV0dGluZ0Rvd24o
KSwKLS8vICAgICB3aGljaCBpbiB0dXJuIHdpbGwgY2FsbCBkb0NsZWFudXAoKS4gV2l0aCB0aGF0
LCBhbGwgaXMgd2VsbCBhZ2Fpbi4KKy8vICAgICBDbGVhbnVwQW5kVGVybWluYXRlLCBhbmQgaGVu
Y2UsIHdvdWxkIG5vdCBoYXZlIGNhbGxlZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQncworLy8gICAg
IGRvQ2xlYW51cCgpLiBkb0NsZWFudXAoKSBpcyB3aGVyZSB3ZSBudWxsaWZ5IFNRTFRyYW5zYWN0
aW9uQmFja2VuZDo6bV9mcm9udGVuZAorLy8gICAgIHRvIGJyZWFrIHRoZSByZWZlcmVuY2UgY3lj
bGUgYmV0d2VlbiB0aGUgZnJvbnRlbmQgYW5kIGJhY2tlbmQuIEhlbmNlLCB3ZSBuZWVkCisvLyAg
ICAgdG8gY2xlYW51cCB0aGUgdHJhbnNhY3Rpb24gYnkgb3RoZXIgbWVhbnMuCisvLworLy8gICAg
IE5vdGU6IGNhbGxpbmcgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjpub3RpZnlEYXRhYmFzZVRocmVh
ZElzU2h1dHRpbmdEb3duKCkKKy8vICAgICBpcyBlZmZlY3RpdmVseSB0aGUgc2FtZSBhcyBjYWxs
aW5nIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZG9DbGVhbigpLgorLy8KKy8vICAgICBJbiB0ZXJt
cyBvZiB3aG8gbmVlZHMgdG8gY2FsbCBkb0NsZWFudXAoKSwgdGhlcmUgYXJlIDUgcGhhc2VzIGlu
IHRoZQorLy8gICAgIFNRTFRyYW5zYWN0aW9uQmFja2VuZCBsaWZlLWN5Y2xlLiBUaGVzZSBhcmUg
dGhlIHBoYXNlcyBhbmQgaG93IHRoZSBjbGVhbgorLy8gICAgIHVwIGlzIGRvbmU6CisvLworLy8g
ICAgIFBoYXNlIDEuIEFmdGVyIEJpcnRoLCBiZWZvcmUgc2NoZWR1bGluZworLy8KKy8vICAgICAt
IFRvIGNsZWFuIHVwLCBEYXRhYmFzZVRocmVhZDo6ZGF0YWJhc2VUaHJlYWQoKSB3aWxsIGNhbGwK
Ky8vICAgICAgIERhdGFiYXNlQmFja2VuZEFzeW5jOjpjbG9zZSgpIGR1cmluZyBpdHMgc2h1dGRv
d24uCisvLyAgICAgLSBEYXRhYmFzZUJhY2tlbmRBc3luYzo6Y2xvc2UoKSB3aWxsIGl0ZXJhdGUK
Ky8vICAgICAgIERhdGFiYXNlQmFja2VuZEFzeW5jOjptX3RyYW5zYWN0aW9uUXVldWUgYW5kIGNh
bGwKKy8vICAgICAgIG5vdGlmeURhdGFiYXNlVGhyZWFkSXNTaHV0dGluZ0Rvd24oKSBvbiBlYWNo
IHRyYW5zYWN0aW9uIHRoZXJlLgorLy8gICAgICAgIAorLy8gICAgIFBoYXNlIDIuIEFmdGVyIHNj
aGVkdWxpbmcsIGJlZm9yZSBzdGF0ZSBBY3F1aXJlTG9jaworLy8KKy8vICAgICAtIElmIHRoZSBp
bnRlcnJ1cHRpb24gb2NjdXJlcyBiZWZvcmUgdGhlIERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrIGlz
CisvLyAgICAgICBzY2hlZHVsZWQgaW4gRGF0YWJhc2VUaHJlYWQ6Om1fcXVldWUgYnV0IGhhc24n
dCBnb3R0ZW4gdG8gZXhlY3V0ZQorLy8gICAgICAgKGkuZS4gRGF0YWJhc2VUcmFuc2FjdGlvblRh
c2s6OnBlcmZvcm1UYXNrKCkgaGFzIG5vdCBiZWVuIGNhbGxlZCksCisvLyAgICAgICB0aGVuIHRo
ZSBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayBtYXkgZ2V0IGRlc3RydWN0ZWQgYmVmb3JlIGl0IGV2
ZXIKKy8vICAgICAgIGdldHMgdG8gZXhlY3V0ZS4KKy8vICAgICAtIFRvIGNsZWFuIHVwLCB0aGUg
ZGVzdHJ1Y3RvciB3aWxsIGNoZWNrIGlmIHRoZSB0YXNrJ3MgbV93YXNFeGVjdXRlZCBpcworLy8g
ICAgICAgc2V0LiBJZiBub3QsIGl0IHdpbGwgY2FsbCBub3RpZnlEYXRhYmFzZVRocmVhZElzU2h1
dHRpbmdEb3duKCkgb24KKy8vICAgICAgIHRoZSB0YXNrJ3MgdHJhbnNhY3Rpb24uCisvLworLy8g
ICAgIFBoYXNlIDMuIEFmdGVyIHN0YXRlIEFjcXVpcmVMb2NrLCBiZWZvcmUgImxvY2tBY3F1aXJl
ZCIKKy8vCisvLyAgICAgLSBJbiB0aGlzIHBoYXNlLCB0aGUgdHJhbnNhY3Rpb24gd291bGQgaGF2
ZSBiZWVuIGFkZGVkIHRvIHRoZQorLy8gICAgICAgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcidz
IENvb3JkaW5hdGlvbkluZm8ncyBwZW5kaW5nVHJhbnNhY3Rpb25zLgorLy8gICAgIC0gVG8gY2xl
YW4gdXAsIGR1cmluZyBzaHV0ZG93biwgRGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhyZWFkKCkg
Y2FsbHMKKy8vICAgICAgIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnNodXRkb3duKCksIHdo
aWNoIGNhbGxzCisvLyAgICAgICBub3RpZnlEYXRhYmFzZVRocmVhZElzU2h1dHRpbmdEb3duKCku
CisvLworLy8gICAgIFBoYXNlIDQ6IEFmdGVyICJsb2NrQWNxdWlyZWQiLCBiZWZvcmUgc3RhdGUg
Q2xlYW51cEFuZFRlcm1pbmF0ZQorLy8KKy8vICAgICAtIEluIHRoaXMgcGhhc2UsIHRoZSB0cmFu
c2FjdGlvbiB3b3VsZCBoYXZlIGJlZW4gYWRkZWQgZWl0aGVyIHRvIHRoZQorLy8gICAgICAgU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvcidzIENvb3JkaW5hdGlvbkluZm8ncyBhY3RpdmVXcml0ZVRy
YW5zYWN0aW9uCisvLyAgICAgICBvciBhY3RpdmVSZWFkVHJhbnNhY3Rpb25zLgorLy8gICAgIC0g
VG8gY2xlYW4gdXAsIGR1cmluZyBzaHV0ZG93biwgRGF0YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhy
ZWFkKCkgY2FsbHMKKy8vICAgICAgIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnNodXRkb3du
KCksIHdoaWNoIGNhbGxzCisvLyAgICAgICBub3RpZnlEYXRhYmFzZVRocmVhZElzU2h1dHRpbmdE
b3duKCkuCisvLworLy8gICAgIFBoYXNlIDU6IEFmdGVyIHN0YXRlIENsZWFudXBBbmRUZXJtaW5h
dGUKKy8vCisvLyAgICAgLSBUaGlzIGlzIGhvdyBhIHRyYW5zYWN0aW9uIGVuZHMgbm9ybWFsbHku
CisvLyAgICAgLSBzdGF0ZSBDbGVhbnVwQW5kVGVybWluYXRlIGNhbGxzIGRvQ2xlYW51cCgpLgog
CiAKIC8vIFRoZXJlJ3Mgbm8gd2F5IG9mIGtub3dpbmcgZXhhY3RseSBob3cgbXVjaCBtb3JlIHNw
YWNlIHdpbGwgYmUgcmVxdWlyZWQgd2hlbiBhIHN0YXRlbWVudCBoaXRzIHRoZSBxdW90YSBsaW1p
dC4KQEAgLTMzOCw2ICszODEsMTEgQEAgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOjp+U1FMVHJhbnNh
Y3Rpb25CYQogCiB2b2lkIFNRTFRyYW5zYWN0aW9uQmFja2VuZDo6ZG9DbGVhbnVwKCkKIHsKKyAg
ICAvLyBOb3RlOiBpZiBkb0NsZWFudXAoKSBoYXMgYWxyZWFkeSBiZWVuIGludm9rZWQsIHRoZW4g
bV9mcm9udGVuZCB3b3VsZCBoYXZlCisgICAgLy8gYmVlbiBudWxsaWZpZWQuCisgICAgaWYgKCFt
X2Zyb250ZW5kKQorICAgICAgICByZXR1cm47CisKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgp
ID09IGRhdGFiYXNlKCktPmRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgpLT5nZXRU
aHJlYWRJRCgpKTsKIAogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3N0YXRlbWVudE11dGV4KTsK
QEAgLTQ4NCwxMSArNTMyLDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkJhY2tlbmQ6Om5vdGlmeURh
dGFiYQogICAgIC8vIERCIHRocmVhZC4gQW1vbmdzdCBvdGhlciB3b3JrLCBkb0NsZWFudXAoKSB3
aWxsIGNsZWFyIG1fc3FsaXRlVHJhbnNhY3Rpb24KICAgICAvLyB3aGljaCBpbnZva2VzIFNRTGl0
ZVRyYW5zYWN0aW9uJ3MgZGVzdHJ1Y3Rvciwgd2hpY2ggd2lsbCBkbyB0aGUgcm9sbCBiYWNrCiAg
ICAgLy8gaWYgbmVjZXNzYXJ5LgotCi0gICAgLy8gTm90ZTogaWYgZG9DbGVhbnVwKCkgaGFzIGFs
cmVhZHkgYmVlbiBpbnZva2VkLCB0aGVuIG1fZnJvbnRlbmQgd291bGQgaGF2ZQotICAgIC8vIGJl
ZW4gbnVsbGlmaWVkLgotICAgIGlmIChtX2Zyb250ZW5kKQotICAgICAgICBkb0NsZWFudXAoKTsK
KyAgICBkb0NsZWFudXAoKTsKIH0KIAogU1FMVHJhbnNhY3Rpb25TdGF0ZSBTUUxUcmFuc2FjdGlv
bkJhY2tlbmQ6OmFjcXVpcmVMb2NrKCkKQEAgLTcyMiw2ICs3NjYsNyBAQCBTUUxUcmFuc2FjdGlv
blN0YXRlIFNRTFRyYW5zYWN0aW9uQmFja2VuCiAgICAgTE9HKFN0b3JhZ2VBUEksICJUcmFuc2Fj
dGlvbiAlcCBpcyBjb21wbGV0ZVxuIiwgdGhpcyk7CiAgICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5z
cWxpdGVEYXRhYmFzZSgpLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKIAorICAgIC8vIFBoYXNl
IDUgY2xlYW51cC4gU2VlIGNvbW1lbnQgb24gdGhlIFNRTFRyYW5zYWN0aW9uIGxpZmUtY3ljbGUg
YWJvdmUuCiAgICAgZG9DbGVhbnVwKCk7CiAgICAgbV9kYXRhYmFzZS0+aW5Qcm9ncmVzc1RyYW5z
YWN0aW9uQ29tcGxldGVkKCk7CiAgICAgcmV0dXJuIFNRTFRyYW5zYWN0aW9uU3RhdGU6OkVuZDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25D
b29yZGluYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMTQzMDk1KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsMTEgQEAgc3RhdGljIFN0cmlu
ZyBnZXREYXRhYmFzZUlkZW50aWZpZXIoU1FMVAogICAgIHJldHVybiBkYXRhYmFzZS0+c3RyaW5n
SWRlbnRpZmllcigpOwogfQogCitTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpTUUxUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yKCkKKyAgICA6IG1faXNTaHV0dGluZ0Rvd24oZmFsc2UpCit7Cit9CisK
IHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cHJvY2Vzc1BlbmRpbmdUcmFuc2FjdGlv
bnMoQ29vcmRpbmF0aW9uSW5mbyYgaW5mbykKIHsKICAgICBpZiAoaW5mby5hY3RpdmVXcml0ZVRy
YW5zYWN0aW9uIHx8IGluZm8ucGVuZGluZ1RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpCkBAIC03MSw2
ICs3Niw4IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cHJvY2Vzc1AKIAogdm9p
ZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjphY3F1aXJlTG9jayhTUUxUcmFuc2FjdGlvbkJh
Y2tlbmQqIHRyYW5zYWN0aW9uKQogeworICAgIEFTU0VSVCghbV9pc1NodXR0aW5nRG93bik7CisK
ICAgICBTdHJpbmcgZGJJZGVudGlmaWVyID0gZ2V0RGF0YWJhc2VJZGVudGlmaWVyKHRyYW5zYWN0
aW9uKTsKIAogICAgIENvb3JkaW5hdGlvbkluZm9NYXA6Oml0ZXJhdG9yIGNvb3JkaW5hdGlvbklu
Zm9JdGVyYXRvciA9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5maW5kKGRiSWRlbnRpZmllcik7CkBA
IC04Niw3ICs5Myw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6YWNxdWlyZUwK
IAogdm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpyZWxlYXNlTG9jayhTUUxUcmFuc2Fj
dGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uKQogewotICAgIGlmIChtX2Nvb3JkaW5hdGlvbkluZm9N
YXAuaXNFbXB0eSgpKQorICAgIGlmIChtX2lzU2h1dHRpbmdEb3duKQogICAgICAgICByZXR1cm47
CiAKICAgICBTdHJpbmcgZGJJZGVudGlmaWVyID0gZ2V0RGF0YWJhc2VJZGVudGlmaWVyKHRyYW5z
YWN0aW9uKTsKQEAgLTEwOCwxMCArMTE1LDE4IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGlu
YXRvcjo6cmVsZWFzZUwKIAogdm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpzaHV0ZG93
bigpCiB7CisgICAgLy8gUHJldmVudCByZWxlYXNlTG9jaygpIGZyb20gYWNjZXNzaW5nIC8gY2hh
bmdpbmcgdGhlIGNvb3JkaW5hdGlvbkluZm8KKyAgICAvLyB3aGlsZSB3ZSdyZSBzaHV0dGluZyBk
b3duLgorICAgIG1faXNTaHV0dGluZ0Rvd24gPSB0cnVlOworCiAgICAgLy8gTm90aWZ5IGFsbCB0
cmFuc2FjdGlvbnMgaW4gcHJvZ3Jlc3MgdGhhdCB0aGUgZGF0YWJhc2UgdGhyZWFkIGlzIHNodXR0
aW5nIGRvd24KICAgICBmb3IgKENvb3JkaW5hdGlvbkluZm9NYXA6Oml0ZXJhdG9yIGNvb3JkaW5h
dGlvbkluZm9JdGVyYXRvciA9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5iZWdpbigpOwogICAgICAg
ICAgY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yICE9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5lbmQo
KTsgKytjb29yZGluYXRpb25JbmZvSXRlcmF0b3IpIHsKICAgICAgICAgQ29vcmRpbmF0aW9uSW5m
byYgaW5mbyA9IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvci0+dmFsdWU7CisKKyAgICAgICAgLy8g
Q2xlYW4gdXAgdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSByZWFjaGVkICJsb2NrQWNxdWlyZWQiOgor
ICAgICAgICAvLyBUcmFuc2FjdGlvbiBwaGFzZSA0IGNsZWFudXAuIFNlZSBjb21tZW50IG9uICJX
aGF0IGhhcHBlbnMgaWYgYQorICAgICAgICAvLyB0cmFuc2FjdGlvbiBpcyBpbnRlcnJ1cHRlZD8i
IGF0IHRoZSB0b3Agb2YgU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmNwcC4KICAgICAgICAgaWYgKGlu
Zm8uYWN0aXZlV3JpdGVUcmFuc2FjdGlvbikKICAgICAgICAgICAgIGluZm8uYWN0aXZlV3JpdGVU
cmFuc2FjdGlvbi0+bm90aWZ5RGF0YWJhc2VUaHJlYWRJc1NodXR0aW5nRG93bigpOwogICAgICAg
ICBmb3IgKEhhc2hTZXQ8UmVmUHRyPFNRTFRyYW5zYWN0aW9uQmFja2VuZD4gPjo6aXRlcmF0b3Ig
YWN0aXZlUmVhZFRyYW5zYWN0aW9uc0l0ZXJhdG9yID0KQEAgLTEyMCw2ICsxMzUsMTQgQEAgdm9p
ZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpzaHV0ZG93bgogICAgICAgICAgICAgICsrYWN0
aXZlUmVhZFRyYW5zYWN0aW9uc0l0ZXJhdG9yKSB7CiAgICAgICAgICAgICAoKmFjdGl2ZVJlYWRU
cmFuc2FjdGlvbnNJdGVyYXRvciktPm5vdGlmeURhdGFiYXNlVGhyZWFkSXNTaHV0dGluZ0Rvd24o
KTsKICAgICAgICAgfQorCisgICAgICAgIC8vIENsZWFuIHVwIHRyYW5zYWN0aW9ucyB0aGF0IGhh
dmUgTk9UIHJlYWNoZWQgImxvY2tBY3F1aXJlZCI6CisgICAgICAgIC8vIFRyYW5zYWN0aW9uIHBo
YXNlIDMgY2xlYW51cC4gU2VlIGNvbW1lbnQgb24gIldoYXQgaGFwcGVucyBpZiBhCisgICAgICAg
IC8vIHRyYW5zYWN0aW9uIGlzIGludGVycnVwdGVkPyIgYXQgdGhlIHRvcCBvZiBTUUxUcmFuc2Fj
dGlvbkJhY2tlbmQuY3BwLgorICAgICAgICB3aGlsZSAoIWluZm8ucGVuZGluZ1RyYW5zYWN0aW9u
cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkJhY2tlbmQ+
IHRyYW5zYWN0aW9uID0gaW5mby5wZW5kaW5nVHJhbnNhY3Rpb25zLmZpcnN0KCk7CisgICAgICAg
ICAgICB0cmFuc2FjdGlvbi0+bm90aWZ5RGF0YWJhc2VUaHJlYWRJc1NodXR0aW5nRG93bigpOwor
ICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gQ2xlYW4gdXAgYWxsIHBlbmRpbmcgdHJhbnNhY3Rp
b25zIGZvciBhbGwgZGF0YWJhc2VzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAko
cmV2aXNpb24gMTQzMDk1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9T
UUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcg
QEAgY2xhc3MgU1FMVHJhbnNhY3Rpb25CYWNrZW5kOwogY2xhc3MgU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU1FMVHJhbnNhY3Rpb25Db29yZGlu
YXRvcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFNRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IoKSB7IH0KKyAgICBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCk7CiAg
ICAgdm9pZCBhY3F1aXJlTG9jayhTUUxUcmFuc2FjdGlvbkJhY2tlbmQqKTsKICAgICB2b2lkIHJl
bGVhc2VMb2NrKFNRTFRyYW5zYWN0aW9uQmFja2VuZCopOwogICAgIHZvaWQgc2h1dGRvd24oKTsK
QEAgLTYxLDYgKzYxLDcgQEAgcHJpdmF0ZToKICAgICAvLyBNYXBzIGRhdGFiYXNlIG5hbWVzIHRv
IGluZm9ybWF0aW9uIGFib3V0IHBlbmRpbmcgdHJhbnNhY3Rpb25zCiAgICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgQ29vcmRpbmF0aW9uSW5mbz4gQ29vcmRpbmF0aW9uSW5mb01hcDsKICAgICBD
b29yZGluYXRpb25JbmZvTWFwIG1fY29vcmRpbmF0aW9uSW5mb01hcDsKKyAgICBib29sIG1faXNT
aHV0dGluZ0Rvd247CiAKICAgICB2b2lkIHByb2Nlc3NQZW5kaW5nVHJhbnNhY3Rpb25zKENvb3Jk
aW5hdGlvbkluZm8mKTsKIH07Cg==
</data>
<flag name="review"
          id="208971"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>