<?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>69138</bug_id>
          
          <creation_ts>2011-09-30 01:18:14 -0700</creation_ts>
          <short_desc>Local storage getItem() for an empty string returned UNDEFINED value.</short_desc>
          <delta_ts>2018-04-07 08:38:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>184382</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Naveen Bobbili">naveenbobbili</reporter>
          <assigned_to name="Sihui Liu">sihui_liu</assigned_to>
          <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>eric</cc>
    
    <cc>hi</cc>
    
    <cc>jberlin</cc>
    
    <cc>jonathan.dong.webkit</cc>
    
    <cc>jorlow</cc>
    
    <cc>michaeln</cc>
    
    <cc>naveenbobbili</cc>
    
    <cc>rniwa</cc>
    
    <cc>sihui_liu</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>475968</commentid>
    <comment_count>0</comment_count>
    <who name="Naveen Bobbili">naveenbobbili</who>
    <bug_when>2011-09-30 01:18:14 -0700</bug_when>
    <thetext>1. Use the following code:

&lt;html&gt; 
	&lt;head&gt; 
		&lt;script&gt; 
			console.log(localStorage[&apos;test1&apos;] + &quot;|&quot;+localStorage[&apos;test2&apos;]+&quot;|&quot;);

			localStorage[&apos;test1&apos;] = &quot;hi&quot;;
			localStorage[&apos;test2&apos;] = &quot;&quot;;
		&lt;/script&gt; 
	&lt;/head&gt; 
	&lt;body&gt;

	&lt;/body&gt;
&lt;/html&gt;

2. Load webkit gtk browser and on first visit it reads &quot;undefined|undefined&quot; in the console. Reload and you get &quot;hi||&quot;.
3. Restart browser and it prints &quot;hi|undefined&quot;.

What is the expected result?
I would expect it to continue to log &quot;hi||&quot; after browser restart.


Analysis:
This issue has occurred as a result of fix provided to https://bugs.webkit.org/show_bug.cgi?id=58762
Blob datatype return NULL even for empty strings. So this needs to be specially handled in StorageAreaSync code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475993</commentid>
    <comment_count>1</comment_count>
      <attachid>109271</attachid>
    <who name="Naveen Bobbili">naveenbobbili</who>
    <bug_when>2011-09-30 02:41:04 -0700</bug_when>
    <thetext>Created attachment 109271
Patch for creating a new column in the local storage to keep of the type of blob (whether normal or empty), DB migration code also added. Manual test case added to test the changes.

Patch for creating a new column in the local storage to keep of the type of blob (whether normal or empty), DB migration code also added. Manual test case added to test the changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476112</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-09-30 08:52:39 -0700</bug_when>
    <thetext>Please add a ChangeLog, and mark the patch for review.

We really need an automated way to test such things - no one ever runs manual tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476116</commentid>
    <comment_count>3</comment_count>
    <who name="Naveen Bobbili">naveenbobbili</who>
    <bug_when>2011-09-30 08:58:27 -0700</bug_when>
    <thetext>Ok sure. BTW the change log is already in the patch which is attached. 
Do I need to do something else to ensure changelog is added?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476123</commentid>
    <comment_count>4</comment_count>
    <who name="Naveen Bobbili">naveenbobbili</who>
    <bug_when>2011-09-30 09:18:54 -0700</bug_when>
    <thetext>Also local storage caches values unline IndexedDB. So my automated test needs to restart the browser. As per Jeremy Orlow&apos;s comment#8 in https://bugs.webkit.org/show_bug.cgi?id=58762 , we need changes to LayoutTestController to achieve this. 
Can you provide some direction or test case that i can refer to to achieve this purpose?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476154</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-09-30 10:22:59 -0700</bug_when>
    <thetext>Sorry, for some reason I thought that the ChangeLog present in the patch was for LayoutTests directory. Did you use svn-create-patch or webkit-patch to create the patch? They sort patches to put ChangeLog first, which likely got me confused.

Yes, we need changes in LayoutTestController to restart the process, or better a method in window.internals that would force a re-read of localStorage. This doesn&apos;t necessarily block this patch from being landed, but improving test coverage would be even more important than fixing a bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476459</commentid>
    <comment_count>6</comment_count>
    <who name="Naveen Bobbili">naveenbobbili</who>
    <bug_when>2011-09-30 17:42:53 -0700</bug_when>
    <thetext>I did an svn-create-patch. I am not sure why its not sorted.
I will take some time and figure out how we can improve the test coverage. 
In the mean while it would be great if you can provide your comments on
StorageAreaSync.cpp file. Thanks for your prompt replies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476762</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-02 21:47:21 -0700</bug_when>
    <thetext>Attachment 109271 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/manual-tests/localstorage-empty-value.html:1:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
Total errors found: 32 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476765</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-10-02 22:00:58 -0700</bug_when>
    <thetext>Sorry, this is not my area of expertise, someone else will need to review the patch once you mark it for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476781</commentid>
    <comment_count>9</comment_count>
      <attachid>109438</attachid>
    <who name="Naveen Bobbili">naveenbobbili</who>
    <bug_when>2011-10-02 22:43:32 -0700</bug_when>
    <thetext>Created attachment 109438
Uploaded patch.

Uploaded Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476786</commentid>
    <comment_count>10</comment_count>
    <who name="Naveen Bobbili">naveenbobbili</who>
    <bug_when>2011-10-02 22:46:38 -0700</bug_when>
    <thetext>I believe adding a method in windows.internals would help as the local storage data gets added to DB based on async timer jobs. So by the time we re read forcefully its not guaranteed that data would be available in DB.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476795</commentid>
    <comment_count>11</comment_count>
    <who name="Naveen Bobbili">naveenbobbili</who>
    <bug_when>2011-10-02 23:01:50 -0700</bug_when>
    <thetext>Correcting my previous comments. 

I believe adding a method in windows.internals wouldn&apos;t help as the local storage data gets added to DB based on async timer jobs. So by the time we re read forcefully its not guaranteed that data would be available in DB.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476972</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-10-03 07:59:17 -0700</bug_when>
    <thetext> &gt; I believe adding a method in windows.internals wouldn&apos;t help as the local storage data gets added to DB based on async timer jobs. So by the time we re read forcefully its not guaranteed that data would be available in DB.

window.internals can have a flag or callback for ready state if needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493773</commentid>
    <comment_count>13</comment_count>
      <attachid>109438</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-10-31 23:57:22 -0700</bug_when>
    <thetext>Comment on attachment 109438
Uploaded patch.

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

I know this patch has been here for a while, but honestly I don&apos;t feel very comfortable r+ing dom storage patches at this point.  There have been other people working in this code since me.  Hopefully one of them can take a look?

&gt; Source/WebCore/storage/StorageAreaSync.cpp:57
&gt; +#define BLOB_NORMAL (1 &lt;&lt; 0)

Could some sort of normal null be used instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689928</commentid>
    <comment_count>14</comment_count>
      <attachid>109438</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-07 22:53:17 -0700</bug_when>
    <thetext>Comment on attachment 109438
Uploaded patch.

Is this patch still viable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720075</commentid>
    <comment_count>15</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2012-09-13 16:08:59 -0700</bug_when>
    <thetext>Chrome doesn&apos;t have this bug, I&apos;m not sure about other ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867175</commentid>
    <comment_count>16</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2013-04-01 09:38:00 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Chrome doesn&apos;t have this bug, I&apos;m not sure about other ports.

When Safari is restarted, it prints &quot;hi|null|&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867176</commentid>
    <comment_count>17</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2013-04-01 09:39:54 -0700</bug_when>
    <thetext>&lt;rdar://problem/13410974&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>976820</commentid>
    <comment_count>18</comment_count>
      <attachid>109438</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-02-05 10:50:59 -0800</bug_when>
    <thetext>Comment on attachment 109438
Uploaded patch.

Clearing review flag on patches from before 2014. If this patch is still relevant, please reset the r? flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1406229</commentid>
    <comment_count>19</comment_count>
      <attachid>335723</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-03-13 13:51:45 -0700</bug_when>
    <thetext>Created attachment 335723
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1406232</commentid>
    <comment_count>20</comment_count>
      <attachid>335723</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-03-13 14:05:59 -0700</bug_when>
    <thetext>Comment on attachment 335723
Patch

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

&gt; ChangeLog:9
&gt; +        * ManualTests/localstorage-empty-string-value.html: Added.

Outdated changelog. Also, this probably needs an API test.

&gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabase.cpp:47
&gt; +#define BLOB_NORMAL 0

We usually avoid #define statements in WebKit and prefer global statics. e.g.
const int normalBlob = 0;
const int emptyBlob = 1;

However, in this case, I think we don&apos;t even need these constants.

&gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabase.cpp:115
&gt; +    if (!m_database.executeCommand(&quot;CREATE TABLE IF NOT EXISTS ItemTable (key TEXT UNIQUE ON CONFLICT REPLACE, value BLOB NOT NULL ON CONFLICT FAIL, type INTEGER NOT NULL ON CONFLICT FAIL DEFAULT 0)&quot;)) {

Maybe rename type to isBlobEmpty ?

&gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabase.cpp:191
&gt; +        int type = query.getColumnInt(2);

bool isBlobEmpty = !!query.getColumnInt(2); ?

&gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabase.cpp:342
&gt; +            // If the blob is an empty string, set the type to BLOB_EMPTY.

statement.bindInt(3, it-&gt;value.isEmpty()); ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407204</commentid>
    <comment_count>21</comment_count>
      <attachid>335994</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-03-16 20:26:35 -0700</bug_when>
    <thetext>Created attachment 335994
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407232</commentid>
    <comment_count>22</comment_count>
      <attachid>336003</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-03-17 01:20:07 -0700</bug_when>
    <thetext>Created attachment 336003
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407233</commentid>
    <comment_count>23</comment_count>
      <attachid>336004</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-03-17 01:30:12 -0700</bug_when>
    <thetext>Created attachment 336004
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407244</commentid>
    <comment_count>24</comment_count>
      <attachid>336008</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-03-17 09:17:35 -0700</bug_when>
    <thetext>Created attachment 336008
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407245</commentid>
    <comment_count>25</comment_count>
      <attachid>336004</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-03-17 09:18:27 -0700</bug_when>
    <thetext>Comment on attachment 336004
Patch

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

I will let somebody else do the formal review given that I helped.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/LocalStorageEmptySring.mm:2
&gt; + * Copyright (C) 2016 Apple Inc. All rights reserved.

2018 is the year :)

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/LocalStorageEmptySring.mm:74
&gt; +    // Ditch this web view (ditching its web process)

WebKit comments should end with a period. Also what’s important here is not the new WebProcess but the new processpool/datastore.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/LocalStorageEmptySring.mm:84
&gt; +    // Make a new web view to finish the test

Period at the end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407275</commentid>
    <comment_count>26</comment_count>
      <attachid>336018</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-03-17 16:36:18 -0700</bug_when>
    <thetext>Created attachment 336018
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407291</commentid>
    <comment_count>27</comment_count>
      <attachid>336023</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-03-18 05:29:38 -0700</bug_when>
    <thetext>Created attachment 336023
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407461</commentid>
    <comment_count>28</comment_count>
      <attachid>336023</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-03-19 14:26:18 -0700</bug_when>
    <thetext>Comment on attachment 336023
Patch

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

&gt; Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:2157
&gt; +				8CDA4206205CD99400648A15 /* LocalStorageEmptySring.mm */,

hmm. there is a typo in your file name :) Also, I would have called this file LocalStoragePersistence.mm so that it is more reusable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407577</commentid>
    <comment_count>29</comment_count>
      <attachid>336023</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-03-19 21:43:48 -0700</bug_when>
    <thetext>Comment on attachment 336023
Patch

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

&gt; Source/WebKit/ChangeLog:3
&gt; +        Local storage getItem() for an empty string returned UNDEFINED value.

&quot;undefined&quot; should be in lower case since that&apos;s the name of the global variable.

&gt; Source/WebKit/UIProcess/WebStorage/LocalStorageDatabase.cpp:187
&gt;          String value = query.getColumnBlobAsString(1);

Why is query.getColumnBlobAsString returning a null string in the case the string was empty?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407578</commentid>
    <comment_count>30</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-03-19 21:44:50 -0700</bug_when>
    <thetext>Our string class (defined in Source/WTF/text/WTFString.h) differentiates empty string and null string so it&apos;s odd that we&apos;re getting null string (otherwise isNull() would be false) out of sqlite when we stored an empty string.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407586</commentid>
    <comment_count>31</comment_count>
      <attachid>336102</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-03-19 22:06:23 -0700</bug_when>
    <thetext>Created attachment 336102
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407590</commentid>
    <comment_count>32</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-03-19 22:09:09 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #30)
&gt; Our string class (defined in Source/WTF/text/WTFString.h) differentiates
&gt; empty string and null string so it&apos;s odd that we&apos;re getting null string
&gt; (otherwise isNull() would be false) out of sqlite when we stored an empty
&gt; string.

I think the problem is Empty BLOB is restored as null string.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407592</commentid>
    <comment_count>33</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-03-19 22:15:49 -0700</bug_when>
    <thetext>(In reply to Sihui Liu from comment #32)
&gt; (In reply to Ryosuke Niwa from comment #30)
&gt; &gt; Our string class (defined in Source/WTF/text/WTFString.h) differentiates
&gt; &gt; empty string and null string so it&apos;s odd that we&apos;re getting null string
&gt; &gt; (otherwise isNull() would be false) out of sqlite when we stored an empty
&gt; &gt; string.
&gt; 
&gt; I think the problem is Empty BLOB is restored as null string.

If that&apos;s the case, can&apos;t we simply change the schema to make &quot;value&quot; nullable blob type, and then use NULL in SQL database as null string, and the empty string as empty string? That would be a better reflection of what we&apos;re storing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1407908</commentid>
    <comment_count>34</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-03-20 22:12:01 -0700</bug_when>
    <thetext>I talked with Sihui today but I still don&apos;t understand why query.getColumnBlobAsString can&apos;t simply return an empty string when the blob value is of length 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408034</commentid>
    <comment_count>35</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-03-21 08:43:53 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #34)
&gt; I talked with Sihui today but I still don&apos;t understand why
&gt; query.getColumnBlobAsString can&apos;t simply return an empty string when the
&gt; blob value is of length 0.

https://www.sqlite.org/c3ref/column_blob.html As the last 4 paragraphs state, one explanation is it is safer. Put sqlite3_column_blob before sqlite3_column_bytes(get correct content before get size of content) may help avoid type conversion in getColumnBlobAsString. And since sqlite3_column_xx returns 0 or null pointer on memory error, current solution is easier for us to distinguish between empty string and error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408140</commentid>
    <comment_count>36</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-03-21 13:35:44 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #34)
&gt; I talked with Sihui today but I still don&apos;t understand why
&gt; query.getColumnBlobAsString can&apos;t simply return an empty string when the
&gt; blob value is of length 0.

Per doc: &quot;The return value from sqlite3_column_blob() for a zero-length BLOB is a NULL pointer.&quot;. So basically the issue is that it may not be possible to distinquish NULL for an empty BLOB when calling sqlite3_column_blob(). Right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408143</commentid>
    <comment_count>37</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-03-21 13:38:22 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #36)
&gt; (In reply to Ryosuke Niwa from comment #34)
&gt; &gt; I talked with Sihui today but I still don&apos;t understand why
&gt; &gt; query.getColumnBlobAsString can&apos;t simply return an empty string when the
&gt; &gt; blob value is of length 0.
&gt; 
&gt; Per doc: &quot;The return value from sqlite3_column_blob() for a zero-length BLOB
&gt; is a NULL pointer.&quot;. So basically the issue is that it may not be possible
&gt; to distinquish NULL for an empty BLOB when calling sqlite3_column_blob().
&gt; Right?

sqlite3_column_bytes() seems to return 0 for both cases as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408146</commentid>
    <comment_count>38</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-03-21 13:41:51 -0700</bug_when>
    <thetext>How about sqlite3_column_count? Can&apos;t we discern the error case by checking that sqlite3_column_count is zero (zero: error, non-zero: got results), and return an empty string when sqlite3_column_blob is nullptr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408147</commentid>
    <comment_count>39</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-03-21 13:42:23 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #37)
&gt; (In reply to Chris Dumez from comment #36)
&gt; &gt; (In reply to Ryosuke Niwa from comment #34)
&gt; &gt; &gt; I talked with Sihui today but I still don&apos;t understand why
&gt; &gt; &gt; query.getColumnBlobAsString can&apos;t simply return an empty string when the
&gt; &gt; &gt; blob value is of length 0.
&gt; &gt; 
&gt; &gt; Per doc: &quot;The return value from sqlite3_column_blob() for a zero-length BLOB
&gt; &gt; is a NULL pointer.&quot;. So basically the issue is that it may not be possible
&gt; &gt; to distinquish NULL for an empty BLOB when calling sqlite3_column_blob().
&gt; &gt; Right?
&gt; 
&gt; sqlite3_column_bytes() seems to return 0 for both cases as well.

Looking at the doc though, we *may* be able to rely on sqlite3_column_type() to distinguish SQLITE_BLOB, or SQLITE_NULL.

If so, we could tweak getColumnBlobAsString() to return a null string if the value is NULL and an empty String (&quot;&quot;) if the column is an empty blob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408149</commentid>
    <comment_count>40</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-03-21 13:44:01 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #38)
&gt; How about sqlite3_column_count? Can&apos;t we discern the error case by checking
&gt; that sqlite3_column_count is zero (zero: error, non-zero: got results), and
&gt; return an empty string when sqlite3_column_blob is nullptr?

Now I am not sure we&apos;re talking about the same thing anymore. Wouldn&apos;t sqlite3_column_count() always return the same number of column so matter is the blob column is null or an actual blob?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408152</commentid>
    <comment_count>41</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-03-21 13:49:46 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #40)
&gt; (In reply to Ryosuke Niwa from comment #38)
&gt; &gt; How about sqlite3_column_count? Can&apos;t we discern the error case by checking
&gt; &gt; that sqlite3_column_count is zero (zero: error, non-zero: got results), and
&gt; &gt; return an empty string when sqlite3_column_blob is nullptr?
&gt; 
&gt; Now I am not sure we&apos;re talking about the same thing anymore. Wouldn&apos;t
&gt; sqlite3_column_count() always return the same number of column so matter is
&gt; the blob column is null or an actual blob?

yes but it returns 0 when the statement returned no results. See https://www.sqlite.org/c3ref/column_count.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408298</commentid>
    <comment_count>42</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-03-21 21:47:32 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #41)
&gt; (In reply to Chris Dumez from comment #40)
&gt; &gt; (In reply to Ryosuke Niwa from comment #38)
&gt; &gt; &gt; How about sqlite3_column_count? Can&apos;t we discern the error case by checking
&gt; &gt; &gt; that sqlite3_column_count is zero (zero: error, non-zero: got results), and
&gt; &gt; &gt; return an empty string when sqlite3_column_blob is nullptr?
&gt; &gt; 
&gt; &gt; Now I am not sure we&apos;re talking about the same thing anymore. Wouldn&apos;t
&gt; &gt; sqlite3_column_count() always return the same number of column so matter is
&gt; &gt; the blob column is null or an actual blob?
&gt; 
&gt; yes but it returns 0 when the statement returned no results. See
&gt; https://www.sqlite.org/c3ref/column_count.html

I think you mean sqlite3_data_count(https://www.sqlite.org/c3ref/data_count.html, which may be same as sqlite3_column_count but this states &quot;each row&quot;). sqlite3_data_count would return non-zero when sqlite3_step returns SQLITE_ROW(and this condition is checked before getColumnBlobAsString).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408299</commentid>
    <comment_count>43</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-03-21 21:48:39 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #39)
&gt; (In reply to Chris Dumez from comment #37)
&gt; &gt; (In reply to Chris Dumez from comment #36)
&gt; &gt; &gt; (In reply to Ryosuke Niwa from comment #34)
&gt; &gt; &gt; &gt; I talked with Sihui today but I still don&apos;t understand why
&gt; &gt; &gt; &gt; query.getColumnBlobAsString can&apos;t simply return an empty string when the
&gt; &gt; &gt; &gt; blob value is of length 0.
&gt; &gt; &gt; 
&gt; &gt; &gt; Per doc: &quot;The return value from sqlite3_column_blob() for a zero-length BLOB
&gt; &gt; &gt; is a NULL pointer.&quot;. So basically the issue is that it may not be possible
&gt; &gt; &gt; to distinquish NULL for an empty BLOB when calling sqlite3_column_blob().
&gt; &gt; &gt; Right?
&gt; &gt; 
&gt; &gt; sqlite3_column_bytes() seems to return 0 for both cases as well.
&gt; 
&gt; Looking at the doc though, we *may* be able to rely on sqlite3_column_type()
&gt; to distinguish SQLITE_BLOB, or SQLITE_NULL.
&gt; 
&gt; If so, we could tweak getColumnBlobAsString() to return a null string if the
&gt; value is NULL and an empty String (&quot;&quot;) if the column is an empty blob.

I think the type will not be SQLITE_NULL as the BLOB column is set as NOT NULL?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408381</commentid>
    <comment_count>44</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-03-22 08:40:05 -0700</bug_when>
    <thetext>(In reply to Sihui Liu from comment #43)
&gt; (In reply to Chris Dumez from comment #39)
&gt; &gt; (In reply to Chris Dumez from comment #37)
&gt; &gt; &gt; (In reply to Chris Dumez from comment #36)
&gt; &gt; &gt; &gt; (In reply to Ryosuke Niwa from comment #34)
&gt; &gt; &gt; &gt; &gt; I talked with Sihui today but I still don&apos;t understand why
&gt; &gt; &gt; &gt; &gt; query.getColumnBlobAsString can&apos;t simply return an empty string when the
&gt; &gt; &gt; &gt; &gt; blob value is of length 0.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Per doc: &quot;The return value from sqlite3_column_blob() for a zero-length BLOB
&gt; &gt; &gt; &gt; is a NULL pointer.&quot;. So basically the issue is that it may not be possible
&gt; &gt; &gt; &gt; to distinquish NULL for an empty BLOB when calling sqlite3_column_blob().
&gt; &gt; &gt; &gt; Right?
&gt; &gt; &gt; 
&gt; &gt; &gt; sqlite3_column_bytes() seems to return 0 for both cases as well.
&gt; &gt; 
&gt; &gt; Looking at the doc though, we *may* be able to rely on sqlite3_column_type()
&gt; &gt; to distinguish SQLITE_BLOB, or SQLITE_NULL.
&gt; &gt; 
&gt; &gt; If so, we could tweak getColumnBlobAsString() to return a null string if the
&gt; &gt; value is NULL and an empty String (&quot;&quot;) if the column is an empty blob.
&gt; 
&gt; I think the type will not be SQLITE_NULL as the BLOB column is set as NOT
&gt; NULL?

Well, I believe Ryosuke and I are suggesting the mark the column as NULLABLE instead of having an extra column.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408393</commentid>
    <comment_count>45</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-03-22 09:44:41 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #44)
&gt; (In reply to Sihui Liu from comment #43)
&gt; &gt; (In reply to Chris Dumez from comment #39)
&gt; &gt; &gt; (In reply to Chris Dumez from comment #37)
&gt; &gt; &gt; &gt; (In reply to Chris Dumez from comment #36)
&gt; &gt; &gt; &gt; &gt; (In reply to Ryosuke Niwa from comment #34)
&gt; &gt; &gt; &gt; &gt; &gt; I talked with Sihui today but I still don&apos;t understand why
&gt; &gt; &gt; &gt; &gt; &gt; query.getColumnBlobAsString can&apos;t simply return an empty string when the
&gt; &gt; &gt; &gt; &gt; &gt; blob value is of length 0.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Per doc: &quot;The return value from sqlite3_column_blob() for a zero-length BLOB
&gt; &gt; &gt; &gt; &gt; is a NULL pointer.&quot;. So basically the issue is that it may not be possible
&gt; &gt; &gt; &gt; &gt; to distinquish NULL for an empty BLOB when calling sqlite3_column_blob().
&gt; &gt; &gt; &gt; &gt; Right?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; sqlite3_column_bytes() seems to return 0 for both cases as well.
&gt; &gt; &gt; 
&gt; &gt; &gt; Looking at the doc though, we *may* be able to rely on sqlite3_column_type()
&gt; &gt; &gt; to distinguish SQLITE_BLOB, or SQLITE_NULL.
&gt; &gt; &gt; 
&gt; &gt; &gt; If so, we could tweak getColumnBlobAsString() to return a null string if the
&gt; &gt; &gt; value is NULL and an empty String (&quot;&quot;) if the column is an empty blob.
&gt; &gt; 
&gt; &gt; I think the type will not be SQLITE_NULL as the BLOB column is set as NOT
&gt; &gt; NULL?
&gt; 
&gt; Well, I believe Ryosuke and I are suggesting the mark the column as NULLABLE
&gt; instead of having an extra column.

If getItems returns null, it means the key doesn&apos;t exist (https://www.w3.org/TR/webstorage/#the-storage-interface). So I guess the column&apos;s not supposed to accept null value. So are you suggesting making the column nullable and mark empty string as NULL?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408397</commentid>
    <comment_count>46</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-03-22 10:12:39 -0700</bug_when>
    <thetext>I am not familiar with this code / API so this may be silly but why cannot we do this?

--- a/Source/WebKit/UIProcess/WebStorage/LocalStorageDatabase.cpp
+++ b/Source/WebKit/UIProcess/WebStorage/LocalStorageDatabase.cpp
@@ -183,8 +183,8 @@ void LocalStorageDatabase::importItems(StorageMap&amp; storageMap)
     while (result == SQLITE_ROW) {
         String key = query.getColumnText(0);
         String value = query.getColumnBlobAsString(1);
-        if (!key.isNull() &amp;&amp; !value.isNull())
-            items.set(key, value);
+        if (!key.isNull())
+            items.set(key, value.isNull() ? emptyString() : value);
         result = query.step();
     }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408408</commentid>
    <comment_count>47</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-03-22 10:50:56 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #46)
&gt; I am not familiar with this code / API so this may be silly but why cannot
&gt; we do this?
&gt; 
&gt; --- a/Source/WebKit/UIProcess/WebStorage/LocalStorageDatabase.cpp
&gt; +++ b/Source/WebKit/UIProcess/WebStorage/LocalStorageDatabase.cpp
&gt; @@ -183,8 +183,8 @@ void LocalStorageDatabase::importItems(StorageMap&amp;
&gt; storageMap)
&gt;      while (result == SQLITE_ROW) {
&gt;          String key = query.getColumnText(0);
&gt;          String value = query.getColumnBlobAsString(1);
&gt; -        if (!key.isNull() &amp;&amp; !value.isNull())
&gt; -            items.set(key, value);
&gt; +        if (!key.isNull())
&gt; +            items.set(key, value.isNull() ? emptyString() : value);
&gt;          result = query.step();
&gt;      }

Sihui mentioned offline that there is an issue distinguishing the value being null because the Blob is empty or because a memory allocation error occurred (sqlite3_column_blob() return null either way).

I am personally not convinced we need to worry about distinguishing this error case. Ryosuke/Brady, what do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408409</commentid>
    <comment_count>48</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-03-22 10:52:56 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #47)
&gt; (In reply to Chris Dumez from comment #46)
&gt; &gt; I am not familiar with this code / API so this may be silly but why cannot
&gt; &gt; we do this?
&gt; &gt; 
&gt; &gt; --- a/Source/WebKit/UIProcess/WebStorage/LocalStorageDatabase.cpp
&gt; &gt; +++ b/Source/WebKit/UIProcess/WebStorage/LocalStorageDatabase.cpp
&gt; &gt; @@ -183,8 +183,8 @@ void LocalStorageDatabase::importItems(StorageMap&amp;
&gt; &gt; storageMap)
&gt; &gt;      while (result == SQLITE_ROW) {
&gt; &gt;          String key = query.getColumnText(0);
&gt; &gt;          String value = query.getColumnBlobAsString(1);
&gt; &gt; -        if (!key.isNull() &amp;&amp; !value.isNull())
&gt; &gt; -            items.set(key, value);
&gt; &gt; +        if (!key.isNull())
&gt; &gt; +            items.set(key, value.isNull() ? emptyString() : value);
&gt; &gt;          result = query.step();
&gt; &gt;      }
&gt; 
&gt; Sihui mentioned offline that there is an issue distinguishing the value
&gt; being null because the Blob is empty or because a memory allocation error
&gt; occurred (sqlite3_column_blob() return null either way).
&gt; 
&gt; I am personally not convinced we need to worry about distinguishing this
&gt; error case. Ryosuke/Brady, what do you think?

We we really care about distinguishing this error case, then I think we should update
query.getColumnBlobAsString() to return the null String only in case of error, and return the empty String is the Blob is empty. We can know if an error occurred using sqlite3_errcode().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408638</commentid>
    <comment_count>49</comment_count>
      <attachid>336360</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-03-23 01:28:45 -0700</bug_when>
    <thetext>Created attachment 336360
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408713</commentid>
    <comment_count>50</comment_count>
      <attachid>336360</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-03-23 08:51:02 -0700</bug_when>
    <thetext>Comment on attachment 336360
Patch

Informal LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408879</commentid>
    <comment_count>51</comment_count>
      <attachid>336360</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2018-03-23 14:10:57 -0700</bug_when>
    <thetext>Comment on attachment 336360
Patch

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

&gt; Source/WebCore/platform/sql/SQLiteStatement.cpp:386
&gt; +    if (sqlite3_errcode(m_database.sqlite3Handle()) != SQLITE_OK)

Instead of calling sqlite3_errcode on the sqlite3 handle, just call m_database.lastError()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408899</commentid>
    <comment_count>52</comment_count>
      <attachid>336360</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-03-23 14:47:44 -0700</bug_when>
    <thetext>Comment on attachment 336360
Patch

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

&gt; Source/WebCore/ChangeLog:7
&gt; +        Reviewed by NOBODY (OOPS!).

before you re-upload, update this line to be:
Reviewed by Brady Eidson.

&gt; Tools/ChangeLog:7
&gt; +        Reviewed by NOBODY (OOPS!).

before you re-upload, update this line to be:
Reviewed by Brady Eidson.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408900</commentid>
    <comment_count>53</comment_count>
      <attachid>336427</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2018-03-23 14:54:27 -0700</bug_when>
    <thetext>Created attachment 336427
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408925</commentid>
    <comment_count>54</comment_count>
      <attachid>336427</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-03-23 15:41:45 -0700</bug_when>
    <thetext>Comment on attachment 336427
Patch

Clearing flags on attachment: 336427

Committed r229929: &lt;https://trac.webkit.org/changeset/229929&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408926</commentid>
    <comment_count>55</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-03-23 15:41:47 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412503</commentid>
    <comment_count>56</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2018-04-06 15:53:12 -0700</bug_when>
    <thetext>This patch appears to have broken WebInspector&apos;s usage of `window.localStorage`, specifically the following lines:

String SQLiteStatement::getColumnBlobAsString(int col)
...|
386|    if (m_database.lastError() != SQLITE_OK)
387|        return String();
...|

STEPS TO REPRODUCE:
1. Open WebInspector
2. Do anything that would be &quot;saved&quot; for the next load (e.g. move around tabs, change settings, modify sidebar sizes, toggle paint flashing, etc.)
3. Close WebInspector
4. Reopen WebInspector
   =&gt; Any changes previously made will no longer be there (e.g. tabs will be back in original order, settings will revert to default value, all sidebars will be back to default size, paint flashing is disabled, etc.)

I&apos;ve been trying to see if I can print `m_database.lastErrorMsg()`, but am running into linker errors.  I&apos;ll add another comment if I can figure it out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412576</commentid>
    <comment_count>57</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2018-04-06 23:02:56 -0700</bug_when>
    <thetext>(In reply to Devin Rousso from comment #56)
&gt; This patch appears to have broken WebInspector&apos;s usage of
&gt; `window.localStorage`, specifically the following lines:
&gt; 
&gt; String SQLiteStatement::getColumnBlobAsString(int col)
&gt; ...|
&gt; 386|    if (m_database.lastError() != SQLITE_OK)
&gt; 387|        return String();
&gt; ...|
&gt; 
&gt; STEPS TO REPRODUCE:
&gt; 1. Open WebInspector
&gt; 2. Do anything that would be &quot;saved&quot; for the next load (e.g. move around
&gt; tabs, change settings, modify sidebar sizes, toggle paint flashing, etc.)
&gt; 3. Close WebInspector
&gt; 4. Reopen WebInspector
&gt;    =&gt; Any changes previously made will no longer be there (e.g. tabs will be
&gt; back in original order, settings will revert to default value, all sidebars
&gt; will be back to default size, paint flashing is disabled, etc.)
&gt; 
&gt; I&apos;ve been trying to see if I can print `m_database.lastErrorMsg()`, but am
&gt; running into linker errors.  I&apos;ll add another comment if I can figure it out.

Moved to a separate bug &lt;https://webkit.org/b/184382&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109271</attachid>
            <date>2011-09-30 02:41:04 -0700</date>
            <delta_ts>2011-10-02 22:43:32 -0700</delta_ts>
            <desc>Patch for creating a new column in the local storage to keep of the type of blob (whether normal or empty), DB migration code also added. Manual test case added to test the changes.</desc>
            <filename>Bug69138.patch</filename>
            <type>text/plain</type>
            <size>6699</size>
            <attacher name="Naveen Bobbili">naveenbobbili</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAJKHJldmlz
aW9uIDk2MzEzKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1MiwxMSBAQAogLy8gbXVjaCBoYXJkZXIgdG8gc3Rh
cnZlIHRoZSByZXN0IG9mIExvY2FsU3RvcmFnZSBhbmQgdGhlIE9TJ3MgSU8gc3Vic3lzdGVtIGlu
IGdlbmVyYWwuCiBzdGF0aWMgY29uc3QgaW50IE1heGl1bUl0ZW1zVG9TeW5jID0gMTAwOwogCisv
LyBCbG9iIHR5cGVzIGFyZSBkZWZpbmVkIGFzIG5vcm1hbCBvciBlbXB0eS4gVGhpcyBpcyB1c2Vk
IHRvIHN0b3JlIHRoZSB0eXBlCisvLyBjb2x1bW4gaW4gIGxvY2FsIHN0b3JhZ2UgdGFibGUuCisj
ZGVmaW5lIEJMT0JfTk9STUFMICgxIDw8IDApCisjZGVmaW5lIEJMT0JfRU1QVFkgKDEgPDwgMSkK
KwogaW5saW5lIFN0b3JhZ2VBcmVhU3luYzo6U3RvcmFnZUFyZWFTeW5jKFBhc3NSZWZQdHI8U3Rv
cmFnZVN5bmNNYW5hZ2VyPiBzdG9yYWdlU3luY01hbmFnZXIsIFBhc3NSZWZQdHI8U3RvcmFnZUFy
ZWFJbXBsPiBzdG9yYWdlQXJlYSwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkZW50aWZpZXIpCiAg
ICAgOiBtX3N5bmNUaW1lcih0aGlzLCAmU3RvcmFnZUFyZWFTeW5jOjpzeW5jVGltZXJGaXJlZCkK
ICAgICAsIG1faXRlbXNDbGVhcmVkKGZhbHNlKQpAQCAtMjU4LDcgKzI2Myw3IEBACiAKICAgICBt
aWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQoKTsKIAotICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRl
Q29tbWFuZCgiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgSXRlbVRhYmxlIChrZXkgVEVYVCBV
TklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRSwgdmFsdWUgQkxPQiBOT1QgTlVMTCBPTiBDT05GTElD
VCBGQUlMKSIpKSB7CisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUg
VEFCTEUgSUYgTk9UIEVYSVNUUyBJdGVtVGFibGUgKGtleSBURVhUIFVOSVFVRSBPTiBDT05GTElD
VCBSRVBMQUNFLCB2YWx1ZSBCTE9CIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIHR5cGUgSU5U
RUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIERFRkFVTFQgMSkiKSkgewogICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgdGFibGUgSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9y
YWdlIik7CiAgICAgICAgIG1hcmtJbXBvcnRlZCgpOwogICAgICAgICBtX2RhdGFiYXNlT3BlbkZh
aWxlZCA9IHRydWU7CkBAIC0yNzQsOSArMjc5LDkgQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAg
ewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYXRhYmFzZSwgIlNFTEVDVCB2YWx1
ZSBGUk9NIEl0ZW1UYWJsZSBMSU1JVCAxIik7CisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVy
eShtX2RhdGFiYXNlLCAiU0VMRUNUIHR5cGUgRlJPTSBJdGVtVGFibGUgTElNSVQgMSIpOwogICAg
ICAgICAvLyB0aGlzIHF1ZXJ5IGlzbid0IGV2ZXIgZXhlY3V0ZWQuCi0gICAgICAgIGlmIChxdWVy
eS5pc0NvbHVtbkRlY2xhcmVkQXNCbG9iKDApKQorICAgICAgICBpZiAocXVlcnkucHJlcGFyZSgp
ID09IFNRTFJlc3VsdE9rKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjg1LDYg
KzI5MCw4IEBACiAgICAgICAgICJEUk9QIFRBQkxFIElGIEVYSVNUUyBJdGVtVGFibGUyIiwKICAg
ICAgICAgIkNSRUFURSBUQUJMRSBJdGVtVGFibGUyIChrZXkgVEVYVCBVTklRVUUgT04gQ09ORkxJ
Q1QgUkVQTEFDRSwgdmFsdWUgQkxPQiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKSIsCiAgICAg
ICAgICJJTlNFUlQgSU5UTyBJdGVtVGFibGUyIFNFTEVDVCAqIGZyb20gSXRlbVRhYmxlIiwKKyAg
ICAgICAgIkFMVEVSIFRBQkxFIEl0ZW1UYWJsZTIgQUREIHR5cGUgSU5URUdFUiBOT1QgTlVMTCBP
TiBDT05GTElDVCBGQUlMIERFRkFVTFQgMSIsCisgICAgICAgICJVUERBVEUgSXRlbVRhYmxlMiBT
RVQgdHlwZT0yIFdIRVJFIHZhbHVlPScnIiwKICAgICAgICAgIkRST1AgVEFCTEUgSXRlbVRhYmxl
IiwKICAgICAgICAgIkFMVEVSIFRBQkxFIEl0ZW1UYWJsZTIgUkVOQU1FIFRPIEl0ZW1UYWJsZSIs
CiAgICAgICAgIDAsCkBAIC0zMjIsNyArMzI5LDcgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNlLCAiU0VMRUNUIGtleSwgdmFs
dWUgRlJPTSBJdGVtVGFibGUiKTsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYXRhYmFz
ZSwgIlNFTEVDVCBrZXksIHZhbHVlLCB0eXBlIEZST00gSXRlbVRhYmxlIik7CiAgICAgaWYgKHF1
ZXJ5LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJs
ZSB0byBzZWxlY3QgaXRlbXMgZnJvbSBJdGVtVGFibGUgZm9yIGxvY2FsIHN0b3JhZ2UiKTsKICAg
ICAgICAgbWFya0ltcG9ydGVkKCk7CkBAIC0zMzMsNyArMzQwLDEwIEBACiAKICAgICBpbnQgcmVz
dWx0ID0gcXVlcnkuc3RlcCgpOwogICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMUmVzdWx0Um93KSB7
Ci0gICAgICAgIGl0ZW1NYXAuc2V0KHF1ZXJ5LmdldENvbHVtblRleHQoMCksIHF1ZXJ5LmdldENv
bHVtbkJsb2JBc1N0cmluZygxKSk7CisgICAgICAgIGlmIChxdWVyeS5nZXRDb2x1bW5JbnQoMikg
JiBCTE9CX0VNUFRZKQorICAgICAgICAgICAgaXRlbU1hcC5zZXQocXVlcnkuZ2V0Q29sdW1uVGV4
dCgwKSwgIiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpdGVtTWFwLnNldChxdWVyeS5n
ZXRDb2x1bW5UZXh0KDApLCBxdWVyeS5nZXRDb2x1bW5CbG9iQXNTdHJpbmcoMSkpOwogICAgICAg
ICByZXN1bHQgPSBxdWVyeS5zdGVwKCk7CiAgICAgfQogCkBAIC00MTcsNyArNDI3LDcgQEAKICAg
ICAgICAgfQogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVudCBpbnNlcnQobV9kYXRhYmFzZSwg
IklOU0VSVCBJTlRPIEl0ZW1UYWJsZSBWQUxVRVMgKD8sID8pIik7CisgICAgU1FMaXRlU3RhdGVt
ZW50IGluc2VydChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gSXRlbVRhYmxlIFZBTFVFUyAoPywg
PywgPykiKTsKICAgICBpZiAoaW5zZXJ0LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgewogICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIGluc2VydCBzdGF0ZW1lbnQgLSBjYW5u
b3Qgd3JpdGUgdG8gbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSIpOwogICAgICAgICByZXR1cm47CkBA
IC00MzgsOSArNDQ4LDE0IEBACiAgICAgICAgIHF1ZXJ5LmJpbmRUZXh0KDEsIGl0LT5maXJzdCk7
CiAKICAgICAgICAgLy8gSWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBub24tbnVsbCwgd2UncmUg
ZG9pbmcgYW4gaW5zZXJ0LCBzbyBiaW5kIGl0IGFzIHRoZSB2YWx1ZS4KLSAgICAgICAgaWYgKCFp
dC0+c2Vjb25kLmlzTnVsbCgpKQorICAgICAgICBpZiAoIWl0LT5zZWNvbmQuaXNOdWxsKCkpIHsK
ICAgICAgICAgICAgIHF1ZXJ5LmJpbmRCbG9iKDIsIGl0LT5zZWNvbmQpOwotCisgICAgICAgICAg
ICAvLyBJZiB0aGUgYmxvYiBpcyBhIHZhbGlkIGVtcHR5IHN0cmluZyB0aGVuIHdlIHNldCB0aGUg
dHlwZSB0byBCTE9CX0VNUFRZCisgICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5pc0VtcHR5KCkp
CisgICAgICAgICAgICAgICAgcXVlcnkuYmluZEludCgzLCBCTE9CX0VNUFRZKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBxdWVyeS5iaW5kSW50KDMsIEJMT0JfTk9STUFMKTsK
KyAgICAgICAgfQogICAgICAgICBpbnQgcmVzdWx0ID0gcXVlcnkuc3RlcCgpOwogICAgICAgICBp
ZiAocmVzdWx0ICE9IFNRTFJlc3VsdERvbmUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIHVwZGF0ZSBpdGVtIGluIHRoZSBsb2NhbCBzdG9yYWdlIGRhdGFiYXNlIC0gJWkiLCBy
ZXN1bHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTYzOTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMS0wOS0zMCAg
TmF2ZWVuIEJvYmJpbGkgIDxuYXZlZW5ib2JiaWxpQG1vdG9yb2xhLmNvbT4KKworICAgICAgICBM
b2NhbCBzdG9yYWdlIGdldEl0ZW0oKSBmb3IgYW4gZW1wdHkgc3RyaW5nIHJldHVybmVkIFVOREVG
SU5FRCB2YWx1ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY5MTM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGVzdHM6IG1hbnVhbC10ZXN0cy9sb2NhbHN0b3JhZ2UtZW1wdHktdmFsdWUuaHRtbAorCisg
ICAgICAgICogbWFudWFsLXRlc3RzL2xvY2Fsc3RvcmFnZS1lbXB0eS12YWx1ZS5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlQXJlYVN5bmM6Om9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlQXJlYVN5bmM6Om1pZ3JhdGVJdGVtVGFibGVJZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlQXJlYVN5bmM6OnBlcmZvcm1JbXBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6
U3RvcmFnZUFyZWFTeW5jOjpzeW5jKToKKwogMjAxMS0wOS0yOSAgQW50dGkgS29pdmlzdG8gIDxh
bnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY5MTA2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9tYW51YWwtdGVzdHMvbG9jYWxz
dG9yYWdlLWVtcHR5LXZhbHVlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbWFu
dWFsLXRlc3RzL2xvY2Fsc3RvcmFnZS1lbXB0eS12YWx1ZS5odG1sCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYkNvcmUvbWFudWFsLXRlc3RzL2xvY2Fsc3RvcmFnZS1lbXB0eS12YWx1ZS5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyIEBACis8aHRtbD4NCis8Ym9keT4NCisgICAgPHA+
SW4gdGhpcyB0ZXN0IHdlIG5lZWQgdG8gZmluZCBvdXQgaWYgdGhlIGJyb3dzZXIgY2FuIHNhdmUg
ZW1wdHkgbG9jYWwgc3RvcmFnZSB2YWx1ZS48L3A+DQorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiPg0KKyAgICB2YXIga2V5ID0gJ0VtcHR5VmFsJzsNCisgICAgdmFyIHZhbHVlID0gJyc7
DQorICAgIHZhciB0ZXN0ID0gJ3Rlc3QnOw0KKyAgICB2YXIgeCA9IGxvY2FsU3RvcmFnZS5nZXRJ
dGVtKHRlc3QpOw0KKyAgICBpZiAoIXgpIHsNCisgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVt
KGtleSwgdmFsdWUpOw0KKyAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGVzdCwgJ3Rlc3Qn
KTsNCisgICAgICAgIGRvY3VtZW50LndyaXRlKCI8cD5JdCBoYXNuJ3QgZ290IHRoZSAnIiArIGtl
eSArICInIGluIHRoZSBsb2NhbFN0b3JhZ2UgZGF0YWJhc2UsIHdpbGwgY3JlYXRlIGl0IHVzaW5n
Ojxicj4iKTsNCisgICAgICAgIGRvY3VtZW50LndyaXRlKCI8Y29kZT5sb2NhbFN0b3JhZ2Uuc2V0
SXRlbSgnIiArIGtleSArICInLCAnIiArIHZhbHVlICsgIicpOzwvY29kZT48YnI+Iik7DQorICAg
ICAgICBkb2N1bWVudC53cml0ZSgiTm93IGNsb3NlIHlvdXIgYnJvd3NlciBhbmQgc3RhcnQgaXQg
YWdhaW4gdG8gc2VlIHRoZSByZXN1bHRzLjwvcD4iKTsNCisgICAgfQ0KKyAgICBlbHNlIHsNCisg
ICAgICAgIHZhciByZXN1bHQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpOw0KKyAgICAgICAg
ZG9jdW1lbnQud3JpdGUoIjxwPlRoZSB2YWx1ZSBvZiAiICsga2V5ICsgIiBpczogJyIgKyByZXN1
bHQgKyAiJzxicj4iKTsNCisgICAgICAgIGlmIChyZXN1bHQgPT0gdmFsdWUpIHsNCisgICAgICAg
ICAgICBkb2N1bWVudC53cml0ZSgiUEFTUy4iKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2Ug
ew0KKyAgICAgICAgICAgIGRvY3VtZW50LndyaXRlKCJGQUlMOiBUaGUgZXhwZWN0ZWQgdmFsdWUg
aXM6ICciICsgdmFsdWUgKyAiJywgdGhlIGV4cGVjdGVkIGxlbmd0aCBpczogIiArIHZhbHVlLmxl
bmd0aCk7DQorICAgICAgICB9DQorICAgICAgICBkb2N1bWVudC53cml0ZSgiPC9wPjxhIGhyZWY9
XCJqYXZhc2NyaXB0OmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCciICsga2V5ICsgIicpO2xvY2Fs
U3RvcmFnZS5yZW1vdmVJdGVtKCciICsgdGVzdCArICInKTtcIj5yZW1vdmUgJyIgKyBrZXkgKyAi
JyBmcm9tIGxvY2FsU3RvcmFnZTwvYT4iKTsNCisgICAgfQ0KKzwvc2NyaXB0Pg0KKw0KKzxwPlRo
aXMgaXMgZm9yIDxhIGhyZWY9Imh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02OTEzOCI+aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5MTM4PC9h
Pg0KKzwvcD4NCis8L2JvZHk+DQorPC9odG1sPg0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109438</attachid>
            <date>2011-10-02 22:43:32 -0700</date>
            <delta_ts>2018-03-17 01:20:07 -0700</delta_ts>
            <desc>Uploaded patch.</desc>
            <filename>Patch.txt</filename>
            <type>text/plain</type>
            <size>6985</size>
            <attacher name="Naveen Bobbili">naveenbobbili</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2Mzk3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDktMzAgIE5hdmVlbiBC
b2JiaWxpICA8bmF2ZWVuYm9iYmlsaUBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgTG9jYWwgc3Rv
cmFnZSBnZXRJdGVtKCkgZm9yIGFuIGVtcHR5IHN0cmluZyByZXR1cm5lZCBVTkRFRklORUQgdmFs
dWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTEz
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Rz
OiBtYW51YWwtdGVzdHMvbG9jYWxzdG9yYWdlLWVtcHR5LXZhbHVlLmh0bWwKKworICAgICAgICAq
IG1hbnVhbC10ZXN0cy9sb2NhbHN0b3JhZ2UtZW1wdHktdmFsdWUuaHRtbDogQWRkZWQuCisgICAg
ICAgICogc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3Rv
cmFnZUFyZWFTeW5jOjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFy
ZWFTeW5jOjptaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3Rv
cmFnZUFyZWFTeW5jOjpwZXJmb3JtSW1wb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VB
cmVhU3luYzo6c3luYyk6CisKIDIwMTEtMDktMjkgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBw
bGUuY29tPgogCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02OTEwNgpJbmRleDogU291cmNlL1dlYkNvcmUvbWFudWFsLXRlc3RzL2xvY2Fsc3RvcmFnZS1l
bXB0eS12YWx1ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL21hbnVhbC10ZXN0
cy9sb2NhbHN0b3JhZ2UtZW1wdHktdmFsdWUuaHRtbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL21hbnVhbC10ZXN0cy9sb2NhbHN0b3JhZ2UtZW1wdHktdmFsdWUuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzMSBAQAorPGh0bWw+Cis8Ym9keT4KKyAgICA8cD5JbiB0aGlzIHRl
c3Qgd2UgbmVlZCB0byBmaW5kIG91dCBpZiB0aGUgYnJvd3NlciBjYW4gc2F2ZSBlbXB0eSBsb2Nh
bCBzdG9yYWdlIHZhbHVlLjwvcD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAg
ICB2YXIga2V5ID0gJ0VtcHR5VmFsJzsKKyAgICB2YXIgdmFsdWUgPSAnJzsKKyAgICB2YXIgdGVz
dCA9ICd0ZXN0JzsKKyAgICB2YXIgeCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRlc3QpOworICAg
IGlmICgheCkgeworICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIHZhbHVlKTsKKyAg
ICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGVzdCwgJ3Rlc3QnKTsKKyAgICAgICAgZG9jdW1l
bnQud3JpdGUoIjxwPkl0IGhhc24ndCBnb3QgdGhlICciICsga2V5ICsgIicgaW4gdGhlIGxvY2Fs
U3RvcmFnZSBkYXRhYmFzZSwgd2lsbCBjcmVhdGUgaXQgdXNpbmc6PGJyPiIpOworICAgICAgICBk
b2N1bWVudC53cml0ZSgiPGNvZGU+bG9jYWxTdG9yYWdlLnNldEl0ZW0oJyIgKyBrZXkgKyAiJywg
JyIgKyB2YWx1ZSArICInKTs8L2NvZGU+PGJyPiIpOworICAgICAgICBkb2N1bWVudC53cml0ZSgi
Tm93IGNsb3NlIHlvdXIgYnJvd3NlciBhbmQgc3RhcnQgaXQgYWdhaW4gdG8gc2VlIHRoZSByZXN1
bHRzLjwvcD4iKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHZhciByZXN1bHQgPSBsb2Nh
bFN0b3JhZ2UuZ2V0SXRlbShrZXkpOworICAgICAgICBkb2N1bWVudC53cml0ZSgiPHA+VGhlIHZh
bHVlIG9mICIgKyBrZXkgKyAiIGlzOiAnIiArIHJlc3VsdCArICInPGJyPiIpOworICAgICAgIGlm
IChyZXN1bHQgPT0gdmFsdWUpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LndyaXRlKCJQQVNTLiIp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZG9jdW1lbnQud3JpdGUo
IkZBSUw6IFRoZSBleHBlY3RlZCB2YWx1ZSBpczogJyIgKyB2YWx1ZSArICInLCB0aGUgZXhwZWN0
ZWQgbGVuZ3RoIGlzOiAiICsgdmFsdWUubGVuZ3RoKTsKKyAgICAgICAgfQorICAgICAgICBkb2N1
bWVudC53cml0ZSgiPC9wPjxhIGhyZWY9XCJqYXZhc2NyaXB0OmxvY2FsU3RvcmFnZS5yZW1vdmVJ
dGVtKCciICsga2V5ICsgIicpO2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCciICsgdGVzdCArICIn
KTtcIj5yZW1vdmUgJyIgKyBrZXkgKyAiJyBmcm9tIGxvY2FsU3RvcmFnZTwvYT4iKTsKKyAgICB9
Cis8L3NjcmlwdD4KKzxwPlRoaXMgaXMgZm9yIDxhIGhyZWY9Imh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02OTEzOCI+aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY5MTM4PC9hPgorPC9wPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYVN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFTeW5jLmNwcAkocmV2aXNpb24gOTYzMTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhU3luYy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUyLDYgKzUyLDExIEBAIHN0YXRpYyBjb25zdCBkb3VibGUgU3RvcmFnZVN5bmNJbnRl
cnZhbAogLy8gbXVjaCBoYXJkZXIgdG8gc3RhcnZlIHRoZSByZXN0IG9mIExvY2FsU3RvcmFnZSBh
bmQgdGhlIE9TJ3MgSU8gc3Vic3lzdGVtIGluIGdlbmVyYWwuCiBzdGF0aWMgY29uc3QgaW50IE1h
eGl1bUl0ZW1zVG9TeW5jID0gMTAwOwogCisvLyBCbG9iIHR5cGVzIGFyZSBkZWZpbmVkIGFzIG5v
cm1hbCBvciBlbXB0eS4gVGhpcyBpcyB1c2VkIHRvIHN0b3JlIHRoZSB0eXBlCisvLyBjb2x1bW4g
aW4gIGxvY2FsIHN0b3JhZ2UgdGFibGUuCisjZGVmaW5lIEJMT0JfTk9STUFMICgxIDw8IDApCisj
ZGVmaW5lIEJMT0JfRU1QVFkgKDEgPDwgMSkKKwogaW5saW5lIFN0b3JhZ2VBcmVhU3luYzo6U3Rv
cmFnZUFyZWFTeW5jKFBhc3NSZWZQdHI8U3RvcmFnZVN5bmNNYW5hZ2VyPiBzdG9yYWdlU3luY01h
bmFnZXIsIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFJbXBsPiBzdG9yYWdlQXJlYSwgY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZUlkZW50aWZpZXIpCiAgICAgOiBtX3N5bmNUaW1lcih0aGlzLCAmU3RvcmFn
ZUFyZWFTeW5jOjpzeW5jVGltZXJGaXJlZCkKICAgICAsIG1faXRlbXNDbGVhcmVkKGZhbHNlKQpA
QCAtMjU4LDcgKzI2Myw3IEBAIHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpvcGVuRGF0YWJhc2UoT3Bl
bkQKIAogICAgIG1pZ3JhdGVJdGVtVGFibGVJZk5lZWRlZCgpOwogCi0gICAgaWYgKCFtX2RhdGFi
YXNlLmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBJdGVtVGFibGUg
KGtleSBURVhUIFVOSVFVRSBPTiBDT05GTElDVCBSRVBMQUNFLCB2YWx1ZSBCTE9CIE5PVCBOVUxM
IE9OIENPTkZMSUNUIEZBSUwpIikpIHsKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1h
bmQoIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIEl0ZW1UYWJsZSAoa2V5IFRFWFQgVU5JUVVF
IE9OIENPTkZMSUNUIFJFUExBQ0UsIHZhbHVlIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJ
TCwgdHlwZSBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgREVGQVVMVCAxKSIpKSB7
CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB0YWJsZSBJdGVtVGFibGUgZm9y
IGxvY2FsIHN0b3JhZ2UiKTsKICAgICAgICAgbWFya0ltcG9ydGVkKCk7CiAgICAgICAgIG1fZGF0
YWJhc2VPcGVuRmFpbGVkID0gdHJ1ZTsKQEAgLTI3NCw5ICsyNzksOSBAQCB2b2lkIFN0b3JhZ2VB
cmVhU3luYzo6bWlncmF0ZUl0ZW1UYWJsZUlmCiAgICAgICAgIHJldHVybjsKIAogICAgIHsKLSAg
ICAgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1QgdmFsdWUgRlJP
TSBJdGVtVGFibGUgTElNSVQgMSIpOworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9k
YXRhYmFzZSwgIlNFTEVDVCB0eXBlIEZST00gSXRlbVRhYmxlIExJTUlUIDEiKTsKICAgICAgICAg
Ly8gdGhpcyBxdWVyeSBpc24ndCBldmVyIGV4ZWN1dGVkLgotICAgICAgICBpZiAocXVlcnkuaXND
b2x1bW5EZWNsYXJlZEFzQmxvYigwKSkKKyAgICAgICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSA9PSBT
UUxSZXN1bHRPaykKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI4NSw2ICsyOTAs
OCBAQCB2b2lkIFN0b3JhZ2VBcmVhU3luYzo6bWlncmF0ZUl0ZW1UYWJsZUlmCiAgICAgICAgICJE
Uk9QIFRBQkxFIElGIEVYSVNUUyBJdGVtVGFibGUyIiwKICAgICAgICAgIkNSRUFURSBUQUJMRSBJ
dGVtVGFibGUyIChrZXkgVEVYVCBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRSwgdmFsdWUgQkxP
QiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKSIsCiAgICAgICAgICJJTlNFUlQgSU5UTyBJdGVt
VGFibGUyIFNFTEVDVCAqIGZyb20gSXRlbVRhYmxlIiwKKyAgICAgICAgIkFMVEVSIFRBQkxFIEl0
ZW1UYWJsZTIgQUREIHR5cGUgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIERFRkFV
TFQgMSIsCisgICAgICAgICJVUERBVEUgSXRlbVRhYmxlMiBTRVQgdHlwZT0yIFdIRVJFIHZhbHVl
PScnIiwKICAgICAgICAgIkRST1AgVEFCTEUgSXRlbVRhYmxlIiwKICAgICAgICAgIkFMVEVSIFRB
QkxFIEl0ZW1UYWJsZTIgUkVOQU1FIFRPIEl0ZW1UYWJsZSIsCiAgICAgICAgIDAsCkBAIC0zMjIs
NyArMzI5LDcgQEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnBlcmZvcm1JbXBvcnQoKQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2Us
ICJTRUxFQ1Qga2V5LCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSIpOworICAgIFNRTGl0ZVN0YXRlbWVu
dCBxdWVyeShtX2RhdGFiYXNlLCAiU0VMRUNUIGtleSwgdmFsdWUsIHR5cGUgRlJPTSBJdGVtVGFi
bGUiKTsKICAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKSB7CiAgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIHNlbGVjdCBpdGVtcyBmcm9tIEl0ZW1UYWJsZSBmb3IgbG9j
YWwgc3RvcmFnZSIpOwogICAgICAgICBtYXJrSW1wb3J0ZWQoKTsKQEAgLTMzMyw3ICszNDAsMTAg
QEAgdm9pZCBTdG9yYWdlQXJlYVN5bmM6OnBlcmZvcm1JbXBvcnQoKQogCiAgICAgaW50IHJlc3Vs
dCA9IHF1ZXJ5LnN0ZXAoKTsKICAgICB3aGlsZSAocmVzdWx0ID09IFNRTFJlc3VsdFJvdykgewot
ICAgICAgICBpdGVtTWFwLnNldChxdWVyeS5nZXRDb2x1bW5UZXh0KDApLCBxdWVyeS5nZXRDb2x1
bW5CbG9iQXNTdHJpbmcoMSkpOworICAgICAgICBpZiAocXVlcnkuZ2V0Q29sdW1uSW50KDIpICYg
QkxPQl9FTVBUWSkKKyAgICAgICAgICAgIGl0ZW1NYXAuc2V0KHF1ZXJ5LmdldENvbHVtblRleHQo
MCksICIiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaXRlbU1hcC5zZXQocXVlcnkuZ2V0
Q29sdW1uVGV4dCgwKSwgcXVlcnkuZ2V0Q29sdW1uQmxvYkFzU3RyaW5nKDEpKTsKICAgICAgICAg
cmVzdWx0ID0gcXVlcnkuc3RlcCgpOwogICAgIH0KIApAQCAtNDE3LDcgKzQyNyw3IEBAIHZvaWQg
U3RvcmFnZUFyZWFTeW5jOjpzeW5jKGJvb2wgY2xlYXJJdGUKICAgICAgICAgfQogICAgIH0KIAot
ICAgIFNRTGl0ZVN0YXRlbWVudCBpbnNlcnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIEl0ZW1U
YWJsZSBWQUxVRVMgKD8sID8pIik7CisgICAgU1FMaXRlU3RhdGVtZW50IGluc2VydChtX2RhdGFi
YXNlLCAiSU5TRVJUIElOVE8gSXRlbVRhYmxlIFZBTFVFUyAoPywgPywgPykiKTsKICAgICBpZiAo
aW5zZXJ0LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgewogICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB0byBwcmVwYXJlIGluc2VydCBzdGF0ZW1lbnQgLSBjYW5ub3Qgd3JpdGUgdG8gbG9jYWwg
c3RvcmFnZSBkYXRhYmFzZSIpOwogICAgICAgICByZXR1cm47CkBAIC00MzgsOSArNDQ4LDE0IEBA
IHZvaWQgU3RvcmFnZUFyZWFTeW5jOjpzeW5jKGJvb2wgY2xlYXJJdGUKICAgICAgICAgcXVlcnku
YmluZFRleHQoMSwgaXQtPmZpcnN0KTsKIAogICAgICAgICAvLyBJZiB0aGUgc2Vjb25kIGFyZ3Vt
ZW50IGlzIG5vbi1udWxsLCB3ZSdyZSBkb2luZyBhbiBpbnNlcnQsIHNvIGJpbmQgaXQgYXMgdGhl
IHZhbHVlLgotICAgICAgICBpZiAoIWl0LT5zZWNvbmQuaXNOdWxsKCkpCisgICAgICAgIGlmICgh
aXQtPnNlY29uZC5pc051bGwoKSkgewogICAgICAgICAgICAgcXVlcnkuYmluZEJsb2IoMiwgaXQt
PnNlY29uZCk7Ci0KKyAgICAgICAgICAgIC8vIElmIHRoZSBibG9iIGlzIGEgdmFsaWQgZW1wdHkg
c3RyaW5nIHRoZW4gd2Ugc2V0IHRoZSB0eXBlIHRvIEJMT0JfRU1QVFkKKyAgICAgICAgICAgIGlm
IChpdC0+c2Vjb25kLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBxdWVyeS5iaW5kSW50KDMs
IEJMT0JfRU1QVFkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHF1ZXJ5LmJp
bmRJbnQoMywgQkxPQl9OT1JNQUwpOworICAgICAgICB9CiAgICAgICAgIGludCByZXN1bHQgPSBx
dWVyeS5zdGVwKCk7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FMUmVzdWx0RG9uZSkgewogICAg
ICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gdXBkYXRlIGl0ZW0gaW4gdGhlIGxvY2FsIHN0
b3JhZ2UgZGF0YWJhc2UgLSAlaSIsIHJlc3VsdCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>335723</attachid>
            <date>2018-03-13 13:51:45 -0700</date>
            <delta_ts>2018-03-16 20:25:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>5896</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA2N2Q2YzZlZDhkZi4uOTU5
NDI2NjhiZjAgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMyBAQAorMjAxOC0wMy0xMyAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKwor
ICAgICAgICBMb2NhbCBzdG9yYWdlIGdldEl0ZW0oKSBmb3IgYW4gZW1wdHkgc3RyaW5nIHJldHVy
bmVkIFVOREVGSU5FRCB2YWx1ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTY5MTM4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzQxMDk3ND4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1hbnVhbFRl
c3RzL2xvY2Fsc3RvcmFnZS1lbXB0eS1zdHJpbmctdmFsdWUuaHRtbDogQWRkZWQuCisKIDIwMTgt
MDMtMTIgIFlvYXYgV2Vpc3MgIDx5b2F2QHlvYXYud3M+CiAKICAgICAgICAgUnVudGltZSBmbGFn
IGZvciBsaW5rIHByZWZldGNoIGFuZCByZW1vdmUgbGluayBzdWJyZXNvdXJjZS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5k
ZXggNDQ2ZjYyZDZjNGQuLjBlN2EyYzhiYThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisy
MDE4LTAzLTEzICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIExv
Y2FsIHN0b3JhZ2UgZ2V0SXRlbSgpIGZvciBhbiBlbXB0eSBzdHJpbmcgcmV0dXJuZWQgVU5ERUZJ
TkVEIHZhbHVlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjkxMzgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNDEwOTc0PgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlN0b3Jh
Z2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3Jh
Z2VEYXRhYmFzZTo6dHJ5VG9PcGVuRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0
b3JhZ2VEYXRhYmFzZTo6bWlncmF0ZUl0ZW1UYWJsZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYktp
dDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OmltcG9ydEl0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6
TG9jYWxTdG9yYWdlRGF0YWJhc2U6OnVwZGF0ZURhdGFiYXNlV2l0aENoYW5nZWRJdGVtcyk6CisK
IDIwMTgtMDMtMTMgIEppZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBTb2Z0LWxpbmsgTG9jYWxBdXRoZW50aWNhdGlvbi5GcmFtZXdvcmsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2UuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFz
ZS5jcHAKaW5kZXggODI2MTU4ZmIxNGMuLjQzMjFkYWQyMjJhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNl
LmNwcApAQCAtNDQsNiArNDQsOSBAQCBzdGF0aWMgY29uc3QgYXV0byBkYXRhYmFzZVVwZGF0ZUlu
dGVydmFsID0gMV9zOwogCiBzdGF0aWMgY29uc3QgaW50IG1heGltdW1JdGVtc1RvVXBkYXRlID0g
MTAwOwogCisjZGVmaW5lIEJMT0JfTk9STUFMIDAKKyNkZWZpbmUgQkxPQl9FTVBUWSAxCisKIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBSZWY8TG9jYWxTdG9yYWdlRGF0YWJhc2U+IExvY2FsU3RvcmFn
ZURhdGFiYXNlOjpjcmVhdGUoUmVmPFdvcmtRdWV1ZT4mJiBxdWV1ZSwgUmVmPExvY2FsU3RvcmFn
ZURhdGFiYXNlVHJhY2tlcj4mJiB0cmFja2VyLCBjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIHNl
Y3VyaXR5T3JpZ2luKQpAQCAtMTA5LDcgKzExMiw3IEBAIGJvb2wgTG9jYWxTdG9yYWdlRGF0YWJh
c2U6OnRyeVRvT3BlbkRhdGFiYXNlKERhdGFiYXNlT3BlbmluZ1N0cmF0ZWd5IG9wZW5pbmdTdHJh
CiAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBkZWxldGUgdGFibGUgSXRlbVRhYmxl
IGZvciBsb2NhbCBzdG9yYWdlIik7CiAgICAgfQogCi0gICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1
dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBJdGVtVGFibGUgKGtleSBURVhU
IFVOSVFVRSBPTiBDT05GTElDVCBSRVBMQUNFLCB2YWx1ZSBCTE9CIE5PVCBOVUxMIE9OIENPTkZM
SUNUIEZBSUwpIikpIHsKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkNSRUFU
RSBUQUJMRSBJRiBOT1QgRVhJU1RTIEl0ZW1UYWJsZSAoa2V5IFRFWFQgVU5JUVVFIE9OIENPTkZM
SUNUIFJFUExBQ0UsIHZhbHVlIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgdHlwZSBJ
TlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgREVGQVVMVCAwKSIpKSB7CiAgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB0YWJsZSBJdGVtVGFibGUgZm9yIGxvY2FsIHN0
b3JhZ2UiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTEyMiwxMCArMTI1LDEw
IEBAIGJvb2wgTG9jYWxTdG9yYWdlRGF0YWJhc2U6Om1pZ3JhdGVJdGVtVGFibGVJZk5lZWRlZCgp
CiAgICAgaWYgKCFtX2RhdGFiYXNlLnRhYmxlRXhpc3RzKCJJdGVtVGFibGUiKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYXRhYmFzZSwgIlNF
TEVDVCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSBMSU1JVCAxIik7CisgICAgU1FMaXRlU3RhdGVtZW50
IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1QgdHlwZSBGUk9NIEl0ZW1UYWJsZSBMSU1JVCAxIik7
CiAKICAgICAvLyBUaGlzIHF1ZXJ5IGlzbid0IGV2ZXIgZXhlY3V0ZWQsIGl0J3MganVzdCB1c2Vk
IHRvIGNoZWNrIHRoZSBjb2x1bW4gdHlwZS4KLSAgICBpZiAocXVlcnkuaXNDb2x1bW5EZWNsYXJl
ZEFzQmxvYigwKSkKKyAgICBpZiAocXVlcnkucHJlcGFyZSgpID09IFNRTElURV9PSykKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBDcmVhdGUgYSBuZXcgdGFibGUgd2l0aCB0aGUgcmln
aHQgdHlwZSwgY29weSBhbGwgdGhlIGRhdGEgb3ZlciB0byBpdCBhbmQgdGhlbiByZXBsYWNlIHRo
ZSBuZXcgdGFibGUgd2l0aCB0aGUgb2xkIHRhYmxlLgpAQCAtMTMzLDYgKzEzNiw4IEBAIGJvb2wg
TG9jYWxTdG9yYWdlRGF0YWJhc2U6Om1pZ3JhdGVJdGVtVGFibGVJZk5lZWRlZCgpCiAgICAgICAg
ICJEUk9QIFRBQkxFIElGIEVYSVNUUyBJdGVtVGFibGUyIiwKICAgICAgICAgIkNSRUFURSBUQUJM
RSBJdGVtVGFibGUyIChrZXkgVEVYVCBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRSwgdmFsdWUg
QkxPQiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKSIsCiAgICAgICAgICJJTlNFUlQgSU5UTyBJ
dGVtVGFibGUyIFNFTEVDVCAqIGZyb20gSXRlbVRhYmxlIiwKKyAgICAgICAgIkFMVEVSIFRBQkxF
IEl0ZW1UYWJsZTIgQUREIHR5cGUgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIERF
RkFVTFQgMCIsCisgICAgICAgICJVUERBVEUgSXRlbVRhYmxlMiBTRVQgdHlwZT0xIFdIRVJFIHZh
bHVlID0gJyciLAogICAgICAgICAiRFJPUCBUQUJMRSBJdGVtVGFibGUiLAogICAgICAgICAiQUxU
RVIgVEFCTEUgSXRlbVRhYmxlMiBSRU5BTUUgVE8gSXRlbVRhYmxlIiwKICAgICAgICAgMCwKQEAg
LTE3MSw3ICsxNzYsNyBAQCB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjppbXBvcnRJdGVtcyhT
dG9yYWdlTWFwJiBzdG9yYWdlTWFwKQogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJT
RUxFQ1Qga2V5LCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSIpOworICAgIFNRTGl0ZVN0YXRlbWVudCBx
dWVyeShtX2RhdGFiYXNlLCAiU0VMRUNUIGtleSwgdmFsdWUsIHR5cGUgRlJPTSBJdGVtVGFibGUi
KTsKICAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTElURV9PSykgewogICAgICAgICBMT0df
RVJST1IoIlVuYWJsZSB0byBzZWxlY3QgaXRlbXMgZnJvbSBJdGVtVGFibGUgZm9yIGxvY2FsIHN0
b3JhZ2UiKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTgzLDcgKzE4OCwxMCBAQCB2b2lkIExvY2Fs
U3RvcmFnZURhdGFiYXNlOjppbXBvcnRJdGVtcyhTdG9yYWdlTWFwJiBzdG9yYWdlTWFwKQogICAg
IHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewogICAgICAgICBTdHJpbmcga2V5ID0gcXVl
cnkuZ2V0Q29sdW1uVGV4dCgwKTsKICAgICAgICAgU3RyaW5nIHZhbHVlID0gcXVlcnkuZ2V0Q29s
dW1uQmxvYkFzU3RyaW5nKDEpOwotICAgICAgICBpZiAoIWtleS5pc051bGwoKSAmJiAhdmFsdWUu
aXNOdWxsKCkpCisgICAgICAgIGludCB0eXBlID0gcXVlcnkuZ2V0Q29sdW1uSW50KDIpOworICAg
ICAgICBpZiAodHlwZSA9PSBCTE9CX0VNUFRZKQorICAgICAgICAgICAgaXRlbXMuc2V0KGtleSwg
IiIpOworICAgICAgICBlbHNlCiAgICAgICAgICAgICBpdGVtcy5zZXQoa2V5LCB2YWx1ZSk7CiAg
ICAgICAgIHJlc3VsdCA9IHF1ZXJ5LnN0ZXAoKTsKICAgICB9CkBAIC0zMDcsNyArMzE1LDcgQEAg
dm9pZCBMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6dXBkYXRlRGF0YWJhc2VXaXRoQ2hhbmdlZEl0ZW1z
KGNvbnN0IEhhc2hNYXA8U3RyaW5nLAogICAgICAgICB9CiAgICAgfQogCi0gICAgU1FMaXRlU3Rh
dGVtZW50IGluc2VydFN0YXRlbWVudChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gSXRlbVRhYmxl
IFZBTFVFUyAoPywgPykiKTsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgaW5zZXJ0U3RhdGVtZW50KG1f
ZGF0YWJhc2UsICJJTlNFUlQgSU5UTyBJdGVtVGFibGUgVkFMVUVTICg/LCA/LCA/KSIpOwogICAg
IGlmIChpbnNlcnRTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgewogICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBwcmVwYXJlIGluc2VydCBzdGF0ZW1lbnQgLSBjYW5ub3Qgd3Jp
dGUgdG8gbG9jYWwgc3RvcmFnZSBkYXRhYmFzZSIpOwogICAgICAgICByZXR1cm47CkBAIC0zMjks
OCArMzM3LDE0IEBAIHZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OnVwZGF0ZURhdGFiYXNlV2l0
aENoYW5nZWRJdGVtcyhjb25zdCBIYXNoTWFwPFN0cmluZywKICAgICAgICAgc3RhdGVtZW50LmJp
bmRUZXh0KDEsIGl0LT5rZXkpOwogCiAgICAgICAgIC8vIElmIHdlJ3JlIGluc2VydGluZyBhIGtl
eS92YWx1ZSBwYWlyLCBiaW5kIHRoZSB2YWx1ZSBhcyB3ZWxsLgotICAgICAgICBpZiAoIWl0LT52
YWx1ZS5pc051bGwoKSkKKyAgICAgICAgaWYgKCFpdC0+dmFsdWUuaXNOdWxsKCkpIHsKICAgICAg
ICAgICAgIHN0YXRlbWVudC5iaW5kQmxvYigyLCBpdC0+dmFsdWUpOworICAgICAgICAgICAgLy8g
SWYgdGhlIGJsb2IgaXMgYW4gZW1wdHkgc3RyaW5nLCBzZXQgdGhlIHR5cGUgdG8gQkxPQl9FTVBU
WS4KKyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAg
IHN0YXRlbWVudC5iaW5kSW50KDMsIEJMT0JfRU1QVFkpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kSW50KDMsIEJMT0JfTk9STUFMKTsKKyAgICAgICAg
fQogCiAgICAgICAgIGludCByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOwogICAgICAgICBpZiAo
cmVzdWx0ICE9IFNRTElURV9ET05FKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>335994</attachid>
            <date>2018-03-16 20:26:35 -0700</date>
            <delta_ts>2018-03-16 20:29:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>7513</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggNjg4YzNkYmVlZGUuLjZlZDUyMGYxNmQxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIxIEBACisyMDE4LTAzLTE2ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisg
ICAgICAgIExvY2FsIHN0b3JhZ2UgZ2V0SXRlbSgpIGZvciBhbiBlbXB0eSBzdHJpbmcgcmV0dXJu
ZWQgVU5ERUZJTkVEIHZhbHVlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjkxMzgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNDEwOTc0PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIGZpZWxk
IGluIGRhdGFiYXNlIHRvIGluZGljYXRlIHdoZXRoZXIgQkxPQiBpcyBlbXB0eS4gCisKKyAgICAg
ICAgVGhlIGNoYW5nZSBpcyBiYXNlZCBvbiBpbml0aWFsIHBhdGNoIGJ5IE5hdmVlbiBCb2JiaWxp
LgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2Uu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6dHJ5VG9PcGVuRGF0
YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6bWlncmF0ZUl0
ZW1UYWJsZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6
OmltcG9ydEl0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OnVw
ZGF0ZURhdGFiYXNlV2l0aENoYW5nZWRJdGVtcyk6CisKIDIwMTgtMDMtMTYgIENocmlzIER1bWV6
ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVUkxTY2hlbWVIYW5kbGVyLkJhc2ljIEFQ
SSB0ZXN0IGZhaWxzIHdpdGggYXN5bmMgcG9saWN5IGRlbGVnYXRlcwpkaWZmIC0tZ2l0IGEvVG9v
bHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDk0YTJhNTdiNjlhLi5jYjliOTNh
OGJjNSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE5IEBACisyMDE4LTAzLTE2ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUu
Y29tPgorCisgICAgICAgIExvY2FsIHN0b3JhZ2UgZ2V0SXRlbSgpIGZvciBhbiBlbXB0eSBzdHJp
bmcgcmV0dXJuZWQgVU5ERUZJTkVEIHZhbHVlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkxMzgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNDEw
OTc0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBBUEkgdGVzdCBjb3ZlcmFnZS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlRW1wdHlTcmluZy5tbTogQWRkZWQuCisgICAg
ICAgICgtW0xvY2FsU3RvcmFnZU1lc3NhZ2VIYW5kbGVyIHVzZXJDb250ZW50Q29udHJvbGxlcjpk
aWRSZWNlaXZlU2NyaXB0TWVzc2FnZTpdKToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvbG9jYWxzdG9yYWdlLWVtcHR5LXN0cmluZy12
YWx1ZS5odG1sOiBBZGRlZC4KKwogMjAxOC0wMy0xNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBw
bGUuY29tPgogCiAgICAgICAgIFVSTFNjaGVtZUhhbmRsZXIuQmFzaWMgQVBJIHRlc3QgZmFpbHMg
d2l0aCBhc3luYyBwb2xpY3kgZGVsZWdhdGVzCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGU5
ZDRlNzZlMWNjLi5kMDNlODg1M2QxOCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTg1Nyw4
ICs4NTcsNiBAQAogCQkJZHN0UGF0aCA9IFRlc3RXZWJLaXRBUEkucmVzb3VyY2VzOwogCQkJZHN0
U3ViZm9sZGVyU3BlYyA9IDc7CiAJCQlmaWxlcyA9ICgKLQkJCQk4Q0RBNDIwNDIwNUM5REEyMDA2
NDhBMTUgLyogTG9jYWxTdG9yYWdlRW1wdHlTcmluZy5tbSBpbiBDb3B5IFJlc291cmNlcyAqLywK
LQkJCQk4Q0RBNDFGRTIwNUM4NTc2MDA2NDhBMTUgLyogbG9jYWxzdG9yYWdlLWVtcHR5LXN0cmlu
Zy12YWx1ZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTFBOUU1MkM5MTNFNjVFRjQw
MDY5MTdGNSAvKiAxOC1jaGFyYWN0ZXJzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJ
Mzc5MDI4QjkxNEZBQzI0QzAwN0U2QjQzIC8qIGFjY2VwdHNGaXJzdE1vdXNlLmh0bWwgaW4gQ29w
eSBSZXNvdXJjZXMgKi8sCiAJCQkJMUMyQjgxODcxQzg5MjVBMDAwQTU1MjlGIC8qIEFoZW0udHRm
IGluIENvcHkgUmVzb3VyY2VzICovLApAQCAtMTAxNyw3ICsxMDE1LDkgQEAKIAkJCQk4MzQ5RDND
NDFEQjk3MjhFMDA0QTlGNjUgLyogbGluay13aXRoLWRvd25sb2FkLWF0dHJpYnV0ZS5odG1sIGlu
IENvcHkgUmVzb3VyY2VzICovLAogCQkJCTM3OEU2NDc5MTYzMjcwNzQwMEI2QzY3NiAvKiBsaW5r
LXdpdGgtdGl0bGUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1NzkwMUZCMTFDQUYx
NDJEMDBFRDY0RjkgLyogTG9hZEludmFsaWRVUkxSZXF1ZXN0Lmh0bWwgaW4gQ29weSBSZXNvdXJj
ZXMgKi8sCisJCQkJOENEQTQxRkUyMDVDODU3NjAwNjQ4QTE1IC8qIGxvY2Fsc3RvcmFnZS1lbXB0
eS1zdHJpbmctdmFsdWUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1MUU2QTg5NjFE
MkYxQ0E3MDBDMDA0QjYgLyogTG9jYWxTdG9yYWdlQ2xlYXIuaHRtbCBpbiBDb3B5IFJlc291cmNl
cyAqLywKKwkJCQk4Q0RBNDIwNDIwNUM5REEyMDA2NDhBMTUgLyogTG9jYWxTdG9yYWdlRW1wdHlT
cmluZy5tbSBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk0NkM1MTlFNjFEMzU2M0ZEMDBEQUE1
MUEgLyogTG9jYWxTdG9yYWdlTnVsbEVudHJpZXMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywK
IAkJCQk0NkM1MTlFNzFEMzU2M0ZEMDBEQUE1MUEgLyogTG9jYWxTdG9yYWdlTnVsbEVudHJpZXMu
bG9jYWxzdG9yYWdlIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTQ2QzUxOUU4MUQzNTYzRkQw
MERBQTUxQSAvKiBMb2NhbFN0b3JhZ2VOdWxsRW50cmllcy5sb2NhbHN0b3JhZ2Utc2htIGluIENv
cHkgUmVzb3VyY2VzICovLApAQCAtMjA5Miw3ICsyMDkyLDYgQEAKIAkJMUFCQzNERUMxODk5QkU1
NTAwNEYwNjI2IC8qIFdlYktpdCBDb2NvYSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCi0JCQkJOENEQTQyMDIyMDVDOUQ4NjAwNjQ4QTE1IC8qIExvY2FsU3RvcmFn
ZUVtcHR5U3JpbmcubW0gKi8sCiAJCQkJQTE2RjY2QjgxQzQwRTlFMTAwQkQ0RDI0IC8qIFJlc291
cmNlcyAqLywKIAkJCQk1Q0VBQjVERjFGQTkzN0NCMDBBNzdGQUEgLyogX1dLSW5wdXREZWxlZ2F0
ZS5tbSAqLywKIAkJCQk3Q0VGQTk2NDFBQzBCOUUyMDBCOTEwRkQgLyogX1dLVXNlckNvbnRlbnRF
eHRlbnNpb25TdG9yZS5tbSAqLywKQEAgLTIxNTcsNiArMjE1Niw3IEBACiAJCQkJQTEyNTQ3OEQx
REIxOEI5NDAwMzU4NTY0IC8qIExvYWREYXRhV2l0aE5pbE1JTUVUeXBlLm1tICovLAogCQkJCTU3
OTAxRkFDMUNBRjEyQzIwMEVENjRGOSAvKiBMb2FkSW52YWxpZFVSTFJlcXVlc3QubW0gKi8sCiAJ
CQkJNTFFNkE4OTIxRDJGMUJFQzAwQzAwNEI2IC8qIExvY2FsU3RvcmFnZUNsZWFyLm1tICovLAor
CQkJCThDREE0MjAyMjA1QzlEODYwMDY0OEExNSAvKiBMb2NhbFN0b3JhZ2VFbXB0eVNyaW5nLm1t
ICovLAogCQkJCTQ2QzUxOUQ4MUQzNTVBNzMwMERBQTUxQSAvKiBMb2NhbFN0b3JhZ2VOdWxsRW50
cmllcy5tbSAqLywKIAkJCQk3QTZBMkM2RjFEQ0NGODdCMDBDMEQwODUgLyogTG9jYWxTdG9yYWdl
UXVpcmtUZXN0Lm1tICovLAogCQkJCTUxNjVGRTAzMjAxRUU2MTcwMDlGN0VDMyAvKiBNZXNzYWdl
UG9ydFByb3ZpZGVycy5tbSAqLywKQEAgLTIzODYsNyArMjM4Niw2IEBACiAJCUExNkY2NkI4MUM0
MEU5RTEwMEJENEQyNCAvKiBSZXNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAotCQkJCThDREE0MUZEMjA1Qzg0QUEwMDY0OEExNSAvKiBsb2NhbHN0b3Jh
Z2UtZW1wdHktc3RyaW5nLXZhbHVlLmh0bWwgKi8sCiAJCQkJQzI1Q0NBMEMxRTUxNDBFNTAwMjZD
QjhBIC8qIEFsbEFoZW0uc3ZnICovLAogCQkJCUY0QTkyMDJFMUZFRTM0QzgwMEY1OTU5MCAvKiBh
cHBsZS1kYXRhLXVybC5odG1sICovLAogCQkJCUY0N0QzMEVCMUVEMjg2MTkwMDA0ODJFMSAvKiBh
cHBsZS5naWYgKi8sCkBAIC0yNDgzLDYgKzI0ODIsNyBAQAogCQkJCUMyNUNDQTBBMUU1MTNGNDkw
MDI2Q0I4QSAvKiBMaW5lQnJlYWtpbmcuaHRtbCAqLywKIAkJCQlGNDFBQjk5NjFFRjQ2OTJDMDA4
M0ZBMDggLyogbGluay1hbmQtaW5wdXQuaHRtbCAqLywKIAkJCQlGNDFBQjk5RDFFRjQ2OTJDMDA4
M0ZBMDggLyogbGluay1hbmQtdGFyZ2V0LWRpdi5odG1sICovLAorCQkJCThDREE0MUZEMjA1Qzg0
QUEwMDY0OEExNSAvKiBsb2NhbHN0b3JhZ2UtZW1wdHktc3RyaW5nLXZhbHVlLmh0bWwgKi8sCiAJ
CQkJNTFFNkE4OTUxRDJGMUM3NzAwQzAwNEI2IC8qIExvY2FsU3RvcmFnZUNsZWFyLmh0bWwgKi8s
CiAJCQkJNDZDNTE5RTIxRDM1NjI5NjAwREFBNTFBIC8qIExvY2FsU3RvcmFnZU51bGxFbnRyaWVz
Lmh0bWwgKi8sCiAJCQkJNDZDNTE5RTMxRDM1NjI5NjAwREFBNTFBIC8qIExvY2FsU3RvcmFnZU51
bGxFbnRyaWVzLmxvY2Fsc3RvcmFnZSAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlRW1wdHlTcmluZy5tbSBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlRW1wdHlTcmluZy5tbQpp
bmRleCAwODA3ZmNiZDRlYy4uMWNlMWNkZGNlNTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlRW1wdHlTcmluZy5tbQorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZUVtcHR5U3Jp
bmcubW0KQEAgLTI3LDEwICsyNywxMCBAQAogCiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5o
IgogI2ltcG9ydCAiVGVzdC5oIgotI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgogI2ltcG9ydCA8
V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29u
dGVudENvbnRyb2xsZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmln
dXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KICNpbXBvcnQgPFdl
YktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9fV0tV
c2VyU3R5bGVTaGVldC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpAQCAtNDAsMTAgKzQw
LDEwIEBACiBzdGF0aWMgYm9vbCByZWNlaXZlZFNjcmlwdE1lc3NhZ2U7CiBzdGF0aWMgUmV0YWlu
UHRyPFdLU2NyaXB0TWVzc2FnZT4gbGFzdFNjcmlwdE1lc3NhZ2U7CiAKLUBpbnRlcmZhY2UgTG9j
YWxTdG9yYWdlTWVzc2FnZUhhbmRsZXIgOiBOU09iamVjdCA8V0tTY3JpcHRNZXNzYWdlSGFuZGxl
cj4KK0BpbnRlcmZhY2UgTG9jYWxTdG9yYWdlRW1wdHlTdHJpbmdNZXNzYWdlSGFuZGxlciA6IE5T
T2JqZWN0IDxXS1NjcmlwdE1lc3NhZ2VIYW5kbGVyPgogQGVuZAogCi1AaW1wbGVtZW50YXRpb24g
TG9jYWxTdG9yYWdlTWVzc2FnZUhhbmRsZXIKK0BpbXBsZW1lbnRhdGlvbiBMb2NhbFN0b3JhZ2VF
bXB0eVN0cmluZ01lc3NhZ2VIYW5kbGVyCiAKIC0gKHZvaWQpdXNlckNvbnRlbnRDb250cm9sbGVy
OihXS1VzZXJDb250ZW50Q29udHJvbGxlciAqKXVzZXJDb250ZW50Q29udHJvbGxlciBkaWRSZWNl
aXZlU2NyaXB0TWVzc2FnZTooV0tTY3JpcHRNZXNzYWdlICopbWVzc2FnZQogewpAQCAtNTQsOSAr
NTQsOSBAQCAtICh2b2lkKXVzZXJDb250ZW50Q29udHJvbGxlcjooV0tVc2VyQ29udGVudENvbnRy
b2xsZXIgKil1c2VyQ29udGVudENvbnRyb2xsZXIgZAogQGVuZAogCiAKLVRFU1QoTG9jYWxTdG9y
YWdlLCBMb2NhbFN0b3JhZ2VFbXB0eVN0cmluZykKK1RFU1QoV0tXZWJWaWV3LCBMb2NhbFN0b3Jh
Z2VFbXB0eVN0cmluZykKIHsKLSAgICBSZXRhaW5QdHI8TG9jYWxTdG9yYWdlTWVzc2FnZUhhbmRs
ZXI+IGhhbmRsZXIgPSBhZG9wdE5TKFtbTG9jYWxTdG9yYWdlTWVzc2FnZUhhbmRsZXIgYWxsb2Nd
IGluaXRdKTsKKyAgICBSZXRhaW5QdHI8TG9jYWxTdG9yYWdlRW1wdHlTdHJpbmdNZXNzYWdlSGFu
ZGxlcj4gaGFuZGxlciA9IGFkb3B0TlMoW1tMb2NhbFN0b3JhZ2VFbXB0eVN0cmluZ01lc3NhZ2VI
YW5kbGVyIGFsbG9jXSBpbml0XSk7CiAgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRp
b24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxv
Y10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFk
ZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07
CiAgICAgW2NvbmZpZ3VyYXRpb24gX3NldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxz
OllFU107CkBAIC03Niw3ICs3Niw3IEBAIFRFU1QoTG9jYWxTdG9yYWdlLCBMb2NhbFN0b3JhZ2VF
bXB0eVN0cmluZykKICAgICBjb25maWd1cmF0aW9uID0gbmlsOwogICAgIGhhbmRsZXIgPSBuaWw7
CiAgICAgCi0gICAgaGFuZGxlciA9IGFkb3B0TlMoW1tMb2NhbFN0b3JhZ2VNZXNzYWdlSGFuZGxl
ciBhbGxvY10gaW5pdF0pOworICAgIGhhbmRsZXIgPSBhZG9wdE5TKFtbTG9jYWxTdG9yYWdlRW1w
dHlTdHJpbmdNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOwogICAgIGNvbmZpZ3VyYXRpb24g
PSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtb
Y29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5k
bGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CiAgICAgW2NvbmZpZ3VyYXRp
b24gX3NldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzOllFU107Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336003</attachid>
            <date>2018-03-17 01:20:07 -0700</date>
            <delta_ts>2018-03-17 01:30:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>16364</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggNmMwOWExOTBlYzkuLjE0Y2ZiZmU5ZTk3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIxIEBACisyMDE4LTAzLTE2ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisg
ICAgICAgIExvY2FsIHN0b3JhZ2UgZ2V0SXRlbSgpIGZvciBhbiBlbXB0eSBzdHJpbmcgcmV0dXJu
ZWQgVU5ERUZJTkVEIHZhbHVlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjkxMzgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNDEwOTc0PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIGZpZWxk
IGluIGRhdGFiYXNlIHRvIGluZGljYXRlIHdoZXRoZXIgQkxPQiBpcyBlbXB0eS4gCisKKyAgICAg
ICAgVGhlIGNoYW5nZSBpcyBiYXNlZCBvbiBpbml0aWFsIHBhdGNoIGJ5IE5hdmVlbiBCb2JiaWxp
LgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2Uu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6dHJ5VG9PcGVuRGF0
YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6bWlncmF0ZUl0
ZW1UYWJsZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6
OmltcG9ydEl0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OnVw
ZGF0ZURhdGFiYXNlV2l0aENoYW5nZWRJdGVtcyk6CisKIDIwMTgtMDMtMTYgIFdlbnNvbiBIc2ll
aCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIFNQSSB0byBleHBvc2Ug
d2lkdGggYW5kIGhlaWdodCBhbmNob3JzIGZvciBXS1dlYlZpZXcncyBjb250ZW50IHZpZXcKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdl
RGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0
b3JhZ2VEYXRhYmFzZS5jcHAKaW5kZXggODI2MTU4ZmIxNGMuLjFlMTQ5MDU1NDE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFi
YXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3Rv
cmFnZURhdGFiYXNlLmNwcApAQCAtMTA5LDcgKzEwOSw3IEBAIGJvb2wgTG9jYWxTdG9yYWdlRGF0
YWJhc2U6OnRyeVRvT3BlbkRhdGFiYXNlKERhdGFiYXNlT3BlbmluZ1N0cmF0ZWd5IG9wZW5pbmdT
dHJhCiAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBkZWxldGUgdGFibGUgSXRlbVRh
YmxlIGZvciBsb2NhbCBzdG9yYWdlIik7CiAgICAgfQogCi0gICAgaWYgKCFtX2RhdGFiYXNlLmV4
ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBJdGVtVGFibGUgKGtleSBU
RVhUIFVOSVFVRSBPTiBDT05GTElDVCBSRVBMQUNFLCB2YWx1ZSBCTE9CIE5PVCBOVUxMIE9OIENP
TkZMSUNUIEZBSUwpIikpIHsKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkNS
RUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIEl0ZW1UYWJsZSAoa2V5IFRFWFQgVU5JUVVFIE9OIENP
TkZMSUNUIFJFUExBQ0UsIHZhbHVlIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgaXNC
bG9iRW1wdHkgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIERFRkFVTFQgMCkiKSkg
ewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgdGFibGUgSXRlbVRhYmxlIGZv
ciBsb2NhbCBzdG9yYWdlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xMjIs
MTAgKzEyMiwxMCBAQCBib29sIExvY2FsU3RvcmFnZURhdGFiYXNlOjptaWdyYXRlSXRlbVRhYmxl
SWZOZWVkZWQoKQogICAgIGlmICghbV9kYXRhYmFzZS50YWJsZUV4aXN0cygiSXRlbVRhYmxlIikp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0
YWJhc2UsICJTRUxFQ1QgdmFsdWUgRlJPTSBJdGVtVGFibGUgTElNSVQgMSIpOworICAgIFNRTGl0
ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNlLCAiU0VMRUNUIGlzQmxvYkVtcHR5IEZST00gSXRl
bVRhYmxlIExJTUlUIDEiKTsKIAotICAgIC8vIFRoaXMgcXVlcnkgaXNuJ3QgZXZlciBleGVjdXRl
ZCwgaXQncyBqdXN0IHVzZWQgdG8gY2hlY2sgdGhlIGNvbHVtbiB0eXBlLgotICAgIGlmIChxdWVy
eS5pc0NvbHVtbkRlY2xhcmVkQXNCbG9iKDApKQorICAgIC8vIFRoaXMgcXVlcnkgaXNuJ3QgZXZl
ciBleGVjdXRlZCwgaXQncyBqdXN0IHVzZWQgdG8gY2hlY2sgdGhlIGNvbHVtbnMuCisgICAgaWYg
KHF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgLy8gQ3JlYXRlIGEgbmV3IHRhYmxlIHdpdGggdGhlIHJpZ2h0IHR5cGUsIGNvcHkgYWxsIHRo
ZSBkYXRhIG92ZXIgdG8gaXQgYW5kIHRoZW4gcmVwbGFjZSB0aGUgbmV3IHRhYmxlIHdpdGggdGhl
IG9sZCB0YWJsZS4KQEAgLTEzMyw2ICsxMzMsOCBAQCBib29sIExvY2FsU3RvcmFnZURhdGFiYXNl
OjptaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQoKQogICAgICAgICAiRFJPUCBUQUJMRSBJRiBFWElT
VFMgSXRlbVRhYmxlMiIsCiAgICAgICAgICJDUkVBVEUgVEFCTEUgSXRlbVRhYmxlMiAoa2V5IFRF
WFQgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsIHZhbHVlIEJMT0IgTk9UIE5VTEwgT04gQ09O
RkxJQ1QgRkFJTCkiLAogICAgICAgICAiSU5TRVJUIElOVE8gSXRlbVRhYmxlMiBTRUxFQ1QgKiBm
cm9tIEl0ZW1UYWJsZSIsCisgICAgICAgICJBTFRFUiBUQUJMRSBJdGVtVGFibGUyIEFERCBpc0Js
b2JFbXB0eSBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgREVGQVVMVCAwIiwKKyAg
ICAgICAgIlVQREFURSBJdGVtVGFibGUyIFNFVCBpc0Jsb2JFbXB0eT0xIFdIRVJFIHZhbHVlID0g
JyciLAogICAgICAgICAiRFJPUCBUQUJMRSBJdGVtVGFibGUiLAogICAgICAgICAiQUxURVIgVEFC
TEUgSXRlbVRhYmxlMiBSRU5BTUUgVE8gSXRlbVRhYmxlIiwKICAgICAgICAgMCwKQEAgLTE3MSw3
ICsxNzMsNyBAQCB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjppbXBvcnRJdGVtcyhTdG9yYWdl
TWFwJiBzdG9yYWdlTWFwKQogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1Qg
a2V5LCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSIpOworICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeSht
X2RhdGFiYXNlLCAiU0VMRUNUIGtleSwgdmFsdWUsIGlzQmxvYkVtcHR5IEZST00gSXRlbVRhYmxl
Iik7CiAgICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgTE9H
X0VSUk9SKCJVbmFibGUgdG8gc2VsZWN0IGl0ZW1zIGZyb20gSXRlbVRhYmxlIGZvciBsb2NhbCBz
dG9yYWdlIik7CiAgICAgICAgIHJldHVybjsKQEAgLTE4Myw3ICsxODUsMTAgQEAgdm9pZCBMb2Nh
bFN0b3JhZ2VEYXRhYmFzZTo6aW1wb3J0SXRlbXMoU3RvcmFnZU1hcCYgc3RvcmFnZU1hcCkKICAg
ICB3aGlsZSAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKICAgICAgICAgU3RyaW5nIGtleSA9IHF1
ZXJ5LmdldENvbHVtblRleHQoMCk7CiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHF1ZXJ5LmdldENv
bHVtbkJsb2JBc1N0cmluZygxKTsKLSAgICAgICAgaWYgKCFrZXkuaXNOdWxsKCkgJiYgIXZhbHVl
LmlzTnVsbCgpKQorICAgICAgICBib29sIGlzQmxvYkVtcHR5ID0gISFxdWVyeS5nZXRDb2x1bW5J
bnQoMik7CisgICAgICAgIGlmIChpc0Jsb2JFbXB0eSkKKyAgICAgICAgICAgIGl0ZW1zLnNldChr
ZXksICIiKTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgaXRlbXMuc2V0KGtleSwgdmFsdWUp
OwogICAgICAgICByZXN1bHQgPSBxdWVyeS5zdGVwKCk7CiAgICAgfQpAQCAtMzA3LDcgKzMxMiw3
IEBAIHZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OnVwZGF0ZURhdGFiYXNlV2l0aENoYW5nZWRJ
dGVtcyhjb25zdCBIYXNoTWFwPFN0cmluZywKICAgICAgICAgfQogICAgIH0KIAotICAgIFNRTGl0
ZVN0YXRlbWVudCBpbnNlcnRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIEl0ZW1U
YWJsZSBWQUxVRVMgKD8sID8pIik7CisgICAgU1FMaXRlU3RhdGVtZW50IGluc2VydFN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gSXRlbVRhYmxlIFZBTFVFUyAoPywgPywgPykiKTsK
ICAgICBpZiAoaW5zZXJ0U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKICAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBpbnNlcnQgc3RhdGVtZW50IC0gY2Fubm90
IHdyaXRlIHRvIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UiKTsKICAgICAgICAgcmV0dXJuOwpAQCAt
MzI5LDggKzMzNCwxMCBAQCB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjp1cGRhdGVEYXRhYmFz
ZVdpdGhDaGFuZ2VkSXRlbXMoY29uc3QgSGFzaE1hcDxTdHJpbmcsCiAgICAgICAgIHN0YXRlbWVu
dC5iaW5kVGV4dCgxLCBpdC0+a2V5KTsKIAogICAgICAgICAvLyBJZiB3ZSdyZSBpbnNlcnRpbmcg
YSBrZXkvdmFsdWUgcGFpciwgYmluZCB0aGUgdmFsdWUgYXMgd2VsbC4KLSAgICAgICAgaWYgKCFp
dC0+dmFsdWUuaXNOdWxsKCkpCisgICAgICAgIGlmICghaXQtPnZhbHVlLmlzTnVsbCgpKSB7CiAg
ICAgICAgICAgICBzdGF0ZW1lbnQuYmluZEJsb2IoMiwgaXQtPnZhbHVlKTsKKyAgICAgICAgICAg
IHN0YXRlbWVudC5iaW5kSW50KDMsIGl0LT52YWx1ZS5pc0VtcHR5KCkpOworICAgICAgICB9CiAK
ICAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CiAgICAgICAgIGlmIChyZXN1
bHQgIT0gU1FMSVRFX0RPTkUpIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xz
L0NoYW5nZUxvZwppbmRleCAwNjdmOGFjODYxZS4uZDM0NmQwYWJmM2EgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAx
OC0wMy0xNiAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBMb2Nh
bCBzdG9yYWdlIGdldEl0ZW0oKSBmb3IgYW4gZW1wdHkgc3RyaW5nIHJldHVybmVkIFVOREVGSU5F
RCB2YWx1ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTY5MTM4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzQxMDk3ND4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgQVBJIHRlc3QgY292ZXJhZ2Uu
CisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xv
Y2FsU3RvcmFnZUVtcHR5U3JpbmcubW06IEFkZGVkLgorICAgICAgICAoLVtMb2NhbFN0b3JhZ2VF
bXB0eVN0cmluZ01lc3NhZ2VIYW5kbGVyIHVzZXJDb250ZW50Q29udHJvbGxlcjpkaWRSZWNlaXZl
U2NyaXB0TWVzc2FnZTpdKToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvbG9jYWxzdG9yYWdlLWVtcHR5LXN0cmluZy12YWx1ZS5odG1s
OiBBZGRlZC4KKwogMjAxOC0wMy0xNiAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFtMYXlvdXRSZWxvYWRlZF0gTW92ZSBtb3ZlIGZ1bmN0aW9ucyB0byB0aGUgYmFz
ZSBjbGFzcyBmcm9tIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggYjM5NDg4NTBjYzAuLmVlNzdmMTY5YWZkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtNTQ5LDYgKzU0OSw4IEBACiAJCTgzQkFFRThEMUVGNDYyNTUwMERERTg5NCAvKiBQbHVnaW5M
b2FkQ2xpZW50UG9saWNpZXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4M0JBRUU4QzFFRjQ2MjU1MDBEREU4OTQgLyogUGx1Z2luTG9hZENsaWVudFBv
bGljaWVzLm1tICovOyB9OwogCQk4M0RCNzk2OTFFRjYzQjNDMDBCRkE1RTUgLyogRnVuY3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODNEQjc5
NjcxRUY2M0IzQzAwQkZBNUU1IC8qIEZ1bmN0aW9uLmNwcCAqLzsgfTsKIAkJODNERTEzNEQxRUYx
QzUwODAwQzFCMzU1IC8qIFJlc3BvbnNpdmVuZXNzVGltZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODNERTEzNEMxRUYxQzRGRTAwQzFCMzU1IC8q
IFJlc3BvbnNpdmVuZXNzVGltZXIuY3BwICovOyB9OworCQk4Q0RBNDIwODIwNUNEOUQzMDA2NDhB
MTUgLyogbG9jYWxzdG9yYWdlLWVtcHR5LXN0cmluZy12YWx1ZS5odG1sIGluIENvcHkgUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhDREE0MjA3MjA1Q0Q5QTUw
MDY0OEExNSAvKiBsb2NhbHN0b3JhZ2UtZW1wdHktc3RyaW5nLXZhbHVlLmh0bWwgKi87IH07CisJ
CThDREE0MjBEMjA1Q0ZGQjkwMDY0OEExNSAvKiBMb2NhbFN0b3JhZ2VFbXB0eVNyaW5nLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOENEQTQyMDYyMDVD
RDk5NDAwNjQ4QTE1IC8qIExvY2FsU3RvcmFnZUVtcHR5U3JpbmcubW0gKi87IH07CiAJCThFNEE4
NTM3MUUxRDFBQjIwMEY1M0IwRiAvKiBHcmlkUG9zaXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEU0QTg1MzYxRTFEMUFBMTAwRjUzQjBGIC8q
IEdyaWRQb3NpdGlvbi5jcHAgKi87IH07CiAJCTkzMEFENDAyMTUwNjk4RDAwMDY3OTcwRiAvKiBs
b3RzLW9mLXRleHQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5MzBBRDQwMTE1MDY5OEIzMDA2Nzk3MEYgLyogbG90cy1vZi10ZXh0Lmh0
bWwgKi87IH07CiAJCTkzMTBDRDM4MUVGNzA4RkIwMDUwRkZFMCAvKiBGdW5jdGlvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzEwQ0QzNjFFRjcw
OEZCMDA1MEZGRTAgLyogRnVuY3Rpb24uY3BwICovOyB9OwpAQCAtODUwLDEwICs4NTIsMTEgQEAK
IAkJfTsKIAkJQkNCOUY0RkIxMTIzODRDMDAwQTEzN0UwIC8qIENvcHkgUmVzb3VyY2VzICovID0g
ewogCQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9
IDIxNDc0ODM2NDc7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAxMjsKIAkJCWRzdFBhdGggPSBUZXN0
V2ViS2l0QVBJLnJlc291cmNlczsKIAkJCWRzdFN1YmZvbGRlclNwZWMgPSA3OwogCQkJZmlsZXMg
PSAoCisJCQkJOENEQTQyMDgyMDVDRDlEMzAwNjQ4QTE1IC8qIGxvY2Fsc3RvcmFnZS1lbXB0eS1z
dHJpbmctdmFsdWUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQkxQTlFNTJDOTEzRTY1
RUY0MDA2OTE3RjUgLyogMTgtY2hhcmFjdGVycy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAog
CQkJCTM3OTAyOEI5MTRGQUMyNEMwMDdFNkI0MyAvKiBhY2NlcHRzRmlyc3RNb3VzZS5odG1sIGlu
IENvcHkgUmVzb3VyY2VzICovLAogCQkJCTFDMkI4MTg3MUM4OTI1QTAwMEE1NTI5RiAvKiBBaGVt
LnR0ZiBpbiBDb3B5IFJlc291cmNlcyAqLywKQEAgLTE1NjEsNiArMTU2NCw4IEBACiAJCThBMkM3
NTBEMTZDRUQ5NTUwMDI0RjM1MiAvKiBSZXNpemVXaW5kb3dBZnRlckNyYXNoLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc2l6ZVdpbmRvd0FmdGVyQ3Jhc2guY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4QTNBRjkzQTE2QzlFRDI3MDBEMjQ4QzEg
LyogUmVsb2FkUGFnZUFmdGVyQ3Jhc2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVsb2FkUGFnZUFmdGVyQ3Jhc2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4QUEyOEMxOTE2RDJGQTdCMDAyRkY0REIgLyogTG9hZFBhZ2VPbkNyYXNoLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvYWRQYWdlT25DcmFzaC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCThDREE0MjA2MjA1Q0Q5OTQwMDY0OEExNSAv
KiBMb2NhbFN0b3JhZ2VFbXB0eVNyaW5nLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gTG9jYWxTdG9yYWdlRW1wdHlTcmluZy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJOENEQTQyMDcyMDVDRDlBNTAwNjQ4QTE1IC8qIGxvY2Fsc3RvcmFnZS1lbXB0
eS1zdHJpbmctdmFsdWUuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJsb2NhbHN0
b3JhZ2UtZW1wdHktc3RyaW5nLXZhbHVlLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4REQ3NkZBMTA0ODZBQTc2MDBEOTZCNUUgLyogVGVzdFdlYktpdEFQSSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5l
eGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gVGVzdFdlYktpdEFQSTsgc291
cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJOEU0QTg1MzYxRTFEMUFBMTAwRjUz
QjBGIC8qIEdyaWRQb3NpdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBHcmlkUG9zaXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzBB
RDQwMTE1MDY5OEIzMDA2Nzk3MEYgLyogbG90cy1vZi10ZXh0Lmh0bWwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
Lmh0bWw7IHBhdGggPSAibG90cy1vZi10ZXh0Lmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjA4NSw2ICsyMDkwLDcgQEAKIAkJMUFCQzNERUMxODk5QkU1NTAwNEYwNjI2IC8q
IFdlYktpdCBDb2NvYSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJOENEQTQyMDYyMDVDRDk5NDAwNjQ4QTE1IC8qIExvY2FsU3RvcmFnZUVtcHR5U3Jpbmcu
bW0gKi8sCiAJCQkJQTE2RjY2QjgxQzQwRTlFMTAwQkQ0RDI0IC8qIFJlc291cmNlcyAqLywKIAkJ
CQk1Q0VBQjVERjFGQTkzN0NCMDBBNzdGQUEgLyogX1dLSW5wdXREZWxlZ2F0ZS5tbSAqLywKIAkJ
CQk3Q0VGQTk2NDFBQzBCOUUyMDBCOTEwRkQgLyogX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZS5tbSAqLywKQEAgLTIzNzgsNiArMjM4NCw3IEBACiAJCUExNkY2NkI4MUM0MEU5RTEwMEJENEQy
NCAvKiBSZXNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAorCQkJCThDREE0MjA3MjA1Q0Q5QTUwMDY0OEExNSAvKiBsb2NhbHN0b3JhZ2UtZW1wdHktc3Ry
aW5nLXZhbHVlLmh0bWwgKi8sCiAJCQkJQzI1Q0NBMEMxRTUxNDBFNTAwMjZDQjhBIC8qIEFsbEFo
ZW0uc3ZnICovLAogCQkJCUY0QTkyMDJFMUZFRTM0QzgwMEY1OTU5MCAvKiBhcHBsZS1kYXRhLXVy
bC5odG1sICovLAogCQkJCUY0N0QzMEVCMUVEMjg2MTkwMDA0ODJFMSAvKiBhcHBsZS5naWYgKi8s
CkBAIC0zMzk3LDYgKzM0MDQsNyBAQAogCQkJCTJERTcxQUZFMUQ0OUMwQkQwMDkwNDA5NCAvKiBB
bmltYXRlZFJlc2l6ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTYzRjY2ODIyMUY5N0Y3RjkwMDMy
RUU1MSAvKiBBcHBsaWNhdGlvbk1hbmlmZXN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNjM1NEY0
RDExRjdDM0FCNTAwRDg5REYzIC8qIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJOENEQTQyMEQyMDVDRkZCOTAwNjQ4QTE1IC8qIExvY2FsU3RvcmFnZUVt
cHR5U3JpbmcubW0gaW4gU291cmNlcyAqLywKIAkJCQk4MzQxMzhDNzIwMzI2MUNBMDBGMjY5NjAg
LyogQXN5bmNQb2xpY3lGb3JOYXZpZ2F0aW9uUmVzcG9uc2UubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk3Q0NFN0VCNDFBNDExQTdFMDA0NDdDNEMgLyogQXR0cmlidXRlZFN0cmluZy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUNEQzhFNDhEMUJDNUNCNDUwMDU5NEZFQyAvKiBBdWRpb1Nlc3Npb25DYXRl
Z29yeUlPUy5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VFbXB0eVNyaW5nLm1tIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VFbXB0eVNyaW5nLm1tCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xY2UxY2RkY2U1MwotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxT
dG9yYWdlRW1wdHlTcmluZy5tbQpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9y
dCAiY29uZmlnLmgiCisKKyNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0ICJU
ZXN0LmgiCisjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktp
dC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYktp
dC5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgorI2lt
cG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRy
Lmg+CisKKyNpZiBXS19BUElfRU5BQkxFRAorCitzdGF0aWMgYm9vbCByZWNlaXZlZFNjcmlwdE1l
c3NhZ2U7CitzdGF0aWMgUmV0YWluUHRyPFdLU2NyaXB0TWVzc2FnZT4gbGFzdFNjcmlwdE1lc3Nh
Z2U7CisKK0BpbnRlcmZhY2UgTG9jYWxTdG9yYWdlRW1wdHlTdHJpbmdNZXNzYWdlSGFuZGxlciA6
IE5TT2JqZWN0IDxXS1NjcmlwdE1lc3NhZ2VIYW5kbGVyPgorQGVuZAorCitAaW1wbGVtZW50YXRp
b24gTG9jYWxTdG9yYWdlRW1wdHlTdHJpbmdNZXNzYWdlSGFuZGxlcgorCistICh2b2lkKXVzZXJD
b250ZW50Q29udHJvbGxlcjooV0tVc2VyQ29udGVudENvbnRyb2xsZXIgKil1c2VyQ29udGVudENv
bnRyb2xsZXIgZGlkUmVjZWl2ZVNjcmlwdE1lc3NhZ2U6KFdLU2NyaXB0TWVzc2FnZSAqKW1lc3Nh
Z2UKK3sKKyAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSB0cnVlOworICAgIGxhc3RTY3JpcHRN
ZXNzYWdlID0gbWVzc2FnZTsKK30KKworQGVuZAorCisKK1RFU1QoV0tXZWJWaWV3LCBMb2NhbFN0
b3JhZ2VFbXB0eVN0cmluZykKK3sKKyAgICBSZXRhaW5QdHI8TG9jYWxTdG9yYWdlRW1wdHlTdHJp
bmdNZXNzYWdlSGFuZGxlcj4gaGFuZGxlciA9IGFkb3B0TlMoW1tMb2NhbFN0b3JhZ2VFbXB0eVN0
cmluZ01lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0XSk7CisgICAgUmV0YWluUHRyPFdLV2ViVmll
d0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmln
dXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENv
bnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRl
c3RIYW5kbGVyIl07CisgICAgW2NvbmZpZ3VyYXRpb24gX3NldEFsbG93VW5pdmVyc2FsQWNjZXNz
RnJvbUZpbGVVUkxzOllFU107CisgICAgCisgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmll
dyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAg
CisgICAgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVS
TDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAibG9jYWxzdG9yYWdlLWVt
cHR5LXN0cmluZy12YWx1ZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRl
c3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVl
c3RdOworICAgIAorICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRN
ZXNzYWdlKTsKKyAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKKyAgICBSZXRhaW5Q
dHI8TlNTdHJpbmc+IHN0cmluZzEgPSAoTlNTdHJpbmcgKilbbGFzdFNjcmlwdE1lc3NhZ2UgYm9k
eV07CisgICAgRVhQRUNUX1dLX1NUUkVRKEAiIiwgc3RyaW5nMS5nZXQoKSk7CisgICAgCisgICAg
Ly8gRGl0Y2ggdGhpcyB3ZWIgdmlldyAoZGl0Y2hpbmcgaXRzIHdlYiBwcm9jZXNzKQorICAgIHdl
YlZpZXcgPSBuaWw7CisgICAgY29uZmlndXJhdGlvbiA9IG5pbDsKKyAgICBoYW5kbGVyID0gbmls
OworICAgIAorICAgIGhhbmRsZXIgPSBhZG9wdE5TKFtbTG9jYWxTdG9yYWdlRW1wdHlTdHJpbmdN
ZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5T
KFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIFtbY29uZmlndXJh
dGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRs
ZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CisgICAgW2NvbmZpZ3VyYXRpb24gX3NldEFs
bG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzOllFU107CisgICAgCisgICAgLy8gTWFrZSBh
IG5ldyB3ZWIgdmlldyB0byBmaW5pc2ggdGhlIHRlc3QKKyAgICB3ZWJWaWV3ID0gYWRvcHROUyhb
W1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAw
KSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICAKKyAgICByZXF1ZXN0
ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVS
TEZvclJlc291cmNlOkAibG9jYWxzdG9yYWdlLWVtcHR5LXN0cmluZy12YWx1ZSIgd2l0aEV4dGVu
c2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOwor
ICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOworICAgIAorICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKKyAgICByZWNlaXZlZFNjcmlw
dE1lc3NhZ2UgPSBmYWxzZTsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHN0cmluZzIgPSAoTlNT
dHJpbmcgKilbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV07CisgICAgCisgICAgRVhQRUNUX1dLX1NU
UkVRKEAiIiwgc3RyaW5nMi5nZXQoKSk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9sb2NhbHN0b3JhZ2UtZW1wdHktc3RyaW5n
LXZhbHVlLmh0bWwgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL2xvY2Fs
c3RvcmFnZS1lbXB0eS1zdHJpbmctdmFsdWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uNjQ4NjlhZDQ1YTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL2xvY2Fsc3RvcmFnZS1lbXB0eS1zdHJpbmctdmFs
dWUuaHRtbApAQCAtMCwwICsxLDE3IEBACis8aHRtbD4KKzxib2R5PgorPHNjcmlwdD4KKyAgdmFy
IGtleSA9ICdFbXB0eVN0cmluZyc7CisgIHZhciB2YWx1ZSA9ICcnOworICB2YXIgdGVzdEtleSA9
ICdUZXN0U3RyaW5nJzsKKyAgaWYgKCFsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0ZXN0S2V5KSkgewor
ICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWUpOworICAgIGxvY2FsU3RvcmFnZS5z
ZXRJdGVtKHRlc3RLZXksICd0ZXN0Jyk7CisgIH0KKyAgICAKKyAgdmFyIHJlc3VsdCA9IGxvY2Fs
U3RvcmFnZS5nZXRJdGVtKGtleSk7CisgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLnRl
c3RIYW5kbGVyLnBvc3RNZXNzYWdlKHJlc3VsdCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336004</attachid>
            <date>2018-03-17 01:30:12 -0700</date>
            <delta_ts>2018-03-17 09:19:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>16364</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggNmMwOWExOTBlYzkuLjE0Y2ZiZmU5ZTk3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIxIEBACisyMDE4LTAzLTE2ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisg
ICAgICAgIExvY2FsIHN0b3JhZ2UgZ2V0SXRlbSgpIGZvciBhbiBlbXB0eSBzdHJpbmcgcmV0dXJu
ZWQgVU5ERUZJTkVEIHZhbHVlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjkxMzgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNDEwOTc0PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIGZpZWxk
IGluIGRhdGFiYXNlIHRvIGluZGljYXRlIHdoZXRoZXIgQkxPQiBpcyBlbXB0eS4gCisKKyAgICAg
ICAgVGhlIGNoYW5nZSBpcyBiYXNlZCBvbiBpbml0aWFsIHBhdGNoIGJ5IE5hdmVlbiBCb2JiaWxp
LgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdlRGF0YWJhc2Uu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6dHJ5VG9PcGVuRGF0
YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6bWlncmF0ZUl0
ZW1UYWJsZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6
OmltcG9ydEl0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxTdG9yYWdlRGF0YWJhc2U6OnVw
ZGF0ZURhdGFiYXNlV2l0aENoYW5nZWRJdGVtcyk6CisKIDIwMTgtMDMtMTYgIFdlbnNvbiBIc2ll
aCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIFNQSSB0byBleHBvc2Ug
d2lkdGggYW5kIGhlaWdodCBhbmNob3JzIGZvciBXS1dlYlZpZXcncyBjb250ZW50IHZpZXcKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlN0b3JhZ2UvTG9jYWxTdG9yYWdl
RGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0
b3JhZ2VEYXRhYmFzZS5jcHAKaW5kZXggODI2MTU4ZmIxNGMuLjFlMTQ5MDU1NDE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFi
YXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3Rv
cmFnZURhdGFiYXNlLmNwcApAQCAtMTA5LDcgKzEwOSw3IEBAIGJvb2wgTG9jYWxTdG9yYWdlRGF0
YWJhc2U6OnRyeVRvT3BlbkRhdGFiYXNlKERhdGFiYXNlT3BlbmluZ1N0cmF0ZWd5IG9wZW5pbmdT
dHJhCiAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBkZWxldGUgdGFibGUgSXRlbVRh
YmxlIGZvciBsb2NhbCBzdG9yYWdlIik7CiAgICAgfQogCi0gICAgaWYgKCFtX2RhdGFiYXNlLmV4
ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBJdGVtVGFibGUgKGtleSBU
RVhUIFVOSVFVRSBPTiBDT05GTElDVCBSRVBMQUNFLCB2YWx1ZSBCTE9CIE5PVCBOVUxMIE9OIENP
TkZMSUNUIEZBSUwpIikpIHsKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkNS
RUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIEl0ZW1UYWJsZSAoa2V5IFRFWFQgVU5JUVVFIE9OIENP
TkZMSUNUIFJFUExBQ0UsIHZhbHVlIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgaXNC
bG9iRW1wdHkgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIERFRkFVTFQgMCkiKSkg
ewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgdGFibGUgSXRlbVRhYmxlIGZv
ciBsb2NhbCBzdG9yYWdlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xMjIs
MTAgKzEyMiwxMCBAQCBib29sIExvY2FsU3RvcmFnZURhdGFiYXNlOjptaWdyYXRlSXRlbVRhYmxl
SWZOZWVkZWQoKQogICAgIGlmICghbV9kYXRhYmFzZS50YWJsZUV4aXN0cygiSXRlbVRhYmxlIikp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0
YWJhc2UsICJTRUxFQ1QgdmFsdWUgRlJPTSBJdGVtVGFibGUgTElNSVQgMSIpOworICAgIFNRTGl0
ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNlLCAiU0VMRUNUIGlzQmxvYkVtcHR5IEZST00gSXRl
bVRhYmxlIExJTUlUIDEiKTsKIAotICAgIC8vIFRoaXMgcXVlcnkgaXNuJ3QgZXZlciBleGVjdXRl
ZCwgaXQncyBqdXN0IHVzZWQgdG8gY2hlY2sgdGhlIGNvbHVtbiB0eXBlLgotICAgIGlmIChxdWVy
eS5pc0NvbHVtbkRlY2xhcmVkQXNCbG9iKDApKQorICAgIC8vIFRoaXMgcXVlcnkgaXNuJ3QgZXZl
ciBleGVjdXRlZCwgaXQncyBqdXN0IHVzZWQgdG8gY2hlY2sgdGhlIGNvbHVtbnMuCisgICAgaWYg
KHF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgLy8gQ3JlYXRlIGEgbmV3IHRhYmxlIHdpdGggdGhlIHJpZ2h0IHR5cGUsIGNvcHkgYWxsIHRo
ZSBkYXRhIG92ZXIgdG8gaXQgYW5kIHRoZW4gcmVwbGFjZSB0aGUgbmV3IHRhYmxlIHdpdGggdGhl
IG9sZCB0YWJsZS4KQEAgLTEzMyw2ICsxMzMsOCBAQCBib29sIExvY2FsU3RvcmFnZURhdGFiYXNl
OjptaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQoKQogICAgICAgICAiRFJPUCBUQUJMRSBJRiBFWElT
VFMgSXRlbVRhYmxlMiIsCiAgICAgICAgICJDUkVBVEUgVEFCTEUgSXRlbVRhYmxlMiAoa2V5IFRF
WFQgVU5JUVVFIE9OIENPTkZMSUNUIFJFUExBQ0UsIHZhbHVlIEJMT0IgTk9UIE5VTEwgT04gQ09O
RkxJQ1QgRkFJTCkiLAogICAgICAgICAiSU5TRVJUIElOVE8gSXRlbVRhYmxlMiBTRUxFQ1QgKiBm
cm9tIEl0ZW1UYWJsZSIsCisgICAgICAgICJBTFRFUiBUQUJMRSBJdGVtVGFibGUyIEFERCBpc0Js
b2JFbXB0eSBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgREVGQVVMVCAwIiwKKyAg
ICAgICAgIlVQREFURSBJdGVtVGFibGUyIFNFVCBpc0Jsb2JFbXB0eT0xIFdIRVJFIHZhbHVlID0g
JyciLAogICAgICAgICAiRFJPUCBUQUJMRSBJdGVtVGFibGUiLAogICAgICAgICAiQUxURVIgVEFC
TEUgSXRlbVRhYmxlMiBSRU5BTUUgVE8gSXRlbVRhYmxlIiwKICAgICAgICAgMCwKQEAgLTE3MSw3
ICsxNzMsNyBAQCB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjppbXBvcnRJdGVtcyhTdG9yYWdl
TWFwJiBzdG9yYWdlTWFwKQogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1Qg
a2V5LCB2YWx1ZSBGUk9NIEl0ZW1UYWJsZSIpOworICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeSht
X2RhdGFiYXNlLCAiU0VMRUNUIGtleSwgdmFsdWUsIGlzQmxvYkVtcHR5IEZST00gSXRlbVRhYmxl
Iik7CiAgICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgTE9H
X0VSUk9SKCJVbmFibGUgdG8gc2VsZWN0IGl0ZW1zIGZyb20gSXRlbVRhYmxlIGZvciBsb2NhbCBz
dG9yYWdlIik7CiAgICAgICAgIHJldHVybjsKQEAgLTE4Myw3ICsxODUsMTAgQEAgdm9pZCBMb2Nh
bFN0b3JhZ2VEYXRhYmFzZTo6aW1wb3J0SXRlbXMoU3RvcmFnZU1hcCYgc3RvcmFnZU1hcCkKICAg
ICB3aGlsZSAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKICAgICAgICAgU3RyaW5nIGtleSA9IHF1
ZXJ5LmdldENvbHVtblRleHQoMCk7CiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHF1ZXJ5LmdldENv
bHVtbkJsb2JBc1N0cmluZygxKTsKLSAgICAgICAgaWYgKCFrZXkuaXNOdWxsKCkgJiYgIXZhbHVl
LmlzTnVsbCgpKQorICAgICAgICBib29sIGlzQmxvYkVtcHR5ID0gISFxdWVyeS5nZXRDb2x1bW5J
bnQoMik7CisgICAgICAgIGlmIChpc0Jsb2JFbXB0eSkKKyAgICAgICAgICAgIGl0ZW1zLnNldChr
ZXksICIiKTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgaXRlbXMuc2V0KGtleSwgdmFsdWUp
OwogICAgICAgICByZXN1bHQgPSBxdWVyeS5zdGVwKCk7CiAgICAgfQpAQCAtMzA3LDcgKzMxMiw3
IEBAIHZvaWQgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OnVwZGF0ZURhdGFiYXNlV2l0aENoYW5nZWRJ
dGVtcyhjb25zdCBIYXNoTWFwPFN0cmluZywKICAgICAgICAgfQogICAgIH0KIAotICAgIFNRTGl0
ZVN0YXRlbWVudCBpbnNlcnRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIEl0ZW1U
YWJsZSBWQUxVRVMgKD8sID8pIik7CisgICAgU1FMaXRlU3RhdGVtZW50IGluc2VydFN0YXRlbWVu
dChtX2RhdGFiYXNlLCAiSU5TRVJUIElOVE8gSXRlbVRhYmxlIFZBTFVFUyAoPywgPywgPykiKTsK
ICAgICBpZiAoaW5zZXJ0U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKICAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBpbnNlcnQgc3RhdGVtZW50IC0gY2Fubm90
IHdyaXRlIHRvIGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UiKTsKICAgICAgICAgcmV0dXJuOwpAQCAt
MzI5LDggKzMzNCwxMCBAQCB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjp1cGRhdGVEYXRhYmFz
ZVdpdGhDaGFuZ2VkSXRlbXMoY29uc3QgSGFzaE1hcDxTdHJpbmcsCiAgICAgICAgIHN0YXRlbWVu
dC5iaW5kVGV4dCgxLCBpdC0+a2V5KTsKIAogICAgICAgICAvLyBJZiB3ZSdyZSBpbnNlcnRpbmcg
YSBrZXkvdmFsdWUgcGFpciwgYmluZCB0aGUgdmFsdWUgYXMgd2VsbC4KLSAgICAgICAgaWYgKCFp
dC0+dmFsdWUuaXNOdWxsKCkpCisgICAgICAgIGlmICghaXQtPnZhbHVlLmlzTnVsbCgpKSB7CiAg
ICAgICAgICAgICBzdGF0ZW1lbnQuYmluZEJsb2IoMiwgaXQtPnZhbHVlKTsKKyAgICAgICAgICAg
IHN0YXRlbWVudC5iaW5kSW50KDMsIGl0LT52YWx1ZS5pc0VtcHR5KCkpOworICAgICAgICB9CiAK
ICAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CiAgICAgICAgIGlmIChyZXN1
bHQgIT0gU1FMSVRFX0RPTkUpIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xz
L0NoYW5nZUxvZwppbmRleCAwNjdmOGFjODYxZS4uZDM0NmQwYWJmM2EgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAx
OC0wMy0xNiAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBMb2Nh
bCBzdG9yYWdlIGdldEl0ZW0oKSBmb3IgYW4gZW1wdHkgc3RyaW5nIHJldHVybmVkIFVOREVGSU5F
RCB2YWx1ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTY5MTM4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzQxMDk3ND4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgQVBJIHRlc3QgY292ZXJhZ2Uu
CisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xv
Y2FsU3RvcmFnZUVtcHR5U3JpbmcubW06IEFkZGVkLgorICAgICAgICAoLVtMb2NhbFN0b3JhZ2VF
bXB0eVN0cmluZ01lc3NhZ2VIYW5kbGVyIHVzZXJDb250ZW50Q29udHJvbGxlcjpkaWRSZWNlaXZl
U2NyaXB0TWVzc2FnZTpdKToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvbG9jYWxzdG9yYWdlLWVtcHR5LXN0cmluZy12YWx1ZS5odG1s
OiBBZGRlZC4KKwogMjAxOC0wMy0xNiAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFtMYXlvdXRSZWxvYWRlZF0gTW92ZSBtb3ZlIGZ1bmN0aW9ucyB0byB0aGUgYmFz
ZSBjbGFzcyBmcm9tIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggYjM5NDg4NTBjYzAuLmVlNzdmMTY5YWZkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtNTQ5LDYgKzU0OSw4IEBACiAJCTgzQkFFRThEMUVGNDYyNTUwMERERTg5NCAvKiBQbHVnaW5M
b2FkQ2xpZW50UG9saWNpZXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4M0JBRUU4QzFFRjQ2MjU1MDBEREU4OTQgLyogUGx1Z2luTG9hZENsaWVudFBv
bGljaWVzLm1tICovOyB9OwogCQk4M0RCNzk2OTFFRjYzQjNDMDBCRkE1RTUgLyogRnVuY3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODNEQjc5
NjcxRUY2M0IzQzAwQkZBNUU1IC8qIEZ1bmN0aW9uLmNwcCAqLzsgfTsKIAkJODNERTEzNEQxRUYx
QzUwODAwQzFCMzU1IC8qIFJlc3BvbnNpdmVuZXNzVGltZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODNERTEzNEMxRUYxQzRGRTAwQzFCMzU1IC8q
IFJlc3BvbnNpdmVuZXNzVGltZXIuY3BwICovOyB9OworCQk4Q0RBNDIwODIwNUNEOUQzMDA2NDhB
MTUgLyogbG9jYWxzdG9yYWdlLWVtcHR5LXN0cmluZy12YWx1ZS5odG1sIGluIENvcHkgUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhDREE0MjA3MjA1Q0Q5QTUw
MDY0OEExNSAvKiBsb2NhbHN0b3JhZ2UtZW1wdHktc3RyaW5nLXZhbHVlLmh0bWwgKi87IH07CisJ
CThDREE0MjBEMjA1Q0ZGQjkwMDY0OEExNSAvKiBMb2NhbFN0b3JhZ2VFbXB0eVNyaW5nLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOENEQTQyMDYyMDVD
RDk5NDAwNjQ4QTE1IC8qIExvY2FsU3RvcmFnZUVtcHR5U3JpbmcubW0gKi87IH07CiAJCThFNEE4
NTM3MUUxRDFBQjIwMEY1M0IwRiAvKiBHcmlkUG9zaXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEU0QTg1MzYxRTFEMUFBMTAwRjUzQjBGIC8q
IEdyaWRQb3NpdGlvbi5jcHAgKi87IH07CiAJCTkzMEFENDAyMTUwNjk4RDAwMDY3OTcwRiAvKiBs
b3RzLW9mLXRleHQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5MzBBRDQwMTE1MDY5OEIzMDA2Nzk3MEYgLyogbG90cy1vZi10ZXh0Lmh0
bWwgKi87IH07CiAJCTkzMTBDRDM4MUVGNzA4RkIwMDUwRkZFMCAvKiBGdW5jdGlvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzEwQ0QzNjFFRjcw
OEZCMDA1MEZGRTAgLyogRnVuY3Rpb24uY3BwICovOyB9OwpAQCAtODUwLDEwICs4NTIsMTEgQEAK
IAkJfTsKIAkJQkNCOUY0RkIxMTIzODRDMDAwQTEzN0UwIC8qIENvcHkgUmVzb3VyY2VzICovID0g
ewogCQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9
IDIxNDc0ODM2NDc7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAxMjsKIAkJCWRzdFBhdGggPSBUZXN0
V2ViS2l0QVBJLnJlc291cmNlczsKIAkJCWRzdFN1YmZvbGRlclNwZWMgPSA3OwogCQkJZmlsZXMg
PSAoCisJCQkJOENEQTQyMDgyMDVDRDlEMzAwNjQ4QTE1IC8qIGxvY2Fsc3RvcmFnZS1lbXB0eS1z
dHJpbmctdmFsdWUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQkxQTlFNTJDOTEzRTY1
RUY0MDA2OTE3RjUgLyogMTgtY2hhcmFjdGVycy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAog
CQkJCTM3OTAyOEI5MTRGQUMyNEMwMDdFNkI0MyAvKiBhY2NlcHRzRmlyc3RNb3VzZS5odG1sIGlu
IENvcHkgUmVzb3VyY2VzICovLAogCQkJCTFDMkI4MTg3MUM4OTI1QTAwMEE1NTI5RiAvKiBBaGVt
LnR0ZiBpbiBDb3B5IFJlc291cmNlcyAqLywKQEAgLTE1NjEsNiArMTU2NCw4IEBACiAJCThBMkM3
NTBEMTZDRUQ5NTUwMDI0RjM1MiAvKiBSZXNpemVXaW5kb3dBZnRlckNyYXNoLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc2l6ZVdpbmRvd0FmdGVyQ3Jhc2guY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4QTNBRjkzQTE2QzlFRDI3MDBEMjQ4QzEg
LyogUmVsb2FkUGFnZUFmdGVyQ3Jhc2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVsb2FkUGFnZUFmdGVyQ3Jhc2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4QUEyOEMxOTE2RDJGQTdCMDAyRkY0REIgLyogTG9hZFBhZ2VPbkNyYXNoLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvYWRQYWdlT25DcmFzaC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCThDREE0MjA2MjA1Q0Q5OTQwMDY0OEExNSAv
KiBMb2NhbFN0b3JhZ2VFbXB0eVNyaW5nLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gTG9jYWxTdG9yYWdlRW1wdHlTcmluZy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJOENEQTQyMDcyMDVDRDlBNTAwNjQ4QTE1IC8qIGxvY2Fsc3RvcmFnZS1lbXB0
eS1zdHJpbmctdmFsdWUuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJsb2NhbHN0
b3JhZ2UtZW1wdHktc3RyaW5nLXZhbHVlLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4REQ3NkZBMTA0ODZBQTc2MDBEOTZCNUUgLyogVGVzdFdlYktpdEFQSSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5l
eGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gVGVzdFdlYktpdEFQSTsgc291
cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJOEU0QTg1MzYxRTFEMUFBMTAwRjUz
QjBGIC8qIEdyaWRQb3NpdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBHcmlkUG9zaXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzBB
RDQwMTE1MDY5OEIzMDA2Nzk3MEYgLyogbG90cy1vZi10ZXh0Lmh0bWwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
Lmh0bWw7IHBhdGggPSAibG90cy1vZi10ZXh0Lmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjA4NSw2ICsyMDkwLDcgQEAKIAkJMUFCQzNERUMxODk5QkU1NTAwNEYwNjI2IC8q
IFdlYktpdCBDb2NvYSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJOENEQTQyMDYyMDVDRDk5NDAwNjQ4QTE1IC8qIExvY2FsU3RvcmFnZUVtcHR5U3Jpbmcu
bW0gKi8sCiAJCQkJQTE2RjY2QjgxQzQwRTlFMTAwQkQ0RDI0IC8qIFJlc291cmNlcyAqLywKIAkJ
CQk1Q0VBQjVERjFGQTkzN0NCMDBBNzdGQUEgLyogX1dLSW5wdXREZWxlZ2F0ZS5tbSAqLywKIAkJ
CQk3Q0VGQTk2NDFBQzBCOUUyMDBCOTEwRkQgLyogX1dLVXNlckNvbnRlbnRFeHRlbnNpb25TdG9y
ZS5tbSAqLywKQEAgLTIzNzgsNiArMjM4NCw3IEBACiAJCUExNkY2NkI4MUM0MEU5RTEwMEJENEQy
NCAvKiBSZXNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAorCQkJCThDREE0MjA3MjA1Q0Q5QTUwMDY0OEExNSAvKiBsb2NhbHN0b3JhZ2UtZW1wdHktc3Ry
aW5nLXZhbHVlLmh0bWwgKi8sCiAJCQkJQzI1Q0NBMEMxRTUxNDBFNTAwMjZDQjhBIC8qIEFsbEFo
ZW0uc3ZnICovLAogCQkJCUY0QTkyMDJFMUZFRTM0QzgwMEY1OTU5MCAvKiBhcHBsZS1kYXRhLXVy
bC5odG1sICovLAogCQkJCUY0N0QzMEVCMUVEMjg2MTkwMDA0ODJFMSAvKiBhcHBsZS5naWYgKi8s
CkBAIC0zMzk3LDYgKzM0MDQsNyBAQAogCQkJCTJERTcxQUZFMUQ0OUMwQkQwMDkwNDA5NCAvKiBB
bmltYXRlZFJlc2l6ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTYzRjY2ODIyMUY5N0Y3RjkwMDMy
RUU1MSAvKiBBcHBsaWNhdGlvbk1hbmlmZXN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNjM1NEY0
RDExRjdDM0FCNTAwRDg5REYzIC8qIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJOENEQTQyMEQyMDVDRkZCOTAwNjQ4QTE1IC8qIExvY2FsU3RvcmFnZUVt
cHR5U3JpbmcubW0gaW4gU291cmNlcyAqLywKIAkJCQk4MzQxMzhDNzIwMzI2MUNBMDBGMjY5NjAg
LyogQXN5bmNQb2xpY3lGb3JOYXZpZ2F0aW9uUmVzcG9uc2UubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk3Q0NFN0VCNDFBNDExQTdFMDA0NDdDNEMgLyogQXR0cmlidXRlZFN0cmluZy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUNEQzhFNDhEMUJDNUNCNDUwMDU5NEZFQyAvKiBBdWRpb1Nlc3Npb25DYXRl
Z29yeUlPUy5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VFbXB0eVNyaW5nLm1tIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VFbXB0eVNyaW5nLm1tCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xY2UxY2RkY2U1MwotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxT
dG9yYWdlRW1wdHlTcmluZy5tbQpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9y
dCAiY29uZmlnLmgiCisKKyNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0ICJU
ZXN0LmgiCisjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktp
dC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYktp
dC5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgorI2lt
cG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRy
Lmg+CisKKyNpZiBXS19BUElfRU5BQkxFRAorCitzdGF0aWMgYm9vbCByZWNlaXZlZFNjcmlwdE1l
c3NhZ2U7CitzdGF0aWMgUmV0YWluUHRyPFdLU2NyaXB0TWVzc2FnZT4gbGFzdFNjcmlwdE1lc3Nh
Z2U7CisKK0BpbnRlcmZhY2UgTG9jYWxTdG9yYWdlRW1wdHlTdHJpbmdNZXNzYWdlSGFuZGxlciA6
IE5TT2JqZWN0IDxXS1NjcmlwdE1lc3NhZ2VIYW5kbGVyPgorQGVuZAorCitAaW1wbGVtZW50YXRp
b24gTG9jYWxTdG9yYWdlRW1wdHlTdHJpbmdNZXNzYWdlSGFuZGxlcgorCistICh2b2lkKXVzZXJD
b250ZW50Q29udHJvbGxlcjooV0tVc2VyQ29udGVudENvbnRyb2xsZXIgKil1c2VyQ29udGVudENv
bnRyb2xsZXIgZGlkUmVjZWl2ZVNjcmlwdE1lc3NhZ2U6KFdLU2NyaXB0TWVzc2FnZSAqKW1lc3Nh
Z2UKK3sKKyAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSB0cnVlOworICAgIGxhc3RTY3JpcHRN
ZXNzYWdlID0gbWVzc2FnZTsKK30KKworQGVuZAorCisKK1RFU1QoV0tXZWJWaWV3LCBMb2NhbFN0
b3JhZ2VFbXB0eVN0cmluZykKK3sKKyAgICBSZXRhaW5QdHI8TG9jYWxTdG9yYWdlRW1wdHlTdHJp
bmdNZXNzYWdlSGFuZGxlcj4gaGFuZGxlciA9IGFkb3B0TlMoW1tMb2NhbFN0b3JhZ2VFbXB0eVN0
cmluZ01lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0XSk7CisgICAgUmV0YWluUHRyPFdLV2ViVmll
d0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmln
dXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENv
bnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRl
c3RIYW5kbGVyIl07CisgICAgW2NvbmZpZ3VyYXRpb24gX3NldEFsbG93VW5pdmVyc2FsQWNjZXNz
RnJvbUZpbGVVUkxzOllFU107CisgICAgCisgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmll
dyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAg
CisgICAgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVS
TDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAibG9jYWxzdG9yYWdlLWVt
cHR5LXN0cmluZy12YWx1ZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRl
c3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVl
c3RdOworICAgIAorICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRN
ZXNzYWdlKTsKKyAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKKyAgICBSZXRhaW5Q
dHI8TlNTdHJpbmc+IHN0cmluZzEgPSAoTlNTdHJpbmcgKilbbGFzdFNjcmlwdE1lc3NhZ2UgYm9k
eV07CisgICAgRVhQRUNUX1dLX1NUUkVRKEAiIiwgc3RyaW5nMS5nZXQoKSk7CisgICAgCisgICAg
Ly8gRGl0Y2ggdGhpcyB3ZWIgdmlldyAoZGl0Y2hpbmcgaXRzIHdlYiBwcm9jZXNzKQorICAgIHdl
YlZpZXcgPSBuaWw7CisgICAgY29uZmlndXJhdGlvbiA9IG5pbDsKKyAgICBoYW5kbGVyID0gbmls
OworICAgIAorICAgIGhhbmRsZXIgPSBhZG9wdE5TKFtbTG9jYWxTdG9yYWdlRW1wdHlTdHJpbmdN
ZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5T
KFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIFtbY29uZmlndXJh
dGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRs
ZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CisgICAgW2NvbmZpZ3VyYXRpb24gX3NldEFs
bG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzOllFU107CisgICAgCisgICAgLy8gTWFrZSBh
IG5ldyB3ZWIgdmlldyB0byBmaW5pc2ggdGhlIHRlc3QKKyAgICB3ZWJWaWV3ID0gYWRvcHROUyhb
W1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAw
KSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICAKKyAgICByZXF1ZXN0
ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVS
TEZvclJlc291cmNlOkAibG9jYWxzdG9yYWdlLWVtcHR5LXN0cmluZy12YWx1ZSIgd2l0aEV4dGVu
c2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOwor
ICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOworICAgIAorICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKKyAgICByZWNlaXZlZFNjcmlw
dE1lc3NhZ2UgPSBmYWxzZTsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHN0cmluZzIgPSAoTlNT
dHJpbmcgKilbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV07CisgICAgCisgICAgRVhQRUNUX1dLX1NU
UkVRKEAiIiwgc3RyaW5nMi5nZXQoKSk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9sb2NhbHN0b3JhZ2UtZW1wdHktc3RyaW5n
LXZhbHVlLmh0bWwgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL2xvY2Fs
c3RvcmFnZS1lbXB0eS1zdHJpbmctdmFsdWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uNjQ4NjlhZDQ1YTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL2xvY2Fsc3RvcmFnZS1lbXB0eS1zdHJpbmctdmFs
dWUuaHRtbApAQCAtMCwwICsxLDE3IEBACis8aHRtbD4KKzxib2R5PgorPHNjcmlwdD4KKyAgdmFy
IGtleSA9ICdFbXB0eVN0cmluZyc7CisgIHZhciB2YWx1ZSA9ICcnOworICB2YXIgdGVzdEtleSA9
ICdUZXN0U3RyaW5nJzsKKyAgaWYgKCFsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0ZXN0S2V5KSkgewor
ICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWUpOworICAgIGxvY2FsU3RvcmFnZS5z
ZXRJdGVtKHRlc3RLZXksICd0ZXN0Jyk7CisgIH0KKyAgICAKKyAgdmFyIHJlc3VsdCA9IGxvY2Fs
U3RvcmFnZS5nZXRJdGVtKGtleSk7CisgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLnRl
c3RIYW5kbGVyLnBvc3RNZXNzYWdlKHJlc3VsdCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336008</attachid>
            <date>2018-03-17 09:17:35 -0700</date>
            <delta_ts>2018-03-17 16:36:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69138-20180317091734.patch</filename>
            <type>text/plain</type>
            <size>17185</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5Njk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGIwMjEyZmU4ZGIzZDRlOTU5
MTBkNjUyMzllNGE0MTFiMzEyZWEwNDEuLjllOWRhMGJlMGE1YWE3OTA0MTI5ZWE2Y2VjODIxNzE3
YjcwZWFiNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTgtMDMtMTcgIFNpaHVpIExp
dSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgTG9jYWwgc3RvcmFnZSBnZXRJdGVt
KCkgZm9yIGFuIGVtcHR5IHN0cmluZyByZXR1cm5lZCBVTkRFRklORUQgdmFsdWUuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTEzOAorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMTM0MTA5NzQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGEgZmllbGQgaW4gZGF0YWJhc2UgdG8gaW5kaWNhdGUgd2hl
dGhlciBCTE9CIGlzIGVtcHR5LiAKKworICAgICAgICBUaGUgY2hhbmdlIGlzIGJhc2VkIG9uIGlu
aXRpYWwgcGF0Y2ggYnkgTmF2ZWVuIEJvYmJpbGkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
U3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxvY2Fs
U3RvcmFnZURhdGFiYXNlOjp0cnlUb09wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6Okxv
Y2FsU3RvcmFnZURhdGFiYXNlOjptaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQpOgorICAgICAgICAo
V2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6aW1wb3J0SXRlbXMpOgorICAgICAgICAoV2Vi
S2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6dXBkYXRlRGF0YWJhc2VXaXRoQ2hhbmdlZEl0ZW1z
KToKKwogMjAxOC0wMy0xNiAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjI5Njg4LgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFi
YXNlLmNwcAppbmRleCA4MjYxNThmYjE0YzhkNWE2ZGIzMTg2NWE2ZTk5YWI4NDg3YTkyNjBlLi4x
ZTE0OTA1NTQxNzM4MzhkNTZlYzQ4ZmEwNWQ3OGM5NWY2YmUwY2QzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFi
YXNlLmNwcApAQCAtMTA5LDcgKzEwOSw3IEBAIGJvb2wgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OnRy
eVRvT3BlbkRhdGFiYXNlKERhdGFiYXNlT3BlbmluZ1N0cmF0ZWd5IG9wZW5pbmdTdHJhCiAgICAg
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBkZWxldGUgdGFibGUgSXRlbVRhYmxlIGZvciBs
b2NhbCBzdG9yYWdlIik7CiAgICAgfQogCi0gICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21t
YW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBJdGVtVGFibGUgKGtleSBURVhUIFVOSVFV
RSBPTiBDT05GTElDVCBSRVBMQUNFLCB2YWx1ZSBCTE9CIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZB
SUwpIikpIHsKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJM
RSBJRiBOT1QgRVhJU1RTIEl0ZW1UYWJsZSAoa2V5IFRFWFQgVU5JUVVFIE9OIENPTkZMSUNUIFJF
UExBQ0UsIHZhbHVlIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgaXNCbG9iRW1wdHkg
SU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIERFRkFVTFQgMCkiKSkgewogICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgdGFibGUgSXRlbVRhYmxlIGZvciBsb2NhbCBz
dG9yYWdlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xMjIsMTAgKzEyMiwx
MCBAQCBib29sIExvY2FsU3RvcmFnZURhdGFiYXNlOjptaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQo
KQogICAgIGlmICghbV9kYXRhYmFzZS50YWJsZUV4aXN0cygiSXRlbVRhYmxlIikpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJT
RUxFQ1QgdmFsdWUgRlJPTSBJdGVtVGFibGUgTElNSVQgMSIpOworICAgIFNRTGl0ZVN0YXRlbWVu
dCBxdWVyeShtX2RhdGFiYXNlLCAiU0VMRUNUIGlzQmxvYkVtcHR5IEZST00gSXRlbVRhYmxlIExJ
TUlUIDEiKTsKIAotICAgIC8vIFRoaXMgcXVlcnkgaXNuJ3QgZXZlciBleGVjdXRlZCwgaXQncyBq
dXN0IHVzZWQgdG8gY2hlY2sgdGhlIGNvbHVtbiB0eXBlLgotICAgIGlmIChxdWVyeS5pc0NvbHVt
bkRlY2xhcmVkQXNCbG9iKDApKQorICAgIC8vIFRoaXMgcXVlcnkgaXNuJ3QgZXZlciBleGVjdXRl
ZCwgaXQncyBqdXN0IHVzZWQgdG8gY2hlY2sgdGhlIGNvbHVtbnMuCisgICAgaWYgKHF1ZXJ5LnBy
ZXBhcmUoKSA9PSBTUUxJVEVfT0spCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gQ3Jl
YXRlIGEgbmV3IHRhYmxlIHdpdGggdGhlIHJpZ2h0IHR5cGUsIGNvcHkgYWxsIHRoZSBkYXRhIG92
ZXIgdG8gaXQgYW5kIHRoZW4gcmVwbGFjZSB0aGUgbmV3IHRhYmxlIHdpdGggdGhlIG9sZCB0YWJs
ZS4KQEAgLTEzMyw2ICsxMzMsOCBAQCBib29sIExvY2FsU3RvcmFnZURhdGFiYXNlOjptaWdyYXRl
SXRlbVRhYmxlSWZOZWVkZWQoKQogICAgICAgICAiRFJPUCBUQUJMRSBJRiBFWElTVFMgSXRlbVRh
YmxlMiIsCiAgICAgICAgICJDUkVBVEUgVEFCTEUgSXRlbVRhYmxlMiAoa2V5IFRFWFQgVU5JUVVF
IE9OIENPTkZMSUNUIFJFUExBQ0UsIHZhbHVlIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJ
TCkiLAogICAgICAgICAiSU5TRVJUIElOVE8gSXRlbVRhYmxlMiBTRUxFQ1QgKiBmcm9tIEl0ZW1U
YWJsZSIsCisgICAgICAgICJBTFRFUiBUQUJMRSBJdGVtVGFibGUyIEFERCBpc0Jsb2JFbXB0eSBJ
TlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgREVGQVVMVCAwIiwKKyAgICAgICAgIlVQ
REFURSBJdGVtVGFibGUyIFNFVCBpc0Jsb2JFbXB0eT0xIFdIRVJFIHZhbHVlID0gJyciLAogICAg
ICAgICAiRFJPUCBUQUJMRSBJdGVtVGFibGUiLAogICAgICAgICAiQUxURVIgVEFCTEUgSXRlbVRh
YmxlMiBSRU5BTUUgVE8gSXRlbVRhYmxlIiwKICAgICAgICAgMCwKQEAgLTE3MSw3ICsxNzMsNyBA
QCB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjppbXBvcnRJdGVtcyhTdG9yYWdlTWFwJiBzdG9y
YWdlTWFwKQogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1Qga2V5LCB2YWx1
ZSBGUk9NIEl0ZW1UYWJsZSIpOworICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNl
LCAiU0VMRUNUIGtleSwgdmFsdWUsIGlzQmxvYkVtcHR5IEZST00gSXRlbVRhYmxlIik7CiAgICAg
aWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgTE9HX0VSUk9SKCJV
bmFibGUgdG8gc2VsZWN0IGl0ZW1zIGZyb20gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7
CiAgICAgICAgIHJldHVybjsKQEAgLTE4Myw3ICsxODUsMTAgQEAgdm9pZCBMb2NhbFN0b3JhZ2VE
YXRhYmFzZTo6aW1wb3J0SXRlbXMoU3RvcmFnZU1hcCYgc3RvcmFnZU1hcCkKICAgICB3aGlsZSAo
cmVzdWx0ID09IFNRTElURV9ST1cpIHsKICAgICAgICAgU3RyaW5nIGtleSA9IHF1ZXJ5LmdldENv
bHVtblRleHQoMCk7CiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHF1ZXJ5LmdldENvbHVtbkJsb2JB
c1N0cmluZygxKTsKLSAgICAgICAgaWYgKCFrZXkuaXNOdWxsKCkgJiYgIXZhbHVlLmlzTnVsbCgp
KQorICAgICAgICBib29sIGlzQmxvYkVtcHR5ID0gISFxdWVyeS5nZXRDb2x1bW5JbnQoMik7Cisg
ICAgICAgIGlmIChpc0Jsb2JFbXB0eSkKKyAgICAgICAgICAgIGl0ZW1zLnNldChrZXksICIiKTsK
KyAgICAgICAgZWxzZQogICAgICAgICAgICAgaXRlbXMuc2V0KGtleSwgdmFsdWUpOwogICAgICAg
ICByZXN1bHQgPSBxdWVyeS5zdGVwKCk7CiAgICAgfQpAQCAtMzA3LDcgKzMxMiw3IEBAIHZvaWQg
TG9jYWxTdG9yYWdlRGF0YWJhc2U6OnVwZGF0ZURhdGFiYXNlV2l0aENoYW5nZWRJdGVtcyhjb25z
dCBIYXNoTWFwPFN0cmluZywKICAgICAgICAgfQogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVu
dCBpbnNlcnRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIEl0ZW1UYWJsZSBWQUxV
RVMgKD8sID8pIik7CisgICAgU1FMaXRlU3RhdGVtZW50IGluc2VydFN0YXRlbWVudChtX2RhdGFi
YXNlLCAiSU5TRVJUIElOVE8gSXRlbVRhYmxlIFZBTFVFUyAoPywgPywgPykiKTsKICAgICBpZiAo
aW5zZXJ0U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBpbnNlcnQgc3RhdGVtZW50IC0gY2Fubm90IHdyaXRlIHRv
IGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UiKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzI5LDggKzMz
NCwxMCBAQCB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjp1cGRhdGVEYXRhYmFzZVdpdGhDaGFu
Z2VkSXRlbXMoY29uc3QgSGFzaE1hcDxTdHJpbmcsCiAgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4
dCgxLCBpdC0+a2V5KTsKIAogICAgICAgICAvLyBJZiB3ZSdyZSBpbnNlcnRpbmcgYSBrZXkvdmFs
dWUgcGFpciwgYmluZCB0aGUgdmFsdWUgYXMgd2VsbC4KLSAgICAgICAgaWYgKCFpdC0+dmFsdWUu
aXNOdWxsKCkpCisgICAgICAgIGlmICghaXQtPnZhbHVlLmlzTnVsbCgpKSB7CiAgICAgICAgICAg
ICBzdGF0ZW1lbnQuYmluZEJsb2IoMiwgaXQtPnZhbHVlKTsKKyAgICAgICAgICAgIHN0YXRlbWVu
dC5iaW5kSW50KDMsIGl0LT52YWx1ZS5pc0VtcHR5KCkpOworICAgICAgICB9CiAKICAgICAgICAg
aW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FM
SVRFX0RPTkUpIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCA0MDk4MGY5ZjQ3MGEyYzQ5MzI4ZWFlZWNjYjk5Njc0MWYyZmY2ZjQyLi4zYjkwMDgw
YjI2MTU4ZGEzNzMwNDM3NzA1ZjNmYjNlMDNiMjkxNjYwIDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTgtMDMtMTcg
IFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgTG9jYWwgc3RvcmFn
ZSBnZXRJdGVtKCkgZm9yIGFuIGVtcHR5IHN0cmluZyByZXR1cm5lZCBVTkRFRklORUQgdmFsdWUu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTEzOAor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM0MTA5NzQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEFQSSB0ZXN0IGNvdmVyYWdlLgorCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3Jh
Z2VFbXB0eVNyaW5nLm1tOiBBZGRlZC4KKyAgICAgICAgKC1bTG9jYWxTdG9yYWdlRW1wdHlTdHJp
bmdNZXNzYWdlSGFuZGxlciB1c2VyQ29udGVudENvbnRyb2xsZXI6ZGlkUmVjZWl2ZVNjcmlwdE1l
c3NhZ2U6XSk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL2xvY2Fsc3RvcmFnZS1lbXB0eS1zdHJpbmctdmFsdWUuaHRtbDogQWRkZWQu
CisKIDIwMTgtMDMtMTYgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIyOTY4OC4KZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggYjM5NDg4NTBjYzA3MTVkNDM2NmI0OTU5ZDAyY2Q2MjRmNTQ5MjY1Yy4uZjI2
NzhmMmY1NDE0MzA4Zjg0NjFkZjg2YzUxY2JhMThiMjc3YzJmMSAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTU0OSw2ICs1NDksOCBAQAogCQk4M0JBRUU4RDFFRjQ2MjU1MDBEREU4OTQgLyog
UGx1Z2luTG9hZENsaWVudFBvbGljaWVzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODNCQUVFOEMxRUY0NjI1NTAwRERFODk0IC8qIFBsdWdpbkxvYWRD
bGllbnRQb2xpY2llcy5tbSAqLzsgfTsKIAkJODNEQjc5NjkxRUY2M0IzQzAwQkZBNUU1IC8qIEZ1
bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDgzREI3OTY3MUVGNjNCM0MwMEJGQTVFNSAvKiBGdW5jdGlvbi5jcHAgKi87IH07CiAJCTgzREUx
MzREMUVGMUM1MDgwMEMxQjM1NSAvKiBSZXNwb25zaXZlbmVzc1RpbWVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzREUxMzRDMUVGMUM0RkUwMEMx
QjM1NSAvKiBSZXNwb25zaXZlbmVzc1RpbWVyLmNwcCAqLzsgfTsKKwkJOENEQTQyMDgyMDVDRDlE
MzAwNjQ4QTE1IC8qIGxvY2Fsc3RvcmFnZS1lbXB0eS1zdHJpbmctdmFsdWUuaHRtbCBpbiBDb3B5
IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Q0RBNDIwNzIw
NUNEOUE1MDA2NDhBMTUgLyogbG9jYWxzdG9yYWdlLWVtcHR5LXN0cmluZy12YWx1ZS5odG1sICov
OyB9OworCQk4Q0RBNDIwRDIwNUNGRkI5MDA2NDhBMTUgLyogTG9jYWxTdG9yYWdlRW1wdHlTcmlu
Zy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhDREE0
MjA2MjA1Q0Q5OTQwMDY0OEExNSAvKiBMb2NhbFN0b3JhZ2VFbXB0eVNyaW5nLm1tICovOyB9Owog
CQk4RTRBODUzNzFFMUQxQUIyMDBGNTNCMEYgLyogR3JpZFBvc2l0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhFNEE4NTM2MUUxRDFBQTEwMEY1
M0IwRiAvKiBHcmlkUG9zaXRpb24uY3BwICovOyB9OwogCQk5MzBBRDQwMjE1MDY5OEQwMDA2Nzk3
MEYgLyogbG90cy1vZi10ZXh0Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwQUQ0MDExNTA2OThCMzAwNjc5NzBGIC8qIGxvdHMtb2Yt
dGV4dC5odG1sICovOyB9OwogCQk5MzEwQ0QzODFFRjcwOEZCMDA1MEZGRTAgLyogRnVuY3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMxMENE
MzYxRUY3MDhGQjAwNTBGRkUwIC8qIEZ1bmN0aW9uLmNwcCAqLzsgfTsKQEAgLTg1MCw3ICs4NTIs
NyBAQAogCQl9OwogCQlCQ0I5RjRGQjExMjM4NEMwMDBBMTM3RTAgLyogQ29weSBSZXNvdXJjZXMg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25N
YXNrID0gMjE0NzQ4MzY0NzsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDEyOwogCQkJZHN0UGF0aCA9
IFRlc3RXZWJLaXRBUEkucmVzb3VyY2VzOwogCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDc7CiAJCQlm
aWxlcyA9ICgKQEAgLTEwMTIsNiArMTAxNCw3IEBACiAJCQkJODM0OUQzQzQxREI5NzI4RTAwNEE5
RjY1IC8qIGxpbmstd2l0aC1kb3dubG9hZC1hdHRyaWJ1dGUuaHRtbCBpbiBDb3B5IFJlc291cmNl
cyAqLywKIAkJCQkzNzhFNjQ3OTE2MzI3MDc0MDBCNkM2NzYgLyogbGluay13aXRoLXRpdGxlLmh0
bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJNTc5MDFGQjExQ0FGMTQyRDAwRUQ2NEY5IC8q
IExvYWRJbnZhbGlkVVJMUmVxdWVzdC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAorCQkJCThD
REE0MjA4MjA1Q0Q5RDMwMDY0OEExNSAvKiBsb2NhbHN0b3JhZ2UtZW1wdHktc3RyaW5nLXZhbHVl
Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJNTFFNkE4OTYxRDJGMUNBNzAwQzAwNEI2
IC8qIExvY2FsU3RvcmFnZUNsZWFyLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJNDZD
NTE5RTYxRDM1NjNGRDAwREFBNTFBIC8qIExvY2FsU3RvcmFnZU51bGxFbnRyaWVzLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8sCiAJCQkJNDZDNTE5RTcxRDM1NjNGRDAwREFBNTFBIC8qIExvY2Fs
U3RvcmFnZU51bGxFbnRyaWVzLmxvY2Fsc3RvcmFnZSBpbiBDb3B5IFJlc291cmNlcyAqLywKQEAg
LTE1NjEsNiArMTU2NCw4IEBACiAJCThBMkM3NTBEMTZDRUQ5NTUwMDI0RjM1MiAvKiBSZXNpemVX
aW5kb3dBZnRlckNyYXNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlc2l6ZVdpbmRvd0FmdGVyQ3Jhc2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4QTNBRjkzQTE2QzlFRDI3MDBEMjQ4QzEgLyogUmVsb2FkUGFnZUFmdGVyQ3Jhc2guY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVsb2FkUGFnZUFmdGVyQ3Jhc2gu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4QUEyOEMxOTE2RDJGQTdCMDAyRkY0
REIgLyogTG9hZFBhZ2VPbkNyYXNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IExvYWRQYWdlT25DcmFzaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CThDREE0MjA2MjA1Q0Q5OTQwMDY0OEExNSAvKiBMb2NhbFN0b3JhZ2VFbXB0eVNyaW5nLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTG9jYWxTdG9yYWdlRW1wdHlT
cmluZy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOENEQTQyMDcyMDVDRDlBNTAw
NjQ4QTE1IC8qIGxvY2Fsc3RvcmFnZS1lbXB0eS1zdHJpbmctdmFsdWUuaHRtbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQuaHRtbDsgcGF0aCA9ICJsb2NhbHN0b3JhZ2UtZW1wdHktc3RyaW5nLXZhbHVlLmh0bWwi
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4REQ3NkZBMTA0ODZBQTc2MDBEOTZCNUUg
LyogVGVzdFdlYktpdEFQSSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZp
bGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAw
OyBwYXRoID0gVGVzdFdlYktpdEFQSTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJOEU0QTg1MzYxRTFEMUFBMTAwRjUzQjBGIC8qIEdyaWRQb3NpdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmlkUG9zaXRpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5MzBBRDQwMTE1MDY5OEIzMDA2Nzk3MEYgLyogbG90cy1v
Zi10ZXh0Lmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAibG90cy1vZi10ZXh0Lmh0
bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE0OSw2ICsyMTU0LDcgQEAKIAkJ
CQlBMTI1NDc4RDFEQjE4Qjk0MDAzNTg1NjQgLyogTG9hZERhdGFXaXRoTmlsTUlNRVR5cGUubW0g
Ki8sCiAJCQkJNTc5MDFGQUMxQ0FGMTJDMjAwRUQ2NEY5IC8qIExvYWRJbnZhbGlkVVJMUmVxdWVz
dC5tbSAqLywKIAkJCQk1MUU2QTg5MjFEMkYxQkVDMDBDMDA0QjYgLyogTG9jYWxTdG9yYWdlQ2xl
YXIubW0gKi8sCisJCQkJOENEQTQyMDYyMDVDRDk5NDAwNjQ4QTE1IC8qIExvY2FsU3RvcmFnZUVt
cHR5U3JpbmcubW0gKi8sCiAJCQkJNDZDNTE5RDgxRDM1NUE3MzAwREFBNTFBIC8qIExvY2FsU3Rv
cmFnZU51bGxFbnRyaWVzLm1tICovLAogCQkJCTdBNkEyQzZGMURDQ0Y4N0IwMEMwRDA4NSAvKiBM
b2NhbFN0b3JhZ2VRdWlya1Rlc3QubW0gKi8sCiAJCQkJNTE2NUZFMDMyMDFFRTYxNzAwOUY3RUMz
IC8qIE1lc3NhZ2VQb3J0UHJvdmlkZXJzLm1tICovLApAQCAtMjQ3NCw2ICsyNDgwLDcgQEAKIAkJ
CQlDMjVDQ0EwQTFFNTEzRjQ5MDAyNkNCOEEgLyogTGluZUJyZWFraW5nLmh0bWwgKi8sCiAJCQkJ
RjQxQUI5OTYxRUY0NjkyQzAwODNGQTA4IC8qIGxpbmstYW5kLWlucHV0Lmh0bWwgKi8sCiAJCQkJ
RjQxQUI5OUQxRUY0NjkyQzAwODNGQTA4IC8qIGxpbmstYW5kLXRhcmdldC1kaXYuaHRtbCAqLywK
KwkJCQk4Q0RBNDIwNzIwNUNEOUE1MDA2NDhBMTUgLyogbG9jYWxzdG9yYWdlLWVtcHR5LXN0cmlu
Zy12YWx1ZS5odG1sICovLAogCQkJCTUxRTZBODk1MUQyRjFDNzcwMEMwMDRCNiAvKiBMb2NhbFN0
b3JhZ2VDbGVhci5odG1sICovLAogCQkJCTQ2QzUxOUUyMUQzNTYyOTYwMERBQTUxQSAvKiBMb2Nh
bFN0b3JhZ2VOdWxsRW50cmllcy5odG1sICovLAogCQkJCTQ2QzUxOUUzMUQzNTYyOTYwMERBQTUx
QSAvKiBMb2NhbFN0b3JhZ2VOdWxsRW50cmllcy5sb2NhbHN0b3JhZ2UgKi8sCkBAIC0zNTYxLDYg
KzM1NjgsNyBAQAogCQkJCTdDODNFMEMwMUQwQTY1MjcwMEZFQkNGMyAvKiBMb2FkSW52YWxpZFVS
TFJlcXVlc3QubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0YwMDFBNDExQUU2MDA0NDdDNEMg
LyogTG9hZFBhZ2VPbkNyYXNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRTZBODk0MUQyRjFD
MEEwMEMwMDRCNiAvKiBMb2NhbFN0b3JhZ2VDbGVhci5tbSBpbiBTb3VyY2VzICovLAorCQkJCThD
REE0MjBEMjA1Q0ZGQjkwMDY0OEExNSAvKiBMb2NhbFN0b3JhZ2VFbXB0eVNyaW5nLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJNDZDNTE5REExRDM1NUFCMjAwREFBNTFBIC8qIExvY2FsU3RvcmFnZU51
bGxFbnRyaWVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0E2QTJDNzAxRENDRkE4QzAwQzBEMDg1
IC8qIExvY2FsU3RvcmFnZVF1aXJrVGVzdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTA3NkU1MDdG
MUY0NTEzRDYwMDZFOUY1QSAvKiBMb2dnaW5nLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VFbXB0
eVNyaW5nLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0
b3JhZ2VFbXB0eVNyaW5nLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFjZTFjZGRjZTUzMmU2NjNiYmI0MGFiOTQ1
YTdiZTU1ODkzN2NlNWYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZUVtcHR5U3JpbmcubW0KQEAgLTAsMCArMSw5NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaW1wb3J0ICJQbGF0Zm9ybVV0
aWxpdGllcy5oIgorI2ltcG9ydCAiVGVzdC5oIgorI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bv
b2xQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2
YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4K
KyNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9v
bENvbmZpZ3VyYXRpb24uaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgor
I2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworc3RhdGlj
IGJvb2wgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlOworc3RhdGljIFJldGFpblB0cjxXS1NjcmlwdE1l
c3NhZ2U+IGxhc3RTY3JpcHRNZXNzYWdlOworCitAaW50ZXJmYWNlIExvY2FsU3RvcmFnZUVtcHR5
U3RyaW5nTWVzc2FnZUhhbmRsZXIgOiBOU09iamVjdCA8V0tTY3JpcHRNZXNzYWdlSGFuZGxlcj4K
K0BlbmQKKworQGltcGxlbWVudGF0aW9uIExvY2FsU3RvcmFnZUVtcHR5U3RyaW5nTWVzc2FnZUhh
bmRsZXIKKworLSAodm9pZCl1c2VyQ29udGVudENvbnRyb2xsZXI6KFdLVXNlckNvbnRlbnRDb250
cm9sbGVyICopdXNlckNvbnRlbnRDb250cm9sbGVyIGRpZFJlY2VpdmVTY3JpcHRNZXNzYWdlOihX
S1NjcmlwdE1lc3NhZ2UgKiltZXNzYWdlCit7CisgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0g
dHJ1ZTsKKyAgICBsYXN0U2NyaXB0TWVzc2FnZSA9IG1lc3NhZ2U7Cit9CisKK0BlbmQKKworCitU
RVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdlRW1wdHlTdHJpbmcpCit7CisgICAgUmV0YWluUHRy
PExvY2FsU3RvcmFnZUVtcHR5U3RyaW5nTWVzc2FnZUhhbmRsZXI+IGhhbmRsZXIgPSBhZG9wdE5T
KFtbTG9jYWxTdG9yYWdlRW1wdHlTdHJpbmdNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOwor
ICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRv
cHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBbW2NvbmZp
Z3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpo
YW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOworICAgIFtjb25maWd1cmF0aW9uIF9z
ZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMczpZRVNdOworICAgIAorICAgIFJldGFp
blB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbi5nZXQoKV0pOworICAgIAorICAgIE5TVVJMUmVxdWVzdCAqcmVxdWVzdCA9IFtOU1VS
TFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNv
dXJjZTpAImxvY2Fsc3RvcmFnZS1lbXB0eS1zdHJpbmctdmFsdWUiIHdpdGhFeHRlbnNpb246QCJo
dG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXTsKKyAgICBbd2Vi
VmlldyBsb2FkUmVxdWVzdDpyZXF1ZXN0XTsKKyAgICAKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CisgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdl
ID0gZmFsc2U7CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBzdHJpbmcxID0gKE5TU3RyaW5nICop
W2xhc3RTY3JpcHRNZXNzYWdlIGJvZHldOworICAgIEVYUEVDVF9XS19TVFJFUShAIiIsIHN0cmlu
ZzEuZ2V0KCkpOworICAgIAorICAgIC8vIERpdGNoIHRoaXMgd2ViIHZpZXcgKGRpdGNoaW5nIGl0
cyB3ZWIgcHJvY2VzcykKKyAgICB3ZWJWaWV3ID0gbmlsOworICAgIGNvbmZpZ3VyYXRpb24gPSBu
aWw7CisgICAgaGFuZGxlciA9IG5pbDsKKyAgICAKKyAgICBoYW5kbGVyID0gYWRvcHROUyhbW0xv
Y2FsU3RvcmFnZUVtcHR5U3RyaW5nTWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsKKyAgICBj
b25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGlu
aXRdKTsKKyAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3Jp
cHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOworICAg
IFtjb25maWd1cmF0aW9uIF9zZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMczpZRVNd
OworICAgIAorICAgIC8vIE1ha2UgYSBuZXcgd2ViIHZpZXcgdG8gZmluaXNoIHRoZSB0ZXN0Cisg
ICAgd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNN
YWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgp
XSk7CisgICAgCisgICAgcmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W1tO
U0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAImxvY2Fsc3RvcmFnZS1lbXB0eS1z
dHJpbmctdmFsdWUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2Vi
S2l0QVBJLnJlc291cmNlcyJdXTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpyZXF1ZXN0XTsK
KyAgICAKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2Fn
ZSk7CisgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CisgICAgUmV0YWluUHRyPE5T
U3RyaW5nPiBzdHJpbmcyID0gKE5TU3RyaW5nICopW2xhc3RTY3JpcHRNZXNzYWdlIGJvZHldOwor
ICAgIAorICAgIEVYUEVDVF9XS19TVFJFUShAIiIsIHN0cmluZzIuZ2V0KCkpOworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvbG9j
YWxzdG9yYWdlLWVtcHR5LXN0cmluZy12YWx1ZS5odG1sIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9sb2NhbHN0b3JhZ2UtZW1wdHktc3RyaW5nLXZhbHVlLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNjQ4NjlhZDQ1YTZjNDY3YTk4Mjg3OGMxYzEyNzMwMTdhOTVhYjRjZgotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvbG9jYWxz
dG9yYWdlLWVtcHR5LXN0cmluZy12YWx1ZS5odG1sCkBAIC0wLDAgKzEsMTcgQEAKKzxodG1sPgor
PGJvZHk+Cis8c2NyaXB0PgorICB2YXIga2V5ID0gJ0VtcHR5U3RyaW5nJzsKKyAgdmFyIHZhbHVl
ID0gJyc7CisgIHZhciB0ZXN0S2V5ID0gJ1Rlc3RTdHJpbmcnOworICBpZiAoIWxvY2FsU3RvcmFn
ZS5nZXRJdGVtKHRlc3RLZXkpKSB7CisgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1
ZSk7CisgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGVzdEtleSwgJ3Rlc3QnKTsKKyAgfQorICAg
IAorICB2YXIgcmVzdWx0ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTsKKyAgd2luZG93Lndl
YmtpdC5tZXNzYWdlSGFuZGxlcnMudGVzdEhhbmRsZXIucG9zdE1lc3NhZ2UocmVzdWx0KTsKKzwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336018</attachid>
            <date>2018-03-17 16:36:18 -0700</date>
            <delta_ts>2018-03-18 05:29:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69138-20180317163618.patch</filename>
            <type>text/plain</type>
            <size>17196</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5Njk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGIwMjEyZmU4ZGIzZDRlOTU5
MTBkNjUyMzllNGE0MTFiMzEyZWEwNDEuLjllOWRhMGJlMGE1YWE3OTA0MTI5ZWE2Y2VjODIxNzE3
YjcwZWFiNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTgtMDMtMTcgIFNpaHVpIExp
dSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgTG9jYWwgc3RvcmFnZSBnZXRJdGVt
KCkgZm9yIGFuIGVtcHR5IHN0cmluZyByZXR1cm5lZCBVTkRFRklORUQgdmFsdWUuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTEzOAorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMTM0MTA5NzQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGEgZmllbGQgaW4gZGF0YWJhc2UgdG8gaW5kaWNhdGUgd2hl
dGhlciBCTE9CIGlzIGVtcHR5LiAKKworICAgICAgICBUaGUgY2hhbmdlIGlzIGJhc2VkIG9uIGlu
aXRpYWwgcGF0Y2ggYnkgTmF2ZWVuIEJvYmJpbGkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
U3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxvY2Fs
U3RvcmFnZURhdGFiYXNlOjp0cnlUb09wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6Okxv
Y2FsU3RvcmFnZURhdGFiYXNlOjptaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQpOgorICAgICAgICAo
V2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6aW1wb3J0SXRlbXMpOgorICAgICAgICAoV2Vi
S2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6dXBkYXRlRGF0YWJhc2VXaXRoQ2hhbmdlZEl0ZW1z
KToKKwogMjAxOC0wMy0xNiAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjI5Njg4LgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFi
YXNlLmNwcAppbmRleCA4MjYxNThmYjE0YzhkNWE2ZGIzMTg2NWE2ZTk5YWI4NDg3YTkyNjBlLi4x
ZTE0OTA1NTQxNzM4MzhkNTZlYzQ4ZmEwNWQ3OGM5NWY2YmUwY2QzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFi
YXNlLmNwcApAQCAtMTA5LDcgKzEwOSw3IEBAIGJvb2wgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OnRy
eVRvT3BlbkRhdGFiYXNlKERhdGFiYXNlT3BlbmluZ1N0cmF0ZWd5IG9wZW5pbmdTdHJhCiAgICAg
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBkZWxldGUgdGFibGUgSXRlbVRhYmxlIGZvciBs
b2NhbCBzdG9yYWdlIik7CiAgICAgfQogCi0gICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21t
YW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBJdGVtVGFibGUgKGtleSBURVhUIFVOSVFV
RSBPTiBDT05GTElDVCBSRVBMQUNFLCB2YWx1ZSBCTE9CIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZB
SUwpIikpIHsKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJM
RSBJRiBOT1QgRVhJU1RTIEl0ZW1UYWJsZSAoa2V5IFRFWFQgVU5JUVVFIE9OIENPTkZMSUNUIFJF
UExBQ0UsIHZhbHVlIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgaXNCbG9iRW1wdHkg
SU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIERFRkFVTFQgMCkiKSkgewogICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgdGFibGUgSXRlbVRhYmxlIGZvciBsb2NhbCBz
dG9yYWdlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xMjIsMTAgKzEyMiwx
MCBAQCBib29sIExvY2FsU3RvcmFnZURhdGFiYXNlOjptaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQo
KQogICAgIGlmICghbV9kYXRhYmFzZS50YWJsZUV4aXN0cygiSXRlbVRhYmxlIikpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJT
RUxFQ1QgdmFsdWUgRlJPTSBJdGVtVGFibGUgTElNSVQgMSIpOworICAgIFNRTGl0ZVN0YXRlbWVu
dCBxdWVyeShtX2RhdGFiYXNlLCAiU0VMRUNUIGlzQmxvYkVtcHR5IEZST00gSXRlbVRhYmxlIExJ
TUlUIDEiKTsKIAotICAgIC8vIFRoaXMgcXVlcnkgaXNuJ3QgZXZlciBleGVjdXRlZCwgaXQncyBq
dXN0IHVzZWQgdG8gY2hlY2sgdGhlIGNvbHVtbiB0eXBlLgotICAgIGlmIChxdWVyeS5pc0NvbHVt
bkRlY2xhcmVkQXNCbG9iKDApKQorICAgIC8vIFRoaXMgcXVlcnkgaXNuJ3QgZXZlciBleGVjdXRl
ZCwgaXQncyBqdXN0IHVzZWQgdG8gY2hlY2sgdGhlIGNvbHVtbnMuCisgICAgaWYgKHF1ZXJ5LnBy
ZXBhcmUoKSA9PSBTUUxJVEVfT0spCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gQ3Jl
YXRlIGEgbmV3IHRhYmxlIHdpdGggdGhlIHJpZ2h0IHR5cGUsIGNvcHkgYWxsIHRoZSBkYXRhIG92
ZXIgdG8gaXQgYW5kIHRoZW4gcmVwbGFjZSB0aGUgbmV3IHRhYmxlIHdpdGggdGhlIG9sZCB0YWJs
ZS4KQEAgLTEzMyw2ICsxMzMsOCBAQCBib29sIExvY2FsU3RvcmFnZURhdGFiYXNlOjptaWdyYXRl
SXRlbVRhYmxlSWZOZWVkZWQoKQogICAgICAgICAiRFJPUCBUQUJMRSBJRiBFWElTVFMgSXRlbVRh
YmxlMiIsCiAgICAgICAgICJDUkVBVEUgVEFCTEUgSXRlbVRhYmxlMiAoa2V5IFRFWFQgVU5JUVVF
IE9OIENPTkZMSUNUIFJFUExBQ0UsIHZhbHVlIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJ
TCkiLAogICAgICAgICAiSU5TRVJUIElOVE8gSXRlbVRhYmxlMiBTRUxFQ1QgKiBmcm9tIEl0ZW1U
YWJsZSIsCisgICAgICAgICJBTFRFUiBUQUJMRSBJdGVtVGFibGUyIEFERCBpc0Jsb2JFbXB0eSBJ
TlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgREVGQVVMVCAwIiwKKyAgICAgICAgIlVQ
REFURSBJdGVtVGFibGUyIFNFVCBpc0Jsb2JFbXB0eT0xIFdIRVJFIHZhbHVlID0gJyciLAogICAg
ICAgICAiRFJPUCBUQUJMRSBJdGVtVGFibGUiLAogICAgICAgICAiQUxURVIgVEFCTEUgSXRlbVRh
YmxlMiBSRU5BTUUgVE8gSXRlbVRhYmxlIiwKICAgICAgICAgMCwKQEAgLTE3MSw3ICsxNzMsNyBA
QCB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjppbXBvcnRJdGVtcyhTdG9yYWdlTWFwJiBzdG9y
YWdlTWFwKQogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1Qga2V5LCB2YWx1
ZSBGUk9NIEl0ZW1UYWJsZSIpOworICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNl
LCAiU0VMRUNUIGtleSwgdmFsdWUsIGlzQmxvYkVtcHR5IEZST00gSXRlbVRhYmxlIik7CiAgICAg
aWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgTE9HX0VSUk9SKCJV
bmFibGUgdG8gc2VsZWN0IGl0ZW1zIGZyb20gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7
CiAgICAgICAgIHJldHVybjsKQEAgLTE4Myw3ICsxODUsMTAgQEAgdm9pZCBMb2NhbFN0b3JhZ2VE
YXRhYmFzZTo6aW1wb3J0SXRlbXMoU3RvcmFnZU1hcCYgc3RvcmFnZU1hcCkKICAgICB3aGlsZSAo
cmVzdWx0ID09IFNRTElURV9ST1cpIHsKICAgICAgICAgU3RyaW5nIGtleSA9IHF1ZXJ5LmdldENv
bHVtblRleHQoMCk7CiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHF1ZXJ5LmdldENvbHVtbkJsb2JB
c1N0cmluZygxKTsKLSAgICAgICAgaWYgKCFrZXkuaXNOdWxsKCkgJiYgIXZhbHVlLmlzTnVsbCgp
KQorICAgICAgICBib29sIGlzQmxvYkVtcHR5ID0gISFxdWVyeS5nZXRDb2x1bW5JbnQoMik7Cisg
ICAgICAgIGlmIChpc0Jsb2JFbXB0eSkKKyAgICAgICAgICAgIGl0ZW1zLnNldChrZXksICIiKTsK
KyAgICAgICAgZWxzZQogICAgICAgICAgICAgaXRlbXMuc2V0KGtleSwgdmFsdWUpOwogICAgICAg
ICByZXN1bHQgPSBxdWVyeS5zdGVwKCk7CiAgICAgfQpAQCAtMzA3LDcgKzMxMiw3IEBAIHZvaWQg
TG9jYWxTdG9yYWdlRGF0YWJhc2U6OnVwZGF0ZURhdGFiYXNlV2l0aENoYW5nZWRJdGVtcyhjb25z
dCBIYXNoTWFwPFN0cmluZywKICAgICAgICAgfQogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVu
dCBpbnNlcnRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIEl0ZW1UYWJsZSBWQUxV
RVMgKD8sID8pIik7CisgICAgU1FMaXRlU3RhdGVtZW50IGluc2VydFN0YXRlbWVudChtX2RhdGFi
YXNlLCAiSU5TRVJUIElOVE8gSXRlbVRhYmxlIFZBTFVFUyAoPywgPywgPykiKTsKICAgICBpZiAo
aW5zZXJ0U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBpbnNlcnQgc3RhdGVtZW50IC0gY2Fubm90IHdyaXRlIHRv
IGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UiKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzI5LDggKzMz
NCwxMCBAQCB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjp1cGRhdGVEYXRhYmFzZVdpdGhDaGFu
Z2VkSXRlbXMoY29uc3QgSGFzaE1hcDxTdHJpbmcsCiAgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4
dCgxLCBpdC0+a2V5KTsKIAogICAgICAgICAvLyBJZiB3ZSdyZSBpbnNlcnRpbmcgYSBrZXkvdmFs
dWUgcGFpciwgYmluZCB0aGUgdmFsdWUgYXMgd2VsbC4KLSAgICAgICAgaWYgKCFpdC0+dmFsdWUu
aXNOdWxsKCkpCisgICAgICAgIGlmICghaXQtPnZhbHVlLmlzTnVsbCgpKSB7CiAgICAgICAgICAg
ICBzdGF0ZW1lbnQuYmluZEJsb2IoMiwgaXQtPnZhbHVlKTsKKyAgICAgICAgICAgIHN0YXRlbWVu
dC5iaW5kSW50KDMsIGl0LT52YWx1ZS5pc0VtcHR5KCkpOworICAgICAgICB9CiAKICAgICAgICAg
aW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FM
SVRFX0RPTkUpIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCA0MDk4MGY5ZjQ3MGEyYzQ5MzI4ZWFlZWNjYjk5Njc0MWYyZmY2ZjQyLi4zYjkwMDgw
YjI2MTU4ZGEzNzMwNDM3NzA1ZjNmYjNlMDNiMjkxNjYwIDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTgtMDMtMTcg
IFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgTG9jYWwgc3RvcmFn
ZSBnZXRJdGVtKCkgZm9yIGFuIGVtcHR5IHN0cmluZyByZXR1cm5lZCBVTkRFRklORUQgdmFsdWUu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTEzOAor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM0MTA5NzQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEFQSSB0ZXN0IGNvdmVyYWdlLgorCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3Jh
Z2VFbXB0eVNyaW5nLm1tOiBBZGRlZC4KKyAgICAgICAgKC1bTG9jYWxTdG9yYWdlRW1wdHlTdHJp
bmdNZXNzYWdlSGFuZGxlciB1c2VyQ29udGVudENvbnRyb2xsZXI6ZGlkUmVjZWl2ZVNjcmlwdE1l
c3NhZ2U6XSk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL2xvY2Fsc3RvcmFnZS1lbXB0eS1zdHJpbmctdmFsdWUuaHRtbDogQWRkZWQu
CisKIDIwMTgtMDMtMTYgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIyOTY4OC4KZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggYjM5NDg4NTBjYzA3MTVkNDM2NmI0OTU5ZDAyY2Q2MjRmNTQ5MjY1Yy4uZjI2
NzhmMmY1NDE0MzA4Zjg0NjFkZjg2YzUxY2JhMThiMjc3YzJmMSAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTU0OSw2ICs1NDksOCBAQAogCQk4M0JBRUU4RDFFRjQ2MjU1MDBEREU4OTQgLyog
UGx1Z2luTG9hZENsaWVudFBvbGljaWVzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODNCQUVFOEMxRUY0NjI1NTAwRERFODk0IC8qIFBsdWdpbkxvYWRD
bGllbnRQb2xpY2llcy5tbSAqLzsgfTsKIAkJODNEQjc5NjkxRUY2M0IzQzAwQkZBNUU1IC8qIEZ1
bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDgzREI3OTY3MUVGNjNCM0MwMEJGQTVFNSAvKiBGdW5jdGlvbi5jcHAgKi87IH07CiAJCTgzREUx
MzREMUVGMUM1MDgwMEMxQjM1NSAvKiBSZXNwb25zaXZlbmVzc1RpbWVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzREUxMzRDMUVGMUM0RkUwMEMx
QjM1NSAvKiBSZXNwb25zaXZlbmVzc1RpbWVyLmNwcCAqLzsgfTsKKwkJOENEQTQyMDgyMDVDRDlE
MzAwNjQ4QTE1IC8qIGxvY2Fsc3RvcmFnZS1lbXB0eS1zdHJpbmctdmFsdWUuaHRtbCBpbiBDb3B5
IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Q0RBNDIwNzIw
NUNEOUE1MDA2NDhBMTUgLyogbG9jYWxzdG9yYWdlLWVtcHR5LXN0cmluZy12YWx1ZS5odG1sICov
OyB9OworCQk4Q0RBNDIwRDIwNUNGRkI5MDA2NDhBMTUgLyogTG9jYWxTdG9yYWdlRW1wdHlTcmlu
Zy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhDREE0
MjA2MjA1Q0Q5OTQwMDY0OEExNSAvKiBMb2NhbFN0b3JhZ2VFbXB0eVNyaW5nLm1tICovOyB9Owog
CQk4RTRBODUzNzFFMUQxQUIyMDBGNTNCMEYgLyogR3JpZFBvc2l0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhFNEE4NTM2MUUxRDFBQTEwMEY1
M0IwRiAvKiBHcmlkUG9zaXRpb24uY3BwICovOyB9OwogCQk5MzBBRDQwMjE1MDY5OEQwMDA2Nzk3
MEYgLyogbG90cy1vZi10ZXh0Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwQUQ0MDExNTA2OThCMzAwNjc5NzBGIC8qIGxvdHMtb2Yt
dGV4dC5odG1sICovOyB9OwogCQk5MzEwQ0QzODFFRjcwOEZCMDA1MEZGRTAgLyogRnVuY3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMxMENE
MzYxRUY3MDhGQjAwNTBGRkUwIC8qIEZ1bmN0aW9uLmNwcCAqLzsgfTsKQEAgLTg1MCw3ICs4NTIs
NyBAQAogCQl9OwogCQlCQ0I5RjRGQjExMjM4NEMwMDBBMTM3RTAgLyogQ29weSBSZXNvdXJjZXMg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25N
YXNrID0gMjE0NzQ4MzY0NzsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDEyOwogCQkJZHN0UGF0aCA9
IFRlc3RXZWJLaXRBUEkucmVzb3VyY2VzOwogCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDc7CiAJCQlm
aWxlcyA9ICgKQEAgLTEwMTIsNiArMTAxNCw3IEBACiAJCQkJODM0OUQzQzQxREI5NzI4RTAwNEE5
RjY1IC8qIGxpbmstd2l0aC1kb3dubG9hZC1hdHRyaWJ1dGUuaHRtbCBpbiBDb3B5IFJlc291cmNl
cyAqLywKIAkJCQkzNzhFNjQ3OTE2MzI3MDc0MDBCNkM2NzYgLyogbGluay13aXRoLXRpdGxlLmh0
bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJNTc5MDFGQjExQ0FGMTQyRDAwRUQ2NEY5IC8q
IExvYWRJbnZhbGlkVVJMUmVxdWVzdC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAorCQkJCThD
REE0MjA4MjA1Q0Q5RDMwMDY0OEExNSAvKiBsb2NhbHN0b3JhZ2UtZW1wdHktc3RyaW5nLXZhbHVl
Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJNTFFNkE4OTYxRDJGMUNBNzAwQzAwNEI2
IC8qIExvY2FsU3RvcmFnZUNsZWFyLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJNDZD
NTE5RTYxRDM1NjNGRDAwREFBNTFBIC8qIExvY2FsU3RvcmFnZU51bGxFbnRyaWVzLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8sCiAJCQkJNDZDNTE5RTcxRDM1NjNGRDAwREFBNTFBIC8qIExvY2Fs
U3RvcmFnZU51bGxFbnRyaWVzLmxvY2Fsc3RvcmFnZSBpbiBDb3B5IFJlc291cmNlcyAqLywKQEAg
LTE1NjEsNiArMTU2NCw4IEBACiAJCThBMkM3NTBEMTZDRUQ5NTUwMDI0RjM1MiAvKiBSZXNpemVX
aW5kb3dBZnRlckNyYXNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlc2l6ZVdpbmRvd0FmdGVyQ3Jhc2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4QTNBRjkzQTE2QzlFRDI3MDBEMjQ4QzEgLyogUmVsb2FkUGFnZUFmdGVyQ3Jhc2guY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVsb2FkUGFnZUFmdGVyQ3Jhc2gu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4QUEyOEMxOTE2RDJGQTdCMDAyRkY0
REIgLyogTG9hZFBhZ2VPbkNyYXNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IExvYWRQYWdlT25DcmFzaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CThDREE0MjA2MjA1Q0Q5OTQwMDY0OEExNSAvKiBMb2NhbFN0b3JhZ2VFbXB0eVNyaW5nLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTG9jYWxTdG9yYWdlRW1wdHlT
cmluZy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOENEQTQyMDcyMDVDRDlBNTAw
NjQ4QTE1IC8qIGxvY2Fsc3RvcmFnZS1lbXB0eS1zdHJpbmctdmFsdWUuaHRtbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQuaHRtbDsgcGF0aCA9ICJsb2NhbHN0b3JhZ2UtZW1wdHktc3RyaW5nLXZhbHVlLmh0bWwi
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4REQ3NkZBMTA0ODZBQTc2MDBEOTZCNUUg
LyogVGVzdFdlYktpdEFQSSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZp
bGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAw
OyBwYXRoID0gVGVzdFdlYktpdEFQSTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKIAkJOEU0QTg1MzYxRTFEMUFBMTAwRjUzQjBGIC8qIEdyaWRQb3NpdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmlkUG9zaXRpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5MzBBRDQwMTE1MDY5OEIzMDA2Nzk3MEYgLyogbG90cy1v
Zi10ZXh0Lmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAibG90cy1vZi10ZXh0Lmh0
bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE0OSw2ICsyMTU0LDcgQEAKIAkJ
CQlBMTI1NDc4RDFEQjE4Qjk0MDAzNTg1NjQgLyogTG9hZERhdGFXaXRoTmlsTUlNRVR5cGUubW0g
Ki8sCiAJCQkJNTc5MDFGQUMxQ0FGMTJDMjAwRUQ2NEY5IC8qIExvYWRJbnZhbGlkVVJMUmVxdWVz
dC5tbSAqLywKIAkJCQk1MUU2QTg5MjFEMkYxQkVDMDBDMDA0QjYgLyogTG9jYWxTdG9yYWdlQ2xl
YXIubW0gKi8sCisJCQkJOENEQTQyMDYyMDVDRDk5NDAwNjQ4QTE1IC8qIExvY2FsU3RvcmFnZUVt
cHR5U3JpbmcubW0gKi8sCiAJCQkJNDZDNTE5RDgxRDM1NUE3MzAwREFBNTFBIC8qIExvY2FsU3Rv
cmFnZU51bGxFbnRyaWVzLm1tICovLAogCQkJCTdBNkEyQzZGMURDQ0Y4N0IwMEMwRDA4NSAvKiBM
b2NhbFN0b3JhZ2VRdWlya1Rlc3QubW0gKi8sCiAJCQkJNTE2NUZFMDMyMDFFRTYxNzAwOUY3RUMz
IC8qIE1lc3NhZ2VQb3J0UHJvdmlkZXJzLm1tICovLApAQCAtMjQ3NCw2ICsyNDgwLDcgQEAKIAkJ
CQlDMjVDQ0EwQTFFNTEzRjQ5MDAyNkNCOEEgLyogTGluZUJyZWFraW5nLmh0bWwgKi8sCiAJCQkJ
RjQxQUI5OTYxRUY0NjkyQzAwODNGQTA4IC8qIGxpbmstYW5kLWlucHV0Lmh0bWwgKi8sCiAJCQkJ
RjQxQUI5OUQxRUY0NjkyQzAwODNGQTA4IC8qIGxpbmstYW5kLXRhcmdldC1kaXYuaHRtbCAqLywK
KwkJCQk4Q0RBNDIwNzIwNUNEOUE1MDA2NDhBMTUgLyogbG9jYWxzdG9yYWdlLWVtcHR5LXN0cmlu
Zy12YWx1ZS5odG1sICovLAogCQkJCTUxRTZBODk1MUQyRjFDNzcwMEMwMDRCNiAvKiBMb2NhbFN0
b3JhZ2VDbGVhci5odG1sICovLAogCQkJCTQ2QzUxOUUyMUQzNTYyOTYwMERBQTUxQSAvKiBMb2Nh
bFN0b3JhZ2VOdWxsRW50cmllcy5odG1sICovLAogCQkJCTQ2QzUxOUUzMUQzNTYyOTYwMERBQTUx
QSAvKiBMb2NhbFN0b3JhZ2VOdWxsRW50cmllcy5sb2NhbHN0b3JhZ2UgKi8sCkBAIC0zNTYxLDYg
KzM1NjgsNyBAQAogCQkJCTdDODNFMEMwMUQwQTY1MjcwMEZFQkNGMyAvKiBMb2FkSW52YWxpZFVS
TFJlcXVlc3QubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0YwMDFBNDExQUU2MDA0NDdDNEMg
LyogTG9hZFBhZ2VPbkNyYXNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRTZBODk0MUQyRjFD
MEEwMEMwMDRCNiAvKiBMb2NhbFN0b3JhZ2VDbGVhci5tbSBpbiBTb3VyY2VzICovLAorCQkJCThD
REE0MjBEMjA1Q0ZGQjkwMDY0OEExNSAvKiBMb2NhbFN0b3JhZ2VFbXB0eVNyaW5nLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJNDZDNTE5REExRDM1NUFCMjAwREFBNTFBIC8qIExvY2FsU3RvcmFnZU51
bGxFbnRyaWVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0E2QTJDNzAxRENDRkE4QzAwQzBEMDg1
IC8qIExvY2FsU3RvcmFnZVF1aXJrVGVzdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTA3NkU1MDdG
MUY0NTEzRDYwMDZFOUY1QSAvKiBMb2dnaW5nLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VFbXB0
eVNyaW5nLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0
b3JhZ2VFbXB0eVNyaW5nLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmNTRiODNiMWY2OGEwZGJjMmE1NGI4NjBm
MWI0Y2Q5M2E0YjVlMjMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZUVtcHR5U3JpbmcubW0KQEAgLTAsMCArMSw5NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaW1wb3J0ICJQbGF0Zm9ybVV0
aWxpdGllcy5oIgorI2ltcG9ydCAiVGVzdC5oIgorI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bv
b2xQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2
YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4K
KyNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9v
bENvbmZpZ3VyYXRpb24uaD4KKyNpbXBvcnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgor
I2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworc3RhdGlj
IGJvb2wgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlOworc3RhdGljIFJldGFpblB0cjxXS1NjcmlwdE1l
c3NhZ2U+IGxhc3RTY3JpcHRNZXNzYWdlOworCitAaW50ZXJmYWNlIExvY2FsU3RvcmFnZUVtcHR5
U3RyaW5nTWVzc2FnZUhhbmRsZXIgOiBOU09iamVjdCA8V0tTY3JpcHRNZXNzYWdlSGFuZGxlcj4K
K0BlbmQKKworQGltcGxlbWVudGF0aW9uIExvY2FsU3RvcmFnZUVtcHR5U3RyaW5nTWVzc2FnZUhh
bmRsZXIKKworLSAodm9pZCl1c2VyQ29udGVudENvbnRyb2xsZXI6KFdLVXNlckNvbnRlbnRDb250
cm9sbGVyICopdXNlckNvbnRlbnRDb250cm9sbGVyIGRpZFJlY2VpdmVTY3JpcHRNZXNzYWdlOihX
S1NjcmlwdE1lc3NhZ2UgKiltZXNzYWdlCit7CisgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0g
dHJ1ZTsKKyAgICBsYXN0U2NyaXB0TWVzc2FnZSA9IG1lc3NhZ2U7Cit9CisKK0BlbmQKKworCitU
RVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdlRW1wdHlTdHJpbmcpCit7CisgICAgUmV0YWluUHRy
PExvY2FsU3RvcmFnZUVtcHR5U3RyaW5nTWVzc2FnZUhhbmRsZXI+IGhhbmRsZXIgPSBhZG9wdE5T
KFtbTG9jYWxTdG9yYWdlRW1wdHlTdHJpbmdNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOwor
ICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRv
cHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBbW2NvbmZp
Z3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpo
YW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOworICAgIFtjb25maWd1cmF0aW9uIF9z
ZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMczpZRVNdOworICAgIAorICAgIFJldGFp
blB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbi5nZXQoKV0pOworICAgIAorICAgIE5TVVJMUmVxdWVzdCAqcmVxdWVzdCA9IFtOU1VS
TFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNv
dXJjZTpAImxvY2Fsc3RvcmFnZS1lbXB0eS1zdHJpbmctdmFsdWUiIHdpdGhFeHRlbnNpb246QCJo
dG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXTsKKyAgICBbd2Vi
VmlldyBsb2FkUmVxdWVzdDpyZXF1ZXN0XTsKKyAgICAKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7CisgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdl
ID0gZmFsc2U7CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBzdHJpbmcxID0gKE5TU3RyaW5nICop
W2xhc3RTY3JpcHRNZXNzYWdlIGJvZHldOworICAgIEVYUEVDVF9XS19TVFJFUShAIiIsIHN0cmlu
ZzEuZ2V0KCkpOworICAgIAorICAgIC8vIERpdGNoIHRoaXMgd2ViIHZpZXcgKGRpdGNoIHRoZSBp
bi1tZW1vcnkgbG9jYWwgc3RvcmFnZSkuCisgICAgd2ViVmlldyA9IG5pbDsKKyAgICBjb25maWd1
cmF0aW9uID0gbmlsOworICAgIGhhbmRsZXIgPSBuaWw7CisgICAgCisgICAgaGFuZGxlciA9IGFk
b3B0TlMoW1tMb2NhbFN0b3JhZ2VFbXB0eVN0cmluZ01lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0
XSk7CisgICAgY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9u
IGFsbG9jXSBpbml0XSk7CisgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxl
cl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRs
ZXIiXTsKKyAgICBbY29uZmlndXJhdGlvbiBfc2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmls
ZVVSTHM6WUVTXTsKKyAgICAKKyAgICAvLyBNYWtlIGEgbmV3IHdlYiB2aWV3IHRvIGZpbmlzaCB0
aGUgdGVzdC4KKyAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3Vy
YXRpb24uZ2V0KCldKTsKKyAgICAKKyAgICByZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0
V2l0aFVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAibG9jYWxzdG9y
YWdlLWVtcHR5LXN0cmluZy12YWx1ZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9y
eTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0
OnJlcXVlc3RdOworICAgIAorICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRT
Y3JpcHRNZXNzYWdlKTsKKyAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKKyAgICBS
ZXRhaW5QdHI8TlNTdHJpbmc+IHN0cmluZzIgPSAoTlNTdHJpbmcgKilbbGFzdFNjcmlwdE1lc3Nh
Z2UgYm9keV07CisgICAgCisgICAgRVhQRUNUX1dLX1NUUkVRKEAiIiwgc3RyaW5nMi5nZXQoKSk7
Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9sb2NhbHN0b3JhZ2UtZW1wdHktc3RyaW5nLXZhbHVlLmh0bWwgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL2xvY2Fsc3RvcmFnZS1lbXB0eS1zdHJpbmctdmFs
dWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42NDg2OWFkNDVhNmM0NjdhOTgyODc4YzFjMTI3MzAxN2E5NWFi
NGNmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9sb2NhbHN0b3JhZ2UtZW1wdHktc3RyaW5nLXZhbHVlLmh0bWwKQEAgLTAsMCArMSwxNyBA
QAorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQ+CisgIHZhciBrZXkgPSAnRW1wdHlTdHJpbmcnOwor
ICB2YXIgdmFsdWUgPSAnJzsKKyAgdmFyIHRlc3RLZXkgPSAnVGVzdFN0cmluZyc7CisgIGlmICgh
bG9jYWxTdG9yYWdlLmdldEl0ZW0odGVzdEtleSkpIHsKKyAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRl
bShrZXksIHZhbHVlKTsKKyAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0ZXN0S2V5LCAndGVzdCcp
OworICB9CisgICAgCisgIHZhciByZXN1bHQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpOwor
ICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0SGFuZGxlci5wb3N0TWVzc2FnZShy
ZXN1bHQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336023</attachid>
            <date>2018-03-18 05:29:38 -0700</date>
            <delta_ts>2018-03-19 22:06:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69138-20180318052937.patch</filename>
            <type>text/plain</type>
            <size>16944</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5Njk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGIwMjEyZmU4ZGIzZDRlOTU5
MTBkNjUyMzllNGE0MTFiMzEyZWEwNDEuLjllOWRhMGJlMGE1YWE3OTA0MTI5ZWE2Y2VjODIxNzE3
YjcwZWFiNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTgtMDMtMTcgIFNpaHVpIExp
dSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgTG9jYWwgc3RvcmFnZSBnZXRJdGVt
KCkgZm9yIGFuIGVtcHR5IHN0cmluZyByZXR1cm5lZCBVTkRFRklORUQgdmFsdWUuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTEzOAorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMTM0MTA5NzQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGEgZmllbGQgaW4gZGF0YWJhc2UgdG8gaW5kaWNhdGUgd2hl
dGhlciBCTE9CIGlzIGVtcHR5LiAKKworICAgICAgICBUaGUgY2hhbmdlIGlzIGJhc2VkIG9uIGlu
aXRpYWwgcGF0Y2ggYnkgTmF2ZWVuIEJvYmJpbGkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
U3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxvY2Fs
U3RvcmFnZURhdGFiYXNlOjp0cnlUb09wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6Okxv
Y2FsU3RvcmFnZURhdGFiYXNlOjptaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQpOgorICAgICAgICAo
V2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6aW1wb3J0SXRlbXMpOgorICAgICAgICAoV2Vi
S2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6dXBkYXRlRGF0YWJhc2VXaXRoQ2hhbmdlZEl0ZW1z
KToKKwogMjAxOC0wMy0xNiAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjI5Njg4LgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFi
YXNlLmNwcAppbmRleCA4MjYxNThmYjE0YzhkNWE2ZGIzMTg2NWE2ZTk5YWI4NDg3YTkyNjBlLi4x
ZTE0OTA1NTQxNzM4MzhkNTZlYzQ4ZmEwNWQ3OGM5NWY2YmUwY2QzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFi
YXNlLmNwcApAQCAtMTA5LDcgKzEwOSw3IEBAIGJvb2wgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OnRy
eVRvT3BlbkRhdGFiYXNlKERhdGFiYXNlT3BlbmluZ1N0cmF0ZWd5IG9wZW5pbmdTdHJhCiAgICAg
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBkZWxldGUgdGFibGUgSXRlbVRhYmxlIGZvciBs
b2NhbCBzdG9yYWdlIik7CiAgICAgfQogCi0gICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21t
YW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBJdGVtVGFibGUgKGtleSBURVhUIFVOSVFV
RSBPTiBDT05GTElDVCBSRVBMQUNFLCB2YWx1ZSBCTE9CIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZB
SUwpIikpIHsKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJM
RSBJRiBOT1QgRVhJU1RTIEl0ZW1UYWJsZSAoa2V5IFRFWFQgVU5JUVVFIE9OIENPTkZMSUNUIFJF
UExBQ0UsIHZhbHVlIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgaXNCbG9iRW1wdHkg
SU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIERFRkFVTFQgMCkiKSkgewogICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgdGFibGUgSXRlbVRhYmxlIGZvciBsb2NhbCBz
dG9yYWdlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xMjIsMTAgKzEyMiwx
MCBAQCBib29sIExvY2FsU3RvcmFnZURhdGFiYXNlOjptaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQo
KQogICAgIGlmICghbV9kYXRhYmFzZS50YWJsZUV4aXN0cygiSXRlbVRhYmxlIikpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJT
RUxFQ1QgdmFsdWUgRlJPTSBJdGVtVGFibGUgTElNSVQgMSIpOworICAgIFNRTGl0ZVN0YXRlbWVu
dCBxdWVyeShtX2RhdGFiYXNlLCAiU0VMRUNUIGlzQmxvYkVtcHR5IEZST00gSXRlbVRhYmxlIExJ
TUlUIDEiKTsKIAotICAgIC8vIFRoaXMgcXVlcnkgaXNuJ3QgZXZlciBleGVjdXRlZCwgaXQncyBq
dXN0IHVzZWQgdG8gY2hlY2sgdGhlIGNvbHVtbiB0eXBlLgotICAgIGlmIChxdWVyeS5pc0NvbHVt
bkRlY2xhcmVkQXNCbG9iKDApKQorICAgIC8vIFRoaXMgcXVlcnkgaXNuJ3QgZXZlciBleGVjdXRl
ZCwgaXQncyBqdXN0IHVzZWQgdG8gY2hlY2sgdGhlIGNvbHVtbnMuCisgICAgaWYgKHF1ZXJ5LnBy
ZXBhcmUoKSA9PSBTUUxJVEVfT0spCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gQ3Jl
YXRlIGEgbmV3IHRhYmxlIHdpdGggdGhlIHJpZ2h0IHR5cGUsIGNvcHkgYWxsIHRoZSBkYXRhIG92
ZXIgdG8gaXQgYW5kIHRoZW4gcmVwbGFjZSB0aGUgbmV3IHRhYmxlIHdpdGggdGhlIG9sZCB0YWJs
ZS4KQEAgLTEzMyw2ICsxMzMsOCBAQCBib29sIExvY2FsU3RvcmFnZURhdGFiYXNlOjptaWdyYXRl
SXRlbVRhYmxlSWZOZWVkZWQoKQogICAgICAgICAiRFJPUCBUQUJMRSBJRiBFWElTVFMgSXRlbVRh
YmxlMiIsCiAgICAgICAgICJDUkVBVEUgVEFCTEUgSXRlbVRhYmxlMiAoa2V5IFRFWFQgVU5JUVVF
IE9OIENPTkZMSUNUIFJFUExBQ0UsIHZhbHVlIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJ
TCkiLAogICAgICAgICAiSU5TRVJUIElOVE8gSXRlbVRhYmxlMiBTRUxFQ1QgKiBmcm9tIEl0ZW1U
YWJsZSIsCisgICAgICAgICJBTFRFUiBUQUJMRSBJdGVtVGFibGUyIEFERCBpc0Jsb2JFbXB0eSBJ
TlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgREVGQVVMVCAwIiwKKyAgICAgICAgIlVQ
REFURSBJdGVtVGFibGUyIFNFVCBpc0Jsb2JFbXB0eT0xIFdIRVJFIHZhbHVlID0gJyciLAogICAg
ICAgICAiRFJPUCBUQUJMRSBJdGVtVGFibGUiLAogICAgICAgICAiQUxURVIgVEFCTEUgSXRlbVRh
YmxlMiBSRU5BTUUgVE8gSXRlbVRhYmxlIiwKICAgICAgICAgMCwKQEAgLTE3MSw3ICsxNzMsNyBA
QCB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjppbXBvcnRJdGVtcyhTdG9yYWdlTWFwJiBzdG9y
YWdlTWFwKQogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1Qga2V5LCB2YWx1
ZSBGUk9NIEl0ZW1UYWJsZSIpOworICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNl
LCAiU0VMRUNUIGtleSwgdmFsdWUsIGlzQmxvYkVtcHR5IEZST00gSXRlbVRhYmxlIik7CiAgICAg
aWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgTE9HX0VSUk9SKCJV
bmFibGUgdG8gc2VsZWN0IGl0ZW1zIGZyb20gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7
CiAgICAgICAgIHJldHVybjsKQEAgLTE4Myw3ICsxODUsMTAgQEAgdm9pZCBMb2NhbFN0b3JhZ2VE
YXRhYmFzZTo6aW1wb3J0SXRlbXMoU3RvcmFnZU1hcCYgc3RvcmFnZU1hcCkKICAgICB3aGlsZSAo
cmVzdWx0ID09IFNRTElURV9ST1cpIHsKICAgICAgICAgU3RyaW5nIGtleSA9IHF1ZXJ5LmdldENv
bHVtblRleHQoMCk7CiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHF1ZXJ5LmdldENvbHVtbkJsb2JB
c1N0cmluZygxKTsKLSAgICAgICAgaWYgKCFrZXkuaXNOdWxsKCkgJiYgIXZhbHVlLmlzTnVsbCgp
KQorICAgICAgICBib29sIGlzQmxvYkVtcHR5ID0gISFxdWVyeS5nZXRDb2x1bW5JbnQoMik7Cisg
ICAgICAgIGlmIChpc0Jsb2JFbXB0eSkKKyAgICAgICAgICAgIGl0ZW1zLnNldChrZXksICIiKTsK
KyAgICAgICAgZWxzZQogICAgICAgICAgICAgaXRlbXMuc2V0KGtleSwgdmFsdWUpOwogICAgICAg
ICByZXN1bHQgPSBxdWVyeS5zdGVwKCk7CiAgICAgfQpAQCAtMzA3LDcgKzMxMiw3IEBAIHZvaWQg
TG9jYWxTdG9yYWdlRGF0YWJhc2U6OnVwZGF0ZURhdGFiYXNlV2l0aENoYW5nZWRJdGVtcyhjb25z
dCBIYXNoTWFwPFN0cmluZywKICAgICAgICAgfQogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVu
dCBpbnNlcnRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIEl0ZW1UYWJsZSBWQUxV
RVMgKD8sID8pIik7CisgICAgU1FMaXRlU3RhdGVtZW50IGluc2VydFN0YXRlbWVudChtX2RhdGFi
YXNlLCAiSU5TRVJUIElOVE8gSXRlbVRhYmxlIFZBTFVFUyAoPywgPywgPykiKTsKICAgICBpZiAo
aW5zZXJ0U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBpbnNlcnQgc3RhdGVtZW50IC0gY2Fubm90IHdyaXRlIHRv
IGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UiKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzI5LDggKzMz
NCwxMCBAQCB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjp1cGRhdGVEYXRhYmFzZVdpdGhDaGFu
Z2VkSXRlbXMoY29uc3QgSGFzaE1hcDxTdHJpbmcsCiAgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4
dCgxLCBpdC0+a2V5KTsKIAogICAgICAgICAvLyBJZiB3ZSdyZSBpbnNlcnRpbmcgYSBrZXkvdmFs
dWUgcGFpciwgYmluZCB0aGUgdmFsdWUgYXMgd2VsbC4KLSAgICAgICAgaWYgKCFpdC0+dmFsdWUu
aXNOdWxsKCkpCisgICAgICAgIGlmICghaXQtPnZhbHVlLmlzTnVsbCgpKSB7CiAgICAgICAgICAg
ICBzdGF0ZW1lbnQuYmluZEJsb2IoMiwgaXQtPnZhbHVlKTsKKyAgICAgICAgICAgIHN0YXRlbWVu
dC5iaW5kSW50KDMsIGl0LT52YWx1ZS5pc0VtcHR5KCkpOworICAgICAgICB9CiAKICAgICAgICAg
aW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FM
SVRFX0RPTkUpIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCA0MDk4MGY5ZjQ3MGEyYzQ5MzI4ZWFlZWNjYjk5Njc0MWYyZmY2ZjQyLi4zYjkwMDgw
YjI2MTU4ZGEzNzMwNDM3NzA1ZjNmYjNlMDNiMjkxNjYwIDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTgtMDMtMTcg
IFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgTG9jYWwgc3RvcmFn
ZSBnZXRJdGVtKCkgZm9yIGFuIGVtcHR5IHN0cmluZyByZXR1cm5lZCBVTkRFRklORUQgdmFsdWUu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTEzOAor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM0MTA5NzQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEFQSSB0ZXN0IGNvdmVyYWdlLgorCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3Jh
Z2VFbXB0eVNyaW5nLm1tOiBBZGRlZC4KKyAgICAgICAgKC1bTG9jYWxTdG9yYWdlRW1wdHlTdHJp
bmdNZXNzYWdlSGFuZGxlciB1c2VyQ29udGVudENvbnRyb2xsZXI6ZGlkUmVjZWl2ZVNjcmlwdE1l
c3NhZ2U6XSk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL2xvY2Fsc3RvcmFnZS1lbXB0eS1zdHJpbmctdmFsdWUuaHRtbDogQWRkZWQu
CisKIDIwMTgtMDMtMTYgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIyOTY4OC4KZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggYjM5NDg4NTBjYzA3MTVkNDM2NmI0OTU5ZDAyY2Q2MjRmNTQ5MjY1Yy4uYWFm
NjFmZjM2NGVhNmVkYjFhNmM4ZmNkNzM2M2M5NmYxNzhkNmQ0NiAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTU0OSw2ICs1NDksOCBAQAogCQk4M0JBRUU4RDFFRjQ2MjU1MDBEREU4OTQgLyog
UGx1Z2luTG9hZENsaWVudFBvbGljaWVzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODNCQUVFOEMxRUY0NjI1NTAwRERFODk0IC8qIFBsdWdpbkxvYWRD
bGllbnRQb2xpY2llcy5tbSAqLzsgfTsKIAkJODNEQjc5NjkxRUY2M0IzQzAwQkZBNUU1IC8qIEZ1
bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDgzREI3OTY3MUVGNjNCM0MwMEJGQTVFNSAvKiBGdW5jdGlvbi5jcHAgKi87IH07CiAJCTgzREUx
MzREMUVGMUM1MDgwMEMxQjM1NSAvKiBSZXNwb25zaXZlbmVzc1RpbWVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzREUxMzRDMUVGMUM0RkUwMEMx
QjM1NSAvKiBSZXNwb25zaXZlbmVzc1RpbWVyLmNwcCAqLzsgfTsKKwkJOENEQTQyMDgyMDVDRDlE
MzAwNjQ4QTE1IC8qIGxvY2Fsc3RvcmFnZS1lbXB0eS1zdHJpbmctdmFsdWUuaHRtbCBpbiBDb3B5
IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Q0RBNDIwNzIw
NUNEOUE1MDA2NDhBMTUgLyogbG9jYWxzdG9yYWdlLWVtcHR5LXN0cmluZy12YWx1ZS5odG1sICov
OyB9OworCQk4Q0RBNDIwRDIwNUNGRkI5MDA2NDhBMTUgLyogTG9jYWxTdG9yYWdlRW1wdHlTcmlu
Zy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhDREE0
MjA2MjA1Q0Q5OTQwMDY0OEExNSAvKiBMb2NhbFN0b3JhZ2VFbXB0eVNyaW5nLm1tICovOyB9Owog
CQk4RTRBODUzNzFFMUQxQUIyMDBGNTNCMEYgLyogR3JpZFBvc2l0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhFNEE4NTM2MUUxRDFBQTEwMEY1
M0IwRiAvKiBHcmlkUG9zaXRpb24uY3BwICovOyB9OwogCQk5MzBBRDQwMjE1MDY5OEQwMDA2Nzk3
MEYgLyogbG90cy1vZi10ZXh0Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwQUQ0MDExNTA2OThCMzAwNjc5NzBGIC8qIGxvdHMtb2Yt
dGV4dC5odG1sICovOyB9OwogCQk5MzEwQ0QzODFFRjcwOEZCMDA1MEZGRTAgLyogRnVuY3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMxMENE
MzYxRUY3MDhGQjAwNTBGRkUwIC8qIEZ1bmN0aW9uLmNwcCAqLzsgfTsKQEAgLTEwMTIsNiArMTAx
NCw3IEBACiAJCQkJODM0OUQzQzQxREI5NzI4RTAwNEE5RjY1IC8qIGxpbmstd2l0aC1kb3dubG9h
ZC1hdHRyaWJ1dGUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQkzNzhFNjQ3OTE2MzI3
MDc0MDBCNkM2NzYgLyogbGluay13aXRoLXRpdGxlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8s
CiAJCQkJNTc5MDFGQjExQ0FGMTQyRDAwRUQ2NEY5IC8qIExvYWRJbnZhbGlkVVJMUmVxdWVzdC5o
dG1sIGluIENvcHkgUmVzb3VyY2VzICovLAorCQkJCThDREE0MjA4MjA1Q0Q5RDMwMDY0OEExNSAv
KiBsb2NhbHN0b3JhZ2UtZW1wdHktc3RyaW5nLXZhbHVlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMg
Ki8sCiAJCQkJNTFFNkE4OTYxRDJGMUNBNzAwQzAwNEI2IC8qIExvY2FsU3RvcmFnZUNsZWFyLmh0
bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJNDZDNTE5RTYxRDM1NjNGRDAwREFBNTFBIC8q
IExvY2FsU3RvcmFnZU51bGxFbnRyaWVzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJ
NDZDNTE5RTcxRDM1NjNGRDAwREFBNTFBIC8qIExvY2FsU3RvcmFnZU51bGxFbnRyaWVzLmxvY2Fs
c3RvcmFnZSBpbiBDb3B5IFJlc291cmNlcyAqLywKQEAgLTE1NjEsNiArMTU2NCw4IEBACiAJCThB
MkM3NTBEMTZDRUQ5NTUwMDI0RjM1MiAvKiBSZXNpemVXaW5kb3dBZnRlckNyYXNoLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc2l6ZVdpbmRvd0FmdGVyQ3Jhc2gu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4QTNBRjkzQTE2QzlFRDI3MDBEMjQ4
QzEgLyogUmVsb2FkUGFnZUFmdGVyQ3Jhc2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVsb2FkUGFnZUFmdGVyQ3Jhc2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4QUEyOEMxOTE2RDJGQTdCMDAyRkY0REIgLyogTG9hZFBhZ2VPbkNyYXNoLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvYWRQYWdlT25DcmFzaC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCThDREE0MjA2MjA1Q0Q5OTQwMDY0OEEx
NSAvKiBMb2NhbFN0b3JhZ2VFbXB0eVNyaW5nLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gTG9jYWxTdG9yYWdlRW1wdHlTcmluZy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOENEQTQyMDcyMDVDRDlBNTAwNjQ4QTE1IC8qIGxvY2Fsc3RvcmFnZS1l
bXB0eS1zdHJpbmctdmFsdWUuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJsb2Nh
bHN0b3JhZ2UtZW1wdHktc3RyaW5nLXZhbHVlLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4REQ3NkZBMTA0ODZBQTc2MDBEOTZCNUUgLyogVGVzdFdlYktpdEFQSSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gt
by5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gVGVzdFdlYktpdEFQSTsg
c291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJOEU0QTg1MzYxRTFEMUFBMTAw
RjUzQjBGIC8qIEdyaWRQb3NpdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBHcmlkUG9zaXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
MzBBRDQwMTE1MDY5OEIzMDA2Nzk3MEYgLyogbG90cy1vZi10ZXh0Lmh0bWwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0Lmh0bWw7IHBhdGggPSAibG90cy1vZi10ZXh0Lmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjE0OSw2ICsyMTU0LDcgQEAKIAkJCQlBMTI1NDc4RDFEQjE4Qjk0MDAzNTg1
NjQgLyogTG9hZERhdGFXaXRoTmlsTUlNRVR5cGUubW0gKi8sCiAJCQkJNTc5MDFGQUMxQ0FGMTJD
MjAwRUQ2NEY5IC8qIExvYWRJbnZhbGlkVVJMUmVxdWVzdC5tbSAqLywKIAkJCQk1MUU2QTg5MjFE
MkYxQkVDMDBDMDA0QjYgLyogTG9jYWxTdG9yYWdlQ2xlYXIubW0gKi8sCisJCQkJOENEQTQyMDYy
MDVDRDk5NDAwNjQ4QTE1IC8qIExvY2FsU3RvcmFnZUVtcHR5U3JpbmcubW0gKi8sCiAJCQkJNDZD
NTE5RDgxRDM1NUE3MzAwREFBNTFBIC8qIExvY2FsU3RvcmFnZU51bGxFbnRyaWVzLm1tICovLAog
CQkJCTdBNkEyQzZGMURDQ0Y4N0IwMEMwRDA4NSAvKiBMb2NhbFN0b3JhZ2VRdWlya1Rlc3QubW0g
Ki8sCiAJCQkJNTE2NUZFMDMyMDFFRTYxNzAwOUY3RUMzIC8qIE1lc3NhZ2VQb3J0UHJvdmlkZXJz
Lm1tICovLApAQCAtMjQ3NCw2ICsyNDgwLDcgQEAKIAkJCQlDMjVDQ0EwQTFFNTEzRjQ5MDAyNkNC
OEEgLyogTGluZUJyZWFraW5nLmh0bWwgKi8sCiAJCQkJRjQxQUI5OTYxRUY0NjkyQzAwODNGQTA4
IC8qIGxpbmstYW5kLWlucHV0Lmh0bWwgKi8sCiAJCQkJRjQxQUI5OUQxRUY0NjkyQzAwODNGQTA4
IC8qIGxpbmstYW5kLXRhcmdldC1kaXYuaHRtbCAqLywKKwkJCQk4Q0RBNDIwNzIwNUNEOUE1MDA2
NDhBMTUgLyogbG9jYWxzdG9yYWdlLWVtcHR5LXN0cmluZy12YWx1ZS5odG1sICovLAogCQkJCTUx
RTZBODk1MUQyRjFDNzcwMEMwMDRCNiAvKiBMb2NhbFN0b3JhZ2VDbGVhci5odG1sICovLAogCQkJ
CTQ2QzUxOUUyMUQzNTYyOTYwMERBQTUxQSAvKiBMb2NhbFN0b3JhZ2VOdWxsRW50cmllcy5odG1s
ICovLAogCQkJCTQ2QzUxOUUzMUQzNTYyOTYwMERBQTUxQSAvKiBMb2NhbFN0b3JhZ2VOdWxsRW50
cmllcy5sb2NhbHN0b3JhZ2UgKi8sCkBAIC0zNTYxLDYgKzM1NjgsNyBAQAogCQkJCTdDODNFMEMw
MUQwQTY1MjcwMEZFQkNGMyAvKiBMb2FkSW52YWxpZFVSTFJlcXVlc3QubW0gaW4gU291cmNlcyAq
LywKIAkJCQk3Q0NFN0YwMDFBNDExQUU2MDA0NDdDNEMgLyogTG9hZFBhZ2VPbkNyYXNoLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTUxRTZBODk0MUQyRjFDMEEwMEMwMDRCNiAvKiBMb2NhbFN0b3Jh
Z2VDbGVhci5tbSBpbiBTb3VyY2VzICovLAorCQkJCThDREE0MjBEMjA1Q0ZGQjkwMDY0OEExNSAv
KiBMb2NhbFN0b3JhZ2VFbXB0eVNyaW5nLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDZDNTE5REEx
RDM1NUFCMjAwREFBNTFBIC8qIExvY2FsU3RvcmFnZU51bGxFbnRyaWVzLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0E2QTJDNzAxRENDRkE4QzAwQzBEMDg1IC8qIExvY2FsU3RvcmFnZVF1aXJrVGVz
dC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTA3NkU1MDdGMUY0NTEzRDYwMDZFOUY1QSAvKiBMb2dn
aW5nLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VFbXB0eVNyaW5nLm1tIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VFbXB0eVNyaW5nLm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjhmNTRiODNiMWY2OGEwZGJjMmE1NGI4NjBmMWI0Y2Q5M2E0YjVlMjMKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3Rv
cmFnZUVtcHR5U3JpbmcubW0KQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorCisjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9ydCAiVGVz
dC5oIgorI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CisjaW1wb3J0IDxX
ZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQv
V0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJLaXQu
aD4KKyNpbXBvcnQgPFdlYktpdC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KKyNpbXBv
cnQgPFdlYktpdC9fV0tVc2VyU3R5bGVTaGVldC5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5o
PgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworc3RhdGljIGJvb2wgcmVjZWl2ZWRTY3JpcHRNZXNz
YWdlOworc3RhdGljIFJldGFpblB0cjxXS1NjcmlwdE1lc3NhZ2U+IGxhc3RTY3JpcHRNZXNzYWdl
OworCitAaW50ZXJmYWNlIExvY2FsU3RvcmFnZUVtcHR5U3RyaW5nTWVzc2FnZUhhbmRsZXIgOiBO
U09iamVjdCA8V0tTY3JpcHRNZXNzYWdlSGFuZGxlcj4KK0BlbmQKKworQGltcGxlbWVudGF0aW9u
IExvY2FsU3RvcmFnZUVtcHR5U3RyaW5nTWVzc2FnZUhhbmRsZXIKKworLSAodm9pZCl1c2VyQ29u
dGVudENvbnRyb2xsZXI6KFdLVXNlckNvbnRlbnRDb250cm9sbGVyICopdXNlckNvbnRlbnRDb250
cm9sbGVyIGRpZFJlY2VpdmVTY3JpcHRNZXNzYWdlOihXS1NjcmlwdE1lc3NhZ2UgKiltZXNzYWdl
Cit7CisgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gdHJ1ZTsKKyAgICBsYXN0U2NyaXB0TWVz
c2FnZSA9IG1lc3NhZ2U7Cit9CisKK0BlbmQKKworCitURVNUKFdLV2ViVmlldywgTG9jYWxTdG9y
YWdlRW1wdHlTdHJpbmcpCit7CisgICAgUmV0YWluUHRyPExvY2FsU3RvcmFnZUVtcHR5U3RyaW5n
TWVzc2FnZUhhbmRsZXI+IGhhbmRsZXIgPSBhZG9wdE5TKFtbTG9jYWxTdG9yYWdlRW1wdHlTdHJp
bmdNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOworICAgIFJldGFpblB0cjxXS1dlYlZpZXdD
b25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3Vy
YXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250
cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0
SGFuZGxlciJdOworICAgIFtjb25maWd1cmF0aW9uIF9zZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zy
b21GaWxlVVJMczpZRVNdOworICAgIAorICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcg
PSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwg
MCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIAor
ICAgIE5TVVJMUmVxdWVzdCAqcmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6
W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAImxvY2Fsc3RvcmFnZS1lbXB0
eS1zdHJpbmctdmFsdWUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0
V2ViS2l0QVBJLnJlc291cmNlcyJdXTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpyZXF1ZXN0
XTsKKyAgICAKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVz
c2FnZSk7CisgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gZmFsc2U7CisgICAgUmV0YWluUHRy
PE5TU3RyaW5nPiBzdHJpbmcxID0gKE5TU3RyaW5nICopW2xhc3RTY3JpcHRNZXNzYWdlIGJvZHld
OworICAgIEVYUEVDVF9XS19TVFJFUShAIiIsIHN0cmluZzEuZ2V0KCkpOworICAgIAorICAgIC8v
IERpdGNoIHRoaXMgd2ViIHZpZXcgKGRpdGNoIHRoZSBpbi1tZW1vcnkgbG9jYWwgc3RvcmFnZSku
CisgICAgd2ViVmlldyA9IG5pbDsKKyAgICBjb25maWd1cmF0aW9uID0gbmlsOworICAgIGhhbmRs
ZXIgPSBuaWw7CisgICAgCisgICAgaGFuZGxlciA9IGFkb3B0TlMoW1tMb2NhbFN0b3JhZ2VFbXB0
eVN0cmluZ01lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJhdGlvbiA9
IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgW1tj
b25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRs
ZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKKyAgICBbY29uZmlndXJhdGlv
biBfc2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHM6WUVTXTsKKyAgICAKKyAgICAv
LyBNYWtlIGEgbmV3IHdlYiB2aWV3IHRvIGZpbmlzaCB0aGUgdGVzdC4KKyAgICB3ZWJWaWV3ID0g
YWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAs
IDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICAKKyAg
ICByZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbW05TQnVuZGxlIG1haW5C
dW5kbGVdIFVSTEZvclJlc291cmNlOkAibG9jYWxzdG9yYWdlLWVtcHR5LXN0cmluZy12YWx1ZSIg
d2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3Vy
Y2VzIl1dOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOworICAgIAorICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKKyAgICByZWNl
aXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHN0cmlu
ZzIgPSAoTlNTdHJpbmcgKilbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV07CisgICAgCisgICAgRVhQ
RUNUX1dLX1NUUkVRKEAiIiwgc3RyaW5nMi5nZXQoKSk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9sb2NhbHN0b3JhZ2UtZW1w
dHktc3RyaW5nLXZhbHVlLmh0bWwgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL2xvY2Fsc3RvcmFnZS1lbXB0eS1zdHJpbmctdmFsdWUuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NDg2
OWFkNDVhNmM0NjdhOTgyODc4YzFjMTI3MzAxN2E5NWFiNGNmCi0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9sb2NhbHN0b3JhZ2UtZW1wdHkt
c3RyaW5nLXZhbHVlLmh0bWwKQEAgLTAsMCArMSwxNyBAQAorPGh0bWw+Cis8Ym9keT4KKzxzY3Jp
cHQ+CisgIHZhciBrZXkgPSAnRW1wdHlTdHJpbmcnOworICB2YXIgdmFsdWUgPSAnJzsKKyAgdmFy
IHRlc3RLZXkgPSAnVGVzdFN0cmluZyc7CisgIGlmICghbG9jYWxTdG9yYWdlLmdldEl0ZW0odGVz
dEtleSkpIHsKKyAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIHZhbHVlKTsKKyAgICBsb2Nh
bFN0b3JhZ2Uuc2V0SXRlbSh0ZXN0S2V5LCAndGVzdCcpOworICB9CisgICAgCisgIHZhciByZXN1
bHQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpOworICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VI
YW5kbGVycy50ZXN0SGFuZGxlci5wb3N0TWVzc2FnZShyZXN1bHQpOworPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336102</attachid>
            <date>2018-03-19 22:06:23 -0700</date>
            <delta_ts>2018-03-23 01:28:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69138-20180319220623.patch</filename>
            <type>text/plain</type>
            <size>16866</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5Njk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGIwMjEyZmU4ZGIzZDRlOTU5
MTBkNjUyMzllNGE0MTFiMzEyZWEwNDEuLjY4NmJjZjUxODdhMDdjOTY4OWY5NDllMzgwYjkwMzlh
Y2I0MDVhMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTgtMDMtMTkgIFNpaHVpIExp
dSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgTG9jYWwgc3RvcmFnZSBnZXRJdGVt
KCkgZm9yIGFuIGVtcHR5IHN0cmluZyByZXR1cm5lZCBVTkRFRklORUQgdmFsdWUuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTEzOAorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMTM0MTA5NzQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGEgZmllbGQgaW4gZGF0YWJhc2UgdG8gaW5kaWNhdGUgd2hl
dGhlciBCTE9CIGlzIGVtcHR5LiAKKworICAgICAgICBUaGUgY2hhbmdlIGlzIGJhc2VkIG9uIGlu
aXRpYWwgcGF0Y2ggYnkgTmF2ZWVuIEJvYmJpbGkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
U3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxvY2Fs
U3RvcmFnZURhdGFiYXNlOjp0cnlUb09wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJLaXQ6Okxv
Y2FsU3RvcmFnZURhdGFiYXNlOjptaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQpOgorICAgICAgICAo
V2ViS2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6aW1wb3J0SXRlbXMpOgorICAgICAgICAoV2Vi
S2l0OjpMb2NhbFN0b3JhZ2VEYXRhYmFzZTo6dXBkYXRlRGF0YWJhc2VXaXRoQ2hhbmdlZEl0ZW1z
KToKKwogMjAxOC0wMy0xNiAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjI5Njg4LgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViU3RvcmFnZS9Mb2NhbFN0b3JhZ2VEYXRhYmFzZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFi
YXNlLmNwcAppbmRleCA4MjYxNThmYjE0YzhkNWE2ZGIzMTg2NWE2ZTk5YWI4NDg3YTkyNjBlLi4x
ZTE0OTA1NTQxNzM4MzhkNTZlYzQ4ZmEwNWQ3OGM5NWY2YmUwY2QzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFiYXNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJTdG9yYWdlL0xvY2FsU3RvcmFnZURhdGFi
YXNlLmNwcApAQCAtMTA5LDcgKzEwOSw3IEBAIGJvb2wgTG9jYWxTdG9yYWdlRGF0YWJhc2U6OnRy
eVRvT3BlbkRhdGFiYXNlKERhdGFiYXNlT3BlbmluZ1N0cmF0ZWd5IG9wZW5pbmdTdHJhCiAgICAg
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBkZWxldGUgdGFibGUgSXRlbVRhYmxlIGZvciBs
b2NhbCBzdG9yYWdlIik7CiAgICAgfQogCi0gICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21t
YW5kKCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBJdGVtVGFibGUgKGtleSBURVhUIFVOSVFV
RSBPTiBDT05GTElDVCBSRVBMQUNFLCB2YWx1ZSBCTE9CIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZB
SUwpIikpIHsKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJM
RSBJRiBOT1QgRVhJU1RTIEl0ZW1UYWJsZSAoa2V5IFRFWFQgVU5JUVVFIE9OIENPTkZMSUNUIFJF
UExBQ0UsIHZhbHVlIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgaXNCbG9iRW1wdHkg
SU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIERFRkFVTFQgMCkiKSkgewogICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgdGFibGUgSXRlbVRhYmxlIGZvciBsb2NhbCBz
dG9yYWdlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xMjIsMTAgKzEyMiwx
MCBAQCBib29sIExvY2FsU3RvcmFnZURhdGFiYXNlOjptaWdyYXRlSXRlbVRhYmxlSWZOZWVkZWQo
KQogICAgIGlmICghbV9kYXRhYmFzZS50YWJsZUV4aXN0cygiSXRlbVRhYmxlIikpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCi0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJT
RUxFQ1QgdmFsdWUgRlJPTSBJdGVtVGFibGUgTElNSVQgMSIpOworICAgIFNRTGl0ZVN0YXRlbWVu
dCBxdWVyeShtX2RhdGFiYXNlLCAiU0VMRUNUIGlzQmxvYkVtcHR5IEZST00gSXRlbVRhYmxlIExJ
TUlUIDEiKTsKIAotICAgIC8vIFRoaXMgcXVlcnkgaXNuJ3QgZXZlciBleGVjdXRlZCwgaXQncyBq
dXN0IHVzZWQgdG8gY2hlY2sgdGhlIGNvbHVtbiB0eXBlLgotICAgIGlmIChxdWVyeS5pc0NvbHVt
bkRlY2xhcmVkQXNCbG9iKDApKQorICAgIC8vIFRoaXMgcXVlcnkgaXNuJ3QgZXZlciBleGVjdXRl
ZCwgaXQncyBqdXN0IHVzZWQgdG8gY2hlY2sgdGhlIGNvbHVtbnMuCisgICAgaWYgKHF1ZXJ5LnBy
ZXBhcmUoKSA9PSBTUUxJVEVfT0spCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gQ3Jl
YXRlIGEgbmV3IHRhYmxlIHdpdGggdGhlIHJpZ2h0IHR5cGUsIGNvcHkgYWxsIHRoZSBkYXRhIG92
ZXIgdG8gaXQgYW5kIHRoZW4gcmVwbGFjZSB0aGUgbmV3IHRhYmxlIHdpdGggdGhlIG9sZCB0YWJs
ZS4KQEAgLTEzMyw2ICsxMzMsOCBAQCBib29sIExvY2FsU3RvcmFnZURhdGFiYXNlOjptaWdyYXRl
SXRlbVRhYmxlSWZOZWVkZWQoKQogICAgICAgICAiRFJPUCBUQUJMRSBJRiBFWElTVFMgSXRlbVRh
YmxlMiIsCiAgICAgICAgICJDUkVBVEUgVEFCTEUgSXRlbVRhYmxlMiAoa2V5IFRFWFQgVU5JUVVF
IE9OIENPTkZMSUNUIFJFUExBQ0UsIHZhbHVlIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJ
TCkiLAogICAgICAgICAiSU5TRVJUIElOVE8gSXRlbVRhYmxlMiBTRUxFQ1QgKiBmcm9tIEl0ZW1U
YWJsZSIsCisgICAgICAgICJBTFRFUiBUQUJMRSBJdGVtVGFibGUyIEFERCBpc0Jsb2JFbXB0eSBJ
TlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgREVGQVVMVCAwIiwKKyAgICAgICAgIlVQ
REFURSBJdGVtVGFibGUyIFNFVCBpc0Jsb2JFbXB0eT0xIFdIRVJFIHZhbHVlID0gJyciLAogICAg
ICAgICAiRFJPUCBUQUJMRSBJdGVtVGFibGUiLAogICAgICAgICAiQUxURVIgVEFCTEUgSXRlbVRh
YmxlMiBSRU5BTUUgVE8gSXRlbVRhYmxlIiwKICAgICAgICAgMCwKQEAgLTE3MSw3ICsxNzMsNyBA
QCB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjppbXBvcnRJdGVtcyhTdG9yYWdlTWFwJiBzdG9y
YWdlTWFwKQogICAgIGlmICghbV9kYXRhYmFzZS5pc09wZW4oKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGF0YWJhc2UsICJTRUxFQ1Qga2V5LCB2YWx1
ZSBGUk9NIEl0ZW1UYWJsZSIpOworICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RhdGFiYXNl
LCAiU0VMRUNUIGtleSwgdmFsdWUsIGlzQmxvYkVtcHR5IEZST00gSXRlbVRhYmxlIik7CiAgICAg
aWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgTE9HX0VSUk9SKCJV
bmFibGUgdG8gc2VsZWN0IGl0ZW1zIGZyb20gSXRlbVRhYmxlIGZvciBsb2NhbCBzdG9yYWdlIik7
CiAgICAgICAgIHJldHVybjsKQEAgLTE4Myw3ICsxODUsMTAgQEAgdm9pZCBMb2NhbFN0b3JhZ2VE
YXRhYmFzZTo6aW1wb3J0SXRlbXMoU3RvcmFnZU1hcCYgc3RvcmFnZU1hcCkKICAgICB3aGlsZSAo
cmVzdWx0ID09IFNRTElURV9ST1cpIHsKICAgICAgICAgU3RyaW5nIGtleSA9IHF1ZXJ5LmdldENv
bHVtblRleHQoMCk7CiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHF1ZXJ5LmdldENvbHVtbkJsb2JB
c1N0cmluZygxKTsKLSAgICAgICAgaWYgKCFrZXkuaXNOdWxsKCkgJiYgIXZhbHVlLmlzTnVsbCgp
KQorICAgICAgICBib29sIGlzQmxvYkVtcHR5ID0gISFxdWVyeS5nZXRDb2x1bW5JbnQoMik7Cisg
ICAgICAgIGlmIChpc0Jsb2JFbXB0eSkKKyAgICAgICAgICAgIGl0ZW1zLnNldChrZXksICIiKTsK
KyAgICAgICAgZWxzZQogICAgICAgICAgICAgaXRlbXMuc2V0KGtleSwgdmFsdWUpOwogICAgICAg
ICByZXN1bHQgPSBxdWVyeS5zdGVwKCk7CiAgICAgfQpAQCAtMzA3LDcgKzMxMiw3IEBAIHZvaWQg
TG9jYWxTdG9yYWdlRGF0YWJhc2U6OnVwZGF0ZURhdGFiYXNlV2l0aENoYW5nZWRJdGVtcyhjb25z
dCBIYXNoTWFwPFN0cmluZywKICAgICAgICAgfQogICAgIH0KIAotICAgIFNRTGl0ZVN0YXRlbWVu
dCBpbnNlcnRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIklOU0VSVCBJTlRPIEl0ZW1UYWJsZSBWQUxV
RVMgKD8sID8pIik7CisgICAgU1FMaXRlU3RhdGVtZW50IGluc2VydFN0YXRlbWVudChtX2RhdGFi
YXNlLCAiSU5TRVJUIElOVE8gSXRlbVRhYmxlIFZBTFVFUyAoPywgPywgPykiKTsKICAgICBpZiAo
aW5zZXJ0U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gcHJlcGFyZSBpbnNlcnQgc3RhdGVtZW50IC0gY2Fubm90IHdyaXRlIHRv
IGxvY2FsIHN0b3JhZ2UgZGF0YWJhc2UiKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzI5LDggKzMz
NCwxMCBAQCB2b2lkIExvY2FsU3RvcmFnZURhdGFiYXNlOjp1cGRhdGVEYXRhYmFzZVdpdGhDaGFu
Z2VkSXRlbXMoY29uc3QgSGFzaE1hcDxTdHJpbmcsCiAgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4
dCgxLCBpdC0+a2V5KTsKIAogICAgICAgICAvLyBJZiB3ZSdyZSBpbnNlcnRpbmcgYSBrZXkvdmFs
dWUgcGFpciwgYmluZCB0aGUgdmFsdWUgYXMgd2VsbC4KLSAgICAgICAgaWYgKCFpdC0+dmFsdWUu
aXNOdWxsKCkpCisgICAgICAgIGlmICghaXQtPnZhbHVlLmlzTnVsbCgpKSB7CiAgICAgICAgICAg
ICBzdGF0ZW1lbnQuYmluZEJsb2IoMiwgaXQtPnZhbHVlKTsKKyAgICAgICAgICAgIHN0YXRlbWVu
dC5iaW5kSW50KDMsIGl0LT52YWx1ZS5pc0VtcHR5KCkpOworICAgICAgICB9CiAKICAgICAgICAg
aW50IHJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gU1FM
SVRFX0RPTkUpIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCA0MDk4MGY5ZjQ3MGEyYzQ5MzI4ZWFlZWNjYjk5Njc0MWYyZmY2ZjQyLi45ZTM3NzM0
YzAyYjQ2ZjQ0ZmY0NGQ3OWUwOTIwMzg1YzMyZmFiNDk2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTgtMDMtMTkg
IFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgTG9jYWwgc3RvcmFn
ZSBnZXRJdGVtKCkgZm9yIGFuIGVtcHR5IHN0cmluZyByZXR1cm5lZCBVTkRFRklORUQgdmFsdWUu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTEzOAor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTM0MTA5NzQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEFQSSB0ZXN0IGNvdmVyYWdlLgorCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3Jh
Z2VQZXJzaXN0ZW5jZS5tbTogQWRkZWQuCisgICAgICAgICgtW0xvY2FsU3RvcmFnZU1lc3NhZ2VI
YW5kbGVyIHVzZXJDb250ZW50Q29udHJvbGxlcjpkaWRSZWNlaXZlU2NyaXB0TWVzc2FnZTpdKToK
KyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvbG9jYWxzdG9yYWdlLWVtcHR5LXN0cmluZy12YWx1ZS5odG1sOiBBZGRlZC4KKwogMjAxOC0w
My0xNiAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBV
bnJldmlld2VkLCByb2xsaW5nIG91dCByMjI5Njg4LgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCBiMzk0ODg1MGNjMDcxNWQ0MzY2YjQ5NTlkMDJjZDYyNGY1NDkyNjVjLi4yOGY1ZTE3ZDAzM2Q3
OGJiOWU0ZGNjMmFmOWU4ZjNiZjVlMzlhZWVkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
NTQ5LDYgKzU0OSw4IEBACiAJCTgzQkFFRThEMUVGNDYyNTUwMERERTg5NCAvKiBQbHVnaW5Mb2Fk
Q2xpZW50UG9saWNpZXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4M0JBRUU4QzFFRjQ2MjU1MDBEREU4OTQgLyogUGx1Z2luTG9hZENsaWVudFBvbGlj
aWVzLm1tICovOyB9OwogCQk4M0RCNzk2OTFFRjYzQjNDMDBCRkE1RTUgLyogRnVuY3Rpb24uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODNEQjc5Njcx
RUY2M0IzQzAwQkZBNUU1IC8qIEZ1bmN0aW9uLmNwcCAqLzsgfTsKIAkJODNERTEzNEQxRUYxQzUw
ODAwQzFCMzU1IC8qIFJlc3BvbnNpdmVuZXNzVGltZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODNERTEzNEMxRUYxQzRGRTAwQzFCMzU1IC8qIFJl
c3BvbnNpdmVuZXNzVGltZXIuY3BwICovOyB9OworCQk4Q0RBNDIxMTIwNjBDNzk4MDA2NDhBMTUg
LyogTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4Q0RBNDIwRjIwNjBDNzdDMDA2NDhBMTUgLyogTG9jYWxTdG9y
YWdlUGVyc2lzdGVuY2UubW0gKi87IH07CisJCThDREE0MjEzMjA2MEM3RDMwMDY0OEExNSAvKiBs
b2NhbHN0b3JhZ2UtZW1wdHktc3RyaW5nLXZhbHVlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOENEQTQyMTIyMDYwQzdCRDAwNjQ4QTE1
IC8qIGxvY2Fsc3RvcmFnZS1lbXB0eS1zdHJpbmctdmFsdWUuaHRtbCAqLzsgfTsKIAkJOEU0QTg1
MzcxRTFEMUFCMjAwRjUzQjBGIC8qIEdyaWRQb3NpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4RTRBODUzNjFFMUQxQUExMDBGNTNCMEYgLyog
R3JpZFBvc2l0aW9uLmNwcCAqLzsgfTsKIAkJOTMwQUQ0MDIxNTA2OThEMDAwNjc5NzBGIC8qIGxv
dHMtb2YtdGV4dC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzMEFENDAxMTUwNjk4QjMwMDY3OTcwRiAvKiBsb3RzLW9mLXRleHQuaHRt
bCAqLzsgfTsKIAkJOTMxMENEMzgxRUY3MDhGQjAwNTBGRkUwIC8qIEZ1bmN0aW9uLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMTBDRDM2MUVGNzA4
RkIwMDUwRkZFMCAvKiBGdW5jdGlvbi5jcHAgKi87IH07CkBAIC0xMDEyLDYgKzEwMTQsNyBAQAog
CQkJCTgzNDlEM0M0MURCOTcyOEUwMDRBOUY2NSAvKiBsaW5rLXdpdGgtZG93bmxvYWQtYXR0cmli
dXRlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJMzc4RTY0NzkxNjMyNzA3NDAwQjZD
Njc2IC8qIGxpbmstd2l0aC10aXRsZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTU3
OTAxRkIxMUNBRjE0MkQwMEVENjRGOSAvKiBMb2FkSW52YWxpZFVSTFJlcXVlc3QuaHRtbCBpbiBD
b3B5IFJlc291cmNlcyAqLywKKwkJCQk4Q0RBNDIxMzIwNjBDN0QzMDA2NDhBMTUgLyogbG9jYWxz
dG9yYWdlLWVtcHR5LXN0cmluZy12YWx1ZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJ
CTUxRTZBODk2MUQyRjFDQTcwMEMwMDRCNiAvKiBMb2NhbFN0b3JhZ2VDbGVhci5odG1sIGluIENv
cHkgUmVzb3VyY2VzICovLAogCQkJCTQ2QzUxOUU2MUQzNTYzRkQwMERBQTUxQSAvKiBMb2NhbFN0
b3JhZ2VOdWxsRW50cmllcy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTQ2QzUxOUU3
MUQzNTYzRkQwMERBQTUxQSAvKiBMb2NhbFN0b3JhZ2VOdWxsRW50cmllcy5sb2NhbHN0b3JhZ2Ug
aW4gQ29weSBSZXNvdXJjZXMgKi8sCkBAIC0xNTYxLDYgKzE1NjQsOCBAQAogCQk4QTJDNzUwRDE2
Q0VEOTU1MDAyNEYzNTIgLyogUmVzaXplV2luZG93QWZ0ZXJDcmFzaC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXNpemVXaW5kb3dBZnRlckNyYXNoLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEEzQUY5M0ExNkM5RUQyNzAwRDI0OEMxIC8qIFJl
bG9hZFBhZ2VBZnRlckNyYXNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlbG9hZFBhZ2VBZnRlckNyYXNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOEFBMjhDMTkxNkQyRkE3QjAwMkZGNERCIC8qIExvYWRQYWdlT25DcmFzaC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2FkUGFnZU9uQ3Jhc2guY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4Q0RBNDIwRjIwNjBDNzdDMDA2NDhBMTUgLyogTG9j
YWxTdG9yYWdlUGVyc2lzdGVuY2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBMb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJOENEQTQyMTIyMDYwQzdCRDAwNjQ4QTE1IC8qIGxvY2Fsc3RvcmFnZS1lbXB0eS1z
dHJpbmctdmFsdWUuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJsb2NhbHN0b3Jh
Z2UtZW1wdHktc3RyaW5nLXZhbHVlLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4REQ3NkZBMTA0ODZBQTc2MDBEOTZCNUUgLyogVGVzdFdlYktpdEFQSSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVj
dXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gVGVzdFdlYktpdEFQSTsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJOEU0QTg1MzYxRTFEMUFBMTAwRjUzQjBG
IC8qIEdyaWRQb3NpdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBHcmlkUG9zaXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzBBRDQw
MTE1MDY5OEIzMDA2Nzk3MEYgLyogbG90cy1vZi10ZXh0Lmh0bWwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0
bWw7IHBhdGggPSAibG90cy1vZi10ZXh0Lmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjE1MCw2ICsyMTU1LDcgQEAKIAkJCQk1NzkwMUZBQzFDQUYxMkMyMDBFRDY0RjkgLyog
TG9hZEludmFsaWRVUkxSZXF1ZXN0Lm1tICovLAogCQkJCTUxRTZBODkyMUQyRjFCRUMwMEMwMDRC
NiAvKiBMb2NhbFN0b3JhZ2VDbGVhci5tbSAqLywKIAkJCQk0NkM1MTlEODFEMzU1QTczMDBEQUE1
MUEgLyogTG9jYWxTdG9yYWdlTnVsbEVudHJpZXMubW0gKi8sCisJCQkJOENEQTQyMEYyMDYwQzc3
QzAwNjQ4QTE1IC8qIExvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tICovLAogCQkJCTdBNkEyQzZG
MURDQ0Y4N0IwMEMwRDA4NSAvKiBMb2NhbFN0b3JhZ2VRdWlya1Rlc3QubW0gKi8sCiAJCQkJNTE2
NUZFMDMyMDFFRTYxNzAwOUY3RUMzIC8qIE1lc3NhZ2VQb3J0UHJvdmlkZXJzLm1tICovLAogCQkJ
CTUxQ0QxQzZBMUIzOENFMzYwMDE0MkNBNSAvKiBNb2RhbEFsZXJ0cy5tbSAqLywKQEAgLTI0NzQs
NiArMjQ4MCw3IEBACiAJCQkJQzI1Q0NBMEExRTUxM0Y0OTAwMjZDQjhBIC8qIExpbmVCcmVha2lu
Zy5odG1sICovLAogCQkJCUY0MUFCOTk2MUVGNDY5MkMwMDgzRkEwOCAvKiBsaW5rLWFuZC1pbnB1
dC5odG1sICovLAogCQkJCUY0MUFCOTlEMUVGNDY5MkMwMDgzRkEwOCAvKiBsaW5rLWFuZC10YXJn
ZXQtZGl2Lmh0bWwgKi8sCisJCQkJOENEQTQyMTIyMDYwQzdCRDAwNjQ4QTE1IC8qIGxvY2Fsc3Rv
cmFnZS1lbXB0eS1zdHJpbmctdmFsdWUuaHRtbCAqLywKIAkJCQk1MUU2QTg5NTFEMkYxQzc3MDBD
MDA0QjYgLyogTG9jYWxTdG9yYWdlQ2xlYXIuaHRtbCAqLywKIAkJCQk0NkM1MTlFMjFEMzU2Mjk2
MDBEQUE1MUEgLyogTG9jYWxTdG9yYWdlTnVsbEVudHJpZXMuaHRtbCAqLywKIAkJCQk0NkM1MTlF
MzFEMzU2Mjk2MDBEQUE1MUEgLyogTG9jYWxTdG9yYWdlTnVsbEVudHJpZXMubG9jYWxzdG9yYWdl
ICovLApAQCAtMzU2Miw2ICszNTY5LDcgQEAKIAkJCQk3Q0NFN0YwMDFBNDExQUU2MDA0NDdDNEMg
LyogTG9hZFBhZ2VPbkNyYXNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRTZBODk0MUQyRjFD
MEEwMEMwMDRCNiAvKiBMb2NhbFN0b3JhZ2VDbGVhci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQ2
QzUxOURBMUQzNTVBQjIwMERBQTUxQSAvKiBMb2NhbFN0b3JhZ2VOdWxsRW50cmllcy5tbSBpbiBT
b3VyY2VzICovLAorCQkJCThDREE0MjExMjA2MEM3OTgwMDY0OEExNSAvKiBMb2NhbFN0b3JhZ2VQ
ZXJzaXN0ZW5jZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdBNkEyQzcwMURDQ0ZBOEMwMEMwRDA4
NSAvKiBMb2NhbFN0b3JhZ2VRdWlya1Rlc3QubW0gaW4gU291cmNlcyAqLywKIAkJCQkwNzZFNTA3
RjFGNDUxM0Q2MDA2RTlGNUEgLyogTG9nZ2luZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRTE4
NjY0OTFGNzJFOEYxMDBBMENBQjYgLyogTWFya2VkVGV4dC5jcHAgaW4gU291cmNlcyAqLywKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9y
YWdlUGVyc2lzdGVuY2UubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBhM2EzOTY2ZjdjMjM4NjMy
OTUxNmQxNTAxZjJmNmQzMmE5NGU2OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCkBAIC0w
LDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKworI2ltcG9ydCAi
UGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBvcnQgIlRlc3QuaCIKKyNpbXBvcnQgPFdlYktpdC9X
S1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250
cm9sbGVyUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Q
cml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CisjaW1wb3J0IDxXZWJLaXQvX1dL
UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxl
U2hlZXQuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworI2lmIFdLX0FQSV9FTkFCTEVE
CisKK3N0YXRpYyBib29sIHJlY2VpdmVkU2NyaXB0TWVzc2FnZTsKK3N0YXRpYyBSZXRhaW5QdHI8
V0tTY3JpcHRNZXNzYWdlPiBsYXN0U2NyaXB0TWVzc2FnZTsKKworQGludGVyZmFjZSBMb2NhbFN0
b3JhZ2VNZXNzYWdlSGFuZGxlciA6IE5TT2JqZWN0IDxXS1NjcmlwdE1lc3NhZ2VIYW5kbGVyPgor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gTG9jYWxTdG9yYWdlTWVzc2FnZUhhbmRsZXIKKworLSAo
dm9pZCl1c2VyQ29udGVudENvbnRyb2xsZXI6KFdLVXNlckNvbnRlbnRDb250cm9sbGVyICopdXNl
ckNvbnRlbnRDb250cm9sbGVyIGRpZFJlY2VpdmVTY3JpcHRNZXNzYWdlOihXS1NjcmlwdE1lc3Nh
Z2UgKiltZXNzYWdlCit7CisgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gdHJ1ZTsKKyAgICBs
YXN0U2NyaXB0TWVzc2FnZSA9IG1lc3NhZ2U7Cit9CisKK0BlbmQKKworCitURVNUKFdLV2ViVmll
dywgTG9jYWxTdG9yYWdlRW1wdHlTdHJpbmcpCit7CisgICAgUmV0YWluUHRyPExvY2FsU3RvcmFn
ZU1lc3NhZ2VIYW5kbGVyPiBoYW5kbGVyID0gYWRvcHROUyhbW0xvY2FsU3RvcmFnZU1lc3NhZ2VI
YW5kbGVyIGFsbG9jXSBpbml0XSk7CisgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRp
b24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxv
Y10gaW5pdF0pOworICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFk
ZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07
CisgICAgW2NvbmZpZ3VyYXRpb24gX3NldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxz
OllFU107CisgICAgCisgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMo
W1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYw
MCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAgCisgICAgTlNVUkxS
ZXF1ZXN0ICpyZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbW05TQnVuZGxl
IG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAibG9jYWxzdG9yYWdlLWVtcHR5LXN0cmluZy12
YWx1ZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEku
cmVzb3VyY2VzIl1dOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOworICAgIAor
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKKyAg
ICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+
IHN0cmluZzEgPSAoTlNTdHJpbmcgKilbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV07CisgICAgRVhQ
RUNUX1dLX1NUUkVRKEAiIiwgc3RyaW5nMS5nZXQoKSk7CisgICAgCisgICAgLy8gRGl0Y2ggdGhp
cyB3ZWIgdmlldyAoZGl0Y2ggdGhlIGluLW1lbW9yeSBsb2NhbCBzdG9yYWdlKS4KKyAgICB3ZWJW
aWV3ID0gbmlsOworICAgIGNvbmZpZ3VyYXRpb24gPSBuaWw7CisgICAgaGFuZGxlciA9IG5pbDsK
KyAgICAKKyAgICBoYW5kbGVyID0gYWRvcHROUyhbW0xvY2FsU3RvcmFnZU1lc3NhZ2VIYW5kbGVy
IGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdD
b25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250
ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6aGFuZGxlci5nZXQoKSBuYW1l
OkAidGVzdEhhbmRsZXIiXTsKKyAgICBbY29uZmlndXJhdGlvbiBfc2V0QWxsb3dVbml2ZXJzYWxB
Y2Nlc3NGcm9tRmlsZVVSTHM6WUVTXTsKKyAgICAKKyAgICAvLyBNYWtlIGEgbmV3IHdlYiB2aWV3
IHRvIGZpbmlzaCB0aGUgdGVzdC4KKyAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0
aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICAKKyAgICByZXF1ZXN0ID0gW05TVVJMUmVx
dWVzdCByZXF1ZXN0V2l0aFVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNl
OkAibG9jYWxzdG9yYWdlLWVtcHR5LXN0cmluZy12YWx1ZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwi
IHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOworICAgIFt3ZWJWaWV3
IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOworICAgIAorICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKKyAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBm
YWxzZTsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHN0cmluZzIgPSAoTlNTdHJpbmcgKilbbGFz
dFNjcmlwdE1lc3NhZ2UgYm9keV07CisgICAgCisgICAgRVhQRUNUX1dLX1NUUkVRKEAiIiwgc3Ry
aW5nMi5nZXQoKSk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9sb2NhbHN0b3JhZ2UtZW1wdHktc3RyaW5nLXZhbHVlLmh0bWwg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL2xvY2Fsc3RvcmFnZS1lbXB0
eS1zdHJpbmctdmFsdWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NDg2OWFkNDVhNmM0NjdhOTgyODc4YzFj
MTI3MzAxN2E5NWFiNGNmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9sb2NhbHN0b3JhZ2UtZW1wdHktc3RyaW5nLXZhbHVlLmh0bWwKQEAg
LTAsMCArMSwxNyBAQAorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQ+CisgIHZhciBrZXkgPSAnRW1w
dHlTdHJpbmcnOworICB2YXIgdmFsdWUgPSAnJzsKKyAgdmFyIHRlc3RLZXkgPSAnVGVzdFN0cmlu
Zyc7CisgIGlmICghbG9jYWxTdG9yYWdlLmdldEl0ZW0odGVzdEtleSkpIHsKKyAgICBsb2NhbFN0
b3JhZ2Uuc2V0SXRlbShrZXksIHZhbHVlKTsKKyAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0ZXN0
S2V5LCAndGVzdCcpOworICB9CisgICAgCisgIHZhciByZXN1bHQgPSBsb2NhbFN0b3JhZ2UuZ2V0
SXRlbShrZXkpOworICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0SGFuZGxlci5w
b3N0TWVzc2FnZShyZXN1bHQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336360</attachid>
            <date>2018-03-23 01:28:45 -0700</date>
            <delta_ts>2018-03-23 14:54:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69138-20180323012844.patch</filename>
            <type>text/plain</type>
            <size>14865</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5ODcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2U5YTY5MzdkYjU3MmQ1
MjRmZjk3YTdmZjRkNjNkMWVkYWUxMjEzMS4uYTI0Y2FhYTAxMmEzOTIyYThmMTQ0OGMwMzVlNTJm
ZTk0NTZkMTg1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE4LTAzLTIzICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIExvY2FsIHN0b3JhZ2UgZ2V0
SXRlbSgpIGZvciBhbiBlbXB0eSBzdHJpbmcgcmV0dXJuZWQgVU5ERUZJTkVEIHZhbHVlLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkxMzgKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzEzNDEwOTc0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ6OmdldENvbHVtbkJsb2JBc1N0cmlu
Zyk6CisKIDIwMTgtMDMtMjIgIE1pY2hhZWwgQ2F0YW56YXJvICA8bWNhdGFuemFyb0Bnbm9tZS5v
cmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZml4IGZvcm1hdCBzdHJpbmcgd2FybmluZ3MgaW4g
c2VydmljZSB3b3JrZXIgY29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FM
aXRlU3RhdGVtZW50LmNwcAppbmRleCBjOGYzMGJhNWQ4NTcwM2ZmN2VhOGQ0ODFhM2ZiNGE5Y2Yy
YjQ2MjQ3Li5hMWQ0NjY4MWMxMzQxYTExNTA4ZGNkZWQ0ZGI1NDJmNDRlYTk2NjI3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcApAQCAtMzgz
LDggKzM4MywxMCBAQCBTdHJpbmcgU1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5CbG9iQXNTdHJp
bmcoaW50IGNvbCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgY29uc3Qgdm9pZCog
YmxvYiA9IHNxbGl0ZTNfY29sdW1uX2Jsb2IobV9zdGF0ZW1lbnQsIGNvbCk7Ci0gICAgaWYgKCFi
bG9iKQorICAgIGlmIChzcWxpdGUzX2VycmNvZGUobV9kYXRhYmFzZS5zcWxpdGUzSGFuZGxlKCkp
ICE9IFNRTElURV9PSykKICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIGlmICghYmxvYikK
KyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKICAgICBpbnQgc2l6ZSA9IHNxbGl0ZTNf
Y29sdW1uX2J5dGVzKG1fc3RhdGVtZW50LCBjb2wpOwogICAgIGlmIChzaXplIDwgMCkKZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0MDc5ODFlZTlh
MjE0ZjMzNTBhODhlYzkwZjNhZWE0YWFlM2JmOGY1Li5hNjg5MjAzYTU5MGZjZjIzYTQwMzE3MzFi
MGZlMjYzNWMzNWMxYzVjIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTgtMDMtMjMgIFNpaHVpIExpdSAgPHNpaHVp
X2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgTG9jYWwgc3RvcmFnZSBnZXRJdGVtKCkgZm9yIGFu
IGVtcHR5IHN0cmluZyByZXR1cm5lZCBVTkRFRklORUQgdmFsdWUuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTEzOAorICAgICAgICA8cmRhcjovL3By
b2JsZW0vMTM0MTA5NzQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkIEFQSSB0ZXN0IGNvdmVyYWdlLgorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbTog
QWRkZWQuCisgICAgICAgICgtW0xvY2FsU3RvcmFnZU1lc3NhZ2VIYW5kbGVyIHVzZXJDb250ZW50
Q29udHJvbGxlcjpkaWRSZWNlaXZlU2NyaXB0TWVzc2FnZTpdKToKKyAgICAgICAgKFRFU1QpOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvbG9jYWxzdG9yYWdlLWVt
cHR5LXN0cmluZy12YWx1ZS5odG1sOiBBZGRlZC4KKwogMjAxOC0wMy0yMiAgRGFuaWVsIEJhdGVz
ICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgRXhwb3NlIFNjaGVtZVJlZ2lzdHJ5Ojpy
ZWdpc3RlckFzQ2FuRGlzcGxheU9ubHlJZkNhblJlcXVlc3QoKSBhcyBXZWJLaXQgU1BJCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDljOGIwMzUzMmNjNzYyODJiNmZlOTcwZDZkMGUxZTQ3ODdl
MjkwMDQuLjg3NTM0ZjgzNzViOTM4NTFmMmE0OTU2ZDU4NDU3NjQwODYwNDAyMmQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC01NTMsNiArNTUzLDggQEAKIAkJODNCQUVFOEQxRUY0NjI1NTAw
RERFODk0IC8qIFBsdWdpbkxvYWRDbGllbnRQb2xpY2llcy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzQkFFRThDMUVGNDYyNTUwMERERTg5NCAvKiBQ
bHVnaW5Mb2FkQ2xpZW50UG9saWNpZXMubW0gKi87IH07CiAJCTgzREI3OTY5MUVGNjNCM0MwMEJG
QTVFNSAvKiBGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4M0RCNzk2NzFFRjYzQjNDMDBCRkE1RTUgLyogRnVuY3Rpb24uY3BwICovOyB9
OwogCQk4M0RFMTM0RDFFRjFDNTA4MDBDMUIzNTUgLyogUmVzcG9uc2l2ZW5lc3NUaW1lci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4M0RFMTM0QzFF
RjFDNEZFMDBDMUIzNTUgLyogUmVzcG9uc2l2ZW5lc3NUaW1lci5jcHAgKi87IH07CisJCThDMTBB
Rjk4MjA2NDY3OTIwMDE4RkQ5MCAvKiBsb2NhbHN0b3JhZ2UtZW1wdHktc3RyaW5nLXZhbHVlLmh0
bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OEMxMEFGOTcyMDY0Njc4MzAwMThGRDkwIC8qIGxvY2Fsc3RvcmFnZS1lbXB0eS1zdHJpbmctdmFs
dWUuaHRtbCAqLzsgfTsKKwkJOEMxMEFGOTkyMDY0NjdBOTAwMThGRDkwIC8qIExvY2FsU3RvcmFn
ZVBlcnNpc3RlbmNlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOEMxMEFGOTYyMDY0Njc3NzAwMThGRDkwIC8qIExvY2FsU3RvcmFnZVBlcnNpc3RlbmNl
Lm1tICovOyB9OwogCQk4RTRBODUzNzFFMUQxQUIyMDBGNTNCMEYgLyogR3JpZFBvc2l0aW9uLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhFNEE4NTM2
MUUxRDFBQTEwMEY1M0IwRiAvKiBHcmlkUG9zaXRpb24uY3BwICovOyB9OwogCQk5MzBBRDQwMjE1
MDY5OEQwMDA2Nzk3MEYgLyogbG90cy1vZi10ZXh0Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwQUQ0MDExNTA2OThCMzAwNjc5NzBG
IC8qIGxvdHMtb2YtdGV4dC5odG1sICovOyB9OwogCQk5MzEwQ0QzODFFRjcwOEZCMDA1MEZGRTAg
LyogRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTMxMENEMzYxRUY3MDhGQjAwNTBGRkUwIC8qIEZ1bmN0aW9uLmNwcCAqLzsgfTsKQEAg
LTEwMTcsNiArMTAxOSw3IEBACiAJCQkJODM0OUQzQzQxREI5NzI4RTAwNEE5RjY1IC8qIGxpbmst
d2l0aC1kb3dubG9hZC1hdHRyaWJ1dGUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQkz
NzhFNjQ3OTE2MzI3MDc0MDBCNkM2NzYgLyogbGluay13aXRoLXRpdGxlLmh0bWwgaW4gQ29weSBS
ZXNvdXJjZXMgKi8sCiAJCQkJNTc5MDFGQjExQ0FGMTQyRDAwRUQ2NEY5IC8qIExvYWRJbnZhbGlk
VVJMUmVxdWVzdC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAorCQkJCThDMTBBRjk4MjA2NDY3
OTIwMDE4RkQ5MCAvKiBsb2NhbHN0b3JhZ2UtZW1wdHktc3RyaW5nLXZhbHVlLmh0bWwgaW4gQ29w
eSBSZXNvdXJjZXMgKi8sCiAJCQkJNTFFNkE4OTYxRDJGMUNBNzAwQzAwNEI2IC8qIExvY2FsU3Rv
cmFnZUNsZWFyLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJNDZDNTE5RTYxRDM1NjNG
RDAwREFBNTFBIC8qIExvY2FsU3RvcmFnZU51bGxFbnRyaWVzLmh0bWwgaW4gQ29weSBSZXNvdXJj
ZXMgKi8sCiAJCQkJNDZDNTE5RTcxRDM1NjNGRDAwREFBNTFBIC8qIExvY2FsU3RvcmFnZU51bGxF
bnRyaWVzLmxvY2Fsc3RvcmFnZSBpbiBDb3B5IFJlc291cmNlcyAqLywKQEAgLTE1NzAsNiArMTU3
Myw4IEBACiAJCThBMkM3NTBEMTZDRUQ5NTUwMDI0RjM1MiAvKiBSZXNpemVXaW5kb3dBZnRlckNy
YXNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc2l6ZVdpbmRv
d0FmdGVyQ3Jhc2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4QTNBRjkzQTE2
QzlFRDI3MDBEMjQ4QzEgLyogUmVsb2FkUGFnZUFmdGVyQ3Jhc2guY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVsb2FkUGFnZUFmdGVyQ3Jhc2guY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4QUEyOEMxOTE2RDJGQTdCMDAyRkY0REIgLyogTG9hZFBh
Z2VPbkNyYXNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvYWRQ
YWdlT25DcmFzaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCThDMTBBRjk2MjA2
NDY3NzcwMDE4RkQ5MCAvKiBMb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IExvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4QzEwQUY5NzIwNjQ2NzgzMDAxOEZEOTAgLyog
bG9jYWxzdG9yYWdlLWVtcHR5LXN0cmluZy12YWx1ZS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1s
OyBwYXRoID0gImxvY2Fsc3RvcmFnZS1lbXB0eS1zdHJpbmctdmFsdWUuaHRtbCI7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCThERDc2RkExMDQ4NkFBNzYwMEQ5NkI1RSAvKiBUZXN0V2Vi
S2l0QVBJICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAi
Y29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBU
ZXN0V2ViS2l0QVBJOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk4RTRB
ODUzNjFFMUQxQUExMDBGNTNCMEYgLyogR3JpZFBvc2l0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyaWRQb3NpdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTkzMEFENDAxMTUwNjk4QjMwMDY3OTcwRiAvKiBsb3RzLW9mLXRleHQuaHRt
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJsb3RzLW9mLXRleHQuaHRtbCI7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTYyLDYgKzIxNjcsNyBAQAogCQkJCTU3OTAxRkFD
MUNBRjEyQzIwMEVENjRGOSAvKiBMb2FkSW52YWxpZFVSTFJlcXVlc3QubW0gKi8sCiAJCQkJNTFF
NkE4OTIxRDJGMUJFQzAwQzAwNEI2IC8qIExvY2FsU3RvcmFnZUNsZWFyLm1tICovLAogCQkJCTQ2
QzUxOUQ4MUQzNTVBNzMwMERBQTUxQSAvKiBMb2NhbFN0b3JhZ2VOdWxsRW50cmllcy5tbSAqLywK
KwkJCQk4QzEwQUY5NjIwNjQ2Nzc3MDAxOEZEOTAgLyogTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2Uu
bW0gKi8sCiAJCQkJN0E2QTJDNkYxRENDRjg3QjAwQzBEMDg1IC8qIExvY2FsU3RvcmFnZVF1aXJr
VGVzdC5tbSAqLywKIAkJCQk1MTY1RkUwMzIwMUVFNjE3MDA5RjdFQzMgLyogTWVzc2FnZVBvcnRQ
cm92aWRlcnMubW0gKi8sCiAJCQkJNTFDRDFDNkExQjM4Q0UzNjAwMTQyQ0E1IC8qIE1vZGFsQWxl
cnRzLm1tICovLApAQCAtMjQ5MSw2ICsyNDk3LDcgQEAKIAkJCQlDMjVDQ0EwQTFFNTEzRjQ5MDAy
NkNCOEEgLyogTGluZUJyZWFraW5nLmh0bWwgKi8sCiAJCQkJRjQxQUI5OTYxRUY0NjkyQzAwODNG
QTA4IC8qIGxpbmstYW5kLWlucHV0Lmh0bWwgKi8sCiAJCQkJRjQxQUI5OUQxRUY0NjkyQzAwODNG
QTA4IC8qIGxpbmstYW5kLXRhcmdldC1kaXYuaHRtbCAqLywKKwkJCQk4QzEwQUY5NzIwNjQ2Nzgz
MDAxOEZEOTAgLyogbG9jYWxzdG9yYWdlLWVtcHR5LXN0cmluZy12YWx1ZS5odG1sICovLAogCQkJ
CTUxRTZBODk1MUQyRjFDNzcwMEMwMDRCNiAvKiBMb2NhbFN0b3JhZ2VDbGVhci5odG1sICovLAog
CQkJCTQ2QzUxOUUyMUQzNTYyOTYwMERBQTUxQSAvKiBMb2NhbFN0b3JhZ2VOdWxsRW50cmllcy5o
dG1sICovLAogCQkJCTQ2QzUxOUUzMUQzNTYyOTYwMERBQTUxQSAvKiBMb2NhbFN0b3JhZ2VOdWxs
RW50cmllcy5sb2NhbHN0b3JhZ2UgKi8sCkBAIC0zNTgwLDYgKzM1ODcsNyBAQAogCQkJCTU3NEY1
NUNGMjA0RDM3QzUwMDI5NDhDNiAvKiBMb2NhbEF1dGhlbnRpY2F0b3IubW0gaW4gU291cmNlcyAq
LywKIAkJCQk1MUU2QTg5NDFEMkYxQzBBMDBDMDA0QjYgLyogTG9jYWxTdG9yYWdlQ2xlYXIubW0g
aW4gU291cmNlcyAqLywKIAkJCQk0NkM1MTlEQTFEMzU1QUIyMDBEQUE1MUEgLyogTG9jYWxTdG9y
YWdlTnVsbEVudHJpZXMubW0gaW4gU291cmNlcyAqLywKKwkJCQk4QzEwQUY5OTIwNjQ2N0E5MDAx
OEZEOTAgLyogTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0gaW4gU291cmNlcyAqLywKIAkJCQk3
QTZBMkM3MDFEQ0NGQThDMDBDMEQwODUgLyogTG9jYWxTdG9yYWdlUXVpcmtUZXN0Lm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJMDc2RTUwN0YxRjQ1MTNENjAwNkU5RjVBIC8qIExvZ2dpbmcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQ0UxODY2NDkxRjcyRThGMTAwQTBDQUI2IC8qIE1hcmtlZFRleHQu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zNjM2LDYgKzM2NDQsNyBAQAogCQkJCUExRUMxMTg4MUY0
MjU0MTIwMEQwMTQ2RSAvKiBQcmV2aWV3TG9hZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdD
Q0U3RjBDMUE0MTFBRTYwMDQ0N0M0QyAvKiBQcml2YXRlQnJvd3NpbmdQdXNoU3RhdGVOb0hpc3Rv
cnlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NjQ3QjEyNjFFQkEzQjg1MDA0MUQ3
RUYgLyogUHJvY2Vzc0RpZFRlcm1pbmF0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MThDMTE1
MzIwNUIwNTA0MDAxRkY0QUUgLyogUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0gaW4gU291cmNl
cyAqLywKIAkJCQk3QzgzRTBDMTFEMEE2NTJGMDBGRUJDRjMgLyogUHJvdmlzaW9uYWxVUkxOb3RD
aGFuZ2UubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VDODFBNDExQTdFMDA0NDdDNEMgLyog
UHVibGljU3VmZml4Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0UwQzIxRDBBNjUzNTAwRkVC
Q0YzIC8qIFF1aWNrTG9vay5tbSBpbiBTb3VyY2VzICovLApAQCAtMzc0Myw3ICszNzUyLDYgQEAK
IAkJCQk3Q0NFN0YyRjFBNDExQjEwMDA0NDdDNEMgLyogV0tCcm93c2luZ0NvbnRleHRMb2FkRGVs
ZWdhdGVUZXN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M1NEE0QkUxQUExMUNDQTAwMzgwRjc4
IC8qIFdLQnVuZGxlRmlsZUhhbmRsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0UzNTREOTFF
NzBEQTVDMDBCRUZFM0IgLyogV0tDb250ZW50RXh0ZW5zaW9uU3RvcmUubW0gaW4gU291cmNlcyAq
LywKLQkJCQk1MThDMTE1MzIwNUIwNTA0MDAxRkY0QUUgLyogUHJvY2Vzc1N3YXBPbk5hdmlnYXRp
b24ubW0gaW4gU291cmNlcyAqLywKIAkJCQkyRDgzOEIxRjFFRUYzQTVDMDA5Qjk4MEUgLyogV0tD
b250ZW50Vmlld0VkaXRpbmdBY3Rpb25zLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzcwQ0UyMkEx
RjU3MzQzNDAwRTc0MTBCIC8qIFdLQ29udGVudFZpZXdUYXJnZXRGb3JBY3Rpb24ubW0gaW4gU291
cmNlcyAqLywKIAkJCQk1MUQxMjQ5ODFFNzYzQjAyMDAyQjI4MjAgLyogV0tIVFRQQ29va2llU3Rv
cmUubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmQ2ZjBjNjNiZTYyODk4MGU3YWEyYmY5Nzk2MTM2ZTBiZmIyNDc2NzkKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0xvY2FsU3Rv
cmFnZVBlcnNpc3RlbmNlLm1tCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9y
dCAiY29uZmlnLmgiCisKKyNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0ICJU
ZXN0LmgiCisjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktp
dC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYktp
dC5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgorI2lt
cG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0Lmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRy
Lmg+CisjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIFdLX0FQSV9FTkFCTEVE
CisKK3N0YXRpYyBib29sIHJlYWR5VG9Db250aW51ZTsKK3N0YXRpYyBib29sIHJlY2VpdmVkU2Ny
aXB0TWVzc2FnZTsKK3N0YXRpYyBSZXRhaW5QdHI8V0tTY3JpcHRNZXNzYWdlPiBsYXN0U2NyaXB0
TWVzc2FnZTsKKworQGludGVyZmFjZSBMb2NhbFN0b3JhZ2VNZXNzYWdlSGFuZGxlciA6IE5TT2Jq
ZWN0IDxXS1NjcmlwdE1lc3NhZ2VIYW5kbGVyPgorQGVuZAorCitAaW1wbGVtZW50YXRpb24gTG9j
YWxTdG9yYWdlTWVzc2FnZUhhbmRsZXIKKworLSAodm9pZCl1c2VyQ29udGVudENvbnRyb2xsZXI6
KFdLVXNlckNvbnRlbnRDb250cm9sbGVyICopdXNlckNvbnRlbnRDb250cm9sbGVyIGRpZFJlY2Vp
dmVTY3JpcHRNZXNzYWdlOihXS1NjcmlwdE1lc3NhZ2UgKiltZXNzYWdlCit7CisgICAgcmVjZWl2
ZWRTY3JpcHRNZXNzYWdlID0gdHJ1ZTsKKyAgICBsYXN0U2NyaXB0TWVzc2FnZSA9IG1lc3NhZ2U7
Cit9CisKK0BlbmQKKworCitURVNUKFdLV2ViVmlldywgTG9jYWxTdG9yYWdlRW1wdHlTdHJpbmcp
Cit7CisgICAgcmVhZHlUb0NvbnRpbnVlID0gZmFsc2U7CisgICAgW1tXS1dlYnNpdGVEYXRhU3Rv
cmUgZGVmYXVsdERhdGFTdG9yZV0gcmVtb3ZlRGF0YU9mVHlwZXM6W1dLV2Vic2l0ZURhdGFTdG9y
ZSBhbGxXZWJzaXRlRGF0YVR5cGVzXSBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBhc3Rd
IGNvbXBsZXRpb25IYW5kbGVyOl4oKSB7CisgICAgICAgIHJlYWR5VG9Db250aW51ZSA9IHRydWU7
CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWFkeVRvQ29udGludWUp
OworCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIFJldGFpblB0cjxMb2NhbFN0b3Jh
Z2VNZXNzYWdlSGFuZGxlcj4gaGFuZGxlciA9IGFkb3B0TlMoW1tMb2NhbFN0b3JhZ2VNZXNzYWdl
SGFuZGxlciBhbGxvY10gaW5pdF0pOworICAgICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmln
dXJhdGlvbj4gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9u
IGFsbG9jXSBpbml0XSk7CisgICAgICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRy
b2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RI
YW5kbGVyIl07CisgICAgICAgIFtjb25maWd1cmF0aW9uIF9zZXRBbGxvd1VuaXZlcnNhbEFjY2Vz
c0Zyb21GaWxlVVJMczpZRVNdOworICAgIAorICAgICAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3
ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VS
ZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsK
KyAgICAKKyAgICAgICAgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1
ZXN0V2l0aFVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAibG9jYWxz
dG9yYWdlLWVtcHR5LXN0cmluZy12YWx1ZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVj
dG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOworICAgICAgICBbd2ViVmlldyBsb2Fk
UmVxdWVzdDpyZXF1ZXN0XTsKKyAgICAKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOworICAgICAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2Ug
PSBmYWxzZTsKKyAgICAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBzdHJpbmcxID0gKE5TU3RyaW5n
ICopW2xhc3RTY3JpcHRNZXNzYWdlIGJvZHldOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoQCIi
LCBzdHJpbmcxLmdldCgpKTsKKyAgICAKKyAgICAgICAgLy8gRGl0Y2ggdGhpcyB3ZWIgdmlldyAo
ZGl0Y2ggdGhlIGluLW1lbW9yeSBsb2NhbCBzdG9yYWdlKS4KKyAgICAgICAgd2ViVmlldyA9IG5p
bDsKKyAgICAgICAgY29uZmlndXJhdGlvbiA9IG5pbDsKKyAgICAgICAgaGFuZGxlciA9IG5pbDsK
KyAgICAgICAgcmVxdWVzdCA9IG5pbDsKKyAgICB9CisgICAgCisgICAgUmV0YWluUHRyPExvY2Fs
U3RvcmFnZU1lc3NhZ2VIYW5kbGVyPiBoYW5kbGVyID0gYWRvcHROUyhbW0xvY2FsU3RvcmFnZU1l
c3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0XSk7CisgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZp
Z3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlv
biBhbGxvY10gaW5pdF0pOworICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xs
ZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5k
bGVyIl07CisgICAgW2NvbmZpZ3VyYXRpb24gX3NldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZp
bGVVUkxzOllFU107CisgICAgCisgICAgLy8gTWFrZSBhIG5ldyB3ZWIgdmlldyB0byBmaW5pc2gg
dGhlIHRlc3QuCisgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkg
Y29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAgCisgICAgTlNVUkxSZXF1
ZXN0ICpyZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbW05TQnVuZGxlIG1h
aW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAibG9jYWxzdG9yYWdlLWVtcHR5LXN0cmluZy12YWx1
ZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVz
b3VyY2VzIl1dOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOworICAgIAorICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcmVjZWl2ZWRTY3JpcHRNZXNzYWdlKTsKKyAgICBy
ZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSBmYWxzZTsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHN0
cmluZzIgPSAoTlNTdHJpbmcgKilbbGFzdFNjcmlwdE1lc3NhZ2UgYm9keV07CisgICAgRVhQRUNU
X1dLX1NUUkVRKEAiIiwgc3RyaW5nMi5nZXQoKSk7Cit9CisKKyNlbmRpZgorCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL2xvY2Fsc3RvcmFnZS1lbXB0
eS1zdHJpbmctdmFsdWUuaHRtbCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvbG9jYWxzdG9yYWdlLWVtcHR5LXN0cmluZy12YWx1ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRhNWY3
ZGEyZGFhNDMyY2Q0NGQyMDQxNjRiM2JlMDNlZDczMWFkM2MKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL2xvY2Fsc3RvcmFnZS1lbXB0eS1z
dHJpbmctdmFsdWUuaHRtbApAQCAtMCwwICsxLDE2IEBACis8aHRtbD4KKzxib2R5PgorPHNjcmlw
dD4KKyAgdmFyIGtleSA9ICdFbXB0eVN0cmluZyc7CisgIHZhciB2YWx1ZSA9ICcnOworICB2YXIg
dGVzdEtleSA9ICdUZXN0U3RyaW5nJzsKKyAgaWYgKCFsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0ZXN0
S2V5KSkgeworICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWUpOworICAgIGxvY2Fs
U3RvcmFnZS5zZXRJdGVtKHRlc3RLZXksICd0ZXN0Jyk7CisgIH0KKyAgICAKKyAgdmFyIHJlc3Vs
dCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7CisgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhh
bmRsZXJzLnRlc3RIYW5kbGVyLnBvc3RNZXNzYWdlKCIiICsgcmVzdWx0KTsKKzwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336427</attachid>
            <date>2018-03-23 14:54:27 -0700</date>
            <delta_ts>2018-03-23 15:41:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69138-20180323145427.patch</filename>
            <type>text/plain</type>
            <size>14840</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5ODcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2U5YTY5MzdkYjU3MmQ1
MjRmZjk3YTdmZjRkNjNkMWVkYWUxMjEzMS4uZjBmNmQwNzdlNDc0ZjU5MWFjMTliMjkwNjBmZDFl
ODc4MGMwZTkxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE4LTAzLTIzICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIExvY2FsIHN0b3JhZ2UgZ2V0
SXRlbSgpIGZvciBhbiBlbXB0eSBzdHJpbmcgcmV0dXJuZWQgVU5ERUZJTkVEIHZhbHVlLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkxMzgKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzEzNDEwOTc0PgorCisgICAgICAgIFJldmlld2VkIGJ5IEJyYWR5
IEVpZHNvbi4KKworICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpnZXRDb2x1bW5CbG9iQXNTdHJpbmcp
OgorCiAyMDE4LTAzLTIyICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AZ25vbWUub3Jn
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGZpeCBmb3JtYXQgc3RyaW5nIHdhcm5pbmdzIGluIHNl
cnZpY2Ugd29ya2VyIGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Nx
bC9TUUxpdGVTdGF0ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0
ZVN0YXRlbWVudC5jcHAKaW5kZXggYzhmMzBiYTVkODU3MDNmZjdlYThkNDgxYTNmYjRhOWNmMmI0
NjI0Ny4uNzcyMDhiMWY0Mzk4YjI0MzBlMmY0MDA0MzZmYzI4NTc4MjRiNWY4ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAKQEAgLTM4Myw4
ICszODMsMTAgQEAgU3RyaW5nIFNRTGl0ZVN0YXRlbWVudDo6Z2V0Q29sdW1uQmxvYkFzU3RyaW5n
KGludCBjb2wpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIGNvbnN0IHZvaWQqIGJs
b2IgPSBzcWxpdGUzX2NvbHVtbl9ibG9iKG1fc3RhdGVtZW50LCBjb2wpOwotICAgIGlmICghYmxv
YikKKyAgICBpZiAobV9kYXRhYmFzZS5sYXN0RXJyb3IoKSAhPSBTUUxJVEVfT0spCiAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAoIWJsb2IpCisgICAgICAgIHJldHVybiBlbXB0eVN0
cmluZygpOwogCiAgICAgaW50IHNpemUgPSBzcWxpdGUzX2NvbHVtbl9ieXRlcyhtX3N0YXRlbWVu
dCwgY29sKTsKICAgICBpZiAoc2l6ZSA8IDApCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDA3OTgxZWU5YTIxNGYzMzUwYTg4ZWM5MGYzYWVhNGFh
ZTNiZjhmNS4uYTkxOWM0Y2RhODYzMTdhZmVhODYyYmMzZWU2MGMzNzkzYTk4NDUwNSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5
IEBACisyMDE4LTAzLTIzICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAg
ICAgIExvY2FsIHN0b3JhZ2UgZ2V0SXRlbSgpIGZvciBhbiBlbXB0eSBzdHJpbmcgcmV0dXJuZWQg
VU5ERUZJTkVEIHZhbHVlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjkxMzgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEzNDEwOTc0PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IEJyYWR5IEVpZHNvbi4KKworICAgICAgICBBZGQgQVBJIHRlc3QgY292
ZXJhZ2UuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLm1tOiBBZGRlZC4KKyAgICAgICAgKC1bTG9jYWxT
dG9yYWdlTWVzc2FnZUhhbmRsZXIgdXNlckNvbnRlbnRDb250cm9sbGVyOmRpZFJlY2VpdmVTY3Jp
cHRNZXNzYWdlOl0pOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9sb2NhbHN0b3JhZ2UtZW1wdHktc3RyaW5nLXZhbHVlLmh0bWw6IEFk
ZGVkLgorCiAyMDE4LTAzLTIyICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAog
ICAgICAgICBFeHBvc2UgU2NoZW1lUmVnaXN0cnk6OnJlZ2lzdGVyQXNDYW5EaXNwbGF5T25seUlm
Q2FuUmVxdWVzdCgpIGFzIFdlYktpdCBTUEkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOWM4
YjAzNTMyY2M3NjI4MmI2ZmU5NzBkNmQwZTFlNDc4N2UyOTAwNC4uODc1MzRmODM3NWI5Mzg1MWYy
YTQ5NTZkNTg0NTc2NDA4NjA0MDIyZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU1Myw2
ICs1NTMsOCBAQAogCQk4M0JBRUU4RDFFRjQ2MjU1MDBEREU4OTQgLyogUGx1Z2luTG9hZENsaWVu
dFBvbGljaWVzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODNCQUVFOEMxRUY0NjI1NTAwRERFODk0IC8qIFBsdWdpbkxvYWRDbGllbnRQb2xpY2llcy5t
bSAqLzsgfTsKIAkJODNEQjc5NjkxRUY2M0IzQzAwQkZBNUU1IC8qIEZ1bmN0aW9uLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzREI3OTY3MUVGNjNC
M0MwMEJGQTVFNSAvKiBGdW5jdGlvbi5jcHAgKi87IH07CiAJCTgzREUxMzREMUVGMUM1MDgwMEMx
QjM1NSAvKiBSZXNwb25zaXZlbmVzc1RpbWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzREUxMzRDMUVGMUM0RkUwMEMxQjM1NSAvKiBSZXNwb25z
aXZlbmVzc1RpbWVyLmNwcCAqLzsgfTsKKwkJOEMxMEFGOTgyMDY0Njc5MjAwMThGRDkwIC8qIGxv
Y2Fsc3RvcmFnZS1lbXB0eS1zdHJpbmctdmFsdWUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4QzEwQUY5NzIwNjQ2NzgzMDAxOEZEOTAg
LyogbG9jYWxzdG9yYWdlLWVtcHR5LXN0cmluZy12YWx1ZS5odG1sICovOyB9OworCQk4QzEwQUY5
OTIwNjQ2N0E5MDAxOEZEOTAgLyogTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4QzEwQUY5NjIwNjQ2Nzc3MDAx
OEZEOTAgLyogTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0gKi87IH07CiAJCThFNEE4NTM3MUUx
RDFBQjIwMEY1M0IwRiAvKiBHcmlkUG9zaXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEU0QTg1MzYxRTFEMUFBMTAwRjUzQjBGIC8qIEdyaWRQ
b3NpdGlvbi5jcHAgKi87IH07CiAJCTkzMEFENDAyMTUwNjk4RDAwMDY3OTcwRiAvKiBsb3RzLW9m
LXRleHQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5MzBBRDQwMTE1MDY5OEIzMDA2Nzk3MEYgLyogbG90cy1vZi10ZXh0Lmh0bWwgKi87
IH07CiAJCTkzMTBDRDM4MUVGNzA4RkIwMDUwRkZFMCAvKiBGdW5jdGlvbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzEwQ0QzNjFFRjcwOEZCMDA1
MEZGRTAgLyogRnVuY3Rpb24uY3BwICovOyB9OwpAQCAtMTAxNyw2ICsxMDE5LDcgQEAKIAkJCQk4
MzQ5RDNDNDFEQjk3MjhFMDA0QTlGNjUgLyogbGluay13aXRoLWRvd25sb2FkLWF0dHJpYnV0ZS5o
dG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTM3OEU2NDc5MTYzMjcwNzQwMEI2QzY3NiAv
KiBsaW5rLXdpdGgtdGl0bGUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1NzkwMUZC
MTFDQUYxNDJEMDBFRDY0RjkgLyogTG9hZEludmFsaWRVUkxSZXF1ZXN0Lmh0bWwgaW4gQ29weSBS
ZXNvdXJjZXMgKi8sCisJCQkJOEMxMEFGOTgyMDY0Njc5MjAwMThGRDkwIC8qIGxvY2Fsc3RvcmFn
ZS1lbXB0eS1zdHJpbmctdmFsdWUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1MUU2
QTg5NjFEMkYxQ0E3MDBDMDA0QjYgLyogTG9jYWxTdG9yYWdlQ2xlYXIuaHRtbCBpbiBDb3B5IFJl
c291cmNlcyAqLywKIAkJCQk0NkM1MTlFNjFEMzU2M0ZEMDBEQUE1MUEgLyogTG9jYWxTdG9yYWdl
TnVsbEVudHJpZXMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk0NkM1MTlFNzFEMzU2
M0ZEMDBEQUE1MUEgLyogTG9jYWxTdG9yYWdlTnVsbEVudHJpZXMubG9jYWxzdG9yYWdlIGluIENv
cHkgUmVzb3VyY2VzICovLApAQCAtMTU3MCw2ICsxNTczLDggQEAKIAkJOEEyQzc1MEQxNkNFRDk1
NTAwMjRGMzUyIC8qIFJlc2l6ZVdpbmRvd0FmdGVyQ3Jhc2guY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUmVzaXplV2luZG93QWZ0ZXJDcmFzaC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCThBM0FGOTNBMTZDOUVEMjcwMEQyNDhDMSAvKiBSZWxvYWRQ
YWdlQWZ0ZXJDcmFzaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZWxvYWRQYWdlQWZ0ZXJDcmFzaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThB
QTI4QzE5MTZEMkZBN0IwMDJGRjREQiAvKiBMb2FkUGFnZU9uQ3Jhc2guY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9hZFBhZ2VPbkNyYXNoLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOEMxMEFGOTYyMDY0Njc3NzAwMThGRDkwIC8qIExvY2FsU3Rv
cmFnZVBlcnNpc3RlbmNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCThDMTBBRjk3MjA2NDY3ODMwMDE4RkQ5MCAvKiBsb2NhbHN0b3JhZ2UtZW1wdHktc3RyaW5n
LXZhbHVlLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAibG9jYWxzdG9yYWdlLWVt
cHR5LXN0cmluZy12YWx1ZS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOERE
NzZGQTEwNDg2QUE3NjAwRDk2QjVFIC8qIFRlc3RXZWJLaXRBUEkgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJs
ZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IFRlc3RXZWJLaXRBUEk7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCThFNEE4NTM2MUUxRDFBQTEwMEY1M0IwRiAvKiBH
cmlkUG9zaXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3Jp
ZFBvc2l0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwQUQ0MDExNTA2
OThCMzAwNjc5NzBGIC8qIGxvdHMtb2YtdGV4dC5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBw
YXRoID0gImxvdHMtb2YtdGV4dC5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTIxNjIsNiArMjE2Nyw3IEBACiAJCQkJNTc5MDFGQUMxQ0FGMTJDMjAwRUQ2NEY5IC8qIExvYWRJ
bnZhbGlkVVJMUmVxdWVzdC5tbSAqLywKIAkJCQk1MUU2QTg5MjFEMkYxQkVDMDBDMDA0QjYgLyog
TG9jYWxTdG9yYWdlQ2xlYXIubW0gKi8sCiAJCQkJNDZDNTE5RDgxRDM1NUE3MzAwREFBNTFBIC8q
IExvY2FsU3RvcmFnZU51bGxFbnRyaWVzLm1tICovLAorCQkJCThDMTBBRjk2MjA2NDY3NzcwMDE4
RkQ5MCAvKiBMb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZS5tbSAqLywKIAkJCQk3QTZBMkM2RjFEQ0NG
ODdCMDBDMEQwODUgLyogTG9jYWxTdG9yYWdlUXVpcmtUZXN0Lm1tICovLAogCQkJCTUxNjVGRTAz
MjAxRUU2MTcwMDlGN0VDMyAvKiBNZXNzYWdlUG9ydFByb3ZpZGVycy5tbSAqLywKIAkJCQk1MUNE
MUM2QTFCMzhDRTM2MDAxNDJDQTUgLyogTW9kYWxBbGVydHMubW0gKi8sCkBAIC0yNDkxLDYgKzI0
OTcsNyBAQAogCQkJCUMyNUNDQTBBMUU1MTNGNDkwMDI2Q0I4QSAvKiBMaW5lQnJlYWtpbmcuaHRt
bCAqLywKIAkJCQlGNDFBQjk5NjFFRjQ2OTJDMDA4M0ZBMDggLyogbGluay1hbmQtaW5wdXQuaHRt
bCAqLywKIAkJCQlGNDFBQjk5RDFFRjQ2OTJDMDA4M0ZBMDggLyogbGluay1hbmQtdGFyZ2V0LWRp
di5odG1sICovLAorCQkJCThDMTBBRjk3MjA2NDY3ODMwMDE4RkQ5MCAvKiBsb2NhbHN0b3JhZ2Ut
ZW1wdHktc3RyaW5nLXZhbHVlLmh0bWwgKi8sCiAJCQkJNTFFNkE4OTUxRDJGMUM3NzAwQzAwNEI2
IC8qIExvY2FsU3RvcmFnZUNsZWFyLmh0bWwgKi8sCiAJCQkJNDZDNTE5RTIxRDM1NjI5NjAwREFB
NTFBIC8qIExvY2FsU3RvcmFnZU51bGxFbnRyaWVzLmh0bWwgKi8sCiAJCQkJNDZDNTE5RTMxRDM1
NjI5NjAwREFBNTFBIC8qIExvY2FsU3RvcmFnZU51bGxFbnRyaWVzLmxvY2Fsc3RvcmFnZSAqLywK
QEAgLTM1ODAsNiArMzU4Nyw3IEBACiAJCQkJNTc0RjU1Q0YyMDREMzdDNTAwMjk0OEM2IC8qIExv
Y2FsQXV0aGVudGljYXRvci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxRTZBODk0MUQyRjFDMEEw
MEMwMDRCNiAvKiBMb2NhbFN0b3JhZ2VDbGVhci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQ2QzUx
OURBMUQzNTVBQjIwMERBQTUxQSAvKiBMb2NhbFN0b3JhZ2VOdWxsRW50cmllcy5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCThDMTBBRjk5MjA2NDY3QTkwMDE4RkQ5MCAvKiBMb2NhbFN0b3JhZ2VQZXJz
aXN0ZW5jZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdBNkEyQzcwMURDQ0ZBOEMwMEMwRDA4NSAv
KiBMb2NhbFN0b3JhZ2VRdWlya1Rlc3QubW0gaW4gU291cmNlcyAqLywKIAkJCQkwNzZFNTA3RjFG
NDUxM0Q2MDA2RTlGNUEgLyogTG9nZ2luZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRTE4NjY0
OTFGNzJFOEYxMDBBMENBQjYgLyogTWFya2VkVGV4dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTM2
MzYsNiArMzY0NCw3IEBACiAJCQkJQTFFQzExODgxRjQyNTQxMjAwRDAxNDZFIC8qIFByZXZpZXdM
b2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMEMxQTQxMUFFNjAwNDQ3QzRDIC8q
IFByaXZhdGVCcm93c2luZ1B1c2hTdGF0ZU5vSGlzdG9yeUNhbGxiYWNrLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTQ2NDdCMTI2MUVCQTNCODUwMDQxRDdFRiAvKiBQcm9jZXNzRGlkVGVybWluYXRl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxOEMxMTUzMjA1QjA1MDQwMDFGRjRBRSAvKiBQcm9j
ZXNzU3dhcE9uTmF2aWdhdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDODNFMEMxMUQwQTY1
MkYwMEZFQkNGMyAvKiBQcm92aXNpb25hbFVSTE5vdENoYW5nZS5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTdDQ0U3RUM4MUE0MTFBN0UwMDQ0N0M0QyAvKiBQdWJsaWNTdWZmaXgubW0gaW4gU291cmNl
cyAqLywKIAkJCQk3QzgzRTBDMjFEMEE2NTM1MDBGRUJDRjMgLyogUXVpY2tMb29rLm1tIGluIFNv
dXJjZXMgKi8sCkBAIC0zNzQzLDcgKzM3NTIsNiBAQAogCQkJCTdDQ0U3RjJGMUE0MTFCMTAwMDQ0
N0M0QyAvKiBXS0Jyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZVRlc3QubW0gaW4gU291cmNlcyAq
LywKIAkJCQk3QzU0QTRCRTFBQTExQ0NBMDAzODBGNzggLyogV0tCdW5kbGVGaWxlSGFuZGxlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTVDRTM1NEQ5MUU3MERBNUMwMEJFRkUzQiAvKiBXS0NvbnRl
bnRFeHRlbnNpb25TdG9yZS5tbSBpbiBTb3VyY2VzICovLAotCQkJCTUxOEMxMTUzMjA1QjA1MDQw
MDFGRjRBRSAvKiBQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTJEODM4QjFGMUVFRjNBNUMwMDlCOTgwRSAvKiBXS0NvbnRlbnRWaWV3RWRpdGluZ0FjdGlvbnMu
bW0gaW4gU291cmNlcyAqLywKIAkJCQkzNzBDRTIyQTFGNTczNDM0MDBFNzQxMEIgLyogV0tDb250
ZW50Vmlld1RhcmdldEZvckFjdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxRDEyNDk4MUU3
NjNCMDIwMDJCMjgyMCAvKiBXS0hUVFBDb29raWVTdG9yZS5tbSBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Mb2NhbFN0b3Jh
Z2VQZXJzaXN0ZW5jZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
TG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDZmMGM2M2JlNjI4OTgwZTdh
YTJiZjk3OTYxMzZlMGJmYjI0NzY3OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UubW0KQEAgLTAs
MCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKworI2ltcG9ydCAi
UGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBvcnQgIlRlc3QuaCIKKyNpbXBvcnQgPFdlYktpdC9X
S1Byb2Nlc3NQb29sUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250
cm9sbGVyUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Q
cml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViS2l0Lmg+CisjaW1wb3J0IDxXZWJLaXQvX1dL
UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxl
U2hlZXQuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworc3RhdGljIGJvb2wgcmVhZHlUb0Nv
bnRpbnVlOworc3RhdGljIGJvb2wgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlOworc3RhdGljIFJldGFp
blB0cjxXS1NjcmlwdE1lc3NhZ2U+IGxhc3RTY3JpcHRNZXNzYWdlOworCitAaW50ZXJmYWNlIExv
Y2FsU3RvcmFnZU1lc3NhZ2VIYW5kbGVyIDogTlNPYmplY3QgPFdLU2NyaXB0TWVzc2FnZUhhbmRs
ZXI+CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBMb2NhbFN0b3JhZ2VNZXNzYWdlSGFuZGxlcgor
CistICh2b2lkKXVzZXJDb250ZW50Q29udHJvbGxlcjooV0tVc2VyQ29udGVudENvbnRyb2xsZXIg
Kil1c2VyQ29udGVudENvbnRyb2xsZXIgZGlkUmVjZWl2ZVNjcmlwdE1lc3NhZ2U6KFdLU2NyaXB0
TWVzc2FnZSAqKW1lc3NhZ2UKK3sKKyAgICByZWNlaXZlZFNjcmlwdE1lc3NhZ2UgPSB0cnVlOwor
ICAgIGxhc3RTY3JpcHRNZXNzYWdlID0gbWVzc2FnZTsKK30KKworQGVuZAorCisKK1RFU1QoV0tX
ZWJWaWV3LCBMb2NhbFN0b3JhZ2VFbXB0eVN0cmluZykKK3sKKyAgICByZWFkeVRvQ29udGludWUg
PSBmYWxzZTsKKyAgICBbW1dLV2Vic2l0ZURhdGFTdG9yZSBkZWZhdWx0RGF0YVN0b3JlXSByZW1v
dmVEYXRhT2ZUeXBlczpbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbFdlYnNpdGVEYXRhVHlwZXNdIG1v
ZGlmaWVkU2luY2U6W05TRGF0ZSBkaXN0YW50UGFzdF0gY29tcGxldGlvbkhhbmRsZXI6XigpIHsK
KyAgICAgICAgcmVhZHlUb0NvbnRpbnVlID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJnJlYWR5VG9Db250aW51ZSk7CisKKyAgICBAYXV0b3JlbGVhc2Vwb29s
IHsKKyAgICAgICAgUmV0YWluUHRyPExvY2FsU3RvcmFnZU1lc3NhZ2VIYW5kbGVyPiBoYW5kbGVy
ID0gYWRvcHROUyhbW0xvY2FsU3RvcmFnZU1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0XSk7Cisg
ICAgICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9uID0g
YWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICAgICAg
W1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhh
bmRsZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKKyAgICAgICAgW2NvbmZp
Z3VyYXRpb24gX3NldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzOllFU107CisgICAg
CisgICAgICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZp
Z3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIAorICAgICAgICBOU1VSTFJlcXVl
c3QgKnJlcXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltbTlNCdW5kbGUgbWFp
bkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJsb2NhbHN0b3JhZ2UtZW1wdHktc3RyaW5nLXZhbHVl
IiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNv
dXJjZXMiXV07CisgICAgICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOworICAgIAor
ICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2VpdmVkU2NyaXB0TWVzc2FnZSk7
CisgICAgICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOworICAgICAgICBSZXRhaW5Q
dHI8TlNTdHJpbmc+IHN0cmluZzEgPSAoTlNTdHJpbmcgKilbbGFzdFNjcmlwdE1lc3NhZ2UgYm9k
eV07CisgICAgICAgIEVYUEVDVF9XS19TVFJFUShAIiIsIHN0cmluZzEuZ2V0KCkpOworICAgIAor
ICAgICAgICAvLyBEaXRjaCB0aGlzIHdlYiB2aWV3IChkaXRjaCB0aGUgaW4tbWVtb3J5IGxvY2Fs
IHN0b3JhZ2UpLgorICAgICAgICB3ZWJWaWV3ID0gbmlsOworICAgICAgICBjb25maWd1cmF0aW9u
ID0gbmlsOworICAgICAgICBoYW5kbGVyID0gbmlsOworICAgICAgICByZXF1ZXN0ID0gbmlsOwor
ICAgIH0KKyAgICAKKyAgICBSZXRhaW5QdHI8TG9jYWxTdG9yYWdlTWVzc2FnZUhhbmRsZXI+IGhh
bmRsZXIgPSBhZG9wdE5TKFtbTG9jYWxTdG9yYWdlTWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRd
KTsKKyAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJhdGlvbiA9
IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgW1tj
b25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRs
ZXI6aGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdEhhbmRsZXIiXTsKKyAgICBbY29uZmlndXJhdGlv
biBfc2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHM6WUVTXTsKKyAgICAKKyAgICAv
LyBNYWtlIGEgbmV3IHdlYiB2aWV3IHRvIGZpbmlzaCB0aGUgdGVzdC4KKyAgICBSZXRhaW5QdHI8
V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRp
b24uZ2V0KCldKTsKKyAgICAKKyAgICBOU1VSTFJlcXVlc3QgKnJlcXVlc3QgPSBbTlNVUkxSZXF1
ZXN0IHJlcXVlc3RXaXRoVVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6
QCJsb2NhbHN0b3JhZ2UtZW1wdHktc3RyaW5nLXZhbHVlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIg
c3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXV07CisgICAgW3dlYlZpZXcg
bG9hZFJlcXVlc3Q6cmVxdWVzdF07CisgICAgCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOworICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZh
bHNlOworICAgIFJldGFpblB0cjxOU1N0cmluZz4gc3RyaW5nMiA9IChOU1N0cmluZyAqKVtsYXN0
U2NyaXB0TWVzc2FnZSBib2R5XTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoQCIiLCBzdHJpbmcyLmdl
dCgpKTsKK30KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvbG9jYWxzdG9yYWdlLWVtcHR5LXN0cmluZy12YWx1ZS5odG1sIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9sb2NhbHN0b3JhZ2UtZW1wdHktc3Ry
aW5nLXZhbHVlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGE1ZjdkYTJkYWE0MzJjZDQ0ZDIwNDE2NGIzYmUw
M2VkNzMxYWQzYwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvbG9jYWxzdG9yYWdlLWVtcHR5LXN0cmluZy12YWx1ZS5odG1sCkBAIC0wLDAg
KzEsMTYgQEAKKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0PgorICB2YXIga2V5ID0gJ0VtcHR5U3Ry
aW5nJzsKKyAgdmFyIHZhbHVlID0gJyc7CisgIHZhciB0ZXN0S2V5ID0gJ1Rlc3RTdHJpbmcnOwor
ICBpZiAoIWxvY2FsU3RvcmFnZS5nZXRJdGVtKHRlc3RLZXkpKSB7CisgICAgbG9jYWxTdG9yYWdl
LnNldEl0ZW0oa2V5LCB2YWx1ZSk7CisgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGVzdEtleSwg
J3Rlc3QnKTsKKyAgfQorICAgIAorICB2YXIgcmVzdWx0ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0o
a2V5KTsKKyAgd2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMudGVzdEhhbmRsZXIucG9zdE1l
c3NhZ2UoIiIgKyByZXN1bHQpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>