<?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>13128</bug_id>
          
          <creation_ts>2007-03-19 21:24:54 -0700</creation_ts>
          <short_desc>Safari not obeying cache header</short_desc>
          <delta_ts>2009-11-05 09:29:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Page Loading</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.sirensclef.com/safari_image_cache/pageA.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Romanovich">alex</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          <cc>ap</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>fishd</cc>
    
    <cc>koivisto</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>mjs</cc>
    
    <cc>ryan</cc>
    
    <cc>steve</cc>
    
    <cc>ukai</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>18131</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Romanovich">alex</who>
    <bug_when>2007-03-19 21:24:54 -0700</bug_when>
    <thetext>Safari does not seem to be obeying the following cache header: &quot;Cache-control: public, must-revalidate, max-age=3600&quot;. This is demonstrated with the above url, where you do not match FF&apos;s caching behavior (or Mac IE for that matter!). This is with Safari in 10.4.9, as well as nightly build.

Load the url above, which uses PHP to generate a PNG with the current timestamp.
Refresh the page. You will see the timestamp increments, as expected.
Now, press return inside the address bar to cause the page to load again. Again, the timestamp will increment. (This can also be demonstrated by clicking a link on a separate web page, to go to this image script.)

If it had obeyed the cache header, pressing return in the address bar would not have incremented the timestamp because it would have loaded the image from the cache.

Doing this in FF gives the expected results: it only increments on an actual refresh, as opposed to pressing return in the address bar.

The PHP I am using to test this can be found at: http://www.sirensclef.com/safari_image_cache/code.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18120</commentid>
    <comment_count>1</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2007-03-19 22:01:54 -0700</bug_when>
    <thetext>Hitting return in the URL bar with the same URL displayed is treated as a reload in Safari.  This behavior is by design.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18122</commentid>
    <comment_count>2</comment_count>
    <who name="Alexander Romanovich">alex</who>
    <bug_when>2007-03-19 22:21:17 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Hitting return in the URL bar with the same URL displayed is treated as a
&gt; reload in Safari.  This behavior is by design.
&gt; 

Fair enough. But then here&apos;s an example of two html files that link to each other:
http://www.sirensclef.com/safari_image_cache/pageA.html

Containing:

&lt;html&gt;&lt;body&gt;
&lt;img src=&quot;index.php&quot;/&gt;
&lt;a href=&quot;pageA.html&quot;&gt;test&lt;/a&gt;
&lt;/body&gt;&lt;/html&gt;

And:

&lt;html&gt;&lt;body&gt;
&lt;img src=&quot;index.php&quot;/&gt;
&lt;a href=&quot;pageB.html&quot;&gt;test&lt;/a&gt;
&lt;/body&gt;&lt;/html&gt;

This is a normal inclusion of the image via an img tag, and yet the TS increments each time. This also demonstrates how this behavior is a problem for me. I have a PHP script that watermarks photos on the fly. I run *many* images through this, and none of those images get cached with Safari, causing the watermark script to run every time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18106</commentid>
    <comment_count>3</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2007-03-20 04:17:38 -0700</bug_when>
    <thetext>Caching is done by NSFoundation classes, so this bug needs a Radar bug to be fixed.  (Note that this bug may eventually be closed as RESOLVED/INVALID, but only because the bug can&apos;t be fixed in WebKit itself.)

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18040</commentid>
    <comment_count>4</comment_count>
    <who name="Alexander Romanovich">alex</who>
    <bug_when>2007-03-20 08:34:37 -0700</bug_when>
    <thetext>&lt;rdar://problem/5074795&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18041</commentid>
    <comment_count>5</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2007-03-20 09:11:52 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; &lt;rdar://problem/5074795&gt;

Alexander, if you haven&apos;t already done so, please add a link to this Bugzilla bug in Radar.  Thanks for filing the Radar bug!

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18042</commentid>
    <comment_count>6</comment_count>
    <who name="Alexander Romanovich">alex</who>
    <bug_when>2007-03-20 09:21:42 -0700</bug_when>
    <thetext>I included a link to this bug at the start of the radar report. Thanks David.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14770</commentid>
    <comment_count>7</comment_count>
    <who name="Alexander Romanovich">alex</who>
    <bug_when>2007-04-14 21:40:41 -0700</bug_when>
    <thetext>&lt;rdar://problem/5074795&gt;

15-Apr-2007 12:11 AM Alexander Romanovich:
It seems that a workaround is to use the &quot;Expires&quot; header to achieve the caching behavior. While that works for me as an alternative, this bug still remains and should be fixed. At least this implies that your caching methods are working properly, you&apos;re just ignoring a certain type of header that should trigger it.
Working example of workaround header is: header(&apos;Expires: &apos;.gmdate(&apos;D, d M Y H:i:s&apos;,mktime(0,0,0,date(&apos;m&apos;),date(&apos;d&apos;)+1,date(&apos;y&apos;))).&apos; GMT&apos;);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65609</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-12-29 10:48:09 -0800</bug_when>
    <thetext>This issue is not in WebKit, and it will continue to be tracked in Radar. Closing as INVALID per our process. Thank you for filing this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103130</commentid>
    <comment_count>9</comment_count>
    <who name="Alexander Romanovich">alex</who>
    <bug_when>2008-12-21 11:18:53 -0800</bug_when>
    <thetext>This bug has been ignored in radar for well over a year, and my request @ radar for an update have also been ignored. It would be nice to fix this in tandem with the new shift-reload stuff, as well as other caching changes the WebKit team has recently been dealing with. Any chance this can get some attention now? The bug is simply that &quot;must-revalidate&quot; always forces the cache to be bypassed on Safari, but not on other browsers (FF, IE).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103131</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-12-21 12:03:43 -0800</bug_when>
    <thetext>Please note that the right way to request status update from Apple is to e-mail devbugs@apple.com.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110814</commentid>
    <comment_count>11</comment_count>
    <who name="Steve Clay">steve</who>
    <bug_when>2009-02-24 14:14:12 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; It seems that a workaround is to use the &quot;Expires&quot; header to achieve the

On Windows nightly WebKit-r41128 and Safari 4 beta I still see this bug, even when Expires is sent matching the max-age. I documented this here: http://mrclay.org/index.php/2009/02/24/safari-4-beta-cache-controlmust-revalidate-bug/

The &quot;Expires&quot; workaround *was* working in Safari 3 so this is even a regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110920</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-25 00:18:19 -0800</bug_when>
    <thetext>&gt; The &quot;Expires&quot; workaround *was* working in Safari 3 so this is even a
&gt; regression.

Could you please file a new bug for this? It may or may not be a WebKit issue - I haven&apos;t been able to reproduce it so far, so I can&apos;t tell for sure. In any case, being a regression, it should be tracked separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116863</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-04-08 04:23:04 -0700</bug_when>
    <thetext>The new bug is bug 24179.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123648</commentid>
    <comment_count>14</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2009-05-29 16:26:45 -0700</bug_when>
    <thetext>This is a valid bug that can be fixed in WebCore level. Reopening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123651</commentid>
    <comment_count>15</comment_count>
      <attachid>30796</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2009-05-29 16:33:24 -0700</bug_when>
    <thetext>Created attachment 30796
preliminary patch

Implement RFC2616 cache expiration calculations in WebCore instead of relying on the networking layer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124239</commentid>
    <comment_count>16</comment_count>
      <attachid>30930</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2009-06-03 16:06:13 -0700</bug_when>
    <thetext>Created attachment 30930
updated patch

Test cases, bug fixes and cleanups.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124252</commentid>
    <comment_count>17</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2009-06-03 17:01:02 -0700</bug_when>
    <thetext>Note that this patch fixes the subresource case only, fix for bug 26178 is needed to handle the main resource case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124257</commentid>
    <comment_count>18</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2009-06-03 17:11:56 -0700</bug_when>
    <thetext>*** Bug 25129 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124311</commentid>
    <comment_count>19</comment_count>
      <attachid>30930</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-06-04 08:42:26 -0700</bug_when>
    <thetext>Comment on attachment 30930
updated patch

&gt;Index: WebCore/ForwardingHeaders/runtime/DateMath.h
&gt;===================================================================
&gt;--- WebCore/ForwardingHeaders/runtime/DateMath.h	(revision 0)
&gt;+++ WebCore/ForwardingHeaders/runtime/DateMath.h	(revision 0)
&gt;@@ -0,0 +1,4 @@
&gt;+#ifndef WebCore_FWD_DateMath_h
&gt;+#define WebCore_FWD_DateMath_h
&gt;+#include &lt;JavaScriptCore/DateMath.h&gt;
&gt;+#endif

It would be nice to have this forwarding header added elsewhere for consistency:

JavaScriptGlue/ForwardingHeaders/runtime
WebKit/mac/ForwardingHeaders/runtime

&gt;Index: WebCore/loader/CachedResource.cpp
&gt;===================================================================
&gt;--- WebCore/loader/CachedResource.cpp	(revision 44396)
&gt;+++ WebCore/loader/CachedResource.cpp	(working copy)
&gt;@@ -26,12 +26,14 @@
&gt; 
&gt; #include &quot;Cache.h&quot;
&gt; #include &quot;CachedResourceHandle.h&quot;
&gt;+#include &quot;CString.h&quot;

Is this still needed?  It was probably added for debugging.

&gt;Index: WebCore/platform/network/ResourceResponseBase.cpp
&gt;===================================================================
&gt;--- WebCore/platform/network/ResourceResponseBase.cpp	(revision 44396)
&gt;+++ WebCore/platform/network/ResourceResponseBase.cpp	(working copy)
&gt;@@ -35,6 +38,34 @@ namespace WebCore {
&gt; 
&gt; static void parseCacheHeader(const String&amp; header, Vector&lt;pair&lt;String, String&gt; &gt;&amp; result);
&gt; 
&gt;+ResourceResponseBase::ResourceResponseBase()  
&gt;+    : m_expectedContentLength(0)
&gt;+    , m_httpStatusCode(0)
&gt;+    , m_isNull(true)
&gt;+    , m_haveParsedCacheControlHeader(false)
&gt;+    , m_haveParsedAgeHeader(false)
&gt;+    , m_haveParsedDateHeader(false)
&gt;+    , m_haveParsedExpiresHeader(false)
&gt;+    , m_haveParsedLastModifiedHeader(false)
&gt;+{
&gt;+}
&gt;+
&gt;+ResourceResponseBase::ResourceResponseBase(const KURL&amp; url, const String&amp; mimeType, long long expectedLength, const String&amp; textEncodingName, const String&amp; filename)
&gt;+    : m_url(url)
&gt;+    , m_mimeType(mimeType)
&gt;+    , m_expectedContentLength(expectedLength)
&gt;+    , m_textEncodingName(textEncodingName)
&gt;+    , m_suggestedFilename(filename)
&gt;+    , m_httpStatusCode(0)
&gt;+    , m_isNull(false)
&gt;+    , m_haveParsedCacheControlHeader(false)
&gt;+    , m_haveParsedAgeHeader(false)
&gt;+    , m_haveParsedDateHeader(false)
&gt;+    , m_haveParsedExpiresHeader(false)
&gt;+    , m_haveParsedLastModifiedHeader(false)
&gt;+{
&gt;+}

Any particular reason the constructors were moved from the header into the source file?  They won&apos;t be inlined any longer if they&apos;re defined here.

&gt;Index: WebCore/platform/network/ResourceResponseBase.h
&gt;===================================================================
&gt;--- WebCore/platform/network/ResourceResponseBase.h	(revision 44396)
&gt;+++ WebCore/platform/network/ResourceResponseBase.h	(working copy)
&gt;@@ -147,16 +117,26 @@ protected:
&gt;     int m_httpStatusCode;
&gt;     String m_httpStatusText;
&gt;     HTTPHeaderMap m_httpHeaderFields;
&gt;-    time_t m_expirationDate;
&gt;-    time_t m_lastModifiedDate;
&gt;-    bool m_isNull : 1;
&gt; 
&gt;+    bool m_isNull : 1;
&gt;+    
&gt; private:
&gt;     void parseCacheControlDirectives() const;
&gt; 
&gt;-    mutable bool m_haveParsedCacheControl : 1;
&gt;-    mutable bool m_cacheControlContainsMustRevalidate : 1;
&gt;+    mutable bool m_haveParsedCacheControlHeader : 1;
&gt;+    mutable bool m_haveParsedAgeHeader : 1;
&gt;+    mutable bool m_haveParsedDateHeader : 1;
&gt;+    mutable bool m_haveParsedExpiresHeader : 1;
&gt;+    mutable bool m_haveParsedLastModifiedHeader : 1;
&gt;+
&gt;     mutable bool m_cacheControlContainsNoCache : 1;
&gt;+    mutable bool m_cacheControlContainsMustRevalidate : 1;
&gt;+    mutable double m_cacheControlMaxAge;
&gt;+
&gt;+    mutable double m_age;
&gt;+    mutable double m_date;
&gt;+    mutable double m_expires;
&gt;+    mutable double m_lastModified;
&gt; };

Any 64-bit class size considerations here?  I think Simon was moving doubles above bool bitfields in other classes.  Maybe it would be a good idea to group the bool bitfields together even if you have to switch between private and protected.

The only thing that I want to do is to compare the RFC language to the implementation.  (Thanks for adding appropriate comments to the source!)  Otherwise, this patch looks great!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124332</commentid>
    <comment_count>20</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2009-06-04 10:41:24 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Any particular reason the constructors were moved from the header into the
&gt; source file?  They won&apos;t be inlined any longer if they&apos;re defined here.

To avoid gratuitous inilining. :)

Mostly to avoid triggering large recompiles on modifications. I don&apos;t think responses are constructed in sufficient numbers for inlining to be important.

&gt; Any 64-bit class size considerations here?  I think Simon was moving doubles
&gt; above bool bitfields in other classes.  Maybe it would be a good idea to group
&gt; the bool bitfields together even if you have to switch between private and
&gt; protected.

I don&apos;t see how reordering would help here. MIcro optimizing here is not massively important  in any case.

&gt; The only thing that I want to do is to compare the RFC language to the
&gt; implementation.  (Thanks for adding appropriate comments to the source!) 
&gt; Otherwise, this patch looks great!

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124404</commentid>
    <comment_count>21</comment_count>
      <attachid>30930</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-06-04 16:25:00 -0700</bug_when>
    <thetext>Comment on attachment 30930
updated patch

(In reply to comment #19)
&gt; The only thing that I want to do is to compare the RFC language to the
&gt; implementation.  (Thanks for adding appropriate comments to the source!) 
&gt; Otherwise, this patch looks great!

I only found one issue with the comments:

&gt;+    // RFC2616 13.3.3
&gt;[...]
&gt;+    // RFC2616 13.3.4

These should be sections 13.2.3 and 13.2.4, respectively.

r=me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124478</commentid>
    <comment_count>22</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2009-06-04 23:25:09 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/44452</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124479</commentid>
    <comment_count>23</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2009-06-04 23:29:24 -0700</bug_when>
    <thetext>Landed, with one additional change that gives non-HTTP resources long cache lifetime. This matches existing behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124509</commentid>
    <comment_count>24</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-06-05 06:59:30 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; Landed, with one additional change that gives non-HTTP resources long cache
&gt; lifetime. This matches existing behavior.

Was a test also added for non-HTTP resources?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124535</commentid>
    <comment_count>25</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-06-05 10:05:32 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; http://trac.webkit.org/changeset/44452

http://trac.webkit.org/changeset/44453
http://trac.webkit.org/changeset/44454
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124539</commentid>
    <comment_count>26</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-05 10:17:52 -0700</bug_when>
    <thetext>Since it uses JSC::parseDate, this patch broke Chromium/V8 build. I am trying to figure out the best way to fix it.

One idea is another Script* abstraction, but it doesn&apos;t smell right -- technically, the only JSC-specific part about DateMath is that it uses UString and is located in JavaScriptCore/runtime.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124542</commentid>
    <comment_count>27</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-06-05 10:39:57 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; Since it uses JSC::parseDate, this patch broke Chromium/V8 build. I am trying
&gt; to figure out the best way to fix it.
&gt; 
&gt; One idea is another Script* abstraction, but it doesn&apos;t smell right --
&gt; technically, the only JSC-specific part about DateMath is that it uses UString
&gt; and is located in JavaScriptCore/runtime.

Can JSC::parseDate() (or DateMath) be moved to JavaScritpCore/wtf?
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124550</commentid>
    <comment_count>28</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-06-05 10:50:03 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #26)
&gt; &gt; Since it uses JSC::parseDate, this patch broke Chromium/V8 build. I am trying
&gt; &gt; to figure out the best way to fix it.
&gt; 
&gt; Can JSC::parseDate() (or DateMath) be moved to JavaScritpCore/wtf?

Or why can&apos;t Chromium/V8 compile DateMath.cpp?  Surely there&apos;s not a namespace issue?
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124552</commentid>
    <comment_count>29</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-05 10:56:15 -0700</bug_when>
    <thetext>DateMath uses JSC::UString, which makes moving to wtf or compiling in Chromium a bit tricky.

What if we add a ResourceResponseBase::parseDate method, which the implementations can override? This should allow us to hook in date parsing from network stack layer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124554</commentid>
    <comment_count>30</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-05 11:01:15 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; What if we add a ResourceResponseBase::parseDate method, which the
&gt; implementations can override? This should allow us to hook in date parsing from
&gt; network stack layer.

This seems like a bad idea, scratch that. Thinking ... 

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124557</commentid>
    <comment_count>31</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-05 11:06:17 -0700</bug_when>
    <thetext>Ideally (thinking outloud), date parsing _should_ be handled by the network stack. We don&apos;t need to be having multiple code paths for doing the same thing. I am out of great ideas at the moment, but still thinking :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124559</commentid>
    <comment_count>32</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-05 11:45:40 -0700</bug_when>
    <thetext>Here&apos;s another idea:

Add a parseDate method to HTTPParsers.h, and put an implementation in HTTPParsers.cpp (with !PLATFORM(CHROMIUM) guards). Then I can provide a Chromium impl of this method. WDYT?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124560</commentid>
    <comment_count>33</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-05 11:56:44 -0700</bug_when>
    <thetext>Per IRC discussion, I am moving JSC::parseDate guts to WTF::parseDate(char*, unsigned).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124652</commentid>
    <comment_count>34</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-06 14:39:31 -0700</bug_when>
    <thetext>Reopening to fix Chromium build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124659</commentid>
    <comment_count>35</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-06-06 15:28:15 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; Reopening to fix Chromium build.

You should really file a new bug for this, and note the new bug number here.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124669</commentid>
    <comment_count>36</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-06-06 22:30:06 -0700</bug_when>
    <thetext>Sure thing. New bug is here https://bugs.webkit.org/show_bug.cgi?id=26238.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125904</commentid>
    <comment_count>37</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-06-15 01:19:03 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; This is a valid bug that can be fixed in WebCore level. Reopening.

To clarify what Antti said, this bug can be mostly worked around at WebCore level (and this is done now). It is still a bug in CFNetwork that still affects WebCore, but to a lesser degree.

I&apos;ve added the necessary information to Radar bug for Apple to keep tracking the problem.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30796</attachid>
            <date>2009-05-29 16:33:24 -0700</date>
            <delta_ts>2009-06-03 16:06:13 -0700</delta_ts>
            <desc>preliminary patch</desc>
            <filename>cache-expiration-calculation.patch</filename>
            <type>text/plain</type>
            <size>27038</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDQ0MDU3KQorKysgSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsNiAr
MjcwLDcgQEAgX19aTjNKU0M5U3RydWN0dXJlNDBhZGRQcm9wZXJ0eVRyYW5zaXRpbwogX19aTjNK
U0M5U3RydWN0dXJlQzFFTlNfN0pTVmFsdWVFUktOU184VHlwZUluZm9FCiBfX1pOM0pTQzlTdHJ1
Y3R1cmVEMUV2CiBfX1pOM0pTQzljb25zdHJ1Y3RFUE5TXzlFeGVjU3RhdGVFTlNfN0pTVmFsdWVF
TlNfMTNDb25zdHJ1Y3RUeXBlRVJLTlNfMTNDb25zdHJ1Y3REYXRhRVJLTlNfN0FyZ0xpc3RFCitf
X1pOM0pTQzlwYXJzZURhdGVFUktOU183VVN0cmluZ0UKIF9fWk4zSlNDZXFFUktOU183VVN0cmlu
Z0VQS2MKIF9fWk4zSlNDZ3RFUktOU183VVN0cmluZ0VTMl8KIF9fWk4zSlNDbHRFUktOU183VVN0
cmluZ0VTMl8KQEAgLTMwMSw2ICszMDIsNyBAQCBfX1pOM1dURjIxUmVmQ291bnRlZExlYWtDb3Vu
dGVyOWluY3JlbWVuCiBfX1pOM1dURjIxUmVmQ291bnRlZExlYWtDb3VudGVyQzFFUEtjCiBfX1pO
M1dURjIxUmVmQ291bnRlZExlYWtDb3VudGVyRDFFdgogX19aTjNXVEYyM3dhaXRGb3JUaHJlYWRD
b21wbGV0aW9uRWpQUHYKK19fWk4zV1RGMjN3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbkVqUFB2CiBf
X1pOM1dURjI3cmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVtb3J5RXYKIF9fWk4zV1RGMjhzZXRNYWlu
VGhyZWFkQ2FsbGJhY2tzUGF1c2VkRWIKIF9fWk4zV1RGMzZsb2NrQXRvbWljYWxseUluaXRpYWxp
emVkU3RhdGljTXV0ZXhFdgpAQCAtMzcyLDQgKzM3NCwzIEBAIF9fWlRWTjNKU0M4SlNPYmplY3RF
CiBfX1pUVk4zSlNDOEpTU3RyaW5nRQogX2pzY29yZV9mYXN0bWFsbG9jX2ludHJvc3BlY3Rpb24K
IF9rSlNDbGFzc0RlZmluaXRpb25FbXB0eQotX19aTjNXVEYyM3dhaXRGb3JUaHJlYWRDb21wbGV0
aW9uRWpQUHYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNDQwNTcpCisrKyBKYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTMsNyArMjEzLDcgQEAKIAkJQkMxOEMzRjQwRTE2RjVDRDAwQjM0NDYwIC8q
IENvbXBsZXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1QkIyQkM1MDMwRjc3MjEwMUZDRkUxRCAvKiBDb21wbGV0aW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxOEMzRjUwRTE2RjVDRDAw
QjM0NDYwIC8qIGNvbmZpZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjY4RUJCOEMwMjU1RDRDNjAxRkY2MEY3IC8qIGNvbmZpZy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMThDM0Y2MEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBDb25zdHJ1Y3REYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQzhGM0NDRjBEQUYxN0JBMDA1NzdBODAgLyogQ29uc3RydWN0RGF0
YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUJD
MThDM0Y5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBEYXRlTWF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDIxMjAyMjkwQUQ0MzEwQzAwRUQ3OUI2IC8qIERh
dGVNYXRoLmggKi87IH07CisJCUJDMThDM0Y5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBEYXRlTWF0aC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDIxMjAyMjkw
QUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVNYXRoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxOEMzRkEwRTE2RjVDRDAwQjM0NDYwIC8qIERlYnVn
Z2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNjky
QTg1OTAyNTU1OTdEMDFGRjYwRjcgLyogRGVidWdnZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzE4QzNGQjBFMTZGNUNEMDBCMzQ0NjAgLyog
RGVidWdnZXJDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0ODBEQjlCMEREQzIyN0YwMDNDRkRGMiAvKiBEZWJ1Z2dlckNhbGxGcmFtZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMThD
M0ZDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBEZXF1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4NjExMUQwQ0M4MjQ4MzAwODE0MTJCIC8qIERlcXVlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuYmFz
ZS5leHAJKHJldmlzaW9uIDQ0MDU3KQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDgsOCArMTQ4LDggQEAgX19aTjdXZWJDb3JlMTBTdHJpbmdJbXBsOGVu
ZHNXaXRoRVBTMF9iCiBfX1pON1dlYkNvcmUxMFN0cmluZ0ltcGxEMUV2CiBfX1pON1dlYkNvcmUx
MFN0cmluZ0ltcGxjdlA4TlNTdHJpbmdFdgogX19aTjdXZWJDb3JlMTBTdHJpbmdJbXBsZGxFUHYK
LV9fWk43V2ViQ29yZTEwc2V0Q29va2llc0VQTlNfOERvY3VtZW50RVJLTlNfNEtVUkxFUktOU182
U3RyaW5nRQogX19aTjdXZWJDb3JlMTBoYW5kQ3Vyc29yRXYKK19fWk43V2ViQ29yZTEwc2V0Q29v
a2llc0VQTlNfOERvY3VtZW50RVJLTlNfNEtVUkxFUktOU182U3RyaW5nRQogX19aTjdXZWJDb3Jl
MTFDYWNoZWRGcmFtZTIzY2FjaGVkRnJhbWVQbGF0Zm9ybURhdGFFdgogX19aTjdXZWJDb3JlMTFD
YWNoZWRGcmFtZTI2c2V0Q2FjaGVkRnJhbWVQbGF0Zm9ybURhdGFFUE5TXzIzQ2FjaGVkRnJhbWVQ
bGF0Zm9ybURhdGFFCiBfX1pON1dlYkNvcmUxMUNvbnRleHRNZW51MjJzZXRQbGF0Zm9ybURlc2Ny
aXB0aW9uRVAxNE5TTXV0YWJsZUFycmF5CkBAIC00MjUsNiArNDI1LDcgQEAgX19aTjdXZWJDb3Jl
MTlUZXh0UmVzb3VyY2VEZWNvZGVyQzFFUktOUwogX19aTjdXZWJDb3JlMTlUZXh0UmVzb3VyY2VE
ZWNvZGVyRDFFdgogX19aTjdXZWJDb3JlMTlhcHBsaWNhdGlvbklzU2FmYXJpRXYKIF9fWk43V2Vi
Q29yZTIwUmVzb3VyY2VSZXNwb25zZUJhc2UyNHNldEV4cGVjdGVkQ29udGVudExlbmd0aEV4Citf
X1pON1dlYkNvcmUyMFJlc291cmNlUmVzcG9uc2VCYXNlQzJFdgogX19aTjdXZWJDb3JlMjFDb250
ZXh0TWVudUNvbnRyb2xsZXIxNmNsZWFyQ29udGV4dE1lbnVFdgogX19aTjdXZWJDb3JlMjFKYXZh
U2NyaXB0RGVidWdTZXJ2ZXIyM3JlY29tcGlsZUFsbEpTRnVuY3Rpb25zRVBOU181VGltZXJJUzBf
RUUKIF9fWk43V2ViQ29yZTIxSmF2YVNjcmlwdERlYnVnU2VydmVyNnNoYXJlZEV2CkBAIC00NDMs
MTEgKzQ0NCwxMSBAQCBfX1pON1dlYkNvcmUyM0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlNWVtCiBf
X1pON1dlYkNvcmUyM1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kQzFFUE5TXzhEb2N1bWVudEVOM1dU
RjEwUGFzc1JlZlB0cklOU18xNkRvY3VtZW50RnJhZ21lbnRFRUViYmJiYk5TXzEwRWRpdEFjdGlv
bkUKIF9fWk43V2ViQ29yZTIzY3JlYXRlRnJhZ21lbnRGcm9tTm9kZXNFUE5TXzhEb2N1bWVudEVS
S04zV1RGNlZlY3RvcklQTlNfNE5vZGVFTG0wRUVFCiBfX1pON1dlYkNvcmUyNEJpbmFyeVByb3Bl
cnR5TGlzdFdyaXRlcjE3d3JpdGVQcm9wZXJ0eUxpc3RFdgorX19aTjdXZWJDb3JlMjRXZWJDb3Jl
Q3JlZGVudGlhbFN0b3JhZ2U5bV9zdG9yYWdlRQogX19aTjdXZWJDb3JlMjRjcmVhdGVGcmFnbWVu
dEZyb21NYXJrdXBFUE5TXzhEb2N1bWVudEVSS05TXzZTdHJpbmdFUzRfCiBfX1pON1dlYkNvcmUy
NGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlc0VSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUyNG5v
dGlmeUhpc3RvcnlJdGVtQ2hhbmdlZEUKIF9fWk43V2ViQ29yZTI0cmFuZ2VDb21wbGlhbnRFcXVp
dmFsZW50RVJLTlNfOFBvc2l0aW9uRQotX19aTjdXZWJDb3JlMjRXZWJDb3JlQ3JlZGVudGlhbFN0
b3JhZ2U5bV9zdG9yYWdlRQogX19aTjdXZWJDb3JlMjVIaXN0b3J5UHJvcGVydHlMaXN0V3JpdGVy
MTFyZWxlYXNlRGF0YUV2CiBfX1pON1dlYkNvcmUyNUhpc3RvcnlQcm9wZXJ0eUxpc3RXcml0ZXIx
MndyaXRlT2JqZWN0c0VSTlNfMzBCaW5hcnlQcm9wZXJ0eUxpc3RPYmplY3RTdHJlYW1FCiBfX1pO
N1dlYkNvcmUyNUhpc3RvcnlQcm9wZXJ0eUxpc3RXcml0ZXIxNndyaXRlSGlzdG9yeUl0ZW1FUk5T
XzMwQmluYXJ5UHJvcGVydHlMaXN0T2JqZWN0U3RyZWFtRVBOU18xMUhpc3RvcnlJdGVtRQpAQCAt
NjUwLDEzICs2NTEsMTMgQEAgX19aTjdXZWJDb3JlOFNldHRpbmdzMjlzZXRBdXRob3JBbmRVc2Vy
UwogX19aTjdXZWJDb3JlOFNldHRpbmdzMjlzZXRXZWJBcmNoaXZlRGVidWdNb2RlRW5hYmxlZEVi
CiBfX1pON1dlYkNvcmU4U2V0dGluZ3MzMXNldFNocmlua3NTdGFuZGFsb25lSW1hZ2VzVG9GaXRF
YgogX19aTjdXZWJDb3JlOFNldHRpbmdzMzJzZXROZWVkc0Fkb2JlRnJhbWVSZWxvYWRpbmdRdWly
a0ViCitfX1pON1dlYkNvcmU4U2V0dGluZ3MzM3NldERvd25sb2FkYWJsZUJpbmFyeUZvbnRzRW5h
YmxlZEViCiBfX1pON1dlYkNvcmU4U2V0dGluZ3MzM3NldEVuZm9yY2VDU1NNSU1FVHlwZUluU3Ry
aWN0TW9kZUViCiBfX1pON1dlYkNvcmU4U2V0dGluZ3MzNXNldEFsbG93VW5pdmVyc2FsQWNjZXNz
RnJvbUZpbGVVUkxzRWIKIF9fWk43V2ViQ29yZThTZXR0aW5nczM2c2V0T2ZmbGluZVdlYkFwcGxp
Y2F0aW9uQ2FjaGVFbmFibGVkRWIKIF9fWk43V2ViQ29yZThTZXR0aW5nczQwc2V0SmF2YVNjcmlw
dENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseUViCiBfX1pON1dlYkNvcmU4U2V0dGluZ3M0MHNl
dFRleHREaXJlY3Rpb25TdWJtZW51SW5jbHVzaW9uQmVoYXZpb3JFTlNfMzdUZXh0RGlyZWN0aW9u
U3VibWVudUluY2x1c2lvbkJlaGF2aW9yRQogX19aTjdXZWJDb3JlOFNldHRpbmdzNDFzZXROZWVk
c0tleWJvYXJkRXZlbnREaXNhbWJpZ3VhdGlvblF1aXJrc0ViCi1fX1pON1dlYkNvcmU4U2V0dGlu
Z3MzM3NldERvd25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZEViCiBfX1pON1dlYkNvcmU4Ymxh
bmtVUkxFdgogX19aTjdXZWJDb3JlOHBhcnNlVVJMRVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29y
ZTlET01XaW5kb3czMGRpc3BhdGNoQWxsUGVuZGluZ1VubG9hZEV2ZW50c0V2CkluZGV4OiBXZWJD
b3JlL2xvYWRlci9DYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGUu
Y3BwCShyZXZpc2lvbiA0NDA1NykKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjExLDcgKzIxMSw3IEBAIHZvaWQgQ2FjaGU6OnJldmFsaWRhdGlvblN1Y2Nl
ZWRlZChDYWNoZWQKICAgICBBU1NFUlQoIW1fcmVzb3VyY2VzLmdldChyZXNvdXJjZS0+dXJsKCkp
KTsKICAgICBtX3Jlc291cmNlcy5zZXQocmVzb3VyY2UtPnVybCgpLCByZXNvdXJjZSk7CiAgICAg
cmVzb3VyY2UtPnNldEluQ2FjaGUodHJ1ZSk7Ci0gICAgcmVzb3VyY2UtPnNldEV4cGlyYXRpb25E
YXRlKHJlc3BvbnNlLmV4cGlyYXRpb25EYXRlKCkpOworICAgIHJlc291cmNlLT51cGRhdGVSZXNw
b25zZUFmdGVyUmV2YWxpZGF0aW9uKHJlc3BvbnNlKTsKICAgICBpbnNlcnRJbkxSVUxpc3QocmVz
b3VyY2UpOwogICAgIGludCBkZWx0YSA9IHJlc291cmNlLT5zaXplKCk7CiAgICAgaWYgKHJlc291
cmNlLT5kZWNvZGVkU2l6ZSgpICYmIHJlc291cmNlLT5oYXNDbGllbnRzKCkpCkluZGV4OiBXZWJD
b3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2Fk
ZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCShyZXZpc2lvbiA0NDA1NykKKysrIFdlYkNvcmUvbG9hZGVy
L0NhY2hlZFJlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTIgKzI2LDE0IEBACiAK
ICNpbmNsdWRlICJDYWNoZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCisj
aW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5j
bHVkZSAiUHVyZ2VhYmxlQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVxdWVzdC5oIgorI2luY2x1ZGUg
PHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTQ1LDYgKzQ3LDcgQEAgc3RhdGljIFJl
ZkNvdW50ZWRMZWFrQ291bnRlciBjYWNoZWRSZXNvdQogCiBDYWNoZWRSZXNvdXJjZTo6Q2FjaGVk
UmVzb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIFR5cGUgdHlwZSkKICAgICA6IG1fdXJsKHVybCkK
KyAgICAsIG1fcmVzcG9uc2VUaW1lKGN1cnJlbnRUaW1lKCkpCiAgICAgLCBtX2xhc3REZWNvZGVk
QWNjZXNzVGltZSgwKQogICAgICwgbV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKHRydWUpCiAg
ICAgLCBtX3ByZWxvYWRDb3VudCgwKQpAQCAtNTYsNyArNTksNiBAQCBDYWNoZWRSZXNvdXJjZTo6
Q2FjaGVkUmVzb3VyY2UoY29uc3QgU3RyCiAgICAgLCBtX2hhbmRsZUNvdW50KDApCiAgICAgLCBt
X3Jlc291cmNlVG9SZXZhbGlkYXRlKDApCiAgICAgLCBtX2lzQmVpbmdSZXZhbGlkYXRlZChmYWxz
ZSkKLSAgICAsIG1fZXhwaXJhdGlvbkRhdGUoMCkKIHsKICNpZm5kZWYgTkRFQlVHCiAgICAgY2Fj
aGVkUmVzb3VyY2VMZWFrQ291bnRlci5pbmNyZW1lbnQoKTsKQEAgLTExNSwxNiArMTE3LDUwIEBA
IHZvaWQgQ2FjaGVkUmVzb3VyY2U6OmZpbmlzaCgpCiAKIGJvb2wgQ2FjaGVkUmVzb3VyY2U6Omlz
RXhwaXJlZCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2V4cGlyYXRpb25EYXRlKQorICAgIGlmICht
X3Jlc3BvbnNlLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdGltZV90IG5v
dyA9IHRpbWUoMCk7Ci0gICAgcmV0dXJuIGRpZmZ0aW1lKG5vdywgbV9leHBpcmF0aW9uRGF0ZSkg
Pj0gMDsKKyAgICBkb3VibGUgYSA9IGN1cnJlbnRBZ2UoKTsKKyAgICBkb3VibGUgZiA9IGZyZXNo
bmVzc0xpZmV0aW1lKCk7CisgICAgcHJpbnRmKCJpc0V4cGlyZWQ9PSVkICVzIGFnZT0lZiBmcmVz
aD0lZlxuIiwgYSA+IGYsIHVybCgpLmxhdGluMSgpLmRhdGEoKSwgYSwgZik7CisgICAgcmV0dXJu
IGN1cnJlbnRBZ2UoKSA+IGZyZXNobmVzc0xpZmV0aW1lKCk7Cit9CisgICAgCitkb3VibGUgQ2Fj
aGVkUmVzb3VyY2U6OmN1cnJlbnRBZ2UoKSBjb25zdAoreworICAgIC8vIFJGQzI2MTYgMTMuMy4z
CisgICAgLy8gTm8gY29tcGVuc2F0aW9uIGZvciBsYXRlbmN5IGFzIHRoYXQgaXMgbm90IHRlcnJp
Ymx5IGltcG9ydGFudCBpbiBwcmFjdGljZQorICAgIGRvdWJsZSBkYXRlVmFsdWUgPSBtX3Jlc3Bv
bnNlLmRhdGUoKTsKKyAgICBkb3VibGUgYXBwYXJlbnRBZ2UgPSBpc2Zpbml0ZShkYXRlVmFsdWUp
ID8gbWF4KDAuLCBtX3Jlc3BvbnNlVGltZSAtIGRhdGVWYWx1ZSkgOiAwOworICAgIGRvdWJsZSBh
Z2VWYWx1ZSA9IG1fcmVzcG9uc2UuYWdlKCk7CisgICAgZG91YmxlIGNvcnJlY3RlZFJlY2VpdmVk
QWdlID0gaXNmaW5pdGUoYWdlVmFsdWUpID8gbWF4KGFwcGFyZW50QWdlLCBhZ2VWYWx1ZSkgOiBh
cHBhcmVudEFnZTsKKyAgICBkb3VibGUgcmVzaWRlbnRUaW1lID0gY3VycmVudFRpbWUoKSAtIG1f
cmVzcG9uc2VUaW1lOworICAgIHJldHVybiBjb3JyZWN0ZWRSZWNlaXZlZEFnZSArIHJlc2lkZW50
VGltZTsKK30KKyAgICAKK2RvdWJsZSBDYWNoZWRSZXNvdXJjZTo6ZnJlc2huZXNzTGlmZXRpbWUo
KSBjb25zdAoreworICAgIC8vIFJGQzI2MTYgMTMuMy40CisgICAgZG91YmxlIG1heEFnZVZhbHVl
ID0gbV9yZXNwb25zZS5jYWNoZUNvbnRyb2xNYXhBZ2UoKTsKKyAgICBpZiAoaXNmaW5pdGUobWF4
QWdlVmFsdWUpKQorICAgICAgICByZXR1cm4gbWF4QWdlVmFsdWU7CisgICAgZG91YmxlIGV4cGly
ZXNWYWx1ZSA9IG1fcmVzcG9uc2UuZXhwaXJlcygpOworICAgIGRvdWJsZSBkYXRlVmFsdWUgPSBt
X3Jlc3BvbnNlLmRhdGUoKTsKKyAgICBkb3VibGUgY3JlYXRpb25UaW1lID0gaXNmaW5pdGUoZGF0
ZVZhbHVlKSA/IGRhdGVWYWx1ZSA6IG1fcmVzcG9uc2VUaW1lOworICAgIGlmIChpc2Zpbml0ZShl
eHBpcmVzVmFsdWUpKQorICAgICAgICByZXR1cm4gZXhwaXJlc1ZhbHVlIC0gY3JlYXRpb25UaW1l
OworICAgIGRvdWJsZSBsYXN0TW9kaWZpZWRWYWx1ZSA9IG1fcmVzcG9uc2UubGFzdE1vZGlmaWVk
KCk7CisgICAgaWYgKGlzZmluaXRlKGxhc3RNb2RpZmllZFZhbHVlKSkKKyAgICAgICAgcmV0dXJu
IChjcmVhdGlvblRpbWUgLSBsYXN0TW9kaWZpZWRWYWx1ZSkgKiAwLjEwOworICAgIHJldHVybiAw
OwogfQogCiB2b2lkIENhY2hlZFJlc291cmNlOjpzZXRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSkKIHsKICAgICBtX3Jlc3BvbnNlID0gcmVzcG9uc2U7Ci0gICAgbV9l
eHBpcmF0aW9uRGF0ZSA9IHJlc3BvbnNlLmV4cGlyYXRpb25EYXRlKCk7CisgICAgbV9yZXNwb25z
ZVRpbWUgPSBjdXJyZW50VGltZSgpOworICAgIGRvdWJsZSBhID0gY3VycmVudEFnZSgpOworICAg
IGRvdWJsZSBmID0gZnJlc2huZXNzTGlmZXRpbWUoKTsKKyAgICBwcmludGYoInJlc3BvbnNlICVz
IGFnZT0lZiBmcmVzaD0lZlxuIiwgdXJsKCkubGF0aW4xKCkuZGF0YSgpLCBhLCBmKTsKIH0KIAog
dm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0UmVxdWVzdChSZXF1ZXN0KiByZXF1ZXN0KQpAQCAtMjk5
LDYgKzMzNSwxOCBAQCB2b2lkIENhY2hlZFJlc291cmNlOjpzd2l0Y2hDbGllbnRzVG9SZXZhCiAg
ICAgICAgIG1fcmVzb3VyY2VUb1JldmFsaWRhdGUtPmFkZENsaWVudChjbGllbnRzVG9Nb3ZlW25d
KTsKIH0KICAgICAKK3ZvaWQgQ2FjaGVkUmVzb3VyY2U6OnVwZGF0ZVJlc3BvbnNlQWZ0ZXJSZXZh
bGlkYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgdmFsaWRhdGluZ1Jlc3BvbnNlKQorewor
ICAgIG1fcmVzcG9uc2VUaW1lID0gY3VycmVudFRpbWUoKTsKKworICAgIC8vIFJGQzI2MTYgMTAu
My41CisgICAgLy8gVXBkYXRlIGNhY2hlZCBoZWFkZXJzIGZyb20gdGhlIHJlc3BvbnNlCisgICAg
Y29uc3QgSFRUUEhlYWRlck1hcCYgbmV3SGVhZGVycyA9IHZhbGlkYXRpbmdSZXNwb25zZS5odHRw
SGVhZGVyRmllbGRzKCk7CisgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bmV3SGVhZGVycy5lbmQoKTsKKyAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbmV3SGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIG1fcmVz
cG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7Cit9CisgICAg
CiBib29sIENhY2hlZFJlc291cmNlOjpjYW5Vc2VDYWNoZVZhbGlkYXRvcigpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuICFtX2xvYWRpbmcgJiYgKCFtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiTGFz
dC1Nb2RpZmllZCIpLmlzRW1wdHkoKSB8fCAhbV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoIkVU
YWciKS5pc0VtcHR5KCkpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCShyZXZpc2lvbiA0
NDA1NykKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE5Myw2ICsxOTMsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVxdWVzdCogbV9yZXF1ZXN0Owog
CiAgICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOworICAgIGRvdWJsZSBtX3Jlc3BvbnNl
VGltZTsKKwogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsKICAgICBPd25QdHI8UHVy
Z2VhYmxlQnVmZmVyPiBtX3B1cmdlYWJsZURhdGE7CiAKQEAgLTIwNiw3ICsyMDgsMTAgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHNldFJlc291cmNlVG9SZXZhbGlkYXRlKENhY2hlZFJlc291cmNlKik7
CiAgICAgdm9pZCBzd2l0Y2hDbGllbnRzVG9SZXZhbGlkYXRlZFJlc291cmNlKCk7CiAgICAgdm9p
ZCBjbGVhclJlc291cmNlVG9SZXZhbGlkYXRlKCk7Ci0gICAgdm9pZCBzZXRFeHBpcmF0aW9uRGF0
ZSh0aW1lX3QgZXhwaXJhdGlvbkRhdGUpIHsgbV9leHBpcmF0aW9uRGF0ZSA9IGV4cGlyYXRpb25E
YXRlOyB9CisgICAgdm9pZCB1cGRhdGVSZXNwb25zZUFmdGVyUmV2YWxpZGF0aW9uKGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmIHZhbGlkYXRpbmdSZXNwb25zZSk7CisKKyAgICBkb3VibGUgY3VycmVu
dEFnZSgpIGNvbnN0OworICAgIGRvdWJsZSBmcmVzaG5lc3NMaWZldGltZSgpIGNvbnN0OwogCiAg
ICAgdW5zaWduZWQgbV9lbmNvZGVkU2l6ZTsKICAgICB1bnNpZ25lZCBtX2RlY29kZWRTaXplOwpA
QCAtMjIzLDcgKzIyOCw2IEBAIHByaXZhdGU6CiBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX2luQ2Fj
aGU7CiAgICAgYm9vbCBtX2xvYWRpbmc7Ci0gICAgYm9vbCBtX2V4cGlyZURhdGVDaGFuZ2VkOwog
I2lmbmRlZiBOREVCVUcKICAgICBib29sIG1fZGVsZXRlZDsKICAgICB1bnNpZ25lZCBtX2xydUlu
ZGV4OwpAQCAtMjQ3LDggKzI1MSw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzQmVpbmdSZXZh
bGlkYXRlZDsKICAgICAvLyBUaGVzZSBoYW5kbGVzIHdpbGwgbmVlZCB0byBiZSB1cGRhdGVkIHRv
IHBvaW50IHRvIHRoZSBtX3Jlc291cmNlVG9SZXZhbGlkYXRlIGluIGNhc2Ugd2UgZ2V0IDMwNCBy
ZXNwb25zZS4KICAgICBIYXNoU2V0PENhY2hlZFJlc291cmNlSGFuZGxlQmFzZSo+IG1faGFuZGxl
c1RvUmV2YWxpZGF0ZTsKLSAgICAKLSAgICB0aW1lX3QgbV9leHBpcmF0aW9uRGF0ZTsKIH07CiAK
IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9u
c2VCYXNlLmNwcAkocmV2aXNpb24gNDQwNTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw5IEBA
CiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZUJhc2UuaCIKIAogI2luY2x1ZGUgIlJlc291cmNl
UmVzcG9uc2UuaCIKKyNpbmNsdWRlIDxydW50aW1lL0RhdGVNYXRoLmg+CisjaW5jbHVkZSA8d3Rm
L0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogCkBAIC0zNSw2ICszOCwzNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHN0YXRpYyB2b2lkIHBhcnNlQ2FjaGVIZWFkZXIoY29uc3QgU3RyaW5nJiBoZWFkZXIsIFZlY3Rv
cjxwYWlyPFN0cmluZywgU3RyaW5nPiA+JiByZXN1bHQpOwogCitSZXNvdXJjZVJlc3BvbnNlQmFz
ZTo6UmVzb3VyY2VSZXNwb25zZUJhc2UoKSAgCisgICAgOiBtX2V4cGVjdGVkQ29udGVudExlbmd0
aCgwKQorICAgICwgbV9odHRwU3RhdHVzQ29kZSgwKQorICAgICwgbV9pc051bGwodHJ1ZSkKKyAg
ICAsIG1faGF2ZVBhcnNlZENhY2hlQ29udHJvbEhlYWRlcihmYWxzZSkKKyAgICAsIG1faGF2ZVBh
cnNlZEFnZUhlYWRlcigwKQorICAgICwgbV9oYXZlUGFyc2VkRGF0ZUhlYWRlcigwKQorICAgICwg
bV9oYXZlUGFyc2VkRXhwaXJlc0hlYWRlcigwKQorICAgICwgbV9oYXZlUGFyc2VkTGFzdE1vZGlm
aWVkSGVhZGVyKDApCit7Cit9CisKK1Jlc291cmNlUmVzcG9uc2VCYXNlOjpSZXNvdXJjZVJlc3Bv
bnNlQmFzZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGxvbmcgbG9u
ZyBleHBlY3RlZExlbmd0aCwgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmdOYW1lLCBjb25zdCBT
dHJpbmcmIGZpbGVuYW1lKQorICAgIDogbV91cmwodXJsKQorICAgICwgbV9taW1lVHlwZShtaW1l
VHlwZSkKKyAgICAsIG1fZXhwZWN0ZWRDb250ZW50TGVuZ3RoKGV4cGVjdGVkTGVuZ3RoKQorICAg
ICwgbV90ZXh0RW5jb2RpbmdOYW1lKHRleHRFbmNvZGluZ05hbWUpCisgICAgLCBtX3N1Z2dlc3Rl
ZEZpbGVuYW1lKGZpbGVuYW1lKQorICAgICwgbV9odHRwU3RhdHVzQ29kZSgwKQorICAgICwgbV9p
c051bGwoZmFsc2UpCisgICAgLCBtX2hhdmVQYXJzZWRDYWNoZUNvbnRyb2xIZWFkZXIoZmFsc2Up
CisgICAgLCBtX2hhdmVQYXJzZWRBZ2VIZWFkZXIoMCkKKyAgICAsIG1faGF2ZVBhcnNlZERhdGVI
ZWFkZXIoMCkKKyAgICAsIG1faGF2ZVBhcnNlZEV4cGlyZXNIZWFkZXIoMCkKKyAgICAsIG1faGF2
ZVBhcnNlZExhc3RNb2RpZmllZEhlYWRlcigwKQoreworfQorCiBhdXRvX3B0cjxSZXNvdXJjZVJl
c3BvbnNlPiBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6YWRvcHQoYXV0b19wdHI8Q3Jvc3NUaHJlYWRS
ZXNvdXJjZVJlc3BvbnNlRGF0YT4gZGF0YSkKIHsKICAgICBhdXRvX3B0cjxSZXNvdXJjZVJlc3Bv
bnNlPiByZXNwb25zZShuZXcgUmVzb3VyY2VSZXNwb25zZSgpKTsKQEAgLTQ5LDEyICs4MCw2IEBA
IGF1dG9fcHRyPFJlc291cmNlUmVzcG9uc2U+IFJlc291cmNlUmVzcG8KIAogICAgIHJlc3BvbnNl
LT5sYXp5SW5pdCgpOwogICAgIHJlc3BvbnNlLT5tX2h0dHBIZWFkZXJGaWVsZHMuYWRvcHQoc3Rk
OjphdXRvX3B0cjxDcm9zc1RocmVhZEhUVFBIZWFkZXJNYXBEYXRhPihkYXRhLT5tX2h0dHBIZWFk
ZXJzLnJlbGVhc2UoKSkpOwotCi0gICAgcmVzcG9uc2UtPnNldEV4cGlyYXRpb25EYXRlKGRhdGEt
Pm1fZXhwaXJhdGlvbkRhdGUpOwotICAgIHJlc3BvbnNlLT5zZXRMYXN0TW9kaWZpZWREYXRlKGRh
dGEtPm1fbGFzdE1vZGlmaWVkRGF0ZSk7Ci0gICAgcmVzcG9uc2UtPm1faGF2ZVBhcnNlZENhY2hl
Q29udHJvbCA9IGRhdGEtPm1faGF2ZVBhcnNlZENhY2hlQ29udHJvbDsKLSAgICByZXNwb25zZS0+
bV9jYWNoZUNvbnRyb2xDb250YWluc011c3RSZXZhbGlkYXRlID0gZGF0YS0+bV9jYWNoZUNvbnRy
b2xDb250YWluc011c3RSZXZhbGlkYXRlOwotICAgIHJlc3BvbnNlLT5tX2NhY2hlQ29udHJvbENv
bnRhaW5zTm9DYWNoZSA9IGRhdGEtPm1fY2FjaGVDb250cm9sQ29udGFpbnNOb0NhY2hlOwogICAg
IHJldHVybiByZXNwb25zZTsKIH0KIApAQCAtNjksMTEgKzk0LDYgQEAgYXV0b19wdHI8Q3Jvc3NU
aHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YQogICAgIGRhdGEtPm1faHR0cFN0YXR1c0NvZGUgPSBo
dHRwU3RhdHVzQ29kZSgpOwogICAgIGRhdGEtPm1faHR0cFN0YXR1c1RleHQgPSBodHRwU3RhdHVz
VGV4dCgpLmNvcHkoKTsKICAgICBkYXRhLT5tX2h0dHBIZWFkZXJzLmFkb3B0KGh0dHBIZWFkZXJG
aWVsZHMoKS5jb3B5RGF0YSgpKTsKLSAgICBkYXRhLT5tX2V4cGlyYXRpb25EYXRlID0gZXhwaXJh
dGlvbkRhdGUoKTsKLSAgICBkYXRhLT5tX2xhc3RNb2RpZmllZERhdGUgPSBsYXN0TW9kaWZpZWRE
YXRlKCk7Ci0gICAgZGF0YS0+bV9oYXZlUGFyc2VkQ2FjaGVDb250cm9sID0gbV9oYXZlUGFyc2Vk
Q2FjaGVDb250cm9sOwotICAgIGRhdGEtPm1fY2FjaGVDb250cm9sQ29udGFpbnNNdXN0UmV2YWxp
ZGF0ZSA9IG1fY2FjaGVDb250cm9sQ29udGFpbnNNdXN0UmV2YWxpZGF0ZTsKLSAgICBkYXRhLT5t
X2NhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZSA9IG1fY2FjaGVDb250cm9sQ29udGFpbnNOb0Nh
Y2hlOwogICAgIHJldHVybiBkYXRhOwogfQogCkBAIC0yMDAsOSArMjIwLDIzIEBAIFN0cmluZyBS
ZXNvdXJjZVJlc3BvbnNlQmFzZTo6aHR0cEhlYWRlckYKIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJh
c2U6OnNldEhUVFBIZWFkZXJGaWVsZChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgdmFsdWUpCiB7CiAgICAgbGF6eUluaXQoKTsKKyAgICAKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKEF0b21pY1N0cmluZywgYWdlSGVhZGVyLCAoImFnZSIpKTsKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKEF0b21pY1N0cmluZywgY2FjaGVDb250cm9sSGVhZGVyLCAoImNhY2hlLWNvbnRy
b2wiKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGRhdGVIZWFkZXIs
ICgiZGF0ZSIpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgZXhwaXJl
c0hlYWRlciwgKCJleHBpcmVzIikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3Ry
aW5nLCBsYXN0TW9kaWZpZWRIZWFkZXIsICgibGFzdC1tb2RpZmllZCIpKTsKKyAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UobmFtZSwgYWdlSGVhZGVyKSkKKyAgICAgICAgbV9oYXZlUGFyc2VkQWdl
SGVhZGVyID0gZmFsc2U7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgY2Fj
aGVDb250cm9sSGVhZGVyKSkKKyAgICAgICAgbV9oYXZlUGFyc2VkQ2FjaGVDb250cm9sSGVhZGVy
ID0gZmFsc2U7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgZGF0ZUhlYWRl
cikpCisgICAgICAgIG1faGF2ZVBhcnNlZERhdGVIZWFkZXIgPSBmYWxzZTsKKyAgICBlbHNlIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCBleHBpcmVzSGVhZGVyKSkKKyAgICAgICAgbV9oYXZl
UGFyc2VkRXhwaXJlc0hlYWRlciA9IGZhbHNlOworICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKG5hbWUsIGxhc3RNb2RpZmllZEhlYWRlcikpCisgICAgICAgIG1faGF2ZVBhcnNlZExhc3RN
b2RpZmllZEhlYWRlciA9IGZhbHNlOwogCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJjYWNoZS1jb250cm9sIikpCi0gICAgICAgIG1faGF2ZVBhcnNlZENhY2hlQ29udHJvbCA9IGZh
bHNlOwogICAgIG1faHR0cEhlYWRlckZpZWxkcy5zZXQobmFtZSwgdmFsdWUpOwogfQogCkBAIC0y
MTUsMTUgKzI0OSwxNyBAQCBjb25zdCBIVFRQSGVhZGVyTWFwJiBSZXNvdXJjZVJlc3BvbnNlQmFz
CiAKIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnBhcnNlQ2FjaGVDb250cm9sRGlyZWN0aXZl
cygpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFtX2hhdmVQYXJzZWRDYWNoZUNvbnRyb2wpOworICAg
IEFTU0VSVCghbV9oYXZlUGFyc2VkQ2FjaGVDb250cm9sSGVhZGVyKTsKIAogICAgIGxhenlJbml0
KCk7CiAKLSAgICBtX2hhdmVQYXJzZWRDYWNoZUNvbnRyb2wgPSB0cnVlOworICAgIG1faGF2ZVBh
cnNlZENhY2hlQ29udHJvbEhlYWRlciA9IHRydWU7CiAgICAgbV9jYWNoZUNvbnRyb2xDb250YWlu
c011c3RSZXZhbGlkYXRlID0gZmFsc2U7CiAgICAgbV9jYWNoZUNvbnRyb2xDb250YWluc05vQ2Fj
aGUgPSBmYWxzZTsKKyAgICBtX2NhY2hlQ29udHJvbE1heEFnZSA9IG51bWVyaWNfbGltaXRzPGRv
dWJsZT46OnF1aWV0X05hTigpOwogCi0gICAgU3RyaW5nIGNhY2hlQ29udHJvbFZhbHVlID0gaHR0
cEhlYWRlckZpZWxkKCJjYWNoZS1jb250cm9sIik7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChj
b25zdCBBdG9taWNTdHJpbmcsIGNhY2hlQ29udHJvbFN0cmluZywgKCJjYWNoZS1jb250cm9sIikp
OworICAgIFN0cmluZyBjYWNoZUNvbnRyb2xWYWx1ZSA9IGh0dHBIZWFkZXJGaWVsZChjYWNoZUNv
bnRyb2xTdHJpbmcpOwogICAgIGlmIChjYWNoZUNvbnRyb2xWYWx1ZS5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtMjM0LDUyICsyNzAsMTI0IEBAIHZvaWQgUmVzb3VyY2VSZXNwb25z
ZUJhc2U6OnBhcnNlQ2FjaGVDb24KIAogICAgIHNpemVfdCBkaXJlY3RpdmVzU2l6ZSA9IGRpcmVj
dGl2ZXMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGlyZWN0aXZlc1NpemU7
ICsraSkgewotICAgICAgICAvLyBUaGUgbm8tY2FjaGUgZGlyZWN0aXZlIGNhbiBoYXZlIGEgdmFs
dWUsIHdoaWNoIGlzIGlnbm9yZWQgaGVyZS4gVGhpcyBtZWFucyB0aGF0IGluIHZlcnkgcmFyZSBj
YXNlcywgcmVzcG9uc2VzIHRoYXQgY291bGQgYmUgdGFrZW4gZnJvbSBjYWNoZSB3b24ndCBiZS4K
LSAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGRpcmVjdGl2ZXNbaV0uZmlyc3QsICJuby1j
YWNoZSIpKQorICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywg
bm9DYWNoZVN0cmluZywgKCJuby1jYWNoZSIpKTsKKyAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBBdG9taWNTdHJpbmcsIG11c3RSZXZhbGlkYXRlU3RyaW5nLCAoIm11c3QtcmV2YWxp
ZGF0ZSIpKTsKKyAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcs
IG1heEFnZVN0cmluZywgKCJtYXgtYWdlIikpOworICAgICAgICAvLyBJZiBuby1jYWNoZSBoZWFk
ZXIgaGFzIHZhbHVlLCB0aGUgaGVhZGVyIHNob3VsZCBiZSBpZ25vcmVkIGFzIGl0IHN1cHBvc2Vk
IHRvIGFwcGx5IHRvIHRoZSBuYW1lZCBmaWVsZCBvbmx5CisgICAgICAgIC8vIFRoaXMgaXMgbWVh
bmluZ2xlc3MgZm9yIGJyb3dzZXIgbGV2ZWwgY2FjaGUuCisgICAgICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShkaXJlY3RpdmVzW2ldLmZpcnN0LCBub0NhY2hlU3RyaW5nKSAmJiBkaXJlY3RpdmVz
W2ldLnNlY29uZC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX2NhY2hlQ29udHJvbENvbnRhaW5z
Tm9DYWNoZSA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGRpcmVj
dGl2ZXNbaV0uZmlyc3QsICJtdXN0LXJldmFsaWRhdGUiKSkKKyAgICAgICAgZWxzZSBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UoZGlyZWN0aXZlc1tpXS5maXJzdCwgbXVzdFJldmFsaWRhdGVTdHJpbmcp
KQogICAgICAgICAgICAgbV9jYWNoZUNvbnRyb2xDb250YWluc011c3RSZXZhbGlkYXRlID0gdHJ1
ZTsKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZGlyZWN0aXZlc1tpXS5maXJz
dCwgbWF4QWdlU3RyaW5nKSkgeworICAgICAgICAgICAgYm9vbCBvazsKKyAgICAgICAgICAgIGRv
dWJsZSBtYXhBZ2UgPSBkaXJlY3RpdmVzW2ldLnNlY29uZC50b0RvdWJsZSgmb2spOworICAgICAg
ICAgICAgaWYgKG9rKQorICAgICAgICAgICAgICAgIG1fY2FjaGVDb250cm9sTWF4QWdlID0gbWF4
QWdlOworICAgICAgICB9CiAgICAgfQogfQorICAgIAorYm9vbCBSZXNvdXJjZVJlc3BvbnNlQmFz
ZTo6Y2FjaGVDb250cm9sQ29udGFpbnNOb0NhY2hlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faGF2
ZVBhcnNlZENhY2hlQ29udHJvbEhlYWRlcikKKyAgICAgICAgcGFyc2VDYWNoZUNvbnRyb2xEaXJl
Y3RpdmVzKCk7CisgICAgcmV0dXJuIG1fY2FjaGVDb250cm9sQ29udGFpbnNOb0NhY2hlOworfQog
Ci1ib29sIFJlc291cmNlUmVzcG9uc2VCYXNlOjppc0F0dGFjaG1lbnQoKSBjb25zdAorYm9vbCBS
ZXNvdXJjZVJlc3BvbnNlQmFzZTo6Y2FjaGVDb250cm9sQ29udGFpbnNNdXN0UmV2YWxpZGF0ZSgp
IGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBpZiAoIW1faGF2ZVBhcnNlZENhY2hlQ29u
dHJvbEhlYWRlcikKKyAgICAgICAgcGFyc2VDYWNoZUNvbnRyb2xEaXJlY3RpdmVzKCk7CisgICAg
cmV0dXJuIG1fY2FjaGVDb250cm9sQ29udGFpbnNNdXN0UmV2YWxpZGF0ZTsKK30KIAotICAgIFN0
cmluZyB2YWx1ZSA9IG1faHR0cEhlYWRlckZpZWxkcy5nZXQoIkNvbnRlbnQtRGlzcG9zaXRpb24i
KTsKLSAgICBpbnQgbG9jID0gdmFsdWUuZmluZCgnOycpOwotICAgIGlmIChsb2MgIT0gLTEpCi0g
ICAgICAgIHZhbHVlID0gdmFsdWUubGVmdChsb2MpOwotICAgIHZhbHVlID0gdmFsdWUuc3RyaXBX
aGl0ZVNwYWNlKCk7Ci0gICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLCAiYXR0YWNo
bWVudCIpOworZG91YmxlIFJlc291cmNlUmVzcG9uc2VCYXNlOjpjYWNoZUNvbnRyb2xNYXhBZ2Uo
KSBjb25zdAoreworICAgIGlmICghbV9oYXZlUGFyc2VkQ2FjaGVDb250cm9sSGVhZGVyKQorICAg
ICAgICBwYXJzZUNhY2hlQ29udHJvbERpcmVjdGl2ZXMoKTsKKyAgICByZXR1cm4gbV9jYWNoZUNv
bnRyb2xNYXhBZ2U7CiB9CiAKLXZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNldEV4cGlyYXRp
b25EYXRlKHRpbWVfdCBleHBpcmF0aW9uRGF0ZSkKK2RvdWJsZSBwYXJzZURhdGVWYWx1ZUluSGVh
ZGVyKGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlcnMsIGNvbnN0IEF0b21pY1N0cmluZyYgaGVh
ZGVyTmFtZSkKK3sKKyAgICBTdHJpbmcgaGVhZGVyVmFsdWUgPSBoZWFkZXJzLmdldChoZWFkZXJO
YW1lKTsKKyAgICBpZiAoaGVhZGVyVmFsdWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gc3Rk
OjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsgCisgICAgLy8gVGhpcyBoYW5k
bGVzIGFsbCBkYXRlIGZvcm1hdHMgcmVxdWlyZWQgYnkgSFRUUDoKKyAgICAvLyBTdW4sIDA2IE5v
diAxOTk0IDA4OjQ5OjM3IEdNVCAgOyBSRkMgODIyLCB1cGRhdGVkIGJ5IFJGQyAxMTIzCisgICAg
Ly8gU3VuZGF5LCAwNi1Ob3YtOTQgMDg6NDk6MzcgR01UIDsgUkZDIDg1MCwgb2Jzb2xldGVkIGJ5
IFJGQyAxMDM2CisgICAgLy8gU3VuIE5vdiAgNiAwODo0OTozNyAxOTk0ICAgICAgIDsgQU5TSSBD
J3MgYXNjdGltZSgpIGZvcm1hdAorICAgIGRvdWJsZSBkYXRlID0gSlNDOjpwYXJzZURhdGUoaGVh
ZGVyVmFsdWUpOworICAgIGlmICghaXNmaW5pdGUoZGF0ZSkpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgIHJldHVybiBkYXRlOwor
fQorCitkb3VibGUgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmRhdGUoKSBjb25zdAogewogICAgIGxh
enlJbml0KCk7CiAKLSAgICBtX2V4cGlyYXRpb25EYXRlID0gZXhwaXJhdGlvbkRhdGU7CisgICAg
aWYgKCFtX2hhdmVQYXJzZWREYXRlSGVhZGVyKSB7CisgICAgICAgIERFRklORV9TVEFUSUNfTE9D
QUwoY29uc3QgQXRvbWljU3RyaW5nLCBoZWFkZXJOYW1lLCAoImRhdGUiKSk7CisgICAgICAgIG1f
ZGF0ZSA9IHBhcnNlRGF0ZVZhbHVlSW5IZWFkZXIobV9odHRwSGVhZGVyRmllbGRzLCBoZWFkZXJO
YW1lKTsKKyAgICAgICAgbV9oYXZlUGFyc2VkRGF0ZUhlYWRlciA9IHRydWU7CisgICAgfQorICAg
IHJldHVybiBtX2RhdGU7CiB9CiAKLXRpbWVfdCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6ZXhwaXJh
dGlvbkRhdGUoKSBjb25zdAorZG91YmxlIFJlc291cmNlUmVzcG9uc2VCYXNlOjphZ2UoKSBjb25z
dAogewogICAgIGxhenlJbml0KCk7Ci0KLSAgICByZXR1cm4gbV9leHBpcmF0aW9uRGF0ZTsgCisg
ICAgCisgICAgaWYgKCFtX2hhdmVQYXJzZWRBZ2VIZWFkZXIpIHsKKyAgICAgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGhlYWRlck5hbWUsICgiYWdlIikpOworICAg
ICAgICBTdHJpbmcgaGVhZGVyVmFsdWUgPSBtX2h0dHBIZWFkZXJGaWVsZHMuZ2V0KGhlYWRlck5h
bWUpOworICAgICAgICBib29sIG9rOworICAgICAgICBtX2FnZSA9IGhlYWRlclZhbHVlLnRvRG91
YmxlKCZvayk7CisgICAgICAgIGlmICghb2spCisgICAgICAgICAgICBtX2FnZSA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgICAgIG1faGF2ZVBhcnNlZEFn
ZUhlYWRlciA9IHRydWU7CisgICAgfQorICAgIHJldHVybiBtX2FnZTsKIH0KIAotdm9pZCBSZXNv
dXJjZVJlc3BvbnNlQmFzZTo6c2V0TGFzdE1vZGlmaWVkRGF0ZSh0aW1lX3QgbGFzdE1vZGlmaWVk
RGF0ZSkgCitkb3VibGUgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmV4cGlyZXMoKSBjb25zdAogewog
ICAgIGxhenlJbml0KCk7CiAKLSAgICBtX2xhc3RNb2RpZmllZERhdGUgPSBsYXN0TW9kaWZpZWRE
YXRlOworICAgIGlmICghbV9oYXZlUGFyc2VkRXhwaXJlc0hlYWRlcikgeworICAgICAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgaGVhZGVyTmFtZSwgKCJleHBpcmVz
IikpOworICAgICAgICBtX2V4cGlyZXMgPSBwYXJzZURhdGVWYWx1ZUluSGVhZGVyKG1faHR0cEhl
YWRlckZpZWxkcywgaGVhZGVyTmFtZSk7CisgICAgICAgIG1faGF2ZVBhcnNlZEV4cGlyZXNIZWFk
ZXIgPSB0cnVlOworICAgIH0KKyAgICByZXR1cm4gbV9leHBpcmVzOworfQorCitkb3VibGUgUmVz
b3VyY2VSZXNwb25zZUJhc2U6Omxhc3RNb2RpZmllZCgpIGNvbnN0Cit7CisgICAgbGF6eUluaXQo
KTsKKyAgICAKKyAgICBpZiAoIW1faGF2ZVBhcnNlZExhc3RNb2RpZmllZEhlYWRlcikgeworICAg
ICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgaGVhZGVyTmFtZSwg
KCJsYXN0LW1vZGlmaWVkIikpOworICAgICAgICBtX2xhc3RNb2RpZmllZCA9IHBhcnNlRGF0ZVZh
bHVlSW5IZWFkZXIobV9odHRwSGVhZGVyRmllbGRzLCBoZWFkZXJOYW1lKTsKKyAgICAgICAgbV9o
YXZlUGFyc2VkTGFzdE1vZGlmaWVkSGVhZGVyID0gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIG1f
bGFzdE1vZGlmaWVkOwogfQogCi10aW1lX3QgUmVzb3VyY2VSZXNwb25zZUJhc2U6Omxhc3RNb2Rp
ZmllZERhdGUoKSBjb25zdAorYm9vbCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6aXNBdHRhY2htZW50
KCkgY29uc3QKIHsKICAgICBsYXp5SW5pdCgpOwogCi0gICAgcmV0dXJuIG1fbGFzdE1vZGlmaWVk
RGF0ZTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgaGVhZGVy
TmFtZSwgKCJjb250ZW50LWRpc3Bvc2l0aW9uIikpOworICAgIFN0cmluZyB2YWx1ZSA9IG1faHR0
cEhlYWRlckZpZWxkcy5nZXQoaGVhZGVyTmFtZSk7CisgICAgaW50IGxvYyA9IHZhbHVlLmZpbmQo
JzsnKTsKKyAgICBpZiAobG9jICE9IC0xKQorICAgICAgICB2YWx1ZSA9IHZhbHVlLmxlZnQobG9j
KTsKKyAgICB2YWx1ZSA9IHZhbHVlLnN0cmlwV2hpdGVTcGFjZSgpOworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBhdHRhY2htZW50U3RyaW5nLCAoImF0dGFjaG1l
bnQiKSk7CisgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLCBhdHRhY2htZW50U3Ry
aW5nKTsKIH0KIAogdm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6bGF6eUluaXQoKSBjb25zdApA
QCAtMzA3LDggKzQxNSw2IEBAIGJvb2wgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmNvbXBhcmUoY29u
c3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChhLmh0dHBIZWFkZXJGaWVsZHMoKSAh
PSBiLmh0dHBIZWFkZXJGaWVsZHMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChh
LmV4cGlyYXRpb25EYXRlKCkgIT0gYi5leHBpcmF0aW9uRGF0ZSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgcmV0dXJuIFJlc291cmNlUmVzcG9uc2U6OnBsYXRmb3JtQ29tcGFyZShhLCBi
KTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VC
YXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVz
cG9uc2VCYXNlLmgJKHJldmlzaW9uIDQ0MDU3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlUmVzcG9uc2VCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDI0ICs3OCwxNSBA
QCBwdWJsaWM6CiAKICAgICBib29sIGlzQXR0YWNobWVudCgpIGNvbnN0OwogCi0gICAgdm9pZCBz
ZXRFeHBpcmF0aW9uRGF0ZSh0aW1lX3QpOwotICAgIHRpbWVfdCBleHBpcmF0aW9uRGF0ZSgpIGNv
bnN0OwotCi0gICAgdm9pZCBzZXRMYXN0TW9kaWZpZWREYXRlKHRpbWVfdCk7Ci0gICAgdGltZV90
IGxhc3RNb2RpZmllZERhdGUoKSBjb25zdDsKLQotICAgIGJvb2wgY2FjaGVDb250cm9sQ29udGFp
bnNOb0NhY2hlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghbV9oYXZlUGFyc2VkQ2FjaGVD
b250cm9sKQotICAgICAgICAgICAgcGFyc2VDYWNoZUNvbnRyb2xEaXJlY3RpdmVzKCk7Ci0gICAg
ICAgIHJldHVybiBtX2NhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZTsKLSAgICB9Ci0gICAgYm9v
bCBjYWNoZUNvbnRyb2xDb250YWluc011c3RSZXZhbGlkYXRlKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIGlmICghbV9oYXZlUGFyc2VkQ2FjaGVDb250cm9sKQotICAgICAgICAgICAgcGFyc2VDYWNo
ZUNvbnRyb2xEaXJlY3RpdmVzKCk7Ci0gICAgICAgIHJldHVybiBtX2NhY2hlQ29udHJvbENvbnRh
aW5zTXVzdFJldmFsaWRhdGU7Ci0gICAgfQorICAgIGJvb2wgY2FjaGVDb250cm9sQ29udGFpbnNO
b0NhY2hlKCkgY29uc3Q7CisgICAgYm9vbCBjYWNoZUNvbnRyb2xDb250YWluc011c3RSZXZhbGlk
YXRlKCkgY29uc3Q7CisgICAgCisgICAgLy8gTmFOIG1lYW5zIHRoYXQgdGhlIGhlYWRlciB3YXMg
bm90IHByZXNlbnQgb3Igd2FzIGludmFsaWQKKyAgICBkb3VibGUgY2FjaGVDb250cm9sTWF4QWdl
KCkgY29uc3Q7CisgICAgZG91YmxlIGRhdGUoKSBjb25zdDsKKyAgICBkb3VibGUgYWdlKCkgY29u
c3Q7CisgICAgZG91YmxlIGV4cGlyZXMoKSBjb25zdDsKKyAgICBkb3VibGUgbGFzdE1vZGlmaWVk
KCkgY29uc3Q7CiAKICAgICAvLyBUaGUgUmVzb3VyY2VSZXNwb25zZSBzdWJjbGFzcyBtYXkgInNo
YWRvdyIgdGhpcyBtZXRob2QgdG8gcHJvdmlkZSBwbGF0Zm9ybS1zcGVjaWZpYyBtZW1vcnkgdXNh
Z2UgaW5mb3JtYXRpb24KICAgICB1bnNpZ25lZCBtZW1vcnlVc2FnZSgpIGNvbnN0CkBAIC0xMDcs
MjkgKzk4LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGNvbXBhcmUoY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgYSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgYik7CiAKIHByb3RlY3RlZDoK
LSAgICBSZXNvdXJjZVJlc3BvbnNlQmFzZSgpICAKLSAgICAgICAgOiBtX2V4cGVjdGVkQ29udGVu
dExlbmd0aCgwKQotICAgICAgICAsIG1faHR0cFN0YXR1c0NvZGUoMCkKLSAgICAgICAgLCBtX2V4
cGlyYXRpb25EYXRlKDApCi0gICAgICAgICwgbV9sYXN0TW9kaWZpZWREYXRlKDApCi0gICAgICAg
ICwgbV9pc051bGwodHJ1ZSkKLSAgICAgICAgLCBtX2hhdmVQYXJzZWRDYWNoZUNvbnRyb2woZmFs
c2UpCi0gICAgewotICAgIH0KLQotICAgIFJlc291cmNlUmVzcG9uc2VCYXNlKGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgbG9uZyBsb25nIGV4cGVjdGVkTGVuZ3RoLCBj
b25zdCBTdHJpbmcmIHRleHRFbmNvZGluZ05hbWUsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCi0g
ICAgICAgIDogbV91cmwodXJsKQotICAgICAgICAsIG1fbWltZVR5cGUobWltZVR5cGUpCi0gICAg
ICAgICwgbV9leHBlY3RlZENvbnRlbnRMZW5ndGgoZXhwZWN0ZWRMZW5ndGgpCi0gICAgICAgICwg
bV90ZXh0RW5jb2RpbmdOYW1lKHRleHRFbmNvZGluZ05hbWUpCi0gICAgICAgICwgbV9zdWdnZXN0
ZWRGaWxlbmFtZShmaWxlbmFtZSkKLSAgICAgICAgLCBtX2h0dHBTdGF0dXNDb2RlKDApCi0gICAg
ICAgICwgbV9leHBpcmF0aW9uRGF0ZSgwKQotICAgICAgICAsIG1fbGFzdE1vZGlmaWVkRGF0ZSgw
KQotICAgICAgICAsIG1faXNOdWxsKGZhbHNlKQotICAgICAgICAsIG1faGF2ZVBhcnNlZENhY2hl
Q29udHJvbChmYWxzZSkKLSAgICB7Ci0gICAgfQorICAgIFJlc291cmNlUmVzcG9uc2VCYXNlKCk7
CisgICAgUmVzb3VyY2VSZXNwb25zZUJhc2UoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBsb25nIGxvbmcgZXhwZWN0ZWRMZW5ndGgsIGNvbnN0IFN0cmluZyYgdGV4dEVu
Y29kaW5nTmFtZSwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSk7CiAKICAgICB2b2lkIGxhenlJbml0
KCkgY29uc3Q7CiAKQEAgLTE0NywxNiArMTE3LDI3IEBAIHByb3RlY3RlZDoKICAgICBpbnQgbV9o
dHRwU3RhdHVzQ29kZTsKICAgICBTdHJpbmcgbV9odHRwU3RhdHVzVGV4dDsKICAgICBIVFRQSGVh
ZGVyTWFwIG1faHR0cEhlYWRlckZpZWxkczsKLSAgICB0aW1lX3QgbV9leHBpcmF0aW9uRGF0ZTsK
LSAgICB0aW1lX3QgbV9sYXN0TW9kaWZpZWREYXRlOwotICAgIGJvb2wgbV9pc051bGwgOiAxOwog
CisgICAgYm9vbCBtX2lzTnVsbCA6IDE7CisgICAgCiBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VD
YWNoZUNvbnRyb2xEaXJlY3RpdmVzKCkgY29uc3Q7CisgICAgdm9pZCBwYXJzZUNhY2hlRXhwaXJh
dGlvbkhlYWRlcnMoKSBjb25zdDsKKworICAgIG11dGFibGUgYm9vbCBtX2hhdmVQYXJzZWRDYWNo
ZUNvbnRyb2xIZWFkZXIgOiAxOworICAgIG11dGFibGUgYm9vbCBtX2hhdmVQYXJzZWRBZ2VIZWFk
ZXIgOiAxOworICAgIG11dGFibGUgYm9vbCBtX2hhdmVQYXJzZWREYXRlSGVhZGVyIDogMTsKKyAg
ICBtdXRhYmxlIGJvb2wgbV9oYXZlUGFyc2VkRXhwaXJlc0hlYWRlciA6IDE7CisgICAgbXV0YWJs
ZSBib29sIG1faGF2ZVBhcnNlZExhc3RNb2RpZmllZEhlYWRlciA6IDE7CiAKLSAgICBtdXRhYmxl
IGJvb2wgbV9oYXZlUGFyc2VkQ2FjaGVDb250cm9sIDogMTsKLSAgICBtdXRhYmxlIGJvb2wgbV9j
YWNoZUNvbnRyb2xDb250YWluc011c3RSZXZhbGlkYXRlIDogMTsKICAgICBtdXRhYmxlIGJvb2wg
bV9jYWNoZUNvbnRyb2xDb250YWluc05vQ2FjaGUgOiAxOworICAgIG11dGFibGUgYm9vbCBtX2Nh
Y2hlQ29udHJvbENvbnRhaW5zTXVzdFJldmFsaWRhdGUgOiAxOworICAgIG11dGFibGUgZG91Ymxl
IG1fY2FjaGVDb250cm9sTWF4QWdlOworCisgICAgbXV0YWJsZSBkb3VibGUgbV9hZ2U7CisgICAg
bXV0YWJsZSBkb3VibGUgbV9kYXRlOworICAgIG11dGFibGUgZG91YmxlIG1fZXhwaXJlczsKKyAg
ICBtdXRhYmxlIGRvdWJsZSBtX2xhc3RNb2RpZmllZDsKIH07CiAKIGlubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgYSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
YikgeyByZXR1cm4gUmVzb3VyY2VSZXNwb25zZUJhc2U6OmNvbXBhcmUoYSwgYik7IH0KQEAgLTE3
MSwxMSArMTUyLDYgQEAgc3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGEgewog
ICAgIGludCBtX2h0dHBTdGF0dXNDb2RlOwogICAgIFN0cmluZyBtX2h0dHBTdGF0dXNUZXh0Owog
ICAgIE93blB0cjxDcm9zc1RocmVhZEhUVFBIZWFkZXJNYXBEYXRhPiBtX2h0dHBIZWFkZXJzOwot
ICAgIHRpbWVfdCBtX2V4cGlyYXRpb25EYXRlOwotICAgIHRpbWVfdCBtX2xhc3RNb2RpZmllZERh
dGU7Ci0gICAgYm9vbCBtX2hhdmVQYXJzZWRDYWNoZUNvbnRyb2wgOiAxOwotICAgIGJvb2wgbV9j
YWNoZUNvbnRyb2xDb250YWluc011c3RSZXZhbGlkYXRlIDogMTsKLSAgICBib29sIG1fY2FjaGVD
b250cm9sQ29udGFpbnNOb0NhY2hlIDogMTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXNwb25zZU1hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVz
cG9uc2VNYWMubW0JKHJldmlzaW9uIDQ0MDU3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L21hYy9SZXNvdXJjZVJlc3BvbnNlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03NCwxMiArNzQs
NiBAQCB2b2lkIFJlc291cmNlUmVzcG9uc2U6OnBsYXRmb3JtTGF6eUluaXQoCiAgICAgbV90ZXh0
RW5jb2RpbmdOYW1lID0gW21fbnNSZXNwb25zZS5nZXQoKSB0ZXh0RW5jb2RpbmdOYW1lXTsKICAg
ICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gW21fbnNSZXNwb25zZS5nZXQoKSBzdWdnZXN0ZWRGaWxl
bmFtZV07CiAgICAgCi0gICAgY29uc3QgdGltZV90IG1heFRpbWUgPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHRpbWVfdD46Om1heCgpOwotICAgIAotICAgIE5TVGltZUludGVydmFsIGV4cGlyYXRpb24g
PSBbbV9uc1Jlc3BvbnNlLmdldCgpIF9jYWxjdWxhdGVkRXhwaXJhdGlvbl07Ci0gICAgZXhwaXJh
dGlvbiArPSBrQ0ZBYnNvbHV0ZVRpbWVJbnRlcnZhbFNpbmNlMTk3MDsKLSAgICBtX2V4cGlyYXRp
b25EYXRlID0gZXhwaXJhdGlvbiA+IG1heFRpbWUgPyBtYXhUaW1lIDogc3RhdGljX2Nhc3Q8dGlt
ZV90PihleHBpcmF0aW9uKTsKLSAgICAKICAgICBpZiAoW21fbnNSZXNwb25zZS5nZXQoKSBpc0tp
bmRPZkNsYXNzOltOU0hUVFBVUkxSZXNwb25zZSBjbGFzc11dKSB7CiAgICAgICAgIE5TSFRUUFVS
TFJlc3BvbnNlICpodHRwUmVzcG9uc2UgPSAoTlNIVFRQVVJMUmVzcG9uc2UgKiltX25zUmVzcG9u
c2UuZ2V0KCk7CiAgICAgICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30930</attachid>
            <date>2009-06-03 16:06:13 -0700</date>
            <delta_ts>2009-06-04 16:25:00 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>cache-expiration-2.patch</filename>
            <type>text/plain</type>
            <size>42520</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ0Mzk2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMDYtMDMgIEFudHRpIEtv
aXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorICAgICAgICAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMTI4CisgICAgICAgIFNhZmFyaSBub3Qgb2JleWluZyBjYWNoZSBoZWFkZXIK
KyAgICAgICAgCisgICAgICAgIEV4cG9ydCBKU0M6OnBhcnNlRGF0ZSgpCisKKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKwogMjAwOS0wNi0wMiAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDQ0Mzk2KQorKysgSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzUsNiArMjc1LDcgQEAgX19aTjNK
U0M5U3RydWN0dXJlNDBhZGRQcm9wZXJ0eVRyYW5zaXRpbwogX19aTjNKU0M5U3RydWN0dXJlQzFF
TlNfN0pTVmFsdWVFUktOU184VHlwZUluZm9FCiBfX1pOM0pTQzlTdHJ1Y3R1cmVEMUV2CiBfX1pO
M0pTQzljb25zdHJ1Y3RFUE5TXzlFeGVjU3RhdGVFTlNfN0pTVmFsdWVFTlNfMTNDb25zdHJ1Y3RU
eXBlRVJLTlNfMTNDb25zdHJ1Y3REYXRhRVJLTlNfN0FyZ0xpc3RFCitfX1pOM0pTQzlwYXJzZURh
dGVFUktOU183VVN0cmluZ0UKIF9fWk4zSlNDZXFFUktOU183VVN0cmluZ0VQS2MKIF9fWk4zSlND
Z3RFUktOU183VVN0cmluZ0VTMl8KIF9fWk4zSlNDbHRFUktOU183VVN0cmluZ0VTMl8KQEAgLTMw
Niw2ICszMDcsNyBAQCBfX1pOM1dURjIxUmVmQ291bnRlZExlYWtDb3VudGVyOWluY3JlbWVuCiBf
X1pOM1dURjIxUmVmQ291bnRlZExlYWtDb3VudGVyQzFFUEtjCiBfX1pOM1dURjIxUmVmQ291bnRl
ZExlYWtDb3VudGVyRDFFdgogX19aTjNXVEYyM3dhaXRGb3JUaHJlYWRDb21wbGV0aW9uRWpQUHYK
K19fWk4zV1RGMjN3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbkVqUFB2CiBfX1pOM1dURjI3cmVsZWFz
ZUZhc3RNYWxsb2NGcmVlTWVtb3J5RXYKIF9fWk4zV1RGMjhzZXRNYWluVGhyZWFkQ2FsbGJhY2tz
UGF1c2VkRWIKIF9fWk4zV1RGMzZsb2NrQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXhF
dgpAQCAtMzc3LDQgKzM3OSwzIEBAIF9fWlRWTjNKU0M4SlNPYmplY3RFCiBfX1pUVk4zSlNDOEpT
U3RyaW5nRQogX2pzY29yZV9mYXN0bWFsbG9jX2ludHJvc3BlY3Rpb24KIF9rSlNDbGFzc0RlZmlu
aXRpb25FbXB0eQotX19aTjNXVEYyM3dhaXRGb3JUaHJlYWRDb21wbGV0aW9uRWpQUHYKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gNDQzOTYpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcs
NyArMjE3LDcgQEAKIAkJQkMxOEMzRjQwRTE2RjVDRDAwQjM0NDYwIC8qIENvbXBsZXRpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1QkIyQkM1MDMw
Rjc3MjEwMUZDRkUxRCAvKiBDb21wbGV0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxOEMzRjUwRTE2RjVDRDAwQjM0NDYwIC8qIGNvbmZp
Zy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjY4RUJC
OEMwMjU1RDRDNjAxRkY2MEY3IC8qIGNvbmZpZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMThDM0Y2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBDb25z
dHJ1Y3REYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzhGM0NDRjBEQUYxN0JBMDA1NzdBODAgLyogQ29uc3RydWN0RGF0YS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUJDMThDM0Y5MEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBEYXRlTWF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRDIxMjAyMjkwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVNYXRoLmggKi87IH07
CisJCUJDMThDM0Y5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBEYXRlTWF0aC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDIxMjAyMjkwQUQ0MzEwQzAwRUQ3OUI2
IC8qIERhdGVNYXRoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQkMxOEMzRkEwRTE2RjVDRDAwQjM0NDYwIC8qIERlYnVnZ2VyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNjkyQTg1OTAyNTU1OTdEMDFG
RjYwRjcgLyogRGVidWdnZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlCQzE4QzNGQjBFMTZGNUNEMDBCMzQ0NjAgLyogRGVidWdnZXJDYWxsRnJh
bWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0ODBE
QjlCMEREQzIyN0YwMDNDRkRGMiAvKiBEZWJ1Z2dlckNhbGxGcmFtZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMThDM0ZDMEUxNkY1Q0QwMEIz
NDQ2MCAvKiBEZXF1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE4NjExMUQwQ0M4MjQ4MzAwODE0MTJCIC8qIERlcXVlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NDM5NikKKysrIFdl
YkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDggQEAKKzIwMDktMDYt
MDMgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzEyOAorICAgICAgICBTYWZhcmkgbm90IG9iZXlpbmcgY2FjaGUgaGVh
ZGVyCisgICAgICAgIAorICAgICAgICBJbXBsZW1lbnQgUkZDIDI2MTYgY2FjaGUgZXhwaXJhdGlv
biBjYWxjdWxhdGlvbnMgaW4gV2ViS2l0IGluc3RlYWQgb2YKKyAgICAgICAgcmVseWluZyBvbiB0
aGUgbmV0d29ya2luZyBsYXllci4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRp
bWUvRGF0ZU1hdGguaDogQWRkZWQuCisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAg
ICAgKiBsb2FkZXIvQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OnJldmFsaWRh
dGlvblN1Y2NlZWRlZCk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjpDYWNoZWRSZXNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6aXNFeHBpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhY2hlZFJlc291cmNlOjpjdXJyZW50QWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJl
c291cmNlOjpmcmVzaG5lc3NMaWZldGltZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNv
dXJjZTo6c2V0UmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OnVw
ZGF0ZVJlc3BvbnNlQWZ0ZXJSZXZhbGlkYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
UmVzb3VyY2U6Om11c3RSZXZhbGlkYXRlKToKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVkUmVzb3Vy
Y2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpSZXNvdXJjZVJlc3Bv
bnNlQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6YWRvcHQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OmNvcHlEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRIVFRQSGVhZGVyRmllbGQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OnBhcnNlQ2FjaGVDb250
cm9sRGlyZWN0aXZlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6
Y2FjaGVDb250cm9sQ29udGFpbnNOb0NhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2VCYXNlOjpjYWNoZUNvbnRyb2xDb250YWluc011c3RSZXZhbGlkYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpjYWNoZUNvbnRyb2xNYXhBZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2VEYXRlVmFsdWVJbkhlYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6ZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlQmFzZTo6YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2VCYXNlOjpleHBpcmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNl
OjpsYXN0TW9kaWZpZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6
OmlzQXR0YWNobWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6
Y29tcGFyZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFz
ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNwb25zZUNGTmV0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2U6OnBsYXRmb3JtTGF6eUlu
aXQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVzcG9uc2VNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjpwbGF0Zm9ybUxhenlJbml0
KToKKwogMjAwOS0wNi0wMyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5i
YXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHJldmlzaW9u
IDQ0Mzk2KQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC00
MjEsNiArNDIxLDcgQEAgX19aTjdXZWJDb3JlMTlUZXh0UmVzb3VyY2VEZWNvZGVyQzFFUktOUwog
X19aTjdXZWJDb3JlMTlUZXh0UmVzb3VyY2VEZWNvZGVyRDFFdgogX19aTjdXZWJDb3JlMTlhcHBs
aWNhdGlvbklzU2FmYXJpRXYKIF9fWk43V2ViQ29yZTIwUmVzb3VyY2VSZXNwb25zZUJhc2UyNHNl
dEV4cGVjdGVkQ29udGVudExlbmd0aEV4CitfX1pON1dlYkNvcmUyMFJlc291cmNlUmVzcG9uc2VC
YXNlQzJFdgogX19aTjdXZWJDb3JlMjFDb250ZXh0TWVudUNvbnRyb2xsZXIxNmNsZWFyQ29udGV4
dE1lbnVFdgogX19aTjdXZWJDb3JlMjFKYXZhU2NyaXB0RGVidWdTZXJ2ZXIyM3JlY29tcGlsZUFs
bEpTRnVuY3Rpb25zRVBOU181VGltZXJJUzBfRUUKIF9fWk43V2ViQ29yZTIxSmF2YVNjcmlwdERl
YnVnU2VydmVyNnNoYXJlZEV2CkluZGV4OiBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRp
bWUvRGF0ZU1hdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1
bnRpbWUvRGF0ZU1hdGguaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRl
cnMvcnVudGltZS9EYXRlTWF0aC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKKyNpZm5k
ZWYgV2ViQ29yZV9GV0RfRGF0ZU1hdGhfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9EYXRlTWF0aF9o
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRGF0ZU1hdGguaD4KKyNlbmRpZgpJbmRleDogV2Vi
Q29yZS9sb2FkZXIvQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hl
LmNwcAkocmV2aXNpb24gNDQzOTYpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxMSw3ICsyMTEsNyBAQCB2b2lkIENhY2hlOjpyZXZhbGlkYXRpb25TdWNj
ZWVkZWQoQ2FjaGVkCiAgICAgQVNTRVJUKCFtX3Jlc291cmNlcy5nZXQocmVzb3VyY2UtPnVybCgp
KSk7CiAgICAgbV9yZXNvdXJjZXMuc2V0KHJlc291cmNlLT51cmwoKSwgcmVzb3VyY2UpOwogICAg
IHJlc291cmNlLT5zZXRJbkNhY2hlKHRydWUpOwotICAgIHJlc291cmNlLT5zZXRFeHBpcmF0aW9u
RGF0ZShyZXNwb25zZS5leHBpcmF0aW9uRGF0ZSgpKTsKKyAgICByZXNvdXJjZS0+dXBkYXRlUmVz
cG9uc2VBZnRlclJldmFsaWRhdGlvbihyZXNwb25zZSk7CiAgICAgaW5zZXJ0SW5MUlVMaXN0KHJl
c291cmNlKTsKICAgICBpbnQgZGVsdGEgPSByZXNvdXJjZS0+c2l6ZSgpOwogICAgIGlmIChyZXNv
dXJjZS0+ZGVjb2RlZFNpemUoKSAmJiByZXNvdXJjZS0+aGFzQ2xpZW50cygpKQpJbmRleDogV2Vi
Q29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL0NhY2hlZFJlc291cmNlLmNwcAkocmV2aXNpb24gNDQzOTYpCisrKyBXZWJDb3JlL2xvYWRl
ci9DYWNoZWRSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEyICsyNiwxNCBAQAog
CiAjaW5jbHVkZSAiQ2FjaGUuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRsZS5oIgor
I2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2lu
Y2x1ZGUgIlB1cmdlYWJsZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlJlcXVlc3QuaCIKKyNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZExlYWtDb3VudGVy
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00NSw2ICs0Nyw3IEBAIHN0YXRpYyBS
ZWZDb3VudGVkTGVha0NvdW50ZXIgY2FjaGVkUmVzb3UKIAogQ2FjaGVkUmVzb3VyY2U6OkNhY2hl
ZFJlc291cmNlKGNvbnN0IFN0cmluZyYgdXJsLCBUeXBlIHR5cGUpCiAgICAgOiBtX3VybCh1cmwp
CisgICAgLCBtX3Jlc3BvbnNlVGltZXN0YW1wKGN1cnJlbnRUaW1lKCkpCiAgICAgLCBtX2xhc3RE
ZWNvZGVkQWNjZXNzVGltZSgwKQogICAgICwgbV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKHRy
dWUpCiAgICAgLCBtX3ByZWxvYWRDb3VudCgwKQpAQCAtNTYsNyArNTksNiBAQCBDYWNoZWRSZXNv
dXJjZTo6Q2FjaGVkUmVzb3VyY2UoY29uc3QgU3RyCiAgICAgLCBtX2hhbmRsZUNvdW50KDApCiAg
ICAgLCBtX3Jlc291cmNlVG9SZXZhbGlkYXRlKDApCiAgICAgLCBtX2lzQmVpbmdSZXZhbGlkYXRl
ZChmYWxzZSkKLSAgICAsIG1fZXhwaXJhdGlvbkRhdGUoMCkKIHsKICNpZm5kZWYgTkRFQlVHCiAg
ICAgY2FjaGVkUmVzb3VyY2VMZWFrQ291bnRlci5pbmNyZW1lbnQoKTsKQEAgLTExNSwxNiArMTE3
LDQ2IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OmZpbmlzaCgpCiAKIGJvb2wgQ2FjaGVkUmVzb3Vy
Y2U6OmlzRXhwaXJlZCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2V4cGlyYXRpb25EYXRlKQorICAg
IGlmIChtX3Jlc3BvbnNlLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdGlt
ZV90IG5vdyA9IHRpbWUoMCk7Ci0gICAgcmV0dXJuIGRpZmZ0aW1lKG5vdywgbV9leHBpcmF0aW9u
RGF0ZSkgPj0gMDsKKworICAgIHJldHVybiBjdXJyZW50QWdlKCkgPiBmcmVzaG5lc3NMaWZldGlt
ZSgpOworfQorICAgIAorZG91YmxlIENhY2hlZFJlc291cmNlOjpjdXJyZW50QWdlKCkgY29uc3QK
K3sKKyAgICAvLyBSRkMyNjE2IDEzLjMuMworICAgIC8vIE5vIGNvbXBlbnNhdGlvbiBmb3IgbGF0
ZW5jeSBhcyB0aGF0IGlzIG5vdCB0ZXJyaWJseSBpbXBvcnRhbnQgaW4gcHJhY3RpY2UKKyAgICBk
b3VibGUgZGF0ZVZhbHVlID0gbV9yZXNwb25zZS5kYXRlKCk7CisgICAgZG91YmxlIGFwcGFyZW50
QWdlID0gaXNmaW5pdGUoZGF0ZVZhbHVlKSA/IG1heCgwLiwgbV9yZXNwb25zZVRpbWVzdGFtcCAt
IGRhdGVWYWx1ZSkgOiAwOworICAgIGRvdWJsZSBhZ2VWYWx1ZSA9IG1fcmVzcG9uc2UuYWdlKCk7
CisgICAgZG91YmxlIGNvcnJlY3RlZFJlY2VpdmVkQWdlID0gaXNmaW5pdGUoYWdlVmFsdWUpID8g
bWF4KGFwcGFyZW50QWdlLCBhZ2VWYWx1ZSkgOiBhcHBhcmVudEFnZTsKKyAgICBkb3VibGUgcmVz
aWRlbnRUaW1lID0gY3VycmVudFRpbWUoKSAtIG1fcmVzcG9uc2VUaW1lc3RhbXA7CisgICAgcmV0
dXJuIGNvcnJlY3RlZFJlY2VpdmVkQWdlICsgcmVzaWRlbnRUaW1lOworfQorICAgIAorZG91Ymxl
IENhY2hlZFJlc291cmNlOjpmcmVzaG5lc3NMaWZldGltZSgpIGNvbnN0Cit7CisgICAgLy8gUkZD
MjYxNiAxMy4zLjQKKyAgICBkb3VibGUgbWF4QWdlVmFsdWUgPSBtX3Jlc3BvbnNlLmNhY2hlQ29u
dHJvbE1heEFnZSgpOworICAgIGlmIChpc2Zpbml0ZShtYXhBZ2VWYWx1ZSkpCisgICAgICAgIHJl
dHVybiBtYXhBZ2VWYWx1ZTsKKyAgICBkb3VibGUgZXhwaXJlc1ZhbHVlID0gbV9yZXNwb25zZS5l
eHBpcmVzKCk7CisgICAgZG91YmxlIGRhdGVWYWx1ZSA9IG1fcmVzcG9uc2UuZGF0ZSgpOworICAg
IGRvdWJsZSBjcmVhdGlvblRpbWUgPSBpc2Zpbml0ZShkYXRlVmFsdWUpID8gZGF0ZVZhbHVlIDog
bV9yZXNwb25zZVRpbWVzdGFtcDsKKyAgICBpZiAoaXNmaW5pdGUoZXhwaXJlc1ZhbHVlKSkKKyAg
ICAgICAgcmV0dXJuIGV4cGlyZXNWYWx1ZSAtIGNyZWF0aW9uVGltZTsKKyAgICBkb3VibGUgbGFz
dE1vZGlmaWVkVmFsdWUgPSBtX3Jlc3BvbnNlLmxhc3RNb2RpZmllZCgpOworICAgIGlmIChpc2Zp
bml0ZShsYXN0TW9kaWZpZWRWYWx1ZSkpCisgICAgICAgIHJldHVybiAoY3JlYXRpb25UaW1lIC0g
bGFzdE1vZGlmaWVkVmFsdWUpICogMC4xOworICAgIC8vIElmIG5vIGNhY2hlIGhlYWRlcnMgYXJl
IHByZXNlbnQsIHRoZSBzcGVjaWZpY2F0aW9uIGxlYXZlcyB0aGUgZGVjaXNpb24gdG8gdGhlIFVB
LiBPdGhlciBicm93c2VycyBzZWVtIHRvIG9wdCBmb3IgMC4KKyAgICByZXR1cm4gMDsKIH0KIAog
dm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UpCiB7CiAgICAgbV9yZXNwb25zZSA9IHJlc3BvbnNlOwotICAgIG1fZXhwaXJhdGlv
bkRhdGUgPSByZXNwb25zZS5leHBpcmF0aW9uRGF0ZSgpOworICAgIG1fcmVzcG9uc2VUaW1lc3Rh
bXAgPSBjdXJyZW50VGltZSgpOwogfQogCiB2b2lkIENhY2hlZFJlc291cmNlOjpzZXRSZXF1ZXN0
KFJlcXVlc3QqIHJlcXVlc3QpCkBAIC0yOTksNiArMzMxLDI0IEBAIHZvaWQgQ2FjaGVkUmVzb3Vy
Y2U6OnN3aXRjaENsaWVudHNUb1JldmEKICAgICAgICAgbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZS0+
YWRkQ2xpZW50KGNsaWVudHNUb01vdmVbbl0pOwogfQogICAgIAordm9pZCBDYWNoZWRSZXNvdXJj
ZTo6dXBkYXRlUmVzcG9uc2VBZnRlclJldmFsaWRhdGlvbihjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiB2YWxpZGF0aW5nUmVzcG9uc2UpCit7CisgICAgbV9yZXNwb25zZVRpbWVzdGFtcCA9IGN1cnJl
bnRUaW1lKCk7CisKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywg
Y29udGVudFR5cGVIZWFkZXIsICgiY29udGVudC10eXBlIikpOworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBjb250ZW50TGVuZ3RoSGVhZGVyLCAoImNvbnRlbnQt
bGVuZ3RoIikpOworICAgIC8vIFJGQzI2MTYgMTAuMy41CisgICAgLy8gVXBkYXRlIGNhY2hlZCBo
ZWFkZXJzIGZyb20gdGhlIDMwNCByZXNwb25zZQorICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIG5l
d0hlYWRlcnMgPSB2YWxpZGF0aW5nUmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpOworICAgIEhU
VFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5ld0hlYWRlcnMuZW5kKCk7CisgICAg
Zm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG5ld0hlYWRlcnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIC8vIERvbid0IGFsbG93IDMwNCByZXNwb25z
ZSB0byB1cGRhdGUgY29udGVudCBoZWFkZXJzLCB0aGVzZSBjYW4ndCBjaGFuZ2UgYnV0IHNvbWUg
c2VydmVycyBzZW5kIHdyb25nIHZhbHVlcy4KKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KGl0LT5maXJzdCwgY29udGVudFR5cGVIZWFkZXIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGl0LT5m
aXJzdCwgY29udGVudExlbmd0aEhlYWRlcikpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgbV9yZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsK
KyAgICB9Cit9CisgICAgCiBib29sIENhY2hlZFJlc291cmNlOjpjYW5Vc2VDYWNoZVZhbGlkYXRv
cigpIGNvbnN0CiB7CiAgICAgcmV0dXJuICFtX2xvYWRpbmcgJiYgKCFtX3Jlc3BvbnNlLmh0dHBI
ZWFkZXJGaWVsZCgiTGFzdC1Nb2RpZmllZCIpLmlzRW1wdHkoKSB8fCAhbV9yZXNwb25zZS5odHRw
SGVhZGVyRmllbGQoIkVUYWciKS5pc0VtcHR5KCkpOwpAQCAtMzA5LDkgKzM1OSw5IEBAIGJvb2wg
Q2FjaGVkUmVzb3VyY2U6Om11c3RSZXZhbGlkYXRlKENhY2gKICAgICBpZiAobV9sb2FkaW5nKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBGSVhNRTogQWxzbyBsb29rIGF0IG1heC1h
Z2UsIG1pbi1mcmVzaCwgbWF4LXN0YWxlIGluIENhY2hlLUNvbnRyb2wKICAgICBpZiAoY2FjaGVQ
b2xpY3kgPT0gQ2FjaGVQb2xpY3lDYWNoZSkKICAgICAgICAgcmV0dXJuIG1fcmVzcG9uc2UuY2Fj
aGVDb250cm9sQ29udGFpbnNOb0NhY2hlKCkgfHwgKGlzRXhwaXJlZCgpICYmIG1fcmVzcG9uc2Uu
Y2FjaGVDb250cm9sQ29udGFpbnNNdXN0UmV2YWxpZGF0ZSgpKTsKKwogICAgIHJldHVybiBpc0V4
cGlyZWQoKSB8fCBtX3Jlc3BvbnNlLmNhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZSgpOwogfQog
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgJKHJldmlzaW9uIDQ0Mzk2KQorKysgV2ViQ29y
ZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5Myw4
IEBAIHByb3RlY3RlZDoKICAgICBSZXF1ZXN0KiBtX3JlcXVlc3Q7CiAKICAgICBSZXNvdXJjZVJl
c3BvbnNlIG1fcmVzcG9uc2U7CisgICAgZG91YmxlIG1fcmVzcG9uc2VUaW1lc3RhbXA7CisKICAg
ICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7CiAgICAgT3duUHRyPFB1cmdlYWJsZUJ1ZmZl
cj4gbV9wdXJnZWFibGVEYXRhOwogCkBAIC0yMDYsNyArMjA4LDEwIEBAIHByaXZhdGU6CiAgICAg
dm9pZCBzZXRSZXNvdXJjZVRvUmV2YWxpZGF0ZShDYWNoZWRSZXNvdXJjZSopOwogICAgIHZvaWQg
c3dpdGNoQ2xpZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSgpOwogICAgIHZvaWQgY2xlYXJSZXNv
dXJjZVRvUmV2YWxpZGF0ZSgpOwotICAgIHZvaWQgc2V0RXhwaXJhdGlvbkRhdGUodGltZV90IGV4
cGlyYXRpb25EYXRlKSB7IG1fZXhwaXJhdGlvbkRhdGUgPSBleHBpcmF0aW9uRGF0ZTsgfQorICAg
IHZvaWQgdXBkYXRlUmVzcG9uc2VBZnRlclJldmFsaWRhdGlvbihjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiB2YWxpZGF0aW5nUmVzcG9uc2UpOworCisgICAgZG91YmxlIGN1cnJlbnRBZ2UoKSBjb25z
dDsKKyAgICBkb3VibGUgZnJlc2huZXNzTGlmZXRpbWUoKSBjb25zdDsKIAogICAgIHVuc2lnbmVk
IG1fZW5jb2RlZFNpemU7CiAgICAgdW5zaWduZWQgbV9kZWNvZGVkU2l6ZTsKQEAgLTIyMyw3ICsy
MjgsNiBAQCBwcml2YXRlOgogcHJvdGVjdGVkOgogICAgIGJvb2wgbV9pbkNhY2hlOwogICAgIGJv
b2wgbV9sb2FkaW5nOwotICAgIGJvb2wgbV9leHBpcmVEYXRlQ2hhbmdlZDsKICNpZm5kZWYgTkRF
QlVHCiAgICAgYm9vbCBtX2RlbGV0ZWQ7CiAgICAgdW5zaWduZWQgbV9scnVJbmRleDsKQEAgLTI0
Nyw4ICsyNTEsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0JlaW5nUmV2YWxpZGF0ZWQ7CiAg
ICAgLy8gVGhlc2UgaGFuZGxlcyB3aWxsIG5lZWQgdG8gYmUgdXBkYXRlZCB0byBwb2ludCB0byB0
aGUgbV9yZXNvdXJjZVRvUmV2YWxpZGF0ZSBpbiBjYXNlIHdlIGdldCAzMDQgcmVzcG9uc2UuCiAg
ICAgSGFzaFNldDxDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UqPiBtX2hhbmRsZXNUb1JldmFsaWRh
dGU7Ci0gICAgCi0gICAgdGltZV90IG1fZXhwaXJhdGlvbkRhdGU7CiB9OwogCiB9CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAJ
KHJldmlzaW9uIDQ0Mzk2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVz
cG9uc2VCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOSBAQAogI2luY2x1ZGUg
IlJlc291cmNlUmVzcG9uc2VCYXNlLmgiCiAKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgi
CisjaW5jbHVkZSA8cnVudGltZS9EYXRlTWF0aC5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIApAQCAtMzUsNiArMzgsMzQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgdm9p
ZCBwYXJzZUNhY2hlSGVhZGVyKGNvbnN0IFN0cmluZyYgaGVhZGVyLCBWZWN0b3I8cGFpcjxTdHJp
bmcsIFN0cmluZz4gPiYgcmVzdWx0KTsKIAorUmVzb3VyY2VSZXNwb25zZUJhc2U6OlJlc291cmNl
UmVzcG9uc2VCYXNlKCkgIAorICAgIDogbV9leHBlY3RlZENvbnRlbnRMZW5ndGgoMCkKKyAgICAs
IG1faHR0cFN0YXR1c0NvZGUoMCkKKyAgICAsIG1faXNOdWxsKHRydWUpCisgICAgLCBtX2hhdmVQ
YXJzZWRDYWNoZUNvbnRyb2xIZWFkZXIoZmFsc2UpCisgICAgLCBtX2hhdmVQYXJzZWRBZ2VIZWFk
ZXIoZmFsc2UpCisgICAgLCBtX2hhdmVQYXJzZWREYXRlSGVhZGVyKGZhbHNlKQorICAgICwgbV9o
YXZlUGFyc2VkRXhwaXJlc0hlYWRlcihmYWxzZSkKKyAgICAsIG1faGF2ZVBhcnNlZExhc3RNb2Rp
ZmllZEhlYWRlcihmYWxzZSkKK3sKK30KKworUmVzb3VyY2VSZXNwb25zZUJhc2U6OlJlc291cmNl
UmVzcG9uc2VCYXNlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgbG9u
ZyBsb25nIGV4cGVjdGVkTGVuZ3RoLCBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZ05hbWUsIGNv
bnN0IFN0cmluZyYgZmlsZW5hbWUpCisgICAgOiBtX3VybCh1cmwpCisgICAgLCBtX21pbWVUeXBl
KG1pbWVUeXBlKQorICAgICwgbV9leHBlY3RlZENvbnRlbnRMZW5ndGgoZXhwZWN0ZWRMZW5ndGgp
CisgICAgLCBtX3RleHRFbmNvZGluZ05hbWUodGV4dEVuY29kaW5nTmFtZSkKKyAgICAsIG1fc3Vn
Z2VzdGVkRmlsZW5hbWUoZmlsZW5hbWUpCisgICAgLCBtX2h0dHBTdGF0dXNDb2RlKDApCisgICAg
LCBtX2lzTnVsbChmYWxzZSkKKyAgICAsIG1faGF2ZVBhcnNlZENhY2hlQ29udHJvbEhlYWRlcihm
YWxzZSkKKyAgICAsIG1faGF2ZVBhcnNlZEFnZUhlYWRlcihmYWxzZSkKKyAgICAsIG1faGF2ZVBh
cnNlZERhdGVIZWFkZXIoZmFsc2UpCisgICAgLCBtX2hhdmVQYXJzZWRFeHBpcmVzSGVhZGVyKGZh
bHNlKQorICAgICwgbV9oYXZlUGFyc2VkTGFzdE1vZGlmaWVkSGVhZGVyKGZhbHNlKQoreworfQor
CiBhdXRvX3B0cjxSZXNvdXJjZVJlc3BvbnNlPiBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6YWRvcHQo
YXV0b19wdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YT4gZGF0YSkKIHsKICAgICBh
dXRvX3B0cjxSZXNvdXJjZVJlc3BvbnNlPiByZXNwb25zZShuZXcgUmVzb3VyY2VSZXNwb25zZSgp
KTsKQEAgLTQ5LDEyICs4MCw2IEBAIGF1dG9fcHRyPFJlc291cmNlUmVzcG9uc2U+IFJlc291cmNl
UmVzcG8KIAogICAgIHJlc3BvbnNlLT5sYXp5SW5pdCgpOwogICAgIHJlc3BvbnNlLT5tX2h0dHBI
ZWFkZXJGaWVsZHMuYWRvcHQoc3RkOjphdXRvX3B0cjxDcm9zc1RocmVhZEhUVFBIZWFkZXJNYXBE
YXRhPihkYXRhLT5tX2h0dHBIZWFkZXJzLnJlbGVhc2UoKSkpOwotCi0gICAgcmVzcG9uc2UtPnNl
dEV4cGlyYXRpb25EYXRlKGRhdGEtPm1fZXhwaXJhdGlvbkRhdGUpOwotICAgIHJlc3BvbnNlLT5z
ZXRMYXN0TW9kaWZpZWREYXRlKGRhdGEtPm1fbGFzdE1vZGlmaWVkRGF0ZSk7Ci0gICAgcmVzcG9u
c2UtPm1faGF2ZVBhcnNlZENhY2hlQ29udHJvbCA9IGRhdGEtPm1faGF2ZVBhcnNlZENhY2hlQ29u
dHJvbDsKLSAgICByZXNwb25zZS0+bV9jYWNoZUNvbnRyb2xDb250YWluc011c3RSZXZhbGlkYXRl
ID0gZGF0YS0+bV9jYWNoZUNvbnRyb2xDb250YWluc011c3RSZXZhbGlkYXRlOwotICAgIHJlc3Bv
bnNlLT5tX2NhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZSA9IGRhdGEtPm1fY2FjaGVDb250cm9s
Q29udGFpbnNOb0NhY2hlOwogICAgIHJldHVybiByZXNwb25zZTsKIH0KIApAQCAtNjksMTEgKzk0
LDYgQEAgYXV0b19wdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YQogICAgIGRhdGEt
Pm1faHR0cFN0YXR1c0NvZGUgPSBodHRwU3RhdHVzQ29kZSgpOwogICAgIGRhdGEtPm1faHR0cFN0
YXR1c1RleHQgPSBodHRwU3RhdHVzVGV4dCgpLmNvcHkoKTsKICAgICBkYXRhLT5tX2h0dHBIZWFk
ZXJzLmFkb3B0KGh0dHBIZWFkZXJGaWVsZHMoKS5jb3B5RGF0YSgpKTsKLSAgICBkYXRhLT5tX2V4
cGlyYXRpb25EYXRlID0gZXhwaXJhdGlvbkRhdGUoKTsKLSAgICBkYXRhLT5tX2xhc3RNb2RpZmll
ZERhdGUgPSBsYXN0TW9kaWZpZWREYXRlKCk7Ci0gICAgZGF0YS0+bV9oYXZlUGFyc2VkQ2FjaGVD
b250cm9sID0gbV9oYXZlUGFyc2VkQ2FjaGVDb250cm9sOwotICAgIGRhdGEtPm1fY2FjaGVDb250
cm9sQ29udGFpbnNNdXN0UmV2YWxpZGF0ZSA9IG1fY2FjaGVDb250cm9sQ29udGFpbnNNdXN0UmV2
YWxpZGF0ZTsKLSAgICBkYXRhLT5tX2NhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZSA9IG1fY2Fj
aGVDb250cm9sQ29udGFpbnNOb0NhY2hlOwogICAgIHJldHVybiBkYXRhOwogfQogCkBAIC0yMDAs
OSArMjIwLDI0IEBAIFN0cmluZyBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6aHR0cEhlYWRlckYKIHZv
aWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNldEhUVFBIZWFkZXJGaWVsZChjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgbGF6eUluaXQoKTsKKyAg
ICAKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgYWdlSGVhZGVy
LCAoImFnZSIpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywg
Y2FjaGVDb250cm9sSGVhZGVyLCAoImNhY2hlLWNvbnRyb2wiKSk7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGRhdGVIZWFkZXIsICgiZGF0ZSIpKTsKKyAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgZXhwaXJlc0hlYWRlciwgKCJl
eHBpcmVzIikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBs
YXN0TW9kaWZpZWRIZWFkZXIsICgibGFzdC1tb2RpZmllZCIpKTsKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgcHJhZ21hSGVhZGVyLCAoInByYWdtYSIpKTsKKyAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgYWdlSGVhZGVyKSkKKyAgICAgICAgbV9oYXZl
UGFyc2VkQWdlSGVhZGVyID0gZmFsc2U7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
bmFtZSwgY2FjaGVDb250cm9sSGVhZGVyKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCBwcmFn
bWFIZWFkZXIpKQorICAgICAgICBtX2hhdmVQYXJzZWRDYWNoZUNvbnRyb2xIZWFkZXIgPSBmYWxz
ZTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCBkYXRlSGVhZGVyKSkKKyAg
ICAgICAgbV9oYXZlUGFyc2VkRGF0ZUhlYWRlciA9IGZhbHNlOworICAgIGVsc2UgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKG5hbWUsIGV4cGlyZXNIZWFkZXIpKQorICAgICAgICBtX2hhdmVQYXJzZWRF
eHBpcmVzSGVhZGVyID0gZmFsc2U7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFt
ZSwgbGFzdE1vZGlmaWVkSGVhZGVyKSkKKyAgICAgICAgbV9oYXZlUGFyc2VkTGFzdE1vZGlmaWVk
SGVhZGVyID0gZmFsc2U7CiAKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgImNhY2hl
LWNvbnRyb2wiKSkKLSAgICAgICAgbV9oYXZlUGFyc2VkQ2FjaGVDb250cm9sID0gZmFsc2U7CiAg
ICAgbV9odHRwSGVhZGVyRmllbGRzLnNldChuYW1lLCB2YWx1ZSk7CiB9CiAKQEAgLTIxNSw3MSAr
MjUwLDE1MyBAQCBjb25zdCBIVFRQSGVhZGVyTWFwJiBSZXNvdXJjZVJlc3BvbnNlQmFzCiAKIHZv
aWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnBhcnNlQ2FjaGVDb250cm9sRGlyZWN0aXZlcygpIGNv
bnN0CiB7Ci0gICAgQVNTRVJUKCFtX2hhdmVQYXJzZWRDYWNoZUNvbnRyb2wpOworICAgIEFTU0VS
VCghbV9oYXZlUGFyc2VkQ2FjaGVDb250cm9sSGVhZGVyKTsKIAogICAgIGxhenlJbml0KCk7CiAK
LSAgICBtX2hhdmVQYXJzZWRDYWNoZUNvbnRyb2wgPSB0cnVlOworICAgIG1faGF2ZVBhcnNlZENh
Y2hlQ29udHJvbEhlYWRlciA9IHRydWU7CisKICAgICBtX2NhY2hlQ29udHJvbENvbnRhaW5zTXVz
dFJldmFsaWRhdGUgPSBmYWxzZTsKICAgICBtX2NhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZSA9
IGZhbHNlOworICAgIG1fY2FjaGVDb250cm9sTWF4QWdlID0gbnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6cXVpZXRfTmFOKCk7CiAKLSAgICBTdHJpbmcgY2FjaGVDb250cm9sVmFsdWUgPSBodHRwSGVh
ZGVyRmllbGQoImNhY2hlLWNvbnRyb2wiKTsKLSAgICBpZiAoY2FjaGVDb250cm9sVmFsdWUuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogSXQgd291bGQgcHJvYmFi
bHkgYmUgbXVjaCBtb3JlIGVmZmljaWVudCB0byBwYXJzZSB0aGlzIHdpdGhvdXQgY3JlYXRpbmcg
YWxsIHRoZXNlIGRhdGEgc3RydWN0dXJlcy4KLQotICAgIFZlY3RvcjxwYWlyPFN0cmluZywgU3Ry
aW5nPiA+IGRpcmVjdGl2ZXM7Ci0gICAgcGFyc2VDYWNoZUhlYWRlcihjYWNoZUNvbnRyb2xWYWx1
ZSwgZGlyZWN0aXZlcyk7Ci0KLSAgICBzaXplX3QgZGlyZWN0aXZlc1NpemUgPSBkaXJlY3RpdmVz
LnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRpcmVjdGl2ZXNTaXplOyArK2kp
IHsKLSAgICAgICAgLy8gVGhlIG5vLWNhY2hlIGRpcmVjdGl2ZSBjYW4gaGF2ZSBhIHZhbHVlLCB3
aGljaCBpcyBpZ25vcmVkIGhlcmUuIFRoaXMgbWVhbnMgdGhhdCBpbiB2ZXJ5IHJhcmUgY2FzZXMs
IHJlc3BvbnNlcyB0aGF0IGNvdWxkIGJlIHRha2VuIGZyb20gY2FjaGUgd29uJ3QgYmUuCi0gICAg
ICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShkaXJlY3RpdmVzW2ldLmZpcnN0LCAibm8tY2FjaGUi
KSkKLSAgICAgICAgICAgIG1fY2FjaGVDb250cm9sQ29udGFpbnNOb0NhY2hlID0gdHJ1ZTsKLSAg
ICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZGlyZWN0aXZlc1tpXS5maXJzdCwgIm11
c3QtcmV2YWxpZGF0ZSIpKQotICAgICAgICAgICAgbV9jYWNoZUNvbnRyb2xDb250YWluc011c3RS
ZXZhbGlkYXRlID0gdHJ1ZTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0
cmluZywgY2FjaGVDb250cm9sU3RyaW5nLCAoImNhY2hlLWNvbnRyb2wiKSk7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIG5vQ2FjaGVEaXJlY3RpdmUsICgibm8t
Y2FjaGUiKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIG11
c3RSZXZhbGlkYXRlRGlyZWN0aXZlLCAoIm11c3QtcmV2YWxpZGF0ZSIpKTsKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgbWF4QWdlRGlyZWN0aXZlLCAoIm1heC1h
Z2UiKSk7CisKKyAgICBTdHJpbmcgY2FjaGVDb250cm9sVmFsdWUgPSBtX2h0dHBIZWFkZXJGaWVs
ZHMuZ2V0KGNhY2hlQ29udHJvbFN0cmluZyk7CisgICAgaWYgKCFjYWNoZUNvbnRyb2xWYWx1ZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgVmVjdG9yPHBhaXI8U3RyaW5nLCBTdHJpbmc+ID4gZGlyZWN0
aXZlczsKKyAgICAgICAgcGFyc2VDYWNoZUhlYWRlcihjYWNoZUNvbnRyb2xWYWx1ZSwgZGlyZWN0
aXZlcyk7CisKKyAgICAgICAgc2l6ZV90IGRpcmVjdGl2ZXNTaXplID0gZGlyZWN0aXZlcy5zaXpl
KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGlyZWN0aXZlc1NpemU7ICsraSkg
eworICAgICAgICAgICAgLy8gUkZDMjYxNiAxNC45LjE6IEEgbm8tY2FjaGUgZGlyZWN0aXZlIHdp
dGggYSB2YWx1ZSBpcyBvbmx5IG1lYW5pbmdmdWwgZm9yIHByb3h5IGNhY2hlcy4KKyAgICAgICAg
ICAgIC8vIEl0IHNob3VsZCBiZSBpZ25vcmVkIGJ5IGEgYnJvd3NlciBsZXZlbCBjYWNoZS4KKyAg
ICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShkaXJlY3RpdmVzW2ldLmZpcnN0LCBub0Nh
Y2hlRGlyZWN0aXZlKSAmJiBkaXJlY3RpdmVzW2ldLnNlY29uZC5pc0VtcHR5KCkpCisgICAgICAg
ICAgICAgICAgbV9jYWNoZUNvbnRyb2xDb250YWluc05vQ2FjaGUgPSB0cnVlOworICAgICAgICAg
ICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZGlyZWN0aXZlc1tpXS5maXJzdCwgbXVzdFJl
dmFsaWRhdGVEaXJlY3RpdmUpKQorICAgICAgICAgICAgICAgIG1fY2FjaGVDb250cm9sQ29udGFp
bnNNdXN0UmV2YWxpZGF0ZSA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShkaXJlY3RpdmVzW2ldLmZpcnN0LCBtYXhBZ2VEaXJlY3RpdmUpKSB7CisgICAgICAg
ICAgICAgICAgYm9vbCBvazsKKyAgICAgICAgICAgICAgICBkb3VibGUgbWF4QWdlID0gZGlyZWN0
aXZlc1tpXS5zZWNvbmQudG9Eb3VibGUoJm9rKTsKKyAgICAgICAgICAgICAgICBpZiAob2spCisg
ICAgICAgICAgICAgICAgICAgIG1fY2FjaGVDb250cm9sTWF4QWdlID0gbWF4QWdlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CiAgICAgfQorICAgICAgICAKKyAgICBpZiAoIW1fY2FjaGVDb250
cm9sQ29udGFpbnNOb0NhY2hlKSB7CisgICAgICAgIC8vIEhhbmRsZSBQcmFnbWE6IG5vLWNhY2hl
CisgICAgICAgIC8vIFRoaXMgaXMgZGVwcmVjYXRlZCBhbmQgZXF1aXZhbGVudCB0byBDYWNoZS1j
b250cm9sOiBuby1jYWNoZQorICAgICAgICAvLyBEb24ndCBib3RoZXIgdG9rZW5pemluZyB0aGUg
dmFsdWUsIGl0IGlzIG5vdCBpbXBvcnRhbnQKKyAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChj
b25zdCBBdG9taWNTdHJpbmcsIHByYWdtYUhlYWRlciwgKCJwcmFnbWEiKSk7CisgICAgICAgIFN0
cmluZyBwcmFnbWFWYWx1ZSA9IG1faHR0cEhlYWRlckZpZWxkcy5nZXQocHJhZ21hSGVhZGVyKTsK
KyAgICAgICAgbV9jYWNoZUNvbnRyb2xDb250YWluc05vQ2FjaGUgPSBwcmFnbWFWYWx1ZS5sb3dl
cigpLmNvbnRhaW5zKG5vQ2FjaGVEaXJlY3RpdmUpOworICAgIH0KK30KKyAgICAKK2Jvb2wgUmVz
b3VyY2VSZXNwb25zZUJhc2U6OmNhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZSgpIGNvbnN0Cit7
CisgICAgaWYgKCFtX2hhdmVQYXJzZWRDYWNoZUNvbnRyb2xIZWFkZXIpCisgICAgICAgIHBhcnNl
Q2FjaGVDb250cm9sRGlyZWN0aXZlcygpOworICAgIHJldHVybiBtX2NhY2hlQ29udHJvbENvbnRh
aW5zTm9DYWNoZTsKIH0KIAotYm9vbCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6aXNBdHRhY2htZW50
KCkgY29uc3QKK2Jvb2wgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmNhY2hlQ29udHJvbENvbnRhaW5z
TXVzdFJldmFsaWRhdGUoKSBjb25zdAogewotICAgIGxhenlJbml0KCk7CisgICAgaWYgKCFtX2hh
dmVQYXJzZWRDYWNoZUNvbnRyb2xIZWFkZXIpCisgICAgICAgIHBhcnNlQ2FjaGVDb250cm9sRGly
ZWN0aXZlcygpOworICAgIHJldHVybiBtX2NhY2hlQ29udHJvbENvbnRhaW5zTXVzdFJldmFsaWRh
dGU7Cit9CiAKLSAgICBTdHJpbmcgdmFsdWUgPSBtX2h0dHBIZWFkZXJGaWVsZHMuZ2V0KCJDb250
ZW50LURpc3Bvc2l0aW9uIik7Ci0gICAgaW50IGxvYyA9IHZhbHVlLmZpbmQoJzsnKTsKLSAgICBp
ZiAobG9jICE9IC0xKQotICAgICAgICB2YWx1ZSA9IHZhbHVlLmxlZnQobG9jKTsKLSAgICB2YWx1
ZSA9IHZhbHVlLnN0cmlwV2hpdGVTcGFjZSgpOwotICAgIHJldHVybiBlcXVhbElnbm9yaW5nQ2Fz
ZSh2YWx1ZSwgImF0dGFjaG1lbnQiKTsKK2RvdWJsZSBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6Y2Fj
aGVDb250cm9sTWF4QWdlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faGF2ZVBhcnNlZENhY2hlQ29u
dHJvbEhlYWRlcikKKyAgICAgICAgcGFyc2VDYWNoZUNvbnRyb2xEaXJlY3RpdmVzKCk7CisgICAg
cmV0dXJuIG1fY2FjaGVDb250cm9sTWF4QWdlOworfQorCitzdGF0aWMgZG91YmxlIHBhcnNlRGF0
ZVZhbHVlSW5IZWFkZXIoY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycywgY29uc3QgQXRvbWlj
U3RyaW5nJiBoZWFkZXJOYW1lKQoreworICAgIFN0cmluZyBoZWFkZXJWYWx1ZSA9IGhlYWRlcnMu
Z2V0KGhlYWRlck5hbWUpOworICAgIGlmIChoZWFkZXJWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOyAKKyAgICAv
LyBUaGlzIGhhbmRsZXMgYWxsIGRhdGUgZm9ybWF0cyByZXF1aXJlZCBieSBSRkMyNjE2OgorICAg
IC8vIFN1biwgMDYgTm92IDE5OTQgMDg6NDk6MzcgR01UICA7IFJGQyA4MjIsIHVwZGF0ZWQgYnkg
UkZDIDExMjMKKyAgICAvLyBTdW5kYXksIDA2LU5vdi05NCAwODo0OTozNyBHTVQgOyBSRkMgODUw
LCBvYnNvbGV0ZWQgYnkgUkZDIDEwMzYKKyAgICAvLyBTdW4gTm92ICA2IDA4OjQ5OjM3IDE5OTQg
ICAgICAgOyBBTlNJIEMncyBhc2N0aW1lKCkgZm9ybWF0CisgICAgZG91YmxlIGRhdGVJbk1pbGxp
c2Vjb25kcyA9IEpTQzo6cGFyc2VEYXRlKGhlYWRlclZhbHVlKTsKKyAgICBpZiAoIWlzZmluaXRl
KGRhdGVJbk1pbGxpc2Vjb25kcykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRz
PGRvdWJsZT46OnF1aWV0X05hTigpOworICAgIHJldHVybiBkYXRlSW5NaWxsaXNlY29uZHMgLyAx
MDAwOwogfQogCi12b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRFeHBpcmF0aW9uRGF0ZSh0
aW1lX3QgZXhwaXJhdGlvbkRhdGUpCitkb3VibGUgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmRhdGUo
KSBjb25zdAogewogICAgIGxhenlJbml0KCk7CiAKLSAgICBtX2V4cGlyYXRpb25EYXRlID0gZXhw
aXJhdGlvbkRhdGU7CisgICAgaWYgKCFtX2hhdmVQYXJzZWREYXRlSGVhZGVyKSB7CisgICAgICAg
IERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBoZWFkZXJOYW1lLCAoImRh
dGUiKSk7CisgICAgICAgIG1fZGF0ZSA9IHBhcnNlRGF0ZVZhbHVlSW5IZWFkZXIobV9odHRwSGVh
ZGVyRmllbGRzLCBoZWFkZXJOYW1lKTsKKyAgICAgICAgbV9oYXZlUGFyc2VkRGF0ZUhlYWRlciA9
IHRydWU7CisgICAgfQorICAgIHJldHVybiBtX2RhdGU7CiB9CiAKLXRpbWVfdCBSZXNvdXJjZVJl
c3BvbnNlQmFzZTo6ZXhwaXJhdGlvbkRhdGUoKSBjb25zdAorZG91YmxlIFJlc291cmNlUmVzcG9u
c2VCYXNlOjphZ2UoKSBjb25zdAogewogICAgIGxhenlJbml0KCk7Ci0KLSAgICByZXR1cm4gbV9l
eHBpcmF0aW9uRGF0ZTsgCisgICAgCisgICAgaWYgKCFtX2hhdmVQYXJzZWRBZ2VIZWFkZXIpIHsK
KyAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGhlYWRlck5h
bWUsICgiYWdlIikpOworICAgICAgICBTdHJpbmcgaGVhZGVyVmFsdWUgPSBtX2h0dHBIZWFkZXJG
aWVsZHMuZ2V0KGhlYWRlck5hbWUpOworICAgICAgICBib29sIG9rOworICAgICAgICBtX2FnZSA9
IGhlYWRlclZhbHVlLnRvRG91YmxlKCZvayk7CisgICAgICAgIGlmICghb2spCisgICAgICAgICAg
ICBtX2FnZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAg
ICAgIG1faGF2ZVBhcnNlZEFnZUhlYWRlciA9IHRydWU7CisgICAgfQorICAgIHJldHVybiBtX2Fn
ZTsKIH0KIAotdm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2V0TGFzdE1vZGlmaWVkRGF0ZSh0
aW1lX3QgbGFzdE1vZGlmaWVkRGF0ZSkgCitkb3VibGUgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmV4
cGlyZXMoKSBjb25zdAogewogICAgIGxhenlJbml0KCk7CiAKLSAgICBtX2xhc3RNb2RpZmllZERh
dGUgPSBsYXN0TW9kaWZpZWREYXRlOworICAgIGlmICghbV9oYXZlUGFyc2VkRXhwaXJlc0hlYWRl
cikgeworICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgaGVh
ZGVyTmFtZSwgKCJleHBpcmVzIikpOworICAgICAgICBtX2V4cGlyZXMgPSBwYXJzZURhdGVWYWx1
ZUluSGVhZGVyKG1faHR0cEhlYWRlckZpZWxkcywgaGVhZGVyTmFtZSk7CisgICAgICAgIG1faGF2
ZVBhcnNlZEV4cGlyZXNIZWFkZXIgPSB0cnVlOworICAgIH0KKyAgICByZXR1cm4gbV9leHBpcmVz
OwogfQogCi10aW1lX3QgUmVzb3VyY2VSZXNwb25zZUJhc2U6Omxhc3RNb2RpZmllZERhdGUoKSBj
b25zdAorZG91YmxlIFJlc291cmNlUmVzcG9uc2VCYXNlOjpsYXN0TW9kaWZpZWQoKSBjb25zdAor
eworICAgIGxhenlJbml0KCk7CisgICAgCisgICAgaWYgKCFtX2hhdmVQYXJzZWRMYXN0TW9kaWZp
ZWRIZWFkZXIpIHsKKyAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJp
bmcsIGhlYWRlck5hbWUsICgibGFzdC1tb2RpZmllZCIpKTsKKyAgICAgICAgbV9sYXN0TW9kaWZp
ZWQgPSBwYXJzZURhdGVWYWx1ZUluSGVhZGVyKG1faHR0cEhlYWRlckZpZWxkcywgaGVhZGVyTmFt
ZSk7CisgICAgICAgIG1faGF2ZVBhcnNlZExhc3RNb2RpZmllZEhlYWRlciA9IHRydWU7CisgICAg
fQorICAgIHJldHVybiBtX2xhc3RNb2RpZmllZDsKK30KKworYm9vbCBSZXNvdXJjZVJlc3BvbnNl
QmFzZTo6aXNBdHRhY2htZW50KCkgY29uc3QKIHsKICAgICBsYXp5SW5pdCgpOwogCi0gICAgcmV0
dXJuIG1fbGFzdE1vZGlmaWVkRGF0ZTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0
b21pY1N0cmluZywgaGVhZGVyTmFtZSwgKCJjb250ZW50LWRpc3Bvc2l0aW9uIikpOworICAgIFN0
cmluZyB2YWx1ZSA9IG1faHR0cEhlYWRlckZpZWxkcy5nZXQoaGVhZGVyTmFtZSk7CisgICAgaW50
IGxvYyA9IHZhbHVlLmZpbmQoJzsnKTsKKyAgICBpZiAobG9jICE9IC0xKQorICAgICAgICB2YWx1
ZSA9IHZhbHVlLmxlZnQobG9jKTsKKyAgICB2YWx1ZSA9IHZhbHVlLnN0cmlwV2hpdGVTcGFjZSgp
OworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBhdHRhY2htZW50
U3RyaW5nLCAoImF0dGFjaG1lbnQiKSk7CisgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKHZh
bHVlLCBhdHRhY2htZW50U3RyaW5nKTsKIH0KIAogdm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6
bGF6eUluaXQoKSBjb25zdApAQCAtMzA3LDggKzQyNCw2IEBAIGJvb2wgUmVzb3VyY2VSZXNwb25z
ZUJhc2U6OmNvbXBhcmUoY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChhLmh0
dHBIZWFkZXJGaWVsZHMoKSAhPSBiLmh0dHBIZWFkZXJGaWVsZHMoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChhLmV4cGlyYXRpb25EYXRlKCkgIT0gYi5leHBpcmF0aW9uRGF0ZSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIFJlc291cmNlUmVzcG9uc2U6OnBs
YXRmb3JtQ29tcGFyZShhLCBiKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlUmVzcG9uc2VCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgJKHJldmlzaW9uIDQ0Mzk2KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc4LDI0ICs3OCwxNSBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzQXR0YWNobWVudCgpIGNv
bnN0OwogCi0gICAgdm9pZCBzZXRFeHBpcmF0aW9uRGF0ZSh0aW1lX3QpOwotICAgIHRpbWVfdCBl
eHBpcmF0aW9uRGF0ZSgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRMYXN0TW9kaWZpZWREYXRlKHRp
bWVfdCk7Ci0gICAgdGltZV90IGxhc3RNb2RpZmllZERhdGUoKSBjb25zdDsKLQotICAgIGJvb2wg
Y2FjaGVDb250cm9sQ29udGFpbnNOb0NhY2hlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICgh
bV9oYXZlUGFyc2VkQ2FjaGVDb250cm9sKQotICAgICAgICAgICAgcGFyc2VDYWNoZUNvbnRyb2xE
aXJlY3RpdmVzKCk7Ci0gICAgICAgIHJldHVybiBtX2NhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNo
ZTsKLSAgICB9Ci0gICAgYm9vbCBjYWNoZUNvbnRyb2xDb250YWluc011c3RSZXZhbGlkYXRlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghbV9oYXZlUGFyc2VkQ2FjaGVDb250cm9sKQotICAg
ICAgICAgICAgcGFyc2VDYWNoZUNvbnRyb2xEaXJlY3RpdmVzKCk7Ci0gICAgICAgIHJldHVybiBt
X2NhY2hlQ29udHJvbENvbnRhaW5zTXVzdFJldmFsaWRhdGU7Ci0gICAgfQorICAgIC8vIFRoZXNl
IGZ1bmN0aW9ucyByZXR1cm4gcGFyc2VkIHZhbHVlcyBvZiB0aGUgY29ycmVzcG9uZGluZyByZXNw
b25zZSBoZWFkZXJzLgorICAgIC8vIE5hTiBtZWFucyB0aGF0IHRoZSBoZWFkZXIgd2FzIG5vdCBw
cmVzZW50IG9yIGhhZCBpbnZhbGlkIHZhbHVlLgorICAgIGJvb2wgY2FjaGVDb250cm9sQ29udGFp
bnNOb0NhY2hlKCkgY29uc3Q7CisgICAgYm9vbCBjYWNoZUNvbnRyb2xDb250YWluc011c3RSZXZh
bGlkYXRlKCkgY29uc3Q7CisgICAgZG91YmxlIGNhY2hlQ29udHJvbE1heEFnZSgpIGNvbnN0Owor
ICAgIGRvdWJsZSBkYXRlKCkgY29uc3Q7CisgICAgZG91YmxlIGFnZSgpIGNvbnN0OworICAgIGRv
dWJsZSBleHBpcmVzKCkgY29uc3Q7CisgICAgZG91YmxlIGxhc3RNb2RpZmllZCgpIGNvbnN0Owog
CiAgICAgLy8gVGhlIFJlc291cmNlUmVzcG9uc2Ugc3ViY2xhc3MgbWF5ICJzaGFkb3ciIHRoaXMg
bWV0aG9kIHRvIHByb3ZpZGUgcGxhdGZvcm0tc3BlY2lmaWMgbWVtb3J5IHVzYWdlIGluZm9ybWF0
aW9uCiAgICAgdW5zaWduZWQgbWVtb3J5VXNhZ2UoKSBjb25zdApAQCAtMTA3LDI5ICs5OCw4IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBjb21wYXJlKGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IGEsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIGIpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgUmVzb3Vy
Y2VSZXNwb25zZUJhc2UoKSAgCi0gICAgICAgIDogbV9leHBlY3RlZENvbnRlbnRMZW5ndGgoMCkK
LSAgICAgICAgLCBtX2h0dHBTdGF0dXNDb2RlKDApCi0gICAgICAgICwgbV9leHBpcmF0aW9uRGF0
ZSgwKQotICAgICAgICAsIG1fbGFzdE1vZGlmaWVkRGF0ZSgwKQotICAgICAgICAsIG1faXNOdWxs
KHRydWUpCi0gICAgICAgICwgbV9oYXZlUGFyc2VkQ2FjaGVDb250cm9sKGZhbHNlKQotICAgIHsK
LSAgICB9Ci0KLSAgICBSZXNvdXJjZVJlc3BvbnNlQmFzZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGxvbmcgbG9uZyBleHBlY3RlZExlbmd0aCwgY29uc3QgU3RyaW5n
JiB0ZXh0RW5jb2RpbmdOYW1lLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQotICAgICAgICA6IG1f
dXJsKHVybCkKLSAgICAgICAgLCBtX21pbWVUeXBlKG1pbWVUeXBlKQotICAgICAgICAsIG1fZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoKGV4cGVjdGVkTGVuZ3RoKQotICAgICAgICAsIG1fdGV4dEVuY29k
aW5nTmFtZSh0ZXh0RW5jb2RpbmdOYW1lKQotICAgICAgICAsIG1fc3VnZ2VzdGVkRmlsZW5hbWUo
ZmlsZW5hbWUpCi0gICAgICAgICwgbV9odHRwU3RhdHVzQ29kZSgwKQotICAgICAgICAsIG1fZXhw
aXJhdGlvbkRhdGUoMCkKLSAgICAgICAgLCBtX2xhc3RNb2RpZmllZERhdGUoMCkKLSAgICAgICAg
LCBtX2lzTnVsbChmYWxzZSkKLSAgICAgICAgLCBtX2hhdmVQYXJzZWRDYWNoZUNvbnRyb2woZmFs
c2UpCi0gICAgewotICAgIH0KKyAgICBSZXNvdXJjZVJlc3BvbnNlQmFzZSgpOworICAgIFJlc291
cmNlUmVzcG9uc2VCYXNlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
bG9uZyBsb25nIGV4cGVjdGVkTGVuZ3RoLCBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZ05hbWUs
IGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpOwogCiAgICAgdm9pZCBsYXp5SW5pdCgpIGNvbnN0Owog
CkBAIC0xNDcsMTYgKzExNywyNiBAQCBwcm90ZWN0ZWQ6CiAgICAgaW50IG1faHR0cFN0YXR1c0Nv
ZGU7CiAgICAgU3RyaW5nIG1faHR0cFN0YXR1c1RleHQ7CiAgICAgSFRUUEhlYWRlck1hcCBtX2h0
dHBIZWFkZXJGaWVsZHM7Ci0gICAgdGltZV90IG1fZXhwaXJhdGlvbkRhdGU7Ci0gICAgdGltZV90
IG1fbGFzdE1vZGlmaWVkRGF0ZTsKLSAgICBib29sIG1faXNOdWxsIDogMTsKIAorICAgIGJvb2wg
bV9pc051bGwgOiAxOworICAgIAogcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQ2FjaGVDb250cm9s
RGlyZWN0aXZlcygpIGNvbnN0OwogCi0gICAgbXV0YWJsZSBib29sIG1faGF2ZVBhcnNlZENhY2hl
Q29udHJvbCA6IDE7Ci0gICAgbXV0YWJsZSBib29sIG1fY2FjaGVDb250cm9sQ29udGFpbnNNdXN0
UmV2YWxpZGF0ZSA6IDE7CisgICAgbXV0YWJsZSBib29sIG1faGF2ZVBhcnNlZENhY2hlQ29udHJv
bEhlYWRlciA6IDE7CisgICAgbXV0YWJsZSBib29sIG1faGF2ZVBhcnNlZEFnZUhlYWRlciA6IDE7
CisgICAgbXV0YWJsZSBib29sIG1faGF2ZVBhcnNlZERhdGVIZWFkZXIgOiAxOworICAgIG11dGFi
bGUgYm9vbCBtX2hhdmVQYXJzZWRFeHBpcmVzSGVhZGVyIDogMTsKKyAgICBtdXRhYmxlIGJvb2wg
bV9oYXZlUGFyc2VkTGFzdE1vZGlmaWVkSGVhZGVyIDogMTsKKwogICAgIG11dGFibGUgYm9vbCBt
X2NhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZSA6IDE7CisgICAgbXV0YWJsZSBib29sIG1fY2Fj
aGVDb250cm9sQ29udGFpbnNNdXN0UmV2YWxpZGF0ZSA6IDE7CisgICAgbXV0YWJsZSBkb3VibGUg
bV9jYWNoZUNvbnRyb2xNYXhBZ2U7CisKKyAgICBtdXRhYmxlIGRvdWJsZSBtX2FnZTsKKyAgICBt
dXRhYmxlIGRvdWJsZSBtX2RhdGU7CisgICAgbXV0YWJsZSBkb3VibGUgbV9leHBpcmVzOworICAg
IG11dGFibGUgZG91YmxlIG1fbGFzdE1vZGlmaWVkOwogfTsKIAogaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBhLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBi
KSB7IHJldHVybiBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6Y29tcGFyZShhLCBiKTsgfQpAQCAtMTcx
LDExICsxNTEsNiBAQCBzdHJ1Y3QgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YSB7CiAg
ICAgaW50IG1faHR0cFN0YXR1c0NvZGU7CiAgICAgU3RyaW5nIG1faHR0cFN0YXR1c1RleHQ7CiAg
ICAgT3duUHRyPENyb3NzVGhyZWFkSFRUUEhlYWRlck1hcERhdGE+IG1faHR0cEhlYWRlcnM7Ci0g
ICAgdGltZV90IG1fZXhwaXJhdGlvbkRhdGU7Ci0gICAgdGltZV90IG1fbGFzdE1vZGlmaWVkRGF0
ZTsKLSAgICBib29sIG1faGF2ZVBhcnNlZENhY2hlQ29udHJvbCA6IDE7Ci0gICAgYm9vbCBtX2Nh
Y2hlQ29udHJvbENvbnRhaW5zTXVzdFJldmFsaWRhdGUgOiAxOwotICAgIGJvb2wgbV9jYWNoZUNv
bnRyb2xDb250YWluc05vQ2FjaGUgOiAxOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVzcG9uc2VDRk5ldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVz
cG9uc2VDRk5ldC5jcHAJKHJldmlzaW9uIDQ0Mzk2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NmL1Jlc291cmNlUmVzcG9uc2VDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDkg
Kzc5LDYgQEAgdm9pZCBSZXNvdXJjZVJlc3BvbnNlOjpwbGF0Zm9ybUxhenlJbml0KAogICAgIG1f
ZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gQ0ZVUkxSZXNwb25zZUdldEV4cGVjdGVkQ29udGVudExl
bmd0aChtX2NmUmVzcG9uc2UuZ2V0KCkpOwogICAgIG1fdGV4dEVuY29kaW5nTmFtZSA9IENGVVJM
UmVzcG9uc2VHZXRUZXh0RW5jb2RpbmdOYW1lKG1fY2ZSZXNwb25zZS5nZXQoKSk7CiAKLSAgICBt
X2V4cGlyYXRpb25EYXRlID0gdG9UaW1lVChDRlVSTFJlc3BvbnNlR2V0RXhwaXJhdGlvblRpbWUo
bV9jZlJlc3BvbnNlLmdldCgpKSk7Ci0gICAgbV9sYXN0TW9kaWZpZWREYXRlID0gdG9UaW1lVChD
RlVSTFJlc3BvbnNlR2V0TGFzdE1vZGlmaWVkRGF0ZShtX2NmUmVzcG9uc2UuZ2V0KCkpKTsKLQog
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc3VnZ2VzdGVkRmlsZW5hbWUoQWRvcHRDRiwgQ0ZV
UkxSZXNwb25zZUNvcHlTdWdnZXN0ZWRGaWxlbmFtZShtX2NmUmVzcG9uc2UuZ2V0KCkpKTsKICAg
ICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWUuZ2V0KCk7CiAKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXNwb25zZU1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVzcG9uc2VN
YWMubW0JKHJldmlzaW9uIDQ0Mzk2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9S
ZXNvdXJjZVJlc3BvbnNlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03NCwxMiArNzQsNiBAQCB2
b2lkIFJlc291cmNlUmVzcG9uc2U6OnBsYXRmb3JtTGF6eUluaXQoCiAgICAgbV90ZXh0RW5jb2Rp
bmdOYW1lID0gW21fbnNSZXNwb25zZS5nZXQoKSB0ZXh0RW5jb2RpbmdOYW1lXTsKICAgICBtX3N1
Z2dlc3RlZEZpbGVuYW1lID0gW21fbnNSZXNwb25zZS5nZXQoKSBzdWdnZXN0ZWRGaWxlbmFtZV07
CiAgICAgCi0gICAgY29uc3QgdGltZV90IG1heFRpbWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHRp
bWVfdD46Om1heCgpOwotICAgIAotICAgIE5TVGltZUludGVydmFsIGV4cGlyYXRpb24gPSBbbV9u
c1Jlc3BvbnNlLmdldCgpIF9jYWxjdWxhdGVkRXhwaXJhdGlvbl07Ci0gICAgZXhwaXJhdGlvbiAr
PSBrQ0ZBYnNvbHV0ZVRpbWVJbnRlcnZhbFNpbmNlMTk3MDsKLSAgICBtX2V4cGlyYXRpb25EYXRl
ID0gZXhwaXJhdGlvbiA+IG1heFRpbWUgPyBtYXhUaW1lIDogc3RhdGljX2Nhc3Q8dGltZV90Pihl
eHBpcmF0aW9uKTsKLSAgICAKICAgICBpZiAoW21fbnNSZXNwb25zZS5nZXQoKSBpc0tpbmRPZkNs
YXNzOltOU0hUVFBVUkxSZXNwb25zZSBjbGFzc11dKSB7CiAgICAgICAgIE5TSFRUUFVSTFJlc3Bv
bnNlICpodHRwUmVzcG9uc2UgPSAoTlNIVFRQVVJMUmVzcG9uc2UgKiltX25zUmVzcG9uc2UuZ2V0
KCk7CiAgICAgICAgIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDQ0MDApCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNiBAQAorMjAwOS0wNi0wMyAgQW50
dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTMxMjgKKyAgICAgICAgU2FmYXJpIG5vdCBvYmV5aW5nIGNhY2hlIGhl
YWRlcgorICAgICAgICAKKyAgICAgICAgVGVzdCBzdWJyZXNvdXJjZSBjYWNoaW5nIGFuZCBleHBp
cmF0aW9uLgorCisgICAgICAgICogaHR0cC90ZXN0cy9jYWNoZTogQWRkZWQuCisgICAgICAgICog
aHR0cC90ZXN0cy9jYWNoZS9yZXNvdXJjZXM6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMv
Y2FjaGUvcmVzb3VyY2VzL2NhY2hlLXNpbXVsYXRvci5jZ2k6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMvY2FjaGUvcmVzb3VyY2VzL3N1YnJlc291cmNlLXRlc3QuanM6IEFkZGVkLgorICAg
ICAgICAoZnJhbWUxLm9ubG9hZCk6CisgICAgICAgIChmcmFtZTIub25sb2FkKToKKyAgICAgICAg
KGxvYWRUZXN0RnJhbWUuc2NyLm9ubG9hZCk6CisgICAgICAgIChuZXh0VGVzdCk6CisgICAgICAg
ICh0ZXN0Q29tcGxldGUpOgorICAgICAgICAocnVuVGVzdHMpOgorICAgICAgICAqIGh0dHAvdGVz
dHMvY2FjaGUvcmVzb3VyY2VzL3Rlc3QtZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0
cC90ZXN0cy9jYWNoZS9zdWJyZXNvdXJjZS1leHBpcmF0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogaHR0cC90ZXN0cy9jYWNoZS9zdWJyZXNvdXJjZS1leHBpcmF0aW9uLmh0bWw6
IEFkZGVkLgorCiAyMDA5LTA2LTAzICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBNYXJrIFJvd2UuCkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2NhY2hlL3N1YnJlc291cmNlLWV4cGlyYXRpb24tZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUvc3VicmVzb3VyY2Ut
ZXhwaXJhdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2NhY2hlL3N1YnJlc291cmNlLWV4cGlyYXRpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDIwIEBACitObyBjYWNoZSBoZWFkZXJzIG9yIExhc3QtbW9kaWZpZWQg
aGVhZGVyIChyZXN1bHQ9VW5jYWNoZWQgZXhwZWN0ZWQ9VW5jYWNoZWQpIFBBU1MKK0xhc3QtbW9k
aWZpZWQ6IFtub3ctMzYwMHNdOyBbZGVsYXk9MS41c10gKHJlc3VsdD1DYWNoZWQgZXhwZWN0ZWQ9
Q2FjaGVkKSBQQVNTCitMYXN0LW1vZGlmaWVkOiBbbm93LTEwc107IFtkZWxheT0xLjVzXSAocmVz
dWx0PVVuY2FjaGVkIGV4cGVjdGVkPVVuY2FjaGVkKSBQQVNTCitMYXN0LW1vZGlmaWVkOiBbbm93
KzEwc107IChyZXN1bHQ9VW5jYWNoZWQgZXhwZWN0ZWQ9VW5jYWNoZWQpIFBBU1MKK0V4cGlyZXM6
IFtub3crMTBzXTsgKHJlc3VsdD1DYWNoZWQgZXhwZWN0ZWQ9Q2FjaGVkKSBQQVNTCitFeHBpcmVz
OiBbbm93LTEwc107IChyZXN1bHQ9VW5jYWNoZWQgZXhwZWN0ZWQ9VW5jYWNoZWQpIFBBU1MKK0V4
cGlyZXM6IFtub3crMTBzXTsgQ2FjaGUtY29udHJvbDogbXVzdC1yZXZhbGlkYXRlOyAocmVzdWx0
PUNhY2hlZCBleHBlY3RlZD1DYWNoZWQpIFBBU1MKK0V4cGlyZXM6IFtub3crMTBzXTsgQ2FjaGUt
Y29udHJvbDogbm8tY2FjaGU7IChyZXN1bHQ9VW5jYWNoZWQgZXhwZWN0ZWQ9VW5jYWNoZWQpIFBB
U1MKK0V4cGlyZXM6IFtub3crMTBzXTsgUHJhZ21hOiBuby1jYWNoZTsgKHJlc3VsdD1VbmNhY2hl
ZCBleHBlY3RlZD1VbmNhY2hlZCkgUEFTUworQ2FjaGUtY29udHJvbDogbWF4LWFnZT0xMDsgKHJl
c3VsdD1DYWNoZWQgZXhwZWN0ZWQ9Q2FjaGVkKSBQQVNTCitDYWNoZS1jb250cm9sOiBtYXgtYWdl
PTA7IChyZXN1bHQ9VW5jYWNoZWQgZXhwZWN0ZWQ9VW5jYWNoZWQpIFBBU1MKK0NhY2hlLWNvbnRy
b2w6IG1heC1hZ2U9MTsgW2RlbGF5PTEuNXNdIChyZXN1bHQ9VW5jYWNoZWQgZXhwZWN0ZWQ9VW5j
YWNoZWQpIFBBU1MKK0NhY2hlLWNvbnRyb2w6IG1heC1hZ2U9MTAsIG5vLWNhY2hlOyAocmVzdWx0
PVVuY2FjaGVkIGV4cGVjdGVkPVVuY2FjaGVkKSBQQVNTCitDYWNoZS1jb250cm9sOiBtYXgtYWdl
PTEwLCBuby1jYWNoZT0iU2V0LUNvb2tpZSI7IChyZXN1bHQ9Q2FjaGVkIGV4cGVjdGVkPUNhY2hl
ZCkgUEFTUworQ2FjaGUtY29udHJvbDogbWF4LWFnZT0xMCwgbXVzdC1yZXZhbGlkYXRlIjsgKHJl
c3VsdD1DYWNoZWQgZXhwZWN0ZWQ9Q2FjaGVkKSBQQVNTCitBZ2U6IDEwMDsgQ2FjaGUtY29udHJv
bDogbWF4LWFnZT0xMDsgKHJlc3VsdD1VbmNhY2hlZCBleHBlY3RlZD1VbmNhY2hlZCkgUEFTUwor
QWdlOiAxOyBDYWNoZS1jb250cm9sOiBtYXgtYWdlPTEwOyAocmVzdWx0PUNhY2hlZCBleHBlY3Rl
ZD1DYWNoZWQpIFBBU1MKK0NhY2hlLWNvbnRyb2w6IG1heC1hZ2U9MTA7IFByYWdtYTogbm8tY2Fj
aGU7IChyZXN1bHQ9VW5jYWNoZWQgZXhwZWN0ZWQ9VW5jYWNoZWQpIFBBU1MKK0V4cGlyZXM6IFtu
b3ctMTBzXTsgQ2FjaGUtY29udHJvbDogbWF4LWFnZT0xMDsgKHJlc3VsdD1DYWNoZWQgZXhwZWN0
ZWQ9Q2FjaGVkKSBQQVNTCitFeHBpcmVzOiBbbm93KzEwc107IENhY2hlLWNvbnRyb2w6IG1heC1h
Z2U9MDsgKHJlc3VsdD1VbmNhY2hlZCBleHBlY3RlZD1VbmNhY2hlZCkgUEFTUwpJbmRleDogTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS9zdWJyZXNvdXJjZS1leHBpcmF0aW9uLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS9zdWJyZXNvdXJjZS1leHBp
cmF0aW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hl
L3N1YnJlc291cmNlLWV4cGlyYXRpb24uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzkg
QEAKKzxib2R5PgorPHNjcmlwdCBzcmM9cmVzb3VyY2VzL3N1YnJlc291cmNlLXRlc3QuanM+PC9z
Y3JpcHQ+Cis8c2NyaXB0PgorCit0ZXN0cyA9IFsKKyAgICB7CisgICAgICAgIGRlc2NyaXB0aW9u
OiAnTm8gY2FjaGUgaGVhZGVycyBvciBMYXN0LW1vZGlmaWVkIGhlYWRlcicsCisgICAgICAgIGV4
cGVjdGVkUmVzdWx0OiAnVW5jYWNoZWQnLAorICAgIH0sCisgICAgeworICAgICAgICBleHBlY3Rl
ZFJlc3VsdDogJ0NhY2hlZCcsCisgICAgICAgIHRlc3RIZWFkZXJzOiB7CisgICAgICAgICAgICAn
TGFzdC1tb2RpZmllZCc6ICdbbm93LTM2MDBzXScsCisgICAgICAgIH0sCisgICAgICAgIGRlbGF5
OiAxLjUKKyAgICB9LAorICAgIHsKKyAgICAgICAgZXhwZWN0ZWRSZXN1bHQ6ICdVbmNhY2hlZCcs
CisgICAgICAgIHRlc3RIZWFkZXJzOiB7CisgICAgICAgICAgICAnTGFzdC1tb2RpZmllZCc6ICdb
bm93LTEwc10nLAorICAgICAgICB9LAorICAgICAgICBkZWxheTogMS41CisgICAgfSwKKyAgICB7
CisgICAgICAgIGV4cGVjdGVkUmVzdWx0OiAnVW5jYWNoZWQnLAorICAgICAgICB0ZXN0SGVhZGVy
czogeworICAgICAgICAgICAgJ0xhc3QtbW9kaWZpZWQnOiAnW25vdysxMHNdJywKKyAgICAgICAg
fQorICAgIH0sCisgICAgeworICAgICAgICBleHBlY3RlZFJlc3VsdDogJ0NhY2hlZCcsCisgICAg
ICAgIHRlc3RIZWFkZXJzOiB7CisgICAgICAgICAgICAnRXhwaXJlcyc6ICdbbm93KzEwc10nLAor
ICAgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAgIGV4cGVjdGVkUmVzdWx0OiAnVW5jYWNo
ZWQnLAorICAgICAgICB0ZXN0SGVhZGVyczogeworICAgICAgICAgICAgJ0V4cGlyZXMnOiAnW25v
dy0xMHNdJywKKyAgICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgICBleHBlY3RlZFJlc3Vs
dDogJ0NhY2hlZCcsCisgICAgICAgIHRlc3RIZWFkZXJzOiB7CisgICAgICAgICAgICAnRXhwaXJl
cyc6ICdbbm93KzEwc10nLAorICAgICAgICAgICAgJ0NhY2hlLWNvbnRyb2wnOiAnbXVzdC1yZXZh
bGlkYXRlJywKKyAgICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgICBleHBlY3RlZFJlc3Vs
dDogJ1VuY2FjaGVkJywKKyAgICAgICAgdGVzdEhlYWRlcnM6IHsKKyAgICAgICAgICAgICdFeHBp
cmVzJzogJ1tub3crMTBzXScsCisgICAgICAgICAgICAnQ2FjaGUtY29udHJvbCc6ICduby1jYWNo
ZScsCisgICAgICAgIH0KKyAgICB9LAorICAgIHsKKyAgICAgICAgZXhwZWN0ZWRSZXN1bHQ6ICdV
bmNhY2hlZCcsCisgICAgICAgIHRlc3RIZWFkZXJzOiB7CisgICAgICAgICAgICAnRXhwaXJlcyc6
ICdbbm93KzEwc10nLAorICAgICAgICAgICAgJ1ByYWdtYSc6ICduby1jYWNoZScsCisgICAgICAg
IH0KKyAgICB9LAorICAgIHsKKyAgICAgICAgZXhwZWN0ZWRSZXN1bHQ6ICdDYWNoZWQnLAorICAg
ICAgICB0ZXN0SGVhZGVyczogeworICAgICAgICAgICAgJ0NhY2hlLWNvbnRyb2wnOiAnbWF4LWFn
ZT0xMCcsCisgICAgICAgIH0KKyAgICB9LAorICAgIHsKKyAgICAgICAgZXhwZWN0ZWRSZXN1bHQ6
ICdVbmNhY2hlZCcsCisgICAgICAgIHRlc3RIZWFkZXJzOiB7CisgICAgICAgICAgICAnQ2FjaGUt
Y29udHJvbCc6ICdtYXgtYWdlPTAnLAorICAgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAg
IGV4cGVjdGVkUmVzdWx0OiAnVW5jYWNoZWQnLAorICAgICAgICB0ZXN0SGVhZGVyczogeworICAg
ICAgICAgICAgJ0NhY2hlLWNvbnRyb2wnOiAnbWF4LWFnZT0xJywKKyAgICAgICAgfSwKKyAgICAg
ICAgZGVsYXk6IDEuNQorICAgIH0sCisgICAgeworICAgICAgICBleHBlY3RlZFJlc3VsdDogJ1Vu
Y2FjaGVkJywKKyAgICAgICAgdGVzdEhlYWRlcnM6IHsKKyAgICAgICAgICAgICdDYWNoZS1jb250
cm9sJzogJ21heC1hZ2U9MTAsIG5vLWNhY2hlJywKKyAgICAgICAgfQorICAgIH0sCisgICAgewor
ICAgICAgICBleHBlY3RlZFJlc3VsdDogJ0NhY2hlZCcsCisgICAgICAgIHRlc3RIZWFkZXJzOiB7
CisgICAgICAgICAgICAnQ2FjaGUtY29udHJvbCc6ICdtYXgtYWdlPTEwLCBuby1jYWNoZT0iU2V0
LUNvb2tpZSInLAorICAgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAgIGV4cGVjdGVkUmVz
dWx0OiAnQ2FjaGVkJywKKyAgICAgICAgdGVzdEhlYWRlcnM6IHsKKyAgICAgICAgICAgICdDYWNo
ZS1jb250cm9sJzogJ21heC1hZ2U9MTAsIG11c3QtcmV2YWxpZGF0ZSInLAorICAgICAgICB9Cisg
ICAgfSwKKyAgICB7CisgICAgICAgIGV4cGVjdGVkUmVzdWx0OiAnVW5jYWNoZWQnLAorICAgICAg
ICB0ZXN0SGVhZGVyczogeworICAgICAgICAgICAgJ0FnZSc6ICcxMDAnLAorICAgICAgICAgICAg
J0NhY2hlLWNvbnRyb2wnOiAnbWF4LWFnZT0xMCcsCisgICAgICAgIH0KKyAgICB9LAorICAgIHsK
KyAgICAgICAgZXhwZWN0ZWRSZXN1bHQ6ICdDYWNoZWQnLAorICAgICAgICB0ZXN0SGVhZGVyczog
eworICAgICAgICAgICAgJ0FnZSc6ICcxJywKKyAgICAgICAgICAgICdDYWNoZS1jb250cm9sJzog
J21heC1hZ2U9MTAnLAorICAgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAgIGV4cGVjdGVk
UmVzdWx0OiAnVW5jYWNoZWQnLAorICAgICAgICB0ZXN0SGVhZGVyczogeworICAgICAgICAgICAg
J0NhY2hlLWNvbnRyb2wnOiAnbWF4LWFnZT0xMCcsCisgICAgICAgICAgICAnUHJhZ21hJzogJ25v
LWNhY2hlJywKKyAgICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgICBleHBlY3RlZFJlc3Vs
dDogJ0NhY2hlZCcsCisgICAgICAgIHRlc3RIZWFkZXJzOiB7CisgICAgICAgICAgICAnRXhwaXJl
cyc6ICdbbm93LTEwc10nLAorICAgICAgICAgICAgJ0NhY2hlLWNvbnRyb2wnOiAnbWF4LWFnZT0x
MCcKKyAgICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgICBleHBlY3RlZFJlc3VsdDogJ1Vu
Y2FjaGVkJywKKyAgICAgICAgdGVzdEhlYWRlcnM6IHsKKyAgICAgICAgICAgICdFeHBpcmVzJzog
J1tub3crMTBzXScsCisgICAgICAgICAgICAnQ2FjaGUtY29udHJvbCc6ICdtYXgtYWdlPTAnCisg
ICAgICAgIH0KKyAgICB9LAorXTsKKworcnVuVGVzdHMoKTsKKworPC9zY3JpcHQ+CkluZGV4OiBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlL3Jlc291cmNlcy9jYWNoZS1zaW11bGF0b3IuY2dp
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUvcmVzb3VyY2VzL2Nh
Y2hlLXNpbXVsYXRvci5jZ2kJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2NhY2hlL3Jlc291cmNlcy9jYWNoZS1zaW11bGF0b3IuY2dpCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDIwIEBACisjIS91c3IvYmluL3BlcmwgLXcKKwordXNlIENHSTsKK3VzZSBIVFRQOjpEYXRl
OworCitwcmludCAiQ29udGVudC10eXBlOiB0ZXh0L2phdmFzY3JpcHRcbiI7IAorCitteSAkcXVl
cnkgPSBuZXcgQ0dJOworQG5hbWVzID0gJHF1ZXJ5LT5wYXJhbTsKK2ZvcmVhY2ggKEBuYW1lcykg
eworICAgIG5leHQgaWYgKCRfIGVxICJ1bmlxdWVJZCIpOworICAgIHByaW50ICRfIC4gIjogIiAu
ICRxdWVyeS0+cGFyYW0oJF8pIC4gIlxuIjsKK30KKworbXkgJHJhbmRvbV9udW1iZXIgPSBpbnQo
cmFuZCgxMDAwMDAwMDAwMDAwKSk7CisjIGluY2x1ZGUgcmFuZGFtIGV0YWcgdG8gc3RvcCBhcGFj
aGUgZnJvbSBkb2luZyBhbnkgY2FjaGluZworcHJpbnQgIkVUYWc6ICIgLiAkcmFuZG9tX251bWJl
ciAuICJcbiI7CitwcmludCAiXG4iOworCitwcmludCAicmFuZG9tTnVtYmVyID0gIiAuICRyYW5k
b21fbnVtYmVyIC4gIjtcbiI7CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2NhY2hlL3Jlc291cmNlcy9jYWNoZS1zaW11bGF0b3IuY2dpCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFt
ZTogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9j
YWNoZS9yZXNvdXJjZXMvc3VicmVzb3VyY2UtdGVzdC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2NhY2hlL3Jlc291cmNlcy9zdWJyZXNvdXJjZS10ZXN0LmpzCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS9yZXNvdXJjZXMvc3VicmVz
b3VyY2UtdGVzdC5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTAgQEAKK2lmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCit2
YXIgY3VycmVudFRlc3Q7Cit2YXIgdGVzdHM7Cit2YXIgdW5pcXVlSWQ7Cit2YXIgbm93OworCit2
YXIgbG9hZGVkRnJhbWVDb3VudCA9IDA7CisKK3ZhciBmcmFtZTEgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdpZnJhbWUnKTsKK2ZyYW1lMS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ3Zpc2liaWxp
dHk6aGlkZGVuO3dpZHRoOjA7aGVpZ2h0OjAnKTsKK2ZyYW1lMS5zZXRBdHRyaWJ1dGUoJ3NyYycs
ICdyZXNvdXJjZXMvdGVzdC1mcmFtZS5odG1sJyk7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KGZyYW1lMSk7CitmcmFtZTEub25sb2FkID0gZnVuY3Rpb24gKCkgeyBsb2FkZWRGcmFtZUNvdW50
Kys7IH0KKwordmFyIGZyYW1lMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOwor
ZnJhbWUyLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAndmlzaWJpbGl0eTpoaWRkZW47d2lkdGg6MDto
ZWlnaHQ6MCcpOworZnJhbWUyLnNldEF0dHJpYnV0ZSgnc3JjJywgJ3Jlc291cmNlcy90ZXN0LWZy
YW1lLmh0bWwnKTsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZnJhbWUyKTsKKwordmFyIGNv
bnNvbGVEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKK2RvY3VtZW50LmJvZHku
YXBwZW5kQ2hpbGQoY29uc29sZURpdik7CitmcmFtZTIub25sb2FkID0gZnVuY3Rpb24gKCkgeyBs
b2FkZWRGcmFtZUNvdW50Kys7IH0KKworZnVuY3Rpb24gbG9hZFRlc3RGcmFtZShmcmFtZSwgdGVz
dFNwZWMpCit7CisgICAgdmFyIGZpcnN0ID0gdHJ1ZTsKKyAgICB2YXIgcXVlcnlTdHJpbmcgPSAn
Y2FjaGUtc2ltdWxhdG9yLmNnaT91bmlxdWVJZD0nICsgdW5pcXVlSWQgKyAnJic7CisgICAgZm9y
ICh2YXIgaGVhZGVyIGluIHRlc3RTcGVjLnRlc3RIZWFkZXJzKSB7CisgICAgICAgIGlmICghZmly
c3QpCisgICAgICAgICAgICBxdWVyeVN0cmluZyArPSAnJic7CisgICAgICAgIHZhciB2YWx1ZSA9
IHRlc3RTcGVjLnRlc3RIZWFkZXJzW2hlYWRlcl07CisgICAgICAgIGlmICh2YWx1ZSA9PSAnW25v
dysxMHNdJykKKyAgICAgICAgICAgIHZhbHVlID0gbmV3IERhdGUobm93LmdldFRpbWUoKSArIDEw
ICogMTAwMCkudG9VVENTdHJpbmcoKTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gJ1tub3ct
MTBzXScpCisgICAgICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgLSAxMCAq
IDEwMDApLnRvVVRDU3RyaW5nKCk7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlID09ICdbbm93KzM2
MDBzXScpCisgICAgICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgKyAzNjAw
ICogMTAwMCkudG9VVENTdHJpbmcoKTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gJ1tub3ct
MzYwMHNdJykKKyAgICAgICAgICAgIHZhbHVlID0gbmV3IERhdGUobm93LmdldFRpbWUoKSAtIDM2
MDAgKiAxMDAwKS50b1VUQ1N0cmluZygpOworICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSAnW25v
d10nKQorICAgICAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZShub3cuZ2V0VGltZSgpKS50b1VUQ1N0
cmluZygpOworICAgICAgICBxdWVyeVN0cmluZyArPSBoZWFkZXIgKyAnPScgKyB2YWx1ZTsKKyAg
ICAgICAgZmlyc3QgPSBmYWxzZTsKKyAgICB9CisgICAgdmFyIGRvYyA9IGZyYW1lLmNvbnRlbnRE
b2N1bWVudDsKKyAgICB2YXIgaGVhZCA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcp
WzBdOworICAgIHZhciBzY3IgPSBkb2MuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CisgICAgaGVh
ZC5hcHBlbmRDaGlsZChzY3IpOworICAgIHNjci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7IHNldFRp
bWVvdXQoZnVuY3Rpb24gKCkgeyBmcmFtZUxvYWRlZChmcmFtZSwgdGVzdFNwZWMpOyB9LCAwKTsg
fQorICAgIHNjci5zZXRBdHRyaWJ1dGUoJ3NyYycsIHF1ZXJ5U3RyaW5nKTsKK30KKworZnVuY3Rp
b24gZnJhbWVMb2FkZWQoZnJhbWUsIHRlc3RTcGVjKQoreworICAgIGlmIChmcmFtZSA9PSBmcmFt
ZTEpIHsKKyAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IGxvYWRUZXN0RnJhbWUoZnJh
bWUyLCB0ZXN0U3BlYykgfSwgdGVzdFNwZWMuZGVsYXkgKiAxMDAwKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICB0ZXN0Q29tcGxldGUodGVzdFNwZWMpOworfQorCitmdW5jdGlvbiBuZXh0
VGVzdCgpCit7CisgICAgdmFyIHRlc3RTcGVjID0gdGVzdHNbY3VycmVudFRlc3RdOworICAgIHVu
aXF1ZUlkID0gTWF0aC5mbG9vcigxMDAwMDAwMDAgKiBNYXRoLnJhbmRvbSgpKTsKKyAgICBub3cg
PSBuZXcgRGF0ZSgpOworICAgIGlmICghdGVzdFNwZWMpIHsKKyAgICAgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5v
dGlmeURvbmUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBsb2FkVGVzdEZyYW1lKGZy
YW1lMSwgdGVzdFNwZWMpOworICAgIGN1cnJlbnRUZXN0Kys7Cit9CisKK2Z1bmN0aW9uIHRlc3RD
b21wbGV0ZSh0ZXN0U3BlYykKK3sKKyAgICB2YXIgbGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2RpdicpOworICAgIHZhciByZXN1bHQgPSBmcmFtZTEuY29udGVudFdpbmRvdy5yYW5kb21O
dW1iZXIgPT0gZnJhbWUyLmNvbnRlbnRXaW5kb3cucmFuZG9tTnVtYmVyID8gJ0NhY2hlZCcgOiAn
VW5jYWNoZWQnOyAgICAKKyAgICB2YXIgcGFzc2VkID0gcmVzdWx0ID09IHRlc3RTcGVjLmV4cGVj
dGVkUmVzdWx0OworCisgICAgaWYgKHRlc3RTcGVjLmRlc2NyaXB0aW9uKQorICAgICAgICBsaW5l
LmlubmVySFRNTCArPSB0ZXN0U3BlYy5kZXNjcmlwdGlvbjsKKyAgICBlbHNlIHsKKyAgICAgICAg
Zm9yICh2YXIgaGVhZGVyIGluIHRlc3RTcGVjLnRlc3RIZWFkZXJzKSAKKyAgICAgICAgICAgIGxp
bmUuaW5uZXJIVE1MICs9IGhlYWRlciArICI6ICIgKyB0ZXN0U3BlYy50ZXN0SGVhZGVyc1toZWFk
ZXJdICsgIjsgIjsKKyAgICB9CisgICAgaWYgKHRlc3RTcGVjLmRlbGF5KQorICAgICAgICBsaW5l
LmlubmVySFRNTCArPSAiW2RlbGF5PSIgKyB0ZXN0U3BlYy5kZWxheSArICJzXSAiCisgICAgbGlu
ZS5pbm5lckhUTUwgKz0gIiAgKHJlc3VsdD0iICsgcmVzdWx0ICsgIiBleHBlY3RlZD0iICsgdGVz
dFNwZWMuZXhwZWN0ZWRSZXN1bHQgKyAiKSAiOworICAgIGxpbmUuaW5uZXJIVE1MICs9IHBhc3Nl
ZCA/ICI8Zm9udCBjb2xvcj1ncmVlbj5QQVNTPC9mb250PiAiIDogIjxmb250IGNvbG9yPXJlZD5G
QUlMPC9mb250PiAiCisgICAgICAgIAorICAgIGNvbnNvbGVEaXYuYXBwZW5kQ2hpbGQobGluZSk7
CisgICAgCisgICAgbmV4dFRlc3QoKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdHMoKQoreworICAg
IGN1cnJlbnRUZXN0ID0gMDsKKyAgICBpZiAobG9hZGVkRnJhbWVDb3VudD09MikKKyAgICAgICAg
bmV4dFRlc3QoKTsKKyAgICBlbHNlCisgICAgICAgIHNldFRpbWVvdXQocnVuVGVzdHMsIDEwMCk7
CisKK30KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUvcmVzb3VyY2VzL3Rlc3Qt
ZnJhbWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlL3Jl
c291cmNlcy90ZXN0LWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2NhY2hlL3Jlc291cmNlcy90ZXN0LWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMyBAQAorPHNjcmlwdD4KK3ZhciByYW5kb21OdW1iZXIgPSAwOworPC9zY3JpcHQ+Cg==
</data>
<flag name="review"
          id="15721"
          type_id="1"
          status="+"
          setter="ddkilzer"
    />
          </attachment>
      

    </bug>

</bugzilla>