<?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>110805</bug_id>
          
          <creation_ts>2013-02-25 14:36:56 -0800</creation_ts>
          <short_desc>webdatabase: Need more robust WebSQL disk usage computation.</short_desc>
          <delta_ts>2013-02-25 21:11:53 -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>
          
          <blocked>110600</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>beidson</cc>
    
    <cc>buildbot</cc>
    
    <cc>ggaren</cc>
    
    <cc>michaeln</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>841294</commentid>
    <comment_count>0</comment_count>
      <attachid>190129</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-25 14:36:56 -0800</bug_when>
    <thetext>Created attachment 190129
disk stat speed test

OriginUsageRecord::diskUsage() is used to provide the total disk usage size of all databases in a specified origin.  The current implementation relies on a cache of database sizes that the OriginUsageRecord tracks.  The OriginUsageRecord is notified whenever any database activity occurs (within the same process) that may change the size of the database.  OriginUsageRecord::diskUsage() then checks which databases have changed, and updates their sizes by fetching the actual size from the file system.  Thereafter, OriginUsageRecord::diskUsage() sums up the sizes of the databases from the specified origin and return the sum as its result.

This strategy works as long as there will only be one process that will be creating and tracking databases.  In a multi-process environment, the in-process cached sizes can be easy out-dated by other processes that may be creating or adding to databases in the same origin.  This is because the activity of other processes will not trigger an update of the cached sizes in this process.

One solution to this issue is simply to do without the cached sizes and go fetch the actual size from the file system every time.  Intuitively, the file sizes should be cached in data structures in the OS&apos; memory.  Hence, the act of fetching the file size should not incur that much overhead.  Here are some test results based on running the following test:

The test
=====
1. Create 10 databases (differently named, of course) from the same origin, and initialize them with some minimal data.
2. Measure the time it takes to do 1000 repetitions of adding a small record to only 1 of those databases.
Note: each measured unit of time is taken from a transaction cycle from just before the disk usage is computed (which slightly precedes the start of the transaction), and ends right after the transaction is committed.  

The intent here is that the disk usage should be computed by summing up the sizes of the 10 databases.  Meanwhile, oily 1 of those 10 databases is being mutated with a small write.  For the scenario where we used cached sizes, we should only be fetching the size of 1 database from the file system, while the other 9 (being unchanged) comes from the cache.  For the scenario where we fetch the sizes from the file system, we will be doing 10 file size fetches per iteration.

The results
=======
These measurements are done on a MacBook Pro (2.4 GHz core i7) with a SSD.  Times are in microseconds.

                                        Run1         Run2        Run3       |    Average
                                        ===         ===         ===        |   =====
Baseline (using a cache):   1491.97   1559.09   1483.12   |   1511.39
No cache:                         1688.97   1828.95   1656.79   |   1724.90

The difference is: the no cache approach is 1.14x slower (a difference of 214 microseconds).  That is for 10 vs 1 database size fetches.  The difference per additional database (when there is more than 1) is 1/9th of that i.e. 0.016 slower or 23 microseconds.

These results show that the cost of not using a cache is insignificant, while we get the benefit of having a more reliable read on the disk usage of databases for a given origin.

The test file disk-stat-speed-test.html is attached.  To run the test,
1. Do a debug build of webkit and add instrumentation to the transaction code to measure the time from before the call to DatabaseTracker::getMaxSizeForDatabase() till after m_sqliteTransaction-&gt;commit().  Print the delta time (and other stats: total, average) after measuring end time.
2. Delete all databases from origin localhost.
3. Serve up the page on localhost.
4. Run the debug version of webkit and load the test page.
5. When the test starts, it will present you with a &quot;Start&quot; button in an alert box.  Click on start and pay attention to your console to see the time values.  When the test ends, you will get an alert box with a &quot;End&quot; button.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841376</commentid>
    <comment_count>1</comment_count>
      <attachid>190146</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-25 16:05:29 -0800</bug_when>
    <thetext>Created attachment 190146
the fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841377</commentid>
    <comment_count>2</comment_count>
      <attachid>190147</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-25 16:07:06 -0800</bug_when>
    <thetext>Created attachment 190147
For consuming storage space to test the quota.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841387</commentid>
    <comment_count>3</comment_count>
      <attachid>190146</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-25 16:14:10 -0800</bug_when>
    <thetext>Comment on attachment 190146
the fix.

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        cached file size values.

Maybe I should add a comment to say that this is #ifdef&apos;ed out for chromium because listDirectory() if not implemented in FileSystemChromium.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841405</commentid>
    <comment_count>4</comment_count>
      <attachid>190146</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2013-02-25 16:27:56 -0800</bug_when>
    <thetext>Comment on attachment 190146
the fix.

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

&gt; Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:297
&gt; +#if !PLATFORM(CHROMIUM)

This file is not compiled in chromium so there shouldn&apos;t be a need for this guard.

&gt; Source/WebCore/Modules/webdatabase/OriginUsageRecord.cpp:39
&gt; +#if PLATFORM(CHROMIUM)

Ditto, not compiled in chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841410</commentid>
    <comment_count>5</comment_count>
      <attachid>190146</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-25 16:31:55 -0800</bug_when>
    <thetext>Comment on attachment 190146
the fix.

Attachment 190146 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16752526</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841412</commentid>
    <comment_count>6</comment_count>
      <attachid>190146</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-25 16:34:22 -0800</bug_when>
    <thetext>Comment on attachment 190146
the fix.

I&apos;ll redo the patch since chromium doesn&apos;t need the deprecated code, and to fix the release build failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841451</commentid>
    <comment_count>7</comment_count>
      <attachid>190146</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-02-25 17:25:59 -0800</bug_when>
    <thetext>Comment on attachment 190146
the fix.

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

Would be nice to get rid of all the quota cache code, since it&apos;s defunct now.

&gt; Source/WebCore/ChangeLog:11
&gt; +        The performance difference for this changes is a 1.6% degradation
&gt; +        per additional database whose size needs to be fetched. 

You should clarify that this is a worst-case performance difference. Your benchmark measured stat overhead vs ~16 bytes of storage. Most transactions do more work than that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841557</commentid>
    <comment_count>8</comment_count>
      <attachid>190190</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-25 20:02:37 -0800</bug_when>
    <thetext>Created attachment 190190
updated fix patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841561</commentid>
    <comment_count>9</comment_count>
      <attachid>190190</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-02-25 20:09:58 -0800</bug_when>
    <thetext>Comment on attachment 190190
updated fix patch.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841595</commentid>
    <comment_count>10</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-25 21:11:53 -0800</bug_when>
    <thetext>Thanks for the review.  Landed in r144006: &lt;http://trac.webkit.org/changeset/144006&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>190129</attachid>
            <date>2013-02-25 14:36:56 -0800</date>
            <delta_ts>2013-02-25 14:36:56 -0800</delta_ts>
            <desc>disk stat speed test</desc>
            <filename>disk-stat-speed-test.html</filename>
            <type>text/html</type>
            <size>5010</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">PGJvZHk+CjxzY3JpcHQ+Ci8vIFRoaXMgdGVzdCBjcmVhdGVzIGEgZGF0YWJhc2Ugd2l0aCBhIHJh
bmRvbSBuYW1lIChzZWUgJ2RiTmFtZScpIGFuZCBhdHRlbXB0cyB0bwovLyBob2cgYXMgbXVjaCBz
dG9yYWdlIHNwYWNlIGFzIHBvc3NpYmxlLiBUbyB0ZXN0IGl0IGluIGEgbXVsdGktcHRvY2VzcyBl
bnZpcm9ubWVudCwKLy8gbG9hZCB0aGUgcGFnZSBpbiBtdWx0aXBsZSBwcm9jZXNzZXMsIGFuZCBt
b25pdG9yIHRoZSBzaXplIG9mIHRoZSBkYXRhYmFzZQovLyBkaXJlY3RvcnkgYW5kIGl0cyBmaWxl
cy4KCi8vIE9wZW4gdGhlIGRhdGFiYXNlOgp2YXIgZGJOYW1lOwp2YXIgZGIgPSBbXTsKdmFyIHJh
bmRMaW1pdCA9IDEwOwoKdmFyIHJhbmQgPSBmdW5jdGlvbihsaW1pdCkgewogICAgcmV0dXJuIE1h
dGgucm91bmQoTWF0aC5yYW5kb20oKSAqIGxpbWl0KTsKfQoKdmFyIGluaXRTdHVmZiA9IGZ1bmN0
aW9uKGRidmFyKSB7CgogICAgdmFyIGluaXRUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgPSBmdW5j
dGlvbihlcnJvcikgewogICAgICAgIGFsZXJ0KCJlcnJvciB3aGlsZSBJTklUIHRhYmxlOiBlcnIg
PSAiICsgZXJyb3IuY29kZSArICIgJyIgKyBlcnJvci5tZXNzYWdlICsgIiciKTsKICAgICAgICBp
c0Fib3J0ZWQgPSB0cnVlOwogICAgfQoKICAgIHZhciBpbml0VHJhbnNhY3Rpb25TdWNjZXNzQ2Fs
bGJhY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICAvLyBhbGVydCgiSU5JVCB0YWJsZSBzdWNjZWVk
ZWQiKTsKICAgICAgICBpZiAoY3VycmVudERiID4gMCkgewogICAgICAgICAgICBjdXJyZW50RGIt
LTsKICAgICAgICAgICAgLy8gYWxlcnQoIiBkYkluaXQgPSAiICsgY3VycmVudERiKTsKICAgICAg
ICAgICAgaW5pdFN0dWZmKGRiW2N1cnJlbnREYl0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgIGFsZXJ0KCJzdGFydCIpOwogICAgICAgICAgICAvLyBhbGVydCgiIG51bVdyaXRlcyA9ICIg
KyBudW1Xcml0ZXMpOwogICAgICAgICAgICAvLyBjb25zb2xlLmxvZygiIG51bVdyaXRlcyA9ICIg
KyBudW1Xcml0ZXMpOwogICAgICAgICAgICBpbnNlcnRTdHVmZihkYlswXSwgbmFtZSwgMSwgMiwg
MywgMTAwMCk7CiAgICAgICAgfQogICAgfQoKICAgIHZhciBpbml0U3RhdGVtZW50U3VjY2Vzc0Nh
bGxiYWNrID0gZnVuY3Rpb24odHJhbnNhY3Rpb24sIHJlc3VsdHMpIHsKICAgICAgICAvLyBhbGVy
dCgiU1VDQ0VTUyBpbiBJTklUIHN0YXRlbWVudCIpOwogICAgfQoKICAgIHZhciBpbml0U3RhdGVt
ZW50RXJyb3JDYWxsYmFjayA9IGZ1bmN0aW9uKHRyYW5zYWN0aW9uLCBlcnJvcikgewogICAgICAg
IC8vYWxlcnQoIk9oIG5vZXMhIFRoZXJlIGhheiBiaW4gYSBkYXRhYmFzZSBlcnJvciBpbiBJTklU
IHN0YXRlbWVudCEgOiBlcnIgPSAiICsgZXJyb3IuY29kZSArICIgJyIgKyBlcnJvci5tZXNzYWdl
ICsgIiciKTsKICAgICAgICBpc0Fib3J0ZWQgPSB0cnVlOwogICAgfQoKICAgIC8vIENyZWF0ZSB0
aGUgdGFibGU6CiAgICBkYnZhci50cmFuc2FjdGlvbigKICAgICAgICBmdW5jdGlvbih0cmFuc2Fj
dGlvbikgewogICAgICAgICAgICB0cmFuc2FjdGlvbi5leGVjdXRlU3FsKCJDUkVBVEUgVEFCTEUg
SUYgTk9UIEVYSVNUUyBzdHVmZiAoIiArCiAgICAgICAgICAgICAgICAiaWQgSU5URUdFUiBOT1Qg
TlVMTCBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULCIgKwogICAgICAgICAgICAgICAgIm5hbWUg
VEVYVCBOT1QgTlVMTCwiICsKICAgICAgICAgICAgICAgICJ4IElOVEVHRVIgTk9UIE5VTEwsIiAr
CiAgICAgICAgICAgICAgICAieSBJTlRFR0VSIE5PVCBOVUxMLCIgKwogICAgICAgICAgICAgICAg
InogSU5URUdFUiBOT1QgTlVMTCwiICsKICAgICAgICAgICAgICAgICJjaGVja3N1bSBJTlRFR0VS
IE5PVCBOVUxMKTsiLAogICAgICAgICAgICAgICAgW10sCiAgICAgICAgICAgICAgICBpbml0U3Rh
dGVtZW50U3VjY2Vzc0NhbGxiYWNrLAogICAgICAgICAgICAgICAgaW5pdFN0YXRlbWVudEVycm9y
Q2FsbGJhY2spOwogICAgICAgIH0sCiAgICAgICAgaW5pdFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
aywKICAgICAgICBpbml0VHJhbnNhY3Rpb25TdWNjZXNzQ2FsbGJhY2sKICAgICk7Cn07CgovLz09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLy8gSU5TRVJUCgp2YXIgY3VycmVudERiOwp2YXIgbnVtV3JpdGVz
ID0gMTAwMDsKCnZhciBpbnNlcnRTdHVmZiA9IGZ1bmN0aW9uKG15ZGIsIG5hbWUsIHgsIHksIHos
IGNoZWNrc3VtKSB7CgogICAgLy8gdmFyIGluc2VydFRyYW5zYWN0aW9uVGltZSA9IDA7CiAgICAv
LyB2YXIgaW5zZXJ0VHJhbnNhY3Rpb25Db3VudCA9IDA7CgogICAgdmFyIGluc2VydFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjayA9IGZ1bmN0aW9uKGVycm9yKSB7CiAgICAgICAgYWxlcnQoImVycm9y
IHdoaWxlIElOU0VSVCByb3c6IGVyciA9ICIgKyBlcnJvci5jb2RlICsgIiAnIiArIGVycm9yLm1l
c3NhZ2UgKyAiJyIpOwogICAgICAgIGlzQWJvcnRlZCA9IHRydWU7CiAgICAgICAgLy8gY29uc29s
ZS5sb2coIiBJTlNFUlQgdHJhbnNhY3Rpb24gZXJyb3I6IHRvdGFsIHRyYW5zYWN0aW9uIHRpbWUg
PSAiICsgaW5zZXJ0VHJhbnNhY3Rpb25UaW1lICsgIiBtcyAvICIgKyBpbnNlcnRUcmFuc2FjdGlv
bkNvdW50ICsgIiA9ICIgKyAoaW5zZXJ0VHJhbnNhY3Rpb25UaW1lL2luc2VydFRyYW5zYWN0aW9u
Q291bnQpKTsKICAgIH0KCiAgICB2YXIgaW5zZXJ0VHJhbnNhY3Rpb25TdWNjZXNzQ2FsbGJhY2sg
PSBmdW5jdGlvbigpIHsKICAgICAgICAvLyBhbGVydCgiSU5TRVJUIHJvdyBzdWNjZWVkZWQ6ICIg
KyBudW1Xcml0ZXMpOwogICAgICAgIGNvbnNvbGUubG9nKCJJTlNFUlQgcm93IHN1Y2NlZWRlZDog
IiArIG51bVdyaXRlcyk7CiAgICAgICAgbnVtV3JpdGVzLS07CiAgICAgICAgaWYgKG51bVdyaXRl
cyA+IDApIHsKICAgICAgICAgICAgLy8gYWxlcnQoIiBudW1Xcml0ZXMgPSAiICsgbnVtV3JpdGVz
KTsKICAgICAgICAgICAgLy8gY29uc29sZS5sb2coIiBudW1Xcml0ZXMgPSAiICsgbnVtV3JpdGVz
KTsKICAgICAgICAgICAgaW5zZXJ0U3R1ZmYoZGJbMF0sIG5hbWUsIDEsIDIsIDMsIDEwMDApOwog
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFsZXJ0KCJFbmQiKTsKICAgICAgICB9CiAgICB9
CgogICAgdmFyIGluc2VydFN0YXRlbWVudFN1Y2Nlc3NDYWxsYmFjayA9IGZ1bmN0aW9uKHRyYW5z
YWN0aW9uLCByZXN1bHRzKSB7CiAgICAgICAgLy8gYWxlcnQoIlNVQ0NFU1MgaW4gSU5TRVJUIHN0
YXRlbWVudCIpOwogICAgfQoKICAgIHZhciBpbnNlcnRTdGF0ZW1lbnRFcnJvckNhbGxiYWNrID0g
ZnVuY3Rpb24odHJhbnNhY3Rpb24sIGVycm9yKSB7CiAgICAgICAgYWxlcnQoIk9oIG5vZXMhIFRo
ZXJlIGhheiBiaW4gYSBkYXRhYmFzZSBlcnJvciBpbiBJTlNFUlQgc3RhdGVtZW50ISA6IGVyciA9
ICIgKyBlcnJvci5jb2RlICsgIiAnIiArIGVycm9yLm1lc3NhZ2UgKyAiJyIpOwogICAgICAgIGlz
QWJvcnRlZCA9IHRydWU7CiAgICAgICAgLy8gY29uc29sZS5sb2coIiBJTlNFUlQgc3RhdGVtZW50
IGVycm9yOiB0b3RhbCB0cmFuc2FjdGlvbiB0aW1lID0gIiArIGluc2VydFRyYW5zYWN0aW9uVGlt
ZSArICIgbXMgLyAiICsgaW5zZXJ0VHJhbnNhY3Rpb25Db3VudCArICIgPSAiICsgKGluc2VydFRy
YW5zYWN0aW9uVGltZS9pbnNlcnRUcmFuc2FjdGlvbkNvdW50KSk7CiAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgfQoKICAgIGRiWzBdLnRyYW5zYWN0aW9uKAogICAgICAgIGZ1bmN0aW9uKHRyYW5z
YWN0aW9uKSB7CiAgICAgICAgICAgIHRyYW5zYWN0aW9uLmV4ZWN1dGVTcWwoKCJJTlNFUlQgSU5U
TyBzdHVmZiAobmFtZSwgeCwgeSwgeiwgY2hlY2tzdW0pIFZBTFVFUyAoPywgPywgPywgPywgPyk7
IiksCiAgICAgICAgICAgICAgICBbbmFtZSwgeCwgeSwgeiwgY2hlY2tzdW1dLAogICAgICAgICAg
ICAgICAgaW5zZXJ0U3RhdGVtZW50U3VjY2Vzc0NhbGxiYWNrLAogICAgICAgICAgICAgICAgaW5z
ZXJ0U3RhdGVtZW50RXJyb3JDYWxsYmFjayk7CiAgICAgICAgfSwKICAgICAgICBpbnNlcnRUcmFu
c2FjdGlvbkVycm9yQ2FsbGJhY2ssCiAgICAgICAgaW5zZXJ0VHJhbnNhY3Rpb25TdWNjZXNzQ2Fs
bGJhY2sKICAgICk7Cn0KCnZhciBzdGFydEluaXQgPSBmdW5jdGlvbigpIHsKICAgIGN1cnJlbnRE
YiA9IDk7CiAgICAvLyBhbGVydCgiIGRiSW5pdCA9ICIgKyBjdXJyZW50RGIpOwogICAgLy8gY29u
c29sZS5sb2coIiBkYkluaXQgPSAiICsgY3VycmVudERiKTsKICAgIGluaXRTdHVmZihkYltjdXJy
ZW50RGJdKTsKfQoKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cgp2YXIgb3BlbmVkRGIgPSAxMDsKdmFy
IGNyZWF0aW9uQ2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKICAgIC8vIGFsZXJ0KCJEYXRhYmFzZSBv
cGVuZWQhICIgKyBvcGVuZWREYik7CiAgICAvLyBjb25zb2xlLmxvZygiRGF0YWJhc2Ugb3BlbmVk
ISAiICsgb3BlbmVkRGIpOwogICAgaWYgKG9wZW5lZERiID4gMCkgewogICAgICAgIG9wZW5lZERi
LS07CiAgICAgICAgZGJOYW1lID0gIndyaXRlIiArIG9wZW5lZERiOwogICAgICAgIGRiW29wZW5l
ZERiXSA9IG9wZW5EYXRhYmFzZShkYk5hbWUsICcxLjAnLCAnV3JpdGUgTWUgUGxlYXNlJywgMzIq
MTAyNCwgY3JlYXRpb25DYWxsYmFjayk7CgogICAgfSBlbHNlIHsKICAgICAgICBzZXRUaW1lb3V0
KCJzdGFydEluaXQoKTsiLCAxMCk7CiAgICB9Cn0KCi8vIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlv
bihlKSB7CgpvcGVuZWREYi0tOwpkYk5hbWUgPSAid3JpdGUiICsgb3BlbmVkRGI7CmRiW29wZW5l
ZERiXSA9IG9wZW5EYXRhYmFzZShkYk5hbWUsICcxLjAnLCAnV3JpdGUgTWUgUGxlYXNlJywgMzIq
MTAyNCwgY3JlYXRpb25DYWxsYmFjayk7CgovLyB9OwoKPC9zY3JpcHQ+CjwvYm9keT4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190146</attachid>
            <date>2013-02-25 16:05:29 -0800</date>
            <delta_ts>2013-02-25 17:25:59 -0800</delta_ts>
            <desc>the fix.</desc>
            <filename>bug-110805.patch</filename>
            <type>text/plain</type>
            <size>5903</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0Mzk3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDEzLTAyLTI1ICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBOZWVkIG1vcmUgcm9idXN0IE9yaWdp
blVzYWdlUmVjb3JkOjpkaXNrVXNhZ2UoKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExMDgwNS4KKworICAgICAgICBDaGFuZ2VkIGRpc2tVc2FnZSgp
IHRvIGNvbXB1dGUgdGhlIGRpc2sgdXNhZ2UgZm9yIGEgc3BlY2lmaWVkIG9yaWdpbgorICAgICAg
ICBieSBmZXRjaGluZyBkYXRhYmFzZSBzaXplcyBmcm9tIHRoZSBmaWxlIHN5c3RlbSBpbnN0ZWFk
IG9mIHVzaW5nCisgICAgICAgIGNhY2hlZCBmaWxlIHNpemUgdmFsdWVzLgorCisgICAgICAgIFRo
ZSBwZXJmb3JtYW5jZSBkaWZmZXJlbmNlIGZvciB0aGlzIGNoYW5nZXMgaXMgYSAxLjYlIGRlZ3Jh
ZGF0aW9uCisgICAgICAgIHBlciBhZGRpdGlvbmFsIGRhdGFiYXNlIHdob3NlIHNpemUgbmVlZHMg
dG8gYmUgZmV0Y2hlZC4gCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTm8gbGF5b3V0IHRlc3QsIGJ1dCB0aGVyZSBpcyBhIHF1b3RhLXRlc3QuaHRtbCBh
dHRhY2hlZCB0byBidWd6aWxsYS4KKyAgICAgICAgVGhlIHRlc3QgaXMgYSB3ZWJwYWdlIHRoYXQg
Y2FuIGJlIGxvYWRlZCBpbnRvIG11bHRpcGxlIHRhYnMgdG8KKyAgICAgICAgY29uc3VtaW5nIHN0
b3JhZ2Ugc3BhY2UuIFdoaWxlIHRoZSB0ZXN0IGlzIHJ1bm5pbmcsIHdlIGNhbiBydW4gYQorICAg
ICAgICAiZHUgLWs7IGR1IC1rICoiIG9uIHRoZSBkYXRhYmFzZSBkaXJlY3RvcnkgdG8gdmVyaWZ5
IHRoYXQgdGhlIHRvdGFsCisgICAgICAgIGRpc2sgdXNhZ2UgZG9lcyBub3QgZmFyIGV4Y2VlZCB0
aGUgYWxsb3dlZCBxdW90YSAoc29tZSBzbWFsbCBlcnJvcgorICAgICAgICBpcyBleHBlY3RlZCku
IFdpdGhvdXQgdGhpcyBjaGFuZ2UsIGVhY2ggZGF0YWJhc2UgZnJvbSBlYWNoIHRhYiBtYXkKKyAg
ICAgICAgZXhjZWVkIHRoZSBxdW90YSBieSB0aGF0IHNhbWUgZXJyb3IuCisKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok9yaWdpblVzYWdlUmVjb3JkOjpPcmlnaW5Vc2FnZVJlY29yZCk6CisgICAgICAgIChXZWJD
b3JlOjpPcmlnaW5Vc2FnZVJlY29yZDo6YWRkRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6
T3JpZ2luVXNhZ2VSZWNvcmQ6OnJlbW92ZURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9y
aWdpblVzYWdlUmVjb3JkOjptYXJrRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6T3JpZ2lu
VXNhZ2VSZWNvcmQ6OmRpc2tVc2FnZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9P
cmlnaW5Vc2FnZVJlY29yZC5oOgorCiAyMDEzLTAyLTI1ICBLZW50YXJvIEhhcmEgIDxoYXJha2Vu
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeCBhZnRlciByMTQz
OTY1LgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRy
YWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VUcmFja2VyLmNwcAkocmV2aXNpb24gMTQzOTc4KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOTQsNiArMjk0LDExIEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6
OmdldE0KICAgICB1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEgPSBxdW90YUZvck9yaWdpbk5vTG9j
ayhvcmlnaW4pOwogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkaXNrVXNhZ2UgPSBvcmlnaW5RdW90
YU1hbmFnZXIoKS5kaXNrVXNhZ2Uob3JpZ2luKTsKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgZGF0
YWJhc2VGaWxlU2l6ZSA9IFNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUoZGF0
YWJhc2UtPmZpbGVOYW1lKCkpOworI2lmICFQTEFURk9STShDSFJPTUlVTSkKKyAgICAvLyBUaGlz
IGFzc2VydGlvbiByZWxpZXMgb24gdGhlIG5vbi1jYWNoZWQgaW1wbGVtZW50YXRpb24gb2YgT3Jp
Z2luVXNhZ2VSZWNvcmQ6OmRpc2tVc2FnZSgpCisgICAgLy8gd2hpY2ggaXMgbm90IGN1cnJlbnRs
eSBpbXBsZW1lbnRlZCBieSB0aGUgY2hyb21pdW0gcG9ydC4KKyAgICBBU1NFUlQoZGF0YWJhc2VG
aWxlU2l6ZSA8PSBkaXNrVXNhZ2UpOworI2VuZGlmCiAKICAgICAvLyBBIHByZXZpb3VzIGVycm9y
IG1heSBoYXZlIGFsbG93ZWQgdGhlIG9yaWdpbiB0byBleGNlZWQgaXRzIHF1b3RhLCBvciBtYXkK
ICAgICAvLyBoYXZlIGFsbG93ZWQgdGhpcyBkYXRhYmFzZSB0byBleGNlZWQgb3VyIGNhY2hlZCBl
c3RpbWF0ZSBvZiB0aGUgb3JpZ2luCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmNwcAkocmV2aXNpb24gMTQz
OTc4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5Vc2FnZVJl
Y29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEyICszMCwxNSBAQAogCiAjaWYgRU5BQkxF
KFNRTF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJTUUxp
dGVGaWxlU3lzdGVtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogT3JpZ2luVXNhZ2VSZWNv
cmQ6Ok9yaWdpblVzYWdlUmVjb3JkKCkKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKICAgICA6IG1f
Y2FjaGVkRGlza1VzYWdlSXNWYWxpZChmYWxzZSkKKyNlbmRpZgogewogfQogCkBAIC00Niw5ICs0
OSwxMSBAQCB2b2lkIE9yaWdpblVzYWdlUmVjb3JkOjphZGREYXRhYmFzZShjb25zCiAgICAgQVNT
RVJUX0FSRyhmdWxsUGF0aCwgZnVsbFBhdGguaW1wbCgpLT5oYXNPbmVSZWYoKSB8fCBmdWxsUGF0
aC5pc0VtcHR5KCkpOwogCiAgICAgbV9kYXRhYmFzZU1hcC5zZXQoaWRlbnRpZmllciwgRGF0YWJh
c2VFbnRyeShmdWxsUGF0aCkpOworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQogICAgIG1fdW5rbm93
blNldC5hZGQoaWRlbnRpZmllcik7CiAKICAgICBtX2NhY2hlZERpc2tVc2FnZUlzVmFsaWQgPSBm
YWxzZTsKKyNlbmRpZgogfQogCiB2b2lkIE9yaWdpblVzYWdlUmVjb3JkOjpyZW1vdmVEYXRhYmFz
ZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIpCkBAIC01Niw4ICs2MSwxMCBAQCB2b2lkIE9yaWdp
blVzYWdlUmVjb3JkOjpyZW1vdmVEYXRhYmFzZShjCiAgICAgQVNTRVJUKG1fZGF0YWJhc2VNYXAu
Y29udGFpbnMoaWRlbnRpZmllcikpOwogCiAgICAgbV9kYXRhYmFzZU1hcC5yZW1vdmUoaWRlbnRp
Zmllcik7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgbV91bmtub3duU2V0LnJlbW92ZShp
ZGVudGlmaWVyKTsKICAgICBtX2NhY2hlZERpc2tVc2FnZUlzVmFsaWQgPSBmYWxzZTsKKyNlbmRp
ZgogfQogCiB2b2lkIE9yaWdpblVzYWdlUmVjb3JkOjptYXJrRGF0YWJhc2UoY29uc3QgU3RyaW5n
JiBpZGVudGlmaWVyKQpAQCAtNjUsMTIgKzcyLDE1IEBAIHZvaWQgT3JpZ2luVXNhZ2VSZWNvcmQ6
Om1hcmtEYXRhYmFzZShjb24KICAgICBBU1NFUlQobV9kYXRhYmFzZU1hcC5jb250YWlucyhpZGVu
dGlmaWVyKSk7CiAgICAgQVNTRVJUX0FSRyhpZGVudGlmaWVyLCBpZGVudGlmaWVyLmltcGwoKS0+
aGFzT25lUmVmKCkgfHwgaWRlbnRpZmllci5pc0VtcHR5KCkpOwogCisjaWYgUExBVEZPUk0oQ0hS
T01JVU0pCiAgICAgbV91bmtub3duU2V0LmFkZChpZGVudGlmaWVyKTsKICAgICBtX2NhY2hlZERp
c2tVc2FnZUlzVmFsaWQgPSBmYWxzZTsKKyNlbmRpZgogfQogCiB1bnNpZ25lZCBsb25nIGxvbmcg
T3JpZ2luVXNhZ2VSZWNvcmQ6OmRpc2tVc2FnZSgpCiB7CisjaWYgUExBVEZPUk0oQ0hST01JVU0p
CiAgICAgLy8gVXNlIHRoZSBsYXN0IGNhY2hlZCB1c2FnZSB2YWx1ZSBpZiB3ZSBoYXZlIGl0Lgog
ICAgIGlmIChtX2NhY2hlZERpc2tVc2FnZUlzVmFsaWQpCiAgICAgICAgIHJldHVybiBtX2NhY2hl
ZERpc2tVc2FnZTsKQEAgLTk3LDYgKzEwNywyMiBAQCB1bnNpZ25lZCBsb25nIGxvbmcgT3JpZ2lu
VXNhZ2VSZWNvcmQ6OmRpCiAKICAgICBtX2NhY2hlZERpc2tVc2FnZUlzVmFsaWQgPSB0cnVlOwog
ICAgIHJldHVybiBtX2NhY2hlZERpc2tVc2FnZTsKKyNlbHNlCisgICAgdW5zaWduZWQgbG9uZyBs
b25nIGRpc2tVc2FnZSA9IDA7CisgICAgSGFzaE1hcDxTdHJpbmcsIERhdGFiYXNlRW50cnk+Ojpp
dGVyYXRvciBpRGF0YWJhc2UgPSBtX2RhdGFiYXNlTWFwLmJlZ2luKCk7CisgICAgaWYgKGlEYXRh
YmFzZSAhPSBtX2RhdGFiYXNlTWFwLmVuZCgpKSB7CisgICAgICAgIFN0cmluZyBkaXJOYW1lID0g
ZGlyZWN0b3J5TmFtZShpRGF0YWJhc2UtPnZhbHVlLmZpbGVuYW1lKTsKKyAgICAgICAgVmVjdG9y
PFN0cmluZz4gZmlsZU5hbWVzID0gbGlzdERpcmVjdG9yeShkaXJOYW1lLCBTdHJpbmcoIiouZGIi
KSk7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+OjppdGVyYXRvciBmaWxlTmFtZSA9IGZpbGVOYW1l
cy5iZWdpbigpOworICAgICAgICBWZWN0b3I8U3RyaW5nPjo6aXRlcmF0b3IgbGFzdEZpbGVOYW1l
ID0gZmlsZU5hbWVzLmVuZCgpOworICAgICAgICBmb3IgKDsgZmlsZU5hbWUgIT0gbGFzdEZpbGVO
YW1lOyArK2ZpbGVOYW1lKSB7CisgICAgICAgICAgICBsb25nIGxvbmcgc2l6ZTsKKyAgICAgICAg
ICAgIGdldEZpbGVTaXplKCpmaWxlTmFtZSwgc2l6ZSk7CisgICAgICAgICAgICBkaXNrVXNhZ2Ug
Kz0gc2l6ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZGlza1VzYWdlOworI2VuZGlm
CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2lu
VXNhZ2VSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmgJKHJldmlzaW9uIDE0Mzk3OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQuaAkod29ya2luZyBj
b3B5KQpAQCAtNTgsMTAgKzU4LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIGxvbmcg
bG9uZyBzaXplOyAvLyBUaGlzIG1lbWJlciByZW1haW5zIHVuaW5pdGlhbGl6ZWQgdW50aWwgZGlz
ayB1c2FnZSBpcyBjYWxjdWxhdGVkLgogICAgIH07CiAgICAgSGFzaE1hcDxTdHJpbmcsIERhdGFi
YXNlRW50cnk+IG1fZGF0YWJhc2VNYXA7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgSGFz
aFNldDxTdHJpbmc+IG1fdW5rbm93blNldDsKIAogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtX2Nh
Y2hlZERpc2tVc2FnZTsKICAgICBib29sIG1fY2FjaGVkRGlza1VzYWdlSXNWYWxpZDsKKyNlbmRp
ZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="commit-queue"
          id="210776"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>190147</attachid>
            <date>2013-02-25 16:07:06 -0800</date>
            <delta_ts>2013-02-25 16:07:06 -0800</delta_ts>
            <desc>For consuming storage space to test the quota.</desc>
            <filename>quota-test.html</filename>
            <type>text/html</type>
            <size>11755</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">PGJvZHk+CjxzY3JpcHQ+Ci8vIFRoaXMgdGVzdCBjcmVhdGVzIGEgZGF0YWJhc2Ugd2l0aCBhIHJh
bmRvbSBuYW1lIChzZWUgJ2RiTmFtZScpIGFuZCBhdHRlbXB0cyB0bwovLyBob2cgYXMgbXVjaCBz
dG9yYWdlIHNwYWNlIGFzIHBvc3NpYmxlLiBUbyB0ZXN0IGl0IGluIGEgbXVsdGktcHRvY2VzcyBl
bnZpcm9ubWVudCwKLy8gbG9hZCB0aGUgcGFnZSBpbiBtdWx0aXBsZSBwcm9jZXNzZXMsIGFuZCBt
b25pdG9yIHRoZSBzaXplIG9mIHRoZSBkYXRhYmFzZQovLyBkaXJlY3RvcnkgYW5kIGl0cyBmaWxl
cy4KCnZhciBpc0Fib3J0ZWQgPSBmYWxzZTsKCnZhciByYW5kID0gZnVuY3Rpb24obGltaXQpIHsK
ICAgIHJldHVybiBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiBsaW1pdCk7Cn0KCnZhciByYW5k
b21seVdhc3RlVGltZSA9IGZ1bmN0aW9uKCkgewogICAgdmFyIG5lZWRUb1dhaXQgPSAocmFuZCgx
MCkgPCAzKTsKICAgIGlmIChuZWVkVG9XYWl0KSB7CiAgICAgICAgdmFyIHN0YXJ0VGltZSA9IERh
dGUubm93KCk7CiAgICAgICAgd2hpbGUgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPCAxMDAwKSB7
IAogICAgICAgIH0gLy8gV2FpdCBmb3IgMSBtaW51dGUuCiAgICB9Cn0KCgp2YXIgaW5pdFN0dWZm
ID0gZnVuY3Rpb24oZGIpIHsKCiAgICB2YXIgaW5pdFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayA9
IGZ1bmN0aW9uKGVycm9yKSB7CiAgICAgICAgYWxlcnQoImVycm9yIHdoaWxlIElOSVQgdGFibGU6
IGVyciA9ICIgKyBlcnJvci5jb2RlICsgIiAnIiArIGVycm9yLm1lc3NhZ2UgKyAiJyIpOwogICAg
ICAgIGlzQWJvcnRlZCA9IHRydWU7CiAgICB9CgogICAgdmFyIGluaXRUcmFuc2FjdGlvblN1Y2Nl
c3NDYWxsYmFjayA9IGZ1bmN0aW9uKCkgewogICAgICAgIC8vIGFsZXJ0KCJJTklUIHRhYmxlIHN1
Y2NlZWRlZCIpOwogICAgfQoKICAgIHZhciBpbml0U3RhdGVtZW50U3VjY2Vzc0NhbGxiYWNrID0g
ZnVuY3Rpb24odHJhbnNhY3Rpb24sIHJlc3VsdHMpIHsKICAgICAgICAvLyBhbGVydCgiU1VDQ0VT
UyBpbiBJTklUIHN0YXRlbWVudCIpOwogICAgfQoKICAgIHZhciBpbml0U3RhdGVtZW50RXJyb3JD
YWxsYmFjayA9IGZ1bmN0aW9uKHRyYW5zYWN0aW9uLCBlcnJvcikgewogICAgICAgIC8vYWxlcnQo
Ik9oIG5vZXMhIFRoZXJlIGhheiBiaW4gYSBkYXRhYmFzZSBlcnJvciBpbiBJTklUIHN0YXRlbWVu
dCEgOiBlcnIgPSAiICsgZXJyb3IuY29kZSArICIgJyIgKyBlcnJvci5tZXNzYWdlICsgIiciKTsK
ICAgICAgICBpc0Fib3J0ZWQgPSB0cnVlOwogICAgfQoKICAgIC8vIENyZWF0ZSB0aGUgdGFibGU6
CiAgICBkYi50cmFuc2FjdGlvbigKICAgICAgICBmdW5jdGlvbih0cmFuc2FjdGlvbikgewogICAg
ICAgICAgICB0cmFuc2FjdGlvbi5leGVjdXRlU3FsKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNU
UyBzdHVmZiAoIiArCiAgICAgICAgICAgICAgICAiaWQgSU5URUdFUiBOT1QgTlVMTCBQUklNQVJZ
IEtFWSBBVVRPSU5DUkVNRU5ULCIgKwogICAgICAgICAgICAgICAgIm5hbWUgVEVYVCBOT1QgTlVM
TCwiICsKICAgICAgICAgICAgICAgICJ4IElOVEVHRVIgTk9UIE5VTEwsIiArCiAgICAgICAgICAg
ICAgICAieSBJTlRFR0VSIE5PVCBOVUxMLCIgKwogICAgICAgICAgICAgICAgInogSU5URUdFUiBO
T1QgTlVMTCwiICsKICAgICAgICAgICAgICAgICJjaGVja3N1bSBJTlRFR0VSIE5PVCBOVUxMKTsi
LAogICAgICAgICAgICAgICAgW10sCiAgICAgICAgICAgICAgICBpbml0U3RhdGVtZW50U3VjY2Vz
c0NhbGxiYWNrLAogICAgICAgICAgICAgICAgaW5pdFN0YXRlbWVudEVycm9yQ2FsbGJhY2spOwog
ICAgICAgIH0sCiAgICAgICAgaW5pdFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaywKICAgICAgICBp
bml0VHJhbnNhY3Rpb25TdWNjZXNzQ2FsbGJhY2sKICAgICk7Cn07CgovLz09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLy8gSU5TRVJUCgp2YXIgaW5zZXJ0SW50ZXJ2YWw7Cgp2YXIgaW5zZXJ0U3R1ZmYgPSBm
dW5jdGlvbihuYW1lLCB4LCB5LCB6LCBjaGVja3N1bSkgewoKICAgIC8vIHZhciBpbnNlcnRUcmFu
c2FjdGlvblRpbWUgPSAwOwogICAgLy8gdmFyIGluc2VydFRyYW5zYWN0aW9uQ291bnQgPSAwOwoK
ICAgIHZhciBpbnNlcnRUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgPSBmdW5jdGlvbihlcnJvcikg
ewogICAgICAgIGFsZXJ0KCJlcnJvciB3aGlsZSBJTlNFUlQgdGFibGU6IGVyciA9ICIgKyBlcnJv
ci5jb2RlICsgIiAnIiArIGVycm9yLm1lc3NhZ2UgKyAiJyIpOwogICAgICAgIGNsZWFySW50ZXJ2
YWwoaW5zZXJ0SW50ZXJ2YWwpOwogICAgICAgIGNsZWFySW50ZXJ2YWwobG9hZEludGVydmFsKTsK
ICAgICAgICBpc0Fib3J0ZWQgPSB0cnVlOwogICAgICAgIC8vIGNvbnNvbGUubG9nKCIgSU5TRVJU
IHRyYW5zYWN0aW9uIGVycm9yOiB0b3RhbCB0cmFuc2FjdGlvbiB0aW1lID0gIiArIGluc2VydFRy
YW5zYWN0aW9uVGltZSArICIgbXMgLyAiICsgaW5zZXJ0VHJhbnNhY3Rpb25Db3VudCArICIgPSAi
ICsgKGluc2VydFRyYW5zYWN0aW9uVGltZS9pbnNlcnRUcmFuc2FjdGlvbkNvdW50KSk7CiAgICB9
CgogICAgdmFyIGluc2VydFRyYW5zYWN0aW9uU3VjY2Vzc0NhbGxiYWNrID0gZnVuY3Rpb24oKSB7
CiAgICAgICAgLy8gYWxlcnQoIklOU0VSVCB0YWJsZSBzdWNjZWVkZWQiKTsKICAgIH0KCiAgICB2
YXIgaW5zZXJ0U3RhdGVtZW50U3VjY2Vzc0NhbGxiYWNrID0gZnVuY3Rpb24odHJhbnNhY3Rpb24s
IHJlc3VsdHMpIHsKICAgICAgICAvLyBhbGVydCgiU1VDQ0VTUyBpbiBJTlNFUlQgc3RhdGVtZW50
Iik7CiAgICB9CgogICAgdmFyIGluc2VydFN0YXRlbWVudEVycm9yQ2FsbGJhY2sgPSBmdW5jdGlv
bih0cmFuc2FjdGlvbiwgZXJyb3IpIHsKICAgICAgICBhbGVydCgiT2ggbm9lcyEgVGhlcmUgaGF6
IGJpbiBhIGRhdGFiYXNlIGVycm9yIGluIElOU0VSVCBzdGF0ZW1lbnQhIDogZXJyID0gIiArIGVy
cm9yLmNvZGUgKyAiICciICsgZXJyb3IubWVzc2FnZSArICInIik7CiAgICAgICAgY2xlYXJJbnRl
cnZhbChpbnNlcnRJbnRlcnZhbCk7CiAgICAgICAgY2xlYXJJbnRlcnZhbChsb2FkSW50ZXJ2YWwp
OwogICAgICAgIGlzQWJvcnRlZCA9IHRydWU7CiAgICAgICAgLy8gY29uc29sZS5sb2coIiBJTlNF
UlQgc3RhdGVtZW50IGVycm9yOiB0b3RhbCB0cmFuc2FjdGlvbiB0aW1lID0gIiArIGluc2VydFRy
YW5zYWN0aW9uVGltZSArICIgbXMgLyAiICsgaW5zZXJ0VHJhbnNhY3Rpb25Db3VudCArICIgPSAi
ICsgKGluc2VydFRyYW5zYWN0aW9uVGltZS9pbnNlcnRUcmFuc2FjdGlvbkNvdW50KSk7CiAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGRiLnRyYW5zYWN0aW9uKAogICAgICAgIGZ1bmN0
aW9uKHRyYW5zYWN0aW9uKSB7CiAgICAgICAgICAgIC8vIHZhciBzdGFydFRpbWUgPSBEYXRlLm5v
dygpOwogICAgICAgICAgICB2YXIgajsKICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IDEwMDAg
JiYgIWlzQWJvcnRlZDsgaisrKSB7CiAgICAgICAgICAgIHRyYW5zYWN0aW9uLmV4ZWN1dGVTcWwo
KCJJTlNFUlQgSU5UTyBzdHVmZiAobmFtZSwgeCwgeSwgeiwgY2hlY2tzdW0pIFZBTFVFUyAoPywg
PywgPywgPywgPyk7IiksCiAgICAgICAgICAgICAgICBbbmFtZSwgeCwgeSwgeiwgY2hlY2tzdW1d
LAogICAgICAgICAgICAgICAgaW5zZXJ0U3RhdGVtZW50U3VjY2Vzc0NhbGxiYWNrLAogICAgICAg
ICAgICAgICAgaW5zZXJ0U3RhdGVtZW50RXJyb3JDYWxsYmFjayk7CiAgICAgICAgICAgIH0KICAg
ICAgICAgICAgLy8gdmFyIGVuZFRpbWUgPSBEYXRlLm5vdygpOwogICAgICAgICAgICAvLyBpbnNl
cnRUcmFuc2FjdGlvblRpbWUgKz0gKGVuZFRpbWUgLSBzdGFydFRpbWUpOwogICAgICAgICAgICAv
LyBpbnNlcnRUcmFuc2FjdGlvbkNvdW50Kys7CiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCJJ
TlNFUlQgZW5kIC0gc3RhcnQgPSAiICsgKGVuZFRpbWUgLSBzdGFydFRpbWUpKTsKICAgICAgICB9
LAogICAgICAgIGluc2VydFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaywKICAgICAgICBpbnNlcnRU
cmFuc2FjdGlvblN1Y2Nlc3NDYWxsYmFjawogICAgKTsKfQoKLy89PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci8vIFVQREFURQoKdmFyIHVwZGF0ZUNvdW50ID0gMDsKdmFyIHVwZGF0ZUVycm9yQ291bnQgPSAw
Owp2YXIgdXBkYXRlU3VjY2Vzc0NvdW50ID0gMDsKCnZhciB1cGRhdGVTdHVmZiA9IGZ1bmN0aW9u
KG5hbWUsIHgsIHksIHosIGNoZWNrc3VtLCBzdWNjZXNzQ2FsbGJhY2spIHsKICAgIHZhciBlcnJv
cnNBbGxvd2VkID0gNTsKCiAgICB2YXIgdXBkYXRlU3RhdGVtZW50RXJyb3JDYWxsYmFjayA9IGZ1
bmN0aW9uKHRyYW5zYWN0aW9uLCBlcnJvcikgewogICAgICAgIC8vYWxlcnQoIk9oIG5vZXMhIFRo
ZXJlIGhheiBiaW4gYSBkYXRhYmFzZSBlcnJvciBpbiBVUERBVEUgc3RhdGVtZW50ISA6IGVyciA9
ICIgKyBlcnJvci5jb2RlICsgIiAnIiArIGVycm9yLm1lc3NhZ2UgKyAiJyIpOwogICAgICAgIC8v
IGNvbnNvbGUubG9nKCIgdXBkYXRlU3RhdGVtZW50RXJyb3JDYWxsYmFjayIpOwogICAgICAgIGVy
cm9yc0FsbG93ZWQtLTsKICAgICAgICBpZiAoZXJyb3JzQWxsb3dlZCA8PSAwKQogICAgICAgICAg
ICBpc0Fib3J0ZWQgPSB0cnVlOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBmdW5j
dGlvbiB1cGRhdGVUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2soZXJyb3IpIHsKICAgICAgICB1cGRh
dGVUcmFuc2FjdGlvbkVycm9yQ291bnQrKzsKICAgICAgICAvL2FsZXJ0KCJPaCBub2VzISBUaGVy
ZSBoYXogYmluIGEgZGF0YWJhc2UgZXJyb3Igd2hpbGUgU0FWSU5HISBlcnIgPSAiICsgZXJyb3Iu
Y29kZSArICIgJyIgKyBlcnJvci5tZXNzYWdlICsgIiciKTsKICAgICAgICAvLyBjb25zb2xlLmxv
ZygiIHVwZGF0ZVRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayIpOwogICAgICAgIGVycm9yc0FsbG93
ZWQtLTsKICAgICAgICBpZiAoZXJyb3JzQWxsb3dlZCA8PSAwKQogICAgICAgICAgICBpc0Fib3J0
ZWQgPSB0cnVlOwogICAgfQoKICAgIGZ1bmN0aW9uIHVwZGF0ZVRyYW5zYWN0aW9uU3VjY2Vzc0Nh
bGxiYWNrKCkgewogICAgICAgIHVwZGF0ZVRyYW5zYWN0aW9uU3VjY2Vzc0NvdW50Kys7CiAgICAg
ICAgLy8gY29uc29sZS5sb2coIiB1cGRhdGVUcmFuc2FjdGlvblN1Y2Nlc3NDYWxsYmFjayIpOwog
ICAgICAgIC8vIHJhbmRvbWx5V2FzdGVUaW1lKCk7CiAgICB9CgogICAgdXBkYXRlQ291bnQrKzsK
ICAgIGRiLnRyYW5zYWN0aW9uKAogICAgICAgIGZ1bmN0aW9uKHRyYW5zYWN0aW9uKSB7CiAgICAg
ICAgICAgIC8vIGNvbnNvbGUubG9nKCIgU3RhcnQgdHJhbnNhY3Rpb24iKTsKICAgICAgICAgICAg
dHJhbnNhY3Rpb24uZXhlY3V0ZVNxbCgoIlVQREFURSBzdHVmZiBTRVQgeD0/LCB5PT8sIHo9Pywg
Y2hlY2tzdW09PyBXSEVSRSBuYW1lPT87IiksCiAgICAgICAgICAgICAgICBbeCwgeSwgeiwgY2hl
Y2tzdW0sIG5hbWVdLAogICAgICAgICAgICAgICAgZnVuY3Rpb24odHJhbnNhY3Rpb24sIHJlc3Vs
dHMpIHsgc3VjY2Vzc0NhbGxiYWNrKHJlc3VsdHMpOyB9LAogICAgICAgICAgICAgICAgdXBkYXRl
U3RhdGVtZW50RXJyb3JDYWxsYmFjayk7CiAgICAgICAgICAgIC8vIHJhbmRvbWx5V2FzdGVUaW1l
KCk7CiAgICAgICAgfSwKICAgICAgICB1cGRhdGVUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2ssCiAg
ICAgICAgdXBkYXRlVHJhbnNhY3Rpb25TdWNjZXNzQ2FsbGJhY2sKICAgICk7Cn07CgoKLy89PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci8vIFNFTEVDVAoKdmFyIGxvYWRJbnRlcnZhbDsKCnZhciBsb2FkU3R1
ZmYgPSBmdW5jdGlvbihuYW1lLCBzdWNjZXNzQ2FsbGJhY2spIHsKICAgIC8vIHZhciBsb2FkVHJh
bnNhY3Rpb25UaW1lID0gMDsKICAgIC8vIHZhciBsb2FkVHJhbnNhY3Rpb25Db3VudCA9IDA7CiAg
ICB2YXIgZXJyb3JzQWxsb3dlZCA9IDU7CgogICAgdmFyIGxvYWRTdGF0ZW1lbnRFcnJvckNhbGxi
YWNrID0gZnVuY3Rpb24odHJhbnNhY3Rpb24sIGVycm9yKSB7CiAgICAgICAgLy9hbGVydCgiT2gg
bm9lcyEgVGhlcmUgaGF6IGJpbiBhIGRhdGFiYXNlIGVycm9yIGluIExPQUQgc3RhdGVtZW50ISBl
cnIgPSAiICsgZXJyb3IuY29kZSArICIgJyIgKyBlcnJvci5tZXNzYWdlICsgIiciKTsKICAgICAg
ICAvLyBjb25zb2xlLmxvZygiIGxvYWRTdGF0ZW1lbnRFcnJvckNhbGxiYWNrIik7CiAgICAgICAg
ZXJyb3JzQWxsb3dlZC0tOwogICAgICAgIGlmIChlcnJvcnNBbGxvd2VkIDw9IDApIHsKICAgICAg
ICAgICAgY2xlYXJJbnRlcnZhbChsb2FkSW50ZXJ2YWwpOwogICAgICAgICAgICBpc0Fib3J0ZWQg
PSB0cnVlOwogICAgICAgICAgICAvLyBjb25zb2xlLmxvZygiIFNFTEVDVCBzdGF0ZW1lbnQgZXJy
b3I6IHRvdGFsIHRyYW5zYWN0aW9uIHRpbWUgPSAiICsgbG9hZFRyYW5zYWN0aW9uVGltZSArICIg
bXMgLyAiICsgbG9hZFRyYW5zYWN0aW9uQ291bnQgKyAiID0gIiArIChsb2FkVHJhbnNhY3Rpb25U
aW1lL2xvYWRUcmFuc2FjdGlvbkNvdW50KSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxz
ZTsKICAgIH0KCgogICAgZnVuY3Rpb24gbG9hZFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayhlcnJv
cikgewogICAgICAgIC8vYWxlcnQoIk9oIG5vZXMhIFRoZXJlIGhheiBiaW4gYSBkYXRhYmFzZSBl
cnJvciB3aGlsZSBMT0FESU5HISBlcnIgPSAiICsgZXJyb3IuY29kZSArICIgJyIgKyBlcnJvci5t
ZXNzYWdlICsgIiciKTsKICAgICAgICAvLyBjb25zb2xlLmxvZygiIGxvYWRUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2siKTsKICAgICAgICBlcnJvcnNBbGxvd2VkLS07CiAgICAgICAgaWYgKGVycm9y
c0FsbG93ZWQgPD0gMCkgewogICAgICAgICAgICBjbGVhckludGVydmFsKGxvYWRJbnRlcnZhbCk7
CiAgICAgICAgICAgIGlzQWJvcnRlZCA9IHRydWU7CiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9n
KCIgU0VMRUNUIHRyYW5zYWN0aW9uIGVycm9yOiB0b3RhbCB0cmFuc2FjdGlvbiB0aW1lID0gIiAr
IGxvYWRUcmFuc2FjdGlvblRpbWUgKyAiIG1zIC8gIiArIGxvYWRUcmFuc2FjdGlvbkNvdW50ICsg
IiA9ICIgKyAobG9hZFRyYW5zYWN0aW9uVGltZS9sb2FkVHJhbnNhY3Rpb25Db3VudCkpOwogICAg
ICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGxvYWRUcmFuc2FjdGlvblN1Y2Nlc3NDYWxsYmFjaygp
IHsKICAgICAgICAvLyBjb25zb2xlLmxvZygiIGxvYWRUcmFuc2FjdGlvblN1Y2Nlc3NDYWxsYmFj
ayIpOwogICAgICAgIC8vIHJhbmRvbWx5V2FzdGVUaW1lKCk7CiAgICB9CgogICAgZGIucmVhZFRy
YW5zYWN0aW9uKAogICAgICAgIGZ1bmN0aW9uKHRyYW5zYWN0aW9uKSB7CiAgICAgICAgICAgIC8v
IHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygpOwogICAgICAgICAgICB0cmFuc2FjdGlvbi5leGVj
dXRlU3FsKCgiU0VMRUNUICogRlJPTSBzdHVmZiBXSEVSRSBuYW1lPT8iKSwKICAgICAgICAgICAg
ICAgIFtuYW1lXSwKICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHRyYW5zYWN0aW9uLCByZXN1bHRz
KSB7IHN1Y2Nlc3NDYWxsYmFjayhyZXN1bHRzKTsgfSwKICAgICAgICAgICAgICAgIGxvYWRTdGF0
ZW1lbnRFcnJvckNhbGxiYWNrKTsKICAgICAgICAgICAgLy8gdmFyIGVuZFRpbWUgPSBEYXRlLm5v
dygpOwogICAgICAgICAgICAvLyBsb2FkVHJhbnNhY3Rpb25UaW1lICs9IChlbmRUaW1lIC0gc3Rh
cnRUaW1lKTsKICAgICAgICAgICAgLy8gbG9hZFRyYW5zYWN0aW9uQ291bnQrKzsKICAgICAgICAg
ICAgLy8gY29uc29sZS5sb2coIlNFTEVDVCBlbmQgLSBzdGFydCA9ICIgKyAoZW5kVGltZSAtIHN0
YXJ0VGltZSkpOwogICAgICAgICAgICAvLyByYW5kb21seVdhc3RlVGltZSgpOwogICAgICAgICB9
LAogICAgICAgICBsb2FkVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLAogICAgICAgICBsb2FkVHJh
bnNhY3Rpb25TdWNjZXNzQ2FsbGJhY2sKICAgICk7Cn07CgovLz09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
CnZhciBjcmVhdGlvbkNhbGxiYWNrID0gZnVuY3Rpb24oKSB7CiAgICAvLyBhbGVydCgiRGF0YWJh
c2Ugb3BlbmVkISIpOwp9CgovLyBPcGVuIHRoZSBkYXRhYmFzZToKdmFyIGRiTmFtZSA9ICdxdW90
YScgKyByYW5kKDEwKTsKLy92YXIgZGJOYW1lID0gJ3F1b3RhJzsKdmFyIGRiID0gb3BlbkRhdGFi
YXNlKGRiTmFtZSwgJzEuMCcsICdDb3JydXB0IE1lIFBsZWFzZScsIDMyKjEwMjQsIGNyZWF0aW9u
Q2FsbGJhY2spOwoKaW5pdFN0dWZmKGRiKTsKCndpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbihlKSB7
CiAgICAvLyBMZXQgdGhlIG1heWhlbSBiZWdpbjoKCiAgICB2YXIgbnVtRW50cmllcyA9IDU7CiAg
ICB2YXIgcmFuZExpbWl0ID0gMTAwOwogICAgdmFyIGk7CgogICAgZm9yIChpID0gMTsgaSA8PSBu
dW1FbnRyaWVzICYmICFpc0Fib3J0ZWQ7IGkrKykgewogICAgICAgIHZhciBuYW1lID0gImVudHJ5
IiArIGk7CiAgICAgICAgdmFyIHggPSByYW5kKHJhbmRMaW1pdCk7CiAgICAgICAgdmFyIHkgPSBy
YW5kKHJhbmRMaW1pdCk7CiAgICAgICAgdmFyIHogPSByYW5kKHJhbmRMaW1pdCk7CiAgICAgICAg
dmFyIGNoZWNrc3VtID0geCArIHkgKyB6OwogICAgICAgIGxvYWRTdHVmZihuYW1lLCBmdW5jdGlv
bihyZXN1bHRzKSB7CiAgICAgICAgICAgIC8vIGFsZXJ0KCJbIiArIGkgKyAiXSBuYW1lICciICsg
bmFtZSArICInIHJlc3VsdHMucm93cy5sZW5ndGggPSAiICsgcmVzdWx0cy5yb3dzLmxlbmd0aCk7
CiAgICAgICAgICAgIGlmIChyZXN1bHRzLnJvd3MubGVuZ3RoID09IDApIHsKICAgICAgICAgICAg
ICAgIC8vIEVudHJ5IG5vdCBmb3VuZC4gIE1ha2Ugb25lOgogICAgICAgICAgICAgICAgLy8gaW5z
ZXJ0U3R1ZmYobmFtZSwgeCwgeSwgeiwgY2hlY2tzdW0pOwogICAgICAgICAgICB9ICAgICAgICAK
ICAgICAgICB9KTsKICAgICAgICBpbnNlcnRTdHVmZihuYW1lLCB4LCB5LCB6LCBjaGVja3N1bSk7
CiAgICB9CgogICAgdmFyIG5hbWU7CiAgICB2YXIgeDsKICAgIHZhciB5OwogICAgdmFyIHo7CiAg
ICB2YXIgY2hlY2tzdW07CiAgICB2YXIgaTsKICAgIHZhciByZXN1bHRTdHI7CiAgICB2YXIgcm93
OwoKCiAgICBzdGFydE1heWhlbSA9IGZ1bmN0aW9uKCkgewogICAgICAgIGZ1bmN0aW9uIHZlcmlm
eUluc2VydChyZXN1bHRzKSB7CiAgICAgICAgICAgIC8vdmFyIHJlc3VsdHNTdHIgPSAiSU5TRVJU
IHJlc3VsdHMucm93cy5sZW5ndGggPSAiICsgcmVzdWx0cy5yb3dzLmxlbmd0aCArICJcbiI7CiAg
ICAgICAgICAgIC8vYWxlcnQocmVzdWx0c1N0cik7CiAgICAgICAgfQogICAgICAgIGluc2VydElu
dGVydmFsID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGZvciAoaSA9IDE7
IGkgPD0gMTAwMCAmJiAhaXNBYm9ydGVkOyBpKyspIHsKICAgICAgICAgICAgICAgIG5hbWUgPSAi
ZW50cnkiICsgcmFuZCgxMCk7CiAgICAgICAgICAgICAgICB4ID0gcmFuZChyYW5kTGltaXQpOwog
ICAgICAgICAgICAgICAgeSA9IHJhbmQocmFuZExpbWl0KTsKICAgICAgICAgICAgICAgIHogPSBy
YW5kKHJhbmRMaW1pdCk7CiAgICAgICAgICAgICAgICBjaGVja3N1bSA9IHggKyB5ICsgejsKICAg
ICAgICAgICAgICAgIGluc2VydFN0dWZmKG5hbWUsIHgsIHksIHosIGNoZWNrc3VtLCB2ZXJpZnlJ
bnNlcnQpOwogICAgICAgICAgICAgfQoKICAgICAgICB9LCAzMyk7CgogICAgICAgIHZhciBsb2Fk
Q291bnQgPSAwOwogICAgICAgIGZ1bmN0aW9uIHZlcmlmeUxvYWQocmVzdWx0cykgewogICAgICAg
ICAgICBsb2FkQ291bnQrKzsKICAgICAgICAgICAgaWYgKGxvYWRDb3VudCA+IDEwMCkgbG9hZENv
dW50ID0gMDsKCiAgICAgICAgICAgIHZhciBzdGFydEluZGV4ID0gMDsKICAgICAgICAgICAgaWYg
KHJlc3VsdHMucm93cy5sZW5ndGggPiA1KSB7CiAgICAgICAgICAgICAgICByZXN1bHRTdHIgKz0g
Ii4uLlxuIjsKICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSByZXN1bHRzLnJvd3MubGVuZ3Ro
IC0gNTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKGkgPSBzdGFydEluZGV4OyBpIDwg
cmVzdWx0cy5yb3dzLmxlbmd0aCAmJiAhaXNBYm9ydGVkOyBpKyspIHsKICAgICAgICAgICAgICAg
IHJvdyA9IHJlc3VsdHMucm93cy5pdGVtKGkpOwogICAgICAgICAgICAgICAgY2hlY2tzdW0gPSBy
b3cueCArIHJvdy55ICsgcm93Lno7CiAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSAoY2hlY2tz
dW0gPT09IHJvdy5jaGVja3N1bSk7CgogICAgICAgICAgICAgICAgaWYgKGxvYWRDb3VudCA9PSAw
KSB7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0U3RyICs9IHJvdy5uYW1lICsgIjogIiArIHJv
dy54ICsgIiArICIgKyByb3cueSArICIgKyAiICsgcm93LnogKyAiID09ICIgKyByb3cuY2hlY2tz
dW07CiAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRjaCkKICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0U3RyICs9ICIgfCBGQUlMRUQgPSAiICsgY2hlY2tzdW07CiAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0U3RyICs9ICJcbiI7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRjaCkK
ICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQocmVzdWx0U3RyKTsKICAgICAgICAgICAgICAg
ICAgICBpZiAocm93Lm5hbWUgPT0gKCJlbnRyeSIgKyBudW1FbnRyaWVzKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmlubmVyVGV4dCA9IHJlc3VsdFN0cjsKICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0U3RyID0gIkxPQUQgcmVzdWx0czpcbiI7CiAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICBpZiAoIW1hdGNoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFN0ciArPSByb3cu
bmFtZSArICI6ICIgKyByb3cueCArICIgKyAiICsgcm93LnkgKyAiICsgIiArIHJvdy56ICsgIiA9
PSAiICsgcm93LmNoZWNrc3VtOwogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTdHIgKz0g
IiB8IEZBSUxFRCA9ICIgKyBjaGVja3N1bTsKICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
U3RyICs9ICJcbiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICB9CiAgICAgICAgICAgIC8vIHJhbmRvbWx5V2FzdGVUaW1lKCk7CiAgICAgICAgfQoK
ICAgICAgICByZXN1bHRTdHIgPSAiTE9BRCByZXN1bHRzOlxuIjsKICAgICAgICBsb2FkSW50ZXJ2
YWwgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8
PSBudW1FbnRyaWVzICYmICFpc0Fib3J0ZWQ7IGkrKykgewogICAgICAgICAgICAgICAgbmFtZSA9
ICJlbnRyeSIgKyBpOwogICAgICAgICAgICAgICAgbG9hZFN0dWZmKG5hbWUsIHZlcmlmeUxvYWQp
OwogICAgICAgICAgICAgfQogICAgICAgIH0sIDEwMDApOwogICAgfQoKICAgIGlmICghaXNBYm9y
dGVkKQogICAgICAgIHNldFRpbWVvdXQoInN0YXJ0TWF5aGVtKCkiLCA1MDAwKTsKfTsKCjwvc2Ny
aXB0Pgo8L2JvZHk+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190190</attachid>
            <date>2013-02-25 20:02:37 -0800</date>
            <delta_ts>2013-02-25 20:09:57 -0800</delta_ts>
            <desc>updated fix patch.</desc>
            <filename>bug-110805.patch</filename>
            <type>text/plain</type>
            <size>52056</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NDAwMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBACisyMDEzLTAyLTI1ICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBOZWVkIG1vcmUgcm9idXN0IFdlYlNR
TCBkaXNrIHVzYWdlIGNvbXB1dGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTEwODA1LgorCisgICAgICAgIC0gQ2hhbmdlZCBEYXRhYmFzZVRy
YWNrZXI6OnVzYWdlRm9yT3JpZ2luKCkgdG8gY29tcHV0ZSB0aGUgZGlzayB1c2FnZQorICAgICAg
ICAgIGZvciBhIHNwZWNpZmllZCBvcmlnaW4gYnkgZmV0Y2hpbmcgZGF0YWJhc2Ugc2l6ZXMgZnJv
bSB0aGUgZmlsZSBzeXN0ZW0KKyAgICAgICAgICBpbnN0ZWFkIG9mIHVzaW5nIGNhY2hlZCBmaWxl
IHNpemUgdmFsdWVzLgorCisgICAgICAgIC0gVGhlIE9yaWdpblF1b3RhTWFuYWdlciBhbmQgT3Jp
Z2luVXNhZ2VSZWNvcmQgYXJlIG5vIGxvbmdlciBuZWVkZWQuCisgICAgICAgICAgVXBkYXRlZCBi
dWlsZCBmaWxlcyB0byByZWZsZWN0IHRoaXMuCisKKyAgICAgICAgLSBSZW1vdmVkIGdldE1heFNp
emVGb3JEYXRhYmFzZSgpIGZyb20gRGF0YWJhc2VNYW5hZ2VyLCBEYXRhYmFzZVNlcnZlciwKKyAg
ICAgICAgICBhbmQgQWJzdHJhY3REYXRhYmFzZVNlcnZlciBzaW5jZSBpdCBpcyBvbmx5IG5lZWRl
ZCBpbiB0aGUgYmFja2VuZC4KKworICAgICAgICAtIERhdGFiYXNlVHJhY2tlcjo6Z2V0TWF4U2l6
ZUZvckRhdGFiYXNlKCkgbm93IGNhbGxzIHVzYWdlRm9yT3JpZ2luKCkKKyAgICAgICAgICB0byBn
ZXQgdGhlIGRpc2sgdXNhZ2UgZm9yIGl0cyBjb21wdXRhdGlvbi4KKworICAgICAgICAtIFRoZSBw
ZXJmb3JtYW5jZSBkaWZmZXJlbmNlIGZvciB0aGlzIGNoYW5nZXMgaXMgYSAxLjYlIGRlZ3JhZGF0
aW9uCisgICAgICAgICAgcGVyIGFkZGl0aW9uYWwgZGF0YWJhc2Ugd2hvc2Ugc2l6ZSBuZWVkcyB0
byBiZSBmZXRjaGVkLiBUaGlzIGlzIGEKKyAgICAgICAgICB3b3JzdCBjYXNlIGVzdGltYXRlZCBi
YXNlZCBvbiB0aGUgZGlzay1zdGF0LXNwZWVkLXRlc3QuaHRtbCBiZW5jaG1hcmsKKyAgICAgICAg
ICAoYXR0YWNoZWQgdG8gYnVnemlsbGEpLiBUaGUgYmVuY2htYXJrIHdyaXRlcyBhbiBhdmVyYWdl
IG9mIDE2IGJ5dGVzIHBlcgorICAgICAgICAgIHRyYW5zYWN0aW9uLiBNb3N0IHJlYWwtd29ybGQg
dHJhbnNhY3Rpb25zIHdpbGwgbGlrZWx5IHdyaXRlIG1vcmUKKyAgICAgICAgICBjb250ZW50IHRo
YW4gdGhhdC4gU2luY2UgZGlzayB3cml0ZSBJTyB0aW1lIHdpbGwgZG9taW5hdGUgb3ZlciBtZW1v
cnkKKyAgICAgICAgICByZWFkIHRpbWUgZm9yIGZldGNoaW5nIHRoZSBmaWxlIHNpemUsIHRoZSBk
ZWdyYWRhdGlvbiByYXRpbyB3aWxsIG9ubHkKKyAgICAgICAgICByZWR1Y2Ugd2l0aCBsYXJnZXIg
d29ya2xvYWRzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE5vIGxheW91dCB0ZXN0LCBidXQgdGhlcmUgaXMgYSBxdW90YS10ZXN0Lmh0bWwgYXR0YWNo
ZWQgdG8gYnVnemlsbGEuCisgICAgICAgIFRoZSB0ZXN0IGlzIGEgd2VicGFnZSB0aGF0IGNhbiBi
ZSBsb2FkZWQgaW50byBtdWx0aXBsZSB0YWJzIHRvCisgICAgICAgIGNvbnN1bWluZyBzdG9yYWdl
IHNwYWNlLiBXaGlsZSB0aGUgdGVzdCBpcyBydW5uaW5nLCB3ZSBjYW4gcnVuIGEKKyAgICAgICAg
ImR1IC1rOyBkdSAtayAqIiBvbiB0aGUgZGF0YWJhc2UgZGlyZWN0b3J5IHRvIHZlcmlmeSB0aGF0
IHRoZSB0b3RhbAorICAgICAgICBkaXNrIHVzYWdlIGRvZXMgbm90IGZhciBleGNlZWQgdGhlIGFs
bG93ZWQgcXVvdGEgKHNvbWUgc21hbGwgZXJyb3IKKyAgICAgICAgaXMgZXhwZWN0ZWQpLiBXaXRo
b3V0IHRoaXMgY2hhbmdlLCBlYWNoIGRhdGFiYXNlIGZyb20gZWFjaCB0YWIgbWF5CisgICAgICAg
IGV4Y2VlZCB0aGUgcXVvdGEgYnkgdGhhdCBzYW1lIG1hZ2luaXR1ZGUgb2YgZXJyb3IuCisKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlQmFja2VuZEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VC
YWNrZW5kQmFzZTo6bWF4aW11bVNpemUpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFi
YXNlTWFuYWdlci5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2
ZXIuY3BwOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2ZXIuaDoK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Omhhc0FkZXF1YXRlUXVvdGFGb3JPcmlnaW4p
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpjYW5Fc3RhYmxpc2hEYXRhYmFz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnJldHJ5Q2FuRXN0YWJsaXNo
RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpnZXRNYXhTaXpl
Rm9yRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFja2VyOjpmdWxsUGF0
aEZvckRhdGFiYXNlTm9Mb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6
ZnVsbFBhdGhGb3JEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6
OmFkZE9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnJl
bW92ZU9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6OnVz
YWdlRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6ZGVsZXRl
T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJh
c2UpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmg6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5RdW90YU1hbmFnZXIuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmg6
IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5Vc2FnZVJlY29y
ZC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5Vc2Fn
ZVJlY29yZC5oOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJh
bnNhY3Rpb25CYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQmFj
a2VuZDo6cnVuQ3VycmVudFN0YXRlbWVudEFuZEdldE5leHRTdGF0ZSk6CisgICAgICAgICogTW9k
dWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmM6OmV4ZWN1dGVTUUwpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuaDoKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9taXVtL1NRTFRyYW5zYWN0aW9uQ2xpZW50Q2hyb21p
dW0uY3BwOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXA6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZj
eHByb2o6CisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJz
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxMy0w
Mi0yNSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFRocmVhZGVk
IEhUTUwgcGFyc2VyIHNob3VsZCBwYXNzIGZhc3QvcGFyc2VyL2lmcmFtZS1zZXRzLXBhcmVudC10
by1qYXZhc2NyaXB0LXVybC5odG1sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24g
MTQ0MDAyKQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTk1MSw4ICs5NTEsNiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZVRhc2suY3BwCiAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZVRocmVhZC5jcHAKICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAK
LSAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblF1b3RhTWFuYWdlci5jcHAKLSAgICBNb2R1
bGVzL3dlYmRhdGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmNwcAogICAgIE1vZHVsZXMvd2ViZGF0
YWJhc2UvU1FMRXhjZXB0aW9uLmNwcAogICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMUmVzdWx0
U2V0LmNwcAogICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTQ0MDAyKQorKysg
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMjE0
MSwxMCArMjE0MSw2IEBAIHdlYmNvcmVfbW9kdWxlc19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmggXAogCVNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuaCBcCi0JU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5RdW90YU1hbmFnZXIuY3BwIFwKLQlTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblF1b3RhTWFuYWdlci5oIFwKLQlT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmNwcCBc
Ci0JU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5Vc2FnZVJlY29yZC5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTENhbGxiYWNrV3JhcHBl
ci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTEVycm9yLmggXAog
CVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMRXhjZXB0aW9uLmNwcCBcCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDE0NDAwMikKKysrIFNvdXJjZS9XZWJDb3JlL1Rhcmdl
dC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTE0NzgsOCArMTQ3OCw2IEBAIEhFQURFUlMgKz0gXAog
ICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUYXNrLmggXAogICAgIE1vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VUaHJlYWQuaCBcCiAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZVRyYWNrZXIuaCBcCi0gICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5RdW90YU1hbmFn
ZXIuaCBcCi0gICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5Vc2FnZVJlY29yZC5oIFwKICAg
ICBNb2R1bGVzL3dlYmRhdGFiYXNlL1NRTENhbGxiYWNrV3JhcHBlci5oIFwKICAgICBNb2R1bGVz
L3dlYmRhdGFiYXNlL1NRTFJlc3VsdFNldC5oIFwKICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL1NR
TFJlc3VsdFNldFJvd0xpc3QuaCBcCkBAIC0zMDcwLDggKzMwNjgsNiBAQCBlbmFibGU/KFNRTF9E
QVRBQkFTRSkgewogICAgICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGFzay5jcHAg
XAogICAgICAgICBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcCBcCiAgICAg
ICAgIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcCBcCi0gICAgICAgIE1v
ZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcCBcCi0gICAgICAgIE1vZHVs
ZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwIFwKICAgICAgICAgTW9kdWxlcy93
ZWJkYXRhYmFzZS9TUUxFeGNlcHRpb24uY3BwIFwKICAgICAgICAgTW9kdWxlcy93ZWJkYXRhYmFz
ZS9TUUxSZXN1bHRTZXQuY3BwIFwKICAgICAgICAgTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxSZXN1
bHRTZXRSb3dMaXN0LmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiAxNDQwMDIp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTEwMjEs
MTAgKzEwMjEsNiBAQAogICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VU
cmFja2VyLmNwcCcsCiAgICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dX
ZWJEYXRhYmFzZS5jcHAnLAogICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvRE9NV2lu
ZG93V2ViRGF0YWJhc2UuaCcsCi0gICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9Pcmln
aW5RdW90YU1hbmFnZXIuY3BwJywKLSAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL09y
aWdpblF1b3RhTWFuYWdlci5oJywKLSAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL09y
aWdpblVzYWdlUmVjb3JkLmNwcCcsCi0gICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9P
cmlnaW5Vc2FnZVJlY29yZC5oJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL1NR
TENhbGxiYWNrV3JhcHBlci5oJywKICAgICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL1NR
TEV4Y2VwdGlvbi5jcHAnLAogICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMRXhj
ZXB0aW9uLmgnLApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9BYnN0
cmFjdERhdGFiYXNlU2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS9BYnN0cmFjdERhdGFiYXNlU2VydmVyLmgJKHJldmlzaW9uIDE0NDAwMikK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvQWJzdHJhY3REYXRhYmFzZVNl
cnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw4ICs4Miw2IEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgdm9pZCBpbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0IERhdGFiYXNl
QmFja2VuZENvbnRleHQqKSA9IDA7CiAKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBn
ZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3QgRGF0YWJhc2VCYWNrZW5kQmFzZSopID0gMDsKLQog
cHJvdGVjdGVkOgogICAgIEFic3RyYWN0RGF0YWJhc2VTZXJ2ZXIoKSB7IH0KICAgICB2aXJ0dWFs
IH5BYnN0cmFjdERhdGFiYXNlU2VydmVyKCkgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAkocmV2aXNpb24gMTQ0MDAyKQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2OSwxMSArMTY5LDYgQEAgdm9pZCBEYXRhYmFzZTo6Y2xvc2VJbW1lZGlhdGVs
eSgpCiAgICAgfQogfQogCi11bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2U6Om1heGltdW1TaXpl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCkuZ2V0TWF4
U2l6ZUZvckRhdGFiYXNlKHRoaXMpOwotfQotCiB2b2lkIERhdGFiYXNlOjpjaGFuZ2VWZXJzaW9u
KGNvbnN0IFN0cmluZyYgb2xkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJh
Y2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJy
b3JDYWxsYmFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lk
Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmgJKHJldmlzaW9uIDE0NDAwMikKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
NzMsOSArNzMsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VJbW1lZGlhdGVs
eSgpOwogCi0gICAgdW5zaWduZWQgbG9uZyBsb25nIGRhdGFiYXNlU2l6ZSgpIGNvbnN0OwotICAg
IHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSgpIGNvbnN0OwotCiAgICAgdm9pZCBzY2hl
ZHVsZVRyYW5zYWN0aW9uQ2FsbGJhY2soU1FMVHJhbnNhY3Rpb24qKTsKIAogcHJpdmF0ZToKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kQmFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZUJhY2tlbmRCYXNlLmNwcAkocmV2aXNpb24gMTQ0MDAyKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmRCYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTkzLDcgKzU5Myw3IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kQmFzZTo6cmVzZXRB
dXRob3JpemUKIAogdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlQmFja2VuZEJhc2U6Om1heGlt
dW1TaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCku
Z2V0TWF4U2l6ZUZvckRhdGFiYXNlKHRoaXMpOworICAgIHJldHVybiBEYXRhYmFzZVRyYWNrZXI6
OnRyYWNrZXIoKS5nZXRNYXhTaXplRm9yRGF0YWJhc2UodGhpcyk7CiB9CiAKIHZvaWQgRGF0YWJh
c2VCYWNrZW5kQmFzZTo6aW5jcmVtZW50YWxWYWN1dW1JZk5lZWRlZCgpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXIu
Y3BwCShyZXZpc2lvbiAxNDQwMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyOCwxMSArNDI4LDYg
QEAgdm9pZCBEYXRhYmFzZU1hbmFnZXI6OmludGVycnVwdEFsbERhdGFiYQogICAgICAgICBtX3Nl
cnZlci0+aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChkYXRhYmFzZUNvbnRleHQtPmJh
Y2tlbmQoKS5nZXQoKSk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZU1hbmFnZXI6
OmdldE1heFNpemVGb3JEYXRhYmFzZShjb25zdCBEYXRhYmFzZUJhY2tlbmRCYXNlKiBkYXRhYmFz
ZSkKLXsKLSAgICByZXR1cm4gbV9zZXJ2ZXItPmdldE1heFNpemVGb3JEYXRhYmFzZShkYXRhYmFz
ZSk7Ci19Ci0KIHZvaWQgRGF0YWJhc2VNYW5hZ2VyOjpsb2dFcnJvck1lc3NhZ2UoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIGNv
bnRleHQtPmFkZENvbnNvbGVNZXNzYWdlKE90aGVyTWVzc2FnZVNvdXJjZSwgRXJyb3JNZXNzYWdl
TGV2ZWwsIG1lc3NhZ2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFz
ZS9EYXRhYmFzZU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5oCShyZXZpc2lvbiAxNDQwMDIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTAsOCArMTEwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBpbnRlcnJ1cHRB
bGxEYXRhYmFzZXNGb3JDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAotICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyBnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29uc3QgRGF0YWJhc2VCYWNr
ZW5kQmFzZSopOwotCiBwcml2YXRlOgogICAgIERhdGFiYXNlTWFuYWdlcigpOwogICAgIH5EYXRh
YmFzZU1hbmFnZXIoKSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2ZXIuY3BwCShyZXZpc2lvbiAxNDQwMDIpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTgxLDExICsxODEsNiBAQCBQYXNzUmVmUHRyPERhdGFiYXNlQmFja2Vu
ZEJhc2U+IERhdGFiYXNlCiAgICAgcmV0dXJuIGRhdGFiYXNlLnJlbGVhc2UoKTsKIH0KIAotdW5z
aWduZWQgbG9uZyBsb25nIERhdGFiYXNlU2VydmVyOjpnZXRNYXhTaXplRm9yRGF0YWJhc2UoY29u
c3QgRGF0YWJhc2VCYWNrZW5kQmFzZSogZGF0YWJhc2UpCi17Ci0gICAgcmV0dXJuIERhdGFiYXNl
VHJhY2tlcjo6dHJhY2tlcigpLmdldE1heFNpemVGb3JEYXRhYmFzZShkYXRhYmFzZSk7Ci19Ci0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0Up
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZVNlcnZlci5oCShyZXZpc2lvbiAxNDQwMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlU2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDggKzcw
LDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGludGVycnVwdEFsbERhdGFiYXNlc0Zv
ckNvbnRleHQoY29uc3QgRGF0YWJhc2VCYWNrZW5kQ29udGV4dCopOwogCi0gICAgdmlydHVhbCB1
bnNpZ25lZCBsb25nIGxvbmcgZ2V0TWF4U2l6ZUZvckRhdGFiYXNlKGNvbnN0IERhdGFiYXNlQmFj
a2VuZEJhc2UqKTsKLQogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxEYXRhYmFz
ZUJhY2tlbmRCYXNlPiBjcmVhdGVEYXRhYmFzZShSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQ29udGV4
dD4mLCBEYXRhYmFzZVR5cGUsCiAgICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVk
IGxvbmcgZXN0aW1hdGVkU2l6ZSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAJKHJldmlzaW9uIDE0NDAwMikK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgsOCArMzgsOCBAQAogI2luY2x1ZGUgIkRhdGFiYXNlTWFu
YWdlci5oIgogI2luY2x1ZGUgIkRhdGFiYXNlTWFuYWdlckNsaWVudC5oIgogI2luY2x1ZGUgIkRh
dGFiYXNlVGhyZWFkLmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKLSNpbmNsdWRlICJPcmlnaW5RdW90YU1hbmFnZXIuaCIKICNpbmNsdWRlICJQYWdlLmgi
CiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbkhh
c2guaCIKQEAgLTUxLDEyICs1MSw2IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKLXN0YXRp
YyBXZWJDb3JlOjpPcmlnaW5RdW90YU1hbmFnZXImIG9yaWdpblF1b3RhTWFuYWdlcigpCi17Ci0g
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChXZWJDb3JlOjpPcmlnaW5RdW90YU1hbmFnZXIsIHF1b3Rh
TWFuYWdlciwgKCkpOwotICAgIHJldHVybiBxdW90YU1hbmFnZXI7Ci19Ci0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogc3RhdGljIERhdGFiYXNlVHJhY2tlciogc3RhdGljVHJhY2tlciA9IDA7CkBA
IC0xNDQsMTIgKzEzOCw3IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpvcGVuVHJhY2tlckRhdGFi
YXMKIAogYm9vbCBEYXRhYmFzZVRyYWNrZXI6Omhhc0FkZXF1YXRlUXVvdGFGb3JPcmlnaW4oU2Vj
dXJpdHlPcmlnaW4qIG9yaWdpbiwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBEYXRhYmFz
ZUVycm9yJiBlcnIpCiB7Ci0gICAgLy8gU2luY2Ugd2UncmUgaW1taW5lbnRseSBvcGVuaW5nIGEg
ZGF0YWJhc2Ugd2l0aGluIHRoaXMgY29udGV4dCdzIG9yaWdpbiwKLSAgICAvLyBtYWtlIHN1cmUg
dGhpcyBvcmlnaW4gaXMgYmVpbmcgdHJhY2tlZCBieSB0aGUgT3JpZ2luUXVvdGFNYW5hZ2VyCi0g
ICAgLy8gYnkgZmV0Y2hpbmcgaXRzIGN1cnJlbnQgdXNhZ2Ugbm93LiBDYWxsaW5nIHVzYWdlRm9y
T3JpZ2luKCkgaGFzIHRoZSBzaWRlCi0gICAgLy8gZWZmZWN0IG9mIGluaXRpYXRpbmcgdHJhY2tp
bmcgYnkgdGhlIE9yaWdpblF1b3RhTWFuYWdlciBpZiB0aGUgb3JpZ2luIGlzCi0gICAgLy8gbm90
IGFscmVhZHkgdHJhY2tlZC4KLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgdXNhZ2UgPSB1c2FnZUZv
ck9yaWdpbk5vTG9jayhvcmlnaW4pOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1c2FnZSA9IHVz
YWdlRm9yT3JpZ2luKG9yaWdpbik7CiAKICAgICAvLyBJZiB0aGUgZGF0YWJhc2Ugd2lsbCBmaXQs
IGFsbG93IGl0cyBjcmVhdGlvbi4KICAgICB1bnNpZ25lZCBsb25nIGxvbmcgcmVxdWlyZW1lbnQg
PSB1c2FnZSArIG1heCgxVUwsIGVzdGltYXRlZFNpemUpOwpAQCAtMTcxLDcgKzE2MCw2IEBAIGJv
b2wgRGF0YWJhc2VUcmFja2VyOjpjYW5Fc3RhYmxpc2hEYXRhYmEKICAgICBlcnJvciA9IERhdGFi
YXNlRXJyb3I6Ok5vbmU7CiAKICAgICBNdXRleExvY2tlciBsb2NrRGF0YWJhc2UobV9kYXRhYmFz
ZUd1YXJkKTsKLSAgICBMb2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJMb2Nr
ZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkpOwogICAgIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSBj
b250ZXh0LT5zZWN1cml0eU9yaWdpbigpOwogCiAgICAgaWYgKGlzRGVsZXRpbmdEYXRhYmFzZU9y
T3JpZ2luRm9yKG9yaWdpbiwgbmFtZSkpIHsKQEAgLTIyOSw3ICsyMTcsNiBAQCBib29sIERhdGFi
YXNlVHJhY2tlcjo6cmV0cnlDYW5Fc3RhYmxpc2hECiAgICAgZXJyb3IgPSBEYXRhYmFzZUVycm9y
OjpOb25lOwogCiAgICAgTXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7
Ci0gICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdp
blF1b3RhTWFuYWdlcigpKTsKICAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gY29udGV4dC0+
c2VjdXJpdHlPcmlnaW4oKTsKIAogICAgIC8vIFdlIGhhdmUgYWxyZWFkeSBlbGltaW5hdGVkIG90
aGVyIHR5cGVzIG9mIGVycm9ycyBpbiBjYW5Fc3RhYmxpc2hEYXRhYmFzZSgpLgpAQCAtMjg4LDEy
ICsyNzUsMTIgQEAgdW5zaWduZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6Z2V0TQogICAg
IC8vIFRoZSBtYXhpbXVtIHNpemUgZm9yIGEgZGF0YWJhc2UgaXMgdGhlIGZ1bGwgcXVvdGEgZm9y
IGl0cyBvcmlnaW4sIG1pbnVzIHRoZSBjdXJyZW50IHVzYWdlIHdpdGhpbiB0aGUgb3JpZ2luLAog
ICAgIC8vIHBsdXMgdGhlIGN1cnJlbnQgdXNhZ2Ugb2YgdGhlIGdpdmVuIGRhdGFiYXNlCiAgICAg
TXV0ZXhMb2NrZXIgbG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7Ci0gICAgTG9ja2VyPE9y
aWdpblF1b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigp
KTsKICAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gZGF0YWJhc2UtPnNlY3VyaXR5T3JpZ2lu
KCk7CiAKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEgPSBxdW90YUZvck9yaWdpbk5vTG9j
ayhvcmlnaW4pOwotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkaXNrVXNhZ2UgPSBvcmlnaW5RdW90
YU1hbmFnZXIoKS5kaXNrVXNhZ2Uob3JpZ2luKTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgZGlz
a1VzYWdlID0gdXNhZ2VGb3JPcmlnaW4ob3JpZ2luKTsKICAgICB1bnNpZ25lZCBsb25nIGxvbmcg
ZGF0YWJhc2VGaWxlU2l6ZSA9IFNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUo
ZGF0YWJhc2UtPmZpbGVOYW1lKCkpOworICAgIEFTU0VSVChkYXRhYmFzZUZpbGVTaXplIDw9IGRp
c2tVc2FnZSk7CiAKICAgICAvLyBBIHByZXZpb3VzIGVycm9yIG1heSBoYXZlIGFsbG93ZWQgdGhl
IG9yaWdpbiB0byBleGNlZWQgaXRzIHF1b3RhLCBvciBtYXkKICAgICAvLyBoYXZlIGFsbG93ZWQg
dGhpcyBkYXRhYmFzZSB0byBleGNlZWQgb3VyIGNhY2hlZCBlc3RpbWF0ZSBvZiB0aGUgb3JpZ2lu
CkBAIC0zMDUsMTIgKzI5Miw2IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6
OmdldE0KICAgICByZXR1cm4gbWF4U2l6ZTsKIH0KIAotdm9pZCBEYXRhYmFzZVRyYWNrZXI6OmRh
dGFiYXNlQ2hhbmdlZChEYXRhYmFzZUJhY2tlbmRCYXNlKiBkYXRhYmFzZSkKLXsKLSAgICBMb2Nr
ZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFNYW5h
Z2VyKCkpOwotICAgIG9yaWdpblF1b3RhTWFuYWdlcigpLm1hcmtEYXRhYmFzZShkYXRhYmFzZSk7
Ci19Ci0KIHZvaWQgRGF0YWJhc2VUcmFja2VyOjppbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250
ZXh0KGNvbnN0IERhdGFiYXNlQmFja2VuZENvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgVmVjdG9y
PFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRCYXNlPiA+IG9wZW5EYXRhYmFzZXM7CkBAIC0zNDgsNyAr
MzI5LDYgQEAgU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6b3JpZ2luUGF0aChTZWN1cgogU3RyaW5n
IERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYmFzZU5vTG9jayhTZWN1cml0eU9yaWdp
biogb3JpZ2luLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgY3JlYXRlSWZOb3RFeGlzdHMpCiB7
CiAgICAgQVNTRVJUKCFtX2RhdGFiYXNlR3VhcmQudHJ5TG9jaygpKTsKLSAgICBBU1NFUlQoIW9y
aWdpblF1b3RhTWFuYWdlcigpLnRyeUxvY2soKSk7CiAKICAgICBTdHJpbmcgb3JpZ2luSWRlbnRp
ZmllciA9IG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCk7CiAgICAgU3RyaW5nIG9yaWdpblBh
dGggPSB0aGlzLT5vcmlnaW5QYXRoKG9yaWdpbik7CkBAIC0zODgsOCArMzY4LDYgQEAgU3RyaW5n
IERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYgogICAgIC8vIElmIHRoaXMgb3JpZ2lu
J3MgcXVvdGEgaXMgYmVpbmcgdHJhY2tlZCAob3BlbiBoYW5kbGUgdG8gYSBkYXRhYmFzZSBpbiB0
aGlzIG9yaWdpbiksIGFkZCB0aGlzIG5ldyBkYXRhYmFzZQogICAgIC8vIHRvIHRoZSBxdW90YSBt
YW5hZ2VyIG5vdwogICAgIFN0cmluZyBmdWxsRmlsZVBhdGggPSBTUUxpdGVGaWxlU3lzdGVtOjph
cHBlbmREYXRhYmFzZUZpbGVOYW1lVG9QYXRoKG9yaWdpblBhdGgsIGZpbGVOYW1lKTsKLSAgICBp
ZiAob3JpZ2luUXVvdGFNYW5hZ2VyKCkudHJhY2tzT3JpZ2luKG9yaWdpbikpCi0gICAgICAgIG9y
aWdpblF1b3RhTWFuYWdlcigpLmFkZERhdGFiYXNlKG9yaWdpbiwgbmFtZSwgZnVsbEZpbGVQYXRo
KTsKIAogICAgIHJldHVybiBmdWxsRmlsZVBhdGg7CiB9CkBAIC0zOTcsOCArMzc1LDYgQEAgU3Ry
aW5nIERhdGFiYXNlVHJhY2tlcjo6ZnVsbFBhdGhGb3JEYXRhYgogU3RyaW5nIERhdGFiYXNlVHJh
Y2tlcjo6ZnVsbFBhdGhGb3JEYXRhYmFzZShTZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGJvb2wgY3JlYXRlSWZOb3RFeGlzdHMpCiB7CiAgICAgTXV0ZXhMb2NrZXIg
bG9ja0RhdGFiYXNlKG1fZGF0YWJhc2VHdWFyZCk7Ci0gICAgTG9ja2VyPE9yaWdpblF1b3RhTWFu
YWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKLQogICAgIHJl
dHVybiBmdWxsUGF0aEZvckRhdGFiYXNlTm9Mb2NrKG9yaWdpbiwgbmFtZSwgY3JlYXRlSWZOb3RF
eGlzdHMpLmlzb2xhdGVkQ29weSgpOwogfQogCkBAIC02MDcsMTIgKzU4Myw2IEBAIHZvaWQgRGF0
YWJhc2VUcmFja2VyOjphZGRPcGVuRGF0YWJhc2UoRGEKICAgICAgICAgZGF0YWJhc2VTZXQtPmFk
ZChkYXRhYmFzZSk7CiAKICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJBZGRlZCBvcGVuIERhdGFi
YXNlICVzICglcClcbiIsIGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCkuYXNjaWkoKS5kYXRh
KCksIGRhdGFiYXNlKTsKLQotICAgICAgICBMb2NrZXI8T3JpZ2luUXVvdGFNYW5hZ2VyPiBxdW90
YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkpOwotICAgICAgICBpZiAoIW9yaWdp
blF1b3RhTWFuYWdlcigpLnRyYWNrc09yaWdpbihkYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW4oKSkp
IHsKLSAgICAgICAgICAgIG9yaWdpblF1b3RhTWFuYWdlcigpLnRyYWNrT3JpZ2luKGRhdGFiYXNl
LT5zZWN1cml0eU9yaWdpbigpKTsKLSAgICAgICAgICAgIG9yaWdpblF1b3RhTWFuYWdlcigpLmFk
ZERhdGFiYXNlKGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpLCBkYXRhYmFzZS0+c3RyaW5nSWRl
bnRpZmllcigpLCBkYXRhYmFzZS0+ZmlsZU5hbWUoKSk7Ci0gICAgICAgIH0KICAgICB9CiB9CiAK
QEAgLTY1Nyw5ICs2MjcsNiBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlT3BlbkRhdGFi
YXNlCiAKICAgICAgICAgbV9vcGVuRGF0YWJhc2VNYXAtPnJlbW92ZShkYXRhYmFzZS0+c2VjdXJp
dHlPcmlnaW4oKSk7CiAgICAgICAgIGRlbGV0ZSBuYW1lTWFwOwotCi0gICAgICAgIExvY2tlcjxP
cmlnaW5RdW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxvY2tlcihvcmlnaW5RdW90YU1hbmFnZXIo
KSk7Ci0gICAgICAgIG9yaWdpblF1b3RhTWFuYWdlcigpLnJlbW92ZU9yaWdpbihkYXRhYmFzZS0+
c2VjdXJpdHlPcmlnaW4oKSk7CiAgICAgfQogfQogCkBAIC02ODEsMzcgKzY0OCwxOSBAQCB2b2lk
IERhdGFiYXNlVHJhY2tlcjo6Z2V0T3BlbkRhdGFiYXNlcyhTCiAgICAgICAgIGRhdGFiYXNlcy0+
YWRkKCppdCk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhYmFzZVRyYWNrZXI6OnVzYWdl
Rm9yT3JpZ2luTm9Mb2NrKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCi17Ci0gICAgQVNTRVJUKCFv
cmlnaW5RdW90YU1hbmFnZXIoKS50cnlMb2NrKCkpOwotCi0gICAgLy8gVXNlIHRoZSBPcmlnaW5R
dW90YU1hbmFnZXIgbWVjaGFuaXNtIHRvIGNhbGN1bGF0ZSB0aGUgdXNhZ2UKLSAgICBpZiAob3Jp
Z2luUXVvdGFNYW5hZ2VyKCkudHJhY2tzT3JpZ2luKG9yaWdpbikpCi0gICAgICAgIHJldHVybiBv
cmlnaW5RdW90YU1hbmFnZXIoKS5kaXNrVXNhZ2Uob3JpZ2luKTsKLQotICAgIC8vIElmIHRoZSBP
cmlnaW5RdW90YU1hbmFnZXIgZG9lc24ndCB0cmFjayB0aGlzIG9yaWdpbiBhbHJlYWR5LCBwcmlt
ZSBpdCB0byBkbyBzbwotICAgIG9yaWdpblF1b3RhTWFuYWdlcigpLnRyYWNrT3JpZ2luKG9yaWdp
bik7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiBuYW1lczsKLSAgICBkYXRhYmFzZU5hbWVzRm9yT3Jp
Z2luTm9Mb2NrKG9yaWdpbiwgbmFtZXMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG5hbWVzLnNpemUoKTsgKytpKQotICAgICAgICBvcmlnaW5RdW90YU1hbmFnZXIoKS5hZGREYXRh
YmFzZShvcmlnaW4sIG5hbWVzW2ldLCBmdWxsUGF0aEZvckRhdGFiYXNlTm9Mb2NrKG9yaWdpbiwg
bmFtZXNbaV0sIGZhbHNlKSk7Ci0KLSAgICBpZiAoIW9yaWdpblF1b3RhTWFuYWdlcigpLnRyYWNr
c09yaWdpbihvcmlnaW4pKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIE9yaWdpblF1b3Rh
TWFuYWdlcjo6ZGlza1VzYWdlKCkgbWF5IHJlc3VsdCBpbiBhIGRpc2sgc2NhbiB0byBjb21wdXRl
IHRoZQotICAgIC8vIHN1bSBvZiBkaXNrIHVzYWdlIG9mIGFsbCBkYXRhYmFzZXMgZnJvbSB0aGlz
IHNwZWNpZmllZCBvcmlnaW4gaWYgaXRzCi0gICAgLy8gY2FjaGVkIHVzYWdlIHZhbHVlIGlzIGRl
dGVybWluZWQgdG8gYmUgb3V0ZGF0ZWQuCi0gICAgcmV0dXJuIG9yaWdpblF1b3RhTWFuYWdlcigp
LmRpc2tVc2FnZShvcmlnaW4pOwotfQotCiB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFj
a2VyOjp1c2FnZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQogewotICAgIE11dGV4
TG9ja2VyIGxvY2tEYXRhYmFzZShtX2RhdGFiYXNlR3VhcmQpOwotICAgIExvY2tlcjxPcmlnaW5R
dW90YU1hbmFnZXI+IHF1b3RhTWFuYWdlckxvY2tlcihvcmlnaW5RdW90YU1hbmFnZXIoKSk7Ci0g
ICAgcmV0dXJuIHVzYWdlRm9yT3JpZ2luTm9Mb2NrKG9yaWdpbik7CisgICAgU3RyaW5nIG9yaWdp
blBhdGggPSB0aGlzLT5vcmlnaW5QYXRoKG9yaWdpbik7CisgICAgdW5zaWduZWQgbG9uZyBsb25n
IGRpc2tVc2FnZSA9IDA7CisgICAgVmVjdG9yPFN0cmluZz4gZmlsZU5hbWVzID0gbGlzdERpcmVj
dG9yeShvcmlnaW5QYXRoLCBTdHJpbmcoIiouZGIiKSk7CisgICAgVmVjdG9yPFN0cmluZz46Oml0
ZXJhdG9yIGZpbGVOYW1lID0gZmlsZU5hbWVzLmJlZ2luKCk7CisgICAgVmVjdG9yPFN0cmluZz46
Oml0ZXJhdG9yIGxhc3RGaWxlTmFtZSA9IGZpbGVOYW1lcy5lbmQoKTsKKyAgICBmb3IgKDsgZmls
ZU5hbWUgIT0gbGFzdEZpbGVOYW1lOyArK2ZpbGVOYW1lKSB7CisgICAgICAgIGxvbmcgbG9uZyBz
aXplOworICAgICAgICBnZXRGaWxlU2l6ZSgqZmlsZU5hbWUsIHNpemUpOworICAgICAgICBkaXNr
VXNhZ2UgKz0gc2l6ZTsKKyAgICB9CisgICAgcmV0dXJuIGRpc2tVc2FnZTsKIH0KIAogdW5zaWdu
ZWQgbG9uZyBsb25nIERhdGFiYXNlVHJhY2tlcjo6cXVvdGFGb3JPcmlnaW5Ob0xvY2soU2VjdXJp
dHlPcmlnaW4qIG9yaWdpbikKQEAgLTg4MywxMSArODMyLDYgQEAgYm9vbCBEYXRhYmFzZVRyYWNr
ZXI6OmRlbGV0ZU9yaWdpbihTZWN1cgogICAgICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9y
aWdpblBvc3NpYmx5TGFzdFJlZmVyZW5jZSA9IG9yaWdpbjsKICAgICAgICAgbV9xdW90YU1hcC0+
cmVtb3ZlKG9yaWdpbik7CiAKLSAgICAgICAgewotICAgICAgICAgICAgTG9ja2VyPE9yaWdpblF1
b3RhTWFuYWdlcj4gcXVvdGFNYW5hZ2VyTG9ja2VyKG9yaWdpblF1b3RhTWFuYWdlcigpKTsKLSAg
ICAgICAgICAgIG9yaWdpblF1b3RhTWFuYWdlcigpLnJlbW92ZU9yaWdpbihvcmlnaW4pOwotICAg
ICAgICB9Ci0KICAgICAgICAgLy8gSWYgd2UgcmVtb3ZlZCB0aGUgbGFzdCBvcmlnaW4sIGRvIHNv
bWUgYWRkaXRpb25hbCBkZWxldGlvbi4KICAgICAgICAgaWYgKG1fcXVvdGFNYXAtPmlzRW1wdHko
KSkgewogICAgICAgICAgICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpCkBAIC0xMDYwLDExICsx
MDA0LDYgQEAgYm9vbCBEYXRhYmFzZVRyYWNrZXI6OmRlbGV0ZURhdGFiYXNlKFNlYwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgewotICAgICAgICBMb2NrZXI8T3JpZ2luUXVv
dGFNYW5hZ2VyPiBxdW90YU1hbmFnZXJMb2NrZXIob3JpZ2luUXVvdGFNYW5hZ2VyKCkpOwotICAg
ICAgICBvcmlnaW5RdW90YU1hbmFnZXIoKS5yZW1vdmVEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwot
ICAgIH0KLQogICAgIGlmIChtX2NsaWVudCkgewogICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hE
aWRNb2RpZnlPcmlnaW4ob3JpZ2luKTsKICAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkTW9k
aWZ5RGF0YWJhc2Uob3JpZ2luLCBuYW1lKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuaAkocmV2aXNpb24gMTQ0MDAy
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZXRP
cGVuRGF0YWJhc2VzKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBIYXNoU2V0
PFJlZlB0cjxEYXRhYmFzZUJhY2tlbmRCYXNlPiA+KiBkYXRhYmFzZXMpOwogCiAgICAgdW5zaWdu
ZWQgbG9uZyBsb25nIGdldE1heFNpemVGb3JEYXRhYmFzZShjb25zdCBEYXRhYmFzZUJhY2tlbmRC
YXNlKik7Ci0gICAgdm9pZCBkYXRhYmFzZUNoYW5nZWQoRGF0YWJhc2VCYWNrZW5kQmFzZSopOwog
CiAgICAgdm9pZCBpbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KGNvbnN0IERhdGFiYXNl
QmFja2VuZENvbnRleHQqKTsKIApAQCAtMTIxLDcgKzEyMCw2IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBoYXNFbnRyeUZvck9yaWdpbk5vTG9jayhTZWN1cml0eU9yaWdpbiogb3JpZ2luKTsKICAgICBT
dHJpbmcgZnVsbFBhdGhGb3JEYXRhYmFzZU5vTG9jayhTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCBjcmVhdGVJZkRvZXNOb3RFeGlzdCk7CiAgICAgYm9vbCBkYXRhYmFz
ZU5hbWVzRm9yT3JpZ2luTm9Mb2NrKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFZlY3RvcjxTdHJp
bmc+JiByZXN1bHRWZWN0b3IpOwotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1c2FnZUZvck9yaWdp
bk5vTG9jayhTZWN1cml0eU9yaWdpbiogb3JpZ2luKTsKICAgICB1bnNpZ25lZCBsb25nIGxvbmcg
cXVvdGFGb3JPcmlnaW5Ob0xvY2soU2VjdXJpdHlPcmlnaW4qIG9yaWdpbik7CiAKICAgICBTdHJp
bmcgdHJhY2tlckRhdGFiYXNlUGF0aCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5RdW90YU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcAko
cmV2aXNpb24gMTQ0MDAyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9P
cmlnaW5RdW90YU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzNyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAot
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk9yaWdpblF1b3RhTWFuYWdlci5oIgotCi0jaWYg
RU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkRhdGFiYXNlQmFja2VuZEJhc2UuaCIK
LSNpbmNsdWRlICJPcmlnaW5Vc2FnZVJlY29yZC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LU9yaWdpblF1b3RhTWFuYWdlcjo6T3JpZ2luUXVvdGFNYW5hZ2VyKCkKLSNpZm5kZWYgTkRFQlVH
Ci0gICAgOiBtX3VzYWdlUmVjb3JkR3VhcmRMb2NrZWQoZmFsc2UpCi0jZW5kaWYKLXsKLX0KLQot
Ym9vbCBPcmlnaW5RdW90YU1hbmFnZXI6OnRyeUxvY2soKQotewotICAgIGJvb2wgbG9ja2VkID0g
bV91c2FnZVJlY29yZEd1YXJkLnRyeUxvY2soKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgaWYgKGxv
Y2tlZCkKLSAgICAgICAgbV91c2FnZVJlY29yZEd1YXJkTG9ja2VkID0gdHJ1ZTsKLSAgICBlbHNl
Ci0gICAgICAgIEFTU0VSVChtX3VzYWdlUmVjb3JkR3VhcmRMb2NrZWQpOwotI2VuZGlmCi0gICAg
cmV0dXJuIGxvY2tlZDsKLX0KLQotdm9pZCBPcmlnaW5RdW90YU1hbmFnZXI6OmxvY2soKQotewot
ICAgIG1fdXNhZ2VSZWNvcmRHdWFyZC5sb2NrKCk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1fdXNh
Z2VSZWNvcmRHdWFyZExvY2tlZCA9IHRydWU7Ci0jZW5kaWYKLX0KLQotdm9pZCBPcmlnaW5RdW90
YU1hbmFnZXI6OnVubG9jaygpCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1fdXNhZ2VSZWNvcmRH
dWFyZExvY2tlZCA9IGZhbHNlOwotI2VuZGlmCi0gICAgbV91c2FnZVJlY29yZEd1YXJkLnVubG9j
aygpOwotfQotCi12b2lkIE9yaWdpblF1b3RhTWFuYWdlcjo6dHJhY2tPcmlnaW4oUGFzc1JlZlB0
cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luKQotewotICAgIEFTU0VSVChtX3VzYWdlUmVjb3JkR3Vh
cmRMb2NrZWQpOwotICAgIEFTU0VSVCghbV91c2FnZU1hcC5jb250YWlucyhvcmlnaW4uZ2V0KCkp
KTsKLQotICAgIG1fdXNhZ2VNYXAuc2V0KG9yaWdpbi0+aXNvbGF0ZWRDb3B5KCksIG5ldyBPcmln
aW5Vc2FnZVJlY29yZCk7Ci19Ci0KLWJvb2wgT3JpZ2luUXVvdGFNYW5hZ2VyOjp0cmFja3NPcmln
aW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikgY29uc3QKLXsKLSAgICBBU1NFUlQobV91c2FnZVJl
Y29yZEd1YXJkTG9ja2VkKTsKLSAgICByZXR1cm4gbV91c2FnZU1hcC5jb250YWlucyhvcmlnaW4p
OwotfQotCi12b2lkIE9yaWdpblF1b3RhTWFuYWdlcjo6YWRkRGF0YWJhc2UoU2VjdXJpdHlPcmln
aW4qIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgZnVsbFBhdGgpCi17Ci0gICAgQVNTRVJUKG1fdXNhZ2VSZWNvcmRHdWFyZExvY2tlZCk7Ci0K
LSAgICBPcmlnaW5Vc2FnZVJlY29yZCogdXNhZ2VSZWNvcmQgPSBtX3VzYWdlTWFwLmdldChvcmln
aW4pOwotICAgIEFTU0VSVCh1c2FnZVJlY29yZCk7Ci0KLSAgICB1c2FnZVJlY29yZC0+YWRkRGF0
YWJhc2UoZGF0YWJhc2VJZGVudGlmaWVyLmlzb2xhdGVkQ29weSgpLCBmdWxsUGF0aC5pc29sYXRl
ZENvcHkoKSk7Ci19Ci0KLXZvaWQgT3JpZ2luUXVvdGFNYW5hZ2VyOjpyZW1vdmVEYXRhYmFzZShT
ZWN1cml0eU9yaWdpbiogb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRpZmllcikK
LXsKLSAgICBBU1NFUlQobV91c2FnZVJlY29yZEd1YXJkTG9ja2VkKTsKLQotICAgIGlmIChPcmln
aW5Vc2FnZVJlY29yZCogdXNhZ2VSZWNvcmQgPSBtX3VzYWdlTWFwLmdldChvcmlnaW4pKQotICAg
ICAgICB1c2FnZVJlY29yZC0+cmVtb3ZlRGF0YWJhc2UoZGF0YWJhc2VJZGVudGlmaWVyKTsKLX0K
LQotdm9pZCBPcmlnaW5RdW90YU1hbmFnZXI6OnJlbW92ZU9yaWdpbihTZWN1cml0eU9yaWdpbiog
b3JpZ2luKQotewotICAgIEFTU0VSVChtX3VzYWdlUmVjb3JkR3VhcmRMb2NrZWQpOwotCi0gICAg
aWYgKE9yaWdpblVzYWdlUmVjb3JkKiB1c2FnZVJlY29yZCA9IG1fdXNhZ2VNYXAuZ2V0KG9yaWdp
bikpIHsKLSAgICAgICAgbV91c2FnZU1hcC5yZW1vdmUob3JpZ2luKTsKLSAgICAgICAgZGVsZXRl
IHVzYWdlUmVjb3JkOwotICAgIH0KLX0KLQotdm9pZCBPcmlnaW5RdW90YU1hbmFnZXI6Om1hcmtE
YXRhYmFzZShEYXRhYmFzZUJhY2tlbmRCYXNlKiBkYXRhYmFzZSkKLXsKLSAgICBBU1NFUlQoZGF0
YWJhc2UpOwotICAgIEFTU0VSVChtX3VzYWdlUmVjb3JkR3VhcmRMb2NrZWQpOwotICAgIE9yaWdp
blVzYWdlUmVjb3JkKiB1c2FnZVJlY29yZCA9IG1fdXNhZ2VNYXAuZ2V0KGRhdGFiYXNlLT5zZWN1
cml0eU9yaWdpbigpKTsKLSAgICBBU1NFUlQodXNhZ2VSZWNvcmQpOwotCi0gICAgdXNhZ2VSZWNv
cmQtPm1hcmtEYXRhYmFzZShkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpKTsKLX0KLQotdW5z
aWduZWQgbG9uZyBsb25nIE9yaWdpblF1b3RhTWFuYWdlcjo6ZGlza1VzYWdlKFNlY3VyaXR5T3Jp
Z2luKiBvcmlnaW4pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fdXNhZ2VSZWNvcmRHdWFyZExvY2tl
ZCk7Ci0KLSAgICBPcmlnaW5Vc2FnZVJlY29yZCogdXNhZ2VSZWNvcmQgPSBtX3VzYWdlTWFwLmdl
dChvcmlnaW4pOwotICAgIEFTU0VSVCh1c2FnZVJlY29yZCk7Ci0KLSAgICByZXR1cm4gdXNhZ2VS
ZWNvcmQtPmRpc2tVc2FnZSgpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFC
QVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5RdW90
YU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL09yaWdpblF1b3RhTWFuYWdlci5oCShyZXZpc2lvbiAxNDQwMDIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblF1b3RhTWFuYWdlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgT3JpZ2luUXVvdGFNYW5hZ2VyX2gKLSNkZWZp
bmUgT3JpZ2luUXVvdGFNYW5hZ2VyX2gKLQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNp
bmNsdWRlICJTZWN1cml0eU9yaWdpbkhhc2guaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgot
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRGF0YWJhc2VCYWNrZW5kQmFzZTsK
LWNsYXNzIE9yaWdpblVzYWdlUmVjb3JkOwotY2xhc3MgU2VjdXJpdHlPcmlnaW47Ci0KLWNsYXNz
IE9yaWdpblF1b3RhTWFuYWdlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoT3JpZ2luUXVv
dGFNYW5hZ2VyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgT3JpZ2lu
UXVvdGFNYW5hZ2VyKCk7Ci0KLSAgICBib29sIHRyeUxvY2soKTsKLSAgICB2b2lkIGxvY2soKTsK
LSAgICB2b2lkIHVubG9jaygpOwotCi0gICAgdm9pZCB0cmFja09yaWdpbihQYXNzUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPik7Ci0gICAgYm9vbCB0cmFja3NPcmlnaW4oU2VjdXJpdHlPcmlnaW4qKSBj
b25zdDsKLSAgICB2b2lkIGFkZERhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5n
JiBkYXRhYmFzZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZnVsbFBhdGgpOwotICAgIHZvaWQg
cmVtb3ZlRGF0YWJhc2UoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRl
bnRpZmllcik7Ci0gICAgdm9pZCByZW1vdmVPcmlnaW4oU2VjdXJpdHlPcmlnaW4qKTsKLQotICAg
IHZvaWQgbWFya0RhdGFiYXNlKERhdGFiYXNlQmFja2VuZEJhc2UqKTsgLy8gTWFyayBkaXJ0aW5l
c3Mgb2YgYSBzcGVjaWZpYyBkYXRhYmFzZS4KLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgZGlza1Vz
YWdlKFNlY3VyaXR5T3JpZ2luKikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgbXV0YWJsZSBNdXRl
eCBtX3VzYWdlUmVjb3JkR3VhcmQ7Ci0jaWZuZGVmIE5ERUJVRwotICAgIGJvb2wgbV91c2FnZVJl
Y29yZEd1YXJkTG9ja2VkOwotI2VuZGlmCi0KLSAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiwgT3JpZ2luVXNhZ2VSZWNvcmQqPiBPcmlnaW5Vc2FnZU1hcDsKLSAgICBP
cmlnaW5Vc2FnZU1hcCBtX3VzYWdlTWFwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIE9yaWdpblF1b3Rh
TWFuYWdlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdp
blVzYWdlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL09yaWdpblVzYWdlUmVjb3JkLmNwcAkocmV2aXNpb24gMTQ0MDAyKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiT3JpZ2luVXNhZ2VSZWNvcmQuaCIKLQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNp
bmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotT3Jp
Z2luVXNhZ2VSZWNvcmQ6Ok9yaWdpblVzYWdlUmVjb3JkKCkKLSAgICA6IG1fY2FjaGVkRGlza1Vz
YWdlSXNWYWxpZChmYWxzZSkKLXsKLX0KLQotdm9pZCBPcmlnaW5Vc2FnZVJlY29yZDo6YWRkRGF0
YWJhc2UoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGZ1bGxQYXRoKQot
ewotICAgIEFTU0VSVCghbV9kYXRhYmFzZU1hcC5jb250YWlucyhpZGVudGlmaWVyKSk7Ci0gICAg
QVNTRVJUX0FSRyhpZGVudGlmaWVyLCBpZGVudGlmaWVyLmltcGwoKS0+aGFzT25lUmVmKCkgfHwg
aWRlbnRpZmllci5pc0VtcHR5KCkpOwotICAgIEFTU0VSVF9BUkcoZnVsbFBhdGgsIGZ1bGxQYXRo
LmltcGwoKS0+aGFzT25lUmVmKCkgfHwgZnVsbFBhdGguaXNFbXB0eSgpKTsKLQotICAgIG1fZGF0
YWJhc2VNYXAuc2V0KGlkZW50aWZpZXIsIERhdGFiYXNlRW50cnkoZnVsbFBhdGgpKTsKLSAgICBt
X3Vua25vd25TZXQuYWRkKGlkZW50aWZpZXIpOwotCi0gICAgbV9jYWNoZWREaXNrVXNhZ2VJc1Zh
bGlkID0gZmFsc2U7Ci19Ci0KLXZvaWQgT3JpZ2luVXNhZ2VSZWNvcmQ6OnJlbW92ZURhdGFiYXNl
KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikKLXsKLSAgICBBU1NFUlQobV9kYXRhYmFzZU1hcC5j
b250YWlucyhpZGVudGlmaWVyKSk7Ci0KLSAgICBtX2RhdGFiYXNlTWFwLnJlbW92ZShpZGVudGlm
aWVyKTsKLSAgICBtX3Vua25vd25TZXQucmVtb3ZlKGlkZW50aWZpZXIpOwotICAgIG1fY2FjaGVk
RGlza1VzYWdlSXNWYWxpZCA9IGZhbHNlOwotfQotCi12b2lkIE9yaWdpblVzYWdlUmVjb3JkOjpt
YXJrRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQotewotICAgIEFTU0VSVChtX2Rh
dGFiYXNlTWFwLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKLSAgICBBU1NFUlRfQVJHKGlkZW50aWZp
ZXIsIGlkZW50aWZpZXIuaW1wbCgpLT5oYXNPbmVSZWYoKSB8fCBpZGVudGlmaWVyLmlzRW1wdHko
KSk7Ci0KLSAgICBtX3Vua25vd25TZXQuYWRkKGlkZW50aWZpZXIpOwotICAgIG1fY2FjaGVkRGlz
a1VzYWdlSXNWYWxpZCA9IGZhbHNlOwotfQotCi11bnNpZ25lZCBsb25nIGxvbmcgT3JpZ2luVXNh
Z2VSZWNvcmQ6OmRpc2tVc2FnZSgpCi17Ci0gICAgLy8gVXNlIHRoZSBsYXN0IGNhY2hlZCB1c2Fn
ZSB2YWx1ZSBpZiB3ZSBoYXZlIGl0LgotICAgIGlmIChtX2NhY2hlZERpc2tVc2FnZUlzVmFsaWQp
Ci0gICAgICAgIHJldHVybiBtX2NhY2hlZERpc2tVc2FnZTsKLQotICAgIC8vIHN0YXQoKSBmb3Ig
dGhlIHNpemVzIGtub3duIHRvIGJlIGRpcnR5LgotICAgIEhhc2hTZXQ8U3RyaW5nPjo6aXRlcmF0
b3IgaVVua25vd24gPSBtX3Vua25vd25TZXQuYmVnaW4oKTsKLSAgICBIYXNoU2V0PFN0cmluZz46
Oml0ZXJhdG9yIGVuZFVua25vd24gPSBtX3Vua25vd25TZXQuZW5kKCk7Ci0gICAgZm9yICg7IGlV
bmtub3duICE9IGVuZFVua25vd247ICsraVVua25vd24pIHsKLSAgICAgICAgY29uc3QgU3RyaW5n
JiBwYXRoID0gbV9kYXRhYmFzZU1hcC5nZXQoKmlVbmtub3duKS5maWxlbmFtZTsKLSAgICAgICAg
QVNTRVJUKCFwYXRoLmlzRW1wdHkoKSk7Ci0KLSAgICAgICAgLy8gV2hlbiB3ZSBjYW4ndCBkZXRl
cm1pbmUgdGhlIGZpbGUgc2l6ZSwgd2UnbGwganVzdCBoYXZlIHRvIGFzc3VtZSB0aGUgZmlsZSBp
cyBtaXNzaW5nL2luYWNjZXNzaWJsZS4KLSAgICAgICAgbG9uZyBsb25nIHNpemUgPSBTUUxpdGVG
aWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKHBhdGgpOwotICAgICAgICBtX2RhdGFiYXNl
TWFwLnNldCgqaVVua25vd24sIERhdGFiYXNlRW50cnkocGF0aCwgc2l6ZSkpOwotICAgIH0KLSAg
ICBtX3Vua25vd25TZXQuY2xlYXIoKTsKLQotICAgIC8vIFJlY2FsY3VsYXRlIHRoZSBjYWNoZWQg
dXNhZ2UgdmFsdWUuCi0gICAgbV9jYWNoZWREaXNrVXNhZ2UgPSAwOwotICAgIEhhc2hNYXA8U3Ry
aW5nLCBEYXRhYmFzZUVudHJ5Pjo6aXRlcmF0b3IgaURhdGFiYXNlID0gbV9kYXRhYmFzZU1hcC5i
ZWdpbigpOwotICAgIEhhc2hNYXA8U3RyaW5nLCBEYXRhYmFzZUVudHJ5Pjo6aXRlcmF0b3IgZW5k
RGF0YWJhc2UgPSBtX2RhdGFiYXNlTWFwLmVuZCgpOwotICAgIGZvciAoOyBpRGF0YWJhc2UgIT0g
ZW5kRGF0YWJhc2U7ICsraURhdGFiYXNlKQotICAgICAgICBtX2NhY2hlZERpc2tVc2FnZSArPSBp
RGF0YWJhc2UtPnZhbHVlLnNpemU7Ci0KLSAgICBtX2NhY2hlZERpc2tVc2FnZUlzVmFsaWQgPSB0
cnVlOwotICAgIHJldHVybiBtX2NhY2hlZERpc2tVc2FnZTsKLX0KLQotfQotCi0jZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdp
blVzYWdlUmVjb3JkLmgJKHJldmlzaW9uIDE0NDAwMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotI2lmbmRlZiBPcmlnaW5Vc2FnZVJlY29yZF9oCi0jZGVmaW5lIE9yaWdpblVzYWdl
UmVjb3JkX2gKLQotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0KLSNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+IAotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi0vLyBPYmplY3RzIG9mIHRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgZnJvbSBt
dWx0aXBsZSB0aHJlYWRzIHdpdGggZXh0ZXJuYWwgc3luY2hyb25pemF0aW9uLgotLy8gU3RyaW5n
IGFyZ3VtZW50cyBhcmUgYWxzbyBzdXBwb3NlZCB0byBiZSBkZWVwbHkgY29waWVkIGJ5IHRoZSBj
YWxsZXIgd2hlbiBuZWNlc3NhcnkuCi1jbGFzcyBPcmlnaW5Vc2FnZVJlY29yZCB7Ci0gICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoT3JpZ2luVXNhZ2VSZWNvcmQpOyBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBPcmlnaW5Vc2FnZVJlY29yZCgpOwotCi0gICAgdm9pZCBhZGRE
YXRhYmFzZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZnVsbFBhdGgp
OwotICAgIHZvaWQgcmVtb3ZlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKTsKLSAg
ICB2b2lkIG1hcmtEYXRhYmFzZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIpOyAvLyBTaXplIG1h
eSBoYXZlIGNoYW5nZWQsIGFuZCB3aWxsIG5lZWQgdG8gYmUgcmVjYWxjdWxhdGVkLgotICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyBkaXNrVXNhZ2UoKTsKLQotcHJpdmF0ZToKLSAgICBzdHJ1Y3QgRGF0
YWJhc2VFbnRyeSB7Ci0gICAgICAgIERhdGFiYXNlRW50cnkoKSB7IH0KLSAgICAgICAgRGF0YWJh
c2VFbnRyeShjb25zdCBTdHJpbmcmIGZpbGVuYW1lKSA6IGZpbGVuYW1lKGZpbGVuYW1lKSB7IH0K
LSAgICAgICAgRGF0YWJhc2VFbnRyeShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCB1bnNpZ25lZCBs
b25nIGxvbmcgc2l6ZSkgOiBmaWxlbmFtZShmaWxlbmFtZSksIHNpemUoc2l6ZSkgeyB9Ci0gICAg
ICAgIFN0cmluZyBmaWxlbmFtZTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHNpemU7IC8v
IFRoaXMgbWVtYmVyIHJlbWFpbnMgdW5pbml0aWFsaXplZCB1bnRpbCBkaXNrIHVzYWdlIGlzIGNh
bGN1bGF0ZWQuCi0gICAgfTsKLSAgICBIYXNoTWFwPFN0cmluZywgRGF0YWJhc2VFbnRyeT4gbV9k
YXRhYmFzZU1hcDsKLSAgICBIYXNoU2V0PFN0cmluZz4gbV91bmtub3duU2V0OwotCi0gICAgdW5z
aWduZWQgbG9uZyBsb25nIG1fY2FjaGVkRGlza1VzYWdlOwotICAgIGJvb2wgbV9jYWNoZWREaXNr
VXNhZ2VJc1ZhbGlkOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQot
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5z
YWN0aW9uQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCShyZXZpc2lvbiAxNDQwMDIpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFja2Vu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3Nyw4ICs2NzcsNiBAQCBTUUxUcmFuc2FjdGlvblN0
YXRlIFNRTFRyYW5zYWN0aW9uQmFja2VuCiAgICAgICAgIGlmIChtX2RhdGFiYXNlLT5sYXN0QWN0
aW9uQ2hhbmdlZERhdGFiYXNlKCkpIHsKICAgICAgICAgICAgIC8vIEZsYWcgdGhpcyB0cmFuc2Fj
dGlvbiBhcyBoYXZpbmcgY2hhbmdlZCB0aGUgZGF0YWJhc2UgZm9yIGxhdGVyIGRlbGVnYXRlIG5v
dGlmaWNhdGlvbgogICAgICAgICAgICAgbV9tb2RpZmllZERhdGFiYXNlID0gdHJ1ZTsKLSAgICAg
ICAgICAgIC8vIEFsc28gZGlydHkgdGhlIHNpemUgb2YgdGhpcyBkYXRhYmFzZSBmaWxlIGZvciBj
YWxjdWxhdGluZyBxdW90YSB1c2FnZQotICAgICAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rp
b25DbGllbnQoKS0+ZGlkRXhlY3V0ZVN0YXRlbWVudChEYXRhYmFzZTo6ZnJvbShkYXRhYmFzZSgp
KSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobV9jdXJyZW50U3RhdGVtZW50QmFja2VuZC0+
aGFzU3RhdGVtZW50Q2FsbGJhY2soKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFja2VuZFN5
bmMuY3BwCShyZXZpc2lvbiAxNDQwMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL1NRTFRyYW5zYWN0aW9uQmFja2VuZFN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjEsMTAgKzEyMSw4IEBAIFBhc3NSZWZQdHI8U1FMUmVzdWx0U2V0PiBTUUxUcmFuc2FjdGlvbkIK
ICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtX2RhdGFiYXNlLT5sYXN0QWN0aW9uQ2hhbmdl
ZERhdGFiYXNlKCkpIHsKKyAgICBpZiAobV9kYXRhYmFzZS0+bGFzdEFjdGlvbkNoYW5nZWREYXRh
YmFzZSgpKQogICAgICAgICBtX21vZGlmaWVkRGF0YWJhc2UgPSB0cnVlOwotICAgICAgICBtX3Ry
YW5zYWN0aW9uQ2xpZW50LT5kaWRFeGVjdXRlU3RhdGVtZW50KGRhdGFiYXNlKCkpOwotICAgIH0K
IAogICAgIHJldHVybiByZXN1bHRTZXQucmVsZWFzZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNsaWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNs
aWVudC5jcHAJKHJldmlzaW9uIDE0NDAwMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwx
MSArNDgsNiBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uQ2xpZW50OjpkaWRDb21taXRXcml0CiAgICAg
ICAgIGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbigpLCBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmll
cigpKTsKIH0KIAotdm9pZCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlkRXhlY3V0ZVN0YXRlbWVu
dChEYXRhYmFzZUJhY2tlbmRCYXNlKiBkYXRhYmFzZSkKLXsKLSAgICBEYXRhYmFzZVRyYWNrZXI6
OnRyYWNrZXIoKS5kYXRhYmFzZUNoYW5nZWQoZGF0YWJhc2UpOwotfQotCiBib29sIFNRTFRyYW5z
YWN0aW9uQ2xpZW50OjpkaWRFeGNlZWRRdW90YShEYXRhYmFzZUJhY2tlbmRCYXNlKiBkYXRhYmFz
ZSkKIHsKICAgICBBU1NFUlQoZGF0YWJhc2UtPmRhdGFiYXNlQ29udGV4dCgpLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPmlzQ29udGV4dFRocmVhZCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ2xpZW50
LmgJKHJldmlzaW9uIDE0NDAwMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMVHJhbnNhY3Rpb25DbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNiBA
QCBjbGFzcyBTUUxUcmFuc2FjdGlvbkNsaWVudCB7CiBwdWJsaWM6CiAgICAgU1FMVHJhbnNhY3Rp
b25DbGllbnQoKSB7IH0KICAgICB2b2lkIGRpZENvbW1pdFdyaXRlVHJhbnNhY3Rpb24oRGF0YWJh
c2VCYWNrZW5kQmFzZSopOwotICAgIHZvaWQgZGlkRXhlY3V0ZVN0YXRlbWVudChEYXRhYmFzZUJh
Y2tlbmRCYXNlKik7CiAgICAgYm9vbCBkaWRFeGNlZWRRdW90YShEYXRhYmFzZUJhY2tlbmRCYXNl
Kik7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL2Nocm9t
aXVtL1NRTFRyYW5zYWN0aW9uQ2xpZW50Q2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vU1FMVHJhbnNhY3Rpb25DbGll
bnRDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDE0NDAwMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvY2hyb21pdW0vU1FMVHJhbnNhY3Rpb25DbGllbnRDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcyLDEyICs3Miw2IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb25DbGll
bnQ6OmRpZENvbW1pdFdyaXQKICAgICBXZWJDb3JlOjpEYXRhYmFzZU9ic2VydmVyOjpkYXRhYmFz
ZU1vZGlmaWVkKGRhdGFiYXNlKTsKIH0KIAotdm9pZCBTUUxUcmFuc2FjdGlvbkNsaWVudDo6ZGlk
RXhlY3V0ZVN0YXRlbWVudChEYXRhYmFzZUJhY2tlbmRCYXNlKiBkYXRhYmFzZSkKLXsKLSAgICAv
LyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYWZ0ZXIgZXhlY3V0aW5nIGV2ZXJ5IHN0YXRlbWVudCB0
aGF0IGNoYW5nZXMgdGhlIERCLgotICAgIC8vIENocm9taXVtIGRvZXNuJ3QgbmVlZCB0byBkbyBh
bnl0aGluZyBhdCB0aGF0IHBvaW50LgotfQotCiBib29sIFNRTFRyYW5zYWN0aW9uQ2xpZW50Ojpk
aWRFeGNlZWRRdW90YShEYXRhYmFzZUJhY2tlbmRCYXNlKiBkYXRhYmFzZSkKIHsKICAgICAvLyBD
aHJvbWl1bSBkb2VzIG5vdCBhbGxvdyB1c2VycyB0byBtYW51YWxseSBjaGFuZ2UgdGhlIHF1b3Rh
IGZvciBhbiBvcmlnaW4gKGZvciBub3csIGF0IGxlYXN0KS4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCShyZXZpc2lvbiAxNDQwMDIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkod29ya2luZyBjb3B5KQpAQCAtMjEwMyw4ICsyMTAz
LDYgQEAKICAgICAgICAgWydleGNsdWRlJywgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlXFwuY3BwJCddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAnTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZU1hbmFnZXJDbGllbnRcXC5oJCddLAogICAgICAgICBbJ2V4Y2x1
ZGUnLCAnTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXJcXC5jcHAkJ10sCi0gICAg
ICAgIFsnZXhjbHVkZScsICdNb2R1bGVzL3dlYmRhdGFiYXNlL09yaWdpblF1b3RhTWFuYWdlclxc
LihjcHB8aCkkJ10sCi0gICAgICAgIFsnZXhjbHVkZScsICdNb2R1bGVzL3dlYmRhdGFiYXNlL09y
aWdpblVzYWdlUmVjb3JkXFwuKGNwcHxoKSQnXSwKICAgICAgICAgWydleGNsdWRlJywgJ01vZHVs
ZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25DbGllbnRcXC5jcHAkJ10sCiAgICAgICAgIFsn
ZXhjbHVkZScsICdpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbFxcLmNwcCQn
XSwKICAgICAgICAgWydleGNsdWRlJywgJ2luc3BlY3Rvci9KYXZhU2NyaXB0W14vXSpcXC5jcHAk
J10sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agkocmV2aXNpb24gMTQ0MDAyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI1NTMwLDIyICsyNTUzMCw2IEBACiAJCQkJ
CT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVz
XHdlYmRhdGFiYXNlXE9yaWdpblF1b3RhTWFuYWdlci5jcHAiCi0JCQkJCT4KLQkJCQk8L0ZpbGU+
Ci0JCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXE9y
aWdpblF1b3RhTWFuYWdlci5oIgotCQkJCQk+Ci0JCQkJPC9GaWxlPgotCQkJCTxGaWxlCi0JCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxPcmlnaW5Vc2FnZVJlY29yZC5j
cHAiCi0JCQkJCT4KLQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxNb2R1bGVzXHdlYmRhdGFiYXNlXE9yaWdpblVzYWdlUmVjb3JkLmgiCi0JCQkJCT4KLQkJCQk8
L0ZpbGU+Ci0JCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHdlYmRhdGFi
YXNlXFNRTENhbGxiYWNrV3JhcHBlci5oIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCShyZXZpc2lv
biAxNDQwMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzY1LDggKzI3NjUsNiBAQAogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxEYXRhYmFzZVRocmVhZC5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXERhdGFiYXNlVHJh
Y2tlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFi
YXNlXERPTVdpbmRvd1dlYkRhdGFiYXNlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcT3JpZ2luUXVvdGFNYW5hZ2VyLmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcT3JpZ2luVXNhZ2VSZWNv
cmQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFz
ZVxTUUxFeGNlcHRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxl
c1x3ZWJkYXRhYmFzZVxTUUxSZXN1bHRTZXQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxTUUxSZXN1bHRTZXRSb3dMaXN0LmNwcCIgLz4KQEAg
LTg4MzUsOCArODgzMyw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdl
YmRhdGFiYXNlXERhdGFiYXNlVGhyZWFkLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxNb2R1bGVzXHdlYmRhdGFiYXNlXERhdGFiYXNlVHJhY2tlci5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxET01XaW5kb3dXZWJEYXRhYmFzZS5o
IiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxPcmln
aW5RdW90YU1hbmFnZXIuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNc
d2ViZGF0YWJhc2VcT3JpZ2luVXNhZ2VSZWNvcmQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcU1FMQ2FsbGJhY2tXcmFwcGVyLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTEVycm9yLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTEV4Y2Vw
dGlvbi5oIiAvPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUu
dmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4
cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2aXNpb24gMTQ0MDAyKQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCSh3b3JraW5n
IGNvcHkpCkBAIC0xODc1LDEyICsxODc1LDYgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XE1vZHVsZXNcd2ViZGF0YWJhc2VcRE9NV2luZG93V2ViRGF0YWJhc2UuY3BwIj4KICAgICAgIDxG
aWx0ZXI+TW9kdWxlc1x3ZWJkYXRhYmFzZTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJkYXRhYmFzZVxPcmlnaW5RdW90YU1h
bmFnZXIuY3BwIj4KLSAgICAgIDxGaWx0ZXI+TW9kdWxlc1x3ZWJkYXRhYmFzZTwvRmlsdGVyPgot
ICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x3ZWJk
YXRhYmFzZVxPcmlnaW5Vc2FnZVJlY29yZC5jcHAiPgotICAgICAgPEZpbHRlcj5Nb2R1bGVzXHdl
YmRhdGFiYXNlPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXFNRTEV4Y2VwdGlvbi5jcHAiPgogICAgICAgPEZp
bHRlcj5Nb2R1bGVzXHdlYmRhdGFiYXNlPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC04
NTQ3LDEyICs4NTQxLDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2Vi
ZGF0YWJhc2VcRE9NV2luZG93V2ViRGF0YWJhc2UuaCI+CiAgICAgICA8RmlsdGVyPk1vZHVsZXNc
d2ViZGF0YWJhc2U8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2VcT3JpZ2luUXVvdGFNYW5hZ2VyLmgiPgotICAg
ICAgPEZpbHRlcj5Nb2R1bGVzXHdlYmRhdGFiYXNlPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXE9yaWdpblVz
YWdlUmVjb3JkLmgiPgotICAgICAgPEZpbHRlcj5Nb2R1bGVzXHdlYmRhdGFiYXNlPC9GaWx0ZXI+
Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdl
YmRhdGFiYXNlXFNRTENhbGxiYWNrV3JhcHBlci5oIj4KICAgICAgIDxGaWx0ZXI+TW9kdWxlc1x3
ZWJkYXRhYmFzZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTQ0
MDAyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0zNzMxLDEwICszNzMxLDYgQEAKIAkJOTdCQzZBMzExNTA1RjA4
MTAwMUI3NEFDIC8qIERhdGFiYXNlVHJhY2tlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNjlFRjE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJh
c2VUcmFja2VyLmNwcCAqLzsgfTsKIAkJOTdCQzZBMzIxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFi
YXNlVHJhY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTdCQzY5RjAxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVHJhY2tlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTk3QkM2QTMzMTUwNUYw
ODEwMDFCNzRBQyAvKiBEYXRhYmFzZU1hbmFnZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3QkM2OUYxMTUwNUYwODEwMDFCNzRBQyAvKiBE
YXRhYmFzZU1hbmFnZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQk5N0JDNkEzNzE1MDVGMDgxMDAxQjc0QUMgLyogT3JpZ2luUXVvdGFN
YW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3QkM2OUY1MTUwNUYwODEwMDFCNzRBQyAvKiBPcmlnaW5RdW90YU1hbmFnZXIuY3BwICovOyB9
OwotCQk5N0JDNkEzODE1MDVGMDgxMDAxQjc0QUMgLyogT3JpZ2luUXVvdGFNYW5hZ2VyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNjlGNjE1MDVG
MDgxMDAxQjc0QUMgLyogT3JpZ2luUXVvdGFNYW5hZ2VyLmggKi87IH07Ci0JCTk3QkM2QTM5MTUw
NUYwODEwMDFCNzRBQyAvKiBPcmlnaW5Vc2FnZVJlY29yZC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JDNjlGNzE1MDVGMDgxMDAxQjc0QUMgLyog
T3JpZ2luVXNhZ2VSZWNvcmQuY3BwICovOyB9OwotCQk5N0JDNkEzQTE1MDVGMDgxMDAxQjc0QUMg
LyogT3JpZ2luVXNhZ2VSZWNvcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk3QkM2OUY4MTUwNUYwODEwMDFCNzRBQyAvKiBPcmlnaW5Vc2FnZVJlY29y
ZC5oICovOyB9OwogCQk5N0JDNkEzQjE1MDVGMDgxMDAxQjc0QUMgLyogU1FMQ2FsbGJhY2tXcmFw
cGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0JD
NjlGOTE1MDVGMDgxMDAxQjc0QUMgLyogU1FMQ2FsbGJhY2tXcmFwcGVyLmggKi87IH07CiAJCTk3
QkM2QTNDMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxFcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdCQzY5RkExNTA1RjA4MTAwMUI3NEFDIC8qIFNR
TEVycm9yLmggKi87IH07CiAJCTk3QkM2QTNFMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxFeGNlcHRp
b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTdC
QzY5RkMxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTEV4Y2VwdGlvbi5jcHAgKi87IH07CkBAIC0xMTIx
MSwxMCArMTEyMDcsNiBAQAogCQk5N0JDNjlFRjE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VU
cmFja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERhdGFiYXNl
VHJhY2tlci5jcHA7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3QkM2OUYwMTUwNUYwODEwMDFCNzRB
QyAvKiBEYXRhYmFzZVRyYWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
RGF0YWJhc2VUcmFja2VyLmg7IHBhdGggPSBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJh
Y2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5N0JDNjlGMTE1MDVGMDgxMDAx
Qjc0QUMgLyogRGF0YWJhc2VNYW5hZ2VyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERhdGFiYXNlTWFuYWdlckNsaWVudC5oOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZU1hbmFnZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJOTdCQzY5RjUxNTA1RjA4MTAwMUI3NEFDIC8qIE9yaWdpblF1b3RhTWFuYWdlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBPcmlnaW5RdW90YU1hbmFnZXIuY3Bw
OyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5RdW90YU1hbmFnZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5N0JDNjlGNjE1MDVGMDgxMDAxQjc0QUMgLyogT3Jp
Z2luUXVvdGFNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE9yaWdp
blF1b3RhTWFuYWdlci5oOyBwYXRoID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9PcmlnaW5RdW90YU1h
bmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTdCQzY5RjcxNTA1RjA4MTAw
MUI3NEFDIC8qIE9yaWdpblVzYWdlUmVjb3JkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IE9yaWdpblVzYWdlUmVjb3JkLmNwcDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0
YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk5N0JDNjlGODE1MDVGMDgxMDAxQjc0QUMgLyogT3JpZ2luVXNhZ2VSZWNvcmQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gT3JpZ2luVXNhZ2VSZWNvcmQuaDsgcGF0aCA9IE1v
ZHVsZXMvd2ViZGF0YWJhc2UvT3JpZ2luVXNhZ2VSZWNvcmQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTdCQzY5RjkxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTENhbGxiYWNrV3JhcHBl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTUUxDYWxsYmFja1dyYXBwZXIu
aDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMQ2FsbGJhY2tXcmFwcGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3QkM2OUZBMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxF
cnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTUUxFcnJvci5oOyBwYXRo
ID0gTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxFcnJvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5N0JDNjlGQjE1MDVGMDgxMDAxQjc0QUMgLyogU1FMRXJyb3IuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgbmFtZSA9IFNRTEVycm9yLmlkbDsgcGF0aCA9IE1vZHVsZXMvd2ViZGF0YWJhc2Uv
U1FMRXJyb3IuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTg3MTksMTAgKzE4
NzExLDYgQEAKIAkJCQlBOENDQkI0NjE1MUY4MzE2MDBBQjdDRTkgLyogRE9NV2luZG93V2ViRGF0
YWJhc2UuY3BwICovLAogCQkJCUE4Q0NCQjQ3MTUxRjgzMTYwMEFCN0NFOSAvKiBET01XaW5kb3dX
ZWJEYXRhYmFzZS5oICovLAogCQkJCUE4Q0NCQjRFMTUxRjgzNUEwMEFCN0NFOSAvKiBET01XaW5k
b3dXZWJEYXRhYmFzZS5pZGwgKi8sCi0JCQkJOTdCQzY5RjUxNTA1RjA4MTAwMUI3NEFDIC8qIE9y
aWdpblF1b3RhTWFuYWdlci5jcHAgKi8sCi0JCQkJOTdCQzY5RjYxNTA1RjA4MTAwMUI3NEFDIC8q
IE9yaWdpblF1b3RhTWFuYWdlci5oICovLAotCQkJCTk3QkM2OUY3MTUwNUYwODEwMDFCNzRBQyAv
KiBPcmlnaW5Vc2FnZVJlY29yZC5jcHAgKi8sCi0JCQkJOTdCQzY5RjgxNTA1RjA4MTAwMUI3NEFD
IC8qIE9yaWdpblVzYWdlUmVjb3JkLmggKi8sCiAJCQkJOTdCQzY5RjkxNTA1RjA4MTAwMUI3NEFD
IC8qIFNRTENhbGxiYWNrV3JhcHBlci5oICovLAogCQkJCTk3QkM2OUZBMTUwNUYwODEwMDFCNzRB
QyAvKiBTUUxFcnJvci5oICovLAogCQkJCTk3QkM2OUZCMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxF
cnJvci5pZGwgKi8sCkBAIC0yNTU1NSw4ICsyNTU0Myw2IEBACiAJCQkJRkRBM0U5NUMxMzRBNDlF
RjAwOEQ0QjVBIC8qIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRjRFQUY0QUYxMEM3NDJCMTAwOTEwMEQzIC8qIE9wZW5UeXBlU2FuaXRpemVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwMDE0NjI4QjEwM0NEMURFMDAwQjIwREIgLyogT3JpZ2luQWNjZXNz
RW50cnkuaCBpbiBIZWFkZXJzICovLAotCQkJCTk3QkM2QTM4MTUwNUYwODEwMDFCNzRBQyAvKiBP
cmlnaW5RdW90YU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTk3QkM2QTNBMTUwNUYwODEw
MDFCNzRBQyAvKiBPcmlnaW5Vc2FnZVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQ1ODFG
QUYxNTIwRjkxRjAwM0E3QTc1IC8qIE9zY2lsbGF0b3JOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzVFQjVERDBFODFCOEREMDBCMjU5NjUgLyogT3V0bGluZVZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQTBENTczNzBBNUM3N0ZFMDA3RURENEMgLyogT3ZlcmZsb3dFdmVudC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0yODk0OSw4ICsyODkzNSw2IEBACiAJCQkJRkRBM0U5NUIxMzRBNDlFRjAw
OEQ0QjVBIC8qIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGNEVBRjRBRTEwQzc0MkIxMDA5MTAwRDMgLyogT3BlblR5cGVTYW5pdGl6ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMDAxNDYyOEExMDNDRDFERTAwMEIyMERCIC8qIE9yaWdpbkFjY2Vz
c0VudHJ5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTk3QkM2QTM3MTUwNUYwODEwMDFCNzRBQyAv
KiBPcmlnaW5RdW90YU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTdCQzZBMzkxNTA1
RjA4MTAwMUI3NEFDIC8qIE9yaWdpblVzYWdlUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUZENTgxRkFFMTUyMEY5MUYwMDNBN0E3NSAvKiBPc2NpbGxhdG9yTm9kZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQTBENTczNjBBNUM3N0ZFMDA3RURENEMgLyogT3ZlcmZsb3dFdmVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk2NUZFQTg2OTA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5jcHAg
aW4gU291cmNlcyAqLywK
</data>
<flag name="review"
          id="210815"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>