<?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>16855</bug_id>
          
          <creation_ts>2008-01-12 11:02:30 -0800</creation_ts>
          <short_desc>Multiple correctness issues with javascript URLs</short_desc>
          <delta_ts>2024-01-10 13:16:41 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Frames</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc>http://crypto.stanford.edu/~abarth/research/webkit/jstests/</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>ahmad.saleem792</cc>
    
    <cc>annevk</cc>
    
    <cc>ap</cc>
    
    <cc>collinj</cc>
    
    <cc>emacemac7</cc>
    
    <cc>ian.eng.webkit</cc>
    
    <cc>mal</cc>
    
    <cc>michaeln</cc>
    
    <cc>mitz</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>67049</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-01-12 11:02:30 -0800</bug_when>
    <thetext>WebKit&apos;s implementation of javascript URLs has a number of bugs:

1) Targeted hyperlinks and forms to javascript URLs do not run in the targeted window.  (Instead, the run in the window with the hyperlink or form.)  Note, be careful to check that the active frame is allowed to script the target frame before executing these javascript URLs.

2) javascript URL only replace the current document if they return a primitive string.  They should replace the document if they return a non-undefined value.

3) As of r29432, some methods of invoking javascript URLs do not replaced the document when they return a value.

4) One implementation of FrameLoader::urlSelected executes javascript: URLs, but the other does not.  I don&apos;t know how to poke this, but it seems like a bug.

I&apos;ll attach LayoutTests shortly (They are also hosted at &lt;http://crypto.stanford.edu/~abarth/research/webkit/jstests/&gt;).  Compare their behavior in WebKit to their behavior in Firefox and IE7.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67050</commentid>
    <comment_count>1</comment_count>
      <attachid>18408</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-01-12 11:04:16 -0800</bug_when>
    <thetext>Created attachment 18408
LayoutTests for these issues

Attached are some layout tests for these issues.  These layout tests do not test for security, just for correctness.  (Also, they might need to be tweaked to run correctly in DRT.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67051</commentid>
    <comment_count>2</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-01-12 11:25:18 -0800</bug_when>
    <thetext>&lt;rdar://problem/5685381&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67067</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-01-12 14:27:53 -0800</bug_when>
    <thetext>See also: bug 9706.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70709</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-02-14 15:49:54 -0800</bug_when>
    <thetext>See also bug 17367 and bug 17368.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124414</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-06-04 17:15:55 -0700</bug_when>
    <thetext>Also see http://code.google.com/p/chromium/issues/detail?id=12161

Chrome has a P1 crashing bug around this. In cases where the script url constructs a document that initiates subresource loads as follows...

&lt;head&gt;
&lt;script language=&quot;JavaScript&quot;&gt;
  function FrameContents()
  {
    var doc = theFrame.document;
    doc.open();
    doc.write(&apos;&lt;img src=image.png&gt;&apos;);
    doc.close();
    return &quot;&quot;;
  }
&lt;/script&gt;
&lt;/head&gt;

&lt;frameset&gt;
  &lt;frame name=&quot;theFrame&quot; target=menu src=&quot;javascript:parent.FrameContents()&quot;&gt;
&lt;/frameset&gt;

I have a patch addresses both the crash and the correctness issue... the constructed document should take precedence of the script&apos;s return value in this case (IE and FF do that). </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124417</commentid>
    <comment_count>6</comment_count>
      <attachid>30975</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-06-04 17:20:42 -0700</bug_when>
    <thetext>Created attachment 30975
12161.1.txt

Here&apos;s the patch mentioned in the previous comment.

The crash I&apos;m seeing is because the Document (and relatives) is being deleted, but resource loads are still pending. The &apos;fix&apos; for that in here feels hacky. Seems like stopAllLoaders() should have taken care of things?

The fix for he correctness issue feels more correct to me.

All existing layout test pass with this patched in. I&apos;m looking into making additional layout test for javascript urls of this form.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124489</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-06-05 00:43:26 -0700</bug_when>
    <thetext>This really feels like it should be two patches:

1) A patch to fix the correctness issue (with a LayoutTest showing the different behavior).

2) A patch to fix the crasher (also with a LayoutTest showing the crasher is gone).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124525</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-06-05 08:51:06 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; This really feels like it should be two patches:
Ok.

&gt; crasher fix
I&apos;m not real happy with this change. Any loader gurus out there see a more appropriate answer?

A symptom of the problem is that after calling stopAllLoaders(), the existing docs DocLoader-&gt;m_requestCount field has not gone to zero.  The code that follows the stop call causes the existing doc to get blown away. The assertion in DocLoader&apos;s dtor fires at this point (ASSERT(m_requestCount == 0). At some later point, when those still active requests make progress of some kind, chrome crashes.

Should stopAllLoaders() also be responsible for terminating these requests too or not? If the intent was that it should terminate these requests too... i can make a change in there to ensure that it does so. Its just not clear to me if that is the intent of this method?

The crash is specific to chrome (perhaps browsers employing v8 more specifically). With safari (jsc), the sequence of events is different. I haven&apos;t drilled into where things are different just yet. I do know that if the pending requests are killed... crash fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124607</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-06-05 19:03:19 -0700</bug_when>
    <thetext>See bug 26230

I split that off for the chrome specific crasher instead of continuing to hijack this general issue for that specific one.

Also the stab at support for respecting programatically generate documents (in patch 12161.1.txt) seems like a good start... but its not sufficient... layout/rendering ceases immediate after the first frame to employ that technique. So we still have botched pages. I&apos;m dropping that to focus on the blocking crasher.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18408</attachid>
            <date>2008-01-12 11:04:16 -0800</date>
            <delta_ts>2010-06-10 17:33:53 -0700</delta_ts>
            <desc>LayoutTests for these issues</desc>
            <filename>navigation-tests.patch</filename>
            <type>text/plain</type>
            <size>22235</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDI5MDEwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMDctMTItMjcgIEFkYW0gQmFydGggIDxoazk1
NjVAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEltcHJvdmUgZnJhbWVOYXZpZ2F0aW9uIExheW91dFRlc3RzIHRvIGluY2x1ZGUgc29t
ZSBkZW5pZWQgY2FzZXMuCisKKyAgICAgICAgKiBDaGFuZ2VMb2c6CisgICAgICAgICogaHR0cC90
ZXN0cy9zZWN1cml0eS9mcmFtZU5hdmlnYXRpb24vbmF2aWdhdGlvbi1BTExPV0VELWRlc2NlbmRh
bnQuaHRtbDogQ29waWVkIGZyb20gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9mcmFt
ZU5hdmlnYXRpb24veHNzLUFMTE9XRUQtdGFyZ2V0ZWQtc3ViZnJhbWUtbmF2aWdhdGlvbi1jaGFu
Z2UuaHRtbC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L2ZyYW1lTmF2aWdhdGlvbi9u
YXZpZ2F0aW9uLUFMTE9XRUQtdG9wLmh0bWw6IENvcGllZCBmcm9tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvc2VjdXJpdHkvZnJhbWVOYXZpZ2F0aW9uL3hzcy1BTExPV0VELXBhcmVudC1uYXZpZ2F0
aW9uLWNoYW5nZS5odG1sLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvZnJhbWVOYXZp
Z2F0aW9uL25hdmlnYXRpb24tREVOSUVELXNpYmxpbmctZm9ybS1zdWJtaXQuaHRtbDogQWRkZWQu
CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9mcmFtZU5hdmlnYXRpb24vbmF2aWdhdGlv
bi1ERU5JRUQtc2libGluZy1sb2NhdGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rl
c3RzL3NlY3VyaXR5L2ZyYW1lTmF2aWdhdGlvbi9uYXZpZ2F0aW9uLURFTklFRC1zaWJsaW5nLXdp
bmRvdy1vcGVuLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvZnJh
bWVOYXZpZ2F0aW9uL3Jlc291cmNlcy9pZnJhbWUtdGhhdC1hc3NpZ25zLXBhcmVudC1sb2NhdGlv
bi5odG1sOiBDb3BpZWQgZnJvbSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2ZyYW1l
TmF2aWdhdGlvbi9yZXNvdXJjZXMvaWZyYW1lLXRoYXQtcGVyZm9ybXMtcGFyZW50LW5hdmlnYXRp
b24uaHRtbC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L2ZyYW1lTmF2aWdhdGlvbi9y
ZXNvdXJjZXMvaWZyYW1lLXRoYXQtYXNzaWducy10b3AtZnJhbWVzLTAtbG9jYXRpb24uaHRtbDog
QWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9mcmFtZU5hdmlnYXRpb24vcmVz
b3VyY2VzL2lmcmFtZS10aGF0LWNhbGxzLXdpbmRvdy1vcGVuLXRhcmdldC1mcmFtZS5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L2ZyYW1lTmF2aWdhdGlvbi9yZXNv
dXJjZXMvaWZyYW1lLXRoYXQtcGVyZm9ybXMtcGFyZW50LW5hdmlnYXRpb24uaHRtbDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L2ZyYW1lTmF2aWdhdGlvbi9yZXNvdXJj
ZXMvaWZyYW1lLXRoYXQtc3VibWl0cy1mb3JtLXRvLXRhcmdldC1mcmFtZS5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L2ZyYW1lTmF2aWdhdGlvbi9yZXNvdXJjZXMv
bmF2aWdhdGlvbi1jaGFuZ2VkLWlmcmFtZS5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvc2Vj
dXJpdHkvZnJhbWVOYXZpZ2F0aW9uL3hzcy1BTExPV0VELXBhcmVudC1uYXZpZ2F0aW9uLWNoYW5n
ZS1leHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9m
cmFtZU5hdmlnYXRpb24veHNzLUFMTE9XRUQtcGFyZW50LW5hdmlnYXRpb24tY2hhbmdlLmh0bWw6
IFJlbW92ZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS9mcmFtZU5hdmlnYXRpb24v
eHNzLUFMTE9XRUQtdGFyZ2V0ZWQtc3ViZnJhbWUtbmF2aWdhdGlvbi1jaGFuZ2UtZXhwZWN0ZWQu
dHh0OiBSZW1vdmVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvZnJhbWVOYXZpZ2F0
aW9uL3hzcy1BTExPV0VELXRhcmdldGVkLXN1YmZyYW1lLW5hdmlnYXRpb24tY2hhbmdlLmh0bWw6
IFJlbW92ZWQuCisKIDIwMDctMTItMjcgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KSW5kZXg6IExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkvZnJhbWVOYXZpZ2F0aW9uL25hdmlnYXRpb24tQUxMT1dFRC1kZXNj
ZW5kYW50Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0
eS9mcmFtZU5hdmlnYXRpb24vbmF2aWdhdGlvbi1BTExPV0VELWRlc2NlbmRhbnQuaHRtbAkocmV2
aXNpb24gMjkwMDkpCShmcm9tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvZnJhbWVO
YXZpZ2F0aW9uL3hzcy1BTExPV0VELXRhcmdldGVkLXN1YmZyYW1lLW5hdmlnYXRpb24tY2hhbmdl
Lmh0bWw6MjkwMDkpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2ZyYW1lTmF2
aWdhdGlvbi9uYXZpZ2F0aW9uLUFMTE9XRUQtZGVzY2VuZGFudC5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDQgQEAKKzxodG1sPgorPGhlYWQ+CisgICAgPHN0eWxlPgorICAgICAgICBp
ZnJhbWUgeyB3aWR0aDogNDAwcHg7IGhlaWdodDogMjAwcHg7fQorICAgIDwvc3R5bGU+CisgICAg
PHNjcmlwdD4KKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAg
ICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcENoaWxkRnJhbWVzQXNUZXh0KCk7CisgICAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIH0KKworICAg
ICAgICBmdW5jdGlvbiBsb2FkZWQoKQorICAgICAgICB7CisgICAgICAgICAgICBkb2N1bWVudC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgnaDQnKVswXS5pbm5lckhUTUwgPSBkb2N1bWVudC5kb21haW47
CisKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAg
ICAgICAgICAgICBzZXRUaW1lb3V0KHdhaXRGb3JGbGFnLCAxKTsKKyAgICAgICAgICAgICAgICBm
dW5jdGlvbiB3YWl0Rm9yRmxhZygpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFsYXlvdXRU
ZXN0Q29udHJvbGxlci5nbG9iYWxGbGFnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRU
aW1lb3V0KHdhaXRGb3JGbGFnLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmdsb2JhbEZsYWcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgcGVyZm9y
bVRlc3QoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBmdW5jdGlvbiBwZXJmb3JtVGVzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZh
ciBzdWJGcmFtZSA9IHdpbmRvdy5mcmFtZXNbMF07CisgICAgICAgICAgICBzdWJGcmFtZS5mcmFt
ZXNbMF0ubG9jYXRpb24gPSAiaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L2ZyYW1lTmF2
aWdhdGlvbi9yZXNvdXJjZXMvbmF2aWdhdGlvbi1jaGFuZ2VkLWlmcmFtZS5odG1sIjsKKyAgICAg
ICAgfQorICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJsb2FkZWQoKTsiPgor
ICAgIDxwPlRoaXMgdGVzdHMgdGhhdCBkb2N1bWVudHMgY2FuIG5hdmlnYXRlIHRoZSBsb2NhdGlv
biBvZiBhbnkgb2YgaXQncyBzdWItZnJhbWVzIHJlZ2FyZGxlc3Mgb2YgZG9tYWluLjwvcD4KKyAg
ICA8aDQ+RE9NQUlOPC9oND4KKyAgICA8aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAw
L3NlY3VyaXR5L2ZyYW1lTmF2aWdhdGlvbi9yZXNvdXJjZXMvaWZyYW1lLXdpdGgtaW5uZXItZnJh
bWUtb24tZm9yZWlnbi1kb21haW4uaHRtbCI+PC9pZnJhbWU+CisgICAgPGJ1dHRvbiBvbmNsaWNr
PSJwZXJmb3JtVGVzdCgpIj5QZXJmb3JtIFRlc3Q8L2J1dHRvbj4KKzwvYm9keT4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvZnJhbWVOYXZpZ2F0aW9uL25h
dmlnYXRpb24tQUxMT1dFRC10b3AuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L2ZyYW1lTmF2aWdhdGlvbi9uYXZpZ2F0aW9uLUFMTE9XRUQtdG9wLmh0
bWwJKHJldmlzaW9uIDI5MDA5KQkoZnJvbSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5
L2ZyYW1lTmF2aWdhdGlvbi94c3MtQUxMT1dFRC1wYXJlbnQtbmF2aWdhdGlvbi1jaGFuZ2UuaHRt
bDoyOTAwOSkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvZnJhbWVOYXZpZ2F0
aW9uL25hdmlnYXRpb24tQUxMT1dFRC10b3AuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDIzIEBACis8aHRtbD4KKzxoZWFkPgorICAgIDxzdHlsZT4KKyAgICAgICAgaWZyYW1lIHsgd2lk
dGg6IDQwMHB4OyBoZWlnaHQ6IDIwMHB4O30KKyAgICA8L3N0eWxlPgorICAgIDxzY3JpcHQ+Cisg
ICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9u
IGxvYWRlZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlU
YWdOYW1lKCdoNCcpWzBdLmlubmVySFRNTCA9IGRvY3VtZW50LmRvbWFpbjsKKyAgICAgICAgfQor
ICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJsb2FkZWQoKTsiPgorICAgIDxw
PlRoaXMgdGVzdHMgdGhhdCBkb2N1bWVudHMgY2FuIG5hdmlnYXRlIHRoZSBsb2NhdGlvbiBvZiBh
bnkgb2YgaXQncyBwYXJlbnQtZnJhbWVzIHJlZ2FyZGxlc3Mgb2YgZG9tYWluLjwvcD4KKyAgICA8
aDQ+RE9NQUlOPC9oND4KKyAgICA8aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3Nl
Y3VyaXR5L2ZyYW1lTmF2aWdhdGlvbi9yZXNvdXJjZXMvaWZyYW1lLXRoYXQtcGVyZm9ybXMtcGFy
ZW50LW5hdmlnYXRpb24uaHRtbCI+PC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2ZyYW1lTmF2aWdhdGlvbi9uYXZpZ2F0aW9u
LUFMTE9XRUQtdG9wLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9z
ZWN1cml0eS9mcmFtZU5hdmlnYXRpb24vbmF2aWdhdGlvbi1BTExPV0VELXRvcC5odG1sCShyZXZp
c2lvbiAyOTAwOSkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvZnJhbWVOYXZp
Z2F0aW9uL25hdmlnYXRpb24tQUxMT1dFRC10b3AuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTYs
OCArMTYsOCBAQAogICAgIDwvc2NyaXB0PgogPC9oZWFkPgogPGJvZHkgb25sb2FkPSJsb2FkZWQo
KTsiPgotICAgIDxwPlRoaXMgdGVzdHMgdGhhdCBkb2N1bWVudHMgY2FuIG5hdmlnYXRlIHRoZSBs
b2NhdGlvbiBvZiBhbnkgb2YgaXQncyBwYXJlbnQtZnJhbWVzIHJlZ2FyZGxlc3Mgb2YgZG9tYWlu
LjwvcD4KKyAgICA8cD5UaGlzIHRlc3RzIHRoYXQgZG9jdW1lbnRzIGNhbiBuYXZpZ2F0ZSB0aGUg
bG9jYXRpb24gb2YgdGhlIHRvcCBmcmFtZSwgcmVnYXJkbGVzcyBvZiBkb21haW4uPC9wPgogICAg
IDxoND5ET01BSU48L2g0PgotICAgIDxpZnJhbWUgc3JjPSJodHRwOi8vbG9jYWxob3N0OjgwMDAv
c2VjdXJpdHkvZnJhbWVOYXZpZ2F0aW9uL3Jlc291cmNlcy9pZnJhbWUtdGhhdC1wZXJmb3Jtcy1w
YXJlbnQtbmF2aWdhdGlvbi5odG1sIj48L2lmcmFtZT4KKyAgICA8aWZyYW1lIHNyYz0iaHR0cDov
L2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L2ZyYW1lTmF2aWdhdGlvbi9yZXNvdXJjZXMvaWZyYW1l
LXRoYXQtYXNzaWducy1wYXJlbnQtbG9jYXRpb24uaHRtbCI+PC9pZnJhbWU+CiA8L2JvZHk+CiA8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2ZyYW1lTmF2aWdh
dGlvbi9uYXZpZ2F0aW9uLURFTklFRC1zaWJsaW5nLWZvcm0tc3VibWl0Lmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9mcmFtZU5hdmlnYXRpb24vbmF2
aWdhdGlvbi1ERU5JRUQtc2libGluZy1mb3JtLXN1Ym1pdC5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9mcmFtZU5hdmlnYXRpb24vbmF2aWdhdGlv
bi1ERU5JRUQtc2libGluZy1mb3JtLXN1Ym1pdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDI5IEBACis8aHRtbD4KKzxoZWFkPgorICAgIDxzdHlsZT4KKyAgICAgICAgaWZyYW1lIHsgd2lk
dGg6IDQwMHB4OyBoZWlnaHQ6IDIwMHB4O30KKyAgICAgICAgLnZpY3RpbSB7IGJvcmRlcjogc29s
aWQgM3B4IHJlZDsgfQorICAgIDwvc3R5bGU+CisgICAgPHNjcmlwdD4KKyAgICAgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cENoaWxkRnJhbWVzQXNUZXh0KCk7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53
YWl0VW50aWxEb25lKCk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBsb2FkZWQoKQor
ICAgICAgICB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaDQn
KVswXS5pbm5lckhUTUwgPSBkb2N1bWVudC5kb21haW47CisKKyAgICAgICAgICAgIHZhciBhY3Rp
dmVGcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOworICAgICAgICAgICAg
YWN0aXZlRnJhbWUuc3JjID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS9mcmFtZU5h
dmlnYXRpb24vcmVzb3VyY2VzL2lmcmFtZS10aGF0LXN1Ym1pdHMtZm9ybS10by10YXJnZXQtZnJh
bWUuaHRtbCc7CisgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGFjdGl2ZUZy
YW1lKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJs
b2FkZWQoKTsiPgorICAgIDxoND5ET01BSU48L2g0PgorICAgIDxwPlRoaXMgdGVzdHMgdGhhdCBk
b2N1bWVudHMgY2Fubm90IG5hdmlnYXRlIHRoZWlyIHNpYmxpbmdzIGlmIHRoZXkgYXJlIG9uIGEg
ZGlmZmVyZW50IGRvbWFpbi48L3A+CisgICAgPGlmcmFtZSBjbGFzcz0idmljdGltIiBuYW1lPSJ0
YXJnZXRGcmFtZSIgc3JjPSJodHRwOi8vMTI3LjAuMC4xOjgwMDAvc2VjdXJpdHkvcmVzb3VyY2Vz
L2lubm9jZW50LXZpY3RpbS5odG1sIj48L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvZnJhbWVOYXZpZ2F0aW9uL25hdmlnYXRp
b24tREVOSUVELXNpYmxpbmctbG9jYXRpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2ZyYW1lTmF2aWdhdGlvbi9uYXZpZ2F0aW9uLURFTklFRC1z
aWJsaW5nLWxvY2F0aW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L2ZyYW1lTmF2aWdhdGlvbi9uYXZpZ2F0aW9uLURFTklFRC1zaWJsaW5nLWxv
Y2F0aW9uLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjkgQEAKKzxodG1sPgorPGhlYWQ+
CisgICAgPHN0eWxlPgorICAgICAgICBpZnJhbWUgeyB3aWR0aDogNDAwcHg7IGhlaWdodDogMjAw
cHg7fQorICAgICAgICAudmljdGltIHsgYm9yZGVyOiBzb2xpZCAzcHggcmVkOyB9CisgICAgPC9z
dHlsZT4KKyAgICA8c2NyaXB0PgorICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cisg
ICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQ2hpbGRGcmFtZXNBc1RleHQoKTsK
KyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGxvYWRlZCgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoNCcpWzBdLmlubmVySFRNTCA9IGRvY3Vt
ZW50LmRvbWFpbjsKKworICAgICAgICAgICAgdmFyIGFjdGl2ZUZyYW1lID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnaWZyYW1lJyk7CisgICAgICAgICAgICBhY3RpdmVGcmFtZS5zcmMgPSAnaHR0
cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L2ZyYW1lTmF2aWdhdGlvbi9yZXNvdXJjZXMvaWZy
YW1lLXRoYXQtYXNzaWducy10b3AtZnJhbWVzLTAtbG9jYXRpb24uaHRtbCc7CisgICAgICAgICAg
ICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGFjdGl2ZUZyYW1lKTsKKyAgICAgICAgfQorICAg
IDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJsb2FkZWQoKTsiPgorICAgIDxoND5E
T01BSU48L2g0PgorICAgIDxwPlRoaXMgdGVzdHMgdGhhdCBkb2N1bWVudHMgY2Fubm90IG5hdmln
YXRlIHRoZWlyIHNpYmxpbmdzIGlmIHRoZXkgYXJlIG9uIGEgZGlmZmVyZW50IGRvbWFpbi48L3A+
CisgICAgPGlmcmFtZSBjbGFzcz0idmljdGltIiBzcmM9Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9z
ZWN1cml0eS9yZXNvdXJjZXMvaW5ub2NlbnQtdmljdGltLmh0bWwiPjwvaWZyYW1lPgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9mcmFtZU5h
dmlnYXRpb24vbmF2aWdhdGlvbi1ERU5JRUQtc2libGluZy13aW5kb3ctb3Blbi5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvZnJhbWVOYXZpZ2F0aW9u
L25hdmlnYXRpb24tREVOSUVELXNpYmxpbmctd2luZG93LW9wZW4uaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvZnJhbWVOYXZpZ2F0aW9uL25hdmln
YXRpb24tREVOSUVELXNpYmxpbmctd2luZG93LW9wZW4uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyOSBAQAorPGh0bWw+Cis8aGVhZD4KKyAgICA8c3R5bGU+CisgICAgICAgIGlmcmFtZSB7
IHdpZHRoOiA0MDBweDsgaGVpZ2h0OiAyMDBweDt9CisgICAgICAgIC52aWN0aW0geyBib3JkZXI6
IHNvbGlkIDNweCByZWQ7IH0KKyAgICA8L3N0eWxlPgorICAgIDxzY3JpcHQ+CisgICAgICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmR1bXBDaGlsZEZyYW1lc0FzVGV4dCgpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gbG9hZGVk
KCkKKyAgICAgICAgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
J2g0JylbMF0uaW5uZXJIVE1MID0gZG9jdW1lbnQuZG9tYWluOworCisgICAgICAgICAgICB2YXIg
YWN0aXZlRnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKKyAgICAgICAg
ICAgIGFjdGl2ZUZyYW1lLnNyYyA9ICdodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkvZnJh
bWVOYXZpZ2F0aW9uL3Jlc291cmNlcy9pZnJhbWUtdGhhdC1jYWxscy13aW5kb3ctb3Blbi10YXJn
ZXQtZnJhbWUuaHRtbCc7CisgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGFj
dGl2ZUZyYW1lKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25s
b2FkPSJsb2FkZWQoKTsiPgorICAgIDxoND5ET01BSU48L2g0PgorICAgIDxwPlRoaXMgdGVzdHMg
dGhhdCBkb2N1bWVudHMgY2Fubm90IG5hdmlnYXRlIHRoZWlyIHNpYmxpbmdzIGlmIHRoZXkgYXJl
IG9uIGEgZGlmZmVyZW50IGRvbWFpbi48L3A+CisgICAgPGlmcmFtZSBjbGFzcz0idmljdGltIiBu
YW1lPSJ0YXJnZXRGcmFtZSIgc3JjPSJodHRwOi8vMTI3LjAuMC4xOjgwMDAvc2VjdXJpdHkvcmVz
b3VyY2VzL2lubm9jZW50LXZpY3RpbS5odG1sIj48L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvZnJhbWVOYXZpZ2F0aW9uL3hz
cy1BTExPV0VELXBhcmVudC1uYXZpZ2F0aW9uLWNoYW5nZS1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9mcmFtZU5hdmlnYXRpb24veHNz
LUFMTE9XRUQtcGFyZW50LW5hdmlnYXRpb24tY2hhbmdlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MjkwMDkpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2ZyYW1lTmF2aWdhdGlv
bi94c3MtQUxMT1dFRC1wYXJlbnQtbmF2aWdhdGlvbi1jaGFuZ2UtZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzAsMCBAQAotbG9jYWxob3N0Ci0KLVBBU1NFRDogTmF2aWdhdGlv
biBzdWNjZWVkZWQuCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2ZyYW1l
TmF2aWdhdGlvbi94c3MtQUxMT1dFRC1wYXJlbnQtbmF2aWdhdGlvbi1jaGFuZ2UuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2ZyYW1lTmF2aWdhdGlv
bi94c3MtQUxMT1dFRC1wYXJlbnQtbmF2aWdhdGlvbi1jaGFuZ2UuaHRtbAkocmV2aXNpb24gMjkw
MDkpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2ZyYW1lTmF2aWdhdGlvbi94
c3MtQUxMT1dFRC1wYXJlbnQtbmF2aWdhdGlvbi1jaGFuZ2UuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMSwyMyArMCwwIEBACi08aHRtbD4KLTxoZWFkPgotICAgIDxzdHlsZT4KLSAgICAgICAgaWZy
YW1lIHsgd2lkdGg6IDQwMHB4OyBoZWlnaHQ6IDIwMHB4O30KLSAgICA8L3N0eWxlPgotICAgIDxz
Y3JpcHQ+Ci0gICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKLSAgICAg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKLSAgICAgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGZ1bmN0aW9uIGxvYWRlZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCdoNCcpWzBdLmlubmVySFRNTCA9IGRvY3VtZW50LmRvbWFpbjsKLSAg
ICAgICAgfQotICAgIDwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgb25sb2FkPSJsb2FkZWQoKTsi
PgotICAgIDxwPlRoaXMgdGVzdHMgdGhhdCBkb2N1bWVudHMgY2FuIG5hdmlnYXRlIHRoZSBsb2Nh
dGlvbiBvZiBhbnkgb2YgaXQncyBwYXJlbnQtZnJhbWVzIHJlZ2FyZGxlc3Mgb2YgZG9tYWluLjwv
cD4KLSAgICA8aDQ+RE9NQUlOPC9oND4KLSAgICA8aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9z
dDo4MDAwL3NlY3VyaXR5L2ZyYW1lTmF2aWdhdGlvbi9yZXNvdXJjZXMvaWZyYW1lLXRoYXQtcGVy
Zm9ybXMtcGFyZW50LW5hdmlnYXRpb24uaHRtbCI+PC9pZnJhbWU+Ci08L2JvZHk+Ci08L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2ZyYW1lTmF2aWdhdGlvbi94
c3MtQUxMT1dFRC10YXJnZXRlZC1zdWJmcmFtZS1uYXZpZ2F0aW9uLWNoYW5nZS1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9mcmFtZU5h
dmlnYXRpb24veHNzLUFMTE9XRUQtdGFyZ2V0ZWQtc3ViZnJhbWUtbmF2aWdhdGlvbi1jaGFuZ2Ut
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyOTAwOSkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
c2VjdXJpdHkvZnJhbWVOYXZpZ2F0aW9uL3hzcy1BTExPV0VELXRhcmdldGVkLXN1YmZyYW1lLW5h
dmlnYXRpb24tY2hhbmdlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwxOSArMCww
IEBACi1UaGlzIHRlc3RzIHRoYXQgZG9jdW1lbnRzIGNhbiBuYXZpZ2F0ZSB0aGUgbG9jYXRpb24g
b2YgYW55IG9mIGl0J3Mgc3ViLWZyYW1lcyByZWdhcmRsZXNzIG9mIGRvbWFpbi4KLQotMTI3LjAu
MC4xCi0KLSAgUGVyZm9ybSBUZXN0Ci0KLS0tLS0tLS0tCi1GcmFtZTogJzwhLS1mcmFtZVBhdGgg
Ly88IS0tZnJhbWUwLS0+LS0+JwotLS0tLS0tLS0KLWxvY2FsaG9zdAotCi0KLQotLS0tLS0tLS0K
LUZyYW1lOiAndGFyZ2V0RnJhbWUnCi0tLS0tLS0tLQotbG9jYWxob3N0Ci0KLVBBU1NFRDogTmF2
aWdhdGlvbiBzdWNjZWVkZWQuCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5
L2ZyYW1lTmF2aWdhdGlvbi94c3MtQUxMT1dFRC10YXJnZXRlZC1zdWJmcmFtZS1uYXZpZ2F0aW9u
LWNoYW5nZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJp
dHkvZnJhbWVOYXZpZ2F0aW9uL3hzcy1BTExPV0VELXRhcmdldGVkLXN1YmZyYW1lLW5hdmlnYXRp
b24tY2hhbmdlLmh0bWwJKHJldmlzaW9uIDI5MDA5KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9zZWN1cml0eS9mcmFtZU5hdmlnYXRpb24veHNzLUFMTE9XRUQtdGFyZ2V0ZWQtc3ViZnJhbWUt
bmF2aWdhdGlvbi1jaGFuZ2UuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSw0NCArMCwwIEBACi08
aHRtbD4KLTxoZWFkPgotICAgIDxzdHlsZT4KLSAgICAgICAgaWZyYW1lIHsgd2lkdGg6IDQwMHB4
OyBoZWlnaHQ6IDIwMHB4O30KLSAgICA8L3N0eWxlPgotICAgIDxzY3JpcHQ+Ci0gICAgICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKLSAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKLSAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmR1bXBDaGlsZEZyYW1lc0FzVGV4dCgpOwotICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gbG9hZGVk
KCkKLSAgICAgICAgewotICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
J2g0JylbMF0uaW5uZXJIVE1MID0gZG9jdW1lbnQuZG9tYWluOwotCi0gICAgICAgICAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Ci0gICAgICAgICAgICAgICAgc2V0VGltZW91
dCh3YWl0Rm9yRmxhZywgMSk7Ci0gICAgICAgICAgICAgICAgZnVuY3Rpb24gd2FpdEZvckZsYWco
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbGF5b3V0VGVzdENvbnRyb2xsZXIuZ2xvYmFs
RmxhZykgewotICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCh3YWl0Rm9yRmxhZywg
MSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5nbG9iYWxGbGFn
ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHBlcmZvcm1UZXN0KCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gcGVy
Zm9ybVRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgc3ViRnJhbWUgPSB3aW5kb3cu
ZnJhbWVzWzBdOwotICAgICAgICAgICAgc3ViRnJhbWUuZnJhbWVzWzBdLmxvY2F0aW9uID0gImh0
dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS9mcmFtZU5hdmlnYXRpb24vcmVzb3VyY2VzL25h
dmlnYXRpb24tY2hhbmdlZC1pZnJhbWUuaHRtbCI7Ci0gICAgICAgIH0KLSAgICA8L3NjcmlwdD4K
LTwvaGVhZD4KLTxib2R5IG9ubG9hZD0ibG9hZGVkKCk7Ij4KLSAgICA8cD5UaGlzIHRlc3RzIHRo
YXQgZG9jdW1lbnRzIGNhbiBuYXZpZ2F0ZSB0aGUgbG9jYXRpb24gb2YgYW55IG9mIGl0J3Mgc3Vi
LWZyYW1lcyByZWdhcmRsZXNzIG9mIGRvbWFpbi48L3A+Ci0gICAgPGg0PkRPTUFJTjwvaDQ+Ci0g
ICAgPGlmcmFtZSBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS9mcmFtZU5hdmln
YXRpb24vcmVzb3VyY2VzL2lmcmFtZS13aXRoLWlubmVyLWZyYW1lLW9uLWZvcmVpZ24tZG9tYWlu
Lmh0bWwiPjwvaWZyYW1lPgotICAgIDxidXR0b24gb25jbGljaz0icGVyZm9ybVRlc3QoKSI+UGVy
Zm9ybSBUZXN0PC9idXR0b24+Ci08L2JvZHk+Ci08L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3NlY3VyaXR5L2ZyYW1lTmF2aWdhdGlvbi9yZXNvdXJjZXMvaWZyYW1lLXRoYXQt
YXNzaWducy1wYXJlbnQtbG9jYXRpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3NlY3VyaXR5L2ZyYW1lTmF2aWdhdGlvbi9yZXNvdXJjZXMvaWZyYW1lLXRoYXQt
YXNzaWducy1wYXJlbnQtbG9jYXRpb24uaHRtbAkocmV2aXNpb24gMjkwMTApCShmcm9tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvZnJhbWVOYXZpZ2F0aW9uL3Jlc291cmNlcy9pZnJh
bWUtdGhhdC1wZXJmb3Jtcy1wYXJlbnQtbmF2aWdhdGlvbi5odG1sOjI5MDEwKQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9mcmFtZU5hdmlnYXRpb24vcmVzb3VyY2VzL2lmcmFt
ZS10aGF0LWFzc2lnbnMtcGFyZW50LWxvY2F0aW9uLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyMiBAQAorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0PgorICAgICAgICBmdW5jdGlv
biBsb2FkZWQoKQorICAgICAgICB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5
VGFnTmFtZSgnaDQnKVswXS5pbm5lckhUTUwgPSBkb2N1bWVudC5kb21haW47CisgICAgICAgICAg
ICAvLyBBbGxvdyB0aGUgdXNlciB0byBjbGljayB0aGUgYnV0dG9uIGR1cmluZyBtYW51ZWwgcnVu
cy4KKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAg
ICAgICAgICAgcGVyZm9ybVRlc3QoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHBl
cmZvcm1UZXN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcGFyZW50LmxvY2F0aW9uID0gImh0
dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS9mcmFtZU5hdmlnYXRpb24vcmVzb3VyY2VzL25h
dmlnYXRpb24tY2hhbmdlZC1pZnJhbWUuaHRtbCI7CisgICAgICAgIH0KKyAgICA8L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5IG9ubG9hZD0ibG9hZGVkKCk7Ij4KKyAgICA8aDQ+RE9NQUlOPC9oND4K
KyAgICA8YnV0dG9uIG9uY2xpY2s9InBlcmZvcm1UZXN0KCk7Ij5QZXJmb3JtIFRlc3Q8L2J1dHRv
bj4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJp
dHkvZnJhbWVOYXZpZ2F0aW9uL3Jlc291cmNlcy9pZnJhbWUtdGhhdC1hc3NpZ25zLXBhcmVudC1s
b2NhdGlvbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJp
dHkvZnJhbWVOYXZpZ2F0aW9uL3Jlc291cmNlcy9pZnJhbWUtdGhhdC1hc3NpZ25zLXBhcmVudC1s
b2NhdGlvbi5odG1sCShyZXZpc2lvbiAyOTAxMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
c2VjdXJpdHkvZnJhbWVOYXZpZ2F0aW9uL3Jlc291cmNlcy9pZnJhbWUtdGhhdC1hc3NpZ25zLXBh
cmVudC1sb2NhdGlvbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC00LDE0ICs0LDE0IEBACiAgICAg
ICAgIGZ1bmN0aW9uIGxvYWRlZCgpCiAgICAgICAgIHsKICAgICAgICAgICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCdoNCcpWzBdLmlubmVySFRNTCA9IGRvY3VtZW50LmRvbWFpbjsK
LSAgICAgICAgICAgIC8vIEFsbG93IHRoZSB1c2VyIHRvIGNsaWNrIHRoZSBidXR0b24gZHVyaW5n
IG1hbnVlbCBydW5zLgorICAgICAgICAgICAgLy8gQWxsb3cgdGhlIHVzZXIgdG8gY2xpY2sgdGhl
IGJ1dHRvbiBkdXJpbmcgbWFudWFsIHJ1bnMuCiAgICAgICAgICAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQogICAgICAgICAgICAgICAgIHBlcmZvcm1UZXN0KCk7CiAgICAgICAg
IH0KIAogICAgICAgICBmdW5jdGlvbiBwZXJmb3JtVGVzdCgpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHBhcmVudC5sb2NhdGlvbiA9ICJodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkvZnJh
bWVOYXZpZ2F0aW9uL3Jlc291cmNlcy9uYXZpZ2F0aW9uLWNoYW5nZWQtaWZyYW1lLmh0bWwiOwor
ICAgICAgICAgICAgcGFyZW50LmxvY2F0aW9uID0gIm5hdmlnYXRpb24tY2hhbmdlZC1pZnJhbWUu
aHRtbCI7CiAgICAgICAgIH0KICAgICA8L3NjcmlwdD4KIDwvaGVhZD4KSW5kZXg6IExheW91dFRl
c3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvZnJhbWVOYXZpZ2F0aW9uL3Jlc291cmNlcy9pZnJhbWUt
dGhhdC1hc3NpZ25zLXRvcC1mcmFtZXMtMC1sb2NhdGlvbi5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvZnJhbWVOYXZpZ2F0aW9uL3Jlc291cmNlcy9p
ZnJhbWUtdGhhdC1hc3NpZ25zLXRvcC1mcmFtZXMtMC1sb2NhdGlvbi5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9mcmFtZU5hdmlnYXRpb24vcmVz
b3VyY2VzL2lmcmFtZS10aGF0LWFzc2lnbnMtdG9wLWZyYW1lcy0wLWxvY2F0aW9uLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjIgQEAKKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdD4K
KyAgICAgICAgZnVuY3Rpb24gbG9hZGVkKCkKKyAgICAgICAgeworICAgICAgICAgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2g0JylbMF0uaW5uZXJIVE1MID0gZG9jdW1lbnQuZG9t
YWluOworICAgICAgICAgICAgLy8gQWxsb3cgdGhlIHVzZXIgdG8gY2xpY2sgdGhlIGJ1dHRvbiBk
dXJpbmcgbWFudWFsIHJ1bnMuCisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKQorICAgICAgICAgICAgICAgIHBlcmZvcm1UZXN0KCk7CisgICAgICAgIH0KKworICAg
ICAgICBmdW5jdGlvbiBwZXJmb3JtVGVzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRvcC5m
cmFtZXNbMF0ubG9jYXRpb24gPSAibmF2aWdhdGlvbi1jaGFuZ2VkLWlmcmFtZS5odG1sIjsKKyAg
ICAgICAgfQorICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJsb2FkZWQoKTsi
PgorICAgIDxoND5ET01BSU48L2g0PgorICAgIDxidXR0b24gb25jbGljaz0icGVyZm9ybVRlc3Qo
KTsiPlBlcmZvcm0gVGVzdDwvYnV0dG9uPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9mcmFtZU5hdmlnYXRpb24vcmVzb3VyY2VzL2lmcmFt
ZS10aGF0LWNhbGxzLXdpbmRvdy1vcGVuLXRhcmdldC1mcmFtZS5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvZnJhbWVOYXZpZ2F0aW9uL3Jlc291cmNl
cy9pZnJhbWUtdGhhdC1jYWxscy13aW5kb3ctb3Blbi10YXJnZXQtZnJhbWUuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvZnJhbWVOYXZpZ2F0aW9u
L3Jlc291cmNlcy9pZnJhbWUtdGhhdC1jYWxscy13aW5kb3ctb3Blbi10YXJnZXQtZnJhbWUuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMiBAQAorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2Ny
aXB0PgorICAgICAgICBmdW5jdGlvbiBsb2FkZWQoKQorICAgICAgICB7CisgICAgICAgICAgICBk
b2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaDQnKVswXS5pbm5lckhUTUwgPSBkb2N1bWVu
dC5kb21haW47CisgICAgICAgICAgICAvLyBBbGxvdyB0aGUgdXNlciB0byBjbGljayB0aGUgYnV0
dG9uIGR1cmluZyBtYW51YWwgcnVucy4KKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgcGVyZm9ybVRlc3QoKTsKKyAgICAgICAgfQor
CisgICAgICAgIGZ1bmN0aW9uIHBlcmZvcm1UZXN0KCkKKyAgICAgICAgeworICAgICAgICAgICAg
d2luZG93Lm9wZW4oIm5hdmlnYXRpb24tY2hhbmdlZC1pZnJhbWUuaHRtbCIsICJ0YXJnZXRGcmFt
ZSIpOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9Imxv
YWRlZCgpOyI+CisgICAgPGg0PkRPTUFJTjwvaDQ+CisgICAgPGJ1dHRvbiBvbmNsaWNrPSJwZXJm
b3JtVGVzdCgpOyI+UGVyZm9ybSBUZXN0PC9idXR0b24+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2ZyYW1lTmF2aWdhdGlvbi9yZXNvdXJj
ZXMvaWZyYW1lLXRoYXQtcGVyZm9ybXMtcGFyZW50LW5hdmlnYXRpb24uaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2ZyYW1lTmF2aWdhdGlvbi9yZXNv
dXJjZXMvaWZyYW1lLXRoYXQtcGVyZm9ybXMtcGFyZW50LW5hdmlnYXRpb24uaHRtbAkocmV2aXNp
b24gMjkwMTApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2ZyYW1lTmF2aWdh
dGlvbi9yZXNvdXJjZXMvaWZyYW1lLXRoYXQtcGVyZm9ybXMtcGFyZW50LW5hdmlnYXRpb24uaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMSwyMiArMCwwIEBACi08aHRtbD4KLTxoZWFkPgotICAgIDxz
Y3JpcHQ+Ci0gICAgICAgIGZ1bmN0aW9uIGxvYWRlZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoNCcpWzBdLmlubmVySFRNTCA9IGRvY3Vt
ZW50LmRvbWFpbjsKLSAgICAgICAgICAgIC8vIEFsbG93IHRoZSB1c2VyIHRvIGNsaWNrIHRoZSBi
dXR0b24gZHVyaW5nIG1hbnVlbCBydW5zLgotICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKLSAgICAgICAgICAgICAgICBwZXJmb3JtVGVzdCgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgZnVuY3Rpb24gcGVyZm9ybVRlc3QoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBwYXJlbnQubG9jYXRpb24gPSAiaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L2ZyYW1l
TmF2aWdhdGlvbi9yZXNvdXJjZXMvbmF2aWdhdGlvbi1jaGFuZ2VkLWlmcmFtZS5odG1sIjsKLSAg
ICAgICAgfQotICAgIDwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgb25sb2FkPSJsb2FkZWQoKTsi
PgotICAgIDxoND5ET01BSU48L2g0PgotICAgIDxidXR0b24gb25jbGljaz0icGVyZm9ybVRlc3Qo
KTsiPlBlcmZvcm0gVGVzdDwvYnV0dG9uPgotPC9ib2R5PgotPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9mcmFtZU5hdmlnYXRpb24vcmVzb3VyY2VzL2lmcmFt
ZS10aGF0LXN1Ym1pdHMtZm9ybS10by10YXJnZXQtZnJhbWUuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2ZyYW1lTmF2aWdhdGlvbi9yZXNvdXJjZXMv
aWZyYW1lLXRoYXQtc3VibWl0cy1mb3JtLXRvLXRhcmdldC1mcmFtZS5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9mcmFtZU5hdmlnYXRpb24vcmVz
b3VyY2VzL2lmcmFtZS10aGF0LXN1Ym1pdHMtZm9ybS10by10YXJnZXQtZnJhbWUuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwyNSBAQAorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0Pgor
ICAgICAgICBmdW5jdGlvbiBsb2FkZWQoKQorICAgICAgICB7CisgICAgICAgICAgICBkb2N1bWVu
dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaDQnKVswXS5pbm5lckhUTUwgPSBkb2N1bWVudC5kb21h
aW47CisgICAgICAgICAgICAvLyBBbGxvdyB0aGUgdXNlciB0byBjbGljayB0aGUgYnV0dG9uIGR1
cmluZyBtYW51YWwgcnVucy4KKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgICAgICAgICAgcGVyZm9ybVRlc3QoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGZ1bmN0aW9uIHBlcmZvcm1UZXN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Zvcm0nKVswXS5zdWJtaXQoKTsKKyAgICAgICAgfQor
ICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJsb2FkZWQoKTsiPgorICAgIDxo
ND5ET01BSU48L2g0PgorICAgIDxidXR0b24gb25jbGljaz0icGVyZm9ybVRlc3QoKTsiPlBlcmZv
cm0gVGVzdDwvYnV0dG9uPgorICAgIDxmb3JtIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSJuYXZpZ2F0
aW9uLWNoYW5nZWQtaWZyYW1lLmh0bWwiIHRhcmdldD0idGFyZ2V0RnJhbWUiPgorICAgICAgICBU
aGlzIHRleHQgaXMgaW4gYSA8Y29kZT4mbHQ7Zm9ybSZndDs8L2NvZGU+LgorICAgIDwvZm9ybT4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
ZnJhbWVOYXZpZ2F0aW9uL3Jlc291cmNlcy9uYXZpZ2F0aW9uLWNoYW5nZWQtaWZyYW1lLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9mcmFtZU5hdmln
YXRpb24vcmVzb3VyY2VzL25hdmlnYXRpb24tY2hhbmdlZC1pZnJhbWUuaHRtbAkocmV2aXNpb24g
MjkwMTApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2ZyYW1lTmF2aWdhdGlv
bi9yZXNvdXJjZXMvbmF2aWdhdGlvbi1jaGFuZ2VkLWlmcmFtZS5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0xMSw2ICsxMSw2IEBACiA8L2hlYWQ+CiA8Ym9keSBvbmxvYWQ9ImZpcmVTZW50aW5lbCgp
OyI+CiAgICAgPGg0PkRPTUFJTjwvaDQ+Ci0gICAgPHA+UEFTU0VEOiBOYXZpZ2F0aW9uIHN1Y2Nl
ZWRlZC48L3A+CisgICAgPHA+TmF2aWdhdGlvbiBzdWNjZWVkZWQuPC9wPgogPC9ib2R5PgogPC9o
dG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30975</attachid>
            <date>2009-06-04 17:20:42 -0700</date>
            <delta_ts>2009-06-10 13:50:19 -0700</delta_ts>
            <desc>12161.1.txt</desc>
            <filename>12161.1.txt</filename>
            <type>text/plain</type>
            <size>4467</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDQzOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMDktMDYtMDQgIE1pY2hhZWwgTm9yZG1hbiAgPG1pY2hhZWxuQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQmV0dGVyIHN1cHBvcnQgZm9yIGZyYW1lcyBsb2FkZWQgd2l0aCBqYXZhc2NyaXB0IHVybHMu
IFRoZSBzY3JpcHQgY2FuIGVpdGhlcgorICAgICAgICBwcm9kdWNlIGEgc3RyaW5nIHJlc3VsdCB3
aGljaCBzaG91bGQgYmUgbG9hZGVkIGFzIHRoZSBmcmFtZXMgZG9jdW1lbnQsIG9yIHRoZQorICAg
ICAgICBzY3JpcHQgY2FuIGNvbnN0cnVjdCB0aGUgZG9jdW1lbnQgdmlhIGRvY3VtZW50Lm9wZW4o
KSBhbmQgZG9jdW1lbnQud3JpdGUoKSBkdXJpbmcKKyAgICAgICAgaXRzIGV4ZWN1dGlvbi4gVGhp
cyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBsYXR0ZXIgY2FzZS4KKworICAgICAgICBJZiB0
aGUgc2NyaXB0IHVybCBwcm9ncmFtbWF0aWNhbGx5IGNvbnN0cnVjdGVkIHRoZSBkb2N1bWVudCwg
ZG9uJ3Qgb3ZlcndyaXRlCisgICAgICAgIGl0IHdpdGggdGhlIHN0cmluZyByZXN1bHQuIENhbGxz
IHRvIGRvY3VtZW50Lm9wZW4oKSBvciBkb2N1bWVudC53cml0ZSgpIGR1cmluZworICAgICAgICBz
Y3JpcHQgZXhlY3V0aW9uIGluZGljYXRlIHRoYXQgc2NyaXB0IGNvbnN0cnVjdGVkIHRoZSBkb2N1
bWVudC4gVGhpcyBiZWhhdmlvcgorICAgICAgICBtYXRjaGVzIElFIGFuZCBGRi4KKyAgICAgICAg
CisgICAgICAgIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWls
P2lkPTEyMTYxCisKKyAgICAgICAgV0FSTklORzogTk8gVEVTVCBDQVNFUyBBRERFRCBPUiBDSEFO
R0VEICh3b3JraW5nIG9uIGl0KQorCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpGcmFtZUxvYWRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUxvYWRlcjo6ZGlkRXhwbGljaXRPcGVuKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyOjpleGVjdXRlSWZKYXZhU2NyaXB0VVJMKToKKyAgICAgICAgKiBsb2FkZXIv
RnJhbWVMb2FkZXIuaDoKKwogMjAwOS0wNi0wNCAgUGF1bCBHb2RhdmFyaSAgPHBhdWxAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNDQ0MzEpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw2ICsyNzcsNyBAQCBGcmFtZUxvYWRlcjo6
RnJhbWVMb2FkZXIoRnJhbWUqIGZyYW1lLCBGCiAgICAgLCBtX2luU3RvcEFsbExvYWRlcnMoZmFs
c2UpCiAgICAgLCBtX2lzRXhlY3V0aW5nSmF2YVNjcmlwdEZvcm1BY3Rpb24oZmFsc2UpCiAgICAg
LCBtX2lzUnVubmluZ1NjcmlwdChmYWxzZSkKKyAgICAsIG1fZGlkRXhwbGljaXRPcGVuV2hpbGVS
dW5uaW5nU2NyaXB0KGZhbHNlKQogICAgICwgbV9kaWRDYWxsSW1wbGljaXRDbG9zZShmYWxzZSkK
ICAgICAsIG1fd2FzVW5sb2FkRXZlbnRFbWl0dGVkKGZhbHNlKQogICAgICwgbV91bmxvYWRFdmVu
dEJlaW5nRGlzcGF0Y2hlZChmYWxzZSkKQEAgLTc1OCw2ICs3NTksOSBAQCB2b2lkIEZyYW1lTG9h
ZGVyOjpkaWRFeHBsaWNpdE9wZW4oKQogICAgIGNhbmNlbFJlZGlyZWN0aW9uKCk7IAogICAgIGlm
IChtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSAhPSBibGFua1VSTCgpKQogICAgICAgICBtX1VS
TCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpOworICAgIAorICAgIGlmIChtX2lzUnVubmlu
Z1NjcmlwdCkKKyAgICAgICAgbV9kaWRFeHBsaWNpdE9wZW5XaGlsZVJ1bm5pbmdTY3JpcHQgPSB0
cnVlOwogfQogCiBib29sIEZyYW1lTG9hZGVyOjpleGVjdXRlSWZKYXZhU2NyaXB0VVJMKGNvbnN0
IEtVUkwmIHVybCwgYm9vbCB1c2VyR2VzdHVyZSwgYm9vbCByZXBsYWNlRG9jdW1lbnQpCkBAIC03
NjgsOSArNzcyLDE4IEBAIGJvb2wgRnJhbWVMb2FkZXI6OmV4ZWN1dGVJZkphdmFTY3JpcHRVUkwK
ICAgICBpZiAobV9mcmFtZS0+cGFnZSgpICYmICFtX2ZyYW1lLT5wYWdlKCktPmphdmFTY3JpcHRV
UkxzQXJlQWxsb3dlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAorICAgIG1fZGlkRXhwbGlj
aXRPcGVuV2hpbGVSdW5uaW5nU2NyaXB0ID0gZmFsc2U7CiAgICAgU3RyaW5nIHNjcmlwdCA9IGRl
Y29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwuc3RyaW5nKCkuc3Vic3RyaW5nKHN0cmxlbigiamF2
YXNjcmlwdDoiKSkpOwogICAgIFNjcmlwdFZhbHVlIHJlc3VsdCA9IGV4ZWN1dGVTY3JpcHQoc2Ny
aXB0LCB1c2VyR2VzdHVyZSk7CiAKKyAgICAvLyBJZiB0aGUgc2NyaXB0IHVybCBwcm9ncmFtbWF0
aWNhbGx5IGNvbnN0cnVjdGVkIHRoZSBkb2N1bWVudCwgZG9uJ3Qgb3ZlcndyaXRlCisgICAgLy8g
aXQgd2l0aCB0aGUgc3RyaW5nIHJlc3VsdC4gQ2FsbHMgdG8gZG9jdW1lbnQub3BlbigpIG9yIGRv
Y3VtZW50LndyaXRlKCkgZHVyaW5nCisgICAgLy8gc2NyaXB0IGV4ZWN1dGlvbiBpbmRpY2F0ZSB0
aGF0IHNjcmlwdCBjb25zdHJ1Y3RlZCB0aGUgZG9jdW1lbnQuIFRoaXMgYmVoYXZpb3IKKyAgICAv
LyBtYXRjaGVzIElFIGFuZCBGRi4KKyAgICAvLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2hy
b21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMjE2MQorICAgIGlmIChtX2RpZEV4cGxpY2l0T3Blbldo
aWxlUnVubmluZ1NjcmlwdCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICBTdHJpbmcgc2Ny
aXB0UmVzdWx0OwogICAgIGlmICghcmVzdWx0LmdldFN0cmluZyhzY3JpcHRSZXN1bHQpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc3OCwxMCArNzkxLDE0IEBAIGJvb2wgRnJhbWVMb2FkZXI6
OmV4ZWN1dGVJZkphdmFTY3JpcHRVUkwKICAgICBTZWN1cml0eU9yaWdpbiogY3VycmVudFNlY3Vy
aXR5T3JpZ2luID0gMDsKICAgICBjdXJyZW50U2VjdXJpdHlPcmlnaW4gPSBtX2ZyYW1lLT5kb2N1
bWVudCgpLT5zZWN1cml0eU9yaWdpbigpOwogCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBhbHdh
eXMgcmVwbGFjZSB0aGUgZG9jdW1lbnQsIGJ1dCBkb2luZyBzbwotICAgIC8vICAgICAgICBzeW5j
aHJvbm91c2x5IGNhbiBjYXVzZSBjcmFzaGVzOgorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWx3
YXlzIHJlcGxhY2UgdGhlIGRvY3VtZW50IHdpdGggdGhlIHNjcmlwdCByZXN1bHQsCisgICAgLy8g
ICAgICAgIGJ1dCBkb2luZyBzbyBzeW5jaHJvbm91c2x5IGNhbiBjYXVzZSBjcmFzaGVzOgogICAg
IC8vICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc4Mgog
ICAgIGlmIChyZXBsYWNlRG9jdW1lbnQpIHsKKyAgICAgICAgLy8gRklYTUU6IEluIHNvbWUgY2Fz
ZXMsIHN0b3BBbGxMb2FkZXJzIGZhaWxzIHRvIGdldCB0aGVtIGFsbCwgdGhpcyBhZGRpdGlvbmFs
CisgICAgICAgIC8vIGNhbGwgdG8gc3RvcExvYWRpbmcgZG9lcy4gVGhpcyBtYXkgd2FycmFudCBh
IG1vcmUgZ2VuZXJhbCBzb2x1dGlvbi4KKyAgICAgICAgLy8gaHR0cDovL2NvZGUuZ29vZ2xlLmNv
bS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTIxNjEKKyAgICAgICAgc3RvcExvYWRpbmco
ZmFsc2UpOwogICAgICAgICBzdG9wQWxsTG9hZGVycygpOwogICAgICAgICBiZWdpbihtX1VSTCwg
dHJ1ZSwgY3VycmVudFNlY3VyaXR5T3JpZ2luKTsKICAgICAgICAgd3JpdGUoc2NyaXB0UmVzdWx0
KTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkocmV2aXNpb24gNDQ0MzEpCisrKyBXZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01ODAsNiArNTgwLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGJvb2wgbV9pc0V4ZWN1dGluZ0phdmFTY3JpcHRG
b3JtQWN0aW9uOwogICAgICAgICBib29sIG1faXNSdW5uaW5nU2NyaXB0OworICAgICAgICBib29s
IG1fZGlkRXhwbGljaXRPcGVuV2hpbGVSdW5uaW5nU2NyaXB0OwogCiAgICAgICAgIFN0cmluZyBt
X3Jlc3BvbnNlTUlNRVR5cGU7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>